diff --git a/.gitignore b/.gitignore index e69de29b..f1a6e2dd 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,4 @@ +.agents/ +node_modules/ +*.mcaddon +.gigalith/ diff --git a/BP/blocks/air_lock_frame.json b/BP/blocks/air_lock_frame.json new file mode 100644 index 00000000..0c941731 --- /dev/null +++ b/BP/blocks/air_lock_frame.json @@ -0,0 +1,19 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:airlock_frame", + "menu_category": { "category": "items" } + }, + "components": { + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:material_instances": { + "*": { "render_method": "opaque", "texture": "air_lock_frame" } + }, + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:destructible_by_explosion": false + } + } +} diff --git a/BP/blocks/air_lock_seal.json b/BP/blocks/air_lock_seal.json new file mode 100644 index 00000000..a17827d4 --- /dev/null +++ b/BP/blocks/air_lock_seal.json @@ -0,0 +1,19 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:airlock_seal" + }, + "components": { + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:material_instances": { + "*": { "render_method": "blend", "texture": "air_lock_seal" } + }, + "minecraft:collision_box": false, + "minecraft:selection_box": false, + "minecraft:destructible_by_mining": false, + "minecraft:destructible_by_explosion": false, + "minecraft:light_emission": 15 + } + } +} diff --git a/BP/blocks/communications_dish.json b/BP/blocks/communications_dish.json index c2065210..92e5b914 100644 --- a/BP/blocks/communications_dish.json +++ b/BP/blocks/communications_dish.json @@ -1,18 +1,19 @@ { - "format_version": "1.21.50", + "format_version": "1.26.20", "minecraft:block": { "description": { "identifier": "cosmos:communications_dish", "menu_category": { "category": "items" } }, "components": { - "minecraft:custom_components":["cosmos:communication_dish"], + "minecraft:material_instances": { "*": { "texture": "dishbase", "render_method": "alpha_test"} }, "minecraft:loot": "loot_tables/blocks/dishbase.json", "minecraft:geometry": "minecraft:geometry.full_block", "minecraft:destructible_by_explosion": false, + "cosmos:dishbase": {}, "minecraft:destructible_by_mining": { "seconds_to_destroy": 0.5 } diff --git a/BP/blocks/fluid_pipe/fluid_pipe.json b/BP/blocks/fluid_pipe/fluid_pipe.json index dd3aea3b..7444ca92 100644 --- a/BP/blocks/fluid_pipe/fluid_pipe.json +++ b/BP/blocks/fluid_pipe/fluid_pipe.json @@ -16,7 +16,6 @@ } }, "components": { - "tag:fluid_pipe": {}, //"minecraft:display_name": "%tile.fluid_pipe.name\n§7%tile.fluid_pipe.description", "minecraft:material_instances": { "*": { "texture": "fluid_pipe", "render_method": "blend" }, @@ -24,12 +23,13 @@ "color": { "texture": "fluid_pipe_color", "render_method": "blend" }, "pull": { "texture": "fluid_pipe_pull", "render_method": "blend" } }, - "minecraft:collision_box": { "sorigin": [-2.5, 5.5, -2.5], "size": [5, 5, 5] }, + "minecraft:collision_box": { "origin": [-2.5, 5.5, -2.5], "size": [5, 5, 5] }, "minecraft:selection_box": { "origin": [-5, 3, -5], "size": [10, 10, 10] }, "minecraft:light_dampening": 0, "minecraft:loot": "loot_tables/blocks/fluid_pipe.json", "minecraft:destructible_by_mining": { "seconds_to_destroy": 0.5 }, "minecraft:destructible_by_explosion": false, + "tag:fluid_pipe": {}, "cosmos:fluid_pipe": {}, "minecraft:geometry": { "identifier": "geometry.fluid_pipe", diff --git a/BP/blocks/fluid_pipe/fluid_pipe_fuel.json b/BP/blocks/fluid_pipe/fluid_pipe_fuel.json index 6102d89c..0e23e95d 100644 --- a/BP/blocks/fluid_pipe/fluid_pipe_fuel.json +++ b/BP/blocks/fluid_pipe/fluid_pipe_fuel.json @@ -15,19 +15,19 @@ } }, "components": { - "tag:fluid_pipe": {}, "minecraft:material_instances": { "*": { "texture": "fluid_pipe", "render_method": "blend" }, "fluid": { "texture": "fuel", "render_method": "blend" }, "color": { "texture": "fluid_pipe_color", "render_method": "blend" }, "pull": { "texture": "fluid_pipe_pull", "render_method": "blend" } }, - "minecraft:collision_box": { "sorigin": [-2.5, 5.5, -2.5], "size": [5, 5, 5] }, + "minecraft:collision_box": { "origin": [-2.5, 5.5, -2.5], "size": [5, 5, 5] }, "minecraft:selection_box": { "origin": [-5, 3, -5], "size": [10, 10, 10] }, "minecraft:light_dampening": 0, "minecraft:loot": "loot_tables/blocks/fluid_pipe.json", "minecraft:destructible_by_mining": { "seconds_to_destroy": 0.5 }, "minecraft:destructible_by_explosion": false, + "tag:fluid_pipe": {}, "cosmos:fluid_pipe": {}, "minecraft:geometry": { "identifier": "geometry.fluid_pipe", diff --git a/BP/blocks/fluid_pipe/fluid_pipe_o2.json b/BP/blocks/fluid_pipe/fluid_pipe_o2.json index 84139b4a..9a5d9fe3 100644 --- a/BP/blocks/fluid_pipe/fluid_pipe_o2.json +++ b/BP/blocks/fluid_pipe/fluid_pipe_o2.json @@ -15,19 +15,19 @@ } }, "components": { - "tag:fluid_pipe": {}, "minecraft:material_instances": { "*": { "texture": "fluid_pipe", "render_method": "blend" }, "fluid": { "texture": "liquid_oxygen", "render_method": "blend" }, "color": { "texture": "fluid_pipe_color", "render_method": "blend" }, "pull": { "texture": "fluid_pipe_pull", "render_method": "blend" } }, - "minecraft:collision_box": { "sorigin": [-2.5, 5.5, -2.5], "size": [5, 5, 5] }, + "minecraft:collision_box": { "origin": [-2.5, 5.5, -2.5], "size": [5, 5, 5] }, "minecraft:selection_box": { "origin": [-5, 3, -5], "size": [10, 10, 10] }, "minecraft:light_dampening": 0, "minecraft:loot": "loot_tables/blocks/fluid_pipe.json", "minecraft:destructible_by_mining": { "seconds_to_destroy": 0.5 }, "minecraft:destructible_by_explosion": false, + "tag:fluid_pipe": {}, "cosmos:fluid_pipe": {}, "minecraft:geometry": { "identifier": "geometry.fluid_pipe", diff --git a/BP/blocks/fluid_pipe/fluid_pipe_oil.json b/BP/blocks/fluid_pipe/fluid_pipe_oil.json index def12429..f5cfbc65 100644 --- a/BP/blocks/fluid_pipe/fluid_pipe_oil.json +++ b/BP/blocks/fluid_pipe/fluid_pipe_oil.json @@ -15,19 +15,19 @@ } }, "components": { - "tag:fluid_pipe": {}, "minecraft:material_instances": { "*": { "texture": "fluid_pipe", "render_method": "blend" }, "fluid": { "texture": "oil", "render_method": "blend" }, "color": { "texture": "fluid_pipe_color", "render_method": "blend" }, "pull": { "texture": "fluid_pipe_pull", "render_method": "blend" } }, - "minecraft:collision_box": { "sorigin": [-2.5, 5.5, -2.5], "size": [5, 5, 5] }, + "minecraft:collision_box": { "origin": [-2.5, 5.5, -2.5], "size": [5, 5, 5] }, "minecraft:selection_box": { "origin": [-5, 3, -5], "size": [10, 10, 10] }, "minecraft:light_dampening": 0, "minecraft:loot": "loot_tables/blocks/fluid_pipe.json", "minecraft:destructible_by_mining": { "seconds_to_destroy": 0.5 }, "minecraft:destructible_by_explosion": false, + "tag:fluid_pipe": {}, "cosmos:fluid_pipe": {}, "minecraft:geometry": { "identifier": "geometry.fluid_pipe", diff --git a/BP/blocks/machines/advanced_launch_controller.json b/BP/blocks/machines/advanced_launch_controller.json new file mode 100644 index 00000000..d5c282e3 --- /dev/null +++ b/BP/blocks/machines/advanced_launch_controller.json @@ -0,0 +1,52 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:advanced_launch_controller", + "menu_category": { "category": "items" }, + "traits": { + "minecraft:placement_direction": { + "enabled_states": ["minecraft:cardinal_direction"], + "y_rotation_offset": 180 + } + } + }, + "components": { + "minecraft:display_name": "%tile.cosmos:advanced_launch_controller.name\n§7%tile.advanced_launch_controller.description", + "tag:machine": {}, + "cosmos:machine": {}, + "minecraft:destructible_by_mining": { "seconds_to_destroy": 0.5 }, + "minecraft:destructible_by_explosion": false, + "minecraft:movable": { "movement_type": "immovable" }, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:material_instances": { + "up": { "render_method": "opaque", "texture": "machine_blank" }, + "down": { "render_method": "opaque", "texture": "machine_blank" }, + "north": { "render_method": "opaque", "texture": "launch_controller" }, + "east": { "render_method": "opaque", "texture": "energy_input" }, + "south": { "render_method": "opaque", "texture": "launch_controller" }, + "west": { "render_method": "opaque", "texture": "machine_blank" } + } + }, + "permutations": [ + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'south'", + "components": { + "minecraft:transformation": { "rotation": [0, 180, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'west'", + "components": { + "minecraft:transformation": { "rotation": [0, 90, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'east'", + "components": { + "minecraft:transformation": { "rotation": [0, -90, 0] } + } + } + ] + } +} diff --git a/BP/blocks/machines/airlock_controller.json b/BP/blocks/machines/airlock_controller.json new file mode 100644 index 00000000..19f5274e --- /dev/null +++ b/BP/blocks/machines/airlock_controller.json @@ -0,0 +1,21 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:airlock_controller", + "menu_category": { "category": "items" } + }, + "components": { + "tag:machine": {}, + "cosmos:machine": {}, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:material_instances": { + "*": { "render_method": "opaque", "texture": "air_lock_controller" } + }, + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:destructible_by_explosion": false + } + } +} diff --git a/BP/blocks/machines/astro_miner_dock.json b/BP/blocks/machines/astro_miner_dock.json new file mode 100644 index 00000000..f22f934e --- /dev/null +++ b/BP/blocks/machines/astro_miner_dock.json @@ -0,0 +1,49 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:astro_miner_dock", + "menu_category": { "category": "items" }, + "traits": { + "minecraft:placement_direction": { + "enabled_states": ["minecraft:cardinal_direction"], + "y_rotation_offset": 180 + } + } + }, + "components": { + "minecraft:display_name": "%tile.miner_base.name\n§7%tile.miner_base.description", + "tag:machine": {}, + "cosmos:machine": {}, + "minecraft:destructible_by_explosion": false, + "minecraft:movable": { "movement_type": "immovable" }, + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:material_instances": { + "*": { "render_method": "opaque", "texture": "astro_miner_base" } + } + }, + "permutations": [ + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'south'", + "components": { + "minecraft:transformation": { "rotation": [0, 180, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'west'", + "components": { + "minecraft:transformation": { "rotation": [0, 90, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'east'", + "components": { + "minecraft:transformation": { "rotation": [0, -90, 0] } + } + } + ] + } +} diff --git a/BP/blocks/machines/cargo_loader.json b/BP/blocks/machines/cargo_loader.json new file mode 100644 index 00000000..d0f9af27 --- /dev/null +++ b/BP/blocks/machines/cargo_loader.json @@ -0,0 +1,53 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:cargo_loader", + "menu_category": { "category": "items" }, + "traits": { + "minecraft:placement_direction": { + "enabled_states": ["minecraft:cardinal_direction"], + "y_rotation_offset": 180 + } + } + }, + "components": { + "tag:machine": {}, + "cosmos:machine": {}, + "minecraft:destructible_by_explosion": false, + "minecraft:movable": { "movement_type": "immovable" }, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:material_instances": { + "up": { "render_method": "opaque", "texture": "machine_blank" }, + "down": { "render_method": "opaque", "texture": "machine_blank" }, + "north": { "render_method": "opaque", "texture": "cargo_loader" }, + "east": { "render_method": "opaque", "texture": "energy_input" }, + "south": { "render_method": "opaque", "texture": "cargo_loader" }, + "west": { "render_method": "opaque", "texture": "machine_side" } + } + }, + "permutations": [ + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'south'", + "components": { + "minecraft:transformation": { "rotation": [0, 180, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'west'", + "components": { + "minecraft:transformation": { "rotation": [0, 90, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'east'", + "components": { + "minecraft:transformation": { "rotation": [0, -90, 0] } + } + } + ] + } +} diff --git a/BP/blocks/machines/cargo_unloader.json b/BP/blocks/machines/cargo_unloader.json new file mode 100644 index 00000000..6e26c3a3 --- /dev/null +++ b/BP/blocks/machines/cargo_unloader.json @@ -0,0 +1,53 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:cargo_unloader", + "menu_category": { "category": "items" }, + "traits": { + "minecraft:placement_direction": { + "enabled_states": ["minecraft:cardinal_direction"], + "y_rotation_offset": 180 + } + } + }, + "components": { + "tag:machine": {}, + "cosmos:machine": {}, + "minecraft:destructible_by_explosion": false, + "minecraft:movable": { "movement_type": "immovable" }, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:material_instances": { + "up": { "render_method": "opaque", "texture": "machine_blank" }, + "down": { "render_method": "opaque", "texture": "machine_blank" }, + "north": { "render_method": "opaque", "texture": "cargo_unloader" }, + "east": { "render_method": "opaque", "texture": "energy_input" }, + "south": { "render_method": "opaque", "texture": "cargo_unloader" }, + "west": { "render_method": "opaque", "texture": "machine_side" } + } + }, + "permutations": [ + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'south'", + "components": { + "minecraft:transformation": { "rotation": [0, 180, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'west'", + "components": { + "minecraft:transformation": { "rotation": [0, 90, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'east'", + "components": { + "minecraft:transformation": { "rotation": [0, -90, 0] } + } + } + ] + } +} diff --git a/BP/blocks/machines/unready_machines/chromatic_applicator.json b/BP/blocks/machines/chromatic_applicator.json similarity index 95% rename from BP/blocks/machines/unready_machines/chromatic_applicator.json rename to BP/blocks/machines/chromatic_applicator.json index bc113857..3295978c 100644 --- a/BP/blocks/machines/unready_machines/chromatic_applicator.json +++ b/BP/blocks/machines/chromatic_applicator.json @@ -13,7 +13,8 @@ }, "components": { "tag:machine": {}, - // "cosmos:machine": {}, + "cosmos:machine": {}, + "minecraft:display_name": "Chromatic Applicator", "minecraft:destructible_by_mining": { "seconds_to_destroy": 0.5 }, "minecraft:destructible_by_explosion": false, "minecraft:movable": { "movement_type": "immovable" }, diff --git a/BP/blocks/machines/geothermal_generator.json b/BP/blocks/machines/geothermal_generator.json new file mode 100644 index 00000000..c58c5786 --- /dev/null +++ b/BP/blocks/machines/geothermal_generator.json @@ -0,0 +1,56 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:geothermal_generator", + "menu_category": { "category": "items" }, + "states": { + "cosmos:is_active": [false, true] + }, + "traits": { + "minecraft:placement_direction": { + "enabled_states": ["minecraft:cardinal_direction"], + "y_rotation_offset": 180 + } + } + }, + "components": { + "tag:machine": {}, + "cosmos:machine": {}, + "minecraft:destructible_by_explosion": false, + "minecraft:movable": { "movement_type": "immovable" }, + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:material_instances": { + "up": { "render_method": "opaque", "texture": "geothermal_generator_top" }, + "down": { "render_method": "opaque", "texture": "machine_blank" }, + "north": { "render_method": "opaque", "texture": "geothermal_generator" }, + "east": { "render_method": "opaque", "texture": "energy_output" }, + "south": { "render_method": "opaque", "texture": "machine_side" }, + "west": { "render_method": "opaque", "texture": "machine_side" } + } + }, + "permutations": [ + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'south'", + "components": { + "minecraft:transformation": { "rotation": [0, 180, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'west'", + "components": { + "minecraft:transformation": { "rotation": [0, 90, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'east'", + "components": { + "minecraft:transformation": { "rotation": [0, -90, 0] } + } + } + ] + } +} diff --git a/BP/blocks/machines/unready_machines/launch_controller.json b/BP/blocks/machines/launch_controller.json similarity index 92% rename from BP/blocks/machines/unready_machines/launch_controller.json rename to BP/blocks/machines/launch_controller.json index 6554fc50..c9b9ab99 100644 --- a/BP/blocks/machines/unready_machines/launch_controller.json +++ b/BP/blocks/machines/launch_controller.json @@ -12,8 +12,9 @@ } }, "components": { + "minecraft:display_name": "%tile.cosmos:launch_controller.name\n§7%tile.launch_controller.description", "tag:machine": {}, - // "cosmos:machine": {}, + "cosmos:machine": {}, "minecraft:destructible_by_mining": { "seconds_to_destroy": 0.5 }, "minecraft:destructible_by_explosion": false, "minecraft:movable": { "movement_type": "immovable" }, @@ -48,4 +49,4 @@ } ] } -} \ No newline at end of file +} diff --git a/BP/blocks/machines/oxygen_detector.json b/BP/blocks/machines/oxygen_detector.json new file mode 100644 index 00000000..8ab40930 --- /dev/null +++ b/BP/blocks/machines/oxygen_detector.json @@ -0,0 +1,45 @@ +{ + "format_version": "1.26.10", + "minecraft:block": { + "description": { + "identifier": "cosmos:oxygen_detector", + "menu_category": { "category": "items" }, + "states": { + "cosmos:active": [false, true] + } + }, + "components": { + "cosmos:oxygen_detector": {}, + "minecraft:display_name": "%tile.oxygen_detector.name", + "minecraft:tick": { + "interval_range": [ 50, 50 ] + }, + "minecraft:destructible_by_explosion": false, + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:material_instances": { + "*": { "render_method": "opaque", "texture": "oxygen_detector" } + } + }, + "permutations": [ + { + "condition": "query.block_state('cosmos:active')", + "components": { + "minecraft:redstone_producer": { + "power": 15 + } + } + }, + { + "condition": "!query.block_state('cosmos:active')", + "components": { + "minecraft:redstone_producer": { + "power": 0 + } + } + } + ] + } +} diff --git a/BP/blocks/machines/oxygen_sealer.json b/BP/blocks/machines/oxygen_sealer.json new file mode 100644 index 00000000..0fe50ee9 --- /dev/null +++ b/BP/blocks/machines/oxygen_sealer.json @@ -0,0 +1,54 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:oxygen_sealer", + "menu_category": { "category": "items" }, + "traits": { + "minecraft:placement_direction": { + "enabled_states": ["minecraft:cardinal_direction"], + "y_rotation_offset": 180 + } + } + }, + "components": { + "tag:machine": {}, + "minecraft:display_name": "%tile.sealer.name\n§7%tile.sealer.description", + "cosmos:machine": {}, + "minecraft:destructible_by_explosion": false, + "minecraft:movable": { "movement_type": "immovable" }, + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:material_instances": { + "up": { "render_method": "opaque", "texture": "oxygen_sealer" }, + "down": { "render_method": "opaque", "texture": "oxygen_sealer" }, + "north": { "render_method": "opaque", "texture": "oxygen_sealer" }, + "east": { "render_method": "opaque", "texture": "energy_input" }, + "south": { "render_method": "opaque", "texture": "oxygen_sealer" }, + "west": { "render_method": "opaque", "texture": "oxygen_input" } + } + }, + "permutations": [ + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'south'", + "components": { + "minecraft:transformation": { "rotation": [0, 180, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'west'", + "components": { + "minecraft:transformation": { "rotation": [0, 90, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'east'", + "components": { + "minecraft:transformation": { "rotation": [0, -90, 0] } + } + } + ] + } +} diff --git a/BP/blocks/machines/short_range_telepad.json b/BP/blocks/machines/short_range_telepad.json new file mode 100644 index 00000000..0e8b8900 --- /dev/null +++ b/BP/blocks/machines/short_range_telepad.json @@ -0,0 +1,49 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:short_range_telepad", + "menu_category": { "category": "items" }, + "traits": { + "minecraft:placement_direction": { + "enabled_states": ["minecraft:cardinal_direction"], + "y_rotation_offset": 180 + } + } + }, + "components": { + "tag:machine": {}, + "minecraft:display_name": "Short Range Telepad", + "cosmos:machine": {}, + "minecraft:destructible_by_explosion": false, + "minecraft:movable": { "movement_type": "immovable" }, + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:material_instances": { + "*": { "render_method": "opaque", "texture": "machine_side" } + } + }, + "permutations": [ + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'south'", + "components": { + "minecraft:transformation": { "rotation": [0, 180, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'west'", + "components": { + "minecraft:transformation": { "rotation": [0, 90, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'east'", + "components": { + "minecraft:transformation": { "rotation": [0, -90, 0] } + } + } + ] + } +} diff --git a/BP/blocks/machines/unready_machines/solar_array_controller.json b/BP/blocks/machines/solar_array_controller.json similarity index 90% rename from BP/blocks/machines/unready_machines/solar_array_controller.json rename to BP/blocks/machines/solar_array_controller.json index 03e8a02c..d7a7db22 100644 --- a/BP/blocks/machines/unready_machines/solar_array_controller.json +++ b/BP/blocks/machines/solar_array_controller.json @@ -4,16 +4,16 @@ "description": { "identifier": "cosmos:solar_array_controller", "menu_category": { "category": "items" }, - "traits": { - "minecraft:placement_direction": { - "enabled_states": ["minecraft:cardinal_direction"], - "y_rotation_offset": 180 + "traits": { + "minecraft:placement_direction": { + "enabled_states": ["minecraft:cardinal_direction"], + "y_rotation_offset": 180 + } } - } }, "components": { "tag:machine": {}, - // "cosmos:machine": {}, + "cosmos:machine": {}, "minecraft:destructible_by_explosion": false, "minecraft:movable": { "movement_type": "immovable" }, "minecraft:destructible_by_mining": { @@ -58,4 +58,4 @@ } ] } -} \ No newline at end of file +} diff --git a/BP/blocks/machines/terraformer.json b/BP/blocks/machines/terraformer.json new file mode 100644 index 00000000..3edb6839 --- /dev/null +++ b/BP/blocks/machines/terraformer.json @@ -0,0 +1,53 @@ +{ + "format_version": "1.21.100", + "minecraft:block": { + "description": { + "identifier": "cosmos:terraformer", + "menu_category": { "category": "items" }, + "traits": { + "minecraft:placement_direction": { + "enabled_states": ["minecraft:cardinal_direction"], + "y_rotation_offset": 180 + } + } + }, + "components": { + "tag:machine": {}, + "cosmos:machine": {}, + "minecraft:destructible_by_explosion": false, + "minecraft:movable": { "movement_type": "immovable" }, + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 0.5 + }, + "minecraft:material_instances": { + "up": { "render_method": "opaque", "texture": "machine_blank" }, + "down": { "render_method": "opaque", "texture": "machine_blank" }, + "north": { "render_method": "opaque", "texture": "terraformer" }, + "east": { "render_method": "opaque", "texture": "energy_input" }, + "south": { "render_method": "opaque", "texture": "machine_side" }, + "west": { "render_method": "opaque", "texture": "machine_side" } + } + }, + "permutations": [ + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'south'", + "components": { + "minecraft:transformation": { "rotation": [0, 180, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'west'", + "components": { + "minecraft:transformation": { "rotation": [0, 90, 0] } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'east'", + "components": { + "minecraft:transformation": { "rotation": [0, -90, 0] } + } + } + ] + } +} diff --git a/BP/blocks/machines/unready_machines/air_lock_controller.json b/BP/blocks/machines/unready_machines/air_lock_controller.json deleted file mode 100644 index f29f21b6..00000000 --- a/BP/blocks/machines/unready_machines/air_lock_controller.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "format_version": "1.21.100", - "minecraft:block": { - "description": { - "identifier": "cosmos:air_lock_controller", - "menu_category": { "category": "items" } - }, - "components": {} - } -} \ No newline at end of file diff --git a/BP/blocks/unready_blocks/air_lock_frame.json b/BP/blocks/unready_blocks/air_lock_frame.json deleted file mode 100644 index d0816b5a..00000000 --- a/BP/blocks/unready_blocks/air_lock_frame.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "format_version": "1.20.80", - "minecraft:block": { - "description": { - "identifier": "cosmos:air_lock_frame", - "menu_category": { "category": "items" } - }, - "components": {} - } -} \ No newline at end of file diff --git a/BP/blocks/unready_blocks/oxygen_detector.json b/BP/blocks/unready_blocks/oxygen_detector.json deleted file mode 100644 index 3e6c4bfc..00000000 --- a/BP/blocks/unready_blocks/oxygen_detector.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "format_version": "1.20.80", - "minecraft:block": { - "description": { - "identifier": "cosmos:oxygen_detector", - "menu_category": { "category": "items" } - }, - "components": {} - } -} \ No newline at end of file diff --git a/BP/blocks/utility/stairs_collision.json b/BP/blocks/utility/stairs_collision.json new file mode 100644 index 00000000..b7ad41c7 --- /dev/null +++ b/BP/blocks/utility/stairs_collision.json @@ -0,0 +1,208 @@ +{ + "format_version": "1.21.70", + "minecraft:block": { + "description": { + "identifier": "cosmos:stairs_collision", + "menu_category": { + "category": "none", + "is_hidden_in_commands": true + }, + "traits": { + "minecraft:placement_position": { + "enabled_states": [ + "minecraft:vertical_half" + ] + }, + "minecraft:placement_direction": { + "enabled_states": [ + "minecraft:cardinal_direction" + ] + } + }, + "states": { + "cosmos:corner": [ + false, + true + ] + } + }, + "components": { + + "minecraft:geometry": "minecraft:geometry.full_block", + "minecraft:liquid_detection": { + "detection_rules": [ + { + "liquid_type": "water", + "can_contain_liquid": true, + "on_liquid_touches": "no_reaction" + } + ] + }, + "minecraft:material_instances": { + "*": { + "texture": "empty", + "render_method": "blend" + } + }, + "minecraft:destruction_particles": { + "texture": "empty" + }, + "minecraft:loot": "loot_tables/empty.json", + "minecraft:selection_box": false, + "minecraft:destructible_by_explosion": false, + "minecraft:destructible_by_mining": { + "seconds_to_destroy": 3, + "item_specific_speeds": [ + { + "item": "minecraft:wooden_axe", + "destroy_speed": 1.5 + }, + { + "item": "minecraft:stone_axe", + "destroy_speed": 0.75 + }, + { + "item": "minecraft:iron_axe", + "destroy_speed": 0.5 + }, + { + "item": "minecraft:diamond_axe", + "destroy_speed": 0.4 + }, + { + "item": "minecraft:netherite_axe", + "destroy_speed": 0.35 + }, + { + "item": "minecraft:golden_axe", + "destroy_speed": 0.25 + } + ] + }, + "minecraft:redstone_conductivity": { + "allows_redstone_to_step_down": false, + "redstone_conductor": false + }, + "minecraft:replaceable": {}, + "tag:tap:no_connect": {} + }, + "permutations": [ + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'north'", + "components": { + "minecraft:transformation": { + "rotation": [ + 0, + 0, + 0 + ] + } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'west'", + "components": { + "minecraft:transformation": { + "rotation": [ + 0, + 90, + 0 + ] + } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'south'", + "components": { + "minecraft:transformation": { + "rotation": [ + 0, + 180, + 0 + ] + } + } + }, + { + "condition": "q.block_state('minecraft:cardinal_direction') == 'east'", + "components": { + "minecraft:transformation": { + "rotation": [ + 0, + -90, + 0 + ] + } + } + }, + { + "condition": "q.block_state('minecraft:vertical_half') == 'bottom' && !q.block_state('cosmos:corner')", + "components": { + "minecraft:collision_box": { + "origin": [ + -8, + 0, + -8 + ], + "size": [ + 16, + 0.001, + 8 + ] + } + } + }, + { + "condition": "q.block_state('minecraft:vertical_half') == 'top' && !q.block_state('cosmos:corner')", + "components": { + "minecraft:collision_box": { + "origin": [ + -8, + 15.999, + -8 + ], + "size": [ + 16, + 0.001, + 8 + ] + } + } + }, + { + "condition": "q.block_state('minecraft:vertical_half') == 'bottom' && q.block_state('cosmos:corner')", + "components": { + "minecraft:collision_box": { + "origin": [ + -8, + 0, + -8 + ], + "size": [ + 8, + 0.001, + 8 + ] + } + } + }, + { + "condition": "q.block_state('minecraft:vertical_half') == 'top' && q.block_state('cosmos:corner')", + "components": { + "minecraft:collision_box": { + "origin": [ + -8, + 15.999, + -8 + ], + "size": [ + 8, + 0.001, + 8 + ] + } + } + } + ] + } +} \ No newline at end of file diff --git a/BP/entities/evolved_zombie.json b/BP/entities/evolved_zombie.json new file mode 100644 index 00000000..aaef41c0 --- /dev/null +++ b/BP/entities/evolved_zombie.json @@ -0,0 +1,552 @@ +{ + "format_version": "1.21.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:evolved_zombie", + "spawn_category": "monster", + "is_spawnable": true, + "is_summonable": true + }, + "component_groups": { + "minecraft:zombie_baby": { + "minecraft:experience_reward": { + "on_death": "query.last_hit_by_player ? 12 + (query.equipment_count * Math.Random(1,3)) : 0" + }, + "minecraft:is_baby": {}, + "minecraft:scale": { + "value": 0.6 + }, + "minecraft:movement": { + "value": 0.40 + } + }, + "minecraft:zombie_adult": { + "minecraft:experience_reward": { + "on_death": "query.last_hit_by_player ? 5 + (query.equipment_count * Math.Random(1,3)) : 0" + }, + "minecraft:movement": { + "value": 0.30 + }, + "minecraft:scale": { + "value": 1.20 + }, + "minecraft:rideable": { + "seat_count": 1, + "family_types": [ + "zombie" + ], + "seats": { + "position": [ + 0, + 1.1, + -0.35 + ], + "lock_rider_rotation": 0 + } + }, + "minecraft:behavior.mount_pathing": { + "priority": 2, + "speed_multiplier": 1.25, + "target_dist": 0, + "track_target": true + } + }, + "minecraft:zombie_jockey": { + "minecraft:behavior.find_mount": { + "priority": 1, + "within_radius": 16, + "start_delay": 15, + "max_failed_attempts": 20 + } + }, + "minecraft:can_break_doors": { + "minecraft:annotation.break_door": {} + } + }, + "components": { + "minecraft:is_hidden_when_invisible": {}, + "minecraft:nameable": {}, + "minecraft:type_family": { + "family": [ + "zombie", + "undead", + "monster", + "mob" + ] + }, + "minecraft:equip_item": { + "excluded_items": [ + { + "item": "minecraft:banner:15" + } + ] + }, + "minecraft:collision_box": { + "width": 0.6, + "height": 1.9 + }, + "minecraft:burns_in_daylight": {}, + "minecraft:movement.basic": {}, + "minecraft:navigation.walk": { + "is_amphibious": true, + "can_pass_doors": true, + "can_walk": true, + "can_break_doors": true + }, + "minecraft:jump.static": {}, + "minecraft:can_climb": {}, + "minecraft:health": { + "value": 30, + "max": 30 + }, + "minecraft:hurt_on_condition": { + "damage_conditions": [ + { + "filters": { + "test": "in_lava", + "subject": "self", + "operator": "==", + "value": true + }, + "cause": "lava", + "damage_per_tick": 4 + } + ] + }, + "minecraft:breathable": { + "total_supply": 15, + "suffocate_time": 0, + "breathes_air": true, + "breathes_water": true + }, + "minecraft:behavior.avoid_block": { + "priority": 0, + "tick_interval": 5, + "search_range": 15, + "search_height": 6, + "sprint_speed_modifier": 1.1, + "target_selection_method": "nearest", + "target_blocks": [ + "cosmos:arc_lamp" + ], + "avoid_block_sound": "retreat", + "sound_interval": { + "range_min": 2, + "range_max": 5 + } + }, + "minecraft:attack": { + "damage": 3 + }, + "minecraft:loot": { + "table": "loot_tables/entities/evolved_zombie.json" + }, + "minecraft:shareables": { + "singular_pickup": true, + "items": [ + { + "item": "minecraft:netherite_sword", + "want_amount": 1, + "surplus_amount": 1, + "priority": 0 + }, + { + "item": "minecraft:diamond_sword", + "want_amount": 1, + "surplus_amount": 1, + "priority": 1 + }, + { + "item": "minecraft:iron_sword", + "want_amount": 1, + "surplus_amount": 1, + "priority": 2 + }, + { + "item": "minecraft:stone_sword", + "want_amount": 1, + "surplus_amount": 1, + "priority": 3 + }, + { + "item": "minecraft:golden_sword", + "want_amount": 1, + "surplus_amount": 1, + "priority": 4 + }, + { + "item": "minecraft:wooden_sword", + "want_amount": 1, + "surplus_amount": 1, + "priority": 5 + }, + { + "item": "minecraft:netherite_helmet", + "want_amount": 1, + "surplus_amount": 1, + "priority": 0 + }, + { + "item": "minecraft:diamond_helmet", + "want_amount": 1, + "surplus_amount": 1, + "priority": 1 + }, + { + "item": "minecraft:iron_helmet", + "want_amount": 1, + "surplus_amount": 1, + "priority": 2 + }, + { + "item": "minecraft:chainmail_helmet", + "want_amount": 1, + "surplus_amount": 1, + "priority": 3 + }, + { + "item": "minecraft:golden_helmet", + "want_amount": 1, + "surplus_amount": 1, + "priority": 4 + }, + { + "item": "minecraft:leather_helmet", + "want_amount": 1, + "surplus_amount": 1, + "priority": 5 + }, + { + "item": "minecraft:turtle_helmet", + "want_amount": 1, + "surplus_amount": 1, + "priority": 6 + }, + { + "item": "minecraft:skull:0", + "want_amount": 1, + "surplus_amount": 1, + "priority": 7 + }, + { + "item": "minecraft:skull:1", + "want_amount": 1, + "surplus_amount": 1, + "priority": 7 + }, + { + "item": "minecraft:carved_pumpkin", + "want_amount": 1, + "surplus_amount": 1, + "priority": 7 + }, + { + "item": "minecraft:netherite_chestplate", + "want_amount": 1, + "surplus_amount": 1, + "priority": 0 + }, + { + "item": "minecraft:diamond_chestplate", + "want_amount": 1, + "surplus_amount": 1, + "priority": 1 + }, + { + "item": "minecraft:iron_chestplate", + "want_amount": 1, + "surplus_amount": 1, + "priority": 2 + }, + { + "item": "minecraft:chainmail_chestplate", + "want_amount": 1, + "surplus_amount": 1, + "priority": 3 + }, + { + "item": "minecraft:golden_chestplate", + "want_amount": 1, + "surplus_amount": 1, + "priority": 4 + }, + { + "item": "minecraft:leather_chestplate", + "want_amount": 1, + "surplus_amount": 1, + "priority": 5 + }, + { + "item": "minecraft:netherite_leggings", + "want_amount": 1, + "surplus_amount": 1, + "priority": 0 + }, + { + "item": "minecraft:diamond_leggings", + "want_amount": 1, + "surplus_amount": 1, + "priority": 1 + }, + { + "item": "minecraft:iron_leggings", + "want_amount": 1, + "surplus_amount": 1, + "priority": 2 + }, + { + "item": "minecraft:chainmail_leggings", + "want_amount": 1, + "surplus_amount": 1, + "priority": 3 + }, + { + "item": "minecraft:golden_leggings", + "want_amount": 1, + "surplus_amount": 1, + "priority": 4 + }, + { + "item": "minecraft:leather_leggings", + "want_amount": 1, + "surplus_amount": 1, + "priority": 5 + }, + { + "item": "minecraft:netherite_boots", + "want_amount": 1, + "surplus_amount": 1, + "priority": 0 + }, + { + "item": "minecraft:diamond_boots", + "want_amount": 1, + "surplus_amount": 1, + "priority": 1 + }, + { + "item": "minecraft:iron_boots", + "want_amount": 1, + "surplus_amount": 1, + "priority": 2 + }, + { + "item": "minecraft:chainmail_boots", + "want_amount": 1, + "surplus_amount": 1, + "priority": 3 + }, + { + "item": "minecraft:golden_boots", + "want_amount": 1, + "surplus_amount": 1, + "priority": 4 + }, + { + "item": "minecraft:leather_boots", + "want_amount": 1, + "surplus_amount": 1, + "priority": 5 + } + ] + }, + "minecraft:despawn": { + "despawn_from_distance": {} + }, + "minecraft:behavior.equip_item": { + "priority": 2 + }, + "minecraft:behavior.melee_box_attack": { + "can_spread_on_fire": true, + "priority": 3 + }, + "minecraft:behavior.stomp_turtle_egg": { + "priority": 4, + "speed_multiplier": 1, + "search_range": 10, + "search_height": 2, + "goal_radius": 1.14, + "interval": 20 + }, + "minecraft:behavior.pickup_items": { + "priority": 6, + "max_dist": 3, + "goal_radius": 2, + "speed_multiplier": 1, + "pickup_based_on_chance": true, + "can_pickup_any_item": true, + "excluded_items": [ + "minecraft:glow_ink_sac" + ] + }, + "minecraft:behavior.random_stroll": { + "priority": 7, + "speed_multiplier": 1 + }, + "minecraft:behavior.look_at_player": { + "priority": 8, + "look_distance": 6, + "probability": 0.02 + }, + "minecraft:behavior.random_look_around": { + "priority": 9 + }, + "minecraft:behavior.hurt_by_target": { + "priority": 1, + "entity_types": [ + { + "filters": { + "test": "is_family", + "subject": "other", + "operator": "!=", + "value": "breeze" + } + } + ] + }, + "minecraft:behavior.nearest_attackable_target": { + "priority": 2, + "must_see": true, + "reselect_targets": true, + "within_radius": 25, + "must_see_forget_duration": 17, + "entity_types": [ + { + "filters": { + "any_of": [ + { + "test": "is_family", + "subject": "other", + "value": "player" + }, + { + "test": "is_family", + "subject": "other", + "value": "snowgolem" + }, + { + "test": "is_family", + "subject": "other", + "value": "irongolem" + } + ] + }, + "max_dist": 35 + }, + { + "filters": { + "any_of": [ + { + "test": "is_family", + "subject": "other", + "value": "villager" + }, + { + "test": "is_family", + "subject": "other", + "value": "wandering_trader" + } + ] + }, + "max_dist": 35, + "must_see": false + }, + { + "filters": { + "all_of": [ + { + "test": "is_family", + "subject": "other", + "value": "baby_turtle" + }, + { + "test": "in_water", + "subject": "other", + "operator": "!=", + "value": true + } + ] + }, + "max_dist": 35 + } + ] + }, + "minecraft:physics": {}, + "minecraft:pushable": { + "is_pushable": true, + "is_pushable_by_piston": true + }, + "minecraft:conditional_bandwidth_optimization": {} + }, + "events": { + "minecraft:entity_spawned": { + "sequence": [ + { + "randomize": [ + { + "weight": 380, + "remove": {}, + "add": { + "component_groups": [ + "minecraft:zombie_adult", + "minecraft:can_have_equipment" + ] + } + }, + { + "weight": 17, + "remove": {}, + "add": { + "component_groups": [ + "minecraft:zombie_baby", + "minecraft:can_have_equipment" + ] + } + }, + { + "weight": 3, + "remove": {}, + "add": { + "component_groups": [ + "minecraft:zombie_baby", + "minecraft:zombie_jockey", + "minecraft:can_have_equipment" + ] + } + } + ] + }, + { + "randomize": [ + { + "weight": 10, + "add": { + "component_groups": [ + "minecraft:can_break_doors" + ] + } + }, + { + "weight": 90 + } + ] + } + ] + }, + "minecraft:as_adult": { + "add": { + "component_groups": [ + "minecraft:zombie_adult" + ] + } + }, + "minecraft:as_baby": { + "add": { + "component_groups": [ + "minecraft:zombie_baby" + ] + } + } + } + } +} \ No newline at end of file diff --git a/BP/entities/machines/advanced_compressor.json b/BP/entities/machines/advanced_compressor.json index f6a05e3b..c2da307d 100644 --- a/BP/entities/machines/advanced_compressor.json +++ b/BP/entities/machines/advanced_compressor.json @@ -128,5 +128,4 @@ } } } - } -} \ No newline at end of file +} diff --git a/BP/entities/machines/advanced_launch_controller.json b/BP/entities/machines/advanced_launch_controller.json new file mode 100644 index 00000000..9006ddb0 --- /dev/null +++ b/BP/entities/machines/advanced_launch_controller.json @@ -0,0 +1,132 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:advanced_launch_controller", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 10 + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine", + "power", + "has_power_input" + ] + }, + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5" + ] + } + } + } + } +} diff --git a/BP/entities/machines/airlock_controller.json b/BP/entities/machines/airlock_controller.json new file mode 100644 index 00000000..b0a8763a --- /dev/null +++ b/BP/entities/machines/airlock_controller.json @@ -0,0 +1,90 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:airlock_controller", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event": "cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + } + }, + "components": { + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine" + ] + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 9 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + } + } + } +} diff --git a/BP/entities/machines/astro_miner_dock.json b/BP/entities/machines/astro_miner_dock.json new file mode 100644 index 00000000..903c6682 --- /dev/null +++ b/BP/entities/machines/astro_miner_dock.json @@ -0,0 +1,130 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:astro_miner_dock", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine" + ] + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 75 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5" + ] + } + } + } + } +} diff --git a/BP/entities/machines/cargo_loader.json b/BP/entities/machines/cargo_loader.json new file mode 100644 index 00000000..5f369712 --- /dev/null +++ b/BP/entities/machines/cargo_loader.json @@ -0,0 +1,132 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:cargo_loader", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 17 + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine", + "has_power_input" + ] + }, + + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5" + ] + } + } + } + } +} diff --git a/BP/entities/machines/cargo_unloader.json b/BP/entities/machines/cargo_unloader.json new file mode 100644 index 00000000..cfbe37c6 --- /dev/null +++ b/BP/entities/machines/cargo_unloader.json @@ -0,0 +1,132 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:cargo_unloader", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 17 + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine", + "has_power_input" + ] + }, + + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5" + ] + } + } + } + } +} diff --git a/BP/entities/machines/chromatic_applicator.json b/BP/entities/machines/chromatic_applicator.json new file mode 100644 index 00000000..3ef24aff --- /dev/null +++ b/BP/entities/machines/chromatic_applicator.json @@ -0,0 +1,132 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:chromatic_applicator", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "power", + "machine", + "chromatic_applicator" + ] + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 6 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~" + ] + } + } + } + } +} \ No newline at end of file diff --git a/BP/entities/machines/electric_arc_furnace.json b/BP/entities/machines/electric_arc_furnace.json index c75f3c43..c0d655be 100644 --- a/BP/entities/machines/electric_arc_furnace.json +++ b/BP/entities/machines/electric_arc_furnace.json @@ -128,5 +128,4 @@ } } } - } -} \ No newline at end of file +} diff --git a/BP/entities/machines/geothermal_generator.json b/BP/entities/machines/geothermal_generator.json new file mode 100644 index 00000000..5f72274d --- /dev/null +++ b/BP/entities/machines/geothermal_generator.json @@ -0,0 +1,132 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:geothermal_generator", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine", + "power", + "has_power_output" + ] + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 7 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5" + ] + } + } + } + } +} diff --git a/BP/entities/machines/launch_controller.json b/BP/entities/machines/launch_controller.json new file mode 100644 index 00000000..e670fb42 --- /dev/null +++ b/BP/entities/machines/launch_controller.json @@ -0,0 +1,132 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:launch_controller", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 8 + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine", + "power", + "has_power_input" + ] + }, + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5" + ] + } + } + } + } +} diff --git a/BP/entities/machines/methane_synthesizer.json b/BP/entities/machines/methane_synthesizer.json index 1cd6032c..e74a9aca 100644 --- a/BP/entities/machines/methane_synthesizer.json +++ b/BP/entities/machines/methane_synthesizer.json @@ -66,7 +66,7 @@ }, "minecraft:inventory": { "container_type": "container", - "inventory_size": 11 + "inventory_size": 12 }, "minecraft:pushable": { "is_pushable": false, @@ -129,4 +129,4 @@ } } } -} \ No newline at end of file +} diff --git a/BP/entities/machines/oxygen_sealer.json b/BP/entities/machines/oxygen_sealer.json new file mode 100644 index 00000000..805390ce --- /dev/null +++ b/BP/entities/machines/oxygen_sealer.json @@ -0,0 +1,134 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:oxygen_sealer", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine", + "power", + "oxygen", + "has_power_input", + "has_o2_input" + ] + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 9 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~" + ] + } + } + } + } +} diff --git a/BP/entities/machines/short_range_telepad.json b/BP/entities/machines/short_range_telepad.json new file mode 100644 index 00000000..278dc20e --- /dev/null +++ b/BP/entities/machines/short_range_telepad.json @@ -0,0 +1,132 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:short_range_telepad", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine", + "power", + "has_power_input" + ] + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 7 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~" + ] + } + } + } + } +} diff --git a/BP/entities/machines/solar_array_controller.json b/BP/entities/machines/solar_array_controller.json new file mode 100644 index 00000000..cd68cef8 --- /dev/null +++ b/BP/entities/machines/solar_array_controller.json @@ -0,0 +1,142 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:solar_array_controller", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine", + "power", + "has_power_output" + ] + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 64 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + }, + "minecraft:renders_when_invisible": {}, + "minecraft:spell_effects": { + "add_effects": [ + { + "visible": false, + "effect": "invisibility", + "duration": "infinite" + } + ] + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5" + ] + } + } + } + } +} diff --git a/BP/entities/machines/terraformer.json b/BP/entities/machines/terraformer.json new file mode 100644 index 00000000..41552015 --- /dev/null +++ b/BP/entities/machines/terraformer.json @@ -0,0 +1,132 @@ +{ + "format_version": "1.20.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:terraformer", + "is_summonable": true + }, + "component_groups": { + "shrink": { + "minecraft:collision_box": { + "width": 0.7, + "height": 0.7 + }, + "minecraft:timer": { + "time": 0.1, + "time_down_event": { + "event":"cosmos:expand" + } + } + }, + "expand": { + "minecraft:collision_box": { + "width": 1, + "height": 1 + } + }, + "despawn": { + "minecraft:instant_despawn": {} + }, + "highlight": { + "minecraft:timer": { + "looping": true, + "time": 0.5, + "time_down_event": { + "event":"cosmos:highlight_paricles" + } + } + } + }, + "components": { + "minecraft:damage_sensor": { + "triggers": { + "deals_damage": false + } + }, + "minecraft:type_family": { + "family": [ + "cosmos", + "machine", + "power", + "has_power_input" + ] + }, + "minecraft:collision_box": { + "width": 1, + "height": 1 + }, + "minecraft:health": { + "value": 1, + "max": 1, + "min": 1 + }, + "minecraft:knockback_resistance": { + "value": 100, + "max": 100 + }, + "minecraft:inventory": { + "container_type": "container", + "inventory_size": 30 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": false, + "has_collision": false + } + }, + "events": { + "cosmos:shrink": { + "add": { + "component_groups": ["shrink"] + } + }, + "cosmos:despawn": { + "add": { + "component_groups": ["despawn"] + } + }, + "cosmos:expand": { + "remove": { + "component_groups": ["shrink"] + }, + "add": { + "component_groups": ["expand"] + } + }, + "cosmos:highlight": { + "add": { + "component_groups": ["highlight"] + } + }, + "cosmos:highlight_paricles": { + "queue_command": { + "command": [ + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~0.5 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~1 ~-0.5", + "particle \"minecraft:villager_happy\" ~-0.5 ~ ~", + "particle \"minecraft:villager_happy\" ~ ~ ~-0.5", + "particle \"minecraft:villager_happy\" ~ ~1 ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~1 ~", + "particle \"minecraft:villager_happy\" ~ ~ ~0.5", + "particle \"minecraft:villager_happy\" ~0.5 ~ ~" + ] + } + } + } + } +} diff --git a/BP/entities/moon_buggy.json b/BP/entities/moon_buggy.json index ce57851f..e55f3d45 100644 --- a/BP/entities/moon_buggy.json +++ b/BP/entities/moon_buggy.json @@ -1,131 +1,131 @@ -{ - "format_version": "1.8.0", - "minecraft:entity": { - "description": { - "identifier": "cosmos:moon_buggy", - "is_summonable": true, - "properties": { - "cosmos:rotation_y": { - "type": "float", - "range": [0.0, 360.0], - "default": 180.0, - "client_sync": true - }, - "cosmos:wheel_rotation_x": { - "type": "float", - "range": [0.0, 360.0], - "default": 0.0, - "client_sync": true - }, - "cosmos:wheel_rotation_y": { - "type": "float", - "range": [-30.0, 30.0], - "default": 0.0, - "client_sync": true - }, - "cosmos:container_number": { - "type": "int", - "range": [0, 3], - "default": 0, - "client_sync": true - } - } - }, - "component_groups": { - "inv0": { - "minecraft:inventory": { - "container_type": "chest_boat", - "inventory_size": 2 - } - }, - "inv18": { - "minecraft:inventory": { - "container_type": "chest_boat", - "inventory_size": 20 - } - }, - "inv36": { - "minecraft:inventory": { - "container_type": "chest_boat", - "inventory_size": 38 - } - }, - "inv54": { - "minecraft:inventory": { - "container_type": "chest_boat", - "inventory_size": 56 - } - } - }, - "components": { - "minecraft:collision_box": { - "height": 0.6, - "width": 1.4 - }, - "minecraft:fall_damage": { - "value": 0 - }, - "minecraft:fire_immune": true, - "minecraft:health": { - "max": 1, - "value": 1 - }, - "minecraft:knockback_resistance": { - "value": 1 - }, - "minecraft:push_through": { - "value": 1 - }, - "minecraft:pushable": { - "is_pushable": false, - "is_pushable_by_piston": false - }, - "minecraft:physics": { - "has_gravity": true, - "has_collision": true - }, - "minecraft:can_climb": {}, - "minecraft:rideable": { - "crouching_skip_interact": true, - "family_types": [ - "player" - ], - "interact_text": "Ride", - "priority": 0, - "pull_in_entities": false, - "seat_count": 1, - "seats": { - "position": [0, 0.4, 0] - } - }, - "minecraft:type_family": { - "family": [ - "buggy", - "vehicle" - ] - } - }, - "events": { - "cosmos:inv0": { - "add":{ - "component_groups": ["inv0"] - } - }, - "cosmos:inv18": { - "add":{ - "component_groups": ["inv18"] - } - }, - "cosmos:inv36": { - "add":{ - "component_groups": ["inv36"] - } - }, - "cosmos:inv54": { - "add":{ - "component_groups": ["inv54"] - } - } - } - } -} +{ + "format_version": "1.8.0", + "minecraft:entity": { + "description": { + "identifier": "cosmos:moon_buggy", + "is_summonable": true, + "properties": { + "cosmos:rotation_y": { + "type": "float", + "range": [0.0, 360.0], + "default": 180.0, + "client_sync": true + }, + "cosmos:wheel_rotation_x": { + "type": "float", + "range": [0.0, 360.0], + "default": 0.0, + "client_sync": true + }, + "cosmos:wheel_rotation_y": { + "type": "float", + "range": [-30.0, 30.0], + "default": 0.0, + "client_sync": true + }, + "cosmos:container_number": { + "type": "int", + "range": [0, 3], + "default": 0, + "client_sync": true + } + } + }, + "component_groups": { + "inv0": { + "minecraft:inventory": { + "container_type": "chest_boat", + "inventory_size": 2 + } + }, + "inv18": { + "minecraft:inventory": { + "container_type": "chest_boat", + "inventory_size": 20 + } + }, + "inv36": { + "minecraft:inventory": { + "container_type": "chest_boat", + "inventory_size": 38 + } + }, + "inv54": { + "minecraft:inventory": { + "container_type": "chest_boat", + "inventory_size": 56 + } + } + }, + "components": { + "minecraft:collision_box": { + "height": 0.6, + "width": 1.4 + }, + "minecraft:fall_damage": { + "value": 0 + }, + "minecraft:fire_immune": true, + "minecraft:health": { + "max": 1, + "value": 1 + }, + "minecraft:knockback_resistance": { + "value": 1 + }, + "minecraft:push_through": { + "value": 1 + }, + "minecraft:pushable": { + "is_pushable": false, + "is_pushable_by_piston": false + }, + "minecraft:physics": { + "has_gravity": true, + "has_collision": true + }, + "minecraft:can_climb": {}, + "minecraft:rideable": { + "crouching_skip_interact": true, + "family_types": [ + "player" + ], + "interact_text": "Ride", + "priority": 0, + "pull_in_entities": false, + "seat_count": 1, + "seats": { + "position": [0, 0.4, 0] + } + }, + "minecraft:type_family": { + "family": [ + "buggy", + "vehicle" + ] + } + }, + "events": { + "cosmos:inv0": { + "add":{ + "component_groups": ["inv0"] + } + }, + "cosmos:inv18": { + "add":{ + "component_groups": ["inv18"] + } + }, + "cosmos:inv36": { + "add":{ + "component_groups": ["inv36"] + } + }, + "cosmos:inv54": { + "add":{ + "component_groups": ["inv54"] + } + } + } + } +} diff --git a/BP/feature_rules/mars/mars_generation.json b/BP/feature_rules/mars/mars_generation.json index dc9c07d9..caaf025f 100644 --- a/BP/feature_rules/mars/mars_generation.json +++ b/BP/feature_rules/mars/mars_generation.json @@ -7,13 +7,17 @@ }, "conditions": { "placement_pass": "first_pass", - "minecraft:biome_filter": { - "test": "has_biome_tag", - "value": "the_end" - } + "minecraft:biome_filter": [ + { + "test": "has_biome_tag", + "operator": "==", + "value": "cosmos_mars_terrain" + } + ] }, "distribution": { - "iterations": "v.originx >= -100000 && v.originz >= 50000 && v.originx <= -50000 && v.originz <= 100000", + "iterations": 1, + "coordinate_eval_order": "xzy", "x": 0, "y": 0, "z": 0 diff --git a/BP/feature_rules/moon/moon_generation.json b/BP/feature_rules/moon/moon_generation.json index e3ae9551..1134af66 100644 --- a/BP/feature_rules/moon/moon_generation.json +++ b/BP/feature_rules/moon/moon_generation.json @@ -7,13 +7,17 @@ }, "conditions": { "placement_pass": "first_pass", - "minecraft:biome_filter": { - "test": "has_biome_tag", - "value": "the_end" - } + "minecraft:biome_filter": [ + { + "test": "has_biome_tag", + "operator": "==", + "value": "cosmos_moon_terrain" + } + ] }, "distribution": { - "iterations": "v.originx >= 50000 && v.originz >= 50000 && v.originx <= 100000 && v.originz <= 100000", + "iterations": 1, + "coordinate_eval_order": "xzy", "x": 0, "y": 0, "z": 0 diff --git a/BP/feature_rules/planets/mars_end_cleaner_rule.json b/BP/feature_rules/planets/mars_end_cleaner_rule.json deleted file mode 100644 index 0f5ad20b..00000000 --- a/BP/feature_rules/planets/mars_end_cleaner_rule.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "format_version": "1.20.20", - "minecraft:feature_rules": { - "description": { - "identifier": "cosmos:mars_end_cleaner_rule", - "places_feature": "cosmos:planets/end_cleaner" - }, - "conditions": { - "placement_pass": "final_pass", - "minecraft:biome_filter": { - "test": "has_biome_tag", - "value": "the_end" - } - }, - "distribution": { - "iterations": "v.originx >= -100000 && v.originz >= 50000 && v.originx <= -50000 && v.originz <= 100000", - "x": 0, - "y": 10, - "z": 0 - } - } -} \ No newline at end of file diff --git a/BP/feature_rules/planets/mars_end_voider_rule.json b/BP/feature_rules/planets/mars_end_voider_rule.json deleted file mode 100644 index 69b917c9..00000000 --- a/BP/feature_rules/planets/mars_end_voider_rule.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "format_version": "1.20.20", - "minecraft:feature_rules": { - "description": { - "identifier": "cosmos:mars_end_voider_rule", - "places_feature": "cosmos:planets/end_void_grid" - }, - "conditions": { - "placement_pass": "final_pass", - "minecraft:biome_filter": { - "test": "has_biome_tag", - "value": "the_end" - } - }, - "distribution": { - "iterations": "v.originx >= -100000 && v.originz >= 50000 && v.originx <= -50000 && v.originz <= 100000", - "x": 0, - "y": 10, - "z": 0 - } - } -} \ No newline at end of file diff --git a/BP/feature_rules/planets/moon_end_cleaner_rule.json b/BP/feature_rules/planets/moon_end_cleaner_rule.json deleted file mode 100644 index b7b66fbf..00000000 --- a/BP/feature_rules/planets/moon_end_cleaner_rule.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "format_version": "1.20.20", - "minecraft:feature_rules": { - "description": { - "identifier": "cosmos:moon_end_cleaner_rule", - "places_feature": "cosmos:planets/end_cleaner" - }, - "conditions": { - "placement_pass": "final_pass", - "minecraft:biome_filter": { - "test": "has_biome_tag", - "value": "the_end" - } - }, - "distribution": { - "iterations": "v.originz >= 50000 && v.originz <= 100000 && v.originx >= 50000 && v.originx <= 100000", - "x": 0, - "y": 10, - "z": 0 - } - } -} \ No newline at end of file diff --git a/BP/feature_rules/planets/moon_end_voider_rule.json b/BP/feature_rules/planets/moon_end_voider_rule.json deleted file mode 100644 index 8211ecc5..00000000 --- a/BP/feature_rules/planets/moon_end_voider_rule.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "format_version": "1.20.20", - "minecraft:feature_rules": { - "description": { - "identifier": "cosmos:moon_end_voider_rule", - "places_feature": "cosmos:planets/end_void_grid" - }, - "conditions": { - "placement_pass": "final_pass", - "minecraft:biome_filter": { - "test": "has_biome_tag", - "value": "the_end" - } - }, - "distribution": { - "iterations": "v.originz >= 50000 && v.originz <= 100000 && v.originx >= 50000 && v.originx <= 100000", - "x": 0, - "y": 10, - "z": 0 - } - } -} \ No newline at end of file diff --git a/BP/features/mars/base/column_mars.json b/BP/features/mars/base/column_mars.json index ebb761cd..e319069d 100644 --- a/BP/features/mars/base/column_mars.json +++ b/BP/features/mars/base/column_mars.json @@ -5,7 +5,7 @@ "identifier": "cosmos:mars/base/column_mars" }, "places_feature": "cosmos:mars/base/layer_picker", - "iterations": "t.biome=(q.noise(v.originx*0.005,v.originz*0.005)+1)*0.5; t.blend=t.biome*t.biome*(3-2*t.biome); v.base=93; v.huge=(q.noise(v.originx*0.003125,v.originz*0.003125)+0.25*q.noise(v.originx*0.00625,v.originz*0.00625)+0.0625*q.noise(v.originx*0.0125,v.originz*0.0125)+0.015625*q.noise(v.originx*0.025,v.originz*0.025))*12; v.mountain=q.noise(v.originx*0.002,v.originz*0.002)*95; v.valley=(q.noise(v.originx*0.005,v.originz*0.005)-0.5)*50; v.weight=math.clamp(q.noise(v.originx*0.004,v.originz*0.004),0,1); v.combo=v.mountain*v.weight+v.valley*(1-v.weight); v.detail=q.noise(v.originx*0.1,v.originz*0.1)*2; v.crater=(q.noise(v.originx*0.02,v.originz*0.02)-0.8)*10; v.craterDep=(v.crater<0)?v.crater:0; v.mheight=math.max(v.base+v.huge+v.combo+v.detail+v.craterDep,v.base); v.curAmp=1; v.noise1_val=0; v.noise2_val=0; v.i=v.originx*0.0125/4; v.j=v.originz*0.0125/4; v.i2=-v.originx*0.015/4; v.j2=-v.originz*0.015/4; loop(4, { v.noise1_val=v.noise1_val+q.noise(v.i,v.j)*v.curAmp; v.i=v.i*2; v.j=v.j*2; v.noise2_val=v.noise2_val+q.noise(v.i2,v.j2)*v.curAmp; v.i2=v.i2*2; v.j2=v.j2*2; v.curAmp=v.curAmp*0.25; }); v.noise1_val=v.noise1_val*8; v.noise2_val=v.noise2_val*24; v.noiseFactor=q.noise(v.originx*0.007,v.originz*0.007); v.noiseFactor_clamped=math.clamp(v.noiseFactor,0,1); v.ydev=(v.noiseFactor<0)?v.noise1_val:((v.noiseFactor>1)?v.noise2_val:(v.noise1_val+(v.noise2_val-v.noise1_val)*v.noiseFactor_clamped)); v.vheight=90+v.ydev; t.height=(t.blend*v.vheight)+((1-t.blend)*v.mheight); t.layer=(math.floor(t.height)<92?math.floor(t.height)-92:0); return 1;", + "iterations": "v.originx = (v.worldx != 0 ? v.worldx : v.originx); v.originz = (v.worldz != 0 ? v.worldz : v.originz); t.biome=(q.noise(v.originx*0.005,v.originz*0.005)+1)*0.5; t.blend=t.biome*t.biome*(3-2*t.biome); v.base=93; v.huge=(q.noise(v.originx*0.003125,v.originz*0.003125)+0.25*q.noise(v.originx*0.00625,v.originz*0.00625)+0.0625*q.noise(v.originx*0.0125,v.originz*0.0125)+0.015625*q.noise(v.originx*0.025,v.originz*0.025))*12; v.mountain=q.noise(v.originx*0.002,v.originz*0.002)*95; v.valley=(q.noise(v.originx*0.005,v.originz*0.005)-0.5)*50; v.weight=math.clamp(q.noise(v.originx*0.004,v.originz*0.004),0,1); v.combo=v.mountain*v.weight+v.valley*(1-v.weight); v.detail=q.noise(v.originx*0.1,v.originz*0.1)*2; v.crater=(q.noise(v.originx*0.02,v.originz*0.02)-0.8)*10; v.craterDep=(v.crater<0)?v.crater:0; v.mheight=math.max(v.base+v.huge+v.combo+v.detail+v.craterDep,v.base); v.curAmp=1; v.noise1_val=0; v.noise2_val=0; v.i=v.originx*0.0125/4; v.j=v.originz*0.0125/4; v.i2=-v.originx*0.015/4; v.j2=-v.originz*0.015/4; loop(4, { v.noise1_val=v.noise1_val+q.noise(v.i,v.j)*v.curAmp; v.i=v.i*2; v.j=v.j*2; v.noise2_val=v.noise2_val+q.noise(v.i2,v.j2)*v.curAmp; v.i2=v.i2*2; v.j2=v.j2*2; v.curAmp=v.curAmp*0.25; }); v.noise1_val=v.noise1_val*8; v.noise2_val=v.noise2_val*24; v.noiseFactor=q.noise(v.originx*0.007,v.originz*0.007); v.noiseFactor_clamped=math.clamp(v.noiseFactor,0,1); v.ydev=(v.noiseFactor<0)?v.noise1_val:((v.noiseFactor>1)?v.noise2_val:(v.noise1_val+(v.noise2_val-v.noise1_val)*v.noiseFactor_clamped)); v.vheight=90+v.ydev; t.height=(t.blend*v.vheight)+((1-t.blend)*v.mheight); t.layer=(math.floor(t.height)<92?math.floor(t.height)-92:0); return 1;", "x": 0, "z": 0, "y": 0 diff --git a/BP/item_catalog/crafting_item_catalog.json b/BP/item_catalog/crafting_item_catalog.json index 84f72f2b..4befad64 100644 --- a/BP/item_catalog/crafting_item_catalog.json +++ b/BP/item_catalog/crafting_item_catalog.json @@ -199,8 +199,8 @@ "cosmos:sealed_heavy_aluminum_wire", "cosmos:sealed_fluid_pipe", "cosmos:nasa_workbench", - "cosmos:air_lock_frame", - "cosmos:air_lock_controller", + "cosmos:airlock_frame", + "cosmos:airlock_controller", "cosmos:spin_thruster", "cosmos:display_screen", "cosmos:telemetry_unit", @@ -234,7 +234,7 @@ "cosmos:wire_walkway", "cosmos:pipe_walkway", "cosmos:dense_ice", - "cosmos:astro_miner_base", + "cosmos:astro_miner_dock", "cosmos:venus_soft_rock", "cosmos:venus_hard_rock", "cosmos:venus_volcanic_rock", diff --git a/BP/manifest.json b/BP/manifest.json index fcad16e7..6b44c09c 100644 --- a/BP/manifest.json +++ b/BP/manifest.json @@ -5,7 +5,7 @@ "name": "Cosmos Adventure", "version": [5, 0, 7], "uuid": "c4a889c0-c968-43cb-bd29-cf4f2b456965", - "min_engine_version": [1, 20, 60] + "min_engine_version": [1, 21, 60] }, "modules": [ { diff --git a/BP/recipes/converted_recipes/air_lock_controller.json b/BP/recipes/converted_recipes/air_lock_controller.json index 315eda13..d182d9b6 100644 --- a/BP/recipes/converted_recipes/air_lock_controller.json +++ b/BP/recipes/converted_recipes/air_lock_controller.json @@ -2,7 +2,7 @@ "format_version": "1.20.10", "minecraft:recipe_shaped": { "description": { - "identifier": "cosmos:air_lock_controller" + "identifier": "cosmos:airlock_controller" }, "tags": [ "crafting_table" @@ -21,7 +21,7 @@ "cosmos:compressed_meteoric_iron" ], "result": { - "item": "cosmos:air_lock_controller" + "item": "cosmos:airlock_controller" } } } \ No newline at end of file diff --git a/BP/recipes/converted_recipes/air_lock_frame.json b/BP/recipes/converted_recipes/air_lock_frame.json index 5da6dfea..6665220f 100644 --- a/BP/recipes/converted_recipes/air_lock_frame.json +++ b/BP/recipes/converted_recipes/air_lock_frame.json @@ -2,7 +2,7 @@ "format_version": "1.20.10", "minecraft:recipe_shaped": { "description": { - "identifier": "cosmos:air_lock_frame" + "identifier": "cosmos:airlock_frame" }, "tags": [ "crafting_table" @@ -21,7 +21,7 @@ "cosmos:compressed_aluminum" ], "result": { - "item": "cosmos:air_lock_frame", + "item": "cosmos:airlock_frame", "count": 4 } } diff --git a/BP/recipes/converted_recipes/oxygen_distributor.json b/BP/recipes/converted_recipes/oxygen_distributor.json index 9a31f7d4..e998e6f8 100644 --- a/BP/recipes/converted_recipes/oxygen_distributor.json +++ b/BP/recipes/converted_recipes/oxygen_distributor.json @@ -4,25 +4,15 @@ "description": { "identifier": "cosmos:oxygen_distributor" }, - "tags": [ - "crafting_table" - ], - "pattern": [ - "WXW", - "YZY", - "WXW" - ], + "tags": ["crafting_table"], + "pattern": ["WXW", "YZY", "WXW"], "key": { "W": "cosmos:compressed_steel", "X": "cosmos:oxygen_fan", "Y": "cosmos:oxygen_vent", "Z": "cosmos:compressed_aluminum" }, - "unlock": [ - "cosmos:compressed_steel" - ], - "result": { - "item": "cosmos:oxygen_distributor" - } + "unlock": ["cosmos:compressed_steel"], + "result": { "item": "cosmos:oxygen_distributor" } } -} \ No newline at end of file +} diff --git a/BP/recipes/machines/advanced_launch_controller.json b/BP/recipes/machines/advanced_launch_controller.json new file mode 100644 index 00000000..78a47800 --- /dev/null +++ b/BP/recipes/machines/advanced_launch_controller.json @@ -0,0 +1,32 @@ +{ + "format_version": "1.20.10", + "minecraft:recipe_shaped": { + "description": { + "identifier": "cosmos:advanced_launch_controller" + }, + "tags": [ + "crafting_table" + ], + "pattern": [ + "III", + "IDI", + "III" + ], + "key": { + "I": { + "item": "minecraft:iron_ingot" + }, + "D": { + "item": "minecraft:diamond" + } + }, + "unlock": [ + { + "item": "minecraft:iron_ingot" + } + ], + "result": { + "item": "cosmos:advanced_launch_controller" + } + } +} diff --git a/BP/recipes/converted_recipes/astro_miner_base.json b/BP/recipes/machines/astro_miner_dock.json similarity index 74% rename from BP/recipes/converted_recipes/astro_miner_base.json rename to BP/recipes/machines/astro_miner_dock.json index 2cd9ba94..0f64d5d5 100644 --- a/BP/recipes/converted_recipes/astro_miner_base.json +++ b/BP/recipes/machines/astro_miner_dock.json @@ -2,7 +2,7 @@ "format_version": "1.20.10", "minecraft:recipe_shaped": { "description": { - "identifier": "cosmos:astro_miner_base" + "identifier": "cosmos:astro_miner_dock" }, "tags": [ "crafting_table" @@ -19,11 +19,10 @@ "X": "cosmos:compressed_desh" }, "unlock": [ - "cosmos:energy_storage_module" + { "item": "cosmos:energy_storage_module" } ], "result": { - "item": "cosmos:astro_miner_base", - "count": 4 + "item": "cosmos:astro_miner_dock" } } -} \ No newline at end of file +} diff --git a/BP/recipes/short_range_telepad.json b/BP/recipes/short_range_telepad.json new file mode 100644 index 00000000..16e17b2f --- /dev/null +++ b/BP/recipes/short_range_telepad.json @@ -0,0 +1,35 @@ +{ + "format_version": "1.20.10", + "minecraft:recipe_shaped": { + "description": { + "identifier": "cosmos:short_range_telepad" + }, + "tags": [ + "crafting_table" + ], + "pattern": [ + "III", + "IHI", + "ICI" + ], + "key": { + "I": { + "item": "minecraft:iron_ingot" + }, + "H": { + "item": "minecraft:ender_pearl" + }, + "C": { + "item": "minecraft:iron_block" + } + }, + "unlock": [ + { + "item": "minecraft:ender_pearl" + } + ], + "result": { + "item": "cosmos:short_range_telepad" + } + } +} diff --git a/BP/scripts/api/destruction_handler.js b/BP/scripts/api/destruction_handler.js new file mode 100644 index 00000000..a77802e0 --- /dev/null +++ b/BP/scripts/api/destruction_handler.js @@ -0,0 +1,131 @@ +import { world, system } from "@minecraft/server"; + +// @Constants +const STAIRS_TAG = "cosmos:stairs"; + + +// track all active collision/invisible blocks in this map. +const trackedBlocks = new Map(); // Key: location string, Value: { typeId: string } + +/** + * Adds a block to the tracking list. Exported for use in other component files. + * @param {import("@minecraft/server").Block} block The block to track. + */ +export function trackBlock(block) { + if (!block || !block.location) return; + const locationStr = `${block.location.x},${block.location.y},${block.location.z}`; + if (!trackedBlocks.has(locationStr)) { + trackedBlocks.set(locationStr, { + typeId: block.typeId, + dimensionId: block.dimension.id // Cache the dimension ID + }); + } +} + +/** + * Removes a block from the tracking list. Exported for use in other component files. + * @param {import("@minecraft/server").BlockLocation} location The location of the block to untrack. + */ +export function untrackBlock(location) { + if (!location) return; + const locationStr = `${location.x},${location.y},${location.z}`; + trackedBlocks.delete(locationStr); +} + +/** + * Initializes the cleanup interval. + */ +export function initializeDestructionHandlers() { + + system.runInterval(() => { + // Iterate over a copy of the values, as the map can be modified during the loop. + for (const [locationStr, blockData] of [...trackedBlocks.entries()]) { + try { + // Use the cached dimension ID to get the dimension directly. + const dimension = world.getDimension(blockData.dimensionId); + const location = { + x: parseInt(locationStr.split(',')[0]), + y: parseInt(locationStr.split(',')[1]), + z: parseInt(locationStr.split(',')[2]) + }; + + const block = dimension.getBlock(location); + + // If the block at the location is not what we are tracking, it's an orphan or gone. + if (!block || block.typeId !== blockData.typeId) { + trackedBlocks.delete(locationStr); + continue; + } + + let isOrphan = false; + if (block.typeId.includes("stairs_collision")) { + const verticalHalf = block.permutation.getState("minecraft:vertical_half"); + const parentBlock = (verticalHalf === "top") ? block.above() : block.below(); + if (!parentBlock || !parentBlock.hasTag(STAIRS_TAG)) { + isOrphan = true; + } + } + + if (isOrphan) { + block.setType("minecraft:air"); + trackedBlocks.delete(locationStr); + } + + } catch (e) { + trackedBlocks.delete(locationStr); + } + } + }, 100); +} +const UNTRACKED_SCAN_INTERVAL = 149; +const UNTRACKED_SCAN_DISTANCE = 5; + +system.runInterval(() => { + for (const player of world.getAllPlayers()) { + const headLoc = player.getHeadLocation(); + const direction = player.getViewDirection(); + const dimension = player.dimension; + + // Check a few blocks in a line in front of the player + for (let i = 1; i <= UNTRACKED_SCAN_DISTANCE; i++) { + const checkLoc = { + x: Math.floor(headLoc.x + direction.x * i), + y: Math.floor(headLoc.y + direction.y * i), + z: Math.floor(headLoc.z + direction.z * i) + }; + const locStr = `${checkLoc.x},${checkLoc.y},${checkLoc.z}`; + + // Don't check blocks we are already tracking. + if (trackedBlocks.has(locStr)) continue; + + try { + const block = dimension.getBlock(checkLoc); + if (block && (block.typeId.includes("_invisible") || block.typeId.includes("stairs_collision"))) { + // Found an untracked special block. Check if it's an orphan. + let isOrphan = false; + if (block.typeId.includes("_invisible")) { + const parentBlock = block.below(); + if (!parentBlock || !parentBlock.typeId.includes("_fence")) { + isOrphan = true; + } + } + if (block.typeId.includes("stairs_collision")) { + const verticalHalf = block.permutation.getState("minecraft:vertical_half"); + const parentBlock = (verticalHalf === "top") ? block.above() : block.below(); + if (!parentBlock || !parentBlock.hasTag(STAIRS_TAG)) { + isOrphan = true; + } + } + + if (isOrphan) { + block.setType("minecraft:air"); + } + + break; + } + } catch(e) { + break; + } + } + } +}, UNTRACKED_SCAN_INTERVAL); \ No newline at end of file diff --git a/BP/scripts/api/event_manager.js b/BP/scripts/api/event_manager.js new file mode 100644 index 00000000..7f77b709 --- /dev/null +++ b/BP/scripts/api/event_manager.js @@ -0,0 +1,66 @@ +import { world, system } from "@minecraft/server"; + +const placeHandlers = []; +const breakBeforeHandlers = []; +const breakAfterHandlers = []; +const interactHandlers = []; + +export function registerPlaceHandler(handler) { + placeHandlers.push(handler); +} + +export function registerBreakHandler(handler) { + if (handler.event === "before") { + breakBeforeHandlers.push(handler); + } else { + breakAfterHandlers.push(handler); + } +} + +export function registerInteractHandler(handler) { + interactHandlers.push(handler); +} + +world.afterEvents.playerPlaceBlock.subscribe(event => { + system.run(() => { + for (const handler of placeHandlers) { + if (handler.check(event.block)) { + handler.execute(event); + } + } + }); +}); + +world.beforeEvents.playerBreakBlock.subscribe(event => { + for (const handler of breakBeforeHandlers) { + if (handler.check(event.block)) { + handler.execute(event); + } + } +}); + +world.afterEvents.playerBreakBlock.subscribe(event => { + system.run(() => { + for (const handler of breakAfterHandlers) { + if (handler.check(event)) { + handler.execute(event); + } + } + }); +}); + +world.beforeEvents.playerInteractWithBlock.subscribe(event => { + const { player, block } = event; + const equippable = player.getComponent('minecraft:equippable'); + const mainHandItem = equippable.getEquipment('Mainhand'); + const isHoldingBow = mainHandItem?.typeId === 'minecraft:bow'; + + for (const handler of interactHandlers) { + if (handler.check(block)) { + handler.execute(event); + if (isHoldingBow && event.cancel) { + event.cancel = false; + } + } + } +}); \ No newline at end of file diff --git a/BP/scripts/api/libraries/EndlessDB.js b/BP/scripts/api/libraries/EndlessDB.js new file mode 100644 index 00000000..47c362b0 --- /dev/null +++ b/BP/scripts/api/libraries/EndlessDB.js @@ -0,0 +1,112 @@ +/** + * ★★★★★★★★★★★★★★★★★★★★ + * Лети со мной, мой милый, // Лети зі мною, мій милий, + * К звёздам, где мечты светили. // До зірок, де мрії світять. + * Держи меня крепко, не отпускай, // Тримай мене міцно, не відпускай. + * Мгновение вечно — не забывай. // Мить вічна — не забувай. + * + * Пока всё было, пусть замрёт, // Поки все було, нехай замре. + * Время не вернётся, пусть не ждёт. // Час не повернеться, нехай не чекає. + * Всё было навсегда, // Все було назавжди. + * В космоса бескрайняя утренняя звезда. // В безкрайній космос, рання зірка. + * ★★★★★★★★★★★★★★★★★★★★ + */ +// Lum Studio // +import { world } from "@minecraft/server"; +export { EndlessDB }; + +// Maximum number of characters per dynamic property part. +const PART_SIZE = 32767; + +/** + * EndlessDynamicProperty + * + * This class provides a simple key/value "database" that uses multiple dynamic properties + * to overcome the 32K byte storage limit per property. It stores JSON data by splitting + * it into parts and keeps track of the number of parts using a dedicated count property. + * + * Example usage: + * ```js + * const db = new EndlessDB("myDB:"); + * db.setAll({ foo: "bar", count: 123 }); + * const data = db.getAll(); + * console.log(data); + * ``` + * Note: Make sure that the prefix you supply is unique to avoid collisions. + */ +class EndlessDB { + /** + * @param {string} prefix - Unique prefix for this dynamic property store. + */ + constructor(prefix) { + this.prefix = prefix; + } + + /** + * Get the current number of parts used for storing data. + * If not defined, defaults to 1. + * @returns {number} + */ + get count() { + const value = world.getDynamicProperty(this.prefix + "count"); + return typeof value === "number" ? value : 1; + } + + /** + * Sets the part count. + * @param {number} value + */ + set count(value) { + world.setDynamicProperty(this.prefix + "count", value); + } + + /** + * Retrieves the stored data by concatenating all parts and parsing the JSON. + * @returns {object} The stored data object (or {} if empty or invalid). + */ + getAll() { + let jsonStr = ""; + for (let i = 0; i < this.count; i++) { + const part = world.getDynamicProperty(this.prefix + "part_" + i); + jsonStr += part ?? ""; + } + try { + return JSON.parse(jsonStr === "" ? "{}" : jsonStr); + } catch (error) { + console.error("EndlessDB: Error parsing JSON:", error); + return {}; + } + } + + /** + * Stores the given object as JSON by splitting it into parts and saving each part + * as a separate dynamic property. + * @param {object} object - The data to store. + */ + setAll(object) { + const jsonStr = JSON.stringify(object); + let remaining = jsonStr; + let i = 0; + while (remaining.length > 0) { + const part = remaining.slice(0, PART_SIZE); + world.setDynamicProperty(this.prefix + "part_" + i, part); + remaining = remaining.slice(PART_SIZE); + i++; + } + this.count = i; + } + + /** + * Clears all dynamic properties associated with this store. + */ + clear() { + const keys = world.getDynamicPropertyIds(); + for (const key of keys) { + if (key.startsWith(this.prefix + "part_") || key === this.prefix + "count") { + world.setDynamicProperty(key, undefined); + } + } + } +} + + diff --git a/BP/scripts/api/mixins.js b/BP/scripts/api/mixins.js index 4d787b65..69e08940 100644 --- a/BP/scripts/api/mixins.js +++ b/BP/scripts/api/mixins.js @@ -47,6 +47,16 @@ Merge(mc.Player.prototype, { this.runCommand(`give @s ${item} ${amount} ${data}`); this.runCommand("stopsound @s random.pop"); world.gameRules.sendCommandFeedback = cmdfeedback; + }, + + getPlanet() { + const dimId = this.dimension.id; + const entry = ALL_PLANETS.find(p => p.dimensionId === dimId || p.id === dimId.replace("cosmos:", "")); + if (entry) return entry.class; + if (dimId === "minecraft:the_end") { + return getPlanetByLocation(this.location, this.dimension); + } + return undefined; } }); @@ -54,9 +64,13 @@ Merge(mc.Player.prototype, { //@ts-expect-error Merge(mc.Block.prototype, { getPlanet(){ - if(["cosmos:space_stations", "minecraft:the_end"].includes(this.dimension.id)) { - return getPlanetByLocation(this.location); - }else return undefined; + const dimId = this.dimension.id; + const entry = ALL_PLANETS.find(p => p.dimensionId === dimId || p.id === dimId.replace("cosmos:", "")); + if (entry) return entry.class; + if (["cosmos:space_stations", "minecraft:the_end"].includes(dimId)) { + return getPlanetByLocation(this.location, this.dimension); + } + return undefined; }, }); @@ -65,21 +79,29 @@ Merge(mc.Block.prototype, { Merge(mc.World.prototype, { getDims(fn) { // dimension.getEntities returns a entity array, so flatMap to combine it into one array - return ['overworld', 'nether', 'the_end'].flatMap(dim => { - const dimension = this.getDimension(dim); - return fn ? fn(dimension) : dimension + return ['overworld', 'nether', 'the_end', 'cosmos:moon', 'cosmos:mars'].flatMap(dim => { + try { + const dimension = this.getDimension(dim); + return fn ? fn(dimension) : dimension; + } catch (e) { + return []; + } }) }, getPlanet(type){ - return ALL_PLANETS.find((planet) => planet.id == type)?.class; + return ALL_PLANETS.find((planet) => planet.id == type || planet.dimensionId == type)?.class; } }); Merge(mc.Entity.prototype, { getPlanet(){ - if(["cosmos:space_stations", "minecraft:the_end"].includes(this.dimension.id)) { - return getPlanetByLocation(this.location); - }else return undefined; + const dimId = this.dimension.id; + const entry = ALL_PLANETS.find(p => p.dimensionId === dimId || p.id === dimId.replace("cosmos:", "")); + if (entry) return entry.class; + if (["cosmos:space_stations", "minecraft:the_end"].includes(dimId)) { + return getPlanetByLocation(this.location, this.dimension); + } + return undefined; }, }); @@ -114,6 +136,53 @@ Merge(mc.Container.prototype, { if (property) entity.setDynamicProperty(property, value) }, + was_ui_clicked(slot, machine) { + const item = this.getItem(slot); + if (!item || (item.typeId !== 'cosmos:ui' && item.typeId !== 'cosmos:ui_button')) { + const player = machine.dimension.getPlayers({closest: 1, location: machine.location})[0]; + + if (item) { + if (player) { + const cursor = player.getComponent('minecraft:cursor_inventory'); + if (cursor) { + try { + cursor.item = item; + } catch (e) { + cursor.clear(); + const leftover = player.getComponent('inventory').container.addItem(item); + if (leftover) player.dimension.spawnItem(leftover, player.location); + } + } else { + const leftover = player.getComponent('inventory').container.addItem(item); + if (leftover) player.dimension.spawnItem(leftover, player.location); + } + } else { + machine.dimension.spawnItem(item, machine.location); + } + } else if (player) { + const cursor = player.getComponent('minecraft:cursor_inventory'); + if (cursor?.item?.typeId === 'cosmos:ui' || cursor?.item?.typeId === 'cosmos:ui_button') { + cursor.clear(); + } + } + + //sweeps the player inventory for leaked ui items + if (player) { + const pinv = player.getComponent('inventory')?.container; + if (pinv) { + for (let i = 0; i < pinv.size; i++) { + const pItem = pinv.getItem(i); + if (pItem && (pItem.typeId === 'cosmos:ui' || pItem.typeId === 'cosmos:ui_button')) { + pinv.setItem(i); + } + } + } + } + return true; + } + return false; + }, + updateUI(uiConfigs, data) { uiConfigs.forEach(config => { const uiItem = new ItemStack('cosmos:ui'); diff --git a/BP/scripts/api/player/celestial_selector.js b/BP/scripts/api/player/celestial_selector.js index de9d4958..e2833d39 100644 --- a/BP/scripts/api/player/celestial_selector.js +++ b/BP/scripts/api/player/celestial_selector.js @@ -1,5 +1,5 @@ -import { ActionFormData } from "@minecraft/server-ui"; -import { world, system } from "@minecraft/server"; +import { ActionFormData, ModalFormData } from "@minecraft/server-ui"; +import { world, system, Player } from "@minecraft/server"; import { get_rocket_data } from "./liftoff"; import { launch_to_earth } from "../../planets/dimensions/Overworld"; import { saved_rocket_items } from "./liftoff"; @@ -33,7 +33,7 @@ export function select_solar_system(player, tier = 1, calledViaCommand = false) const has_station = player.nameTag in space_stations let form = new ActionFormData() .title("Celestial Panel Solar System") - .body(`Tier ${tier} Station ${has_station || ('false ' + JSON.stringify(read_inventory(player)))}`) + .body(`Tier ${tier} Station ${has_station ? 'true Player:' + player.nameTag : 'false ' + JSON.stringify(read_inventory(player))}`) .button(`Launch to Overworld`) .button(`Launch to Moon`) .button(`Launch to Mars`) @@ -55,7 +55,13 @@ export function select_solar_system(player, tier = 1, calledViaCommand = false) case 2: if (tier >= 2) launch(player, "Mars", calledViaCommand); return case 3: if (tier >= 3) launch(player, "Venus", calledViaCommand); return case 4: if (tier >= 3) launch(player, "Asteroids", calledViaCommand); return - case 5: if (!Object.values(read_inventory(player)).includes(false)) create_station(player); return + case 5: { + if (!Object.values(read_inventory(player)).includes(false)) { + create_station(player); + select_solar_system(player, tier, calledViaCommand); + } + return + } } const station_index = response.selection - 6 const station = Object.values(space_stations)[Math.floor(station_index / 2)] @@ -108,7 +114,39 @@ function launch_to_station(player, station, station_object, calledViaCommand) { } function rename_station(player, station) { - if (debug) player.sendMessage(`Rename ${station.name}`) + const space_stations = JSON.parse(world.getDynamicProperty("all_space_stations") ?? '{}') + const owner = Object.keys(space_stations).find(key => space_stations[key].location.x === station.location.x) + if (!owner) return + + if (owner !== player.nameTag) { + player.sendMessage("§cYou can only rename your own space station!"); + return + } + + const modal = new ModalFormData() + .title("Rename Space Station") + .textField("Enter new name:", "My Space Station", station.name); + + modal.show(player).then((response) => { + if (response.canceled || !response.formValues || !response.formValues[0]) { + select_solar_system(player); + return; + } + + const newName = response.formValues[0].trim(); + if (newName === "") { + select_solar_system(player); + return; + } + + const updated_stations = JSON.parse(world.getDynamicProperty("all_space_stations") ?? '{}') + if (updated_stations[owner]) { + updated_stations[owner].name = newName; + world.setDynamicProperty("all_space_stations", JSON.stringify(updated_stations)); + player.sendMessage(`§aSpace station successfully renamed to: ${newName}`); + } + select_solar_system(player); + }) } function create_station(player) { @@ -117,9 +155,15 @@ function create_station(player) { let station_location = {x: 0 + Object.keys(space_stations).length * 2000, y: 70, z: 0} space_stations[player.nameTag] = { name: `${player.nameTag}'s Space Station`, location: station_location, is_generated: false} world.setDynamicProperty("all_space_stations", JSON.stringify(space_stations)) + if (player.getGameMode() !== "Creative") { + player.runCommand("clear @s cosmos:aluminum_ingot 0 16"); + player.runCommand("clear @s cosmos:advanced_wafer 0 1"); + player.runCommand("clear @s cosmos:tin_ingot 0 32"); + player.runCommand("clear @s minecraft:iron_ingot 0 24"); + } } -export function start_celestial_selector(player, tier = 1) { +export function start_celestial_selector(player, tier = 1, calledViaCommand = false) { player.setDynamicProperty('in_celestial_selector', true) player.runCommand('hud @s hide all') const fade = system.runInterval(() => { @@ -130,5 +174,5 @@ export function start_celestial_selector(player, tier = 1) { system.clearRun(fade) } }, 20) - select_solar_system(player, tier) + select_solar_system(player, tier, calledViaCommand) } \ No newline at end of file diff --git a/BP/scripts/api/register.js b/BP/scripts/api/register.js index e57d84bf..4777c4e0 100644 --- a/BP/scripts/api/register.js +++ b/BP/scripts/api/register.js @@ -1,10 +1,11 @@ import { ItemStack, system, world } from "@minecraft/server"; import { space_gear_component } from "./player/space_gear"; import { end_cleaner_component } from "./world/PlanetBuilder"; -import { aluminum_wire_component, switchable_wire_component} from "../core/blocks/aluminum_wire"; +import { aluminum_wire_component, switchable_wire_component } from "../core/blocks/aluminum_wire"; +import { oxygen_detector_component } from "../core/blocks/oxygen_detector"; import { cavernous_vines_component } from "../core/blocks/cavernous_vines"; -import { communication_dish_component } from "../core/blocks/dishbase"; import { cryogenic_chamber_component } from "../core/blocks/cryogenic_chamber"; +import { communication_dish_component } from "../core/blocks/dishbase"; import { walkway_component } from "../core/blocks/walkway"; import { arc_lamp, cheese_block, fallen_meteor } from "../core/matter/blocks"; import { fluid_pipe_component } from "../core/blocks/fluid_pipe"; @@ -23,10 +24,11 @@ import { bucket_component } from "../core/matter/fluids"; import { solar_panel_component } from "../core/machines/blocks/SolarPanel"; import { machine_component } from "../core/machines/Machine"; import { multi_block_component } from "../core/mullti_blocks/MultiBlock"; -import { select_solar_system } from "./player/celestial_selector"; +import { select_solar_system, start_celestial_selector } from "./player/celestial_selector"; import { volcanic_pickaxe_component } from "../core/items/volcanic_pickaxe"; import { fluid_tick_component } from "../core/matter/fluid_network"; import nasa_workbench_recipes from "../recipes/nasa_workbench"; +import { registerKorolev } from "../planets/korolev.js"; system.beforeEvents.startup.subscribe(({customCommandRegistry, itemComponentRegistry, blockComponentRegistry, dimensionRegistry}) => { const register_block_component = blockComponentRegistry.registerCustomComponent.bind(blockComponentRegistry) @@ -42,7 +44,8 @@ system.beforeEvents.startup.subscribe(({customCommandRegistry, itemComponentRegi register_block_component('cosmos:arc_lamp', arc_lamp) register_block_component("cosmos:cavernous_vines", cavernous_vines_component) register_block_component("cosmos:cheese_block", cheese_block) - register_block_component("cosmos:communication_dish", communication_dish_component) + register_block_component("cosmos:cryogenic_chamber", cryogenic_chamber_component) + register_block_component("cosmos:dishbase", communication_dish_component) register_block_component('cosmos:fallen_meteor', fallen_meteor) register_block_component('cosmos:fluid_pipe', fluid_pipe_component) register_block_component('cosmos:fluid_tank', fluid_tank_component) @@ -50,13 +53,13 @@ system.beforeEvents.startup.subscribe(({customCommandRegistry, itemComponentRegi register_block_component('cosmos:rocket_launch_pad', launch_pad_components.rocket_launch_pad) register_block_component('cosmos:buggy_fueling_pad', launch_pad_components.buggy_fueling_pad) register_block_component("cosmos:nasa_workbench", nasa_workbench_component) - register_block_component('cosmos:cryogenic_chamber', cryogenic_chamber_component) register_block_component('cosmos:walkway', walkway_component) // register_block_component('cosmos:wall', wall_component) register_block_component('cosmos:treasure_chest', treasure_chest_component) register_block_component("cosmos:boss_block", evolved_skeleton_component) register_block_component('cosmos:solar_panel', solar_panel_component) register_block_component('cosmos:machine', machine_component) + register_block_component('cosmos:oxygen_detector', oxygen_detector_component) register_block_component('cosmos:fluid_tick', fluid_tick_component) register_block_component("cosmos:multi_block", multi_block_component) @@ -75,6 +78,10 @@ system.beforeEvents.startup.subscribe(({customCommandRegistry, itemComponentRegi register_item_component("cosmos:volcanic_pickaxe", volcanic_pickaxe_component) // Dimensions + register_dimension("cosmos:moon") + register_dimension("cosmos:mars") + register_dimension("cosmos:venus") + register_dimension("cosmos:asteroids") register_dimension("cosmos:space_stations") // Commands register_command({ @@ -100,6 +107,20 @@ system.beforeEvents.startup.subscribe(({customCommandRegistry, itemComponentRegi } }) + register_command({ + name: "cosmos:planet_selector", + description: "Opens the planet selector screen.", + cheatsRequired: true, permissionLevel: 1, + optionalParameters: [ + { type: "Integer", name: "tier" } + ] + }, + ({sourceType, sourceEntity}, tier = 1) => { + if (sourceType == "Entity" && sourceEntity.typeId == "minecraft:player") { + system.run(() => start_celestial_selector(sourceEntity, tier, true)) + } + }) + register_enum('cosmos:vehicle', Object.keys(nasa_workbench_recipes)) register_command({ name: "cosmos:get_vehicle", @@ -127,4 +148,7 @@ system.beforeEvents.startup.subscribe(({customCommandRegistry, itemComponentRegi inventory.addItem(rocket) }) }) + + // Korolev Dimension Warp System + registerKorolev(customCommandRegistry); }) \ No newline at end of file diff --git a/BP/scripts/api/utils.js b/BP/scripts/api/utils.js index 8ca891ab..22260c59 100644 --- a/BP/scripts/api/utils.js +++ b/BP/scripts/api/utils.js @@ -1,5 +1,6 @@ // This file is for general Utility functions only. +import * as mc from "@minecraft/server"; import {machine_entities} from "../core/machines/Machine"; import {vehicles} from "../core/vehicles/Vehicle"; import { multi_blocks } from "../core/mullti_blocks/MultiBlock"; @@ -21,7 +22,11 @@ export function save_dynamic_object(storage, value, type, name = 'variables'){ entity.entity_data = entity.entity_data ?? {}; entity.entity_data[name] = value; data_maps[type].set(storage.id, entity); - storage.setDynamicProperty(type, JSON.stringify(entity.entity_data)) + const new_str = JSON.stringify(entity.entity_data); + if (entity.last_str !== new_str) { + entity.last_str = new_str; + storage.setDynamicProperty(type, new_str); + } } export function str(object) { return JSON.stringify(object) } @@ -40,6 +45,10 @@ export function six_neighbors(block) { return blocks } +export function get_neighbors(block) { + return six_neighbors_array.map(side => block[side]()) +} + // this function takes a Block and a Side (above, below, left, right, back, or front) and returns a location {x, y, z} const TURN_BY = { front: 0, back: Math.PI, left: Math.PI / 2, right: -Math.PI / 2 } const ROTATE_BY = { north: Math.PI / 2, east: Math.PI, south: -Math.PI / 2, west: 0 } @@ -57,7 +66,8 @@ export function location_of_side(block, side) { } export function get_entity(dimension, location, family) { - if (location) return dimension.getEntities({ + if (!location) return + return dimension.getEntities({ families: [family], location: { x: Math.floor(location.x) + 0.5, @@ -68,6 +78,17 @@ export function get_entity(dimension, location, family) { })[0] } +export const getHand = (() => { + const handsMap = new WeakMap(); + /** + * @param {mc.Entity} source + * @returns {mc.ContainerSlot} 'Mainhand' ContainerSlot of the entity + **/ + return source => handsMap.get(source) ?? handsMap.set( + source, source.getComponent("equippable")?.getEquipmentSlot("Mainhand") + ).get(source) + +})(); /**@type {(list?: T[])=>T} */ export function select_random_item(list = []) { @@ -113,10 +134,47 @@ export function compare_position(a, b) { export function floor_position({ x, y, z }) { return { x: Math.floor(x), y: Math.floor(y), z: Math.floor(z) }; } -export function getPlanetByLocation(location){ +export function getPlanetByLocation(location, dimension){ + if (dimension) { + const dimId = typeof dimension === 'string' ? dimension : dimension.id; + const entry = ALL_PLANETS.find(p => p.dimensionId === dimId || p.id === dimId.replace("cosmos:", "")); + if (entry) return entry.class; + } let {x, y, z} = location; return ALL_PLANETS.find((planet) => ( x >= planet.range.start.x && x <= planet.range.end.x && z >= planet.range.start.z && z <= planet.range.end.z) )?.class; } + +/** + * Force-closes any open container UI for the player by temporarily teleporting them out of range. + * @param {mc.Player} player + */ +export function closeContainerUI(player) { + if (!player || !player.isValid) return; + const returnPos = { ...player.location }; + const rot = player.getRotation(); + player.teleport({ x: returnPos.x, y: returnPos.y + 500, z: returnPos.z }); + mc.system.run(() => { + if (player.isValid) player.teleport(returnPos, { rotation: rot }); + }); +} + +/** + * Gets a random populated slot index in the given range. + * @param {mc.Container} container + * @param {number} start + * @param {number} end + * @returns {number} The slot index, or -1 if none found + */ +export function getRandomItemSlot(container, start, end) { + let validSlots = []; + for (let i = start; i <= end; i++) { + if (container.getItem(i)) { + validSlots.push(i); + } + } + if (validSlots.length === 0) return -1; + return validSlots[Math.floor(Math.random() * validSlots.length)]; +} diff --git a/BP/scripts/api/world/PlanetBuilder.js b/BP/scripts/api/world/PlanetBuilder.js index 50585168..82acbcc5 100644 --- a/BP/scripts/api/world/PlanetBuilder.js +++ b/BP/scripts/api/world/PlanetBuilder.js @@ -1,39 +1,20 @@ -import { world, BlockVolume, system } from "@minecraft/server"; +/** + * PlanetBuilder - Legacy End cleaner deprecation + * Custom dimensions natively generate in pure void substrate; + * The legacy end cleaner is maintained as a safe no-op for backward compatibility. + */ +import { world } from "@minecraft/server"; -function chunk_corner({x, z}) { - return { - x: Math.floor(x / 16) * 16, - z: Math.floor(z / 16) * 16, - } -} - -//this removes the small end islands, shulkers, gateways and chorus plants export const end_cleaner_component = { - onTick({block}) { - const the_end = world.getDimension('the_end'); - let location = block.location; - const {x, z} = chunk_corner(location) - const first_corner = {x, y: 10, z} - const other_corner = {x: x + 15, y: 120, z: z + 15} - the_end.fillBlocks(new BlockVolume(first_corner, other_corner), 'air', { - blockFilter: {includeTypes: ['end_stone', 'bedrock', 'end_gateway', 'chorus_plant', 'chorus_flower']} - }) - the_end.setBlockType(location, block.below().type) - const shulkers = the_end.getEntities({ - location: first_corner, - volume: {x: 16, y: 210, z: 16}, - type: "minecraft:shulker", - }) - shulkers.forEach(shulker=> shulker.remove()) - - let planet = block.getPlanet(); - if(!planet) return; - let offset = planet.offset(location) - offset.x = offset.x - 8; - offset.z = offset.z - 8; - if(planet.type == "moon" && (offset.x !== 0 || offset.z !== 0) && ((offset.x % 1024 === 0 || !offset.x) && (offset.z % 1024 === 0 || !offset.z))){ - let top_block = the_end.getTopmostBlock({x: location.x, z: location.z}).location.y; - world.structureManager.placeJigsawStructure("cosmos:moon_dungeon", the_end, {x: location.x, y: top_block - 20, z: location.z}, {ignoreStartHeight: true}); - } + onTick({ block }) { + try { + // Replace legacy cleaner block with natural turf or air + const below = block.below(); + if (below && below.isValid && below.typeId !== "cosmos:end_cleaner") { + block.setType(below.typeId); + } else { + block.setType("minecraft:air"); + } + } catch (e) {} } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/BP/scripts/core/PlayerWorldCycle.js b/BP/scripts/core/PlayerWorldCycle.js index ea4138fd..c0c16c0b 100644 --- a/BP/scripts/core/PlayerWorldCycle.js +++ b/BP/scripts/core/PlayerWorldCycle.js @@ -43,9 +43,11 @@ world.afterEvents.worldLoad.subscribe(() => { }); }); +const SPACE_DIMENSIONS = ["cosmos:moon", "cosmos:mars", "cosmos:venus", "cosmos:asteroids", "cosmos:space_stations"]; + //removes space tags and sets standart permissions to default world.afterEvents.playerSpawn.subscribe(({player}) => { - if(!["cosmos:space_stations", "minecraft:the_end"].includes(player.dimension.id)){ + if(!SPACE_DIMENSIONS.includes(player.dimension.id)){ space_tags_removing(player) } player.removeTag("gravity_falling") @@ -58,14 +60,16 @@ world.afterEvents.playerSpawn.subscribe(({player}) => { }); world.afterEvents.playerDimensionChange.subscribe((data) => { - if(["cosmos:space_stations", "minecraft:the_end"].includes(data.toDimension.id)){ - let planet = getPlanetByLocation(data.toLocation); + if(SPACE_DIMENSIONS.includes(data.toDimension.id)){ + let planet = data.player.getPlanet() || getPlanetByLocation(data.toLocation, data.toDimension); if(!planet) return; data.player.addTag("in_space"); data.player.addTag("ableToOxygen"); } - if(["cosmos:space_stations", "minecraft:the_end"].includes(data.fromDimension.id)){ - data.player.runCommand("fog @s remove mars") + if(SPACE_DIMENSIONS.includes(data.fromDimension.id)){ + try { + data.player.runCommand("fog @s remove mars"); + } catch (e) {} space_tags_removing(data.player); data.player.removeTag("gravity_falling") } diff --git a/BP/scripts/core/blocks/fallen_meteor.js b/BP/scripts/core/blocks/fallen_meteor.js new file mode 100644 index 00000000..090b59c3 --- /dev/null +++ b/BP/scripts/core/blocks/fallen_meteor.js @@ -0,0 +1,30 @@ +import { system } from "@minecraft/server"; + +system.beforeEvents.startup.subscribe(({ blockComponentRegistry }) => { + blockComponentRegistry.registerCustomComponent('cosmos:fallen_meteor', { + onTick({block, dimension}){ + if(system.currentTick % 5000 == 0 && block.permutation.getState("cosmos:heat_level") == 1){ + block.setPermutation(block.permutation.withState("cosmos:heat_level", 0)); + } + if(system.currentTick % 5 == 0 && dimension.isChunkLoaded(block.location) && block.permutation.getState("cosmos:heat_level")){ + let {x, y, z} = block.center(); + let burned_entity = dimension.getEntities({location: block.center(), maxDistance: 1})[0] + if(!burned_entity) return; + burned_entity.setOnFire(2, true); + dimension.playSound("fire.fire", {x: x, y: y, z: z}) + for(let i = 0; i < 8; i++){ + dimension.spawnParticle('minecraft:basic_smoke_particle', {x: x + Math.random(), y: y + 0.2, z: z + Math.random()}) + } + + let direction_x = x + 0.5 - burned_entity.location.x; + let direction_z; + + for (direction_z = burned_entity.location.z - z; direction_x * direction_x + direction_z * direction_z < 0.0001; direction_z = (Math.random() - Math.random()) * 0.01) + { + direction_x = (Math.random() - Math.random()) * 0.01; + } + try{burned_entity.applyKnockback({x: direction_x, z: direction_z}, 1)}catch{} + } + } + }) +}) \ No newline at end of file diff --git a/BP/scripts/core/blocks/fluid_pipe.js b/BP/scripts/core/blocks/fluid_pipe.js index 9d263e13..9f555a22 100644 --- a/BP/scripts/core/blocks/fluid_pipe.js +++ b/BP/scripts/core/blocks/fluid_pipe.js @@ -239,7 +239,6 @@ function connect_pipes(pipe) { }else if(network_id) refresh_network(pipe, undefined); } - export const fluid_pipe_component = { beforeOnPlayerPlace({block}) { system.run(() => {connect_pipes(block)}); diff --git a/BP/scripts/core/blocks/nasa_workbench.js b/BP/scripts/core/blocks/nasa_workbench.js index 32a3d4d2..ee06b401 100644 --- a/BP/scripts/core/blocks/nasa_workbench.js +++ b/BP/scripts/core/blocks/nasa_workbench.js @@ -125,11 +125,8 @@ function tick(workbench) { // add the side buttons const button_names = ['Tier 1 Rocket', 'Tier 2 Rocket', 'Tier 3 Rocket', 'Moon Buggy', 'Cargo Rocket', 'Astro Miner'] for (let i in button_names) { - const side_button = inventory.getItem(BUTTONS + +i) //detect a button press - if (!side_button) { - //reset the button - workbench.runCommand('clear @a cosmos:ui_button') + if (inventory.was_ui_clicked(BUTTONS + +i, workbench)) { //return the items to the nearest player and change the selected recipe select_recipe(Object.keys(recipes)[i], workbench, nearest_player) inventory.add_ui_display(SCHEMAS + schematic_names.length, button_names[i], +i+1) @@ -140,11 +137,7 @@ function tick(workbench) { } //the button that takes you to the schematic insertion screen - const schematic_button = inventory.getItem(SCHEMA) - // if the button got pressed - if (!schematic_button) { - //reset the button - workbench.runCommand('clear @a cosmos:ui_button') + if (inventory.was_ui_clicked(SCHEMA, workbench)) { block_all_slots(workbench, nearest_player) inventory.add_ui_display(SCHEMAS + schematic_names.length, 'Add New Schematics', 7) } @@ -153,10 +146,7 @@ function tick(workbench) { if (inventory.getItem(SCHEMA)?.nameTag != unlock_button_name) set_ui_button(inventory, SCHEMA, unlock_button_name) //detect pressing the unlock button - const unlock_button = inventory.getItem(SCHEMA + 1) - if (!unlock_button) { - //reset the button - workbench.runCommand('clear @a cosmos:ui_button') + if (inventory.was_ui_clicked(SCHEMA + 1, workbench)) { set_ui_button(inventory, SCHEMA + 1, 'Unlock') //get the placed schematic and make sure its new if (!schematic) return diff --git a/BP/scripts/core/blocks/oxygen_detector.js b/BP/scripts/core/blocks/oxygen_detector.js new file mode 100644 index 00000000..8d7b0443 --- /dev/null +++ b/BP/scripts/core/blocks/oxygen_detector.js @@ -0,0 +1,21 @@ +import OxygenUtil from "../../api/world/OxygenUtils"; + +// Java: TileEntityOxygenDetector — checks every 50 ticks for breathable air +// and updates the block state to emit/stop redstone. + +export const oxygen_detector_component = { + onTick({ block }) { + const { x, y, z } = block.location; + const aabb = { + min: { x: x - 0.6, y: y - 0.6, z: z - 0.6 }, + max: { x: x + 1.6, y: y + 1.6, z: z + 1.6 } + }; + + const oxygenFound = OxygenUtil.isAABBInBreathableAirBlockWorld(aabb, false); + + const currentActive = block.permutation.getState('cosmos:active'); + if (oxygenFound !== currentActive) { + block.setPermutation(block.permutation.withState('cosmos:active', oxygenFound)); + } + } +}; diff --git a/BP/scripts/core/liquids/Canister.js b/BP/scripts/core/liquids/Canister.js new file mode 100644 index 00000000..4ce6a398 --- /dev/null +++ b/BP/scripts/core/liquids/Canister.js @@ -0,0 +1,47 @@ +import { Container, ItemStack, system } from "@minecraft/server"; + +class Canister { + static empty = 0; + static full = 6; + /** + * + * @param {Liquid} liquid + */ + id; + constructor(liquid) { + this.id = `cosmos:${liquid.getType()}_canister_partial`; + }; + /** + * function for get canister id dependences from his liquid level. Empty is 0, full is 6; + * @param {number} liquid_level + */ + get(liquid_level) { + return `${this.id}_${level}`; + }; + /** + * function for get a canister filling from current ItemStack + * @param {ItemStack} stack + */ + getFilling(stack) { + return Number(stack.typeId.slice(-1, stack.typeId.length)); + }; + /** + * + * @param {number} liquid + * @param {Container} container + * @param {number} slot + */ + extract(liquid_param, container, slot) { + const canister_slot = container.getItem(slot); + const liquid_level = this.getFilling(canister_slot); + const liquid = container.getItem(0).getLore()[liquid_param]; + if(liquid >= 150 || liquid_level >= Canister.full) return; + if(system.currentTick % 10 === 0) { + container.setItem(slot, this.get(liquid_level+1)); + container.getItem(0).getLore()[liquid_param] = String(Number(liquid)-150); + }; + }; + + static OIL = new Canister(Liquid.OIL); + static FUEL = new Canister(Liquid.FUEL); +} diff --git a/BP/scripts/core/liquids/Liquid.js b/BP/scripts/core/liquids/Liquid.js new file mode 100644 index 00000000..09df00de --- /dev/null +++ b/BP/scripts/core/liquids/Liquid.js @@ -0,0 +1,14 @@ +class Liquid { + type; + constructor(type) { + this.type = type; + }; + get getType() { + return this.type + }; + get getBlock() { + return `cosmos:liquid_${this.type}`; + }; + static OIL = new Liquid("oil"); + static FUEL = new Liquid("fuel"); +} \ No newline at end of file diff --git a/BP/scripts/core/liquids/index.js b/BP/scripts/core/liquids/index.js new file mode 100644 index 00000000..a57b4c4d --- /dev/null +++ b/BP/scripts/core/liquids/index.js @@ -0,0 +1,2 @@ +export * from './Liquid'; +export * from './Canister' \ No newline at end of file diff --git a/BP/scripts/core/machines/AllMachineBlocks.js b/BP/scripts/core/machines/AllMachineBlocks.js index f42d6765..c77f22e8 100644 --- a/BP/scripts/core/machines/AllMachineBlocks.js +++ b/BP/scripts/core/machines/AllMachineBlocks.js @@ -2,6 +2,7 @@ import CoalGenerator from './blocks/CoalGenerator' import EnergyStorage from './blocks/EnergyStorage' import OxygenCollector from './blocks/OxygenCollector' import Compressor from './blocks/Compressor' +import AstroMinerDock from './blocks/AstroMinerDock' import CircuitFabricator from './blocks/CircuitFabricator' import Refinery from './blocks/Refinery' import ElectricCompressor from './blocks/ElectricCompressor' @@ -17,8 +18,24 @@ import OxygenDistributor from './blocks/OxygenDistributor' import SolarPanel from './blocks/SolarPanel' import Deconstructor from './blocks/Deconstructor' import MethaneSynthesizer from './blocks/MethaneSynthesizer' +import CargoLoader from './blocks/CargoLoader' +import CargoUnloader from './blocks/CargoUnloader' +import OxygenSealer from './blocks/OxygenSealer' +import ChromaticApplicator from './blocks/ChromaticApplicator' +import ShortRangeTelepad from './blocks/ShortRangeTelepad' +import LaunchController from './blocks/LaunchController' +import AdvancedLaunchController from './blocks/AdvancedLaunchController' +import Terraformer from './blocks/Terraformer' +import GeothermalGenerator from './blocks/GeothermalGenerator' +import SolarArrayController from './blocks/SolarArrayController' +import AirlockController from './blocks/AirlockController' const AllMachines = { + airlock_controller: AirlockController, + advanced_launch_controller: AdvancedLaunchController, + launch_controller: LaunchController, + short_range_telepad: ShortRangeTelepad, + astro_miner_dock: AstroMinerDock, coal_generator: CoalGenerator, compressor: Compressor, energy_storage_module: EnergyStorage.energy_storage_module, @@ -40,8 +57,15 @@ const AllMachines = { water_electrolyzer: WaterElectrolyzer, gas_liquefier: GasLiquefier, deconstructor: Deconstructor, - methane_synthesizer: MethaneSynthesizer, - parachest: Parachest + methane_synthesizer: MethaneSynthesizer, + parachest: Parachest, + cargo_loader: CargoLoader, + cargo_unloader: CargoUnloader, + oxygen_sealer: OxygenSealer, + chromatic_applicator: ChromaticApplicator, + terraformer: Terraformer, + geothermal_generator: GeothermalGenerator, + solar_array_controller: SolarArrayController, } for (const machine in AllMachines) AllMachines[machine].ui = `§${machine.split('').join('§')}` diff --git a/BP/scripts/core/machines/BlockEntity.js b/BP/scripts/core/machines/BlockEntity.js new file mode 100644 index 00000000..dacbad66 --- /dev/null +++ b/BP/scripts/core/machines/BlockEntity.js @@ -0,0 +1,99 @@ +import { Entity, system, world } from "@minecraft/server"; + +class BlockEntity { + position; + runId; + block; + entity; + constructor(block, entity) { + BlockEntityData.className[entity] = this; + this.block = {id: block}; + this.position = entity.location; + this.entity = entity; + this.runId = system.runInterval(() => { + // if (!this.entity.isValid()) { + // this.destroy(); + // system.clearRun(this.runId); + // return; + // }; + return this.onTick(); + }); + } + onLoad() {} + onInit() {} + onTick() {} + onPlace() {} + onDestroy() {} + destroy() { + const BlockEntitySelf = BlockEntityData.getFromCoords(this.position); + BlockEntitySelf?.destroy(); + BlockEntityData.list.delete(this.position); + this.clearContainer(); + try { + this.entity.remove(); + } catch (e) {} + }; + clearContainer() { + const container = this.entity.getComponent('minecraft:inventory')?.container; + if(container) { + for(let i = 0; i < container.size; i++) { + if (container.getItem(i)?.typeId == 'cosmos:ui') { + container.setItem(i, undefined) + } + } + } + } +} + +class BlockEntityData { + static className = {}; + static list = new Map(); + /** + * + * @param {Entity} entity + */ + static defineEntity(entity) { + const id = entity.typeId; + if (!id.startsWith("cosmos:machine:")) { + return false; + } + return id.replace("cosmos:machine:", ""); + } + /** + * + * @param {Vector3} coords + */ + static getFromCoords(coords) { + if (!this.list.has(coords)) return null; + return this.list.get(coords); + } + static compelete = (() => { + world.afterEvents.entitySpawn.subscribe((descriptor) => { + const entity = descriptor.entity; + const block = entity.dimension.getBlock(entity.location); + const machineEntity = this.defineEntity(entity); + if (machineEntity) { + const BlockEntity = this.className[machineEntity]; + this.list.set( + block.location, + new BlockEntity( + Object.assign(entity, { location: block.location }), + `cosmos:${block}` + ) + ); + const result = this.getFromCoords(block.location); + result?.onInit(); + } + }); + + world.afterEvents.playerBreakBlock.subscribe((descriptor) => { + const coords = descriptor.block.location; + const BlockEntity = this.getFromCoords(coords); + if (BlockEntity) { + BlockEntity?.onDestroy(); + BlockEntity?.destroy(); + this.list.delete(coords); + } + }); + })(); +} diff --git a/BP/scripts/core/machines/Machine.js b/BP/scripts/core/machines/Machine.js index ddca51c9..530e594f 100644 --- a/BP/scripts/core/machines/Machine.js +++ b/BP/scripts/core/machines/Machine.js @@ -1,4 +1,66 @@ -import { world, system, ItemStack } from "@minecraft/server"; +/** + * @fileoverview Machine Engine — Lazy Evaluation Tick System + * + * This is the central tick orchestrator for ALL machines in Cosmos-Adventure. + * It manages machine entity lifecycles, ticking, hopper I/O, and the lazy + * evaluation optimization system. + * + * ## Architecture Overview + * + * Every machine block (compressor, furnace, refinery, etc.) has a companion + * entity spawned at its block center. The entity holds the machine's inventory + * (container) and persistent state (dynamic properties). This file maintains + * a runtime registry (`machine_entities` Map) of all active machines and runs + * a single `system.runInterval` that iterates them each tick. + * + * ## Lazy Evaluation (Demand-Driven Ticking) + * + * **Problem:** With 50+ machines placed, calling `onTick()` on every single + * machine every tick is extremely expensive — most machines sit idle with + * nobody looking at them. + * + * **Solution:** Machines are split into two categories: + * + * 1. **Dormant machines** — No player has the container UI open. + * These are SKIPPED entirely in the tick loop. A `sleepTick` timestamp + * records when they went dormant. This timestamp is persisted to the + * entity's dynamic properties so it survives chunk unload/reload. + * + * 2. **Awake machines** — A player has the container open (`active_ui > 0`), + * OR the machine is in the `ALWAYS_TICK` set. These tick normally. + * + * **Catch-up:** When a player opens a dormant machine's container: + * - The system calculates `elapsed = currentTick - sleepTick` + * - It replays the machine's `onTick()` for those elapsed ticks + * - Replay is spread across frames via `system.runInterval` to prevent lag + * - Hopper interactions are also replayed (every 8th catch-up tick) + * - Neighboring dormant machines within 2 blocks are also caught up + * to ensure hopper chains (Machine A → hopper → Machine B) stay consistent + * + * **Always-awake exceptions:** Some machines interact with the live world + * (placing blocks, teleporting entities, rotating models) and must always tick: + * - `airlock_controller` — real-time block placement/removal + * - `short_range_telepad` — real-time entity teleportation + * - `terraformer` — real-time world block modification + * - `oxygen_distributor` — live bubble radius visual + * - `basic_solar_panel` / `advanced_solar_panel` — live panel rotation + * + * ## Fluid & Energy Handling + * + * All fluid pipe interactions (`output_fluid`, `load_from_pipe`, `load_from_item`) + * and energy wire interactions (`charge_from_wires`, `charge_battery`) are called + * from INSIDE each machine's `onTick()` method. This means they are automatically + * replayed during catch-up — no special handling needed. + * + * **Important caveat:** Pipe/wire transfers to ADJACENT machines during catch-up + * are handled by `wake_neighbors()` which wakes dormant machines within 2 blocks. + * However, very long pipe networks (>2 blocks) may not fully propagate during + * a single catch-up since only direct neighbors are awakened. + * + * @module Machine + */ + +import { world, system, BlockPermutation, ItemStack } from "@minecraft/server"; import machines from "./AllMachineBlocks"; import { multi_blocks } from "../mullti_blocks/MultiBlock"; import { detach_wires, attach_to_wires } from "../blocks/aluminum_wire"; @@ -7,15 +69,48 @@ import { pickaxes } from "../../api/utils"; import { setSolarPanelBlocks } from "./blocks/SolarPanel"; import data from "./blocks/CoalGenerator"; +/** + * Registry of multi-block machine placement validators. + * Maps block type IDs to functions that validate/set up the multi-block structure. + * @type {Object} + */ const multi_block_machines = { "cosmos:basic_solar_panel": setSolarPanelBlocks, "cosmos:advanced_solar_panel": setSolarPanelBlocks } + +/** + * Runtime registry of all active machine entities. + * Key: entity ID string, Value: MachineData object. + * + * @type {Map} + * + * @typedef {Object} MachineData + * @property {string} type - Machine identifier without namespace (e.g. "compressor", "electric_furnace") + * @property {{x: number, y: number, z: number}} location - Floored block location of the machine + * @property {Object} entity_data - Cached parsed dynamic property data (from "machine_data") + * @property {number} [sleepTick] - Tick when this machine went dormant (undefined = awake). + * Persisted to entity dynamic property "sleep_tick" to survive chunk unload/reload. + */ export let machine_entities = new Map(); +/** + * Returns the machine definition object for a given machine entity. + * @param {Entity} entity - The machine entity + * @returns {Object|undefined} Machine definition from AllMachineBlocks, or undefined + */ export function get_data(entity) { return machines[entity.typeId.replace('cosmos:', '')] } + +/** + * Registers a machine entity into the runtime registry when it loads or spawns. + * Validates that the entity's block still exists and matches its type. + * Restores `sleepTick` from the entity's persisted dynamic property if present + * (this is how sleep state survives chunk unload/reload cycles). + * + * @param {Entity} entity - The machine entity to register + */ function reload_machine(entity){ const machine_name = entity.typeId.replace('cosmos:', ''); if (!Object.keys(machines).includes(machine_name)) return; @@ -30,9 +125,26 @@ function reload_machine(entity){ block_location = {x: Math.floor(block_location.x), y: Math.floor(block_location.y), z: Math.floor(block_location.z)}; const dynamic_object = JSON.parse(entity.getDynamicProperty("machine_data") ?? "{}"); - machine_entities.set(entity.id, { type: machine_name, location: block_location, entity_data: dynamic_object }); + // Restore sleepTick from persisted dynamic property (survives chunk unload) + const persisted_sleep = entity.getDynamicProperty("sleep_tick"); + const entry = { type: machine_name, location: block_location, entity_data: dynamic_object }; + if (persisted_sleep !== undefined) entry.sleepTick = persisted_sleep; + machine_entities.set(entity.id, entry); } +/** + * Handles hopper item transfer interactions for a machine block. + * Processes three directions: + * - **Below:** Drains items from machine output slots into hopper below + * - **Above:** Pulls items from hopper above into machine top input slots + * - **Sides:** Pulls items from side hoppers into machine side input slots + * + * Called every 8 ticks during normal operation and every 8th tick during catch-up. + * + * @param {Block} block - The machine's block reference + * @param {Entity} entity - The machine entity (has inventory component) + * @param {Object} data - Machine definition from AllMachineBlocks (has items.output, items.top_input, items.side_input) + */ function hopper_interactions(block, entity, data) { ;(()=>{ // drain items out of the output slots let hopper; try { hopper = block.below()} catch {} // makes sure it doesn't try pick a block below the world bottom @@ -122,28 +234,190 @@ function hopper_interactions(block, entity, data) { +/** + * Runs raycasts from all players to detect machine entities they're looking at. + * If a player is sneaking or holding a pickaxe/wrench and looking at a cosmos entity, + * triggers the "cosmos:shrink" event on it (used for hit-box shrinking on interaction). + * Called every 2 ticks from the main tick loop. + */ function block_entity_access() { const players = world.getAllPlayers(); for (const player of players) { - if (!player) continue; + if (!player || !player.isValid) continue; + const item = player.getComponent("minecraft:equippable")?.getEquipment("Mainhand")?.typeId; + const has_pickaxe = pickaxes.has(item); + const has_wrench = item === "cosmos:standard_wrench" || item === "cosmos:wrench"; + if (!player.isSneaking && !has_pickaxe && !has_wrench) continue; + const targetEntity = player.getEntitiesFromViewDirection({ maxDistance: 6, families: ["cosmos"], ignoreBlockCollision: true })[0]?.entity; - if (player.isSneaking) { - if (targetEntity) targetEntity.triggerEvent("cosmos:shrink"); - continue; - } - const item = player.getComponent("minecraft:equippable").getEquipment("Mainhand")?.typeId; - const has_pickaxe = pickaxes.has(item); - const has_wrench = item === "cosmos:standard_wrench"; - if (has_pickaxe || has_wrench) { - if (targetEntity) targetEntity.triggerEvent("cosmos:shrink"); + + if (targetEntity) { + targetEntity.triggerEvent("cosmos:shrink"); } } } +// ============================================================================ +// LAZY EVALUATION SYSTEM +// ============================================================================ + +/** + * Set of machine type identifiers that MUST always tick regardless of UI state. + * These machines interact with the live world in ways that cannot be deferred: + * - `airlock_controller` — places/removes airlock_seal blocks based on player proximity + * - `short_range_telepad` — detects standing entities and teleports them in real-time + * - `terraformer` — modifies world blocks (grass, water, saplings) in a radius + * - `oxygen_distributor` — updates live bubble_radius entity property for render controller + * - `basic_solar_panel` / `advanced_solar_panel` — smoothly rotates panel entity model + * + * @type {Set} + */ +const ALWAYS_TICK = new Set([ + "airlock_controller", + "short_range_telepad", + "terraformer", + "oxygen_distributor", + "basic_solar_panel", + "advanced_solar_panel", +]); + +/** + * Maximum number of ticks to catch up when a dormant machine wakes. + * Prevents massive lag spikes if a machine has been dormant for hours. + * 6000 ticks ≈ 5 minutes of real-time at 20 TPS. + * @type {number} + */ +const MAX_CATCHUP_TICKS = 6000; + +/** + * Number of catch-up ticks to replay per frame. + * Higher values = faster catch-up but more per-frame CPU usage. + * 20 replayed ticks per frame means a 6000-tick catch-up takes 300 frames (15 seconds). + * @type {number} + */ +const CATCHUP_PER_FRAME = 20; + +/** + * Starts a self-clearing `system.runInterval` that replays a dormant machine's + * `onTick()` for the number of elapsed ticks since it went to sleep. + * + * Processes `CATCHUP_PER_FRAME` ticks each frame to spread the work and prevent + * lag spikes. Also runs `hopper_interactions()` every 8th replayed tick to maintain + * item flow through hopper chains during catch-up. + * + * **Critical: system.currentTick spoofing** + * Many machine `onTick()` methods use `system.currentTick % N` for rate-limiting + * (e.g. fluids.js uses `% 20`, Refinery uses `% 2`, OxygenCollector uses `% 10`). + * During catch-up, all iterations run in the same real tick, so `system.currentTick` + * would be constant — breaking ALL rate-limited operations. To fix this, we + * temporarily override `system.currentTick` to simulate advancing time, incrementing + * by 1 for each replayed tick. The real value is restored after each frame batch. + * + * The interval auto-cancels via `system.clearRun()` when: + * - All elapsed ticks have been replayed + * - The machine entity becomes invalid (broken/removed) + * + * **Fluid & energy note:** All fluid pipe interactions (`output_fluid`, `load_from_pipe`) + * and wire energy transfers (`charge_from_wires`) are called from INSIDE each machine's + * `onTick()`, so they are automatically replayed during catch-up with correct timing. + * + * @param {Entity} machineEntity - The machine entity to catch up + * @param {Block} block - The machine's block reference + * @param {Object} data - Machine definition from AllMachineBlocks (has onTick method) + * @param {number} elapsedTicks - Number of ticks the machine was dormant + * @param {number} sleepTick - The tick when the machine went dormant (used to reconstruct virtual tick values) + */ +function start_catchup(machineEntity, block, data, elapsedTicks, sleepTick) { + const total = Math.min(elapsedTicks, MAX_CATCHUP_TICKS); + let done = 0; + const handle = system.runInterval(() => { + if (!machineEntity.isValid) { system.clearRun(handle); return; } + + // Spoof system.currentTick so rate-limiting (% 2, % 8, % 10, % 20) works correctly + const realTick = system.currentTick; + for (let i = 0; i < CATCHUP_PER_FRAME && done < total; i++, done++) { + system.currentTick = sleepTick + done; + data.onTick(machineEntity, block); + // Simulate hopper interactions at the same rate as live ticking (every 8 ticks) + if (done % 8 === 0) hopper_interactions(block, machineEntity, data); + } + // Restore real tick value + system.currentTick = realTick; + + if (done >= total) system.clearRun(handle); + }); +} + +/** + * When a machine wakes up, also catches up all dormant machines within 2 blocks. + * This ensures hopper chains (Machine A → hopper → Machine B) produce consistent + * results — the upstream machine's catch-up generates output items before the + * downstream machine tries to consume them. + * + * Uses Chebyshev distance (max of |dx|, |dy|, |dz|) with threshold of 2 blocks, + * which covers all possible hopper orientations (above, below, and 4 cardinal sides). + * + * **Limitation:** Only wakes DIRECT neighbors (2-block radius). Very long chains + * (A → hopper → B → hopper → C) where A and C are >2 blocks apart will only + * cascade if B is within 2 blocks of both A and C. In practice this covers + * virtually all real setups since hoppers are 1 block long. + * + * @param {Entity} sourceEntity - The machine entity that just woke up + * @param {MachineData} sourceMachineData - The waking machine's registry data (has .location) + */ +function wake_neighbors(sourceEntity, sourceMachineData) { + const loc = sourceMachineData.location; + machine_entities.forEach((neighborData, neighborId) => { + if (neighborId === sourceEntity.id) return; // skip self + if (!neighborData.sleepTick) return; // already awake + if (ALWAYS_TICK.has(neighborData.type)) return; // always ticks anyway + + // Check if neighbor is within 2 blocks (hopper reach) + const nl = neighborData.location; + if (Math.abs(nl.x - loc.x) > 2 || Math.abs(nl.y - loc.y) > 2 || Math.abs(nl.z - loc.z) > 2) return; + + const neighborEntity = world.getEntity(neighborId); + if (!neighborEntity?.isValid) return; + + const neighborSleepTick = neighborData.sleepTick; + const elapsed = system.currentTick - neighborSleepTick; + delete neighborData.sleepTick; + // Clear persisted sleep on the entity + try { neighborEntity.setDynamicProperty("sleep_tick", undefined); } catch (e) {} + + if (elapsed <= 0) return; + + const nData = machines[neighborData.type]; + if (!nData) return; + + let nBlock; + try { nBlock = neighborEntity.dimension.getBlock(neighborData.location); } catch (e) {} + if (!nBlock) return; + + start_catchup(neighborEntity, nBlock, nData, elapsed, neighborSleepTick); + }); +} + +// ============================================================================ +// MAIN TICK LOOP +// ============================================================================ + +/** + * World load handler — initializes the machine registry and starts the main tick loop. + * + * On world load: + * 1. Scans all dimensions for entities with the "machine" family and registers them + * 2. Starts a `system.runInterval` (every tick) that: + * - Runs `block_entity_access()` every 2 ticks (player raycast for wrench/pickaxe) + * - Iterates all registered machines: + * - Removes invalid/mismatched entries + * - **Dormant machines** (no UI open, not in ALWAYS_TICK): records sleepTick, skips + * - **Awake machines**: calls `onTick()` and `hopper_interactions()` (every 8 ticks) + */ world.afterEvents.worldLoad.subscribe(() => { world.getDims(dimension => dimension.getEntities({includeFamilies: ['machine']})).forEach(entity => {reload_machine(entity)}); system.runInterval(() => { @@ -151,31 +425,81 @@ world.afterEvents.worldLoad.subscribe(() => { // give block access every 2 ticks if (!(system.currentTick % 2)) block_entity_access(); + const isHopperTick = (system.currentTick % 8 === 0); + machine_entities.forEach((machineData, entityId) => { const machineEntity = world.getEntity(entityId); - if (!machineEntity?.isValid) return; - let block = machineEntity.dimension.getBlock(machineData.location); - if(!block) return; - const data = machines[machineData.type] - // tick the machine - data.onTick(machineEntity, block) + if (!machineEntity?.isValid) { + machine_entities.delete(entityId); + return; + } + const dimension = machineEntity.dimension; + let block; + try { block = dimension.getBlock(machineData.location); } catch (e) {} + if (!block) return; + + if (block.typeId !== machineEntity.typeId) { + machine_entities.delete(entityId); + try { machineEntity.remove(); } catch (e) {} + return; + } + + const data = machines[machineData.type]; + if (!data) return; + + const isAwake = machineEntity.active_ui || ALWAYS_TICK.has(machineData.type); + + if (!isAwake) { + // Machine is dormant — record when it fell asleep (if not already recorded) + if (!machineData.sleepTick) { + machineData.sleepTick = system.currentTick; + // Persist to entity dynamic property so it survives chunk unload + try { machineEntity.setDynamicProperty("sleep_tick", system.currentTick); } catch (e) {} + } + return; // skip ticking this machine entirely + } + + // Machine is awake — tick it normally + data.onTick(machineEntity, block); + // hopper support every 8 ticks - if (system.currentTick % 8 == 0) hopper_interactions(block, machineEntity, data) + if (isHopperTick) hopper_interactions(block, machineEntity, data); }); }); }); +// ============================================================================ +// BLOCK CUSTOM COMPONENT — PLACEMENT & BREAKING +// ============================================================================ + +/** + * Custom block component handlers for machine blocks. + * Registered in `system.beforeEvents.startup` via the block component registry. + * + * @property {Function} beforeOnPlayerPlace - Spawns the machine entity, sets nameTag, + * registers in machine_entities, and connects to wire/pipe networks. + * @property {Function} onPlayerBreak - Disconnects wires/pipes, clears UI items from + * inventory, kills (drops items) and removes the machine entity. + */ export const machine_component = { + /** + * Called before a machine block is placed by a player. + * Spawns the companion entity at block center, assigns the UI nameTag, + * calls the machine's optional `onPlace` hook, and connects to adjacent + * wire and pipe networks. + * @param {Object} event - Block place event with block and permutationToPlace + */ beforeOnPlayerPlace(event) { const { block, permutationToPlace: perm } = event; const machine_name = perm.type.id.replace('cosmos:', ''); const machine_object = machines[machine_name]; + if (!machine_object) return; if(machine_object.multi_block && !multi_block_machines[perm.type.id](block)){event.cancel = true; return;} system.run(() => { const entity = block.dimension.spawnEntity(perm.type.id, block.bottomCenter()); entity.nameTag = machine_object.ui; - if (typeof machine_object.onPlace == 'function') machine_object.onPlace(entity, block) + if (typeof machine_object.onPlace == 'function') machine_object.onPlace(entity, block, event) const dynamic_object = JSON.parse(entity.getDynamicProperty("machine_data") ?? "{}"); machine_entities.set(entity.id, { type: machine_name, location: block.location, entity_data: dynamic_object }); if (perm.getState("cosmos:full")) { @@ -185,6 +509,14 @@ export const machine_component = { attach_pipes(block) }); }, + + /** + * Called when a player breaks a machine block. + * Disconnects from wire/pipe networks, removes UI placeholder items from + * the entity's inventory (so they don't drop), then kills the entity + * (which drops real items) and removes it. + * @param {Object} param0 - Break event with block, dimension, and brokenBlockPermutation + */ onPlayerBreak({ block, dimension, brokenBlockPermutation: perm }) { detach_wires(block); detach_pipes(block, perm, "machine"); @@ -217,21 +549,156 @@ export const machine_component = { }, } +// ============================================================================ +// EVENT SUBSCRIPTIONS +// ============================================================================ + +/** Re-register machine entities when they load into a chunk */ world.afterEvents.entityLoad.subscribe(({ entity }) => reload_machine(entity)); -//remove the ui item entities +/** + * Handles sneaking player interaction with machine entities. + * If the player is holding a hopper and sneaking, places a hopper block adjacent + * to the machine in the direction the player is facing. + */ +world.beforeEvents.playerInteractWithEntity.subscribe((e) => { + const { target: entity, player } = e; + if (!machine_entities.has(entity.id)) return; + if (!player.isSneaking) return; + + e.cancel = true; + const equipment = player.getComponent("equippable"); + const selectedItem = equipment.getEquipment("Mainhand"); + if (!selectedItem) return; + + if (selectedItem.typeId === "minecraft:hopper") { + const machineBlock = player.dimension.getBlock(entity.location); + if (machineBlock) { + const facingDirection = (() => { + const dx = player.location.x - entity.location.x; + const dz = player.location.z - entity.location.z; + if (Math.abs(dx) > Math.abs(dz)) return dx > 0 ? 1 : 3; + else return dz > 0 ? 2 : 0; + })(); + const getAdjacentBlockLocation = (location, facingDirection) => { + switch (facingDirection) { + case 0: return { x: location.x, y: location.y, z: location.z - 1 }; + case 1: return { x: location.x + 1, y: location.y, z: location.z }; + case 2: return { x: location.x, y: location.y, z: location.z + 1 }; + case 3: return { x: location.x - 1, y: location.y, z: location.z }; + default: return location; + } + }; + + const hopperLocation = getAdjacentBlockLocation(machineBlock.location, facingDirection); + const hopperBlock = player.dimension.getBlock(hopperLocation); + + const hasEntitiesAt = (dimension, location) => { + const entities = dimension.getEntities({ + location: { x: location.x + 0.5, y: location.y + 0.5, z: location.z + 0.5 }, + maxDistance: 0.5, + }); + return entities.length > 0; + }; + + if (hopperBlock.typeId === "minecraft:air" && !hasEntitiesAt(player.dimension, hopperLocation)) { + const hopperPermutation = BlockPermutation.resolve("minecraft:hopper") + .withState("facing_direction", facingDirection); + + system.run(() => { + hopperBlock.setPermutation(hopperPermutation); + if (player.getGameMode() !== "Creative") { + if (selectedItem.amount === 1) { + equipment.setEquipment("Mainhand", undefined); + } else { + selectedItem.amount -= 1; + equipment.setEquipment("Mainhand", selectedItem); + } + } + }); + } + } + } +}); + +/** Removes dropped "cosmos:ui" item entities (UI placeholder items should never exist in the world) */ world.afterEvents.entitySpawn.subscribe((data) => { if (data.entity.isValid && data.entity.typeId == "minecraft:item" && data.entity.getComponent("minecraft:item")?.itemStack.typeId == "cosmos:ui") { data.entity.remove(); } }); +// ============================================================================ +// LAZY EVALUATION — CONTAINER OPEN / CLOSE HANDLERS +// ============================================================================ + +/** + * Container Open handler — wakes dormant machines and triggers catch-up. + * + * When a player opens a machine's container: + * 1. Increments `entity.active_ui` counter (tracks how many players have it open) + * 2. If the machine was dormant (has `sleepTick`): + * a. Calculates elapsed ticks since it went to sleep + * b. Clears the persisted `sleep_tick` dynamic property + * c. Wakes all neighboring dormant machines within 2 blocks (hopper chain support) + * d. Starts the catch-up replay via `start_catchup()` + * + * After catch-up completes, the machine ticks normally in the main loop + * because `active_ui > 0`. + */ world.afterEvents.entityContainerOpened.subscribe(({entity}) => { - entity.active_ui = entity.active_ui ? entity.active_ui + 1: 1; + entity.active_ui = entity.active_ui ? entity.active_ui + 1 : 1; + + // Catch up dormant machine when a player opens it + const machineData = machine_entities.get(entity.id); + if (!machineData || !machineData.sleepTick) return; + + const machineSleepTick = machineData.sleepTick; + const elapsed = system.currentTick - machineSleepTick; + delete machineData.sleepTick; // wake it up + // Clear persisted sleep on the entity + try { entity.setDynamicProperty("sleep_tick", undefined); } catch (e) {} + + if (elapsed <= 0) return; + + const data = machines[machineData.type]; + if (!data) return; + + let block; + try { block = entity.dimension.getBlock(machineData.location); } catch (e) {} + if (!block) return; + + // Catch up neighboring dormant machines first (hopper chains) + wake_neighbors(entity, machineData); + + // Run catch-up spread across frames via self-clearing runInterval + start_catchup(entity, block, data, elapsed, machineSleepTick); }, {entityFilter: {families: ["machine"]}}); +/** + * Container Close handler — puts machines to sleep when all players close the UI. + * + * When a player closes a machine's container: + * 1. Decrements `entity.active_ui` counter + * 2. If counter reaches 0 (no more players viewing): + * a. Deletes `active_ui` from the entity + * b. Records `sleepTick = currentTick` in the machine registry + * c. Persists `sleep_tick` to entity dynamic property (survives chunk unload) + * d. Machine will be skipped in next tick loop iteration + * + * Machines in the `ALWAYS_TICK` set are never put to sleep. + */ world.afterEvents.entityContainerClosed.subscribe(({entity}) => { - if(entity.active_ui === undefined) return; + if (entity.active_ui === undefined) return; entity.active_ui -= 1; - if(entity.active_ui <= 0) delete entity.active_ui; + if (entity.active_ui <= 0) { + delete entity.active_ui; + // Mark the machine as going to sleep NOW + const machineData = machine_entities.get(entity.id); + if (machineData && !ALWAYS_TICK.has(machineData.type)) { + machineData.sleepTick = system.currentTick; + // Persist to entity dynamic property so it survives chunk unload + try { entity.setDynamicProperty("sleep_tick", system.currentTick); } catch (e) {} + } + } }, {entityFilter: {families: ["machine"]}}); \ No newline at end of file diff --git a/BP/scripts/core/machines/blocks/AdvancedCompressor.js b/BP/scripts/core/machines/blocks/AdvancedCompressor.js new file mode 100644 index 00000000..a508a201 --- /dev/null +++ b/BP/scripts/core/machines/blocks/AdvancedCompressor.js @@ -0,0 +1,110 @@ +import { system, ItemStack } from "@minecraft/server"; +import { compare_lists, load_dynamic_object, save_dynamic_object} from "../../../api/utils"; +import recipes from "../../../recipes/compressor" +import { charge_from_battery, charge_from_machine } from "../../matter/electricity.js" + +function get_ingredients(container) { + const ingredients = [] + for (let i = 0; i < 9; i++) { + ingredients.push(container.getItem(i)) + } return ingredients +} + + +function find_recipe(ingredients) { + for (let [result, recipe] of recipes) { + if (ingredients.length != recipe.length) continue + if (!compare_lists(recipe, ingredients)) { + continue + } else return result + } return undefined +} + +const data = { + energy: {input: "right", capacity: 32000, maxInput: 3000}, + items: { + top_input: [0, 1, 2, 3, 4, 5, 6, 7, 8], + side_input: [0, 1, 2, 3, 4, 5, 6, 7, 8], + output: [10, 11] + }, + onTick(entity, block) { + const container = entity.getComponent('minecraft:inventory').container; + const variables = load_dynamic_object(entity, "machine_data"); + let energy = variables.energy || 0; + let progress = variables.progress || 0; + let first_values = [energy, progress] + + energy = charge_from_machine(entity, block, energy) + energy = charge_from_battery(entity, energy, 9); + if(!(system.currentTick % 80)) energy -= Math.min(1, energy) + const items = get_ingredients(container) + const ingredients = [...items.map(i => i?.typeId)].filter(i => i).sort() + const output = find_recipe(ingredients) + const output_items = [container.getItem(10), container.getItem(11)]; + const one_has_space = (oneItemMax) => (!output_items[0] || (output_items[0].typeId == output && ((oneItemMax === 64)? output_items[0].amount < oneItemMax: output_items[0].amount <= oneItemMax))) + const two_has_space = (twoItemMax) => (!output_items[1] || (output_items[1].typeId == output && ((twoItemMax === 64)? output_items[1].amount < twoItemMax: output_items[1].amount <= twoItemMax))) + if (energy > 0 && progress < 200 && output && (one_has_space(64) || two_has_space(64))) { + progress = progress + 10; + energy -= Math.min(100, energy); + } + + if ((energy == 0 || (output === undefined || (!one_has_space(64) && !two_has_space(64)))) && progress > 0) progress = progress - 10 + if (progress >= 200) { + block.dimension.playSound("random.anvil_land", entity.location) + progress = 0 + let itemsWithout = items.filter((itemWithout) => itemWithout != undefined) + let min = itemsWithout[0].amount; + for (const item of itemsWithout) { + if(item.amount < min){ + min = item.amount; + } + } + if((min < 2) && (one_has_space(64) || two_has_space(64))){ + for (let i = 0; i < 9; i++){ + if (items[i]) container.setItem(i, items[i].decrementStack(1)) + } + if(one_has_space(64)){ + if(output_items[0]?.typeId == output) { + container.setItem(10, output_items[0].incrementStack()) + } else container.setItem(10, new ItemStack(output)) + } + else if(two_has_space(64) && !one_has_space(64)){ + if(output_items[1]?.typeId == output) { + container.setItem(11, output_items[1].incrementStack()) + } else container.setItem(11, new ItemStack(output)) + } + } + else if((min >= 2) && (one_has_space(63) || two_has_space(63))){ + for (let i = 0; i < 9; i++){ + if (items[i]) container.setItem(i, items[i].decrementStack(2)) + } + if(one_has_space(63) && two_has_space(63)){ + if(output_items[0]?.typeId == output) { + container.setItem(10, output_items[0].incrementStack()) + } else container.setItem(10, new ItemStack(output)) + if(output_items[1]?.typeId == output) { + container.setItem(11, output_items[1].incrementStack()) + } else container.setItem(11, new ItemStack(output)) + } + else if(one_has_space(63) && !two_has_space(63)){ + if(output_items[0]?.typeId == output) { + container.setItem(10, output_items[0].incrementStack(63, 2)) + } else container.setItem(10, new ItemStack(output, 2)) + } + else if(!one_has_space(63) && two_has_space(63)){ + if(output_items[1]?.typeId == output) { + container.setItem(11, output_items[1].incrementStack(63, 2)) + } else container.setItem(11, new ItemStack(output, 2)) + } + } + } + if(!compare_lists(first_values, [energy, progress]) || !container.getItem(12)){ + save_dynamic_object(entity, {progress, energy}, "machine_data") + + const energy_hover = `Energy Storage\n§aEnergy: ${Math.round(energy)} gJ\n§cMax Energy: ${data.energy.capacity} gJ` + container.add_ui_display(12, energy_hover, Math.round((energy / data.energy.capacity) * 55)) + container.add_ui_display(13, '', Math.ceil((progress / 200) * 52)) + container.add_ui_display(14, '§rStatus: ' + (!energy ? '§4No Power' : progress ? '§2Running' : '§6Idle')) + } + } +}; export default data \ No newline at end of file diff --git a/BP/scripts/core/machines/blocks/AdvancedLaunchController.js b/BP/scripts/core/machines/blocks/AdvancedLaunchController.js new file mode 100644 index 00000000..3044b1a1 --- /dev/null +++ b/BP/scripts/core/machines/blocks/AdvancedLaunchController.js @@ -0,0 +1,3 @@ +import LaunchController from "./LaunchController.js"; +export class AdvancedLaunchController extends LaunchController {} +export default AdvancedLaunchController; diff --git a/BP/scripts/core/machines/blocks/AirlockController.js b/BP/scripts/core/machines/blocks/AirlockController.js new file mode 100644 index 00000000..e0440a22 --- /dev/null +++ b/BP/scripts/core/machines/blocks/AirlockController.js @@ -0,0 +1,269 @@ +import * as mc from "@minecraft/server"; +import { ModalFormData } from "@minecraft/server-ui"; +import { load_dynamic_object, save_dynamic_object, closeContainerUI } from "../../../api/utils"; + +function findInteractingPlayer(entity) { + const loc = entity.location; + return entity.dimension.getPlayers({ + location: { x: loc.x, y: loc.y, z: loc.z }, + maxDistance: 6, + })[0]; +} + +function showPlayerNameForm(player, entity, currentName) { + let attempts = 0; + const tryShow = () => { + if (attempts++ > 12 || !player.isValid) return; + const form = new ModalFormData() + .title("Player to open for") + .textField("Enter player name:", "Player Name", { defaultValue: currentName || "" }); + + form.show(player).then(response => { + if (response.canceled && response.cancelationReason === "UserBusy") { + mc.system.runTimeout(tryShow, 5); + return; + } + if (response.canceled) return; + const name = response.formValues[0]; + if (name != null) { + entity.setDynamicProperty("airlock_player_name", name); + } + }); + }; + tryShow(); +} + +const data = { + ui: "§a§i§r§l§o§c§k§_§c§o§n§t§r§o§l§l§e§r", + onPlace(entity, block, event) { + let ownerName = ""; + if (event && event.player) { + ownerName = event.player.name; + } + + save_dynamic_object(entity, { + ownerName: ownerName, + redstoneActivation: false, + playerDistanceActivation: true, + playerDistanceSelection: 0, + playerNameMatches: false, + playerToOpenFor: "", + invertSelection: false, + horizontalModeEnabled: false, + }, "machine_data"); + }, + onTick(entity, block) { + const vars = load_dynamic_object(entity, "machine_data"); + let redstoneActivation = vars.redstoneActivation ?? false; + let playerDistanceActivation = vars.playerDistanceActivation ?? true; + let playerDistanceSelection = vars.playerDistanceSelection ?? 0; + if (playerDistanceSelection < 0 || playerDistanceSelection >= 4 || isNaN(playerDistanceSelection)) { + playerDistanceSelection = 0; + } + let playerNameMatches = vars.playerNameMatches ?? false; + let playerToOpenFor = vars.playerToOpenFor ?? ""; + let invertSelection = vars.invertSelection ?? false; + let horizontalModeEnabled = vars.horizontalModeEnabled ?? false; + let ownerName = vars.ownerName ?? ""; + if (!ownerName) { + const p = findInteractingPlayer(entity); + if (p) ownerName = p.name; + } + + const container = entity.getComponent('minecraft:inventory').container; + + // get player name + const newPlayerName = entity.getDynamicProperty("airlock_player_name"); + if (newPlayerName != null) { + playerToOpenFor = newPlayerName; + entity.setDynamicProperty("airlock_player_name", undefined); + // overwrite slot 4 + const item = new mc.ItemStack('cosmos:ui_button'); + item.nameTag = playerToOpenFor || "§7(click to set)"; + container.setItem(4, item); + } + + // skip click detection on first tick (slots are empty) + if (!entity.getDynamicProperty("ui_initialized")) { + entity.setDynamicProperty("ui_initialized", true); + } else { + + // slot 0: redstone signal + if (container.was_ui_clicked(0, entity)) { redstoneActivation = !redstoneActivation; } + // slot 1: player within + if (container.was_ui_clicked(1, entity)) { playerDistanceActivation = !playerDistanceActivation; } + // slot 2: distance + if (container.was_ui_clicked(2, entity)) { playerDistanceSelection = (playerDistanceSelection + 1) % 4; } + // slot 3: player name matches + if (container.was_ui_clicked(3, entity)) { playerNameMatches = !playerNameMatches; } + // slot 4: player name + if (container.was_ui_clicked(4, entity)) { + const player = findInteractingPlayer(entity); + if (player) { + closeContainerUI(player); + mc.system.run(() => { + showPlayerNameForm(player, entity, playerToOpenFor); + }); + } + } + // slot 5: invert selection + if (container.was_ui_clicked(5, entity)) { invertSelection = !invertSelection; } + // slot 6: horizontal mode + if (container.was_ui_clicked(6, entity)) { horizontalModeEnabled = !horizontalModeEnabled; } + } // end ui_initialized + + save_dynamic_object(entity, { + ownerName: ownerName, + redstoneActivation: redstoneActivation, + playerDistanceActivation: playerDistanceActivation, + playerDistanceSelection: playerDistanceSelection, + playerNameMatches: playerNameMatches, + playerToOpenFor: playerToOpenFor, + invertSelection: invertSelection, + horizontalModeEnabled: horizontalModeEnabled, + }, "machine_data"); + + // activation logic + let active = false; + + if (redstoneActivation) { + const redstonePower = block.getRedstonePower ? block.getRedstonePower() : 0; + active = redstonePower > 0; + } + + if ((active || !redstoneActivation) && playerDistanceActivation) { + const distances = [1, 2, 5, 10]; + const dist = distances[playerDistanceSelection] ?? 1; + const center = { x: block.location.x + 0.5, y: block.location.y + 0.5, z: block.location.z + 0.5 }; + const players = entity.dimension.getPlayers({ location: center, maxDistance: dist }); + + if (playerNameMatches) { + let foundPlayer = false; + for (const p of players) { + if (p.name.toLowerCase() === playerToOpenFor.toLowerCase()) { + foundPlayer = true; + break; + } + } + active = foundPlayer; + } else { + active = players.length > 0; + } + } + + if (!invertSelection) { + active = !active; + } + + // trace airlock frame + const bounds = traceAirlock(block, horizontalModeEnabled); + + // update blocks + if (bounds) { + fillAirlock(entity.dimension, bounds, active); + } + + // redraw ui + const distLabels = ["1 Meter", "2 Meter", "5 Meter", "10 Meter"]; + + container.add_ui_display(0, "Redstone Signal", redstoneActivation ? 1 : 0); + container.add_ui_display(1, "Player Within: ", playerDistanceActivation ? 1 : 0); + + if (entity.getDynamicProperty("last_dist") !== playerDistanceSelection || !container.getItem(2)) { + entity.setDynamicProperty("last_dist", playerDistanceSelection); + container.setItem(2, undefined); + container.add_ui_button(2, "§r" + (distLabels[playerDistanceSelection] || "1 Meter")); + } + + container.add_ui_display(3, "Player Name is: ", playerNameMatches ? 1 : 0); + container.add_ui_button(4, playerToOpenFor || "§7(click to set)"); + container.add_ui_display(5, "Invert Selection", invertSelection ? 1 : 0); + container.add_ui_display(6, "Horizontal Mode", horizontalModeEnabled ? 1 : 0); + container.add_ui_display(7, (playerToOpenFor || ownerName || "Airlock") + "'s Air Lock Controller", 0); + container.add_ui_display(8, active ? "§cAir Lock Closed" : "§aAir Lock Open", 0); + } +}; + +function traceAirlock(startBlock, horizontalModeEnabled) { + const visited = new Set(); + const queue = [startBlock]; + + let minX = startBlock.location.x; + let maxX = startBlock.location.x; + let minY = startBlock.location.y; + let maxY = startBlock.location.y; + let minZ = startBlock.location.z; + let maxZ = startBlock.location.z; + + visited.add(`${startBlock.location.x},${startBlock.location.y},${startBlock.location.z}`); + + while (queue.length > 0) { + const current = queue.shift(); + const { x, y, z } = current.location; + + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + minZ = Math.min(minZ, z); + maxZ = Math.max(maxZ, z); + + if (maxX - minX > 20 || maxY - minY > 20 || maxZ - minZ > 20) { + return null; + } + + const directions = horizontalModeEnabled + ? [[-1,0,0],[1,0,0],[0,0,-1],[0,0,1]] + : [[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]]; + + for (const [dx, dy, dz] of directions) { + const nx = x + dx; + const ny = y + dy; + const nz = z + dz; + const key = `${nx},${ny},${nz}`; + + if (visited.has(key)) continue; + + try { + const block = startBlock.dimension.getBlock({x: nx, y: ny, z: nz}); + if (block && (block.typeId === "cosmos:airlock_frame" || block.typeId === "cosmos:airlock_controller")) { + visited.add(key); + queue.push(block); + } + } catch (e) {} + } + } + + if (visited.size < 5) return null; + + return { minX, maxX, minY, maxY, minZ, maxZ, dimension: startBlock.dimension }; +} + +function fillAirlock(dimension, bounds, active) { + const { minX, maxX, minY, maxY, minZ, maxZ } = bounds; + + for (let x = minX + 1; x < maxX; x++) { + for (let y = minY + 1; y < maxY; y++) { + for (let z = minZ + 1; z < maxZ; z++) { + try { + const block = dimension.getBlock({x, y, z}); + if (block) { + if (active) { + if (block.typeId === "minecraft:air" || block.typeId === "cosmos:airlock_seal") { + if (block.typeId !== "cosmos:airlock_seal") { + block.setType("cosmos:airlock_seal"); + } + } + } else { + if (block.typeId === "cosmos:airlock_seal") { + block.setType("minecraft:air"); + } + } + } + } catch (e) {} + } + } + } +} + +export default data; diff --git a/BP/scripts/core/machines/blocks/AstroMinerDock.js b/BP/scripts/core/machines/blocks/AstroMinerDock.js new file mode 100644 index 00000000..7bb373c1 --- /dev/null +++ b/BP/scripts/core/machines/blocks/AstroMinerDock.js @@ -0,0 +1,57 @@ +import { system } from "@minecraft/server"; +import { charge_from_battery, charge_from_machine } from "../../matter/electricity.js"; +import { compare_lists, load_dynamic_object, save_dynamic_object } from "../../../api/utils.js"; +import { setup_ui_button } from "../MachineButtons.js"; + +// Slot layout (from ui_datagen): +// [0..71] = dock_slots (12×6 mined items grid) +// [72] = battery_slot +// [73] = energy_bar (UI display) +// [74] = recall_button (UI display) +const BatterySlot = 72; +const EnergyBarSlot = 73; +const ButtonSlot = 74; + +const data = { + energy: { input: "right", capacity: 16000, maxInput: 120 }, + items: { + top_input: Array.from({ length: 72 }, (_, i) => i), + side_input: Array.from({ length: 72 }, (_, i) => i) + }, + onTick(entity, block) { + const container = entity.getComponent('minecraft:inventory').container; + const variables = load_dynamic_object(entity, "machine_data"); + let energy = variables.energy ?? 0; + let isMining = variables.isMining ?? false; + let first_values = [energy, isMining]; + + // Charge from wires and battery + energy = charge_from_machine(entity, block, energy); + energy = charge_from_battery(entity, energy, BatterySlot); + + // Slow discharge when idle (1 gJ every 80 ticks) + if (!(system.currentTick % 80)) energy -= Math.min(1, energy); + + // Only update UI if values changed (dirty-check optimization) + if (!compare_lists(first_values, [energy, isMining]) || !container.getItem(EnergyBarSlot)) { + save_dynamic_object(entity, { energy, isMining }, "machine_data"); + + // Energy bar display + const energy_hover = `Energy Storage\n§aEnergy: ${Math.round(energy)} gJ\n§cMax Energy: ${data.energy.capacity} gJ`; + container.add_ui_display(EnergyBarSlot, energy_hover, Math.round((energy / data.energy.capacity) * 66)); + } + + // Recall button + if (container.was_ui_clicked(ButtonSlot, entity)) { + const vars = load_dynamic_object(entity, "machine_data"); + vars.isMining = false; + save_dynamic_object(entity, vars, "machine_data"); + setup_ui_button(entity, ButtonSlot, "Recall Miner"); + } + }, + onPlace(entity) { + setup_ui_button(entity, ButtonSlot, "Recall Miner"); + } +}; + +export default data; diff --git a/BP/scripts/core/machines/blocks/CargoLoader.js b/BP/scripts/core/machines/blocks/CargoLoader.js new file mode 100644 index 00000000..1347e019 --- /dev/null +++ b/BP/scripts/core/machines/blocks/CargoLoader.js @@ -0,0 +1,104 @@ +import { system } from "@minecraft/server"; +import { charge_from_battery, charge_from_machine } from "../../matter/electricity.js"; +import { load_dynamic_object, location_of_side, save_dynamic_object } from "../../../api/utils.js"; +import { pads } from "../../vehicles/Vehicle.js"; + +const BatterySlot = 0; + +function get_targets(block) { + if(!block?.isValid) return []; + let {x, y, z} = block.location; + let targets = []; + + try { + let front = location_of_side(block, "front"); + let back = location_of_side(block, "back"); + + const front_offset = {x: (front.x - x) * 2, z: (front.z - z) * 2}; + const back_offset = {x: (back.x - x) * 2, z: (back.z - z) * 2}; + + let front_pad = block.dimension.getBlock({x: x + front_offset.x, y: y, z: z + front_offset.z}); + let back_pad = block.dimension.getBlock({x: x + back_offset.x, y: y, z: z + back_offset.z}); + + [front_pad, back_pad].forEach(pad => { + if (pad?.permutation?.getState("cosmos:center")) { + let family = pads[pad.typeId]; + if (family) { + let v = pad.dimension.getEntities({families: [family], location: pad.center(), maxDistance: 2})[0]; + if (v && v.getComponent('minecraft:inventory')) targets.push(v); + } + } + }); + } catch {} + + const sides = [ + {x: 1, y: 0, z: 0}, {x: -1, y: 0, z: 0}, + {x: 0, y: 1, z: 0}, {x: 0, y: -1, z: 0}, + {x: 0, y: 0, z: 1}, {x: 0, y: 0, z: -1} + ]; + + for (let offset of sides) { + try { + let adj = block.dimension.getBlock({x: x + offset.x, y: y + offset.y, z: z + offset.z}); + if (adj && adj.getComponent('minecraft:inventory')) { + targets.push(adj); + } + } catch {} + } + + return [...new Set(targets)]; +} + +const data = { + energy: {input: "right", capacity: 16000, maxInput: 120}, + items: { + top_input: [1,2,3,4,5,6,7,8,9,10,11,12,13,14], + side_input: [1,2,3,4,5,6,7,8,9,10,11,12,13,14] + }, + onTick(entity, block) { + const container = entity.getComponent('minecraft:inventory').container; + const variables = load_dynamic_object(entity, "machine_data"); + let energy = variables.energy ?? 0; + + energy = charge_from_machine(entity, block, energy); + energy = charge_from_battery(entity, energy, BatterySlot); + + if (energy >= 45) { + let targets = entity.targets ?? []; + if (system.currentTick % 20 === 0 || !entity.targets) { + targets = get_targets(block); + entity.targets = targets; + } + + let moved = false; + for (let target of targets) { + if (!target?.isValid) continue; + let target_inv = target.getComponent('minecraft:inventory'); + if (!target_inv) continue; + let target_container = target_inv.container; + + for (let i = 1; i <= 14; i++) { + let item = container.getItem(i); + if (item) { + let previous_amount = item.amount; + let remainder = target_container.addItem(item.clone()); + + if (!remainder || remainder.amount < previous_amount) { + container.setItem(i, remainder); + moved = true; + energy -= 45; + break; + } + } + } + if (moved) break; + } + } + // UI UPDATE + container.add_ui_display(15, '', Math.round((energy / data.energy.capacity) * 55)); + container.add_ui_display(16, '§rStatus: ' + (energy >= 45 ? "Running" : "Idle")); + + save_dynamic_object(entity, {energy}, "machine_data"); + } +}; +export default data; diff --git a/BP/scripts/core/machines/blocks/CargoUnloader.js b/BP/scripts/core/machines/blocks/CargoUnloader.js new file mode 100644 index 00000000..62d81442 --- /dev/null +++ b/BP/scripts/core/machines/blocks/CargoUnloader.js @@ -0,0 +1,128 @@ +import { system } from "@minecraft/server"; +import { charge_from_battery, charge_from_machine } from "../../matter/electricity.js"; +import { load_dynamic_object, location_of_side, save_dynamic_object } from "../../../api/utils.js"; +import { pads } from "../../vehicles/Vehicle.js"; + +const BatterySlot = 0; + +function get_targets(block) { + if(!block?.isValid) return []; + let {x, y, z} = block.location; + let targets = []; + + try { + let front = location_of_side(block, "front"); + let back = location_of_side(block, "back"); + + const front_offset = {x: (front.x - x) * 2, z: (front.z - z) * 2}; + const back_offset = {x: (back.x - x) * 2, z: (back.z - z) * 2}; + + let front_pad = block.dimension.getBlock({x: x + front_offset.x, y: y, z: z + front_offset.z}); + let back_pad = block.dimension.getBlock({x: x + back_offset.x, y: y, z: z + back_offset.z}); + + [front_pad, back_pad].forEach(pad => { + if (pad?.permutation?.getState("cosmos:center")) { + let family = pads[pad.typeId]; + if (family) { + let v = pad.dimension.getEntities({families: [family], location: pad.center(), maxDistance: 2})[0]; + if (v && v.getComponent('minecraft:inventory')) targets.push(v); + } + } + }); + } catch {} + + const sides = [ + {x: 1, y: 0, z: 0}, {x: -1, y: 0, z: 0}, + {x: 0, y: 1, z: 0}, {x: 0, y: -1, z: 0}, + {x: 0, y: 0, z: 1}, {x: 0, y: 0, z: -1} + ]; + + for (let offset of sides) { + try { + let adj = block.dimension.getBlock({x: x + offset.x, y: y + offset.y, z: z + offset.z}); + if (adj && adj.getComponent('minecraft:inventory')) { + targets.push(adj); + } + } catch {} + } + + return [...new Set(targets)]; +} + +const data = { + energy: {input: "right", capacity: 16000, maxInput: 120}, + items: { + bottom_output: [1,2,3,4,5,6,7,8,9,10,11,12,13,14], + side_output: [1,2,3,4,5,6,7,8,9,10,11,12,13,14] + }, + onTick(entity, block) { + const container = entity.getComponent('minecraft:inventory').container; + const variables = load_dynamic_object(entity, "machine_data"); + let energy = variables.energy ?? 0; + + energy = charge_from_machine(entity, block, energy); + energy = charge_from_battery(entity, energy, BatterySlot); + + if (energy >= 45) { + let targets = entity.targets ?? []; + if (system.currentTick % 20 === 0 || !entity.targets) { + targets = get_targets(block); + entity.targets = targets; + } + + let moved = false; + for (let target of targets) { + if (!target?.isValid) continue; + let target_inv = target.getComponent('minecraft:inventory'); + if (!target_inv) continue; + let target_container = target_inv.container; + + for (let i = 0; i < target_container.size; i++) { + let item = target_container.getItem(i); + if (item) { + let remainder = item.clone(); + let added = false; + + for (let j = 1; j <= 14; j++) { + let slotItem = container.getItem(j); + if (!slotItem) { + container.setItem(j, remainder); + remainder = undefined; + added = true; + break; + } else if (slotItem.isStackableWith(remainder) && slotItem.amount < slotItem.maxAmount) { + let space = slotItem.maxAmount - slotItem.amount; + if (remainder.amount <= space) { + slotItem.amount += remainder.amount; + container.setItem(j, slotItem); + remainder = undefined; + added = true; + break; + } else { + remainder.amount -= space; + slotItem.amount = slotItem.maxAmount; + container.setItem(j, slotItem); + added = true; + } + } + } + + if (added) { + target_container.setItem(i, remainder); + moved = true; + energy -= 45; + break; + } + } + } + if (moved) break; + } + } + // UI UPDATE + container.add_ui_display(15, '', Math.round((energy / data.energy.capacity) * 55)); + container.add_ui_display(16, '§rStatus: ' + (energy >= 45 ? "Running" : "Idle")); + + save_dynamic_object(entity, {energy}, "machine_data"); + } +}; +export default data; diff --git a/BP/scripts/core/machines/blocks/ChromaticApplicator.js b/BP/scripts/core/machines/blocks/ChromaticApplicator.js new file mode 100644 index 00000000..58a3a161 --- /dev/null +++ b/BP/scripts/core/machines/blocks/ChromaticApplicator.js @@ -0,0 +1,116 @@ +import { ItemStack } from "@minecraft/server"; +import { machine_buttons, setup_ui_button } from "../MachineButtons"; +import { load_dynamic_object, save_dynamic_object } from "../../../api/utils"; + +const DYE_COLORS = { + "minecraft:white_dye": [249, 255, 254], + "minecraft:orange_dye": [249, 128, 29], + "minecraft:magenta_dye": [199, 78, 189], + "minecraft:light_blue_dye": [58, 179, 218], + "minecraft:yellow_dye": [254, 216, 61], + "minecraft:lime_dye": [128, 199, 31], + "minecraft:pink_dye": [243, 139, 170], + "minecraft:gray_dye": [71, 79, 82], + "minecraft:light_gray_dye": [157, 157, 151], + "minecraft:cyan_dye": [22, 156, 156], + "minecraft:purple_dye": [137, 50, 184], + "minecraft:blue_dye": [60, 68, 170], + "minecraft:brown_dye": [131, 84, 50], + "minecraft:green_dye": [94, 124, 22], + "minecraft:red_dye": [176, 46, 38], + "minecraft:black_dye": [29, 29, 33], + "minecraft:bone_meal": [249, 255, 254], + "minecraft:ink_sac": [29, 29, 33], + "minecraft:cocoa_beans": [131, 84, 50], + "minecraft:lapis_lazuli": [60, 68, 170], +}; + +function get_color(item) { + if (!item) return null; + if (DYE_COLORS[item.typeId]) return DYE_COLORS[item.typeId]; + return [255, 255, 255]; // fallback +} + +const ButtonApply = 3; +const ButtonMix = 4; +const ButtonReset = 5; + + +const data = { + items: { + top_input: [0], + side_input: [1], + output: [] + }, + onTick(entity, block) { + const container = entity.getComponent('minecraft:inventory').container; + + let ui_initialized = entity.getDynamicProperty("ui_initialized"); + if (!ui_initialized) { + entity.setDynamicProperty("ui_initialized", true); + setup_ui_button(entity, ButtonApply, "Apply"); + setup_ui_button(entity, ButtonMix, "Mix"); + setup_ui_button(entity, ButtonReset, "Reset"); + } else { + if (container.was_ui_clicked(ButtonApply, entity)) { + + const item = container.getItem(0); + if (item) { + const variables = load_dynamic_object(entity, "machine_data"); + const color = variables.color || [255, 255, 255]; + const intColor = (color[0] << 16) | (color[1] << 8) | color[2]; + item.setDynamicProperty("cosmos:color", intColor); + + const lore = item.getLore(); + const hex = `${color[0].toString(16).padStart(2, '0')}${color[1].toString(16).padStart(2, '0')}${color[2].toString(16).padStart(2, '0')}`.toUpperCase(); + const colorLore = `§r§7Color: #${hex}`; + const newLore = lore.filter(l => !l.startsWith('§r§7Color:')); + newLore.push(colorLore); + item.setLore(newLore); + container.setItem(0, item); + } + setup_ui_button(entity, ButtonApply, "Apply"); + } + if (container.was_ui_clicked(ButtonMix, entity)) { + + const dye = container.getItem(1); + if (dye) { + const addedColor = get_color(dye); + if (addedColor) { + const variables = load_dynamic_object(entity, "machine_data"); + let currentColor = variables.color; + if (!currentColor) { + currentColor = addedColor; + } else { + currentColor = [ + Math.floor((currentColor[0] + addedColor[0]) / 2), + Math.floor((currentColor[1] + addedColor[1]) / 2), + Math.floor((currentColor[2] + addedColor[2]) / 2), + ]; + } + variables.color = currentColor; + save_dynamic_object(entity, variables, "machine_data"); + + container.setItem(1, dye.decrementStack()); + } + } + setup_ui_button(entity, ButtonMix, "Mix"); + } + if (container.was_ui_clicked(ButtonReset, entity)) { + + const variables = load_dynamic_object(entity, "machine_data"); + variables.color = [255, 255, 255]; + save_dynamic_object(entity, variables, "machine_data"); + setup_ui_button(entity, ButtonReset, "Reset"); + } + } + + const variables = load_dynamic_object(entity, "machine_data"); + const color = variables.color || [255, 255, 255]; + + const hex = `${color[0].toString(16).padStart(2, '0')}${color[1].toString(16).padStart(2, '0')}${color[2].toString(16).padStart(2, '0')}`.toUpperCase(); + container.add_ui_display(2, `§rCurrent Color:\n§7RGB: ${color[0]}, ${color[1]}, ${color[2]}\n§7Hex: #${hex}`, 0); + } +}; + +export default data; diff --git a/BP/scripts/core/machines/blocks/CircuitFabricator.js b/BP/scripts/core/machines/blocks/CircuitFabricator.js index 503977d1..9c6b212f 100644 --- a/BP/scripts/core/machines/blocks/CircuitFabricator.js +++ b/BP/scripts/core/machines/blocks/CircuitFabricator.js @@ -67,4 +67,3 @@ const data = { } } }; export default data - diff --git a/BP/scripts/core/machines/blocks/Compressor.js b/BP/scripts/core/machines/blocks/Compressor.js index d0701b7c..1209b487 100644 --- a/BP/scripts/core/machines/blocks/Compressor.js +++ b/BP/scripts/core/machines/blocks/Compressor.js @@ -34,6 +34,7 @@ const data = { const isCoalBlock = fuelItem?.typeId === 'minecraft:coal_block'; const variables = load_dynamic_object(entity, "machine_data"); + let burnTime = variables.burnTime || 0; let burnDuration = variables.burnDuration || 0; let progress = variables.progress || 0; diff --git a/BP/scripts/core/machines/blocks/ElectricArcFurnace.js b/BP/scripts/core/machines/blocks/ElectricArcFurnace.js new file mode 100644 index 00000000..f323b6a2 --- /dev/null +++ b/BP/scripts/core/machines/blocks/ElectricArcFurnace.js @@ -0,0 +1,101 @@ +import { system, ItemStack } from "@minecraft/server"; +import { compare_lists, load_dynamic_object, save_dynamic_object} from "../../../api/utils"; +import recipes from "../../../recipes/electric_furnace" +import { charge_from_battery, charge_from_machine } from "../../matter/electricity.js"; + +const data = { + energy: {input: "right", capacity: 25000, maxInput: 90}, + items: { + top_input: [0], + side_input: [0], + output: [2, 3] + }, + onTick(entity, block) { + const container = entity.getComponent('minecraft:inventory').container; + const variables = load_dynamic_object(entity, "machine_data"); + let energy = variables.energy || 0 + let progress = variables.progress || 0 + let first_values = [energy, progress] + energy = charge_from_machine(entity, block, energy) + energy = charge_from_battery(entity, energy, 1); + if(!(system.currentTick % 80)) energy -= Math.min(1, energy) + + if(energy >= 90){ + let input = container.getItem(0); + let outputId = recipes[input?.typeId]; + + if(input && outputId){ + let isDouble = false; + let outName = outputId.split(':')[1] || outputId; + let inName = input.typeId.split(':')[1] || input.typeId; + + if ((outName.includes("ingot") || outName === "quartz") && + (inName.includes("ore") || inName.includes("raw") || inName.includes("moon") || inName.includes("mars") || inName.includes("shard"))) { + isDouble = true; + } + + let outputCount = isDouble ? 2 : 1; + + let out2 = container.getItem(2); + let out3 = container.getItem(3); + + let space2 = 0; + let space3 = 0; + + if (!out2) space2 = 64; + else if (out2.typeId === outputId) space2 = 64 - out2.amount; + + if (!out3) space3 = 64; + else if (out3.typeId === outputId) space3 = 64 - out3.amount; + + if (space2 + space3 >= outputCount) { + if (progress < 100){ + progress += 1; + energy = Math.max(0, energy - 90); + } else { + progress = 0; + container.setItem(0, input.decrementStack()); + + let remainingToGive = outputCount; + + if (space2 > 0 && remainingToGive > 0) { + let toGive2 = Math.min(space2, remainingToGive); + if (out2) { + out2.amount += toGive2; + } else { + out2 = new ItemStack(outputId, toGive2); + } + container.setItem(2, out2); + remainingToGive -= toGive2; + } + + if (space3 > 0 && remainingToGive > 0) { + let toGive3 = Math.min(space3, remainingToGive); + if (out3) { + out3.amount += toGive3; + } else { + out3 = new ItemStack(outputId, toGive3); + } + container.setItem(3, out3); + remainingToGive -= toGive3; + } + } + } else { + progress = Math.max(progress - 1, 0); + } + } else { + progress = Math.max(progress - 1, 0); + } + } else { + progress = Math.max(progress - 1, 0); + } + + if(!compare_lists(first_values, [energy, progress]) || !container.getItem(4)){ + save_dynamic_object(entity, {energy, progress}, "machine_data"); + const energy_hover = `Energy Storage\n§aEnergy: ${Math.round(energy)} gJ\n§cMax Energy: ${data.energy.capacity} gJ` + container.add_ui_display(4, energy_hover, Math.round((energy / data.energy.capacity) * 55)) + container.add_ui_display(5, '', Math.ceil((progress / 100) * 22)) + container.add_ui_display(6, '§rStatus: ' + (!energy ? '\n§4No Power' : progress ? '\n§2Running' : '\n§6Idle')) + } + } +}; export default data diff --git a/BP/scripts/core/machines/blocks/ElectricCompressor.js b/BP/scripts/core/machines/blocks/ElectricCompressor.js index 27caf302..bdb50402 100644 --- a/BP/scripts/core/machines/blocks/ElectricCompressor.js +++ b/BP/scripts/core/machines/blocks/ElectricCompressor.js @@ -1,7 +1,7 @@ -import { system, ItemStack } from "@minecraft/server"; -import { compare_lists, load_dynamic_object, save_dynamic_object} from "../../../api/utils"; -import { charge_from_battery, charge_from_machine } from "../../matter/electricity.js" +import { ItemStack, system } from "@minecraft/server"; +import { charge_from_battery, charge_from_machine } from "../../matter/electricity.js"; import { find_recipe } from "./Compressor.js"; +import { compare_lists, load_dynamic_object, save_dynamic_object } from "../../../api/utils.js"; const InputSlots = Array.from(Array(9).keys()) // 0 to 8 const BatterySlot = 9, OutputSlots = [10, 11] @@ -68,19 +68,19 @@ function onTick(entity, block){ } } if((min < 2) && (one_has_space(64) || two_has_space(64))){ - for (let i = 0; i < 9; i++){ - if (items[i]) container.setItem(i, items[i].decrementStack(1)) - } - if(one_has_space(64)){ - if(output_items[0]?.typeId == recipe) { - container.setItem(OutputSlots[0], output_items[0].incrementStack()) - } else container.setItem(OutputSlots[0], new ItemStack(recipe)) - } - else if(two_has_space(64) && !one_has_space(64)){ - if(output_items[1]?.typeId == recipe) { - container.setItem(OutputSlots[1], output_items[1].incrementStack()) - } else container.setItem(OutputSlots[1], new ItemStack(recipe)) - } + for (let i = 0; i < 9; i++){ + if (items[i]) container.setItem(i, items[i].decrementStack(1)) + } + if(one_has_space(64)){ + if(output_items[0]?.typeId == recipe) { + container.setItem(OutputSlots[0], output_items[0].incrementStack()) + } else container.setItem(OutputSlots[0], new ItemStack(recipe)) + } + else if(two_has_space(64) && !one_has_space(64)){ + if(output_items[1]?.typeId == recipe) { + container.setItem(OutputSlots[1], output_items[1].incrementStack()) + } else container.setItem(OutputSlots[1], new ItemStack(recipe)) + } } else if((min >= 2) && (one_has_space(63) || two_has_space(63))){ for (let i = 0; i < 9; i++){ diff --git a/BP/scripts/core/machines/blocks/FuelLoader.js b/BP/scripts/core/machines/blocks/FuelLoader.js index aded3ae1..12841e7d 100644 --- a/BP/scripts/core/machines/blocks/FuelLoader.js +++ b/BP/scripts/core/machines/blocks/FuelLoader.js @@ -17,8 +17,8 @@ function get_vehicles(block) { let front = location_of_side(block, "front") let back = location_of_side(block, "back") - const front_offset = {x: (x - front.x) * 2, z: (z - front.z) * 2}; - const back_offset = {x: (x - back.x) * 2, z: (z- back.z) * 2}; + const front_offset = {x: (front.x - x) * 2, z: (front.z - z) * 2}; + const back_offset = {x: (back.x - x) * 2, z: (back.z - z) * 2}; front = block.dimension.getBlock({x: x + front_offset.x, y: y, z: z + front_offset.z}); back = block.dimension.getBlock({x: x + back_offset.x, y: y, z: z + back_offset.z}); @@ -87,4 +87,4 @@ buttons[ButtonSlot] = function (entity, item) { item.nameTag = LoadButtonText(!active) // flip the button text entity.setDynamicProperty('active', !active) // flip the machine state container.setItem(ButtonSlot, item) -} \ No newline at end of file +} diff --git a/BP/scripts/core/machines/blocks/GasLiquefier.js b/BP/scripts/core/machines/blocks/GasLiquefier.js index 200b172e..1a3bb0e4 100644 --- a/BP/scripts/core/machines/blocks/GasLiquefier.js +++ b/BP/scripts/core/machines/blocks/GasLiquefier.js @@ -121,4 +121,4 @@ buttons[ButtonSlot] = function (entity, item) { item.nameTag = ProcessButtonText(!active) // flip the button text entity.setDynamicProperty('active', !active) // flip the machine state container.setItem(ButtonSlot, item) -} \ No newline at end of file +} diff --git a/BP/scripts/core/machines/blocks/GeothermalGenerator.js b/BP/scripts/core/machines/blocks/GeothermalGenerator.js new file mode 100644 index 00000000..01d3720f --- /dev/null +++ b/BP/scripts/core/machines/blocks/GeothermalGenerator.js @@ -0,0 +1,65 @@ +import { system } from "@minecraft/server"; +import { load_dynamic_object, save_dynamic_object } from "../../../api/utils"; +import { charge_battery } from "../../matter/electricity"; + +const data = { + energy: { output: "right", capacity: 16000, maxPower: 200 }, + items: { + top_input: [], + side_input: [], + }, + onTick(entity, block) { + const e = entity; + let stopped = e.getDynamicProperty('stopped'); + if (stopped == undefined) stopped = false; + const container = e.getComponent('minecraft:inventory').container; + + const variables = load_dynamic_object(e, "machine_data"); + let energy = variables.energy || 0; + let power = variables.power || 0; + + let is_valid = false; + let distance = 0; + let block_below = block; + for (let i = 1; i <= 20; i++) { + try { + block_below = block_below.below(); + if (!block_below) break; + const type = block_below.typeId; + if (type.includes("spout")) { + is_valid = true; + distance = i; + break; + } + } catch (err) { + break; + } + } + + let generated_energy = 0; + if (is_valid && !stopped) { + generated_energy = Math.floor(200 - ((distance - 1) / 19) * 170); + energy = Math.min(energy + generated_energy, data.energy.capacity); + } + + if (!stopped) { + energy = charge_battery(e, energy, 0); + } + + power = Math.min(energy, data.energy.maxPower); + save_dynamic_object(e, { energy, power }, "machine_data"); + + const energy_hover = `Energy Storage\n§aEnergy: ${energy} gJ\n§cMax Energy: ${data.energy.capacity} gJ`; + const is_generating = `§r${generated_energy == 0 ? 'Generating: Not Generating' : 'Generating: ' + generated_energy + ' gJ/t'}`; + let status = "§rStatus: " + (stopped ? '§6Disabled' : is_valid ? '§2Active' : '§4No Heat Source'); + + container.add_ui_display(1, energy_hover, Math.round((energy / data.energy.capacity) * 55)); + container.add_ui_display(2, is_generating); + container.add_ui_display(3, status); + container.add_ui_button(4, stopped ? 'Enable' : 'Disable', entity, 'stopped', !stopped); + // acid activity indicator (scales 0-16 based on generation) + container.add_ui_display(5, "", is_valid ? Math.max(1, Math.round((generated_energy / 200) * 16)) : 0); + } +}; + +export default data; diff --git a/BP/scripts/core/machines/blocks/LaunchController.js b/BP/scripts/core/machines/blocks/LaunchController.js new file mode 100644 index 00000000..cee930cf --- /dev/null +++ b/BP/scripts/core/machines/blocks/LaunchController.js @@ -0,0 +1,210 @@ +import { system } from "@minecraft/server"; +import { ModalFormData } from "@minecraft/server-ui"; +import { load_dynamic_object, save_dynamic_object, closeContainerUI } from "../../../api/utils.js"; +import { charge_from_battery, charge_from_machine } from "../../matter/electricity.js"; +import AllMachines from "../AllMachineBlocks.js"; + +// Find the player interacting with a machine entity +function findInteractingPlayer(entity) { + const loc = entity.location; + return entity.dimension.getPlayers({ + location: { x: loc.x, y: loc.y, z: loc.z }, + maxDistance: 6, + })[0]; +} + +// Show a text input form to set a number (retries until player is free) +function showNumberForm(player, entity, title, currentValue, propertyName) { + let attempts = 0; + const tryShow = () => { + if (attempts++ > 12 || !player.isValid) return; + const form = new ModalFormData() + .title(title) + .textField("Enter frequency:", "0", { defaultValue: String(currentValue) }); + + form.show(player).then(response => { + if (response.canceled && response.cancelationReason === "UserBusy") { + system.runTimeout(tryShow, 5); + return; + } + if (response.canceled) return; + const parsed = parseInt(response.formValues[0]); + if (isNaN(parsed) || parsed < 0) return; + entity.setDynamicProperty(propertyName, parsed); + }); + }; + tryShow(); +} + +const LAUNCH_CONDITIONS = [ + "Cargo is Unloaded", + "Cargo is Full", + "Fully Fueled", + "Instantly", + "Time Elapsed: 10s", + "Time Elapsed: 30s", + "Time Elapsed: 1m", + "Redstone Signal" +]; + +function showDropdownForm(player, entity, title, options, currentValueIndex, propertyName) { + let attempts = 0; + const tryShow = () => { + if (attempts++ > 12 || !player.isValid) return; + const form = new ModalFormData() + .title(title) + .dropdown("Select condition:", options, { defaultValueIndex: currentValueIndex != null ? currentValueIndex : 0 }); + + form.show(player).then(response => { + if (response.canceled && response.cancelationReason === "UserBusy") { + system.runTimeout(tryShow, 5); + return; + } + if (response.canceled) return; + entity.setDynamicProperty(propertyName, response.formValues[0]); + }); + }; + tryShow(); +} + +export class MachineBlock {} + +export class LaunchController extends MachineBlock { + static energy = {input: "below", capacity: 100000, maxInput: 2500}; + + static onTick(entity, block) { + const container = entity.getComponent('minecraft:inventory').container; + const variables = load_dynamic_object(entity, "machine_data"); + + let energy = variables.energy || 0; + let frequency = variables.frequency || 0; + let destFrequency = variables.destFrequency || 0; + let enabled = variables.enabled || false; + let hideDest = variables.hideDest || false; + + let removePad = variables.removePad || false; + let launchWhen = variables.launchWhen || false; + let launchCondition = variables.launchCondition || 0; + + let capacity = LaunchController.energy.capacity; + + // Sync properties from forms + const newFreq = entity.getDynamicProperty("lc_freq"); + if (newFreq != null) { frequency = newFreq; entity.setDynamicProperty("lc_freq", undefined); } + const newDestFreq = entity.getDynamicProperty("lc_dest_freq"); + if (newDestFreq != null) { destFrequency = newDestFreq; entity.setDynamicProperty("lc_dest_freq", undefined); } + const newCondition = entity.getDynamicProperty("lc_cond"); + if (newCondition != null) { launchCondition = newCondition; entity.setDynamicProperty("lc_cond", undefined); } + + const isAdvanced = entity.nameTag === AllMachines.advanced_launch_controller.ui; + + let ui_initialized = entity.getDynamicProperty("ui_initialized"); + if (!ui_initialized) { + entity.setDynamicProperty("ui_initialized", true); + } else { + if (isAdvanced) { + if (container.was_ui_clicked(2, entity)) { + removePad = !removePad; + container.add_ui_display(2, "Remove Pad", removePad ? 1 : 0); + } + if (container.was_ui_clicked(3, entity)) { + launchWhen = !launchWhen; + container.add_ui_display(3, "Launch when", launchWhen ? 1 : 0); + } + if (container.was_ui_clicked(4, entity)) { + container.add_ui_display(4, LAUNCH_CONDITIONS[launchCondition], 0); + const player = findInteractingPlayer(entity); + if (player) { + closeContainerUI(player); + system.run(() => showDropdownForm(player, entity, "Launch Condition", LAUNCH_CONDITIONS, launchCondition, "lc_cond")); + } + } + if (container.was_ui_clicked(5, entity)) { // Back button + entity.nameTag = AllMachines.launch_controller.ui; + container.add_ui_display(5, "<", 0); + const player = findInteractingPlayer(entity); + if (player) { + closeContainerUI(player); + } + } + } else { + if (container.was_ui_clicked(2, entity)) { + enabled = !enabled; + container.add_ui_display(2, enabled ? "Disable" : "Enable", 0); + } + if (container.was_ui_clicked(3, entity)) { + container.add_ui_display(3, String(frequency || 0), 0); + const player = findInteractingPlayer(entity); + if (player) { + closeContainerUI(player); + system.run(() => showNumberForm(player, entity, "Set Frequency", frequency, "lc_freq")); + } + } + if (container.was_ui_clicked(4, entity)) { + container.add_ui_display(4, String(destFrequency || 0), 0); + const player = findInteractingPlayer(entity); + if (player) { + closeContainerUI(player); + system.run(() => showNumberForm(player, entity, "Set Destination Frequency", destFrequency, "lc_dest_freq")); + } + } + if (container.was_ui_clicked(5, entity)) { // Hide Dest button + hideDest = !hideDest; + container.add_ui_display(5, hideDest ? "Unhide Dest" : "Hide Dest", 0); + } + if (container.was_ui_clicked(6, entity)) { // Advanced button + container.add_ui_display(6, "Advanced...", 0); + entity.nameTag = AllMachines.advanced_launch_controller.ui; + const player = findInteractingPlayer(entity); + if (player) { + closeContainerUI(player); + } + } + } + } + + energy = charge_from_machine(entity, block, energy); + energy = charge_from_battery(entity, energy, 0); + + // Check if anything changed + const newEnabled = enabled; + const newHideDest = hideDest; + const newRemovePad = removePad; + const newLaunchWhen = launchWhen; + + save_dynamic_object(entity, { + energy: energy, + frequency: frequency, + destFrequency: destFrequency, + enabled: enabled, + hideDest: hideDest, + removePad: removePad, + launchWhen: launchWhen, + launchCondition: launchCondition + }, "machine_data"); + + // Common energy bar - always update + container.add_ui_display(1, "Energy", Math.round((energy / capacity) * 55) || 0); + + // Update displays based on mode — use add_ui_button for clickable buttons + // so was_ui_clicked can detect when player takes them + if (isAdvanced) { + container.add_ui_display(2, "Remove Pad", removePad ? 1 : 0); + container.add_ui_display(3, "Launch when", launchWhen ? 1 : 0); + container.add_ui_button(4, LAUNCH_CONDITIONS[launchCondition]); + container.add_ui_button(5, "<"); // Back button + } else { + container.add_ui_button(2, enabled ? "Disable" : "Enable"); + container.add_ui_button(3, String(frequency || 0)); + container.add_ui_button(4, String(destFrequency || 0)); + container.add_ui_button(5, hideDest ? "Unhide Dest" : "Hide Dest"); + container.add_ui_button(6, "Advanced..."); + let status = "§2Active"; + if (energy <= 0) status = "§4Not Enough Power"; + else if (enabled) status = "§6Disabled"; + container.add_ui_display(7, status, 0); + } + } +} + +export default LaunchController; diff --git a/BP/scripts/core/machines/blocks/MethaneSynthesizer.js b/BP/scripts/core/machines/blocks/MethaneSynthesizer.js index 3169310b..838d8429 100644 --- a/BP/scripts/core/machines/blocks/MethaneSynthesizer.js +++ b/BP/scripts/core/machines/blocks/MethaneSynthesizer.js @@ -2,7 +2,7 @@ import { system } from "@minecraft/server" import { load_dynamic_object, save_dynamic_object } from "../../../api/utils" import { charge_from_machine, charge_from_battery } from "../../matter/electricity" import { machine_buttons, setup_ui_button } from "../MachineButtons" -import { input_fluid, load_from_item, load_to_canister, output_fluid } from "../../matter/fluids" +import { input_fluid, load_from_item, load_to_canister, output_fluid } from "../../matter/fluids.js" const InputSlot = 0, BatterySlot = 1, Co2Input = 2, MethaneOutput = 3, CoalItem = 4 const HydrogenDisplay = 5, CO2Display = 6, MethaneDisplay = 7, EnergyDisplay = 8 @@ -126,4 +126,4 @@ function produce_methane(co2, h2, methane, coal_partial, coal_item){ methane += produced_methane; h2 -= Math.min(produced_methane * 8, h2); return [co2, h2, methane, coal_partial, coal_item]; -} \ No newline at end of file +} diff --git a/BP/scripts/core/machines/blocks/OxygenCollector.js b/BP/scripts/core/machines/blocks/OxygenCollector.js index ae28d3e5..0b4193fc 100644 --- a/BP/scripts/core/machines/blocks/OxygenCollector.js +++ b/BP/scripts/core/machines/blocks/OxygenCollector.js @@ -35,7 +35,7 @@ const data = { o2 = output_fluid({type: "o2", slot: "o2", liquid_type: "g"}, entity, block, o2); //checks for leaves or cropes approximately once every 40 ticks - if(Math.floor(Math.random() * 10) === 0 && ["cosmos:space_stations", "minecraft:the_end"].includes(dimension_id) && energy > (data.energy.rate * 10)){ + if(Math.floor(Math.random() * 10) === 0 && ["cosmos:moon", "cosmos:mars", "cosmos:venus", "cosmos:asteroids", "cosmos:space_stations", "minecraft:the_end"].includes(dimension_id) && energy > (data.energy.rate * 10)){ oxygen_source_bloks = 0; let {x, y, z} = entity.location; for(let location of block.dimension.getBlocks( diff --git a/BP/scripts/core/machines/blocks/OxygenSealer.js b/BP/scripts/core/machines/blocks/OxygenSealer.js new file mode 100644 index 00000000..e251e554 --- /dev/null +++ b/BP/scripts/core/machines/blocks/OxygenSealer.js @@ -0,0 +1,44 @@ +import { system, BlockVolume} from "@minecraft/server"; +import { get_data } from "../Machine"; +import { load_dynamic_object, save_dynamic_object } from "../../../api/utils"; +import { charge_from_battery, charge_from_machine } from "../../matter/electricity"; + +const data = { + energy: {input: "right", capacity: 16000, maxInput: 25}, + o2: {input: "left", capacity: 6000}, + onTick(entity, block) { + const data = get_data(entity); + const container = entity.getComponent('minecraft:inventory').container; + const variables = load_dynamic_object(entity, "machine_data"); + + let energy = variables.energy || 0; + let o2 = variables.o2 || 0; + let disabled = variables.disabled || false; + + // Energy management + energy = charge_from_machine(entity, block, energy); + energy = charge_from_battery(entity, energy, 0); + energy = Math.max(0, energy - 10); + + // TODO: + const oxygen_usage = 0; + const status = energy == 0 ? "§4Not Enough Power" : disabled ? "§4Disabled" : "§2Sealed"; + const thermal_status = "§2Normal"; + + save_dynamic_object(entity, {energy, o2, disabled}, "machine_data"); + + const energy_hover = `Energy Storage\n§aEnergy: ${Math.round(energy)} gJ\n§cMax Energy: ${data.energy.capacity} gJ`; + const oxygen_hover = `Oxygen Storage\n§aOxygen: ${Math.round(o2)}/${data["o2"].capacity}`; + + + + container.add_ui_display(3, oxygen_hover, Math.round((o2 / data["o2"].capacity) * 55)); + container.add_ui_display(4, energy_hover, Math.round((energy / data.energy.capacity) * 55)); + container.add_ui_display(5, disabled ? 'Enable Seal' : 'Disable Seal'); + container.add_ui_display(6, '§rStatus: ' + status); + container.add_ui_display(7, `§rOxygen Usage: ${oxygen_usage} / sec`); + container.add_ui_display(8, '§rThermal Status: ' + thermal_status); + } +}; + +export default data; diff --git a/BP/scripts/core/machines/blocks/Refinery.js b/BP/scripts/core/machines/blocks/Refinery.js index f06d33b9..e9383dee 100644 --- a/BP/scripts/core/machines/blocks/Refinery.js +++ b/BP/scripts/core/machines/blocks/Refinery.js @@ -98,4 +98,4 @@ buttons[ButtonSlot] = function (entity, item) { item.nameTag = ProcessButtonText(!active) // flip the button text entity.setDynamicProperty('active', !active) // flip the machine state container.setItem(ButtonSlot, item) -} \ No newline at end of file +} diff --git a/BP/scripts/core/machines/blocks/ShortRangeTelepad.js b/BP/scripts/core/machines/blocks/ShortRangeTelepad.js new file mode 100644 index 00000000..a2c7d50f --- /dev/null +++ b/BP/scripts/core/machines/blocks/ShortRangeTelepad.js @@ -0,0 +1,233 @@ +import { system, world } from "@minecraft/server"; +import { ModalFormData } from "@minecraft/server-ui"; +import { load_dynamic_object, save_dynamic_object, compare_lists, closeContainerUI } from "../../../api/utils.js"; +import { charge_from_battery, charge_from_machine } from "../../matter/electricity.js"; + +// Global address registry: address (int) -> { entityId, location, dimensionId, enabled } +const telepad_registry = new Map(); + +const MAX_TELEPORT_TIME = 150; +const TELEPORTER_RANGE = 256; +const ENERGY_USE_ON_TELEPORT = 2500; + +function registry_add(address, entity, block, enabled) { + if (address < 0) return; + telepad_registry.set(address, { + entityId: entity.id, + location: { x: block.location.x, y: block.location.y, z: block.location.z }, + dimensionId: entity.dimension.id, + enabled, + }); +} + +function validate_target(address, srcDimensionId, srcLocation) { + if (address < 0) return "NOT_FOUND"; + const entry = telepad_registry.get(address); + if (!entry) return "NOT_FOUND"; + if (entry.dimensionId !== srcDimensionId) return "WRONG_DIM"; + const dx = entry.location.x - srcLocation.x; + const dy = entry.location.y - srcLocation.y; + const dz = entry.location.z - srcLocation.z; + if (Math.sqrt(dx * dx + dy * dy + dz * dz) > TELEPORTER_RANGE) return "TOO_FAR"; + if (!entry.enabled) return "TARGET_DISABLED"; + return "VALID"; +} + +function receiving_status(addressValid, energy, stopped) { + if (!addressValid) return "§cInvalid Address"; + if (energy <= 0) return "§cNo Energy"; + if (energy < ENERGY_USE_ON_TELEPORT) return "§cNot Enough Energy"; + if (stopped) return "§6Disabled"; + return "§aReceiving Active"; +} + +function sending_status(targetResult, energy, stopped) { + if (targetResult === "NOT_FOUND") return "§cTarget Not Found"; + if (targetResult === "TOO_FAR") return `§cToo Far (max ${TELEPORTER_RANGE}m)`; + if (targetResult === "WRONG_DIM") return "§cWrong Dimension"; + if (targetResult === "TARGET_DISABLED") return "§6Target Disabled"; + if (energy <= 0) return "§cNo Energy"; + if (energy < ENERGY_USE_ON_TELEPORT) return "§cNot Enough Energy"; + if (stopped) return "§6Disabled"; + return "§aSending Active"; +} + +// Show a text input form to set an address (retries until player is free) +function showAddressForm(player, entity, title, currentValue, propertyName) { + let attempts = 0; + const tryShow = () => { + if (attempts++ > 12 || !player.isValid) return; + const form = new ModalFormData() + .title(title) + .textField("Enter address (0-999999):", "0", { defaultValue: currentValue >= 0 ? String(currentValue) : "" }); + + form.show(player).then(response => { + if (response.canceled && response.cancelationReason === "UserBusy") { + system.runTimeout(tryShow, 5); + return; + } + if (response.canceled) return; + const parsed = parseInt(response.formValues[0]); + if (isNaN(parsed) || parsed < 0 || parsed > 999999) return; + entity.setDynamicProperty(propertyName, parsed); + }); + }; + tryShow(); +} + +// Find the player interacting with a machine entity +function findInteractingPlayer(entity) { + const loc = entity.location; + return entity.dimension.getPlayers({ + location: { x: loc.x, y: loc.y, z: loc.z }, + maxDistance: 6, + })[0]; +} + +const data = { + energy: { input: "below", capacity: 100000, maxInput: 2500 }, + items: { + top_input: [0], + side_input: [0], + }, + onTick(entity, block) { + const container = entity.getComponent("minecraft:inventory").container; + const variables = load_dynamic_object(entity, "machine_data"); + + let stopped = entity.getDynamicProperty("stopped"); + if (stopped == undefined) stopped = true; + + let energy = variables.energy || 0; + let address = variables.address ?? -1; + let targetAddress = variables.targetAddress ?? -1; + let teleportTime = variables.teleportTime || 0; + + let first_values = [energy, address, targetAddress, teleportTime, stopped]; + + // Pick up address changes from form submissions + const newAddress = entity.getDynamicProperty("telepad_address"); + const newTarget = entity.getDynamicProperty("telepad_target"); + if (newAddress != null) { + address = newAddress; + entity.setDynamicProperty("telepad_address", undefined); + } + if (newTarget != null) { + targetAddress = newTarget; + entity.setDynamicProperty("telepad_target", undefined); + } + + let ui_initialized = entity.getDynamicProperty("ui_initialized"); + if (!ui_initialized) { + entity.setDynamicProperty("ui_initialized", true); + } else { + // Detect textbox clicks (slot empty = player took the button item) + if (!container.getItem(2)) { + container.add_ui_button(2, address >= 0 ? String(address) : "--"); + const player = findInteractingPlayer(entity); + if (player) { + closeContainerUI(player); + system.run(() => { + showAddressForm(player, entity, "Set Address", address, "telepad_address"); + }); + } + } + if (!container.getItem(3)) { + container.add_ui_button(3, targetAddress >= 0 ? String(targetAddress) : "--"); + const player = findInteractingPlayer(entity); + if (player) { + closeContainerUI(player); + system.run(() => { + showAddressForm(player, entity, "Set Target Address", targetAddress, "telepad_target"); + }); + } + } + } + + energy = charge_from_machine(entity, block, energy); + energy = charge_from_battery(entity, energy, 0); + energy = Math.min(energy, data.energy.capacity); + + let addressValid = false; + let targetResult = "NOT_FOUND"; + + // Re-validate addresses every 40 ticks + if (!(system.currentTick % 40) && block) { + registry_add(address, entity, block, !stopped); + } + + // Validate addresses + if (address >= 0) { + const entry = telepad_registry.get(address); + addressValid = entry != null && entry.entityId === entity.id; + } + targetResult = validate_target(targetAddress, entity.dimension.id, block?.location ?? entity.location); + + // Teleport logic + if (!stopped && targetResult === "VALID" && block && !(system.currentTick % 5)) { + const loc = block.location; + let nearby; + try { + nearby = entity.dimension.getEntities({ + location: { x: loc.x + 0.5, y: loc.y + 1, z: loc.z + 0.5 }, + maxDistance: 1.2, + excludeTypes: ["minecraft:item"], + }).filter(e => e.id !== entity.id); + } catch (_) { nearby = []; } + + if (nearby.length > 0 && energy >= ENERGY_USE_ON_TELEPORT) { + teleportTime++; + } else { + teleportTime = Math.max(teleportTime - 1, 0); + } + } else if (stopped || targetResult !== "VALID") { + teleportTime = Math.max(teleportTime - 1, 0); + } + + // Execute teleport + if (teleportTime >= MAX_TELEPORT_TIME && block) { + const targetEntry = telepad_registry.get(targetAddress); + if (targetEntry) { + const loc = block.location; + let nearby; + try { + nearby = entity.dimension.getEntities({ + location: { x: loc.x + 0.5, y: loc.y + 1, z: loc.z + 0.5 }, + maxDistance: 1.2, + excludeTypes: ["minecraft:item"], + }).filter(e => e.id !== entity.id); + } catch (_) { nearby = []; } + + const destLoc = targetEntry.location; + for (const e of nearby) { + try { + e.teleport( + { x: destLoc.x + 0.5, y: destLoc.y + 0.08, z: destLoc.z + 0.5 }, + { dimension: entity.dimension } + ); + } catch (_) {} + } + + if (nearby.length > 0) { + energy = Math.max(0, energy - ENERGY_USE_ON_TELEPORT); + } + } + teleportTime = 0; + } + + save_dynamic_object(entity, { energy, address, targetAddress, teleportTime }, "machine_data"); + + // UI updates + if (!compare_lists(first_values, [energy, address, targetAddress, teleportTime, stopped]) || !container.getItem(1)) { + container.add_ui_button(1, stopped ? "Enable" : "Disable", entity, "stopped", !stopped); + container.setItem(2, undefined); + container.setItem(3, undefined); + container.add_ui_button(2, address >= 0 ? String(address) : "--"); + container.add_ui_button(3, targetAddress >= 0 ? String(targetAddress) : "--"); + container.add_ui_display(4, "Energy", Math.round((energy / data.energy.capacity) * 55) || 0); + container.add_ui_display(5, "§r" + receiving_status(addressValid, energy, stopped), 0); + container.add_ui_display(6, "§r" + sending_status(targetResult, energy, stopped), 0); + } + } +}; + +export default data; diff --git a/BP/scripts/core/machines/blocks/SolarArrayController.js b/BP/scripts/core/machines/blocks/SolarArrayController.js new file mode 100644 index 00000000..67a386fe --- /dev/null +++ b/BP/scripts/core/machines/blocks/SolarArrayController.js @@ -0,0 +1,154 @@ +import { system, world } from "@minecraft/server"; +import { load_dynamic_object, save_dynamic_object, compare_lists } from "../../../api/utils"; +import { charge_battery } from "../../matter/electricity"; + +const data = { + energy: { output: "back", capacity: 64000, maxPower: 1000 }, + items: { + top_input: [0], + side_input: [0], + }, + onTick(entity, block) { + const e = entity; + let stopped = e.getDynamicProperty('stopped'); + if (stopped == undefined) { + stopped = true; + e.setDynamicProperty('stopped', true); + } + const container = e.getComponent('minecraft:inventory').container; + + const variables = load_dynamic_object(e, "machine_data"); + let energy = variables.energy || 0; + let power = variables.power || 0; + let connected_panels = variables.connected_panels || 0; + let possible_panels = variables.possible_panels || 0; + let environment = variables.environment || 0; // percentage + let is_generating = variables.is_generating || 0; + + let first_values = [energy, power, connected_panels, possible_panels, environment, is_generating, stopped]; + + if (container.was_ui_clicked(5, entity)) { + stopped = !stopped; + e.setDynamicProperty('stopped', stopped); + } + + let planet = e.getPlanet(); + let time = planet ? planet.getTimeOfDay() : world.getTimeOfDay(); + let daylight_length = planet ? planet.time.day : 12000; + let is_day_time = (time <= daylight_length); + + if (!(system.currentTick % 20)) { + + if (!stopped && block != undefined) { + // Count connected solar array modules + connected_panels = 0; + possible_panels = 0; + let { x, y, z } = block.location; + + let visited = new Set(); + let queue = [ + {x: x+1, y, z}, {x: x-1, y, z}, + {x, y, z: z+1}, {x, y, z: z-1} + ]; + + while (queue.length > 0 && possible_panels < 1000) { // Safety limit 1000 + let curr = queue.shift(); + let key = `${curr.x},${curr.z}`; + if (visited.has(key)) continue; + visited.add(key); + + // Limit to 16 blocks radius + if (Math.abs(curr.x - x) > 16 || Math.abs(curr.z - z) > 16) continue; + + try { + let b = block.dimension.getBlock(curr); + if (b && b.typeId === 'cosmos:solar_array_module') { + possible_panels++; + + if (is_day_time) { + let topmost_block = block.dimension.getTopmostBlock(curr); + let valid = true; + if (topmost_block && topmost_block.location.y > curr.y) { + for (let cy = curr.y + 1; cy <= topmost_block.location.y && cy < 320; cy++) { + let above = block.dimension.getBlock({x: curr.x, y: cy, z: curr.z}); + if (above && !above.isAir && !above.isLiquid) { + valid = false; + break; + } + } + } + if (valid) { + connected_panels++; + } + } + + queue.push({x: curr.x+1, y, z: curr.z}); + queue.push({x: curr.x-1, y, z: curr.z}); + queue.push({x: curr.x, y, z: curr.z+1}); + queue.push({x: curr.x, y, z: curr.z-1}); + } + } catch(e) { + // Catch loaded chunk boundaries + } + } + + environment = is_day_time ? 100 : 0; + let solarBoost = environment / 100; + let generated = Math.floor(connected_panels * 6.3 * solarBoost); + is_generating = Math.min(Math.max(generated, 0), 1000); + } else { + is_generating = 0; + environment = 0; + connected_panels = 0; + possible_panels = 0; + } + } + + if (!stopped) { + energy = Math.min(energy + is_generating, data.energy.capacity); + energy = charge_battery(e, energy, 0); // Slot 0 is battery slot + } + + power = Math.min(energy, data.energy.maxPower); + save_dynamic_object(e, { energy, power, connected_panels, possible_panels, environment, is_generating }, "machine_data"); + + // Update UI display if variables changed or battery item changed + if (!compare_lists(first_values, [energy, power, connected_panels, possible_panels, environment, is_generating, stopped]) || !container.getItem(1)) { + + let status_info = '§6Disabled'; + if (!stopped) { + if (!is_day_time || possible_panels === 0) { + status_info = '§4Sun Is Not Visible'; + } else { + let sunVisible = connected_panels / possible_panels; + if (sunVisible === 0) { + status_info = '§4Sun Is Not Visible'; + } else if (sunVisible < 1.0) { + status_info = '§4Partially Blocked'; + } else if (is_generating > 0) { + status_info = '§2Collecting Energy'; + } else { + status_info = '§4Sun Is Not Visible'; + } + } + } + + const generating_text = `Generating: ${is_generating} gJ/t`; + const status_text = `Status: ${status_info}`; + const environment_text = `Environment: ${environment}%`; + const connected_panels_text = `Connected Panels: ${connected_panels} / ${possible_panels}`; + + // Add UI Display + // These correspond to the dynamic strings in the UI Datagen / Controller UI + container.add_ui_display(1, generating_text); + container.add_ui_display(2, status_text); + container.add_ui_display(3, environment_text); + container.add_ui_display(4, connected_panels_text); + + // Button ID 0 in datagen maps to UI index 5 + container.add_ui_button(5, stopped ? 'Enable' : 'Disable'); + } + } +}; + +export default data; diff --git a/BP/scripts/core/machines/blocks/Terraformer.js b/BP/scripts/core/machines/blocks/Terraformer.js new file mode 100644 index 00000000..ec6435f7 --- /dev/null +++ b/BP/scripts/core/machines/blocks/Terraformer.js @@ -0,0 +1,247 @@ +import { system } from "@minecraft/server" +import { load_dynamic_object, save_dynamic_object, getRandomItemSlot } from "../../../api/utils" +import { charge_from_machine, charge_from_battery } from "../../matter/electricity" +import { input_fluid } from "../../matter/fluids" + +const EnergyDisplay = 14, FluidDisplay = 15; +const BTN_TREES = 16, BTN_GRASS = 17, BTN_BUBBLE = 18; +const MAX_BUBBLE_SIZE = 15.0; + +const TERRAFORMABLE = new Set([ + 'minecraft:stone', 'minecraft:cobblestone', 'minecraft:sand', 'minecraft:gravel', 'minecraft:dirt', + 'minecraft:netherrack', 'minecraft:end_stone', + 'cosmos:moon_turf', 'cosmos:moon_rock', 'cosmos:moon_dirt', + 'cosmos:mars_cobblestone', 'cosmos:mars_surface_rock', 'cosmos:mars_sub_surface_rock', + 'cosmos:venus_rock', 'cosmos:venus_pumice', + 'cosmos:asteroid_rock' +]); + +// Transient lists (regenerated every 60 ticks) +const blockLists = new Map(); // entity.id -> { terraformable: [], grass: [], trees: [] } + +function consume_bonemeal(container, variables) { + variables.useCount = (variables.useCount || 0) + 1; + if (variables.useCount % 4 === 0) { + let slot = getRandomItemSlot(container, 2, 5); + if (slot !== -1) { + let item = container.getItem(slot); + if (item.amount > 1) { + item.amount -= 1; + container.setItem(slot, item); + } else { + container.setItem(slot, undefined); + } + } + } +} + +const data = { + energy: {input: "left", capacity: 16000, maxInput: 400}, + water: {input: "right", capacity: 2000}, + items: { + // Real slots: + // 0: Water bucket + // 1: Battery + // 2-5: Bonemeal + // 6-9: Saplings + // 10-13: Seeds + }, + onTick(entity, block) { + const container = entity.getComponent('minecraft:inventory').container + const variables = load_dynamic_object(entity, "machine_data") + + let energy = variables.energy || 0; + let water = variables.water || 0; + let treesDisabled = variables.treesDisabled || false; + let grassDisabled = variables.grassDisabled || false; + let shouldRenderBubble = variables.shouldRenderBubble ?? true; + let bubbleSize = variables.bubbleSize || 0; + + // Handle UI toggles + container.add_ui_button(BTN_TREES, treesDisabled ? 'Enable Trees' : 'Disable Trees', entity, 'treesDisabled', !treesDisabled); + container.add_ui_button(BTN_GRASS, grassDisabled ? 'Enable Grass' : 'Disable Grass', entity, 'grassDisabled', !grassDisabled); + container.add_ui_button(BTN_BUBBLE, shouldRenderBubble ? 'Hide Bubble' : 'Show Bubble', entity, 'shouldRenderBubble', !shouldRenderBubble); + + // Input processing + energy = charge_from_battery(entity, energy, 1); // battery slot 1 + energy = charge_from_machine(entity, block, energy) + water = input_fluid({type: "water", slot: "water", extract_slot: 0}, entity, block, water) + + let hasEnergy = energy >= 10; + let hasWater = water > 0; + let hasBonemeal = getRandomItemSlot(container, 2, 5) !== -1; + let hasSapling = getRandomItemSlot(container, 6, 9) !== -1; + let hasSeed = getRandomItemSlot(container, 10, 13) !== -1; + + let isActive = (bubbleSize >= MAX_BUBBLE_SIZE - 0.1) && hasEnergy && hasBonemeal && hasWater; + + // Expand / Shrink bubble + if (hasEnergy && (!grassDisabled || !treesDisabled)) { + bubbleSize = Math.min(MAX_BUBBLE_SIZE, bubbleSize + 0.1); + energy -= 10; + } else { + bubbleSize = Math.max(0, bubbleSize - 0.1); + if(!(system.currentTick % 80)) energy -= Math.min(1, energy); + } + + if (!blockLists.has(entity.id)) { + blockLists.set(entity.id, { terraformable: [], grass: [], trees: [] }); + } + let lists = blockLists.get(entity.id); + + // Every 60 ticks: Scan area + if (system.currentTick % 60 === 0 && isActive) { + lists.terraformable = []; + lists.grass = []; + + let r = Math.floor(bubbleSize); + let rSq = bubbleSize * bubbleSize; + let dim = block.dimension; + let {x: cx, y: cy, z: cz} = block.location; + + let doGrass = !grassDisabled && hasSeed; + let doTrees = !treesDisabled && hasSapling; + + if (doGrass || doTrees) { + for (let dx = -r; dx <= r; dx++) { + for (let dy = -r; dy <= r; dy++) { + for (let dz = -r; dz <= r; dz++) { + if (dx*dx + dy*dy + dz*dz <= rSq) { + let lx = cx + dx, ly = cy + dy, lz = cz + dz; + try { + let b = dim.getBlock({x: lx, y: ly, z: lz}); + if (b && !b.isAir) { + if (doGrass && TERRAFORMABLE.has(b.typeId)) { + lists.terraformable.push({x: lx, y: ly, z: lz}); + } else if (doTrees && b.typeId === 'minecraft:grass') { + let up = dim.getBlock({x: lx, y: ly + 1, z: lz}); + if (up && up.isAir) { + lists.grass.push({x: lx, y: ly, z: lz}); + } + } + } + } catch(e) {} + } + } + } + } + } + } + + // Every 15 ticks: Execute Grass + if (system.currentTick % 15 === 0 && lists.terraformable.length > 0) { + let idx = Math.floor(Math.random() * lists.terraformable.length); + let loc = lists.terraformable[idx]; + lists.terraformable.splice(idx, 1); + + try { + let b = block.dimension.getBlock(loc); + if (b && TERRAFORMABLE.has(b.typeId)) { + // Minimal check for surrounding blocks to place water + let waterChance = Math.random() < 0.025; // 1/40 chance + if (waterChance) { + b.setType('minecraft:water'); + water = Math.max(0, water - 50); // Using 50mb for water block + } else { + b.setType('minecraft:grass'); + consume_bonemeal(container, variables); + water = Math.max(0, water - 1); + } + } + } catch(e) {} + } + + // Every 50 ticks: Execute Trees + if (system.currentTick % 50 === 0 && lists.grass.length > 0 && !treesDisabled && hasSapling) { + let idx = Math.floor(Math.random() * lists.grass.length); + let loc = lists.grass[idx]; + lists.grass.splice(idx, 1); + + try { + let b = block.dimension.getBlock(loc); + if (b && b.typeId === 'minecraft:grass') { + let upLoc = {x: loc.x, y: loc.y + 1, z: loc.z}; + + // Distance check from existing trees to prevent overcrowding + let tooClose = false; + for (let t of lists.trees) { + let dx = t.x - upLoc.x, dy = t.y - upLoc.y, dz = t.z - upLoc.z; + if (dx*dx + dy*dy + dz*dz < 9) { tooClose = true; break; } + } + + if (!tooClose) { + let up = block.dimension.getBlock(upLoc); + if (up && up.isAir) { + up.setType('minecraft:oak_sapling'); // Default sapling for now + lists.trees.push(upLoc); + + // Consume resources + water = Math.max(0, water - 50); + let sapSlot = getRandomItemSlot(container, 6, 9); + if (sapSlot !== -1) { + let item = container.getItem(sapSlot); + if (item.amount > 1) { + item.amount -= 1; + container.setItem(sapSlot, item); + } else { + container.setItem(sapSlot, undefined); + } + } + + // Consume seed (1/4 chance) + variables.useCount = (variables.useCount || 0) + 1; + if (variables.useCount % 4 === 0) { + let seedSlot = getRandomItemSlot(container, 10, 13); + if (seedSlot !== -1) { + let item = container.getItem(seedSlot); + if (item.amount > 1) { + item.amount -= 1; + container.setItem(seedSlot, item); + } else { + container.setItem(seedSlot, undefined); + } + } + } + } + } + } + } catch(e) {} + } + + // Spawning highlight particles if bubble is visible (temporary visualization) + if (shouldRenderBubble && bubbleSize > 2 && system.currentTick % 10 === 0) { + let {x: cx, y: cy, z: cz} = block.location; + block.dimension.spawnParticle("minecraft:villager_happy", { + x: cx + (Math.random() - 0.5) * bubbleSize * 2, + y: cy + (Math.random() - 0.5) * bubbleSize * 2, + z: cz + (Math.random() - 0.5) * bubbleSize * 2 + }); + } + + variables.energy = energy; + variables.water = water; + variables.treesDisabled = treesDisabled; + variables.grassDisabled = grassDisabled; + variables.shouldRenderBubble = shouldRenderBubble; + variables.bubbleSize = bubbleSize; + save_dynamic_object(entity, variables, "machine_data") + + // UI display sync + if (system.currentTick % 3 == 0) { + // Status string calculation + let status = 'A aTerraforming...'; + if (!hasEnergy) status = 'A 4No Energy'; + else if (grassDisabled && treesDisabled) status = 'A 6Disabled'; + else if (!hasWater) status = 'A 4No Water'; + else if (!hasBonemeal) status = 'A 4No Bonemeal'; + else if (!grassDisabled && !hasSeed) status = 'A 4No Seeds'; + else if (!treesDisabled && !hasSapling) status = 'A 4No Saplings'; + else if (bubbleSize < MAX_BUBBLE_SIZE - 0.5) status = 'A 2Bubble Expanding'; + else if (!treesDisabled && lists.grass.length === 0) status = 'A 4No Valid Blocks for Trees'; + else if (!grassDisabled && lists.terraformable.length === 0) status = 'A 4No Valid Blocks for Grass'; + + container.add_ui_display(EnergyDisplay, `Energy Storage\nA aEnergy: ${Math.round(energy)} gJ\nA cMax Energy: ${data.energy.capacity} gJ\nA rStatus: ${status}`, Math.ceil((energy / data.energy.capacity) * 55)) + container.add_ui_display(FluidDisplay, `Fluid Tank\nA eWater: ${Math.round(water)} mB / ${data.water.capacity} mB`, Math.ceil((water / data.water.capacity) * 28)) // 28 is height for terraformer tank + } + } +}; export default data diff --git a/BP/scripts/core/machines/blocks/WaterElectrolyzer.js b/BP/scripts/core/machines/blocks/WaterElectrolyzer.js index 91f8477e..b0dcd706 100644 --- a/BP/scripts/core/machines/blocks/WaterElectrolyzer.js +++ b/BP/scripts/core/machines/blocks/WaterElectrolyzer.js @@ -71,4 +71,4 @@ buttons[ButtonSlot] = function (entity, item) { item.nameTag = ProcessButtonText(!active) // flip the button text entity.setDynamicProperty('active', !active) // flip the machine state container.setItem(ButtonSlot, item) -} \ No newline at end of file +} diff --git a/BP/scripts/core/machines/rockets/MoonLander.js b/BP/scripts/core/machines/rockets/MoonLander.js new file mode 100644 index 00000000..351d86ed --- /dev/null +++ b/BP/scripts/core/machines/rockets/MoonLander.js @@ -0,0 +1,129 @@ +import { system, world} from "@minecraft/server" +import { dismount, set_items_to_lander, saved_rocket_items, rocket_nametags} from "../../../api/player/liftoff"; + +export default class{ + constructor(entity, block) { + this.entity = entity; + this.block = block; + if (entity.isValid) this.lander(); + } + lander(){ + if(system.currentTick % 10) return; + let lander = this.entity; + let inventory = lander.getComponent('minecraft:inventory'); + let container = inventory.container; + let fuel = lander.getDynamicProperty("fuel_level") || 0; + container.add_ui_display(inventory.inventorySize - 4, "", Math.ceil((Math.ceil(fuel/26)))) + } +} + +function lander_rotation(player, lander){ + let final_rotation_x = lander.getProperty("cosmos:rotation_x"); + let final_rotation_y = lander.getProperty("cosmos:rotation_y"); + + let input = player.inputInfo.getMovementVector(); + input = {x: Math.round(input.x), y: Math.round(input.y)} + final_rotation_x = Math.min(Math.max(final_rotation_x + (input.y * 2), -45), 45); + final_rotation_y = final_rotation_y + (input.x * 2); + + final_rotation_y = (final_rotation_y > 360)? 2: + (final_rotation_y < 0)? 358: + final_rotation_y; + return [final_rotation_x, final_rotation_y] +} +export function moon_lander(player, load = true){ + let speed = 0; + player.inputPermissions.setPermissionCategory(2, false); + player.inputPermissions.setPermissionCategory(6, false); + player.setProperty("cosmos:rotation_x", 90); + + let data = JSON.parse(player.getDynamicProperty('dimension')) + let items_to_set = saved_rocket_items.get(data.id); + saved_rocket_items.delete(data.id) + let typeId = data.typeId; + let size = data.size - 2; + let group = 'cosmos:inv' + size; + let lander = player.dimension.spawnEntity("cosmos:lander", {x: data.loc.x, y: 250, z: data.loc.z}); + lander.triggerEvent("cosmos:lander_gravity_disable"); + lander.teleport(data.loc); + lander.setDynamicProperty("fuel_level", data.fuel); + lander.getComponent("minecraft:rideable").addRider(player); + player.camera.setCamera("minecraft:follow_orbit", { radius: 20 }); + player.setDynamicProperty("dimension", undefined); + player.removeTag("ableToOxygen") + + let is_load = load; + let camera = player.getRotation(); + let lander_flight = system.runInterval(() => { + if(is_load){ + let new_camera = player.getRotation(); + if(new_camera.x != camera.x || new_camera.y != camera.y) is_load = false + lander.triggerEvent(group); + lander.nameTag = '§f§u§e§l§_§c§h§e§s§t§' + rocket_nametags[size] + return; + } + if(!player || !player.isValid){ + system.clearRun(lander_flight); + return; + } + if(!lander || !lander.isValid){ + dismount(player); + system.clearRun(lander_flight); + return; + } + if(player.inputInfo.getButtonState("Jump") == "Pressed"){ + speed = Math.min(speed + 0.03, lander.location.y < 115 ? -0.15 : -1.0); + }else{ + speed = Math.min(speed - 0.022, -1.0); + } + speed -= 0.008; + + let translatedSpeed = {"rawtext": [ + {"translate": "gui.lander.velocity"}, + {"text": ": "}, + {"text": `${(Math.round(speed * 1000)/100)}`}, + {"text": " "}, + {"translate": "gui.lander.velocityu"} + ]} + player.onScreenDisplay.setTitle(" ", {fadeInDuration: 0, fadeOutDuration: 0, stayDuration: 2, subtitle: translatedSpeed}) + + let rotation = lander_rotation(player, lander) + lander.setProperty("cosmos:rotation_x", rotation[0]) + lander.setProperty("cosmos:rotation_y", rotation[1]) + + let motY = Math.sin(rotation[0]/57.2957795147); + let motX = Math.cos(rotation[1]/57.2957795147) * motY; + let motZ = Math.sin(rotation[1]/57.2957795147) * motY; + let speedX = motX / 2.0; + let speedZ = motZ / 2.0; + + lander.clearVelocity(); + lander.applyImpulse({x: speedX, y: speed, z: speedZ}) + if(lander.location.y < 500 && lander.getVelocity().y === 0){ + if(Math.abs(speed) > 2){ + player.addTag("ableToOxygen"); + player.addTag("in_space"); + dismount(player); + + lander.setProperty("cosmos:rotation_x", 0) + + lander.dimension.createExplosion(lander.location, 10, {causesFire: false, breaksBlocks: true}); + lander.remove(); + system.clearRun(lander_flight); + }else{ + lander.setProperty("cosmos:rotation_x", 0) + player.inputPermissions.setPermissionCategory(2, true); + player.addTag("ableToOxygen"); + player.addTag("in_space"); + dismount(player); + lander.getComponent("minecraft:rideable").ejectRider(player) + lander.triggerEvent("cosmos:rideable_false") + + set_items_to_lander(lander, size, items_to_set, typeId) + + lander.triggerEvent("cosmos:lander_gravity_enable") + system.clearRun(lander_flight); + } + } + }); +} \ No newline at end of file diff --git a/BP/scripts/core/machines/rockets/RocketTierOne.js b/BP/scripts/core/machines/rockets/RocketTierOne.js new file mode 100644 index 00000000..53ae2e3e --- /dev/null +++ b/BP/scripts/core/machines/rockets/RocketTierOne.js @@ -0,0 +1,78 @@ +import { system, world} from "@minecraft/server" +import { start_countdown, dismount} from "../../../api/player/liftoff"; +import { start_celestial_selector } from "../../../api/player/celestial_selector"; + +export default class{ + constructor(entity, block) { + this.entity = entity; + this.block = block; + if (entity.isValid) this.rocket(); + } + rocket(){ + if(system.currentTick % 10) return; + let rocket = this.entity; + const rider = rocket.getComponent('minecraft:rideable').getRiders() + .find(rider => rider.typeId == "minecraft:player") + const active = rocket.getDynamicProperty('active'); + const launched = rocket.getDynamicProperty("rocket_launched"); + //explode when the rocket stops after laucnching + if (launched && rocket.getVelocity().y == 0) { + rocket.dimension.createExplosion(rocket.location, 10, {causesFire: true, breaksBlocks: true}) + rocket.remove() + } + //start the celestial selector when the rocket reaches space + if (active && rocket.location.y > 1200) { + const current_rider = rocket.getComponent('minecraft:rideable').getRiders() + .find(rider => rider.typeId == "minecraft:player") + if (current_rider && !rocket.getDynamicProperty("freezed")){ + rocket.setDynamicProperty("freezed", true) + start_celestial_selector(current_rider) + } + } + let inventory = rocket.getComponent('minecraft:inventory'); + let container = inventory.container; + if(!rider){ + container.setItem(inventory.inventorySize - 2, undefined); + container.setItem(inventory.inventorySize - 1, undefined); + return + }; + let fuel = rocket.getDynamicProperty("fuel_level") || 0; + container.add_ui_display(inventory.inventorySize - 2, 'Fuel Tank. Requires\nfuel loader to fill', Math.ceil((Math.ceil(fuel/26)))) + container.add_ui_display(inventory.inventorySize - 1, "§2" + `${Math.round(fuel * 100/1000)}` + '.0%% full') + //disable jumping + rider.inputPermissions.setPermissionCategory(6, false) + rider.setProperty("cosmos:is_sitting", 1); + //camera shake + if (active) rider.runCommand(`camerashake add @s 0.1 0.5`) + //ignite the engine when the player jumps + if (!active && rider.inputInfo.getButtonState("Jump") == "Pressed") { + const space_gear = JSON.parse(rider.getDynamicProperty("space_gear") ?? '{}') + const need_fuel = fuel <= 0 && rider.getGameMode() != "Creative" + if (!need_fuel && (space_gear.parachute || rocket.getDynamicProperty('ready'))) { + start_countdown(rocket, rider) + } else if(need_fuel){ + rider.sendMessage("I'll need to load in some rocket fuel first!"); + } else { + rider.sendMessage("You do not have a parachute.") + rider.sendMessage("Press jump again to start the countdown.") + rocket.setDynamicProperty('ready', true) + } + } + //set the camera and the player in the rocket + if (!rider.getDynamicProperty('in_the_rocket')) { + rider.camera.setCamera("minecraft:follow_orbit", { radius: 20 }) + rider.setDynamicProperty('in_the_rocket', rocket.id) + //display the countdown timer + if (!active) rider.onScreenDisplay.setTitle('§c20', {fadeInDuration: 0, fadeOutDuration: 0, stayDuration: 20000}) + } + //fix the camera and remove the countdown if the player leaves + system.runTimeout(() => { + if (!rocket || !rocket.isValid) return + const ride_id = rider.getComponent('minecraft:riding')?.entityRidingOn?.id + if (ride_id != rocket.id) { + rocket.setDynamicProperty('ready') + dismount(rider) + } + }, 20) + } +} \ No newline at end of file diff --git a/BP/scripts/main.js b/BP/scripts/main.js index af1dafbc..75e5dee5 100644 --- a/BP/scripts/main.js +++ b/BP/scripts/main.js @@ -20,4 +20,13 @@ import "./core/entities/evolved_skeleton_boss.js" import "./core/PlayerWorldCycle.js" -import "./planets/events/unlit_torch.js" \ No newline at end of file +import "./planets/events/unlit_torch.js" +import "./planets/dimensions.js" +import { startWorldgenCoordinator } from "./planets/worldgen.js" +import { startVoidRecoveryLoop } from "./planets/teleport.js" +import { startFogManager } from "./planets/fog_manager.js" + +// Start custom dimension systems +startWorldgenCoordinator(); +startVoidRecoveryLoop(); +startFogManager(); \ No newline at end of file diff --git a/BP/scripts/planets/AllPlanets.js b/BP/scripts/planets/AllPlanets.js index e250769e..56e784f6 100644 --- a/BP/scripts/planets/AllPlanets.js +++ b/BP/scripts/planets/AllPlanets.js @@ -1,33 +1,43 @@ -import { Moon } from "./dimensions/Moon"; -import { Mars } from "./dimensions/Mars"; -import { Venus } from "./dimensions/Venus"; -import { Asteroids } from "./dimensions/Asteroids"; -import { SpaceStations } from "./dimensions/SpaceStations"; +import { Moon } from "./dimensions/Moon.js"; +import { Mars } from "./dimensions/Mars.js"; +import { Venus } from "./dimensions/Venus.js"; +import { Asteroids } from "./dimensions/Asteroids.js"; +import { SpaceStations } from "./dimensions/SpaceStations.js"; + +const FULL_RANGE = { + start: { x: -30000000, z: -30000000 }, + end: { x: 30000000, z: 30000000 } +}; export default [ { id: 'moon', - range: { start: { x: 50000, z: 50000 }, end: { x:100000, z: 100000 } }, + dimensionId: 'cosmos:moon', + range: FULL_RANGE, class: new Moon() }, { id: 'mars', - range: { start: { x: -100000, z: 50000 }, end: { x: -50000, z: 100000 } }, + dimensionId: 'cosmos:mars', + range: FULL_RANGE, class: new Mars() }, { id: 'venus', - range: { start: { x: 50000, z: -100000 }, end: { x: 100000, z: -50000 } }, + dimensionId: 'cosmos:venus', + range: FULL_RANGE, class: new Venus() }, { id: 'asteroids', - range: { start: { x: -100000, z: -100000 }, end: { x: -50000, z: -50000 } }, + dimensionId: 'cosmos:asteroids', + range: FULL_RANGE, class: new Asteroids() }, { id: 'stations', - range: { start: { x: -1000000, z: -1000000 }, end: { x: 1000000, z: 1000000 } }, + dimensionId: 'cosmos:space_stations', + range: FULL_RANGE, class: new SpaceStations() } ]; \ No newline at end of file diff --git a/BP/scripts/planets/GalacticraftPlanets.js b/BP/scripts/planets/GalacticraftPlanets.js index 64311327..c4b26b65 100644 --- a/BP/scripts/planets/GalacticraftPlanets.js +++ b/BP/scripts/planets/GalacticraftPlanets.js @@ -1,20 +1,24 @@ import { world, system } from "@minecraft/server"; -import { isUnderground } from "../api/utils"; -import { return_to_earth } from "./dimensions/Overworld"; +import { isUnderground } from "../api/utils.js"; +import { return_to_earth } from "./dimensions/Overworld.js"; -export class Planet{ - constructor(){ - this._type; - this._gravity; - this._range; - this._time; - this._center; - this._fuelMultiplier; - this._solarEnergyMultiplier; +export class Planet { + constructor() { + this._type = ""; + this._dimensionId = ""; + this._gravity = 9.8; + this._range = { start: { x: -30000000, z: -30000000 }, end: { x: 30000000, z: 30000000 } }; + this._time = { length: 24000, day: 12000 }; + this._center = { x: 0, z: 0 }; + this._fuelMultiplier = 1.0; + this._solarEnergyMultiplier = 1.0; } - get type(){ + get type() { return this._type; } + get dimensionId() { + return this._dimensionId; + } get range() { return { start: { x: this._range.start.x, z: this._range.start.z }, @@ -46,65 +50,76 @@ export class Planet{ z: location.z - this._center.z }; } - getTimeOfDay(){ - return world.getAbsoluteTime() % this._time.length; + getTimeOfDay() { + return world.getAbsoluteTime() % (this._time?.length || 24000); } } + // Returns the coordinates that should be displayed on the screen -function planet_coords(entity){ - let planet = entity.getPlanet(); - return planet?.offset(entity.location) || entity.location; +function planet_coords(entity) { + let planet = entity.getPlanet(); + return planet?.offset(entity.location) || entity.location; } -export function coords_loop(player){ - let {x, y, z} = planet_coords(player) - x = Math.floor(x); y = Math.floor(y + 0.000001); z = Math.floor(z); - player.onScreenDisplay.setActionBar(`Position: ${x}, ${y}, ${z}`) + +export function coords_loop(player) { + let { x, y, z } = planet_coords(player); + x = Math.floor(x); + y = Math.floor(y + 0.000001); + z = Math.floor(z); + player.onScreenDisplay.setActionBar(`Position: ${x}, ${y}, ${z}`); } -world.afterEvents.gameRuleChange.subscribe(({rule, value}) => { - if (rule == "showCoordinates" && value == false) + +world.afterEvents.gameRuleChange.subscribe(({ rule, value }) => { + if (rule === "showCoordinates" && value === false) { world.getAllPlayers().forEach(player => player.onScreenDisplay.setActionBar(`§.`) - ) + ); } -) +}); world.afterEvents.playerDimensionChange.subscribe((data) => { - if(!data.player.getDynamicProperty('dimension')) return; + if (!data.player.getDynamicProperty('dimension')) return; let player_data = JSON.parse(data.player.getDynamicProperty('dimension')); data.player.setDynamicProperty('dimension'); let planet = world.getPlanet(player_data.type); - if(data.fromDimension.id == "cosmos:space_stations" && player_data.type == "stations"){ - planet.launching(data.player, player_data, false); - return; - } - if(data.fromDimension.id == "minecraft:the_end" && !["overworld", "stations"].includes(player_data.type)){ - planet.launching(data.player, player_data, false) - return; + if (player_data.type !== "overworld") { + if (planet) { + planet.launching(data.player, player_data, true); + } + } else { + return_to_earth(data.player, player_data, player_data.place_parachest); } - if(player_data.type !== "overworld"){ - let planet = world.getPlanet(player_data.type); - planet.launching(data.player, player_data, true); - }else return_to_earth(data.player, player_data, player_data.place_parachest) }); -//system of cleaning entity that were spawned in night -const evolved_mobs = ["cosmos:evolved_zombie", "cosmos:evolved_creeper", "cosmos:evolved_skeleton", "cosmos:evolved_spider"] -world.afterEvents.entitySpawn.subscribe(({entity, cause}) => { - if(entity.isValid && cause == "Spawned" && evolved_mobs.includes(entity.typeId)){ +// System of cleaning entities that were spawned at night +const evolved_mobs = ["cosmos:evolved_zombie", "cosmos:evolved_creeper", "cosmos:evolved_skeleton", "cosmos:evolved_spider"]; +world.afterEvents.entitySpawn.subscribe(({ entity, cause }) => { + if (entity.isValid && cause === "Spawned" && evolved_mobs.includes(entity.typeId)) { let planet = entity.getPlanet(); - if(planet && planet.getTimeOfDay() < planet.time.day && !isUnderground(entity)) entity.remove() - else if(planet && entity.typeId !== "cosmos:evolved_creeper" && entity.typeId !== "cosmos:evolved_spider") entity.addTag("hostile_space_mob") + if (planet && planet.getTimeOfDay() < planet.time.day && !isUnderground(entity)) { + entity.remove(); + } else if (planet && entity.typeId !== "cosmos:evolved_creeper" && entity.typeId !== "cosmos:evolved_spider") { + entity.addTag("hostile_space_mob"); + } } }); world.afterEvents.worldLoad.subscribe(() => { system.runInterval(() => { - let mobs = world.getDimension("the_end").getEntities({tags: ["hostile_space_mob"]}); - mobs.forEach((mob) => { - if(!mob.isValid) return; - let planet = mob.getPlanet(); - if(planet && !isUnderground(mob) && planet.getTimeOfDay() < planet.time.day) mob.setOnFire(10) - }); + for (const dimId of ["cosmos:moon", "cosmos:mars"]) { + try { + const dim = world.getDimension(dimId); + if (!dim) continue; + let mobs = dim.getEntities({ tags: ["hostile_space_mob"] }); + mobs.forEach((mob) => { + if (!mob.isValid) return; + let planet = mob.getPlanet(); + if (planet && !isUnderground(mob) && planet.getTimeOfDay() < planet.time.day) { + mob.setOnFire(10); + } + }); + } catch (e) {} + } }, 100); }); \ No newline at end of file diff --git a/BP/scripts/planets/dimensions.js b/BP/scripts/planets/dimensions.js new file mode 100644 index 00000000..451d02b4 --- /dev/null +++ b/BP/scripts/planets/dimensions.js @@ -0,0 +1,38 @@ +/** + * Cosmos Adventure Custom Dimension Registry + * Registers all true planetary custom dimensions during engine startup. + */ +import { system } from "@minecraft/server"; + +export const COSMOS_DIMENSIONS = { + MOON: "cosmos:moon", + MARS: "cosmos:mars", + VENUS: "cosmos:venus", + ASTEROIDS: "cosmos:asteroids", + SPACE_STATIONS: "cosmos:space_stations" +}; + +export const ALL_COSMOS_DIMENSION_IDS = Object.values(COSMOS_DIMENSIONS); + +let isDimensionsRegistered = false; + +/** + * Registers all Cosmos custom dimensions in system.beforeEvents.startup. + * Safe against duplicate registration. + */ +export function registerDimensions() { + if (isDimensionsRegistered) return; + isDimensionsRegistered = true; + + system.beforeEvents.startup.subscribe((event) => { + if (!event || !event.dimensionRegistry) return; + for (const dimId of ALL_COSMOS_DIMENSION_IDS) { + try { + event.dimensionRegistry.registerCustomDimension(dimId); + } catch (e) {} + } + }); +} + +// Parity alias +export const registerCustomDimensions = registerDimensions; diff --git a/BP/scripts/planets/dimensions/Asteroids.js b/BP/scripts/planets/dimensions/Asteroids.js index 10434af6..67d051b8 100644 --- a/BP/scripts/planets/dimensions/Asteroids.js +++ b/BP/scripts/planets/dimensions/Asteroids.js @@ -1,14 +1,16 @@ import { world, system } from "@minecraft/server"; -import { Planet } from "../../planets/GalacticraftPlanets"; +import { Planet } from "../GalacticraftPlanets.js"; -export class Asteroids extends Planet{ - constructor(){ +export class Asteroids extends Planet { + constructor() { super(); this._type = "asteroids"; - this._range = { start: { x: -100000, z: -100000 }, end: { x: -50000, z: -50000 } }; + this._dimensionId = "cosmos:asteroids"; + this._range = { start: { x: -30000000, z: -30000000 }, end: { x: 30000000, z: 30000000 } }; this._gravity = 0.05; + this._center = { x: 0, z: 0 }; this._fuelMultiplier = 0.9; this._solarEnergyMultiplier = 0.77; } - launching(){} + launching() {} } \ No newline at end of file diff --git a/BP/scripts/planets/dimensions/Mars.js b/BP/scripts/planets/dimensions/Mars.js index ab55c878..a2d1f384 100644 --- a/BP/scripts/planets/dimensions/Mars.js +++ b/BP/scripts/planets/dimensions/Mars.js @@ -1,46 +1,63 @@ import { world, system } from "@minecraft/server"; -import { Planet } from "../../planets/GalacticraftPlanets"; -import { saved_rocket_items, rocket_nametags, dismount } from "../../api/player/liftoff"; -import { set_items_to_vehicle } from "../../core/vehicles/Vehicle"; -import { save_dynamic_object } from "../../api/utils"; +import { Planet } from "../GalacticraftPlanets.js"; +import { saved_rocket_items, rocket_nametags, dismount } from "../../api/player/liftoff.js"; +import { set_items_to_vehicle } from "../../core/vehicles/Vehicle.js"; +import { save_dynamic_object } from "../../api/utils.js"; +import { applyMarsFog } from "../fog_manager.js"; -export class Mars extends Planet{ - constructor(){ +export class Mars extends Planet { + constructor() { super(); this._type = "mars"; - this._range = { start: { x: -100000, z: 50000 }, end: { x: -50000, z: 100000 } }; - this._gravity = 3.7; - this._center = {x: -75000, z: 75000}; - this._time = {length: 24000, day: 12000}; + this._dimensionId = "cosmos:mars"; + this._range = { start: { x: -30000000, z: -30000000 }, end: { x: 30000000, z: 30000000 } }; + this._gravity = 3.7; + this._center = { x: 0, z: 0 }; + this._time = { length: 24000, day: 12000 }; this._fuelMultiplier = 0.9; this._solarEnergyMultiplier = 0.52; } - launching(player, data, loaded = false){ - player.runCommand("fog @s push cosmos:mars_fog mars") - if(loaded){ landing_balloons_motion(player, data); return;} - let loc = { x: this._center.x + (Math.random() * 20), y: 1000, z: this._center.z + (Math.random() * 20) }; - + launching(player, data, loaded = false) { + applyMarsFog(player); + if (loaded) { + landing_balloons_motion(player, data); + return; + } + + const targetDim = world.getDimension("cosmos:mars"); + const loc = { + x: Math.round(Math.random() * 20 - 10) + 0.5, + y: 1000, + z: Math.round(Math.random() * 20 - 10) + 0.5 + }; + player.setDynamicProperty('dimension', JSON.stringify(data)); - if(player.dimension.id == "minecraft:the_end"){ - player.teleport({x: 0, y: 500, z: 0}, {dimension: world.getDimension("overworld")}) + + if (player.dimension.id === "cosmos:mars") { + player.teleport(loc, { dimension: targetDim }); + system.runTimeout(() => { + landing_balloons_motion(player, data); + }, 5); return; } - player.teleport(loc, { dimension: world.getDimension("the_end")}) + + player.teleport(loc, { dimension: targetDim }); } } -function get_motion_after_ground_hit(motion, hits){ +function get_motion_after_ground_hit(motion, hits) { let mag = (1 / hits) * 4; motion.x = Math.random() - 0.5; motion.y = 1; motion.z = Math.random() - 0.5; - + motion.x *= mag / 3; motion.y *= mag; motion.z *= mag / 3; return motion; } -function landing_balloons_motion(player, data, load = true){ + +function landing_balloons_motion(player, data, load = true) { let ground_hits = 0; let ground_tick = 0; let rotation_pitch_speed = Math.random(); @@ -49,86 +66,83 @@ function landing_balloons_motion(player, data, load = true){ let rotation_pitch = 0; let rotation_yaw = 0; - let motion = {x: 0, y: 0, z: 0}; + let motion = { x: 0, y: 0, z: 0 }; player.inputPermissions.setPermissionCategory(2, false); player.inputPermissions.setPermissionCategory(6, false); let items_to_set = saved_rocket_items.get(data.id); - saved_rocket_items.delete(data.id) - let size = data.size - 2 + saved_rocket_items.delete(data.id); + let size = data.size - 2; let group = 'cosmos:inv' + size; - let landing_balloons = player.dimension.spawnEntity("cosmos:landing_balloons", {x: player.location.x, y: 250, z: player.location.z}); + let landing_balloons = player.dimension.spawnEntity("cosmos:landing_balloons", { x: player.location.x, y: 250, z: player.location.z }); landing_balloons.triggerEvent("cosmos:lander_gravity_disable"); - player.teleport({x: player.location.x, y: 1000, z: player.location.z}); - landing_balloons.teleport({x: player.location.x, y: 1000, z: player.location.z}); + player.teleport({ x: player.location.x, y: 1000, z: player.location.z }); + landing_balloons.teleport({ x: player.location.x, y: 1000, z: player.location.z }); landing_balloons.getComponent("minecraft:rideable").addRider(player); player.camera.setCamera("minecraft:follow_orbit", { radius: 20 }); - - player.removeTag("ableToOxygen") + player.removeTag("ableToOxygen"); let is_load = load; let camera = player.getRotation(); let t = 0; let landing_balloons_flight = system.runInterval(() => { - if(is_load){ + if (is_load) { let new_camera = player.getRotation(); - if(new_camera.x != camera.x || new_camera.y != camera.y) is_load = false + if (new_camera.x != camera.x || new_camera.y != camera.y) is_load = false; landing_balloons.triggerEvent(group); - landing_balloons.nameTag = '§f§u§e§l§_§c§h§e§s§t§' + rocket_nametags[size] + landing_balloons.nameTag = '§f§u§e§l§_§c§h§e§s§t§' + rocket_nametags[size]; return; } - if(!player || !player.isValid){ + if (!player || !player.isValid) { system.clearRun(landing_balloons_flight); return; } - if(!landing_balloons || !landing_balloons.isValid){ + if (!landing_balloons || !landing_balloons.isValid) { dismount(player); system.clearRun(landing_balloons_flight); return; } t++; - if(t < 40) return; + if (t < 40) return; rotation_pitch += rotation_pitch_speed; rotation_yaw += rotation_yaw_speed; - rotation_pitch = (rotation_pitch > 20) ? 20 : (rotation_pitch < -20)? -20: rotation_pitch; - rotation_yaw = (rotation_yaw > 360)? 0: (rotation_yaw < 0)? 360: rotation_yaw; + rotation_pitch = (rotation_pitch > 20) ? 20 : (rotation_pitch < -20) ? -20 : rotation_pitch; + rotation_yaw = (rotation_yaw > 360) ? 0 : (rotation_yaw < 0) ? 360 : rotation_yaw; - if(ground_hits === 0 && ground_tick === 0) motion.y = -landing_balloons.location.y / 50; - else if(ground_hits < 14 && ground_tick === 0){ + if (ground_hits === 0 && ground_tick === 0) motion.y = -landing_balloons.location.y / 50; + else if (ground_hits < 14 && ground_tick === 0) { motion.y *= 0.95; motion.y -= 0.08; } - if(landing_balloons.location.y < 500 && landing_balloons.getVelocity().y == 0){ + if (landing_balloons.location.y < 500 && landing_balloons.getVelocity().y == 0) { ground_tick++; } - if(ground_tick == 2){ + if (ground_tick == 2) { ground_tick = 0; ground_hits++; - if(ground_hits >= 14){ + if (ground_hits >= 14) { player.inputPermissions.setPermissionCategory(2, true); landing_balloons.clearVelocity(); player.addTag("ableToOxygen"); player.addTag("in_space"); dismount(player); - landing_balloons.getComponent("minecraft:rideable").ejectRider(player) - landing_balloons.triggerEvent("cosmos:rideable_false") - save_dynamic_object(landing_balloons, {fuel: data.fuel}, "vehicle_data") - set_items_to_vehicle(landing_balloons, size, items_to_set, data.typeId) - - landing_balloons.triggerEvent("cosmos:lander_gravity_enable") + landing_balloons.getComponent("minecraft:rideable").ejectRider(player); + landing_balloons.triggerEvent("cosmos:rideable_false"); + save_dynamic_object(landing_balloons, { fuel: data.fuel }, "vehicle_data"); + set_items_to_vehicle(landing_balloons, size, items_to_set, data.typeId); + + landing_balloons.triggerEvent("cosmos:lander_gravity_enable"); system.clearRun(landing_balloons_flight); return; - } - else{ + } else { motion = get_motion_after_ground_hit(motion, ground_hits); } } landing_balloons.setProperty("cosmos:rotation_x", rotation_pitch); landing_balloons.setProperty("cosmos:rotation_y", rotation_yaw); landing_balloons.clearVelocity(); - landing_balloons.applyImpulse({x: motion.x, y: motion.y, z: motion.z}); - + landing_balloons.applyImpulse({ x: motion.x, y: motion.y, z: motion.z }); }); } \ No newline at end of file diff --git a/BP/scripts/planets/dimensions/Moon.js b/BP/scripts/planets/dimensions/Moon.js index b53eb70d..0063126e 100644 --- a/BP/scripts/planets/dimensions/Moon.js +++ b/BP/scripts/planets/dimensions/Moon.js @@ -1,137 +1,158 @@ import { world, system } from "@minecraft/server"; -import { Planet } from "../GalacticraftPlanets"; -import { dismount, rocket_nametags } from "../../api/player/liftoff"; -import { set_items_to_vehicle } from "../../core/vehicles/Vehicle"; -import { save_dynamic_object } from "../../api/utils"; -import { saved_rocket_items } from "../../api/player/liftoff"; - -export class Moon extends Planet{ - constructor(){ +import { Planet } from "../GalacticraftPlanets.js"; +import { dismount, rocket_nametags } from "../../api/player/liftoff.js"; +import { set_items_to_vehicle } from "../../core/vehicles/Vehicle.js"; +import { save_dynamic_object } from "../../api/utils.js"; +import { saved_rocket_items } from "../../api/player/liftoff.js"; + +export class Moon extends Planet { + constructor() { super(); this._type = "moon"; - this._range = { start: { x: -100000, z: 50000 }, end: { x: -50000, z: 100000 } }; + this._dimensionId = "cosmos:moon"; + this._range = { start: { x: -30000000, z: -30000000 }, end: { x: 30000000, z: 30000000 } }; this._gravity = 1.62; - this._center = {x: 75000, z: 75000}; - this._time = {length: 192000, day: 96000}; + this._center = { x: 0, z: 0 }; + this._time = { length: 192000, day: 96000 }; this._fuelMultiplier = 0.7; this._solarEnergyMultiplier = 1.4; } - launching(player, data, loaded = false){ - player.runCommand("fog @s remove mars") - if(loaded){ moon_lander(player, data); return;} - let loc = { x: this._center.x + (Math.random() * 20), y: 260, z: this._center.z + (Math.random() * 20) }; - + launching(player, data, loaded = false) { + try { + player.runCommand("fog @s remove mars"); + } catch (e) {} + if (loaded) { + moon_lander(player, data); + return; + } + + const targetDim = world.getDimension("cosmos:moon"); + const loc = { + x: Math.round(Math.random() * 20 - 10) + 0.5, + y: 260, + z: Math.round(Math.random() * 20 - 10) + 0.5 + }; + player.setDynamicProperty('dimension', JSON.stringify(data)); - if(player.dimension.id == "minecraft:the_end"){ - player.teleport({x: 0, y: 500, z: 0}, {dimension: world.getDimension("overworld")}) + + if (player.dimension.id === "cosmos:moon") { + player.teleport(loc, { dimension: targetDim }); + system.runTimeout(() => { + moon_lander(player, data); + }, 5); return; } - player.teleport(loc, { dimension: world.getDimension("the_end")}) + + player.teleport(loc, { dimension: targetDim }); } } -function lander_rotation(player, lander){ + +function lander_rotation(player, lander) { let final_rotation_x = lander.getProperty("cosmos:rotation_x"); let final_rotation_y = lander.getProperty("cosmos:rotation_y"); - + let input = player.inputInfo.getMovementVector(); - input = {x: Math.round(input.x), y: Math.round(input.y)} + input = { x: Math.round(input.x), y: Math.round(input.y) }; final_rotation_x = Math.min(Math.max(final_rotation_x + (input.y * 2), -45), 45); final_rotation_y = final_rotation_y + (input.x * 2); - final_rotation_y = (final_rotation_y > 360)? 2: - (final_rotation_y < 0)? 358: - final_rotation_y; - return [final_rotation_x, final_rotation_y] + final_rotation_y = (final_rotation_y > 360) ? 2 : + (final_rotation_y < 0) ? 358 : + final_rotation_y; + return [final_rotation_x, final_rotation_y]; } -function moon_lander(player, data, load = true){ + +function moon_lander(player, data, load = true) { let speed = 0; player.inputPermissions.setPermissionCategory(2, false); player.inputPermissions.setPermissionCategory(6, false); player.setProperty("cosmos:rotation_x", 90); let items_to_set = saved_rocket_items.get(data.id); - saved_rocket_items.delete(data.id) - let size = data.size - 2 + saved_rocket_items.delete(data.id); + let size = data.size - 2; let group = 'cosmos:inv' + size; - let lander = player.dimension.spawnEntity("cosmos:lander", {x: player.location.x, y: 250, z: player.location.z}); - player.teleport({x: player.location.x, y: 1000, z: player.location.z}); + let lander = player.dimension.spawnEntity("cosmos:lander", { x: player.location.x, y: 250, z: player.location.z }); + player.teleport({ x: player.location.x, y: 1000, z: player.location.z }); lander.triggerEvent("cosmos:lander_gravity_disable"); - lander.teleport({x: player.location.x, y: 1000, z: player.location.z}); + lander.teleport({ x: player.location.x, y: 1000, z: player.location.z }); lander.getComponent("minecraft:rideable").addRider(player); player.camera.setCamera("minecraft:follow_orbit", { radius: 20 }); player.setDynamicProperty("dimension", undefined); - player.removeTag("ableToOxygen") + player.removeTag("ableToOxygen"); let is_load = load; let camera = player.getRotation(); let lander_flight = system.runInterval(() => { - if(is_load){ + if (is_load) { let new_camera = player.getRotation(); - if(new_camera.x != camera.x || new_camera.y != camera.y) is_load = false + if (new_camera.x != camera.x || new_camera.y != camera.y) is_load = false; lander.triggerEvent(group); - lander.nameTag = '§f§u§e§l§_§c§h§e§s§t§' + rocket_nametags[size] + lander.nameTag = '§f§u§e§l§_§c§h§e§s§t§' + rocket_nametags[size]; return; } - if(!player || !player.isValid){ + if (!player || !player.isValid) { system.clearRun(lander_flight); return; } - if(!lander || !lander.isValid){ + if (!lander || !lander.isValid) { dismount(player); system.clearRun(lander_flight); return; } - if(player.inputInfo.getButtonState("Jump") == "Pressed"){ + if (player.inputInfo.getButtonState("Jump") == "Pressed") { speed = Math.min(speed + 0.03, lander.location.y < 115 ? -0.15 : -1.0); - }else{ + } else { speed = Math.min(speed - 0.022, -1.0); } speed -= 0.008; - let translatedSpeed = {"rawtext": [ - {"translate": "gui.lander.velocity"}, - {"text": ": "}, - {"text": `${(Math.round(speed * 1000)/100)}`}, - {"text": " "}, - {"translate": "gui.lander.velocityu"} - ]} - player.onScreenDisplay.setTitle(" ", {fadeInDuration: 0, fadeOutDuration: 0, stayDuration: 2, subtitle: translatedSpeed}) - - let rotation = lander_rotation(player, lander) - lander.setProperty("cosmos:rotation_x", rotation[0]) - lander.setProperty("cosmos:rotation_y", rotation[1]) - - let motY = Math.sin(rotation[0]/57.2957795147); - let motX = Math.cos(rotation[1]/57.2957795147) * motY; - let motZ = Math.sin(rotation[1]/57.2957795147) * motY; + let translatedSpeed = { + "rawtext": [ + { "translate": "gui.lander.velocity" }, + { "text": ": " }, + { "text": `${(Math.round(speed * 1000) / 100)}` }, + { "text": " " }, + { "translate": "gui.lander.velocityu" } + ] + }; + player.onScreenDisplay.setTitle(" ", { fadeInDuration: 0, fadeOutDuration: 0, stayDuration: 2, subtitle: translatedSpeed }); + + let rotation = lander_rotation(player, lander); + lander.setProperty("cosmos:rotation_x", rotation[0]); + lander.setProperty("cosmos:rotation_y", rotation[1]); + + let motY = Math.sin(rotation[0] / 57.2957795147); + let motX = Math.cos(rotation[1] / 57.2957795147) * motY; + let motZ = Math.sin(rotation[1] / 57.2957795147) * motY; let speedX = motX / 2.0; let speedZ = motZ / 2.0; lander.clearVelocity(); - lander.applyImpulse({x: speedX, y: speed, z: speedZ}) - if(lander.location.y < 500 && lander.getVelocity().y === 0){ - if(Math.abs(speed) > 2){ + lander.applyImpulse({ x: speedX, y: speed, z: speedZ }); + if (lander.location.y < 500 && lander.getVelocity().y === 0) { + if (Math.abs(speed) > 2) { player.addTag("ableToOxygen"); player.addTag("in_space"); dismount(player); - lander.setProperty("cosmos:rotation_x", 0) + lander.setProperty("cosmos:rotation_x", 0); - lander.dimension.createExplosion(lander.location, 10, {causesFire: false, breaksBlocks: true}); + lander.dimension.createExplosion(lander.location, 10, { causesFire: false, breaksBlocks: true }); lander.remove(); system.clearRun(lander_flight); - }else{ - lander.setProperty("cosmos:rotation_x", 0) + } else { + lander.setProperty("cosmos:rotation_x", 0); player.inputPermissions.setPermissionCategory(2, true); player.addTag("ableToOxygen"); player.addTag("in_space"); dismount(player); - lander.getComponent("minecraft:rideable").ejectRider(player) - lander.triggerEvent("cosmos:rideable_false") + lander.getComponent("minecraft:rideable").ejectRider(player); + lander.triggerEvent("cosmos:rideable_false"); - save_dynamic_object(lander, {fuel: data.fuel}, "vehicle_data") - set_items_to_vehicle(lander, size, items_to_set, data.typeId) + save_dynamic_object(lander, { fuel: data.fuel }, "vehicle_data"); + set_items_to_vehicle(lander, size, items_to_set, data.typeId); - lander.triggerEvent("cosmos:lander_gravity_enable") + lander.triggerEvent("cosmos:lander_gravity_enable"); system.clearRun(lander_flight); } } diff --git a/BP/scripts/planets/dimensions/Overworld.js b/BP/scripts/planets/dimensions/Overworld.js index 7a6b04c1..43f1ae13 100644 --- a/BP/scripts/planets/dimensions/Overworld.js +++ b/BP/scripts/planets/dimensions/Overworld.js @@ -29,7 +29,6 @@ export function return_to_earth(player, player_data, should_place_parachest = tr let player_not_on_ground = true; let parachest_was_placed = true; - let overworld = world.getDimension("overworld"); const space_gear = JSON.parse(player.getDynamicProperty("space_gear") ?? '{}') @@ -50,15 +49,15 @@ export function return_to_earth(player, player_data, should_place_parachest = tr parachest.setProperty("cosmos:parachute", parachute_color ?? 11); parachest.addEffect("slow_falling", 9999, {showParticles: false, amplifier: 3}) } - + player_not_on_ground = true; let player_falling = system.runInterval(() => { - if(player_not_on_ground && player.getVelocity().y >= 0 && player.location.y < 254){ + if(player_not_on_ground && player.getVelocity().y >= 0 && player.location.y < 250){ player.removeEffect("slow_falling"); player.setProperty("cosmos:parachute", 16); player_not_on_ground = false; if(!parachest) system.clearRun(player_falling) } - if(parachest && parachest.isValid && ((parachest.getVelocity().y >= 0 && parachest.location.y < 250) || parachest.location.y < -64) && !parachest_was_placed){ + if(parachest && parachest.isValid && ((parachest.getVelocity().y >= 0 && parachest.location.y < 250) || parachest.location.y < -64)){ system.runTimeout(() => { let parachest_loc = parachest.location; parachest_loc.y = Math.max(parachest_loc.y, -64) @@ -71,10 +70,8 @@ export function return_to_earth(player, player_data, should_place_parachest = tr saved_rocket_items.delete(player_data.id); }, 5); }, 10); - parachest_was_placed = true; - if(!player_not_on_ground) system.clearRun(player_falling); + system.clearRun(player_falling); } - if(parachest_was_placed && !player_not_on_ground) system.clearRun(player_falling); }); } diff --git a/BP/scripts/planets/dimensions/SpaceStations.js b/BP/scripts/planets/dimensions/SpaceStations.js index 77860fa0..1a8ec59b 100644 --- a/BP/scripts/planets/dimensions/SpaceStations.js +++ b/BP/scripts/planets/dimensions/SpaceStations.js @@ -1,42 +1,45 @@ import { world, system } from "@minecraft/server"; -import { Planet } from "../../planets/GalacticraftPlanets"; -import { place_parachest } from "../../core/machines/blocks/Parachest"; -import { set_items_to_vehicle } from "../../core/vehicles/Vehicle"; -import { saved_rocket_items } from "../../api/player/liftoff"; +import { Planet } from "../GalacticraftPlanets.js"; +import { place_parachest } from "../../core/machines/blocks/Parachest.js"; +import { set_items_to_vehicle } from "../../core/vehicles/Vehicle.js"; +import { saved_rocket_items } from "../../api/player/liftoff.js"; -export class SpaceStations extends Planet{ - constructor(){ +export class SpaceStations extends Planet { + constructor() { super(); this._type = "stations"; - this._range = { start: { x: 50000, z: -100000 }, end: { x: 100000, z: -50000 } }, + this._dimensionId = "cosmos:space_stations"; + this._range = { start: { x: -30000000, z: -30000000 }, end: { x: 30000000, z: 30000000 } }; this._gravity = 0.0; - this._center = {x: 0, z: 0}; - this._time = {length: 1, day: 1}; + this._center = { x: 0, z: 0 }; + this._time = { length: 1, day: 1 }; this._fuelMultiplier = 0.9; this._solarEnergyMultiplier = 2; } - launching(player, data, loaded = false){ + launching(player, data, loaded = false) { let stations_dimension = world.getDimension("cosmos:space_stations"); - let {x, y, z} = data.station.location; - if(loaded){ - if(data.station.is_generated !== undefined && !data.station.is_generated) stations_dimension.placeFeature("cosmos:station_feature", data.station.location); + let { x, y, z } = data.station.location; + if (loaded) { + if (data.station.is_generated !== undefined && !data.station.is_generated) { + stations_dimension.placeFeature("cosmos:station_feature", data.station.location); + } - let parachest = stations_dimension.spawnEntity("cosmos:parachute_chest_entity", {x: x - 11.5, y: 255, z: z - 4.5}) + let parachest = stations_dimension.spawnEntity("cosmos:parachute_chest_entity", { x: x - 11.5, y: 255, z: z - 4.5 }); parachest.setProperty("cosmos:parachute", 11); - parachest.addEffect("slow_falling", 9999, {showParticles: false, amplifier: 3}) + parachest.addEffect("slow_falling", 9999, { showParticles: false, amplifier: 3 }); let parachest_falling = system.runInterval(() => { - if(parachest && parachest.isValid && ((parachest.getVelocity().y >= 0 && parachest.location.y < 250) || parachest.location.y < -64)){ + if (parachest && parachest.isValid && ((parachest.getVelocity().y >= 0 && parachest.location.y < 250) || parachest.location.y < -64)) { system.runTimeout(() => { let parachest_loc = parachest.location; - parachest_loc.y = Math.max(parachest_loc.y, -64) + parachest_loc.y = Math.max(parachest_loc.y, -64); let dimension = parachest.dimension; parachest.remove(); - let parachest_block = place_parachest(data.fuel, dimension, parachest_loc, data.size - 2, 11) - + let parachest_block = place_parachest(data.fuel, dimension, parachest_loc, data.size - 2, 11); + system.runTimeout(() => { - set_items_to_vehicle(parachest_block, data.size - 2, saved_rocket_items.get(data.id), data.typeId); - saved_rocket_items.delete(data.id); + set_items_to_vehicle(parachest_block, data.size - 2, saved_rocket_items.get(data.id), data.typeId); + saved_rocket_items.delete(data.id); }, 5); }, 10); system.clearRun(parachest_falling); @@ -47,10 +50,14 @@ export class SpaceStations extends Planet{ } player.setDynamicProperty('dimension', JSON.stringify(data)); - if(player.dimension.id == "cosmos:space_stations"){ - player.teleport({x: 0, y: 500, z: 0}, {dimension: world.getDimension("overworld")}) + const targetLoc = { x: x - 3, y: 72, z: z - 3 }; + if (player.dimension.id === "cosmos:space_stations") { + player.teleport(targetLoc, { dimension: stations_dimension }); + system.runTimeout(() => { + this.launching(player, data, true); + }, 5); return; } - player.teleport({x: x - 3, y: 72, z: z - 3}, {dimension: stations_dimension}) + player.teleport(targetLoc, { dimension: stations_dimension }); } } \ No newline at end of file diff --git a/BP/scripts/planets/dimensions/Venus.js b/BP/scripts/planets/dimensions/Venus.js index d606811a..8a07d872 100644 --- a/BP/scripts/planets/dimensions/Venus.js +++ b/BP/scripts/planets/dimensions/Venus.js @@ -1,14 +1,16 @@ import { world, system } from "@minecraft/server"; -import { Planet } from "../../planets/GalacticraftPlanets"; +import { Planet } from "../GalacticraftPlanets.js"; -export class Venus extends Planet{ - constructor(){ +export class Venus extends Planet { + constructor() { super(); this._type = "venus"; - this._range = { start: { x: 50000, z: -100000 }, end: { x: 100000, z: -50000 } }, + this._dimensionId = "cosmos:venus"; + this._range = { start: { x: -30000000, z: -30000000 }, end: { x: 30000000, z: 30000000 } }; this._gravity = 8.87; + this._center = { x: 0, z: 0 }; this._fuelMultiplier = 0.9; this._solarEnergyMultiplier = 2.37; } - launching(){} + launching() {} } \ No newline at end of file diff --git a/BP/scripts/planets/fog_manager.js b/BP/scripts/planets/fog_manager.js new file mode 100644 index 00000000..fe90f891 --- /dev/null +++ b/BP/scripts/planets/fog_manager.js @@ -0,0 +1,115 @@ +/** + * Cosmos Adventure Dimension-Aware Fog Manager + * Dynamically pushes and removes planetary atmospheric fogs based on player dimension. + * Overworld, Moon, Nether, and The End remain clear; Mars maintains its Martian atmosphere. + * Adapted from the Misty Forest fog management engine. + */ +import { world, system } from "@minecraft/server"; +import { COSMOS_DIMENSIONS } from "./dimensions.js"; + +export const MARS_FOG_ID = "cosmos:mars_fog"; +export const MARS_FOG_TAG = "mars"; + +export const activeMarsFogPlayers = new Set(); + +/** + * Applies Mars atmospheric fog to a player. + * @param {import("@minecraft/server").Player} player + */ +export function applyMarsFog(player) { + if (!player) return; + + try { + if (player.fogSettings?.push) { + player.fogSettings.push(MARS_FOG_ID, MARS_FOG_TAG); + activeMarsFogPlayers.add(player.id); + return; + } + } catch (e) {} + + try { + if (typeof player.runCommand === "function") { + player.runCommand(`fog @s push ${MARS_FOG_ID} ${MARS_FOG_TAG}`); + activeMarsFogPlayers.add(player.id); + } + } catch (e) {} +} + +/** + * Removes Mars atmospheric fog from a player. + * @param {import("@minecraft/server").Player} player + */ +export function removeMarsFog(player) { + if (!player) return; + + try { + if (player.fogSettings?.remove) { + player.fogSettings.remove(MARS_FOG_TAG); + activeMarsFogPlayers.delete(player.id); + return; + } + } catch (e) {} + + try { + if (typeof player.runCommand === "function") { + player.runCommand(`fog @s remove ${MARS_FOG_TAG}`); + activeMarsFogPlayers.delete(player.id); + } + } catch (e) {} +} + +/** + * Synchronizes a player's fog based strictly on their current dimension. + * @param {import("@minecraft/server").Player} player + */ +export function syncPlayerFog(player) { + if (!player || !player.dimension) return; + + const isInsideMars = player.dimension.id === COSMOS_DIMENSIONS.MARS; + const hasFog = activeMarsFogPlayers.has(player.id); + + if (isInsideMars) { + if (!hasFog) { + applyMarsFog(player); + } + } else { + removeMarsFog(player); + } +} + +let isFogManagerStarted = false; + +/** + * Starts the dimension-aware script fog management lifecycle. + */ +export function startFogManager() { + if (isFogManagerStarted) return; + isFogManagerStarted = true; + + try { + world.afterEvents.playerDimensionChange?.subscribe?.((event) => { + syncPlayerFog(event.player); + }); + } catch (e) {} + + try { + world.afterEvents.playerSpawn?.subscribe?.((event) => { + syncPlayerFog(event.player); + }); + } catch (e) {} + + try { + world.afterEvents.playerLeave?.subscribe?.((event) => { + activeMarsFogPlayers.delete(event.playerId); + }); + } catch (e) {} + + // Periodic sweep every 20 ticks (1 second) to ensure zero fog desync + system.runInterval(() => { + try { + for (const player of world.getAllPlayers()) { + syncPlayerFog(player); + } + } catch (e) {} + }, 20); +} diff --git a/BP/scripts/planets/gravity.js b/BP/scripts/planets/gravity.js index 7200b1ca..cbf675f4 100644 --- a/BP/scripts/planets/gravity.js +++ b/BP/scripts/planets/gravity.js @@ -119,9 +119,16 @@ world.afterEvents.entitySpawn.subscribe(data => { if (!GravityEntities.includes(data.entity)) GravityEntities.push(data.entity) }) +const SPACE_DIMENSIONS = ['cosmos:moon', 'cosmos:mars', 'cosmos:venus', 'cosmos:asteroids', 'cosmos:space_stations']; + system.runInterval(() => { - for (let dimension of ['the_end'].map(id => world.getDimension(id))) { - GravityEntities = GravityEntities.concat(dimension.getEntities().filter(entity => !GravityEntities.includes(entity))) + for (let dimId of SPACE_DIMENSIONS) { + try { + const dimension = world.getDimension(dimId); + if (dimension) { + GravityEntities = GravityEntities.concat(dimension.getEntities().filter(entity => !GravityEntities.includes(entity))); + } + } catch (e) {} } }, 10) @@ -200,46 +207,56 @@ export function player_gravity(){ player.fallingVelocity = player.fallVelocity/2 } - GravityEntities.forEach((entity, index) => { - if (!entity.isValid || entity.dimension.id != 'minecraft:the_end') return GravityEntities.splice(index, 1); - if(entity.knockback) return; - setGravity(entity) + for (let index = GravityEntities.length - 1; index >= 0; index--) { + const entity = GravityEntities[index]; + if (!entity.isValid || !SPACE_DIMENSIONS.includes(entity.dimension.id)) { + GravityEntities.splice(index, 1); + continue; + } + if (entity.knockback) continue; + setGravity(entity); if (entity.isInWater) entity.fallingVelocity = 0; + if (entity.isOnGround) { + let velocity = entity.fallingVelocity || 0; + let damage = (velocity * 2) ** 1.7; + entity.fallingVelocity = 0; + if (damage >= 1 && !entity.getEffect('slow_falling')) entity.applyDamage(damage, { cause: 'fall' }); + } - if (entity.typeId == 'minecraft:player') return; + if (entity.typeId == 'minecraft:player') continue; - const gravity = Gravity.of(entity) - if (gravity.value == 9.8) return; + const gravity = Gravity.of(entity); + if (gravity.value == 9.8) continue; - if (entity.isOnGround || entity.isSwimming || entity.isInWater || entity.getComponent('can_fly')) return; + if (entity.isOnGround || entity.isSwimming || entity.isInWater || entity.getComponent('can_fly')) continue; if (entity.getComponent('projectile') == undefined) { - entity.applyImpulse({ x: 0, z: 0, y: (9.8 - gravity.value)/130/(EntityGravityMod[entity.typeId] || 1) }) + entity.applyImpulse({ x: 0, z: 0, y: (9.8 - gravity.value)/130/(EntityGravityMod[entity.typeId] || 1) }); let ray = entity.dimension.getBlockFromRay(entity.location, { x: 0, y: -1, z: 0 - }) - if (ray == undefined) return; + }); + if (ray == undefined) continue; - - let distance = entity.location.y - sumObjects(ray.block, ray.faceLocation).y + let distance = entity.location.y - sumObjects(ray.block, ray.faceLocation).y; entity.distance = distance; + if (distance < -entity.getVelocity().y*2) entity.addEffect('slow_falling', 5, { amplifier: 0, showParticles: false }); - entity.fallingVelocity = -entity.getVelocity().y + entity.fallingVelocity = -entity.getVelocity().y; } else { - let projectile = entity.getComponent('projectile') - let oldGravity = entity.getDynamicProperty('sert:defaultGravity') + let projectile = entity.getComponent('projectile'); + let oldGravity = entity.getDynamicProperty('sert:defaultGravity'); if (oldGravity == undefined) { - entity.setDynamicProperty('sert:defaultGravity', projectile.gravity) - oldGravity = projectile.gravity + entity.setDynamicProperty('sert:defaultGravity', projectile.gravity); + oldGravity = projectile.gravity; } - projectile.gravity = oldGravity - (9.8 - gravity.value)*oldGravity/20 + projectile.gravity = oldGravity - (9.8 - gravity.value)*oldGravity/20; } - }) + } } const Geo = new class { diff --git a/BP/scripts/planets/korolev.js b/BP/scripts/planets/korolev.js new file mode 100644 index 00000000..e7a4f198 --- /dev/null +++ b/BP/scripts/planets/korolev.js @@ -0,0 +1,307 @@ +/** + * Cosmos Adventure Korolev Interplanetary Warp & Dimension Navigator + * Provides the /korolev and /cosmos:korolev custom slash commands and + * interactive ActionFormData planetary travel UI. + * Named in honor of Sergey Korolev, pioneer of the space age. + */ +import { world, system } from "@minecraft/server"; +import { ActionFormData } from "@minecraft/server-ui"; +import { COSMOS_DIMENSIONS, ALL_COSMOS_DIMENSION_IDS } from "./dimensions.js"; +import { ensureDimensionSpawn, SPAWN_COORDINATES } from "./platform.js"; +import { teleportPlayerSafely } from "./teleport.js"; + +export const KOROLEV_DESTINATIONS = { + "overworld": { + id: "minecraft:overworld", + name: "Overworld", + subtitle: "Terra / Earth Base", + badge: "Overworld" + }, + "earth": { + id: "minecraft:overworld", + name: "Overworld", + subtitle: "Terra / Earth Base", + badge: "Overworld" + }, + "moon": { + id: COSMOS_DIMENSIONS.MOON, + name: "Moon", + subtitle: "Lunar Surface & Low Gravity", + badge: "Moon" + }, + "luna": { + id: COSMOS_DIMENSIONS.MOON, + name: "Moon", + subtitle: "Lunar Surface & Low Gravity", + badge: "Moon" + }, + "mars": { + id: COSMOS_DIMENSIONS.MARS, + name: "Mars", + subtitle: "Aresian Red Planet & Caverns", + badge: "Mars" + }, + "venus": { + id: COSMOS_DIMENSIONS.VENUS, + name: "Venus", + subtitle: "Cytherean Atmospheric Outpost", + badge: "Venus" + }, + "asteroids": { + id: COSMOS_DIMENSIONS.ASTEROIDS, + name: "Asteroids", + subtitle: "Microgravity Kuiper / Asteroid Belt", + badge: "Asteroids" + }, + "asteroid": { + id: COSMOS_DIMENSIONS.ASTEROIDS, + name: "Asteroids", + subtitle: "Microgravity Kuiper / Asteroid Belt", + badge: "Asteroids" + }, + "stations": { + id: COSMOS_DIMENSIONS.SPACE_STATIONS, + name: "Space Station", + subtitle: "Orbital Research Laboratory", + badge: "Space Station" + }, + "space_stations": { + id: COSMOS_DIMENSIONS.SPACE_STATIONS, + name: "Space Station", + subtitle: "Orbital Research Laboratory", + badge: "Space Station" + }, + "station": { + id: COSMOS_DIMENSIONS.SPACE_STATIONS, + name: "Space Station", + subtitle: "Orbital Research Laboratory", + badge: "Space Station" + } +}; + +/** + * Returns formatted human-readable name of dimension. + * @param {string} dimId + * @returns {string} + */ +export function formatDimensionName(dimId) { + switch (dimId) { + case "minecraft:overworld": return "Overworld (Earth)"; + case "minecraft:nether": return "Nether"; + case "minecraft:the_end": return "The End"; + case "cosmos:moon": return "Moon"; + case "cosmos:mars": return "Mars"; + case "cosmos:venus": return "Venus"; + case "cosmos:asteroids": return "Asteroids Belt"; + case "cosmos:space_stations": return "Space Station"; + default: return dimId.replace("cosmos:", "").toUpperCase(); + } +} + +/** + * Displays the interactive Korolev Navigation ActionFormData modal. + * @param {import("@minecraft/server").Player} player + */ +export function showKorolevNavigator(player) { + if (!player) return; + + const currentDimId = player.dimension?.id || "minecraft:overworld"; + const currentDimName = formatDimensionName(currentDimId); + + const options = [ + { key: "overworld", label: "Overworld (Earth)\nSurface Biosphere" }, + { key: "moon", label: "Moon\nLow Gravity & Regolith" }, + { key: "mars", label: "Mars\nAtmosphere & Caverns" }, + { key: "venus", label: "Venus\nExtreme Heat & Pressure" }, + { key: "asteroids", label: "Asteroids\nMicrogravity Void Belt" }, + { key: "stations", label: "Space Station\nOrbital Research Outpost" } + ]; + + const form = new ActionFormData() + .title("KOROLEV NAVIGATOR") + .body(`Current Dimension: ${currentDimName}\nSelect target planetary body to initiate warp jump:`); + + for (const opt of options) { + form.button(opt.label); + } + + form.show(player).then((response) => { + if (response.canceled) return; + const selected = options[response.selection]; + if (selected) { + executeKorolevTeleport(player, selected.key); + } + }).catch(() => {}); +} + +/** + * Executes safe dimension teleportation to target planet with status damping and chunk prep. + * @param {import("@minecraft/server").Player} player + * @param {string} targetInput Destination keyword or dimension ID + * @returns {Promise} + */ +export async function executeKorolevTeleport(player, targetInput) { + if (!player) return false; + + if (!targetInput || typeof targetInput !== "string") { + showKorolevNavigator(player); + return true; + } + + const cleanInput = targetInput.trim().toLowerCase(); + const dest = KOROLEV_DESTINATIONS[cleanInput]; + + if (!dest) { + player.sendMessage(`[Korolev] Unknown planetary target: "${targetInput}".`); + player.sendMessage(`Valid destinations: overworld, moon, mars, venus, asteroids, stations.`); + try { + player.playSound("note.bass", { pitch: 0.8, volume: 1.0 }); + } catch (e) {} + return false; + } + + let targetDim; + try { + targetDim = world.getDimension(dest.id); + } catch (e) { + targetDim = null; + } + + if (!targetDim) { + player.sendMessage(`[Korolev] Dimension "${dest.id}" is currently unreachable.`); + return false; + } + + // Dismount player if riding + try { + const riding = player.getComponent?.("minecraft:riding"); + if (riding && riding.entityRidingOn) { + player.runCommand("dismount"); + } + } catch (e) {} + + player.sendMessage(`[Korolev] Calculating orbital vector to ${dest.name}...`); + + try { + const spawnCoords = await ensureDimensionSpawn(targetDim); + await teleportPlayerSafely(player, targetDim, spawnCoords); + + player.sendMessage(`[Korolev] Warp jump to ${dest.name} complete! Coordinates: ${Math.floor(spawnCoords.x)}, ${Math.floor(spawnCoords.y)}, ${Math.floor(spawnCoords.z)}`); + + try { + if (typeof player.onScreenDisplay?.setTitle === "function") { + player.onScreenDisplay.setTitle(dest.name.toUpperCase(), { + subtitle: dest.subtitle, + fadeInDuration: 10, + stayDuration: 40, + fadeOutDuration: 10 + }); + } + } catch (e) {} + + try { + player.playSound("portal.travel", { pitch: 1.2, volume: 1.0 }); + } catch (e) {} + + return true; + } catch (err) { + player.sendMessage(`[Korolev] Jump failure: ${err?.message || err}`); + return false; + } +} + +/** + * Registers all Korolev dimension navigation commands and enums. + * @param {import("@minecraft/server").CustomCommandRegistry} customCommandRegistry + */ +export function registerKorolev(customCommandRegistry) { + if (!customCommandRegistry) return; + + const enumValues = [ + "overworld", + "moon", + "mars", + "venus", + "asteroids", + "stations", + "space_stations", + "earth" + ]; + + try { + customCommandRegistry.registerEnum("cosmos:dimension_target", enumValues); + } catch (e) {} + + try { + customCommandRegistry.registerEnum("korolev:dimension_target", enumValues); + } catch (e) {} + + const commandHandler = (origin, ...rawArgs) => { + const player = origin.sourceEntity || origin.initiator; + if (!player || player.typeId !== "minecraft:player") return; + + const args = (rawArgs.length === 1 && Array.isArray(rawArgs[0])) ? rawArgs[0] : rawArgs; + let target = args[0]; + if (typeof target === "object" && target !== null && target.name) { + target = target.name; + } + + system.run(() => { + if (!target || typeof target !== "string" || target.trim().length === 0) { + showKorolevNavigator(player); + } else { + executeKorolevTeleport(player, target); + } + }); + }; + + // Primary command: cosmos:korolev + try { + customCommandRegistry.registerCommand({ + name: "cosmos:korolev", + description: "Korolev Interplanetary Warp: Teleport between dimensions or open the navigator menu.", + cheatsRequired: false, + permissionLevel: 0, + optionalParameters: [ + { type: "Enum", name: "cosmos:dimension_target" } + ] + }, commandHandler); + } catch (e) {} + + // Direct command aliases: korolev:teleport, korolev:tp, korolev:korolev + try { + customCommandRegistry.registerCommand({ + name: "korolev:teleport", + description: "Korolev Warp: Teleport to a planetary dimension.", + cheatsRequired: false, + permissionLevel: 0, + optionalParameters: [ + { type: "Enum", name: "korolev:dimension_target" } + ] + }, commandHandler); + } catch (e) {} + + try { + customCommandRegistry.registerCommand({ + name: "korolev:tp", + description: "Korolev Warp: Quick teleport to a planetary dimension.", + cheatsRequired: false, + permissionLevel: 0, + optionalParameters: [ + { type: "Enum", name: "korolev:dimension_target" } + ] + }, commandHandler); + } catch (e) {} + + try { + customCommandRegistry.registerCommand({ + name: "korolev:korolev", + description: "Korolev Interplanetary Warp.", + cheatsRequired: false, + permissionLevel: 0, + optionalParameters: [ + { type: "Enum", name: "korolev:dimension_target" } + ] + }, commandHandler); + } catch (e) {} +} diff --git a/BP/scripts/planets/platform.js b/BP/scripts/planets/platform.js new file mode 100644 index 00000000..b32282cf --- /dev/null +++ b/BP/scripts/planets/platform.js @@ -0,0 +1,224 @@ +/** + * Cosmos Adventure Safe Spawn Platform & Chunk Lifecycle + * Ensures chunks are loaded before block manipulation and cleans up ticking areas. + * Adapted from the Misty Forest safe spawn lifecycle. + */ +import { world, system, BlockPermutation } from "@minecraft/server"; +import { + generateChunk, + generateSpawnTerrain, + isChunkPhysicallyMissing, + markChunkGenerated, + PLANET_WORLDGEN_CONFIG +} from "./worldgen.js"; + +export { generateSpawnTerrain }; + +export const SPAWN_COORDINATES = { + "minecraft:overworld": { x: 0.5, y: 75, z: 0.5 }, + "cosmos:moon": { x: 0.5, y: 92, z: 0.5 }, + "cosmos:mars": { x: 0.5, y: 95, z: 0.5 }, + "cosmos:venus": { x: 0.5, y: 70, z: 0.5 }, + "cosmos:asteroids": { x: 0.5, y: 70, z: 0.5 }, + "cosmos:space_stations": { x: -3.5, y: 72, z: -3.5 } +}; + +const spawnPlatformBuilt = new Set(); +const activeSpawnPromises = new Map(); + +function resolvePermutation(typeId) { + try { + return BlockPermutation.resolve(typeId); + } catch { + return null; + } +} + +/** + * Builds a solid 5x5 platform at floorY and clears headroom Y=floorY+1..floorY+4. + * @param {import("@minecraft/server").Dimension} dimension + * @param {number} cx Center X + * @param {number} floorY Floor level + * @param {number} cz Center Z + * @param {string} [blockType="minecraft:smooth_stone"] + */ +export function buildLandingPlatform(dimension, cx = 0, floorY = 65, cz = 0, blockType = "minecraft:smooth_stone") { + if (!dimension) return; + + const floorPerm = resolvePermutation(blockType) || resolvePermutation("minecraft:stone"); + const airPerm = resolvePermutation("minecraft:air"); + + for (let dx = -2; dx <= 2; dx++) { + for (let dz = -2; dz <= 2; dz++) { + const bx = cx + dx; + const bz = cz + dz; + + if (floorPerm) { + try { + const floorBlock = dimension.getBlock({ x: bx, y: floorY, z: bz }); + if (floorBlock && floorBlock.typeId === "minecraft:air") { + floorBlock.setPermutation(floorPerm); + } + } catch (e) {} + } + + if (airPerm) { + for (let y = floorY + 1; y <= floorY + 4; y++) { + try { + const airBlock = dimension.getBlock({ x: bx, y: y, z: bz }); + if (airBlock && airBlock.typeId !== "minecraft:air") { + airBlock.setPermutation(airPerm); + } + } catch (e) {} + } + } + } + } +} + +/** + * Allocates temporary ticking area, awaits chunk readiness, pre-generates 5x5 chunk terrain, + * finds true surface elevation, builds safe spawn platform, + * and guarantees ticking area removal with safety delay. + * @param {import("@minecraft/server").Dimension | string} dimension + * @returns {Promise<{ x: number, y: number, z: number }>} + */ +export async function ensureDimensionSpawn(dimension) { + const dim = typeof dimension === "string" ? world.getDimension(dimension) : dimension; + if (!dim) return { x: 0.5, y: 90, z: 0.5 }; + + const dimId = dim.id; + if (spawnPlatformBuilt.has(dimId)) { + return SPAWN_COORDINATES[dimId] || { x: 0.5, y: 90, z: 0.5 }; + } + if (activeSpawnPromises.has(dimId)) { + return activeSpawnPromises.get(dimId); + } + + if (dimId === "minecraft:overworld") { + let surfaceY = 75; + try { + if (typeof dim.getTopmostBlock === "function") { + const top = dim.getTopmostBlock({ x: 0, z: 0 }); + if (top && top.location && top.location.y > 0) { + surfaceY = top.location.y + 1; + } + } + } catch (e) {} + const coords = { x: 0.5, y: surfaceY, z: 0.5 }; + SPAWN_COORDINATES[dimId] = coords; + spawnPlatformBuilt.add(dimId); + return coords; + } + + if (dimId === "cosmos:space_stations") { + try { + dim.placeFeature("cosmos:station_feature", { x: 0, y: 65, z: 0 }); + } catch (e) {} + buildLandingPlatform(dim, -3, 71, -3, "minecraft:iron_block"); + const coords = { x: -3.5, y: 72, z: -3.5 }; + SPAWN_COORDINATES[dimId] = coords; + spawnPlatformBuilt.add(dimId); + return coords; + } + + if (dimId === "cosmos:venus" || dimId === "cosmos:asteroids") { + const floorBlock = dimId === "cosmos:venus" ? "minecraft:stone" : "minecraft:deepslate"; + buildLandingPlatform(dim, 0, 69, 0, floorBlock); + const coords = { x: 0.5, y: 70, z: 0.5 }; + SPAWN_COORDINATES[dimId] = coords; + spawnPlatformBuilt.add(dimId); + return coords; + } + + const promise = (async () => { + const cleanId = dimId.replace(/[^a-zA-Z0-9_]/g, "_"); + const areaId = `setup_${cleanId}_spawn`; + + // 1. Clean prior area if exists + try { + if (world.tickingAreaManager?.hasTickingArea?.(areaId)) { + world.tickingAreaManager.removeTickingArea(areaId); + } + } catch (e) {} + + // 2. Prepare 5x5 chunk ticking perimeter (-48..48, Y=0..160) + try { + if (world.tickingAreaManager?.createTickingArea) { + await world.tickingAreaManager.createTickingArea(areaId, { + dimension: dim, + from: { x: -48, y: 0, z: -48 }, + to: { x: 48, y: 160, z: 48 } + }); + } else if (typeof dim.runCommand === "function") { + try { + dim.runCommand(`tickingarea add circle 0 90 0 2 ${areaId}`); + } catch (e) {} + } + } catch (quotaErr) {} + + try { + // 3. Pre-generate surrounding 5x5 chunks (-2..2, -2..2) + generateSpawnTerrain(dim, 0, 0, 2); + + const config = PLANET_WORLDGEN_CONFIG[dimId]; + if (config && isChunkPhysicallyMissing(dim, 0, 0)) { + try { + const placed = dim.placeFeature(config.featureId, { x: 0, y: 0, z: 0 }); + if (placed) markChunkGenerated(dimId, 0, 0); + } catch (e) {} + } + + // 4. Determine true surface elevation at (0, 0) + let surfaceY = config?.surfaceFallbackY || 90; + try { + if (typeof dim.getTopmostBlock === "function") { + const top = dim.getTopmostBlock({ x: 0, z: 0 }); + if (top && top.location && top.location.y > 0) { + surfaceY = top.location.y + 1; + } + } + } catch (e) {} + + // Downward scan fallback if needed + if (surfaceY < 20 || surfaceY > 200) { + for (let y = 160; y >= 1; y--) { + try { + const b = dim.getBlock({ x: 0, y, z: 0 }); + if (b && b.typeId !== "minecraft:air") { + surfaceY = y + 1; + break; + } + } catch (e) {} + } + } + + const spawnCoords = { x: 0.5, y: surfaceY, z: 0.5 }; + SPAWN_COORDINATES[dimId] = spawnCoords; + + // 5. Build safe landing platform at true surface + const floorType = dimId === "cosmos:mars" ? "cosmos:mars_stone" : "cosmos:moon_rock"; + buildLandingPlatform(dim, 0, surfaceY - 1, 0, floorType); + spawnPlatformBuilt.add(dimId); + + return spawnCoords; + } finally { + // 6. Schedule ticking area removal with 60-tick safety buffer + system.runTimeout(() => { + try { + if (world.tickingAreaManager?.hasTickingArea?.(areaId)) { + world.tickingAreaManager.removeTickingArea(areaId); + } + } catch (e) {} + try { + dim.runCommand?.(`tickingarea remove ${areaId}`); + } catch (e) {} + }, 60); + + activeSpawnPromises.delete(dimId); + } + })(); + + activeSpawnPromises.set(dimId, promise); + return promise; +} diff --git a/BP/scripts/planets/teleport.js b/BP/scripts/planets/teleport.js new file mode 100644 index 00000000..c760a4fb --- /dev/null +++ b/BP/scripts/planets/teleport.js @@ -0,0 +1,170 @@ +/** + * Cosmos Adventure Safe Teleportation & Void Fall Recovery + * Manages chunk preparation ticking areas, status damping, and void boundary safety across planetary dimensions. + * Adapted from the Misty Forest safe teleportation engine. + */ +import { world, system } from "@minecraft/server"; +import { ALL_COSMOS_DIMENSION_IDS } from "./dimensions.js"; +import { SPAWN_COORDINATES } from "./platform.js"; +import { syncPlayerFog } from "./fog_manager.js"; + +export const activeTravelTimeouts = new Map(); + +/** + * Teleports a player safely by pre-allocating a temporary ticking area, + * damping kinematics with slow_falling and resistance, and scheduling ticking area release. + * @param {import("@minecraft/server").Player} player + * @param {string | import("@minecraft/server").Dimension} targetDimId + * @param {import("@minecraft/server").Vector3} targetLocation + */ +export async function teleportPlayerSafely(player, targetDimId, targetLocation) { + if (!player) return; + + const dimension = typeof targetDimId === "string" ? world.getDimension(targetDimId) : targetDimId; + if (!dimension) return; + + const cleanPlayerId = String(player.id).replace(/[^a-zA-Z0-9_]/g, "_"); + const areaId = `travel_${cleanPlayerId}`; + + if (activeTravelTimeouts.has(areaId)) { + try { + system.clearRun(activeTravelTimeouts.get(areaId)); + } catch (e) {} + activeTravelTimeouts.delete(areaId); + } + + try { + if (world.tickingAreaManager?.hasTickingArea?.(areaId)) { + world.tickingAreaManager.removeTickingArea(areaId); + } + } catch (e) {} + + const tx = Math.floor(targetLocation.x); + const ty = Math.floor(targetLocation.y); + const tz = Math.floor(targetLocation.z); + + try { + if (world.tickingAreaManager?.createTickingArea) { + await world.tickingAreaManager.createTickingArea(areaId, { + dimension, + from: { x: tx - 16, y: 0, z: tz - 16 }, + to: { x: tx + 16, y: 160, z: tz + 16 } + }); + } + } catch (areaErr) {} + + try { + if (typeof player.addEffect === "function") { + try { + player.addEffect("slow_falling", 60, { showParticles: false, amplifier: 0 }); + player.addEffect("resistance", 60, { showParticles: false, amplifier: 4 }); + } catch (e) {} + } + + try { + player.teleport(targetLocation, { dimension }); + } catch (teleportErr) { + try { + player.teleport(targetLocation); + } catch (e) {} + } + + try { + system.runTimeout(() => { + syncPlayerFog(player); + }, 5); + } catch (e) {} + + if (typeof player.playSound === "function") { + try { + player.playSound("portal.travel", { pitch: 1.2, volume: 1.0 }); + } catch (e) {} + } + } finally { + const timeoutId = system.runTimeout(() => { + activeTravelTimeouts.delete(areaId); + try { + if (world.tickingAreaManager?.hasTickingArea?.(areaId)) { + world.tickingAreaManager.removeTickingArea(areaId); + } + } catch (e) {} + }, 60); + activeTravelTimeouts.set(areaId, timeoutId); + } +} + +/** + * Checks if a player inside a planetary dimension has fallen below Y=0. + * If so, recovers the player back to safe surface coordinates with protective buffs. + * @param {import("@minecraft/server").Player} player + * @returns {boolean} True if recovery was performed + */ +export function checkAndRecoverVoidFall(player) { + if (!player || !player.dimension || !player.location) return false; + + try { + const dimId = player.dimension.id; + if (!ALL_COSMOS_DIMENSION_IDS.includes(dimId)) return false; + + // Space stations let players fall back to earth if below Y=10 + if (dimId === "cosmos:space_stations") return false; + + if (player.location.y < 0) { + try { + if (typeof player.addEffect === "function") { + player.addEffect("slow_falling", 60, { showParticles: false, amplifier: 0 }); + player.addEffect("resistance", 60, { showParticles: false, amplifier: 4 }); + } + + let recoverLoc = SPAWN_COORDINATES[dimId] || { x: 0.5, y: 92, z: 0.5 }; + try { + if (typeof player.dimension.getTopmostBlock === "function") { + const top = player.dimension.getTopmostBlock({ x: Math.floor(player.location.x), z: Math.floor(player.location.z) }); + if (top && top.location && top.location.y > 0) { + recoverLoc = { x: player.location.x, y: top.location.y + 1, z: player.location.z }; + } + } + } catch (e) {} + + player.teleport(recoverLoc, { dimension: player.dimension }); + + if (typeof player.playSound === "function") { + player.playSound("portal.travel", { pitch: 1.5, volume: 1.0 }); + } + + if (typeof player.onScreenDisplay?.setActionBar === "function") { + player.onScreenDisplay.setActionBar("[Cosmos] Void Boundary Recovery"); + } + + return true; + } catch (e) { + return false; + } + } + } catch (e) { + return false; + } + + return false; +} + +let isVoidLoopRunning = false; + +/** + * Starts continuous void fall monitoring for all players in Cosmos planetary dimensions. + * Runs every 10 ticks (0.5 seconds). + */ +export function startVoidRecoveryLoop() { + if (isVoidLoopRunning) return; + isVoidLoopRunning = true; + + return system.runInterval(() => { + try { + for (const player of world.getAllPlayers()) { + try { + checkAndRecoverVoidFall(player); + } catch (e) {} + } + } catch (e) {} + }, 10); +} diff --git a/BP/scripts/planets/worldgen.js b/BP/scripts/planets/worldgen.js new file mode 100644 index 00000000..90602b9d --- /dev/null +++ b/BP/scripts/planets/worldgen.js @@ -0,0 +1,451 @@ +/** + * Cosmos Adventure Infinite Procedural Chunk Generator + * Places native Molang chunk-scatter features around players across custom planetary dimensions. + * Migrated from the Misty Forest dynamic world generation engine. + * + * Features: + * - L1 In-Memory Cache + L2 Scoreboard Database for persistent chunk tracking + * - Ring-based proximity prioritization (Ring 0 -> Ring 1 -> Ring 2) + * - Immediate vision cone & movement velocity vector prioritization + * - Far-chunk queue eviction when transitioning chunk boundaries + * - Strict per-tick placement budget and 2.0ms execution time ceiling + * - Dimension-aware routing for Moon, Mars, and future bodies + */ +import { world, system } from "@minecraft/server"; +import { COSMOS_DIMENSIONS } from "./dimensions.js"; + +export const PLANET_WORLDGEN_CONFIG = { + [COSMOS_DIMENSIONS.MOON]: { + featureId: "cosmos:moon/chunk", + scoreboardObjective: "cos_moon_chk", + surfaceFallbackY: 90 + }, + [COSMOS_DIMENSIONS.MARS]: { + featureId: "cosmos:mars/chunk", + scoreboardObjective: "cos_mars_chk", + surfaceFallbackY: 93 + } +}; + +export const MAX_PLACEMENTS_PER_TICK = 2; +export const MAX_TICK_BUDGET_MS = 2.0; + +// L1 in-memory cache: Set of `${dimId}:${cx},${cz}` +export const generatedChunks = new Set(); + +/** + * Bitpacks two 32-bit chunk coordinates into a 64-bit compact hex key. + * @param {number} cx + * @param {number} cz + * @returns {string} + */ +export function packChunkCoords(cx, cz) { + const ux = BigInt.asUintN(32, BigInt(Math.floor(cx))); + const uz = BigInt.asUintN(32, BigInt(Math.floor(cz))); + return (ux | (uz << 32n)).toString(16); +} + +/** + * Retrieves or registers scoreboard objective for persistent chunk tracking across world reloads. + * @param {string} dimId + * @returns {import("@minecraft/server").ScoreboardObjective|null} + */ +export function getScoreboardObjective(dimId) { + try { + if (!world || !world.scoreboard) return null; + const config = PLANET_WORLDGEN_CONFIG[dimId]; + if (!config || !config.scoreboardObjective) return null; + + const objName = config.scoreboardObjective; + let obj = world.scoreboard.getObjective(objName); + if (!obj) { + obj = world.scoreboard.addObjective(objName, objName); + } + return obj; + } catch { + return null; + } +} + +/** + * Checks whether a chunk is generated (L1 memory cache or persistent scoreboard). + * @param {string} dimId + * @param {number} cx + * @param {number} cz + * @returns {boolean} + */ +export function isChunkGenerated(dimId, cx, cz) { + const memKey = `${dimId}:${cx},${cz}`; + if (generatedChunks.has(memKey)) return true; + + const obj = getScoreboardObjective(dimId); + if (!obj) return false; + + const hexKey = packChunkCoords(cx, cz); + try { + if (typeof obj.hasParticipant === "function" && obj.hasParticipant(hexKey)) { + generatedChunks.add(memKey); + return true; + } + if (typeof obj.getScore === "function") { + const score = obj.getScore(hexKey); + if (score !== undefined) { + generatedChunks.add(memKey); + return true; + } + } + } catch { + return false; + } + return false; +} + +/** + * Marks chunk as generated in both L1 cache and persistent scoreboard database. + * @param {string} dimId + * @param {number} cx + * @param {number} cz + */ +export function markChunkGenerated(dimId, cx, cz) { + const memKey = `${dimId}:${cx},${cz}`; + generatedChunks.add(memKey); + + const obj = getScoreboardObjective(dimId); + if (!obj) return; + + const hexKey = packChunkCoords(cx, cz); + try { + obj.setScore(hexKey, 1); + } catch {} +} + +/** + * Checks whether a chunk is physically missing terrain/bedrock at y=0. + * @param {import("@minecraft/server").Dimension} dimension + * @param {number} cx + * @param {number} cz + * @returns {boolean} True if bedrock is missing at y=0 + */ +export function isChunkPhysicallyMissing(dimension, cx, cz) { + if (!dimension || typeof dimension.getBlock !== "function") return false; + try { + const b = dimension.getBlock({ x: cx * 16 + 8, y: 0, z: cz * 16 + 8 }); + return b !== undefined && b !== null && b.typeId === "minecraft:air"; + } catch { + return false; + } +} + +/** + * Generates a single chunk at (cx, cz) using native feature dispatch. + * Automatically self-heals chunks physically missing terrain. + * @param {import("@minecraft/server").Dimension} dimension + * @param {number} cx + * @param {number} cz + * @returns {boolean} True if feature was successfully placed + */ +export function generateChunk(dimension, cx, cz) { + if (!dimension) return false; + const dimId = dimension.id; + const config = PLANET_WORLDGEN_CONFIG[dimId]; + if (!config) return false; + + if (isChunkGenerated(dimId, cx, cz)) { + if (!isChunkPhysicallyMissing(dimension, cx, cz)) { + return false; + } + generatedChunks.delete(`${dimId}:${cx},${cz}`); + } + + try { + const origin = { x: cx * 16, y: 0, z: cz * 16 }; + if (typeof dimension.placeFeature === "function") { + const placed = dimension.placeFeature(config.featureId, origin); + if (placed) { + markChunkGenerated(dimId, cx, cz); + return true; + } + } + } catch {} + return false; +} + +/** + * Pre-generates the spawn perimeter terrain chunks. + * @param {import("@minecraft/server").Dimension} dimension + * @param {number} chunkCenterX + * @param {number} chunkCenterZ + * @param {number} chunkRadius + */ +export function generateSpawnTerrain(dimension, chunkCenterX = 0, chunkCenterZ = 0, chunkRadius = 2) { + if (!dimension || typeof dimension.placeFeature !== "function") return; + const dimId = dimension.id; + const config = PLANET_WORLDGEN_CONFIG[dimId]; + if (!config) return; + + for (let dx = -chunkRadius; dx <= chunkRadius; dx++) { + for (let dz = -chunkRadius; dz <= chunkRadius; dz++) { + const cx = chunkCenterX + dx; + const cz = chunkCenterZ + dz; + if (isChunkGenerated(dimId, cx, cz)) { + if (!isChunkPhysicallyMissing(dimension, cx, cz)) continue; + generatedChunks.delete(`${dimId}:${cx},${cz}`); + } + + const origin = { x: cx * 16, y: 0, z: cz * 16 }; + try { + const placed = dimension.placeFeature(config.featureId, origin); + if (placed) { + markChunkGenerated(dimId, cx, cz); + } + } catch (err) { + // Chunk pending streaming + } + } + } +} + +/** + * Active chunk generation queue tracking prioritized ungenerated chunks for placement. + */ +export const chunkGenerationQueue = []; + +/** + * Tracks previous chunk coordinates per player to detect chunk transitions and evict left-behind chunks. + */ +export const playerChunkPositions = new Map(); + +/** + * Evaluates player proximity, heading, and vision cone to prioritize immediate visible chunks, + * drops chunks left behind from the queue, and executes placements within tick budget. + * + * @param {import("@minecraft/server").Player} player + * @param {number} [radius=3] Search radius in chunks (default 3 = 7x7 chunks around player) + * @param {number} [tickStart=Date.now()] + * @param {number} [maxPlacements=MAX_PLACEMENTS_PER_TICK] + * @param {number} [maxBudgetMs=MAX_TICK_BUDGET_MS] Hard execution time cap in milliseconds + * @returns {number} Number of chunks successfully generated this call + */ +export function updatePlayerChunks(player, radius = 3, tickStart = Date.now(), maxPlacements = MAX_PLACEMENTS_PER_TICK, maxBudgetMs = MAX_TICK_BUDGET_MS) { + if (!player || !player.dimension || !player.location) return 0; + const dimId = player.dimension.id; + if (!PLANET_WORLDGEN_CONFIG[dimId]) return 0; + + const dim = player.dimension; + const px = Math.floor(player.location.x); + const pz = Math.floor(player.location.z); + const centerChunkX = Math.floor(px / 16); + const centerChunkZ = Math.floor(pz / 16); + const playerId = player.id || player.name; + + // Detect player movement velocity and camera look direction + let dirX = 0; + let dirZ = 0; + let hasDirection = false; + + // 1. Camera view direction (immediate vision cone) + let viewX = 0; + let viewZ = 0; + let hasView = false; + try { + if (typeof player.getViewDirection === "function") { + const v = player.getViewDirection(); + if (v) { + const hLen = Math.hypot(v.x, v.z); + if (hLen > 0.05) { + viewX = v.x / hLen; + viewZ = v.z / hLen; + hasView = true; + } + } + } + } catch {} + + // 2. Velocity vector (travel direction) + let moveX = 0; + let moveZ = 0; + let isMoving = false; + try { + if (typeof player.getVelocity === "function") { + const vel = player.getVelocity(); + if (vel) { + const speedSq = vel.x * vel.x + vel.z * vel.z; + if (speedSq > 0.005) { + const speed = Math.sqrt(speedSq); + moveX = vel.x / speed; + moveZ = vel.z / speed; + isMoving = true; + } + } + } + } catch {} + + // Combine view and movement heading + if (isMoving && hasView) { + dirX = moveX * 0.65 + viewX * 0.35; + dirZ = moveZ * 0.65 + viewZ * 0.35; + const len = Math.hypot(dirX, dirZ); + if (len > 0.05) { + dirX /= len; + dirZ /= len; + hasDirection = true; + } + } else if (hasView) { + dirX = viewX; + dirZ = viewZ; + hasDirection = true; + } else if (isMoving) { + dirX = moveX; + dirZ = moveZ; + hasDirection = true; + } + + // 3. Proximity Analysis: determine minimum ungenerated ring distance around player + let minUngeneratedRing = radius + 1; + for (let dx = -radius; dx <= radius; dx++) { + for (let dz = -radius; dz <= radius; dz++) { + const cx = centerChunkX + dx; + const cz = centerChunkZ + dz; + if (!isChunkGenerated(dimId, cx, cz) || isChunkPhysicallyMissing(dim, cx, cz)) { + const r = Math.max(Math.abs(dx), Math.abs(dz)); + if (r < minUngeneratedRing) { + minUngeneratedRing = r; + } + } + } + } + + // If everything in radius is already generated, purge queue and return + if (minUngeneratedRing > radius) { + chunkGenerationQueue.length = 0; + playerChunkPositions.set(playerId, { cx: centerChunkX, cz: centerChunkZ }); + return 0; + } + + // 4. Active Horizon Gating: + // If immediate proximity (ring <= 1) is ungenerated, prioritize ring 1 exclusively. + // If ring 1 is complete, expand to ring 2, then radius. + // Far-away queued chunks (ring > maxActiveRing) are discarded/evicted for later. + const maxActiveRing = minUngeneratedRing <= 1 ? 1 : (minUngeneratedRing === 2 ? 2 : radius); + + // 5. Detect player chunk movement & Drop chunks left behind + const prevPos = playerChunkPositions.get(playerId); + if (prevPos && (prevPos.cx !== centerChunkX || prevPos.cz !== centerChunkZ)) { + for (let i = chunkGenerationQueue.length - 1; i >= 0; i--) { + const item = chunkGenerationQueue[i]; + const distFromNewCenter = Math.max(Math.abs(item.cx - centerChunkX), Math.abs(item.cz - centerChunkZ)); + if (distFromNewCenter > maxActiveRing || isChunkGenerated(dimId, item.cx, item.cz)) { + chunkGenerationQueue.splice(i, 1); + } + } + } + playerChunkPositions.set(playerId, { cx: centerChunkX, cz: centerChunkZ }); + + // 6. Collect candidate ungenerated chunks strictly within the active proximity horizon + const candidates = []; + for (let dx = -maxActiveRing; dx <= maxActiveRing; dx++) { + for (let dz = -maxActiveRing; dz <= maxActiveRing; dz++) { + const ring = Math.max(Math.abs(dx), Math.abs(dz)); + if (ring > maxActiveRing) continue; + + const cx = centerChunkX + dx; + const cz = centerChunkZ + dz; + const needsGen = !isChunkGenerated(dimId, cx, cz) || isChunkPhysicallyMissing(dim, cx, cz); + if (!needsGen) continue; + + const rawDistSq = dx * dx + dz * dz; + // Strict proximity tier weighting: each ring tier separated by 1000 units + let distSq = ring * 1000 + rawDistSq; + + // Vision and movement direction bias within the same ring + if (hasDirection) { + if (dx === 0 && dz === 0) { + distSq -= 100; + } else { + const chunkDist = Math.hypot(dx, dz); + const dot = (dx * dirX + dz * dirZ) / chunkDist; + distSq -= Math.round(dot * 60); + } + } + + candidates.push({ cx, cz, ring, distSq, dx, dz, dimId }); + } + } + + if (candidates.length === 0) { + chunkGenerationQueue.length = 0; + return 0; + } + + // 7. Sort candidates: Closest ring first, then immediate vision cone + candidates.sort((a, b) => a.distSq - b.distSq); + + // 8. Synchronize active chunk generation queue + chunkGenerationQueue.length = 0; + for (let i = 0; i < candidates.length; i++) { + chunkGenerationQueue[i] = candidates[i]; + } + + // High-resolution clock compatibility + const getNow = (typeof performance !== "undefined" && typeof performance.now === "function") + ? () => performance.now() + : () => Date.now(); + + // 9. Execute placements up to budget (strictly capped by maxBudgetMs) + let placedCount = 0; + for (const candidate of candidates) { + if (placedCount >= maxPlacements) break; + if (getNow() - tickStart >= maxBudgetMs && placedCount > 0) break; + + const success = generateChunk(dim, candidate.cx, candidate.cz); + if (success) { + placedCount++; + } + } + + // Clean up placed chunks from generation queue + for (let i = chunkGenerationQueue.length - 1; i >= 0; i--) { + const item = chunkGenerationQueue[i]; + if (isChunkGenerated(dimId, item.cx, item.cz)) { + chunkGenerationQueue.splice(i, 1); + } + } + + return placedCount; +} + +let isCoordinatorRunning = false; + +/** + * Worldgen coordinator loop: gathers ungenerated chunks around players across active planetary dimensions, + * evaluates proximity and vision queues, drops left-behind chunks, + * and executes feature placements within tick budget (strictly capped at MAX_TICK_BUDGET_MS = 2ms). + */ +export function startWorldgenCoordinator() { + if (isCoordinatorRunning) return; + isCoordinatorRunning = true; + + const getNow = (typeof performance !== "undefined" && typeof performance.now === "function") + ? () => performance.now() + : () => Date.now(); + + return system.runInterval(() => { + const startTime = getNow(); + let totalPlaced = 0; + + for (const player of world.getAllPlayers()) { + if (!player || !player.dimension || !player.location) continue; + const dimId = player.dimension.id; + if (!PLANET_WORLDGEN_CONFIG[dimId]) continue; + + const remainingBudget = MAX_PLACEMENTS_PER_TICK - totalPlaced; + if (remainingBudget <= 0) break; + + const placed = updatePlayerChunks(player, 3, startTime, remainingBudget, MAX_TICK_BUDGET_MS); + totalPlaced += placed; + + if (totalPlaced >= MAX_PLACEMENTS_PER_TICK) break; + if (getNow() - startTime >= MAX_TICK_BUDGET_MS) break; + } + }, 2); +} diff --git a/BP/scripts/recipes/galacticraft_crafting_recipes_data.js b/BP/scripts/recipes/galacticraft_crafting_recipes_data.js new file mode 100644 index 00000000..b361a426 --- /dev/null +++ b/BP/scripts/recipes/galacticraft_crafting_recipes_data.js @@ -0,0 +1,990 @@ +export const recipes = { + "cosmos:aluminum_block": { + "cosmos:aluminum_ingot": 9 + }, + "cosmos:aluminum_ingot": { + "cosmos:aluminum_block": 1 + }, + "cosmos:aluminum_wire": { + "minecraft:wool": 6, + "cosmos:aluminum_ingot": 3 + }, + "cosmos:battery": { + "cosmos:compressed_tin": 5, + "minecraft:redstone": 1, + "minecraft:coal": 1 + }, + "cosmos:circuit_fabricator": { + "cosmos:aluminum_ingot": 2, + "minecraft:lever": 1, + "minecraft:stone_button": 2, + "minecraft:furnace": 1, + "cosmos:aluminum_wire": 2, + "minecraft:redstone_torch": 1 + }, + "cosmos:coal_generator": { + "minecraft:copper_ingot": 3, + "minecraft:iron_ingot": 4, + "minecraft:furnace": 1, + "cosmos:aluminum_wire": 1 + }, + "cosmos:compressor": { + "cosmos:aluminum_ingot": 6, + "minecraft:anvil": 1, + "minecraft:copper_ingot": 1, + "cosmos:basic_wafer": 1 + }, + "cosmos:copper_canister": { + "minecraft:copper_ingot": 7 + }, + "cosmos:detailed_tin_decoration_stairs": { + "cosmos:detailed_tin_decoration_block": 6 + }, + "cosmos:energy_storage_cluster": { + "cosmos:energy_storage_module": 4, + "cosmos:compressed_steel": 4, + "cosmos:advanced_wafer": 1 + }, + "cosmos:energy_storage_module": { + "cosmos:compressed_steel": 6, + "cosmos:battery": 3 + }, + "cosmos:mars_cobblestone_stairs": { + "cosmos:mars_cobblestone": 6 + }, + "cosmos:mars_dungeon_bricks_stairs": { + "cosmos:mars_dungeon_bricks": 6 + }, + "cosmos:moon_dungeon_bricks_stairs": { + "cosmos:moon_dungeon_bricks": 6 + }, + "cosmos:moon_rock_stairs": { + "cosmos:moon_rock": 6 + }, + "cosmos:nasa_workbench": { + "cosmos:compressed_steel": 4, + "minecraft:crafting_table": 1, + "minecraft:lever": 2, + "cosmos:advanced_wafer": 1, + "minecraft:redstone_torch": 1 + }, + "cosmos:nose_cone": { + "minecraft:redstone_torch": 1, + "cosmos:heavy_duty_plate": 3 + }, + "cosmos:oxygen_collector": { + "cosmos:compressed_steel": 3, + "cosmos:oxygen_fan": 1, + "cosmos:tin_canister": 1, + "cosmos:oxygen_vent": 1, + "cosmos:compressed_aluminum": 2, + "cosmos:oxygen_concentrator": 1 + }, + "cosmos:oxygen_vent": { + "cosmos:compressed_tin": 3, + "cosmos:compressed_steel": 1 + }, + "cosmos:rocket_engine": { + "minecraft:stone_button": 1, + "minecraft:flint_and_steel": 1, + "cosmos:heavy_duty_plate": 4, + "cosmos:empty_canister": 1, + "cosmos:oxygen_vent": 1 + }, + "cosmos:rocket_fins": { + "cosmos:compressed_steel": 2, + "cosmos:heavy_duty_plate": 4 + }, + "cosmos:rocket_launch_pad": { + "cosmos:compressed_iron": 3, + "minecraft:iron_block": 3 + }, + "cosmos:tin_decoration_stairs": { + "cosmos:tin_decoration_block": 6 + }, + "cosmos:tin_canister": { + "cosmos:tin_ingot": 7 + }, + "cosmos:cargo_loader": { + "cosmos:compressed_steel": 5, + "minecraft:hopper": 1, + "cosmos:compressed_aluminum": 2, + "minecraft:chest": 1 + }, + "cosmos:advanced_compressor": { + "cosmos:compressed_steel": 4, + "minecraft:anvil": 1, + "cosmos:compressed_meteoric_iron": 1, + "cosmos:aluminum_wire": 2, + "cosmos:advanced_wafer": 1 + }, + "cosmos:advanced_solar_panel": { + "cosmos:compressed_steel": 4, + "cosmos:full_solar_panel": 1, + "cosmos:steel_pole": 1, + "cosmos:heavy_aluminum_wire": 2, + "cosmos:advanced_wafer": 1 + }, + "cosmos:air_lock_controller": { + "cosmos:compressed_steel": 6, + "cosmos:compressed_meteoric_iron": 2, + "cosmos:basic_wafer": 1 + }, + "cosmos:air_lock_frame": { + "cosmos:compressed_aluminum": 6, + "cosmos:compressed_steel": 2, + "cosmos:oxygen_concentrator": 1 + }, + "cosmos:ambient_thermal_controller": { + "minecraft:redstone": 2, + "cosmos:oxygen_vent": 1, + "cosmos:compressed_bronze": 4, + "cosmos:compressed_steel": 1, + "cosmos:basic_wafer": 1 + }, + "cosmos:arc_lamp": { + "cosmos:desh_ingot": 4, + "minecraft:glowstone_dust": 4, + "cosmos:battery": 1 + }, + + "cosmos:atmospheric_valve": { + "cosmos:desh_ingot": 3, + "cosmos:oxygen_vent": 1 + }, + "cosmos:atomic_battery": { + "cosmos:lead_ingot": 8, + "cosmos:radioactive_core": 1 + }, + "cosmos:basic_solar_panel": { + "cosmos:compressed_steel": 4, + "cosmos:full_solar_panel": 1, + "cosmos:steel_pole": 1, + "cosmos:aluminum_wire": 2, + "cosmos:basic_wafer": 1 + }, + "cosmos:beam_core": { + "minecraft:redstone": 4, + "cosmos:compressed_iron": 4, + "minecraft:glass_pane": 1 + }, + "cosmos:beam_receiver": { + "cosmos:compressed_titanium": 4, + "cosmos:beam_core": 1 + }, + "cosmos:beam_reflector": { + "cosmos:beam_core": 1, + "cosmos:compressed_titanium": 4, + "minecraft:lever": 1 + }, + "cosmos:buggy_fueling_pad": { + "cosmos:compressed_steel": 3, + "minecraft:iron_block": 3 + }, + "cosmos:buggy_seat": { + "cosmos:compressed_steel": 5, + "cosmos:compressed_iron": 1 + }, + "cosmos:buggy_storage": { + "cosmos:compressed_steel": 6, + "cosmos:compressed_iron": 2, + "minecraft:chest": 1 + }, + "cosmos:buggy_wheel": { + "minecraft:leather": 4, + "cosmos:compressed_steel": 1 + }, + "cosmos:burger_bun": { + "minecraft:wheat": 2, + "minecraft:egg": 1, + "minecraft:milk_bucket": 1 + }, + "cosmos:canned_beef": { + "cosmos:tin_canister": 1, + "cosmos:ground_beef": 2 + }, + "cosmos:canvas": { + "minecraft:string": 5, + "minecraft:stick": 2 + }, + "cosmos:cargo_unloader": { + "minecraft:iron_ingot": 6, + "minecraft:hopper": 2, + "minecraft:chest": 1 + }, + "cosmos:cheese_block": { + "cosmos:cheese_slice": 8, + "minecraft:milk_bucket": 1 + }, + "cosmos:cheese_burger": { + "cosmos:cheese_slice": 1, + "cosmos:beef_patty": 1, + "cosmos:burger_bun": 1 + }, + "cosmos:cheese_slice": { + "cosmos:cheese_block": 1 + }, + "cosmos:chromatic_applicator": { + "minecraft:red_dye": 1, + "minecraft:magenta_dye": 1, + "minecraft:blue_dye": 1, + "minecraft:orange_dye": 1, + "cosmos:compressed_steel": 1, + "minecraft:cyan_dye": 1, + "minecraft:yellow_dye": 1, + "minecraft:lime_dye": 1, + "minecraft:green_dye": 1 + }, + "cosmos:clear_tin_vacuum_glass": { + "cosmos:tin_decoration_block": 4, + "cosmos:clear_vacuum_glass": 5 + }, + "cosmos:clear_vacuum_glass": { + "cosmos:aluminum_ingot": 4, + "minecraft:glass": 5 + }, + "cosmos:communications_dish": { + "cosmos:compressed_aluminum": 3, + "cosmos:frequency_module": 1, + "cosmos:advanced_wafer": 2, + "minecraft:iron_block": 1 + }, + "cosmos:corner_lighting_panel": { + "minecraft:glass_pane": 2, + "cosmos:glowstone_torch": 1, + "cosmos:compressed_steel": 1 + }, + "cosmos:cryogenic_chamber": { + "cosmos:compressed_desh": 6, + "cosmos:heavy_duty_plate_tier2": 2, + "minecraft:bed": 1 + }, + "cosmos:dark_lighting_panel": { + "minecraft:glass_pane": 2, + "cosmos:glowstone_torch": 1, + "cosmos:compressed_steel": 1 + }, + "cosmos:deconstructor": { + "cosmos:compressed_steel": 4, + "minecraft:shears": 1, + "cosmos:aluminum_wire": 2, + "minecraft:anvil": 1, + "minecraft:furnace": 1 + }, + "cosmos:dehydrated_apple": { + "cosmos:tin_canister": 1, + "minecraft:apple": 2 + }, + "cosmos:dehydrated_carrot": { + "cosmos:tin_canister": 1, + "minecraft:carrot": 2 + }, + "cosmos:dehydrated_melon": { + "cosmos:tin_canister": 1, + "minecraft:melon": 2 + }, + "cosmos:dehydrated_potato": { + "cosmos:tin_canister": 1, + "minecraft:potato": 2 + }, + "cosmos:desh_axe": { + "cosmos:desh_ingot": 3, + "cosmos:desh_stick": 2 + }, + "cosmos:desh_block": { + "cosmos:desh_ingot": 9 + }, + "cosmos:desh_boots": { + "cosmos:desh_ingot": 4 + }, + "cosmos:desh_chestplate": { + "cosmos:desh_ingot": 8 + }, + "cosmos:desh_helmet": { + "cosmos:desh_ingot": 5 + }, + "cosmos:desh_hoe": { + "cosmos:desh_ingot": 2, + "cosmos:desh_stick": 2 + }, + "cosmos:desh_ingot": { + "cosmos:desh_block": 1 + }, + "cosmos:desh_leggings": { + "cosmos:desh_ingot": 7 + }, + "cosmos:desh_pickaxe": { + "cosmos:desh_ingot": 3, + "cosmos:desh_stick": 2 + }, + "cosmos:desh_shovel": { + "cosmos:desh_ingot": 1, + "cosmos:desh_stick": 2 + }, + "cosmos:desh_stick": { + "cosmos:desh_ingot": 2 + }, + "cosmos:desh_sword": { + "cosmos:desh_ingot": 2, + "cosmos:desh_stick": 1 + }, + "cosmos:detailed_tin_decoration_block": { + "minecraft:stone": 4, + "cosmos:compressed_tin": 1 + }, + "cosmos:detailed_tin_decoration_slab": { + "cosmos:detailed_tin_decoration_block": 3 + }, + "cosmos:detailed_tin_decoration_wall": { + "cosmos:detailed_tin_decoration_block": 6 + }, + "cosmos:display_screen": { + "cosmos:compressed_steel": 4, + "cosmos:basic_wafer": 4, + "minecraft:glass": 1 + }, + "cosmos:electric_arc_furnace": { + "cosmos:heavy_duty_plate": 5, + "cosmos:electric_furnace": 1, + "cosmos:meteoric_iron_ingot": 2, + "cosmos:advanced_wafer": 1 + }, + "cosmos:electric_compressor": { + "cosmos:compressed_steel": 4, + "cosmos:compressed_tin": 1, + "cosmos:compressor": 1, + "cosmos:aluminum_wire": 2, + "cosmos:advanced_wafer": 1 + }, + "cosmos:electric_furnace": { + "cosmos:compressed_steel": 5, + "minecraft:furnace": 1, + "cosmos:compressed_aluminum": 2, + "cosmos:basic_wafer": 1 + }, + "cosmos:emergency_box": { + "cosmos:emergency_post": 1, + "cosmos:emergency_kit": 1 + }, + "cosmos:emergency_post": { + "cosmos:glowstone_torch": 4, + "cosmos:compressed_tin": 4 + }, + "cosmos:empty_canister": { + "cosmos:compressed_tin": 6, + "cosmos:compressed_steel": 1, + "minecraft:glass": 1, + "cosmos:tin_canister": 1 + }, + "cosmos:fallen_meteor": { + "cosmos:meteoric_raw_iron": 1 + }, + "cosmos:flag": { + "cosmos:steel_pole": 3, + "cosmos:canvas": 4 + }, + "cosmos:fluid_manifulator": { + "cosmos:meteoric_iron_ingot": 4, + "cosmos:oxygen_fan": 2, + "minecraft:slime_ball": 2, + "cosmos:advanced_wafer": 1 + }, + "cosmos:fluid_pipe": { + "minecraft:glass_pane": 6 + }, + "cosmos:fluid_tank": { + "minecraft:glass_pane": 6 + }, + "cosmos:fragmented_carbon": { + "minecraft:coal:1": 4 + }, + "cosmos:frequency_module": { + "cosmos:compressed_aluminum": 1, + "cosmos:compressed_iron": 2, + "minecraft:repeater": 1, + "minecraft:redstone": 2, + "cosmos:basic_wafer": 1 + }, + "cosmos:fuel_loader": { + "cosmos:compressed_copper": 5, + "cosmos:tin_canister": 1, + "cosmos:compressed_tin": 2, + "cosmos:basic_wafer": 1 + }, + "cosmos:full_solar_panel": { + "cosmos:single_solar_module": 6, + "cosmos:aluminum_wire": 3 + }, + "cosmos:gas_liquefier": { + "cosmos:oxygen_tank_heavy_full": 1, + "cosmos:oxygen_vent": 1, + "cosmos:oxygen_tank_med_full": 2, + "cosmos:fluid_pipe": 1, + "cosmos:fluid_manifulator": 1, + "cosmos:oxygen_decompressor": 1, + "cosmos:compressed_bronze": 1, + "cosmos:oxygen_compressor": 1 + }, + "cosmos:geothermal_generator": { + "minecraft:iron_ingot": 8, + "minecraft:copper_ingot": 1 + }, + "cosmos:glowstone_torch": { + "minecraft:glowstone_dust": 1, + "minecraft:stick": 1 + }, + "cosmos:grapple": { + "minecraft:string": 2, + "minecraft:iron_ingot": 3 + }, + "cosmos:grating": { + "minecraft:iron_bars": 4 + }, + "cosmos:ground_beef": { + "minecraft:beef": 1 + }, + "cosmos:heavy_nose_cone": { + "minecraft:redstone_torch": 1, + "cosmos:heavy_duty_plate_tier3": 3 + }, + "cosmos:heavy_rocket_engine": { + "minecraft:stone_button": 1, + "minecraft:flint_and_steel": 1, + "cosmos:heavy_duty_plate_tier3": 4, + "cosmos:empty_canister": 1, + "cosmos:oxygen_vent": 1 + }, + "cosmos:heavy_rocket_fins": { + "cosmos:compressed_titanium": 2, + "cosmos:heavy_duty_plate_tier3": 4 + }, + "cosmos:hydraulic_platform": { + "minecraft:piston": 4, + "minecraft:glowstone_dust": 2, + "cosmos:compressed_steel": 2, + "cosmos:basic_wafer": 1 + }, + "cosmos:incased_redstone_dust": { + "cosmos:tin_decoration_block": 4, + "minecraft:redstone": 1 + }, + "cosmos:incased_redstone_repeater": { + "cosmos:tin_decoration_block": 2, + "minecraft:repeater": 1 + }, + "cosmos:isothermal_boots": { + "cosmos:isothermal_fabric": 4 + }, + "cosmos:isothermal_chestplate": { + "cosmos:isothermal_fabric": 8 + }, + "cosmos:isothermal_fabric": { + "cosmos:thermal_cloth": 2, + "cosmos:desh_ingot": 1 + }, + "cosmos:isothermal_helmet": { + "cosmos:isothermal_fabric": 5 + }, + "cosmos:isothermal_leggings": { + "cosmos:isothermal_fabric": 7 + }, + "cosmos:launch_controller": { + "minecraft:iron_ingot": 8, + "minecraft:redstone": 1 + }, + "cosmos:lead_block": { + "cosmos:lead_ingot": 9 + }, + "cosmos:lead_ingot": { + "cosmos:lead_block": 1 + }, + "cosmos:liftoff_checklist": { + "minecraft:dye:1": 1, + "cosmos:canvas": 1 + }, + "cosmos:lighting_panel": { + "minecraft:glass_pane": 7, + "cosmos:glowstone_torch": 1, + "cosmos:compressed_steel": 1 + }, + "cosmos:linear_lighting_panel": { + "minecraft:glass_pane": 6, + "cosmos:glowstone_torch": 1, + "cosmos:compressed_steel": 1 + }, + "cosmos:mars_cobblestone_slab": { + "cosmos:mars_cobblestone": 3 + }, + "cosmos:mars_cobblestone_wall": { + "cosmos:mars_cobblestone": 6 + }, + "cosmos:mars_dungeon_bricks_slab": { + "cosmos:mars_dungeon_bricks": 3 + }, + "cosmos:mars_dungeon_bricks_wall": { + "cosmos:mars_dungeon_bricks": 6 + }, + "cosmos:meteoric_iron_block": { + "cosmos:meteoric_iron_ingot": 9 + }, + "cosmos:meteoric_iron_ingot": { + "cosmos:meteoric_iron_block": 1 + }, + "cosmos:methane_synthesizer": { + "cosmos:oxygen_tank_heavy_full": 2, + "cosmos:oxygen_vent": 1, + "cosmos:fluid_pipe": 2, + "cosmos:fluid_manifulator": 1, + "cosmos:electric_furnace": 1, + "cosmos:compressed_bronze": 1, + "cosmos:oxygen_compressor": 1 + }, + "minecraft:cobblestone": { + "cosmos:asteroids_soft_rock": 1, + "cosmos:asteroids_rock": 1 + }, + "minecraft:crafter": { + "minecraft:crafting_table": 1, + "cosmos:compressed_iron": 1 + }, + "minecraft:dye:2": { + "minecraft:dye:11": 1, + "minecraft:dye:4": 1 + }, + "minecraft:furnace": { + "cosmos:moon_rock": 8 + }, + "minecraft:lit_pumpkin": { + "minecraft:pumpkin": 1, + "minecraft:torch": 1 + }, + "minecraft:slime_ball": { + "minecraft:dye:2": 4, + "minecraft:sugar": 4, + "cosmos:cheese_curd": 1 + }, + "cosmos:moon_dungeon_bricks_slab": { + "cosmos:moon_dungeon_bricks": 3 + }, + "cosmos:moon_dungeon_bricks_wall": { + "cosmos:moon_dungeon_bricks": 6 + }, + "cosmos:moon_rock_slab": { + "cosmos:moon_rock": 3 + }, + "cosmos:moon_rock_wall": { + "cosmos:moon_rock": 6 + }, + "cosmos:orion_drive": { + "minecraft:diamond_ore": 1, + "minecraft:lapis_ore": 1, + "minecraft:gold_ore": 1, + "minecraft:redstone_ore": 1, + "cosmos:beam_core": 1, + "minecraft:coal_ore": 1, + "cosmos:cheese_ore": 1, + "cosmos:desh_ore": 1, + "cosmos:ilmenite_ore": 1 + }, + "cosmos:oxygen_compressor": { + "cosmos:compressed_steel": 4, + "cosmos:compressed_aluminum": 3, + "cosmos:oxygen_concentrator": 1, + "cosmos:compressed_bronze": 1 + }, + "cosmos:oxygen_concentrator": { + "cosmos:compressed_steel": 4, + "cosmos:compressed_tin": 3, + "cosmos:tin_canister": 1, + "cosmos:oxygen_vent": 1 + }, + "cosmos:oxygen_decompressor": { + "cosmos:compressed_steel": 4, + "cosmos:oxygen_fan": 1, + "cosmos:compressed_aluminum": 2, + "cosmos:oxygen_concentrator": 1, + "minecraft:redstone_torch": 1 + }, + "cosmos:oxygen_detector": { + "cosmos:compressed_steel": 3, + "cosmos:oxygen_vent": 2, + "cosmos:basic_wafer": 1, + "minecraft:redstone": 2, + "cosmos:compressed_aluminum": 1 + }, + "cosmos:oxygen_distributor": { + "cosmos:compressed_steel": 4, + "cosmos:oxygen_fan": 2, + "cosmos:oxygen_vent": 2, + "cosmos:compressed_aluminum": 1 + }, + "cosmos:oxygen_fan": { + "cosmos:compressed_steel": 4, + "cosmos:basic_wafer": 1, + "minecraft:redstone": 1 + }, + "cosmos:oxygen_gear": { + "cosmos:fluid_pipe": 5, + "cosmos:oxygen_concentrator": 1 + }, + "cosmos:oxygen_mask": { + "minecraft:glass_pane": 8, + "minecraft:iron_helmet": 1 + }, + "cosmos:oxygen_sealer": { + "minecraft:stone": 8 + }, + "cosmos:oxygen_storage_module": { + "cosmos:compressed_steel": 6, + "cosmos:oxygen_tank_heavy_full": 3 + }, + "cosmos:oxygen_tank_heavy_full": { + "minecraft:wool:14": 3, + "cosmos:tin_canister": 3, + "cosmos:compressed_steel": 3 + }, + "cosmos:oxygen_tank_light_full": { + "minecraft:wool:5": 1, + "cosmos:tin_canister": 1, + "cosmos:compressed_copper": 1 + }, + "cosmos:oxygen_tank_med_full": { + "minecraft:wool:1": 2, + "cosmos:tin_canister": 2, + "cosmos:compressed_tin": 2 + }, + "cosmos:parachute_black": { + "minecraft:dye": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_blue": { + "minecraft:dye:12": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_brown": { + "minecraft:dye:3": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_darkblue": { + "minecraft:dye:4": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_darkgray": { + "minecraft:dye:8": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_darkgreen": { + "minecraft:dye:2": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_gray": { + "minecraft:dye:7": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_lime": { + "minecraft:dye:10": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_magenta": { + "minecraft:dye:13": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_orange": { + "minecraft:dye:14": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_pink": { + "minecraft:dye:9": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_plain": { + "minecraft:dye:15": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_purple": { + "minecraft:dye:5": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_red": { + "minecraft:dye:1": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_teal": { + "minecraft:dye:6": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:parachute_yellow": { + "minecraft:dye:11": 1, + "cosmos:parachute_plain": 1 + }, + "cosmos:pipe_walkway": { + "cosmos:walkway": 1, + "cosmos:fluid_pipe": 1 + }, + "cosmos:raw_silicon": { + "cosmos:silicon_block": 1 + }, + "cosmos:refinery": { + "cosmos:copper_canister": 2, + "minecraft:stone": 2, + "cosmos:compressed_steel": 2, + "minecraft:furnace": 1 + }, + "cosmos:sealed_aluminum_wire": { + "cosmos:tin_decoration_block": 2, + "cosmos:aluminum_wire": 1 + }, + "cosmos:sealed_fluid_pipe": { + "cosmos:tin_decoration_block": 2, + "cosmos:fluid_pipe": 1 + }, + "cosmos:sealed_heavy_aluminum_wire": { + "cosmos:tin_decoration_block": 2, + "cosmos:heavy_aluminum_wire": 1 + }, + "cosmos:sensor_glasses": { + "minecraft:string": 4, + "minecraft:diamond": 1, + "cosmos:sensor_lens": 2, + "cosmos:meteoric_iron_ingot": 1 + }, + "cosmos:sensor_lens": { + "minecraft:redstone": 4, + "minecraft:glass_pane": 4, + "cosmos:compressed_meteoric_iron": 1 + }, + "cosmos:single_solar_module": { + "minecraft:glass": 3, + "cosmos:blue_solar_wafer": 3, + "cosmos:aluminum_wire": 3 + }, + "cosmos:slimeling_bag": { + "minecraft:leather": 4, + "minecraft:diamond": 1, + "minecraft:slime_ball": 1, + "minecraft:chest": 1 + }, + "cosmos:solar_array_controller": { + "cosmos:compressed_steel": 8, + "cosmos:advanced_wafer": 1 + }, + "cosmos:solar_array_module": { + "cosmos:solar_array_panel": 3, + "cosmos:heavy_aluminum_wire": 2, + "cosmos:advanced_wafer": 1 + }, + "cosmos:solar_array_panel": { + "minecraft:glass": 3, + "cosmos:thin_solar_wafer": 3, + "cosmos:aluminum_wire": 3 + }, + "cosmos:spin_thruster": { + "cosmos:fuel_canister": 1, + "cosmos:advanced_wafer": 1, + "cosmos:rocket_engine": 1, + "cosmos:compressed_steel": 2, + "cosmos:meteoric_iron_ingot": 1 + }, + "cosmos:spotlight_lighting_panel": { + "minecraft:glass_pane": 4, + "cosmos:glowstone_torch": 1, + "cosmos:compressed_steel": 1 + }, + "cosmos:standard_wrench": { + "cosmos:compressed_steel": 1, + "cosmos:compressed_bronze": 2 + }, + "cosmos:steel_axe": { + "cosmos:compressed_steel": 3, + "minecraft:stick": 2 + }, + "cosmos:steel_boots": { + "cosmos:compressed_steel": 4 + }, + "cosmos:steel_chestplate": { + "cosmos:compressed_steel": 8 + }, + "cosmos:steel_helmet": { + "cosmos:compressed_steel": 5 + }, + "cosmos:steel_hoe": { + "cosmos:compressed_steel": 2, + "minecraft:stick": 2 + }, + "cosmos:steel_leggings": { + "cosmos:compressed_steel": 7 + }, + "cosmos:steel_pickaxe": { + "cosmos:compressed_steel": 3, + "minecraft:stick": 2 + }, + "cosmos:steel_pole": { + "cosmos:compressed_steel": 3 + }, + "cosmos:steel_shovel": { + "cosmos:compressed_steel": 1, + "minecraft:stick": 2 + }, + "cosmos:steel_sword": { + "cosmos:compressed_steel": 2, + "minecraft:stick": 1 + }, + "cosmos:strong_tin_vacuum_glass": { + "cosmos:tin_decoration_block": 4, + "cosmos:strong_vacuum_glass": 5 + }, + "cosmos:strong_vacuum_glass": { + "cosmos:compressed_aluminum": 4, + "minecraft:glass": 5 + }, + "cosmos:switchable_aluminum_wire": { + "cosmos:aluminum_wire": 1, + "minecraft:repeater": 1 + }, + "cosmos:switchable_heavy_aluminum_wire": { + "cosmos:heavy_aluminum_wire": 1, + "minecraft:repeater": 1 + }, + "cosmos:telemetry_unit": { + "cosmos:compressed_tin": 4, + "cosmos:frequency_module": 1, + "cosmos:basic_wafer": 1, + "cosmos:compressed_copper": 3 + }, + "cosmos:telepad": { + "cosmos:compressed_titanium": 5, + "cosmos:beam_core": 1, + "minecraft:ender_pearl": 2, + "minecraft:redstone": 1 + }, + "cosmos:terraformer": { + "cosmos:compressed_steel": 4, + "cosmos:compressed_aluminum": 4, + "cosmos:basic_wafer": 1 + }, + "cosmos:thermal_boots": { + "cosmos:thermal_cloth": 4 + }, + "cosmos:thermal_chestplate": { + "cosmos:thermal_cloth": 8 + }, + "cosmos:thermal_helmet": { + "cosmos:thermal_cloth": 5 + }, + "cosmos:thermal_leggings": { + "cosmos:thermal_cloth": 7 + }, + "cosmos:tier_1_booster": { + "cosmos:compressed_meteoric_iron": 4, + "minecraft:wool:4": 1, + "cosmos:fuel_canister": 1, + "cosmos:heavy_duty_plate": 2, + "cosmos:oxygen_vent": 1 + }, + "cosmos:tin_decoration_block": { + "minecraft:stone": 4, + "cosmos:compressed_tin": 1 + }, + "cosmos:tin_decoration_slab": { + "cosmos:tin_decoration_block": 3 + }, + "cosmos:tin_decoration_wall": { + "cosmos:tin_decoration_block": 6 + }, + "cosmos:tin_ingot": { + "cosmos:tin_block": 1 + }, + "cosmos:tin_vacuum_glass": { + "cosmos:tin_decoration_block": 4, + "cosmos:vacuum_glass": 5 + }, + "cosmos:titanium_axe": { + "cosmos:compressed_titanium": 3, + "minecraft:iron_ingot": 2 + }, + "cosmos:titanium_block": { + "cosmos:titanium_ingot": 9 + }, + "cosmos:titanium_boots": { + "cosmos:compressed_titanium": 4 + }, + "cosmos:titanium_chestplate": { + "cosmos:compressed_titanium": 8 + }, + "cosmos:titanium_helmet": { + "cosmos:compressed_titanium": 5 + }, + "cosmos:titanium_hoe": { + "cosmos:compressed_titanium": 2, + "minecraft:iron_ingot": 2 + }, + "cosmos:titanium_ingot": { + "cosmos:titanium_block": 1 + }, + "cosmos:titanium_leggings": { + "cosmos:compressed_titanium": 7 + }, + "cosmos:titanium_pickaxe": { + "cosmos:compressed_titanium": 3, + "minecraft:iron_ingot": 2 + }, + "cosmos:titanium_shovel": { + "cosmos:compressed_titanium": 1, + "minecraft:iron_ingot": 2 + }, + "cosmos:titanium_sword": { + "cosmos:compressed_titanium": 2, + "minecraft:iron_ingot": 1 + }, + "cosmos:vacuum_glass": { + "cosmos:tin_ingot": 4, + "minecraft:glass": 5 + }, + "cosmos:walkway": { + "cosmos:compressed_titanium": 4 + }, + "cosmos:water_electrolyzer": { + "cosmos:oxygen_tank_heavy_full": 2, + "cosmos:oxygen_vent": 1, + "cosmos:fluid_pipe": 2, + "cosmos:fluid_manifulator": 1, + "cosmos:compressed_copper": 2, + "cosmos:compressed_bronze": 1 + }, + "cosmos:wire_walkway": { + "cosmos:walkway": 1, + "cosmos:heavy_aluminum_wire": 1 + }, + "cosmos:heavy_aluminum_wire": { + "cosmos:aluminum_ingot": 1, + "cosmos:aluminum_wire": 1, + "minecraft:wool": 1 + }, + "cosmos:advanced_launch_controller": { + "minecraft:iron_ingot": 8, + "minecraft:diamond": 1 + }, + "cosmos:astro_miner_dock": { + "minecraft:iron_ingot": 8, + "minecraft:diamond": 1 + }, + "cosmos:painter": { + "minecraft:iron_ingot": 8, + "minecraft:redstone": 1 + }, + "cosmos:short_range_telepad": { + "minecraft:iron_ingot": 7, + "minecraft:ender_pearl": 1, + "minecraft:iron_block": 1 + }, + "cosmos:silicon_block": { + "cosmos:raw_silicon": 9 + }, + "cosmos:thermal_cloth": { + "minecraft:wool": 4, + "minecraft:redstone": 1 + }, + "cosmos:tin_block": { + "cosmos:tin_ingot": 9 + } +}; diff --git a/BP/worldgen/template_pools/moon_dungeon_boss.json b/BP/worldgen/template_pools/moon_dungeon_boss.json index 25abd816..149fb0ff 100644 --- a/BP/worldgen/template_pools/moon_dungeon_boss.json +++ b/BP/worldgen/template_pools/moon_dungeon_boss.json @@ -1,37 +1,37 @@ -{ - "format_version": "1.21.20", - "minecraft:template_pool": { - "description": { - "identifier": "cosmos:moon_dungeon_boss" - }, - "elements": [ - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_dungeon/boss/boss", - "processors": "cosmos:moon_dungeon_processor", - "projection": "rigid" - }, - "weight": 7 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_dungeon/boss/boss2", - "processors": "cosmos:moon_dungeon_processor", - "projection": "rigid" - }, - "weight": 8 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_dungeon/boss/boss3", - "processors": "cosmos:moon_dungeon_processor", - "projection": "rigid" - }, - "weight": 7 - } - ] - } +{ + "format_version": "1.21.20", + "minecraft:template_pool": { + "description": { + "identifier": "cosmos:moon_dungeon_boss" + }, + "elements": [ + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_dungeon/boss/boss", + "processors": "cosmos:moon_dungeon_processor", + "projection": "rigid" + }, + "weight": 7 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_dungeon/boss/boss2", + "processors": "cosmos:moon_dungeon_processor", + "projection": "rigid" + }, + "weight": 8 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_dungeon/boss/boss3", + "processors": "cosmos:moon_dungeon_processor", + "projection": "rigid" + }, + "weight": 7 + } + ] + } } \ No newline at end of file diff --git a/BP/worldgen/template_pools/moon_dungeon_spawners.json b/BP/worldgen/template_pools/moon_dungeon_spawners.json index e21776d2..3bf234c2 100644 --- a/BP/worldgen/template_pools/moon_dungeon_spawners.json +++ b/BP/worldgen/template_pools/moon_dungeon_spawners.json @@ -1,46 +1,46 @@ -{ - "format_version": "1.21.20", - "minecraft:template_pool": { - "description": { - "identifier": "cosmos:moon_dungeon_spawners" - }, - "elements": [ - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_dungeon/spawner/spawner_creeper", - "processors": "cosmos:moon_dungeon_processor", - "projection": "rigid" - }, - "weight": 8 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_dungeon/spawner/spawner_zombie", - "processors": "cosmos:moon_dungeon_processor", - "projection": "rigid" - }, - "weight": 7 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_dungeon/spawner/spawner_skeleton", - "processors": "cosmos:moon_dungeon_processor", - "projection": "rigid" - }, - "weight": 7 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_dungeon/spawner/spawner_spider", - "processors": "cosmos:moon_dungeon_processor", - "projection": "rigid" - }, - "weight": 8 - } - ] - } +{ + "format_version": "1.21.20", + "minecraft:template_pool": { + "description": { + "identifier": "cosmos:moon_dungeon_spawners" + }, + "elements": [ + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_dungeon/spawner/spawner_creeper", + "processors": "cosmos:moon_dungeon_processor", + "projection": "rigid" + }, + "weight": 8 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_dungeon/spawner/spawner_zombie", + "processors": "cosmos:moon_dungeon_processor", + "projection": "rigid" + }, + "weight": 7 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_dungeon/spawner/spawner_skeleton", + "processors": "cosmos:moon_dungeon_processor", + "projection": "rigid" + }, + "weight": 7 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_dungeon/spawner/spawner_spider", + "processors": "cosmos:moon_dungeon_processor", + "projection": "rigid" + }, + "weight": 8 + } + ] + } } \ No newline at end of file diff --git a/BP/worldgen/template_pools/moon_village_structure_placer.json b/BP/worldgen/template_pools/moon_village_structure_placer.json index 6aa8da3d..418dd443 100644 --- a/BP/worldgen/template_pools/moon_village_structure_placer.json +++ b/BP/worldgen/template_pools/moon_village_structure_placer.json @@ -1,37 +1,37 @@ -{ - "format_version": "1.21.90", - "minecraft:template_pool": { - "description": { - "identifier": "cosmos:moon_village_structure_placer" - }, - "elements": [ - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_village/structures/moon_house", - "processors": "cosmos:moon_village_processor", - "projection": "rigid" - }, - "weight": 2 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_village/structures/farm_t", - "processors": "cosmos:moon_village_processor", - "projection": "rigid" - }, - "weight": 1 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "moon_village/structures/farm_w", - "processors": "cosmos:moon_village_processor", - "projection": "rigid" - }, - "weight": 1 - } - ] - } +{ + "format_version": "1.21.90", + "minecraft:template_pool": { + "description": { + "identifier": "cosmos:moon_village_structure_placer" + }, + "elements": [ + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_village/structures/moon_house", + "processors": "cosmos:moon_village_processor", + "projection": "rigid" + }, + "weight": 2 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_village/structures/farm_t", + "processors": "cosmos:moon_village_processor", + "projection": "rigid" + }, + "weight": 1 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "moon_village/structures/farm_w", + "processors": "cosmos:moon_village_processor", + "projection": "rigid" + }, + "weight": 1 + } + ] + } } \ No newline at end of file diff --git a/Galacticraft.mcaddon b/Galacticraft.mcaddon new file mode 100644 index 00000000..5194bd74 Binary files /dev/null and b/Galacticraft.mcaddon differ diff --git a/RP/animation_controllers/fallen_meteor.animation_controllers.json b/RP/animation_controllers/fallen_meteor.animation_controllers.json index acffdf03..d7e03e38 100644 --- a/RP/animation_controllers/fallen_meteor.animation_controllers.json +++ b/RP/animation_controllers/fallen_meteor.animation_controllers.json @@ -1,25 +1,25 @@ -{ - "format_version": "1.10.0", - "animation_controllers": { - "controller.animation.fallen_meteor.cancel_death_animaton": { - "initial_state": "default", - "states": { - "default": { - "transitions": [ - { - "cancel_animation": "!q.is_alive" - } - ] - }, - "cancel_animation": { - "animations": ["fallen_meteor_death"], - "transitions": [ - { - "default": "q.is_alive && q.all_animations_finished" - } - ] - } - } - } - } +{ + "format_version": "1.10.0", + "animation_controllers": { + "controller.animation.fallen_meteor.cancel_death_animaton": { + "initial_state": "default", + "states": { + "default": { + "transitions": [ + { + "cancel_animation": "!q.is_alive" + } + ] + }, + "cancel_animation": { + "animations": ["fallen_meteor_death"], + "transitions": [ + { + "default": "q.is_alive && q.all_animations_finished" + } + ] + } + } + } + } } \ No newline at end of file diff --git a/RP/animations/moon_buggy.animation.json b/RP/animations/moon_buggy.animation.json index 4b76e935..d1d63961 100644 --- a/RP/animations/moon_buggy.animation.json +++ b/RP/animations/moon_buggy.animation.json @@ -1,56 +1,56 @@ -{ - "format_version": "1.8.0", - "animations": { - "animation.moon_buggy.rotation": { - "loop": true, - "bones": { - "entity": { - "rotation": [0, "v.rotation - 180", 0] - }, - "wheel_f_right": { - "rotation": ["query.property('cosmos:wheel_rotation_x')", "query.property('cosmos:wheel_rotation_y') - (query.property('cosmos:wheel_rotation_y') * 2)", 0] - }, - "wheel_f_left": { - "rotation": ["query.property('cosmos:wheel_rotation_x')", "query.property('cosmos:wheel_rotation_y') - (query.property('cosmos:wheel_rotation_y') * 2)", 0] - }, - "ramp_left": { - "rotation": [0, "query.property('cosmos:wheel_rotation_y') - (query.property('cosmos:wheel_rotation_y') * 2)", 0] - }, - "ramp_right": { - "rotation": [0, "query.property('cosmos:wheel_rotation_y') - (query.property('cosmos:wheel_rotation_y') * 2)", 0] - }, - "wheel_b_right": { - "rotation": ["query.property('cosmos:wheel_rotation_x')", "query.property('cosmos:wheel_rotation_y')", 0] - }, - "wheel_b_left": { - "rotation": ["query.property('cosmos:wheel_rotation_x')", "query.property('cosmos:wheel_rotation_y')", 0] - } - } - }, - "animation.moon_buggy.radar": { - "loop": true, - "animation_length": 6.6146, - "bones": { - "radar": { - "rotation": { - "0.0": [-30, 0, -70], - "1.5191": { - "pre": [9.54802, -18.91326, 52.50526], - "post": [9.54802, -18.91326, 52.50526], - "lerp_mode": "catmullrom" - }, - "3.1684": { - "post": [27.83729, 1.6116, -73.8861], - "lerp_mode": "catmullrom" - }, - "4.7309": { - "post": [9.12298, 8.23626, 56.94384], - "lerp_mode": "catmullrom" - }, - "6.5972": [-30, 0, -70] - } - } - } - } - } +{ + "format_version": "1.8.0", + "animations": { + "animation.moon_buggy.rotation": { + "loop": true, + "bones": { + "entity": { + "rotation": [0, "v.rotation - 180", 0] + }, + "wheel_f_right": { + "rotation": ["query.property('cosmos:wheel_rotation_x')", "query.property('cosmos:wheel_rotation_y') - (query.property('cosmos:wheel_rotation_y') * 2)", 0] + }, + "wheel_f_left": { + "rotation": ["query.property('cosmos:wheel_rotation_x')", "query.property('cosmos:wheel_rotation_y') - (query.property('cosmos:wheel_rotation_y') * 2)", 0] + }, + "ramp_left": { + "rotation": [0, "query.property('cosmos:wheel_rotation_y') - (query.property('cosmos:wheel_rotation_y') * 2)", 0] + }, + "ramp_right": { + "rotation": [0, "query.property('cosmos:wheel_rotation_y') - (query.property('cosmos:wheel_rotation_y') * 2)", 0] + }, + "wheel_b_right": { + "rotation": ["query.property('cosmos:wheel_rotation_x')", "query.property('cosmos:wheel_rotation_y')", 0] + }, + "wheel_b_left": { + "rotation": ["query.property('cosmos:wheel_rotation_x')", "query.property('cosmos:wheel_rotation_y')", 0] + } + } + }, + "animation.moon_buggy.radar": { + "loop": true, + "animation_length": 6.6146, + "bones": { + "radar": { + "rotation": { + "0.0": [-30, 0, -70], + "1.5191": { + "pre": [9.54802, -18.91326, 52.50526], + "post": [9.54802, -18.91326, 52.50526], + "lerp_mode": "catmullrom" + }, + "3.1684": { + "post": [27.83729, 1.6116, -73.8861], + "lerp_mode": "catmullrom" + }, + "4.7309": { + "post": [9.12298, 8.23626, 56.94384], + "lerp_mode": "catmullrom" + }, + "6.5972": [-30, 0, -70] + } + } + } + } + } } \ No newline at end of file diff --git a/RP/attachables/creative_battery.json b/RP/attachables/creative_battery.json new file mode 100644 index 00000000..e85641d9 --- /dev/null +++ b/RP/attachables/creative_battery.json @@ -0,0 +1,30 @@ +{ + "format_version": "1.10.0", + "minecraft:attachable": { + "description": { + "identifier": "cosmos:creative_battery", + "materials": { + "default": "entity_alphatest_glint", + "enchanted": "entity_alphatest_glint" + }, + "textures": { + "default": "textures/items/battery", + "enchanted": "textures/misc/enchanted_item_glint" + }, + "geometry": { + "default": "geometry.item_df" + }, + "animations": { + "hold": "animation.dungeon_finder.hold" + }, + "scripts": { + "animate": [ + "hold" + ] + }, + "render_controllers": [ + "controller.render.item_df" + ] + } + } +} diff --git a/RP/blocks.json b/RP/blocks.json index 78864b39..fa85f176 100644 --- a/RP/blocks.json +++ b/RP/blocks.json @@ -216,27 +216,6 @@ "sound": "stone", "textures": "ilmenite_ore" }, - - "oxygen_detector": { - "sound": "stone", - "textures": { - "side": "oxygen_detector", - "down": "machine_blank", - "up": "machine_blank" - } - }, - "air_lock_controller": { - "sound": "stone", - "textures": { - "side": "air_lock_controller", - "down": "air_lock_frame", - "up": "air_lock_frame" - } - }, - "air_lock_frame": { - "sound": "stone", - "textures": "air_lock_frame" - }, "telemetry_unit": { "sound": "stone", "textures": "telemetry_unit" diff --git a/RP/entity/block_entities/entity.advanced_compressor.json b/RP/entity/block_entities/entity.advanced_compressor.json new file mode 100644 index 00000000..3766c36f --- /dev/null +++ b/RP/entity/block_entities/entity.advanced_compressor.json @@ -0,0 +1,11 @@ +{ + "format_version": "1.10.0", + "minecraft:client_entity": { + "description": { + "identifier": "cosmos:advanced_compressor", + "materials": { + "default": "skeleton" + } + } + } +} \ No newline at end of file diff --git a/RP/entity/block_entities/entity.airlock_controller.json b/RP/entity/block_entities/entity.airlock_controller.json new file mode 100644 index 00000000..b46e20c9 --- /dev/null +++ b/RP/entity/block_entities/entity.airlock_controller.json @@ -0,0 +1,11 @@ +{ + "format_version": "1.10.0", + "minecraft:client_entity": { + "description": { + "identifier": "cosmos:airlock_controller", + "materials": { + "default": "skeleton" + } + } + } +} diff --git a/RP/entity/block_entities/entity.electric_arc_furnace.json b/RP/entity/block_entities/entity.electric_arc_furnace.json new file mode 100644 index 00000000..d1130afd --- /dev/null +++ b/RP/entity/block_entities/entity.electric_arc_furnace.json @@ -0,0 +1,11 @@ +{ + "format_version": "1.10.0", + "minecraft:client_entity": { + "description": { + "identifier": "cosmos:electric_arc_furnace", + "materials": { + "default": "skeleton" + } + } + } +} \ No newline at end of file diff --git a/RP/entity/entity.basic_solar_panel.json b/RP/entity/entity.basic_solar_panel.json new file mode 100644 index 00000000..8a79d431 --- /dev/null +++ b/RP/entity/entity.basic_solar_panel.json @@ -0,0 +1,28 @@ +{ + "format_version": "1.10.0", + "minecraft:client_entity": { + "description": { + "geometry": { + "default": "geometry.solar_panel" + }, + "identifier": "cosmos:basic_solar_panel", + "materials": { + "default": "skeleton" + }, + "render_controllers": [ + "controller.render.default" + ], + "textures": { + "default": "textures/entity/solar_panel_basic" + }, + "scripts": { + "animate": [ + "rotation" + ] + }, + "animations": { + "rotation": "animation.solar_panel.rotation" + } + } + } +} \ No newline at end of file diff --git a/RP/entity/entity.evolved_zombie.json b/RP/entity/entity.evolved_zombie.json new file mode 100644 index 00000000..4327e14b --- /dev/null +++ b/RP/entity/entity.evolved_zombie.json @@ -0,0 +1,98 @@ +{ + "format_version": "1.8.0", + "minecraft:client_entity": { + "description": { + "identifier": "cosmos:evolved_zombie", + "min_engine_version": "1.8.0", + "materials": { + "default": "zombie" + }, + "textures": { + "default": "textures/entity/evolved_zombie" + }, + "geometry": { + "default": "geometry.evolved_zombie" + }, + "spawn_egg": { + "base_color": "#00afaf", + "overlay_color": "#799c65" + }, + "scripts": { + "pre_animation": [ + "variable.tcos0 = (Math.cos(query.modified_distance_moved * 38.17) * query.modified_move_speed / variable.gliding_speed_value) * 57.3;" + ] + }, + "animations": { + "humanoid_big_head": "animation.humanoid.big_head", + "look_at_target_default": "animation.humanoid.look_at_target.default", + "look_at_target_gliding": "animation.humanoid.look_at_target.gliding", + "look_at_target_swimming": "animation.humanoid.look_at_target.swimming", + "move": "animation.humanoid.move", + "riding.arms": "animation.humanoid.riding.arms", + "riding.legs": "animation.humanoid.riding.legs", + "holding": "animation.humanoid.holding", + "brandish_spear": "animation.humanoid.brandish_spear", + "charging": "animation.humanoid.charging", + "attack.rotations": "animation.humanoid.attack.rotations", + "sneaking": "animation.humanoid.sneaking", + "bob": "animation.humanoid.bob", + "damage_nearby_mobs": "animation.humanoid.damage_nearby_mobs", + "bow_and_arrow": "animation.humanoid.bow_and_arrow", + "use_item_progress": "animation.humanoid.use_item_progress", + "zombie_attack_bare_hand": "animation.zombie.attack_bare_hand", + "swimming": "animation.zombie.swimming" + }, + "animation_controllers": [ + { + "humanoid_baby_big_head": "controller.animation.humanoid.baby_big_head" + }, + { + "look_at_target": "controller.animation.humanoid.look_at_target" + }, + { + "move": "controller.animation.humanoid.move" + }, + { + "riding": "controller.animation.humanoid.riding" + }, + { + "holding": "controller.animation.humanoid.holding" + }, + { + "brandish_spear": "controller.animation.humanoid.brandish_spear" + }, + { + "charging": "controller.animation.humanoid.charging" + }, + { + "attack": "controller.animation.humanoid.attack" + }, + { + "sneaking": "controller.animation.humanoid.sneaking" + }, + { + "bob": "controller.animation.humanoid.bob" + }, + { + "damage_nearby_mobs": "controller.animation.humanoid.damage_nearby_mobs" + }, + { + "bow_and_arrow": "controller.animation.humanoid.bow_and_arrow" + }, + { + "use_item_progress": "controller.animation.humanoid.use_item_progress" + }, + { + "zombie_attack_bare_hand": "controller.animation.zombie.attack_bare_hand" + }, + { + "swimming": "controller.animation.zombie.swimming" + } + ], + "render_controllers": [ + "controller.render.zombie" + ], + "enable_attachables": true + } + } +} \ No newline at end of file diff --git a/RP/entity/entity.moon_buggy.json b/RP/entity/entity.moon_buggy.json index 087f237f..fa1f1d90 100644 --- a/RP/entity/entity.moon_buggy.json +++ b/RP/entity/entity.moon_buggy.json @@ -1,47 +1,47 @@ -{ - "format_version": "1.10.0", - "minecraft:client_entity": { - "description": { - "identifier": "cosmos:moon_buggy", - "textures": { - "default": "textures/entity/moon_buggy" - }, - "materials": { - "default": "skeleton" - }, - "geometry": { - "default": "geometry.moon_buggy" - }, - "render_controllers": [ - "controller.render.buggy" - ], - "enable_attachables": false, - "hide_armor": true, - "scripts": { - "initialize": [ - "v.trs_struct.t.x = 0; v.trs_struct.t.y = 0; v.trs_struct.t.z = 0;", - "v.trs_struct.r.x = 0; v.trs_struct.r.y = 0; v.trs_struct.r.z = 0;", - "v.trs_struct.s.x = 0; v.trs_struct.s.y = 0; v.trs_struct.s.z = 0;", - - "v.body = v.trs_struct;", - - "v.is_rendered = false;", - "v.container_number = q.property('cosmos:container_number');" - ], - "pre_animation": [ - "v.is_rendered ? {v.body = q.bone_orientation_trs('entity');};", - "v.is_rendered = true;", - "t.old_rotation = (math.floor(v.body.r.z) == 180)? 360 - (v.body.r.y + 90): v.body.r.y + 90; t.old_rotation = t.old_rotation + 90; t.old_rotation = (t.old_rotation > 360)? t.old_rotation - 360: t.old_rotation; v.rotation = math.lerprotate(t.old_rotation, q.property('cosmos:rotation_y'), q.delta_time * 3.5);" - ], - "animate": [ - "rotation", - "radar" - ] - }, - "animations": { - "rotation": "animation.moon_buggy.rotation", - "radar": "animation.moon_buggy.radar" - } - } - } -} +{ + "format_version": "1.10.0", + "minecraft:client_entity": { + "description": { + "identifier": "cosmos:moon_buggy", + "textures": { + "default": "textures/entity/moon_buggy" + }, + "materials": { + "default": "skeleton" + }, + "geometry": { + "default": "geometry.moon_buggy" + }, + "render_controllers": [ + "controller.render.buggy" + ], + "enable_attachables": false, + "hide_armor": true, + "scripts": { + "initialize": [ + "v.trs_struct.t.x = 0; v.trs_struct.t.y = 0; v.trs_struct.t.z = 0;", + "v.trs_struct.r.x = 0; v.trs_struct.r.y = 0; v.trs_struct.r.z = 0;", + "v.trs_struct.s.x = 0; v.trs_struct.s.y = 0; v.trs_struct.s.z = 0;", + + "v.body = v.trs_struct;", + + "v.is_rendered = false;", + "v.container_number = q.property('cosmos:container_number');" + ], + "pre_animation": [ + "v.is_rendered ? {v.body = q.bone_orientation_trs('entity');};", + "v.is_rendered = true;", + "t.old_rotation = (math.floor(v.body.r.z) == 180)? 360 - (v.body.r.y + 90): v.body.r.y + 90; t.old_rotation = t.old_rotation + 90; t.old_rotation = (t.old_rotation > 360)? t.old_rotation - 360: t.old_rotation; v.rotation = math.lerprotate(t.old_rotation, q.property('cosmos:rotation_y'), q.delta_time * 3.5);" + ], + "animate": [ + "rotation", + "radar" + ] + }, + "animations": { + "rotation": "animation.moon_buggy.rotation", + "radar": "animation.moon_buggy.radar" + } + } + } +} diff --git a/RP/entity/entity.oxygen_distributor.json b/RP/entity/entity.oxygen_distributor.json new file mode 100644 index 00000000..aadce363 --- /dev/null +++ b/RP/entity/entity.oxygen_distributor.json @@ -0,0 +1,28 @@ +{ + "format_version": "1.10.0", + "minecraft:client_entity": { + "description": { + "identifier": "cosmos:oxygen_distributor", + "materials": { + "default": "beacon_beam_transparent" + }, + "textures": { + "default": "textures/entity/breatheable_air" + }, + "geometry": { + "default": "geometry.cosmos_sphere" + }, + "scripts": { + "animate": [ + "idle" + ] + }, + "animations": { + "idle": "animation.oxygen_distributor.idle" + }, + "render_controllers": [ + "controller.render.nasa_workbench" + ] + } + } +} \ No newline at end of file diff --git a/RP/entity/entity.parachute_chest_entity.json b/RP/entity/entity.parachute_chest_entity.json new file mode 100644 index 00000000..649aa906 --- /dev/null +++ b/RP/entity/entity.parachute_chest_entity.json @@ -0,0 +1,35 @@ +{ + "format_version": "1.10.0", + "minecraft:client_entity": { + "description": { + "identifier": "cosmos:parachute_chest_entity", + "textures": { + "parachute_black": "textures/parachute/black", + "parachute_blue": "textures/parachute/blue", + "parachute_brown": "textures/parachute/brown", + "parachute_darkblue": "textures/parachute/darkblue", + "parachute_darkgray": "textures/parachute/darkgray", + "parachute_darkgreen": "textures/parachute/darkgreen", + "parachute_gray": "textures/parachute/gray", + "parachute_lime": "textures/parachute/lime", + "parachute_magenta": "textures/parachute/magenta", + "parachute_orange": "textures/parachute/orange", + "parachute_pink": "textures/parachute/pink", + "parachute_plain": "textures/parachute/plain", + "parachute_purple": "textures/parachute/purple", + "parachute_red": "textures/parachute/red", + "parachute_teal": "textures/parachute/teal", + "parachute_yellow": "textures/parachute/yellow" + }, + "materials": { + "default": "skeleton" + }, + "geometry": { + "parachute": "geometry.para_chest_entity" + }, + "render_controllers": [ + "controller.render.parachute_chest_entity" + ] + } + } +} diff --git a/RP/models/blocks/solar_panel.geo.json b/RP/models/blocks/solar_panel.geo.json new file mode 100644 index 00000000..392bfe45 --- /dev/null +++ b/RP/models/blocks/solar_panel.geo.json @@ -0,0 +1,43 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.solar_panel", + "texture_width": 256, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "bb_main", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-1.5, 16, -1.5], "size": [3, 24, 3], "uv": [94, 50]} + ] + }, + { + "name": "bone", + "pivot": [0, 40, 0] + }, + { + "name": "bone2", + "parent": "bone", + "pivot": [0, 40, 0], + "cubes": [ + {"origin": [-23, 40, -23], "size": [46, 1, 46], "uv": [0, 0]}, + {"origin": [23, 40.611, -23], "size": [1, 1, 46], "uv": [0, 48]}, + {"origin": [-9, 40.611, -23], "size": [1, 1, 46], "uv": [0, 48]}, + {"origin": [8, 40.611, -23], "size": [1, 1, 46], "uv": [0, 48]}, + {"origin": [-24, 40.611, -23], "size": [1, 1, 46], "uv": [0, 48]}, + {"origin": [-24, 40.61, 23], "size": [48, 1, 1], "uv": [94, 48]}, + {"origin": [-24, 40.61, -24], "size": [48, 1, 1], "uv": [94, 48]}, + {"origin": [-24, 40.61, -0.5], "size": [48, 1, 1], "uv": [94, 48]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/RP/models/blocks/stairs.geo.json b/RP/models/blocks/stairs.geo.json new file mode 100644 index 00000000..b46f6536 --- /dev/null +++ b/RP/models/blocks/stairs.geo.json @@ -0,0 +1,173 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.cosmos.stairs", + "texture_width": 16, + "texture_height": 16, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [0, 0, 0] + }, + { + "name": "bot_ne", + "parent": "bone", + "pivot": [0, 0, 0], + "cubes": [ + { + "origin": [-8, 0, -8], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [0, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [8, 8], "uv_size": [8, 8]}, + "west": {"uv": [0, 8], "uv_size": [8, 8]}, + "up": {"uv": [16, 8], "uv_size": [-8, -8]}, + "down": {"uv": [16, 16], "uv_size": [-8, -8]} + } + } + ] + }, + { + "name": "bot_nw", + "parent": "bone", + "pivot": [0, 0, 0], + "cubes": [ + { + "origin": [0, 0, -8], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [8, 8], "uv_size": [8, 8]}, + "south": {"uv": [0, 8], "uv_size": [8, 8]}, + "west": {"uv": [0, 8], "uv_size": [8, 8]}, + "up": {"uv": [8, 8], "uv_size": [-8, -8]}, + "down": {"uv": [8, 16], "uv_size": [-8, -8]} + } + } + ] + }, + { + "name": "bot_se", + "parent": "bone", + "pivot": [0, 0, 0], + "cubes": [ + { + "origin": [-8, 0, 0], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [0, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [8, 8], "uv_size": [8, 8]}, + "west": {"uv": [8, 8], "uv_size": [8, 8]}, + "up": {"uv": [16, 16], "uv_size": [-8, -8]}, + "down": {"uv": [16, 8], "uv_size": [-8, -8]} + } + } + ] + }, + { + "name": "bot_sw", + "parent": "bone", + "pivot": [0, 0, 0], + "cubes": [ + { + "origin": [0, 0, 0], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [0, 8], "uv_size": [8, 8]}, + "west": {"uv": [8, 8], "uv_size": [8, 8]}, + "up": {"uv": [8, 16], "uv_size": [-8, -8]}, + "down": {"uv": [8, 8], "uv_size": [-8, -8]} + } + } + ] + }, + { + "name": "top_ne", + "parent": "bone", + "pivot": [0, 0, 0], + "cubes": [ + { + "origin": [-8, 8, -8], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [0, 0], "uv_size": [8, 8]}, + "east": {"uv": [8, 0], "uv_size": [8, 8]}, + "south": {"uv": [8, 0], "uv_size": [8, 8]}, + "west": {"uv": [0, 0], "uv_size": [8, 8]}, + "up": {"uv": [16, 8], "uv_size": [-8, -8]}, + "down": {"uv": [16, 16], "uv_size": [-8, -8]} + } + } + ] + }, + { + "name": "top_nw", + "parent": "bone", + "pivot": [0, 0, 0], + "cubes": [ + { + "origin": [0, 8, -8], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [8, 0], "uv_size": [8, 8]}, + "south": {"uv": [0, 0], "uv_size": [8, 8]}, + "west": {"uv": [0, 0], "uv_size": [8, 8]}, + "up": {"uv": [8, 8], "uv_size": [-8, -8]}, + "down": {"uv": [8, 16], "uv_size": [-8, -8]} + } + } + ] + }, + { + "name": "top_se", + "parent": "bone", + "pivot": [0, 0, 0], + "cubes": [ + { + "origin": [-8, 8, 0], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [0, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [8, 0], "uv_size": [8, 8]}, + "west": {"uv": [8, 0], "uv_size": [8, 8]}, + "up": {"uv": [16, 16], "uv_size": [-8, -8]}, + "down": {"uv": [16, 8], "uv_size": [-8, -8]} + } + } + ] + }, + { + "name": "top_sw", + "parent": "bone", + "pivot": [0, 0, 0], + "cubes": [ + { + "origin": [0, 8, 0], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [0, 0], "uv_size": [8, 8]}, + "west": {"uv": [8, 0], "uv_size": [8, 8]}, + "up": {"uv": [8, 16], "uv_size": [-8, -8]}, + "down": {"uv": [8, 8], "uv_size": [-8, -8]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/RP/models/entity/cosmos_sphere.geo.json b/RP/models/entity/cosmos_sphere.geo.json new file mode 100644 index 00000000..6a753671 --- /dev/null +++ b/RP/models/entity/cosmos_sphere.geo.json @@ -0,0 +1,1804 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.cosmos_sphere", + "texture_width": 16, + "texture_height": 16, + "visible_bounds_width": 1, + "visible_bounds_height": 1, + "visible_bounds_offset": [0, 0, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [0, 0, 0], + "poly_mesh": { + "normalized_uvs": true, + "positions": [ + [0.25889, 0.18809, 0], + [0.18809, 0.25889, 0], + [0.16946, 0.25889, -0.08161], + [0.30434, 0.09889, 0], + [0.23325, 0.18809, -0.11233], + [0.32, 0, 0], + [0.2742, 0.09889, -0.13205], + [0.30434, -0.09889, 0], + [0.28831, 0, -0.13884], + [0.25889, -0.18809, 0], + [0.23325, -0.18809, -0.11233], + [0.09889, 0.30434, 0], + [0.08909, 0.30434, -0.0429], + [0.19952, 0, -0.25019], + [0.2742, -0.09889, -0.13205], + [0.18975, -0.09889, -0.23794], + [0.16946, -0.25889, -0.08161], + [0.11727, -0.25889, -0.14706], + [0.06165, 0.30434, -0.07731], + [0.08909, -0.30434, -0.0429], + [0.16141, 0.18809, -0.2024], + [0.06165, -0.30434, -0.07731], + [0.04185, -0.25889, -0.18338], + [0.11727, 0.25889, -0.14706], + [0.04185, 0.25889, -0.18338], + [0.18975, 0.09889, -0.23794], + [0.05761, 0.18809, -0.25239], + [0.06772, 0.09889, -0.29671], + [0.06772, -0.09889, -0.29671], + [0.16141, -0.18809, -0.2024], + [0.05761, -0.18809, -0.25239], + [0.022, 0.30434, -0.09641], + [-0.06772, -0.09889, -0.29671], + [-0.05761, -0.18809, -0.25239], + [-0.04185, 0.25889, -0.18338], + [0.022, -0.30434, -0.09641], + [-0.04185, -0.25889, -0.18338], + [-0.06772, 0.09889, -0.29671], + [0.07121, 0, -0.31198], + [-0.05761, 0.18809, -0.25239], + [-0.18975, 0.09889, -0.23794], + [-0.07121, 0, -0.31198], + [-0.19952, 0, -0.25019], + [-0.18975, -0.09889, -0.23794], + [-0.11727, -0.25889, -0.14706], + [-0.022, 0.30434, -0.09641], + [-0.06165, 0.30434, -0.07731], + [-0.022, -0.30434, -0.09641], + [-0.11727, 0.25889, -0.14706], + [-0.16141, -0.18809, -0.2024], + [-0.16946, -0.25889, -0.08161], + [-0.08909, 0.30434, -0.0429], + [-0.06165, -0.30434, -0.07731], + [-0.16141, 0.18809, -0.2024], + [-0.16946, 0.25889, -0.08161], + [-0.2742, 0.09889, -0.13205], + [-0.28831, 0, -0.13884], + [-0.2742, -0.09889, -0.13205], + [-0.30434, 0.09889, 0], + [-0.30434, -0.09889, 0], + [-0.23325, -0.18809, -0.11233], + [-0.25889, -0.18809, 0], + [-0.09889, 0.30434, 0], + [-0.08909, -0.30434, -0.0429], + [-0.18809, -0.25889, 0], + [-0.23325, 0.18809, -0.11233], + [-0.18809, 0.25889, 0], + [-0.09889, -0.30434, 0], + [-0.16946, -0.25889, 0.08161], + [-0.25889, 0.18809, 0], + [-0.16946, 0.25889, 0.08161], + [-0.2742, 0.09889, 0.13205], + [-0.32, 0, 0], + [-0.2742, -0.09889, 0.13205], + [-0.23325, -0.18809, 0.11233], + [-0.08909, 0.30434, 0.0429], + [-0.28831, 0, 0.13884], + [-0.19952, 0, 0.25019], + [-0.18975, -0.09889, 0.23794], + [-0.16141, -0.18809, 0.2024], + [-0.06165, 0.30434, 0.07731], + [-0.08909, -0.30434, 0.0429], + [-0.11727, -0.25889, 0.14706], + [-0.23325, 0.18809, 0.11233], + [-0.11727, 0.25889, 0.14706], + [-0.16141, 0.18809, 0.2024], + [-0.18975, 0.09889, 0.23794], + [-0.05761, 0.18809, 0.25239], + [-0.06772, 0.09889, 0.29671], + [-0.06772, -0.09889, 0.29671], + [-0.04185, -0.25889, 0.18338], + [-0.04185, 0.25889, 0.18338], + [-0.06165, -0.30434, 0.07731], + [-0.022, -0.30434, 0.09641], + [-0.05761, -0.18809, 0.25239], + [0.04185, -0.25889, 0.18338], + [-0.022, 0.30434, 0.09641], + [0.022, 0.30434, 0.09641], + [0.04185, 0.25889, 0.18338], + [0.06772, 0.09889, 0.29671], + [-0.07121, 0, 0.31198], + [0.07121, 0, 0.31198], + [0.06772, -0.09889, 0.29671], + [0.19952, 0, 0.25019], + [0.05761, -0.18809, 0.25239], + [0.18975, -0.09889, 0.23794], + [0.16141, -0.18809, 0.2024], + [0.06165, 0.30434, 0.07731], + [0.022, -0.30434, 0.09641], + [0.11727, -0.25889, 0.14706], + [0.05761, 0.18809, 0.25239], + [0.11727, 0.25889, 0.14706], + [0.16141, 0.18809, 0.2024], + [0.06165, -0.30434, 0.07731], + [0.08909, -0.30434, 0.0429], + [0.16946, 0.25889, 0.08161], + [0.18975, 0.09889, 0.23794], + [0.23325, 0.18809, 0.11233], + [0.28831, 0, 0.13884], + [0.2742, -0.09889, 0.13205], + [0.16946, -0.25889, 0.08161], + [0.08909, 0.30434, 0.0429], + [0.09889, -0.30434, 0], + [0.18809, -0.25889, 0], + [0, -0.32, 0], + [0, 0.32, 0], + [0.23325, -0.18809, 0.11233], + [0.2742, 0.09889, 0.13205] + ], + "normals": [ + [-0.80457, 0.59274, 0.03649], + [-0.57276, 0.81963, -0.01218], + [-0.56094, 0.77959, -0.27853], + [-0.95265, 0.30387, 0.01098], + [-0.76691, 0.55771, -0.31751], + [-0.99858, 0.03038, -0.04378], + [-0.85327, 0.28169, -0.43885], + [-0.95354, -0.30126, 0], + [-0.91868, -0.03038, -0.39382], + [-0.79422, -0.60711, 0.0251], + [-0.73843, -0.57294, -0.35561], + [-0.35689, 0.93354, 0.03375], + [-0.33619, 0.93353, -0.12445], + [-0.62349, 0, -0.78183], + [-0.84403, -0.2772, -0.4591], + [-0.61522, -0.33509, -0.7136], + [-0.52133, -0.81963, -0.23753], + [-0.39637, -0.77959, -0.48489], + [-0.2489, 0.93354, -0.25799], + [-0.30691, -0.93353, -0.18526], + [-0.53017, 0.59274, -0.60628], + [-0.19613, -0.93353, -0.30007], + [-0.10679, -0.79506, -0.59705], + [-0.34758, 0.81963, -0.4554], + [-0.17857, 0.78386, -0.59471], + [-0.55881, 0.33509, -0.75858], + [-0.16829, 0.55793, -0.81265], + [-0.25978, 0.2772, -0.92503], + [-0.27988, -0.30314, -0.91092], + [-0.4802, -0.55771, -0.67703], + [-0.16118, -0.57787, -0.80005], + [-0.08485, 0.92445, -0.37175], + [0.1889, -0.28169, -0.94073], + [0.21461, -0.59274, -0.77627], + [0.09806, 0.80379, -0.58677], + [-0.04651, -0.93353, -0.35546], + [0.11557, -0.81963, -0.56111], + [0.14307, 0.30314, -0.94215], + [-0.1504, 0, -0.98863], + [0.24073, 0.57692, -0.78052], + [0.53768, 0.30314, -0.78677], + [0.26489, 0.03038, -0.9638], + [0.62349, 0, -0.78183], + [0.60256, -0.30387, -0.73796], + [0.34042, -0.7945, -0.50288], + [0.06876, 0.95106, -0.30127], + [0.19613, 0.93354, -0.30007], + [0.11232, -0.93353, -0.34044], + [0.35527, 0.79506, -0.49159], + [0.55554, -0.57692, -0.59878], + [0.56094, -0.77959, -0.27853], + [0.30691, 0.93354, -0.18526], + [0.2489, -0.93354, -0.25799], + [0.55554, 0.57692, -0.59878], + [0.53338, 0.79506, -0.28876], + [0.8258, 0.30314, -0.47556], + [0.91403, -0.02196, -0.40505], + [0.83261, -0.33509, -0.441], + [0.95036, 0.30314, -0.07016], + [0.95036, -0.30314, -0.07016], + [0.76691, -0.55771, -0.31751], + [0.81586, -0.57787, 0.02089], + [0.35689, 0.93354, -0.03375], + [0.33619, -0.93354, -0.12444], + [0.60585, -0.79506, 0.02874], + [0.76033, 0.57692, -0.29844], + [0.60584, 0.79506, -0.02874], + [0.35689, -0.93354, 0.03375], + [0.53338, -0.79506, 0.28876], + [0.81452, 0.57692, 0.06101], + [0.55832, 0.79506, 0.23697], + [0.8674, 0.32327, 0.3783], + [0.99731, 0, 0.07336], + [0.87511, -0.28169, 0.39349], + [0.726, -0.57787, 0.37281], + [0.33619, 0.93354, 0.12445], + [0.88069, 0.03038, 0.47271], + [0.59828, -0.02196, 0.80099], + [0.61522, -0.33509, 0.7136], + [0.47311, -0.59274, 0.65179], + [0.23774, 0.92445, 0.29812], + [0.30691, -0.93354, 0.18526], + [0.34966, -0.82794, 0.43846], + [0.70468, 0.60711, 0.36722], + [0.39822, 0.76946, 0.49935], + [0.5532, 0.55771, 0.61881], + [0.60256, 0.30387, 0.73796], + [0.18238, 0.57295, 0.79904], + [0.21506, 0.25673, 0.94225], + [0.23798, -0.28169, 0.92953], + [0.17857, -0.78385, 0.59471], + [0.12479, 0.82795, 0.54675], + [0.19267, -0.95106, 0.2416], + [0.08485, -0.92445, 0.37175], + [0.12177, -0.57692, 0.80767], + [-0.13197, -0.77959, 0.61222], + [0.06876, 0.95106, 0.30127], + [-0.04652, 0.93354, 0.35546], + [-0.10679, 0.79506, 0.59705], + [-0.24505, 0.32327, 0.91403], + [0.22252, 0, 0.97493], + [-0.1504, 0, 0.98863], + [-0.22269, -0.30387, 0.92632], + [-0.59828, -0.02196, 0.80099], + [-0.22992, -0.55771, 0.79755], + [-0.55881, -0.33509, 0.75858], + [-0.53017, -0.59274, 0.60628], + [-0.19613, 0.93354, 0.30007], + [-0.11232, -0.93353, 0.34044], + [-0.34966, -0.82794, 0.43846], + [-0.2012, 0.60711, 0.76872], + [-0.35527, 0.79506, 0.49159], + [-0.49235, 0.57787, 0.65089], + [-0.19267, -0.95106, 0.2416], + [-0.30691, -0.93353, 0.18526], + [-0.56751, 0.77959, 0.2649], + [-0.6474, 0.30314, 0.69927], + [-0.7264, 0.55771, 0.40163], + [-0.91403, 0.02196, 0.40504], + [-0.8258, -0.30314, 0.47556], + [-0.56751, -0.77959, 0.2649], + [-0.30691, 0.93354, 0.18526], + [-0.38131, -0.92445, 0], + [-0.61954, -0.78385, -0.04176], + [0, -1, 0], + [0, 1, 0], + [-0.76691, -0.55771, 0.31751], + [-0.86391, 0.33509, 0.376] + ], + "uvs": [ + [0, 0], + [1, 0], + [1, 1], + [0, 1] + ], + "polys": [ + [ + [0, 0, 0], + [1, 1, 1], + [2, 2, 2], + [0, 0, 0] + ], + [ + [5, 5, 0], + [3, 3, 1], + [6, 6, 2], + [5, 5, 0] + ], + [ + [7, 7, 0], + [5, 5, 1], + [8, 8, 2], + [7, 7, 0] + ], + [ + [9, 9, 0], + [7, 7, 1], + [10, 10, 3], + [9, 9, 0] + ], + [ + [1, 1, 0], + [11, 11, 1], + [12, 12, 2], + [1, 1, 0] + ], + [ + [8, 8, 0], + [6, 6, 1], + [13, 13, 3], + [8, 8, 0] + ], + [ + [14, 14, 0], + [8, 8, 1], + [13, 13, 2], + [14, 14, 0] + ], + [ + [10, 10, 0], + [14, 14, 1], + [15, 15, 2], + [10, 10, 0] + ], + [ + [16, 16, 0], + [10, 10, 1], + [17, 17, 3], + [16, 16, 0] + ], + [ + [2, 2, 0], + [12, 12, 1], + [18, 18, 2], + [2, 2, 0] + ], + [ + [19, 19, 0], + [16, 16, 1], + [17, 17, 2], + [19, 19, 0] + ], + [ + [4, 4, 0], + [2, 2, 1], + [20, 20, 3], + [4, 4, 0] + ], + [ + [6, 6, 0], + [4, 4, 1], + [20, 20, 2], + [6, 6, 0] + ], + [ + [21, 21, 0], + [17, 17, 1], + [22, 22, 2], + [21, 21, 0] + ], + [ + [20, 20, 0], + [23, 23, 1], + [24, 24, 2], + [20, 20, 0] + ], + [ + [25, 25, 0], + [20, 20, 1], + [26, 26, 2], + [25, 25, 0] + ], + [ + [13, 13, 0], + [25, 25, 1], + [27, 27, 2], + [13, 13, 0] + ], + [ + [15, 15, 0], + [13, 13, 1], + [28, 28, 3], + [15, 15, 0] + ], + [ + [29, 29, 0], + [15, 15, 1], + [28, 28, 2], + [29, 29, 0] + ], + [ + [17, 17, 0], + [29, 29, 1], + [30, 30, 2], + [17, 17, 0] + ], + [ + [23, 23, 0], + [18, 18, 1], + [31, 31, 2], + [23, 23, 0] + ], + [ + [30, 30, 0], + [28, 28, 1], + [32, 32, 2], + [30, 30, 0] + ], + [ + [22, 22, 0], + [30, 30, 1], + [33, 33, 2], + [22, 22, 0] + ], + [ + [24, 24, 0], + [31, 31, 1], + [34, 34, 3], + [24, 24, 0] + ], + [ + [35, 35, 0], + [22, 22, 1], + [36, 36, 2], + [35, 35, 0] + ], + [ + [26, 26, 0], + [24, 24, 1], + [34, 34, 2], + [26, 26, 0] + ], + [ + [27, 27, 0], + [26, 26, 1], + [37, 37, 3], + [27, 27, 0] + ], + [ + [38, 38, 0], + [27, 27, 1], + [37, 37, 2], + [38, 38, 0] + ], + [ + [28, 28, 0], + [38, 38, 1], + [32, 32, 3], + [28, 28, 0] + ], + [ + [37, 37, 0], + [39, 39, 1], + [40, 40, 3], + [37, 37, 0] + ], + [ + [41, 41, 0], + [37, 37, 1], + [40, 40, 2], + [41, 41, 0] + ], + [ + [32, 32, 0], + [41, 41, 1], + [42, 42, 2], + [32, 32, 0] + ], + [ + [33, 33, 0], + [32, 32, 1], + [43, 43, 2], + [33, 33, 0] + ], + [ + [36, 36, 0], + [33, 33, 1], + [44, 44, 3], + [36, 36, 0] + ], + [ + [34, 34, 0], + [45, 45, 1], + [46, 46, 2], + [34, 34, 0] + ], + [ + [47, 47, 0], + [36, 36, 1], + [44, 44, 2], + [47, 47, 0] + ], + [ + [39, 39, 0], + [34, 34, 1], + [48, 48, 2], + [39, 39, 0] + ], + [ + [44, 44, 0], + [49, 49, 1], + [50, 50, 3], + [44, 44, 0] + ], + [ + [48, 48, 0], + [46, 46, 1], + [51, 51, 2], + [48, 48, 0] + ], + [ + [52, 52, 0], + [44, 44, 1], + [50, 50, 2], + [52, 52, 0] + ], + [ + [53, 53, 0], + [48, 48, 1], + [54, 54, 2], + [53, 53, 0] + ], + [ + [40, 40, 0], + [53, 53, 1], + [55, 55, 3], + [40, 40, 0] + ], + [ + [42, 42, 0], + [40, 40, 1], + [55, 55, 2], + [42, 42, 0] + ], + [ + [43, 43, 0], + [42, 42, 1], + [56, 56, 2], + [43, 43, 0] + ], + [ + [49, 49, 0], + [43, 43, 1], + [57, 57, 2], + [49, 49, 0] + ], + [ + [56, 56, 0], + [55, 55, 1], + [58, 58, 2], + [56, 56, 0] + ], + [ + [57, 57, 0], + [56, 56, 1], + [59, 59, 3], + [57, 57, 0] + ], + [ + [60, 60, 0], + [57, 57, 1], + [59, 59, 2], + [60, 60, 0] + ], + [ + [50, 50, 0], + [60, 60, 1], + [61, 61, 2], + [50, 50, 0] + ], + [ + [54, 54, 0], + [51, 51, 1], + [62, 62, 2], + [54, 54, 0] + ], + [ + [63, 63, 0], + [50, 50, 1], + [64, 64, 2], + [63, 63, 0] + ], + [ + [65, 65, 0], + [54, 54, 1], + [66, 66, 2], + [65, 65, 0] + ], + [ + [55, 55, 0], + [65, 65, 1], + [58, 58, 3], + [55, 55, 0] + ], + [ + [67, 67, 0], + [64, 64, 1], + [68, 68, 2], + [67, 67, 0] + ], + [ + [69, 69, 0], + [66, 66, 1], + [70, 70, 2], + [69, 69, 0] + ], + [ + [58, 58, 0], + [69, 69, 1], + [71, 71, 3], + [58, 58, 0] + ], + [ + [72, 72, 0], + [58, 58, 1], + [71, 71, 2], + [72, 72, 0] + ], + [ + [59, 59, 0], + [72, 72, 1], + [73, 73, 3], + [59, 59, 0] + ], + [ + [61, 61, 0], + [59, 59, 1], + [73, 73, 2], + [61, 61, 0] + ], + [ + [64, 64, 0], + [61, 61, 1], + [74, 74, 2], + [64, 64, 0] + ], + [ + [66, 66, 0], + [62, 62, 1], + [75, 75, 2], + [66, 66, 0] + ], + [ + [73, 73, 0], + [76, 76, 1], + [77, 77, 2], + [73, 73, 0] + ], + [ + [74, 74, 0], + [73, 73, 1], + [78, 78, 2], + [74, 74, 0] + ], + [ + [68, 68, 0], + [74, 74, 1], + [79, 79, 2], + [68, 68, 0] + ], + [ + [70, 70, 0], + [75, 75, 1], + [80, 80, 2], + [70, 70, 0] + ], + [ + [81, 81, 0], + [68, 68, 1], + [82, 82, 2], + [81, 81, 0] + ], + [ + [83, 83, 0], + [70, 70, 1], + [84, 84, 2], + [83, 83, 0] + ], + [ + [71, 71, 0], + [83, 83, 1], + [85, 85, 2], + [71, 71, 0] + ], + [ + [76, 76, 0], + [71, 71, 1], + [86, 86, 2], + [76, 76, 0] + ], + [ + [86, 86, 0], + [85, 85, 1], + [87, 87, 2], + [86, 86, 0] + ], + [ + [77, 77, 0], + [86, 86, 1], + [88, 88, 2], + [77, 77, 0] + ], + [ + [78, 78, 0], + [77, 77, 1], + [89, 89, 3], + [78, 78, 0] + ], + [ + [79, 79, 0], + [78, 78, 1], + [89, 89, 2], + [79, 79, 0] + ], + [ + [82, 82, 0], + [79, 79, 1], + [90, 90, 3], + [82, 82, 0] + ], + [ + [84, 84, 0], + [80, 80, 1], + [91, 91, 3], + [84, 84, 0] + ], + [ + [92, 92, 0], + [82, 82, 1], + [93, 93, 3], + [92, 92, 0] + ], + [ + [85, 85, 0], + [84, 84, 1], + [87, 87, 3], + [85, 85, 0] + ], + [ + [90, 90, 0], + [94, 94, 1], + [95, 95, 3], + [90, 90, 0] + ], + [ + [91, 91, 0], + [96, 96, 1], + [97, 97, 2], + [91, 91, 0] + ], + [ + [93, 93, 0], + [90, 90, 1], + [95, 95, 2], + [93, 93, 0] + ], + [ + [87, 87, 0], + [91, 91, 1], + [98, 98, 2], + [87, 87, 0] + ], + [ + [88, 88, 0], + [87, 87, 1], + [99, 99, 3], + [88, 88, 0] + ], + [ + [100, 100, 0], + [88, 88, 1], + [101, 101, 3], + [100, 100, 0] + ], + [ + [89, 89, 0], + [100, 100, 1], + [101, 101, 2], + [89, 89, 0] + ], + [ + [94, 94, 0], + [89, 89, 1], + [102, 102, 2], + [94, 94, 0] + ], + [ + [101, 101, 0], + [99, 99, 1], + [103, 103, 3], + [101, 101, 0] + ], + [ + [102, 102, 0], + [101, 101, 1], + [103, 103, 2], + [102, 102, 0] + ], + [ + [104, 104, 0], + [102, 102, 1], + [105, 105, 2], + [104, 104, 0] + ], + [ + [95, 95, 0], + [104, 104, 1], + [106, 106, 2], + [95, 95, 0] + ], + [ + [98, 98, 0], + [97, 97, 1], + [107, 107, 2], + [98, 98, 0] + ], + [ + [108, 108, 0], + [95, 95, 1], + [109, 109, 2], + [108, 108, 0] + ], + [ + [110, 110, 0], + [98, 98, 1], + [111, 111, 2], + [110, 110, 0] + ], + [ + [99, 99, 0], + [110, 110, 1], + [112, 112, 2], + [99, 99, 0] + ], + [ + [113, 113, 0], + [109, 109, 1], + [114, 114, 3], + [113, 113, 0] + ], + [ + [112, 112, 0], + [111, 111, 1], + [115, 115, 2], + [112, 112, 0] + ], + [ + [116, 116, 0], + [112, 112, 1], + [117, 117, 2], + [116, 116, 0] + ], + [ + [103, 103, 0], + [116, 116, 1], + [118, 118, 3], + [103, 103, 0] + ], + [ + [105, 105, 0], + [103, 103, 1], + [119, 119, 3], + [105, 105, 0] + ], + [ + [106, 106, 0], + [105, 105, 1], + [119, 119, 2], + [106, 106, 0] + ], + [ + [109, 109, 0], + [106, 106, 1], + [120, 120, 3], + [109, 109, 0] + ], + [ + [111, 111, 0], + [107, 107, 1], + [121, 121, 2], + [111, 111, 0] + ], + [ + [122, 122, 0], + [123, 123, 1], + [16, 16, 2], + [122, 122, 0] + ], + [ + [124, 124, 0], + [122, 122, 1], + [19, 19, 2], + [124, 124, 0] + ], + [ + [11, 11, 0], + [125, 125, 1], + [12, 12, 2], + [11, 11, 0] + ], + [ + [123, 123, 0], + [9, 9, 1], + [10, 10, 2], + [123, 123, 0] + ], + [ + [12, 12, 0], + [125, 125, 1], + [18, 18, 2], + [12, 12, 0] + ], + [ + [124, 124, 0], + [19, 19, 1], + [21, 21, 2], + [124, 124, 0] + ], + [ + [124, 124, 0], + [21, 21, 1], + [35, 35, 2], + [124, 124, 0] + ], + [ + [18, 18, 0], + [125, 125, 1], + [31, 31, 2], + [18, 18, 0] + ], + [ + [31, 31, 0], + [125, 125, 1], + [45, 45, 2], + [31, 31, 0] + ], + [ + [124, 124, 0], + [35, 35, 1], + [47, 47, 2], + [124, 124, 0] + ], + [ + [124, 124, 0], + [47, 47, 1], + [52, 52, 2], + [124, 124, 0] + ], + [ + [45, 45, 0], + [125, 125, 1], + [46, 46, 2], + [45, 45, 0] + ], + [ + [124, 124, 0], + [52, 52, 1], + [63, 63, 2], + [124, 124, 0] + ], + [ + [46, 46, 0], + [125, 125, 1], + [51, 51, 2], + [46, 46, 0] + ], + [ + [51, 51, 0], + [125, 125, 1], + [62, 62, 2], + [51, 51, 0] + ], + [ + [124, 124, 0], + [63, 63, 1], + [67, 67, 2], + [124, 124, 0] + ], + [ + [124, 124, 0], + [67, 67, 1], + [81, 81, 2], + [124, 124, 0] + ], + [ + [62, 62, 0], + [125, 125, 1], + [75, 75, 2], + [62, 62, 0] + ], + [ + [75, 75, 0], + [125, 125, 1], + [80, 80, 2], + [75, 75, 0] + ], + [ + [124, 124, 0], + [81, 81, 1], + [92, 92, 2], + [124, 124, 0] + ], + [ + [124, 124, 0], + [92, 92, 1], + [93, 93, 2], + [124, 124, 0] + ], + [ + [80, 80, 0], + [125, 125, 1], + [96, 96, 2], + [80, 80, 0] + ], + [ + [96, 96, 0], + [125, 125, 1], + [97, 97, 2], + [96, 96, 0] + ], + [ + [124, 124, 0], + [93, 93, 1], + [108, 108, 2], + [124, 124, 0] + ], + [ + [97, 97, 0], + [125, 125, 1], + [107, 107, 2], + [97, 97, 0] + ], + [ + [124, 124, 0], + [108, 108, 1], + [113, 113, 2], + [124, 124, 0] + ], + [ + [124, 124, 0], + [113, 113, 1], + [114, 114, 2], + [124, 124, 0] + ], + [ + [107, 107, 0], + [125, 125, 1], + [121, 121, 2], + [107, 107, 0] + ], + [ + [119, 119, 0], + [118, 118, 1], + [7, 7, 3], + [119, 119, 0] + ], + [ + [126, 126, 0], + [119, 119, 1], + [7, 7, 2], + [126, 126, 0] + ], + [ + [121, 121, 0], + [125, 125, 1], + [11, 11, 2], + [121, 121, 0] + ], + [ + [120, 120, 0], + [126, 126, 1], + [9, 9, 2], + [120, 120, 0] + ], + [ + [115, 115, 0], + [121, 121, 1], + [11, 11, 2], + [115, 115, 0] + ], + [ + [114, 114, 0], + [120, 120, 1], + [122, 122, 3], + [114, 114, 0] + ], + [ + [117, 117, 0], + [115, 115, 1], + [0, 0, 3], + [117, 117, 0] + ], + [ + [124, 124, 0], + [114, 114, 1], + [122, 122, 2], + [124, 124, 0] + ], + [ + [127, 127, 0], + [117, 117, 1], + [0, 0, 2], + [127, 127, 0] + ], + [ + [118, 118, 0], + [127, 127, 1], + [3, 3, 2], + [118, 118, 0] + ], + [ + [4, 4, 3], + [0, 0, 0], + [2, 2, 2], + [4, 4, 3] + ], + [ + [6, 6, 3], + [3, 3, 0], + [4, 4, 2], + [6, 6, 3] + ], + [ + [8, 8, 3], + [5, 5, 0], + [6, 6, 2], + [8, 8, 3] + ], + [ + [14, 14, 3], + [7, 7, 0], + [8, 8, 2], + [14, 14, 3] + ], + [ + [116, 116, 1], + [127, 127, 2], + [118, 118, 3], + [116, 116, 1] + ], + [ + [2, 2, 3], + [1, 1, 0], + [12, 12, 2], + [2, 2, 3] + ], + [ + [80, 80, 1], + [96, 96, 2], + [91, 91, 3], + [80, 80, 1] + ], + [ + [15, 15, 3], + [14, 14, 0], + [13, 13, 2], + [15, 15, 3] + ], + [ + [29, 29, 3], + [10, 10, 0], + [15, 15, 2], + [29, 29, 3] + ], + [ + [79, 79, 1], + [94, 94, 2], + [90, 90, 3], + [79, 79, 1] + ], + [ + [23, 23, 3], + [2, 2, 0], + [18, 18, 2], + [23, 23, 3] + ], + [ + [21, 21, 3], + [19, 19, 0], + [17, 17, 2], + [21, 21, 3] + ], + [ + [49, 49, 1], + [60, 60, 2], + [50, 50, 3], + [49, 49, 1] + ], + [ + [25, 25, 3], + [6, 6, 0], + [20, 20, 2], + [25, 25, 3] + ], + [ + [35, 35, 3], + [21, 21, 0], + [22, 22, 2], + [35, 35, 3] + ], + [ + [26, 26, 3], + [20, 20, 0], + [24, 24, 2], + [26, 26, 3] + ], + [ + [27, 27, 3], + [25, 25, 0], + [26, 26, 2], + [27, 27, 3] + ], + [ + [38, 38, 3], + [13, 13, 0], + [27, 27, 2], + [38, 38, 3] + ], + [ + [118, 118, 1], + [5, 5, 2], + [7, 7, 3], + [118, 118, 1] + ], + [ + [30, 30, 3], + [29, 29, 0], + [28, 28, 2], + [30, 30, 3] + ], + [ + [22, 22, 3], + [17, 17, 0], + [30, 30, 2], + [22, 22, 3] + ], + [ + [24, 24, 3], + [23, 23, 0], + [31, 31, 2], + [24, 24, 3] + ], + [ + [33, 33, 3], + [30, 30, 0], + [32, 32, 2], + [33, 33, 3] + ], + [ + [36, 36, 3], + [22, 22, 0], + [33, 33, 2], + [36, 36, 3] + ], + [ + [88, 88, 1], + [99, 99, 2], + [101, 101, 3], + [88, 88, 1] + ], + [ + [47, 47, 3], + [35, 35, 0], + [36, 36, 2], + [47, 47, 3] + ], + [ + [39, 39, 3], + [26, 26, 0], + [34, 34, 2], + [39, 39, 3] + ], + [ + [87, 87, 1], + [110, 110, 2], + [99, 99, 3], + [87, 87, 1] + ], + [ + [41, 41, 3], + [38, 38, 0], + [37, 37, 2], + [41, 41, 3] + ], + [ + [84, 84, 1], + [91, 91, 2], + [87, 87, 3], + [84, 84, 1] + ], + [ + [65, 65, 1], + [69, 69, 2], + [58, 58, 3], + [65, 65, 1] + ], + [ + [42, 42, 3], + [41, 41, 0], + [40, 40, 2], + [42, 42, 3] + ], + [ + [43, 43, 3], + [32, 32, 0], + [42, 42, 2], + [43, 43, 3] + ], + [ + [49, 49, 3], + [33, 33, 0], + [43, 43, 2], + [49, 49, 3] + ], + [ + [31, 31, 1], + [45, 45, 2], + [34, 34, 3], + [31, 31, 1] + ], + [ + [48, 48, 3], + [34, 34, 0], + [46, 46, 2], + [48, 48, 3] + ], + [ + [52, 52, 3], + [47, 47, 0], + [44, 44, 2], + [52, 52, 3] + ], + [ + [53, 53, 3], + [39, 39, 0], + [48, 48, 2], + [53, 53, 3] + ], + [ + [120, 120, 1], + [123, 123, 2], + [122, 122, 3], + [120, 120, 1] + ], + [ + [54, 54, 3], + [48, 48, 0], + [51, 51, 2], + [54, 54, 3] + ], + [ + [63, 63, 3], + [52, 52, 0], + [50, 50, 2], + [63, 63, 3] + ], + [ + [65, 65, 3], + [53, 53, 0], + [54, 54, 2], + [65, 65, 3] + ], + [ + [72, 72, 1], + [76, 76, 2], + [73, 73, 3], + [72, 72, 1] + ], + [ + [56, 56, 3], + [42, 42, 0], + [55, 55, 2], + [56, 56, 3] + ], + [ + [57, 57, 3], + [43, 43, 0], + [56, 56, 2], + [57, 57, 3] + ], + [ + [60, 60, 3], + [49, 49, 0], + [57, 57, 2], + [60, 60, 3] + ], + [ + [72, 72, 3], + [56, 56, 0], + [58, 58, 2], + [72, 72, 3] + ], + [ + [13, 13, 1], + [38, 38, 2], + [28, 28, 3], + [13, 13, 1] + ], + [ + [61, 61, 3], + [60, 60, 0], + [59, 59, 2], + [61, 61, 3] + ], + [ + [64, 64, 3], + [50, 50, 0], + [61, 61, 2], + [64, 64, 3] + ], + [ + [66, 66, 3], + [54, 54, 0], + [62, 62, 2], + [66, 66, 3] + ], + [ + [67, 67, 3], + [63, 63, 0], + [64, 64, 2], + [67, 67, 3] + ], + [ + [69, 69, 3], + [65, 65, 0], + [66, 66, 2], + [69, 69, 3] + ], + [ + [69, 69, 1], + [83, 83, 2], + [71, 71, 3], + [69, 69, 1] + ], + [ + [81, 81, 3], + [67, 67, 0], + [68, 68, 2], + [81, 81, 3] + ], + [ + [83, 83, 3], + [69, 69, 0], + [70, 70, 2], + [83, 83, 3] + ], + [ + [6, 6, 1], + [25, 25, 2], + [13, 13, 3], + [6, 6, 1] + ], + [ + [76, 76, 3], + [72, 72, 0], + [71, 71, 2], + [76, 76, 3] + ], + [ + [39, 39, 1], + [53, 53, 2], + [40, 40, 3], + [39, 39, 1] + ], + [ + [74, 74, 3], + [61, 61, 0], + [73, 73, 2], + [74, 74, 3] + ], + [ + [68, 68, 3], + [64, 64, 0], + [74, 74, 2], + [68, 68, 3] + ], + [ + [70, 70, 3], + [66, 66, 0], + [75, 75, 2], + [70, 70, 3] + ], + [ + [78, 78, 3], + [73, 73, 0], + [77, 77, 2], + [78, 78, 3] + ], + [ + [79, 79, 3], + [74, 74, 0], + [78, 78, 2], + [79, 79, 3] + ], + [ + [82, 82, 3], + [68, 68, 0], + [79, 79, 2], + [82, 82, 3] + ], + [ + [84, 84, 3], + [70, 70, 0], + [80, 80, 2], + [84, 84, 3] + ], + [ + [92, 92, 3], + [81, 81, 0], + [82, 82, 2], + [92, 92, 3] + ], + [ + [85, 85, 3], + [83, 83, 0], + [84, 84, 2], + [85, 85, 3] + ], + [ + [86, 86, 3], + [71, 71, 0], + [85, 85, 2], + [86, 86, 3] + ], + [ + [77, 77, 3], + [76, 76, 0], + [86, 86, 2], + [77, 77, 3] + ], + [ + [88, 88, 3], + [86, 86, 0], + [87, 87, 2], + [88, 88, 3] + ], + [ + [100, 100, 3], + [77, 77, 0], + [88, 88, 2], + [100, 100, 3] + ], + [ + [115, 115, 1], + [1, 1, 2], + [0, 0, 3], + [115, 115, 1] + ], + [ + [94, 94, 3], + [79, 79, 0], + [89, 89, 2], + [94, 94, 3] + ], + [ + [26, 26, 1], + [39, 39, 2], + [37, 37, 3], + [26, 26, 1] + ], + [ + [10, 10, 1], + [29, 29, 2], + [17, 17, 3], + [10, 10, 1] + ], + [ + [109, 109, 1], + [120, 120, 2], + [114, 114, 3], + [109, 109, 1] + ], + [ + [82, 82, 1], + [90, 90, 2], + [93, 93, 3], + [82, 82, 1] + ], + [ + [98, 98, 3], + [91, 91, 0], + [97, 97, 2], + [98, 98, 3] + ], + [ + [108, 108, 3], + [93, 93, 0], + [95, 95, 2], + [108, 108, 3] + ], + [ + [110, 110, 3], + [87, 87, 0], + [98, 98, 2], + [110, 110, 3] + ], + [ + [56, 56, 1], + [72, 72, 2], + [59, 59, 3], + [56, 56, 1] + ], + [ + [38, 38, 1], + [41, 41, 2], + [32, 32, 3], + [38, 38, 1] + ], + [ + [102, 102, 3], + [89, 89, 0], + [101, 101, 2], + [102, 102, 3] + ], + [ + [104, 104, 3], + [94, 94, 0], + [102, 102, 2], + [104, 104, 3] + ], + [ + [94, 94, 1], + [104, 104, 2], + [95, 95, 3], + [94, 94, 1] + ], + [ + [105, 105, 3], + [102, 102, 0], + [103, 103, 2], + [105, 105, 3] + ], + [ + [106, 106, 3], + [104, 104, 0], + [105, 105, 2], + [106, 106, 3] + ], + [ + [109, 109, 3], + [95, 95, 0], + [106, 106, 2], + [109, 109, 3] + ], + [ + [111, 111, 3], + [98, 98, 0], + [107, 107, 2], + [111, 111, 3] + ], + [ + [113, 113, 3], + [108, 108, 0], + [109, 109, 2], + [113, 113, 3] + ], + [ + [112, 112, 3], + [110, 110, 0], + [111, 111, 2], + [112, 112, 3] + ], + [ + [116, 116, 3], + [99, 99, 0], + [112, 112, 2], + [116, 116, 3] + ], + [ + [7, 7, 1], + [14, 14, 2], + [10, 10, 3], + [7, 7, 1] + ], + [ + [117, 117, 3], + [112, 112, 0], + [115, 115, 2], + [117, 117, 3] + ], + [ + [127, 127, 3], + [116, 116, 0], + [117, 117, 2], + [127, 127, 3] + ], + [ + [33, 33, 1], + [49, 49, 2], + [44, 44, 3], + [33, 33, 1] + ], + [ + [106, 106, 1], + [126, 126, 2], + [120, 120, 3], + [106, 106, 1] + ], + [ + [126, 126, 3], + [106, 106, 0], + [119, 119, 2], + [126, 126, 3] + ], + [ + [77, 77, 1], + [100, 100, 2], + [89, 89, 3], + [77, 77, 1] + ], + [ + [115, 115, 3], + [111, 111, 0], + [121, 121, 2], + [115, 115, 3] + ], + [ + [19, 19, 3], + [122, 122, 0], + [16, 16, 2], + [19, 19, 3] + ], + [ + [16, 16, 3], + [123, 123, 0], + [10, 10, 2], + [16, 16, 3] + ], + [ + [103, 103, 1], + [118, 118, 2], + [119, 119, 3], + [103, 103, 1] + ], + [ + [9, 9, 3], + [126, 126, 0], + [7, 7, 2], + [9, 9, 3] + ], + [ + [123, 123, 3], + [120, 120, 0], + [9, 9, 2], + [123, 123, 3] + ], + [ + [1, 1, 3], + [115, 115, 0], + [11, 11, 2], + [1, 1, 3] + ], + [ + [99, 99, 1], + [116, 116, 2], + [103, 103, 3], + [99, 99, 1] + ], + [ + [2, 2, 1], + [23, 23, 2], + [20, 20, 3], + [2, 2, 1] + ], + [ + [3, 3, 3], + [127, 127, 0], + [0, 0, 2], + [3, 3, 3] + ], + [ + [5, 5, 3], + [118, 118, 0], + [3, 3, 2], + [5, 5, 3] + ], + [ + [53, 53, 1], + [65, 65, 2], + [55, 55, 3], + [53, 53, 1] + ], + [ + [3, 3, 0], + [0, 0, 1], + [4, 4, 2], + [3, 3, 0] + ] + ] + } + } + ] + } + ] +} \ No newline at end of file diff --git a/RP/models/entity/dungeon_key.json b/RP/models/entity/dungeon_key.json new file mode 100644 index 00000000..9b160a78 --- /dev/null +++ b/RP/models/entity/dungeon_key.json @@ -0,0 +1,28 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.dungeon_key", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 1.5, + "visible_bounds_offset": [0, 0.25, 0] + }, + "bones": [ + { + "name": "rightitem", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [4, 1, -1], "size": [3, 3, 1], "uv": [0, 43]}, + {"origin": [-8, 2, -1], "size": [11, 1, 1], "uv": [14, 43]}, + {"origin": [-7.5, 1, -1], "size": [4, 1, 1], "uv": [39, 43]}, + {"origin": [-7.5, 0, -1], "size": [3, 1, 1], "uv": [50, 43]}, + {"origin": [3, 1.5, -1], "size": [1, 2, 1], "uv": [9, 43]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/RP/models/entity/evolved_zombie.json b/RP/models/entity/evolved_zombie.json new file mode 100644 index 00000000..d0c9f516 --- /dev/null +++ b/RP/models/entity/evolved_zombie.json @@ -0,0 +1,113 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.evolved_zombie", + "texture_width": 128, + "texture_height": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 1.5, 0] + }, + "bones": [ + { + "name": "waist", + "pivot": [0, 12, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 12, -2], "size": [8, 12, 4], "uv": [16, 16]}, + {"origin": [-2.5, 20.5, 5.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [-2.5, 21.5, 6.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [-2.5, 22.5, 6.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [-2.5, 23.5, 6.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [-2.5, 24.5, 6.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [-2.5, 25.5, 5.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [-2.5, 26.5, 4.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [1.5, 26.5, 4.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [1.5, 25.5, 5.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [1.5, 24.5, 6.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [1.5, 23.5, 6.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [1.5, 22.5, 6.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [1.5, 21.5, 6.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [1.5, 20.5, 5.4], "size": [1, 1, 1], "uv": [56, 30]}, + {"origin": [0.5, 15, 2.4], "size": [3, 7, 3], "uv": [56, 20]}, + {"origin": [-3.5, 15, 2.4], "size": [3, 7, 3], "uv": [56, 20]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0]} + ] + }, + { + "name": "oxygen", + "parent": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-5, 23, -5], "size": [10, 10, 10], "inflate": 0, "uv": [56, 0]} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 24, -4], "size": [8, 8, 8], "inflate": 0.5, "uv": [96, 48]} + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-5, 22, 0], + "cubes": [ + {"origin": [-8, 12, -2], "size": [4, 12, 4], "uv": [40, 16]} + ] + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-6, 15, 1] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 22, 0], + "mirror": true, + "cubes": [ + {"origin": [4, 12, -2], "size": [4, 12, 4], "uv": [40, 16]} + ] + }, + { + "name": "leftItem", + "parent": "leftArm", + "pivot": [6, 15, 1] + }, + { + "name": "rightLeg", + "parent": "body", + "pivot": [-1.9, 12, 0], + "cubes": [ + {"origin": [-3.9, 0, -2], "size": [4, 12, 4], "uv": [0, 16]} + ] + }, + { + "name": "leftLeg", + "parent": "body", + "pivot": [1.9, 12, 0], + "mirror": true, + "cubes": [ + {"origin": [-0.1, 0, -2], "size": [4, 12, 4], "uv": [0, 16]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/RP/models/entity/para_chest_entity.geo.json b/RP/models/entity/para_chest_entity.geo.json new file mode 100644 index 00000000..e21024e8 --- /dev/null +++ b/RP/models/entity/para_chest_entity.geo.json @@ -0,0 +1,218 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.para_chest_entity", + "texture_width": 512, + "texture_height": 256, + "visible_bounds_width": 5, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "parachute3", + "pivot": [11, 18, 0], + "rotation": [0, 0, -30], + "cubes": [ + { + "origin": [-9, 61, -20], + "size": [10, 2, 40], + "uv": { + "north": {"uv": [40, 40], "uv_size": [10, 2]}, + "east": {"uv": [0, 40], "uv_size": [40, 2]}, + "south": {"uv": [90, 40], "uv_size": [10, 2]}, + "west": {"uv": [50, 40], "uv_size": [40, 2]}, + "up": {"uv": [40, 0], "uv_size": [10, 40]}, + "down": {"uv": [50, 40], "uv_size": [10, -40]} + } + } + ] + }, + { + "name": "parachuteStrings2", + "pivot": [-7.5, 24, 0], + "rotation": [23.42777, 1.90972, 155.38337], + "cubes": [ + { + "origin": [-10, -8, 5.5], + "size": [1, 40, 1], + "pivot": [-9.5, 8, 6], + "rotation": [-7.47178, -0.65182, 10.04256], + "uv": { + "north": {"uv": [102, 1], "uv_size": [-1, 40]}, + "east": {"uv": [103, 1], "uv_size": [-1, 40]}, + "south": {"uv": [104, 1], "uv_size": [-1, 40]}, + "west": {"uv": [101, 1], "uv_size": [-1, 40]}, + "up": {"uv": [102, 0], "uv_size": [-1, 1]}, + "down": {"uv": [103, 1], "uv_size": [-1, -1]} + } + } + ] + }, + { + "name": "parachuteStrings3", + "pivot": [7.5, 24, 0], + "rotation": [23.42777, -1.90972, -155.38337], + "cubes": [ + { + "origin": [9, -8, 5.5], + "size": [1, 40, 1], + "pivot": [9.5, 8, 6], + "rotation": [-7.47178, 0.65182, -10.04256], + "uv": { + "north": {"uv": [101, 1], "uv_size": [1, 40]}, + "east": {"uv": [100, 1], "uv_size": [1, 40]}, + "south": {"uv": [103, 1], "uv_size": [1, 40]}, + "west": {"uv": [102, 1], "uv_size": [1, 40]}, + "up": {"uv": [101, 0], "uv_size": [1, 1]}, + "down": {"uv": [102, 1], "uv_size": [1, -1]} + } + } + ] + }, + { + "name": "parachuteStrings4", + "pivot": [7.5, 24, 0], + "rotation": [-23.42777, 1.90972, -155.38337], + "cubes": [ + { + "origin": [9, -8, -6.5], + "size": [1, 40, 1], + "pivot": [9.5, 8, -6], + "rotation": [7.47178, -0.65182, -10.04256], + "uv": { + "north": {"uv": [104, 1], "uv_size": [-1, 40]}, + "east": {"uv": [101, 1], "uv_size": [-1, 40]}, + "south": {"uv": [102, 1], "uv_size": [-1, 40]}, + "west": {"uv": [103, 1], "uv_size": [-1, 40]}, + "up": {"uv": [101, 1], "uv_size": [1, -1]}, + "down": {"uv": [102, 0], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "parachuteStrings5", + "pivot": [-7.5, 24, 0], + "rotation": [-23.42777, -1.90972, 155.38337], + "cubes": [ + { + "origin": [-10, -8, -6.5], + "size": [1, 40, 1], + "pivot": [-9.5, 8, -6], + "rotation": [7.47178, 0.65182, 10.04256], + "uv": { + "north": {"uv": [103, 1], "uv_size": [1, 40]}, + "east": {"uv": [102, 1], "uv_size": [1, 40]}, + "south": {"uv": [101, 1], "uv_size": [1, 40]}, + "west": {"uv": [100, 1], "uv_size": [1, 40]}, + "up": {"uv": [102, 1], "uv_size": [-1, -1]}, + "down": {"uv": [103, 0], "uv_size": [-1, 1]} + } + } + ] + }, + { + "name": "parachute1", + "pivot": [15, 3, 0], + "rotation": [0, 0, 30], + "cubes": [ + { + "origin": [-5, 46, -20], + "size": [10, 2, 40], + "uv": { + "north": {"uv": [40, 40], "uv_size": [10, 2]}, + "east": {"uv": [0, 40], "uv_size": [40, 2]}, + "south": {"uv": [90, 40], "uv_size": [10, 2]}, + "west": {"uv": [50, 40], "uv_size": [40, 2]}, + "up": {"uv": [40, 0], "uv_size": [10, 40]}, + "down": {"uv": [50, 40], "uv_size": [10, -40]} + } + } + ] + }, + { + "name": "parachute2", + "pivot": [0, 7, 0], + "cubes": [ + { + "origin": [-20, 50, -20], + "size": [40, 2, 40], + "uv": { + "north": {"uv": [40, 82], "uv_size": [40, 2]}, + "east": {"uv": [0, 82], "uv_size": [40, 2]}, + "south": {"uv": [120, 82], "uv_size": [40, 2]}, + "west": {"uv": [80, 82], "uv_size": [40, 2]}, + "up": {"uv": [40, 42], "uv_size": [40, 40]}, + "down": {"uv": [80, 82], "uv_size": [40, -40]} + } + } + ] + }, + { + "name": "chest", + "pivot": [-8, -8, -8] + }, + { + "name": "field_78233_c", + "parent": "chest", + "pivot": [0, 9, 7], + "cubes": [ + { + "origin": [-1, 7, -8], + "size": [2, 4, 1], + "uv": { + "north": {"uv": [260, 4], "uv_size": [8, 16]}, + "east": {"uv": [256, 4], "uv_size": [4, 16]}, + "south": {"uv": [272, 4], "uv_size": [8, 16]}, + "west": {"uv": [268, 4], "uv_size": [4, 16]}, + "up": {"uv": [260, 0], "uv_size": [8, 4]}, + "down": {"uv": [268, 4], "uv_size": [8, -4]} + } + } + ] + }, + { + "name": "field_78234_a", + "parent": "chest", + "pivot": [-7, 9, 7], + "cubes": [ + { + "origin": [-7, 9, -7], + "size": [14, 5, 14], + "uv": { + "north": {"uv": [312, 56], "uv_size": [56, 20]}, + "east": {"uv": [256, 56], "uv_size": [56, 20]}, + "south": {"uv": [424, 56], "uv_size": [56, 20]}, + "west": {"uv": [368, 56], "uv_size": [56, 20]}, + "up": {"uv": [312, 0], "uv_size": [56, 56]}, + "down": {"uv": [368, 56], "uv_size": [56, -56]} + } + } + ] + }, + { + "name": "field_78232_b", + "parent": "chest", + "pivot": [-7, 10, -7], + "cubes": [ + { + "origin": [-7, 0, -7], + "size": [14, 10, 14], + "uv": { + "north": {"uv": [312, 132], "uv_size": [56, 40]}, + "east": {"uv": [256, 132], "uv_size": [56, 40]}, + "south": {"uv": [424, 132], "uv_size": [56, 40]}, + "west": {"uv": [368, 132], "uv_size": [56, 40]}, + "up": {"uv": [312, 76], "uv_size": [56, 56]}, + "down": {"uv": [368, 132], "uv_size": [56, -56]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/RP/texts/en_US.lang b/RP/texts/en_US.lang index e59166c3..17392f55 100644 --- a/RP/texts/en_US.lang +++ b/RP/texts/en_US.lang @@ -768,7 +768,6 @@ tile.view_screen.name=Display Screen tile.wall_gc.moon.name=Moon Rock Wall tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall tile.wall_gc.tin.name=Tin Decoration Wall - advancement.galacticraft.root.title=Galacticraft advancement.galacticraft.root.description=Explore the Moon... and beyond! advancement.galacticraft.coal_generator.title=Coal Power @@ -1163,7 +1162,6 @@ tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon,\nthis manufactures Methane for further processing in a Gas Liquefier. tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. \nIt's big ... try making a 2 x 2 x 2 cube with these. tile.miner_base.name=Astro Miner Base -tile.miner_base_full.name=Astro Miner Base tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab tile.slab_gc_half.asteroids_slab.name=Dark Decoration Slab @@ -1217,9 +1215,7 @@ achievement.asteroids=To The Asteroid Belt achievement.asteroids.desc=Take a Tier 3 Rocket to The Asteroid Belt! achievement.venus=To Venus! achievement.venus.desc=Take a Tier 3 Rocket to Venus! - ## The official translation keys for cosmos adventure (Added by Yasser444) - ##items item.cosmos:advanced_wafer=Advanced Wafer item.cosmos:aluminum_ingot=Aluminum Ingot @@ -1399,6 +1395,7 @@ item.cosmos:volcanic_pickaxe=Volcanic Pickaxe item.cosmos:switchable_aluminum_wire=Switchable Aluminum Wire item.cosmos:switchable_heavy_aluminum_wire=Switchable Heavy Aluminum Wire + ##fluids fluid.undefined=Empty fluid.oil=Oil @@ -1417,7 +1414,6 @@ fluid.liquid_methane=Liquid Methane fluid.liquid_argon=Liquid Argon fluid.bacterial_sludge=Bacterial Sludge fluid.sulphuric_acid=Sulphuric Acid - ## blocks tile.cosmos:tin_ore.name=Tin Ore tile.cosmos:aluminum_block.name=Aluminum Block @@ -1436,10 +1432,12 @@ tile.cosmos:advanced_compressor.name=Advanced Compressor tile.cosmos:advanced_solar_panel.name=Advanced Solar Panel tile.cosmos:air_lock_controller.name=Air Lock Controller tile.cosmos:air_lock_frame.name=Air Lock Frame +tile.cosmos:airlock_controller.name=Air Lock Controller +tile.cosmos:airlock_frame.name=Air Lock Frame +tile.cosmos:airlock_seal.name=Air Lock Seal tile.cosmos:asteroids_rock.name=Asteroids Rock tile.cosmos:asteroids_hard_rock.name=Asteroids Hard Rock tile.cosmos:asteroids_soft_rock.name=Asteroids Soft Rock -tile.cosmos:astro_miner_base.name=Astro Miner Base tile.cosmos:basic_solar_panel.name=Basic Solar Panel tile.cosmos:beam_receiver.name=Beam Receiver tile.cosmos:beam_reflector.name=Beam Reflector @@ -1475,6 +1473,8 @@ tile.cosmos:ilmenite_ore.name=Ilmenite Ore tile.cosmos:incased_redstone_dust.name=Incased Redstone Dust tile.cosmos:incased_redstone_repeater.name=Incased Redstone Repeater tile.cosmos:launch_controller.name=Launch Controller +tile.cosmos:advanced_launch_controller.name=Advanced Launch Controller +tile.advanced_launch_controller.description=Launch Controllers are used to customize launch behavior,\nincluding launch criteria and destination launch pad for auto launches. tile.cosmos:lead_block.name=Lead Block tile.cosmos:lighting_panel.name=Lighting Panel (Square) tile.cosmos:linear_lighting_panel.name=Lighting Panel (Linear) @@ -1486,7 +1486,6 @@ tile.cosmos:mars_dungeon_bricks_wall.name=Mars Dungeon Bricks Wall tile.cosmos:mars_dungeon_bricks_stairs.name=Mars Dungeon Bricks Stairs tile.cosmos:meteoric_iron_block.name=Meteoric Iron Block tile.cosmos:methane_synthesizer.name=Methane Synthesizer - tile.cosmos:moon_dirt.name=Moon Dirt tile.cosmos:moon_turf.name=Moon Turf tile.cosmos:moon_rock.name=Moon Rock @@ -1497,13 +1496,11 @@ tile.cosmos:moon_dungeon_bricks_stairs.name=Moon Dungeon Bricks Stairs tile.cosmos:moon_rock_slab.name=Moon Rock Slab tile.cosmos:moon_rock_wall.name=Moon Rock Wall tile.cosmos:moon_rock_stairs.name=Moon Rock Stairs - tile.cosmos:mars_fine_regolith.name=Mars Fine Regolith tile.cosmos:mars_regolith.name=Mars Regolith tile.cosmos:mars_stone.name=Mars Stone tile.cosmos:mars_cobblestone.name=Mars Cobblestone tile.cosmos:mars_cobblestone_stairs.name=Mars Cobblestone Stairs - tile.cosmos:oxygen_storage_module.name=Oxygen Storage Module tile.cosmos:oxygen_distributor.name=Oxygen Bubble Distributor tile.cosmos:oxygen_compressor.name=Oxygen Compressor @@ -1523,11 +1520,9 @@ tile.cosmos:water_electrolyzer.name=Water Electrolyzer tile.cosmos:tier1_treasure_chest.name=Tier 1 Treasure Chest tile.cosmos:tier2_treasure_chest.name=Tier 2 Treasure Chest tile.cosmos:tier3_treasure_chest.name=Tier 3 Treasure Chest - ## ui action.hint.exit.cosmos:rocket_tier_1=Press SNEAK to Exit, Hold JUMP to Launch custom.coords=Position - ## entites entity.cosmos:treasure_chest.name=Treasure Chest @@ -1540,9 +1535,7 @@ cosmos:cosmos_items=Cosmos Items cosmos:cosmos_blocks=Cosmos Blocks cosmos:cosmos_machines=Cosmos Machines cosmos:debug_items=Debug Items - ## Automatically generated keys (Need to be checked and sorted by a human) - tile.cosmos:buggy_fueling_pad.name=Buggy Fueling Pad tile.cosmos:clear_tin_vacuum_glass.name=Clear Tin Vacuum Glass tile.cosmos:clear_vacuum_glass.name=Clear Vacuum Glass diff --git a/RP/textures/blocks/machines/air_lock_seal.png b/RP/textures/blocks/machines/air_lock_seal.png new file mode 100644 index 00000000..404832f5 Binary files /dev/null and b/RP/textures/blocks/machines/air_lock_seal.png differ diff --git a/RP/textures/terrain_texture.json b/RP/textures/terrain_texture.json index 1f1633b5..529af959 100644 --- a/RP/textures/terrain_texture.json +++ b/RP/textures/terrain_texture.json @@ -153,6 +153,9 @@ "advansed_electric_compressor": { "textures": "textures/blocks/machines/advansed_electric_compressor" }, + "air_lock_seal": { + "textures": "textures/blocks/machines/air_lock_seal" + }, "air_lock_controller": { "textures": "textures/blocks/machines/air_lock_controller" }, @@ -300,6 +303,9 @@ "oxygen_output": { "textures": "textures/blocks/machines/oxygen_output" }, + "painter": { + "textures": "textures/blocks/machines/painter" + }, "oxygen_sealer": { "textures": "textures/blocks/machines/oxygen_sealer" }, diff --git a/RP/textures/ui/cosmos/celestial_selector/circuit_fabricator_background.png b/RP/textures/ui/cosmos/celestial_selector/circuit_fabricator_background.png new file mode 100644 index 00000000..d6f09228 Binary files /dev/null and b/RP/textures/ui/cosmos/celestial_selector/circuit_fabricator_background.png differ diff --git a/RP/textures/ui/cosmos/celestial_selector/solar_system_orbits_thin.png b/RP/textures/ui/cosmos/celestial_selector/solar_system_orbits_thin.png new file mode 100644 index 00000000..2bfd9354 Binary files /dev/null and b/RP/textures/ui/cosmos/celestial_selector/solar_system_orbits_thin.png differ diff --git a/RP/textures/ui/cosmos/machines/deconstructor_bar.png b/RP/textures/ui/cosmos/machines/deconstructor_bar.png new file mode 100644 index 00000000..7053292e Binary files /dev/null and b/RP/textures/ui/cosmos/machines/deconstructor_bar.png differ diff --git a/RP/textures/ui/cosmos/machines/deconstructor_bar_fill.png b/RP/textures/ui/cosmos/machines/deconstructor_bar_fill.png new file mode 100644 index 00000000..d78051ea Binary files /dev/null and b/RP/textures/ui/cosmos/machines/deconstructor_bar_fill.png differ diff --git a/RP/textures/ui/cosmos/machines/deconstructor_on.png b/RP/textures/ui/cosmos/machines/deconstructor_on.png new file mode 100644 index 00000000..65fd29d2 Binary files /dev/null and b/RP/textures/ui/cosmos/machines/deconstructor_on.png differ diff --git a/RP/textures/ui/cosmos/machines/energy_bar_vertical.png b/RP/textures/ui/cosmos/machines/energy_bar_vertical.png new file mode 100644 index 00000000..ceeda05d Binary files /dev/null and b/RP/textures/ui/cosmos/machines/energy_bar_vertical.png differ diff --git a/RP/textures/ui/cosmos/machines/geothermal_acid.json b/RP/textures/ui/cosmos/machines/geothermal_acid.json new file mode 100644 index 00000000..ef731ca7 --- /dev/null +++ b/RP/textures/ui/cosmos/machines/geothermal_acid.json @@ -0,0 +1,4 @@ +{ + "nineslice_size": 0, + "base_size": [46, 16] +} diff --git a/RP/textures/ui/cosmos/machines/geothermal_acid.png b/RP/textures/ui/cosmos/machines/geothermal_acid.png new file mode 100644 index 00000000..3d980027 Binary files /dev/null and b/RP/textures/ui/cosmos/machines/geothermal_acid.png differ diff --git a/RP/textures/ui/cosmos/machines/geothermal_acid_back.png b/RP/textures/ui/cosmos/machines/geothermal_acid_back.png new file mode 100644 index 00000000..982dd392 Binary files /dev/null and b/RP/textures/ui/cosmos/machines/geothermal_acid_back.png differ diff --git a/RP/textures/ui/cosmos/machines/geothermal_acid_frame0.png b/RP/textures/ui/cosmos/machines/geothermal_acid_frame0.png new file mode 100644 index 00000000..0ae3ff97 Binary files /dev/null and b/RP/textures/ui/cosmos/machines/geothermal_acid_frame0.png differ diff --git a/RP/textures/ui/cosmos/machines/geothermal_acid_front.png b/RP/textures/ui/cosmos/machines/geothermal_acid_front.png new file mode 100644 index 00000000..0a2d2061 Binary files /dev/null and b/RP/textures/ui/cosmos/machines/geothermal_acid_front.png differ diff --git a/RP/textures/ui/cosmos/machines/tank_back_18.png b/RP/textures/ui/cosmos/machines/tank_back_18.png new file mode 100644 index 00000000..3e36d1bb Binary files /dev/null and b/RP/textures/ui/cosmos/machines/tank_back_18.png differ diff --git a/RP/textures/ui/cosmos/machines/tank_back_22.png b/RP/textures/ui/cosmos/machines/tank_back_22.png new file mode 100644 index 00000000..ede9c91a Binary files /dev/null and b/RP/textures/ui/cosmos/machines/tank_back_22.png differ diff --git a/RP/textures/ui/cosmos/machines/tank_back_41x28.png b/RP/textures/ui/cosmos/machines/tank_back_41x28.png new file mode 100644 index 00000000..bba3f672 Binary files /dev/null and b/RP/textures/ui/cosmos/machines/tank_back_41x28.png differ diff --git a/RP/textures/ui/cosmos/machines/tank_front_18.png b/RP/textures/ui/cosmos/machines/tank_front_18.png new file mode 100644 index 00000000..04d12601 Binary files /dev/null and b/RP/textures/ui/cosmos/machines/tank_front_18.png differ diff --git a/RP/textures/ui/cosmos/machines/tank_front_22.png b/RP/textures/ui/cosmos/machines/tank_front_22.png new file mode 100644 index 00000000..41dcb1db Binary files /dev/null and b/RP/textures/ui/cosmos/machines/tank_front_22.png differ diff --git a/RP/textures/ui/cosmos/machines/tank_front_41x28.png b/RP/textures/ui/cosmos/machines/tank_front_41x28.png new file mode 100644 index 00000000..ef20861c Binary files /dev/null and b/RP/textures/ui/cosmos/machines/tank_front_41x28.png differ diff --git a/RP/textures/ui/cosmos/machines/text_box.json b/RP/textures/ui/cosmos/machines/text_box.json new file mode 100644 index 00000000..529e45c5 --- /dev/null +++ b/RP/textures/ui/cosmos/machines/text_box.json @@ -0,0 +1 @@ +{"nineslice_size": 1, "base_size": [3, 3]} \ No newline at end of file diff --git a/RP/textures/ui/cosmos/machines/text_box.png b/RP/textures/ui/cosmos/machines/text_box.png new file mode 100644 index 00000000..970cfcea Binary files /dev/null and b/RP/textures/ui/cosmos/machines/text_box.png differ diff --git a/RP/textures/ui/liquids/sulphuric_acid.png b/RP/textures/ui/liquids/sulphuric_acid.png new file mode 100644 index 00000000..c392ff16 Binary files /dev/null and b/RP/textures/ui/liquids/sulphuric_acid.png differ diff --git a/RP/ui/_global_variables.json b/RP/ui/_global_variables.json index 4f9d0003..ee036f09 100644 --- a/RP/ui/_global_variables.json +++ b/RP/ui/_global_variables.json @@ -135,7 +135,7 @@ }, { "binding_type": "view", - "source_property_name": "(#hover_text - '§o' - '\n§8Has Custom Properties')", // only works in english + "source_property_name": "(#hover_text - '§o' - '§f' - '\n§8Has Custom Properties')", // only works in english "target_property_name": "#hover_text" } ], @@ -367,7 +367,13 @@ "$can_have_station": [ { "binding_type": "view", - "source_property_name": "((('%.6s' * #form_text) - ('%.5s' * #form_text) = 'f') and (#form_text - ('%.12s' * #form_text) = 'Overworld'))", + "source_control_name": "catalog_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#overworld_selected" + }, + { + "binding_type": "view", + "source_property_name": "(#overworld_selected and not (#form_text - 'Station false' = #form_text))", "target_property_name": "#visible" } ], @@ -493,7 +499,7 @@ }, { "binding_type": "view", - "source_property_name": "(not (#form_button_text - 'CREATE' = #form_button_text))", + "source_property_name": "(not (#form_button_text - 'Create Space Station' = #form_button_text))", "target_property_name": "#visible" } ], @@ -509,7 +515,7 @@ }, { "binding_type": "view", - "source_property_name": "((('%.12s' * #form_button_text) = '§t§t§t§t'))", + "source_property_name": "(not (#form_text - '\"aluminum\":true' = #form_text) and not (#form_text - '\"wafer\":true' = #form_text) and not (#form_text - '\"tin\":true' = #form_text) and not (#form_text - '\"iron\":true' = #form_text))", "target_property_name": "#visible" } ], @@ -525,71 +531,63 @@ }, { "binding_type": "view", - "source_property_name": "(not (('%.12s' * #form_button_text) = '§t§t§t§t'))", + "source_property_name": "(not (not (#form_text - '\"aluminum\":true' = #form_text) and not (#form_text - '\"wafer\":true' = #form_text) and not (#form_text - '\"tin\":true' = #form_text) and not (#form_text - '\"iron\":true' = #form_text)))", "target_property_name": "#visible" } ], "$has_aluminum": [ - { - "binding_type": "collection_details", - "binding_collection_name": "form_buttons" - }, - { - "binding_name": "#form_button_text", - "binding_type": "collection", - "binding_collection_name": "form_buttons" - }, { "binding_type": "view", - "source_property_name": "((('%.3s' * #form_button_text) - ('%.2s' * #form_button_text) = 't') and not (#form_button_text - 'CREATE' = #form_button_text))", + "source_property_name": "(not (#form_text - '\"aluminum\":true' = #form_text))", "target_property_name": "#visible" } ], "$has_wafer": [ - { - "binding_type": "collection_details", - "binding_collection_name": "form_buttons" - }, - { - "binding_name": "#form_button_text", - "binding_type": "collection", - "binding_collection_name": "form_buttons" - }, { "binding_type": "view", - "source_property_name": "((('%.6s' * #form_button_text) - ('%.5s' * #form_button_text) = 't') and not (#form_button_text - 'CREATE' = #form_button_text))", + "source_property_name": "(not (#form_text - '\"wafer\":true' = #form_text))", "target_property_name": "#visible" } ], "$has_tin": [ { - "binding_type": "collection_details", - "binding_collection_name": "form_buttons" - }, + "binding_type": "view", + "source_property_name": "(not (#form_text - '\"tin\":true' = #form_text))", + "target_property_name": "#visible" + } + ], + "$has_iron": [ { - "binding_name": "#form_button_text", - "binding_type": "collection", - "binding_collection_name": "form_buttons" - }, + "binding_type": "view", + "source_property_name": "(not (#form_text - '\"iron\":true' = #form_text))", + "target_property_name": "#visible" + } + ], + "$no_aluminum": [ { "binding_type": "view", - "source_property_name": "((('%.9s' * #form_button_text) - ('%.8s' * #form_button_text) = 't') and not (#form_button_text - 'CREATE' = #form_button_text))", + "source_property_name": "(#form_text - '\"aluminum\":true' = #form_text)", "target_property_name": "#visible" } ], - "$has_iron": [ + "$no_wafer": [ { - "binding_type": "collection_details", - "binding_collection_name": "form_buttons" - }, + "binding_type": "view", + "source_property_name": "(#form_text - '\"wafer\":true' = #form_text)", + "target_property_name": "#visible" + } + ], + "$no_tin": [ { - "binding_name": "#form_button_text", - "binding_type": "collection", - "binding_collection_name": "form_buttons" - }, + "binding_type": "view", + "source_property_name": "(#form_text - '\"tin\":true' = #form_text)", + "target_property_name": "#visible" + } + ], + "$no_iron": [ { "binding_type": "view", - "source_property_name": "((('%.12s' * #form_button_text) - ('%.11s' * #form_button_text) = 't') and not (#form_button_text - 'CREATE' = #form_button_text))", + "source_property_name": "(#form_text - '\"iron\":true' = #form_text)", "target_property_name": "#visible" } ], @@ -655,7 +653,7 @@ }, { "binding_type": "view", - "source_property_name": "(#form_button_text - ('%.21s' * #form_button_text))", + "source_property_name": "(#form_button_text - 'Rename ' = #form_button_text ? #form_button_text - 'Launch to ' : 'Rename')", "target_property_name": "#name" } ], diff --git a/RP/ui/_ui_defs.json b/RP/ui/_ui_defs.json index baeae616..e6e28fd0 100644 --- a/RP/ui/_ui_defs.json +++ b/RP/ui/_ui_defs.json @@ -1,10 +1,14 @@ { "ui_defs": [ "ui/cosmos.json", + "ui/celestial/celestial_base.json", + "ui/celestial/solar_system_map.json", + "ui/celestial/planet_views.json", + "ui/celestial/station_recipe_panel.json", + "ui/celestial/station_list_panel.json", "ui/celestial_selector.json", "ui/space_gear.json", "ui/machines.json", - "ui/machines/coal_generator.json", "ui/machines/energy_storage.json", "ui/machines/compressor.json", @@ -23,13 +27,28 @@ "ui/machines/oxygen_distributor.json", "ui/machines/oxygen_storage.json", "ui/machines/solar_panel.json", - "ui/machines/deconstructor.json", - "ui/machines/methane_synthesizer.json", - "ui/machines/astro_miner_dock.json", + "ui/vehicles/rocket.json", "ui/fuel/fuel_chest/fuel_chest_inventory_0.json", "ui/fuel/fuel_chest/fuel_chest_inventory_18.json", "ui/fuel/fuel_chest/fuel_chest_inventory_36.json", - "ui/fuel/fuel_chest/fuel_chest_inventory_54.json" + "ui/fuel/fuel_chest/fuel_chest_inventory_54.json", + "ui/machines/methane_synthesizer.json", + "ui/machines/cargo_loader.json", + "ui/machines/cargo_unloader.json", + "ui/machines/deconstructor.json", + "ui/machines/oxygen_sealer.json", + "ui/machines/astro_miner_dock.json", + "ui/machines/short_range_telepad.json", + "ui/machines/launch_controller.json", + "ui/machines/advanced_launch_controller.json", + "ui/machines/solar_array_controller.json", + "ui/machines/geothermal_generator.json", + "ui/machines/terraformer.json", + "ui/machines/chromatic_applicator.json", + "ui/machines/advanced_compressor.json", + "ui/machines/electric_arc_furnace.json", + "ui/machines/oxygen_detector.json", + "ui/machines/airlock_controller.json" ] } diff --git a/RP/ui/celestial/celestial_base.json b/RP/ui/celestial/celestial_base.json new file mode 100644 index 00000000..a8b37e5f --- /dev/null +++ b/RP/ui/celestial/celestial_base.json @@ -0,0 +1,1133 @@ +{ + "namespace": "celestial", + "selector_screen": { + "type": "screen", + "button_mappings": [ + { + "from_button_id": "button.menu_cancel", + "to_button_id": "button.menu_exit", + "mapping_type": "global" + } + ], + "controls": [ + { + "input_panel": { + "type": "input_panel", + "hover_enabled": false, + "prevent_touch_input": false, + "controls": [ + { + "screen_background": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/space", + "layer": -1 + } + }, + { + "catalog@celestial.catalog": {} + }, + { + "launch_panel@celestial.launch_panel": {} + }, + { + "station_list_panel@celestial.station_list_panel": {} + }, + { + "top_rename_panel@celestial.top_rename_panel": {} + }, + { + "solar_system@celestial.solar_system": {} + }, + { + "zoomed_solar_system_mercury@celestial.zoomed_solar_system_mercury": {} + }, + { + "zoomed_solar_system_venus@celestial.zoomed_solar_system_venus": {} + }, + { + "zoomed_solar_system_overworld@celestial.zoomed_solar_system_overworld": {} + }, + { + "zoomed_solar_system_mars@celestial.zoomed_solar_system_mars": {} + }, + { + "zoomed_solar_system_asteroids@celestial.zoomed_solar_system_asteroids": {} + }, + { + "zoomed_solar_system_jupiter@celestial.zoomed_solar_system_jupiter": {} + }, + { + "zoomed_solar_system_saturn@celestial.zoomed_solar_system_saturn": {} + }, + { + "zoomed_solar_system_uranus@celestial.zoomed_solar_system_uranus": {} + }, + { + "zoomed_solar_system_neptune@celestial.zoomed_solar_system_neptune": {} + } + ] + } + } + ] + }, + "catalog": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/catalog", + "color": [ + 0, + 0.5, + 1 + ], + "size": [ + 87, + 12 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + 5 + ], + "controls": [ + { + "name": { + "type": "label", + "text": "CATALOG", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 20, + 1 + ] + } + }, + { + "center": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/catalog_center", + "color": [ + 0, + 0.5, + 1 + ], + "size": [ + 95, + 43 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "anims": [ + { + "go_right": { + "anim_type": "offset", + "duration": 0.5, + "from": [ + -100, + 10 + ], + "to": [ + -1, + 10 + ] + } + } + ], + "controls": [ + { + "back_button": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/back_button", + "color": [ + 1, + 1, + 0 + ], + "size": [ + 93, + 17 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 2, + 4 + ], + "layer": 2, + "controls": [ + { + "zoom_toggle_sol@cosmos.toggle": { + "size": [ + 93, + 10 + ], + "offset": [ + 0, + 1 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "toggle_group_forced_index": 0, + "toggle_grid_collection_name": "zoom_planet", + "toggle_name": "zoom_planet", + "checked_hover_control": "hover", + "unchecked_hover_control": "hover", + "controls": [ + { + "hover": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/fade2", + "color": [ + 1, + 1, + 0 + ], + "size": [ + 89, + 10 + ], + "layer": 1 + } + } + ] + } + }, + { + "sol_label": { + "type": "label", + "text": "\u00a77Sol", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 4, + 1 + ], + "layer": 3 + } + } + ] + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Sol", + "$toggle": "zoom_toggle_sol" + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Mercury", + "$toggle": "zoom_toggle_mercury" + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Venus", + "$toggle": "zoom_toggle_venus" + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Overworld", + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#overworld" + }, + { + "binding_type": "view", + "source_control_name": "zoom_toggle_moon", + "source_property_name": "#toggle_state", + "target_property_name": "#moon" + }, + { + "binding_type": "view", + "source_property_name": "(#overworld or #moon)", + "target_property_name": "#visible" + } + ] + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Mars", + "$toggle": "zoom_toggle_mars" + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Asteroids", + "$toggle": "zoom_toggle_asteroids" + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Jupiter", + "$toggle": "zoom_toggle_jupiter" + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Saturn", + "$toggle": "zoom_toggle_saturn" + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Uranus", + "$toggle": "zoom_toggle_uranus" + } + }, + { + "centeral_planet@celestial.central_planet_label": { + "$name": "Neptune", + "$toggle": "zoom_toggle_neptune" + } + } + ] + } + }, + { + "planet_toggles": { + "type": "stack_panel", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 1, + 49 + ], + "controls": [ + { + "mercury@celestial.catalog_select_and_zoom_toggle": { + "$name": "Mercury", + "$control_name": "mercury", + "$tier": 4, + "$time": 0.25, + "$index": 1 + } + }, + { + "venus@celestial.catalog_select_and_zoom_toggle": { + "$name": "Venus", + "$control_name": "venus", + "$tier": 3, + "$time": 0.5, + "$index": 2 + } + }, + { + "overworld@celestial.catalog_select_and_zoom_toggle": { + "$name": "Overworld", + "$control_name": "overworld", + "$tier": 1, + "$time": 0.75, + "$index": 3, + "$button_id": "button.overworld_on" + } + }, + { + "moon@celestial.catalog_moon": {} + }, + { + "mars@celestial.catalog_select_and_zoom_toggle": { + "$name": "Mars", + "$control_name": "mars", + "$tier": 2, + "$time": 1, + "$index": 4 + } + }, + { + "asteroids@celestial.catalog_select_and_zoom_toggle": { + "$name": "Asteroids", + "$control_name": "asteroids", + "$tier": 3, + "$time": 1.25, + "$index": 5 + } + }, + { + "jupiter@celestial.catalog_select_and_zoom_toggle": { + "$name": "Jupiter", + "$control_name": "jupiter", + "$tier": 4, + "$time": 1.5, + "$index": 6 + } + }, + { + "saturn@celestial.catalog_select_and_zoom_toggle": { + "$name": "Saturn", + "$control_name": "saturn", + "$tier": 99, + "$time": 1.75, + "$index": 7 + } + }, + { + "uranus@celestial.catalog_select_and_zoom_toggle": { + "$name": "Uranus", + "$control_name": "uranus", + "$tier": 99, + "$time": 2, + "$index": 8 + } + }, + { + "neptune@celestial.catalog_select_and_zoom_toggle": { + "$name": "Neptune", + "$control_name": "neptune", + "$tier": 99, + "$time": 2.25, + "$index": 9 + } + } + ] + } + } + ] + }, + "catalog_select_and_zoom_toggle": { + "type": "panel", + "size": [ + 93, + 14 + ], + "$select_name": "('catalog_toggle_' + $control_name)", + "$zoom_name": "('zoom_toggle_' + $control_name)", + "$button_id": "button.menu_select", + "controls": [ + { + "$select_name@cosmos.toggle": { + "toggle_group_forced_index": "$index", + "toggle_grid_collection_name": "catalog_planet", + "toggle_name": "catalog_planet", + "button_mappings": [ + { + "from_button_id": "button.menu_select", + "to_button_id": "$button_id", + "mapping_type": "pressed" + }, + { + "from_button_id": "button.menu_ok", + "to_button_id": "$button_id", + "mapping_type": "focused" + } + ], + "controls": [ + { + "unchecked@celestial.animated_catalog_toggle": {} + }, + { + "unchecked_hover@celestial.animated_catalog_toggle": { + "color": [ + 0, + 1, + 1 + ] + } + } + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "$select_name", + "source_property_name": "(not #toggle_state)", + "target_property_name": "#visible" + } + ] + } + }, + { + "$zoom_name@cosmos.toggle": { + "toggle_group_forced_index": "$index", + "toggle_grid_collection_name": "zoom_planet", + "toggle_name": "zoom_planet", + "offset": [ + 6, + 0 + ], + "controls": [ + { + "unchecked@celestial.catalog_toggle_visuals": {} + }, + { + "unchecked_hover@celestial.catalog_toggle_visuals": { + "color": [ + 0, + 1, + 1 + ] + } + } + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "$select_name", + "source_property_name": "#toggle_state", + "target_property_name": "#visible" + } + ] + } + } + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_sol", + "source_property_name": "#toggle_state", + "target_property_name": "#visible" + } + ] + }, + "animated_catalog_toggle@celestial.catalog_toggle_visuals": { + "alpha": 0, + "anims": [ + { + "fade_in": { + "anim_type": "wait", + "duration": "$time", + "next": "@celestial.fade_in" + } + } + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "$control_name", + "source_property_name": "(not #toggle_state)", + "target_property_name": "#visible" + } + ] + }, + "catalog_toggle_visuals": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/planet_box", + "propagate_alpha": true, + "color": [ + 0, + 0.5, + 1 + ], + "size": [ + 93, + 14 + ], + "layer": 4, + "controls": [ + { + "green_fade": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/fade1", + "color": [ + 0, + 1, + 0 + ], + "size": [ + 98, + 10 + ], + "layer": 3, + "bindings": [ + { + "binding_type": "view", + "source_property_name": "(#form_text - 'Tier ')", + "target_property_name": "#tier" + }, + { + "binding_type": "view", + "source_property_name": "(#tier > $tier or #tier = $tier)", + "target_property_name": "#visible" + } + ] + } + }, + { + "red_fade": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/fade1", + "color": [ + 1, + 0, + 0 + ], + "size": [ + 98, + 10 + ], + "layer": 3, + "bindings": [ + { + "binding_type": "view", + "source_property_name": "(#form_text - 'Tier ')", + "target_property_name": "#tier" + }, + { + "binding_type": "view", + "source_property_name": "(#tier < $tier)", + "target_property_name": "#visible" + } + ] + } + }, + { + "planet_name": { + "type": "label", + "text": "$name", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 4, + 2.5 + ], + "layer": 5 + } + } + ] + }, + "central_planet_label": { + "type": "label", + "text": "$name", + "layer": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 8, + 23.5 + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "$toggle", + "source_property_name": "#toggle_state", + "target_property_name": "#visible" + } + ] + }, + "catalog_moon": { + "type": "panel", + "propagate_alpha": true, + "$name": "Moon", + "$tier": 1, + "alpha": 0, + "size": [ + 0, + 0 + ], + "anims": [ + { + "push_down": { + "anim_type": "size", + "play_event": "button.overworld_on", + "duration": 0.25, + "from": [ + 93, + 0 + ], + "to": [ + 93, + 14 + ], + "next": "@celestial.appear_imediatly" + } + } + ], + "controls": [ + { + "catalog_toggle_moon@cosmos.toggle": { + "toggle_group_forced_index": 80, + "toggle_grid_collection_name": "catalog_planet", + "toggle_name": "catalog_planet", + "controls": [ + { + "unchecked@celestial.catalog_toggle_visuals": {} + }, + { + "unchecked_hover@celestial.catalog_toggle_visuals": { + "color": [ + 0, + 1, + 1 + ] + } + } + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "catalog_toggle_moon", + "source_property_name": "(not #toggle_state)", + "target_property_name": "#visible" + } + ] + } + }, + { + "zoom_toggle_moon@cosmos.toggle": { + "toggle_group_forced_index": 80, + "toggle_grid_collection_name": "zoom_planet", + "toggle_name": "zoom_planet", + "offset": [ + 6, + 0 + ], + "controls": [ + { + "unchecked@celestial.catalog_toggle_visuals": {} + }, + { + "unchecked_hover@celestial.catalog_toggle_visuals": { + "color": [ + 0, + 1, + 1 + ] + } + }, + { + "checked@celestial.catalog_toggle_visuals": { + "color": [ + 0, + 1, + 1 + ] + } + }, + { + "checked_hover@celestial.catalog_toggle_visuals": { + "color": [ + 0, + 1, + 1 + ] + } + } + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "catalog_toggle_moon", + "source_property_name": "#toggle_state", + "target_property_name": "#visible" + } + ] + } + } + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "select_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#overworld" + }, + { + "binding_type": "view", + "source_control_name": "zoom_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#on_overworld" + }, + { + "binding_type": "view", + "source_control_name": "select_toggle_moon", + "source_property_name": "#toggle_state", + "target_property_name": "#selected" + }, + { + "binding_type": "view", + "source_control_name": "zoom_toggle_moon", + "source_property_name": "#toggle_state", + "target_property_name": "#zoomed" + }, + { + "binding_type": "view", + "source_property_name": "(#overworld or #on_overworld or #selected or #zoomed)", + "target_property_name": "#visible" + } + ] + }, + "fade_in": { + "anim_type": "alpha", + "duration": 0.5, + "from": 0, + "to": 1 + }, + "fade_loop": { + "anim_type": "alpha", + "duration": 0.5, + "from": 0, + "to": 1, + "next": "@celestial.fade_loop_out" + }, + "fade_loop_out": { + "anim_type": "alpha", + "duration": 0.5, + "from": 1, + "to": 0, + "next": "@celestial.fade_loop" + }, + "appear_imediatly": { + "anim_type": "alpha", + "duration": 0, + "from": 0, + "to": 1 + }, + "planet_header": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/station_list_item", + "color": [ + 0, + 0.6, + 1 + ], + "size": [ + 94, + 11 + ], + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 8 + ], + "layer": 5, + "controls": [ + { + "label": { + "type": "label", + "text": "$planet_title", + "color": [ + 1, + 1, + 1 + ], + "size": [ + "100%", + 10 + ], + "anchor_from": "center", + "anchor_to": "center", + "text_alignment": "center", + "layer": 6 + } + } + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "$toggle", + "source_property_name": "#toggle_state", + "target_property_name": "#visible" + } + ] + }, + "top_rename_panel": { + "type": "panel", + "size": [ + "100%", + "100%" + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_earth" + }, + { + "binding_type": "view", + "source_control_name": "zoom_toggle_moon", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_moon" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and (#zoom_earth or #zoom_moon))", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "mercury_header@celestial.planet_header": { + "$toggle": "catalog_toggle_mercury", + "$planet_title": "MERCURY" + } + }, + { + "venus_header@celestial.planet_header": { + "$toggle": "catalog_toggle_venus", + "$planet_title": "VENUS" + } + }, + { + "earth_header@celestial.planet_header": { + "$planet_title": "EARTH", + "bindings": [ + { + "binding_type": "view", + "source_control_name": "catalog_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#earth_selected" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_station", + "source_property_name": "#toggle_state", + "target_property_name": "#station_selected" + }, + { + "binding_type": "view", + "source_property_name": "(#earth_selected and not #station_selected)", + "target_property_name": "#visible" + } + ] + } + }, + { + "moon_header@celestial.planet_header": { + "$toggle": "orbital_toggle_moon", + "$planet_title": "MOON" + } + }, + { + "mars_header@celestial.planet_header": { + "$toggle": "catalog_toggle_mars", + "$planet_title": "MARS" + } + }, + { + "asteroids_header@celestial.planet_header": { + "$toggle": "catalog_toggle_asteroids", + "$planet_title": "ASTEROIDS" + } + }, + { + "jupiter_header@celestial.planet_header": { + "$toggle": "catalog_toggle_jupiter", + "$planet_title": "JUPITER" + } + }, + { + "saturn_header@celestial.planet_header": { + "$toggle": "catalog_toggle_saturn", + "$planet_title": "SATURN" + } + }, + { + "uranus_header@celestial.planet_header": { + "$toggle": "catalog_toggle_uranus", + "$planet_title": "URANUS" + } + }, + { + "neptune_header@celestial.planet_header": { + "$toggle": "catalog_toggle_neptune", + "$planet_title": "NEPTUNE" + } + }, + { + "rename_collection": { + "type": "stack_panel", + "orientation": "vertical", + "size": [ + 94, + 11 + ], + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 8 + ], + "collection_name": "form_buttons", + "factory": { + "name": "buttons", + "control_name": "celestial.top_rename_item" + }, + "bindings": [ + { + "binding_name": "#form_button_length", + "binding_name_override": "#collection_length" + } + ] + } + } + ] + }, + "top_rename_item": { + "type": "panel", + "size": [ + 94, + 11 + ], + "controls": [ + { + "clickable_rename@cosmos.button": { + "size": [ + 94, + 11 + ], + "bindings": [ + { + "binding_type": "collection_details", + "binding_collection_name": "form_buttons" + }, + { + "binding_name": "#form_button_text", + "binding_type": "collection", + "binding_collection_name": "form_buttons" + }, + { + "binding_type": "view", + "source_property_name": "#form_text", + "target_property_name": "#form_val" + }, + { + "binding_type": "view", + "source_property_name": "(#form_val - ('%.27s' * #form_val))", + "target_property_name": "#player_name" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_station", + "source_property_name": "#toggle_state", + "target_property_name": "#station_selected" + }, + { + "binding_type": "view", + "source_property_name": "(#station_selected and not (#form_button_text - 'Rename ' = #form_button_text) and not (#form_button_text - #player_name = #form_button_text))", + "target_property_name": "#visible" + } + ], + "$action": "button.form_button_click", + "controls": [ + { + "default": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/station_list_item", + "color": [ + 0, + 0.8, + 0 + ], + "size": [ + 94, + 11 + ], + "layer": 5 + } + }, + { + "hover": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/station_list_item", + "color": [ + 0, + 1, + 0 + ], + "size": [ + 94, + 11 + ], + "layer": 5 + } + }, + { + "label": { + "type": "label", + "text": "RENAME", + "color": [ + 1, + 1, + 1 + ], + "size": [ + "100%", + 10 + ], + "anchor_from": "center", + "anchor_to": "center", + "text_alignment": "center", + "layer": 6 + } + } + ] + } + }, + { + "static_rename": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/station_list_item", + "color": [ + 0.8, + 0, + 0 + ], + "size": [ + 94, + 11 + ], + "layer": 5, + "bindings": [ + { + "binding_type": "collection_details", + "binding_collection_name": "form_buttons" + }, + { + "binding_name": "#form_button_text", + "binding_type": "collection", + "binding_collection_name": "form_buttons" + }, + { + "binding_type": "view", + "source_property_name": "#form_text", + "target_property_name": "#form_val" + }, + { + "binding_type": "view", + "source_property_name": "(#form_val - ('%.27s' * #form_val))", + "target_property_name": "#player_name" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_station", + "source_property_name": "#toggle_state", + "target_property_name": "#station_selected" + }, + { + "binding_type": "view", + "source_property_name": "(#station_selected and not (#form_button_text - 'Rename ' = #form_button_text) and (#form_button_text - #player_name = #form_button_text))", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "label": { + "type": "label", + "text": "RENAME", + "color": [ + 1, + 1, + 1 + ], + "size": [ + "100%", + 10 + ], + "anchor_from": "center", + "anchor_to": "center", + "text_alignment": "center", + "layer": 6 + } + } + ] + } + } + ] + }, + "footer": {} +} \ No newline at end of file diff --git a/RP/ui/celestial/planet_views.json b/RP/ui/celestial/planet_views.json new file mode 100644 index 00000000..959d3420 --- /dev/null +++ b/RP/ui/celestial/planet_views.json @@ -0,0 +1,20113 @@ +{ + "namespace": "celestial", + "zoomed_solar_system": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_earth" + }, + { + "binding_type": "view", + "source_control_name": "zoom_toggle_moon", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_moon" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and (#zoom_earth or #zoom_moon))", + "target_property_name": "#visible" + } + ], + "anims": [ + "@celestial.zoomed_orbit_step1" + ], + "$orbit_duration": 0.117188, + "$x1": [ + -1277.12, + 0.0 + ], + "$x2": [ + -1276.73, + -15.72 + ], + "$x3": [ + -1275.68, + -31.31 + ], + "$x4": [ + -1273.71, + -47.03 + ], + "$x5": [ + -1270.96, + -62.62 + ], + "$x6": [ + -1267.56, + -78.21 + ], + "$x7": [ + -1263.36, + -93.67 + ], + "$x8": [ + -1258.39, + -109.12 + ], + "$x9": [ + -1252.62, + -124.58 + ], + "$x10": [ + -1246.07, + -139.91 + ], + "$x11": [ + -1238.87, + -155.1 + ], + "$x12": [ + -1230.88, + -170.3 + ], + "$x13": [ + -1222.23, + -185.37 + ], + "$x14": [ + -1212.67, + -200.3 + ], + "$x15": [ + -1202.45, + -215.1 + ], + "$x16": [ + -1191.58, + -229.77 + ], + "$x17": [ + -1179.92, + -244.31 + ], + "$x18": [ + -1167.6, + -258.72 + ], + "$x19": [ + -1154.5, + -273.0 + ], + "$x20": [ + -1140.75, + -287.15 + ], + "$x21": [ + -1126.34, + -301.04 + ], + "$x22": [ + -1111.27, + -314.79 + ], + "$x23": [ + -1095.42, + -328.29 + ], + "$x24": [ + -1079.05, + -341.65 + ], + "$x25": [ + -1061.89, + -354.75 + ], + "$x26": [ + -1044.2, + -367.72 + ], + "$x27": [ + -1025.86, + -380.42 + ], + "$x28": [ + -1006.87, + -392.87 + ], + "$x29": [ + -987.22, + -405.05 + ], + "$x30": [ + -967.04, + -417.1 + ], + "$x31": [ + -946.34, + -428.89 + ], + "$x32": [ + -924.99, + -440.29 + ], + "$x33": [ + -903.11, + -451.56 + ], + "$x34": [ + -880.71, + -462.43 + ], + "$x35": [ + -857.66, + -473.17 + ], + "$x36": [ + -834.21, + -483.52 + ], + "$x37": [ + -810.24, + -493.61 + ], + "$x38": [ + -785.74, + -503.43 + ], + "$x39": [ + -760.85, + -512.87 + ], + "$x40": [ + -735.43, + -522.03 + ], + "$x41": [ + -709.5, + -530.94 + ], + "$x42": [ + -683.3, + -539.46 + ], + "$x43": [ + -656.57, + -547.71 + ], + "$x44": [ + -629.45, + -555.57 + ], + "$x45": [ + -602.08, + -563.17 + ], + "$x46": [ + -574.17, + -570.37 + ], + "$x47": [ + -546.01, + -577.32 + ], + "$x48": [ + -517.58, + -583.74 + ], + "$x49": [ + -488.76, + -590.02 + ], + "$x50": [ + -459.68, + -595.79 + ], + "$x51": [ + -430.2, + -601.29 + ], + "$x52": [ + -400.6, + -606.4 + ], + "$x53": [ + -370.73, + -611.12 + ], + "$x54": [ + -340.6, + -615.44 + ], + "$x55": [ + -310.34, + -619.5 + ], + "$x56": [ + -279.82, + -623.04 + ], + "$x57": [ + -249.16, + -626.31 + ], + "$x58": [ + -218.38, + -629.19 + ], + "$x59": [ + -187.46, + -631.68 + ], + "$x60": [ + -156.28, + -633.78 + ], + "$x61": [ + -125.24, + -635.48 + ], + "$x62": [ + -93.93, + -636.79 + ], + "$x63": [ + -62.62, + -637.84 + ], + "$x64": [ + -31.31, + -638.36 + ], + "$x65": [ + 0.0, + -638.63 + ], + "$x66": [ + 31.31, + -638.36 + ], + "$x67": [ + 62.62, + -637.84 + ], + "$x68": [ + 93.93, + -636.79 + ], + "$x69": [ + 125.24, + -635.48 + ], + "$x70": [ + 156.28, + -633.78 + ], + "$x71": [ + 187.46, + -631.68 + ], + "$x72": [ + 218.38, + -629.19 + ], + "$x73": [ + 249.16, + -626.31 + ], + "$x74": [ + 279.82, + -623.04 + ], + "$x75": [ + 310.34, + -619.5 + ], + "$x76": [ + 340.6, + -615.44 + ], + "$x77": [ + 370.73, + -611.12 + ], + "$x78": [ + 400.6, + -606.4 + ], + "$x79": [ + 430.2, + -601.29 + ], + "$x80": [ + 459.68, + -595.79 + ], + "$x81": [ + 488.76, + -590.02 + ], + "$x82": [ + 517.58, + -583.74 + ], + "$x83": [ + 546.01, + -577.32 + ], + "$x84": [ + 574.17, + -570.37 + ], + "$x85": [ + 602.08, + -563.17 + ], + "$x86": [ + 629.45, + -555.57 + ], + "$x87": [ + 656.57, + -547.71 + ], + "$x88": [ + 683.3, + -539.46 + ], + "$x89": [ + 709.5, + -530.94 + ], + "$x90": [ + 735.43, + -522.03 + ], + "$x91": [ + 760.85, + -512.87 + ], + "$x92": [ + 785.74, + -503.43 + ], + "$x93": [ + 810.24, + -493.61 + ], + "$x94": [ + 834.21, + -483.52 + ], + "$x95": [ + 857.66, + -473.17 + ], + "$x96": [ + 880.71, + -462.43 + ], + "$x97": [ + 903.11, + -451.56 + ], + "$x98": [ + 924.99, + -440.29 + ], + "$x99": [ + 946.34, + -428.89 + ], + "$x100": [ + 967.04, + -417.1 + ], + "$x101": [ + 987.22, + -405.05 + ], + "$x102": [ + 1006.87, + -392.87 + ], + "$x103": [ + 1025.86, + -380.42 + ], + "$x104": [ + 1044.2, + -367.72 + ], + "$x105": [ + 1061.89, + -354.75 + ], + "$x106": [ + 1079.05, + -341.65 + ], + "$x107": [ + 1095.42, + -328.29 + ], + "$x108": [ + 1111.27, + -314.79 + ], + "$x109": [ + 1126.34, + -301.04 + ], + "$x110": [ + 1140.75, + -287.15 + ], + "$x111": [ + 1154.5, + -273.0 + ], + "$x112": [ + 1167.6, + -258.72 + ], + "$x113": [ + 1179.92, + -244.31 + ], + "$x114": [ + 1191.58, + -229.77 + ], + "$x115": [ + 1202.45, + -215.1 + ], + "$x116": [ + 1212.67, + -200.3 + ], + "$x117": [ + 1222.23, + -185.37 + ], + "$x118": [ + 1230.88, + -170.3 + ], + "$x119": [ + 1238.87, + -155.1 + ], + "$x120": [ + 1246.07, + -139.91 + ], + "$x121": [ + 1252.62, + -124.58 + ], + "$x122": [ + 1258.39, + -109.12 + ], + "$x123": [ + 1263.36, + -93.67 + ], + "$x124": [ + 1267.56, + -78.21 + ], + "$x125": [ + 1270.96, + -62.62 + ], + "$x126": [ + 1273.71, + -47.03 + ], + "$x127": [ + 1275.68, + -31.31 + ], + "$x128": [ + 1276.73, + -15.72 + ], + "$x129": [ + 1277.12, + 0.0 + ], + "$x130": [ + 1276.73, + 15.72 + ], + "$x131": [ + 1275.68, + 31.31 + ], + "$x132": [ + 1273.71, + 47.03 + ], + "$x133": [ + 1270.96, + 62.62 + ], + "$x134": [ + 1267.56, + 78.21 + ], + "$x135": [ + 1263.36, + 93.67 + ], + "$x136": [ + 1258.39, + 109.12 + ], + "$x137": [ + 1252.62, + 124.58 + ], + "$x138": [ + 1246.07, + 139.91 + ], + "$x139": [ + 1238.87, + 155.1 + ], + "$x140": [ + 1230.88, + 170.3 + ], + "$x141": [ + 1222.23, + 185.37 + ], + "$x142": [ + 1212.67, + 200.3 + ], + "$x143": [ + 1202.45, + 215.1 + ], + "$x144": [ + 1191.58, + 229.77 + ], + "$x145": [ + 1179.92, + 244.31 + ], + "$x146": [ + 1167.6, + 258.72 + ], + "$x147": [ + 1154.5, + 273.0 + ], + "$x148": [ + 1140.75, + 287.15 + ], + "$x149": [ + 1126.34, + 301.04 + ], + "$x150": [ + 1111.27, + 314.79 + ], + "$x151": [ + 1095.42, + 328.29 + ], + "$x152": [ + 1079.05, + 341.65 + ], + "$x153": [ + 1061.89, + 354.75 + ], + "$x154": [ + 1044.2, + 367.72 + ], + "$x155": [ + 1025.86, + 380.42 + ], + "$x156": [ + 1006.87, + 392.87 + ], + "$x157": [ + 987.22, + 405.05 + ], + "$x158": [ + 967.04, + 417.1 + ], + "$x159": [ + 946.34, + 428.89 + ], + "$x160": [ + 924.99, + 440.29 + ], + "$x161": [ + 903.11, + 451.56 + ], + "$x162": [ + 880.71, + 462.43 + ], + "$x163": [ + 857.66, + 473.17 + ], + "$x164": [ + 834.21, + 483.52 + ], + "$x165": [ + 810.24, + 493.61 + ], + "$x166": [ + 785.74, + 503.43 + ], + "$x167": [ + 760.85, + 512.87 + ], + "$x168": [ + 735.43, + 522.03 + ], + "$x169": [ + 709.5, + 530.94 + ], + "$x170": [ + 683.3, + 539.46 + ], + "$x171": [ + 656.57, + 547.71 + ], + "$x172": [ + 629.45, + 555.57 + ], + "$x173": [ + 602.08, + 563.17 + ], + "$x174": [ + 574.17, + 570.37 + ], + "$x175": [ + 546.01, + 577.32 + ], + "$x176": [ + 517.58, + 583.74 + ], + "$x177": [ + 488.76, + 590.02 + ], + "$x178": [ + 459.68, + 595.79 + ], + "$x179": [ + 430.2, + 601.29 + ], + "$x180": [ + 400.6, + 606.4 + ], + "$x181": [ + 370.73, + 611.12 + ], + "$x182": [ + 340.6, + 615.44 + ], + "$x183": [ + 310.34, + 619.5 + ], + "$x184": [ + 279.82, + 623.04 + ], + "$x185": [ + 249.16, + 626.31 + ], + "$x186": [ + 218.38, + 629.19 + ], + "$x187": [ + 187.46, + 631.68 + ], + "$x188": [ + 156.28, + 633.78 + ], + "$x189": [ + 125.24, + 635.48 + ], + "$x190": [ + 93.93, + 636.79 + ], + "$x191": [ + 62.62, + 637.84 + ], + "$x192": [ + 31.31, + 638.36 + ], + "$x193": [ + 0.0, + 638.63 + ], + "$x194": [ + -31.31, + 638.36 + ], + "$x195": [ + -62.62, + 637.84 + ], + "$x196": [ + -93.93, + 636.79 + ], + "$x197": [ + -125.24, + 635.48 + ], + "$x198": [ + -156.28, + 633.78 + ], + "$x199": [ + -187.46, + 631.68 + ], + "$x200": [ + -218.38, + 629.19 + ], + "$x201": [ + -249.16, + 626.31 + ], + "$x202": [ + -279.82, + 623.04 + ], + "$x203": [ + -310.34, + 619.5 + ], + "$x204": [ + -340.6, + 615.44 + ], + "$x205": [ + -370.73, + 611.12 + ], + "$x206": [ + -400.6, + 606.4 + ], + "$x207": [ + -430.2, + 601.29 + ], + "$x208": [ + -459.68, + 595.79 + ], + "$x209": [ + -488.76, + 590.02 + ], + "$x210": [ + -517.58, + 583.74 + ], + "$x211": [ + -546.01, + 577.32 + ], + "$x212": [ + -574.17, + 570.37 + ], + "$x213": [ + -602.08, + 563.17 + ], + "$x214": [ + -629.45, + 555.57 + ], + "$x215": [ + -656.57, + 547.71 + ], + "$x216": [ + -683.3, + 539.46 + ], + "$x217": [ + -709.5, + 530.94 + ], + "$x218": [ + -735.43, + 522.03 + ], + "$x219": [ + -760.85, + 512.87 + ], + "$x220": [ + -785.74, + 503.43 + ], + "$x221": [ + -810.24, + 493.61 + ], + "$x222": [ + -834.21, + 483.52 + ], + "$x223": [ + -857.66, + 473.17 + ], + "$x224": [ + -880.71, + 462.43 + ], + "$x225": [ + -903.11, + 451.56 + ], + "$x226": [ + -924.99, + 440.29 + ], + "$x227": [ + -946.34, + 428.89 + ], + "$x228": [ + -967.04, + 417.1 + ], + "$x229": [ + -987.22, + 405.05 + ], + "$x230": [ + -1006.87, + 392.87 + ], + "$x231": [ + -1025.86, + 380.42 + ], + "$x232": [ + -1044.2, + 367.72 + ], + "$x233": [ + -1061.89, + 354.75 + ], + "$x234": [ + -1079.05, + 341.65 + ], + "$x235": [ + -1095.42, + 328.29 + ], + "$x236": [ + -1111.27, + 314.79 + ], + "$x237": [ + -1126.34, + 301.04 + ], + "$x238": [ + -1140.75, + 287.15 + ], + "$x239": [ + -1154.5, + 273.0 + ], + "$x240": [ + -1167.6, + 258.72 + ], + "$x241": [ + -1179.92, + 244.31 + ], + "$x242": [ + -1191.58, + 229.77 + ], + "$x243": [ + -1202.45, + 215.1 + ], + "$x244": [ + -1212.67, + 200.3 + ], + "$x245": [ + -1222.23, + 185.37 + ], + "$x246": [ + -1230.88, + 170.3 + ], + "$x247": [ + -1238.87, + 155.1 + ], + "$x248": [ + -1246.07, + 139.91 + ], + "$x249": [ + -1252.62, + 124.58 + ], + "$x250": [ + -1258.39, + 109.12 + ], + "$x251": [ + -1263.36, + 93.67 + ], + "$x252": [ + -1267.56, + 78.21 + ], + "$x253": [ + -1270.96, + 62.62 + ], + "$x254": [ + -1273.71, + 47.03 + ], + "$x255": [ + -1275.68, + 31.31 + ], + "$x256": [ + -1276.73, + 15.72 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + }, + { + "Earth@celestial.earth_planet_zoomed": { + "$control_name": "overworld", + "anims": [ + "@celestial.zoomed_orbit_step1" + ], + "$orbit_duration": 0.117188, + "$x1": [ + 1277.12, + 0.0 + ], + "$x2": [ + 1276.73, + 15.72 + ], + "$x3": [ + 1275.68, + 31.31 + ], + "$x4": [ + 1273.71, + 47.03 + ], + "$x5": [ + 1270.96, + 62.62 + ], + "$x6": [ + 1267.56, + 78.21 + ], + "$x7": [ + 1263.36, + 93.67 + ], + "$x8": [ + 1258.39, + 109.12 + ], + "$x9": [ + 1252.62, + 124.58 + ], + "$x10": [ + 1246.07, + 139.91 + ], + "$x11": [ + 1238.87, + 155.1 + ], + "$x12": [ + 1230.88, + 170.3 + ], + "$x13": [ + 1222.23, + 185.37 + ], + "$x14": [ + 1212.67, + 200.3 + ], + "$x15": [ + 1202.45, + 215.1 + ], + "$x16": [ + 1191.58, + 229.77 + ], + "$x17": [ + 1179.92, + 244.31 + ], + "$x18": [ + 1167.6, + 258.72 + ], + "$x19": [ + 1154.5, + 273.0 + ], + "$x20": [ + 1140.75, + 287.15 + ], + "$x21": [ + 1126.34, + 301.04 + ], + "$x22": [ + 1111.27, + 314.79 + ], + "$x23": [ + 1095.42, + 328.29 + ], + "$x24": [ + 1079.05, + 341.65 + ], + "$x25": [ + 1061.89, + 354.75 + ], + "$x26": [ + 1044.2, + 367.72 + ], + "$x27": [ + 1025.86, + 380.42 + ], + "$x28": [ + 1006.87, + 392.87 + ], + "$x29": [ + 987.22, + 405.05 + ], + "$x30": [ + 967.04, + 417.1 + ], + "$x31": [ + 946.34, + 428.89 + ], + "$x32": [ + 924.99, + 440.29 + ], + "$x33": [ + 903.11, + 451.56 + ], + "$x34": [ + 880.71, + 462.43 + ], + "$x35": [ + 857.66, + 473.17 + ], + "$x36": [ + 834.21, + 483.52 + ], + "$x37": [ + 810.24, + 493.61 + ], + "$x38": [ + 785.74, + 503.43 + ], + "$x39": [ + 760.85, + 512.87 + ], + "$x40": [ + 735.43, + 522.03 + ], + "$x41": [ + 709.5, + 530.94 + ], + "$x42": [ + 683.3, + 539.46 + ], + "$x43": [ + 656.57, + 547.71 + ], + "$x44": [ + 629.45, + 555.57 + ], + "$x45": [ + 602.08, + 563.17 + ], + "$x46": [ + 574.17, + 570.37 + ], + "$x47": [ + 546.01, + 577.32 + ], + "$x48": [ + 517.58, + 583.74 + ], + "$x49": [ + 488.76, + 590.02 + ], + "$x50": [ + 459.68, + 595.79 + ], + "$x51": [ + 430.2, + 601.29 + ], + "$x52": [ + 400.6, + 606.4 + ], + "$x53": [ + 370.73, + 611.12 + ], + "$x54": [ + 340.6, + 615.44 + ], + "$x55": [ + 310.34, + 619.5 + ], + "$x56": [ + 279.82, + 623.04 + ], + "$x57": [ + 249.16, + 626.31 + ], + "$x58": [ + 218.38, + 629.19 + ], + "$x59": [ + 187.46, + 631.68 + ], + "$x60": [ + 156.28, + 633.78 + ], + "$x61": [ + 125.24, + 635.48 + ], + "$x62": [ + 93.93, + 636.79 + ], + "$x63": [ + 62.62, + 637.84 + ], + "$x64": [ + 31.31, + 638.36 + ], + "$x65": [ + 0.0, + 638.63 + ], + "$x66": [ + -31.31, + 638.36 + ], + "$x67": [ + -62.62, + 637.84 + ], + "$x68": [ + -93.93, + 636.79 + ], + "$x69": [ + -125.24, + 635.48 + ], + "$x70": [ + -156.28, + 633.78 + ], + "$x71": [ + -187.46, + 631.68 + ], + "$x72": [ + -218.38, + 629.19 + ], + "$x73": [ + -249.16, + 626.31 + ], + "$x74": [ + -279.82, + 623.04 + ], + "$x75": [ + -310.34, + 619.5 + ], + "$x76": [ + -340.6, + 615.44 + ], + "$x77": [ + -370.73, + 611.12 + ], + "$x78": [ + -400.6, + 606.4 + ], + "$x79": [ + -430.2, + 601.29 + ], + "$x80": [ + -459.68, + 595.79 + ], + "$x81": [ + -488.76, + 590.02 + ], + "$x82": [ + -517.58, + 583.74 + ], + "$x83": [ + -546.01, + 577.32 + ], + "$x84": [ + -574.17, + 570.37 + ], + "$x85": [ + -602.08, + 563.17 + ], + "$x86": [ + -629.45, + 555.57 + ], + "$x87": [ + -656.57, + 547.71 + ], + "$x88": [ + -683.3, + 539.46 + ], + "$x89": [ + -709.5, + 530.94 + ], + "$x90": [ + -735.43, + 522.03 + ], + "$x91": [ + -760.85, + 512.87 + ], + "$x92": [ + -785.74, + 503.43 + ], + "$x93": [ + -810.24, + 493.61 + ], + "$x94": [ + -834.21, + 483.52 + ], + "$x95": [ + -857.66, + 473.17 + ], + "$x96": [ + -880.71, + 462.43 + ], + "$x97": [ + -903.11, + 451.56 + ], + "$x98": [ + -924.99, + 440.29 + ], + "$x99": [ + -946.34, + 428.89 + ], + "$x100": [ + -967.04, + 417.1 + ], + "$x101": [ + -987.22, + 405.05 + ], + "$x102": [ + -1006.87, + 392.87 + ], + "$x103": [ + -1025.86, + 380.42 + ], + "$x104": [ + -1044.2, + 367.72 + ], + "$x105": [ + -1061.89, + 354.75 + ], + "$x106": [ + -1079.05, + 341.65 + ], + "$x107": [ + -1095.42, + 328.29 + ], + "$x108": [ + -1111.27, + 314.79 + ], + "$x109": [ + -1126.34, + 301.04 + ], + "$x110": [ + -1140.75, + 287.15 + ], + "$x111": [ + -1154.5, + 273.0 + ], + "$x112": [ + -1167.6, + 258.72 + ], + "$x113": [ + -1179.92, + 244.31 + ], + "$x114": [ + -1191.58, + 229.77 + ], + "$x115": [ + -1202.45, + 215.1 + ], + "$x116": [ + -1212.67, + 200.3 + ], + "$x117": [ + -1222.23, + 185.37 + ], + "$x118": [ + -1230.88, + 170.3 + ], + "$x119": [ + -1238.87, + 155.1 + ], + "$x120": [ + -1246.07, + 139.91 + ], + "$x121": [ + -1252.62, + 124.58 + ], + "$x122": [ + -1258.39, + 109.12 + ], + "$x123": [ + -1263.36, + 93.67 + ], + "$x124": [ + -1267.56, + 78.21 + ], + "$x125": [ + -1270.96, + 62.62 + ], + "$x126": [ + -1273.71, + 47.03 + ], + "$x127": [ + -1275.68, + 31.31 + ], + "$x128": [ + -1276.73, + 15.72 + ], + "$x129": [ + -1277.12, + 0.0 + ], + "$x130": [ + -1276.73, + -15.72 + ], + "$x131": [ + -1275.68, + -31.31 + ], + "$x132": [ + -1273.71, + -47.03 + ], + "$x133": [ + -1270.96, + -62.62 + ], + "$x134": [ + -1267.56, + -78.21 + ], + "$x135": [ + -1263.36, + -93.67 + ], + "$x136": [ + -1258.39, + -109.12 + ], + "$x137": [ + -1252.62, + -124.58 + ], + "$x138": [ + -1246.07, + -139.91 + ], + "$x139": [ + -1238.87, + -155.1 + ], + "$x140": [ + -1230.88, + -170.3 + ], + "$x141": [ + -1222.23, + -185.37 + ], + "$x142": [ + -1212.67, + -200.3 + ], + "$x143": [ + -1202.45, + -215.1 + ], + "$x144": [ + -1191.58, + -229.77 + ], + "$x145": [ + -1179.92, + -244.31 + ], + "$x146": [ + -1167.6, + -258.72 + ], + "$x147": [ + -1154.5, + -273.0 + ], + "$x148": [ + -1140.75, + -287.15 + ], + "$x149": [ + -1126.34, + -301.04 + ], + "$x150": [ + -1111.27, + -314.79 + ], + "$x151": [ + -1095.42, + -328.29 + ], + "$x152": [ + -1079.05, + -341.65 + ], + "$x153": [ + -1061.89, + -354.75 + ], + "$x154": [ + -1044.2, + -367.72 + ], + "$x155": [ + -1025.86, + -380.42 + ], + "$x156": [ + -1006.87, + -392.87 + ], + "$x157": [ + -987.22, + -405.05 + ], + "$x158": [ + -967.04, + -417.1 + ], + "$x159": [ + -946.34, + -428.89 + ], + "$x160": [ + -924.99, + -440.29 + ], + "$x161": [ + -903.11, + -451.56 + ], + "$x162": [ + -880.71, + -462.43 + ], + "$x163": [ + -857.66, + -473.17 + ], + "$x164": [ + -834.21, + -483.52 + ], + "$x165": [ + -810.24, + -493.61 + ], + "$x166": [ + -785.74, + -503.43 + ], + "$x167": [ + -760.85, + -512.87 + ], + "$x168": [ + -735.43, + -522.03 + ], + "$x169": [ + -709.5, + -530.94 + ], + "$x170": [ + -683.3, + -539.46 + ], + "$x171": [ + -656.57, + -547.71 + ], + "$x172": [ + -629.45, + -555.57 + ], + "$x173": [ + -602.08, + -563.17 + ], + "$x174": [ + -574.17, + -570.37 + ], + "$x175": [ + -546.01, + -577.32 + ], + "$x176": [ + -517.58, + -583.74 + ], + "$x177": [ + -488.76, + -590.02 + ], + "$x178": [ + -459.68, + -595.79 + ], + "$x179": [ + -430.2, + -601.29 + ], + "$x180": [ + -400.6, + -606.4 + ], + "$x181": [ + -370.73, + -611.12 + ], + "$x182": [ + -340.6, + -615.44 + ], + "$x183": [ + -310.34, + -619.5 + ], + "$x184": [ + -279.82, + -623.04 + ], + "$x185": [ + -249.16, + -626.31 + ], + "$x186": [ + -218.38, + -629.19 + ], + "$x187": [ + -187.46, + -631.68 + ], + "$x188": [ + -156.28, + -633.78 + ], + "$x189": [ + -125.24, + -635.48 + ], + "$x190": [ + -93.93, + -636.79 + ], + "$x191": [ + -62.62, + -637.84 + ], + "$x192": [ + -31.31, + -638.36 + ], + "$x193": [ + 0.0, + -638.63 + ], + "$x194": [ + 31.31, + -638.36 + ], + "$x195": [ + 62.62, + -637.84 + ], + "$x196": [ + 93.93, + -636.79 + ], + "$x197": [ + 125.24, + -635.48 + ], + "$x198": [ + 156.28, + -633.78 + ], + "$x199": [ + 187.46, + -631.68 + ], + "$x200": [ + 218.38, + -629.19 + ], + "$x201": [ + 249.16, + -626.31 + ], + "$x202": [ + 279.82, + -623.04 + ], + "$x203": [ + 310.34, + -619.5 + ], + "$x204": [ + 340.6, + -615.44 + ], + "$x205": [ + 370.73, + -611.12 + ], + "$x206": [ + 400.6, + -606.4 + ], + "$x207": [ + 430.2, + -601.29 + ], + "$x208": [ + 459.68, + -595.79 + ], + "$x209": [ + 488.76, + -590.02 + ], + "$x210": [ + 517.58, + -583.74 + ], + "$x211": [ + 546.01, + -577.32 + ], + "$x212": [ + 574.17, + -570.37 + ], + "$x213": [ + 602.08, + -563.17 + ], + "$x214": [ + 629.45, + -555.57 + ], + "$x215": [ + 656.57, + -547.71 + ], + "$x216": [ + 683.3, + -539.46 + ], + "$x217": [ + 709.5, + -530.94 + ], + "$x218": [ + 735.43, + -522.03 + ], + "$x219": [ + 760.85, + -512.87 + ], + "$x220": [ + 785.74, + -503.43 + ], + "$x221": [ + 810.24, + -493.61 + ], + "$x222": [ + 834.21, + -483.52 + ], + "$x223": [ + 857.66, + -473.17 + ], + "$x224": [ + 880.71, + -462.43 + ], + "$x225": [ + 903.11, + -451.56 + ], + "$x226": [ + 924.99, + -440.29 + ], + "$x227": [ + 946.34, + -428.89 + ], + "$x228": [ + 967.04, + -417.1 + ], + "$x229": [ + 987.22, + -405.05 + ], + "$x230": [ + 1006.87, + -392.87 + ], + "$x231": [ + 1025.86, + -380.42 + ], + "$x232": [ + 1044.2, + -367.72 + ], + "$x233": [ + 1061.89, + -354.75 + ], + "$x234": [ + 1079.05, + -341.65 + ], + "$x235": [ + 1095.42, + -328.29 + ], + "$x236": [ + 1111.27, + -314.79 + ], + "$x237": [ + 1126.34, + -301.04 + ], + "$x238": [ + 1140.75, + -287.15 + ], + "$x239": [ + 1154.5, + -273.0 + ], + "$x240": [ + 1167.6, + -258.72 + ], + "$x241": [ + 1179.92, + -244.31 + ], + "$x242": [ + 1191.58, + -229.77 + ], + "$x243": [ + 1202.45, + -215.1 + ], + "$x244": [ + 1212.67, + -200.3 + ], + "$x245": [ + 1222.23, + -185.37 + ], + "$x246": [ + 1230.88, + -170.3 + ], + "$x247": [ + 1238.87, + -155.1 + ], + "$x248": [ + 1246.07, + -139.91 + ], + "$x249": [ + 1252.62, + -124.58 + ], + "$x250": [ + 1258.39, + -109.12 + ], + "$x251": [ + 1263.36, + -93.67 + ], + "$x252": [ + 1267.56, + -78.21 + ], + "$x253": [ + 1270.96, + -62.62 + ], + "$x254": [ + 1273.71, + -47.03 + ], + "$x255": [ + 1275.68, + -31.31 + ], + "$x256": [ + 1276.73, + -15.72 + ] + } + } + ] + }, + "earth_planet_zoomed": { + "type": "panel", + "size": [ + 356.56, + 177.4 + ], + "controls": [ + { + "moon_ring": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/moon_orbit", + "size": [ + 356.56, + 177.4 + ], + "alpha": 0.25 + } + }, + { + "station_ring": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/station_orbit", + "size": [ + 217.5, + 108.22 + ], + "alpha": 0.25, + "bindings": [ + { + "binding_type": "view", + "source_property_name": "(not (#form_text - 'Station true' = #form_text))", + "target_property_name": "#visible" + } + ] + } + }, + { + "earth_zoomed": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/earth", + "size": [ + 52, + 52 + ], + "controls": [ + { + "orbital_toggle_overworld_zoom@celestial.selection_box": { + "toggle_default_state": false, + "$select_name": "('orbital_toggle_' + $control_name)", + "$selection_size": [ + 60, + 60 + ] + } + } + ] + } + }, + { + "orbiting_moon": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/moon", + "size": [ + 14, + 14 + ], + "anims": [ + "@celestial.moon_local_orbit_step1" + ], + "$moon_orbit_duration": 0.046875, + "controls": [ + { + "orbital_toggle_moon@cosmos.toggle": { + "toggle_default_state": false, + "toggle_grid_collection_name": "orbital_planet", + "toggle_name": "orbital_planet", + "size": [ + 18, + 18 + ], + "controls": [ + { + "checked_hover": { + "type": "image", + "size": [ + 18, + 18 + ], + "texture": "textures/ui/cosmos/celestial_selector/selection_box", + "color": [ + 1, + 1, + 0 + ], + "layer": 7, + "anims": [ + "@celestial.fade_loop" + ] + } + } + ] + } + } + ], + "$m1": [ + 170, + 0 + ], + "$m2": [ + 169.8, + 4.17 + ], + "$m3": [ + 169.18, + 8.33 + ], + "$m4": [ + 168.16, + 12.47 + ], + "$m5": [ + 166.73, + 16.58 + ], + "$m6": [ + 164.91, + 20.65 + ], + "$m7": [ + 162.68, + 24.67 + ], + "$m8": [ + 160.06, + 28.64 + ], + "$m9": [ + 157.06, + 32.53 + ], + "$m10": [ + 153.68, + 36.34 + ], + "$m11": [ + 149.93, + 40.07 + ], + "$m12": [ + 145.81, + 43.7 + ], + "$m13": [ + 141.35, + 47.22 + ], + "$m14": [ + 136.55, + 50.63 + ], + "$m15": [ + 131.41, + 53.92 + ], + "$m16": [ + 125.96, + 57.08 + ], + "$m17": [ + 120.21, + 60.1 + ], + "$m18": [ + 114.17, + 62.98 + ], + "$m19": [ + 107.85, + 65.71 + ], + "$m20": [ + 101.27, + 68.27 + ], + "$m21": [ + 94.45, + 70.67 + ], + "$m22": [ + 87.4, + 72.91 + ], + "$m23": [ + 80.14, + 74.96 + ], + "$m24": [ + 72.68, + 76.84 + ], + "$m25": [ + 65.06, + 78.53 + ], + "$m26": [ + 57.27, + 80.03 + ], + "$m27": [ + 49.35, + 81.34 + ], + "$m28": [ + 41.31, + 82.45 + ], + "$m29": [ + 33.17, + 83.37 + ], + "$m30": [ + 24.94, + 84.08 + ], + "$m31": [ + 16.66, + 84.59 + ], + "$m32": [ + 8.34, + 84.9 + ], + "$m33": [ + 0, + 85 + ], + "$m34": [ + -8.34, + 84.9 + ], + "$m35": [ + -16.66, + 84.59 + ], + "$m36": [ + -24.94, + 84.08 + ], + "$m37": [ + -33.17, + 83.37 + ], + "$m38": [ + -41.31, + 82.45 + ], + "$m39": [ + -49.35, + 81.34 + ], + "$m40": [ + -57.27, + 80.03 + ], + "$m41": [ + -65.06, + 78.53 + ], + "$m42": [ + -72.68, + 76.84 + ], + "$m43": [ + -80.14, + 74.96 + ], + "$m44": [ + -87.4, + 72.91 + ], + "$m45": [ + -94.45, + 70.67 + ], + "$m46": [ + -101.27, + 68.27 + ], + "$m47": [ + -107.85, + 65.71 + ], + "$m48": [ + -114.17, + 62.98 + ], + "$m49": [ + -120.21, + 60.1 + ], + "$m50": [ + -125.96, + 57.08 + ], + "$m51": [ + -131.41, + 53.92 + ], + "$m52": [ + -136.55, + 50.63 + ], + "$m53": [ + -141.35, + 47.22 + ], + "$m54": [ + -145.81, + 43.7 + ], + "$m55": [ + -149.93, + 40.07 + ], + "$m56": [ + -153.68, + 36.34 + ], + "$m57": [ + -157.06, + 32.53 + ], + "$m58": [ + -160.06, + 28.64 + ], + "$m59": [ + -162.68, + 24.67 + ], + "$m60": [ + -164.91, + 20.65 + ], + "$m61": [ + -166.73, + 16.58 + ], + "$m62": [ + -168.16, + 12.47 + ], + "$m63": [ + -169.18, + 8.33 + ], + "$m64": [ + -169.8, + 4.17 + ], + "$m65": [ + -170, + 0 + ], + "$m66": [ + -169.8, + -4.17 + ], + "$m67": [ + -169.18, + -8.33 + ], + "$m68": [ + -168.16, + -12.47 + ], + "$m69": [ + -166.73, + -16.58 + ], + "$m70": [ + -164.91, + -20.65 + ], + "$m71": [ + -162.68, + -24.67 + ], + "$m72": [ + -160.06, + -28.64 + ], + "$m73": [ + -157.06, + -32.53 + ], + "$m74": [ + -153.68, + -36.34 + ], + "$m75": [ + -149.93, + -40.07 + ], + "$m76": [ + -145.81, + -43.7 + ], + "$m77": [ + -141.35, + -47.22 + ], + "$m78": [ + -136.55, + -50.63 + ], + "$m79": [ + -131.41, + -53.92 + ], + "$m80": [ + -125.96, + -57.08 + ], + "$m81": [ + -120.21, + -60.1 + ], + "$m82": [ + -114.17, + -62.98 + ], + "$m83": [ + -107.85, + -65.71 + ], + "$m84": [ + -101.27, + -68.27 + ], + "$m85": [ + -94.45, + -70.67 + ], + "$m86": [ + -87.4, + -72.91 + ], + "$m87": [ + -80.14, + -74.96 + ], + "$m88": [ + -72.68, + -76.84 + ], + "$m89": [ + -65.06, + -78.53 + ], + "$m90": [ + -57.27, + -80.03 + ], + "$m91": [ + -49.35, + -81.34 + ], + "$m92": [ + -41.31, + -82.45 + ], + "$m93": [ + -33.17, + -83.37 + ], + "$m94": [ + -24.94, + -84.08 + ], + "$m95": [ + -16.66, + -84.59 + ], + "$m96": [ + -8.34, + -84.9 + ], + "$m97": [ + 0, + -85 + ], + "$m98": [ + 8.34, + -84.9 + ], + "$m99": [ + 16.66, + -84.59 + ], + "$m100": [ + 24.94, + -84.08 + ], + "$m101": [ + 33.17, + -83.37 + ], + "$m102": [ + 41.31, + -82.45 + ], + "$m103": [ + 49.35, + -81.34 + ], + "$m104": [ + 57.27, + -80.03 + ], + "$m105": [ + 65.06, + -78.53 + ], + "$m106": [ + 72.68, + -76.84 + ], + "$m107": [ + 80.14, + -74.96 + ], + "$m108": [ + 87.4, + -72.91 + ], + "$m109": [ + 94.45, + -70.67 + ], + "$m110": [ + 101.27, + -68.27 + ], + "$m111": [ + 107.85, + -65.71 + ], + "$m112": [ + 114.17, + -62.98 + ], + "$m113": [ + 120.21, + -60.1 + ], + "$m114": [ + 125.96, + -57.08 + ], + "$m115": [ + 131.41, + -53.92 + ], + "$m116": [ + 136.55, + -50.63 + ], + "$m117": [ + 141.35, + -47.22 + ], + "$m118": [ + 145.81, + -43.7 + ], + "$m119": [ + 149.93, + -40.07 + ], + "$m120": [ + 153.68, + -36.34 + ], + "$m121": [ + 157.06, + -32.53 + ], + "$m122": [ + 160.06, + -28.64 + ], + "$m123": [ + 162.68, + -24.67 + ], + "$m124": [ + 164.91, + -20.65 + ], + "$m125": [ + 166.73, + -16.58 + ], + "$m126": [ + 168.16, + -12.47 + ], + "$m127": [ + 169.18, + -8.33 + ], + "$m128": [ + 169.8, + -4.17 + ] + } + }, + { + "orbiting_station": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/space_station", + "size": [ + 12, + 12 + ], + "anims": [ + "@celestial.station_local_orbit_step1" + ], + "$station_orbit_duration": 0.03125, + "bindings": [ + { + "binding_type": "view", + "source_property_name": "(not (#form_text - 'Station true' = #form_text))", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "orbital_toggle_station@cosmos.toggle": { + "toggle_default_state": false, + "toggle_grid_collection_name": "orbital_planet", + "toggle_name": "orbital_planet", + "size": [ + 16, + 16 + ], + "controls": [ + { + "checked_hover": { + "type": "image", + "size": [ + 16, + 16 + ], + "texture": "textures/ui/cosmos/celestial_selector/selection_box", + "color": [ + 1, + 1, + 0 + ], + "layer": 7, + "anims": [ + "@celestial.fade_loop" + ] + } + } + ] + } + } + ], + "$s1": [ + 108.75, + 0.0 + ], + "$s2": [ + 108.62, + 2.66 + ], + "$s3": [ + 108.23, + 5.3 + ], + "$s4": [ + 107.57, + 7.94 + ], + "$s5": [ + 106.66, + 10.56 + ], + "$s6": [ + 105.49, + 13.15 + ], + "$s7": [ + 104.07, + 15.71 + ], + "$s8": [ + 102.39, + 18.23 + ], + "$s9": [ + 100.47, + 20.71 + ], + "$s10": [ + 98.31, + 23.14 + ], + "$s11": [ + 95.91, + 25.51 + ], + "$s12": [ + 93.28, + 27.82 + ], + "$s13": [ + 90.42, + 30.06 + ], + "$s14": [ + 87.35, + 32.23 + ], + "$s15": [ + 84.06, + 34.33 + ], + "$s16": [ + 80.58, + 36.34 + ], + "$s17": [ + 76.9, + 38.26 + ], + "$s18": [ + 73.03, + 40.09 + ], + "$s19": [ + 68.99, + 41.83 + ], + "$s20": [ + 64.78, + 43.46 + ], + "$s21": [ + 60.42, + 44.99 + ], + "$s22": [ + 55.91, + 46.41 + ], + "$s23": [ + 51.26, + 47.72 + ], + "$s24": [ + 46.5, + 48.91 + ], + "$s25": [ + 41.62, + 49.99 + ], + "$s26": [ + 36.64, + 50.95 + ], + "$s27": [ + 31.57, + 51.78 + ], + "$s28": [ + 26.42, + 52.49 + ], + "$s29": [ + 21.22, + 53.07 + ], + "$s30": [ + 15.96, + 53.52 + ], + "$s31": [ + 10.66, + 53.85 + ], + "$s32": [ + 5.34, + 54.04 + ], + "$s33": [ + 0.0, + 54.11 + ], + "$s34": [ + -5.34, + 54.04 + ], + "$s35": [ + -10.66, + 53.85 + ], + "$s36": [ + -15.96, + 53.52 + ], + "$s37": [ + -21.22, + 53.07 + ], + "$s38": [ + -26.42, + 52.49 + ], + "$s39": [ + -31.57, + 51.78 + ], + "$s40": [ + -36.64, + 50.95 + ], + "$s41": [ + -41.62, + 49.99 + ], + "$s42": [ + -46.5, + 48.91 + ], + "$s43": [ + -51.26, + 47.72 + ], + "$s44": [ + -55.91, + 46.41 + ], + "$s45": [ + -60.42, + 44.99 + ], + "$s46": [ + -64.78, + 43.46 + ], + "$s47": [ + -68.99, + 41.83 + ], + "$s48": [ + -73.03, + 40.09 + ], + "$s49": [ + -76.9, + 38.26 + ], + "$s50": [ + -80.58, + 36.34 + ], + "$s51": [ + -84.06, + 34.33 + ], + "$s52": [ + -87.35, + 32.23 + ], + "$s53": [ + -90.42, + 30.06 + ], + "$s54": [ + -93.28, + 27.82 + ], + "$s55": [ + -95.91, + 25.51 + ], + "$s56": [ + -98.31, + 23.14 + ], + "$s57": [ + -100.47, + 20.71 + ], + "$s58": [ + -102.39, + 18.23 + ], + "$s59": [ + -104.07, + 15.71 + ], + "$s60": [ + -105.49, + 13.15 + ], + "$s61": [ + -106.66, + 10.56 + ], + "$s62": [ + -107.57, + 7.94 + ], + "$s63": [ + -108.23, + 5.3 + ], + "$s64": [ + -108.62, + 2.66 + ], + "$s65": [ + -108.75, + 0.0 + ], + "$s66": [ + -108.62, + -2.66 + ], + "$s67": [ + -108.23, + -5.3 + ], + "$s68": [ + -107.57, + -7.94 + ], + "$s69": [ + -106.66, + -10.56 + ], + "$s70": [ + -105.49, + -13.15 + ], + "$s71": [ + -104.07, + -15.71 + ], + "$s72": [ + -102.39, + -18.23 + ], + "$s73": [ + -100.47, + -20.71 + ], + "$s74": [ + -98.31, + -23.14 + ], + "$s75": [ + -95.91, + -25.51 + ], + "$s76": [ + -93.28, + -27.82 + ], + "$s77": [ + -90.42, + -30.06 + ], + "$s78": [ + -87.35, + -32.23 + ], + "$s79": [ + -84.06, + -34.33 + ], + "$s80": [ + -80.58, + -36.34 + ], + "$s81": [ + -76.9, + -38.26 + ], + "$s82": [ + -73.03, + -40.09 + ], + "$s83": [ + -68.99, + -41.83 + ], + "$s84": [ + -64.78, + -43.46 + ], + "$s85": [ + -60.42, + -44.99 + ], + "$s86": [ + -55.91, + -46.41 + ], + "$s87": [ + -51.26, + -47.72 + ], + "$s88": [ + -46.5, + -48.91 + ], + "$s89": [ + -41.62, + -49.99 + ], + "$s90": [ + -36.64, + -50.95 + ], + "$s91": [ + -31.57, + -51.78 + ], + "$s92": [ + -26.42, + -52.49 + ], + "$s93": [ + -21.22, + -53.07 + ], + "$s94": [ + -15.96, + -53.52 + ], + "$s95": [ + -10.66, + -53.85 + ], + "$s96": [ + -5.34, + -54.04 + ], + "$s97": [ + -0.0, + -54.11 + ], + "$s98": [ + 5.34, + -54.04 + ], + "$s99": [ + 10.66, + -53.85 + ], + "$s100": [ + 15.96, + -53.52 + ], + "$s101": [ + 21.22, + -53.07 + ], + "$s102": [ + 26.42, + -52.49 + ], + "$s103": [ + 31.57, + -51.78 + ], + "$s104": [ + 36.64, + -50.95 + ], + "$s105": [ + 41.62, + -49.99 + ], + "$s106": [ + 46.5, + -48.91 + ], + "$s107": [ + 51.26, + -47.72 + ], + "$s108": [ + 55.91, + -46.41 + ], + "$s109": [ + 60.42, + -44.99 + ], + "$s110": [ + 64.78, + -43.46 + ], + "$s111": [ + 68.99, + -41.83 + ], + "$s112": [ + 73.03, + -40.09 + ], + "$s113": [ + 76.9, + -38.26 + ], + "$s114": [ + 80.58, + -36.34 + ], + "$s115": [ + 84.06, + -34.33 + ], + "$s116": [ + 87.35, + -32.23 + ], + "$s117": [ + 90.42, + -30.06 + ], + "$s118": [ + 93.28, + -27.82 + ], + "$s119": [ + 95.91, + -25.51 + ], + "$s120": [ + 98.31, + -23.14 + ], + "$s121": [ + 100.47, + -20.71 + ], + "$s122": [ + 102.39, + -18.23 + ], + "$s123": [ + 104.07, + -15.71 + ], + "$s124": [ + 105.49, + -13.15 + ], + "$s125": [ + 106.66, + -10.56 + ], + "$s126": [ + 107.57, + -7.94 + ], + "$s127": [ + 108.23, + -5.3 + ], + "$s128": [ + 108.62, + -2.66 + ] + } + } + ] + }, + "zoomed_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1", + "to": "$x2", + "next": "@celestial.zoomed_orbit_step2" + }, + "zoomed_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x2", + "to": "$x3", + "next": "@celestial.zoomed_orbit_step3" + }, + "zoomed_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x3", + "to": "$x4", + "next": "@celestial.zoomed_orbit_step4" + }, + "zoomed_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x4", + "to": "$x5", + "next": "@celestial.zoomed_orbit_step5" + }, + "zoomed_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x5", + "to": "$x6", + "next": "@celestial.zoomed_orbit_step6" + }, + "zoomed_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x6", + "to": "$x7", + "next": "@celestial.zoomed_orbit_step7" + }, + "zoomed_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x7", + "to": "$x8", + "next": "@celestial.zoomed_orbit_step8" + }, + "zoomed_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x8", + "to": "$x9", + "next": "@celestial.zoomed_orbit_step9" + }, + "zoomed_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x9", + "to": "$x10", + "next": "@celestial.zoomed_orbit_step10" + }, + "zoomed_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x10", + "to": "$x11", + "next": "@celestial.zoomed_orbit_step11" + }, + "zoomed_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x11", + "to": "$x12", + "next": "@celestial.zoomed_orbit_step12" + }, + "zoomed_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x12", + "to": "$x13", + "next": "@celestial.zoomed_orbit_step13" + }, + "zoomed_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x13", + "to": "$x14", + "next": "@celestial.zoomed_orbit_step14" + }, + "zoomed_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x14", + "to": "$x15", + "next": "@celestial.zoomed_orbit_step15" + }, + "zoomed_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x15", + "to": "$x16", + "next": "@celestial.zoomed_orbit_step16" + }, + "zoomed_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x16", + "to": "$x17", + "next": "@celestial.zoomed_orbit_step17" + }, + "zoomed_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x17", + "to": "$x18", + "next": "@celestial.zoomed_orbit_step18" + }, + "zoomed_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x18", + "to": "$x19", + "next": "@celestial.zoomed_orbit_step19" + }, + "zoomed_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x19", + "to": "$x20", + "next": "@celestial.zoomed_orbit_step20" + }, + "zoomed_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x20", + "to": "$x21", + "next": "@celestial.zoomed_orbit_step21" + }, + "zoomed_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x21", + "to": "$x22", + "next": "@celestial.zoomed_orbit_step22" + }, + "zoomed_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x22", + "to": "$x23", + "next": "@celestial.zoomed_orbit_step23" + }, + "zoomed_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x23", + "to": "$x24", + "next": "@celestial.zoomed_orbit_step24" + }, + "zoomed_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x24", + "to": "$x25", + "next": "@celestial.zoomed_orbit_step25" + }, + "zoomed_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x25", + "to": "$x26", + "next": "@celestial.zoomed_orbit_step26" + }, + "zoomed_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x26", + "to": "$x27", + "next": "@celestial.zoomed_orbit_step27" + }, + "zoomed_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x27", + "to": "$x28", + "next": "@celestial.zoomed_orbit_step28" + }, + "zoomed_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x28", + "to": "$x29", + "next": "@celestial.zoomed_orbit_step29" + }, + "zoomed_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x29", + "to": "$x30", + "next": "@celestial.zoomed_orbit_step30" + }, + "zoomed_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x30", + "to": "$x31", + "next": "@celestial.zoomed_orbit_step31" + }, + "zoomed_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x31", + "to": "$x32", + "next": "@celestial.zoomed_orbit_step32" + }, + "zoomed_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x32", + "to": "$x33", + "next": "@celestial.zoomed_orbit_step33" + }, + "zoomed_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x33", + "to": "$x34", + "next": "@celestial.zoomed_orbit_step34" + }, + "zoomed_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x34", + "to": "$x35", + "next": "@celestial.zoomed_orbit_step35" + }, + "zoomed_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x35", + "to": "$x36", + "next": "@celestial.zoomed_orbit_step36" + }, + "zoomed_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x36", + "to": "$x37", + "next": "@celestial.zoomed_orbit_step37" + }, + "zoomed_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x37", + "to": "$x38", + "next": "@celestial.zoomed_orbit_step38" + }, + "zoomed_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x38", + "to": "$x39", + "next": "@celestial.zoomed_orbit_step39" + }, + "zoomed_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x39", + "to": "$x40", + "next": "@celestial.zoomed_orbit_step40" + }, + "zoomed_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x40", + "to": "$x41", + "next": "@celestial.zoomed_orbit_step41" + }, + "zoomed_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x41", + "to": "$x42", + "next": "@celestial.zoomed_orbit_step42" + }, + "zoomed_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x42", + "to": "$x43", + "next": "@celestial.zoomed_orbit_step43" + }, + "zoomed_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x43", + "to": "$x44", + "next": "@celestial.zoomed_orbit_step44" + }, + "zoomed_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x44", + "to": "$x45", + "next": "@celestial.zoomed_orbit_step45" + }, + "zoomed_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x45", + "to": "$x46", + "next": "@celestial.zoomed_orbit_step46" + }, + "zoomed_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x46", + "to": "$x47", + "next": "@celestial.zoomed_orbit_step47" + }, + "zoomed_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x47", + "to": "$x48", + "next": "@celestial.zoomed_orbit_step48" + }, + "zoomed_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x48", + "to": "$x49", + "next": "@celestial.zoomed_orbit_step49" + }, + "zoomed_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x49", + "to": "$x50", + "next": "@celestial.zoomed_orbit_step50" + }, + "zoomed_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x50", + "to": "$x51", + "next": "@celestial.zoomed_orbit_step51" + }, + "zoomed_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x51", + "to": "$x52", + "next": "@celestial.zoomed_orbit_step52" + }, + "zoomed_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x52", + "to": "$x53", + "next": "@celestial.zoomed_orbit_step53" + }, + "zoomed_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x53", + "to": "$x54", + "next": "@celestial.zoomed_orbit_step54" + }, + "zoomed_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x54", + "to": "$x55", + "next": "@celestial.zoomed_orbit_step55" + }, + "zoomed_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x55", + "to": "$x56", + "next": "@celestial.zoomed_orbit_step56" + }, + "zoomed_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x56", + "to": "$x57", + "next": "@celestial.zoomed_orbit_step57" + }, + "zoomed_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x57", + "to": "$x58", + "next": "@celestial.zoomed_orbit_step58" + }, + "zoomed_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x58", + "to": "$x59", + "next": "@celestial.zoomed_orbit_step59" + }, + "zoomed_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x59", + "to": "$x60", + "next": "@celestial.zoomed_orbit_step60" + }, + "zoomed_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x60", + "to": "$x61", + "next": "@celestial.zoomed_orbit_step61" + }, + "zoomed_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x61", + "to": "$x62", + "next": "@celestial.zoomed_orbit_step62" + }, + "zoomed_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x62", + "to": "$x63", + "next": "@celestial.zoomed_orbit_step63" + }, + "zoomed_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x63", + "to": "$x64", + "next": "@celestial.zoomed_orbit_step64" + }, + "zoomed_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x64", + "to": "$x65", + "next": "@celestial.zoomed_orbit_step65" + }, + "zoomed_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x65", + "to": "$x66", + "next": "@celestial.zoomed_orbit_step66" + }, + "zoomed_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x66", + "to": "$x67", + "next": "@celestial.zoomed_orbit_step67" + }, + "zoomed_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x67", + "to": "$x68", + "next": "@celestial.zoomed_orbit_step68" + }, + "zoomed_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x68", + "to": "$x69", + "next": "@celestial.zoomed_orbit_step69" + }, + "zoomed_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x69", + "to": "$x70", + "next": "@celestial.zoomed_orbit_step70" + }, + "zoomed_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x70", + "to": "$x71", + "next": "@celestial.zoomed_orbit_step71" + }, + "zoomed_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x71", + "to": "$x72", + "next": "@celestial.zoomed_orbit_step72" + }, + "zoomed_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x72", + "to": "$x73", + "next": "@celestial.zoomed_orbit_step73" + }, + "zoomed_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x73", + "to": "$x74", + "next": "@celestial.zoomed_orbit_step74" + }, + "zoomed_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x74", + "to": "$x75", + "next": "@celestial.zoomed_orbit_step75" + }, + "zoomed_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x75", + "to": "$x76", + "next": "@celestial.zoomed_orbit_step76" + }, + "zoomed_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x76", + "to": "$x77", + "next": "@celestial.zoomed_orbit_step77" + }, + "zoomed_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x77", + "to": "$x78", + "next": "@celestial.zoomed_orbit_step78" + }, + "zoomed_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x78", + "to": "$x79", + "next": "@celestial.zoomed_orbit_step79" + }, + "zoomed_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x79", + "to": "$x80", + "next": "@celestial.zoomed_orbit_step80" + }, + "zoomed_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x80", + "to": "$x81", + "next": "@celestial.zoomed_orbit_step81" + }, + "zoomed_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x81", + "to": "$x82", + "next": "@celestial.zoomed_orbit_step82" + }, + "zoomed_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x82", + "to": "$x83", + "next": "@celestial.zoomed_orbit_step83" + }, + "zoomed_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x83", + "to": "$x84", + "next": "@celestial.zoomed_orbit_step84" + }, + "zoomed_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x84", + "to": "$x85", + "next": "@celestial.zoomed_orbit_step85" + }, + "zoomed_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x85", + "to": "$x86", + "next": "@celestial.zoomed_orbit_step86" + }, + "zoomed_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x86", + "to": "$x87", + "next": "@celestial.zoomed_orbit_step87" + }, + "zoomed_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x87", + "to": "$x88", + "next": "@celestial.zoomed_orbit_step88" + }, + "zoomed_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x88", + "to": "$x89", + "next": "@celestial.zoomed_orbit_step89" + }, + "zoomed_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x89", + "to": "$x90", + "next": "@celestial.zoomed_orbit_step90" + }, + "zoomed_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x90", + "to": "$x91", + "next": "@celestial.zoomed_orbit_step91" + }, + "zoomed_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x91", + "to": "$x92", + "next": "@celestial.zoomed_orbit_step92" + }, + "zoomed_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x92", + "to": "$x93", + "next": "@celestial.zoomed_orbit_step93" + }, + "zoomed_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x93", + "to": "$x94", + "next": "@celestial.zoomed_orbit_step94" + }, + "zoomed_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x94", + "to": "$x95", + "next": "@celestial.zoomed_orbit_step95" + }, + "zoomed_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x95", + "to": "$x96", + "next": "@celestial.zoomed_orbit_step96" + }, + "zoomed_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x96", + "to": "$x97", + "next": "@celestial.zoomed_orbit_step97" + }, + "zoomed_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x97", + "to": "$x98", + "next": "@celestial.zoomed_orbit_step98" + }, + "zoomed_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x98", + "to": "$x99", + "next": "@celestial.zoomed_orbit_step99" + }, + "zoomed_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x99", + "to": "$x100", + "next": "@celestial.zoomed_orbit_step100" + }, + "zoomed_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x100", + "to": "$x101", + "next": "@celestial.zoomed_orbit_step101" + }, + "zoomed_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x101", + "to": "$x102", + "next": "@celestial.zoomed_orbit_step102" + }, + "zoomed_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x102", + "to": "$x103", + "next": "@celestial.zoomed_orbit_step103" + }, + "zoomed_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x103", + "to": "$x104", + "next": "@celestial.zoomed_orbit_step104" + }, + "zoomed_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x104", + "to": "$x105", + "next": "@celestial.zoomed_orbit_step105" + }, + "zoomed_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x105", + "to": "$x106", + "next": "@celestial.zoomed_orbit_step106" + }, + "zoomed_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x106", + "to": "$x107", + "next": "@celestial.zoomed_orbit_step107" + }, + "zoomed_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x107", + "to": "$x108", + "next": "@celestial.zoomed_orbit_step108" + }, + "zoomed_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x108", + "to": "$x109", + "next": "@celestial.zoomed_orbit_step109" + }, + "zoomed_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x109", + "to": "$x110", + "next": "@celestial.zoomed_orbit_step110" + }, + "zoomed_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x110", + "to": "$x111", + "next": "@celestial.zoomed_orbit_step111" + }, + "zoomed_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x111", + "to": "$x112", + "next": "@celestial.zoomed_orbit_step112" + }, + "zoomed_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x112", + "to": "$x113", + "next": "@celestial.zoomed_orbit_step113" + }, + "zoomed_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x113", + "to": "$x114", + "next": "@celestial.zoomed_orbit_step114" + }, + "zoomed_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x114", + "to": "$x115", + "next": "@celestial.zoomed_orbit_step115" + }, + "zoomed_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x115", + "to": "$x116", + "next": "@celestial.zoomed_orbit_step116" + }, + "zoomed_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x116", + "to": "$x117", + "next": "@celestial.zoomed_orbit_step117" + }, + "zoomed_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x117", + "to": "$x118", + "next": "@celestial.zoomed_orbit_step118" + }, + "zoomed_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x118", + "to": "$x119", + "next": "@celestial.zoomed_orbit_step119" + }, + "zoomed_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x119", + "to": "$x120", + "next": "@celestial.zoomed_orbit_step120" + }, + "zoomed_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x120", + "to": "$x121", + "next": "@celestial.zoomed_orbit_step121" + }, + "zoomed_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x121", + "to": "$x122", + "next": "@celestial.zoomed_orbit_step122" + }, + "zoomed_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x122", + "to": "$x123", + "next": "@celestial.zoomed_orbit_step123" + }, + "zoomed_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x123", + "to": "$x124", + "next": "@celestial.zoomed_orbit_step124" + }, + "zoomed_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x124", + "to": "$x125", + "next": "@celestial.zoomed_orbit_step125" + }, + "zoomed_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x125", + "to": "$x126", + "next": "@celestial.zoomed_orbit_step126" + }, + "zoomed_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x126", + "to": "$x127", + "next": "@celestial.zoomed_orbit_step127" + }, + "zoomed_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x127", + "to": "$x128", + "next": "@celestial.zoomed_orbit_step128" + }, + "zoomed_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x128", + "to": "$x129", + "next": "@celestial.zoomed_orbit_step129" + }, + "zoomed_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x129", + "to": "$x130", + "next": "@celestial.zoomed_orbit_step130" + }, + "zoomed_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x130", + "to": "$x131", + "next": "@celestial.zoomed_orbit_step131" + }, + "zoomed_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x131", + "to": "$x132", + "next": "@celestial.zoomed_orbit_step132" + }, + "zoomed_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x132", + "to": "$x133", + "next": "@celestial.zoomed_orbit_step133" + }, + "zoomed_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x133", + "to": "$x134", + "next": "@celestial.zoomed_orbit_step134" + }, + "zoomed_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x134", + "to": "$x135", + "next": "@celestial.zoomed_orbit_step135" + }, + "zoomed_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x135", + "to": "$x136", + "next": "@celestial.zoomed_orbit_step136" + }, + "zoomed_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x136", + "to": "$x137", + "next": "@celestial.zoomed_orbit_step137" + }, + "zoomed_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x137", + "to": "$x138", + "next": "@celestial.zoomed_orbit_step138" + }, + "zoomed_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x138", + "to": "$x139", + "next": "@celestial.zoomed_orbit_step139" + }, + "zoomed_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x139", + "to": "$x140", + "next": "@celestial.zoomed_orbit_step140" + }, + "zoomed_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x140", + "to": "$x141", + "next": "@celestial.zoomed_orbit_step141" + }, + "zoomed_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x141", + "to": "$x142", + "next": "@celestial.zoomed_orbit_step142" + }, + "zoomed_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x142", + "to": "$x143", + "next": "@celestial.zoomed_orbit_step143" + }, + "zoomed_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x143", + "to": "$x144", + "next": "@celestial.zoomed_orbit_step144" + }, + "zoomed_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x144", + "to": "$x145", + "next": "@celestial.zoomed_orbit_step145" + }, + "zoomed_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x145", + "to": "$x146", + "next": "@celestial.zoomed_orbit_step146" + }, + "zoomed_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x146", + "to": "$x147", + "next": "@celestial.zoomed_orbit_step147" + }, + "zoomed_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x147", + "to": "$x148", + "next": "@celestial.zoomed_orbit_step148" + }, + "zoomed_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x148", + "to": "$x149", + "next": "@celestial.zoomed_orbit_step149" + }, + "zoomed_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x149", + "to": "$x150", + "next": "@celestial.zoomed_orbit_step150" + }, + "zoomed_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x150", + "to": "$x151", + "next": "@celestial.zoomed_orbit_step151" + }, + "zoomed_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x151", + "to": "$x152", + "next": "@celestial.zoomed_orbit_step152" + }, + "zoomed_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x152", + "to": "$x153", + "next": "@celestial.zoomed_orbit_step153" + }, + "zoomed_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x153", + "to": "$x154", + "next": "@celestial.zoomed_orbit_step154" + }, + "zoomed_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x154", + "to": "$x155", + "next": "@celestial.zoomed_orbit_step155" + }, + "zoomed_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x155", + "to": "$x156", + "next": "@celestial.zoomed_orbit_step156" + }, + "zoomed_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x156", + "to": "$x157", + "next": "@celestial.zoomed_orbit_step157" + }, + "zoomed_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x157", + "to": "$x158", + "next": "@celestial.zoomed_orbit_step158" + }, + "zoomed_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x158", + "to": "$x159", + "next": "@celestial.zoomed_orbit_step159" + }, + "zoomed_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x159", + "to": "$x160", + "next": "@celestial.zoomed_orbit_step160" + }, + "zoomed_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x160", + "to": "$x161", + "next": "@celestial.zoomed_orbit_step161" + }, + "zoomed_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x161", + "to": "$x162", + "next": "@celestial.zoomed_orbit_step162" + }, + "zoomed_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x162", + "to": "$x163", + "next": "@celestial.zoomed_orbit_step163" + }, + "zoomed_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x163", + "to": "$x164", + "next": "@celestial.zoomed_orbit_step164" + }, + "zoomed_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x164", + "to": "$x165", + "next": "@celestial.zoomed_orbit_step165" + }, + "zoomed_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x165", + "to": "$x166", + "next": "@celestial.zoomed_orbit_step166" + }, + "zoomed_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x166", + "to": "$x167", + "next": "@celestial.zoomed_orbit_step167" + }, + "zoomed_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x167", + "to": "$x168", + "next": "@celestial.zoomed_orbit_step168" + }, + "zoomed_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x168", + "to": "$x169", + "next": "@celestial.zoomed_orbit_step169" + }, + "zoomed_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x169", + "to": "$x170", + "next": "@celestial.zoomed_orbit_step170" + }, + "zoomed_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x170", + "to": "$x171", + "next": "@celestial.zoomed_orbit_step171" + }, + "zoomed_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x171", + "to": "$x172", + "next": "@celestial.zoomed_orbit_step172" + }, + "zoomed_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x172", + "to": "$x173", + "next": "@celestial.zoomed_orbit_step173" + }, + "zoomed_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x173", + "to": "$x174", + "next": "@celestial.zoomed_orbit_step174" + }, + "zoomed_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x174", + "to": "$x175", + "next": "@celestial.zoomed_orbit_step175" + }, + "zoomed_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x175", + "to": "$x176", + "next": "@celestial.zoomed_orbit_step176" + }, + "zoomed_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x176", + "to": "$x177", + "next": "@celestial.zoomed_orbit_step177" + }, + "zoomed_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x177", + "to": "$x178", + "next": "@celestial.zoomed_orbit_step178" + }, + "zoomed_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x178", + "to": "$x179", + "next": "@celestial.zoomed_orbit_step179" + }, + "zoomed_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x179", + "to": "$x180", + "next": "@celestial.zoomed_orbit_step180" + }, + "zoomed_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x180", + "to": "$x181", + "next": "@celestial.zoomed_orbit_step181" + }, + "zoomed_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x181", + "to": "$x182", + "next": "@celestial.zoomed_orbit_step182" + }, + "zoomed_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x182", + "to": "$x183", + "next": "@celestial.zoomed_orbit_step183" + }, + "zoomed_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x183", + "to": "$x184", + "next": "@celestial.zoomed_orbit_step184" + }, + "zoomed_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x184", + "to": "$x185", + "next": "@celestial.zoomed_orbit_step185" + }, + "zoomed_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x185", + "to": "$x186", + "next": "@celestial.zoomed_orbit_step186" + }, + "zoomed_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x186", + "to": "$x187", + "next": "@celestial.zoomed_orbit_step187" + }, + "zoomed_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x187", + "to": "$x188", + "next": "@celestial.zoomed_orbit_step188" + }, + "zoomed_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x188", + "to": "$x189", + "next": "@celestial.zoomed_orbit_step189" + }, + "zoomed_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x189", + "to": "$x190", + "next": "@celestial.zoomed_orbit_step190" + }, + "zoomed_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x190", + "to": "$x191", + "next": "@celestial.zoomed_orbit_step191" + }, + "zoomed_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x191", + "to": "$x192", + "next": "@celestial.zoomed_orbit_step192" + }, + "zoomed_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x192", + "to": "$x193", + "next": "@celestial.zoomed_orbit_step193" + }, + "zoomed_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x193", + "to": "$x194", + "next": "@celestial.zoomed_orbit_step194" + }, + "zoomed_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x194", + "to": "$x195", + "next": "@celestial.zoomed_orbit_step195" + }, + "zoomed_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x195", + "to": "$x196", + "next": "@celestial.zoomed_orbit_step196" + }, + "zoomed_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x196", + "to": "$x197", + "next": "@celestial.zoomed_orbit_step197" + }, + "zoomed_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x197", + "to": "$x198", + "next": "@celestial.zoomed_orbit_step198" + }, + "zoomed_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x198", + "to": "$x199", + "next": "@celestial.zoomed_orbit_step199" + }, + "zoomed_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x199", + "to": "$x200", + "next": "@celestial.zoomed_orbit_step200" + }, + "zoomed_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x200", + "to": "$x201", + "next": "@celestial.zoomed_orbit_step201" + }, + "zoomed_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x201", + "to": "$x202", + "next": "@celestial.zoomed_orbit_step202" + }, + "zoomed_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x202", + "to": "$x203", + "next": "@celestial.zoomed_orbit_step203" + }, + "zoomed_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x203", + "to": "$x204", + "next": "@celestial.zoomed_orbit_step204" + }, + "zoomed_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x204", + "to": "$x205", + "next": "@celestial.zoomed_orbit_step205" + }, + "zoomed_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x205", + "to": "$x206", + "next": "@celestial.zoomed_orbit_step206" + }, + "zoomed_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x206", + "to": "$x207", + "next": "@celestial.zoomed_orbit_step207" + }, + "zoomed_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x207", + "to": "$x208", + "next": "@celestial.zoomed_orbit_step208" + }, + "zoomed_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x208", + "to": "$x209", + "next": "@celestial.zoomed_orbit_step209" + }, + "zoomed_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x209", + "to": "$x210", + "next": "@celestial.zoomed_orbit_step210" + }, + "zoomed_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x210", + "to": "$x211", + "next": "@celestial.zoomed_orbit_step211" + }, + "zoomed_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x211", + "to": "$x212", + "next": "@celestial.zoomed_orbit_step212" + }, + "zoomed_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x212", + "to": "$x213", + "next": "@celestial.zoomed_orbit_step213" + }, + "zoomed_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x213", + "to": "$x214", + "next": "@celestial.zoomed_orbit_step214" + }, + "zoomed_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x214", + "to": "$x215", + "next": "@celestial.zoomed_orbit_step215" + }, + "zoomed_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x215", + "to": "$x216", + "next": "@celestial.zoomed_orbit_step216" + }, + "zoomed_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x216", + "to": "$x217", + "next": "@celestial.zoomed_orbit_step217" + }, + "zoomed_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x217", + "to": "$x218", + "next": "@celestial.zoomed_orbit_step218" + }, + "zoomed_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x218", + "to": "$x219", + "next": "@celestial.zoomed_orbit_step219" + }, + "zoomed_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x219", + "to": "$x220", + "next": "@celestial.zoomed_orbit_step220" + }, + "zoomed_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x220", + "to": "$x221", + "next": "@celestial.zoomed_orbit_step221" + }, + "zoomed_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x221", + "to": "$x222", + "next": "@celestial.zoomed_orbit_step222" + }, + "zoomed_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x222", + "to": "$x223", + "next": "@celestial.zoomed_orbit_step223" + }, + "zoomed_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x223", + "to": "$x224", + "next": "@celestial.zoomed_orbit_step224" + }, + "zoomed_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x224", + "to": "$x225", + "next": "@celestial.zoomed_orbit_step225" + }, + "zoomed_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x225", + "to": "$x226", + "next": "@celestial.zoomed_orbit_step226" + }, + "zoomed_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x226", + "to": "$x227", + "next": "@celestial.zoomed_orbit_step227" + }, + "zoomed_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x227", + "to": "$x228", + "next": "@celestial.zoomed_orbit_step228" + }, + "zoomed_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x228", + "to": "$x229", + "next": "@celestial.zoomed_orbit_step229" + }, + "zoomed_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x229", + "to": "$x230", + "next": "@celestial.zoomed_orbit_step230" + }, + "zoomed_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x230", + "to": "$x231", + "next": "@celestial.zoomed_orbit_step231" + }, + "zoomed_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x231", + "to": "$x232", + "next": "@celestial.zoomed_orbit_step232" + }, + "zoomed_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x232", + "to": "$x233", + "next": "@celestial.zoomed_orbit_step233" + }, + "zoomed_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x233", + "to": "$x234", + "next": "@celestial.zoomed_orbit_step234" + }, + "zoomed_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x234", + "to": "$x235", + "next": "@celestial.zoomed_orbit_step235" + }, + "zoomed_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x235", + "to": "$x236", + "next": "@celestial.zoomed_orbit_step236" + }, + "zoomed_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x236", + "to": "$x237", + "next": "@celestial.zoomed_orbit_step237" + }, + "zoomed_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x237", + "to": "$x238", + "next": "@celestial.zoomed_orbit_step238" + }, + "zoomed_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x238", + "to": "$x239", + "next": "@celestial.zoomed_orbit_step239" + }, + "zoomed_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x239", + "to": "$x240", + "next": "@celestial.zoomed_orbit_step240" + }, + "zoomed_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x240", + "to": "$x241", + "next": "@celestial.zoomed_orbit_step241" + }, + "zoomed_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x241", + "to": "$x242", + "next": "@celestial.zoomed_orbit_step242" + }, + "zoomed_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x242", + "to": "$x243", + "next": "@celestial.zoomed_orbit_step243" + }, + "zoomed_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x243", + "to": "$x244", + "next": "@celestial.zoomed_orbit_step244" + }, + "zoomed_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x244", + "to": "$x245", + "next": "@celestial.zoomed_orbit_step245" + }, + "zoomed_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x245", + "to": "$x246", + "next": "@celestial.zoomed_orbit_step246" + }, + "zoomed_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x246", + "to": "$x247", + "next": "@celestial.zoomed_orbit_step247" + }, + "zoomed_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x247", + "to": "$x248", + "next": "@celestial.zoomed_orbit_step248" + }, + "zoomed_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x248", + "to": "$x249", + "next": "@celestial.zoomed_orbit_step249" + }, + "zoomed_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x249", + "to": "$x250", + "next": "@celestial.zoomed_orbit_step250" + }, + "zoomed_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x250", + "to": "$x251", + "next": "@celestial.zoomed_orbit_step251" + }, + "zoomed_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x251", + "to": "$x252", + "next": "@celestial.zoomed_orbit_step252" + }, + "zoomed_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x252", + "to": "$x253", + "next": "@celestial.zoomed_orbit_step253" + }, + "zoomed_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x253", + "to": "$x254", + "next": "@celestial.zoomed_orbit_step254" + }, + "zoomed_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x254", + "to": "$x255", + "next": "@celestial.zoomed_orbit_step255" + }, + "zoomed_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x255", + "to": "$x256", + "next": "@celestial.zoomed_orbit_step256" + }, + "zoomed_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x256", + "to": "$x1", + "next": "@celestial.zoomed_orbit_step1" + }, + "moon_local_orbit_step1": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m1", + "to": "$m2", + "next": "@celestial.moon_local_orbit_step2" + }, + "moon_local_orbit_step2": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m2", + "to": "$m3", + "next": "@celestial.moon_local_orbit_step3" + }, + "moon_local_orbit_step3": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m3", + "to": "$m4", + "next": "@celestial.moon_local_orbit_step4" + }, + "moon_local_orbit_step4": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m4", + "to": "$m5", + "next": "@celestial.moon_local_orbit_step5" + }, + "moon_local_orbit_step5": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m5", + "to": "$m6", + "next": "@celestial.moon_local_orbit_step6" + }, + "moon_local_orbit_step6": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m6", + "to": "$m7", + "next": "@celestial.moon_local_orbit_step7" + }, + "moon_local_orbit_step7": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m7", + "to": "$m8", + "next": "@celestial.moon_local_orbit_step8" + }, + "moon_local_orbit_step8": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m8", + "to": "$m9", + "next": "@celestial.moon_local_orbit_step9" + }, + "moon_local_orbit_step9": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m9", + "to": "$m10", + "next": "@celestial.moon_local_orbit_step10" + }, + "moon_local_orbit_step10": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m10", + "to": "$m11", + "next": "@celestial.moon_local_orbit_step11" + }, + "moon_local_orbit_step11": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m11", + "to": "$m12", + "next": "@celestial.moon_local_orbit_step12" + }, + "moon_local_orbit_step12": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m12", + "to": "$m13", + "next": "@celestial.moon_local_orbit_step13" + }, + "moon_local_orbit_step13": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m13", + "to": "$m14", + "next": "@celestial.moon_local_orbit_step14" + }, + "moon_local_orbit_step14": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m14", + "to": "$m15", + "next": "@celestial.moon_local_orbit_step15" + }, + "moon_local_orbit_step15": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m15", + "to": "$m16", + "next": "@celestial.moon_local_orbit_step16" + }, + "moon_local_orbit_step16": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m16", + "to": "$m17", + "next": "@celestial.moon_local_orbit_step17" + }, + "moon_local_orbit_step17": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m17", + "to": "$m18", + "next": "@celestial.moon_local_orbit_step18" + }, + "moon_local_orbit_step18": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m18", + "to": "$m19", + "next": "@celestial.moon_local_orbit_step19" + }, + "moon_local_orbit_step19": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m19", + "to": "$m20", + "next": "@celestial.moon_local_orbit_step20" + }, + "moon_local_orbit_step20": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m20", + "to": "$m21", + "next": "@celestial.moon_local_orbit_step21" + }, + "moon_local_orbit_step21": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m21", + "to": "$m22", + "next": "@celestial.moon_local_orbit_step22" + }, + "moon_local_orbit_step22": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m22", + "to": "$m23", + "next": "@celestial.moon_local_orbit_step23" + }, + "moon_local_orbit_step23": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m23", + "to": "$m24", + "next": "@celestial.moon_local_orbit_step24" + }, + "moon_local_orbit_step24": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m24", + "to": "$m25", + "next": "@celestial.moon_local_orbit_step25" + }, + "moon_local_orbit_step25": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m25", + "to": "$m26", + "next": "@celestial.moon_local_orbit_step26" + }, + "moon_local_orbit_step26": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m26", + "to": "$m27", + "next": "@celestial.moon_local_orbit_step27" + }, + "moon_local_orbit_step27": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m27", + "to": "$m28", + "next": "@celestial.moon_local_orbit_step28" + }, + "moon_local_orbit_step28": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m28", + "to": "$m29", + "next": "@celestial.moon_local_orbit_step29" + }, + "moon_local_orbit_step29": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m29", + "to": "$m30", + "next": "@celestial.moon_local_orbit_step30" + }, + "moon_local_orbit_step30": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m30", + "to": "$m31", + "next": "@celestial.moon_local_orbit_step31" + }, + "moon_local_orbit_step31": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m31", + "to": "$m32", + "next": "@celestial.moon_local_orbit_step32" + }, + "moon_local_orbit_step32": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m32", + "to": "$m33", + "next": "@celestial.moon_local_orbit_step33" + }, + "moon_local_orbit_step33": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m33", + "to": "$m34", + "next": "@celestial.moon_local_orbit_step34" + }, + "moon_local_orbit_step34": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m34", + "to": "$m35", + "next": "@celestial.moon_local_orbit_step35" + }, + "moon_local_orbit_step35": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m35", + "to": "$m36", + "next": "@celestial.moon_local_orbit_step36" + }, + "moon_local_orbit_step36": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m36", + "to": "$m37", + "next": "@celestial.moon_local_orbit_step37" + }, + "moon_local_orbit_step37": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m37", + "to": "$m38", + "next": "@celestial.moon_local_orbit_step38" + }, + "moon_local_orbit_step38": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m38", + "to": "$m39", + "next": "@celestial.moon_local_orbit_step39" + }, + "moon_local_orbit_step39": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m39", + "to": "$m40", + "next": "@celestial.moon_local_orbit_step40" + }, + "moon_local_orbit_step40": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m40", + "to": "$m41", + "next": "@celestial.moon_local_orbit_step41" + }, + "moon_local_orbit_step41": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m41", + "to": "$m42", + "next": "@celestial.moon_local_orbit_step42" + }, + "moon_local_orbit_step42": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m42", + "to": "$m43", + "next": "@celestial.moon_local_orbit_step43" + }, + "moon_local_orbit_step43": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m43", + "to": "$m44", + "next": "@celestial.moon_local_orbit_step44" + }, + "moon_local_orbit_step44": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m44", + "to": "$m45", + "next": "@celestial.moon_local_orbit_step45" + }, + "moon_local_orbit_step45": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m45", + "to": "$m46", + "next": "@celestial.moon_local_orbit_step46" + }, + "moon_local_orbit_step46": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m46", + "to": "$m47", + "next": "@celestial.moon_local_orbit_step47" + }, + "moon_local_orbit_step47": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m47", + "to": "$m48", + "next": "@celestial.moon_local_orbit_step48" + }, + "moon_local_orbit_step48": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m48", + "to": "$m49", + "next": "@celestial.moon_local_orbit_step49" + }, + "moon_local_orbit_step49": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m49", + "to": "$m50", + "next": "@celestial.moon_local_orbit_step50" + }, + "moon_local_orbit_step50": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m50", + "to": "$m51", + "next": "@celestial.moon_local_orbit_step51" + }, + "moon_local_orbit_step51": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m51", + "to": "$m52", + "next": "@celestial.moon_local_orbit_step52" + }, + "moon_local_orbit_step52": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m52", + "to": "$m53", + "next": "@celestial.moon_local_orbit_step53" + }, + "moon_local_orbit_step53": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m53", + "to": "$m54", + "next": "@celestial.moon_local_orbit_step54" + }, + "moon_local_orbit_step54": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m54", + "to": "$m55", + "next": "@celestial.moon_local_orbit_step55" + }, + "moon_local_orbit_step55": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m55", + "to": "$m56", + "next": "@celestial.moon_local_orbit_step56" + }, + "moon_local_orbit_step56": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m56", + "to": "$m57", + "next": "@celestial.moon_local_orbit_step57" + }, + "moon_local_orbit_step57": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m57", + "to": "$m58", + "next": "@celestial.moon_local_orbit_step58" + }, + "moon_local_orbit_step58": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m58", + "to": "$m59", + "next": "@celestial.moon_local_orbit_step59" + }, + "moon_local_orbit_step59": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m59", + "to": "$m60", + "next": "@celestial.moon_local_orbit_step60" + }, + "moon_local_orbit_step60": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m60", + "to": "$m61", + "next": "@celestial.moon_local_orbit_step61" + }, + "moon_local_orbit_step61": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m61", + "to": "$m62", + "next": "@celestial.moon_local_orbit_step62" + }, + "moon_local_orbit_step62": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m62", + "to": "$m63", + "next": "@celestial.moon_local_orbit_step63" + }, + "moon_local_orbit_step63": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m63", + "to": "$m64", + "next": "@celestial.moon_local_orbit_step64" + }, + "moon_local_orbit_step64": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m64", + "to": "$m65", + "next": "@celestial.moon_local_orbit_step65" + }, + "moon_local_orbit_step65": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m65", + "to": "$m66", + "next": "@celestial.moon_local_orbit_step66" + }, + "moon_local_orbit_step66": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m66", + "to": "$m67", + "next": "@celestial.moon_local_orbit_step67" + }, + "moon_local_orbit_step67": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m67", + "to": "$m68", + "next": "@celestial.moon_local_orbit_step68" + }, + "moon_local_orbit_step68": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m68", + "to": "$m69", + "next": "@celestial.moon_local_orbit_step69" + }, + "moon_local_orbit_step69": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m69", + "to": "$m70", + "next": "@celestial.moon_local_orbit_step70" + }, + "moon_local_orbit_step70": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m70", + "to": "$m71", + "next": "@celestial.moon_local_orbit_step71" + }, + "moon_local_orbit_step71": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m71", + "to": "$m72", + "next": "@celestial.moon_local_orbit_step72" + }, + "moon_local_orbit_step72": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m72", + "to": "$m73", + "next": "@celestial.moon_local_orbit_step73" + }, + "moon_local_orbit_step73": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m73", + "to": "$m74", + "next": "@celestial.moon_local_orbit_step74" + }, + "moon_local_orbit_step74": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m74", + "to": "$m75", + "next": "@celestial.moon_local_orbit_step75" + }, + "moon_local_orbit_step75": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m75", + "to": "$m76", + "next": "@celestial.moon_local_orbit_step76" + }, + "moon_local_orbit_step76": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m76", + "to": "$m77", + "next": "@celestial.moon_local_orbit_step77" + }, + "moon_local_orbit_step77": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m77", + "to": "$m78", + "next": "@celestial.moon_local_orbit_step78" + }, + "moon_local_orbit_step78": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m78", + "to": "$m79", + "next": "@celestial.moon_local_orbit_step79" + }, + "moon_local_orbit_step79": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m79", + "to": "$m80", + "next": "@celestial.moon_local_orbit_step80" + }, + "moon_local_orbit_step80": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m80", + "to": "$m81", + "next": "@celestial.moon_local_orbit_step81" + }, + "moon_local_orbit_step81": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m81", + "to": "$m82", + "next": "@celestial.moon_local_orbit_step82" + }, + "moon_local_orbit_step82": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m82", + "to": "$m83", + "next": "@celestial.moon_local_orbit_step83" + }, + "moon_local_orbit_step83": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m83", + "to": "$m84", + "next": "@celestial.moon_local_orbit_step84" + }, + "moon_local_orbit_step84": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m84", + "to": "$m85", + "next": "@celestial.moon_local_orbit_step85" + }, + "moon_local_orbit_step85": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m85", + "to": "$m86", + "next": "@celestial.moon_local_orbit_step86" + }, + "moon_local_orbit_step86": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m86", + "to": "$m87", + "next": "@celestial.moon_local_orbit_step87" + }, + "moon_local_orbit_step87": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m87", + "to": "$m88", + "next": "@celestial.moon_local_orbit_step88" + }, + "moon_local_orbit_step88": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m88", + "to": "$m89", + "next": "@celestial.moon_local_orbit_step89" + }, + "moon_local_orbit_step89": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m89", + "to": "$m90", + "next": "@celestial.moon_local_orbit_step90" + }, + "moon_local_orbit_step90": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m90", + "to": "$m91", + "next": "@celestial.moon_local_orbit_step91" + }, + "moon_local_orbit_step91": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m91", + "to": "$m92", + "next": "@celestial.moon_local_orbit_step92" + }, + "moon_local_orbit_step92": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m92", + "to": "$m93", + "next": "@celestial.moon_local_orbit_step93" + }, + "moon_local_orbit_step93": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m93", + "to": "$m94", + "next": "@celestial.moon_local_orbit_step94" + }, + "moon_local_orbit_step94": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m94", + "to": "$m95", + "next": "@celestial.moon_local_orbit_step95" + }, + "moon_local_orbit_step95": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m95", + "to": "$m96", + "next": "@celestial.moon_local_orbit_step96" + }, + "moon_local_orbit_step96": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m96", + "to": "$m97", + "next": "@celestial.moon_local_orbit_step97" + }, + "moon_local_orbit_step97": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m97", + "to": "$m98", + "next": "@celestial.moon_local_orbit_step98" + }, + "moon_local_orbit_step98": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m98", + "to": "$m99", + "next": "@celestial.moon_local_orbit_step99" + }, + "moon_local_orbit_step99": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m99", + "to": "$m100", + "next": "@celestial.moon_local_orbit_step100" + }, + "moon_local_orbit_step100": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m100", + "to": "$m101", + "next": "@celestial.moon_local_orbit_step101" + }, + "moon_local_orbit_step101": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m101", + "to": "$m102", + "next": "@celestial.moon_local_orbit_step102" + }, + "moon_local_orbit_step102": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m102", + "to": "$m103", + "next": "@celestial.moon_local_orbit_step103" + }, + "moon_local_orbit_step103": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m103", + "to": "$m104", + "next": "@celestial.moon_local_orbit_step104" + }, + "moon_local_orbit_step104": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m104", + "to": "$m105", + "next": "@celestial.moon_local_orbit_step105" + }, + "moon_local_orbit_step105": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m105", + "to": "$m106", + "next": "@celestial.moon_local_orbit_step106" + }, + "moon_local_orbit_step106": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m106", + "to": "$m107", + "next": "@celestial.moon_local_orbit_step107" + }, + "moon_local_orbit_step107": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m107", + "to": "$m108", + "next": "@celestial.moon_local_orbit_step108" + }, + "moon_local_orbit_step108": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m108", + "to": "$m109", + "next": "@celestial.moon_local_orbit_step109" + }, + "moon_local_orbit_step109": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m109", + "to": "$m110", + "next": "@celestial.moon_local_orbit_step110" + }, + "moon_local_orbit_step110": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m110", + "to": "$m111", + "next": "@celestial.moon_local_orbit_step111" + }, + "moon_local_orbit_step111": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m111", + "to": "$m112", + "next": "@celestial.moon_local_orbit_step112" + }, + "moon_local_orbit_step112": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m112", + "to": "$m113", + "next": "@celestial.moon_local_orbit_step113" + }, + "moon_local_orbit_step113": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m113", + "to": "$m114", + "next": "@celestial.moon_local_orbit_step114" + }, + "moon_local_orbit_step114": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m114", + "to": "$m115", + "next": "@celestial.moon_local_orbit_step115" + }, + "moon_local_orbit_step115": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m115", + "to": "$m116", + "next": "@celestial.moon_local_orbit_step116" + }, + "moon_local_orbit_step116": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m116", + "to": "$m117", + "next": "@celestial.moon_local_orbit_step117" + }, + "moon_local_orbit_step117": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m117", + "to": "$m118", + "next": "@celestial.moon_local_orbit_step118" + }, + "moon_local_orbit_step118": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m118", + "to": "$m119", + "next": "@celestial.moon_local_orbit_step119" + }, + "moon_local_orbit_step119": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m119", + "to": "$m120", + "next": "@celestial.moon_local_orbit_step120" + }, + "moon_local_orbit_step120": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m120", + "to": "$m121", + "next": "@celestial.moon_local_orbit_step121" + }, + "moon_local_orbit_step121": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m121", + "to": "$m122", + "next": "@celestial.moon_local_orbit_step122" + }, + "moon_local_orbit_step122": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m122", + "to": "$m123", + "next": "@celestial.moon_local_orbit_step123" + }, + "moon_local_orbit_step123": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m123", + "to": "$m124", + "next": "@celestial.moon_local_orbit_step124" + }, + "moon_local_orbit_step124": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m124", + "to": "$m125", + "next": "@celestial.moon_local_orbit_step125" + }, + "moon_local_orbit_step125": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m125", + "to": "$m126", + "next": "@celestial.moon_local_orbit_step126" + }, + "moon_local_orbit_step126": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m126", + "to": "$m127", + "next": "@celestial.moon_local_orbit_step127" + }, + "moon_local_orbit_step127": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m127", + "to": "$m128", + "next": "@celestial.moon_local_orbit_step128" + }, + "moon_local_orbit_step128": { + "anim_type": "offset", + "duration": "$moon_orbit_duration", + "from": "$m128", + "to": "$m1", + "next": "@celestial.moon_local_orbit_step1" + }, + "zoomed_planet_icon": { + "type": "panel", + "size": [ + 100, + 100 + ], + "controls": [ + { + "planet_image": { + "type": "image", + "texture": "$texture", + "size": "$size", + "controls": [ + { + "orbital_toggle_zoom@celestial.selection_box": { + "toggle_default_state": false, + "$select_name": "('orbital_toggle_' + $control_name)", + "$selection_size": [ + 60, + 60 + ] + } + } + ] + } + } + ] + }, + "zoomed_asteroid_icon": { + "type": "panel", + "size": [ + 100, + 100 + ], + "controls": [ + { + "planet_image": { + "type": "image", + "texture": "$texture", + "size": "$size", + "uv_size": [ + 80, + 80 + ], + "anims": [ + { + "animation": { + "anim_type": "flip_book", + "fps": 4, + "frame_count": 12, + "frame_step": 80 + } + } + ], + "controls": [ + { + "orbital_toggle_zoom@celestial.selection_box": { + "toggle_default_state": false, + "$select_name": "('orbital_toggle_' + $control_name)", + "$selection_size": [ + 60, + 60 + ] + } + } + ] + } + } + ] + }, + "zoomed_solar_system_mercury": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_mercury", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_mercury" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and #zoom_mercury)", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "moving_orbits_wrapper": { + "type": "panel", + "anims": [ + "@celestial.zoomed_mercury_orbit_step1" + ], + "$orbit_duration": 0.078126, + "$mer_rev_1": [ + -725.22, + 0.0 + ], + "$mer_rev_2": [ + -724.43, + -17.82 + ], + "$mer_rev_3": [ + -721.81, + -35.5 + ], + "$mer_rev_4": [ + -717.36, + -53.19 + ], + "$mer_rev_5": [ + -711.33, + -70.74 + ], + "$mer_rev_6": [ + -703.47, + -88.16 + ], + "$mer_rev_7": [ + -694.04, + -105.32 + ], + "$mer_rev_8": [ + -682.9, + -122.22 + ], + "$mer_rev_9": [ + -670.06, + -138.73 + ], + "$mer_rev_10": [ + -655.65, + -155.1 + ], + "$mer_rev_11": [ + -639.67, + -170.96 + ], + "$mer_rev_12": [ + -622.12, + -186.41 + ], + "$mer_rev_13": [ + -602.99, + -201.48 + ], + "$mer_rev_14": [ + -582.56, + -216.02 + ], + "$mer_rev_15": [ + -560.68, + -230.04 + ], + "$mer_rev_16": [ + -537.36, + -243.53 + ], + "$mer_rev_17": [ + -512.87, + -256.37 + ], + "$mer_rev_18": [ + -487.06, + -268.68 + ], + "$mer_rev_19": [ + -460.07, + -280.34 + ], + "$mer_rev_20": [ + -432.04, + -291.21 + ], + "$mer_rev_21": [ + -402.96, + -301.56 + ], + "$mer_rev_22": [ + -372.83, + -310.99 + ], + "$mer_rev_23": [ + -341.91, + -319.77 + ], + "$mer_rev_24": [ + -310.08, + -327.76 + ], + "$mer_rev_25": [ + -277.59, + -334.97 + ], + "$mer_rev_26": [ + -244.31, + -341.39 + ], + "$mer_rev_27": [ + -210.52, + -347.02 + ], + "$mer_rev_28": [ + -176.19, + -351.74 + ], + "$mer_rev_29": [ + -141.48, + -355.66 + ], + "$mer_rev_30": [ + -106.37, + -358.68 + ], + "$mer_rev_31": [ + -71.13, + -360.9 + ], + "$mer_rev_32": [ + -35.63, + -362.21 + ], + "$mer_rev_33": [ + 0.0, + -362.61 + ], + "$mer_rev_34": [ + 35.63, + -362.21 + ], + "$mer_rev_35": [ + 71.13, + -360.9 + ], + "$mer_rev_36": [ + 106.37, + -358.68 + ], + "$mer_rev_37": [ + 141.48, + -355.66 + ], + "$mer_rev_38": [ + 176.19, + -351.74 + ], + "$mer_rev_39": [ + 210.52, + -347.02 + ], + "$mer_rev_40": [ + 244.31, + -341.39 + ], + "$mer_rev_41": [ + 277.59, + -334.97 + ], + "$mer_rev_42": [ + 310.08, + -327.76 + ], + "$mer_rev_43": [ + 341.91, + -319.77 + ], + "$mer_rev_44": [ + 372.83, + -310.99 + ], + "$mer_rev_45": [ + 402.96, + -301.56 + ], + "$mer_rev_46": [ + 432.04, + -291.21 + ], + "$mer_rev_47": [ + 460.07, + -280.34 + ], + "$mer_rev_48": [ + 487.06, + -268.68 + ], + "$mer_rev_49": [ + 512.87, + -256.37 + ], + "$mer_rev_50": [ + 537.36, + -243.53 + ], + "$mer_rev_51": [ + 560.68, + -230.04 + ], + "$mer_rev_52": [ + 582.56, + -216.02 + ], + "$mer_rev_53": [ + 602.99, + -201.48 + ], + "$mer_rev_54": [ + 622.12, + -186.41 + ], + "$mer_rev_55": [ + 639.67, + -170.96 + ], + "$mer_rev_56": [ + 655.65, + -155.1 + ], + "$mer_rev_57": [ + 670.06, + -138.73 + ], + "$mer_rev_58": [ + 682.9, + -122.22 + ], + "$mer_rev_59": [ + 694.04, + -105.32 + ], + "$mer_rev_60": [ + 703.47, + -88.16 + ], + "$mer_rev_61": [ + 711.33, + -70.74 + ], + "$mer_rev_62": [ + 717.36, + -53.19 + ], + "$mer_rev_63": [ + 721.81, + -35.5 + ], + "$mer_rev_64": [ + 724.43, + -17.82 + ], + "$mer_rev_65": [ + 725.22, + 0.0 + ], + "$mer_rev_66": [ + 724.43, + 17.82 + ], + "$mer_rev_67": [ + 721.81, + 35.5 + ], + "$mer_rev_68": [ + 717.36, + 53.19 + ], + "$mer_rev_69": [ + 711.33, + 70.74 + ], + "$mer_rev_70": [ + 703.47, + 88.16 + ], + "$mer_rev_71": [ + 694.04, + 105.32 + ], + "$mer_rev_72": [ + 682.9, + 122.22 + ], + "$mer_rev_73": [ + 670.06, + 138.73 + ], + "$mer_rev_74": [ + 655.65, + 155.1 + ], + "$mer_rev_75": [ + 639.67, + 170.96 + ], + "$mer_rev_76": [ + 622.12, + 186.41 + ], + "$mer_rev_77": [ + 602.99, + 201.48 + ], + "$mer_rev_78": [ + 582.56, + 216.02 + ], + "$mer_rev_79": [ + 560.68, + 230.04 + ], + "$mer_rev_80": [ + 537.36, + 243.53 + ], + "$mer_rev_81": [ + 512.87, + 256.37 + ], + "$mer_rev_82": [ + 487.06, + 268.68 + ], + "$mer_rev_83": [ + 460.07, + 280.34 + ], + "$mer_rev_84": [ + 432.04, + 291.21 + ], + "$mer_rev_85": [ + 402.96, + 301.56 + ], + "$mer_rev_86": [ + 372.83, + 310.99 + ], + "$mer_rev_87": [ + 341.91, + 319.77 + ], + "$mer_rev_88": [ + 310.08, + 327.76 + ], + "$mer_rev_89": [ + 277.59, + 334.97 + ], + "$mer_rev_90": [ + 244.31, + 341.39 + ], + "$mer_rev_91": [ + 210.52, + 347.02 + ], + "$mer_rev_92": [ + 176.19, + 351.74 + ], + "$mer_rev_93": [ + 141.48, + 355.66 + ], + "$mer_rev_94": [ + 106.37, + 358.68 + ], + "$mer_rev_95": [ + 71.13, + 360.9 + ], + "$mer_rev_96": [ + 35.63, + 362.21 + ], + "$mer_rev_97": [ + 0.0, + 362.61 + ], + "$mer_rev_98": [ + -35.63, + 362.21 + ], + "$mer_rev_99": [ + -71.13, + 360.9 + ], + "$mer_rev_100": [ + -106.37, + 358.68 + ], + "$mer_rev_101": [ + -141.48, + 355.66 + ], + "$mer_rev_102": [ + -176.19, + 351.74 + ], + "$mer_rev_103": [ + -210.52, + 347.02 + ], + "$mer_rev_104": [ + -244.31, + 341.39 + ], + "$mer_rev_105": [ + -277.59, + 334.97 + ], + "$mer_rev_106": [ + -310.08, + 327.76 + ], + "$mer_rev_107": [ + -341.91, + 319.77 + ], + "$mer_rev_108": [ + -372.83, + 310.99 + ], + "$mer_rev_109": [ + -402.96, + 301.56 + ], + "$mer_rev_110": [ + -432.04, + 291.21 + ], + "$mer_rev_111": [ + -460.07, + 280.34 + ], + "$mer_rev_112": [ + -487.06, + 268.68 + ], + "$mer_rev_113": [ + -512.87, + 256.37 + ], + "$mer_rev_114": [ + -537.36, + 243.53 + ], + "$mer_rev_115": [ + -560.68, + 230.04 + ], + "$mer_rev_116": [ + -582.56, + 216.02 + ], + "$mer_rev_117": [ + -602.99, + 201.48 + ], + "$mer_rev_118": [ + -622.12, + 186.41 + ], + "$mer_rev_119": [ + -639.67, + 170.96 + ], + "$mer_rev_120": [ + -655.65, + 155.1 + ], + "$mer_rev_121": [ + -670.06, + 138.73 + ], + "$mer_rev_122": [ + -682.9, + 122.22 + ], + "$mer_rev_123": [ + -694.04, + 105.32 + ], + "$mer_rev_124": [ + -703.47, + 88.16 + ], + "$mer_rev_125": [ + -711.33, + 70.74 + ], + "$mer_rev_126": [ + -717.36, + 53.19 + ], + "$mer_rev_127": [ + -721.81, + 35.5 + ], + "$mer_rev_128": [ + -724.43, + 17.82 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + } + ] + } + }, + { + "Planet@celestial.zoomed_planet_icon": { + "$control_name": "mercury", + "$texture": "textures/ui/cosmos/celestial_selector/mercury", + "$size": [ + 26, + 26 + ] + } + } + ] + }, + "zoomed_solar_system_venus": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_venus", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_venus" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and #zoom_venus)", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "moving_orbits_wrapper": { + "type": "panel", + "anims": [ + "@celestial.zoomed_venus_orbit_step1" + ], + "$orbit_duration": 0.117188, + "$ven_rev_1": [ + -1022.19, + 0.0 + ], + "$ven_rev_2": [ + -1020.88, + -25.02 + ], + "$ven_rev_3": [ + -1017.22, + -50.04 + ], + "$ven_rev_4": [ + -1011.06, + -74.93 + ], + "$ven_rev_5": [ + -1002.54, + -99.69 + ], + "$ven_rev_6": [ + -991.54, + -124.19 + ], + "$ven_rev_7": [ + -978.18, + -148.29 + ], + "$ven_rev_8": [ + -962.33, + -172.13 + ], + "$ven_rev_9": [ + -944.38, + -195.58 + ], + "$ven_rev_10": [ + -923.94, + -218.51 + ], + "$ven_rev_11": [ + -901.41, + -240.91 + ], + "$ven_rev_12": [ + -876.65, + -262.79 + ], + "$ven_rev_13": [ + -849.93, + -283.88 + ], + "$ven_rev_14": [ + -820.98, + -304.44 + ], + "$ven_rev_15": [ + -790.06, + -324.22 + ], + "$ven_rev_16": [ + -757.31, + -343.22 + ], + "$ven_rev_17": [ + -722.73, + -361.43 + ], + "$ven_rev_18": [ + -686.44, + -378.72 + ], + "$ven_rev_19": [ + -648.45, + -395.1 + ], + "$ven_rev_20": [ + -608.89, + -410.55 + ], + "$ven_rev_21": [ + -567.88, + -424.96 + ], + "$ven_rev_22": [ + -525.44, + -438.33 + ], + "$ven_rev_23": [ + -481.82, + -450.77 + ], + "$ven_rev_24": [ + -437.02, + -462.04 + ], + "$ven_rev_25": [ + -391.17, + -472.12 + ], + "$ven_rev_26": [ + -344.4, + -481.16 + ], + "$ven_rev_27": [ + -296.71, + -489.02 + ], + "$ven_rev_28": [ + -248.38, + -495.7 + ], + "$ven_rev_29": [ + -199.38, + -501.21 + ], + "$ven_rev_30": [ + -149.99, + -505.53 + ], + "$ven_rev_31": [ + -100.22, + -508.54 + ], + "$ven_rev_32": [ + -50.17, + -510.51 + ], + "$ven_rev_33": [ + 0.0, + -511.03 + ], + "$ven_rev_34": [ + 50.17, + -510.51 + ], + "$ven_rev_35": [ + 100.22, + -508.54 + ], + "$ven_rev_36": [ + 149.99, + -505.53 + ], + "$ven_rev_37": [ + 199.38, + -501.21 + ], + "$ven_rev_38": [ + 248.38, + -495.7 + ], + "$ven_rev_39": [ + 296.71, + -489.02 + ], + "$ven_rev_40": [ + 344.4, + -481.16 + ], + "$ven_rev_41": [ + 391.17, + -472.12 + ], + "$ven_rev_42": [ + 437.02, + -462.04 + ], + "$ven_rev_43": [ + 481.82, + -450.77 + ], + "$ven_rev_44": [ + 525.44, + -438.33 + ], + "$ven_rev_45": [ + 567.88, + -424.96 + ], + "$ven_rev_46": [ + 608.89, + -410.55 + ], + "$ven_rev_47": [ + 648.45, + -395.1 + ], + "$ven_rev_48": [ + 686.44, + -378.72 + ], + "$ven_rev_49": [ + 722.73, + -361.43 + ], + "$ven_rev_50": [ + 757.31, + -343.22 + ], + "$ven_rev_51": [ + 790.06, + -324.22 + ], + "$ven_rev_52": [ + 820.98, + -304.44 + ], + "$ven_rev_53": [ + 849.93, + -283.88 + ], + "$ven_rev_54": [ + 876.65, + -262.79 + ], + "$ven_rev_55": [ + 901.41, + -240.91 + ], + "$ven_rev_56": [ + 923.94, + -218.51 + ], + "$ven_rev_57": [ + 944.38, + -195.58 + ], + "$ven_rev_58": [ + 962.33, + -172.13 + ], + "$ven_rev_59": [ + 978.18, + -148.29 + ], + "$ven_rev_60": [ + 991.54, + -124.19 + ], + "$ven_rev_61": [ + 1002.54, + -99.69 + ], + "$ven_rev_62": [ + 1011.06, + -74.93 + ], + "$ven_rev_63": [ + 1017.22, + -50.04 + ], + "$ven_rev_64": [ + 1020.88, + -25.02 + ], + "$ven_rev_65": [ + 1022.19, + 0.0 + ], + "$ven_rev_66": [ + 1020.88, + 25.02 + ], + "$ven_rev_67": [ + 1017.22, + 50.04 + ], + "$ven_rev_68": [ + 1011.06, + 74.93 + ], + "$ven_rev_69": [ + 1002.54, + 99.69 + ], + "$ven_rev_70": [ + 991.54, + 124.19 + ], + "$ven_rev_71": [ + 978.18, + 148.29 + ], + "$ven_rev_72": [ + 962.33, + 172.13 + ], + "$ven_rev_73": [ + 944.38, + 195.58 + ], + "$ven_rev_74": [ + 923.94, + 218.51 + ], + "$ven_rev_75": [ + 901.41, + 240.91 + ], + "$ven_rev_76": [ + 876.65, + 262.79 + ], + "$ven_rev_77": [ + 849.93, + 283.88 + ], + "$ven_rev_78": [ + 820.98, + 304.44 + ], + "$ven_rev_79": [ + 790.06, + 324.22 + ], + "$ven_rev_80": [ + 757.31, + 343.22 + ], + "$ven_rev_81": [ + 722.73, + 361.43 + ], + "$ven_rev_82": [ + 686.44, + 378.72 + ], + "$ven_rev_83": [ + 648.45, + 395.1 + ], + "$ven_rev_84": [ + 608.89, + 410.55 + ], + "$ven_rev_85": [ + 567.88, + 424.96 + ], + "$ven_rev_86": [ + 525.44, + 438.33 + ], + "$ven_rev_87": [ + 481.82, + 450.77 + ], + "$ven_rev_88": [ + 437.02, + 462.04 + ], + "$ven_rev_89": [ + 391.17, + 472.12 + ], + "$ven_rev_90": [ + 344.4, + 481.16 + ], + "$ven_rev_91": [ + 296.71, + 489.02 + ], + "$ven_rev_92": [ + 248.38, + 495.7 + ], + "$ven_rev_93": [ + 199.38, + 501.21 + ], + "$ven_rev_94": [ + 149.99, + 505.53 + ], + "$ven_rev_95": [ + 100.22, + 508.54 + ], + "$ven_rev_96": [ + 50.17, + 510.51 + ], + "$ven_rev_97": [ + 0.0, + 511.03 + ], + "$ven_rev_98": [ + -50.17, + 510.51 + ], + "$ven_rev_99": [ + -100.22, + 508.54 + ], + "$ven_rev_100": [ + -149.99, + 505.53 + ], + "$ven_rev_101": [ + -199.38, + 501.21 + ], + "$ven_rev_102": [ + -248.38, + 495.7 + ], + "$ven_rev_103": [ + -296.71, + 489.02 + ], + "$ven_rev_104": [ + -344.4, + 481.16 + ], + "$ven_rev_105": [ + -391.17, + 472.12 + ], + "$ven_rev_106": [ + -437.02, + 462.04 + ], + "$ven_rev_107": [ + -481.82, + 450.77 + ], + "$ven_rev_108": [ + -525.44, + 438.33 + ], + "$ven_rev_109": [ + -567.88, + 424.96 + ], + "$ven_rev_110": [ + -608.89, + 410.55 + ], + "$ven_rev_111": [ + -648.45, + 395.1 + ], + "$ven_rev_112": [ + -686.44, + 378.72 + ], + "$ven_rev_113": [ + -722.73, + 361.43 + ], + "$ven_rev_114": [ + -757.31, + 343.22 + ], + "$ven_rev_115": [ + -790.06, + 324.22 + ], + "$ven_rev_116": [ + -820.98, + 304.44 + ], + "$ven_rev_117": [ + -849.93, + 283.88 + ], + "$ven_rev_118": [ + -876.65, + 262.79 + ], + "$ven_rev_119": [ + -901.41, + 240.91 + ], + "$ven_rev_120": [ + -923.94, + 218.51 + ], + "$ven_rev_121": [ + -944.38, + 195.58 + ], + "$ven_rev_122": [ + -962.33, + 172.13 + ], + "$ven_rev_123": [ + -978.18, + 148.29 + ], + "$ven_rev_124": [ + -991.54, + 124.19 + ], + "$ven_rev_125": [ + -1002.54, + 99.69 + ], + "$ven_rev_126": [ + -1011.06, + 74.93 + ], + "$ven_rev_127": [ + -1017.22, + 50.04 + ], + "$ven_rev_128": [ + -1020.88, + 25.02 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + } + ] + } + }, + { + "Planet@celestial.zoomed_planet_icon": { + "$control_name": "venus", + "$texture": "textures/ui/cosmos/celestial_selector/venus", + "$size": [ + 39, + 39 + ] + } + } + ] + }, + "zoomed_solar_system_overworld": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_earth" + }, + { + "binding_type": "view", + "source_control_name": "zoom_toggle_moon", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_moon" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and (#zoom_earth or #zoom_moon))", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "moving_orbits_wrapper": { + "type": "panel", + "anims": [ + "@celestial.zoomed_overworld_orbit_step1" + ], + "$orbit_duration": 0.234376, + "$ear_rev_1": [ + -1277.12, + 0.0 + ], + "$ear_rev_2": [ + -1275.68, + -31.31 + ], + "$ear_rev_3": [ + -1270.96, + -62.62 + ], + "$ear_rev_4": [ + -1263.36, + -93.67 + ], + "$ear_rev_5": [ + -1252.62, + -124.58 + ], + "$ear_rev_6": [ + -1238.87, + -155.1 + ], + "$ear_rev_7": [ + -1222.23, + -185.37 + ], + "$ear_rev_8": [ + -1202.45, + -215.1 + ], + "$ear_rev_9": [ + -1179.92, + -244.31 + ], + "$ear_rev_10": [ + -1154.5, + -273.0 + ], + "$ear_rev_11": [ + -1126.34, + -301.04 + ], + "$ear_rev_12": [ + -1095.42, + -328.29 + ], + "$ear_rev_13": [ + -1061.89, + -354.75 + ], + "$ear_rev_14": [ + -1025.86, + -380.42 + ], + "$ear_rev_15": [ + -987.22, + -405.05 + ], + "$ear_rev_16": [ + -946.34, + -428.89 + ], + "$ear_rev_17": [ + -903.11, + -451.56 + ], + "$ear_rev_18": [ + -857.66, + -473.17 + ], + "$ear_rev_19": [ + -810.24, + -493.61 + ], + "$ear_rev_20": [ + -760.85, + -512.87 + ], + "$ear_rev_21": [ + -709.5, + -530.94 + ], + "$ear_rev_22": [ + -656.57, + -547.71 + ], + "$ear_rev_23": [ + -602.08, + -563.17 + ], + "$ear_rev_24": [ + -546.01, + -577.32 + ], + "$ear_rev_25": [ + -488.76, + -590.02 + ], + "$ear_rev_26": [ + -430.2, + -601.29 + ], + "$ear_rev_27": [ + -370.73, + -611.12 + ], + "$ear_rev_28": [ + -310.34, + -619.5 + ], + "$ear_rev_29": [ + -249.16, + -626.31 + ], + "$ear_rev_30": [ + -187.46, + -631.68 + ], + "$ear_rev_31": [ + -125.24, + -635.48 + ], + "$ear_rev_32": [ + -62.62, + -637.84 + ], + "$ear_rev_33": [ + 0.0, + -638.63 + ], + "$ear_rev_34": [ + 62.62, + -637.84 + ], + "$ear_rev_35": [ + 125.24, + -635.48 + ], + "$ear_rev_36": [ + 187.46, + -631.68 + ], + "$ear_rev_37": [ + 249.16, + -626.31 + ], + "$ear_rev_38": [ + 310.34, + -619.5 + ], + "$ear_rev_39": [ + 370.73, + -611.12 + ], + "$ear_rev_40": [ + 430.2, + -601.29 + ], + "$ear_rev_41": [ + 488.76, + -590.02 + ], + "$ear_rev_42": [ + 546.01, + -577.32 + ], + "$ear_rev_43": [ + 602.08, + -563.17 + ], + "$ear_rev_44": [ + 656.57, + -547.71 + ], + "$ear_rev_45": [ + 709.5, + -530.94 + ], + "$ear_rev_46": [ + 760.85, + -512.87 + ], + "$ear_rev_47": [ + 810.24, + -493.61 + ], + "$ear_rev_48": [ + 857.66, + -473.17 + ], + "$ear_rev_49": [ + 903.11, + -451.56 + ], + "$ear_rev_50": [ + 946.34, + -428.89 + ], + "$ear_rev_51": [ + 987.22, + -405.05 + ], + "$ear_rev_52": [ + 1025.86, + -380.42 + ], + "$ear_rev_53": [ + 1061.89, + -354.75 + ], + "$ear_rev_54": [ + 1095.42, + -328.29 + ], + "$ear_rev_55": [ + 1126.34, + -301.04 + ], + "$ear_rev_56": [ + 1154.5, + -273.0 + ], + "$ear_rev_57": [ + 1179.92, + -244.31 + ], + "$ear_rev_58": [ + 1202.45, + -215.1 + ], + "$ear_rev_59": [ + 1222.23, + -185.37 + ], + "$ear_rev_60": [ + 1238.87, + -155.1 + ], + "$ear_rev_61": [ + 1252.62, + -124.58 + ], + "$ear_rev_62": [ + 1263.36, + -93.67 + ], + "$ear_rev_63": [ + 1270.96, + -62.62 + ], + "$ear_rev_64": [ + 1275.68, + -31.31 + ], + "$ear_rev_65": [ + 1277.12, + 0.0 + ], + "$ear_rev_66": [ + 1275.68, + 31.31 + ], + "$ear_rev_67": [ + 1270.96, + 62.62 + ], + "$ear_rev_68": [ + 1263.36, + 93.67 + ], + "$ear_rev_69": [ + 1252.62, + 124.58 + ], + "$ear_rev_70": [ + 1238.87, + 155.1 + ], + "$ear_rev_71": [ + 1222.23, + 185.37 + ], + "$ear_rev_72": [ + 1202.45, + 215.1 + ], + "$ear_rev_73": [ + 1179.92, + 244.31 + ], + "$ear_rev_74": [ + 1154.5, + 273.0 + ], + "$ear_rev_75": [ + 1126.34, + 301.04 + ], + "$ear_rev_76": [ + 1095.42, + 328.29 + ], + "$ear_rev_77": [ + 1061.89, + 354.75 + ], + "$ear_rev_78": [ + 1025.86, + 380.42 + ], + "$ear_rev_79": [ + 987.22, + 405.05 + ], + "$ear_rev_80": [ + 946.34, + 428.89 + ], + "$ear_rev_81": [ + 903.11, + 451.56 + ], + "$ear_rev_82": [ + 857.66, + 473.17 + ], + "$ear_rev_83": [ + 810.24, + 493.61 + ], + "$ear_rev_84": [ + 760.85, + 512.87 + ], + "$ear_rev_85": [ + 709.5, + 530.94 + ], + "$ear_rev_86": [ + 656.57, + 547.71 + ], + "$ear_rev_87": [ + 602.08, + 563.17 + ], + "$ear_rev_88": [ + 546.01, + 577.32 + ], + "$ear_rev_89": [ + 488.76, + 590.02 + ], + "$ear_rev_90": [ + 430.2, + 601.29 + ], + "$ear_rev_91": [ + 370.73, + 611.12 + ], + "$ear_rev_92": [ + 310.34, + 619.5 + ], + "$ear_rev_93": [ + 249.16, + 626.31 + ], + "$ear_rev_94": [ + 187.46, + 631.68 + ], + "$ear_rev_95": [ + 125.24, + 635.48 + ], + "$ear_rev_96": [ + 62.62, + 637.84 + ], + "$ear_rev_97": [ + 0.0, + 638.63 + ], + "$ear_rev_98": [ + -62.62, + 637.84 + ], + "$ear_rev_99": [ + -125.24, + 635.48 + ], + "$ear_rev_100": [ + -187.46, + 631.68 + ], + "$ear_rev_101": [ + -249.16, + 626.31 + ], + "$ear_rev_102": [ + -310.34, + 619.5 + ], + "$ear_rev_103": [ + -370.73, + 611.12 + ], + "$ear_rev_104": [ + -430.2, + 601.29 + ], + "$ear_rev_105": [ + -488.76, + 590.02 + ], + "$ear_rev_106": [ + -546.01, + 577.32 + ], + "$ear_rev_107": [ + -602.08, + 563.17 + ], + "$ear_rev_108": [ + -656.57, + 547.71 + ], + "$ear_rev_109": [ + -709.5, + 530.94 + ], + "$ear_rev_110": [ + -760.85, + 512.87 + ], + "$ear_rev_111": [ + -810.24, + 493.61 + ], + "$ear_rev_112": [ + -857.66, + 473.17 + ], + "$ear_rev_113": [ + -903.11, + 451.56 + ], + "$ear_rev_114": [ + -946.34, + 428.89 + ], + "$ear_rev_115": [ + -987.22, + 405.05 + ], + "$ear_rev_116": [ + -1025.86, + 380.42 + ], + "$ear_rev_117": [ + -1061.89, + 354.75 + ], + "$ear_rev_118": [ + -1095.42, + 328.29 + ], + "$ear_rev_119": [ + -1126.34, + 301.04 + ], + "$ear_rev_120": [ + -1154.5, + 273.0 + ], + "$ear_rev_121": [ + -1179.92, + 244.31 + ], + "$ear_rev_122": [ + -1202.45, + 215.1 + ], + "$ear_rev_123": [ + -1222.23, + 185.37 + ], + "$ear_rev_124": [ + -1238.87, + 155.1 + ], + "$ear_rev_125": [ + -1252.62, + 124.58 + ], + "$ear_rev_126": [ + -1263.36, + 93.67 + ], + "$ear_rev_127": [ + -1270.96, + 62.62 + ], + "$ear_rev_128": [ + -1275.68, + 31.31 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + } + ] + } + }, + { + "Earth@celestial.earth_planet_zoomed": { + "$control_name": "overworld" + } + } + ] + }, + "zoomed_solar_system_mars": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_mars", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_mars" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and #zoom_mars)", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "moving_orbits_wrapper": { + "type": "panel", + "anims": [ + "@celestial.zoomed_mars_orbit_step1" + ], + "$orbit_duration": 0.390626, + "$mar_rev_1": [ + -1532.7, + 0.0 + ], + "$mar_rev_2": [ + -1530.87, + -37.6 + ], + "$mar_rev_3": [ + -1525.36, + -75.06 + ], + "$mar_rev_4": [ + -1516.06, + -112.4 + ], + "$mar_rev_5": [ + -1503.22, + -149.47 + ], + "$mar_rev_6": [ + -1486.72, + -186.15 + ], + "$mar_rev_7": [ + -1466.68, + -222.44 + ], + "$mar_rev_8": [ + -1443.1, + -258.2 + ], + "$mar_rev_9": [ + -1415.98, + -293.31 + ], + "$mar_rev_10": [ + -1385.59, + -327.63 + ], + "$mar_rev_11": [ + -1351.66, + -361.3 + ], + "$mar_rev_12": [ + -1314.58, + -394.05 + ], + "$mar_rev_13": [ + -1274.37, + -425.75 + ], + "$mar_rev_14": [ + -1231.14, + -456.54 + ], + "$mar_rev_15": [ + -1184.76, + -486.14 + ], + "$mar_rev_16": [ + -1135.64, + -514.7 + ], + "$mar_rev_17": [ + -1083.76, + -541.95 + ], + "$mar_rev_18": [ + -1029.27, + -567.88 + ], + "$mar_rev_19": [ + -972.28, + -592.38 + ], + "$mar_rev_20": [ + -913.07, + -615.57 + ], + "$mar_rev_21": [ + -851.5, + -637.18 + ], + "$mar_rev_22": [ + -787.96, + -657.36 + ], + "$mar_rev_23": [ + -722.46, + -675.83 + ], + "$mar_rev_24": [ + -655.26, + -692.73 + ], + "$mar_rev_25": [ + -586.49, + -708.05 + ], + "$mar_rev_26": [ + -516.4, + -721.55 + ], + "$mar_rev_27": [ + -444.88, + -733.34 + ], + "$mar_rev_28": [ + -372.43, + -743.42 + ], + "$mar_rev_29": [ + -299.07, + -751.68 + ], + "$mar_rev_30": [ + -224.93, + -758.1 + ], + "$mar_rev_31": [ + -150.26, + -762.68 + ], + "$mar_rev_32": [ + -75.19, + -765.43 + ], + "$mar_rev_33": [ + 0.0, + -766.35 + ], + "$mar_rev_34": [ + 75.19, + -765.43 + ], + "$mar_rev_35": [ + 150.26, + -762.68 + ], + "$mar_rev_36": [ + 224.93, + -758.1 + ], + "$mar_rev_37": [ + 299.07, + -751.68 + ], + "$mar_rev_38": [ + 372.43, + -743.42 + ], + "$mar_rev_39": [ + 444.88, + -733.34 + ], + "$mar_rev_40": [ + 516.4, + -721.55 + ], + "$mar_rev_41": [ + 586.49, + -708.05 + ], + "$mar_rev_42": [ + 655.26, + -692.73 + ], + "$mar_rev_43": [ + 722.46, + -675.83 + ], + "$mar_rev_44": [ + 787.96, + -657.36 + ], + "$mar_rev_45": [ + 851.5, + -637.18 + ], + "$mar_rev_46": [ + 913.07, + -615.57 + ], + "$mar_rev_47": [ + 972.28, + -592.38 + ], + "$mar_rev_48": [ + 1029.27, + -567.88 + ], + "$mar_rev_49": [ + 1083.76, + -541.95 + ], + "$mar_rev_50": [ + 1135.64, + -514.7 + ], + "$mar_rev_51": [ + 1184.76, + -486.14 + ], + "$mar_rev_52": [ + 1231.14, + -456.54 + ], + "$mar_rev_53": [ + 1274.37, + -425.75 + ], + "$mar_rev_54": [ + 1314.58, + -394.05 + ], + "$mar_rev_55": [ + 1351.66, + -361.3 + ], + "$mar_rev_56": [ + 1385.59, + -327.63 + ], + "$mar_rev_57": [ + 1415.98, + -293.31 + ], + "$mar_rev_58": [ + 1443.1, + -258.2 + ], + "$mar_rev_59": [ + 1466.68, + -222.44 + ], + "$mar_rev_60": [ + 1486.72, + -186.15 + ], + "$mar_rev_61": [ + 1503.22, + -149.47 + ], + "$mar_rev_62": [ + 1516.06, + -112.4 + ], + "$mar_rev_63": [ + 1525.36, + -75.06 + ], + "$mar_rev_64": [ + 1530.87, + -37.6 + ], + "$mar_rev_65": [ + 1532.7, + 0.0 + ], + "$mar_rev_66": [ + 1530.87, + 37.6 + ], + "$mar_rev_67": [ + 1525.36, + 75.06 + ], + "$mar_rev_68": [ + 1516.06, + 112.4 + ], + "$mar_rev_69": [ + 1503.22, + 149.47 + ], + "$mar_rev_70": [ + 1486.72, + 186.15 + ], + "$mar_rev_71": [ + 1466.68, + 222.44 + ], + "$mar_rev_72": [ + 1443.1, + 258.2 + ], + "$mar_rev_73": [ + 1415.98, + 293.31 + ], + "$mar_rev_74": [ + 1385.59, + 327.63 + ], + "$mar_rev_75": [ + 1351.66, + 361.3 + ], + "$mar_rev_76": [ + 1314.58, + 394.05 + ], + "$mar_rev_77": [ + 1274.37, + 425.75 + ], + "$mar_rev_78": [ + 1231.14, + 456.54 + ], + "$mar_rev_79": [ + 1184.76, + 486.14 + ], + "$mar_rev_80": [ + 1135.64, + 514.7 + ], + "$mar_rev_81": [ + 1083.76, + 541.95 + ], + "$mar_rev_82": [ + 1029.27, + 567.88 + ], + "$mar_rev_83": [ + 972.28, + 592.38 + ], + "$mar_rev_84": [ + 913.07, + 615.57 + ], + "$mar_rev_85": [ + 851.5, + 637.18 + ], + "$mar_rev_86": [ + 787.96, + 657.36 + ], + "$mar_rev_87": [ + 722.46, + 675.83 + ], + "$mar_rev_88": [ + 655.26, + 692.73 + ], + "$mar_rev_89": [ + 586.49, + 708.05 + ], + "$mar_rev_90": [ + 516.4, + 721.55 + ], + "$mar_rev_91": [ + 444.88, + 733.34 + ], + "$mar_rev_92": [ + 372.43, + 743.42 + ], + "$mar_rev_93": [ + 299.07, + 751.68 + ], + "$mar_rev_94": [ + 224.93, + 758.1 + ], + "$mar_rev_95": [ + 150.26, + 762.68 + ], + "$mar_rev_96": [ + 75.19, + 765.43 + ], + "$mar_rev_97": [ + 0.0, + 766.35 + ], + "$mar_rev_98": [ + -75.19, + 765.43 + ], + "$mar_rev_99": [ + -150.26, + 762.68 + ], + "$mar_rev_100": [ + -224.93, + 758.1 + ], + "$mar_rev_101": [ + -299.07, + 751.68 + ], + "$mar_rev_102": [ + -372.43, + 743.42 + ], + "$mar_rev_103": [ + -444.88, + 733.34 + ], + "$mar_rev_104": [ + -516.4, + 721.55 + ], + "$mar_rev_105": [ + -586.49, + 708.05 + ], + "$mar_rev_106": [ + -655.26, + 692.73 + ], + "$mar_rev_107": [ + -722.46, + 675.83 + ], + "$mar_rev_108": [ + -787.96, + 657.36 + ], + "$mar_rev_109": [ + -851.5, + 637.18 + ], + "$mar_rev_110": [ + -913.07, + 615.57 + ], + "$mar_rev_111": [ + -972.28, + 592.38 + ], + "$mar_rev_112": [ + -1029.27, + 567.88 + ], + "$mar_rev_113": [ + -1083.76, + 541.95 + ], + "$mar_rev_114": [ + -1135.64, + 514.7 + ], + "$mar_rev_115": [ + -1184.76, + 486.14 + ], + "$mar_rev_116": [ + -1231.14, + 456.54 + ], + "$mar_rev_117": [ + -1274.37, + 425.75 + ], + "$mar_rev_118": [ + -1314.58, + 394.05 + ], + "$mar_rev_119": [ + -1351.66, + 361.3 + ], + "$mar_rev_120": [ + -1385.59, + 327.63 + ], + "$mar_rev_121": [ + -1415.98, + 293.31 + ], + "$mar_rev_122": [ + -1443.1, + 258.2 + ], + "$mar_rev_123": [ + -1466.68, + 222.44 + ], + "$mar_rev_124": [ + -1486.72, + 186.15 + ], + "$mar_rev_125": [ + -1503.22, + 149.47 + ], + "$mar_rev_126": [ + -1516.06, + 112.4 + ], + "$mar_rev_127": [ + -1525.36, + 75.06 + ], + "$mar_rev_128": [ + -1530.87, + 37.6 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + } + ] + } + }, + { + "Planet@celestial.zoomed_planet_icon": { + "$control_name": "mars", + "$texture": "textures/ui/cosmos/celestial_selector/mars", + "$size": [ + 39, + 39 + ] + } + } + ] + }, + "zoomed_solar_system_asteroids": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_asteroids", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_asteroids" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and #zoom_asteroids)", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "moving_orbits_wrapper": { + "type": "panel", + "anims": [ + "@celestial.zoomed_asteroids_orbit_step1" + ], + "$orbit_duration": 0.46875, + "$ast_rev_1": [ + -1723.04, + 0.0 + ], + "$ast_rev_2": [ + -1720.95, + -42.31 + ], + "$ast_rev_3": [ + -1714.79, + -84.5 + ], + "$ast_rev_4": [ + -1704.44, + -126.42 + ], + "$ast_rev_5": [ + -1689.9, + -168.07 + ], + "$ast_rev_6": [ + -1671.43, + -209.34 + ], + "$ast_rev_7": [ + -1648.9, + -250.08 + ], + "$ast_rev_8": [ + -1622.3, + -290.3 + ], + "$ast_rev_9": [ + -1591.91, + -329.73 + ], + "$ast_rev_10": [ + -1557.59, + -368.37 + ], + "$ast_rev_11": [ + -1519.6, + -406.1 + ], + "$ast_rev_12": [ + -1477.94, + -442.91 + ], + "$ast_rev_13": [ + -1432.62, + -478.67 + ], + "$ast_rev_14": [ + -1384.02, + -513.26 + ], + "$ast_rev_15": [ + -1331.88, + -546.53 + ], + "$ast_rev_16": [ + -1276.73, + -578.5 + ], + "$ast_rev_17": [ + -1218.43, + -609.15 + ], + "$ast_rev_18": [ + -1157.12, + -638.36 + ], + "$ast_rev_19": [ + -1093.06, + -666.0 + ], + "$ast_rev_20": [ + -1026.38, + -691.94 + ], + "$ast_rev_21": [ + -957.22, + -716.31 + ], + "$ast_rev_22": [ + -885.82, + -738.97 + ], + "$ast_rev_23": [ + -812.2, + -759.8 + ], + "$ast_rev_24": [ + -736.74, + -778.8 + ], + "$ast_rev_25": [ + -659.32, + -795.96 + ], + "$ast_rev_26": [ + -580.46, + -811.15 + ], + "$ast_rev_27": [ + -500.16, + -824.38 + ], + "$ast_rev_28": [ + -418.68, + -835.65 + ], + "$ast_rev_29": [ + -336.15, + -844.95 + ], + "$ast_rev_30": [ + -252.83, + -852.15 + ], + "$ast_rev_31": [ + -168.86, + -857.39 + ], + "$ast_rev_32": [ + -84.5, + -860.54 + ], + "$ast_rev_33": [ + 0.0, + -861.46 + ], + "$ast_rev_34": [ + 84.5, + -860.54 + ], + "$ast_rev_35": [ + 168.86, + -857.39 + ], + "$ast_rev_36": [ + 252.83, + -852.15 + ], + "$ast_rev_37": [ + 336.15, + -844.95 + ], + "$ast_rev_38": [ + 418.68, + -835.65 + ], + "$ast_rev_39": [ + 500.16, + -824.38 + ], + "$ast_rev_40": [ + 580.46, + -811.15 + ], + "$ast_rev_41": [ + 659.32, + -795.96 + ], + "$ast_rev_42": [ + 736.74, + -778.8 + ], + "$ast_rev_43": [ + 812.2, + -759.8 + ], + "$ast_rev_44": [ + 885.82, + -738.97 + ], + "$ast_rev_45": [ + 957.22, + -716.31 + ], + "$ast_rev_46": [ + 1026.38, + -691.94 + ], + "$ast_rev_47": [ + 1093.06, + -666.0 + ], + "$ast_rev_48": [ + 1157.12, + -638.36 + ], + "$ast_rev_49": [ + 1218.43, + -609.15 + ], + "$ast_rev_50": [ + 1276.73, + -578.5 + ], + "$ast_rev_51": [ + 1331.88, + -546.53 + ], + "$ast_rev_52": [ + 1384.02, + -513.26 + ], + "$ast_rev_53": [ + 1432.62, + -478.67 + ], + "$ast_rev_54": [ + 1477.94, + -442.91 + ], + "$ast_rev_55": [ + 1519.6, + -406.1 + ], + "$ast_rev_56": [ + 1557.59, + -368.37 + ], + "$ast_rev_57": [ + 1591.91, + -329.73 + ], + "$ast_rev_58": [ + 1622.3, + -290.3 + ], + "$ast_rev_59": [ + 1648.9, + -250.08 + ], + "$ast_rev_60": [ + 1671.43, + -209.34 + ], + "$ast_rev_61": [ + 1689.9, + -168.07 + ], + "$ast_rev_62": [ + 1704.44, + -126.42 + ], + "$ast_rev_63": [ + 1714.79, + -84.5 + ], + "$ast_rev_64": [ + 1720.95, + -42.31 + ], + "$ast_rev_65": [ + 1723.04, + 0.0 + ], + "$ast_rev_66": [ + 1720.95, + 42.31 + ], + "$ast_rev_67": [ + 1714.79, + 84.5 + ], + "$ast_rev_68": [ + 1704.44, + 126.42 + ], + "$ast_rev_69": [ + 1689.9, + 168.07 + ], + "$ast_rev_70": [ + 1671.43, + 209.34 + ], + "$ast_rev_71": [ + 1648.9, + 250.08 + ], + "$ast_rev_72": [ + 1622.3, + 290.3 + ], + "$ast_rev_73": [ + 1591.91, + 329.73 + ], + "$ast_rev_74": [ + 1557.59, + 368.37 + ], + "$ast_rev_75": [ + 1519.6, + 406.1 + ], + "$ast_rev_76": [ + 1477.94, + 442.91 + ], + "$ast_rev_77": [ + 1432.62, + 478.67 + ], + "$ast_rev_78": [ + 1384.02, + 513.26 + ], + "$ast_rev_79": [ + 1331.88, + 546.53 + ], + "$ast_rev_80": [ + 1276.73, + 578.5 + ], + "$ast_rev_81": [ + 1218.43, + 609.15 + ], + "$ast_rev_82": [ + 1157.12, + 638.36 + ], + "$ast_rev_83": [ + 1093.06, + 666.0 + ], + "$ast_rev_84": [ + 1026.38, + 691.94 + ], + "$ast_rev_85": [ + 957.22, + 716.31 + ], + "$ast_rev_86": [ + 885.82, + 738.97 + ], + "$ast_rev_87": [ + 812.2, + 759.8 + ], + "$ast_rev_88": [ + 736.74, + 778.8 + ], + "$ast_rev_89": [ + 659.32, + 795.96 + ], + "$ast_rev_90": [ + 580.46, + 811.15 + ], + "$ast_rev_91": [ + 500.16, + 824.38 + ], + "$ast_rev_92": [ + 418.68, + 835.65 + ], + "$ast_rev_93": [ + 336.15, + 844.95 + ], + "$ast_rev_94": [ + 252.83, + 852.15 + ], + "$ast_rev_95": [ + 168.86, + 857.39 + ], + "$ast_rev_96": [ + 84.5, + 860.54 + ], + "$ast_rev_97": [ + 0.0, + 861.46 + ], + "$ast_rev_98": [ + -84.5, + 860.54 + ], + "$ast_rev_99": [ + -168.86, + 857.39 + ], + "$ast_rev_100": [ + -252.83, + 852.15 + ], + "$ast_rev_101": [ + -336.15, + 844.95 + ], + "$ast_rev_102": [ + -418.68, + 835.65 + ], + "$ast_rev_103": [ + -500.16, + 824.38 + ], + "$ast_rev_104": [ + -580.46, + 811.15 + ], + "$ast_rev_105": [ + -659.32, + 795.96 + ], + "$ast_rev_106": [ + -736.74, + 778.8 + ], + "$ast_rev_107": [ + -812.2, + 759.8 + ], + "$ast_rev_108": [ + -885.82, + 738.97 + ], + "$ast_rev_109": [ + -957.22, + 716.31 + ], + "$ast_rev_110": [ + -1026.38, + 691.94 + ], + "$ast_rev_111": [ + -1093.06, + 666.0 + ], + "$ast_rev_112": [ + -1157.12, + 638.36 + ], + "$ast_rev_113": [ + -1218.43, + 609.15 + ], + "$ast_rev_114": [ + -1276.73, + 578.5 + ], + "$ast_rev_115": [ + -1331.88, + 546.53 + ], + "$ast_rev_116": [ + -1384.02, + 513.26 + ], + "$ast_rev_117": [ + -1432.62, + 478.67 + ], + "$ast_rev_118": [ + -1477.94, + 442.91 + ], + "$ast_rev_119": [ + -1519.6, + 406.1 + ], + "$ast_rev_120": [ + -1557.59, + 368.37 + ], + "$ast_rev_121": [ + -1591.91, + 329.73 + ], + "$ast_rev_122": [ + -1622.3, + 290.3 + ], + "$ast_rev_123": [ + -1648.9, + 250.08 + ], + "$ast_rev_124": [ + -1671.43, + 209.34 + ], + "$ast_rev_125": [ + -1689.9, + 168.07 + ], + "$ast_rev_126": [ + -1704.44, + 126.42 + ], + "$ast_rev_127": [ + -1714.79, + 84.5 + ], + "$ast_rev_128": [ + -1720.95, + 42.31 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + } + ] + } + }, + { + "Planet@celestial.zoomed_asteroid_icon": { + "$control_name": "asteroids", + "$texture": "textures/ui/cosmos/celestial_selector/spin_asteroid", + "$size": [ + 46, + 46 + ] + } + } + ] + }, + "zoomed_solar_system_jupiter": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_jupiter", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_jupiter" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and #zoom_jupiter)", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "moving_orbits_wrapper": { + "type": "panel", + "anims": [ + "@celestial.zoomed_jupiter_orbit_step1" + ], + "$orbit_duration": 0.625, + "$jup_rev_1": [ + -1865.57, + 0.0 + ], + "$jup_rev_2": [ + -1863.34, + -45.72 + ], + "$jup_rev_3": [ + -1856.66, + -91.44 + ], + "$jup_rev_4": [ + -1845.4, + -136.89 + ], + "$jup_rev_5": [ + -1829.68, + -181.96 + ], + "$jup_rev_6": [ + -1809.63, + -226.63 + ], + "$jup_rev_7": [ + -1785.27, + -270.78 + ], + "$jup_rev_8": [ + -1756.58, + -314.27 + ], + "$jup_rev_9": [ + -1723.57, + -356.97 + ], + "$jup_rev_10": [ + -1686.49, + -398.76 + ], + "$jup_rev_11": [ + -1645.36, + -439.77 + ], + "$jup_rev_12": [ + -1600.16, + -479.59 + ], + "$jup_rev_13": [ + -1551.17, + -518.24 + ], + "$jup_rev_14": [ + -1498.51, + -555.7 + ], + "$jup_rev_15": [ + -1442.18, + -591.73 + ], + "$jup_rev_16": [ + -1382.31, + -626.44 + ], + "$jup_rev_17": [ + -1319.17, + -659.59 + ], + "$jup_rev_18": [ + -1252.88, + -691.16 + ], + "$jup_rev_19": [ + -1183.45, + -721.02 + ], + "$jup_rev_20": [ + -1111.27, + -749.19 + ], + "$jup_rev_21": [ + -1036.47, + -775.65 + ], + "$jup_rev_22": [ + -959.05, + -800.15 + ], + "$jup_rev_23": [ + -879.4, + -822.68 + ], + "$jup_rev_24": [ + -797.66, + -843.25 + ], + "$jup_rev_25": [ + -713.95, + -861.85 + ], + "$jup_rev_26": [ + -628.54, + -878.22 + ], + "$jup_rev_27": [ + -541.55, + -892.63 + ], + "$jup_rev_28": [ + -453.26, + -904.82 + ], + "$jup_rev_29": [ + -363.92, + -914.9 + ], + "$jup_rev_30": [ + -273.79, + -922.63 + ], + "$jup_rev_31": [ + -182.88, + -928.27 + ], + "$jup_rev_32": [ + -91.57, + -931.67 + ], + "$jup_rev_33": [ + 0.0, + -932.85 + ], + "$jup_rev_34": [ + 91.57, + -931.67 + ], + "$jup_rev_35": [ + 182.88, + -928.27 + ], + "$jup_rev_36": [ + 273.79, + -922.63 + ], + "$jup_rev_37": [ + 363.92, + -914.9 + ], + "$jup_rev_38": [ + 453.26, + -904.82 + ], + "$jup_rev_39": [ + 541.55, + -892.63 + ], + "$jup_rev_40": [ + 628.54, + -878.22 + ], + "$jup_rev_41": [ + 713.95, + -861.85 + ], + "$jup_rev_42": [ + 797.66, + -843.25 + ], + "$jup_rev_43": [ + 879.4, + -822.68 + ], + "$jup_rev_44": [ + 959.05, + -800.15 + ], + "$jup_rev_45": [ + 1036.47, + -775.65 + ], + "$jup_rev_46": [ + 1111.27, + -749.19 + ], + "$jup_rev_47": [ + 1183.45, + -721.02 + ], + "$jup_rev_48": [ + 1252.88, + -691.16 + ], + "$jup_rev_49": [ + 1319.17, + -659.59 + ], + "$jup_rev_50": [ + 1382.31, + -626.44 + ], + "$jup_rev_51": [ + 1442.18, + -591.73 + ], + "$jup_rev_52": [ + 1498.51, + -555.7 + ], + "$jup_rev_53": [ + 1551.17, + -518.24 + ], + "$jup_rev_54": [ + 1600.16, + -479.59 + ], + "$jup_rev_55": [ + 1645.36, + -439.77 + ], + "$jup_rev_56": [ + 1686.49, + -398.76 + ], + "$jup_rev_57": [ + 1723.57, + -356.97 + ], + "$jup_rev_58": [ + 1756.58, + -314.27 + ], + "$jup_rev_59": [ + 1785.27, + -270.78 + ], + "$jup_rev_60": [ + 1809.63, + -226.63 + ], + "$jup_rev_61": [ + 1829.68, + -181.96 + ], + "$jup_rev_62": [ + 1845.4, + -136.89 + ], + "$jup_rev_63": [ + 1856.66, + -91.44 + ], + "$jup_rev_64": [ + 1863.34, + -45.72 + ], + "$jup_rev_65": [ + 1865.57, + 0.0 + ], + "$jup_rev_66": [ + 1863.34, + 45.72 + ], + "$jup_rev_67": [ + 1856.66, + 91.44 + ], + "$jup_rev_68": [ + 1845.4, + 136.89 + ], + "$jup_rev_69": [ + 1829.68, + 181.96 + ], + "$jup_rev_70": [ + 1809.63, + 226.63 + ], + "$jup_rev_71": [ + 1785.27, + 270.78 + ], + "$jup_rev_72": [ + 1756.58, + 314.27 + ], + "$jup_rev_73": [ + 1723.57, + 356.97 + ], + "$jup_rev_74": [ + 1686.49, + 398.76 + ], + "$jup_rev_75": [ + 1645.36, + 439.77 + ], + "$jup_rev_76": [ + 1600.16, + 479.59 + ], + "$jup_rev_77": [ + 1551.17, + 518.24 + ], + "$jup_rev_78": [ + 1498.51, + 555.7 + ], + "$jup_rev_79": [ + 1442.18, + 591.73 + ], + "$jup_rev_80": [ + 1382.31, + 626.44 + ], + "$jup_rev_81": [ + 1319.17, + 659.59 + ], + "$jup_rev_82": [ + 1252.88, + 691.16 + ], + "$jup_rev_83": [ + 1183.45, + 721.02 + ], + "$jup_rev_84": [ + 1111.27, + 749.19 + ], + "$jup_rev_85": [ + 1036.47, + 775.65 + ], + "$jup_rev_86": [ + 959.05, + 800.15 + ], + "$jup_rev_87": [ + 879.4, + 822.68 + ], + "$jup_rev_88": [ + 797.66, + 843.25 + ], + "$jup_rev_89": [ + 713.95, + 861.85 + ], + "$jup_rev_90": [ + 628.54, + 878.22 + ], + "$jup_rev_91": [ + 541.55, + 892.63 + ], + "$jup_rev_92": [ + 453.26, + 904.82 + ], + "$jup_rev_93": [ + 363.92, + 914.9 + ], + "$jup_rev_94": [ + 273.79, + 922.63 + ], + "$jup_rev_95": [ + 182.88, + 928.27 + ], + "$jup_rev_96": [ + 91.57, + 931.67 + ], + "$jup_rev_97": [ + 0.0, + 932.85 + ], + "$jup_rev_98": [ + -91.57, + 931.67 + ], + "$jup_rev_99": [ + -182.88, + 928.27 + ], + "$jup_rev_100": [ + -273.79, + 922.63 + ], + "$jup_rev_101": [ + -363.92, + 914.9 + ], + "$jup_rev_102": [ + -453.26, + 904.82 + ], + "$jup_rev_103": [ + -541.55, + 892.63 + ], + "$jup_rev_104": [ + -628.54, + 878.22 + ], + "$jup_rev_105": [ + -713.95, + 861.85 + ], + "$jup_rev_106": [ + -797.66, + 843.25 + ], + "$jup_rev_107": [ + -879.4, + 822.68 + ], + "$jup_rev_108": [ + -959.05, + 800.15 + ], + "$jup_rev_109": [ + -1036.47, + 775.65 + ], + "$jup_rev_110": [ + -1111.27, + 749.19 + ], + "$jup_rev_111": [ + -1183.45, + 721.02 + ], + "$jup_rev_112": [ + -1252.88, + 691.16 + ], + "$jup_rev_113": [ + -1319.17, + 659.59 + ], + "$jup_rev_114": [ + -1382.31, + 626.44 + ], + "$jup_rev_115": [ + -1442.18, + 591.73 + ], + "$jup_rev_116": [ + -1498.51, + 555.7 + ], + "$jup_rev_117": [ + -1551.17, + 518.24 + ], + "$jup_rev_118": [ + -1600.16, + 479.59 + ], + "$jup_rev_119": [ + -1645.36, + 439.77 + ], + "$jup_rev_120": [ + -1686.49, + 398.76 + ], + "$jup_rev_121": [ + -1723.57, + 356.97 + ], + "$jup_rev_122": [ + -1756.58, + 314.27 + ], + "$jup_rev_123": [ + -1785.27, + 270.78 + ], + "$jup_rev_124": [ + -1809.63, + 226.63 + ], + "$jup_rev_125": [ + -1829.68, + 181.96 + ], + "$jup_rev_126": [ + -1845.4, + 136.89 + ], + "$jup_rev_127": [ + -1856.66, + 91.44 + ], + "$jup_rev_128": [ + -1863.34, + 45.72 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + } + ] + } + }, + { + "Planet@celestial.zoomed_planet_icon": { + "$control_name": "jupiter", + "$texture": "textures/ui/cosmos/celestial_selector/jupiter", + "$size": [ + 26, + 26 + ] + } + } + ] + }, + "zoomed_solar_system_saturn": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_saturn", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_saturn" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and #zoom_saturn)", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "moving_orbits_wrapper": { + "type": "panel", + "anims": [ + "@celestial.zoomed_saturn_orbit_step1" + ], + "$orbit_duration": 0.78125, + "$sat_rev_1": [ + -2113.29, + 0.0 + ], + "$sat_rev_2": [ + -2110.8, + -51.88 + ], + "$sat_rev_3": [ + -2103.07, + -103.62 + ], + "$sat_rev_4": [ + -2090.37, + -155.1 + ], + "$sat_rev_5": [ + -2072.68, + -206.19 + ], + "$sat_rev_6": [ + -2050.02, + -256.76 + ], + "$sat_rev_7": [ + -2022.25, + -306.67 + ], + "$sat_rev_8": [ + -1989.76, + -355.93 + ], + "$sat_rev_9": [ + -1952.42, + -404.4 + ], + "$sat_rev_10": [ + -1910.37, + -451.82 + ], + "$sat_rev_11": [ + -1863.74, + -498.06 + ], + "$sat_rev_12": [ + -1812.65, + -543.26 + ], + "$sat_rev_13": [ + -1757.1, + -587.01 + ], + "$sat_rev_14": [ + -1697.37, + -629.45 + ], + "$sat_rev_15": [ + -1633.57, + -670.33 + ], + "$sat_rev_16": [ + -1565.84, + -709.63 + ], + "$sat_rev_17": [ + -1494.32, + -747.22 + ], + "$sat_rev_18": [ + -1419.25, + -782.86 + ], + "$sat_rev_19": [ + -1340.65, + -816.78 + ], + "$sat_rev_20": [ + -1258.91, + -848.75 + ], + "$sat_rev_21": [ + -1174.02, + -878.62 + ], + "$sat_rev_22": [ + -1086.38, + -906.26 + ], + "$sat_rev_23": [ + -996.25, + -931.93 + ], + "$sat_rev_24": [ + -903.51, + -955.25 + ], + "$sat_rev_25": [ + -808.66, + -976.21 + ], + "$sat_rev_26": [ + -711.99, + -994.81 + ], + "$sat_rev_27": [ + -613.47, + -1011.19 + ], + "$sat_rev_28": [ + -513.52, + -1024.94 + ], + "$sat_rev_29": [ + -412.26, + -1036.34 + ], + "$sat_rev_30": [ + -310.08, + -1045.25 + ], + "$sat_rev_31": [ + -207.11, + -1051.54 + ], + "$sat_rev_32": [ + -103.75, + -1055.34 + ], + "$sat_rev_33": [ + 0.0, + -1056.65 + ], + "$sat_rev_34": [ + 103.75, + -1055.34 + ], + "$sat_rev_35": [ + 207.11, + -1051.54 + ], + "$sat_rev_36": [ + 310.08, + -1045.25 + ], + "$sat_rev_37": [ + 412.26, + -1036.34 + ], + "$sat_rev_38": [ + 513.52, + -1024.94 + ], + "$sat_rev_39": [ + 613.47, + -1011.19 + ], + "$sat_rev_40": [ + 711.99, + -994.81 + ], + "$sat_rev_41": [ + 808.66, + -976.21 + ], + "$sat_rev_42": [ + 903.51, + -955.25 + ], + "$sat_rev_43": [ + 996.25, + -931.93 + ], + "$sat_rev_44": [ + 1086.38, + -906.26 + ], + "$sat_rev_45": [ + 1174.02, + -878.62 + ], + "$sat_rev_46": [ + 1258.91, + -848.75 + ], + "$sat_rev_47": [ + 1340.65, + -816.78 + ], + "$sat_rev_48": [ + 1419.25, + -782.86 + ], + "$sat_rev_49": [ + 1494.32, + -747.22 + ], + "$sat_rev_50": [ + 1565.84, + -709.63 + ], + "$sat_rev_51": [ + 1633.57, + -670.33 + ], + "$sat_rev_52": [ + 1697.37, + -629.45 + ], + "$sat_rev_53": [ + 1757.1, + -587.01 + ], + "$sat_rev_54": [ + 1812.65, + -543.26 + ], + "$sat_rev_55": [ + 1863.74, + -498.06 + ], + "$sat_rev_56": [ + 1910.37, + -451.82 + ], + "$sat_rev_57": [ + 1952.42, + -404.4 + ], + "$sat_rev_58": [ + 1989.76, + -355.93 + ], + "$sat_rev_59": [ + 2022.25, + -306.67 + ], + "$sat_rev_60": [ + 2050.02, + -256.76 + ], + "$sat_rev_61": [ + 2072.68, + -206.19 + ], + "$sat_rev_62": [ + 2090.37, + -155.1 + ], + "$sat_rev_63": [ + 2103.07, + -103.62 + ], + "$sat_rev_64": [ + 2110.8, + -51.88 + ], + "$sat_rev_65": [ + 2113.29, + 0.0 + ], + "$sat_rev_66": [ + 2110.8, + 51.88 + ], + "$sat_rev_67": [ + 2103.07, + 103.62 + ], + "$sat_rev_68": [ + 2090.37, + 155.1 + ], + "$sat_rev_69": [ + 2072.68, + 206.19 + ], + "$sat_rev_70": [ + 2050.02, + 256.76 + ], + "$sat_rev_71": [ + 2022.25, + 306.67 + ], + "$sat_rev_72": [ + 1989.76, + 355.93 + ], + "$sat_rev_73": [ + 1952.42, + 404.4 + ], + "$sat_rev_74": [ + 1910.37, + 451.82 + ], + "$sat_rev_75": [ + 1863.74, + 498.06 + ], + "$sat_rev_76": [ + 1812.65, + 543.26 + ], + "$sat_rev_77": [ + 1757.1, + 587.01 + ], + "$sat_rev_78": [ + 1697.37, + 629.45 + ], + "$sat_rev_79": [ + 1633.57, + 670.33 + ], + "$sat_rev_80": [ + 1565.84, + 709.63 + ], + "$sat_rev_81": [ + 1494.32, + 747.22 + ], + "$sat_rev_82": [ + 1419.25, + 782.86 + ], + "$sat_rev_83": [ + 1340.65, + 816.78 + ], + "$sat_rev_84": [ + 1258.91, + 848.75 + ], + "$sat_rev_85": [ + 1174.02, + 878.62 + ], + "$sat_rev_86": [ + 1086.38, + 906.26 + ], + "$sat_rev_87": [ + 996.25, + 931.93 + ], + "$sat_rev_88": [ + 903.51, + 955.25 + ], + "$sat_rev_89": [ + 808.66, + 976.21 + ], + "$sat_rev_90": [ + 711.99, + 994.81 + ], + "$sat_rev_91": [ + 613.47, + 1011.19 + ], + "$sat_rev_92": [ + 513.52, + 1024.94 + ], + "$sat_rev_93": [ + 412.26, + 1036.34 + ], + "$sat_rev_94": [ + 310.08, + 1045.25 + ], + "$sat_rev_95": [ + 207.11, + 1051.54 + ], + "$sat_rev_96": [ + 103.75, + 1055.34 + ], + "$sat_rev_97": [ + 0.0, + 1056.65 + ], + "$sat_rev_98": [ + -103.75, + 1055.34 + ], + "$sat_rev_99": [ + -207.11, + 1051.54 + ], + "$sat_rev_100": [ + -310.08, + 1045.25 + ], + "$sat_rev_101": [ + -412.26, + 1036.34 + ], + "$sat_rev_102": [ + -513.52, + 1024.94 + ], + "$sat_rev_103": [ + -613.47, + 1011.19 + ], + "$sat_rev_104": [ + -711.99, + 994.81 + ], + "$sat_rev_105": [ + -808.66, + 976.21 + ], + "$sat_rev_106": [ + -903.51, + 955.25 + ], + "$sat_rev_107": [ + -996.25, + 931.93 + ], + "$sat_rev_108": [ + -1086.38, + 906.26 + ], + "$sat_rev_109": [ + -1174.02, + 878.62 + ], + "$sat_rev_110": [ + -1258.91, + 848.75 + ], + "$sat_rev_111": [ + -1340.65, + 816.78 + ], + "$sat_rev_112": [ + -1419.25, + 782.86 + ], + "$sat_rev_113": [ + -1494.32, + 747.22 + ], + "$sat_rev_114": [ + -1565.84, + 709.63 + ], + "$sat_rev_115": [ + -1633.57, + 670.33 + ], + "$sat_rev_116": [ + -1697.37, + 629.45 + ], + "$sat_rev_117": [ + -1757.1, + 587.01 + ], + "$sat_rev_118": [ + -1812.65, + 543.26 + ], + "$sat_rev_119": [ + -1863.74, + 498.06 + ], + "$sat_rev_120": [ + -1910.37, + 451.82 + ], + "$sat_rev_121": [ + -1952.42, + 404.4 + ], + "$sat_rev_122": [ + -1989.76, + 355.93 + ], + "$sat_rev_123": [ + -2022.25, + 306.67 + ], + "$sat_rev_124": [ + -2050.02, + 256.76 + ], + "$sat_rev_125": [ + -2072.68, + 206.19 + ], + "$sat_rev_126": [ + -2090.37, + 155.1 + ], + "$sat_rev_127": [ + -2103.07, + 103.62 + ], + "$sat_rev_128": [ + -2110.8, + 51.88 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + } + ] + } + }, + { + "Planet@celestial.zoomed_planet_icon": { + "$control_name": "saturn", + "$texture": "textures/ui/cosmos/celestial_selector/saturn", + "$size": [ + 65, + 26 + ] + } + } + ] + }, + "zoomed_solar_system_uranus": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_uranus", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_uranus" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and #zoom_uranus)", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "moving_orbits_wrapper": { + "type": "panel", + "anims": [ + "@celestial.zoomed_uranus_orbit_step1" + ], + "$orbit_duration": 0.9375, + "$ura_rev_1": [ + -2380.66, + 0.0 + ], + "$ura_rev_2": [ + -2377.78, + -58.43 + ], + "$ura_rev_3": [ + -2369.13, + -116.72 + ], + "$ura_rev_4": [ + -2354.86, + -174.62 + ], + "$ura_rev_5": [ + -2334.94, + -232.26 + ], + "$ura_rev_6": [ + -2309.27, + -289.25 + ], + "$ura_rev_7": [ + -2278.09, + -345.58 + ], + "$ura_rev_8": [ + -2241.41, + -400.99 + ], + "$ura_rev_9": [ + -2199.36, + -455.49 + ], + "$ura_rev_10": [ + -2152.07, + -508.94 + ], + "$ura_rev_11": [ + -2099.54, + -561.07 + ], + "$ura_rev_12": [ + -2041.9, + -611.9 + ], + "$ura_rev_13": [ + -1979.41, + -661.29 + ], + "$ura_rev_14": [ + -1912.21, + -709.1 + ], + "$ura_rev_15": [ + -1840.29, + -755.08 + ], + "$ura_rev_16": [ + -1763.91, + -799.36 + ], + "$ura_rev_17": [ + -1683.35, + -841.67 + ], + "$ura_rev_18": [ + -1598.72, + -882.02 + ], + "$ura_rev_19": [ + -1510.3, + -920.14 + ], + "$ura_rev_20": [ + -1418.21, + -956.04 + ], + "$ura_rev_21": [ + -1322.58, + -989.7 + ], + "$ura_rev_22": [ + -1223.93, + -1021.01 + ], + "$ura_rev_23": [ + -1122.28, + -1049.7 + ], + "$ura_rev_24": [ + -1017.87, + -1076.03 + ], + "$ura_rev_25": [ + -910.97, + -1099.75 + ], + "$ura_rev_26": [ + -801.98, + -1120.7 + ], + "$ura_rev_27": [ + -691.02, + -1139.05 + ], + "$ura_rev_28": [ + -578.5, + -1154.63 + ], + "$ura_rev_29": [ + -464.4, + -1167.47 + ], + "$ura_rev_30": [ + -349.38, + -1177.43 + ], + "$ura_rev_31": [ + -233.31, + -1184.63 + ], + "$ura_rev_32": [ + -116.85, + -1188.83 + ], + "$ura_rev_33": [ + 0.0, + -1190.27 + ], + "$ura_rev_34": [ + 116.85, + -1188.83 + ], + "$ura_rev_35": [ + 233.31, + -1184.63 + ], + "$ura_rev_36": [ + 349.38, + -1177.43 + ], + "$ura_rev_37": [ + 464.4, + -1167.47 + ], + "$ura_rev_38": [ + 578.5, + -1154.63 + ], + "$ura_rev_39": [ + 691.02, + -1139.05 + ], + "$ura_rev_40": [ + 801.98, + -1120.7 + ], + "$ura_rev_41": [ + 910.97, + -1099.75 + ], + "$ura_rev_42": [ + 1017.87, + -1076.03 + ], + "$ura_rev_43": [ + 1122.28, + -1049.7 + ], + "$ura_rev_44": [ + 1223.93, + -1021.01 + ], + "$ura_rev_45": [ + 1322.58, + -989.7 + ], + "$ura_rev_46": [ + 1418.21, + -956.04 + ], + "$ura_rev_47": [ + 1510.3, + -920.14 + ], + "$ura_rev_48": [ + 1598.72, + -882.02 + ], + "$ura_rev_49": [ + 1683.35, + -841.67 + ], + "$ura_rev_50": [ + 1763.91, + -799.36 + ], + "$ura_rev_51": [ + 1840.29, + -755.08 + ], + "$ura_rev_52": [ + 1912.21, + -709.1 + ], + "$ura_rev_53": [ + 1979.41, + -661.29 + ], + "$ura_rev_54": [ + 2041.9, + -611.9 + ], + "$ura_rev_55": [ + 2099.54, + -561.07 + ], + "$ura_rev_56": [ + 2152.07, + -508.94 + ], + "$ura_rev_57": [ + 2199.36, + -455.49 + ], + "$ura_rev_58": [ + 2241.41, + -400.99 + ], + "$ura_rev_59": [ + 2278.09, + -345.58 + ], + "$ura_rev_60": [ + 2309.27, + -289.25 + ], + "$ura_rev_61": [ + 2334.94, + -232.26 + ], + "$ura_rev_62": [ + 2354.86, + -174.62 + ], + "$ura_rev_63": [ + 2369.13, + -116.72 + ], + "$ura_rev_64": [ + 2377.78, + -58.43 + ], + "$ura_rev_65": [ + 2380.66, + 0.0 + ], + "$ura_rev_66": [ + 2377.78, + 58.43 + ], + "$ura_rev_67": [ + 2369.13, + 116.72 + ], + "$ura_rev_68": [ + 2354.86, + 174.62 + ], + "$ura_rev_69": [ + 2334.94, + 232.26 + ], + "$ura_rev_70": [ + 2309.27, + 289.25 + ], + "$ura_rev_71": [ + 2278.09, + 345.58 + ], + "$ura_rev_72": [ + 2241.41, + 400.99 + ], + "$ura_rev_73": [ + 2199.36, + 455.49 + ], + "$ura_rev_74": [ + 2152.07, + 508.94 + ], + "$ura_rev_75": [ + 2099.54, + 561.07 + ], + "$ura_rev_76": [ + 2041.9, + 611.9 + ], + "$ura_rev_77": [ + 1979.41, + 661.29 + ], + "$ura_rev_78": [ + 1912.21, + 709.1 + ], + "$ura_rev_79": [ + 1840.29, + 755.08 + ], + "$ura_rev_80": [ + 1763.91, + 799.36 + ], + "$ura_rev_81": [ + 1683.35, + 841.67 + ], + "$ura_rev_82": [ + 1598.72, + 882.02 + ], + "$ura_rev_83": [ + 1510.3, + 920.14 + ], + "$ura_rev_84": [ + 1418.21, + 956.04 + ], + "$ura_rev_85": [ + 1322.58, + 989.7 + ], + "$ura_rev_86": [ + 1223.93, + 1021.01 + ], + "$ura_rev_87": [ + 1122.28, + 1049.7 + ], + "$ura_rev_88": [ + 1017.87, + 1076.03 + ], + "$ura_rev_89": [ + 910.97, + 1099.75 + ], + "$ura_rev_90": [ + 801.98, + 1120.7 + ], + "$ura_rev_91": [ + 691.02, + 1139.05 + ], + "$ura_rev_92": [ + 578.5, + 1154.63 + ], + "$ura_rev_93": [ + 464.4, + 1167.47 + ], + "$ura_rev_94": [ + 349.38, + 1177.43 + ], + "$ura_rev_95": [ + 233.31, + 1184.63 + ], + "$ura_rev_96": [ + 116.85, + 1188.83 + ], + "$ura_rev_97": [ + 0.0, + 1190.27 + ], + "$ura_rev_98": [ + -116.85, + 1188.83 + ], + "$ura_rev_99": [ + -233.31, + 1184.63 + ], + "$ura_rev_100": [ + -349.38, + 1177.43 + ], + "$ura_rev_101": [ + -464.4, + 1167.47 + ], + "$ura_rev_102": [ + -578.5, + 1154.63 + ], + "$ura_rev_103": [ + -691.02, + 1139.05 + ], + "$ura_rev_104": [ + -801.98, + 1120.7 + ], + "$ura_rev_105": [ + -910.97, + 1099.75 + ], + "$ura_rev_106": [ + -1017.87, + 1076.03 + ], + "$ura_rev_107": [ + -1122.28, + 1049.7 + ], + "$ura_rev_108": [ + -1223.93, + 1021.01 + ], + "$ura_rev_109": [ + -1322.58, + 989.7 + ], + "$ura_rev_110": [ + -1418.21, + 956.04 + ], + "$ura_rev_111": [ + -1510.3, + 920.14 + ], + "$ura_rev_112": [ + -1598.72, + 882.02 + ], + "$ura_rev_113": [ + -1683.35, + 841.67 + ], + "$ura_rev_114": [ + -1763.91, + 799.36 + ], + "$ura_rev_115": [ + -1840.29, + 755.08 + ], + "$ura_rev_116": [ + -1912.21, + 709.1 + ], + "$ura_rev_117": [ + -1979.41, + 661.29 + ], + "$ura_rev_118": [ + -2041.9, + 611.9 + ], + "$ura_rev_119": [ + -2099.54, + 561.07 + ], + "$ura_rev_120": [ + -2152.07, + 508.94 + ], + "$ura_rev_121": [ + -2199.36, + 455.49 + ], + "$ura_rev_122": [ + -2241.41, + 400.99 + ], + "$ura_rev_123": [ + -2278.09, + 345.58 + ], + "$ura_rev_124": [ + -2309.27, + 289.25 + ], + "$ura_rev_125": [ + -2334.94, + 232.26 + ], + "$ura_rev_126": [ + -2354.86, + 174.62 + ], + "$ura_rev_127": [ + -2369.13, + 116.72 + ], + "$ura_rev_128": [ + -2377.78, + 58.43 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + } + ] + } + }, + { + "Planet@celestial.zoomed_planet_icon": { + "$control_name": "uranus", + "$texture": "textures/ui/cosmos/celestial_selector/uranus", + "$size": [ + 26, + 65 + ] + } + } + ] + }, + "zoomed_solar_system_neptune": { + "type": "panel", + "size": [ + 401, + 202 + ], + "layer": 2, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_neptune", + "source_property_name": "#toggle_state", + "target_property_name": "#zoom_neptune" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and #zoom_neptune)", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "moving_orbits_wrapper": { + "type": "panel", + "anims": [ + "@celestial.zoomed_neptune_orbit_step1" + ], + "$orbit_duration": 1.09375, + "$nep_rev_1": [ + -2624.72, + 0.0 + ], + "$nep_rev_2": [ + -2621.57, + -64.45 + ], + "$nep_rev_3": [ + -2612.01, + -128.64 + ], + "$nep_rev_4": [ + -2596.29, + -192.57 + ], + "$nep_rev_5": [ + -2574.28, + -255.97 + ], + "$nep_rev_6": [ + -2546.12, + -318.85 + ], + "$nep_rev_7": [ + -2511.66, + -380.95 + ], + "$nep_rev_8": [ + -2471.32, + -442.13 + ], + "$nep_rev_9": [ + -2424.94, + -502.25 + ], + "$nep_rev_10": [ + -2372.67, + -561.07 + ], + "$nep_rev_11": [ + -2314.77, + -618.58 + ], + "$nep_rev_12": [ + -2251.23, + -674.65 + ], + "$nep_rev_13": [ + -2182.33, + -729.15 + ], + "$nep_rev_14": [ + -2108.18, + -781.81 + ], + "$nep_rev_15": [ + -2028.93, + -832.5 + ], + "$nep_rev_16": [ + -1944.83, + -881.37 + ], + "$nep_rev_17": [ + -1856.01, + -928.0 + ], + "$nep_rev_18": [ + -1762.61, + -972.41 + ], + "$nep_rev_19": [ + -1665.14, + -1014.46 + ], + "$nep_rev_20": [ + -1563.48, + -1054.16 + ], + "$nep_rev_21": [ + -1458.16, + -1091.23 + ], + "$nep_rev_22": [ + -1349.43, + -1125.68 + ], + "$nep_rev_23": [ + -1237.3, + -1157.38 + ], + "$nep_rev_24": [ + -1122.15, + -1186.34 + ], + "$nep_rev_25": [ + -1004.38, + -1212.4 + ], + "$nep_rev_26": [ + -884.25, + -1235.59 + ], + "$nep_rev_27": [ + -761.9, + -1255.9 + ], + "$nep_rev_28": [ + -637.71, + -1273.06 + ], + "$nep_rev_29": [ + -512.08, + -1287.08 + ], + "$nep_rev_30": [ + -385.14, + -1298.21 + ], + "$nep_rev_31": [ + -257.28, + -1306.07 + ], + "$nep_rev_32": [ + -128.77, + -1310.79 + ], + "$nep_rev_33": [ + 0.0, + -1312.36 + ], + "$nep_rev_34": [ + 128.77, + -1310.79 + ], + "$nep_rev_35": [ + 257.28, + -1306.07 + ], + "$nep_rev_36": [ + 385.14, + -1298.21 + ], + "$nep_rev_37": [ + 512.08, + -1287.08 + ], + "$nep_rev_38": [ + 637.71, + -1273.06 + ], + "$nep_rev_39": [ + 761.9, + -1255.9 + ], + "$nep_rev_40": [ + 884.25, + -1235.59 + ], + "$nep_rev_41": [ + 1004.38, + -1212.4 + ], + "$nep_rev_42": [ + 1122.15, + -1186.34 + ], + "$nep_rev_43": [ + 1237.3, + -1157.38 + ], + "$nep_rev_44": [ + 1349.43, + -1125.68 + ], + "$nep_rev_45": [ + 1458.16, + -1091.23 + ], + "$nep_rev_46": [ + 1563.48, + -1054.16 + ], + "$nep_rev_47": [ + 1665.14, + -1014.46 + ], + "$nep_rev_48": [ + 1762.61, + -972.41 + ], + "$nep_rev_49": [ + 1856.01, + -928.0 + ], + "$nep_rev_50": [ + 1944.83, + -881.37 + ], + "$nep_rev_51": [ + 2028.93, + -832.5 + ], + "$nep_rev_52": [ + 2108.18, + -781.81 + ], + "$nep_rev_53": [ + 2182.33, + -729.15 + ], + "$nep_rev_54": [ + 2251.23, + -674.65 + ], + "$nep_rev_55": [ + 2314.77, + -618.58 + ], + "$nep_rev_56": [ + 2372.67, + -561.07 + ], + "$nep_rev_57": [ + 2424.94, + -502.25 + ], + "$nep_rev_58": [ + 2471.32, + -442.13 + ], + "$nep_rev_59": [ + 2511.66, + -380.95 + ], + "$nep_rev_60": [ + 2546.12, + -318.85 + ], + "$nep_rev_61": [ + 2574.28, + -255.97 + ], + "$nep_rev_62": [ + 2596.29, + -192.57 + ], + "$nep_rev_63": [ + 2612.01, + -128.64 + ], + "$nep_rev_64": [ + 2621.57, + -64.45 + ], + "$nep_rev_65": [ + 2624.72, + 0.0 + ], + "$nep_rev_66": [ + 2621.57, + 64.45 + ], + "$nep_rev_67": [ + 2612.01, + 128.64 + ], + "$nep_rev_68": [ + 2596.29, + 192.57 + ], + "$nep_rev_69": [ + 2574.28, + 255.97 + ], + "$nep_rev_70": [ + 2546.12, + 318.85 + ], + "$nep_rev_71": [ + 2511.66, + 380.95 + ], + "$nep_rev_72": [ + 2471.32, + 442.13 + ], + "$nep_rev_73": [ + 2424.94, + 502.25 + ], + "$nep_rev_74": [ + 2372.67, + 561.07 + ], + "$nep_rev_75": [ + 2314.77, + 618.58 + ], + "$nep_rev_76": [ + 2251.23, + 674.65 + ], + "$nep_rev_77": [ + 2182.33, + 729.15 + ], + "$nep_rev_78": [ + 2108.18, + 781.81 + ], + "$nep_rev_79": [ + 2028.93, + 832.5 + ], + "$nep_rev_80": [ + 1944.83, + 881.37 + ], + "$nep_rev_81": [ + 1856.01, + 928.0 + ], + "$nep_rev_82": [ + 1762.61, + 972.41 + ], + "$nep_rev_83": [ + 1665.14, + 1014.46 + ], + "$nep_rev_84": [ + 1563.48, + 1054.16 + ], + "$nep_rev_85": [ + 1458.16, + 1091.23 + ], + "$nep_rev_86": [ + 1349.43, + 1125.68 + ], + "$nep_rev_87": [ + 1237.3, + 1157.38 + ], + "$nep_rev_88": [ + 1122.15, + 1186.34 + ], + "$nep_rev_89": [ + 1004.38, + 1212.4 + ], + "$nep_rev_90": [ + 884.25, + 1235.59 + ], + "$nep_rev_91": [ + 761.9, + 1255.9 + ], + "$nep_rev_92": [ + 637.71, + 1273.06 + ], + "$nep_rev_93": [ + 512.08, + 1287.08 + ], + "$nep_rev_94": [ + 385.14, + 1298.21 + ], + "$nep_rev_95": [ + 257.28, + 1306.07 + ], + "$nep_rev_96": [ + 128.77, + 1310.79 + ], + "$nep_rev_97": [ + 0.0, + 1312.36 + ], + "$nep_rev_98": [ + -128.77, + 1310.79 + ], + "$nep_rev_99": [ + -257.28, + 1306.07 + ], + "$nep_rev_100": [ + -385.14, + 1298.21 + ], + "$nep_rev_101": [ + -512.08, + 1287.08 + ], + "$nep_rev_102": [ + -637.71, + 1273.06 + ], + "$nep_rev_103": [ + -761.9, + 1255.9 + ], + "$nep_rev_104": [ + -884.25, + 1235.59 + ], + "$nep_rev_105": [ + -1004.38, + 1212.4 + ], + "$nep_rev_106": [ + -1122.15, + 1186.34 + ], + "$nep_rev_107": [ + -1237.3, + 1157.38 + ], + "$nep_rev_108": [ + -1349.43, + 1125.68 + ], + "$nep_rev_109": [ + -1458.16, + 1091.23 + ], + "$nep_rev_110": [ + -1563.48, + 1054.16 + ], + "$nep_rev_111": [ + -1665.14, + 1014.46 + ], + "$nep_rev_112": [ + -1762.61, + 972.41 + ], + "$nep_rev_113": [ + -1856.01, + 928.0 + ], + "$nep_rev_114": [ + -1944.83, + 881.37 + ], + "$nep_rev_115": [ + -2028.93, + 832.5 + ], + "$nep_rev_116": [ + -2108.18, + 781.81 + ], + "$nep_rev_117": [ + -2182.33, + 729.15 + ], + "$nep_rev_118": [ + -2251.23, + 674.65 + ], + "$nep_rev_119": [ + -2314.77, + 618.58 + ], + "$nep_rev_120": [ + -2372.67, + 561.07 + ], + "$nep_rev_121": [ + -2424.94, + 502.25 + ], + "$nep_rev_122": [ + -2471.32, + 442.13 + ], + "$nep_rev_123": [ + -2511.66, + 380.95 + ], + "$nep_rev_124": [ + -2546.12, + 318.85 + ], + "$nep_rev_125": [ + -2574.28, + 255.97 + ], + "$nep_rev_126": [ + -2596.29, + 192.57 + ], + "$nep_rev_127": [ + -2612.01, + 128.64 + ], + "$nep_rev_128": [ + -2621.57, + 64.45 + ], + "controls": [ + { + "orbits": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits_thin", + "size": [ + 5253, + 2646 + ], + "alpha": 0.45 + } + } + ] + } + }, + { + "Planet@celestial.zoomed_planet_icon": { + "$control_name": "neptune", + "$texture": "textures/ui/cosmos/celestial_selector/neptune", + "$size": [ + 39, + 39 + ] + } + } + ] + }, + "zoomed_mercury_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_1", + "to": "$mer_rev_2", + "next": "@celestial.zoomed_mercury_orbit_step2" + }, + "zoomed_mercury_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_2", + "to": "$mer_rev_3", + "next": "@celestial.zoomed_mercury_orbit_step3" + }, + "zoomed_mercury_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_3", + "to": "$mer_rev_4", + "next": "@celestial.zoomed_mercury_orbit_step4" + }, + "zoomed_mercury_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_4", + "to": "$mer_rev_5", + "next": "@celestial.zoomed_mercury_orbit_step5" + }, + "zoomed_mercury_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_5", + "to": "$mer_rev_6", + "next": "@celestial.zoomed_mercury_orbit_step6" + }, + "zoomed_mercury_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_6", + "to": "$mer_rev_7", + "next": "@celestial.zoomed_mercury_orbit_step7" + }, + "zoomed_mercury_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_7", + "to": "$mer_rev_8", + "next": "@celestial.zoomed_mercury_orbit_step8" + }, + "zoomed_mercury_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_8", + "to": "$mer_rev_9", + "next": "@celestial.zoomed_mercury_orbit_step9" + }, + "zoomed_mercury_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_9", + "to": "$mer_rev_10", + "next": "@celestial.zoomed_mercury_orbit_step10" + }, + "zoomed_mercury_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_10", + "to": "$mer_rev_11", + "next": "@celestial.zoomed_mercury_orbit_step11" + }, + "zoomed_mercury_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_11", + "to": "$mer_rev_12", + "next": "@celestial.zoomed_mercury_orbit_step12" + }, + "zoomed_mercury_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_12", + "to": "$mer_rev_13", + "next": "@celestial.zoomed_mercury_orbit_step13" + }, + "zoomed_mercury_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_13", + "to": "$mer_rev_14", + "next": "@celestial.zoomed_mercury_orbit_step14" + }, + "zoomed_mercury_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_14", + "to": "$mer_rev_15", + "next": "@celestial.zoomed_mercury_orbit_step15" + }, + "zoomed_mercury_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_15", + "to": "$mer_rev_16", + "next": "@celestial.zoomed_mercury_orbit_step16" + }, + "zoomed_mercury_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_16", + "to": "$mer_rev_17", + "next": "@celestial.zoomed_mercury_orbit_step17" + }, + "zoomed_mercury_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_17", + "to": "$mer_rev_18", + "next": "@celestial.zoomed_mercury_orbit_step18" + }, + "zoomed_mercury_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_18", + "to": "$mer_rev_19", + "next": "@celestial.zoomed_mercury_orbit_step19" + }, + "zoomed_mercury_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_19", + "to": "$mer_rev_20", + "next": "@celestial.zoomed_mercury_orbit_step20" + }, + "zoomed_mercury_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_20", + "to": "$mer_rev_21", + "next": "@celestial.zoomed_mercury_orbit_step21" + }, + "zoomed_mercury_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_21", + "to": "$mer_rev_22", + "next": "@celestial.zoomed_mercury_orbit_step22" + }, + "zoomed_mercury_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_22", + "to": "$mer_rev_23", + "next": "@celestial.zoomed_mercury_orbit_step23" + }, + "zoomed_mercury_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_23", + "to": "$mer_rev_24", + "next": "@celestial.zoomed_mercury_orbit_step24" + }, + "zoomed_mercury_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_24", + "to": "$mer_rev_25", + "next": "@celestial.zoomed_mercury_orbit_step25" + }, + "zoomed_mercury_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_25", + "to": "$mer_rev_26", + "next": "@celestial.zoomed_mercury_orbit_step26" + }, + "zoomed_mercury_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_26", + "to": "$mer_rev_27", + "next": "@celestial.zoomed_mercury_orbit_step27" + }, + "zoomed_mercury_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_27", + "to": "$mer_rev_28", + "next": "@celestial.zoomed_mercury_orbit_step28" + }, + "zoomed_mercury_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_28", + "to": "$mer_rev_29", + "next": "@celestial.zoomed_mercury_orbit_step29" + }, + "zoomed_mercury_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_29", + "to": "$mer_rev_30", + "next": "@celestial.zoomed_mercury_orbit_step30" + }, + "zoomed_mercury_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_30", + "to": "$mer_rev_31", + "next": "@celestial.zoomed_mercury_orbit_step31" + }, + "zoomed_mercury_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_31", + "to": "$mer_rev_32", + "next": "@celestial.zoomed_mercury_orbit_step32" + }, + "zoomed_mercury_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_32", + "to": "$mer_rev_33", + "next": "@celestial.zoomed_mercury_orbit_step33" + }, + "zoomed_mercury_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_33", + "to": "$mer_rev_34", + "next": "@celestial.zoomed_mercury_orbit_step34" + }, + "zoomed_mercury_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_34", + "to": "$mer_rev_35", + "next": "@celestial.zoomed_mercury_orbit_step35" + }, + "zoomed_mercury_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_35", + "to": "$mer_rev_36", + "next": "@celestial.zoomed_mercury_orbit_step36" + }, + "zoomed_mercury_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_36", + "to": "$mer_rev_37", + "next": "@celestial.zoomed_mercury_orbit_step37" + }, + "zoomed_mercury_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_37", + "to": "$mer_rev_38", + "next": "@celestial.zoomed_mercury_orbit_step38" + }, + "zoomed_mercury_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_38", + "to": "$mer_rev_39", + "next": "@celestial.zoomed_mercury_orbit_step39" + }, + "zoomed_mercury_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_39", + "to": "$mer_rev_40", + "next": "@celestial.zoomed_mercury_orbit_step40" + }, + "zoomed_mercury_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_40", + "to": "$mer_rev_41", + "next": "@celestial.zoomed_mercury_orbit_step41" + }, + "zoomed_mercury_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_41", + "to": "$mer_rev_42", + "next": "@celestial.zoomed_mercury_orbit_step42" + }, + "zoomed_mercury_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_42", + "to": "$mer_rev_43", + "next": "@celestial.zoomed_mercury_orbit_step43" + }, + "zoomed_mercury_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_43", + "to": "$mer_rev_44", + "next": "@celestial.zoomed_mercury_orbit_step44" + }, + "zoomed_mercury_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_44", + "to": "$mer_rev_45", + "next": "@celestial.zoomed_mercury_orbit_step45" + }, + "zoomed_mercury_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_45", + "to": "$mer_rev_46", + "next": "@celestial.zoomed_mercury_orbit_step46" + }, + "zoomed_mercury_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_46", + "to": "$mer_rev_47", + "next": "@celestial.zoomed_mercury_orbit_step47" + }, + "zoomed_mercury_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_47", + "to": "$mer_rev_48", + "next": "@celestial.zoomed_mercury_orbit_step48" + }, + "zoomed_mercury_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_48", + "to": "$mer_rev_49", + "next": "@celestial.zoomed_mercury_orbit_step49" + }, + "zoomed_mercury_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_49", + "to": "$mer_rev_50", + "next": "@celestial.zoomed_mercury_orbit_step50" + }, + "zoomed_mercury_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_50", + "to": "$mer_rev_51", + "next": "@celestial.zoomed_mercury_orbit_step51" + }, + "zoomed_mercury_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_51", + "to": "$mer_rev_52", + "next": "@celestial.zoomed_mercury_orbit_step52" + }, + "zoomed_mercury_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_52", + "to": "$mer_rev_53", + "next": "@celestial.zoomed_mercury_orbit_step53" + }, + "zoomed_mercury_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_53", + "to": "$mer_rev_54", + "next": "@celestial.zoomed_mercury_orbit_step54" + }, + "zoomed_mercury_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_54", + "to": "$mer_rev_55", + "next": "@celestial.zoomed_mercury_orbit_step55" + }, + "zoomed_mercury_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_55", + "to": "$mer_rev_56", + "next": "@celestial.zoomed_mercury_orbit_step56" + }, + "zoomed_mercury_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_56", + "to": "$mer_rev_57", + "next": "@celestial.zoomed_mercury_orbit_step57" + }, + "zoomed_mercury_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_57", + "to": "$mer_rev_58", + "next": "@celestial.zoomed_mercury_orbit_step58" + }, + "zoomed_mercury_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_58", + "to": "$mer_rev_59", + "next": "@celestial.zoomed_mercury_orbit_step59" + }, + "zoomed_mercury_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_59", + "to": "$mer_rev_60", + "next": "@celestial.zoomed_mercury_orbit_step60" + }, + "zoomed_mercury_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_60", + "to": "$mer_rev_61", + "next": "@celestial.zoomed_mercury_orbit_step61" + }, + "zoomed_mercury_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_61", + "to": "$mer_rev_62", + "next": "@celestial.zoomed_mercury_orbit_step62" + }, + "zoomed_mercury_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_62", + "to": "$mer_rev_63", + "next": "@celestial.zoomed_mercury_orbit_step63" + }, + "zoomed_mercury_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_63", + "to": "$mer_rev_64", + "next": "@celestial.zoomed_mercury_orbit_step64" + }, + "zoomed_mercury_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_64", + "to": "$mer_rev_65", + "next": "@celestial.zoomed_mercury_orbit_step65" + }, + "zoomed_mercury_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_65", + "to": "$mer_rev_66", + "next": "@celestial.zoomed_mercury_orbit_step66" + }, + "zoomed_mercury_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_66", + "to": "$mer_rev_67", + "next": "@celestial.zoomed_mercury_orbit_step67" + }, + "zoomed_mercury_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_67", + "to": "$mer_rev_68", + "next": "@celestial.zoomed_mercury_orbit_step68" + }, + "zoomed_mercury_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_68", + "to": "$mer_rev_69", + "next": "@celestial.zoomed_mercury_orbit_step69" + }, + "zoomed_mercury_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_69", + "to": "$mer_rev_70", + "next": "@celestial.zoomed_mercury_orbit_step70" + }, + "zoomed_mercury_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_70", + "to": "$mer_rev_71", + "next": "@celestial.zoomed_mercury_orbit_step71" + }, + "zoomed_mercury_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_71", + "to": "$mer_rev_72", + "next": "@celestial.zoomed_mercury_orbit_step72" + }, + "zoomed_mercury_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_72", + "to": "$mer_rev_73", + "next": "@celestial.zoomed_mercury_orbit_step73" + }, + "zoomed_mercury_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_73", + "to": "$mer_rev_74", + "next": "@celestial.zoomed_mercury_orbit_step74" + }, + "zoomed_mercury_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_74", + "to": "$mer_rev_75", + "next": "@celestial.zoomed_mercury_orbit_step75" + }, + "zoomed_mercury_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_75", + "to": "$mer_rev_76", + "next": "@celestial.zoomed_mercury_orbit_step76" + }, + "zoomed_mercury_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_76", + "to": "$mer_rev_77", + "next": "@celestial.zoomed_mercury_orbit_step77" + }, + "zoomed_mercury_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_77", + "to": "$mer_rev_78", + "next": "@celestial.zoomed_mercury_orbit_step78" + }, + "zoomed_mercury_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_78", + "to": "$mer_rev_79", + "next": "@celestial.zoomed_mercury_orbit_step79" + }, + "zoomed_mercury_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_79", + "to": "$mer_rev_80", + "next": "@celestial.zoomed_mercury_orbit_step80" + }, + "zoomed_mercury_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_80", + "to": "$mer_rev_81", + "next": "@celestial.zoomed_mercury_orbit_step81" + }, + "zoomed_mercury_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_81", + "to": "$mer_rev_82", + "next": "@celestial.zoomed_mercury_orbit_step82" + }, + "zoomed_mercury_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_82", + "to": "$mer_rev_83", + "next": "@celestial.zoomed_mercury_orbit_step83" + }, + "zoomed_mercury_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_83", + "to": "$mer_rev_84", + "next": "@celestial.zoomed_mercury_orbit_step84" + }, + "zoomed_mercury_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_84", + "to": "$mer_rev_85", + "next": "@celestial.zoomed_mercury_orbit_step85" + }, + "zoomed_mercury_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_85", + "to": "$mer_rev_86", + "next": "@celestial.zoomed_mercury_orbit_step86" + }, + "zoomed_mercury_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_86", + "to": "$mer_rev_87", + "next": "@celestial.zoomed_mercury_orbit_step87" + }, + "zoomed_mercury_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_87", + "to": "$mer_rev_88", + "next": "@celestial.zoomed_mercury_orbit_step88" + }, + "zoomed_mercury_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_88", + "to": "$mer_rev_89", + "next": "@celestial.zoomed_mercury_orbit_step89" + }, + "zoomed_mercury_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_89", + "to": "$mer_rev_90", + "next": "@celestial.zoomed_mercury_orbit_step90" + }, + "zoomed_mercury_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_90", + "to": "$mer_rev_91", + "next": "@celestial.zoomed_mercury_orbit_step91" + }, + "zoomed_mercury_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_91", + "to": "$mer_rev_92", + "next": "@celestial.zoomed_mercury_orbit_step92" + }, + "zoomed_mercury_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_92", + "to": "$mer_rev_93", + "next": "@celestial.zoomed_mercury_orbit_step93" + }, + "zoomed_mercury_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_93", + "to": "$mer_rev_94", + "next": "@celestial.zoomed_mercury_orbit_step94" + }, + "zoomed_mercury_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_94", + "to": "$mer_rev_95", + "next": "@celestial.zoomed_mercury_orbit_step95" + }, + "zoomed_mercury_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_95", + "to": "$mer_rev_96", + "next": "@celestial.zoomed_mercury_orbit_step96" + }, + "zoomed_mercury_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_96", + "to": "$mer_rev_97", + "next": "@celestial.zoomed_mercury_orbit_step97" + }, + "zoomed_mercury_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_97", + "to": "$mer_rev_98", + "next": "@celestial.zoomed_mercury_orbit_step98" + }, + "zoomed_mercury_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_98", + "to": "$mer_rev_99", + "next": "@celestial.zoomed_mercury_orbit_step99" + }, + "zoomed_mercury_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_99", + "to": "$mer_rev_100", + "next": "@celestial.zoomed_mercury_orbit_step100" + }, + "zoomed_mercury_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_100", + "to": "$mer_rev_101", + "next": "@celestial.zoomed_mercury_orbit_step101" + }, + "zoomed_mercury_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_101", + "to": "$mer_rev_102", + "next": "@celestial.zoomed_mercury_orbit_step102" + }, + "zoomed_mercury_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_102", + "to": "$mer_rev_103", + "next": "@celestial.zoomed_mercury_orbit_step103" + }, + "zoomed_mercury_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_103", + "to": "$mer_rev_104", + "next": "@celestial.zoomed_mercury_orbit_step104" + }, + "zoomed_mercury_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_104", + "to": "$mer_rev_105", + "next": "@celestial.zoomed_mercury_orbit_step105" + }, + "zoomed_mercury_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_105", + "to": "$mer_rev_106", + "next": "@celestial.zoomed_mercury_orbit_step106" + }, + "zoomed_mercury_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_106", + "to": "$mer_rev_107", + "next": "@celestial.zoomed_mercury_orbit_step107" + }, + "zoomed_mercury_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_107", + "to": "$mer_rev_108", + "next": "@celestial.zoomed_mercury_orbit_step108" + }, + "zoomed_mercury_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_108", + "to": "$mer_rev_109", + "next": "@celestial.zoomed_mercury_orbit_step109" + }, + "zoomed_mercury_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_109", + "to": "$mer_rev_110", + "next": "@celestial.zoomed_mercury_orbit_step110" + }, + "zoomed_mercury_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_110", + "to": "$mer_rev_111", + "next": "@celestial.zoomed_mercury_orbit_step111" + }, + "zoomed_mercury_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_111", + "to": "$mer_rev_112", + "next": "@celestial.zoomed_mercury_orbit_step112" + }, + "zoomed_mercury_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_112", + "to": "$mer_rev_113", + "next": "@celestial.zoomed_mercury_orbit_step113" + }, + "zoomed_mercury_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_113", + "to": "$mer_rev_114", + "next": "@celestial.zoomed_mercury_orbit_step114" + }, + "zoomed_mercury_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_114", + "to": "$mer_rev_115", + "next": "@celestial.zoomed_mercury_orbit_step115" + }, + "zoomed_mercury_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_115", + "to": "$mer_rev_116", + "next": "@celestial.zoomed_mercury_orbit_step116" + }, + "zoomed_mercury_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_116", + "to": "$mer_rev_117", + "next": "@celestial.zoomed_mercury_orbit_step117" + }, + "zoomed_mercury_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_117", + "to": "$mer_rev_118", + "next": "@celestial.zoomed_mercury_orbit_step118" + }, + "zoomed_mercury_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_118", + "to": "$mer_rev_119", + "next": "@celestial.zoomed_mercury_orbit_step119" + }, + "zoomed_mercury_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_119", + "to": "$mer_rev_120", + "next": "@celestial.zoomed_mercury_orbit_step120" + }, + "zoomed_mercury_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_120", + "to": "$mer_rev_121", + "next": "@celestial.zoomed_mercury_orbit_step121" + }, + "zoomed_mercury_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_121", + "to": "$mer_rev_122", + "next": "@celestial.zoomed_mercury_orbit_step122" + }, + "zoomed_mercury_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_122", + "to": "$mer_rev_123", + "next": "@celestial.zoomed_mercury_orbit_step123" + }, + "zoomed_mercury_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_123", + "to": "$mer_rev_124", + "next": "@celestial.zoomed_mercury_orbit_step124" + }, + "zoomed_mercury_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_124", + "to": "$mer_rev_125", + "next": "@celestial.zoomed_mercury_orbit_step125" + }, + "zoomed_mercury_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_125", + "to": "$mer_rev_126", + "next": "@celestial.zoomed_mercury_orbit_step126" + }, + "zoomed_mercury_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_126", + "to": "$mer_rev_127", + "next": "@celestial.zoomed_mercury_orbit_step127" + }, + "zoomed_mercury_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_127", + "to": "$mer_rev_128", + "next": "@celestial.zoomed_mercury_orbit_step128" + }, + "zoomed_mercury_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer_rev_128", + "to": "$mer_rev_1", + "next": "@celestial.zoomed_mercury_orbit_step1" + }, + "zoomed_venus_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_1", + "to": "$ven_rev_2", + "next": "@celestial.zoomed_venus_orbit_step2" + }, + "zoomed_venus_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_2", + "to": "$ven_rev_3", + "next": "@celestial.zoomed_venus_orbit_step3" + }, + "zoomed_venus_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_3", + "to": "$ven_rev_4", + "next": "@celestial.zoomed_venus_orbit_step4" + }, + "zoomed_venus_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_4", + "to": "$ven_rev_5", + "next": "@celestial.zoomed_venus_orbit_step5" + }, + "zoomed_venus_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_5", + "to": "$ven_rev_6", + "next": "@celestial.zoomed_venus_orbit_step6" + }, + "zoomed_venus_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_6", + "to": "$ven_rev_7", + "next": "@celestial.zoomed_venus_orbit_step7" + }, + "zoomed_venus_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_7", + "to": "$ven_rev_8", + "next": "@celestial.zoomed_venus_orbit_step8" + }, + "zoomed_venus_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_8", + "to": "$ven_rev_9", + "next": "@celestial.zoomed_venus_orbit_step9" + }, + "zoomed_venus_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_9", + "to": "$ven_rev_10", + "next": "@celestial.zoomed_venus_orbit_step10" + }, + "zoomed_venus_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_10", + "to": "$ven_rev_11", + "next": "@celestial.zoomed_venus_orbit_step11" + }, + "zoomed_venus_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_11", + "to": "$ven_rev_12", + "next": "@celestial.zoomed_venus_orbit_step12" + }, + "zoomed_venus_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_12", + "to": "$ven_rev_13", + "next": "@celestial.zoomed_venus_orbit_step13" + }, + "zoomed_venus_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_13", + "to": "$ven_rev_14", + "next": "@celestial.zoomed_venus_orbit_step14" + }, + "zoomed_venus_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_14", + "to": "$ven_rev_15", + "next": "@celestial.zoomed_venus_orbit_step15" + }, + "zoomed_venus_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_15", + "to": "$ven_rev_16", + "next": "@celestial.zoomed_venus_orbit_step16" + }, + "zoomed_venus_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_16", + "to": "$ven_rev_17", + "next": "@celestial.zoomed_venus_orbit_step17" + }, + "zoomed_venus_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_17", + "to": "$ven_rev_18", + "next": "@celestial.zoomed_venus_orbit_step18" + }, + "zoomed_venus_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_18", + "to": "$ven_rev_19", + "next": "@celestial.zoomed_venus_orbit_step19" + }, + "zoomed_venus_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_19", + "to": "$ven_rev_20", + "next": "@celestial.zoomed_venus_orbit_step20" + }, + "zoomed_venus_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_20", + "to": "$ven_rev_21", + "next": "@celestial.zoomed_venus_orbit_step21" + }, + "zoomed_venus_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_21", + "to": "$ven_rev_22", + "next": "@celestial.zoomed_venus_orbit_step22" + }, + "zoomed_venus_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_22", + "to": "$ven_rev_23", + "next": "@celestial.zoomed_venus_orbit_step23" + }, + "zoomed_venus_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_23", + "to": "$ven_rev_24", + "next": "@celestial.zoomed_venus_orbit_step24" + }, + "zoomed_venus_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_24", + "to": "$ven_rev_25", + "next": "@celestial.zoomed_venus_orbit_step25" + }, + "zoomed_venus_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_25", + "to": "$ven_rev_26", + "next": "@celestial.zoomed_venus_orbit_step26" + }, + "zoomed_venus_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_26", + "to": "$ven_rev_27", + "next": "@celestial.zoomed_venus_orbit_step27" + }, + "zoomed_venus_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_27", + "to": "$ven_rev_28", + "next": "@celestial.zoomed_venus_orbit_step28" + }, + "zoomed_venus_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_28", + "to": "$ven_rev_29", + "next": "@celestial.zoomed_venus_orbit_step29" + }, + "zoomed_venus_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_29", + "to": "$ven_rev_30", + "next": "@celestial.zoomed_venus_orbit_step30" + }, + "zoomed_venus_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_30", + "to": "$ven_rev_31", + "next": "@celestial.zoomed_venus_orbit_step31" + }, + "zoomed_venus_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_31", + "to": "$ven_rev_32", + "next": "@celestial.zoomed_venus_orbit_step32" + }, + "zoomed_venus_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_32", + "to": "$ven_rev_33", + "next": "@celestial.zoomed_venus_orbit_step33" + }, + "zoomed_venus_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_33", + "to": "$ven_rev_34", + "next": "@celestial.zoomed_venus_orbit_step34" + }, + "zoomed_venus_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_34", + "to": "$ven_rev_35", + "next": "@celestial.zoomed_venus_orbit_step35" + }, + "zoomed_venus_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_35", + "to": "$ven_rev_36", + "next": "@celestial.zoomed_venus_orbit_step36" + }, + "zoomed_venus_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_36", + "to": "$ven_rev_37", + "next": "@celestial.zoomed_venus_orbit_step37" + }, + "zoomed_venus_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_37", + "to": "$ven_rev_38", + "next": "@celestial.zoomed_venus_orbit_step38" + }, + "zoomed_venus_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_38", + "to": "$ven_rev_39", + "next": "@celestial.zoomed_venus_orbit_step39" + }, + "zoomed_venus_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_39", + "to": "$ven_rev_40", + "next": "@celestial.zoomed_venus_orbit_step40" + }, + "zoomed_venus_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_40", + "to": "$ven_rev_41", + "next": "@celestial.zoomed_venus_orbit_step41" + }, + "zoomed_venus_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_41", + "to": "$ven_rev_42", + "next": "@celestial.zoomed_venus_orbit_step42" + }, + "zoomed_venus_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_42", + "to": "$ven_rev_43", + "next": "@celestial.zoomed_venus_orbit_step43" + }, + "zoomed_venus_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_43", + "to": "$ven_rev_44", + "next": "@celestial.zoomed_venus_orbit_step44" + }, + "zoomed_venus_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_44", + "to": "$ven_rev_45", + "next": "@celestial.zoomed_venus_orbit_step45" + }, + "zoomed_venus_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_45", + "to": "$ven_rev_46", + "next": "@celestial.zoomed_venus_orbit_step46" + }, + "zoomed_venus_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_46", + "to": "$ven_rev_47", + "next": "@celestial.zoomed_venus_orbit_step47" + }, + "zoomed_venus_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_47", + "to": "$ven_rev_48", + "next": "@celestial.zoomed_venus_orbit_step48" + }, + "zoomed_venus_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_48", + "to": "$ven_rev_49", + "next": "@celestial.zoomed_venus_orbit_step49" + }, + "zoomed_venus_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_49", + "to": "$ven_rev_50", + "next": "@celestial.zoomed_venus_orbit_step50" + }, + "zoomed_venus_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_50", + "to": "$ven_rev_51", + "next": "@celestial.zoomed_venus_orbit_step51" + }, + "zoomed_venus_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_51", + "to": "$ven_rev_52", + "next": "@celestial.zoomed_venus_orbit_step52" + }, + "zoomed_venus_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_52", + "to": "$ven_rev_53", + "next": "@celestial.zoomed_venus_orbit_step53" + }, + "zoomed_venus_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_53", + "to": "$ven_rev_54", + "next": "@celestial.zoomed_venus_orbit_step54" + }, + "zoomed_venus_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_54", + "to": "$ven_rev_55", + "next": "@celestial.zoomed_venus_orbit_step55" + }, + "zoomed_venus_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_55", + "to": "$ven_rev_56", + "next": "@celestial.zoomed_venus_orbit_step56" + }, + "zoomed_venus_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_56", + "to": "$ven_rev_57", + "next": "@celestial.zoomed_venus_orbit_step57" + }, + "zoomed_venus_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_57", + "to": "$ven_rev_58", + "next": "@celestial.zoomed_venus_orbit_step58" + }, + "zoomed_venus_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_58", + "to": "$ven_rev_59", + "next": "@celestial.zoomed_venus_orbit_step59" + }, + "zoomed_venus_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_59", + "to": "$ven_rev_60", + "next": "@celestial.zoomed_venus_orbit_step60" + }, + "zoomed_venus_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_60", + "to": "$ven_rev_61", + "next": "@celestial.zoomed_venus_orbit_step61" + }, + "zoomed_venus_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_61", + "to": "$ven_rev_62", + "next": "@celestial.zoomed_venus_orbit_step62" + }, + "zoomed_venus_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_62", + "to": "$ven_rev_63", + "next": "@celestial.zoomed_venus_orbit_step63" + }, + "zoomed_venus_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_63", + "to": "$ven_rev_64", + "next": "@celestial.zoomed_venus_orbit_step64" + }, + "zoomed_venus_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_64", + "to": "$ven_rev_65", + "next": "@celestial.zoomed_venus_orbit_step65" + }, + "zoomed_venus_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_65", + "to": "$ven_rev_66", + "next": "@celestial.zoomed_venus_orbit_step66" + }, + "zoomed_venus_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_66", + "to": "$ven_rev_67", + "next": "@celestial.zoomed_venus_orbit_step67" + }, + "zoomed_venus_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_67", + "to": "$ven_rev_68", + "next": "@celestial.zoomed_venus_orbit_step68" + }, + "zoomed_venus_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_68", + "to": "$ven_rev_69", + "next": "@celestial.zoomed_venus_orbit_step69" + }, + "zoomed_venus_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_69", + "to": "$ven_rev_70", + "next": "@celestial.zoomed_venus_orbit_step70" + }, + "zoomed_venus_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_70", + "to": "$ven_rev_71", + "next": "@celestial.zoomed_venus_orbit_step71" + }, + "zoomed_venus_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_71", + "to": "$ven_rev_72", + "next": "@celestial.zoomed_venus_orbit_step72" + }, + "zoomed_venus_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_72", + "to": "$ven_rev_73", + "next": "@celestial.zoomed_venus_orbit_step73" + }, + "zoomed_venus_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_73", + "to": "$ven_rev_74", + "next": "@celestial.zoomed_venus_orbit_step74" + }, + "zoomed_venus_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_74", + "to": "$ven_rev_75", + "next": "@celestial.zoomed_venus_orbit_step75" + }, + "zoomed_venus_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_75", + "to": "$ven_rev_76", + "next": "@celestial.zoomed_venus_orbit_step76" + }, + "zoomed_venus_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_76", + "to": "$ven_rev_77", + "next": "@celestial.zoomed_venus_orbit_step77" + }, + "zoomed_venus_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_77", + "to": "$ven_rev_78", + "next": "@celestial.zoomed_venus_orbit_step78" + }, + "zoomed_venus_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_78", + "to": "$ven_rev_79", + "next": "@celestial.zoomed_venus_orbit_step79" + }, + "zoomed_venus_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_79", + "to": "$ven_rev_80", + "next": "@celestial.zoomed_venus_orbit_step80" + }, + "zoomed_venus_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_80", + "to": "$ven_rev_81", + "next": "@celestial.zoomed_venus_orbit_step81" + }, + "zoomed_venus_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_81", + "to": "$ven_rev_82", + "next": "@celestial.zoomed_venus_orbit_step82" + }, + "zoomed_venus_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_82", + "to": "$ven_rev_83", + "next": "@celestial.zoomed_venus_orbit_step83" + }, + "zoomed_venus_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_83", + "to": "$ven_rev_84", + "next": "@celestial.zoomed_venus_orbit_step84" + }, + "zoomed_venus_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_84", + "to": "$ven_rev_85", + "next": "@celestial.zoomed_venus_orbit_step85" + }, + "zoomed_venus_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_85", + "to": "$ven_rev_86", + "next": "@celestial.zoomed_venus_orbit_step86" + }, + "zoomed_venus_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_86", + "to": "$ven_rev_87", + "next": "@celestial.zoomed_venus_orbit_step87" + }, + "zoomed_venus_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_87", + "to": "$ven_rev_88", + "next": "@celestial.zoomed_venus_orbit_step88" + }, + "zoomed_venus_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_88", + "to": "$ven_rev_89", + "next": "@celestial.zoomed_venus_orbit_step89" + }, + "zoomed_venus_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_89", + "to": "$ven_rev_90", + "next": "@celestial.zoomed_venus_orbit_step90" + }, + "zoomed_venus_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_90", + "to": "$ven_rev_91", + "next": "@celestial.zoomed_venus_orbit_step91" + }, + "zoomed_venus_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_91", + "to": "$ven_rev_92", + "next": "@celestial.zoomed_venus_orbit_step92" + }, + "zoomed_venus_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_92", + "to": "$ven_rev_93", + "next": "@celestial.zoomed_venus_orbit_step93" + }, + "zoomed_venus_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_93", + "to": "$ven_rev_94", + "next": "@celestial.zoomed_venus_orbit_step94" + }, + "zoomed_venus_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_94", + "to": "$ven_rev_95", + "next": "@celestial.zoomed_venus_orbit_step95" + }, + "zoomed_venus_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_95", + "to": "$ven_rev_96", + "next": "@celestial.zoomed_venus_orbit_step96" + }, + "zoomed_venus_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_96", + "to": "$ven_rev_97", + "next": "@celestial.zoomed_venus_orbit_step97" + }, + "zoomed_venus_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_97", + "to": "$ven_rev_98", + "next": "@celestial.zoomed_venus_orbit_step98" + }, + "zoomed_venus_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_98", + "to": "$ven_rev_99", + "next": "@celestial.zoomed_venus_orbit_step99" + }, + "zoomed_venus_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_99", + "to": "$ven_rev_100", + "next": "@celestial.zoomed_venus_orbit_step100" + }, + "zoomed_venus_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_100", + "to": "$ven_rev_101", + "next": "@celestial.zoomed_venus_orbit_step101" + }, + "zoomed_venus_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_101", + "to": "$ven_rev_102", + "next": "@celestial.zoomed_venus_orbit_step102" + }, + "zoomed_venus_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_102", + "to": "$ven_rev_103", + "next": "@celestial.zoomed_venus_orbit_step103" + }, + "zoomed_venus_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_103", + "to": "$ven_rev_104", + "next": "@celestial.zoomed_venus_orbit_step104" + }, + "zoomed_venus_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_104", + "to": "$ven_rev_105", + "next": "@celestial.zoomed_venus_orbit_step105" + }, + "zoomed_venus_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_105", + "to": "$ven_rev_106", + "next": "@celestial.zoomed_venus_orbit_step106" + }, + "zoomed_venus_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_106", + "to": "$ven_rev_107", + "next": "@celestial.zoomed_venus_orbit_step107" + }, + "zoomed_venus_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_107", + "to": "$ven_rev_108", + "next": "@celestial.zoomed_venus_orbit_step108" + }, + "zoomed_venus_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_108", + "to": "$ven_rev_109", + "next": "@celestial.zoomed_venus_orbit_step109" + }, + "zoomed_venus_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_109", + "to": "$ven_rev_110", + "next": "@celestial.zoomed_venus_orbit_step110" + }, + "zoomed_venus_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_110", + "to": "$ven_rev_111", + "next": "@celestial.zoomed_venus_orbit_step111" + }, + "zoomed_venus_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_111", + "to": "$ven_rev_112", + "next": "@celestial.zoomed_venus_orbit_step112" + }, + "zoomed_venus_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_112", + "to": "$ven_rev_113", + "next": "@celestial.zoomed_venus_orbit_step113" + }, + "zoomed_venus_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_113", + "to": "$ven_rev_114", + "next": "@celestial.zoomed_venus_orbit_step114" + }, + "zoomed_venus_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_114", + "to": "$ven_rev_115", + "next": "@celestial.zoomed_venus_orbit_step115" + }, + "zoomed_venus_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_115", + "to": "$ven_rev_116", + "next": "@celestial.zoomed_venus_orbit_step116" + }, + "zoomed_venus_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_116", + "to": "$ven_rev_117", + "next": "@celestial.zoomed_venus_orbit_step117" + }, + "zoomed_venus_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_117", + "to": "$ven_rev_118", + "next": "@celestial.zoomed_venus_orbit_step118" + }, + "zoomed_venus_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_118", + "to": "$ven_rev_119", + "next": "@celestial.zoomed_venus_orbit_step119" + }, + "zoomed_venus_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_119", + "to": "$ven_rev_120", + "next": "@celestial.zoomed_venus_orbit_step120" + }, + "zoomed_venus_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_120", + "to": "$ven_rev_121", + "next": "@celestial.zoomed_venus_orbit_step121" + }, + "zoomed_venus_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_121", + "to": "$ven_rev_122", + "next": "@celestial.zoomed_venus_orbit_step122" + }, + "zoomed_venus_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_122", + "to": "$ven_rev_123", + "next": "@celestial.zoomed_venus_orbit_step123" + }, + "zoomed_venus_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_123", + "to": "$ven_rev_124", + "next": "@celestial.zoomed_venus_orbit_step124" + }, + "zoomed_venus_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_124", + "to": "$ven_rev_125", + "next": "@celestial.zoomed_venus_orbit_step125" + }, + "zoomed_venus_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_125", + "to": "$ven_rev_126", + "next": "@celestial.zoomed_venus_orbit_step126" + }, + "zoomed_venus_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_126", + "to": "$ven_rev_127", + "next": "@celestial.zoomed_venus_orbit_step127" + }, + "zoomed_venus_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_127", + "to": "$ven_rev_128", + "next": "@celestial.zoomed_venus_orbit_step128" + }, + "zoomed_venus_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven_rev_128", + "to": "$ven_rev_1", + "next": "@celestial.zoomed_venus_orbit_step1" + }, + "zoomed_overworld_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_1", + "to": "$ear_rev_2", + "next": "@celestial.zoomed_overworld_orbit_step2" + }, + "zoomed_overworld_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_2", + "to": "$ear_rev_3", + "next": "@celestial.zoomed_overworld_orbit_step3" + }, + "zoomed_overworld_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_3", + "to": "$ear_rev_4", + "next": "@celestial.zoomed_overworld_orbit_step4" + }, + "zoomed_overworld_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_4", + "to": "$ear_rev_5", + "next": "@celestial.zoomed_overworld_orbit_step5" + }, + "zoomed_overworld_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_5", + "to": "$ear_rev_6", + "next": "@celestial.zoomed_overworld_orbit_step6" + }, + "zoomed_overworld_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_6", + "to": "$ear_rev_7", + "next": "@celestial.zoomed_overworld_orbit_step7" + }, + "zoomed_overworld_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_7", + "to": "$ear_rev_8", + "next": "@celestial.zoomed_overworld_orbit_step8" + }, + "zoomed_overworld_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_8", + "to": "$ear_rev_9", + "next": "@celestial.zoomed_overworld_orbit_step9" + }, + "zoomed_overworld_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_9", + "to": "$ear_rev_10", + "next": "@celestial.zoomed_overworld_orbit_step10" + }, + "zoomed_overworld_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_10", + "to": "$ear_rev_11", + "next": "@celestial.zoomed_overworld_orbit_step11" + }, + "zoomed_overworld_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_11", + "to": "$ear_rev_12", + "next": "@celestial.zoomed_overworld_orbit_step12" + }, + "zoomed_overworld_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_12", + "to": "$ear_rev_13", + "next": "@celestial.zoomed_overworld_orbit_step13" + }, + "zoomed_overworld_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_13", + "to": "$ear_rev_14", + "next": "@celestial.zoomed_overworld_orbit_step14" + }, + "zoomed_overworld_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_14", + "to": "$ear_rev_15", + "next": "@celestial.zoomed_overworld_orbit_step15" + }, + "zoomed_overworld_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_15", + "to": "$ear_rev_16", + "next": "@celestial.zoomed_overworld_orbit_step16" + }, + "zoomed_overworld_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_16", + "to": "$ear_rev_17", + "next": "@celestial.zoomed_overworld_orbit_step17" + }, + "zoomed_overworld_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_17", + "to": "$ear_rev_18", + "next": "@celestial.zoomed_overworld_orbit_step18" + }, + "zoomed_overworld_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_18", + "to": "$ear_rev_19", + "next": "@celestial.zoomed_overworld_orbit_step19" + }, + "zoomed_overworld_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_19", + "to": "$ear_rev_20", + "next": "@celestial.zoomed_overworld_orbit_step20" + }, + "zoomed_overworld_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_20", + "to": "$ear_rev_21", + "next": "@celestial.zoomed_overworld_orbit_step21" + }, + "zoomed_overworld_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_21", + "to": "$ear_rev_22", + "next": "@celestial.zoomed_overworld_orbit_step22" + }, + "zoomed_overworld_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_22", + "to": "$ear_rev_23", + "next": "@celestial.zoomed_overworld_orbit_step23" + }, + "zoomed_overworld_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_23", + "to": "$ear_rev_24", + "next": "@celestial.zoomed_overworld_orbit_step24" + }, + "zoomed_overworld_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_24", + "to": "$ear_rev_25", + "next": "@celestial.zoomed_overworld_orbit_step25" + }, + "zoomed_overworld_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_25", + "to": "$ear_rev_26", + "next": "@celestial.zoomed_overworld_orbit_step26" + }, + "zoomed_overworld_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_26", + "to": "$ear_rev_27", + "next": "@celestial.zoomed_overworld_orbit_step27" + }, + "zoomed_overworld_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_27", + "to": "$ear_rev_28", + "next": "@celestial.zoomed_overworld_orbit_step28" + }, + "zoomed_overworld_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_28", + "to": "$ear_rev_29", + "next": "@celestial.zoomed_overworld_orbit_step29" + }, + "zoomed_overworld_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_29", + "to": "$ear_rev_30", + "next": "@celestial.zoomed_overworld_orbit_step30" + }, + "zoomed_overworld_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_30", + "to": "$ear_rev_31", + "next": "@celestial.zoomed_overworld_orbit_step31" + }, + "zoomed_overworld_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_31", + "to": "$ear_rev_32", + "next": "@celestial.zoomed_overworld_orbit_step32" + }, + "zoomed_overworld_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_32", + "to": "$ear_rev_33", + "next": "@celestial.zoomed_overworld_orbit_step33" + }, + "zoomed_overworld_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_33", + "to": "$ear_rev_34", + "next": "@celestial.zoomed_overworld_orbit_step34" + }, + "zoomed_overworld_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_34", + "to": "$ear_rev_35", + "next": "@celestial.zoomed_overworld_orbit_step35" + }, + "zoomed_overworld_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_35", + "to": "$ear_rev_36", + "next": "@celestial.zoomed_overworld_orbit_step36" + }, + "zoomed_overworld_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_36", + "to": "$ear_rev_37", + "next": "@celestial.zoomed_overworld_orbit_step37" + }, + "zoomed_overworld_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_37", + "to": "$ear_rev_38", + "next": "@celestial.zoomed_overworld_orbit_step38" + }, + "zoomed_overworld_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_38", + "to": "$ear_rev_39", + "next": "@celestial.zoomed_overworld_orbit_step39" + }, + "zoomed_overworld_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_39", + "to": "$ear_rev_40", + "next": "@celestial.zoomed_overworld_orbit_step40" + }, + "zoomed_overworld_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_40", + "to": "$ear_rev_41", + "next": "@celestial.zoomed_overworld_orbit_step41" + }, + "zoomed_overworld_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_41", + "to": "$ear_rev_42", + "next": "@celestial.zoomed_overworld_orbit_step42" + }, + "zoomed_overworld_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_42", + "to": "$ear_rev_43", + "next": "@celestial.zoomed_overworld_orbit_step43" + }, + "zoomed_overworld_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_43", + "to": "$ear_rev_44", + "next": "@celestial.zoomed_overworld_orbit_step44" + }, + "zoomed_overworld_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_44", + "to": "$ear_rev_45", + "next": "@celestial.zoomed_overworld_orbit_step45" + }, + "zoomed_overworld_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_45", + "to": "$ear_rev_46", + "next": "@celestial.zoomed_overworld_orbit_step46" + }, + "zoomed_overworld_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_46", + "to": "$ear_rev_47", + "next": "@celestial.zoomed_overworld_orbit_step47" + }, + "zoomed_overworld_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_47", + "to": "$ear_rev_48", + "next": "@celestial.zoomed_overworld_orbit_step48" + }, + "zoomed_overworld_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_48", + "to": "$ear_rev_49", + "next": "@celestial.zoomed_overworld_orbit_step49" + }, + "zoomed_overworld_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_49", + "to": "$ear_rev_50", + "next": "@celestial.zoomed_overworld_orbit_step50" + }, + "zoomed_overworld_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_50", + "to": "$ear_rev_51", + "next": "@celestial.zoomed_overworld_orbit_step51" + }, + "zoomed_overworld_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_51", + "to": "$ear_rev_52", + "next": "@celestial.zoomed_overworld_orbit_step52" + }, + "zoomed_overworld_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_52", + "to": "$ear_rev_53", + "next": "@celestial.zoomed_overworld_orbit_step53" + }, + "zoomed_overworld_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_53", + "to": "$ear_rev_54", + "next": "@celestial.zoomed_overworld_orbit_step54" + }, + "zoomed_overworld_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_54", + "to": "$ear_rev_55", + "next": "@celestial.zoomed_overworld_orbit_step55" + }, + "zoomed_overworld_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_55", + "to": "$ear_rev_56", + "next": "@celestial.zoomed_overworld_orbit_step56" + }, + "zoomed_overworld_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_56", + "to": "$ear_rev_57", + "next": "@celestial.zoomed_overworld_orbit_step57" + }, + "zoomed_overworld_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_57", + "to": "$ear_rev_58", + "next": "@celestial.zoomed_overworld_orbit_step58" + }, + "zoomed_overworld_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_58", + "to": "$ear_rev_59", + "next": "@celestial.zoomed_overworld_orbit_step59" + }, + "zoomed_overworld_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_59", + "to": "$ear_rev_60", + "next": "@celestial.zoomed_overworld_orbit_step60" + }, + "zoomed_overworld_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_60", + "to": "$ear_rev_61", + "next": "@celestial.zoomed_overworld_orbit_step61" + }, + "zoomed_overworld_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_61", + "to": "$ear_rev_62", + "next": "@celestial.zoomed_overworld_orbit_step62" + }, + "zoomed_overworld_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_62", + "to": "$ear_rev_63", + "next": "@celestial.zoomed_overworld_orbit_step63" + }, + "zoomed_overworld_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_63", + "to": "$ear_rev_64", + "next": "@celestial.zoomed_overworld_orbit_step64" + }, + "zoomed_overworld_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_64", + "to": "$ear_rev_65", + "next": "@celestial.zoomed_overworld_orbit_step65" + }, + "zoomed_overworld_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_65", + "to": "$ear_rev_66", + "next": "@celestial.zoomed_overworld_orbit_step66" + }, + "zoomed_overworld_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_66", + "to": "$ear_rev_67", + "next": "@celestial.zoomed_overworld_orbit_step67" + }, + "zoomed_overworld_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_67", + "to": "$ear_rev_68", + "next": "@celestial.zoomed_overworld_orbit_step68" + }, + "zoomed_overworld_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_68", + "to": "$ear_rev_69", + "next": "@celestial.zoomed_overworld_orbit_step69" + }, + "zoomed_overworld_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_69", + "to": "$ear_rev_70", + "next": "@celestial.zoomed_overworld_orbit_step70" + }, + "zoomed_overworld_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_70", + "to": "$ear_rev_71", + "next": "@celestial.zoomed_overworld_orbit_step71" + }, + "zoomed_overworld_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_71", + "to": "$ear_rev_72", + "next": "@celestial.zoomed_overworld_orbit_step72" + }, + "zoomed_overworld_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_72", + "to": "$ear_rev_73", + "next": "@celestial.zoomed_overworld_orbit_step73" + }, + "zoomed_overworld_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_73", + "to": "$ear_rev_74", + "next": "@celestial.zoomed_overworld_orbit_step74" + }, + "zoomed_overworld_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_74", + "to": "$ear_rev_75", + "next": "@celestial.zoomed_overworld_orbit_step75" + }, + "zoomed_overworld_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_75", + "to": "$ear_rev_76", + "next": "@celestial.zoomed_overworld_orbit_step76" + }, + "zoomed_overworld_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_76", + "to": "$ear_rev_77", + "next": "@celestial.zoomed_overworld_orbit_step77" + }, + "zoomed_overworld_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_77", + "to": "$ear_rev_78", + "next": "@celestial.zoomed_overworld_orbit_step78" + }, + "zoomed_overworld_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_78", + "to": "$ear_rev_79", + "next": "@celestial.zoomed_overworld_orbit_step79" + }, + "zoomed_overworld_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_79", + "to": "$ear_rev_80", + "next": "@celestial.zoomed_overworld_orbit_step80" + }, + "zoomed_overworld_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_80", + "to": "$ear_rev_81", + "next": "@celestial.zoomed_overworld_orbit_step81" + }, + "zoomed_overworld_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_81", + "to": "$ear_rev_82", + "next": "@celestial.zoomed_overworld_orbit_step82" + }, + "zoomed_overworld_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_82", + "to": "$ear_rev_83", + "next": "@celestial.zoomed_overworld_orbit_step83" + }, + "zoomed_overworld_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_83", + "to": "$ear_rev_84", + "next": "@celestial.zoomed_overworld_orbit_step84" + }, + "zoomed_overworld_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_84", + "to": "$ear_rev_85", + "next": "@celestial.zoomed_overworld_orbit_step85" + }, + "zoomed_overworld_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_85", + "to": "$ear_rev_86", + "next": "@celestial.zoomed_overworld_orbit_step86" + }, + "zoomed_overworld_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_86", + "to": "$ear_rev_87", + "next": "@celestial.zoomed_overworld_orbit_step87" + }, + "zoomed_overworld_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_87", + "to": "$ear_rev_88", + "next": "@celestial.zoomed_overworld_orbit_step88" + }, + "zoomed_overworld_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_88", + "to": "$ear_rev_89", + "next": "@celestial.zoomed_overworld_orbit_step89" + }, + "zoomed_overworld_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_89", + "to": "$ear_rev_90", + "next": "@celestial.zoomed_overworld_orbit_step90" + }, + "zoomed_overworld_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_90", + "to": "$ear_rev_91", + "next": "@celestial.zoomed_overworld_orbit_step91" + }, + "zoomed_overworld_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_91", + "to": "$ear_rev_92", + "next": "@celestial.zoomed_overworld_orbit_step92" + }, + "zoomed_overworld_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_92", + "to": "$ear_rev_93", + "next": "@celestial.zoomed_overworld_orbit_step93" + }, + "zoomed_overworld_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_93", + "to": "$ear_rev_94", + "next": "@celestial.zoomed_overworld_orbit_step94" + }, + "zoomed_overworld_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_94", + "to": "$ear_rev_95", + "next": "@celestial.zoomed_overworld_orbit_step95" + }, + "zoomed_overworld_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_95", + "to": "$ear_rev_96", + "next": "@celestial.zoomed_overworld_orbit_step96" + }, + "zoomed_overworld_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_96", + "to": "$ear_rev_97", + "next": "@celestial.zoomed_overworld_orbit_step97" + }, + "zoomed_overworld_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_97", + "to": "$ear_rev_98", + "next": "@celestial.zoomed_overworld_orbit_step98" + }, + "zoomed_overworld_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_98", + "to": "$ear_rev_99", + "next": "@celestial.zoomed_overworld_orbit_step99" + }, + "zoomed_overworld_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_99", + "to": "$ear_rev_100", + "next": "@celestial.zoomed_overworld_orbit_step100" + }, + "zoomed_overworld_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_100", + "to": "$ear_rev_101", + "next": "@celestial.zoomed_overworld_orbit_step101" + }, + "zoomed_overworld_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_101", + "to": "$ear_rev_102", + "next": "@celestial.zoomed_overworld_orbit_step102" + }, + "zoomed_overworld_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_102", + "to": "$ear_rev_103", + "next": "@celestial.zoomed_overworld_orbit_step103" + }, + "zoomed_overworld_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_103", + "to": "$ear_rev_104", + "next": "@celestial.zoomed_overworld_orbit_step104" + }, + "zoomed_overworld_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_104", + "to": "$ear_rev_105", + "next": "@celestial.zoomed_overworld_orbit_step105" + }, + "zoomed_overworld_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_105", + "to": "$ear_rev_106", + "next": "@celestial.zoomed_overworld_orbit_step106" + }, + "zoomed_overworld_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_106", + "to": "$ear_rev_107", + "next": "@celestial.zoomed_overworld_orbit_step107" + }, + "zoomed_overworld_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_107", + "to": "$ear_rev_108", + "next": "@celestial.zoomed_overworld_orbit_step108" + }, + "zoomed_overworld_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_108", + "to": "$ear_rev_109", + "next": "@celestial.zoomed_overworld_orbit_step109" + }, + "zoomed_overworld_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_109", + "to": "$ear_rev_110", + "next": "@celestial.zoomed_overworld_orbit_step110" + }, + "zoomed_overworld_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_110", + "to": "$ear_rev_111", + "next": "@celestial.zoomed_overworld_orbit_step111" + }, + "zoomed_overworld_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_111", + "to": "$ear_rev_112", + "next": "@celestial.zoomed_overworld_orbit_step112" + }, + "zoomed_overworld_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_112", + "to": "$ear_rev_113", + "next": "@celestial.zoomed_overworld_orbit_step113" + }, + "zoomed_overworld_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_113", + "to": "$ear_rev_114", + "next": "@celestial.zoomed_overworld_orbit_step114" + }, + "zoomed_overworld_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_114", + "to": "$ear_rev_115", + "next": "@celestial.zoomed_overworld_orbit_step115" + }, + "zoomed_overworld_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_115", + "to": "$ear_rev_116", + "next": "@celestial.zoomed_overworld_orbit_step116" + }, + "zoomed_overworld_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_116", + "to": "$ear_rev_117", + "next": "@celestial.zoomed_overworld_orbit_step117" + }, + "zoomed_overworld_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_117", + "to": "$ear_rev_118", + "next": "@celestial.zoomed_overworld_orbit_step118" + }, + "zoomed_overworld_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_118", + "to": "$ear_rev_119", + "next": "@celestial.zoomed_overworld_orbit_step119" + }, + "zoomed_overworld_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_119", + "to": "$ear_rev_120", + "next": "@celestial.zoomed_overworld_orbit_step120" + }, + "zoomed_overworld_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_120", + "to": "$ear_rev_121", + "next": "@celestial.zoomed_overworld_orbit_step121" + }, + "zoomed_overworld_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_121", + "to": "$ear_rev_122", + "next": "@celestial.zoomed_overworld_orbit_step122" + }, + "zoomed_overworld_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_122", + "to": "$ear_rev_123", + "next": "@celestial.zoomed_overworld_orbit_step123" + }, + "zoomed_overworld_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_123", + "to": "$ear_rev_124", + "next": "@celestial.zoomed_overworld_orbit_step124" + }, + "zoomed_overworld_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_124", + "to": "$ear_rev_125", + "next": "@celestial.zoomed_overworld_orbit_step125" + }, + "zoomed_overworld_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_125", + "to": "$ear_rev_126", + "next": "@celestial.zoomed_overworld_orbit_step126" + }, + "zoomed_overworld_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_126", + "to": "$ear_rev_127", + "next": "@celestial.zoomed_overworld_orbit_step127" + }, + "zoomed_overworld_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_127", + "to": "$ear_rev_128", + "next": "@celestial.zoomed_overworld_orbit_step128" + }, + "zoomed_overworld_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear_rev_128", + "to": "$ear_rev_1", + "next": "@celestial.zoomed_overworld_orbit_step1" + }, + "zoomed_mars_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_1", + "to": "$mar_rev_2", + "next": "@celestial.zoomed_mars_orbit_step2" + }, + "zoomed_mars_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_2", + "to": "$mar_rev_3", + "next": "@celestial.zoomed_mars_orbit_step3" + }, + "zoomed_mars_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_3", + "to": "$mar_rev_4", + "next": "@celestial.zoomed_mars_orbit_step4" + }, + "zoomed_mars_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_4", + "to": "$mar_rev_5", + "next": "@celestial.zoomed_mars_orbit_step5" + }, + "zoomed_mars_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_5", + "to": "$mar_rev_6", + "next": "@celestial.zoomed_mars_orbit_step6" + }, + "zoomed_mars_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_6", + "to": "$mar_rev_7", + "next": "@celestial.zoomed_mars_orbit_step7" + }, + "zoomed_mars_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_7", + "to": "$mar_rev_8", + "next": "@celestial.zoomed_mars_orbit_step8" + }, + "zoomed_mars_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_8", + "to": "$mar_rev_9", + "next": "@celestial.zoomed_mars_orbit_step9" + }, + "zoomed_mars_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_9", + "to": "$mar_rev_10", + "next": "@celestial.zoomed_mars_orbit_step10" + }, + "zoomed_mars_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_10", + "to": "$mar_rev_11", + "next": "@celestial.zoomed_mars_orbit_step11" + }, + "zoomed_mars_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_11", + "to": "$mar_rev_12", + "next": "@celestial.zoomed_mars_orbit_step12" + }, + "zoomed_mars_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_12", + "to": "$mar_rev_13", + "next": "@celestial.zoomed_mars_orbit_step13" + }, + "zoomed_mars_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_13", + "to": "$mar_rev_14", + "next": "@celestial.zoomed_mars_orbit_step14" + }, + "zoomed_mars_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_14", + "to": "$mar_rev_15", + "next": "@celestial.zoomed_mars_orbit_step15" + }, + "zoomed_mars_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_15", + "to": "$mar_rev_16", + "next": "@celestial.zoomed_mars_orbit_step16" + }, + "zoomed_mars_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_16", + "to": "$mar_rev_17", + "next": "@celestial.zoomed_mars_orbit_step17" + }, + "zoomed_mars_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_17", + "to": "$mar_rev_18", + "next": "@celestial.zoomed_mars_orbit_step18" + }, + "zoomed_mars_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_18", + "to": "$mar_rev_19", + "next": "@celestial.zoomed_mars_orbit_step19" + }, + "zoomed_mars_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_19", + "to": "$mar_rev_20", + "next": "@celestial.zoomed_mars_orbit_step20" + }, + "zoomed_mars_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_20", + "to": "$mar_rev_21", + "next": "@celestial.zoomed_mars_orbit_step21" + }, + "zoomed_mars_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_21", + "to": "$mar_rev_22", + "next": "@celestial.zoomed_mars_orbit_step22" + }, + "zoomed_mars_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_22", + "to": "$mar_rev_23", + "next": "@celestial.zoomed_mars_orbit_step23" + }, + "zoomed_mars_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_23", + "to": "$mar_rev_24", + "next": "@celestial.zoomed_mars_orbit_step24" + }, + "zoomed_mars_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_24", + "to": "$mar_rev_25", + "next": "@celestial.zoomed_mars_orbit_step25" + }, + "zoomed_mars_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_25", + "to": "$mar_rev_26", + "next": "@celestial.zoomed_mars_orbit_step26" + }, + "zoomed_mars_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_26", + "to": "$mar_rev_27", + "next": "@celestial.zoomed_mars_orbit_step27" + }, + "zoomed_mars_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_27", + "to": "$mar_rev_28", + "next": "@celestial.zoomed_mars_orbit_step28" + }, + "zoomed_mars_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_28", + "to": "$mar_rev_29", + "next": "@celestial.zoomed_mars_orbit_step29" + }, + "zoomed_mars_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_29", + "to": "$mar_rev_30", + "next": "@celestial.zoomed_mars_orbit_step30" + }, + "zoomed_mars_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_30", + "to": "$mar_rev_31", + "next": "@celestial.zoomed_mars_orbit_step31" + }, + "zoomed_mars_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_31", + "to": "$mar_rev_32", + "next": "@celestial.zoomed_mars_orbit_step32" + }, + "zoomed_mars_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_32", + "to": "$mar_rev_33", + "next": "@celestial.zoomed_mars_orbit_step33" + }, + "zoomed_mars_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_33", + "to": "$mar_rev_34", + "next": "@celestial.zoomed_mars_orbit_step34" + }, + "zoomed_mars_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_34", + "to": "$mar_rev_35", + "next": "@celestial.zoomed_mars_orbit_step35" + }, + "zoomed_mars_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_35", + "to": "$mar_rev_36", + "next": "@celestial.zoomed_mars_orbit_step36" + }, + "zoomed_mars_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_36", + "to": "$mar_rev_37", + "next": "@celestial.zoomed_mars_orbit_step37" + }, + "zoomed_mars_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_37", + "to": "$mar_rev_38", + "next": "@celestial.zoomed_mars_orbit_step38" + }, + "zoomed_mars_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_38", + "to": "$mar_rev_39", + "next": "@celestial.zoomed_mars_orbit_step39" + }, + "zoomed_mars_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_39", + "to": "$mar_rev_40", + "next": "@celestial.zoomed_mars_orbit_step40" + }, + "zoomed_mars_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_40", + "to": "$mar_rev_41", + "next": "@celestial.zoomed_mars_orbit_step41" + }, + "zoomed_mars_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_41", + "to": "$mar_rev_42", + "next": "@celestial.zoomed_mars_orbit_step42" + }, + "zoomed_mars_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_42", + "to": "$mar_rev_43", + "next": "@celestial.zoomed_mars_orbit_step43" + }, + "zoomed_mars_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_43", + "to": "$mar_rev_44", + "next": "@celestial.zoomed_mars_orbit_step44" + }, + "zoomed_mars_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_44", + "to": "$mar_rev_45", + "next": "@celestial.zoomed_mars_orbit_step45" + }, + "zoomed_mars_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_45", + "to": "$mar_rev_46", + "next": "@celestial.zoomed_mars_orbit_step46" + }, + "zoomed_mars_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_46", + "to": "$mar_rev_47", + "next": "@celestial.zoomed_mars_orbit_step47" + }, + "zoomed_mars_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_47", + "to": "$mar_rev_48", + "next": "@celestial.zoomed_mars_orbit_step48" + }, + "zoomed_mars_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_48", + "to": "$mar_rev_49", + "next": "@celestial.zoomed_mars_orbit_step49" + }, + "zoomed_mars_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_49", + "to": "$mar_rev_50", + "next": "@celestial.zoomed_mars_orbit_step50" + }, + "zoomed_mars_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_50", + "to": "$mar_rev_51", + "next": "@celestial.zoomed_mars_orbit_step51" + }, + "zoomed_mars_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_51", + "to": "$mar_rev_52", + "next": "@celestial.zoomed_mars_orbit_step52" + }, + "zoomed_mars_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_52", + "to": "$mar_rev_53", + "next": "@celestial.zoomed_mars_orbit_step53" + }, + "zoomed_mars_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_53", + "to": "$mar_rev_54", + "next": "@celestial.zoomed_mars_orbit_step54" + }, + "zoomed_mars_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_54", + "to": "$mar_rev_55", + "next": "@celestial.zoomed_mars_orbit_step55" + }, + "zoomed_mars_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_55", + "to": "$mar_rev_56", + "next": "@celestial.zoomed_mars_orbit_step56" + }, + "zoomed_mars_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_56", + "to": "$mar_rev_57", + "next": "@celestial.zoomed_mars_orbit_step57" + }, + "zoomed_mars_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_57", + "to": "$mar_rev_58", + "next": "@celestial.zoomed_mars_orbit_step58" + }, + "zoomed_mars_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_58", + "to": "$mar_rev_59", + "next": "@celestial.zoomed_mars_orbit_step59" + }, + "zoomed_mars_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_59", + "to": "$mar_rev_60", + "next": "@celestial.zoomed_mars_orbit_step60" + }, + "zoomed_mars_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_60", + "to": "$mar_rev_61", + "next": "@celestial.zoomed_mars_orbit_step61" + }, + "zoomed_mars_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_61", + "to": "$mar_rev_62", + "next": "@celestial.zoomed_mars_orbit_step62" + }, + "zoomed_mars_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_62", + "to": "$mar_rev_63", + "next": "@celestial.zoomed_mars_orbit_step63" + }, + "zoomed_mars_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_63", + "to": "$mar_rev_64", + "next": "@celestial.zoomed_mars_orbit_step64" + }, + "zoomed_mars_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_64", + "to": "$mar_rev_65", + "next": "@celestial.zoomed_mars_orbit_step65" + }, + "zoomed_mars_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_65", + "to": "$mar_rev_66", + "next": "@celestial.zoomed_mars_orbit_step66" + }, + "zoomed_mars_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_66", + "to": "$mar_rev_67", + "next": "@celestial.zoomed_mars_orbit_step67" + }, + "zoomed_mars_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_67", + "to": "$mar_rev_68", + "next": "@celestial.zoomed_mars_orbit_step68" + }, + "zoomed_mars_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_68", + "to": "$mar_rev_69", + "next": "@celestial.zoomed_mars_orbit_step69" + }, + "zoomed_mars_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_69", + "to": "$mar_rev_70", + "next": "@celestial.zoomed_mars_orbit_step70" + }, + "zoomed_mars_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_70", + "to": "$mar_rev_71", + "next": "@celestial.zoomed_mars_orbit_step71" + }, + "zoomed_mars_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_71", + "to": "$mar_rev_72", + "next": "@celestial.zoomed_mars_orbit_step72" + }, + "zoomed_mars_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_72", + "to": "$mar_rev_73", + "next": "@celestial.zoomed_mars_orbit_step73" + }, + "zoomed_mars_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_73", + "to": "$mar_rev_74", + "next": "@celestial.zoomed_mars_orbit_step74" + }, + "zoomed_mars_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_74", + "to": "$mar_rev_75", + "next": "@celestial.zoomed_mars_orbit_step75" + }, + "zoomed_mars_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_75", + "to": "$mar_rev_76", + "next": "@celestial.zoomed_mars_orbit_step76" + }, + "zoomed_mars_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_76", + "to": "$mar_rev_77", + "next": "@celestial.zoomed_mars_orbit_step77" + }, + "zoomed_mars_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_77", + "to": "$mar_rev_78", + "next": "@celestial.zoomed_mars_orbit_step78" + }, + "zoomed_mars_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_78", + "to": "$mar_rev_79", + "next": "@celestial.zoomed_mars_orbit_step79" + }, + "zoomed_mars_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_79", + "to": "$mar_rev_80", + "next": "@celestial.zoomed_mars_orbit_step80" + }, + "zoomed_mars_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_80", + "to": "$mar_rev_81", + "next": "@celestial.zoomed_mars_orbit_step81" + }, + "zoomed_mars_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_81", + "to": "$mar_rev_82", + "next": "@celestial.zoomed_mars_orbit_step82" + }, + "zoomed_mars_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_82", + "to": "$mar_rev_83", + "next": "@celestial.zoomed_mars_orbit_step83" + }, + "zoomed_mars_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_83", + "to": "$mar_rev_84", + "next": "@celestial.zoomed_mars_orbit_step84" + }, + "zoomed_mars_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_84", + "to": "$mar_rev_85", + "next": "@celestial.zoomed_mars_orbit_step85" + }, + "zoomed_mars_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_85", + "to": "$mar_rev_86", + "next": "@celestial.zoomed_mars_orbit_step86" + }, + "zoomed_mars_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_86", + "to": "$mar_rev_87", + "next": "@celestial.zoomed_mars_orbit_step87" + }, + "zoomed_mars_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_87", + "to": "$mar_rev_88", + "next": "@celestial.zoomed_mars_orbit_step88" + }, + "zoomed_mars_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_88", + "to": "$mar_rev_89", + "next": "@celestial.zoomed_mars_orbit_step89" + }, + "zoomed_mars_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_89", + "to": "$mar_rev_90", + "next": "@celestial.zoomed_mars_orbit_step90" + }, + "zoomed_mars_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_90", + "to": "$mar_rev_91", + "next": "@celestial.zoomed_mars_orbit_step91" + }, + "zoomed_mars_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_91", + "to": "$mar_rev_92", + "next": "@celestial.zoomed_mars_orbit_step92" + }, + "zoomed_mars_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_92", + "to": "$mar_rev_93", + "next": "@celestial.zoomed_mars_orbit_step93" + }, + "zoomed_mars_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_93", + "to": "$mar_rev_94", + "next": "@celestial.zoomed_mars_orbit_step94" + }, + "zoomed_mars_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_94", + "to": "$mar_rev_95", + "next": "@celestial.zoomed_mars_orbit_step95" + }, + "zoomed_mars_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_95", + "to": "$mar_rev_96", + "next": "@celestial.zoomed_mars_orbit_step96" + }, + "zoomed_mars_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_96", + "to": "$mar_rev_97", + "next": "@celestial.zoomed_mars_orbit_step97" + }, + "zoomed_mars_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_97", + "to": "$mar_rev_98", + "next": "@celestial.zoomed_mars_orbit_step98" + }, + "zoomed_mars_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_98", + "to": "$mar_rev_99", + "next": "@celestial.zoomed_mars_orbit_step99" + }, + "zoomed_mars_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_99", + "to": "$mar_rev_100", + "next": "@celestial.zoomed_mars_orbit_step100" + }, + "zoomed_mars_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_100", + "to": "$mar_rev_101", + "next": "@celestial.zoomed_mars_orbit_step101" + }, + "zoomed_mars_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_101", + "to": "$mar_rev_102", + "next": "@celestial.zoomed_mars_orbit_step102" + }, + "zoomed_mars_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_102", + "to": "$mar_rev_103", + "next": "@celestial.zoomed_mars_orbit_step103" + }, + "zoomed_mars_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_103", + "to": "$mar_rev_104", + "next": "@celestial.zoomed_mars_orbit_step104" + }, + "zoomed_mars_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_104", + "to": "$mar_rev_105", + "next": "@celestial.zoomed_mars_orbit_step105" + }, + "zoomed_mars_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_105", + "to": "$mar_rev_106", + "next": "@celestial.zoomed_mars_orbit_step106" + }, + "zoomed_mars_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_106", + "to": "$mar_rev_107", + "next": "@celestial.zoomed_mars_orbit_step107" + }, + "zoomed_mars_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_107", + "to": "$mar_rev_108", + "next": "@celestial.zoomed_mars_orbit_step108" + }, + "zoomed_mars_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_108", + "to": "$mar_rev_109", + "next": "@celestial.zoomed_mars_orbit_step109" + }, + "zoomed_mars_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_109", + "to": "$mar_rev_110", + "next": "@celestial.zoomed_mars_orbit_step110" + }, + "zoomed_mars_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_110", + "to": "$mar_rev_111", + "next": "@celestial.zoomed_mars_orbit_step111" + }, + "zoomed_mars_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_111", + "to": "$mar_rev_112", + "next": "@celestial.zoomed_mars_orbit_step112" + }, + "zoomed_mars_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_112", + "to": "$mar_rev_113", + "next": "@celestial.zoomed_mars_orbit_step113" + }, + "zoomed_mars_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_113", + "to": "$mar_rev_114", + "next": "@celestial.zoomed_mars_orbit_step114" + }, + "zoomed_mars_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_114", + "to": "$mar_rev_115", + "next": "@celestial.zoomed_mars_orbit_step115" + }, + "zoomed_mars_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_115", + "to": "$mar_rev_116", + "next": "@celestial.zoomed_mars_orbit_step116" + }, + "zoomed_mars_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_116", + "to": "$mar_rev_117", + "next": "@celestial.zoomed_mars_orbit_step117" + }, + "zoomed_mars_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_117", + "to": "$mar_rev_118", + "next": "@celestial.zoomed_mars_orbit_step118" + }, + "zoomed_mars_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_118", + "to": "$mar_rev_119", + "next": "@celestial.zoomed_mars_orbit_step119" + }, + "zoomed_mars_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_119", + "to": "$mar_rev_120", + "next": "@celestial.zoomed_mars_orbit_step120" + }, + "zoomed_mars_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_120", + "to": "$mar_rev_121", + "next": "@celestial.zoomed_mars_orbit_step121" + }, + "zoomed_mars_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_121", + "to": "$mar_rev_122", + "next": "@celestial.zoomed_mars_orbit_step122" + }, + "zoomed_mars_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_122", + "to": "$mar_rev_123", + "next": "@celestial.zoomed_mars_orbit_step123" + }, + "zoomed_mars_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_123", + "to": "$mar_rev_124", + "next": "@celestial.zoomed_mars_orbit_step124" + }, + "zoomed_mars_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_124", + "to": "$mar_rev_125", + "next": "@celestial.zoomed_mars_orbit_step125" + }, + "zoomed_mars_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_125", + "to": "$mar_rev_126", + "next": "@celestial.zoomed_mars_orbit_step126" + }, + "zoomed_mars_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_126", + "to": "$mar_rev_127", + "next": "@celestial.zoomed_mars_orbit_step127" + }, + "zoomed_mars_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_127", + "to": "$mar_rev_128", + "next": "@celestial.zoomed_mars_orbit_step128" + }, + "zoomed_mars_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar_rev_128", + "to": "$mar_rev_1", + "next": "@celestial.zoomed_mars_orbit_step1" + }, + "zoomed_asteroids_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_1", + "to": "$ast_rev_2", + "next": "@celestial.zoomed_asteroids_orbit_step2" + }, + "zoomed_asteroids_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_2", + "to": "$ast_rev_3", + "next": "@celestial.zoomed_asteroids_orbit_step3" + }, + "zoomed_asteroids_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_3", + "to": "$ast_rev_4", + "next": "@celestial.zoomed_asteroids_orbit_step4" + }, + "zoomed_asteroids_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_4", + "to": "$ast_rev_5", + "next": "@celestial.zoomed_asteroids_orbit_step5" + }, + "zoomed_asteroids_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_5", + "to": "$ast_rev_6", + "next": "@celestial.zoomed_asteroids_orbit_step6" + }, + "zoomed_asteroids_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_6", + "to": "$ast_rev_7", + "next": "@celestial.zoomed_asteroids_orbit_step7" + }, + "zoomed_asteroids_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_7", + "to": "$ast_rev_8", + "next": "@celestial.zoomed_asteroids_orbit_step8" + }, + "zoomed_asteroids_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_8", + "to": "$ast_rev_9", + "next": "@celestial.zoomed_asteroids_orbit_step9" + }, + "zoomed_asteroids_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_9", + "to": "$ast_rev_10", + "next": "@celestial.zoomed_asteroids_orbit_step10" + }, + "zoomed_asteroids_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_10", + "to": "$ast_rev_11", + "next": "@celestial.zoomed_asteroids_orbit_step11" + }, + "zoomed_asteroids_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_11", + "to": "$ast_rev_12", + "next": "@celestial.zoomed_asteroids_orbit_step12" + }, + "zoomed_asteroids_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_12", + "to": "$ast_rev_13", + "next": "@celestial.zoomed_asteroids_orbit_step13" + }, + "zoomed_asteroids_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_13", + "to": "$ast_rev_14", + "next": "@celestial.zoomed_asteroids_orbit_step14" + }, + "zoomed_asteroids_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_14", + "to": "$ast_rev_15", + "next": "@celestial.zoomed_asteroids_orbit_step15" + }, + "zoomed_asteroids_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_15", + "to": "$ast_rev_16", + "next": "@celestial.zoomed_asteroids_orbit_step16" + }, + "zoomed_asteroids_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_16", + "to": "$ast_rev_17", + "next": "@celestial.zoomed_asteroids_orbit_step17" + }, + "zoomed_asteroids_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_17", + "to": "$ast_rev_18", + "next": "@celestial.zoomed_asteroids_orbit_step18" + }, + "zoomed_asteroids_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_18", + "to": "$ast_rev_19", + "next": "@celestial.zoomed_asteroids_orbit_step19" + }, + "zoomed_asteroids_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_19", + "to": "$ast_rev_20", + "next": "@celestial.zoomed_asteroids_orbit_step20" + }, + "zoomed_asteroids_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_20", + "to": "$ast_rev_21", + "next": "@celestial.zoomed_asteroids_orbit_step21" + }, + "zoomed_asteroids_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_21", + "to": "$ast_rev_22", + "next": "@celestial.zoomed_asteroids_orbit_step22" + }, + "zoomed_asteroids_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_22", + "to": "$ast_rev_23", + "next": "@celestial.zoomed_asteroids_orbit_step23" + }, + "zoomed_asteroids_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_23", + "to": "$ast_rev_24", + "next": "@celestial.zoomed_asteroids_orbit_step24" + }, + "zoomed_asteroids_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_24", + "to": "$ast_rev_25", + "next": "@celestial.zoomed_asteroids_orbit_step25" + }, + "zoomed_asteroids_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_25", + "to": "$ast_rev_26", + "next": "@celestial.zoomed_asteroids_orbit_step26" + }, + "zoomed_asteroids_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_26", + "to": "$ast_rev_27", + "next": "@celestial.zoomed_asteroids_orbit_step27" + }, + "zoomed_asteroids_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_27", + "to": "$ast_rev_28", + "next": "@celestial.zoomed_asteroids_orbit_step28" + }, + "zoomed_asteroids_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_28", + "to": "$ast_rev_29", + "next": "@celestial.zoomed_asteroids_orbit_step29" + }, + "zoomed_asteroids_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_29", + "to": "$ast_rev_30", + "next": "@celestial.zoomed_asteroids_orbit_step30" + }, + "zoomed_asteroids_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_30", + "to": "$ast_rev_31", + "next": "@celestial.zoomed_asteroids_orbit_step31" + }, + "zoomed_asteroids_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_31", + "to": "$ast_rev_32", + "next": "@celestial.zoomed_asteroids_orbit_step32" + }, + "zoomed_asteroids_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_32", + "to": "$ast_rev_33", + "next": "@celestial.zoomed_asteroids_orbit_step33" + }, + "zoomed_asteroids_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_33", + "to": "$ast_rev_34", + "next": "@celestial.zoomed_asteroids_orbit_step34" + }, + "zoomed_asteroids_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_34", + "to": "$ast_rev_35", + "next": "@celestial.zoomed_asteroids_orbit_step35" + }, + "zoomed_asteroids_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_35", + "to": "$ast_rev_36", + "next": "@celestial.zoomed_asteroids_orbit_step36" + }, + "zoomed_asteroids_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_36", + "to": "$ast_rev_37", + "next": "@celestial.zoomed_asteroids_orbit_step37" + }, + "zoomed_asteroids_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_37", + "to": "$ast_rev_38", + "next": "@celestial.zoomed_asteroids_orbit_step38" + }, + "zoomed_asteroids_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_38", + "to": "$ast_rev_39", + "next": "@celestial.zoomed_asteroids_orbit_step39" + }, + "zoomed_asteroids_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_39", + "to": "$ast_rev_40", + "next": "@celestial.zoomed_asteroids_orbit_step40" + }, + "zoomed_asteroids_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_40", + "to": "$ast_rev_41", + "next": "@celestial.zoomed_asteroids_orbit_step41" + }, + "zoomed_asteroids_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_41", + "to": "$ast_rev_42", + "next": "@celestial.zoomed_asteroids_orbit_step42" + }, + "zoomed_asteroids_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_42", + "to": "$ast_rev_43", + "next": "@celestial.zoomed_asteroids_orbit_step43" + }, + "zoomed_asteroids_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_43", + "to": "$ast_rev_44", + "next": "@celestial.zoomed_asteroids_orbit_step44" + }, + "zoomed_asteroids_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_44", + "to": "$ast_rev_45", + "next": "@celestial.zoomed_asteroids_orbit_step45" + }, + "zoomed_asteroids_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_45", + "to": "$ast_rev_46", + "next": "@celestial.zoomed_asteroids_orbit_step46" + }, + "zoomed_asteroids_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_46", + "to": "$ast_rev_47", + "next": "@celestial.zoomed_asteroids_orbit_step47" + }, + "zoomed_asteroids_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_47", + "to": "$ast_rev_48", + "next": "@celestial.zoomed_asteroids_orbit_step48" + }, + "zoomed_asteroids_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_48", + "to": "$ast_rev_49", + "next": "@celestial.zoomed_asteroids_orbit_step49" + }, + "zoomed_asteroids_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_49", + "to": "$ast_rev_50", + "next": "@celestial.zoomed_asteroids_orbit_step50" + }, + "zoomed_asteroids_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_50", + "to": "$ast_rev_51", + "next": "@celestial.zoomed_asteroids_orbit_step51" + }, + "zoomed_asteroids_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_51", + "to": "$ast_rev_52", + "next": "@celestial.zoomed_asteroids_orbit_step52" + }, + "zoomed_asteroids_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_52", + "to": "$ast_rev_53", + "next": "@celestial.zoomed_asteroids_orbit_step53" + }, + "zoomed_asteroids_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_53", + "to": "$ast_rev_54", + "next": "@celestial.zoomed_asteroids_orbit_step54" + }, + "zoomed_asteroids_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_54", + "to": "$ast_rev_55", + "next": "@celestial.zoomed_asteroids_orbit_step55" + }, + "zoomed_asteroids_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_55", + "to": "$ast_rev_56", + "next": "@celestial.zoomed_asteroids_orbit_step56" + }, + "zoomed_asteroids_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_56", + "to": "$ast_rev_57", + "next": "@celestial.zoomed_asteroids_orbit_step57" + }, + "zoomed_asteroids_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_57", + "to": "$ast_rev_58", + "next": "@celestial.zoomed_asteroids_orbit_step58" + }, + "zoomed_asteroids_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_58", + "to": "$ast_rev_59", + "next": "@celestial.zoomed_asteroids_orbit_step59" + }, + "zoomed_asteroids_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_59", + "to": "$ast_rev_60", + "next": "@celestial.zoomed_asteroids_orbit_step60" + }, + "zoomed_asteroids_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_60", + "to": "$ast_rev_61", + "next": "@celestial.zoomed_asteroids_orbit_step61" + }, + "zoomed_asteroids_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_61", + "to": "$ast_rev_62", + "next": "@celestial.zoomed_asteroids_orbit_step62" + }, + "zoomed_asteroids_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_62", + "to": "$ast_rev_63", + "next": "@celestial.zoomed_asteroids_orbit_step63" + }, + "zoomed_asteroids_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_63", + "to": "$ast_rev_64", + "next": "@celestial.zoomed_asteroids_orbit_step64" + }, + "zoomed_asteroids_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_64", + "to": "$ast_rev_65", + "next": "@celestial.zoomed_asteroids_orbit_step65" + }, + "zoomed_asteroids_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_65", + "to": "$ast_rev_66", + "next": "@celestial.zoomed_asteroids_orbit_step66" + }, + "zoomed_asteroids_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_66", + "to": "$ast_rev_67", + "next": "@celestial.zoomed_asteroids_orbit_step67" + }, + "zoomed_asteroids_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_67", + "to": "$ast_rev_68", + "next": "@celestial.zoomed_asteroids_orbit_step68" + }, + "zoomed_asteroids_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_68", + "to": "$ast_rev_69", + "next": "@celestial.zoomed_asteroids_orbit_step69" + }, + "zoomed_asteroids_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_69", + "to": "$ast_rev_70", + "next": "@celestial.zoomed_asteroids_orbit_step70" + }, + "zoomed_asteroids_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_70", + "to": "$ast_rev_71", + "next": "@celestial.zoomed_asteroids_orbit_step71" + }, + "zoomed_asteroids_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_71", + "to": "$ast_rev_72", + "next": "@celestial.zoomed_asteroids_orbit_step72" + }, + "zoomed_asteroids_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_72", + "to": "$ast_rev_73", + "next": "@celestial.zoomed_asteroids_orbit_step73" + }, + "zoomed_asteroids_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_73", + "to": "$ast_rev_74", + "next": "@celestial.zoomed_asteroids_orbit_step74" + }, + "zoomed_asteroids_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_74", + "to": "$ast_rev_75", + "next": "@celestial.zoomed_asteroids_orbit_step75" + }, + "zoomed_asteroids_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_75", + "to": "$ast_rev_76", + "next": "@celestial.zoomed_asteroids_orbit_step76" + }, + "zoomed_asteroids_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_76", + "to": "$ast_rev_77", + "next": "@celestial.zoomed_asteroids_orbit_step77" + }, + "zoomed_asteroids_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_77", + "to": "$ast_rev_78", + "next": "@celestial.zoomed_asteroids_orbit_step78" + }, + "zoomed_asteroids_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_78", + "to": "$ast_rev_79", + "next": "@celestial.zoomed_asteroids_orbit_step79" + }, + "zoomed_asteroids_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_79", + "to": "$ast_rev_80", + "next": "@celestial.zoomed_asteroids_orbit_step80" + }, + "zoomed_asteroids_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_80", + "to": "$ast_rev_81", + "next": "@celestial.zoomed_asteroids_orbit_step81" + }, + "zoomed_asteroids_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_81", + "to": "$ast_rev_82", + "next": "@celestial.zoomed_asteroids_orbit_step82" + }, + "zoomed_asteroids_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_82", + "to": "$ast_rev_83", + "next": "@celestial.zoomed_asteroids_orbit_step83" + }, + "zoomed_asteroids_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_83", + "to": "$ast_rev_84", + "next": "@celestial.zoomed_asteroids_orbit_step84" + }, + "zoomed_asteroids_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_84", + "to": "$ast_rev_85", + "next": "@celestial.zoomed_asteroids_orbit_step85" + }, + "zoomed_asteroids_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_85", + "to": "$ast_rev_86", + "next": "@celestial.zoomed_asteroids_orbit_step86" + }, + "zoomed_asteroids_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_86", + "to": "$ast_rev_87", + "next": "@celestial.zoomed_asteroids_orbit_step87" + }, + "zoomed_asteroids_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_87", + "to": "$ast_rev_88", + "next": "@celestial.zoomed_asteroids_orbit_step88" + }, + "zoomed_asteroids_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_88", + "to": "$ast_rev_89", + "next": "@celestial.zoomed_asteroids_orbit_step89" + }, + "zoomed_asteroids_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_89", + "to": "$ast_rev_90", + "next": "@celestial.zoomed_asteroids_orbit_step90" + }, + "zoomed_asteroids_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_90", + "to": "$ast_rev_91", + "next": "@celestial.zoomed_asteroids_orbit_step91" + }, + "zoomed_asteroids_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_91", + "to": "$ast_rev_92", + "next": "@celestial.zoomed_asteroids_orbit_step92" + }, + "zoomed_asteroids_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_92", + "to": "$ast_rev_93", + "next": "@celestial.zoomed_asteroids_orbit_step93" + }, + "zoomed_asteroids_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_93", + "to": "$ast_rev_94", + "next": "@celestial.zoomed_asteroids_orbit_step94" + }, + "zoomed_asteroids_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_94", + "to": "$ast_rev_95", + "next": "@celestial.zoomed_asteroids_orbit_step95" + }, + "zoomed_asteroids_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_95", + "to": "$ast_rev_96", + "next": "@celestial.zoomed_asteroids_orbit_step96" + }, + "zoomed_asteroids_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_96", + "to": "$ast_rev_97", + "next": "@celestial.zoomed_asteroids_orbit_step97" + }, + "zoomed_asteroids_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_97", + "to": "$ast_rev_98", + "next": "@celestial.zoomed_asteroids_orbit_step98" + }, + "zoomed_asteroids_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_98", + "to": "$ast_rev_99", + "next": "@celestial.zoomed_asteroids_orbit_step99" + }, + "zoomed_asteroids_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_99", + "to": "$ast_rev_100", + "next": "@celestial.zoomed_asteroids_orbit_step100" + }, + "zoomed_asteroids_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_100", + "to": "$ast_rev_101", + "next": "@celestial.zoomed_asteroids_orbit_step101" + }, + "zoomed_asteroids_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_101", + "to": "$ast_rev_102", + "next": "@celestial.zoomed_asteroids_orbit_step102" + }, + "zoomed_asteroids_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_102", + "to": "$ast_rev_103", + "next": "@celestial.zoomed_asteroids_orbit_step103" + }, + "zoomed_asteroids_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_103", + "to": "$ast_rev_104", + "next": "@celestial.zoomed_asteroids_orbit_step104" + }, + "zoomed_asteroids_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_104", + "to": "$ast_rev_105", + "next": "@celestial.zoomed_asteroids_orbit_step105" + }, + "zoomed_asteroids_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_105", + "to": "$ast_rev_106", + "next": "@celestial.zoomed_asteroids_orbit_step106" + }, + "zoomed_asteroids_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_106", + "to": "$ast_rev_107", + "next": "@celestial.zoomed_asteroids_orbit_step107" + }, + "zoomed_asteroids_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_107", + "to": "$ast_rev_108", + "next": "@celestial.zoomed_asteroids_orbit_step108" + }, + "zoomed_asteroids_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_108", + "to": "$ast_rev_109", + "next": "@celestial.zoomed_asteroids_orbit_step109" + }, + "zoomed_asteroids_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_109", + "to": "$ast_rev_110", + "next": "@celestial.zoomed_asteroids_orbit_step110" + }, + "zoomed_asteroids_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_110", + "to": "$ast_rev_111", + "next": "@celestial.zoomed_asteroids_orbit_step111" + }, + "zoomed_asteroids_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_111", + "to": "$ast_rev_112", + "next": "@celestial.zoomed_asteroids_orbit_step112" + }, + "zoomed_asteroids_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_112", + "to": "$ast_rev_113", + "next": "@celestial.zoomed_asteroids_orbit_step113" + }, + "zoomed_asteroids_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_113", + "to": "$ast_rev_114", + "next": "@celestial.zoomed_asteroids_orbit_step114" + }, + "zoomed_asteroids_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_114", + "to": "$ast_rev_115", + "next": "@celestial.zoomed_asteroids_orbit_step115" + }, + "zoomed_asteroids_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_115", + "to": "$ast_rev_116", + "next": "@celestial.zoomed_asteroids_orbit_step116" + }, + "zoomed_asteroids_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_116", + "to": "$ast_rev_117", + "next": "@celestial.zoomed_asteroids_orbit_step117" + }, + "zoomed_asteroids_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_117", + "to": "$ast_rev_118", + "next": "@celestial.zoomed_asteroids_orbit_step118" + }, + "zoomed_asteroids_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_118", + "to": "$ast_rev_119", + "next": "@celestial.zoomed_asteroids_orbit_step119" + }, + "zoomed_asteroids_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_119", + "to": "$ast_rev_120", + "next": "@celestial.zoomed_asteroids_orbit_step120" + }, + "zoomed_asteroids_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_120", + "to": "$ast_rev_121", + "next": "@celestial.zoomed_asteroids_orbit_step121" + }, + "zoomed_asteroids_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_121", + "to": "$ast_rev_122", + "next": "@celestial.zoomed_asteroids_orbit_step122" + }, + "zoomed_asteroids_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_122", + "to": "$ast_rev_123", + "next": "@celestial.zoomed_asteroids_orbit_step123" + }, + "zoomed_asteroids_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_123", + "to": "$ast_rev_124", + "next": "@celestial.zoomed_asteroids_orbit_step124" + }, + "zoomed_asteroids_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_124", + "to": "$ast_rev_125", + "next": "@celestial.zoomed_asteroids_orbit_step125" + }, + "zoomed_asteroids_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_125", + "to": "$ast_rev_126", + "next": "@celestial.zoomed_asteroids_orbit_step126" + }, + "zoomed_asteroids_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_126", + "to": "$ast_rev_127", + "next": "@celestial.zoomed_asteroids_orbit_step127" + }, + "zoomed_asteroids_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_127", + "to": "$ast_rev_128", + "next": "@celestial.zoomed_asteroids_orbit_step128" + }, + "zoomed_asteroids_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast_rev_128", + "to": "$ast_rev_1", + "next": "@celestial.zoomed_asteroids_orbit_step1" + }, + "zoomed_jupiter_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_1", + "to": "$jup_rev_2", + "next": "@celestial.zoomed_jupiter_orbit_step2" + }, + "zoomed_jupiter_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_2", + "to": "$jup_rev_3", + "next": "@celestial.zoomed_jupiter_orbit_step3" + }, + "zoomed_jupiter_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_3", + "to": "$jup_rev_4", + "next": "@celestial.zoomed_jupiter_orbit_step4" + }, + "zoomed_jupiter_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_4", + "to": "$jup_rev_5", + "next": "@celestial.zoomed_jupiter_orbit_step5" + }, + "zoomed_jupiter_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_5", + "to": "$jup_rev_6", + "next": "@celestial.zoomed_jupiter_orbit_step6" + }, + "zoomed_jupiter_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_6", + "to": "$jup_rev_7", + "next": "@celestial.zoomed_jupiter_orbit_step7" + }, + "zoomed_jupiter_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_7", + "to": "$jup_rev_8", + "next": "@celestial.zoomed_jupiter_orbit_step8" + }, + "zoomed_jupiter_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_8", + "to": "$jup_rev_9", + "next": "@celestial.zoomed_jupiter_orbit_step9" + }, + "zoomed_jupiter_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_9", + "to": "$jup_rev_10", + "next": "@celestial.zoomed_jupiter_orbit_step10" + }, + "zoomed_jupiter_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_10", + "to": "$jup_rev_11", + "next": "@celestial.zoomed_jupiter_orbit_step11" + }, + "zoomed_jupiter_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_11", + "to": "$jup_rev_12", + "next": "@celestial.zoomed_jupiter_orbit_step12" + }, + "zoomed_jupiter_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_12", + "to": "$jup_rev_13", + "next": "@celestial.zoomed_jupiter_orbit_step13" + }, + "zoomed_jupiter_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_13", + "to": "$jup_rev_14", + "next": "@celestial.zoomed_jupiter_orbit_step14" + }, + "zoomed_jupiter_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_14", + "to": "$jup_rev_15", + "next": "@celestial.zoomed_jupiter_orbit_step15" + }, + "zoomed_jupiter_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_15", + "to": "$jup_rev_16", + "next": "@celestial.zoomed_jupiter_orbit_step16" + }, + "zoomed_jupiter_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_16", + "to": "$jup_rev_17", + "next": "@celestial.zoomed_jupiter_orbit_step17" + }, + "zoomed_jupiter_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_17", + "to": "$jup_rev_18", + "next": "@celestial.zoomed_jupiter_orbit_step18" + }, + "zoomed_jupiter_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_18", + "to": "$jup_rev_19", + "next": "@celestial.zoomed_jupiter_orbit_step19" + }, + "zoomed_jupiter_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_19", + "to": "$jup_rev_20", + "next": "@celestial.zoomed_jupiter_orbit_step20" + }, + "zoomed_jupiter_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_20", + "to": "$jup_rev_21", + "next": "@celestial.zoomed_jupiter_orbit_step21" + }, + "zoomed_jupiter_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_21", + "to": "$jup_rev_22", + "next": "@celestial.zoomed_jupiter_orbit_step22" + }, + "zoomed_jupiter_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_22", + "to": "$jup_rev_23", + "next": "@celestial.zoomed_jupiter_orbit_step23" + }, + "zoomed_jupiter_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_23", + "to": "$jup_rev_24", + "next": "@celestial.zoomed_jupiter_orbit_step24" + }, + "zoomed_jupiter_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_24", + "to": "$jup_rev_25", + "next": "@celestial.zoomed_jupiter_orbit_step25" + }, + "zoomed_jupiter_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_25", + "to": "$jup_rev_26", + "next": "@celestial.zoomed_jupiter_orbit_step26" + }, + "zoomed_jupiter_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_26", + "to": "$jup_rev_27", + "next": "@celestial.zoomed_jupiter_orbit_step27" + }, + "zoomed_jupiter_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_27", + "to": "$jup_rev_28", + "next": "@celestial.zoomed_jupiter_orbit_step28" + }, + "zoomed_jupiter_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_28", + "to": "$jup_rev_29", + "next": "@celestial.zoomed_jupiter_orbit_step29" + }, + "zoomed_jupiter_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_29", + "to": "$jup_rev_30", + "next": "@celestial.zoomed_jupiter_orbit_step30" + }, + "zoomed_jupiter_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_30", + "to": "$jup_rev_31", + "next": "@celestial.zoomed_jupiter_orbit_step31" + }, + "zoomed_jupiter_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_31", + "to": "$jup_rev_32", + "next": "@celestial.zoomed_jupiter_orbit_step32" + }, + "zoomed_jupiter_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_32", + "to": "$jup_rev_33", + "next": "@celestial.zoomed_jupiter_orbit_step33" + }, + "zoomed_jupiter_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_33", + "to": "$jup_rev_34", + "next": "@celestial.zoomed_jupiter_orbit_step34" + }, + "zoomed_jupiter_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_34", + "to": "$jup_rev_35", + "next": "@celestial.zoomed_jupiter_orbit_step35" + }, + "zoomed_jupiter_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_35", + "to": "$jup_rev_36", + "next": "@celestial.zoomed_jupiter_orbit_step36" + }, + "zoomed_jupiter_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_36", + "to": "$jup_rev_37", + "next": "@celestial.zoomed_jupiter_orbit_step37" + }, + "zoomed_jupiter_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_37", + "to": "$jup_rev_38", + "next": "@celestial.zoomed_jupiter_orbit_step38" + }, + "zoomed_jupiter_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_38", + "to": "$jup_rev_39", + "next": "@celestial.zoomed_jupiter_orbit_step39" + }, + "zoomed_jupiter_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_39", + "to": "$jup_rev_40", + "next": "@celestial.zoomed_jupiter_orbit_step40" + }, + "zoomed_jupiter_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_40", + "to": "$jup_rev_41", + "next": "@celestial.zoomed_jupiter_orbit_step41" + }, + "zoomed_jupiter_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_41", + "to": "$jup_rev_42", + "next": "@celestial.zoomed_jupiter_orbit_step42" + }, + "zoomed_jupiter_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_42", + "to": "$jup_rev_43", + "next": "@celestial.zoomed_jupiter_orbit_step43" + }, + "zoomed_jupiter_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_43", + "to": "$jup_rev_44", + "next": "@celestial.zoomed_jupiter_orbit_step44" + }, + "zoomed_jupiter_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_44", + "to": "$jup_rev_45", + "next": "@celestial.zoomed_jupiter_orbit_step45" + }, + "zoomed_jupiter_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_45", + "to": "$jup_rev_46", + "next": "@celestial.zoomed_jupiter_orbit_step46" + }, + "zoomed_jupiter_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_46", + "to": "$jup_rev_47", + "next": "@celestial.zoomed_jupiter_orbit_step47" + }, + "zoomed_jupiter_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_47", + "to": "$jup_rev_48", + "next": "@celestial.zoomed_jupiter_orbit_step48" + }, + "zoomed_jupiter_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_48", + "to": "$jup_rev_49", + "next": "@celestial.zoomed_jupiter_orbit_step49" + }, + "zoomed_jupiter_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_49", + "to": "$jup_rev_50", + "next": "@celestial.zoomed_jupiter_orbit_step50" + }, + "zoomed_jupiter_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_50", + "to": "$jup_rev_51", + "next": "@celestial.zoomed_jupiter_orbit_step51" + }, + "zoomed_jupiter_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_51", + "to": "$jup_rev_52", + "next": "@celestial.zoomed_jupiter_orbit_step52" + }, + "zoomed_jupiter_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_52", + "to": "$jup_rev_53", + "next": "@celestial.zoomed_jupiter_orbit_step53" + }, + "zoomed_jupiter_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_53", + "to": "$jup_rev_54", + "next": "@celestial.zoomed_jupiter_orbit_step54" + }, + "zoomed_jupiter_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_54", + "to": "$jup_rev_55", + "next": "@celestial.zoomed_jupiter_orbit_step55" + }, + "zoomed_jupiter_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_55", + "to": "$jup_rev_56", + "next": "@celestial.zoomed_jupiter_orbit_step56" + }, + "zoomed_jupiter_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_56", + "to": "$jup_rev_57", + "next": "@celestial.zoomed_jupiter_orbit_step57" + }, + "zoomed_jupiter_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_57", + "to": "$jup_rev_58", + "next": "@celestial.zoomed_jupiter_orbit_step58" + }, + "zoomed_jupiter_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_58", + "to": "$jup_rev_59", + "next": "@celestial.zoomed_jupiter_orbit_step59" + }, + "zoomed_jupiter_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_59", + "to": "$jup_rev_60", + "next": "@celestial.zoomed_jupiter_orbit_step60" + }, + "zoomed_jupiter_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_60", + "to": "$jup_rev_61", + "next": "@celestial.zoomed_jupiter_orbit_step61" + }, + "zoomed_jupiter_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_61", + "to": "$jup_rev_62", + "next": "@celestial.zoomed_jupiter_orbit_step62" + }, + "zoomed_jupiter_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_62", + "to": "$jup_rev_63", + "next": "@celestial.zoomed_jupiter_orbit_step63" + }, + "zoomed_jupiter_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_63", + "to": "$jup_rev_64", + "next": "@celestial.zoomed_jupiter_orbit_step64" + }, + "zoomed_jupiter_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_64", + "to": "$jup_rev_65", + "next": "@celestial.zoomed_jupiter_orbit_step65" + }, + "zoomed_jupiter_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_65", + "to": "$jup_rev_66", + "next": "@celestial.zoomed_jupiter_orbit_step66" + }, + "zoomed_jupiter_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_66", + "to": "$jup_rev_67", + "next": "@celestial.zoomed_jupiter_orbit_step67" + }, + "zoomed_jupiter_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_67", + "to": "$jup_rev_68", + "next": "@celestial.zoomed_jupiter_orbit_step68" + }, + "zoomed_jupiter_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_68", + "to": "$jup_rev_69", + "next": "@celestial.zoomed_jupiter_orbit_step69" + }, + "zoomed_jupiter_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_69", + "to": "$jup_rev_70", + "next": "@celestial.zoomed_jupiter_orbit_step70" + }, + "zoomed_jupiter_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_70", + "to": "$jup_rev_71", + "next": "@celestial.zoomed_jupiter_orbit_step71" + }, + "zoomed_jupiter_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_71", + "to": "$jup_rev_72", + "next": "@celestial.zoomed_jupiter_orbit_step72" + }, + "zoomed_jupiter_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_72", + "to": "$jup_rev_73", + "next": "@celestial.zoomed_jupiter_orbit_step73" + }, + "zoomed_jupiter_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_73", + "to": "$jup_rev_74", + "next": "@celestial.zoomed_jupiter_orbit_step74" + }, + "zoomed_jupiter_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_74", + "to": "$jup_rev_75", + "next": "@celestial.zoomed_jupiter_orbit_step75" + }, + "zoomed_jupiter_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_75", + "to": "$jup_rev_76", + "next": "@celestial.zoomed_jupiter_orbit_step76" + }, + "zoomed_jupiter_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_76", + "to": "$jup_rev_77", + "next": "@celestial.zoomed_jupiter_orbit_step77" + }, + "zoomed_jupiter_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_77", + "to": "$jup_rev_78", + "next": "@celestial.zoomed_jupiter_orbit_step78" + }, + "zoomed_jupiter_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_78", + "to": "$jup_rev_79", + "next": "@celestial.zoomed_jupiter_orbit_step79" + }, + "zoomed_jupiter_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_79", + "to": "$jup_rev_80", + "next": "@celestial.zoomed_jupiter_orbit_step80" + }, + "zoomed_jupiter_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_80", + "to": "$jup_rev_81", + "next": "@celestial.zoomed_jupiter_orbit_step81" + }, + "zoomed_jupiter_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_81", + "to": "$jup_rev_82", + "next": "@celestial.zoomed_jupiter_orbit_step82" + }, + "zoomed_jupiter_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_82", + "to": "$jup_rev_83", + "next": "@celestial.zoomed_jupiter_orbit_step83" + }, + "zoomed_jupiter_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_83", + "to": "$jup_rev_84", + "next": "@celestial.zoomed_jupiter_orbit_step84" + }, + "zoomed_jupiter_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_84", + "to": "$jup_rev_85", + "next": "@celestial.zoomed_jupiter_orbit_step85" + }, + "zoomed_jupiter_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_85", + "to": "$jup_rev_86", + "next": "@celestial.zoomed_jupiter_orbit_step86" + }, + "zoomed_jupiter_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_86", + "to": "$jup_rev_87", + "next": "@celestial.zoomed_jupiter_orbit_step87" + }, + "zoomed_jupiter_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_87", + "to": "$jup_rev_88", + "next": "@celestial.zoomed_jupiter_orbit_step88" + }, + "zoomed_jupiter_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_88", + "to": "$jup_rev_89", + "next": "@celestial.zoomed_jupiter_orbit_step89" + }, + "zoomed_jupiter_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_89", + "to": "$jup_rev_90", + "next": "@celestial.zoomed_jupiter_orbit_step90" + }, + "zoomed_jupiter_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_90", + "to": "$jup_rev_91", + "next": "@celestial.zoomed_jupiter_orbit_step91" + }, + "zoomed_jupiter_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_91", + "to": "$jup_rev_92", + "next": "@celestial.zoomed_jupiter_orbit_step92" + }, + "zoomed_jupiter_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_92", + "to": "$jup_rev_93", + "next": "@celestial.zoomed_jupiter_orbit_step93" + }, + "zoomed_jupiter_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_93", + "to": "$jup_rev_94", + "next": "@celestial.zoomed_jupiter_orbit_step94" + }, + "zoomed_jupiter_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_94", + "to": "$jup_rev_95", + "next": "@celestial.zoomed_jupiter_orbit_step95" + }, + "zoomed_jupiter_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_95", + "to": "$jup_rev_96", + "next": "@celestial.zoomed_jupiter_orbit_step96" + }, + "zoomed_jupiter_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_96", + "to": "$jup_rev_97", + "next": "@celestial.zoomed_jupiter_orbit_step97" + }, + "zoomed_jupiter_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_97", + "to": "$jup_rev_98", + "next": "@celestial.zoomed_jupiter_orbit_step98" + }, + "zoomed_jupiter_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_98", + "to": "$jup_rev_99", + "next": "@celestial.zoomed_jupiter_orbit_step99" + }, + "zoomed_jupiter_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_99", + "to": "$jup_rev_100", + "next": "@celestial.zoomed_jupiter_orbit_step100" + }, + "zoomed_jupiter_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_100", + "to": "$jup_rev_101", + "next": "@celestial.zoomed_jupiter_orbit_step101" + }, + "zoomed_jupiter_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_101", + "to": "$jup_rev_102", + "next": "@celestial.zoomed_jupiter_orbit_step102" + }, + "zoomed_jupiter_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_102", + "to": "$jup_rev_103", + "next": "@celestial.zoomed_jupiter_orbit_step103" + }, + "zoomed_jupiter_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_103", + "to": "$jup_rev_104", + "next": "@celestial.zoomed_jupiter_orbit_step104" + }, + "zoomed_jupiter_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_104", + "to": "$jup_rev_105", + "next": "@celestial.zoomed_jupiter_orbit_step105" + }, + "zoomed_jupiter_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_105", + "to": "$jup_rev_106", + "next": "@celestial.zoomed_jupiter_orbit_step106" + }, + "zoomed_jupiter_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_106", + "to": "$jup_rev_107", + "next": "@celestial.zoomed_jupiter_orbit_step107" + }, + "zoomed_jupiter_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_107", + "to": "$jup_rev_108", + "next": "@celestial.zoomed_jupiter_orbit_step108" + }, + "zoomed_jupiter_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_108", + "to": "$jup_rev_109", + "next": "@celestial.zoomed_jupiter_orbit_step109" + }, + "zoomed_jupiter_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_109", + "to": "$jup_rev_110", + "next": "@celestial.zoomed_jupiter_orbit_step110" + }, + "zoomed_jupiter_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_110", + "to": "$jup_rev_111", + "next": "@celestial.zoomed_jupiter_orbit_step111" + }, + "zoomed_jupiter_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_111", + "to": "$jup_rev_112", + "next": "@celestial.zoomed_jupiter_orbit_step112" + }, + "zoomed_jupiter_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_112", + "to": "$jup_rev_113", + "next": "@celestial.zoomed_jupiter_orbit_step113" + }, + "zoomed_jupiter_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_113", + "to": "$jup_rev_114", + "next": "@celestial.zoomed_jupiter_orbit_step114" + }, + "zoomed_jupiter_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_114", + "to": "$jup_rev_115", + "next": "@celestial.zoomed_jupiter_orbit_step115" + }, + "zoomed_jupiter_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_115", + "to": "$jup_rev_116", + "next": "@celestial.zoomed_jupiter_orbit_step116" + }, + "zoomed_jupiter_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_116", + "to": "$jup_rev_117", + "next": "@celestial.zoomed_jupiter_orbit_step117" + }, + "zoomed_jupiter_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_117", + "to": "$jup_rev_118", + "next": "@celestial.zoomed_jupiter_orbit_step118" + }, + "zoomed_jupiter_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_118", + "to": "$jup_rev_119", + "next": "@celestial.zoomed_jupiter_orbit_step119" + }, + "zoomed_jupiter_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_119", + "to": "$jup_rev_120", + "next": "@celestial.zoomed_jupiter_orbit_step120" + }, + "zoomed_jupiter_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_120", + "to": "$jup_rev_121", + "next": "@celestial.zoomed_jupiter_orbit_step121" + }, + "zoomed_jupiter_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_121", + "to": "$jup_rev_122", + "next": "@celestial.zoomed_jupiter_orbit_step122" + }, + "zoomed_jupiter_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_122", + "to": "$jup_rev_123", + "next": "@celestial.zoomed_jupiter_orbit_step123" + }, + "zoomed_jupiter_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_123", + "to": "$jup_rev_124", + "next": "@celestial.zoomed_jupiter_orbit_step124" + }, + "zoomed_jupiter_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_124", + "to": "$jup_rev_125", + "next": "@celestial.zoomed_jupiter_orbit_step125" + }, + "zoomed_jupiter_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_125", + "to": "$jup_rev_126", + "next": "@celestial.zoomed_jupiter_orbit_step126" + }, + "zoomed_jupiter_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_126", + "to": "$jup_rev_127", + "next": "@celestial.zoomed_jupiter_orbit_step127" + }, + "zoomed_jupiter_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_127", + "to": "$jup_rev_128", + "next": "@celestial.zoomed_jupiter_orbit_step128" + }, + "zoomed_jupiter_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup_rev_128", + "to": "$jup_rev_1", + "next": "@celestial.zoomed_jupiter_orbit_step1" + }, + "zoomed_saturn_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_1", + "to": "$sat_rev_2", + "next": "@celestial.zoomed_saturn_orbit_step2" + }, + "zoomed_saturn_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_2", + "to": "$sat_rev_3", + "next": "@celestial.zoomed_saturn_orbit_step3" + }, + "zoomed_saturn_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_3", + "to": "$sat_rev_4", + "next": "@celestial.zoomed_saturn_orbit_step4" + }, + "zoomed_saturn_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_4", + "to": "$sat_rev_5", + "next": "@celestial.zoomed_saturn_orbit_step5" + }, + "zoomed_saturn_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_5", + "to": "$sat_rev_6", + "next": "@celestial.zoomed_saturn_orbit_step6" + }, + "zoomed_saturn_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_6", + "to": "$sat_rev_7", + "next": "@celestial.zoomed_saturn_orbit_step7" + }, + "zoomed_saturn_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_7", + "to": "$sat_rev_8", + "next": "@celestial.zoomed_saturn_orbit_step8" + }, + "zoomed_saturn_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_8", + "to": "$sat_rev_9", + "next": "@celestial.zoomed_saturn_orbit_step9" + }, + "zoomed_saturn_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_9", + "to": "$sat_rev_10", + "next": "@celestial.zoomed_saturn_orbit_step10" + }, + "zoomed_saturn_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_10", + "to": "$sat_rev_11", + "next": "@celestial.zoomed_saturn_orbit_step11" + }, + "zoomed_saturn_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_11", + "to": "$sat_rev_12", + "next": "@celestial.zoomed_saturn_orbit_step12" + }, + "zoomed_saturn_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_12", + "to": "$sat_rev_13", + "next": "@celestial.zoomed_saturn_orbit_step13" + }, + "zoomed_saturn_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_13", + "to": "$sat_rev_14", + "next": "@celestial.zoomed_saturn_orbit_step14" + }, + "zoomed_saturn_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_14", + "to": "$sat_rev_15", + "next": "@celestial.zoomed_saturn_orbit_step15" + }, + "zoomed_saturn_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_15", + "to": "$sat_rev_16", + "next": "@celestial.zoomed_saturn_orbit_step16" + }, + "zoomed_saturn_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_16", + "to": "$sat_rev_17", + "next": "@celestial.zoomed_saturn_orbit_step17" + }, + "zoomed_saturn_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_17", + "to": "$sat_rev_18", + "next": "@celestial.zoomed_saturn_orbit_step18" + }, + "zoomed_saturn_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_18", + "to": "$sat_rev_19", + "next": "@celestial.zoomed_saturn_orbit_step19" + }, + "zoomed_saturn_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_19", + "to": "$sat_rev_20", + "next": "@celestial.zoomed_saturn_orbit_step20" + }, + "zoomed_saturn_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_20", + "to": "$sat_rev_21", + "next": "@celestial.zoomed_saturn_orbit_step21" + }, + "zoomed_saturn_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_21", + "to": "$sat_rev_22", + "next": "@celestial.zoomed_saturn_orbit_step22" + }, + "zoomed_saturn_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_22", + "to": "$sat_rev_23", + "next": "@celestial.zoomed_saturn_orbit_step23" + }, + "zoomed_saturn_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_23", + "to": "$sat_rev_24", + "next": "@celestial.zoomed_saturn_orbit_step24" + }, + "zoomed_saturn_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_24", + "to": "$sat_rev_25", + "next": "@celestial.zoomed_saturn_orbit_step25" + }, + "zoomed_saturn_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_25", + "to": "$sat_rev_26", + "next": "@celestial.zoomed_saturn_orbit_step26" + }, + "zoomed_saturn_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_26", + "to": "$sat_rev_27", + "next": "@celestial.zoomed_saturn_orbit_step27" + }, + "zoomed_saturn_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_27", + "to": "$sat_rev_28", + "next": "@celestial.zoomed_saturn_orbit_step28" + }, + "zoomed_saturn_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_28", + "to": "$sat_rev_29", + "next": "@celestial.zoomed_saturn_orbit_step29" + }, + "zoomed_saturn_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_29", + "to": "$sat_rev_30", + "next": "@celestial.zoomed_saturn_orbit_step30" + }, + "zoomed_saturn_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_30", + "to": "$sat_rev_31", + "next": "@celestial.zoomed_saturn_orbit_step31" + }, + "zoomed_saturn_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_31", + "to": "$sat_rev_32", + "next": "@celestial.zoomed_saturn_orbit_step32" + }, + "zoomed_saturn_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_32", + "to": "$sat_rev_33", + "next": "@celestial.zoomed_saturn_orbit_step33" + }, + "zoomed_saturn_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_33", + "to": "$sat_rev_34", + "next": "@celestial.zoomed_saturn_orbit_step34" + }, + "zoomed_saturn_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_34", + "to": "$sat_rev_35", + "next": "@celestial.zoomed_saturn_orbit_step35" + }, + "zoomed_saturn_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_35", + "to": "$sat_rev_36", + "next": "@celestial.zoomed_saturn_orbit_step36" + }, + "zoomed_saturn_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_36", + "to": "$sat_rev_37", + "next": "@celestial.zoomed_saturn_orbit_step37" + }, + "zoomed_saturn_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_37", + "to": "$sat_rev_38", + "next": "@celestial.zoomed_saturn_orbit_step38" + }, + "zoomed_saturn_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_38", + "to": "$sat_rev_39", + "next": "@celestial.zoomed_saturn_orbit_step39" + }, + "zoomed_saturn_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_39", + "to": "$sat_rev_40", + "next": "@celestial.zoomed_saturn_orbit_step40" + }, + "zoomed_saturn_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_40", + "to": "$sat_rev_41", + "next": "@celestial.zoomed_saturn_orbit_step41" + }, + "zoomed_saturn_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_41", + "to": "$sat_rev_42", + "next": "@celestial.zoomed_saturn_orbit_step42" + }, + "zoomed_saturn_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_42", + "to": "$sat_rev_43", + "next": "@celestial.zoomed_saturn_orbit_step43" + }, + "zoomed_saturn_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_43", + "to": "$sat_rev_44", + "next": "@celestial.zoomed_saturn_orbit_step44" + }, + "zoomed_saturn_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_44", + "to": "$sat_rev_45", + "next": "@celestial.zoomed_saturn_orbit_step45" + }, + "zoomed_saturn_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_45", + "to": "$sat_rev_46", + "next": "@celestial.zoomed_saturn_orbit_step46" + }, + "zoomed_saturn_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_46", + "to": "$sat_rev_47", + "next": "@celestial.zoomed_saturn_orbit_step47" + }, + "zoomed_saturn_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_47", + "to": "$sat_rev_48", + "next": "@celestial.zoomed_saturn_orbit_step48" + }, + "zoomed_saturn_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_48", + "to": "$sat_rev_49", + "next": "@celestial.zoomed_saturn_orbit_step49" + }, + "zoomed_saturn_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_49", + "to": "$sat_rev_50", + "next": "@celestial.zoomed_saturn_orbit_step50" + }, + "zoomed_saturn_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_50", + "to": "$sat_rev_51", + "next": "@celestial.zoomed_saturn_orbit_step51" + }, + "zoomed_saturn_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_51", + "to": "$sat_rev_52", + "next": "@celestial.zoomed_saturn_orbit_step52" + }, + "zoomed_saturn_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_52", + "to": "$sat_rev_53", + "next": "@celestial.zoomed_saturn_orbit_step53" + }, + "zoomed_saturn_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_53", + "to": "$sat_rev_54", + "next": "@celestial.zoomed_saturn_orbit_step54" + }, + "zoomed_saturn_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_54", + "to": "$sat_rev_55", + "next": "@celestial.zoomed_saturn_orbit_step55" + }, + "zoomed_saturn_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_55", + "to": "$sat_rev_56", + "next": "@celestial.zoomed_saturn_orbit_step56" + }, + "zoomed_saturn_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_56", + "to": "$sat_rev_57", + "next": "@celestial.zoomed_saturn_orbit_step57" + }, + "zoomed_saturn_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_57", + "to": "$sat_rev_58", + "next": "@celestial.zoomed_saturn_orbit_step58" + }, + "zoomed_saturn_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_58", + "to": "$sat_rev_59", + "next": "@celestial.zoomed_saturn_orbit_step59" + }, + "zoomed_saturn_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_59", + "to": "$sat_rev_60", + "next": "@celestial.zoomed_saturn_orbit_step60" + }, + "zoomed_saturn_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_60", + "to": "$sat_rev_61", + "next": "@celestial.zoomed_saturn_orbit_step61" + }, + "zoomed_saturn_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_61", + "to": "$sat_rev_62", + "next": "@celestial.zoomed_saturn_orbit_step62" + }, + "zoomed_saturn_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_62", + "to": "$sat_rev_63", + "next": "@celestial.zoomed_saturn_orbit_step63" + }, + "zoomed_saturn_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_63", + "to": "$sat_rev_64", + "next": "@celestial.zoomed_saturn_orbit_step64" + }, + "zoomed_saturn_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_64", + "to": "$sat_rev_65", + "next": "@celestial.zoomed_saturn_orbit_step65" + }, + "zoomed_saturn_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_65", + "to": "$sat_rev_66", + "next": "@celestial.zoomed_saturn_orbit_step66" + }, + "zoomed_saturn_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_66", + "to": "$sat_rev_67", + "next": "@celestial.zoomed_saturn_orbit_step67" + }, + "zoomed_saturn_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_67", + "to": "$sat_rev_68", + "next": "@celestial.zoomed_saturn_orbit_step68" + }, + "zoomed_saturn_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_68", + "to": "$sat_rev_69", + "next": "@celestial.zoomed_saturn_orbit_step69" + }, + "zoomed_saturn_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_69", + "to": "$sat_rev_70", + "next": "@celestial.zoomed_saturn_orbit_step70" + }, + "zoomed_saturn_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_70", + "to": "$sat_rev_71", + "next": "@celestial.zoomed_saturn_orbit_step71" + }, + "zoomed_saturn_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_71", + "to": "$sat_rev_72", + "next": "@celestial.zoomed_saturn_orbit_step72" + }, + "zoomed_saturn_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_72", + "to": "$sat_rev_73", + "next": "@celestial.zoomed_saturn_orbit_step73" + }, + "zoomed_saturn_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_73", + "to": "$sat_rev_74", + "next": "@celestial.zoomed_saturn_orbit_step74" + }, + "zoomed_saturn_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_74", + "to": "$sat_rev_75", + "next": "@celestial.zoomed_saturn_orbit_step75" + }, + "zoomed_saturn_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_75", + "to": "$sat_rev_76", + "next": "@celestial.zoomed_saturn_orbit_step76" + }, + "zoomed_saturn_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_76", + "to": "$sat_rev_77", + "next": "@celestial.zoomed_saturn_orbit_step77" + }, + "zoomed_saturn_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_77", + "to": "$sat_rev_78", + "next": "@celestial.zoomed_saturn_orbit_step78" + }, + "zoomed_saturn_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_78", + "to": "$sat_rev_79", + "next": "@celestial.zoomed_saturn_orbit_step79" + }, + "zoomed_saturn_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_79", + "to": "$sat_rev_80", + "next": "@celestial.zoomed_saturn_orbit_step80" + }, + "zoomed_saturn_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_80", + "to": "$sat_rev_81", + "next": "@celestial.zoomed_saturn_orbit_step81" + }, + "zoomed_saturn_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_81", + "to": "$sat_rev_82", + "next": "@celestial.zoomed_saturn_orbit_step82" + }, + "zoomed_saturn_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_82", + "to": "$sat_rev_83", + "next": "@celestial.zoomed_saturn_orbit_step83" + }, + "zoomed_saturn_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_83", + "to": "$sat_rev_84", + "next": "@celestial.zoomed_saturn_orbit_step84" + }, + "zoomed_saturn_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_84", + "to": "$sat_rev_85", + "next": "@celestial.zoomed_saturn_orbit_step85" + }, + "zoomed_saturn_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_85", + "to": "$sat_rev_86", + "next": "@celestial.zoomed_saturn_orbit_step86" + }, + "zoomed_saturn_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_86", + "to": "$sat_rev_87", + "next": "@celestial.zoomed_saturn_orbit_step87" + }, + "zoomed_saturn_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_87", + "to": "$sat_rev_88", + "next": "@celestial.zoomed_saturn_orbit_step88" + }, + "zoomed_saturn_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_88", + "to": "$sat_rev_89", + "next": "@celestial.zoomed_saturn_orbit_step89" + }, + "zoomed_saturn_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_89", + "to": "$sat_rev_90", + "next": "@celestial.zoomed_saturn_orbit_step90" + }, + "zoomed_saturn_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_90", + "to": "$sat_rev_91", + "next": "@celestial.zoomed_saturn_orbit_step91" + }, + "zoomed_saturn_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_91", + "to": "$sat_rev_92", + "next": "@celestial.zoomed_saturn_orbit_step92" + }, + "zoomed_saturn_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_92", + "to": "$sat_rev_93", + "next": "@celestial.zoomed_saturn_orbit_step93" + }, + "zoomed_saturn_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_93", + "to": "$sat_rev_94", + "next": "@celestial.zoomed_saturn_orbit_step94" + }, + "zoomed_saturn_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_94", + "to": "$sat_rev_95", + "next": "@celestial.zoomed_saturn_orbit_step95" + }, + "zoomed_saturn_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_95", + "to": "$sat_rev_96", + "next": "@celestial.zoomed_saturn_orbit_step96" + }, + "zoomed_saturn_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_96", + "to": "$sat_rev_97", + "next": "@celestial.zoomed_saturn_orbit_step97" + }, + "zoomed_saturn_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_97", + "to": "$sat_rev_98", + "next": "@celestial.zoomed_saturn_orbit_step98" + }, + "zoomed_saturn_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_98", + "to": "$sat_rev_99", + "next": "@celestial.zoomed_saturn_orbit_step99" + }, + "zoomed_saturn_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_99", + "to": "$sat_rev_100", + "next": "@celestial.zoomed_saturn_orbit_step100" + }, + "zoomed_saturn_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_100", + "to": "$sat_rev_101", + "next": "@celestial.zoomed_saturn_orbit_step101" + }, + "zoomed_saturn_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_101", + "to": "$sat_rev_102", + "next": "@celestial.zoomed_saturn_orbit_step102" + }, + "zoomed_saturn_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_102", + "to": "$sat_rev_103", + "next": "@celestial.zoomed_saturn_orbit_step103" + }, + "zoomed_saturn_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_103", + "to": "$sat_rev_104", + "next": "@celestial.zoomed_saturn_orbit_step104" + }, + "zoomed_saturn_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_104", + "to": "$sat_rev_105", + "next": "@celestial.zoomed_saturn_orbit_step105" + }, + "zoomed_saturn_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_105", + "to": "$sat_rev_106", + "next": "@celestial.zoomed_saturn_orbit_step106" + }, + "zoomed_saturn_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_106", + "to": "$sat_rev_107", + "next": "@celestial.zoomed_saturn_orbit_step107" + }, + "zoomed_saturn_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_107", + "to": "$sat_rev_108", + "next": "@celestial.zoomed_saturn_orbit_step108" + }, + "zoomed_saturn_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_108", + "to": "$sat_rev_109", + "next": "@celestial.zoomed_saturn_orbit_step109" + }, + "zoomed_saturn_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_109", + "to": "$sat_rev_110", + "next": "@celestial.zoomed_saturn_orbit_step110" + }, + "zoomed_saturn_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_110", + "to": "$sat_rev_111", + "next": "@celestial.zoomed_saturn_orbit_step111" + }, + "zoomed_saturn_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_111", + "to": "$sat_rev_112", + "next": "@celestial.zoomed_saturn_orbit_step112" + }, + "zoomed_saturn_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_112", + "to": "$sat_rev_113", + "next": "@celestial.zoomed_saturn_orbit_step113" + }, + "zoomed_saturn_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_113", + "to": "$sat_rev_114", + "next": "@celestial.zoomed_saturn_orbit_step114" + }, + "zoomed_saturn_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_114", + "to": "$sat_rev_115", + "next": "@celestial.zoomed_saturn_orbit_step115" + }, + "zoomed_saturn_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_115", + "to": "$sat_rev_116", + "next": "@celestial.zoomed_saturn_orbit_step116" + }, + "zoomed_saturn_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_116", + "to": "$sat_rev_117", + "next": "@celestial.zoomed_saturn_orbit_step117" + }, + "zoomed_saturn_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_117", + "to": "$sat_rev_118", + "next": "@celestial.zoomed_saturn_orbit_step118" + }, + "zoomed_saturn_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_118", + "to": "$sat_rev_119", + "next": "@celestial.zoomed_saturn_orbit_step119" + }, + "zoomed_saturn_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_119", + "to": "$sat_rev_120", + "next": "@celestial.zoomed_saturn_orbit_step120" + }, + "zoomed_saturn_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_120", + "to": "$sat_rev_121", + "next": "@celestial.zoomed_saturn_orbit_step121" + }, + "zoomed_saturn_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_121", + "to": "$sat_rev_122", + "next": "@celestial.zoomed_saturn_orbit_step122" + }, + "zoomed_saturn_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_122", + "to": "$sat_rev_123", + "next": "@celestial.zoomed_saturn_orbit_step123" + }, + "zoomed_saturn_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_123", + "to": "$sat_rev_124", + "next": "@celestial.zoomed_saturn_orbit_step124" + }, + "zoomed_saturn_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_124", + "to": "$sat_rev_125", + "next": "@celestial.zoomed_saturn_orbit_step125" + }, + "zoomed_saturn_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_125", + "to": "$sat_rev_126", + "next": "@celestial.zoomed_saturn_orbit_step126" + }, + "zoomed_saturn_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_126", + "to": "$sat_rev_127", + "next": "@celestial.zoomed_saturn_orbit_step127" + }, + "zoomed_saturn_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_127", + "to": "$sat_rev_128", + "next": "@celestial.zoomed_saturn_orbit_step128" + }, + "zoomed_saturn_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat_rev_128", + "to": "$sat_rev_1", + "next": "@celestial.zoomed_saturn_orbit_step1" + }, + "zoomed_uranus_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_1", + "to": "$ura_rev_2", + "next": "@celestial.zoomed_uranus_orbit_step2" + }, + "zoomed_uranus_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_2", + "to": "$ura_rev_3", + "next": "@celestial.zoomed_uranus_orbit_step3" + }, + "zoomed_uranus_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_3", + "to": "$ura_rev_4", + "next": "@celestial.zoomed_uranus_orbit_step4" + }, + "zoomed_uranus_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_4", + "to": "$ura_rev_5", + "next": "@celestial.zoomed_uranus_orbit_step5" + }, + "zoomed_uranus_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_5", + "to": "$ura_rev_6", + "next": "@celestial.zoomed_uranus_orbit_step6" + }, + "zoomed_uranus_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_6", + "to": "$ura_rev_7", + "next": "@celestial.zoomed_uranus_orbit_step7" + }, + "zoomed_uranus_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_7", + "to": "$ura_rev_8", + "next": "@celestial.zoomed_uranus_orbit_step8" + }, + "zoomed_uranus_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_8", + "to": "$ura_rev_9", + "next": "@celestial.zoomed_uranus_orbit_step9" + }, + "zoomed_uranus_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_9", + "to": "$ura_rev_10", + "next": "@celestial.zoomed_uranus_orbit_step10" + }, + "zoomed_uranus_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_10", + "to": "$ura_rev_11", + "next": "@celestial.zoomed_uranus_orbit_step11" + }, + "zoomed_uranus_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_11", + "to": "$ura_rev_12", + "next": "@celestial.zoomed_uranus_orbit_step12" + }, + "zoomed_uranus_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_12", + "to": "$ura_rev_13", + "next": "@celestial.zoomed_uranus_orbit_step13" + }, + "zoomed_uranus_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_13", + "to": "$ura_rev_14", + "next": "@celestial.zoomed_uranus_orbit_step14" + }, + "zoomed_uranus_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_14", + "to": "$ura_rev_15", + "next": "@celestial.zoomed_uranus_orbit_step15" + }, + "zoomed_uranus_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_15", + "to": "$ura_rev_16", + "next": "@celestial.zoomed_uranus_orbit_step16" + }, + "zoomed_uranus_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_16", + "to": "$ura_rev_17", + "next": "@celestial.zoomed_uranus_orbit_step17" + }, + "zoomed_uranus_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_17", + "to": "$ura_rev_18", + "next": "@celestial.zoomed_uranus_orbit_step18" + }, + "zoomed_uranus_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_18", + "to": "$ura_rev_19", + "next": "@celestial.zoomed_uranus_orbit_step19" + }, + "zoomed_uranus_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_19", + "to": "$ura_rev_20", + "next": "@celestial.zoomed_uranus_orbit_step20" + }, + "zoomed_uranus_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_20", + "to": "$ura_rev_21", + "next": "@celestial.zoomed_uranus_orbit_step21" + }, + "zoomed_uranus_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_21", + "to": "$ura_rev_22", + "next": "@celestial.zoomed_uranus_orbit_step22" + }, + "zoomed_uranus_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_22", + "to": "$ura_rev_23", + "next": "@celestial.zoomed_uranus_orbit_step23" + }, + "zoomed_uranus_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_23", + "to": "$ura_rev_24", + "next": "@celestial.zoomed_uranus_orbit_step24" + }, + "zoomed_uranus_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_24", + "to": "$ura_rev_25", + "next": "@celestial.zoomed_uranus_orbit_step25" + }, + "zoomed_uranus_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_25", + "to": "$ura_rev_26", + "next": "@celestial.zoomed_uranus_orbit_step26" + }, + "zoomed_uranus_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_26", + "to": "$ura_rev_27", + "next": "@celestial.zoomed_uranus_orbit_step27" + }, + "zoomed_uranus_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_27", + "to": "$ura_rev_28", + "next": "@celestial.zoomed_uranus_orbit_step28" + }, + "zoomed_uranus_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_28", + "to": "$ura_rev_29", + "next": "@celestial.zoomed_uranus_orbit_step29" + }, + "zoomed_uranus_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_29", + "to": "$ura_rev_30", + "next": "@celestial.zoomed_uranus_orbit_step30" + }, + "zoomed_uranus_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_30", + "to": "$ura_rev_31", + "next": "@celestial.zoomed_uranus_orbit_step31" + }, + "zoomed_uranus_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_31", + "to": "$ura_rev_32", + "next": "@celestial.zoomed_uranus_orbit_step32" + }, + "zoomed_uranus_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_32", + "to": "$ura_rev_33", + "next": "@celestial.zoomed_uranus_orbit_step33" + }, + "zoomed_uranus_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_33", + "to": "$ura_rev_34", + "next": "@celestial.zoomed_uranus_orbit_step34" + }, + "zoomed_uranus_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_34", + "to": "$ura_rev_35", + "next": "@celestial.zoomed_uranus_orbit_step35" + }, + "zoomed_uranus_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_35", + "to": "$ura_rev_36", + "next": "@celestial.zoomed_uranus_orbit_step36" + }, + "zoomed_uranus_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_36", + "to": "$ura_rev_37", + "next": "@celestial.zoomed_uranus_orbit_step37" + }, + "zoomed_uranus_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_37", + "to": "$ura_rev_38", + "next": "@celestial.zoomed_uranus_orbit_step38" + }, + "zoomed_uranus_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_38", + "to": "$ura_rev_39", + "next": "@celestial.zoomed_uranus_orbit_step39" + }, + "zoomed_uranus_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_39", + "to": "$ura_rev_40", + "next": "@celestial.zoomed_uranus_orbit_step40" + }, + "zoomed_uranus_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_40", + "to": "$ura_rev_41", + "next": "@celestial.zoomed_uranus_orbit_step41" + }, + "zoomed_uranus_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_41", + "to": "$ura_rev_42", + "next": "@celestial.zoomed_uranus_orbit_step42" + }, + "zoomed_uranus_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_42", + "to": "$ura_rev_43", + "next": "@celestial.zoomed_uranus_orbit_step43" + }, + "zoomed_uranus_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_43", + "to": "$ura_rev_44", + "next": "@celestial.zoomed_uranus_orbit_step44" + }, + "zoomed_uranus_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_44", + "to": "$ura_rev_45", + "next": "@celestial.zoomed_uranus_orbit_step45" + }, + "zoomed_uranus_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_45", + "to": "$ura_rev_46", + "next": "@celestial.zoomed_uranus_orbit_step46" + }, + "zoomed_uranus_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_46", + "to": "$ura_rev_47", + "next": "@celestial.zoomed_uranus_orbit_step47" + }, + "zoomed_uranus_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_47", + "to": "$ura_rev_48", + "next": "@celestial.zoomed_uranus_orbit_step48" + }, + "zoomed_uranus_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_48", + "to": "$ura_rev_49", + "next": "@celestial.zoomed_uranus_orbit_step49" + }, + "zoomed_uranus_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_49", + "to": "$ura_rev_50", + "next": "@celestial.zoomed_uranus_orbit_step50" + }, + "zoomed_uranus_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_50", + "to": "$ura_rev_51", + "next": "@celestial.zoomed_uranus_orbit_step51" + }, + "zoomed_uranus_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_51", + "to": "$ura_rev_52", + "next": "@celestial.zoomed_uranus_orbit_step52" + }, + "zoomed_uranus_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_52", + "to": "$ura_rev_53", + "next": "@celestial.zoomed_uranus_orbit_step53" + }, + "zoomed_uranus_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_53", + "to": "$ura_rev_54", + "next": "@celestial.zoomed_uranus_orbit_step54" + }, + "zoomed_uranus_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_54", + "to": "$ura_rev_55", + "next": "@celestial.zoomed_uranus_orbit_step55" + }, + "zoomed_uranus_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_55", + "to": "$ura_rev_56", + "next": "@celestial.zoomed_uranus_orbit_step56" + }, + "zoomed_uranus_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_56", + "to": "$ura_rev_57", + "next": "@celestial.zoomed_uranus_orbit_step57" + }, + "zoomed_uranus_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_57", + "to": "$ura_rev_58", + "next": "@celestial.zoomed_uranus_orbit_step58" + }, + "zoomed_uranus_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_58", + "to": "$ura_rev_59", + "next": "@celestial.zoomed_uranus_orbit_step59" + }, + "zoomed_uranus_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_59", + "to": "$ura_rev_60", + "next": "@celestial.zoomed_uranus_orbit_step60" + }, + "zoomed_uranus_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_60", + "to": "$ura_rev_61", + "next": "@celestial.zoomed_uranus_orbit_step61" + }, + "zoomed_uranus_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_61", + "to": "$ura_rev_62", + "next": "@celestial.zoomed_uranus_orbit_step62" + }, + "zoomed_uranus_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_62", + "to": "$ura_rev_63", + "next": "@celestial.zoomed_uranus_orbit_step63" + }, + "zoomed_uranus_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_63", + "to": "$ura_rev_64", + "next": "@celestial.zoomed_uranus_orbit_step64" + }, + "zoomed_uranus_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_64", + "to": "$ura_rev_65", + "next": "@celestial.zoomed_uranus_orbit_step65" + }, + "zoomed_uranus_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_65", + "to": "$ura_rev_66", + "next": "@celestial.zoomed_uranus_orbit_step66" + }, + "zoomed_uranus_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_66", + "to": "$ura_rev_67", + "next": "@celestial.zoomed_uranus_orbit_step67" + }, + "zoomed_uranus_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_67", + "to": "$ura_rev_68", + "next": "@celestial.zoomed_uranus_orbit_step68" + }, + "zoomed_uranus_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_68", + "to": "$ura_rev_69", + "next": "@celestial.zoomed_uranus_orbit_step69" + }, + "zoomed_uranus_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_69", + "to": "$ura_rev_70", + "next": "@celestial.zoomed_uranus_orbit_step70" + }, + "zoomed_uranus_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_70", + "to": "$ura_rev_71", + "next": "@celestial.zoomed_uranus_orbit_step71" + }, + "zoomed_uranus_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_71", + "to": "$ura_rev_72", + "next": "@celestial.zoomed_uranus_orbit_step72" + }, + "zoomed_uranus_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_72", + "to": "$ura_rev_73", + "next": "@celestial.zoomed_uranus_orbit_step73" + }, + "zoomed_uranus_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_73", + "to": "$ura_rev_74", + "next": "@celestial.zoomed_uranus_orbit_step74" + }, + "zoomed_uranus_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_74", + "to": "$ura_rev_75", + "next": "@celestial.zoomed_uranus_orbit_step75" + }, + "zoomed_uranus_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_75", + "to": "$ura_rev_76", + "next": "@celestial.zoomed_uranus_orbit_step76" + }, + "zoomed_uranus_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_76", + "to": "$ura_rev_77", + "next": "@celestial.zoomed_uranus_orbit_step77" + }, + "zoomed_uranus_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_77", + "to": "$ura_rev_78", + "next": "@celestial.zoomed_uranus_orbit_step78" + }, + "zoomed_uranus_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_78", + "to": "$ura_rev_79", + "next": "@celestial.zoomed_uranus_orbit_step79" + }, + "zoomed_uranus_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_79", + "to": "$ura_rev_80", + "next": "@celestial.zoomed_uranus_orbit_step80" + }, + "zoomed_uranus_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_80", + "to": "$ura_rev_81", + "next": "@celestial.zoomed_uranus_orbit_step81" + }, + "zoomed_uranus_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_81", + "to": "$ura_rev_82", + "next": "@celestial.zoomed_uranus_orbit_step82" + }, + "zoomed_uranus_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_82", + "to": "$ura_rev_83", + "next": "@celestial.zoomed_uranus_orbit_step83" + }, + "zoomed_uranus_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_83", + "to": "$ura_rev_84", + "next": "@celestial.zoomed_uranus_orbit_step84" + }, + "zoomed_uranus_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_84", + "to": "$ura_rev_85", + "next": "@celestial.zoomed_uranus_orbit_step85" + }, + "zoomed_uranus_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_85", + "to": "$ura_rev_86", + "next": "@celestial.zoomed_uranus_orbit_step86" + }, + "zoomed_uranus_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_86", + "to": "$ura_rev_87", + "next": "@celestial.zoomed_uranus_orbit_step87" + }, + "zoomed_uranus_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_87", + "to": "$ura_rev_88", + "next": "@celestial.zoomed_uranus_orbit_step88" + }, + "zoomed_uranus_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_88", + "to": "$ura_rev_89", + "next": "@celestial.zoomed_uranus_orbit_step89" + }, + "zoomed_uranus_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_89", + "to": "$ura_rev_90", + "next": "@celestial.zoomed_uranus_orbit_step90" + }, + "zoomed_uranus_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_90", + "to": "$ura_rev_91", + "next": "@celestial.zoomed_uranus_orbit_step91" + }, + "zoomed_uranus_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_91", + "to": "$ura_rev_92", + "next": "@celestial.zoomed_uranus_orbit_step92" + }, + "zoomed_uranus_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_92", + "to": "$ura_rev_93", + "next": "@celestial.zoomed_uranus_orbit_step93" + }, + "zoomed_uranus_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_93", + "to": "$ura_rev_94", + "next": "@celestial.zoomed_uranus_orbit_step94" + }, + "zoomed_uranus_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_94", + "to": "$ura_rev_95", + "next": "@celestial.zoomed_uranus_orbit_step95" + }, + "zoomed_uranus_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_95", + "to": "$ura_rev_96", + "next": "@celestial.zoomed_uranus_orbit_step96" + }, + "zoomed_uranus_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_96", + "to": "$ura_rev_97", + "next": "@celestial.zoomed_uranus_orbit_step97" + }, + "zoomed_uranus_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_97", + "to": "$ura_rev_98", + "next": "@celestial.zoomed_uranus_orbit_step98" + }, + "zoomed_uranus_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_98", + "to": "$ura_rev_99", + "next": "@celestial.zoomed_uranus_orbit_step99" + }, + "zoomed_uranus_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_99", + "to": "$ura_rev_100", + "next": "@celestial.zoomed_uranus_orbit_step100" + }, + "zoomed_uranus_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_100", + "to": "$ura_rev_101", + "next": "@celestial.zoomed_uranus_orbit_step101" + }, + "zoomed_uranus_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_101", + "to": "$ura_rev_102", + "next": "@celestial.zoomed_uranus_orbit_step102" + }, + "zoomed_uranus_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_102", + "to": "$ura_rev_103", + "next": "@celestial.zoomed_uranus_orbit_step103" + }, + "zoomed_uranus_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_103", + "to": "$ura_rev_104", + "next": "@celestial.zoomed_uranus_orbit_step104" + }, + "zoomed_uranus_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_104", + "to": "$ura_rev_105", + "next": "@celestial.zoomed_uranus_orbit_step105" + }, + "zoomed_uranus_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_105", + "to": "$ura_rev_106", + "next": "@celestial.zoomed_uranus_orbit_step106" + }, + "zoomed_uranus_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_106", + "to": "$ura_rev_107", + "next": "@celestial.zoomed_uranus_orbit_step107" + }, + "zoomed_uranus_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_107", + "to": "$ura_rev_108", + "next": "@celestial.zoomed_uranus_orbit_step108" + }, + "zoomed_uranus_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_108", + "to": "$ura_rev_109", + "next": "@celestial.zoomed_uranus_orbit_step109" + }, + "zoomed_uranus_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_109", + "to": "$ura_rev_110", + "next": "@celestial.zoomed_uranus_orbit_step110" + }, + "zoomed_uranus_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_110", + "to": "$ura_rev_111", + "next": "@celestial.zoomed_uranus_orbit_step111" + }, + "zoomed_uranus_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_111", + "to": "$ura_rev_112", + "next": "@celestial.zoomed_uranus_orbit_step112" + }, + "zoomed_uranus_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_112", + "to": "$ura_rev_113", + "next": "@celestial.zoomed_uranus_orbit_step113" + }, + "zoomed_uranus_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_113", + "to": "$ura_rev_114", + "next": "@celestial.zoomed_uranus_orbit_step114" + }, + "zoomed_uranus_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_114", + "to": "$ura_rev_115", + "next": "@celestial.zoomed_uranus_orbit_step115" + }, + "zoomed_uranus_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_115", + "to": "$ura_rev_116", + "next": "@celestial.zoomed_uranus_orbit_step116" + }, + "zoomed_uranus_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_116", + "to": "$ura_rev_117", + "next": "@celestial.zoomed_uranus_orbit_step117" + }, + "zoomed_uranus_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_117", + "to": "$ura_rev_118", + "next": "@celestial.zoomed_uranus_orbit_step118" + }, + "zoomed_uranus_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_118", + "to": "$ura_rev_119", + "next": "@celestial.zoomed_uranus_orbit_step119" + }, + "zoomed_uranus_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_119", + "to": "$ura_rev_120", + "next": "@celestial.zoomed_uranus_orbit_step120" + }, + "zoomed_uranus_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_120", + "to": "$ura_rev_121", + "next": "@celestial.zoomed_uranus_orbit_step121" + }, + "zoomed_uranus_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_121", + "to": "$ura_rev_122", + "next": "@celestial.zoomed_uranus_orbit_step122" + }, + "zoomed_uranus_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_122", + "to": "$ura_rev_123", + "next": "@celestial.zoomed_uranus_orbit_step123" + }, + "zoomed_uranus_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_123", + "to": "$ura_rev_124", + "next": "@celestial.zoomed_uranus_orbit_step124" + }, + "zoomed_uranus_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_124", + "to": "$ura_rev_125", + "next": "@celestial.zoomed_uranus_orbit_step125" + }, + "zoomed_uranus_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_125", + "to": "$ura_rev_126", + "next": "@celestial.zoomed_uranus_orbit_step126" + }, + "zoomed_uranus_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_126", + "to": "$ura_rev_127", + "next": "@celestial.zoomed_uranus_orbit_step127" + }, + "zoomed_uranus_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_127", + "to": "$ura_rev_128", + "next": "@celestial.zoomed_uranus_orbit_step128" + }, + "zoomed_uranus_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura_rev_128", + "to": "$ura_rev_1", + "next": "@celestial.zoomed_uranus_orbit_step1" + }, + "zoomed_neptune_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_1", + "to": "$nep_rev_2", + "next": "@celestial.zoomed_neptune_orbit_step2" + }, + "zoomed_neptune_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_2", + "to": "$nep_rev_3", + "next": "@celestial.zoomed_neptune_orbit_step3" + }, + "zoomed_neptune_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_3", + "to": "$nep_rev_4", + "next": "@celestial.zoomed_neptune_orbit_step4" + }, + "zoomed_neptune_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_4", + "to": "$nep_rev_5", + "next": "@celestial.zoomed_neptune_orbit_step5" + }, + "zoomed_neptune_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_5", + "to": "$nep_rev_6", + "next": "@celestial.zoomed_neptune_orbit_step6" + }, + "zoomed_neptune_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_6", + "to": "$nep_rev_7", + "next": "@celestial.zoomed_neptune_orbit_step7" + }, + "zoomed_neptune_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_7", + "to": "$nep_rev_8", + "next": "@celestial.zoomed_neptune_orbit_step8" + }, + "zoomed_neptune_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_8", + "to": "$nep_rev_9", + "next": "@celestial.zoomed_neptune_orbit_step9" + }, + "zoomed_neptune_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_9", + "to": "$nep_rev_10", + "next": "@celestial.zoomed_neptune_orbit_step10" + }, + "zoomed_neptune_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_10", + "to": "$nep_rev_11", + "next": "@celestial.zoomed_neptune_orbit_step11" + }, + "zoomed_neptune_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_11", + "to": "$nep_rev_12", + "next": "@celestial.zoomed_neptune_orbit_step12" + }, + "zoomed_neptune_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_12", + "to": "$nep_rev_13", + "next": "@celestial.zoomed_neptune_orbit_step13" + }, + "zoomed_neptune_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_13", + "to": "$nep_rev_14", + "next": "@celestial.zoomed_neptune_orbit_step14" + }, + "zoomed_neptune_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_14", + "to": "$nep_rev_15", + "next": "@celestial.zoomed_neptune_orbit_step15" + }, + "zoomed_neptune_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_15", + "to": "$nep_rev_16", + "next": "@celestial.zoomed_neptune_orbit_step16" + }, + "zoomed_neptune_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_16", + "to": "$nep_rev_17", + "next": "@celestial.zoomed_neptune_orbit_step17" + }, + "zoomed_neptune_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_17", + "to": "$nep_rev_18", + "next": "@celestial.zoomed_neptune_orbit_step18" + }, + "zoomed_neptune_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_18", + "to": "$nep_rev_19", + "next": "@celestial.zoomed_neptune_orbit_step19" + }, + "zoomed_neptune_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_19", + "to": "$nep_rev_20", + "next": "@celestial.zoomed_neptune_orbit_step20" + }, + "zoomed_neptune_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_20", + "to": "$nep_rev_21", + "next": "@celestial.zoomed_neptune_orbit_step21" + }, + "zoomed_neptune_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_21", + "to": "$nep_rev_22", + "next": "@celestial.zoomed_neptune_orbit_step22" + }, + "zoomed_neptune_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_22", + "to": "$nep_rev_23", + "next": "@celestial.zoomed_neptune_orbit_step23" + }, + "zoomed_neptune_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_23", + "to": "$nep_rev_24", + "next": "@celestial.zoomed_neptune_orbit_step24" + }, + "zoomed_neptune_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_24", + "to": "$nep_rev_25", + "next": "@celestial.zoomed_neptune_orbit_step25" + }, + "zoomed_neptune_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_25", + "to": "$nep_rev_26", + "next": "@celestial.zoomed_neptune_orbit_step26" + }, + "zoomed_neptune_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_26", + "to": "$nep_rev_27", + "next": "@celestial.zoomed_neptune_orbit_step27" + }, + "zoomed_neptune_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_27", + "to": "$nep_rev_28", + "next": "@celestial.zoomed_neptune_orbit_step28" + }, + "zoomed_neptune_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_28", + "to": "$nep_rev_29", + "next": "@celestial.zoomed_neptune_orbit_step29" + }, + "zoomed_neptune_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_29", + "to": "$nep_rev_30", + "next": "@celestial.zoomed_neptune_orbit_step30" + }, + "zoomed_neptune_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_30", + "to": "$nep_rev_31", + "next": "@celestial.zoomed_neptune_orbit_step31" + }, + "zoomed_neptune_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_31", + "to": "$nep_rev_32", + "next": "@celestial.zoomed_neptune_orbit_step32" + }, + "zoomed_neptune_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_32", + "to": "$nep_rev_33", + "next": "@celestial.zoomed_neptune_orbit_step33" + }, + "zoomed_neptune_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_33", + "to": "$nep_rev_34", + "next": "@celestial.zoomed_neptune_orbit_step34" + }, + "zoomed_neptune_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_34", + "to": "$nep_rev_35", + "next": "@celestial.zoomed_neptune_orbit_step35" + }, + "zoomed_neptune_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_35", + "to": "$nep_rev_36", + "next": "@celestial.zoomed_neptune_orbit_step36" + }, + "zoomed_neptune_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_36", + "to": "$nep_rev_37", + "next": "@celestial.zoomed_neptune_orbit_step37" + }, + "zoomed_neptune_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_37", + "to": "$nep_rev_38", + "next": "@celestial.zoomed_neptune_orbit_step38" + }, + "zoomed_neptune_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_38", + "to": "$nep_rev_39", + "next": "@celestial.zoomed_neptune_orbit_step39" + }, + "zoomed_neptune_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_39", + "to": "$nep_rev_40", + "next": "@celestial.zoomed_neptune_orbit_step40" + }, + "zoomed_neptune_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_40", + "to": "$nep_rev_41", + "next": "@celestial.zoomed_neptune_orbit_step41" + }, + "zoomed_neptune_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_41", + "to": "$nep_rev_42", + "next": "@celestial.zoomed_neptune_orbit_step42" + }, + "zoomed_neptune_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_42", + "to": "$nep_rev_43", + "next": "@celestial.zoomed_neptune_orbit_step43" + }, + "zoomed_neptune_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_43", + "to": "$nep_rev_44", + "next": "@celestial.zoomed_neptune_orbit_step44" + }, + "zoomed_neptune_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_44", + "to": "$nep_rev_45", + "next": "@celestial.zoomed_neptune_orbit_step45" + }, + "zoomed_neptune_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_45", + "to": "$nep_rev_46", + "next": "@celestial.zoomed_neptune_orbit_step46" + }, + "zoomed_neptune_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_46", + "to": "$nep_rev_47", + "next": "@celestial.zoomed_neptune_orbit_step47" + }, + "zoomed_neptune_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_47", + "to": "$nep_rev_48", + "next": "@celestial.zoomed_neptune_orbit_step48" + }, + "zoomed_neptune_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_48", + "to": "$nep_rev_49", + "next": "@celestial.zoomed_neptune_orbit_step49" + }, + "zoomed_neptune_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_49", + "to": "$nep_rev_50", + "next": "@celestial.zoomed_neptune_orbit_step50" + }, + "zoomed_neptune_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_50", + "to": "$nep_rev_51", + "next": "@celestial.zoomed_neptune_orbit_step51" + }, + "zoomed_neptune_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_51", + "to": "$nep_rev_52", + "next": "@celestial.zoomed_neptune_orbit_step52" + }, + "zoomed_neptune_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_52", + "to": "$nep_rev_53", + "next": "@celestial.zoomed_neptune_orbit_step53" + }, + "zoomed_neptune_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_53", + "to": "$nep_rev_54", + "next": "@celestial.zoomed_neptune_orbit_step54" + }, + "zoomed_neptune_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_54", + "to": "$nep_rev_55", + "next": "@celestial.zoomed_neptune_orbit_step55" + }, + "zoomed_neptune_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_55", + "to": "$nep_rev_56", + "next": "@celestial.zoomed_neptune_orbit_step56" + }, + "zoomed_neptune_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_56", + "to": "$nep_rev_57", + "next": "@celestial.zoomed_neptune_orbit_step57" + }, + "zoomed_neptune_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_57", + "to": "$nep_rev_58", + "next": "@celestial.zoomed_neptune_orbit_step58" + }, + "zoomed_neptune_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_58", + "to": "$nep_rev_59", + "next": "@celestial.zoomed_neptune_orbit_step59" + }, + "zoomed_neptune_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_59", + "to": "$nep_rev_60", + "next": "@celestial.zoomed_neptune_orbit_step60" + }, + "zoomed_neptune_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_60", + "to": "$nep_rev_61", + "next": "@celestial.zoomed_neptune_orbit_step61" + }, + "zoomed_neptune_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_61", + "to": "$nep_rev_62", + "next": "@celestial.zoomed_neptune_orbit_step62" + }, + "zoomed_neptune_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_62", + "to": "$nep_rev_63", + "next": "@celestial.zoomed_neptune_orbit_step63" + }, + "zoomed_neptune_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_63", + "to": "$nep_rev_64", + "next": "@celestial.zoomed_neptune_orbit_step64" + }, + "zoomed_neptune_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_64", + "to": "$nep_rev_65", + "next": "@celestial.zoomed_neptune_orbit_step65" + }, + "zoomed_neptune_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_65", + "to": "$nep_rev_66", + "next": "@celestial.zoomed_neptune_orbit_step66" + }, + "zoomed_neptune_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_66", + "to": "$nep_rev_67", + "next": "@celestial.zoomed_neptune_orbit_step67" + }, + "zoomed_neptune_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_67", + "to": "$nep_rev_68", + "next": "@celestial.zoomed_neptune_orbit_step68" + }, + "zoomed_neptune_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_68", + "to": "$nep_rev_69", + "next": "@celestial.zoomed_neptune_orbit_step69" + }, + "zoomed_neptune_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_69", + "to": "$nep_rev_70", + "next": "@celestial.zoomed_neptune_orbit_step70" + }, + "zoomed_neptune_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_70", + "to": "$nep_rev_71", + "next": "@celestial.zoomed_neptune_orbit_step71" + }, + "zoomed_neptune_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_71", + "to": "$nep_rev_72", + "next": "@celestial.zoomed_neptune_orbit_step72" + }, + "zoomed_neptune_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_72", + "to": "$nep_rev_73", + "next": "@celestial.zoomed_neptune_orbit_step73" + }, + "zoomed_neptune_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_73", + "to": "$nep_rev_74", + "next": "@celestial.zoomed_neptune_orbit_step74" + }, + "zoomed_neptune_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_74", + "to": "$nep_rev_75", + "next": "@celestial.zoomed_neptune_orbit_step75" + }, + "zoomed_neptune_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_75", + "to": "$nep_rev_76", + "next": "@celestial.zoomed_neptune_orbit_step76" + }, + "zoomed_neptune_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_76", + "to": "$nep_rev_77", + "next": "@celestial.zoomed_neptune_orbit_step77" + }, + "zoomed_neptune_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_77", + "to": "$nep_rev_78", + "next": "@celestial.zoomed_neptune_orbit_step78" + }, + "zoomed_neptune_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_78", + "to": "$nep_rev_79", + "next": "@celestial.zoomed_neptune_orbit_step79" + }, + "zoomed_neptune_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_79", + "to": "$nep_rev_80", + "next": "@celestial.zoomed_neptune_orbit_step80" + }, + "zoomed_neptune_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_80", + "to": "$nep_rev_81", + "next": "@celestial.zoomed_neptune_orbit_step81" + }, + "zoomed_neptune_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_81", + "to": "$nep_rev_82", + "next": "@celestial.zoomed_neptune_orbit_step82" + }, + "zoomed_neptune_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_82", + "to": "$nep_rev_83", + "next": "@celestial.zoomed_neptune_orbit_step83" + }, + "zoomed_neptune_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_83", + "to": "$nep_rev_84", + "next": "@celestial.zoomed_neptune_orbit_step84" + }, + "zoomed_neptune_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_84", + "to": "$nep_rev_85", + "next": "@celestial.zoomed_neptune_orbit_step85" + }, + "zoomed_neptune_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_85", + "to": "$nep_rev_86", + "next": "@celestial.zoomed_neptune_orbit_step86" + }, + "zoomed_neptune_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_86", + "to": "$nep_rev_87", + "next": "@celestial.zoomed_neptune_orbit_step87" + }, + "zoomed_neptune_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_87", + "to": "$nep_rev_88", + "next": "@celestial.zoomed_neptune_orbit_step88" + }, + "zoomed_neptune_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_88", + "to": "$nep_rev_89", + "next": "@celestial.zoomed_neptune_orbit_step89" + }, + "zoomed_neptune_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_89", + "to": "$nep_rev_90", + "next": "@celestial.zoomed_neptune_orbit_step90" + }, + "zoomed_neptune_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_90", + "to": "$nep_rev_91", + "next": "@celestial.zoomed_neptune_orbit_step91" + }, + "zoomed_neptune_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_91", + "to": "$nep_rev_92", + "next": "@celestial.zoomed_neptune_orbit_step92" + }, + "zoomed_neptune_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_92", + "to": "$nep_rev_93", + "next": "@celestial.zoomed_neptune_orbit_step93" + }, + "zoomed_neptune_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_93", + "to": "$nep_rev_94", + "next": "@celestial.zoomed_neptune_orbit_step94" + }, + "zoomed_neptune_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_94", + "to": "$nep_rev_95", + "next": "@celestial.zoomed_neptune_orbit_step95" + }, + "zoomed_neptune_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_95", + "to": "$nep_rev_96", + "next": "@celestial.zoomed_neptune_orbit_step96" + }, + "zoomed_neptune_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_96", + "to": "$nep_rev_97", + "next": "@celestial.zoomed_neptune_orbit_step97" + }, + "zoomed_neptune_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_97", + "to": "$nep_rev_98", + "next": "@celestial.zoomed_neptune_orbit_step98" + }, + "zoomed_neptune_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_98", + "to": "$nep_rev_99", + "next": "@celestial.zoomed_neptune_orbit_step99" + }, + "zoomed_neptune_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_99", + "to": "$nep_rev_100", + "next": "@celestial.zoomed_neptune_orbit_step100" + }, + "zoomed_neptune_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_100", + "to": "$nep_rev_101", + "next": "@celestial.zoomed_neptune_orbit_step101" + }, + "zoomed_neptune_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_101", + "to": "$nep_rev_102", + "next": "@celestial.zoomed_neptune_orbit_step102" + }, + "zoomed_neptune_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_102", + "to": "$nep_rev_103", + "next": "@celestial.zoomed_neptune_orbit_step103" + }, + "zoomed_neptune_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_103", + "to": "$nep_rev_104", + "next": "@celestial.zoomed_neptune_orbit_step104" + }, + "zoomed_neptune_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_104", + "to": "$nep_rev_105", + "next": "@celestial.zoomed_neptune_orbit_step105" + }, + "zoomed_neptune_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_105", + "to": "$nep_rev_106", + "next": "@celestial.zoomed_neptune_orbit_step106" + }, + "zoomed_neptune_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_106", + "to": "$nep_rev_107", + "next": "@celestial.zoomed_neptune_orbit_step107" + }, + "zoomed_neptune_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_107", + "to": "$nep_rev_108", + "next": "@celestial.zoomed_neptune_orbit_step108" + }, + "zoomed_neptune_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_108", + "to": "$nep_rev_109", + "next": "@celestial.zoomed_neptune_orbit_step109" + }, + "zoomed_neptune_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_109", + "to": "$nep_rev_110", + "next": "@celestial.zoomed_neptune_orbit_step110" + }, + "zoomed_neptune_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_110", + "to": "$nep_rev_111", + "next": "@celestial.zoomed_neptune_orbit_step111" + }, + "zoomed_neptune_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_111", + "to": "$nep_rev_112", + "next": "@celestial.zoomed_neptune_orbit_step112" + }, + "zoomed_neptune_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_112", + "to": "$nep_rev_113", + "next": "@celestial.zoomed_neptune_orbit_step113" + }, + "zoomed_neptune_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_113", + "to": "$nep_rev_114", + "next": "@celestial.zoomed_neptune_orbit_step114" + }, + "zoomed_neptune_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_114", + "to": "$nep_rev_115", + "next": "@celestial.zoomed_neptune_orbit_step115" + }, + "zoomed_neptune_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_115", + "to": "$nep_rev_116", + "next": "@celestial.zoomed_neptune_orbit_step116" + }, + "zoomed_neptune_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_116", + "to": "$nep_rev_117", + "next": "@celestial.zoomed_neptune_orbit_step117" + }, + "zoomed_neptune_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_117", + "to": "$nep_rev_118", + "next": "@celestial.zoomed_neptune_orbit_step118" + }, + "zoomed_neptune_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_118", + "to": "$nep_rev_119", + "next": "@celestial.zoomed_neptune_orbit_step119" + }, + "zoomed_neptune_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_119", + "to": "$nep_rev_120", + "next": "@celestial.zoomed_neptune_orbit_step120" + }, + "zoomed_neptune_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_120", + "to": "$nep_rev_121", + "next": "@celestial.zoomed_neptune_orbit_step121" + }, + "zoomed_neptune_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_121", + "to": "$nep_rev_122", + "next": "@celestial.zoomed_neptune_orbit_step122" + }, + "zoomed_neptune_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_122", + "to": "$nep_rev_123", + "next": "@celestial.zoomed_neptune_orbit_step123" + }, + "zoomed_neptune_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_123", + "to": "$nep_rev_124", + "next": "@celestial.zoomed_neptune_orbit_step124" + }, + "zoomed_neptune_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_124", + "to": "$nep_rev_125", + "next": "@celestial.zoomed_neptune_orbit_step125" + }, + "zoomed_neptune_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_125", + "to": "$nep_rev_126", + "next": "@celestial.zoomed_neptune_orbit_step126" + }, + "zoomed_neptune_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_126", + "to": "$nep_rev_127", + "next": "@celestial.zoomed_neptune_orbit_step127" + }, + "zoomed_neptune_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_127", + "to": "$nep_rev_128", + "next": "@celestial.zoomed_neptune_orbit_step128" + }, + "zoomed_neptune_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep_rev_128", + "to": "$nep_rev_1", + "next": "@celestial.zoomed_neptune_orbit_step1" + }, + "station_local_orbit_step1": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s1", + "to": "$s2", + "next": "@celestial.station_local_orbit_step2" + }, + "station_local_orbit_step2": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s2", + "to": "$s3", + "next": "@celestial.station_local_orbit_step3" + }, + "station_local_orbit_step3": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s3", + "to": "$s4", + "next": "@celestial.station_local_orbit_step4" + }, + "station_local_orbit_step4": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s4", + "to": "$s5", + "next": "@celestial.station_local_orbit_step5" + }, + "station_local_orbit_step5": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s5", + "to": "$s6", + "next": "@celestial.station_local_orbit_step6" + }, + "station_local_orbit_step6": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s6", + "to": "$s7", + "next": "@celestial.station_local_orbit_step7" + }, + "station_local_orbit_step7": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s7", + "to": "$s8", + "next": "@celestial.station_local_orbit_step8" + }, + "station_local_orbit_step8": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s8", + "to": "$s9", + "next": "@celestial.station_local_orbit_step9" + }, + "station_local_orbit_step9": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s9", + "to": "$s10", + "next": "@celestial.station_local_orbit_step10" + }, + "station_local_orbit_step10": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s10", + "to": "$s11", + "next": "@celestial.station_local_orbit_step11" + }, + "station_local_orbit_step11": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s11", + "to": "$s12", + "next": "@celestial.station_local_orbit_step12" + }, + "station_local_orbit_step12": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s12", + "to": "$s13", + "next": "@celestial.station_local_orbit_step13" + }, + "station_local_orbit_step13": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s13", + "to": "$s14", + "next": "@celestial.station_local_orbit_step14" + }, + "station_local_orbit_step14": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s14", + "to": "$s15", + "next": "@celestial.station_local_orbit_step15" + }, + "station_local_orbit_step15": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s15", + "to": "$s16", + "next": "@celestial.station_local_orbit_step16" + }, + "station_local_orbit_step16": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s16", + "to": "$s17", + "next": "@celestial.station_local_orbit_step17" + }, + "station_local_orbit_step17": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s17", + "to": "$s18", + "next": "@celestial.station_local_orbit_step18" + }, + "station_local_orbit_step18": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s18", + "to": "$s19", + "next": "@celestial.station_local_orbit_step19" + }, + "station_local_orbit_step19": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s19", + "to": "$s20", + "next": "@celestial.station_local_orbit_step20" + }, + "station_local_orbit_step20": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s20", + "to": "$s21", + "next": "@celestial.station_local_orbit_step21" + }, + "station_local_orbit_step21": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s21", + "to": "$s22", + "next": "@celestial.station_local_orbit_step22" + }, + "station_local_orbit_step22": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s22", + "to": "$s23", + "next": "@celestial.station_local_orbit_step23" + }, + "station_local_orbit_step23": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s23", + "to": "$s24", + "next": "@celestial.station_local_orbit_step24" + }, + "station_local_orbit_step24": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s24", + "to": "$s25", + "next": "@celestial.station_local_orbit_step25" + }, + "station_local_orbit_step25": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s25", + "to": "$s26", + "next": "@celestial.station_local_orbit_step26" + }, + "station_local_orbit_step26": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s26", + "to": "$s27", + "next": "@celestial.station_local_orbit_step27" + }, + "station_local_orbit_step27": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s27", + "to": "$s28", + "next": "@celestial.station_local_orbit_step28" + }, + "station_local_orbit_step28": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s28", + "to": "$s29", + "next": "@celestial.station_local_orbit_step29" + }, + "station_local_orbit_step29": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s29", + "to": "$s30", + "next": "@celestial.station_local_orbit_step30" + }, + "station_local_orbit_step30": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s30", + "to": "$s31", + "next": "@celestial.station_local_orbit_step31" + }, + "station_local_orbit_step31": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s31", + "to": "$s32", + "next": "@celestial.station_local_orbit_step32" + }, + "station_local_orbit_step32": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s32", + "to": "$s33", + "next": "@celestial.station_local_orbit_step33" + }, + "station_local_orbit_step33": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s33", + "to": "$s34", + "next": "@celestial.station_local_orbit_step34" + }, + "station_local_orbit_step34": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s34", + "to": "$s35", + "next": "@celestial.station_local_orbit_step35" + }, + "station_local_orbit_step35": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s35", + "to": "$s36", + "next": "@celestial.station_local_orbit_step36" + }, + "station_local_orbit_step36": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s36", + "to": "$s37", + "next": "@celestial.station_local_orbit_step37" + }, + "station_local_orbit_step37": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s37", + "to": "$s38", + "next": "@celestial.station_local_orbit_step38" + }, + "station_local_orbit_step38": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s38", + "to": "$s39", + "next": "@celestial.station_local_orbit_step39" + }, + "station_local_orbit_step39": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s39", + "to": "$s40", + "next": "@celestial.station_local_orbit_step40" + }, + "station_local_orbit_step40": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s40", + "to": "$s41", + "next": "@celestial.station_local_orbit_step41" + }, + "station_local_orbit_step41": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s41", + "to": "$s42", + "next": "@celestial.station_local_orbit_step42" + }, + "station_local_orbit_step42": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s42", + "to": "$s43", + "next": "@celestial.station_local_orbit_step43" + }, + "station_local_orbit_step43": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s43", + "to": "$s44", + "next": "@celestial.station_local_orbit_step44" + }, + "station_local_orbit_step44": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s44", + "to": "$s45", + "next": "@celestial.station_local_orbit_step45" + }, + "station_local_orbit_step45": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s45", + "to": "$s46", + "next": "@celestial.station_local_orbit_step46" + }, + "station_local_orbit_step46": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s46", + "to": "$s47", + "next": "@celestial.station_local_orbit_step47" + }, + "station_local_orbit_step47": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s47", + "to": "$s48", + "next": "@celestial.station_local_orbit_step48" + }, + "station_local_orbit_step48": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s48", + "to": "$s49", + "next": "@celestial.station_local_orbit_step49" + }, + "station_local_orbit_step49": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s49", + "to": "$s50", + "next": "@celestial.station_local_orbit_step50" + }, + "station_local_orbit_step50": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s50", + "to": "$s51", + "next": "@celestial.station_local_orbit_step51" + }, + "station_local_orbit_step51": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s51", + "to": "$s52", + "next": "@celestial.station_local_orbit_step52" + }, + "station_local_orbit_step52": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s52", + "to": "$s53", + "next": "@celestial.station_local_orbit_step53" + }, + "station_local_orbit_step53": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s53", + "to": "$s54", + "next": "@celestial.station_local_orbit_step54" + }, + "station_local_orbit_step54": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s54", + "to": "$s55", + "next": "@celestial.station_local_orbit_step55" + }, + "station_local_orbit_step55": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s55", + "to": "$s56", + "next": "@celestial.station_local_orbit_step56" + }, + "station_local_orbit_step56": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s56", + "to": "$s57", + "next": "@celestial.station_local_orbit_step57" + }, + "station_local_orbit_step57": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s57", + "to": "$s58", + "next": "@celestial.station_local_orbit_step58" + }, + "station_local_orbit_step58": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s58", + "to": "$s59", + "next": "@celestial.station_local_orbit_step59" + }, + "station_local_orbit_step59": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s59", + "to": "$s60", + "next": "@celestial.station_local_orbit_step60" + }, + "station_local_orbit_step60": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s60", + "to": "$s61", + "next": "@celestial.station_local_orbit_step61" + }, + "station_local_orbit_step61": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s61", + "to": "$s62", + "next": "@celestial.station_local_orbit_step62" + }, + "station_local_orbit_step62": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s62", + "to": "$s63", + "next": "@celestial.station_local_orbit_step63" + }, + "station_local_orbit_step63": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s63", + "to": "$s64", + "next": "@celestial.station_local_orbit_step64" + }, + "station_local_orbit_step64": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s64", + "to": "$s65", + "next": "@celestial.station_local_orbit_step65" + }, + "station_local_orbit_step65": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s65", + "to": "$s66", + "next": "@celestial.station_local_orbit_step66" + }, + "station_local_orbit_step66": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s66", + "to": "$s67", + "next": "@celestial.station_local_orbit_step67" + }, + "station_local_orbit_step67": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s67", + "to": "$s68", + "next": "@celestial.station_local_orbit_step68" + }, + "station_local_orbit_step68": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s68", + "to": "$s69", + "next": "@celestial.station_local_orbit_step69" + }, + "station_local_orbit_step69": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s69", + "to": "$s70", + "next": "@celestial.station_local_orbit_step70" + }, + "station_local_orbit_step70": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s70", + "to": "$s71", + "next": "@celestial.station_local_orbit_step71" + }, + "station_local_orbit_step71": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s71", + "to": "$s72", + "next": "@celestial.station_local_orbit_step72" + }, + "station_local_orbit_step72": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s72", + "to": "$s73", + "next": "@celestial.station_local_orbit_step73" + }, + "station_local_orbit_step73": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s73", + "to": "$s74", + "next": "@celestial.station_local_orbit_step74" + }, + "station_local_orbit_step74": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s74", + "to": "$s75", + "next": "@celestial.station_local_orbit_step75" + }, + "station_local_orbit_step75": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s75", + "to": "$s76", + "next": "@celestial.station_local_orbit_step76" + }, + "station_local_orbit_step76": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s76", + "to": "$s77", + "next": "@celestial.station_local_orbit_step77" + }, + "station_local_orbit_step77": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s77", + "to": "$s78", + "next": "@celestial.station_local_orbit_step78" + }, + "station_local_orbit_step78": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s78", + "to": "$s79", + "next": "@celestial.station_local_orbit_step79" + }, + "station_local_orbit_step79": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s79", + "to": "$s80", + "next": "@celestial.station_local_orbit_step80" + }, + "station_local_orbit_step80": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s80", + "to": "$s81", + "next": "@celestial.station_local_orbit_step81" + }, + "station_local_orbit_step81": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s81", + "to": "$s82", + "next": "@celestial.station_local_orbit_step82" + }, + "station_local_orbit_step82": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s82", + "to": "$s83", + "next": "@celestial.station_local_orbit_step83" + }, + "station_local_orbit_step83": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s83", + "to": "$s84", + "next": "@celestial.station_local_orbit_step84" + }, + "station_local_orbit_step84": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s84", + "to": "$s85", + "next": "@celestial.station_local_orbit_step85" + }, + "station_local_orbit_step85": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s85", + "to": "$s86", + "next": "@celestial.station_local_orbit_step86" + }, + "station_local_orbit_step86": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s86", + "to": "$s87", + "next": "@celestial.station_local_orbit_step87" + }, + "station_local_orbit_step87": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s87", + "to": "$s88", + "next": "@celestial.station_local_orbit_step88" + }, + "station_local_orbit_step88": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s88", + "to": "$s89", + "next": "@celestial.station_local_orbit_step89" + }, + "station_local_orbit_step89": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s89", + "to": "$s90", + "next": "@celestial.station_local_orbit_step90" + }, + "station_local_orbit_step90": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s90", + "to": "$s91", + "next": "@celestial.station_local_orbit_step91" + }, + "station_local_orbit_step91": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s91", + "to": "$s92", + "next": "@celestial.station_local_orbit_step92" + }, + "station_local_orbit_step92": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s92", + "to": "$s93", + "next": "@celestial.station_local_orbit_step93" + }, + "station_local_orbit_step93": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s93", + "to": "$s94", + "next": "@celestial.station_local_orbit_step94" + }, + "station_local_orbit_step94": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s94", + "to": "$s95", + "next": "@celestial.station_local_orbit_step95" + }, + "station_local_orbit_step95": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s95", + "to": "$s96", + "next": "@celestial.station_local_orbit_step96" + }, + "station_local_orbit_step96": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s96", + "to": "$s97", + "next": "@celestial.station_local_orbit_step97" + }, + "station_local_orbit_step97": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s97", + "to": "$s98", + "next": "@celestial.station_local_orbit_step98" + }, + "station_local_orbit_step98": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s98", + "to": "$s99", + "next": "@celestial.station_local_orbit_step99" + }, + "station_local_orbit_step99": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s99", + "to": "$s100", + "next": "@celestial.station_local_orbit_step100" + }, + "station_local_orbit_step100": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s100", + "to": "$s101", + "next": "@celestial.station_local_orbit_step101" + }, + "station_local_orbit_step101": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s101", + "to": "$s102", + "next": "@celestial.station_local_orbit_step102" + }, + "station_local_orbit_step102": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s102", + "to": "$s103", + "next": "@celestial.station_local_orbit_step103" + }, + "station_local_orbit_step103": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s103", + "to": "$s104", + "next": "@celestial.station_local_orbit_step104" + }, + "station_local_orbit_step104": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s104", + "to": "$s105", + "next": "@celestial.station_local_orbit_step105" + }, + "station_local_orbit_step105": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s105", + "to": "$s106", + "next": "@celestial.station_local_orbit_step106" + }, + "station_local_orbit_step106": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s106", + "to": "$s107", + "next": "@celestial.station_local_orbit_step107" + }, + "station_local_orbit_step107": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s107", + "to": "$s108", + "next": "@celestial.station_local_orbit_step108" + }, + "station_local_orbit_step108": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s108", + "to": "$s109", + "next": "@celestial.station_local_orbit_step109" + }, + "station_local_orbit_step109": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s109", + "to": "$s110", + "next": "@celestial.station_local_orbit_step110" + }, + "station_local_orbit_step110": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s110", + "to": "$s111", + "next": "@celestial.station_local_orbit_step111" + }, + "station_local_orbit_step111": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s111", + "to": "$s112", + "next": "@celestial.station_local_orbit_step112" + }, + "station_local_orbit_step112": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s112", + "to": "$s113", + "next": "@celestial.station_local_orbit_step113" + }, + "station_local_orbit_step113": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s113", + "to": "$s114", + "next": "@celestial.station_local_orbit_step114" + }, + "station_local_orbit_step114": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s114", + "to": "$s115", + "next": "@celestial.station_local_orbit_step115" + }, + "station_local_orbit_step115": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s115", + "to": "$s116", + "next": "@celestial.station_local_orbit_step116" + }, + "station_local_orbit_step116": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s116", + "to": "$s117", + "next": "@celestial.station_local_orbit_step117" + }, + "station_local_orbit_step117": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s117", + "to": "$s118", + "next": "@celestial.station_local_orbit_step118" + }, + "station_local_orbit_step118": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s118", + "to": "$s119", + "next": "@celestial.station_local_orbit_step119" + }, + "station_local_orbit_step119": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s119", + "to": "$s120", + "next": "@celestial.station_local_orbit_step120" + }, + "station_local_orbit_step120": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s120", + "to": "$s121", + "next": "@celestial.station_local_orbit_step121" + }, + "station_local_orbit_step121": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s121", + "to": "$s122", + "next": "@celestial.station_local_orbit_step122" + }, + "station_local_orbit_step122": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s122", + "to": "$s123", + "next": "@celestial.station_local_orbit_step123" + }, + "station_local_orbit_step123": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s123", + "to": "$s124", + "next": "@celestial.station_local_orbit_step124" + }, + "station_local_orbit_step124": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s124", + "to": "$s125", + "next": "@celestial.station_local_orbit_step125" + }, + "station_local_orbit_step125": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s125", + "to": "$s126", + "next": "@celestial.station_local_orbit_step126" + }, + "station_local_orbit_step126": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s126", + "to": "$s127", + "next": "@celestial.station_local_orbit_step127" + }, + "station_local_orbit_step127": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s127", + "to": "$s128", + "next": "@celestial.station_local_orbit_step128" + }, + "station_local_orbit_step128": { + "anim_type": "offset", + "duration": "$station_orbit_duration", + "from": "$s128", + "to": "$s1", + "next": "@celestial.station_local_orbit_step1" + } +} \ No newline at end of file diff --git a/RP/ui/celestial/solar_system_map.json b/RP/ui/celestial/solar_system_map.json new file mode 100644 index 00000000..49441865 --- /dev/null +++ b/RP/ui/celestial/solar_system_map.json @@ -0,0 +1,32780 @@ +{ + "namespace": "celestial", + "solar_system": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits", + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_sol", + "source_property_name": "#toggle_state", + "target_property_name": "#zoomed_out" + }, + { + "binding_type": "view", + "source_property_name": "((#title_text - 'Celestial Panel ' = 'Solar System') and #zoomed_out)", + "target_property_name": "#visible" + } + ], + "anims": [ + { + "expand": { + "anim_type": "size", + "duration": 1, + "from": [ + 0, + 0 + ], + "to": [ + 401, + 202 + ] + } + } + ], + "controls": [ + { + "sol": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/sol", + "size": [ + 16, + 16 + ], + "controls": [ + { + "orbital_toggle_sol@celestial.selection_box": { + "$selection_size": [ + 24, + 24 + ] + } + } + ] + } + }, + { + "Mercury@celestial.solar_system_planet": { + "$control_name": "mercury", + "$texture": "textures/ui/cosmos/celestial_selector/mercury", + "$size": [ + 8, + 8 + ], + "anims": [ + "@celestial.mercury_orbit_step78" + ], + "$orbit_duration": 0.039063, + "$mer1": [ + 55.36, + 0 + ], + "$mer2": [ + 55.35, + 0.68 + ], + "$mer3": [ + 55.3, + 1.36 + ], + "$mer4": [ + 55.21, + 2.04 + ], + "$mer5": [ + 55.1, + 2.71 + ], + "$mer6": [ + 54.95, + 3.39 + ], + "$mer7": [ + 54.76, + 4.06 + ], + "$mer8": [ + 54.55, + 4.73 + ], + "$mer9": [ + 54.3, + 5.4 + ], + "$mer10": [ + 54.02, + 6.06 + ], + "$mer11": [ + 53.7, + 6.73 + ], + "$mer12": [ + 53.36, + 7.38 + ], + "$mer13": [ + 52.98, + 8.04 + ], + "$mer14": [ + 52.57, + 8.68 + ], + "$mer15": [ + 52.13, + 9.33 + ], + "$mer16": [ + 51.65, + 9.96 + ], + "$mer17": [ + 51.15, + 10.59 + ], + "$mer18": [ + 50.61, + 11.22 + ], + "$mer19": [ + 50.05, + 11.84 + ], + "$mer20": [ + 49.45, + 12.45 + ], + "$mer21": [ + 48.83, + 13.05 + ], + "$mer22": [ + 48.17, + 13.64 + ], + "$mer23": [ + 47.49, + 14.23 + ], + "$mer24": [ + 46.77, + 14.81 + ], + "$mer25": [ + 46.03, + 15.38 + ], + "$mer26": [ + 45.26, + 15.94 + ], + "$mer27": [ + 44.47, + 16.49 + ], + "$mer28": [ + 43.64, + 17.03 + ], + "$mer29": [ + 42.8, + 17.56 + ], + "$mer30": [ + 41.92, + 18.08 + ], + "$mer31": [ + 41.02, + 18.59 + ], + "$mer32": [ + 40.1, + 19.09 + ], + "$mer33": [ + 39.15, + 19.57 + ], + "$mer34": [ + 38.17, + 20.05 + ], + "$mer35": [ + 37.18, + 20.51 + ], + "$mer36": [ + 36.16, + 20.96 + ], + "$mer37": [ + 35.12, + 21.4 + ], + "$mer38": [ + 34.06, + 21.82 + ], + "$mer39": [ + 32.98, + 22.23 + ], + "$mer40": [ + 31.88, + 22.63 + ], + "$mer41": [ + 30.76, + 23.02 + ], + "$mer42": [ + 29.62, + 23.39 + ], + "$mer43": [ + 28.46, + 23.74 + ], + "$mer44": [ + 27.29, + 24.09 + ], + "$mer45": [ + 26.1, + 24.41 + ], + "$mer46": [ + 24.89, + 24.73 + ], + "$mer47": [ + 23.67, + 25.02 + ], + "$mer48": [ + 22.44, + 25.31 + ], + "$mer49": [ + 21.19, + 25.57 + ], + "$mer50": [ + 19.92, + 25.83 + ], + "$mer51": [ + 18.65, + 26.06 + ], + "$mer52": [ + 17.37, + 26.28 + ], + "$mer53": [ + 16.07, + 26.49 + ], + "$mer54": [ + 14.77, + 26.68 + ], + "$mer55": [ + 13.45, + 26.85 + ], + "$mer56": [ + 12.13, + 27.01 + ], + "$mer57": [ + 10.8, + 27.15 + ], + "$mer58": [ + 9.46, + 27.27 + ], + "$mer59": [ + 8.12, + 27.38 + ], + "$mer60": [ + 6.78, + 27.47 + ], + "$mer61": [ + 5.43, + 27.55 + ], + "$mer62": [ + 4.07, + 27.61 + ], + "$mer63": [ + 2.72, + 27.65 + ], + "$mer64": [ + 1.36, + 27.67 + ], + "$mer65": [ + 0, + 27.68 + ], + "$mer66": [ + -1.36, + 27.67 + ], + "$mer67": [ + -2.72, + 27.65 + ], + "$mer68": [ + -4.07, + 27.61 + ], + "$mer69": [ + -5.43, + 27.55 + ], + "$mer70": [ + -6.78, + 27.47 + ], + "$mer71": [ + -8.12, + 27.38 + ], + "$mer72": [ + -9.46, + 27.27 + ], + "$mer73": [ + -10.8, + 27.15 + ], + "$mer74": [ + -12.13, + 27.01 + ], + "$mer75": [ + -13.45, + 26.85 + ], + "$mer76": [ + -14.77, + 26.68 + ], + "$mer77": [ + -16.07, + 26.49 + ], + "$mer78": [ + -17.37, + 26.28 + ], + "$mer79": [ + -18.65, + 26.06 + ], + "$mer80": [ + -19.92, + 25.83 + ], + "$mer81": [ + -21.19, + 25.57 + ], + "$mer82": [ + -22.44, + 25.31 + ], + "$mer83": [ + -23.67, + 25.02 + ], + "$mer84": [ + -24.89, + 24.73 + ], + "$mer85": [ + -26.1, + 24.41 + ], + "$mer86": [ + -27.29, + 24.09 + ], + "$mer87": [ + -28.46, + 23.74 + ], + "$mer88": [ + -29.62, + 23.39 + ], + "$mer89": [ + -30.76, + 23.02 + ], + "$mer90": [ + -31.88, + 22.63 + ], + "$mer91": [ + -32.98, + 22.23 + ], + "$mer92": [ + -34.06, + 21.82 + ], + "$mer93": [ + -35.12, + 21.4 + ], + "$mer94": [ + -36.16, + 20.96 + ], + "$mer95": [ + -37.18, + 20.51 + ], + "$mer96": [ + -38.17, + 20.05 + ], + "$mer97": [ + -39.15, + 19.57 + ], + "$mer98": [ + -40.1, + 19.09 + ], + "$mer99": [ + -41.02, + 18.59 + ], + "$mer100": [ + -41.92, + 18.08 + ], + "$mer101": [ + -42.8, + 17.56 + ], + "$mer102": [ + -43.64, + 17.03 + ], + "$mer103": [ + -44.47, + 16.49 + ], + "$mer104": [ + -45.26, + 15.94 + ], + "$mer105": [ + -46.03, + 15.38 + ], + "$mer106": [ + -46.77, + 14.81 + ], + "$mer107": [ + -47.49, + 14.23 + ], + "$mer108": [ + -48.17, + 13.64 + ], + "$mer109": [ + -48.83, + 13.05 + ], + "$mer110": [ + -49.45, + 12.45 + ], + "$mer111": [ + -50.05, + 11.84 + ], + "$mer112": [ + -50.61, + 11.22 + ], + "$mer113": [ + -51.15, + 10.59 + ], + "$mer114": [ + -51.65, + 9.96 + ], + "$mer115": [ + -52.13, + 9.33 + ], + "$mer116": [ + -52.57, + 8.68 + ], + "$mer117": [ + -52.98, + 8.04 + ], + "$mer118": [ + -53.36, + 7.38 + ], + "$mer119": [ + -53.7, + 6.73 + ], + "$mer120": [ + -54.02, + 6.06 + ], + "$mer121": [ + -54.3, + 5.4 + ], + "$mer122": [ + -54.55, + 4.73 + ], + "$mer123": [ + -54.76, + 4.06 + ], + "$mer124": [ + -54.95, + 3.39 + ], + "$mer125": [ + -55.1, + 2.71 + ], + "$mer126": [ + -55.21, + 2.04 + ], + "$mer127": [ + -55.3, + 1.36 + ], + "$mer128": [ + -55.35, + 0.68 + ], + "$mer129": [ + -55.36, + 0 + ], + "$mer130": [ + -55.35, + -0.68 + ], + "$mer131": [ + -55.3, + -1.36 + ], + "$mer132": [ + -55.21, + -2.04 + ], + "$mer133": [ + -55.1, + -2.71 + ], + "$mer134": [ + -54.95, + -3.39 + ], + "$mer135": [ + -54.76, + -4.06 + ], + "$mer136": [ + -54.55, + -4.73 + ], + "$mer137": [ + -54.3, + -5.4 + ], + "$mer138": [ + -54.02, + -6.06 + ], + "$mer139": [ + -53.7, + -6.73 + ], + "$mer140": [ + -53.36, + -7.38 + ], + "$mer141": [ + -52.98, + -8.04 + ], + "$mer142": [ + -52.57, + -8.68 + ], + "$mer143": [ + -52.13, + -9.33 + ], + "$mer144": [ + -51.65, + -9.96 + ], + "$mer145": [ + -51.15, + -10.59 + ], + "$mer146": [ + -50.61, + -11.22 + ], + "$mer147": [ + -50.05, + -11.84 + ], + "$mer148": [ + -49.45, + -12.45 + ], + "$mer149": [ + -48.83, + -13.05 + ], + "$mer150": [ + -48.17, + -13.64 + ], + "$mer151": [ + -47.49, + -14.23 + ], + "$mer152": [ + -46.77, + -14.81 + ], + "$mer153": [ + -46.03, + -15.38 + ], + "$mer154": [ + -45.26, + -15.94 + ], + "$mer155": [ + -44.47, + -16.49 + ], + "$mer156": [ + -43.64, + -17.03 + ], + "$mer157": [ + -42.8, + -17.56 + ], + "$mer158": [ + -41.92, + -18.08 + ], + "$mer159": [ + -41.02, + -18.59 + ], + "$mer160": [ + -40.1, + -19.09 + ], + "$mer161": [ + -39.15, + -19.57 + ], + "$mer162": [ + -38.17, + -20.05 + ], + "$mer163": [ + -37.18, + -20.51 + ], + "$mer164": [ + -36.16, + -20.96 + ], + "$mer165": [ + -35.12, + -21.4 + ], + "$mer166": [ + -34.06, + -21.82 + ], + "$mer167": [ + -32.98, + -22.23 + ], + "$mer168": [ + -31.88, + -22.63 + ], + "$mer169": [ + -30.76, + -23.02 + ], + "$mer170": [ + -29.62, + -23.39 + ], + "$mer171": [ + -28.46, + -23.74 + ], + "$mer172": [ + -27.29, + -24.09 + ], + "$mer173": [ + -26.1, + -24.41 + ], + "$mer174": [ + -24.89, + -24.73 + ], + "$mer175": [ + -23.67, + -25.02 + ], + "$mer176": [ + -22.44, + -25.31 + ], + "$mer177": [ + -21.19, + -25.57 + ], + "$mer178": [ + -19.92, + -25.83 + ], + "$mer179": [ + -18.65, + -26.06 + ], + "$mer180": [ + -17.37, + -26.28 + ], + "$mer181": [ + -16.07, + -26.49 + ], + "$mer182": [ + -14.77, + -26.68 + ], + "$mer183": [ + -13.45, + -26.85 + ], + "$mer184": [ + -12.13, + -27.01 + ], + "$mer185": [ + -10.8, + -27.15 + ], + "$mer186": [ + -9.46, + -27.27 + ], + "$mer187": [ + -8.12, + -27.38 + ], + "$mer188": [ + -6.78, + -27.47 + ], + "$mer189": [ + -5.43, + -27.55 + ], + "$mer190": [ + -4.07, + -27.61 + ], + "$mer191": [ + -2.72, + -27.65 + ], + "$mer192": [ + -1.36, + -27.67 + ], + "$mer193": [ + 0, + -27.68 + ], + "$mer194": [ + 1.36, + -27.67 + ], + "$mer195": [ + 2.72, + -27.65 + ], + "$mer196": [ + 4.07, + -27.61 + ], + "$mer197": [ + 5.43, + -27.55 + ], + "$mer198": [ + 6.78, + -27.47 + ], + "$mer199": [ + 8.12, + -27.38 + ], + "$mer200": [ + 9.46, + -27.27 + ], + "$mer201": [ + 10.8, + -27.15 + ], + "$mer202": [ + 12.13, + -27.01 + ], + "$mer203": [ + 13.45, + -26.85 + ], + "$mer204": [ + 14.77, + -26.68 + ], + "$mer205": [ + 16.07, + -26.49 + ], + "$mer206": [ + 17.37, + -26.28 + ], + "$mer207": [ + 18.65, + -26.06 + ], + "$mer208": [ + 19.92, + -25.83 + ], + "$mer209": [ + 21.19, + -25.57 + ], + "$mer210": [ + 22.44, + -25.31 + ], + "$mer211": [ + 23.67, + -25.02 + ], + "$mer212": [ + 24.89, + -24.73 + ], + "$mer213": [ + 26.1, + -24.41 + ], + "$mer214": [ + 27.29, + -24.09 + ], + "$mer215": [ + 28.46, + -23.74 + ], + "$mer216": [ + 29.62, + -23.39 + ], + "$mer217": [ + 30.76, + -23.02 + ], + "$mer218": [ + 31.88, + -22.63 + ], + "$mer219": [ + 32.98, + -22.23 + ], + "$mer220": [ + 34.06, + -21.82 + ], + "$mer221": [ + 35.12, + -21.4 + ], + "$mer222": [ + 36.16, + -20.96 + ], + "$mer223": [ + 37.18, + -20.51 + ], + "$mer224": [ + 38.17, + -20.05 + ], + "$mer225": [ + 39.15, + -19.57 + ], + "$mer226": [ + 40.1, + -19.09 + ], + "$mer227": [ + 41.02, + -18.59 + ], + "$mer228": [ + 41.92, + -18.08 + ], + "$mer229": [ + 42.8, + -17.56 + ], + "$mer230": [ + 43.64, + -17.03 + ], + "$mer231": [ + 44.47, + -16.49 + ], + "$mer232": [ + 45.26, + -15.94 + ], + "$mer233": [ + 46.03, + -15.38 + ], + "$mer234": [ + 46.77, + -14.81 + ], + "$mer235": [ + 47.49, + -14.23 + ], + "$mer236": [ + 48.17, + -13.64 + ], + "$mer237": [ + 48.83, + -13.05 + ], + "$mer238": [ + 49.45, + -12.45 + ], + "$mer239": [ + 50.05, + -11.84 + ], + "$mer240": [ + 50.61, + -11.22 + ], + "$mer241": [ + 51.15, + -10.59 + ], + "$mer242": [ + 51.65, + -9.96 + ], + "$mer243": [ + 52.13, + -9.33 + ], + "$mer244": [ + 52.57, + -8.68 + ], + "$mer245": [ + 52.98, + -8.04 + ], + "$mer246": [ + 53.36, + -7.38 + ], + "$mer247": [ + 53.7, + -6.73 + ], + "$mer248": [ + 54.02, + -6.06 + ], + "$mer249": [ + 54.3, + -5.4 + ], + "$mer250": [ + 54.55, + -4.73 + ], + "$mer251": [ + 54.76, + -4.06 + ], + "$mer252": [ + 54.95, + -3.39 + ], + "$mer253": [ + 55.1, + -2.71 + ], + "$mer254": [ + 55.21, + -2.04 + ], + "$mer255": [ + 55.3, + -1.36 + ], + "$mer256": [ + 55.35, + -0.68 + ] + } + }, + { + "Jupiter@celestial.solar_system_planet": { + "$control_name": "jupiter", + "$texture": "textures/ui/cosmos/celestial_selector/jupiter", + "$size": [ + 8, + 8 + ], + "anims": [ + "@celestial.jupiter_orbit_step230" + ], + "$orbit_duration": 0.3125, + "$jup1": [ + 142.41, + 0 + ], + "$jup2": [ + 142.37, + 1.75 + ], + "$jup3": [ + 142.24, + 3.49 + ], + "$jup4": [ + 142.03, + 5.24 + ], + "$jup5": [ + 141.73, + 6.98 + ], + "$jup6": [ + 141.34, + 8.72 + ], + "$jup7": [ + 140.87, + 10.45 + ], + "$jup8": [ + 140.31, + 12.17 + ], + "$jup9": [ + 139.67, + 13.89 + ], + "$jup10": [ + 138.95, + 15.6 + ], + "$jup11": [ + 138.14, + 17.3 + ], + "$jup12": [ + 137.25, + 18.99 + ], + "$jup13": [ + 136.28, + 20.67 + ], + "$jup14": [ + 135.22, + 22.34 + ], + "$jup15": [ + 134.09, + 23.99 + ], + "$jup16": [ + 132.87, + 25.63 + ], + "$jup17": [ + 131.57, + 27.25 + ], + "$jup18": [ + 130.19, + 28.86 + ], + "$jup19": [ + 128.74, + 30.44 + ], + "$jup20": [ + 127.21, + 32.01 + ], + "$jup21": [ + 125.6, + 33.57 + ], + "$jup22": [ + 123.91, + 35.1 + ], + "$jup23": [ + 122.15, + 36.61 + ], + "$jup24": [ + 120.32, + 38.09 + ], + "$jup25": [ + 118.41, + 39.56 + ], + "$jup26": [ + 116.43, + 41 + ], + "$jup27": [ + 114.39, + 42.42 + ], + "$jup28": [ + 112.27, + 43.81 + ], + "$jup29": [ + 110.09, + 45.17 + ], + "$jup30": [ + 107.84, + 46.51 + ], + "$jup31": [ + 105.52, + 47.82 + ], + "$jup32": [ + 103.14, + 49.1 + ], + "$jup33": [ + 100.7, + 50.35 + ], + "$jup34": [ + 98.2, + 51.57 + ], + "$jup35": [ + 95.64, + 52.76 + ], + "$jup36": [ + 93.02, + 53.92 + ], + "$jup37": [ + 90.34, + 55.04 + ], + "$jup38": [ + 87.62, + 56.13 + ], + "$jup39": [ + 84.83, + 57.19 + ], + "$jup40": [ + 82, + 58.22 + ], + "$jup41": [ + 79.12, + 59.21 + ], + "$jup42": [ + 76.19, + 60.16 + ], + "$jup43": [ + 73.21, + 61.08 + ], + "$jup44": [ + 70.19, + 61.96 + ], + "$jup45": [ + 67.13, + 62.8 + ], + "$jup46": [ + 64.03, + 63.6 + ], + "$jup47": [ + 60.89, + 64.37 + ], + "$jup48": [ + 57.71, + 65.1 + ], + "$jup49": [ + 54.5, + 65.79 + ], + "$jup50": [ + 51.25, + 66.43 + ], + "$jup51": [ + 47.98, + 67.04 + ], + "$jup52": [ + 44.67, + 67.61 + ], + "$jup53": [ + 41.34, + 68.14 + ], + "$jup54": [ + 37.98, + 68.63 + ], + "$jup55": [ + 34.6, + 69.07 + ], + "$jup56": [ + 31.2, + 69.48 + ], + "$jup57": [ + 27.78, + 69.84 + ], + "$jup58": [ + 24.35, + 70.16 + ], + "$jup59": [ + 20.9, + 70.43 + ], + "$jup60": [ + 17.43, + 70.67 + ], + "$jup61": [ + 13.96, + 70.86 + ], + "$jup62": [ + 10.48, + 71.01 + ], + "$jup63": [ + 6.99, + 71.12 + ], + "$jup64": [ + 3.49, + 71.18 + ], + "$jup65": [ + 0, + 71.21 + ], + "$jup66": [ + -3.49, + 71.18 + ], + "$jup67": [ + -6.99, + 71.12 + ], + "$jup68": [ + -10.48, + 71.01 + ], + "$jup69": [ + -13.96, + 70.86 + ], + "$jup70": [ + -17.43, + 70.67 + ], + "$jup71": [ + -20.9, + 70.43 + ], + "$jup72": [ + -24.35, + 70.16 + ], + "$jup73": [ + -27.78, + 69.84 + ], + "$jup74": [ + -31.2, + 69.48 + ], + "$jup75": [ + -34.6, + 69.07 + ], + "$jup76": [ + -37.98, + 68.63 + ], + "$jup77": [ + -41.34, + 68.14 + ], + "$jup78": [ + -44.67, + 67.61 + ], + "$jup79": [ + -47.98, + 67.04 + ], + "$jup80": [ + -51.25, + 66.43 + ], + "$jup81": [ + -54.5, + 65.79 + ], + "$jup82": [ + -57.71, + 65.1 + ], + "$jup83": [ + -60.89, + 64.37 + ], + "$jup84": [ + -64.03, + 63.6 + ], + "$jup85": [ + -67.13, + 62.8 + ], + "$jup86": [ + -70.19, + 61.96 + ], + "$jup87": [ + -73.21, + 61.08 + ], + "$jup88": [ + -76.19, + 60.16 + ], + "$jup89": [ + -79.12, + 59.21 + ], + "$jup90": [ + -82, + 58.22 + ], + "$jup91": [ + -84.83, + 57.19 + ], + "$jup92": [ + -87.62, + 56.13 + ], + "$jup93": [ + -90.34, + 55.04 + ], + "$jup94": [ + -93.02, + 53.92 + ], + "$jup95": [ + -95.64, + 52.76 + ], + "$jup96": [ + -98.2, + 51.57 + ], + "$jup97": [ + -100.7, + 50.35 + ], + "$jup98": [ + -103.14, + 49.1 + ], + "$jup99": [ + -105.52, + 47.82 + ], + "$jup100": [ + -107.84, + 46.51 + ], + "$jup101": [ + -110.09, + 45.17 + ], + "$jup102": [ + -112.27, + 43.81 + ], + "$jup103": [ + -114.39, + 42.42 + ], + "$jup104": [ + -116.43, + 41 + ], + "$jup105": [ + -118.41, + 39.56 + ], + "$jup106": [ + -120.32, + 38.09 + ], + "$jup107": [ + -122.15, + 36.61 + ], + "$jup108": [ + -123.91, + 35.1 + ], + "$jup109": [ + -125.6, + 33.57 + ], + "$jup110": [ + -127.21, + 32.01 + ], + "$jup111": [ + -128.74, + 30.44 + ], + "$jup112": [ + -130.19, + 28.86 + ], + "$jup113": [ + -131.57, + 27.25 + ], + "$jup114": [ + -132.87, + 25.63 + ], + "$jup115": [ + -134.09, + 23.99 + ], + "$jup116": [ + -135.22, + 22.34 + ], + "$jup117": [ + -136.28, + 20.67 + ], + "$jup118": [ + -137.25, + 18.99 + ], + "$jup119": [ + -138.14, + 17.3 + ], + "$jup120": [ + -138.95, + 15.6 + ], + "$jup121": [ + -139.67, + 13.89 + ], + "$jup122": [ + -140.31, + 12.17 + ], + "$jup123": [ + -140.87, + 10.45 + ], + "$jup124": [ + -141.34, + 8.72 + ], + "$jup125": [ + -141.73, + 6.98 + ], + "$jup126": [ + -142.03, + 5.24 + ], + "$jup127": [ + -142.24, + 3.49 + ], + "$jup128": [ + -142.37, + 1.75 + ], + "$jup129": [ + -142.41, + 0 + ], + "$jup130": [ + -142.37, + -1.75 + ], + "$jup131": [ + -142.24, + -3.49 + ], + "$jup132": [ + -142.03, + -5.24 + ], + "$jup133": [ + -141.73, + -6.98 + ], + "$jup134": [ + -141.34, + -8.72 + ], + "$jup135": [ + -140.87, + -10.45 + ], + "$jup136": [ + -140.31, + -12.17 + ], + "$jup137": [ + -139.67, + -13.89 + ], + "$jup138": [ + -138.95, + -15.6 + ], + "$jup139": [ + -138.14, + -17.3 + ], + "$jup140": [ + -137.25, + -18.99 + ], + "$jup141": [ + -136.28, + -20.67 + ], + "$jup142": [ + -135.22, + -22.34 + ], + "$jup143": [ + -134.09, + -23.99 + ], + "$jup144": [ + -132.87, + -25.63 + ], + "$jup145": [ + -131.57, + -27.25 + ], + "$jup146": [ + -130.19, + -28.86 + ], + "$jup147": [ + -128.74, + -30.44 + ], + "$jup148": [ + -127.21, + -32.01 + ], + "$jup149": [ + -125.6, + -33.57 + ], + "$jup150": [ + -123.91, + -35.1 + ], + "$jup151": [ + -122.15, + -36.61 + ], + "$jup152": [ + -120.32, + -38.09 + ], + "$jup153": [ + -118.41, + -39.56 + ], + "$jup154": [ + -116.43, + -41 + ], + "$jup155": [ + -114.39, + -42.42 + ], + "$jup156": [ + -112.27, + -43.81 + ], + "$jup157": [ + -110.09, + -45.17 + ], + "$jup158": [ + -107.84, + -46.51 + ], + "$jup159": [ + -105.52, + -47.82 + ], + "$jup160": [ + -103.14, + -49.1 + ], + "$jup161": [ + -100.7, + -50.35 + ], + "$jup162": [ + -98.2, + -51.57 + ], + "$jup163": [ + -95.64, + -52.76 + ], + "$jup164": [ + -93.02, + -53.92 + ], + "$jup165": [ + -90.34, + -55.04 + ], + "$jup166": [ + -87.62, + -56.13 + ], + "$jup167": [ + -84.83, + -57.19 + ], + "$jup168": [ + -82, + -58.22 + ], + "$jup169": [ + -79.12, + -59.21 + ], + "$jup170": [ + -76.19, + -60.16 + ], + "$jup171": [ + -73.21, + -61.08 + ], + "$jup172": [ + -70.19, + -61.96 + ], + "$jup173": [ + -67.13, + -62.8 + ], + "$jup174": [ + -64.03, + -63.6 + ], + "$jup175": [ + -60.89, + -64.37 + ], + "$jup176": [ + -57.71, + -65.1 + ], + "$jup177": [ + -54.5, + -65.79 + ], + "$jup178": [ + -51.25, + -66.43 + ], + "$jup179": [ + -47.98, + -67.04 + ], + "$jup180": [ + -44.67, + -67.61 + ], + "$jup181": [ + -41.34, + -68.14 + ], + "$jup182": [ + -37.98, + -68.63 + ], + "$jup183": [ + -34.6, + -69.07 + ], + "$jup184": [ + -31.2, + -69.48 + ], + "$jup185": [ + -27.78, + -69.84 + ], + "$jup186": [ + -24.35, + -70.16 + ], + "$jup187": [ + -20.9, + -70.43 + ], + "$jup188": [ + -17.43, + -70.67 + ], + "$jup189": [ + -13.96, + -70.86 + ], + "$jup190": [ + -10.48, + -71.01 + ], + "$jup191": [ + -6.99, + -71.12 + ], + "$jup192": [ + -3.49, + -71.18 + ], + "$jup193": [ + 0, + -71.21 + ], + "$jup194": [ + 3.49, + -71.18 + ], + "$jup195": [ + 6.99, + -71.12 + ], + "$jup196": [ + 10.48, + -71.01 + ], + "$jup197": [ + 13.96, + -70.86 + ], + "$jup198": [ + 17.43, + -70.67 + ], + "$jup199": [ + 20.9, + -70.43 + ], + "$jup200": [ + 24.35, + -70.16 + ], + "$jup201": [ + 27.78, + -69.84 + ], + "$jup202": [ + 31.2, + -69.48 + ], + "$jup203": [ + 34.6, + -69.07 + ], + "$jup204": [ + 37.98, + -68.63 + ], + "$jup205": [ + 41.34, + -68.14 + ], + "$jup206": [ + 44.67, + -67.61 + ], + "$jup207": [ + 47.98, + -67.04 + ], + "$jup208": [ + 51.25, + -66.43 + ], + "$jup209": [ + 54.5, + -65.79 + ], + "$jup210": [ + 57.71, + -65.1 + ], + "$jup211": [ + 60.89, + -64.37 + ], + "$jup212": [ + 64.03, + -63.6 + ], + "$jup213": [ + 67.13, + -62.8 + ], + "$jup214": [ + 70.19, + -61.96 + ], + "$jup215": [ + 73.21, + -61.08 + ], + "$jup216": [ + 76.19, + -60.16 + ], + "$jup217": [ + 79.12, + -59.21 + ], + "$jup218": [ + 82, + -58.22 + ], + "$jup219": [ + 84.83, + -57.19 + ], + "$jup220": [ + 87.62, + -56.13 + ], + "$jup221": [ + 90.34, + -55.04 + ], + "$jup222": [ + 93.02, + -53.92 + ], + "$jup223": [ + 95.64, + -52.76 + ], + "$jup224": [ + 98.2, + -51.57 + ], + "$jup225": [ + 100.7, + -50.35 + ], + "$jup226": [ + 103.14, + -49.1 + ], + "$jup227": [ + 105.52, + -47.82 + ], + "$jup228": [ + 107.84, + -46.51 + ], + "$jup229": [ + 110.09, + -45.17 + ], + "$jup230": [ + 112.27, + -43.81 + ], + "$jup231": [ + 114.39, + -42.42 + ], + "$jup232": [ + 116.43, + -41 + ], + "$jup233": [ + 118.41, + -39.56 + ], + "$jup234": [ + 120.32, + -38.09 + ], + "$jup235": [ + 122.15, + -36.61 + ], + "$jup236": [ + 123.91, + -35.1 + ], + "$jup237": [ + 125.6, + -33.57 + ], + "$jup238": [ + 127.21, + -32.01 + ], + "$jup239": [ + 128.74, + -30.44 + ], + "$jup240": [ + 130.19, + -28.86 + ], + "$jup241": [ + 131.57, + -27.25 + ], + "$jup242": [ + 132.87, + -25.63 + ], + "$jup243": [ + 134.09, + -23.99 + ], + "$jup244": [ + 135.22, + -22.34 + ], + "$jup245": [ + 136.28, + -20.67 + ], + "$jup246": [ + 137.25, + -18.99 + ], + "$jup247": [ + 138.14, + -17.3 + ], + "$jup248": [ + 138.95, + -15.6 + ], + "$jup249": [ + 139.67, + -13.89 + ], + "$jup250": [ + 140.31, + -12.17 + ], + "$jup251": [ + 140.87, + -10.45 + ], + "$jup252": [ + 141.34, + -8.72 + ], + "$jup253": [ + 141.73, + -6.98 + ], + "$jup254": [ + 142.03, + -5.24 + ], + "$jup255": [ + 142.24, + -3.49 + ], + "$jup256": [ + 142.37, + -1.75 + ] + } + }, + { + "Saturn@celestial.solar_system_planet": { + "$control_name": "saturn", + "$texture": "textures/ui/cosmos/celestial_selector/saturn", + "$size": [ + 20, + 8 + ], + "anims": [ + "@celestial.saturn_orbit_step223" + ], + "$orbit_duration": 0.390625, + "$sat1": [ + 161.32, + 0 + ], + "$sat2": [ + 161.27, + 1.98 + ], + "$sat3": [ + 161.13, + 3.96 + ], + "$sat4": [ + 160.88, + 5.93 + ], + "$sat5": [ + 160.54, + 7.91 + ], + "$sat6": [ + 160.11, + 9.87 + ], + "$sat7": [ + 159.57, + 11.84 + ], + "$sat8": [ + 158.94, + 13.79 + ], + "$sat9": [ + 158.22, + 15.74 + ], + "$sat10": [ + 157.4, + 17.67 + ], + "$sat11": [ + 156.49, + 19.6 + ], + "$sat12": [ + 155.48, + 21.51 + ], + "$sat13": [ + 154.37, + 23.41 + ], + "$sat14": [ + 153.18, + 25.3 + ], + "$sat15": [ + 151.89, + 27.17 + ], + "$sat16": [ + 150.51, + 29.03 + ], + "$sat17": [ + 149.04, + 30.87 + ], + "$sat18": [ + 147.48, + 32.69 + ], + "$sat19": [ + 145.83, + 34.49 + ], + "$sat20": [ + 144.09, + 36.27 + ], + "$sat21": [ + 142.27, + 38.02 + ], + "$sat22": [ + 140.36, + 39.76 + ], + "$sat23": [ + 138.37, + 41.47 + ], + "$sat24": [ + 136.29, + 43.15 + ], + "$sat25": [ + 134.13, + 44.81 + ], + "$sat26": [ + 131.89, + 46.44 + ], + "$sat27": [ + 129.57, + 48.05 + ], + "$sat28": [ + 127.18, + 49.62 + ], + "$sat29": [ + 124.7, + 51.17 + ], + "$sat30": [ + 122.15, + 52.68 + ], + "$sat31": [ + 119.53, + 54.17 + ], + "$sat32": [ + 116.84, + 55.62 + ], + "$sat33": [ + 114.07, + 57.04 + ], + "$sat34": [ + 111.24, + 58.42 + ], + "$sat35": [ + 108.34, + 59.76 + ], + "$sat36": [ + 105.37, + 61.08 + ], + "$sat37": [ + 102.34, + 62.35 + ], + "$sat38": [ + 99.25, + 63.59 + ], + "$sat39": [ + 96.1, + 64.79 + ], + "$sat40": [ + 92.89, + 65.95 + ], + "$sat41": [ + 89.62, + 67.07 + ], + "$sat42": [ + 86.31, + 68.15 + ], + "$sat43": [ + 82.93, + 69.18 + ], + "$sat44": [ + 79.51, + 70.18 + ], + "$sat45": [ + 76.05, + 71.14 + ], + "$sat46": [ + 72.53, + 72.05 + ], + "$sat47": [ + 68.97, + 72.92 + ], + "$sat48": [ + 65.37, + 73.74 + ], + "$sat49": [ + 61.73, + 74.52 + ], + "$sat50": [ + 58.06, + 75.25 + ], + "$sat51": [ + 54.35, + 75.94 + ], + "$sat52": [ + 50.6, + 76.59 + ], + "$sat53": [ + 46.83, + 77.19 + ], + "$sat54": [ + 43.03, + 77.74 + ], + "$sat55": [ + 39.2, + 78.24 + ], + "$sat56": [ + 35.35, + 78.7 + ], + "$sat57": [ + 31.47, + 79.11 + ], + "$sat58": [ + 27.58, + 79.47 + ], + "$sat59": [ + 23.67, + 79.79 + ], + "$sat60": [ + 19.75, + 80.05 + ], + "$sat61": [ + 15.81, + 80.27 + ], + "$sat62": [ + 11.87, + 80.44 + ], + "$sat63": [ + 7.92, + 80.56 + ], + "$sat64": [ + 3.96, + 80.64 + ], + "$sat65": [ + 0, + 80.66 + ], + "$sat66": [ + -3.96, + 80.64 + ], + "$sat67": [ + -7.92, + 80.56 + ], + "$sat68": [ + -11.87, + 80.44 + ], + "$sat69": [ + -15.81, + 80.27 + ], + "$sat70": [ + -19.75, + 80.05 + ], + "$sat71": [ + -23.67, + 79.79 + ], + "$sat72": [ + -27.58, + 79.47 + ], + "$sat73": [ + -31.47, + 79.11 + ], + "$sat74": [ + -35.35, + 78.7 + ], + "$sat75": [ + -39.2, + 78.24 + ], + "$sat76": [ + -43.03, + 77.74 + ], + "$sat77": [ + -46.83, + 77.19 + ], + "$sat78": [ + -50.6, + 76.59 + ], + "$sat79": [ + -54.35, + 75.94 + ], + "$sat80": [ + -58.06, + 75.25 + ], + "$sat81": [ + -61.73, + 74.52 + ], + "$sat82": [ + -65.37, + 73.74 + ], + "$sat83": [ + -68.97, + 72.92 + ], + "$sat84": [ + -72.53, + 72.05 + ], + "$sat85": [ + -76.05, + 71.14 + ], + "$sat86": [ + -79.51, + 70.18 + ], + "$sat87": [ + -82.93, + 69.18 + ], + "$sat88": [ + -86.31, + 68.15 + ], + "$sat89": [ + -89.62, + 67.07 + ], + "$sat90": [ + -92.89, + 65.95 + ], + "$sat91": [ + -96.1, + 64.79 + ], + "$sat92": [ + -99.25, + 63.59 + ], + "$sat93": [ + -102.34, + 62.35 + ], + "$sat94": [ + -105.37, + 61.08 + ], + "$sat95": [ + -108.34, + 59.76 + ], + "$sat96": [ + -111.24, + 58.42 + ], + "$sat97": [ + -114.07, + 57.04 + ], + "$sat98": [ + -116.84, + 55.62 + ], + "$sat99": [ + -119.53, + 54.17 + ], + "$sat100": [ + -122.15, + 52.68 + ], + "$sat101": [ + -124.7, + 51.17 + ], + "$sat102": [ + -127.18, + 49.62 + ], + "$sat103": [ + -129.57, + 48.05 + ], + "$sat104": [ + -131.89, + 46.44 + ], + "$sat105": [ + -134.13, + 44.81 + ], + "$sat106": [ + -136.29, + 43.15 + ], + "$sat107": [ + -138.37, + 41.47 + ], + "$sat108": [ + -140.36, + 39.76 + ], + "$sat109": [ + -142.27, + 38.02 + ], + "$sat110": [ + -144.09, + 36.27 + ], + "$sat111": [ + -145.83, + 34.49 + ], + "$sat112": [ + -147.48, + 32.69 + ], + "$sat113": [ + -149.04, + 30.87 + ], + "$sat114": [ + -150.51, + 29.03 + ], + "$sat115": [ + -151.89, + 27.17 + ], + "$sat116": [ + -153.18, + 25.3 + ], + "$sat117": [ + -154.37, + 23.41 + ], + "$sat118": [ + -155.48, + 21.51 + ], + "$sat119": [ + -156.49, + 19.6 + ], + "$sat120": [ + -157.4, + 17.67 + ], + "$sat121": [ + -158.22, + 15.74 + ], + "$sat122": [ + -158.94, + 13.79 + ], + "$sat123": [ + -159.57, + 11.84 + ], + "$sat124": [ + -160.11, + 9.87 + ], + "$sat125": [ + -160.54, + 7.91 + ], + "$sat126": [ + -160.88, + 5.93 + ], + "$sat127": [ + -161.13, + 3.96 + ], + "$sat128": [ + -161.27, + 1.98 + ], + "$sat129": [ + -161.32, + 0 + ], + "$sat130": [ + -161.27, + -1.98 + ], + "$sat131": [ + -161.13, + -3.96 + ], + "$sat132": [ + -160.88, + -5.93 + ], + "$sat133": [ + -160.54, + -7.91 + ], + "$sat134": [ + -160.11, + -9.87 + ], + "$sat135": [ + -159.57, + -11.84 + ], + "$sat136": [ + -158.94, + -13.79 + ], + "$sat137": [ + -158.22, + -15.74 + ], + "$sat138": [ + -157.4, + -17.67 + ], + "$sat139": [ + -156.49, + -19.6 + ], + "$sat140": [ + -155.48, + -21.51 + ], + "$sat141": [ + -154.37, + -23.41 + ], + "$sat142": [ + -153.18, + -25.3 + ], + "$sat143": [ + -151.89, + -27.17 + ], + "$sat144": [ + -150.51, + -29.03 + ], + "$sat145": [ + -149.04, + -30.87 + ], + "$sat146": [ + -147.48, + -32.69 + ], + "$sat147": [ + -145.83, + -34.49 + ], + "$sat148": [ + -144.09, + -36.27 + ], + "$sat149": [ + -142.27, + -38.02 + ], + "$sat150": [ + -140.36, + -39.76 + ], + "$sat151": [ + -138.37, + -41.47 + ], + "$sat152": [ + -136.29, + -43.15 + ], + "$sat153": [ + -134.13, + -44.81 + ], + "$sat154": [ + -131.89, + -46.44 + ], + "$sat155": [ + -129.57, + -48.05 + ], + "$sat156": [ + -127.18, + -49.62 + ], + "$sat157": [ + -124.7, + -51.17 + ], + "$sat158": [ + -122.15, + -52.68 + ], + "$sat159": [ + -119.53, + -54.17 + ], + "$sat160": [ + -116.84, + -55.62 + ], + "$sat161": [ + -114.07, + -57.04 + ], + "$sat162": [ + -111.24, + -58.42 + ], + "$sat163": [ + -108.34, + -59.76 + ], + "$sat164": [ + -105.37, + -61.08 + ], + "$sat165": [ + -102.34, + -62.35 + ], + "$sat166": [ + -99.25, + -63.59 + ], + "$sat167": [ + -96.1, + -64.79 + ], + "$sat168": [ + -92.89, + -65.95 + ], + "$sat169": [ + -89.62, + -67.07 + ], + "$sat170": [ + -86.31, + -68.15 + ], + "$sat171": [ + -82.93, + -69.18 + ], + "$sat172": [ + -79.51, + -70.18 + ], + "$sat173": [ + -76.05, + -71.14 + ], + "$sat174": [ + -72.53, + -72.05 + ], + "$sat175": [ + -68.97, + -72.92 + ], + "$sat176": [ + -65.37, + -73.74 + ], + "$sat177": [ + -61.73, + -74.52 + ], + "$sat178": [ + -58.06, + -75.25 + ], + "$sat179": [ + -54.35, + -75.94 + ], + "$sat180": [ + -50.6, + -76.59 + ], + "$sat181": [ + -46.83, + -77.19 + ], + "$sat182": [ + -43.03, + -77.74 + ], + "$sat183": [ + -39.2, + -78.24 + ], + "$sat184": [ + -35.35, + -78.7 + ], + "$sat185": [ + -31.47, + -79.11 + ], + "$sat186": [ + -27.58, + -79.47 + ], + "$sat187": [ + -23.67, + -79.79 + ], + "$sat188": [ + -19.75, + -80.05 + ], + "$sat189": [ + -15.81, + -80.27 + ], + "$sat190": [ + -11.87, + -80.44 + ], + "$sat191": [ + -7.92, + -80.56 + ], + "$sat192": [ + -3.96, + -80.64 + ], + "$sat193": [ + 0, + -80.66 + ], + "$sat194": [ + 3.96, + -80.64 + ], + "$sat195": [ + 7.92, + -80.56 + ], + "$sat196": [ + 11.87, + -80.44 + ], + "$sat197": [ + 15.81, + -80.27 + ], + "$sat198": [ + 19.75, + -80.05 + ], + "$sat199": [ + 23.67, + -79.79 + ], + "$sat200": [ + 27.58, + -79.47 + ], + "$sat201": [ + 31.47, + -79.11 + ], + "$sat202": [ + 35.35, + -78.7 + ], + "$sat203": [ + 39.2, + -78.24 + ], + "$sat204": [ + 43.03, + -77.74 + ], + "$sat205": [ + 46.83, + -77.19 + ], + "$sat206": [ + 50.6, + -76.59 + ], + "$sat207": [ + 54.35, + -75.94 + ], + "$sat208": [ + 58.06, + -75.25 + ], + "$sat209": [ + 61.73, + -74.52 + ], + "$sat210": [ + 65.37, + -73.74 + ], + "$sat211": [ + 68.97, + -72.92 + ], + "$sat212": [ + 72.53, + -72.05 + ], + "$sat213": [ + 76.05, + -71.14 + ], + "$sat214": [ + 79.51, + -70.18 + ], + "$sat215": [ + 82.93, + -69.18 + ], + "$sat216": [ + 86.31, + -68.15 + ], + "$sat217": [ + 89.62, + -67.07 + ], + "$sat218": [ + 92.89, + -65.95 + ], + "$sat219": [ + 96.1, + -64.79 + ], + "$sat220": [ + 99.25, + -63.59 + ], + "$sat221": [ + 102.34, + -62.35 + ], + "$sat222": [ + 105.37, + -61.08 + ], + "$sat223": [ + 108.34, + -59.76 + ], + "$sat224": [ + 111.24, + -58.42 + ], + "$sat225": [ + 114.07, + -57.04 + ], + "$sat226": [ + 116.84, + -55.62 + ], + "$sat227": [ + 119.53, + -54.17 + ], + "$sat228": [ + 122.15, + -52.68 + ], + "$sat229": [ + 124.7, + -51.17 + ], + "$sat230": [ + 127.18, + -49.62 + ], + "$sat231": [ + 129.57, + -48.05 + ], + "$sat232": [ + 131.89, + -46.44 + ], + "$sat233": [ + 134.13, + -44.81 + ], + "$sat234": [ + 136.29, + -43.15 + ], + "$sat235": [ + 138.37, + -41.47 + ], + "$sat236": [ + 140.36, + -39.76 + ], + "$sat237": [ + 142.27, + -38.02 + ], + "$sat238": [ + 144.09, + -36.27 + ], + "$sat239": [ + 145.83, + -34.49 + ], + "$sat240": [ + 147.48, + -32.69 + ], + "$sat241": [ + 149.04, + -30.87 + ], + "$sat242": [ + 150.51, + -29.03 + ], + "$sat243": [ + 151.89, + -27.17 + ], + "$sat244": [ + 153.18, + -25.3 + ], + "$sat245": [ + 154.37, + -23.41 + ], + "$sat246": [ + 155.48, + -21.51 + ], + "$sat247": [ + 156.49, + -19.6 + ], + "$sat248": [ + 157.4, + -17.67 + ], + "$sat249": [ + 158.22, + -15.74 + ], + "$sat250": [ + 158.94, + -13.79 + ], + "$sat251": [ + 159.57, + -11.84 + ], + "$sat252": [ + 160.11, + -9.87 + ], + "$sat253": [ + 160.54, + -7.91 + ], + "$sat254": [ + 160.88, + -5.93 + ], + "$sat255": [ + 161.13, + -3.96 + ], + "$sat256": [ + 161.27, + -1.98 + ] + } + }, + { + "Uranus@celestial.solar_system_planet": { + "$control_name": "uranus", + "$texture": "textures/ui/cosmos/celestial_selector/uranus", + "$size": [ + 8, + 20 + ], + "anims": [ + "@celestial.uranus_orbit_step32" + ], + "$orbit_duration": 0.46875, + "$ura1": [ + 181.73, + 0 + ], + "$ura2": [ + 181.67, + 2.23 + ], + "$ura3": [ + 181.51, + 4.46 + ], + "$ura4": [ + 181.24, + 6.68 + ], + "$ura5": [ + 180.85, + 8.91 + ], + "$ura6": [ + 180.36, + 11.12 + ], + "$ura7": [ + 179.76, + 13.33 + ], + "$ura8": [ + 179.05, + 15.53 + ], + "$ura9": [ + 178.24, + 17.73 + ], + "$ura10": [ + 177.31, + 19.91 + ], + "$ura11": [ + 176.28, + 22.08 + ], + "$ura12": [ + 175.14, + 24.23 + ], + "$ura13": [ + 173.9, + 26.38 + ], + "$ura14": [ + 172.56, + 28.5 + ], + "$ura15": [ + 171.1, + 30.61 + ], + "$ura16": [ + 169.55, + 32.7 + ], + "$ura17": [ + 167.89, + 34.77 + ], + "$ura18": [ + 166.14, + 36.82 + ], + "$ura19": [ + 164.28, + 38.85 + ], + "$ura20": [ + 162.32, + 40.85 + ], + "$ura21": [ + 160.27, + 42.83 + ], + "$ura22": [ + 158.12, + 44.79 + ], + "$ura23": [ + 155.87, + 46.71 + ], + "$ura24": [ + 153.53, + 48.61 + ], + "$ura25": [ + 151.1, + 50.48 + ], + "$ura26": [ + 148.58, + 52.32 + ], + "$ura27": [ + 145.97, + 54.13 + ], + "$ura28": [ + 143.26, + 55.9 + ], + "$ura29": [ + 140.48, + 57.64 + ], + "$ura30": [ + 137.61, + 59.35 + ], + "$ura31": [ + 134.65, + 61.02 + ], + "$ura32": [ + 131.62, + 62.65 + ], + "$ura33": [ + 128.5, + 64.25 + ], + "$ura34": [ + 125.31, + 65.81 + ], + "$ura35": [ + 122.04, + 67.33 + ], + "$ura36": [ + 118.7, + 68.8 + ], + "$ura37": [ + 115.29, + 70.24 + ], + "$ura38": [ + 111.8, + 71.63 + ], + "$ura39": [ + 108.26, + 72.98 + ], + "$ura40": [ + 104.64, + 74.29 + ], + "$ura41": [ + 100.96, + 75.55 + ], + "$ura42": [ + 97.22, + 76.77 + ], + "$ura43": [ + 93.43, + 77.94 + ], + "$ura44": [ + 89.57, + 79.06 + ], + "$ura45": [ + 85.67, + 80.13 + ], + "$ura46": [ + 81.71, + 81.16 + ], + "$ura47": [ + 77.7, + 82.14 + ], + "$ura48": [ + 73.64, + 83.07 + ], + "$ura49": [ + 69.54, + 83.95 + ], + "$ura50": [ + 65.4, + 84.78 + ], + "$ura51": [ + 61.22, + 85.55 + ], + "$ura52": [ + 57, + 86.28 + ], + "$ura53": [ + 52.75, + 86.95 + ], + "$ura54": [ + 48.47, + 87.57 + ], + "$ura55": [ + 44.16, + 88.14 + ], + "$ura56": [ + 39.82, + 88.66 + ], + "$ura57": [ + 35.45, + 89.12 + ], + "$ura58": [ + 31.07, + 89.53 + ], + "$ura59": [ + 26.67, + 89.88 + ], + "$ura60": [ + 22.25, + 90.18 + ], + "$ura61": [ + 17.81, + 90.43 + ], + "$ura62": [ + 13.37, + 90.62 + ], + "$ura63": [ + 8.92, + 90.75 + ], + "$ura64": [ + 4.46, + 90.84 + ], + "$ura65": [ + 0, + 90.86 + ], + "$ura66": [ + -4.46, + 90.84 + ], + "$ura67": [ + -8.92, + 90.75 + ], + "$ura68": [ + -13.37, + 90.62 + ], + "$ura69": [ + -17.81, + 90.43 + ], + "$ura70": [ + -22.25, + 90.18 + ], + "$ura71": [ + -26.67, + 89.88 + ], + "$ura72": [ + -31.07, + 89.53 + ], + "$ura73": [ + -35.45, + 89.12 + ], + "$ura74": [ + -39.82, + 88.66 + ], + "$ura75": [ + -44.16, + 88.14 + ], + "$ura76": [ + -48.47, + 87.57 + ], + "$ura77": [ + -52.75, + 86.95 + ], + "$ura78": [ + -57, + 86.28 + ], + "$ura79": [ + -61.22, + 85.55 + ], + "$ura80": [ + -65.4, + 84.78 + ], + "$ura81": [ + -69.54, + 83.95 + ], + "$ura82": [ + -73.64, + 83.07 + ], + "$ura83": [ + -77.7, + 82.14 + ], + "$ura84": [ + -81.71, + 81.16 + ], + "$ura85": [ + -85.67, + 80.13 + ], + "$ura86": [ + -89.57, + 79.06 + ], + "$ura87": [ + -93.43, + 77.94 + ], + "$ura88": [ + -97.22, + 76.77 + ], + "$ura89": [ + -100.96, + 75.55 + ], + "$ura90": [ + -104.64, + 74.29 + ], + "$ura91": [ + -108.26, + 72.98 + ], + "$ura92": [ + -111.8, + 71.63 + ], + "$ura93": [ + -115.29, + 70.24 + ], + "$ura94": [ + -118.7, + 68.8 + ], + "$ura95": [ + -122.04, + 67.33 + ], + "$ura96": [ + -125.31, + 65.81 + ], + "$ura97": [ + -128.5, + 64.25 + ], + "$ura98": [ + -131.62, + 62.65 + ], + "$ura99": [ + -134.65, + 61.02 + ], + "$ura100": [ + -137.61, + 59.35 + ], + "$ura101": [ + -140.48, + 57.64 + ], + "$ura102": [ + -143.26, + 55.9 + ], + "$ura103": [ + -145.97, + 54.13 + ], + "$ura104": [ + -148.58, + 52.32 + ], + "$ura105": [ + -151.1, + 50.48 + ], + "$ura106": [ + -153.53, + 48.61 + ], + "$ura107": [ + -155.87, + 46.71 + ], + "$ura108": [ + -158.12, + 44.79 + ], + "$ura109": [ + -160.27, + 42.83 + ], + "$ura110": [ + -162.32, + 40.85 + ], + "$ura111": [ + -164.28, + 38.85 + ], + "$ura112": [ + -166.14, + 36.82 + ], + "$ura113": [ + -167.89, + 34.77 + ], + "$ura114": [ + -169.55, + 32.7 + ], + "$ura115": [ + -171.1, + 30.61 + ], + "$ura116": [ + -172.56, + 28.5 + ], + "$ura117": [ + -173.9, + 26.38 + ], + "$ura118": [ + -175.14, + 24.23 + ], + "$ura119": [ + -176.28, + 22.08 + ], + "$ura120": [ + -177.31, + 19.91 + ], + "$ura121": [ + -178.24, + 17.73 + ], + "$ura122": [ + -179.05, + 15.53 + ], + "$ura123": [ + -179.76, + 13.33 + ], + "$ura124": [ + -180.36, + 11.12 + ], + "$ura125": [ + -180.85, + 8.91 + ], + "$ura126": [ + -181.24, + 6.68 + ], + "$ura127": [ + -181.51, + 4.46 + ], + "$ura128": [ + -181.67, + 2.23 + ], + "$ura129": [ + -181.73, + 0 + ], + "$ura130": [ + -181.67, + -2.23 + ], + "$ura131": [ + -181.51, + -4.46 + ], + "$ura132": [ + -181.24, + -6.68 + ], + "$ura133": [ + -180.85, + -8.91 + ], + "$ura134": [ + -180.36, + -11.12 + ], + "$ura135": [ + -179.76, + -13.33 + ], + "$ura136": [ + -179.05, + -15.53 + ], + "$ura137": [ + -178.24, + -17.73 + ], + "$ura138": [ + -177.31, + -19.91 + ], + "$ura139": [ + -176.28, + -22.08 + ], + "$ura140": [ + -175.14, + -24.23 + ], + "$ura141": [ + -173.9, + -26.38 + ], + "$ura142": [ + -172.56, + -28.5 + ], + "$ura143": [ + -171.1, + -30.61 + ], + "$ura144": [ + -169.55, + -32.7 + ], + "$ura145": [ + -167.89, + -34.77 + ], + "$ura146": [ + -166.14, + -36.82 + ], + "$ura147": [ + -164.28, + -38.85 + ], + "$ura148": [ + -162.32, + -40.85 + ], + "$ura149": [ + -160.27, + -42.83 + ], + "$ura150": [ + -158.12, + -44.79 + ], + "$ura151": [ + -155.87, + -46.71 + ], + "$ura152": [ + -153.53, + -48.61 + ], + "$ura153": [ + -151.1, + -50.48 + ], + "$ura154": [ + -148.58, + -52.32 + ], + "$ura155": [ + -145.97, + -54.13 + ], + "$ura156": [ + -143.26, + -55.9 + ], + "$ura157": [ + -140.48, + -57.64 + ], + "$ura158": [ + -137.61, + -59.35 + ], + "$ura159": [ + -134.65, + -61.02 + ], + "$ura160": [ + -131.62, + -62.65 + ], + "$ura161": [ + -128.5, + -64.25 + ], + "$ura162": [ + -125.31, + -65.81 + ], + "$ura163": [ + -122.04, + -67.33 + ], + "$ura164": [ + -118.7, + -68.8 + ], + "$ura165": [ + -115.29, + -70.24 + ], + "$ura166": [ + -111.8, + -71.63 + ], + "$ura167": [ + -108.26, + -72.98 + ], + "$ura168": [ + -104.64, + -74.29 + ], + "$ura169": [ + -100.96, + -75.55 + ], + "$ura170": [ + -97.22, + -76.77 + ], + "$ura171": [ + -93.43, + -77.94 + ], + "$ura172": [ + -89.57, + -79.06 + ], + "$ura173": [ + -85.67, + -80.13 + ], + "$ura174": [ + -81.71, + -81.16 + ], + "$ura175": [ + -77.7, + -82.14 + ], + "$ura176": [ + -73.64, + -83.07 + ], + "$ura177": [ + -69.54, + -83.95 + ], + "$ura178": [ + -65.4, + -84.78 + ], + "$ura179": [ + -61.22, + -85.55 + ], + "$ura180": [ + -57, + -86.28 + ], + "$ura181": [ + -52.75, + -86.95 + ], + "$ura182": [ + -48.47, + -87.57 + ], + "$ura183": [ + -44.16, + -88.14 + ], + "$ura184": [ + -39.82, + -88.66 + ], + "$ura185": [ + -35.45, + -89.12 + ], + "$ura186": [ + -31.07, + -89.53 + ], + "$ura187": [ + -26.67, + -89.88 + ], + "$ura188": [ + -22.25, + -90.18 + ], + "$ura189": [ + -17.81, + -90.43 + ], + "$ura190": [ + -13.37, + -90.62 + ], + "$ura191": [ + -8.92, + -90.75 + ], + "$ura192": [ + -4.46, + -90.84 + ], + "$ura193": [ + 0, + -90.86 + ], + "$ura194": [ + 4.46, + -90.84 + ], + "$ura195": [ + 8.92, + -90.75 + ], + "$ura196": [ + 13.37, + -90.62 + ], + "$ura197": [ + 17.81, + -90.43 + ], + "$ura198": [ + 22.25, + -90.18 + ], + "$ura199": [ + 26.67, + -89.88 + ], + "$ura200": [ + 31.07, + -89.53 + ], + "$ura201": [ + 35.45, + -89.12 + ], + "$ura202": [ + 39.82, + -88.66 + ], + "$ura203": [ + 44.16, + -88.14 + ], + "$ura204": [ + 48.47, + -87.57 + ], + "$ura205": [ + 52.75, + -86.95 + ], + "$ura206": [ + 57, + -86.28 + ], + "$ura207": [ + 61.22, + -85.55 + ], + "$ura208": [ + 65.4, + -84.78 + ], + "$ura209": [ + 69.54, + -83.95 + ], + "$ura210": [ + 73.64, + -83.07 + ], + "$ura211": [ + 77.7, + -82.14 + ], + "$ura212": [ + 81.71, + -81.16 + ], + "$ura213": [ + 85.67, + -80.13 + ], + "$ura214": [ + 89.57, + -79.06 + ], + "$ura215": [ + 93.43, + -77.94 + ], + "$ura216": [ + 97.22, + -76.77 + ], + "$ura217": [ + 100.96, + -75.55 + ], + "$ura218": [ + 104.64, + -74.29 + ], + "$ura219": [ + 108.26, + -72.98 + ], + "$ura220": [ + 111.8, + -71.63 + ], + "$ura221": [ + 115.29, + -70.24 + ], + "$ura222": [ + 118.7, + -68.8 + ], + "$ura223": [ + 122.04, + -67.33 + ], + "$ura224": [ + 125.31, + -65.81 + ], + "$ura225": [ + 128.5, + -64.25 + ], + "$ura226": [ + 131.62, + -62.65 + ], + "$ura227": [ + 134.65, + -61.02 + ], + "$ura228": [ + 137.61, + -59.35 + ], + "$ura229": [ + 140.48, + -57.64 + ], + "$ura230": [ + 143.26, + -55.9 + ], + "$ura231": [ + 145.97, + -54.13 + ], + "$ura232": [ + 148.58, + -52.32 + ], + "$ura233": [ + 151.1, + -50.48 + ], + "$ura234": [ + 153.53, + -48.61 + ], + "$ura235": [ + 155.87, + -46.71 + ], + "$ura236": [ + 158.12, + -44.79 + ], + "$ura237": [ + 160.27, + -42.83 + ], + "$ura238": [ + 162.32, + -40.85 + ], + "$ura239": [ + 164.28, + -38.85 + ], + "$ura240": [ + 166.14, + -36.82 + ], + "$ura241": [ + 167.89, + -34.77 + ], + "$ura242": [ + 169.55, + -32.7 + ], + "$ura243": [ + 171.1, + -30.61 + ], + "$ura244": [ + 172.56, + -28.5 + ], + "$ura245": [ + 173.9, + -26.38 + ], + "$ura246": [ + 175.14, + -24.23 + ], + "$ura247": [ + 176.28, + -22.08 + ], + "$ura248": [ + 177.31, + -19.91 + ], + "$ura249": [ + 178.24, + -17.73 + ], + "$ura250": [ + 179.05, + -15.53 + ], + "$ura251": [ + 179.76, + -13.33 + ], + "$ura252": [ + 180.36, + -11.12 + ], + "$ura253": [ + 180.85, + -8.91 + ], + "$ura254": [ + 181.24, + -6.68 + ], + "$ura255": [ + 181.51, + -4.46 + ], + "$ura256": [ + 181.67, + -2.23 + ] + } + }, + { + "Neptune@celestial.solar_system_planet": { + "$control_name": "neptune", + "$texture": "textures/ui/cosmos/celestial_selector/neptune", + "$size": [ + 8, + 8 + ], + "anims": [ + "@celestial.neptune_orbit_step45" + ], + "$orbit_duration": 0.546875, + "$nep1": [ + 200.36, + 0 + ], + "$nep2": [ + 200.3, + 2.46 + ], + "$nep3": [ + 200.12, + 4.92 + ], + "$nep4": [ + 199.82, + 7.37 + ], + "$nep5": [ + 199.39, + 9.82 + ], + "$nep6": [ + 198.85, + 12.26 + ], + "$nep7": [ + 198.19, + 14.7 + ], + "$nep8": [ + 197.41, + 17.13 + ], + "$nep9": [ + 196.51, + 19.54 + ], + "$nep10": [ + 195.49, + 21.95 + ], + "$nep11": [ + 194.36, + 24.34 + ], + "$nep12": [ + 193.1, + 26.72 + ], + "$nep13": [ + 191.73, + 29.08 + ], + "$nep14": [ + 190.25, + 31.42 + ], + "$nep15": [ + 188.65, + 33.75 + ], + "$nep16": [ + 186.93, + 36.05 + ], + "$nep17": [ + 185.11, + 38.34 + ], + "$nep18": [ + 183.17, + 40.6 + ], + "$nep19": [ + 181.12, + 42.83 + ], + "$nep20": [ + 178.97, + 45.04 + ], + "$nep21": [ + 176.7, + 47.22 + ], + "$nep22": [ + 174.33, + 49.38 + ], + "$nep23": [ + 171.85, + 51.5 + ], + "$nep24": [ + 169.27, + 53.6 + ], + "$nep25": [ + 166.59, + 55.66 + ], + "$nep26": [ + 163.81, + 57.68 + ], + "$nep27": [ + 160.93, + 59.68 + ], + "$nep28": [ + 157.95, + 61.63 + ], + "$nep29": [ + 154.88, + 63.55 + ], + "$nep30": [ + 151.71, + 65.43 + ], + "$nep31": [ + 148.46, + 67.28 + ], + "$nep32": [ + 145.11, + 69.08 + ], + "$nep33": [ + 141.68, + 70.84 + ], + "$nep34": [ + 138.16, + 72.55 + ], + "$nep35": [ + 134.55, + 74.23 + ], + "$nep36": [ + 130.87, + 75.86 + ], + "$nep37": [ + 127.11, + 77.44 + ], + "$nep38": [ + 123.27, + 78.98 + ], + "$nep39": [ + 119.35, + 80.47 + ], + "$nep40": [ + 115.37, + 81.91 + ], + "$nep41": [ + 111.31, + 83.3 + ], + "$nep42": [ + 107.19, + 84.64 + ], + "$nep43": [ + 103.01, + 85.93 + ], + "$nep44": [ + 98.76, + 87.17 + ], + "$nep45": [ + 94.45, + 88.35 + ], + "$nep46": [ + 90.08, + 89.48 + ], + "$nep47": [ + 85.66, + 90.56 + ], + "$nep48": [ + 81.19, + 91.59 + ], + "$nep49": [ + 76.67, + 92.55 + ], + "$nep50": [ + 72.11, + 93.47 + ], + "$nep51": [ + 67.5, + 94.32 + ], + "$nep52": [ + 62.85, + 95.12 + ], + "$nep53": [ + 58.16, + 95.87 + ], + "$nep54": [ + 53.44, + 96.55 + ], + "$nep55": [ + 48.68, + 97.18 + ], + "$nep56": [ + 43.9, + 97.75 + ], + "$nep57": [ + 39.09, + 98.25 + ], + "$nep58": [ + 34.25, + 98.7 + ], + "$nep59": [ + 29.4, + 99.1 + ], + "$nep60": [ + 24.53, + 99.43 + ], + "$nep61": [ + 19.64, + 99.7 + ], + "$nep62": [ + 14.74, + 99.91 + ], + "$nep63": [ + 9.83, + 100.06 + ], + "$nep64": [ + 4.92, + 100.15 + ], + "$nep65": [ + 0, + 100.18 + ], + "$nep66": [ + -4.92, + 100.15 + ], + "$nep67": [ + -9.83, + 100.06 + ], + "$nep68": [ + -14.74, + 99.91 + ], + "$nep69": [ + -19.64, + 99.7 + ], + "$nep70": [ + -24.53, + 99.43 + ], + "$nep71": [ + -29.4, + 99.1 + ], + "$nep72": [ + -34.25, + 98.7 + ], + "$nep73": [ + -39.09, + 98.25 + ], + "$nep74": [ + -43.9, + 97.75 + ], + "$nep75": [ + -48.68, + 97.18 + ], + "$nep76": [ + -53.44, + 96.55 + ], + "$nep77": [ + -58.16, + 95.87 + ], + "$nep78": [ + -62.85, + 95.12 + ], + "$nep79": [ + -67.5, + 94.32 + ], + "$nep80": [ + -72.11, + 93.47 + ], + "$nep81": [ + -76.67, + 92.55 + ], + "$nep82": [ + -81.19, + 91.59 + ], + "$nep83": [ + -85.66, + 90.56 + ], + "$nep84": [ + -90.08, + 89.48 + ], + "$nep85": [ + -94.45, + 88.35 + ], + "$nep86": [ + -98.76, + 87.17 + ], + "$nep87": [ + -103.01, + 85.93 + ], + "$nep88": [ + -107.19, + 84.64 + ], + "$nep89": [ + -111.31, + 83.3 + ], + "$nep90": [ + -115.37, + 81.91 + ], + "$nep91": [ + -119.35, + 80.47 + ], + "$nep92": [ + -123.27, + 78.98 + ], + "$nep93": [ + -127.11, + 77.44 + ], + "$nep94": [ + -130.87, + 75.86 + ], + "$nep95": [ + -134.55, + 74.23 + ], + "$nep96": [ + -138.16, + 72.55 + ], + "$nep97": [ + -141.68, + 70.84 + ], + "$nep98": [ + -145.11, + 69.08 + ], + "$nep99": [ + -148.46, + 67.28 + ], + "$nep100": [ + -151.71, + 65.43 + ], + "$nep101": [ + -154.88, + 63.55 + ], + "$nep102": [ + -157.95, + 61.63 + ], + "$nep103": [ + -160.93, + 59.68 + ], + "$nep104": [ + -163.81, + 57.68 + ], + "$nep105": [ + -166.59, + 55.66 + ], + "$nep106": [ + -169.27, + 53.6 + ], + "$nep107": [ + -171.85, + 51.5 + ], + "$nep108": [ + -174.33, + 49.38 + ], + "$nep109": [ + -176.7, + 47.22 + ], + "$nep110": [ + -178.97, + 45.04 + ], + "$nep111": [ + -181.12, + 42.83 + ], + "$nep112": [ + -183.17, + 40.6 + ], + "$nep113": [ + -185.11, + 38.34 + ], + "$nep114": [ + -186.93, + 36.05 + ], + "$nep115": [ + -188.65, + 33.75 + ], + "$nep116": [ + -190.25, + 31.42 + ], + "$nep117": [ + -191.73, + 29.08 + ], + "$nep118": [ + -193.1, + 26.72 + ], + "$nep119": [ + -194.36, + 24.34 + ], + "$nep120": [ + -195.49, + 21.95 + ], + "$nep121": [ + -196.51, + 19.54 + ], + "$nep122": [ + -197.41, + 17.13 + ], + "$nep123": [ + -198.19, + 14.7 + ], + "$nep124": [ + -198.85, + 12.26 + ], + "$nep125": [ + -199.39, + 9.82 + ], + "$nep126": [ + -199.82, + 7.37 + ], + "$nep127": [ + -200.12, + 4.92 + ], + "$nep128": [ + -200.3, + 2.46 + ], + "$nep129": [ + -200.36, + 0 + ], + "$nep130": [ + -200.3, + -2.46 + ], + "$nep131": [ + -200.12, + -4.92 + ], + "$nep132": [ + -199.82, + -7.37 + ], + "$nep133": [ + -199.39, + -9.82 + ], + "$nep134": [ + -198.85, + -12.26 + ], + "$nep135": [ + -198.19, + -14.7 + ], + "$nep136": [ + -197.41, + -17.13 + ], + "$nep137": [ + -196.51, + -19.54 + ], + "$nep138": [ + -195.49, + -21.95 + ], + "$nep139": [ + -194.36, + -24.34 + ], + "$nep140": [ + -193.1, + -26.72 + ], + "$nep141": [ + -191.73, + -29.08 + ], + "$nep142": [ + -190.25, + -31.42 + ], + "$nep143": [ + -188.65, + -33.75 + ], + "$nep144": [ + -186.93, + -36.05 + ], + "$nep145": [ + -185.11, + -38.34 + ], + "$nep146": [ + -183.17, + -40.6 + ], + "$nep147": [ + -181.12, + -42.83 + ], + "$nep148": [ + -178.97, + -45.04 + ], + "$nep149": [ + -176.7, + -47.22 + ], + "$nep150": [ + -174.33, + -49.38 + ], + "$nep151": [ + -171.85, + -51.5 + ], + "$nep152": [ + -169.27, + -53.6 + ], + "$nep153": [ + -166.59, + -55.66 + ], + "$nep154": [ + -163.81, + -57.68 + ], + "$nep155": [ + -160.93, + -59.68 + ], + "$nep156": [ + -157.95, + -61.63 + ], + "$nep157": [ + -154.88, + -63.55 + ], + "$nep158": [ + -151.71, + -65.43 + ], + "$nep159": [ + -148.46, + -67.28 + ], + "$nep160": [ + -145.11, + -69.08 + ], + "$nep161": [ + -141.68, + -70.84 + ], + "$nep162": [ + -138.16, + -72.55 + ], + "$nep163": [ + -134.55, + -74.23 + ], + "$nep164": [ + -130.87, + -75.86 + ], + "$nep165": [ + -127.11, + -77.44 + ], + "$nep166": [ + -123.27, + -78.98 + ], + "$nep167": [ + -119.35, + -80.47 + ], + "$nep168": [ + -115.37, + -81.91 + ], + "$nep169": [ + -111.31, + -83.3 + ], + "$nep170": [ + -107.19, + -84.64 + ], + "$nep171": [ + -103.01, + -85.93 + ], + "$nep172": [ + -98.76, + -87.17 + ], + "$nep173": [ + -94.45, + -88.35 + ], + "$nep174": [ + -90.08, + -89.48 + ], + "$nep175": [ + -85.66, + -90.56 + ], + "$nep176": [ + -81.19, + -91.59 + ], + "$nep177": [ + -76.67, + -92.55 + ], + "$nep178": [ + -72.11, + -93.47 + ], + "$nep179": [ + -67.5, + -94.32 + ], + "$nep180": [ + -62.85, + -95.12 + ], + "$nep181": [ + -58.16, + -95.87 + ], + "$nep182": [ + -53.44, + -96.55 + ], + "$nep183": [ + -48.68, + -97.18 + ], + "$nep184": [ + -43.9, + -97.75 + ], + "$nep185": [ + -39.09, + -98.25 + ], + "$nep186": [ + -34.25, + -98.7 + ], + "$nep187": [ + -29.4, + -99.1 + ], + "$nep188": [ + -24.53, + -99.43 + ], + "$nep189": [ + -19.64, + -99.7 + ], + "$nep190": [ + -14.74, + -99.91 + ], + "$nep191": [ + -9.83, + -100.06 + ], + "$nep192": [ + -4.92, + -100.15 + ], + "$nep193": [ + 0, + -100.18 + ], + "$nep194": [ + 4.92, + -100.15 + ], + "$nep195": [ + 9.83, + -100.06 + ], + "$nep196": [ + 14.74, + -99.91 + ], + "$nep197": [ + 19.64, + -99.7 + ], + "$nep198": [ + 24.53, + -99.43 + ], + "$nep199": [ + 29.4, + -99.1 + ], + "$nep200": [ + 34.25, + -98.7 + ], + "$nep201": [ + 39.09, + -98.25 + ], + "$nep202": [ + 43.9, + -97.75 + ], + "$nep203": [ + 48.68, + -97.18 + ], + "$nep204": [ + 53.44, + -96.55 + ], + "$nep205": [ + 58.16, + -95.87 + ], + "$nep206": [ + 62.85, + -95.12 + ], + "$nep207": [ + 67.5, + -94.32 + ], + "$nep208": [ + 72.11, + -93.47 + ], + "$nep209": [ + 76.67, + -92.55 + ], + "$nep210": [ + 81.19, + -91.59 + ], + "$nep211": [ + 85.66, + -90.56 + ], + "$nep212": [ + 90.08, + -89.48 + ], + "$nep213": [ + 94.45, + -88.35 + ], + "$nep214": [ + 98.76, + -87.17 + ], + "$nep215": [ + 103.01, + -85.93 + ], + "$nep216": [ + 107.19, + -84.64 + ], + "$nep217": [ + 111.31, + -83.3 + ], + "$nep218": [ + 115.37, + -81.91 + ], + "$nep219": [ + 119.35, + -80.47 + ], + "$nep220": [ + 123.27, + -78.98 + ], + "$nep221": [ + 127.11, + -77.44 + ], + "$nep222": [ + 130.87, + -75.86 + ], + "$nep223": [ + 134.55, + -74.23 + ], + "$nep224": [ + 138.16, + -72.55 + ], + "$nep225": [ + 141.68, + -70.84 + ], + "$nep226": [ + 145.11, + -69.08 + ], + "$nep227": [ + 148.46, + -67.28 + ], + "$nep228": [ + 151.71, + -65.43 + ], + "$nep229": [ + 154.88, + -63.55 + ], + "$nep230": [ + 157.95, + -61.63 + ], + "$nep231": [ + 160.93, + -59.68 + ], + "$nep232": [ + 163.81, + -57.68 + ], + "$nep233": [ + 166.59, + -55.66 + ], + "$nep234": [ + 169.27, + -53.6 + ], + "$nep235": [ + 171.85, + -51.5 + ], + "$nep236": [ + 174.33, + -49.38 + ], + "$nep237": [ + 176.7, + -47.22 + ], + "$nep238": [ + 178.97, + -45.04 + ], + "$nep239": [ + 181.12, + -42.83 + ], + "$nep240": [ + 183.17, + -40.6 + ], + "$nep241": [ + 185.11, + -38.34 + ], + "$nep242": [ + 186.93, + -36.05 + ], + "$nep243": [ + 188.65, + -33.75 + ], + "$nep244": [ + 190.25, + -31.42 + ], + "$nep245": [ + 191.73, + -29.08 + ], + "$nep246": [ + 193.1, + -26.72 + ], + "$nep247": [ + 194.36, + -24.34 + ], + "$nep248": [ + 195.49, + -21.95 + ], + "$nep249": [ + 196.51, + -19.54 + ], + "$nep250": [ + 197.41, + -17.13 + ], + "$nep251": [ + 198.19, + -14.7 + ], + "$nep252": [ + 198.85, + -12.26 + ], + "$nep253": [ + 199.39, + -9.82 + ], + "$nep254": [ + 199.82, + -7.37 + ], + "$nep255": [ + 200.12, + -4.92 + ], + "$nep256": [ + 200.3, + -2.46 + ] + } + }, + { + "planets_collection": { + "type": "collection_panel", + "collection_name": "form_buttons", + "controls": [ + { + "Overworld@celestial.solar_system_planet": { + "$control_name": "overworld", + "collection_index": 0, + "$texture": "textures/ui/cosmos/celestial_selector/earth", + "$size": [ + 8, + 8 + ], + "anims": [ + "@celestial.overworld_orbit_step185" + ], + "$orbit_duration": 0.117188, + "$ear1": [ + 97.49, + 0 + ], + "$ear2": [ + 97.46, + 1.2 + ], + "$ear3": [ + 97.38, + 2.39 + ], + "$ear4": [ + 97.23, + 3.59 + ], + "$ear5": [ + 97.02, + 4.78 + ], + "$ear6": [ + 96.76, + 5.97 + ], + "$ear7": [ + 96.44, + 7.15 + ], + "$ear8": [ + 96.06, + 8.33 + ], + "$ear9": [ + 95.62, + 9.51 + ], + "$ear10": [ + 95.12, + 10.68 + ], + "$ear11": [ + 94.57, + 11.84 + ], + "$ear12": [ + 93.96, + 13 + ], + "$ear13": [ + 93.3, + 14.15 + ], + "$ear14": [ + 92.57, + 15.29 + ], + "$ear15": [ + 91.79, + 16.42 + ], + "$ear16": [ + 90.96, + 17.54 + ], + "$ear17": [ + 90.07, + 18.65 + ], + "$ear18": [ + 89.13, + 19.75 + ], + "$ear19": [ + 88.13, + 20.84 + ], + "$ear20": [ + 87.08, + 21.92 + ], + "$ear21": [ + 85.98, + 22.98 + ], + "$ear22": [ + 84.83, + 24.03 + ], + "$ear23": [ + 83.62, + 25.06 + ], + "$ear24": [ + 82.37, + 26.08 + ], + "$ear25": [ + 81.06, + 27.08 + ], + "$ear26": [ + 79.71, + 28.07 + ], + "$ear27": [ + 78.31, + 29.04 + ], + "$ear28": [ + 76.86, + 29.99 + ], + "$ear29": [ + 75.36, + 30.92 + ], + "$ear30": [ + 73.82, + 31.84 + ], + "$ear31": [ + 72.24, + 32.74 + ], + "$ear32": [ + 70.61, + 33.61 + ], + "$ear33": [ + 68.94, + 34.47 + ], + "$ear34": [ + 67.23, + 35.3 + ], + "$ear35": [ + 65.47, + 36.12 + ], + "$ear36": [ + 63.68, + 36.91 + ], + "$ear37": [ + 61.85, + 37.68 + ], + "$ear38": [ + 59.98, + 38.43 + ], + "$ear39": [ + 58.08, + 39.15 + ], + "$ear40": [ + 56.14, + 39.85 + ], + "$ear41": [ + 54.16, + 40.53 + ], + "$ear42": [ + 52.16, + 41.18 + ], + "$ear43": [ + 50.12, + 41.81 + ], + "$ear44": [ + 48.05, + 42.41 + ], + "$ear45": [ + 45.96, + 42.99 + ], + "$ear46": [ + 43.83, + 43.54 + ], + "$ear47": [ + 41.68, + 44.07 + ], + "$ear48": [ + 39.51, + 44.56 + ], + "$ear49": [ + 37.31, + 45.04 + ], + "$ear50": [ + 35.09, + 45.48 + ], + "$ear51": [ + 32.84, + 45.9 + ], + "$ear52": [ + 30.58, + 46.29 + ], + "$ear53": [ + 28.3, + 46.65 + ], + "$ear54": [ + 26, + 46.98 + ], + "$ear55": [ + 23.69, + 47.29 + ], + "$ear56": [ + 21.36, + 47.56 + ], + "$ear57": [ + 19.02, + 47.81 + ], + "$ear58": [ + 16.67, + 48.03 + ], + "$ear59": [ + 14.31, + 48.22 + ], + "$ear60": [ + 11.93, + 48.38 + ], + "$ear61": [ + 9.56, + 48.51 + ], + "$ear62": [ + 7.17, + 48.61 + ], + "$ear63": [ + 4.78, + 48.69 + ], + "$ear64": [ + 2.39, + 48.73 + ], + "$ear65": [ + 0, + 48.75 + ], + "$ear66": [ + -2.39, + 48.73 + ], + "$ear67": [ + -4.78, + 48.69 + ], + "$ear68": [ + -7.17, + 48.61 + ], + "$ear69": [ + -9.56, + 48.51 + ], + "$ear70": [ + -11.93, + 48.38 + ], + "$ear71": [ + -14.31, + 48.22 + ], + "$ear72": [ + -16.67, + 48.03 + ], + "$ear73": [ + -19.02, + 47.81 + ], + "$ear74": [ + -21.36, + 47.56 + ], + "$ear75": [ + -23.69, + 47.29 + ], + "$ear76": [ + -26, + 46.98 + ], + "$ear77": [ + -28.3, + 46.65 + ], + "$ear78": [ + -30.58, + 46.29 + ], + "$ear79": [ + -32.84, + 45.9 + ], + "$ear80": [ + -35.09, + 45.48 + ], + "$ear81": [ + -37.31, + 45.04 + ], + "$ear82": [ + -39.51, + 44.56 + ], + "$ear83": [ + -41.68, + 44.07 + ], + "$ear84": [ + -43.83, + 43.54 + ], + "$ear85": [ + -45.96, + 42.99 + ], + "$ear86": [ + -48.05, + 42.41 + ], + "$ear87": [ + -50.12, + 41.81 + ], + "$ear88": [ + -52.16, + 41.18 + ], + "$ear89": [ + -54.16, + 40.53 + ], + "$ear90": [ + -56.14, + 39.85 + ], + "$ear91": [ + -58.08, + 39.15 + ], + "$ear92": [ + -59.98, + 38.43 + ], + "$ear93": [ + -61.85, + 37.68 + ], + "$ear94": [ + -63.68, + 36.91 + ], + "$ear95": [ + -65.47, + 36.12 + ], + "$ear96": [ + -67.23, + 35.3 + ], + "$ear97": [ + -68.94, + 34.47 + ], + "$ear98": [ + -70.61, + 33.61 + ], + "$ear99": [ + -72.24, + 32.74 + ], + "$ear100": [ + -73.82, + 31.84 + ], + "$ear101": [ + -75.36, + 30.92 + ], + "$ear102": [ + -76.86, + 29.99 + ], + "$ear103": [ + -78.31, + 29.04 + ], + "$ear104": [ + -79.71, + 28.07 + ], + "$ear105": [ + -81.06, + 27.08 + ], + "$ear106": [ + -82.37, + 26.08 + ], + "$ear107": [ + -83.62, + 25.06 + ], + "$ear108": [ + -84.83, + 24.03 + ], + "$ear109": [ + -85.98, + 22.98 + ], + "$ear110": [ + -87.08, + 21.92 + ], + "$ear111": [ + -88.13, + 20.84 + ], + "$ear112": [ + -89.13, + 19.75 + ], + "$ear113": [ + -90.07, + 18.65 + ], + "$ear114": [ + -90.96, + 17.54 + ], + "$ear115": [ + -91.79, + 16.42 + ], + "$ear116": [ + -92.57, + 15.29 + ], + "$ear117": [ + -93.3, + 14.15 + ], + "$ear118": [ + -93.96, + 13 + ], + "$ear119": [ + -94.57, + 11.84 + ], + "$ear120": [ + -95.12, + 10.68 + ], + "$ear121": [ + -95.62, + 9.51 + ], + "$ear122": [ + -96.06, + 8.33 + ], + "$ear123": [ + -96.44, + 7.15 + ], + "$ear124": [ + -96.76, + 5.97 + ], + "$ear125": [ + -97.02, + 4.78 + ], + "$ear126": [ + -97.23, + 3.59 + ], + "$ear127": [ + -97.38, + 2.39 + ], + "$ear128": [ + -97.46, + 1.2 + ], + "$ear129": [ + -97.49, + 0 + ], + "$ear130": [ + -97.46, + -1.2 + ], + "$ear131": [ + -97.38, + -2.39 + ], + "$ear132": [ + -97.23, + -3.59 + ], + "$ear133": [ + -97.02, + -4.78 + ], + "$ear134": [ + -96.76, + -5.97 + ], + "$ear135": [ + -96.44, + -7.15 + ], + "$ear136": [ + -96.06, + -8.33 + ], + "$ear137": [ + -95.62, + -9.51 + ], + "$ear138": [ + -95.12, + -10.68 + ], + "$ear139": [ + -94.57, + -11.84 + ], + "$ear140": [ + -93.96, + -13 + ], + "$ear141": [ + -93.3, + -14.15 + ], + "$ear142": [ + -92.57, + -15.29 + ], + "$ear143": [ + -91.79, + -16.42 + ], + "$ear144": [ + -90.96, + -17.54 + ], + "$ear145": [ + -90.07, + -18.65 + ], + "$ear146": [ + -89.13, + -19.75 + ], + "$ear147": [ + -88.13, + -20.84 + ], + "$ear148": [ + -87.08, + -21.92 + ], + "$ear149": [ + -85.98, + -22.98 + ], + "$ear150": [ + -84.83, + -24.03 + ], + "$ear151": [ + -83.62, + -25.06 + ], + "$ear152": [ + -82.37, + -26.08 + ], + "$ear153": [ + -81.06, + -27.08 + ], + "$ear154": [ + -79.71, + -28.07 + ], + "$ear155": [ + -78.31, + -29.04 + ], + "$ear156": [ + -76.86, + -29.99 + ], + "$ear157": [ + -75.36, + -30.92 + ], + "$ear158": [ + -73.82, + -31.84 + ], + "$ear159": [ + -72.24, + -32.74 + ], + "$ear160": [ + -70.61, + -33.61 + ], + "$ear161": [ + -68.94, + -34.47 + ], + "$ear162": [ + -67.23, + -35.3 + ], + "$ear163": [ + -65.47, + -36.12 + ], + "$ear164": [ + -63.68, + -36.91 + ], + "$ear165": [ + -61.85, + -37.68 + ], + "$ear166": [ + -59.98, + -38.43 + ], + "$ear167": [ + -58.08, + -39.15 + ], + "$ear168": [ + -56.14, + -39.85 + ], + "$ear169": [ + -54.16, + -40.53 + ], + "$ear170": [ + -52.16, + -41.18 + ], + "$ear171": [ + -50.12, + -41.81 + ], + "$ear172": [ + -48.05, + -42.41 + ], + "$ear173": [ + -45.96, + -42.99 + ], + "$ear174": [ + -43.83, + -43.54 + ], + "$ear175": [ + -41.68, + -44.07 + ], + "$ear176": [ + -39.51, + -44.56 + ], + "$ear177": [ + -37.31, + -45.04 + ], + "$ear178": [ + -35.09, + -45.48 + ], + "$ear179": [ + -32.84, + -45.9 + ], + "$ear180": [ + -30.58, + -46.29 + ], + "$ear181": [ + -28.3, + -46.65 + ], + "$ear182": [ + -26, + -46.98 + ], + "$ear183": [ + -23.69, + -47.29 + ], + "$ear184": [ + -21.36, + -47.56 + ], + "$ear185": [ + -19.02, + -47.81 + ], + "$ear186": [ + -16.67, + -48.03 + ], + "$ear187": [ + -14.31, + -48.22 + ], + "$ear188": [ + -11.93, + -48.38 + ], + "$ear189": [ + -9.56, + -48.51 + ], + "$ear190": [ + -7.17, + -48.61 + ], + "$ear191": [ + -4.78, + -48.69 + ], + "$ear192": [ + -2.39, + -48.73 + ], + "$ear193": [ + 0, + -48.75 + ], + "$ear194": [ + 2.39, + -48.73 + ], + "$ear195": [ + 4.78, + -48.69 + ], + "$ear196": [ + 7.17, + -48.61 + ], + "$ear197": [ + 9.56, + -48.51 + ], + "$ear198": [ + 11.93, + -48.38 + ], + "$ear199": [ + 14.31, + -48.22 + ], + "$ear200": [ + 16.67, + -48.03 + ], + "$ear201": [ + 19.02, + -47.81 + ], + "$ear202": [ + 21.36, + -47.56 + ], + "$ear203": [ + 23.69, + -47.29 + ], + "$ear204": [ + 26, + -46.98 + ], + "$ear205": [ + 28.3, + -46.65 + ], + "$ear206": [ + 30.58, + -46.29 + ], + "$ear207": [ + 32.84, + -45.9 + ], + "$ear208": [ + 35.09, + -45.48 + ], + "$ear209": [ + 37.31, + -45.04 + ], + "$ear210": [ + 39.51, + -44.56 + ], + "$ear211": [ + 41.68, + -44.07 + ], + "$ear212": [ + 43.83, + -43.54 + ], + "$ear213": [ + 45.96, + -42.99 + ], + "$ear214": [ + 48.05, + -42.41 + ], + "$ear215": [ + 50.12, + -41.81 + ], + "$ear216": [ + 52.16, + -41.18 + ], + "$ear217": [ + 54.16, + -40.53 + ], + "$ear218": [ + 56.14, + -39.85 + ], + "$ear219": [ + 58.08, + -39.15 + ], + "$ear220": [ + 59.98, + -38.43 + ], + "$ear221": [ + 61.85, + -37.68 + ], + "$ear222": [ + 63.68, + -36.91 + ], + "$ear223": [ + 65.47, + -36.12 + ], + "$ear224": [ + 67.23, + -35.3 + ], + "$ear225": [ + 68.94, + -34.47 + ], + "$ear226": [ + 70.61, + -33.61 + ], + "$ear227": [ + 72.24, + -32.74 + ], + "$ear228": [ + 73.82, + -31.84 + ], + "$ear229": [ + 75.36, + -30.92 + ], + "$ear230": [ + 76.86, + -29.99 + ], + "$ear231": [ + 78.31, + -29.04 + ], + "$ear232": [ + 79.71, + -28.07 + ], + "$ear233": [ + 81.06, + -27.08 + ], + "$ear234": [ + 82.37, + -26.08 + ], + "$ear235": [ + 83.62, + -25.06 + ], + "$ear236": [ + 84.83, + -24.03 + ], + "$ear237": [ + 85.98, + -22.98 + ], + "$ear238": [ + 87.08, + -21.92 + ], + "$ear239": [ + 88.13, + -20.84 + ], + "$ear240": [ + 89.13, + -19.75 + ], + "$ear241": [ + 90.07, + -18.65 + ], + "$ear242": [ + 90.96, + -17.54 + ], + "$ear243": [ + 91.79, + -16.42 + ], + "$ear244": [ + 92.57, + -15.29 + ], + "$ear245": [ + 93.3, + -14.15 + ], + "$ear246": [ + 93.96, + -13 + ], + "$ear247": [ + 94.57, + -11.84 + ], + "$ear248": [ + 95.12, + -10.68 + ], + "$ear249": [ + 95.62, + -9.51 + ], + "$ear250": [ + 96.06, + -8.33 + ], + "$ear251": [ + 96.44, + -7.15 + ], + "$ear252": [ + 96.76, + -5.97 + ], + "$ear253": [ + 97.02, + -4.78 + ], + "$ear254": [ + 97.23, + -3.59 + ], + "$ear255": [ + 97.38, + -2.39 + ], + "$ear256": [ + 97.46, + -1.2 + ] + } + }, + { + "Mars@celestial.solar_system_planet": { + "$control_name": "mars", + "collection_index": 2, + "$texture": "textures/ui/cosmos/celestial_selector/mars", + "$size": [ + 8, + 8 + ], + "anims": [ + "@celestial.mars_orbit_step256" + ], + "$orbit_duration": 0.175781, + "$mar1": [ + 117, + 0 + ], + "$mar2": [ + 116.96, + 1.44 + ], + "$mar3": [ + 116.86, + 2.87 + ], + "$mar4": [ + 116.68, + 4.3 + ], + "$mar5": [ + 116.44, + 5.73 + ], + "$mar6": [ + 116.12, + 7.16 + ], + "$mar7": [ + 115.73, + 8.58 + ], + "$mar8": [ + 115.28, + 10 + ], + "$mar9": [ + 114.75, + 11.41 + ], + "$mar10": [ + 114.16, + 12.82 + ], + "$mar11": [ + 113.49, + 14.21 + ], + "$mar12": [ + 112.76, + 15.6 + ], + "$mar13": [ + 111.96, + 16.98 + ], + "$mar14": [ + 111.09, + 18.35 + ], + "$mar15": [ + 110.16, + 19.71 + ], + "$mar16": [ + 109.16, + 21.05 + ], + "$mar17": [ + 108.09, + 22.39 + ], + "$mar18": [ + 106.96, + 23.71 + ], + "$mar19": [ + 105.77, + 25.01 + ], + "$mar20": [ + 104.51, + 26.3 + ], + "$mar21": [ + 103.18, + 27.58 + ], + "$mar22": [ + 101.8, + 28.83 + ], + "$mar23": [ + 100.35, + 30.08 + ], + "$mar24": [ + 98.85, + 31.3 + ], + "$mar25": [ + 97.28, + 32.5 + ], + "$mar26": [ + 95.66, + 33.68 + ], + "$mar27": [ + 93.98, + 34.85 + ], + "$mar28": [ + 92.24, + 35.99 + ], + "$mar29": [ + 90.44, + 37.11 + ], + "$mar30": [ + 88.59, + 38.21 + ], + "$mar31": [ + 86.69, + 39.29 + ], + "$mar32": [ + 84.74, + 40.34 + ], + "$mar33": [ + 82.73, + 41.37 + ], + "$mar34": [ + 80.68, + 42.37 + ], + "$mar35": [ + 78.57, + 43.35 + ], + "$mar36": [ + 76.42, + 44.3 + ], + "$mar37": [ + 74.22, + 45.22 + ], + "$mar38": [ + 71.98, + 46.12 + ], + "$mar39": [ + 69.7, + 46.99 + ], + "$mar40": [ + 67.37, + 47.83 + ], + "$mar41": [ + 65, + 48.64 + ], + "$mar42": [ + 62.59, + 49.42 + ], + "$mar43": [ + 60.15, + 50.18 + ], + "$mar44": [ + 57.67, + 50.9 + ], + "$mar45": [ + 55.15, + 51.59 + ], + "$mar46": [ + 52.6, + 52.25 + ], + "$mar47": [ + 50.02, + 52.88 + ], + "$mar48": [ + 47.41, + 53.48 + ], + "$mar49": [ + 44.77, + 54.05 + ], + "$mar50": [ + 42.11, + 54.58 + ], + "$mar51": [ + 39.42, + 55.08 + ], + "$mar52": [ + 36.7, + 55.55 + ], + "$mar53": [ + 33.96, + 55.98 + ], + "$mar54": [ + 31.21, + 56.38 + ], + "$mar55": [ + 28.43, + 56.75 + ], + "$mar56": [ + 25.63, + 57.08 + ], + "$mar57": [ + 22.83, + 57.38 + ], + "$mar58": [ + 20, + 57.64 + ], + "$mar59": [ + 17.17, + 57.87 + ], + "$mar60": [ + 14.32, + 58.06 + ], + "$mar61": [ + 11.47, + 58.22 + ], + "$mar62": [ + 8.61, + 58.34 + ], + "$mar63": [ + 5.74, + 58.43 + ], + "$mar64": [ + 2.87, + 58.48 + ], + "$mar65": [ + 0, + 58.5 + ], + "$mar66": [ + -2.87, + 58.48 + ], + "$mar67": [ + -5.74, + 58.43 + ], + "$mar68": [ + -8.61, + 58.34 + ], + "$mar69": [ + -11.47, + 58.22 + ], + "$mar70": [ + -14.32, + 58.06 + ], + "$mar71": [ + -17.17, + 57.87 + ], + "$mar72": [ + -20, + 57.64 + ], + "$mar73": [ + -22.83, + 57.38 + ], + "$mar74": [ + -25.63, + 57.08 + ], + "$mar75": [ + -28.43, + 56.75 + ], + "$mar76": [ + -31.21, + 56.38 + ], + "$mar77": [ + -33.96, + 55.98 + ], + "$mar78": [ + -36.7, + 55.55 + ], + "$mar79": [ + -39.42, + 55.08 + ], + "$mar80": [ + -42.11, + 54.58 + ], + "$mar81": [ + -44.77, + 54.05 + ], + "$mar82": [ + -47.41, + 53.48 + ], + "$mar83": [ + -50.02, + 52.88 + ], + "$mar84": [ + -52.6, + 52.25 + ], + "$mar85": [ + -55.15, + 51.59 + ], + "$mar86": [ + -57.67, + 50.9 + ], + "$mar87": [ + -60.15, + 50.18 + ], + "$mar88": [ + -62.59, + 49.42 + ], + "$mar89": [ + -65, + 48.64 + ], + "$mar90": [ + -67.37, + 47.83 + ], + "$mar91": [ + -69.7, + 46.99 + ], + "$mar92": [ + -71.98, + 46.12 + ], + "$mar93": [ + -74.22, + 45.22 + ], + "$mar94": [ + -76.42, + 44.3 + ], + "$mar95": [ + -78.57, + 43.35 + ], + "$mar96": [ + -80.68, + 42.37 + ], + "$mar97": [ + -82.73, + 41.37 + ], + "$mar98": [ + -84.74, + 40.34 + ], + "$mar99": [ + -86.69, + 39.29 + ], + "$mar100": [ + -88.59, + 38.21 + ], + "$mar101": [ + -90.44, + 37.11 + ], + "$mar102": [ + -92.24, + 35.99 + ], + "$mar103": [ + -93.98, + 34.85 + ], + "$mar104": [ + -95.66, + 33.68 + ], + "$mar105": [ + -97.28, + 32.5 + ], + "$mar106": [ + -98.85, + 31.3 + ], + "$mar107": [ + -100.35, + 30.08 + ], + "$mar108": [ + -101.8, + 28.83 + ], + "$mar109": [ + -103.18, + 27.58 + ], + "$mar110": [ + -104.51, + 26.3 + ], + "$mar111": [ + -105.77, + 25.01 + ], + "$mar112": [ + -106.96, + 23.71 + ], + "$mar113": [ + -108.09, + 22.39 + ], + "$mar114": [ + -109.16, + 21.05 + ], + "$mar115": [ + -110.16, + 19.71 + ], + "$mar116": [ + -111.09, + 18.35 + ], + "$mar117": [ + -111.96, + 16.98 + ], + "$mar118": [ + -112.76, + 15.6 + ], + "$mar119": [ + -113.49, + 14.21 + ], + "$mar120": [ + -114.16, + 12.82 + ], + "$mar121": [ + -114.75, + 11.41 + ], + "$mar122": [ + -115.28, + 10 + ], + "$mar123": [ + -115.73, + 8.58 + ], + "$mar124": [ + -116.12, + 7.16 + ], + "$mar125": [ + -116.44, + 5.73 + ], + "$mar126": [ + -116.68, + 4.3 + ], + "$mar127": [ + -116.86, + 2.87 + ], + "$mar128": [ + -116.96, + 1.44 + ], + "$mar129": [ + -117, + 0 + ], + "$mar130": [ + -116.96, + -1.44 + ], + "$mar131": [ + -116.86, + -2.87 + ], + "$mar132": [ + -116.68, + -4.3 + ], + "$mar133": [ + -116.44, + -5.73 + ], + "$mar134": [ + -116.12, + -7.16 + ], + "$mar135": [ + -115.73, + -8.58 + ], + "$mar136": [ + -115.28, + -10 + ], + "$mar137": [ + -114.75, + -11.41 + ], + "$mar138": [ + -114.16, + -12.82 + ], + "$mar139": [ + -113.49, + -14.21 + ], + "$mar140": [ + -112.76, + -15.6 + ], + "$mar141": [ + -111.96, + -16.98 + ], + "$mar142": [ + -111.09, + -18.35 + ], + "$mar143": [ + -110.16, + -19.71 + ], + "$mar144": [ + -109.16, + -21.05 + ], + "$mar145": [ + -108.09, + -22.39 + ], + "$mar146": [ + -106.96, + -23.71 + ], + "$mar147": [ + -105.77, + -25.01 + ], + "$mar148": [ + -104.51, + -26.3 + ], + "$mar149": [ + -103.18, + -27.58 + ], + "$mar150": [ + -101.8, + -28.83 + ], + "$mar151": [ + -100.35, + -30.08 + ], + "$mar152": [ + -98.85, + -31.3 + ], + "$mar153": [ + -97.28, + -32.5 + ], + "$mar154": [ + -95.66, + -33.68 + ], + "$mar155": [ + -93.98, + -34.85 + ], + "$mar156": [ + -92.24, + -35.99 + ], + "$mar157": [ + -90.44, + -37.11 + ], + "$mar158": [ + -88.59, + -38.21 + ], + "$mar159": [ + -86.69, + -39.29 + ], + "$mar160": [ + -84.74, + -40.34 + ], + "$mar161": [ + -82.73, + -41.37 + ], + "$mar162": [ + -80.68, + -42.37 + ], + "$mar163": [ + -78.57, + -43.35 + ], + "$mar164": [ + -76.42, + -44.3 + ], + "$mar165": [ + -74.22, + -45.22 + ], + "$mar166": [ + -71.98, + -46.12 + ], + "$mar167": [ + -69.7, + -46.99 + ], + "$mar168": [ + -67.37, + -47.83 + ], + "$mar169": [ + -65, + -48.64 + ], + "$mar170": [ + -62.59, + -49.42 + ], + "$mar171": [ + -60.15, + -50.18 + ], + "$mar172": [ + -57.67, + -50.9 + ], + "$mar173": [ + -55.15, + -51.59 + ], + "$mar174": [ + -52.6, + -52.25 + ], + "$mar175": [ + -50.02, + -52.88 + ], + "$mar176": [ + -47.41, + -53.48 + ], + "$mar177": [ + -44.77, + -54.05 + ], + "$mar178": [ + -42.11, + -54.58 + ], + "$mar179": [ + -39.42, + -55.08 + ], + "$mar180": [ + -36.7, + -55.55 + ], + "$mar181": [ + -33.96, + -55.98 + ], + "$mar182": [ + -31.21, + -56.38 + ], + "$mar183": [ + -28.43, + -56.75 + ], + "$mar184": [ + -25.63, + -57.08 + ], + "$mar185": [ + -22.83, + -57.38 + ], + "$mar186": [ + -20, + -57.64 + ], + "$mar187": [ + -17.17, + -57.87 + ], + "$mar188": [ + -14.32, + -58.06 + ], + "$mar189": [ + -11.47, + -58.22 + ], + "$mar190": [ + -8.61, + -58.34 + ], + "$mar191": [ + -5.74, + -58.43 + ], + "$mar192": [ + -2.87, + -58.48 + ], + "$mar193": [ + 0, + -58.5 + ], + "$mar194": [ + 2.87, + -58.48 + ], + "$mar195": [ + 5.74, + -58.43 + ], + "$mar196": [ + 8.61, + -58.34 + ], + "$mar197": [ + 11.47, + -58.22 + ], + "$mar198": [ + 14.32, + -58.06 + ], + "$mar199": [ + 17.17, + -57.87 + ], + "$mar200": [ + 20, + -57.64 + ], + "$mar201": [ + 22.83, + -57.38 + ], + "$mar202": [ + 25.63, + -57.08 + ], + "$mar203": [ + 28.43, + -56.75 + ], + "$mar204": [ + 31.21, + -56.38 + ], + "$mar205": [ + 33.96, + -55.98 + ], + "$mar206": [ + 36.7, + -55.55 + ], + "$mar207": [ + 39.42, + -55.08 + ], + "$mar208": [ + 42.11, + -54.58 + ], + "$mar209": [ + 44.77, + -54.05 + ], + "$mar210": [ + 47.41, + -53.48 + ], + "$mar211": [ + 50.02, + -52.88 + ], + "$mar212": [ + 52.6, + -52.25 + ], + "$mar213": [ + 55.15, + -51.59 + ], + "$mar214": [ + 57.67, + -50.9 + ], + "$mar215": [ + 60.15, + -50.18 + ], + "$mar216": [ + 62.59, + -49.42 + ], + "$mar217": [ + 65, + -48.64 + ], + "$mar218": [ + 67.37, + -47.83 + ], + "$mar219": [ + 69.7, + -46.99 + ], + "$mar220": [ + 71.98, + -46.12 + ], + "$mar221": [ + 74.22, + -45.22 + ], + "$mar222": [ + 76.42, + -44.3 + ], + "$mar223": [ + 78.57, + -43.35 + ], + "$mar224": [ + 80.68, + -42.37 + ], + "$mar225": [ + 82.73, + -41.37 + ], + "$mar226": [ + 84.74, + -40.34 + ], + "$mar227": [ + 86.69, + -39.29 + ], + "$mar228": [ + 88.59, + -38.21 + ], + "$mar229": [ + 90.44, + -37.11 + ], + "$mar230": [ + 92.24, + -35.99 + ], + "$mar231": [ + 93.98, + -34.85 + ], + "$mar232": [ + 95.66, + -33.68 + ], + "$mar233": [ + 97.28, + -32.5 + ], + "$mar234": [ + 98.85, + -31.3 + ], + "$mar235": [ + 100.35, + -30.08 + ], + "$mar236": [ + 101.8, + -28.83 + ], + "$mar237": [ + 103.18, + -27.58 + ], + "$mar238": [ + 104.51, + -26.3 + ], + "$mar239": [ + 105.77, + -25.01 + ], + "$mar240": [ + 106.96, + -23.71 + ], + "$mar241": [ + 108.09, + -22.39 + ], + "$mar242": [ + 109.16, + -21.05 + ], + "$mar243": [ + 110.16, + -19.71 + ], + "$mar244": [ + 111.09, + -18.35 + ], + "$mar245": [ + 111.96, + -16.98 + ], + "$mar246": [ + 112.76, + -15.6 + ], + "$mar247": [ + 113.49, + -14.21 + ], + "$mar248": [ + 114.16, + -12.82 + ], + "$mar249": [ + 114.75, + -11.41 + ], + "$mar250": [ + 115.28, + -10 + ], + "$mar251": [ + 115.73, + -8.58 + ], + "$mar252": [ + 116.12, + -7.16 + ], + "$mar253": [ + 116.44, + -5.73 + ], + "$mar254": [ + 116.68, + -4.3 + ], + "$mar255": [ + 116.86, + -2.87 + ], + "$mar256": [ + 116.96, + -1.44 + ] + } + }, + { + "Venus@celestial.solar_system_planet": { + "$control_name": "venus", + "collection_index": 3, + "$texture": "textures/ui/cosmos/celestial_selector/venus", + "$size": [ + 8, + 8 + ], + "anims": [ + "@celestial.venus_orbit_step129" + ], + "$orbit_duration": 0.078125, + "$ven1": [ + 78.03, + 0 + ], + "$ven2": [ + 78, + 0.96 + ], + "$ven3": [ + 77.93, + 1.91 + ], + "$ven4": [ + 77.81, + 2.87 + ], + "$ven5": [ + 77.65, + 3.82 + ], + "$ven6": [ + 77.44, + 4.78 + ], + "$ven7": [ + 77.18, + 5.72 + ], + "$ven8": [ + 76.88, + 6.67 + ], + "$ven9": [ + 76.53, + 7.61 + ], + "$ven10": [ + 76.13, + 8.55 + ], + "$ven11": [ + 75.69, + 9.48 + ], + "$ven12": [ + 75.2, + 10.41 + ], + "$ven13": [ + 74.67, + 11.32 + ], + "$ven14": [ + 74.09, + 12.24 + ], + "$ven15": [ + 73.46, + 13.14 + ], + "$ven16": [ + 72.8, + 14.04 + ], + "$ven17": [ + 72.09, + 14.93 + ], + "$ven18": [ + 71.33, + 15.81 + ], + "$ven19": [ + 70.53, + 16.68 + ], + "$ven20": [ + 69.69, + 17.54 + ], + "$ven21": [ + 68.81, + 18.39 + ], + "$ven22": [ + 67.89, + 19.23 + ], + "$ven23": [ + 66.92, + 20.06 + ], + "$ven24": [ + 65.92, + 20.87 + ], + "$ven25": [ + 64.88, + 21.67 + ], + "$ven26": [ + 63.79, + 22.46 + ], + "$ven27": [ + 62.67, + 23.24 + ], + "$ven28": [ + 61.51, + 24 + ], + "$ven29": [ + 60.31, + 24.75 + ], + "$ven30": [ + 59.08, + 25.48 + ], + "$ven31": [ + 57.81, + 26.2 + ], + "$ven32": [ + 56.51, + 26.9 + ], + "$ven33": [ + 55.17, + 27.59 + ], + "$ven34": [ + 53.8, + 28.25 + ], + "$ven35": [ + 52.4, + 28.91 + ], + "$ven36": [ + 50.96, + 29.54 + ], + "$ven37": [ + 49.5, + 30.16 + ], + "$ven38": [ + 48, + 30.76 + ], + "$ven39": [ + 46.48, + 31.34 + ], + "$ven40": [ + 44.93, + 31.9 + ], + "$ven41": [ + 43.35, + 32.44 + ], + "$ven42": [ + 41.74, + 32.96 + ], + "$ven43": [ + 40.11, + 33.46 + ], + "$ven44": [ + 38.46, + 33.94 + ], + "$ven45": [ + 36.78, + 34.41 + ], + "$ven46": [ + 35.08, + 34.85 + ], + "$ven47": [ + 33.36, + 35.27 + ], + "$ven48": [ + 31.62, + 35.67 + ], + "$ven49": [ + 29.86, + 36.04 + ], + "$ven50": [ + 28.08, + 36.4 + ], + "$ven51": [ + 26.29, + 36.73 + ], + "$ven52": [ + 24.48, + 37.04 + ], + "$ven53": [ + 22.65, + 37.33 + ], + "$ven54": [ + 20.81, + 37.6 + ], + "$ven55": [ + 18.96, + 37.84 + ], + "$ven56": [ + 17.1, + 38.06 + ], + "$ven57": [ + 15.22, + 38.26 + ], + "$ven58": [ + 13.34, + 38.44 + ], + "$ven59": [ + 11.45, + 38.59 + ], + "$ven60": [ + 9.55, + 38.72 + ], + "$ven61": [ + 7.65, + 38.82 + ], + "$ven62": [ + 5.74, + 38.91 + ], + "$ven63": [ + 3.83, + 38.97 + ], + "$ven64": [ + 1.91, + 39 + ], + "$ven65": [ + 0, + 39.01 + ], + "$ven66": [ + -1.91, + 39 + ], + "$ven67": [ + -3.83, + 38.97 + ], + "$ven68": [ + -5.74, + 38.91 + ], + "$ven69": [ + -7.65, + 38.82 + ], + "$ven70": [ + -9.55, + 38.72 + ], + "$ven71": [ + -11.45, + 38.59 + ], + "$ven72": [ + -13.34, + 38.44 + ], + "$ven73": [ + -15.22, + 38.26 + ], + "$ven74": [ + -17.1, + 38.06 + ], + "$ven75": [ + -18.96, + 37.84 + ], + "$ven76": [ + -20.81, + 37.6 + ], + "$ven77": [ + -22.65, + 37.33 + ], + "$ven78": [ + -24.48, + 37.04 + ], + "$ven79": [ + -26.29, + 36.73 + ], + "$ven80": [ + -28.08, + 36.4 + ], + "$ven81": [ + -29.86, + 36.04 + ], + "$ven82": [ + -31.62, + 35.67 + ], + "$ven83": [ + -33.36, + 35.27 + ], + "$ven84": [ + -35.08, + 34.85 + ], + "$ven85": [ + -36.78, + 34.41 + ], + "$ven86": [ + -38.46, + 33.94 + ], + "$ven87": [ + -40.11, + 33.46 + ], + "$ven88": [ + -41.74, + 32.96 + ], + "$ven89": [ + -43.35, + 32.44 + ], + "$ven90": [ + -44.93, + 31.9 + ], + "$ven91": [ + -46.48, + 31.34 + ], + "$ven92": [ + -48, + 30.76 + ], + "$ven93": [ + -49.5, + 30.16 + ], + "$ven94": [ + -50.96, + 29.54 + ], + "$ven95": [ + -52.4, + 28.91 + ], + "$ven96": [ + -53.8, + 28.25 + ], + "$ven97": [ + -55.17, + 27.59 + ], + "$ven98": [ + -56.51, + 26.9 + ], + "$ven99": [ + -57.81, + 26.2 + ], + "$ven100": [ + -59.08, + 25.48 + ], + "$ven101": [ + -60.31, + 24.75 + ], + "$ven102": [ + -61.51, + 24 + ], + "$ven103": [ + -62.67, + 23.24 + ], + "$ven104": [ + -63.79, + 22.46 + ], + "$ven105": [ + -64.88, + 21.67 + ], + "$ven106": [ + -65.92, + 20.87 + ], + "$ven107": [ + -66.92, + 20.06 + ], + "$ven108": [ + -67.89, + 19.23 + ], + "$ven109": [ + -68.81, + 18.39 + ], + "$ven110": [ + -69.69, + 17.54 + ], + "$ven111": [ + -70.53, + 16.68 + ], + "$ven112": [ + -71.33, + 15.81 + ], + "$ven113": [ + -72.09, + 14.93 + ], + "$ven114": [ + -72.8, + 14.04 + ], + "$ven115": [ + -73.46, + 13.14 + ], + "$ven116": [ + -74.09, + 12.24 + ], + "$ven117": [ + -74.67, + 11.32 + ], + "$ven118": [ + -75.2, + 10.41 + ], + "$ven119": [ + -75.69, + 9.48 + ], + "$ven120": [ + -76.13, + 8.55 + ], + "$ven121": [ + -76.53, + 7.61 + ], + "$ven122": [ + -76.88, + 6.67 + ], + "$ven123": [ + -77.18, + 5.72 + ], + "$ven124": [ + -77.44, + 4.78 + ], + "$ven125": [ + -77.65, + 3.82 + ], + "$ven126": [ + -77.81, + 2.87 + ], + "$ven127": [ + -77.93, + 1.91 + ], + "$ven128": [ + -78, + 0.96 + ], + "$ven129": [ + -78.03, + 0 + ], + "$ven130": [ + -78, + -0.96 + ], + "$ven131": [ + -77.93, + -1.91 + ], + "$ven132": [ + -77.81, + -2.87 + ], + "$ven133": [ + -77.65, + -3.82 + ], + "$ven134": [ + -77.44, + -4.78 + ], + "$ven135": [ + -77.18, + -5.72 + ], + "$ven136": [ + -76.88, + -6.67 + ], + "$ven137": [ + -76.53, + -7.61 + ], + "$ven138": [ + -76.13, + -8.55 + ], + "$ven139": [ + -75.69, + -9.48 + ], + "$ven140": [ + -75.2, + -10.41 + ], + "$ven141": [ + -74.67, + -11.32 + ], + "$ven142": [ + -74.09, + -12.24 + ], + "$ven143": [ + -73.46, + -13.14 + ], + "$ven144": [ + -72.8, + -14.04 + ], + "$ven145": [ + -72.09, + -14.93 + ], + "$ven146": [ + -71.33, + -15.81 + ], + "$ven147": [ + -70.53, + -16.68 + ], + "$ven148": [ + -69.69, + -17.54 + ], + "$ven149": [ + -68.81, + -18.39 + ], + "$ven150": [ + -67.89, + -19.23 + ], + "$ven151": [ + -66.92, + -20.06 + ], + "$ven152": [ + -65.92, + -20.87 + ], + "$ven153": [ + -64.88, + -21.67 + ], + "$ven154": [ + -63.79, + -22.46 + ], + "$ven155": [ + -62.67, + -23.24 + ], + "$ven156": [ + -61.51, + -24 + ], + "$ven157": [ + -60.31, + -24.75 + ], + "$ven158": [ + -59.08, + -25.48 + ], + "$ven159": [ + -57.81, + -26.2 + ], + "$ven160": [ + -56.51, + -26.9 + ], + "$ven161": [ + -55.17, + -27.59 + ], + "$ven162": [ + -53.8, + -28.25 + ], + "$ven163": [ + -52.4, + -28.91 + ], + "$ven164": [ + -50.96, + -29.54 + ], + "$ven165": [ + -49.5, + -30.16 + ], + "$ven166": [ + -48, + -30.76 + ], + "$ven167": [ + -46.48, + -31.34 + ], + "$ven168": [ + -44.93, + -31.9 + ], + "$ven169": [ + -43.35, + -32.44 + ], + "$ven170": [ + -41.74, + -32.96 + ], + "$ven171": [ + -40.11, + -33.46 + ], + "$ven172": [ + -38.46, + -33.94 + ], + "$ven173": [ + -36.78, + -34.41 + ], + "$ven174": [ + -35.08, + -34.85 + ], + "$ven175": [ + -33.36, + -35.27 + ], + "$ven176": [ + -31.62, + -35.67 + ], + "$ven177": [ + -29.86, + -36.04 + ], + "$ven178": [ + -28.08, + -36.4 + ], + "$ven179": [ + -26.29, + -36.73 + ], + "$ven180": [ + -24.48, + -37.04 + ], + "$ven181": [ + -22.65, + -37.33 + ], + "$ven182": [ + -20.81, + -37.6 + ], + "$ven183": [ + -18.96, + -37.84 + ], + "$ven184": [ + -17.1, + -38.06 + ], + "$ven185": [ + -15.22, + -38.26 + ], + "$ven186": [ + -13.34, + -38.44 + ], + "$ven187": [ + -11.45, + -38.59 + ], + "$ven188": [ + -9.55, + -38.72 + ], + "$ven189": [ + -7.65, + -38.82 + ], + "$ven190": [ + -5.74, + -38.91 + ], + "$ven191": [ + -3.83, + -38.97 + ], + "$ven192": [ + -1.91, + -39 + ], + "$ven193": [ + 0, + -39.01 + ], + "$ven194": [ + 1.91, + -39 + ], + "$ven195": [ + 3.83, + -38.97 + ], + "$ven196": [ + 5.74, + -38.91 + ], + "$ven197": [ + 7.65, + -38.82 + ], + "$ven198": [ + 9.55, + -38.72 + ], + "$ven199": [ + 11.45, + -38.59 + ], + "$ven200": [ + 13.34, + -38.44 + ], + "$ven201": [ + 15.22, + -38.26 + ], + "$ven202": [ + 17.1, + -38.06 + ], + "$ven203": [ + 18.96, + -37.84 + ], + "$ven204": [ + 20.81, + -37.6 + ], + "$ven205": [ + 22.65, + -37.33 + ], + "$ven206": [ + 24.48, + -37.04 + ], + "$ven207": [ + 26.29, + -36.73 + ], + "$ven208": [ + 28.08, + -36.4 + ], + "$ven209": [ + 29.86, + -36.04 + ], + "$ven210": [ + 31.62, + -35.67 + ], + "$ven211": [ + 33.36, + -35.27 + ], + "$ven212": [ + 35.08, + -34.85 + ], + "$ven213": [ + 36.78, + -34.41 + ], + "$ven214": [ + 38.46, + -33.94 + ], + "$ven215": [ + 40.11, + -33.46 + ], + "$ven216": [ + 41.74, + -32.96 + ], + "$ven217": [ + 43.35, + -32.44 + ], + "$ven218": [ + 44.93, + -31.9 + ], + "$ven219": [ + 46.48, + -31.34 + ], + "$ven220": [ + 48, + -30.76 + ], + "$ven221": [ + 49.5, + -30.16 + ], + "$ven222": [ + 50.96, + -29.54 + ], + "$ven223": [ + 52.4, + -28.91 + ], + "$ven224": [ + 53.8, + -28.25 + ], + "$ven225": [ + 55.17, + -27.59 + ], + "$ven226": [ + 56.51, + -26.9 + ], + "$ven227": [ + 57.81, + -26.2 + ], + "$ven228": [ + 59.08, + -25.48 + ], + "$ven229": [ + 60.31, + -24.75 + ], + "$ven230": [ + 61.51, + -24 + ], + "$ven231": [ + 62.67, + -23.24 + ], + "$ven232": [ + 63.79, + -22.46 + ], + "$ven233": [ + 64.88, + -21.67 + ], + "$ven234": [ + 65.92, + -20.87 + ], + "$ven235": [ + 66.92, + -20.06 + ], + "$ven236": [ + 67.89, + -19.23 + ], + "$ven237": [ + 68.81, + -18.39 + ], + "$ven238": [ + 69.69, + -17.54 + ], + "$ven239": [ + 70.53, + -16.68 + ], + "$ven240": [ + 71.33, + -15.81 + ], + "$ven241": [ + 72.09, + -14.93 + ], + "$ven242": [ + 72.8, + -14.04 + ], + "$ven243": [ + 73.46, + -13.14 + ], + "$ven244": [ + 74.09, + -12.24 + ], + "$ven245": [ + 74.67, + -11.32 + ], + "$ven246": [ + 75.2, + -10.41 + ], + "$ven247": [ + 75.69, + -9.48 + ], + "$ven248": [ + 76.13, + -8.55 + ], + "$ven249": [ + 76.53, + -7.61 + ], + "$ven250": [ + 76.88, + -6.67 + ], + "$ven251": [ + 77.18, + -5.72 + ], + "$ven252": [ + 77.44, + -4.78 + ], + "$ven253": [ + 77.65, + -3.82 + ], + "$ven254": [ + 77.81, + -2.87 + ], + "$ven255": [ + 77.93, + -1.91 + ], + "$ven256": [ + 78, + -0.96 + ] + } + }, + { + "Asteroids": { + "collection_index": 4, + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/spin_asteroid", + "size": [ + 10, + 10 + ], + "uv_size": [ + 80, + 80 + ], + "$orbit_duration": 0.234375, + "$ast1": [ + 131.53, + 0 + ], + "$ast2": [ + 131.49, + 1.61 + ], + "$ast3": [ + 131.37, + 3.23 + ], + "$ast4": [ + 131.17, + 4.84 + ], + "$ast5": [ + 130.9, + 6.45 + ], + "$ast6": [ + 130.54, + 8.05 + ], + "$ast7": [ + 130.11, + 9.65 + ], + "$ast8": [ + 129.59, + 11.24 + ], + "$ast9": [ + 129, + 12.83 + ], + "$ast10": [ + 128.33, + 14.41 + ], + "$ast11": [ + 127.59, + 15.98 + ], + "$ast12": [ + 126.76, + 17.54 + ], + "$ast13": [ + 125.87, + 19.09 + ], + "$ast14": [ + 124.89, + 20.63 + ], + "$ast15": [ + 123.84, + 22.16 + ], + "$ast16": [ + 122.72, + 23.67 + ], + "$ast17": [ + 121.52, + 25.17 + ], + "$ast18": [ + 120.25, + 26.65 + ], + "$ast19": [ + 118.9, + 28.12 + ], + "$ast20": [ + 117.49, + 29.57 + ], + "$ast21": [ + 116, + 31 + ], + "$ast22": [ + 114.44, + 32.42 + ], + "$ast23": [ + 112.82, + 33.81 + ], + "$ast24": [ + 111.12, + 35.18 + ], + "$ast25": [ + 109.36, + 36.54 + ], + "$ast26": [ + 107.54, + 37.87 + ], + "$ast27": [ + 105.65, + 39.18 + ], + "$ast28": [ + 103.69, + 40.46 + ], + "$ast29": [ + 101.67, + 41.72 + ], + "$ast30": [ + 99.6, + 42.96 + ], + "$ast31": [ + 97.46, + 44.16 + ], + "$ast32": [ + 95.26, + 45.35 + ], + "$ast33": [ + 93.01, + 46.5 + ], + "$ast34": [ + 90.69, + 47.63 + ], + "$ast35": [ + 88.33, + 48.73 + ], + "$ast36": [ + 85.91, + 49.8 + ], + "$ast37": [ + 83.44, + 50.84 + ], + "$ast38": [ + 80.92, + 51.85 + ], + "$ast39": [ + 78.35, + 52.82 + ], + "$ast40": [ + 75.74, + 53.77 + ], + "$ast41": [ + 73.07, + 54.68 + ], + "$ast42": [ + 70.37, + 55.56 + ], + "$ast43": [ + 67.62, + 56.41 + ], + "$ast44": [ + 64.83, + 57.22 + ], + "$ast45": [ + 62, + 58 + ], + "$ast46": [ + 59.14, + 58.74 + ], + "$ast47": [ + 56.24, + 59.45 + ], + "$ast48": [ + 53.3, + 60.12 + ], + "$ast49": [ + 50.33, + 60.76 + ], + "$ast50": [ + 47.34, + 61.36 + ], + "$ast51": [ + 44.31, + 61.92 + ], + "$ast52": [ + 41.26, + 62.45 + ], + "$ast53": [ + 38.18, + 62.93 + ], + "$ast54": [ + 35.08, + 63.38 + ], + "$ast55": [ + 31.96, + 63.79 + ], + "$ast56": [ + 28.82, + 64.17 + ], + "$ast57": [ + 25.66, + 64.5 + ], + "$ast58": [ + 22.49, + 64.8 + ], + "$ast59": [ + 19.3, + 65.05 + ], + "$ast60": [ + 16.1, + 65.27 + ], + "$ast61": [ + 12.89, + 65.45 + ], + "$ast62": [ + 9.68, + 65.59 + ], + "$ast63": [ + 6.45, + 65.69 + ], + "$ast64": [ + 3.23, + 65.74 + ], + "$ast65": [ + 0, + 65.76 + ], + "$ast66": [ + -3.23, + 65.74 + ], + "$ast67": [ + -6.45, + 65.69 + ], + "$ast68": [ + -9.68, + 65.59 + ], + "$ast69": [ + -12.89, + 65.45 + ], + "$ast70": [ + -16.1, + 65.27 + ], + "$ast71": [ + -19.3, + 65.05 + ], + "$ast72": [ + -22.49, + 64.8 + ], + "$ast73": [ + -25.66, + 64.5 + ], + "$ast74": [ + -28.82, + 64.17 + ], + "$ast75": [ + -31.96, + 63.79 + ], + "$ast76": [ + -35.08, + 63.38 + ], + "$ast77": [ + -38.18, + 62.93 + ], + "$ast78": [ + -41.26, + 62.45 + ], + "$ast79": [ + -44.31, + 61.92 + ], + "$ast80": [ + -47.34, + 61.36 + ], + "$ast81": [ + -50.33, + 60.76 + ], + "$ast82": [ + -53.3, + 60.12 + ], + "$ast83": [ + -56.24, + 59.45 + ], + "$ast84": [ + -59.14, + 58.74 + ], + "$ast85": [ + -62, + 58 + ], + "$ast86": [ + -64.83, + 57.22 + ], + "$ast87": [ + -67.62, + 56.41 + ], + "$ast88": [ + -70.37, + 55.56 + ], + "$ast89": [ + -73.07, + 54.68 + ], + "$ast90": [ + -75.74, + 53.77 + ], + "$ast91": [ + -78.35, + 52.82 + ], + "$ast92": [ + -80.92, + 51.85 + ], + "$ast93": [ + -83.44, + 50.84 + ], + "$ast94": [ + -85.91, + 49.8 + ], + "$ast95": [ + -88.33, + 48.73 + ], + "$ast96": [ + -90.69, + 47.63 + ], + "$ast97": [ + -93.01, + 46.5 + ], + "$ast98": [ + -95.26, + 45.35 + ], + "$ast99": [ + -97.46, + 44.16 + ], + "$ast100": [ + -99.6, + 42.96 + ], + "$ast101": [ + -101.67, + 41.72 + ], + "$ast102": [ + -103.69, + 40.46 + ], + "$ast103": [ + -105.65, + 39.18 + ], + "$ast104": [ + -107.54, + 37.87 + ], + "$ast105": [ + -109.36, + 36.54 + ], + "$ast106": [ + -111.12, + 35.18 + ], + "$ast107": [ + -112.82, + 33.81 + ], + "$ast108": [ + -114.44, + 32.42 + ], + "$ast109": [ + -116, + 31 + ], + "$ast110": [ + -117.49, + 29.57 + ], + "$ast111": [ + -118.9, + 28.12 + ], + "$ast112": [ + -120.25, + 26.65 + ], + "$ast113": [ + -121.52, + 25.17 + ], + "$ast114": [ + -122.72, + 23.67 + ], + "$ast115": [ + -123.84, + 22.16 + ], + "$ast116": [ + -124.89, + 20.63 + ], + "$ast117": [ + -125.87, + 19.09 + ], + "$ast118": [ + -126.76, + 17.54 + ], + "$ast119": [ + -127.59, + 15.98 + ], + "$ast120": [ + -128.33, + 14.41 + ], + "$ast121": [ + -129, + 12.83 + ], + "$ast122": [ + -129.59, + 11.24 + ], + "$ast123": [ + -130.11, + 9.65 + ], + "$ast124": [ + -130.54, + 8.05 + ], + "$ast125": [ + -130.9, + 6.45 + ], + "$ast126": [ + -131.17, + 4.84 + ], + "$ast127": [ + -131.37, + 3.23 + ], + "$ast128": [ + -131.49, + 1.61 + ], + "$ast129": [ + -131.53, + 0 + ], + "$ast130": [ + -131.49, + -1.61 + ], + "$ast131": [ + -131.37, + -3.23 + ], + "$ast132": [ + -131.17, + -4.84 + ], + "$ast133": [ + -130.9, + -6.45 + ], + "$ast134": [ + -130.54, + -8.05 + ], + "$ast135": [ + -130.11, + -9.65 + ], + "$ast136": [ + -129.59, + -11.24 + ], + "$ast137": [ + -129, + -12.83 + ], + "$ast138": [ + -128.33, + -14.41 + ], + "$ast139": [ + -127.59, + -15.98 + ], + "$ast140": [ + -126.76, + -17.54 + ], + "$ast141": [ + -125.87, + -19.09 + ], + "$ast142": [ + -124.89, + -20.63 + ], + "$ast143": [ + -123.84, + -22.16 + ], + "$ast144": [ + -122.72, + -23.67 + ], + "$ast145": [ + -121.52, + -25.17 + ], + "$ast146": [ + -120.25, + -26.65 + ], + "$ast147": [ + -118.9, + -28.12 + ], + "$ast148": [ + -117.49, + -29.57 + ], + "$ast149": [ + -116, + -31 + ], + "$ast150": [ + -114.44, + -32.42 + ], + "$ast151": [ + -112.82, + -33.81 + ], + "$ast152": [ + -111.12, + -35.18 + ], + "$ast153": [ + -109.36, + -36.54 + ], + "$ast154": [ + -107.54, + -37.87 + ], + "$ast155": [ + -105.65, + -39.18 + ], + "$ast156": [ + -103.69, + -40.46 + ], + "$ast157": [ + -101.67, + -41.72 + ], + "$ast158": [ + -99.6, + -42.96 + ], + "$ast159": [ + -97.46, + -44.16 + ], + "$ast160": [ + -95.26, + -45.35 + ], + "$ast161": [ + -93.01, + -46.5 + ], + "$ast162": [ + -90.69, + -47.63 + ], + "$ast163": [ + -88.33, + -48.73 + ], + "$ast164": [ + -85.91, + -49.8 + ], + "$ast165": [ + -83.44, + -50.84 + ], + "$ast166": [ + -80.92, + -51.85 + ], + "$ast167": [ + -78.35, + -52.82 + ], + "$ast168": [ + -75.74, + -53.77 + ], + "$ast169": [ + -73.07, + -54.68 + ], + "$ast170": [ + -70.37, + -55.56 + ], + "$ast171": [ + -67.62, + -56.41 + ], + "$ast172": [ + -64.83, + -57.22 + ], + "$ast173": [ + -62, + -58 + ], + "$ast174": [ + -59.14, + -58.74 + ], + "$ast175": [ + -56.24, + -59.45 + ], + "$ast176": [ + -53.3, + -60.12 + ], + "$ast177": [ + -50.33, + -60.76 + ], + "$ast178": [ + -47.34, + -61.36 + ], + "$ast179": [ + -44.31, + -61.92 + ], + "$ast180": [ + -41.26, + -62.45 + ], + "$ast181": [ + -38.18, + -62.93 + ], + "$ast182": [ + -35.08, + -63.38 + ], + "$ast183": [ + -31.96, + -63.79 + ], + "$ast184": [ + -28.82, + -64.17 + ], + "$ast185": [ + -25.66, + -64.5 + ], + "$ast186": [ + -22.49, + -64.8 + ], + "$ast187": [ + -19.3, + -65.05 + ], + "$ast188": [ + -16.1, + -65.27 + ], + "$ast189": [ + -12.89, + -65.45 + ], + "$ast190": [ + -9.68, + -65.59 + ], + "$ast191": [ + -6.45, + -65.69 + ], + "$ast192": [ + -3.23, + -65.74 + ], + "$ast193": [ + 0, + -65.76 + ], + "$ast194": [ + 3.23, + -65.74 + ], + "$ast195": [ + 6.45, + -65.69 + ], + "$ast196": [ + 9.68, + -65.59 + ], + "$ast197": [ + 12.89, + -65.45 + ], + "$ast198": [ + 16.1, + -65.27 + ], + "$ast199": [ + 19.3, + -65.05 + ], + "$ast200": [ + 22.49, + -64.8 + ], + "$ast201": [ + 25.66, + -64.5 + ], + "$ast202": [ + 28.82, + -64.17 + ], + "$ast203": [ + 31.96, + -63.79 + ], + "$ast204": [ + 35.08, + -63.38 + ], + "$ast205": [ + 38.18, + -62.93 + ], + "$ast206": [ + 41.26, + -62.45 + ], + "$ast207": [ + 44.31, + -61.92 + ], + "$ast208": [ + 47.34, + -61.36 + ], + "$ast209": [ + 50.33, + -60.76 + ], + "$ast210": [ + 53.3, + -60.12 + ], + "$ast211": [ + 56.24, + -59.45 + ], + "$ast212": [ + 59.14, + -58.74 + ], + "$ast213": [ + 62, + -58 + ], + "$ast214": [ + 64.83, + -57.22 + ], + "$ast215": [ + 67.62, + -56.41 + ], + "$ast216": [ + 70.37, + -55.56 + ], + "$ast217": [ + 73.07, + -54.68 + ], + "$ast218": [ + 75.74, + -53.77 + ], + "$ast219": [ + 78.35, + -52.82 + ], + "$ast220": [ + 80.92, + -51.85 + ], + "$ast221": [ + 83.44, + -50.84 + ], + "$ast222": [ + 85.91, + -49.8 + ], + "$ast223": [ + 88.33, + -48.73 + ], + "$ast224": [ + 90.69, + -47.63 + ], + "$ast225": [ + 93.01, + -46.5 + ], + "$ast226": [ + 95.26, + -45.35 + ], + "$ast227": [ + 97.46, + -44.16 + ], + "$ast228": [ + 99.6, + -42.96 + ], + "$ast229": [ + 101.67, + -41.72 + ], + "$ast230": [ + 103.69, + -40.46 + ], + "$ast231": [ + 105.65, + -39.18 + ], + "$ast232": [ + 107.54, + -37.87 + ], + "$ast233": [ + 109.36, + -36.54 + ], + "$ast234": [ + 111.12, + -35.18 + ], + "$ast235": [ + 112.82, + -33.81 + ], + "$ast236": [ + 114.44, + -32.42 + ], + "$ast237": [ + 116, + -31 + ], + "$ast238": [ + 117.49, + -29.57 + ], + "$ast239": [ + 118.9, + -28.12 + ], + "$ast240": [ + 120.25, + -26.65 + ], + "$ast241": [ + 121.52, + -25.17 + ], + "$ast242": [ + 122.72, + -23.67 + ], + "$ast243": [ + 123.84, + -22.16 + ], + "$ast244": [ + 124.89, + -20.63 + ], + "$ast245": [ + 125.87, + -19.09 + ], + "$ast246": [ + 126.76, + -17.54 + ], + "$ast247": [ + 127.59, + -15.98 + ], + "$ast248": [ + 128.33, + -14.41 + ], + "$ast249": [ + 129, + -12.83 + ], + "$ast250": [ + 129.59, + -11.24 + ], + "$ast251": [ + 130.11, + -9.65 + ], + "$ast252": [ + 130.54, + -8.05 + ], + "$ast253": [ + 130.9, + -6.45 + ], + "$ast254": [ + 131.17, + -4.84 + ], + "$ast255": [ + 131.37, + -3.23 + ], + "$ast256": [ + 131.49, + -1.61 + ], + "anims": [ + { + "animation": { + "anim_type": "flip_book", + "fps": 4, + "frame_count": 12, + "frame_step": 80 + } + }, + "@celestial.asteroids_orbit_step108" + ], + "controls": [ + { + "orbital_toggle_asteroids@celestial.selection_box": {} + } + ] + } + } + ] + } + } + ] + }, + "solar_system_planet": { + "type": "image", + "texture": "$texture", + "size": "$size", + "$select_name": "('orbital_toggle_' + $control_name)", + "anims": [ + { + "expand": { + "anim_type": "offset", + "duration": 1, + "from": [ + 0, + 0 + ], + "to": "$offset" + } + } + ], + "controls": [ + { + "$select_name@celestial.selection_box": {} + } + ] + }, + "selection_box@cosmos.toggle": { + "toggle_default_state": false, + "toggle_grid_collection_name": "orbital_planet", + "toggle_name": "orbital_planet", + "size": [ + 32, + 32 + ], + "$selection_size": [ + 16, + 16 + ], + "controls": [ + { + "checked_hover": { + "type": "image", + "size": "$selection_size", + "texture": "textures/ui/cosmos/celestial_selector/selection_box", + "color": [ + 1, + 1, + 0 + ], + "layer": 7, + "anims": [ + "@celestial.fade_loop" + ] + } + } + ] + }, + "orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1", + "to": "$x2", + "next": "@celestial.orbit_step2" + }, + "orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x2", + "to": "$x3", + "next": "@celestial.orbit_step3" + }, + "orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x3", + "to": "$x4", + "next": "@celestial.orbit_step4" + }, + "orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x4", + "to": "$x5", + "next": "@celestial.orbit_step5" + }, + "orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x5", + "to": "$x6", + "next": "@celestial.orbit_step6" + }, + "orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x6", + "to": "$x7", + "next": "@celestial.orbit_step7" + }, + "orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x7", + "to": "$x8", + "next": "@celestial.orbit_step8" + }, + "orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x8", + "to": "$x9", + "next": "@celestial.orbit_step9" + }, + "orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x9", + "to": "$x10", + "next": "@celestial.orbit_step10" + }, + "orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x10", + "to": "$x11", + "next": "@celestial.orbit_step11" + }, + "orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x11", + "to": "$x12", + "next": "@celestial.orbit_step12" + }, + "orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x12", + "to": "$x13", + "next": "@celestial.orbit_step13" + }, + "orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x13", + "to": "$x14", + "next": "@celestial.orbit_step14" + }, + "orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x14", + "to": "$x15", + "next": "@celestial.orbit_step15" + }, + "orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x15", + "to": "$x16", + "next": "@celestial.orbit_step16" + }, + "orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x16", + "to": "$x17", + "next": "@celestial.orbit_step17" + }, + "orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x17", + "to": "$x18", + "next": "@celestial.orbit_step18" + }, + "orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x18", + "to": "$x19", + "next": "@celestial.orbit_step19" + }, + "orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x19", + "to": "$x20", + "next": "@celestial.orbit_step20" + }, + "orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x20", + "to": "$x21", + "next": "@celestial.orbit_step21" + }, + "orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x21", + "to": "$x22", + "next": "@celestial.orbit_step22" + }, + "orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x22", + "to": "$x23", + "next": "@celestial.orbit_step23" + }, + "orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x23", + "to": "$x24", + "next": "@celestial.orbit_step24" + }, + "orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x24", + "to": "$x25", + "next": "@celestial.orbit_step25" + }, + "orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x25", + "to": "$x26", + "next": "@celestial.orbit_step26" + }, + "orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x26", + "to": "$x27", + "next": "@celestial.orbit_step27" + }, + "orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x27", + "to": "$x28", + "next": "@celestial.orbit_step28" + }, + "orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x28", + "to": "$x29", + "next": "@celestial.orbit_step29" + }, + "orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x29", + "to": "$x30", + "next": "@celestial.orbit_step30" + }, + "orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x30", + "to": "$x31", + "next": "@celestial.orbit_step31" + }, + "orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x31", + "to": "$x32", + "next": "@celestial.orbit_step32" + }, + "orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x32", + "to": "$x33", + "next": "@celestial.orbit_step33" + }, + "orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x33", + "to": "$x34", + "next": "@celestial.orbit_step34" + }, + "orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x34", + "to": "$x35", + "next": "@celestial.orbit_step35" + }, + "orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x35", + "to": "$x36", + "next": "@celestial.orbit_step36" + }, + "orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x36", + "to": "$x37", + "next": "@celestial.orbit_step37" + }, + "orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x37", + "to": "$x38", + "next": "@celestial.orbit_step38" + }, + "orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x38", + "to": "$x39", + "next": "@celestial.orbit_step39" + }, + "orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x39", + "to": "$x40", + "next": "@celestial.orbit_step40" + }, + "orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x40", + "to": "$x41", + "next": "@celestial.orbit_step41" + }, + "orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x41", + "to": "$x42", + "next": "@celestial.orbit_step42" + }, + "orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x42", + "to": "$x43", + "next": "@celestial.orbit_step43" + }, + "orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x43", + "to": "$x44", + "next": "@celestial.orbit_step44" + }, + "orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x44", + "to": "$x45", + "next": "@celestial.orbit_step45" + }, + "orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x45", + "to": "$x46", + "next": "@celestial.orbit_step46" + }, + "orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x46", + "to": "$x47", + "next": "@celestial.orbit_step47" + }, + "orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x47", + "to": "$x48", + "next": "@celestial.orbit_step48" + }, + "orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x48", + "to": "$x49", + "next": "@celestial.orbit_step49" + }, + "orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x49", + "to": "$x50", + "next": "@celestial.orbit_step50" + }, + "orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x50", + "to": "$x51", + "next": "@celestial.orbit_step51" + }, + "orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x51", + "to": "$x52", + "next": "@celestial.orbit_step52" + }, + "orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x52", + "to": "$x53", + "next": "@celestial.orbit_step53" + }, + "orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x53", + "to": "$x54", + "next": "@celestial.orbit_step54" + }, + "orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x54", + "to": "$x55", + "next": "@celestial.orbit_step55" + }, + "orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x55", + "to": "$x56", + "next": "@celestial.orbit_step56" + }, + "orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x56", + "to": "$x57", + "next": "@celestial.orbit_step57" + }, + "orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x57", + "to": "$x58", + "next": "@celestial.orbit_step58" + }, + "orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x58", + "to": "$x59", + "next": "@celestial.orbit_step59" + }, + "orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x59", + "to": "$x60", + "next": "@celestial.orbit_step60" + }, + "orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x60", + "to": "$x61", + "next": "@celestial.orbit_step61" + }, + "orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x61", + "to": "$x62", + "next": "@celestial.orbit_step62" + }, + "orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x62", + "to": "$x63", + "next": "@celestial.orbit_step63" + }, + "orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x63", + "to": "$x64", + "next": "@celestial.orbit_step64" + }, + "orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x64", + "to": "$x65", + "next": "@celestial.orbit_step65" + }, + "orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x65", + "to": "$x66", + "next": "@celestial.orbit_step66" + }, + "orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x66", + "to": "$x67", + "next": "@celestial.orbit_step67" + }, + "orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x67", + "to": "$x68", + "next": "@celestial.orbit_step68" + }, + "orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x68", + "to": "$x69", + "next": "@celestial.orbit_step69" + }, + "orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x69", + "to": "$x70", + "next": "@celestial.orbit_step70" + }, + "orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x70", + "to": "$x71", + "next": "@celestial.orbit_step71" + }, + "orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x71", + "to": "$x72", + "next": "@celestial.orbit_step72" + }, + "orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x72", + "to": "$x73", + "next": "@celestial.orbit_step73" + }, + "orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x73", + "to": "$x74", + "next": "@celestial.orbit_step74" + }, + "orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x74", + "to": "$x75", + "next": "@celestial.orbit_step75" + }, + "orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x75", + "to": "$x76", + "next": "@celestial.orbit_step76" + }, + "orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x76", + "to": "$x77", + "next": "@celestial.orbit_step77" + }, + "orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x77", + "to": "$x78", + "next": "@celestial.orbit_step78" + }, + "orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x78", + "to": "$x79", + "next": "@celestial.orbit_step79" + }, + "orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x79", + "to": "$x80", + "next": "@celestial.orbit_step80" + }, + "orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x80", + "to": "$x81", + "next": "@celestial.orbit_step81" + }, + "orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x81", + "to": "$x82", + "next": "@celestial.orbit_step82" + }, + "orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x82", + "to": "$x83", + "next": "@celestial.orbit_step83" + }, + "orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x83", + "to": "$x84", + "next": "@celestial.orbit_step84" + }, + "orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x84", + "to": "$x85", + "next": "@celestial.orbit_step85" + }, + "orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x85", + "to": "$x86", + "next": "@celestial.orbit_step86" + }, + "orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x86", + "to": "$x87", + "next": "@celestial.orbit_step87" + }, + "orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x87", + "to": "$x88", + "next": "@celestial.orbit_step88" + }, + "orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x88", + "to": "$x89", + "next": "@celestial.orbit_step89" + }, + "orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x89", + "to": "$x90", + "next": "@celestial.orbit_step90" + }, + "orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x90", + "to": "$x91", + "next": "@celestial.orbit_step91" + }, + "orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x91", + "to": "$x92", + "next": "@celestial.orbit_step92" + }, + "orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x92", + "to": "$x93", + "next": "@celestial.orbit_step93" + }, + "orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x93", + "to": "$x94", + "next": "@celestial.orbit_step94" + }, + "orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x94", + "to": "$x95", + "next": "@celestial.orbit_step95" + }, + "orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x95", + "to": "$x96", + "next": "@celestial.orbit_step96" + }, + "orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x96", + "to": "$x97", + "next": "@celestial.orbit_step97" + }, + "orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x97", + "to": "$x98", + "next": "@celestial.orbit_step98" + }, + "orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x98", + "to": "$x99", + "next": "@celestial.orbit_step99" + }, + "orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x99", + "to": "$x100", + "next": "@celestial.orbit_step100" + }, + "orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x100", + "to": "$x101", + "next": "@celestial.orbit_step101" + }, + "orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x101", + "to": "$x102", + "next": "@celestial.orbit_step102" + }, + "orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x102", + "to": "$x103", + "next": "@celestial.orbit_step103" + }, + "orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x103", + "to": "$x104", + "next": "@celestial.orbit_step104" + }, + "orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x104", + "to": "$x105", + "next": "@celestial.orbit_step105" + }, + "orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x105", + "to": "$x106", + "next": "@celestial.orbit_step106" + }, + "orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x106", + "to": "$x107", + "next": "@celestial.orbit_step107" + }, + "orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x107", + "to": "$x108", + "next": "@celestial.orbit_step108" + }, + "orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x108", + "to": "$x109", + "next": "@celestial.orbit_step109" + }, + "orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x109", + "to": "$x110", + "next": "@celestial.orbit_step110" + }, + "orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x110", + "to": "$x111", + "next": "@celestial.orbit_step111" + }, + "orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x111", + "to": "$x112", + "next": "@celestial.orbit_step112" + }, + "orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x112", + "to": "$x113", + "next": "@celestial.orbit_step113" + }, + "orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x113", + "to": "$x114", + "next": "@celestial.orbit_step114" + }, + "orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x114", + "to": "$x115", + "next": "@celestial.orbit_step115" + }, + "orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x115", + "to": "$x116", + "next": "@celestial.orbit_step116" + }, + "orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x116", + "to": "$x117", + "next": "@celestial.orbit_step117" + }, + "orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x117", + "to": "$x118", + "next": "@celestial.orbit_step118" + }, + "orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x118", + "to": "$x119", + "next": "@celestial.orbit_step119" + }, + "orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x119", + "to": "$x120", + "next": "@celestial.orbit_step120" + }, + "orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x120", + "to": "$x121", + "next": "@celestial.orbit_step121" + }, + "orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x121", + "to": "$x122", + "next": "@celestial.orbit_step122" + }, + "orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x122", + "to": "$x123", + "next": "@celestial.orbit_step123" + }, + "orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x123", + "to": "$x124", + "next": "@celestial.orbit_step124" + }, + "orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x124", + "to": "$x125", + "next": "@celestial.orbit_step125" + }, + "orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x125", + "to": "$x126", + "next": "@celestial.orbit_step126" + }, + "orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x126", + "to": "$x127", + "next": "@celestial.orbit_step127" + }, + "orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x127", + "to": "$x128", + "next": "@celestial.orbit_step128" + }, + "orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x128", + "to": "$x129", + "next": "@celestial.orbit_step129" + }, + "orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x129", + "to": "$x130", + "next": "@celestial.orbit_step130" + }, + "orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x130", + "to": "$x131", + "next": "@celestial.orbit_step131" + }, + "orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x131", + "to": "$x132", + "next": "@celestial.orbit_step132" + }, + "orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x132", + "to": "$x133", + "next": "@celestial.orbit_step133" + }, + "orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x133", + "to": "$x134", + "next": "@celestial.orbit_step134" + }, + "orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x134", + "to": "$x135", + "next": "@celestial.orbit_step135" + }, + "orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x135", + "to": "$x136", + "next": "@celestial.orbit_step136" + }, + "orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x136", + "to": "$x137", + "next": "@celestial.orbit_step137" + }, + "orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x137", + "to": "$x138", + "next": "@celestial.orbit_step138" + }, + "orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x138", + "to": "$x139", + "next": "@celestial.orbit_step139" + }, + "orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x139", + "to": "$x140", + "next": "@celestial.orbit_step140" + }, + "orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x140", + "to": "$x141", + "next": "@celestial.orbit_step141" + }, + "orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x141", + "to": "$x142", + "next": "@celestial.orbit_step142" + }, + "orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x142", + "to": "$x143", + "next": "@celestial.orbit_step143" + }, + "orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x143", + "to": "$x144", + "next": "@celestial.orbit_step144" + }, + "orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x144", + "to": "$x145", + "next": "@celestial.orbit_step145" + }, + "orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x145", + "to": "$x146", + "next": "@celestial.orbit_step146" + }, + "orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x146", + "to": "$x147", + "next": "@celestial.orbit_step147" + }, + "orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x147", + "to": "$x148", + "next": "@celestial.orbit_step148" + }, + "orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x148", + "to": "$x149", + "next": "@celestial.orbit_step149" + }, + "orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x149", + "to": "$x150", + "next": "@celestial.orbit_step150" + }, + "orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x150", + "to": "$x151", + "next": "@celestial.orbit_step151" + }, + "orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x151", + "to": "$x152", + "next": "@celestial.orbit_step152" + }, + "orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x152", + "to": "$x153", + "next": "@celestial.orbit_step153" + }, + "orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x153", + "to": "$x154", + "next": "@celestial.orbit_step154" + }, + "orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x154", + "to": "$x155", + "next": "@celestial.orbit_step155" + }, + "orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x155", + "to": "$x156", + "next": "@celestial.orbit_step156" + }, + "orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x156", + "to": "$x157", + "next": "@celestial.orbit_step157" + }, + "orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x157", + "to": "$x158", + "next": "@celestial.orbit_step158" + }, + "orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x158", + "to": "$x159", + "next": "@celestial.orbit_step159" + }, + "orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x159", + "to": "$x160", + "next": "@celestial.orbit_step160" + }, + "orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x160", + "to": "$x161", + "next": "@celestial.orbit_step161" + }, + "orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x161", + "to": "$x162", + "next": "@celestial.orbit_step162" + }, + "orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x162", + "to": "$x163", + "next": "@celestial.orbit_step163" + }, + "orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x163", + "to": "$x164", + "next": "@celestial.orbit_step164" + }, + "orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x164", + "to": "$x165", + "next": "@celestial.orbit_step165" + }, + "orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x165", + "to": "$x166", + "next": "@celestial.orbit_step166" + }, + "orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x166", + "to": "$x167", + "next": "@celestial.orbit_step167" + }, + "orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x167", + "to": "$x168", + "next": "@celestial.orbit_step168" + }, + "orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x168", + "to": "$x169", + "next": "@celestial.orbit_step169" + }, + "orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x169", + "to": "$x170", + "next": "@celestial.orbit_step170" + }, + "orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x170", + "to": "$x171", + "next": "@celestial.orbit_step171" + }, + "orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x171", + "to": "$x172", + "next": "@celestial.orbit_step172" + }, + "orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x172", + "to": "$x173", + "next": "@celestial.orbit_step173" + }, + "orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x173", + "to": "$x174", + "next": "@celestial.orbit_step174" + }, + "orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x174", + "to": "$x175", + "next": "@celestial.orbit_step175" + }, + "orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x175", + "to": "$x176", + "next": "@celestial.orbit_step176" + }, + "orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x176", + "to": "$x177", + "next": "@celestial.orbit_step177" + }, + "orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x177", + "to": "$x178", + "next": "@celestial.orbit_step178" + }, + "orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x178", + "to": "$x179", + "next": "@celestial.orbit_step179" + }, + "orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x179", + "to": "$x180", + "next": "@celestial.orbit_step180" + }, + "orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x180", + "to": "$x181", + "next": "@celestial.orbit_step181" + }, + "orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x181", + "to": "$x182", + "next": "@celestial.orbit_step182" + }, + "orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x182", + "to": "$x183", + "next": "@celestial.orbit_step183" + }, + "orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x183", + "to": "$x184", + "next": "@celestial.orbit_step184" + }, + "orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x184", + "to": "$x185", + "next": "@celestial.orbit_step185" + }, + "orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x185", + "to": "$x186", + "next": "@celestial.orbit_step186" + }, + "orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x186", + "to": "$x187", + "next": "@celestial.orbit_step187" + }, + "orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x187", + "to": "$x188", + "next": "@celestial.orbit_step188" + }, + "orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x188", + "to": "$x189", + "next": "@celestial.orbit_step189" + }, + "orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x189", + "to": "$x190", + "next": "@celestial.orbit_step190" + }, + "orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x190", + "to": "$x191", + "next": "@celestial.orbit_step191" + }, + "orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x191", + "to": "$x192", + "next": "@celestial.orbit_step192" + }, + "orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x192", + "to": "$x193", + "next": "@celestial.orbit_step193" + }, + "orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x193", + "to": "$x194", + "next": "@celestial.orbit_step194" + }, + "orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x194", + "to": "$x195", + "next": "@celestial.orbit_step195" + }, + "orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x195", + "to": "$x196", + "next": "@celestial.orbit_step196" + }, + "orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x196", + "to": "$x197", + "next": "@celestial.orbit_step197" + }, + "orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x197", + "to": "$x198", + "next": "@celestial.orbit_step198" + }, + "orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x198", + "to": "$x199", + "next": "@celestial.orbit_step199" + }, + "orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x199", + "to": "$x200", + "next": "@celestial.orbit_step200" + }, + "orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x200", + "to": "$x201", + "next": "@celestial.orbit_step201" + }, + "orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x201", + "to": "$x202", + "next": "@celestial.orbit_step202" + }, + "orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x202", + "to": "$x203", + "next": "@celestial.orbit_step203" + }, + "orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x203", + "to": "$x204", + "next": "@celestial.orbit_step204" + }, + "orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x204", + "to": "$x205", + "next": "@celestial.orbit_step205" + }, + "orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x205", + "to": "$x206", + "next": "@celestial.orbit_step206" + }, + "orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x206", + "to": "$x207", + "next": "@celestial.orbit_step207" + }, + "orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x207", + "to": "$x208", + "next": "@celestial.orbit_step208" + }, + "orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x208", + "to": "$x209", + "next": "@celestial.orbit_step209" + }, + "orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x209", + "to": "$x210", + "next": "@celestial.orbit_step210" + }, + "orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x210", + "to": "$x211", + "next": "@celestial.orbit_step211" + }, + "orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x211", + "to": "$x212", + "next": "@celestial.orbit_step212" + }, + "orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x212", + "to": "$x213", + "next": "@celestial.orbit_step213" + }, + "orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x213", + "to": "$x214", + "next": "@celestial.orbit_step214" + }, + "orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x214", + "to": "$x215", + "next": "@celestial.orbit_step215" + }, + "orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x215", + "to": "$x216", + "next": "@celestial.orbit_step216" + }, + "orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x216", + "to": "$x217", + "next": "@celestial.orbit_step217" + }, + "orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x217", + "to": "$x218", + "next": "@celestial.orbit_step218" + }, + "orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x218", + "to": "$x219", + "next": "@celestial.orbit_step219" + }, + "orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x219", + "to": "$x220", + "next": "@celestial.orbit_step220" + }, + "orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x220", + "to": "$x221", + "next": "@celestial.orbit_step221" + }, + "orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x221", + "to": "$x222", + "next": "@celestial.orbit_step222" + }, + "orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x222", + "to": "$x223", + "next": "@celestial.orbit_step223" + }, + "orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x223", + "to": "$x224", + "next": "@celestial.orbit_step224" + }, + "orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x224", + "to": "$x225", + "next": "@celestial.orbit_step225" + }, + "orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x225", + "to": "$x226", + "next": "@celestial.orbit_step226" + }, + "orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x226", + "to": "$x227", + "next": "@celestial.orbit_step227" + }, + "orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x227", + "to": "$x228", + "next": "@celestial.orbit_step228" + }, + "orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x228", + "to": "$x229", + "next": "@celestial.orbit_step229" + }, + "orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x229", + "to": "$x230", + "next": "@celestial.orbit_step230" + }, + "orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x230", + "to": "$x231", + "next": "@celestial.orbit_step231" + }, + "orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x231", + "to": "$x232", + "next": "@celestial.orbit_step232" + }, + "orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x232", + "to": "$x233", + "next": "@celestial.orbit_step233" + }, + "orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x233", + "to": "$x234", + "next": "@celestial.orbit_step234" + }, + "orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x234", + "to": "$x235", + "next": "@celestial.orbit_step235" + }, + "orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x235", + "to": "$x236", + "next": "@celestial.orbit_step236" + }, + "orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x236", + "to": "$x237", + "next": "@celestial.orbit_step237" + }, + "orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x237", + "to": "$x238", + "next": "@celestial.orbit_step238" + }, + "orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x238", + "to": "$x239", + "next": "@celestial.orbit_step239" + }, + "orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x239", + "to": "$x240", + "next": "@celestial.orbit_step240" + }, + "orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x240", + "to": "$x241", + "next": "@celestial.orbit_step241" + }, + "orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x241", + "to": "$x242", + "next": "@celestial.orbit_step242" + }, + "orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x242", + "to": "$x243", + "next": "@celestial.orbit_step243" + }, + "orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x243", + "to": "$x244", + "next": "@celestial.orbit_step244" + }, + "orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x244", + "to": "$x245", + "next": "@celestial.orbit_step245" + }, + "orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x245", + "to": "$x246", + "next": "@celestial.orbit_step246" + }, + "orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x246", + "to": "$x247", + "next": "@celestial.orbit_step247" + }, + "orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x247", + "to": "$x248", + "next": "@celestial.orbit_step248" + }, + "orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x248", + "to": "$x249", + "next": "@celestial.orbit_step249" + }, + "orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x249", + "to": "$x250", + "next": "@celestial.orbit_step250" + }, + "orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x250", + "to": "$x251", + "next": "@celestial.orbit_step251" + }, + "orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x251", + "to": "$x252", + "next": "@celestial.orbit_step252" + }, + "orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x252", + "to": "$x253", + "next": "@celestial.orbit_step253" + }, + "orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x253", + "to": "$x254", + "next": "@celestial.orbit_step254" + }, + "orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x254", + "to": "$x255", + "next": "@celestial.orbit_step255" + }, + "orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x255", + "to": "$x256", + "next": "@celestial.orbit_step256" + }, + "orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x256", + "to": "$x257", + "next": "@celestial.orbit_step257" + }, + "orbit_step257": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x257", + "to": "$x258", + "next": "@celestial.orbit_step258" + }, + "orbit_step258": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x258", + "to": "$x259", + "next": "@celestial.orbit_step259" + }, + "orbit_step259": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x259", + "to": "$x260", + "next": "@celestial.orbit_step260" + }, + "orbit_step260": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x260", + "to": "$x261", + "next": "@celestial.orbit_step261" + }, + "orbit_step261": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x261", + "to": "$x262", + "next": "@celestial.orbit_step262" + }, + "orbit_step262": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x262", + "to": "$x263", + "next": "@celestial.orbit_step263" + }, + "orbit_step263": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x263", + "to": "$x264", + "next": "@celestial.orbit_step264" + }, + "orbit_step264": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x264", + "to": "$x265", + "next": "@celestial.orbit_step265" + }, + "orbit_step265": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x265", + "to": "$x266", + "next": "@celestial.orbit_step266" + }, + "orbit_step266": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x266", + "to": "$x267", + "next": "@celestial.orbit_step267" + }, + "orbit_step267": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x267", + "to": "$x268", + "next": "@celestial.orbit_step268" + }, + "orbit_step268": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x268", + "to": "$x269", + "next": "@celestial.orbit_step269" + }, + "orbit_step269": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x269", + "to": "$x270", + "next": "@celestial.orbit_step270" + }, + "orbit_step270": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x270", + "to": "$x271", + "next": "@celestial.orbit_step271" + }, + "orbit_step271": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x271", + "to": "$x272", + "next": "@celestial.orbit_step272" + }, + "orbit_step272": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x272", + "to": "$x273", + "next": "@celestial.orbit_step273" + }, + "orbit_step273": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x273", + "to": "$x274", + "next": "@celestial.orbit_step274" + }, + "orbit_step274": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x274", + "to": "$x275", + "next": "@celestial.orbit_step275" + }, + "orbit_step275": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x275", + "to": "$x276", + "next": "@celestial.orbit_step276" + }, + "orbit_step276": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x276", + "to": "$x277", + "next": "@celestial.orbit_step277" + }, + "orbit_step277": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x277", + "to": "$x278", + "next": "@celestial.orbit_step278" + }, + "orbit_step278": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x278", + "to": "$x279", + "next": "@celestial.orbit_step279" + }, + "orbit_step279": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x279", + "to": "$x280", + "next": "@celestial.orbit_step280" + }, + "orbit_step280": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x280", + "to": "$x281", + "next": "@celestial.orbit_step281" + }, + "orbit_step281": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x281", + "to": "$x282", + "next": "@celestial.orbit_step282" + }, + "orbit_step282": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x282", + "to": "$x283", + "next": "@celestial.orbit_step283" + }, + "orbit_step283": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x283", + "to": "$x284", + "next": "@celestial.orbit_step284" + }, + "orbit_step284": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x284", + "to": "$x285", + "next": "@celestial.orbit_step285" + }, + "orbit_step285": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x285", + "to": "$x286", + "next": "@celestial.orbit_step286" + }, + "orbit_step286": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x286", + "to": "$x287", + "next": "@celestial.orbit_step287" + }, + "orbit_step287": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x287", + "to": "$x288", + "next": "@celestial.orbit_step288" + }, + "orbit_step288": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x288", + "to": "$x289", + "next": "@celestial.orbit_step289" + }, + "orbit_step289": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x289", + "to": "$x290", + "next": "@celestial.orbit_step290" + }, + "orbit_step290": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x290", + "to": "$x291", + "next": "@celestial.orbit_step291" + }, + "orbit_step291": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x291", + "to": "$x292", + "next": "@celestial.orbit_step292" + }, + "orbit_step292": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x292", + "to": "$x293", + "next": "@celestial.orbit_step293" + }, + "orbit_step293": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x293", + "to": "$x294", + "next": "@celestial.orbit_step294" + }, + "orbit_step294": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x294", + "to": "$x295", + "next": "@celestial.orbit_step295" + }, + "orbit_step295": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x295", + "to": "$x296", + "next": "@celestial.orbit_step296" + }, + "orbit_step296": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x296", + "to": "$x297", + "next": "@celestial.orbit_step297" + }, + "orbit_step297": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x297", + "to": "$x298", + "next": "@celestial.orbit_step298" + }, + "orbit_step298": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x298", + "to": "$x299", + "next": "@celestial.orbit_step299" + }, + "orbit_step299": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x299", + "to": "$x300", + "next": "@celestial.orbit_step300" + }, + "orbit_step300": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x300", + "to": "$x301", + "next": "@celestial.orbit_step301" + }, + "orbit_step301": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x301", + "to": "$x302", + "next": "@celestial.orbit_step302" + }, + "orbit_step302": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x302", + "to": "$x303", + "next": "@celestial.orbit_step303" + }, + "orbit_step303": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x303", + "to": "$x304", + "next": "@celestial.orbit_step304" + }, + "orbit_step304": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x304", + "to": "$x305", + "next": "@celestial.orbit_step305" + }, + "orbit_step305": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x305", + "to": "$x306", + "next": "@celestial.orbit_step306" + }, + "orbit_step306": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x306", + "to": "$x307", + "next": "@celestial.orbit_step307" + }, + "orbit_step307": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x307", + "to": "$x308", + "next": "@celestial.orbit_step308" + }, + "orbit_step308": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x308", + "to": "$x309", + "next": "@celestial.orbit_step309" + }, + "orbit_step309": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x309", + "to": "$x310", + "next": "@celestial.orbit_step310" + }, + "orbit_step310": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x310", + "to": "$x311", + "next": "@celestial.orbit_step311" + }, + "orbit_step311": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x311", + "to": "$x312", + "next": "@celestial.orbit_step312" + }, + "orbit_step312": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x312", + "to": "$x313", + "next": "@celestial.orbit_step313" + }, + "orbit_step313": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x313", + "to": "$x314", + "next": "@celestial.orbit_step314" + }, + "orbit_step314": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x314", + "to": "$x315", + "next": "@celestial.orbit_step315" + }, + "orbit_step315": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x315", + "to": "$x316", + "next": "@celestial.orbit_step316" + }, + "orbit_step316": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x316", + "to": "$x317", + "next": "@celestial.orbit_step317" + }, + "orbit_step317": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x317", + "to": "$x318", + "next": "@celestial.orbit_step318" + }, + "orbit_step318": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x318", + "to": "$x319", + "next": "@celestial.orbit_step319" + }, + "orbit_step319": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x319", + "to": "$x320", + "next": "@celestial.orbit_step320" + }, + "orbit_step320": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x320", + "to": "$x321", + "next": "@celestial.orbit_step321" + }, + "orbit_step321": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x321", + "to": "$x322", + "next": "@celestial.orbit_step322" + }, + "orbit_step322": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x322", + "to": "$x323", + "next": "@celestial.orbit_step323" + }, + "orbit_step323": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x323", + "to": "$x324", + "next": "@celestial.orbit_step324" + }, + "orbit_step324": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x324", + "to": "$x325", + "next": "@celestial.orbit_step325" + }, + "orbit_step325": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x325", + "to": "$x326", + "next": "@celestial.orbit_step326" + }, + "orbit_step326": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x326", + "to": "$x327", + "next": "@celestial.orbit_step327" + }, + "orbit_step327": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x327", + "to": "$x328", + "next": "@celestial.orbit_step328" + }, + "orbit_step328": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x328", + "to": "$x329", + "next": "@celestial.orbit_step329" + }, + "orbit_step329": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x329", + "to": "$x330", + "next": "@celestial.orbit_step330" + }, + "orbit_step330": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x330", + "to": "$x331", + "next": "@celestial.orbit_step331" + }, + "orbit_step331": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x331", + "to": "$x332", + "next": "@celestial.orbit_step332" + }, + "orbit_step332": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x332", + "to": "$x333", + "next": "@celestial.orbit_step333" + }, + "orbit_step333": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x333", + "to": "$x334", + "next": "@celestial.orbit_step334" + }, + "orbit_step334": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x334", + "to": "$x335", + "next": "@celestial.orbit_step335" + }, + "orbit_step335": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x335", + "to": "$x336", + "next": "@celestial.orbit_step336" + }, + "orbit_step336": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x336", + "to": "$x337", + "next": "@celestial.orbit_step337" + }, + "orbit_step337": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x337", + "to": "$x338", + "next": "@celestial.orbit_step338" + }, + "orbit_step338": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x338", + "to": "$x339", + "next": "@celestial.orbit_step339" + }, + "orbit_step339": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x339", + "to": "$x340", + "next": "@celestial.orbit_step340" + }, + "orbit_step340": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x340", + "to": "$x341", + "next": "@celestial.orbit_step341" + }, + "orbit_step341": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x341", + "to": "$x342", + "next": "@celestial.orbit_step342" + }, + "orbit_step342": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x342", + "to": "$x343", + "next": "@celestial.orbit_step343" + }, + "orbit_step343": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x343", + "to": "$x344", + "next": "@celestial.orbit_step344" + }, + "orbit_step344": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x344", + "to": "$x345", + "next": "@celestial.orbit_step345" + }, + "orbit_step345": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x345", + "to": "$x346", + "next": "@celestial.orbit_step346" + }, + "orbit_step346": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x346", + "to": "$x347", + "next": "@celestial.orbit_step347" + }, + "orbit_step347": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x347", + "to": "$x348", + "next": "@celestial.orbit_step348" + }, + "orbit_step348": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x348", + "to": "$x349", + "next": "@celestial.orbit_step349" + }, + "orbit_step349": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x349", + "to": "$x350", + "next": "@celestial.orbit_step350" + }, + "orbit_step350": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x350", + "to": "$x351", + "next": "@celestial.orbit_step351" + }, + "orbit_step351": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x351", + "to": "$x352", + "next": "@celestial.orbit_step352" + }, + "orbit_step352": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x352", + "to": "$x353", + "next": "@celestial.orbit_step353" + }, + "orbit_step353": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x353", + "to": "$x354", + "next": "@celestial.orbit_step354" + }, + "orbit_step354": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x354", + "to": "$x355", + "next": "@celestial.orbit_step355" + }, + "orbit_step355": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x355", + "to": "$x356", + "next": "@celestial.orbit_step356" + }, + "orbit_step356": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x356", + "to": "$x357", + "next": "@celestial.orbit_step357" + }, + "orbit_step357": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x357", + "to": "$x358", + "next": "@celestial.orbit_step358" + }, + "orbit_step358": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x358", + "to": "$x359", + "next": "@celestial.orbit_step359" + }, + "orbit_step359": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x359", + "to": "$x360", + "next": "@celestial.orbit_step360" + }, + "orbit_step360": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x360", + "to": "$x361", + "next": "@celestial.orbit_step361" + }, + "orbit_step361": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x361", + "to": "$x362", + "next": "@celestial.orbit_step362" + }, + "orbit_step362": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x362", + "to": "$x363", + "next": "@celestial.orbit_step363" + }, + "orbit_step363": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x363", + "to": "$x364", + "next": "@celestial.orbit_step364" + }, + "orbit_step364": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x364", + "to": "$x365", + "next": "@celestial.orbit_step365" + }, + "orbit_step365": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x365", + "to": "$x366", + "next": "@celestial.orbit_step366" + }, + "orbit_step366": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x366", + "to": "$x367", + "next": "@celestial.orbit_step367" + }, + "orbit_step367": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x367", + "to": "$x368", + "next": "@celestial.orbit_step368" + }, + "orbit_step368": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x368", + "to": "$x369", + "next": "@celestial.orbit_step369" + }, + "orbit_step369": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x369", + "to": "$x370", + "next": "@celestial.orbit_step370" + }, + "orbit_step370": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x370", + "to": "$x371", + "next": "@celestial.orbit_step371" + }, + "orbit_step371": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x371", + "to": "$x372", + "next": "@celestial.orbit_step372" + }, + "orbit_step372": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x372", + "to": "$x373", + "next": "@celestial.orbit_step373" + }, + "orbit_step373": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x373", + "to": "$x374", + "next": "@celestial.orbit_step374" + }, + "orbit_step374": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x374", + "to": "$x375", + "next": "@celestial.orbit_step375" + }, + "orbit_step375": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x375", + "to": "$x376", + "next": "@celestial.orbit_step376" + }, + "orbit_step376": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x376", + "to": "$x377", + "next": "@celestial.orbit_step377" + }, + "orbit_step377": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x377", + "to": "$x378", + "next": "@celestial.orbit_step378" + }, + "orbit_step378": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x378", + "to": "$x379", + "next": "@celestial.orbit_step379" + }, + "orbit_step379": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x379", + "to": "$x380", + "next": "@celestial.orbit_step380" + }, + "orbit_step380": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x380", + "to": "$x381", + "next": "@celestial.orbit_step381" + }, + "orbit_step381": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x381", + "to": "$x382", + "next": "@celestial.orbit_step382" + }, + "orbit_step382": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x382", + "to": "$x383", + "next": "@celestial.orbit_step383" + }, + "orbit_step383": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x383", + "to": "$x384", + "next": "@celestial.orbit_step384" + }, + "orbit_step384": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x384", + "to": "$x385", + "next": "@celestial.orbit_step385" + }, + "orbit_step385": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x385", + "to": "$x386", + "next": "@celestial.orbit_step386" + }, + "orbit_step386": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x386", + "to": "$x387", + "next": "@celestial.orbit_step387" + }, + "orbit_step387": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x387", + "to": "$x388", + "next": "@celestial.orbit_step388" + }, + "orbit_step388": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x388", + "to": "$x389", + "next": "@celestial.orbit_step389" + }, + "orbit_step389": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x389", + "to": "$x390", + "next": "@celestial.orbit_step390" + }, + "orbit_step390": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x390", + "to": "$x391", + "next": "@celestial.orbit_step391" + }, + "orbit_step391": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x391", + "to": "$x392", + "next": "@celestial.orbit_step392" + }, + "orbit_step392": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x392", + "to": "$x393", + "next": "@celestial.orbit_step393" + }, + "orbit_step393": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x393", + "to": "$x394", + "next": "@celestial.orbit_step394" + }, + "orbit_step394": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x394", + "to": "$x395", + "next": "@celestial.orbit_step395" + }, + "orbit_step395": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x395", + "to": "$x396", + "next": "@celestial.orbit_step396" + }, + "orbit_step396": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x396", + "to": "$x397", + "next": "@celestial.orbit_step397" + }, + "orbit_step397": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x397", + "to": "$x398", + "next": "@celestial.orbit_step398" + }, + "orbit_step398": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x398", + "to": "$x399", + "next": "@celestial.orbit_step399" + }, + "orbit_step399": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x399", + "to": "$x400", + "next": "@celestial.orbit_step400" + }, + "orbit_step400": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x400", + "to": "$x401", + "next": "@celestial.orbit_step401" + }, + "orbit_step401": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x401", + "to": "$x402", + "next": "@celestial.orbit_step402" + }, + "orbit_step402": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x402", + "to": "$x403", + "next": "@celestial.orbit_step403" + }, + "orbit_step403": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x403", + "to": "$x404", + "next": "@celestial.orbit_step404" + }, + "orbit_step404": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x404", + "to": "$x405", + "next": "@celestial.orbit_step405" + }, + "orbit_step405": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x405", + "to": "$x406", + "next": "@celestial.orbit_step406" + }, + "orbit_step406": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x406", + "to": "$x407", + "next": "@celestial.orbit_step407" + }, + "orbit_step407": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x407", + "to": "$x408", + "next": "@celestial.orbit_step408" + }, + "orbit_step408": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x408", + "to": "$x409", + "next": "@celestial.orbit_step409" + }, + "orbit_step409": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x409", + "to": "$x410", + "next": "@celestial.orbit_step410" + }, + "orbit_step410": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x410", + "to": "$x411", + "next": "@celestial.orbit_step411" + }, + "orbit_step411": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x411", + "to": "$x412", + "next": "@celestial.orbit_step412" + }, + "orbit_step412": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x412", + "to": "$x413", + "next": "@celestial.orbit_step413" + }, + "orbit_step413": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x413", + "to": "$x414", + "next": "@celestial.orbit_step414" + }, + "orbit_step414": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x414", + "to": "$x415", + "next": "@celestial.orbit_step415" + }, + "orbit_step415": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x415", + "to": "$x416", + "next": "@celestial.orbit_step416" + }, + "orbit_step416": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x416", + "to": "$x417", + "next": "@celestial.orbit_step417" + }, + "orbit_step417": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x417", + "to": "$x418", + "next": "@celestial.orbit_step418" + }, + "orbit_step418": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x418", + "to": "$x419", + "next": "@celestial.orbit_step419" + }, + "orbit_step419": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x419", + "to": "$x420", + "next": "@celestial.orbit_step420" + }, + "orbit_step420": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x420", + "to": "$x421", + "next": "@celestial.orbit_step421" + }, + "orbit_step421": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x421", + "to": "$x422", + "next": "@celestial.orbit_step422" + }, + "orbit_step422": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x422", + "to": "$x423", + "next": "@celestial.orbit_step423" + }, + "orbit_step423": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x423", + "to": "$x424", + "next": "@celestial.orbit_step424" + }, + "orbit_step424": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x424", + "to": "$x425", + "next": "@celestial.orbit_step425" + }, + "orbit_step425": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x425", + "to": "$x426", + "next": "@celestial.orbit_step426" + }, + "orbit_step426": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x426", + "to": "$x427", + "next": "@celestial.orbit_step427" + }, + "orbit_step427": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x427", + "to": "$x428", + "next": "@celestial.orbit_step428" + }, + "orbit_step428": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x428", + "to": "$x429", + "next": "@celestial.orbit_step429" + }, + "orbit_step429": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x429", + "to": "$x430", + "next": "@celestial.orbit_step430" + }, + "orbit_step430": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x430", + "to": "$x431", + "next": "@celestial.orbit_step431" + }, + "orbit_step431": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x431", + "to": "$x432", + "next": "@celestial.orbit_step432" + }, + "orbit_step432": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x432", + "to": "$x433", + "next": "@celestial.orbit_step433" + }, + "orbit_step433": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x433", + "to": "$x434", + "next": "@celestial.orbit_step434" + }, + "orbit_step434": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x434", + "to": "$x435", + "next": "@celestial.orbit_step435" + }, + "orbit_step435": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x435", + "to": "$x436", + "next": "@celestial.orbit_step436" + }, + "orbit_step436": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x436", + "to": "$x437", + "next": "@celestial.orbit_step437" + }, + "orbit_step437": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x437", + "to": "$x438", + "next": "@celestial.orbit_step438" + }, + "orbit_step438": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x438", + "to": "$x439", + "next": "@celestial.orbit_step439" + }, + "orbit_step439": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x439", + "to": "$x440", + "next": "@celestial.orbit_step440" + }, + "orbit_step440": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x440", + "to": "$x441", + "next": "@celestial.orbit_step441" + }, + "orbit_step441": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x441", + "to": "$x442", + "next": "@celestial.orbit_step442" + }, + "orbit_step442": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x442", + "to": "$x443", + "next": "@celestial.orbit_step443" + }, + "orbit_step443": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x443", + "to": "$x444", + "next": "@celestial.orbit_step444" + }, + "orbit_step444": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x444", + "to": "$x445", + "next": "@celestial.orbit_step445" + }, + "orbit_step445": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x445", + "to": "$x446", + "next": "@celestial.orbit_step446" + }, + "orbit_step446": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x446", + "to": "$x447", + "next": "@celestial.orbit_step447" + }, + "orbit_step447": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x447", + "to": "$x448", + "next": "@celestial.orbit_step448" + }, + "orbit_step448": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x448", + "to": "$x449", + "next": "@celestial.orbit_step449" + }, + "orbit_step449": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x449", + "to": "$x450", + "next": "@celestial.orbit_step450" + }, + "orbit_step450": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x450", + "to": "$x451", + "next": "@celestial.orbit_step451" + }, + "orbit_step451": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x451", + "to": "$x452", + "next": "@celestial.orbit_step452" + }, + "orbit_step452": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x452", + "to": "$x453", + "next": "@celestial.orbit_step453" + }, + "orbit_step453": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x453", + "to": "$x454", + "next": "@celestial.orbit_step454" + }, + "orbit_step454": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x454", + "to": "$x455", + "next": "@celestial.orbit_step455" + }, + "orbit_step455": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x455", + "to": "$x456", + "next": "@celestial.orbit_step456" + }, + "orbit_step456": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x456", + "to": "$x457", + "next": "@celestial.orbit_step457" + }, + "orbit_step457": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x457", + "to": "$x458", + "next": "@celestial.orbit_step458" + }, + "orbit_step458": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x458", + "to": "$x459", + "next": "@celestial.orbit_step459" + }, + "orbit_step459": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x459", + "to": "$x460", + "next": "@celestial.orbit_step460" + }, + "orbit_step460": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x460", + "to": "$x461", + "next": "@celestial.orbit_step461" + }, + "orbit_step461": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x461", + "to": "$x462", + "next": "@celestial.orbit_step462" + }, + "orbit_step462": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x462", + "to": "$x463", + "next": "@celestial.orbit_step463" + }, + "orbit_step463": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x463", + "to": "$x464", + "next": "@celestial.orbit_step464" + }, + "orbit_step464": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x464", + "to": "$x465", + "next": "@celestial.orbit_step465" + }, + "orbit_step465": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x465", + "to": "$x466", + "next": "@celestial.orbit_step466" + }, + "orbit_step466": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x466", + "to": "$x467", + "next": "@celestial.orbit_step467" + }, + "orbit_step467": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x467", + "to": "$x468", + "next": "@celestial.orbit_step468" + }, + "orbit_step468": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x468", + "to": "$x469", + "next": "@celestial.orbit_step469" + }, + "orbit_step469": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x469", + "to": "$x470", + "next": "@celestial.orbit_step470" + }, + "orbit_step470": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x470", + "to": "$x471", + "next": "@celestial.orbit_step471" + }, + "orbit_step471": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x471", + "to": "$x472", + "next": "@celestial.orbit_step472" + }, + "orbit_step472": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x472", + "to": "$x473", + "next": "@celestial.orbit_step473" + }, + "orbit_step473": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x473", + "to": "$x474", + "next": "@celestial.orbit_step474" + }, + "orbit_step474": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x474", + "to": "$x475", + "next": "@celestial.orbit_step475" + }, + "orbit_step475": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x475", + "to": "$x476", + "next": "@celestial.orbit_step476" + }, + "orbit_step476": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x476", + "to": "$x477", + "next": "@celestial.orbit_step477" + }, + "orbit_step477": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x477", + "to": "$x478", + "next": "@celestial.orbit_step478" + }, + "orbit_step478": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x478", + "to": "$x479", + "next": "@celestial.orbit_step479" + }, + "orbit_step479": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x479", + "to": "$x480", + "next": "@celestial.orbit_step480" + }, + "orbit_step480": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x480", + "to": "$x481", + "next": "@celestial.orbit_step481" + }, + "orbit_step481": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x481", + "to": "$x482", + "next": "@celestial.orbit_step482" + }, + "orbit_step482": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x482", + "to": "$x483", + "next": "@celestial.orbit_step483" + }, + "orbit_step483": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x483", + "to": "$x484", + "next": "@celestial.orbit_step484" + }, + "orbit_step484": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x484", + "to": "$x485", + "next": "@celestial.orbit_step485" + }, + "orbit_step485": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x485", + "to": "$x486", + "next": "@celestial.orbit_step486" + }, + "orbit_step486": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x486", + "to": "$x487", + "next": "@celestial.orbit_step487" + }, + "orbit_step487": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x487", + "to": "$x488", + "next": "@celestial.orbit_step488" + }, + "orbit_step488": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x488", + "to": "$x489", + "next": "@celestial.orbit_step489" + }, + "orbit_step489": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x489", + "to": "$x490", + "next": "@celestial.orbit_step490" + }, + "orbit_step490": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x490", + "to": "$x491", + "next": "@celestial.orbit_step491" + }, + "orbit_step491": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x491", + "to": "$x492", + "next": "@celestial.orbit_step492" + }, + "orbit_step492": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x492", + "to": "$x493", + "next": "@celestial.orbit_step493" + }, + "orbit_step493": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x493", + "to": "$x494", + "next": "@celestial.orbit_step494" + }, + "orbit_step494": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x494", + "to": "$x495", + "next": "@celestial.orbit_step495" + }, + "orbit_step495": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x495", + "to": "$x496", + "next": "@celestial.orbit_step496" + }, + "orbit_step496": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x496", + "to": "$x497", + "next": "@celestial.orbit_step497" + }, + "orbit_step497": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x497", + "to": "$x498", + "next": "@celestial.orbit_step498" + }, + "orbit_step498": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x498", + "to": "$x499", + "next": "@celestial.orbit_step499" + }, + "orbit_step499": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x499", + "to": "$x500", + "next": "@celestial.orbit_step500" + }, + "orbit_step500": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x500", + "to": "$x501", + "next": "@celestial.orbit_step501" + }, + "orbit_step501": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x501", + "to": "$x502", + "next": "@celestial.orbit_step502" + }, + "orbit_step502": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x502", + "to": "$x503", + "next": "@celestial.orbit_step503" + }, + "orbit_step503": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x503", + "to": "$x504", + "next": "@celestial.orbit_step504" + }, + "orbit_step504": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x504", + "to": "$x505", + "next": "@celestial.orbit_step505" + }, + "orbit_step505": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x505", + "to": "$x506", + "next": "@celestial.orbit_step506" + }, + "orbit_step506": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x506", + "to": "$x507", + "next": "@celestial.orbit_step507" + }, + "orbit_step507": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x507", + "to": "$x508", + "next": "@celestial.orbit_step508" + }, + "orbit_step508": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x508", + "to": "$x509", + "next": "@celestial.orbit_step509" + }, + "orbit_step509": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x509", + "to": "$x510", + "next": "@celestial.orbit_step510" + }, + "orbit_step510": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x510", + "to": "$x511", + "next": "@celestial.orbit_step511" + }, + "orbit_step511": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x511", + "to": "$x512", + "next": "@celestial.orbit_step512" + }, + "orbit_step512": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x512", + "to": "$x513", + "next": "@celestial.orbit_step513" + }, + "orbit_step513": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x513", + "to": "$x514", + "next": "@celestial.orbit_step514" + }, + "orbit_step514": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x514", + "to": "$x515", + "next": "@celestial.orbit_step515" + }, + "orbit_step515": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x515", + "to": "$x516", + "next": "@celestial.orbit_step516" + }, + "orbit_step516": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x516", + "to": "$x517", + "next": "@celestial.orbit_step517" + }, + "orbit_step517": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x517", + "to": "$x518", + "next": "@celestial.orbit_step518" + }, + "orbit_step518": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x518", + "to": "$x519", + "next": "@celestial.orbit_step519" + }, + "orbit_step519": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x519", + "to": "$x520", + "next": "@celestial.orbit_step520" + }, + "orbit_step520": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x520", + "to": "$x521", + "next": "@celestial.orbit_step521" + }, + "orbit_step521": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x521", + "to": "$x522", + "next": "@celestial.orbit_step522" + }, + "orbit_step522": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x522", + "to": "$x523", + "next": "@celestial.orbit_step523" + }, + "orbit_step523": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x523", + "to": "$x524", + "next": "@celestial.orbit_step524" + }, + "orbit_step524": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x524", + "to": "$x525", + "next": "@celestial.orbit_step525" + }, + "orbit_step525": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x525", + "to": "$x526", + "next": "@celestial.orbit_step526" + }, + "orbit_step526": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x526", + "to": "$x527", + "next": "@celestial.orbit_step527" + }, + "orbit_step527": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x527", + "to": "$x528", + "next": "@celestial.orbit_step528" + }, + "orbit_step528": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x528", + "to": "$x529", + "next": "@celestial.orbit_step529" + }, + "orbit_step529": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x529", + "to": "$x530", + "next": "@celestial.orbit_step530" + }, + "orbit_step530": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x530", + "to": "$x531", + "next": "@celestial.orbit_step531" + }, + "orbit_step531": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x531", + "to": "$x532", + "next": "@celestial.orbit_step532" + }, + "orbit_step532": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x532", + "to": "$x533", + "next": "@celestial.orbit_step533" + }, + "orbit_step533": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x533", + "to": "$x534", + "next": "@celestial.orbit_step534" + }, + "orbit_step534": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x534", + "to": "$x535", + "next": "@celestial.orbit_step535" + }, + "orbit_step535": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x535", + "to": "$x536", + "next": "@celestial.orbit_step536" + }, + "orbit_step536": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x536", + "to": "$x537", + "next": "@celestial.orbit_step537" + }, + "orbit_step537": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x537", + "to": "$x538", + "next": "@celestial.orbit_step538" + }, + "orbit_step538": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x538", + "to": "$x539", + "next": "@celestial.orbit_step539" + }, + "orbit_step539": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x539", + "to": "$x540", + "next": "@celestial.orbit_step540" + }, + "orbit_step540": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x540", + "to": "$x541", + "next": "@celestial.orbit_step541" + }, + "orbit_step541": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x541", + "to": "$x542", + "next": "@celestial.orbit_step542" + }, + "orbit_step542": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x542", + "to": "$x543", + "next": "@celestial.orbit_step543" + }, + "orbit_step543": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x543", + "to": "$x544", + "next": "@celestial.orbit_step544" + }, + "orbit_step544": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x544", + "to": "$x545", + "next": "@celestial.orbit_step545" + }, + "orbit_step545": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x545", + "to": "$x546", + "next": "@celestial.orbit_step546" + }, + "orbit_step546": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x546", + "to": "$x547", + "next": "@celestial.orbit_step547" + }, + "orbit_step547": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x547", + "to": "$x548", + "next": "@celestial.orbit_step548" + }, + "orbit_step548": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x548", + "to": "$x549", + "next": "@celestial.orbit_step549" + }, + "orbit_step549": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x549", + "to": "$x550", + "next": "@celestial.orbit_step550" + }, + "orbit_step550": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x550", + "to": "$x551", + "next": "@celestial.orbit_step551" + }, + "orbit_step551": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x551", + "to": "$x552", + "next": "@celestial.orbit_step552" + }, + "orbit_step552": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x552", + "to": "$x553", + "next": "@celestial.orbit_step553" + }, + "orbit_step553": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x553", + "to": "$x554", + "next": "@celestial.orbit_step554" + }, + "orbit_step554": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x554", + "to": "$x555", + "next": "@celestial.orbit_step555" + }, + "orbit_step555": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x555", + "to": "$x556", + "next": "@celestial.orbit_step556" + }, + "orbit_step556": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x556", + "to": "$x557", + "next": "@celestial.orbit_step557" + }, + "orbit_step557": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x557", + "to": "$x558", + "next": "@celestial.orbit_step558" + }, + "orbit_step558": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x558", + "to": "$x559", + "next": "@celestial.orbit_step559" + }, + "orbit_step559": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x559", + "to": "$x560", + "next": "@celestial.orbit_step560" + }, + "orbit_step560": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x560", + "to": "$x561", + "next": "@celestial.orbit_step561" + }, + "orbit_step561": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x561", + "to": "$x562", + "next": "@celestial.orbit_step562" + }, + "orbit_step562": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x562", + "to": "$x563", + "next": "@celestial.orbit_step563" + }, + "orbit_step563": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x563", + "to": "$x564", + "next": "@celestial.orbit_step564" + }, + "orbit_step564": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x564", + "to": "$x565", + "next": "@celestial.orbit_step565" + }, + "orbit_step565": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x565", + "to": "$x566", + "next": "@celestial.orbit_step566" + }, + "orbit_step566": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x566", + "to": "$x567", + "next": "@celestial.orbit_step567" + }, + "orbit_step567": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x567", + "to": "$x568", + "next": "@celestial.orbit_step568" + }, + "orbit_step568": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x568", + "to": "$x569", + "next": "@celestial.orbit_step569" + }, + "orbit_step569": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x569", + "to": "$x570", + "next": "@celestial.orbit_step570" + }, + "orbit_step570": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x570", + "to": "$x571", + "next": "@celestial.orbit_step571" + }, + "orbit_step571": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x571", + "to": "$x572", + "next": "@celestial.orbit_step572" + }, + "orbit_step572": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x572", + "to": "$x573", + "next": "@celestial.orbit_step573" + }, + "orbit_step573": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x573", + "to": "$x574", + "next": "@celestial.orbit_step574" + }, + "orbit_step574": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x574", + "to": "$x575", + "next": "@celestial.orbit_step575" + }, + "orbit_step575": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x575", + "to": "$x576", + "next": "@celestial.orbit_step576" + }, + "orbit_step576": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x576", + "to": "$x577", + "next": "@celestial.orbit_step577" + }, + "orbit_step577": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x577", + "to": "$x578", + "next": "@celestial.orbit_step578" + }, + "orbit_step578": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x578", + "to": "$x579", + "next": "@celestial.orbit_step579" + }, + "orbit_step579": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x579", + "to": "$x580", + "next": "@celestial.orbit_step580" + }, + "orbit_step580": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x580", + "to": "$x581", + "next": "@celestial.orbit_step581" + }, + "orbit_step581": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x581", + "to": "$x582", + "next": "@celestial.orbit_step582" + }, + "orbit_step582": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x582", + "to": "$x583", + "next": "@celestial.orbit_step583" + }, + "orbit_step583": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x583", + "to": "$x584", + "next": "@celestial.orbit_step584" + }, + "orbit_step584": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x584", + "to": "$x585", + "next": "@celestial.orbit_step585" + }, + "orbit_step585": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x585", + "to": "$x586", + "next": "@celestial.orbit_step586" + }, + "orbit_step586": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x586", + "to": "$x587", + "next": "@celestial.orbit_step587" + }, + "orbit_step587": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x587", + "to": "$x588", + "next": "@celestial.orbit_step588" + }, + "orbit_step588": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x588", + "to": "$x589", + "next": "@celestial.orbit_step589" + }, + "orbit_step589": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x589", + "to": "$x590", + "next": "@celestial.orbit_step590" + }, + "orbit_step590": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x590", + "to": "$x591", + "next": "@celestial.orbit_step591" + }, + "orbit_step591": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x591", + "to": "$x592", + "next": "@celestial.orbit_step592" + }, + "orbit_step592": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x592", + "to": "$x593", + "next": "@celestial.orbit_step593" + }, + "orbit_step593": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x593", + "to": "$x594", + "next": "@celestial.orbit_step594" + }, + "orbit_step594": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x594", + "to": "$x595", + "next": "@celestial.orbit_step595" + }, + "orbit_step595": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x595", + "to": "$x596", + "next": "@celestial.orbit_step596" + }, + "orbit_step596": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x596", + "to": "$x597", + "next": "@celestial.orbit_step597" + }, + "orbit_step597": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x597", + "to": "$x598", + "next": "@celestial.orbit_step598" + }, + "orbit_step598": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x598", + "to": "$x599", + "next": "@celestial.orbit_step599" + }, + "orbit_step599": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x599", + "to": "$x600", + "next": "@celestial.orbit_step600" + }, + "orbit_step600": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x600", + "to": "$x601", + "next": "@celestial.orbit_step601" + }, + "orbit_step601": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x601", + "to": "$x602", + "next": "@celestial.orbit_step602" + }, + "orbit_step602": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x602", + "to": "$x603", + "next": "@celestial.orbit_step603" + }, + "orbit_step603": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x603", + "to": "$x604", + "next": "@celestial.orbit_step604" + }, + "orbit_step604": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x604", + "to": "$x605", + "next": "@celestial.orbit_step605" + }, + "orbit_step605": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x605", + "to": "$x606", + "next": "@celestial.orbit_step606" + }, + "orbit_step606": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x606", + "to": "$x607", + "next": "@celestial.orbit_step607" + }, + "orbit_step607": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x607", + "to": "$x608", + "next": "@celestial.orbit_step608" + }, + "orbit_step608": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x608", + "to": "$x609", + "next": "@celestial.orbit_step609" + }, + "orbit_step609": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x609", + "to": "$x610", + "next": "@celestial.orbit_step610" + }, + "orbit_step610": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x610", + "to": "$x611", + "next": "@celestial.orbit_step611" + }, + "orbit_step611": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x611", + "to": "$x612", + "next": "@celestial.orbit_step612" + }, + "orbit_step612": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x612", + "to": "$x613", + "next": "@celestial.orbit_step613" + }, + "orbit_step613": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x613", + "to": "$x614", + "next": "@celestial.orbit_step614" + }, + "orbit_step614": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x614", + "to": "$x615", + "next": "@celestial.orbit_step615" + }, + "orbit_step615": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x615", + "to": "$x616", + "next": "@celestial.orbit_step616" + }, + "orbit_step616": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x616", + "to": "$x617", + "next": "@celestial.orbit_step617" + }, + "orbit_step617": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x617", + "to": "$x618", + "next": "@celestial.orbit_step618" + }, + "orbit_step618": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x618", + "to": "$x619", + "next": "@celestial.orbit_step619" + }, + "orbit_step619": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x619", + "to": "$x620", + "next": "@celestial.orbit_step620" + }, + "orbit_step620": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x620", + "to": "$x621", + "next": "@celestial.orbit_step621" + }, + "orbit_step621": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x621", + "to": "$x622", + "next": "@celestial.orbit_step622" + }, + "orbit_step622": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x622", + "to": "$x623", + "next": "@celestial.orbit_step623" + }, + "orbit_step623": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x623", + "to": "$x624", + "next": "@celestial.orbit_step624" + }, + "orbit_step624": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x624", + "to": "$x625", + "next": "@celestial.orbit_step625" + }, + "orbit_step625": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x625", + "to": "$x626", + "next": "@celestial.orbit_step626" + }, + "orbit_step626": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x626", + "to": "$x627", + "next": "@celestial.orbit_step627" + }, + "orbit_step627": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x627", + "to": "$x628", + "next": "@celestial.orbit_step628" + }, + "orbit_step628": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x628", + "to": "$x629", + "next": "@celestial.orbit_step629" + }, + "orbit_step629": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x629", + "to": "$x630", + "next": "@celestial.orbit_step630" + }, + "orbit_step630": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x630", + "to": "$x631", + "next": "@celestial.orbit_step631" + }, + "orbit_step631": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x631", + "to": "$x632", + "next": "@celestial.orbit_step632" + }, + "orbit_step632": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x632", + "to": "$x633", + "next": "@celestial.orbit_step633" + }, + "orbit_step633": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x633", + "to": "$x634", + "next": "@celestial.orbit_step634" + }, + "orbit_step634": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x634", + "to": "$x635", + "next": "@celestial.orbit_step635" + }, + "orbit_step635": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x635", + "to": "$x636", + "next": "@celestial.orbit_step636" + }, + "orbit_step636": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x636", + "to": "$x637", + "next": "@celestial.orbit_step637" + }, + "orbit_step637": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x637", + "to": "$x638", + "next": "@celestial.orbit_step638" + }, + "orbit_step638": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x638", + "to": "$x639", + "next": "@celestial.orbit_step639" + }, + "orbit_step639": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x639", + "to": "$x640", + "next": "@celestial.orbit_step640" + }, + "orbit_step640": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x640", + "to": "$x641", + "next": "@celestial.orbit_step641" + }, + "orbit_step641": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x641", + "to": "$x642", + "next": "@celestial.orbit_step642" + }, + "orbit_step642": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x642", + "to": "$x643", + "next": "@celestial.orbit_step643" + }, + "orbit_step643": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x643", + "to": "$x644", + "next": "@celestial.orbit_step644" + }, + "orbit_step644": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x644", + "to": "$x645", + "next": "@celestial.orbit_step645" + }, + "orbit_step645": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x645", + "to": "$x646", + "next": "@celestial.orbit_step646" + }, + "orbit_step646": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x646", + "to": "$x647", + "next": "@celestial.orbit_step647" + }, + "orbit_step647": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x647", + "to": "$x648", + "next": "@celestial.orbit_step648" + }, + "orbit_step648": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x648", + "to": "$x649", + "next": "@celestial.orbit_step649" + }, + "orbit_step649": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x649", + "to": "$x650", + "next": "@celestial.orbit_step650" + }, + "orbit_step650": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x650", + "to": "$x651", + "next": "@celestial.orbit_step651" + }, + "orbit_step651": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x651", + "to": "$x652", + "next": "@celestial.orbit_step652" + }, + "orbit_step652": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x652", + "to": "$x653", + "next": "@celestial.orbit_step653" + }, + "orbit_step653": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x653", + "to": "$x654", + "next": "@celestial.orbit_step654" + }, + "orbit_step654": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x654", + "to": "$x655", + "next": "@celestial.orbit_step655" + }, + "orbit_step655": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x655", + "to": "$x656", + "next": "@celestial.orbit_step656" + }, + "orbit_step656": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x656", + "to": "$x657", + "next": "@celestial.orbit_step657" + }, + "orbit_step657": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x657", + "to": "$x658", + "next": "@celestial.orbit_step658" + }, + "orbit_step658": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x658", + "to": "$x659", + "next": "@celestial.orbit_step659" + }, + "orbit_step659": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x659", + "to": "$x660", + "next": "@celestial.orbit_step660" + }, + "orbit_step660": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x660", + "to": "$x661", + "next": "@celestial.orbit_step661" + }, + "orbit_step661": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x661", + "to": "$x662", + "next": "@celestial.orbit_step662" + }, + "orbit_step662": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x662", + "to": "$x663", + "next": "@celestial.orbit_step663" + }, + "orbit_step663": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x663", + "to": "$x664", + "next": "@celestial.orbit_step664" + }, + "orbit_step664": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x664", + "to": "$x665", + "next": "@celestial.orbit_step665" + }, + "orbit_step665": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x665", + "to": "$x666", + "next": "@celestial.orbit_step666" + }, + "orbit_step666": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x666", + "to": "$x667", + "next": "@celestial.orbit_step667" + }, + "orbit_step667": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x667", + "to": "$x668", + "next": "@celestial.orbit_step668" + }, + "orbit_step668": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x668", + "to": "$x669", + "next": "@celestial.orbit_step669" + }, + "orbit_step669": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x669", + "to": "$x670", + "next": "@celestial.orbit_step670" + }, + "orbit_step670": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x670", + "to": "$x671", + "next": "@celestial.orbit_step671" + }, + "orbit_step671": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x671", + "to": "$x672", + "next": "@celestial.orbit_step672" + }, + "orbit_step672": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x672", + "to": "$x673", + "next": "@celestial.orbit_step673" + }, + "orbit_step673": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x673", + "to": "$x674", + "next": "@celestial.orbit_step674" + }, + "orbit_step674": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x674", + "to": "$x675", + "next": "@celestial.orbit_step675" + }, + "orbit_step675": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x675", + "to": "$x676", + "next": "@celestial.orbit_step676" + }, + "orbit_step676": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x676", + "to": "$x677", + "next": "@celestial.orbit_step677" + }, + "orbit_step677": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x677", + "to": "$x678", + "next": "@celestial.orbit_step678" + }, + "orbit_step678": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x678", + "to": "$x679", + "next": "@celestial.orbit_step679" + }, + "orbit_step679": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x679", + "to": "$x680", + "next": "@celestial.orbit_step680" + }, + "orbit_step680": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x680", + "to": "$x681", + "next": "@celestial.orbit_step681" + }, + "orbit_step681": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x681", + "to": "$x682", + "next": "@celestial.orbit_step682" + }, + "orbit_step682": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x682", + "to": "$x683", + "next": "@celestial.orbit_step683" + }, + "orbit_step683": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x683", + "to": "$x684", + "next": "@celestial.orbit_step684" + }, + "orbit_step684": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x684", + "to": "$x685", + "next": "@celestial.orbit_step685" + }, + "orbit_step685": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x685", + "to": "$x686", + "next": "@celestial.orbit_step686" + }, + "orbit_step686": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x686", + "to": "$x687", + "next": "@celestial.orbit_step687" + }, + "orbit_step687": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x687", + "to": "$x688", + "next": "@celestial.orbit_step688" + }, + "orbit_step688": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x688", + "to": "$x689", + "next": "@celestial.orbit_step689" + }, + "orbit_step689": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x689", + "to": "$x690", + "next": "@celestial.orbit_step690" + }, + "orbit_step690": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x690", + "to": "$x691", + "next": "@celestial.orbit_step691" + }, + "orbit_step691": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x691", + "to": "$x692", + "next": "@celestial.orbit_step692" + }, + "orbit_step692": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x692", + "to": "$x693", + "next": "@celestial.orbit_step693" + }, + "orbit_step693": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x693", + "to": "$x694", + "next": "@celestial.orbit_step694" + }, + "orbit_step694": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x694", + "to": "$x695", + "next": "@celestial.orbit_step695" + }, + "orbit_step695": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x695", + "to": "$x696", + "next": "@celestial.orbit_step696" + }, + "orbit_step696": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x696", + "to": "$x697", + "next": "@celestial.orbit_step697" + }, + "orbit_step697": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x697", + "to": "$x698", + "next": "@celestial.orbit_step698" + }, + "orbit_step698": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x698", + "to": "$x699", + "next": "@celestial.orbit_step699" + }, + "orbit_step699": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x699", + "to": "$x700", + "next": "@celestial.orbit_step700" + }, + "orbit_step700": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x700", + "to": "$x701", + "next": "@celestial.orbit_step701" + }, + "orbit_step701": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x701", + "to": "$x702", + "next": "@celestial.orbit_step702" + }, + "orbit_step702": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x702", + "to": "$x703", + "next": "@celestial.orbit_step703" + }, + "orbit_step703": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x703", + "to": "$x704", + "next": "@celestial.orbit_step704" + }, + "orbit_step704": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x704", + "to": "$x705", + "next": "@celestial.orbit_step705" + }, + "orbit_step705": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x705", + "to": "$x706", + "next": "@celestial.orbit_step706" + }, + "orbit_step706": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x706", + "to": "$x707", + "next": "@celestial.orbit_step707" + }, + "orbit_step707": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x707", + "to": "$x708", + "next": "@celestial.orbit_step708" + }, + "orbit_step708": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x708", + "to": "$x709", + "next": "@celestial.orbit_step709" + }, + "orbit_step709": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x709", + "to": "$x710", + "next": "@celestial.orbit_step710" + }, + "orbit_step710": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x710", + "to": "$x711", + "next": "@celestial.orbit_step711" + }, + "orbit_step711": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x711", + "to": "$x712", + "next": "@celestial.orbit_step712" + }, + "orbit_step712": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x712", + "to": "$x713", + "next": "@celestial.orbit_step713" + }, + "orbit_step713": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x713", + "to": "$x714", + "next": "@celestial.orbit_step714" + }, + "orbit_step714": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x714", + "to": "$x715", + "next": "@celestial.orbit_step715" + }, + "orbit_step715": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x715", + "to": "$x716", + "next": "@celestial.orbit_step716" + }, + "orbit_step716": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x716", + "to": "$x717", + "next": "@celestial.orbit_step717" + }, + "orbit_step717": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x717", + "to": "$x718", + "next": "@celestial.orbit_step718" + }, + "orbit_step718": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x718", + "to": "$x719", + "next": "@celestial.orbit_step719" + }, + "orbit_step719": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x719", + "to": "$x720", + "next": "@celestial.orbit_step720" + }, + "orbit_step720": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x720", + "to": "$x721", + "next": "@celestial.orbit_step721" + }, + "orbit_step721": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x721", + "to": "$x722", + "next": "@celestial.orbit_step722" + }, + "orbit_step722": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x722", + "to": "$x723", + "next": "@celestial.orbit_step723" + }, + "orbit_step723": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x723", + "to": "$x724", + "next": "@celestial.orbit_step724" + }, + "orbit_step724": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x724", + "to": "$x725", + "next": "@celestial.orbit_step725" + }, + "orbit_step725": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x725", + "to": "$x726", + "next": "@celestial.orbit_step726" + }, + "orbit_step726": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x726", + "to": "$x727", + "next": "@celestial.orbit_step727" + }, + "orbit_step727": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x727", + "to": "$x728", + "next": "@celestial.orbit_step728" + }, + "orbit_step728": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x728", + "to": "$x729", + "next": "@celestial.orbit_step729" + }, + "orbit_step729": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x729", + "to": "$x730", + "next": "@celestial.orbit_step730" + }, + "orbit_step730": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x730", + "to": "$x731", + "next": "@celestial.orbit_step731" + }, + "orbit_step731": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x731", + "to": "$x732", + "next": "@celestial.orbit_step732" + }, + "orbit_step732": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x732", + "to": "$x733", + "next": "@celestial.orbit_step733" + }, + "orbit_step733": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x733", + "to": "$x734", + "next": "@celestial.orbit_step734" + }, + "orbit_step734": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x734", + "to": "$x735", + "next": "@celestial.orbit_step735" + }, + "orbit_step735": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x735", + "to": "$x736", + "next": "@celestial.orbit_step736" + }, + "orbit_step736": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x736", + "to": "$x737", + "next": "@celestial.orbit_step737" + }, + "orbit_step737": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x737", + "to": "$x738", + "next": "@celestial.orbit_step738" + }, + "orbit_step738": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x738", + "to": "$x739", + "next": "@celestial.orbit_step739" + }, + "orbit_step739": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x739", + "to": "$x740", + "next": "@celestial.orbit_step740" + }, + "orbit_step740": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x740", + "to": "$x741", + "next": "@celestial.orbit_step741" + }, + "orbit_step741": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x741", + "to": "$x742", + "next": "@celestial.orbit_step742" + }, + "orbit_step742": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x742", + "to": "$x743", + "next": "@celestial.orbit_step743" + }, + "orbit_step743": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x743", + "to": "$x744", + "next": "@celestial.orbit_step744" + }, + "orbit_step744": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x744", + "to": "$x745", + "next": "@celestial.orbit_step745" + }, + "orbit_step745": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x745", + "to": "$x746", + "next": "@celestial.orbit_step746" + }, + "orbit_step746": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x746", + "to": "$x747", + "next": "@celestial.orbit_step747" + }, + "orbit_step747": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x747", + "to": "$x748", + "next": "@celestial.orbit_step748" + }, + "orbit_step748": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x748", + "to": "$x749", + "next": "@celestial.orbit_step749" + }, + "orbit_step749": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x749", + "to": "$x750", + "next": "@celestial.orbit_step750" + }, + "orbit_step750": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x750", + "to": "$x751", + "next": "@celestial.orbit_step751" + }, + "orbit_step751": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x751", + "to": "$x752", + "next": "@celestial.orbit_step752" + }, + "orbit_step752": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x752", + "to": "$x753", + "next": "@celestial.orbit_step753" + }, + "orbit_step753": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x753", + "to": "$x754", + "next": "@celestial.orbit_step754" + }, + "orbit_step754": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x754", + "to": "$x755", + "next": "@celestial.orbit_step755" + }, + "orbit_step755": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x755", + "to": "$x756", + "next": "@celestial.orbit_step756" + }, + "orbit_step756": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x756", + "to": "$x757", + "next": "@celestial.orbit_step757" + }, + "orbit_step757": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x757", + "to": "$x758", + "next": "@celestial.orbit_step758" + }, + "orbit_step758": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x758", + "to": "$x759", + "next": "@celestial.orbit_step759" + }, + "orbit_step759": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x759", + "to": "$x760", + "next": "@celestial.orbit_step760" + }, + "orbit_step760": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x760", + "to": "$x761", + "next": "@celestial.orbit_step761" + }, + "orbit_step761": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x761", + "to": "$x762", + "next": "@celestial.orbit_step762" + }, + "orbit_step762": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x762", + "to": "$x763", + "next": "@celestial.orbit_step763" + }, + "orbit_step763": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x763", + "to": "$x764", + "next": "@celestial.orbit_step764" + }, + "orbit_step764": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x764", + "to": "$x765", + "next": "@celestial.orbit_step765" + }, + "orbit_step765": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x765", + "to": "$x766", + "next": "@celestial.orbit_step766" + }, + "orbit_step766": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x766", + "to": "$x767", + "next": "@celestial.orbit_step767" + }, + "orbit_step767": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x767", + "to": "$x768", + "next": "@celestial.orbit_step768" + }, + "orbit_step768": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x768", + "to": "$x769", + "next": "@celestial.orbit_step769" + }, + "orbit_step769": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x769", + "to": "$x770", + "next": "@celestial.orbit_step770" + }, + "orbit_step770": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x770", + "to": "$x771", + "next": "@celestial.orbit_step771" + }, + "orbit_step771": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x771", + "to": "$x772", + "next": "@celestial.orbit_step772" + }, + "orbit_step772": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x772", + "to": "$x773", + "next": "@celestial.orbit_step773" + }, + "orbit_step773": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x773", + "to": "$x774", + "next": "@celestial.orbit_step774" + }, + "orbit_step774": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x774", + "to": "$x775", + "next": "@celestial.orbit_step775" + }, + "orbit_step775": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x775", + "to": "$x776", + "next": "@celestial.orbit_step776" + }, + "orbit_step776": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x776", + "to": "$x777", + "next": "@celestial.orbit_step777" + }, + "orbit_step777": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x777", + "to": "$x778", + "next": "@celestial.orbit_step778" + }, + "orbit_step778": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x778", + "to": "$x779", + "next": "@celestial.orbit_step779" + }, + "orbit_step779": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x779", + "to": "$x780", + "next": "@celestial.orbit_step780" + }, + "orbit_step780": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x780", + "to": "$x781", + "next": "@celestial.orbit_step781" + }, + "orbit_step781": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x781", + "to": "$x782", + "next": "@celestial.orbit_step782" + }, + "orbit_step782": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x782", + "to": "$x783", + "next": "@celestial.orbit_step783" + }, + "orbit_step783": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x783", + "to": "$x784", + "next": "@celestial.orbit_step784" + }, + "orbit_step784": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x784", + "to": "$x785", + "next": "@celestial.orbit_step785" + }, + "orbit_step785": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x785", + "to": "$x786", + "next": "@celestial.orbit_step786" + }, + "orbit_step786": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x786", + "to": "$x787", + "next": "@celestial.orbit_step787" + }, + "orbit_step787": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x787", + "to": "$x788", + "next": "@celestial.orbit_step788" + }, + "orbit_step788": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x788", + "to": "$x789", + "next": "@celestial.orbit_step789" + }, + "orbit_step789": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x789", + "to": "$x790", + "next": "@celestial.orbit_step790" + }, + "orbit_step790": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x790", + "to": "$x791", + "next": "@celestial.orbit_step791" + }, + "orbit_step791": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x791", + "to": "$x792", + "next": "@celestial.orbit_step792" + }, + "orbit_step792": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x792", + "to": "$x793", + "next": "@celestial.orbit_step793" + }, + "orbit_step793": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x793", + "to": "$x794", + "next": "@celestial.orbit_step794" + }, + "orbit_step794": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x794", + "to": "$x795", + "next": "@celestial.orbit_step795" + }, + "orbit_step795": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x795", + "to": "$x796", + "next": "@celestial.orbit_step796" + }, + "orbit_step796": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x796", + "to": "$x797", + "next": "@celestial.orbit_step797" + }, + "orbit_step797": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x797", + "to": "$x798", + "next": "@celestial.orbit_step798" + }, + "orbit_step798": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x798", + "to": "$x799", + "next": "@celestial.orbit_step799" + }, + "orbit_step799": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x799", + "to": "$x800", + "next": "@celestial.orbit_step800" + }, + "orbit_step800": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x800", + "to": "$x801", + "next": "@celestial.orbit_step801" + }, + "orbit_step801": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x801", + "to": "$x802", + "next": "@celestial.orbit_step802" + }, + "orbit_step802": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x802", + "to": "$x803", + "next": "@celestial.orbit_step803" + }, + "orbit_step803": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x803", + "to": "$x804", + "next": "@celestial.orbit_step804" + }, + "orbit_step804": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x804", + "to": "$x805", + "next": "@celestial.orbit_step805" + }, + "orbit_step805": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x805", + "to": "$x806", + "next": "@celestial.orbit_step806" + }, + "orbit_step806": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x806", + "to": "$x807", + "next": "@celestial.orbit_step807" + }, + "orbit_step807": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x807", + "to": "$x808", + "next": "@celestial.orbit_step808" + }, + "orbit_step808": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x808", + "to": "$x809", + "next": "@celestial.orbit_step809" + }, + "orbit_step809": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x809", + "to": "$x810", + "next": "@celestial.orbit_step810" + }, + "orbit_step810": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x810", + "to": "$x811", + "next": "@celestial.orbit_step811" + }, + "orbit_step811": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x811", + "to": "$x812", + "next": "@celestial.orbit_step812" + }, + "orbit_step812": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x812", + "to": "$x813", + "next": "@celestial.orbit_step813" + }, + "orbit_step813": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x813", + "to": "$x814", + "next": "@celestial.orbit_step814" + }, + "orbit_step814": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x814", + "to": "$x815", + "next": "@celestial.orbit_step815" + }, + "orbit_step815": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x815", + "to": "$x816", + "next": "@celestial.orbit_step816" + }, + "orbit_step816": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x816", + "to": "$x817", + "next": "@celestial.orbit_step817" + }, + "orbit_step817": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x817", + "to": "$x818", + "next": "@celestial.orbit_step818" + }, + "orbit_step818": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x818", + "to": "$x819", + "next": "@celestial.orbit_step819" + }, + "orbit_step819": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x819", + "to": "$x820", + "next": "@celestial.orbit_step820" + }, + "orbit_step820": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x820", + "to": "$x821", + "next": "@celestial.orbit_step821" + }, + "orbit_step821": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x821", + "to": "$x822", + "next": "@celestial.orbit_step822" + }, + "orbit_step822": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x822", + "to": "$x823", + "next": "@celestial.orbit_step823" + }, + "orbit_step823": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x823", + "to": "$x824", + "next": "@celestial.orbit_step824" + }, + "orbit_step824": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x824", + "to": "$x825", + "next": "@celestial.orbit_step825" + }, + "orbit_step825": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x825", + "to": "$x826", + "next": "@celestial.orbit_step826" + }, + "orbit_step826": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x826", + "to": "$x827", + "next": "@celestial.orbit_step827" + }, + "orbit_step827": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x827", + "to": "$x828", + "next": "@celestial.orbit_step828" + }, + "orbit_step828": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x828", + "to": "$x829", + "next": "@celestial.orbit_step829" + }, + "orbit_step829": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x829", + "to": "$x830", + "next": "@celestial.orbit_step830" + }, + "orbit_step830": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x830", + "to": "$x831", + "next": "@celestial.orbit_step831" + }, + "orbit_step831": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x831", + "to": "$x832", + "next": "@celestial.orbit_step832" + }, + "orbit_step832": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x832", + "to": "$x833", + "next": "@celestial.orbit_step833" + }, + "orbit_step833": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x833", + "to": "$x834", + "next": "@celestial.orbit_step834" + }, + "orbit_step834": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x834", + "to": "$x835", + "next": "@celestial.orbit_step835" + }, + "orbit_step835": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x835", + "to": "$x836", + "next": "@celestial.orbit_step836" + }, + "orbit_step836": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x836", + "to": "$x837", + "next": "@celestial.orbit_step837" + }, + "orbit_step837": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x837", + "to": "$x838", + "next": "@celestial.orbit_step838" + }, + "orbit_step838": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x838", + "to": "$x839", + "next": "@celestial.orbit_step839" + }, + "orbit_step839": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x839", + "to": "$x840", + "next": "@celestial.orbit_step840" + }, + "orbit_step840": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x840", + "to": "$x841", + "next": "@celestial.orbit_step841" + }, + "orbit_step841": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x841", + "to": "$x842", + "next": "@celestial.orbit_step842" + }, + "orbit_step842": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x842", + "to": "$x843", + "next": "@celestial.orbit_step843" + }, + "orbit_step843": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x843", + "to": "$x844", + "next": "@celestial.orbit_step844" + }, + "orbit_step844": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x844", + "to": "$x845", + "next": "@celestial.orbit_step845" + }, + "orbit_step845": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x845", + "to": "$x846", + "next": "@celestial.orbit_step846" + }, + "orbit_step846": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x846", + "to": "$x847", + "next": "@celestial.orbit_step847" + }, + "orbit_step847": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x847", + "to": "$x848", + "next": "@celestial.orbit_step848" + }, + "orbit_step848": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x848", + "to": "$x849", + "next": "@celestial.orbit_step849" + }, + "orbit_step849": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x849", + "to": "$x850", + "next": "@celestial.orbit_step850" + }, + "orbit_step850": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x850", + "to": "$x851", + "next": "@celestial.orbit_step851" + }, + "orbit_step851": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x851", + "to": "$x852", + "next": "@celestial.orbit_step852" + }, + "orbit_step852": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x852", + "to": "$x853", + "next": "@celestial.orbit_step853" + }, + "orbit_step853": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x853", + "to": "$x854", + "next": "@celestial.orbit_step854" + }, + "orbit_step854": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x854", + "to": "$x855", + "next": "@celestial.orbit_step855" + }, + "orbit_step855": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x855", + "to": "$x856", + "next": "@celestial.orbit_step856" + }, + "orbit_step856": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x856", + "to": "$x857", + "next": "@celestial.orbit_step857" + }, + "orbit_step857": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x857", + "to": "$x858", + "next": "@celestial.orbit_step858" + }, + "orbit_step858": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x858", + "to": "$x859", + "next": "@celestial.orbit_step859" + }, + "orbit_step859": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x859", + "to": "$x860", + "next": "@celestial.orbit_step860" + }, + "orbit_step860": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x860", + "to": "$x861", + "next": "@celestial.orbit_step861" + }, + "orbit_step861": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x861", + "to": "$x862", + "next": "@celestial.orbit_step862" + }, + "orbit_step862": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x862", + "to": "$x863", + "next": "@celestial.orbit_step863" + }, + "orbit_step863": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x863", + "to": "$x864", + "next": "@celestial.orbit_step864" + }, + "orbit_step864": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x864", + "to": "$x865", + "next": "@celestial.orbit_step865" + }, + "orbit_step865": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x865", + "to": "$x866", + "next": "@celestial.orbit_step866" + }, + "orbit_step866": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x866", + "to": "$x867", + "next": "@celestial.orbit_step867" + }, + "orbit_step867": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x867", + "to": "$x868", + "next": "@celestial.orbit_step868" + }, + "orbit_step868": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x868", + "to": "$x869", + "next": "@celestial.orbit_step869" + }, + "orbit_step869": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x869", + "to": "$x870", + "next": "@celestial.orbit_step870" + }, + "orbit_step870": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x870", + "to": "$x871", + "next": "@celestial.orbit_step871" + }, + "orbit_step871": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x871", + "to": "$x872", + "next": "@celestial.orbit_step872" + }, + "orbit_step872": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x872", + "to": "$x873", + "next": "@celestial.orbit_step873" + }, + "orbit_step873": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x873", + "to": "$x874", + "next": "@celestial.orbit_step874" + }, + "orbit_step874": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x874", + "to": "$x875", + "next": "@celestial.orbit_step875" + }, + "orbit_step875": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x875", + "to": "$x876", + "next": "@celestial.orbit_step876" + }, + "orbit_step876": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x876", + "to": "$x877", + "next": "@celestial.orbit_step877" + }, + "orbit_step877": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x877", + "to": "$x878", + "next": "@celestial.orbit_step878" + }, + "orbit_step878": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x878", + "to": "$x879", + "next": "@celestial.orbit_step879" + }, + "orbit_step879": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x879", + "to": "$x880", + "next": "@celestial.orbit_step880" + }, + "orbit_step880": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x880", + "to": "$x881", + "next": "@celestial.orbit_step881" + }, + "orbit_step881": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x881", + "to": "$x882", + "next": "@celestial.orbit_step882" + }, + "orbit_step882": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x882", + "to": "$x883", + "next": "@celestial.orbit_step883" + }, + "orbit_step883": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x883", + "to": "$x884", + "next": "@celestial.orbit_step884" + }, + "orbit_step884": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x884", + "to": "$x885", + "next": "@celestial.orbit_step885" + }, + "orbit_step885": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x885", + "to": "$x886", + "next": "@celestial.orbit_step886" + }, + "orbit_step886": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x886", + "to": "$x887", + "next": "@celestial.orbit_step887" + }, + "orbit_step887": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x887", + "to": "$x888", + "next": "@celestial.orbit_step888" + }, + "orbit_step888": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x888", + "to": "$x889", + "next": "@celestial.orbit_step889" + }, + "orbit_step889": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x889", + "to": "$x890", + "next": "@celestial.orbit_step890" + }, + "orbit_step890": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x890", + "to": "$x891", + "next": "@celestial.orbit_step891" + }, + "orbit_step891": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x891", + "to": "$x892", + "next": "@celestial.orbit_step892" + }, + "orbit_step892": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x892", + "to": "$x893", + "next": "@celestial.orbit_step893" + }, + "orbit_step893": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x893", + "to": "$x894", + "next": "@celestial.orbit_step894" + }, + "orbit_step894": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x894", + "to": "$x895", + "next": "@celestial.orbit_step895" + }, + "orbit_step895": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x895", + "to": "$x896", + "next": "@celestial.orbit_step896" + }, + "orbit_step896": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x896", + "to": "$x897", + "next": "@celestial.orbit_step897" + }, + "orbit_step897": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x897", + "to": "$x898", + "next": "@celestial.orbit_step898" + }, + "orbit_step898": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x898", + "to": "$x899", + "next": "@celestial.orbit_step899" + }, + "orbit_step899": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x899", + "to": "$x900", + "next": "@celestial.orbit_step900" + }, + "orbit_step900": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x900", + "to": "$x901", + "next": "@celestial.orbit_step901" + }, + "orbit_step901": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x901", + "to": "$x902", + "next": "@celestial.orbit_step902" + }, + "orbit_step902": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x902", + "to": "$x903", + "next": "@celestial.orbit_step903" + }, + "orbit_step903": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x903", + "to": "$x904", + "next": "@celestial.orbit_step904" + }, + "orbit_step904": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x904", + "to": "$x905", + "next": "@celestial.orbit_step905" + }, + "orbit_step905": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x905", + "to": "$x906", + "next": "@celestial.orbit_step906" + }, + "orbit_step906": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x906", + "to": "$x907", + "next": "@celestial.orbit_step907" + }, + "orbit_step907": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x907", + "to": "$x908", + "next": "@celestial.orbit_step908" + }, + "orbit_step908": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x908", + "to": "$x909", + "next": "@celestial.orbit_step909" + }, + "orbit_step909": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x909", + "to": "$x910", + "next": "@celestial.orbit_step910" + }, + "orbit_step910": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x910", + "to": "$x911", + "next": "@celestial.orbit_step911" + }, + "orbit_step911": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x911", + "to": "$x912", + "next": "@celestial.orbit_step912" + }, + "orbit_step912": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x912", + "to": "$x913", + "next": "@celestial.orbit_step913" + }, + "orbit_step913": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x913", + "to": "$x914", + "next": "@celestial.orbit_step914" + }, + "orbit_step914": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x914", + "to": "$x915", + "next": "@celestial.orbit_step915" + }, + "orbit_step915": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x915", + "to": "$x916", + "next": "@celestial.orbit_step916" + }, + "orbit_step916": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x916", + "to": "$x917", + "next": "@celestial.orbit_step917" + }, + "orbit_step917": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x917", + "to": "$x918", + "next": "@celestial.orbit_step918" + }, + "orbit_step918": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x918", + "to": "$x919", + "next": "@celestial.orbit_step919" + }, + "orbit_step919": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x919", + "to": "$x920", + "next": "@celestial.orbit_step920" + }, + "orbit_step920": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x920", + "to": "$x921", + "next": "@celestial.orbit_step921" + }, + "orbit_step921": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x921", + "to": "$x922", + "next": "@celestial.orbit_step922" + }, + "orbit_step922": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x922", + "to": "$x923", + "next": "@celestial.orbit_step923" + }, + "orbit_step923": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x923", + "to": "$x924", + "next": "@celestial.orbit_step924" + }, + "orbit_step924": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x924", + "to": "$x925", + "next": "@celestial.orbit_step925" + }, + "orbit_step925": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x925", + "to": "$x926", + "next": "@celestial.orbit_step926" + }, + "orbit_step926": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x926", + "to": "$x927", + "next": "@celestial.orbit_step927" + }, + "orbit_step927": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x927", + "to": "$x928", + "next": "@celestial.orbit_step928" + }, + "orbit_step928": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x928", + "to": "$x929", + "next": "@celestial.orbit_step929" + }, + "orbit_step929": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x929", + "to": "$x930", + "next": "@celestial.orbit_step930" + }, + "orbit_step930": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x930", + "to": "$x931", + "next": "@celestial.orbit_step931" + }, + "orbit_step931": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x931", + "to": "$x932", + "next": "@celestial.orbit_step932" + }, + "orbit_step932": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x932", + "to": "$x933", + "next": "@celestial.orbit_step933" + }, + "orbit_step933": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x933", + "to": "$x934", + "next": "@celestial.orbit_step934" + }, + "orbit_step934": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x934", + "to": "$x935", + "next": "@celestial.orbit_step935" + }, + "orbit_step935": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x935", + "to": "$x936", + "next": "@celestial.orbit_step936" + }, + "orbit_step936": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x936", + "to": "$x937", + "next": "@celestial.orbit_step937" + }, + "orbit_step937": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x937", + "to": "$x938", + "next": "@celestial.orbit_step938" + }, + "orbit_step938": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x938", + "to": "$x939", + "next": "@celestial.orbit_step939" + }, + "orbit_step939": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x939", + "to": "$x940", + "next": "@celestial.orbit_step940" + }, + "orbit_step940": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x940", + "to": "$x941", + "next": "@celestial.orbit_step941" + }, + "orbit_step941": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x941", + "to": "$x942", + "next": "@celestial.orbit_step942" + }, + "orbit_step942": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x942", + "to": "$x943", + "next": "@celestial.orbit_step943" + }, + "orbit_step943": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x943", + "to": "$x944", + "next": "@celestial.orbit_step944" + }, + "orbit_step944": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x944", + "to": "$x945", + "next": "@celestial.orbit_step945" + }, + "orbit_step945": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x945", + "to": "$x946", + "next": "@celestial.orbit_step946" + }, + "orbit_step946": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x946", + "to": "$x947", + "next": "@celestial.orbit_step947" + }, + "orbit_step947": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x947", + "to": "$x948", + "next": "@celestial.orbit_step948" + }, + "orbit_step948": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x948", + "to": "$x949", + "next": "@celestial.orbit_step949" + }, + "orbit_step949": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x949", + "to": "$x950", + "next": "@celestial.orbit_step950" + }, + "orbit_step950": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x950", + "to": "$x951", + "next": "@celestial.orbit_step951" + }, + "orbit_step951": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x951", + "to": "$x952", + "next": "@celestial.orbit_step952" + }, + "orbit_step952": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x952", + "to": "$x953", + "next": "@celestial.orbit_step953" + }, + "orbit_step953": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x953", + "to": "$x954", + "next": "@celestial.orbit_step954" + }, + "orbit_step954": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x954", + "to": "$x955", + "next": "@celestial.orbit_step955" + }, + "orbit_step955": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x955", + "to": "$x956", + "next": "@celestial.orbit_step956" + }, + "orbit_step956": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x956", + "to": "$x957", + "next": "@celestial.orbit_step957" + }, + "orbit_step957": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x957", + "to": "$x958", + "next": "@celestial.orbit_step958" + }, + "orbit_step958": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x958", + "to": "$x959", + "next": "@celestial.orbit_step959" + }, + "orbit_step959": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x959", + "to": "$x960", + "next": "@celestial.orbit_step960" + }, + "orbit_step960": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x960", + "to": "$x961", + "next": "@celestial.orbit_step961" + }, + "orbit_step961": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x961", + "to": "$x962", + "next": "@celestial.orbit_step962" + }, + "orbit_step962": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x962", + "to": "$x963", + "next": "@celestial.orbit_step963" + }, + "orbit_step963": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x963", + "to": "$x964", + "next": "@celestial.orbit_step964" + }, + "orbit_step964": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x964", + "to": "$x965", + "next": "@celestial.orbit_step965" + }, + "orbit_step965": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x965", + "to": "$x966", + "next": "@celestial.orbit_step966" + }, + "orbit_step966": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x966", + "to": "$x967", + "next": "@celestial.orbit_step967" + }, + "orbit_step967": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x967", + "to": "$x968", + "next": "@celestial.orbit_step968" + }, + "orbit_step968": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x968", + "to": "$x969", + "next": "@celestial.orbit_step969" + }, + "orbit_step969": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x969", + "to": "$x970", + "next": "@celestial.orbit_step970" + }, + "orbit_step970": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x970", + "to": "$x971", + "next": "@celestial.orbit_step971" + }, + "orbit_step971": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x971", + "to": "$x972", + "next": "@celestial.orbit_step972" + }, + "orbit_step972": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x972", + "to": "$x973", + "next": "@celestial.orbit_step973" + }, + "orbit_step973": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x973", + "to": "$x974", + "next": "@celestial.orbit_step974" + }, + "orbit_step974": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x974", + "to": "$x975", + "next": "@celestial.orbit_step975" + }, + "orbit_step975": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x975", + "to": "$x976", + "next": "@celestial.orbit_step976" + }, + "orbit_step976": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x976", + "to": "$x977", + "next": "@celestial.orbit_step977" + }, + "orbit_step977": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x977", + "to": "$x978", + "next": "@celestial.orbit_step978" + }, + "orbit_step978": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x978", + "to": "$x979", + "next": "@celestial.orbit_step979" + }, + "orbit_step979": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x979", + "to": "$x980", + "next": "@celestial.orbit_step980" + }, + "orbit_step980": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x980", + "to": "$x981", + "next": "@celestial.orbit_step981" + }, + "orbit_step981": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x981", + "to": "$x982", + "next": "@celestial.orbit_step982" + }, + "orbit_step982": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x982", + "to": "$x983", + "next": "@celestial.orbit_step983" + }, + "orbit_step983": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x983", + "to": "$x984", + "next": "@celestial.orbit_step984" + }, + "orbit_step984": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x984", + "to": "$x985", + "next": "@celestial.orbit_step985" + }, + "orbit_step985": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x985", + "to": "$x986", + "next": "@celestial.orbit_step986" + }, + "orbit_step986": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x986", + "to": "$x987", + "next": "@celestial.orbit_step987" + }, + "orbit_step987": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x987", + "to": "$x988", + "next": "@celestial.orbit_step988" + }, + "orbit_step988": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x988", + "to": "$x989", + "next": "@celestial.orbit_step989" + }, + "orbit_step989": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x989", + "to": "$x990", + "next": "@celestial.orbit_step990" + }, + "orbit_step990": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x990", + "to": "$x991", + "next": "@celestial.orbit_step991" + }, + "orbit_step991": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x991", + "to": "$x992", + "next": "@celestial.orbit_step992" + }, + "orbit_step992": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x992", + "to": "$x993", + "next": "@celestial.orbit_step993" + }, + "orbit_step993": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x993", + "to": "$x994", + "next": "@celestial.orbit_step994" + }, + "orbit_step994": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x994", + "to": "$x995", + "next": "@celestial.orbit_step995" + }, + "orbit_step995": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x995", + "to": "$x996", + "next": "@celestial.orbit_step996" + }, + "orbit_step996": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x996", + "to": "$x997", + "next": "@celestial.orbit_step997" + }, + "orbit_step997": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x997", + "to": "$x998", + "next": "@celestial.orbit_step998" + }, + "orbit_step998": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x998", + "to": "$x999", + "next": "@celestial.orbit_step999" + }, + "orbit_step999": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x999", + "to": "$x1000", + "next": "@celestial.orbit_step1000" + }, + "orbit_step1000": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1000", + "to": "$x1001", + "next": "@celestial.orbit_step1001" + }, + "orbit_step1001": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1001", + "to": "$x1002", + "next": "@celestial.orbit_step1002" + }, + "orbit_step1002": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1002", + "to": "$x1003", + "next": "@celestial.orbit_step1003" + }, + "orbit_step1003": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1003", + "to": "$x1004", + "next": "@celestial.orbit_step1004" + }, + "orbit_step1004": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1004", + "to": "$x1005", + "next": "@celestial.orbit_step1005" + }, + "orbit_step1005": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1005", + "to": "$x1006", + "next": "@celestial.orbit_step1006" + }, + "orbit_step1006": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1006", + "to": "$x1007", + "next": "@celestial.orbit_step1007" + }, + "orbit_step1007": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1007", + "to": "$x1008", + "next": "@celestial.orbit_step1008" + }, + "orbit_step1008": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1008", + "to": "$x1009", + "next": "@celestial.orbit_step1009" + }, + "orbit_step1009": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1009", + "to": "$x1010", + "next": "@celestial.orbit_step1010" + }, + "orbit_step1010": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1010", + "to": "$x1011", + "next": "@celestial.orbit_step1011" + }, + "orbit_step1011": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1011", + "to": "$x1012", + "next": "@celestial.orbit_step1012" + }, + "orbit_step1012": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1012", + "to": "$x1013", + "next": "@celestial.orbit_step1013" + }, + "orbit_step1013": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1013", + "to": "$x1014", + "next": "@celestial.orbit_step1014" + }, + "orbit_step1014": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1014", + "to": "$x1015", + "next": "@celestial.orbit_step1015" + }, + "orbit_step1015": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1015", + "to": "$x1016", + "next": "@celestial.orbit_step1016" + }, + "orbit_step1016": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1016", + "to": "$x1017", + "next": "@celestial.orbit_step1017" + }, + "orbit_step1017": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1017", + "to": "$x1018", + "next": "@celestial.orbit_step1018" + }, + "orbit_step1018": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1018", + "to": "$x1019", + "next": "@celestial.orbit_step1019" + }, + "orbit_step1019": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1019", + "to": "$x1020", + "next": "@celestial.orbit_step1020" + }, + "orbit_step1020": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1020", + "to": "$x1021", + "next": "@celestial.orbit_step1021" + }, + "orbit_step1021": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1021", + "to": "$x1022", + "next": "@celestial.orbit_step1022" + }, + "orbit_step1022": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1022", + "to": "$x1023", + "next": "@celestial.orbit_step1023" + }, + "orbit_step1023": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1023", + "to": "$x1024", + "next": "@celestial.orbit_step1024" + }, + "orbit_step1024": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$x1024", + "to": "$x1", + "next": "@celestial.orbit_step1" + }, + "mercury_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer1", + "to": "$mer2", + "next": "@celestial.mercury_orbit_step2" + }, + "mercury_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer2", + "to": "$mer3", + "next": "@celestial.mercury_orbit_step3" + }, + "mercury_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer3", + "to": "$mer4", + "next": "@celestial.mercury_orbit_step4" + }, + "mercury_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer4", + "to": "$mer5", + "next": "@celestial.mercury_orbit_step5" + }, + "mercury_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer5", + "to": "$mer6", + "next": "@celestial.mercury_orbit_step6" + }, + "mercury_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer6", + "to": "$mer7", + "next": "@celestial.mercury_orbit_step7" + }, + "mercury_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer7", + "to": "$mer8", + "next": "@celestial.mercury_orbit_step8" + }, + "mercury_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer8", + "to": "$mer9", + "next": "@celestial.mercury_orbit_step9" + }, + "mercury_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer9", + "to": "$mer10", + "next": "@celestial.mercury_orbit_step10" + }, + "mercury_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer10", + "to": "$mer11", + "next": "@celestial.mercury_orbit_step11" + }, + "mercury_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer11", + "to": "$mer12", + "next": "@celestial.mercury_orbit_step12" + }, + "mercury_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer12", + "to": "$mer13", + "next": "@celestial.mercury_orbit_step13" + }, + "mercury_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer13", + "to": "$mer14", + "next": "@celestial.mercury_orbit_step14" + }, + "mercury_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer14", + "to": "$mer15", + "next": "@celestial.mercury_orbit_step15" + }, + "mercury_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer15", + "to": "$mer16", + "next": "@celestial.mercury_orbit_step16" + }, + "mercury_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer16", + "to": "$mer17", + "next": "@celestial.mercury_orbit_step17" + }, + "mercury_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer17", + "to": "$mer18", + "next": "@celestial.mercury_orbit_step18" + }, + "mercury_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer18", + "to": "$mer19", + "next": "@celestial.mercury_orbit_step19" + }, + "mercury_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer19", + "to": "$mer20", + "next": "@celestial.mercury_orbit_step20" + }, + "mercury_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer20", + "to": "$mer21", + "next": "@celestial.mercury_orbit_step21" + }, + "mercury_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer21", + "to": "$mer22", + "next": "@celestial.mercury_orbit_step22" + }, + "mercury_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer22", + "to": "$mer23", + "next": "@celestial.mercury_orbit_step23" + }, + "mercury_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer23", + "to": "$mer24", + "next": "@celestial.mercury_orbit_step24" + }, + "mercury_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer24", + "to": "$mer25", + "next": "@celestial.mercury_orbit_step25" + }, + "mercury_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer25", + "to": "$mer26", + "next": "@celestial.mercury_orbit_step26" + }, + "mercury_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer26", + "to": "$mer27", + "next": "@celestial.mercury_orbit_step27" + }, + "mercury_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer27", + "to": "$mer28", + "next": "@celestial.mercury_orbit_step28" + }, + "mercury_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer28", + "to": "$mer29", + "next": "@celestial.mercury_orbit_step29" + }, + "mercury_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer29", + "to": "$mer30", + "next": "@celestial.mercury_orbit_step30" + }, + "mercury_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer30", + "to": "$mer31", + "next": "@celestial.mercury_orbit_step31" + }, + "mercury_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer31", + "to": "$mer32", + "next": "@celestial.mercury_orbit_step32" + }, + "mercury_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer32", + "to": "$mer33", + "next": "@celestial.mercury_orbit_step33" + }, + "mercury_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer33", + "to": "$mer34", + "next": "@celestial.mercury_orbit_step34" + }, + "mercury_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer34", + "to": "$mer35", + "next": "@celestial.mercury_orbit_step35" + }, + "mercury_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer35", + "to": "$mer36", + "next": "@celestial.mercury_orbit_step36" + }, + "mercury_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer36", + "to": "$mer37", + "next": "@celestial.mercury_orbit_step37" + }, + "mercury_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer37", + "to": "$mer38", + "next": "@celestial.mercury_orbit_step38" + }, + "mercury_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer38", + "to": "$mer39", + "next": "@celestial.mercury_orbit_step39" + }, + "mercury_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer39", + "to": "$mer40", + "next": "@celestial.mercury_orbit_step40" + }, + "mercury_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer40", + "to": "$mer41", + "next": "@celestial.mercury_orbit_step41" + }, + "mercury_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer41", + "to": "$mer42", + "next": "@celestial.mercury_orbit_step42" + }, + "mercury_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer42", + "to": "$mer43", + "next": "@celestial.mercury_orbit_step43" + }, + "mercury_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer43", + "to": "$mer44", + "next": "@celestial.mercury_orbit_step44" + }, + "mercury_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer44", + "to": "$mer45", + "next": "@celestial.mercury_orbit_step45" + }, + "mercury_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer45", + "to": "$mer46", + "next": "@celestial.mercury_orbit_step46" + }, + "mercury_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer46", + "to": "$mer47", + "next": "@celestial.mercury_orbit_step47" + }, + "mercury_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer47", + "to": "$mer48", + "next": "@celestial.mercury_orbit_step48" + }, + "mercury_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer48", + "to": "$mer49", + "next": "@celestial.mercury_orbit_step49" + }, + "mercury_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer49", + "to": "$mer50", + "next": "@celestial.mercury_orbit_step50" + }, + "mercury_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer50", + "to": "$mer51", + "next": "@celestial.mercury_orbit_step51" + }, + "mercury_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer51", + "to": "$mer52", + "next": "@celestial.mercury_orbit_step52" + }, + "mercury_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer52", + "to": "$mer53", + "next": "@celestial.mercury_orbit_step53" + }, + "mercury_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer53", + "to": "$mer54", + "next": "@celestial.mercury_orbit_step54" + }, + "mercury_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer54", + "to": "$mer55", + "next": "@celestial.mercury_orbit_step55" + }, + "mercury_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer55", + "to": "$mer56", + "next": "@celestial.mercury_orbit_step56" + }, + "mercury_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer56", + "to": "$mer57", + "next": "@celestial.mercury_orbit_step57" + }, + "mercury_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer57", + "to": "$mer58", + "next": "@celestial.mercury_orbit_step58" + }, + "mercury_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer58", + "to": "$mer59", + "next": "@celestial.mercury_orbit_step59" + }, + "mercury_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer59", + "to": "$mer60", + "next": "@celestial.mercury_orbit_step60" + }, + "mercury_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer60", + "to": "$mer61", + "next": "@celestial.mercury_orbit_step61" + }, + "mercury_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer61", + "to": "$mer62", + "next": "@celestial.mercury_orbit_step62" + }, + "mercury_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer62", + "to": "$mer63", + "next": "@celestial.mercury_orbit_step63" + }, + "mercury_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer63", + "to": "$mer64", + "next": "@celestial.mercury_orbit_step64" + }, + "mercury_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer64", + "to": "$mer65", + "next": "@celestial.mercury_orbit_step65" + }, + "mercury_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer65", + "to": "$mer66", + "next": "@celestial.mercury_orbit_step66" + }, + "mercury_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer66", + "to": "$mer67", + "next": "@celestial.mercury_orbit_step67" + }, + "mercury_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer67", + "to": "$mer68", + "next": "@celestial.mercury_orbit_step68" + }, + "mercury_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer68", + "to": "$mer69", + "next": "@celestial.mercury_orbit_step69" + }, + "mercury_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer69", + "to": "$mer70", + "next": "@celestial.mercury_orbit_step70" + }, + "mercury_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer70", + "to": "$mer71", + "next": "@celestial.mercury_orbit_step71" + }, + "mercury_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer71", + "to": "$mer72", + "next": "@celestial.mercury_orbit_step72" + }, + "mercury_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer72", + "to": "$mer73", + "next": "@celestial.mercury_orbit_step73" + }, + "mercury_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer73", + "to": "$mer74", + "next": "@celestial.mercury_orbit_step74" + }, + "mercury_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer74", + "to": "$mer75", + "next": "@celestial.mercury_orbit_step75" + }, + "mercury_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer75", + "to": "$mer76", + "next": "@celestial.mercury_orbit_step76" + }, + "mercury_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer76", + "to": "$mer77", + "next": "@celestial.mercury_orbit_step77" + }, + "mercury_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer77", + "to": "$mer78", + "next": "@celestial.mercury_orbit_step78" + }, + "mercury_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer78", + "to": "$mer79", + "next": "@celestial.mercury_orbit_step79" + }, + "mercury_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer79", + "to": "$mer80", + "next": "@celestial.mercury_orbit_step80" + }, + "mercury_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer80", + "to": "$mer81", + "next": "@celestial.mercury_orbit_step81" + }, + "mercury_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer81", + "to": "$mer82", + "next": "@celestial.mercury_orbit_step82" + }, + "mercury_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer82", + "to": "$mer83", + "next": "@celestial.mercury_orbit_step83" + }, + "mercury_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer83", + "to": "$mer84", + "next": "@celestial.mercury_orbit_step84" + }, + "mercury_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer84", + "to": "$mer85", + "next": "@celestial.mercury_orbit_step85" + }, + "mercury_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer85", + "to": "$mer86", + "next": "@celestial.mercury_orbit_step86" + }, + "mercury_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer86", + "to": "$mer87", + "next": "@celestial.mercury_orbit_step87" + }, + "mercury_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer87", + "to": "$mer88", + "next": "@celestial.mercury_orbit_step88" + }, + "mercury_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer88", + "to": "$mer89", + "next": "@celestial.mercury_orbit_step89" + }, + "mercury_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer89", + "to": "$mer90", + "next": "@celestial.mercury_orbit_step90" + }, + "mercury_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer90", + "to": "$mer91", + "next": "@celestial.mercury_orbit_step91" + }, + "mercury_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer91", + "to": "$mer92", + "next": "@celestial.mercury_orbit_step92" + }, + "mercury_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer92", + "to": "$mer93", + "next": "@celestial.mercury_orbit_step93" + }, + "mercury_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer93", + "to": "$mer94", + "next": "@celestial.mercury_orbit_step94" + }, + "mercury_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer94", + "to": "$mer95", + "next": "@celestial.mercury_orbit_step95" + }, + "mercury_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer95", + "to": "$mer96", + "next": "@celestial.mercury_orbit_step96" + }, + "mercury_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer96", + "to": "$mer97", + "next": "@celestial.mercury_orbit_step97" + }, + "mercury_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer97", + "to": "$mer98", + "next": "@celestial.mercury_orbit_step98" + }, + "mercury_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer98", + "to": "$mer99", + "next": "@celestial.mercury_orbit_step99" + }, + "mercury_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer99", + "to": "$mer100", + "next": "@celestial.mercury_orbit_step100" + }, + "mercury_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer100", + "to": "$mer101", + "next": "@celestial.mercury_orbit_step101" + }, + "mercury_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer101", + "to": "$mer102", + "next": "@celestial.mercury_orbit_step102" + }, + "mercury_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer102", + "to": "$mer103", + "next": "@celestial.mercury_orbit_step103" + }, + "mercury_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer103", + "to": "$mer104", + "next": "@celestial.mercury_orbit_step104" + }, + "mercury_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer104", + "to": "$mer105", + "next": "@celestial.mercury_orbit_step105" + }, + "mercury_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer105", + "to": "$mer106", + "next": "@celestial.mercury_orbit_step106" + }, + "mercury_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer106", + "to": "$mer107", + "next": "@celestial.mercury_orbit_step107" + }, + "mercury_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer107", + "to": "$mer108", + "next": "@celestial.mercury_orbit_step108" + }, + "mercury_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer108", + "to": "$mer109", + "next": "@celestial.mercury_orbit_step109" + }, + "mercury_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer109", + "to": "$mer110", + "next": "@celestial.mercury_orbit_step110" + }, + "mercury_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer110", + "to": "$mer111", + "next": "@celestial.mercury_orbit_step111" + }, + "mercury_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer111", + "to": "$mer112", + "next": "@celestial.mercury_orbit_step112" + }, + "mercury_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer112", + "to": "$mer113", + "next": "@celestial.mercury_orbit_step113" + }, + "mercury_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer113", + "to": "$mer114", + "next": "@celestial.mercury_orbit_step114" + }, + "mercury_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer114", + "to": "$mer115", + "next": "@celestial.mercury_orbit_step115" + }, + "mercury_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer115", + "to": "$mer116", + "next": "@celestial.mercury_orbit_step116" + }, + "mercury_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer116", + "to": "$mer117", + "next": "@celestial.mercury_orbit_step117" + }, + "mercury_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer117", + "to": "$mer118", + "next": "@celestial.mercury_orbit_step118" + }, + "mercury_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer118", + "to": "$mer119", + "next": "@celestial.mercury_orbit_step119" + }, + "mercury_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer119", + "to": "$mer120", + "next": "@celestial.mercury_orbit_step120" + }, + "mercury_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer120", + "to": "$mer121", + "next": "@celestial.mercury_orbit_step121" + }, + "mercury_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer121", + "to": "$mer122", + "next": "@celestial.mercury_orbit_step122" + }, + "mercury_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer122", + "to": "$mer123", + "next": "@celestial.mercury_orbit_step123" + }, + "mercury_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer123", + "to": "$mer124", + "next": "@celestial.mercury_orbit_step124" + }, + "mercury_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer124", + "to": "$mer125", + "next": "@celestial.mercury_orbit_step125" + }, + "mercury_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer125", + "to": "$mer126", + "next": "@celestial.mercury_orbit_step126" + }, + "mercury_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer126", + "to": "$mer127", + "next": "@celestial.mercury_orbit_step127" + }, + "mercury_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer127", + "to": "$mer128", + "next": "@celestial.mercury_orbit_step128" + }, + "mercury_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer128", + "to": "$mer129", + "next": "@celestial.mercury_orbit_step129" + }, + "mercury_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer129", + "to": "$mer130", + "next": "@celestial.mercury_orbit_step130" + }, + "mercury_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer130", + "to": "$mer131", + "next": "@celestial.mercury_orbit_step131" + }, + "mercury_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer131", + "to": "$mer132", + "next": "@celestial.mercury_orbit_step132" + }, + "mercury_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer132", + "to": "$mer133", + "next": "@celestial.mercury_orbit_step133" + }, + "mercury_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer133", + "to": "$mer134", + "next": "@celestial.mercury_orbit_step134" + }, + "mercury_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer134", + "to": "$mer135", + "next": "@celestial.mercury_orbit_step135" + }, + "mercury_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer135", + "to": "$mer136", + "next": "@celestial.mercury_orbit_step136" + }, + "mercury_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer136", + "to": "$mer137", + "next": "@celestial.mercury_orbit_step137" + }, + "mercury_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer137", + "to": "$mer138", + "next": "@celestial.mercury_orbit_step138" + }, + "mercury_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer138", + "to": "$mer139", + "next": "@celestial.mercury_orbit_step139" + }, + "mercury_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer139", + "to": "$mer140", + "next": "@celestial.mercury_orbit_step140" + }, + "mercury_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer140", + "to": "$mer141", + "next": "@celestial.mercury_orbit_step141" + }, + "mercury_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer141", + "to": "$mer142", + "next": "@celestial.mercury_orbit_step142" + }, + "mercury_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer142", + "to": "$mer143", + "next": "@celestial.mercury_orbit_step143" + }, + "mercury_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer143", + "to": "$mer144", + "next": "@celestial.mercury_orbit_step144" + }, + "mercury_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer144", + "to": "$mer145", + "next": "@celestial.mercury_orbit_step145" + }, + "mercury_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer145", + "to": "$mer146", + "next": "@celestial.mercury_orbit_step146" + }, + "mercury_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer146", + "to": "$mer147", + "next": "@celestial.mercury_orbit_step147" + }, + "mercury_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer147", + "to": "$mer148", + "next": "@celestial.mercury_orbit_step148" + }, + "mercury_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer148", + "to": "$mer149", + "next": "@celestial.mercury_orbit_step149" + }, + "mercury_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer149", + "to": "$mer150", + "next": "@celestial.mercury_orbit_step150" + }, + "mercury_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer150", + "to": "$mer151", + "next": "@celestial.mercury_orbit_step151" + }, + "mercury_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer151", + "to": "$mer152", + "next": "@celestial.mercury_orbit_step152" + }, + "mercury_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer152", + "to": "$mer153", + "next": "@celestial.mercury_orbit_step153" + }, + "mercury_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer153", + "to": "$mer154", + "next": "@celestial.mercury_orbit_step154" + }, + "mercury_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer154", + "to": "$mer155", + "next": "@celestial.mercury_orbit_step155" + }, + "mercury_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer155", + "to": "$mer156", + "next": "@celestial.mercury_orbit_step156" + }, + "mercury_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer156", + "to": "$mer157", + "next": "@celestial.mercury_orbit_step157" + }, + "mercury_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer157", + "to": "$mer158", + "next": "@celestial.mercury_orbit_step158" + }, + "mercury_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer158", + "to": "$mer159", + "next": "@celestial.mercury_orbit_step159" + }, + "mercury_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer159", + "to": "$mer160", + "next": "@celestial.mercury_orbit_step160" + }, + "mercury_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer160", + "to": "$mer161", + "next": "@celestial.mercury_orbit_step161" + }, + "mercury_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer161", + "to": "$mer162", + "next": "@celestial.mercury_orbit_step162" + }, + "mercury_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer162", + "to": "$mer163", + "next": "@celestial.mercury_orbit_step163" + }, + "mercury_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer163", + "to": "$mer164", + "next": "@celestial.mercury_orbit_step164" + }, + "mercury_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer164", + "to": "$mer165", + "next": "@celestial.mercury_orbit_step165" + }, + "mercury_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer165", + "to": "$mer166", + "next": "@celestial.mercury_orbit_step166" + }, + "mercury_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer166", + "to": "$mer167", + "next": "@celestial.mercury_orbit_step167" + }, + "mercury_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer167", + "to": "$mer168", + "next": "@celestial.mercury_orbit_step168" + }, + "mercury_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer168", + "to": "$mer169", + "next": "@celestial.mercury_orbit_step169" + }, + "mercury_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer169", + "to": "$mer170", + "next": "@celestial.mercury_orbit_step170" + }, + "mercury_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer170", + "to": "$mer171", + "next": "@celestial.mercury_orbit_step171" + }, + "mercury_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer171", + "to": "$mer172", + "next": "@celestial.mercury_orbit_step172" + }, + "mercury_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer172", + "to": "$mer173", + "next": "@celestial.mercury_orbit_step173" + }, + "mercury_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer173", + "to": "$mer174", + "next": "@celestial.mercury_orbit_step174" + }, + "mercury_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer174", + "to": "$mer175", + "next": "@celestial.mercury_orbit_step175" + }, + "mercury_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer175", + "to": "$mer176", + "next": "@celestial.mercury_orbit_step176" + }, + "mercury_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer176", + "to": "$mer177", + "next": "@celestial.mercury_orbit_step177" + }, + "mercury_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer177", + "to": "$mer178", + "next": "@celestial.mercury_orbit_step178" + }, + "mercury_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer178", + "to": "$mer179", + "next": "@celestial.mercury_orbit_step179" + }, + "mercury_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer179", + "to": "$mer180", + "next": "@celestial.mercury_orbit_step180" + }, + "mercury_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer180", + "to": "$mer181", + "next": "@celestial.mercury_orbit_step181" + }, + "mercury_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer181", + "to": "$mer182", + "next": "@celestial.mercury_orbit_step182" + }, + "mercury_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer182", + "to": "$mer183", + "next": "@celestial.mercury_orbit_step183" + }, + "mercury_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer183", + "to": "$mer184", + "next": "@celestial.mercury_orbit_step184" + }, + "mercury_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer184", + "to": "$mer185", + "next": "@celestial.mercury_orbit_step185" + }, + "mercury_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer185", + "to": "$mer186", + "next": "@celestial.mercury_orbit_step186" + }, + "mercury_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer186", + "to": "$mer187", + "next": "@celestial.mercury_orbit_step187" + }, + "mercury_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer187", + "to": "$mer188", + "next": "@celestial.mercury_orbit_step188" + }, + "mercury_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer188", + "to": "$mer189", + "next": "@celestial.mercury_orbit_step189" + }, + "mercury_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer189", + "to": "$mer190", + "next": "@celestial.mercury_orbit_step190" + }, + "mercury_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer190", + "to": "$mer191", + "next": "@celestial.mercury_orbit_step191" + }, + "mercury_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer191", + "to": "$mer192", + "next": "@celestial.mercury_orbit_step192" + }, + "mercury_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer192", + "to": "$mer193", + "next": "@celestial.mercury_orbit_step193" + }, + "mercury_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer193", + "to": "$mer194", + "next": "@celestial.mercury_orbit_step194" + }, + "mercury_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer194", + "to": "$mer195", + "next": "@celestial.mercury_orbit_step195" + }, + "mercury_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer195", + "to": "$mer196", + "next": "@celestial.mercury_orbit_step196" + }, + "mercury_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer196", + "to": "$mer197", + "next": "@celestial.mercury_orbit_step197" + }, + "mercury_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer197", + "to": "$mer198", + "next": "@celestial.mercury_orbit_step198" + }, + "mercury_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer198", + "to": "$mer199", + "next": "@celestial.mercury_orbit_step199" + }, + "mercury_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer199", + "to": "$mer200", + "next": "@celestial.mercury_orbit_step200" + }, + "mercury_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer200", + "to": "$mer201", + "next": "@celestial.mercury_orbit_step201" + }, + "mercury_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer201", + "to": "$mer202", + "next": "@celestial.mercury_orbit_step202" + }, + "mercury_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer202", + "to": "$mer203", + "next": "@celestial.mercury_orbit_step203" + }, + "mercury_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer203", + "to": "$mer204", + "next": "@celestial.mercury_orbit_step204" + }, + "mercury_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer204", + "to": "$mer205", + "next": "@celestial.mercury_orbit_step205" + }, + "mercury_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer205", + "to": "$mer206", + "next": "@celestial.mercury_orbit_step206" + }, + "mercury_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer206", + "to": "$mer207", + "next": "@celestial.mercury_orbit_step207" + }, + "mercury_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer207", + "to": "$mer208", + "next": "@celestial.mercury_orbit_step208" + }, + "mercury_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer208", + "to": "$mer209", + "next": "@celestial.mercury_orbit_step209" + }, + "mercury_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer209", + "to": "$mer210", + "next": "@celestial.mercury_orbit_step210" + }, + "mercury_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer210", + "to": "$mer211", + "next": "@celestial.mercury_orbit_step211" + }, + "mercury_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer211", + "to": "$mer212", + "next": "@celestial.mercury_orbit_step212" + }, + "mercury_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer212", + "to": "$mer213", + "next": "@celestial.mercury_orbit_step213" + }, + "mercury_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer213", + "to": "$mer214", + "next": "@celestial.mercury_orbit_step214" + }, + "mercury_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer214", + "to": "$mer215", + "next": "@celestial.mercury_orbit_step215" + }, + "mercury_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer215", + "to": "$mer216", + "next": "@celestial.mercury_orbit_step216" + }, + "mercury_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer216", + "to": "$mer217", + "next": "@celestial.mercury_orbit_step217" + }, + "mercury_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer217", + "to": "$mer218", + "next": "@celestial.mercury_orbit_step218" + }, + "mercury_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer218", + "to": "$mer219", + "next": "@celestial.mercury_orbit_step219" + }, + "mercury_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer219", + "to": "$mer220", + "next": "@celestial.mercury_orbit_step220" + }, + "mercury_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer220", + "to": "$mer221", + "next": "@celestial.mercury_orbit_step221" + }, + "mercury_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer221", + "to": "$mer222", + "next": "@celestial.mercury_orbit_step222" + }, + "mercury_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer222", + "to": "$mer223", + "next": "@celestial.mercury_orbit_step223" + }, + "mercury_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer223", + "to": "$mer224", + "next": "@celestial.mercury_orbit_step224" + }, + "mercury_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer224", + "to": "$mer225", + "next": "@celestial.mercury_orbit_step225" + }, + "mercury_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer225", + "to": "$mer226", + "next": "@celestial.mercury_orbit_step226" + }, + "mercury_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer226", + "to": "$mer227", + "next": "@celestial.mercury_orbit_step227" + }, + "mercury_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer227", + "to": "$mer228", + "next": "@celestial.mercury_orbit_step228" + }, + "mercury_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer228", + "to": "$mer229", + "next": "@celestial.mercury_orbit_step229" + }, + "mercury_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer229", + "to": "$mer230", + "next": "@celestial.mercury_orbit_step230" + }, + "mercury_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer230", + "to": "$mer231", + "next": "@celestial.mercury_orbit_step231" + }, + "mercury_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer231", + "to": "$mer232", + "next": "@celestial.mercury_orbit_step232" + }, + "mercury_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer232", + "to": "$mer233", + "next": "@celestial.mercury_orbit_step233" + }, + "mercury_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer233", + "to": "$mer234", + "next": "@celestial.mercury_orbit_step234" + }, + "mercury_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer234", + "to": "$mer235", + "next": "@celestial.mercury_orbit_step235" + }, + "mercury_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer235", + "to": "$mer236", + "next": "@celestial.mercury_orbit_step236" + }, + "mercury_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer236", + "to": "$mer237", + "next": "@celestial.mercury_orbit_step237" + }, + "mercury_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer237", + "to": "$mer238", + "next": "@celestial.mercury_orbit_step238" + }, + "mercury_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer238", + "to": "$mer239", + "next": "@celestial.mercury_orbit_step239" + }, + "mercury_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer239", + "to": "$mer240", + "next": "@celestial.mercury_orbit_step240" + }, + "mercury_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer240", + "to": "$mer241", + "next": "@celestial.mercury_orbit_step241" + }, + "mercury_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer241", + "to": "$mer242", + "next": "@celestial.mercury_orbit_step242" + }, + "mercury_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer242", + "to": "$mer243", + "next": "@celestial.mercury_orbit_step243" + }, + "mercury_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer243", + "to": "$mer244", + "next": "@celestial.mercury_orbit_step244" + }, + "mercury_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer244", + "to": "$mer245", + "next": "@celestial.mercury_orbit_step245" + }, + "mercury_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer245", + "to": "$mer246", + "next": "@celestial.mercury_orbit_step246" + }, + "mercury_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer246", + "to": "$mer247", + "next": "@celestial.mercury_orbit_step247" + }, + "mercury_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer247", + "to": "$mer248", + "next": "@celestial.mercury_orbit_step248" + }, + "mercury_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer248", + "to": "$mer249", + "next": "@celestial.mercury_orbit_step249" + }, + "mercury_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer249", + "to": "$mer250", + "next": "@celestial.mercury_orbit_step250" + }, + "mercury_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer250", + "to": "$mer251", + "next": "@celestial.mercury_orbit_step251" + }, + "mercury_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer251", + "to": "$mer252", + "next": "@celestial.mercury_orbit_step252" + }, + "mercury_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer252", + "to": "$mer253", + "next": "@celestial.mercury_orbit_step253" + }, + "mercury_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer253", + "to": "$mer254", + "next": "@celestial.mercury_orbit_step254" + }, + "mercury_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer254", + "to": "$mer255", + "next": "@celestial.mercury_orbit_step255" + }, + "mercury_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer255", + "to": "$mer256", + "next": "@celestial.mercury_orbit_step256" + }, + "mercury_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mer256", + "to": "$mer1", + "next": "@celestial.mercury_orbit_step1" + }, + "venus_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven1", + "to": "$ven2", + "next": "@celestial.venus_orbit_step2" + }, + "venus_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven2", + "to": "$ven3", + "next": "@celestial.venus_orbit_step3" + }, + "venus_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven3", + "to": "$ven4", + "next": "@celestial.venus_orbit_step4" + }, + "venus_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven4", + "to": "$ven5", + "next": "@celestial.venus_orbit_step5" + }, + "venus_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven5", + "to": "$ven6", + "next": "@celestial.venus_orbit_step6" + }, + "venus_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven6", + "to": "$ven7", + "next": "@celestial.venus_orbit_step7" + }, + "venus_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven7", + "to": "$ven8", + "next": "@celestial.venus_orbit_step8" + }, + "venus_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven8", + "to": "$ven9", + "next": "@celestial.venus_orbit_step9" + }, + "venus_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven9", + "to": "$ven10", + "next": "@celestial.venus_orbit_step10" + }, + "venus_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven10", + "to": "$ven11", + "next": "@celestial.venus_orbit_step11" + }, + "venus_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven11", + "to": "$ven12", + "next": "@celestial.venus_orbit_step12" + }, + "venus_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven12", + "to": "$ven13", + "next": "@celestial.venus_orbit_step13" + }, + "venus_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven13", + "to": "$ven14", + "next": "@celestial.venus_orbit_step14" + }, + "venus_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven14", + "to": "$ven15", + "next": "@celestial.venus_orbit_step15" + }, + "venus_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven15", + "to": "$ven16", + "next": "@celestial.venus_orbit_step16" + }, + "venus_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven16", + "to": "$ven17", + "next": "@celestial.venus_orbit_step17" + }, + "venus_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven17", + "to": "$ven18", + "next": "@celestial.venus_orbit_step18" + }, + "venus_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven18", + "to": "$ven19", + "next": "@celestial.venus_orbit_step19" + }, + "venus_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven19", + "to": "$ven20", + "next": "@celestial.venus_orbit_step20" + }, + "venus_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven20", + "to": "$ven21", + "next": "@celestial.venus_orbit_step21" + }, + "venus_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven21", + "to": "$ven22", + "next": "@celestial.venus_orbit_step22" + }, + "venus_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven22", + "to": "$ven23", + "next": "@celestial.venus_orbit_step23" + }, + "venus_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven23", + "to": "$ven24", + "next": "@celestial.venus_orbit_step24" + }, + "venus_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven24", + "to": "$ven25", + "next": "@celestial.venus_orbit_step25" + }, + "venus_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven25", + "to": "$ven26", + "next": "@celestial.venus_orbit_step26" + }, + "venus_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven26", + "to": "$ven27", + "next": "@celestial.venus_orbit_step27" + }, + "venus_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven27", + "to": "$ven28", + "next": "@celestial.venus_orbit_step28" + }, + "venus_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven28", + "to": "$ven29", + "next": "@celestial.venus_orbit_step29" + }, + "venus_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven29", + "to": "$ven30", + "next": "@celestial.venus_orbit_step30" + }, + "venus_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven30", + "to": "$ven31", + "next": "@celestial.venus_orbit_step31" + }, + "venus_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven31", + "to": "$ven32", + "next": "@celestial.venus_orbit_step32" + }, + "venus_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven32", + "to": "$ven33", + "next": "@celestial.venus_orbit_step33" + }, + "venus_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven33", + "to": "$ven34", + "next": "@celestial.venus_orbit_step34" + }, + "venus_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven34", + "to": "$ven35", + "next": "@celestial.venus_orbit_step35" + }, + "venus_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven35", + "to": "$ven36", + "next": "@celestial.venus_orbit_step36" + }, + "venus_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven36", + "to": "$ven37", + "next": "@celestial.venus_orbit_step37" + }, + "venus_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven37", + "to": "$ven38", + "next": "@celestial.venus_orbit_step38" + }, + "venus_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven38", + "to": "$ven39", + "next": "@celestial.venus_orbit_step39" + }, + "venus_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven39", + "to": "$ven40", + "next": "@celestial.venus_orbit_step40" + }, + "venus_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven40", + "to": "$ven41", + "next": "@celestial.venus_orbit_step41" + }, + "venus_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven41", + "to": "$ven42", + "next": "@celestial.venus_orbit_step42" + }, + "venus_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven42", + "to": "$ven43", + "next": "@celestial.venus_orbit_step43" + }, + "venus_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven43", + "to": "$ven44", + "next": "@celestial.venus_orbit_step44" + }, + "venus_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven44", + "to": "$ven45", + "next": "@celestial.venus_orbit_step45" + }, + "venus_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven45", + "to": "$ven46", + "next": "@celestial.venus_orbit_step46" + }, + "venus_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven46", + "to": "$ven47", + "next": "@celestial.venus_orbit_step47" + }, + "venus_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven47", + "to": "$ven48", + "next": "@celestial.venus_orbit_step48" + }, + "venus_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven48", + "to": "$ven49", + "next": "@celestial.venus_orbit_step49" + }, + "venus_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven49", + "to": "$ven50", + "next": "@celestial.venus_orbit_step50" + }, + "venus_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven50", + "to": "$ven51", + "next": "@celestial.venus_orbit_step51" + }, + "venus_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven51", + "to": "$ven52", + "next": "@celestial.venus_orbit_step52" + }, + "venus_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven52", + "to": "$ven53", + "next": "@celestial.venus_orbit_step53" + }, + "venus_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven53", + "to": "$ven54", + "next": "@celestial.venus_orbit_step54" + }, + "venus_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven54", + "to": "$ven55", + "next": "@celestial.venus_orbit_step55" + }, + "venus_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven55", + "to": "$ven56", + "next": "@celestial.venus_orbit_step56" + }, + "venus_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven56", + "to": "$ven57", + "next": "@celestial.venus_orbit_step57" + }, + "venus_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven57", + "to": "$ven58", + "next": "@celestial.venus_orbit_step58" + }, + "venus_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven58", + "to": "$ven59", + "next": "@celestial.venus_orbit_step59" + }, + "venus_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven59", + "to": "$ven60", + "next": "@celestial.venus_orbit_step60" + }, + "venus_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven60", + "to": "$ven61", + "next": "@celestial.venus_orbit_step61" + }, + "venus_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven61", + "to": "$ven62", + "next": "@celestial.venus_orbit_step62" + }, + "venus_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven62", + "to": "$ven63", + "next": "@celestial.venus_orbit_step63" + }, + "venus_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven63", + "to": "$ven64", + "next": "@celestial.venus_orbit_step64" + }, + "venus_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven64", + "to": "$ven65", + "next": "@celestial.venus_orbit_step65" + }, + "venus_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven65", + "to": "$ven66", + "next": "@celestial.venus_orbit_step66" + }, + "venus_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven66", + "to": "$ven67", + "next": "@celestial.venus_orbit_step67" + }, + "venus_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven67", + "to": "$ven68", + "next": "@celestial.venus_orbit_step68" + }, + "venus_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven68", + "to": "$ven69", + "next": "@celestial.venus_orbit_step69" + }, + "venus_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven69", + "to": "$ven70", + "next": "@celestial.venus_orbit_step70" + }, + "venus_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven70", + "to": "$ven71", + "next": "@celestial.venus_orbit_step71" + }, + "venus_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven71", + "to": "$ven72", + "next": "@celestial.venus_orbit_step72" + }, + "venus_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven72", + "to": "$ven73", + "next": "@celestial.venus_orbit_step73" + }, + "venus_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven73", + "to": "$ven74", + "next": "@celestial.venus_orbit_step74" + }, + "venus_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven74", + "to": "$ven75", + "next": "@celestial.venus_orbit_step75" + }, + "venus_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven75", + "to": "$ven76", + "next": "@celestial.venus_orbit_step76" + }, + "venus_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven76", + "to": "$ven77", + "next": "@celestial.venus_orbit_step77" + }, + "venus_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven77", + "to": "$ven78", + "next": "@celestial.venus_orbit_step78" + }, + "venus_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven78", + "to": "$ven79", + "next": "@celestial.venus_orbit_step79" + }, + "venus_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven79", + "to": "$ven80", + "next": "@celestial.venus_orbit_step80" + }, + "venus_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven80", + "to": "$ven81", + "next": "@celestial.venus_orbit_step81" + }, + "venus_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven81", + "to": "$ven82", + "next": "@celestial.venus_orbit_step82" + }, + "venus_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven82", + "to": "$ven83", + "next": "@celestial.venus_orbit_step83" + }, + "venus_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven83", + "to": "$ven84", + "next": "@celestial.venus_orbit_step84" + }, + "venus_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven84", + "to": "$ven85", + "next": "@celestial.venus_orbit_step85" + }, + "venus_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven85", + "to": "$ven86", + "next": "@celestial.venus_orbit_step86" + }, + "venus_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven86", + "to": "$ven87", + "next": "@celestial.venus_orbit_step87" + }, + "venus_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven87", + "to": "$ven88", + "next": "@celestial.venus_orbit_step88" + }, + "venus_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven88", + "to": "$ven89", + "next": "@celestial.venus_orbit_step89" + }, + "venus_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven89", + "to": "$ven90", + "next": "@celestial.venus_orbit_step90" + }, + "venus_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven90", + "to": "$ven91", + "next": "@celestial.venus_orbit_step91" + }, + "venus_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven91", + "to": "$ven92", + "next": "@celestial.venus_orbit_step92" + }, + "venus_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven92", + "to": "$ven93", + "next": "@celestial.venus_orbit_step93" + }, + "venus_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven93", + "to": "$ven94", + "next": "@celestial.venus_orbit_step94" + }, + "venus_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven94", + "to": "$ven95", + "next": "@celestial.venus_orbit_step95" + }, + "venus_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven95", + "to": "$ven96", + "next": "@celestial.venus_orbit_step96" + }, + "venus_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven96", + "to": "$ven97", + "next": "@celestial.venus_orbit_step97" + }, + "venus_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven97", + "to": "$ven98", + "next": "@celestial.venus_orbit_step98" + }, + "venus_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven98", + "to": "$ven99", + "next": "@celestial.venus_orbit_step99" + }, + "venus_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven99", + "to": "$ven100", + "next": "@celestial.venus_orbit_step100" + }, + "venus_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven100", + "to": "$ven101", + "next": "@celestial.venus_orbit_step101" + }, + "venus_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven101", + "to": "$ven102", + "next": "@celestial.venus_orbit_step102" + }, + "venus_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven102", + "to": "$ven103", + "next": "@celestial.venus_orbit_step103" + }, + "venus_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven103", + "to": "$ven104", + "next": "@celestial.venus_orbit_step104" + }, + "venus_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven104", + "to": "$ven105", + "next": "@celestial.venus_orbit_step105" + }, + "venus_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven105", + "to": "$ven106", + "next": "@celestial.venus_orbit_step106" + }, + "venus_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven106", + "to": "$ven107", + "next": "@celestial.venus_orbit_step107" + }, + "venus_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven107", + "to": "$ven108", + "next": "@celestial.venus_orbit_step108" + }, + "venus_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven108", + "to": "$ven109", + "next": "@celestial.venus_orbit_step109" + }, + "venus_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven109", + "to": "$ven110", + "next": "@celestial.venus_orbit_step110" + }, + "venus_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven110", + "to": "$ven111", + "next": "@celestial.venus_orbit_step111" + }, + "venus_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven111", + "to": "$ven112", + "next": "@celestial.venus_orbit_step112" + }, + "venus_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven112", + "to": "$ven113", + "next": "@celestial.venus_orbit_step113" + }, + "venus_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven113", + "to": "$ven114", + "next": "@celestial.venus_orbit_step114" + }, + "venus_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven114", + "to": "$ven115", + "next": "@celestial.venus_orbit_step115" + }, + "venus_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven115", + "to": "$ven116", + "next": "@celestial.venus_orbit_step116" + }, + "venus_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven116", + "to": "$ven117", + "next": "@celestial.venus_orbit_step117" + }, + "venus_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven117", + "to": "$ven118", + "next": "@celestial.venus_orbit_step118" + }, + "venus_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven118", + "to": "$ven119", + "next": "@celestial.venus_orbit_step119" + }, + "venus_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven119", + "to": "$ven120", + "next": "@celestial.venus_orbit_step120" + }, + "venus_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven120", + "to": "$ven121", + "next": "@celestial.venus_orbit_step121" + }, + "venus_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven121", + "to": "$ven122", + "next": "@celestial.venus_orbit_step122" + }, + "venus_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven122", + "to": "$ven123", + "next": "@celestial.venus_orbit_step123" + }, + "venus_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven123", + "to": "$ven124", + "next": "@celestial.venus_orbit_step124" + }, + "venus_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven124", + "to": "$ven125", + "next": "@celestial.venus_orbit_step125" + }, + "venus_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven125", + "to": "$ven126", + "next": "@celestial.venus_orbit_step126" + }, + "venus_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven126", + "to": "$ven127", + "next": "@celestial.venus_orbit_step127" + }, + "venus_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven127", + "to": "$ven128", + "next": "@celestial.venus_orbit_step128" + }, + "venus_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven128", + "to": "$ven129", + "next": "@celestial.venus_orbit_step129" + }, + "venus_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven129", + "to": "$ven130", + "next": "@celestial.venus_orbit_step130" + }, + "venus_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven130", + "to": "$ven131", + "next": "@celestial.venus_orbit_step131" + }, + "venus_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven131", + "to": "$ven132", + "next": "@celestial.venus_orbit_step132" + }, + "venus_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven132", + "to": "$ven133", + "next": "@celestial.venus_orbit_step133" + }, + "venus_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven133", + "to": "$ven134", + "next": "@celestial.venus_orbit_step134" + }, + "venus_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven134", + "to": "$ven135", + "next": "@celestial.venus_orbit_step135" + }, + "venus_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven135", + "to": "$ven136", + "next": "@celestial.venus_orbit_step136" + }, + "venus_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven136", + "to": "$ven137", + "next": "@celestial.venus_orbit_step137" + }, + "venus_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven137", + "to": "$ven138", + "next": "@celestial.venus_orbit_step138" + }, + "venus_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven138", + "to": "$ven139", + "next": "@celestial.venus_orbit_step139" + }, + "venus_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven139", + "to": "$ven140", + "next": "@celestial.venus_orbit_step140" + }, + "venus_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven140", + "to": "$ven141", + "next": "@celestial.venus_orbit_step141" + }, + "venus_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven141", + "to": "$ven142", + "next": "@celestial.venus_orbit_step142" + }, + "venus_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven142", + "to": "$ven143", + "next": "@celestial.venus_orbit_step143" + }, + "venus_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven143", + "to": "$ven144", + "next": "@celestial.venus_orbit_step144" + }, + "venus_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven144", + "to": "$ven145", + "next": "@celestial.venus_orbit_step145" + }, + "venus_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven145", + "to": "$ven146", + "next": "@celestial.venus_orbit_step146" + }, + "venus_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven146", + "to": "$ven147", + "next": "@celestial.venus_orbit_step147" + }, + "venus_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven147", + "to": "$ven148", + "next": "@celestial.venus_orbit_step148" + }, + "venus_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven148", + "to": "$ven149", + "next": "@celestial.venus_orbit_step149" + }, + "venus_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven149", + "to": "$ven150", + "next": "@celestial.venus_orbit_step150" + }, + "venus_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven150", + "to": "$ven151", + "next": "@celestial.venus_orbit_step151" + }, + "venus_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven151", + "to": "$ven152", + "next": "@celestial.venus_orbit_step152" + }, + "venus_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven152", + "to": "$ven153", + "next": "@celestial.venus_orbit_step153" + }, + "venus_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven153", + "to": "$ven154", + "next": "@celestial.venus_orbit_step154" + }, + "venus_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven154", + "to": "$ven155", + "next": "@celestial.venus_orbit_step155" + }, + "venus_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven155", + "to": "$ven156", + "next": "@celestial.venus_orbit_step156" + }, + "venus_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven156", + "to": "$ven157", + "next": "@celestial.venus_orbit_step157" + }, + "venus_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven157", + "to": "$ven158", + "next": "@celestial.venus_orbit_step158" + }, + "venus_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven158", + "to": "$ven159", + "next": "@celestial.venus_orbit_step159" + }, + "venus_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven159", + "to": "$ven160", + "next": "@celestial.venus_orbit_step160" + }, + "venus_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven160", + "to": "$ven161", + "next": "@celestial.venus_orbit_step161" + }, + "venus_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven161", + "to": "$ven162", + "next": "@celestial.venus_orbit_step162" + }, + "venus_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven162", + "to": "$ven163", + "next": "@celestial.venus_orbit_step163" + }, + "venus_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven163", + "to": "$ven164", + "next": "@celestial.venus_orbit_step164" + }, + "venus_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven164", + "to": "$ven165", + "next": "@celestial.venus_orbit_step165" + }, + "venus_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven165", + "to": "$ven166", + "next": "@celestial.venus_orbit_step166" + }, + "venus_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven166", + "to": "$ven167", + "next": "@celestial.venus_orbit_step167" + }, + "venus_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven167", + "to": "$ven168", + "next": "@celestial.venus_orbit_step168" + }, + "venus_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven168", + "to": "$ven169", + "next": "@celestial.venus_orbit_step169" + }, + "venus_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven169", + "to": "$ven170", + "next": "@celestial.venus_orbit_step170" + }, + "venus_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven170", + "to": "$ven171", + "next": "@celestial.venus_orbit_step171" + }, + "venus_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven171", + "to": "$ven172", + "next": "@celestial.venus_orbit_step172" + }, + "venus_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven172", + "to": "$ven173", + "next": "@celestial.venus_orbit_step173" + }, + "venus_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven173", + "to": "$ven174", + "next": "@celestial.venus_orbit_step174" + }, + "venus_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven174", + "to": "$ven175", + "next": "@celestial.venus_orbit_step175" + }, + "venus_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven175", + "to": "$ven176", + "next": "@celestial.venus_orbit_step176" + }, + "venus_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven176", + "to": "$ven177", + "next": "@celestial.venus_orbit_step177" + }, + "venus_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven177", + "to": "$ven178", + "next": "@celestial.venus_orbit_step178" + }, + "venus_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven178", + "to": "$ven179", + "next": "@celestial.venus_orbit_step179" + }, + "venus_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven179", + "to": "$ven180", + "next": "@celestial.venus_orbit_step180" + }, + "venus_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven180", + "to": "$ven181", + "next": "@celestial.venus_orbit_step181" + }, + "venus_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven181", + "to": "$ven182", + "next": "@celestial.venus_orbit_step182" + }, + "venus_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven182", + "to": "$ven183", + "next": "@celestial.venus_orbit_step183" + }, + "venus_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven183", + "to": "$ven184", + "next": "@celestial.venus_orbit_step184" + }, + "venus_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven184", + "to": "$ven185", + "next": "@celestial.venus_orbit_step185" + }, + "venus_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven185", + "to": "$ven186", + "next": "@celestial.venus_orbit_step186" + }, + "venus_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven186", + "to": "$ven187", + "next": "@celestial.venus_orbit_step187" + }, + "venus_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven187", + "to": "$ven188", + "next": "@celestial.venus_orbit_step188" + }, + "venus_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven188", + "to": "$ven189", + "next": "@celestial.venus_orbit_step189" + }, + "venus_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven189", + "to": "$ven190", + "next": "@celestial.venus_orbit_step190" + }, + "venus_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven190", + "to": "$ven191", + "next": "@celestial.venus_orbit_step191" + }, + "venus_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven191", + "to": "$ven192", + "next": "@celestial.venus_orbit_step192" + }, + "venus_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven192", + "to": "$ven193", + "next": "@celestial.venus_orbit_step193" + }, + "venus_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven193", + "to": "$ven194", + "next": "@celestial.venus_orbit_step194" + }, + "venus_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven194", + "to": "$ven195", + "next": "@celestial.venus_orbit_step195" + }, + "venus_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven195", + "to": "$ven196", + "next": "@celestial.venus_orbit_step196" + }, + "venus_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven196", + "to": "$ven197", + "next": "@celestial.venus_orbit_step197" + }, + "venus_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven197", + "to": "$ven198", + "next": "@celestial.venus_orbit_step198" + }, + "venus_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven198", + "to": "$ven199", + "next": "@celestial.venus_orbit_step199" + }, + "venus_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven199", + "to": "$ven200", + "next": "@celestial.venus_orbit_step200" + }, + "venus_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven200", + "to": "$ven201", + "next": "@celestial.venus_orbit_step201" + }, + "venus_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven201", + "to": "$ven202", + "next": "@celestial.venus_orbit_step202" + }, + "venus_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven202", + "to": "$ven203", + "next": "@celestial.venus_orbit_step203" + }, + "venus_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven203", + "to": "$ven204", + "next": "@celestial.venus_orbit_step204" + }, + "venus_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven204", + "to": "$ven205", + "next": "@celestial.venus_orbit_step205" + }, + "venus_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven205", + "to": "$ven206", + "next": "@celestial.venus_orbit_step206" + }, + "venus_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven206", + "to": "$ven207", + "next": "@celestial.venus_orbit_step207" + }, + "venus_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven207", + "to": "$ven208", + "next": "@celestial.venus_orbit_step208" + }, + "venus_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven208", + "to": "$ven209", + "next": "@celestial.venus_orbit_step209" + }, + "venus_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven209", + "to": "$ven210", + "next": "@celestial.venus_orbit_step210" + }, + "venus_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven210", + "to": "$ven211", + "next": "@celestial.venus_orbit_step211" + }, + "venus_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven211", + "to": "$ven212", + "next": "@celestial.venus_orbit_step212" + }, + "venus_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven212", + "to": "$ven213", + "next": "@celestial.venus_orbit_step213" + }, + "venus_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven213", + "to": "$ven214", + "next": "@celestial.venus_orbit_step214" + }, + "venus_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven214", + "to": "$ven215", + "next": "@celestial.venus_orbit_step215" + }, + "venus_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven215", + "to": "$ven216", + "next": "@celestial.venus_orbit_step216" + }, + "venus_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven216", + "to": "$ven217", + "next": "@celestial.venus_orbit_step217" + }, + "venus_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven217", + "to": "$ven218", + "next": "@celestial.venus_orbit_step218" + }, + "venus_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven218", + "to": "$ven219", + "next": "@celestial.venus_orbit_step219" + }, + "venus_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven219", + "to": "$ven220", + "next": "@celestial.venus_orbit_step220" + }, + "venus_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven220", + "to": "$ven221", + "next": "@celestial.venus_orbit_step221" + }, + "venus_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven221", + "to": "$ven222", + "next": "@celestial.venus_orbit_step222" + }, + "venus_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven222", + "to": "$ven223", + "next": "@celestial.venus_orbit_step223" + }, + "venus_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven223", + "to": "$ven224", + "next": "@celestial.venus_orbit_step224" + }, + "venus_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven224", + "to": "$ven225", + "next": "@celestial.venus_orbit_step225" + }, + "venus_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven225", + "to": "$ven226", + "next": "@celestial.venus_orbit_step226" + }, + "venus_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven226", + "to": "$ven227", + "next": "@celestial.venus_orbit_step227" + }, + "venus_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven227", + "to": "$ven228", + "next": "@celestial.venus_orbit_step228" + }, + "venus_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven228", + "to": "$ven229", + "next": "@celestial.venus_orbit_step229" + }, + "venus_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven229", + "to": "$ven230", + "next": "@celestial.venus_orbit_step230" + }, + "venus_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven230", + "to": "$ven231", + "next": "@celestial.venus_orbit_step231" + }, + "venus_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven231", + "to": "$ven232", + "next": "@celestial.venus_orbit_step232" + }, + "venus_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven232", + "to": "$ven233", + "next": "@celestial.venus_orbit_step233" + }, + "venus_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven233", + "to": "$ven234", + "next": "@celestial.venus_orbit_step234" + }, + "venus_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven234", + "to": "$ven235", + "next": "@celestial.venus_orbit_step235" + }, + "venus_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven235", + "to": "$ven236", + "next": "@celestial.venus_orbit_step236" + }, + "venus_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven236", + "to": "$ven237", + "next": "@celestial.venus_orbit_step237" + }, + "venus_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven237", + "to": "$ven238", + "next": "@celestial.venus_orbit_step238" + }, + "venus_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven238", + "to": "$ven239", + "next": "@celestial.venus_orbit_step239" + }, + "venus_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven239", + "to": "$ven240", + "next": "@celestial.venus_orbit_step240" + }, + "venus_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven240", + "to": "$ven241", + "next": "@celestial.venus_orbit_step241" + }, + "venus_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven241", + "to": "$ven242", + "next": "@celestial.venus_orbit_step242" + }, + "venus_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven242", + "to": "$ven243", + "next": "@celestial.venus_orbit_step243" + }, + "venus_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven243", + "to": "$ven244", + "next": "@celestial.venus_orbit_step244" + }, + "venus_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven244", + "to": "$ven245", + "next": "@celestial.venus_orbit_step245" + }, + "venus_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven245", + "to": "$ven246", + "next": "@celestial.venus_orbit_step246" + }, + "venus_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven246", + "to": "$ven247", + "next": "@celestial.venus_orbit_step247" + }, + "venus_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven247", + "to": "$ven248", + "next": "@celestial.venus_orbit_step248" + }, + "venus_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven248", + "to": "$ven249", + "next": "@celestial.venus_orbit_step249" + }, + "venus_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven249", + "to": "$ven250", + "next": "@celestial.venus_orbit_step250" + }, + "venus_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven250", + "to": "$ven251", + "next": "@celestial.venus_orbit_step251" + }, + "venus_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven251", + "to": "$ven252", + "next": "@celestial.venus_orbit_step252" + }, + "venus_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven252", + "to": "$ven253", + "next": "@celestial.venus_orbit_step253" + }, + "venus_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven253", + "to": "$ven254", + "next": "@celestial.venus_orbit_step254" + }, + "venus_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven254", + "to": "$ven255", + "next": "@celestial.venus_orbit_step255" + }, + "venus_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven255", + "to": "$ven256", + "next": "@celestial.venus_orbit_step256" + }, + "venus_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ven256", + "to": "$ven1", + "next": "@celestial.venus_orbit_step1" + }, + "overworld_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear1", + "to": "$ear2", + "next": "@celestial.overworld_orbit_step2" + }, + "overworld_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear2", + "to": "$ear3", + "next": "@celestial.overworld_orbit_step3" + }, + "overworld_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear3", + "to": "$ear4", + "next": "@celestial.overworld_orbit_step4" + }, + "overworld_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear4", + "to": "$ear5", + "next": "@celestial.overworld_orbit_step5" + }, + "overworld_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear5", + "to": "$ear6", + "next": "@celestial.overworld_orbit_step6" + }, + "overworld_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear6", + "to": "$ear7", + "next": "@celestial.overworld_orbit_step7" + }, + "overworld_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear7", + "to": "$ear8", + "next": "@celestial.overworld_orbit_step8" + }, + "overworld_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear8", + "to": "$ear9", + "next": "@celestial.overworld_orbit_step9" + }, + "overworld_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear9", + "to": "$ear10", + "next": "@celestial.overworld_orbit_step10" + }, + "overworld_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear10", + "to": "$ear11", + "next": "@celestial.overworld_orbit_step11" + }, + "overworld_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear11", + "to": "$ear12", + "next": "@celestial.overworld_orbit_step12" + }, + "overworld_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear12", + "to": "$ear13", + "next": "@celestial.overworld_orbit_step13" + }, + "overworld_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear13", + "to": "$ear14", + "next": "@celestial.overworld_orbit_step14" + }, + "overworld_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear14", + "to": "$ear15", + "next": "@celestial.overworld_orbit_step15" + }, + "overworld_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear15", + "to": "$ear16", + "next": "@celestial.overworld_orbit_step16" + }, + "overworld_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear16", + "to": "$ear17", + "next": "@celestial.overworld_orbit_step17" + }, + "overworld_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear17", + "to": "$ear18", + "next": "@celestial.overworld_orbit_step18" + }, + "overworld_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear18", + "to": "$ear19", + "next": "@celestial.overworld_orbit_step19" + }, + "overworld_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear19", + "to": "$ear20", + "next": "@celestial.overworld_orbit_step20" + }, + "overworld_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear20", + "to": "$ear21", + "next": "@celestial.overworld_orbit_step21" + }, + "overworld_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear21", + "to": "$ear22", + "next": "@celestial.overworld_orbit_step22" + }, + "overworld_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear22", + "to": "$ear23", + "next": "@celestial.overworld_orbit_step23" + }, + "overworld_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear23", + "to": "$ear24", + "next": "@celestial.overworld_orbit_step24" + }, + "overworld_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear24", + "to": "$ear25", + "next": "@celestial.overworld_orbit_step25" + }, + "overworld_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear25", + "to": "$ear26", + "next": "@celestial.overworld_orbit_step26" + }, + "overworld_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear26", + "to": "$ear27", + "next": "@celestial.overworld_orbit_step27" + }, + "overworld_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear27", + "to": "$ear28", + "next": "@celestial.overworld_orbit_step28" + }, + "overworld_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear28", + "to": "$ear29", + "next": "@celestial.overworld_orbit_step29" + }, + "overworld_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear29", + "to": "$ear30", + "next": "@celestial.overworld_orbit_step30" + }, + "overworld_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear30", + "to": "$ear31", + "next": "@celestial.overworld_orbit_step31" + }, + "overworld_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear31", + "to": "$ear32", + "next": "@celestial.overworld_orbit_step32" + }, + "overworld_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear32", + "to": "$ear33", + "next": "@celestial.overworld_orbit_step33" + }, + "overworld_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear33", + "to": "$ear34", + "next": "@celestial.overworld_orbit_step34" + }, + "overworld_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear34", + "to": "$ear35", + "next": "@celestial.overworld_orbit_step35" + }, + "overworld_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear35", + "to": "$ear36", + "next": "@celestial.overworld_orbit_step36" + }, + "overworld_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear36", + "to": "$ear37", + "next": "@celestial.overworld_orbit_step37" + }, + "overworld_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear37", + "to": "$ear38", + "next": "@celestial.overworld_orbit_step38" + }, + "overworld_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear38", + "to": "$ear39", + "next": "@celestial.overworld_orbit_step39" + }, + "overworld_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear39", + "to": "$ear40", + "next": "@celestial.overworld_orbit_step40" + }, + "overworld_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear40", + "to": "$ear41", + "next": "@celestial.overworld_orbit_step41" + }, + "overworld_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear41", + "to": "$ear42", + "next": "@celestial.overworld_orbit_step42" + }, + "overworld_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear42", + "to": "$ear43", + "next": "@celestial.overworld_orbit_step43" + }, + "overworld_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear43", + "to": "$ear44", + "next": "@celestial.overworld_orbit_step44" + }, + "overworld_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear44", + "to": "$ear45", + "next": "@celestial.overworld_orbit_step45" + }, + "overworld_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear45", + "to": "$ear46", + "next": "@celestial.overworld_orbit_step46" + }, + "overworld_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear46", + "to": "$ear47", + "next": "@celestial.overworld_orbit_step47" + }, + "overworld_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear47", + "to": "$ear48", + "next": "@celestial.overworld_orbit_step48" + }, + "overworld_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear48", + "to": "$ear49", + "next": "@celestial.overworld_orbit_step49" + }, + "overworld_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear49", + "to": "$ear50", + "next": "@celestial.overworld_orbit_step50" + }, + "overworld_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear50", + "to": "$ear51", + "next": "@celestial.overworld_orbit_step51" + }, + "overworld_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear51", + "to": "$ear52", + "next": "@celestial.overworld_orbit_step52" + }, + "overworld_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear52", + "to": "$ear53", + "next": "@celestial.overworld_orbit_step53" + }, + "overworld_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear53", + "to": "$ear54", + "next": "@celestial.overworld_orbit_step54" + }, + "overworld_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear54", + "to": "$ear55", + "next": "@celestial.overworld_orbit_step55" + }, + "overworld_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear55", + "to": "$ear56", + "next": "@celestial.overworld_orbit_step56" + }, + "overworld_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear56", + "to": "$ear57", + "next": "@celestial.overworld_orbit_step57" + }, + "overworld_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear57", + "to": "$ear58", + "next": "@celestial.overworld_orbit_step58" + }, + "overworld_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear58", + "to": "$ear59", + "next": "@celestial.overworld_orbit_step59" + }, + "overworld_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear59", + "to": "$ear60", + "next": "@celestial.overworld_orbit_step60" + }, + "overworld_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear60", + "to": "$ear61", + "next": "@celestial.overworld_orbit_step61" + }, + "overworld_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear61", + "to": "$ear62", + "next": "@celestial.overworld_orbit_step62" + }, + "overworld_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear62", + "to": "$ear63", + "next": "@celestial.overworld_orbit_step63" + }, + "overworld_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear63", + "to": "$ear64", + "next": "@celestial.overworld_orbit_step64" + }, + "overworld_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear64", + "to": "$ear65", + "next": "@celestial.overworld_orbit_step65" + }, + "overworld_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear65", + "to": "$ear66", + "next": "@celestial.overworld_orbit_step66" + }, + "overworld_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear66", + "to": "$ear67", + "next": "@celestial.overworld_orbit_step67" + }, + "overworld_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear67", + "to": "$ear68", + "next": "@celestial.overworld_orbit_step68" + }, + "overworld_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear68", + "to": "$ear69", + "next": "@celestial.overworld_orbit_step69" + }, + "overworld_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear69", + "to": "$ear70", + "next": "@celestial.overworld_orbit_step70" + }, + "overworld_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear70", + "to": "$ear71", + "next": "@celestial.overworld_orbit_step71" + }, + "overworld_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear71", + "to": "$ear72", + "next": "@celestial.overworld_orbit_step72" + }, + "overworld_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear72", + "to": "$ear73", + "next": "@celestial.overworld_orbit_step73" + }, + "overworld_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear73", + "to": "$ear74", + "next": "@celestial.overworld_orbit_step74" + }, + "overworld_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear74", + "to": "$ear75", + "next": "@celestial.overworld_orbit_step75" + }, + "overworld_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear75", + "to": "$ear76", + "next": "@celestial.overworld_orbit_step76" + }, + "overworld_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear76", + "to": "$ear77", + "next": "@celestial.overworld_orbit_step77" + }, + "overworld_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear77", + "to": "$ear78", + "next": "@celestial.overworld_orbit_step78" + }, + "overworld_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear78", + "to": "$ear79", + "next": "@celestial.overworld_orbit_step79" + }, + "overworld_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear79", + "to": "$ear80", + "next": "@celestial.overworld_orbit_step80" + }, + "overworld_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear80", + "to": "$ear81", + "next": "@celestial.overworld_orbit_step81" + }, + "overworld_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear81", + "to": "$ear82", + "next": "@celestial.overworld_orbit_step82" + }, + "overworld_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear82", + "to": "$ear83", + "next": "@celestial.overworld_orbit_step83" + }, + "overworld_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear83", + "to": "$ear84", + "next": "@celestial.overworld_orbit_step84" + }, + "overworld_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear84", + "to": "$ear85", + "next": "@celestial.overworld_orbit_step85" + }, + "overworld_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear85", + "to": "$ear86", + "next": "@celestial.overworld_orbit_step86" + }, + "overworld_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear86", + "to": "$ear87", + "next": "@celestial.overworld_orbit_step87" + }, + "overworld_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear87", + "to": "$ear88", + "next": "@celestial.overworld_orbit_step88" + }, + "overworld_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear88", + "to": "$ear89", + "next": "@celestial.overworld_orbit_step89" + }, + "overworld_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear89", + "to": "$ear90", + "next": "@celestial.overworld_orbit_step90" + }, + "overworld_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear90", + "to": "$ear91", + "next": "@celestial.overworld_orbit_step91" + }, + "overworld_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear91", + "to": "$ear92", + "next": "@celestial.overworld_orbit_step92" + }, + "overworld_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear92", + "to": "$ear93", + "next": "@celestial.overworld_orbit_step93" + }, + "overworld_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear93", + "to": "$ear94", + "next": "@celestial.overworld_orbit_step94" + }, + "overworld_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear94", + "to": "$ear95", + "next": "@celestial.overworld_orbit_step95" + }, + "overworld_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear95", + "to": "$ear96", + "next": "@celestial.overworld_orbit_step96" + }, + "overworld_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear96", + "to": "$ear97", + "next": "@celestial.overworld_orbit_step97" + }, + "overworld_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear97", + "to": "$ear98", + "next": "@celestial.overworld_orbit_step98" + }, + "overworld_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear98", + "to": "$ear99", + "next": "@celestial.overworld_orbit_step99" + }, + "overworld_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear99", + "to": "$ear100", + "next": "@celestial.overworld_orbit_step100" + }, + "overworld_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear100", + "to": "$ear101", + "next": "@celestial.overworld_orbit_step101" + }, + "overworld_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear101", + "to": "$ear102", + "next": "@celestial.overworld_orbit_step102" + }, + "overworld_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear102", + "to": "$ear103", + "next": "@celestial.overworld_orbit_step103" + }, + "overworld_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear103", + "to": "$ear104", + "next": "@celestial.overworld_orbit_step104" + }, + "overworld_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear104", + "to": "$ear105", + "next": "@celestial.overworld_orbit_step105" + }, + "overworld_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear105", + "to": "$ear106", + "next": "@celestial.overworld_orbit_step106" + }, + "overworld_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear106", + "to": "$ear107", + "next": "@celestial.overworld_orbit_step107" + }, + "overworld_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear107", + "to": "$ear108", + "next": "@celestial.overworld_orbit_step108" + }, + "overworld_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear108", + "to": "$ear109", + "next": "@celestial.overworld_orbit_step109" + }, + "overworld_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear109", + "to": "$ear110", + "next": "@celestial.overworld_orbit_step110" + }, + "overworld_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear110", + "to": "$ear111", + "next": "@celestial.overworld_orbit_step111" + }, + "overworld_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear111", + "to": "$ear112", + "next": "@celestial.overworld_orbit_step112" + }, + "overworld_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear112", + "to": "$ear113", + "next": "@celestial.overworld_orbit_step113" + }, + "overworld_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear113", + "to": "$ear114", + "next": "@celestial.overworld_orbit_step114" + }, + "overworld_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear114", + "to": "$ear115", + "next": "@celestial.overworld_orbit_step115" + }, + "overworld_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear115", + "to": "$ear116", + "next": "@celestial.overworld_orbit_step116" + }, + "overworld_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear116", + "to": "$ear117", + "next": "@celestial.overworld_orbit_step117" + }, + "overworld_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear117", + "to": "$ear118", + "next": "@celestial.overworld_orbit_step118" + }, + "overworld_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear118", + "to": "$ear119", + "next": "@celestial.overworld_orbit_step119" + }, + "overworld_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear119", + "to": "$ear120", + "next": "@celestial.overworld_orbit_step120" + }, + "overworld_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear120", + "to": "$ear121", + "next": "@celestial.overworld_orbit_step121" + }, + "overworld_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear121", + "to": "$ear122", + "next": "@celestial.overworld_orbit_step122" + }, + "overworld_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear122", + "to": "$ear123", + "next": "@celestial.overworld_orbit_step123" + }, + "overworld_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear123", + "to": "$ear124", + "next": "@celestial.overworld_orbit_step124" + }, + "overworld_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear124", + "to": "$ear125", + "next": "@celestial.overworld_orbit_step125" + }, + "overworld_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear125", + "to": "$ear126", + "next": "@celestial.overworld_orbit_step126" + }, + "overworld_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear126", + "to": "$ear127", + "next": "@celestial.overworld_orbit_step127" + }, + "overworld_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear127", + "to": "$ear128", + "next": "@celestial.overworld_orbit_step128" + }, + "overworld_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear128", + "to": "$ear129", + "next": "@celestial.overworld_orbit_step129" + }, + "overworld_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear129", + "to": "$ear130", + "next": "@celestial.overworld_orbit_step130" + }, + "overworld_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear130", + "to": "$ear131", + "next": "@celestial.overworld_orbit_step131" + }, + "overworld_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear131", + "to": "$ear132", + "next": "@celestial.overworld_orbit_step132" + }, + "overworld_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear132", + "to": "$ear133", + "next": "@celestial.overworld_orbit_step133" + }, + "overworld_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear133", + "to": "$ear134", + "next": "@celestial.overworld_orbit_step134" + }, + "overworld_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear134", + "to": "$ear135", + "next": "@celestial.overworld_orbit_step135" + }, + "overworld_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear135", + "to": "$ear136", + "next": "@celestial.overworld_orbit_step136" + }, + "overworld_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear136", + "to": "$ear137", + "next": "@celestial.overworld_orbit_step137" + }, + "overworld_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear137", + "to": "$ear138", + "next": "@celestial.overworld_orbit_step138" + }, + "overworld_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear138", + "to": "$ear139", + "next": "@celestial.overworld_orbit_step139" + }, + "overworld_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear139", + "to": "$ear140", + "next": "@celestial.overworld_orbit_step140" + }, + "overworld_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear140", + "to": "$ear141", + "next": "@celestial.overworld_orbit_step141" + }, + "overworld_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear141", + "to": "$ear142", + "next": "@celestial.overworld_orbit_step142" + }, + "overworld_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear142", + "to": "$ear143", + "next": "@celestial.overworld_orbit_step143" + }, + "overworld_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear143", + "to": "$ear144", + "next": "@celestial.overworld_orbit_step144" + }, + "overworld_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear144", + "to": "$ear145", + "next": "@celestial.overworld_orbit_step145" + }, + "overworld_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear145", + "to": "$ear146", + "next": "@celestial.overworld_orbit_step146" + }, + "overworld_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear146", + "to": "$ear147", + "next": "@celestial.overworld_orbit_step147" + }, + "overworld_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear147", + "to": "$ear148", + "next": "@celestial.overworld_orbit_step148" + }, + "overworld_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear148", + "to": "$ear149", + "next": "@celestial.overworld_orbit_step149" + }, + "overworld_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear149", + "to": "$ear150", + "next": "@celestial.overworld_orbit_step150" + }, + "overworld_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear150", + "to": "$ear151", + "next": "@celestial.overworld_orbit_step151" + }, + "overworld_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear151", + "to": "$ear152", + "next": "@celestial.overworld_orbit_step152" + }, + "overworld_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear152", + "to": "$ear153", + "next": "@celestial.overworld_orbit_step153" + }, + "overworld_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear153", + "to": "$ear154", + "next": "@celestial.overworld_orbit_step154" + }, + "overworld_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear154", + "to": "$ear155", + "next": "@celestial.overworld_orbit_step155" + }, + "overworld_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear155", + "to": "$ear156", + "next": "@celestial.overworld_orbit_step156" + }, + "overworld_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear156", + "to": "$ear157", + "next": "@celestial.overworld_orbit_step157" + }, + "overworld_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear157", + "to": "$ear158", + "next": "@celestial.overworld_orbit_step158" + }, + "overworld_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear158", + "to": "$ear159", + "next": "@celestial.overworld_orbit_step159" + }, + "overworld_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear159", + "to": "$ear160", + "next": "@celestial.overworld_orbit_step160" + }, + "overworld_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear160", + "to": "$ear161", + "next": "@celestial.overworld_orbit_step161" + }, + "overworld_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear161", + "to": "$ear162", + "next": "@celestial.overworld_orbit_step162" + }, + "overworld_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear162", + "to": "$ear163", + "next": "@celestial.overworld_orbit_step163" + }, + "overworld_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear163", + "to": "$ear164", + "next": "@celestial.overworld_orbit_step164" + }, + "overworld_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear164", + "to": "$ear165", + "next": "@celestial.overworld_orbit_step165" + }, + "overworld_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear165", + "to": "$ear166", + "next": "@celestial.overworld_orbit_step166" + }, + "overworld_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear166", + "to": "$ear167", + "next": "@celestial.overworld_orbit_step167" + }, + "overworld_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear167", + "to": "$ear168", + "next": "@celestial.overworld_orbit_step168" + }, + "overworld_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear168", + "to": "$ear169", + "next": "@celestial.overworld_orbit_step169" + }, + "overworld_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear169", + "to": "$ear170", + "next": "@celestial.overworld_orbit_step170" + }, + "overworld_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear170", + "to": "$ear171", + "next": "@celestial.overworld_orbit_step171" + }, + "overworld_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear171", + "to": "$ear172", + "next": "@celestial.overworld_orbit_step172" + }, + "overworld_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear172", + "to": "$ear173", + "next": "@celestial.overworld_orbit_step173" + }, + "overworld_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear173", + "to": "$ear174", + "next": "@celestial.overworld_orbit_step174" + }, + "overworld_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear174", + "to": "$ear175", + "next": "@celestial.overworld_orbit_step175" + }, + "overworld_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear175", + "to": "$ear176", + "next": "@celestial.overworld_orbit_step176" + }, + "overworld_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear176", + "to": "$ear177", + "next": "@celestial.overworld_orbit_step177" + }, + "overworld_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear177", + "to": "$ear178", + "next": "@celestial.overworld_orbit_step178" + }, + "overworld_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear178", + "to": "$ear179", + "next": "@celestial.overworld_orbit_step179" + }, + "overworld_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear179", + "to": "$ear180", + "next": "@celestial.overworld_orbit_step180" + }, + "overworld_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear180", + "to": "$ear181", + "next": "@celestial.overworld_orbit_step181" + }, + "overworld_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear181", + "to": "$ear182", + "next": "@celestial.overworld_orbit_step182" + }, + "overworld_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear182", + "to": "$ear183", + "next": "@celestial.overworld_orbit_step183" + }, + "overworld_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear183", + "to": "$ear184", + "next": "@celestial.overworld_orbit_step184" + }, + "overworld_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear184", + "to": "$ear185", + "next": "@celestial.overworld_orbit_step185" + }, + "overworld_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear185", + "to": "$ear186", + "next": "@celestial.overworld_orbit_step186" + }, + "overworld_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear186", + "to": "$ear187", + "next": "@celestial.overworld_orbit_step187" + }, + "overworld_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear187", + "to": "$ear188", + "next": "@celestial.overworld_orbit_step188" + }, + "overworld_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear188", + "to": "$ear189", + "next": "@celestial.overworld_orbit_step189" + }, + "overworld_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear189", + "to": "$ear190", + "next": "@celestial.overworld_orbit_step190" + }, + "overworld_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear190", + "to": "$ear191", + "next": "@celestial.overworld_orbit_step191" + }, + "overworld_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear191", + "to": "$ear192", + "next": "@celestial.overworld_orbit_step192" + }, + "overworld_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear192", + "to": "$ear193", + "next": "@celestial.overworld_orbit_step193" + }, + "overworld_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear193", + "to": "$ear194", + "next": "@celestial.overworld_orbit_step194" + }, + "overworld_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear194", + "to": "$ear195", + "next": "@celestial.overworld_orbit_step195" + }, + "overworld_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear195", + "to": "$ear196", + "next": "@celestial.overworld_orbit_step196" + }, + "overworld_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear196", + "to": "$ear197", + "next": "@celestial.overworld_orbit_step197" + }, + "overworld_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear197", + "to": "$ear198", + "next": "@celestial.overworld_orbit_step198" + }, + "overworld_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear198", + "to": "$ear199", + "next": "@celestial.overworld_orbit_step199" + }, + "overworld_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear199", + "to": "$ear200", + "next": "@celestial.overworld_orbit_step200" + }, + "overworld_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear200", + "to": "$ear201", + "next": "@celestial.overworld_orbit_step201" + }, + "overworld_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear201", + "to": "$ear202", + "next": "@celestial.overworld_orbit_step202" + }, + "overworld_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear202", + "to": "$ear203", + "next": "@celestial.overworld_orbit_step203" + }, + "overworld_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear203", + "to": "$ear204", + "next": "@celestial.overworld_orbit_step204" + }, + "overworld_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear204", + "to": "$ear205", + "next": "@celestial.overworld_orbit_step205" + }, + "overworld_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear205", + "to": "$ear206", + "next": "@celestial.overworld_orbit_step206" + }, + "overworld_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear206", + "to": "$ear207", + "next": "@celestial.overworld_orbit_step207" + }, + "overworld_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear207", + "to": "$ear208", + "next": "@celestial.overworld_orbit_step208" + }, + "overworld_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear208", + "to": "$ear209", + "next": "@celestial.overworld_orbit_step209" + }, + "overworld_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear209", + "to": "$ear210", + "next": "@celestial.overworld_orbit_step210" + }, + "overworld_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear210", + "to": "$ear211", + "next": "@celestial.overworld_orbit_step211" + }, + "overworld_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear211", + "to": "$ear212", + "next": "@celestial.overworld_orbit_step212" + }, + "overworld_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear212", + "to": "$ear213", + "next": "@celestial.overworld_orbit_step213" + }, + "overworld_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear213", + "to": "$ear214", + "next": "@celestial.overworld_orbit_step214" + }, + "overworld_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear214", + "to": "$ear215", + "next": "@celestial.overworld_orbit_step215" + }, + "overworld_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear215", + "to": "$ear216", + "next": "@celestial.overworld_orbit_step216" + }, + "overworld_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear216", + "to": "$ear217", + "next": "@celestial.overworld_orbit_step217" + }, + "overworld_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear217", + "to": "$ear218", + "next": "@celestial.overworld_orbit_step218" + }, + "overworld_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear218", + "to": "$ear219", + "next": "@celestial.overworld_orbit_step219" + }, + "overworld_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear219", + "to": "$ear220", + "next": "@celestial.overworld_orbit_step220" + }, + "overworld_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear220", + "to": "$ear221", + "next": "@celestial.overworld_orbit_step221" + }, + "overworld_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear221", + "to": "$ear222", + "next": "@celestial.overworld_orbit_step222" + }, + "overworld_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear222", + "to": "$ear223", + "next": "@celestial.overworld_orbit_step223" + }, + "overworld_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear223", + "to": "$ear224", + "next": "@celestial.overworld_orbit_step224" + }, + "overworld_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear224", + "to": "$ear225", + "next": "@celestial.overworld_orbit_step225" + }, + "overworld_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear225", + "to": "$ear226", + "next": "@celestial.overworld_orbit_step226" + }, + "overworld_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear226", + "to": "$ear227", + "next": "@celestial.overworld_orbit_step227" + }, + "overworld_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear227", + "to": "$ear228", + "next": "@celestial.overworld_orbit_step228" + }, + "overworld_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear228", + "to": "$ear229", + "next": "@celestial.overworld_orbit_step229" + }, + "overworld_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear229", + "to": "$ear230", + "next": "@celestial.overworld_orbit_step230" + }, + "overworld_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear230", + "to": "$ear231", + "next": "@celestial.overworld_orbit_step231" + }, + "overworld_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear231", + "to": "$ear232", + "next": "@celestial.overworld_orbit_step232" + }, + "overworld_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear232", + "to": "$ear233", + "next": "@celestial.overworld_orbit_step233" + }, + "overworld_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear233", + "to": "$ear234", + "next": "@celestial.overworld_orbit_step234" + }, + "overworld_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear234", + "to": "$ear235", + "next": "@celestial.overworld_orbit_step235" + }, + "overworld_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear235", + "to": "$ear236", + "next": "@celestial.overworld_orbit_step236" + }, + "overworld_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear236", + "to": "$ear237", + "next": "@celestial.overworld_orbit_step237" + }, + "overworld_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear237", + "to": "$ear238", + "next": "@celestial.overworld_orbit_step238" + }, + "overworld_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear238", + "to": "$ear239", + "next": "@celestial.overworld_orbit_step239" + }, + "overworld_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear239", + "to": "$ear240", + "next": "@celestial.overworld_orbit_step240" + }, + "overworld_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear240", + "to": "$ear241", + "next": "@celestial.overworld_orbit_step241" + }, + "overworld_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear241", + "to": "$ear242", + "next": "@celestial.overworld_orbit_step242" + }, + "overworld_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear242", + "to": "$ear243", + "next": "@celestial.overworld_orbit_step243" + }, + "overworld_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear243", + "to": "$ear244", + "next": "@celestial.overworld_orbit_step244" + }, + "overworld_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear244", + "to": "$ear245", + "next": "@celestial.overworld_orbit_step245" + }, + "overworld_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear245", + "to": "$ear246", + "next": "@celestial.overworld_orbit_step246" + }, + "overworld_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear246", + "to": "$ear247", + "next": "@celestial.overworld_orbit_step247" + }, + "overworld_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear247", + "to": "$ear248", + "next": "@celestial.overworld_orbit_step248" + }, + "overworld_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear248", + "to": "$ear249", + "next": "@celestial.overworld_orbit_step249" + }, + "overworld_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear249", + "to": "$ear250", + "next": "@celestial.overworld_orbit_step250" + }, + "overworld_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear250", + "to": "$ear251", + "next": "@celestial.overworld_orbit_step251" + }, + "overworld_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear251", + "to": "$ear252", + "next": "@celestial.overworld_orbit_step252" + }, + "overworld_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear252", + "to": "$ear253", + "next": "@celestial.overworld_orbit_step253" + }, + "overworld_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear253", + "to": "$ear254", + "next": "@celestial.overworld_orbit_step254" + }, + "overworld_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear254", + "to": "$ear255", + "next": "@celestial.overworld_orbit_step255" + }, + "overworld_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear255", + "to": "$ear256", + "next": "@celestial.overworld_orbit_step256" + }, + "overworld_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ear256", + "to": "$ear1", + "next": "@celestial.overworld_orbit_step1" + }, + "mars_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar1", + "to": "$mar2", + "next": "@celestial.mars_orbit_step2" + }, + "mars_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar2", + "to": "$mar3", + "next": "@celestial.mars_orbit_step3" + }, + "mars_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar3", + "to": "$mar4", + "next": "@celestial.mars_orbit_step4" + }, + "mars_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar4", + "to": "$mar5", + "next": "@celestial.mars_orbit_step5" + }, + "mars_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar5", + "to": "$mar6", + "next": "@celestial.mars_orbit_step6" + }, + "mars_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar6", + "to": "$mar7", + "next": "@celestial.mars_orbit_step7" + }, + "mars_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar7", + "to": "$mar8", + "next": "@celestial.mars_orbit_step8" + }, + "mars_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar8", + "to": "$mar9", + "next": "@celestial.mars_orbit_step9" + }, + "mars_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar9", + "to": "$mar10", + "next": "@celestial.mars_orbit_step10" + }, + "mars_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar10", + "to": "$mar11", + "next": "@celestial.mars_orbit_step11" + }, + "mars_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar11", + "to": "$mar12", + "next": "@celestial.mars_orbit_step12" + }, + "mars_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar12", + "to": "$mar13", + "next": "@celestial.mars_orbit_step13" + }, + "mars_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar13", + "to": "$mar14", + "next": "@celestial.mars_orbit_step14" + }, + "mars_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar14", + "to": "$mar15", + "next": "@celestial.mars_orbit_step15" + }, + "mars_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar15", + "to": "$mar16", + "next": "@celestial.mars_orbit_step16" + }, + "mars_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar16", + "to": "$mar17", + "next": "@celestial.mars_orbit_step17" + }, + "mars_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar17", + "to": "$mar18", + "next": "@celestial.mars_orbit_step18" + }, + "mars_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar18", + "to": "$mar19", + "next": "@celestial.mars_orbit_step19" + }, + "mars_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar19", + "to": "$mar20", + "next": "@celestial.mars_orbit_step20" + }, + "mars_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar20", + "to": "$mar21", + "next": "@celestial.mars_orbit_step21" + }, + "mars_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar21", + "to": "$mar22", + "next": "@celestial.mars_orbit_step22" + }, + "mars_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar22", + "to": "$mar23", + "next": "@celestial.mars_orbit_step23" + }, + "mars_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar23", + "to": "$mar24", + "next": "@celestial.mars_orbit_step24" + }, + "mars_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar24", + "to": "$mar25", + "next": "@celestial.mars_orbit_step25" + }, + "mars_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar25", + "to": "$mar26", + "next": "@celestial.mars_orbit_step26" + }, + "mars_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar26", + "to": "$mar27", + "next": "@celestial.mars_orbit_step27" + }, + "mars_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar27", + "to": "$mar28", + "next": "@celestial.mars_orbit_step28" + }, + "mars_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar28", + "to": "$mar29", + "next": "@celestial.mars_orbit_step29" + }, + "mars_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar29", + "to": "$mar30", + "next": "@celestial.mars_orbit_step30" + }, + "mars_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar30", + "to": "$mar31", + "next": "@celestial.mars_orbit_step31" + }, + "mars_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar31", + "to": "$mar32", + "next": "@celestial.mars_orbit_step32" + }, + "mars_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar32", + "to": "$mar33", + "next": "@celestial.mars_orbit_step33" + }, + "mars_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar33", + "to": "$mar34", + "next": "@celestial.mars_orbit_step34" + }, + "mars_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar34", + "to": "$mar35", + "next": "@celestial.mars_orbit_step35" + }, + "mars_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar35", + "to": "$mar36", + "next": "@celestial.mars_orbit_step36" + }, + "mars_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar36", + "to": "$mar37", + "next": "@celestial.mars_orbit_step37" + }, + "mars_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar37", + "to": "$mar38", + "next": "@celestial.mars_orbit_step38" + }, + "mars_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar38", + "to": "$mar39", + "next": "@celestial.mars_orbit_step39" + }, + "mars_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar39", + "to": "$mar40", + "next": "@celestial.mars_orbit_step40" + }, + "mars_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar40", + "to": "$mar41", + "next": "@celestial.mars_orbit_step41" + }, + "mars_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar41", + "to": "$mar42", + "next": "@celestial.mars_orbit_step42" + }, + "mars_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar42", + "to": "$mar43", + "next": "@celestial.mars_orbit_step43" + }, + "mars_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar43", + "to": "$mar44", + "next": "@celestial.mars_orbit_step44" + }, + "mars_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar44", + "to": "$mar45", + "next": "@celestial.mars_orbit_step45" + }, + "mars_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar45", + "to": "$mar46", + "next": "@celestial.mars_orbit_step46" + }, + "mars_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar46", + "to": "$mar47", + "next": "@celestial.mars_orbit_step47" + }, + "mars_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar47", + "to": "$mar48", + "next": "@celestial.mars_orbit_step48" + }, + "mars_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar48", + "to": "$mar49", + "next": "@celestial.mars_orbit_step49" + }, + "mars_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar49", + "to": "$mar50", + "next": "@celestial.mars_orbit_step50" + }, + "mars_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar50", + "to": "$mar51", + "next": "@celestial.mars_orbit_step51" + }, + "mars_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar51", + "to": "$mar52", + "next": "@celestial.mars_orbit_step52" + }, + "mars_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar52", + "to": "$mar53", + "next": "@celestial.mars_orbit_step53" + }, + "mars_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar53", + "to": "$mar54", + "next": "@celestial.mars_orbit_step54" + }, + "mars_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar54", + "to": "$mar55", + "next": "@celestial.mars_orbit_step55" + }, + "mars_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar55", + "to": "$mar56", + "next": "@celestial.mars_orbit_step56" + }, + "mars_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar56", + "to": "$mar57", + "next": "@celestial.mars_orbit_step57" + }, + "mars_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar57", + "to": "$mar58", + "next": "@celestial.mars_orbit_step58" + }, + "mars_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar58", + "to": "$mar59", + "next": "@celestial.mars_orbit_step59" + }, + "mars_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar59", + "to": "$mar60", + "next": "@celestial.mars_orbit_step60" + }, + "mars_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar60", + "to": "$mar61", + "next": "@celestial.mars_orbit_step61" + }, + "mars_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar61", + "to": "$mar62", + "next": "@celestial.mars_orbit_step62" + }, + "mars_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar62", + "to": "$mar63", + "next": "@celestial.mars_orbit_step63" + }, + "mars_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar63", + "to": "$mar64", + "next": "@celestial.mars_orbit_step64" + }, + "mars_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar64", + "to": "$mar65", + "next": "@celestial.mars_orbit_step65" + }, + "mars_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar65", + "to": "$mar66", + "next": "@celestial.mars_orbit_step66" + }, + "mars_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar66", + "to": "$mar67", + "next": "@celestial.mars_orbit_step67" + }, + "mars_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar67", + "to": "$mar68", + "next": "@celestial.mars_orbit_step68" + }, + "mars_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar68", + "to": "$mar69", + "next": "@celestial.mars_orbit_step69" + }, + "mars_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar69", + "to": "$mar70", + "next": "@celestial.mars_orbit_step70" + }, + "mars_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar70", + "to": "$mar71", + "next": "@celestial.mars_orbit_step71" + }, + "mars_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar71", + "to": "$mar72", + "next": "@celestial.mars_orbit_step72" + }, + "mars_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar72", + "to": "$mar73", + "next": "@celestial.mars_orbit_step73" + }, + "mars_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar73", + "to": "$mar74", + "next": "@celestial.mars_orbit_step74" + }, + "mars_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar74", + "to": "$mar75", + "next": "@celestial.mars_orbit_step75" + }, + "mars_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar75", + "to": "$mar76", + "next": "@celestial.mars_orbit_step76" + }, + "mars_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar76", + "to": "$mar77", + "next": "@celestial.mars_orbit_step77" + }, + "mars_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar77", + "to": "$mar78", + "next": "@celestial.mars_orbit_step78" + }, + "mars_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar78", + "to": "$mar79", + "next": "@celestial.mars_orbit_step79" + }, + "mars_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar79", + "to": "$mar80", + "next": "@celestial.mars_orbit_step80" + }, + "mars_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar80", + "to": "$mar81", + "next": "@celestial.mars_orbit_step81" + }, + "mars_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar81", + "to": "$mar82", + "next": "@celestial.mars_orbit_step82" + }, + "mars_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar82", + "to": "$mar83", + "next": "@celestial.mars_orbit_step83" + }, + "mars_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar83", + "to": "$mar84", + "next": "@celestial.mars_orbit_step84" + }, + "mars_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar84", + "to": "$mar85", + "next": "@celestial.mars_orbit_step85" + }, + "mars_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar85", + "to": "$mar86", + "next": "@celestial.mars_orbit_step86" + }, + "mars_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar86", + "to": "$mar87", + "next": "@celestial.mars_orbit_step87" + }, + "mars_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar87", + "to": "$mar88", + "next": "@celestial.mars_orbit_step88" + }, + "mars_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar88", + "to": "$mar89", + "next": "@celestial.mars_orbit_step89" + }, + "mars_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar89", + "to": "$mar90", + "next": "@celestial.mars_orbit_step90" + }, + "mars_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar90", + "to": "$mar91", + "next": "@celestial.mars_orbit_step91" + }, + "mars_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar91", + "to": "$mar92", + "next": "@celestial.mars_orbit_step92" + }, + "mars_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar92", + "to": "$mar93", + "next": "@celestial.mars_orbit_step93" + }, + "mars_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar93", + "to": "$mar94", + "next": "@celestial.mars_orbit_step94" + }, + "mars_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar94", + "to": "$mar95", + "next": "@celestial.mars_orbit_step95" + }, + "mars_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar95", + "to": "$mar96", + "next": "@celestial.mars_orbit_step96" + }, + "mars_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar96", + "to": "$mar97", + "next": "@celestial.mars_orbit_step97" + }, + "mars_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar97", + "to": "$mar98", + "next": "@celestial.mars_orbit_step98" + }, + "mars_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar98", + "to": "$mar99", + "next": "@celestial.mars_orbit_step99" + }, + "mars_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar99", + "to": "$mar100", + "next": "@celestial.mars_orbit_step100" + }, + "mars_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar100", + "to": "$mar101", + "next": "@celestial.mars_orbit_step101" + }, + "mars_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar101", + "to": "$mar102", + "next": "@celestial.mars_orbit_step102" + }, + "mars_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar102", + "to": "$mar103", + "next": "@celestial.mars_orbit_step103" + }, + "mars_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar103", + "to": "$mar104", + "next": "@celestial.mars_orbit_step104" + }, + "mars_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar104", + "to": "$mar105", + "next": "@celestial.mars_orbit_step105" + }, + "mars_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar105", + "to": "$mar106", + "next": "@celestial.mars_orbit_step106" + }, + "mars_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar106", + "to": "$mar107", + "next": "@celestial.mars_orbit_step107" + }, + "mars_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar107", + "to": "$mar108", + "next": "@celestial.mars_orbit_step108" + }, + "mars_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar108", + "to": "$mar109", + "next": "@celestial.mars_orbit_step109" + }, + "mars_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar109", + "to": "$mar110", + "next": "@celestial.mars_orbit_step110" + }, + "mars_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar110", + "to": "$mar111", + "next": "@celestial.mars_orbit_step111" + }, + "mars_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar111", + "to": "$mar112", + "next": "@celestial.mars_orbit_step112" + }, + "mars_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar112", + "to": "$mar113", + "next": "@celestial.mars_orbit_step113" + }, + "mars_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar113", + "to": "$mar114", + "next": "@celestial.mars_orbit_step114" + }, + "mars_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar114", + "to": "$mar115", + "next": "@celestial.mars_orbit_step115" + }, + "mars_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar115", + "to": "$mar116", + "next": "@celestial.mars_orbit_step116" + }, + "mars_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar116", + "to": "$mar117", + "next": "@celestial.mars_orbit_step117" + }, + "mars_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar117", + "to": "$mar118", + "next": "@celestial.mars_orbit_step118" + }, + "mars_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar118", + "to": "$mar119", + "next": "@celestial.mars_orbit_step119" + }, + "mars_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar119", + "to": "$mar120", + "next": "@celestial.mars_orbit_step120" + }, + "mars_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar120", + "to": "$mar121", + "next": "@celestial.mars_orbit_step121" + }, + "mars_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar121", + "to": "$mar122", + "next": "@celestial.mars_orbit_step122" + }, + "mars_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar122", + "to": "$mar123", + "next": "@celestial.mars_orbit_step123" + }, + "mars_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar123", + "to": "$mar124", + "next": "@celestial.mars_orbit_step124" + }, + "mars_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar124", + "to": "$mar125", + "next": "@celestial.mars_orbit_step125" + }, + "mars_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar125", + "to": "$mar126", + "next": "@celestial.mars_orbit_step126" + }, + "mars_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar126", + "to": "$mar127", + "next": "@celestial.mars_orbit_step127" + }, + "mars_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar127", + "to": "$mar128", + "next": "@celestial.mars_orbit_step128" + }, + "mars_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar128", + "to": "$mar129", + "next": "@celestial.mars_orbit_step129" + }, + "mars_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar129", + "to": "$mar130", + "next": "@celestial.mars_orbit_step130" + }, + "mars_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar130", + "to": "$mar131", + "next": "@celestial.mars_orbit_step131" + }, + "mars_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar131", + "to": "$mar132", + "next": "@celestial.mars_orbit_step132" + }, + "mars_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar132", + "to": "$mar133", + "next": "@celestial.mars_orbit_step133" + }, + "mars_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar133", + "to": "$mar134", + "next": "@celestial.mars_orbit_step134" + }, + "mars_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar134", + "to": "$mar135", + "next": "@celestial.mars_orbit_step135" + }, + "mars_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar135", + "to": "$mar136", + "next": "@celestial.mars_orbit_step136" + }, + "mars_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar136", + "to": "$mar137", + "next": "@celestial.mars_orbit_step137" + }, + "mars_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar137", + "to": "$mar138", + "next": "@celestial.mars_orbit_step138" + }, + "mars_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar138", + "to": "$mar139", + "next": "@celestial.mars_orbit_step139" + }, + "mars_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar139", + "to": "$mar140", + "next": "@celestial.mars_orbit_step140" + }, + "mars_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar140", + "to": "$mar141", + "next": "@celestial.mars_orbit_step141" + }, + "mars_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar141", + "to": "$mar142", + "next": "@celestial.mars_orbit_step142" + }, + "mars_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar142", + "to": "$mar143", + "next": "@celestial.mars_orbit_step143" + }, + "mars_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar143", + "to": "$mar144", + "next": "@celestial.mars_orbit_step144" + }, + "mars_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar144", + "to": "$mar145", + "next": "@celestial.mars_orbit_step145" + }, + "mars_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar145", + "to": "$mar146", + "next": "@celestial.mars_orbit_step146" + }, + "mars_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar146", + "to": "$mar147", + "next": "@celestial.mars_orbit_step147" + }, + "mars_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar147", + "to": "$mar148", + "next": "@celestial.mars_orbit_step148" + }, + "mars_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar148", + "to": "$mar149", + "next": "@celestial.mars_orbit_step149" + }, + "mars_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar149", + "to": "$mar150", + "next": "@celestial.mars_orbit_step150" + }, + "mars_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar150", + "to": "$mar151", + "next": "@celestial.mars_orbit_step151" + }, + "mars_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar151", + "to": "$mar152", + "next": "@celestial.mars_orbit_step152" + }, + "mars_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar152", + "to": "$mar153", + "next": "@celestial.mars_orbit_step153" + }, + "mars_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar153", + "to": "$mar154", + "next": "@celestial.mars_orbit_step154" + }, + "mars_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar154", + "to": "$mar155", + "next": "@celestial.mars_orbit_step155" + }, + "mars_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar155", + "to": "$mar156", + "next": "@celestial.mars_orbit_step156" + }, + "mars_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar156", + "to": "$mar157", + "next": "@celestial.mars_orbit_step157" + }, + "mars_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar157", + "to": "$mar158", + "next": "@celestial.mars_orbit_step158" + }, + "mars_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar158", + "to": "$mar159", + "next": "@celestial.mars_orbit_step159" + }, + "mars_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar159", + "to": "$mar160", + "next": "@celestial.mars_orbit_step160" + }, + "mars_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar160", + "to": "$mar161", + "next": "@celestial.mars_orbit_step161" + }, + "mars_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar161", + "to": "$mar162", + "next": "@celestial.mars_orbit_step162" + }, + "mars_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar162", + "to": "$mar163", + "next": "@celestial.mars_orbit_step163" + }, + "mars_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar163", + "to": "$mar164", + "next": "@celestial.mars_orbit_step164" + }, + "mars_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar164", + "to": "$mar165", + "next": "@celestial.mars_orbit_step165" + }, + "mars_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar165", + "to": "$mar166", + "next": "@celestial.mars_orbit_step166" + }, + "mars_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar166", + "to": "$mar167", + "next": "@celestial.mars_orbit_step167" + }, + "mars_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar167", + "to": "$mar168", + "next": "@celestial.mars_orbit_step168" + }, + "mars_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar168", + "to": "$mar169", + "next": "@celestial.mars_orbit_step169" + }, + "mars_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar169", + "to": "$mar170", + "next": "@celestial.mars_orbit_step170" + }, + "mars_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar170", + "to": "$mar171", + "next": "@celestial.mars_orbit_step171" + }, + "mars_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar171", + "to": "$mar172", + "next": "@celestial.mars_orbit_step172" + }, + "mars_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar172", + "to": "$mar173", + "next": "@celestial.mars_orbit_step173" + }, + "mars_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar173", + "to": "$mar174", + "next": "@celestial.mars_orbit_step174" + }, + "mars_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar174", + "to": "$mar175", + "next": "@celestial.mars_orbit_step175" + }, + "mars_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar175", + "to": "$mar176", + "next": "@celestial.mars_orbit_step176" + }, + "mars_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar176", + "to": "$mar177", + "next": "@celestial.mars_orbit_step177" + }, + "mars_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar177", + "to": "$mar178", + "next": "@celestial.mars_orbit_step178" + }, + "mars_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar178", + "to": "$mar179", + "next": "@celestial.mars_orbit_step179" + }, + "mars_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar179", + "to": "$mar180", + "next": "@celestial.mars_orbit_step180" + }, + "mars_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar180", + "to": "$mar181", + "next": "@celestial.mars_orbit_step181" + }, + "mars_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar181", + "to": "$mar182", + "next": "@celestial.mars_orbit_step182" + }, + "mars_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar182", + "to": "$mar183", + "next": "@celestial.mars_orbit_step183" + }, + "mars_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar183", + "to": "$mar184", + "next": "@celestial.mars_orbit_step184" + }, + "mars_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar184", + "to": "$mar185", + "next": "@celestial.mars_orbit_step185" + }, + "mars_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar185", + "to": "$mar186", + "next": "@celestial.mars_orbit_step186" + }, + "mars_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar186", + "to": "$mar187", + "next": "@celestial.mars_orbit_step187" + }, + "mars_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar187", + "to": "$mar188", + "next": "@celestial.mars_orbit_step188" + }, + "mars_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar188", + "to": "$mar189", + "next": "@celestial.mars_orbit_step189" + }, + "mars_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar189", + "to": "$mar190", + "next": "@celestial.mars_orbit_step190" + }, + "mars_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar190", + "to": "$mar191", + "next": "@celestial.mars_orbit_step191" + }, + "mars_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar191", + "to": "$mar192", + "next": "@celestial.mars_orbit_step192" + }, + "mars_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar192", + "to": "$mar193", + "next": "@celestial.mars_orbit_step193" + }, + "mars_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar193", + "to": "$mar194", + "next": "@celestial.mars_orbit_step194" + }, + "mars_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar194", + "to": "$mar195", + "next": "@celestial.mars_orbit_step195" + }, + "mars_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar195", + "to": "$mar196", + "next": "@celestial.mars_orbit_step196" + }, + "mars_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar196", + "to": "$mar197", + "next": "@celestial.mars_orbit_step197" + }, + "mars_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar197", + "to": "$mar198", + "next": "@celestial.mars_orbit_step198" + }, + "mars_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar198", + "to": "$mar199", + "next": "@celestial.mars_orbit_step199" + }, + "mars_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar199", + "to": "$mar200", + "next": "@celestial.mars_orbit_step200" + }, + "mars_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar200", + "to": "$mar201", + "next": "@celestial.mars_orbit_step201" + }, + "mars_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar201", + "to": "$mar202", + "next": "@celestial.mars_orbit_step202" + }, + "mars_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar202", + "to": "$mar203", + "next": "@celestial.mars_orbit_step203" + }, + "mars_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar203", + "to": "$mar204", + "next": "@celestial.mars_orbit_step204" + }, + "mars_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar204", + "to": "$mar205", + "next": "@celestial.mars_orbit_step205" + }, + "mars_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar205", + "to": "$mar206", + "next": "@celestial.mars_orbit_step206" + }, + "mars_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar206", + "to": "$mar207", + "next": "@celestial.mars_orbit_step207" + }, + "mars_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar207", + "to": "$mar208", + "next": "@celestial.mars_orbit_step208" + }, + "mars_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar208", + "to": "$mar209", + "next": "@celestial.mars_orbit_step209" + }, + "mars_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar209", + "to": "$mar210", + "next": "@celestial.mars_orbit_step210" + }, + "mars_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar210", + "to": "$mar211", + "next": "@celestial.mars_orbit_step211" + }, + "mars_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar211", + "to": "$mar212", + "next": "@celestial.mars_orbit_step212" + }, + "mars_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar212", + "to": "$mar213", + "next": "@celestial.mars_orbit_step213" + }, + "mars_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar213", + "to": "$mar214", + "next": "@celestial.mars_orbit_step214" + }, + "mars_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar214", + "to": "$mar215", + "next": "@celestial.mars_orbit_step215" + }, + "mars_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar215", + "to": "$mar216", + "next": "@celestial.mars_orbit_step216" + }, + "mars_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar216", + "to": "$mar217", + "next": "@celestial.mars_orbit_step217" + }, + "mars_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar217", + "to": "$mar218", + "next": "@celestial.mars_orbit_step218" + }, + "mars_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar218", + "to": "$mar219", + "next": "@celestial.mars_orbit_step219" + }, + "mars_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar219", + "to": "$mar220", + "next": "@celestial.mars_orbit_step220" + }, + "mars_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar220", + "to": "$mar221", + "next": "@celestial.mars_orbit_step221" + }, + "mars_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar221", + "to": "$mar222", + "next": "@celestial.mars_orbit_step222" + }, + "mars_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar222", + "to": "$mar223", + "next": "@celestial.mars_orbit_step223" + }, + "mars_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar223", + "to": "$mar224", + "next": "@celestial.mars_orbit_step224" + }, + "mars_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar224", + "to": "$mar225", + "next": "@celestial.mars_orbit_step225" + }, + "mars_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar225", + "to": "$mar226", + "next": "@celestial.mars_orbit_step226" + }, + "mars_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar226", + "to": "$mar227", + "next": "@celestial.mars_orbit_step227" + }, + "mars_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar227", + "to": "$mar228", + "next": "@celestial.mars_orbit_step228" + }, + "mars_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar228", + "to": "$mar229", + "next": "@celestial.mars_orbit_step229" + }, + "mars_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar229", + "to": "$mar230", + "next": "@celestial.mars_orbit_step230" + }, + "mars_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar230", + "to": "$mar231", + "next": "@celestial.mars_orbit_step231" + }, + "mars_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar231", + "to": "$mar232", + "next": "@celestial.mars_orbit_step232" + }, + "mars_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar232", + "to": "$mar233", + "next": "@celestial.mars_orbit_step233" + }, + "mars_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar233", + "to": "$mar234", + "next": "@celestial.mars_orbit_step234" + }, + "mars_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar234", + "to": "$mar235", + "next": "@celestial.mars_orbit_step235" + }, + "mars_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar235", + "to": "$mar236", + "next": "@celestial.mars_orbit_step236" + }, + "mars_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar236", + "to": "$mar237", + "next": "@celestial.mars_orbit_step237" + }, + "mars_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar237", + "to": "$mar238", + "next": "@celestial.mars_orbit_step238" + }, + "mars_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar238", + "to": "$mar239", + "next": "@celestial.mars_orbit_step239" + }, + "mars_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar239", + "to": "$mar240", + "next": "@celestial.mars_orbit_step240" + }, + "mars_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar240", + "to": "$mar241", + "next": "@celestial.mars_orbit_step241" + }, + "mars_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar241", + "to": "$mar242", + "next": "@celestial.mars_orbit_step242" + }, + "mars_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar242", + "to": "$mar243", + "next": "@celestial.mars_orbit_step243" + }, + "mars_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar243", + "to": "$mar244", + "next": "@celestial.mars_orbit_step244" + }, + "mars_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar244", + "to": "$mar245", + "next": "@celestial.mars_orbit_step245" + }, + "mars_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar245", + "to": "$mar246", + "next": "@celestial.mars_orbit_step246" + }, + "mars_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar246", + "to": "$mar247", + "next": "@celestial.mars_orbit_step247" + }, + "mars_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar247", + "to": "$mar248", + "next": "@celestial.mars_orbit_step248" + }, + "mars_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar248", + "to": "$mar249", + "next": "@celestial.mars_orbit_step249" + }, + "mars_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar249", + "to": "$mar250", + "next": "@celestial.mars_orbit_step250" + }, + "mars_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar250", + "to": "$mar251", + "next": "@celestial.mars_orbit_step251" + }, + "mars_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar251", + "to": "$mar252", + "next": "@celestial.mars_orbit_step252" + }, + "mars_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar252", + "to": "$mar253", + "next": "@celestial.mars_orbit_step253" + }, + "mars_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar253", + "to": "$mar254", + "next": "@celestial.mars_orbit_step254" + }, + "mars_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar254", + "to": "$mar255", + "next": "@celestial.mars_orbit_step255" + }, + "mars_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar255", + "to": "$mar256", + "next": "@celestial.mars_orbit_step256" + }, + "mars_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$mar256", + "to": "$mar1", + "next": "@celestial.mars_orbit_step1" + }, + "asteroids_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast1", + "to": "$ast2", + "next": "@celestial.asteroids_orbit_step2" + }, + "asteroids_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast2", + "to": "$ast3", + "next": "@celestial.asteroids_orbit_step3" + }, + "asteroids_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast3", + "to": "$ast4", + "next": "@celestial.asteroids_orbit_step4" + }, + "asteroids_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast4", + "to": "$ast5", + "next": "@celestial.asteroids_orbit_step5" + }, + "asteroids_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast5", + "to": "$ast6", + "next": "@celestial.asteroids_orbit_step6" + }, + "asteroids_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast6", + "to": "$ast7", + "next": "@celestial.asteroids_orbit_step7" + }, + "asteroids_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast7", + "to": "$ast8", + "next": "@celestial.asteroids_orbit_step8" + }, + "asteroids_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast8", + "to": "$ast9", + "next": "@celestial.asteroids_orbit_step9" + }, + "asteroids_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast9", + "to": "$ast10", + "next": "@celestial.asteroids_orbit_step10" + }, + "asteroids_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast10", + "to": "$ast11", + "next": "@celestial.asteroids_orbit_step11" + }, + "asteroids_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast11", + "to": "$ast12", + "next": "@celestial.asteroids_orbit_step12" + }, + "asteroids_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast12", + "to": "$ast13", + "next": "@celestial.asteroids_orbit_step13" + }, + "asteroids_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast13", + "to": "$ast14", + "next": "@celestial.asteroids_orbit_step14" + }, + "asteroids_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast14", + "to": "$ast15", + "next": "@celestial.asteroids_orbit_step15" + }, + "asteroids_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast15", + "to": "$ast16", + "next": "@celestial.asteroids_orbit_step16" + }, + "asteroids_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast16", + "to": "$ast17", + "next": "@celestial.asteroids_orbit_step17" + }, + "asteroids_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast17", + "to": "$ast18", + "next": "@celestial.asteroids_orbit_step18" + }, + "asteroids_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast18", + "to": "$ast19", + "next": "@celestial.asteroids_orbit_step19" + }, + "asteroids_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast19", + "to": "$ast20", + "next": "@celestial.asteroids_orbit_step20" + }, + "asteroids_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast20", + "to": "$ast21", + "next": "@celestial.asteroids_orbit_step21" + }, + "asteroids_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast21", + "to": "$ast22", + "next": "@celestial.asteroids_orbit_step22" + }, + "asteroids_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast22", + "to": "$ast23", + "next": "@celestial.asteroids_orbit_step23" + }, + "asteroids_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast23", + "to": "$ast24", + "next": "@celestial.asteroids_orbit_step24" + }, + "asteroids_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast24", + "to": "$ast25", + "next": "@celestial.asteroids_orbit_step25" + }, + "asteroids_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast25", + "to": "$ast26", + "next": "@celestial.asteroids_orbit_step26" + }, + "asteroids_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast26", + "to": "$ast27", + "next": "@celestial.asteroids_orbit_step27" + }, + "asteroids_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast27", + "to": "$ast28", + "next": "@celestial.asteroids_orbit_step28" + }, + "asteroids_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast28", + "to": "$ast29", + "next": "@celestial.asteroids_orbit_step29" + }, + "asteroids_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast29", + "to": "$ast30", + "next": "@celestial.asteroids_orbit_step30" + }, + "asteroids_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast30", + "to": "$ast31", + "next": "@celestial.asteroids_orbit_step31" + }, + "asteroids_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast31", + "to": "$ast32", + "next": "@celestial.asteroids_orbit_step32" + }, + "asteroids_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast32", + "to": "$ast33", + "next": "@celestial.asteroids_orbit_step33" + }, + "asteroids_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast33", + "to": "$ast34", + "next": "@celestial.asteroids_orbit_step34" + }, + "asteroids_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast34", + "to": "$ast35", + "next": "@celestial.asteroids_orbit_step35" + }, + "asteroids_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast35", + "to": "$ast36", + "next": "@celestial.asteroids_orbit_step36" + }, + "asteroids_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast36", + "to": "$ast37", + "next": "@celestial.asteroids_orbit_step37" + }, + "asteroids_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast37", + "to": "$ast38", + "next": "@celestial.asteroids_orbit_step38" + }, + "asteroids_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast38", + "to": "$ast39", + "next": "@celestial.asteroids_orbit_step39" + }, + "asteroids_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast39", + "to": "$ast40", + "next": "@celestial.asteroids_orbit_step40" + }, + "asteroids_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast40", + "to": "$ast41", + "next": "@celestial.asteroids_orbit_step41" + }, + "asteroids_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast41", + "to": "$ast42", + "next": "@celestial.asteroids_orbit_step42" + }, + "asteroids_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast42", + "to": "$ast43", + "next": "@celestial.asteroids_orbit_step43" + }, + "asteroids_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast43", + "to": "$ast44", + "next": "@celestial.asteroids_orbit_step44" + }, + "asteroids_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast44", + "to": "$ast45", + "next": "@celestial.asteroids_orbit_step45" + }, + "asteroids_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast45", + "to": "$ast46", + "next": "@celestial.asteroids_orbit_step46" + }, + "asteroids_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast46", + "to": "$ast47", + "next": "@celestial.asteroids_orbit_step47" + }, + "asteroids_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast47", + "to": "$ast48", + "next": "@celestial.asteroids_orbit_step48" + }, + "asteroids_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast48", + "to": "$ast49", + "next": "@celestial.asteroids_orbit_step49" + }, + "asteroids_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast49", + "to": "$ast50", + "next": "@celestial.asteroids_orbit_step50" + }, + "asteroids_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast50", + "to": "$ast51", + "next": "@celestial.asteroids_orbit_step51" + }, + "asteroids_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast51", + "to": "$ast52", + "next": "@celestial.asteroids_orbit_step52" + }, + "asteroids_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast52", + "to": "$ast53", + "next": "@celestial.asteroids_orbit_step53" + }, + "asteroids_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast53", + "to": "$ast54", + "next": "@celestial.asteroids_orbit_step54" + }, + "asteroids_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast54", + "to": "$ast55", + "next": "@celestial.asteroids_orbit_step55" + }, + "asteroids_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast55", + "to": "$ast56", + "next": "@celestial.asteroids_orbit_step56" + }, + "asteroids_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast56", + "to": "$ast57", + "next": "@celestial.asteroids_orbit_step57" + }, + "asteroids_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast57", + "to": "$ast58", + "next": "@celestial.asteroids_orbit_step58" + }, + "asteroids_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast58", + "to": "$ast59", + "next": "@celestial.asteroids_orbit_step59" + }, + "asteroids_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast59", + "to": "$ast60", + "next": "@celestial.asteroids_orbit_step60" + }, + "asteroids_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast60", + "to": "$ast61", + "next": "@celestial.asteroids_orbit_step61" + }, + "asteroids_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast61", + "to": "$ast62", + "next": "@celestial.asteroids_orbit_step62" + }, + "asteroids_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast62", + "to": "$ast63", + "next": "@celestial.asteroids_orbit_step63" + }, + "asteroids_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast63", + "to": "$ast64", + "next": "@celestial.asteroids_orbit_step64" + }, + "asteroids_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast64", + "to": "$ast65", + "next": "@celestial.asteroids_orbit_step65" + }, + "asteroids_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast65", + "to": "$ast66", + "next": "@celestial.asteroids_orbit_step66" + }, + "asteroids_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast66", + "to": "$ast67", + "next": "@celestial.asteroids_orbit_step67" + }, + "asteroids_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast67", + "to": "$ast68", + "next": "@celestial.asteroids_orbit_step68" + }, + "asteroids_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast68", + "to": "$ast69", + "next": "@celestial.asteroids_orbit_step69" + }, + "asteroids_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast69", + "to": "$ast70", + "next": "@celestial.asteroids_orbit_step70" + }, + "asteroids_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast70", + "to": "$ast71", + "next": "@celestial.asteroids_orbit_step71" + }, + "asteroids_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast71", + "to": "$ast72", + "next": "@celestial.asteroids_orbit_step72" + }, + "asteroids_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast72", + "to": "$ast73", + "next": "@celestial.asteroids_orbit_step73" + }, + "asteroids_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast73", + "to": "$ast74", + "next": "@celestial.asteroids_orbit_step74" + }, + "asteroids_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast74", + "to": "$ast75", + "next": "@celestial.asteroids_orbit_step75" + }, + "asteroids_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast75", + "to": "$ast76", + "next": "@celestial.asteroids_orbit_step76" + }, + "asteroids_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast76", + "to": "$ast77", + "next": "@celestial.asteroids_orbit_step77" + }, + "asteroids_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast77", + "to": "$ast78", + "next": "@celestial.asteroids_orbit_step78" + }, + "asteroids_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast78", + "to": "$ast79", + "next": "@celestial.asteroids_orbit_step79" + }, + "asteroids_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast79", + "to": "$ast80", + "next": "@celestial.asteroids_orbit_step80" + }, + "asteroids_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast80", + "to": "$ast81", + "next": "@celestial.asteroids_orbit_step81" + }, + "asteroids_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast81", + "to": "$ast82", + "next": "@celestial.asteroids_orbit_step82" + }, + "asteroids_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast82", + "to": "$ast83", + "next": "@celestial.asteroids_orbit_step83" + }, + "asteroids_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast83", + "to": "$ast84", + "next": "@celestial.asteroids_orbit_step84" + }, + "asteroids_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast84", + "to": "$ast85", + "next": "@celestial.asteroids_orbit_step85" + }, + "asteroids_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast85", + "to": "$ast86", + "next": "@celestial.asteroids_orbit_step86" + }, + "asteroids_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast86", + "to": "$ast87", + "next": "@celestial.asteroids_orbit_step87" + }, + "asteroids_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast87", + "to": "$ast88", + "next": "@celestial.asteroids_orbit_step88" + }, + "asteroids_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast88", + "to": "$ast89", + "next": "@celestial.asteroids_orbit_step89" + }, + "asteroids_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast89", + "to": "$ast90", + "next": "@celestial.asteroids_orbit_step90" + }, + "asteroids_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast90", + "to": "$ast91", + "next": "@celestial.asteroids_orbit_step91" + }, + "asteroids_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast91", + "to": "$ast92", + "next": "@celestial.asteroids_orbit_step92" + }, + "asteroids_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast92", + "to": "$ast93", + "next": "@celestial.asteroids_orbit_step93" + }, + "asteroids_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast93", + "to": "$ast94", + "next": "@celestial.asteroids_orbit_step94" + }, + "asteroids_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast94", + "to": "$ast95", + "next": "@celestial.asteroids_orbit_step95" + }, + "asteroids_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast95", + "to": "$ast96", + "next": "@celestial.asteroids_orbit_step96" + }, + "asteroids_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast96", + "to": "$ast97", + "next": "@celestial.asteroids_orbit_step97" + }, + "asteroids_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast97", + "to": "$ast98", + "next": "@celestial.asteroids_orbit_step98" + }, + "asteroids_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast98", + "to": "$ast99", + "next": "@celestial.asteroids_orbit_step99" + }, + "asteroids_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast99", + "to": "$ast100", + "next": "@celestial.asteroids_orbit_step100" + }, + "asteroids_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast100", + "to": "$ast101", + "next": "@celestial.asteroids_orbit_step101" + }, + "asteroids_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast101", + "to": "$ast102", + "next": "@celestial.asteroids_orbit_step102" + }, + "asteroids_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast102", + "to": "$ast103", + "next": "@celestial.asteroids_orbit_step103" + }, + "asteroids_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast103", + "to": "$ast104", + "next": "@celestial.asteroids_orbit_step104" + }, + "asteroids_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast104", + "to": "$ast105", + "next": "@celestial.asteroids_orbit_step105" + }, + "asteroids_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast105", + "to": "$ast106", + "next": "@celestial.asteroids_orbit_step106" + }, + "asteroids_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast106", + "to": "$ast107", + "next": "@celestial.asteroids_orbit_step107" + }, + "asteroids_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast107", + "to": "$ast108", + "next": "@celestial.asteroids_orbit_step108" + }, + "asteroids_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast108", + "to": "$ast109", + "next": "@celestial.asteroids_orbit_step109" + }, + "asteroids_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast109", + "to": "$ast110", + "next": "@celestial.asteroids_orbit_step110" + }, + "asteroids_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast110", + "to": "$ast111", + "next": "@celestial.asteroids_orbit_step111" + }, + "asteroids_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast111", + "to": "$ast112", + "next": "@celestial.asteroids_orbit_step112" + }, + "asteroids_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast112", + "to": "$ast113", + "next": "@celestial.asteroids_orbit_step113" + }, + "asteroids_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast113", + "to": "$ast114", + "next": "@celestial.asteroids_orbit_step114" + }, + "asteroids_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast114", + "to": "$ast115", + "next": "@celestial.asteroids_orbit_step115" + }, + "asteroids_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast115", + "to": "$ast116", + "next": "@celestial.asteroids_orbit_step116" + }, + "asteroids_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast116", + "to": "$ast117", + "next": "@celestial.asteroids_orbit_step117" + }, + "asteroids_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast117", + "to": "$ast118", + "next": "@celestial.asteroids_orbit_step118" + }, + "asteroids_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast118", + "to": "$ast119", + "next": "@celestial.asteroids_orbit_step119" + }, + "asteroids_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast119", + "to": "$ast120", + "next": "@celestial.asteroids_orbit_step120" + }, + "asteroids_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast120", + "to": "$ast121", + "next": "@celestial.asteroids_orbit_step121" + }, + "asteroids_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast121", + "to": "$ast122", + "next": "@celestial.asteroids_orbit_step122" + }, + "asteroids_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast122", + "to": "$ast123", + "next": "@celestial.asteroids_orbit_step123" + }, + "asteroids_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast123", + "to": "$ast124", + "next": "@celestial.asteroids_orbit_step124" + }, + "asteroids_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast124", + "to": "$ast125", + "next": "@celestial.asteroids_orbit_step125" + }, + "asteroids_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast125", + "to": "$ast126", + "next": "@celestial.asteroids_orbit_step126" + }, + "asteroids_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast126", + "to": "$ast127", + "next": "@celestial.asteroids_orbit_step127" + }, + "asteroids_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast127", + "to": "$ast128", + "next": "@celestial.asteroids_orbit_step128" + }, + "asteroids_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast128", + "to": "$ast129", + "next": "@celestial.asteroids_orbit_step129" + }, + "asteroids_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast129", + "to": "$ast130", + "next": "@celestial.asteroids_orbit_step130" + }, + "asteroids_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast130", + "to": "$ast131", + "next": "@celestial.asteroids_orbit_step131" + }, + "asteroids_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast131", + "to": "$ast132", + "next": "@celestial.asteroids_orbit_step132" + }, + "asteroids_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast132", + "to": "$ast133", + "next": "@celestial.asteroids_orbit_step133" + }, + "asteroids_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast133", + "to": "$ast134", + "next": "@celestial.asteroids_orbit_step134" + }, + "asteroids_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast134", + "to": "$ast135", + "next": "@celestial.asteroids_orbit_step135" + }, + "asteroids_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast135", + "to": "$ast136", + "next": "@celestial.asteroids_orbit_step136" + }, + "asteroids_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast136", + "to": "$ast137", + "next": "@celestial.asteroids_orbit_step137" + }, + "asteroids_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast137", + "to": "$ast138", + "next": "@celestial.asteroids_orbit_step138" + }, + "asteroids_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast138", + "to": "$ast139", + "next": "@celestial.asteroids_orbit_step139" + }, + "asteroids_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast139", + "to": "$ast140", + "next": "@celestial.asteroids_orbit_step140" + }, + "asteroids_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast140", + "to": "$ast141", + "next": "@celestial.asteroids_orbit_step141" + }, + "asteroids_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast141", + "to": "$ast142", + "next": "@celestial.asteroids_orbit_step142" + }, + "asteroids_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast142", + "to": "$ast143", + "next": "@celestial.asteroids_orbit_step143" + }, + "asteroids_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast143", + "to": "$ast144", + "next": "@celestial.asteroids_orbit_step144" + }, + "asteroids_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast144", + "to": "$ast145", + "next": "@celestial.asteroids_orbit_step145" + }, + "asteroids_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast145", + "to": "$ast146", + "next": "@celestial.asteroids_orbit_step146" + }, + "asteroids_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast146", + "to": "$ast147", + "next": "@celestial.asteroids_orbit_step147" + }, + "asteroids_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast147", + "to": "$ast148", + "next": "@celestial.asteroids_orbit_step148" + }, + "asteroids_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast148", + "to": "$ast149", + "next": "@celestial.asteroids_orbit_step149" + }, + "asteroids_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast149", + "to": "$ast150", + "next": "@celestial.asteroids_orbit_step150" + }, + "asteroids_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast150", + "to": "$ast151", + "next": "@celestial.asteroids_orbit_step151" + }, + "asteroids_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast151", + "to": "$ast152", + "next": "@celestial.asteroids_orbit_step152" + }, + "asteroids_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast152", + "to": "$ast153", + "next": "@celestial.asteroids_orbit_step153" + }, + "asteroids_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast153", + "to": "$ast154", + "next": "@celestial.asteroids_orbit_step154" + }, + "asteroids_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast154", + "to": "$ast155", + "next": "@celestial.asteroids_orbit_step155" + }, + "asteroids_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast155", + "to": "$ast156", + "next": "@celestial.asteroids_orbit_step156" + }, + "asteroids_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast156", + "to": "$ast157", + "next": "@celestial.asteroids_orbit_step157" + }, + "asteroids_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast157", + "to": "$ast158", + "next": "@celestial.asteroids_orbit_step158" + }, + "asteroids_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast158", + "to": "$ast159", + "next": "@celestial.asteroids_orbit_step159" + }, + "asteroids_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast159", + "to": "$ast160", + "next": "@celestial.asteroids_orbit_step160" + }, + "asteroids_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast160", + "to": "$ast161", + "next": "@celestial.asteroids_orbit_step161" + }, + "asteroids_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast161", + "to": "$ast162", + "next": "@celestial.asteroids_orbit_step162" + }, + "asteroids_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast162", + "to": "$ast163", + "next": "@celestial.asteroids_orbit_step163" + }, + "asteroids_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast163", + "to": "$ast164", + "next": "@celestial.asteroids_orbit_step164" + }, + "asteroids_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast164", + "to": "$ast165", + "next": "@celestial.asteroids_orbit_step165" + }, + "asteroids_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast165", + "to": "$ast166", + "next": "@celestial.asteroids_orbit_step166" + }, + "asteroids_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast166", + "to": "$ast167", + "next": "@celestial.asteroids_orbit_step167" + }, + "asteroids_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast167", + "to": "$ast168", + "next": "@celestial.asteroids_orbit_step168" + }, + "asteroids_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast168", + "to": "$ast169", + "next": "@celestial.asteroids_orbit_step169" + }, + "asteroids_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast169", + "to": "$ast170", + "next": "@celestial.asteroids_orbit_step170" + }, + "asteroids_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast170", + "to": "$ast171", + "next": "@celestial.asteroids_orbit_step171" + }, + "asteroids_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast171", + "to": "$ast172", + "next": "@celestial.asteroids_orbit_step172" + }, + "asteroids_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast172", + "to": "$ast173", + "next": "@celestial.asteroids_orbit_step173" + }, + "asteroids_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast173", + "to": "$ast174", + "next": "@celestial.asteroids_orbit_step174" + }, + "asteroids_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast174", + "to": "$ast175", + "next": "@celestial.asteroids_orbit_step175" + }, + "asteroids_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast175", + "to": "$ast176", + "next": "@celestial.asteroids_orbit_step176" + }, + "asteroids_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast176", + "to": "$ast177", + "next": "@celestial.asteroids_orbit_step177" + }, + "asteroids_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast177", + "to": "$ast178", + "next": "@celestial.asteroids_orbit_step178" + }, + "asteroids_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast178", + "to": "$ast179", + "next": "@celestial.asteroids_orbit_step179" + }, + "asteroids_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast179", + "to": "$ast180", + "next": "@celestial.asteroids_orbit_step180" + }, + "asteroids_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast180", + "to": "$ast181", + "next": "@celestial.asteroids_orbit_step181" + }, + "asteroids_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast181", + "to": "$ast182", + "next": "@celestial.asteroids_orbit_step182" + }, + "asteroids_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast182", + "to": "$ast183", + "next": "@celestial.asteroids_orbit_step183" + }, + "asteroids_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast183", + "to": "$ast184", + "next": "@celestial.asteroids_orbit_step184" + }, + "asteroids_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast184", + "to": "$ast185", + "next": "@celestial.asteroids_orbit_step185" + }, + "asteroids_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast185", + "to": "$ast186", + "next": "@celestial.asteroids_orbit_step186" + }, + "asteroids_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast186", + "to": "$ast187", + "next": "@celestial.asteroids_orbit_step187" + }, + "asteroids_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast187", + "to": "$ast188", + "next": "@celestial.asteroids_orbit_step188" + }, + "asteroids_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast188", + "to": "$ast189", + "next": "@celestial.asteroids_orbit_step189" + }, + "asteroids_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast189", + "to": "$ast190", + "next": "@celestial.asteroids_orbit_step190" + }, + "asteroids_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast190", + "to": "$ast191", + "next": "@celestial.asteroids_orbit_step191" + }, + "asteroids_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast191", + "to": "$ast192", + "next": "@celestial.asteroids_orbit_step192" + }, + "asteroids_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast192", + "to": "$ast193", + "next": "@celestial.asteroids_orbit_step193" + }, + "asteroids_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast193", + "to": "$ast194", + "next": "@celestial.asteroids_orbit_step194" + }, + "asteroids_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast194", + "to": "$ast195", + "next": "@celestial.asteroids_orbit_step195" + }, + "asteroids_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast195", + "to": "$ast196", + "next": "@celestial.asteroids_orbit_step196" + }, + "asteroids_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast196", + "to": "$ast197", + "next": "@celestial.asteroids_orbit_step197" + }, + "asteroids_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast197", + "to": "$ast198", + "next": "@celestial.asteroids_orbit_step198" + }, + "asteroids_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast198", + "to": "$ast199", + "next": "@celestial.asteroids_orbit_step199" + }, + "asteroids_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast199", + "to": "$ast200", + "next": "@celestial.asteroids_orbit_step200" + }, + "asteroids_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast200", + "to": "$ast201", + "next": "@celestial.asteroids_orbit_step201" + }, + "asteroids_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast201", + "to": "$ast202", + "next": "@celestial.asteroids_orbit_step202" + }, + "asteroids_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast202", + "to": "$ast203", + "next": "@celestial.asteroids_orbit_step203" + }, + "asteroids_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast203", + "to": "$ast204", + "next": "@celestial.asteroids_orbit_step204" + }, + "asteroids_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast204", + "to": "$ast205", + "next": "@celestial.asteroids_orbit_step205" + }, + "asteroids_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast205", + "to": "$ast206", + "next": "@celestial.asteroids_orbit_step206" + }, + "asteroids_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast206", + "to": "$ast207", + "next": "@celestial.asteroids_orbit_step207" + }, + "asteroids_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast207", + "to": "$ast208", + "next": "@celestial.asteroids_orbit_step208" + }, + "asteroids_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast208", + "to": "$ast209", + "next": "@celestial.asteroids_orbit_step209" + }, + "asteroids_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast209", + "to": "$ast210", + "next": "@celestial.asteroids_orbit_step210" + }, + "asteroids_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast210", + "to": "$ast211", + "next": "@celestial.asteroids_orbit_step211" + }, + "asteroids_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast211", + "to": "$ast212", + "next": "@celestial.asteroids_orbit_step212" + }, + "asteroids_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast212", + "to": "$ast213", + "next": "@celestial.asteroids_orbit_step213" + }, + "asteroids_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast213", + "to": "$ast214", + "next": "@celestial.asteroids_orbit_step214" + }, + "asteroids_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast214", + "to": "$ast215", + "next": "@celestial.asteroids_orbit_step215" + }, + "asteroids_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast215", + "to": "$ast216", + "next": "@celestial.asteroids_orbit_step216" + }, + "asteroids_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast216", + "to": "$ast217", + "next": "@celestial.asteroids_orbit_step217" + }, + "asteroids_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast217", + "to": "$ast218", + "next": "@celestial.asteroids_orbit_step218" + }, + "asteroids_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast218", + "to": "$ast219", + "next": "@celestial.asteroids_orbit_step219" + }, + "asteroids_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast219", + "to": "$ast220", + "next": "@celestial.asteroids_orbit_step220" + }, + "asteroids_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast220", + "to": "$ast221", + "next": "@celestial.asteroids_orbit_step221" + }, + "asteroids_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast221", + "to": "$ast222", + "next": "@celestial.asteroids_orbit_step222" + }, + "asteroids_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast222", + "to": "$ast223", + "next": "@celestial.asteroids_orbit_step223" + }, + "asteroids_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast223", + "to": "$ast224", + "next": "@celestial.asteroids_orbit_step224" + }, + "asteroids_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast224", + "to": "$ast225", + "next": "@celestial.asteroids_orbit_step225" + }, + "asteroids_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast225", + "to": "$ast226", + "next": "@celestial.asteroids_orbit_step226" + }, + "asteroids_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast226", + "to": "$ast227", + "next": "@celestial.asteroids_orbit_step227" + }, + "asteroids_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast227", + "to": "$ast228", + "next": "@celestial.asteroids_orbit_step228" + }, + "asteroids_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast228", + "to": "$ast229", + "next": "@celestial.asteroids_orbit_step229" + }, + "asteroids_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast229", + "to": "$ast230", + "next": "@celestial.asteroids_orbit_step230" + }, + "asteroids_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast230", + "to": "$ast231", + "next": "@celestial.asteroids_orbit_step231" + }, + "asteroids_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast231", + "to": "$ast232", + "next": "@celestial.asteroids_orbit_step232" + }, + "asteroids_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast232", + "to": "$ast233", + "next": "@celestial.asteroids_orbit_step233" + }, + "asteroids_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast233", + "to": "$ast234", + "next": "@celestial.asteroids_orbit_step234" + }, + "asteroids_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast234", + "to": "$ast235", + "next": "@celestial.asteroids_orbit_step235" + }, + "asteroids_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast235", + "to": "$ast236", + "next": "@celestial.asteroids_orbit_step236" + }, + "asteroids_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast236", + "to": "$ast237", + "next": "@celestial.asteroids_orbit_step237" + }, + "asteroids_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast237", + "to": "$ast238", + "next": "@celestial.asteroids_orbit_step238" + }, + "asteroids_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast238", + "to": "$ast239", + "next": "@celestial.asteroids_orbit_step239" + }, + "asteroids_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast239", + "to": "$ast240", + "next": "@celestial.asteroids_orbit_step240" + }, + "asteroids_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast240", + "to": "$ast241", + "next": "@celestial.asteroids_orbit_step241" + }, + "asteroids_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast241", + "to": "$ast242", + "next": "@celestial.asteroids_orbit_step242" + }, + "asteroids_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast242", + "to": "$ast243", + "next": "@celestial.asteroids_orbit_step243" + }, + "asteroids_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast243", + "to": "$ast244", + "next": "@celestial.asteroids_orbit_step244" + }, + "asteroids_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast244", + "to": "$ast245", + "next": "@celestial.asteroids_orbit_step245" + }, + "asteroids_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast245", + "to": "$ast246", + "next": "@celestial.asteroids_orbit_step246" + }, + "asteroids_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast246", + "to": "$ast247", + "next": "@celestial.asteroids_orbit_step247" + }, + "asteroids_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast247", + "to": "$ast248", + "next": "@celestial.asteroids_orbit_step248" + }, + "asteroids_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast248", + "to": "$ast249", + "next": "@celestial.asteroids_orbit_step249" + }, + "asteroids_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast249", + "to": "$ast250", + "next": "@celestial.asteroids_orbit_step250" + }, + "asteroids_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast250", + "to": "$ast251", + "next": "@celestial.asteroids_orbit_step251" + }, + "asteroids_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast251", + "to": "$ast252", + "next": "@celestial.asteroids_orbit_step252" + }, + "asteroids_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast252", + "to": "$ast253", + "next": "@celestial.asteroids_orbit_step253" + }, + "asteroids_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast253", + "to": "$ast254", + "next": "@celestial.asteroids_orbit_step254" + }, + "asteroids_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast254", + "to": "$ast255", + "next": "@celestial.asteroids_orbit_step255" + }, + "asteroids_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast255", + "to": "$ast256", + "next": "@celestial.asteroids_orbit_step256" + }, + "asteroids_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ast256", + "to": "$ast1", + "next": "@celestial.asteroids_orbit_step1" + }, + "jupiter_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup1", + "to": "$jup2", + "next": "@celestial.jupiter_orbit_step2" + }, + "jupiter_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup2", + "to": "$jup3", + "next": "@celestial.jupiter_orbit_step3" + }, + "jupiter_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup3", + "to": "$jup4", + "next": "@celestial.jupiter_orbit_step4" + }, + "jupiter_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup4", + "to": "$jup5", + "next": "@celestial.jupiter_orbit_step5" + }, + "jupiter_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup5", + "to": "$jup6", + "next": "@celestial.jupiter_orbit_step6" + }, + "jupiter_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup6", + "to": "$jup7", + "next": "@celestial.jupiter_orbit_step7" + }, + "jupiter_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup7", + "to": "$jup8", + "next": "@celestial.jupiter_orbit_step8" + }, + "jupiter_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup8", + "to": "$jup9", + "next": "@celestial.jupiter_orbit_step9" + }, + "jupiter_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup9", + "to": "$jup10", + "next": "@celestial.jupiter_orbit_step10" + }, + "jupiter_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup10", + "to": "$jup11", + "next": "@celestial.jupiter_orbit_step11" + }, + "jupiter_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup11", + "to": "$jup12", + "next": "@celestial.jupiter_orbit_step12" + }, + "jupiter_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup12", + "to": "$jup13", + "next": "@celestial.jupiter_orbit_step13" + }, + "jupiter_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup13", + "to": "$jup14", + "next": "@celestial.jupiter_orbit_step14" + }, + "jupiter_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup14", + "to": "$jup15", + "next": "@celestial.jupiter_orbit_step15" + }, + "jupiter_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup15", + "to": "$jup16", + "next": "@celestial.jupiter_orbit_step16" + }, + "jupiter_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup16", + "to": "$jup17", + "next": "@celestial.jupiter_orbit_step17" + }, + "jupiter_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup17", + "to": "$jup18", + "next": "@celestial.jupiter_orbit_step18" + }, + "jupiter_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup18", + "to": "$jup19", + "next": "@celestial.jupiter_orbit_step19" + }, + "jupiter_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup19", + "to": "$jup20", + "next": "@celestial.jupiter_orbit_step20" + }, + "jupiter_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup20", + "to": "$jup21", + "next": "@celestial.jupiter_orbit_step21" + }, + "jupiter_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup21", + "to": "$jup22", + "next": "@celestial.jupiter_orbit_step22" + }, + "jupiter_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup22", + "to": "$jup23", + "next": "@celestial.jupiter_orbit_step23" + }, + "jupiter_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup23", + "to": "$jup24", + "next": "@celestial.jupiter_orbit_step24" + }, + "jupiter_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup24", + "to": "$jup25", + "next": "@celestial.jupiter_orbit_step25" + }, + "jupiter_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup25", + "to": "$jup26", + "next": "@celestial.jupiter_orbit_step26" + }, + "jupiter_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup26", + "to": "$jup27", + "next": "@celestial.jupiter_orbit_step27" + }, + "jupiter_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup27", + "to": "$jup28", + "next": "@celestial.jupiter_orbit_step28" + }, + "jupiter_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup28", + "to": "$jup29", + "next": "@celestial.jupiter_orbit_step29" + }, + "jupiter_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup29", + "to": "$jup30", + "next": "@celestial.jupiter_orbit_step30" + }, + "jupiter_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup30", + "to": "$jup31", + "next": "@celestial.jupiter_orbit_step31" + }, + "jupiter_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup31", + "to": "$jup32", + "next": "@celestial.jupiter_orbit_step32" + }, + "jupiter_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup32", + "to": "$jup33", + "next": "@celestial.jupiter_orbit_step33" + }, + "jupiter_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup33", + "to": "$jup34", + "next": "@celestial.jupiter_orbit_step34" + }, + "jupiter_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup34", + "to": "$jup35", + "next": "@celestial.jupiter_orbit_step35" + }, + "jupiter_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup35", + "to": "$jup36", + "next": "@celestial.jupiter_orbit_step36" + }, + "jupiter_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup36", + "to": "$jup37", + "next": "@celestial.jupiter_orbit_step37" + }, + "jupiter_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup37", + "to": "$jup38", + "next": "@celestial.jupiter_orbit_step38" + }, + "jupiter_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup38", + "to": "$jup39", + "next": "@celestial.jupiter_orbit_step39" + }, + "jupiter_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup39", + "to": "$jup40", + "next": "@celestial.jupiter_orbit_step40" + }, + "jupiter_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup40", + "to": "$jup41", + "next": "@celestial.jupiter_orbit_step41" + }, + "jupiter_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup41", + "to": "$jup42", + "next": "@celestial.jupiter_orbit_step42" + }, + "jupiter_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup42", + "to": "$jup43", + "next": "@celestial.jupiter_orbit_step43" + }, + "jupiter_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup43", + "to": "$jup44", + "next": "@celestial.jupiter_orbit_step44" + }, + "jupiter_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup44", + "to": "$jup45", + "next": "@celestial.jupiter_orbit_step45" + }, + "jupiter_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup45", + "to": "$jup46", + "next": "@celestial.jupiter_orbit_step46" + }, + "jupiter_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup46", + "to": "$jup47", + "next": "@celestial.jupiter_orbit_step47" + }, + "jupiter_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup47", + "to": "$jup48", + "next": "@celestial.jupiter_orbit_step48" + }, + "jupiter_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup48", + "to": "$jup49", + "next": "@celestial.jupiter_orbit_step49" + }, + "jupiter_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup49", + "to": "$jup50", + "next": "@celestial.jupiter_orbit_step50" + }, + "jupiter_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup50", + "to": "$jup51", + "next": "@celestial.jupiter_orbit_step51" + }, + "jupiter_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup51", + "to": "$jup52", + "next": "@celestial.jupiter_orbit_step52" + }, + "jupiter_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup52", + "to": "$jup53", + "next": "@celestial.jupiter_orbit_step53" + }, + "jupiter_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup53", + "to": "$jup54", + "next": "@celestial.jupiter_orbit_step54" + }, + "jupiter_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup54", + "to": "$jup55", + "next": "@celestial.jupiter_orbit_step55" + }, + "jupiter_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup55", + "to": "$jup56", + "next": "@celestial.jupiter_orbit_step56" + }, + "jupiter_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup56", + "to": "$jup57", + "next": "@celestial.jupiter_orbit_step57" + }, + "jupiter_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup57", + "to": "$jup58", + "next": "@celestial.jupiter_orbit_step58" + }, + "jupiter_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup58", + "to": "$jup59", + "next": "@celestial.jupiter_orbit_step59" + }, + "jupiter_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup59", + "to": "$jup60", + "next": "@celestial.jupiter_orbit_step60" + }, + "jupiter_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup60", + "to": "$jup61", + "next": "@celestial.jupiter_orbit_step61" + }, + "jupiter_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup61", + "to": "$jup62", + "next": "@celestial.jupiter_orbit_step62" + }, + "jupiter_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup62", + "to": "$jup63", + "next": "@celestial.jupiter_orbit_step63" + }, + "jupiter_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup63", + "to": "$jup64", + "next": "@celestial.jupiter_orbit_step64" + }, + "jupiter_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup64", + "to": "$jup65", + "next": "@celestial.jupiter_orbit_step65" + }, + "jupiter_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup65", + "to": "$jup66", + "next": "@celestial.jupiter_orbit_step66" + }, + "jupiter_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup66", + "to": "$jup67", + "next": "@celestial.jupiter_orbit_step67" + }, + "jupiter_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup67", + "to": "$jup68", + "next": "@celestial.jupiter_orbit_step68" + }, + "jupiter_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup68", + "to": "$jup69", + "next": "@celestial.jupiter_orbit_step69" + }, + "jupiter_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup69", + "to": "$jup70", + "next": "@celestial.jupiter_orbit_step70" + }, + "jupiter_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup70", + "to": "$jup71", + "next": "@celestial.jupiter_orbit_step71" + }, + "jupiter_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup71", + "to": "$jup72", + "next": "@celestial.jupiter_orbit_step72" + }, + "jupiter_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup72", + "to": "$jup73", + "next": "@celestial.jupiter_orbit_step73" + }, + "jupiter_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup73", + "to": "$jup74", + "next": "@celestial.jupiter_orbit_step74" + }, + "jupiter_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup74", + "to": "$jup75", + "next": "@celestial.jupiter_orbit_step75" + }, + "jupiter_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup75", + "to": "$jup76", + "next": "@celestial.jupiter_orbit_step76" + }, + "jupiter_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup76", + "to": "$jup77", + "next": "@celestial.jupiter_orbit_step77" + }, + "jupiter_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup77", + "to": "$jup78", + "next": "@celestial.jupiter_orbit_step78" + }, + "jupiter_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup78", + "to": "$jup79", + "next": "@celestial.jupiter_orbit_step79" + }, + "jupiter_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup79", + "to": "$jup80", + "next": "@celestial.jupiter_orbit_step80" + }, + "jupiter_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup80", + "to": "$jup81", + "next": "@celestial.jupiter_orbit_step81" + }, + "jupiter_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup81", + "to": "$jup82", + "next": "@celestial.jupiter_orbit_step82" + }, + "jupiter_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup82", + "to": "$jup83", + "next": "@celestial.jupiter_orbit_step83" + }, + "jupiter_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup83", + "to": "$jup84", + "next": "@celestial.jupiter_orbit_step84" + }, + "jupiter_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup84", + "to": "$jup85", + "next": "@celestial.jupiter_orbit_step85" + }, + "jupiter_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup85", + "to": "$jup86", + "next": "@celestial.jupiter_orbit_step86" + }, + "jupiter_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup86", + "to": "$jup87", + "next": "@celestial.jupiter_orbit_step87" + }, + "jupiter_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup87", + "to": "$jup88", + "next": "@celestial.jupiter_orbit_step88" + }, + "jupiter_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup88", + "to": "$jup89", + "next": "@celestial.jupiter_orbit_step89" + }, + "jupiter_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup89", + "to": "$jup90", + "next": "@celestial.jupiter_orbit_step90" + }, + "jupiter_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup90", + "to": "$jup91", + "next": "@celestial.jupiter_orbit_step91" + }, + "jupiter_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup91", + "to": "$jup92", + "next": "@celestial.jupiter_orbit_step92" + }, + "jupiter_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup92", + "to": "$jup93", + "next": "@celestial.jupiter_orbit_step93" + }, + "jupiter_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup93", + "to": "$jup94", + "next": "@celestial.jupiter_orbit_step94" + }, + "jupiter_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup94", + "to": "$jup95", + "next": "@celestial.jupiter_orbit_step95" + }, + "jupiter_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup95", + "to": "$jup96", + "next": "@celestial.jupiter_orbit_step96" + }, + "jupiter_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup96", + "to": "$jup97", + "next": "@celestial.jupiter_orbit_step97" + }, + "jupiter_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup97", + "to": "$jup98", + "next": "@celestial.jupiter_orbit_step98" + }, + "jupiter_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup98", + "to": "$jup99", + "next": "@celestial.jupiter_orbit_step99" + }, + "jupiter_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup99", + "to": "$jup100", + "next": "@celestial.jupiter_orbit_step100" + }, + "jupiter_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup100", + "to": "$jup101", + "next": "@celestial.jupiter_orbit_step101" + }, + "jupiter_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup101", + "to": "$jup102", + "next": "@celestial.jupiter_orbit_step102" + }, + "jupiter_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup102", + "to": "$jup103", + "next": "@celestial.jupiter_orbit_step103" + }, + "jupiter_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup103", + "to": "$jup104", + "next": "@celestial.jupiter_orbit_step104" + }, + "jupiter_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup104", + "to": "$jup105", + "next": "@celestial.jupiter_orbit_step105" + }, + "jupiter_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup105", + "to": "$jup106", + "next": "@celestial.jupiter_orbit_step106" + }, + "jupiter_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup106", + "to": "$jup107", + "next": "@celestial.jupiter_orbit_step107" + }, + "jupiter_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup107", + "to": "$jup108", + "next": "@celestial.jupiter_orbit_step108" + }, + "jupiter_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup108", + "to": "$jup109", + "next": "@celestial.jupiter_orbit_step109" + }, + "jupiter_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup109", + "to": "$jup110", + "next": "@celestial.jupiter_orbit_step110" + }, + "jupiter_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup110", + "to": "$jup111", + "next": "@celestial.jupiter_orbit_step111" + }, + "jupiter_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup111", + "to": "$jup112", + "next": "@celestial.jupiter_orbit_step112" + }, + "jupiter_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup112", + "to": "$jup113", + "next": "@celestial.jupiter_orbit_step113" + }, + "jupiter_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup113", + "to": "$jup114", + "next": "@celestial.jupiter_orbit_step114" + }, + "jupiter_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup114", + "to": "$jup115", + "next": "@celestial.jupiter_orbit_step115" + }, + "jupiter_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup115", + "to": "$jup116", + "next": "@celestial.jupiter_orbit_step116" + }, + "jupiter_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup116", + "to": "$jup117", + "next": "@celestial.jupiter_orbit_step117" + }, + "jupiter_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup117", + "to": "$jup118", + "next": "@celestial.jupiter_orbit_step118" + }, + "jupiter_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup118", + "to": "$jup119", + "next": "@celestial.jupiter_orbit_step119" + }, + "jupiter_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup119", + "to": "$jup120", + "next": "@celestial.jupiter_orbit_step120" + }, + "jupiter_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup120", + "to": "$jup121", + "next": "@celestial.jupiter_orbit_step121" + }, + "jupiter_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup121", + "to": "$jup122", + "next": "@celestial.jupiter_orbit_step122" + }, + "jupiter_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup122", + "to": "$jup123", + "next": "@celestial.jupiter_orbit_step123" + }, + "jupiter_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup123", + "to": "$jup124", + "next": "@celestial.jupiter_orbit_step124" + }, + "jupiter_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup124", + "to": "$jup125", + "next": "@celestial.jupiter_orbit_step125" + }, + "jupiter_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup125", + "to": "$jup126", + "next": "@celestial.jupiter_orbit_step126" + }, + "jupiter_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup126", + "to": "$jup127", + "next": "@celestial.jupiter_orbit_step127" + }, + "jupiter_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup127", + "to": "$jup128", + "next": "@celestial.jupiter_orbit_step128" + }, + "jupiter_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup128", + "to": "$jup129", + "next": "@celestial.jupiter_orbit_step129" + }, + "jupiter_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup129", + "to": "$jup130", + "next": "@celestial.jupiter_orbit_step130" + }, + "jupiter_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup130", + "to": "$jup131", + "next": "@celestial.jupiter_orbit_step131" + }, + "jupiter_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup131", + "to": "$jup132", + "next": "@celestial.jupiter_orbit_step132" + }, + "jupiter_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup132", + "to": "$jup133", + "next": "@celestial.jupiter_orbit_step133" + }, + "jupiter_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup133", + "to": "$jup134", + "next": "@celestial.jupiter_orbit_step134" + }, + "jupiter_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup134", + "to": "$jup135", + "next": "@celestial.jupiter_orbit_step135" + }, + "jupiter_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup135", + "to": "$jup136", + "next": "@celestial.jupiter_orbit_step136" + }, + "jupiter_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup136", + "to": "$jup137", + "next": "@celestial.jupiter_orbit_step137" + }, + "jupiter_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup137", + "to": "$jup138", + "next": "@celestial.jupiter_orbit_step138" + }, + "jupiter_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup138", + "to": "$jup139", + "next": "@celestial.jupiter_orbit_step139" + }, + "jupiter_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup139", + "to": "$jup140", + "next": "@celestial.jupiter_orbit_step140" + }, + "jupiter_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup140", + "to": "$jup141", + "next": "@celestial.jupiter_orbit_step141" + }, + "jupiter_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup141", + "to": "$jup142", + "next": "@celestial.jupiter_orbit_step142" + }, + "jupiter_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup142", + "to": "$jup143", + "next": "@celestial.jupiter_orbit_step143" + }, + "jupiter_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup143", + "to": "$jup144", + "next": "@celestial.jupiter_orbit_step144" + }, + "jupiter_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup144", + "to": "$jup145", + "next": "@celestial.jupiter_orbit_step145" + }, + "jupiter_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup145", + "to": "$jup146", + "next": "@celestial.jupiter_orbit_step146" + }, + "jupiter_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup146", + "to": "$jup147", + "next": "@celestial.jupiter_orbit_step147" + }, + "jupiter_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup147", + "to": "$jup148", + "next": "@celestial.jupiter_orbit_step148" + }, + "jupiter_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup148", + "to": "$jup149", + "next": "@celestial.jupiter_orbit_step149" + }, + "jupiter_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup149", + "to": "$jup150", + "next": "@celestial.jupiter_orbit_step150" + }, + "jupiter_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup150", + "to": "$jup151", + "next": "@celestial.jupiter_orbit_step151" + }, + "jupiter_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup151", + "to": "$jup152", + "next": "@celestial.jupiter_orbit_step152" + }, + "jupiter_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup152", + "to": "$jup153", + "next": "@celestial.jupiter_orbit_step153" + }, + "jupiter_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup153", + "to": "$jup154", + "next": "@celestial.jupiter_orbit_step154" + }, + "jupiter_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup154", + "to": "$jup155", + "next": "@celestial.jupiter_orbit_step155" + }, + "jupiter_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup155", + "to": "$jup156", + "next": "@celestial.jupiter_orbit_step156" + }, + "jupiter_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup156", + "to": "$jup157", + "next": "@celestial.jupiter_orbit_step157" + }, + "jupiter_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup157", + "to": "$jup158", + "next": "@celestial.jupiter_orbit_step158" + }, + "jupiter_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup158", + "to": "$jup159", + "next": "@celestial.jupiter_orbit_step159" + }, + "jupiter_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup159", + "to": "$jup160", + "next": "@celestial.jupiter_orbit_step160" + }, + "jupiter_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup160", + "to": "$jup161", + "next": "@celestial.jupiter_orbit_step161" + }, + "jupiter_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup161", + "to": "$jup162", + "next": "@celestial.jupiter_orbit_step162" + }, + "jupiter_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup162", + "to": "$jup163", + "next": "@celestial.jupiter_orbit_step163" + }, + "jupiter_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup163", + "to": "$jup164", + "next": "@celestial.jupiter_orbit_step164" + }, + "jupiter_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup164", + "to": "$jup165", + "next": "@celestial.jupiter_orbit_step165" + }, + "jupiter_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup165", + "to": "$jup166", + "next": "@celestial.jupiter_orbit_step166" + }, + "jupiter_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup166", + "to": "$jup167", + "next": "@celestial.jupiter_orbit_step167" + }, + "jupiter_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup167", + "to": "$jup168", + "next": "@celestial.jupiter_orbit_step168" + }, + "jupiter_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup168", + "to": "$jup169", + "next": "@celestial.jupiter_orbit_step169" + }, + "jupiter_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup169", + "to": "$jup170", + "next": "@celestial.jupiter_orbit_step170" + }, + "jupiter_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup170", + "to": "$jup171", + "next": "@celestial.jupiter_orbit_step171" + }, + "jupiter_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup171", + "to": "$jup172", + "next": "@celestial.jupiter_orbit_step172" + }, + "jupiter_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup172", + "to": "$jup173", + "next": "@celestial.jupiter_orbit_step173" + }, + "jupiter_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup173", + "to": "$jup174", + "next": "@celestial.jupiter_orbit_step174" + }, + "jupiter_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup174", + "to": "$jup175", + "next": "@celestial.jupiter_orbit_step175" + }, + "jupiter_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup175", + "to": "$jup176", + "next": "@celestial.jupiter_orbit_step176" + }, + "jupiter_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup176", + "to": "$jup177", + "next": "@celestial.jupiter_orbit_step177" + }, + "jupiter_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup177", + "to": "$jup178", + "next": "@celestial.jupiter_orbit_step178" + }, + "jupiter_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup178", + "to": "$jup179", + "next": "@celestial.jupiter_orbit_step179" + }, + "jupiter_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup179", + "to": "$jup180", + "next": "@celestial.jupiter_orbit_step180" + }, + "jupiter_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup180", + "to": "$jup181", + "next": "@celestial.jupiter_orbit_step181" + }, + "jupiter_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup181", + "to": "$jup182", + "next": "@celestial.jupiter_orbit_step182" + }, + "jupiter_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup182", + "to": "$jup183", + "next": "@celestial.jupiter_orbit_step183" + }, + "jupiter_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup183", + "to": "$jup184", + "next": "@celestial.jupiter_orbit_step184" + }, + "jupiter_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup184", + "to": "$jup185", + "next": "@celestial.jupiter_orbit_step185" + }, + "jupiter_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup185", + "to": "$jup186", + "next": "@celestial.jupiter_orbit_step186" + }, + "jupiter_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup186", + "to": "$jup187", + "next": "@celestial.jupiter_orbit_step187" + }, + "jupiter_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup187", + "to": "$jup188", + "next": "@celestial.jupiter_orbit_step188" + }, + "jupiter_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup188", + "to": "$jup189", + "next": "@celestial.jupiter_orbit_step189" + }, + "jupiter_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup189", + "to": "$jup190", + "next": "@celestial.jupiter_orbit_step190" + }, + "jupiter_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup190", + "to": "$jup191", + "next": "@celestial.jupiter_orbit_step191" + }, + "jupiter_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup191", + "to": "$jup192", + "next": "@celestial.jupiter_orbit_step192" + }, + "jupiter_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup192", + "to": "$jup193", + "next": "@celestial.jupiter_orbit_step193" + }, + "jupiter_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup193", + "to": "$jup194", + "next": "@celestial.jupiter_orbit_step194" + }, + "jupiter_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup194", + "to": "$jup195", + "next": "@celestial.jupiter_orbit_step195" + }, + "jupiter_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup195", + "to": "$jup196", + "next": "@celestial.jupiter_orbit_step196" + }, + "jupiter_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup196", + "to": "$jup197", + "next": "@celestial.jupiter_orbit_step197" + }, + "jupiter_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup197", + "to": "$jup198", + "next": "@celestial.jupiter_orbit_step198" + }, + "jupiter_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup198", + "to": "$jup199", + "next": "@celestial.jupiter_orbit_step199" + }, + "jupiter_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup199", + "to": "$jup200", + "next": "@celestial.jupiter_orbit_step200" + }, + "jupiter_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup200", + "to": "$jup201", + "next": "@celestial.jupiter_orbit_step201" + }, + "jupiter_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup201", + "to": "$jup202", + "next": "@celestial.jupiter_orbit_step202" + }, + "jupiter_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup202", + "to": "$jup203", + "next": "@celestial.jupiter_orbit_step203" + }, + "jupiter_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup203", + "to": "$jup204", + "next": "@celestial.jupiter_orbit_step204" + }, + "jupiter_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup204", + "to": "$jup205", + "next": "@celestial.jupiter_orbit_step205" + }, + "jupiter_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup205", + "to": "$jup206", + "next": "@celestial.jupiter_orbit_step206" + }, + "jupiter_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup206", + "to": "$jup207", + "next": "@celestial.jupiter_orbit_step207" + }, + "jupiter_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup207", + "to": "$jup208", + "next": "@celestial.jupiter_orbit_step208" + }, + "jupiter_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup208", + "to": "$jup209", + "next": "@celestial.jupiter_orbit_step209" + }, + "jupiter_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup209", + "to": "$jup210", + "next": "@celestial.jupiter_orbit_step210" + }, + "jupiter_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup210", + "to": "$jup211", + "next": "@celestial.jupiter_orbit_step211" + }, + "jupiter_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup211", + "to": "$jup212", + "next": "@celestial.jupiter_orbit_step212" + }, + "jupiter_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup212", + "to": "$jup213", + "next": "@celestial.jupiter_orbit_step213" + }, + "jupiter_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup213", + "to": "$jup214", + "next": "@celestial.jupiter_orbit_step214" + }, + "jupiter_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup214", + "to": "$jup215", + "next": "@celestial.jupiter_orbit_step215" + }, + "jupiter_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup215", + "to": "$jup216", + "next": "@celestial.jupiter_orbit_step216" + }, + "jupiter_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup216", + "to": "$jup217", + "next": "@celestial.jupiter_orbit_step217" + }, + "jupiter_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup217", + "to": "$jup218", + "next": "@celestial.jupiter_orbit_step218" + }, + "jupiter_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup218", + "to": "$jup219", + "next": "@celestial.jupiter_orbit_step219" + }, + "jupiter_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup219", + "to": "$jup220", + "next": "@celestial.jupiter_orbit_step220" + }, + "jupiter_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup220", + "to": "$jup221", + "next": "@celestial.jupiter_orbit_step221" + }, + "jupiter_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup221", + "to": "$jup222", + "next": "@celestial.jupiter_orbit_step222" + }, + "jupiter_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup222", + "to": "$jup223", + "next": "@celestial.jupiter_orbit_step223" + }, + "jupiter_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup223", + "to": "$jup224", + "next": "@celestial.jupiter_orbit_step224" + }, + "jupiter_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup224", + "to": "$jup225", + "next": "@celestial.jupiter_orbit_step225" + }, + "jupiter_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup225", + "to": "$jup226", + "next": "@celestial.jupiter_orbit_step226" + }, + "jupiter_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup226", + "to": "$jup227", + "next": "@celestial.jupiter_orbit_step227" + }, + "jupiter_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup227", + "to": "$jup228", + "next": "@celestial.jupiter_orbit_step228" + }, + "jupiter_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup228", + "to": "$jup229", + "next": "@celestial.jupiter_orbit_step229" + }, + "jupiter_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup229", + "to": "$jup230", + "next": "@celestial.jupiter_orbit_step230" + }, + "jupiter_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup230", + "to": "$jup231", + "next": "@celestial.jupiter_orbit_step231" + }, + "jupiter_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup231", + "to": "$jup232", + "next": "@celestial.jupiter_orbit_step232" + }, + "jupiter_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup232", + "to": "$jup233", + "next": "@celestial.jupiter_orbit_step233" + }, + "jupiter_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup233", + "to": "$jup234", + "next": "@celestial.jupiter_orbit_step234" + }, + "jupiter_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup234", + "to": "$jup235", + "next": "@celestial.jupiter_orbit_step235" + }, + "jupiter_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup235", + "to": "$jup236", + "next": "@celestial.jupiter_orbit_step236" + }, + "jupiter_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup236", + "to": "$jup237", + "next": "@celestial.jupiter_orbit_step237" + }, + "jupiter_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup237", + "to": "$jup238", + "next": "@celestial.jupiter_orbit_step238" + }, + "jupiter_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup238", + "to": "$jup239", + "next": "@celestial.jupiter_orbit_step239" + }, + "jupiter_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup239", + "to": "$jup240", + "next": "@celestial.jupiter_orbit_step240" + }, + "jupiter_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup240", + "to": "$jup241", + "next": "@celestial.jupiter_orbit_step241" + }, + "jupiter_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup241", + "to": "$jup242", + "next": "@celestial.jupiter_orbit_step242" + }, + "jupiter_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup242", + "to": "$jup243", + "next": "@celestial.jupiter_orbit_step243" + }, + "jupiter_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup243", + "to": "$jup244", + "next": "@celestial.jupiter_orbit_step244" + }, + "jupiter_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup244", + "to": "$jup245", + "next": "@celestial.jupiter_orbit_step245" + }, + "jupiter_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup245", + "to": "$jup246", + "next": "@celestial.jupiter_orbit_step246" + }, + "jupiter_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup246", + "to": "$jup247", + "next": "@celestial.jupiter_orbit_step247" + }, + "jupiter_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup247", + "to": "$jup248", + "next": "@celestial.jupiter_orbit_step248" + }, + "jupiter_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup248", + "to": "$jup249", + "next": "@celestial.jupiter_orbit_step249" + }, + "jupiter_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup249", + "to": "$jup250", + "next": "@celestial.jupiter_orbit_step250" + }, + "jupiter_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup250", + "to": "$jup251", + "next": "@celestial.jupiter_orbit_step251" + }, + "jupiter_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup251", + "to": "$jup252", + "next": "@celestial.jupiter_orbit_step252" + }, + "jupiter_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup252", + "to": "$jup253", + "next": "@celestial.jupiter_orbit_step253" + }, + "jupiter_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup253", + "to": "$jup254", + "next": "@celestial.jupiter_orbit_step254" + }, + "jupiter_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup254", + "to": "$jup255", + "next": "@celestial.jupiter_orbit_step255" + }, + "jupiter_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup255", + "to": "$jup256", + "next": "@celestial.jupiter_orbit_step256" + }, + "jupiter_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$jup256", + "to": "$jup1", + "next": "@celestial.jupiter_orbit_step1" + }, + "saturn_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat1", + "to": "$sat2", + "next": "@celestial.saturn_orbit_step2" + }, + "saturn_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat2", + "to": "$sat3", + "next": "@celestial.saturn_orbit_step3" + }, + "saturn_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat3", + "to": "$sat4", + "next": "@celestial.saturn_orbit_step4" + }, + "saturn_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat4", + "to": "$sat5", + "next": "@celestial.saturn_orbit_step5" + }, + "saturn_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat5", + "to": "$sat6", + "next": "@celestial.saturn_orbit_step6" + }, + "saturn_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat6", + "to": "$sat7", + "next": "@celestial.saturn_orbit_step7" + }, + "saturn_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat7", + "to": "$sat8", + "next": "@celestial.saturn_orbit_step8" + }, + "saturn_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat8", + "to": "$sat9", + "next": "@celestial.saturn_orbit_step9" + }, + "saturn_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat9", + "to": "$sat10", + "next": "@celestial.saturn_orbit_step10" + }, + "saturn_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat10", + "to": "$sat11", + "next": "@celestial.saturn_orbit_step11" + }, + "saturn_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat11", + "to": "$sat12", + "next": "@celestial.saturn_orbit_step12" + }, + "saturn_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat12", + "to": "$sat13", + "next": "@celestial.saturn_orbit_step13" + }, + "saturn_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat13", + "to": "$sat14", + "next": "@celestial.saturn_orbit_step14" + }, + "saturn_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat14", + "to": "$sat15", + "next": "@celestial.saturn_orbit_step15" + }, + "saturn_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat15", + "to": "$sat16", + "next": "@celestial.saturn_orbit_step16" + }, + "saturn_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat16", + "to": "$sat17", + "next": "@celestial.saturn_orbit_step17" + }, + "saturn_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat17", + "to": "$sat18", + "next": "@celestial.saturn_orbit_step18" + }, + "saturn_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat18", + "to": "$sat19", + "next": "@celestial.saturn_orbit_step19" + }, + "saturn_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat19", + "to": "$sat20", + "next": "@celestial.saturn_orbit_step20" + }, + "saturn_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat20", + "to": "$sat21", + "next": "@celestial.saturn_orbit_step21" + }, + "saturn_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat21", + "to": "$sat22", + "next": "@celestial.saturn_orbit_step22" + }, + "saturn_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat22", + "to": "$sat23", + "next": "@celestial.saturn_orbit_step23" + }, + "saturn_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat23", + "to": "$sat24", + "next": "@celestial.saturn_orbit_step24" + }, + "saturn_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat24", + "to": "$sat25", + "next": "@celestial.saturn_orbit_step25" + }, + "saturn_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat25", + "to": "$sat26", + "next": "@celestial.saturn_orbit_step26" + }, + "saturn_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat26", + "to": "$sat27", + "next": "@celestial.saturn_orbit_step27" + }, + "saturn_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat27", + "to": "$sat28", + "next": "@celestial.saturn_orbit_step28" + }, + "saturn_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat28", + "to": "$sat29", + "next": "@celestial.saturn_orbit_step29" + }, + "saturn_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat29", + "to": "$sat30", + "next": "@celestial.saturn_orbit_step30" + }, + "saturn_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat30", + "to": "$sat31", + "next": "@celestial.saturn_orbit_step31" + }, + "saturn_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat31", + "to": "$sat32", + "next": "@celestial.saturn_orbit_step32" + }, + "saturn_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat32", + "to": "$sat33", + "next": "@celestial.saturn_orbit_step33" + }, + "saturn_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat33", + "to": "$sat34", + "next": "@celestial.saturn_orbit_step34" + }, + "saturn_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat34", + "to": "$sat35", + "next": "@celestial.saturn_orbit_step35" + }, + "saturn_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat35", + "to": "$sat36", + "next": "@celestial.saturn_orbit_step36" + }, + "saturn_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat36", + "to": "$sat37", + "next": "@celestial.saturn_orbit_step37" + }, + "saturn_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat37", + "to": "$sat38", + "next": "@celestial.saturn_orbit_step38" + }, + "saturn_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat38", + "to": "$sat39", + "next": "@celestial.saturn_orbit_step39" + }, + "saturn_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat39", + "to": "$sat40", + "next": "@celestial.saturn_orbit_step40" + }, + "saturn_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat40", + "to": "$sat41", + "next": "@celestial.saturn_orbit_step41" + }, + "saturn_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat41", + "to": "$sat42", + "next": "@celestial.saturn_orbit_step42" + }, + "saturn_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat42", + "to": "$sat43", + "next": "@celestial.saturn_orbit_step43" + }, + "saturn_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat43", + "to": "$sat44", + "next": "@celestial.saturn_orbit_step44" + }, + "saturn_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat44", + "to": "$sat45", + "next": "@celestial.saturn_orbit_step45" + }, + "saturn_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat45", + "to": "$sat46", + "next": "@celestial.saturn_orbit_step46" + }, + "saturn_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat46", + "to": "$sat47", + "next": "@celestial.saturn_orbit_step47" + }, + "saturn_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat47", + "to": "$sat48", + "next": "@celestial.saturn_orbit_step48" + }, + "saturn_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat48", + "to": "$sat49", + "next": "@celestial.saturn_orbit_step49" + }, + "saturn_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat49", + "to": "$sat50", + "next": "@celestial.saturn_orbit_step50" + }, + "saturn_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat50", + "to": "$sat51", + "next": "@celestial.saturn_orbit_step51" + }, + "saturn_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat51", + "to": "$sat52", + "next": "@celestial.saturn_orbit_step52" + }, + "saturn_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat52", + "to": "$sat53", + "next": "@celestial.saturn_orbit_step53" + }, + "saturn_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat53", + "to": "$sat54", + "next": "@celestial.saturn_orbit_step54" + }, + "saturn_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat54", + "to": "$sat55", + "next": "@celestial.saturn_orbit_step55" + }, + "saturn_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat55", + "to": "$sat56", + "next": "@celestial.saturn_orbit_step56" + }, + "saturn_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat56", + "to": "$sat57", + "next": "@celestial.saturn_orbit_step57" + }, + "saturn_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat57", + "to": "$sat58", + "next": "@celestial.saturn_orbit_step58" + }, + "saturn_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat58", + "to": "$sat59", + "next": "@celestial.saturn_orbit_step59" + }, + "saturn_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat59", + "to": "$sat60", + "next": "@celestial.saturn_orbit_step60" + }, + "saturn_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat60", + "to": "$sat61", + "next": "@celestial.saturn_orbit_step61" + }, + "saturn_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat61", + "to": "$sat62", + "next": "@celestial.saturn_orbit_step62" + }, + "saturn_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat62", + "to": "$sat63", + "next": "@celestial.saturn_orbit_step63" + }, + "saturn_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat63", + "to": "$sat64", + "next": "@celestial.saturn_orbit_step64" + }, + "saturn_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat64", + "to": "$sat65", + "next": "@celestial.saturn_orbit_step65" + }, + "saturn_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat65", + "to": "$sat66", + "next": "@celestial.saturn_orbit_step66" + }, + "saturn_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat66", + "to": "$sat67", + "next": "@celestial.saturn_orbit_step67" + }, + "saturn_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat67", + "to": "$sat68", + "next": "@celestial.saturn_orbit_step68" + }, + "saturn_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat68", + "to": "$sat69", + "next": "@celestial.saturn_orbit_step69" + }, + "saturn_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat69", + "to": "$sat70", + "next": "@celestial.saturn_orbit_step70" + }, + "saturn_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat70", + "to": "$sat71", + "next": "@celestial.saturn_orbit_step71" + }, + "saturn_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat71", + "to": "$sat72", + "next": "@celestial.saturn_orbit_step72" + }, + "saturn_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat72", + "to": "$sat73", + "next": "@celestial.saturn_orbit_step73" + }, + "saturn_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat73", + "to": "$sat74", + "next": "@celestial.saturn_orbit_step74" + }, + "saturn_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat74", + "to": "$sat75", + "next": "@celestial.saturn_orbit_step75" + }, + "saturn_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat75", + "to": "$sat76", + "next": "@celestial.saturn_orbit_step76" + }, + "saturn_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat76", + "to": "$sat77", + "next": "@celestial.saturn_orbit_step77" + }, + "saturn_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat77", + "to": "$sat78", + "next": "@celestial.saturn_orbit_step78" + }, + "saturn_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat78", + "to": "$sat79", + "next": "@celestial.saturn_orbit_step79" + }, + "saturn_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat79", + "to": "$sat80", + "next": "@celestial.saturn_orbit_step80" + }, + "saturn_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat80", + "to": "$sat81", + "next": "@celestial.saturn_orbit_step81" + }, + "saturn_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat81", + "to": "$sat82", + "next": "@celestial.saturn_orbit_step82" + }, + "saturn_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat82", + "to": "$sat83", + "next": "@celestial.saturn_orbit_step83" + }, + "saturn_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat83", + "to": "$sat84", + "next": "@celestial.saturn_orbit_step84" + }, + "saturn_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat84", + "to": "$sat85", + "next": "@celestial.saturn_orbit_step85" + }, + "saturn_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat85", + "to": "$sat86", + "next": "@celestial.saturn_orbit_step86" + }, + "saturn_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat86", + "to": "$sat87", + "next": "@celestial.saturn_orbit_step87" + }, + "saturn_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat87", + "to": "$sat88", + "next": "@celestial.saturn_orbit_step88" + }, + "saturn_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat88", + "to": "$sat89", + "next": "@celestial.saturn_orbit_step89" + }, + "saturn_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat89", + "to": "$sat90", + "next": "@celestial.saturn_orbit_step90" + }, + "saturn_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat90", + "to": "$sat91", + "next": "@celestial.saturn_orbit_step91" + }, + "saturn_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat91", + "to": "$sat92", + "next": "@celestial.saturn_orbit_step92" + }, + "saturn_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat92", + "to": "$sat93", + "next": "@celestial.saturn_orbit_step93" + }, + "saturn_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat93", + "to": "$sat94", + "next": "@celestial.saturn_orbit_step94" + }, + "saturn_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat94", + "to": "$sat95", + "next": "@celestial.saturn_orbit_step95" + }, + "saturn_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat95", + "to": "$sat96", + "next": "@celestial.saturn_orbit_step96" + }, + "saturn_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat96", + "to": "$sat97", + "next": "@celestial.saturn_orbit_step97" + }, + "saturn_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat97", + "to": "$sat98", + "next": "@celestial.saturn_orbit_step98" + }, + "saturn_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat98", + "to": "$sat99", + "next": "@celestial.saturn_orbit_step99" + }, + "saturn_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat99", + "to": "$sat100", + "next": "@celestial.saturn_orbit_step100" + }, + "saturn_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat100", + "to": "$sat101", + "next": "@celestial.saturn_orbit_step101" + }, + "saturn_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat101", + "to": "$sat102", + "next": "@celestial.saturn_orbit_step102" + }, + "saturn_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat102", + "to": "$sat103", + "next": "@celestial.saturn_orbit_step103" + }, + "saturn_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat103", + "to": "$sat104", + "next": "@celestial.saturn_orbit_step104" + }, + "saturn_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat104", + "to": "$sat105", + "next": "@celestial.saturn_orbit_step105" + }, + "saturn_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat105", + "to": "$sat106", + "next": "@celestial.saturn_orbit_step106" + }, + "saturn_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat106", + "to": "$sat107", + "next": "@celestial.saturn_orbit_step107" + }, + "saturn_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat107", + "to": "$sat108", + "next": "@celestial.saturn_orbit_step108" + }, + "saturn_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat108", + "to": "$sat109", + "next": "@celestial.saturn_orbit_step109" + }, + "saturn_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat109", + "to": "$sat110", + "next": "@celestial.saturn_orbit_step110" + }, + "saturn_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat110", + "to": "$sat111", + "next": "@celestial.saturn_orbit_step111" + }, + "saturn_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat111", + "to": "$sat112", + "next": "@celestial.saturn_orbit_step112" + }, + "saturn_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat112", + "to": "$sat113", + "next": "@celestial.saturn_orbit_step113" + }, + "saturn_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat113", + "to": "$sat114", + "next": "@celestial.saturn_orbit_step114" + }, + "saturn_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat114", + "to": "$sat115", + "next": "@celestial.saturn_orbit_step115" + }, + "saturn_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat115", + "to": "$sat116", + "next": "@celestial.saturn_orbit_step116" + }, + "saturn_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat116", + "to": "$sat117", + "next": "@celestial.saturn_orbit_step117" + }, + "saturn_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat117", + "to": "$sat118", + "next": "@celestial.saturn_orbit_step118" + }, + "saturn_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat118", + "to": "$sat119", + "next": "@celestial.saturn_orbit_step119" + }, + "saturn_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat119", + "to": "$sat120", + "next": "@celestial.saturn_orbit_step120" + }, + "saturn_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat120", + "to": "$sat121", + "next": "@celestial.saturn_orbit_step121" + }, + "saturn_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat121", + "to": "$sat122", + "next": "@celestial.saturn_orbit_step122" + }, + "saturn_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat122", + "to": "$sat123", + "next": "@celestial.saturn_orbit_step123" + }, + "saturn_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat123", + "to": "$sat124", + "next": "@celestial.saturn_orbit_step124" + }, + "saturn_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat124", + "to": "$sat125", + "next": "@celestial.saturn_orbit_step125" + }, + "saturn_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat125", + "to": "$sat126", + "next": "@celestial.saturn_orbit_step126" + }, + "saturn_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat126", + "to": "$sat127", + "next": "@celestial.saturn_orbit_step127" + }, + "saturn_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat127", + "to": "$sat128", + "next": "@celestial.saturn_orbit_step128" + }, + "saturn_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat128", + "to": "$sat129", + "next": "@celestial.saturn_orbit_step129" + }, + "saturn_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat129", + "to": "$sat130", + "next": "@celestial.saturn_orbit_step130" + }, + "saturn_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat130", + "to": "$sat131", + "next": "@celestial.saturn_orbit_step131" + }, + "saturn_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat131", + "to": "$sat132", + "next": "@celestial.saturn_orbit_step132" + }, + "saturn_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat132", + "to": "$sat133", + "next": "@celestial.saturn_orbit_step133" + }, + "saturn_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat133", + "to": "$sat134", + "next": "@celestial.saturn_orbit_step134" + }, + "saturn_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat134", + "to": "$sat135", + "next": "@celestial.saturn_orbit_step135" + }, + "saturn_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat135", + "to": "$sat136", + "next": "@celestial.saturn_orbit_step136" + }, + "saturn_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat136", + "to": "$sat137", + "next": "@celestial.saturn_orbit_step137" + }, + "saturn_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat137", + "to": "$sat138", + "next": "@celestial.saturn_orbit_step138" + }, + "saturn_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat138", + "to": "$sat139", + "next": "@celestial.saturn_orbit_step139" + }, + "saturn_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat139", + "to": "$sat140", + "next": "@celestial.saturn_orbit_step140" + }, + "saturn_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat140", + "to": "$sat141", + "next": "@celestial.saturn_orbit_step141" + }, + "saturn_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat141", + "to": "$sat142", + "next": "@celestial.saturn_orbit_step142" + }, + "saturn_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat142", + "to": "$sat143", + "next": "@celestial.saturn_orbit_step143" + }, + "saturn_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat143", + "to": "$sat144", + "next": "@celestial.saturn_orbit_step144" + }, + "saturn_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat144", + "to": "$sat145", + "next": "@celestial.saturn_orbit_step145" + }, + "saturn_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat145", + "to": "$sat146", + "next": "@celestial.saturn_orbit_step146" + }, + "saturn_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat146", + "to": "$sat147", + "next": "@celestial.saturn_orbit_step147" + }, + "saturn_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat147", + "to": "$sat148", + "next": "@celestial.saturn_orbit_step148" + }, + "saturn_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat148", + "to": "$sat149", + "next": "@celestial.saturn_orbit_step149" + }, + "saturn_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat149", + "to": "$sat150", + "next": "@celestial.saturn_orbit_step150" + }, + "saturn_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat150", + "to": "$sat151", + "next": "@celestial.saturn_orbit_step151" + }, + "saturn_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat151", + "to": "$sat152", + "next": "@celestial.saturn_orbit_step152" + }, + "saturn_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat152", + "to": "$sat153", + "next": "@celestial.saturn_orbit_step153" + }, + "saturn_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat153", + "to": "$sat154", + "next": "@celestial.saturn_orbit_step154" + }, + "saturn_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat154", + "to": "$sat155", + "next": "@celestial.saturn_orbit_step155" + }, + "saturn_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat155", + "to": "$sat156", + "next": "@celestial.saturn_orbit_step156" + }, + "saturn_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat156", + "to": "$sat157", + "next": "@celestial.saturn_orbit_step157" + }, + "saturn_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat157", + "to": "$sat158", + "next": "@celestial.saturn_orbit_step158" + }, + "saturn_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat158", + "to": "$sat159", + "next": "@celestial.saturn_orbit_step159" + }, + "saturn_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat159", + "to": "$sat160", + "next": "@celestial.saturn_orbit_step160" + }, + "saturn_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat160", + "to": "$sat161", + "next": "@celestial.saturn_orbit_step161" + }, + "saturn_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat161", + "to": "$sat162", + "next": "@celestial.saturn_orbit_step162" + }, + "saturn_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat162", + "to": "$sat163", + "next": "@celestial.saturn_orbit_step163" + }, + "saturn_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat163", + "to": "$sat164", + "next": "@celestial.saturn_orbit_step164" + }, + "saturn_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat164", + "to": "$sat165", + "next": "@celestial.saturn_orbit_step165" + }, + "saturn_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat165", + "to": "$sat166", + "next": "@celestial.saturn_orbit_step166" + }, + "saturn_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat166", + "to": "$sat167", + "next": "@celestial.saturn_orbit_step167" + }, + "saturn_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat167", + "to": "$sat168", + "next": "@celestial.saturn_orbit_step168" + }, + "saturn_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat168", + "to": "$sat169", + "next": "@celestial.saturn_orbit_step169" + }, + "saturn_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat169", + "to": "$sat170", + "next": "@celestial.saturn_orbit_step170" + }, + "saturn_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat170", + "to": "$sat171", + "next": "@celestial.saturn_orbit_step171" + }, + "saturn_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat171", + "to": "$sat172", + "next": "@celestial.saturn_orbit_step172" + }, + "saturn_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat172", + "to": "$sat173", + "next": "@celestial.saturn_orbit_step173" + }, + "saturn_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat173", + "to": "$sat174", + "next": "@celestial.saturn_orbit_step174" + }, + "saturn_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat174", + "to": "$sat175", + "next": "@celestial.saturn_orbit_step175" + }, + "saturn_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat175", + "to": "$sat176", + "next": "@celestial.saturn_orbit_step176" + }, + "saturn_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat176", + "to": "$sat177", + "next": "@celestial.saturn_orbit_step177" + }, + "saturn_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat177", + "to": "$sat178", + "next": "@celestial.saturn_orbit_step178" + }, + "saturn_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat178", + "to": "$sat179", + "next": "@celestial.saturn_orbit_step179" + }, + "saturn_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat179", + "to": "$sat180", + "next": "@celestial.saturn_orbit_step180" + }, + "saturn_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat180", + "to": "$sat181", + "next": "@celestial.saturn_orbit_step181" + }, + "saturn_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat181", + "to": "$sat182", + "next": "@celestial.saturn_orbit_step182" + }, + "saturn_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat182", + "to": "$sat183", + "next": "@celestial.saturn_orbit_step183" + }, + "saturn_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat183", + "to": "$sat184", + "next": "@celestial.saturn_orbit_step184" + }, + "saturn_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat184", + "to": "$sat185", + "next": "@celestial.saturn_orbit_step185" + }, + "saturn_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat185", + "to": "$sat186", + "next": "@celestial.saturn_orbit_step186" + }, + "saturn_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat186", + "to": "$sat187", + "next": "@celestial.saturn_orbit_step187" + }, + "saturn_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat187", + "to": "$sat188", + "next": "@celestial.saturn_orbit_step188" + }, + "saturn_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat188", + "to": "$sat189", + "next": "@celestial.saturn_orbit_step189" + }, + "saturn_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat189", + "to": "$sat190", + "next": "@celestial.saturn_orbit_step190" + }, + "saturn_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat190", + "to": "$sat191", + "next": "@celestial.saturn_orbit_step191" + }, + "saturn_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat191", + "to": "$sat192", + "next": "@celestial.saturn_orbit_step192" + }, + "saturn_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat192", + "to": "$sat193", + "next": "@celestial.saturn_orbit_step193" + }, + "saturn_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat193", + "to": "$sat194", + "next": "@celestial.saturn_orbit_step194" + }, + "saturn_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat194", + "to": "$sat195", + "next": "@celestial.saturn_orbit_step195" + }, + "saturn_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat195", + "to": "$sat196", + "next": "@celestial.saturn_orbit_step196" + }, + "saturn_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat196", + "to": "$sat197", + "next": "@celestial.saturn_orbit_step197" + }, + "saturn_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat197", + "to": "$sat198", + "next": "@celestial.saturn_orbit_step198" + }, + "saturn_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat198", + "to": "$sat199", + "next": "@celestial.saturn_orbit_step199" + }, + "saturn_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat199", + "to": "$sat200", + "next": "@celestial.saturn_orbit_step200" + }, + "saturn_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat200", + "to": "$sat201", + "next": "@celestial.saturn_orbit_step201" + }, + "saturn_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat201", + "to": "$sat202", + "next": "@celestial.saturn_orbit_step202" + }, + "saturn_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat202", + "to": "$sat203", + "next": "@celestial.saturn_orbit_step203" + }, + "saturn_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat203", + "to": "$sat204", + "next": "@celestial.saturn_orbit_step204" + }, + "saturn_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat204", + "to": "$sat205", + "next": "@celestial.saturn_orbit_step205" + }, + "saturn_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat205", + "to": "$sat206", + "next": "@celestial.saturn_orbit_step206" + }, + "saturn_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat206", + "to": "$sat207", + "next": "@celestial.saturn_orbit_step207" + }, + "saturn_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat207", + "to": "$sat208", + "next": "@celestial.saturn_orbit_step208" + }, + "saturn_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat208", + "to": "$sat209", + "next": "@celestial.saturn_orbit_step209" + }, + "saturn_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat209", + "to": "$sat210", + "next": "@celestial.saturn_orbit_step210" + }, + "saturn_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat210", + "to": "$sat211", + "next": "@celestial.saturn_orbit_step211" + }, + "saturn_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat211", + "to": "$sat212", + "next": "@celestial.saturn_orbit_step212" + }, + "saturn_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat212", + "to": "$sat213", + "next": "@celestial.saturn_orbit_step213" + }, + "saturn_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat213", + "to": "$sat214", + "next": "@celestial.saturn_orbit_step214" + }, + "saturn_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat214", + "to": "$sat215", + "next": "@celestial.saturn_orbit_step215" + }, + "saturn_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat215", + "to": "$sat216", + "next": "@celestial.saturn_orbit_step216" + }, + "saturn_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat216", + "to": "$sat217", + "next": "@celestial.saturn_orbit_step217" + }, + "saturn_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat217", + "to": "$sat218", + "next": "@celestial.saturn_orbit_step218" + }, + "saturn_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat218", + "to": "$sat219", + "next": "@celestial.saturn_orbit_step219" + }, + "saturn_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat219", + "to": "$sat220", + "next": "@celestial.saturn_orbit_step220" + }, + "saturn_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat220", + "to": "$sat221", + "next": "@celestial.saturn_orbit_step221" + }, + "saturn_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat221", + "to": "$sat222", + "next": "@celestial.saturn_orbit_step222" + }, + "saturn_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat222", + "to": "$sat223", + "next": "@celestial.saturn_orbit_step223" + }, + "saturn_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat223", + "to": "$sat224", + "next": "@celestial.saturn_orbit_step224" + }, + "saturn_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat224", + "to": "$sat225", + "next": "@celestial.saturn_orbit_step225" + }, + "saturn_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat225", + "to": "$sat226", + "next": "@celestial.saturn_orbit_step226" + }, + "saturn_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat226", + "to": "$sat227", + "next": "@celestial.saturn_orbit_step227" + }, + "saturn_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat227", + "to": "$sat228", + "next": "@celestial.saturn_orbit_step228" + }, + "saturn_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat228", + "to": "$sat229", + "next": "@celestial.saturn_orbit_step229" + }, + "saturn_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat229", + "to": "$sat230", + "next": "@celestial.saturn_orbit_step230" + }, + "saturn_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat230", + "to": "$sat231", + "next": "@celestial.saturn_orbit_step231" + }, + "saturn_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat231", + "to": "$sat232", + "next": "@celestial.saturn_orbit_step232" + }, + "saturn_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat232", + "to": "$sat233", + "next": "@celestial.saturn_orbit_step233" + }, + "saturn_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat233", + "to": "$sat234", + "next": "@celestial.saturn_orbit_step234" + }, + "saturn_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat234", + "to": "$sat235", + "next": "@celestial.saturn_orbit_step235" + }, + "saturn_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat235", + "to": "$sat236", + "next": "@celestial.saturn_orbit_step236" + }, + "saturn_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat236", + "to": "$sat237", + "next": "@celestial.saturn_orbit_step237" + }, + "saturn_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat237", + "to": "$sat238", + "next": "@celestial.saturn_orbit_step238" + }, + "saturn_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat238", + "to": "$sat239", + "next": "@celestial.saturn_orbit_step239" + }, + "saturn_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat239", + "to": "$sat240", + "next": "@celestial.saturn_orbit_step240" + }, + "saturn_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat240", + "to": "$sat241", + "next": "@celestial.saturn_orbit_step241" + }, + "saturn_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat241", + "to": "$sat242", + "next": "@celestial.saturn_orbit_step242" + }, + "saturn_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat242", + "to": "$sat243", + "next": "@celestial.saturn_orbit_step243" + }, + "saturn_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat243", + "to": "$sat244", + "next": "@celestial.saturn_orbit_step244" + }, + "saturn_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat244", + "to": "$sat245", + "next": "@celestial.saturn_orbit_step245" + }, + "saturn_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat245", + "to": "$sat246", + "next": "@celestial.saturn_orbit_step246" + }, + "saturn_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat246", + "to": "$sat247", + "next": "@celestial.saturn_orbit_step247" + }, + "saturn_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat247", + "to": "$sat248", + "next": "@celestial.saturn_orbit_step248" + }, + "saturn_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat248", + "to": "$sat249", + "next": "@celestial.saturn_orbit_step249" + }, + "saturn_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat249", + "to": "$sat250", + "next": "@celestial.saturn_orbit_step250" + }, + "saturn_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat250", + "to": "$sat251", + "next": "@celestial.saturn_orbit_step251" + }, + "saturn_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat251", + "to": "$sat252", + "next": "@celestial.saturn_orbit_step252" + }, + "saturn_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat252", + "to": "$sat253", + "next": "@celestial.saturn_orbit_step253" + }, + "saturn_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat253", + "to": "$sat254", + "next": "@celestial.saturn_orbit_step254" + }, + "saturn_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat254", + "to": "$sat255", + "next": "@celestial.saturn_orbit_step255" + }, + "saturn_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat255", + "to": "$sat256", + "next": "@celestial.saturn_orbit_step256" + }, + "saturn_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$sat256", + "to": "$sat1", + "next": "@celestial.saturn_orbit_step1" + }, + "uranus_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura1", + "to": "$ura2", + "next": "@celestial.uranus_orbit_step2" + }, + "uranus_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura2", + "to": "$ura3", + "next": "@celestial.uranus_orbit_step3" + }, + "uranus_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura3", + "to": "$ura4", + "next": "@celestial.uranus_orbit_step4" + }, + "uranus_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura4", + "to": "$ura5", + "next": "@celestial.uranus_orbit_step5" + }, + "uranus_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura5", + "to": "$ura6", + "next": "@celestial.uranus_orbit_step6" + }, + "uranus_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura6", + "to": "$ura7", + "next": "@celestial.uranus_orbit_step7" + }, + "uranus_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura7", + "to": "$ura8", + "next": "@celestial.uranus_orbit_step8" + }, + "uranus_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura8", + "to": "$ura9", + "next": "@celestial.uranus_orbit_step9" + }, + "uranus_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura9", + "to": "$ura10", + "next": "@celestial.uranus_orbit_step10" + }, + "uranus_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura10", + "to": "$ura11", + "next": "@celestial.uranus_orbit_step11" + }, + "uranus_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura11", + "to": "$ura12", + "next": "@celestial.uranus_orbit_step12" + }, + "uranus_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura12", + "to": "$ura13", + "next": "@celestial.uranus_orbit_step13" + }, + "uranus_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura13", + "to": "$ura14", + "next": "@celestial.uranus_orbit_step14" + }, + "uranus_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura14", + "to": "$ura15", + "next": "@celestial.uranus_orbit_step15" + }, + "uranus_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura15", + "to": "$ura16", + "next": "@celestial.uranus_orbit_step16" + }, + "uranus_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura16", + "to": "$ura17", + "next": "@celestial.uranus_orbit_step17" + }, + "uranus_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura17", + "to": "$ura18", + "next": "@celestial.uranus_orbit_step18" + }, + "uranus_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura18", + "to": "$ura19", + "next": "@celestial.uranus_orbit_step19" + }, + "uranus_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura19", + "to": "$ura20", + "next": "@celestial.uranus_orbit_step20" + }, + "uranus_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura20", + "to": "$ura21", + "next": "@celestial.uranus_orbit_step21" + }, + "uranus_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura21", + "to": "$ura22", + "next": "@celestial.uranus_orbit_step22" + }, + "uranus_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura22", + "to": "$ura23", + "next": "@celestial.uranus_orbit_step23" + }, + "uranus_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura23", + "to": "$ura24", + "next": "@celestial.uranus_orbit_step24" + }, + "uranus_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura24", + "to": "$ura25", + "next": "@celestial.uranus_orbit_step25" + }, + "uranus_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura25", + "to": "$ura26", + "next": "@celestial.uranus_orbit_step26" + }, + "uranus_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura26", + "to": "$ura27", + "next": "@celestial.uranus_orbit_step27" + }, + "uranus_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura27", + "to": "$ura28", + "next": "@celestial.uranus_orbit_step28" + }, + "uranus_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura28", + "to": "$ura29", + "next": "@celestial.uranus_orbit_step29" + }, + "uranus_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura29", + "to": "$ura30", + "next": "@celestial.uranus_orbit_step30" + }, + "uranus_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura30", + "to": "$ura31", + "next": "@celestial.uranus_orbit_step31" + }, + "uranus_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura31", + "to": "$ura32", + "next": "@celestial.uranus_orbit_step32" + }, + "uranus_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura32", + "to": "$ura33", + "next": "@celestial.uranus_orbit_step33" + }, + "uranus_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura33", + "to": "$ura34", + "next": "@celestial.uranus_orbit_step34" + }, + "uranus_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura34", + "to": "$ura35", + "next": "@celestial.uranus_orbit_step35" + }, + "uranus_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura35", + "to": "$ura36", + "next": "@celestial.uranus_orbit_step36" + }, + "uranus_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura36", + "to": "$ura37", + "next": "@celestial.uranus_orbit_step37" + }, + "uranus_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura37", + "to": "$ura38", + "next": "@celestial.uranus_orbit_step38" + }, + "uranus_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura38", + "to": "$ura39", + "next": "@celestial.uranus_orbit_step39" + }, + "uranus_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura39", + "to": "$ura40", + "next": "@celestial.uranus_orbit_step40" + }, + "uranus_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura40", + "to": "$ura41", + "next": "@celestial.uranus_orbit_step41" + }, + "uranus_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura41", + "to": "$ura42", + "next": "@celestial.uranus_orbit_step42" + }, + "uranus_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura42", + "to": "$ura43", + "next": "@celestial.uranus_orbit_step43" + }, + "uranus_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura43", + "to": "$ura44", + "next": "@celestial.uranus_orbit_step44" + }, + "uranus_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura44", + "to": "$ura45", + "next": "@celestial.uranus_orbit_step45" + }, + "uranus_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura45", + "to": "$ura46", + "next": "@celestial.uranus_orbit_step46" + }, + "uranus_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura46", + "to": "$ura47", + "next": "@celestial.uranus_orbit_step47" + }, + "uranus_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura47", + "to": "$ura48", + "next": "@celestial.uranus_orbit_step48" + }, + "uranus_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura48", + "to": "$ura49", + "next": "@celestial.uranus_orbit_step49" + }, + "uranus_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura49", + "to": "$ura50", + "next": "@celestial.uranus_orbit_step50" + }, + "uranus_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura50", + "to": "$ura51", + "next": "@celestial.uranus_orbit_step51" + }, + "uranus_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura51", + "to": "$ura52", + "next": "@celestial.uranus_orbit_step52" + }, + "uranus_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura52", + "to": "$ura53", + "next": "@celestial.uranus_orbit_step53" + }, + "uranus_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura53", + "to": "$ura54", + "next": "@celestial.uranus_orbit_step54" + }, + "uranus_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura54", + "to": "$ura55", + "next": "@celestial.uranus_orbit_step55" + }, + "uranus_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura55", + "to": "$ura56", + "next": "@celestial.uranus_orbit_step56" + }, + "uranus_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura56", + "to": "$ura57", + "next": "@celestial.uranus_orbit_step57" + }, + "uranus_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura57", + "to": "$ura58", + "next": "@celestial.uranus_orbit_step58" + }, + "uranus_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura58", + "to": "$ura59", + "next": "@celestial.uranus_orbit_step59" + }, + "uranus_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura59", + "to": "$ura60", + "next": "@celestial.uranus_orbit_step60" + }, + "uranus_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura60", + "to": "$ura61", + "next": "@celestial.uranus_orbit_step61" + }, + "uranus_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura61", + "to": "$ura62", + "next": "@celestial.uranus_orbit_step62" + }, + "uranus_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura62", + "to": "$ura63", + "next": "@celestial.uranus_orbit_step63" + }, + "uranus_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura63", + "to": "$ura64", + "next": "@celestial.uranus_orbit_step64" + }, + "uranus_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura64", + "to": "$ura65", + "next": "@celestial.uranus_orbit_step65" + }, + "uranus_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura65", + "to": "$ura66", + "next": "@celestial.uranus_orbit_step66" + }, + "uranus_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura66", + "to": "$ura67", + "next": "@celestial.uranus_orbit_step67" + }, + "uranus_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura67", + "to": "$ura68", + "next": "@celestial.uranus_orbit_step68" + }, + "uranus_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura68", + "to": "$ura69", + "next": "@celestial.uranus_orbit_step69" + }, + "uranus_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura69", + "to": "$ura70", + "next": "@celestial.uranus_orbit_step70" + }, + "uranus_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura70", + "to": "$ura71", + "next": "@celestial.uranus_orbit_step71" + }, + "uranus_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura71", + "to": "$ura72", + "next": "@celestial.uranus_orbit_step72" + }, + "uranus_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura72", + "to": "$ura73", + "next": "@celestial.uranus_orbit_step73" + }, + "uranus_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura73", + "to": "$ura74", + "next": "@celestial.uranus_orbit_step74" + }, + "uranus_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura74", + "to": "$ura75", + "next": "@celestial.uranus_orbit_step75" + }, + "uranus_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura75", + "to": "$ura76", + "next": "@celestial.uranus_orbit_step76" + }, + "uranus_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura76", + "to": "$ura77", + "next": "@celestial.uranus_orbit_step77" + }, + "uranus_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura77", + "to": "$ura78", + "next": "@celestial.uranus_orbit_step78" + }, + "uranus_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura78", + "to": "$ura79", + "next": "@celestial.uranus_orbit_step79" + }, + "uranus_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura79", + "to": "$ura80", + "next": "@celestial.uranus_orbit_step80" + }, + "uranus_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura80", + "to": "$ura81", + "next": "@celestial.uranus_orbit_step81" + }, + "uranus_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura81", + "to": "$ura82", + "next": "@celestial.uranus_orbit_step82" + }, + "uranus_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura82", + "to": "$ura83", + "next": "@celestial.uranus_orbit_step83" + }, + "uranus_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura83", + "to": "$ura84", + "next": "@celestial.uranus_orbit_step84" + }, + "uranus_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura84", + "to": "$ura85", + "next": "@celestial.uranus_orbit_step85" + }, + "uranus_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura85", + "to": "$ura86", + "next": "@celestial.uranus_orbit_step86" + }, + "uranus_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura86", + "to": "$ura87", + "next": "@celestial.uranus_orbit_step87" + }, + "uranus_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura87", + "to": "$ura88", + "next": "@celestial.uranus_orbit_step88" + }, + "uranus_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura88", + "to": "$ura89", + "next": "@celestial.uranus_orbit_step89" + }, + "uranus_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura89", + "to": "$ura90", + "next": "@celestial.uranus_orbit_step90" + }, + "uranus_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura90", + "to": "$ura91", + "next": "@celestial.uranus_orbit_step91" + }, + "uranus_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura91", + "to": "$ura92", + "next": "@celestial.uranus_orbit_step92" + }, + "uranus_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura92", + "to": "$ura93", + "next": "@celestial.uranus_orbit_step93" + }, + "uranus_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura93", + "to": "$ura94", + "next": "@celestial.uranus_orbit_step94" + }, + "uranus_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura94", + "to": "$ura95", + "next": "@celestial.uranus_orbit_step95" + }, + "uranus_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura95", + "to": "$ura96", + "next": "@celestial.uranus_orbit_step96" + }, + "uranus_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura96", + "to": "$ura97", + "next": "@celestial.uranus_orbit_step97" + }, + "uranus_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura97", + "to": "$ura98", + "next": "@celestial.uranus_orbit_step98" + }, + "uranus_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura98", + "to": "$ura99", + "next": "@celestial.uranus_orbit_step99" + }, + "uranus_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura99", + "to": "$ura100", + "next": "@celestial.uranus_orbit_step100" + }, + "uranus_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura100", + "to": "$ura101", + "next": "@celestial.uranus_orbit_step101" + }, + "uranus_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura101", + "to": "$ura102", + "next": "@celestial.uranus_orbit_step102" + }, + "uranus_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura102", + "to": "$ura103", + "next": "@celestial.uranus_orbit_step103" + }, + "uranus_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura103", + "to": "$ura104", + "next": "@celestial.uranus_orbit_step104" + }, + "uranus_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura104", + "to": "$ura105", + "next": "@celestial.uranus_orbit_step105" + }, + "uranus_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura105", + "to": "$ura106", + "next": "@celestial.uranus_orbit_step106" + }, + "uranus_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura106", + "to": "$ura107", + "next": "@celestial.uranus_orbit_step107" + }, + "uranus_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura107", + "to": "$ura108", + "next": "@celestial.uranus_orbit_step108" + }, + "uranus_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura108", + "to": "$ura109", + "next": "@celestial.uranus_orbit_step109" + }, + "uranus_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura109", + "to": "$ura110", + "next": "@celestial.uranus_orbit_step110" + }, + "uranus_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura110", + "to": "$ura111", + "next": "@celestial.uranus_orbit_step111" + }, + "uranus_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura111", + "to": "$ura112", + "next": "@celestial.uranus_orbit_step112" + }, + "uranus_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura112", + "to": "$ura113", + "next": "@celestial.uranus_orbit_step113" + }, + "uranus_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura113", + "to": "$ura114", + "next": "@celestial.uranus_orbit_step114" + }, + "uranus_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura114", + "to": "$ura115", + "next": "@celestial.uranus_orbit_step115" + }, + "uranus_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura115", + "to": "$ura116", + "next": "@celestial.uranus_orbit_step116" + }, + "uranus_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura116", + "to": "$ura117", + "next": "@celestial.uranus_orbit_step117" + }, + "uranus_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura117", + "to": "$ura118", + "next": "@celestial.uranus_orbit_step118" + }, + "uranus_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura118", + "to": "$ura119", + "next": "@celestial.uranus_orbit_step119" + }, + "uranus_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura119", + "to": "$ura120", + "next": "@celestial.uranus_orbit_step120" + }, + "uranus_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura120", + "to": "$ura121", + "next": "@celestial.uranus_orbit_step121" + }, + "uranus_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura121", + "to": "$ura122", + "next": "@celestial.uranus_orbit_step122" + }, + "uranus_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura122", + "to": "$ura123", + "next": "@celestial.uranus_orbit_step123" + }, + "uranus_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura123", + "to": "$ura124", + "next": "@celestial.uranus_orbit_step124" + }, + "uranus_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura124", + "to": "$ura125", + "next": "@celestial.uranus_orbit_step125" + }, + "uranus_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura125", + "to": "$ura126", + "next": "@celestial.uranus_orbit_step126" + }, + "uranus_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura126", + "to": "$ura127", + "next": "@celestial.uranus_orbit_step127" + }, + "uranus_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura127", + "to": "$ura128", + "next": "@celestial.uranus_orbit_step128" + }, + "uranus_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura128", + "to": "$ura129", + "next": "@celestial.uranus_orbit_step129" + }, + "uranus_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura129", + "to": "$ura130", + "next": "@celestial.uranus_orbit_step130" + }, + "uranus_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura130", + "to": "$ura131", + "next": "@celestial.uranus_orbit_step131" + }, + "uranus_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura131", + "to": "$ura132", + "next": "@celestial.uranus_orbit_step132" + }, + "uranus_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura132", + "to": "$ura133", + "next": "@celestial.uranus_orbit_step133" + }, + "uranus_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura133", + "to": "$ura134", + "next": "@celestial.uranus_orbit_step134" + }, + "uranus_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura134", + "to": "$ura135", + "next": "@celestial.uranus_orbit_step135" + }, + "uranus_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura135", + "to": "$ura136", + "next": "@celestial.uranus_orbit_step136" + }, + "uranus_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura136", + "to": "$ura137", + "next": "@celestial.uranus_orbit_step137" + }, + "uranus_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura137", + "to": "$ura138", + "next": "@celestial.uranus_orbit_step138" + }, + "uranus_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura138", + "to": "$ura139", + "next": "@celestial.uranus_orbit_step139" + }, + "uranus_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura139", + "to": "$ura140", + "next": "@celestial.uranus_orbit_step140" + }, + "uranus_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura140", + "to": "$ura141", + "next": "@celestial.uranus_orbit_step141" + }, + "uranus_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura141", + "to": "$ura142", + "next": "@celestial.uranus_orbit_step142" + }, + "uranus_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura142", + "to": "$ura143", + "next": "@celestial.uranus_orbit_step143" + }, + "uranus_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura143", + "to": "$ura144", + "next": "@celestial.uranus_orbit_step144" + }, + "uranus_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura144", + "to": "$ura145", + "next": "@celestial.uranus_orbit_step145" + }, + "uranus_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura145", + "to": "$ura146", + "next": "@celestial.uranus_orbit_step146" + }, + "uranus_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura146", + "to": "$ura147", + "next": "@celestial.uranus_orbit_step147" + }, + "uranus_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura147", + "to": "$ura148", + "next": "@celestial.uranus_orbit_step148" + }, + "uranus_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura148", + "to": "$ura149", + "next": "@celestial.uranus_orbit_step149" + }, + "uranus_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura149", + "to": "$ura150", + "next": "@celestial.uranus_orbit_step150" + }, + "uranus_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura150", + "to": "$ura151", + "next": "@celestial.uranus_orbit_step151" + }, + "uranus_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura151", + "to": "$ura152", + "next": "@celestial.uranus_orbit_step152" + }, + "uranus_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura152", + "to": "$ura153", + "next": "@celestial.uranus_orbit_step153" + }, + "uranus_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura153", + "to": "$ura154", + "next": "@celestial.uranus_orbit_step154" + }, + "uranus_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura154", + "to": "$ura155", + "next": "@celestial.uranus_orbit_step155" + }, + "uranus_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura155", + "to": "$ura156", + "next": "@celestial.uranus_orbit_step156" + }, + "uranus_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura156", + "to": "$ura157", + "next": "@celestial.uranus_orbit_step157" + }, + "uranus_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura157", + "to": "$ura158", + "next": "@celestial.uranus_orbit_step158" + }, + "uranus_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura158", + "to": "$ura159", + "next": "@celestial.uranus_orbit_step159" + }, + "uranus_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura159", + "to": "$ura160", + "next": "@celestial.uranus_orbit_step160" + }, + "uranus_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura160", + "to": "$ura161", + "next": "@celestial.uranus_orbit_step161" + }, + "uranus_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura161", + "to": "$ura162", + "next": "@celestial.uranus_orbit_step162" + }, + "uranus_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura162", + "to": "$ura163", + "next": "@celestial.uranus_orbit_step163" + }, + "uranus_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura163", + "to": "$ura164", + "next": "@celestial.uranus_orbit_step164" + }, + "uranus_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura164", + "to": "$ura165", + "next": "@celestial.uranus_orbit_step165" + }, + "uranus_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura165", + "to": "$ura166", + "next": "@celestial.uranus_orbit_step166" + }, + "uranus_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura166", + "to": "$ura167", + "next": "@celestial.uranus_orbit_step167" + }, + "uranus_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura167", + "to": "$ura168", + "next": "@celestial.uranus_orbit_step168" + }, + "uranus_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura168", + "to": "$ura169", + "next": "@celestial.uranus_orbit_step169" + }, + "uranus_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura169", + "to": "$ura170", + "next": "@celestial.uranus_orbit_step170" + }, + "uranus_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura170", + "to": "$ura171", + "next": "@celestial.uranus_orbit_step171" + }, + "uranus_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura171", + "to": "$ura172", + "next": "@celestial.uranus_orbit_step172" + }, + "uranus_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura172", + "to": "$ura173", + "next": "@celestial.uranus_orbit_step173" + }, + "uranus_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura173", + "to": "$ura174", + "next": "@celestial.uranus_orbit_step174" + }, + "uranus_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura174", + "to": "$ura175", + "next": "@celestial.uranus_orbit_step175" + }, + "uranus_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura175", + "to": "$ura176", + "next": "@celestial.uranus_orbit_step176" + }, + "uranus_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura176", + "to": "$ura177", + "next": "@celestial.uranus_orbit_step177" + }, + "uranus_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura177", + "to": "$ura178", + "next": "@celestial.uranus_orbit_step178" + }, + "uranus_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura178", + "to": "$ura179", + "next": "@celestial.uranus_orbit_step179" + }, + "uranus_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura179", + "to": "$ura180", + "next": "@celestial.uranus_orbit_step180" + }, + "uranus_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura180", + "to": "$ura181", + "next": "@celestial.uranus_orbit_step181" + }, + "uranus_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura181", + "to": "$ura182", + "next": "@celestial.uranus_orbit_step182" + }, + "uranus_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura182", + "to": "$ura183", + "next": "@celestial.uranus_orbit_step183" + }, + "uranus_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura183", + "to": "$ura184", + "next": "@celestial.uranus_orbit_step184" + }, + "uranus_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura184", + "to": "$ura185", + "next": "@celestial.uranus_orbit_step185" + }, + "uranus_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura185", + "to": "$ura186", + "next": "@celestial.uranus_orbit_step186" + }, + "uranus_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura186", + "to": "$ura187", + "next": "@celestial.uranus_orbit_step187" + }, + "uranus_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura187", + "to": "$ura188", + "next": "@celestial.uranus_orbit_step188" + }, + "uranus_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura188", + "to": "$ura189", + "next": "@celestial.uranus_orbit_step189" + }, + "uranus_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura189", + "to": "$ura190", + "next": "@celestial.uranus_orbit_step190" + }, + "uranus_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura190", + "to": "$ura191", + "next": "@celestial.uranus_orbit_step191" + }, + "uranus_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura191", + "to": "$ura192", + "next": "@celestial.uranus_orbit_step192" + }, + "uranus_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura192", + "to": "$ura193", + "next": "@celestial.uranus_orbit_step193" + }, + "uranus_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura193", + "to": "$ura194", + "next": "@celestial.uranus_orbit_step194" + }, + "uranus_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura194", + "to": "$ura195", + "next": "@celestial.uranus_orbit_step195" + }, + "uranus_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura195", + "to": "$ura196", + "next": "@celestial.uranus_orbit_step196" + }, + "uranus_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura196", + "to": "$ura197", + "next": "@celestial.uranus_orbit_step197" + }, + "uranus_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura197", + "to": "$ura198", + "next": "@celestial.uranus_orbit_step198" + }, + "uranus_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura198", + "to": "$ura199", + "next": "@celestial.uranus_orbit_step199" + }, + "uranus_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura199", + "to": "$ura200", + "next": "@celestial.uranus_orbit_step200" + }, + "uranus_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura200", + "to": "$ura201", + "next": "@celestial.uranus_orbit_step201" + }, + "uranus_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura201", + "to": "$ura202", + "next": "@celestial.uranus_orbit_step202" + }, + "uranus_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura202", + "to": "$ura203", + "next": "@celestial.uranus_orbit_step203" + }, + "uranus_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura203", + "to": "$ura204", + "next": "@celestial.uranus_orbit_step204" + }, + "uranus_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura204", + "to": "$ura205", + "next": "@celestial.uranus_orbit_step205" + }, + "uranus_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura205", + "to": "$ura206", + "next": "@celestial.uranus_orbit_step206" + }, + "uranus_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura206", + "to": "$ura207", + "next": "@celestial.uranus_orbit_step207" + }, + "uranus_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura207", + "to": "$ura208", + "next": "@celestial.uranus_orbit_step208" + }, + "uranus_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura208", + "to": "$ura209", + "next": "@celestial.uranus_orbit_step209" + }, + "uranus_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura209", + "to": "$ura210", + "next": "@celestial.uranus_orbit_step210" + }, + "uranus_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura210", + "to": "$ura211", + "next": "@celestial.uranus_orbit_step211" + }, + "uranus_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura211", + "to": "$ura212", + "next": "@celestial.uranus_orbit_step212" + }, + "uranus_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura212", + "to": "$ura213", + "next": "@celestial.uranus_orbit_step213" + }, + "uranus_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura213", + "to": "$ura214", + "next": "@celestial.uranus_orbit_step214" + }, + "uranus_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura214", + "to": "$ura215", + "next": "@celestial.uranus_orbit_step215" + }, + "uranus_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura215", + "to": "$ura216", + "next": "@celestial.uranus_orbit_step216" + }, + "uranus_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura216", + "to": "$ura217", + "next": "@celestial.uranus_orbit_step217" + }, + "uranus_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura217", + "to": "$ura218", + "next": "@celestial.uranus_orbit_step218" + }, + "uranus_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura218", + "to": "$ura219", + "next": "@celestial.uranus_orbit_step219" + }, + "uranus_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura219", + "to": "$ura220", + "next": "@celestial.uranus_orbit_step220" + }, + "uranus_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura220", + "to": "$ura221", + "next": "@celestial.uranus_orbit_step221" + }, + "uranus_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura221", + "to": "$ura222", + "next": "@celestial.uranus_orbit_step222" + }, + "uranus_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura222", + "to": "$ura223", + "next": "@celestial.uranus_orbit_step223" + }, + "uranus_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura223", + "to": "$ura224", + "next": "@celestial.uranus_orbit_step224" + }, + "uranus_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura224", + "to": "$ura225", + "next": "@celestial.uranus_orbit_step225" + }, + "uranus_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura225", + "to": "$ura226", + "next": "@celestial.uranus_orbit_step226" + }, + "uranus_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura226", + "to": "$ura227", + "next": "@celestial.uranus_orbit_step227" + }, + "uranus_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura227", + "to": "$ura228", + "next": "@celestial.uranus_orbit_step228" + }, + "uranus_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura228", + "to": "$ura229", + "next": "@celestial.uranus_orbit_step229" + }, + "uranus_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura229", + "to": "$ura230", + "next": "@celestial.uranus_orbit_step230" + }, + "uranus_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura230", + "to": "$ura231", + "next": "@celestial.uranus_orbit_step231" + }, + "uranus_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura231", + "to": "$ura232", + "next": "@celestial.uranus_orbit_step232" + }, + "uranus_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura232", + "to": "$ura233", + "next": "@celestial.uranus_orbit_step233" + }, + "uranus_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura233", + "to": "$ura234", + "next": "@celestial.uranus_orbit_step234" + }, + "uranus_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura234", + "to": "$ura235", + "next": "@celestial.uranus_orbit_step235" + }, + "uranus_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura235", + "to": "$ura236", + "next": "@celestial.uranus_orbit_step236" + }, + "uranus_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura236", + "to": "$ura237", + "next": "@celestial.uranus_orbit_step237" + }, + "uranus_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura237", + "to": "$ura238", + "next": "@celestial.uranus_orbit_step238" + }, + "uranus_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura238", + "to": "$ura239", + "next": "@celestial.uranus_orbit_step239" + }, + "uranus_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura239", + "to": "$ura240", + "next": "@celestial.uranus_orbit_step240" + }, + "uranus_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura240", + "to": "$ura241", + "next": "@celestial.uranus_orbit_step241" + }, + "uranus_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura241", + "to": "$ura242", + "next": "@celestial.uranus_orbit_step242" + }, + "uranus_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura242", + "to": "$ura243", + "next": "@celestial.uranus_orbit_step243" + }, + "uranus_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura243", + "to": "$ura244", + "next": "@celestial.uranus_orbit_step244" + }, + "uranus_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura244", + "to": "$ura245", + "next": "@celestial.uranus_orbit_step245" + }, + "uranus_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura245", + "to": "$ura246", + "next": "@celestial.uranus_orbit_step246" + }, + "uranus_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura246", + "to": "$ura247", + "next": "@celestial.uranus_orbit_step247" + }, + "uranus_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura247", + "to": "$ura248", + "next": "@celestial.uranus_orbit_step248" + }, + "uranus_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura248", + "to": "$ura249", + "next": "@celestial.uranus_orbit_step249" + }, + "uranus_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura249", + "to": "$ura250", + "next": "@celestial.uranus_orbit_step250" + }, + "uranus_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura250", + "to": "$ura251", + "next": "@celestial.uranus_orbit_step251" + }, + "uranus_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura251", + "to": "$ura252", + "next": "@celestial.uranus_orbit_step252" + }, + "uranus_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura252", + "to": "$ura253", + "next": "@celestial.uranus_orbit_step253" + }, + "uranus_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura253", + "to": "$ura254", + "next": "@celestial.uranus_orbit_step254" + }, + "uranus_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura254", + "to": "$ura255", + "next": "@celestial.uranus_orbit_step255" + }, + "uranus_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura255", + "to": "$ura256", + "next": "@celestial.uranus_orbit_step256" + }, + "uranus_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$ura256", + "to": "$ura1", + "next": "@celestial.uranus_orbit_step1" + }, + "neptune_orbit_step1": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep1", + "to": "$nep2", + "next": "@celestial.neptune_orbit_step2" + }, + "neptune_orbit_step2": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep2", + "to": "$nep3", + "next": "@celestial.neptune_orbit_step3" + }, + "neptune_orbit_step3": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep3", + "to": "$nep4", + "next": "@celestial.neptune_orbit_step4" + }, + "neptune_orbit_step4": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep4", + "to": "$nep5", + "next": "@celestial.neptune_orbit_step5" + }, + "neptune_orbit_step5": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep5", + "to": "$nep6", + "next": "@celestial.neptune_orbit_step6" + }, + "neptune_orbit_step6": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep6", + "to": "$nep7", + "next": "@celestial.neptune_orbit_step7" + }, + "neptune_orbit_step7": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep7", + "to": "$nep8", + "next": "@celestial.neptune_orbit_step8" + }, + "neptune_orbit_step8": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep8", + "to": "$nep9", + "next": "@celestial.neptune_orbit_step9" + }, + "neptune_orbit_step9": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep9", + "to": "$nep10", + "next": "@celestial.neptune_orbit_step10" + }, + "neptune_orbit_step10": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep10", + "to": "$nep11", + "next": "@celestial.neptune_orbit_step11" + }, + "neptune_orbit_step11": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep11", + "to": "$nep12", + "next": "@celestial.neptune_orbit_step12" + }, + "neptune_orbit_step12": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep12", + "to": "$nep13", + "next": "@celestial.neptune_orbit_step13" + }, + "neptune_orbit_step13": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep13", + "to": "$nep14", + "next": "@celestial.neptune_orbit_step14" + }, + "neptune_orbit_step14": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep14", + "to": "$nep15", + "next": "@celestial.neptune_orbit_step15" + }, + "neptune_orbit_step15": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep15", + "to": "$nep16", + "next": "@celestial.neptune_orbit_step16" + }, + "neptune_orbit_step16": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep16", + "to": "$nep17", + "next": "@celestial.neptune_orbit_step17" + }, + "neptune_orbit_step17": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep17", + "to": "$nep18", + "next": "@celestial.neptune_orbit_step18" + }, + "neptune_orbit_step18": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep18", + "to": "$nep19", + "next": "@celestial.neptune_orbit_step19" + }, + "neptune_orbit_step19": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep19", + "to": "$nep20", + "next": "@celestial.neptune_orbit_step20" + }, + "neptune_orbit_step20": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep20", + "to": "$nep21", + "next": "@celestial.neptune_orbit_step21" + }, + "neptune_orbit_step21": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep21", + "to": "$nep22", + "next": "@celestial.neptune_orbit_step22" + }, + "neptune_orbit_step22": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep22", + "to": "$nep23", + "next": "@celestial.neptune_orbit_step23" + }, + "neptune_orbit_step23": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep23", + "to": "$nep24", + "next": "@celestial.neptune_orbit_step24" + }, + "neptune_orbit_step24": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep24", + "to": "$nep25", + "next": "@celestial.neptune_orbit_step25" + }, + "neptune_orbit_step25": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep25", + "to": "$nep26", + "next": "@celestial.neptune_orbit_step26" + }, + "neptune_orbit_step26": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep26", + "to": "$nep27", + "next": "@celestial.neptune_orbit_step27" + }, + "neptune_orbit_step27": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep27", + "to": "$nep28", + "next": "@celestial.neptune_orbit_step28" + }, + "neptune_orbit_step28": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep28", + "to": "$nep29", + "next": "@celestial.neptune_orbit_step29" + }, + "neptune_orbit_step29": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep29", + "to": "$nep30", + "next": "@celestial.neptune_orbit_step30" + }, + "neptune_orbit_step30": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep30", + "to": "$nep31", + "next": "@celestial.neptune_orbit_step31" + }, + "neptune_orbit_step31": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep31", + "to": "$nep32", + "next": "@celestial.neptune_orbit_step32" + }, + "neptune_orbit_step32": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep32", + "to": "$nep33", + "next": "@celestial.neptune_orbit_step33" + }, + "neptune_orbit_step33": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep33", + "to": "$nep34", + "next": "@celestial.neptune_orbit_step34" + }, + "neptune_orbit_step34": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep34", + "to": "$nep35", + "next": "@celestial.neptune_orbit_step35" + }, + "neptune_orbit_step35": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep35", + "to": "$nep36", + "next": "@celestial.neptune_orbit_step36" + }, + "neptune_orbit_step36": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep36", + "to": "$nep37", + "next": "@celestial.neptune_orbit_step37" + }, + "neptune_orbit_step37": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep37", + "to": "$nep38", + "next": "@celestial.neptune_orbit_step38" + }, + "neptune_orbit_step38": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep38", + "to": "$nep39", + "next": "@celestial.neptune_orbit_step39" + }, + "neptune_orbit_step39": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep39", + "to": "$nep40", + "next": "@celestial.neptune_orbit_step40" + }, + "neptune_orbit_step40": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep40", + "to": "$nep41", + "next": "@celestial.neptune_orbit_step41" + }, + "neptune_orbit_step41": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep41", + "to": "$nep42", + "next": "@celestial.neptune_orbit_step42" + }, + "neptune_orbit_step42": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep42", + "to": "$nep43", + "next": "@celestial.neptune_orbit_step43" + }, + "neptune_orbit_step43": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep43", + "to": "$nep44", + "next": "@celestial.neptune_orbit_step44" + }, + "neptune_orbit_step44": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep44", + "to": "$nep45", + "next": "@celestial.neptune_orbit_step45" + }, + "neptune_orbit_step45": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep45", + "to": "$nep46", + "next": "@celestial.neptune_orbit_step46" + }, + "neptune_orbit_step46": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep46", + "to": "$nep47", + "next": "@celestial.neptune_orbit_step47" + }, + "neptune_orbit_step47": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep47", + "to": "$nep48", + "next": "@celestial.neptune_orbit_step48" + }, + "neptune_orbit_step48": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep48", + "to": "$nep49", + "next": "@celestial.neptune_orbit_step49" + }, + "neptune_orbit_step49": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep49", + "to": "$nep50", + "next": "@celestial.neptune_orbit_step50" + }, + "neptune_orbit_step50": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep50", + "to": "$nep51", + "next": "@celestial.neptune_orbit_step51" + }, + "neptune_orbit_step51": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep51", + "to": "$nep52", + "next": "@celestial.neptune_orbit_step52" + }, + "neptune_orbit_step52": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep52", + "to": "$nep53", + "next": "@celestial.neptune_orbit_step53" + }, + "neptune_orbit_step53": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep53", + "to": "$nep54", + "next": "@celestial.neptune_orbit_step54" + }, + "neptune_orbit_step54": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep54", + "to": "$nep55", + "next": "@celestial.neptune_orbit_step55" + }, + "neptune_orbit_step55": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep55", + "to": "$nep56", + "next": "@celestial.neptune_orbit_step56" + }, + "neptune_orbit_step56": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep56", + "to": "$nep57", + "next": "@celestial.neptune_orbit_step57" + }, + "neptune_orbit_step57": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep57", + "to": "$nep58", + "next": "@celestial.neptune_orbit_step58" + }, + "neptune_orbit_step58": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep58", + "to": "$nep59", + "next": "@celestial.neptune_orbit_step59" + }, + "neptune_orbit_step59": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep59", + "to": "$nep60", + "next": "@celestial.neptune_orbit_step60" + }, + "neptune_orbit_step60": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep60", + "to": "$nep61", + "next": "@celestial.neptune_orbit_step61" + }, + "neptune_orbit_step61": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep61", + "to": "$nep62", + "next": "@celestial.neptune_orbit_step62" + }, + "neptune_orbit_step62": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep62", + "to": "$nep63", + "next": "@celestial.neptune_orbit_step63" + }, + "neptune_orbit_step63": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep63", + "to": "$nep64", + "next": "@celestial.neptune_orbit_step64" + }, + "neptune_orbit_step64": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep64", + "to": "$nep65", + "next": "@celestial.neptune_orbit_step65" + }, + "neptune_orbit_step65": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep65", + "to": "$nep66", + "next": "@celestial.neptune_orbit_step66" + }, + "neptune_orbit_step66": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep66", + "to": "$nep67", + "next": "@celestial.neptune_orbit_step67" + }, + "neptune_orbit_step67": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep67", + "to": "$nep68", + "next": "@celestial.neptune_orbit_step68" + }, + "neptune_orbit_step68": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep68", + "to": "$nep69", + "next": "@celestial.neptune_orbit_step69" + }, + "neptune_orbit_step69": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep69", + "to": "$nep70", + "next": "@celestial.neptune_orbit_step70" + }, + "neptune_orbit_step70": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep70", + "to": "$nep71", + "next": "@celestial.neptune_orbit_step71" + }, + "neptune_orbit_step71": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep71", + "to": "$nep72", + "next": "@celestial.neptune_orbit_step72" + }, + "neptune_orbit_step72": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep72", + "to": "$nep73", + "next": "@celestial.neptune_orbit_step73" + }, + "neptune_orbit_step73": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep73", + "to": "$nep74", + "next": "@celestial.neptune_orbit_step74" + }, + "neptune_orbit_step74": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep74", + "to": "$nep75", + "next": "@celestial.neptune_orbit_step75" + }, + "neptune_orbit_step75": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep75", + "to": "$nep76", + "next": "@celestial.neptune_orbit_step76" + }, + "neptune_orbit_step76": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep76", + "to": "$nep77", + "next": "@celestial.neptune_orbit_step77" + }, + "neptune_orbit_step77": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep77", + "to": "$nep78", + "next": "@celestial.neptune_orbit_step78" + }, + "neptune_orbit_step78": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep78", + "to": "$nep79", + "next": "@celestial.neptune_orbit_step79" + }, + "neptune_orbit_step79": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep79", + "to": "$nep80", + "next": "@celestial.neptune_orbit_step80" + }, + "neptune_orbit_step80": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep80", + "to": "$nep81", + "next": "@celestial.neptune_orbit_step81" + }, + "neptune_orbit_step81": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep81", + "to": "$nep82", + "next": "@celestial.neptune_orbit_step82" + }, + "neptune_orbit_step82": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep82", + "to": "$nep83", + "next": "@celestial.neptune_orbit_step83" + }, + "neptune_orbit_step83": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep83", + "to": "$nep84", + "next": "@celestial.neptune_orbit_step84" + }, + "neptune_orbit_step84": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep84", + "to": "$nep85", + "next": "@celestial.neptune_orbit_step85" + }, + "neptune_orbit_step85": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep85", + "to": "$nep86", + "next": "@celestial.neptune_orbit_step86" + }, + "neptune_orbit_step86": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep86", + "to": "$nep87", + "next": "@celestial.neptune_orbit_step87" + }, + "neptune_orbit_step87": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep87", + "to": "$nep88", + "next": "@celestial.neptune_orbit_step88" + }, + "neptune_orbit_step88": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep88", + "to": "$nep89", + "next": "@celestial.neptune_orbit_step89" + }, + "neptune_orbit_step89": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep89", + "to": "$nep90", + "next": "@celestial.neptune_orbit_step90" + }, + "neptune_orbit_step90": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep90", + "to": "$nep91", + "next": "@celestial.neptune_orbit_step91" + }, + "neptune_orbit_step91": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep91", + "to": "$nep92", + "next": "@celestial.neptune_orbit_step92" + }, + "neptune_orbit_step92": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep92", + "to": "$nep93", + "next": "@celestial.neptune_orbit_step93" + }, + "neptune_orbit_step93": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep93", + "to": "$nep94", + "next": "@celestial.neptune_orbit_step94" + }, + "neptune_orbit_step94": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep94", + "to": "$nep95", + "next": "@celestial.neptune_orbit_step95" + }, + "neptune_orbit_step95": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep95", + "to": "$nep96", + "next": "@celestial.neptune_orbit_step96" + }, + "neptune_orbit_step96": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep96", + "to": "$nep97", + "next": "@celestial.neptune_orbit_step97" + }, + "neptune_orbit_step97": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep97", + "to": "$nep98", + "next": "@celestial.neptune_orbit_step98" + }, + "neptune_orbit_step98": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep98", + "to": "$nep99", + "next": "@celestial.neptune_orbit_step99" + }, + "neptune_orbit_step99": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep99", + "to": "$nep100", + "next": "@celestial.neptune_orbit_step100" + }, + "neptune_orbit_step100": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep100", + "to": "$nep101", + "next": "@celestial.neptune_orbit_step101" + }, + "neptune_orbit_step101": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep101", + "to": "$nep102", + "next": "@celestial.neptune_orbit_step102" + }, + "neptune_orbit_step102": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep102", + "to": "$nep103", + "next": "@celestial.neptune_orbit_step103" + }, + "neptune_orbit_step103": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep103", + "to": "$nep104", + "next": "@celestial.neptune_orbit_step104" + }, + "neptune_orbit_step104": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep104", + "to": "$nep105", + "next": "@celestial.neptune_orbit_step105" + }, + "neptune_orbit_step105": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep105", + "to": "$nep106", + "next": "@celestial.neptune_orbit_step106" + }, + "neptune_orbit_step106": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep106", + "to": "$nep107", + "next": "@celestial.neptune_orbit_step107" + }, + "neptune_orbit_step107": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep107", + "to": "$nep108", + "next": "@celestial.neptune_orbit_step108" + }, + "neptune_orbit_step108": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep108", + "to": "$nep109", + "next": "@celestial.neptune_orbit_step109" + }, + "neptune_orbit_step109": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep109", + "to": "$nep110", + "next": "@celestial.neptune_orbit_step110" + }, + "neptune_orbit_step110": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep110", + "to": "$nep111", + "next": "@celestial.neptune_orbit_step111" + }, + "neptune_orbit_step111": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep111", + "to": "$nep112", + "next": "@celestial.neptune_orbit_step112" + }, + "neptune_orbit_step112": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep112", + "to": "$nep113", + "next": "@celestial.neptune_orbit_step113" + }, + "neptune_orbit_step113": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep113", + "to": "$nep114", + "next": "@celestial.neptune_orbit_step114" + }, + "neptune_orbit_step114": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep114", + "to": "$nep115", + "next": "@celestial.neptune_orbit_step115" + }, + "neptune_orbit_step115": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep115", + "to": "$nep116", + "next": "@celestial.neptune_orbit_step116" + }, + "neptune_orbit_step116": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep116", + "to": "$nep117", + "next": "@celestial.neptune_orbit_step117" + }, + "neptune_orbit_step117": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep117", + "to": "$nep118", + "next": "@celestial.neptune_orbit_step118" + }, + "neptune_orbit_step118": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep118", + "to": "$nep119", + "next": "@celestial.neptune_orbit_step119" + }, + "neptune_orbit_step119": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep119", + "to": "$nep120", + "next": "@celestial.neptune_orbit_step120" + }, + "neptune_orbit_step120": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep120", + "to": "$nep121", + "next": "@celestial.neptune_orbit_step121" + }, + "neptune_orbit_step121": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep121", + "to": "$nep122", + "next": "@celestial.neptune_orbit_step122" + }, + "neptune_orbit_step122": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep122", + "to": "$nep123", + "next": "@celestial.neptune_orbit_step123" + }, + "neptune_orbit_step123": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep123", + "to": "$nep124", + "next": "@celestial.neptune_orbit_step124" + }, + "neptune_orbit_step124": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep124", + "to": "$nep125", + "next": "@celestial.neptune_orbit_step125" + }, + "neptune_orbit_step125": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep125", + "to": "$nep126", + "next": "@celestial.neptune_orbit_step126" + }, + "neptune_orbit_step126": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep126", + "to": "$nep127", + "next": "@celestial.neptune_orbit_step127" + }, + "neptune_orbit_step127": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep127", + "to": "$nep128", + "next": "@celestial.neptune_orbit_step128" + }, + "neptune_orbit_step128": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep128", + "to": "$nep129", + "next": "@celestial.neptune_orbit_step129" + }, + "neptune_orbit_step129": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep129", + "to": "$nep130", + "next": "@celestial.neptune_orbit_step130" + }, + "neptune_orbit_step130": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep130", + "to": "$nep131", + "next": "@celestial.neptune_orbit_step131" + }, + "neptune_orbit_step131": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep131", + "to": "$nep132", + "next": "@celestial.neptune_orbit_step132" + }, + "neptune_orbit_step132": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep132", + "to": "$nep133", + "next": "@celestial.neptune_orbit_step133" + }, + "neptune_orbit_step133": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep133", + "to": "$nep134", + "next": "@celestial.neptune_orbit_step134" + }, + "neptune_orbit_step134": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep134", + "to": "$nep135", + "next": "@celestial.neptune_orbit_step135" + }, + "neptune_orbit_step135": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep135", + "to": "$nep136", + "next": "@celestial.neptune_orbit_step136" + }, + "neptune_orbit_step136": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep136", + "to": "$nep137", + "next": "@celestial.neptune_orbit_step137" + }, + "neptune_orbit_step137": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep137", + "to": "$nep138", + "next": "@celestial.neptune_orbit_step138" + }, + "neptune_orbit_step138": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep138", + "to": "$nep139", + "next": "@celestial.neptune_orbit_step139" + }, + "neptune_orbit_step139": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep139", + "to": "$nep140", + "next": "@celestial.neptune_orbit_step140" + }, + "neptune_orbit_step140": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep140", + "to": "$nep141", + "next": "@celestial.neptune_orbit_step141" + }, + "neptune_orbit_step141": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep141", + "to": "$nep142", + "next": "@celestial.neptune_orbit_step142" + }, + "neptune_orbit_step142": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep142", + "to": "$nep143", + "next": "@celestial.neptune_orbit_step143" + }, + "neptune_orbit_step143": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep143", + "to": "$nep144", + "next": "@celestial.neptune_orbit_step144" + }, + "neptune_orbit_step144": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep144", + "to": "$nep145", + "next": "@celestial.neptune_orbit_step145" + }, + "neptune_orbit_step145": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep145", + "to": "$nep146", + "next": "@celestial.neptune_orbit_step146" + }, + "neptune_orbit_step146": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep146", + "to": "$nep147", + "next": "@celestial.neptune_orbit_step147" + }, + "neptune_orbit_step147": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep147", + "to": "$nep148", + "next": "@celestial.neptune_orbit_step148" + }, + "neptune_orbit_step148": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep148", + "to": "$nep149", + "next": "@celestial.neptune_orbit_step149" + }, + "neptune_orbit_step149": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep149", + "to": "$nep150", + "next": "@celestial.neptune_orbit_step150" + }, + "neptune_orbit_step150": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep150", + "to": "$nep151", + "next": "@celestial.neptune_orbit_step151" + }, + "neptune_orbit_step151": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep151", + "to": "$nep152", + "next": "@celestial.neptune_orbit_step152" + }, + "neptune_orbit_step152": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep152", + "to": "$nep153", + "next": "@celestial.neptune_orbit_step153" + }, + "neptune_orbit_step153": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep153", + "to": "$nep154", + "next": "@celestial.neptune_orbit_step154" + }, + "neptune_orbit_step154": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep154", + "to": "$nep155", + "next": "@celestial.neptune_orbit_step155" + }, + "neptune_orbit_step155": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep155", + "to": "$nep156", + "next": "@celestial.neptune_orbit_step156" + }, + "neptune_orbit_step156": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep156", + "to": "$nep157", + "next": "@celestial.neptune_orbit_step157" + }, + "neptune_orbit_step157": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep157", + "to": "$nep158", + "next": "@celestial.neptune_orbit_step158" + }, + "neptune_orbit_step158": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep158", + "to": "$nep159", + "next": "@celestial.neptune_orbit_step159" + }, + "neptune_orbit_step159": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep159", + "to": "$nep160", + "next": "@celestial.neptune_orbit_step160" + }, + "neptune_orbit_step160": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep160", + "to": "$nep161", + "next": "@celestial.neptune_orbit_step161" + }, + "neptune_orbit_step161": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep161", + "to": "$nep162", + "next": "@celestial.neptune_orbit_step162" + }, + "neptune_orbit_step162": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep162", + "to": "$nep163", + "next": "@celestial.neptune_orbit_step163" + }, + "neptune_orbit_step163": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep163", + "to": "$nep164", + "next": "@celestial.neptune_orbit_step164" + }, + "neptune_orbit_step164": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep164", + "to": "$nep165", + "next": "@celestial.neptune_orbit_step165" + }, + "neptune_orbit_step165": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep165", + "to": "$nep166", + "next": "@celestial.neptune_orbit_step166" + }, + "neptune_orbit_step166": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep166", + "to": "$nep167", + "next": "@celestial.neptune_orbit_step167" + }, + "neptune_orbit_step167": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep167", + "to": "$nep168", + "next": "@celestial.neptune_orbit_step168" + }, + "neptune_orbit_step168": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep168", + "to": "$nep169", + "next": "@celestial.neptune_orbit_step169" + }, + "neptune_orbit_step169": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep169", + "to": "$nep170", + "next": "@celestial.neptune_orbit_step170" + }, + "neptune_orbit_step170": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep170", + "to": "$nep171", + "next": "@celestial.neptune_orbit_step171" + }, + "neptune_orbit_step171": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep171", + "to": "$nep172", + "next": "@celestial.neptune_orbit_step172" + }, + "neptune_orbit_step172": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep172", + "to": "$nep173", + "next": "@celestial.neptune_orbit_step173" + }, + "neptune_orbit_step173": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep173", + "to": "$nep174", + "next": "@celestial.neptune_orbit_step174" + }, + "neptune_orbit_step174": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep174", + "to": "$nep175", + "next": "@celestial.neptune_orbit_step175" + }, + "neptune_orbit_step175": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep175", + "to": "$nep176", + "next": "@celestial.neptune_orbit_step176" + }, + "neptune_orbit_step176": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep176", + "to": "$nep177", + "next": "@celestial.neptune_orbit_step177" + }, + "neptune_orbit_step177": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep177", + "to": "$nep178", + "next": "@celestial.neptune_orbit_step178" + }, + "neptune_orbit_step178": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep178", + "to": "$nep179", + "next": "@celestial.neptune_orbit_step179" + }, + "neptune_orbit_step179": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep179", + "to": "$nep180", + "next": "@celestial.neptune_orbit_step180" + }, + "neptune_orbit_step180": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep180", + "to": "$nep181", + "next": "@celestial.neptune_orbit_step181" + }, + "neptune_orbit_step181": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep181", + "to": "$nep182", + "next": "@celestial.neptune_orbit_step182" + }, + "neptune_orbit_step182": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep182", + "to": "$nep183", + "next": "@celestial.neptune_orbit_step183" + }, + "neptune_orbit_step183": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep183", + "to": "$nep184", + "next": "@celestial.neptune_orbit_step184" + }, + "neptune_orbit_step184": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep184", + "to": "$nep185", + "next": "@celestial.neptune_orbit_step185" + }, + "neptune_orbit_step185": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep185", + "to": "$nep186", + "next": "@celestial.neptune_orbit_step186" + }, + "neptune_orbit_step186": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep186", + "to": "$nep187", + "next": "@celestial.neptune_orbit_step187" + }, + "neptune_orbit_step187": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep187", + "to": "$nep188", + "next": "@celestial.neptune_orbit_step188" + }, + "neptune_orbit_step188": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep188", + "to": "$nep189", + "next": "@celestial.neptune_orbit_step189" + }, + "neptune_orbit_step189": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep189", + "to": "$nep190", + "next": "@celestial.neptune_orbit_step190" + }, + "neptune_orbit_step190": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep190", + "to": "$nep191", + "next": "@celestial.neptune_orbit_step191" + }, + "neptune_orbit_step191": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep191", + "to": "$nep192", + "next": "@celestial.neptune_orbit_step192" + }, + "neptune_orbit_step192": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep192", + "to": "$nep193", + "next": "@celestial.neptune_orbit_step193" + }, + "neptune_orbit_step193": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep193", + "to": "$nep194", + "next": "@celestial.neptune_orbit_step194" + }, + "neptune_orbit_step194": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep194", + "to": "$nep195", + "next": "@celestial.neptune_orbit_step195" + }, + "neptune_orbit_step195": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep195", + "to": "$nep196", + "next": "@celestial.neptune_orbit_step196" + }, + "neptune_orbit_step196": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep196", + "to": "$nep197", + "next": "@celestial.neptune_orbit_step197" + }, + "neptune_orbit_step197": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep197", + "to": "$nep198", + "next": "@celestial.neptune_orbit_step198" + }, + "neptune_orbit_step198": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep198", + "to": "$nep199", + "next": "@celestial.neptune_orbit_step199" + }, + "neptune_orbit_step199": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep199", + "to": "$nep200", + "next": "@celestial.neptune_orbit_step200" + }, + "neptune_orbit_step200": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep200", + "to": "$nep201", + "next": "@celestial.neptune_orbit_step201" + }, + "neptune_orbit_step201": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep201", + "to": "$nep202", + "next": "@celestial.neptune_orbit_step202" + }, + "neptune_orbit_step202": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep202", + "to": "$nep203", + "next": "@celestial.neptune_orbit_step203" + }, + "neptune_orbit_step203": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep203", + "to": "$nep204", + "next": "@celestial.neptune_orbit_step204" + }, + "neptune_orbit_step204": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep204", + "to": "$nep205", + "next": "@celestial.neptune_orbit_step205" + }, + "neptune_orbit_step205": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep205", + "to": "$nep206", + "next": "@celestial.neptune_orbit_step206" + }, + "neptune_orbit_step206": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep206", + "to": "$nep207", + "next": "@celestial.neptune_orbit_step207" + }, + "neptune_orbit_step207": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep207", + "to": "$nep208", + "next": "@celestial.neptune_orbit_step208" + }, + "neptune_orbit_step208": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep208", + "to": "$nep209", + "next": "@celestial.neptune_orbit_step209" + }, + "neptune_orbit_step209": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep209", + "to": "$nep210", + "next": "@celestial.neptune_orbit_step210" + }, + "neptune_orbit_step210": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep210", + "to": "$nep211", + "next": "@celestial.neptune_orbit_step211" + }, + "neptune_orbit_step211": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep211", + "to": "$nep212", + "next": "@celestial.neptune_orbit_step212" + }, + "neptune_orbit_step212": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep212", + "to": "$nep213", + "next": "@celestial.neptune_orbit_step213" + }, + "neptune_orbit_step213": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep213", + "to": "$nep214", + "next": "@celestial.neptune_orbit_step214" + }, + "neptune_orbit_step214": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep214", + "to": "$nep215", + "next": "@celestial.neptune_orbit_step215" + }, + "neptune_orbit_step215": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep215", + "to": "$nep216", + "next": "@celestial.neptune_orbit_step216" + }, + "neptune_orbit_step216": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep216", + "to": "$nep217", + "next": "@celestial.neptune_orbit_step217" + }, + "neptune_orbit_step217": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep217", + "to": "$nep218", + "next": "@celestial.neptune_orbit_step218" + }, + "neptune_orbit_step218": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep218", + "to": "$nep219", + "next": "@celestial.neptune_orbit_step219" + }, + "neptune_orbit_step219": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep219", + "to": "$nep220", + "next": "@celestial.neptune_orbit_step220" + }, + "neptune_orbit_step220": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep220", + "to": "$nep221", + "next": "@celestial.neptune_orbit_step221" + }, + "neptune_orbit_step221": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep221", + "to": "$nep222", + "next": "@celestial.neptune_orbit_step222" + }, + "neptune_orbit_step222": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep222", + "to": "$nep223", + "next": "@celestial.neptune_orbit_step223" + }, + "neptune_orbit_step223": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep223", + "to": "$nep224", + "next": "@celestial.neptune_orbit_step224" + }, + "neptune_orbit_step224": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep224", + "to": "$nep225", + "next": "@celestial.neptune_orbit_step225" + }, + "neptune_orbit_step225": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep225", + "to": "$nep226", + "next": "@celestial.neptune_orbit_step226" + }, + "neptune_orbit_step226": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep226", + "to": "$nep227", + "next": "@celestial.neptune_orbit_step227" + }, + "neptune_orbit_step227": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep227", + "to": "$nep228", + "next": "@celestial.neptune_orbit_step228" + }, + "neptune_orbit_step228": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep228", + "to": "$nep229", + "next": "@celestial.neptune_orbit_step229" + }, + "neptune_orbit_step229": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep229", + "to": "$nep230", + "next": "@celestial.neptune_orbit_step230" + }, + "neptune_orbit_step230": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep230", + "to": "$nep231", + "next": "@celestial.neptune_orbit_step231" + }, + "neptune_orbit_step231": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep231", + "to": "$nep232", + "next": "@celestial.neptune_orbit_step232" + }, + "neptune_orbit_step232": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep232", + "to": "$nep233", + "next": "@celestial.neptune_orbit_step233" + }, + "neptune_orbit_step233": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep233", + "to": "$nep234", + "next": "@celestial.neptune_orbit_step234" + }, + "neptune_orbit_step234": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep234", + "to": "$nep235", + "next": "@celestial.neptune_orbit_step235" + }, + "neptune_orbit_step235": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep235", + "to": "$nep236", + "next": "@celestial.neptune_orbit_step236" + }, + "neptune_orbit_step236": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep236", + "to": "$nep237", + "next": "@celestial.neptune_orbit_step237" + }, + "neptune_orbit_step237": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep237", + "to": "$nep238", + "next": "@celestial.neptune_orbit_step238" + }, + "neptune_orbit_step238": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep238", + "to": "$nep239", + "next": "@celestial.neptune_orbit_step239" + }, + "neptune_orbit_step239": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep239", + "to": "$nep240", + "next": "@celestial.neptune_orbit_step240" + }, + "neptune_orbit_step240": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep240", + "to": "$nep241", + "next": "@celestial.neptune_orbit_step241" + }, + "neptune_orbit_step241": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep241", + "to": "$nep242", + "next": "@celestial.neptune_orbit_step242" + }, + "neptune_orbit_step242": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep242", + "to": "$nep243", + "next": "@celestial.neptune_orbit_step243" + }, + "neptune_orbit_step243": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep243", + "to": "$nep244", + "next": "@celestial.neptune_orbit_step244" + }, + "neptune_orbit_step244": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep244", + "to": "$nep245", + "next": "@celestial.neptune_orbit_step245" + }, + "neptune_orbit_step245": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep245", + "to": "$nep246", + "next": "@celestial.neptune_orbit_step246" + }, + "neptune_orbit_step246": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep246", + "to": "$nep247", + "next": "@celestial.neptune_orbit_step247" + }, + "neptune_orbit_step247": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep247", + "to": "$nep248", + "next": "@celestial.neptune_orbit_step248" + }, + "neptune_orbit_step248": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep248", + "to": "$nep249", + "next": "@celestial.neptune_orbit_step249" + }, + "neptune_orbit_step249": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep249", + "to": "$nep250", + "next": "@celestial.neptune_orbit_step250" + }, + "neptune_orbit_step250": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep250", + "to": "$nep251", + "next": "@celestial.neptune_orbit_step251" + }, + "neptune_orbit_step251": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep251", + "to": "$nep252", + "next": "@celestial.neptune_orbit_step252" + }, + "neptune_orbit_step252": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep252", + "to": "$nep253", + "next": "@celestial.neptune_orbit_step253" + }, + "neptune_orbit_step253": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep253", + "to": "$nep254", + "next": "@celestial.neptune_orbit_step254" + }, + "neptune_orbit_step254": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep254", + "to": "$nep255", + "next": "@celestial.neptune_orbit_step255" + }, + "neptune_orbit_step255": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep255", + "to": "$nep256", + "next": "@celestial.neptune_orbit_step256" + }, + "neptune_orbit_step256": { + "anim_type": "offset", + "duration": "$orbit_duration", + "from": "$nep256", + "to": "$nep1", + "next": "@celestial.neptune_orbit_step1" + } +} \ No newline at end of file diff --git a/RP/ui/celestial/station_list_panel.json b/RP/ui/celestial/station_list_panel.json new file mode 100644 index 00000000..732f97dc --- /dev/null +++ b/RP/ui/celestial/station_list_panel.json @@ -0,0 +1,191 @@ +{ + "namespace": "celestial", + "station_list_panel": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/launch_button_holder", + "color": [ + 0, + 0.5, + 1 + ], + "size": [ + 95, + 80 + ], + "anchor_from": "top_right", + "anchor_to": "top_right", + "offset": [ + -5, + 147 + ], + "layer": 8, + "bindings": [ + { + "binding_type": "view", + "source_control_name": "zoom_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#overworld_zoomed" + }, + { + "binding_type": "view", + "source_property_name": "(#overworld_zoomed and not (#form_text - 'Station' = #form_text))", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "title": { + "type": "label", + "text": "Space Stations", + "size": [ + "100%", + 10 + ], + "offset": [ + 0, + 4 + ], + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "text_alignment": "center", + "layer": 9 + } + }, + { + "list_content": { + "type": "panel", + "size": [ + 85, + 60 + ], + "offset": [ + 0, + 15 + ], + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "layer": 9, + "controls": [ + { + "station_list_content@celestial.station_list_content": {} + } + ] + } + } + ] + }, + "station_list_content": { + "type": "stack_panel", + "orientation": "vertical", + "size": [ + "100%", + "default" + ], + "controls": [ + { + "stations_collection": { + "type": "stack_panel", + "orientation": "vertical", + "size": [ + "100%", + "default" + ], + "collection_name": "form_buttons", + "factory": { + "name": "buttons", + "control_name": "celestial.station_list_item" + }, + "bindings": [ + { + "binding_name": "#form_button_length", + "binding_name_override": "#collection_length" + } + ] + } + } + ] + }, + "station_list_item@cosmos.button": { + "size": [ + 85, + 14 + ], + "bindings": [ + { + "binding_type": "collection_details", + "binding_collection_name": "form_buttons" + }, + { + "binding_name": "#form_button_text", + "binding_type": "collection", + "binding_collection_name": "form_buttons" + }, + { + "binding_type": "view", + "source_property_name": "(not (#form_button_text - 'Launch to ' = #form_button_text) and (#form_button_text - 'Overworld' = #form_button_text) and (#form_button_text - 'Moon' = #form_button_text) and (#form_button_text - 'Mars' = #form_button_text) and (#form_button_text - 'Venus' = #form_button_text) and (#form_button_text - 'Asteroids' = #form_button_text))", + "target_property_name": "#visible" + } + ], + "$action": "button.form_button_click", + "controls": [ + { + "default": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/station_list_item", + "color": [ + 0, + 0.6, + 1 + ], + "size": [ + 85, + 12 + ], + "layer": 2 + } + }, + { + "hover": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/station_list_item", + "color": [ + 0, + 0.8, + 1 + ], + "size": [ + 85, + 12 + ], + "layer": 2 + } + }, + { + "label": { + "type": "label", + "text": "#name", + "color": [ + 1, + 1, + 1 + ], + "size": [ + "100% - 6px", + 10 + ], + "anchor_from": "center", + "anchor_to": "center", + "text_alignment": "center", + "layer": 3, + "bindings": [ + { + "binding_type": "view", + "source_property_name": "(#form_button_text - 'Launch to ')", + "target_property_name": "#name" + } + ] + } + } + ] + } +} \ No newline at end of file diff --git a/RP/ui/celestial/station_recipe_panel.json b/RP/ui/celestial/station_recipe_panel.json new file mode 100644 index 00000000..f8b9731f --- /dev/null +++ b/RP/ui/celestial/station_recipe_panel.json @@ -0,0 +1,552 @@ +{ + "namespace": "celestial", + "launch_panel": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/launch_button_holder", + "color": [ + 0, + 0.5, + 1 + ], + "size": [ + 95, + 137 + ], + "anchor_from": "top_right", + "anchor_to": "top_right", + "offset": [ + -5, + 5 + ], + "controls": [ + { + "launch_to_overworld@celestial.green_launch_button": { + "$toggle_name": "overworld", + "$index": 0, + "$tier": 1 + } + }, + { + "launch_to_moon@celestial.green_launch_button": { + "$toggle_name": "moon", + "$index": 1, + "$tier": 1 + } + }, + { + "launch_to_overworld@celestial.green_launch_button": { + "$toggle_name": "mars", + "$index": 2, + "$tier": 2 + } + }, + { + "launch_to_venus@celestial.green_launch_button": { + "$toggle_name": "venus", + "$index": 3, + "$tier": 3 + } + }, + { + "launch_to_asteroids@celestial.green_launch_button": { + "$toggle_name": "asteroids", + "$index": 4, + "$tier": 3 + } + }, + { + "red_launch_button@celestial.red_launch_button": { + "bindings": [ + { + "binding_type": "view", + "source_control_name": "catalog_toggle_mercury", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_mercury" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_venus", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_venus" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_overworld" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_mars", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_mars" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_asteroids", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_asteroids" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_jupiter", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_jupiter" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_saturn", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_saturn" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_uranus", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_uranus" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_neptune", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_neptune" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_mercury", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_mercury" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_venus", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_venus" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_overworld" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_mars", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_mars" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_asteroids", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_asteroids" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_jupiter", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_jupiter" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_saturn", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_saturn" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_uranus", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_uranus" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_neptune", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_neptune" + }, + { + "binding_type": "view", + "source_property_name": "(#form_text - 'Tier ')", + "target_property_name": "#tier" + }, + { + "binding_type": "view", + "source_property_name": "(#catalog_mercury or #catalog_jupiter or #catalog_saturn or #catalog_uranus or #catalog_neptune or (#catalog_mars and #tier < 2) or ((#catalog_venus or #catalog_asteroids) and #tier < 3))", + "target_property_name": "#visible" + } + ] + } + }, + { + "create_station": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/station_panel", + "color": [ + 0, + 0.5, + 1 + ], + "size": [ + 93, + 64 + ], + "anchor_from": "bottom_left", + "anchor_to": "top_left", + "offset": [ + 0, + -8 + ], + "layer": 2, + "controls": [ + { + "station_label": { + "type": "label", + "text": "A Space Station can be created here!", + "text_alignment": "center", + "size": [ + "100%", + "default" + ], + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 6 + ], + "layer": 3 + } + }, + { + "green_fade": { + "type": "label", + "text": "A Space Station can be created here!", + "color": [ + 0, + 1, + 0 + ], + "text_alignment": "center", + "size": [ + "100%", + "default" + ], + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 6 + ], + "layer": 4, + "anims": [ + "@cosmos.text_fade_in" + ] + } + }, + { + "materials": { + "type": "stack_panel", + "orientation": "horizontal", + "size": [ + "100%", + 32 + ], + "offset": [ + 0, + 4 + ], + "anchor_from": "bottom_middle", + "anchor_to": "bottom_middle", + "layer": 4, + "controls": [ + { + "left_pad": { + "type": "panel", + "size": [ + "10%", + 32 + ] + } + }, + { + "aluminum@cosmos.material": { + "$id": "aluminum_ingot", + "$name": "Aluminum Ingot", + "$condition": "$has_aluminum", + "$no_condition": "$no_aluminum", + "$amount": "16" + } + }, + { + "wafer@cosmos.material": { + "$id": "advanced_wafer", + "$name": "Advanced Wafer", + "$condition": "$has_wafer", + "$no_condition": "$no_wafer", + "$amount": "1" + } + }, + { + "tin@cosmos.material": { + "$id": "tin_ingot", + "$name": "Tin Ingot", + "$condition": "$has_tin", + "$no_condition": "$no_tin", + "$amount": "32" + } + }, + { + "iron@cosmos.material": { + "$id": "iron_ingot", + "$name": "Iron Ingot", + "$condition": "$has_iron", + "$no_condition": "$no_iron", + "$amount": "24" + } + }, + { + "right_pad": { + "type": "panel", + "size": [ + "10%", + 32 + ] + } + } + ] + } + }, + { + "station_button@cosmos.form_buttons": { + "$buttons": "cosmos.create_station_button", + "offset": [ + 0, + 1 + ], + "anchor_from": "bottom_middle", + "anchor_to": "top_middle" + } + } + ], + "bindings": "$can_have_station" + } + } + ], + "bindings": [ + { + "binding_type": "view", + "source_control_name": "catalog_toggle_mercury", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_mercury" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_venus", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_venus" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_overworld" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_moon", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_moon" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_mars", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_mars" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_asteroids", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_asteroids" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_jupiter", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_jupiter" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_saturn", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_saturn" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_uranus", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_uranus" + }, + { + "binding_type": "view", + "source_control_name": "catalog_toggle_neptune", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog_neptune" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_mercury", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_mercury" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_venus", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_venus" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_overworld", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_overworld" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_moon", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_moon" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_mars", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_mars" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_asteroids", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_asteroids" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_jupiter", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_jupiter" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_saturn", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_saturn" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_uranus", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_uranus" + }, + { + "binding_type": "view", + "source_control_name": "orbital_toggle_neptune", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital_neptune" + }, + { + "binding_type": "view", + "source_property_name": "(#catalog_mercury or #catalog_venus or #catalog_overworld or #catalog_moon or #catalog_mars or #catalog_asteroids or #catalog_jupiter or #catalog_saturn or #catalog_uranus or #catalog_neptune)", + "target_property_name": "#visible" + } + ] + }, + "green_launch_button": { + "type": "collection_panel", + "collection_name": "form_buttons", + "anchor_from": "top_right", + "anchor_to": "top_right", + "bindings": [ + { + "binding_type": "view", + "source_control_name": "('catalog_toggle_' + $toggle_name)", + "source_property_name": "#toggle_state", + "target_property_name": "#catalog" + }, + { + "binding_type": "view", + "source_control_name": "('orbital_toggle_' + $toggle_name)", + "source_property_name": "#toggle_state", + "target_property_name": "#orbital" + }, + { + "binding_type": "view", + "source_property_name": "(#form_text - 'Tier ')", + "target_property_name": "#tier" + }, + { + "binding_type": "view", + "source_property_name": "((#catalog) and not (#tier < $tier))", + "target_property_name": "#visible" + } + ], + "controls": [ + { + "launch_button@cosmos.button": { + "size": [ + 74, + 11 + ], + "collection_index": "$index", + "anchor_from": "top_right", + "anchor_to": "top_right", + "$action": "button.form_button_click", + "bindings": "$form_buttons", + "controls": [ + { + "default@celestial.red_launch_button": { + "color": [ + 0, + 1, + 0 + ] + } + }, + { + "hover@celestial.red_launch_button": { + "color": [ + 0.7, + 1, + 0.3 + ] + } + } + ] + } + } + ] + }, + "red_launch_button": { + "type": "image", + "texture": "textures/ui/cosmos/celestial_selector/launch", + "color": [ + 1, + 0, + 0 + ], + "size": [ + 74, + 11 + ], + "anchor_from": "top_right", + "anchor_to": "top_right", + "controls": [ + { + "launch_label": { + "type": "label", + "text": "LAUNCH", + "layer": 3 + } + } + ] + } +} \ No newline at end of file diff --git a/RP/ui/celestial_selector.json b/RP/ui/celestial_selector.json index b510ad1d..40b77b91 100644 --- a/RP/ui/celestial_selector.json +++ b/RP/ui/celestial_selector.json @@ -1,1211 +1,4 @@ { "namespace": "selector", - - "selector_screen": { - "type": "screen", - "button_mappings": [ - { - "from_button_id": "button.menu_cancel", - "to_button_id": "button.menu_exit", - "mapping_type": "global" - } - ], - "controls": [ - { - "input_panel": { - "type": "input_panel", - "hover_enabled": false, - "prevent_touch_input": false, - "controls": [ - { - "screen_background": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/space", - "layer": -1 - } - }, - {"catalog@selector.catalog": {}}, - {"launch_panel@selector.launch_panel": {}}, - {"solar_system@selector.solar_system": {}} - ] - } - } - ] - }, - - //launch_panel - - "launch_panel": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/launch_button_holder", - "color": [0, 0.5, 1], - "size": [95, 137], - "anchor_from": "top_right", - "anchor_to": "top_right", - "offset": [-5, 5], - "controls": [ - { - "launch_to_overworld@selector.green_launch_button": { - "$toggle_name": "overworld", - "$index": 0, - "$tier": 1 - } - }, - { - "launch_to_moon@selector.green_launch_button": { - "$toggle_name": "moon", - "$index": 1, - "$tier": 1 - } - }, - { - "launch_to_overworld@selector.green_launch_button": { - "$toggle_name": "mars", - "$index": 2, - "$tier": 2 - } - }, - { - "launch_to_venus@selector.green_launch_button": { - "$toggle_name": "venus", - "$index": 3, - "$tier": 3 - } - }, - { - "launch_to_asteroids@selector.green_launch_button": { - "$toggle_name": "asteroids", - "$index": 4, - "$tier": 3 - } - }, - { - "red_launch_button@selector.red_launch_button": { - "bindings": [ - { - "binding_type": "view", - "source_control_name": "catalog_toggle_mercury", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_mercury" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_venus", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_venus" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_overworld", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_overworld" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_mars", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_mars" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_asteroids", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_asteroids" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_jupiter", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_jupiter" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_saturn", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_saturn" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_uranus", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_uranus" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_neptune", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_neptune" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_mercury", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_mercury" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_venus", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_venus" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_overworld", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_overworld" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_mars", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_mars" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_asteroids", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_asteroids" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_jupiter", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_jupiter" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_saturn", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_saturn" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_uranus", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_uranus" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_neptune", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_neptune" - }, - { - "binding_type": "view", - "source_property_name": "(#form_text - 'Tier ')", - "target_property_name": "#tier" - }, - { - "binding_type": "view", - "source_property_name": "(#catalog_mercury or #catalog_jupiter or #catalog_saturn or #catalog_uranus or #catalog_neptune or (#catalog_mars and #tier < 2) or ((#catalog_venus or #catalog_asteroids) and #tier < 3))", - "target_property_name": "#visible" - } - ] - } - }//, - // { - // "create_station": { - // "type": "image", - // "texture": "textures/ui/cosmos/celestial_selector/station_panel", - // "color": [0, 0.5, 1], - // "size": [93, 64], - // "anchor_from": "bottom_left", - // "anchor_to": "top_left", - // "offset": [0, -8], - // "layer": 2, - // "controls": [ - // { - // "station_label": { - // "type": "label", - // "text": "A Space Station can be created here!", - // "text_alignment": "center", - // "size": ["100%", "default"], - // "anchor_from": "top_middle", - // "anchor_to": "top_middle", - // "offset": [0, 6], - // "layer": 3 - // } - // }, - // { - // "green_fade": { - // "type": "label", - // "text": "A Space Station can be created here!", - // "color": [0, 1, 0], - // "text_alignment": "center", - // "size": ["100%", "default"], - // "anchor_from": "top_middle", - // "anchor_to": "top_middle", - // "offset": [0, 6], - // "layer": 4, - // "anims": [ - // "@cosmos.text_fade_in" - // ] - // } - // }, - // { - // "materials": { - // "type": "stack_panel", - // "orientation": "horizontal", - // "size": ["100%", 32], - // "offset": [0, 4], - // "anchor_from": "bottom_middle", - // "anchor_to": "bottom_middle", - // "layer": 4, - // "controls": [ - // { - // "left_pad": { - // "type": "panel", - // "size": ["10%", 32] - // } - // }, - // { - // "aluminum@cosmos.material": { - // "$id": "aluminum_ingot", - // "$name": "Aluminum Ingot", - // "$condition": "$has_aluminum", - // "$amount": "16" - // } - // }, - // { - // "wafer@cosmos.material": { - // "$id": "advanced_wafer", - // "$name": "Advanced Wafer", - // "$condition": "$has_wafer", - // "$amount": "1" - // } - // }, - // { - // "tin@cosmos.material": { - // "$id": "tin_ingot", - // "$name": "Tin Ingot", - // "$condition": "$has_tin", - // "$amount": "32" - // } - // }, - // { - // "iron@cosmos.material": { - // "$id": "iron_ingot", - // "$name": "Iron Ingot", - // "$condition": "$has_iron", - // "$amount": "24" - // } - // }, - // { - // "right_pad": { - // "type": "panel", - // "size": ["10%", 32] - // } - // } - // ] - // } - // }, - // { - // "station_button@cosmos.form_buttons": { - // "$buttons": "cosmos.create_station_button", - // "offset": [0, 1], - // "anchor_from": "bottom_middle", - // "anchor_to": "top_middle" - // } - // } - // ], - // "bindings": "$can_have_station" - // } - // } - ], - "bindings": [ - { - "binding_type": "view", - "source_control_name": "catalog_toggle_mercury", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_mercury" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_venus", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_venus" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_overworld", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_overworld" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_moon", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_moon" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_mars", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_mars" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_asteroids", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_asteroids" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_jupiter", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_jupiter" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_saturn", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_saturn" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_uranus", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_uranus" - }, - { - "binding_type": "view", - "source_control_name": "catalog_toggle_neptune", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog_neptune" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_mercury", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_mercury" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_venus", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_venus" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_overworld", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_overworld" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_moon", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_moon" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_mars", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_mars" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_asteroids", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_asteroids" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_jupiter", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_jupiter" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_saturn", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_saturn" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_uranus", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_uranus" - }, - { - "binding_type": "view", - "source_control_name": "orbital_toggle_neptune", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital_neptune" - }, - { - "binding_type": "view", - "source_property_name": "(#catalog_mercury or #catalog_venus or #catalog_overworld or #catalog_moon or #catalog_mars or #catalog_asteroids or #catalog_jupiter or #catalog_saturn or #catalog_uranus or #catalog_neptune)", - "target_property_name": "#visible" - } - ] - }, - - "green_launch_button": { - "type": "collection_panel", - "collection_name": "form_buttons", - "anchor_from": "top_right", - "anchor_to": "top_right", - "bindings": [ - { - "binding_type": "view", - "source_control_name": "('catalog_toggle_' + $toggle_name)", - "source_property_name": "#toggle_state", - "target_property_name": "#catalog" - }, - { - "binding_type": "view", - "source_control_name": "('orbital_toggle_' + $toggle_name)", - "source_property_name": "#toggle_state", - "target_property_name": "#orbital" - }, - { - "binding_type": "view", - "source_property_name": "(#form_text - 'Tier ')", - "target_property_name": "#tier" - }, - { - "binding_type": "view", - // "source_property_name": "((#catalog or #orbital) and not (#tier < $tier))", - "source_property_name": "((#catalog) and not (#tier < $tier))", - "target_property_name": "#visible" - } - ], - "controls": [ - { - "launch_button@cosmos.button": { - "size": [74, 11], - "collection_index": "$index", - "anchor_from": "top_right", - "anchor_to": "top_right", - "$action": "button.form_button_click", - "bindings": "$form_buttons", - "controls": [ - { - "default@selector.red_launch_button": { - "color": [0, 1, 0] - } - }, - { - "hover@selector.red_launch_button": { - "color": [0.7, 1, 0.3] - } - } - ] - } - } - ] - }, - - "red_launch_button": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/launch", - "color": [1, 0, 0], - "size": [74, 11], - "anchor_from": "top_right", - "anchor_to": "top_right", - "controls": [ - { - "launch_label": { - "type": "label", - "text": "LAUNCH", - "layer": 3 - } - } - ] - }, - - //catalog - - "catalog": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/catalog", - "color": [0, 0.5, 1], - "size": [87, 12], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [6, 5], - "controls": [ - { - "name": { - "type": "label", - "text": "CATALOG", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [20, 1] - } - }, - { - "center": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/catalog_center", - "color": [0, 0.5, 1], - "size": [95, 43], - "anchor_from": "top_left", - "anchor_to": "top_left", - "anims": [ - {"go_right":{ - "anim_type": "offset", - "duration": 0.5, - "from": [-100, 10], - "to": [-1, 10] - }} - ], - "controls": [ - { - "back_button": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/back_button", - "color": [1, 1, 0], - "size": [93, 17], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [2, 4], - "layer": 2, - "controls": [ - { - "zoom_toggle_sol@cosmos.toggle": { - "size": [93, 10], - "offset": [0, 1], - "anchor_from": "top_left", - "anchor_to": "top_left", - "toggle_group_forced_index": 0, - "toggle_grid_collection_name": "zoom_planet", - "toggle_name": "zoom_planet", - "checked_hover_control": "hover", - "unchecked_hover_control": "hover", - "controls": [ - { - "hover": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/fade2", - "color": [1, 1, 0], - "size": [89, 10], - "layer": 1 - } - } - ] - } - }, - { - "sol_label": { - "type": "label", - "text": "§7Sol", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [4, 1], - "layer": 3 - } - } - ] - } - }, - {"centeral_planet@selector.central_planet_label": { - "$name": "Sol", "$toggle": "zoom_toggle_sol" - }}, - {"centeral_planet@selector.central_planet_label": { - "$name": "Mercury", "$toggle": "zoom_toggle_mercury" - }}, - {"centeral_planet@selector.central_planet_label": { - "$name": "Venus", "$toggle": "zoom_toggle_venus" - }}, - {"centeral_planet@selector.central_planet_label": { - "$name": "Overworld", - "bindings": [ - { - "binding_type": "view", - "source_control_name": "zoom_toggle_overworld", - "source_property_name": "#toggle_state", - "target_property_name": "#overworld" - }, - { - "binding_type": "view", - "source_control_name": "zoom_toggle_moon", - "source_property_name": "#toggle_state", - "target_property_name": "#moon" - }, - { - "binding_type": "view", - "source_property_name": "(#overworld or #moon)", - "target_property_name": "#visible" - } - ] - }}, - {"centeral_planet@selector.central_planet_label": { - "$name": "Mars", "$toggle": "zoom_toggle_mars" - }}, - {"centeral_planet@selector.central_planet_label": { - "$name": "Asteroids", "$toggle": "zoom_toggle_asteroids" - }}, - {"centeral_planet@selector.central_planet_label": { - "$name": "Jupiter", "$toggle": "zoom_toggle_jupiter" - }}, - {"centeral_planet@selector.central_planet_label": { - "$name": "Saturn", "$toggle": "zoom_toggle_saturn" - }}, - {"centeral_planet@selector.central_planet_label": { - "$name": "Uranus", "$toggle": "zoom_toggle_uranus" - }}, - {"centeral_planet@selector.central_planet_label": { - "$name": "Neptune", "$toggle": "zoom_toggle_neptune" - }} - ] - } - }, - { - "planet_toggles": { - "type": "stack_panel", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [1, 49], - "controls": [ - {"mercury@selector.catalog_select_and_zoom_toggle": { - "$name": "Mercury", - "$control_name": "mercury", - "$tier": 4, - "$time": 0.25, - "$index": 1 - }}, - {"venus@selector.catalog_select_and_zoom_toggle": { - "$name": "Venus", - "$control_name": "venus", - "$tier": 3, - "$time": 0.5, - "$index": 2 - }}, - {"overworld@selector.catalog_select_and_zoom_toggle": { - "$name": "Overworld", - "$control_name": "overworld", - "$tier": 1, - "$time": 0.75, - "$index": 3, - "$button_id": "button.overworld_on" - }}, - {"moon@selector.catalog_moon": {}}, - {"mars@selector.catalog_select_and_zoom_toggle": { - "$name": "Mars", - "$control_name": "mars", - "$tier": 2, - "$time": 1, - "$index": 4 - }}, - {"asteroids@selector.catalog_select_and_zoom_toggle": { - "$name": "Asteroids", - "$control_name": "asteroids", - "$tier": 3, - "$time": 1.25, - "$index": 5 - }}, - {"jupiter@selector.catalog_select_and_zoom_toggle": { - "$name": "Jupiter", - "$control_name": "jupiter", - "$tier": 4, - "$time": 1.5, - "$index": 6 - }}, - {"saturn@selector.catalog_select_and_zoom_toggle": { - "$name": "Saturn", - "$control_name": "saturn", - "$tier": 99, - "$time": 1.75, - "$index": 7 - }}, - {"uranus@selector.catalog_select_and_zoom_toggle": { - "$name": "Uranus", - "$control_name": "uranus", - "$tier": 99, - "$time": 2, - "$index": 8 - }}, - {"neptune@selector.catalog_select_and_zoom_toggle": { - "$name": "Neptune", - "$control_name": "neptune", - "$tier": 99, - "$time": 2.25, - "$index": 9 - }} - ] - } - } - ] - }, - "catalog_select_and_zoom_toggle": { - "type": "panel", - "size": [93, 14], - "$select_name": "('catalog_toggle_' + $control_name)", - "$zoom_name": "('zoom_toggle_' + $control_name)", - "$button_id": "button.menu_select", - "controls": [ - { - "$select_name@cosmos.toggle": { - "toggle_group_forced_index": "$index", - "toggle_grid_collection_name": "catalog_planet", - "toggle_name": "catalog_planet", - "button_mappings": [ - { - "from_button_id": "button.menu_select", - "to_button_id": "$button_id", - "mapping_type": "pressed" - }, - { - "from_button_id": "button.menu_ok", - "to_button_id": "$button_id", - "mapping_type": "focused" - } - ], - "controls": [ - {"unchecked@selector.animated_catalog_toggle": {}}, - {"unchecked_hover@selector.animated_catalog_toggle": { - "color": [0, 1, 1] - }} - ], - "bindings": [ - { - "binding_type": "view", - "source_control_name": "$select_name", - "source_property_name": "(not #toggle_state)", - "target_property_name": "#visible" - } - ] - } - }, - { - "$zoom_name@cosmos.toggle": { - "toggle_group_forced_index": "$index", - "toggle_grid_collection_name": "zoom_planet", - "toggle_name": "zoom_planet", - "offset": [6, 0], - "controls": [ - {"unchecked@selector.catalog_toggle_visuals": {}}, - {"unchecked_hover@selector.catalog_toggle_visuals": { - "color": [0, 1, 1] - }} - ], - "bindings": [ - { - "binding_type": "view", - "source_control_name": "$select_name", - "source_property_name": "#toggle_state", - "target_property_name": "#visible" - } - ] - } - } - ], - "bindings": [ - { - "binding_type": "view", - "source_control_name": "zoom_toggle_sol", - "source_property_name": "#toggle_state", - "target_property_name": "#visible" - } - ] - }, - - "animated_catalog_toggle@selector.catalog_toggle_visuals": { - "alpha": 0, - "anims": [ - {"fade_in":{ - "anim_type": "wait", - "duration": "$time", - "next": "@selector.fade_in" - }} - ], - "bindings": [ - { - "binding_type": "view", - "source_control_name": "$control_name", - "source_property_name": "(not #toggle_state)", - "target_property_name": "#visible" - } - ] - }, - - "catalog_toggle_visuals": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/planet_box", - "propagate_alpha": true, - "color": [0, 0.5, 1], - "size": [93, 14], - "layer": 4, - "controls": [ - { - "green_fade": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/fade1", - "color": [0, 1, 0], - "size": [98, 10], - "layer": 3, - "bindings": [ - { - "binding_type": "view", - "source_property_name": "(#form_text - 'Tier ')", - "target_property_name": "#tier" - }, - { - "binding_type": "view", - "source_property_name": "(#tier > $tier or #tier = $tier)", - "target_property_name": "#visible" - } - ] - } - }, - { - "red_fade": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/fade1", - "color": [1, 0, 0], - "size": [98, 10], - "layer": 3, - "bindings": [ - { - "binding_type": "view", - "source_property_name": "(#form_text - 'Tier ')", - "target_property_name": "#tier" - }, - { - "binding_type": "view", - "source_property_name": "(#tier < $tier)", - "target_property_name": "#visible" - } - ] - } - }, - { - "planet_name": { - "type": "label", - "text": "$name", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [4, 2.5], - "layer": 5 - } - } - ] - }, - - "central_planet_label": { - "type": "label", - "text": "$name", - "layer": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [8, 23.5], - "bindings": [ - { - "binding_type": "view", - "source_control_name": "$toggle", - "source_property_name": "#toggle_state", - "target_property_name": "#visible" - } - ] - }, - - "catalog_moon": { - "type": "panel", - "propagate_alpha": true, - "$name": "Moon", - "$tier": 1, - "alpha": 0, - "size": [0, 0], - "anims": [{ - "push_down": { - "anim_type": "size", - "play_event": "button.overworld_on", - "duration": 0.25, - "from": [93, 0], - "to": [93, 14], - "next": "@selector.appear_imediatly" - } - }], - "controls": [ - { - "catalog_toggle_moon@cosmos.toggle": { - "toggle_group_forced_index": 80, - "toggle_grid_collection_name": "catalog_planet", - "toggle_name": "catalog_planet", - "controls": [ - {"unchecked@selector.catalog_toggle_visuals": {}}, - {"unchecked_hover@selector.catalog_toggle_visuals": { - "color": [0, 1, 1] - }} - ], - "bindings": [ - { - "binding_type": "view", - "source_control_name": "catalog_toggle_moon", - "source_property_name": "(not #toggle_state)", - "target_property_name": "#visible" - } - ] - } - }, - { - "zoom_toggle_moon@cosmos.toggle": { - "toggle_group_forced_index": 80, - "toggle_grid_collection_name": "zoom_planet", - "toggle_name": "zoom_planet", - "offset": [6, 0], - "controls": [ - {"unchecked@selector.catalog_toggle_visuals": {}}, - {"unchecked_hover@selector.catalog_toggle_visuals": { - "color": [0, 1, 1] - }}, - {"checked@selector.catalog_toggle_visuals": { - "color": [0, 1, 1] - }}, - {"checked_hover@selector.catalog_toggle_visuals": { - "color": [0, 1, 1] - }} - ], - "bindings": [ - { - "binding_type": "view", - "source_control_name": "catalog_toggle_moon", - "source_property_name": "#toggle_state", - "target_property_name": "#visible" - } - ] - } - } - ], - "bindings": [ - { - "binding_type": "view", - "source_control_name": "select_toggle_overworld", - "source_property_name": "#toggle_state", - "target_property_name": "#overworld" - }, - { - "binding_type": "view", - "source_control_name": "zoom_toggle_overworld", - "source_property_name": "#toggle_state", - "target_property_name": "#on_overworld" - }, - { - "binding_type": "view", - "source_control_name": "select_toggle_moon", - "source_property_name": "#toggle_state", - "target_property_name": "#selected" - }, - { - "binding_type": "view", - "source_control_name": "zoom_toggle_moon", - "source_property_name": "#toggle_state", - "target_property_name": "#zoomed" - }, - { - "binding_type": "view", - "source_property_name": "(#overworld or #on_overworld or #selected or #zoomed)", - "target_property_name": "#visible" - } - ] - }, - - //solar_system - - "solar_system": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/solar_system_orbits", - "bindings": "$visibile_if", - "$condition": "(#title_text - 'Celestial Panel ' = 'Solar System')", - "anims": [{ - "expand": { - "anim_type": "size", - "duration": 1, - "from": [0, 0], - "to": [401, 202] - } - }], - "controls": [ - { - "planets_collection": { - "type": "collection_panel", - "collection_name": "form_buttons", - "controls": [ - { - "sol": { - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/sol", - "size": [16, 16], - "controls": [ - { "orbital_toggle_sol@selector.selection_box": { - "$selection_size": [24, 24] - }} - ] - } - }, - { - "Mercury@selector.solar_system_planet": { - "$control_name": "mercury", - "$texture": "textures/ui/cosmos/celestial_selector/mercury", - "$size": [8, 8], - "$offset": [-19, 26] - } - }, - { - "Venus@selector.solar_system_planet": { - "$control_name": "venus", - "collection_index": 3, - "$texture": "textures/ui/cosmos/celestial_selector/venus", - "$size": [8, 8], - "$offset": [-78, -1] - } - }, - { - "Overworld@selector.solar_system_planet": { - "$control_name": "overworld", - "collection_index": 0, - "$texture": "textures/ui/cosmos/celestial_selector/earth", - "$size": [8, 8], - "$offset": [-17, -48] - } - }, - { - "Mars@selector.solar_system_planet": { - "$control_name": "mars", - "collection_index": 2, - "$texture": "textures/ui/cosmos/celestial_selector/mars", - "$size": [8, 8], - "$offset": [117, 0] - } - }, - { - "Asteroids": { - "collection_index": 4, - "type": "image", - "texture": "textures/ui/cosmos/celestial_selector/spin_asteroid", - "size": [10, 10], - "uv_size": [ 80, 80 ], - "anims": [ - { - "animation": { - "anim_type": "flip_book", - "fps": 4, - "frame_count": 12, - "frame_step": 80 - } - }, - { - "expand": { - "anim_type": "offset", - "duration": 1, - "from": [0, 0], - "to": [-116, 31] - } - } - ], - "controls": [ - { "orbital_toggle_asteroids@selector.selection_box": {}} - ] - } - }, - { - "Jupiter@selector.solar_system_planet": { - "$control_name": "jupiter", - "$texture": "textures/ui/cosmos/celestial_selector/jupiter", - "$size": [8, 8], - "$offset": [115, -42] - } - }, - { - "Saturn@selector.solar_system_planet": { - "$control_name": "saturn", - "$texture": "textures/ui/cosmos/celestial_selector/saturn", - "$size": [20, 8], - "$offset": [110, -59] - } - }, - { - "Uranus@selector.solar_system_planet": { - "$control_name": "uranus", - "$texture": "textures/ui/cosmos/celestial_selector/uranus", - "$size": [8, 20], - "$offset": [129, 64] - } - }, - { - "Neptune@selector.solar_system_planet": { - "$control_name": "neptune", - "$texture": "textures/ui/cosmos/celestial_selector/neptune", - "$size": [8, 8], - "$offset": [88, 90] - } - } - ] - } - } - ] - }, - - "solar_system_planet": { - "type": "image", - "texture": "$texture", - "size": "$size", - "$select_name":"('orbital_toggle_' + $control_name)", - "anims": [ - { "expand": { - "anim_type": "offset", - "duration": 1, - "from": [0, 0], - "to": "$offset" - }} - ], - "controls": [ - { "$select_name@selector.selection_box": {}} - ] - }, - - "selection_box@cosmos.toggle": { - "toggle_default_state": false, - "toggle_grid_collection_name": "orbital_planet", - "toggle_name": "orbital_planet", - "size": [ 32, 32 ], - "$selection_size": [16, 16], - "controls": [ - { - "checked_hover": { - "type": "image", - "size": "$selection_size", - "texture": "textures/ui/cosmos/celestial_selector/selection_box", - "color": [1, 1, 0], - "layer": 7, - "anims": [ - "@selector.fade_loop" - ] - } - } - ] - }, - - //animations - "fade_in": { - "anim_type": "alpha", - "duration": 0.5, - "from": 0, - "to": 1 - }, - "fade_loop": { - "anim_type": "alpha", - "duration": 0.5, - "from": 0, - "to": 1, - "next": "@selector.fade_loop_out" - }, - "fade_loop_out": { - "anim_type": "alpha", - "duration": 0.5, - "from": 1, - "to": 0, - "next": "@selector.fade_loop" - }, - - "appear_imediatly": { - "anim_type": "alpha", - "duration": 0, - "from": 0, - "to": 1 - }, - - "footer": {} + "selector_screen@celestial.selector_screen": {} } \ No newline at end of file diff --git a/RP/ui/chest_screen.json b/RP/ui/chest_screen.json index d716e66d..f911622d 100644 --- a/RP/ui/chest_screen.json +++ b/RP/ui/chest_screen.json @@ -124,20 +124,32 @@ "$screen_background_alpha": 0.4 }, { - "requires": "(not (($ct - '§o§x§y§g§e§n§_§d§i§s§t§r§i§b§u§t§o§r') = $ct))", - "$screen_content": "oxygen_distributor.interface", + "requires": "(not (($ct - '§a§i§r§l§o§c§k§_§c§o§n§t§r§o§l§l§e§r') = $ct))", + "$screen_content": "airlock_controller.interface", "$screen_bg_content": "common.screen_background", "$screen_background_alpha": 0.4 }, { - "requires": "(not (($ct - '§o§x§y§g§e§n§_§s§t§o§r§a§g§e') = $ct))", - "$screen_content": "oxygen_storage.interface", + "requires": "(not (($ct - '§e§l§e§c§t§r§i§c§_§a§r§c§_§f§u§r§n§a§c§e') = $ct))", + "$screen_content": "electric_arc_furnace.interface", "$screen_bg_content": "common.screen_background", "$screen_background_alpha": 0.4 }, { - "requires": "(not (($ct - '§d§e§c§o§n§s§t§r§u§c§t§o§r') = $ct))", - "$screen_content": "deconstructor.interface", + "requires": "(not (($ct - '§a§d§v§a§n§c§e§d§_§c§o§m§p§r§e§s§s§o§r') = $ct))", + "$screen_content": "advanced_compressor.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§o§x§y§g§e§n§_§d§i§s§t§r§i§b§u§t§o§r') = $ct))", + "$screen_content": "oxygen_distributor.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§o§x§y§g§e§n§_§s§t§o§r§a§g§e') = $ct))", + "$screen_content": "oxygen_storage.interface", "$screen_bg_content": "common.screen_background", "$screen_background_alpha": 0.4 }, @@ -209,6 +221,12 @@ "$screen_bg_content": "common.screen_background", "$screen_background_alpha": 0.4 }, + { + "requires": "(not (($ct - '§s§o§l§a§r§_§p§a§n§e§l') = $ct))", + "$screen_content": "solar_panel.standart_interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, { "requires": "(not (($ct - '§m§e§t§h§a§n§e§_§s§y§n§t§h§e§s§i§z§e§r') = $ct))", "$screen_content": "methane_synthesizer.interface", @@ -216,11 +234,77 @@ "$screen_background_alpha": 0.4 }, { - "requires": "(not (($ct - '§a§s§t§r§o§_§m§i§n§e§r§_§b§a§s§e') = $ct))", + "requires": "(not (($ct - '§c§a§r§g§o§_§l§o§a§d§e§r') = $ct))", + "$screen_content": "cargo_loader.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§c§a§r§g§o§_§u§n§l§o§a§d§e§r') = $ct))", + "$screen_content": "cargo_unloader.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§d§e§c§o§n§s§t§r§u§c§t§o§r') = $ct))", + "$screen_content": "deconstructor.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§o§x§y§g§e§n§_§s§e§a§l§e§r') = $ct))", + "$screen_content": "oxygen_sealer.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§c§h§r§o§m§a§t§i§c§_§a§p§p§l§i§c§a§t§o§r') = $ct))", + "$screen_content": "chromatic_applicator.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§s§h§o§r§t§_§r§a§n§g§e§_§t§e§l§e§p§a§d') = $ct))", + "$screen_content": "short_range_telepad.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "((not (($ct - '§a§s§t§r§o§_§m§i§n§e§r§_§d§o§c§k') = $ct)) or (not (($ct - '§a§s§t§r§o§_§m§i§n§e§r§_§b§a§s§e') = $ct)))", "$screen_content": "astro_miner_dock.interface", "$screen_bg_content": "common.screen_background", "$screen_background_alpha": 0.4 }, + { + "requires": "(not (($ct - '§l§a§u§n§c§h§_§c§o§n§t§r§o§l§l§e§r') = $ct))", + "$screen_content": "launch_controller.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§a§d§v§a§n§c§e§d§_§l§a§u§n§c§h§_§c§o§n§t§r§o§l§l§e§r') = $ct))", + "$screen_content": "advanced_launch_controller.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§g§e§o§t§h§e§r§m§a§l§_§g§e§n§e§r§a§t§o§r') = $ct))", + "$screen_content": "geothermal_generator.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§t§e§r§r§a§f§o§r§m§e§r') = $ct))", + "$screen_content": "terraformer.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, + { + "requires": "(not (($ct - '§s§o§l§a§r§_§a§r§r§a§y§_§c§o§n§t§r§o§l§l§e§r') = $ct))", + "$screen_content": "solar_array_controller.interface", + "$screen_bg_content": "common.screen_background", + "$screen_background_alpha": 0.4 + }, { "requires": "$debug", "$screen_content": "machines.debugging_interface", diff --git a/RP/ui/cosmos.json b/RP/ui/cosmos.json index fde2408c..9cb36ab1 100644 --- a/RP/ui/cosmos.json +++ b/RP/ui/cosmos.json @@ -971,18 +971,31 @@ } }, { - "red_number@form_buttons": { - "offset": [1, 6], - "$color": [1, 0, 0], - "$condition": "$is_create_station_button", - "$buttons": "cosmos.amount_label" + "red_number": { + "type": "label", + "color": [1, 0, 0], + "text_alignment": "center", + "text": "$amount", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [1, 16], + "size": [16, 12], + "layer": 5, + "bindings": "$no_condition" } }, { - "green_number@form_buttons": { - "offset": [1, 6], - "$color": [0, 1, 0], - "$buttons": "cosmos.amount_label" + "green_number": { + "type": "label", + "color": [0, 1, 0], + "text_alignment": "center", + "text": "$amount", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [1, 16], + "size": [16, 12], + "layer": 5, + "bindings": "$condition" } } ] diff --git a/RP/ui/fuel/fuel_inventory/fuel_inventory_0.json b/RP/ui/fuel/fuel_inventory/fuel_inventory_0.json new file mode 100644 index 00000000..469c1f5f --- /dev/null +++ b/RP/ui/fuel/fuel_inventory/fuel_inventory_0.json @@ -0,0 +1,77 @@ +{ + "namespace": "fuel_0", + + "interface@machines.dynamic_interface": { + "$size": ["100%", 130], + "$content": [ + { "title": { + "type": "label", + "text": "Fuel", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ 8, 6] + }}, + { "fuel_0@fuel_0.fuel_tank": { + "$index": 0, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ 0, 6 ] + }}, + { "stored_fuel@machines.item_text": { + "$index": 1, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ 55, 29 ] + }} + ] + }, + + "fuel_tank": { + "type":"panel", + "size": [ 36, 40 ], + "controls": [ + { "tank_back": { + "type":"image", + "texture": "textures/ui/cosmos/machines/rocket_tank_back", + "layer": 1 + }}, + { "rocket_fluid@machines.specific_slot": { + "anchor_from": "bottom_left", + "anchor_to": "bottom_left", + "offset": [0, -1], + "layer": 2, + "controls": [ + { "unit": { + "type": "panel", + "collection_index": "$index", + "anchor_from": "bottom_left", + "anchor_to": "bottom_left", + "size": [0, 1], + "controls": [ + { "image": { + "type": "image", + "tiled": true, + "texture": "textures/ui/liquids/fuel", + "anchor_from": "bottom_left", + "anchor_to": "bottom_left", + "size": [35, 38], + "bindings": "$use_durability", + "$source": "#data", + "$target": "#size_binding_y", + "$visible_if": "(not (#data = 1000))" + }} + ] + }} + ] + }}, + { "tank_front": { + "type": "image", + "texture": "textures/ui/cosmos/machines/rocket_tank_front", + "layer": 3 + }}, + { "tank_hover@machines.item_hover": {} } + ] + } +} + diff --git a/RP/ui/fuel/fuel_inventory/fuel_inventory_18.json b/RP/ui/fuel/fuel_inventory/fuel_inventory_18.json new file mode 100644 index 00000000..961331f6 --- /dev/null +++ b/RP/ui/fuel/fuel_inventory/fuel_inventory_18.json @@ -0,0 +1,37 @@ +{ + "namespace": "fuel_18", + + "interface@machines.dynamic_interface": { + "$size": ["100%", 179], + "$content": [ + { "title": { + "type": "label", + "text": "Fuel", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ 8, 6] + }}, + { "fuel_0@fuel_0.fuel_tank": { + "$index": 18, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ 0, 6 ] + }}, + { "stored_fuel@machines.item_text": { + "$index": 19, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ 55, 29 ] + }}, + { "input_grid@machines.item_grid": { + "size": [ 162, 36 ], + "grid_dimensions": [ 9, 2], + "anchor_from": "bottom_middle", + "anchor_to": "bottom_middle", + "offset": [ 0, -94 ] + }} + ] + } +} + diff --git a/RP/ui/fuel/fuel_inventory/fuel_inventory_36.json b/RP/ui/fuel/fuel_inventory/fuel_inventory_36.json new file mode 100644 index 00000000..da3b86b7 --- /dev/null +++ b/RP/ui/fuel/fuel_inventory/fuel_inventory_36.json @@ -0,0 +1,37 @@ +{ + "namespace": "fuel_36", + + "interface@machines.dynamic_interface": { + "$size": ["100%", 215], + "$content": [ + { "title": { + "type": "label", + "text": "Fuel", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ 8, 6] + }}, + { "fuel_0@fuel_0.fuel_tank": { + "$index": 36, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ 0, 6 ] + }}, + { "stored_fuel@machines.item_text": { + "$index": 37, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ 55, 29 ] + }}, + { "input_grid@machines.item_grid": { + "size": [ 162, 72 ], + "grid_dimensions": [ 9, 4], + "anchor_from": "bottom_middle", + "anchor_to": "bottom_middle", + "offset": [ 0, -94 ] + }} + ] + } +} + diff --git a/RP/ui/fuel/fuel_inventory/fuel_inventory_54.json b/RP/ui/fuel/fuel_inventory/fuel_inventory_54.json new file mode 100644 index 00000000..f3a645e5 --- /dev/null +++ b/RP/ui/fuel/fuel_inventory/fuel_inventory_54.json @@ -0,0 +1,37 @@ +{ + "namespace": "fuel_54", + + "interface@machines.dynamic_interface": { + "$size": ["100%", 251], + "$content": [ + { "title": { + "type": "label", + "text": "Fuel", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ 8, 6] + }}, + { "fuel_0@fuel_0.fuel_tank": { + "$index": 54, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ 0, 6 ] + }}, + { "stored_fuel@machines.item_text": { + "$index": 55, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ 55, 29 ] + }}, + { "input_grid@machines.item_grid": { + "size": [ 162, 108 ], + "grid_dimensions": [ 9, 6], + "anchor_from": "bottom_middle", + "anchor_to": "bottom_middle", + "offset": [ 0, -94 ] + }} + ] + } +} + diff --git a/RP/ui/machines.json b/RP/ui/machines.json index ea98d35f..57879785 100644 --- a/RP/ui/machines.json +++ b/RP/ui/machines.json @@ -57,12 +57,14 @@ "item_text@machines.specific_slot": { "$alignment": "top_left", "$color": "$title_text_color", + "$text_font_scale|default": 1.0, "controls": [ { "text": { "type": "label", "text": "#hover_text", "collection_index": "$index", "color": "$color", + "font_scale_factor": "$text_font_scale", "text_alignment": "$alignment", "bindings": "$fetch_item_hover" }} @@ -116,11 +118,15 @@ }, "fluid_tank": { "type":"panel", - "size": [ 18, 40 ], + "$tank_width|default": 18, + "$tank_size|default": [ "18px", "40px" ], + "$tank_back_tex|default": "textures/ui/cosmos/machines/tank_back", + "$tank_front_tex|default": "textures/ui/cosmos/machines/tank_front", + "size": "$tank_size", "controls": [ { "tank_back": { "type":"image", - "texture": "textures/ui/cosmos/machines/tank_back", + "texture": "$tank_back_tex", "layer": 1 }}, { "fluid@machines.specific_slot": { @@ -128,13 +134,14 @@ "anchor_to": "bottom_left", "offset": [0, -1], "layer": 2, + "size": ["100%", "100%"], "controls": [ { "unit": { "type": "panel", "collection_index": "$index", "anchor_from": "bottom_left", "anchor_to": "bottom_left", - "size": [0, 1], + "size": ["100%", 1], "controls": [ { "image": { "type": "image", @@ -142,7 +149,7 @@ "texture": "('textures/ui/liquids/' + $liquid)", "anchor_from": "bottom_left", "anchor_to": "bottom_left", - "size": [18, 1], + "size": ["100%", 1], "bindings": "$use_durability", "$source": "#data", "$target": "#size_binding_y", @@ -154,7 +161,7 @@ }}, { "tank_front": { "type": "image", - "texture": "textures/ui/cosmos/machines/tank_front", + "texture": "$tank_front_tex", "layer": 3 }}, { "tank_hover@machines.item_hover": {} } @@ -231,7 +238,11 @@ }, "energy_bar": { "type":"image", - "texture": "textures/ui/cosmos/machines/progress_bar", + "$energy_bg_tex|default": "textures/ui/cosmos/machines/progress_bar", + "$energy_icon_gray_tex|default": "textures/ui/cosmos/slot_overlay/power", + "$energy_icon_active_tex|default": "textures/ui/cosmos/slot_overlay/power_active", + "$energy_fill_tex|default": "textures/ui/cosmos/machines/progress_bar_fill", + "texture": "$energy_bg_tex", "size": [ 55, 9 ], "controls": [ { "energy@machines.specific_slot": { @@ -240,7 +251,7 @@ "controls": [ { "gray_icon": { "type": "image", - "texture": "textures/ui/cosmos/slot_overlay/power", + "texture": "$energy_icon_gray_tex", "size": [16, 16], "offset": [1, -3], "anchor_from": "top_left", @@ -256,7 +267,7 @@ "controls": [ { "active_icon": { "type": "image", - "texture": "textures/ui/cosmos/slot_overlay/power_active", + "texture": "$energy_icon_active_tex", "size": [16, 16], "offset": [1, -3], "anchor_from": "top_left", @@ -267,7 +278,7 @@ }}, { "image": { "type": "image", - "texture": "textures/ui/cosmos/machines/progress_bar_fill", + "texture": "$energy_fill_tex", "color": [0.75, 0.66, 0.14], "anchor_from": "top_left", "anchor_to": "top_left", @@ -345,7 +356,11 @@ }, "oxygen_bar": { "type":"image", - "texture": "textures/ui/cosmos/machines/progress_bar", + "$oxygen_bg_tex|default": "textures/ui/cosmos/machines/progress_bar", + "$oxygen_icon_gray_tex|default": "textures/ui/cosmos/slot_overlay/o2", + "$oxygen_icon_active_tex|default": "textures/ui/cosmos/slot_overlay/o2_active", + "$oxygen_fill_tex|default": "textures/ui/cosmos/machines/progress_bar_fill", + "texture": "$oxygen_bg_tex", "size": [ 55, 9 ], "controls": [ { "oxygen@machines.specific_slot": { @@ -354,11 +369,12 @@ "controls": [ { "gray_icon": { "type": "image", - "anchor_from": "left_middle", - "anchor_to": "right_middle", - "texture": "textures/ui/cosmos/slot_overlay/o2", + "texture": "$oxygen_icon_gray_tex", "size": [16, 16], - "offset": [1, -3.5] + "offset": [1, -3], + "anchor_from": "top_left", + "anchor_to": "top_right", + "color": [0.9, 0.9, 0.9] }}, { "oxygen_bar": { "type": "panel", @@ -369,9 +385,9 @@ "controls": [ { "active_icon": { "type": "image", - "texture": "textures/ui/cosmos/slot_overlay/o2_active", + "texture": "$oxygen_icon_active_tex", "size": [16, 16], - "offset": [1, -3.5], + "offset": [1, -3], "anchor_from": "top_left", "anchor_to": "top_right", "bindings": "$use_durability", @@ -380,8 +396,8 @@ }}, { "image": { "type": "image", - "texture": "textures/ui/cosmos/machines/progress_bar_fill", - "color": [0.29, 0.63, 0.89], + "texture": "$oxygen_fill_tex", + "color": [0.44, 0.69, 0.94], "anchor_from": "top_left", "anchor_to": "top_left", "size": [1, 9], @@ -398,11 +414,13 @@ ] }, "machine_button@machines.specific_slot": { + "$button_size|default": [75, 18], + "$button_font_scale|default": 1.0, "controls": [ { "button": { "type": "button", "collection_index": "$index", - "size": [75, 18], + "size": "$button_size", "default_control": "default", "hover_control": "hover", "pressed_control": "pressed", @@ -418,7 +436,7 @@ }, { "from_button_id": "button.menu_ok", - "to_button_id": "button.container_auto_place", + "to_button_id": "button.container_take_all_place_all", "mapping_type": "pressed" } ], @@ -432,6 +450,52 @@ "layer": 1, "text": "#hover_text", "shadow": true, + "font_scale_factor": "$button_font_scale", + "bindings": "$fetch_item_hover" + } + } + ] + }} + ] + }, + "machine_textbox@machines.specific_slot": { + "$button_size|default": [75, 18], + "$button_font_scale|default": 1.0, + "controls": [ + { "button": { + "type": "button", + "collection_index": "$index", + "size": "$button_size", + "default_control": "default", + "hover_control": "hover", + "pressed_control": "pressed", + "sound_name": "random.click", + "bindings": "$fetch_container_slot", + "$tag": "", + "button_mappings": [ + { + "from_button_id": "button.menu_select", + "to_button_id": "button.container_take_all_place_all", + "mapping_type": "pressed" + }, + { + "from_button_id": "button.menu_ok", + "to_button_id": "button.container_take_all_place_all", + "mapping_type": "pressed" + } + ], + "controls": [ + { "default": { "type": "image", "texture": "textures/ui/cosmos/machines/text_box" } }, + { "hover": { "type": "image", "texture": "textures/ui/cosmos/machines/text_box" } }, + { "pressed": { "type": "image", "texture": "textures/ui/cosmos/machines/text_box" } }, + { + "button_text": { + "type": "label", + "layer": 1, + "text": "#hover_text", + "shadow": false, + "color": [1, 1, 1], + "font_scale_factor": "$button_font_scale", "bindings": "$fetch_item_hover" } } @@ -454,17 +518,17 @@ "button_mappings": [ { "from_button_id": "button.menu_select", - "to_button_id": "button.container_auto_place", + "to_button_id": "button.container_take_all_place_all", "mapping_type": "pressed" }, { "from_button_id": "button.menu_ok", - "to_button_id": "button.container_auto_place", + "to_button_id": "button.container_take_all_place_all", "mapping_type": "pressed" } ], "controls": [ - {"texture": { + {"default": { "type": "panel", "controls": [ { "on": { @@ -488,6 +552,25 @@ "texture": "textures/white", "size": ["100% -2px", "100% -2px"], "alpha": 0.2 + }}, + {"pressed": { + "type": "panel", + "controls": [ + { "on": { + "type": "image", + "texture": "textures/ui/cosmos/machines/toggle_on", + "bindings": "$use_durability", + "$source": "#null", "$target": "#null", + "$visible_if": "(#data = 1)" + }}, + { "off": { + "type": "image", + "texture": "textures/ui/cosmos/machines/toggle_off", + "bindings": "$use_durability", + "$source": "#null", "$target": "#null", + "$visible_if": "(not (#data = 1))" + }} + ] }} ] }} @@ -546,12 +629,12 @@ "button_mappings": [ { "from_button_id": "button.menu_select", - "to_button_id": "button.container_auto_place", + "to_button_id": "button.container_take_all_place_all", "mapping_type": "pressed" }, { "from_button_id": "button.menu_ok", - "to_button_id": "button.container_auto_place", + "to_button_id": "button.container_take_all_place_all", "mapping_type": "pressed" } ], @@ -617,12 +700,12 @@ "button_mappings": [ { "from_button_id": "button.menu_select", - "to_button_id": "button.container_auto_place", + "to_button_id": "button.container_take_all_place_all", "mapping_type": "pressed" }, { "from_button_id": "button.menu_ok", - "to_button_id": "button.container_auto_place", + "to_button_id": "button.container_take_all_place_all", "mapping_type": "pressed" } ], @@ -682,6 +765,94 @@ ] }, + "ui_textbox@machines.new_item_data": { + "$button_tag": "§textbox", + "$name": "ui_textbox_button" + }, + + "ui_textbox_button": { + "type": "panel", + "size": [0, 0], + "controls": [{ "button@cosmos.button": { + "$button_tag": "$button_tag", + "size": ["100%", "100%"], + "pressed_control": "pressed", + "bindings": [ + { + "binding_type": "collection_details", + "binding_collection_name": "container_items", + "binding_condition": "once" + } + ], + "button_mappings": [ + { + "from_button_id": "button.menu_select", + "to_button_id": "button.container_take_all_place_all", + "mapping_type": "pressed" + }, + { + "from_button_id": "button.menu_ok", + "to_button_id": "button.container_take_all_place_all", + "mapping_type": "pressed" + } + ], + "controls": [ + { + "default": { + "type": "image", + "texture": "textures/ui/textedit_box" + } + }, + { + "hover": { + "type": "image", + "texture": "textures/ui/textedit_box_hover" + } + }, + { + "pressed": { + "type": "image", + "texture": "textures/ui/textedit_box_pressed" + } + }, + { + "text": { + "type": "label", + "text": "#text", + "layer": 6, + "shadow": false, + "color": [1, 1, 1], + "bindings": [ + { + "binding_name": "#hover_text", + "binding_name_override": "#text", + "binding_type": "collection", + "binding_collection_name": "container_items" + }, + { + "binding_type": "view", + "source_property_name": "(#text - $button_tag - '§o' - '§f' )", + "target_property_name": "#text" + } + ] + } + } + ] + }}], + "bindings": [ + { + "binding_name": "#hover_text", + "binding_type": "collection", + "binding_collection_name": "container_items" + }, + { + "binding_type": "view", + "source_property_name": "(not(#hover_text - $button_tag = #hover_text))", + "target_property_name": "#visible" + } + ] + }, + "item_data": { "type": "stack_panel", "factory":{ @@ -867,6 +1038,7 @@ "$content": [], "$size": ["100%", 166], "$show_close_button": true, + "$show_bottom_half": true, "controls": [ { "container_gamepad_helpers@common.container_gamepad_helpers": {} }, { "selected_item_details_factory@common.selected_item_details_factory": {} }, @@ -887,7 +1059,9 @@ "layer": 5, "controls": "$content" }}, - { "bottom_half@common.inventory_panel_bottom_half_with_label": {} }, + { "bottom_half@common.inventory_panel_bottom_half_with_label": { + "visible": "$show_bottom_half" + }}, { "hotbar_grid@common.hotbar_grid_template": {} }, { "inventory_take_progress_icon_button@common.inventory_take_progress_icon_button": {} } ] @@ -913,4 +1087,4 @@ } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/advanced_compressor.json b/RP/ui/machines/advanced_compressor.json new file mode 100644 index 00000000..28c7646e --- /dev/null +++ b/RP/ui/machines/advanced_compressor.json @@ -0,0 +1,109 @@ +{ + "namespace": "advanced_compressor", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 199 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Advanced Compressor", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "input_grid@machines.item_grid": { + "size": [ + 54, + 54 + ], + "grid_dimensions": [ + 3, + 3 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 18, + 17 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 9, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 54, + 74 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "output1@machines.item_slot": { + "$index": 10, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 137, + 28 + ] + } + }, + { + "output2@machines.item_slot": { + "$index": 11, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 137, + 46 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 12, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 17, + 95 + ] + } + }, + { + "progress@compressor.progress_bar": { + "$index": 13, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 77, + 28 + ] + } + }, + { + "status@machines.item_text": { + "$index": 14, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 78, + 75 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/advanced_launch_controller.json b/RP/ui/machines/advanced_launch_controller.json new file mode 100644 index 00000000..fddab8f0 --- /dev/null +++ b/RP/ui/machines/advanced_launch_controller.json @@ -0,0 +1,100 @@ +{ + "namespace": "advanced_launch_controller", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 209 + ], + "$show_close_button": false, + "$content": [ + { + "title": { + "type": "label", + "text": "Advanced Launch Controller", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 152, + 105 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 99, + 114 + ] + } + }, + { + "remove_pad_checkbox@machines.machine_toggle": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 27, + 20 + ] + } + }, + { + "launch_when_checkbox@machines.machine_toggle": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 27, + 38 + ] + } + }, + { + "launch_condition_dropdown@machines.machine_button": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 52, + 52 + ], + "$button_size": [ + 75, + 18 + ] + } + }, + { + "back_button@machines.machine_button": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 5, + 5 + ], + "$button_size": [ + 20, + 20 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/airlock_controller.json b/RP/ui/machines/airlock_controller.json new file mode 100644 index 00000000..6e69ceeb --- /dev/null +++ b/RP/ui/machines/airlock_controller.json @@ -0,0 +1,116 @@ +{ + "namespace": "airlock_controller", + "interface@machines.dynamic_interface_large": { + "$size": [ + "100%", + 139 + ], + "$show_bottom_half": false, + "$show_hotbar": false, + "$content": [ + { + "title": { + "type": "label", + "text": "Airlock Controller", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 5 + ] + } + }, + { + "redstone@machines.machine_button": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 20 + ], + "$button_size": [ + 161, + 18 + ] + } + }, + { + "distance@machines.machine_button": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 40 + ], + "$button_size": [ + 161, + 18 + ] + } + }, + { + "distance_value@machines.machine_button": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 60 + ], + "$button_size": [ + 161, + 18 + ] + } + }, + { + "owner_only@machines.machine_button": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 80 + ], + "$button_size": [ + 161, + 18 + ] + } + }, + { + "invert@machines.machine_button": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 100 + ], + "$button_size": [ + 78, + 18 + ] + } + }, + { + "horizontal@machines.machine_button": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 93, + 100 + ], + "$button_size": [ + 78, + 18 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/cargo_loader.json b/RP/ui/machines/cargo_loader.json new file mode 100644 index 00000000..dc97d1e8 --- /dev/null +++ b/RP/ui/machines/cargo_loader.json @@ -0,0 +1,96 @@ +{ + "namespace": "cargo_loader", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 201 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Cargo Loader", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 27 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "cargo_grid@machines.item_grid": { + "size": [ + 126, + 36 + ], + "grid_dimensions": [ + 7, + 2 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 38, + 27 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 15, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 108, + 102 + ] + } + }, + { + "lightning_icon": { + "type": "image", + "texture": "textures/ui/cosmos/slot_overlay/power", + "size": [ + 11, + 10 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 94, + 101 + ] + } + }, + { + "load_items_button@machines.machine_button": { + "$index": 16, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 87, + 77 + ], + "$button_size": [ + 75, + 18 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/cargo_unloader.json b/RP/ui/machines/cargo_unloader.json new file mode 100644 index 00000000..e0cdc9f1 --- /dev/null +++ b/RP/ui/machines/cargo_unloader.json @@ -0,0 +1,106 @@ +{ + "namespace": "cargo_unloader", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 201 + ], + "$content": [ + { + "title_text": { + "type": "label", + "text": "container.cargounloader.name", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 60, + 12 + ] + } + }, + { + "inventory_text": { + "type": "label", + "text": "container.inventory", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 8, + 111 + ] + } + }, + { + "status_label": { + "type": "label", + "text": "gui.message.status.name", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 11, + 67 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 27 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "cargo_grid@machines.item_grid": { + "size": [ + 126, + 36 + ], + "grid_dimensions": [ + 7, + 2 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 38, + 27 + ] + } + }, + { + "unload_items_button@machines.machine_button": { + "$index": 15, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 87, + 77 + ], + "$button_size": [ + 75, + 18 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 16, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 108, + 102 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/chromatic_applicator.json b/RP/ui/machines/chromatic_applicator.json new file mode 100644 index 00000000..a461cfde --- /dev/null +++ b/RP/ui/machines/chromatic_applicator.json @@ -0,0 +1,102 @@ +{ + "namespace": "chromatic_applicator", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 186 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Chromatic Applicator", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "to_be_painted@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 40, + 25 + ] + } + }, + { + "dyes@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 122, + 25 + ] + } + }, + { + "color_selector@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 79, + 24 + ] + } + }, + { + "apply_paint@machines.machine_button": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 92, + 45 + ], + "$button_size": [ + 75, + 18 + ] + } + }, + { + "mix_paint@machines.machine_button": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 8, + 45 + ], + "$button_size": [ + 75, + 18 + ] + } + }, + { + "reset_paint@machines.machine_button": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 8, + 67 + ], + "$button_size": [ + 75, + 18 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/circuit_fabricator.json b/RP/ui/machines/circuit_fabricator.json index 99cca4b1..c82471d9 100644 --- a/RP/ui/machines/circuit_fabricator.json +++ b/RP/ui/machines/circuit_fabricator.json @@ -1,139 +1,228 @@ { - "namespace": "circuit_fabricator", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 192], - "$content": [ - { "title": { - "type": "label", - "text": "Circuit Fabricator", - "color": "$title_text_color", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 10, 5 ] - }}, - { "background": { - "type":"image", - "texture": "textures/ui/cosmos/machines/circuit_fabricator_background", - "size": [155, 87], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [14, 16] - }}, - { "diamond_input@machines.item_slot": { - "$index": 0, - "$overlay_texture": "textures/items/diamond", - "$overlay_alpha": 0.25, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 14, 16 ] - }}, - { "silicon_input1@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/items/raw_silicon", - "$overlay_alpha": 0.25, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 73, 45 ] - }}, - { "silicon_input2@machines.item_slot": { - "$index": 2, - "$overlay_texture": "textures/items/raw_silicon", - "$overlay_alpha": 0.25, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 73, 63 ] - }}, - { "redstone_input@machines.item_slot": { - "$index": 3, - "$overlay_texture": "textures/items/redstone_dust", - "$overlay_alpha": 0.25, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 121, 45 ] - }}, - { "input_slot@machines.item_slot": { - "$index": 4, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 144, 19 ] - }}, - { "battery_slot@machines.item_slot": { - "$index": 5, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 5, 68 ] - }}, - { "output_slot@machines.item_slot": { - "$index": 6, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 151, 85 ] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 7, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 17, 88 ] - }}, - { "progress@circuit_fabricator.progress_bar": { - "$index": 8, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 87, 19 ] - }}, - { "status@machines.item_text": { - "$index": 9, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 92, 80 ] - }} + "namespace": "circuit_fabricator", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 192 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Circuit Fabricator", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "background": { + "type": "image", + "texture": "textures/ui/cosmos/machines/circuit_fabricator_background", + "size": [ + 155, + 87 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 14, + 16 + ] + } + }, + { + "diamond_input@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 14, + 16 + ], + "$overlay_texture": "textures/items/diamond", + "$overlay_alpha": 0.25 + } + }, + { + "silicon_input1@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 73, + 45 + ], + "$overlay_texture": "textures/items/raw_silicon", + "$overlay_alpha": 0.25 + } + }, + { + "silicon_input2@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 73, + 63 + ], + "$overlay_texture": "textures/items/raw_silicon", + "$overlay_alpha": 0.25 + } + }, + { + "redstone_input@machines.item_slot": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 121, + 45 + ], + "$overlay_texture": "textures/items/redstone_dust", + "$overlay_alpha": 0.25 + } + }, + { + "input_slot@machines.item_slot": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 144, + 19 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 5, + 68 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "output_slot@machines.item_slot": { + "$index": 6, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 151, + 85 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 7, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 17, + 88 + ] + } + }, + { + "progress@circuit_fabricator.progress_bar": { + "$index": 8, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 87, + 19 + ] + } + }, + { + "status@machines.item_text": { + "$index": 9, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 92, + 80 + ] + } + } ] - }, - + }, "progress_bar": { - "type":"image", + "type": "image", "texture": "textures/ui/cosmos/machines/progress_bar", - "size": [ 53, 12 ], + "size": [ + 53, + 12 + ], "controls": [ - { "progress@machines.specific_slot": { - "anchor_from": "top_left", - "anchor_to": "top_left", - "controls": [ - { "progress_bar": { - "type": "panel", - "collection_index": "$index", - "anchor_from": "top_left", - "anchor_to": "top_left", - "size": [1, 0], - "controls": [ - { "progress_fill": { + { + "progress@machines.specific_slot": { + "anchor_from": "top_left", + "anchor_to": "top_left", + "controls": [ + { + "progress_bar": { "type": "panel", - "clips_children": true, - "size": [1, 10], - "offset": [1, 1], - "anchor_to": "top_left", + "collection_index": "$index", "anchor_from": "top_left", - "bindings": "$use_durability", - "$source": "#data", - "$target": "#size_binding_x", - "$visible_if": "(not (#data = 1000))", + "anchor_to": "top_left", + "size": [ + 1, + 0 + ], "controls": [ - { "image": { - "anchor_to": "top_left", - "anchor_from": "top_left", - "type": "image", - "size": [51, 30], - "texture": "textures/ui/cosmos/machines/fabricating" - }} + { + "progress_fill": { + "type": "panel", + "clips_children": true, + "size": [ + 1, + 10 + ], + "anchor_to": "top_left", + "anchor_from": "top_left", + "offset": [ + 1, + 1 + ], + "bindings": "$use_durability", + "$source": "#data", + "$target": "#size_binding_x", + "$visible_if": "(not (#data = 1000))", + "controls": [ + { + "image": { + "anchor_to": "top_left", + "anchor_from": "top_left", + "type": "image", + "size": [ + 51, + 30 + ], + "texture": "textures/ui/cosmos/machines/fabricating" + } + } + ] + } + } ] - }} - ] - }} - ] - }}, - { "hover_text@machines.item_hover": {}} + } + } + ] + } + }, + { + "hover_text@machines.item_hover": {} + } ] } } diff --git a/RP/ui/machines/coal_generator.json b/RP/ui/machines/coal_generator.json index f507c518..5e6152a8 100644 --- a/RP/ui/machines/coal_generator.json +++ b/RP/ui/machines/coal_generator.json @@ -1,35 +1,58 @@ { - "namespace": "coal_generator", - - "interface@machines.dynamic_interface": { - "$content": [ - { "title": { - "type": "label", - "text": "Coal Generator", - "color": "$title_text_color", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 5 ] - }}, - { "coal_input@machines.item_slot": { - "$index": 0, - "$overlay_texture": "textures/items/coal", - "$overlay_alpha": 0.25, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ -50, 33 ] - }}, - { "arrow@crafting.crafting_arrow_large": { - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ -20, 33 ] - }}, - { "heat_and_power@machines.item_text": { - "$index": 1, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 85, 33 ] - }} + "namespace": "coal_generator", + "interface@machines.dynamic_interface": { + "$content": [ + { + "title": { + "type": "label", + "text": "Coal Generator", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 5 + ] + } + }, + { + "coal_input@machines.item_slot": { + "$index": 0, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + -50, + 33 + ], + "$overlay_texture": "textures/items/coal", + "$overlay_alpha": 0.25 + } + }, + { + "arrow@crafting.crafting_arrow_large": { + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + -20, + 33 + ], + "size": [ + 22, + 15 + ] + } + }, + { + "heat_and_power@machines.item_text": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 85, + 33 + ] + } + } ] - } -} \ No newline at end of file + } +} diff --git a/RP/ui/machines/compressor.json b/RP/ui/machines/compressor.json index cf97b82f..36630b25 100644 --- a/RP/ui/machines/compressor.json +++ b/RP/ui/machines/compressor.json @@ -1,161 +1,263 @@ { - "namespace": "compressor", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 192], - "$content": [ - { "title": { - "type": "label", - "text": "Compressor", - "color": "$title_text_color", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 10, 5 ] - }}, - { "input_grid@machines.item_grid": { - "size": [ 54, 54 ], - "grid_dimensions": [ 3, 3 ], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 18, 17 ] - }}, - { "fuel_slot@machines.item_slot": { - "$index": 9, - "$overlay_texture": "textures/items/coal", - "$overlay_alpha": 0.25, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 54, 74 ] - }}, - { "fuel_text": { - "type": "label", - "text": "Fuel:", - "color": "$title_text_color", - "layer": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 27, 79 ] - }}, - { "output_slot@machines.item_slot": { - "$index": 10, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 137, 37 ] - }}, - { "progress@compressor.progress_bar": { - "$index": 12, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 77, 28 ] - }}, - { "burn_time@compressor.burn_time": { - "$index": 11, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [81, 28] - }}, - { "status@machines.item_text": { - "$index": 13, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 97, 70 ] - }} + "namespace": "compressor", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 192 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Compressor", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "input_grid@machines.item_grid": { + "size": [ + 54, + 54 + ], + "grid_dimensions": [ + 3, + 3 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 18, + 17 + ] + } + }, + { + "fuel_slot@machines.item_slot": { + "$index": 9, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 54, + 74 + ], + "$overlay_texture": "textures/items/coal", + "$overlay_alpha": 0.25 + } + }, + { + "fuel_text": { + "type": "label", + "text": "Fuel:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 27, + 79 + ], + "layer": 2 + } + }, + { + "output_slot@machines.item_slot": { + "$index": 10, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 137, + 37 + ] + } + }, + { + "burn_time@compressor.burn_time": { + "$index": 11, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 81, + 28 + ] + } + }, + { + "progress@compressor.progress_bar": { + "$index": 12, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 77, + 28 + ] + } + }, + { + "status@machines.item_text": { + "$index": 13, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 97, + 70 + ] + } + } ] }, - - "progress_bar": { - "type":"image", - "texture": "textures/ui/cosmos/machines/compressor_bar", - "size": [ 52, 25 ], + "burn_time": { + "type": "image", + "texture": "textures/ui/flame_empty_image", + "size": [ + 13, + 13 + ], "controls": [ - { "progress@machines.specific_slot": { - "anchor_from": "top_left", - "anchor_to": "top_left", - "controls": [ - { "progress_bar": { - "type": "panel", - "collection_index": "$index", - "anchor_from": "top_left", - "anchor_to": "top_left", - "size": [1, 0], - "controls": [ - { "hammering": { - "type": "image", - "texture": "textures/ui/cosmos/machines/compressor_on", - "size": [15, 13], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [24, 1], - "bindings": "$use_durability", - "$source": "#null", "$target": "#null", - "$visible_if": "(#data > 26 and not (#data = 1000))" - }}, - { "progress_fill": { + { + "progress@machines.specific_slot": { + "size": [ + "100%", + "100%" + ], + "controls": [ + { + "unit_size": { "type": "panel", - "clips_children": true, - "size": [1, 17], - "anchor_to": "top_left", - "anchor_from": "top_left", - "offset": [0, 9], - "bindings": "$use_durability", - "$source": "#data", - "$target": "#size_binding_x", - "$visible_if": "(not (#data = 1000))", + "collection_index": "$index", + "anchor_from": "bottom_left", + "anchor_to": "bottom_left", + "size": [ + 0, + 1 + ], "controls": [ - { "image": { - "anchor_to": "top_left", - "anchor_from": "top_left", - "type": "image", - "size": [52, 17], - "texture": "textures/ui/cosmos/machines/compressor_bar_fill" - }} + { + "clipper": { + "type": "panel", + "clips_children": true, + "size": [ + 13, + 1 + ], + "anchor_from": "bottom_left", + "anchor_to": "bottom_left", + "bindings": "$use_durability", + "$source": "#data", + "$target": "#size_binding_y", + "$visible_if": "(not (#data = 1000))", + "controls": [ + { + "image": { + "type": "image", + "texture": "textures/ui/flame_full_image", + "size": [ + 13, + 13 + ], + "anchor_to": "bottom_left", + "anchor_from": "bottom_left" + } + } + ] + } + } ] - }} - ] - }} - ] - }} + } + } + ] + } + } ] }, - "burn_time": { + "progress_bar": { "type": "image", - "texture": "textures/ui/flame_empty_image", - "size": [13, 13], + "texture": "textures/ui/cosmos/machines/compressor_bar", + "size": [ + 52, + 25 + ], "controls": [ - { "progress@machines.specific_slot": { - "size": ["100%", "100%"], - "controls": [ - { "unit_size": { - "type": "panel", - "collection_index": "$index", - "anchor_from": "bottom_left", - "anchor_to": "bottom_left", - "size": [0, 1], - "controls": [ - { "clipper": { + { + "progress@machines.specific_slot": { + "anchor_from": "top_left", + "anchor_to": "top_left", + "controls": [ + { + "progress_bar": { "type": "panel", - "clips_children": true, - "size": [13, 1], - "anchor_from": "bottom_left", - "anchor_to": "bottom_left", - "bindings": "$use_durability", - "$source": "#data", - "$target": "#size_binding_y", - "$visible_if": "(not (#data = 1000))", + "collection_index": "$index", + "anchor_from": "top_left", + "anchor_to": "top_left", + "size": [ + 1, + 0 + ], "controls": [ - { "image": { - "type": "image", - "texture": "textures/ui/flame_full_image", - "size": [13, 13], - "anchor_to": "bottom_left", - "anchor_from": "bottom_left" - }} + { + "hammering": { + "type": "image", + "texture": "textures/ui/cosmos/machines/compressor_on", + "size": [ + 15, + 13 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 24, + 1 + ], + "bindings": "$use_durability", + "$source": "#null", + "$target": "#null", + "$visible_if": "(#data > 26 and not (#data = 1000))" + } + }, + { + "progress_fill": { + "type": "panel", + "clips_children": true, + "size": [ + 1, + 17 + ], + "anchor_to": "top_left", + "anchor_from": "top_left", + "offset": [ + 0, + 9 + ], + "bindings": "$use_durability", + "$source": "#data", + "$target": "#size_binding_x", + "$visible_if": "(not (#data = 1000))", + "controls": [ + { + "image": { + "anchor_to": "top_left", + "anchor_from": "top_left", + "type": "image", + "size": [ + 52, + 17 + ], + "texture": "textures/ui/cosmos/machines/compressor_bar_fill" + } + } + ] + } + } ] - }} - ] - }} - ] - }} + } + } + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/deconstructor.json b/RP/ui/machines/deconstructor.json index 1b506f8f..873f252d 100644 --- a/RP/ui/machines/deconstructor.json +++ b/RP/ui/machines/deconstructor.json @@ -1,55 +1,189 @@ { - "namespace": "deconstructor", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 199], - "$content": [ - { "title": { - "type": "label", - "text": "Deconstructor", - "color": "$title_text_color", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 10, 5 ] - }}, - { "input_grid@machines.item_grid": { - "size": [ 54, 54 ], - "grid_dimensions": [ 3, 3 ], - "anchor_from": "top_right", - "anchor_to": "top_right", - "offset": [ -12, 20 ] - }}, - { "battery_slot@machines.item_slot": { - "$index": 9, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 54, 74 ] - }}, - { "input@machines.item_slot": { - "$index": 10, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 24, 38 ] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 11, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 17, 95 ] - }}, - { "progress@compressor.progress_bar": { - "$index": 12, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 52, 31 ] - }}, - { "status@machines.item_text": { - "$index": 13, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 78, 76 ] - }} + "namespace": "deconstructor", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 199 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Deconstructor", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "output_grid@machines.item_grid": { + "size": [ + 54, + 54 + ], + "grid_dimensions": [ + 3, + 3 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 112, + 18 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 9, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 55, + 75 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "input_slot@machines.item_slot": { + "$index": 10, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 26, + 36 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 11, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 18, + 96 + ] + } + }, + { + "progress@deconstructor.progress_bar": { + "$index": 12, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + 36 + ] + } + }, + { + "power_icon": { + "type": "image", + "texture": "textures/ui/cosmos/slot_overlay/power", + "size": [ + 11, + 10 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 4, + 95 + ] + } + } + ] + }, + "progress_bar": { + "type": "image", + "texture": "textures/ui/cosmos/machines/deconstructor_bar", + "size": [ + 54, + 17 + ], + "controls": [ + { + "progress@machines.specific_slot": { + "anchor_from": "top_left", + "anchor_to": "top_left", + "controls": [ + { + "progress_bar": { + "type": "panel", + "collection_index": "$index", + "anchor_from": "top_left", + "anchor_to": "top_left", + "size": [ + 1, + 0 + ], + "controls": [ + { + "deconstructor_on": { + "type": "image", + "texture": "textures/ui/cosmos/machines/deconstructor_on", + "size": [ + 15, + 13 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 24, + -8 + ], + "bindings": "$use_durability", + "$source": "#null", + "$target": "#null", + "$visible_if": "(#data > 500 and not (#data = 1000))" + } + }, + { + "progress_fill": { + "type": "panel", + "clips_children": true, + "size": [ + 54, + 17 + ], + "anchor_to": "top_left", + "anchor_from": "top_left", + "offset": [ + 0, + 0 + ], + "bindings": "$use_durability", + "$source": "#data", + "$target": "#size_binding_x", + "$visible_if": "(not (#data = 1000))", + "controls": [ + { + "image": { + "anchor_to": "top_left", + "anchor_from": "top_left", + "type": "image", + "size": [ + 54, + 17 + ], + "texture": "textures/ui/cosmos/machines/deconstructor_bar_fill" + } + } + ] + } + } + ] + } + } + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/electric_arc_furnace.json b/RP/ui/machines/electric_arc_furnace.json new file mode 100644 index 00000000..dc46f64b --- /dev/null +++ b/RP/ui/machines/electric_arc_furnace.json @@ -0,0 +1,168 @@ +{ + "namespace": "electric_arc_furnace", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 157 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Electric Arc Furnace", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 4 + ] + } + }, + { + "input@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 54, + 23 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 46 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "output1@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 108, + 23 + ] + } + }, + { + "output2@machines.item_slot": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 130, + 23 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 39, + 49 + ] + } + }, + { + "progress@electric_arc_furnace.electric_furnace_bar": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 77, + 23 + ] + } + }, + { + "status@machines.item_text": { + "$index": 6, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 98, + 49 + ] + } + } + ] + }, + "electric_furnace_bar": { + "type": "image", + "texture": "textures/ui/cosmos/machines/electric_furnace_bar", + "size": [ + 22, + 15 + ], + "controls": [ + { + "progress@machines.specific_slot": { + "anchor_from": "top_left", + "anchor_to": "top_left", + "controls": [ + { + "progress_bar": { + "type": "panel", + "collection_index": "$index", + "anchor_from": "top_left", + "anchor_to": "top_left", + "size": [ + 1, + 0 + ], + "controls": [ + { + "progress_fill": { + "type": "panel", + "clips_children": true, + "size": [ + 22, + 15 + ], + "anchor_to": "top_left", + "anchor_from": "top_left", + "offset": [ + 0, + 0 + ], + "bindings": "$use_durability", + "$source": "#data", + "$target": "#size_binding_x", + "$visible_if": "(not (#data = 1000))", + "controls": [ + { + "image": { + "anchor_to": "top_left", + "anchor_from": "top_left", + "type": "image", + "size": [ + 22, + 15 + ], + "texture": "textures/ui/cosmos/machines/electric_furnace_bar_fill" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } +} diff --git a/RP/ui/machines/electric_compressor.json b/RP/ui/machines/electric_compressor.json index d6987fcb..c2917de2 100644 --- a/RP/ui/machines/electric_compressor.json +++ b/RP/ui/machines/electric_compressor.json @@ -1,67 +1,109 @@ { - "namespace": "electric_compressor", - - "standart_interface@electric_compressor.interface": { - "$title": "Electric Compressor" - }, - "advanced_interface@electric_compressor.interface": { - "$title": "Advanced Compressor" - }, - "interface@machines.dynamic_interface": { - "$size": ["100%", 199], - "$content": [ - { "title": { - "type": "label", - "text": "$title", - "color": "$title_text_color", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 10, 5 ] - }}, - { "input_grid@machines.item_grid": { - "size": [ 54, 54 ], - "grid_dimensions": [ 3, 3 ], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 18, 17 ] - }}, - { "battery_slot@machines.item_slot": { - "$index": 9, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 54, 74 ] - }}, - { "output1@machines.item_slot": { - "$index": 10, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 137, 28 ] - }}, - { "output2@machines.item_slot": { - "$index": 11, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 137, 46 ] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 12, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 17, 95 ] - }}, - { "progress@compressor.progress_bar": { - "$index": 13, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 77, 28 ] - }}, - { "status@machines.item_text": { - "$index": 14, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 78, 75 ] - }} + "namespace": "electric_compressor", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 199 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Electric Compressor", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "input_grid@machines.item_grid": { + "size": [ + 54, + 54 + ], + "grid_dimensions": [ + 3, + 3 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 18, + 17 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 9, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 54, + 74 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "output1@machines.item_slot": { + "$index": 10, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 137, + 28 + ] + } + }, + { + "output2@machines.item_slot": { + "$index": 11, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 137, + 46 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 12, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 17, + 95 + ] + } + }, + { + "progress@compressor.progress_bar": { + "$index": 13, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 77, + 28 + ] + } + }, + { + "status@machines.item_text": { + "$index": 14, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 78, + 75 + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/electric_furnace.json b/RP/ui/machines/electric_furnace.json index 240a861a..f18e154e 100644 --- a/RP/ui/machines/electric_furnace.json +++ b/RP/ui/machines/electric_furnace.json @@ -1,113 +1,157 @@ { - "namespace": "electric_furnace", - - "furnace_interface@electric_furnace.interface": { - "$title": "Electric Furnace", - "$is_arc": false - }, - "arc_furnace_interface@electric_furnace.interface": { - "$title": "Electric Arc Furnace", - "$is_arc": true - }, - "interface@machines.dynamic_interface": { - "$size": ["100%", 157], - "$content": [ - { "title": { - "type": "label", - "text": "$title", - "color": "$title_text_color", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 4] - }}, - { "input@machines.item_slot": { - "$index": 0, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 54, 23 ] - }}, - { "battery_slot@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 7, 46 ] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 39, 49] - }}, - { "progress@electric_furnace.electric_furnace_bar": { - "$index": 3, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 77, 23 ] - }}, - { "status@machines.item_text": { - "$index": 4, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 98, 49 ] - }}, - { "output@machines.item_slot": { - "$index": 5, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 108, 23 ] - }}, - { "output_2@machines.item_slot": { - "ignored": "($is_arc = false)", - "$index": 6, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 126, 23 ] - }} + "namespace": "electric_furnace", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 157 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Electric Furnace", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 4 + ] + } + }, + { + "input@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 54, + 23 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 46 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "output@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 108, + 23 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 39, + 49 + ] + } + }, + { + "progress@electric_furnace.electric_furnace_bar": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 77, + 23 + ] + } + }, + { + "status@machines.item_text": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 98, + 49 + ] + } + } ] }, - "electric_furnace_bar": { - "type":"image", + "type": "image", "texture": "textures/ui/cosmos/machines/electric_furnace_bar", - "size": [ 22, 15 ], + "size": [ + 22, + 15 + ], "controls": [ - { "progress@machines.specific_slot": { - "anchor_from": "top_left", - "anchor_to": "top_left", - "controls": [ - { "progress_bar": { - "type": "panel", - "collection_index": "$index", - "anchor_from": "top_left", - "anchor_to": "top_left", - "size": [1, 0], - "controls": [ - { "progress_fill": { + { + "progress@machines.specific_slot": { + "anchor_from": "top_left", + "anchor_to": "top_left", + "controls": [ + { + "progress_bar": { "type": "panel", - "clips_children": true, - "size": [22, 15], - "anchor_to": "top_left", + "collection_index": "$index", "anchor_from": "top_left", - "offset": [0, 0], - "bindings": "$use_durability", - "$source": "#data", - "$target": "#size_binding_x", - "$visible_if": "(not (#data = 1000))", + "anchor_to": "top_left", + "size": [ + 1, + 0 + ], "controls": [ - { "image": { - "anchor_to": "top_left", - "anchor_from": "top_left", - "type": "image", - "size": [22, 15], - "texture": "textures/ui/cosmos/machines/electric_furnace_bar_fill" - }} + { + "progress_fill": { + "type": "panel", + "clips_children": true, + "size": [ + 22, + 15 + ], + "anchor_to": "top_left", + "anchor_from": "top_left", + "offset": [ + 0, + 0 + ], + "bindings": "$use_durability", + "$source": "#data", + "$target": "#size_binding_x", + "$visible_if": "(not (#data = 1000))", + "controls": [ + { + "image": { + "anchor_to": "top_left", + "anchor_from": "top_left", + "type": "image", + "size": [ + 22, + 15 + ], + "texture": "textures/ui/cosmos/machines/electric_furnace_bar_fill" + } + } + ] + } + } ] - }} - ] - }} - ] - }} + } + } + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/energy_storage.json b/RP/ui/machines/energy_storage.json index f2f2f15b..1ab7c84a 100644 --- a/RP/ui/machines/energy_storage.json +++ b/RP/ui/machines/energy_storage.json @@ -1,106 +1,168 @@ { - "namespace": "energy_storage", - - "module_interface@energy_storage.interface": { + "namespace": "energy_storage", + "module_interface@energy_storage.interface": { "$title": "Energy Storage Module", "$maxPower": "Max Output: 300 gJ/t" - }, - "cluster_interface@energy_storage.interface": { + }, + "cluster_interface@energy_storage.interface": { "$title": "Energy Storage Cluster", "$maxPower": "Max Output: 1,800 gJ/t" - }, - - "interface@machines.dynamic_interface": { - "$content": [ - { "title": { - "type": "label", - "color": "$title_text_color", - "text": "$title", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 5 ] - }}, - { "output_battery@machines.item_slot": { - "$index": 0, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 32, 23 ] - }}, - { "input_battery@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 32, 47 ] - }}, - { "output_arrow@crafting.crafting_arrow_large": { - "size": [ -22, 15 ], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [76, 25] - }}, - { "input_arrow@crafting.crafting_arrow_large": { - "size": [ 22, 15 ], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [54, 48] - }}, - { "stored_energy@machines.item_text": { - "$index": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 88, 25 ] - }}, - { "capacity@energy_storage.capacity": { - "$index": 3, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 88, 51 ] - }}, - { "maxPower": { - "type": "label", - "color": "$title_text_color", - "text": "$maxPower", - "anchor_from": "top_right", - "anchor_to": "top_right", - "offset": [ -10, 64 ] - }} + }, + "interface@machines.dynamic_interface": { + "$content": [ + { + "title": { + "type": "label", + "text": "$title", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 5 + ] + } + }, + { + "output_battery@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 32, + 23 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "input_battery@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 32, + 47 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "output_arrow@crafting.crafting_arrow_large": { + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 76, + 25 + ], + "size": [ + -22, + 15 + ] + } + }, + { + "input_arrow@crafting.crafting_arrow_large": { + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 54, + 48 + ], + "size": [ + 22, + 15 + ] + } + }, + { + "stored_energy@machines.item_text": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 88, + 25 + ] + } + }, + { + "capacity@energy_storage.capacity": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 88, + 51 + ] + } + }, + { + "maxPower": { + "type": "label", + "text": "$maxPower", + "color": "$title_text_color", + "anchor_from": "top_right", + "anchor_to": "top_right", + "offset": [ + -10, + 64 + ] + } + } ] - }, - + }, "capacity": { - "type":"image", + "type": "image", "texture": "textures/ui/cosmos/machines/progress_bar", - "size": [ 75, 5 ], + "size": [ + 75, + 5 + ], "controls": [ - { "capacity@machines.specific_slot": { - "anchor_from": "top_left", - "anchor_to": "top_left", - "controls": [ - { "capacity": { - "type": "panel", - "collection_index": "$index", - "anchor_from": "top_left", - "anchor_to": "top_left", - "size": [1, 0], - "controls": [ - { "capacity": { - "type": "image", - "texture": "textures/ui/cosmos/machines/progress_bar_fill", - "color": [0, 0.7, 0], - "size": [1, 5], - "anchor_to": "top_left", + { + "capacity@machines.specific_slot": { + "anchor_from": "top_left", + "anchor_to": "top_left", + "controls": [ + { + "capacity": { + "type": "panel", + "collection_index": "$index", "anchor_from": "top_left", - "bindings": "$use_durability", - "$source": "#data", - "$target": "#size_binding_x", - "$visible_if": "(not (#data = 1000))" - }} - ] - }} - ] - }} + "anchor_to": "top_left", + "size": [ + 1, + 0 + ], + "controls": [ + { + "capacity": { + "type": "image", + "texture": "textures/ui/cosmos/machines/progress_bar_fill", + "color": [ + 0, + 0.7, + 0 + ], + "size": [ + 1, + 5 + ], + "anchor_to": "top_left", + "anchor_from": "top_left", + "bindings": "$use_durability", + "$source": "#data", + "$target": "#size_binding_x", + "$visible_if": "(not (#data = 1000))" + } + } + ] + } + } + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/fuel_loader.json b/RP/ui/machines/fuel_loader.json index 6cfdff32..240085db 100644 --- a/RP/ui/machines/fuel_loader.json +++ b/RP/ui/machines/fuel_loader.json @@ -1,54 +1,96 @@ { - "namespace": "fuel_loader", - + "namespace": "fuel_loader", "interface@machines.dynamic_interface": { - "$size": ["100%", 168], + "$size": [ + "100%", + 168 + ], "$content": [ - { "title": { - "type": "label", - "color": "$title_text_color", - "text": "Fuel Loader", - "anchor_from": "top_middle", - "offset": [ 0, 10 ] - }}, - { "input@machines.item_slot": { - "$index": 0 , - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [6, 6] - }}, - { "battery@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [50, 49] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 112, 60 ] - }}, - { "fuel_tank@machines.fluid_tank": { - "$liquid": "fuel", - "$index": 3, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 6, 27 ] - }}, - { "status@machines.item_text": { - "$index": 4, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 28, 17 ] - }}, - { "start_button@machines.machine_button": { - "$index": 5, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 90, 36 ] - }} + { + "title": { + "type": "label", + "text": "Fuel Loader", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 5 + ] + } + }, + { + "input@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + 6 + ] + } + }, + { + "battery@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 50, + 49 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 112, + 60 + ] + } + }, + { + "fuel_tank@machines.fluid_tank": { + "$liquid": "fuel", + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + 27 + ] + } + }, + { + "status@machines.item_text": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 28, + 17 + ] + } + }, + { + "start_button@machines.machine_button": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 90, + 36 + ], + "$button_size": [ + 75, + 18 + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/gas_liquefier.json b/RP/ui/machines/gas_liquefier.json index 5553a993..1171e8ed 100644 --- a/RP/ui/machines/gas_liquefier.json +++ b/RP/ui/machines/gas_liquefier.json @@ -1,68 +1,119 @@ { - "namespace": "gas_liquefier", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 168], - "$content": [ - { "title": { - "type": "label", - "text": "Gas Liquefier", - "color": "$title_text_color", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 40, 5 ] - }}, - { "gas_input@machines.item_slot": { - "$index": 0, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 6, 6 ] - }}, - { "battery_slot@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 33, 49 ] - }}, - { "liquid_output@machines.item_slot": { - "$index": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 131, 6 ] - }}, - { "gas_tank@machines.any_fluid_tank": { - "$index": 3, - "$texture_index": 4, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 6, 27 ] - }}, - { "liquid_tank@machines.any_fluid_tank": { - "$index": 5, - "$texture_index": 6, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 131, 27 ] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 7, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 41, 16 ] - }}, - { "status@machines.item_text": { - "$index": 8, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 60, 50 ] - }}, - { "start_button@machines.machine_button": { - "$index": 9, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 39, 28 ] - }} - ] - } -} \ No newline at end of file + "namespace": "gas_liquefier", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 168 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Gas Liquefier", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 40, + 5 + ] + } + }, + { + "gas_input@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + 6 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 33, + 49 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "liquid_output@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 131, + 6 + ] + } + }, + { + "gas_tank@machines.any_fluid_tank": { + "$index": 3, + "$texture_index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + 27 + ] + } + }, + { + "liquid_tank@machines.any_fluid_tank": { + "$index": 5, + "$texture_index": 6, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 131, + 27 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 7, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 41, + 16 + ] + } + }, + { + "status@machines.item_text": { + "$index": 8, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 60, + 50 + ] + } + }, + { + "start_button@machines.machine_button": { + "$index": 9, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 39, + 28 + ], + "$button_size": [ + 75, + 18 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/geothermal_generator.json b/RP/ui/machines/geothermal_generator.json new file mode 100644 index 00000000..784917ec --- /dev/null +++ b/RP/ui/machines/geothermal_generator.json @@ -0,0 +1,105 @@ +{ + "namespace": "geothermal_generator", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 201 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Geothermal Generator", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 152, + 83 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 97, + 25 + ] + } + }, + { + "generating_label@machines.item_text": { + "$index": 2, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 46 + ], + "$text_font_scale": 0.8 + } + }, + { + "status_label@machines.item_text": { + "$index": 3, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 57 + ], + "$text_font_scale": 0.8 + } + }, + { + "enable_button@machines.machine_button": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 52, + 81 + ], + "$button_size": [ + 72, + 20 + ] + } + }, + { + "lava_tank@machines.fluid_tank": { + "$liquid": "lava", + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 33, + 21 + ], + "$tank_width": 18, + "$tank_size": [ + "18px", + "18px" + ], + "$tank_back_tex": "textures/ui/cosmos/machines/tank_back_18", + "$tank_front_tex": "textures/ui/cosmos/machines/tank_front_18" + } + } + ] + } +} diff --git a/RP/ui/machines/launch_controller.json b/RP/ui/machines/launch_controller.json new file mode 100644 index 00000000..389dd5bb --- /dev/null +++ b/RP/ui/machines/launch_controller.json @@ -0,0 +1,167 @@ +{ + "namespace": "launch_controller", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 209 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Launch Controller", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 152, + 105 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 99, + 114 + ] + } + }, + { + "enable_button@machines.machine_button": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 122, + 16 + ], + "$button_size": [ + 48, + 20 + ], + "$button_font_scale": 0.8 + } + }, + { + "frequency_button@machines.machine_textbox": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 66, + 16 + ], + "$button_size": [ + 48, + 20 + ], + "$button_font_scale": 0.8 + } + }, + { + "dest_frequency_button@machines.machine_textbox": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 45, + 38 + ], + "$button_size": [ + 48, + 20 + ], + "$button_font_scale": 0.8 + } + }, + { + "hide_dest_button@machines.machine_button": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 95, + 38 + ], + "$button_size": [ + 39, + 20 + ], + "$button_font_scale": 0.65 + } + }, + { + "advanced_button@machines.machine_button": { + "$index": 6, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 48, + 62 + ], + "$button_size": [ + 80, + 20 + ], + "$button_font_scale": 0.8 + } + }, + { + "status_text@machines.item_text": { + "$index": 7, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 86 + ], + "$text_font_scale": 0.8 + } + }, + { + "frequency_": { + "type": "label", + "text": "Frequency:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 22 + ], + "font_scale_factor": 0.8 + } + }, + { + "dest_frequency_": { + "type": "label", + "text": "Dest Frequency:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 44 + ], + "font_scale_factor": 0.8 + } + } + ] + } +} diff --git a/RP/ui/machines/methane_synthesizer.json b/RP/ui/machines/methane_synthesizer.json index c18ec140..c3f58cca 100644 --- a/RP/ui/machines/methane_synthesizer.json +++ b/RP/ui/machines/methane_synthesizer.json @@ -1,92 +1,180 @@ { - "namespace": "methane_synthesizer", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 168], - "$show_close_button": false, - "$content": [ - { "close@common.close_button": { - "offset": [-36, 10] - }}, - { "title": { - "type": "label", - "text": "Methane Synthesizer", - "color": "$title_text_color", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 47, 5 ] - }}, - { "h2_input@machines.item_slot": { - "$index": 0, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 6, 6 ] - }}, - { "battery_slot@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 51, 52 ] - }}, - { "co2_input@machines.item_slot": { - "$index": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 27, 6 ] - }}, - { "methane_output@machines.item_slot": { - "$index": 3, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 152, 6 ] - }}, - { "coal_item@machines.item_slot": { - "$index": 4, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 27, 52 ] - }}, - - { "hydrogen_tank@machines.fluid_tank": { - "$liquid": "hydrogen_gas", - "$index": 5, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 6, 27 ] - }}, - { "carbon_dioxide_tank@machines.small_fluid_tank": { - "$liquid": "carbon_dioxide_gas", - "$index": 6, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 27, 27 ] - }}, - { "methane_tank@machines.fluid_tank": { - "$liquid": "methane_gas", - "$index": 7, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 152, 27 ] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 8, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 66, 16 ] - }}, - { "status@machines.item_text": { - "$index": 9, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 72, 50 ] - }}, - { "start_button@machines.machine_button": { - "$index": 10, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 62, 28 ] - }} - ] - } -} \ No newline at end of file + "namespace": "methane_synthesizer", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 168 + ], + "$show_close_button": false, + "$content": [ + { + "close@common.close_button": { + "offset": [ + -27, + 12 + ] + } + }, + { + "title": { + "type": "label", + "text": "Methane Synthesizer", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 47, + 5 + ] + } + }, + { + "h2_input@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 7 + ] + } + }, + { + "co2_input@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 28, + 7 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + 53 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "carbon_slot@machines.item_slot": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 28, + 53 + ] + } + }, + { + "methane_output@machines.item_slot": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 153, + 7 + ] + } + }, + { + "h2_tank@machines.fluid_tank": { + "$liquid": "hydrogen_gas", + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 28 + ] + } + }, + { + "co2_tank@machines.fluid_tank": { + "$liquid": "co2_gas", + "$index": 6, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 28, + 28 + ], + "$tank_width": 18, + "$tank_size": [ + "18px", + "22px" + ], + "$tank_back_tex": "textures/ui/cosmos/machines/tank_back_22", + "$tank_front_tex": "textures/ui/cosmos/machines/tank_front_22" + } + }, + { + "methane_tank@machines.fluid_tank": { + "$liquid": "methane", + "$index": 7, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 153, + 28 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 8, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 66, + 17 + ] + } + }, + { + "status@machines.item_text": { + "$index": 9, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 72, + 50 + ] + } + }, + { + "status_detail@machines.item_text": { + "$index": 10, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 75, + 60 + ] + } + }, + { + "start_button@machines.machine_button": { + "$index": 11, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 60, + 28 + ], + "$button_size": [ + 75, + 18 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/oxygen_collector.json b/RP/ui/machines/oxygen_collector.json index ee0943c7..46cd426d 100644 --- a/RP/ui/machines/oxygen_collector.json +++ b/RP/ui/machines/oxygen_collector.json @@ -1,66 +1,128 @@ { - "namespace": "oxygen_collector", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 180], - "$content": [ - { "title": { - "type": "label", - "text": "Oxygen Collector", - "color": "$title_text_color", - "offset": [10, 4], - "anchor_from": "top_left", - "anchor_to": "top_left" - }}, - { "line": { - "type": "image", - "texture": "textures/white", - "fill": true, - "color": [0.5, 0.5, 0.5], - "size": [1, 24], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [78, 18] - }}, - {"out":{ - "type": "label", - "text": "Out:", - "color": "$title_text_color", - "offset": [3.5, -64] - }}, - {"in":{ - "type": "label", - "text": "In:", - "color": "$title_text_color", - "offset": [6, -51] - }}, - { "battery_slot@machines.item_slot": { - "$index": 0, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "offset": [32, 23.2], - "anchor_from": "top_left", - "anchor_to": "top_left" - }}, - { "energy_bar@machines.energy_bar": { - "$index": 1, - "offset": [ 53, -51 ] - }}, - { "oxygen_bar@machines.oxygen_bar": { - "$index": 2, - "offset": [ 53, -64 ] - }}, - { "status@machines.item_text": { - "$index": 3, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 45 ] - }}, - { "collecting@machines.item_text": { - "$index": 4, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [0, 55] - }} + "namespace": "oxygen_collector", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 180 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Oxygen Collector", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 4 + ] + } + }, + { + "line": { + "type": "image", + "texture": "textures/white", + "fill": true, + "color": [ + 0.5, + 0.5, + 0.5 + ], + "size": [ + 1, + 24 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 78, + 18 + ] + } + }, + { + "out": { + "type": "label", + "text": "Out:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 3.5, + -64 + ] + } + }, + { + "in": { + "type": "label", + "text": "In:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + -51 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 32, + 23.2 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + -51 + ] + } + }, + { + "oxygen_bar@machines.oxygen_bar": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + -64 + ] + } + }, + { + "status@machines.item_text": { + "$index": 3, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 45 + ] + } + }, + { + "collecting@machines.item_text": { + "$index": 4, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 55 + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/oxygen_compressor.json b/RP/ui/machines/oxygen_compressor.json index 5afd3eae..f591f7ad 100644 --- a/RP/ui/machines/oxygen_compressor.json +++ b/RP/ui/machines/oxygen_compressor.json @@ -1,79 +1,153 @@ { - "namespace": "oxygen_compressor", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 180], - "$content": [ - { "title": { - "type": "label", - "text": "Oxygen Compressor", - "color": "$title_text_color", - "offset": [10, 4], - "anchor_from": "top_left", - "anchor_to": "top_left" - }}, - { "line": { - "type": "image", - "texture": "textures/white", - "fill": true, - "color": [0.5, 0.5, 0.5], - "size": [1, 24], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [78, 18] - }}, - {"in_2":{ - "type": "label", - "text": "In:", - "color": "$title_text_color", - "offset": [6, -64] - }}, - {"in":{ - "type": "label", - "text": "In:", - "color": "$title_text_color", - "offset": [6, -51] - }}, - { "canister_slot@machines.item_slot": { - "$index": 0, - "offset": [18.2, 23.2], - "anchor_from": "top_left", - "anchor_to": "top_left", - "$overlay_texture": "textures/ui/cosmos/slot_overlay/o2" - }}, - { "battery_slot@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "offset": [48, 23.2], - "anchor_from": "top_left", - "anchor_to": "top_left" - }}, - { "tank_slot@machines.item_slot": { - "$index": 2, - "offset": [ 53, -14] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 3, - "offset": [ 53, -51 ] - }}, - { "oxygen_bar@machines.oxygen_bar": { - "$index": 4, - "offset": [ 53, -64 ] - }}, - { "status@machines.item_text": { - "$index": 5, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 45 ] - }}, - { "oxygen_using": { - "type": "label", - "text": "Oxygen Use: 40/s", - "color": "$title_text_color", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [0, 55] - }} + "namespace": "oxygen_compressor", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 180 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Oxygen Compressor", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 4 + ] + } + }, + { + "line": { + "type": "image", + "texture": "textures/white", + "fill": true, + "color": [ + 0.5, + 0.5, + 0.5 + ], + "size": [ + 1, + 24 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 78, + 18 + ] + } + }, + { + "in_2": { + "type": "label", + "text": "In:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + -64 + ] + } + }, + { + "in": { + "type": "label", + "text": "In:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + -51 + ] + } + }, + { + "canister_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 18.2, + 23.2 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/o2" + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 48, + 23.2 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "tank_slot@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + -14 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + -51 + ] + } + }, + { + "oxygen_bar@machines.oxygen_bar": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + -64 + ] + } + }, + { + "status@machines.item_text": { + "$index": 5, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 45 + ] + } + }, + { + "oxygen_using": { + "type": "label", + "text": "Oxygen Use: 40/s", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 55 + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/oxygen_decompressor.json b/RP/ui/machines/oxygen_decompressor.json index e99e391f..be8d3e4d 100644 --- a/RP/ui/machines/oxygen_decompressor.json +++ b/RP/ui/machines/oxygen_decompressor.json @@ -1,72 +1,141 @@ { - "namespace": "oxygen_decompressor", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 180], - "$content": [ - { "title": { - "type": "label", - "text": "Oxygen Decompressor", - "color": "$title_text_color", - "offset": [10, 4], - "anchor_from": "top_left", - "anchor_to": "top_left" - }}, - { "line": { - "type": "image", - "texture": "textures/white", - "fill": true, - "color": [0.5, 0.5, 0.5], - "size": [1, 24], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [78, 18] - }}, - {"in":{ - "type": "label", - "text": "In:", - "color": "$title_text_color", - "offset": [6, -64] - }}, - {"out":{ - "type": "label", - "text": "Out:", - "color": "$title_text_color", - "offset": [3.5, -51] - }}, - { "battery_slot@machines.item_slot": { - "$index": 0, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "offset": [32, 23.2], - "anchor_from": "top_left", - "anchor_to": "top_left" - }}, - { "tank_slot@machines.item_slot": { - "$index": 1, - "offset": [ 53, -14] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 2, - "offset": [ 53, -51 ] - }}, - { "oxygen_bar@machines.oxygen_bar": { - "$index": 3, - "offset": [ 53, -64 ] - }}, - { "status@machines.item_text": { - "$index": 4, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 45 ] - }}, - { "oxygen_using": { - "type": "label", - "text": "Max Output: 2000/s", - "color": "$title_text_color", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [0, 55] - }} + "namespace": "oxygen_decompressor", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 180 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Oxygen Decompressor", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 4 + ] + } + }, + { + "line": { + "type": "image", + "texture": "textures/white", + "fill": true, + "color": [ + 0.5, + 0.5, + 0.5 + ], + "size": [ + 1, + 24 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 78, + 18 + ] + } + }, + { + "in": { + "type": "label", + "text": "In:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + -64 + ] + } + }, + { + "out": { + "type": "label", + "text": "Out:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 3.5, + -51 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 32, + 23.2 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "tank_slot@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + -14 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + -51 + ] + } + }, + { + "oxygen_bar@machines.oxygen_bar": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 53, + -64 + ] + } + }, + { + "status@machines.item_text": { + "$index": 4, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 45 + ] + } + }, + { + "oxygen_using": { + "type": "label", + "text": "Max Output: 2000/s", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 55 + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/oxygen_distributor.json b/RP/ui/machines/oxygen_distributor.json index 1f512a4f..d55e7e9a 100644 --- a/RP/ui/machines/oxygen_distributor.json +++ b/RP/ui/machines/oxygen_distributor.json @@ -1,97 +1,166 @@ { - "namespace": "oxygen_distributor", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 181], - "$content": [ - { "title": { - "type": "label", - "text": "Oxygen Distributor", - "color": "$title_text_color", - "offset": [10, 4], - "anchor_from": "top_left", - "anchor_to": "top_left" - }}, - { "line": { - "type": "image", - "texture": "textures/white", - "fill": true, - "color": [0.5, 0.5, 0.5], - "size": [1, 24], - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [78, 18] - }}, - {"in_2":{ - "type": "label", - "text": "In:", - "color": "$title_text_color", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [6, 19] - }}, - {"in":{ - "type": "label", - "text": "In:", - "color": "$title_text_color", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [6, 32] - }}, - { "oxygen_slot@machines.item_slot": { - "$index": 0, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/o2", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 16, 21 ] - }}, - { "battery_slot@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 46, 21 ] - }}, - { "oxygen_bar@machines.oxygen_bar": { - "$index": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 112, 19] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 3, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 112, 32] - }}, - { "status@machines.item_text": { - "$index": 4, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 45 ] - }}, - { "oxygen_using": { - "type": "label", - "text": "Oxygen Use: 160/s", - "color": "$title_text_color", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [0, 55] - }}, - { "bubble_button@machines.machine_toggle": { - "$index": 5, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 85, 82 ] - }}, - { "bubble_text":{ - "type": "label", - "text": "Bubble Visible", - "color": "$title_text_color", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [101, 85] - }} + "namespace": "oxygen_distributor", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 181 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Oxygen Distributor", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 4 + ] + } + }, + { + "line": { + "type": "image", + "texture": "textures/white", + "fill": true, + "color": [ + 0.5, + 0.5, + 0.5 + ], + "size": [ + 1, + 24 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 78, + 18 + ] + } + }, + { + "in_2": { + "type": "label", + "text": "In:", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 6, + 19 + ] + } + }, + { + "in": { + "type": "label", + "text": "In:", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 6, + 32 + ] + } + }, + { + "oxygen_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 16, + 21 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/o2" + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 46, + 21 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "oxygen_bar@machines.oxygen_bar": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 112, + 19 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 112, + 32 + ] + } + }, + { + "status@machines.item_text": { + "$index": 4, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 45 + ] + } + }, + { + "oxygen_using": { + "type": "label", + "text": "Oxygen Use: 160/s", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 55 + ] + } + }, + { + "bubble_button@machines.machine_toggle": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 85, + 82 + ] + } + }, + { + "bubble_text": { + "type": "label", + "text": "Bubble Visible", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 101, + 85 + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/oxygen_sealer.json b/RP/ui/machines/oxygen_sealer.json new file mode 100644 index 00000000..69414eb2 --- /dev/null +++ b/RP/ui/machines/oxygen_sealer.json @@ -0,0 +1,151 @@ +{ + "namespace": "oxygen_sealer", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 200 + ], + "$content": [ + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 33, + 27 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "oxygen_slot@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 27 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/o2" + } + }, + { + "thermal_slot@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 56, + 27 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/gear" + } + }, + { + "oxygen_bar@machines.oxygen_bar": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 113, + 24 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 113, + 37 + ] + } + }, + { + "disable_button@machines.machine_button": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 50, + 91 + ], + "$button_size": [ + 75, + 18 + ] + } + }, + { + "status_text@machines.item_text": { + "$index": 6, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 50 + ] + } + }, + { + "oxygen_usage_text@machines.item_text": { + "$index": 7, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 60 + ] + } + }, + { + "thermal_status_text@machines.item_text": { + "$index": 8, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 70 + ] + } + }, + { + "in_": { + "type": "label", + "text": "In:", + "color": [ + 0.25, + 0.25, + 0.25 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 80, + 26 + ] + } + }, + { + "in_": { + "type": "label", + "text": "In:", + "color": [ + 0.25, + 0.25, + 0.25 + ], + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 80, + 38 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/oxygen_storage.json b/RP/ui/machines/oxygen_storage.json index dc1e8377..f5e1c5f3 100644 --- a/RP/ui/machines/oxygen_storage.json +++ b/RP/ui/machines/oxygen_storage.json @@ -1,78 +1,120 @@ { - "namespace": "oxygen_storage", - - "interface@machines.dynamic_interface": { - "$content": [ - { "title": { - "type": "label", - "color": "$title_text_color", - "text": "Oxygen Storage Module", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 6 ] - }}, - { "canister_slot@machines.item_slot": { - "$index": 0, - "offset": [16, 24], - "anchor_from": "top_left", - "anchor_to": "top_left", - "$overlay_texture": "textures/ui/cosmos/slot_overlay/o2" - }}, - { "stored_oxygen@machines.item_text": { - "$index": 1, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 33 ] - }}, - { "capacity@oxygen_storage.capacity": { - "$index": 2, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 56 ] - }}, - { "max_output": { - "type": "label", - "color": "$title_text_color", - "text": "Max Output: 10000/s", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 64 ] - }} + "namespace": "oxygen_storage", + "interface@machines.dynamic_interface": { + "$content": [ + { + "title": { + "type": "label", + "text": "Oxygen Storage Module", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 6 + ] + } + }, + { + "canister_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 16, + 24 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/o2" + } + }, + { + "stored_oxygen@machines.item_text": { + "$index": 1, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 33 + ] + } + }, + { + "capacity@oxygen_storage.capacity": { + "$index": 2, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 56 + ] + } + }, + { + "max_output": { + "type": "label", + "text": "Max Output: 10000/s", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 64 + ] + } + } ] - }, - + }, "capacity": { - "type":"image", + "type": "image", "texture": "textures/ui/cosmos/machines/progress_bar", - "size": [ 75, 5 ], + "size": [ + 75, + 5 + ], "controls": [ - { "capacity@machines.specific_slot": { - "anchor_from": "top_left", - "anchor_to": "top_left", - "controls": [ - { "capacity": { - "type": "panel", - "collection_index": "$index", - "anchor_from": "top_left", - "anchor_to": "top_left", - "size": [1, 0], - "controls": [ - { "capacity": { - "type": "image", - "texture": "textures/ui/cosmos/machines/progress_bar_fill", - "color": [0.29, 0.63, 0.89], - "size": [1, 5], - "anchor_to": "top_left", + { + "capacity@machines.specific_slot": { + "anchor_from": "top_left", + "anchor_to": "top_left", + "controls": [ + { + "capacity": { + "type": "panel", + "collection_index": "$index", "anchor_from": "top_left", - "bindings": "$use_durability", - "$source": "#data", - "$target": "#size_binding_x", - "$visible_if": "(not (#data = 1000))" - }} - ] - }} - ] - }} + "anchor_to": "top_left", + "size": [ + 1, + 0 + ], + "controls": [ + { + "capacity": { + "type": "image", + "texture": "textures/ui/cosmos/machines/progress_bar_fill", + "color": [ + 0.29, + 0.63, + 0.89 + ], + "size": [ + 1, + 5 + ], + "anchor_to": "top_left", + "anchor_from": "top_left", + "bindings": "$use_durability", + "$source": "#data", + "$target": "#size_binding_x", + "$visible_if": "(not (#data = 1000))" + } + } + ] + } + } + ] + } + } ] } -} \ No newline at end of file +} diff --git a/RP/ui/machines/refinery.json b/RP/ui/machines/refinery.json index 4462a461..a8d1b51d 100644 --- a/RP/ui/machines/refinery.json +++ b/RP/ui/machines/refinery.json @@ -1,71 +1,128 @@ { "namespace": "refinery", - "interface@machines.dynamic_interface": { - "$size": ["100%", 168], + "$size": [ + "100%", + 168 + ], "$show_close_button": false, "$content": [ - { "close@common.close_button": { - "offset": [-22, 2] - }}, - { "title": { - "type": "label", - "text": "Refinery", - "color": "$title_text_color", - "anchor_from": "top_middle", - "offset": [ 0, 10 ] - }}, - { "input@machines.item_slot": { - "$index": 0 , - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [6, 6] - }}, - { "battery@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [37, 50] - }}, - { "output@machines.item_slot": { - "$index": 2, - "anchor_from": "top_right", - "anchor_to": "top_right", - "offset": [-6, 6] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 3, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 62, 16 ] - }}, - { "oil_tank@machines.fluid_tank": { - "$liquid": "oil", - "$index": 4, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 6, 27 ] - }}, - { "fuel_tank@machines.fluid_tank": { - "$liquid": "fuel", - "$index": 5, - "anchor_from": "top_right", - "anchor_to": "top_right", - "offset": [ -6, 27 ] - }}, - { "status@machines.item_text": { - "$index": 6, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 60, 50 ] - }}, - { "start_button@machines.machine_button": { - "$index": 7, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 49, 28 ] - }} + { + "close@common.close_button": { + "offset": [ + -22, + 2 + ] + } + }, + { + "title": { + "type": "label", + "text": "Refinery", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 10 + ] + } + }, + { + "input@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + 6 + ] + } + }, + { + "battery@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 37, + 50 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "output@machines.item_slot": { + "$index": 2, + "anchor_from": "top_right", + "anchor_to": "top_right", + "offset": [ + -6, + 6 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 62, + 16 + ] + } + }, + { + "oil_tank@machines.fluid_tank": { + "$liquid": "oil", + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + 27 + ] + } + }, + { + "fuel_tank@machines.fluid_tank": { + "$liquid": "fuel", + "$index": 5, + "anchor_from": "top_right", + "anchor_to": "top_right", + "offset": [ + -6, + 27 + ] + } + }, + { + "status@machines.item_text": { + "$index": 6, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 60, + 50 + ] + } + }, + { + "start_button@machines.machine_button": { + "$index": 7, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 49, + 28 + ], + "$button_size": [ + 75, + 18 + ] + } + } ] } } diff --git a/RP/ui/machines/short_range_telepad.json b/RP/ui/machines/short_range_telepad.json new file mode 100644 index 00000000..ca3ec327 --- /dev/null +++ b/RP/ui/machines/short_range_telepad.json @@ -0,0 +1,143 @@ +{ + "namespace": "short_range_telepad", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 209 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Short Range Telepad", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 10, + 5 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 152, + 105 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "enable_button@machines.machine_button": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 122, + 16 + ], + "$button_size": [ + 48, + 20 + ], + "$button_font_scale": 0.5 + } + }, + { + "address_button@machines.machine_textbox": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 66, + 16 + ], + "$button_size": [ + 48, + 20 + ], + "$button_font_scale": 0.5 + } + }, + { + "target_address_button@machines.machine_textbox": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 122, + 38 + ], + "$button_size": [ + 48, + 20 + ], + "$button_font_scale": 0.5 + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 99, + 114 + ] + } + }, + { + "address_": { + "type": "label", + "text": "Address:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 22 + ] + } + }, + { + "dest_address_": { + "type": "label", + "text": "Dest Address:", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 44 + ] + } + }, + { + "status_receiving@machines.item_text": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 66 + ] + } + }, + { + "status_sending@machines.item_text": { + "$index": 6, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 7, + 88 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/solar_array_controller.json b/RP/ui/machines/solar_array_controller.json new file mode 100644 index 00000000..36a33f76 --- /dev/null +++ b/RP/ui/machines/solar_array_controller.json @@ -0,0 +1,95 @@ +{ + "namespace": "solar_array_controller", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 209 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Solar Array Controller", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 7 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 152, + 91 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "generating@machines.item_text": { + "$index": 1, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 46 + ] + } + }, + { + "status@machines.item_text": { + "$index": 2, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 57 + ] + } + }, + { + "environment@machines.item_text": { + "$index": 3, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 68 + ] + } + }, + { + "connected_panels@machines.item_text": { + "$index": 4, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 79 + ] + } + }, + { + "enable_button@machines.machine_button": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 52, + 93 + ], + "$button_size": [ + 75, + 18 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/solar_panel.json b/RP/ui/machines/solar_panel.json index 0ba5ee88..22777986 100644 --- a/RP/ui/machines/solar_panel.json +++ b/RP/ui/machines/solar_panel.json @@ -1,66 +1,106 @@ { - "namespace": "solar_panel", - - "standart_interface@solar_panel.interface": { - "$title": "Basic Solar Panel" - }, - "advanced_interface@solar_panel.interface": { - "$title": "Advanced Solar Panel" - }, - "interface@machines.dynamic_interface": { - "$size": ["100%", 201], - "$content": [ - { "title": { - "type": "label", - "text": "$title", - "color": "$title_text_color", - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 5 ] - }}, - { "battery_slot@machines.item_slot": { - "$index": 0, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_right", - "anchor_to": "top_right", - "offset": [-7, 82] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 1, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 96, 24] - }}, - { "solar_icon@machines.solar_icon": { - "$index": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [47, 20] - }}, - { "generating@machines.item_text": { - "$index": 3, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 49 ] - }}, - { "status@machines.item_text": { - "$index": 4, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 59 ] - }}, - { "boost@machines.item_text": { - "$index": 5, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 69 ] - }}, - { "start_button@machines.machine_button": { - "$index": 6, - "anchor_from": "top_middle", - "anchor_to": "top_middle", - "offset": [ 0, 82 ] - }} - ] - } -} \ No newline at end of file + "namespace": "solar_panel", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 201 + ], + "$content": [ + { + "title": { + "type": "label", + "text": "Basic Solar Panel", + "color": "$title_text_color", + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 5 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 0, + "anchor_from": "top_right", + "anchor_to": "top_right", + "offset": [ + -7, + 82 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 96, + 24 + ] + } + }, + { + "solar_icon@machines.solar_icon": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 47, + 20 + ] + } + }, + { + "generating@machines.item_text": { + "$index": 3, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 49 + ] + } + }, + { + "status@machines.item_text": { + "$index": 4, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 59 + ] + } + }, + { + "boost@machines.item_text": { + "$index": 5, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 69 + ] + } + }, + { + "start_button@machines.machine_button": { + "$index": 6, + "anchor_from": "top_middle", + "anchor_to": "top_middle", + "offset": [ + 0, + 82 + ], + "$button_size": [ + 75, + 18 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/terraformer.json b/RP/ui/machines/terraformer.json new file mode 100644 index 00000000..118e9a52 --- /dev/null +++ b/RP/ui/machines/terraformer.json @@ -0,0 +1,246 @@ +{ + "namespace": "terraformer", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 237 + ], + "$show_close_button": false, + "$content": [ + { + "close@common.close_button": { + "offset": [ + 150, + 4 + ] + } + }, + { + "water_bucket@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 25, + 19 + ] + } + }, + { + "battery@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 25, + 39 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "bonemeal_0@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 25, + 63 + ] + } + }, + { + "bonemeal_1@machines.item_slot": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 43, + 63 + ] + } + }, + { + "bonemeal_2@machines.item_slot": { + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 61, + 63 + ] + } + }, + { + "bonemeal_3@machines.item_slot": { + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 79, + 63 + ] + } + }, + { + "sapling_0@machines.item_slot": { + "$index": 6, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 25, + 87 + ] + } + }, + { + "sapling_1@machines.item_slot": { + "$index": 7, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 43, + 87 + ] + } + }, + { + "sapling_2@machines.item_slot": { + "$index": 8, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 61, + 87 + ] + } + }, + { + "sapling_3@machines.item_slot": { + "$index": 9, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 79, + 87 + ] + } + }, + { + "seed_0@machines.item_slot": { + "$index": 10, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 25, + 111 + ] + } + }, + { + "seed_1@machines.item_slot": { + "$index": 11, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 43, + 111 + ] + } + }, + { + "seed_2@machines.item_slot": { + "$index": 12, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 61, + 111 + ] + } + }, + { + "seed_3@machines.item_slot": { + "$index": 13, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 79, + 111 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 14, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 45, + 48 + ] + } + }, + { + "water_tank@machines.fluid_tank": { + "$liquid": "water", + "$index": 15, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 56, + 18 + ], + "$tank_width": 41, + "$tank_size": [ + "41px", + "28px" + ], + "$tank_back_tex": "textures/ui/cosmos/machines/tank_back_41x28", + "$tank_front_tex": "textures/ui/cosmos/machines/tank_front_41x28" + } + }, + { + "toggle_trees@machines.machine_button": { + "$index": 16, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 98, + 85 + ], + "$button_size": [ + 72, + 20 + ] + } + }, + { + "toggle_grass@machines.machine_button": { + "$index": 17, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 98, + 109 + ], + "$button_size": [ + 72, + 20 + ] + } + }, + { + "toggle_bubble@machines.machine_toggle": { + "$index": 18, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 85, + 132 + ] + } + } + ] + } +} diff --git a/RP/ui/machines/water_electrolyzer.json b/RP/ui/machines/water_electrolyzer.json index 6ece6ed7..42e305e1 100644 --- a/RP/ui/machines/water_electrolyzer.json +++ b/RP/ui/machines/water_electrolyzer.json @@ -1,85 +1,151 @@ { - "namespace": "water_electrolyzer", - - "interface@machines.dynamic_interface": { - "$size": ["100%", 168], - "$show_close_button": false, - "$content": [ - { "close@common.close_button": { - "offset": [-44, 12] - }}, - { "title": { - "type": "label", - "text": "Water Electrolyzer", - "color": "$title_text_color", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 30, 5 ] - }}, - { "water_intake@machines.item_slot": { - "$index": 0, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 6, 6 ] - }}, - { "battery_slot@machines.item_slot": { - "$index": 1, - "$overlay_texture": "textures/ui/cosmos/slot_overlay/power", - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 30, 49 ] - }}, - { "o2_output@machines.item_slot": { - "$index": 2, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 131, 6 ] - }}, - { "h2_output@machines.item_slot": { - "$index": 3, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 152, 6 ] - }}, - { "water_tank@machines.fluid_tank": { - "$liquid": "water", - "$index": 4, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 6, 27 ] - }}, - { "oxygen_tank@machines.fluid_tank": { - "$liquid": "oxygen_gas", - "$index": 5, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 131, 27 ] - }}, - { "hydrogen_tank@machines.fluid_tank": { - "$liquid": "hydrogen_gas", - "$index": 6, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 152, 27 ] - }}, - { "energy_bar@machines.energy_bar": { - "$index": 7, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 41, 16 ] - }}, - { "status@machines.item_text": { - "$index": 8, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 56, 50 ] - }}, - { "start_button@machines.machine_button": { - "$index": 9, - "anchor_from": "top_left", - "anchor_to": "top_left", - "offset": [ 39, 28 ] - }} - ] - } -} \ No newline at end of file + "namespace": "water_electrolyzer", + "interface@machines.dynamic_interface": { + "$size": [ + "100%", + 168 + ], + "$show_close_button": false, + "$content": [ + { + "close@common.close_button": { + "offset": [ + -44, + 12 + ] + } + }, + { + "title": { + "type": "label", + "text": "Water Electrolyzer", + "color": "$title_text_color", + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 30, + 5 + ] + } + }, + { + "water_intake@machines.item_slot": { + "$index": 0, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + 6 + ] + } + }, + { + "battery_slot@machines.item_slot": { + "$index": 1, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 30, + 49 + ], + "$overlay_texture": "textures/ui/cosmos/slot_overlay/power" + } + }, + { + "o2_output@machines.item_slot": { + "$index": 2, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 131, + 6 + ] + } + }, + { + "h2_output@machines.item_slot": { + "$index": 3, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 152, + 6 + ] + } + }, + { + "water_tank@machines.fluid_tank": { + "$liquid": "water", + "$index": 4, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 6, + 27 + ] + } + }, + { + "oxygen_tank@machines.fluid_tank": { + "$liquid": "oxygen_gas", + "$index": 5, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 131, + 27 + ] + } + }, + { + "hydrogen_tank@machines.fluid_tank": { + "$liquid": "hydrogen_gas", + "$index": 6, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 152, + 27 + ] + } + }, + { + "energy_bar@machines.energy_bar": { + "$index": 7, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 41, + 16 + ] + } + }, + { + "status@machines.item_text": { + "$index": 8, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 56, + 50 + ] + } + }, + { + "start_button@machines.machine_button": { + "$index": 9, + "anchor_from": "top_left", + "anchor_to": "top_left", + "offset": [ + 39, + 28 + ], + "$button_size": [ + 75, + 18 + ] + } + } + ] + } +} diff --git a/RP/ui/server_form.json b/RP/ui/server_form.json index 6357813f..93b3c84e 100644 --- a/RP/ui/server_form.json +++ b/RP/ui/server_form.json @@ -41,7 +41,7 @@ } }, { - "celestial_panel@selector.selector_screen": { + "celestial_panel@celestial.selector_screen": { "layer": 2, "bindings": [ { "binding_name": "#form_title" }, diff --git a/crop_deconstructor.ts b/crop_deconstructor.ts new file mode 100644 index 00000000..10ddc1e3 --- /dev/null +++ b/crop_deconstructor.ts @@ -0,0 +1,33 @@ +import * as fs from "fs"; +import { decodePng, encodePng, RawImage } from "./png_util"; + +function crop(img: RawImage, x: number, y: number, w: number, h: number): { img: RawImage, rows: Buffer[] } { + const croppedRows: Buffer[] = []; + for (let r = 0; r < h; r++) { + const row = img.pixels[y + r]; + const start = x * img.bpp; + const end = start + w * img.bpp; + croppedRows.push(row.subarray(start, end)); + } + const newImg: RawImage = { ...img, w, h, pixels: croppedRows }; + return { img: newImg, rows: croppedRows }; +} + +const srcImg = `java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/deconstructor.png`; +const outDir = `RP/textures/ui/cosmos/machines`; + +const decoded = decodePng(srcImg); + +// deconstructor_bar.png: x=53, y=36, w=54, h=17 +const bar = crop(decoded, 53, 36, 54, 17); +fs.writeFileSync(`${outDir}/deconstructor_bar.png`, encodePng(bar.img, bar.rows)); + +// deconstructor_bar_fill.png: x=176, y=13, w=54, h=17 +const fill = crop(decoded, 176, 13, 54, 17); +fs.writeFileSync(`${outDir}/deconstructor_bar_fill.png`, encodePng(fill.img, fill.rows)); + +// deconstructor_on.png: x=176, y=0, w=15, h=13 +const onIcon = crop(decoded, 176, 0, 15, 13); +fs.writeFileSync(`${outDir}/deconstructor_on.png`, encodePng(onIcon.img, onIcon.rows)); + +console.log("Deconstructor textures cropped using native TS power!"); diff --git a/deploy.py b/deploy.py new file mode 100644 index 00000000..4f28cc34 --- /dev/null +++ b/deploy.py @@ -0,0 +1,96 @@ +import os +import shutil +import sys + +# SYSTEM UPDATE SCRIPT EHEHEHHEE + +# Get the absolute path of the directory where the script is located +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) + +# Source Project Paths +PROJECT_BP_PATH = os.path.join(SCRIPT_DIR, 'BP') +PROJECT_RP_PATH = os.path.join(SCRIPT_DIR, 'RP') + +# Minecraft Game Data Path (com.mojang) +# This uses the %APPDATA% environment variable to be more robust (2026 path) +APPDATA = os.getenv('APPDATA') +COM_MOJANG_PATH = os.path.join(APPDATA, 'Minecraft Bedrock', 'Users', 'Shared', 'games', 'com.mojang') + +# Target Deployment Paths +TARGET_BP_DIR = os.path.join(COM_MOJANG_PATH, 'development_behavior_packs') +TARGET_RP_DIR = os.path.join(COM_MOJANG_PATH, 'development_resource_packs') + +# The final names for the deployed folders +PROJECT_NAME = os.path.basename(SCRIPT_DIR) +DEPLOY_BP_NAME = f'{PROJECT_NAME}-BP' +DEPLOY_RP_NAME = f'{PROJECT_NAME}-RP' + +# --- DEPLOYMENT LOGIC --- + +def deploy(): + """Deletes old packs and copies new ones into the com.mojang folder.""" + print("--- Starting Cosmos-Adventure Deployment Script ---") + + # 1. Validate that the com.mojang folder exists + if not os.path.isdir(COM_MOJANG_PATH): + print(f"\nERROR: Minecraft directory not found at:\n{COM_MOJANG_PATH}") + print("Please ensure Minecraft Bedrock Edition is installed and has been run at least once.") + sys.exit(1) # Exit with an error code + + print(f"Found Minecraft folder: {COM_MOJANG_PATH}") + + # 2. Ensure development pack folders exist + os.makedirs(TARGET_BP_DIR, exist_ok=True) + os.makedirs(TARGET_RP_DIR, exist_ok=True) + + # 3. Define full paths for the deployed packs + target_bp_path = os.path.join(TARGET_BP_DIR, DEPLOY_BP_NAME) + target_rp_path = os.path.join(TARGET_RP_DIR, DEPLOY_RP_NAME) + + # 4. Delete existing Behavior Pack, if it exists + try: + if os.path.isdir(target_bp_path): + print(f"Deleting old Behavior Pack at: {target_bp_path}") + shutil.rmtree(target_bp_path) + except OSError as e: + print(f"ERROR deleting folder {target_bp_path}: {e}") + sys.exit(1) + + # 5. Delete existing Resource Pack, if it exists + try: + if os.path.isdir(target_rp_path): + print(f"Deleting old Resource Pack at: {target_rp_path}") + shutil.rmtree(target_rp_path) + except OSError as e: + print(f"ERROR deleting folder {target_rp_path}: {e}") + sys.exit(1) + + # 6. Copy new Behavior Pack + try: + print(f"Copying new Behavior Pack from: {PROJECT_BP_PATH}") + shutil.copytree(PROJECT_BP_PATH, target_bp_path) + print("-> Behavior Pack deployed successfully.") + except FileNotFoundError: + print(f"ERROR: Source Behavior Pack not found at {PROJECT_BP_PATH}") + sys.exit(1) + except Exception as e: + print(f"ERROR copying Behavior Pack: {e}") + sys.exit(1) + + # 7. Copy new Resource Pack + try: + print(f"Copying new Resource Pack from: {PROJECT_RP_PATH}") + shutil.copytree(PROJECT_RP_PATH, target_rp_path) + print("-> Resource Pack deployed successfully.") + except FileNotFoundError: + print(f"ERROR: Source Resource Pack not found at {PROJECT_RP_PATH}") + sys.exit(1) + except Exception as e: + print(f"ERROR copying Resource Pack: {e}") + sys.exit(1) + + print("\n--- Deployment Complete! ---") + print("You can now launch Minecraft.") + +if __name__ == "__main__": + deploy() \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/.editorconfig b/java_mod/Galacticraft-Legacy-master-1.12/.editorconfig new file mode 100644 index 00000000..cdeefa11 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.java] +charset = utf-8 +indent_style = tab +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/.gitattributes b/java_mod/Galacticraft-Legacy-master-1.12/.gitattributes new file mode 100644 index 00000000..15d71b4c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/.gitattributes @@ -0,0 +1,75 @@ +* text=auto + +*.bat text eol=crlf +#*.bat text eol=lf +*.gradle text diff=java +mcmod.info text +*.java text +*.json text +*.lang text +*.mcmeta text +*.md text +*.properties text +gradlew text eol=lf +*.sh text eol=lf +*.txt text +*.xml text +*.yml text +*.yaml text +*.toml text + +# Documents +*.pdf binary + +# Graphics +*.eps binary +*.gif binary +*.ico binary +*.jpg binary +*.jpeg binary +*.png binary +*.psd binary +# SVG treated as an asset (binary) by default. If you want to treat it as text, +# comment-out the following line and uncomment the line after. +*.svg binary +#*.svg text +*.tif binary +*.tiff binary +*.webp binary +*.xcf binary + +# Other +*.exe binary +*.jar binary + +############################### +# Git Large File System (LFS) # +############################### + +# Archives +#*.7z filter=lfs diff=lfs merge=lfs -text +#*.br filter=lfs diff=lfs merge=lfs -text +#*.bz2 filter=lfs diff=lfs merge=lfs -text +#*.gz filter=lfs diff=lfs merge=lfs -text +#*.tar filter=lfs diff=lfs merge=lfs -text +#*.zip filter=lfs diff=lfs merge=lfs -text + +# Documents +#*.pdf filter=lfs diff=lfs merge=lfs -text + +# Graphics +#*.eps filter=lfs diff=lfs merge=lfs -text +#*.gif filter=lfs diff=lfs merge=lfs -text +#*.ico filter=lfs diff=lfs merge=lfs -text +#*.jpg filter=lfs diff=lfs merge=lfs -text +#*.jpeg filter=lfs diff=lfs merge=lfs -text +#*.png filter=lfs diff=lfs merge=lfs -text +#*.psd filter=lfs diff=lfs merge=lfs -text +#*.tif filter=lfs diff=lfs merge=lfs -text +#*.tiff filter=lfs diff=lfs merge=lfs -text +#*.webp filter=lfs diff=lfs merge=lfs -text +#*.xcf filter=lfs diff=lfs merge=lfs -text + +# Other +#*.exe filter=lfs diff=lfs merge=lfs -text +#*.jar filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/bug_report.yml b/java_mod/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..a5c4c026 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,117 @@ +name: Bug Report +description: File a bug report +title: "[Bug]: " +labels: + - '[Attribute] Bug Report' + - '[Status] Triage' +assignees: + - ROMVoid95 +body: + - type: markdown + attributes: + value: >- + NOTE: No support for compiling the project will be provided. + + For help with Galacticraft 5, please use [TeamGalacticraft/Galacticraft](https://github.com/TeamGalacticraft/Galacticraft). + + For general Galacticraft help and support visit the [Galacticraft Central Discord](http://discord.galacticraftcentral.com/) + - type: dropdown + id: forge-version + attributes: + label: Forge Version + options: + - 14.23.5.2860 + - 14.23.5.2859 + - 14.23.5.2858 + - 14.23.5.2857 + - 14.23.5.2856 + - 14.23.5.2855 + - 14.23.5.2854 + - 14.23.5.2852 + - 14.23.5.2851 + - 14.23.5.2847 + - 14.23.5.2846 + - 14.23.5.2845 + - 14.23.5.2844 + - 14.23.5.2843 + - 14.23.5.2842 + - 14.23.5.2841 + - 14.23.5.2840 + - 14.23.5.2839 + - 14.23.5.2838 + - 14.23.5.2837 + - 14.23.5.2836 + - 14.23.5.2835 + - 14.23.5.2834 + - 14.23.5.2833 + - 14.23.5.2832 + - 14.23.5.2831 + - 14.23.5.2830 + - 14.23.5.2829 + - 14.23.5.2828 + - 14.23.5.2827 + - 14.23.5.2826 + - 14.23.5.2825 + - 14.23.5.2824 + - 14.23.5.2823 + - 14.23.5.2822 + - 14.23.5.2821 + - 14.23.5.2820 + - 14.23.5.2819 + - 14.23.5.2818 + - 14.23.5.2817 + - 14.23.5.2816 + - 14.23.5.2815 + - 14.23.5.2814 + - 14.23.5.2813 + - 14.23.5.2812 + - 14.23.5.2811 + - 14.23.5.2810 + - 14.23.5.2809 + - 14.23.5.2808 + - 14.23.5.2807 + - 14.23.5.2806 + - 14.23.5.2805 + - 14.23.5.2804 + - 14.23.5.2803 + - 14.23.5.2802 + - 14.23.5.2801 + - 14.23.5.2800 + validations: + required: true + - type: input + id: version + attributes: + label: Galacticraft Version + placeholder: "4.0.2.282" + validations: + required: true + - type: textarea + id: logs + attributes: + label: Log or Crash Report + description: >- + If you have any logs (`latest.log`, `crash-report-.txt`, etc...) + Please upload the entire content in the log(s) to any paste site + *Examples:* + - [Github Gist](https://gist.github.com/) + - [Hastebin](https://hastebin.com/) + - [paste.gg](https://paste.gg/) + - [] + Please upload your log (latest.log and/or crash report) to [Github + Gist](https://gist.github.com/) then paste the gist url here, you + can paste as many links as needed + placeholder: 'https://gist.github.com/ROMVoid95/9392b3f0f7b44f9732087007aaa95e32' + - type: textarea + id: repro + attributes: + label: Reproduction steps + description: How do you trigger this bug? Please walk us through it step by step. + value: | + 1. Do this + 2. Do that + 3. Crash/Bug + ... + validations: + required: true + diff --git a/java_mod/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/config.yml b/java_mod/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..3ba13e0c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/java_mod/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/feature_request.yml b/java_mod/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 00000000..e29890f1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,46 @@ +name: Feature Request +description: Suggesting a new feature for the mod. +title: "[Feature]: " +labels: + - '[Attribute] Feature Request' +body: + - type: markdown + attributes: + value: >- + Thank you for taking intrest in suggesting new features! + - type: dropdown + id: has_searched + attributes: + label: Searched For Existing Request? + description: >- + Please verify that you have already searched for this Feature in exisiting Feature Requests + options: + - "No" + - "Yes I Have" + validations: + required: true + - type: textarea + id: description + attributes: + label: Feature Description + description: >- + Please explain and describe the Feature you're suggesting. The more + information you provide the better! + value: | + ... + validations: + required: true + - type: textarea + id: media + attributes: + label: Screenshots and Videos + description: If applicable, add screenshots or videos to help explain the Feature you're suggesting. + validations: + required: false + - type: textarea + id: extra_info + attributes: + label: Additional Context + description: Add any extra context or information about the Feature you're suggesting here. + validations: + required: false diff --git a/java_mod/Galacticraft-Legacy-master-1.12/.github/workflows/ci.yml b/java_mod/Galacticraft-Legacy-master-1.12/.github/workflows/ci.yml new file mode 100644 index 00000000..3bc73791 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/.github/workflows/ci.yml @@ -0,0 +1,78 @@ +name: 'CI' +on: + push: + branches: [ "master-1.12" ] +jobs: + build: + env: + VERSION_SUFFIX: -SNAPSHOT + name: Build + runs-on: ubuntu-latest + if: ${{!startsWith(github.event.head_commit.message, 'ci')}} + steps: + - if: startsWith(github.ref, 'refs/tags/') + id: set_suffix_if_tagged + run: | + echo "VERSION_SUFFIX=" >> $GITHUB_ENV + + - uses: actions/checkout@v3 + + - name: Cache + uses: actions/cache@v3.2.3 + with: + path: | + ~/.m2 + ~/.gradle + key: ${{ runner.os }}-gradle-${{ hashFiles('build.gradle') }} + + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + + - uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: 17 + + - name: Decode Keystore + id: decode + uses: timheuer/base64-to-file@v1.2 + with: + fileName: 'keyring.gpg' + encodedString: ${{ secrets.SIGNING_SECRET_KEY_RING_FILE }} + + - name: Expose + run: cp ${{ steps.decode.outputs.filePath }} . + + - uses: gradle/gradle-build-action@v2 + if: ${{ !startsWith(github.ref, 'refs/tags/') }} + with: + arguments: build + + - uses: gradle/gradle-build-action@v2 + if: startsWith(github.ref, 'refs/tags/') + with: + arguments: build createChangelog + + - name: Create Release + id: release + uses: softprops/action-gh-release@v0.1.15 + if: startsWith(github.ref, 'refs/tags/') + with: + body_path: ${{ github.workspace }}/changelog/*.md + + - name: Publish Release + uses: gradle/gradle-build-action@v2 + if: steps.release.outcome == 'success' + env: + CURSE_TOKEN: ${{ secrets.CURSE_TOKEN }} + MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} + with: + arguments: pubishToAll + + - name: 'Deploy to Nexus' + uses: gradle/gradle-build-action@v2 + env: + NEXUS_USER: ${{ secrets.NEXUS_USER }} + NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} + with: + arguments: publishToGalacticMaven -Pversion_suffix=${{ env.VERSION_SUFFIX }} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/.github/workflows/stale.yml b/java_mod/Galacticraft-Legacy-master-1.12/.github/workflows/stale.yml new file mode 100644 index 00000000..3eab7093 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/.github/workflows/stale.yml @@ -0,0 +1,23 @@ +name: Mark stale issues and pull requests + +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - uses: actions/stale@v7 + with: + repo-token: ${{ github.token }} + stale-issue-message: 'Issue has been marked stale because it has been open 7 days with no activity. Issue will be closed in 24 hours if not updated' + close-issue-message: 'Issue closed due to no updates or activity after the previous Stale notification' + days-before-stale: 7 + days-before-close: 1 + any-of-labels: 'Cannot Reproduce,More Information Needed' diff --git a/java_mod/Galacticraft-Legacy-master-1.12/.gitignore b/java_mod/Galacticraft-Legacy-master-1.12/.gitignore new file mode 100644 index 00000000..75c7c18e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/.gitignore @@ -0,0 +1,79 @@ +# Build # +######### +MANIFEST.MF +dependency-reduced-pom.xml + +# Compiled # +############ +bin +build +dist +lib +out +run +/target +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Databases # +############# +*.db +*.sql +*.sqlite + +# Packages # +############ +*.7z +*.dmg +*.gz +*.iso +*.rar +*.tar +*.zip + +# Repository # +############## +.git + +# Logging # +########### +/logs +*.log + +# Misc # +######## +*.bak + +# System # +########## +.DS_Store +ehthumbs.db +Thumbs.db + +# Project # +########### +.classpath +.externalToolBuilders +.idea +.project +.settings +.checkstyle +.factorypath +run +eclipse +nbproject +atlassian-ide-plugin.xml +build.xml +nb-configuration.xml +*.iml +*.ipr +*.iws +/.apt_generated/ +*.launch +/.nb-gradle/ +/.gradle/ +!etc/replace/IntCache.class diff --git a/java_mod/Galacticraft-Legacy-master-1.12/.pomrc b/java_mod/Galacticraft-Legacy-master-1.12/.pomrc new file mode 100644 index 00000000..dd9b80d7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/.pomrc @@ -0,0 +1,39 @@ +{ + "artifactId": "galacticraft-legacy", + "name": "Galacticraft-Legacy", + "url": "https://github.com/TeamGalacticraft/Galacticraft-Legacy", + "description": "An advanced space exploration mod for Minecraft", + "inceptionYear": "2021", + "organization": { + "name": "TeamGalacticraft", + "url": "https://github.com/TeamGalacticraft" + }, + "licenses": [ + { + "name": "MIT", + "url": "https://github.com/TeamGalacticraft/Galacticraft-Legacy/blob/master/LICENSE", + "distribution": "repo" + } + ], + "issueManagement": { + "system": "github", + "url": "https://github.com/TeamGalacticraft/Galacticraft-Legacy/issues" + }, + "scm": { + "connection": "scm:git:git://github.com/TeamGalacticraft/Galacticraft-Legacy.git", + "developerConnection": "scm:git:git@github.com:TeamGalacticraft/Galacticraft-Legacy.git", + "url": "https://github.com/TeamGalacticraft/Galacticraft-Legacy" + }, + "developers": [ + { + "id": "rom", + "name": "ROMVoid95", + "email": "rom.void95@gmail.com", + "roles": [ + "developer" + ], + "timezone": "CST/CDT" + } + + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/LICENSE b/java_mod/Galacticraft-Legacy-master-1.12/LICENSE new file mode 100644 index 00000000..5424da9c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Team Galacticraft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/README.md b/java_mod/Galacticraft-Legacy-master-1.12/README.md new file mode 100644 index 00000000..f3ceb4db --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/README.md @@ -0,0 +1,62 @@ +

+ +

+ GitHub contributors + GitHub commits + Code size + GitHub repo size + Lines of Code +

+

+ curseforge + modrinth +

+

+ discord-plural + patreon-plural +

+ +Galacticraft-Legacy +============ + +The 1.12.2 version of Galacticraft that receives updates, forked from the original [Repository](https://github.com/micdoodle8/Galacticraft). If you're wondering why this repository shows to be behind in commits. The original only receives updates to its Capes list, this repository does not contain a capes list. + +------ + +## Mod Developers + +To import the mod into your IDE environment, It's best to use artifacts published to our [Maven Repository](https://maven.galacticraft.net/). +```gradle +repositories { + maven { + url "https://maven.galacticraft.net/repository/legacy/" + } +} + +dependencies { + compileOnly fg.deobf("dev.galacticraft:galacticraft-legacy:${version}") +} +``` +> *Note: a 'deobf' version is still distributed, But it is only advisable to use this classifier is your already using mappings: `stable_39-1.12`. To avoid any issues it is best to use the main artifact* + +## Addon Developers + +While you can still import Galacticraft into your IDE using the above method. A special-use Gradle Plugin has been developed that handles all the setup for you. + +Get the plugin on [Gradle Plugin Repository](https://plugins.gradle.org/plugin/net.galacticraft.addon) or check out the [galacticraft-addon-template](https://github.com/TeamGalacticraft/galacticraft-addon-template) repository + +## Developing Galacticraft-Legacy + +### Prerequisites +* Java 8 JDK +* An IDE with a compatible [Project Lombok plugin](https://projectlombok.org/download) + +>Should you encounter any weird errors concerning missing getter or setter methods, it's probably because your code has not been processed by Project Lombok's processor. + +### Clone + +`git clone https://github.com/TeamGalacticraft/Galacticraft-Legacy.git` + +### Import + +After all Prerequisites and cloning is finished, simply import the project into your IDE. diff --git a/java_mod/Galacticraft-Legacy-master-1.12/build.gradle b/java_mod/Galacticraft-Legacy-master-1.12/build.gradle new file mode 100644 index 00000000..c6416d91 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/build.gradle @@ -0,0 +1,136 @@ +plugins { + id 'java' + id 'eclipse' + id 'org.cadixdev.licenser' version '0.6.1' + id 'com.diffplug.spotless' version '6.13.0' + id 'net.minecraftforge.gradle' version '6.+' + id 'net.galacticraft.changelog' version '1.0.4' + id 'net.galacticraft.internal.legacy' version '1.0.5' + id 'nexus-publishing' version '2.1' +} + +group = "dev.galacticraft" +archivesBaseName = "Galacticraft" +version = "${mod_version}${version_suffix}" + +java.toolchain.languageVersion = JavaLanguageVersion.of(8) + +repositories { + mavenCentral() + maven { + name 'galacticraft' + url 'https://maven.galacticraft.net/repository/legacy-common/' + } +} + +dependencies { + minecraft "net.minecraftforge:forge:${MC_VERSION}-${forge_version}" + + compileRequired fg.deobf('mod.dependency:mekanism:9.8.3.390') + compileRequired fg.deobf('mod.dependency:industrialcraft-2:2.8.222-ex112') + compileRequired fg.deobf('mod.dependency:buildcraft-api:7.99.24.8') + compileOnly fg.deobf('mod.dependency:biomes-o-plenty:7.0.1.2445') + compileOnly fg.deobf('mod.dependency:appliedenergistics2:rv6-stable-7') + compileOnly fg.deobf('mod.dependency:redstoneflux:2.1.1.1') + compileOnly fg.deobf('mod.dependency:actuallyadditions:r152') + compileOnly fg.deobf('mod.dependency:playerapi:1.1') + compileOnly fg.deobf('mod.dependency:journeymap:5.7.1') + compileOnly fg.deobf('mod.dependency:jei:4.16.1.302:api') + runtimeOnly fg.deobf('mod.dependency:jei:4.16.1.302') + + // Project lombok + compileOnly 'org.projectlombok:lombok:1.18.24' + annotationProcessor 'org.projectlombok:lombok:1.18.24' + testCompileOnly 'org.projectlombok:lombok:1.18.24' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.24' +} + +spotless { + enforceCheck false + java { + target 'src/*/java/micdoodle8/mods/**/*.java' + endWithNewline() + trimTrailingWhitespace() + removeUnusedImports() + indentWithSpaces() + } +} + +license { + header = project.file('etc/HEADER') + properties { + company = 'Team Galacticraft' + year = Calendar.getInstance().get(Calendar.YEAR); + } + ignoreFailures = true + include '**/*.java' +} + +clean { + def filteredDelete = new HashSet<>() + for (def toDelete : getDelete()) { + for (def f : file(toDelete).listFiles()) { + if (f.getName() != "fg_cache") { + filteredDelete.add(f) + } + } + } + setDelete(filteredDelete) +} + +tokens { + replace('version', version) +} + +changelog { + fromTag('4.0.5') +} + +maven { + excludeDependencies('forge', 'jei') + artifacts(mavenJar, deobfJar, sourcesJar) +} + + +modpublishing { + + changelogPath(changelog.changelogFile) + + curseforge('564236') { + if (System.getenv().CI) + apiKey = 'none' + relations { + optional( + 'mekanism', + 'jei', + 'journeymap', + 'playerapi', + 'actually-additions', + 'redstone-flux', + 'applied-energistics-2', + 'biomes-o-plenty', + 'buildcraft', + 'industrial-craft' + ) + incompatible( + 'betterportals' , + 'vics-modern-warfare-mod' + ) + } + } + + modrinth('ZnmdXAk2') { + if (System.getenv().CI) + token('none') + dependencies { + // Mekanism + optional.version 'KIzASRO5' + // JourneyMap + optional.version 'vacvhRKp' + } + } +} + +tasks.withType(GenerateModuleMetadata).configureEach { + enabled = false +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/changelog/4.0.6.md b/java_mod/Galacticraft-Legacy-master-1.12/changelog/4.0.6.md new file mode 100644 index 00000000..bfa19114 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/changelog/4.0.6.md @@ -0,0 +1,28 @@ +Galacticraft-Legacy | 4.0.6 +=========================== + +Features +-------- +- Blocks in configs can handle * declaration ([d7a41a14](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/d7a41a14da5b2f4190de162210ecd531f7f33d07)) +- call onChunkPopulate in chunk decoration ([438a7dd6](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/438a7dd67af21bce62018a48824b8f73b8e4d782)) +- allow charcoal to coal-gen input ([d2c14321](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/d2c143216ccb1e4da8e2685105c4fc4a59c7f1fc)) + +Fixes +----- +- trigger adv. solar gen achievement correctly ([d13683f3](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/d13683f3cee2cd0f300a99211ab96388a7112ab2)) +- replace isBlank with isEmpty in BlockUtil ([66f385d5](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/66f385d5f6a72743c61aab8ab2c01cebb9e22035)) +- check `player.world.provider` sooner ([11f4714a](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/11f4714af589b46f791caa54810b06178914658e)) +- (lang) remove substring calls ([3fc7af24](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/3fc7af24471b66a1a8177a45f40880d13b91e09b)) +- prevent lang file name uppercase ([13a13b8e](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/13a13b8eef35f546db37fb7bd5fdda5a49229fc7)) +- output sides for Gas Liquefier ([#137](https://github.com/TeamGalacticraft/Galacticraft-Legacy/pull/137)) +- hotfix for ArrayIndexOutOfBounds on getSlotsForFace() ([246ee9ee](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/246ee9eea6cf9a17ec4e13169223c74635446c7f)) +- (compat) add IGasHandler to Electrolyzer ([f00896e9](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/f00896e983d2be28173eb3aff8b80a0b8f85c75d)) + +Misc +---- +- **(style)** + - removed 'par#' prefix from params ([fc796c0e](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/fc796c0ec3e5f6ded60921afa1f153a36034a5ec)) +- **(revert)** + - unintended changes committed ([5c07be22](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/5c07be22b7effecb64a1833f91f45e9a738b6f6f)) +- **(refactor)** + - (lang) update zh_cn.lang ([#147](https://github.com/TeamGalacticraft/Galacticraft-Legacy/pull/147)) diff --git a/java_mod/Galacticraft-Legacy-master-1.12/etc/HEADER b/java_mod/Galacticraft-Legacy-master-1.12/etc/HEADER new file mode 100644 index 00000000..089d9108 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/etc/HEADER @@ -0,0 +1,4 @@ +Copyright (c) ${year} ${company} + +Licensed under the MIT license. +See LICENSE file in the project root for details. diff --git a/java_mod/Galacticraft-Legacy-master-1.12/etc/OLD_LICENSE.txt b/java_mod/Galacticraft-Legacy-master-1.12/etc/OLD_LICENSE.txt new file mode 100644 index 00000000..ade1a8a0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/etc/OLD_LICENSE.txt @@ -0,0 +1,664 @@ +Copyright and Licensing +======================= + +1. "Galacticraft" and "the Galacticraft project" means the plugin for + +Forge-modified Minecraft (see section 10 below) which is distributed as a + +compiled binary through the home page + +http://www.micdoodle8.com/mods/galacticraft and whose source code is or + +has been published on Github in the micdoodle8/Galacticraft and + +micdoodle8/MicdoodleCore repositories. Galacticraft's "source code" means the + +material, including Java code, other programming code, image, textures, + +models, sound files and other binary files, published within the + +micdoodle8/Galacticraft and micdoodle8/MicdoodleCore repositories on Github, + +subject to section 18 below in relation to "dependencies", and any related + +material including the text, design and artwork on the Wiki which is + +published on www.micdoodle8.com or any other official Galacticraft website. + +2. Galacticraft is a copyright work, and the copyright belongs to the + +Galacticraft developers. The "Galacticraft developers" means the persons + +known by the Github usernames micdoodle8, radfast and fishtaco567 + +and any additional person whom the Galacticraft developers deem to become + +one of the Galacticraft developers in future. References herein to the + +Galacticraft developers shall be construed jointly and severally. + +3. The "overriding principle" is that Galacticraft is intended to be + +open-source software with its source code distributed freely on Github (or + +any similar technological means which allows for the distribution of source + +code via the internet to any interested person), available to all on a free + +for non-commercial use basis as detailed further below. + +4. Nothing in this Licence shall interfere with that overriding principle + +and no rights granted by this Licence shall interfere with the continuing ability of + +the Galacticraft developers to modify, supplement and publish Galacticraft's + +source code on to Github and to distribute, through Github or elsewhere, any + +compiled or binary code based thereon. + + +Contributions +------------- + +5. Contributions to Galacticraft in the form of code, code snippets, + +pull requests, translations, artwork, sounds, music, or other similar + +contributions are welcomed. Issue reports and comments, forum posts, + +editing of the Wiki, and other user contributions are also welcomed + +and are classed as "contributions" to the project for these purposes. Any + +person contributing in that form (a "Contributor"), by the act of + +contributing, (a) assigns the copyright in that contribution to the + +Galacticraft developers; (b) in any event, authorises the distribution of + +that contribution thereafter as a part of the Galacticraft project through + +Github or otherwise; (c) consents to Galacticraft's developers licensing + +that contribution as a part of the Galacticraft project as set out in + +section 20 and following below. + +6. No Contributor shall be entitled, by a claim to copyright relating to + +their contribution or any other code or material in Galacticraft, or by any + +other means, to interfere with the overriding principle. In particular, no + +Contributor shall be entitled, by reason of that contribution or otherwise, + +to attempt to prevent the continuing publication of Galacticraft's source code + +on Github or any distribution or licensing of Galacticraft. + +7. A Contributor does not become one of the Galacticraft developers by the + +act of contribution, unless the Galacticraft developers deem otherwise in + +their sole discretion (which would require a large scale, sustained and + +substantial contribution to the project). + +8. In the event of a Contributor making (whether deliberately or + +inadvertently) a contribution which wholly or partly comprises material in + +which a third party ("the original copyright holder") holds the copyright, + +the Contributor shall (a) not seek to enforce or assist in the enforcement + +of that copyright against Galacticraft nor by any other means prevent the + +continuing publication of Galacticraft on Github whether by means of DMCA + +notices or otherwise, which shall be a matter for the original copyright + +holder only; (b) the Contributor shall indemnify and hold harmless the + +Galacticraft developers against any loss or damage, consequential loss, or + +costs arising out of the contribution of the said material to Galacticraft. + + +Interaction with Mojang's EULA +------------------------------ + +9. Mojang AB ("Mojang") holds the copyright in the game known as Minecraft + +(herein, "vanilla" Minecraft). + +10. Galacticraft is popularly referred to as a Minecraft "Mod", but more + +accurately it is a plugin. A separate project known as Forge modifies the + +code of vanilla Minecraft. Galacticraft does not itself modify the code of + +Minecraft but it provides new original material (a "plugin") which is + +interoperable with Forge-modified Minecraft. On this basis Galacticraft is + +considered by the Galacticraft developers to be a plugin rather than a Mod, + +but whether that is correct or not shall not affect the validity of this + +document and the licence granted hereby, which shall apply in the same way in + +either case. + +11. The purpose of Galacticraft is to supplement the gameplay experience of + +a player playing modified Minecraft through the use of Galacticraft's + +original material which is contained in compiled binary versions of + +Galacticraft (including code, graphics, textures, icons, models, sounds and + +music). The player will need to be running Minecraft, together with the + +Forge modifications, in order to enjoy the gameplay experience contained in + +a compiled version of Galacticraft. + +12. Galacticraft contains references to Forge-modified Minecraft (including + +vanilla Minecraft code) for interoperability reasons only. Galacticraft - + +in either its source code or its compiled binaries - does not contain a + +vanilla or Forge-modified copy of Minecraft as such, and there is no intent, + +in or through Galacticraft, to "distribute" any material in which Mojang + +holds the copyright. + +13. Galacticraft's source code can be read by anyone and Minecraft is not + +required in order to read and enjoy the Galacticraft source code. + +Galacticraft's compiled binaries, however, can provide a gameplay experience + +only to a person who is running Minecraft. + +14. Accordingly, the rights of Mojang AB as copyright owner in respect of + +Minecraft do not and would not prevent the distribution of Galacticraft's + +source code. + +15. In any event, to the extent that it is relevant, the Galacticraft + +developers are permitted by Mojang's EULA for Minecraft to distribute + +Galacticraft. Specifically, that EULA provides (sic): + +"If you've bought the Game, you may play around with it and modify it. ... + +Basically, mods (or plugins, or tools) are cool (you can distribute + +those)...." + +and + +"Any tools you write for the Game from scratch belong to you. Modifications + +to the Game ("Mods") (including pre-run Mods and in-memory Mods) and plugins + +for the Game also belong to you and you can do whatever you want with them, + +as long as you don't sell them for money / try to make money from them." + +In quoting Mojang's EULA as aforesaid, no representation or admission is + +made that Mojang's authorisation is in fact required to distribute + +Galacticraft or its source code or as to the meaning of that EULA or + +expressions within it, which shall be a question of law to be resolved in + +any relevant jurisdiction where the question arises, but if and to the + +extent that such authorisation is required, it is authorised. + + +Libraries etc +------------- + +16. Galacticraft incorporates code snippets and libraries written by third + +parties. + +17. All such third party code is distributed within the Galacticraft + +project subject to whichever licence was originally applicable to it and + +subject also to the terms herein as set out below. Reference should be + +made to the original third party code for licensing information. + + +Dependencies +------------ + +18. The code of Galacticraft's dependencies (that is to say, anything in + +the /dependencies folder in the Galacticraft Github project, which includes + +other mod's APIs) is included on the Github for interoperability reasons + +only. This is for the convenience of developers wishing to make use of the + +Galacticraft source code in their own development environment without + +compilation errors. The dependencies are not distributed within + +Galacticraft's compiled binaries and are not part of the copyright work + +known as Galacticraft which is licensed under this licence. + +19. The code of all dependencies within the Galacticraft project is subject + +to whichever licence was originally applicable to that code. Reference + +should be made to the original code for licensing information. + + +Galacticraft: licence +--------------------- + +20. Galacticraft is free for non-commercial use. The compiled + +binaries in Galacticraft are made freely available to all players. + +The Galacticraft project source code can be accessed and used + +on an open-source basis by any person, except that (a) no person can + +sell it or any derived work for money or try to make money from it, + +(b) no person can interfere with the overriding principle. The + +detailed terms and provisions set out below shall apply in all cases. + +21. Where the Galacticraft project or its source code incorporates or + +includes material ("the Part") which is subject to a third party copyright + +or licence ("the original licence") then (a) to the maximum extent that + +the law allows in every relevant jurisdiction, the terms of the licence + +herein or any severable terms or provisions of this licence shall apply, + +in addition to or in place of the terms of the original licence, to the + +Part as incorporated in the Galacticraft project; and (b) where and to + +the extent that that is not possible (for example because a term of the + +original licence is not compatible with this licence and the law requires + +the original licence to prevail) then to that extent the terms of the + +original licence shall apply in relation to the Part only, and the + +remainder of the Galacticraft project shall be licensed on the terms + +herein both part by part and as an overall compilation. + +22. "On an open-source basis" means that Galacticraft's source code is + +published in accordance with the overriding principle. The Galacticraft + +developers will use best endeavours to continue to make Galacticraft's + +source code available in that way. This meets the Galacticraft developers' + +obligations under the GPL or LGPL (where applicable) to provide access to + +source code. The Galacticraft developers will not be liable in the event of + +the discontinued operation of Github or other force majeure preventing + +public access to the source code or any repository containing it. + +23. The restriction on persons selling Galacticraft for money or "trying to + +make money from it" does not prevent: (a) a person making money from an + +advertisement which that person provides to a player who downloads, free of + +charge, a modpack containing a compiled binary of Galacticraft together + +with other mods, subject to the additional conditions in section 37 below; + +(b) a server owner who charges a fee or receives donations from players + +playing on a server which offers a Galacticraft gameplay experience to players + +who have themselves installed Galacticraft in their clients, so long as the + +server does not disable player access to critical (in contrast to cosmetic) + +features, items or blocks in Galacticraft or make player access to parts or + +stages of Galacticraft conditional on payment ("pay to win"); and (c) a person + +from making a video recording of a Galacticraft gameplay experience and + +distributing that video on Youtube, Twitch or similar internet video distribution + +channels and making money in consequence of the video or related advertisements. + +24. No undertaking or warranty is given that Galacticraft is suitable for + +use on any computer system or in any modpack, that it is stable and + +crash-free and interoperable with other "mods", or that there will be no + +loss or corruption of data or internet connectivity through the use of + +Galacticraft. Galacticraft is provided "as is". It is the responsibility + +of every player, modpack maker and server owner to test and confirm + +Galacticraft's suitability for the intended use. In any event, the + +liability of the Galacticraft developers to any person using Galacticraft + +shall be limited to such monetary amount, if any (and otherwise zero), as + +that person has paid to the Galacticraft developers for the use of + +Galacticraft. These exclusions and limitations of liability shall apply to + +the maximum extent permitted by law in every relevant jurisdiction. + +25. Galacticraft may be updated from time to time, but the Galacticraft + +developers are not obliged to update Galacticraft and are not obliged to fix + +bugs, crashes or issues which may be identified now or in future, which + +shall be done at the sole discretion of the Galacticraft developers. + +26. The Galacticraft project may be discontinued at any time, at the sole + +discretion of the Galacticraft developers, in which case users of + +Galacticraft may continue to use such source code or compiled versions as + +they may have downloaded at that time on the terms applicable to them at + +that time, but no further access to Galacticraft or its source code will be + +provided by the Galacticraft developers. + +27. Galacticraft may either now or in future contain or display code, + +graphics or text which makes reference to, links to, communicates with or + +advertises either Galacticraft or its associated website(s) or other projects + +of the Galacticraft developers or any of them. In that event, as a condition + +of the continued use of Galacticraft, no user of Galacticraft (and in + +particular, no server owner or modpack maker) shall block, disable or + +prevent such reference, link, communication or advertising. + +28. (a) Any person may make free use of Galacticraft's API and may freely + +copy and distribute the API to the extent required for interoperability reasons. + +(b) Any person may study Galacticraft's source code and may copy it, modify it, + +reverse engineer it or otherwise use it for that person's own personal use + +or any non-commercial academic purpose (but this does not permit distribution + +and this does not permit inclusion or copying of any part of Galacticraft + +or any derivative works in any commercial work or for any commercial purpose). + +(c) Licence is granted to all persons to copy, use and modify + +non-substantial parts (as defined below) of the Galacticraft project (including its + +source code) for any non-commercial purpose and to incorporate such non-substantial + +parts as appropriate and reasonable in their own non-commercial projects, including + +other Minecraft mods or plugins, provided that no person other than the Galacticraft + +developers may present Galacticraft's source code as being their own work, and any + +derived work must contain appropriate author attribution. Any commercial use of a work + +derived from Galacticraft shall continue to be prohibited. + +(d) "Non-substantial parts" means any part other than the whole or a substantial + +element of Galacticraft: for example a single Java method would be a non-substantial part. + +A "substantial part" includes anything which when compiled into playable form (together with + +any other code from any origin required to render it playable) replicates or reproduces + +to any substantially similar extent the gameplay, graphics, sound or visual design of + +Galacticraft or any identifiable or material part or gameplay element of Galacticraft + +(including for example the player experience of visiting any individual planet, + +dimension or world which is represented in Galacticraft, the appearance of any 'mob' + +or entity in Galacticraft, and any game screen or GUI which is specific to Galacticraft). + +All textured models (for example rockets, landers, mobs and other entities) included + +in Galacticraft are individually deemed to be "substantial parts". + +(e) Distribution of the whole of Galacticraft, in unaltered compiled binary form, + +is permitted ONLY in modpacks as set out further in section 37 below. Apart from modpacks, + +distribution or copying of Galacticraft or any substantial part of it or any derived + +work is PROHIBITED without permission from the developers. In particular, distribution + +of out-dated, altered, modified, converted or partial copies of Galacticraft or its + +binaries is prohibited. Copies or ports to other versions of Minecraft or Forge either in + +Java or for non-Java gaming platforms including mobile or console versions are PROHIBITED + +without the written permission of the Galacticraft developers. + +(f) All permissions in this section 28 are subject to the proviso that no other person + +may present Galacticraft's source code or any derived work or any compiled version as + +being their own work or take any action which denies the Galacticraft developers' + +ownership of the copyright in Galacticraft and rights to licence it and continued + +ability to publish the source code in accordance with the overriding principle. + +(g) Incorporation of Galacticraft or parts of it (or any derived work) in any commercial + +project - including vanilla Minecraft itself or any installer, distribution, mod download + +website, downloadable content or other resource which is available to paying users, + +subscribers or members only, or is otherwise conditional on a purchase, or which is + +distributed only to viewers of an advertisement (for example through an Ad.fly link + +or similar) - would violate section 20(a) above and is PROHIBITED. + +28A. The copying or distribution of Galacticraft in mod "installers", + +for example Skydaz, is PROHIBITED and no licence is granted to distribute + +Galacticraft or its binaries in that way. An "installer" here means a program, + +script or system which has the sole or main function of installing + +Galacticraft for a player. A system for downloading, installing and launching + +modpacks comprising multiple mods presented together (for example Technic + +or FeedTheBeast launchers) is not an "installer" for these purposes and distribution + +of Galacticraft in modpacks is fully permitted in accordance with the modpack + +permission in section 37 below. + +28B. For the avoidance of doubt, the distribution or copying of Galacticraft + +on mod download or re-distribution websites is PROHIBITED. (But bona fide + +modpacks comprising multiple mods, distributed through CurseForge or FTB or + +Technic platform or similar sites, are permitted in accordance with the modpack + +permission in section 37 below.) + +29. To the extent that Galacticraft uses parts of the code which are or have + +previously been licensed on the LGPL or GPL basis or any other licensing + +basis, that licence is to be applied subject to the above when such source + +code or compiled binaries are distributed as part of the Galacticraft + +project, and anything in the LGPL or GPL or other licence which is + +inconsistent with the above shall not apply to Galacticraft as a whole. + +In any event, users of Galacticraft are allowed to modify Galacticraft + +code for their own use and to reverse engineer the distributed binaries + +for the purpose of debugging such modifications. + +30. A player playing Galacticraft within a Minecraft environment + +may do so only if that player has a legitimately acquired copy of + +Minecraft. Any other use of Galacticraft for a gameplay experience is + +not authorised. + +31. This copyright and licensing document itself is excluded from the + +licence terms above. This is a copyright and proprietary legal document and + +it must NOT be copied by any other person, in whole or in part, except for + +purposes permitted by law. + + +Proper law, jurisdiction and updating +------------------------------------- + +32. This document and the licence granted hereby are granted under the law + +of Canada and should be interpreted accordingly. + +33. The copyright in Galacticraft and the licence granted hereby are + +applicable and enforceable in every jurisdiction where Galacticraft is used, + +in accordance with these terms. References herein to "each relevant + +jurisdiction" are to be read accordingly. "Copyright" includes to the + +extent applicable also all the other intellectual property rights or equivalent + +rights, as applicable in each relevant jurisdiction, which are held by the + +author, writer, artist, designer, inventor, creator or other rights-holder of + +the computer code, text, artwork, designs, technologies and sounds contained + +in Galacticraft. + +34. In the event that a part or provision of this document is ineffective + +or not legally enforceable, that part or provision shall be severed from + +and shall not affect the other parts and provisions of this document and + +the licence granted hereby which shall continue to operate and to be + +enforceable to the maximum extent that the law allows. + +35. This document and the licence granted hereby may be updated from time + +to time, in which case the updated terms apply to any person continuing to + +use Galacticraft or its source code after the date of such update, as a + +condition of that continuing use. This document and licence applies on + +the same basis to persons who downloaded or obtained copies of Galacticraft + +or its source code prior to the date this document first came into force + +and who continue to use Galacticraft thereafter. + +36. A person downloading or otherwise obtaining a copy of Galacticraft or + +its source code does not thereby obtain ownership of Galacticraft, but + +merely a copy of it which may be used only on the terms licenced by the + +Galacticraft developers from time to time as set out herein. + + +Modpacks permission +------------------- + +37. Permission is hereby granted for Galacticraft (in its compiled, Java + +version in the form of .jar binary files) to be incorporated in any + +modpack without further authorisation from the Galacticraft developers, on + +the basis set out in sections 1 to 36 above - note in particular the + +prohibitions on commercial use - and subject to the following + +additional points: (a) a modpack must not incorporate the word + +"Galacticraft" in its name nor in any other way present itself as being an + +"official" Galacticraft modpack; (b) modpacks are not required to provide + +players with a link to Galacticraft's source code, but they must not attempt + +to deny access to Galacticraft's source code nor otherwise interfere with + +the overriding principle; (c) the Galacticraft code and other elements + +in the compiled binary must not be altered and every copy of Galacticraft's + +compiled binary code must include, within the relevant .jar or .zip or other + +packaged file, a copy of this LICENSE.txt; (d) modpacks must so far as + +reasonably possible distribute an up-to-date version of Galacticraft; (e) + +a 'modpack' here means a compilation of Galacticraft with other mods to + +create a bona fide pack of multiple mods playable in the Java versions of + +Minecraft combined with Forge. diff --git a/java_mod/Galacticraft-Legacy-master-1.12/etc/SECURITY.md b/java_mod/Galacticraft-Legacy-master-1.12/etc/SECURITY.md new file mode 100644 index 00000000..fdda8a70 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/etc/SECURITY.md @@ -0,0 +1,13 @@ +# Security Policy + +## Supported Versions + + +| Version | Supported | +| ------- | ------------------ | +| 4.0.x | :white_check_mark: | +| < 4.0 | :x: | + +## Reporting a Vulnerability + +Please report (suspected) security vulnerabilities to security@galacticraft.net. You will receive a response from us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but historically within a few days. diff --git a/java_mod/Galacticraft-Legacy-master-1.12/etc/formatting/eclipse_formatter.xml b/java_mod/Galacticraft-Legacy-master-1.12/etc/formatting/eclipse_formatter.xml new file mode 100644 index 00000000..3002b60f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/etc/formatting/eclipse_formatter.xml @@ -0,0 +1,401 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java_mod/Galacticraft-Legacy-master-1.12/etc/formatting/intellij_idea_style.xml b/java_mod/Galacticraft-Legacy-master-1.12/etc/formatting/intellij_idea_style.xml new file mode 100644 index 00000000..79af7df1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/etc/formatting/intellij_idea_style.xml @@ -0,0 +1,57 @@ + + \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/etc/replace/IntCache.class b/java_mod/Galacticraft-Legacy-master-1.12/etc/replace/IntCache.class new file mode 100644 index 00000000..e44bb436 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/etc/replace/IntCache.class differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/gradle.properties b/java_mod/Galacticraft-Legacy-master-1.12/gradle.properties new file mode 100644 index 00000000..4146ddff --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/gradle.properties @@ -0,0 +1,15 @@ +org.gradle.jvmargs=-Xmx3G +org.gradle.daemon=false + +MC_VERSION=1.12.2 +forge_version=14.23.5.2860 +mapping_channel=stable +mapping_version=39-1.12 + +mod_version=4.0.7 +version_suffix= + +##Allows using your skin while testing, This can be with or without hyphens +##uuid = +##username = +##accessToken = diff --git a/java_mod/Galacticraft-Legacy-master-1.12/gradle/resources.gradle b/java_mod/Galacticraft-Legacy-master-1.12/gradle/resources.gradle new file mode 100644 index 00000000..4a07d9bc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/gradle/resources.gradle @@ -0,0 +1,66 @@ +def resourceTargets = [ 'mcmod.info' ] +def intoTargets = [ + "$rootDir/out/production/resources/", + "$rootDir/out/production/${project.name}.main/", + "$rootDir/bin/main/" +] +def replaceProperties = [ mod_version: version.toString(), minecraft_version: "${mc_version}" ] + +processResources { + inputs.properties replaceProperties + replaceProperties.put 'project', project + + filesMatching(resourceTargets) { + expand replaceProperties + } + + intoTargets.each { target -> + if (file(target).exists()) { + copy { + from(sourceSets.main.resources) { + include resourceTargets + expand replaceProperties + } + into target + } + } + } +} + +def modFileTokens = [ + gcVersion: version.toString() +] +def included = [ "micdoodle8/mods/galacticraft/core/Constants.java" ] +def includedPaths = included.collect { java.nio.file.Paths.get(it) } +def expandedSrc = new File(project.buildDir, 'expandedSrc') +def srcMainJava = project.file('src/main/java').toPath() + +task javaReplaceTokens(type: Copy) { + inputs.property 'tokens', modFileTokens + from(srcMainJava) { + include included + } + into expandedSrc + filter(org.apache.tools.ant.filters.ReplaceTokens, beginToken: '${', endToken: '}', tokens: modFileTokens) +} + +compileJava { + dependsOn javaReplaceTokens + exclude { + srcMainJava.relativize(it.file.toPath()) in includedPaths + } + source expandedSrc + + options.compilerArgs << "-Xlint:none" + options.encoding = 'UTF-8' + options.fork = true + options.incremental = true +} + +tasks.withType(Javadoc) { + failOnError false + options.memberLevel = JavadocMemberLevel.PUBLIC + options.encoding = 'UTF-8' + options.charSet = 'UTF-8' + options.links = ["https://docs.oracle.com/javase/8/docs/api/".toString()] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.jar b/java_mod/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..ccebba77 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.jar differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.properties b/java_mod/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..37aef8d3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/java_mod/Galacticraft-Legacy-master-1.12/gradlew b/java_mod/Galacticraft-Legacy-master-1.12/gradlew new file mode 100644 index 00000000..79a61d42 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/gradlew @@ -0,0 +1,244 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed 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 +# +# https://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. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/java_mod/Galacticraft-Legacy-master-1.12/gradlew.bat b/java_mod/Galacticraft-Legacy-master-1.12/gradlew.bat new file mode 100644 index 00000000..93e3f59f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/java_mod/Galacticraft-Legacy-master-1.12/settings.gradle b/java_mod/Galacticraft-Legacy-master-1.12/settings.gradle new file mode 100644 index 00000000..cbc65196 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/settings.gradle @@ -0,0 +1,6 @@ +pluginManagement { + repositories { + maven { url = 'https://maven.galacticraft.net/repository/internal-plugins/' } + maven { url = 'https://maven.galacticraft.net/repository/gradle/' } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ForRemoval.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ForRemoval.java new file mode 100644 index 00000000..7e8eb04d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ForRemoval.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.annotations; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + + +/** + * Functionality annotated with ForRemoval will no longer be supported + * and should not be used anymore in new code. + */ +@Documented +@Retention(RUNTIME) +@Target( +{TYPE, FIELD, METHOD, CONSTRUCTOR}) +public @interface ForRemoval +{ + /** + * Version which will most likely remove this feature. + * + * @return The deadline version or N/A if this isn't known yet + */ + String deadline() default "N/A"; +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ReplaceWith.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ReplaceWith.java new file mode 100644 index 00000000..5a1d1f58 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ReplaceWith.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.annotations; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * Functionality annotated with ReplaceWith should be replaced immediately + * with the mentioned code fragment. This is often used for things like naming changes. + */ +@Documented +@Retention(RUNTIME) +@Target( +{TYPE, FIELD, METHOD, CONSTRUCTOR}) +public @interface ReplaceWith +{ + String value(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftConfigAccess.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftConfigAccess.java new file mode 100644 index 00000000..45f50b48 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftConfigAccess.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api; + +import java.lang.reflect.Field; + +public class GalacticraftConfigAccess +{ + + private static Field quickMode; + private static Field hardMode; + private static Field adventureMode; + private static Field adventureRecipes; + private static Field adventureMobDropsAndSpawning; + private static Field adventureSpawnHandling; + private static Field adventureAsteroidPopulation; + + public static boolean getQuickMode() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) quickMode.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getHardMode() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) hardMode.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeMode() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureMode.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeRecipes() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureRecipes.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeMobDropsAndSpawning() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureMobDropsAndSpawning.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeSpawnHandling() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureSpawnHandling.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeAsteroidPopulation() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureAsteroidPopulation.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + private static void setup() + { + try + { + Class GCConfig = Class.forName("micdoodle8.mods.galacticraft.core.util.ConfigManagerCore"); + quickMode = GCConfig.getField("quickMode"); + hardMode = GCConfig.getField("hardMode"); + adventureMode = GCConfig.getField("challengeMode"); + adventureRecipes = GCConfig.getField("challengeRecipes"); + adventureMobDropsAndSpawning = GCConfig.getField("challengeMobDropsAndSpawning"); + adventureSpawnHandling = GCConfig.getField("challengeSpawnHandling"); + adventureAsteroidPopulation = GCConfig.getField("challengeAsteroidPopulation"); + } catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftRegistry.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftRegistry.java new file mode 100644 index 00000000..c770bbc7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftRegistry.java @@ -0,0 +1,498 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.DimensionType; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldProviderSurface; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.api.world.SpaceStationType; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import com.google.common.collect.Lists; + +public class GalacticraftRegistry +{ + + private static Map, ITeleportType> teleportTypeMap = new HashMap<>(); + private static List spaceStations = new ArrayList<>(); + private static List rocketBenchT1Recipes = new ArrayList<>(); + private static List buggyBenchRecipes = new ArrayList<>(); + private static List rocketBenchT2Recipes = new ArrayList<>(); + private static List cargoRocketRecipes = new ArrayList<>(); + private static List rocketBenchT3Recipes = new ArrayList<>(); + private static List astroMinerRecipes = new ArrayList<>(); + private static Map, ResourceLocation> rocketGuiMap = new HashMap<>(); + private static Map> dungeonLootMap = new HashMap<>(); + private static List dimensionTypeIDs = new ArrayList<>(); + private static List gameScreens = new ArrayList<>(); + private static int maxScreenTypes; + private static Map> gearMap = new HashMap<>(); + private static Map> gearSlotMap = new HashMap<>(); + + /** + * Register a new Teleport type for the world provider passed + * + * @param clazz the world provider class that you wish to customize + * teleportation for + * @param type an ITeleportType-implemented class that will be used for the + * provided world type + */ + public static void registerTeleportType(Class clazz, ITeleportType type) + { + if (!GalacticraftRegistry.teleportTypeMap.containsKey(clazz)) + { + GalacticraftRegistry.teleportTypeMap.put(clazz, type); + } + } + + /** + * Link a world provider to a gui texture. This texture will be shown on the + * left-side of the screen while the player is in the rocket. + * + * @param clazz The World Provider class + * @param rocketGui Resource Location for the gui texture + */ + public static void registerRocketGui(Class clazz, ResourceLocation rocketGui) + { + if (!GalacticraftRegistry.rocketGuiMap.containsKey(clazz)) + { + GalacticraftRegistry.rocketGuiMap.put(clazz, rocketGui); + } + } + + /** + * Add loot to the list of items that can possibly spawn in dungeon chests, + * but it is guaranteed that one will always spawn + * + * @param tier Tier of dungeon chest to add loot to. For example Moon is 1 + * and Mars is 2 + * @param loot The itemstack to add to the possible list of items + */ + public static void addDungeonLoot(int tier, ItemStack loot) + { + List dungeonStacks = null; + + if (GalacticraftRegistry.dungeonLootMap.containsKey(tier)) + { + dungeonStacks = GalacticraftRegistry.dungeonLootMap.get(tier); + dungeonStacks.add(loot); + } else + { + dungeonStacks = new ArrayList<>(); + dungeonStacks.add(loot); + } + + GalacticraftRegistry.dungeonLootMap.put(tier, dungeonStacks); + } + + public static void addT1RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT1Recipes.add(recipe); + } + + public static void addT2RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT2Recipes.add(recipe); + } + + public static void addT3RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT3Recipes.add(recipe); + } + + public static void addCargoRocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.cargoRocketRecipes.add(recipe); + } + + public static void addMoonBuggyRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.buggyBenchRecipes.add(recipe); + } + + public static void addAstroMinerRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.astroMinerRecipes.add(recipe); + } + + public static void removeT1RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT1Recipes.remove(recipe); + } + + public static void removeT2RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT2Recipes.remove(recipe); + } + + public static void removeT3RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT3Recipes.remove(recipe); + } + + public static void removeCargoRocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.cargoRocketRecipes.remove(recipe); + } + + public static void removeMoonBuggyRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.buggyBenchRecipes.remove(recipe); + } + + public static void removeAstroMinerRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.astroMinerRecipes.remove(recipe); + } + + public static void removeAllT1RocketRecipes() + { + GalacticraftRegistry.rocketBenchT1Recipes.clear(); + } + + public static void removeAllT2RocketRecipes() + { + GalacticraftRegistry.rocketBenchT2Recipes.clear(); + } + + public static void removeAllT3RocketRecipes() + { + GalacticraftRegistry.rocketBenchT3Recipes.clear(); + } + + public static void removeAllCargoRocketRecipes() + { + GalacticraftRegistry.cargoRocketRecipes.clear(); + } + + public static void removeAllMoonBuggyRecipes() + { + GalacticraftRegistry.buggyBenchRecipes.clear(); + } + + public static void removeAllAstroMinerRecipes() + { + GalacticraftRegistry.astroMinerRecipes.clear(); + } + + public static ITeleportType getTeleportTypeForDimension(Class clazz) + { + if (!IGalacticraftWorldProvider.class.isAssignableFrom(clazz)) + { + clazz = WorldProviderSurface.class; + } + return GalacticraftRegistry.teleportTypeMap.get(clazz); + } + + public static void registerSpaceStation(SpaceStationType type) + { + for (SpaceStationType type1 : GalacticraftRegistry.spaceStations) + { + if (type1.getWorldToOrbitID() == type.getWorldToOrbitID()) + { + throw new RuntimeException("Two space station types registered with the same home planet ID: " + type.getWorldToOrbitID()); + } + } + + GalacticraftRegistry.spaceStations.add(type); + } + + public static void replaceSpaceStationRecipe(int spaceStationID, HashMap obj) + { + for (SpaceStationType type1 : GalacticraftRegistry.spaceStations) + { + if (type1.getSpaceStationID() == spaceStationID) + { + type1.setRecipeForSpaceStation(new SpaceStationRecipe(obj)); + } + } + } + + public SpaceStationType getTypeFromPlanetID(int planetID) + { + return GalacticraftRegistry.spaceStations.get(planetID); + } + + public static List getSpaceStationData() + { + return GalacticraftRegistry.spaceStations; + } + + public static List getRocketT1Recipes() + { + return GalacticraftRegistry.rocketBenchT1Recipes; + } + + public static List getRocketT2Recipes() + { + return GalacticraftRegistry.rocketBenchT2Recipes; + } + + public static List getRocketT3Recipes() + { + return GalacticraftRegistry.rocketBenchT3Recipes; + } + + public static List getCargoRocketRecipes() + { + return GalacticraftRegistry.cargoRocketRecipes; + } + + public static List getBuggyBenchRecipes() + { + return GalacticraftRegistry.buggyBenchRecipes; + } + + public static List getAstroMinerRecipes() + { + return GalacticraftRegistry.astroMinerRecipes; + } + + @SideOnly(Side.CLIENT) + public static ResourceLocation getResouceLocationForDimension(Class clazz) + { + if (!IGalacticraftWorldProvider.class.isAssignableFrom(clazz)) + { + clazz = WorldProviderSurface.class; + } + return GalacticraftRegistry.rocketGuiMap.get(clazz); + } + + public static List getDungeonLoot(int tier) + { + return GalacticraftRegistry.dungeonLootMap.get(tier); + } + + /*** + * Register a Galacticraft dimension + */ + public static DimensionType registerDimension(String name, String suffix, int id, Class provider, boolean keepLoaded) throws IllegalArgumentException + { + for (DimensionType other : DimensionType.values()) + { + if (other.getId() == id) + { + return null; + } + } + + DimensionType type = DimensionType.register(name, suffix, id, provider, keepLoaded); + GalacticraftRegistry.dimensionTypeIDs.add(type == null ? 0 : id); + if (type == null) + { + GalacticraftCore.logger.error("Problem registering dimension type " + id + ". May be fixable by changing config."); + } + + return type; + } + + public static int getDimensionTypeID(int index) + { + // Not the best solution but is better than the very unuseful IndexOutOfBoundsException message + try + { + return GalacticraftRegistry.dimensionTypeIDs.get(index); + } catch (IndexOutOfBoundsException e) + { + GalacticraftCore.logger.error("Attempted to get index[%d] while 'dimensionTypeIDs' size was %d", index, GalacticraftRegistry.dimensionTypeIDs.size()); + return 0; + } + + } + + public static boolean isDimensionTypeIDRegistered(int typeId) + { + return GalacticraftRegistry.dimensionTypeIDs.contains(typeId); + } + + /** + * Register an IGameScreen so the Display Screen can access it + * + * @param screen The IGameScreen to be registered + * @return The type ID assigned to this screen type + */ + public static int registerScreen(IGameScreen screen) + { + GalacticraftRegistry.gameScreens.add(screen); + maxScreenTypes++; + screen.setFrameSize(0.098F); + return maxScreenTypes - 1; + } + + public static void registerScreensServer(int maxTypes) + { + maxScreenTypes = maxTypes; + } + + public static int getMaxScreenTypes() + { + return maxScreenTypes; + } + + public static IGameScreen getGameScreen(int type) + { + return GalacticraftRegistry.gameScreens.get(type); + } + + /** + * Adds a custom item for 'extended inventory' slots + * + * Gear IDs must be unique, and should be configurable for user convenience + * + * Please do not use values less than 100, to avoid conflicts with future + * Galacticraft core additions + * + * @param gearID Unique ID for this gear item, please use values greater + * than 100 + * @param type Slot this item can be placed in + * @param item Item to register, not metadata-sensitive + */ + public static void registerGear(int gearID, EnumExtendedInventorySlot type, Item item) + { + addGearObject(gearID, type, item); + } + + /** + * Adds a custom item for 'extended inventory' slots + * + * Gear IDs must be unique, and should be configurable for user convenience + * + * Please do not use values less than 100, to avoid conflicts with future + * Galacticraft core additions + * + * @param gearID Unique ID for this gear item, please use values greater + * than 100 + * @param type Slot this item can be placed in + * @param itemStack ItemStack to register, metadata-sensitive + */ + public static void registerGear(int gearID, EnumExtendedInventorySlot type, ItemStack itemStack) + { + addGearObject(gearID, type, itemStack); + } + + private static void addGearObject(int gearID, EnumExtendedInventorySlot type, Object obj) + { + if (GalacticraftRegistry.gearMap.containsKey(gearID)) + { + if (!GalacticraftRegistry.gearMap.get(gearID).contains(obj)) + { + GalacticraftRegistry.gearMap.get(gearID).add(obj); + } + } else + { + List gear = Lists.newArrayList(); + gear.add(obj); + GalacticraftRegistry.gearMap.put(gearID, gear); + } + + if (GalacticraftRegistry.gearSlotMap.containsKey(gearID)) + { + if (!GalacticraftRegistry.gearSlotMap.get(gearID).contains(type)) + { + GalacticraftRegistry.gearSlotMap.get(gearID).add(type); + } + } else + { + List gearType = Lists.newArrayList(); + gearType.add(type); + GalacticraftRegistry.gearSlotMap.put(gearID, gearType); + } + } + + public static List listAllGearForSlot(EnumExtendedInventorySlot slotType) + { + List result = new LinkedList<>(); + for (Map.Entry> entry : GalacticraftRegistry.gearMap.entrySet()) + { + List slotType1 = getSlotType(entry.getKey()); + if (slotType1.contains(slotType)) + { + List objectList = entry.getValue(); + for (Object o : objectList) + { + if (o instanceof ItemStack) + { + result.add((ItemStack) o); + } else if (o instanceof Item) + { + result.add(new ItemStack((Item) o)); + } + } + } + } + return result; + } + + public static int findMatchingGearID(ItemStack stack, EnumExtendedInventorySlot slotType) + { + for (Map.Entry> entry : GalacticraftRegistry.gearMap.entrySet()) + { + List slotType1 = getSlotType(entry.getKey()); + List objectList = entry.getValue(); + + if (!slotType1.contains(slotType)) + { + continue; + } + + for (Object o : objectList) + { + if (o instanceof Item) + { + if (stack.getItem() == o) + { + return entry.getKey(); + } + } else if (o instanceof ItemStack) + { + if (stack.getItem() == ((ItemStack) o).getItem() && stack.getItemDamage() == ((ItemStack) o).getItemDamage()) + { + return entry.getKey(); + } + } + } + } + + return -1; + } + + public static List getSlotType(int gearID) + { + return GalacticraftRegistry.gearSlotMap.get(gearID); + } + + @Deprecated + /** + * Grating will now register fluids automatically if they extend + * BlockFluidBase + * + */ + public static void registerGratingFluid(Block fluidBlock) + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IDetectableResource.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IDetectableResource.java new file mode 100644 index 00000000..1577e462 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IDetectableResource.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.block.state.IBlockState; + +/** + * Implement this interface to let Sensor Goggles see your block. + */ +public interface IDetectableResource +{ + + /** + * @return array of metadata values that are considered valueable. + */ + boolean isValueable(IBlockState metadata); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IOxygenReliantBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IOxygenReliantBlock.java new file mode 100644 index 00000000..b7fe3002 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IOxygenReliantBlock.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * If block requires updates when oxygen is added and removed, implement this + * into your block class. + * + * It is recommended that blocks implementing this should be set to tick + * randomly, and should override @updateTick() also to carry out oxygen checks. + */ +public interface IOxygenReliantBlock +{ + + void onOxygenRemoved(World world, BlockPos pos, IBlockState currentState); + + void onOxygenAdded(World world, BlockPos pos, IBlockState currentState); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPartialSealableBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPartialSealableBlock.java new file mode 100644 index 00000000..6c6a8c3b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPartialSealableBlock.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface IPartialSealableBlock +{ + + boolean isSealed(World world, BlockPos pos, EnumFacing direction); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPlantableBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPlantableBlock.java new file mode 100644 index 00000000..4d8c9ae1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPlantableBlock.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.block.state.IBlockState; + +/** + * Extend this block to allow planting of saplings on it. Requires + */ +public interface IPlantableBlock +{ + + /** + * @return amount of water blocks required for sapling to be growable. 4 is + * default. + */ + int requiredLiquidBlocksNearby(); + + /** + * @return is sapling can be placed on the provided metadata value, return + * true + */ + boolean isPlantable(IBlockState state); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/ITerraformableBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/ITerraformableBlock.java new file mode 100644 index 00000000..a9f1db26 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/ITerraformableBlock.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface ITerraformableBlock +{ + + /** + * Determines if the block as this position is terraformable. This will only + * be called for blocks inside the terraformer bubble. It is recommended + * that you test whether the block can see the surface before returning + * true. + * + * @param world World that the block is a part of + * @param pos The position of the block + * @return True if the block can be terraformed, false if not. + */ + boolean isTerraformable(World world, BlockPos pos); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/package-info.java new file mode 100644 index 00000000..0b4206f4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|block") +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IGameScreen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IGameScreen.java new file mode 100644 index 00000000..36ea2853 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IGameScreen.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client; + +public interface IGameScreen +{ + + /** + * Set up the frame edge size for this screen. This part must not be drawn + * when the screen is rendered. + * + * Typical size: 0.1F for a screen which can be 1.0F x 1.0F or larger + * + * (This will be called only once during screen initialisation.) + * + * @param frameSize + */ + void setFrameSize(float frameSize); + + /** + * Draw a screen in the XY plane with z == 0. Must fit in the coordinate + * range (0, 0, 0) - (scaleX, scaleY, 0) + * + * Register your IGameScreen by calling DrawGameScreen.registerScreen(); + * from your @Mod class during Forge postInit() phase. + * + * @param type Type of screen to draw, as registered + * @param ticks The worldtime in ticks (including partial ticks) + * @param scaleX Dimension of the screen in X direction + * @param scaleY Dimension of the screen in Y direction + * @param screen The screen driver (DrawGameScreen) for this particular + * screen + * + * NOTE 1: It is not necessary to enclose your code with glPushMatrix + * and glPopMatrix, as this will be done by the calling method. You + * can also change the lighting in your render as the calling method + * will finish by calling RenderHelper.enableStandardItemLighting(). + * + * NOTE 2: if disabling GL11.GL_TEXTURE_2D in your code it is very + * IMPORTANT to re-enable it again. + * + */ + void render(int type, float ticks, float scaleX, float scaleY, IScreenManager screen); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IItemMeshDefinitionCustom.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IItemMeshDefinitionCustom.java new file mode 100644 index 00000000..46eecfd3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IItemMeshDefinitionCustom.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client; + +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.item.ItemStack; + +public interface IItemMeshDefinitionCustom extends ItemMeshDefinition +{ + + static ItemMeshDefinition create(IItemMeshDefinitionCustom lambda) + { + return lambda; + } + + ModelResourceLocation getLocation(ItemStack stack); + + @Override + default ModelResourceLocation getModelLocation(ItemStack stack) + { + return getLocation(stack); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IScreenManager.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IScreenManager.java new file mode 100644 index 00000000..792e5d74 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IScreenManager.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client; + +import net.minecraft.world.WorldProvider; + +public interface IScreenManager +{ + + /** + * Used by screen renderers to figure out which world they are in + * + * @return The WorldProvider of the world where the screen driver is located + */ + WorldProvider getWorldProvider(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/AbstractTab.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/AbstractTab.java new file mode 100644 index 00000000..c94ec7b9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/AbstractTab.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client.tabs; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.inventory.GuiInventory; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public abstract class AbstractTab extends GuiButton +{ + + ResourceLocation texture = new ResourceLocation("textures/gui/container/creative_inventory/tabs.png"); + ItemStack renderStack; + public int potionOffsetLast; + protected RenderItem itemRender; + + public AbstractTab(int id, int posX, int posY, ItemStack renderStack) + { + super(id, posX, posY, 28, 32, ""); + this.renderStack = renderStack; + this.itemRender = FMLClientHandler.instance().getClient().getRenderItem(); + } + + @Override + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + int newPotionOffset = TabRegistry.getPotionOffsetNEI(); + GuiScreen screen = FMLClientHandler.instance().getClient().currentScreen; + if (screen instanceof GuiInventory) + { + newPotionOffset += TabRegistry.getRecipeBookOffset((GuiInventory) screen) - TabRegistry.recipeBookOffset; + } + if (newPotionOffset != this.potionOffsetLast) + { + this.x += newPotionOffset - this.potionOffsetLast; + this.potionOffsetLast = newPotionOffset; + } + if (this.visible) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + int yTexPos = this.enabled ? 3 : 32; + int ySize = this.enabled ? 25 : 32; + int xOffset = this.id == 2 ? 0 : 1; + int yPos = this.y + (this.enabled ? 3 : 0); + + mc.renderEngine.bindTexture(this.texture); + this.drawTexturedModalRect(this.x, yPos, xOffset * 28, yTexPos, 28, ySize); + + RenderHelper.enableGUIStandardItemLighting(); + this.zLevel = 100.0F; + this.itemRender.zLevel = 100.0F; + GlStateManager.enableLighting(); + GlStateManager.enableRescaleNormal(); + this.itemRender.renderItemAndEffectIntoGUI(this.renderStack, this.x + 6, this.y + 8); + this.itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, this.renderStack, this.x + 6, this.y + 8, null); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + this.itemRender.zLevel = 0.0F; + this.zLevel = 0.0F; + RenderHelper.disableStandardItemLighting(); + } + } + + @Override + public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) + { + boolean inWindow = this.enabled && this.visible && mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + + if (inWindow) + { + this.onTabClicked(); + } + + return inWindow; + } + + public abstract void onTabClicked(); + + public abstract boolean shouldAddToList(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/InventoryTabVanilla.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/InventoryTabVanilla.java new file mode 100644 index 00000000..c73777d8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/InventoryTabVanilla.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client.tabs; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; + +public class InventoryTabVanilla extends AbstractTab +{ + + public InventoryTabVanilla() + { + super(0, 0, 0, new ItemStack(Blocks.CRAFTING_TABLE)); + } + + @Override + public void onTabClicked() + { + TabRegistry.openInventoryGui(); + } + + @Override + public boolean shouldAddToList() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/TabRegistry.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/TabRegistry.java new file mode 100644 index 00000000..05fd7240 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/TabRegistry.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client.tabs; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.gui.inventory.GuiInventory; +import net.minecraft.inventory.ContainerPlayer; +import net.minecraft.network.play.client.CPacketCloseWindow; +import net.minecraft.potion.PotionEffect; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TabRegistry +{ + + private static ArrayList tabList = new ArrayList(); + private static Class clazzJEIConfig = null; + public static Class clazzNEIConfig = null; + + static + { + try + { + // Checks for JEI by looking for this class instead of a + // Loader.isModLoaded() check + clazzJEIConfig = Class.forName("mezz.jei.config.Config"); + } catch (Exception ignore) + { + // no log spam + } + // Only activate NEI feature if NEI is standalone + if (clazzJEIConfig == null) + { + try + { + clazzNEIConfig = Class.forName("codechicken.nei.NEIClientConfig"); + } catch (Throwable ignore) + { + // no log spam + } + } + } + + public static void registerTab(AbstractTab tab) + { + TabRegistry.tabList.add(tab); + } + + public static ArrayList getTabList() + { + return TabRegistry.tabList; + } + + // Retained for backwards compatibility with TC pre version 1.6.0d40 + public static void addTabsToInventory(GuiContainer gui) + { + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void guiPostInit(GuiScreenEvent.InitGuiEvent.Post event) + { + if (event.getGui() instanceof GuiInventory) + { + int guiLeft = (event.getGui().width - 176) / 2; + int guiTop = (event.getGui().height - 166) / 2; + recipeBookOffset = getRecipeBookOffset((GuiInventory) event.getGui()); + guiLeft += getPotionOffset() + recipeBookOffset; + + TabRegistry.updateTabValues(guiLeft, guiTop, InventoryTabVanilla.class); + TabRegistry.addTabsToList(event.getButtonList()); + } + } + + private static Minecraft mc = FMLClientHandler.instance().getClient(); + private static boolean initWithPotion; + public static int recipeBookOffset; + + public static void openInventoryGui() + { + TabRegistry.mc.player.connection.sendPacket(new CPacketCloseWindow(mc.player.openContainer.windowId)); + GuiInventory inventory = new GuiInventory(TabRegistry.mc.player); + TabRegistry.mc.displayGuiScreen(inventory); + } + + public static void updateTabValues(int cornerX, int cornerY, Class selectedButton) + { + int count = 2; + for (int i = 0; i < TabRegistry.tabList.size(); i++) + { + AbstractTab t = TabRegistry.tabList.get(i); + + if (t.shouldAddToList()) + { + t.id = count; + t.x = cornerX + (count - 2) * 28; + t.y = cornerY - 28; + t.enabled = !t.getClass().equals(selectedButton); + t.potionOffsetLast = getPotionOffsetNEI(); + count++; + } + } + } + + public static void addTabsToList(List buttonList) + { + for (AbstractTab tab : TabRegistry.tabList) + { + if (tab.shouldAddToList()) + { + buttonList.add(tab); + } + } + } + + public static int getPotionOffset() + { + /* + * Disabled in 1.12.2 because a vanilla bug means potion offsets are + * currently not a thing The vanilla bug is that GuiInventory.initGui() + * resets GuiLeft to the recipe book version of GuiLeft, and in + * GuiRecipeBook.updateScreenPosition() it takes no account of potion + * offset even if the recipe book is inactive. // If at least one potion + * is active... if (doPotionOffsetVanilla()) { initWithPotion = true; + * return 60 + getPotionOffsetJEI() + getPotionOffsetNEI(); } + */ + + // No potions, no offset needed + initWithPotion = false; + return 0; + } + + public static boolean doPotionOffsetVanilla() + { + for (PotionEffect potioneffect : mc.player.getActivePotionEffects()) + { + if (potioneffect.getPotion().shouldRender(potioneffect)) + { + return true; + } + } + return false; + } + + public static int getPotionOffsetJEI() + { + if (clazzJEIConfig != null) + { + try + { + Object enabled = clazzJEIConfig.getMethod("isOverlayEnabled").invoke(null); + if (enabled instanceof Boolean) + { + if (!((Boolean) enabled)) + { + // If JEI is disabled, no special change to + // getPotionOffset() + return 0; + } + // Active JEI undoes the standard potion offset (they listen + // for GuiScreenEvent.PotionShiftEvent) + return -60; + } + } catch (Exception ignore) + { + // no log spam + } + } + return 0; + } + + public static int getPotionOffsetNEI() + { + if (initWithPotion && clazzNEIConfig != null) + { + try + { + // Check whether NEI is hidden and enabled + Object hidden = clazzNEIConfig.getMethod("isHidden").invoke(null); + Object enabled = clazzNEIConfig.getMethod("isEnabled").invoke(null); + if (hidden instanceof Boolean && enabled instanceof Boolean) + { + if ((Boolean) hidden || !((Boolean) enabled)) + { + // If NEI is disabled or hidden, it does not affect the + // tabs offset with potions + return 0; + } + // But active NEI undoes the standard potion offset + return -60; + } + } catch (Exception ignore) + { + // no log spam + } + } + // No NEI, no change + return 0; + } + + public static int getRecipeBookOffset(GuiInventory gui) + { + boolean widthTooNarrow = gui.width < 379; + gui.func_194310_f().func_194303_a(gui.width, gui.height, mc, widthTooNarrow, ((ContainerPlayer) gui.inventorySlots).craftMatrix); + return gui.func_194310_f().updateScreenPosition(widthTooNarrow, gui.width, gui.getXSize()) - (gui.width - 176) / 2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IAntiGrav.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IAntiGrav.java new file mode 100644 index 00000000..ee67242e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IAntiGrav.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +/** + * Implement into entities that are unaffected by gravity + */ +public interface IAntiGrav +{ +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICameraZoomEntity.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICameraZoomEntity.java new file mode 100644 index 00000000..6112c779 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICameraZoomEntity.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +public interface ICameraZoomEntity +{ + + float getCameraZoom(); + + boolean defaultThirdPerson(); + + /** + * Used for the ICameraZoomEntities which can rotate pitch and yaw (e.g. + * TieredRocket, Moon Lander) Return a value less than -10F to signal a + * non-rotatable entity (e.g. Landing Balloons, Entry Pod) + */ + float getRotateOffset(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICargoEntity.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICargoEntity.java new file mode 100644 index 00000000..fe4727cf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICargoEntity.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import javax.annotation.Nonnull; +import net.minecraft.item.ItemStack; + +/** + * Implement into entities that can be loaded with cargo + */ +public interface ICargoEntity +{ + + enum EnumCargoLoadingState + { + FULL, EMPTY, NOTARGET, NOINVENTORY, SUCCESS + } + + class RemovalResult + { + + public final EnumCargoLoadingState resultState; + @Nonnull public final ItemStack resultStack; + + public RemovalResult(EnumCargoLoadingState resultState, @Nonnull ItemStack resultStack) + { + this.resultState = resultState; + this.resultStack = resultStack; + } + } + + EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd); + + RemovalResult removeCargo(boolean doRemove); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IDockable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IDockable.java new file mode 100644 index 00000000..1aa3f0a5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IDockable.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; + +/** + * Implement into entities that are placed on fuel docks to load with cargo and + * fuel + */ +public interface IDockable extends IFuelable, ICargoEntity +{ + + /** + * Sets the current fuel dock for this entity + */ + void setPad(IFuelDock pad); + + /** + * Gets the fuel dock when required. Must return the same one that was set. + */ + IFuelDock getLandingPad(); + + /** + * When the fuel dock is destroyed. Most likely kills the entity and drops + * it's containing items. + */ + void onPadDestroyed(); + + /** + * Whether or not the fuel dock this entity is on is valid.

Returning + * false will not let setPad be called. + */ + boolean isDockValid(IFuelDock dock); + + boolean inFlight(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityBreathable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityBreathable.java new file mode 100644 index 00000000..edfccae4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityBreathable.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +/** + * Implement into entities that are living, but can breath without oxygen + */ +public interface IEntityBreathable +{ + + /** + * Whether or not this entity can currently breathe without oxygen in it's + * vicinity + */ + boolean canBreath(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityNoisy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityNoisy.java new file mode 100644 index 00000000..c9a920fb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityNoisy.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraft.client.audio.ISound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.util.ITickable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/** + * Implement into entities that make a sound all the time, like rockets + */ +public interface IEntityNoisy +{ + + @SideOnly(Side.CLIENT) + ITickable getSoundUpdater(); + + @SideOnly(Side.CLIENT) + ISound setSoundUpdater(EntityPlayerSP player); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IFuelable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IFuelable.java new file mode 100644 index 00000000..b7ea9d3d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IFuelable.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraftforge.fluids.FluidStack; + +/** + * Implement into entities that can be fueled when placed on fuel docks + */ +public interface IFuelable +{ + + /** + * Add fuel to the entity + * + * @param fluid The fluid to add. Be sure to check if the correct fluid is + * being loaded before adding it. + * @param doDrain Whether or not fluid should actually be added, or is just + * a test. + * @return the amount of fluid that was added to the entity. + */ + int addFuel(FluidStack fluid, boolean doDrain); + + /** + * Remove fuel from an entity + * + * @param amount The amount of fluid to drain + * @return The fluidstack that was drained + */ + FluidStack removeFuel(int amount); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IIgnoreShift.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IIgnoreShift.java new file mode 100644 index 00000000..2ba6d52a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IIgnoreShift.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +public interface IIgnoreShift +{ + + boolean shouldIgnoreShiftExit(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILandable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILandable.java new file mode 100644 index 00000000..45d0ed06 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILandable.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraft.util.math.BlockPos; + +/** + * An entity which requires a hook into landing pad events should implement this + * interface + */ +public interface ILandable extends IDockable +{ + + /** + * Called when the entity lands on a dock + * + * @param pos coordinates of the dock + */ + void landEntity(BlockPos pos); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILaserTrackableFast.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILaserTrackableFast.java new file mode 100644 index 00000000..78470794 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILaserTrackableFast.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +/** + * Used for non-living, but laser turret targettable entities + */ +public interface ILaserTrackableFast +{ +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IRocketType.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IRocketType.java new file mode 100644 index 00000000..11f172f6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IRocketType.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraft.util.text.translation.I18n; + +public interface IRocketType +{ + + enum EnumRocketType + { + + DEFAULT(0, "", false, 2), + INVENTORY27(1, I18n.translateToLocal("gui.rocket_type.0"), false, 20), + INVENTORY36(2, I18n.translateToLocal("gui.rocket_type.1"), false, 38), + INVENTORY54(3, I18n.translateToLocal("gui.rocket_type.2"), false, 56), + PREFUELED(4, I18n.translateToLocal("gui.rocket_type.3"), true, 2); + + private int index; + private String tooltip; + private boolean preFueled; + private int inventorySpace; + + private EnumRocketType(int index, String tooltip, boolean preFueled, int inventorySpace) + { + this.index = index; + this.tooltip = tooltip; + this.preFueled = preFueled; + this.inventorySpace = inventorySpace; + } + + public String getTooltip() + { + return this.tooltip; + } + + public int getIndex() + { + return this.index; + } + + public int getInventorySpace() + { + return this.inventorySpace; + } + + public boolean getPreFueled() + { + return this.preFueled; + } + } + + EnumRocketType getType(); + + int getRocketTier(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ITelemetry.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ITelemetry.java new file mode 100644 index 00000000..e76b2954 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ITelemetry.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +/** + * Implement into entities to allow transmission of data via telemetry + */ +public interface ITelemetry +{ + + void transmitData(int[] data); + + void receiveData(int[] data, String[] str); + + void adjustDisplay(int[] data); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IWorldTransferCallback.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IWorldTransferCallback.java new file mode 100644 index 00000000..82895168 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IWorldTransferCallback.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraft.world.World; + +public interface IWorldTransferCallback +{ + + void onWorldTransferred(World world); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/package-info.java new file mode 100644 index 00000000..f823d3c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|entity") +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/ZeroGravityEvent.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/ZeroGravityEvent.java new file mode 100644 index 00000000..c5a5e384 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/ZeroGravityEvent.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.fml.common.eventhandler.Cancelable; + +/** + * Entity Living zero gravity events.

Cancel the event to disable zero + * gravity effects on this entity If Zero Gravity is disabled, the entity will + * fall under dimension-set gravity (probably very low!) + */ +public abstract class ZeroGravityEvent extends LivingEvent +{ + + public final WorldProvider provider; + + public ZeroGravityEvent(EntityLivingBase entity) + { + super(entity); + this.provider = entity.world.provider; + } + + /** + * Cancel this to return false on all freefall tests "Freefall" = feet not + * on a block in a Zero G Dimension + */ + @Cancelable + public static class InFreefall extends ZeroGravityEvent + { + + public InFreefall(EntityLivingBase entity) + { + super(entity); + } + } + + /** + * Cancel this to block special Zero G dimension motion (moving on walls, + * and jumping and landing on blocks) + */ + @Cancelable + public static class Motion extends ZeroGravityEvent + { + + public Motion(EntityLivingBase entity) + { + super(entity); + } + } + + /** + * Cancel this to block the sneak override on Zero G dimensions when + * descending (no sneak) or landing (sneak during impact) + * + * (This sneaking will mostly be cancelled anyhow if the Motion event is + * cancelled) + */ + @Cancelable + public static class SneakOverride extends ZeroGravityEvent + { + + public SneakOverride(EntityLivingBase entity) + { + super(entity); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/celestial/RegisterEvent.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/celestial/RegisterEvent.java new file mode 100644 index 00000000..996aa7c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/celestial/RegisterEvent.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event.celestial; + +import micdoodle8.mods.galacticraft.api.galaxies.ICelestial; +import net.minecraftforge.fml.common.ModContainer; +import net.minecraftforge.fml.common.eventhandler.Event; + +public class RegisterEvent extends Event +{ + + public ICelestial celestialObject; + + public RegisterEvent(ICelestial celestialObject, ModContainer mod) + { + this.celestialObject = celestialObject; + celestialObject.setOwnerId(mod.getModId()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/CelestialBodyRenderEvent.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/CelestialBodyRenderEvent.java new file mode 100644 index 00000000..65d289f1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/CelestialBodyRenderEvent.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event.client; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; +import org.lwjgl.util.vector.Vector3f; + +public abstract class CelestialBodyRenderEvent extends Event +{ + + public final CelestialBody celestialBody; + + public CelestialBodyRenderEvent(CelestialBody celestialBody) + { + this.celestialBody = celestialBody; + } + + public static class CelestialRingRenderEvent extends CelestialBodyRenderEvent + { + + public CelestialRingRenderEvent(CelestialBody celestialBody) + { + super(celestialBody); + } + + @Cancelable + public static class Pre extends CelestialBodyRenderEvent + { + + public final Vector3f parentOffset; + + public Pre(CelestialBody celestialBody, Vector3f parentOffset) + { + super(celestialBody); + this.parentOffset = parentOffset; + } + } + + public static class Post extends CelestialBodyRenderEvent + { + + public Post(CelestialBody celestialBody) + { + super(celestialBody); + } + } + } + + @Cancelable + public static class Pre extends CelestialBodyRenderEvent + { + + public ResourceLocation celestialBodyTexture; + public int textureSize; + + public Pre(CelestialBody celestialBody, ResourceLocation celestialBodyTexture, int textureSize) + { + super(celestialBody); + this.celestialBodyTexture = celestialBodyTexture; + this.textureSize = textureSize; + } + } + + public static class Post extends CelestialBodyRenderEvent + { + + public Post(CelestialBody celestialBody) + { + super(celestialBody); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/package-info.java new file mode 100644 index 00000000..99d9af57 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|event|client") +package micdoodle8.mods.galacticraft.api.event.client; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/GCCoreOxygenSuffocationEvent.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/GCCoreOxygenSuffocationEvent.java new file mode 100644 index 00000000..b0888af0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/GCCoreOxygenSuffocationEvent.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event.oxygen; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.fml.common.eventhandler.Cancelable; + +/** + * Entity Living suffocation events.

Be sure to make the proper checks + * before cancelling oxygen events... world providers, armor equipped, etc. + */ +public abstract class GCCoreOxygenSuffocationEvent extends LivingEvent +{ + + public final WorldProvider provider; + + public GCCoreOxygenSuffocationEvent(EntityLivingBase entity) + { + super(entity); + this.provider = entity.world.provider; + } + + /** + * This event is posted just before the living entity suffocates

Set + * the event as cancelled to stop the living entity from suffocating

IF + * THE Pre EVENT IS CANCELLED, THE "WARNING: OXYGEN SETUP INVALID!" HUD + * MESSAGE WILL NOT BE SHOWN + */ + @Cancelable + public static class Pre extends GCCoreOxygenSuffocationEvent + { + + public Pre(EntityLivingBase entity) + { + super(entity); + } + } + + /** + * This event is called after the living entity takes damage from oxygen + * suffocation

The event is not called if the pre event was canceled + */ + public static class Post extends GCCoreOxygenSuffocationEvent + { + + public Post(EntityLivingBase entity) + { + super(entity); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/package-info.java new file mode 100644 index 00000000..03534a7f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|event|oxygen") +package micdoodle8.mods.galacticraft.api.event.oxygen; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/GCCoreEventPopulate.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/GCCoreEventPopulate.java new file mode 100644 index 00000000..e5ec8135 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/GCCoreEventPopulate.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event.wgen; + +import java.util.Random; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.eventhandler.Event; + +/** + * Event is thrown when a chunk is populated on planets.

If you're adding + * your own dimensions, make sure you post these two events to the forge event + * bus when decorating your planet/moon + */ +public class GCCoreEventPopulate extends Event +{ + + public final World world; + public final Random rand; + public final BlockPos pos; + + public GCCoreEventPopulate(World world, Random rand, BlockPos pos) + { + this.world = world; + this.rand = rand; + this.pos = pos; + } + + public static class Pre extends GCCoreEventPopulate + { + + public Pre(World world, Random rand, BlockPos pos) + { + super(world, rand, pos); + } + } + + public static class Post extends GCCoreEventPopulate + { + + public Post(World world, Random rand, BlockPos pos) + { + super(world, rand, pos); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/package-info.java new file mode 100644 index 00000000..f5b41cbb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|event|worldgen") +package micdoodle8.mods.galacticraft.api.event.wgen; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialBody.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialBody.java new file mode 100644 index 00000000..447f783a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialBody.java @@ -0,0 +1,454 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.function.Predicate; + +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.SpawnListEntry; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IMobSpawnBiome; + +import org.apache.commons.lang3.builder.EqualsBuilder; + +public abstract class CelestialBody extends CelestialObject implements Comparable +{ + + protected float relativeSize = 1.0F; + protected ScalableDistance relativeDistanceFromCenter = new ScalableDistance(1.0F); + protected float relativeOrbitTime = 1.0F; + protected float phaseShift = 0.0F; + protected int dimensionID = -1; + protected Class providerClass; + protected String dimensionSuffix; + protected boolean autoRegisterDimension = false; + protected boolean isReachable = false; + protected boolean forceStaticLoad = true; + protected int tierRequired = 0; + + public AtmosphereInfo atmosphere = new AtmosphereInfo(false, false, false, 0.0F, 0.0F, 1.0F); + protected LinkedList biomeInfo; + public LinkedList biomesToGenerate; + public BiomeGenBaseGC[] biomesToAdapt; + protected LinkedList mobInfo; + + protected ResourceLocation celestialBodyIcon; + + protected float ringColorR = 1.0F; + protected float ringColorG = 1.0F; + protected float ringColorB = 1.0F; + + protected ArrayList checklistKeys = new ArrayList<>(); + + public CelestialBody(String bodyName) + { + super(bodyName); + } + + public CelestialBody(String type, String bodyName) + { + this(CelestialType.create(type), bodyName); + } + + public CelestialBody(CelestialType type, String bodyName) + { + super(type, bodyName); + } + + public int getID() + { + return dimensionID; + } + + @Override + public void setOwnerId(String ownerId) + { + super.setOwnerId(ownerId); + } + + /** + * Used for rendering planet's location on the map.

Value of 2.0F would result in the planet being rendered twice as large as earth. + * + * @return Size of the planet/moon relative to earth. + */ + public float getRelativeSize() + { + return this.relativeSize; + } + + /** + * Used for rendering planet's location on the map.

Value of 2.0F would result in an ellipse with twice the radius of the overworld. + * + * @return Distance from the center of the map relative to earth. + */ + public ScalableDistance getRelativeDistanceFromCenter() + { + return this.relativeDistanceFromCenter; + } + + /** + * Used for rendering planet's location on the map.

Value of 1π would result in the planet being rendered directly accross from the original position

Value of 2π is a full rotation and therefore would be rendered at the same spot as the original position + * + * @return Phase shift of planet for planet's revolution around the sun. + */ + public float getPhaseShift() + { + return this.phaseShift; + } + + /** + * Multiplier for length of time relative to earth that this planet takes to orbit fully.

Value of 2.0F would result in the planet rotating twice as slow (and therefore take twice as long) as the earth takes to revolve around the sun. + * + * @return Multiple value for planet's revolution around the sun. + */ + public float getRelativeOrbitTime() + { + return this.relativeOrbitTime; + } + + public int getTierRequirement() + { + return this.tierRequired; + } + + public CelestialBody setTierRequired(int tierRequired) + { + this.tierRequired = tierRequired; + return this; + } + + public CelestialBody setRelativeSize(float relativeSize) + { + this.relativeSize = relativeSize; + return this; + } + + public CelestialBody setRelativeDistanceFromCenter(ScalableDistance relativeDistanceFromCenter) + { + this.relativeDistanceFromCenter = relativeDistanceFromCenter; + return this; + } + + public CelestialBody setPhaseShift(float phaseShift) + { + this.phaseShift = phaseShift; + return this; + } + + public CelestialBody setRelativeOrbitTime(float relativeOrbitTime) + { + this.relativeOrbitTime = relativeOrbitTime; + return this; + } + + public CelestialBody setAtmosphere(AtmosphereInfo atmos) + { + this.atmosphere = atmos; + return this; + } + + public CelestialBody setDimensionInfo(int dimID, Class providerClass) + { + return this.setDimensionInfo(dimID, providerClass, true); + } + + public CelestialBody setDimensionInfo(int providerId, Class providerClass, boolean autoRegister) + { + this.dimensionID = providerId; + this.providerClass = providerClass; + this.autoRegisterDimension = autoRegister; + this.isReachable = true; + return this; + } + + public boolean shouldAutoRegister() + { + return this.autoRegisterDimension; + } + + public int getDimensionID() + { + return this.dimensionID; + } + + public Class getWorldProvider() + { + return this.providerClass; + } + + public boolean isReachable() + { + return this.isReachable; + } + + /* + * Use this to list the atmospheric gases on the celestial body, starting with the most abundant Do not include trace gases (anything less than 0.25%) (Do not use for stars!) + */ + public CelestialBody atmosphereComponents(EnumAtmosphericGas... gasses) + { + this.atmosphere.composition.addAll(Arrays.asList(gasses)); + return this; + } + + /* + * Use this to list the atmospheric gases on the celestial body, starting with the most abundant Do not include trace gases (anything less than 0.25%) (Do not use for stars!) + */ + public CelestialBody atmosphereComponents(Collection collection) + { + this.atmosphere.composition.addAll(collection); + return this; + } + + /* + * Use this to list the atmospheric gases on the celestial body, starting with the most abundant Do not include trace gases (anything less than 0.25%) (Do not use for stars!) + */ + public CelestialBody atmosphereComponent(EnumAtmosphericGas gas) + { + this.atmosphere.composition.add(gas); + return this; + } + + public CelestialBody setRingColorRGB(float ringColorR, float ringColorG, float ringColorB) + { + this.ringColorR = ringColorR; + this.ringColorG = ringColorG; + this.ringColorB = ringColorB; + return this; + } + + public float getRingColorR() + { + return this.ringColorR; + } + + public float getRingColorG() + { + return this.ringColorG; + } + + public float getRingColorB() + { + return this.ringColorB; + } + + public ResourceLocation getBodyIcon() + { + return this.celestialBodyIcon; + } + + public CelestialBody setBodyIcon(ResourceLocation planetIcon) + { + this.celestialBodyIcon = planetIcon; + return this; + } + + public boolean getForceStaticLoad() + { + return this.forceStaticLoad; + } + + public CelestialBody setForceStaticLoad(boolean force) + { + this.forceStaticLoad = force; + return this; + } + + public void addChecklistKeys(String... keys) + { + this.checklistKeys.addAll(Arrays.asList(keys)); + } + + public List getChecklistKeys() + { + return this.checklistKeys; + } + + @Override + public int hashCode() + { + return this.getTranslationKey().hashCode(); + } + + @Override + public boolean equals(Object other) + { + if (other instanceof CelestialBody) + { + return new EqualsBuilder().append(this.getTranslationKey(), ((CelestialBody) other).getTranslationKey()).isEquals(); + } + + return false; + } + + @Override + public int compareTo(CelestialBody other) + { + ScalableDistance thisDistance = this.getRelativeDistanceFromCenter(); + ScalableDistance otherDistance = other.getRelativeDistanceFromCenter(); + return otherDistance.unScaledDistance < thisDistance.unScaledDistance ? 1 : (otherDistance.unScaledDistance > thisDistance.unScaledDistance ? -1 : 0); + } + + public static class ScalableDistance + { + + public final float unScaledDistance; + public final float scaledDistance; + + public ScalableDistance(float unScaledDistance, float scaledDistance) + { + this.unScaledDistance = unScaledDistance; + this.scaledDistance = scaledDistance; + } + + public ScalableDistance(float distance) + { + this(distance, distance); + } + } + + public static Predicate filterReachable() + { + return new Predicate() + { + + @Override + public boolean test(CelestialBody celestialObject) + { + return celestialObject.isReachable(); + } + }; + } + + public void setUnreachable() + { + this.isReachable = false; + } + + public String getDimensionSuffix() + { + return dimensionSuffix; + } + + public void setDimensionSuffix(String dimensionSuffix) + { + this.dimensionSuffix = dimensionSuffix; + } + + public void setBiomeInfo(Biome... biomes) + { + this.biomeInfo = new LinkedList<>(); + this.biomesToGenerate = new LinkedList<>(); + LinkedList adaptiveBiomes = new LinkedList<>(); + int index = 0; + for (Biome b : biomes) + { + this.biomeInfo.add(b); + if (b instanceof BiomeGenBaseGC && ((BiomeGenBaseGC) b).isAdaptiveBiome) + { + this.biomesToGenerate.add(BiomeAdaptive.register(index++, (BiomeGenBaseGC) b)); + adaptiveBiomes.add((BiomeGenBaseGC) b); + } else + { + this.biomesToGenerate.add(b); + } + } + this.biomesToAdapt = adaptiveBiomes.toArray(new BiomeGenBaseGC[adaptiveBiomes.size()]); + } + + public List getBiomes() + { + return this.biomeInfo; + } + + public void addMobInfo(SpawnListEntry entry) + { + if (this.mobInfo == null) + { + this.mobInfo = new LinkedList<>(); + } + this.mobInfo.add(entry); + } + + public void initialiseMobSpawns() + { + if (this.biomeInfo != null && this.mobInfo != null) + { + for (Biome biome : this.biomeInfo) + { + if (biome instanceof IMobSpawnBiome) + { + ((IMobSpawnBiome) biome).initialiseMobLists(this.mobInfo); + } + } + } + } + + public List getSurfaceBlocks() + { + if (this.providerClass != null && IGalacticraftWorldProvider.class.isAssignableFrom(this.providerClass)) + { + try + { + return ((IGalacticraftWorldProvider) this.providerClass.newInstance()).getSurfaceBlocks(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + return null; + } + + // DEPRECIATED METHODS + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("isReachable()") + public boolean getReachable() + { + return isReachable(); + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("getCelestialType().getName()") + public String getUnlocalizedNamePrefix() + { + return "unset"; + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("getTranslationKey()") + public String getUnlocalizedName() + { + return getTranslationKey(); + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("getTranslatedName()") + public String getLocalizedName() + { + return getTranslatedName(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialObject.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialObject.java new file mode 100644 index 00000000..55c78fa7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialObject.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import java.util.function.Predicate; + +//import lombok.Setter; +import net.minecraft.util.text.translation.I18n; + +import lombok.Setter; + +public abstract class CelestialObject implements ICelestial +{ + + protected final String bodyName; + @Setter + private CelestialType type; + @Setter + public String ownerId; + + public CelestialObject(CelestialType type, String bodyName) + { + this(bodyName); + this.type = type; + } + + public CelestialObject(String bodyName) + { + this.bodyName = bodyName; + } + + @Override + public String getName() + { + return this.bodyName; + } + + public String getTranslationKey() + { + return this.getCelestialType().toString() + "." + bodyName; + } + + @Override + public CelestialType getCelestialType() + { + return this.type; + } + + public String getOwnerId() + { + return this.ownerId; + } + + public String getTranslatedName() + { + return I18n.translateToLocal(this.getTranslationKey()); + } + + public boolean isEqualTo(CelestialType celestialType, String name) + { + return type.equals(celestialType) && bodyName.equalsIgnoreCase(name); + } + + public static Predicate filter(String modId) + { + return new Predicate() + { + + @Override + public boolean test(CelestialObject celestialObject) + { + return celestialObject.getOwnerId().equals(modId); + } + }; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialType.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialType.java new file mode 100644 index 00000000..da5d361a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialType.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; + +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode +public final class CelestialType +{ + + private static final Map byName = new HashMap<>(); + private static Collection allTypes = Collections.unmodifiableCollection(byName.values()); + + public static final CelestialType SATELLITE = new CelestialType("satellite"); + public static final CelestialType MOON = new CelestialType("moon"); + public static final CelestialType PLANET = new CelestialType("planet"); + public static final CelestialType STAR = new CelestialType("star"); + public static final CelestialType SOLARSYSTEM = new CelestialType("solarsystem"); + + private final String name; + + public static CelestialType create(String name) + { + return new CelestialType(name.toLowerCase()); + } + + private CelestialType(String name) + { + this.name = name; + byName.put(name, this); + } + + public String getName() + { + return name; + } + + @Override + public String toString() + { + return name; + } + + public String getPrefix() + { + return name + "."; + } + + public static Collection getAllNames() + { + return allTypes.stream().map(t -> t.getName()).collect(Collectors.toList()); + } + + public static Collection getAll() + { + return allTypes; + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/GalaxyRegistry.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/GalaxyRegistry.java new file mode 100644 index 00000000..819532b9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/GalaxyRegistry.java @@ -0,0 +1,399 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.event.celestial.RegisterEvent; +import micdoodle8.mods.galacticraft.api.util.stream.CelestialCollector; +import micdoodle8.mods.galacticraft.core.util.list.CelestialList; +import micdoodle8.mods.galacticraft.core.util.list.ImmutableCelestialList; + +public class GalaxyRegistry +{ + + static CelestialList solarSystems = CelestialList.create(); + static CelestialList planets = CelestialList.create(); + static CelestialList moons = CelestialList.create(); + static CelestialList satellites = CelestialList.create(); + static CelestialList objects = CelestialList.create(); + static Map> moonList = new HashMap<>(); + static Map> satelliteList = new HashMap<>(); + static Map> solarSystemList = new HashMap<>(); + + public static void refreshGalaxies() + { + moonList.clear(); + satelliteList.clear(); + solarSystemList.clear(); + for (Moon moon : getMoons()) + { + Planet planet = moon.getParentPlanet(); + CelestialList list = moonList.get(planet); + if (list == null) + { + list = CelestialList.create(); + } + list.add(moon); + moonList.put(planet, list); + } + for (Satellite satellite : getSatellites()) + { + CelestialBody celestialBody = satellite.getParentPlanet(); + CelestialList list = satelliteList.get(celestialBody); + if (list == null) + { + list = CelestialList.create(); + } + list.add(satellite); + satelliteList.put(celestialBody, list); + } + for (Planet planet : getPlanets()) + { + SolarSystem solarSystem = planet.getParentSolarSystem(); + CelestialList list = solarSystemList.get(solarSystem); + if (list == null) + { + list = CelestialList.create(); + } + list.add(planet); + solarSystemList.put(solarSystem, list); + } + } + + /** + * Returns the CelestialObject that matches the given TranslationKey. Iterates through EVERY registerd object + * + * @param translationkey + * + * @return CelestialObject + */ + public static CelestialObject getCelestialObjectFromTranslationKey(String translationkey) + { + for (CelestialObject celestialObject : objects) + { + if (celestialObject.getTranslationKey().equals(translationkey)) + { + return celestialObject; + } + } + return null; + } + + /** + * Returns the CelestialBody of the given DimensionID. Iterates through, Planets, Moons & Satellites only + * + * @param dimensionID the DIM Id of the CelestialBody + * + * @return CelestialBody with the DimensionID provided + */ + public static CelestialBody getCelestialBodyFromDimensionID(int dimensionID) + { + for (Planet planet : planets) + { + if (planet.getDimensionID() == dimensionID) + { + return planet; + } + } + for (Moon moon : moons) + { + if (moon.getDimensionID() == dimensionID) + { + return moon; + } + } + for (Satellite satellite : satellites) + { + if (satellite.getDimensionID() == dimensionID) + { + return satellite; + } + } + return null; + } + + public static List getPlanetsForSolarSystem(SolarSystem solarSystem) + { + if (solarSystemList.get(solarSystem) == null) + { + return new ArrayList<>(); + } + return solarSystemList.get(solarSystem); + } + + public static List getMoonsForPlanet(Planet planet) + { + if (moonList.get(planet) == null) + { + return new ArrayList<>(); + } + return moonList.get(planet); + } + + public static List getSatellitesForCelestialBody(CelestialBody celestialBody) + { + if (satelliteList.get(celestialBody) == null) + { + return new ArrayList<>(); + } + return satelliteList.get(celestialBody); + } + + public static CelestialBody getPlanetOrMoonFromTranslationkey(String translationKey) + { + for (Planet planet : planets) + { + if (planet.getTranslationKey().equals(translationKey)) + { + return planet; + } + } + for (Moon moon : moons) + { + if (moon.getTranslationKey().equals(translationKey)) + { + return moon; + } + } + return null; + } + + public static void register(Object object) + { + if (object instanceof SolarSystem) + { + SolarSystem solarSystem = (SolarSystem) object; + RegisterEvent registerEvent = new RegisterEvent(solarSystem, Loader.instance().activeModContainer()); + solarSystems.add(solarSystem); + objects.add(solarSystem); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + if (object instanceof Planet) + { + Planet planet = (Planet) object; + RegisterEvent registerEvent = new RegisterEvent(planet, Loader.instance().activeModContainer()); + planets.add(planet); + objects.add(planet); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + if (object instanceof Moon) + { + Moon moon = (Moon) object; + RegisterEvent registerEvent = new RegisterEvent(moon, Loader.instance().activeModContainer()); + moons.add(moon); + objects.add(moon); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + if (object instanceof Satellite) + { + Satellite satellite = (Satellite) object; + RegisterEvent registerEvent = new RegisterEvent(satellite, Loader.instance().activeModContainer()); + satellites.add(satellite); + objects.add(satellite); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + if (object instanceof CelestialBody) + { + CelestialBody celestialType = (CelestialBody) object; + String unlocalizedPrefix = ((CelestialBody) object).getUnlocalizedNamePrefix(); + if (!unlocalizedPrefix.equals("unset")) + { + ((CelestialBody) object).setType(CelestialType.create(unlocalizedPrefix)); + } + RegisterEvent registerEvent = new RegisterEvent(celestialType, Loader.instance().activeModContainer()); + objects.add(celestialType); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + } + + /** + * Returns a read-only list containing all registered CelestialObjects + */ + public static ImmutableCelestialList getAllRegisteredObjects() + { + return ImmutableCelestialList.of(objects); + } + + /** + * Returns a read-only list containing all registered Solar Systems + */ + public static ImmutableCelestialList getSolarSystems() + { + return ImmutableCelestialList.of(solarSystems); + } + + /** + * Returns a read-only list containing all registered Planets + */ + public static ImmutableCelestialList getPlanets() + { + return ImmutableCelestialList.of(planets); + } + + /** + * Returns a read-only list containing all registered Moons + */ + public static ImmutableCelestialList getMoons() + { + return ImmutableCelestialList.of(moons); + } + + /** + * Returns a read-only list containing all registered Satellites + */ + public static ImmutableCelestialList getSatellites() + { + return ImmutableCelestialList.of(satellites); + } + + /** + * Returns a read-only list containing all CelestialObjects that are reachable + */ + public static ImmutableCelestialList getAllReachableBodies() + {//@noformat + return ImmutableCelestialList.from( + planets.stream().filter(CelestialBody.filterReachable()).collect(CelestialCollector.toList()), + moons.stream().filter(CelestialBody.filterReachable()).collect(CelestialCollector.toList()) + ); + } + + /** + * Returns a read-only list containing all CelestialObjects registered by the provided ModContainer + */ + public static ImmutableCelestialList getCelestialObjectsFromMod(ModContainer modContainer) + { + return getCelestialObjectsFromMod(modContainer.getModId()); + } + + /** + * Returns a read-only list containing all CelestialObjects registered by the provided modId + */ + public static ImmutableCelestialList getCelestialObjectsFromMod(String modId) + { + return objects.stream().filter(CelestialObject.filter(modId)).collect(CelestialCollector.toList()).toUnmodifiableList(); + } + + public static String[] getAllTransltionKeys() + { + return objects.stream().map(key -> key.getTranslationKey()).collect(Collectors.toList()).toArray(new String[objects.size()]); + } + + // -- DEPRECIATED METHODS -- // + + /** + * @ReplaceWith {@link GalaxyRegistry#getPlanetOrMoonFromTranslationkey(String translationKey)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getPlanetOrMoonFromTranslationkey(String translationKey)") + public static CelestialBody getCelestialBodyFromUnlocalizedName(String unlocalizedName) + { + return getPlanetOrMoonFromTranslationkey(unlocalizedName); + } + + /** + * @ReplaceWith {@link GalaxyRegistry#register(T object)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.register(T object)") + public static boolean registerSolarSystem(SolarSystem solarSystem) + { + GalaxyRegistry.register(solarSystem); + return solarSystems.contains(solarSystem); + } + + /** + * @ReplaceWith {@link GalaxyRegistry#register(T object)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.register(T object)") + public static boolean registerPlanet(Planet planet) + { + GalaxyRegistry.register(planet); + return planets.contains(planet); + } + + /** + * @ReplaceWith {@link GalaxyRegistry#register(T object)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.register(T object)") + public static boolean registerMoon(Moon moon) + { + GalaxyRegistry.register(moon); + return moons.contains(moon); + } + + /** + * @ReplaceWith {@link GalaxyRegistry#register(T object)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.register(T object)") + public static boolean registerSatellite(Satellite satellite) + { + GalaxyRegistry.register(satellite); + return satellites.contains(satellite); + } + + /** + * Returns a read-only map containing Solar System Names and their associated Solar Systems. + * + * @ReplaceWith {@link GalaxyRegistry#getSolarSystems()} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getSolarSystems()") + public static Map getRegisteredSolarSystems() + { + return solarSystems.getRegistered(); + } + + /** + * Returns a read-only map containing Planet Names and their associated Planets. + * + * @ReplaceWith {@link GalaxyRegistry#getPlanets()} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getPlanets()") + public static Map getRegisteredPlanets() + { + return planets.getRegistered(); + } + + /** + * Returns a read-only map containing Moon Names and their associated Moons. + * + * @ReplaceWith {@link GalaxyRegistry#getMoons()} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getMoons()") + public static Map getRegisteredMoons() + { + return moons.getRegistered(); + } + + /** + * Returns a read-only map containing Satellite Names and their associated Satellite. + * + * @ReplaceWith {@link GalaxyRegistry#getSatellites()} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getSatellites()") + public static Map getRegisteredSatellites() + { + return satellites.getRegistered(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/ICelestial.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/ICelestial.java new file mode 100644 index 00000000..922dc191 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/ICelestial.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +public interface ICelestial +{ + + public String getName(); + + public CelestialType getCelestialType(); + + public void setOwnerId(String ownerId); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/IChildBody.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/IChildBody.java new file mode 100644 index 00000000..764e3b09 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/IChildBody.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +public interface IChildBody +{ + Planet getParentPlanet(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Moon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Moon.java new file mode 100644 index 00000000..fd76c93e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Moon.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +public class Moon extends CelestialBody implements IChildBody +{ + protected Planet parentPlanet = null; + + public Moon(String moonName) + { + super(CelestialType.MOON, moonName); + } + + public Moon setParentPlanet(Planet planet) + { + this.parentPlanet = planet; + return this; + } + + @Override + public Planet getParentPlanet() + { + return this.parentPlanet; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Planet.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Planet.java new file mode 100644 index 00000000..4463a786 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Planet.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import net.minecraft.world.biome.Biome.SpawnListEntry; + +public class Planet extends CelestialBody +{ + protected SolarSystem parentSolarSystem = null; + + public Planet(String planetName) + { + super(CelestialType.PLANET, planetName); + } + + public SolarSystem getParentSolarSystem() + { + return this.parentSolarSystem; + } + + public Planet setParentSolarSystem(SolarSystem galaxy) + { + this.parentSolarSystem = galaxy; + return this; + } + + public static void addMobToSpawn(String planetName, SpawnListEntry mobData) + { + GalaxyRegistry.getPlanetOrMoonFromTranslationkey("planet." + planetName).addMobInfo(mobData); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Satellite.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Satellite.java new file mode 100644 index 00000000..773c9d84 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Satellite.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import net.minecraft.world.WorldProvider; + +public class Satellite extends CelestialBody implements IChildBody +{ + protected Planet parentCelestialBody = null; + protected int dimensionIdStatic = 0; + + public Satellite(String satelliteName) + { + super(CelestialType.SATELLITE, satelliteName); + } + + @Override + public Planet getParentPlanet() + { + return this.parentCelestialBody; + } + + public Satellite setParentBody(Planet parentCelestialBody) + { + this.parentCelestialBody = parentCelestialBody; + return this; + } + + public CelestialBody setDimensionInfo(int providerIdDynamic, int providerIdStatic, Class providerClass) + { + this.dimensionIdStatic = providerIdStatic; + return super.setDimensionInfo(providerIdDynamic, providerClass, false); + } + + public int getDimensionIdStatic() + { + return dimensionIdStatic; + } + + @Override + @Deprecated + public CelestialBody setDimensionInfo(int providerId, Class providerClass, boolean autoRegister) + { + throw new UnsupportedOperationException("Satellite registered using an outdated method (setDimensionInfo)! Tell Galacticraft addon authors to update to the latest API."); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/SolarSystem.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/SolarSystem.java new file mode 100644 index 00000000..ba8ee5e7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/SolarSystem.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +public class SolarSystem extends CelestialObject +{ + + protected Vector3 mapPosition = null; + protected Star mainStar = null; + protected String unlocalizedGalaxyName; + + public SolarSystem(String solarSystem, String parentGalaxy) + { + super(CelestialType.SOLARSYSTEM, solarSystem); + this.unlocalizedGalaxyName = parentGalaxy; + } + + @Override + public void setOwnerId(String ownerId) + { + super.setOwnerId(ownerId); + } + + public Vector3 getMapPosition() + { + return this.mapPosition; + } + + public SolarSystem setMapPosition(Vector3 mapPosition) + { + mapPosition.scale(500D); + this.mapPosition = mapPosition; + return this; + } + + public Star getMainStar() + { + return this.mainStar; + } + + public SolarSystem setMainStar(Star star) + { + this.mainStar = star; + return this; + } + + public String getTranslatedParentGalaxyName() + { + return super.getTranslatedName(); + } + + public String getParentGalaxyTranslationKey() + { + return "galaxy." + this.unlocalizedGalaxyName; + } + + // DEPRECATED METHODS + + @Deprecated + @ReplaceWith("getTranslationKey()") + public String getUnlocalizedName() + { + return getTranslationKey(); + } + + @Deprecated + @ReplaceWith("getTranslatedName()") + public String getLocalizedName() + { + return getTranslatedName(); + } + + @Deprecated + @ReplaceWith("getTranslatedParentGalaxyName()") + public String getLocalizedParentGalaxyName() + { + return getTranslatedParentGalaxyName(); + } + + @Deprecated + @ReplaceWith("getParentGalaxyTranslationKey()") + public String getUnlocalizedParentGalaxyName() + { + return "galaxy." + this.unlocalizedGalaxyName; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Star.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Star.java new file mode 100644 index 00000000..056640a4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Star.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +public class Star extends CelestialBody + +{ + protected SolarSystem parentSolarSystem = null; + + public Star(String planetName) + { + super(CelestialType.STAR, planetName); + } + + public SolarSystem getParentSolarSystem() + { + return this.parentSolarSystem; + } + + public Star setParentSolarSystem(SolarSystem galaxy) + { + this.parentSolarSystem = galaxy; + return this; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/package-info.java new file mode 100644 index 00000000..03d50e62 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|galaxies") +package micdoodle8.mods.galacticraft.api.galaxies; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/AccessInventoryGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/AccessInventoryGC.java new file mode 100644 index 00000000..0df2762c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/AccessInventoryGC.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.inventory; + +import java.lang.reflect.Method; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; + +/** + * A static method for other mods to access the Galacticraft extended inventory. + * + * Call: AccessInventoryGC.getGCInventoryForPlayer(player) + */ +public class AccessInventoryGC +{ + + private static Class playerStatsClass; + private static Method getStats; + private static Method getExtendedInventory; + + public static IInventoryGC getGCInventoryForPlayer(EntityPlayerMP player) + { + try + { + if (playerStatsClass == null || getStats == null || getExtendedInventory == null) + { + playerStatsClass = Class.forName("micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats"); + getStats = playerStatsClass.getMethod("get", Entity.class); + getExtendedInventory = playerStatsClass.getMethod("getExtendedInventory"); + } + + Object stats = getStats.invoke(null, player); + if (stats == null) + { + return null; + } + return (IInventoryGC) getExtendedInventory.invoke(stats); + } catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/IInventoryGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/IInventoryGC.java new file mode 100644 index 00000000..93da4ca3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/IInventoryGC.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; + +/** + * An interface for other mods to access the Galacticraft extended inventory + * slots. + * + * (All normal IInventory methods will work) + */ +public interface IInventoryGC extends IInventory +{ + + /** + * Drop only the Galacticraft items from the player's inventory. + * + * @param player + */ + void dropExtendedItems(EntityPlayer player); + + /** + * Make the implementing inventory a copy of the specified extended + * inventory. + * + * @param par1InventoryPlayer The inventory to copy + */ + void copyInventory(IInventoryGC par1InventoryPlayer); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ElectricItemHelper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ElectricItemHelper.java new file mode 100644 index 00000000..7f368dd1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ElectricItemHelper.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +/** + * Some helper functions for electric items. + * + * @author Calclavia + */ +public class ElectricItemHelper +{ + + /** + * Recharges an electric item. + * + * @param joules - The joules being provided to the electric item + * @return The total amount of joules provided by the provider. + */ + public static float chargeItem(ItemStack itemStack, float joules) + { + if (itemStack != null) + { + if (itemStack.getItem() instanceof IItemElectric) + { + return ((IItemElectric) itemStack.getItem()).recharge(itemStack, Math.min(((IItemElectric) itemStack.getItem()).getTransfer(itemStack), joules), true); + } + } + + return 0; + } + + /** + * Decharges an electric item. + * + * @param joules - The joules being withdrawn from the electric item + * @return The total amount of joules the provider received. + */ + public static float dischargeItem(ItemStack itemStack, float joules) + { + if (itemStack != null) + { + if (itemStack.getItem() instanceof IItemElectric) + { + return ((IItemElectric) itemStack.getItem()).discharge(itemStack, Math.min(((IItemElectric) itemStack.getItem()).getMaxElectricityStored(itemStack), joules), true); + } + } + + return 0; + } + + /** + * Returns an uncharged version of the electric item. Use this if you want + * the crafting recipe to use a charged version of the electric item instead + * of an empty version of the electric item + * + * @return An electrical ItemStack with a specific charge. + */ + public static ItemStack getWithCharge(ItemStack itemStack, float joules) + { + if (itemStack != null) + { + if (itemStack.getItem() instanceof IItemElectric) + { + ((IItemElectric) itemStack.getItem()).setElectricity(itemStack, joules); + return itemStack; + } + } + + return itemStack; + } + + public static ItemStack getWithCharge(Item item, float joules) + { + return ElectricItemHelper.getWithCharge(new ItemStack(item), joules); + } + + public static ItemStack getCloneWithCharge(ItemStack itemStack, float joules) + { + return ElectricItemHelper.getWithCharge(itemStack.copy(), joules); + } + + public static ItemStack getUncharged(ItemStack itemStack) + { + return ElectricItemHelper.getWithCharge(itemStack, 0); + } + + public static ItemStack getUncharged(Item item) + { + return ElectricItemHelper.getUncharged(new ItemStack(item)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/EnumExtendedInventorySlot.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/EnumExtendedInventorySlot.java new file mode 100644 index 00000000..4dc8c41a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/EnumExtendedInventorySlot.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +public enum EnumExtendedInventorySlot +{ + MASK, GEAR, LEFT_TANK, RIGHT_TANK, PARACHUTE, FREQUENCY_MODULE, THERMAL_HELMET, THERMAL_CHESTPLATE, THERMAL_LEGGINGS, THERMAL_BOOTS, SHIELD_CONTROLLER +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/GCRarity.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/GCRarity.java new file mode 100644 index 00000000..14bea4f5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/GCRarity.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.common.IRarity; + +public interface GCRarity extends IRarity +{ + @Override + default TextFormatting getColor() + { + return TextFormatting.BLUE; + } + + @Override + default String getName() + { + return "Space"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorCorrosionResistant.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorCorrosionResistant.java new file mode 100644 index 00000000..31f6e72e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorCorrosionResistant.java @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +public interface IArmorCorrosionResistant +{ +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorGravity.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorGravity.java new file mode 100644 index 00000000..231ac37b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorGravity.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; + +public interface IArmorGravity +{ + + /** + * Effective on worlds where the Galacticraft gravity is less than Overworld + * normal. + * + * @return value between 0 and 100 (other values have undefined results) 0 = + * standard Galacticraft gravity for the world 50 = mid=way 100 = + * gravity as if the player was on the Overworld (the armor makes + * the player heavy) + * + * The total effect will be cumulative for all pieces of + * IArmorGravity armor worn. + */ + int gravityOverrideIfLow(EntityPlayer p); + + /** + * Effective on worlds where the Galacticraft gravity is higher than + * Overworld normal. + * + * @return value between 0 and 100 (other values have undefined results) 0 = + * standard Galacticraft gravity for the world 50 = mid=way 100 = + * gravity as if the player was on the Overworld (the armor makes + * the player lighter / stronger) + * + * The total effect will be cumulative for all pieces of + * IArmorGravity armor worn. + */ + int gravityOverrideIfHigh(EntityPlayer p); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IBreathableArmor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IBreathableArmor.java new file mode 100644 index 00000000..711a92f6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IBreathableArmor.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** + * Implement into Armor items + */ +public interface IBreathableArmor +{ + + enum EnumGearType + { + HELMET, GEAR, TANK1, TANK2 + } + + /** + * @param gearType The gear type to be handled + * @return true if the passed gear type should be handled by this armor item + */ + boolean handleGearType(EnumGearType gearType); + + /** + * Determines if armor item is currently valid for breathing + * + * @param helmetInSlot The armor itemstack + * @param playerWearing The player wearing the armor + * @param type The oxygen gear type @see EnumGearType + * @return true if this armor item is valid for the provided oxygen gear + * type + */ + boolean canBreathe(ItemStack helmetInSlot, EntityPlayer playerWearing, EnumGearType type); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItem.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItem.java new file mode 100644 index 00000000..7cfb3154 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItem.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; + +/** + * Implement into an item class to allow player to hold it above their head + */ +public interface IHoldableItem +{ + + /** + * Self-explanatory.

Use player.inventory.getCurrentItem() to get the + * itemstack + * + * @param player the player holding the item + * @return true if player should hold the item above their head + */ + boolean shouldHoldLeftHandUp(EntityPlayer player); + + /** + * Self-explanatory.

Use player.inventory.getCurrentItem() to get the + * itemstack + * + * @param player the player holding the item + * @return true if player should hold the item above their head + */ + boolean shouldHoldRightHandUp(EntityPlayer player); + + /** + * Used to determine if player should crouch while holding this item.

+ * Use player.inventory.getCurrentItem() to get the itemstack + * + * @param player the player holding the item + * @return true if player should hold the item above their head + */ + boolean shouldCrouch(EntityPlayer player); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItemCustom.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItemCustom.java new file mode 100644 index 00000000..231967ea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItemCustom.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.entity.player.EntityPlayer; + +public interface IHoldableItemCustom extends IHoldableItem +{ + + Vector3 getLeftHandRotation(EntityPlayer player); + + Vector3 getRightHandRotation(EntityPlayer player); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectric.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectric.java new file mode 100644 index 00000000..7bdd3100 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectric.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +public interface IItemElectric +{ + + /** + * Adds energy to an item. Returns the quantity of energy that was accepted. + * This should always return 0 if the item cannot be externally charged. + * + * @param itemStack ItemStack to be charged. + * @param energy Maximum amount of energy to be sent into the item. + * @param doRecharge If false, the charge will only be simulated. + * @return Amount of energy that was accepted by the item. + */ + float recharge(ItemStack itemStack, float energy, boolean doRecharge); + + /** + * Removes energy from an item. Returns the quantity of energy that was + * removed. This should always return 0 if the item cannot be externally + * discharged. + * + * @param itemStack ItemStack to be discharged. + * @param energy Maximum amount of energy to be removed from the item. + * @param doDischarge If false, the discharge will only be simulated. + * @return Amount of energy that was removed from the item. + */ + float discharge(ItemStack itemStack, float energy, boolean doDischarge); + + /** + * Get the amount of energy currently stored in the item. + */ + float getElectricityStored(ItemStack theItem); + + /** + * Get the max amount of energy that can be stored in the item. + */ + float getMaxElectricityStored(ItemStack theItem); + + /** + * Sets the amount of energy in the ItemStack. + * + * @param itemStack - the ItemStack. + * @param joules - Amount of electrical energy. + */ + void setElectricity(ItemStack itemStack, float joules); + + /** + * @return the energy request this ItemStack demands. + */ + float getTransfer(ItemStack itemStack); + + /** + * @return The energy tier this item runs on (must be 1 or 2) + */ + int getTierGC(ItemStack itemStack); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectricBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectricBase.java new file mode 100644 index 00000000..64b90f42 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectricBase.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +/** + * Interface version of + * micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase For use in + * electrical ItemArmor, or other items which must extend different classes + */ +public interface IItemElectricBase extends IItemElectric +{ + + float getMaxTransferGC(ItemStack itemStack); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemOxygenSupply.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemOxygenSupply.java new file mode 100644 index 00000000..d6c03d24 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemOxygenSupply.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +public interface IItemOxygenSupply +{ + + /* + * Returns the amount of gas that this oxygen item is able to supply + */ + int discharge(ItemStack itemStack, int amount); + + int getOxygenStored(ItemStack theItem); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemThermal.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemThermal.java new file mode 100644 index 00000000..36147357 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemThermal.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +public interface IItemThermal +{ + + /** + * The thermal strength of this armor. Value for first tier thermal padding + * is 1. + */ + int getThermalStrength(); + + /** + * Returns whether the provided itemstack is valid for the armor slot: + * + * @param stack The item to test + * @param armorSlot 0 - helmet 1 - chestplate 2 - leggings 3 - boots + */ + boolean isValidForSlot(ItemStack stack, int armorSlot); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyItem.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyItem.java new file mode 100644 index 00000000..684a19f5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyItem.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +/** + * Implement into a key Item class to allow @IKeyable tile entities to get + * activated while holding this item

Nothing here (yet) + */ +public interface IKeyItem +{ + + /** + * Gets the tier of this object + * + * @return - The item's tier + */ + int getTier(ItemStack stack); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyable.java new file mode 100644 index 00000000..6f3fd8a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyable.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +/** + * Implement into tile entities that do something upon being activated by a key + */ +public interface IKeyable +{ + + /** + * @return -1 for any tier, or return tier required for key activated to + * pass + */ + int getTierOfKeyRequired(); + + /** + * called when key of correct tier is clicked + * + * @param key the key itemstack + * @param face the block face clicked + * @return true if something was done, false if not + */ + boolean onValidKeyActivated(EntityPlayer player, ItemStack key, EnumFacing face); + + /** + * called when player is not holding correct tier of key, or any key at all + * + * @param player + * @return true if something was done, false if not + */ + boolean onActivatedWithoutKey(EntityPlayer player, EnumFacing face); + + boolean canBreak(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IPaintable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IPaintable.java new file mode 100644 index 00000000..895f1b78 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IPaintable.java @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.relauncher.Side; + +public interface IPaintable +{ + + int setColor(int color, EntityPlayer player, Side side); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ISensorGlassesArmor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ISensorGlassesArmor.java new file mode 100644 index 00000000..afdd370d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ISensorGlassesArmor.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +public interface ISensorGlassesArmor +{ + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/package-info.java new file mode 100644 index 00000000..ab3136f8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|item") +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/package-info.java new file mode 100644 index 00000000..45efc920 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI") +package micdoodle8.mods.galacticraft.api; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/EnergySource.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/EnergySource.java new file mode 100644 index 00000000..444316c5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/EnergySource.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.power; + +import java.util.List; +import net.minecraft.util.EnumFacing; + +public abstract class EnergySource +{ + + public static class EnergySourceWireless extends EnergySource + { + + public final List nodes; + + public EnergySourceWireless(List nodes) + { + this.nodes = nodes; + } + } + + public static class EnergySourceAdjacent extends EnergySource + { + + public final EnumFacing direction; + + public EnergySourceAdjacent(EnumFacing direction) + { + this.direction = direction; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyHandlerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyHandlerGC.java new file mode 100644 index 00000000..d01e330b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyHandlerGC.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.power; + +public interface IEnergyHandlerGC +{ + + /** + * Add energy from an external source + * + * @param from Energy Source that is providing power + * @param amount Maximum amount of energy to receive + * @param simulate If true, the transfer will only be simulated. + * @return The amount of energy that was successfully received (or would + * have been, if simulated). + */ + float receiveEnergyGC(EnergySource from, float amount, boolean simulate); + + /** + * Remove energy, transferring it to an external source + * + * @param from Energy Source that is extracting power + * @param amount Maximum amount of energy to extract + * @param simulate If true, the transfer will only be simulated. + * @return The amount of energy that was successfully extracted (or would + * have been, if simulated). + */ + float extractEnergyGC(EnergySource from, float amount, boolean simulate); + + /** + * Returns true if the handler can interface with the provided energy source + */ + boolean nodeAvailable(EnergySource from); + + /** + * Returns the amount of energy stored in this handler available to the + * provided source + */ + float getEnergyStoredGC(EnergySource from); + + /** + * Returns the maximum amount of energy stored in this handler available to + * the provided source + */ + float getMaxEnergyStoredGC(EnergySource from); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyStorageGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyStorageGC.java new file mode 100644 index 00000000..56be51b7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyStorageGC.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.power; + +public interface IEnergyStorageGC +{ + + /** + * Add energy to the storage. + * + * @param amount Maximum amount of energy to receive + * @param simulate If true, the transfer will only be simulated. + * @return The amount of energy that was successfully received (or would + * have been, if simulated). + */ + float receiveEnergyGC(float amount, boolean simulate); + + /** + * Remove energy from the storage. + * + * @param amount Maximum amount of energy to extract + * @param simulate If true, the transfer will only be simulated. + * @return The amount of energy that was successfully extracted (or would + * have been, if simulated). + */ + float extractEnergyGC(float amount, boolean simulate); + + /** + * Returns the amount of energy stored + */ + float getEnergyStoredGC(); + + /** + * Returns the maximum amount of energy stored + */ + float getCapacityGC(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/ILaserNode.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/ILaserNode.java new file mode 100644 index 00000000..5302deb2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/ILaserNode.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.power; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.tileentity.TileEntity; + +public interface ILaserNode extends IEnergyHandlerGC +{ + + Vector3 getInputPoint(); + + Vector3 getOutputPoint(boolean offset); + + ILaserNode getTarget(); + + TileEntity getTile(); + + boolean canConnectTo(ILaserNode node); + + Vector3 getColor(); + + void addNode(ILaserNode node); + + void removeNode(ILaserNode node); + + int compareTo(ILaserNode otherNode, BlockVec3 origin); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/package-info.java new file mode 100644 index 00000000..beba1628 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|power") +package micdoodle8.mods.galacticraft.api.power; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/BlockMetaPair.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/BlockMetaPair.java new file mode 100644 index 00000000..232af106 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/BlockMetaPair.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.core; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; + +/** + * Do not include this prefab class in your released mod download. + */ +@Deprecated +@ForRemoval(deadline = "4.1.0") +public class BlockMetaPair +{ + + private final Block block; + private final byte metadata; + + public BlockMetaPair(Block block, byte metadata) + { + this.block = block; + this.metadata = metadata; + } + + public Block getBlock() + { + return this.block; + } + + public byte getMetadata() + { + return this.metadata; + } + + public IBlockState getBlockState() + { + return this.block.getStateFromMeta(this.metadata); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/package-info.java new file mode 100644 index 00000000..63935107 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|prefab|core") +package micdoodle8.mods.galacticraft.api.prefab.core; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityAutoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityAutoRocket.java new file mode 100644 index 00000000..49e9a595 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityAutoRocket.java @@ -0,0 +1,1481 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.entity; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ClassInheritanceMultiMap; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IEntityNoisy; +import micdoodle8.mods.galacticraft.api.entity.ILandable; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPadFull; +import micdoodle8.mods.galacticraft.core.client.sounds.SoundUpdaterRocket; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.event.EventLandingPadRemoval; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; + +import io.netty.buffer.ByteBuf; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class EntityAutoRocket extends EntitySpaceshipBase implements ILandable, IInventory, IEntityNoisy +{ + + public int destinationFrequency = -1; + public BlockPos targetVec; + public int targetDimension; + protected NonNullList stacks; + private IFuelDock landingPad; + public EnumAutoLaunch autoLaunchSetting; + public int autoLaunchCountdown; + private BlockVec3 activeLaunchController; + + public String statusMessage; + public String statusColour; + public int statusMessageCooldown; + public int lastStatusMessageCooldown; + public boolean statusValid; + protected double lastMotionY; + protected double lastLastMotionY; + private boolean waitForPlayer; + protected ITickable rocketSoundUpdater; + private boolean rocketSoundToStop = false; + private static Class controllerClass = TileEntityLaunchController.class; + + public EntityAutoRocket(World world) + { + super(world); + + if (world != null && world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + public EntityAutoRocket(World world, double posX, double posY, double posZ) + { + this(world); + this.setSize(0.98F, 2F); + this.setPosition(posX, posY, posZ); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = posX; + this.prevPosY = posY; + this.prevPosZ = posZ; + } + + // Used for Cargo Rockets, client is asking the server what is the status + public boolean checkLaunchValidity() + { + this.statusMessageCooldown = 40; + + if (this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.UNIGNITED.ordinal() && !this.world.isRemote) + { + if (!this.setFrequency()) + { + this.destinationFrequency = -1; + this.statusMessage = I18n.translateToLocal("gui.message.frequency.name") + "#" + I18n.translateToLocal("gui.message.not_set.name"); + this.statusColour = "\u00a7c"; + return false; + } + else + { + this.statusMessage = I18n.translateToLocal("gui.message.success.name"); + this.statusColour = "\u00a7a"; + return true; + } + } + } + else + { + this.destinationFrequency = -1; + this.statusMessage = I18n.translateToLocal("gui.message.not_enough.name") + "#" + I18n.translateToLocal("gui.message.fuel.name"); + this.statusColour = "\u00a7c"; + return false; + } + + this.destinationFrequency = -1; + return false; + } + + public boolean setFrequency() + { + if (this.activeLaunchController != null) + { + TileEntity launchController = this.activeLaunchController.getTileEntity(this.world); + if (controllerClass.isInstance(launchController)) + { + try + { + Boolean b = (Boolean) controllerClass.getMethod("validFrequency").invoke(launchController); + + if (b != null && b) + { + int controllerFrequency = controllerClass.getField("destFrequency").getInt(launchController); + boolean foundPad = this.setTarget(false, controllerFrequency); + + if (foundPad) + { + this.destinationFrequency = controllerFrequency; + GalacticraftCore.logger.debug("Rocket under launch control: going to target frequency " + controllerFrequency); + return true; + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + this.destinationFrequency = -1; + return false; + } + + protected boolean setTarget(boolean doSet, int destFreq) + { + WorldServer[] servers = GCCoreUtil.getWorldServerList(this.world); + for (int i = 0; i < servers.length; i++) + { + WorldServer world = servers[i]; + + try + { + for (TileEntity tile : new ArrayList<>(world.loadedTileEntityList)) + { + if (!controllerClass.isInstance(tile)) + continue; + + tile = world.getTileEntity(tile.getPos()); + if (!controllerClass.isInstance(tile)) + continue; + + int controllerFrequency = controllerClass.getField("frequency").getInt(tile); + + if (destFreq == controllerFrequency) + { + boolean targetSet = false; + + blockLoop: for (int x = -2; x <= 2; x++) + { + for (int z = -2; z <= 2; z++) + { + BlockPos pos = new BlockPos(tile.getPos().add(x, 0, z)); + Block block = world.getBlockState(pos).getBlock(); + + if (block instanceof BlockLandingPadFull) + { + if (doSet) + { + this.targetVec = pos; + } + + targetSet = true; + break blockLoop; + } + } + } + + if (doSet) + { + this.targetDimension = tile.getWorld().provider.getDimension(); + } + + if (!targetSet) + { + if (doSet) + { + this.targetVec = null; + } + + return false; + } + else + { + return true; + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + return false; + } + + @Override + public int getScaledFuelLevel(int scale) + { + if (this.getFuelTankCapacity() <= 0) + { + return 0; + } + + return this.fuelTank.getFluidAmount() * scale / this.getFuelTankCapacity() / ConfigManagerCore.rocketFuelFactor; + } + + @Override + public void onUpdate() + { + // Workaround for a weird bug (?) in vanilla 1.8.9 where - if client + // view distance is shorter + // than the server's chunk loading distance - chunks will unload on the + // client, but the + // entity will still be in the WorldClient.loadedEntityList. This + // results in an entity which + // is in the world, not dead and still updating on both server and + // client, but not in any chunk's + // chunk.entityLists. Also, it won't be reloaded into any chunk's + // entityLists when the chunk comes + // back into viewing range - not sure why, maybe because it's already in + // the World.loadedEntityList? + // Because it's now not in any chunk's entityLists, it cannot be + // iterated for rendering by RenderGlobal, + // so it's gone invisible! + + // Tracing shows that Chunk.onChunkUnload() is called on the chunk + // clientside when the chunk goes + // out of the view distance. However, even after Chunk.onChunkUnload() - + // which should remove + // this entity from the WorldClient.loadedEntityList - this entity stays + // in the world loadedEntityList. + // That's why an onUpdate() tick is active for it, still! + // Weird, huh? + if (this.world.isRemote && this.addedToChunk && !CompatibilityManager.isCubicChunksLoaded) + { + Chunk chunk = this.world.getChunk(this.chunkCoordX, this.chunkCoordZ); + int cx = MathHelper.floor(this.posX) >> 4; + int cz = MathHelper.floor(this.posZ) >> 4; + if (chunk.isLoaded() && this.chunkCoordX == cx && this.chunkCoordZ == cz) + { + boolean thisfound = false; + ClassInheritanceMultiMap mapEntities = chunk.getEntityLists()[this.chunkCoordY]; + for (Entity ent : mapEntities) + { + if (ent == this) + { + thisfound = true; + break; + } + } + if (!thisfound) + { + chunk.addEntity(this); + } + } + } + + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.hasValidFuel()) + { + if (this.targetVec != null) + { + double yDiff = this.posY - this.getOnPadYOffset() - this.targetVec.getY(); + this.motionY = Math.max(-2.0, (yDiff - 0.04) / -55.0); + + // Some lateral motion in case not exactly on target (happens if + // rocket was moving laterally during launch) + double diff = this.posX - this.targetVec.getX() - 0.5D; + double motX, motZ; + if (diff > 0D) + { + motX = Math.max(-0.1, diff / -100.0D); + } + else if (diff < 0D) + { + motX = Math.min(0.1, diff / -100.0D); + } + else + motX = 0D; + diff = this.posZ - this.targetVec.getZ() - 0.5D; + if (diff > 0D) + { + motZ = Math.max(-0.1, diff / -100.0D); + } + else if (diff < 0D) + { + motZ = Math.min(0.1, diff / -100.0D); + } + else + motZ = 0D; + if (motZ != 0D || motX != 0D) + { + double angleYaw = Math.atan(motZ / motX); + double signed = motX < 0 ? 50D : -50D; + double anglePitch = Math.atan(Math.sqrt(motZ * motZ + motX * motX) / signed) * 100D; + this.rotationYaw = (float) angleYaw * Constants.RADIANS_TO_DEGREES; + this.rotationPitch = (float) anglePitch * Constants.RADIANS_TO_DEGREES; + } + else + this.rotationPitch = 0F; + + if (yDiff > 1D && yDiff < 4D) + { + for (Object o : this.world.getEntitiesInAABBexcluding(this, this.getEntityBoundingBox().offset(0D, -3D, 0D), EntitySpaceshipBase.rocketSelector)) + { + if (o instanceof EntitySpaceshipBase) + { + ((EntitySpaceshipBase) o).dropShipAsItem(); + ((EntitySpaceshipBase) o).setDead(); + } + } + } + if (yDiff < 0.4) + { + int yMin = MathHelper.floor(this.getEntityBoundingBox().minY - this.getOnPadYOffset() - 0.45D) - 2; + int yMax = MathHelper.floor(this.getEntityBoundingBox().maxY) + 1; + int zMin = MathHelper.floor(this.posZ) - 1; + int zMax = MathHelper.floor(this.posZ) + 1; + for (int x = MathHelper.floor(this.posX) - 1; x <= MathHelper.floor(this.posX) + 1; x++) + { + for (int z = zMin; z <= zMax; z++) + { + // Doing y as the inner loop may help with cacheing + // of chunks + for (int y = yMin; y <= yMax; y++) + { + if (this.world.getTileEntity(new BlockPos(x, y, z)) instanceof IFuelDock) + { + // Land the rocket on the pad found + this.rotationPitch = 0F; + this.failRocket(); + } + } + } + } + } + } + } + + super.onUpdate(); + + if (!this.world.isRemote) + { + if (this.statusMessageCooldown > 0) + { + this.statusMessageCooldown--; + } + + if (this.statusMessageCooldown == 0 && this.lastStatusMessageCooldown > 0 && this.statusValid) + { + this.autoLaunch(); + } + + if (this.autoLaunchCountdown > 0 && (!(this instanceof EntityTieredRocket) || !this.getPassengers().isEmpty())) + { + if (--this.autoLaunchCountdown <= 0) + { + this.autoLaunch(); + } + } + + if (this.autoLaunchSetting == EnumAutoLaunch.ROCKET_IS_FUELED && this.fuelTank.getFluidAmount() == this.fuelTank.getCapacity() && (!(this instanceof EntityTieredRocket) || !this.getPassengers().isEmpty())) + { + this.autoLaunch(); + } + + if (this.autoLaunchSetting == EnumAutoLaunch.INSTANT) + { + if (this.autoLaunchCountdown == 0 && (!(this instanceof EntityTieredRocket) || !this.getPassengers().isEmpty())) + { + this.autoLaunch(); + } + } + + if (this.autoLaunchSetting == EnumAutoLaunch.REDSTONE_SIGNAL) + { + if (this.ticks % 11 == 0 && this.activeLaunchController != null) + { + if (RedstoneUtil.isBlockReceivingRedstone(this.world, this.activeLaunchController.toBlockPos())) + { + this.autoLaunch(); + } + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + this.setPad(null); + } + else + { + if (this.launchPhase == EnumLaunchPhase.UNIGNITED.ordinal() && this.landingPad != null && this.ticks % 17 == 0) + { + this.updateControllerSettings(this.landingPad); + } + } + + this.lastStatusMessageCooldown = this.statusMessageCooldown; + } + + if (this.launchPhase >= EnumLaunchPhase.IGNITED.ordinal()) + { + if (this.rocketSoundUpdater != null) + { + this.rocketSoundUpdater.update(); + this.rocketSoundToStop = true; + } + } + else + { + if (this.rocketSoundToStop) + { + this.stopRocketSound(); + if (this.rocketSoundUpdater != null) + { + FMLClientHandler.instance().getClient().getSoundHandler().stopSound((ISound) rocketSoundUpdater); + } + this.rocketSoundUpdater = null; + } + } + } + + @Override + protected boolean shouldMoveClientSide() + { + return false; + } + + // Server side only - this is a Launch Controlled ignition attempt + private void autoLaunch() + { + if (this.autoLaunchSetting != null) + { + if (this.activeLaunchController != null) + { + TileEntity tile = this.activeLaunchController.getTileEntity(this.world); + + if (controllerClass.isInstance(tile)) + { + Boolean autoLaunchEnabled = null; + try + { + autoLaunchEnabled = controllerClass.getField("controlEnabled").getBoolean(tile); + } catch (Exception e) + {} + + if (autoLaunchEnabled != null && autoLaunchEnabled) + { + if (this.fuelTank.getFluidAmount() > this.fuelTank.getCapacity() * 2 / 5) + this.ignite(); + else + this.failMessageInsufficientFuel(); + } + else + { + this.failMessageLaunchController(); + } + } + } + this.autoLaunchSetting = null; + + return; + } + else + { + this.ignite(); + } + } + + public boolean igniteWithResult() + { + if (this.setFrequency()) + { + super.ignite(); + this.activeLaunchController = null; + return true; + } + else + { + if (this.isPlayerRocket()) + { + super.ignite(); + this.activeLaunchController = null; + return true; + } + + this.activeLaunchController = null; + return false; + } + } + + @Override + public void ignite() + { + this.igniteWithResult(); + } + + public abstract boolean isPlayerRocket(); + + @Override + public void landEntity(BlockPos pos) + { + TileEntity tile = this.world.getTileEntity(pos); + + if (tile instanceof IFuelDock) + { + IFuelDock dock = (IFuelDock) tile; + + if (this.isDockValid(dock)) + { + if (!this.world.isRemote) + { + // Drop any existing rocket on the landing pad + if (dock.getDockedEntity() instanceof EntitySpaceshipBase && dock.getDockedEntity() != this) + { + ((EntitySpaceshipBase) dock.getDockedEntity()).dropShipAsItem(); + ((EntitySpaceshipBase) dock.getDockedEntity()).setDead(); + } + + this.setPad(dock); + } + + this.onRocketLand(pos); + } + } + } + + public void updateControllerSettings(IFuelDock dock) + { + HashSet connectedTiles = dock.getConnectedTiles(); + + try + { + for (ILandingPadAttachable updatedTile : connectedTiles) + { + if (controllerClass.isInstance(updatedTile)) + { + // This includes a check for whether it has enough energy to + // run (if it doesn't, then a launch would not go to the + // destination frequency and the rocket would be lost!) + Boolean autoLaunchEnabled = controllerClass.getField("controlEnabled").getBoolean(updatedTile); + + this.activeLaunchController = new BlockVec3((TileEntity) updatedTile); + + if (autoLaunchEnabled) + { + this.autoLaunchSetting = EnumAutoLaunch.values()[controllerClass.getField("launchDropdownSelection").getInt(updatedTile)]; + + switch (this.autoLaunchSetting) + { + case INSTANT: + // Small countdown to give player a moment to + // exit the Launch Controller GUI + if (this.autoLaunchCountdown <= 0 || this.autoLaunchCountdown > 12) + this.autoLaunchCountdown = 12; + break; + // The other settings set time to count down AFTER + // player mounts rocket but BEFORE engine ignition + // TODO: if autoLaunchCountdown > 0 add some smoke + // (but not flame) particle effects or other + // pre-flight test feedback so the player knows + // something is happening + case TIME_10_SECONDS: + if (this.autoLaunchCountdown <= 0 || this.autoLaunchCountdown > 200) + this.autoLaunchCountdown = 200; + break; + case TIME_30_SECONDS: + if (this.autoLaunchCountdown <= 0 || this.autoLaunchCountdown > 600) + this.autoLaunchCountdown = 600; + break; + case TIME_1_MINUTE: + if (this.autoLaunchCountdown <= 0 || this.autoLaunchCountdown > 1200) + this.autoLaunchCountdown = 1200; + break; + default: + break; + } + } + else + { + // This LaunchController is out of power, disabled, + // invalid target or set not to launch + // No auto launch - but maybe another connectedTile will + // have some launch settings? + this.autoLaunchSetting = null; + this.autoLaunchCountdown = 0; + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + protected void onRocketLand(BlockPos pos) + { + this.setPositionAndRotation(pos.getX() + 0.5, pos.getY() + 0.4D + this.getOnPadYOffset(), pos.getZ() + 0.5, this.rotationYaw, 0.0F); + this.stopRocketSound(); + if (this.rocketSoundUpdater != null) + { + FMLClientHandler.instance().getClient().getSoundHandler().stopSound((ISound) rocketSoundUpdater); + } + this.rocketSoundUpdater = null; // Allow sound to be restarted again if + // it relaunches + } + + public void stopRocketSound() + { + if (this.rocketSoundUpdater != null) + { + ((SoundUpdaterRocket) this.rocketSoundUpdater).stopRocketSound(); + } + this.rocketSoundToStop = false; + } + + @Override + public void setDead() + { + super.setDead(); + + if (this.rocketSoundUpdater != null) + { + this.rocketSoundUpdater.update(); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (!this.world.isRemote) + { + double clientPosY = buffer.readDouble(); + if (clientPosY != Double.NaN && this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.LAUNCHED.ordinal()) + { + if (clientPosY > this.posY) + { + this.motionY += (clientPosY - this.posY) / 40D; + } + } + else if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal()) + { + if (clientPosY < this.posY) + { + this.motionY += (clientPosY - this.posY) / 40D; + } + } + } + return; + } + int launchPhaseLast = this.launchPhase; + super.decodePacketdata(buffer); + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, buffer.readInt())); + boolean landingNew = buffer.readBoolean(); + if (landingNew && launchPhaseLast != EnumLaunchPhase.LANDING.ordinal()) + { + if (this.rocketSoundUpdater != null) + { + FMLClientHandler.instance().getClient().getSoundHandler().stopSound((ISound) rocketSoundUpdater); + } + this.rocketSoundUpdater = null; // Flag TickHandlerClient to restart + // it + } + this.destinationFrequency = buffer.readInt(); + + if (buffer.readBoolean()) + { + this.targetVec = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + } + + double motX = buffer.readDouble() / 8000.0D; + double motY = buffer.readDouble() / 8000.0D; + double motZ = buffer.readDouble() / 8000.0D; + double lastMotY = buffer.readDouble() / 8000.0D; + double lastLastMotY = buffer.readDouble() / 8000.0D; + + if (!this.hasValidFuel()) + { + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + this.lastMotionY = lastMotY; + this.lastLastMotionY = lastLastMotY; + } + + if (this.stacks == null) + { + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + } + + this.setWaitForPlayer(buffer.readBoolean()); + + this.statusMessage = ByteBufUtils.readUTF8String(buffer); + this.statusMessage = this.statusMessage.equals("") ? null : this.statusMessage; + this.statusMessageCooldown = buffer.readInt(); + this.lastStatusMessageCooldown = buffer.readInt(); + this.statusValid = buffer.readBoolean(); + + // Update client with correct rider if needed + if (this.world.isRemote) + { + int shouldBeMountedId = buffer.readInt(); + if (this.getPassengers().isEmpty()) + { + if (shouldBeMountedId > -1) + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + if (e.dimension != this.dimension) + { + if (e instanceof EntityPlayer) + { + e = WorldUtil.forceRespawnClient(this.dimension, e.world.getDifficulty().getId(), e.world.getWorldInfo().getTerrainType().getName(), ((EntityPlayerMP) e).interactionManager.getGameType().getID()); + e.startRiding(this); + } + } + else + e.startRiding(this); + } + } + } + else if (this.getPassengers().get(0).getEntityId() != shouldBeMountedId) + { + if (shouldBeMountedId == -1) + { + this.removePassengers(); + } + else + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + if (e.dimension != this.dimension) + { + if (e instanceof EntityPlayer) + { + e = WorldUtil.forceRespawnClient(this.dimension, e.world.getDifficulty().getId(), e.world.getWorldInfo().getTerrainType().getName(), ((EntityPlayerMP) e).interactionManager.getGameType().getID()); + e.startRiding(this); + } + } + else + e.startRiding(this); + } + } + } + } + this.statusColour = ByteBufUtils.readUTF8String(buffer); + if (this.statusColour.equals("")) + this.statusColour = null; + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + if (this.getPassengers().contains(FMLClientHandler.instance().getClientPlayerEntity()) && this.hasValidFuel()) + { + list.add(this.posY); + } + else + { + list.add(Double.NaN); + } + } + super.getNetworkedData(list); + + list.add(this.fuelTank.getFluidAmount()); + list.add(this.launchPhase == EnumLaunchPhase.LANDING.ordinal()); + list.add(this.destinationFrequency); + list.add(this.targetVec != null); + + if (this.targetVec != null) + { + list.add(this.targetVec.getX()); + list.add(this.targetVec.getY()); + list.add(this.targetVec.getZ()); + } + + list.add(this.motionX * 8000.0D); + list.add(this.motionY * 8000.0D); + list.add(this.motionZ * 8000.0D); + list.add(this.lastMotionY * 8000.0D); + list.add(this.lastLastMotionY * 8000.0D); + + list.add(this.getWaitForPlayer()); + + list.add(this.statusMessage != null ? this.statusMessage : ""); + list.add(this.statusMessageCooldown); + list.add(this.lastStatusMessageCooldown); + list.add(this.statusValid); + + if (!this.world.isRemote) + { + list.add(this.getPassengers().isEmpty() ? -1 : this.getPassengers().get(0).getEntityId()); + } + list.add(this.statusColour != null ? this.statusColour : ""); + } + + @Override + protected void failRocket() + { + this.stopRocketSound(); + + if (this.shouldCancelExplosion()) + { + // TODO: why looking around when already know the target? + // TODO: it would be good to land on an alternative neighbouring pad + // if there is already a rocket on the target pad + for (int i = -3; i <= 3; i++) + { + BlockPos pos = new BlockPos((int) Math.floor(this.posX), (int) Math.floor(this.posY + i), (int) Math.floor(this.posZ)); + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null && this.world.getTileEntity(pos) instanceof IFuelDock && this.posY - this.targetVec.getY() < 5) + { + for (int x = MathHelper.floor(this.posX) - 1; x <= MathHelper.floor(this.posX) + 1; x++) + { + for (int y = MathHelper.floor(this.posY - 3.0D); y <= MathHelper.floor(this.posY) + 1; y++) + { + for (int z = MathHelper.floor(this.posZ) - 1; z <= MathHelper.floor(this.posZ) + 1; z++) + { + BlockPos pos1 = new BlockPos(x, y, z); + TileEntity tile = this.world.getTileEntity(pos1); + + if (tile instanceof IFuelDock) + { + this.landEntity(pos1); + return; + } + } + } + } + } + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + super.failRocket(); + } + } + + protected boolean shouldCancelExplosion() + { + return this.hasValidFuel(); + } + + @Override + public boolean hasValidFuel() + { + return this.fuelTank.getFluidAmount() > 0; + } + + public void cancelLaunch() + { + this.setLaunchPhase(EnumLaunchPhase.UNIGNITED); + this.timeUntilLaunch = 0; + if (!this.world.isRemote && !this.getPassengers().isEmpty() && this.getPassengers().get(0) instanceof EntityPlayerMP) + { + this.getPassengers().get(0).sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.nogyroscope"))); + } + } + + public void failMessageLaunchController() + { + if (!this.world.isRemote && !this.getPassengers().isEmpty() && this.getPassengers().get(0) instanceof EntityPlayerMP) + { + ((EntityPlayerMP) this.getPassengers().get(0)).sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.launchcontroller"))); + } + } + + public void failMessageInsufficientFuel() + { + if (!this.world.isRemote && !this.getPassengers().isEmpty() && this.getPassengers().get(0) instanceof EntityPlayerMP) + { + ((EntityPlayerMP) this.getPassengers().get(0)).sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.fuelinsufficient"))); + } + } + + @Override + public void onLaunch() + { + if (((this.world.provider.getDimension() != GalacticraftCore.planetOverworld.getDimensionID()) && !(this.world.provider instanceof IGalacticraftWorldProvider))) + { + if (ConfigManagerCore.disableRocketLaunchAllNonGC) + { + this.cancelLaunch(); + return; + } + + // No rocket flight in the Nether, the End etc + for (int i = ConfigManagerCore.disableRocketLaunchDimensions.length - 1; i >= 0; i--) + { + if (ConfigManagerCore.disableRocketLaunchDimensions[i] == this.world.provider.getDimension()) + { + this.cancelLaunch(); + return; + } + } + + } + + super.onLaunch(); + + if (!this.world.isRemote) + { + GCPlayerStats stats = null; + + if (!this.getPassengers().isEmpty()) + { + for (Entity player : this.getPassengers()) + { + if (player instanceof EntityPlayerMP) + { + stats = GCPlayerStats.get(player); + stats.setLaunchpadStack(null); + + if (!(this.world.provider instanceof IOrbitDimension)) + { + stats.setCoordsTeleportedFromX(player.posX); + stats.setCoordsTeleportedFromZ(player.posZ); + } + } + } + + Entity playerMain = this.getPassengers().get(0); + if (playerMain instanceof EntityPlayerMP) + stats = GCPlayerStats.get(playerMain); + } + + int amountRemoved = 0; + + PADSEARCH: for (int x = MathHelper.floor(this.posX) - 1; x <= MathHelper.floor(this.posX) + 1; x++) + { + for (int y = MathHelper.floor(this.posY) - 3; y <= MathHelper.floor(this.posY) + 1; y++) + { + for (int z = MathHelper.floor(this.posZ) - 1; z <= MathHelper.floor(this.posZ) + 1; z++) + { + BlockPos pos = new BlockPos(x, y, z); + final Block block = this.world.getBlockState(pos).getBlock(); + + if (block != null && block instanceof BlockLandingPadFull) + { + if (amountRemoved < 9) + { + EventLandingPadRemoval event = new EventLandingPadRemoval(this.world, pos); + MinecraftForge.EVENT_BUS.post(event); + + if (event.allow) + { + this.world.setBlockToAir(pos); + amountRemoved = 9; + } + break PADSEARCH; + } + } + } + } + } + + // Set the player's launchpad item for return on landing - or null + // if launchpads not removed + if (stats != null && amountRemoved == 9) + { + stats.setLaunchpadStack(new ItemStack(GCBlocks.landingPad, 9, 0)); + } + + this.playSound(SoundEvents.ENTITY_ITEM_PICKUP, 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + + if (this.getSizeInventory() > 0) + { + ItemStackHelper.saveAllItems(nbt, this.stacks); + } + + nbt.setBoolean("TargetValid", this.targetVec != null); + + if (this.targetVec != null) + { + nbt.setDouble("targetTileX", this.targetVec.getX()); + nbt.setDouble("targetTileY", this.targetVec.getY()); + nbt.setDouble("targetTileZ", this.targetVec.getZ()); + } + + nbt.setBoolean("WaitingForPlayer", this.getWaitForPlayer()); + nbt.setBoolean("Landing", this.launchPhase == EnumLaunchPhase.LANDING.ordinal()); + nbt.setInteger("AutoLaunchSetting", this.autoLaunchSetting != null ? this.autoLaunchSetting.getIndex() : -1); + nbt.setInteger("TimeUntilAutoLaunch", this.autoLaunchCountdown); + nbt.setInteger("DestinationFrequency", this.destinationFrequency); + if (this.activeLaunchController != null) + this.activeLaunchController.writeToNBT(nbt, "ALCat"); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + + if (nbt.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + + if (this.getSizeInventory() > 0) + { + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.stacks); + } + + if (nbt.getBoolean("TargetValid") && nbt.hasKey("targetTileX")) + { + this.targetVec = new BlockPos(MathHelper.floor(nbt.getDouble("targetTileX")), MathHelper.floor(nbt.getDouble("targetTileY")), MathHelper.floor(nbt.getDouble("targetTileZ"))); + } + + this.setWaitForPlayer(nbt.getBoolean("WaitingForPlayer")); + int autoLaunchValue = nbt.getInteger("AutoLaunchSetting"); + this.autoLaunchSetting = autoLaunchValue == -1 ? null : EnumAutoLaunch.values()[autoLaunchValue]; + this.autoLaunchCountdown = nbt.getInteger("TimeUntilAutoLaunch"); + this.destinationFrequency = nbt.getInteger("DestinationFrequency"); + this.activeLaunchController = BlockVec3.readFromNBT(nbt, "ALCat"); + } + + @Override + public int addFuel(FluidStack liquid, boolean doFill) + { + return FluidUtil.fillWithGCFuel(this.fuelTank, liquid, doFill); + } + + @Override + public FluidStack removeFuel(int amount) + { + return this.fuelTank.drain(amount * ConfigManagerCore.rocketFuelFactor, true); + } + + @Override + public void setPad(IFuelDock pad) + { + // Called either when a rocket lands or when one is placed + // Can also be called with null param when rocket leaves a pad + this.landingPad = pad; + if (pad != null) + { + pad.dockEntity(this); + // NOTE: setPad() is called also when a world or chunk is loaded - + // if the rocket is Ignited (from NBT save data) do not change those + // settings + if ((this.launchPhase != EnumLaunchPhase.IGNITED.ordinal())) + { + this.setLaunchPhase(EnumLaunchPhase.UNIGNITED); + this.targetVec = null; + this.updateControllerSettings(pad); + } + } + } + + @Override + public IFuelDock getLandingPad() + { + return this.landingPad; + } + + @Override + public int getMaxFuel() + { + return this.fuelTank.getCapacity(); + } + + @Override + public boolean isDockValid(IFuelDock dock) + { + return (dock instanceof TileEntityLandingPad); + } + + @Override + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + if (this.getSizeInventory() <= 3) + { + if (this.autoLaunchSetting == EnumAutoLaunch.CARGO_IS_FULL) + { + this.autoLaunch(); + } + + return EnumCargoLoadingState.NOINVENTORY; + } + + int count = 0; + + for (count = 0; count < this.stacks.size() - 2; count++) + { + ItemStack stackAt = this.stacks.get(count); + + if (!stackAt.isEmpty() && stackAt.getItem() == stack.getItem() && stackAt.getItemDamage() == stack.getItemDamage() && stackAt.getCount() < stackAt.getMaxStackSize()) + { + if (stackAt.getCount() + stack.getCount() <= stackAt.getMaxStackSize()) + { + if (doAdd) + { + stackAt.grow(stack.getCount()); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + else + { + // Part of the stack can fill this slot but there will be + // some left over + int origSize = stackAt.getCount(); + int surplus = origSize + stack.getCount() - stackAt.getMaxStackSize(); + + if (doAdd) + { + stackAt.setCount(stackAt.getMaxStackSize()); + this.markDirty(); + } + + stack.setCount(surplus); + if (this.addCargo(stack, doAdd) == EnumCargoLoadingState.SUCCESS) + { + return EnumCargoLoadingState.SUCCESS; + } + + stackAt.setCount(origSize); + if (this.autoLaunchSetting == EnumAutoLaunch.CARGO_IS_FULL) + { + this.autoLaunch(); + } + return EnumCargoLoadingState.FULL; + } + } + } + + for (count = 0; count < this.stacks.size() - 2; count++) + { + ItemStack stackAt = this.stacks.get(count); + + if (stackAt.isEmpty()) + { + if (doAdd) + { + this.stacks.set(count, stack); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + } + + if (this.autoLaunchSetting == EnumAutoLaunch.CARGO_IS_FULL) + { + this.autoLaunch(); + } + + return EnumCargoLoadingState.FULL; + } + + @Override + public RemovalResult removeCargo(boolean doRemove) + { + for (int i = 0; i < this.stacks.size() - 2; i++) + { + ItemStack stackAt = this.stacks.get(i); + + if (!stackAt.isEmpty()) + { + ItemStack resultStack = stackAt.copy(); + resultStack.setCount(1); + + if (doRemove) + { + stackAt.shrink(1); + } + + if (doRemove) + { + this.markDirty(); + } + return new RemovalResult(EnumCargoLoadingState.SUCCESS, resultStack); + } + } + + if (this.autoLaunchSetting == EnumAutoLaunch.CARGO_IS_UNLOADED) + { + this.autoLaunch(); + } + + return new RemovalResult(EnumCargoLoadingState.EMPTY, ItemStack.EMPTY); + } + + @Override + public ItemStack getStackInSlot(int index) + { + if (this.stacks == null) + { + return ItemStack.EMPTY; + } + + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return !this.isDead && entityplayer.getDistanceSq(this) <= 64.0D; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public void markDirty() + {} + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + {} + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + {} + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + {} + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public void onPadDestroyed() + { + if (!this.isDead && this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal()) + { + this.dropShipAsItem(); + this.setDead(); + } + } + + @Override + public List getItemsDropped(List droppedItemList) + { + if (this.stacks != null) + { + for (final ItemStack item : this.stacks) + { + if (item != null && !item.isEmpty()) + { + droppedItemList.add(item); + } + } + } + + return droppedItemList; + } + + public boolean getWaitForPlayer() + { + return this.waitForPlayer; + } + + public void setWaitForPlayer(boolean waitForPlayer) + { + this.waitForPlayer = waitForPlayer; + } + + public static enum EnumAutoLaunch + { + + CARGO_IS_UNLOADED(0, "cargo_unloaded"), CARGO_IS_FULL(1, "cargo_full"), ROCKET_IS_FUELED(2, "fully_fueled"), INSTANT(3, "instant"), TIME_10_SECONDS(4, "ten_sec"), TIME_30_SECONDS(5, "thirty_sec"), TIME_1_MINUTE(6, "one_min"), REDSTONE_SIGNAL(7, "redstone_sig"); + + private final int index; + private String title; + + private EnumAutoLaunch(int index, String title) + { + this.index = index; + this.title = title; + } + + public int getIndex() + { + return this.index; + } + + public String getTitle() + { + return GCCoreUtil.translate("gui.message." + this.title + ".name"); + } + } + + @Override + @SideOnly(Side.CLIENT) + public ITickable getSoundUpdater() + { + return this.rocketSoundUpdater; + } + + @Override + @SideOnly(Side.CLIENT) + public ISound setSoundUpdater(EntityPlayerSP player) + { + this.rocketSoundUpdater = new SoundUpdaterRocket(player, this); + return (ISound) this.rocketSoundUpdater; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRender3d(double x, double y, double z) + { + double d0 = this.posX - x; + double d1 = this.posY - y; + double d2 = this.posZ - z; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + return d3 < Constants.RENDERDISTANCE_LONG; + } + + @Override + public boolean inFlight() + { + return this.getLaunched(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntitySpaceshipBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntitySpaceshipBase.java new file mode 100644 index 00000000..93092e75 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntitySpaceshipBase.java @@ -0,0 +1,768 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.entity; + +import com.google.common.base.Predicate; +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.entity.ITelemetry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.api.world.IExitHeight; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.advancement.GCTriggers; +import micdoodle8.mods.galacticraft.core.client.screen.GameScreenText; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class EntitySpaceshipBase extends Entity implements IPacketReceiver, IIgnoreShift, ITelemetry +{ + + public static enum EnumLaunchPhase + { + UNIGNITED, IGNITED, LAUNCHED, LANDING + } + + public int launchPhase; + + protected long ticks = 0; + protected double dragAir; + public int timeUntilLaunch; + public float timeSinceLaunch; + public float rollAmplitude; + public float shipDamage; + private ArrayList telemetryList = new ArrayList(); + private boolean addToTelemetry = false; + public FluidTank fuelTank = new FluidTank(this.getFuelTankCapacity() * ConfigManagerCore.rocketFuelFactor); + private double syncAdjustX = 0D; + private double syncAdjustY = 0D; + private double syncAdjustZ = 0D; + private boolean syncAdjustFlag = false; + + public EntitySpaceshipBase(World par1World) + { + super(par1World); + this.launchPhase = EnumLaunchPhase.UNIGNITED.ordinal(); + this.preventEntitySpawning = true; + this.ignoreFrustumCheck = true; + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 5.0; + return distance < d0 * d0; + } + + public abstract int getFuelTankCapacity(); + + public abstract int getMaxFuel(); + + public abstract int getScaledFuelLevel(int i); + + public abstract int getPreLaunchWait(); + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + protected void entityInit() + { + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return null; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + if (!this.world.isRemote && !this.isDead) + { + Entity e = par1DamageSource.getTrueSource(); + boolean flag = e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode; + if (this.isEntityInvulnerable(par1DamageSource) || this.posY > 300 || (e instanceof EntityLivingBase && !(e instanceof EntityPlayer))) + { + return false; + } else + { + this.rollAmplitude = 10; + this.markVelocityChanged(); + this.shipDamage += par2 * 10; + + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + this.shipDamage = 100; + } + + if (flag || this.shipDamage > 90 && !this.world.isRemote) + { + this.removePassengers(); + + if (flag) + { + this.setDead(); + } else + { + this.setDead(); + this.dropShipAsItem(); + } + return true; + } + + return true; + } + } else + { + return true; + } + } + + public void dropShipAsItem() + { + if (this.world.isRemote) + { + return; + } + + for (final ItemStack item : this.getItemsDropped(new ArrayList())) + { + EntityItem entityItem = this.entityDropItem(item, 0); + + if (item.hasTagCompound()) + { + entityItem.getItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); + } + } + } + + public abstract List getItemsDropped(List droppedItemList); + + @Override + public void performHurtAnimation() + { + this.rollAmplitude = 5; + this.shipDamage += this.shipDamage * 10; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public boolean shouldRiderSit() + { + return false; + } + + @Override + public void onUpdate() + { + this.ticks++; + + super.onUpdate(); + + if (this.addToTelemetry) + { + this.addToTelemetry = false; + for (BlockVec3Dim vec : new ArrayList(this.telemetryList)) + { + TileEntity t1 = vec.getTileEntityNoLoad(); + if (t1 instanceof TileEntityTelemetry && !t1.isInvalid()) + { + if (((TileEntityTelemetry) t1).linkedEntity == this) + ((TileEntityTelemetry) t1).addTrackedEntity(this); + } + } + } + + for (Entity e : this.getPassengers()) + { + e.fallDistance = 0.0F; + } + + if (this.posY > (this.world.provider instanceof IExitHeight ? ((IExitHeight) this.world.provider).getYCoordinateToTeleport() : 1200) && this.launchPhase != EnumLaunchPhase.LANDING.ordinal()) + { + this.onReachAtmosphere(); +// if (this.world.isRemote) +// this.posY = 1 + (this.world.provider instanceof IExitHeight ? ((IExitHeight) this.world.provider).getYCoordinateToTeleport() : 1200); + } + + if (this.rollAmplitude > 0) + { + this.rollAmplitude--; + } + + if (this.shipDamage > 0) + { + this.shipDamage--; + } + + if (!this.world.isRemote) + { + if (this.posY < 0.0D) + { + this.setDead(); + } else if (this.posY > (this.world.provider instanceof IExitHeight ? ((IExitHeight) this.world.provider).getYCoordinateToTeleport() : 1200) + + (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() ? 355 : 100)) + { + for (Entity e : this.getPassengers()) + { + if (e instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(e); + if (stats.isUsingPlanetSelectionGui()) + { + this.setDead(); + } + } else + this.setDead(); + } + } + + if (this.timeSinceLaunch > 50 && this.onGround) + { + this.failRocket(); + } + } + + if (this.launchPhase == EnumLaunchPhase.UNIGNITED.ordinal()) + { + this.timeUntilLaunch = this.getPreLaunchWait(); + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + this.timeSinceLaunch++; + } else + { + this.timeSinceLaunch = 0; + } + + if (this.timeUntilLaunch > 0 && this.launchPhase == EnumLaunchPhase.IGNITED.ordinal()) + { + this.timeUntilLaunch--; + } + + AxisAlignedBB box = this.getEntityBoundingBox().grow(0.2D); + + final List var15 = this.world.getEntitiesWithinAABBExcludingEntity(this, box); + + if (var15 != null && !var15.isEmpty()) + { + for (int var52 = 0; var52 < var15.size(); ++var52) + { + final Entity var17 = (Entity) var15.get(var52); + + if (this.getPassengers().contains(var17)) + { + var17.applyEntityCollision(this); + } + } + } + + if (this.timeUntilLaunch == 0 && this.launchPhase == EnumLaunchPhase.IGNITED.ordinal()) + { + this.setLaunchPhase(EnumLaunchPhase.LAUNCHED); + this.onLaunch(); + } + + if (this.rotationPitch > 90) + { + this.rotationPitch = 90; + } + + if (this.rotationPitch < -90) + { + this.rotationPitch = -90; + } + + this.motionX = -(50 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * Math.sin(this.rotationPitch * 0.01 / Constants.RADIANS_TO_DEGREES_D)); + this.motionZ = -(50 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * Math.sin(this.rotationPitch * 0.01 / Constants.RADIANS_TO_DEGREES_D)); + + if (this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal()) + { + this.motionX = this.motionY = this.motionZ = 0.0F; + } + + if (this.world.isRemote) + { + this.setPosition(this.posX, this.posY, this.posZ); + + if (this.shouldMoveClientSide()) + { + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + } else + { + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + + this.setRotation(this.rotationYaw, this.rotationPitch); + + if (this.world.isRemote) + { + this.setPosition(this.posX, this.posY, this.posZ); + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (!this.world.isRemote && this.ticks % 3 == 0) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketDynamic(this), this.world.provider.getDimension()); + // PacketDispatcher.sendPacketToAllInDimension(GCCorePacketManager.getPacket(GalacticraftCore.CHANNELENTITIES, + // this, this.getNetworkedData(new ArrayList())), + // this.world.provider.getDimension()); + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + if (getPassengers().size() >= 1) // When the screen changes to the + // map, the player is not riding + // the rocket anymore. + { + if (getPassengers().get(0) instanceof EntityPlayerMP) + { + GCTriggers.LAUNCH_ROCKET.trigger(((EntityPlayerMP) getPassengers().get(0))); + } + } + } + } + + protected boolean shouldMoveClientSide() + { + return true; + } + + public abstract boolean hasValidFuel(); + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (!this.world.isRemote) + { + new Exception().printStackTrace(); + } + int newLaunchPhase = buffer.readInt(); + if (this.launchPhase != newLaunchPhase) + { + this.setLaunchPhase(EnumLaunchPhase.values()[newLaunchPhase]); + if (newLaunchPhase == EnumLaunchPhase.LANDING.ordinal()) + { + this.syncAdjustFlag = true; + } + } else if (this.hasValidFuel()) + { + if (Math.abs(this.syncAdjustX - this.posX) > 0.2D) + this.motionX += (this.syncAdjustX - this.posX) / 40D; + if (Math.abs(this.syncAdjustY - this.posY) > 0.2D) + this.motionY += (this.syncAdjustY - this.posY) / 40D; + if (Math.abs(this.syncAdjustZ - this.posZ) > 0.2D) + this.motionZ += (this.syncAdjustZ - this.posZ) / 40D; + } + this.timeSinceLaunch = buffer.readFloat(); + this.timeUntilLaunch = buffer.readInt(); + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + return; + } + list.add(this.launchPhase); + list.add(this.timeSinceLaunch); + list.add(this.timeUntilLaunch); + } + + public void turnYaw(float f) + { + this.rotationYaw += f; + } + + public void turnPitch(float f) + { + this.rotationPitch += f; + } + + protected void failRocket() + { + for (Entity passenger : this.getPassengers()) + { + passenger.attackEntityFrom(DamageSourceGC.spaceshipCrash, (int) (4.0D * 20 + 1.0D)); + } + + if (!ConfigManagerCore.disableSpaceshipGrief) + { + this.world.createExplosion(this, this.posX, this.posY, this.posZ, 5, true); + } + + this.setDead(); + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + this.setRotation(yaw, pitch); + if (this.syncAdjustFlag && this.world.isBlockLoaded(new BlockPos(x, 255D, z)) && this.hasValidFuel()) + { + EntityPlayer p = FMLClientHandler.instance().getClientPlayerEntity(); + double dx = x - p.posX; + double dz = z - p.posZ; + if (dx * dx + dz * dz < 1024) + { + if (!this.world.loadedEntityList.contains(this)) + { + try + { + this.world.loadedEntityList.add(this); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.posX = x; + this.posY = y; + this.posZ = z; + + int cx = MathHelper.floor(x / 16.0D); + int cz = MathHelper.floor(z / 16.0D); + + if (!this.addedToChunk || this.chunkCoordX != cx || this.chunkCoordZ != cz) + { + if (this.addedToChunk && this.world.isBlockLoaded(new BlockPos(this.chunkCoordX << 4, 255, this.chunkCoordZ << 4), true)) + { + this.world.getChunk(this.chunkCoordX, this.chunkCoordZ).removeEntityAtIndex(this, this.chunkCoordY); + } + + this.addedToChunk = true; + this.world.getChunk(cx, cz).addEntity(this); + } + + this.syncAdjustX = 0D; + this.syncAdjustY = 0D; + this.syncAdjustZ = 0D; + this.syncAdjustFlag = false; + } + } else + { + this.syncAdjustX = x; + this.syncAdjustY = y; + this.syncAdjustZ = z; + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + nbt.setInteger("launchPhase", this.launchPhase + 1); + nbt.setInteger("timeUntilLaunch", this.timeUntilLaunch); + if (telemetryList.size() > 0) + { + NBTTagList teleNBTList = new NBTTagList(); + for (BlockVec3Dim vec : new ArrayList(this.telemetryList)) + { + NBTTagCompound tag = new NBTTagCompound(); + vec.writeToNBT(tag); + teleNBTList.appendTag(tag); + } + nbt.setTag("telemetryList", teleNBTList); + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.timeUntilLaunch = nbt.getInteger("timeUntilLaunch"); + + boolean hasOldTags = false; + + // Backwards compatibility: + if (nbt.getKeySet().contains("launched")) + { + hasOldTags = true; + + boolean launched = nbt.getBoolean("launched"); + + if (launched) + { + this.setLaunchPhase(EnumLaunchPhase.LAUNCHED); + } + } + + // Backwards compatibility: + if (nbt.getKeySet().contains("ignite")) + { + hasOldTags = true; + + int ignite = nbt.getInteger("ignite"); + + if (ignite == 1) + { + this.setLaunchPhase(EnumLaunchPhase.IGNITED); + } + } + + // Backwards compatibility: + if (hasOldTags) + { + if (this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal() && this.launchPhase != EnumLaunchPhase.IGNITED.ordinal()) + { + this.setLaunchPhase(EnumLaunchPhase.UNIGNITED); + } + } else + { + this.setLaunchPhase(EnumLaunchPhase.values()[nbt.getInteger("launchPhase") - 1]); + } + + // Update all Telemetry Units which are still tracking this rocket + this.telemetryList.clear(); + if (nbt.hasKey("telemetryList")) + { + NBTTagList teleNBT = nbt.getTagList("telemetryList", 10); + if (teleNBT.tagCount() > 0) + { + for (int j = teleNBT.tagCount() - 1; j >= 0; j--) + { + NBTTagCompound tag1 = teleNBT.getCompoundTagAt(j); + if (tag1 != null) + { + this.telemetryList.add(BlockVec3Dim.readFromNBT(tag1)); + } + } + this.addToTelemetry = true; + } + } + } + + public boolean getLaunched() + { + return this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal(); + } + + public boolean canBeRidden() + { + return false; + } + + public void ignite() + { + this.setLaunchPhase(EnumLaunchPhase.IGNITED); + } + + @Override + public double getMountedYOffset() + { + return -0.9D; + } + + public double getOnPadYOffset() + { + return 0D; + } + + public void onLaunch() + { + MinecraftForge.EVENT_BUS.post(new RocketLaunchEvent(this)); + } + + public void onReachAtmosphere() + { + } + + @SideOnly(Side.CLIENT) + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) + { + } + + @Override + public boolean canRiderInteract() + { + return true; + } + + public ResourceLocation getSpaceshipGui() + { + return GalacticraftRegistry.getResouceLocationForDimension(this.world.provider.getClass()); + } + + public void setLaunchPhase(EnumLaunchPhase phase) + { + this.launchPhase = phase.ordinal(); + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal(); + } + + public static class RocketLaunchEvent extends EntityEvent + { + + public final EntitySpaceshipBase rocket; + + public RocketLaunchEvent(EntitySpaceshipBase entity) + { + super(entity); + rocket = entity; + } + } + + public void addTelemetry(TileEntityTelemetry tile) + { + this.telemetryList.add(new BlockVec3Dim(tile)); + } + + public ArrayList getTelemetry() + { + ArrayList returnList = new ArrayList(); + for (BlockVec3Dim vec : new ArrayList(this.telemetryList)) + { + TileEntity t1 = vec.getTileEntity(); + if (t1 instanceof TileEntityTelemetry && !t1.isInvalid()) + { + if (((TileEntityTelemetry) t1).linkedEntity == this) + returnList.add((TileEntityTelemetry) t1); + } + } + return returnList; + } + + @Override + public void transmitData(int[] data) + { + data[0] = this.timeUntilLaunch; + data[1] = (int) this.posY; + // data[2] is entity speed already set as default by TileEntityTelemetry + data[3] = this.getScaledFuelLevel(100); + data[4] = (int) this.rotationPitch; + } + + @Override + public void receiveData(int[] data, String[] str) + { + // Spaceships: + // data0 = launch countdown + // data1 = height + // data2 = speed + // data3 = fuel remaining + // data4 = pitch angle + int countdown = data[0]; + str[0] = ""; + str[1] = (countdown == 400) ? GCCoreUtil.translate("gui.rocket.on_launchpad") + : ((countdown > 0) ? GCCoreUtil.translate("gui.rocket.countdown") + ": " + countdown / 20 : GCCoreUtil.translate("gui.rocket.launched")); + str[2] = GCCoreUtil.translate("gui.rocket.height") + ": " + data[1]; + str[3] = GameScreenText.makeSpeedString(data[2]); + str[4] = GCCoreUtil.translate("gui.message.fuel.name") + ": " + data[3] + "%"; + } + + @Override + public void adjustDisplay(int[] data) + { + GL11.glRotatef(data[4], -1, 0, 0); + GL11.glTranslatef(0, this.height / 4, 0); + } + + /** + * Used in RenderTier1Rocket for standard rendering. Ignore if using a + * custom renderer. + * + * @return Y-axis offset for rendering at correct position + */ + public float getRenderOffsetY() + { + return 1.34F; + } + + public static final Predicate rocketSelector = new Predicate() + { + + @Override + public boolean apply(Entity e) + { + return e instanceof EntitySpaceshipBase && e.isEntityAlive(); + } + }; + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double height = this.posY + (double) this.getEyeHeight(); + if (height > 255D) + height = 255D; + BlockPos blockpos = new BlockPos(this.posX, height, this.posZ); + return this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityTieredRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityTieredRocket.java new file mode 100644 index 00000000..afe7025e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityTieredRocket.java @@ -0,0 +1,562 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.entity; + +import io.netty.buffer.ByteBuf; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Iterator; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.entity.IWorldTransferCallback; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IExitHeight; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class EntityTieredRocket extends EntityAutoRocket implements IRocketType, IDockable, IWorldTransferCallback, ICameraZoomEntity +{ + + public EnumRocketType rocketType; + public float rumble; + public int launchCooldown; + private ArrayList preGenList = new ArrayList<>(); + private Iterator preGenIterator = null; + static boolean preGenInProgress = false; + static Field marsConfigAllDimsAllowed; + + static + { + try + { + Class marsConfig = Class.forName("micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars"); + marsConfigAllDimsAllowed = marsConfig.getField("launchControllerAllDims"); + } catch (Exception ignore) + { + } + } + + public EntityTieredRocket(World par1World) + { + super(par1World); + this.setSize(0.98F, 4F); +// this.yOffset = this.height / 2.0F; + } + + public EntityTieredRocket(World world, double posX, double posY, double posZ) + { + super(world, posX, posY, posZ); + } + + public void igniteCheckingCooldown() + { + if (!this.world.isRemote && this.launchCooldown <= 0) + { + this.initiatePlanetsPreGen(this.chunkCoordX, this.chunkCoordZ); + + this.ignite(); + } + } + + private void initiatePlanetsPreGen(int cx, int cz) + { + this.preGenList.clear(); + + // Pre-generate terrain on all possible destination planets if the + // destination is not being controlled by a Launch Controller + // (note: this does NOT include the Moon!) + + // This generates with a chunk radius of 12: so for 2 planets that's + // 1250 chunks to pregen + // It starts at the centre and generates in circles radiating out in + // case it doesn't have time to finish + // These will be done: 2 chunks per tick during IGNITE phase (so 800 + // chunks during the 20 second launch countdown) + // then the ones that are left 1 chunk per tick during flight (normally + // flight will last more than 450 ticks) + // If the server is at less than 20tps then maybe some of the outermost + // chunks won't be pre-generated but that's probably OK + if (this.destinationFrequency == -1 && !EntityTieredRocket.preGenInProgress) + { + ArrayList toPreGen = new ArrayList<>(); + for (Planet planet : GalaxyRegistry.getRegisteredPlanets().values()) + { + if (planet.getDimensionID() == this.dimension) + { + continue; + } + if (planet.isReachable() && planet.getTierRequirement() <= this.getRocketTier() && !planet.getTranslationKey().equals("planet.asteroids")) + { + toPreGen.add(planet.getDimensionID()); + } + } + + if (toPreGen.size() > 0) + { + for (Integer dimID : toPreGen) + { + this.preGenList.add(new BlockVec3(cx, dimID, cz)); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Starting terrain pregen for dimension " + dimID + " at " + (cx * 16 + 8) + ", " + (cz * 16 + 8)); + } + } + for (int r = 1; r < 12; r++) // concentric squares with radius r + { + int xmin = cx - r; + int xmax = cx + r; + int zmin = cz - r; + int zmax = cz + r; + for (int i = -r; i < r; i++) // stop before i == r to avoid + // doing corners twice + { + for (Integer dimID : toPreGen) + { + this.preGenList.add(new BlockVec3(xmin, dimID, cz + i)); + this.preGenList.add(new BlockVec3(xmax, dimID, cz - i)); + this.preGenList.add(new BlockVec3(cx - i, dimID, zmin)); + this.preGenList.add(new BlockVec3(cx + i, dimID, zmax)); + } + } + } + this.preGenIterator = this.preGenList.iterator(); + EntityTieredRocket.preGenInProgress = true; + } + } else + { + this.preGenIterator = null; + } + } + + @Override + public void onUpdate() + { + if (this.getWaitForPlayer()) + { + if (!this.getPassengers().isEmpty()) + { + Entity passenger = this.getPassengers().get(0); + if (this.ticks >= 40) + { + if (!this.world.isRemote) + { + this.removePassengers(); + passenger.startRiding(this, true); + GalacticraftCore.logger.debug("Remounting player in rocket."); + } + + this.setWaitForPlayer(false); + this.motionY = -0.5D; + } else + { + this.motionX = this.motionY = this.motionZ = 0.0D; + passenger.motionX = passenger.motionY = passenger.motionZ = 0; + } + } else + { + this.motionX = this.motionY = this.motionZ = 0.0D; + } + } + + super.onUpdate(); + + if (!this.world.isRemote) + { + if (this.launchCooldown > 0) + { + this.launchCooldown--; + } + + if (this.preGenIterator != null) + { + if (this.preGenIterator.hasNext()) + { + MinecraftServer mcserver; + if (this.world instanceof WorldServer) + { + mcserver = ((WorldServer) this.world).getMinecraftServer(); + BlockVec3 coords = this.preGenIterator.next(); + World w = mcserver.getWorld(coords.y); + if (w != null) + { + w.getChunk(coords.x, coords.z); + // Pregen a second chunk if still on launchpad (low + // strain on server) + if (this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal() && this.preGenIterator.hasNext()) + { + coords = this.preGenIterator.next(); + w = mcserver.getWorld(coords.y); + w.getChunk(coords.x, coords.z); + } + } + } + } else + { + this.preGenIterator = null; + EntityTieredRocket.preGenInProgress = false; + } + } + } + + if (this.rumble > 0) + { + this.rumble--; + } else if (this.rumble < 0) + { + this.rumble++; + } + + final double rumbleAmount = this.rumble / (double) (37 - 5 * Math.max(this.getRocketTier(), 5)); + for (Entity passenger : this.getPassengers()) + { + passenger.posX += rumbleAmount; + passenger.posZ += rumbleAmount; + } + + if (this.launchPhase >= EnumLaunchPhase.IGNITED.ordinal()) + { + this.performHurtAnimation(); + + this.rumble = (float) this.rand.nextInt(3) - 3; + } + + if (!this.world.isRemote) + { + this.lastLastMotionY = this.lastMotionY; + this.lastMotionY = this.motionY; + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.rocketType = EnumRocketType.values()[buffer.readInt()]; + super.decodePacketdata(buffer); + + if (buffer.readBoolean()) + { + this.posX = buffer.readDouble() / 8000.0D; + this.posY = buffer.readDouble() / 8000.0D; + this.posZ = buffer.readDouble() / 8000.0D; + } + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + return; + } + list.add(this.rocketType != null ? this.rocketType.getIndex() : 0); + super.getNetworkedData(list); + + boolean sendPosUpdates = this.ticks < 25 || this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal(); + list.add(sendPosUpdates); + + if (sendPosUpdates) + { + list.add(this.posX * 8000.0D); + list.add(this.posY * 8000.0D); + list.add(this.posZ * 8000.0D); + } + } + + @Override + public void onReachAtmosphere() + { + // Launch controlled + if (this.destinationFrequency != -1) + { + if (this.world.isRemote) + { + // stop the sounds on the client - but do not reset, the rocket + // may start again + this.stopRocketSound(); + return; + } + + this.setTarget(true, this.destinationFrequency); + + if (this.targetVec != null) + { + if (this.targetDimension != this.world.provider.getDimension()) + { + WorldProvider targetDim = WorldUtil.getProviderForDimensionServer(this.targetDimension); + if (targetDim != null && targetDim.world instanceof WorldServer) + { + boolean dimensionAllowed = this.targetDimension == ConfigManagerCore.idDimensionOverworld; + + if (targetDim instanceof IGalacticraftWorldProvider) + { + if (((IGalacticraftWorldProvider) targetDim).canSpaceshipTierPass(this.getRocketTier())) + dimensionAllowed = true; + else + dimensionAllowed = false; + } else + // No rocket flight to non-Galacticraft dimensions other + // than the Overworld allowed unless config + if ((this.targetDimension > 1 || this.targetDimension < -1) && marsConfigAllDimsAllowed != null) + { + try + { + if (marsConfigAllDimsAllowed.getBoolean(null)) + { + dimensionAllowed = true; + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + if (dimensionAllowed) + { + if (!this.getPassengers().isEmpty()) + { + for (Entity passenger : this.getPassengers()) + { + if (passenger instanceof EntityPlayerMP) + { + WorldUtil.transferEntityToDimension(passenger, this.targetDimension, (WorldServer) targetDim.world, false, this); + } + } + } else + { + Entity e = WorldUtil.transferEntityToDimension(this, this.targetDimension, (WorldServer) targetDim.world, false, null); + if (e instanceof EntityAutoRocket) + { + e.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5f); + ((EntityAutoRocket) e).setLaunchPhase(EnumLaunchPhase.LANDING); + ((EntityAutoRocket) e).setWaitForPlayer(false); + } else + { + GalacticraftCore.logger.info("Error: failed to recreate the unmanned rocket in landing mode on target planet."); + e.setDead(); + this.setDead(); + } + } + return; + } + } + // No destination world found - in this situation continue + // into regular take-off (as if Not launch controlled) + } else + { + // Same dimension controlled rocket flight + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + // Stop any lateral motion, otherwise it will update to an + // incorrect x,z position first tick after spawning above + // target + this.motionX = this.motionZ = 0.0D; + // Small upward motion initially, to keep clear of own flame + // trail from launch + this.motionY = 0.1D; + for (Entity passenger : this.getPassengers()) + { + if (passenger instanceof EntityPlayerMP) + { + WorldUtil.forceMoveEntityToPos(passenger, (WorldServer) this.world, new Vector3(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F), + false); + this.setWaitForPlayer(true); + GalacticraftCore.logger.debug("Rocket repositioned, waiting for player"); + } + } + this.setLaunchPhase(EnumLaunchPhase.LANDING); + // Do not destroy the rocket, we still need it! + return; + } + } else + { + // Launch controlled launch but no valid target frequency = + // rocket loss [INVESTIGATE] + GalacticraftCore.logger.info("Error: the launch controlled rocket failed to find a valid landing spot when it reached space."); + this.fuelTank.drain(Integer.MAX_VALUE, true); + this.posY = Math.max(255, (this.world.provider instanceof IExitHeight ? ((IExitHeight) this.world.provider).getYCoordinateToTeleport() : 1200) - 200); + return; + } + } + + // Not launch controlled + if (!this.world.isRemote) + { + for (Entity e : this.getPassengers()) + { + if (e instanceof EntityPlayerMP) + { + EntityPlayerMP player = (EntityPlayerMP) e; + + this.onTeleport(player); + GCPlayerStats stats = GCPlayerStats.get(player); + WorldUtil.toCelestialSelection(player, stats, this.getRocketTier()); + } + } + + // Destroy any rocket which reached the top of the atmosphere and is + // not controlled by a Launch Controller + this.setDead(); + } + + // Client side, non-launch controlled, do nothing - no reason why it + // can't continue flying until the GUICelestialSelection activates + } + + @Override + protected boolean shouldCancelExplosion() + { + return this.hasValidFuel() && Math.abs(this.lastLastMotionY) < 4; + } + + public void onTeleport(EntityPlayerMP player) + { + } + + @Override + protected void onRocketLand(BlockPos pos) + { + super.onRocketLand(pos); + this.launchCooldown = 40; + } + + @Override + public void onLaunch() + { + super.onLaunch(); + } + + @Override + protected boolean shouldMoveClientSide() + { + return true; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (hand != EnumHand.MAIN_HAND) + { + return false; + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + return false; + } + + if (!this.getPassengers().isEmpty() && this.getPassengers().contains(player)) + { + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, this.world.provider.getDimension(), new Object[] + {}), (EntityPlayerMP) player); + GCPlayerStats stats = GCPlayerStats.get(player); + stats.setChatCooldown(0); + // Prevent player being dropped from the top of the rocket... + float heightBefore = this.height; + this.height = this.height / 2.0F; + this.removePassengers(); + this.height = heightBefore; + } + + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_DISPLAY_ROCKET_CONTROLS, this.world.provider.getDimension(), new Object[] + {}), (EntityPlayerMP) player); + GCPlayerStats stats = GCPlayerStats.get(player); + stats.setChatCooldown(0); + player.startRiding(this); + } + + return true; + } + + return false; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("Type", this.rocketType.getIndex()); + super.writeEntityToNBT(nbt); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.rocketType = EnumRocketType.values()[nbt.getInteger("Type")]; + super.readEntityFromNBT(nbt); + } + + @Override + public EnumRocketType getType() + { + return this.rocketType; + } + + @Override + public int getSizeInventory() + { + if (this.rocketType == null) + return 2; + return this.rocketType.getInventorySpace(); + } + + @Override + public void onWorldTransferred(World world) + { + if (this.targetVec != null) + { + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + this.setLaunchPhase(EnumLaunchPhase.LANDING); + this.setWaitForPlayer(true); + this.motionX = this.motionY = this.motionZ = 0.0D; + } else + { + this.setDead(); + } + } + + @Override + public float getRotateOffset() + { + return -1.5F; + } + + @Override + public boolean isPlayerRocket() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/package-info.java new file mode 100644 index 00000000..159116f7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|prefab|entity") +package micdoodle8.mods.galacticraft.api.prefab.entity; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/package-info.java new file mode 100644 index 00000000..ebe9ecb2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|prefab") +package micdoodle8.mods.galacticraft.api.prefab; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeAdaptive.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeAdaptive.java new file mode 100644 index 00000000..bbed65f6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeAdaptive.java @@ -0,0 +1,389 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.gen.feature.WorldGenAbstractTree; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.BiomeDictionary; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BiomeAdaptive extends BiomeGenBaseGC +{ + + public static BiomeAdaptive biomeDefault; + public static List biomeList = new LinkedList<>(); + private Biome biomeTrue; + private final int index; + private boolean loggedConflict; + + public BiomeAdaptive(int i, Biome biomeInitial) + { + super(BiomeData.builder().biomeName("Outer Space" + (i == 0 ? "" : " " + i)).build()); + this.index = i; + this.biomeTrue = biomeInitial; + this.decorator = this.createBiomeDecorator(); + if (index == 0) + { + biomeDefault = this; + } + } + + @Override + public void registerTypes(Biome b) + { + if (this.biomeTrue instanceof BiomeGenBaseGC) + { + ((BiomeGenBaseGC) this.biomeTrue).registerTypes(this); + } else + { + BiomeDictionary.addTypes(this, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SPARSE, BiomeDictionary.Type.SPOOKY); + } + } + + public static BiomeGenBaseGC register(int index, BiomeGenBaseGC biome) + { + if (index >= biomeList.size()) + { + BiomeAdaptive newAdaptive = new BiomeAdaptive(index, biome); + biomeList.add(newAdaptive); + return newAdaptive; + } + return biomeList.get(index); + } + + public static BiomeGenBaseGC getDefaultBiomeFor(CelestialBody body) + { + return body.biomesToAdapt[0]; + } + + public static void setBody(CelestialBody body) + { + biomeDefault.setBodyInstance(body); + } + + public boolean isInstance(Class clazz) + { + return clazz.isInstance(this.biomeTrue); + } + + /** + * Be sure to call this from your BiomeProvider in:
-- getBiome(BlockPos + * pos, Biome defaultBiome)
-- getBiomesForGeneration(Biome[] biomes, + * int x, int z, int length, int width)
-- getBiomes(@Nullable Biome[] + * oldBiomeList, int x, int z, int width, int depth)
-- + * getBiomes(@Nullable Biome[] listToReuse, int x, int z, int width, int + * length, boolean cacheFlag)
also from your WorldProvider in:
-- + * getBiomeProviderClass()

See BiomeProviderVenus for an example. + */ + public static void setBodyMultiBiome(CelestialBody body) + { + for (BiomeAdaptive b : biomeList) + { + if (b.setBodyInstance(body)) + break; + } + } + + /** + * @param body + * @return true if end of list + */ + protected boolean setBodyInstance(CelestialBody body) + { + this.biomeTrue = body.biomesToAdapt[this.index]; + this.fillerBlock = this.biomeTrue.fillerBlock; + this.topBlock = this.biomeTrue.topBlock; + this.decorator = this.biomeTrue.decorator; + return this.index == body.biomesToAdapt.length - 1; + } + + public static List getBiomesListFor(CelestialBody body) + { + List result = new LinkedList<>(); + for (BiomeAdaptive b : biomeList) + { + if (result.size() >= body.biomesToAdapt.length) + { + break; + } + + result.add(b); + } + return result; + } + + // =========================================================================== + // ===============Pass through all Biome methods to the true + // biome============ + // =========================================================================== + + @Override + public BiomeDecorator createBiomeDecorator() + { + return biomeTrue == null ? null : biomeTrue.createBiomeDecorator(); + } + + @Override + public boolean isMutation() + { + return biomeTrue.isMutation(); + } + + @Override + public WorldGenAbstractTree getRandomTreeFeature(Random rand) + { + return biomeTrue.getRandomTreeFeature(rand); + } + + @Override + public WorldGenerator getRandomWorldGenForGrass(Random rand) + { + return biomeTrue.getRandomWorldGenForGrass(rand); + } + + @Override + public BlockFlower.EnumFlowerType pickRandomFlower(Random rand, BlockPos pos) + { + return biomeTrue.pickRandomFlower(rand, pos); + } + + @Override + @SideOnly(Side.CLIENT) + public int getSkyColorByTemp(float currentTemperature) + { + return biomeTrue.getSkyColorByTemp(currentTemperature); + } + + @Override + public List getSpawnableList(EnumCreatureType creatureType) + { + return biomeTrue.getSpawnableList(creatureType); + } + + @Override + public boolean getEnableSnow() + { + return biomeTrue.getEnableSnow(); + } + + @Override + public boolean canRain() + { + return biomeTrue.canRain(); + } + + @Override + public boolean isHighHumidity() + { + return biomeTrue.isHighHumidity(); + } + + @Override + public float getSpawningChance() + { + return biomeTrue.getSpawningChance(); + } + + @Override + public float getTemperature(BlockPos pos) + { + return biomeTrue.getTemperature(pos); + } + + @Override + public void decorate(World worldIn, Random rand, BlockPos pos) + { + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + this.setBodyInstance(((IGalacticraftWorldProvider) worldIn.provider).getCelestialBody()); + } else + { + reportBiomeIDconflict(); + } + biomeTrue.decorate(worldIn, rand, pos); + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal) + { + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + this.setBodyInstance(((IGalacticraftWorldProvider) worldIn.provider).getCelestialBody()); + } else + { + reportBiomeIDconflict(); + } + biomeTrue.genTerrainBlocks(worldIn, rand, chunkPrimerIn, x, z, noiseVal); + } + + @Override + @SideOnly(Side.CLIENT) + public int getGrassColorAtPos(BlockPos pos) + { + return biomeTrue.getGrassColorAtPos(pos); + } + + @Override + public final void generateBiomeTerrain(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal) + { + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + this.setBodyInstance(((IGalacticraftWorldProvider) worldIn.provider).getCelestialBody()); + } else + { + reportBiomeIDconflict(); + } + biomeTrue.generateBiomeTerrain(worldIn, rand, chunkPrimerIn, x, z, noiseVal); + } + + @Override + @SideOnly(Side.CLIENT) + public int getFoliageColorAtPos(BlockPos pos) + { + return biomeTrue.getFoliageColorAtPos(pos); + } + + @Override + public Class getBiomeClass() + { + return biomeTrue.getBiomeClass(); + } + + @Override + public Biome.TempCategory getTempCategory() + { + return biomeTrue.getTempCategory(); + } + + @Override + public boolean ignorePlayerSpawnSuitability() + { + return biomeTrue.ignorePlayerSpawnSuitability(); + } + + @Override + public float getBaseHeight() + { + return biomeTrue == null ? 0.0F : biomeTrue.getBaseHeight(); + } + + @Override + public float getRainfall() + { + return biomeTrue.getRainfall(); + } + + @Override + @SideOnly(Side.CLIENT) + public String getBiomeName() + { + return biomeTrue.getBiomeName(); + } + + @Override + public float getHeightVariation() + { + return biomeTrue.getHeightVariation(); + } + + @Override + public float getDefaultTemperature() + { + return biomeTrue.getDefaultTemperature(); + } + + @Override + @SideOnly(Side.CLIENT) + public int getWaterColor() + { + return biomeTrue.getWaterColor(); + } + + @Override + public boolean isSnowyBiome() + { + return biomeTrue.isSnowyBiome(); + } + + @Override + public BiomeDecorator getModdedBiomeDecorator(BiomeDecorator original) + { + return biomeTrue.getModdedBiomeDecorator(original); + } + + @Override + public int getWaterColorMultiplier() + { + return biomeTrue.getWaterColorMultiplier(); + } + + @Override + public int getModdedBiomeGrassColor(int original) + { + return biomeTrue.getModdedBiomeGrassColor(original); + } + + @Override + public int getModdedBiomeFoliageColor(int original) + { + return biomeTrue.getModdedBiomeFoliageColor(original); + } + + @Override + public void addDefaultFlowers() + { + if (biomeTrue != null) + biomeTrue.addDefaultFlowers(); + } + + @Override + public void addFlower(IBlockState state, int weight) + { + biomeTrue.addFlower(state, weight); + } + + @Override + public void plantFlower(World world, Random rand, BlockPos pos) + { + if (world.provider instanceof IGalacticraftWorldProvider) + { + this.setBodyInstance(((IGalacticraftWorldProvider) world.provider).getCelestialBody()); + } else + { + reportBiomeIDconflict(); + } + biomeTrue.plantFlower(world, rand, pos); + } + + private void reportBiomeIDconflict() + { + if (this.loggedConflict) + return; + this.loggedConflict = true; + GalacticraftCore.logger.error("POTENTIAL BIOME ID CONFLICT for id " + Biome.getIdForBiome(this) + " conflicting with Galacticraft"); + GalacticraftCore.logger.error("PLEASE CHECK CONFIGS FOR BOTH MODS: see Galacticraft core.conf setting BiomeIDBase"); + Thread.dumpStack(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeDecoratorSpace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeDecoratorSpace.java new file mode 100644 index 00000000..d492e84a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeDecoratorSpace.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.MinecraftForge; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class BiomeDecoratorSpace +{ + + protected Random rand; + + protected int posX; + protected int posZ; + + /** + * Note: the passed X,Z co-ordinates are now block co-ordinates, not chunk + * co-ordinates + * + * @param world + * @param random + * @param posX + * @param posZ + */ + public void decorate(World world, Random random, int posX, int posZ) + { + if (this.getCurrentWorld() != null) + { + throw new RuntimeException("Already decorating!!"); + } else + { + this.setCurrentWorld(world); + this.rand = random; + this.posX = posX; + this.posZ = posZ; + BlockPos pos = new BlockPos(this.posX, 0, this.posZ); + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Pre(world, this.rand, pos)); + this.decorate(); + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Post(world, this.rand, pos)); + this.setCurrentWorld(null); + this.rand = null; + } + } + + protected abstract void setCurrentWorld(World world); + + protected abstract World getCurrentWorld(); + + protected void generateOre(int amountPerChunk, WorldGenerator worldGenerator, int minY, int maxY) + { + World currentWorld = this.getCurrentWorld(); + for (int var5 = 0; var5 < amountPerChunk; ++var5) + { + final int var6 = this.posX + this.rand.nextInt(16); + final int var7 = this.rand.nextInt(maxY - minY) + minY; + final int var8 = this.posZ + this.rand.nextInt(16); + worldGenerator.generate(currentWorld, this.rand, new BlockPos(var6, var7, var8)); + } + } + + protected abstract void decorate(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderDefault.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderDefault.java new file mode 100644 index 00000000..17673594 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderDefault.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.layer.IntCache; + +/** + * A Biome Provider for Galacticraft planets (and other bodies!) which only have + * 1 biome + * + * Makes use of Galacticraft's BiomeAdaptive so that only one Biome is + * registered in Forge (this BiomeProvider in combination with BiomeAdaptive + * makes sure the correct actual biome is seen) + */ +public class BiomeProviderDefault extends BiomeProviderSpace +{ + + private static final Biome[] biomeCache = new Biome[256]; + private final List biomesToSpawnIn; + + private BiomeGenBaseGC biomeTrue; + private CelestialBody body; + + static + { + for (int i = 0; i < 16; ++i) + { + biomeCache[i] = BiomeAdaptive.biomeDefault; + } + System.arraycopy(biomeCache, 0, biomeCache, 16, 16); + System.arraycopy(biomeCache, 0, biomeCache, 32, 32); + System.arraycopy(biomeCache, 0, biomeCache, 64, 64); + System.arraycopy(biomeCache, 0, biomeCache, 128, 128); + } + + public BiomeProviderDefault(CelestialBody theBody) + { + body = theBody; + biomeTrue = BiomeAdaptive.getDefaultBiomeFor(body); + this.biomesToSpawnIn = new ArrayList(); + this.biomesToSpawnIn.add(this.getBiome()); + } + + @Override + public Biome getBiome() + { + if (body != null) + BiomeAdaptive.setBody(body); + return BiomeAdaptive.biomeDefault; + } + + public Biome getBiomeTrue() + { + return biomeTrue; + } + + @Override + public List getBiomesToSpawnIn() + { + return this.biomesToSpawnIn; + } + + @Override + public Biome getBiome(BlockPos pos, Biome defaultBiome) + { + return this.getBiome(); + } + + @Override + public float getTemperatureAtHeight(float par1, int par2) + { + return par1; + } + + @Override + public Biome[] getBiomesForGeneration(Biome[] arrayToReuse, int x, int z, int width, int length) + { + return this.getBiomes(arrayToReuse, x, z, width, length, true); + } + + @Override + public Biome[] getBiomes(Biome[] par1ArrayOfBiome, int par2, int par3, int par4, int par5) + { + return this.getBiomes(par1ArrayOfBiome, par2, par3, par4, par5, true); + } + + @Override + public Biome[] getBiomes(Biome[] listToReuse, int x, int z, int width, int length, boolean cacheFlag) + { + BiomeAdaptive.setBody(body); + IntCache.resetIntCache(); + int size = width * length; + + if (listToReuse == null || listToReuse.length < size) + { + listToReuse = new Biome[size]; + } + + if (size <= 256) + { + System.arraycopy(biomeCache, 0, listToReuse, 0, size); + } else + { + System.arraycopy(biomeCache, 0, listToReuse, 0, 256); + for (int i = 256; i < size; i += i) + { + System.arraycopy(listToReuse, 0, listToReuse, i, ((size - i) < i) ? (size - i) : i); + } + } + + return listToReuse; + } + + @SuppressWarnings("rawtypes") + @Override + public boolean areBiomesViable(int par1, int par2, int par3, List par4List) + { + return par4List.contains(this.getBiomeTrue()); + } + + @SuppressWarnings("rawtypes") + @Override + public BlockPos findBiomePosition(int par1, int par2, int par3, List par4List, Random par5Random) + { + final int var6 = par1 - par3 >> 2; + final int var7 = par2 - par3 >> 2; + final int var8 = par1 + par3 >> 2; + final int var10 = var8 - var6 + 1; + + final int var16 = var6 + 0 % var10 << 2; + final int var17 = var7 + 0 / var10 << 2; + + return new BlockPos(var16, 0, var17); + } + + @Override + public void cleanupCache() + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderSpace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderSpace.java new file mode 100644 index 00000000..7289ea4f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderSpace.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeCache; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.layer.IntCache; + +/** + * Do not include this prefab class in your released mod download.

This + * chunk manager is used for single-biome dimensions, which is common on basic + * planets. + */ +public abstract class BiomeProviderSpace extends BiomeProvider +{ + + private final BiomeCache biomeCache; + private final List biomesToSpawnIn; + + public BiomeProviderSpace() + { + this.biomeCache = new BiomeCache(this); + this.biomesToSpawnIn = new ArrayList(); + this.biomesToSpawnIn.add(this.getBiome()); + } + + @Override + public List getBiomesToSpawnIn() + { + return this.biomesToSpawnIn; + } + + @Override + public Biome getBiome(BlockPos pos, Biome defaultBiome) + { + return this.getBiome(); + } + + @Override + public float getTemperatureAtHeight(float temp, int height) + { + return temp; + } + + @Override + public Biome[] getBiomesForGeneration(Biome[] biomes, int x, int z, int width, int height) + { + IntCache.resetIntCache(); + + if (biomes == null || biomes.length < width * height) + { + biomes = new Biome[width * height]; + } + + for (int var7 = 0; var7 < width * height; ++var7) + { + biomes[var7] = this.getBiome(); + } + + return biomes; + } + + @Override + public Biome[] getBiomes(@Nullable Biome[] oldBiomeList, int x, int z, int width, int depth) + { + return this.getBiomes(oldBiomeList, x, z, width, depth, true); + } + + @Override + public Biome[] getBiomes(Biome[] listToReuse, int x, int z, int width, int length, boolean cacheFlag) + { + IntCache.resetIntCache(); + + if (listToReuse == null || listToReuse.length < width * length) + { + listToReuse = new Biome[width * length]; + } + + if (cacheFlag && width == 16 && length == 16 && (x & 15) == 0 && (z & 15) == 0) + { + final Biome[] var9 = this.biomeCache.getCachedBiomes(x, z); + System.arraycopy(var9, 0, listToReuse, 0, width * length); + return listToReuse; + } else + { + for (int var8 = 0; var8 < width * length; ++var8) + { + listToReuse[var8] = this.getBiome(); + } + + return listToReuse; + } + } + + @Override + public boolean areBiomesViable(int x, int z, int radius, List allowed) + { + return allowed.contains(this.getBiome()); + } + + @Override + public BlockPos findBiomePosition(int x, int z, int range, List biomes, Random random) + { + final int i = x - range >> 2; + final int j = z - range >> 2; + final int k = x + range >> 2; + final int l = k - i + 1; + + final int i1 = i + 0 % l << 2; + final int j1 = j + 0 / l << 2; + + return new BlockPos(i1, 0, j1); + } + + @Override + public void cleanupCache() + { + this.biomeCache.cleanupCache(); + } + + public abstract Biome getBiome(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/ChunkProviderSpace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/ChunkProviderSpace.java new file mode 100644 index 00000000..68ff1e17 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/ChunkProviderSpace.java @@ -0,0 +1,436 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFalling; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; + +import net.minecraftforge.event.ForgeEventFactory; + +import micdoodle8.mods.galacticraft.api.prefab.core.BlockMetaPair; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.perlin.generator.GradientNoise; +import micdoodle8.mods.galacticraft.core.world.gen.EnumCraterSize; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class ChunkProviderSpace extends ChunkProviderBase +{ + + protected final Random rand; + + private final GradientNoise noiseGen1; + private final GradientNoise noiseGen2; + private final GradientNoise noiseGen3; + private final GradientNoise noiseGen4; + private final GradientNoise noiseGen5; + private final GradientNoise noiseGen6; + private final GradientNoise noiseGen7; + + protected final World world; + + private Biome[] biomesForGeneration = this.getBiomesForGeneration(); + + private final double TERRAIN_HEIGHT_MOD = this.getHeightModifier(); + private final double SMALL_FEATURE_HEIGHT_MOD = this.getSmallFeatureHeightModifier(); + private final double MOUNTAIN_HEIGHT_MOD = this.getMountainHeightModifier(); + private final double VALLEY_HEIGHT_MOD = this.getValleyHeightModifier(); + private final int CRATER_PROB = this.getCraterProbability(); + + // DO NOT CHANGE + private final int MID_HEIGHT = this.getSeaLevel(); + private static final int CHUNK_SIZE = 16; + private static final double MAIN_FEATURE_FILTER_MOD = 4; + private static final double LARGE_FEATURE_FILTER_MOD = 8; + private static final double SMALL_FEATURE_FILTER_MOD = 8; + + private List worldGenerators; + + + + public ChunkProviderSpace(World world, long seed, boolean mapFeaturesEnabled) + { + this.world = world; + this.rand = new Random(seed); + this.noiseGen1 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen2 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen3 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen4 = new GradientNoise(this.rand.nextLong(), 2, 0.25D); + this.noiseGen5 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + this.noiseGen6 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + this.noiseGen7 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + } + + public void generateTerrain(int chunkX, int chunkZ, ChunkPrimer primer) + { + this.noiseGen1.setFrequencyAll(0.014999999664723873D); + this.noiseGen2.setFrequencyAll(0.0030000000474999913D); + this.noiseGen3.setFrequencyAll(0.01D); + this.noiseGen4.setFrequencyAll(0.01D); + this.noiseGen5.setFrequencyAll(0.01D); + this.noiseGen6.setFrequencyAll(0.0010000000474974513D); + this.noiseGen7.setFrequencyAll(0.004999999888241291D); + + for (int x = 0; x < CHUNK_SIZE; x++) + { + for (int z = 0; z < CHUNK_SIZE; z++) + { + final double baseHeight = this.noiseGen1.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * this.TERRAIN_HEIGHT_MOD; + final double smallHillHeight = this.noiseGen2.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * this.SMALL_FEATURE_HEIGHT_MOD; + double mountainHeight = Math.abs(this.noiseGen3.evalNoise(chunkX * 16 + x, chunkZ * 16 + z)); + double valleyHeight = Math.abs(this.noiseGen4.evalNoise(chunkX * 16 + x, chunkZ * 16 + z)); + final double featureFilter = this.noiseGen5.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * MAIN_FEATURE_FILTER_MOD; + final double largeFilter = this.noiseGen6.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * LARGE_FEATURE_FILTER_MOD; + final double smallFilter = this.noiseGen7.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * SMALL_FEATURE_FILTER_MOD - 0.5; + mountainHeight = this.lerp(smallHillHeight, mountainHeight * this.MOUNTAIN_HEIGHT_MOD, this.fade(this.clamp(mountainHeight * 2, 0, 1))); + valleyHeight = this.lerp(smallHillHeight, valleyHeight * this.VALLEY_HEIGHT_MOD - this.VALLEY_HEIGHT_MOD + 9, this.fade(this.clamp((valleyHeight + 2) * 4, 0, 1))); + + double yDev = this.lerp(valleyHeight, mountainHeight, this.fade(largeFilter)); + yDev = this.lerp(smallHillHeight, yDev, smallFilter); + yDev = this.lerp(baseHeight, yDev, featureFilter); + + for (int y = 0; y < 255; y++) + { + if (y < this.MID_HEIGHT + yDev) + { + primer.setBlockState(x, y, z, this.getStoneBlock().getBlock().getStateFromMeta(this.getStoneBlock().getMetadata())); + } + } + } + } + } + + private double lerp(double d1, double d2, double t) + { + if (t < 0.0) + { + return d1; + } + if (t > 1.0) + { + return d2; + } else + { + return d1 + (d2 - d1) * t; + } + } + + private double fade(double n) + { + return n * n * n * (n * (n * 6 - 15) + 10); + } + + private double clamp(double x, double min, double max) + { + if (x < min) + { + return min; + } + if (x > max) + { + return max; + } + return x; + } + + public void replaceBiomeBlocks(int x, int z, ChunkPrimer primer, Biome[] biomesIn) + { + final int var5 = 20; + this.noiseGen4.setFrequencyAll(0.0625D); + for (int var8 = 0; var8 < 16; ++var8) + { + for (int var9 = 0; var9 < 16; ++var9) + { + final int var12 = (int) (this.noiseGen4.evalNoise(x * 16 + var8, z * 16 + var9) / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D); + int var13 = -1; + Block var14 = this.getGrassBlock().getBlock(); + byte var14m = this.getGrassBlock().getMetadata(); + Block var15 = this.getDirtBlock().getBlock(); + byte var15m = this.getDirtBlock().getMetadata(); + + for (int var16 = 255 - 1; var16 >= 0; --var16) + { + if (var16 <= 0 + this.rand.nextInt(5)) + { + primer.setBlockState(var8, var16, var9, Blocks.BEDROCK.getDefaultState()); + } else + { + Block var18 = primer.getBlockState(var8, var16, var9).getBlock(); + + if (Blocks.AIR == var18) + { + var13 = -1; + } else if (var18 == this.getStoneBlock().getBlock()) + { + + if (var13 == -1) + { + if (var12 <= 0) + { + var14 = Blocks.AIR; + var14m = 0; + var15 = this.getStoneBlock().getBlock(); + var15m = this.getStoneBlock().getMetadata(); + } else if (var16 >= var5 - -16 && var16 <= var5 + 1) + { + var14 = this.getGrassBlock().getBlock(); + var14m = this.getGrassBlock().getMetadata(); + var14 = this.getDirtBlock().getBlock(); + var14m = this.getDirtBlock().getMetadata(); + } + + var13 = var12; + + if (var16 >= var5 - 1) + { + primer.setBlockState(var8, var16, var9, var14.getStateFromMeta(var14m)); + } else + { + primer.setBlockState(var8, var16, var9, var15.getStateFromMeta(var15m)); + } + } else if (var13 > 0) + { + --var13; + primer.setBlockState(var8, var16, var9, var15.getStateFromMeta(var15m)); + } + } + } + } + } + } + } + + @Override + public Chunk generateChunk(int x, int z) + { + ChunkPrimer primer = new ChunkPrimer(); + try + { + this.rand.setSeed(x * 341873128712L + z * 132897987541L); + this.generateTerrain(x, z, primer); + this.createCraters(x, z, primer); + this.biomesForGeneration = this.world.getBiomeProvider().getBiomes(this.biomesForGeneration, x * 16, z * 16, 16, 16); + this.replaceBiomeBlocks(x, z, primer, this.biomesForGeneration); + + if (this.worldGenerators == null) + { + this.worldGenerators = this.getWorldGenerators(); + } + + for (MapGenBaseMeta generator : this.worldGenerators) + { + generator.generate(this.world, x, z, primer); + } + + this.onChunkProvide(x, z, primer); + } catch (Exception e) + { + GalacticraftCore.logger.error("Error caught in planetary worldgen at coords " + x + "," + z + ". If the next 2 lines are showing an Add-On mod name, please report to that mod's author!"); + e.printStackTrace(); + } + + final Chunk var4 = new Chunk(this.world, primer, x, z); + final byte[] var5 = var4.getBiomeArray(); + + for (int var6 = 0; var6 < var5.length; ++var6) + { + var5[var6] = (byte) Biome.getIdForBiome(this.biomesForGeneration[var6]); + } + + var4.generateSkylightMap(); + return var4; + } + + public void createCraters(int chunkX, int chunkZ, ChunkPrimer primer) + { + this.noiseGen5.setFrequencyAll(0.014999999664723873D); + for (int cx = chunkX - 2; cx <= chunkX + 2; cx++) + { + for (int cz = chunkZ - 2; cz <= chunkZ + 2; cz++) + { + for (int x = 0; x < CHUNK_SIZE; x++) + { + for (int z = 0; z < CHUNK_SIZE; z++) + { + if (Math.abs(this.randFromPoint(cx * 16 + x, (cz * 16 + z) * 1000)) < this.noiseGen5.evalNoise(cx * 16 + x, cz * 16 + z) / this.CRATER_PROB) + { + final Random random = new Random(cx * 16 + x + (cz * 16 + z) * 5000); + final EnumCraterSize cSize = EnumCraterSize.sizeArray[random.nextInt(EnumCraterSize.sizeArray.length)]; + final int size = random.nextInt(cSize.MAX_SIZE - cSize.MIN_SIZE) + cSize.MIN_SIZE + 15; + this.makeCrater(cx * 16 + x, cz * 16 + z, chunkX * 16, chunkZ * 16, size, primer); + } + } + } + } + } + } + + public void makeCrater(int craterX, int craterZ, int chunkX, int chunkZ, int size, ChunkPrimer primer) + { + for (int x = 0; x < CHUNK_SIZE; x++) + { + for (int z = 0; z < CHUNK_SIZE; z++) + { + double xDev = craterX - (chunkX + x); + double zDev = craterZ - (chunkZ + z); + if (xDev * xDev + zDev * zDev < size * size) + { + xDev /= size; + zDev /= size; + final double sqrtY = xDev * xDev + zDev * zDev; + double yDev = sqrtY * sqrtY * 6; + yDev = 5 - yDev; + int helper = 0; + for (int y = 127; y > 0; y--) + { + if (Blocks.AIR != primer.getBlockState(x, y, z).getBlock() && helper <= yDev) + { + primer.setBlockState(x, y, z, Blocks.AIR.getDefaultState()); + helper++; + } + + if (helper > yDev) + { + break; + } + } + } + } + } + } + + private double randFromPoint(int x, int z) + { + int n; + n = x + z * 57; + n = n << 13 ^ n; + return 1.0 - (n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff) / 1073741824.0; + } + + public void decoratePlanet(World world, Random rand, int posX, int posZ) + { + this.getBiomeGenerator().decorate(world, rand, posX, posZ); + } + + @Override + public void populate(int x, int z) + { + BlockFalling.fallInstantly = true; + int var4 = x * 16; + int var5 = z * 16; + this.world.getBiome(new BlockPos(var4 + 16, 0, var5 + 16)); + this.rand.setSeed(this.world.getSeed()); + final long var7 = this.rand.nextLong() / 2L * 2L + 1L; + final long var9 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(x * var7 + z * var9 ^ this.world.getSeed()); + ForgeEventFactory.onChunkPopulate(true, this, this.world, this.rand, x, z, false); + this.decoratePlanet(this.world, this.rand, var4, var5); + this.onPopulate(x, z); + ForgeEventFactory.onChunkPopulate(false, this, this.world, this.rand, x, z, false); + BlockFalling.fallInstantly = false; + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + Biome biomegenbase = this.world.getBiome(pos); + return biomegenbase.getSpawnableList(creatureType); + } + + /** + * Do not return null + * + * @return The biome generator for this world, handles ore, flower, etc + * generation. See GCBiomeDecoratorBase. + */ + protected abstract BiomeDecoratorSpace getBiomeGenerator(); + + /** + * Do not return null, have at least one biome for generation + * + * @return Biome instance for generation + */ + protected abstract Biome[] getBiomesForGeneration(); + + /** + * @return The average terrain level. Default is 64. + */ + protected abstract int getSeaLevel(); + + /** + * List of all world generators to use. Caves, ravines, structures, etc. + *

Return an empty list for no world generators. Do not return null. + * + * @return + */ + protected abstract List getWorldGenerators(); + + /** + * The grass block to be generated. Doesn't have to be grass of course. + * + * @return BlockMetaPair instance containing ID and metadata for grass + * block. + */ + protected abstract BlockMetaPair getGrassBlock(); + + /** + * The dirt block to be generated. Doesn't have to be dirt of course. + * + * @return BlockMetaPair instance containing ID and metadata for dirt block. + */ + protected abstract BlockMetaPair getDirtBlock(); + + /** + * The stone block to be generated. Doesn't have to be stone of course. + * + * @return BlockMetaPair instance containing ID and metadata for stone + * block. + */ + protected abstract BlockMetaPair getStoneBlock(); + + /** + * @return Base height modifier + */ + public abstract double getHeightModifier(); + + /** + * @return Height modifier for small hills + */ + public abstract double getSmallFeatureHeightModifier(); + + /** + * @return Height modifier for mountains + */ + public abstract double getMountainHeightModifier(); + + /** + * @return Height modifier for valleys + */ + public abstract double getValleyHeightModifier(); + + /** + * @return Probability that craters will be generated + */ + public abstract int getCraterProbability(); + + public abstract void onChunkProvide(int cX, int cZ, ChunkPrimer primer); + + public abstract void onPopulate(int cX, int cZ); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/MapGenBaseMeta.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/MapGenBaseMeta.java new file mode 100644 index 00000000..32c99efa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/MapGenBaseMeta.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +/** + * Do not include this prefab class in your released mod download.

This is + * a base class for World Gen such as caves. Override and generate features in + * recursiveGenerate + */ +public abstract class MapGenBaseMeta +{ + + /** + * The number of Chunks to gen-check in any given direction. + */ + protected int range = 8; + + /** + * The RNG used by the MapGen classes. + */ + protected Random rand = new Random(); + + /** + * This world object. + */ + protected World world; + + public void generate(World world, int chunkX, int chunkZ, ChunkPrimer primer) + { + this.world = world; + this.rand.setSeed(world.getSeed()); + final long r0 = this.rand.nextLong(); + final long r1 = this.rand.nextLong(); + + for (int x0 = chunkX - this.range; x0 <= chunkX + this.range; ++x0) + { + for (int y0 = chunkZ - this.range; y0 <= chunkZ + this.range; ++y0) + { + final long randX = x0 * r0; + final long randZ = y0 * r1; + this.rand.setSeed(randX ^ randZ ^ world.getSeed()); + this.recursiveGenerate(world, x0, y0, chunkX, chunkZ, primer); + } + } + } + + /** + * Recursively called by generate() (generate) and optionally by itself. + */ + protected void recursiveGenerate(World world, int xChunkCoord, int zChunkCoord, int origXChunkCoord, int origZChunkCoord, ChunkPrimer primer) + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/WorldProviderSpace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/WorldProviderSpace.java new file mode 100644 index 00000000..d8bf32ef --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/WorldProviderSpace.java @@ -0,0 +1,552 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.util.Arrays; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.JavaUtil; +import net.minecraft.command.CommandTime; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.village.VillageCollection; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class WorldProviderSpace extends WorldProvider implements IGalacticraftWorldProvider +{ + + private long timeCurrentOffset = 0L; + public long preTickTime = Long.MIN_VALUE; + private long saveTCO = 0L; + static Field tickCounter; + + static + { + try + { + tickCounter = VillageCollection.class.getDeclaredField(GCCoreUtil.isDeobfuscated() ? "tickCounter" : "field_75553_e"); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + /** + * @return The fog color in this dimension + */ + public abstract Vector3 getFogColor(); + + /** + * @return The sky color in this dimension + */ + public abstract Vector3 getSkyColor(); + + /** + * Whether or not there will be rain or snow in this dimension + * + * @deprecated Use new shouldDisablePrecipitation method in + * IGalacticraftWorldProvider interface + */ + @Deprecated + @ForRemoval(deadline = "4.1.0") + public boolean canRainOrSnow() + { + return this.shouldDisablePrecipitation(); + } + + /** + * Whether or not to render vanilla sunset (can be overridden with custom + * sky provider) + */ + public abstract boolean hasSunset(); + + /** + * The length of day in this dimension

Default: 24000 + */ + public abstract long getDayLength(); + + public abstract Class getChunkProviderClass(); + + /** + * If possible you should not override this so that BiomeProviderDefault is + * used (see Moon, Mars and Asteroids for examples) + * + * But this can be used for planets where you have multiple biomes In that + * case if using BiomeAdaptive (see Venus for example) this will need a + * BiomeAdaptive.setBodyMultiBiome() call; + */ + public Class getBiomeProviderClass() + { + return null; + } + + @Override + public void setDimension(int var1) + { + super.setDimension(var1); + } + + @Override + public void updateWeather() + { + if (!this.world.isRemote) + { + long newTime = world.getWorldInfo().getWorldTime(); + if (this.preTickTime == Long.MIN_VALUE) + { + // First tick: get the timeCurrentOffset from saved ticks in + // villages.dat :) + int savedTick = 0; + try + { + tickCounter.setAccessible(true); + savedTick = tickCounter.getInt(this.world.villageCollection); + if (savedTick < 0) + savedTick = 0; + } catch (Exception ignore) + { + } + this.timeCurrentOffset = savedTick - newTime; + } else + { + // Detect jumps in world time (e.g. because of bed use on + // Overworld) and reverse them for this world + long diff = (newTime - this.preTickTime); + if (diff > 1L) + { + this.timeCurrentOffset -= diff - 1L; + this.saveTime(); + } + } + this.preTickTime = newTime; + this.saveTCO = 0L; + } + + if (this.shouldDisablePrecipitation()) + { + this.world.getWorldInfo().setRainTime(0); + this.world.getWorldInfo().setRaining(false); + this.world.getWorldInfo().setThunderTime(0); + this.world.getWorldInfo().setThundering(false); + this.world.rainingStrength = 0.0F; + this.world.thunderingStrength = 0.0F; + } else + { + this.updateWeatherOverride(); + } + } + + /* + * Override this to circumvent vanilla updateWeather() + */ + protected void updateWeatherOverride() + { + super.updateWeather(); + } + + @Override + public String getSaveFolder() + { + return "DIM" + this.getCelestialBody().getDimensionID(); + } + + @Override + public boolean isGasPresent(EnumAtmosphericGas gas) + { + return this.getCelestialBody().atmosphere.isGasPresent(gas); + } + + @Override + public boolean hasNoAtmosphere() + { + return this.getCelestialBody().atmosphere.hasNoGases(); + } + + @Override + public boolean hasBreathableAtmosphere() + { + return this.getCelestialBody().atmosphere.isBreathable(); + } + + @Override + public boolean shouldDisablePrecipitation() + { + return !this.getCelestialBody().atmosphere.hasPrecipitation(); + } + + @Override + public float getSoundVolReductionAmount() + { + float d = this.getCelestialBody().atmosphere.relativeDensity(); + if (d <= 0.0F) + { + return 20.0F; + } + if (d > 5.0F) + { + return 0.2F; + } + return 1.0F / d; + } + + @Override + public double getMeteorFrequency() + { + float d = this.getCelestialBody().atmosphere.relativeDensity(); + if (d <= 0.0F) + { + return 5.0D; + } + return d * 100D; + } + + @Override + public float getThermalLevelModifier() + { + return this.getCelestialBody().atmosphere.thermalLevel(); + } + + @Override + public float getWindLevel() + { + return this.getCelestialBody().atmosphere.windLevel(); + } + + @Override + public boolean shouldCorrodeArmor() + { + return this.getCelestialBody().atmosphere.isCorrosive(); + } + + @Override + public boolean canBlockFreeze(BlockPos pos, boolean byWater) + { + // TODO: if block is water and world temperature is low, freeze + return super.canBlockFreeze(pos, byWater); + } + + @Override + public boolean canDoLightning(Chunk chunk) + { + return !this.shouldDisablePrecipitation(); + } + + @Override + public boolean canDoRainSnowIce(Chunk chunk) + { + return !this.shouldDisablePrecipitation(); + } + + @Override + public float getSolarSize() + { + return 1.0F / this.getCelestialBody().getRelativeDistanceFromCenter().unScaledDistance; + } + + @Override + public float[] calcSunriseSunsetColors(float var1, float var2) + { + return this.hasSunset() ? super.calcSunriseSunsetColors(var1, var2) : null; + } + + @Override + public float calculateCelestialAngle(long par1, float par3) + { + par1 = this.getWorldTime(); + int j = (int) (par1 % this.getDayLength()); + float f1 = (j + par3) / this.getDayLength() - 0.25F; + + if (f1 < 0.0F) + { + ++f1; + } + + if (f1 > 1.0F) + { + --f1; + } + + float f2 = f1; + f1 = 0.5F - MathHelper.cos(f1 * 3.1415927F) / 2.0F; + return f2 + (f1 - f2) / 3.0F; + } + + @SideOnly(Side.CLIENT) + @Override + public Vec3d getFogColor(float var1, float var2) + { + Vector3 fogColor = this.getFogColor(); + return new Vec3d(fogColor.floatX(), fogColor.floatY(), fogColor.floatZ()); + } + + @Override + public Vec3d getSkyColor(Entity cameraEntity, float partialTicks) + { + Vector3 skyColor = this.getSkyColor(); + return new Vec3d(skyColor.floatX(), skyColor.floatY(), skyColor.floatZ()); + } + + @Override + public boolean isSkyColored() + { + return true; + } + + /** + * Do not override this. + * + * Returns true on clients (to allow rendering of sky etc, maybe even + * clouds). Returns false on servers (to disable Nether Portal mob spawning + * and sleeping in beds). + */ + @Override + public boolean isSurfaceWorld() + { + return (this.world == null) ? false : this.world.isRemote; + } + + /** + * This must normally return false, so that if the dimension is set for + * 'static' loading it will not keep chunks around the dimension spawn + * position permanently loaded. It is also needed to be false so that the + * 'Force Overworld Respawn' setting in core.conf will work correctly - see + * also WorldProviderS[ace.getRespawnDimension(). + * + * But: returning 'false' will cause beds to explode in this dimension. If + * you want beds NOT to explode, you can override this, like in + * WorldProviderMoon. + */ + @Override + public boolean canRespawnHere() + { + return false; + } + + /** + * Do NOT override this in your add-ons. + * + * This controls whether the player will respawn in the space dimension or + * the Overworld in accordance with the 'Force Overworld Respawn' setting on + * core.conf. + */ + @Override + public int getRespawnDimension(EntityPlayerMP player) + { + return this.shouldForceRespawn() ? this.getDimension() : 0; + } + + /** + * If true, the the player should respawn in this dimension upon death. + * + * Obeying the 'Force Overworld Respawn' setting from core.conf is an + * important protection for players are endlessly dying in a space + * dimension: for example respawning in an airless environment with no + * oxygen tanks and no oxygen machinery. + */ + public boolean shouldForceRespawn() + { + return !ConfigManagerCore.forceOverworldRespawn; + } + + /** + * If false (the default) then Nether Portals will have no function on this + * world. Nether Portals can still be constructed, if the player can make + * fire, they just won't do anything. + * + * @return True if Nether Portals should work like on the Overworld. + */ + @Override + public boolean netherPortalsOperational() + { + return false; + } + + @Override + public float getArrowGravity() + { + return 0.005F; + } + + @Override + public IChunkGenerator createChunkGenerator() + { + try + { + Class chunkProviderClass = this.getChunkProviderClass(); + + Constructor[] constructors = chunkProviderClass.getConstructors(); + for (int i = 0; i < constructors.length; i++) + { + Constructor constr = constructors[i]; + if (Arrays.equals(constr.getParameterTypes(), new Object[] {World.class, long.class, boolean.class})) + { + return (IChunkGenerator) constr.newInstance(this.world, this.world.getSeed(), this.world.getWorldInfo().isMapFeaturesEnabled()); + } + if(Arrays.equals(constr.getParameterTypes(), new Object[] {World.class, long.class})) + { + return (IChunkGenerator) constr.newInstance(this.world, this.world.getSeed()); + } + else if (constr.getParameterTypes().length == 0) + { + return (IChunkGenerator) constr.newInstance(); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } + + @Override + protected void init() + { + this.hasSkyLight = true; + + if (this.getBiomeProviderClass() != null) + { + try + { + Class biomeProviderClass = this.getBiomeProviderClass(); + + Constructor[] constructors = biomeProviderClass.getConstructors(); + for (Constructor constr : constructors) + { + if (Arrays.equals(constr.getParameterTypes(), new Object[] + {World.class})) + { + this.biomeProvider = (BiomeProvider) constr.newInstance(this.world); + } else if (constr.getParameterTypes().length == 0) + { + this.biomeProvider = (BiomeProvider) constr.newInstance(); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } else + { + this.biomeProvider = new BiomeProviderDefault(this.getCelestialBody()); + } + } + + @Override + public BiomeProvider getBiomeProvider() + { + if (this.getBiomeProviderClass() == null) + { + BiomeAdaptive.setBody(this.getCelestialBody()); + } + return biomeProvider; + } + + @Override + public boolean shouldMapSpin(String entity, double x, double y, double z) + { + return false; + } + + // Work around vanilla feature: worlds which are not the Overworld cannot + // change the time, as the worldInfo is a DerivedWorldInfo + // Therefore each Galacticraft dimension maintains its own timeCurrentOffset + @Override + public void setWorldTime(long time) + { + world.getWorldInfo().setWorldTime(time); + if (!world.isRemote) + { + if (JavaUtil.instance.isCalledBy(CommandTime.class)) + { + this.timeCurrentOffset = this.saveTCO; + this.saveTime(); + this.preTickTime = time; + } else + { + long newTCO = time - world.getWorldInfo().getWorldTime(); + long diff = newTCO - this.timeCurrentOffset; + if (diff > 1L || diff < -1L) + { + this.timeCurrentOffset = newTCO; + this.saveTime(); + this.preTickTime = time; + } + } + this.saveTCO = 0; + } + } + + @Override + public long getWorldTime() + { + if (JavaUtil.instance.isCalledBy(CommandTime.class)) + { + this.saveTCO = this.timeCurrentOffset; + } + return world.getWorldInfo().getWorldTime() + this.timeCurrentOffset; + } + + /** + * Adjust time offset on Galacticraft worlds when the Overworld time jumps + * and you don't want the time on all the other Galacticraft worlds to jump + * also - see WorldUtil.setNextMorning() for example + */ + public void adjustTimeOffset(long diff) + { + if (diff != 0L) + { + this.timeCurrentOffset -= diff; + this.preTickTime += diff; + this.saveTime(); + } + } + + public void adjustTime(long newTime) + { + long diff = newTime - this.preTickTime; + if (diff != 0L) + { + this.timeCurrentOffset -= diff; + this.preTickTime = newTime; + this.saveTime(); + } + } + + /** + * Save this world's custom time (from timeCurrentOffset) into this world's + * villages.dat :) + */ + private void saveTime() + { + try + { + VillageCollection vc = this.world.villageCollection; + tickCounter.setAccessible(true); + tickCounter.setInt(vc, (int) (this.getWorldTime())); + vc.markDirty(); + } catch (Exception ignore) + { + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/package-info.java new file mode 100644 index 00000000..cfa47ad2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|prefab|worldgen") +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CircuitFabricatorRecipes.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CircuitFabricatorRecipes.java new file mode 100644 index 00000000..3fd25f07 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CircuitFabricatorRecipes.java @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +public class CircuitFabricatorRecipes +{ + + private static List> recipeInputs = new ArrayList<>(); + private static List recipeOutputs = new ArrayList<>(); + + public static ArrayList> slotValidItems = new ArrayList<>(5); + + /** + * Input list must be array with 5 elements matching the 5 slots in the + * machine. Use null if no item is used in the slot. Use a List + * for Oredicted ingredients.

0: Diamond 1: Silicon 2: Silicon 3: + * Redstone dust 4: Recipe item + * + * @param output ItemStack + * @param inputList Object array. Must contain only null, ItemStack, or + * List. + * + * @return + */ + public static void addRecipe(ItemStack output, List inputList) + { + if (inputList.size() != 5) + { + throw new RuntimeException("Invalid circuit fabricator recipe! Inputs length should be 5, was " + inputList.size()); + } + for (Object o : inputList) + { + if (o == null || o instanceof ItemStack) + { + continue; + } + if (o instanceof List && ((List) o).size() > 0) + { + continue; + } + throw new RuntimeException("Invalid circuit fabricator recipe! Input must be ItemStack or List: " + o.toString()); + } + + NonNullList inputs = NonNullList.create(); + inputs.addAll(inputList); + CircuitFabricatorRecipes.recipeInputs.add(inputs); + CircuitFabricatorRecipes.recipeOutputs.add(output); + validateItems(inputList); + } + + /** + * Add the recipe ingredients to the valid items for each slot + * + * @param inputList + */ + @SuppressWarnings("unchecked") + private static void validateItems(List inputList) + { + // First initialise the ArrayList if this is the first time it's used + if (CircuitFabricatorRecipes.slotValidItems.size() == 0) + { + for (int i = 0; i < 5; i++) + { + ArrayList entry = new ArrayList<>(3); + CircuitFabricatorRecipes.slotValidItems.add(entry); + } + } + // Now see if the recipe items are already valid for their slots, if not + // add them + for (int i = 0; i < 5; i++) + { + Object input = inputList.get(i); + if (input instanceof ItemStack) + { + validateItem(i, (ItemStack) input); + } else if (input instanceof List) + { + for (ItemStack stack : (List) input) + { + validateItem(i, stack); + } + } + } + } + + private static void validateItem(int i, ItemStack inputStack) + { + if (inputStack.isEmpty()) + { + return; + } + + ArrayList validItems = CircuitFabricatorRecipes.slotValidItems.get(i); + + boolean found = false; + for (int j = 0; j < validItems.size(); j++) + { + if (inputStack.isItemEqual(validItems.get(j))) + { + found = true; + break; + } + } + if (!found) + { + validItems.add(inputStack.copy()); + } + } + + /** + * Gets the output ItemStack for the passed input. + * + * @param inputList ItemStack array of input items + * @return The result ItemStack + */ + @SuppressWarnings("unchecked") + public static ItemStack getOutputForInput(List inputList) + { + if (inputList.size() != 5) + { + return ItemStack.EMPTY; + } + + int count = 0; + for (NonNullList recipe : CircuitFabricatorRecipes.recipeInputs) + { + boolean found = true; + for (int i = 0; i < 5; i++) + { + Object recipeStack = recipe.get(i); + ItemStack inputStack = inputList.get(i); + + if (recipeStack instanceof ItemStack && ((ItemStack) recipeStack).isEmpty() || inputStack.isEmpty()) + { + if (!(recipeStack instanceof ItemStack && ((ItemStack) recipeStack).isEmpty()) || !inputStack.isEmpty()) + { + found = false; + break; + } + } else if (recipeStack instanceof ItemStack) + { + ItemStack stack = ((ItemStack) recipeStack); + if (stack.getItem() != inputStack.getItem() || stack.getItemDamage() != inputStack.getItemDamage() || !RecipeUtil.areItemStackTagsEqual(stack, inputStack)) + { + found = false; + break; + } + } else if (recipeStack instanceof List) + { + boolean listMatchOne = false; + for (ItemStack stack : (List) recipeStack) + { + if (stack.getItem() == inputStack.getItem() && stack.getItemDamage() == inputStack.getItemDamage() && RecipeUtil.areItemStackTagsEqual(stack, inputStack)) + { + listMatchOne = true; + break; + } + } + if (listMatchOne == false) + { + found = false; + break; + } + } + } + + if (found) + { + return recipeOutputs.get(count); + } + + count++; + } + + return ItemStack.EMPTY; + } + + public static List> getRecipes() + { + return recipeInputs; + } + + public static ItemStack getOutput(int count) + { + return recipeOutputs.get(count); + } + + /** + * Caution: call this BEFORE the JEI plugin registers recipes - or else the + * removed recipe will still be shown in JEI. + */ + public static void removeRecipe(ItemStack match) + { + int count = 0; + for (ItemStack output : new ArrayList(recipeOutputs)) + { + if (ItemStack.areItemStacksEqual(match, output)) + { + recipeInputs.remove(count); + recipeOutputs.remove(count); + // Do not increment count if we just removed the element! + } else + count++; + } + } + + @SuppressWarnings("unchecked") + public static void replaceRecipeIngredient(ItemStack ingredient, List replacement) + { + if (ingredient == null) + return; + CircuitFabricatorRecipes.slotValidItems.clear(); + Object newIngredient = replacement; + + for (NonNullList recipe : CircuitFabricatorRecipes.recipeInputs) + { + for (int i = 0; i < 5; i++) + { + Object recipeStack = recipe.get(i); + if (recipeStack == null) + { + continue; + } + + if (recipeStack instanceof ItemStack) + { + ItemStack stack = ((ItemStack) recipeStack); + if (stack.getItem() == ingredient.getItem() && stack.getItemDamage() == ingredient.getItemDamage() && ItemStack.areItemStackTagsEqual(stack, ingredient)) + { + recipe.set(i, newIngredient); + } + } else if (recipeStack instanceof List) + { + for (ItemStack stack : (List) recipeStack) + { + if (stack.getItem() == ingredient.getItem() && stack.getItemDamage() == ingredient.getItemDamage() && ItemStack.areItemStackTagsEqual(stack, ingredient)) + { + recipe.set(i, newIngredient); + break; + } + } + } + } + + CircuitFabricatorRecipes.validateItems(recipe); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CompressorRecipes.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CompressorRecipes.java new file mode 100644 index 00000000..8aed1dea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CompressorRecipes.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftConfigAccess; +import micdoodle8.mods.galacticraft.core.GCItems; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; + +public class CompressorRecipes +{ + + private static List recipes = new ArrayList<>(); + private static List recipesAdventure = new ArrayList<>(); + private static boolean adventureOnly = false; + //private static Field adventureFlag; + //private static boolean flagNotCached = true; + public static boolean steelIngotsPresent = false; + public static List steelRecipeGC; + + public static ShapedRecipesGC addRecipe(ItemStack output, Object... inputList) + { + StringBuilder s = new StringBuilder(); + int i = 0; + int j = 0; + int k = 0; + + if (inputList[i] instanceof String[]) + { + String[] astring = (String[]) inputList[i++]; + + for (String s1 : astring) + { + ++k; + j = s1.length(); + s.append(s1); + } + } else + { + while (inputList[i] instanceof String) + { + String s2 = (String) inputList[i++]; + ++k; + j = s2.length(); + s.append(s2); + } + } + + HashMap hashmap = new HashMap<>(inputList.length / 2, 1.0F); + + for (; i < inputList.length; i += 2) + { + Character character = (Character) inputList[i]; + ItemStack itemstack1 = null; + + if (inputList[i + 1] instanceof Item) + { + itemstack1 = new ItemStack((Item) inputList[i + 1]); + } else if (inputList[i + 1] instanceof Block) + { + itemstack1 = new ItemStack((Block) inputList[i + 1], 1, 32767); + } else if (inputList[i + 1] instanceof ItemStack) + { + itemstack1 = (ItemStack) inputList[i + 1]; + } + + hashmap.put(character, itemstack1); + } + + ItemStack[] aitemstack = new ItemStack[j * k]; + + for (int i1 = 0; i1 < j * k; ++i1) + { + char c0 = s.charAt(i1); + + if (hashmap.containsKey(c0)) + { + aitemstack[i1] = hashmap.get(c0).copy(); + } else + { + aitemstack[i1] = null; + } + } + + ShapedRecipesGC shapedRecipes = new ShapedRecipesGC(j, k, aitemstack, output); + if (!adventureOnly) + CompressorRecipes.recipes.add(shapedRecipes); + CompressorRecipes.recipesAdventure.add(shapedRecipes); + return shapedRecipes; + } + + public static void addShapelessRecipe(ItemStack itemStack, Object... objs) + { + ArrayList arraylist = new ArrayList<>(); + + for (Object object1 : objs) + { + if (object1 instanceof ItemStack) + { + arraylist.add(((ItemStack) object1).copy()); + } else if (object1 instanceof Item) + { + arraylist.add(new ItemStack((Item) object1)); + } else if (object1 instanceof String) + { + arraylist.add(object1); + } else + { + if (!(object1 instanceof Block)) + { + throw new RuntimeException("Invalid shapeless compressor recipe!"); + } + + arraylist.add(new ItemStack((Block) object1)); + } + } + + IRecipe toAdd = new ShapelessOreRecipeGC(itemStack, arraylist.toArray()); + if (!adventureOnly) + CompressorRecipes.recipes.add(toAdd); + CompressorRecipes.recipesAdventure.add(toAdd); + } + + public static ShapedRecipesGC addRecipeAdventure(ItemStack output, Object... inputList) + { + adventureOnly = true; + ShapedRecipesGC returnValue = CompressorRecipes.addRecipe(output, inputList); + adventureOnly = false; + return returnValue; + } + + public static void addShapelessAdventure(ItemStack par1ItemStack, Object... par2ArrayOfObj) + { + adventureOnly = true; + CompressorRecipes.addShapelessRecipe(par1ItemStack, par2ArrayOfObj); + adventureOnly = false; + } + + public static ItemStack findMatchingRecipe(InventoryCrafting inventory, World par2World) + { + int i = 0; + ItemStack itemstack = ItemStack.EMPTY; + ItemStack itemstack1 = ItemStack.EMPTY; + int j; + + for (j = 0; j < inventory.getSizeInventory(); ++j) + { + ItemStack itemstack2 = inventory.getStackInSlot(j); + + if (!itemstack2.isEmpty()) + { + if (i == 0) + { + itemstack = itemstack2; + } + + if (i == 1) + { + itemstack1 = itemstack2; + } + + ++i; + } + } + + if (i == 2 && itemstack.getItem() == itemstack1.getItem() && itemstack.getCount() == 1 && itemstack1.getCount() == 1 && itemstack.getItem().isRepairable()) + { + Item item = itemstack.getItem(); + int k = item.getMaxDamage(itemstack) - itemstack.getItemDamage(); + int l = item.getMaxDamage(itemstack) - itemstack1.getItemDamage(); + int i1 = k + l + item.getMaxDamage(itemstack) * 5 / 100; + int j1 = item.getMaxDamage(itemstack) - i1; + + if (j1 < 0) + { + j1 = 0; + } + + return new ItemStack(itemstack.getItem(), 1, j1); + } else + { + List theRecipes = CompressorRecipes.getRecipeList(); + + for (j = 0; j < theRecipes.size(); ++j) + { + IRecipe irecipe = theRecipes.get(j); + + if (irecipe instanceof ShapedRecipesGC && irecipe.matches(inventory, par2World)) + { + return irecipe.getRecipeOutput().copy(); + } else if (irecipe instanceof ShapelessOreRecipeGC && irecipe.matches(inventory, par2World)) + { + return irecipe.getRecipeOutput().copy(); + } + } + + return ItemStack.EMPTY; + } + } + + public static List getRecipeListAll() + { + List result = new ArrayList<>(CompressorRecipes.recipesAdventure); + List endList = getRecipeListHidden(true, true); + result.removeIf(irecipe -> endList.contains(irecipe)); + IRecipe ice = null; + Item iceItem = new ItemStack(Blocks.ICE).getItem(); + for (IRecipe test : result) + { + if (test.getRecipeOutput().getItem() == iceItem) + { + ice = test; + break; + } + } + if (ice != null) + { + result.remove(ice); + result.add(ice); + } + result.addAll(endList); + return result; + } + + public static List getRecipeListHidden(boolean hideSteel, boolean hideAdventure) + { + if (!hideAdventure) + return new ArrayList(0); + + List result = new ArrayList<>(CompressorRecipes.recipesAdventure); + result.removeIf(irecipe -> CompressorRecipes.recipes.contains(irecipe)); + if (steelIngotsPresent && hideSteel) + { + List resultSteelless = new ArrayList<>(result.size()); + for (IRecipe recipe : result) + { + ItemStack output = recipe.getRecipeOutput(); + if (output == null) + continue; // Intentional ItemStack null check + if (output.getItemDamage() == 9 && output.getItem() == GCItems.basicItem && recipe instanceof ShapelessOreRecipeGC) + { + if (((ShapelessOreRecipeGC) recipe).matches(steelRecipeGC)) + { + continue; + } + } + resultSteelless.add(recipe); + } + return resultSteelless; + } + return result; + } + + public static List getRecipeList() + { + if (GalacticraftConfigAccess.getChallengeRecipes()) + return CompressorRecipes.recipesAdventure; + + // Filter out the GC steel recipe in Hard Mode + if (steelIngotsPresent && GalacticraftConfigAccess.getHardMode()) + { + List resultSteelless = new ArrayList<>(CompressorRecipes.recipes.size()); + for (IRecipe recipe : CompressorRecipes.recipes) + { + ItemStack output = recipe.getRecipeOutput(); + if (output == null) + continue; // Intentional ItemStack null check + if (output.getItemDamage() == 9 && output.getItem() == GCItems.basicItem && recipe instanceof ShapelessOreRecipeGC) + { + if (((ShapelessOreRecipeGC) recipe).matches(steelRecipeGC)) + { + continue; + } + } + resultSteelless.add(recipe); + } + return resultSteelless; + } + + return CompressorRecipes.recipes; + } + + public static List getRecipes(ItemStack match) + { + List result = new ArrayList(CompressorRecipes.getRecipeList()); + result.removeIf(irecipe -> !ItemStack.areItemStacksEqual(match, irecipe.getRecipeOutput())); + return result; + } + + /** + * Caution: call this BEFORE the JEI plugin registers recipes - or else the + * removed recipe will still be shown in JEI. + */ + public static void removeRecipe(ItemStack match) + { + CompressorRecipes.recipes.removeIf(irecipe -> ItemStack.areItemStacksEqual(match, irecipe.getRecipeOutput())); + CompressorRecipes.recipesAdventure.removeIf(irecipe -> ItemStack.areItemStacksEqual(match, irecipe.getRecipeOutput())); + } + + public static void replaceRecipeIngredient(ItemStack ingredient, List replacement) + { + if (ingredient == null) + return; + + for (IRecipe recipe : CompressorRecipes.recipesAdventure) + { + if (recipe instanceof IRecipeUpdatable) + { + ((IRecipeUpdatable) recipe).replaceInput(ingredient, replacement); + } + } + } + + public static void replaceRecipeIngredient(ItemStack ingredient) + { + if (ingredient == null) + return; + + for (IRecipe recipe : CompressorRecipes.recipesAdventure) + { + if (recipe instanceof IRecipeUpdatable) + { + ((IRecipeUpdatable) recipe).replaceInput(ingredient); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/INasaWorkbenchRecipe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/INasaWorkbenchRecipe.java new file mode 100644 index 00000000..d6c7a338 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/INasaWorkbenchRecipe.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.HashMap; +import javax.annotation.Nonnull; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public interface INasaWorkbenchRecipe +{ + + boolean matches(IInventory inventory); + + int getRecipeSize(); + + @Nonnull + ItemStack getRecipeOutput(); + + HashMap getRecipeInput(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/IRecipeUpdatable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/IRecipeUpdatable.java new file mode 100644 index 00000000..13dcef8d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/IRecipeUpdatable.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.List; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +public interface IRecipeUpdatable extends IRecipe +{ + + /** + * Replace all inputs which match ItemStack inputA with a List + * (probably representing OreDict output). + * + * @param inputA the current simple ItemStack ingredient + * @param inputB the List to replace it with + */ + public void replaceInput(ItemStack ingredient, List replacement); + + /** + * Replace all inputs which are lists containing ItemStack ingredient with + * simple ItemStack of ingredient. + * + * @param ingredient + */ + public void replaceInput(ItemStack ingredient); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicItem.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicItem.java new file mode 100644 index 00000000..4720cbcf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicItem.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +/** + * Implement this in an item that will be accepted into the schematic slot + */ +public interface ISchematicItem +{ + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicPage.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicPage.java new file mode 100644 index 00000000..7aebcc2c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicPage.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/** + * Schematic page to be added to NASA Workbench + */ +public interface ISchematicPage extends Comparable +{ + + /** + * Get the page ID. Make it configurable since it has to be unique between + * other Galacticraft addons. Determines order of schematics. + */ + int getPageID(); + + /** + * The GUI ID of this page. Used like any other GUI IDs to determine which + * container and GUI to open. Again, must be unique between mods so make it + * configurable. + */ + int getGuiID(); + + /** + * The item required to unlock this schematic. The item class must implement + * ISchematicItem, since it goes in the NASA Workbench unlock slot. + */ + ItemStack getRequiredItem(); + + /** + * The resulting client-side GUI for this page + * + * @param player The player opening this GUI + * @param pos Coordinates of the NASA Workbench + * @return the GUI to be opened with this schematic + */ + @SideOnly(Side.CLIENT) + GuiScreen getResultScreen(EntityPlayer player, BlockPos pos); + + /** + * The resulting container for this page + * + * @param player The player opening this GUI + * @param pos Coordinates of the NASA Workbench + * @return the container to be opened with this schematic + */ + Container getResultContainer(EntityPlayer player, BlockPos pos); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicResultPage.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicResultPage.java new file mode 100644 index 00000000..7e6443f0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicResultPage.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +/** + * Implement into GUI classes for the unlocked pages + */ +public interface ISchematicResultPage +{ + + /** + * Sets the integer index in the set of pages the player has unlocked + */ + void setPageIndex(int index); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicEvent.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicEvent.java new file mode 100644 index 00000000..10d5fbf3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicEvent.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.eventhandler.Event; + +/** + * These events are used internally to perform actions when Galacticraft is + * installed, without needing to include unnecessary classes. There is no need + * to subscribe to these events. + */ +public abstract class SchematicEvent extends Event +{ + + public ISchematicPage page; + + public SchematicEvent(ISchematicPage page) + { + this.page = page; + } + + public static class Unlock extends SchematicEvent + { + + public EntityPlayerMP player; + + public Unlock(EntityPlayerMP player, ISchematicPage page) + { + super(page); + this.player = player; + } + } + + public static class FlipPage extends SchematicEvent + { + + public int index; + public int direction; + public GuiScreen currentGui; + + public FlipPage(GuiScreen cs, ISchematicPage page, int index, int direction) + { + super(page); + this.currentGui = cs; + this.index = index; + this.direction = direction; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicPage.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicPage.java new file mode 100644 index 00000000..a4173971 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicPage.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +/** + * Reference implementation of {@link ISchematicPage}. Use/extend this or + * implement your own. + */ +public abstract class SchematicPage implements ISchematicPage +{ + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicRegistry.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicRegistry.java new file mode 100644 index 00000000..35b682b6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicRegistry.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.recipe.SchematicEvent.FlipPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicEvent.Unlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicRegistry +{ + + public static ArrayList schematicRecipes = new ArrayList(); + public static ArrayList schematicItems = new ArrayList<>(); + public static ArrayList textures = new ArrayList<>(); + + /** + * Register a new schematic page + */ + public static void registerSchematicRecipe(ISchematicPage page) + { + if (!SchematicRegistry.schematicRecipes.contains(page)) + { + SchematicRegistry.schematicRecipes.add(page); + } + } + + /** + * Finds the recipe for the given itemstack + * + * @param stack the itemstack to be searched with + * @return the recipe that requires the provided itemstack + */ + public static ISchematicPage getMatchingRecipeForItemStack(ItemStack stack) + { + for (final ISchematicPage schematic : SchematicRegistry.schematicRecipes) + { + final ItemStack requiredItem = schematic.getRequiredItem(); + + if (requiredItem != null && stack != null && requiredItem.isItemEqual(stack)) + { + return schematic; + } + } + + return null; + } + + /** + * Finds the recipe for the given recipe ID + * + * @param id the ID to be searched with + * @return the recipe that has and ID equal to the one provided + */ + public static ISchematicPage getMatchingRecipeForID(int id) + { + for (final ISchematicPage schematic : SchematicRegistry.schematicRecipes) + { + if (schematic.getPageID() == id) + { + return schematic; + } + } + + return null; + } + + /** + * Called when a player unlocks a page. Used internally. + * + * @param player the player that unlocked the schematic + * @param page the schematic page to be unlocked + */ + public static void addUnlockedPage(EntityPlayerMP player, ISchematicPage page) + { + // Used internally to add page to player's list of unlocked schematics. + // No need to subscribe to this event + if (page != null) + MinecraftForge.EVENT_BUS.post(new Unlock(player, page)); + } + + /** + * Called when a player unlocks a page. Used internally. + * + * @param player the player that unlocked the schematic + * @param stack the itemstack the player has provided + * @return the schematic page that was unlocked + */ + public static ISchematicPage unlockNewPage(EntityPlayerMP player, ItemStack stack) + { + if (stack != null) + { + final ISchematicPage schematic = SchematicRegistry.getMatchingRecipeForItemStack(stack); + + if (schematic != null) + { + SchematicRegistry.addUnlockedPage(player, schematic); + + return schematic; + } + } + + return null; + } + + /** + * Finds the correct schematic when player presses NEXT + * + * @param currentIndex the current index of unlocked schematics the player + * is viewing + * @return the schematic page that will be shown when the player clicks NEXT + */ + @SideOnly(Side.CLIENT) + public static void flipToNextPage(GuiScreen cs, int currentIndex) + { + FMLClientHandler.instance().getClient().currentScreen = null; + + // Used internally inside Galacticraft to flip to the next page. No need + // to subscribe to this event. + MinecraftForge.EVENT_BUS.post(new FlipPage(cs, null, currentIndex, 1)); + } + + /** + * Finds the correct schematic when player presses BACK + * + * @param currentIndex the current index of unlocked schematics the player + * is viewing + * @return the schematic page that will be shown when the player clicks BACK + */ + @SideOnly(Side.CLIENT) + public static void flipToLastPage(GuiScreen cs, int currentIndex) + { + FMLClientHandler.instance().getClient().currentScreen = null; + + // Used internally inside Galacticraft to flip to the last page. No need + // to subscribe to this event. + MinecraftForge.EVENT_BUS.post(new FlipPage(cs, null, currentIndex, -1)); + } + + public static void registerTexture(ResourceLocation loc) + { + textures.add(loc); + } + + public static ResourceLocation getSchematicTexture(int index) + { + if (index < textures.size()) + return textures.get(index); + + GalacticraftCore.logger.debug("couldn't find render texture for " + index); + return textures.get(0); + } + + public static int registerSchematicItem(ItemStack item) + { + int index = schematicItems.size(); + schematicItems.add(item); + return index; + } + + public static ItemStack getSchematicItem(int index) + { + if (index < schematicItems.size()) + return schematicItems.get(index).copy(); + + GalacticraftCore.logger.debug("couldn't find schematic item for " + index); + return schematicItems.get(0).copy(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapedRecipesGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapedRecipesGC.java new file mode 100644 index 00000000..263fd75c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapedRecipesGC.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class ShapedRecipesGC extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe +{ + + public final int recipeWidth; + public final int recipeHeight; + public final ItemStack[] recipeItems; + private final ItemStack recipeOutput; + + public ShapedRecipesGC(int width, int height, ItemStack[] input, ItemStack output) + { + this.recipeWidth = width; + this.recipeHeight = height; + this.recipeItems = input; + this.recipeOutput = output; + } + + @Override + public ItemStack getRecipeOutput() + { + return this.recipeOutput; + } + + @Override + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList aitemstack = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < aitemstack.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + aitemstack.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + + return aitemstack; + } + + @Override + public boolean matches(InventoryCrafting inv, World worldIn) + { + for (int i = 0; i <= 3 - this.recipeWidth; ++i) + { + for (int j = 0; j <= 3 - this.recipeHeight; ++j) + { + if (this.checkMatch(inv, i, j, true)) + { + return true; + } + + if (this.checkMatch(inv, i, j, false)) + { + return true; + } + } + } + + return false; + } + + private boolean checkMatch(InventoryCrafting p_77573_1_, int p_77573_2_, int p_77573_3_, boolean p_77573_4_) + { + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int k = i - p_77573_2_; + int l = j - p_77573_3_; + ItemStack itemstack = ItemStack.EMPTY; + + if (k >= 0 && l >= 0 && k < this.recipeWidth && l < this.recipeHeight) + { + if (p_77573_4_) + { + itemstack = this.recipeItems[this.recipeWidth - k - 1 + l * this.recipeWidth]; + } else + { + itemstack = this.recipeItems[k + l * this.recipeWidth]; + } + } + + ItemStack itemstack1 = p_77573_1_.getStackInRowAndColumn(i, j); + + if (!itemstack1.isEmpty() || !itemstack.isEmpty()) + { + if (itemstack1.isEmpty() && !itemstack.isEmpty() || !itemstack1.isEmpty() && itemstack.isEmpty()) + { + return false; + } + + if (itemstack.getItem() != itemstack1.getItem()) + { + return false; + } + + if (itemstack.getMetadata() != 32767 && itemstack.getMetadata() != itemstack1.getMetadata()) + { + return false; + } + } + } + } + + return true; + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting inv) + { + return this.getRecipeOutput().copy(); + } + + @Override + public boolean canFit(int width, int height) + { + return width >= 3 && height >= 3; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapelessOreRecipeGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapelessOreRecipeGC.java new file mode 100644 index 00000000..36922b9a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapelessOreRecipeGC.java @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import net.minecraft.block.Block; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.oredict.OreDictionary; + +public class ShapelessOreRecipeGC extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipeUpdatable +{ + + protected ItemStack output = null; + protected ArrayList input = new ArrayList(); + + public ShapelessOreRecipeGC(Block result, Object... recipe) + { + this(new ItemStack(result), recipe); + } + + public ShapelessOreRecipeGC(Item result, Object... recipe) + { + this(new ItemStack(result), recipe); + } + + public ShapelessOreRecipeGC(ItemStack result, Object... recipe) + { + output = result.copy(); + for (Object in : recipe) + { + if (in instanceof ItemStack) + { + input.add(((ItemStack) in).copy()); + } else if (in instanceof Item) + { + input.add(new ItemStack((Item) in)); + } else if (in instanceof Block) + { + input.add(new ItemStack((Block) in)); + } else if (in instanceof String) + { + input.add(OreDictionary.getOres((String) in)); + } else + { + StringBuilder ret = new StringBuilder("Invalid compressor shapeless ore recipe: "); + for (Object tmp : recipe) + { + ret.append(tmp).append(", "); + } + ret.append(output); + throw new RuntimeException(ret.toString()); + } + } + } + + @Override + public boolean canFit(int width, int height) + { + return width * height >= input.size(); + } + + @Override + public ItemStack getRecipeOutput() + { + return output; + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting var1) + { + return output.copy(); + } + + @SuppressWarnings("unchecked") + @Override + public boolean matches(InventoryCrafting var1, World world) + { + List required = new LinkedList<>(input); + + for (int x = 0; x < var1.getSizeInventory(); x++) + { + ItemStack slot = var1.getStackInSlot(x); + + if (!slot.isEmpty()) + { + boolean inRecipe = false; + Iterator req = required.iterator(); + + while (req.hasNext()) + { + boolean match = false; + + Object next = req.next(); + + if (next instanceof ItemStack) + { + match = OreDictionary.itemMatches((ItemStack) next, slot, false); + } else if (next instanceof List) + { + Iterator itr = ((List) next).iterator(); + while (itr.hasNext() && !match) + { + match = OreDictionary.itemMatches(itr.next(), slot, false); + } + } + + if (match) + { + inRecipe = true; + required.remove(next); + break; + } + } + + if (!inRecipe) + { + return false; + } + } + } + + return required.isEmpty(); + } + + @SuppressWarnings("unchecked") + public boolean matches(List var1) + { + List required = new LinkedList<>(input); + + for (ItemStack slot : var1) + { + if (slot != null) + { + boolean inRecipe = false; + Iterator req = required.iterator(); + + while (req.hasNext()) + { + boolean match = false; + + Object next = req.next(); + + if (next instanceof ItemStack) + { + match = OreDictionary.itemMatches((ItemStack) next, slot, false); + } else if (next instanceof List) + { + Iterator itr = ((List) next).iterator(); + while (itr.hasNext() && !match) + { + match = OreDictionary.itemMatches(itr.next(), slot, false); + } + } + + if (match) + { + inRecipe = true; + required.remove(next); + break; + } + } + + if (!inRecipe) + { + return false; + } + } + } + + return required.isEmpty(); + } + + public ArrayList getInput() + { + return this.input; + } + + @Override + public NonNullList getRemainingItems(InventoryCrafting inv) // getRecipeLeftovers + { + return ForgeHooks.defaultRecipeGetRemainingItems(inv); + } + + @Override + public void replaceInput(ItemStack inputA, List inputB) + { + for (int i = 0; i < this.input.size(); i++) + { + Object test = this.input.get(i); + if (test instanceof ItemStack && ItemStack.areItemsEqual(inputA, (ItemStack) test) && RecipeUtil.areItemStackTagsEqual(inputA, (ItemStack) test)) + { + this.input.set(i, inputB); + } else if (test instanceof List && itemListContains((List) test, inputA)) + { + this.input.set(i, inputB); + } + } + } + + @Override + public void replaceInput(ItemStack inputB) + { + for (int i = 0; i < this.input.size(); i++) + { + Object test = this.input.get(i); + if (test instanceof List && itemListContains((List) test, inputB)) + { + this.input.set(i, inputB); + } + } + } + + private static boolean itemListContains(List test, ItemStack stack) + { + for (Object b : test) + { + if (b instanceof ItemStack && ItemStack.areItemsEqual(stack, (ItemStack) b) && RecipeUtil.areItemStackTagsEqual(stack, (ItemStack) b)) + return true; + } + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SpaceStationRecipe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SpaceStationRecipe.java new file mode 100644 index 00000000..ed05d401 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SpaceStationRecipe.java @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public class SpaceStationRecipe +{ + + private final HashMap input = new HashMap(4, 1.0F); + + /** + * @param objMap a map of the items required. Each entry should be an object + * of ItemStack, Item/Block or String(OreDict) and the amount of that + * item required + */ + public SpaceStationRecipe(HashMap objMap) + { + for (final Object obj : objMap.keySet()) + { + final Integer amount = objMap.get(obj); + + if (obj instanceof ItemStack) + { + this.input.put(((ItemStack) obj).copy(), amount); + } else if (obj instanceof Item) + { + this.input.put(new ItemStack((Item) obj), amount); + } else if (obj instanceof Block) + { + this.input.put(new ItemStack((Block) obj), amount); + } else if (obj instanceof String) + { + List stacks = OreDictionary.getOres((String) obj); + this.input.put(stacks, amount); + } else if (obj instanceof ArrayList) + { + this.input.put(obj, amount); + } else + { + throw new RuntimeException("INVALID SPACE STATION RECIPE"); + } + } + } + + public int getRecipeSize() + { + return this.input.size(); + } + + @SuppressWarnings("unchecked") + public boolean matches(EntityPlayer player, boolean remove) + { + final HashMap required = new HashMap(); + required.putAll(this.input); + + final Iterator req = this.input.keySet().iterator(); + + while (req.hasNext()) + { + final Object next = req.next(); + + final int amountRequired = required.get(next); + int amountInInv = 0; + + for (int x = 0; x < player.inventory.getSizeInventory(); x++) + { + final ItemStack slot = player.inventory.getStackInSlot(x); + + if (slot != null && slot.getCount() > 0) // Intentional + // ItemStack null check + { + if (next instanceof ItemStack) + { + if (SpaceStationRecipe.checkItemEquals((ItemStack) next, slot)) + { + amountInInv += slot.getCount(); + } + } else if (next instanceof List) + { + for (final ItemStack item : (List) next) + { + if (SpaceStationRecipe.checkItemEquals(item, slot)) + { + amountInInv += slot.getCount(); + } + } + } + } + } + + if (amountInInv >= amountRequired) + { + required.remove(next); + } + } + + if (required.isEmpty() && remove) + { + this.removeItems(player); + } + + return required.isEmpty(); + } + + @SuppressWarnings("unchecked") + public void removeItems(EntityPlayer player) + { + final HashMap required = new HashMap(this.input); + + final Iterator req = required.keySet().iterator(); + + while (req.hasNext()) + { + final Object next = req.next(); + + final int amountRequired = required.get(next); + int amountRemoved = 0; + + InventoryLoop: for (int x = 0; x < player.inventory.getSizeInventory(); x++) + { + final ItemStack slot = player.inventory.getStackInSlot(x); + + if (slot != null && slot.getCount() > 0) // Intentional + // ItemStack null check + { + final int amountRemaining = amountRequired - amountRemoved; + + if (next instanceof ItemStack) + { + if (SpaceStationRecipe.checkItemEquals((ItemStack) next, slot)) + { + final int amountToRemove = Math.min(slot.getCount(), amountRemaining); + ItemStack newStack = slot.copy(); + newStack.shrink(amountToRemove); + + if (newStack.getCount() <= 0) + { + newStack = ItemStack.EMPTY; + } + + player.inventory.setInventorySlotContents(x, newStack); + amountRemoved += amountToRemove; + if (amountRemoved == amountRequired) + break; + } + } else if (next instanceof List) + { + for (final ItemStack item : (List) next) + { + if (SpaceStationRecipe.checkItemEquals(item, slot)) + { + final int amountToRemove = Math.min(slot.getCount(), amountRemaining); + ItemStack newStack = slot.copy(); + newStack.shrink(amountToRemove); + + if (newStack.getCount() <= 0) + { + newStack = ItemStack.EMPTY; + } + + player.inventory.setInventorySlotContents(x, newStack); + amountRemoved += amountToRemove; + if (amountRemoved == amountRequired) + break InventoryLoop; + } + } + } + } + } + } + } + + public static boolean checkItemEquals(ItemStack target, ItemStack input) + { + return target.getItem() == input.getItem() && (target.getItemDamage() == OreDictionary.WILDCARD_VALUE || target.getItemDamage() == input.getItemDamage()); + } + + /** + * Returns the input for this recipe, any mod accessing this value should + * never manipulate the values in this array as it will effect the recipe + * itself. + * + * @return The recipes input vales. + */ + public HashMap getInput() + { + return this.input; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/package-info.java new file mode 100644 index 00000000..a732ab12 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|recipe") +package micdoodle8.mods.galacticraft.api.recipe; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IColorable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IColorable.java new file mode 100644 index 00000000..68d5dc71 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IColorable.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; + +/** + * Used for colored pipes to set/get colors. + */ +public interface IColorable +{ + + /** + * Called when the color is changed. + */ + void onColorUpdate(); + + /** + * Gets the color of this tile from the Block State. + * + * @param state the state + * + * @return the color of the tile, equivalent to the dye colors in vanilla + * minecraft + */ + byte getColor(IBlockState state); + + /** + * Called when a tile adjacent to this one has it's color changed. + * + * @param direction the direction (relative to this tile) that was updated. + */ + void onAdjacentColorChanged(EnumFacing direction); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IDisableableMachine.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IDisableableMachine.java new file mode 100644 index 00000000..469ffcec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IDisableableMachine.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +/** + * Currently only used internally when enable/disable buttons are clicked. + */ +public interface IDisableableMachine +{ + + /** + * Sets the machine to disabled or enabled. + * + * @param index the index + * @param disabled whether or not the machine should be set to the enabled + * or disabled state + */ + void setDisabled(int index, boolean disabled); + + /** + * Get the current state of the machine (enabled/disabled). + * + * @param index the index + * @return the current state of the machine (enabled/disabled) + */ + boolean getDisabled(int index); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IFuelDock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IFuelDock.java new file mode 100644 index 00000000..cd8ea052 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IFuelDock.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +import java.util.HashSet; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +/** + * The Interface IFuelDock. + */ +public interface IFuelDock +{ + + /** + * Gets the connected tiles. + * + * @return the connected tiles + */ + HashSet getConnectedTiles(); + + /** + * Checks if is block attachable. + * + * @param world the world + * @param pos the pos + * @return true, if is block attachable + */ + boolean isBlockAttachable(IBlockAccess world, BlockPos pos); + + /** + * Gets the docked entity. + * + * @return the docked entity + */ + IDockable getDockedEntity(); + + /** + * Dock entity. + * + * @param entity the entity + */ + void dockEntity(IDockable entity); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILandingPadAttachable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILandingPadAttachable.java new file mode 100644 index 00000000..9d2a6338 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILandingPadAttachable.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +/** + * Implement into tile entities that can attack to landing pads. It is + * recommended that you check if the landing pad at the provided coordinates is + * valid for connection. + */ +public interface ILandingPadAttachable +{ + + /** + * Determines if this tile can connect to the landing pad at the provided + * coordinates. + * + * @param world World the tiles are located in + * @param pos Coordinate the landing pad is located at + * @return True if the block can attach to the landing pad, false if not + */ + boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILockable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILockable.java new file mode 100644 index 00000000..7027e525 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILockable.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +/** + * The Interface ILockable. + */ +public interface ILockable +{ + + /** + * Gets the locked. + * + * @return the locked + */ + boolean getLocked(); + + /** + * Clear locked inventory. + */ + void clearLockedInventory(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ITileClientUpdates.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ITileClientUpdates.java new file mode 100644 index 00000000..cc8b874d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ITileClientUpdates.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/*** + * Sends basic tile load configuration data e.g. facing (if not obtainable from + * blockState) to the client. + * + * IMPORTANT: call this.clientValidate() from the tile's validate() method + */ +public interface ITileClientUpdates +{ + + /** + * The supplied data array of ints ALWAYS has length 4. You don't have to + * use all of them! + * + * @param data the data + */ + void buildDataPacket(int[] data); + + /** + * The supplied data list has 4 ints of data to use at positions 1 through + * 4. + * + * @param data the data + */ + @SideOnly(Side.CLIENT) + void updateClient(List data); + + /** + * Implement validate() in the tile and call this!. + */ + default void clientOnLoad() + { + TileEntity tile = (TileEntity) this; + if (tile.getWorld().isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REQUEST_MACHINE_DATA, tile.getWorld(), new Object[] + {tile.getPos()})); + } + } + + /** + * Do not override unless you want to use a custom data packet with more + * than 4 ints of data. (If overriding this you must override all other + * methods in ITileClientUpdates as well ... in which case, why are you + * using it?) + * + * @param player the player + */ + default void sendUpdateToClient(EntityPlayerMP player) + { + int[] data = new int[4]; + this.buildDataPacket(data); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_MACHINE_DATA, GCCoreUtil.getDimensionID(player.world), new Object[] + {((TileEntity) this).getPos(), data[0], data[1], data[2], data[3]}), player); + } + + /** + * Used to push updates out to clients. + */ + default void updateAllInDimension() + { + int[] data = new int[4]; + this.buildDataPacket(data); + int dimID = GCCoreUtil.getDimensionID(((TileEntity) this).getWorld()); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(EnumSimplePacket.C_UPDATE_MACHINE_DATA, dimID, new Object[] + {((TileEntity) this).getPos(), data[0], data[1], data[2], data[3]}), dimID); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/package-info.java new file mode 100644 index 00000000..61bc2ab3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|tile") +package micdoodle8.mods.galacticraft.api.tile; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/NetworkType.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/NetworkType.java new file mode 100644 index 00000000..531517bc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/NetworkType.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission; + +public enum NetworkType +{ + POWER, FLUID, SOLAR_MODULE +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IElectricityNetwork.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IElectricityNetwork.java new file mode 100644 index 00000000..33d35869 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IElectricityNetwork.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import net.minecraft.tileentity.TileEntity; + +/** + * The Electrical Network in interface form. + * + * @author Calclavia + */ +public interface IElectricityNetwork extends IGridNetwork +{ + + /** + * Produce energy into the network + * + * @param energy Amount of energy to send into the network + * @param doReceive Whether to put energy into the network (true) or just + * simulate (false) + * @param tierGC The tier of the producing tile (must be 1 or 2) + * @param ignoreTiles TileEntities to ignore for energy transfers. + * @return Amount of energy REMAINING from the passed energy parameter + */ + float produce(float energy, boolean doReceive, int tierGC, TileEntity... ignoreTiles); + + /** + * Get the total energy request in this network + * + * @param ignoreTiles Tiles to ignore in the request calculations (NOTE: + * only used in initial (internal) check. + * @return Amount of energy requested in this network + */ + float getRequest(TileEntity... ignoreTiles); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IGridNetwork.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IGridNetwork.java new file mode 100644 index 00000000..051b8501 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IGridNetwork.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import java.util.Set; + +/** + * Implement this in your network class/interface if you plan to have your own network defined by specific conductors and acceptors. + * + * @param - the class/interface Type value in which you implement this + * @param - the class/interface Type which makes up the network's conductor Set + * @param - the class/interface Type which makes up the network's acceptor Set + * + * @author aidancbrady + */ +public interface IGridNetwork +{ + + /** + * Refreshes and cleans up conductor references of this network, as well as updating the acceptor set. + */ + void refresh(); + + /** + * Gets the Set of conductors that make up this network. + * + * @return conductor set + */ + Set getTransmitters(); + + /** + * Creates a new network that makes up the current network and the network defined in the parameters. Be sure to refresh the new network inside this method. + * + * @param network network to merge + * + * @return The merged network + */ + N merge(N network); + + /** + * Splits a network by the conductor referenced in the parameters. It will then create and refresh the new independent networks possibly created by this operation. + * + * @param connection the conductor connection to split the network from + */ + void split(C connection); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IOxygenNetwork.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IOxygenNetwork.java new file mode 100644 index 00000000..2e9a931c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IOxygenNetwork.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import net.minecraft.tileentity.TileEntity; + +/** + * The Oxygen Network in interface form. + * + * @author Calclavia + */ +public interface IOxygenNetwork extends IGridNetwork +{ + + /** + * Produces oxygen in this oxygen network. + * + * @return Rejected energy in Joules. + */ + float produce(float sendAmount, TileEntity... ignoreTiles); + + /** + * Gets the total amount of oxygen requested/needed in the electricity + * network. + * + * @param ignoreTiles The TileEntities to ignore during this calculation + * (optional). + */ + float getRequest(TileEntity... ignoreTiles); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IPathCallBack.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IPathCallBack.java new file mode 100644 index 00000000..89c7c1fa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IPathCallBack.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import java.util.Set; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; + +public interface IPathCallBack +{ + + /** + * @param finder - The Pathfinder object. + * @param currentNode - The node being iterated through. + * @return A set of nodes connected to the currentNode. Essentially one + * should return a set of neighboring nodes. + */ + Set getConnectedNodes(Pathfinder finder, BlockVec3 currentNode); + + /** + * Called when looping through nodes. + * + * @param finder - The Pathfinder. + * @param node - The node being searched. + * @return True to stop the path finding operation. + */ + boolean onSearch(Pathfinder finder, BlockVec3 node); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IReflectorNode.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IReflectorNode.java new file mode 100644 index 00000000..54e16fcd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IReflectorNode.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +public interface IReflectorNode +{ + + Vector3 getInputPoint(); + + Vector3 getOutputPoint(boolean offset); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/Pathfinder.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/Pathfinder.java new file mode 100644 index 00000000..b23749a0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/Pathfinder.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import java.util.HashSet; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; + +/** + * A class that allows flexible ai for different positions. Compared to AStar + * ai, this version is faster but does not calculated the most optimal path. + * + * @author Calclavia + */ +public class Pathfinder +{ + + /** + * A ai call back interface used to call back on paths. + */ + public IPathCallBack callBackCheck; + + /** + * A list of nodes that the pathfinder already went through. + */ + public Set closedSet; + + /** + * The resulted path found by the pathfinder. Could be null if no path was + * found. + */ + public Set results; + + public Pathfinder(IPathCallBack callBack) + { + this.callBackCheck = callBack; + this.reset(); + } + + /** + * @return True on success finding, false on failure. + */ + public boolean findNodes(BlockVec3 currentNode) + { + this.closedSet.add(currentNode); + + if (this.callBackCheck.onSearch(this, currentNode)) + { + return false; + } + + for (BlockVec3 node : this.callBackCheck.getConnectedNodes(this, currentNode)) + { + if (!this.closedSet.contains(node)) + { + if (this.findNodes(node)) + { + return true; + } + } + } + + return false; + } + + /** + * Called to execute the ai operation. + */ + public Pathfinder init(BlockVec3 startNode) + { + this.findNodes(startNode); + return this; + } + + public Pathfinder reset() + { + this.closedSet = new HashSet(); + this.results = new HashSet(); + return this; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/PathfinderChecker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/PathfinderChecker.java new file mode 100644 index 00000000..9b85f347 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/PathfinderChecker.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; + +/** + * Check if a conductor connects with another. + * + * @author Calclavia + */ +public class PathfinderChecker extends Pathfinder +{ + + public PathfinderChecker(final World world, final INetworkConnection targetConnector, final NetworkType networkType, final INetworkConnection... ignoreConnector) + { + super(new IPathCallBack() + { + + @Override + public Set getConnectedNodes(Pathfinder finder, BlockVec3 currentNode) + { + Set neighbors = new HashSet(); + + for (int i = 0; i < 6; i++) + { + EnumFacing direction = EnumFacing.byIndex(i); + BlockVec3 position = currentNode.clone().modifyPositionFromSide(direction); + TileEntity connectedBlock = position.getTileEntity(world); + + if (connectedBlock instanceof ITransmitter && !Arrays.asList(ignoreConnector).contains(connectedBlock)) + { + if (((ITransmitter) connectedBlock).canConnect(direction.getOpposite(), networkType)) + { + neighbors.add(position); + } + } + } + + return neighbors; + } + + @Override + public boolean onSearch(Pathfinder finder, BlockVec3 node) + { + if (node.getTileEntity(world) == targetConnector) + { + finder.results.add(node); + return true; + } + + return false; + } + }); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/package-info.java new file mode 100644 index 00000000..6e2619be --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|transmission|grid") +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/package-info.java new file mode 100644 index 00000000..db66d0cf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|transmission") +package micdoodle8.mods.galacticraft.api.transmission; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IBufferTransmitter.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IBufferTransmitter.java new file mode 100644 index 00000000..fbc3d63d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IBufferTransmitter.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +public interface IBufferTransmitter extends ITransmitter +{ + + N getBuffer(); + + int getCapacity(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConductor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConductor.java new file mode 100644 index 00000000..f6449bcd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConductor.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; + +public interface IConductor extends ITransmitter +{ + + /** + * @return The tier of this conductor - must be 1 or 2 + */ + int getTierGC(); + + /** + * @return This conductor's electricity network. + */ + @Override + IElectricityNetwork getNetwork(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConnector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConnector.java new file mode 100644 index 00000000..58266057 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConnector.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import net.minecraft.util.EnumFacing; + +/** + * Applied to TileEntities that can connect to an electrical OR oxygen network. + * + * @author Calclavia, micdoodle8 + */ +public interface IConnector +{ + + /** + * @return If the connection is possible. + */ + boolean canConnect(EnumFacing direction, NetworkType type); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectrical.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectrical.java new file mode 100644 index 00000000..16885cd9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectrical.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import net.minecraft.util.EnumFacing; + +/** + * Applied to all TileEntities that can interact with electricity. + * + * @author Calclavia, King_Lemming + */ +public interface IElectrical extends IConnector +{ + + /** + * Adds electricity to an block. Returns the quantity of electricity that + * was accepted. This should always return 0 if the block cannot be + * externally charged. + * + * @param from Orientation the electricity is sent in from. + * @param receive Maximum amount of electricity to be sent into the block. + * @param tierProduced The tier of electricity which is being provided (must + * be 1 or 2) + * @param doReceive If false, the charge will only be simulated. + * @return Amount of energy that was accepted by the block. + */ + float receiveElectricity(EnumFacing from, float receive, int tierProduced, boolean doReceive); + + /** + * Adds electricity to an block. Returns the ElectricityPack, the + * electricity provided. This should always return null if the block cannot + * be externally discharged. + * + * @param from Orientation the electricity is requested from. + * @param request Maximum amount of energy to be sent into the block. + * @param doProvide If false, the charge will only be simulated. + * @return Amount of energy that was given out by the block. + */ + float provideElectricity(EnumFacing from, float request, boolean doProvide); + + /** + * @return How much energy does this TileEntity want? + */ + float getRequest(EnumFacing direction); + + /** + * @return How much energy does this TileEntity want to provide? + */ + float getProvide(EnumFacing direction); + + /** + * Gets the tier of this TileEntity. + * + * @return The tier, should be 1 or 2 + */ + int getTierGC(); + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectricalStorage.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectricalStorage.java new file mode 100644 index 00000000..be3a5e0e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectricalStorage.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +/** + * This interface is to be applied to all TileEntities which stores electricity + * within them. + * + * @author Calclavia + */ +public interface IElectricalStorage +{ + + /** + * Sets the amount of joules this unit has stored. + */ + void setEnergyStored(float energy); + + /** + * * @return Get the amount of energy currently stored in the block. + */ + float getEnergyStored(); + + /** + * @return Get the max amount of energy that can be stored in the block. + */ + float getMaxEnergyStored(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkConnection.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkConnection.java new file mode 100644 index 00000000..a90bd181 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkConnection.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import net.minecraft.tileentity.TileEntity; + +/** + * Applied to TileEntities. + * + * @author Calclavia + */ +public interface INetworkConnection extends IConnector +{ + + /** + * Gets a list of all the connected TileEntities that this conductor is + * connected to. The array's length should be always the 6 adjacent wires. + * + * @return + */ + TileEntity[] getAdjacentConnections(); + + /** + * Refreshes the conductor + */ + void refresh(); + + void onNetworkChanged(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkProvider.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkProvider.java new file mode 100644 index 00000000..ecd3c148 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkProvider.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; + +public interface INetworkProvider +{ + + IGridNetwork getNetwork(); + + boolean hasNetwork(); + + void setNetwork(IGridNetwork network); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenReceiver.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenReceiver.java new file mode 100644 index 00000000..d698e4b4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenReceiver.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import net.minecraft.util.EnumFacing; + +/** + * Applied to all TileEntities that can interact with oxygen. + */ +public interface IOxygenReceiver extends IConnector +{ + + boolean shouldPullOxygen(); + + /** + * Adds oxygen reception to a tile entity. Returns the quantity of oxygen + * that was accepted. This should always return 0 if the block cannot + * receive oxygen. + * + * @param from Orientation the oxygen is sent in from. + * @param receive Maximum amount of oxygen to be sent into the block. + * @param doReceive If false, the transfer will only be simulated. + * @return Amount of oxygen that was accepted by the block. + */ + int receiveOxygen(EnumFacing from, int receive, boolean doReceive); + + /** + * Adds oxygen provision to a block. Returns the quantity of oxygen + * provided. This should always return 0 if the tile entity cannot provide + * oxygen. + * + * @param from Orientation the oxygen is requested from. + * @param request Maximum amount of oxygen to be pushed out of the block. + * @param doProvide If false, the transfer will only be simulated. + * @return Amount of oxygen that was given out by the block. + */ + int provideOxygen(EnumFacing from, int request, boolean doProvide); + + /** + * @return How much oxygen does this TileEntity want? + */ + int getOxygenRequest(EnumFacing direction); + + /** + * @return How much oxygen does this TileEntity want to provide? + */ + int getOxygenProvide(EnumFacing direction); + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenStorage.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenStorage.java new file mode 100644 index 00000000..be38e41b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenStorage.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +/** + * This interface is to be applied to all TileEntities which have Oxygen stores + */ +public interface IOxygenStorage +{ + + /** + * Sets the amount of oxygen this unit has stored. + */ + void setOxygenStored(int oxygen); + + /** + * * @return Get the amount of oxygen currently stored in the block. + */ + int getOxygenStored(); + + /** + * @return Get the max amount of oxygen that can be stored in the block. + */ + int getMaxOxygenStored(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/ITransmitter.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/ITransmitter.java new file mode 100644 index 00000000..faa1f636 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/ITransmitter.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; + +public interface ITransmitter extends INetworkProvider, INetworkConnection +{ + + NetworkType getNetworkType(); + + boolean canTransmit(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/package-info.java new file mode 100644 index 00000000..71148570 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|trasmission|tile") +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/util/stream/CelestialCollector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/util/stream/CelestialCollector.java new file mode 100644 index 00000000..163ddddf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/util/stream/CelestialCollector.java @@ -0,0 +1,93 @@ +package micdoodle8.mods.galacticraft.api.util.stream; + +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumSet; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collector; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; +import micdoodle8.mods.galacticraft.core.util.list.CelestialList; + +import lombok.experimental.UtilityClass; + +import static java.util.stream.Collector.Characteristics.IDENTITY_FINISH; + +@UtilityClass +public final class CelestialCollector +{ + static final Set CH_ID = from(IDENTITY_FINISH); + + static final Set from(Collector.Characteristics... arr) + { + return Collections.unmodifiableSet(EnumSet.of(arr[0], Arrays.copyOfRange(arr, 1, arr.length))); + } + + @SuppressWarnings("unchecked") + private static Function castingIdentity() + { + return i -> (R) i; + } + + //@noformat + static class AccumulatorImpl implements Collector { + private final Supplier supplier; + private final BiConsumer accumulator; + private final BinaryOperator combiner; + private final Function finisher; + private final Set characteristics; + + AccumulatorImpl(Supplier supplier, + BiConsumer accumulator, + BinaryOperator combiner, + Function finisher, + Set characteristics) { + this.supplier = supplier; + this.accumulator = accumulator; + this.combiner = combiner; + this.finisher = finisher; + this.characteristics = characteristics; + } + + AccumulatorImpl(Supplier supplier, + BiConsumer accumulator, + BinaryOperator combiner, + Set characteristics) { + this(supplier, accumulator, combiner, castingIdentity(), characteristics); + } + + @Override + public BiConsumer accumulator() { + return accumulator; + } + + @Override + public Supplier supplier() { + return supplier; + } + + @Override + public BinaryOperator combiner() { + return combiner; + } + + @Override + public Function finisher() { + return finisher; + } + + @Override + public Set characteristics() { + return characteristics; + } + } + + public static + Collector> toList() { + return new AccumulatorImpl<>((Supplier>) CelestialList::new, CelestialList::add, (left, right) -> { left.addAll(right); return left; }, CH_ID); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockTuple.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockTuple.java new file mode 100644 index 00000000..a8a56667 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockTuple.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class BlockTuple +{ + + public Block block; + public int meta; + + public BlockTuple(Block b, int m) + { + this.block = b; + this.meta = m; + } + + @Override + public String toString() + { + Item item = Item.getItemFromBlock(this.block); + if (item == null || item == Item.getItemFromBlock(Blocks.AIR)) + return this.block.getTranslationKey() + ".name"; + return new ItemStack(item, 1, this.meta).getTranslationKey() + ".name"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3.java new file mode 100644 index 00000000..44afa339 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3.java @@ -0,0 +1,683 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ReportedException; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.ChunkProviderServer; + +/* BlockVec3 is similar to galacticraft.api.vector.Vector3? + * + * But for speed it uses integer arithmetic not doubles, for block coordinates + * This reduces unnecessary type conversion between integers and doubles and back again. + * (Minecraft block coordinates are always integers, only entity coordinates are doubles.) + * + */ +public class BlockVec3 implements Cloneable +{ + + public int x; + public int y; + public int z; + public int sideDoneBits = 0; + private static Chunk chunkCached; + public static int chunkCacheDim = Integer.MAX_VALUE; + private static int chunkCacheX = 1876000; // outside the world edge + private static int chunkCacheZ = 1876000; // outside the world edge + private static Chunk chunkCached_Client; + public static int chunkCacheDim_Client = Integer.MAX_VALUE; + private static int chunkCacheX_Client = 1876000; // outside the world edge + private static int chunkCacheZ_Client = 1876000; // outside the world edge + // INVALID_VECTOR is used in cases where a null vector cannot be used + public static final BlockVec3 INVALID_VECTOR = new BlockVec3(-1, -1, -1); + + public BlockVec3() + { + this(0, 0, 0); + } + + public BlockVec3(BlockPos pos) + { + this(pos.getX(), pos.getY(), pos.getZ()); + } + + public BlockVec3(int x, int y, int z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public BlockVec3(Entity par1) + { + this.x = (int) Math.floor(par1.posX); + this.y = (int) Math.floor(par1.posY); + this.z = (int) Math.floor(par1.posZ); + } + + public BlockVec3(TileEntity par1) + { + this.x = par1.getPos().getX(); + this.y = par1.getPos().getY(); + this.z = par1.getPos().getZ(); + } + + /** + * Makes a new copy of this Vector. Prevents variable referencing problems. + */ + @Override + public final BlockVec3 clone() + { + return new BlockVec3(this.x, this.y, this.z); + } + + public BlockPos toBlockPos() + { + return new BlockPos(this.x, this.y, this.z); + } + + /** + * Get block ID at the BlockVec3 coordinates, with a forced chunk load if + * the coordinates are unloaded. + * + * @param world + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + */ + public IBlockState getBlockState(World world) + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.isRemote) + { + if (BlockVec3.chunkCacheX_Client == chunkx && BlockVec3.chunkCacheZ_Client == chunkz && BlockVec3.chunkCacheDim_Client == world.provider.getDimension() + && BlockVec3.chunkCached_Client.isLoaded()) + { + return BlockVec3.chunkCached_Client.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached_Client = chunk; + BlockVec3.chunkCacheDim_Client = world.provider.getDimension(); + BlockVec3.chunkCacheX_Client = chunkx; + BlockVec3.chunkCacheZ_Client = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // this will be within the same chunk + if (BlockVec3.chunkCacheX == chunkx && BlockVec3.chunkCacheZ == chunkz && BlockVec3.chunkCacheDim == world.provider.getDimension() && BlockVec3.chunkCached.isLoaded()) + { + return BlockVec3.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached = chunk; + BlockVec3.chunkCacheDim = world.provider.getDimension(); + BlockVec3.chunkCacheX = chunkx; + BlockVec3.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + /** + * Get block ID at the BlockVec3 coordinates without forcing a chunk load. + * + * @param world + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + * Returns Blocks.BEDROCK if the coordinates being checked are in an + * unloaded chunk + */ + public IBlockState getBlockState_noChunkLoad(World world) + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.getChunkProvider().getLoadedChunk(chunkx, chunkz) != null) + { + if (world.isRemote) + { + if (BlockVec3.chunkCacheX_Client == chunkx && BlockVec3.chunkCacheZ_Client == chunkz && BlockVec3.chunkCacheDim_Client == world.provider.getDimension() + && BlockVec3.chunkCached_Client.isLoaded()) + { + return BlockVec3.chunkCached_Client.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached_Client = chunk; + BlockVec3.chunkCacheDim_Client = world.provider.getDimension(); + BlockVec3.chunkCacheX_Client = chunkx; + BlockVec3.chunkCacheZ_Client = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // calls to + // this will be within the same chunk + if (BlockVec3.chunkCacheX == chunkx && BlockVec3.chunkCacheZ == chunkz && BlockVec3.chunkCacheDim == world.provider.getDimension() && BlockVec3.chunkCached.isLoaded()) + { + return BlockVec3.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached = chunk; + BlockVec3.chunkCacheDim = world.provider.getDimension(); + BlockVec3.chunkCacheX = chunkx; + BlockVec3.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // Chunk doesn't exist - meaning, it is not loaded + return Blocks.BEDROCK.getDefaultState(); + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + public IBlockState getBlockState(IBlockAccess par1iBlockAccess) + { + return par1iBlockAccess.getBlockState(new BlockPos(this.x, this.y, this.z)); + } + + /** + * Get block ID at the BlockVec3 coordinates without forcing a chunk load. + * Only call this 'safe' version if x and z coordinates are within the + * Minecraft world map (-30m to +30m) + * + * @param world + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256. Returns Blocks.BEDROCK if the coordinates being + * checked are in an unloaded chunk + */ + @Nullable + public IBlockState getBlockStateSafe_noChunkLoad(World world) + { + if (this.y < 0 || this.y >= 256) + { + return null; + } + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.getChunkProvider().getLoadedChunk(chunkx, chunkz) != null) + { + if (world.isRemote) + { + if (BlockVec3.chunkCacheX_Client == chunkx && BlockVec3.chunkCacheZ_Client == chunkz && BlockVec3.chunkCacheDim_Client == world.provider.getDimension() + && BlockVec3.chunkCached_Client.isLoaded()) + { + return BlockVec3.chunkCached_Client.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached_Client = chunk; + BlockVec3.chunkCacheDim_Client = world.provider.getDimension(); + BlockVec3.chunkCacheX_Client = chunkx; + BlockVec3.chunkCacheZ_Client = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // calls to + // this will be within the same chunk + if (BlockVec3.chunkCacheX == chunkx && BlockVec3.chunkCacheZ == chunkz && BlockVec3.chunkCacheDim == world.provider.getDimension() && BlockVec3.chunkCached.isLoaded()) + { + return BlockVec3.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached = chunk; + BlockVec3.chunkCacheDim = world.provider.getDimension(); + BlockVec3.chunkCacheX = chunkx; + BlockVec3.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // Chunk doesn't exist - meaning, it is not loaded + return Blocks.BEDROCK.getDefaultState(); + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + public BlockVec3 translate(BlockVec3 par1) + { + this.x += par1.x; + this.y += par1.y; + this.z += par1.z; + return this; + } + + public BlockVec3 translate(int par1x, int par1y, int par1z) + { + this.x += par1x; + this.y += par1y; + this.z += par1z; + return this; + } + + public static BlockVec3 add(BlockVec3 par1, BlockVec3 a) + { + return new BlockVec3(par1.x + a.x, par1.y + a.y, par1.z + a.z); + } + + public BlockVec3 subtract(BlockVec3 par1) + { + this.x -= par1.x; + this.y -= par1.y; + this.z -= par1.z; + + return this; + } + + public BlockVec3 scale(int par1) + { + this.x *= par1; + this.y *= par1; + this.z *= par1; + + return this; + } + + public BlockVec3 modifyPositionFromSide(EnumFacing side, int amount) + { + switch (side.ordinal()) + { + case 0: + this.y -= amount; + break; + case 1: + this.y += amount; + break; + case 2: + this.z -= amount; + break; + case 3: + this.z += amount; + break; + case 4: + this.x -= amount; + break; + case 5: + this.x += amount; + break; + } + return this; + } + + public BlockVec3 newVecSide(int side) + { + final BlockVec3 vec = new BlockVec3(this.x, this.y, this.z); + vec.sideDoneBits = (1 << (side ^ 1)) + (side << 6); + switch (side) + { + case 0: + vec.y--; + return vec; + case 1: + vec.y++; + return vec; + case 2: + vec.z--; + return vec; + case 3: + vec.z++; + return vec; + case 4: + vec.x--; + return vec; + case 5: + vec.x++; + return vec; + } + return vec; + } + + public BlockVec3 modifyPositionFromSide(EnumFacing side) + { + return this.modifyPositionFromSide(side, 1); + } + + @Override + public int hashCode() + { + // Upgraded hashCode calculation from the one in VecDirPair to something + // a bit stronger and faster + return ((this.y * 379 + this.x) * 373 + this.z) * 7; + } + + @Override + public boolean equals(Object o) + { + if (o instanceof BlockVec3) + { + final BlockVec3 vector = (BlockVec3) o; + return this.x == vector.x && this.y == vector.y && this.z == vector.z; + } + + return false; + } + + @Override + public String toString() + { + return "[" + this.x + "," + this.y + "," + this.z + "]"; + } + + /** + * This will load the chunk. + * + * @param world + * @return TileEntity + */ + public TileEntity getTileEntity(IBlockAccess world) + { + return world.getTileEntity(new BlockPos(this.x, this.y, this.z)); + } + + /** + * No chunk load: returns null if chunk to side is unloaded + * + * @param world + * @param side + * @return TileEntity + */ + public TileEntity getTileEntityOnSide(World world, EnumFacing side) + { + if (side == null) + { + return null; + } + + int x = this.x; + int y = this.y; + int z = this.z; + switch (side.ordinal()) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return null; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.isBlockLoaded(pos, false) ? world.getTileEntity(pos) : null; + } + + /** + * No chunk load: returns null if chunk to side is unloaded + * + * @param world + * @param side + * @return TileEntity + */ + public TileEntity getTileEntityOnSide(World world, int side) + { + int x = this.x; + int y = this.y; + int z = this.z; + switch (side) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return null; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.isBlockLoaded(pos, false) ? world.getTileEntity(pos) : null; + } + + /** + * This will load the chunk to the side. + * + * @param world + * @param side + * @return boolean true if face is solid, false if not solid + */ + public boolean blockOnSideHasSolidFace(World world, int side) + { + int x = this.x; + int y = this.y; + int z = this.z; + switch (side) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return false; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.getBlockState(pos).getBlock().isSideSolid(world.getBlockState(pos), world, pos, EnumFacing.byIndex(side ^ 1)); + } + + /** + * No chunk load: returns null if chunk is unloaded + * + * @param world + * @param side + * @return Block + */ + public Block getBlockOnSide(World world, int side) + { + int x = this.x; + int y = this.y; + int z = this.z; + switch (side) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return null; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.isBlockLoaded(pos, false) ? world.getBlockState(pos).getBlock() : null; + } + + public int getBlockMetadata(IBlockAccess world) + { + final IBlockState state = world.getBlockState(new BlockPos(x, y, z)); + return state.getBlock().getMetaFromState(state); + } + + public static BlockVec3 readFromNBT(NBTTagCompound nbtCompound) + { + final BlockVec3 tempVector = new BlockVec3(); + tempVector.x = nbtCompound.getInteger("x"); + tempVector.y = nbtCompound.getInteger("y"); + tempVector.z = nbtCompound.getInteger("z"); + return tempVector; + } + + public int distanceTo(BlockVec3 vector) + { + int var2 = vector.x - this.x; + int var4 = vector.y - this.y; + int var6 = vector.z - this.z; + return MathHelper.floor(Math.sqrt(var2 * var2 + var4 * var4 + var6 * var6)); + } + + public int distanceSquared(BlockVec3 vector) + { + int var2 = vector.x - this.x; + int var4 = vector.y - this.y; + int var6 = vector.z - this.z; + return var2 * var2 + var4 * var4 + var6 * var6; + } + + public NBTTagCompound writeToNBT(NBTTagCompound tag) + { + tag.setInteger("x", this.x); + tag.setInteger("y", this.y); + tag.setInteger("z", this.z); + return tag; + } + + public BlockVec3(NBTTagCompound tag) + { + this.x = tag.getInteger("x"); + this.y = tag.getInteger("y"); + this.z = tag.getInteger("z"); + } + + public NBTTagCompound writeToNBT(NBTTagCompound tag, String prefix) + { + tag.setInteger(prefix + "_x", this.x); + tag.setInteger(prefix + "_y", this.y); + tag.setInteger(prefix + "_z", this.z); + return tag; + } + + public static BlockVec3 readFromNBT(NBTTagCompound tag, String prefix) + { + Integer readX = tag.getInteger(prefix + "_x"); + if (readX == 0) + return null; + Integer readY = tag.getInteger(prefix + "_y"); + if (readY == 0) + return null; + Integer readZ = tag.getInteger(prefix + "_z"); + if (readZ == 0) + return null; + return new BlockVec3(readX, readY, readZ); + } + + public double getMagnitude() + { + return Math.sqrt(this.getMagnitudeSquared()); + } + + public int getMagnitudeSquared() + { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + + public void setBlock(World worldObj, IBlockState block) + { + worldObj.setBlockState(new BlockPos(x, y, z), block, 3); + } + + public boolean blockExists(World world) + { + return world.isBlockLoaded(new BlockPos(this.x, this.y, this.z), false); + } + + public void setSideDone(int side) + { + this.sideDoneBits |= 1 << side; + } + + public TileEntity getTileEntityForce(World world) + { + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + + if (world.getChunkProvider().getLoadedChunk(chunkx, chunkz) != null) + return world.getTileEntity(this.toBlockPos()); + + Chunk chunk = ((ChunkProviderServer) world.getChunkProvider()).loadChunk(chunkx, chunkz); + return chunk.getTileEntity(new BlockPos(this.x & 15, this.y, this.z & 15), Chunk.EnumCreateEntityType.IMMEDIATE); + } + + public Vector3 midPoint() + { + return new Vector3(this.x + 0.5, this.y + 0.5, this.z + 0.5); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3Dim.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3Dim.java new file mode 100644 index 00000000..259adee9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3Dim.java @@ -0,0 +1,408 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ReportedException; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/* BlockVec3 is similar to galacticraft.api.vector.Vector3? + * + * But for speed it uses integer arithmetic not doubles, for block coordinates + * This reduces unnecessary type conversion between integers and doubles and back again. + * (Minecraft block coordinates are always integers, only entity coordinates are doubles.) + * + */ +public class BlockVec3Dim implements Cloneable +{ + + public int x; + public int y; + public int z; + public int dim; + + private static Chunk chunkCached; + public static int chunkCacheDim = Integer.MAX_VALUE; + private static int chunkCacheX = 1876000; // outside the world edge + private static int chunkCacheZ = 1876000; // outside the world edge + // INVALID_VECTOR is used in cases where a null vector cannot be used + public static final BlockVec3Dim INVALID_VECTOR = new BlockVec3Dim(-1, -1, -1, -2); + + public BlockVec3Dim() + { + this(0, 0, 0, 0); + } + + public BlockVec3Dim(int x, int y, int z, int d) + { + this.x = x; + this.y = y; + this.z = z; + this.dim = d; + } + + public BlockVec3Dim(Entity par1) + { + this.x = (int) Math.floor(par1.posX); + this.y = (int) Math.floor(par1.posY); + this.z = (int) Math.floor(par1.posZ); + this.dim = par1.dimension; + } + + public BlockVec3Dim(TileEntity par1) + { + this.x = par1.getPos().getX(); + this.y = par1.getPos().getY(); + this.z = par1.getPos().getZ(); + this.dim = par1.getWorld().provider.getDimension(); + } + + public BlockVec3Dim(BlockPos pos, int dimensionId) + { + this(pos.getX(), pos.getY(), pos.getZ(), dimensionId); + } + + /** + * Makes a new copy of this Vector. Prevents variable referencing problems. + */ + @Override + public final BlockVec3Dim clone() + { + return new BlockVec3Dim(this.x, this.y, this.z, this.dim); + } + + /** + * Get block ID at the BlockVec3Dim coordinates, with a forced chunk load if + * the coordinates are unloaded. Only works server-side. + * + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + */ + public IBlockState getBlockState() + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + World world = getWorldForId(this.dim); + if (world == null) + return null; + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + // In a typical inner loop, 80% of the time consecutive calls to + // this will be within the same chunk + if (BlockVec3Dim.chunkCacheX == chunkx && BlockVec3Dim.chunkCacheZ == chunkz && BlockVec3Dim.chunkCacheDim == world.provider.getDimension() && BlockVec3Dim.chunkCached.isLoaded()) + { + return BlockVec3Dim.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } else + { + Chunk chunk = null; + chunk = world.getChunk(chunkx, chunkz); + BlockVec3Dim.chunkCached = chunk; + BlockVec3Dim.chunkCacheDim = world.provider.getDimension(); + BlockVec3Dim.chunkCacheX = chunkx; + BlockVec3Dim.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + /** + * Get block ID at the BlockVec3 coordinates without forcing a chunk load. + * + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + * Returns Blocks.BEDROCK if the coordinates being checked are in an + * unloaded chunk + */ + public IBlockState getBlockState_noChunkLoad() + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + World world = getWorldForId(this.dim); + if (world == null) + return null; + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.getChunkProvider().getLoadedChunk(chunkx, chunkz) != null) + { + // In a typical inner loop, 80% of the time consecutive calls to + // this will be within the same chunk + if (BlockVec3Dim.chunkCacheX == chunkx && BlockVec3Dim.chunkCacheZ == chunkz && BlockVec3Dim.chunkCacheDim == world.provider.getDimension() && BlockVec3Dim.chunkCached.isLoaded()) + { + return BlockVec3Dim.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } else + { + Chunk chunk = null; + chunk = world.getChunk(chunkx, chunkz); + BlockVec3Dim.chunkCached = chunk; + BlockVec3Dim.chunkCacheDim = world.provider.getDimension(); + BlockVec3Dim.chunkCacheX = chunkx; + BlockVec3Dim.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + } + // Chunk doesn't exist - meaning, it is not loaded + return Blocks.BEDROCK.getDefaultState(); + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + public Block getBlock() + { + World world = this.getWorldForId(this.dim); + if (world == null) + return null; + return world.getBlockState(new BlockPos(this.x, this.y, this.z)).getBlock(); + } + + public BlockVec3Dim modifyPositionFromSide(EnumFacing side, int amount) + { + switch (side.ordinal()) + { + case 0: + this.y -= amount; + break; + case 1: + this.y += amount; + break; + case 2: + this.z -= amount; + break; + case 3: + this.z += amount; + break; + case 4: + this.x -= amount; + break; + case 5: + this.x += amount; + break; + } + return this; + } + + public BlockVec3Dim newVecSide(int side) + { + BlockVec3Dim vec = new BlockVec3Dim(this.x, this.y, this.z, this.dim); + switch (side) + { + case 0: + vec.y--; + return vec; + case 1: + vec.y++; + return vec; + case 2: + vec.z--; + return vec; + case 3: + vec.z++; + return vec; + case 4: + vec.x--; + return vec; + case 5: + vec.x++; + return vec; + } + return vec; + } + + public BlockVec3Dim modifyPositionFromSide(EnumFacing side) + { + return this.modifyPositionFromSide(side, 1); + } + + @Override + public int hashCode() + { + return (((this.z * 431 + this.x) * 379 + this.y) * 373 + this.dim) * 7; + } + + @Override + public boolean equals(Object o) + { + if (o instanceof BlockVec3Dim) + { + BlockVec3Dim vector = (BlockVec3Dim) o; + return this.x == vector.x && this.y == vector.y && this.z == vector.z && this.dim == vector.dim; + } + + return false; + } + + @Override + public String toString() + { + return "BlockVec3 " + this.dim + ":[" + this.x + "," + this.y + "," + this.z + "]"; + } + + /** + * This will load the chunk - use getTileEntityNoLoad() if just updating + * things if present. + */ + public TileEntity getTileEntity() + { + World world = this.getWorldForId(this.dim); + if (world == null) + return null; + return world.getTileEntity(new BlockPos(this.x, this.y, this.z)); + } + + public TileEntity getTileEntityNoLoad() + { + World world = getWorldForId(this.dim); + if (world == null) + return null; + BlockPos pos = new BlockPos(this.x, this.y, this.z); + if (world.isBlockLoaded(pos, false)) + return world.getTileEntity(pos); + return null; + } + + public IBlockState getBlockMetadata() + { + World world = this.getWorldForId(this.dim); + if (world == null) + return null; + return world.getBlockState(new BlockPos(this.x, this.y, this.z)); + } + + public static BlockVec3Dim readFromNBT(NBTTagCompound nbtCompound) + { + BlockVec3Dim tempVector = new BlockVec3Dim(); + tempVector.x = nbtCompound.getInteger("x"); + tempVector.y = nbtCompound.getInteger("y"); + tempVector.z = nbtCompound.getInteger("z"); + tempVector.dim = nbtCompound.getInteger("dim"); + return tempVector; + } + + public NBTTagCompound writeToNBT(NBTTagCompound par1NBTTagCompound) + { + par1NBTTagCompound.setInteger("x", this.x); + par1NBTTagCompound.setInteger("y", this.y); + par1NBTTagCompound.setInteger("z", this.z); + par1NBTTagCompound.setInteger("dim", this.dim); + return par1NBTTagCompound; + } + + public BlockVec3Dim(NBTTagCompound par1NBTTagCompound) + { + this.x = par1NBTTagCompound.getInteger("x"); + this.y = par1NBTTagCompound.getInteger("y"); + this.z = par1NBTTagCompound.getInteger("z"); + this.dim = par1NBTTagCompound.getInteger("dim"); + } + + public double getMagnitude() + { + return Math.sqrt(this.getMagnitudeSquared()); + } + + public int getMagnitudeSquared() + { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + + public void setBlock(IBlockState block) + { + World world = this.getWorldForId(this.dim); + if (world == null) + return; + world.setBlockState(new BlockPos(this.x, this.y, this.z), block, 3); + } + + public boolean blockExists() + { + World world = this.getWorldForId(this.dim); + if (world == null) + return false; + return world.isBlockLoaded(new BlockPos(this.x, this.y, this.z)); + } + + /** + * It is up to the calling method to check that the dimension matches + * + * @param vector + * @return + */ + public int distanceSquared(BlockVec3 vector) + { + int var2 = vector.x - this.x; + int var4 = vector.y - this.y; + int var6 = vector.z - this.z; + return var2 * var2 + var4 * var4 + var6 * var6; + } + + public BlockPos toBlockPos() + { + return new BlockPos(x, y, z); + } + + private World getWorldForId(int dimensionID) + { + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + return WorldUtil.getWorldForDimensionServer(dimensionID); + } else + { + return getWorldForIdClient(dimensionID); + } + } + + @SideOnly(Side.CLIENT) + private World getWorldForIdClient(int dimensionID) + { + World world = FMLClientHandler.instance().getClient().world; + + if (world != null && world.provider.getDimension() == dimensionID) + { + return world; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector2.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector2.java new file mode 100644 index 00000000..64747cec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector2.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +/** + * Vector2 Class is used for defining objects in a 2D space. + * + * @author Calclavia + */ + +public class Vector2 implements Cloneable +{ + + public double x; + public double y; + + public Vector2() + { + this(0, 0); + } + + public Vector2(double x, double y) + { + this.x = x; + this.y = y; + } + + /** + * Returns the integer floor value. + * + * @return + */ + public int intX() + { + return (int) Math.floor(this.x); + } + + public int intY() + { + return (int) Math.floor(this.y); + } + + /** + * Makes a new copy of this Vector. Prevents variable referencing problems. + */ + @Override + public final Vector2 clone() + { + return new Vector2(this.x, this.y); + } + + public static double distance(Vector2 point1, Vector2 point2) + { + double xDifference = point1.x - point2.x; + double yDiference = point1.y - point2.y; + return Math.sqrt(xDifference * xDifference + yDiference * yDiference); + } + + public static double slope(Vector2 point1, Vector2 point2) + { + double xDifference = point1.x - point2.x; + double yDiference = point1.y - point2.y; + return yDiference / xDifference; + } + + public double distanceTo(Vector2 target) + { + double xDifference = this.x - target.x; + double yDifference = this.y - target.y; + return Math.sqrt(xDifference * xDifference + yDifference * yDifference); + } + + public Vector2 add(Vector2 par1) + { + this.x += par1.x; + this.y += par1.y; + return this; + } + + public Vector2 add(double par1) + { + this.x += par1; + this.y += par1; + return this; + } + + public Vector2 invert() + { + this.multiply(-1); + return this; + } + + public Vector2 multiply(double amount) + { + this.x *= amount; + this.y *= amount; + return this; + } + + public Vector2 round() + { + return new Vector2(Math.round(this.x), Math.round(this.y)); + } + + public Vector2 ceil() + { + return new Vector2(Math.ceil(this.x), Math.ceil(this.y)); + } + + public Vector2 floor() + { + return new Vector2(Math.floor(this.x), Math.floor(this.y)); + } + + @Override + public int hashCode() + { + return ("X:" + this.x + "Y:" + this.y).hashCode(); + } + + @Override + public boolean equals(Object o) + { + if (o instanceof Vector2) + { + Vector2 vector = (Vector2) o; + return this.x == vector.x && this.y == vector.y; + } + + return false; + } + + @Override + public String toString() + { + return "Vector2 [" + this.x + "," + this.y + "]"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector3.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector3.java new file mode 100644 index 00000000..79c644d6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector3.java @@ -0,0 +1,809 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.lwjgl.util.vector.Vector3f; + +/** + * Vector3 Class is used for defining objects in a 3D space. + * + * @author Calclavia + */ + +public class Vector3 implements Cloneable +{ + + public double x; + public double y; + public double z; + + public Vector3(double x, double y, double z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public Vector3() + { + this(0, 0, 0); + } + + public Vector3(Vector3 vector) + { + this(vector.x, vector.y, vector.z); + } + + public Vector3(double amount) + { + this(amount, amount, amount); + } + + public Vector3(Entity par1) + { + this(par1.posX, par1.posY, par1.posZ); + } + + public Vector3(BlockPos pos) + { + this(pos.getX(), pos.getY(), pos.getZ()); + } + + public Vector3(TileEntity par1) + { + this(par1.getPos()); + } + + public Vector3(Vec3d par1) + { + this(par1.x, par1.y, par1.z); + + } + + public Vector3(RayTraceResult par1) + { + this(par1.getBlockPos()); + } + + public Vector3(EnumFacing direction) + { + this(direction.getXOffset(), direction.getYOffset(), direction.getZOffset()); + } + + /** + * Loads a Vector3 from an NBT compound. + */ + public Vector3(NBTTagCompound nbt) + { + this(nbt.getDouble("x"), nbt.getDouble("y"), nbt.getDouble("z")); + } + + public Vector3(BlockVec3 vec) + { + this(vec.x, vec.y, vec.z); + } + + /** + * Returns the coordinates as integers, ideal for block placement. + */ + public int intX() + { + return (int) Math.floor(this.x); + } + + public int intY() + { + return (int) Math.floor(this.y); + } + + public int intZ() + { + return (int) Math.floor(this.z); + } + + public float floatX() + { + return (float) this.x; + } + + public float floatY() + { + return (float) this.y; + } + + public float floatZ() + { + return (float) this.z; + } + + /** + * Makes a new copy of this Vector. Prevents variable referencing problems. + */ + @Override + public final Vector3 clone() + { + return new Vector3(this); + } + + /** + * Easy block access functions. + * + * @param world + * @return + */ + public Block getBlock(IBlockAccess world) + { + return world.getBlockState(new BlockPos(this.intX(), this.intY(), this.intZ())).getBlock(); + } + + public IBlockState getBlockMetadata(IBlockAccess world) + { + return world.getBlockState(new BlockPos(this.intX(), this.intY(), this.intZ())); + } + + public TileEntity getTileEntity(IBlockAccess world) + { + return world.getTileEntity(new BlockPos(this.intX(), this.intY(), this.intZ())); + } + + public boolean setBlock(World world, IBlockState state, int notify) + { + return world.setBlockState(new BlockPos(this.intX(), this.intY(), this.intZ()), state, notify); + } + + public boolean setBlock(World world, IBlockState state) + { + return this.setBlock(world, state, 3); + } + + /** + * ---------------------- CONVERSION FUNCTIONS ---------------------------- + */ + /** + * Converts this Vector3 into a Vector2 by dropping the Y axis. + */ + public Vector2 toVector2() + { + return new Vector2(this.x, this.z); + } + + /** + * Converts this vector three into a Minecraft Vec3d object + */ + public Vec3d toVec3() + { + return new Vec3d(this.x, this.y, this.z); + } + + /** + * Converts Vector3 into a EnumFacing. + */ + public EnumFacing toEnumFacing() + { + for (EnumFacing direction : EnumFacing.VALUES) + { + if (this.x == direction.getXOffset() && this.y == direction.getYOffset() && this.z == direction.getZOffset()) + { + return direction; + } + } + + return null; + } + + public double getMagnitude() + { + return Math.sqrt(this.getMagnitudeSquared()); + } + + public double getMagnitudeSquared() + { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + + public Vector3 normalize() + { + double d = this.getMagnitude(); + + if (d != 0) + { + this.scale(1 / d); + } + + return this; + } + + /** + * Gets the distance between two vectors + * + * @return The distance + */ + public static double distance(Vector3 vec1, Vector3 vec2) + { + return vec1.distance(vec2); + } + + @Deprecated + public double distanceTo(Vector3 vector3) + { + return this.distance(vector3); + } + + public double distance(Vector3 compare) + { + Vector3 difference = this.clone().difference(compare); + return difference.getMagnitude(); + } + + /** + * Multiplies the vector by negative one. + */ + public Vector3 invert() + { + this.scale(-1); + return this; + } + + public Vector3 translate(Vector3 par1) + { + this.x += par1.x; + this.y += par1.y; + this.z += par1.z; + return this; + } + + public Vector3 translate(double par1) + { + this.x += par1; + this.y += par1; + this.z += par1; + return this; + } + + public static Vector3 translate(Vector3 translate, Vector3 par1) + { + translate.x += par1.x; + translate.y += par1.y; + translate.z += par1.z; + return translate; + } + + public static Vector3 translate(Vector3 translate, double par1) + { + translate.x += par1; + translate.y += par1; + translate.z += par1; + return translate; + } + + @Deprecated + public Vector3 add(Vector3 amount) + { + return this.translate(amount); + } + + @Deprecated + public Vector3 add(double amount) + { + return this.translate(amount); + } + + @Deprecated + public Vector3 subtract(Vector3 amount) + { + return this.translate(amount.clone().invert()); + } + + @Deprecated + public Vector3 subtract(double amount) + { + return this.translate(-amount); + } + + public Vector3 difference(Vector3 amount) + { + return this.translate(amount.clone().invert()); + } + + public Vector3 difference(double amount) + { + return this.translate(-amount); + } + + public Vector3 scale(double amount) + { + this.x *= amount; + this.y *= amount; + this.z *= amount; + return this; + } + + public Vector3 scale(Vector3 amount) + { + this.x *= amount.x; + this.y *= amount.y; + this.z *= amount.z; + return this; + } + + public static Vector3 scale(Vector3 vec, double amount) + { + return vec.scale(amount); + } + + public static Vector3 scale(Vector3 vec, Vector3 amount) + { + return vec.scale(amount); + } + + @Deprecated + public Vector3 multiply(double amount) + { + return this.scale(amount); + } + + @Deprecated + public Vector3 multiply(Vector3 amount) + { + return this.scale(amount); + } + + /** + * Static versions of a lot of functions + */ + public static Vector3 subtract(Vector3 par1, Vector3 par2) + { + return new Vector3(par1.x - par2.x, par1.y - par2.y, par1.z - par2.z); + } + + @Deprecated + public static Vector3 add(Vector3 par1, Vector3 par2) + { + return new Vector3(par1.x + par2.x, par1.y + par2.y, par1.z + par2.z); + } + + @Deprecated + public static Vector3 add(Vector3 par1, double par2) + { + return new Vector3(par1.x + par2, par1.y + par2, par1.z + par2); + } + + @Deprecated + public static Vector3 multiply(Vector3 vec1, Vector3 vec2) + { + return new Vector3(vec1.x * vec2.x, vec1.y * vec2.y, vec1.z * vec2.z); + } + + @Deprecated + public static Vector3 multiply(Vector3 vec1, double vec2) + { + return new Vector3(vec1.x * vec2, vec1.y * vec2, vec1.z * vec2); + } + + public Vector3 round() + { + return new Vector3(Math.round(this.x), Math.round(this.y), Math.round(this.z)); + } + + public Vector3 ceil() + { + return new Vector3(Math.ceil(this.x), Math.ceil(this.y), Math.ceil(this.z)); + } + + public Vector3 floor() + { + return new Vector3(Math.floor(this.x), Math.floor(this.y), Math.floor(this.z)); + } + + public Vector3 toRound() + { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + this.z = Math.round(this.z); + return this; + } + + public Vector3 toCeil() + { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + this.z = Math.ceil(this.z); + return this; + } + + public Vector3 toFloor() + { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + this.z = Math.floor(this.z); + return this; + } + + /** + * Gets all entities inside of this position in block space. + */ + public List getEntitiesWithin(World worldObj, Class par1Class) + { + return worldObj.getEntitiesWithinAABB(par1Class, new AxisAlignedBB(this.intX(), this.intY(), this.intZ(), this.intX() + 1, this.intY() + 1, this.intZ() + 1)); + } + + /** + * Gets a position relative to a position's side + * + * @return The position relative to the original position's side + */ + public Vector3 modifyPositionFromSide(EnumFacing side, double amount) + { + return this.translate(new Vector3(side).scale(amount)); + } + + public Vector3 modifyPositionFromSide(EnumFacing side) + { + this.modifyPositionFromSide(side, 1); + return this; + } + + /** + * Cross product functions + * + * @return The cross product between this vector and another. + */ + public Vector3 toCrossProduct(Vector3 compare) + { + double newX = this.y * compare.z - this.z * compare.y; + double newY = this.z * compare.x - this.x * compare.z; + double newZ = this.x * compare.y - this.y * compare.x; + this.x = newX; + this.y = newY; + this.z = newZ; + return this; + } + + public Vector3 crossProduct(Vector3 compare) + { + return this.clone().toCrossProduct(compare); + } + + public Vector3 xCrossProduct() + { + return new Vector3(0.0D, this.z, -this.y); + } + + public Vector3 zCrossProduct() + { + return new Vector3(-this.y, this.x, 0.0D); + } + + public double dotProduct(Vector3 vec2) + { + return this.x * vec2.x + this.y * vec2.y + this.z * vec2.z; + } + + /** + * @return The perpendicular vector. + */ + public Vector3 getPerpendicular() + { + if (this.z == 0.0F) + { + return this.zCrossProduct(); + } + + return this.xCrossProduct(); + } + + /** + * @return True if this Vector3 is zero. + */ + public boolean isZero() + { + return this.x == 0 && this.y == 0 && this.z == 0; + } + + /** + * Rotate by a this vector around an axis. + * + * @return The new Vector3 rotation. + */ + public Vector3 rotate(float angle, Vector3 axis) + { + return Vector3.translateMatrix(Vector3.getRotationMatrix(angle, axis), this.clone()); + } + + public double[] getRotationMatrix(float angle) + { + double[] matrix = new double[16]; + Vector3 axis = this.clone().normalize(); + double x = axis.x; + double y = axis.y; + double z = axis.z; + angle /= Constants.RADIANS_TO_DEGREES; + float cos = MathHelper.cos(angle); + float ocos = 1.0F - cos; + float sin = MathHelper.sin(angle); + matrix[0] = x * x * ocos + cos; + matrix[1] = y * x * ocos + z * sin; + matrix[2] = x * z * ocos - y * sin; + matrix[4] = x * y * ocos - z * sin; + matrix[5] = y * y * ocos + cos; + matrix[6] = y * z * ocos + x * sin; + matrix[8] = x * z * ocos + y * sin; + matrix[9] = y * z * ocos - x * sin; + matrix[10] = z * z * ocos + cos; + matrix[15] = 1.0F; + return matrix; + } + + public static Vector3 translateMatrix(double[] matrix, Vector3 translation) + { + double x = translation.x * matrix[0] + translation.y * matrix[1] + translation.z * matrix[2] + matrix[3]; + double y = translation.x * matrix[4] + translation.y * matrix[5] + translation.z * matrix[6] + matrix[7]; + double z = translation.x * matrix[8] + translation.y * matrix[9] + translation.z * matrix[10] + matrix[11]; + translation.x = x; + translation.y = y; + translation.z = z; + return translation; + } + + public static double[] getRotationMatrix(float angle, Vector3 axis) + { + return axis.getRotationMatrix(angle); + } + + /** + * Rotates this Vector by a yaw, pitch and roll value. + */ + public void rotate(double yaw, double pitch, double roll) + { + double yawRadians = Math.toRadians(yaw); + double pitchRadians = Math.toRadians(pitch); + double rollRadians = Math.toRadians(roll); + + double x = this.x; + double y = this.y; + double z = this.z; + + this.x = x * Math.cos(yawRadians) * Math.cos(pitchRadians) + z * (Math.cos(yawRadians) * Math.sin(pitchRadians) * Math.sin(rollRadians) - Math.sin(yawRadians) * Math.cos(rollRadians)) + + y * (Math.cos(yawRadians) * Math.sin(pitchRadians) * Math.cos(rollRadians) + Math.sin(yawRadians) * Math.sin(rollRadians)); + this.z = x * Math.sin(yawRadians) * Math.cos(pitchRadians) + z * (Math.sin(yawRadians) * Math.sin(pitchRadians) * Math.sin(rollRadians) + Math.cos(yawRadians) * Math.cos(rollRadians)) + + y * (Math.sin(yawRadians) * Math.sin(pitchRadians) * Math.cos(rollRadians) - Math.cos(yawRadians) * Math.sin(rollRadians)); + this.y = -x * Math.sin(pitchRadians) + z * Math.cos(pitchRadians) * Math.sin(rollRadians) + y * Math.cos(pitchRadians) * Math.cos(rollRadians); + } + + /** + * Rotates a point by a yaw and pitch around the anchor 0,0 by a specific + * angle. + */ + public void rotate(double yaw, double pitch) + { + this.rotate(yaw, pitch, 0); + } + + public void rotate(double yaw) + { + double yawRadians = Math.toRadians(yaw); + + double x = this.x; + double z = this.z; + + if (yaw != 0) + { + this.x = x * Math.cos(yawRadians) - z * Math.sin(yawRadians); + this.z = x * Math.sin(yawRadians) + z * Math.cos(yawRadians); + } + } + + /** + * Gets the delta look position based on the rotation yaw and pitch. + * Minecraft coordinates are messed up. Y and Z are flipped. Yaw is + * displaced by 90 degrees. Pitch is inversed. + * + * @param rotationYaw + * @param rotationPitch + */ + public static Vector3 getDeltaPositionFromRotation(float rotationYaw, float rotationPitch) + { + return new Vector3(Math.cos(Math.toRadians(rotationYaw + 90)), Math.sin(Math.toRadians(-rotationPitch)), Math.sin(Math.toRadians(rotationYaw + 90))); + } + + /** + * Gets the angle between this vector and another vector. + * + * @return Angle in degrees + */ + public double getAngle(Vector3 vec2) + { + return Vector3.anglePreNorm(this.clone().normalize(), vec2.clone().normalize()); + } + + public static double getAngle(Vector3 vec1, Vector3 vec2) + { + return vec1.getAngle(vec2); + } + + public double anglePreNorm(Vector3 vec2) + { + return Math.acos(this.dotProduct(vec2)); + } + + public static double anglePreNorm(Vector3 vec1, Vector3 vec2) + { + return Math.acos(vec1.clone().dotProduct(vec2)); + } + + /** + * Loads a Vector3 from an NBT compound. + */ + @Deprecated + public static Vector3 readFromNBT(NBTTagCompound nbt) + { + return new Vector3(nbt); + } + + /** + * Saves this Vector3 to disk + */ + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + nbt.setDouble("x", this.x); + nbt.setDouble("y", this.y); + nbt.setDouble("z", this.z); + return nbt; + } + + public static Vector3 UP() + { + return new Vector3(0, 1, 0); + } + + public static Vector3 DOWN() + { + return new Vector3(0, -1, 0); + } + + public static Vector3 NORTH() + { + return new Vector3(0, 0, -1); + } + + public static Vector3 SOUTH() + { + return new Vector3(0, 0, 1); + } + + public static Vector3 WEST() + { + return new Vector3(-1, 0, 0); + } + + public static Vector3 EAST() + { + return new Vector3(1, 0, 0); + } + + @Deprecated + public RayTraceResult rayTraceEntities(World world, float rotationYaw, float rotationPitch, boolean collisionFlag, double reachDistance) + { + return this.rayTraceEntities(world, rotationYaw, rotationPitch, reachDistance); + } + + public RayTraceResult rayTraceEntities(World world, float rotationYaw, float rotationPitch, double reachDistance) + { + return this.rayTraceEntities(world, Vector3.getDeltaPositionFromRotation(rotationYaw, rotationPitch).scale(reachDistance)); + } + + /** + * Does an entity raytrace. + * + * @param world - The world object. + * @param target - The rotation in terms of Vector3. Convert using + * getDeltaPositionFromRotation() + * @return The target hit. + */ + public RayTraceResult rayTraceEntities(World world, Vector3 target) + { + RayTraceResult pickedEntity = null; + Vec3d startingPosition = this.toVec3(); + Vec3d look = target.toVec3(); + double reachDistance = this.distance(target); + Vec3d reachPoint = new Vec3d(startingPosition.x + look.x * reachDistance, startingPosition.y + look.y * reachDistance, startingPosition.z + look.z * reachDistance); + + double checkBorder = 1.1 * reachDistance; + AxisAlignedBB boxToScan = new AxisAlignedBB(-checkBorder, -checkBorder, -checkBorder, checkBorder, checkBorder, checkBorder).offset(this.x, this.y, this.z); + + List entitiesHit = world.getEntitiesWithinAABBExcludingEntity(null, boxToScan); + double closestEntity = reachDistance; + + if (entitiesHit == null || entitiesHit.isEmpty()) + { + return null; + } + for (Entity entityHit : entitiesHit) + { + if (entityHit != null && entityHit.canBeCollidedWith() && entityHit.getCollisionBoundingBox() != null) + { + float border = entityHit.getCollisionBorderSize(); + AxisAlignedBB aabb = entityHit.getEntityBoundingBox().grow(border); + RayTraceResult hitMOP = aabb.calculateIntercept(startingPosition, reachPoint); + + if (hitMOP != null) + { + if (aabb.contains(startingPosition)) + { + if (0.0D < closestEntity || closestEntity == 0.0D) + { + pickedEntity = new RayTraceResult(entityHit); + if (pickedEntity != null) + { + pickedEntity.hitVec = hitMOP.hitVec; + closestEntity = 0.0D; + } + } + } else + { + double distance = startingPosition.distanceTo(hitMOP.hitVec); + + if (distance < closestEntity || closestEntity == 0.0D) + { + pickedEntity = new RayTraceResult(entityHit); + pickedEntity.hitVec = hitMOP.hitVec; + closestEntity = distance; + } + } + } + } + } + return pickedEntity; + } + + @Override + public int hashCode() + { + return new HashCodeBuilder().append(this.x).append(this.y).append(this.z).hashCode(); + } + + @Override + public boolean equals(Object o) + { + if (o instanceof Vector3) + { + Vector3 vector3 = (Vector3) o; + return new EqualsBuilder().append(this.x, vector3.x).append(this.y, vector3.y).append(this.z, vector3.z).isEquals(); + } + + return false; + } + + @Override + public String toString() + { + return "Vector3 [" + this.x + "," + this.y + "," + this.z + "]"; + } + + public Vector3f toVector3f() + { + return new Vector3f((float) this.x, (float) this.y, (float) this.z); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/package-info.java new file mode 100644 index 00000000..80e703f1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|vector") +package micdoodle8.mods.galacticraft.api.vector; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/AtmosphereInfo.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/AtmosphereInfo.java new file mode 100644 index 00000000..4aa223b0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/AtmosphereInfo.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.ArrayList; + +public class AtmosphereInfo +{ + + private final Boolean isBreathable; + private final boolean hasPrecipitation; + private final boolean isCorrosive; + private final float thermalLevel; + private final float windLevel; + private final float density; + public ArrayList composition = new ArrayList<>(); + + /** + * @param breathable - supply null here to have the AtmosphereInfo object + * test the atmospheric composition for oxygen and CO2, or true or + * false to override + * @param precipitation - true for rain etc, false for none + * @param corrosive - true for atmosphere which can corrode armor + * @param relativeTemperature - the thermal level relative to Overworld: + * 0.0F is default + * @param windLevel - the wind level + * @param density - the atmospheric density (affects sounds and meteor + * frequency): 1.0F is like Overworld + */ + public AtmosphereInfo(Boolean breathable, boolean precipitation, boolean corrosive, float relativeTemperature, float windLevel, float density) + { + this.isBreathable = breathable; + this.hasPrecipitation = precipitation; + this.isCorrosive = corrosive; + this.thermalLevel = relativeTemperature; + this.windLevel = windLevel; + this.density = density; + } + + public boolean isBreathable() + { + if (this.isBreathable == null) + { + return this.isGasPresent(EnumAtmosphericGas.OXYGEN) && !this.isGasPresent(EnumAtmosphericGas.CO2); + } + return this.isBreathable; + } + + public boolean hasPrecipitation() + { + return this.hasPrecipitation; + } + + public boolean isCorrosive() + { + return this.isCorrosive; + } + + public float thermalLevel() + { + return this.thermalLevel; + } + + public float windLevel() + { + return this.windLevel; + } + + public float relativeDensity() + { + return this.density; + } + + public boolean isGasPresent(EnumAtmosphericGas gas) + { + return this.composition.contains(gas); + } + + public boolean hasNoGases() + { + return this.composition.isEmpty(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeData.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeData.java new file mode 100644 index 00000000..1ccdec4d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeData.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import net.minecraft.world.biome.Biome.BiomeProperties; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class BiomeData +{ + + private String biomeName; + @Builder.Default private float baseHeight = 0.1F; + @Builder.Default private float heightVariation = 0.2F; + @Builder.Default private float temperature = 0.5F; + @Builder.Default private float rainfall = 0.0F; + @Builder.Default private int waterColor = 16777215; + @Builder.Default private boolean enableSnow = false; + @Builder.Default private boolean enableRain = false; + private String baseBiomeRegName; + + public BiomeProperties toBiomeProperties() + { + BiomeProperties biomeProperties = new BiomeProperties(biomeName) + .setBaseHeight(baseHeight).setHeightVariation(heightVariation) + .setTemperature(temperature).setRainfall(rainfall) + .setWaterColor(waterColor).setBaseBiome(baseBiomeRegName); + if (!enableRain) + { + biomeProperties.setRainDisabled(); + } + if (!enableSnow) + { + biomeProperties.setSnowEnabled(); + } + return biomeProperties; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeGenBaseGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeGenBaseGC.java new file mode 100644 index 00000000..d6dbf323 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeGenBaseGC.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.LinkedList; + +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.passive.EntityAmbientCreature; +import net.minecraft.entity.passive.EntityWaterMob; +import net.minecraft.world.biome.Biome; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ASMUtil; + +/** + * This extension of BiomeGenBase contains the default initialiseMobLists() + * called on CelestialBody registration to register mob spawn data + */ +public abstract class BiomeGenBaseGC extends Biome implements IMobSpawnBiome +{ + + public final boolean isAdaptiveBiome; + + protected BiomeGenBaseGC(BiomeData data) + { + super(data.toBiomeProperties()); + this.setRegistryName(data.getBiomeName()); + GalacticraftCore.biomesList.add(this); + this.isAdaptiveBiome = false; + } + + protected BiomeGenBaseGC(BiomeData data, boolean adaptive) + { + super(data.toBiomeProperties()); + this.setRegistryName(data.getBiomeName()); + this.isAdaptiveBiome = adaptive; + } + + protected BiomeGenBaseGC(BiomeProperties properties, boolean adaptive) { + super(properties); + this.setRegistryName(ASMUtil.getBiomeName(properties)); + this.isAdaptiveBiome = adaptive; + } + + protected BiomeGenBaseGC(BiomeProperties properties) + { + super(properties); + this.setRegistryName(ASMUtil.getBiomeName(properties)); + GalacticraftCore.biomesList.add(this); + this.isAdaptiveBiome = false; + } + + /** + * Override this in your biomes
(Note: if adaptive biomes, only the + * FIRST to register the adaptive biome will have its types registered in + * the BiomeDictionary - sorry, that's a Forge limitation.) + */ + public void registerTypes(Biome registering) + { + } + + /** + * The default implementation in BiomeGenBaseGC will attempt to allocate + * each SpawnListEntry in the CelestialBody's mobInfo to this biome's Water, + * Cave, Monster or Creature lists according to whether the spawnable + * entity's class is a subclass of EntityWaterMob, EntityAmbientCreature, + * EntityMob or anything else (passive mobs or plain old EntityLiving). + * + * Override this if different behaviour is required. + */ + @Override + public void initialiseMobLists(LinkedList mobInfo) + { + this.spawnableMonsterList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableCaveCreatureList.clear(); + for (SpawnListEntry entry : mobInfo) + { + Class mobClass = entry.entityClass; + if (EntityWaterMob.class.isAssignableFrom(mobClass)) + { + this.spawnableWaterCreatureList.add(entry); + } else if (EntityAmbientCreature.class.isAssignableFrom(mobClass)) + { + this.spawnableCaveCreatureList.add(entry); + } else if (EntityMob.class.isAssignableFrom(mobClass)) + { + this.spawnableMonsterList.add(entry); + } else + { + this.spawnableCreatureList.add(entry); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ChunkProviderBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ChunkProviderBase.java new file mode 100644 index 00000000..db086e29 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ChunkProviderBase.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import javax.annotation.Nullable; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.IChunkGenerator; + +public abstract class ChunkProviderBase implements IChunkGenerator +{ + + @Override + @Nullable + public BlockPos getNearestStructurePos(World worldIn, String structureName, BlockPos position, boolean findUnexplored) + { + return null; + } + + // This is something connected with Ocean Monuments, and not used in + // Galacticraft. + @Override + public boolean generateStructures(Chunk chunkIn, int x, int z) + { + return false; + } + + /** + * Override this if you want to implement an advancement using + * net.minecraft.advancements.critereon.LocationPredicate + */ + @Override + public boolean isInsideStructure(World worldIn, String structureName, BlockPos pos) + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/DimensionalCoord.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/DimensionalCoord.java new file mode 100644 index 00000000..007c5bb0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/DimensionalCoord.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class DimensionalCoord +{ + + public int posX, posY, posZ; + public int dimId; + + public DimensionalCoord(int posX, int posY, int posZ, int dimId) + { + this.posX = posX; + this.posY = posY; + this.posZ = posZ; + this.dimId = dimId; + } + + public DimensionalCoord(double posX, double posY, double posZ, int dimId) + { + this((int) Math.floor(posX), (int) Math.floor(posX), (int) Math.floor(posX), dimId); + } + + public DimensionalCoord(Entity entity) + { + this.posX = (int) entity.posX; + this.posY = (int) entity.posY; + this.posZ = (int) entity.posZ; + this.dimId = entity.world.provider.getDimension(); + } + + public DimensionalCoord(BlockPos pos, World world) + { + this(pos.getX(), pos.getY(), pos.getZ(), world.provider.getDimension()); + } + + public static DimensionalCoord toCoord(TileEntity tileEntity) + { + return new DimensionalCoord(tileEntity.getPos(), tileEntity.getWorld()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/EnumAtmosphericGas.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/EnumAtmosphericGas.java new file mode 100644 index 00000000..b55b007a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/EnumAtmosphericGas.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +public enum EnumAtmosphericGas +{ + NITROGEN, OXYGEN, CO2, WATER, METHANE, HYDROGEN, HELIUM, ARGON +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IExitHeight.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IExitHeight.java new file mode 100644 index 00000000..50d8745a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IExitHeight.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +/** + * For world providers where you would like to specify height for spacecraft to + * be teleported

Implement into world providers + */ +public interface IExitHeight +{ + + /** + * @return y-coordinate that spacecraft leaves the dimension + */ + double getYCoordinateToTeleport(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IGalacticraftWorldProvider.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IGalacticraftWorldProvider.java new file mode 100644 index 00000000..03230138 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IGalacticraftWorldProvider.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; + +public interface IGalacticraftWorldProvider +{ + + /** + * gets additional gravity to add to players in this dimension. Typical + * values range from 0.040 to 0.065 + * + * @return additional gravity for this provider + */ + float getGravity(); + + /** + * Gets custom arrow gravity, overriding the vanilla gravity for arrows + * + * @return added y-motion per tick for arrows + */ + float getArrowGravity(); + + /** + * Determines the rate to spawn meteors in this planet. Lower means MORE + * meteors.

Typical value would be about 7. Return 0 for no meteors. + * + * @return + */ + double getMeteorFrequency(); + + /** + * Depending on gravity, different fuel depletion rates will occur in + * spacecraft (less force required to lift) + * + * @return multiplier of fuel usage, relative to the earth. Lower gravity = + * Lower fuel usage (multiplier less than zero) + */ + double getFuelUsageMultiplier(); + + /** + * Whether or not the spaceship tier from {@link IRocketType} can enter this + * dimension + * + * @param tier The tier of the spaceship entering this dimension + * @return Whether or not the spaceship with given tier can enter this + * dimension + */ + boolean canSpaceshipTierPass(int tier); + + /** + * Fall damage will be multiplied by this number while on the planet/moon. + * + * @return Fall damage multiplier, returning 1 will be equal to earth. + */ + float getFallDamageModifier(); + + /** + * + * @return true if this world has no type of atmosphere at all - e.g. the + * Moon + */ + boolean hasNoAtmosphere(); + + /** + * Changes volume of sounds on this planet. You should be using higher + * values for thin atmospheres and high values for dense atmospheres + * + * @return Sound reduction divisor. Value of 10 will make sounds ten times + * more quiet. Value of 0.1 will make sounds 10 times louder. Be + * careful with the values you choose! + */ + float getSoundVolReductionAmount(); + + /** + * Whether or not the atmosphere of this dimension is valid for players to + * breathe + * + * @return True if players can breathe here, False if not. + */ + boolean hasBreathableAtmosphere(); + + /** + * If false (the default) then Nether Portals will have no function on this + * world. Nether Portals can still be constructed, if the player can make + * fire, they just won't do anything. + * + * @return True if Nether Portals should work like on the Overworld. + */ + boolean netherPortalsOperational(); + + /** + * Whether or not the atmosphere of this dimension contains the specified + * gas + * + * @return True if the gas is present in the atmosphere, False if not. + */ + boolean isGasPresent(EnumAtmosphericGas gas); + + /** + * This value will affect player's thermal level, damaging them if it + * reaches too high or too low. + * + * @return Positive integer for hot celestial bodies, negative for cold. + * Zero for neutral + */ + float getThermalLevelModifier(); + + /** + * Amount of wind on this world. Used for flag waving.

Earth has a + * value of 1.0F, Luna (Moon) has a value of 0.0F. + * + * @return Flag movement magnitude. Relative to earth's value of 1.0F + */ + float getWindLevel(); + + /** + * Factor by which the sun is to be drawn smaller (<1.0) or larger (>1.0) + * than the sun on the Overworld + * + * @return factor + */ + float getSolarSize(); + + /** + * The celestial body object for this dimension + * + * @return The Moon or Planet object for this dimension + * @see micdoodle8.mods.galacticraft.api.galaxies.Planet + * @see micdoodle8.mods.galacticraft.api.galaxies.Moon + */ + abstract CelestialBody getCelestialBody(); + + /** + * Whether rain and snow should be disabled on this planet + * + * @return true if precipitation should be disabled. False otherwise. + */ + boolean shouldDisablePrecipitation(); + + /** + * Whether or not player's armor should be corroded in this world + * + * @return true if armor should be corroded, false if not + */ + boolean shouldCorrodeArmor(); + + /** + * The size (in blocks) of the average spacing between dungeons For example, + * on the Moon it's 704 blocks, meaning one dungeon in each (704 x 704) + * square in the (x, z) plane

If your world has no dungeons you can + * safely return 0 here. + */ + int getDungeonSpacing(); + + /** + * The ChestGenHooks identifier of the dungeon chests to generate in this + * world + */ + ResourceLocation getDungeonChestType(); + + List getSurfaceBlocks(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IMobSpawnBiome.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IMobSpawnBiome.java new file mode 100644 index 00000000..980e3676 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IMobSpawnBiome.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.LinkedList; +import net.minecraft.world.biome.Biome.SpawnListEntry; + +/** + * Implement this on any Galacticraft World Provider biome registered for a + * Celestial Body + */ +public interface IMobSpawnBiome +{ + + public void initialiseMobLists(LinkedList mobInfo); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IOrbitDimension.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IOrbitDimension.java new file mode 100644 index 00000000..80dfd8ca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IOrbitDimension.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +public interface IOrbitDimension extends IGalacticraftWorldProvider +{ + + /** + * @return the name of the world that this dimension is orbiting. For the + * overworld it returns "Overworld" + * @deprecated use {@link IOrbitDimension#getPlanetIdToOrbit()} + */ + @Deprecated + String getPlanetToOrbit(); + + /** + * @return the y-coordinate that entities will fall back into the world we + * are orbiting + */ + int getYCoordToTeleportToPlanet(); + + default int getPlanetIdToOrbit() + { + return Integer.MIN_VALUE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ISolarLevel.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ISolarLevel.java new file mode 100644 index 00000000..b806ed84 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ISolarLevel.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +/** + * Used to change the solar multiplier of certain world providers

If you + * have a solar feature in your mod, check whether the world's provider inherits + * this class and multiply the solar generation by the solar multiplier double + *

for example:

if (worldObj.provider instanceof ISolarLevel) + * solarStrength *= ((ISolarLevel) + * worldObj.provider).getSolarEnergyMultiplier(); + */ +public interface ISolarLevel +{ + + double getSolarEnergyMultiplier(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ITeleportType.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ITeleportType.java new file mode 100644 index 00000000..5f202586 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ITeleportType.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +/** + * Implement into WorldProvider for customizing spawning players and other + * entities into space dimension

You can also create a separate class, + * implement it there, then register it in @GalacticraftRegistry + */ +public interface ITeleportType +{ + + /** + * This method is used to determine if a player will open parachute upon + * entering the dimension + * + * @return whether player will set parachute open upon entering this + * dimension + */ + boolean useParachute(); + + /** + * Gets the player spawn location when entering this dimension + * + * @param world The world to be spawned into + * @param player The player to be teleported + * @return a vector3 object containing the coordinates to be spawned into + * the world with + */ + Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player); + + /** + * Gets the entity (non-player) spawn location when entering this dimension + * + * @param world The world to be spawned into + * @param entity the non-player entity to be teleported + * @return a vector3 object containing the coordinates to be spawned into + * the world with + */ + Vector3 getEntitySpawnLocation(WorldServer world, Entity entity); + + /** + * Gets the parachest spawn location when entering this dimension. Return + * null for no parachest spawn + * + * @param world The world to be spawned into + * @param player The player being teleported + * @param rand The random instance + * @return a vector3 object containing the coordinates to be spawned into + * the world with. Return null for no spawn + */ + Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand); + + /** + * Called when player is transferred to a space dimension + * + * @param newWorld The world object of the entered world + * @param player The player that has transferred dimensions + * @param ridingAutoRocket If the player is riding an auto rocket. Do not + * spawn in landers if so. + */ + void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket); + + /** + * Used by Asteroids Survival game mode to set up the initial lander + * inventory + * + * @param player + */ + void setupAdventureSpawn(EntityPlayerMP player); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IWeatherProvider.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IWeatherProvider.java new file mode 100644 index 00000000..71c0d80a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IWeatherProvider.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.particle.Particle; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IWeatherProvider +{ + + @SideOnly(Side.CLIENT) + Particle getParticle(WorldClient world, double x, double y, double z); + + void weatherSounds(int j, Minecraft mc, World world, BlockPos blockpos, double xx, double yy, double zz, Random random); + + int getSoundInterval(float f); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IZeroGDimension.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IZeroGDimension.java new file mode 100644 index 00000000..fc8e0937 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IZeroGDimension.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import net.minecraft.entity.Entity; + +public interface IZeroGDimension +{ + + boolean inFreefall(Entity entity); + + void setInFreefall(Entity entity); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/OxygenHooks.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/OxygenHooks.java new file mode 100644 index 00000000..798a4243 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/OxygenHooks.java @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.lang.reflect.Method; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; + +public class OxygenHooks +{ + + private static Class oxygenUtilClass; + private static Method combusionTestMethod; + private static Method breathableAirBlockMethod; + private static Method breathableAirBlockEntityMethod; + private static Method torchHasOxygenMethod; + private static Method oxygenBubbleMethod; + private static Method validOxygenSetupMethod; + + /** + * Test whether fire can burn in this world's atmosphere (outside any oxygen + * bubble). + * + * @param provider The WorldProvider for this dimension + * + * @return False if fire burns normally True if fire cannot burn in this + * world + * + */ + public static boolean noAtmosphericCombustion(WorldProvider provider) + { + try + { + if (combusionTestMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + combusionTestMethod = oxygenUtilClass.getDeclaredMethod("noAtmosphericCombustion", WorldProvider.class); + } + return (Boolean) combusionTestMethod.invoke(null, provider); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Test whether a bounding box (normally a block but it could be an entity) + * is inside an oxygen bubble or oxygen sealed space, on an otherwise + * oxygen-free world. (Do not use this on the Overworld or other oxygen-rich + * world,, it will return false negatives!!) + * + * NOTE: In a complex build where this block is surrounded by air-permeable + * blocks on all sides (for example torches, ladders, signs, wires, chests + * etc etc) then it may have to look quite far to find whether it is in + * oxygen or not - it will check up to 5 blocks in each direction. This can + * impose a performance load in the unlikely event there are permeable + * blocks in all directions. It is therefore advisable not to call this + * every tick: 1 tick in 5 should be plenty. + * + * @param world The World + * @param bb AxisAligned BB representing the block (e.g. a torch), or maybe + * the side of a block + * @return True if the bb is in oxygen, otherwise false. + */ + public static boolean isAABBInBreathableAirBlock(World world, AxisAlignedBB bb) + { + try + { + if (breathableAirBlockMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + breathableAirBlockMethod = oxygenUtilClass.getDeclaredMethod("isAABBInBreathableAirBlock", World.class, AxisAlignedBB.class); + } + return (Boolean) breathableAirBlockMethod.invoke(null, world, bb); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Special version of the oxygen AABB check for living entities. This is + * based on checking the oxygen contact of a small box centred at the + * entity's eye height. The small box has sides equal to half the width of + * the entity. This is a good approximation to head size and position for + * most types of mobs. + * + * @param entity + * @return True if the entity's head is in an oxygen bubble or block, false + * otherwise + */ + public static boolean isAABBInBreathableAirBlock(EntityLivingBase entity) + { + try + { + if (breathableAirBlockEntityMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + breathableAirBlockEntityMethod = oxygenUtilClass.getDeclaredMethod("isAABBInBreathableAirBlock", EntityLivingBase.class); + } + return (Boolean) breathableAirBlockEntityMethod.invoke(null, entity); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Simplified (better performance) version of the block oxygen check for use + * with torch blocks and other oxygen-requiring blocks which can access + * oxygen on any side. + * + * NOTE: this does not run an inOxygenBubble() check, you will need to do + * that also. + * + * @param world + * @param block The block type of this torch being checked - currently + * unused + * @param pos The x, y, z position of the torch + * @return True if there is a (sealed) oxygen block accessible, otherwise + * false. + */ + public static boolean checkTorchHasOxygen(World world, Block block, BlockPos pos) + { + try + { + if (torchHasOxygenMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + torchHasOxygenMethod = oxygenUtilClass.getDeclaredMethod("checkTorchHasOxygen", World.class, BlockPos.class); + } + return (Boolean) torchHasOxygenMethod.invoke(null, world, pos); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Test whether a location is inside an Oxygen Bubble from an Oxygen + * Distributor + * + * @param worldObj World + * @param avgX avg X, avgY, avgZ are the average co-ordinates of the + * location + * @param avgY (for example, the central point of a block being tested + * @param avgZ or the average position of the centre of a living entity) + * @return True if it is in an oxygen bubble, otherwise false + */ + public static boolean inOxygenBubble(World worldObj, double avgX, double avgY, double avgZ) + { + try + { + if (oxygenBubbleMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + oxygenBubbleMethod = oxygenUtilClass.getDeclaredMethod("inOxygenBubble", World.class, double.class, double.class, double.class); + } + return (Boolean) oxygenBubbleMethod.invoke(null, worldObj, avgX, avgY, avgZ); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Test whether a player is wearing a working set of Galacticraft + * oxygen-breathing apparatus (mask, gear + tank) + * + * @param player + * @return True if the setup is valid, otherwise false + */ + public static boolean hasValidOxygenSetup(EntityPlayerMP player) + { + try + { + if (validOxygenSetupMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + validOxygenSetupMethod = oxygenUtilClass.getDeclaredMethod("hasValidOxygenSetup", EntityPlayerMP.class); + } + return (Boolean) validOxygenSetupMethod.invoke(null, player); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/SpaceStationType.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/SpaceStationType.java new file mode 100644 index 00000000..25b995f1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/SpaceStationType.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; + +/** + * Currently only used internally, not guaranteed to work. + */ +public class SpaceStationType +{ + + private final int spaceStationID; + private final int planetID; + private SpaceStationRecipe recipe; + + /** + * The planet ID is the home planet. Only one SpaceStationType is allowed + * per home planet. The dimension number for the planet ID should match what + * it will be on the CLIENT even if the server has assigned different + * dimension IDs. For example, for the Overworld the planet ID should be 0 + * (it should be 0, even if the server has set + * ConfigManagerCore.idDimensionOverworld to a different value than 0). + */ + public SpaceStationType(int spaceStationID, int planetID, SpaceStationRecipe recipe) + { + this.spaceStationID = spaceStationID; + this.planetID = planetID; + this.recipe = recipe; + } + + /** + * Dimension ID of the space station + */ + public int getSpaceStationID() + { + return this.spaceStationID; + } + + /** + * Dimension ID of the planet this space station is orbiting + */ + public int getWorldToOrbitID() + { + return this.planetID; + } + + /** + * The recipe to create this space station + */ + public SpaceStationRecipe getRecipeForSpaceStation() + { + return this.recipe; + } + + public void setRecipeForSpaceStation(SpaceStationRecipe newRecipe) + { + this.recipe = newRecipe; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/package-info.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/package-info.java new file mode 100644 index 00000000..5d48ec65 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|world") +package micdoodle8.mods.galacticraft.api.world; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/Constants.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/Constants.java new file mode 100644 index 00000000..10e7196e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/Constants.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; + +public class Constants +{ + + public static final String MOD_ID_CORE = "galacticraftcore"; + public static final String MOD_ID_PLANETS = "galacticraftplanets"; + public static final String MOD_NAME_SIMPLE = "Galacticraft"; + + public static final String VERSION = "${version}"; + + public static final String DEPENDENCIES_FORGE = "required-after:forge@[14.23.5.2847,); "; + public static final String DEPENDENCIES_MICCORE = "required-after:micdoodlecore; "; + @Deprecated + @ForRemoval(deadline = "4.1.0") + public static final String DEPENDENCIES_MODS = "after:ic2; after:tconstruct; after:mantle;"; + + public static final String MCVERSION = "[1.12)"; + + public static final String CONFIG_CATEGORY_DIMENSIONS = "dimensions"; + public static final String CONFIG_CATEGORY_ENTITIES = "entities"; + public static final String CONFIG_CATEGORY_SCHEMATIC = "schematic"; + public static final String CONFIG_CATEGORY_GENERAL = "general"; + public static final String CONFIG_CATEGORY_WORLDGEN = "worldgen"; + public static final String CONFIG_CATEGORY_ACHIEVEMENTS = "achievements"; + public static final String CONFIG_CATEGORY_CLIENT = "client"; + public static final String CONFIG_CATEGORY_SERVER = "server"; + public static final String CONFIG_CATEGORY_CONTROLS = "controls"; + public static final String CONFIG_CATEGORY_KEYS = "keybindings_initial"; + public static final String CONFIG_CATEGORY_DIFFICULTY = "difficulty"; + public static final String CONFIG_CATEGORY_COMPATIBILITY = "compatibility"; + + public static final int OVERWORLD_SKYPROVIDER_STARTHEIGHT = 200; + public static final int OVERWORLD_CLOUD_HEIGHT = 130; + + public static final float LOX_GAS_RATIO = 5F / 54; + + public static final String CONFIG_FILE = "Galacticraft/core.cfg"; + public static final String POWER_CONFIG_FILE = "Galacticraft/energy.cfg"; + public static final String CHUNKLOADER_CONFIG_FILE = "Galacticraft/chunkloading.cfg"; + public static final String PLANETS_CONFIG_FILE = "Galacticraft/planets.cfg"; + + public static final String OLD_CONFIG_FILE = "Galacticraft/core.conf"; + public static final String OLD_POWER_CONFIG_FILE = "Galacticraft/power-GC3.conf"; + public static final String OLD_CHUNKLOADER_CONFIG_FILE = "Galacticraft/chunkloading.conf"; + + public static final String ASSET_PREFIX = "galacticraftcore"; + public static final String TEXTURE_PREFIX = ASSET_PREFIX + ":"; + public static final String PREFIX = "micdoodle8."; + public static final String GCDATAFOLDER = "../galacticraft/"; + + public static final int GEAR_ID_OXYGEN_MASK = 0; + public static final int GEAR_ID_OXYGEN_GEAR = 1; + public static final int GEAR_ID_OXYGEN_TANK_LIGHT = 2; + public static final int GEAR_ID_OXYGEN_TANK_MEDIUM = 3; + public static final int GEAR_ID_OXYGEN_TANK_HEAVY = 4; + public static final int GEAR_ID_OXYGEN_TANK_INFINITE = 5; + public static final int GEAR_ID_THERMAL_PADDING_T1_HELMET = 6; + public static final int GEAR_ID_THERMAL_PADDING_T1_CHESTPLATE = 7; + public static final int GEAR_ID_THERMAL_PADDING_T1_LEGGINGS = 8; + public static final int GEAR_ID_THERMAL_PADDING_T1_BOOTS = 9; + public static final int GEAR_ID_THERMAL_PADDING_T2_HELMET = 10; + public static final int GEAR_ID_THERMAL_PADDING_T2_CHESTPLATE = 11; + public static final int GEAR_ID_THERMAL_PADDING_T2_LEGGINGS = 12; + public static final int GEAR_ID_THERMAL_PADDING_T2_BOOTS = 13; + public static final int GEAR_ID_PARACHUTE = 14; + public static final int GEAR_ID_FREQUENCY_MODULE = 15; + public static final int GEAR_ID_SHIELD_CONTROLLER = 16; + + /** + * 128 squared (8 chunks range)
+ * used for small + high frequency TESR tiles like Fluid Pipes + */ + public static final double RENDERDISTANCE_SHORT = 16384D; + /** + * 256 squared (16 chunks range)
+ * used for standard block-sized TESR tiles like Fluid Tanks or Treasure Chests,
+ * also heavy render burden large tiles like the Dish and Display Screen + */ + public static final double RENDERDISTANCE_MEDIUM = 65536D; + /** + * 512 squared (32 chunks max range)
+ * used for uncommon, large or extra bright TESR tiles like Oxygen Bubble Distributors, Solar Panels or Panel Lighting + */ + public static final double RENDERDISTANCE_LONG = 262144D; + + public static final float RADIANS_TO_DEGREES = 180F / 3.1415927F; + public static final double RADIANS_TO_DEGREES_D = 180D / Math.PI; + + public static final float twoPI = (float) Math.PI * 2F; + public static final float halfPI = (float) Math.PI / 2F; + + public static final String PERMISSION_CREATE_STATION = "galacticraft.station.create"; +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCBlocks.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCBlocks.java new file mode 100644 index 00000000..4d266488 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCBlocks.java @@ -0,0 +1,664 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.registries.IForgeRegistry; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.core.blocks.BlockAirLockFrame; +import micdoodle8.mods.galacticraft.core.blocks.BlockAirLockWall; +import micdoodle8.mods.galacticraft.core.blocks.BlockAluminumWire; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasic; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon.EnumBlockBasicMoon; +import micdoodle8.mods.galacticraft.core.blocks.BlockBossSpawner; +import micdoodle8.mods.galacticraft.core.blocks.BlockBreathableAir; +import micdoodle8.mods.galacticraft.core.blocks.BlockBrightAir; +import micdoodle8.mods.galacticraft.core.blocks.BlockBrightBreathableAir; +import micdoodle8.mods.galacticraft.core.blocks.BlockBrightLamp; +import micdoodle8.mods.galacticraft.core.blocks.BlockCargoLoader; +import micdoodle8.mods.galacticraft.core.blocks.BlockCheese; +import micdoodle8.mods.galacticraft.core.blocks.BlockCompactNasaWorkbench; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedDetector; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedRedstone; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedRepeater; +import micdoodle8.mods.galacticraft.core.blocks.BlockCrafting; +import micdoodle8.mods.galacticraft.core.blocks.BlockDish; +import micdoodle8.mods.galacticraft.core.blocks.BlockDoubleSlabGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockEmergencyBox; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.blocks.BlockFallenMeteor; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidPipe; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidTank; +import micdoodle8.mods.galacticraft.core.blocks.BlockFuelLoader; +import micdoodle8.mods.galacticraft.core.blocks.BlockGlowstoneTorch; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPad; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPadFull; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine3; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine4; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineTiered; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockNasaWorkbench; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCollector; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCompressor; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDetector; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDistributor; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenSealer; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.blocks.BlockParaChest; +import micdoodle8.mods.galacticraft.core.blocks.BlockPlatform; +import micdoodle8.mods.galacticraft.core.blocks.BlockRefinery; +import micdoodle8.mods.galacticraft.core.blocks.BlockScreen; +import micdoodle8.mods.galacticraft.core.blocks.BlockSlabGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockSolar; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass.GlassFrame; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass.GlassType; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceStationBase; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpinThruster; +import micdoodle8.mods.galacticraft.core.blocks.BlockStairsGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockTelemetry; +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import micdoodle8.mods.galacticraft.core.blocks.BlockWallGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.ItemBlockAirLock; +import micdoodle8.mods.galacticraft.core.items.ItemBlockAluminumWire; +import micdoodle8.mods.galacticraft.core.items.ItemBlockArclamp; +import micdoodle8.mods.galacticraft.core.items.ItemBlockBase; +import micdoodle8.mods.galacticraft.core.items.ItemBlockCargoLoader; +import micdoodle8.mods.galacticraft.core.items.ItemBlockCheese; +import micdoodle8.mods.galacticraft.core.items.ItemBlockCreativeGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBlockEmergencyBox; +import micdoodle8.mods.galacticraft.core.items.ItemBlockEnclosed; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGlassGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockLandingPad; +import micdoodle8.mods.galacticraft.core.items.ItemBlockMachine; +import micdoodle8.mods.galacticraft.core.items.ItemBlockMoon; +import micdoodle8.mods.galacticraft.core.items.ItemBlockNasaWorkbench; +import micdoodle8.mods.galacticraft.core.items.ItemBlockOxygenCompressor; +import micdoodle8.mods.galacticraft.core.items.ItemBlockPanel; +import micdoodle8.mods.galacticraft.core.items.ItemBlockSlabGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockSolar; +import micdoodle8.mods.galacticraft.core.items.ItemBlockThruster; +import micdoodle8.mods.galacticraft.core.items.ItemBlockWallGC; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.StackSorted; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.Ordering; + +public class GCBlocks +{ + //@noformat + public static Block breatheableAir; + public static Block brightAir; + public static Block brightBreatheableAir; + public static Block brightLamp; + public static Block treasureChestTier1; + public static Block landingPad; + public static Block unlitTorch; + public static Block unlitTorchLit; + public static Block oxygenDistributor; + public static Block oxygenPipe; + public static Block oxygenPipePull; + public static Block oxygenCollector; + public static Block oxygenCompressor; + public static Block oxygenSealer; + public static Block oxygenDetector; + public static Block nasaWorkbench; + public static Block compactNasaWorkbench; + public static Block fallenMeteor; + public static Block basicBlock; + public static Block airLockFrame; + public static Block airLockSeal; + public static BlockSpaceGlass spaceGlassClear; + public static BlockSpaceGlass spaceGlassVanilla; + public static BlockSpaceGlass spaceGlassStrong; + public static BlockSpaceGlass spaceGlassTinClear; + public static BlockSpaceGlass spaceGlassTinVanilla; + public static BlockSpaceGlass spaceGlassTinStrong; + public static Block crafting; + public static Block crudeOil; + public static Block fuel; + public static Block refinery; + public static Block fuelLoader; + public static Block landingPadFull; + public static Block spaceStationBase; + public static Block fakeBlock; + public static Block sealableBlock; + public static Block cargoLoader; + public static Block parachest; + public static Block solarPanel; + public static Block radioTelescope; + public static Block machineBase; + public static Block machineBase2; + public static Block machineBase3; + public static Block machineBase4; + public static Block machineTiered; + public static Block aluminumWire; + public static Block panelLighting; + public static Block glowstoneTorch; + public static Block blockMoon; + public static Block cheeseBlock; + public static Block spinThruster; + public static Block screen; + public static Block telemetry; + public static Block fluidTank; + public static Block bossSpawner; + public static Block slabGCHalf; + public static Block slabGCDouble; + public static Block tinStairs1; + public static Block tinStairs2; + public static Block moonStoneStairs; + public static Block moonBricksStairs; + public static Block wallGC; + public static Block concealedRedstone; + public static Block concealedRepeater_Powered; + public static Block concealedRepeater_Unpowered; + public static Block concealedDetector; + public static Block platform; + public static Block emergencyBox; + public static Block grating; + public static Block gratingWater; + public static Block gratingLava; + // @format + + public static final Material machine = new Material(MapColor.IRON); + + public static ArrayList hiddenBlocks = new ArrayList<>(); + public static ArrayList otherModTorchesLit = new ArrayList<>(); + public static ArrayList otherModTorchesUnlit = new ArrayList<>(); + + public static Map> sortMapBlocks = Maps.newHashMap(); + public static HashMap itemChanges = new HashMap<>(4, 1.0F); + + public static void initBlocks() + { + GCBlocks.breatheableAir = new BlockBreathableAir("breatheable_air"); + GCBlocks.brightAir = new BlockBrightAir("bright_air"); + GCBlocks.brightBreatheableAir = new BlockBrightBreathableAir("bright_breathable_air"); + GCBlocks.brightLamp = new BlockBrightLamp("arclamp"); + GCBlocks.treasureChestTier1 = new BlockTier1TreasureChest("treasure_chest"); + GCBlocks.landingPad = new BlockLandingPad("landing_pad"); + GCBlocks.landingPadFull = new BlockLandingPadFull("landing_pad_full"); + GCBlocks.unlitTorch = new BlockUnlitTorch(false, "unlit_torch"); + GCBlocks.unlitTorchLit = new BlockUnlitTorch(true, "unlit_torch_lit"); + GCBlocks.oxygenDistributor = new BlockOxygenDistributor("distributor"); + GCBlocks.oxygenPipe = new BlockFluidPipe("fluid_pipe", BlockFluidPipe.EnumPipeMode.NORMAL); + GCBlocks.oxygenPipePull = new BlockFluidPipe("fluid_pipe_pull", BlockFluidPipe.EnumPipeMode.PULL); + GCBlocks.oxygenCollector = new BlockOxygenCollector("collector"); + GCBlocks.nasaWorkbench = new BlockNasaWorkbench("rocket_workbench"); + GCBlocks.compactNasaWorkbench = new BlockCompactNasaWorkbench("compact_workbench"); + GCBlocks.fallenMeteor = new BlockFallenMeteor("fallen_meteor"); + GCBlocks.basicBlock = new BlockBasic("basic_block_core"); + GCBlocks.airLockFrame = new BlockAirLockFrame("air_lock_frame"); + GCBlocks.airLockSeal = new BlockAirLockWall("air_lock_seal"); + // These glass types have to be registered as 6 separate blocks, + // - (a) to allow different coloring of each one and + // - (b) because the Forge + // MultiLayer custom model does not allow for different textures to be set for different variants + GCBlocks.spaceGlassVanilla = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_vanilla", GlassType.VANILLA, GlassFrame.PLAIN, null).setHardness(0.3F).setResistance(3F); + GCBlocks.spaceGlassClear = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_clear", GlassType.CLEAR, GlassFrame.PLAIN, null).setHardness(0.3F).setResistance(3F); + GCBlocks.spaceGlassStrong = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_strong", GlassType.STRONG, GlassFrame.PLAIN, null).setHardness(4F).setResistance(35F); + GCBlocks.spaceGlassTinVanilla = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_vanilla_tin", GlassType.VANILLA, GlassFrame.TIN_DECO, GCBlocks.spaceGlassVanilla).setHardness(0.3F).setResistance(4F); + GCBlocks.spaceGlassTinClear = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_clear_tin", GlassType.CLEAR, GlassFrame.TIN_DECO, GCBlocks.spaceGlassClear).setHardness(0.3F).setResistance(4F); + GCBlocks.spaceGlassTinStrong = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_strong_tin", GlassType.STRONG, GlassFrame.TIN_DECO, GCBlocks.spaceGlassStrong).setHardness(4F).setResistance(35F); + GCBlocks.crafting = new BlockCrafting("magnetic_table"); + GCBlocks.refinery = new BlockRefinery("refinery"); + GCBlocks.oxygenCompressor = new BlockOxygenCompressor(false, "oxygen_compressor"); + GCBlocks.fuelLoader = new BlockFuelLoader("fuel_loader"); + GCBlocks.spaceStationBase = new BlockSpaceStationBase("space_station_base"); + GCBlocks.fakeBlock = new BlockMulti("block_multi"); + GCBlocks.oxygenSealer = new BlockOxygenSealer("sealer"); + GCBlocks.sealableBlock = new BlockEnclosed("enclosed"); + GCBlocks.oxygenDetector = new BlockOxygenDetector("oxygen_detector"); + GCBlocks.cargoLoader = new BlockCargoLoader("cargo"); + GCBlocks.parachest = new BlockParaChest("parachest"); + GCBlocks.solarPanel = new BlockSolar("solar"); + GCBlocks.radioTelescope = new BlockDish("dishbase"); + GCBlocks.machineBase = new BlockMachine("machine"); + GCBlocks.machineBase2 = new BlockMachine2("machine2"); + GCBlocks.machineBase3 = new BlockMachine3("machine3"); + GCBlocks.machineBase4 = new BlockMachine4("machine4"); + GCBlocks.machineTiered = new BlockMachineTiered("machine_tiered"); + GCBlocks.aluminumWire = new BlockAluminumWire("aluminum_wire"); + GCBlocks.panelLighting = new BlockPanelLighting("panel_lighting"); + GCBlocks.glowstoneTorch = new BlockGlowstoneTorch("glowstone_torch"); + GCBlocks.blockMoon = new BlockBasicMoon("basic_block_moon"); + GCBlocks.cheeseBlock = new BlockCheese("cheese"); + GCBlocks.spinThruster = new BlockSpinThruster("spin_thruster"); + GCBlocks.screen = new BlockScreen("view_screen"); + GCBlocks.telemetry = new BlockTelemetry("telemetry"); + GCBlocks.fluidTank = new BlockFluidTank("fluid_tank"); + GCBlocks.bossSpawner = new BlockBossSpawner("boss_spawner"); + GCBlocks.slabGCHalf = new BlockSlabGC("slab_gc_half", Material.ROCK); + GCBlocks.slabGCDouble = new BlockDoubleSlabGC("slab_gc_double", Material.ROCK); + GCBlocks.tinStairs1 = new BlockStairsGC("tin_stairs_1", basicBlock.getDefaultState().withProperty(BlockBasic.BASIC_TYPE, BlockBasic.EnumBlockBasic.ALUMINUM_DECORATION_BLOCK_0)).setHardness(2.0F); + GCBlocks.tinStairs2 = new BlockStairsGC("tin_stairs_2", basicBlock.getDefaultState().withProperty(BlockBasic.BASIC_TYPE, BlockBasic.EnumBlockBasic.ALUMINUM_DECORATION_BLOCK_1)).setHardness(2.0F); + GCBlocks.moonStoneStairs = new BlockStairsGC("moon_stairs_stone", blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_STONE)).setHardness(1.5F); + GCBlocks.moonBricksStairs = new BlockStairsGC("moon_stairs_brick", blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_DUNGEON_BRICK)).setHardness(4.0F); + GCBlocks.wallGC = new BlockWallGC("wall_gc"); + GCBlocks.concealedRedstone = new BlockConcealedRedstone("concealed_redstone"); + GCBlocks.concealedRepeater_Powered = new BlockConcealedRepeater("concealed_repeater_pow", true); + GCBlocks.concealedRepeater_Unpowered = new BlockConcealedRepeater("concealed_repeater", false); + GCBlocks.concealedDetector = new BlockConcealedDetector("concealed_detector"); + GCBlocks.platform = new BlockPlatform("platform"); + GCBlocks.emergencyBox = new BlockEmergencyBox("emergency_box"); + GCBlocks.grating = new BlockGrating("grating", ConfigManagerCore.allowLiquidGratings ? Material.CARPET : Material.IRON); + GCBlocks.gratingWater = new BlockGrating("grating1", Material.WATER); + GCBlocks.gratingLava = new BlockGrating("grating2", Material.LAVA).setLightLevel(1.0F); + + // Hide certain items from NEI + GCBlocks.hiddenBlocks.add(GCBlocks.airLockSeal); + GCBlocks.hiddenBlocks.add(GCBlocks.oxygenPipePull); + GCBlocks.hiddenBlocks.add(GCBlocks.unlitTorch); + GCBlocks.hiddenBlocks.add(GCBlocks.unlitTorchLit); + GCBlocks.hiddenBlocks.add(GCBlocks.landingPadFull); + GCBlocks.hiddenBlocks.add(GCBlocks.spaceStationBase); + GCBlocks.hiddenBlocks.add(GCBlocks.bossSpawner); + GCBlocks.hiddenBlocks.add(GCBlocks.slabGCDouble); + GCBlocks.hiddenBlocks.add(GCBlocks.concealedRepeater_Powered); + + // Register blocks before register ores, so that the ItemStack picks up + // the correct item + GCBlocks.registerBlocks(); + GCBlocks.setHarvestLevels(); + } + + public static void oreDictRegistrations() + { + OreDictionary.registerOre("oreCopper", new ItemStack(GCBlocks.basicBlock, 1, 5)); + OreDictionary.registerOre("oreCopper", new ItemStack(GCBlocks.blockMoon, 1, 0)); + OreDictionary.registerOre("oreTin", new ItemStack(GCBlocks.basicBlock, 1, 6)); + OreDictionary.registerOre("oreTin", new ItemStack(GCBlocks.blockMoon, 1, 1)); + OreDictionary.registerOre("oreAluminum", new ItemStack(GCBlocks.basicBlock, 1, 7)); + OreDictionary.registerOre("oreAluminium", new ItemStack(GCBlocks.basicBlock, 1, 7)); + OreDictionary.registerOre("oreNaturalAluminum", new ItemStack(GCBlocks.basicBlock, 1, 7)); + OreDictionary.registerOre("oreSilicon", new ItemStack(GCBlocks.basicBlock, 1, 8)); + OreDictionary.registerOre("oreCheese", new ItemStack(GCBlocks.blockMoon, 1, 2)); + + OreDictionary.registerOre("blockCopper", new ItemStack(GCBlocks.basicBlock, 1, 9)); + OreDictionary.registerOre("blockTin", new ItemStack(GCBlocks.basicBlock, 1, 10)); + OreDictionary.registerOre("blockAluminum", new ItemStack(GCBlocks.basicBlock, 1, 11)); + OreDictionary.registerOre("blockAluminium", new ItemStack(GCBlocks.basicBlock, 1, 11)); + OreDictionary.registerOre("blockSilicon", new ItemStack(GCBlocks.basicBlock, 1, 13)); + + OreDictionary.registerOre("turfMoon", new ItemStack(GCBlocks.blockMoon, 1, EnumBlockBasicMoon.MOON_TURF.getMeta())); + OreDictionary.registerOre("itemCharcoal", new ItemStack(Items.COAL, 1, 1)); + OreDictionary.registerOre("itemCoal", new ItemStack(Items.COAL, 1)); + } + + public static void finalizeSort() + { + List itemOrderListBlocks = Lists.newArrayList(); + for (EnumSortCategoryBlock type : EnumSortCategoryBlock.values()) + { + if (type == EnumSortCategoryBlock.EGG) + continue; + List stackSorteds = sortMapBlocks.get(type); + if (stackSorteds != null) + { + itemOrderListBlocks.addAll(stackSorteds); + } + else + { + System.out.println("ERROR: null sort stack: " + type.toString()); + } + } + Comparator tabSorterBlocks = Ordering.explicit(itemOrderListBlocks).onResultOf(input -> new StackSorted(input.getItem(), input.getItemDamage())); + GalacticraftCore.galacticraftBlocksTab.setTabSorter(tabSorterBlocks); + } + + private static void setHarvestLevel(Block block, String toolClass, int level, int meta) + { + block.setHarvestLevel(toolClass, level, block.getStateFromMeta(meta)); + } + + public static void doOtherModsTorches(IForgeRegistry registry) + { + BlockUnlitTorch torch; + BlockUnlitTorch torchLit; + + if (CompatibilityManager.isTConstructLoaded) + { + Block modTorch = null; + try + { + // tconstruct.world.TinkerWorld.stoneTorch + Class clazz = Class.forName("slimeknights.tconstruct.gadgets.TinkerGadgets"); + modTorch = (Block) clazz.getDeclaredField("stoneTorch").get(null); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (modTorch != null) + { + torch = new BlockUnlitTorch(false, "unlit_torch_stone"); + torchLit = new BlockUnlitTorch(true, "unlit_torch_stone_lit"); + GCBlocks.hiddenBlocks.add(torch); + GCBlocks.hiddenBlocks.add(torchLit); + GCBlocks.otherModTorchesUnlit.add(torch); + GCBlocks.otherModTorchesLit.add(torchLit); + registerBlock(torch, ItemBlockGC.class); + registerBlock(torchLit, ItemBlockGC.class); + registry.register(torch); + registry.register(torchLit); + BlockUnlitTorch.register(torch, torchLit, modTorch); + GalacticraftCore.logger.info("Galacticraft: activating Tinker's Construct compatibility."); + } + } + } + + public static void registerFuel() + { + GCBlocks.fuel = new BlockFluidGC(GCFluids.fluidFuel, "fuel"); + ((BlockFluidGC) GCBlocks.fuel).setQuantaPerBlock(3); + GCBlocks.fuel.setTranslationKey("fuel"); + GCBlocks.registerBlock(GCBlocks.fuel, ItemBlockGC.class); + } + + public static void registerOil() + { + GCBlocks.crudeOil = new BlockFluidGC(GCFluids.fluidOil, "oil"); + ((BlockFluidGC) GCBlocks.crudeOil).setQuantaPerBlock(3); + GCBlocks.crudeOil.setTranslationKey("crude_oil_still"); + GCBlocks.registerBlock(GCBlocks.crudeOil, ItemBlockGC.class); + } + + public static void setHarvestLevels() + { + setHarvestLevel(GCBlocks.basicBlock, "pickaxe", 1, 5); // Copper ore + setHarvestLevel(GCBlocks.basicBlock, "pickaxe", 1, 6); // Tin ore + setHarvestLevel(GCBlocks.basicBlock, "pickaxe", 1, 7); // Aluminium ore + setHarvestLevel(GCBlocks.basicBlock, "pickaxe", 2, 8); // Silicon ore + setHarvestLevel(GCBlocks.fallenMeteor, "pickaxe", 3, 0); + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 1, 0); // Copper ore + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 1, 1); // Tin ore + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 1, 2); // Cheese ore + setHarvestLevel(GCBlocks.blockMoon, "shovel", 0, 3); // Moon dirt + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 0, 4); // Moon rock + + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 1); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 2); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 3, 3); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 4); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 3, 5); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 6); + + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 1); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 2); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 3, 3); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 4); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 3, 5); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 6); + + setHarvestLevel(GCBlocks.tinStairs1, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.tinStairs1, "pickaxe", 1, 0); + + setHarvestLevel(GCBlocks.moonStoneStairs, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.moonBricksStairs, "pickaxe", 3, 0); + + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 1, 1); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 1, 2); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 3, 3); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 0, 4); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 3, 5); + + setHarvestLevel(GCBlocks.wallGC, "shovel", 0, 5); + + // Moon dungeon brick (actually unharvestable) + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 3, 14); + } + + public static void register(String modid, Block block, Class itemClass, Object... itemCtorArgs) + { + String key = block.getTranslationKey().substring(5); + ResourceLocation resourceLocation = new ResourceLocation(modid, key); + if (block.getRegistryName() == null) + { + block.setRegistryName(resourceLocation); + } + GCCoreUtil.registerGalacticraftBlock(key, block); + + if (itemClass != null) + { + ItemBlock item = null; + Class[] ctorArgClasses = new Class[itemCtorArgs.length + 1]; + ctorArgClasses[0] = Block.class; + for (int idx = 1; idx < ctorArgClasses.length; idx++) + { + ctorArgClasses[idx] = itemCtorArgs[idx - 1].getClass(); + } + + try + { + Constructor constructor = itemClass.getConstructor(ctorArgClasses); + item = constructor.newInstance(ObjectArrays.concat(block, itemCtorArgs)); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (item != null) + { + GCCoreUtil.registerGalacticraftItem(key, item); + if (item.getRegistryName() == null) + { + item.setRegistryName(resourceLocation); + } + } + } + + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("Use Your Own Registry") + public static void registerBlock(Block block, Class itemClass, Object... itemCtorArgs) + { + String name = block.getTranslationKey().substring(5); + if (block.getRegistryName() == null) + { + block.setRegistryName(name); + } + GCCoreUtil.registerGalacticraftBlock(name, block); + + if (itemClass != null) + { + ItemBlock item = null; + Class[] ctorArgClasses = new Class[itemCtorArgs.length + 1]; + ctorArgClasses[0] = Block.class; + for (int idx = 1; idx < ctorArgClasses.length; idx++) + { + ctorArgClasses[idx] = itemCtorArgs[idx - 1].getClass(); + } + + try + { + Constructor constructor = itemClass.getConstructor(ctorArgClasses); + item = constructor.newInstance(ObjectArrays.concat(block, itemCtorArgs)); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (item != null) + { + GCCoreUtil.registerGalacticraftItem(name, item); + if (item.getRegistryName() == null) + { + item.setRegistryName(name); + } + } + } + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("Use Your Own Registry") + public static void registerBlocks(IForgeRegistry registry) + { + for (Block block : GalacticraftCore.blocksList) + { + registry.register(block); + } + + // Complete registration of various types of torches + BlockUnlitTorch.register((BlockUnlitTorch) GCBlocks.unlitTorch, (BlockUnlitTorch) GCBlocks.unlitTorchLit, Blocks.TORCH); + } + + public static boolean registeringSorted = false; + + public static void registerSorted(Block block) + { + if (block instanceof ISortableBlock) + { + Item item = Item.getItemFromBlock(block); + if (item == Items.AIR) + { + return; + } + ISortableBlock sortableBlock = (ISortableBlock) block; + NonNullList blocks = NonNullList.create(); + registeringSorted = true; + block.getSubBlocks(null, blocks); + registeringSorted = false; + if (blocks.isEmpty()) + { + blocks.add(new ItemStack(block)); + } + for (ItemStack stack : blocks) + { + EnumSortCategoryBlock categoryBlock = sortableBlock.getCategory(stack.getItemDamage()); + if (!sortMapBlocks.containsKey(categoryBlock)) + { + sortMapBlocks.put(categoryBlock, new ArrayList<>()); + } + sortMapBlocks.get(categoryBlock).add(new StackSorted(stack.getItem(), stack.getItemDamage())); + } + } + else if (block.getCreativeTab() == GalacticraftCore.galacticraftBlocksTab) + { + throw new RuntimeException(block.getClass() + " must inherit " + ISortableBlock.class.getSimpleName() + "!"); + } + } + + private static void registerBlock(Block block, Class itemClass) + { + register(Constants.MOD_ID_CORE, block, itemClass); + } + + public static void registerBlocks() + { + registerBlock(GCBlocks.landingPad, ItemBlockLandingPad.class); + registerBlock(GCBlocks.landingPadFull, ItemBlockGC.class); + registerBlock(GCBlocks.unlitTorch, ItemBlockGC.class); + registerBlock(GCBlocks.unlitTorchLit, ItemBlockGC.class); + registerBlock(GCBlocks.breatheableAir, null); + registerBlock(GCBlocks.brightAir, null); + registerBlock(GCBlocks.brightBreatheableAir, null); + registerBlock(GCBlocks.oxygenDistributor, ItemBlockDesc.class); + registerBlock(GCBlocks.oxygenCollector, ItemBlockDesc.class); + registerBlock(GCBlocks.oxygenCompressor, ItemBlockOxygenCompressor.class); + registerBlock(GCBlocks.oxygenSealer, ItemBlockDesc.class); + registerBlock(GCBlocks.oxygenDetector, ItemBlockDesc.class); + registerBlock(GCBlocks.aluminumWire, ItemBlockAluminumWire.class); + registerBlock(GCBlocks.oxygenPipe, ItemBlockDesc.class); + registerBlock(GCBlocks.oxygenPipePull, ItemBlockDesc.class); + registerBlock(GCBlocks.refinery, ItemBlockDesc.class); + registerBlock(GCBlocks.fuelLoader, ItemBlockDesc.class); + registerBlock(GCBlocks.cargoLoader, ItemBlockCargoLoader.class); + registerBlock(GCBlocks.nasaWorkbench, ItemBlockNasaWorkbench.class); + registerBlock(GCBlocks.compactNasaWorkbench, ItemBlockDesc.class); + registerBlock(GCBlocks.basicBlock, ItemBlockBase.class); + registerBlock(GCBlocks.airLockFrame, ItemBlockAirLock.class); + registerBlock(GCBlocks.airLockSeal, ItemBlockGC.class); + registerBlock(GCBlocks.spaceGlassClear, ItemBlockGlassGC.class); + registerBlock(GCBlocks.spaceGlassVanilla, ItemBlockGlassGC.class); + registerBlock(GCBlocks.spaceGlassStrong, ItemBlockGlassGC.class); + registerBlock(GCBlocks.spaceGlassTinClear, null); // The corresponding item is already registered + registerBlock(GCBlocks.spaceGlassTinVanilla, null); // The corresponding item is already registered + registerBlock(GCBlocks.spaceGlassTinStrong, null); // The corresponding item is already registered + registerBlock(GCBlocks.crafting, ItemBlockDesc.class); + registerBlock(GCBlocks.sealableBlock, ItemBlockEnclosed.class); + registerBlock(GCBlocks.spaceStationBase, ItemBlockGC.class); + registerBlock(GCBlocks.fakeBlock, null); + registerBlock(GCBlocks.parachest, ItemBlockDesc.class); + registerBlock(GCBlocks.solarPanel, ItemBlockSolar.class); + registerBlock(GCBlocks.radioTelescope, ItemBlockGC.class); + registerBlock(GCBlocks.machineBase, ItemBlockMachine.class); + registerBlock(GCBlocks.machineBase2, ItemBlockMachine.class); + registerBlock(GCBlocks.machineBase3, ItemBlockMachine.class); + registerBlock(GCBlocks.machineTiered, ItemBlockMachine.class); + registerBlock(GCBlocks.machineBase4, ItemBlockMachine.class); + registerBlock(GCBlocks.panelLighting, ItemBlockPanel.class); + registerBlock(GCBlocks.glowstoneTorch, ItemBlockDesc.class); + registerBlock(GCBlocks.fallenMeteor, ItemBlockDesc.class); + registerBlock(GCBlocks.blockMoon, ItemBlockMoon.class); + registerBlock(GCBlocks.cheeseBlock, ItemBlockCheese.class); + registerBlock(GCBlocks.spinThruster, ItemBlockThruster.class); + registerBlock(GCBlocks.screen, ItemBlockDesc.class); + registerBlock(GCBlocks.telemetry, ItemBlockDesc.class); + registerBlock(GCBlocks.brightLamp, ItemBlockArclamp.class); + registerBlock(GCBlocks.treasureChestTier1, ItemBlockDesc.class); + registerBlock(GCBlocks.fluidTank, ItemBlockDesc.class); + registerBlock(GCBlocks.bossSpawner, ItemBlockGC.class); + registerBlock(GCBlocks.tinStairs1, ItemBlockGC.class); + registerBlock(GCBlocks.tinStairs2, ItemBlockGC.class); + registerBlock(GCBlocks.moonStoneStairs, ItemBlockGC.class); + registerBlock(GCBlocks.moonBricksStairs, ItemBlockGC.class); + registerBlock(GCBlocks.wallGC, ItemBlockWallGC.class); + registerBlock(GCBlocks.slabGCHalf, ItemBlockSlabGC.class, GCBlocks.slabGCHalf, GCBlocks.slabGCDouble); + registerBlock(GCBlocks.slabGCDouble, ItemBlockSlabGC.class, GCBlocks.slabGCHalf, GCBlocks.slabGCDouble); + registerBlock(GCBlocks.concealedRedstone, ItemBlockGC.class); + registerBlock(GCBlocks.concealedRepeater_Powered, ItemBlockGC.class); + registerBlock(GCBlocks.concealedRepeater_Unpowered, ItemBlockGC.class); + registerBlock(GCBlocks.concealedDetector, ItemBlockCreativeGC.class); + registerBlock(GCBlocks.platform, ItemBlockDesc.class); + registerBlock(GCBlocks.emergencyBox, ItemBlockEmergencyBox.class); + registerBlock(GCBlocks.grating, ItemBlockGC.class); + registerBlock(GCBlocks.gratingWater, null); + registerBlock(GCBlocks.gratingLava, null); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCFluids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCFluids.java new file mode 100644 index 00000000..dce3458a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCFluids.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.BehaviorProjectileDispense; +import net.minecraft.dispenser.IBehaviorDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.dispenser.IPosition; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import micdoodle8.mods.galacticraft.core.blocks.MaterialOleaginous; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.items.ItemBucketGC; +import micdoodle8.mods.galacticraft.core.items.ItemTier1Rocket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemTier3Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +import buildcraft.api.fuels.BuildcraftFuelRegistry; +import buildcraft.api.mj.MjAPI; + +public class GCFluids +{ + + public static Fluid fluidOil; + public static Fluid fluidFuel; + public static Fluid fluidOxygenGas; + public static Fluid fluidHydrogenGas; + public static Material materialOil = new MaterialOleaginous(MapColor.BROWN); + + public static void registerFluids() + { + fluidOxygenGas = registerFluid("oxygen", 1, 13, 295, true, "oxygen_gas"); + fluidHydrogenGas = registerFluid("hydrogen", 1, 1, 295, true, "hydrogen_gas"); + } + + //TODO lets just rename our fluids to a more unique name so this isn't a thing anymore + public static void registerOilandFuel() + { + // NOTE: the way this operates will depend on the order in which + // different mods initialize (normally alphabetical order) + // Galacticraft can handle things OK if another mod registers oil or + // fuel first. The other mod may not be so happy if GC registers oil or + // fuel first. + + String oilID = ConfigManagerCore.useOldOilFluidID ? "oilgc" : "oil"; + String fuelID = ConfigManagerCore.useOldFuelFluidID ? "fuelgc" : "fuel"; + + // Oil: + if (!FluidRegistry.isFluidRegistered(oilID)) + { + ResourceLocation flowingOil = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/oil_flow"); + ResourceLocation stillOil = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/oil_still"); + Fluid gcFluidOil = new Fluid(oilID, stillOil, flowingOil).setDensity(800).setViscosity(1500); + FluidRegistry.registerFluid(gcFluidOil); + } + else + { + GalacticraftCore.logger.info("Galacticraft oil is not default, issues may occur."); + } + + fluidOil = FluidRegistry.getFluid(oilID); + + if (fluidOil.getBlock() == null) + { + GCBlocks.registerOil(); + fluidOil.setBlock(GCBlocks.crudeOil); + } + else + { + GCBlocks.crudeOil = fluidOil.getBlock(); + } + + if (GCBlocks.crudeOil != null && !FluidRegistry.getBucketFluids().contains(fluidOil)) + { + // Create a Universal Bucket AS WELL AS our type, this is needed to pull oil out of other mods tanks + FluidRegistry.addBucketForFluid(GCFluids.fluidOil); + GCItems.bucketOil = new ItemBucketGC(GCBlocks.crudeOil, fluidOil); + GCItems.bucketOil.setTranslationKey("bucket_oil"); + GCItems.registerItem(GCItems.bucketOil); + EventHandlerGC.bucketList.put(GCBlocks.crudeOil, GCItems.bucketOil); + } + + // Fuel: + if (!FluidRegistry.isFluidRegistered(fuelID)) + { + ResourceLocation flowingFuel = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/fuel_flow"); + ResourceLocation stillFuel = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/fuel_still"); + Fluid gcFluidFuel = new Fluid(fuelID, stillFuel, flowingFuel).setDensity(400).setViscosity(900); + FluidRegistry.registerFluid(gcFluidFuel); + } + else + { + GalacticraftCore.logger.info("Galacticraft fuel is not default, issues may occur."); + } + + fluidFuel = FluidRegistry.getFluid(fuelID); + + if (fluidFuel.getBlock() == null) + { + GCBlocks.registerFuel(); + GCFluids.fluidFuel.setBlock(GCBlocks.fuel); + } + else + { + GCBlocks.fuel = fluidFuel.getBlock(); + } + + if (GCBlocks.fuel != null && !FluidRegistry.getBucketFluids().contains(fluidFuel)) + { + // Create a Universal Bucket AS WELL AS our type, this is needed to pull oil out of other mods tanks + FluidRegistry.addBucketForFluid(GCFluids.fluidFuel); + GCItems.bucketFuel = new ItemBucketGC(GCBlocks.fuel, fluidFuel); + GCItems.bucketFuel.setTranslationKey("bucket_fuel"); + GCItems.registerItem(GCItems.bucketFuel); + EventHandlerGC.bucketList.put(GCBlocks.fuel, GCItems.bucketFuel); + } + } + + private static Fluid registerFluid(String fluidName, int density, int viscosity, int temperature, boolean gaseous, String fluidTexture) + { + Fluid returnFluid = FluidRegistry.getFluid(fluidName); + + if (returnFluid == null) + { + ResourceLocation texture = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/" + fluidTexture); + FluidRegistry.registerFluid(new Fluid(fluidName, texture, texture).setDensity(density).setViscosity(viscosity).setTemperature(temperature).setGaseous(gaseous)); + returnFluid = FluidRegistry.getFluid(fluidName); + } + else + { + returnFluid.setGaseous(gaseous); + } + + return returnFluid; + } + + public static void registerLegacyFluids() + { + // Register now any unregistered "oil", "fuel", "oilgc" and "fuelgc" + // fluids + // This is for legacy compatibility with any 'in the world' tanks and + // items filled in different GC versions or with different GC config + // In those cases, FluidUtil methods (and TileEntityRefinery) will + // attempt to fresh containers/tanks with the current fuel or oil type + ResourceLocation flowingOil = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/oil_flow"); + ResourceLocation flowingFuel = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/fuel_flow"); + ResourceLocation stillOil = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/oil_still"); + ResourceLocation stillFuel = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/fuel_still"); + if (!FluidRegistry.isFluidRegistered("oil")) + { + FluidRegistry.registerFluid(new Fluid("oil", stillOil, flowingOil).setDensity(800).setViscosity(1500)); + } + if (!FluidRegistry.isFluidRegistered("oilgc")) + { + FluidRegistry.registerFluid(new Fluid("oilgc", stillOil, flowingOil).setDensity(800).setViscosity(1500)); + } + if (!FluidRegistry.isFluidRegistered("fuel")) + { + FluidRegistry.registerFluid(new Fluid("fuel", stillFuel, flowingFuel).setDensity(400).setViscosity(900)); + } + if (!FluidRegistry.isFluidRegistered("fuelgc")) + { + FluidRegistry.registerFluid(new Fluid("fuelgc", stillFuel, flowingFuel).setDensity(400).setViscosity(900)); + } + } + + public static void registerDispenserBehaviours() + { + IBehaviorDispenseItem ibehaviordispenseitem = new BehaviorDefaultDispenseItem() + { + + private final BehaviorDefaultDispenseItem dispenseBehavior = new BehaviorDefaultDispenseItem(); + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + ItemBucketGC itembucket = (ItemBucketGC) stack.getItem(); + BlockPos blockpos = source.getBlockPos().offset(source.getBlockState().getValue(BlockDispenser.FACING)); + if (itembucket.tryPlaceContainedLiquid((EntityPlayer) null, source.getWorld(), blockpos)) + { + return new ItemStack(Items.BUCKET); + } + else + { + return this.dispenseBehavior.dispense(source, stack); + } + } + }; + if (GCItems.bucketFuel != null) + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(GCItems.bucketFuel, ibehaviordispenseitem); + } + if (GCItems.bucketOil != null) + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(GCItems.bucketOil, ibehaviordispenseitem); + } + if (MarsItems.bucketSludge != null) + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(MarsItems.bucketSludge, ibehaviordispenseitem); + } + if (VenusItems.bucketSulphuricAcid != null) + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(VenusItems.bucketSulphuricAcid, ibehaviordispenseitem); + } + + // The following code is for other objects, not liquids, but it's + // convenient to keep it all together + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(GCItems.meteorChunk, new BehaviorProjectileDispense() + { + + @Override + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stack) + { + EntityMeteorChunk meteor = new EntityMeteorChunk(worldIn); + meteor.setPosition(position.getX(), position.getY(), position.getZ()); + if (stack.getItemDamage() > 0) + { + meteor.setFire(20); + meteor.isHot = true; + } + meteor.canBePickedUp = 1; + return meteor; + } + + @Override + protected float getProjectileVelocity() + { + return 1.0F; + } + }); + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(GCItems.rocketTier1, new BehaviorDefaultDispenseItem() + { + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + BlockPos pos = source.getBlockPos().offset(source.getBlockState().getValue(BlockDispenser.FACING), 2); + IBlockState iblockstate = world.getBlockState(pos); + boolean rocketPlaced = false; + if (iblockstate.getBlock() == GCBlocks.landingPadFull && GCBlocks.landingPadFull.getMetaFromState(iblockstate) == 0) + { + float centerX = pos.getX() + 0.5F; + float centerY = pos.getY() + 0.4F; + float centerZ = pos.getZ() + 0.5F; + rocketPlaced = ItemTier1Rocket.placeRocketOnPad(stack, world, world.getTileEntity(pos), centerX, centerY, centerZ); + } + + if (rocketPlaced) + { + stack.splitStack(1); + } + return stack; + } + }); + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(MarsItems.rocketMars, new BehaviorDefaultDispenseItem() + { + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + BlockPos pos = source.getBlockPos().offset(source.getBlockState().getValue(BlockDispenser.FACING), 2); + IBlockState iblockstate = world.getBlockState(pos); + boolean rocketPlaced = false; + if (iblockstate.getBlock() == GCBlocks.landingPadFull && GCBlocks.landingPadFull.getMetaFromState(iblockstate) == 0) + { + float centerX = pos.getX() + 0.5F; + float centerY = pos.getY() + 0.4F; + float centerZ = pos.getZ() + 0.5F; + rocketPlaced = ItemTier2Rocket.placeRocketOnPad(stack, world, world.getTileEntity(pos), centerX, centerY, centerZ); + } + + if (rocketPlaced) + { + stack.splitStack(1); + } + return stack; + } + }); + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(AsteroidsItems.tier3Rocket, new BehaviorDefaultDispenseItem() + { + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + BlockPos pos = source.getBlockPos().offset(source.getBlockState().getValue(BlockDispenser.FACING), 2); + IBlockState iblockstate = world.getBlockState(pos); + boolean rocketPlaced = false; + if (iblockstate.getBlock() == GCBlocks.landingPadFull && GCBlocks.landingPadFull.getMetaFromState(iblockstate) == 0) + { + float centerX = pos.getX() + 0.5F; + float centerY = pos.getY() + 0.4F; + float centerZ = pos.getZ() + 0.5F; + rocketPlaced = ItemTier3Rocket.placeRocketOnPad(stack, world, world.getTileEntity(pos), centerX, centerY, centerZ); + } + + if (rocketPlaced) + { + stack.splitStack(1); + } + return stack; + } + }); + } + + public static void registerBCFuel() + { + BuildcraftFuelRegistry.fuel.addFuel(GCFluids.fluidFuel, 5 * MjAPI.MJ, 9000); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCItems.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCItems.java new file mode 100644 index 00000000..8f91b420 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCItems.java @@ -0,0 +1,405 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.Item.ToolMaterial; +import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.registries.IForgeRegistry; + +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemArmorGC; +import micdoodle8.mods.galacticraft.core.items.ItemAxeGC; +import micdoodle8.mods.galacticraft.core.items.ItemBase; +import micdoodle8.mods.galacticraft.core.items.ItemBasic; +import micdoodle8.mods.galacticraft.core.items.ItemBattery; +import micdoodle8.mods.galacticraft.core.items.ItemBatteryInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemBuggy; +import micdoodle8.mods.galacticraft.core.items.ItemBuggyMaterial; +import micdoodle8.mods.galacticraft.core.items.ItemCanister; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemCheese; +import micdoodle8.mods.galacticraft.core.items.ItemEmergencyKit; +import micdoodle8.mods.galacticraft.core.items.ItemFlag; +import micdoodle8.mods.galacticraft.core.items.ItemFood; +import micdoodle8.mods.galacticraft.core.items.ItemFuelCanister; +import micdoodle8.mods.galacticraft.core.items.ItemHoeGC; +import micdoodle8.mods.galacticraft.core.items.ItemIC2Compat; +import micdoodle8.mods.galacticraft.core.items.ItemKey; +import micdoodle8.mods.galacticraft.core.items.ItemMeteorChunk; +import micdoodle8.mods.galacticraft.core.items.ItemMeteoricIron; +import micdoodle8.mods.galacticraft.core.items.ItemMoon; +import micdoodle8.mods.galacticraft.core.items.ItemOilCanister; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenGear; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenMask; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.items.ItemPickaxeGC; +import micdoodle8.mods.galacticraft.core.items.ItemPreLaunchChecklist; +import micdoodle8.mods.galacticraft.core.items.ItemRocketEngineGC; +import micdoodle8.mods.galacticraft.core.items.ItemSchematic; +import micdoodle8.mods.galacticraft.core.items.ItemSensorGlasses; +import micdoodle8.mods.galacticraft.core.items.ItemSpadeGC; +import micdoodle8.mods.galacticraft.core.items.ItemSwordGC; +import micdoodle8.mods.galacticraft.core.items.ItemTier1Rocket; +import micdoodle8.mods.galacticraft.core.items.ItemUniversalWrench; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.StackSorted; +import micdoodle8.mods.galacticraft.core.wrappers.PartialCanister; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; + +import mezz.jei.api.ingredients.IIngredientBlacklist; + +public class GCItems +{ + //@noformat + public static Item oxTankLight; + public static Item oxTankMedium; + public static Item oxTankHeavy; + public static Item oxMask; + public static Item rocketTier1; + public static Item sensorGlasses; + public static Item sensorLens; + public static Item steelPickaxe; + public static Item steelAxe; + public static Item steelHoe; + public static Item steelSpade; + public static Item steelSword; + public static Item steelHelmet; + public static Item steelChestplate; + public static Item steelLeggings; + public static Item steelBoots; + public static Item canister; + public static Item oxygenVent; + public static Item oxygenFan; + public static Item oxygenConcentrator; + public static Item rocketEngine; + public static Item heavyPlatingTier1; + public static Item partNoseCone; + public static Item partFins; + public static Item buggy; + public static Item flag; + public static Item oxygenGear; + public static Item parachute; + public static Item canvas; + public static Item flagPole; + public static Item oilCanister; + public static Item fuelCanister; + public static Item oxygenCanisterInfinite; + public static Item schematic; + public static Item key; + public static Item partBuggy; + public static Item basicItem; + public static Item foodItem; + public static Item battery; + public static Item infiniteBatery; + public static Item meteorChunk; + public static Item wrench; + public static Item cheeseCurd; + public static Item meteoricIronRaw; + public static Item itemBasicMoon; + public static Item bucketOil; + public static Item bucketFuel; + public static Item prelaunchChecklist; + public static Item dungeonFinder; + public static Item ic2compat; + public static Item emergencyKit; + //@format + + public static ArmorMaterial ARMOR_SENSOR_GLASSES = EnumHelper.addArmorMaterial("SENSORGLASSES", "", 200, new int[] {0, 0, 0, 0}, 0, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 0.0F); + public static ArmorMaterial ARMOR_STEEL = EnumHelper.addArmorMaterial("steel", "", 30, new int[] {3, 6, 8, 3}, 9, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 1.0F); + public static ToolMaterial TOOL_STEEL = EnumHelper.addToolMaterial("steel", 3, 768, 5.0F, 2, 8); + + public static ArrayList hiddenItems = new ArrayList<>(); + public static LinkedList canisterTypes = new LinkedList<>(); + public static Map> sortMapItems = Maps.newHashMap(); + public static HashMap itemChanges = new HashMap<>(4, 1.0F); + + public static void initItems() + { + GCItems.oxTankLight = new ItemOxygenTank(1, "oxygen_tank_light_full"); + GCItems.oxTankMedium = new ItemOxygenTank(2, "oxygen_tank_med_full"); + GCItems.oxTankHeavy = new ItemOxygenTank(3, "oxygen_tank_heavy_full"); + GCItems.oxMask = new ItemOxygenMask("oxygen_mask"); + GCItems.rocketTier1 = new ItemTier1Rocket("rocket_t1"); + GCItems.sensorGlasses = new ItemSensorGlasses("sensor_glasses"); + GCItems.steelPickaxe = new ItemPickaxeGC("steel_pickaxe"); + GCItems.steelAxe = new ItemAxeGC("steel_axe"); + GCItems.steelHoe = new ItemHoeGC("steel_hoe"); + GCItems.steelSpade = new ItemSpadeGC("steel_shovel"); + GCItems.steelSword = new ItemSwordGC("steel_sword"); + GCItems.steelHelmet = new ItemArmorGC(EntityEquipmentSlot.HEAD, "helmet"); + GCItems.steelChestplate = new ItemArmorGC(EntityEquipmentSlot.CHEST, "chestplate"); + GCItems.steelLeggings = new ItemArmorGC(EntityEquipmentSlot.LEGS, "leggings"); + GCItems.steelBoots = new ItemArmorGC(EntityEquipmentSlot.FEET, "boots"); + GCItems.canister = new ItemCanister("canister"); + GCItems.oxygenVent = new ItemBase("air_vent"); + GCItems.oxygenFan = new ItemBase("air_fan"); + GCItems.oxygenConcentrator = new ItemBase("oxygen_concentrator"); + GCItems.heavyPlatingTier1 = new ItemBase("heavy_plating").setSmeltingXP(1F); + GCItems.rocketEngine = new ItemRocketEngineGC("engine"); + GCItems.partFins = new ItemBase("rocket_fins"); + GCItems.partNoseCone = new ItemBase("nose_cone"); + GCItems.sensorLens = new ItemBase("sensor_lens"); + GCItems.buggy = new ItemBuggy("buggy"); + GCItems.flag = new ItemFlag("flag"); + GCItems.oxygenGear = new ItemOxygenGear("oxygen_gear"); + GCItems.parachute = new ItemParaChute("parachute"); + GCItems.canvas = new ItemBase("canvas"); + GCItems.oilCanister = new ItemOilCanister("oil_canister_partial"); + GCItems.fuelCanister = new ItemFuelCanister("fuel_canister_partial"); + GCItems.oxygenCanisterInfinite = new ItemCanisterOxygenInfinite("infinite_oxygen"); + GCItems.flagPole = new ItemBase("steel_pole"); + GCItems.schematic = new ItemSchematic("schematic"); + GCItems.key = new ItemKey("key"); + GCItems.partBuggy = new ItemBuggyMaterial("buggymat"); + GCItems.basicItem = new ItemBasic("basic_item"); + GCItems.foodItem = new ItemFood("food"); + GCItems.battery = new ItemBattery("battery"); + GCItems.infiniteBatery = new ItemBatteryInfinite("infinite_battery"); + GCItems.meteorChunk = new ItemMeteorChunk("meteor_chunk"); + GCItems.wrench = new ItemUniversalWrench("standard_wrench"); + GCItems.cheeseCurd = new ItemCheese(1, 0.1F, false); + GCItems.meteoricIronRaw = new ItemMeteoricIron("meteoric_iron_raw"); + GCItems.itemBasicMoon = new ItemMoon("item_basic_moon"); + GCItems.prelaunchChecklist = new ItemPreLaunchChecklist("prelaunch_checklist"); + GCItems.dungeonFinder = new ItemBase("dungeonfinder"); + GCItems.ic2compat = new ItemIC2Compat("ic2compat"); + GCItems.emergencyKit = new ItemEmergencyKit("emergency_kit"); + + GCItems.registerHarvestLevels(); + + GCItems.registerItems(); + GCItems.itemChanges.put(new ItemStack(GCItems.basicItem, 1, 15), new ItemStack(GCItems.foodItem, 1, 0)); + GCItems.itemChanges.put(new ItemStack(GCItems.basicItem, 1, 16), new ItemStack(GCItems.foodItem, 1, 1)); + GCItems.itemChanges.put(new ItemStack(GCItems.basicItem, 1, 17), new ItemStack(GCItems.foodItem, 1, 2)); + GCItems.itemChanges.put(new ItemStack(GCItems.basicItem, 1, 18), new ItemStack(GCItems.foodItem, 1, 3)); + + GalacticraftCore.proxy.registerCanister(new PartialCanister(GCItems.oilCanister, Constants.MOD_ID_CORE, "oil_canister_partial", 7)); + GalacticraftCore.proxy.registerCanister(new PartialCanister(GCItems.fuelCanister, Constants.MOD_ID_CORE, "fuel_canister_partial", 7)); + } + + public static void oreDictRegistrations() + { + for (int i = 0; i < ItemBasic.names.length; i++) + { + if (ItemBasic.names[i].contains("ingot") || ItemBasic.names[i].contains("compressed") || ItemBasic.names[i].contains("wafer")) + { + String name = ItemBasic.names[i]; + while (name.contains("_")) + { + int loc = name.indexOf("_"); + name = name.substring(0, loc) + name.substring(loc + 1, loc + 2).toUpperCase() + name.substring(loc + 2, name.length()); + } + OreDictionary.registerOre(name, new ItemStack(GCItems.basicItem, 1, i)); + } + } + + OreDictionary.registerOre("foodCheese", new ItemStack(GCItems.cheeseCurd, 1, 0)); + OreDictionary.registerOre("compressedMeteoricIron", new ItemStack(GCItems.itemBasicMoon, 1, 1)); + OreDictionary.registerOre("ingotMeteoricIron", new ItemStack(GCItems.itemBasicMoon, 1, 0)); + if (CompatibilityManager.useAluDust()) + { + OreDictionary.registerOre("dustAluminum", new ItemStack(GCItems.ic2compat, 1, 0)); + OreDictionary.registerOre("dustAluminium", new ItemStack(GCItems.ic2compat, 1, 0)); + } + if (CompatibilityManager.isIc2Loaded()) + { + OreDictionary.registerOre("crushedAluminum", new ItemStack(GCItems.ic2compat, 1, 2)); + OreDictionary.registerOre("crushedPurifiedAluminum", new ItemStack(GCItems.ic2compat, 1, 1)); + OreDictionary.registerOre("dustTinyTitanium", new ItemStack(GCItems.ic2compat, 1, 7)); + } + + GalacticraftCore.proxy.registerCanister(new PartialCanister(GCItems.oilCanister, Constants.MOD_ID_CORE, "oil_canister_partial", 7)); + GalacticraftCore.proxy.registerCanister(new PartialCanister(GCItems.fuelCanister, Constants.MOD_ID_CORE, "fuel_canister_partial", 7)); + OreDictionary.registerOre(ConfigManagerCore.otherModsSilicon, new ItemStack(GCItems.basicItem, 1, 2)); + } + + /** + * Do not call this until after mod loading is complete because JEI doesn't + * have an internal item blacklist until it services an + * FMLLoadCompleteEvent. (Seriously?!) + */ + public static void hideItemsJEI(IIngredientBlacklist jeiHidden) + { + if (jeiHidden != null) + { + for (ItemStack item : GCItems.itemChanges.keySet()) + { + jeiHidden.addIngredientToBlacklist(item.copy()); + } + + for (Item item : GCItems.hiddenItems) + { + jeiHidden.addIngredientToBlacklist(new ItemStack(item, 1, 0)); + } + + for (Block block : GCBlocks.hiddenBlocks) + { + jeiHidden.addIngredientToBlacklist(new ItemStack(block, 1, 0)); + if (block == GCBlocks.slabGCDouble) + { + for (int j = 1; j < 7; j++) + jeiHidden.addIngredientToBlacklist(new ItemStack(block, 1, j)); + } + } + } + } + + public static void finalizeSort() + { + List itemOrderListItems = Lists.newArrayList(); + for (EnumSortCategoryItem type : EnumSortCategoryItem.values()) + { + List stackSorteds = sortMapItems.get(type); + if (stackSorteds != null) + { + itemOrderListItems.addAll(stackSorteds); + } + else + { + System.out.println("ERROR: null sort stack: " + type.toString()); + } + } + + Comparator tabSorterItems = Ordering.explicit(itemOrderListItems).onResultOf(input -> new StackSorted(input.getItem(), input.getItemDamage())); + + GalacticraftCore.galacticraftItemsTab.setTabSorter(tabSorterItems); + } + + public static void registerHarvestLevels() + { + GCItems.steelPickaxe.setHarvestLevel("pickaxe", 4); + GCItems.steelAxe.setHarvestLevel("axe", 4); + GCItems.steelSpade.setHarvestLevel("shovel", 4); + } + + public static void registerSorted(Item item) + { + if (item instanceof ISortableItem) + { + ISortableItem sortableItem = (ISortableItem) item; + NonNullList items = NonNullList.create(); + item.getSubItems(GalacticraftCore.galacticraftItemsTab, items); + for (ItemStack stack : items) + { + EnumSortCategoryItem categoryItem = sortableItem.getCategory(stack.getItemDamage()); + if (!sortMapItems.containsKey(categoryItem)) + { + sortMapItems.put(categoryItem, new ArrayList<>()); + } + sortMapItems.get(categoryItem).add(new StackSorted(stack.getItem(), stack.getItemDamage())); + } + } + else if (item.getCreativeTab() == GalacticraftCore.galacticraftItemsTab) + { + throw new RuntimeException(item.getClass() + " must inherit " + ISortableItem.class.getSimpleName() + "!"); + } + } + + public static void registerItems() + { + GCItems.registerItem(GCItems.rocketTier1); + GCItems.registerItem(GCItems.oxMask); + GCItems.registerItem(GCItems.oxygenGear); + GCItems.registerItem(GCItems.oxTankLight); + GCItems.registerItem(GCItems.oxTankMedium); + GCItems.registerItem(GCItems.oxTankHeavy); + GCItems.registerItem(GCItems.oxygenCanisterInfinite); + GCItems.registerItem(GCItems.sensorLens); + GCItems.registerItem(GCItems.sensorGlasses); + GCItems.registerItem(GCItems.wrench); + GCItems.registerItem(GCItems.steelPickaxe); + GCItems.registerItem(GCItems.steelAxe); + GCItems.registerItem(GCItems.steelHoe); + GCItems.registerItem(GCItems.steelSpade); + GCItems.registerItem(GCItems.steelSword); + GCItems.registerItem(GCItems.steelHelmet); + GCItems.registerItem(GCItems.steelChestplate); + GCItems.registerItem(GCItems.steelLeggings); + GCItems.registerItem(GCItems.steelBoots); + GCItems.registerItem(GCItems.canister); + GCItems.registerItem(GCItems.oxygenVent); + GCItems.registerItem(GCItems.oxygenFan); + GCItems.registerItem(GCItems.oxygenConcentrator); + GCItems.registerItem(GCItems.rocketEngine); + GCItems.registerItem(GCItems.heavyPlatingTier1); + GCItems.registerItem(GCItems.partNoseCone); + GCItems.registerItem(GCItems.partFins); + GCItems.registerItem(GCItems.flagPole); + GCItems.registerItem(GCItems.canvas); + GCItems.registerItem(GCItems.oilCanister); + GCItems.registerItem(GCItems.fuelCanister); + GCItems.registerItem(GCItems.schematic); + GCItems.registerItem(GCItems.key); + GCItems.registerItem(GCItems.partBuggy); + GCItems.registerItem(GCItems.buggy); + GCItems.registerItem(GCItems.basicItem); + GCItems.registerItem(GCItems.foodItem); + GCItems.registerItem(GCItems.battery); + GCItems.registerItem(GCItems.infiniteBatery); + GCItems.registerItem(GCItems.meteorChunk); + GCItems.registerItem(GCItems.cheeseCurd); + GCItems.registerItem(GCItems.meteoricIronRaw); + GCItems.registerItem(GCItems.itemBasicMoon); + // GCItems.registerItem(GCItems.cheeseBlock); + GCItems.registerItem(GCItems.flag); + GCItems.registerItem(GCItems.parachute); + GCItems.registerItem(GCItems.prelaunchChecklist); + GCItems.registerItem(GCItems.dungeonFinder); + GCItems.registerItem(GCItems.emergencyKit); + + GCItems.canisterTypes.add((ItemCanisterGeneric) GCItems.fuelCanister); + GCItems.canisterTypes.add((ItemCanisterGeneric) GCItems.oilCanister); + + if (CompatibilityManager.useAluDust()) + GCItems.registerItem(GCItems.ic2compat); + } + + public static void registerItem(Item item) + { + String name = item.getTranslationKey().substring(5); + if (item.getRegistryName() == null) + { + item.setRegistryName(name); + } + GCCoreUtil.registerGalacticraftItem(name, item); + GalacticraftCore.itemListTrue.add(item); + GalacticraftCore.proxy.postRegisterItem(item); + } + + public static void registerItems(IForgeRegistry registry) + { + for (ItemStack item : GalacticraftCore.itemList) + { + registry.register(item.getItem()); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GalacticraftCore.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GalacticraftCore.java new file mode 100644 index 00000000..f2a5a8aa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GalacticraftCore.java @@ -0,0 +1,936 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; + +import javax.imageio.ImageIO; +import javax.imageio.ImageWriteParam; +import javax.imageio.ImageWriter; + +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.world.DimensionType; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldProviderSurface; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.SpawnListEntry; + +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.Mod.Instance; +import net.minecraftforge.fml.common.ModMetadata; +import net.minecraftforge.fml.common.SidedProxy; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLInterModComms; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerAboutToStartEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.event.FMLServerStoppedEvent; +import net.minecraftforge.fml.common.event.FMLServerStoppingEvent; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.registries.GameData; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.RegistryManager; +import net.minecraftforge.server.permission.DefaultPermissionLevel; +import net.minecraftforge.server.permission.PermissionAPI; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialType; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Moon; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.galaxies.SolarSystem; +import micdoodle8.mods.galacticraft.api.galaxies.Star; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.core.advancement.GCTriggers; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import micdoodle8.mods.galacticraft.core.client.gui.GuiHandler; +import micdoodle8.mods.galacticraft.core.client.screen.GameScreenBasic; +import micdoodle8.mods.galacticraft.core.client.screen.GameScreenCelestial; +import micdoodle8.mods.galacticraft.core.client.screen.GameScreenText; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.command.CommandGCEnergyUnits; +import micdoodle8.mods.galacticraft.core.command.CommandGCHelp; +import micdoodle8.mods.galacticraft.core.command.CommandGCHouston; +import micdoodle8.mods.galacticraft.core.command.CommandGCInv; +import micdoodle8.mods.galacticraft.core.command.CommandGCKit; +import micdoodle8.mods.galacticraft.core.command.CommandJoinSpaceRace; +import micdoodle8.mods.galacticraft.core.command.CommandKeepDim; +import micdoodle8.mods.galacticraft.core.command.CommandPlanetTeleport; +import micdoodle8.mods.galacticraft.core.command.CommandSpaceStationAddOwner; +import micdoodle8.mods.galacticraft.core.command.CommandSpaceStationChangeOwner; +import micdoodle8.mods.galacticraft.core.command.CommandSpaceStationRemoveOwner; +import micdoodle8.mods.galacticraft.core.datafix.GCCoreDataFixers; +import micdoodle8.mods.galacticraft.core.dimension.GCDimensions; +import micdoodle8.mods.galacticraft.core.dimension.TeleportTypeMoon; +import micdoodle8.mods.galacticraft.core.dimension.TeleportTypeOrbit; +import micdoodle8.mods.galacticraft.core.dimension.TeleportTypeOverworld; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderOverworldOrbit; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.grid.ChunkPowerHandler; +import micdoodle8.mods.galacticraft.core.energy.tile.TileCableIC2Sealed; +import micdoodle8.mods.galacticraft.core.entities.EntityAlienVillager; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedWitch; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import micdoodle8.mods.galacticraft.core.entities.EntityParachest; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import micdoodle8.mods.galacticraft.core.entities.player.GCCapabilities; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerBaseMP; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.event.LootHandlerGC; +import micdoodle8.mods.galacticraft.core.items.ItemSchematic; +import micdoodle8.mods.galacticraft.core.network.ConnectionEvents; +import micdoodle8.mods.galacticraft.core.network.ConnectionPacket; +import micdoodle8.mods.galacticraft.core.network.GalacticraftChannelHandler; +import micdoodle8.mods.galacticraft.core.proxy.CommonProxyCore; +import micdoodle8.mods.galacticraft.core.recipe.RecipeManagerGC; +import micdoodle8.mods.galacticraft.core.schematic.SchematicAdd; +import micdoodle8.mods.galacticraft.core.schematic.SchematicMoonBuggy; +import micdoodle8.mods.galacticraft.core.schematic.SchematicRocketT1; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWire; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWireSwitch; +import micdoodle8.mods.galacticraft.core.tile.TileEntityArclamp; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFueler; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFuelerSingle; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoUnloader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCompactNasaWorkbench; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDish; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEmergencyBox; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFallenMeteor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPadSingle; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNasaWorkbench; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNull; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDetector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.tile.TileEntityParaChest; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlayerDetector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySpaceStationBase; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.tile.TileEntityThruster; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.CreativeTabGC; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.GalacticLog; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.world.ChunkLoadingCallback; +import micdoodle8.mods.galacticraft.core.world.gen.BiomeMoon; +import micdoodle8.mods.galacticraft.core.world.gen.BiomeOrbit; +import micdoodle8.mods.galacticraft.core.world.gen.OreGenOtherMods; +import micdoodle8.mods.galacticraft.core.world.gen.OverworldGenerator; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.recipe.RecipeManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.mars.recipe.RecipeManagerMars; +import micdoodle8.mods.galacticraft.planets.venus.recipe.RecipeManagerVenus; + +import api.player.server.ServerPlayerAPI; + +//@noformat +@Mod( + modid = Constants.MOD_ID_CORE, + name = GalacticraftCore.NAME, + version = Constants.VERSION, + dependencies = Constants.DEPENDENCIES_FORGE + Constants.DEPENDENCIES_MICCORE, + useMetadata = false, + acceptedMinecraftVersions = "[1.12, 1.13)", + guiFactory = "micdoodle8.mods.galacticraft.core.client.gui.screen.ConfigGuiFactoryCore" +) +public class GalacticraftCore +{ + public static final String NAME = "Galacticraft Core"; + //@format + + private File GCCoreSource; + + @SidedProxy(clientSide = "micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore", serverSide = "micdoodle8.mods.galacticraft.core.proxy.CommonProxyCore") + public static CommonProxyCore proxy; + + @Instance(Constants.MOD_ID_CORE) + public static GalacticraftCore instance; + + /** + * This will be TRUE from this point forward at all times + */ + @Deprecated + @ReplaceWith("Remove all checks to this") + public static boolean isPlanetsLoaded = true; + + public static boolean isHeightConflictingModInstalled; + + public static GalacticraftChannelHandler packetPipeline; + public static GCPlayerHandler handler; + + public static CreativeTabGC galacticraftBlocksTab; + public static CreativeTabGC galacticraftItemsTab; + + public static SolarSystem solarSystemSol; + public static Planet planetMercury; + public static Planet planetVenus; + public static Planet planetMars; + public static Planet planetOverworld; + public static Planet planetJupiter; + public static Planet planetSaturn; + public static Planet planetUranus; + public static Planet planetNeptune; + public static Moon moonMoon; + public static Satellite satelliteSpaceStation; + + public static LinkedList itemList = new LinkedList<>(); + public static LinkedList itemListTrue = new LinkedList<>(); + public static LinkedList blocksList = new LinkedList<>(); + public static LinkedList biomesList = new LinkedList<>(); + + public static ImageWriter jpgWriter; + public static ImageWriteParam writeParam; + public static boolean enableJPEG = false; + + public static GalacticLog logger; + + public GalacticraftCore() + { + logger = new GalacticLog(this); + } + + static + { + FluidRegistry.enableUniversalBucket(); + } + + @EventHandler + public void preInit(FMLPreInitializationEvent event) + { + GCCoreSource = event.getSourceFile(); + this.initModInfo(event.getModMetadata()); + GCCapabilities.register(); + + GCCoreUtil.nextID = 0; + + if (CompatibilityManager.isSmartMovingLoaded || CompatibilityManager.isWitcheryLoaded) + { + isHeightConflictingModInstalled = true; + } + + GalacticraftCore.solarSystemSol = new SolarSystem("sol", "milky_way").setMapPosition(new Vector3(0.0F, 0.0F, 0.0F)); + GalacticraftCore.planetOverworld = (Planet) new Planet("overworld").setParentSolarSystem(GalacticraftCore.solarSystemSol).setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(0.0F); + GalacticraftCore.moonMoon = (Moon) new Moon("moon").setParentPlanet(GalacticraftCore.planetOverworld).setRelativeSize(0.2667F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(13F, 13F)).setRelativeOrbitTime(1 / 0.01F); + GalacticraftCore.satelliteSpaceStation = (Satellite) new Satellite("spacestation.overworld").setParentBody(GalacticraftCore.planetOverworld).setRelativeSize(0.2667F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(9F, 9F)).setRelativeOrbitTime(1 / 0.05F); + + MinecraftForge.EVENT_BUS.register(new EventHandlerGC()); + handler = new GCPlayerHandler(); + MinecraftForge.EVENT_BUS.register(handler); + GalacticraftCore.proxy.preInit(event); + + ConnectionPacket.bus = NetworkRegistry.INSTANCE.newEventDrivenChannel(ConnectionPacket.CHANNEL); + ConnectionPacket.bus.register(new ConnectionPacket()); + + this.handleConfigFilenameChange(event); + + GalacticraftCore.galacticraftBlocksTab = new CreativeTabGC(CreativeTabs.getNextID(), "galacticraft_blocks", null, null); + GalacticraftCore.galacticraftItemsTab = new CreativeTabGC(CreativeTabs.getNextID(), "galacticraft_items", null, null); + + GCFluids.registerOilandFuel(); + + if (CompatibilityManager.PlayerAPILoaded) + { + ServerPlayerAPI.register(Constants.MOD_ID_CORE, GCPlayerBaseMP.class); + } + + GCBlocks.initBlocks(); + GCItems.initItems(); + + GCFluids.registerFluids(); + + // Force initialisation of GC biome types in preinit (after config load) + // - this helps BiomeTweaker by initialising mod biomes in a fixed order + // during mod loading + GalacticraftCore.satelliteSpaceStation.setBiomeInfo(BiomeOrbit.space); + GalacticraftCore.moonMoon.setBiomeInfo(BiomeMoon.moonFlat); + } + + @EventHandler + public void init(FMLInitializationEvent event) + { + GalacticraftCore.galacticraftBlocksTab.setItemForTab(new ItemStack(Item.getItemFromBlock(GCBlocks.machineBase2))); + GalacticraftCore.galacticraftItemsTab.setItemForTab(new ItemStack(GCItems.rocketTier1)); + + if (FMLCommonHandler.instance().getSide() == Side.CLIENT) + { + GCBlocks.finalizeSort(); + GCItems.finalizeSort(); + } + + GalacticraftCore.proxy.init(event); + + GalacticraftCore.packetPipeline = GalacticraftChannelHandler.init(); + + Star starSol = (Star) new Star("sol").setParentSolarSystem(GalacticraftCore.solarSystemSol).setTierRequired(-1); + starSol.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/sun.png")); + GalacticraftCore.solarSystemSol.setMainStar(starSol); + + GalacticraftCore.planetOverworld.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png")); + GalacticraftCore.planetOverworld.setDimensionInfo(ConfigManagerCore.idDimensionOverworld, WorldProvider.class, false).setTierRequired(1); + GalacticraftCore.planetOverworld.atmosphereComponent(EnumAtmosphericGas.NITROGEN).atmosphereComponent(EnumAtmosphericGas.OXYGEN).atmosphereComponent(EnumAtmosphericGas.ARGON).atmosphereComponent(EnumAtmosphericGas.WATER); + GalacticraftCore.planetOverworld.addChecklistKeys("equip_parachute"); + + GalacticraftCore.moonMoon.setDimensionInfo(ConfigManagerCore.idDimensionMoon, WorldProviderMoon.class).setTierRequired(1); + GalacticraftCore.moonMoon.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/moon.png")); + GalacticraftCore.moonMoon.setAtmosphere(new AtmosphereInfo(false, false, false, 0.0F, 0.0F, 0.0F)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedZombie.class, 8, 2, 3)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedSpider.class, 8, 2, 3)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedSkeleton.class, 8, 2, 3)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedCreeper.class, 8, 2, 3)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedEnderman.class, 10, 1, 4)); + GalacticraftCore.moonMoon.addChecklistKeys("equip_oxygen_suit"); + + // Satellites must always have a WorldProvider implementing + // IOrbitDimension + GalacticraftCore.satelliteSpaceStation.setDimensionInfo(ConfigManagerCore.idDimensionOverworldOrbit, ConfigManagerCore.idDimensionOverworldOrbitStatic, WorldProviderOverworldOrbit.class).setTierRequired(1); + GalacticraftCore.satelliteSpaceStation.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/space_station.png")); + GalacticraftCore.satelliteSpaceStation.setAtmosphere(new AtmosphereInfo(false, false, false, 0.0F, 0.1F, 0.02F)); + GalacticraftCore.satelliteSpaceStation.addChecklistKeys("equip_oxygen_suit", "create_grapple"); + + ForgeChunkManager.setForcedChunkLoadingCallback(this, new ChunkLoadingCallback()); + MinecraftForge.EVENT_BUS.register(new ConnectionEvents()); + + SchematicRegistry.registerSchematicRecipe(new SchematicRocketT1()); + SchematicRegistry.registerSchematicRecipe(new SchematicMoonBuggy()); + SchematicRegistry.registerSchematicRecipe(new SchematicAdd()); + ChunkPowerHandler.initiate(); + EnergyConfigHandler.initGas(); + LootHandlerGC.registerAll(); + + this.registerCreatures(); + this.registerOtherEntities(); + this.registerTileEntities(); + + GalaxyRegistry.register(GalacticraftCore.solarSystemSol); + GalaxyRegistry.register(GalacticraftCore.planetOverworld); + GalaxyRegistry.register(GalacticraftCore.moonMoon); + GalaxyRegistry.register(GalacticraftCore.satelliteSpaceStation); + GCDimensions.ORBIT = GalacticraftRegistry.registerDimension("Space Station", "_orbit", ConfigManagerCore.idDimensionOverworldOrbit, WorldProviderOverworldOrbit.class, false); + if (GCDimensions.ORBIT == null) + { + GalacticraftCore.logger.error("Failed to register space station dimension type with ID " + ConfigManagerCore.idDimensionOverworldOrbit); + } + GCDimensions.ORBIT_KEEPLOADED = GalacticraftRegistry.registerDimension("Space Station", "_orbit", ConfigManagerCore.idDimensionOverworldOrbitStatic, WorldProviderOverworldOrbit.class, true); + if (GCDimensions.ORBIT_KEEPLOADED == null) + { + GalacticraftCore.logger.error("Failed to register space station dimension type with ID " + ConfigManagerCore.idDimensionOverworldOrbitStatic); + } + GalacticraftRegistry.registerTeleportType(WorldProviderSurface.class, new TeleportTypeOverworld()); + GalacticraftRegistry.registerTeleportType(WorldProviderOverworldOrbit.class, new TeleportTypeOrbit()); + GalacticraftRegistry.registerTeleportType(WorldProviderMoon.class, new TeleportTypeMoon()); + GalacticraftRegistry.registerRocketGui(WorldProviderOverworldOrbit.class, new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/overworld_rocket_gui.png")); + GalacticraftRegistry.registerRocketGui(WorldProviderSurface.class, new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/overworld_rocket_gui.png")); + GalacticraftRegistry.registerRocketGui(WorldProviderMoon.class, new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/moon_rocket_gui.png")); + GalacticraftRegistry.addDungeonLoot(1, new ItemStack(GCItems.schematic, 1, 0)); + GalacticraftRegistry.addDungeonLoot(1, new ItemStack(GCItems.schematic, 1, 1)); + + if (ConfigManagerCore.enableCopperOreGen) + { + GameRegistry.registerWorldGenerator(new OverworldGenerator(GCBlocks.basicBlock, 5, 24, 0, 75, 7), 4); + } + + if (ConfigManagerCore.enableTinOreGen) + { + GameRegistry.registerWorldGenerator(new OverworldGenerator(GCBlocks.basicBlock, 6, 22, 0, 60, 7), 4); + } + + if (ConfigManagerCore.enableAluminumOreGen) + { + GameRegistry.registerWorldGenerator(new OverworldGenerator(GCBlocks.basicBlock, 7, 18, 0, 45, 7), 4); + } + + if (ConfigManagerCore.enableSiliconOreGen) + { + GameRegistry.registerWorldGenerator(new OverworldGenerator(GCBlocks.basicBlock, 8, 3, 0, 25, 7), 4); + } + + FMLInterModComms.sendMessage("OpenBlocks", "donateUrl", "http://www.patreon.com/micdoodle8"); + registerCoreGameScreens(); + + GCFluids.registerLegacyFluids(); + GCFluids.registerDispenserBehaviours(); + if (CompatibilityManager.isBCraftEnergyLoaded()) + GCFluids.registerBCFuel(); + + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_MASK, EnumExtendedInventorySlot.MASK, GCItems.oxMask); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_GEAR, EnumExtendedInventorySlot.GEAR, GCItems.oxygenGear); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_LIGHT, EnumExtendedInventorySlot.LEFT_TANK, GCItems.oxTankLight); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_LIGHT, EnumExtendedInventorySlot.RIGHT_TANK, GCItems.oxTankLight); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_MEDIUM, EnumExtendedInventorySlot.LEFT_TANK, GCItems.oxTankMedium); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_MEDIUM, EnumExtendedInventorySlot.RIGHT_TANK, GCItems.oxTankMedium); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_HEAVY, EnumExtendedInventorySlot.LEFT_TANK, GCItems.oxTankHeavy); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_HEAVY, EnumExtendedInventorySlot.RIGHT_TANK, GCItems.oxTankHeavy); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_INFINITE, EnumExtendedInventorySlot.LEFT_TANK, GCItems.oxygenCanisterInfinite); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_INFINITE, EnumExtendedInventorySlot.RIGHT_TANK, GCItems.oxygenCanisterInfinite); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_PARACHUTE, EnumExtendedInventorySlot.PARACHUTE, GCItems.parachute); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_FREQUENCY_MODULE, EnumExtendedInventorySlot.FREQUENCY_MODULE, new ItemStack(GCItems.basicItem, 1, 19)); + + GalacticraftCore.proxy.registerFluidTexture(GCFluids.fluidOil, new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/underoil.png")); + GalacticraftCore.proxy.registerFluidTexture(GCFluids.fluidFuel, new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/underfuel.png")); + + PermissionAPI.registerNode(Constants.PERMISSION_CREATE_STATION, DefaultPermissionLevel.ALL, "Allows players to create space stations"); + + GCTriggers.registerTriggers(); + } + + @EventHandler + public void postInit(FMLPostInitializationEvent event) + { + GalacticraftCore.planetMercury = makeDummyPlanet("mercury", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetMercury != null) + { + GalacticraftCore.planetMercury.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(1.45F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(0.5F, 0.5F)).setRelativeOrbitTime(0.24096385542168674698795180722892F); + } + GalacticraftCore.planetVenus = makeDummyPlanet("venus", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetVenus != null) + { + GalacticraftCore.planetVenus.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(2.0F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(0.75F, 0.75F)).setRelativeOrbitTime(0.61527929901423877327491785323111F); + } + GalacticraftCore.planetMars = makeDummyPlanet("mars", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetMars != null) + { + GalacticraftCore.planetMars.setRingColorRGB(0.67F, 0.1F, 0.1F).setPhaseShift(0.1667F).setRelativeSize(0.5319F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.25F, 1.25F)).setRelativeOrbitTime(1.8811610076670317634173055859803F); + } + GalacticraftCore.planetJupiter = makeDummyPlanet("jupiter", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetJupiter != null) + { + GalacticraftCore.planetJupiter.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift((float) Math.PI).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.5F, 1.5F)).setRelativeOrbitTime(11.861993428258488499452354874042F); + } + GalacticraftCore.planetSaturn = makeDummyPlanet("saturn", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetSaturn != null) + { + GalacticraftCore.planetSaturn.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(5.45F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.75F, 1.75F)).setRelativeOrbitTime(29.463307776560788608981380065717F); + } + GalacticraftCore.planetUranus = makeDummyPlanet("uranus", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetUranus != null) + { + GalacticraftCore.planetUranus.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(1.38F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(2.0F, 2.0F)).setRelativeOrbitTime(84.063526834611171960569550930997F); + } + GalacticraftCore.planetNeptune = makeDummyPlanet("neptune", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetNeptune != null) + { + GalacticraftCore.planetNeptune.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(1.0F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(2.25F, 2.25F)).setRelativeOrbitTime(164.84118291347207009857612267251F); + } + + MinecraftForge.EVENT_BUS.register(new OreGenOtherMods()); + + GalacticraftCore.proxy.postInit(event); + + ArrayList cBodyList = new ArrayList<>(); + cBodyList.addAll(GalaxyRegistry.getPlanets()); + cBodyList.addAll(GalaxyRegistry.getMoons()); + + for (CelestialBody body : cBodyList) + { + if (body.shouldAutoRegister()) + { + int id = Arrays.binarySearch(ConfigManagerCore.staticLoadDimensions, body.getDimensionID()); + // It's important this is done in the same order as planets will + // be registered by WorldUtil.registerPlanet(); + DimensionType type = GalacticraftRegistry.registerDimension(body.getTranslationKey(), body.getDimensionSuffix(), body.getDimensionID(), body.getWorldProvider(), body.getForceStaticLoad() || id < 0); + if (type != null) + { + body.initialiseMobSpawns(); + } + else + { + body.setUnreachable(); + GalacticraftCore.logger.error("Tried to register dimension for body: " + body.getTranslationKey() + " hit conflict with ID " + body.getDimensionID()); + } + } + + if (body.getSurfaceBlocks() != null) + { + TransformerHooks.spawnListAE2_GC.addAll(body.getSurfaceBlocks()); + } + } + + GCDimensions.MOON = WorldUtil.getDimensionTypeById(ConfigManagerCore.idDimensionMoon); + + CompatibilityManager.checkForCompatibleMods(); + RecipeManagerGC.loadCompatibilityRecipes(); + TileEntityDeconstructor.initialiseRecipeList(); + ItemSchematic.registerSchematicItems(); + NetworkRegistry.INSTANCE.registerGuiHandler(GalacticraftCore.instance, new GuiHandler()); + MinecraftForge.EVENT_BUS.register(new TickHandlerServer()); + GalaxyRegistry.refreshGalaxies(); + + GalacticraftRegistry.registerScreen(new GameScreenText()); // Screen API + // demo + // Note: add-ons can register their own screens in postInit by calling + // GalacticraftRegistry.registerScreen(IGameScreen) like this. + // [Called on both client and server: do not include any client-specific + // code in the new game screen's constructor method.] + + try + { + jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next(); + writeParam = jpgWriter.getDefaultWriteParam(); + writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); + writeParam.setCompressionQuality(1.0f); + enableJPEG = true; + } catch (UnsatisfiedLinkError e) + { + GalacticraftCore.logger.error("Error initialising JPEG compressor - this is likely caused by OpenJDK - see https://wiki.micdoodle8.com/wiki/Compatibility#For_clients_running_OpenJDK"); + e.printStackTrace(); + } + } + + @EventHandler + public void serverAboutToStart(FMLServerAboutToStartEvent event) + { + TickHandlerServer.restart(); + } + + @EventHandler + public void serverInit(FMLServerStartedEvent event) + { + BlockVec3.chunkCacheDim = Integer.MAX_VALUE; + } + + @EventHandler + public void onServerStarting(FMLServerStartingEvent event) + { + GCCoreUtil.notifyStarted(event.getServer()); + File worldFolder = DimensionManager.getCurrentSaveRootDirectory(); + moveLegacyGCFileLocations(worldFolder); + + event.registerServerCommand(new CommandSpaceStationAddOwner()); + event.registerServerCommand(new CommandSpaceStationChangeOwner()); + event.registerServerCommand(new CommandSpaceStationRemoveOwner()); + event.registerServerCommand(new CommandPlanetTeleport()); + event.registerServerCommand(new CommandKeepDim()); + event.registerServerCommand(new CommandGCInv()); + event.registerServerCommand(new CommandGCHelp()); + event.registerServerCommand(new CommandGCKit()); + event.registerServerCommand(new CommandGCHouston()); + event.registerServerCommand(new CommandGCEnergyUnits()); + event.registerServerCommand(new CommandJoinSpaceRace()); + + WorldUtil.initialiseDimensionNames(); + WorldUtil.registerSpaceStations(event.getServer(), new File(worldFolder, "galacticraft")); + + ArrayList cBodyList = new ArrayList<>(); + cBodyList.addAll(GalaxyRegistry.getPlanets()); + cBodyList.addAll(GalaxyRegistry.getMoons()); + + for (CelestialBody body : cBodyList) + { + if (body.shouldAutoRegister()) + { + if (!WorldUtil.registerPlanet(body.getDimensionID(), body.isReachable(), 0)) + { + body.setUnreachable(); + } + } + } + } + + private void handleConfigFilenameChange(FMLPreInitializationEvent event) + { + File oldCoreConfig = new File(event.getModConfigurationDirectory(), Constants.OLD_CONFIG_FILE); + File oldPowerConfig = new File(event.getModConfigurationDirectory(), Constants.OLD_POWER_CONFIG_FILE); + File oldChunkLoaderConfig = new File(event.getModConfigurationDirectory(), Constants.OLD_CHUNKLOADER_CONFIG_FILE); + + File coreConfig = new File(event.getModConfigurationDirectory(), Constants.CONFIG_FILE); + File powerConfig = new File(event.getModConfigurationDirectory(), Constants.POWER_CONFIG_FILE); + File chunkLoaderConfig = new File(event.getModConfigurationDirectory(), Constants.CHUNKLOADER_CONFIG_FILE); + + if (oldCoreConfig.exists()) + { + oldCoreConfig.renameTo(coreConfig); + } + + if (oldPowerConfig.exists()) + { + oldPowerConfig.renameTo(powerConfig); + } + + if (oldChunkLoaderConfig.exists()) + { + oldChunkLoaderConfig.renameTo(chunkLoaderConfig); + } + + ConfigManagerCore.initialize(coreConfig); + EnergyConfigHandler.setDefaultValues(powerConfig); + ChunkLoadingCallback.loadConfig(chunkLoaderConfig); + } + + private void moveLegacyGCFileLocations(File worldFolder) + { + File destFolder = new File(worldFolder, "galacticraft"); + if (!destFolder.exists()) + { + if (!destFolder.mkdirs()) + return; + } + File dataFolder = new File(worldFolder, "data"); + if (!dataFolder.exists()) + return; + + moveGCFile(new File(dataFolder, "GCAsteroidData.dat"), destFolder); + moveGCFile(new File(dataFolder, "GCSpaceRaceData.dat"), destFolder); + moveGCFile(new File(dataFolder, "GCSpinData.dat"), destFolder); + moveGCFile(new File(dataFolder, "GCInv_savefile.dat"), destFolder); + String[] names = dataFolder.list(); + for (String name : names) + { + if (name.startsWith("spacestation_") && name.endsWith(".dat")) + { + moveGCFile(new File(dataFolder, name), destFolder); + } + } + } + + private void moveGCFile(File file, File destFolder) + { + if (file.exists()) + { + File destPath = new File(destFolder, file.getName()); + if (destPath.exists()) + { + GalacticraftCore.logger.info("Deleting duplicate Galacticraft data file: " + file.getName()); + file.delete(); + return; + } + try + { + java.nio.file.Files.move(file.toPath(), destPath.toPath()); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + + @EventHandler + public void onServerStopping(FMLServerStoppingEvent var1) + { + MapUtil.saveMapProgress(); + } + + @EventHandler + public void onServerStop(FMLServerStoppedEvent var1) + { + // Unregister dimensions + WorldUtil.unregisterPlanets(); + WorldUtil.unregisterSpaceStations(); + GCCoreUtil.notifyStarted(null); + } + + private static void registerCoreGameScreens() + { + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + IGameScreen rendererBasic = new GameScreenBasic(); + IGameScreen rendererCelest = new GameScreenCelestial(); + // Type 0 - blank + GalacticraftRegistry.registerScreen(rendererBasic); + // Type 1 - local satellite view + GalacticraftRegistry.registerScreen(rendererBasic); + // Type 2 - solar system + GalacticraftRegistry.registerScreen(rendererCelest); + // Type 3 - local planet + GalacticraftRegistry.registerScreen(rendererCelest); + // Type 4 - render test + GalacticraftRegistry.registerScreen(rendererCelest); + } + else + { + GalacticraftRegistry.registerScreensServer(5); + } + } + + private void registerTileEntities() + { + register(TileEntityTreasureChest.class, "gc_treasure_chest"); + register(TileEntityOxygenDistributor.class, "gc_air_distributor"); + register(TileEntityOxygenCollector.class, "gc_air_collector"); + register(TileEntityFluidPipe.class, "gc_oxygen_pipe"); + register(TileEntityAirLock.class, "gc_air_lock_frame"); + register(TileEntityRefinery.class, "gc_refinery"); + register(TileEntityNasaWorkbench.class, "gc_nasa_workbench"); + register(TileEntityCompactNasaWorkbench.class, "gc_nasa_workbench_compact"); + register(TileEntityDeconstructor.class, "gc_deconstructor"); + register(TileEntityOxygenCompressor.class, "gc_air_compressor"); + register(TileEntityFuelLoader.class, "gc_fuel_loader"); + register(TileEntityLandingPadSingle.class, "gc_landing_pad"); + register(TileEntityLandingPad.class, "gc_landing_pad_full"); + register(TileEntitySpaceStationBase.class, "gc_space_station"); + register(TileEntityMulti.class, "gc_dummy_block"); + register(TileEntityOxygenSealer.class, "gc_air_sealer"); + register(TileEntityDungeonSpawner.class, "gc_dungeon_boss_spawner"); + register(TileEntityOxygenDetector.class, "gc_oxygen_detector"); + register(TileEntityBuggyFueler.class, "gc_buggy_fueler"); + register(TileEntityBuggyFuelerSingle.class, "gc_buggy_fueler_single"); + register(TileEntityCargoLoader.class, "gc_cargo_loader"); + register(TileEntityCargoUnloader.class, "gc_cargo_unloader"); + register(TileEntityParaChest.class, "gc_parachest_tile"); + register(TileEntitySolar.class, "gc_solar_panel"); + register(TileEntityDish.class, "gc_radio_telescope"); + register(TileEntityCrafting.class, "gc_magnetic_crafting_table"); + register(TileEntityEnergyStorageModule.class, "gc_energy_storage_module"); + register(TileEntityCoalGenerator.class, "gc_coal_generator"); + register(TileEntityElectricFurnace.class, "gc_electric_furnace"); + register(TileEntityAluminumWire.class, "gc_aluminum_wire"); + register(TileEntityAluminumWireSwitch.class, "gc_switchable_aluminum_wire"); + register(TileEntityFallenMeteor.class, "gc_fallen_meteor"); + register(TileEntityIngotCompressor.class, "gc_ingot_compressor"); + register(TileEntityElectricIngotCompressor.class, "gc_electric_ingot_compressor"); + register(TileEntityCircuitFabricator.class, "gc_circuit_fabricator"); + register(TileEntityAirLockController.class, "gc_air_lock_controller"); + register(TileEntityOxygenStorageModule.class, "gc_oxygen_storage_module"); + register(TileEntityOxygenDecompressor.class, "gc_oxygen_decompressor"); + register(TileEntityThruster.class, "gc_space_station_thruster"); + register(TileEntityArclamp.class, "gc_arc_lamp"); + register(TileEntityScreen.class, "gc_view_screen"); + register(TileEntityPanelLight.class, "gc_panel_lighting"); + register(TileEntityTelemetry.class, "gc_telemetry_unit"); + register(TileEntityPainter.class, "gc_painter"); + register(TileEntityFluidTank.class, "gc_fluid_tank"); + register(TileEntityPlayerDetector.class, "gc_player_detector"); + register(TileEntityPlatform.class, "gc_platform"); + register(TileEntityEmergencyBox.class, "gc_emergency_post"); + register(TileEntityNull.class, "gc_null_tile"); + if (CompatibilityManager.isIc2Loaded()) + { + register(TileCableIC2Sealed.class, "gc_sealed_ic2_cable"); + } + + new GCCoreDataFixers().registerAll(); + } + + private void register(Class tileEntityClass, String key) + { + GameRegistry.registerTileEntity(tileEntityClass, new ResourceLocation(Constants.MOD_ID_CORE, key)); + } + + private void registerCreatures() + { + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedSpider.class, "evolved_spider", 3419431, 11013646); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedZombie.class, "evolved_zombie", 44975, 7969893); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedCreeper.class, "evolved_creeper", 894731, 0); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedSkeleton.class, "evolved_skeleton", 12698049, 4802889); + GCCoreUtil.registerGalacticraftCreature(EntitySkeletonBoss.class, "evolved_skeleton_boss", 12698049, 4802889); + GCCoreUtil.registerGalacticraftCreature(EntityAlienVillager.class, "alien_villager", ColorUtil.to32BitColor(255, 103, 145, 181), 12422002); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedEnderman.class, "evolved_enderman", 1447446, 0); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedWitch.class, "evolved_witch", 3407872, 5349438); + } + + private void registerOtherEntities() + { + GCCoreUtil.registerGalacticraftNonMobEntity(EntityTier1Rocket.class, "rocket_t1", 150, 1, false); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityMeteor.class, "meteor", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityBuggy.class, "buggy", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityFlag.class, "gcflag", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityParachest.class, "para_chest", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityLander.class, "lander", 150, 5, false); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityMeteorChunk.class, "meteor_chunk", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityCelestialFake.class, "celestial_screen", 150, 5, false); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityHangingSchematic.class, "hanging_schematic", 150, 5, false); + } + + private Planet makeDummyPlanet(String name, SolarSystem system) + { + // Loop through all planets to make sure it's not registered as a + // reachable dimension first + for (CelestialObject body : new ArrayList<>(GalaxyRegistry.getPlanets())) + { + if (body.isEqualTo(CelestialType.PLANET, name)) + { + if (((Planet) body).getParentSolarSystem() == system) + { + return null; + } + } + } + + Planet planet = new Planet(name).setParentSolarSystem(system); + planet.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/" + name + ".png")); + GalaxyRegistry.register(planet); + return planet; + } + + @Mod.EventBusSubscriber(modid = Constants.MOD_ID_CORE) + public static class RegistrationHandler + { + + @SubscribeEvent + public static void registerBlocks(RegistryEvent.Register event) + { + GCBlocks.registerBlocks(event.getRegistry()); + CompatibilityManager.registerMicroBlocks(); + } + + @SubscribeEvent + public static void registerItems(RegistryEvent.Register event) + { + // First, the final steps of block registration + IForgeRegistry blockRegistry = RegistryManager.ACTIVE.getRegistry(GameData.BLOCKS); + GCBlocks.doOtherModsTorches(blockRegistry); + BlockGrating.createForgeFluidVersions(blockRegistry); + + GCItems.registerItems(event.getRegistry()); + + // RegisterSorted for blocks cannot be run until all the items have + // been registered + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + for (Item item : GalacticraftCore.itemListTrue) + { + GCItems.registerSorted(item); + } + for (Block block : GalacticraftCore.blocksList) + { + GCBlocks.registerSorted(block); + } + } + + GCBlocks.oreDictRegistrations(); + GCItems.oreDictRegistrations(); + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public static void registerRecipes(RegistryEvent.Register event) + { + RecipeManagerGC.addUniversalRecipes(); + RecipeManagerGC.setConfigurableRecipes(); + + // PLANETS + RecipeManagerAsteroids.addUniversalRecipes(); + RecipeManagerMars.addUniversalRecipes(); + RecipeManagerVenus.addUniversalRecipes(); + } + + @SubscribeEvent + public static void registerModels(ModelRegistryEvent event) + { + proxy.registerVariants(); + GalacticraftPlanets.proxy.registerVariants(); + } + + @SubscribeEvent + public static void registerBiomes(RegistryEvent.Register event) + { + // First, final steps of item registration + GalacticraftCore.handler.registerTorchTypes(); + GalacticraftCore.handler.registerItemChanges(); + + for (BiomeGenBaseGC biome : GalacticraftCore.biomesList) + { + event.getRegistry().register(biome); + if (!ConfigManagerCore.disableBiomeTypeRegistrations) + { + biome.registerTypes(biome); + } + } + } + + @SubscribeEvent + public static void registerSounds(RegistryEvent.Register event) + { + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + GCSounds.registerSounds(event.getRegistry()); + } + } + } + + private void initModInfo(ModMetadata info) + { + info.modId = Constants.MOD_ID_CORE; + info.name = Constants.MOD_NAME_SIMPLE; + info.version = Constants.VERSION; + info.description = "An advanced space travel mod for Minecraft!"; + info.authorList = Arrays.asList("micdoodle8", "radfast", "EzerArch", "fishtaco", "SpaceViking", "SteveKunG", "ROMVoid95"); + info.logoFile = "assets/galacticraftplanets/core-logo.png"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/TransformerHooks.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/TransformerHooks.java new file mode 100644 index 00000000..93acafda --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/TransformerHooks.java @@ -0,0 +1,717 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.IChunkGenerator; + +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.IWorldGenerator; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IAntiGrav; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.item.IArmorGravity; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.api.world.IWeatherProvider; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import micdoodle8.mods.galacticraft.core.client.BubbleRenderer; +import micdoodle8.mods.galacticraft.core.client.FootprintRenderer; +import micdoodle8.mods.galacticraft.core.client.SkyProviderOverworld; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.player.EnumGravity; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +import org.lwjgl.opengl.GL11; + +import static micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore.PLAYER_Y_OFFSET; +import static micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore.submergedTextures; + +/** + * These methods are called from vanilla minecraft through bytecode injection done in MicdoodleCore See https://github.com/micdoodle8/MicdoodleCore + */ +public class TransformerHooks +{ + + private static List otherModGeneratorsWhitelist = new LinkedList<>(); + private static IWorldGenerator generatorTCAuraNodes = null; + private static Method generateTCAuraNodes = null; + private static boolean generatorsInitialised = false; + public static List spawnListAE2_GC = new LinkedList<>(); + public static ThreadLocal renderBuilder = new ThreadLocal<>(); + private static int rainSoundCounter = 0; + private static Random random = new Random(); + + public static double getGravityForEntity(Entity entity) + { + if (entity.world.provider instanceof IGalacticraftWorldProvider) + { + if (entity instanceof EntityChicken && !OxygenUtil.isAABBInBreathableAirBlock(entity.world, entity.getEntityBoundingBox())) + { + return 0.08D; + } + + final IGalacticraftWorldProvider customProvider = (IGalacticraftWorldProvider) entity.world.provider; + if (entity instanceof EntityPlayer) + { + EntityPlayer player = (EntityPlayer) entity; + if (player.inventory != null) + { + int armorModLowGrav = 100; + int armorModHighGrav = 100; + for (ItemStack armorPiece : player.getArmorInventoryList()) + { + if (armorPiece != null && armorPiece.getItem() instanceof IArmorGravity) + { + armorModLowGrav -= ((IArmorGravity) armorPiece.getItem()).gravityOverrideIfLow(player); + armorModHighGrav -= ((IArmorGravity) armorPiece.getItem()).gravityOverrideIfHigh(player); + } + } + if (armorModLowGrav > 100) + { + armorModLowGrav = 100; + } + if (armorModHighGrav > 100) + { + armorModHighGrav = 100; + } + if (armorModLowGrav < 0) + { + armorModLowGrav = 0; + } + if (armorModHighGrav < 0) + { + armorModHighGrav = 0; + } + if (customProvider.getGravity() > 0) + { + return 0.08D - (customProvider.getGravity() * armorModLowGrav) / 100; + } + return 0.08D - (customProvider.getGravity() * armorModHighGrav) / 100; + } + } + return 0.08D - customProvider.getGravity(); + } else if (entity instanceof IAntiGrav) + { + return 0; + } else + { + return 0.08D; + } + } + + public static double getItemGravity(EntityItem e) + { + if (e.world.provider instanceof IGalacticraftWorldProvider) + { + final IGalacticraftWorldProvider customProvider = (IGalacticraftWorldProvider) e.world.provider; + return Math.max(0.002D, 0.03999999910593033D - (customProvider instanceof IOrbitDimension ? 0.05999999910593033D : customProvider.getGravity()) / 1.75D); + } else + { + return 0.03999999910593033D; + } + } + + public static float getArrowGravity(EntityArrow e) + { + if (e.world.provider instanceof IGalacticraftWorldProvider) + { + return ((IGalacticraftWorldProvider) e.world.provider).getArrowGravity(); + } else + { + return 0.05F; + } + } + + public static float getRainStrength(World world, float partialTicks) + { + if (world.isRemote) + { + if (world.provider.getSkyRenderer() instanceof SkyProviderOverworld) + { + return 0.0F; + } + } + + return world.prevRainingStrength + (world.rainingStrength - world.prevRainingStrength) * partialTicks; + } + + public static void otherModGenerate(int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) + { + if (world.provider instanceof WorldProviderSpaceStation) + { + return; + } + + if (!(world.provider instanceof IGalacticraftWorldProvider) || ConfigManagerCore.enableOtherModsFeatures) + { + try + { + net.minecraftforge.fml.common.registry.GameRegistry.generateWorld(chunkX, chunkZ, world, chunkGenerator, chunkProvider); + } catch (Exception e) + { + GalacticraftCore.logger.error("Error in another mod's worldgen. This is *NOT* a Galacticraft bug, report it to the other mod please."); + GalacticraftCore.logger.error("Details:- Dimension:" + GCCoreUtil.getDimensionID(world) + " Chunk cx,cz:" + chunkX + "," + chunkZ + " Seed:" + world.getSeed()); + e.printStackTrace(); + } + return; + } + + if (!generatorsInitialised) + { + generatorsInitialised = true; + + if (ConfigManagerCore.whitelistCoFHCoreGen) + { + addWorldGenForName("CoFHCore custom oregen", "cofh.cofhworld.init.WorldHandler"); + } + addWorldGenForName("GalacticGreg oregen", "bloodasp.galacticgreg.GT_Worldgenerator_Space"); + addWorldGenForName("Dense Ores oregen", "com.rwtema.denseores.WorldGenOres"); + addWorldGenForName("AE2 meteorites worldgen", "appeng.worldgen.MeteoriteWorldGen"); + + try + { + Class genThaumCraft = Class.forName("thaumcraft.common.lib.world.ThaumcraftWorldGenerator"); + if (genThaumCraft != null && ConfigManagerCore.enableThaumCraftNodes) + { + final Field regField = GameRegistry.class.getDeclaredField("worldGenerators"); + regField.setAccessible(true); + Set registeredGenerators = (Set) regField.get(null); + for (IWorldGenerator gen : registeredGenerators) + { + if (genThaumCraft.isInstance(gen)) + { + generatorTCAuraNodes = gen; + break; + } + } + if (generatorTCAuraNodes != null) + { + generateTCAuraNodes = genThaumCraft.getDeclaredMethod("generateWildNodes", World.class, Random.class, int.class, int.class, boolean.class, boolean.class); + generateTCAuraNodes.setAccessible(true); + GalacticraftCore.logger.info("Whitelisting ThaumCraft aura node generation on planets."); + } + } + } catch (Exception e) + { + } + } + + if (otherModGeneratorsWhitelist.size() > 0 || generateTCAuraNodes != null) + { + try + { + long worldSeed = world.getSeed(); + Random fmlRandom = new Random(worldSeed); + long xSeed = fmlRandom.nextLong() >> 2 + 1L; + long zSeed = fmlRandom.nextLong() >> 2 + 1L; + long chunkSeed = (xSeed * chunkX + zSeed * chunkZ) ^ worldSeed; + fmlRandom.setSeed(chunkSeed); + + for (IWorldGenerator gen : otherModGeneratorsWhitelist) + { + gen.generate(fmlRandom, chunkX, chunkZ, world, chunkGenerator, chunkProvider); + } + if (generateTCAuraNodes != null) + { + generateTCAuraNodes.invoke(generatorTCAuraNodes, world, fmlRandom, chunkX, chunkZ, false, true); + } + } catch (Exception e) + { + GalacticraftCore.logger.error("Error in another mod's worldgen. This is *NOT* a Galacticraft bug, report it to the other mod please."); + e.printStackTrace(); + } + } + } + + private static void addWorldGenForName(String logString, String name) + { + try + { + Class target = Class.forName(name); + if (target != null) + { + final Field regField = GameRegistry.class.getDeclaredField("worldGenerators"); + regField.setAccessible(true); + Set registeredGenerators = (Set) regField.get(null); + for (IWorldGenerator gen : registeredGenerators) + { + if (target.isInstance(gen)) + { + otherModGeneratorsWhitelist.add(gen); + GalacticraftCore.logger.info("Whitelisting " + logString + " on planets."); + return; + } + } + } + } catch (Exception e) + { + } + } + + /* + * Used to supplement the hard-coded blocklist in AE2's MeteoritePlacer class + */ + public static boolean addAE2MeteorSpawn(Object o, Block b) + { + if (o instanceof Collection) + { + ((Collection) o).add(b); + ((Collection) o).addAll(spawnListAE2_GC); + return true; + } + return false; + } + + @SideOnly(Side.CLIENT) + public static float getWorldBrightness(World world) + { + if (world.provider instanceof WorldProviderMoon) + { + float f1 = world.getCelestialAngle(1.0F); + float f2 = 1.0F - (MathHelper.cos(f1 * Constants.twoPI) * 2.0F + 0.2F); + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + f2 = 1.0F - f2; + return f2 * 0.8F; + } + + return world.getSunBrightness(1.0F); + } + + @SideOnly(Side.CLIENT) + public static float getColorRed(World world) + { + return (float) WorldUtil.getWorldColor(world).x; + } + + @SideOnly(Side.CLIENT) + public static float getColorGreen(World world) + { + return (float) WorldUtil.getWorldColor(world).y; + } + + @SideOnly(Side.CLIENT) + public static float getColorBlue(World world) + { + return (float) WorldUtil.getWorldColor(world).z; + } + + @SideOnly(Side.CLIENT) + public static Vec3d getFogColorHook(World world) + { + EntityPlayerSP player = FMLClientHandler.instance().getClient().player; + if (world.provider.getSkyRenderer() instanceof SkyProviderOverworld) + { + float var20 = ((float) (player.posY) - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / 1000.0F; + var20 = MathHelper.sqrt(var20); + final float var21 = Math.max(1.0F - var20 * 40.0F, 0.0F); + + Vec3d vec = world.getFogColor(1.0F); + + return new Vec3d(vec.x * Math.max(1.0F - var20 * 1.29F, 0.0F), vec.y * Math.max(1.0F - var20 * 1.29F, 0.0F), vec.z * Math.max(1.0F - var20 * 1.29F, 0.0F)); + } + + return world.getFogColor(1.0F); + } + + @SideOnly(Side.CLIENT) + public static Vec3d getSkyColorHook(World world) + { + EntityPlayerSP player = FMLClientHandler.instance().getClient().player; + if (world.provider.getSkyRenderer() instanceof SkyProviderOverworld || (player != null && player.posY > Constants.OVERWORLD_CLOUD_HEIGHT && player.getRidingEntity() instanceof EntitySpaceshipBase)) + { + float f1 = world.getCelestialAngle(1.0F); + float f2 = MathHelper.cos(f1 * Constants.twoPI) * 2.0F + 0.5F; + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + int i = MathHelper.floor(player.posX); + int j = MathHelper.floor(player.posY); + int k = MathHelper.floor(player.posZ); + BlockPos pos = new BlockPos(i, j, k); + int l = ForgeHooksClient.getSkyBlendColour(world, pos); + float f4 = (l >> 16 & 255) / 255.0F; + float f5 = (l >> 8 & 255) / 255.0F; + float f6 = (l & 255) / 255.0F; + f4 *= f2; + f5 *= f2; + f6 *= f2; + + if (player.posY <= Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + Vec3d vec = world.getSkyColor(FMLClientHandler.instance().getClient().getRenderViewEntity(), 1.0F); + double blend = (player.posY - Constants.OVERWORLD_CLOUD_HEIGHT) / (Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT - Constants.OVERWORLD_CLOUD_HEIGHT); + double ablend = 1 - blend; + return new Vec3d(f4 * blend + vec.x * ablend, f5 * blend + vec.y * ablend, f6 * blend + vec.z * ablend); + } else + { + double blend = Math.min(1.0D, (player.posY - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / 300.0D); + double ablend = 1.0D - blend; + blend /= 255.0D; + return new Vec3d(f4 * ablend + blend * 31.0D, f5 * ablend + blend * 8.0D, f6 * ablend + blend * 99.0D); + } + } + + return world.getSkyColor(FMLClientHandler.instance().getClient().getRenderViewEntity(), 1.0F); + } + + @SideOnly(Side.CLIENT) + public static double getRenderPosY(Entity viewEntity, double regular) + { + if (viewEntity.posY >= 256) + { + return 255.0F; + } else + { + return regular + viewEntity.getEyeHeight(); + } + } + + @SideOnly(Side.CLIENT) + public static boolean shouldRenderFire(Entity entity) + { + if (entity.world == null || !(entity.world.provider instanceof IGalacticraftWorldProvider)) + { + return entity.isBurning(); + } + + if (!(entity instanceof EntityLivingBase) && !(entity instanceof EntityArrow)) + { + return entity.isBurning(); + } + + if (entity.isBurning()) + { + if (OxygenUtil.noAtmosphericCombustion(entity.world.provider)) + { + return OxygenUtil.isAABBInBreathableAirBlock(entity.world, entity.getEntityBoundingBox()); + } else + { + return true; + } + // Disable fire on Galacticraft worlds with no oxygen + } + + return false; + } + + @SideOnly(Side.CLIENT) + public static void orientCamera(float partialTicks) + { + EntityPlayerSP player = ClientProxyCore.mc.player; + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + Entity viewEntity = ClientProxyCore.mc.getRenderViewEntity(); + + if (player.getRidingEntity() instanceof ICameraZoomEntity && ClientProxyCore.mc.gameSettings.thirdPersonView == 0) + { + Entity entity = player.getRidingEntity(); + float offset = ((ICameraZoomEntity) entity).getRotateOffset(); + if (offset > -10F) + { + offset += PLAYER_Y_OFFSET; + GL11.glTranslatef(0, -offset, 0); + float anglePitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + float angleYaw = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks; + GL11.glRotatef(-anglePitch, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(angleYaw, 0.0F, 1.0F, 0.0F); + + GL11.glTranslatef(0, offset, 0); + } + } + + if (viewEntity instanceof EntityLivingBase && viewEntity.world.provider instanceof IZeroGDimension && !((EntityLivingBase) viewEntity).isPlayerSleeping()) + { + float pitch = viewEntity.prevRotationPitch + (viewEntity.rotationPitch - viewEntity.prevRotationPitch) * partialTicks; + float yaw = viewEntity.prevRotationYaw + (viewEntity.rotationYaw - viewEntity.prevRotationYaw) * partialTicks + 180.0F; + float eyeHeightChange = viewEntity.width / 2.0F; + + GL11.glRotatef(-yaw, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-pitch, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.0F, 0.1F); + + EnumGravity gDir = stats.getGdir(); + GL11.glRotatef(180.0F * gDir.getThetaX(), 1.0F, 0.0F, 0.0F); + GL11.glRotatef(180.0F * gDir.getThetaZ(), 0.0F, 0.0F, 1.0F); + GL11.glRotatef(pitch * gDir.getPitchGravityX(), 1.0F, 0.0F, 0.0F); + GL11.glRotatef(pitch * gDir.getPitchGravityY(), 0.0F, 1.0F, 0.0F); + GL11.glRotatef(yaw * gDir.getYawGravityX(), 1.0F, 0.0F, 0.0F); + GL11.glRotatef(yaw * gDir.getYawGravityY(), 0.0F, 1.0F, 0.0F); + GL11.glRotatef(yaw * gDir.getYawGravityZ(), 0.0F, 0.0F, 1.0F); + + GL11.glTranslatef(eyeHeightChange * gDir.getEyeVecX(), eyeHeightChange * gDir.getEyeVecY(), eyeHeightChange * gDir.getEyeVecZ()); + + if (stats.getGravityTurnRate() < 1.0F) + { + GL11.glRotatef(90.0F * (stats.getGravityTurnRatePrev() + (stats.getGravityTurnRate() - stats.getGravityTurnRatePrev()) * partialTicks), stats.getGravityTurnVecX(), stats.getGravityTurnVecY(), stats.getGravityTurnVecZ()); + } + } + } + + @SideOnly(Side.CLIENT) + public static void renderLiquidOverlays(float partialTicks) + { + boolean within = false; + for (Map.Entry entry : submergedTextures.entrySet()) + { + if (FluidUtil.isInsideOfFluid(ClientProxyCore.mc.player, entry.getKey())) + { + within = true; + ClientProxyCore.mc.getTextureManager().bindTexture(entry.getValue()); + break; + } + } + + if (!within) + { + return; + } + + Tessellator tessellator = Tessellator.getInstance(); + float f1 = ClientProxyCore.mc.player.getBrightness() / 3.0F; + GL11.glColor4f(f1, f1, f1, 1.0F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glPushMatrix(); + float f2 = 4.0F; + float f3 = -1.1F; + float f4 = 1.1F; + float f5 = -1.1F; + float f6 = 1.1F; + float f7 = -0.25F; + float f8 = -ClientProxyCore.mc.player.rotationYaw / 64.0F; + float f9 = ClientProxyCore.mc.player.rotationPitch / 64.0F; + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(f3, f5, f7).tex(f2 + f8, f2 + f9).endVertex(); + worldRenderer.pos(f4, f5, f7).tex(0.0F + f8, f2 + f9).endVertex(); + worldRenderer.pos(f4, f6, f7).tex(0.0F + f8, 0.0F + f9).endVertex(); + worldRenderer.pos(f3, f6, f7).tex(f2 + f8, 0.0F + f9).endVertex(); + tessellator.draw(); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + } + + @SideOnly(Side.CLIENT) + public static void renderFootprints(float partialTicks) + { + FootprintRenderer.renderFootprints(ClientProxyCore.mc.player, partialTicks); + MinecraftForge.EVENT_BUS.post(new ClientProxyCore.EventSpecialRender(partialTicks)); + BubbleRenderer.renderBubbles(ClientProxyCore.mc.player, partialTicks); + } + + @SideOnly(Side.CLIENT) + public static double getCameraZoom(double previous) + { + if (ConfigManagerCore.disableVehicleCameraChanges) + { + return previous; + } + + EntityPlayer player = Minecraft.getMinecraft().player; + if (player.getRidingEntity() != null && player.getRidingEntity() instanceof ICameraZoomEntity) + { + return ((ICameraZoomEntity) player.getRidingEntity()).getCameraZoom(); + } + + return previous; + } + + public static double armorDamageHook(EntityLivingBase entity) + { + if (entity instanceof EntityPlayer) + { + GCPlayerStats stats = GCPlayerStats.get(entity); + if (stats != null) + { + ItemStack shield = stats.getShieldControllerInSlot(); + if (shield != null && !shield.isEmpty() && shield.getItem() == VenusItems.basicItem && shield.getItemDamage() == 0) + { + return 0D; + } + } + } + return 1D; + } + + public static void setCurrentBuffer(BufferBuilder buffer) + { + renderBuilder.set(buffer); + } + + public static boolean isGrating(boolean orig, Block b) + { + return orig || (b instanceof BlockGrating && b != GCBlocks.grating && MinecraftForgeClient.getRenderLayer() == BlockRenderLayer.TRANSLUCENT); + } + + public static float armorDamageHookF(EntityLivingBase entity) + { + return (float) armorDamageHook(entity); + } + + @SideOnly(Side.CLIENT) + public static int addRainParticles(int result, int rendererUpdateCount, float f) + { + Minecraft mc = Minecraft.getMinecraft(); + World world = mc.world; + if (result == 0 || !(world.provider instanceof IWeatherProvider)) + { + // Either no rain or it's a vanilla dimension + return result; + } + IWeatherProvider moddedProvider = ((IWeatherProvider) world.provider); + + random.setSeed(rendererUpdateCount * 312987231L); + Entity entity = mc.getRenderViewEntity(); + BlockPos blockpos = new BlockPos(entity); + int i = 10; + double x = 0.0D; + double y = 0.0D; + double z = 0.0D; + double xx = 0.0D; + double yy = 0.0D; + double zz = 0.0D; + int j = 0; + int k = (int) (100.0F * f * f); + + if (mc.gameSettings.particleSetting == 1) + { + k >>= 1; + } else if (mc.gameSettings.particleSetting == 2) + { + k = 0; + } + + for (int l = 0; l < k; ++l) + { + BlockPos blockpos1 = world.getPrecipitationHeight(blockpos.add(random.nextInt(i) - random.nextInt(i), 0, random.nextInt(i) - random.nextInt(i))); + Biome biome = world.getBiome(blockpos1); + + if (blockpos1.getY() <= blockpos.getY() + i && blockpos1.getY() >= blockpos.getY() - i) + { + double xd = random.nextDouble(); + double zd = random.nextDouble(); + BlockPos blockpos2 = blockpos1.down(); + IBlockState iblockstate = world.getBlockState(blockpos2); + AxisAlignedBB axisalignedbb = iblockstate.getBoundingBox(world, blockpos2); + + if (iblockstate.getMaterial() != Material.LAVA && iblockstate.getBlock() != Blocks.MAGMA) + { + if (iblockstate.getMaterial() != Material.AIR) + { + ++j; + + x = blockpos2.getX() + xd; + y = blockpos2.getY() + 0.1D + axisalignedbb.maxY; + z = blockpos2.getZ() + zd; + if (random.nextInt(j) == 0) + { + xx = x; + yy = y - 1.0D; + zz = z; + } + + mc.effectRenderer.addEffect(moddedProvider.getParticle(mc.world, x, y, z)); + } + } else + { + mc.world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, blockpos1.getX() + xd, blockpos1.getY() + 0.1D - axisalignedbb.minY, blockpos1.getZ() + zd, 0.0D, 0.0D, 0.0D, new int[0]); + } + } + } + + if (moddedProvider.getSoundInterval(f) > 0) + { + if (j > 0 && random.nextInt(moddedProvider.getSoundInterval(f)) < rainSoundCounter++) + { + rainSoundCounter = 0; + + moddedProvider.weatherSounds(j, mc, world, blockpos, xx, yy, zz, random); + } + } else if (j > 0 && 0 < rainSoundCounter++) + { + rainSoundCounter = 0; + + moddedProvider.weatherSounds(j, mc, world, blockpos, xx, yy, zz, random); + } + + // Bypass vanilla code after returning from this + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/GCTriggers.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/GCTriggers.java new file mode 100644 index 00000000..3f4dbc66 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/GCTriggers.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.advancement; + +import java.lang.reflect.Method; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.advancements.ICriterionInstance; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.core.advancement.criterion.GenericTrigger; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; + +public class GCTriggers +{ + + public static final GenericTrigger LAUNCH_ROCKET = new GenericTrigger("launch_rocket") + { + + @Override + public ICriterionInstance deserializeInstance(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) + { + return new Instance(getId()) + { + + @Override + public boolean test(EntityPlayerMP player) + { + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + if (((EntitySpaceshipBase) player.getRidingEntity()).launchPhase >= EntitySpaceshipBase.EnumLaunchPhase.LAUNCHED.ordinal()) + { + return player.getRidingEntity().getPassengers().size() >= 1 && player.getRidingEntity().getPassengers().get(0) instanceof EntityPlayerMP; + } + } + return false; + } + }; + } + }; + public static final GenericTrigger FIND_MOON_BOSS = new GenericTrigger("boss_moon") + { + + @Override + public ICriterionInstance deserializeInstance(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) + { + return new Instance(getId()) + { + + @Override + public boolean test(EntityPlayerMP player) + { + for (Entity entity : player.world.loadedEntityList) + { + return entity instanceof EntitySkeletonBoss && entity.getDistanceSq(player) < 20 * 20; + } + return false; + } + }; + } + }; + public static final GenericTrigger CREATE_SPACE_STATION = new GenericTrigger("create_space_station") + { + + @Override + public ICriterionInstance deserializeInstance(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) + { + return new Instance(getId()) + { + + @Override + public boolean test(EntityPlayerMP player) + { + return !GCPlayerStats.get(player).getSpaceStationDimensionData().isEmpty(); + } + }; + } + }; + + public static void registerTriggers() + { + Method register = null; + try + { + Class clazz = CriteriaTriggers.class; + Method[] mm = clazz.getDeclaredMethods(); + for (Method m : mm) + { + Class[] params = m.getParameterTypes(); + if (params != null && params.length == 1 && params[0] == ICriterionTrigger.class) + { + register = m; + break; + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + + if (register != null) + { + try + { + register.invoke(null, GCTriggers.LAUNCH_ROCKET); + register.invoke(null, GCTriggers.FIND_MOON_BOSS); + register.invoke(null, GCTriggers.CREATE_SPACE_STATION); + } catch (Exception ignore) + { + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/criterion/GenericTrigger.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/criterion/GenericTrigger.java new file mode 100644 index 00000000..16d21312 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/criterion/GenericTrigger.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.advancement.criterion; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Map; +import java.util.Set; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.advancements.critereon.AbstractCriterionInstance; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; + +public abstract class GenericTrigger implements ICriterionTrigger +{ + + private final ResourceLocation id; + private final Map listeners = Maps.newHashMap(); + + public GenericTrigger(String id) + { + super(); + this.id = new ResourceLocation(Constants.ASSET_PREFIX, id); + } + + @Override + public ResourceLocation getId() + { + return id; + } + + @Override + public void addListener(PlayerAdvancements playerAdvancements, ICriterionTrigger.Listener listener) + { + Listeners listeners = this.listeners.get(playerAdvancements); + + if (listeners == null) + { + listeners = new Listeners(playerAdvancements); + this.listeners.put(playerAdvancements, listeners); + } + + listeners.add(listener); + } + + @Override + public void removeListener(PlayerAdvancements advancements, ICriterionTrigger.Listener listener) + { + Listeners listeners = this.listeners.get(advancements); + + if (listeners != null) + { + listeners.remove(listener); + + if (listeners.isEmpty()) + { + this.listeners.remove(advancements); + } + } + } + + @Override + public void removeAllListeners(PlayerAdvancements advancements) + { + listeners.remove(advancements); + } + + /** + * Trigger. + * + * @param playerMP the player + */ + public void trigger(EntityPlayerMP playerMP) + { + Listeners listeners = this.listeners.get(playerMP.getAdvancements()); + + if (listeners != null) + { + listeners.trigger(playerMP); + } + } + + public static abstract class Instance extends AbstractCriterionInstance + { + + public Instance(ResourceLocation resourceLocation) + { + super(resourceLocation); + } + + public abstract boolean test(EntityPlayerMP player); + } + + static class Listeners + { + + private final PlayerAdvancements playerAdvancements; + private final Set listeners = Sets.newHashSet(); + + public Listeners(PlayerAdvancements advancements) + { + playerAdvancements = advancements; + } + + public boolean isEmpty() + { + return listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player) + { + ArrayList list = null; + + for (ICriterionTrigger.Listener listener : listeners) + { + if (listener.getCriterionInstance() instanceof Instance) + { + if (((Instance) listener.getCriterionInstance()).test(player)) + { + if (list == null) + { + list = Lists.newArrayList(); + } + + list.add(listener); + } + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(playerAdvancements); + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvanced.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvanced.java new file mode 100644 index 00000000..44f13964 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvanced.java @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.lang.reflect.Method; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; + +/** + * An advanced block class that is to be extended for wrenching capabilities. + */ +public abstract class BlockAdvanced extends Block +{ + + public BlockAdvanced(Material material) + { + super(material); + this.setHardness(0.6f); + this.setResistance(2.5F); + // A default blast resistance for GC machines and tiles, similar to a + // bookshelf + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (hand != EnumHand.MAIN_HAND) + { + return false; + } + + ItemStack heldItem = playerIn.getHeldItem(hand); + + if (this.useWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + return true; + } + + if (playerIn.isSneaking()) + { + if (this.onSneakMachineActivated(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + return true; + } + } + + return this.onMachineActivated(worldIn, pos, state, playerIn, hand, heldItem, side, hitX, hitY, hitZ); + } + + protected boolean useWrench(World worldIn, BlockPos pos, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (heldItem.getItem() == GCItems.wrench) + { + if (playerIn.isSneaking()) + { + if (this.onSneakUseWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + playerIn.swingArm(hand); + return true; + } + return false; + } + + playerIn.swingArm(hand); + return true; + } + /* + * Check if the player is holding a wrench or an electric item. If so, + * call the wrench event. + */ + if (this.isUsableWrench(playerIn, heldItem, pos)) + { + this.damageWrench(playerIn, heldItem, pos); + + if (playerIn.isSneaking()) + { + if (this.onSneakUseWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + playerIn.swingArm(hand); + return true; + } + } + + if (this.onUseWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + playerIn.swingArm(hand); + return true; + } + } + + return false; + } + + /** + * A function that denotes if an itemStack is a wrench that can be used. + * Override this for more wrench compatibility. Compatible with Buildcraft + * and IC2 wrench API via reflection. + * + * @return True if it is a wrench. + */ + public boolean isUsableWrench(EntityPlayer entityPlayer, ItemStack itemStack, BlockPos pos) + { + if (entityPlayer != null && itemStack != null) + { + Item item = itemStack.getItem(); + if (item == GCItems.wrench) + return false; + + Class wrenchClass = item.getClass(); + + /** + * Buildcraft + */ + try + { + Method methodCanWrench = wrenchClass.getMethod("canWrench", EntityPlayer.class, BlockPos.class); + return (Boolean) methodCanWrench.invoke(item, entityPlayer, pos); + } catch (NoClassDefFoundError e) + { + } catch (Exception e) + { + } + + if (CompatibilityManager.isIc2Loaded()) + { + /** + * Industrialcraft + */ + if (wrenchClass == CompatibilityManager.classIC2wrench || wrenchClass == CompatibilityManager.classIC2wrenchElectric) + { + return itemStack.getItemDamage() < itemStack.getMaxDamage(); + } + } + } + + return false; + } + + /** + * This function damages a wrench. Works with Buildcraft and Industrialcraft + * wrenches. + * + * @return True if damage was successfull. + */ + public boolean damageWrench(EntityPlayer entityPlayer, ItemStack itemStack, BlockPos pos) + { + if (this.isUsableWrench(entityPlayer, itemStack, pos)) + { + Class wrenchClass = itemStack.getItem().getClass(); + + /** + * Buildcraft + */ + try + { + Method methodWrenchUsed = wrenchClass.getMethod("wrenchUsed", EntityPlayer.class, BlockPos.class); + methodWrenchUsed.invoke(itemStack.getItem(), entityPlayer, pos); + return true; + } catch (Exception e) + { + } + + /** + * Industrialcraft + */ + try + { + if (wrenchClass == CompatibilityManager.classIC2wrench || wrenchClass == CompatibilityManager.classIC2wrenchElectric) + { + Method methodWrenchDamage = wrenchClass.getMethod("damage", ItemStack.class, Integer.TYPE, EntityPlayer.class); + methodWrenchDamage.invoke(itemStack.getItem(), itemStack, 1, entityPlayer); + return true; + } + } catch (Exception e) + { + } + } + + return false; + } + + /** + * Called when the machine is right clicked by the player + * + * @return True if something happens + */ + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return false; + } + + /** + * Called when the machine is being wrenched by a player while sneaking. + * + * @return True if something happens + */ + public boolean onSneakMachineActivated(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return false; + } + + /** + * Called when a player uses a wrench on the machine + * + * @return True if some happens + */ + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return false; + } + + /** + * Called when a player uses a wrench on the machine while sneaking. Only + * works with the UE wrench. + * + * @return True if some happens + */ + public boolean onSneakUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return this.onUseWrench(world, pos, entityPlayer, hand, heldItem, side, hitX, hitY, hitZ); + } + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return this.isNormalCube(base_state, world, pos); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvancedTile.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvancedTile.java new file mode 100644 index 00000000..6187bfd0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvancedTile.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.tile.ILockable; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class BlockAdvancedTile extends BlockAdvanced implements ITileEntityProvider +{ + + public BlockAdvancedTile(Material par3Material) + { + super(par3Material); + this.hasTileEntity = true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return null; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + this.dropEntireInventory(worldIn, pos, state); + super.breakBlock(worldIn, pos, state); + } + + public void dropEntireInventory(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + if (tileEntity instanceof ILockable) + { + ((ILockable) tileEntity).clearLockedInventory(); + } + + if (tileEntity != null) + { + if (tileEntity instanceof IInventory) + { + IInventory inventory = (IInventory) tileEntity; + + Random syncRandom = GCCoreUtil.getRandom(pos); + + for (int var6 = 0; var6 < inventory.getSizeInventory(); ++var6) + { + ItemStack var7 = inventory.getStackInSlot(var6); + + if (var7 != null && !var7.isEmpty()) + { + float var8 = syncRandom.nextFloat() * 0.8F + 0.1F; + float var9 = syncRandom.nextFloat() * 0.8F + 0.1F; + float var10 = syncRandom.nextFloat() * 0.8F + 0.1F; + + while (!var7.isEmpty()) + { + EntityItem var12 = new EntityItem(worldIn, pos.getX() + var8, pos.getY() + var9, pos.getZ() + var10, var7.splitStack(syncRandom.nextInt(21) + 10)); + float var13 = 0.05F; + var12.motionX = (float) syncRandom.nextGaussian() * var13; + var12.motionY = (float) syncRandom.nextGaussian() * var13 + 0.2F; + var12.motionZ = (float) syncRandom.nextGaussian() * var13; + worldIn.spawnEntity(var12); + } + } + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockFrame.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockFrame.java new file mode 100644 index 00000000..09235fba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockFrame.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class BlockAirLockFrame extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + private enum EnumAirLockType implements IStringSerializable + { + + AIR_LOCK_FRAME(0, "air_lock_frame"), AIR_LOCK_CONTROLLER(1, "air_lock_controller"); + + private final int meta; + private final String name; + + EnumAirLockType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumAirLockType[] values = values(); + + public static EnumAirLockType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public static final PropertyEnum AIR_LOCK_TYPE = PropertyEnum.create("airlocktype", EnumAirLockType.class); + + public BlockAirLockFrame(String assetName) + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(AIR_LOCK_TYPE, EnumAirLockType.AIR_LOCK_FRAME)); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, EnumAirLockType.AIR_LOCK_FRAME.getMeta())); + list.add(new ItemStack(this, 1, EnumAirLockType.AIR_LOCK_CONTROLLER.getMeta())); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityAirLockController && placer instanceof EntityPlayer) + { + ((TileEntityAirLockController) tile).ownerName = PlayerUtil.getName(((EntityPlayer) placer)); + } + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + if (state.getValue(AIR_LOCK_TYPE).getMeta() == EnumAirLockType.AIR_LOCK_FRAME.getMeta()) + { + return new TileEntityAirLock(); + } else + { + return new TileEntityAirLockController(); + } + } + + @Override + public boolean canConnectRedstone(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + + if (state.getValue(AIR_LOCK_TYPE).getMeta() == EnumAirLockType.AIR_LOCK_CONTROLLER.getMeta() && tile instanceof TileEntityAirLockController) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + return false; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityAirLockController) + { + ((TileEntityAirLockController) tile).unsealAirLock(); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AIR_LOCK_TYPE, EnumAirLockType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(AIR_LOCK_TYPE).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, AIR_LOCK_TYPE); + } + + @Override + public String getShiftDescription(int itemDamage) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int itemDamage) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockWall.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockWall.java new file mode 100644 index 00000000..830ec499 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockWall.java @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockBreakable; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockAirLockWall extends BlockBreakable implements IPartialSealableBlock, ISortableBlock +{ + + public static final PropertyEnum CONNECTION_TYPE = PropertyEnum.create("connection", EnumAirLockSealConnection.class); + protected static final AxisAlignedBB AABB_X = new AxisAlignedBB(0.25, 0.0, 0.0, 0.75, 1.0, 1.0); + protected static final AxisAlignedBB AABB_Z = new AxisAlignedBB(0.0, 0.0, 0.25, 1.0, 1.0, 0.75); + protected static final AxisAlignedBB AABB_FLAT = new AxisAlignedBB(0.0, 0.25, 0.0, 1.0, 0.75, 1.0); + + public enum EnumAirLockSealConnection implements IStringSerializable + { + + X("x"), Z("z"), FLAT("flat"); + + private final String name; + + EnumAirLockSealConnection(String name) + { + this.name = name; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockAirLockWall(String assetName) + { + super(Material.IRON, false); + this.setTickRandomly(true); + this.setHardness(1000.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (getConnection(source, pos)) + { + case X: + return AABB_X; + case Z: + return AABB_Z; + default: + case FLAT: + return AABB_FLAT; + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + +// @Override +// public Item getItem(World world, BlockPos pos) +// { +// return null; +// } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, CONNECTION_TYPE); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(CONNECTION_TYPE, getConnection(worldIn, pos)); + } + + private EnumAirLockSealConnection getConnection(IBlockAccess worldIn, BlockPos pos) + { + EnumAirLockSealConnection connection; + + Block frameID = GCBlocks.airLockFrame; + Block sealID = GCBlocks.airLockSeal; + + Block idXMin = worldIn.getBlockState(pos.offset(EnumFacing.WEST)).getBlock(); + Block idXMax = worldIn.getBlockState(pos.offset(EnumFacing.WEST)).getBlock(); + + if (idXMin != frameID && idXMax != frameID && idXMin != sealID && idXMax != sealID) + { + connection = EnumAirLockSealConnection.X; + } else + { + int adjacentCount = 0; + + for (EnumFacing dir : EnumFacing.HORIZONTALS) + { + Block blockID = worldIn.getBlockState(pos.offset(dir)).getBlock(); + + if (blockID == GCBlocks.airLockFrame || blockID == GCBlocks.airLockSeal) + { + adjacentCount++; + } + } + + if (adjacentCount == 4) + { + connection = EnumAirLockSealConnection.FLAT; + } else + { + connection = EnumAirLockSealConnection.Z; + } + } + + return connection; + } + + @Override + public int getMetaFromState(IBlockState state) + { + return 0; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAluminumWire.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAluminumWire.java new file mode 100644 index 00000000..11a8b1d6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAluminumWire.java @@ -0,0 +1,599 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWire; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWireSwitch; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockAluminumWire extends BlockTransmitter implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum WIRE_TYPE = PropertyEnum.create("wiretype", EnumWireType.class); + private static final float MIN = 0.38F; + private static final float MINH = 0.3F; + private static final float MAX = 0.62F; + private static final float MAXH = 0.7F; + protected static final AxisAlignedBB[] BOUNDING_BOXES = new AxisAlignedBB[] + { + + new AxisAlignedBB(MIN, MIN, MIN, MAX, MAX, MAX), // No connection + // 0000000 + new AxisAlignedBB(MIN, MIN, MIN, MAX, MAX, 1.0D), // South 0000001 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, MAX, MAX), // West 0000010 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, MAX, 1.0D), // South West + // 0000011 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, MAX, MAX), // North 0000100 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, MAX, 1.0D), // North South + // 0000101 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, MAX, MAX), // North West + // 0000110 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, MAX, 1.0D), // North South + // West 0000111 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, MAX, MAX), // East 0001000 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, MAX, 1.0D), // East South + // 0001001 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, MAX, MAX), // West East + // 0001010 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, MAX, 1.0D), // South West + // East 0001011 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, MAX, MAX), // North East + // 0001100 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, MAX, 1.0D), // North South + // East 0001101 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, MAX, MAX), // North East + // West 0001110 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, MAX, 1.0D), // North South + // East West + // 0001111 + + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, MAX, MAX), // Down 0010000 + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, MAX, 1.0D), // Down South + // 0010001 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, MAX, MAX), // Down West + // 0010010 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, MAX, 1.0D), // Down South + // West 0010011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, MAX, MAX), // Down North + // 0010100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, MAX, 1.0D), // Down North + // South 0010101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, MAX, MAX), // Down North + // West 0010110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, MAX, 1.0D), // Down North + // South West + // 0010111 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, MAX, MAX), // Down East + // 0011000 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, MAX, 1.0D), // Down East + // South 0011001 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, MAX, MAX), // Down West + // East 0011010 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, MAX, 1.0D), // Down South + // West East + // 0011011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, MAX, MAX), // Down North + // East 0011100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, MAX, 1.0D), // Down North + // South East + // 0011101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAX, MAX), // Down North + // East West + // 0011110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAX, 1.0D), // Down North + // South East + // West + // 0011111 + + new AxisAlignedBB(MIN, MIN, MIN, MAX, 1.0D, MAX), // Up 0100000 + new AxisAlignedBB(MIN, MIN, MIN, MAX, 1.0D, 1.0D), // Up South + // 0100001 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, 1.0D, MAX), // Up West + // 0100010 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, 1.0D, 1.0D), // Up South West + // 0100011 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, 1.0D, MAX), // Up North + // 0100100 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, 1.0D, 1.0D), // Up North + // South 0100101 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, 1.0D, MAX), // Up North West + // 0100110 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, 1.0D, 1.0D), // Up North + // South West + // 0100111 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, 1.0D, MAX), // Up East + // 0101000 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, 1.0D, 1.0D), // Up East South + // 0101001 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, 1.0D, MAX), // Up West East + // 0101010 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, 1.0D, 1.0D), // Up South + // West East + // 0101011 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, 1.0D, MAX), // Up North East + // 0101100 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // 0101101 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, 1.0D, MAX), // Up North + // East West + // 0101110 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // West + // 0101111 + + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, 1.0D, MAX), // Up Down + // 0110000 + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, 1.0D, 1.0D), // Up Down South + // 0110001 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, 1.0D, MAX), // Up Down West + // 0110010 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, 1.0D, 1.0D), // Up Down + // South West + // 0110011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, 1.0D, MAX), // Up Down North + // 0110100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, 1.0D, 1.0D), // Up Down + // North South + // 0110101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, 1.0D, MAX), // Up Down + // North West + // 0110110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, 1.0D, 1.0D), // Up Down + // North South + // West + // 0110111 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, 1.0D, MAX), // Up Down East + // 0111000 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, 1.0D, 1.0D), // Up Down East + // South + // 0111001 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, 1.0D, MAX), // Up Down West + // East 0111010 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, 1.0D, 1.0D), // Up Down + // South West + // East + // 0111011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, 1.0D, MAX), // Up Down + // North East + // 0111100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // Up Down + // North South + // East + // 0111101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, MAX), // Up Down + // North East + // West + // 0111110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // Up Down + // North + // South East + // West + // 0111111 + + new AxisAlignedBB(MINH, MINH, MINH, MAXH, MAXH, MAXH), // No + // connection + // 1000000 + new AxisAlignedBB(MINH, MINH, MINH, MAXH, MAXH, 1.0D), // South + // 1000001 + new AxisAlignedBB(0.0D, MINH, MINH, MAXH, MAXH, MAXH), // West + // 1000010 + new AxisAlignedBB(0.0D, MINH, MINH, MAXH, MAXH, 1.0D), // South West + // 1000011 + new AxisAlignedBB(MINH, MINH, 0.0D, MAXH, MAXH, MAXH), // North + // 1000100 + new AxisAlignedBB(MINH, MINH, 0.0D, MAXH, MAXH, 1.0D), // North + // South + // 1000101 + new AxisAlignedBB(0.0D, MINH, 0.0D, MAXH, MAXH, MAXH), // North West + // 1000110 + new AxisAlignedBB(0.0D, MINH, 0.0D, MAXH, MAXH, 1.0D), // North + // South West + // 1000111 + new AxisAlignedBB(MINH, MINH, MINH, 1.0D, MAXH, MAXH), // East + // 1001000 + new AxisAlignedBB(MINH, MINH, MINH, 1.0D, MAXH, 1.0D), // East South + // 1001001 + new AxisAlignedBB(0.0D, MINH, MINH, 1.0D, MAXH, MAXH), // West East + // 1001010 + new AxisAlignedBB(0.0D, MINH, MINH, 1.0D, MAXH, 1.0D), // South West + // East + // 1001011 + new AxisAlignedBB(MINH, MINH, 0.0D, 1.0D, MAXH, MAXH), // North East + // 1001100 + new AxisAlignedBB(MINH, MINH, 0.0D, 1.0D, MAXH, 1.0D), // North + // South East + // 1001101 + new AxisAlignedBB(0.0D, MINH, 0.0D, 1.0D, MAXH, MAXH), // North East + // West + // 1001110 + new AxisAlignedBB(0.0D, MINH, 0.0D, 1.0D, MAXH, 1.0D), // North + // South East + // West + // 1001111 + + new AxisAlignedBB(MINH, 0.0D, MINH, MAXH, MAXH, MAXH), // Down + // 1010000 + new AxisAlignedBB(MINH, 0.0D, MINH, MAXH, MAXH, 1.0D), // Down South + // 1010001 + new AxisAlignedBB(0.0D, 0.0D, MINH, MAXH, MAXH, MAXH), // Down West + // 1010010 + new AxisAlignedBB(0.0D, 0.0D, MINH, MAXH, MAXH, 1.0D), // Down South + // West + // 1010011 + new AxisAlignedBB(MINH, 0.0D, 0.0D, MAXH, MAXH, MAXH), // Down North + // 1010100 + new AxisAlignedBB(MINH, 0.0D, 0.0D, MAXH, MAXH, 1.0D), // Down North + // South + // 1010101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAXH, MAXH, MAXH), // Down North + // West + // 1010110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAXH, MAXH, 1.0D), // Down North + // South West + // 1010111 + new AxisAlignedBB(MINH, 0.0D, MINH, 1.0D, MAXH, MAXH), // Down East + // 1011000 + new AxisAlignedBB(MINH, 0.0D, MINH, 1.0D, MAXH, 1.0D), // Down East + // South + // 1011001 + new AxisAlignedBB(0.0D, 0.0D, MINH, 1.0D, MAXH, MAXH), // Down West + // East + // 1011010 + new AxisAlignedBB(0.0D, 0.0D, MINH, 1.0D, MAXH, 1.0D), // Down South + // West East + // 1011011 + new AxisAlignedBB(MINH, 0.0D, 0.0D, 1.0D, MAXH, MAXH), // Down North + // East + // 1011100 + new AxisAlignedBB(MINH, 0.0D, 0.0D, 1.0D, MAXH, 1.0D), // Down North + // South East + // 1011101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAXH, MAXH), // Down North + // East West + // 1011110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAXH, 1.0D), // Down North + // South East + // West + // 1011111 + + new AxisAlignedBB(MINH, MINH, MINH, MAXH, 1.0D, MAXH), // Up 1100000 + new AxisAlignedBB(MINH, MINH, MINH, MAXH, 1.0D, 1.0D), // Up South + // 1100001 + new AxisAlignedBB(0.0D, MINH, MINH, MAXH, 1.0D, MAXH), // Up West + // 1100010 + new AxisAlignedBB(0.0D, MINH, MINH, MAXH, 1.0D, 1.0D), // Up South + // West + // 1100011 + new AxisAlignedBB(MINH, MINH, 0.0D, MAXH, 1.0D, MAXH), // Up North + // 1100100 + new AxisAlignedBB(MINH, MINH, 0.0D, MAXH, 1.0D, 1.0D), // Up North + // South + // 1100101 + new AxisAlignedBB(0.0D, MINH, 0.0D, MAXH, 1.0D, MAXH), // Up North + // West + // 1100110 + new AxisAlignedBB(0.0D, MINH, 0.0D, MAXH, 1.0D, 1.0D), // Up North + // South West + // 1100111 + new AxisAlignedBB(MINH, MINH, MINH, 1.0D, 1.0D, MAXH), // Up East + // 1101000 + new AxisAlignedBB(MINH, MINH, MINH, 1.0D, 1.0D, 1.0D), // Up East + // South + // 1101001 + new AxisAlignedBB(0.0D, MINH, MINH, 1.0D, 1.0D, MAXH), // Up West + // East + // 1101010 + new AxisAlignedBB(0.0D, MINH, MINH, 1.0D, 1.0D, 1.0D), // Up South + // West East + // 1101011 + new AxisAlignedBB(MINH, MINH, 0.0D, 1.0D, 1.0D, MAXH), // Up North + // East + // 1101100 + new AxisAlignedBB(MINH, MINH, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // 1101101 + new AxisAlignedBB(0.0D, MINH, 0.0D, 1.0D, 1.0D, MAXH), // Up North + // East West + // 1101110 + new AxisAlignedBB(0.0D, MINH, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // West + // 1101111 + + new AxisAlignedBB(MINH, 0.0D, MINH, MAXH, 1.0D, MAXH), // Up Down + // 1110000 + new AxisAlignedBB(MINH, 0.0D, MINH, MAXH, 1.0D, 1.0D), // Up Down + // South + // 1110001 + new AxisAlignedBB(0.0D, 0.0D, MINH, MAXH, 1.0D, MAXH), // Up Down + // West + // 1110010 + new AxisAlignedBB(0.0D, 0.0D, MINH, MAXH, 1.0D, 1.0D), // Up Down + // South West + // 1110011 + new AxisAlignedBB(MINH, 0.0D, 0.0D, MAXH, 1.0D, MAXH), // Up Down + // North + // 1110100 + new AxisAlignedBB(MINH, 0.0D, 0.0D, MAXH, 1.0D, 1.0D), // Up Down + // North + // South + // 1110101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAXH, 1.0D, MAXH), // Up Down + // North West + // 1110110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAXH, 1.0D, 1.0D), // Up Down + // North + // South West + // 1110111 + new AxisAlignedBB(MINH, 0.0D, MINH, 1.0D, 1.0D, MAXH), // Up Down + // East + // 1111000 + new AxisAlignedBB(MINH, 0.0D, MINH, 1.0D, 1.0D, 1.0D), // Up Down + // East South + // 1111001 + new AxisAlignedBB(0.0D, 0.0D, MINH, 1.0D, 1.0D, MAXH), // Up Down + // West East + // 1111010 + new AxisAlignedBB(0.0D, 0.0D, MINH, 1.0D, 1.0D, 1.0D), // Up Down + // South West + // East + // 1111011 + new AxisAlignedBB(MINH, 0.0D, 0.0D, 1.0D, 1.0D, MAXH), // Up Down + // North East + // 1111100 + new AxisAlignedBB(MINH, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // Up Down + // North + // South East + // 1111101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, MAXH), // Up Down + // North East + // West + // 1111110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; // Up Down + // North + // South + // East West + // 1111111 + + public enum EnumWireType implements IStringSerializable + { + + ALUMINUM_WIRE(0, "alu_wire"), ALUMINUM_WIRE_HEAVY(1, "alu_wire_heavy"), ALUMINUM_WIRE_SWITCHED(2, "alu_wire_switch"), ALUMINUM_WIRE_SWITCHED_HEAVY(3, "alu_wire_switch_heavy"); + + private final int meta; + private final String name; + + EnumWireType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumWireType[] values = values(); + + public static EnumWireType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockAluminumWire(String assetName) + { + super(Material.CLOTH); + this.setSoundType(SoundType.CLOTH); + this.setResistance(0.2F); + this.setHardness(0.075F); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + return BOUNDING_BOXES[getBoundingBoxIdx(state)]; + } + + private static int getBoundingBoxIdx(IBlockState state) + { + int i = 0; + + if (state.getValue(NORTH).booleanValue()) + { + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if (state.getValue(EAST).booleanValue()) + { + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if (state.getValue(SOUTH).booleanValue()) + { + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if (state.getValue(WEST).booleanValue()) + { + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + if (state.getValue(DOWN).booleanValue()) + { + i |= 1 << 4; + } + + if (state.getValue(UP).booleanValue()) + { + i |= 1 << 5; + } + + // Is heavy: + if (((EnumWireType) state.getValue(WIRE_TYPE)).ordinal() % 2 == 1) + { + i |= 1 << 6; + } + + return i; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + TileEntity tile; + switch (metadata) + { + case 0: + tile = new TileEntityAluminumWire(1); + break; + case 1: + tile = new TileEntityAluminumWire(2); + break; + case 2: + tile = new TileEntityAluminumWireSwitch(1); + break; + case 3: + tile = new TileEntityAluminumWireSwitch(2); + break; + default: + return null; + } + + return tile; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + list.add(new ItemStack(this, 1, 2)); + list.add(new ItemStack(this, 1, 3)); + } + + @Override + public NetworkType getNetworkType(IBlockState state) + { + return NetworkType.POWER; + } + + @Override + public String getShiftDescription(int itemDamage) + { + switch (itemDamage) + { + case 0: + return GCCoreUtil.translate("tile.aluminum_wire.alu_wire.description"); + case 1: + return GCCoreUtil.translate("tile.aluminum_wire.alu_wire_heavy.description"); + case 2: + return GCCoreUtil.translate("tile.aluminum_wire.alu_wire_switch.description"); + case 3: + return GCCoreUtil.translate("tile.aluminum_wire.alu_wire_switch_heavy.description"); + } + return ""; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(WIRE_TYPE, EnumWireType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumWireType) state.getValue(WIRE_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, WIRE_TYPE, UP, DOWN, NORTH, EAST, SOUTH, WEST); + } + + @Override + public boolean showDescription(int itemDamage) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.TRANSMITTER; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasic.java new file mode 100644 index 00000000..211681d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasic.java @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +/** + * Metadata: 3 = Tin Decoration Block 1; 4 = Tin Decoration Block 2; 5 = Copper + * Ore; 6 = Tin Ore; 7 = Aluminium Ore; 8 = Silicon Ore; 9 = Copper Block; 10 = + * Tin Block; 11 = Aluminium Block; 12 = Meteoric Iron Block; 13 = Silicon + * Block; + */ +public class BlockBasic extends Block implements IDetectableResource, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE = PropertyEnum.create("basictype", EnumBlockBasic.class); + + public enum EnumBlockBasic implements IStringSerializable + { + + ALUMINUM_DECORATION_BLOCK_0(3, "deco_block_0"), + ALUMINUM_DECORATION_BLOCK_1(4, "deco_block_1"), + ORE_COPPER(5, "ore_copper_gc"), + ORE_TIN(6, "ore_tin_gc"), + ORE_ALUMINUM(7, "ore_aluminum_gc"), + ORE_SILICON(8, "ore_silicon"), + DECO_BLOCK_COPPER(9, "block_copper_gc"), + DECO_BLOCK_TIN(10, "block_tin_gc"), + DECO_BLOCK_ALUMINUM(11, "block_aluminum_gc"), + DECO_BLOCK_METEOR_IRON(12, "block_meteoric_iron_gc"), + DECO_BLOCK_SILICON(13, "block_silicon_gc"); + + private final int meta; + private final String name; + + EnumBlockBasic(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + public static EnumBlockBasic byMetadata(int meta) + { + int val = meta - 3; + if (val < 0 || val >= values().length) + { + return ALUMINUM_DECORATION_BLOCK_0; + } + return values()[val]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockBasic(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.blockResistance = 15F; + this.setDefaultState(this.blockState.getBaseState().withProperty(BASIC_TYPE, EnumBlockBasic.ALUMINUM_DECORATION_BLOCK_0)); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + switch (getMetaFromState(state)) + { + case 8: + return GCItems.basicItem; + default: + return Item.getItemFromBlock(this); + } + } + + @Override + public int damageDropped(IBlockState state) + { + switch (getMetaFromState(state)) + { + case 8: + return 2; + default: + return getMetaFromState(state); + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + int bonus = 0; + if (ConfigManagerCore.quickMode && this.getMetaFromState(state) == 8) + { + bonus = 1; + } + if (fortune > 0 && Item.getItemFromBlock(this) != this.getItemDropped(state, random, fortune)) + { + int j = random.nextInt(fortune + 2) - 1; + + if (j < 0) + { + j = 0; + } + + return this.quantityDropped(random) * (j + 1) + bonus; + } else + { + return this.quantityDropped(random) + bonus; + } + } + + @Override + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) + { + int metadata = getMetaFromState(world.getBlockState(pos)); + + if (metadata < 5) + { + return 2.0F; + // Decoration blocks are soft, like cauldrons or wood + } else if (metadata == 12) + { + return 8.0F; + // Meteoric Iron is tougher than diamond + } else if (metadata > 8) + { + return 6.0F; + // Blocks of metal are tough - like diamond blocks in vanilla + } + + return super.getExplosionResistance(world, pos, exploder, explosion); + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + int metadata = getMetaFromState(blockState); + + if (metadata == 5 || metadata == 6) + { + return 5.0F; + } + + if (metadata == 7) + { + return 6.0F; + } + + if (metadata == 8) + { + return 3.0F; + } + + return this.blockHardness; + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int var4 = 3; var4 <= 13; ++var4) + { + list.add(new ItemStack(this, 1, var4)); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + EnumBlockBasic type = state.getValue(BASIC_TYPE); + switch (type) + { + case ORE_COPPER: + case ORE_TIN: + case ORE_ALUMINUM: + case ORE_SILICON: + return true; + default: + return false; + } + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_SILICON) + { + return new ItemStack(Item.getItemFromBlock(this), 1, EnumBlockBasic.ORE_SILICON.getMeta()); + } + + return super.getPickBlock(state, target, world, pos, player); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE, EnumBlockBasic.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasic) state.getValue(BASIC_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + switch (meta) + { + case 3: + case 4: + return EnumSortCategoryBlock.DECORATION; + case 5: + case 6: + case 7: + case 8: + return EnumSortCategoryBlock.ORE; + case 9: + case 10: + case 11: + case 12: + case 13: + return EnumSortCategoryBlock.INGOT_BLOCK; + } + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + int meta = this.getMetaFromState(state); + if (meta == 8) + { + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 2, 5); + } + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasicMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasicMoon.java new file mode 100644 index 00000000..29af65f9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasicMoon.java @@ -0,0 +1,400 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.block.IPlantableBlock; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; + +import com.google.common.base.Predicate; + +public class BlockBasicMoon extends Block implements IDetectableResource, IPlantableBlock, ITerraformableBlock, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE_MOON = PropertyEnum.create("basictypemoon", EnumBlockBasicMoon.class); + + public enum EnumBlockBasicMoon implements IStringSerializable + { + + ORE_COPPER_MOON(0, "ore_copper_moon"), + ORE_TIN_MOON(1, "ore_tin_moon"), + ORE_CHEESE_MOON(2, "ore_cheese_moon"), + MOON_DIRT(3, "moon_dirt_moon"), + MOON_STONE(4, "moon_stone"), + MOON_TURF(5, "moon_turf"), + ORE_SAPPHIRE(6, "ore_sapphire_moon"), + MOON_DUNGEON_BRICK(14, "moon_dungeon_brick"); + + private final int meta; + private final String name; + + EnumBlockBasicMoon(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockBasicMoon[] values = values(); + + public static EnumBlockBasicMoon byMetadata(int meta) + { + if (meta < 7) + { + return values[meta]; + } + + return MOON_DUNGEON_BRICK; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockBasicMoon(String assetName) + { + super(Material.ROCK); + this.blockHardness = 1.5F; + this.blockResistance = 2.5F; + this.setDefaultState(this.blockState.getBaseState().withProperty(BASIC_TYPE_MOON, EnumBlockBasicMoon.ORE_COPPER_MOON)); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) + { + EnumBlockBasicMoon type = world.getBlockState(pos).getValue(BASIC_TYPE_MOON); + + if (type == EnumBlockBasicMoon.MOON_DUNGEON_BRICK) + { + return 40.0F; + } else if (type == EnumBlockBasicMoon.MOON_STONE) + { + return 6.0F; + } else if (type == EnumBlockBasicMoon.ORE_COPPER_MOON || type == EnumBlockBasicMoon.ORE_TIN_MOON || type == EnumBlockBasicMoon.ORE_SAPPHIRE || type == EnumBlockBasicMoon.ORE_CHEESE_MOON) + { + return 3.0F; + } + + return this.blockResistance / 5.0F; + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + EnumBlockBasicMoon type = blockState.getValue(BASIC_TYPE_MOON); + + if (type == EnumBlockBasicMoon.MOON_DIRT || type == EnumBlockBasicMoon.MOON_TURF) + { + return 0.5F; + } + + if (type == EnumBlockBasicMoon.MOON_DUNGEON_BRICK) + { + return 4.0F; + } + + if (type == EnumBlockBasicMoon.ORE_COPPER_MOON || type == EnumBlockBasicMoon.ORE_TIN_MOON || type == EnumBlockBasicMoon.ORE_SAPPHIRE) + { + return 5.0F; + } + + if (type == EnumBlockBasicMoon.ORE_CHEESE_MOON) + { + return 3.0F; + } + + return this.blockHardness; + } + + @Override + public boolean canHarvestBlock(IBlockAccess world, BlockPos pos, EntityPlayer player) + { + IBlockState bs = world.getBlockState(pos); + if (bs.getBlock() != this) + return false; + EnumBlockBasicMoon type = bs.getValue(BASIC_TYPE_MOON); + if (type == EnumBlockBasicMoon.MOON_DIRT || type == EnumBlockBasicMoon.MOON_TURF) + { + return true; + } + + return super.canHarvestBlock(world, pos, player); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + switch (type) + { + case ORE_CHEESE_MOON: + return GCItems.cheeseCurd; + case ORE_SAPPHIRE: + return GCItems.itemBasicMoon; + default: + return Item.getItemFromBlock(this); + } + } + + @Override + public int damageDropped(IBlockState state) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + if (type == EnumBlockBasicMoon.ORE_CHEESE_MOON) + { + return 0; + } else if (type == EnumBlockBasicMoon.ORE_SAPPHIRE) + { + return 2; + } else + { + return getMetaFromState(state); + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + switch (type) + { + case ORE_CHEESE_MOON: + if (fortune >= 1) + { + return (random.nextFloat() < fortune * 0.29F - 0.25F) ? 2 : 1; + } + return 1; + default: + return 1; + } + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (EnumBlockBasicMoon type : EnumBlockBasicMoon.values()) + { + list.add(new ItemStack(this, 1, type.getMeta())); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + switch (type) + { + case ORE_CHEESE_MOON: + case ORE_COPPER_MOON: + case ORE_SAPPHIRE: + case ORE_TIN_MOON: + return true; + default: + return false; + } + } + + @Override + public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) + { + EnumBlockBasicMoon type = state.getValue(BASIC_TYPE_MOON); + + if (type != EnumBlockBasicMoon.MOON_TURF) + { + return false; + } + + plantable.getPlant(world, pos.offset(EnumFacing.UP)); + + return plantable instanceof BlockFlower; + } + + @Override + public int requiredLiquidBlocksNearby() + { + return 4; + } + + @Override + public boolean isPlantable(IBlockState state) + { + return state.getValue(BASIC_TYPE_MOON) == EnumBlockBasicMoon.MOON_TURF; + + } + + @Override + public boolean isTerraformable(World world, BlockPos pos) + { + EnumBlockBasicMoon type = world.getBlockState(pos).getValue(BASIC_TYPE_MOON); + + if (type == EnumBlockBasicMoon.MOON_TURF) + { + BlockPos above = pos.offset(EnumFacing.UP); + IBlockState stateAbove = world.getBlockState(above); + return stateAbove.getBlock().isAir(stateAbove, world, above); + } + + return false; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state)); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + + if (!worldIn.isRemote && type == EnumBlockBasicMoon.MOON_TURF) + { + Map> footprintChunkMap = TickHandlerServer.serverFootprintMap.get(GCCoreUtil.getDimensionID(worldIn)); + + if (footprintChunkMap != null) + { + long chunkKey = ChunkPos.asLong(pos.getX() >> 4, pos.getZ() >> 4); + List footprintList = footprintChunkMap.get(chunkKey); + + if (footprintList != null && !footprintList.isEmpty()) + { + List toRemove = new ArrayList(); + + for (Footprint footprint : footprintList) + { + if (footprint.position.x > pos.getX() && footprint.position.x < pos.getX() + 1 && footprint.position.z > pos.getZ() && footprint.position.z < pos.getZ() + 1) + { + toRemove.add(footprint); + } + } + + if (!toRemove.isEmpty()) + { + footprintList.removeAll(toRemove); + } + } + } + + TickHandlerServer.footprintBlockChanges.add(new BlockVec3Dim(pos, GCCoreUtil.getDimensionID(worldIn))); + } + } + + @Override + public boolean isReplaceableOreGen(IBlockState state, IBlockAccess world, BlockPos pos, Predicate target) + { + EnumBlockBasicMoon type = state.getValue(BASIC_TYPE_MOON); + return type == EnumBlockBasicMoon.MOON_STONE || type == EnumBlockBasicMoon.MOON_DIRT; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE_MOON, EnumBlockBasicMoon.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE_MOON); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) getStateFromMeta(meta).getValue(BASIC_TYPE_MOON)); + switch (type) + { + case ORE_CHEESE_MOON: + case ORE_COPPER_MOON: + case ORE_SAPPHIRE: + case ORE_TIN_MOON: + return EnumSortCategoryBlock.ORE; + case MOON_DUNGEON_BRICK: + return EnumSortCategoryBlock.BRICKS; + default: + return EnumSortCategoryBlock.GENERAL; + } + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + EnumBlockBasicMoon type = state.getValue(BASIC_TYPE_MOON); + if (type == EnumBlockBasicMoon.ORE_CHEESE_MOON || type == EnumBlockBasicMoon.ORE_SAPPHIRE) + { + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 2, 5) + (type == EnumBlockBasicMoon.ORE_SAPPHIRE ? 1 : 0); + } + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBossSpawner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBossSpawner.java new file mode 100644 index 00000000..18dbbfdc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBossSpawner.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; + +public class BlockBossSpawner extends Block implements ITileEntityProvider +{ + + public BlockBossSpawner(String assetName) + { + super(Material.ROCK); + this.blockHardness = 1000000.0F; + this.blockResistance = 1000000.0F; + this.setTranslationKey(assetName); + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return false; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + return 0; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityDungeonSpawner<>(EntitySkeletonBoss.class); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return ItemStack.EMPTY; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return null; + } + + @Override + public boolean isCollidable() + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBreathableAir.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBreathableAir.java new file mode 100644 index 00000000..965e07c2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBreathableAir.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; + +public class BlockBreathableAir extends BlockAir +{ + + public static final PropertyBool THERMAL = PropertyBool.create("thermal"); + + public BlockBreathableAir(String assetName) + { + this.setResistance(1000.0F); + this.setDefaultState(this.blockState.getBaseState().withProperty(THERMAL, false)); + this.setHardness(0.0F); + this.setTranslationKey(assetName); + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + final Block block = blockAccess.getBlockState(pos).getBlock(); + if (block == this || block == GCBlocks.brightBreatheableAir) + { + return false; + } else + { + return block instanceof BlockAir; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block oldBlock, BlockPos fromPos) + { + if (Blocks.AIR != oldBlock) + // Do no check if replacing breatheableAir with a solid block, although + // that could be dividing a sealed space + { + // Check if replacing a passthrough breathable block, like a torch - + // if so replace with BreathableAir not Air + if (Blocks.AIR == state.getBlock()) + { + EnumFacing side; + if (pos.getX() != fromPos.getX()) + side = pos.getX() > fromPos.getX() ? EnumFacing.EAST : EnumFacing.WEST; + else if (pos.getY() != fromPos.getY()) + side = pos.getY() > fromPos.getY() ? EnumFacing.UP : EnumFacing.DOWN; + else + side = pos.getZ() > fromPos.getZ() ? EnumFacing.SOUTH : EnumFacing.NORTH; + if (OxygenPressureProtocol.canBlockPassAir(worldIn, state, fromPos, side)) + { + worldIn.setBlockState(fromPos, GCBlocks.breatheableAir.getDefaultState(), 6); + } + } + // In all cases, trigger a leak check at this point + OxygenPressureProtocol.onEdgeBlockUpdated(worldIn, pos); + } + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, THERMAL); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(THERMAL, meta % 2 == 1); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(THERMAL) ? 1 : 0); + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public void breakBlock(World worldIn, BlockPos vec, IBlockState state) + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightAir.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightAir.java new file mode 100644 index 00000000..87f53cc0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightAir.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.BlockAir; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockBrightAir extends BlockAir +{ + + public BlockBrightAir(String assetName) + { + this.setResistance(1000.0F); + this.setHardness(0.0F); + this.setTranslationKey(assetName); + this.setLightLevel(1.0F); + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public boolean shouldSideBeRendered(IBlockState state, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return false; + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + return 15; + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public void breakBlock(World worldIn, BlockPos vec, IBlockState state) + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightBreathableAir.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightBreathableAir.java new file mode 100644 index 00000000..6e4b1e54 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightBreathableAir.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; + +public class BlockBrightBreathableAir extends BlockAir +{ + + public static final PropertyBool THERMAL = PropertyBool.create("thermal"); + + public BlockBrightBreathableAir(String assetName) + { + this.setResistance(1000.0F); + this.setDefaultState(this.blockState.getBaseState().withProperty(THERMAL, false)); + this.setHardness(0.0F); + this.setTranslationKey(assetName); + this.setLightLevel(1.0F); + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + final Block block = blockAccess.getBlockState(pos).getBlock(); + if (block == this || block == GCBlocks.breatheableAir) + { + return false; + } else + { + return block instanceof BlockAir; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (Blocks.AIR == blockIn) + // Do no check if replacing breatheableAir with a solid block, although + // that could be dividing a sealed space + { + OxygenPressureProtocol.onEdgeBlockUpdated(worldIn, pos); + } + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, THERMAL); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(THERMAL, meta % 2 == 1); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(THERMAL) ? 1 : 0); + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + return 15; + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public void breakBlock(World worldIn, BlockPos vec, IBlockState state) + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightLamp.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightLamp.java new file mode 100644 index 00000000..cee13093 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightLamp.java @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityArclamp; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +public class BlockBrightLamp extends BlockAdvanced implements IShiftDescription, ITileEntityProvider, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing"); +// public static final PropertyBool ACTIVE = PropertyBool.create("active"); + + protected static final AxisAlignedBB DOWN_AABB = new AxisAlignedBB(0.2F, 0.0F, 0.2F, 0.8F, 0.6F, 0.8F); + protected static final AxisAlignedBB UP_AABB = new AxisAlignedBB(0.2F, 0.4F, 0.2F, 0.8F, 1.0F, 0.8F); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.0F, 0.8F, 0.8F, 0.6F); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.4F, 0.8F, 0.8F, 1.0F); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.0F, 0.2F, 0.2F, 0.6F, 0.8F, 0.8F); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.4F, 0.2F, 0.2F, 1.0F, 0.8F, 0.8F); + + // Metadata: bits 0-2 are the side of the base plate using standard side + // convention (0-5) + + public BlockBrightLamp(String assetName) + { + super(Material.GLASS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); // .withProperty(ACTIVE, + // true)); + this.setHardness(0.1F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setLightLevel(0.9F); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case EAST: + return EAST_AABB; + case WEST: + return WEST_AABB; + case SOUTH: + return SOUTH_AABB; + case NORTH: + return NORTH_AABB; + case DOWN: + return DOWN_AABB; + case UP: + default: + return UP_AABB; + } + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + Block block = state.getBlock(); + if (block != this) + { + return block.getLightValue(state); + } + /** + * Gets the light value of the specified block coords. Args: x, y, z + */ + + if (world instanceof World) + { + return RedstoneUtil.isBlockReceivingRedstone((World) world, pos) ? 0 : this.lightValue; + } + + return 0; + } + + @Override + public int getLightOpacity(IBlockState state, IBlockAccess world, BlockPos pos) + { + return 1; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + double boundsMin = 0.2D; + double boundsMax = 0.8D; + return new AxisAlignedBB(pos.getX() + boundsMin, pos.getY() + boundsMin, pos.getZ() + boundsMin, pos.getX() + boundsMax, pos.getY() + boundsMax, pos.getZ() + boundsMax); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing side : EnumFacing.VALUES) + { + BlockPos offsetPos = pos.offset(side); + IBlockState state = worldIn.getBlockState(offsetPos); + BlockFaceShape faceShape = state.getBlockFaceShape(worldIn, offsetPos, side.getOpposite()); + if (faceShape.equals(BlockFaceShape.SOLID)) + { + return true; + } + } + return false; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + EnumFacing opposite = facing.getOpposite(); + BlockPos offsetPos = pos.offset(opposite); + IBlockState state = world.getBlockState(offsetPos); + BlockFaceShape faceShape = state.getBlockFaceShape(world, offsetPos, facing); + if (faceShape.equals(BlockFaceShape.SOLID)) + { + return this.getDefaultState().withProperty(FACING, opposite); + } + + return this.getDefaultState().withProperty(FACING, facing); + } + + /** + * Lets the block know when one of its neighbor changes. Doesn't know which + * neighbor changed (coordinates passed are their own) Args: x, y, z, + * neighbor blockID + */ + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing side = state.getValue(FACING); + + BlockPos offsetPos = pos.offset(side); + IBlockState state1 = worldIn.getBlockState(offsetPos); + BlockFaceShape faceShape = state1.getBlockFaceShape(worldIn, offsetPos, EnumFacing.byIndex(side.getIndex() ^ 1)); + if (faceShape.equals(BlockFaceShape.SOLID)) + { + return; + } + + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityArclamp) + { + ((TileEntityArclamp) tile).facingChanged(); + } + } + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityArclamp(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); // , ACTIVE }); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCargoLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCargoLoader.java new file mode 100644 index 00000000..7ac58c4e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCargoLoader.java @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoUnloader; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class BlockCargoLoader extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + private enum EnumLoaderType implements IStringSerializable + { + + CARGO_LOADER(METADATA_CARGO_LOADER, "cargo_loader"), CARGO_UNLOADER(METADATA_CARGO_UNLOADER, "cargo_unloader"); + + private final int meta; + private final String name; + + EnumLoaderType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + @Override + public String getName() + { + return this.name; + } + } + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumLoaderType.class); + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public static final int METADATA_CARGO_LOADER = 0; + public static final int METADATA_CARGO_UNLOADER = 4; + + public BlockCargoLoader(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, BlockCargoLoader.METADATA_CARGO_LOADER)); + list.add(new ItemStack(this, 1, BlockCargoLoader.METADATA_CARGO_UNLOADER)); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity != null) + { + if (tileEntity instanceof TileEntityCargoLoader) + { + ((TileEntityCargoLoader) tileEntity).checkForCargoEntity(); + } else if (tileEntity instanceof TileEntityCargoUnloader) + { + ((TileEntityCargoUnloader) tileEntity).checkForCargoEntity(); + } + } + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftCore.instance, -1, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + if (state.getValue(TYPE) == EnumLoaderType.CARGO_LOADER) + { + return new TileEntityCargoLoader(); + } else + { + return new TileEntityCargoUnloader(); + } + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; +// int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); +// +// if (stack.getItemDamage() >= METADATA_CARGO_UNLOADER) +// { +// change += METADATA_CARGO_UNLOADER; +// } +// else if (stack.getItemDamage() >= METADATA_CARGO_LOADER) +// { +// change += METADATA_CARGO_LOADER; +// } + + worldIn.setBlockState(pos, state.withProperty(FACING, EnumFacing.byHorizontalIndex(angle).getOpposite()), 3); + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + } + + @Override + public void onPlayerDestroy(World worldIn, BlockPos pos, IBlockState state) + { + super.onPlayerDestroy(worldIn, pos, state); + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + } + + @Override + public int damageDropped(IBlockState state) + { + return state.getValue(TYPE).getMeta(); + } + + @Override + public String getShiftDescription(int meta) + { + switch (meta) + { + case METADATA_CARGO_LOADER: + return GCCoreUtil.translate("tile.cargo_loader.description"); + case METADATA_CARGO_UNLOADER: + return GCCoreUtil.translate("tile.cargo_unloader.description"); + } + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumLoaderType type = meta >= METADATA_CARGO_UNLOADER ? EnumLoaderType.CARGO_UNLOADER : EnumLoaderType.CARGO_LOADER; + + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex() + state.getValue(TYPE).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCheese.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCheese.java new file mode 100644 index 00000000..d128675d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCheese.java @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockCheese extends Block implements IShiftDescription, ISortableBlock +{ + + public static final PropertyInteger BITES = PropertyInteger.create("bites", 0, 6); + protected static final AxisAlignedBB[] CHEESE_AABB = new AxisAlignedBB[] + {new AxisAlignedBB(0.0625, 0.0, 0.0625, 0.9375, 0.5, 0.9375), new AxisAlignedBB(0.1875, 0.0, 0.0625, 0.9375, 0.5, 0.9375), new AxisAlignedBB(0.3125, 0.0, 0.0625, 0.9375, 0.5, 0.9375), + new AxisAlignedBB(0.4375, 0.0, 0.0625, 0.9375, 0.5, 0.9375), new AxisAlignedBB(0.5625, 0.0, 0.0625, 0.9375, 0.5, 0.9375), new AxisAlignedBB(0.6875, 0.0, 0.0625, 0.9375, 0.5, 0.9375), + new AxisAlignedBB(0.8125, 0.0, 0.0625, 0.9375, 0.5, 0.9375)}; + + public BlockCheese(String assetName) + { + super(Material.CAKE); + this.setTickRandomly(true); + this.disableStats(); + this.setHardness(0.5F); + this.setDefaultState(this.blockState.getBaseState().withProperty(BITES, Integer.valueOf(0))); + this.setSoundType(SoundType.CLOTH); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + int bites = 0; + if (state.getBlock() instanceof BlockCheese) + { + bites = ((Integer) state.getValue(BITES)).intValue(); + } + return CHEESE_AABB[bites]; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + this.eatCheeseSlice(worldIn, pos, state, playerIn); + return true; + } + + @Override + public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + this.eatCheeseSlice(worldIn, pos, worldIn.getBlockState(pos), playerIn); + } + + private void eatCheeseSlice(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn) + { + if (playerIn.canEat(false)) + { + playerIn.getFoodStats().addStats(2, 0.1F); + int i = ((Integer) state.getValue(BITES)).intValue(); + + if (i < 6) + { + worldIn.setBlockState(pos, state.withProperty(BITES, Integer.valueOf(i + 1)), 3); + } else + { + worldIn.setBlockToAir(pos); + } + } + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return super.canPlaceBlockAt(worldIn, pos) && this.canBlockStay(worldIn, pos); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.canBlockStay(worldIn, pos)) + { + worldIn.setBlockToAir(pos); + } + } + + private boolean canBlockStay(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).getMaterial().isSolid(); + } + + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BITES, Integer.valueOf(meta)); + } + + @Override + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.CAKE, 1, 0); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((Integer) state.getValue(BITES)).intValue(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {BITES}); + } + + @Override + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return (7 - ((Integer) worldIn.getBlockState(pos).getValue(BITES)).intValue()) * 2; + } + + @Override + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCompactNasaWorkbench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCompactNasaWorkbench.java new file mode 100644 index 00000000..bd79232f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCompactNasaWorkbench.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCompactNasaWorkbench; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockCompactNasaWorkbench extends BlockTileGC implements ITileEntityProvider, IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockCompactNasaWorkbench(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + ItemStack heldItem = playerIn.getHeldItem(hand); + + if (heldItem.getItem() != GCItems.wrench) + { + playerIn.openGui(GalacticraftCore.instance, SchematicRegistry.getMatchingRecipeForID(0).getGuiID(), worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityCompactNasaWorkbench(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedDetector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedDetector.java new file mode 100644 index 00000000..64dd65ec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedDetector.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlayerDetector; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +public class BlockConcealedDetector extends Block implements ISortableBlock, ITileEntityProvider +{ + + public static final PropertyInteger VARIANT = PropertyInteger.create("var", 0, 1); + public static final PropertyInteger FACING = PropertyInteger.create("facing", 0, 3); + public static final PropertyBool DETECTED = PropertyBool.create("det"); + + public BlockConcealedDetector(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.blockResistance = 15F; + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, Integer.valueOf(0)).withProperty(VARIANT, Integer.valueOf(0)).withProperty(DETECTED, false)); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int damage, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getHorizontalIndex()); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + int facing = meta & 3; + int var = (meta >> 2) & 1; + return this.getDefaultState().withProperty(FACING, Integer.valueOf(facing)).withProperty(VARIANT, Integer.valueOf(var)).withProperty(DETECTED, Boolean.valueOf(meta >= 8)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).intValue() + state.getValue(VARIANT).intValue() * 4 + (state.getValue(DETECTED) ? 8 : 0); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {FACING, VARIANT, DETECTED}); + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return true; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return true; + } + + @Override + public boolean isSideSolid(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityPlayerDetector(); + } + + @Override + public boolean canProvidePower(IBlockState state) + { + return true; + } + + @Override + public int getWeakPower(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + if (worldIn instanceof World && RedstoneUtil.isBlockReceivingDirectRedstone((World) worldIn, pos)) + return 0; + + return worldIn.getBlockState(pos).getValue(DETECTED) ? 0 : 15; + } + + public void updateState(World worldObj, BlockPos pos, boolean result) + { + IBlockState bs = worldObj.getBlockState(pos); + if (result != (boolean) bs.getValue(DETECTED)) + { + worldObj.setBlockState(pos, bs.withProperty(DETECTED, result), 3); + } + } + + @Override + public int quantityDropped(Random random) + { + return 0; + } + + @Override + protected boolean canSilkHarvest() + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRedstone.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRedstone.java new file mode 100644 index 00000000..abce08f7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRedstone.java @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.List; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRedstoneRepeater; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +public class BlockConcealedRedstone extends Block implements ISortableBlock +{ + + public static final PropertyInteger POWER = PropertyInteger.create("power", 0, 15); + private boolean canProvidePower = true; + private final Set blocksNeedingUpdate = Sets.newHashSet(); + + public BlockConcealedRedstone(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.blockResistance = 15F; + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(POWER, Integer.valueOf(0))); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(POWER, Integer.valueOf(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((Integer) state.getValue(POWER)).intValue(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {POWER}); + } + + private IBlockState updateSurroundingRedstone(World worldIn, BlockPos pos, IBlockState state) + { + state = this.calculateCurrentChanges(worldIn, pos, pos, state); + List list = Lists.newArrayList(this.blocksNeedingUpdate); + this.blocksNeedingUpdate.clear(); + + for (BlockPos blockpos : list) + { + worldIn.notifyNeighborsOfStateChange(blockpos, this, false); + } + + return state; + } + + private IBlockState calculateCurrentChanges(World worldIn, BlockPos pos1, BlockPos pos2, IBlockState state) + { + IBlockState iblockstate = state; + int currentPower = ((Integer) state.getValue(POWER)).intValue(); + int maxPower = 0; + maxPower = this.getMaxCurrentStrength(worldIn, pos2, maxPower); + this.canProvidePower = false; + int k = worldIn.getRedstonePowerFromNeighbors(pos1); + this.canProvidePower = true; + + if (k > 0 && k > maxPower - 1) + { + maxPower = k; + } + + int l = 0; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos1.offset(enumfacing); + boolean flag = blockpos.getX() != pos2.getX() || blockpos.getZ() != pos2.getZ(); + + if (flag) + { + l = this.getMaxCurrentStrength(worldIn, blockpos, l); + } + + IBlockState bs = worldIn.getBlockState(blockpos); + IBlockState bsUp = worldIn.getBlockState(pos1.up()); + if (bs.getBlock().isNormalCube(bs) && !bsUp.getBlock().isNormalCube(bsUp)) + { + if (flag && pos1.getY() >= pos2.getY()) + { + l = this.getMaxCurrentStrength(worldIn, blockpos.up(), l); + } + } else if (!bs.getBlock().isNormalCube(bs) && flag && pos1.getY() <= pos2.getY()) + { + l = this.getMaxCurrentStrength(worldIn, blockpos.down(), l); + } + } + + if (l > maxPower) + { + maxPower = l - 1; + } else if (maxPower > 0) + { + maxPower--; + } else + { + maxPower = 0; + } + + if (k > maxPower - 1) + { + maxPower = k; + } + + if (currentPower != maxPower) + { + state = state.withProperty(POWER, Integer.valueOf(maxPower)); + + if (worldIn.getBlockState(pos1) == iblockstate) + { + worldIn.setBlockState(pos1, state, 2); + } + + this.blocksNeedingUpdate.add(pos1); + + for (EnumFacing enumfacing1 : EnumFacing.VALUES) + { + this.blocksNeedingUpdate.add(pos1.offset(enumfacing1)); + } + } + + return state; + } + + private void notifyWireNeighborsOfStateChange(World worldIn, BlockPos pos) + { + Block b = worldIn.getBlockState(pos).getBlock(); + if (b == this || b == Blocks.REDSTONE_WIRE) + { + worldIn.notifyNeighborsOfStateChange(pos, this, false); + + for (EnumFacing enumfacing : EnumFacing.VALUES) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + } + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + this.updateSurroundingRedstone(worldIn, pos, state); + + for (EnumFacing enumfacing : EnumFacing.Plane.VERTICAL) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + + for (EnumFacing enumfacing1 : EnumFacing.Plane.HORIZONTAL) + { + this.notifyWireNeighborsOfStateChange(worldIn, pos.offset(enumfacing1)); + } + + this.notifyNeighbors(worldIn, pos); + } + } + + private void notifyNeighbors(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing2 : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing2); + + IBlockState bs = worldIn.getBlockState(blockpos); + if (bs.getBlock().isNormalCube(bs)) + { + this.notifyWireNeighborsOfStateChange(worldIn, blockpos.up()); + } else + { + this.notifyWireNeighborsOfStateChange(worldIn, blockpos.down()); + } + } + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + + if (!worldIn.isRemote) + { + for (EnumFacing enumfacing : EnumFacing.VALUES) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + + this.updateSurroundingRedstone(worldIn, pos, state); + + for (EnumFacing enumfacing1 : EnumFacing.Plane.HORIZONTAL) + { + this.notifyWireNeighborsOfStateChange(worldIn, pos.offset(enumfacing1)); + } + + this.notifyNeighbors(worldIn, pos); + } + } + + private int getMaxCurrentStrength(World worldIn, BlockPos pos, int strength) + { + if (worldIn.getBlockState(pos).getBlock() != this) + { + return strength; + } else + { + int i = (Integer) worldIn.getBlockState(pos).getValue(POWER); + return i > strength ? i : strength; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + this.updateSurroundingRedstone(worldIn, pos, state); + } + } + + @Override + public int getStrongPower(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + return !this.canProvidePower ? 0 : this.getWeakPower(state, worldIn, pos, side); + } + + @Override + public int getWeakPower(IBlockState state, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (!this.canProvidePower) + { + return 0; + } else + { + return ((Integer) state.getValue(POWER)).intValue(); + } + } + + protected static boolean canRedstoneConnect(IBlockAccess world, BlockPos pos, EnumFacing side) + { + IBlockState state = world.getBlockState(pos); + if (state.getBlock() == Blocks.REDSTONE_WIRE || state.getBlock() == GCBlocks.concealedRedstone) + { + return true; + } else if (Blocks.UNPOWERED_REPEATER.isAssociatedBlock(state.getBlock())) + { + EnumFacing direction = (EnumFacing) state.getValue(BlockRedstoneRepeater.FACING); + return direction == side || direction.getOpposite() == side; + } else + { + return state.getBlock().canConnectRedstone(state, world, pos, side); + } + } + + @Override + public boolean canProvidePower(IBlockState state) + { + return this.canProvidePower; + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return true; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return true; + } + + @Override + public boolean isSideSolid(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRepeater.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRepeater.java new file mode 100644 index 00000000..de8208f2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRepeater.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.BlockRedstoneRepeater; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockConcealedRepeater extends BlockRedstoneRepeater implements ISortableBlock +{ + + protected static final AxisAlignedBB CUBE_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + + public BlockConcealedRepeater(String assetName, boolean powered) + { + super(powered); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.blockResistance = 15F; + this.setTranslationKey(assetName); + this.setCreativeTab(powered ? null : GalacticraftCore.galacticraftBlocksTab); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return CUBE_AABB; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return true; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return true; + } + + @Override + public boolean isSideSolid(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); + } + + @Override + public boolean canBlockStay(World worldIn, BlockPos pos) + { + return true; + } + + @Override + protected IBlockState getPoweredState(IBlockState unpoweredState) + { + Integer integer = (Integer) unpoweredState.getValue(DELAY); + Boolean obool = (Boolean) unpoweredState.getValue(LOCKED); + EnumFacing enumfacing = (EnumFacing) unpoweredState.getValue(FACING); + return GCBlocks.concealedRepeater_Powered.getDefaultState().withProperty(FACING, enumfacing).withProperty(DELAY, integer).withProperty(LOCKED, obool); + } + + @Override + protected IBlockState getUnpoweredState(IBlockState poweredState) + { + Integer integer = (Integer) poweredState.getValue(DELAY); + Boolean obool = (Boolean) poweredState.getValue(LOCKED); + EnumFacing enumfacing = (EnumFacing) poweredState.getValue(FACING); + return GCBlocks.concealedRepeater_Unpowered.getDefaultState().withProperty(FACING, enumfacing).withProperty(DELAY, integer).withProperty(LOCKED, obool); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return ItemBlock.getItemFromBlock(GCBlocks.concealedRepeater_Unpowered); + } + + @Override + @SideOnly(Side.CLIENT) + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(GCBlocks.concealedRepeater_Unpowered); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCrafting.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCrafting.java new file mode 100644 index 00000000..e233290d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCrafting.java @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockCrafting extends BlockAdvancedTile implements ITileEntityProvider, ISortableBlock, IShiftDescription +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing"); + + public BlockCrafting(String assetName) + { + super(Material.IRON); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + ItemStack heldItem = playerIn.getHeldItem(hand); + + if (this.useWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + return true; + } + + if (playerIn.isSneaking()) + { + if (this.onSneakMachineActivated(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + return true; + } + } + + if (!worldIn.isRemote) + { + playerIn.openGui(GalacticraftCore.instance, -1, worldIn, pos.getX(), pos.getY(), pos.getZ()); + } + return true; + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + this.rotate6Ways(world, pos); + return true; + } + + private void rotate6Ways(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + EnumFacing facing = state.getValue(FACING); + if (facing == EnumFacing.DOWN) + { + facing = EnumFacing.UP; + } else if (facing == EnumFacing.UP) + { + facing = EnumFacing.NORTH; + } else if (facing == EnumFacing.WEST) + { + facing = EnumFacing.DOWN; + } else + { + facing = facing.rotateY(); + } +// int metadata = this.getMetaFromState(world.getBlockState(pos)); +// int metaDir = ((metadata & 7) + 1) % 6; +// //DOWN->UP->NORTH->*EAST*->*SOUTH*->WEST +// //0->1 1->2 2->5 3->4 4->0 5->3 +// if (metaDir == 3) //after north +// { +// metaDir = 5; +// } +// else if (metaDir == 0) +// { +// metaDir = 3; +// } +// else if (metaDir == 5) +// { +// metaDir = 0; +// } + + world.setBlockState(pos, state.withProperty(FACING, facing), 3); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityCrafting(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + worldIn.setBlockState(pos, state.withProperty(FACING, getFacingFromEntity(worldIn, pos, placer)), 2); + } + + public static EnumFacing getFacingFromEntity(World worldIn, BlockPos clickedBlock, EntityLivingBase entityIn) + { + if (MathHelper.abs((float) entityIn.posX - (float) clickedBlock.getX()) < 3.0F && MathHelper.abs((float) entityIn.posZ - (float) clickedBlock.getZ()) < 3.0F) + { + double d0 = entityIn.posY + (double) entityIn.getEyeHeight(); + + if (d0 - (double) clickedBlock.getY() > 2.0D) + { + return EnumFacing.UP; + } + + if ((double) clickedBlock.getY() - d0 > 1.0D) + { + return EnumFacing.DOWN; + } + } + + return entityIn.getHorizontalFacing().getOpposite(); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.byIndex(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public void dropEntireInventory(World worldIn, BlockPos pos, IBlockState state) + { + super.dropEntireInventory(worldIn, pos, state); + TileEntity tileEntity = worldIn.getTileEntity(pos); + if (tileEntity instanceof TileEntityCrafting) + { + ((TileEntityCrafting) tileEntity).dropHiddenOutputBuffer(worldIn, pos); + } + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDish.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDish.java new file mode 100644 index 00000000..ca635aa5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDish.java @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDish; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockDish extends BlockTileGC implements IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public BlockDish(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) + { + for (int y = 1; y <= 2; y++) + { + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + BlockPos pos1 = pos.add((y == 2 ? x : 0), y, (y == 2 ? z : 0)); + Block block = world.getBlockState(pos1).getBlock(); + + if (block.getMaterial(world.getBlockState(pos)) != Material.AIR && !block.isReplaceable(world, pos1)) + { + return false; + } + } + } + } + + EnumFacing facing = EnumFacing.byIndex(side.getIndex() ^ 1); + return world.getBlockState(pos.add(facing.getXOffset(), facing.getYOffset(), facing.getZOffset())).getBlock() != GCBlocks.fakeBlock; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int metadata = state.getBlock().getMetaFromState(state); + + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = 0; + + switch (angle) + { + case 0: + change = 1; + break; + case 1: + change = 2; + break; + case 2: + change = 0; + break; + case 3: + change = 3; + break; + } + + worldIn.setBlockState(pos, state.getBlock().getStateFromMeta(change), 3); + + BlockMulti.onPlacement(worldIn, pos, placer, this); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityDish) + { + ((TileEntityDish) tile).onDestroy(tile); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { +// IBlockState state = world.getBlockState(pos); +// int original = state.getBlock().getMetaFromState(state); +// int change = world.getBlockState(pos).getValue(FACING).rotateY().getHorizontalIndex(); + +// TileEntity te = world.getTileEntity(pos); +// if (te instanceof TileBaseUniversalElectrical) +// { +// ((TileBaseUniversalElectrical) te).updateFacing(); +// } +// +// world.setBlockState(pos, state.getBlock().getStateFromMeta(change), 3); + return true; + } + + @Override + public boolean onSneakMachineActivated(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + // entityPlayer.openGui(GalacticraftCore.instance, -1, world, x, y, z); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState metadata) + { + return new TileEntityDish(); + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate("tile.radio_telescope.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDoubleSlabGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDoubleSlabGC.java new file mode 100644 index 00000000..cc424f4c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDoubleSlabGC.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.material.Material; + +public class BlockDoubleSlabGC extends BlockSlabGC +{ + + public BlockDoubleSlabGC(String name, Material material) + { + super(material); + this.setTranslationKey(name); + } + + @Override + public boolean isDouble() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEmergencyBox.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEmergencyBox.java new file mode 100644 index 00000000..93a4283a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEmergencyBox.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEmergencyBox; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockEmergencyBox extends BlockAdvancedTile implements IShiftDescription, ISortableBlock, IPartialSealableBlock +{ + + public static final PropertyBool KIT = PropertyBool.create("kit"); + + public BlockEmergencyBox(String assetName) + { + super(Material.IRON); + this.setHardness(4.0F); + this.setResistance(70F); + this.setSoundType(SoundType.METAL); + this.setLightLevel(1.0F); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(KIT, false)); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, KIT); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(KIT, meta % 2 == 1); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(KIT) ? 1 : 0); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(this, 1, this.getMetaFromState(state)); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return (face == EnumFacing.UP || face == EnumFacing.DOWN) ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityEmergencyBox(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityEmergencyBox) + { + if (!world.isRemote) + { + ((TileEntityEmergencyBox) tile).click(player, side, state.getValue(KIT)); + } + return true; + } + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return direction.ordinal() < 2; + } + + @Override + public boolean isSideSolid(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction) + { + return direction.ordinal() < 2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEnclosed.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEnclosed.java new file mode 100644 index 00000000..1cdfc295 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEnclosed.java @@ -0,0 +1,518 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.tile.TileCableIC2Sealed; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWire; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNull; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import appeng.api.AEApi; +import appeng.api.parts.IPartHelper; +import ic2.api.network.INetworkManager; + +public class BlockEnclosed extends Block implements IPartialSealableBlock, ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static Item[] pipeItemsBC = new Item[6]; + public static Block blockPipeBC = null; + public static Method onBlockNeighbourChangeIC2a = null; + public static Method onBlockNeighbourChangeIC2b = null; + private static Class icCableContainerClass; + private static Class icWireRegClass; + private static Field icWireRegInstance; + private static Method icContainerGetMethod; + private static Constructor icTileCableConstuctor; + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumEnclosedBlockType.class); + + public enum EnumEnclosedBlockType implements IStringSerializable + { + +// copper(1, 1, 0.25F, 0.2D, 128), +// glass(0, 0, 0.25F, 0.025D, 8192), +// gold(2, 1, 0.1875F, 0.4D, 512), +// iron(3, 1, 0.375F, 0.8D, 2048), +// tin(1, 1, 0.25F, 0.2D, 32), +// detector(0, 2147483647, 0.5F, 0.5D, 8192), +// splitter(0, 2147483647, 0.5F, 0.5D, 8192); + IC2_HV_CABLE(0, "iron", 2, 7, "enclosed_hv_cable"), + OXYGEN_PIPE(1, "enclosed_fluid_pipe"), + IC2_COPPER_CABLE(2, "copper", 1, 1, "enclosed_copper_cable"), + IC2_GOLD_CABLE(3, "gold", 2, 4, "enclosed_gold_cable"), + TE_CONDUIT(4, "enclosed_te_conduit"), // CURRENTLY UNUSED + IC2_GLASS_FIBRE_CABLE(5, "glass", 0, 9, "enclosed_glass_fibre_cable"), + IC2_LV_CABLE(6, "tin", 1, 10, "enclosed_lv_cable"), + BC_ITEM_STONEPIPE(7, "pipeItemStone", "enclosed_pipe_items_stone"), + BC_ITEM_COBBLESTONEPIPE(8, "pipeItemCobble", "enclosed_pipe_items_cobblestone"), + BC_FLUIDS_STONEPIPE(9, "pipeFluidStone", "enclosed_pipe_fluids_stone"), + BC_FLUIDS_COBBLESTONEPIPE(10, "pipeFluidCobble", "enclosed_pipe_fluids_cobblestone"), + BC_POWER_STONEPIPE(11, "pipePowerStone", "enclosed_pipe_power_stone"), + BC_POWER_GOLDPIPE(12, "pipePowerGold", "enclosed_pipe_power_gold"), + ME_CABLE(13, "enclosed_me_cable"), + ALUMINUM_WIRE(14, "enclosed_aluminum_wire"), + ALUMINUM_WIRE_HEAVY(15, "enclosed_heavy_aluminum_wire"); + + private final int meta; + private final String name; + private final String ic2Enum; + private final int ic2Insulation; + private final int icClassicMeta; + private final String bcPipeType; + + EnumEnclosedBlockType(int meta, String bcPipeType, String name) + { + this(meta, null, -1, -1, bcPipeType, name); + } + + EnumEnclosedBlockType(int meta, String name) + { + this(meta, null, -1, -1, null, name); + } + + EnumEnclosedBlockType(int meta, String ic2Enum, int ic2Insulation, int icClassicMeta, String name) + { + this(meta, ic2Enum, ic2Insulation, icClassicMeta, null, name); + } + + EnumEnclosedBlockType(int meta, String ic2Enum, int ic2Insulation, int icClassicMeta, String bcPipeType, String name) + { + this.meta = meta; + this.ic2Enum = ic2Enum; + this.ic2Insulation = ic2Insulation; + this.icClassicMeta = icClassicMeta; + this.bcPipeType = bcPipeType; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + public String getIc2Enum() + { + return ic2Enum; + } + + public int getIc2Insulation() + { + return ic2Insulation; + } + + public String getBCPipeType() + { + return bcPipeType; + } + + private final static EnumEnclosedBlockType[] values = values(); + + public static EnumEnclosedBlockType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockEnclosed(String assetName) + { + super(Material.CLAY); + this.setResistance(0.2F); + this.setHardness(0.4f); + this.setSoundType(SoundType.STONE); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.ALUMINUM_WIRE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.ALUMINUM_WIRE_HEAVY.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.OXYGEN_PIPE.getMeta())); + + if (CompatibilityManager.isTELoaded() || GCBlocks.registeringSorted) + { + // par3List.add(new ItemStack(par1, 1, 0)); + } + + if (CompatibilityManager.isIc2Loaded() || GCBlocks.registeringSorted) + { + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_COPPER_CABLE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_GOLD_CABLE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_HV_CABLE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_GLASS_FIBRE_CABLE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_LV_CABLE.getMeta())); + } + + if (CompatibilityManager.isBCraftTransportLoaded() || GCBlocks.registeringSorted) + { + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_ITEM_COBBLESTONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_ITEM_STONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_FLUIDS_COBBLESTONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_FLUIDS_STONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_POWER_STONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_POWER_GOLDPIPE.getMeta())); + } + + if (CompatibilityManager.isAppEngLoaded() || GCBlocks.registeringSorted) + { + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.ME_CABLE.getMeta())); + } + } + + public static void initialiseBC() + { + try + { + if (CompatibilityManager.classBCTransport != null) + { + for (int i = 0; i < 6; i++) + { + String pipeName = EnumEnclosedBlockType.values()[i + 7].getBCPipeType(); + pipeItemsBC[i] = (Item) CompatibilityManager.classBCTransport.getField(pipeName).get(null); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public int damageDropped(IBlockState state) + { + return state.getBlock().getMetaFromState(state); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { +// int metadata = state.getBlock().getMetaFromState(state); + EnumEnclosedBlockType type = state.getValue(TYPE); + final TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (type == EnumEnclosedBlockType.TE_CONDUIT) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } else if (type == EnumEnclosedBlockType.OXYGEN_PIPE) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + + if (tileEntity instanceof INetworkConnection) + { + ((INetworkConnection) tileEntity).refresh(); + } + } else if (type.getMeta() <= 6) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + if (CompatibilityManager.isIc2Loaded() && tileEntity != null) + { + try + { + if (onBlockNeighbourChangeIC2a != null) + { + onBlockNeighbourChangeIC2a.invoke(tileEntity, blockIn); + } else if (onBlockNeighbourChangeIC2b != null) + { + onBlockNeighbourChangeIC2b.invoke(tileEntity, blockIn, pos); + } + return; + } catch (Exception ignore) + { + } + } + } else if (type.getMeta() <= 12) + { + if (CompatibilityManager.isBCraftTransportLoaded()) + { + if (blockPipeBC != null) + { + try + { + blockPipeBC.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } catch (Exception e) + { + e.printStackTrace(); + } + return; + } + } + + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } else if (type.getMeta() <= EnumEnclosedBlockType.ME_CABLE.getMeta()) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + if (CompatibilityManager.isAppEngLoaded()) + { +// worldIn.notifyBlockUpdate(pos); TODO + } + } else if (type.getMeta() <= EnumEnclosedBlockType.ALUMINUM_WIRE.getMeta()) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + if (tileEntity instanceof IConductor) + { + ((IConductor) tileEntity).refresh(); + } + } else if (type.getMeta() <= EnumEnclosedBlockType.ALUMINUM_WIRE_HEAVY.getMeta()) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + if (tileEntity instanceof IConductor) + { + ((IConductor) tileEntity).refresh(); + } + } + } + + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + if (metadata == EnumEnclosedBlockType.TE_CONDUIT.getMeta()) + { + // TODO + } else if (metadata == EnumEnclosedBlockType.OXYGEN_PIPE.getMeta()) + { + return new TileEntityFluidPipe(); + } else if (metadata <= 6) + { + if (CompatibilityManager.isIc2Loaded()) + { + try + { + EnumEnclosedBlockType enclosedType = EnumEnclosedBlockType.byMetadata(metadata); + if (CompatibilityManager.isIc2ClassicLoaded()) + { + if (icCableContainerClass == null) + { + icCableContainerClass = Class.forName("ic2.core.block.wiring.cables.CableContainer"); + + icWireRegClass = Class.forName("ic2.core.block.wiring.cables.WireRegistry"); + icWireRegInstance = icWireRegClass.getDeclaredField("instance"); + icContainerGetMethod = icWireRegClass.getMethod("getContainerFromMeta", int.class); + + icTileCableConstuctor = CompatibilityManager.classIc2ClassicTileCable.getConstructor(icCableContainerClass); + } + + Object wireRegInstance = icWireRegInstance.get(null); + Object container = icContainerGetMethod.invoke(wireRegInstance, enclosedType.icClassicMeta); + + return (TileEntity) icTileCableConstuctor.newInstance(container); + } else + { + // IndustrialCraft 2 uses enums for types + Enum[] enums = (Enum[]) CompatibilityManager.classIC2cableType.getEnumConstants(); + Enum foundEnum = null; + for (Enum e : enums) + { + if (e.name().equals(enclosedType.getIc2Enum())) + { + foundEnum = e; + break; + } + } + + return new TileCableIC2Sealed().setupInsulation(foundEnum, enclosedType.getIc2Insulation()); + } + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + } else if (metadata <= 12) + { + if (CompatibilityManager.isBCraftTransportLoaded()) + { + try + { + return (TileEntity) CompatibilityManager.classBCTransportPipeTile.getConstructor().newInstance(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } else if (metadata <= EnumEnclosedBlockType.ME_CABLE.getMeta()) + { + if (CompatibilityManager.isAppEngLoaded()) + { + // Emulate Api.INSTANCE.partHelper().getCombinedInstance( + // TileCableBus.class ) + try + { + IPartHelper apiPart = AEApi.instance().partHelper(); + Class classTileCableBus = Class.forName("appeng.tile.networking.TileCableBus"); + for (Method m : apiPart.getClass().getMethods()) + { + if ("getCombinedInstance".equals(m.getName())) + { + return (TileEntity) ((Class) m.invoke(apiPart, classTileCableBus)).newInstance(); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } else if (metadata <= EnumEnclosedBlockType.ALUMINUM_WIRE.getMeta()) + { + return new TileEntityAluminumWire(1); + } else if (metadata <= EnumEnclosedBlockType.ALUMINUM_WIRE_HEAVY.getMeta()) + { + return new TileEntityAluminumWire(2); + } + + return new TileEntityNull(); + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int metadata = stack.getItemDamage(); + if (metadata >= EnumEnclosedBlockType.BC_ITEM_STONEPIPE.getMeta() && metadata <= EnumEnclosedBlockType.BC_POWER_GOLDPIPE.getMeta()) + { + try + { + TileEntity tile = worldIn.getTileEntity(pos); + if (CompatibilityManager.classBCTransportPipeTile.isInstance(tile)) + { + Method m = CompatibilityManager.classBCTransportPipeTile.getMethod("onPlacedBy", EntityLivingBase.class, ItemStack.class); + m.invoke(tile, placer, new ItemStack(pipeItemsBC[metadata - 7])); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } else if (!worldIn.isRemote && metadata <= EnumEnclosedBlockType.IC2_LV_CABLE.getMeta() && metadata != EnumEnclosedBlockType.OXYGEN_PIPE.getMeta() + && metadata != EnumEnclosedBlockType.TE_CONDUIT.getMeta() && CompatibilityManager.isIc2Loaded()) + { + TileEntity te = worldIn.getTileEntity(pos); + if (te != null) + { + try + { + Object network = CompatibilityManager.fieldIC2networkManager.get(null); + if (CompatibilityManager.isIc2ClassicLoaded()) + { + Method get = network.getClass().getMethod("get"); + Object manager = get.invoke(network); + Method sendMethod = CompatibilityManager.classIc2ClassicNetworkManager.getMethod("sendInitialData", EntityPlayerMP.class, TileEntity.class); + sendMethod.invoke(manager, placer, te); + } else + { + INetworkManager manager = null; + Method get = network.getClass().getMethod("get", boolean.class); + manager = (INetworkManager) get.invoke(network, true); + if (manager != null) + { + manager.sendInitialData(te); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumEnclosedBlockType type = EnumEnclosedBlockType.byMetadata(meta); + return this.getDefaultState().withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(TYPE).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.TRANSMITTER; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFallenMeteor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFallenMeteor.java new file mode 100644 index 00000000..a69b3f6d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFallenMeteor.java @@ -0,0 +1,312 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFallenMeteor; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockFallenMeteor extends Block implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + private static final AxisAlignedBB BOUNDS = new AxisAlignedBB(0.15, 0.05, 0.15, 0.85, 0.75, 0.85); + + public BlockFallenMeteor(String assetName) + { + super(Material.ROCK); + this.setHardness(40.0F); + this.setSoundType(SoundType.STONE); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return BOUNDS; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public int quantityDroppedWithBonus(int par1, Random par2Random) + { + return 1 + (int) (par2Random.nextFloat() + 0.75F); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return GCItems.meteoricIronRaw; + } + + @Override + public void onEntityCollision(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityFallenMeteor) + { + TileEntityFallenMeteor meteor = (TileEntityFallenMeteor) tile; + + if (meteor.getHeatLevel() <= 0) + { + return; + } + + if (entityIn instanceof EntityLivingBase) + { + final EntityLivingBase livingEntity = (EntityLivingBase) entityIn; + + worldIn.playSound(null, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, SoundEvents.ENTITY_GENERIC_EXTINGUISH_FIRE, SoundCategory.NEUTRAL, 0.5F, + 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F); + + for (int var5 = 0; var5 < 8; ++var5) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, pos.getX() + Math.random(), pos.getY() + 0.2D + Math.random(), pos.getZ() + Math.random(), 0.0D, 0.0D, 0.0D); + } + + if (!livingEntity.isBurning()) + { + livingEntity.setFire(2); + } + + double var9 = pos.getX() + 0.5F - livingEntity.posX; + double var7; + + for (var7 = livingEntity.posZ - pos.getZ(); var9 * var9 + var7 * var7 < 1.0E-4D; var7 = (Math.random() - Math.random()) * 0.01D) + { + var9 = (Math.random() - Math.random()) * 0.01D; + } + + livingEntity.knockBack(livingEntity, 1, var9, var7); + } + } + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack itemStack) + { + world.setBlockState(pos, this.getDefaultState(), 3); + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntityFallenMeteor) + { + ((TileEntityFallenMeteor) tile).setHeatLevel(0); + } + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + this.tryToFall(worldIn, pos, state); + } + } + + private void tryToFall(World world, BlockPos pos, IBlockState state) + { + if (this.canFallBelow(world, pos.down()) && pos.getY() >= 0) + { + int prevHeatLevel = ((TileEntityFallenMeteor) world.getTileEntity(pos)).getHeatLevel(); + world.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); + BlockPos blockpos1; + + for (blockpos1 = pos.down(); this.canFallBelow(world, blockpos1) && blockpos1.getY() > 0; blockpos1 = blockpos1.down()) + { + } + + if (blockpos1.getY() >= 0) + { + world.setBlockState(blockpos1.up(), state, 3); + ((TileEntityFallenMeteor) world.getTileEntity(blockpos1.up())).setHeatLevel(prevHeatLevel); + } + } + } + + private boolean canFallBelow(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + + if (state.getMaterial() == Material.AIR) + { + return true; + } else if (state.getBlock() == Blocks.FIRE) + { + return true; + } else + { + return state.getMaterial() == Material.WATER ? true : state.getMaterial() == Material.LAVA; + } + } + + public static int colorMultiplier(IBlockAccess worldIn, BlockPos pos) + { + if (worldIn != null && pos != null) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityFallenMeteor) + { + TileEntityFallenMeteor meteor = (TileEntityFallenMeteor) tile; + + Vector3 col = new Vector3(198, 108, 58); + col.translate(200 - meteor.getScaledHeatLevel() * 200); + col.x = Math.min(255, col.x); + col.y = Math.min(255, col.y); + col.z = Math.min(255, col.z); + + return ColorUtil.to32BitColor(255, (byte) col.x, (byte) col.y, (byte) col.z); + } + } + + return 16777215; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityFallenMeteor(); + } + + @Override + public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player) + { + return true; + } + + @Override + public float getPlayerRelativeBlockHardness(IBlockState state, EntityPlayer player, World world, BlockPos pos) + { + float hardness = this.getBlockHardness(state, world, pos); + if (hardness < 0.0F) + { + return 0.0F; + } + + int power = canHarvestBlock(this, player, state); + if (power > 0) + { + return power * player.getDigSpeed(state, pos) / hardness / 30F; + } else + { + return player.getDigSpeed(state, pos) / hardness / 30F; + } + } + + public int canHarvestBlock(Block block, EntityPlayer player, IBlockState state) + { + ItemStack stack = player.inventory.getCurrentItem(); + String tool = block.getHarvestTool(state); + if (stack.isEmpty() || tool == null) + { + return player.canHarvestBlock(state) ? 1 : 0; + } + + int toolLevel = stack.getItem().getHarvestLevel(stack, tool, player, state) - block.getHarvestLevel(state) + 1; + if (toolLevel < 1) + { + return player.canHarvestBlock(state) ? 1 : 0; + } + + return toolLevel; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 3, 7); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidGC.java new file mode 100644 index 00000000..89220b22 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidGC.java @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import javax.annotation.Nullable; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.common.property.IExtendedBlockState; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.IFluidBlock; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; + +public class BlockFluidGC extends BlockFluidClassic +{ + + private final String fluidName; + private final Fluid fluid; + + public BlockFluidGC(Fluid fluid, String assetName) + { + super(fluid, (assetName.startsWith("oil") || assetName.startsWith("fuel")) ? GCFluids.materialOil : Material.WATER); + this.fluidName = assetName; + this.fluid = fluid; + + if (assetName.startsWith("oil")) + { + this.needsRandomTick = true; + } + + this.setTranslationKey(assetName); + } + + @Override + @Nullable + public Boolean isEntityInsideMaterial(IBlockAccess world, BlockPos pos, IBlockState state, Entity entity, double yToTest, Material material, boolean testingHead) + { + return true; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote && this.fluidName.startsWith("oil") && playerIn instanceof EntityPlayerSP) + { + ClientProxyCore.playerClientHandler.onBuild(7, (EntityPlayerSP) playerIn); + } + + return super.onBlockActivated(worldIn, pos, state, playerIn, hand, side, hitX, hitY, hitZ); + } + + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + super.randomDisplayTick(stateIn, worldIn, pos, rand); + + if (this.fluidName.startsWith("oil") && rand.nextInt(1200) == 0) + { + worldIn.playSound(null, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, SoundEvents.BLOCK_LAVA_AMBIENT, SoundCategory.BLOCKS, rand.nextFloat() * 0.25F + 0.75F, + 0.00001F + rand.nextFloat() * 0.5F); + } + if (this.fluidName.equals("oil") && rand.nextInt(10) == 0) + { + BlockPos below = pos.down(); + IBlockState state = worldIn.getBlockState(below); + if (state.getBlock().isSideSolid(state, worldIn, below, EnumFacing.UP) && !worldIn.getBlockState(pos.down(2)).getMaterial().blocksMovement()) + { + GalacticraftCore.proxy.spawnParticle("oilDrip", new Vector3(pos.getX() + rand.nextFloat(), pos.getY() - 1.05D, pos.getZ() + rand.nextFloat()), new Vector3(0, 0, 0), new Object[] + {}); + } + } + } + + @Override + public boolean canDisplace(IBlockAccess world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + + return super.canDisplace(world, pos); + } + + @Override + public boolean displaceIfPossible(World world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + + return super.displaceIfPossible(world, pos); + } + + @Override + public boolean isFlammable(IBlockAccess world, BlockPos pos, EnumFacing face) + { + if (this.fluidName.startsWith("fuel")) + { + ((World) world).createExplosion(null, pos.getX(), pos.getY(), pos.getZ(), 6.0F, true); + return true; + } + return (this.fluidName.startsWith("oil")); + } + + @Override + public IBlockState getExtendedState(IBlockState oldState, IBlockAccess world, BlockPos pos) + { + IExtendedBlockState state = (IExtendedBlockState) oldState; + state = state.withProperty(FLOW_DIRECTION, (float) getFlowDirection(state, world, pos)); + IBlockState[][] upBlockState = new IBlockState[3][3]; + float[][] height = new float[3][3]; + float[][] corner = new float[2][2]; + upBlockState[1][1] = world.getBlockState(pos.down(this.densityDir)); + height[1][1] = this.getFluidHeightForRender(world, pos, upBlockState[1][1]); + + if (height[1][1] == 1) + { + for (int i = 0; i < 2; i++) + { + for (int j = 0; j < 2; j++) + { + corner[i][j] = 1; + } + } + } else + { + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + if (i != 1 || j != 1) + { + upBlockState[i][j] = world.getBlockState(pos.add(i - 1, 0, j - 1).down(this.densityDir)); + height[i][j] = this.getFluidHeightForRender(world, pos.add(i - 1, 0, j - 1), upBlockState[i][j]); + } + } + } + for (int i = 0; i < 2; i++) + { + for (int j = 0; j < 2; j++) + { + corner[i][j] = this.getFluidHeightAverage(height[i][j], height[i][j + 1], height[i + 1][j], height[i + 1][j + 1]); + } + } + // check for downflow above corners + boolean n = this.isFluid(upBlockState[0][1]); + boolean s = this.isFluid(upBlockState[2][1]); + boolean w = this.isFluid(upBlockState[1][0]); + boolean e = this.isFluid(upBlockState[1][2]); + boolean nw = this.isFluid(upBlockState[0][0]); + boolean ne = this.isFluid(upBlockState[0][2]); + boolean sw = this.isFluid(upBlockState[2][0]); + boolean se = this.isFluid(upBlockState[2][2]); + + if (nw || n || w) + { + corner[0][0] = 0.999F; + } + if (ne || n || e) + { + corner[0][1] = 0.999F; + } + if (sw || s || w) + { + corner[1][0] = 0.999F; + } + if (se || s || e) + { + corner[1][1] = 0.999F; + } + } + state = state.withProperty(LEVEL_CORNERS[0], corner[0][0]); + state = state.withProperty(LEVEL_CORNERS[1], corner[0][1]); + state = state.withProperty(LEVEL_CORNERS[2], corner[1][1]); + state = state.withProperty(LEVEL_CORNERS[3], corner[1][0]); + return state; + } + + public static double getFlowDirection(IBlockState state, IBlockAccess world, BlockPos pos) + { + if (!state.getMaterial().isLiquid()) + { + return -1000.0; + } + Vec3d vec = ((BlockFluidBase) state.getBlock()).getFlowVector(world, pos); + return vec.x == 0.0D && vec.z == 0.0D ? -1000.0D : Math.atan2(vec.z, vec.x) - Math.PI / 2D; + } + + private boolean isFluid(IBlockState state) + { + return state.getMaterial().isLiquid() || state.getBlock() instanceof IFluidBlock; + } + + @Override + public float getFluidHeightForRender(IBlockAccess world, BlockPos pos, IBlockState up) + { + IBlockState here = world.getBlockState(pos); + + if (here.getBlock() == this) + { + if (up.getMaterial().isLiquid() || up.getBlock() instanceof IFluidBlock) + { + return 1; + } + if (this.getMetaFromState(here) == this.getMaxRenderHeightMeta()) + { + return 0.875F; + } + } + if (here.getBlock() instanceof BlockLiquid) + { + return Math.min(1 - BlockLiquid.getLiquidHeightPercent(here.getValue(BlockLiquid.LEVEL)), 14f / 16); + } + return !here.getMaterial().isSolid() && up.getBlock() == this ? 1 : this.getQuantaPercentage(world, pos) * 0.875F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidPipe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidPipe.java new file mode 100644 index 00000000..2aa277bd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidPipe.java @@ -0,0 +1,512 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.tile.IColorable; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockFluidPipe extends BlockTransmitter implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum COLOR = PropertyEnum.create("color", EnumDyeColor.class); + + public static boolean ignoreDrop = false; + + private EnumPipeMode mode; + + private static final float MIN = 0.35F; + private static final float MAX = 0.65F; + protected static final AxisAlignedBB[] BOUNDING_BOXES = new AxisAlignedBB[] + { + + new AxisAlignedBB(MIN, MIN, MIN, MAX, MAX, MAX), // No connection + // 000000 + new AxisAlignedBB(MIN, MIN, MIN, MAX, MAX, 1.0D), // South 000001 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, MAX, MAX), // West 000010 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, MAX, 1.0D), // South West + // 000011 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, MAX, MAX), // North 000100 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, MAX, 1.0D), // North South + // 000101 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, MAX, MAX), // North West + // 000110 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, MAX, 1.0D), // North South + // West 000111 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, MAX, MAX), // East 001000 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, MAX, 1.0D), // East South + // 001001 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, MAX, MAX), // West East + // 001010 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, MAX, 1.0D), // South West + // East 001011 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, MAX, MAX), // North East + // 001100 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, MAX, 1.0D), // North South + // East 001101 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, MAX, MAX), // North East + // West 001110 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, MAX, 1.0D), // North South + // East West + // 001111 + + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, MAX, MAX), // Down 010000 + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, MAX, 1.0D), // Down South + // 010001 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, MAX, MAX), // Down West + // 010010 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, MAX, 1.0D), // Down South + // West 010011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, MAX, MAX), // Down North + // 010100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, MAX, 1.0D), // Down North + // South 010101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, MAX, MAX), // Down North + // West 010110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, MAX, 1.0D), // Down North + // South West + // 010111 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, MAX, MAX), // Down East + // 011000 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, MAX, 1.0D), // Down East + // South 011001 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, MAX, MAX), // Down West + // East 011010 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, MAX, 1.0D), // Down South + // West East + // 011011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, MAX, MAX), // Down North + // East 011100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, MAX, 1.0D), // Down North + // South East + // 011101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAX, MAX), // Down North + // East West + // 011110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAX, 1.0D), // Down North + // South East + // West 011111 + + new AxisAlignedBB(MIN, MIN, MIN, MAX, 1.0D, MAX), // Up 100000 + new AxisAlignedBB(MIN, MIN, MIN, MAX, 1.0D, 1.0D), // Up South + // 100001 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, 1.0D, MAX), // Up West 100010 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, 1.0D, 1.0D), // Up South West + // 100011 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, 1.0D, MAX), // Up North + // 100100 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, 1.0D, 1.0D), // Up North + // South 100101 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, 1.0D, MAX), // Up North West + // 100110 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, 1.0D, 1.0D), // Up North + // South West + // 100111 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, 1.0D, MAX), // Up East 101000 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, 1.0D, 1.0D), // Up East South + // 101001 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, 1.0D, MAX), // Up West East + // 101010 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, 1.0D, 1.0D), // Up South + // West East + // 101011 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, 1.0D, MAX), // Up North East + // 101100 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // 101101 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, 1.0D, MAX), // Up North + // East West + // 101110 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // West 101111 + + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, 1.0D, MAX), // Up Down 110000 + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, 1.0D, 1.0D), // Up Down South + // 110001 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, 1.0D, MAX), // Up Down West + // 110010 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, 1.0D, 1.0D), // Up Down + // South West + // 110011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, 1.0D, MAX), // Up Down North + // 110100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, 1.0D, 1.0D), // Up Down + // North South + // 110101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, 1.0D, MAX), // Up Down + // North West + // 110110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, 1.0D, 1.0D), // Up Down + // North South + // West 110111 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, 1.0D, MAX), // Up Down East + // 111000 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, 1.0D, 1.0D), // Up Down East + // South 111001 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, 1.0D, MAX), // Up Down West + // East 111010 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, 1.0D, 1.0D), // Up Down + // South West + // East 111011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, 1.0D, MAX), // Up Down + // North East + // 111100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // Up Down + // North South + // East 111101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, MAX), // Up Down + // North East + // West 111110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; // Up Down + // North + // South + // East West + // 111111 + + public BlockFluidPipe(String assetName, EnumPipeMode mode) + { + super(Material.GLASS); + this.setHardness(0.3F); + this.setSoundType(SoundType.GLASS); + this.setDefaultState(this.blockState.getBaseState().withProperty(COLOR, EnumDyeColor.WHITE)); + this.setTranslationKey(assetName); + this.mode = mode; + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + return BOUNDING_BOXES[getBoundingBoxIdx(state)]; + } + + private static int getBoundingBoxIdx(IBlockState state) + { + int i = 0; + + if (state.getValue(NORTH).booleanValue()) + { + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if (state.getValue(EAST).booleanValue()) + { + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if (state.getValue(SOUTH).booleanValue()) + { + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if (state.getValue(WEST).booleanValue()) + { + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + if (state.getValue(DOWN).booleanValue()) + { + i |= 1 << 4; + } + + if (state.getValue(UP).booleanValue()) + { + i |= 1 << 5; + } + + return i; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntityFluidPipe tile = (TileEntityFluidPipe) worldIn.getTileEntity(pos); + int pipeColor = state.getValue(COLOR).getDyeDamage(); + + if (!ignoreDrop && tile != null && pipeColor != 15) + { + spawnItem(worldIn, pos, pipeColor); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(GCBlocks.oxygenPipe); + // Never drop the 'pull' variety of pipe + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + worldIn.notifyLightSet(pos); + } + + @Override + public CreativeTabs getCreativeTab() + { + if (this.mode == EnumPipeMode.NORMAL) + { + return GalacticraftCore.galacticraftBlocksTab; + } + + return null; + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + TileEntityFluidPipe tile = (TileEntityFluidPipe) world.getTileEntity(pos); + tile.switchType(); + } + + return true; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + final TileEntityFluidPipe tileEntity = (TileEntityFluidPipe) worldIn.getTileEntity(pos); + + if (super.onBlockActivated(worldIn, pos, state, playerIn, hand, side, hitX, hitY, hitZ)) + { + return true; + } + + if (!worldIn.isRemote) + { + final ItemStack stack = playerIn.inventory.getCurrentItem(); + + if (!stack.isEmpty()) + { + if (stack.getItem() instanceof ItemDye) + { + final int dyeColor = playerIn.inventory.getCurrentItem().getItemDamage(); + + final byte colorBefore = tileEntity.getColor(state); + + tileEntity.onColorUpdate(); + + worldIn.setBlockState(pos, state.withProperty(COLOR, EnumDyeColor.byDyeDamage(dyeColor))); + + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(PacketSimple.EnumSimplePacket.C_RECOLOR_PIPE, GCCoreUtil.getDimensionID(worldIn), new Object[] + {pos}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(worldIn), pos.getX(), pos.getY(), pos.getZ(), 40.0)); + + if (colorBefore != (byte) dyeColor && !playerIn.capabilities.isCreativeMode) + { + playerIn.inventory.getCurrentItem().shrink(1); + } + + if (colorBefore != (byte) dyeColor && colorBefore != 15) + { + spawnItem(worldIn, pos, colorBefore); + } + + // GCCorePacketManager.sendPacketToClients(GCCorePacketManager.getPacket(GalacticraftCore.CHANNELENTITIES, + // tileEntity, tileEntity.getColor(), (byte) -1)); TODO Fix + // pipe color + + BlockPos tileVec = tileEntity.getPos(); + for (final EnumFacing dir : EnumFacing.VALUES) + { + final TileEntity tileAt = worldIn.getTileEntity(tileVec.offset(dir)); + + if (tileAt != null && tileAt instanceof IColorable) + { + ((IColorable) tileAt).onAdjacentColorChanged(dir); + } + } + + return true; + } + } + + } + + return false; + } + + private void spawnItem(World worldIn, BlockPos pos, int colorBefore) + { + final float f = 0.7F; + Random syncRandom = GCCoreUtil.getRandom(pos); + final double d0 = syncRandom.nextFloat() * f + (1.0F - f) * 0.5D; + final double d1 = syncRandom.nextFloat() * f + (1.0F - f) * 0.2D + 0.6D; + final double d2 = syncRandom.nextFloat() * f + (1.0F - f) * 0.5D; + final EntityItem entityitem = new EntityItem(worldIn, pos.getX() + d0, pos.getY() + d1, pos.getZ() + d2, new ItemStack(Items.DYE, 1, colorBefore)); + entityitem.setDefaultPickupDelay(); + worldIn.spawnEntity(entityitem); + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityFluidPipe(); + } + +// @SideOnly(Side.CLIENT) +// @Override +// public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) +// { +// return this.getCollisionBoundingBox(worldIn.getBlockState(pos), worldIn, pos); +// } + + @Override + public NetworkType getNetworkType(IBlockState state) + { + return NetworkType.FLUID; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, COLOR, UP, DOWN, NORTH, EAST, SOUTH, WEST); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(COLOR).getMetadata(); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.TRANSMITTER; + } + + public EnumPipeMode getMode() + { + return mode; + } + + public enum EnumPipeMode implements IStringSerializable + { + + NORMAL(0, "normal"), PULL(1, "pull"); + + private final int meta; + private final String name; + + EnumPipeMode(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return meta; + } + + public static EnumPipeMode byMetadata(int ordinal) + { + return EnumPipeMode.values()[ordinal]; + } + + @Override + public String getName() + { + return this.name; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidTank.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidTank.java new file mode 100644 index 00000000..333f0f6a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidTank.java @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidActionResult; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockFluidTank extends Block implements IShiftDescription, ISortableBlock, ITileEntityProvider +{ + + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool DOWN = PropertyBool.create("down"); + private static final AxisAlignedBB BOUNDS = new AxisAlignedBB(0.05F, 0.0F, 0.05F, 0.95F, 1.0F, 0.95F); + + public BlockFluidTank(String assetName) + { + super(Material.GLASS); + this.setHardness(3.0F); + this.setResistance(8.0F); + this.setSoundType(SoundType.GLASS); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return BOUNDS; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityFluidTank) + { + TileEntityFluidTank tank = (TileEntityFluidTank) tile; + tank.onBreak(); + } + super.breakBlock(worldIn, pos, state); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @SideOnly(Side.CLIENT) + @Override + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, UP, DOWN); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState stateAbove = worldIn.getBlockState(pos.up()); + IBlockState stateBelow = worldIn.getBlockState(pos.down()); + return state.withProperty(UP, stateAbove.getBlock() == this).withProperty(DOWN, stateBelow.getBlock() == this); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState(); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return 0; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityFluidTank(); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (super.onBlockActivated(worldIn, pos, state, playerIn, hand, side, hitX, hitY, hitZ)) + { + return true; + } + + if (hand == EnumHand.OFF_HAND) + { + return false; + } + + ItemStack current = playerIn.inventory.getCurrentItem(); + int slot = playerIn.inventory.currentItem; + + if (!current.isEmpty()) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityFluidTank) + { + TileEntityFluidTank tank = (TileEntityFluidTank) tile; + + FluidActionResult forgeResult = FluidUtil.interactWithFluidHandler(current, tank.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null), playerIn); + if (forgeResult.isSuccess()) + { + playerIn.inventory.setInventorySlotContents(slot, forgeResult.result); + if (playerIn.inventoryContainer != null) + { + playerIn.inventoryContainer.detectAndSendChanges(); + } + return true; + } + + return false; + } + } + + return false; + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntityFluidTank) + { + TileEntityFluidTank tank = (TileEntityFluidTank) tile; + return tank.fluidTank.getFluid() == null || tank.fluidTank.getFluid().amount == 0 ? 0 : tank.fluidTank.getFluid().getFluid().getLuminosity(tank.fluidTank.getFluid()); + } + + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFuelLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFuelLoader.java new file mode 100644 index 00000000..4875ed2b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFuelLoader.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class BlockFuelLoader extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static IMachineSidesProperties MACHINESIDES_RENDERTYPE = IMachineSidesProperties.TWOFACES_HORIZ; + public static final PropertyEnum SIDES = MACHINESIDES_RENDERTYPE.asProperty; + + public BlockFuelLoader(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityFuelLoader(); + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + worldIn.setBlockState(pos, state.withProperty(FACING, EnumFacing.byHorizontalIndex(angle).getOpposite()), 3); + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + } + + @Override + public void onPlayerDestroy(World worldIn, BlockPos pos, IBlockState state) + { + super.onPlayerDestroy(worldIn, pos, state); + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, SIDES); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + + return IMachineSides.addPropertyForTile(state, tile, MACHINESIDES_RENDERTYPE, SIDES); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public boolean onSneakUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof IMachineSides) + { + ((IMachineSides) tile).nextSideConfiguration(tile); + return true; + } + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGlowstoneTorch.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGlowstoneTorch.java new file mode 100644 index 00000000..792b6b03 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGlowstoneTorch.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockGlowstoneTorch extends BlockTorchBase implements IShiftDescription, ISortableBlock +{ + + public BlockGlowstoneTorch(String assetName) + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); + this.setTickRandomly(true); + this.setTranslationKey(assetName); + this.setLightLevel(0.85F); + this.setSoundType(SoundType.WOOD); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : FACING.getAllowedValues()) + { + if (this.canPlaceAt(worldIn, pos, enumfacing)) + { + return true; + } + } + + return false; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.checkForDrop(worldIn, pos, state); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.checkForDrop(worldIn, pos, state)) + { + return; + } else + { + EnumFacing enumfacing = state.getValue(FACING); + EnumFacing.Axis enumfacing$axis = enumfacing.getAxis(); + EnumFacing enumfacing1 = enumfacing.getOpposite(); + boolean flag = false; + + if (enumfacing$axis.isHorizontal() && !worldIn.isSideSolid(pos.offset(enumfacing1), enumfacing, true)) + { + flag = true; + } else if (enumfacing$axis.isVertical() && !this.canPlaceOn(worldIn, pos.offset(enumfacing1))) + { + flag = true; + } + + if (flag) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + } + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + super.updateTick(worldIn, pos, state, rand); + + if (getMetaFromState(state) == 0) + { + this.onBlockAdded(worldIn, pos, state); + } + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {FACING}); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGrating.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGrating.java new file mode 100644 index 00000000..ec0a2769 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGrating.java @@ -0,0 +1,922 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.BlockDynamicLiquid; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.property.IExtendedBlockState; +import net.minecraftforge.common.property.IUnlistedProperty; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.registries.IForgeRegistry; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.JavaUtil; +import micdoodle8.mods.galacticraft.core.util.PropertyObject; + +public class BlockGrating extends Block implements ISortableBlock, IPartialSealableBlock +{ + + public static final PropertyObject BASE_STATE = new PropertyObject<>("held_state", IBlockState.class); + protected static final AxisAlignedBB BOUNDING_BOX = new AxisAlignedBB(0.0D, 0.875D, 0.0D, 1.0D, 1.0D, 1.0D); + public static IBlockAccess savedBlockAccess; + public static BlockPos savedPos; + + private int adjacentSourceBlocks; + private final IBlockState liquidEquivalentDynamic; + private final IBlockState liquidEquivalentStatic; + private boolean forgeFluid = false; + private BlockFluidBase forgeBlock = null; + public static List forgeBlocks = new ArrayList<>(); + public static int number = 3; // That's Plain, Water, Lava - any more will + // be Forge Fluids + private static Method gofd; + private static Field fieldQuantaPerBlock; + private ThreadLocal replaceWithFluidIntended = new ThreadLocal<>().withInitial(() -> false); + + static + { + try + { + gofd = BlockFluidClassic.class.getDeclaredMethod("getOptimalFlowDirections", World.class, BlockPos.class); + gofd.setAccessible(true); + } catch (Exception e) + { + e.printStackTrace(); + } + try + { + fieldQuantaPerBlock = BlockFluidBase.class.getDeclaredField("quantaPerBlock"); + fieldQuantaPerBlock.setAccessible(true); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + public BlockGrating(String assetName, Material material) + { + super(material); + if (this.material == Material.LAVA) + { + this.liquidEquivalentStatic = Blocks.LAVA.getDefaultState(); + this.liquidEquivalentDynamic = Blocks.FLOWING_LAVA.getDefaultState(); + this.setTickRandomly(true); + } else if (this.material == Material.WATER) + { + this.liquidEquivalentStatic = Blocks.WATER.getDefaultState(); + this.liquidEquivalentDynamic = Blocks.FLOWING_WATER.getDefaultState(); + this.setTickRandomly(true); + } else + { + this.liquidEquivalentStatic = null; + this.liquidEquivalentDynamic = null; + } + this.setHardness(0.5F); + this.blockResistance = 15F; + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + public BlockGrating(Block forge) + { + super(forge.getMaterial(forge.getDefaultState())); + this.forgeFluid = true; + this.forgeBlock = (BlockFluidBase) forge; + this.liquidEquivalentStatic = null; + this.liquidEquivalentDynamic = null; + this.setHardness(0.5F); + this.blockResistance = 15F; + this.setSoundType(SoundType.METAL); + this.setTranslationKey("grating" + number); + number++; + } + + public static void createForgeFluidVersion(Block b, IForgeRegistry blockRegistry) + { + if (b instanceof BlockFluidBase) + { + BlockGrating grating = new BlockGrating(b); + grating.setLightLevel(b.getLightValue(b.getDefaultState()) / 15F); + BlockGrating.forgeBlocks.add(grating); + GCBlocks.registerBlock(grating, null); + blockRegistry.register(grating); + } + } + + public static void createForgeFluidVersions(IForgeRegistry blockRegistry) + { + Iterator it = Block.REGISTRY.iterator(); + while (it.hasNext()) + { + Block test = it.next(); + if (test instanceof BlockFluidBase) + { + createForgeFluidVersion(test, blockRegistry); + } + } + } + + public static void remapForgeVariants() + { + for (Block b : forgeBlocks) + { + BlockGrating.remapVariant(b); + } + } + + @Override + public String getLocalizedName() + { + return I18n.translateToLocal("tile.grating.name"); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) + { + return true; + } + + @SideOnly(Side.CLIENT) + public static void remapVariant(Block grating) + { + ModelLoader.setCustomStateMapper(grating, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState ignore) + { + return new ModelResourceLocation("galacticraftcore:grating", "normal"); + } + }); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) + { + return BOUNDING_BOX; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + if (JavaUtil.instance.isCalledBy(BlockDynamicLiquid.class, BlockFluidBase.class)) + { + return Item.getItemFromBlock(Blocks.AIR); + } + Thread.dumpStack(); + return Item.getItemFromBlock(GCBlocks.grating); + } + + @Override + @Nullable + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Item.getItemFromBlock(GCBlocks.grating), 1, 0); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(GCBlocks.grating), 1, 0); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockGratingExtendedState(this, new IProperty[] + {BlockLiquid.LEVEL, BlockFluidBase.LEVEL}, new IUnlistedProperty[] + {BASE_STATE}); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BlockLiquid.LEVEL, Integer.valueOf(meta)).withProperty(BlockFluidBase.LEVEL, Integer.valueOf(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((Integer) state.getValue(BlockLiquid.LEVEL)).intValue(); + } + + @Override + public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) + { + savedBlockAccess = world; + savedPos = pos; + return ((IExtendedBlockState) state).withProperty(BASE_STATE, this.getLiquidBlock(state)); + } + + public IBlockState getLiquidBlock(IBlockState state) + { + if (this.forgeFluid && state.getPropertyKeys().contains(BlockFluidBase.LEVEL)) + { + int level = state.getValue(BlockFluidBase.LEVEL).intValue(); + return this.forgeBlock.getDefaultState().withProperty(BlockFluidBase.LEVEL, level); + } else if (this.material == Material.WATER || this.material == Material.LAVA) + { + int level = state.getValue(BlockLiquid.LEVEL).intValue(); + return this.liquidEquivalentStatic.withProperty(BlockLiquid.LEVEL, level); + } + + return null; + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) + { + IBlockState newBlock = world.getBlockState(pos); + if (newBlock.getBlock() instanceof BlockGrating) + { + return; + } + if (Blocks.AIR == newBlock.getBlock() && this != GCBlocks.grating) + { + world.setBlockState(pos, this.getLiquidBlock(state)); + this.dropBlockAsItem(world, pos, state, 0); + } + if (this.replaceWithFluidIntended.get()) + { + // Intended replacement with fluid block, called from + // this.removedByPlayer() + this.replaceWithFluidIntended.set(false); + return; + } + if (newBlock.getBlock() instanceof BlockFluidBase) + { + for (BlockGrating b : forgeBlocks) + { + if (newBlock.getBlock() == b.forgeBlock) + { + int level = newBlock.getValue(BlockFluidBase.LEVEL).intValue(); + IBlockState bs = b.getDefaultState().withProperty(BlockFluidBase.LEVEL, level).withProperty(BlockLiquid.LEVEL, level); + world.setBlockState(pos, bs); + return; + } + } + // If not a known Forge fluid block, drop grating item + Block.spawnAsEntity(world, pos, new ItemStack(GCBlocks.grating)); + return; + } + if (newBlock.getBlock() instanceof BlockLiquid) + { + if (newBlock.getMaterial() == Material.WATER) + { + int level = newBlock.getValue(BlockLiquid.LEVEL).intValue(); + IBlockState bs = GCBlocks.gratingWater.getDefaultState().withProperty(BlockLiquid.LEVEL, level); + world.setBlockState(pos, bs); + } else if (newBlock.getMaterial() == Material.LAVA) + { + int level = newBlock.getValue(BlockLiquid.LEVEL).intValue(); + IBlockState bs = GCBlocks.gratingLava.getDefaultState().withProperty(BlockLiquid.LEVEL, level); + world.setBlockState(pos, bs); + } + } + } + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + this.onBlockHarvested(world, pos, state, player); + if (this == GCBlocks.grating) + { + return world.setBlockState(pos, Blocks.AIR.getDefaultState(), world.isRemote ? 11 : 3); + } + this.replaceWithFluidIntended.set(true); + return world.setBlockState(pos, this.getLiquidBlock(state), world.isRemote ? 11 : 3); + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + IBlockState oldBlock = world.getBlockState(pos); + if (oldBlock.getBlock() instanceof BlockGrating) + { + return this.getStateFromMeta(meta); + } + if (oldBlock.getBlock() instanceof BlockFluidBase) + { + for (BlockGrating b : forgeBlocks) + { + if (oldBlock.getBlock() == b.forgeBlock) + { + int level = oldBlock.getValue(BlockFluidBase.LEVEL).intValue(); + return b.getDefaultState().withProperty(BlockFluidBase.LEVEL, level).withProperty(BlockLiquid.LEVEL, level); + } + } + } else if (oldBlock.getBlock() instanceof BlockLiquid) + { + if (oldBlock.getMaterial() == Material.WATER) + { + int level = oldBlock.getValue(BlockLiquid.LEVEL).intValue(); + return GCBlocks.gratingWater.getDefaultState().withProperty(BlockLiquid.LEVEL, level); + } else if (oldBlock.getMaterial() == Material.LAVA) + { + int level = oldBlock.getValue(BlockLiquid.LEVEL).intValue(); + return GCBlocks.gratingLava.getDefaultState().withProperty(BlockLiquid.LEVEL, level); + } + } + return this.getStateFromMeta(meta); + } + + @Override + public Material getMaterial(IBlockState state) + { + // Disable conversion to plain stone (lava above water in + // BlockDynamicLiquid.updateTick) - also allows water centre source + // block to form above this + // also allow endermen and others to teleport onto this + // (EntityLivingBase) and players to spawn on this (World) + int found = JavaUtil.instance.isCalledBySecond(BlockDynamicLiquid.class, EntityLivingBase.class, World.class); + if (found > 0) + { + if (found > 1 || JavaUtil.instance.isCalledByThird(WorldServer.class)) + { + return Material.IRON; + } + } + + return this.material; + } + + @Override + public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + { + return false; + } + + // Pistons cannot move this + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.BLOCK; + } + + @Override + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return false; + } + + @Override + public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid) + { + return true; + } + + // ---------------From BlockDynamicLiquid + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!this.material.isLiquid()) + return; + if (this.forgeFluid) + { + if (this.forgeBlock instanceof BlockFluidClassic) + { + this.updateTickForge(worldIn, pos, state, rand); + } + return; + } + + int i = ((Integer) state.getValue(BlockLiquid.LEVEL)).intValue(); + int j = 1; + + if (this.material == Material.LAVA && !worldIn.provider.doesWaterVaporize()) + { + j = 2; + } + + int k = this.tickRate(worldIn); + + if (i > 0) + { + int l = -100; + this.adjacentSourceBlocks = 0; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + l = this.checkAdjacentBlock(worldIn, pos.offset(enumfacing), l); + } + + int i1 = l + j; + + if (i1 >= 8 || l < 0) + { + i1 = -1; + } + + int j1 = this.getDepth(worldIn.getBlockState(pos.up())); + + if (j1 >= 0) + { + if (j1 >= 8) + { + i1 = j1; + } else + { + i1 = j1 + 8; + } + } + + if (this.adjacentSourceBlocks >= 2 && net.minecraftforge.event.ForgeEventFactory.canCreateFluidSource(worldIn, pos, state, this.material == Material.WATER)) + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + + if (iblockstate.getMaterial().isSolid()) + { + i1 = 0; + } else if (iblockstate.getMaterial() == this.material && ((Integer) iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0) + { + i1 = 0; + } + } + + if (this.material == Material.LAVA && i < 8 && i1 < 8 && i1 > i && rand.nextInt(4) != 0) + { + k *= 4; + } + + if (i1 == i) + { +// this.placeStaticBlock(worldIn, pos, state); + } else + { + i = i1; + + if (i1 < 0) + { + worldIn.setBlockState(pos, GCBlocks.grating.getDefaultState(), 3); + } else + { + state = state.withProperty(BlockLiquid.LEVEL, Integer.valueOf(i1)); + worldIn.setBlockState(pos, state, 2); + worldIn.scheduleUpdate(pos, this, k); + worldIn.notifyNeighborsOfStateChange(pos, this, false); + } + } + } else + { +// this.placeStaticBlock(worldIn, pos, state); + } + + BlockPos down = pos.down(); + IBlockState iblockstate1 = worldIn.getBlockState(down); + + if (this.canFlowInto(worldIn, down, iblockstate1)) + { + if (this.material == Material.LAVA && iblockstate1.getMaterial() == Material.WATER && !(iblockstate1.getBlock() instanceof BlockGrating)) + { + worldIn.setBlockState(down, Blocks.STONE.getDefaultState()); + return; + } + + if (i >= 8) + { + this.tryFlowInto(worldIn, down, iblockstate1, i); + } else + { + this.tryFlowInto(worldIn, down, iblockstate1, i + 8); + } + } else if (i >= 0 && (i == 0 || this.isBlocked(worldIn, down, iblockstate1))) + { + Set set = this.getPossibleFlowDirections(worldIn, pos); + int k1 = i + j; + + if (i >= 8) + { + k1 = 1; + } + + if (k1 >= 8) + { + return; + } + + for (EnumFacing enumfacing1 : set) + { + this.tryFlowInto(worldIn, pos.offset(enumfacing1), worldIn.getBlockState(pos.offset(enumfacing1)), k1); + } + } + } + + private void tryFlowInto(World worldIn, BlockPos pos, IBlockState state, int level) + { + if (this.canFlowInto(worldIn, pos, state)) + { + if (state.getMaterial() != Material.AIR && !(state.getBlock() instanceof BlockGrating)) + { + if (this.material == Material.LAVA) + { + } else + { + if (state.getBlock() != Blocks.SNOW_LAYER) + state.getBlock().dropBlockAsItem(worldIn, pos, state, 0); + } + } + + worldIn.setBlockState(pos, this.liquidEquivalentDynamic.withProperty(BlockLiquid.LEVEL, Integer.valueOf(level)), 3); + } + } + + private int getSlopeDistance(World worldIn, BlockPos pos, int distance, EnumFacing calculateFlowCost) + { + int i = 1000; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (enumfacing != calculateFlowCost) + { + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (!this.isBlocked(worldIn, blockpos, iblockstate) && (iblockstate.getMaterial() != this.material || ((Integer) iblockstate.getValue(BlockLiquid.LEVEL)).intValue() > 0)) + { + if (!this.isBlocked(worldIn, blockpos.down(), iblockstate)) + { + return distance; + } + + if (distance < this.getSlopeFindDistance(worldIn)) + { + int j = this.getSlopeDistance(worldIn, blockpos, distance + 1, enumfacing.getOpposite()); + + if (j < i) + { + i = j; + } + } + } + } + } + + return i; + } + + private int getSlopeFindDistance(World worldIn) + { + return this.material == Material.LAVA && !worldIn.provider.doesWaterVaporize() ? 2 : 4; + } + + /** + * This method returns a Set of EnumFacing + */ + private Set getPossibleFlowDirections(World worldIn, BlockPos pos) + { + int i = 1000; + Set set = EnumSet.noneOf(EnumFacing.class); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (!this.isBlocked(worldIn, blockpos, iblockstate) && (iblockstate.getMaterial() != this.material || ((Integer) iblockstate.getValue(BlockLiquid.LEVEL)).intValue() > 0)) + { + int j; + + if (this.isBlocked(worldIn, blockpos.down(), worldIn.getBlockState(blockpos.down()))) + { + j = this.getSlopeDistance(worldIn, blockpos, 1, enumfacing.getOpposite()); + } else + { + j = 0; + } + + if (j < i) + { + set.clear(); + } + + if (j <= i) + { + set.add(enumfacing); + i = j; + } + } + } + + return set; + } + + private boolean isBlocked(World worldIn, BlockPos pos, IBlockState state) + { + IBlockState bs = worldIn.getBlockState(pos); + Block block = bs.getBlock(); + return !(block instanceof BlockDoor) && block != Blocks.STANDING_SIGN && block != Blocks.LADDER && block != Blocks.REEDS + ? (block.getMaterial(bs) != Material.PORTAL && block.getMaterial(bs) != Material.STRUCTURE_VOID ? block.getMaterial(bs).blocksMovement() : true) : true; + } + + protected int checkAdjacentBlock(World worldIn, BlockPos pos, int currentMinLevel) + { + int i = this.getDepth(worldIn.getBlockState(pos)); + + if (i < 0) + { + return currentMinLevel; + } else + { + if (i == 0) + { + ++this.adjacentSourceBlocks; + } + + if (i >= 8) + { + i = 0; + } + + return currentMinLevel >= 0 && i >= currentMinLevel ? currentMinLevel : i; + } + } + + private boolean canFlowInto(World worldIn, BlockPos pos, IBlockState state) + { + Material material = state.getMaterial(); + return material != this.material && material != Material.LAVA && !this.isBlocked(worldIn, pos, state); + } + + // ---------------From BlockLiquid etc + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (this.material.isLiquid()) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (this.material.isLiquid()) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + } + + @Override + public int tickRate(World worldIn) + { + if (this.forgeFluid) + { + return this.forgeBlock.tickRate(worldIn); + } + return this.material == Material.WATER ? 5 : (this.material == Material.LAVA ? (worldIn.provider.isNether() ? 10 : 30) : 0); + } + + protected int getDepth(IBlockState p_189542_1_) + { + return p_189542_1_.getMaterial() == this.material ? ((Integer) p_189542_1_.getValue(BlockLiquid.LEVEL)).intValue() : -1; + } + + // ------------------From BlockFluidBase + + public void updateTickForge(World world, BlockPos pos, IBlockState state, Random rand) + { +// if (!isSourceBlock(world, pos) && ForgeEventFactory.canCreateFluidSource(world, pos, state, false)) +// { +// int adjacentSourceBlocks = +// (isSourceBlock(world, pos.north()) ? 1 : 0) + +// (isSourceBlock(world, pos.south()) ? 1 : 0) + +// (isSourceBlock(world, pos.east()) ? 1 : 0) + +// (isSourceBlock(world, pos.west()) ? 1 : 0); +// if (adjacentSourceBlocks >= 2 && (world.getBlockState(pos.down(1)).getMaterial().isSolid() || isSourceBlock(world, pos.down(1)))) +// world.setBlockState(pos, state.withProperty(BlockFluidBase.LEVEL, 0)); +// } + + int quantaPerBlock = 8; + try + { + quantaPerBlock = fieldQuantaPerBlock.getInt(this.forgeBlock); + } catch (Exception e) + { + } + int tickRate = this.forgeBlock.tickRate(world); + int quantaRemaining = quantaPerBlock - state.getValue(BlockFluidBase.LEVEL); + int expQuanta = -101; + + // check adjacent block levels if non-source + if (quantaRemaining < quantaPerBlock) + { + if (testSame(world, pos.add(0, 1, 0)) || testSame(world, pos.add(-1, 1, 0)) || testSame(world, pos.add(1, 1, 0)) || testSame(world, pos.add(0, 1, -1)) || testSame(world, pos.add(0, 1, 1))) + { + expQuanta = quantaPerBlock - 1; + } else + { + int maxQuanta = -100; + maxQuanta = getLargerQuanta(world, pos.add(-1, 0, 0), maxQuanta); + maxQuanta = getLargerQuanta(world, pos.add(1, 0, 0), maxQuanta); + maxQuanta = getLargerQuanta(world, pos.add(0, 0, -1), maxQuanta); + maxQuanta = getLargerQuanta(world, pos.add(0, 0, 1), maxQuanta); + + expQuanta = maxQuanta - 1; + } + + // decay calculation + if (expQuanta != quantaRemaining) + { + quantaRemaining = expQuanta; + + if (expQuanta <= 0) + { + world.setBlockState(pos, GCBlocks.grating.getDefaultState(), 3); + } else + { + world.setBlockState(pos, state.withProperty(BlockFluidBase.LEVEL, quantaPerBlock - expQuanta), 2); + world.scheduleUpdate(pos, this, tickRate); + world.notifyNeighborsOfStateChange(pos, this.forgeBlock, false); + } + } + } + // This is a "source" block, set meta to zero, and send a server only + // update + else if (quantaRemaining >= quantaPerBlock) + { + world.setBlockState(pos, this.getDefaultState(), 2); + } + + // Flow vertically if possible + if (this.forgeBlock.canDisplace(world, pos.down(1))) + { + flowIntoBlock(world, pos.down(1), 1); + return; + } + + // Flow outward if possible + int flowMeta = quantaPerBlock - quantaRemaining + 1; + if (flowMeta >= quantaPerBlock) + { + return; + } + + if (isSourceBlock(world, pos) || !((BlockFluidClassic) this.forgeBlock).isFlowingVertically(world, pos)) + { + Block test = world.getBlockState(pos.up(1)).getBlock(); + if (test == this || test == this.forgeBlock) + { + flowMeta = 1; + } + + boolean flowTo[]; + try + { + flowTo = (boolean[]) gofd.invoke(this.forgeBlock, world, pos); + + if (flowTo[0]) + flowIntoBlock(world, pos.add(-1, 0, 0), flowMeta); + if (flowTo[1]) + flowIntoBlock(world, pos.add(1, 0, 0), flowMeta); + if (flowTo[2]) + flowIntoBlock(world, pos.add(0, 0, -1), flowMeta); + if (flowTo[3]) + flowIntoBlock(world, pos.add(0, 0, 1), flowMeta); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + private boolean testSame(World world, BlockPos pos) + { + Block test = world.getBlockState(pos).getBlock(); + return test == this || test == this.forgeBlock; + } + + private boolean isSourceBlock(IBlockAccess world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + return state.getBlock() instanceof BlockFluidBase && state.getValue(BlockFluidBase.LEVEL) == 0; + } + + protected int getLargerQuanta(IBlockAccess world, BlockPos pos, int compare) + { + int quantaRemaining = this.forgeBlock.getQuantaValue(world, pos); + if (quantaRemaining <= 0) + { + return compare; + } + return quantaRemaining >= compare ? quantaRemaining : compare; + } + + protected void flowIntoBlock(World world, BlockPos pos, int meta) + { + if (meta < 0) + return; + if (this.forgeBlock.displaceIfPossible(world, pos)) + { + world.setBlockState(pos, this.forgeBlock.getBlockState().getBaseState().withProperty(BlockFluidBase.LEVEL, meta), 3); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGratingExtendedState.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGratingExtendedState.java new file mode 100644 index 00000000..c5286468 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGratingExtendedState.java @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.IBlockState; + +import net.minecraftforge.common.property.ExtendedBlockState; +import net.minecraftforge.common.property.IExtendedBlockState; +import net.minecraftforge.common.property.IUnlistedProperty; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.BlockFluidClassic; + +import micdoodle8.mods.galacticraft.core.util.JavaUtil; + +import com.google.common.base.Predicates; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Iterables; + +public class BlockGratingExtendedState extends ExtendedBlockState +{ + + public BlockGratingExtendedState(Block blockIn, IProperty[] properties, IUnlistedProperty[] unlistedProperties) + { + super(blockIn, properties, unlistedProperties); + } + + @Override + @Nonnull + protected StateImplementation createState(@Nonnull Block block, @Nonnull ImmutableMap, Comparable> properties, @Nullable ImmutableMap, Optional> unlistedProperties) + { + if (unlistedProperties == null || unlistedProperties.isEmpty()) + return super.createState(block, properties, unlistedProperties); + return new ExtendedStateImplementation(block, properties, unlistedProperties, null, null); + } + + protected static class ExtendedStateImplementation extends StateImplementation implements IExtendedBlockState + { + + private final ImmutableMap, Optional> unlistedProperties; + private IBlockState cleanState; + private final Block blockBase; + + protected ExtendedStateImplementation(Block block, ImmutableMap, Comparable> properties, ImmutableMap, Optional> unlistedProperties, @Nullable ImmutableTable, Comparable, IBlockState> table, IBlockState clean) + { + super(block, properties, table); + this.unlistedProperties = unlistedProperties; + this.cleanState = clean == null ? this : clean; + this.blockBase = block; + } + + /** + * Get a version of this BlockState with the given Property now set to + * the given value + */ + @Override + @Nonnull + public , V extends T> IBlockState withProperty(@Nonnull IProperty property, @Nonnull V value) + { + IBlockState clean = super.withProperty(property, value); + if (clean == this.cleanState) + { + return this; + } + + if (Iterables.all(unlistedProperties.values(), Predicates.>equalTo(Optional.empty()))) + { // no + // dynamic + // properties + // present, + // looking + // up + // in + // the + // normal + // table + return clean; + } + + return new ExtendedStateImplementation(getBlock(), clean.getProperties(), unlistedProperties, ((StateImplementation) clean).getPropertyValueTable(), this.cleanState); + } + + @Override + public IExtendedBlockState withProperty(IUnlistedProperty property, V value) + { + if (!this.unlistedProperties.containsKey(property)) + { + throw new IllegalArgumentException("Cannot set unlisted property " + property + " as it does not exist in " + getBlock().getBlockState()); + } + if (!property.isValid(value)) + { + throw new IllegalArgumentException( + "Cannot set unlisted property " + property + " to " + value + " on block " + Block.REGISTRY.getNameForObject(getBlock()) + ", it is not an allowed value"); + } + Map, Optional> newMap = new HashMap, Optional>(unlistedProperties); + newMap.put(property, Optional.ofNullable(value)); + if (Iterables.all(newMap.values(), Predicates.>equalTo(Optional.empty()))) + { // no + // dynamic + // properties, + // lookup + // normal + // state + return (IExtendedBlockState) cleanState; + } + return new ExtendedStateImplementation(getBlock(), getProperties(), ImmutableMap.copyOf(newMap), propertyValueTable, this.cleanState); + } + + @Override + public Collection> getUnlistedNames() + { + return Collections.unmodifiableCollection(unlistedProperties.keySet()); + } + + @Override + public V getValue(IUnlistedProperty property) + { + if (!this.unlistedProperties.containsKey(property)) + { + throw new IllegalArgumentException("Cannot get unlisted property " + property + " as it does not exist in " + getBlock().getBlockState()); + } + return property.getType().cast(this.unlistedProperties.get(property).orElse(null)); + } + + @Override + public ImmutableMap, Optional> getUnlistedProperties() + { + return unlistedProperties; + } + + @Override + public IBlockState getClean() + { + return cleanState; + } + + @Override + public Block getBlock() + { + if (JavaUtil.instance.isCalledBy(BlockFluidClassic.class, BlockFluidBase.class, BlockFluidGC.class)) + { + IBlockState bs = ((BlockGrating) blockBase).getLiquidBlock(this); + if (bs != null) + return bs.getBlock(); + } + return this.blockBase; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPad.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPad.java new file mode 100644 index 00000000..5d73fe5b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPad.java @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFuelerSingle; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPadSingle; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockLandingPad extends BlockAdvancedTile implements IPartialSealableBlock, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum PAD_TYPE = PropertyEnum.create("type", EnumLandingPadType.class); + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0, 0.0, 0.0, 1.0, 0.1875, 1.0); + + public enum EnumLandingPadType implements IStringSerializable + { + + ROCKET_PAD(0, "rocket"), BUGGY_PAD(1, "buggy"); + + private final int meta; + private final String name; + + EnumLandingPadType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumLandingPadType[] values = values(); + + public static EnumLandingPadType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockLandingPad(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setResistance(10.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int i = 0; i < 2; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + + private boolean checkAxis(World worldIn, BlockPos pos, Block block, EnumFacing facing) + { + int sameCount = 0; + for (int i = 1; i <= 3; i++) + { + if (worldIn.getBlockState(pos.offset(facing, i)).getBlock() == block) + { + sameCount++; + } + } + + return sameCount < 3; + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + final Block id = GCBlocks.landingPad; + + if (!checkAxis(worldIn, pos, id, EnumFacing.EAST) || !checkAxis(worldIn, pos, id, EnumFacing.WEST) || !checkAxis(worldIn, pos, id, EnumFacing.NORTH) + || !checkAxis(worldIn, pos, id, EnumFacing.SOUTH)) + { + return false; + } + + if (worldIn.getBlockState(pos.offset(EnumFacing.DOWN)).getBlock() == GCBlocks.landingPad && side == EnumFacing.UP) + { + return false; + } else + { + return this.canPlaceBlockAt(worldIn, pos); + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + switch (meta) + { + case 0: + return new TileEntityLandingPadSingle(); + case 1: + return new TileEntityBuggyFuelerSingle(); + default: + return null; + } + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return direction == EnumFacing.UP; + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public String getShiftDescription(int meta) + { + if (meta == 0) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + return GCCoreUtil.translate("tile.buggy_pad.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(PAD_TYPE, EnumLandingPadType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumLandingPadType) state.getValue(PAD_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, PAD_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.PAD; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPadFull.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPadFull.java new file mode 100644 index 00000000..2c3c2b38 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPadFull.java @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFueler; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; + +public class BlockLandingPadFull extends BlockAdvancedTile implements IPartialSealableBlock +{ + + public static final PropertyEnum PAD_TYPE = PropertyEnum.create("type", EnumLandingPadFullType.class); + private final AxisAlignedBB AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.1875D, 1.0D); + + public enum EnumLandingPadFullType implements IStringSerializable + { + + ROCKET_PAD(0, "rocket"), BUGGY_PAD(1, "buggy"); + + private final int meta; + private final String name; + + EnumLandingPadFullType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumLandingPadFullType[] values = values(); + + public static EnumLandingPadFullType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockLandingPadFull(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setResistance(10.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); +// this.maxY = 0.25F; + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public int quantityDropped(Random par1Random) + { + return 9; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + if (var9 instanceof IMultiBlock) + { + ((IMultiBlock) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(GCBlocks.landingPad); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { +// switch (getMetaFromState(blockState)) +// { +// case 0: +// return new AxisAlignedBB(pos.getX() + this.minX, pos.getY() + this.minY, pos.getZ() + this.minZ, +// pos.getX() + this.maxX, pos.getY() + this.maxY, pos.getZ() + this.maxZ); TODO +// case 2: +// return new AxisAlignedBB(pos.getX() + this.minX, pos.getY() + this.minY, pos.getZ() + this.minZ, +// pos.getX() + this.maxX, pos.getY() + this.maxY, pos.getZ() + this.maxZ); +// default: +// } + return this.AABB; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (int x2 = -1; x2 < 2; ++x2) + { + for (int z2 = -1; z2 < 2; ++z2) + { + if (!super.canPlaceBlockAt(worldIn, new BlockPos(pos.getX() + x2, pos.getY(), pos.getZ() + z2))) + { + return false; + } + } + + } + + return true; + } + + @Override + public boolean hasTileEntity(IBlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + switch (getMetaFromState(state)) + { + case 0: + return new TileEntityLandingPad(); + case 1: + return new TileEntityBuggyFueler(); + // case 2: + // return new GCCoreTileEntityCargoPad(); + default: + return null; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + worldIn.notifyBlockUpdate(pos, state, state, 3); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @SideOnly(Side.CLIENT) + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return direction == EnumFacing.UP; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + int metadata = getMetaFromState(state); + return new ItemStack(Item.getItemFromBlock(GCBlocks.landingPad), 1, metadata); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(PAD_TYPE, EnumLandingPadFullType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumLandingPadFullType) state.getValue(PAD_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, PAD_TYPE); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine.java new file mode 100644 index 00000000..cea532c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; + +public class BlockMachine extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineType.class); + + public enum EnumMachineType implements EnumMachineBase, IStringSerializable + { + + COAL_GENERATOR(0, "coal_generator", TileEntityCoalGenerator::new, "tile.coal_generator.description", "tile.machine.0"), + COMPRESSOR(12, "ingot_compressor", TileEntityIngotCompressor::new, "tile.compressor.description", "tile.machine.3"); // 3 + // for + // backwards + // compatibility + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineType[] values = values(); + + @Override + public EnumMachineType fromMetadata(int meta) + { + switch (meta / 4) + { + case 3: + return COMPRESSOR; + default: + return COAL_GENERATOR; + } + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachine(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineType.values; + this.typeBase = EnumMachineType.values[0]; + } + + @SideOnly(Side.CLIENT) + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityCoalGenerator) + { + TileEntityCoalGenerator tileEntity = (TileEntityCoalGenerator) tile; + if (tileEntity.heatGJperTick > 0) + { + float particlePosX = pos.getX() + 0.5F; + float particlePosY = pos.getY() + 0.0F + rand.nextFloat() * 6.0F / 16.0F; + float particlePosZ = pos.getZ() + 0.5F; + float particleSize0 = 0.52F; + float particleSize1 = rand.nextFloat() * 0.6F - 0.3F; + + switch (stateIn.getValue(FACING)) + { + case NORTH: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, particlePosX + particleSize1, particlePosY, particlePosZ - particleSize0, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, particlePosX + particleSize1, particlePosY, particlePosZ - particleSize0, 0.0D, 0.0D, 0.0D); + break; + case EAST: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, particlePosX + particleSize0, particlePosY, particlePosZ + particleSize1, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, particlePosX + particleSize0, particlePosY, particlePosZ + particleSize1, 0.0D, 0.0D, 0.0D); + break; + case SOUTH: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, particlePosX + particleSize1, particlePosY, particlePosZ + particleSize0, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, particlePosX + particleSize1, particlePosY, particlePosZ + particleSize0, 0.0D, 0.0D, 0.0D); + break; + case WEST: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, particlePosX - particleSize0, particlePosY, particlePosZ + particleSize1, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, particlePosX - particleSize0, particlePosY, particlePosZ + particleSize1, 0.0D, 0.0D, 0.0D); + break; + } + } + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineType type = (EnumMachineType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine2.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine2.java new file mode 100644 index 00000000..d74d0764 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine2.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; + +public class BlockMachine2 extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineExtendedType.class); + public static IMachineSidesProperties MACHINESIDES_RENDERTYPE = IMachineSidesProperties.TWOFACES_HORIZ; + public static final PropertyEnum SIDES = MACHINESIDES_RENDERTYPE.asProperty; + + public enum EnumMachineExtendedType implements EnumMachineBase, IStringSerializable + { + + ELECTRIC_COMPRESSOR(0, "electric_compressor", TileEntityElectricIngotCompressor::new, "tile.compressor_electric.description", "tile.machine2.4"), + CIRCUIT_FABRICATOR(4, "circuit_fabricator", TileEntityCircuitFabricator::new, "tile.circuit_fabricator.description", "tile.machine2.5"), + OXYGEN_STORAGE(8, "oxygen_storage", TileEntityOxygenStorageModule::new, "tile.oxygen_storage_module.description", "tile.machine2.6"), + DECONSTRUCTOR(12, "deconstructor", TileEntityDeconstructor::new, "tile.deconstructor.description", "tile.machine2.10"); + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineExtendedType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineExtendedType[] values = values(); + + @Override + public EnumMachineExtendedType fromMetadata(int meta) + { + return values[(meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachine2(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineExtendedType.values; + this.typeBase = EnumMachineExtendedType.values[0]; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineExtendedType type = (EnumMachineExtendedType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineExtendedType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE, SIDES); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + return IMachineSides.addPropertyForTile(state, tile, MACHINESIDES_RENDERTYPE, SIDES); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine3.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine3.java new file mode 100644 index 00000000..7ef1c1a5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine3.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; + +/** + * A block for several types of UNPOWERED Galacticraft machine with a base + * building purpose - e.g. Painter + * + * Note: does not implement IMachineSides + * + */ +public class BlockMachine3 extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineBuildingType.class); + + public enum EnumMachineBuildingType implements EnumMachineBase, IStringSerializable + { + + PAINTER(0, "painter", TileEntityPainter::new, "tile.painter.description", "tile.machine3.9"); + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineBuildingType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineBuildingType[] values = values(); + + @Override + public EnumMachineBuildingType fromMetadata(int meta) + { + return values[(meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachine3(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineBuildingType.values; + this.typeBase = EnumMachineBuildingType.values[0]; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineBuildingType type = (EnumMachineBuildingType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineBuildingType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine4.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine4.java new file mode 100644 index 00000000..29896d79 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine4.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; + +/** + * A block for advanced types of POWERED Galacticraft machine with a base + * building purpose - e.g. Advanced Compressor + * + * Note: this DOES implement IMachineSides, in comparison with BlockMachine3 + * which does not + * + */ +public class BlockMachine4 extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineAdvancedType.class); + public static IMachineSidesProperties MACHINESIDES_RENDERTYPE = IMachineSidesProperties.TWOFACES_HORIZ; + public static final PropertyEnum SIDES = MACHINESIDES_RENDERTYPE.asProperty; + + public enum EnumMachineAdvancedType implements EnumMachineBase, IStringSerializable + { + + ADVANCED_COMPRESSOR(0, "advanced_compressor", () -> new TileEntityElectricIngotCompressor(true), "tile.compressor_advanced.description", "tile.machine4.11"); + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineAdvancedType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineAdvancedType[] values = values(); + + @Override + public EnumMachineAdvancedType fromMetadata(int meta) + { + return values[0]; // (meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachine4(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineAdvancedType.values; + this.typeBase = EnumMachineAdvancedType.values[0]; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineAdvancedType type = (EnumMachineAdvancedType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineAdvancedType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE, SIDES); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + return IMachineSides.addPropertyForTile(state, tile, MACHINESIDES_RENDERTYPE, SIDES); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineBase.java new file mode 100644 index 00000000..9c332fee --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineBase.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class BlockMachineBase extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + public static final int METADATA_MASK = 0x0c; // Used to select the machine + // type from metadata + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + protected EnumMachineBase[] types; + protected EnumMachineBase typeBase; + + public BlockMachineBase(String assetName) + { + super(GCBlocks.machine); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.initialiseTypes(); + } + + protected abstract void initialiseTypes(); + + @Override + @SideOnly(Side.CLIENT) + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int metadata = getMetaFromState(state); + + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + + worldIn.setBlockState(pos, this.getStateFromMeta((metadata & BlockMachineBase.METADATA_MASK) + change), 3); + } + + /** + * Called when the block is right clicked by the player + */ + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + + @Override + public boolean onSneakUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof IMachineSides) + { + ((IMachineSides) tile).nextSideConfiguration(tile); + return true; + } + return false; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + int meta = getMetaFromState(state); + EnumMachineBase type = typeBase.fromMetadata(meta); + return type.tileConstructor(); + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state) & BlockMachineBase.METADATA_MASK; + } + + public String getTranslationKey(int meta) + { + EnumMachineBase type = typeBase.fromMetadata(meta); + return type.getTranslationKey(); + } + + @Override + public String getShiftDescription(int meta) + { + EnumMachineBase type = typeBase.fromMetadata(meta); + return GCCoreUtil.translate(type.getShiftDescriptionKey()); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + public static EnumFacing byIndex(IBlockState state) + { + if (state.getBlock() instanceof BlockMachineBase) + { + return (state.getValue(BlockMachineBase.FACING)); + } + return EnumFacing.NORTH; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (EnumMachineBase type : types) + list.add(new ItemStack(this, 1, type.getMetadata())); + } + + public interface EnumMachineBase & IStringSerializable> + { + + int getMetadata(); + + EnumMachineBase fromMetadata(int meta); + + String getShiftDescriptionKey(); + + String getTranslationKey(); + + TileEntity tileConstructor(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineTiered.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineTiered.java new file mode 100644 index 00000000..beef04c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineTiered.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; + +public class BlockMachineTiered extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumTieredMachineType.class); + public static IMachineSidesProperties MACHINESIDES_RENDERTYPE = IMachineSidesProperties.TWOFACES_HORIZ; + public static final PropertyEnum SIDES = MACHINESIDES_RENDERTYPE.asProperty; + public static final PropertyInteger FILL_VALUE = PropertyInteger.create("fill_value", 0, 33); + + public enum EnumTieredMachineType implements EnumMachineBase, IStringSerializable + { + + STORAGE_MODULE(0, "energy_storage", TileEntityEnergyStorageModule::new, "tile.energy_storage_module_tier1.description", "tile.machine.1"), + ELECTRIC_FURNACE(4, "electric_furnace", TileEntityElectricFurnace::new, "tile.electric_furnace_tier1.description", "tile.machine.2"), + STORAGE_CLUSTER(8, "cluster_storage", TileEntityEnergyStorageModule::new, "tile.energy_storage_module_tier2.description", "tile.machine.8"), + ARC_FURNACE(12, "arc_furnace", TileEntityElectricFurnace::new, "tile.electric_furnace_tier2.description", "tile.machine.7"); + + private final int meta; + private final String name; + private TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumTieredMachineType(int meta, String name, TileConstructor tc, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tc; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumTieredMachineType[] values = values(); + + @Override + public EnumMachineBase fromMetadata(int meta) + { + return values[(meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + int tier = this.meta / 8 + 1; + return this.tile.create(tier); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(int tier); // Note this variant picks up the new + // TileEntityStorageModule(int tier) + // constructor, and forces the ::new + // above to that + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachineTiered(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumTieredMachineType.values; + this.typeBase = EnumTieredMachineType.values[0]; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + TileEntity tile = super.createTileEntity(world, state); + tile.setWorld(world); + return tile; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumTieredMachineType type = (EnumTieredMachineType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing) state.getValue(FACING)).getHorizontalIndex() + ((EnumTieredMachineType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE, FILL_VALUE, SIDES); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + state = IMachineSides.addPropertyForTile(state, tile, MACHINESIDES_RENDERTYPE, SIDES); + + if (!(tile instanceof TileEntityEnergyStorageModule)) + { + return state.withProperty(FILL_VALUE, 0); + } + int energyLevel = ((TileEntityEnergyStorageModule) tile).scaledEnergyLevel; + if (state.getValue(TYPE) == EnumTieredMachineType.STORAGE_CLUSTER) + energyLevel += 17; + return state.withProperty(FILL_VALUE, energyLevel); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMulti.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMulti.java new file mode 100644 index 00000000..ce423a10 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMulti.java @@ -0,0 +1,510 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.ParticleManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; + +public class BlockMulti extends BlockAdvanced implements IPartialSealableBlock, ITileEntityProvider +{ + + public static final PropertyEnum MULTI_TYPE = PropertyEnum.create("type", EnumBlockMultiType.class); + public static final PropertyInteger RENDER_TYPE = PropertyInteger.create("rendertype", 0, 7); + + protected static final AxisAlignedBB AABB_PAD = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 0.1875F, 1.0F); + protected static final AxisAlignedBB AABB_SOLAR = new AxisAlignedBB(0.0F, 0.2F, 0.0F, 1.0F, 0.8F, 1.0F); + protected static final AxisAlignedBB AABB_SOLAR_POLE = new AxisAlignedBB(0.3F, 0.0F, 0.3F, 0.7F, 1.0F, 0.7F); + protected static final AxisAlignedBB AABB_TURRET = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + + public enum EnumBlockMultiType implements IStringSerializable + { + + SOLAR_PANEL_0(0, "solar"), + SPACE_STATION_BASE(1, "ss_base"), + ROCKET_PAD(2, "rocket_pad"), + NASA_WORKBENCH(3, "nasa_workbench"), + SOLAR_PANEL_1(4, "solar_panel"), + CRYO_CHAMBER(5, "cryo_chamber"), + BUGGY_FUEL_PAD(6, "buggy_pad"), + MINER_BASE(7, "miner_base"), // UNUSED + DISH_LARGE(8, "dish_large"), + LASER_TURRET(9, "laser_turret"); + + private final int meta; + private final String name; + + EnumBlockMultiType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockMultiType[] values = values(); + + public static EnumBlockMultiType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockMulti(String assetName) + { + super(GCBlocks.machine); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setResistance(1000000000000000.0F); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(MULTI_TYPE)) + { + case SOLAR_PANEL_0: + case SOLAR_PANEL_1: + boolean midPole = source.getBlockState(pos.up()).getBlock() == this; + boolean topPole = source.getBlockState(pos.down()).getBlock() == this; + if (topPole || midPole) + return midPole ? AABB_SOLAR_POLE : AABB_SOLAR; + else + return AABB_SOLAR; + case ROCKET_PAD: + case BUGGY_FUEL_PAD: + return AABB_PAD; + case LASER_TURRET: + return AABB_TURRET; + default: + return FULL_BLOCK_AABB; + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canDropFromExplosion(Explosion par1Explosion) + { + return false; + } + + public void makeFakeBlock(World worldObj, BlockPos pos, BlockPos mainBlock, int meta) + { + worldObj.setBlockState(pos, GCBlocks.fakeBlock.getStateFromMeta(meta), meta == 5 ? 3 : 0); + worldObj.setTileEntity(pos, new TileEntityMulti(mainBlock)); + } + + public void makeFakeBlock(World worldObj, Collection posList, BlockPos mainBlock, EnumBlockMultiType type) + { + for (BlockPos pos : posList) + { + worldObj.setBlockState(pos, this.getDefaultState().withProperty(MULTI_TYPE, type), type == EnumBlockMultiType.CRYO_CHAMBER ? 3 : 0); + worldObj.setTileEntity(pos, new TileEntityMulti(mainBlock)); + } + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + return worldIn.getBlockState(mainBlockPosition).getBlockHardness(worldIn, pos); + } + } + + return this.blockHardness; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + int metadata = getMetaFromState(worldIn.getBlockState(pos)); + + // Landing pad and refueling pad + if (metadata == 2 || metadata == 6) + { + return direction == EnumFacing.DOWN; + } + + // Basic solar panel fixed top + if (metadata == 4) + { + return direction == EnumFacing.UP; + } + + return false; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityMulti) + { + ((TileEntityMulti) tileEntity).onBlockRemoval(); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntityMulti tileEntity = (TileEntityMulti) worldIn.getTileEntity(pos); + if (tileEntity == null) + { + return false; + } + return tileEntity.onBlockActivated(worldIn, pos, playerIn); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntityMulti tileEntity = (TileEntityMulti) world.getTileEntity(pos); + return tileEntity.onBlockWrenched(world, pos, entityPlayer, hand, side, hitX, hitY, hitZ); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public TileEntity createNewTileEntity(World var1, int meta) + { + return null; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + TileEntity tileEntity = world.getTileEntity(pos); + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + IBlockState mainBlockState = world.getBlockState(mainBlockPosition); + + if (Blocks.AIR != mainBlockState.getBlock()) + { + return mainBlockState.getBlock().getPickBlock(mainBlockState, target, world, mainBlockPosition, player); + } + } + } + + return ItemStack.EMPTY; + } + + @Override + public EnumFacing getBedDirection(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileEntity tileEntity = world.getTileEntity(pos); + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + IBlockState mainState = world.getBlockState(mainBlockPosition); + return mainState.getBlock().getBedDirection(mainState, world, mainBlockPosition); + } + } + + return EnumFacing.UP; // TODO + } + + @Override + public boolean isBed(IBlockState state, IBlockAccess world, BlockPos pos, Entity player) + { + TileEntity tileEntity = world.getTileEntity(pos); + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + IBlockState mainState = world.getBlockState(mainBlockPosition); + return mainState.getBlock().isBed(mainState, world, mainBlockPosition, player); + } + } + + return super.isBed(state, world, pos, player); + } + + @Override + public void setBedOccupied(IBlockAccess world, BlockPos pos, EntityPlayer player, boolean occupied) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + world.getBlockState(mainBlockPosition).getBlock().setBedOccupied(world, mainBlockPosition, player, occupied); + } + else + { + super.setBedOccupied(world, pos, player, occupied); + } + } + + @Override + public BlockPos getBedSpawnPosition(IBlockState state, IBlockAccess world, BlockPos pos, EntityPlayer player) + { + if (!(world instanceof World)) + { + return null; + } + int tries = 3; + World worldIn = (World) world; + TileEntity tileEntity = worldIn.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + IBlockState cryoChamber = worldIn.getBlockState(mainBlockPosition); + EnumFacing enumfacing = EnumFacing.NORTH; + if (cryoChamber.getBlock() == MarsBlocks.machine) + { + enumfacing = cryoChamber.getValue(BlockMachineMars.FACING); + } + int i = pos.getX(); + int j = pos.getY(); + int k = pos.getZ(); + + for (int l = 0; l <= 1; ++l) + { + int i1 = i - enumfacing.getXOffset() * l - 1; + int j1 = k - enumfacing.getZOffset() * l - 1; + int k1 = i1 + 2; + int l1 = j1 + 2; + + for (int i2 = i1; i2 <= k1; ++i2) + { + for (int j2 = j1; j2 <= l1; ++j2) + { + BlockPos blockpos = new BlockPos(i2, j, j2); + + if (hasRoomForPlayer(worldIn, blockpos)) + { + if (tries <= 0) + { + return blockpos; + } + + --tries; + } + } + } + } + + return null; + } + + private static boolean hasRoomForPlayer(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).isSideSolid(worldIn, pos.down(), EnumFacing.UP) && !worldIn.getBlockState(pos).getMaterial().isSolid() && !worldIn.getBlockState(pos.up()).getMaterial().isSolid(); + } + + @Override + public boolean addHitEffects(IBlockState state, World worldObj, RayTraceResult target, ParticleManager manager) + { + TileEntity tileEntity = worldObj.getTileEntity(target.getBlockPos()); + + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(target.getBlockPos())) + { + manager.addBlockHitEffects(mainBlockPosition, target); + } + } + + return super.addHitEffects(state, worldObj, target, manager); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(MULTI_TYPE, EnumBlockMultiType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(MULTI_TYPE).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, MULTI_TYPE, RENDER_TYPE); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + EnumBlockMultiType type = state.getValue(MULTI_TYPE); + int renderType = 0; + + switch (type) + { + case CRYO_CHAMBER: + IBlockState stateAbove = worldIn.getBlockState(pos.up()); + TileEntityMulti tile = (TileEntityMulti) worldIn.getTileEntity(pos); + if (stateAbove.getBlock() == this && (stateAbove.getValue(MULTI_TYPE)) == EnumBlockMultiType.CRYO_CHAMBER) + { + renderType = 0; + } + else + { + renderType = 4; + } + if (tile != null && tile.mainBlockPosition != null) + { + IBlockState stateMain = worldIn.getBlockState(tile.mainBlockPosition); + if (stateMain.getBlock() == MarsBlocks.machine && stateMain.getValue(BlockMachineMars.TYPE) == BlockMachineMars.EnumMachineType.CRYOGENIC_CHAMBER) + { + EnumFacing dir = stateMain.getValue(BlockMachineMars.FACING); + renderType += dir.getHorizontalIndex(); + } + } + break; + default: + break; + } + + return state.withProperty(RENDER_TYPE, renderType); + } + + public static void onPlacement(World worldIn, BlockPos pos, EntityLivingBase placer, Block callingBlock) + { + final TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof IMultiBlock) + { + boolean validSpot = true; + List toCheck = new LinkedList<>(); + ((IMultiBlock) tile).getPositions(pos, toCheck); + for (BlockPos toTest : toCheck) + { + IBlockState blockAt = worldIn.getBlockState(toTest); + if (!blockAt.getBlock().isReplaceable(worldIn, toTest)) + { + validSpot = false; + break; + } + } + + if (!validSpot) + { + worldIn.setBlockToAir(pos); + + if (!worldIn.isRemote && placer instanceof EntityPlayerMP) + { + EntityPlayerMP player = (EntityPlayerMP) placer; + player.sendMessage(new TextComponentString(EnumColor.RED + GCCoreUtil.translate("gui.warning.noroom"))); + if (!player.capabilities.isCreativeMode) + { + final ItemStack nasaWorkbench = new ItemStack(callingBlock, 1, 0); + final EntityItem entityitem = player.dropItem(nasaWorkbench, false); + entityitem.setPickupDelay(0); + entityitem.setOwner(player.getName()); + } + } + + return; + } + + ((IMultiBlock) tile).onCreate(worldIn, pos); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockNasaWorkbench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockNasaWorkbench.java new file mode 100644 index 00000000..501412bc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockNasaWorkbench.java @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNasaWorkbench; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockNasaWorkbench extends BlockContainer implements ITileEntityProvider, IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public BlockNasaWorkbench(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return new AxisAlignedBB((double) pos.getX() + -0.0F, (double) pos.getY() + 0.0F, (double) pos.getZ() + -0.0F, (double) pos.getX() + 1.0F, (double) pos.getY() + 1.4F, + (double) pos.getZ() + 1.0F); + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + BlockMulti.onPlacement(worldIn, pos, placer, this); + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + int fakeBlockCount = 0; + + for (int x = -1; x < 2; x++) + { + for (int y = 0; y < 4; y++) + { + for (int z = -1; z < 2; z++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + if (Math.abs(x) != 1 || Math.abs(z) != 1) + { + Block block = worldIn.getBlockState(pos.add(x, y, z)).getBlock(); + + if ((y == 0 || y == 3) && x == 0 && z == 0) + { + if (block == GCBlocks.fakeBlock) + { + fakeBlockCount++; + } + } else if (y != 0 && y != 3) + { + if (block == GCBlocks.fakeBlock) + { + fakeBlockCount++; + } + } + } + } + } + } + } + + if (fakeBlockCount >= 11 && var9 instanceof IMultiBlock) + { + ((IMultiBlock) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftCore.instance, SchematicRegistry.getMatchingRecipeForID(0).getGuiID(), worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityNasaWorkbench(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCollector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCollector.java new file mode 100644 index 00000000..44ad8424 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCollector.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenCollector extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockOxygenCollector(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityOxygenCollector(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @SideOnly(Side.CLIENT) + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityOxygenCollector) + { + if (((TileEntityOxygenCollector) tile).lastOxygenCollected > 1) + { + for (int particleCount = 0; particleCount < 10; particleCount++) + { + double x2 = pos.getX() + rand.nextFloat(); + double y2 = pos.getY() + rand.nextFloat(); + double z2 = pos.getZ() + rand.nextFloat(); + double mX = 0.0D; + double mY = 0.0D; + double mZ = 0.0D; + int dir = rand.nextInt(2) * 2 - 1; + mX = (rand.nextFloat() - 0.5D) * 0.5D; + mY = (rand.nextFloat() - 0.5D) * 0.5D; + mZ = (rand.nextFloat() - 0.5D) * 0.5D; + + final int meta = getMetaFromState(stateIn); + + if (meta == 3 || meta == 2) + { + x2 = pos.getX() + 0.5D + 0.25D * dir; + mX = rand.nextFloat() * 2.0F * dir; + } else + { + z2 = pos.getZ() + 0.5D + 0.25D * dir; + mZ = rand.nextFloat() * 2.0F * dir; + } + + GalacticraftCore.proxy.spawnParticle("oxygen", new Vector3(x2, y2, z2), new Vector3(mX, mY, mZ), new Object[] + {new Vector3(0.7D, 0.7D, 1.0D)}); + } + } + } + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCompressor.java new file mode 100644 index 00000000..287a6d78 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCompressor.java @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenCompressor extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final int OXYGEN_COMPRESSOR_METADATA = 0; + public static final int OXYGEN_DECOMPRESSOR_METADATA = 4; + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumCompressorType.class); + + public enum EnumCompressorType implements IStringSerializable + { + + COMPRESSOR(0, "compressor"), DECOMPRESSOR(1, "decompressor"); + + private final int meta; + private final String name; + + EnumCompressorType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumCompressorType[] values = values(); + + public static EnumCompressorType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockOxygenCompressor(boolean isActive, String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + int metadata = getMetaFromState(state); + if (metadata >= BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA) + { + return new TileEntityOxygenDecompressor(); + } else if (metadata >= BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA) + { + return new TileEntityOxygenCompressor(); + } else + { + return null; + } + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + + if (stack.getItemDamage() >= BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA) + { + change += BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA; + } else if (stack.getItemDamage() >= BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA) + { + change += BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA; + } + + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA)); + list.add(new ItemStack(this, 1, BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA)); + } + + @Override + public int damageDropped(IBlockState state) + { + int metadata = getMetaFromState(state); + if (metadata >= BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA) + { + return BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA; + } else if (metadata >= BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA) + { + return BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA; + } else + { + return 0; + } + } + + @Override + public String getShiftDescription(int meta) + { + switch (meta) + { + case OXYGEN_COMPRESSOR_METADATA: + return GCCoreUtil.translate("tile.oxygen_compressor.description"); + case OXYGEN_DECOMPRESSOR_METADATA: + return GCCoreUtil.translate("tile.oxygen_decompressor.description"); + } + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumCompressorType type = EnumCompressorType.byMetadata((int) Math.floor(meta / 4.0)); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex() + state.getValue(TYPE).getMeta() * 4; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDetector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDetector.java new file mode 100644 index 00000000..d744ab45 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDetector.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDetector; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenDetector extends BlockContainer implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyBool ACTIVE = PropertyBool.create("active"); + + public BlockOxygenDetector(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityOxygenDetector(); + } + + public void updateOxygenState(World worldIn, BlockPos pos, boolean valid) + { + if (valid) + { + worldIn.setBlockState(pos, getStateFromMeta(1), 3); + } else + { + worldIn.setBlockState(pos, getStateFromMeta(0), 3); + } + } + + @Override + public boolean canProvidePower(IBlockState state) + { + return true; + } + + @Override + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return getMetaFromState(blockState) == 1 ? 15 : 0; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(ACTIVE, meta > 0); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(ACTIVE) ? 1 : 0; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, ACTIVE); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDistributor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDistributor.java new file mode 100644 index 00000000..3233b355 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDistributor.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenDistributor extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockOxygenDistributor(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + worldIn.setBlockState(pos, getStateFromMeta(EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex()), 3); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityOxygenDistributor(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenSealer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenSealer.java new file mode 100644 index 00000000..d294eee9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenSealer.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenSealer extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockOxygenSealer(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + worldIn.setBlockState(pos, getStateFromMeta(EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex()), 3); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityOxygenSealer(); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + // Run a sealer check if needed and if not picked up by + // BlockBreathableAir.onNeighborBlockChange() + BlockPos ventSide = pos.up(1); + Block testBlock = worldIn.getBlockState(ventSide).getBlock(); + if (testBlock == GCBlocks.breatheableAir || testBlock == GCBlocks.brightBreatheableAir) + { + TickHandlerServer.scheduleNewEdgeCheck(GCCoreUtil.getDimensionID(worldIn), pos); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPanelLighting.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPanelLighting.java new file mode 100644 index 00000000..3c5903eb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPanelLighting.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.common.property.ExtendedBlockState; +import net.minecraftforge.common.property.IExtendedBlockState; +import net.minecraftforge.common.property.IUnlistedProperty; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.IPaintable; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PropertyObject; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +public class BlockPanelLighting extends BlockAdvancedTile implements ISortableBlock, IShiftDescription, IPaintable +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", PanelType.class); + public static final PropertyObject BASE_STATE = new PropertyObject<>("held_state", IBlockState.class); + + public static int color = 0xf0f0e0; + + public enum PanelType implements IStringSerializable + { + + SQUARE("square", 11), SPOTS("spots", 7), LINEAR("linear", 9), SF("sf", 2), SFDIAG("sfdiag", 2); + // IF ADDING TO THIS ENUM, MAKE SURE TO CHANGE DEFINITION OF + // PacketSimple.C_UPDATE_STATS!!!!!! + + private final String name; + private final int light; + + private PanelType(String name, int lightValue) + { + this.name = name; + this.light = lightValue; + } + + @Override + public String getName() + { + return this.name; + } + + public int getLight() + { + return this.light; + } + } + + public static final int PANELTYPES_LENGTH = PanelType.values().length; + private static IBlockState[] superState = new IBlockState[PANELTYPES_LENGTH]; // - + // only + // used + // clientSide + + public BlockPanelLighting(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState()); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new ExtendedBlockState(this, new IProperty[] + {TYPE}, new IUnlistedProperty[] + {BASE_STATE}); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int i = 0; i < PANELTYPES_LENGTH; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + + @Override + public int damageDropped(IBlockState state) + { + return this.getMetaFromState(state); + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + ArrayList result = new ArrayList(); + result.add(new ItemStack(this.getItemDropped(state, null, fortune), 1, this.getMetaFromState(state))); + return result; + } + + @Override + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int damage, EntityLivingBase placer) + { + return this.getStateFromMeta(damage); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int damage = stack.getItemDamage(); + if (damage >= PANELTYPES_LENGTH) + damage = 0; + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityPanelLight && placer instanceof EntityPlayer) + { + ((TileEntityPanelLight) tile).initialise(damage, EnumFacing.getDirectionFromEntityLiving(pos, placer), (EntityPlayer) placer, worldIn.isRemote, + ((BlockPanelLighting) state.getBlock()).superState[damage]); + } + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (!(tile instanceof TileEntityPanelLight)) + { + return false; + } + IBlockState bs = world.getBlockState(pos); + if (!(bs.getBlock() instanceof BlockPanelLighting)) + { + return false; + } + PanelType type = (PanelType) bs.getValue(BlockPanelLighting.TYPE); + TileEntityPanelLight tilegood = (TileEntityPanelLight) tile; + int metadata = tilegood.meta; + if (metadata < 8 && (type == PanelType.LINEAR || type == PanelType.SF) || metadata < 24 && type == PanelType.SFDIAG) + { + tilegood.meta += 8; + return true; + } + + int metaDir = ((metadata & 7) + 1) % 6; + // DOWN->UP->NORTH->*EAST*->*SOUTH*->WEST + // 0->1 1->2 2->5 3->4 4->0 5->3 + if (metaDir == 3) // after north + { + metaDir = 5; + } else if (metaDir == 0) + { + metaDir = 3; + } else if (metaDir == 5) + { + metaDir = 0; + } + + tilegood.meta = metaDir; + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityPanelLight(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate("tile.panel_lighting.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) + { + return true; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + if (meta >= PANELTYPES_LENGTH) + meta = 0; + return this.getDefaultState().withProperty(TYPE, PanelType.values()[meta]); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((PanelType) state.getValue(BlockPanelLighting.TYPE)).ordinal(); + } + + @Override + public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityPanelLight) + { + state = ((IExtendedBlockState) state).withProperty(BASE_STATE, ((TileEntityPanelLight) tile).getBaseBlock()); + } + + return state; + } + + @Override + public int getLightValue(IBlockState bs, IBlockAccess world, BlockPos pos) + { + if (!(bs.getBlock() instanceof BlockPanelLighting)) + { + return 0; + } + if (world instanceof World && RedstoneUtil.isBlockReceivingRedstone((World) world, pos)) + { + return 0; + } + return ((PanelType) bs.getValue(BlockPanelLighting.TYPE)).getLight(); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + worldIn.checkLightFor(EnumSkyBlock.BLOCK, pos); + } + + @SideOnly(value = Side.CLIENT) + public static void updateClient(int type, IBlockState state) + { + if (type >= PANELTYPES_LENGTH) + type = 0; + superState[type] = state; + } + + @SideOnly(value = Side.CLIENT) + public static void updateClient(List data) + { + IBlockState state; + for (int i = 0; i < PANELTYPES_LENGTH; i++) + { + state = TileEntityPanelLight.readBlockState((String) data.get(i + i + 1), (Integer) data.get(i + i + 2)); + if (state.getBlock() == Blocks.AIR) + { + state = null; + } + superState[i] = state; + } + color = (Integer) data.get(2 * PANELTYPES_LENGTH + 1); + } + + public static void getNetworkedData(Object[] result, IBlockState[] panel_lighting) + { + // IF CHANGING THIS, MAKE SURE TO CHANGE DEFINITION OF + // PacketSimple.C_UPDATE_STATS + Block block; + IBlockState bs; + for (int i = 0; i < PANELTYPES_LENGTH; i++) + { + bs = panel_lighting[i]; + if (bs == null) + bs = Blocks.AIR.getDefaultState(); + block = bs.getBlock(); + result[i + i + 1] = ((ResourceLocation) Block.REGISTRY.getNameForObject(block)).toString(); + result[i + i + 2] = block.getMetaFromState(bs); + } + } + + @Override + public int setColor(int color, EntityPlayer p, Side side) + { + if (side == Side.CLIENT) + { + BlockPanelLighting.color = ColorUtil.lighten(ColorUtil.lightenFully(color, 255), 0.1F); + } else + { + GCPlayerStats stats = GCPlayerStats.get(p); + stats.setPanelLightingColor(color); + } + return 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockParaChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockParaChest.java new file mode 100644 index 00000000..924ca8f9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockParaChest.java @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Iterator; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityParaChest; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockParaChest extends BlockContainer implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyEnum COLOR = PropertyEnum.create("color", EnumDyeColor.class); + protected static final AxisAlignedBB NOT_CONNECTED_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.875D, 0.9375D); + + public BlockParaChest(String assetName) + { + super(Material.WOOD); + this.setHardness(3.0F); + this.setSoundType(SoundType.WOOD); +// this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return NOT_CONNECTED_AABB; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing()); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } else + { + IInventory iinventory = this.getInventory(worldIn, pos); + + if (iinventory != null && playerIn instanceof EntityPlayerMP) + { + playerIn.openGui(GalacticraftCore.instance, -1, worldIn, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + TileEntityParaChest tileentitychest = (TileEntityParaChest) worldIn.getTileEntity(pos); + + if (tileentitychest != null) + { + tileentitychest.updateContainingBlockInfo(); + } + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntityParaChest tileentitychest = (TileEntityParaChest) worldIn.getTileEntity(pos); + + if (tileentitychest != null) + { + Random syncRandom = GCCoreUtil.getRandom(pos); + for (int j1 = 0; j1 < tileentitychest.getSizeInventory(); ++j1) + { + ItemStack itemstack = tileentitychest.getStackInSlot(j1); + + if (itemstack != null) + { + + float f = syncRandom.nextFloat() * 0.8F + 0.1F; + float f1 = syncRandom.nextFloat() * 0.8F + 0.1F; + EntityItem entityitem; + + for (float f2 = syncRandom.nextFloat() * 0.8F + 0.1F; !itemstack.isEmpty(); worldIn.spawnEntity(entityitem)) + { + entityitem = new EntityItem(worldIn, pos.getX() + f, pos.getY() + f1, pos.getZ() + f2, itemstack.splitStack(syncRandom.nextInt(21) + 10)); + float f3 = 0.05F; + entityitem.motionX = (float) syncRandom.nextGaussian() * f3; + entityitem.motionY = (float) syncRandom.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) syncRandom.nextGaussian() * f3; + } + } + } + + worldIn.updateComparatorOutputLevel(pos, null); + } + + super.breakBlock(worldIn, pos, state); + } + + public IInventory getInventory(World par1World, BlockPos pos) + { + Object object = par1World.getTileEntity(pos); + + if (object == null) + { + return null; + } else if (par1World.isSideSolid(pos.offset(EnumFacing.UP), EnumFacing.DOWN)) + { + return null; + } else if (BlockParaChest.isOcelotBlockingChest(par1World, pos)) + { + return null; + } else + { + return (IInventory) object; + } + } + + public static boolean isOcelotBlockingChest(World par0World, BlockPos pos) + { + Iterator iterator = + par0World.getEntitiesWithinAABB(EntityOcelot.class, new AxisAlignedBB(pos.getX(), pos.getY() + 1, pos.getZ(), pos.getX() + 1, pos.getY() + 2, pos.getZ() + 1)).iterator(); + EntityOcelot entityocelot; + + do + { + if (!iterator.hasNext()) + { + return false; + } + + entityocelot = (EntityOcelot) iterator.next(); + } while (!entityocelot.isSitting()); + + return true; + } + + @Override + public TileEntity createNewTileEntity(World par1World, int meta) + { + return new TileEntityParaChest(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, COLOR, FACING); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (!(tile instanceof TileEntityParaChest)) + { + return state; + } + TileEntityParaChest chest = (TileEntityParaChest) tile; + return state.withProperty(COLOR, chest.color); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPlatform.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPlatform.java new file mode 100644 index 00000000..3195f8c9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPlatform.java @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockPlatform extends BlockAdvancedTile implements IPartialSealableBlock, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum CORNER = PropertyEnum.create("type", EnumCorner.class); + public static final float HEIGHT = 0.875F; + protected static final AxisAlignedBB BOUNDING_BOX = new AxisAlignedBB(0.0D, 6 / 16.0D, 0.0D, 1.0D, HEIGHT, 1.0D); + protected static final AxisAlignedBB BOUNDING_BOX_ZEROG = new AxisAlignedBB(0.0D, 6 / 16.0D, 0.0D, 1.0D, 1.0D, 1.0D);; + public static boolean ignoreCollisionTests; + + public enum EnumCorner implements IStringSerializable + { + + NONE(0, "none"), NW(1, "sw"), SW(2, "nw"), NE(3, "se"), SE(4, "ne"); + // Yes these labels are the wrong way round, n should be s! But the + // BlockState model is hard-coded to work with this as it is. + + private final int meta; + private final String name; + + EnumCorner(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumCorner[] values = values(); + + public static EnumCorner byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockPlatform(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setResistance(10.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(CORNER, EnumCorner.NONE)); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + private boolean checkAxis(World worldIn, BlockPos pos, Block block, EnumFacing facing) + { + int sameCount = 0; + for (int i = 1; i <= 2; i++) + { + IBlockState bs = worldIn.getBlockState(pos.offset(facing, i)); + if (bs.getBlock() == block && bs.getValue(BlockPlatform.CORNER) == BlockPlatform.EnumCorner.NONE) + { + sameCount++; + } + } + + return sameCount > 1; + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + final Block id = GCBlocks.platform; + + if (checkAxis(worldIn, pos, id, EnumFacing.EAST) || checkAxis(worldIn, pos, id, EnumFacing.WEST) || checkAxis(worldIn, pos, id, EnumFacing.NORTH) + || checkAxis(worldIn, pos, id, EnumFacing.SOUTH)) + { + return false; + } + + if (worldIn.getBlockState(pos.offset(EnumFacing.DOWN)).getBlock() == GCBlocks.platform && side == EnumFacing.UP) + { + return false; + } else + { + return this.canPlaceBlockAt(worldIn, pos); + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityPlatform(meta); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + if (var9 instanceof TileEntityPlatform) + { + ((TileEntityPlatform) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return direction == EnumFacing.UP; + } + + @Override + public int damageDropped(IBlockState state) + { + return 0; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(CORNER, EnumCorner.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumCorner) state.getValue(CORNER)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, CORNER); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB mask, List list, @Nullable Entity entityIn, boolean p_185477_7_) + { + if (ignoreCollisionTests) + return; + TileEntity te = worldIn.getTileEntity(pos); + if (te instanceof TileEntityPlatform) + { + if (((TileEntityPlatform) te).noCollide()) + return; + } + AxisAlignedBB axisalignedbb = this.getCollisionBoundingBox(state, worldIn, pos).offset(pos); + + if (axisalignedbb != null && mask.intersects(axisalignedbb)) + { + list.add(axisalignedbb); + } + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) + { + if (world instanceof World && ((World) world).provider instanceof IZeroGDimension) + return BOUNDING_BOX_ZEROG; + return BOUNDING_BOX; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(IBlockState bs, World worldIn, BlockPos pos) + { + TileEntity te = worldIn.getTileEntity(pos); + if (te instanceof TileEntityPlatform) + { + if (((TileEntityPlatform) te).noCollide()) + { + if (bs.getBlock() == this && bs.getValue(BlockPlatform.CORNER) == BlockPlatform.EnumCorner.SE) + return new AxisAlignedBB((double) pos.getX() + 9 / 16D, (double) pos.getY(), (double) pos.getZ() + 9 / 16D, (double) pos.getX() + 1.0D, (double) pos.getY() + HEIGHT, + (double) pos.getZ() + 1.0D); + else + return new AxisAlignedBB((double) pos.getX(), (double) pos.getY(), (double) pos.getZ(), (double) pos.getX() + 7 / 16D, (double) pos.getY() + HEIGHT, (double) pos.getZ() + 7 / 16D); + } + } + return super.getSelectedBoundingBox(bs, worldIn, pos); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockRefinery.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockRefinery.java new file mode 100644 index 00000000..9046c6d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockRefinery.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockRefinery extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockRefinery(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + final TileEntity te = worldIn.getTileEntity(pos); + + if (te instanceof TileEntityRefinery) + { + final TileEntityRefinery refinery = (TileEntityRefinery) te; + + if (refinery.processTicks > 0) + { + final float var7 = pos.getX() + 0.5F; + final float var8 = pos.getY() + 1.1F; + final float var9 = pos.getZ() + 0.5F; + final float var10 = 0.0F; + final float var11 = 0.0F; + + for (int i = -1; i <= 1; i++) + { + for (int j = -1; j <= 1; j++) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7 + var11 + i * 0.2, var8, var9 + var10 + j * 0.2, 0.0D, 0.01D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, var7 + var11 + i * 0.1, var8 - 0.2, var9 + var10 + j * 0.1, 0.0D, 0.0001D, 0.0D); + } + } + } + } + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityRefinery(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + worldIn.setBlockState(pos, getStateFromMeta(EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex()), 3); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockScreen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockScreen.java new file mode 100644 index 00000000..5d7c6912 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockScreen.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockScreen extends BlockAdvanced implements IShiftDescription, IPartialSealableBlock, ITileEntityProvider, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing"); + public static final PropertyBool LEFT = PropertyBool.create("left"); + public static final PropertyBool RIGHT = PropertyBool.create("right"); + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool DOWN = PropertyBool.create("down"); + + protected static final float boundsFront = 0.094F; + protected static final float boundsBack = 1.0F - boundsFront; + protected static final AxisAlignedBB DOWN_AABB = new AxisAlignedBB(0F, 0F, 0F, 1.0F, boundsBack, 1.0F); + protected static final AxisAlignedBB UP_AABB = new AxisAlignedBB(0F, boundsFront, 0F, 1.0F, 1.0F, 1.0F); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0F, 0F, boundsFront, 1.0F, 1.0F, 1.0F); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0F, 0F, 0F, 1.0F, 1.0F, boundsBack); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(boundsFront, 0F, 0F, 1.0F, 1.0F, 1.0F); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0F, 0F, 0F, boundsBack, 1.0F, 1.0F); + + // Metadata: 0-5 = direction of screen back; bit 3 = reserved for future use + public BlockScreen(String assetName) + { + super(Material.CIRCUITS); + this.setDefaultState( + this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(LEFT, false).withProperty(RIGHT, false).withProperty(UP, false).withProperty(DOWN, false)); + this.setHardness(0.1F); + this.setSoundType(SoundType.GLASS); + this.setTranslationKey(assetName); + } + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing direction) + { + return direction.ordinal() != getMetaFromState(base_state); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + ((TileEntityScreen) worldIn.getTileEntity(pos)).breakScreen(state); + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face.ordinal() == getMetaFromState(state) ? BlockFaceShape.UNDEFINED : BlockFaceShape.BOWL; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + int change = world.getBlockState(pos).getValue(FACING).rotateY().getIndex(); + world.setBlockState(pos, this.getStateFromMeta(change), 3); + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityScreen(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityScreen) + { + ((TileEntityScreen) tile).changeChannel(); + return true; + } + return false; + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityScreen) + { + ((TileEntityScreen) tile).refreshConnections(true); + } + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case EAST: + return EAST_AABB; + case WEST: + return WEST_AABB; + case SOUTH: + return SOUTH_AABB; + case NORTH: + return NORTH_AABB; + case DOWN: + return DOWN_AABB; + case UP: + default: + return UP_AABB; + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, LEFT, RIGHT, UP, DOWN); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntityScreen screen = (TileEntityScreen) worldIn.getTileEntity(pos); + return state.withProperty(LEFT, screen.connectedLeft).withProperty(RIGHT, screen.connectedRight).withProperty(UP, screen.connectedUp).withProperty(DOWN, screen.connectedDown); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSlabGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSlabGC.java new file mode 100644 index 00000000..98403afd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSlabGC.java @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockSlabGC extends BlockSlab implements ISortableBlock +{ + + public final static PropertyEnum VARIANT = PropertyEnum.create("variant", BlockType.class); + + public BlockSlabGC(String name, Material material) + { + super(material); + this.setTranslationKey(name); + this.useNeighborBrightness = true; + } + + public BlockSlabGC(Material material) + { + super(material); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int i = 0; i < 7; ++i) + { + list.add(new ItemStack(this, 1, i)); + } + } + + @Override + public int damageDropped(IBlockState state) + { + return this.getMetaFromState(state) & 7; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(GCBlocks.slabGCHalf); + } + + @Override + public int quantityDropped(Random rand) + { + return this.isDouble() ? 2 : 1; + } + + @Override + public CreativeTabs getCreativeTab() + { + return this.isDouble() ? null : GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + Block block = blockState.getBlock(); + + if (!(block instanceof BlockSlabGC)) // This will prevent game crashing + // when harvest block + { + return 0; + } + + switch (this.getMetaFromState(blockState)) + { + case 2: + case 3: + return 1.5F; + default: + return 2.0F; + } + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(this, 1, this.getMetaFromState(state) & 7); + } + + @Override + public String getTranslationKey(int meta) + { + BlockType type = (this.getStateFromMeta(meta).getValue(VARIANT)); + return type.getLangName(); + } + + @Override + public boolean isDouble() + { + return false; + } + + @Override + public IProperty getVariantProperty() + { + return VARIANT; + } + + @Override + public Comparable getTypeForItem(ItemStack stack) + { + return BlockType.byMetadata(stack.getMetadata() & 7); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + IBlockState state = this.getDefaultState().withProperty(VARIANT, BlockType.byMetadata(meta & 7)); + + if (!this.isDouble()) + { + state = state.withProperty(HALF, (meta & 8) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP); + } + return state; + } + + @Override + public int getMetaFromState(IBlockState state) + { + byte b0 = 0; + int i = b0 | state.getValue(VARIANT).getMetadata(); + + if (!this.isDouble() && state.getValue(HALF) == EnumBlockHalf.TOP) + { + i |= 8; + } + return i; + } + + @Override + protected BlockStateContainer createBlockState() + { + return this.isDouble() ? new BlockStateContainer(this, VARIANT) : new BlockStateContainer(this, HALF, VARIANT); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.SLABS; + } + + public enum BlockType implements IStringSerializable + { + + TIN_SLAB_1(0, "tin_slab_1"), TIN_SLAB_2(1, "tin_slab_2"), MOON_STONE_SLAB(2, "moon_slab"), MOON_DUNGEON_BRICK_SLAB(3, "moon_bricks_slab"), MARS_COBBLESTONE_SLAB(4, "mars_slab"), MARS_DUNGEON_SLAB(5, "mars_bricks_slab"), ASTEROIDS_DECO(6, "asteroids_slab"); + + private int meta; + private String langName; + private static BlockType[] META_LOOKUP = new BlockType[values().length]; + + BlockType(int meta, String langName) + { + this.meta = meta; + this.langName = langName; + } + + @Override + public String toString() + { + return this.getName(); + } + + @Override + public String getName() + { + return this.langName; + } + + public int getMetadata() + { + return this.meta; + } + + public static BlockType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + return META_LOOKUP[meta]; + } + + public String getLangName() + { + return langName; + } + + static + { + BlockType[] var0 = values(); + + for (BlockType var3 : var0) + { + META_LOOKUP[var3.getMetadata()] = var3; + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSolar.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSolar.java new file mode 100644 index 00000000..4e493346 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSolar.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockSolar extends BlockTileGC implements IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public static final int BASIC_METADATA = 0; + public static final int ADVANCED_METADATA = 4; + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumSolarType.class); + + public enum EnumSolarType implements IStringSerializable + { + + BASIC_SOLAR(0, "basic_solar"), ADVANCED_SOLAR(1, "advanced_solar"); // 3 + // for + // backwards + // compatibility + + private final int meta; + private final String name; + + EnumSolarType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumSolarType[] values = values(); + + public static EnumSolarType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockSolar(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, BlockSolar.BASIC_METADATA)); + list.add(new ItemStack(this, 1, BlockSolar.ADVANCED_METADATA)); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + for (int y = 1; y <= 2; y++) + { + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + BlockPos posAt = pos.add(y == 2 ? x : 0, y, y == 2 ? z : 0); + IBlockState bs = worldIn.getBlockState(posAt); + + if (bs.getMaterial() != Material.AIR && !bs.getBlock().isReplaceable(worldIn, posAt)) + { + return false; + } + } + } + } + + for (int x = -2; x <= 2; x++) + { + for (int z = -2; z <= 2; z++) + { + BlockPos posAt = pos.add(x, 0, z); + Block block = worldIn.getBlockState(posAt).getBlock(); + + if (block == this) + { + return false; + } + } + } + + return true; + // return new BlockVec3(x1, y1, z1).newVecSide(side ^ 1).getBlock(world) + // != GCBlocks.fakeBlock; TODO + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + + if (stack.getItemDamage() >= ADVANCED_METADATA) + { + change += ADVANCED_METADATA; + } else if (stack.getItemDamage() >= BASIC_METADATA) + { + change += BASIC_METADATA; + } + + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + + BlockMulti.onPlacement(worldIn, pos, placer, this); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + if (var9 instanceof TileEntitySolar) + { + ((TileEntitySolar) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public int damageDropped(IBlockState state) + { + if (getMetaFromState(state) >= BlockSolar.ADVANCED_METADATA) + { + return BlockSolar.ADVANCED_METADATA; + } else + { + return BlockSolar.BASIC_METADATA; + } + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + if (getMetaFromState(state) >= BlockSolar.ADVANCED_METADATA) + { + return new TileEntitySolar(2); + } else + { + return new TileEntitySolar(1); + } + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public String getShiftDescription(int meta) + { + switch (meta) + { + case BASIC_METADATA: + return GCCoreUtil.translate("tile.solar_basic.description"); + case ADVANCED_METADATA: + return GCCoreUtil.translate("tile.solar_adv.description"); + } + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumSolarType type = EnumSolarType.byMetadata((int) Math.floor(meta / 4.0)); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex() + state.getValue(TYPE).getMeta() * 4; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceGlass.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceGlass.java new file mode 100644 index 00000000..e748cae9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceGlass.java @@ -0,0 +1,1102 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.item.IPaintable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.JavaUtil; + +public class BlockSpaceGlass extends Block implements IPartialSealableBlock, IShiftDescription, ISortableBlock, IPaintable +{ + + public static final PropertyEnum MODEL = PropertyEnum.create("modeltype", GlassModel.class); + public static final PropertyEnum ROTATION = PropertyEnum.create("rot", GlassRotation.class); + // public static final PropertyInteger PLACING = + // PropertyInteger.create("placing", 0, 2); + // This will define whether originally placed by the player facing NS - EW - + // or UD + + public final GlassType type; + private final GlassFrame frame; // frameValue corresponds to the damage of + // the placing item + public int color = 0xFFFFFF; + private final Block baseBlock; + private boolean isClient; + private static Class clazz = Blocks.WATER.getClass().getSuperclass(); + + public BlockSpaceGlass(String assetName, GlassType newType, GlassFrame newFrame, Block base) + { + super(Material.GLASS); + this.isClient = GalacticraftCore.proxy.getClass().getName().equals("micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore"); + this.type = newType; + this.frame = newFrame; + this.baseBlock = base == null ? this : base; + this.color = frame.getDefaultColor(); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.GLASS); + this.hasTileEntity = true; + this.setDefaultState(this.blockState.getBaseState().withProperty(MODEL, GlassModel.STANDARD_PANE).withProperty(ROTATION, GlassRotation.N)); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {MODEL, ROTATION}); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + // The plain block variety produces items carrying all variants as + // damage values + // Other block varieties have no corresponding ItemBlock (see + // registration in GCBlocks) + if (this.frame == GlassFrame.PLAIN) + { + for (int i = 0; i < GlassFrame.values().length; i++) + list.add(new ItemStack(this, 1, i)); + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + // This allows the different item damage values to place different + // instances of the block - the instances of the block are constructed + // in GCBlocks + if (meta >= GlassFrame.values().length) + meta = 0; + switch (GlassFrame.values()[meta]) + { + case TIN_DECO: + { + switch (this.type) + { + case STRONG: + return GCBlocks.spaceGlassTinStrong.getDefaultState(); + case VANILLA: + return GCBlocks.spaceGlassTinVanilla.getDefaultState(); + default: + return GCBlocks.spaceGlassTinClear.getDefaultState(); + } + } + case PLAIN: + default: + return this.getDefaultState(); + } + // TODO: Add PLACING direction + } + + @Override + public int damageDropped(IBlockState state) + { + return this.frame.ordinal(); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(this.baseBlock); + // TODO: override getItemDropped() to return null if we make a broken + // Space Glass variant... + // (if doing that, also update EntityAstroMiner.getPickBlock() + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + ArrayList ret = new ArrayList<>(1); + ret.add(new ItemStack(this.getItemDropped(state, null, fortune), 1, this.frame.ordinal())); + return ret; + } + + @Override + public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return direction.ordinal() > 1; + } + + @Override + public Material getMaterial(IBlockState state) + { + if (this.isClient && JavaUtil.instance.isCalledBySpecific(clazz)) + { + return Material.WATER; + } + return this.material; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + @Override + public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) + { + return layer == BlockRenderLayer.TRANSLUCENT || layer == BlockRenderLayer.SOLID; + } + + @Override + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB mask, List list, @Nullable Entity entityIn, boolean p_185477_7_) + { + IBlockState above = worldIn.getBlockState(pos.up()); + IBlockState below = worldIn.getBlockState(pos.down()); + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + + boolean connectN = this.canPaneConnectToBlock(north, state); + boolean connectS = this.canPaneConnectToBlock(south, state); + boolean connectW = this.canPaneConnectToBlock(west, state); + boolean connectE = this.canPaneConnectToBlock(east, state); + + boolean plateD = this.buildSolidSide(below, state); + boolean plateU = this.buildSolidSide(above, state); + boolean plateN = this.buildSolidSide(north, state); + boolean plateS = this.buildSolidSide(south, state); + boolean plateW = this.buildSolidSide(west, state); + boolean plateE = this.buildSolidSide(east, state); + + // No plate on the sides which glass is facing + if (connectN || connectS) + { + plateW = plateE = false; + } + if (connectW || connectE) + { + plateN = plateS = false; + } + + // Singleton + if (!connectE && !connectW && !connectN && !connectS) + { + boolean prefEW = false; + if (below.getBlock() == this) + { + prefEW = (isConnectedEW(below, worldIn, pos.down()) || isPreferenceEW(below, worldIn, pos.down())); + } else if (above.getBlock() == this) + { + prefEW = (isConnectedEW(above, worldIn, pos.up()) || isPreferenceEW(above, worldIn, pos.up())); + } + + if (this.isPreferenceEW(state, worldIn, pos)) + prefEW = true; + + if (prefEW) + { + plateN = plateS = false; + } else + { + plateW = plateE = false; + } + } + + final double posGlass = 0.375D; + final double posBase = 0.225D; + double xMin = plateU || plateD || plateN || plateS ? posBase : posGlass; + double xMax = plateU || plateD || plateN || plateS ? 1D - posBase : 1D - posGlass; + double yMin = 0D; // plateE || plateW || plateN || plateS ? posBase : + // 0.375D; + double yMax = 1D; // plateE || plateW || plateN || plateS ? 0.775D : + // 0.625D; + double zMin = plateU || plateD || plateE || plateW ? posBase : posGlass; + double zMax = plateU || plateD || plateE || plateW ? 1D - posBase : 1D - posGlass; + + if (plateW || connectW) + xMin = 0D; + if (plateE || connectE) + xMax = 1D; + if (plateN || connectN) + zMin = 0D; + if (plateS || connectS) + zMax = 1D; + + // Special for corner diagonals + if ((connectW ^ connectE) && (connectN ^ connectS) && !(plateU && plateD)) + { + double diag = 0.25D; + if (connectW) + { + xMin = diag - 0.01D; + xMax = diag; + } else + { + xMin = 1D - diag; + xMax = 1.01D - diag; + } + if (connectN) + { + zMin = diag - 0.01D; + zMax = diag; + } else + { + zMin = 1D - diag; + zMax = 1.01D - diag; + } + } + + xMin += pos.getX(); + xMax += pos.getX(); + yMin += pos.getY(); + yMax += pos.getY(); + zMin += pos.getZ(); + zMax += pos.getZ(); + AxisAlignedBB axisalignedbb = new AxisAlignedBB(xMin, yMin, zMin, xMax, yMax, zMax); + if (axisalignedbb != null && mask.intersects(axisalignedbb)) + { + list.add(axisalignedbb); + } + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(IBlockState bs, World worldIn, BlockPos pos) + { + return this.getBoundingBox(bs, worldIn, pos).offset(pos); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState bs, IBlockAccess worldIn, BlockPos pos) + { + IBlockState state = worldIn.getBlockState(pos); + IBlockState above = worldIn.getBlockState(pos.up()); + IBlockState below = worldIn.getBlockState(pos.down()); + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + + boolean connectedN = this.canPaneConnectToBlock(north, state); + boolean connectedS = this.canPaneConnectToBlock(south, state); + boolean connectedW = this.canPaneConnectToBlock(west, state); + boolean connectedE = this.canPaneConnectToBlock(east, state); + + boolean plateD = this.buildSolidSide(below, state); + boolean plateU = this.buildSolidSide(above, state); + boolean plateN = this.buildSolidSide(north, state); + boolean plateS = this.buildSolidSide(south, state); + boolean plateW = this.buildSolidSide(west, state); + boolean plateE = this.buildSolidSide(east, state); + + // No plate on the sides which glass is facing + if (connectedN || connectedS) + { + plateW = plateE = false; + } + if (connectedW || connectedE) + { + plateN = plateS = false; + } + + // Singleton + if (!connectedE && !connectedW && !connectedN && !connectedS) + { + boolean prefEW = false; + if (below.getBlock() == this) + { + prefEW = (isConnectedEW(below, worldIn, pos.down()) || isPreferenceEW(below, worldIn, pos.down())); + } else if (above.getBlock() == this) + { + prefEW = (isConnectedEW(above, worldIn, pos.up()) || isPreferenceEW(above, worldIn, pos.up())); + } + + if (this.isPreferenceEW(state, worldIn, pos)) + prefEW = true; + + if (prefEW) + { + plateN = plateS = false; + } else + { + plateW = plateE = false; + } + } + + int offset = 0; + int base = 1; + int solids = (plateD ? 1 : 0) + (plateU ? 1 : 0) + (plateN ? 1 : 0) + (plateS ? 1 : 0) + (plateW ? 1 : 0) + (plateE ? 1 : 0); + if (solids > 2 || (plateU && plateD) || (plateW && plateE) || (plateN && plateS)) + { + base = 0; + } + + if (connectedW || plateW) + { + offset = 2; + } + if (connectedN || plateN) + { + offset += 4; + } + if (connectedE || plateE) + { + offset += 8; + } + if (connectedS || plateS) + { + offset += 16; + } + + // See 1.10 version for the logic + return BOUNDING_BOXES[offset + base]; + } + + protected static final AxisAlignedBB[] BOUNDING_BOXES = + {new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), // Widen + // to the + // frame + // width, + // if + // frames + // on + // opposite + // sides + new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D), // The + // glass + // width + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), // 0001 + new AxisAlignedBB(0.0D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D), // 0001 + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), // 0010 + new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 0.625D), // 0010 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), // 0011 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.625D, 1.0D, 0.625D), // 0011 + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), // 0100 + new AxisAlignedBB(0.375D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D), // 0100 + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), // 0101 + new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D), // 0101 + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), // 0110 + new AxisAlignedBB(0.375D, 0.0D, 0.0D, 1.0D, 1.0D, 0.625D), // 0110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), // 0111 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.625D), // 0111 + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), // 1000 + new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 1.0D), // 1000 + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), // 1001 + new AxisAlignedBB(0.0D, 0.0D, 0.375D, 0.625D, 1.0D, 1.0D), // 1001 + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), // 1010 + new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D), // 1010 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), // 1011 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D), // 1011 + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), // 1100 + new AxisAlignedBB(0.375D, 0.0D, 0.375D, 1.0D, 1.0D, 1.0D), // 1100 + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), // 1101 + new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 1.0D), // 1101 + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // 1110 + new AxisAlignedBB(0.375D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // 1110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // 1111 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D) // 1111 + }; + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing dir) + { + IBlockState thisBlock = world.getBlockState(pos); + if ((dir == EnumFacing.NORTH || dir == EnumFacing.SOUTH) && this.isConnectedEW(thisBlock, world, pos)) + return false; + if ((dir == EnumFacing.WEST || dir == EnumFacing.EAST) && this.isConnectedNS(thisBlock, world, pos)) + return false; + IBlockState otherBlock = world.getBlockState(pos.offset(dir.getOpposite())); + return this.buildSolidSide(otherBlock, thisBlock); + } + + protected boolean isConnectedEW(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + return this.canPaneConnectToBlock(west, state) || this.canPaneConnectToBlock(east, state); + } + + protected boolean isConnectedEWRecursive(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing dir) + { + boolean connectN = this.canPaneConnectToBlock(worldIn.getBlockState(pos.north()), state); + boolean connectS = this.canPaneConnectToBlock(worldIn.getBlockState(pos.south()), state); + boolean connectW = this.canPaneConnectToBlock(worldIn.getBlockState(pos.west()), state); + boolean connectE = this.canPaneConnectToBlock(worldIn.getBlockState(pos.east()), state); + if (connectN || connectS || connectW || connectE) + { + return (connectW || connectE) && !connectN && !connectS; + } + BlockPos next = pos.offset(dir, 1); + IBlockState nextState = worldIn.getBlockState(next); + if (nextState.getBlock() == this) + { + return this.isConnectedEWRecursive(nextState, worldIn, next, dir); + } + return dir == EnumFacing.DOWN && this.isPreferenceEW(state, worldIn, pos); + } + + protected boolean isConnectedNS(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + return this.canPaneConnectToBlock(north, state) || this.canPaneConnectToBlock(south, state); + } + + protected boolean isConnectedNSRecursive(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing dir) + { + boolean connectN = this.canPaneConnectToBlock(worldIn.getBlockState(pos.north()), state); + boolean connectS = this.canPaneConnectToBlock(worldIn.getBlockState(pos.south()), state); + boolean connectW = this.canPaneConnectToBlock(worldIn.getBlockState(pos.west()), state); + boolean connectE = this.canPaneConnectToBlock(worldIn.getBlockState(pos.east()), state); + if (connectN || connectS || connectW || connectE) + { + return (connectN || connectS) && !connectW && !connectE; + } + BlockPos next = pos.offset(dir, 1); + IBlockState nextState = worldIn.getBlockState(next); + if (nextState.getBlock() == this) + { + return this.isConnectedNSRecursive(nextState, worldIn, next, dir); + } + return dir == EnumFacing.DOWN && !this.isPreferenceEW(state, worldIn, pos); + } + + protected boolean isPreferenceEW(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + int solidsEW = (west.getBlock().isSideSolid(worldIn.getBlockState(pos.west()), worldIn, pos.west(), EnumFacing.EAST) ? 1 : 0) + + (east.getBlock().isSideSolid(worldIn.getBlockState(pos.east()), worldIn, pos.east(), EnumFacing.WEST) ? 1 : 0); + int solidsNS = (north.getBlock().isSideSolid(worldIn.getBlockState(pos.north()), worldIn, pos.north(), EnumFacing.SOUTH) ? 1 : 0) + + (south.getBlock().isSideSolid(worldIn.getBlockState(pos.south()), worldIn, pos.south(), EnumFacing.NORTH) ? 1 : 0); + return solidsEW > solidsNS; + } + + protected boolean canPaneConnectToBlock(IBlockState off, IBlockState blockState) + { + return off.getBlock() == this; + } + + protected boolean buildSolidSide(IBlockState off, IBlockState blockState) + { + return !(off.getBlock() == this); + } + + protected boolean buildSolidSideUD(BlockPos pos, EnumFacing testUD, IBlockAccess worldIn, IBlockState blockState) + { + BlockPos offPos = pos.offset(testUD, 1); + IBlockState off = worldIn.getBlockState(offPos); + if (off.getBlock() != this) + return true; + int connThis = (isConnectedEW(blockState, worldIn, pos) ? 2 : 0) + (isConnectedNS(blockState, worldIn, pos) ? 1 : 0); + int connOther = (isConnectedEW(off, worldIn, offPos) ? 2 : 0) + (isConnectedNS(off, worldIn, offPos) ? 1 : 0); + if (connThis == 0 && connOther == 0) + return false; + int trueThis = identifyHorizConnections(worldIn, pos, blockState); + int trueOther = identifyHorizConnections(worldIn, offPos, off); + + // Singles (no horizontal connections) -> does it match the plane of the + // one above or below? + if (connThis == 0 && (((trueOther & 3) == 0) && trueThis != 3 || ((trueOther & 12) == 0) && trueThis == 3)) + { + return false; + } + if (connOther == 0 && (((trueThis & 3) == 0) && trueOther != 3 || ((trueThis & 12) == 0) && trueOther == 3)) + { + return false; + } + + // Non-matching planes of connection, including all singles not already + // dealt with -> solid side + if (connThis != connOther) + return true; + + // One side of connection only - and matches plane of the one + // above/below -> no solid side + if (trueThis < 3 || trueThis == 4 || trueThis == 8) + { + return false; + } + if (trueOther < 3 || trueOther == 4 || trueOther == 8) + { + return false; + } + + // Special cases: T junctions above/below 2-way corners, or similar -> + // solid side because the glass can't connect properly + if ((trueThis & 7) != (trueOther & 7)) + { + return true; + } + if ((trueThis & 11) != (trueOther & 11)) + { + return true; + } + if ((trueThis & 13) != (trueOther & 13)) + { + return true; + } + if ((trueThis & 14) != (trueOther & 14)) + { + return true; + } + + // Anything still left, it's matching planes of connection and not a + // special case -> no solid side + return false; + } + + private int identifyHorizConnections(IBlockAccess worldIn, BlockPos pos, IBlockState state) + { + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + + boolean connectN = this.canPaneConnectToBlock(north, state); + boolean connectS = this.canPaneConnectToBlock(south, state); + boolean connectW = this.canPaneConnectToBlock(west, state); + boolean connectE = this.canPaneConnectToBlock(east, state); + + int connections = (connectN ? 1 : 0) + (connectS ? 1 : 0) + (connectW ? 1 : 0) + (connectE ? 1 : 0); + + if (!connectN && !connectS && !connectW && !connectE) + { + IBlockState above = worldIn.getBlockState(pos.up()); + IBlockState below = worldIn.getBlockState(pos.down()); + + if (below.getBlock() == this && this.isConnectedEWRecursive(below, worldIn, pos.down(), EnumFacing.DOWN)) + { + return 3; + } else if (above.getBlock() == this && this.isConnectedEWRecursive(above, worldIn, pos.up(), EnumFacing.UP)) + { + return 3; + } + if (below.getBlock() == this && this.isConnectedNSRecursive(below, worldIn, pos.down(), EnumFacing.DOWN)) + { + return 12; + } else if (above.getBlock() == this && this.isConnectedNSRecursive(above, worldIn, pos.up(), EnumFacing.UP)) + { + return 12; + } + if (this.isPreferenceEW(state, worldIn, pos)) + { + return 3; + } + } + + return (connectN ? 8 : 0) + (connectS ? 4 : 0) + (connectW ? 2 : 0) + (connectE ? 1 : 0); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState above = worldIn.getBlockState(pos.up()); + IBlockState below = worldIn.getBlockState(pos.down()); + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + + boolean connectN = this.canPaneConnectToBlock(north, state); + boolean connectS = this.canPaneConnectToBlock(south, state); + boolean connectW = this.canPaneConnectToBlock(west, state); + boolean connectE = this.canPaneConnectToBlock(east, state); + + boolean plateD = buildSolidSideUD(pos, EnumFacing.DOWN, worldIn, state); + boolean plateU = buildSolidSideUD(pos, EnumFacing.UP, worldIn, state); + boolean plateN = this.buildSolidSide(north, state); + boolean plateS = this.buildSolidSide(south, state); + boolean plateW = this.buildSolidSide(west, state); + boolean plateE = this.buildSolidSide(east, state); + + int connections = (connectN ? 1 : 0) + (connectS ? 1 : 0) + (connectW ? 1 : 0) + (connectE ? 1 : 0); + GlassRotation rot = GlassRotation.N; + int cornerPiece = 0; + + if (connections == 4) + return getModel(state, 4, rot, plateD, false, false, plateU, 0); + + if (connections == 3) + { + if (!connectE) + rot = GlassRotation.S; + else if (!connectN) + rot = GlassRotation.E; + else if (!connectS) + rot = GlassRotation.W; + + return getModel(state, 3, rot, plateD, false, false, plateU, 0); + } + + if (connections == 0) + { + if (below.getBlock() == this && this.isConnectedEWRecursive(below, worldIn, pos.down(), EnumFacing.DOWN)) + { + rot = GlassRotation.E; + } else if (above.getBlock() == this && this.isConnectedEWRecursive(above, worldIn, pos.up(), EnumFacing.UP)) + { + rot = GlassRotation.E; + } + if (below.getBlock() == this && this.isConnectedNSRecursive(below, worldIn, pos.down(), EnumFacing.DOWN)) + { + } else if (above.getBlock() == this && this.isConnectedNSRecursive(above, worldIn, pos.up(), EnumFacing.UP)) + { + } else if (this.isPreferenceEW(state, worldIn, pos)) + { + rot = GlassRotation.E; + } + + return getModel(state, 1, rot, plateD, plateS, plateN, plateU, 0); + } + +// EnumFacing testUD = EnumFacing.UP; +// if (plateU && !plateD) +// { +// testUD = EnumFacing.DOWN; +// } +// if (plateD && !plateU) +// { +// testUD = EnumFacing.UP; +// } + + // Two glass connections in a flat plane - this also covers connected + // flat on one side only + if (connectW && connectE || connections == 1 && (connectW || connectE)) + { + rot = GlassRotation.E; + if (connectW && !plateU && buildSolidSideUD(pos.west(), EnumFacing.UP, worldIn, west)) + { + cornerPiece++; + } + if (connectW && !plateD && buildSolidSideUD(pos.west(), EnumFacing.DOWN, worldIn, west)) + { + cornerPiece += 5; + } + if (connectE && !plateU && buildSolidSideUD(pos.east(), EnumFacing.UP, worldIn, east)) + { + cornerPiece++; + if (connectW) + rot = GlassRotation.W; + } + if (connectE && !plateD && buildSolidSideUD(pos.east(), EnumFacing.DOWN, worldIn, east)) + { + cornerPiece += 5; + if (connectW) + rot = GlassRotation.W; + } + return getModel(state, 1, rot, plateD, plateW, plateE, plateU, cornerPiece); + } + + if (connectN && connectS || connections == 1) + { + if (connectN && !plateU && buildSolidSideUD(pos.north(), EnumFacing.UP, worldIn, north)) + { + if (!connectS) + { + cornerPiece |= 5; + if (!plateD) + rot = GlassRotation.S; + } else + { + cornerPiece |= 1; + rot = GlassRotation.S; + } + } + if (connectN && !plateD && buildSolidSideUD(pos.north(), EnumFacing.DOWN, worldIn, north)) + { + cornerPiece++; + if (connectS) + rot = GlassRotation.S; + } + if (connectS && !plateU && buildSolidSideUD(pos.south(), EnumFacing.UP, worldIn, south)) + { + if (cornerPiece == 0 && !plateD) + { + cornerPiece = 5; + rot = GlassRotation.S; + } else if ((cornerPiece & 3) < 2) + { + cornerPiece++; + } + } + if (connectS && !plateD && buildSolidSideUD(pos.south(), EnumFacing.DOWN, worldIn, south)) + { + if ((cornerPiece & 3) < 2) + { + cornerPiece++; + } else + { + cornerPiece |= 5; + // rot = GlassRotation.S; + } + } + return getModel(state, 1, rot, plateD, plateS, plateN, plateU, cornerPiece); + } + + // It must be two glass connections on a corner + + if (connectW && connectS) + rot = GlassRotation.S; + else if (connectS && connectE) + rot = GlassRotation.E; + else if (connectN && connectW) + rot = GlassRotation.W; + + return getModel(state, 2, rot, plateD, false, false, plateU, 0); + } + + private IBlockState getModel(IBlockState state, int model, GlassRotation rot, boolean plateD, boolean plateL, boolean plateR, boolean plateU, int cornerPiece) + { + int x = 0; + int y = rot.ordinal(); + if (y % 2 == 1) + y = y ^ 2; + int solids = (plateD ? 1 : 0) + (plateU ? 1 : 0) + (plateR ? 1 : 0) + (plateL ? 1 : 0); + switch (model) + { + case 1: + if (solids == 4) + return state.withProperty(MODEL, GlassModel.STANDARD_S4).withProperty(ROTATION, rot.get(y, 0)); + + if (solids == 3) + { + if (!plateD) + x = (y % 2 == 1) ? 3 : 1; + else if (!plateR) + { + x = 2; + y = y ^ 2; + } else if (!plateU) + x = (y % 2 == 1) ? 1 : 3; + return state.withProperty(MODEL, GlassModel.STANDARD_S3).withProperty(ROTATION, rot.get(y, x)); + } + + if (plateD && plateU) + return state.withProperty(MODEL, GlassModel.STANDARD_S2A).withProperty(ROTATION, rot.get(y, 0)); + + if (plateL && plateR) + return state.withProperty(MODEL, GlassModel.STANDARD_S2A).withProperty(ROTATION, rot.get(y, 1)); + + if (plateD && (plateR || plateL)) + { + return state.withProperty(MODEL, cornerPiece > 0 ? GlassModel.STANDARD_S2B : GlassModel.STANDARD_S2).withProperty(ROTATION, rot.get(plateL ? (y ^ 2) : y, 0)); + } + + if (plateU && (plateR || plateL)) + { + return state.withProperty(MODEL, cornerPiece > 0 ? GlassModel.STANDARD_S2B : GlassModel.STANDARD_S2).withProperty(ROTATION, rot.get(plateL ? (y ^ 2) : y, 2)); + } + + if (plateU || plateD) + return state.withProperty(MODEL, getCornerModel(cornerPiece)).withProperty(ROTATION, rot.get(y, (plateU || cornerPiece > 4) ? 2 : 0)); + + if (plateR || plateL) + return state.withProperty(MODEL, getCornerModel(cornerPiece)).withProperty(ROTATION, rot.get(plateL ? (y ^ 2) : y, 1 + (cornerPiece > 4 ? 2 : 0))); + + return state.withProperty(MODEL, GlassModel.STANDARD_PANE).withProperty(ROTATION, rot.get(y, 0)); + case 2: + if (plateU && plateD) + return state.withProperty(MODEL, GlassModel.CORNER_S2).withProperty(ROTATION, rot.get(y, 0)); + if (plateD) + return state.withProperty(MODEL, GlassModel.CORNER_S).withProperty(ROTATION, rot.get(y, 0)); + if (plateU) + return state.withProperty(MODEL, GlassModel.CORNER_S).withProperty(ROTATION, rot.get((y + 3) % 4, 2)); + + return state.withProperty(MODEL, GlassModel.CORNER).withProperty(ROTATION, rot.get(y, 0)); + case 3: + if (plateD && plateU) + return state.withProperty(MODEL, GlassModel.T_JUNCTION_S2).withProperty(ROTATION, rot.get(y, 0)); + if (plateD) + return state.withProperty(MODEL, GlassModel.T_JUNCTION_S).withProperty(ROTATION, rot.get(y, 0)); + if (plateU) + return state.withProperty(MODEL, GlassModel.T_JUNCTION_S).withProperty(ROTATION, rot.get(y ^ 2, 2)); + + return state.withProperty(MODEL, GlassModel.T_JUNCTION).withProperty(ROTATION, rot.get(y, x)); + case 4: + if (plateD && plateU) + return state.withProperty(MODEL, GlassModel.CROSSROADS_S2).withProperty(ROTATION, rot.get(y, 0)); + if (plateD) + return state.withProperty(MODEL, GlassModel.CROSSROADS_S).withProperty(ROTATION, rot.get(y, 0)); + if (plateU) + return state.withProperty(MODEL, GlassModel.CROSSROADS_S).withProperty(ROTATION, rot.get(y ^ 2, 2)); + default: + return state.withProperty(MODEL, GlassModel.CROSSROADS).withProperty(ROTATION, rot.get(y, x)); + } + } + + private Comparable getCornerModel(int cornerPiece) + { + if ((cornerPiece & 2) == 2) + return GlassModel.STANDARD_S1BB; + return cornerPiece > 0 ? GlassModel.STANDARD_S1B : GlassModel.STANDARD_S1; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState(); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return 0; + } + + @Override + public int setColor(int newColor, EntityPlayer p, Side side) + { + if (newColor >= 0 && this.color != newColor) + { + this.color = newColor; + return 1; + } + return 0; + } + + public void resetColor() + { + this.color = this.frame.defaultColor; + } + + @SideOnly(Side.CLIENT) + public static void updateGlassColors(int color1, int color2, int color3) + { + int changes = 0; + changes += GCBlocks.spaceGlassVanilla.setColor(color1, null, Side.CLIENT); + changes += GCBlocks.spaceGlassClear.setColor(color2, null, Side.CLIENT); + changes += GCBlocks.spaceGlassStrong.setColor(color3, null, Side.CLIENT); + + if (changes > 0) + BlockSpaceGlass.updateClientRender(); + } + + @SideOnly(Side.CLIENT) + public static void updateClientRender() + { + Minecraft.getMinecraft().renderGlobal.loadRenderers(); + // TODO: improve performance, this is re-rendering ALL chunks on client + // Can we somehow limit this to chunks containing BlockSpaceGlass? + // or else: don't do all the chunk redrawing at once, queue them? + } + + @Override + public String getShiftDescription(int meta) + { + switch (this.type) + { + case CLEAR: + return GCCoreUtil.translate("tile.space_glass.clear.description"); + case VANILLA: + return GCCoreUtil.translate("tile.space_glass.description"); + case STRONG: + default: + return GCCoreUtil.translate("tile.space_glass.strong.description"); + } + + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + public enum GlassModel implements IStringSerializable + { + + STANDARD_PANE("standard"), + CORNER("corner"), + T_JUNCTION("joint"), + CROSSROADS("joinx"), + STANDARD_S1("standards1"), + STANDARD_S1B("standards1b"), + STANDARD_S1BB("standards1bb"), + STANDARD_S2("standards2"), + STANDARD_S2A("standards2a"), + STANDARD_S2B("standards2b"), + STANDARD_S3("standards3"), + STANDARD_S4("standards4"), + CORNER_S("corner_s"), + CORNER_S2("corner_s2"), + T_JUNCTION_S("joint_s"), + T_JUNCTION_S2("joint_s2"), + CROSSROADS_S("joinx_s"), + CROSSROADS_S2("joinx_s2"); + + private final String name; + + private GlassModel(String name) + { + this.name = name; + } + + @Override + public String getName() + { + return this.name; + } + } + + public enum GlassRotation implements IStringSerializable + { + + N("0"), E("y"), S("yy"), W("yyy"), UN("u"), UE("uyyy"), US("uyy"), UW("uy"), UUN("uuyy"), UUE("uuyyy"), UUS("uu"), UUW("uuy"), DN("d"), DE("dy"), DS("dyy"), DW("dyyy"); + + private final String name; + + private GlassRotation(String name) + { + this.name = name; + } + + @Override + public String getName() + { + return this.name; + } + + private static GlassRotation get(int i) + { + return GlassRotation.values()[i]; + } + + private static GlassRotation get(int y, int x) + { + int i = y + x * 4; + return GlassRotation.values()[i]; + } + } + + public enum GlassFrame implements IStringSerializable + { + + PLAIN("plain", 0xfafaf7), TIN_DECO("tin_deco", 0xFFFFFF); + // TODO - more frame textures can be added in future - maybe only on + // Asteroids? + + private final String name; + private final int defaultColor; + + private GlassFrame(String name, int color) + { + this.name = name; + this.defaultColor = color; + } + + @Override + public String getName() + { + return this.name; + } + + public int getDefaultColor() + { + return this.defaultColor; + } + } + + public enum GlassType implements IStringSerializable + { + + VANILLA("vanilla"), CLEAR("clear"), STRONG("strong"); + + private final String name; + + private GlassType(String name) + { + this.name = name; + } + + @Override + public String getName() + { + return this.name; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceStationBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceStationBase.java new file mode 100644 index 00000000..40b2d52b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceStationBase.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySpaceStationBase; + +public class BlockSpaceStationBase extends BlockContainer implements ITileEntityProvider +{ + + public BlockSpaceStationBase(String assetName) + { + super(Material.ROCK); + this.setHardness(-1); + this.setTranslationKey(assetName); + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + return -1.0F; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity tileAt = worldIn.getTileEntity(pos); + + if (tileAt instanceof IMultiBlock) + { + ((IMultiBlock) tileAt).onDestroy(tileAt); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntitySpaceStationBase(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof IMultiBlock) + { + ((IMultiBlock) tile).onCreate(worldIn, pos); + } + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return ItemStack.EMPTY; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpinThruster.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpinThruster.java new file mode 100644 index 00000000..0f85ba08 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpinThruster.java @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityThruster; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockSpinThruster extends BlockAdvanced implements IShiftDescription, ITileEntityProvider, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyBool ORIENTATION = PropertyBool.create("rev"); + + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.4F, 0.8F, 0.8F, 1.0F); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.0F, 0.8F, 0.8F, 0.6F); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.4F, 0.2F, 0.2F, 1.0F, 0.8F, 0.8F); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.0F, 0.2F, 0.2F, 0.6F, 0.8F, 0.8F); + + public BlockSpinThruster(String assetName) + { + super(Material.CIRCUITS); + this.setHardness(0.1F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(ORIENTATION, false)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case EAST: + return EAST_AABB; + case WEST: + return WEST_AABB; + case SOUTH: + return SOUTH_AABB; + default: + case NORTH: + return NORTH_AABB; + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canPlaceBlockAt(World world, BlockPos pos) + { + return world.isSideSolid(pos.west(), EnumFacing.EAST, true) || world.isSideSolid(pos.east(), EnumFacing.WEST, true) || world.isSideSolid(pos.north(), EnumFacing.SOUTH, true) + || world.isSideSolid(pos.south(), EnumFacing.NORTH, true); + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + if (facing.getAxis().isHorizontal() && this.canBlockStay(world, pos, facing)) + { + return this.getDefaultState().withProperty(FACING, facing); + } else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (this.canBlockStay(world, pos, enumfacing)) + { + return this.getDefaultState().withProperty(FACING, enumfacing); + } + } + return this.getDefaultState(); + } + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (this.getMetaFromState(state) == 0) + { + this.onBlockAdded(worldIn, pos, state); + } + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + int metadata = this.getMetaFromState(state); + + BlockPos baseBlock; + switch (metadata) + { + case 1: + baseBlock = pos.offset(EnumFacing.WEST); + break; + case 2: + baseBlock = pos.offset(EnumFacing.EAST); + break; + case 3: + baseBlock = pos.offset(EnumFacing.NORTH); + break; + case 4: + baseBlock = pos.offset(EnumFacing.SOUTH); + break; + default: + return; + } + + if (!worldIn.isRemote) + { + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) worldIn.provider).getSpinManager().refresh(baseBlock, true); + } + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing enumfacing = state.getValue(FACING); + + if (!this.canBlockStay(worldIn, pos, enumfacing)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + if (!worldIn.isRemote) + { + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) worldIn.provider).getSpinManager().refresh(pos, true); + } + } + } + + protected boolean canBlockStay(World world, BlockPos pos, EnumFacing facing) + { + return world.isSideSolid(pos.offset(facing.getOpposite()), facing, true); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + // TODO this is torch code as a placeholder, still need to adjust + // positioning and particle type + // Also make small thrust sounds + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + if (((WorldProviderSpaceStation) worldIn.provider).getSpinManager().thrustersFiring || rand.nextInt(80) == 0) + { + final int var6 = this.getMetaFromState(stateIn) & 7; + final double var7 = pos.getX() + 0.5F; + final double var9 = pos.getY() + 0.7F; + final double var11 = pos.getZ() + 0.5F; + final double var13 = 0.2199999988079071D; + final double var15 = 0.27000001072883606D; + + if (var6 == 1) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7 - var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + } else if (var6 == 2) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7 + var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + } else if (var6 == 3) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7, var9 + var13, var11 - var15, 0.0D, 0.0D, 0.0D); + } else if (var6 == 0) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7, var9 + var13, var11 + var15, 0.0D, 0.0D, 0.0D); + } + } + } + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + IBlockState state = world.getBlockState(pos); + boolean orientation = state.getValue(ORIENTATION); + + EnumFacing currentFacing = state.getValue(FACING); +// if (this.canBlockStay(world, pos.offset(currentFacing.getOpposite()), currentFacing)) +// { + world.setBlockState(pos, state.withProperty(ORIENTATION, !orientation), 2); +// } + // TODO else + + if (world.provider instanceof WorldProviderSpaceStation && !world.isRemote) + { + WorldProviderSpaceStation worldOrbital = (WorldProviderSpaceStation) world.provider; + worldOrbital.getSpinManager().refresh(pos, true); + } + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityThruster(); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + final int facing = this.getMetaFromState(state) & 8; + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + WorldProviderSpaceStation worldOrbital = (WorldProviderSpaceStation) worldIn.provider; + worldOrbital.getSpinManager().removeThruster(pos, facing == 0); + worldOrbital.getSpinManager().updateSpinSpeed(); + } + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(ORIENTATION, meta >= 8); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex() + (state.getValue(ORIENTATION) ? 8 : 0); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, ORIENTATION); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockStairsGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockStairsGC.java new file mode 100644 index 00000000..c84bdc46 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockStairsGC.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.BlockStairs; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockStairsGC extends BlockStairs implements ISortableBlock +{ + + public BlockStairsGC(String name, IBlockState state) + { + super(state); + this.setTranslationKey(name); + this.useNeighborBrightness = true; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.STAIRS; + } + + // Override the interaction with StructuredComponent to do nothing here, + // otherwise messes up our Abandoned Base generation code merged from 1.8.9 + @Override + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state; + } + + // Override the interaction with StructuredComponent to do nothing here, + // otherwise messes up our Abandoned Base generation code merged from 1.8.9 + @Override + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state; + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(SHAPE, getStairsShape(state, worldIn, pos)); + } + + // Correct bugged version in vanilla Minecraft + private static BlockStairs.EnumShape getStairsShape(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + EnumFacing enumfacing = (EnumFacing) state.getValue(FACING); + IBlockState iblockstate = worldIn.getBlockState(pos.offset(enumfacing)); + boolean top = state.getValue(HALF) == EnumHalf.TOP; + + if (isBlockStairs(iblockstate) && state.getValue(HALF) == iblockstate.getValue(HALF)) + { + EnumFacing enumfacing1 = (EnumFacing) iblockstate.getValue(FACING); + + if (enumfacing1.getAxis() != ((EnumFacing) state.getValue(FACING)).getAxis() && isDifferentStairs(state, worldIn, pos, enumfacing1.getOpposite())) + { + if (enumfacing1 == (top ? enumfacing.rotateY() : enumfacing.rotateYCCW())) + { + return BlockStairs.EnumShape.OUTER_LEFT; + } + + return BlockStairs.EnumShape.OUTER_RIGHT; + } + } + + IBlockState iblockstate1 = worldIn.getBlockState(pos.offset(enumfacing.getOpposite())); + + if (isBlockStairs(iblockstate1) && state.getValue(HALF) == iblockstate1.getValue(HALF)) + { + EnumFacing enumfacing2 = (EnumFacing) iblockstate1.getValue(FACING); + + if (enumfacing2.getAxis() != ((EnumFacing) state.getValue(FACING)).getAxis() && isDifferentStairs(state, worldIn, pos, enumfacing2)) + { + if (enumfacing2 == (top ? enumfacing.rotateY() : enumfacing.rotateYCCW())) + { + return BlockStairs.EnumShape.INNER_LEFT; + } + + return BlockStairs.EnumShape.INNER_RIGHT; + } + } + + return BlockStairs.EnumShape.STRAIGHT; + } + + private static boolean isDifferentStairs(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + IBlockState iblockstate = worldIn.getBlockState(pos.offset(side)); + return !isBlockStairs(iblockstate) || iblockstate.getValue(FACING) != state.getValue(FACING) || iblockstate.getValue(HALF) != state.getValue(HALF); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTelemetry.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTelemetry.java new file mode 100644 index 00000000..79fa8db4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTelemetry.java @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.UUID; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockTelemetry extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + // Metadata: 0-3 = orientation; bits 2,3 = reserved for future use + public BlockTelemetry(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = 0; + + switch (angle) + { + case 0: + change = 3; + break; + case 1: + change = 4; + break; + case 2: + change = 2; + break; + case 3: + change = 5; + break; + } + + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + final int metadata = getMetaFromState(world.getBlockState(pos)); + final int facing = metadata & 3; + int change = 0; + + switch (facing) + { + case 0: + change = 1; + break; + case 1: + change = 3; + break; + case 2: + change = 5; + break; + case 3: + change = 4; + break; + case 4: + change = 2; + break; + case 5: + change = 0; + } + change += (12 & metadata); + world.setBlockState(pos, getStateFromMeta(change), 2); + + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityTelemetry(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityTelemetry) + { + ItemStack held = entityPlayer.inventory.getCurrentItem(); + // Look for Frequency Module + if (!held.isEmpty() && held.getItem() == GCItems.basicItem && held.getItemDamage() == 19) + { + NBTTagCompound fmData = held.getTagCompound(); + if (fmData != null && fmData.hasKey("linkedUUIDMost") && fmData.hasKey("linkedUUIDLeast")) + { + UUID uuid = new UUID(fmData.getLong("linkedUUIDMost"), fmData.getLong("linkedUUIDLeast")); + ((TileEntityTelemetry) tile).addTrackedEntity(uuid); + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.telemetry_succeed.message"))); + } else + { + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.telemetry_fail.message"))); + + if (fmData == null) + { + fmData = new NBTTagCompound(); + held.setTagCompound(fmData); + } + } + fmData.setInteger("teCoordX", pos.getX()); + fmData.setInteger("teCoordY", pos.getY()); + fmData.setInteger("teCoordZ", pos.getZ()); + fmData.setInteger("teDim", GCCoreUtil.getDimensionID(world)); + return true; + } + + ItemStack wearing = GCPlayerStats.get(entityPlayer).getFrequencyModuleInSlot(); + if (wearing != null) + { + if (wearing.hasTagCompound() && wearing.getTagCompound().hasKey("teDim")) + { + return false; + } + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.telemetry_fail_wearing_it.message"))); + } else + { + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.telemetry_fail_no_frequency_module.message"))); + } + } + } + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTier1TreasureChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTier1TreasureChest.java new file mode 100644 index 00000000..a1b04ea7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTier1TreasureChest.java @@ -0,0 +1,547 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Iterator; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.ParticleManager; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockTier1TreasureChest extends BlockContainer implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0.0, 0.0625, 0.9375, 0.875, 0.9375); + + public BlockTier1TreasureChest(String assetName) + { + super(Material.ROCK); + this.setSoundType(SoundType.STONE); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + this.setHardness(100000.0F); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.ENTITYBLOCK_ANIMATED; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.checkForSurroundingChests(worldIn, pos, state); + Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); + + while (iterator.hasNext()) + { + EnumFacing enumfacing = (EnumFacing) iterator.next(); + BlockPos blockpos1 = pos.offset(enumfacing); + IBlockState iblockstate1 = worldIn.getBlockState(blockpos1); + + if (iblockstate1.getBlock() == this) + { + this.checkForSurroundingChests(worldIn, blockpos1, iblockstate1); + } + } + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing()); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(MathHelper.floor((double) (placer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3).getOpposite(); + state = state.withProperty(FACING, enumfacing); + BlockPos blockpos1 = pos.north(); + BlockPos blockpos2 = pos.south(); + BlockPos blockpos3 = pos.west(); + BlockPos blockpos4 = pos.east(); + boolean flag = this == worldIn.getBlockState(blockpos1).getBlock(); + boolean flag1 = this == worldIn.getBlockState(blockpos2).getBlock(); + boolean flag2 = this == worldIn.getBlockState(blockpos3).getBlock(); + boolean flag3 = this == worldIn.getBlockState(blockpos4).getBlock(); + + if (!flag && !flag1 && !flag2 && !flag3) + { + worldIn.setBlockState(pos, state, 3); + } else if (enumfacing.getAxis() == EnumFacing.Axis.X && (flag || flag1)) + { + if (flag) + { + worldIn.setBlockState(blockpos1, state, 3); + } else + { + worldIn.setBlockState(blockpos2, state, 3); + } + + worldIn.setBlockState(pos, state, 3); + } else if (enumfacing.getAxis() == EnumFacing.Axis.Z && (flag2 || flag3)) + { + if (flag2) + { + worldIn.setBlockState(blockpos3, state, 3); + } else + { + worldIn.setBlockState(blockpos4, state, 3); + } + + worldIn.setBlockState(pos, state, 3); + } + } + + public IBlockState checkForSurroundingChests(World worldIn, BlockPos pos, IBlockState state) + { + if (worldIn.isRemote) + { + return state; + } else + { + IBlockState iblockstate1 = worldIn.getBlockState(pos.north()); + IBlockState iblockstate2 = worldIn.getBlockState(pos.south()); + IBlockState iblockstate3 = worldIn.getBlockState(pos.west()); + IBlockState iblockstate4 = worldIn.getBlockState(pos.east()); + EnumFacing enumfacing = (EnumFacing) state.getValue(FACING); + Block block = iblockstate1.getBlock(); + Block block1 = iblockstate2.getBlock(); + Block block2 = iblockstate3.getBlock(); + Block block3 = iblockstate4.getBlock(); + + if (block != this && block1 != this) + { + boolean flag = block.isFullBlock(iblockstate1); + boolean flag1 = block1.isFullBlock(iblockstate2); + + if (block2 == this || block3 == this) + { + BlockPos blockpos2 = block2 == this ? pos.west() : pos.east(); + IBlockState iblockstate7 = worldIn.getBlockState(blockpos2.north()); + IBlockState iblockstate8 = worldIn.getBlockState(blockpos2.south()); + enumfacing = EnumFacing.SOUTH; + EnumFacing enumfacing2; + + if (block2 == this) + { + enumfacing2 = (EnumFacing) iblockstate3.getValue(FACING); + } else + { + enumfacing2 = (EnumFacing) iblockstate4.getValue(FACING); + } + + if (enumfacing2 == EnumFacing.NORTH) + { + enumfacing = EnumFacing.NORTH; + } + + Block block6 = iblockstate7.getBlock(); + Block block7 = iblockstate8.getBlock(); + + if ((flag || block6.isFullBlock(iblockstate7)) && !flag1 && !block7.isFullBlock(iblockstate8)) + { + enumfacing = EnumFacing.SOUTH; + } + + if ((flag1 || block7.isFullBlock(iblockstate8)) && !flag && !block6.isFullBlock(iblockstate7)) + { + enumfacing = EnumFacing.NORTH; + } + } + } else + { + BlockPos blockpos1 = block == this ? pos.north() : pos.south(); + IBlockState iblockstate5 = worldIn.getBlockState(blockpos1.west()); + IBlockState iblockstate6 = worldIn.getBlockState(blockpos1.east()); + enumfacing = EnumFacing.EAST; + EnumFacing enumfacing1; + + if (block == this) + { + enumfacing1 = (EnumFacing) iblockstate1.getValue(FACING); + } else + { + enumfacing1 = (EnumFacing) iblockstate2.getValue(FACING); + } + + if (enumfacing1 == EnumFacing.WEST) + { + enumfacing = EnumFacing.WEST; + } + + Block block4 = iblockstate5.getBlock(); + Block block5 = iblockstate6.getBlock(); + + if ((block2.isFullBlock(iblockstate3) || block4.isFullBlock(iblockstate5)) && !block3.isFullBlock(iblockstate4) && !block5.isFullBlock(iblockstate6)) + { + enumfacing = EnumFacing.EAST; + } + + if ((block3.isFullBlock(iblockstate4) || block5.isFullBlock(iblockstate6)) && !block2.isFullBlock(iblockstate3) && !block4.isFullBlock(iblockstate5)) + { + enumfacing = EnumFacing.WEST; + } + } + + state = state.withProperty(FACING, enumfacing); + worldIn.setBlockState(pos, state, 3); + return state; + } + } + + public IBlockState correctFacing(World worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = null; + Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); + + while (iterator.hasNext()) + { + EnumFacing enumfacing1 = (EnumFacing) iterator.next(); + IBlockState iblockstate1 = worldIn.getBlockState(pos.offset(enumfacing1)); + + if (iblockstate1.getBlock() == this) + { + return state; + } + + if (iblockstate1.getBlock().isFullBlock(iblockstate1)) + { + if (enumfacing != null) + { + enumfacing = null; + break; + } + + enumfacing = enumfacing1; + } + } + + if (enumfacing != null) + { + return state.withProperty(FACING, enumfacing.getOpposite()); + } else + { + EnumFacing enumfacing2 = (EnumFacing) state.getValue(FACING); + IBlockState state1 = worldIn.getBlockState(pos.offset(enumfacing2)); + + if (state1.getBlock().isFullBlock(state1)) + { + enumfacing2 = enumfacing2.getOpposite(); + } + + state1 = worldIn.getBlockState(pos.offset(enumfacing2)); + if (state1.getBlock().isFullBlock(state1)) + { + enumfacing2 = enumfacing2.rotateY(); + } + + state1 = worldIn.getBlockState(pos.offset(enumfacing2)); + if (state1.getBlock().isFullBlock(state1)) + { + enumfacing2 = enumfacing2.getOpposite(); + } + + return state.withProperty(FACING, enumfacing2); + } + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + int i = 0; + BlockPos blockpos1 = pos.west(); + BlockPos blockpos2 = pos.east(); + BlockPos blockpos3 = pos.north(); + BlockPos blockpos4 = pos.south(); + + if (worldIn.getBlockState(blockpos1).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos1)) + { + return false; + } + + ++i; + } + + if (worldIn.getBlockState(blockpos2).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos2)) + { + return false; + } + + ++i; + } + + if (worldIn.getBlockState(blockpos3).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos3)) + { + return false; + } + + ++i; + } + + if (worldIn.getBlockState(blockpos4).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos4)) + { + return false; + } + + ++i; + } + + return i <= 1; + } + + private boolean isDoubleChest(World worldIn, BlockPos pos) + { + if (worldIn.getBlockState(pos).getBlock() != this) + { + return false; + } else + { + Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); + EnumFacing enumfacing; + + do + { + if (!iterator.hasNext()) + { + return false; + } + + enumfacing = (EnumFacing) iterator.next(); + } while (worldIn.getBlockState(pos.offset(enumfacing)).getBlock() != this); + + return true; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityTreasureChest) + { + tileentity.updateContainingBlockInfo(); + } + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof IInventory) + { + InventoryHelper.dropInventoryItems(worldIn, pos, (IInventory) tileentity); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } else + { + TileEntity tile = worldIn.getTileEntity(pos); + playerIn.displayGUIChest((IInventory) tile); + return true; + } + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityTreasureChest(); + } + + public int isProvidingWeakPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side) + { + if (!this.canProvidePower(state)) + { + return 0; + } else + { + int i = 0; + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityTreasureChest) + { + i = ((TileEntityTreasureChest) tileentity).numPlayersUsing; + } + + return MathHelper.clamp(i, 0, 15); + } + } + + public int isProvidingStrongPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side) + { + return side == EnumFacing.UP ? this.isProvidingWeakPower(worldIn, pos, state, side) : 0; + } + + private boolean isBlocked(World worldIn, BlockPos pos) + { + return this.isBelowSolidBlock(worldIn, pos) || this.isOcelotSittingOnChest(worldIn, pos); + } + + private boolean isBelowSolidBlock(World worldIn, BlockPos pos) + { + return worldIn.isSideSolid(pos.up(), EnumFacing.DOWN, false); + } + + private boolean isOcelotSittingOnChest(World worldIn, BlockPos pos) + { + Iterator iterator = worldIn.getEntitiesWithinAABB(EntityOcelot.class, + new AxisAlignedBB((double) pos.getX(), (double) (pos.getY() + 1), (double) pos.getZ(), (double) (pos.getX() + 1), (double) (pos.getY() + 2), (double) (pos.getZ() + 1))).iterator(); + EntityOcelot entityocelot; + + do + { + if (!iterator.hasNext()) + { + return false; + } + + Entity entity = (Entity) iterator.next(); + entityocelot = (EntityOcelot) entity; + } while (!entityocelot.isSitting()); + + return true; + } + + @Override + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean addDestroyEffects(World world, BlockPos pos, ParticleManager manager) + { + return false; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.TREASURE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTileGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTileGC.java new file mode 100644 index 00000000..45bf65e1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTileGC.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * An advanced block class that is to be extended for wrenching capabilities. + */ +public abstract class BlockTileGC extends BlockAdvanced implements ITileEntityProvider +{ + + public BlockTileGC(Material material) + { + super(material); + this.hasTileEntity = true; + } + + /** + * ejects contained items into the world, and notifies neighbours of an + * update, as appropriate + * + * Note: breakBlock is called when placing blocks getTileEntity() at this + * point will give the NEW block's tileEntity, if the old block's tile is + * already invalid so: do NOT invalidate old tileEntities before breaking + * blocks + */ + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (worldIn.getTileEntity(pos) instanceof IInventory) + { + InventoryHelper.dropInventoryItems(worldIn, pos, (IInventory) worldIn.getTileEntity(pos)); + } + super.breakBlock(worldIn, pos, state); + } + + /** + * Called when the block receives a BlockEvent - see World.addBlockEvent. By + * default, passes it on to the tile entity at this location. Args: world, + * x, y, z, blockID, EventID, event parameter + */ + @Override + public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int eventID, int eventParam) + { + super.eventReceived(state, worldIn, pos, eventID, eventParam); + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity != null && tileentity.receiveClientEvent(eventID, eventParam); + } + + /** + * Returns the TileEntity used by this block. You should use the metadata + * sensitive version of this to get the maximum optimization! + */ + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return null; + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTorchBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTorchBase.java new file mode 100644 index 00000000..85cf080f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTorchBase.java @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockTorchBase extends Block +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", facing -> facing != EnumFacing.DOWN); + protected static final AxisAlignedBB STANDING_AABB = new AxisAlignedBB(0.4000000059604645D, 0.0D, 0.4000000059604645D, 0.6000000238418579D, 0.6000000238418579D, 0.6000000238418579D); + protected static final AxisAlignedBB TORCH_NORTH_AABB = new AxisAlignedBB(0.3499999940395355D, 0.20000000298023224D, 0.699999988079071D, 0.6499999761581421D, 0.800000011920929D, 1.0D); + protected static final AxisAlignedBB TORCH_SOUTH_AABB = new AxisAlignedBB(0.3499999940395355D, 0.20000000298023224D, 0.0D, 0.6499999761581421D, 0.800000011920929D, 0.30000001192092896D); + protected static final AxisAlignedBB TORCH_WEST_AABB = new AxisAlignedBB(0.699999988079071D, 0.20000000298023224D, 0.3499999940395355D, 1.0D, 0.800000011920929D, 0.6499999761581421D); + protected static final AxisAlignedBB TORCH_EAST_AABB = new AxisAlignedBB(0.0D, 0.20000000298023224D, 0.3499999940395355D, 0.30000001192092896D, 0.800000011920929D, 0.6499999761581421D); + + public BlockTorchBase(Material materialIn) + { + super(materialIn); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case EAST: + return TORCH_EAST_AABB; + case WEST: + return TORCH_WEST_AABB; + case SOUTH: + return TORCH_SOUTH_AABB; + case NORTH: + return TORCH_NORTH_AABB; + default: + return STANDING_AABB; + } + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + @Override + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + if (this.canPlaceAt(worldIn, pos, facing)) + { + return this.getDefaultState().withProperty(FACING, facing); + } else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (worldIn.isSideSolid(pos.offset(enumfacing.getOpposite()), enumfacing, true)) + { + return this.getDefaultState().withProperty(FACING, enumfacing); + } + } + + return this.getDefaultState(); + } + } + + protected boolean canPlaceAt(World worldIn, BlockPos pos, EnumFacing facing) + { + BlockPos blockpos = pos.offset(facing.getOpposite()); + boolean flag = facing.getAxis().isHorizontal(); + return flag && worldIn.isSideSolid(blockpos, facing, true) || facing.equals(EnumFacing.UP) && this.canPlaceOn(worldIn, blockpos); + } + + protected boolean canPlaceOn(World worldIn, BlockPos pos) + { + IBlockState state = worldIn.getBlockState(pos); + Block block = state.getBlock(); + if (block.isSideSolid(state, worldIn, pos, EnumFacing.UP)) + { + return true; + } else + { + return block.canPlaceTorchOnTop(state, worldIn, pos); + } + } + + protected boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) + { + if (state.getBlock() == this && this.canPlaceAt(worldIn, pos, (EnumFacing) state.getValue(FACING))) + { + return true; + } else + { + if (state.getBlock() == this) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + return false; + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState(); + + switch (meta) + { + case 1: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.EAST); + break; + case 2: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.WEST); + break; + case 3: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.SOUTH); + break; + case 4: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.NORTH); + break; + case 5: + default: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.UP); + } + + return iblockstate; + } + + @Override + public int getMetaFromState(IBlockState state) + { + int i = 0; + + switch ((EnumFacing) state.getValue(FACING)) + { + case EAST: + i = i | 1; + break; + case WEST: + i = i | 2; + break; + case SOUTH: + i = i | 3; + break; + case NORTH: + i = i | 4; + break; + case DOWN: + case UP: + default: + i = i | 5; + } + + return i; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTransmitter.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTransmitter.java new file mode 100644 index 00000000..69dae629 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTransmitter.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; + +public abstract class BlockTransmitter extends BlockAdvanced +{ + + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool DOWN = PropertyBool.create("down"); + public static final PropertyBool NORTH = PropertyBool.create("north"); + public static final PropertyBool EAST = PropertyBool.create("east"); + public static final PropertyBool SOUTH = PropertyBool.create("south"); + public static final PropertyBool WEST = PropertyBool.create("west"); + + public BlockTransmitter(Material material) + { + super(material); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + + TileEntity tile = worldIn.getTileEntity(pos); + + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_UPDATE_WIRE_BOUNDS, GCCoreUtil.getDimensionID((World) worldIn), new Object[] + {pos}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID((World) worldIn), pos.getX(), pos.getY(), pos.getZ(), 10.0D)); + + if (tile instanceof INetworkConnection) + { + ((INetworkConnection) tile).refresh(); + } + } + + public abstract NetworkType getNetworkType(IBlockState state); + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof ITransmitter) + { + TileEntity[] connectable = new TileEntity[6]; + switch (this.getNetworkType(state)) + { + case FLUID: + connectable = OxygenUtil.getAdjacentFluidConnections(tileEntity); + break; + case POWER: + connectable = EnergyUtil.getAdjacentPowerConnections(tileEntity); + break; + default: + break; + } + + return state.withProperty(DOWN, Boolean.valueOf(connectable[EnumFacing.DOWN.ordinal()] != null)).withProperty(UP, Boolean.valueOf(connectable[EnumFacing.UP.ordinal()] != null)) + .withProperty(NORTH, Boolean.valueOf(connectable[EnumFacing.NORTH.ordinal()] != null)).withProperty(EAST, Boolean.valueOf(connectable[EnumFacing.EAST.ordinal()] != null)) + .withProperty(SOUTH, Boolean.valueOf(connectable[EnumFacing.SOUTH.ordinal()] != null)).withProperty(WEST, Boolean.valueOf(connectable[EnumFacing.WEST.ordinal()] != null)); + } + + return state; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockUnlitTorch.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockUnlitTorch.java new file mode 100644 index 00000000..68ae38e9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockUnlitTorch.java @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IOxygenReliantBlock; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; + +public class BlockUnlitTorch extends BlockTorchBase implements IOxygenReliantBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", facing -> facing != EnumFacing.DOWN); + + public boolean lit; + public Block litVersion; + public Block unlitVersion; + public Block fallback; + public static HashMap registeredTorches = new HashMap<>(); + + public BlockUnlitTorch(boolean lit, String assetName) + { + super(Material.CIRCUITS); + this.setTickRandomly(true); + this.lit = lit; + this.setLightLevel(lit ? 0.9375F : 0.2F); + this.setHardness(0.0F); + this.setSoundType(SoundType.WOOD); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); + } + + public static void register(BlockUnlitTorch unlittorch, BlockUnlitTorch littorch, Block vanillatorch) + { + littorch.litVersion = littorch; + littorch.unlitVersion = unlittorch; + littorch.fallback = vanillatorch; + unlittorch.litVersion = littorch; + unlittorch.unlitVersion = unlittorch; + unlittorch.fallback = vanillatorch; + registeredTorches.put(littorch, vanillatorch); + GCBlocks.itemChanges.put(unlittorch, littorch); + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return null; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : FACING.getAllowedValues()) + { + if (this.canPlaceAt(worldIn, pos, enumfacing)) + { + return true; + } + } + + return false; + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (state.getBlock().getMetaFromState(state) == 0) + { + this.onBlockAdded(worldIn, pos, state); + } else + { + this.checkOxygen(worldIn, pos, state); + } + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (this.checkForDrop(worldIn, pos, state)) + { + this.checkOxygen(worldIn, pos, state); + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (this.checkForDrop(worldIn, pos, state)) + { + EnumFacing enumfacing = state.getValue(FACING); + EnumFacing.Axis enumfacingAxis = enumfacing.getAxis(); + EnumFacing enumfacing1 = enumfacing.getOpposite(); + boolean flag = false; + + if (enumfacingAxis.isHorizontal() && !worldIn.isSideSolid(pos.offset(enumfacing1), enumfacing, true)) + { + flag = true; + } else if (enumfacingAxis.isVertical() && !this.canPlaceOn(worldIn, pos.offset(enumfacing1))) + { + flag = true; + } + + if (flag) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } else + { + this.checkOxygen(worldIn, pos, state); + } + } + } + + private void checkOxygen(World world, BlockPos pos, IBlockState state) + { + if (world.provider instanceof IGalacticraftWorldProvider) + { + if (OxygenUtil.checkTorchHasOxygen(world, pos)) + { + this.onOxygenAdded(world, pos, state); + } else + { + this.onOxygenRemoved(world, pos, state); + } + } else + { + EnumFacing enumfacing = state.getValue(FACING); + world.setBlockState(pos, this.fallback.getDefaultState().withProperty(FACING, enumfacing), 2); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + EnumFacing enumfacing = stateIn.getValue(FACING); + double d0 = (double) pos.getX() + 0.5D; + double d1 = (double) pos.getY() + 0.7D; + double d2 = (double) pos.getZ() + 0.5D; + double d3 = 0.22D; + double d4 = 0.27D; + + if (enumfacing.getAxis().isHorizontal()) + { + EnumFacing enumfacing1 = enumfacing.getOpposite(); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 + d4 * (double) enumfacing1.getXOffset(), d1 + d3, d2 + d4 * (double) enumfacing1.getZOffset(), 0.0D, 0.0D, 0.0D, new int[0]); + if (this == GCBlocks.unlitTorchLit) + { + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + d4 * (double) enumfacing1.getXOffset(), d1 + d3, d2 + d4 * (double) enumfacing1.getZOffset(), 0.0D, 0.0D, 0.0D, new int[0]); + } + } else + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D, new int[0]); + if (this == GCBlocks.unlitTorchLit) + { + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0, d1, d2, 0.0D, 0.0D, 0.0D, new int[0]); + } + } + } + + @Override + public void onOxygenRemoved(World world, BlockPos pos, IBlockState state) + { + if (world.provider instanceof IGalacticraftWorldProvider) + { + EnumFacing enumfacing = state.getValue(FACING); + world.setBlockState(pos, this.unlitVersion.getDefaultState().withProperty(FACING, enumfacing), 2); + } + } + + @Override + public void onOxygenAdded(World world, BlockPos pos, IBlockState state) + { + if (world.provider instanceof IGalacticraftWorldProvider) + { + EnumFacing enumfacing = state.getValue(FACING); + world.setBlockState(pos, this.litVersion.getDefaultState().withProperty(FACING, enumfacing), 2); + } + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this.litVersion)); + return ret; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {FACING}); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockWallGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockWallGC.java new file mode 100644 index 00000000..9c164139 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockWallGC.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockWallGC extends Block implements ISortableBlock +{ + //@noformat + protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] + { + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), + new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D) + }; + + protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] + { + AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), + AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), + AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), + AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), + AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), + AABB_BY_INDEX[15].setMaxY(1.5D) + }; + + //@format + public final static PropertyBool UP = PropertyBool.create("up"); + public final static PropertyBool NORTH = PropertyBool.create("north"); + public final static PropertyBool EAST = PropertyBool.create("east"); + public final static PropertyBool SOUTH = PropertyBool.create("south"); + public final static PropertyBool WEST = PropertyBool.create("west"); + public final static PropertyEnum VARIANT = PropertyEnum.create("variant", BlockType.class); + + public BlockWallGC(String name) + { + super(Material.ROCK); + this.setHardness(1.5F); + this.setResistance(2.5F); + this.setDefaultState(this.getDefaultState().withProperty(UP, Boolean.FALSE).withProperty(NORTH, Boolean.FALSE).withProperty(EAST, Boolean.FALSE).withProperty(SOUTH, Boolean.FALSE).withProperty(WEST, Boolean.FALSE).withProperty(VARIANT, BlockType.TIN_1_WALL)); + this.setTranslationKey(name); + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isPassable(IBlockAccess world, BlockPos pos) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face != EnumFacing.UP && face != EnumFacing.DOWN ? BlockFaceShape.MIDDLE_POLE_THICK : BlockFaceShape.CENTER_BIG; + } + + @Override + public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + return AABB_BY_INDEX[getAABBIndex(state)]; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + blockState = this.getActualState(blockState, worldIn, pos); + return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)]; + } + + private static int getAABBIndex(IBlockState state) + { + int i = 0; + + if (state.getValue(NORTH)) + { + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if (state.getValue(EAST)) + { + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if (state.getValue(SOUTH)) + { + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if (state.getValue(WEST)) + { + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + return i; + } + + private boolean canConnectTo(IBlockAccess world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + Block block = state.getBlock(); + return block == Blocks.BARRIER ? false : block != this && !(block instanceof BlockFenceGate) ? block.getMaterial(state).isOpaque() && block.isFullCube(state) ? block.getMaterial(state) != Material.GOURD : false : true; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int i = 0; i < 6; ++i) + { + list.add(new ItemStack(this, 1, i)); + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public int damageDropped(IBlockState state) + { + return this.getMetaFromState(state); + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return side == EnumFacing.DOWN ? super.shouldSideBeRendered(blockState, blockAccess, pos, side) : true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockType.values()[meta % 6]); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(VARIANT).ordinal(); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) + { + boolean flag = this.canConnectTo(world, pos.north()); + boolean flag1 = this.canConnectTo(world, pos.east()); + boolean flag2 = this.canConnectTo(world, pos.south()); + boolean flag3 = this.canConnectTo(world, pos.west()); + boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3; + return state.withProperty(UP, !flag4 || !world.isAirBlock(pos.up())).withProperty(NORTH, flag).withProperty(EAST, flag1).withProperty(SOUTH, flag2).withProperty(WEST, flag3); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, WEST, SOUTH, VARIANT}); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.WALLS; + } + + public enum BlockType implements IStringSerializable + { + + TIN_1_WALL("tin_1_wall"), TIN_2_WALL("tin_2_wall"), MOON_STONE_WALL("moon_stone_wall"), MOON_DUNGEON_BRICK_WALL("moon_dungeon_brick_wall"), MARS_COBBLESTONE_WALL("mars_cobblestone_wall"), MARS_DUNGEON_BRICK_WALL("mars_dungeon_brick_wall"); + + private String name; + + BlockType(String name) + { + this.name = name; + } + + @Override + public String toString() + { + return this.getName(); + } + + @Override + public String getName() + { + return this.name; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/ISortableBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/ISortableBlock.java new file mode 100644 index 00000000..73055c8f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/ISortableBlock.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public interface ISortableBlock +{ + + EnumSortCategoryBlock getCategory(int meta); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/MaterialOleaginous.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/MaterialOleaginous.java new file mode 100644 index 00000000..dc2d882c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/MaterialOleaginous.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.BlockDynamicLiquid; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockStaticLiquid; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.MaterialLiquid; + +import micdoodle8.mods.galacticraft.core.util.JavaUtil; + +//This avoids water and oil mixing, by being a different material +public class MaterialOleaginous extends MaterialLiquid +{ + + private Class blockLiquidName = BlockLiquid.class; + private Class blockLiquidStaticName = BlockStaticLiquid.class; + private Class blockLiquidDynamicName = BlockDynamicLiquid.class; + + public MaterialOleaginous(MapColor color) + { + super(color); + this.setNoPushMobility(); + } + + // Water and other liquids cannot displace oil, but solid blocks can + @Override + public boolean blocksMovement() + { + return JavaUtil.instance.isCalledBy(blockLiquidStaticName, blockLiquidName, blockLiquidDynamicName); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/BubbleRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/BubbleRenderer.java new file mode 100644 index 00000000..28c5ca72 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/BubbleRenderer.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProviderColored; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; + +import org.lwjgl.opengl.GL11; + +public class BubbleRenderer +{ + + private static IBakedModel sphere; + private static List bubbleProviders = Lists.newArrayList(); + + public static void clearBubbles() + { + bubbleProviders.clear(); + } + + public static void addBubble(IBubbleProviderColored tile) + { + bubbleProviders.add(tile); + } + + private static void updateModels() + { + try + { + sphere = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "sphere.obj"), ImmutableList.of("Sphere")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + + public static void renderBubbles(EntityPlayer player, float partialTicks) + { + if (bubbleProviders.isEmpty()) + { + return; + } + + double interpPosX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; + double interpPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; + double interpPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; + + if (sphere == null) + { + updateModels(); + } + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + GlStateManager.pushMatrix(); + + GlStateManager.enableRescaleNormal(); + GlStateManager.enableBlend(); + GlStateManager.disableLighting(); + GlStateManager.disableCull(); + + GlStateManager.alphaFunc(GL11.GL_GREATER, 0.1F); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.matrixMode(GL11.GL_TEXTURE); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GlStateManager.depthMask(false); + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + + for (IBubbleProviderColored provider : bubbleProviders) + { + TileEntity tile = (TileEntity) provider; + if (!provider.getBubbleVisible()) + { + continue; + } + + GL11.glPushMatrix(); + + float x = (float) (tile.getPos().getX() - interpPosX); + float y = (float) (tile.getPos().getY() - interpPosY); + float z = (float) (tile.getPos().getZ() - interpPosZ); + + GL11.glTranslatef(x + 0.5F, y + 1.0F, z + 0.5F); + GL11.glScalef(provider.getBubbleSize(), provider.getBubbleSize(), provider.getBubbleSize()); + + Vector3 colorVec = provider.getColor(); + int color = ColorUtil.to32BitColor(30, (int) (colorVec.z * 255), (int) (colorVec.y * 255), (int) (colorVec.x * 255)); + ClientUtil.drawBakedModelColored(sphere, color); + + GL11.glPopMatrix(); + } + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/CloudRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/CloudRenderer.java new file mode 100644 index 00000000..c4188ddc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/CloudRenderer.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; + +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CloudRenderer extends IRenderHandler +{ + + @Override + @SideOnly(Side.CLIENT) + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + // Do nothing + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/DynamicTextureProper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/DynamicTextureProper.java new file mode 100644 index 00000000..15bd8892 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/DynamicTextureProper.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.awt.image.BufferedImage; + +import net.minecraft.client.renderer.texture.DynamicTexture; + +public class DynamicTextureProper extends DynamicTexture +{ + + private boolean updateFlag = false; + private final int width; // We could transform these in the base class to + // protected + private final int height; // but whatever. + + public DynamicTextureProper(BufferedImage img) + { + this(img.getWidth(), img.getHeight()); + this.update(img); + } + + public DynamicTextureProper(int width, int height) + { + super(width, height); + this.width = width; + this.height = height; + } + + public void update(BufferedImage img) + { + img.getRGB(0, 0, this.width, this.height, this.getTextureData(), 0, this.width); + this.updateFlag = true; + } + + @Override + public int getGlTextureId() + { + if (this.updateFlag) + { + this.updateFlag = false; + this.updateDynamicTexture(); + } + return super.getGlTextureId(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/EventHandlerClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/EventHandlerClient.java new file mode 100644 index 00000000..252a6a1c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/EventHandlerClient.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.client.event.RenderPlayerEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.event.client.CelestialBodyRenderEvent; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import com.google.common.base.Function; + +import org.lwjgl.opengl.GL11; + +public class EventHandlerClient +{ + + public static Minecraft mc = FMLClientHandler.instance().getClient(); + public static boolean sneakRenderOverride; + public static IBakedModel[] fluidPipeModels = new IBakedModel[6]; + + @SubscribeEvent(priority = EventPriority.LOWEST) // Lowest priority to do + // the PushMatrix last, + // just before vanilla + // RenderPlayer - this also + // means if it gets + // cancelled first by + // another mod, this will + // never be called + public void onRenderPlayerPre(RenderPlayerEvent.Pre event) + { + GL11.glPushMatrix(); + + final EntityPlayer player = event.getEntityPlayer(); + + if (player.getRidingEntity() instanceof ICameraZoomEntity && player == Minecraft.getMinecraft().player && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0) + { + Entity entity = player.getRidingEntity(); + float rotateOffset = ((ICameraZoomEntity) entity).getRotateOffset(); + if (rotateOffset > -10F) + { + rotateOffset += ClientProxyCore.PLAYER_Y_OFFSET; + GL11.glTranslatef(0, -rotateOffset, 0); + float anglePitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * event.getPartialRenderTick(); + float angleYaw = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * event.getPartialRenderTick(); + GL11.glRotatef(-angleYaw, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(anglePitch, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0, rotateOffset, 0); + } + } + + if (player instanceof EntityPlayerSP) + { + sneakRenderOverride = true; + } + + // Gravity - freefall - jetpack changes in player model orientation can + // go here + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) // Highest priority to do + // the PushMatrix first, + // just after vanilla + // RenderPlayer + public void onRenderPlayerPost(RenderPlayerEvent.Post event) + { + GL11.glPopMatrix(); + + if (event.getEntityPlayer() instanceof EntityPlayerSP) + sneakRenderOverride = false; + } + + @SubscribeEvent + public void onRenderPlanetPre(CelestialBodyRenderEvent.Pre event) + { + if (event.celestialBody == GalacticraftCore.planetOverworld) + { + if (!ClientProxyCore.overworldTextureRequestSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(mc.world), new Object[] + {})); + ClientProxyCore.overworldTextureRequestSent = true; + } + + if (ClientProxyCore.overworldTexturesValid) + { + event.celestialBodyTexture = null; + GlStateManager.bindTexture(ClientProxyCore.overworldTextureClient.getGlTextureId()); + } + } + } + + @SubscribeEvent + public void onRenderPlanetPost(CelestialBodyRenderEvent.Post event) + { + if (mc.currentScreen instanceof GuiCelestialSelection) + { + if (event.celestialBody == GalacticraftCore.planetSaturn) + { + mc.renderEngine.bindTexture(ClientProxyCore.saturnRingTexture); + float size = ((GuiCelestialSelection) mc.currentScreen).getWidthForCelestialBody(event.celestialBody) / 6.0F; + ((GuiCelestialSelection) mc.currentScreen).drawTexturedModalRect(-7.5F * size, -1.75F * size, 15.0F * size, 3.5F * size, 0, 0, 30, 7, false, false, 32, 32); + } else if (event.celestialBody == GalacticraftCore.planetUranus) + { + mc.renderEngine.bindTexture(ClientProxyCore.uranusRingTexture); + float size = ((GuiCelestialSelection) mc.currentScreen).getWidthForCelestialBody(event.celestialBody) / 6.0F; + ((GuiCelestialSelection) mc.currentScreen).drawTexturedModalRect(-1.75F * size, -7.0F * size, 3.5F * size, 14.0F * size, 0, 0, 7, 28, false, false, 32, 32); + } + } + } + + @SubscribeEvent + public void onTextureStitch(TextureStitchEvent.Post event) + { + for (EnumFacing facing : EnumFacing.VALUES) + { + try + { + // Get the first character of the direction name (n/e/s/w/u/d) + Character c = Character.toLowerCase(facing.getName().charAt(0)); + IModel model; + synchronized (ModelLoaderRegistry.class) + { + model = ModelLoaderRegistry.getModel(new ResourceLocation(Constants.ASSET_PREFIX, "block/fluid_pipe_pull_" + c)); + } + Function spriteFunction = (ResourceLocation location) -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + fluidPipeModels[facing.ordinal()] = model.bake(model.getDefaultState(), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/FootprintRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/FootprintRenderer.java new file mode 100644 index 00000000..b0f9927f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/FootprintRenderer.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; + +import org.lwjgl.opengl.GL11; + +public class FootprintRenderer +{ + + public static Map> footprints = new ConcurrentHashMap>(); + private static final ResourceLocation footprintTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/footprint.png"); + + public static void renderFootprints(EntityPlayer player, float partialTicks) + { + int dimActive = GCCoreUtil.getDimensionID(player.world); + List footprintsToDraw = new LinkedList<>(); + + for (List footprintList : footprints.values()) + { + for (Footprint footprint : footprintList) + { + if (footprint.dimension == dimActive) + { + footprintsToDraw.add(footprint); + } + } + } + + if (footprintsToDraw.isEmpty()) + { + return; + } + + GlStateManager.pushMatrix(); + double interpPosX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; + double interpPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; + double interpPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(FootprintRenderer.footprintTexture); + + GlStateManager.depthMask(true); + GlStateManager.enableDepth(); + GlStateManager.enableTexture2D(); + GlStateManager.disableCull(); + + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0); + Tessellator tessellator = Tessellator.getInstance(); + float f7 = 1.0F; + float f6 = 0.0F; + float f8 = 0.0F; + float f9 = 1.0F; + + GlStateManager.alphaFunc(GL11.GL_GREATER, 0.1F); + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + boolean sensorGlasses = OverlaySensorGlasses.overrideMobTexture(); + if (sensorGlasses) + { + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + for (Footprint footprint : footprintsToDraw) + { + GL11.glPushMatrix(); + + if (!sensorGlasses) + { + int j = footprint.lightmapVal % 65536; + int k = footprint.lightmapVal / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); + } + + float ageScale = footprint.age / (float) Footprint.MAX_AGE; + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + + float f11 = (float) (footprint.position.x - interpPosX); + float f12 = (float) (footprint.position.y - interpPosY) + 0.001F; + float f13 = (float) (footprint.position.z - interpPosZ); + + GL11.glTranslatef(f11, f12, f13); + + GlStateManager.color(1F - ageScale, 1F - ageScale, 1F - ageScale, 1F - ageScale); + double footprintScale = 0.5F; + worldRenderer + .pos(Math.sin((45 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale, 0, Math.cos((45 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + .tex(f7, f9).endVertex(); + worldRenderer + .pos(Math.sin((135 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale, 0, Math.cos((135 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + .tex(f7, f8).endVertex(); + worldRenderer + .pos(Math.sin((225 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale, 0, Math.cos((225 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + .tex(f6, f8).endVertex(); + worldRenderer + .pos(Math.sin((315 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale, 0, Math.cos((315 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + .tex(f6, f9).endVertex(); + + tessellator.draw(); + GlStateManager.popMatrix(); + } + + if (sensorGlasses) + { + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + } + + GlStateManager.popMatrix(); + } + + public static void addFootprint(long chunkKey, Footprint footprint) + { + List footprintList = footprints.get(chunkKey); + + if (footprintList == null) + { + footprintList = new ArrayList(); + } + + footprintList.add(new Footprint(footprint.dimension, footprint.position, footprint.rotation, footprint.owner, footprint.lightmapVal)); + footprints.put(chunkKey, footprintList); + } + + public static void addFootprint(long chunkKey, int dimension, Vector3 position, float rotation, String owner, int lightmapVal) + { + addFootprint(chunkKey, new Footprint(dimension, position, rotation, owner, lightmapVal)); + } + + public static void setFootprints(long chunkKey, List prints) + { + List footprintList = footprints.get(chunkKey); + + if (footprintList == null) + { + footprintList = new ArrayList(); + } + + Iterator i = footprintList.iterator(); + while (i.hasNext()) + { + Footprint print = i.next(); + if (!print.owner.equals(FMLClientHandler.instance().getClient().player.getName())) + { + i.remove(); + } + } + + footprintList.addAll(prints); + footprints.put(chunkKey, footprintList); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/GalacticraftStateMapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/GalacticraftStateMapper.java new file mode 100644 index 00000000..2c552049 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/GalacticraftStateMapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.util.ResourceLocation; + +public class GalacticraftStateMapper extends StateMapperBase +{ + + public static final GalacticraftStateMapper INSTANCE = new GalacticraftStateMapper(); + + public static String getPropertyString(IBlockState state) + { + return INSTANCE.getPropertyString(state.getProperties()); + } + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + ResourceLocation loc = Block.REGISTRY.getNameForObject(state.getBlock()); + loc = new ResourceLocation(loc.getNamespace().replace("|", ""), loc.getPath()); + return new ModelResourceLocation(loc, getPropertyString(state)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/KeyHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/KeyHandler.java new file mode 100644 index 00000000..17e2c359 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/KeyHandler.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.settings.KeyBinding; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.common.gameevent.TickEvent.Type; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +public abstract class KeyHandler +{ + + private final KeyBinding[] keyBindings; + private KeyBinding[] vKeyBindings; + private boolean[] keyDown; + private boolean[] repeatings; + private boolean[] vRepeatings; + public boolean isDummy; + + public KeyHandler(KeyBinding[] keyBindings, boolean[] repeatings, KeyBinding[] vanillaKeys, boolean[] vanillaRepeatings) + { + assert keyBindings.length == repeatings.length : "You need to pass two arrays of identical length"; + assert vanillaKeys.length == vanillaRepeatings.length : "You need to pass two arrays of identical length"; + this.keyBindings = keyBindings; + this.repeatings = repeatings; + this.vKeyBindings = vanillaKeys; + this.vRepeatings = vanillaRepeatings; + this.keyDown = new boolean[keyBindings.length + vanillaKeys.length]; + } + + public KeyHandler(KeyBinding[] keyBindings) + { + this.keyBindings = keyBindings; + this.isDummy = true; + } + + @SubscribeEvent + public void onTick(ClientTickEvent event) + { + if (event.side == Side.CLIENT) + { + if (event.phase == Phase.START) + { + this.keyTick(event.type, false); + } else if (event.phase == Phase.END) + { + this.keyTick(event.type, true); + } + } + + } + + public void keyTick(Type type, boolean tickEnd) + { + boolean inChat = FMLClientHandler.instance().getClient().currentScreen instanceof GuiChat; + + for (int i = 0; i < this.keyBindings.length; i++) + { + KeyBinding keyBinding = this.keyBindings[i]; + int keyCode = keyBinding.getKeyCode(); + if (keyCode == Keyboard.KEY_NONE) + continue; + boolean state = false; + + try + { + if (!inChat) + { + if (keyCode < 0) + { + keyCode += 100; + state = Mouse.isButtonDown(keyCode); + } else + { + state = Keyboard.isKeyDown(keyCode); + } + } + } catch (IndexOutOfBoundsException e) + { + GalacticraftCore.logger.error("Invalid keybinding! " + keyBinding.getKeyDescription()); + continue; + } + + if (state != this.keyDown[i] || state && this.repeatings[i]) + { + if (state) + { + this.keyDown(type, keyBinding, tickEnd, state != this.keyDown[i]); + } else + { + this.keyUp(type, keyBinding, tickEnd); + } + if (tickEnd) + { + this.keyDown[i] = state; + } + } + } + for (int i = 0; i < this.vKeyBindings.length; i++) + { + KeyBinding keyBinding = this.vKeyBindings[i]; + int keyCode = keyBinding.getKeyCode(); + if (keyCode == Keyboard.KEY_NONE) + continue; + boolean state; + try + { + state = keyCode < 0 ? Mouse.isButtonDown(keyCode + 100) : Keyboard.isKeyDown(keyCode); + } catch (IndexOutOfBoundsException e) + { + GalacticraftCore.logger.error("Invalid keybinding! " + keyBinding.getKeyDescription()); + continue; + } + + if (state != this.keyDown[i + this.keyBindings.length] || state && this.vRepeatings[i]) + { + if (state) + { + this.keyDown(type, keyBinding, tickEnd, state != this.keyDown[i + this.keyBindings.length]); + } else + { + this.keyUp(type, keyBinding, tickEnd); + } + if (tickEnd) + { + this.keyDown[i + this.keyBindings.length] = state; + } + } + } + } + + public abstract void keyDown(Type types, KeyBinding kb, boolean tickEnd, boolean isRepeat); + + public abstract void keyUp(Type types, KeyBinding kb, boolean tickEnd); + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderMoon.java new file mode 100644 index 00000000..55e7bccb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderMoon.java @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import org.lwjgl.opengl.GL11; + +public class SkyProviderMoon extends IRenderHandler +{ + + private static final ResourceLocation overworldTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/orbitalsun.png"); + + public int starGLCallList = GLAllocation.generateDisplayLists(3); + public int glSkyList; + public int glSkyList2; + + public SkyProviderMoon() + { + GL11.glPushMatrix(); + GL11.glNewList(this.starGLCallList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + final Tessellator tessellator = Tessellator.getInstance(); + this.glSkyList = this.starGLCallList + 1; + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + BufferBuilder worldRenderer = tessellator.getBuffer(); + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j + 0, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j + 0, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + this.glSkyList2 = this.starGLCallList + 2; + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + if (!ClientProxyCore.overworldTextureRequestSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(mc.world), new Object[] + {})); + ClientProxyCore.overworldTextureRequestSent = true; + } + + WorldProviderMoon gcProvider = null; + + if (world.provider instanceof WorldProviderMoon) + { + gcProvider = (WorldProviderMoon) world.provider; + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + GL11.glColor3f(1F, 1F, 1F); + final Tessellator var23 = Tessellator.getInstance(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(0, 0, 0); + GL11.glCallList(this.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + float var10; + float var11; + float var12; + + float var20 = 0; + + if (gcProvider != null) + { + var20 = gcProvider.getStarBrightness(partialTicks); + } + + if (var20 > 0.0F) + { + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-19.0F, 0, 1.0F, 0); + GL11.glColor4f(1.0F, 1.0F, 1.0F, var20); + GL11.glCallList(this.starGLCallList); + GL11.glPopMatrix(); + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glPushMatrix(); + + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 5F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + var12 = 20.0F / 3.5F; + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-var12, 99.9D, -var12).endVertex(); + worldRenderer.pos(var12, 99.9D, -var12).endVertex(); + worldRenderer.pos(var12, 99.9D, var12).endVertex(); + worldRenderer.pos(-var12, 99.9D, var12).endVertex(); + var23.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var12 = 20.0F; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderMoon.sunTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, 100.0D, -var12).tex(0.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 100.0D, -var12).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 100.0D, var12).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(-var12, 100.0D, var12).tex(0.0D, 1.0D).endVertex(); + var23.draw(); + + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + + GL11.glDisable(GL11.GL_BLEND); + + // HOME: + var12 = 10.0F; + final float earthRotation = (float) (world.getSpawnPoint().getZ() - mc.player.posZ) * 0.01F; + GL11.glScalef(0.6F, 0.6F, 0.6F); + GL11.glRotatef(earthRotation, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(200F, 1.0F, 0.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1F); + + if (ClientProxyCore.overworldTexturesValid) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, ClientProxyCore.overworldTextureClient.getGlTextureId()); + } else + { + // Overworld texture is 48x48 in a 64x64 .png file + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderMoon.overworldTexture); + } + + world.getMoonPhase(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, -100.0D, var12).tex(0D, 1.0D).endVertex(); + worldRenderer.pos(var12, -100.0D, var12).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(var12, -100.0D, -var12).tex(1.0D, 0D).endVertex(); + worldRenderer.pos(-var12, -100.0D, -var12).tex(0D, 0D).endVertex(); + var23.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + final double var25 = mc.player.getPosition().getY() - world.getHorizon(); + + if (var25 < 0.0D) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 12.0F, 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + var10 = 1.0F; + var11 = -((float) (var25 + 65.0D)); + var12 = -var10; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(-var10, var11, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var11, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var11, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var11, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var11, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var11, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var11, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var11, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + var23.draw(); + } + + GL11.glColor3f(70F / 256F, 70F / 256F, 70F / 256F); + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -((float) (var25 - 16.0D)), 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random var1 = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var2.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int var3 = 0; var3 < (ConfigManagerCore.moreStars ? 20000 : 6000); ++var3) + { + double var4 = var1.nextFloat() * 2.0F - 1.0F; + double var6 = var1.nextFloat() * 2.0F - 1.0F; + double var8 = var1.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.15F + var1.nextFloat() * 0.1F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double var14 = var4 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 100D + 150D : 100.0D); + final double var16 = var6 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 100D + 150D : 100.0D); + final double var18 = var8 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 100D + 150D : 100.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = var1.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int var38 = 0; var38 < 4; ++var38) + { + final double var39 = 0.0D; + final double var41 = ((var38 & 2) - 1) * var10; + final double var43 = ((var38 + 1 & 2) - 1) * var10; + final double var47 = var41 * var36 - var43 * var34; + final double var49 = var43 * var36 + var41 * var34; + final double var53 = var47 * var28 + var39 * var30; + final double var55 = var39 * var28 - var47 * var30; + final double var57 = var55 * var22 - var49 * var24; + final double var61 = var49 * var22 + var55 * var24; + worldRenderer.pos(var14 + var57, var16 + var53, var18 + var61).endVertex(); + } + } + } + + var2.draw(); + } + + private Vec3d getCustomSkyColor() + { + return new Vec3d(0.26796875D, 0.1796875D, 0.0D); + } + + public float getSkyBrightness(float par1) + { + final float var2 = FMLClientHandler.instance().getClient().world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.sin(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOrbit.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOrbit.java new file mode 100644 index 00000000..48797b91 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOrbit.java @@ -0,0 +1,397 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +import org.lwjgl.opengl.GL11; + +public class SkyProviderOrbit extends IRenderHandler +{ + + private static final ResourceLocation moonTexture = new ResourceLocation("textures/environment/moon_phases.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/orbitalsun.png"); + + + public static boolean displayListsInitialized = false; + public static int starGLCallList; + public static int glSkyList; + public static int glSkyList2; + + private final ResourceLocation planetToRender; + private final boolean renderMoon; + private final boolean renderSun; + public float spinAngle = 0; + public float spinDeltaPerTick = 0; + private float prevPartialTicks = 0; + private long prevTick; + + public SkyProviderOrbit(ResourceLocation planet, boolean renderMoon, boolean renderSun) + { + this.planetToRender = planet; + this.renderMoon = renderMoon; + this.renderSun = renderSun; + + if (!displayListsInitialized) + { + initializeDisplayLists(); + } + } + + private void initializeDisplayLists() + { + starGLCallList = GLAllocation.generateDisplayLists(3); + + GL11.glPushMatrix(); + GL11.glNewList(SkyProviderOrbit.starGLCallList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + SkyProviderOrbit.glSkyList = SkyProviderOrbit.starGLCallList + 1; + GL11.glNewList(SkyProviderOrbit.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j + 0, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j + 0, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + SkyProviderOrbit.glSkyList2 = SkyProviderOrbit.starGLCallList + 2; + GL11.glNewList(SkyProviderOrbit.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + + displayListsInitialized = true; + } + + private final Minecraft minecraft = FMLClientHandler.instance().getClient(); + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + final float var20 = 400.0F + (float) this.minecraft.player.posY / 2F; + + // if (this.minecraft.player.getRidingEntity() != null) + { + // var20 = (float) (this.minecraft.player.posY - 200.0F); + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + final Vec3d var2 = this.minecraft.world.getSkyColor(this.minecraft.getRenderViewEntity(), partialTicks); + float var3 = (float) var2.x; + float var4 = (float) var2.y; + float var5 = (float) var2.z; + float var8; + + if (this.minecraft.gameSettings.anaglyph) + { + final float var6 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F; + final float var7 = (var3 * 30.0F + var4 * 70.0F) / 100.0F; + var8 = (var3 * 30.0F + var5 * 70.0F) / 100.0F; + var3 = var6; + var4 = var7; + var5 = var8; + } + + GL11.glColor3f(var3, var4, var5); + final Tessellator var23 = Tessellator.getInstance(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(var3, var4, var5); + GL11.glCallList(SkyProviderOrbit.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + final float[] var24 = this.minecraft.world.provider.calcSunriseSunsetColors(this.minecraft.world.getCelestialAngle(partialTicks), partialTicks); + float var9; + float var10; + float var11; + float var12; + + if (var24 != null) + { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glPushMatrix(); + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(MathHelper.sin(this.minecraft.world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F); + var8 = var24[0]; + var9 = var24[1]; + var10 = var24[2]; + float var13; + + if (this.minecraft.gameSettings.anaglyph) + { + var11 = (var8 * 30.0F + var9 * 59.0F + var10 * 11.0F) / 100.0F; + var12 = (var8 * 30.0F + var9 * 70.0F) / 100.0F; + var13 = (var8 * 30.0F + var10 * 70.0F) / 100.0F; + var8 = var11; + var9 = var12; + var10 = var13; + } + + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(0.0D, 100.0D, 0.0D).color(var8, var9, var10, var24[3]).endVertex(); + final byte var26 = 16; + + for (int var27 = 0; var27 <= var26; ++var27) + { + var13 = var27 * Constants.twoPI / var26; + final float var14 = MathHelper.sin(var13); + final float var15 = MathHelper.cos(var13); + worldRenderer.pos(var14 * 120.0F, var15 * 120.0F, -var15 * 40.0F * var24[3]).color(var24[0], var24[1], var24[2], 0.0F).endVertex(); + } + + var23.draw(); + GL11.glPopMatrix(); + GL11.glShadeModel(GL11.GL_FLAT); + } + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glPushMatrix(); + var8 = 1.0F - this.minecraft.world.getRainStrength(partialTicks); + var9 = 0.0F; + var10 = 0.0F; + var11 = 0.0F; + GL11.glColor4f(1.0F, 1.0F, 1.0F, var8); + GL11.glTranslatef(var9, var10, var11); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + + // Code for rendering spinning spacestations + float deltaTick = partialTicks - this.prevPartialTicks; + // while (deltaTick < 0F) deltaTick += 1.0F; + this.prevPartialTicks = partialTicks; + long curTick = this.minecraft.world.getTotalWorldTime(); + int tickDiff = (int) (curTick - this.prevTick); + this.prevTick = curTick; + if (tickDiff > 0 && tickDiff < 20) + { + deltaTick += tickDiff; + } + this.spinAngle = this.spinAngle - this.spinDeltaPerTick * deltaTick; + while (this.spinAngle < -180F) + { + this.spinAngle += 360F; + } + GL11.glRotatef(this.spinAngle, 0.0F, 1.0F, 0.0F); + + // At 0.8, these will look bright against a black sky - allows some + // headroom for them to + // look even brighter in outer dimensions (further from the sun) + GL11.glColor4f(0.8F, 0.8F, 0.8F, 0.8F); + GL11.glCallList(SkyProviderOrbit.starGLCallList); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glPushMatrix(); + float celestialAngle = this.minecraft.world.getCelestialAngle(partialTicks); + GL11.glRotatef(celestialAngle * 360.0F, 1.0F, 0.0F, 0.0F); + if (this.renderSun) + { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + var12 = 8.0F; + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-var12, 99.9D, -var12).endVertex(); + worldRenderer.pos(var12, 99.9D, -var12).endVertex(); + worldRenderer.pos(var12, 99.9D, var12).endVertex(); + worldRenderer.pos(-var12, 99.9D, var12).endVertex(); + var23.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var12 = 28.0F; + this.minecraft.renderEngine.bindTexture(SkyProviderOrbit.sunTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, 100.0D, -var12).tex(0.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 100.0D, -var12).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 100.0D, var12).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(-var12, 100.0D, var12).tex(0.0D, 1.0D).endVertex(); + var23.draw(); + } + + if (this.renderMoon) + { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + var12 = 11.3F; + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-var12, -99.9D, var12).endVertex(); + worldRenderer.pos(var12, -99.9D, var12).endVertex(); + worldRenderer.pos(var12, -99.9D, -var12).endVertex(); + worldRenderer.pos(-var12, -99.9D, -var12).endVertex(); + var23.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var12 = 40.0F; + this.minecraft.renderEngine.bindTexture(SkyProviderOrbit.moonTexture); + float var28 = this.minecraft.world.getMoonPhase(); + final int var30 = (int) (var28 % 4); + final int var29 = (int) (var28 / 4 % 2); + final float var16 = (var30 + 0) / 4.0F; + final float var17 = (var29 + 0) / 2.0F; + final float var18 = (var30 + 1) / 4.0F; + final float var19 = (var29 + 1) / 2.0F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, -100.0D, var12).tex(var18, var19).endVertex(); + worldRenderer.pos(var12, -100.0D, var12).tex(var16, var19).endVertex(); + worldRenderer.pos(var12, -100.0D, -var12).tex(var16, var17).endVertex(); + worldRenderer.pos(-var12, -100.0D, -var12).tex(var18, var17).endVertex(); + var23.draw(); + } + + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_BLEND); + + if (this.planetToRender != null) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -var20 / 10, 0.0F); + float scale = 100 * (0.3F - var20 / 10000.0F); + scale = Math.max(scale, 0.2F); + GL11.glScalef(scale, 0.0F, scale); + GL11.glTranslatef(0.0F, -var20, 0.0F); + GL11.glRotatef(90F, 0.0F, 1.0F, 0.0F); + this.minecraft.renderEngine.bindTexture(this.planetToRender); + + var10 = 1.0F; + final float alpha = 0.5F; + GL11.glColor4f(Math.min(alpha, 1.0F), Math.min(alpha, 1.0F), Math.min(alpha, 1.0F), Math.min(alpha, 1.0F)); + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var10, 0, var10).tex(0D, 1.0).endVertex(); + worldRenderer.pos(var10, 0, var10).tex(1.0, 1.0).endVertex(); + worldRenderer.pos(var10, 0, -var10).tex(1.0, 0D).endVertex(); + worldRenderer.pos(-var10, 0, -var10).tex(0D, 0D).endVertex(); + var23.draw(); + GL11.glPopMatrix(); + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glPopMatrix(); + + GL11.glEnable(GL11.GL_ALPHA_TEST); + + GL11.glColor3f(0.0F, 0.0F, 0.0F); + + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glDepthMask(true); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random var1 = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + var2.getBuffer().begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int var3 = 0; var3 < (ConfigManagerCore.moreStars ? 20000 : 6000); ++var3) + { + double var4 = var1.nextFloat() * 2.0F - 1.0F; + double var6 = var1.nextFloat() * 2.0F - 1.0F; + double var8 = var1.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.07F + var1.nextFloat() * 0.06F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double var14 = var4 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 50D + 75D : 50.0D); + final double var16 = var6 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 50D + 75D : 50.0D); + final double var18 = var8 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 50D + 75D : 50.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = var1.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int var38 = 0; var38 < 4; ++var38) + { + final double var39 = 0.0D; + final double var41 = ((var38 & 2) - 1) * var10; + final double var43 = ((var38 + 1 & 2) - 1) * var10; + final double var47 = var41 * var36 - var43 * var34; + final double var49 = var43 * var36 + var41 * var34; + final double var53 = var47 * var28 + var39 * var30; + final double var55 = var39 * var28 - var47 * var30; + final double var57 = var55 * var22 - var49 * var24; + final double var61 = var49 * var22 + var55 * var24; + var2.getBuffer().pos(var14 + var57, var16 + var53, var18 + var61).endVertex(); + } + } + } + + var2.draw(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOverworld.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOverworld.java new file mode 100644 index 00000000..2f997194 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOverworld.java @@ -0,0 +1,460 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.lang.reflect.Method; +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.launchwrapper.Launch; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.Project; + +public class SkyProviderOverworld extends IRenderHandler +{ + + private static final ResourceLocation moonTexture = new ResourceLocation("textures/environment/moon_phases.png"); + private static final ResourceLocation sunTexture = new ResourceLocation("textures/environment/sun.png"); + + private static boolean optifinePresent = false; + + static + { + try + { + optifinePresent = Launch.classLoader.getClassBytes("CustomColors") != null; + } catch (final Exception e) + { + } + } + + private int starGLCallList = GLAllocation.generateDisplayLists(7); + private int glSkyList; + private int glSkyList2; + private final ResourceLocation planetToRender = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + + public SkyProviderOverworld() + { + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + final Random rand = new Random(10842L); + GL11.glNewList(this.starGLCallList, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glNewList(this.starGLCallList + 1, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glNewList(this.starGLCallList + 2, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glNewList(this.starGLCallList + 3, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glNewList(this.starGLCallList + 4, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glPopMatrix(); + this.glSkyList = this.starGLCallList + 5; + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 5; + final int i = 256 / byte2 + 2; + float f = 16F; + BufferBuilder worldRenderer = tessellator.getBuffer(); + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j, f, l).endVertex(); + worldRenderer.pos(j + byte2, f, l).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + this.glSkyList2 = this.starGLCallList + 6; + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1).endVertex(); + worldRenderer.pos(k, f, i1).endVertex(); + worldRenderer.pos(k, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + private final Minecraft minecraft = FMLClientHandler.instance().getClient(); + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + if (!ClientProxyCore.overworldTextureRequestSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(mc.world), new Object[] + {})); + ClientProxyCore.overworldTextureRequestSent = true; + } + + double zoom = 0.0; + double yaw = 0.0; + double pitch = 0.0; + Method m = null; + + if (!optifinePresent) + { + try + { + Class c = mc.entityRenderer.getClass(); + zoom = mc.entityRenderer.cameraZoom; + yaw = mc.entityRenderer.cameraYaw; + pitch = mc.entityRenderer.cameraPitch; + + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + + if (zoom != 1.0D) + { + GL11.glTranslatef((float) yaw, (float) (-pitch), 0.0F); + GL11.glScaled(zoom, zoom, 1.0D); + } + + Project.gluPerspective(mc.gameSettings.fovSetting, (float) mc.displayWidth / (float) mc.displayHeight, 0.05F, 1400.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + + mc.entityRenderer.orientCamera(partialTicks); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + float theta = MathHelper.sqrt(((float) (mc.player.posY) - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / 1000.0F); + final float var21 = Math.max(1.0F - theta * 4.0F, 0.0F); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + final Vec3d var2 = this.minecraft.world.getSkyColor(this.minecraft.getRenderViewEntity(), partialTicks); + float i = (float) var2.x * var21; + float x = (float) var2.y * var21; + float var5 = (float) var2.z * var21; + float z; + + if (this.minecraft.gameSettings.anaglyph) + { + final float y = (i * 30.0F + x * 59.0F + var5 * 11.0F) / 100.0F; + final float var7 = (i * 30.0F + x * 70.0F) / 100.0F; + z = (i * 30.0F + var5 * 70.0F) / 100.0F; + i = y; + x = var7; + var5 = z; + } + + GL11.glColor3f(i, x, var5); + final Tessellator var23 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var23.getBuffer(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(i, x, var5); + if (mc.player.posY < 214) + { + GL11.glCallList(this.glSkyList); + } + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + final float[] costh = this.minecraft.world.provider.calcSunriseSunsetColors(this.minecraft.world.getCelestialAngle(partialTicks), partialTicks); + float var9; + float size; + float rand1; + float r; + + if (costh != null) + { + final float sunsetModInv = Math.min(1.0F, Math.max(1.0F - theta * 50.0F, 0.0F)); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glPushMatrix(); + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(MathHelper.sin(this.minecraft.world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F); + z = costh[0] * sunsetModInv; + var9 = costh[1] * sunsetModInv; + size = costh[2] * sunsetModInv; + float rand3; + + if (this.minecraft.gameSettings.anaglyph) + { + rand1 = (z * 30.0F + var9 * 59.0F + size * 11.0F) / 100.0F; + r = (z * 30.0F + var9 * 70.0F) / 100.0F; + rand3 = (z * 30.0F + size * 70.0F) / 100.0F; + z = rand1; + var9 = r; + size = rand3; + } + + worldRenderer.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + + worldRenderer.pos(0.0D, 100.0D, 0.0D).color(z * sunsetModInv, var9 * sunsetModInv, size * sunsetModInv, costh[3]).endVertex(); + final byte phi = 16; + + for (int var27 = 0; var27 <= phi; ++var27) + { + rand3 = var27 * Constants.twoPI / phi; + final float xx = MathHelper.sin(rand3); + final float rand5 = MathHelper.cos(rand3); + worldRenderer.pos(xx * 120.0F, rand5 * 120.0F, -rand5 * 40.0F * costh[3]).color(costh[0] * sunsetModInv, costh[1] * sunsetModInv, costh[2] * sunsetModInv, 0.0F).endVertex(); + } + + var23.draw(); + GL11.glPopMatrix(); + GL11.glShadeModel(GL11.GL_FLAT); + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + + GL11.glPushMatrix(); + z = 1.0F - this.minecraft.world.getRainStrength(partialTicks); + var9 = 0.0F; + size = 0.0F; + rand1 = 0.0F; + GL11.glColor4f(1.0F, 1.0F, 1.0F, z); + GL11.glTranslatef(var9, size, rand1); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + + GL11.glRotatef(this.minecraft.world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + double playerHeight = this.minecraft.player.posY; + + // Draw stars + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + float threshold; + Vec3d vec = TransformerHooks.getFogColorHook(this.minecraft.world); + threshold = Math.max(0.1F, (float) vec.length() - 0.1F); + float var20 = ((float) playerHeight - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / 1000.0F; + var20 = MathHelper.sqrt(var20); + float bright1 = Math.min(0.9F, var20 * 3); + + if (bright1 > threshold) + { + GL11.glColor4f(bright1, bright1, bright1, 1.0F); + GL11.glCallList(this.starGLCallList); + } + + GL11.glCallList(this.starGLCallList + 2); + + GL11.glCallList(this.starGLCallList + 3); + + GL11.glCallList(this.starGLCallList + 4); + + // Draw sun + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + r = 30.0F; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.minecraft.renderEngine.bindTexture(SkyProviderOverworld.sunTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-r, 100.0D, -r).tex(0.0D, 0.0D).endVertex(); + worldRenderer.pos(r, 100.0D, -r).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(r, 100.0D, r).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(-r, 100.0D, r).tex(0.0D, 1.0D).endVertex(); + var23.draw(); + + // Draw moon + r = 40.0F; + this.minecraft.renderEngine.bindTexture(SkyProviderOverworld.moonTexture); + float sinphi = this.minecraft.world.getMoonPhase(); + final int cosphi = (int) (sinphi % 4); + final int var29 = (int) (sinphi / 4 % 2); + final float yy = (cosphi) / 4.0F; + final float rand7 = (var29) / 2.0F; + final float zz = (cosphi + 1) / 4.0F; + final float rand9 = (var29 + 1) / 2.0F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-r, -100.0D, r).tex(zz, rand9).endVertex(); + worldRenderer.pos(r, -100.0D, r).tex(yy, rand9).endVertex(); + worldRenderer.pos(r, -100.0D, -r).tex(yy, rand7).endVertex(); + worldRenderer.pos(-r, -100.0D, -r).tex(zz, rand7).endVertex(); + var23.draw(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + + // TODO get exact height figure here + double var25 = playerHeight - 64; + + if (var25 > this.minecraft.gameSettings.renderDistanceChunks * 16) + { + theta *= 400.0F; + + final float sinth = Math.max(Math.min(theta / 100.0F - 0.2F, 0.5F), 0.0F); + + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_FOG); + float scale = 850 * (0.25F - theta / 10000.0F); + scale = Math.max(scale, 0.2F); + GL11.glScalef(scale, 1.0F, scale); + GL11.glTranslatef(0.0F, -(float) mc.player.posY, 0.0F); + + { + this.minecraft.renderEngine.bindTexture(this.planetToRender); + } + + size = 1.0F; + + GL11.glColor4f(sinth, sinth, sinth, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + + double zoomIn = 0.0D; + double cornerB = 1.0 - zoomIn; + worldRenderer.pos(-size, 0, size).tex(zoomIn, cornerB).endVertex(); + worldRenderer.pos(size, 0, size).tex(cornerB, cornerB).endVertex(); + worldRenderer.pos(size, 0, -size).tex(cornerB, zoomIn).endVertex(); + worldRenderer.pos(-size, 0, -size).tex(zoomIn, zoomIn).endVertex(); + var23.draw(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glPopMatrix(); + } + + GL11.glColor3f(0.0f, 0.0f, 0.0f); + + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + + if (!optifinePresent) + { + try + { + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + + if (zoom != 1.0D) + { + GL11.glTranslatef((float) yaw, (float) (-pitch), 0.0F); + GL11.glScaled(zoom, zoom, 1.0D); + } + + Project.gluPerspective(mc.gameSettings.fovSetting, (float) mc.displayWidth / (float) mc.displayHeight, 0.05F, this.minecraft.gameSettings.renderDistanceChunks * 16 * 2.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + + mc.entityRenderer.orientCamera(partialTicks); + } catch (Exception e) + { + e.printStackTrace(); + } + } + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars(BufferBuilder worldRenderer, Random rand) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int i = 0; i < (ConfigManagerCore.moreStars ? 4000 : 1200); ++i) + { + double x = rand.nextFloat() * 2.0F - 1.0F; + double y = rand.nextFloat() * 2.0F - 1.0F; + double z = rand.nextFloat() * 2.0F - 1.0F; + final double size = 0.15F + rand.nextFloat() * 0.1F; + double r = x * x + y * y + z * z; + + if (r < 1.0D && r > 0.01D) + { + r = 1.0D / Math.sqrt(r); + x *= r; + y *= r; + z *= r; + final double xx = x * (ConfigManagerCore.moreStars ? rand.nextDouble() * 100D + 150D : 100.0D); + final double zz = z * (ConfigManagerCore.moreStars ? rand.nextDouble() * 100D + 150D : 100.0D); + if (Math.abs(xx) < 29D && Math.abs(zz) < 29D) + { + continue; + } + final double yy = y * (ConfigManagerCore.moreStars ? rand.nextDouble() * 100D + 150D : 100.0D); + final double theta = Math.atan2(x, z); + final double sinth = Math.sin(theta); + final double costh = Math.cos(theta); + final double phi = Math.atan2(Math.sqrt(x * x + z * z), y); + final double sinphi = Math.sin(phi); + final double cosphi = Math.cos(phi); + final double rho = rand.nextDouble() * Math.PI * 2.0D; + final double sinrho = Math.sin(rho); + final double cosrho = Math.cos(rho); + + for (int j = 0; j < 4; ++j) + { + final double a = 0.0D; + final double b = ((j & 2) - 1) * size; + final double c = ((j + 1 & 2) - 1) * size; + final double d = b * cosrho - c * sinrho; + final double e = c * cosrho + b * sinrho; + final double dy = d * sinphi + a * cosphi; + final double ff = a * sinphi - d * cosphi; + final double dx = ff * sinth - e * costh; + final double dz = e * sinth + ff * costh; + worldRenderer.pos(xx + dx, yy + dy, zz + dz).endVertex(); + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EffectHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EffectHandler.java new file mode 100644 index 00000000..cea69d75 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EffectHandler.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.EntityLivingBase; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class EffectHandler +{ + + public static void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... otherInfo) + { + Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + double dX = mc.getRenderViewEntity().posX - position.x; + double dY = mc.getRenderViewEntity().posY - position.y; + double dZ = mc.getRenderViewEntity().posZ - position.z; + Particle particle = null; + double viewDistance = 64.0D; + + if (particleID.equals("whiteSmokeIdle")) + { + particle = new ParticleLaunchSmoke(mc.world, position, motion, 1.0F, false); + } else if (particleID.equals("whiteSmokeLaunched")) + { + particle = new ParticleLaunchSmoke(mc.world, position, motion, 1.0F, true); + } else if (particleID.equals("whiteSmokeLargeIdle")) + { + particle = new ParticleLaunchSmoke(mc.world, position, motion, 2.5F, false); + } else if (particleID.equals("whiteSmokeLargeLaunched")) + { + particle = new ParticleLaunchSmoke(mc.world, position, motion, 2.5F, true); + } else if (particleID.equals("launchFlameIdle")) + { + particle = new ParticleLaunchFlame(mc.world, position, motion, false, (EntityLivingBase) otherInfo[0]); + } else if (particleID.equals("launchFlameLaunched")) + { + particle = new ParticleLaunchFlame(mc.world, position, motion, true, (EntityLivingBase) otherInfo[0]); + } else if (particleID.equals("whiteSmokeTiny")) + { + particle = new ParticleSmokeSmall(mc.world, position, motion); + } else if (particleID.equals("oilDrip")) + { + particle = new ParticleOilDrip(mc.world, position.x, position.y, position.z); + } + + if (dX * dX + dY * dY + dZ * dZ < viewDistance * viewDistance) + { + if (particleID.equals("oxygen")) + { + particle = new ParticleOxygen(mc.world, position, motion, (Vector3) otherInfo[0]); + } + } + + if (particle != null) + { + mc.effectRenderer.addEffect(particle); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EntityFXLaunchParticle.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EntityFXLaunchParticle.java new file mode 100644 index 00000000..d6344edf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EntityFXLaunchParticle.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.Particle; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class EntityFXLaunchParticle extends Particle +{ + + public EntityFXLaunchParticle(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + + @Override + public void move(double x, double y, double z) + { + double d0 = y; + double origX = x; + double origZ = z; + + List list = this.getCollidingBoundingBoxes(this.getBoundingBox().expand(x, y, z)); + AxisAlignedBB axisalignedbb = this.getBoundingBox(); + + for (AxisAlignedBB blocker : list) + { + y = blocker.calculateYOffset(axisalignedbb, y); + } + axisalignedbb = axisalignedbb.offset(0.0D, y, 0.0D); + if (y != d0) + { + this.motionY += (y - d0) * 1.15D; + this.motionX *= 0.7D; + this.motionZ *= 0.7D; + } + this.motionY -= 0.005D; + + for (AxisAlignedBB blocker : list) + { + x = blocker.calculateXOffset(axisalignedbb, x); + } + axisalignedbb = axisalignedbb.offset(x, 0.0D, 0.0D); + + for (AxisAlignedBB blocker : list) + { + z = blocker.calculateZOffset(axisalignedbb, z); + } + axisalignedbb = axisalignedbb.offset(0.0D, 0.0D, z); + + this.setBoundingBox(axisalignedbb); + this.posX = (axisalignedbb.minX + axisalignedbb.maxX) / 2.0D; + this.posY = axisalignedbb.minY; + this.posZ = (axisalignedbb.minZ + axisalignedbb.maxZ) / 2.0D; + this.onGround = false; + } + + /** + * Simplified for performance: no colliding boxes for entities (most/all of + * the entities will be other launch particles) + */ + public List getCollidingBoundingBoxes(AxisAlignedBB bb) + { + List list = new LinkedList<>(); + World w = this.world; + int xs = MathHelper.floor(bb.minX) - 1; + int xe = MathHelper.ceil(bb.maxX); + int ys = MathHelper.floor(bb.minY) - 1; + int ye = MathHelper.ceil(bb.maxY); + int zs = MathHelper.floor(bb.minZ) - 1; + int ze = MathHelper.ceil(bb.maxZ); + BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); + IBlockState iblockstate1; + boolean xends, xzmiddle; + + for (int x = xs; x <= xe; ++x) + { + xends = (x == xs || x == xe); + for (int z = zs; z <= ze; ++z) + { + if (xends) + { + if (z == zs || z == ze) + continue; + + xzmiddle = false; + } else + { + xzmiddle = z > zs && z < ze; + } + + if (w.isBlockLoaded(mutablePos.setPos(x, 64, z))) + { + for (int y = ys; y <= ye; ++y) + { + if (y != ys && y != ye || xzmiddle) + { + mutablePos.setPos(x, y, z); + iblockstate1 = w.getBlockState(mutablePos); + if (!(iblockstate1.getBlock() instanceof BlockAir) && !(iblockstate1.getBlock() instanceof BlockGrating)) + iblockstate1.addCollisionBoxToList(w, mutablePos, bb, list, null, false); + } + } + } + } + } + + return list; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLanderFlame.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLanderFlame.java new file mode 100644 index 00000000..4986aa07 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLanderFlame.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ParticleLanderFlame extends Particle +{ + + private float smokeParticleScale; + private EntityLivingBase ridingEntity; + + public ParticleLanderFlame(World world, double x, double y, double z, double mX, double mY, double mZ, EntityLivingBase ridingEntity) + { + super(world, x, y, z, mX, mY, mZ); + this.motionX *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += mX; + this.motionY = mY; + this.motionZ += mZ; + this.particleRed = 200F / 255F; + this.particleGreen = 200F / 255F; + this.particleBlue = 200F / 255F + this.rand.nextFloat() / 3; + this.particleScale *= 8F * 1.0F; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) 5.0D; + this.canCollide = true; + this.ridingEntity = ridingEntity; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_DEPTH_TEST); + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + + this.particleGreen -= 0.09F; + this.particleRed -= 0.09F; + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.particleScale *= 0.9599999785423279D; + + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.world.rand.nextInt(5) == 1) + { + final List var3 = this.world.getEntitiesWithinAABB(Entity.class, this.getBoundingBox().grow(1.0D, 0.5D, 1.0D)); + + if (var3 != null) + { + for (int var4 = 0; var4 < var3.size(); ++var4) + { + final Entity var5 = (Entity) var3.get(var4); + + if (var5 instanceof EntityLivingBase && !var5.isDead && !var5.isBurning() && !var5.equals(this.ridingEntity)) + { + var5.setFire(3); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_SET_ENTITY_FIRE, GCCoreUtil.getDimensionID(var5.world), new Object[] + {var5.getEntityId()})); + } + } + } + } + } + + @Override + public int getBrightnessForRender(float par1) + { + return 15728880; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchFlame.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchFlame.java new file mode 100644 index 00000000..f9a0c263 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchFlame.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ParticleLaunchFlame extends Particle +{ + + private float smokeParticleScale; + private boolean spawnSmokeShort; + private EntityLivingBase ridingEntity; + + public ParticleLaunchFlame(World par1World, Vector3 position, Vector3 motion, boolean launched, EntityLivingBase ridingEntity) + { + super(par1World, position.x, position.y, position.z, 0.0D, 0.0D, 0.0D); + this.motionX = motion.x; + this.motionY = motion.y; + this.motionZ = motion.z; + this.particleRed = 255F / 255F; + this.particleGreen = 120F / 255F + this.rand.nextFloat() / 3; + this.particleBlue = 55F / 255F; + this.particleScale *= launched ? 4F : 0.1F; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) (this.particleMaxAge * 1F); + this.canCollide = true; + this.spawnSmokeShort = launched; + this.ridingEntity = ridingEntity; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_DEPTH_TEST); + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + GalacticraftCore.proxy.spawnParticle(this.spawnSmokeShort ? "whiteSmokeLaunched" : "whiteSmokeIdle", new Vector3(this.posX, this.posY + this.rand.nextDouble() * 2, this.posZ), + new Vector3(this.motionX, this.motionY, this.motionZ), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle(this.spawnSmokeShort ? "whiteSmokeLargeLaunched" : "whiteSmokeLargeIdle", new Vector3(this.posX, this.posY + this.rand.nextDouble() * 2, this.posZ), + new Vector3(this.motionX, this.motionY, this.motionZ), new Object[] + {}); + if (!this.spawnSmokeShort) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeIdle", new Vector3(this.posX, this.posY + this.rand.nextDouble() * 2, this.posZ), new Vector3(this.motionX, this.motionY, this.motionZ), + new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("whiteSmokeLargeIdle", new Vector3(this.posX, this.posY + this.rand.nextDouble() * 2, this.posZ), + new Vector3(this.motionX, this.motionY, this.motionZ), new Object[] + {}); + } + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.001D; + this.move(this.motionX, this.motionY, this.motionZ); + + this.particleGreen += 0.01F; + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.world.rand.nextInt(5) == 1) + { + final List var3 = this.world.getEntitiesWithinAABB(Entity.class, this.getBoundingBox().grow(1.0D, 0.5D, 1.0D)); + + if (var3 != null) + { + for (int var4 = 0; var4 < var3.size(); ++var4) + { + final Entity var5 = (Entity) var3.get(var4); + + if (var5 instanceof EntityLivingBase && !var5.isDead && !var5.isBurning() && !var5.equals(this.ridingEntity)) + { + var5.setFire(3); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_SET_ENTITY_FIRE, GCCoreUtil.getDimensionID(var5.world), new Object[] + {var5.getEntityId()})); + } + } + } + } + } + + @Override + public int getBrightnessForRender(float par1) + { + return 15728880; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchSmoke.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchSmoke.java new file mode 100644 index 00000000..b0272f5f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchSmoke.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ParticleLaunchSmoke extends EntityFXLaunchParticle +{ + + float smokeParticleScale; + + public ParticleLaunchSmoke(World par1World, Vector3 position, Vector3 motion, float size, boolean launched) + { + super(par1World, position.x, position.y, position.z, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.setSize(0.2F, 0.2F); + this.motionX += motion.x; + this.motionY += motion.y; + this.motionZ += motion.z; + this.particleAlpha = 1.0F; + this.particleRed = this.particleGreen = this.particleBlue = (float) (Math.random() * 0.30000001192092896D) + 0.6F; + this.particleScale *= 0.75F; + this.particleScale *= size * 3; + this.smokeParticleScale = this.particleScale; + + if (launched) + { + this.particleMaxAge = (int) (this.particleMaxAge * size) + 10; + } else + { + this.motionX += par1World.rand.nextDouble() / 2 - 0.25; + this.motionY += par1World.rand.nextDouble() / 20; + this.motionZ += par1World.rand.nextDouble() / 2 - 0.25; + this.particleMaxAge = 30 + this.particleMaxAge; + } + + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + GL11.glPushMatrix(); + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_DEPTH_TEST); + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + GL11.glPopMatrix(); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOilDrip.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOilDrip.java new file mode 100644 index 00000000..be961dc4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOilDrip.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.Particle; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleOilDrip extends Particle +{ + + private int bobTimer; + + public ParticleOilDrip(World world, double x, double y, double z) + { + super(world, x, y, z, 0.0D, 0.0D, 0.0D); + this.motionX = this.motionY = this.motionZ = 0.0D; + this.setParticleTextureIndex(113); + this.setSize(0.01F, 0.01F); + this.particleGravity = 0.06F; + this.bobTimer = 40; + this.particleMaxAge = (int) (64.0D / (Math.random() * 0.8D + 0.2D)); + this.motionX = this.motionY = this.motionZ = 0.0D; + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.particleRed = 0.1F; + this.particleGreen = 0.1F; + this.particleBlue = 0.1F; + + this.motionY -= this.particleGravity; + + if (this.bobTimer-- > 0) + { + this.motionX *= 0.02D; + this.motionY *= 0.02D; + this.motionZ *= 0.02D; + this.setParticleTextureIndex(113); + } else + { + this.setParticleTextureIndex(112); + } + + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + + BlockPos pos = new BlockPos(this.posX, this.posY, this.posZ); + IBlockState state = this.world.getBlockState(pos); + Material material = state.getMaterial(); + + if (material.isLiquid() || material.isSolid()) + { + double d0 = 0.0D; + + if (state.getBlock() instanceof BlockLiquid) + { + d0 = BlockLiquid.getLiquidHeightPercent(((Integer) state.getValue(BlockLiquid.LEVEL)).intValue()); + } + + double d1 = MathHelper.floor(this.posY) + 1 - d0; + + if (this.posY < d1) + { + this.setExpired(); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOxygen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOxygen.java new file mode 100644 index 00000000..2b97378c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOxygen.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import java.util.HashMap; +import java.util.Map; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleOxygen extends Particle +{ + + private final float portalParticleScale; + private final double portalPosX; + private final double portalPosY; + private final double portalPosZ; + private static long tick = -1L; + private static Map cacheLighting = new HashMap<>(); + + public ParticleOxygen(World par1World, Vector3 position, Vector3 motion, Vector3 color) + { + super(par1World, position.x, position.y, position.z, motion.x, motion.y, motion.z); + this.motionX = motion.x; + this.motionY = motion.y; + this.motionZ = motion.z; + this.portalPosX = this.posX = position.x; + this.portalPosY = this.posY = position.y; + this.portalPosZ = this.posZ = position.z; + this.portalParticleScale = this.particleScale = 0.1F; + this.particleRed = color.floatX(); + this.particleGreen = color.floatY(); + this.particleBlue = color.floatZ(); + this.particleMaxAge = (int) (Math.random() * 10.0D) + 40; + this.canCollide = false; + this.setParticleTextureIndex((int) (Math.random() * 8.0D)); + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge; + var8 = 1.0F - var8; + var8 *= var8; + var8 = 1.0F - var8; + this.particleScale = this.portalParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + @Override + public int getBrightnessForRender(float par1) + { + long time = this.world.getWorldTime(); + if (time > tick) + { + cacheLighting.clear(); + tick = time; + } + BlockPos blockpos = new BlockPos(this.posX, this.posY + 0.17, this.posZ); + int var2; + if (cacheLighting.containsKey(blockpos)) + { + var2 = cacheLighting.get(blockpos); + } else + { + var2 = this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + cacheLighting.put(blockpos, var2); + } + float var3 = (float) this.particleAge / (float) this.particleMaxAge; + var3 *= var3; + var3 *= var3; + final int var4 = var2 & 255; + int var5 = var2 >> 16 & 255; + var5 += (int) (var3 * 15.0F * 16.0F); + + if (var5 > 240) + { + var5 = 240; + } + + return var4 | var5 << 16; + } + + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + float var1 = (float) this.particleAge / (float) this.particleMaxAge; + final float var2 = var1; + var1 = -var1 + var1 * var1 * 2.0F; + var1 = 1.0F - var1; + this.posX = this.portalPosX + this.motionX * var1; + this.posY = this.portalPosY + this.motionY * var1 + (1.0F - var2); + this.posZ = this.portalPosZ + this.motionZ * var1; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSmokeSmall.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSmokeSmall.java new file mode 100644 index 00000000..628fa63b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSmokeSmall.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ParticleSmokeSmall extends Particle +{ + + float smokeParticleScale; + + public ParticleSmokeSmall(World par1World, Vector3 position, Vector3 motion) + { + super(par1World, position.x, position.y, position.z, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.01D; + this.motionY *= 0.01D; + this.motionZ *= 0.01D; + this.setSize(0.05F, 0.05F); + this.motionX += motion.x; + this.motionY += motion.y; + this.motionZ += motion.z; + this.particleAlpha = 0.8F; + this.particleRed = this.particleGreen = this.particleBlue = (float) (Math.random() * 0.2D) + 0.7F; + this.particleScale *= 0.3F; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = 110; + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + GL11.glPushMatrix(); + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_DEPTH_TEST); + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + GL11.glPopMatrix(); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.03D; + this.motionZ *= 1.03D; + } + + this.motionX *= 0.99D; + this.motionY *= 0.99D; + this.motionZ *= 0.99D; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSparks.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSparks.java new file mode 100644 index 00000000..62491b10 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSparks.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + +public class ParticleSparks extends Particle +{ + + float smokeParticleScale; + + public ParticleSparks(World par1World, double par2, double par4, double par6, double par8, double par12) + { + super(par1World, par2, par4, par6, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += par8; + this.motionY += 0.06; + this.motionZ += par12; + this.particleRed = 255F / 255F; + this.particleGreen = 255F / 255F; + this.particleBlue = 0F / 255F + this.rand.nextFloat() / 6; + this.particleScale *= 0.15F; + this.particleScale *= 1.0F * 3; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) 50.0D; + this.particleMaxAge = (int) (this.particleMaxAge * 1.0F); + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.setParticleTextureIndex(160 + 7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY -= 0.01D; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9100000262260437D; + this.motionY *= 0.9100000262260437D; + this.motionZ *= 0.9100000262260437D; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiHandler.java new file mode 100644 index 00000000..a77cdc86 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiHandler.java @@ -0,0 +1,345 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiAirLockController; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCargoLoader; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCargoUnloader; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCircuitFabricator; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCoalGenerator; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCrafting; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiDeconstructor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiElectricFurnace; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiExtendedInventory; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiFuelLoader; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiIngotCompressor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenCollector; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenCompressor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenDistributor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenSealer; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPainter; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiParaChest; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiRefinery; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiRocketInventory; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiSolar; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiJoinSpaceRace; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiNewSpaceRace; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiPreLaunchChecklist; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCargoLoader; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCircuitFabricator; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCoalGenerator; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCrafting; +import micdoodle8.mods.galacticraft.core.inventory.ContainerDeconstructor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerElectricFurnace; +import micdoodle8.mods.galacticraft.core.inventory.ContainerElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.inventory.ContainerExtendedInventory; +import micdoodle8.mods.galacticraft.core.inventory.ContainerFuelLoader; +import micdoodle8.mods.galacticraft.core.inventory.ContainerIngotCompressor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenCollector; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenCompressor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenDistributor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenSealer; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.inventory.ContainerPainter; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRefinery; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRocketInventory; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSolar; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoUnloader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; +import micdoodle8.mods.galacticraft.core.tile.TileEntityParaChest; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.IGuiHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GuiHandler implements IGuiHandler +{ + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase == null) + { + player.sendMessage(new TextComponentString("Galacticraft player instance null server-side. This is a bug.")); + return null; + } + + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (ID == GuiIdsCore.ROCKET_INVENTORY && player.getRidingEntity() instanceof EntityTieredRocket) + { + return new ContainerRocketInventory(player.inventory, (EntityTieredRocket) player.getRidingEntity(), ((EntityTieredRocket) player.getRidingEntity()).getType(), player); + } else if (ID == GuiIdsCore.EXTENDED_INVENTORY) + { + return new ContainerExtendedInventory(player, stats.getExtendedInventory()); + } + + BlockPos pos = new BlockPos(x, y, z); + TileEntity tile = world.getTileEntity(pos); + + if (tile != null) + { + if (tile instanceof TileEntityCrafting) + { + return new ContainerCrafting(player.inventory, (TileEntityCrafting) tile); + } else if (tile instanceof TileEntityRefinery) + { + return new ContainerRefinery(player.inventory, (TileEntityRefinery) tile, player); + } else if (tile instanceof TileEntityOxygenCollector) + { + return new ContainerOxygenCollector(player.inventory, (TileEntityOxygenCollector) tile); + } else if (tile instanceof TileEntityOxygenDistributor) + { + return new ContainerOxygenDistributor(player.inventory, (TileEntityOxygenDistributor) tile); + } else if (tile instanceof TileEntityFuelLoader) + { + return new ContainerFuelLoader(player.inventory, (TileEntityFuelLoader) tile); + } else if (tile instanceof TileEntityOxygenSealer) + { + return new ContainerOxygenSealer(player.inventory, (TileEntityOxygenSealer) tile); + } else if (tile instanceof TileEntityCargoLoader) + { + return new ContainerCargoLoader(player.inventory, (TileEntityCargoLoader) tile); + } else if (tile instanceof TileEntityCargoUnloader) + { + return new ContainerCargoLoader(player.inventory, (TileEntityCargoUnloader) tile); + } else if (tile instanceof TileEntityParaChest) + { + return new ContainerParaChest(player.inventory, (TileEntityParaChest) tile, player); + } else if (tile instanceof TileEntitySolar) + { + return new ContainerSolar(player.inventory, (TileEntitySolar) tile); + } else if (tile instanceof TileEntityEnergyStorageModule) + { + return new ContainerEnergyStorageModule(player.inventory, (TileEntityEnergyStorageModule) tile); + } else if (tile instanceof TileEntityCoalGenerator) + { + return new ContainerCoalGenerator(player.inventory, (TileEntityCoalGenerator) tile); + } else if (tile instanceof TileEntityElectricFurnace) + { + return new ContainerElectricFurnace(player.inventory, (TileEntityElectricFurnace) tile); + } else if (tile instanceof TileEntityIngotCompressor) + { + return new ContainerIngotCompressor(player.inventory, (TileEntityIngotCompressor) tile); + } else if (tile instanceof TileEntityElectricIngotCompressor) + { + return new ContainerElectricIngotCompressor(player.inventory, (TileEntityElectricIngotCompressor) tile); + } else if (tile instanceof TileEntityCircuitFabricator) + { + return new ContainerCircuitFabricator(player.inventory, (TileEntityCircuitFabricator) tile); + } else if (tile instanceof TileEntityOxygenStorageModule) + { + return new ContainerOxygenStorageModule(player.inventory, (TileEntityOxygenStorageModule) tile); + } else if (tile instanceof TileEntityOxygenCompressor) + { + return new ContainerOxygenCompressor(player.inventory, (TileEntityOxygenCompressor) tile, player); + } else if (tile instanceof TileEntityOxygenDecompressor) + { + return new ContainerOxygenDecompressor(player.inventory, (TileEntityOxygenDecompressor) tile, player); + } else if (tile instanceof TileEntityDeconstructor) + { + return new ContainerDeconstructor(player.inventory, (TileEntityDeconstructor) tile); + } else if (tile instanceof TileEntityPainter) + { + return new ContainerPainter(player.inventory, (TileEntityPainter) tile); + } + } + + for (ISchematicPage page : stats.getUnlockedSchematics()) + { + if (ID == page.getGuiID()) + { + return page.getResultContainer(playerBase, new BlockPos(x, y, z)); + } + } + + return null; + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + return this.getClientGuiElement(ID, player, world, new BlockPos(x, y, z)); + } + + return null; + } + + @SideOnly(Side.CLIENT) + private Object getClientGuiElement(int ID, EntityPlayer player, World world, BlockPos position) + { + EntityPlayerSP playerClient = PlayerUtil.getPlayerBaseClientFromPlayer(player, false); + + if (ID == GuiIdsCore.GALAXY_MAP) + { + return new GuiCelestialSelection(true, null, true); + } else if (ID == GuiIdsCore.ROCKET_INVENTORY && player.getRidingEntity() instanceof EntityTieredRocket) + { + return new GuiRocketInventory(player.inventory, (EntityTieredRocket) player.getRidingEntity(), ((EntityTieredRocket) player.getRidingEntity()).getType()); + } else if (ID == GuiIdsCore.EXTENDED_INVENTORY) + { + return new GuiExtendedInventory(player, ClientProxyCore.dummyInventory); + } else if (ID == GuiIdsCore.SPACE_RACE_START) + { + return new GuiNewSpaceRace(player); + } else if (ID == GuiIdsCore.SPACE_RACE_JOIN) + { + return new GuiJoinSpaceRace(playerClient); + } else if (ID == GuiIdsCore.PRE_LAUNCH_CHECKLIST) + { + ItemStack checkList = GCCoreUtil.getMatchingItemEitherHand(playerClient, GCItems.prelaunchChecklist); + return new GuiPreLaunchChecklist(WorldUtil.getAllChecklistKeys(), + checkList != null && checkList.hasTagCompound() ? (NBTTagCompound) checkList.getTagCompound().getTag("checklistData") : null); + } + + TileEntity tile = world.getTileEntity(position); + + if (tile != null) + { + if (tile instanceof TileEntityCrafting) + { + return new GuiCrafting(player.inventory, (TileEntityCrafting) tile); + } else if (tile instanceof TileEntityRefinery) + { + return new GuiRefinery(player.inventory, (TileEntityRefinery) world.getTileEntity(position)); + } else if (tile instanceof TileEntityOxygenCollector) + { + return new GuiOxygenCollector(player.inventory, (TileEntityOxygenCollector) tile); + } else if (tile instanceof TileEntityOxygenDistributor) + { + return new GuiOxygenDistributor(player.inventory, (TileEntityOxygenDistributor) tile); + } else if (tile instanceof TileEntityFuelLoader) + { + return new GuiFuelLoader(player.inventory, (TileEntityFuelLoader) tile); + } else if (tile instanceof TileEntityOxygenSealer) + { + return new GuiOxygenSealer(player.inventory, (TileEntityOxygenSealer) tile); + } else if (tile instanceof TileEntityCargoLoader) + { + return new GuiCargoLoader(player.inventory, (TileEntityCargoLoader) tile); + } else if (tile instanceof TileEntityCargoUnloader) + { + return new GuiCargoUnloader(player.inventory, (TileEntityCargoUnloader) tile); + } else if (tile instanceof TileEntityParaChest) + { + return new GuiParaChest(player.inventory, (TileEntityParaChest) tile); + } else if (tile instanceof TileEntitySolar) + { + return new GuiSolar(player.inventory, (TileEntitySolar) tile); + } else if (tile instanceof TileEntityAirLockController) + { + return new GuiAirLockController((TileEntityAirLockController) tile); + } else if (tile instanceof TileEntityEnergyStorageModule) + { + return new GuiEnergyStorageModule(player.inventory, (TileEntityEnergyStorageModule) tile); + } else if (tile instanceof TileEntityCoalGenerator) + { + return new GuiCoalGenerator(player.inventory, (TileEntityCoalGenerator) tile); + } else if (tile instanceof TileEntityElectricFurnace) + { + return new GuiElectricFurnace(player.inventory, (TileEntityElectricFurnace) tile); + } else if (tile instanceof TileEntityIngotCompressor) + { + return new GuiIngotCompressor(player.inventory, (TileEntityIngotCompressor) tile); + } else if (tile instanceof TileEntityElectricIngotCompressor) + { + return new GuiElectricIngotCompressor(player.inventory, (TileEntityElectricIngotCompressor) tile); + } else if (tile instanceof TileEntityCircuitFabricator) + { + return new GuiCircuitFabricator(player.inventory, (TileEntityCircuitFabricator) tile); + } else if (tile instanceof TileEntityOxygenStorageModule) + { + return new GuiOxygenStorageModule(player.inventory, (TileEntityOxygenStorageModule) tile); + } else if (tile instanceof TileEntityOxygenCompressor) + { + return new GuiOxygenCompressor(player.inventory, (TileEntityOxygenCompressor) tile); + } else if (tile instanceof TileEntityOxygenDecompressor) + { + return new GuiOxygenDecompressor(player.inventory, (TileEntityOxygenDecompressor) tile); + } else if (tile instanceof TileEntityDeconstructor) + { + return new GuiDeconstructor(player.inventory, (TileEntityDeconstructor) tile); + } else if (tile instanceof TileEntityPainter) + { + return new GuiPainter(player.inventory, (TileEntityPainter) tile); + } + } + + if (playerClient != null) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(playerClient); + + for (ISchematicPage page : stats.getUnlockedSchematics()) + { + if (ID == page.getGuiID()) + { + GuiScreen screen = page.getResultScreen(playerClient, position); + + if (screen instanceof ISchematicResultPage) + { + ((ISchematicResultPage) screen).setPageIndex(page.getPageID()); + } + + return screen; + } + } + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiIdsCore.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiIdsCore.java new file mode 100644 index 00000000..7a9e4697 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiIdsCore.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui; + +public class GuiIdsCore +{ + + public static final int NASA_WORKBENCH_ROCKET = 0; + public static final int NASA_WORKBENCH_BUGGY = 1; + public static final int NASA_WORKBENCH_NEW_SCHEMATIC = 2; + public static final int GALAXY_MAP = 3; + public static final int ROCKET_INVENTORY = 4; + public static final int EXTENDED_INVENTORY = 5; + public static final int SPACE_RACE_START = 6; + public static final int SPACE_RACE_JOIN = 7; + public static final int PRE_LAUNCH_CHECKLIST = 8; +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiAirLockController.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiAirLockController.java new file mode 100644 index 00000000..6baf7272 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiAirLockController.java @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementDropdown; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementDropdown.IDropboxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Keyboard; + +public class GuiAirLockController extends GuiScreen implements ICheckBoxCallback, IDropboxCallback, ITextBoxCallback +{ + + private final int xSize; + private final int ySize; + private static final ResourceLocation airLockControllerGui = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/air_lock_controller.png"); + private final TileEntityAirLockController controller; + private GuiElementCheckbox checkboxRedstoneSignal; + private GuiElementCheckbox checkboxPlayerDistance; + private GuiElementDropdown dropdownPlayerDistance; + private GuiElementCheckbox checkboxOpenForPlayer; + private GuiElementTextBox textBoxPlayerToOpenFor; + private GuiElementCheckbox checkboxInvertSelection; + private GuiElementCheckbox checkboxHorizontalMode; + private int cannotEditTimer; + + public GuiAirLockController(TileEntityAirLockController controller) + { + this.controller = controller; + this.ySize = 139; + this.xSize = 181; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.checkboxRedstoneSignal = new GuiElementCheckbox(0, this, this.width / 2 - 84, var6 + 18, GCCoreUtil.translate("gui.checkbox.redstone_signal.name")); + this.checkboxPlayerDistance = new GuiElementCheckbox(1, this, this.width / 2 - 84, var6 + 33, GCCoreUtil.translate("gui.checkbox.player_within.name") + ": "); + String[] dropboxStrings = + {GCCoreUtil.translate("gui.dropbox.player_distance.name.0"), GCCoreUtil.translate("gui.dropbox.player_distance.name.1"), GCCoreUtil.translate("gui.dropbox.player_distance.name.2"), + GCCoreUtil.translate("gui.dropbox.player_distance.name.3")}; + this.dropdownPlayerDistance = new GuiElementDropdown(2, this, var5 + 99, var6 + 32, dropboxStrings); + this.checkboxOpenForPlayer = new GuiElementCheckbox(3, this, this.width / 2 - 68, var6 + 49, GCCoreUtil.translate("gui.checkbox.player_name.name") + ": "); + this.textBoxPlayerToOpenFor = new GuiElementTextBox(4, this, this.width / 2 - 61, var6 + 64, 110, 15, "", false, 16, false); + this.checkboxInvertSelection = new GuiElementCheckbox(5, this, this.width / 2 - 84, var6 + 80, GCCoreUtil.translate("gui.checkbox.invert.name")); + this.checkboxHorizontalMode = new GuiElementCheckbox(6, this, this.width / 2 - 84, var6 + 96, GCCoreUtil.translate("gui.checkbox.horizontal.name")); + this.buttonList.add(this.checkboxRedstoneSignal); + this.buttonList.add(this.checkboxPlayerDistance); + this.buttonList.add(this.dropdownPlayerDistance); + this.buttonList.add(this.checkboxOpenForPlayer); + this.buttonList.add(this.textBoxPlayerToOpenFor); + this.buttonList.add(this.checkboxInvertSelection); + this.buttonList.add(this.checkboxHorizontalMode); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (keyID != Keyboard.KEY_ESCAPE) + { + if (this.textBoxPlayerToOpenFor.keyTyped(keyChar, keyID)) + { + return; + } + } + + super.keyTyped(keyChar, keyID); + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + break; + } + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + + this.mc.renderEngine.bindTexture(GuiAirLockController.airLockControllerGui); + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + this.drawTexturedModalRect(var5 + 11, var6 + 51, 181, 0, 7, 9); + + String displayString = GCCoreUtil.translateWithFormat("gui.title.air_lock.name", this.controller.ownerName); + this.fontRenderer.drawString(displayString, this.width / 2 - this.fontRenderer.getStringWidth(displayString) / 2, this.height / 2 - 65, 4210752); + + if (this.cannotEditTimer > 0) + { + this.fontRenderer.drawString(this.controller.ownerName, this.width / 2 - this.fontRenderer.getStringWidth(displayString) / 2, this.height / 2 - 65, + this.cannotEditTimer % 30 < 15 ? ColorUtil.to32BitColor(255, 255, 100, 100) : 4210752); + this.cannotEditTimer--; + } + + displayString = GCCoreUtil.translate("gui.message.status.name") + ":"; + this.fontRenderer.drawString(displayString, this.width / 2 - this.fontRenderer.getStringWidth(displayString) / 2, this.height / 2 + 45, 4210752); + displayString = EnumColor.RED + GCCoreUtil.translate("gui.status.air_lock_closed.name"); + + if (!this.controller.active) + { + displayString = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.air_lock_open.name"); + } + + this.fontRenderer.drawString(displayString, this.width / 2 - this.fontRenderer.getStringWidth(displayString) / 2, this.height / 2 + 55, 4210752); + + super.drawScreen(par1, par2, par3); + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + if (checkbox.equals(this.checkboxRedstoneSignal)) + { + this.controller.redstoneActivation = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {0, this.controller.getPos(), this.controller.redstoneActivation ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 0, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.redstoneActivation ? 1 : + // 0 })); + } else if (checkbox.equals(this.checkboxPlayerDistance)) + { + this.controller.playerDistanceActivation = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {1, this.controller.getPos(), this.controller.playerDistanceActivation ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 1, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.playerDistanceActivation + // ? 1 : 0 })); + } else if (checkbox.equals(this.checkboxOpenForPlayer)) + { + this.controller.playerNameMatches = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {3, this.controller.getPos(), this.controller.playerNameMatches ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 3, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.playerNameMatches ? 1 : 0 + // })); + } else if (checkbox.equals(this.checkboxInvertSelection)) + { + this.controller.invertSelection = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {4, this.controller.getPos(), this.controller.invertSelection ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 4, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.invertSelection ? 1 : 0 + // })); + } else if (checkbox.equals(this.checkboxHorizontalMode)) + { + this.controller.lastHorizontalModeEnabled = this.controller.horizontalModeEnabled; + this.controller.horizontalModeEnabled = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {5, this.controller.getPos(), this.controller.horizontalModeEnabled ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 5, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.horizontalModeEnabled ? 1 + // : 0 })); + } + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.controller.ownerName); + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + if (checkbox.equals(this.checkboxRedstoneSignal)) + { + return this.controller.redstoneActivation; + } else if (checkbox.equals(this.checkboxPlayerDistance)) + { + return this.controller.playerDistanceActivation; + } else if (checkbox.equals(this.checkboxOpenForPlayer)) + { + return this.controller.playerNameMatches; + } else if (checkbox.equals(this.checkboxInvertSelection)) + { + return this.controller.invertSelection; + } else if (checkbox.equals(this.checkboxHorizontalMode)) + { + return this.controller.horizontalModeEnabled; + } + + return false; + } + + @Override + public boolean canBeClickedBy(GuiElementDropdown dropdown, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.controller.ownerName); + } + + @Override + public void onSelectionChanged(GuiElementDropdown dropdown, int selection) + { + if (dropdown.equals(this.dropdownPlayerDistance)) + { + this.controller.playerDistanceSelection = selection; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {2, this.controller.getPos(), this.controller.playerDistanceSelection})); + } + } + + @Override + public int getInitialSelection(GuiElementDropdown dropdown) + { + return this.controller.playerDistanceSelection; + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.controller.ownerName); + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + if (textBox.equals(this.textBoxPlayerToOpenFor)) + { + this.controller.playerToOpenFor = newText != null ? newText : ""; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_STRING, GCCoreUtil.getDimensionID(mc.world), new Object[] + {0, this.controller.getPos(), this.controller.playerToOpenFor})); + } + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + if (textBox.equals(this.textBoxPlayerToOpenFor)) + { + return this.controller.playerToOpenFor; + } + + return null; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + return ColorUtil.to32BitColor(255, 200, 200, 200); + } + + @Override + public void onIntruderInteraction() + { + this.cannotEditTimer = 50; + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + this.cannotEditTimer = 50; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiBuggy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiBuggy.java new file mode 100644 index 00000000..5abd3927 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiBuggy.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.inventory.ContainerBuggy; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiBuggy extends GuiContainerGC +{ + + private static ResourceLocation[] sealerTexture = new ResourceLocation[4]; + + static + { + for (int i = 0; i < 4; i++) + { + GuiBuggy.sealerTexture[i] = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/buggy_" + i * 18 + ".png"); + } + } + + private final IInventory upperChestInventory; + private final int type; + + public GuiBuggy(IInventory par1IInventory, IInventory par2IInventory, int type) + { + super(new ContainerBuggy(par1IInventory, par2IInventory, type, FMLClientHandler.instance().getClient().player)); + this.upperChestInventory = par1IInventory; + this.allowUserInput = false; + this.type = type; + this.ySize = 145 + this.type * 36; + } + + @Override + public void initGui() + { + super.initGui(); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.0")); + oxygenDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 71, (this.height - this.ySize) / 2 + 6, 36, 40, oxygenDesc, this.width, this.height, this)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.fuel.name"), 8, 2 + 3, 4210752); + + this.fontRenderer.drawString(GCCoreUtil.translate(this.upperChestInventory.getName()), 8, this.type == 0 ? 50 : 39, 4210752); + + if (this.mc.player != null && this.mc.player.getRidingEntity() != null && this.mc.player.getRidingEntity() instanceof EntityBuggy) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.fuel.name") + ":", 125, 15 + 3, 4210752); + final double percentage = ((EntityBuggy) this.mc.player.getRidingEntity()).getScaledFuelLevel(100); + final String color = percentage > 80.0D ? EnumColor.BRIGHT_GREEN.getCode() : percentage > 40.0D ? EnumColor.ORANGE.getCode() : EnumColor.RED.getCode(); + final String str = percentage + "% " + GCCoreUtil.translate("gui.message.full.name"); + this.fontRenderer.drawString(color + str, 117 - str.length() / 2, 20 + 8, 4210752); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.getTextureManager().bindTexture(GuiBuggy.sealerTexture[this.type]); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, 176, this.ySize); + + if (this.mc.player != null && this.mc.player.getRidingEntity() != null && this.mc.player.getRidingEntity() instanceof EntityBuggy) + { + final int fuelLevel = ((EntityBuggy) this.mc.player.getRidingEntity()).getScaledFuelLevel(38); + + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 72, (this.height - this.ySize) / 2 + 45 - fuelLevel, 176, 38 - fuelLevel, 42, fuelLevel); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoLoader.java new file mode 100644 index 00000000..22747554 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoLoader.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCargoLoader; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiCargoLoader extends GuiContainerGC +{ + + public static final ResourceLocation loaderTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/cargo_loader.png"); + + private final TileEntityCargoLoader cargoLoader; + + private GuiButton buttonLoadItems; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiCargoLoader(InventoryPlayer par1InventoryPlayer, TileEntityCargoLoader par2TileEntityAirDistributor) + { + super(new ContainerCargoLoader(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.cargoLoader = par2TileEntityAirDistributor; + this.ySize = 201; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.cargoLoader.getWorld()), new Object[] + {this.cargoLoader.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.cargoLoader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.cargoLoader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 107; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 101; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 9, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonLoadItems = new GuiButton(0, this.width / 2 - 1, this.height / 2 - 23, 76, 20, GCCoreUtil.translate("gui.button.loaditems.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetX = -17; + int offsetY = 45; + this.fontRenderer.drawString(this.cargoLoader.getName(), 60, 12, 4210752); + this.buttonLoadItems.enabled = this.cargoLoader.disableCooldown == 0; + this.buttonLoadItems.displayString = !this.cargoLoader.getDisabled(0) ? GCCoreUtil.translate("gui.button.stoploading.name") : GCCoreUtil.translate("gui.button.loaditems.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(), 28 + offsetX, 45 + 23 - 46 + offsetY, 4210752); + // this.fontRenderer.drawString("" + + // this.cargoLoader.storage.getMaxExtract(), 28 + offsetX, 56 + 23 - 46 + // + offsetY, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90, 4210752); + } + + private String getStatus() + { + if (this.cargoLoader.outOfItems) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.noitems.name"); + } + + if (this.cargoLoader.noTarget) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.notargetload.name"); + } + + if (this.cargoLoader.targetNoInventory) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.noinvtarget.name"); + } + + if (this.cargoLoader.targetFull) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.targetfull.name"); + } + + return this.cargoLoader.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiCargoLoader.loaderTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.cargoLoader.getEnergyStoredGC(), this.cargoLoader.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.cargoLoader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.cargoLoader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.cargoLoader.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 94, var6 + 101, 176, 0, 11, 10); + } + + this.drawTexturedModalRect(var5 + 108, var6 + 102, 187, 0, Math.min(this.cargoLoader.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoUnloader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoUnloader.java new file mode 100644 index 00000000..5cf3280a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoUnloader.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCargoLoader; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoUnloader; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiCargoUnloader extends GuiContainerGC +{ + + private static final ResourceLocation unloaderTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/cargo_loader.png"); + + private final TileEntityCargoUnloader cargoUnloader; + + private GuiButton buttonLoadItems; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiCargoUnloader(InventoryPlayer par1InventoryPlayer, TileEntityCargoUnloader par2TileEntityAirDistributor) + { + super(new ContainerCargoLoader(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.cargoUnloader = par2TileEntityAirDistributor; + this.ySize = 201; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.cargoUnloader.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.cargoUnloader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.cargoUnloader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 107; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 101; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 9, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonLoadItems = new GuiButton(0, this.width / 2 - 1, this.height / 2 - 23, 76, 20, GCCoreUtil.translate("gui.button.unloaditems.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetX = -17; + int offsetY = 45; + this.fontRenderer.drawString(this.cargoUnloader.getName(), 60, 12, 4210752); + this.buttonLoadItems.enabled = this.cargoUnloader.disableCooldown == 0; + this.buttonLoadItems.displayString = !this.cargoUnloader.getDisabled(0) ? GCCoreUtil.translate("gui.button.stopunloading.name") : GCCoreUtil.translate("gui.button.unloaditems.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(), 28 + offsetX, 45 + 23 - 46 + offsetY, 4210752); + // this.fontRenderer.drawString("" + + // this.cargoUnloader.storage.getMaxExtract(), 28 + offsetX, 56 + 23 - + // 46 + offsetY, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.cargoUnloader.getVoltage(), + // ElectricUnit.VOLTAGE), 28 + offsetX, 68 + 23 - 46 + offsetY, + // 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90, 4210752); + } + + private String getStatus() + { + if (this.cargoUnloader.noTarget) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.notargetunload.name"); + } + + if (this.cargoUnloader.targetEmpty) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.targetempty.name"); + } + + if (this.cargoUnloader.targetNoInventory) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.noinvtarget.name"); + } + + return this.cargoUnloader.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiCargoUnloader.unloaderTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.cargoUnloader.getEnergyStoredGC(), this.cargoUnloader.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.cargoUnloader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.cargoUnloader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.cargoUnloader.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 94, var6 + 101, 176, 0, 11, 10); + } + + this.drawTexturedModalRect(var5 + 108, var6 + 102, 187, 0, Math.min(this.cargoUnloader.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCircuitFabricator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCircuitFabricator.java new file mode 100644 index 00000000..9a4531ff --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCircuitFabricator.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCircuitFabricator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiCircuitFabricator extends GuiContainerGC +{ + + private static final ResourceLocation circuitFabricatorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/circuit_fabricator.png"); + private TileEntityCircuitFabricator tileEntity; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 56, 9, null, 0, 0, this); + private GuiElementInfoRegion processInfoRegion = new GuiElementInfoRegion(0, 0, 53, 12, null, 0, 0, this); + + public GuiCircuitFabricator(InventoryPlayer par1InventoryPlayer, TileEntityCircuitFabricator tileEntity) + { + super(new ContainerCircuitFabricator(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 192; + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 17; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 88; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 5, (this.height - this.ySize) / 2 + 68, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.processInfoRegion.tooltipStrings = new ArrayList(); + this.processInfoRegion.xPosition = (this.width - this.xSize) / 2 + 87; + this.processInfoRegion.yPosition = (this.height - this.ySize) / 2 + 19; + this.processInfoRegion.parentWidth = this.width; + this.processInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.processInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 10, 6, 4210752); + String displayText; + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + String str = GCCoreUtil.translate("gui.message.status.name") + ":"; + this.fontRenderer.drawString(str, 115 - this.fontRenderer.getStringWidth(str) / 2, 80, 4210752); + displayText = this.tileEntity.getGUIstatus(displayText, null, true); + this.fontRenderer.drawString(displayText, 115 - this.fontRenderer.getStringWidth(displayText) / 2, 90, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 93, 4210752); +// str = "" + this.tileEntity.storage.getMaxExtract(); +// this.fontRenderer.drawString(str, 5, 42, 4210752); +// // str = ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), ElectricUnit.VOLTAGE); +// this.fontRenderer.drawString(str, 5, 52, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiCircuitFabricator.circuitFabricatorTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + this.drawTexturedModalRect(containerWidth + 5, containerHeight + 68, 176, 47, 18, 18); + this.drawTexturedModalRect(containerWidth + 5, containerHeight + 89, 194, 47, 9, 8); + this.drawTexturedModalRect(containerWidth + 17, containerHeight + 88, 176, 65, 56, 9); + int scale; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (this.tileEntity.processTicks * 100) / this.tileEntity.getProcessTimeRequired(); + } else + { + scale = 0; + } + + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.electric_compressor.desc.0") + ": " + scale + "%"); + this.processInfoRegion.tooltipStrings = processDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (this.tileEntity.processTicks * 51) / this.tileEntity.getProcessTimeRequired(); + this.drawTexturedModalRect(containerWidth + 88, containerHeight + 20, 176, 17 + this.tileEntity.processTicks % 9 / 3 * 10, scale, 10); + } + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + scale = this.tileEntity.getScaledElecticalLevel(54); + this.drawTexturedModalRect(containerWidth + 116 - 98, containerHeight + 89, 176, 0, scale, 7); + this.drawTexturedModalRect(containerWidth + 4, containerHeight + 88, 176, 7, 11, 10); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCoalGenerator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCoalGenerator.java new file mode 100644 index 00000000..f9d5c2f9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCoalGenerator.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCoalGenerator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiCoalGenerator extends GuiContainerGC +{ + + private static final ResourceLocation coalGeneratorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/coal_generator.png"); + + private TileEntityCoalGenerator tileEntity; + + public GuiCoalGenerator(InventoryPlayer playerInventory, TileEntityCoalGenerator tileEntity) + { + super(new ContainerCoalGenerator(playerInventory, tileEntity)); + this.tileEntity = tileEntity; + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 55, 6, 4210752); + String displayText = GCCoreUtil.translate("gui.status.generating.name"); + + if (this.tileEntity.heatGJperTick <= 0 || this.tileEntity.heatGJperTick < TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK) + { + displayText = GCCoreUtil.translate("gui.status.not_generating.name"); + } + + this.fontRenderer.drawString(displayText, 122 - this.fontRenderer.getStringWidth(displayText) / 2, 33, 4210752); + + if (this.tileEntity.heatGJperTick < TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK) + { + displayText = GCCoreUtil.translate("gui.status.hull_heat.name") + ": " + (int) (this.tileEntity.heatGJperTick / TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK * 100) + "%"; + } else + { + displayText = EnergyDisplayHelper.getEnergyDisplayS(this.tileEntity.heatGJperTick - TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK) + "/t"; + } + + this.fontRenderer.drawString(displayText, 122 - this.fontRenderer.getStringWidth(displayText) / 2, 45, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + this.mc.renderEngine.bindTexture(GuiCoalGenerator.coalGeneratorTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiContainerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiContainerGC.java new file mode 100644 index 00000000..c142040b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiContainerGC.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public abstract class GuiContainerGC extends GuiContainer +{ + + public List infoRegions = new ArrayList(); + + public GuiContainerGC(Container container) + { + super(container); + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.drawDefaultBackground(); + super.drawScreen(par1, par2, par3); + this.renderHoveredToolTip(par1, par2); + + for (int k = 0; k < this.infoRegions.size(); ++k) + { + GuiElementInfoRegion guibutton = this.infoRegions.get(k); + guibutton.drawRegion(par1, par2); + } + } + + @Override + public void setWorldAndResolution(Minecraft par1Minecraft, int par2, int par3) + { + this.infoRegions.clear(); + super.setWorldAndResolution(par1Minecraft, par2, par3); + } + + public int getTooltipOffset(int par1, int par2) + { + for (int i1 = 0; i1 < this.inventorySlots.inventorySlots.size(); ++i1) + { + Slot slot = this.inventorySlots.inventorySlots.get(i1); + + if (slot.isEnabled() && this.isPointInRegion(slot.xPos, slot.yPos, 16, 16, par1, par2)) + { + ItemStack itemStack = slot.getStack(); + + if (!itemStack.isEmpty()) + { + List list = itemStack.getTooltip(this.mc.player, this.mc.gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL); + int size = list.size(); + + if (CompatibilityManager.isWailaLoaded()) + { + size++; + } + + return size * 10 + 10; + } + } + } + + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCrafting.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCrafting.java new file mode 100644 index 00000000..2674e7e1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCrafting.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCrafting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiCrafting extends GuiContainerGC +{ + + private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/crafting_table.png"); + TileEntityCrafting tile; + List memorySlotDesc = new ArrayList(); + + public GuiCrafting(InventoryPlayer playerInv, TileEntityCrafting tile) + { + super(new ContainerCrafting(playerInv, tile)); + this.tile = tile; + } + + @Override + public void initGui() + { + super.initGui(); + ItemStack mem = this.tile.getMemoryHeld(); + boolean memoryStored = !mem.isEmpty(); + memorySlotDesc.add(GCCoreUtil.translate(memoryStored ? "gui.crafting_memory.desc.0" : "gui.crafting_memory.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 123, (this.height - this.ySize) / 2 + 59, 18, 18, memorySlotDesc, this.width, this.height, this)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(I18n.format("container.crafting", new Object[0]), 28, 6, 4210752); + this.fontRenderer.drawString(I18n.format("container.inventory", new Object[0]), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(craftingTableGuiTextures); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + + ItemStack mem = this.tile.getMemoryHeld(); + boolean memoryStored = !mem.isEmpty(); + memorySlotDesc.clear(); + memorySlotDesc.add(GCCoreUtil.translate(memoryStored ? "gui.crafting_memory.desc.0" : "gui.crafting_memory.desc.1")); + if (mem != null && !mem.isEmpty()) + this.itemRender.renderItemAndEffectIntoGUI(mem, i + 124, j + 59); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiDeconstructor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiDeconstructor.java new file mode 100644 index 00000000..832443cf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiDeconstructor.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerDeconstructor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiDeconstructor extends GuiContainerGC +{ + + private static final ResourceLocation guiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/deconstructor.png"); + private TileEntityDeconstructor tileEntity; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 56, 9, null, 0, 0, this); + private GuiElementInfoRegion processInfoRegion = new GuiElementInfoRegion(0, 0, 52, 25, null, 0, 0, this); + + public GuiDeconstructor(InventoryPlayer par1InventoryPlayer, TileEntityDeconstructor tileEntity) + { + super(new ContainerDeconstructor(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 199; + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 17; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 95; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 54, (this.height - this.ySize) / 2 + 74, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.processInfoRegion.tooltipStrings = new ArrayList(); + this.processInfoRegion.xPosition = (this.width - this.xSize) / 2 + 53;// 77 + this.processInfoRegion.yPosition = (this.height - this.ySize) / 2 + 28;// 30 + this.processInfoRegion.parentWidth = this.width; + this.processInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.processInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 10, 6, 4210752); + String displayText; + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + String str = GCCoreUtil.translate("gui.message.status.name") + ": " + displayText; + this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 75, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 93, 4210752); +// str = "" + this.tileEntity.storage.getMaxExtract(); +// this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 85, 4210752); +// // str = ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), ElectricUnit.VOLTAGE); +// this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 95, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiDeconstructor.guiTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + int scale; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 100); + } else + { + scale = 0; + } + + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.electric_compressor.desc.0") + ": " + scale + "%"); + this.processInfoRegion.tooltipStrings = processDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 54); + this.drawTexturedModalRect(containerWidth + 53, containerHeight + 36, 176, 13, scale, 17); + } + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + scale = this.tileEntity.getScaledElecticalLevel(54); + this.drawTexturedModalRect(containerWidth + 116 - 98, containerHeight + 96, 176, 30, scale, 7); + this.drawTexturedModalRect(containerWidth + 4, containerHeight + 95, 176, 37, 11, 10); + } + + if (this.tileEntity.processTicks > this.tileEntity.processTimeRequired / 2) + { + this.drawTexturedModalRect(containerWidth + 77, containerHeight + 28, 176, 0, 15, 13); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricFurnace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricFurnace.java new file mode 100644 index 00000000..7fa07a84 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricFurnace.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerElectricFurnace; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiElectricFurnace extends GuiContainerGC +{ + + private static final ResourceLocation electricFurnaceTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/electric_furnace.png"); + private static final ResourceLocation arcFurnaceTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/electric_arc_furnace.png"); + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 56, 9, null, 0, 0, this); + + private TileEntityElectricFurnace tileEntity; + private ResourceLocation texture; + + public GuiElectricFurnace(InventoryPlayer par1InventoryPlayer, TileEntityElectricFurnace tileEntity) + { + super(new ContainerElectricFurnace(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + texture = tileEntity.tierGC == 2 ? arcFurnaceTexture : electricFurnaceTexture; + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 39; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 52; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 48, 18, 18, batterySlotDesc, this.width, this.height, this)); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 45, 6, 4210752); + String displayText = ""; + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": ", 97, 52, 4210752); + this.fontRenderer.drawString(this.tileEntity.getGUIstatus(null, displayText, true), 107, 62, 4210752); +// this.fontRenderer.drawString("" + this.tileEntity.storage.getMaxExtract(), 97, 56, 4210752); +// this.fontRenderer.drawString("Voltage: " + (int) (this.tileEntity.getVoltage() * 1000.0F), 97, 68, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(this.texture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + int scale; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 23); + this.drawTexturedModalRect(containerWidth + 78, containerHeight + 24, 176, 0, 23 - scale, 15); + } + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + scale = this.tileEntity.getScaledElecticalLevel(54); + this.drawTexturedModalRect(containerWidth + 40, containerHeight + 53, 176, 15, scale, 7); + this.drawTexturedModalRect(containerWidth + 26, containerHeight + 52, 176, 22, 11, 10); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricIngotCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricIngotCompressor.java new file mode 100644 index 00000000..9eeb8902 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricIngotCompressor.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiElectricIngotCompressor extends GuiContainerGC +{ + + private static final ResourceLocation electricFurnaceTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/electric_ingot_compressor.png"); + private TileEntityElectricIngotCompressor tileEntity; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 56, 9, null, 0, 0, this); + private GuiElementInfoRegion processInfoRegion = new GuiElementInfoRegion(0, 0, 52, 25, null, 0, 0, this); + + public GuiElectricIngotCompressor(InventoryPlayer par1InventoryPlayer, TileEntityElectricIngotCompressor tileEntity) + { + super(new ContainerElectricIngotCompressor(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 199; + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 17; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 95; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 54, (this.height - this.ySize) / 2 + 74, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.processInfoRegion.tooltipStrings = new ArrayList(); + this.processInfoRegion.xPosition = (this.width - this.xSize) / 2 + 77; + this.processInfoRegion.yPosition = (this.height - this.ySize) / 2 + 30; + this.processInfoRegion.parentWidth = this.width; + this.processInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.processInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 10, 6, 4210752); + String displayText; + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + String str = GCCoreUtil.translate("gui.message.status.name") + ": " + this.tileEntity.getGUIstatus(displayText, null, true); + this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 75, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 93, 4210752); +// str = "" + this.tileEntity.storage.getMaxExtract(); +// this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 85, 4210752); +// // str = ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), ElectricUnit.VOLTAGE); +// this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 95, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiElectricIngotCompressor.electricFurnaceTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + int scale; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 100); + } else + { + scale = 0; + } + + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.electric_compressor.desc.0") + ": " + scale + "%"); + this.processInfoRegion.tooltipStrings = processDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 54); + this.drawTexturedModalRect(containerWidth + 77, containerHeight + 38, 176, 13, scale, 17); + } + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + scale = this.tileEntity.getScaledElecticalLevel(54); + this.drawTexturedModalRect(containerWidth + 116 - 98, containerHeight + 96, 176, 30, scale, 7); + this.drawTexturedModalRect(containerWidth + 4, containerHeight + 95, 176, 37, 11, 10); + } + + if (this.tileEntity.processTicks > this.tileEntity.processTimeRequired / 2) + { + this.drawTexturedModalRect(containerWidth + 101, containerHeight + 30, 176, 0, 15, 13); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiEnergyStorageModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiEnergyStorageModule.java new file mode 100644 index 00000000..8d9ea170 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiEnergyStorageModule.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiEnergyStorageModule extends GuiContainerGC +{ + + private static final ResourceLocation batteryBoxTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/energy_storage_module.png"); + + private TileEntityEnergyStorageModule tileEntity; + + public GuiEnergyStorageModule(InventoryPlayer par1InventoryPlayer, TileEntityEnergyStorageModule batteryBox) + { + super(new ContainerEnergyStorageModule(par1InventoryPlayer, batteryBox)); + this.tileEntity = batteryBox; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), this.xSize / 2 - this.fontRenderer.getStringWidth(this.tileEntity.getName()) / 2, 6, 4210752); + float energy = this.tileEntity.getEnergyStoredGC(); + if (energy + 49 > this.tileEntity.getMaxEnergyStoredGC()) + { + energy = this.tileEntity.getMaxEnergyStoredGC(); + } + String displayStr = EnergyDisplayHelper.getEnergyDisplayS(energy); + this.fontRenderer.drawString(displayStr, 122 - this.fontRenderer.getStringWidth(displayStr) / 2, 25, 4210752); + displayStr = GCCoreUtil.translate("gui.message.of.name") + " " + EnergyDisplayHelper.getEnergyDisplayS(this.tileEntity.getMaxEnergyStoredGC()); + this.fontRenderer.drawString(displayStr, 122 - this.fontRenderer.getStringWidth(displayStr) / 2, 34, 4210752); + displayStr = GCCoreUtil.translate("gui.max_output.desc") + ": " + EnergyDisplayHelper.getEnergyDisplayS(this.tileEntity.storage.getMaxExtract()) + "/t"; + this.fontRenderer.drawString(displayStr, 114 - this.fontRenderer.getStringWidth(displayStr) / 2, 64, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiEnergyStorageModule.batteryBoxTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + // Background energy bar + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + // Foreground energy bar + int scale = (int) ((this.tileEntity.getEnergyStoredGC() + 49) / this.tileEntity.getMaxEnergyStoredGC() * 72); + this.drawTexturedModalRect(containerWidth + 87, containerHeight + 52, 176, 0, scale, 3); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiExtendedInventory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiExtendedInventory.java new file mode 100644 index 00000000..fca45766 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiExtendedInventory.java @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.api.client.tabs.AbstractTab; +import micdoodle8.mods.galacticraft.api.client.tabs.TabRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.screen.InventoryTabGalacticraft; +import micdoodle8.mods.galacticraft.core.inventory.ContainerExtendedInventory; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.InventoryEffectRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; + +public class GuiExtendedInventory extends InventoryEffectRenderer +{ + + private static final ResourceLocation inventoryTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/inventory.png"); + private int potionOffsetLast; + private static float rotation = 0.0F; + private boolean initWithPotion; + + public GuiExtendedInventory(EntityPlayer player, InventoryExtended inventory) + { + super(new ContainerExtendedInventory(player, inventory)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + GuiExtendedInventory.drawPlayerOnGui(this.mc, 33, 60, 29); + } + + @Override + public void initGui() + { + super.initGui(); + + this.guiLeft = (this.width - this.xSize) / 2; + this.guiLeft += this.getPotionOffset(); + this.potionOffsetLast = this.getPotionOffsetNEI(); + + int cornerX = this.guiLeft; + int cornerY = this.guiTop; + + TabRegistry.updateTabValues(cornerX, cornerY, InventoryTabGalacticraft.class); + TabRegistry.addTabsToList(this.buttonList); + + this.buttonList.add(new GuiButton(0, this.guiLeft + 10, this.guiTop + 71, 7, 7, "")); + this.buttonList.add(new GuiButton(1, this.guiLeft + 51, this.guiTop + 71, 7, 7, "")); + } + + @Override + protected void actionPerformed(GuiButton button) + { + switch (button.id) + { + case 0: + GuiExtendedInventory.rotation += 10.0F; + break; + case 1: + GuiExtendedInventory.rotation -= 10.0F; + break; + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiExtendedInventory.inventoryTexture); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + int newPotionOffset = this.getPotionOffsetNEI(); + + if (newPotionOffset < this.potionOffsetLast) + { + int diff = newPotionOffset - this.potionOffsetLast; + this.potionOffsetLast = newPotionOffset; + this.guiLeft += diff; + + for (int k = 0; k < this.buttonList.size(); ++k) + { + GuiButton button = this.buttonList.get(k); + + if (!(button instanceof AbstractTab)) + { + button.x += diff; + } + } + } + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + public static void drawPlayerOnGui(Minecraft mc, int x, int y, int scale) + { + RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager(); + GlStateManager.enableColorMaterial(); + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, 50.0F); + GlStateManager.scale(-scale, scale, scale); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + float f2 = mc.player.renderYawOffset; + float f3 = mc.player.rotationYaw; + float f4 = mc.player.rotationPitch; + float f5 = mc.player.rotationYawHead; + GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); + mc.player.renderYawOffset = GuiExtendedInventory.rotation; + mc.player.rotationYaw = (float) Math.atan(32 / 40.0F) * 40.0F; + mc.player.rotationYaw = GuiExtendedInventory.rotation; + mc.player.rotationYawHead = mc.player.rotationYaw; + mc.player.rotationPitch = (float) Math.sin(Minecraft.getSystemTime() / 500.0F) * 3.0F; + GlStateManager.translate(0.0F, (float) mc.player.getYOffset(), 0.0F); + rendermanager.setPlayerViewY(180.0F); + rendermanager.setRenderShadow(false); + rendermanager.renderEntity(mc.player, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F, false); + rendermanager.setRenderShadow(true); + mc.player.renderYawOffset = f2; + mc.player.rotationYaw = f3; + mc.player.rotationPitch = f4; + mc.player.rotationYawHead = f5; + GlStateManager.popMatrix(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + // Instanced method of this to have the instance field initWithPotion + public int getPotionOffset() + { + /* + * Disabled in 1.12.2 because a vanilla bug means potion offsets are + * currently not a thing The vanilla bug is that GuiInventory.initGui() + * resets GuiLeft to the recipe book version of GuiLeft, and in + * GuiRecipeBook.updateScreenPosition() it takes no account of potion + * offset even if the recipe book is inactive. // If at least one potion + * is active... if (this.hasActivePotionEffects) { this.initWithPotion = + * true; return 60 + TabRegistry.getPotionOffsetJEI() + + * getPotionOffsetNEI(); } + */ + // No potions, no offset needed + this.initWithPotion = false; + return 0; + } + + // Instanced method of this to use the instance field initWithPotion + public int getPotionOffsetNEI() + { + if (this.initWithPotion && TabRegistry.clazzNEIConfig != null) + { + try + { + // Check whether NEI is hidden and enabled + Object hidden = TabRegistry.clazzNEIConfig.getMethod("isHidden").invoke(null); + Object enabled = TabRegistry.clazzNEIConfig.getMethod("isEnabled").invoke(null); + + if (hidden instanceof Boolean && enabled instanceof Boolean) + { + if ((Boolean) hidden || !((Boolean) enabled)) + { + // If NEI is disabled or hidden, offset the tabs by the + // standard 60 + return 0; + } + // Active NEI undoes the standard potion offset + return -60; + } + } catch (Exception e) + { + } + } + // No NEI, no change + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiFuelLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiFuelLoader.java new file mode 100644 index 00000000..46806a5d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiFuelLoader.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerFuelLoader; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiFuelLoader extends GuiContainerGC +{ + + private static final ResourceLocation fuelLoaderTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/fuel_loader.png"); + + private final TileEntityFuelLoader fuelLoader; + + private GuiButton buttonLoadFuel; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 65, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiFuelLoader(InventoryPlayer par1InventoryPlayer, TileEntityFuelLoader par2TileEntityAirDistributor) + { + super(new ContainerFuelLoader(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.fuelLoader = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.fuelLoader.getWorld()), new Object[] + {this.fuelLoader.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.2")); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.3")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 33, 16, 38, fuelTankDesc, this.width, this.height, this)); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 50, (this.height - this.ySize) / 2 + 54, 18, 18, batterySlotDesc, this.width, this.height, this)); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.fuelLoader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.fuelLoader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 65; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + this.buttonList.add(this.buttonLoadFuel = new GuiButton(0, this.width / 2 + 2, this.height / 2 - 49, 76, 20, GCCoreUtil.translate("gui.button.loadfuel.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.fuelLoader.getName(), 60, 10, 4210752); + this.buttonLoadFuel.enabled = this.fuelLoader.disableCooldown == 0 && !(this.fuelLoader.fuelTank.getFluid() == null || this.fuelLoader.fuelTank.getFluid().amount == 0); + this.buttonLoadFuel.displayString = !this.fuelLoader.getDisabled(0) ? GCCoreUtil.translate("gui.button.stoploading.name") : GCCoreUtil.translate("gui.button.loadfuel.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(), 28, 45 + 23 - 46, 4210752); + // this.fontRenderer.drawString("" + + // this.fuelLoader.storage.getMaxExtract(), 28, 56 + 23 - 46, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.fuelLoader.getVoltage(), + // ElectricUnit.VOLTAGE), 28, 68 + 23 - 46, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 11, 4210752); + } + + private String getStatus() + { + if (this.fuelLoader.fuelTank.getFluid() == null || this.fuelLoader.fuelTank.getFluid().amount == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.nofuel.name"); + } + + return this.fuelLoader.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiFuelLoader.fuelLoaderTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + final int fuelLevel = this.fuelLoader.getScaledFuelLevel(38); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 17 + 54 - fuelLevel, 176, 38 - fuelLevel, 16, fuelLevel); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.fuelLoader.getEnergyStoredGC(), this.fuelLoader.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.fuelLoader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.fuelLoader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.fuelLoader.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 65, 192, 7, 11, 10); + } + + this.drawTexturedModalRect(var5 + 113, var6 + 66, 192, 0, Math.min(this.fuelLoader.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiIngotCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiIngotCompressor.java new file mode 100644 index 00000000..7945e174 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiIngotCompressor.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiIngotCompressor extends GuiContainerGC +{ + + private static final ResourceLocation electricFurnaceTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/ingot_compressor.png"); + private GuiElementInfoRegion processInfoRegion = new GuiElementInfoRegion(0, 0, 52, 25, null, 0, 0, this); + + private TileEntityIngotCompressor tileEntity; + + public GuiIngotCompressor(InventoryPlayer par1InventoryPlayer, TileEntityIngotCompressor tileEntity) + { + super(new ContainerIngotCompressor(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 192; + } + + @Override + public void initGui() + { + super.initGui(); + this.processInfoRegion.tooltipStrings = new ArrayList(); + this.processInfoRegion.xPosition = (this.width - this.xSize) / 2 + 77; + this.processInfoRegion.yPosition = (this.height - this.ySize) / 2 + 30; + this.processInfoRegion.parentWidth = this.width; + this.processInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.processInfoRegion); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 10, 6, 4210752); + String displayText = GCCoreUtil.translate("gui.message.fuel.name") + ":"; + this.fontRenderer.drawString(displayText, 50 - this.fontRenderer.getStringWidth(displayText), 79, 4210752); + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.compressing.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + String str = GCCoreUtil.translate("gui.message.status.name") + ":"; + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ":", 120 - this.fontRenderer.getStringWidth(str) / 2, 70, 4210752); + str = displayText; + this.fontRenderer.drawString(displayText, 120 - this.fontRenderer.getStringWidth(str) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiIngotCompressor.electricFurnaceTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int process; + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + + if (this.tileEntity.processTicks > 0) + { + process = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.PROCESS_TIME_REQUIRED * 100); + } else + { + process = 0; + } + + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.electric_compressor.desc.0") + ": " + process + "%"); + this.processInfoRegion.tooltipStrings = processDesc; + + if (this.tileEntity.processTicks > 0) + { + int scale = (int) ((double) this.tileEntity.processTicks / (double) TileEntityIngotCompressor.PROCESS_TIME_REQUIRED * 54); + this.drawTexturedModalRect(containerWidth + 77, containerHeight + 36, 176, 13, scale, 17); + } + + if (this.tileEntity.furnaceBurnTime > 0) + { + int scale = (int) ((double) this.tileEntity.furnaceBurnTime / (double) this.tileEntity.currentItemBurnTime * 14); + this.drawTexturedModalRect(containerWidth + 81, containerHeight + 27 + 14 - scale, 176, 30 + 14 - scale, 14, scale); + } + + if (this.tileEntity.processTicks > TileEntityIngotCompressor.PROCESS_TIME_REQUIRED / 2) + { + this.drawTexturedModalRect(containerWidth + 101, containerHeight + 28, 176, 0, 15, 13); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCollector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCollector.java new file mode 100644 index 00000000..b95aa14e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCollector.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenCollector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenCollector extends GuiContainerGC +{ + + private static final ResourceLocation collectorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/oxygen.png"); + + private final TileEntityOxygenCollector collector; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiOxygenCollector(InventoryPlayer par1InventoryPlayer, TileEntityOxygenCollector par2TileEntityAirDistributor) + { + super(new ContainerOxygenCollector(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.collector = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + public void initGui() + { + super.initGui(); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 31, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 37; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.collector.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.out.name") + ":", 99, 25, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 37, 4210752, this.fontRenderer); + GCCoreUtil.drawStringCentered(GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(), this.xSize / 2, 50, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.status.collecting.name") + ": " + (int) (0.5F + Math.min(this.collector.lastOxygenCollected * 20F, TileEntityOxygenCollector.OUTPUT_PER_TICK * 20F)) + + GCCoreUtil.translate("gui.per_second"); + GCCoreUtil.drawStringCentered(status, this.xSize / 2, 60, 4210752, this.fontRenderer); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90 + 2, 4210752); + } + + private String getStatus() + { + String returnValue = this.collector.getGUIstatus(); + + if (returnValue.equals(EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.active.name")) && this.collector.lastOxygenCollected <= 0.0F) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingleaves.name"); + } + + return returnValue; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenCollector.collectorTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + if (this.collector != null) + { + int scale = this.collector.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 25, 197, 7, Math.min(scale, 54), 7); + scale = this.collector.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 38, 197, 0, Math.min(scale, 54), 7); + + if (this.collector.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 37, 176, 0, 11, 10); + } + + if (this.collector.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 24, 187, 0, 10, 10); + } + + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.collector.getOxygenStored()) + " / " + (int) Math.floor(this.collector.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.collector.getEnergyStoredGC(), this.collector.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.collector.getEnergyStoredGC()) + " / " + (int) Math.floor(this.collector.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCompressor.java new file mode 100644 index 00000000..7959eaac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCompressor.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenCompressor; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenCompressor extends GuiContainerGC +{ + + private static final ResourceLocation compressorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/compressor.png"); + + private final TileEntityOxygenCompressor compressor; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiOxygenCompressor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenCompressor par2TileEntityAirDistributor) + { + super(new ContainerOxygenCompressor(par1InventoryPlayer, par2TileEntityAirDistributor, FMLClientHandler.instance().getClient().player)); + this.compressor = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + public void initGui() + { + super.initGui(); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 46, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + List oxygenSlotDesc = new ArrayList(); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.0")); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 16, (this.height - this.ySize) / 2 + 26, 18, 18, oxygenSlotDesc, this.width, this.height, this)); + List compressorSlotDesc = new ArrayList(); + compressorSlotDesc.add(GCCoreUtil.translate("gui.oxygen_compressor.slot.desc.0")); + compressorSlotDesc.add(GCCoreUtil.translate("gui.oxygen_compressor.slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 132, (this.height - this.ySize) / 2 + 70, 18, 18, compressorSlotDesc, this.width, this.height, this)); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.compressor.getOxygenStored()) + " / " + (int) Math.floor(this.compressor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.compressor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.compressor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 37; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.compressor.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 26, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 38, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 50, 4210752); + status = GCCoreUtil.translate("gui.oxygen_use.desc") + ": " + TileEntityOxygenCompressor.TANK_TRANSFER_SPEED * 20 + GCCoreUtil.translate("gui.per_second"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 60, 4210752); + // status = ElectricityDisplay.getDisplay(this.compressor.ueWattsPerTick + // * 20, ElectricUnit.WATT); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = ElectricityDisplay.getDisplay(this.compressor.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 104 + 17, 4210752); + } + + private String getStatus() + { + if (this.compressor.getStackInSlot(0) == null || !(this.compressor.getStackInSlot(0).getItem() instanceof ItemOxygenTank)) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingtank.name"); + } + + if (this.compressor.getStackInSlot(0) != null && this.compressor.getStackInSlot(0).getItemDamage() == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.fulltank.name"); + } + + if (this.compressor.getOxygenStored() < 1.0D) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingoxygen.name"); + } + + return this.compressor.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenCompressor.compressorTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + if (this.compressor != null) + { + int scale = this.compressor.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 25, 197, 7, Math.min(scale, 54), 7); + scale = this.compressor.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 38, 197, 0, Math.min(scale, 54), 7); + + if (this.compressor.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 37, 176, 0, 11, 10); + } + + if (this.compressor.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 24, 187, 0, 10, 10); + } + + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.compressor.getOxygenStored()) + " / " + (int) Math.floor(this.compressor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.compressor.getEnergyStoredGC(), this.compressor.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.compressor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.compressor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDecompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDecompressor.java new file mode 100644 index 00000000..9b591e6c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDecompressor.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenDecompressor extends GuiContainerGC +{ + + private static final ResourceLocation compressorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/decompressor.png"); + + private final TileEntityOxygenDecompressor decompressor; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiOxygenDecompressor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenDecompressor par2TileEntityAirDistributor) + { + super(new ContainerOxygenDecompressor(par1InventoryPlayer, par2TileEntityAirDistributor, FMLClientHandler.instance().getClient().player)); + this.decompressor = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + public void initGui() + { + super.initGui(); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 31, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + List compressorSlotDesc = new ArrayList(); + compressorSlotDesc.add(GCCoreUtil.translate("gui.oxygen_decompressor.slot.desc.0")); + compressorSlotDesc.add(GCCoreUtil.translate("gui.oxygen_decompressor.slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 132, (this.height - this.ySize) / 2 + 70, 18, 18, compressorSlotDesc, this.width, this.height, this)); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.decompressor.getOxygenStored()) + " / " + (int) Math.floor(this.decompressor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.decompressor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.decompressor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 37; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.decompressor.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 26, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 38, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 50, 4210752); + status = GCCoreUtil.translate("gui.max_output.desc") + ": " + TileEntityOxygenDecompressor.OUTPUT_PER_TICK * 20 + GCCoreUtil.translate("gui.per_second"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 60, 4210752); + // status = + // ElectricityDisplay.getDisplay(this.decompressor.ueWattsPerTick * 20, + // ElectricUnit.WATT); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = + // ElectricityDisplay.getDisplay(this.decompressor.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 104 + 17, 4210752); + } + + private String getStatus() + { + if (this.decompressor.getStackInSlot(0) == null || !(this.decompressor.getStackInSlot(0).getItem() instanceof ItemOxygenTank)) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingtank.name"); + } + + if (this.decompressor.getStackInSlot(0) != null && this.decompressor.getStackInSlot(0).getItemDamage() == this.decompressor.getStackInSlot(0).getMaxDamage()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.tank_empty.name"); + } + + return this.decompressor.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenDecompressor.compressorTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + if (this.decompressor != null) + { + int scale = this.decompressor.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 25, 197, 7, Math.min(scale, 54), 7); + scale = this.decompressor.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 38, 197, 0, Math.min(scale, 54), 7); + + if (this.decompressor.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 37, 176, 0, 11, 10); + } + + if (this.decompressor.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 24, 187, 0, 10, 10); + } + + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.decompressor.getOxygenStored()) + " / " + (int) Math.floor(this.decompressor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.decompressor.getEnergyStoredGC(), this.decompressor.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.decompressor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.decompressor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDistributor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDistributor.java new file mode 100644 index 00000000..fb19c6ae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDistributor.java @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenDistributor; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenDistributor extends GuiContainerGC implements ICheckBoxCallback +{ + + private static final ResourceLocation distributorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/oxygen_distributor.png"); + + private final TileEntityOxygenDistributor distributor; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + private GuiElementCheckbox checkboxRenderBubble; + + public GuiOxygenDistributor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenDistributor par2TileEntityAirDistributor) + { + super(new ContainerOxygenDistributor(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.distributor = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + public void initGui() + { + super.initGui(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 46, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + List oxygenSlotDesc = new ArrayList(); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.0")); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 16, (this.height - this.ySize) / 2 + 26, 18, 18, oxygenSlotDesc, this.width, this.height, this)); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.distributor.getOxygenStored()) + " / " + (int) Math.floor(this.distributor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.distributor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.distributor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 37; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + this.checkboxRenderBubble = new GuiElementCheckbox(0, this, var5 + 85, var6 + 87, GCCoreUtil.translate("gui.message.bubble_visible.name")); + this.buttonList.add(this.checkboxRenderBubble); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.distributor.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 26, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 38, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 50, 4210752); + status = GCCoreUtil.translate("gui.oxygen_use.desc") + ": " + this.distributor.oxygenPerTick * 20 + GCCoreUtil.translate("gui.per_second"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 60, 4210752); + // status = + // ElectricityDisplay.getDisplay(this.distributor.ueWattsPerTick * 20, + // ElectricUnit.WATT); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = ElectricityDisplay.getDisplay(this.distributor.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90 + 3, 4210752); + } + + private String getStatus() + { + if (this.distributor.getOxygenStored() < this.distributor.oxygenPerTick) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingoxygen.name"); + } + + return this.distributor.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenDistributor.distributorTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + if (this.distributor != null) + { + int scale = this.distributor.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 25, 197, 7, Math.min(scale, 54), 7); + scale = this.distributor.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 38, 197, 0, Math.min(scale, 54), 7); + + if (this.distributor.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 37, 176, 0, 11, 10); + } + + if (this.distributor.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 24, 187, 0, 10, 10); + } + + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.distributor.getOxygenStored()) + " / " + (int) Math.floor(this.distributor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.distributor.getEnergyStoredGC(), this.distributor.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.distributor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.distributor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + this.checkboxRenderBubble.isSelected = this.distributor.shouldRenderBubble; + } + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + this.distributor.setBubbleVisible(newSelected); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {6, this.distributor.getPos(), newSelected ? 1 : 0})); + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return this.distributor.shouldRenderBubble; + } + + @Override + public void onIntruderInteraction() + { + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenSealer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenSealer.java new file mode 100644 index 00000000..685edf15 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenSealer.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenSealer; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +//import galacticraft.core.util.RedstoneUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenSealer extends GuiContainerGC +{ + + private static final ResourceLocation sealerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/oxygen_sealer.png"); + + private final TileEntityOxygenSealer sealer; + private GuiButton buttonDisable; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiOxygenSealer(InventoryPlayer par1InventoryPlayer, TileEntityOxygenSealer par2TileEntityAirDistributor) + { + super(new ContainerOxygenSealer(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.sealer = par2TileEntityAirDistributor; + this.ySize = 200; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.sealer.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 32, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + List oxygenSlotDesc = new ArrayList(); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.0")); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 9, (this.height - this.ySize) / 2 + 26, 18, 18, oxygenSlotDesc, this.width, this.height, this)); + List ambientThermalDesc = new ArrayList(); + ambientThermalDesc.add(GCCoreUtil.translate("gui.thermal_slot.desc.0")); + ambientThermalDesc.add(GCCoreUtil.translate("gui.thermal_slot.desc.1")); + ambientThermalDesc.add(GCCoreUtil.translate("gui.thermal_slot.desc.2")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 55, (this.height - this.ySize) / 2 + 26, 18, 18, ambientThermalDesc, this.width, this.height, this)); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.sealer.getOxygenStored()) + " / " + (int) Math.floor(this.sealer.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 23; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ": " + + ((int) Math.floor(this.sealer.getEnergyStoredGC()) + " / " + (int) Math.floor(this.sealer.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 36; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 38, this.height / 2 - 30 + 21, 76, 20, GCCoreUtil.translate("gui.button.enableseal.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.sealer.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 26, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 38, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.buttonDisable.enabled = this.sealer.disableCooldown == 0; + this.buttonDisable.displayString = this.sealer.disabled ? GCCoreUtil.translate("gui.button.enableseal.name") : GCCoreUtil.translate("gui.button.disableseal.name"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 50, 4210752); + int adjustedOxygenPerTick = (int) (this.sealer.oxygenPerTick * 20); + if (this.sealer.disabled || this.sealer.getEnergyStoredGC() < this.sealer.storage.getMaxExtract()) + adjustedOxygenPerTick = 0; + status = GCCoreUtil.translate("gui.oxygen_use.desc") + ": " + adjustedOxygenPerTick + GCCoreUtil.translate("gui.per_second"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 60, 4210752); + status = GCCoreUtil.translate("gui.message.thermal_status.name") + ": " + this.getThermalStatus(); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = ElectricityDisplay.getDisplay(this.sealer.ueWattsPerTick * + // 20, ElectricUnit.WATT); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = ElectricityDisplay.getDisplay(this.sealer.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90 + 3, 4210752); + } + + private String getThermalStatus() + { + IBlockState stateAbove = this.sealer.getWorld().getBlockState(this.sealer.getPos().up()); + Block blockAbove = stateAbove.getBlock(); + int metadata = blockAbove.getMetaFromState(stateAbove); + + if (blockAbove == GCBlocks.breatheableAir || blockAbove == GCBlocks.brightBreatheableAir) + { + if (metadata == 1) + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.on.name"); + } + } + + if (this.sealer.thermalControlEnabled()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.not_available.name"); + } + + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.off.name"); + } + + private String getStatus() + { + BlockPos blockPosAbove = this.sealer.getPos().up(); + Block blockAbove = this.sealer.getWorld().getBlockState(blockPosAbove).getBlock(); + IBlockState state = this.sealer.getWorld().getBlockState(blockPosAbove); + + if (!(blockAbove.isAir(state, this.sealer.getWorld(), blockPosAbove)) && !OxygenPressureProtocol.canBlockPassAir(this.sealer.getWorld(), state, blockPosAbove, EnumFacing.UP)) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.sealerblocked.name"); + } + +// if (RedstoneUtil.isBlockReceivingRedstone(this.sealer.getWorldObj(), this.sealer.getPos())) +// { +// return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.off.name"); +// } + + if (this.sealer.disabled) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (this.sealer.getEnergyStoredGC() == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + if (this.sealer.getEnergyStoredGC() < this.sealer.storage.getMaxExtract()) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + if (this.sealer.getOxygenStored() < 1) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingoxygen.name"); + } + + if (this.sealer.calculatingSealed) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.checking_seal.name") + "..."; + } + + int threadCooldown = this.sealer.getScaledThreadCooldown(25); + + if (threadCooldown < 15) + { + if (threadCooldown < 4) + { + String elipsis = ""; + for (int i = 0; i < (23 - threadCooldown) % 4; i++) + { + elipsis += "."; + } + + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.check_starting.name") + elipsis; + } else + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.check_pending.name"); + } + } else + { + if (!this.sealer.sealed) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.unsealed.name"); + } else + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.sealed.name"); + } + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenSealer.sealerTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, this.ySize); + + if (this.sealer != null) + { + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.sealer.getOxygenStored()) + " / " + (int) Math.floor(this.sealer.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.sealer.getEnergyStoredGC(), this.sealer.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ": " + ((int) Math.floor(this.sealer.getEnergyStoredGC()) + " / " + (int) Math.floor(this.sealer.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + int scale = this.sealer.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 24, 197, 7, Math.min(scale, 54), 7); + scale = this.sealer.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 37, 197, 0, Math.min(scale, 54), 7); + scale = 25 - this.sealer.getScaledThreadCooldown(25); + this.drawTexturedModalRect(var5 + 148, var6 + 60, 176, 14, 10, 27); + if (scale != 0) + { + this.drawTexturedModalRect(var5 + 149, var6 + 61 + scale, 186, 14, 8, 25 - scale); + } + + if (this.sealer.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 36, 176, 0, 11, 10); + } + + if (this.sealer.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 23, 187, 0, 10, 10); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenStorageModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenStorageModule.java new file mode 100644 index 00000000..712ad029 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenStorageModule.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiOxygenStorageModule extends GuiContainerGC +{ + + private static final ResourceLocation batteryBoxTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/oxygen_storage_module.png"); + + private TileEntityOxygenStorageModule tileEntity; + + public GuiOxygenStorageModule(InventoryPlayer par1InventoryPlayer, TileEntityOxygenStorageModule storageModule) + { + super(new ContainerOxygenStorageModule(par1InventoryPlayer, storageModule)); + this.tileEntity = storageModule; + } + + @Override + public void initGui() + { + super.initGui(); + List oxygenSlotDesc = new ArrayList(); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.0")); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 16, (this.height - this.ySize) / 2 + 21, 18, 18, oxygenSlotDesc, this.width, this.height, this)); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String guiTitle = GCCoreUtil.translate("tile.machine2.6.name"); + this.fontRenderer.drawString(guiTitle, this.xSize / 2 - this.fontRenderer.getStringWidth(guiTitle) / 2, 6, 4210752); + String displayJoules = (int) (this.tileEntity.getOxygenStored() + 0.5F) + " " + GCCoreUtil.translate("gui.message.of.name"); + String displayMaxJoules = "" + (int) this.tileEntity.getMaxOxygenStored(); + String maxOutputLabel = GCCoreUtil.translate("gui.max_output.desc") + ": " + TileEntityOxygenStorageModule.OUTPUT_PER_TICK * 20 + GCCoreUtil.translate("gui.per_second"); + + this.fontRenderer.drawString(displayJoules, 122 - this.fontRenderer.getStringWidth(displayJoules) / 2 - 35, 30, 4210752); + this.fontRenderer.drawString(displayMaxJoules, 122 - this.fontRenderer.getStringWidth(displayMaxJoules) / 2 - 35, 40, 4210752); + this.fontRenderer.drawString(maxOutputLabel, 122 - this.fontRenderer.getStringWidth(maxOutputLabel) / 2 - 35, 60, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiOxygenStorageModule.batteryBoxTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + // Background energy bar + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + // Foreground energy bar + int scale = (int) ((double) this.tileEntity.getOxygenStored() / (double) this.tileEntity.getMaxOxygenStored() * 72); + this.drawTexturedModalRect(containerWidth + 52, containerHeight + 52, 176, 0, scale, 3); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPainter.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPainter.java new file mode 100644 index 00000000..b664128b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPainter.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.inventory.ContainerPainter; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiPainter extends GuiContainerGC +{ + + private static final ResourceLocation painterTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/painter.png"); + + private TileEntityPainter tileEntity; + private GuiButton buttonApplyPaint; + + public GuiPainter(InventoryPlayer par1InventoryPlayer, TileEntityPainter tileEntity) + { + super(new ContainerPainter(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 186; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.add(this.buttonApplyPaint = new GuiButton(0, this.width / 2 + 4, this.height / 2 - 48, 76, 20, GCCoreUtil.translate("gui.button.paintapply.name"))); + this.buttonList.add(this.buttonApplyPaint = new GuiButton(1, this.width / 2 - 80, this.height / 2 - 48, 76, 20, GCCoreUtil.translate("gui.button.paintmix.name"))); + this.buttonList.add(this.buttonApplyPaint = new GuiButton(2, this.width / 2 - 80, this.height / 2 - 48 + 22, 76, 20, GCCoreUtil.translate("gui.button.paintreset.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.tileEntity.getPos(), par1GuiButton.id})); + tileEntity.buttonPressed(par1GuiButton.id, this.mc.player, Side.CLIENT); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 39, 6, 4210752); + String displayText = ""; + + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiPainter.painterTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int guiLeft = (this.width - this.xSize) / 2; + int guiBottom = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(guiLeft, guiBottom, 0, 0, this.xSize, this.ySize); + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + ColorUtil.setGLColor(tileEntity.guiColor); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + int x = guiLeft + this.xSize / 2 - 9; + int y = guiBottom + this.ySize / 2 - 69; + int height = 18; + int width = 18; + worldrenderer.begin(7, DefaultVertexFormats.POSITION); + worldrenderer.pos((double) (x + 0F), (double) (y + height), (double) this.zLevel).endVertex(); + worldrenderer.pos((double) (x + width), (double) (y + height), (double) this.zLevel).endVertex(); + worldrenderer.pos((double) (x + width), (double) (y + 0), (double) this.zLevel).endVertex(); + worldrenderer.pos((double) (x + 0F), (double) (y + 0), (double) this.zLevel).endVertex(); + tessellator.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiParaChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiParaChest.java new file mode 100644 index 00000000..32e5a261 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiParaChest.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.IScaleableFuelLevel; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiParaChest extends GuiContainerGC +{ + + private static ResourceLocation[] parachestTexture = new ResourceLocation[4]; + + static + { + for (int i = 0; i < 4; i++) + { + GuiParaChest.parachestTexture[i] = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/chest_" + i * 18 + ".png"); + } + } + + private IInventory upperChestInventory; + private IInventory lowerChestInventory; + + private int inventorySlots = 0; + + public GuiParaChest(IInventory par1IInventory, IInventory par2IInventory) + { + super(new ContainerParaChest(par1IInventory, par2IInventory, FMLClientHandler.instance().getClient().player)); + this.upperChestInventory = par1IInventory; + this.lowerChestInventory = par2IInventory; + this.allowUserInput = false; + this.inventorySlots = par2IInventory.getSizeInventory(); + this.ySize = 146 + this.inventorySlots * 2; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.lowerChestInventory.getName(), 8, 6, 4210752); + this.fontRenderer.drawString(this.upperChestInventory.hasCustomName() ? this.upperChestInventory.getName() : GCCoreUtil.translate(this.upperChestInventory.getName()), 8, + this.ySize - 103 + (this.inventorySlots == 3 ? 2 : 4), 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiParaChest.parachestTexture[(this.inventorySlots - 3) / 18]); + int k = (this.width - this.xSize) / 2; + int l = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + + if (this.lowerChestInventory instanceof IScaleableFuelLevel) + { + int fuelLevel = ((IScaleableFuelLevel) this.lowerChestInventory).getScaledFuelLevel(28); + this.drawTexturedModalRect(k + 17, l + (this.inventorySlots == 3 ? 40 : 42) - fuelLevel + this.inventorySlots * 2, 176, 28 - fuelLevel, 34, fuelLevel); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPositionedContainer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPositionedContainer.java new file mode 100644 index 00000000..4e7665de --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPositionedContainer.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import net.minecraft.inventory.Container; +import net.minecraft.util.math.BlockPos; + +public abstract class GuiPositionedContainer extends GuiContainerGC +{ + + private int x; + private int y; + private int z; + + public GuiPositionedContainer(Container container, BlockPos pos) + { + super(container); + this.x = pos.getX(); + this.y = pos.getY(); + this.z = pos.getZ(); + } + + public int getX() + { + return this.x; + } + + public int getY() + { + return this.y; + } + + public int getZ() + { + return this.z; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRefinery.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRefinery.java new file mode 100644 index 00000000..a3b71a26 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRefinery.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRefinery; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiRefinery extends GuiContainerGC +{ + + private static final ResourceLocation refineryTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/refinery.png"); + + private final TileEntityRefinery tileEntity; + + private GuiButton buttonDisable; + + private GuiElementInfoRegion fuelTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion oilTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 62, (this.height - this.ySize) / 2 + 16, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiRefinery(InventoryPlayer par1InventoryPlayer, TileEntityRefinery tileEntity) + { + super(new ContainerRefinery(par1InventoryPlayer, tileEntity, FMLClientHandler.instance().getClient().player)); + this.tileEntity = tileEntity; + this.ySize = 168; + } + + @Override + public void initGui() + { + super.initGui(); + List oilTankDesc = new ArrayList(); + oilTankDesc.add(GCCoreUtil.translate("gui.oil_tank.desc.0")); + oilTankDesc.add(GCCoreUtil.translate("gui.oil_tank.desc.1")); + int oilLevel = this.tileEntity.oilTank != null && this.tileEntity.oilTank.getFluid() != null ? this.tileEntity.oilTank.getFluid().amount : 0; + int oilCapacity = this.tileEntity.oilTank != null ? this.tileEntity.oilTank.getCapacity() : 0; + oilTankDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.message.oil.name") + ": " + oilLevel + " / " + oilCapacity); + this.oilTankRegion.tooltipStrings = oilTankDesc; + this.oilTankRegion.xPosition = (this.width - this.xSize) / 2 + 7; + this.oilTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.oilTankRegion.parentWidth = this.width; + this.oilTankRegion.parentHeight = this.height; + this.infoRegions.add(this.oilTankRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 37, (this.height - this.ySize) / 2 + 50, 18, 18, batterySlotDesc, this.width, this.height, this)); + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.4")); + int fuelLevel = this.tileEntity.fuelTank != null && this.tileEntity.fuelTank.getFluid() != null ? this.tileEntity.fuelTank.getFluid().amount : 0; + int fuelCapacity = this.tileEntity.fuelTank != null ? this.tileEntity.fuelTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.message.fuel.name") + ": " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + this.fuelTankRegion.xPosition = (this.width - this.xSize) / 2 + 153; + this.fuelTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.fuelTankRegion.parentWidth = this.width; + this.fuelTankRegion.parentHeight = this.height; + this.infoRegions.add(this.fuelTankRegion); + List fuelSlotDesc = new ArrayList(); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.0")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.1")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.2")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 152, (this.height - this.ySize) / 2 + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.tileEntity.getEnergyStoredGC()) + " / " + (int) Math.floor(this.tileEntity.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 62; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 16; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 39, this.height / 2 - 56, 76, 20, GCCoreUtil.translate("gui.button.refine.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.tileEntity.getPos(), 0})); + break; + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + GCCoreUtil.drawStringCentered(this.tileEntity.getName(), this.xSize / 2, 5, 4210752, this.fontRenderer); + String displayText = ""; + int yOffset = -18; + + String missingInput = null; + if (this.tileEntity.oilTank.getFluid() == null || this.tileEntity.oilTank.getFluidAmount() == 0) + { + missingInput = EnumColor.RED + GCCoreUtil.translate("gui.status.nooil.name"); + } + String activeString = this.tileEntity.canProcess() ? EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.refining.name") : null; + displayText = this.tileEntity.getGUIstatus(missingInput, activeString, false); + + this.buttonDisable.enabled = this.tileEntity.disableCooldown == 0; + this.buttonDisable.displayString = this.tileEntity.processTicks == 0 ? GCCoreUtil.translate("gui.button.refine.name") : GCCoreUtil.translate("gui.button.stoprefine.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": ", 60, 45 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(displayText, 60, 45 + 34 + yOffset, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.tileEntity.ueWattsPerTick + // * 20, ElectricUnit.WATT), 72, 56 + 23 + yOffset, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), + // ElectricUnit.VOLTAGE), 72, 68 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 23, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiRefinery.refineryTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + + int displayInt = this.tileEntity.getScaledOilLevel(38); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 17 + 49 - displayInt, 176, 38 - displayInt, 16, displayInt); + + displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 17 + 49 - displayInt, 176 + 16, 38 - displayInt, 16, displayInt); + + List oilTankDesc = new ArrayList(); + oilTankDesc.add(GCCoreUtil.translate("gui.oil_tank.desc.0")); + oilTankDesc.add(GCCoreUtil.translate("gui.oil_tank.desc.1")); + int oilLevel = this.tileEntity.oilTank != null && this.tileEntity.oilTank.getFluid() != null ? this.tileEntity.oilTank.getFluid().amount : 0; + int oilCapacity = this.tileEntity.oilTank != null ? this.tileEntity.oilTank.getCapacity() : 0; + oilTankDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.message.oil.name") + ": " + oilLevel + " / " + oilCapacity); + this.oilTankRegion.tooltipStrings = oilTankDesc; + + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.4")); + int fuelLevel = this.tileEntity.fuelTank != null && this.tileEntity.fuelTank.getFluid() != null ? this.tileEntity.fuelTank.getFluid().amount : 0; + int fuelCapacity = this.tileEntity.fuelTank != null ? this.tileEntity.fuelTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.message.fuel.name") + ": " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.tileEntity.getEnergyStoredGC()) + " / " + (int) Math.floor(this.tileEntity.getMaxEnergyStoredGC()))); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(containerWidth + 49, containerHeight + 16, 208, 0, 11, 10); + } + + this.drawTexturedModalRect(containerWidth + 63, containerHeight + 17, 176, 38, Math.min(this.tileEntity.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRocketInventory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRocketInventory.java new file mode 100644 index 00000000..751960d6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRocketInventory.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRocketInventory; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiRocketInventory extends GuiContainerGC +{ + + private static ResourceLocation[] rocketTextures = new ResourceLocation[4]; + + static + { + for (int i = 0; i < 4; i++) + { + GuiRocketInventory.rocketTextures[i] = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/rocket_" + i * 18 + ".png"); + } + } + + private final IInventory upperChestInventory; + private final EnumRocketType rocketType; + + public GuiRocketInventory(IInventory par1IInventory, IInventory par2IInventory, EnumRocketType rocketType) + { + super(new ContainerRocketInventory(par1IInventory, par2IInventory, rocketType, FMLClientHandler.instance().getClient().player)); + this.upperChestInventory = par1IInventory; + this.allowUserInput = false; + this.ySize = rocketType.getInventorySpace() <= 3 ? 132 : 145 + rocketType.getInventorySpace() * 2; + this.rocketType = rocketType; + } + + @Override + public void initGui() + { + super.initGui(); + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.0")); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + (((EntityTieredRocket) this.mc.player.getRidingEntity()).rocketType.getInventorySpace() == 2 ? 70 : 71), + (this.height - this.ySize) / 2 + 6, 36, 40, fuelTankDesc, this.width, this.height, this)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.fuel.name"), 8, 2 + 3, 4210752); + + this.fontRenderer.drawString(GCCoreUtil.translate(this.upperChestInventory.getName()), 8, 34 + 2 + 3, 4210752); + + if (this.mc.player != null && this.mc.player.getRidingEntity() != null && this.mc.player.getRidingEntity() instanceof EntitySpaceshipBase) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.fuel.name") + ":", 125, 15 + 3, 4210752); + final double percentage = ((EntitySpaceshipBase) this.mc.player.getRidingEntity()).getScaledFuelLevel(100); + final String color = percentage > 80.0D ? EnumColor.BRIGHT_GREEN.getCode() : percentage > 40.0D ? EnumColor.ORANGE.getCode() : EnumColor.RED.getCode(); + final String str = percentage + "% " + GCCoreUtil.translate("gui.message.full.name"); + this.fontRenderer.drawString(color + str, 117 - str.length() / 2, 20 + 8, 4210752); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.getTextureManager().bindTexture(GuiRocketInventory.rocketTextures[(this.rocketType.getInventorySpace() - 2) / 18]); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, 176, this.ySize); + + if (this.mc.player != null && this.mc.player.getRidingEntity() != null && this.mc.player.getRidingEntity() instanceof EntitySpaceshipBase) + { + final int fuelLevel = ((EntitySpaceshipBase) this.mc.player.getRidingEntity()).getScaledFuelLevel(38); + + this.drawTexturedModalRect((this.width - this.xSize) / 2 + (((EntityTieredRocket) this.mc.player.getRidingEntity()).rocketType.getInventorySpace() == 2 ? 71 : 72), + (this.height - this.ySize) / 2 + 45 - fuelLevel, 176, 38 - fuelLevel, 42, fuelLevel); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicBuggy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicBuggy.java new file mode 100644 index 00000000..8470fd01 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicBuggy.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.inventory.ContainerBuggyBench; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicBuggy extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation buggyBenchTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/buggybench.png"); + + private int pageIndex; + + public GuiSchematicBuggy(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerBuggyBench(par1InventoryPlayer, pos, FMLClientHandler.instance().getClient().player), pos); + this.ySize = 221; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("schematic.moonbuggy.name"), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 202 - 104 + 2 + 27, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicBuggy.buggyBenchTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - 221) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, 220); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicInput.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicInput.java new file mode 100644 index 00000000..73df1041 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicInput.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematic; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicInput extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation schematicInputTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/schematicpage.png"); + + private int pageIndex; + + public GuiSchematicInput(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematic(par1InventoryPlayer, pos), pos); + } + + @Override + public void initGui() + { + super.initGui(); + List schematicSlotDesc = new ArrayList(); + GuiButton nextButton; + schematicSlotDesc.add(GCCoreUtil.translate("gui.new_schematic.slot.desc.0")); + schematicSlotDesc.add(GCCoreUtil.translate("gui.new_schematic.slot.desc.1")); + schematicSlotDesc.add(GCCoreUtil.translate("gui.new_schematic.slot.desc.2")); + schematicSlotDesc.add(GCCoreUtil.translate("gui.new_schematic.slot.desc.3")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 79, (this.height - this.ySize) / 2, 18, 18, schematicSlotDesc, this.width, this.height, this)); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(nextButton = new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + this.buttonList.add(new GuiButton(2, this.width / 2 - 92 / 2, this.height / 2 - 52, 92, 20, GCCoreUtil.translate("gui.button.unlockschematic.name"))); + nextButton.enabled = false; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + case 2: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UNLOCK_NEW_SCHEMATIC, GCCoreUtil.getDimensionID(mc.world), new Object[] + {})); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.addnewsch.name"), 7, -22, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 56, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicInput.schematicInputTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - 220) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, 220); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicTier1Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicTier1Rocket.java new file mode 100644 index 00000000..5db62910 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicTier1Rocket.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematicTier1Rocket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicTier1Rocket extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation rocketBenchTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/rocketbench.png"); + + private int pageIndex; + + public GuiSchematicTier1Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicTier1Rocket(par1InventoryPlayer, pos), pos); + this.ySize = 221; + } + + @Override + public void initGui() + { + super.initGui(); + GuiButton backButton; + this.buttonList.add(backButton = new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + backButton.enabled = false; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("schematic.rocket_t1.name"), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 202 - 104 + 2 + 27, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicTier1Rocket.rocketBenchTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSolar.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSolar.java new file mode 100644 index 00000000..9c2a10c9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSolar.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSolar; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiSolar extends GuiContainerGC +{ + + private static final ResourceLocation solarGuiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/solar.png"); + + private final TileEntitySolar solarPanel; + + private GuiButton buttonEnableSolar; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiSolar(InventoryPlayer par1InventoryPlayer, TileEntitySolar solarPanel) + { + super(new ContainerSolar(par1InventoryPlayer, solarPanel)); + this.solarPanel = solarPanel; + this.ySize = 201; + this.xSize = 176; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.solarPanel.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.solarPanel.getEnergyStoredGC()) + " / " + (int) Math.floor(this.solarPanel.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 96; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 82, 18, 18, batterySlotDesc, this.width, this.height, this)); + List sunGenDesc = new ArrayList(); + float sunVisible = Math.round(this.solarPanel.solarStrength / 9.0F * 1000) / 10.0F; + sunGenDesc.add(this.solarPanel.solarStrength > 0 ? GCCoreUtil.translate("gui.status.sun_visible.name") + ": " + sunVisible + "%" : GCCoreUtil.translate("gui.status.blockedfully.name")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 47, (this.height - this.ySize) / 2 + 20, 18, 18, sunGenDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonEnableSolar = new GuiButton(0, this.width / 2 - 36, this.height / 2 - 19, 72, 20, GCCoreUtil.translate("gui.button.enable.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetY = 35; + this.buttonEnableSolar.enabled = this.solarPanel.disableCooldown == 0; + this.buttonEnableSolar.displayString = !this.solarPanel.getDisabled(0) ? GCCoreUtil.translate("gui.button.disable.name") : GCCoreUtil.translate("gui.button.enable.name"); + String displayString = this.solarPanel.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, 4210752); + displayString = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 45 + 23 - 46 + offsetY, 4210752); + displayString = GCCoreUtil.translate("gui.message.generating.name") + ": " + + (this.solarPanel.generateWatts > 0 ? EnergyDisplayHelper.getEnergyDisplayS(this.solarPanel.generateWatts) + "/t" : GCCoreUtil.translate("gui.status.not_generating.name")); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 34 + 23 - 46 + offsetY, 4210752); + float boost = Math.round((this.solarPanel.getSolarBoost() - 1) * 1000) / 10.0F; + displayString = GCCoreUtil.translate("gui.message.environment.name") + ": " + boost + "%"; + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 56 + 23 - 46 + offsetY, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.solarPanel.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(displayString, this.xSize / 2 - + // this.fontRenderer.getStringWidth(displayString) / 2, 68 + 23 - 46 + + // offsetY, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, 4210752); + } + + private String getStatus() + { + if (this.solarPanel.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (!this.solarPanel.getWorld().isDaytime()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedfully.name"); + } + + if (this.solarPanel.getWorld().isRaining() || this.solarPanel.getWorld().isThundering()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.raining.name"); + } + + if (this.solarPanel.solarStrength == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedfully.name"); + } + + if (this.solarPanel.solarStrength < 9) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedpartial.name"); + } + + if (this.solarPanel.generateWatts > 0) + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.collectingenergy.name"); + } + + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.unknown.name"); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiSolar.solarGuiTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.solarPanel.getEnergyStoredGC(), this.solarPanel.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.solarPanel.getEnergyStoredGC()) + " / " + (int) Math.floor(this.solarPanel.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.solarPanel.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 83, var6 + 24, 176, 0, 11, 10); + } + + if (this.solarPanel.solarStrength > 0) + { + this.drawTexturedModalRect(var5 + 48, var6 + 21, 176, 10, 16, 16); + } + + this.drawTexturedModalRect(var5 + 97, var6 + 25, 187, 0, Math.min(this.solarPanel.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckbox.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckbox.java new file mode 100644 index 00000000..c73ec291 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckbox.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiElementCheckbox extends GuiButton +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + public Boolean isSelected; + private ICheckBoxCallback parentGui; + private int textColor; + private int texWidth; + private int texHeight; + private int texX; + private int texY; + private boolean shiftOnHover; + + public GuiElementCheckbox(int id, ICheckBoxCallback parentGui, int x, int y, String text) + { + this(id, parentGui, x, y, text, 4210752); + } + + public GuiElementCheckbox(int id, ICheckBoxCallback parentGui, int x, int y, String text, int textColor) + { + this(id, parentGui, x, y, 13, 13, 20, 24, text, textColor); + } + + private GuiElementCheckbox(int id, ICheckBoxCallback parentGui, int x, int y, int width, int height, int texX, int texY, String text, int textColor) + { + this(id, parentGui, x, y, width, height, width, height, texX, texY, text, textColor, true); + } + + public GuiElementCheckbox(int id, ICheckBoxCallback parentGui, int x, int y, int width, int height, int texWidth, int texHeight, int texX, int texY, String text, int textColor, boolean shiftOnHover) + { + super(id, x, y, width, height, text); + this.parentGui = parentGui; + this.textColor = textColor; + this.texWidth = texWidth; + this.texHeight = texHeight; + this.shiftOnHover = shiftOnHover; + this.texX = texX; + this.texY = texY; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.isSelected == null) + { + this.isSelected = this.parentGui.getInitiallySelected(this); + } + + if (this.visible) + { + par1Minecraft.getTextureManager().bindTexture(GuiElementCheckbox.texture); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + this.drawTexturedModalRect(this.x, this.y, this.isSelected ? this.texX + this.texWidth : this.texX, this.hovered ? this.shiftOnHover ? this.texY + this.texHeight : this.texY : this.texY, + this.width, this.height); + this.mouseDragged(par1Minecraft, par2, par3); + par1Minecraft.fontRenderer.drawString(this.displayString, this.x + this.width + 3, this.y + (this.height - 6) / 2, this.textColor, false); + } + } + + @Override + public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6) + { + float f = 0.00390625F; + float f1 = 0.00390625F; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(par1 + 0, par2 + par6, this.zLevel).tex((par3 + 0) * f, (par4 + this.texHeight) * f1).endVertex(); + worldRenderer.pos(par1 + par5, par2 + par6, this.zLevel).tex((par3 + this.texWidth) * f, (par4 + this.texHeight) * f1).endVertex(); + worldRenderer.pos(par1 + par5, par2 + 0, this.zLevel).tex((par3 + this.texWidth) * f, (par4 + 0) * f1).endVertex(); + worldRenderer.pos(par1 + 0, par2 + 0, this.zLevel).tex((par3 + 0) * f, (par4 + 0) * f1).endVertex(); + tessellator.draw(); + } + + @Override + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) + { + if (this.enabled && this.visible && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height) + { + if (this.parentGui.canPlayerEdit(this, par1Minecraft.player)) + { + this.isSelected = !this.isSelected; + this.parentGui.onSelectionChanged(this, this.isSelected); + return true; + } else + { + this.parentGui.onIntruderInteraction(); + } + } + + return false; + } + + public interface ICheckBoxCallback + { + + void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected); + + boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player); + + boolean getInitiallySelected(GuiElementCheckbox checkbox); + + void onIntruderInteraction(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckboxPreLaunch.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckboxPreLaunch.java new file mode 100644 index 00000000..42547c96 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckboxPreLaunch.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiElementCheckboxPreLaunch extends GuiButton +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/checklist_book.png"); + public Boolean isSelected; + private ICheckBoxCallback parentGui; + private int textColor; + private int texX; + private int texY; + + public GuiElementCheckboxPreLaunch(int id, ICheckBoxCallback parentGui, int x, int y, String text) + { + this(id, parentGui, x, y, text, 4210752); + } + + public GuiElementCheckboxPreLaunch(int id, ICheckBoxCallback parentGui, int x, int y, String text, int textColor) + { + this(id, parentGui, x, y, 9, 9, 194, 0, text, textColor); + } + + private GuiElementCheckboxPreLaunch(int id, ICheckBoxCallback parentGui, int x, int y, int width, int height, int texX, int texY, String text, int textColor) + { + super(id, x, y, width, height, text); + this.parentGui = parentGui; + this.textColor = textColor; + this.texX = texX; + this.texY = texY; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.isSelected == null) + { + this.isSelected = this.parentGui.getInitiallySelected(this); + } + + if (this.visible) + { + par1Minecraft.getTextureManager().bindTexture(GuiElementCheckboxPreLaunch.texture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + int texWidth = this.isSelected ? 12 : 9; + int texHeight = this.isSelected ? 16 : 9; + this.drawTexturedModalRect(this.x, this.isSelected ? this.y - 7 : this.y, this.hovered ? (this.texX + 12) : this.texX, this.isSelected ? this.texY + 9 : this.texY, texWidth, texHeight); + this.mouseDragged(par1Minecraft, par2, par3); + par1Minecraft.fontRenderer.drawSplitString(EnumColor.BLACK + this.displayString, this.x + this.width + 3, this.y + (this.height - 6) / 2, 100, ColorUtil.to32BitColor(255, 5, 5, 5)); + } + } + + @Override + public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6) + { + float f = 0.00390625F; + float f1 = 0.00390625F; + int texWidth = this.isSelected ? 12 : 9; + int texHeight = this.isSelected ? 16 : 9; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(par1 + 0, par2 + par6, this.zLevel).tex((par3 + 0) * f, (par4 + texHeight) * f1).endVertex(); + worldRenderer.pos(par1 + par5, par2 + par6, this.zLevel).tex((par3 + texWidth) * f, (par4 + texHeight) * f1).endVertex(); + worldRenderer.pos(par1 + par5, par2 + 0, this.zLevel).tex((par3 + texWidth) * f, (par4 + 0) * f1).endVertex(); + worldRenderer.pos(par1 + 0, par2 + 0, this.zLevel).tex((par3 + 0) * f, (par4 + 0) * f1).endVertex(); + tessellator.draw(); + } + + @Override + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) + { + if (this.enabled && this.visible && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height) + { + if (this.parentGui.canPlayerEdit(this, par1Minecraft.player)) + { + this.isSelected = !this.isSelected; + this.parentGui.onSelectionChanged(this, this.isSelected); + return true; + } else + { + this.parentGui.onIntruderInteraction(); + } + } + + return false; + } + + public int willFit(int max) + { + int size = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(this.displayString, 100).size() * Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT; + GalacticraftCore.logger.debug(displayString + " " + size + " " + max); + if (size > max) + { + return -1; + } + return size; + } + + public interface ICheckBoxCallback + { + + void onSelectionChanged(GuiElementCheckboxPreLaunch checkbox, boolean newSelected); + + boolean canPlayerEdit(GuiElementCheckboxPreLaunch checkbox, EntityPlayer player); + + boolean getInitiallySelected(GuiElementCheckboxPreLaunch checkbox); + + void onIntruderInteraction(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementDropdown.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementDropdown.java new file mode 100644 index 00000000..574ad55f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementDropdown.java @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiElementDropdown extends GuiButton +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + + public boolean dropdownClicked; + public String[] optionStrings; + public int selectedOption = -1; + public FontRenderer font; + private IDropboxCallback parentClass; + + public GuiElementDropdown(int id, IDropboxCallback parentClass, int x, int y, String... text) + { + super(id, x, y, 15, 15, ""); + Minecraft mc = FMLClientHandler.instance().getClient(); + this.parentClass = parentClass; + this.font = mc.fontRenderer; + this.optionStrings = text; + + int largestString = Integer.MIN_VALUE; + + for (String element : text) + { + largestString = Math.max(largestString, this.font.getStringWidth(element)); + } + + this.width = largestString + 8 + 15; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.selectedOption == -1) + { + this.selectedOption = this.parentClass.getInitialSelection(this); + } + + if (this.visible) + { +// GL11.glDisable(GL12.GL_RESCALE_NORMAL); +// RenderHelper.disableStandardItemLighting(); +// GL11.glDisable(GL11.GL_LIGHTING); +// GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glPushMatrix(); + + this.zLevel = 300.0F; + GL11.glTranslatef(0, 0, 500); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + Gui.drawRect(this.x, this.y, this.x + this.width - 15, this.y + (this.dropdownClicked ? this.height * this.optionStrings.length : this.height), ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.x + 1, this.y + 1, this.x + this.width - 16, this.y + (this.dropdownClicked ? this.height * this.optionStrings.length : this.height) - 1, + ColorUtil.to32BitColor(255, 150, 150, 150)); + Gui.drawRect(this.x + this.width - 15, this.y, this.x + this.width - 1, this.y + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.x + this.width - 15, this.y + 1, this.x + this.width - 2, this.y + this.height - 1, ColorUtil.to32BitColor(255, 150, 150, 150)); + + if (this.dropdownClicked && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height * this.optionStrings.length) + { + int hoverPos = (par3 - this.y) / this.height; + Gui.drawRect(this.x + 1, this.y + this.height * hoverPos + 1, this.x + this.width - 16, this.y + this.height * (hoverPos + 1) - 1, ColorUtil.to32BitColor(255, 175, 175, 175)); + } + + this.mouseDragged(par1Minecraft, par2, par3); + + if (this.dropdownClicked) + { + for (int i = 0; i < this.optionStrings.length; i++) + { + this.font.drawStringWithShadow(this.optionStrings[i], this.x + this.width / 2 - 7 - this.font.getStringWidth(this.optionStrings[i]) / 2, + this.y + (this.height - 6) / 2 + this.height * i, ColorUtil.to32BitColor(255, 255, 255, 255)); + } + } else + { + this.font.drawStringWithShadow(this.optionStrings[this.selectedOption], this.x + this.width / 2 - 7 - this.font.getStringWidth(this.optionStrings[this.selectedOption]) / 2, + this.y + (this.height - 6) / 2, ColorUtil.to32BitColor(255, 255, 255, 255)); + } + + par1Minecraft.renderEngine.bindTexture(this.texture); + this.drawTexturedModalRect(this.x + this.width - 12, this.y + 5, 185, 0, 7, 4); + + GL11.glPopMatrix(); + this.zLevel = 0.0F; +// GL11.glEnable(GL11.GL_LIGHTING); +// GL11.glEnable(GL11.GL_DEPTH_TEST); +// RenderHelper.enableStandardItemLighting(); +// GL11.glEnable(GL12.GL_RESCALE_NORMAL); + } + } + + @Override + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) + { + if (!this.dropdownClicked) + { + if (this.enabled && this.visible && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height) + { + if (this.parentClass.canBeClickedBy(this, par1Minecraft.player)) + { + this.dropdownClicked = true; + return true; + } else + { + this.parentClass.onIntruderInteraction(); + } + } + } else + { + if (this.enabled && this.visible && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height * this.optionStrings.length) + { + if (this.parentClass.canBeClickedBy(this, par1Minecraft.player)) + { + int optionClicked = (par3 - this.y) / this.height; + this.selectedOption = optionClicked % this.optionStrings.length; + this.dropdownClicked = false; + this.parentClass.onSelectionChanged(this, this.selectedOption); + return true; + } else + { + this.parentClass.onIntruderInteraction(); + } + } else + { + this.dropdownClicked = false; + } + } + + return false; + } + + public interface IDropboxCallback + { + + boolean canBeClickedBy(GuiElementDropdown dropdown, EntityPlayer player); + + void onSelectionChanged(GuiElementDropdown dropdown, int selection); + + int getInitialSelection(GuiElementDropdown dropdown); + + void onIntruderInteraction(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientButton.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientButton.java new file mode 100644 index 00000000..9e9b8806 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientButton.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.OpenGlHelper; +import org.lwjgl.opengl.GL11; + +public class GuiElementGradientButton extends GuiButton +{ + + public GuiElementGradientButton(int id, int x, int y, int width, int height, String buttonText) + { + super(id, x, y, width, height, buttonText); + } + + @Override + public void drawButton(Minecraft p_146112_1_, int p_146112_2_, int p_146112_3_, float partial) + { + if (this.visible) + { + FontRenderer fontrenderer = p_146112_1_.fontRenderer; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = p_146112_2_ >= this.x && p_146112_3_ >= this.y && p_146112_2_ < this.x + this.width && p_146112_3_ < this.y + this.height; + int k = this.getHoverState(this.hovered); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + int color = ColorUtil.to32BitColor(150, 10, 10, 10); + + if (!this.enabled) + { + if (this.hovered) + { + color = ColorUtil.to32BitColor(150, 30, 30, 30); + } else + { + color = ColorUtil.to32BitColor(150, 32, 32, 32); + } + } else if (this.hovered) + { + color = ColorUtil.to32BitColor(150, 30, 30, 30); + } + + this.drawGradientRect(this.x, this.y, this.x + this.width, this.y + this.height, color, color); + this.mouseDragged(p_146112_1_, p_146112_2_, p_146112_3_); + int l = 14737632; + + if (this.packedFGColour != 0) + { + l = this.packedFGColour; + } else if (!this.enabled) + { + l = 10526880; + } else if (this.hovered) + { + l = 16777120; + } + + this.drawCenteredString(fontrenderer, this.displayString, this.x + this.width / 2, this.y + (this.height - 8) / 2, l); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientList.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientList.java new file mode 100644 index 00000000..2bc80406 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientList.java @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Mouse; + +public class GuiElementGradientList extends Gui +{ + + public static class ListElement + { + + public String value; + public int color; + + public ListElement(String value, int color) + { + this.value = value; + this.color = color; + } + } + + public static final int BUTTON_HEIGHT = 20; + public int width; + public int height; + public int xPosition; + public int yPosition; + public List listContents = new ArrayList(); + public int sliderPos; + private int lastMousePosY; + private boolean sliderGrabbed; + private boolean sliderEnabled; + private int selectedIndex = -1; + + public GuiElementGradientList(int xPos, int yPos, int width, int height) + { + this.xPosition = xPos; + this.yPosition = yPos; + this.width = width; + this.height = height; + this.sliderPos = this.yPosition + 1; + } + + public void updateListContents(List newContents) + { + this.listContents = newContents; + this.sliderEnabled = this.listContents.size() * GuiElementGradientList.BUTTON_HEIGHT > this.height; + if (this.selectedIndex >= this.listContents.size()) + { + this.selectedIndex = -1; + } + } + + public void draw(int mousePosX, int mousePosY) + { + if (this.sliderEnabled) + { + if (this.sliderGrabbed + || mousePosX >= this.xPosition + this.width - 9 && mousePosX < this.xPosition + this.width && mousePosY >= this.yPosition && mousePosY < this.yPosition + this.height) + { + if (Mouse.isButtonDown(0)) + { + this.sliderGrabbed = true; + + if (this.lastMousePosY > 0) + { + if (mousePosY >= this.sliderPos && mousePosY < this.sliderPos + 15) + { + int deltaY = this.lastMousePosY - this.sliderPos; + this.sliderPos = mousePosY - deltaY; + } else + { + this.sliderPos = mousePosY - 7; + } + } + + this.lastMousePosY = mousePosY; + } else + { + this.sliderGrabbed = false; + } + } else + { + this.lastMousePosY = 0; + } + } + + if (Mouse.isButtonDown(0)) + { + if (mousePosX >= this.xPosition && mousePosX < this.xPosition + this.width - 10 && mousePosY >= this.yPosition && mousePosY < this.yPosition + this.height) + { + int clickPosY = mousePosY - this.yPosition + (int) Math.floor((this.listContents.size() * GuiElementGradientList.BUTTON_HEIGHT - this.height) * this.getSliderPercentage()); + this.selectedIndex = clickPosY / GuiElementGradientList.BUTTON_HEIGHT; + + if (this.selectedIndex < 0 || this.selectedIndex >= this.listContents.size()) + { + this.selectedIndex = -1; + } + } + } + + this.sliderPos = Math.min(Math.max(this.yPosition, this.sliderPos), this.yPosition + this.height - 15); + + this.drawGradientRect(this.xPosition, this.yPosition, this.xPosition + this.width - 10, this.yPosition + this.height, ColorUtil.to32BitColor(255, 30, 30, 30), + ColorUtil.to32BitColor(255, 30, 30, 30)); + this.drawGradientRect(this.xPosition + this.width - 9, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, ColorUtil.to32BitColor(255, 50, 50, 50), + ColorUtil.to32BitColor(255, 50, 50, 50)); + int sliderColor = this.sliderEnabled ? ColorUtil.to32BitColor(255, 90, 90, 90) : ColorUtil.to32BitColor(255, 40, 40, 40); + this.drawGradientRect(this.xPosition + this.width - 9, this.sliderPos, this.xPosition + this.width, this.sliderPos + 15, sliderColor, sliderColor); + + Gui.drawRect(this.xPosition + this.width - 1, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.xPosition + this.width - 10, this.yPosition, this.xPosition + this.width - 9, this.yPosition + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.xPosition, this.yPosition, this.xPosition + 1, this.yPosition + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + 1, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.xPosition, this.yPosition + this.height - 1, this.xPosition + this.width, this.yPosition + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + + sliderColor = this.sliderEnabled ? ColorUtil.to32BitColor(255, 120, 120, 120) : ColorUtil.to32BitColor(255, 60, 60, 60); + Gui.drawRect(this.xPosition + this.width - 9, this.sliderPos + 1, this.xPosition + this.width - 8, this.sliderPos + 14, sliderColor); + Gui.drawRect(this.xPosition + this.width - 2, this.sliderPos + 1, this.xPosition + this.width - 1, this.sliderPos + 14, sliderColor); + Gui.drawRect(this.xPosition + this.width - 9, this.sliderPos, this.xPosition + this.width - 1, this.sliderPos + 1, sliderColor); + Gui.drawRect(this.xPosition + this.width - 9, this.sliderPos + 15, this.xPosition + this.width - 1, this.sliderPos + 14, sliderColor); + + int currentDrawHeight = this.yPosition + 1 - (int) Math.floor((this.listContents.size() * GuiElementGradientList.BUTTON_HEIGHT - this.height) * this.getSliderPercentage()); + FontRenderer fontRenderer = FMLClientHandler.instance().getClient().fontRenderer; + + for (int i = 0; i < this.listContents.size(); i++) + { + ListElement displayButton = this.listContents.get(i); + + if (displayButton != null && displayButton.value != null && !displayButton.value.isEmpty()) + { + int yCoord0 = currentDrawHeight; + int yCoord1 = currentDrawHeight + GuiElementGradientList.BUTTON_HEIGHT - 1; + + if (yCoord1 > this.yPosition && yCoord0 < this.yPosition + this.height) + { + yCoord0 = Math.max(this.yPosition + 1, yCoord0); + yCoord1 = Math.min(this.yPosition + this.height - 1, yCoord1); + + int color = i == this.selectedIndex ? ColorUtil.to32BitColor(255, 35, 35, 35) : ColorUtil.to32BitColor(255, 25, 25, 25); + + Gui.drawRect(this.xPosition + 1, yCoord0, this.xPosition + this.width - 10, yCoord1, color); + + if (currentDrawHeight + GuiElementGradientList.BUTTON_HEIGHT / 2 - fontRenderer.FONT_HEIGHT / 2 > this.yPosition + && currentDrawHeight + GuiElementGradientList.BUTTON_HEIGHT / 2 + fontRenderer.FONT_HEIGHT / 2 < this.yPosition + this.height) + { + fontRenderer.drawString(displayButton.value, this.xPosition + (this.width - 10) / 2 - fontRenderer.getStringWidth(displayButton.value) / 2, + currentDrawHeight + GuiElementGradientList.BUTTON_HEIGHT / 2 - fontRenderer.FONT_HEIGHT / 2, displayButton.color); + } + + } + + currentDrawHeight += GuiElementGradientList.BUTTON_HEIGHT; + } + } + } + + public void update() + { + } + + private float getSliderPercentage() + { + if (!this.sliderEnabled) + { + return 0.0F; + } + + return (this.sliderPos - this.yPosition) / (float) (this.height - 15); + } + + public ListElement getSelectedElement() + { + if (this.selectedIndex == -1) + { + return null; + } + + return this.listContents.get(this.selectedIndex); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementInfoRegion.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementInfoRegion.java new file mode 100644 index 00000000..f7de76c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementInfoRegion.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import java.util.Iterator; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@SideOnly(Side.CLIENT) +public class GuiElementInfoRegion extends Gui +{ + + protected int width; + protected int height; + public int xPosition; + public int yPosition; + public boolean enabled; + public boolean drawRegion; + public boolean withinRegion; + public List tooltipStrings; + public int parentWidth; + public int parentHeight; + public GuiContainerGC parentGui; + + public GuiElementInfoRegion(int xPos, int yPos, int width, int height, List tooltipStrings, int parentWidth, int parentHeight, GuiContainerGC parentGui) + { + this.width = 200; + this.height = 20; + this.enabled = true; + this.xPosition = xPos; + this.yPosition = yPos; + this.width = width; + this.height = height; + this.tooltipStrings = tooltipStrings; + this.parentWidth = parentWidth; + this.parentHeight = parentHeight; + this.parentGui = parentGui; + } + + protected int getHoverState(boolean par1) + { + byte b0 = 1; + + if (!this.enabled) + { + b0 = 0; + } else if (par1) + { + b0 = 2; + } + + return b0; + } + + public void drawRegion(int par2, int par3) + { + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + this.withinRegion = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height; + + if (this.drawRegion) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int k = this.getHoverState(this.withinRegion); + Gui.drawRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, ColorUtil.to32BitColor(100 * k, 255, 0, 0)); + } + + if (this.tooltipStrings != null && !this.tooltipStrings.isEmpty() && this.withinRegion) + { + int k = 0; + Iterator iterator = this.tooltipStrings.iterator(); + + while (iterator.hasNext()) + { + String s = iterator.next(); + int l = FMLClientHandler.instance().getClient().fontRenderer.getStringWidth(s); + + if (l > k) + { + k = l; + } + } + + int i1 = par2 + 12; + int j1 = par3 - 12; + int k1 = 8; + + if (this.tooltipStrings.size() > 1) + { + k1 += (this.tooltipStrings.size() - 1) * 10; + } + + if (i1 + k > this.parentWidth) + { + i1 -= 28 + k; + } + + if (this.parentGui.getTooltipOffset(par2, par3) > 0) + { + j1 -= k1 + 9; + } + + this.zLevel = 300.0F; +// GuiElementInfoRegion.itemRenderer.zLevel = 300.0F; + int l1 = -267386864; + this.drawGradientRect(i1 - 3, j1 - 4, i1 + k + 3, j1 - 3, l1, l1); + this.drawGradientRect(i1 - 3, j1 + k1 + 3, i1 + k + 3, j1 + k1 + 4, l1, l1); + this.drawGradientRect(i1 - 3, j1 - 3, i1 + k + 3, j1 + k1 + 3, l1, l1); + this.drawGradientRect(i1 - 4, j1 - 3, i1 - 3, j1 + k1 + 3, l1, l1); + this.drawGradientRect(i1 + k + 3, j1 - 3, i1 + k + 4, j1 + k1 + 3, l1, l1); + int i2 = 1347420415; + int j2 = (i2 & 16711422) >> 1 | i2 & -16777216; + this.drawGradientRect(i1 - 3, j1 - 3 + 1, i1 - 3 + 1, j1 + k1 + 3 - 1, i2, j2); + this.drawGradientRect(i1 + k + 2, j1 - 3 + 1, i1 + k + 3, j1 + k1 + 3 - 1, i2, j2); + this.drawGradientRect(i1 - 3, j1 - 3, i1 + k + 3, j1 - 3 + 1, i2, i2); + this.drawGradientRect(i1 - 3, j1 + k1 + 2, i1 + k + 3, j1 + k1 + 3, j2, j2); + + for (int k2 = 0; k2 < this.tooltipStrings.size(); ++k2) + { + String s1 = this.tooltipStrings.get(k2); + FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow(s1, i1, j1, -1); + + j1 += 10; + } + + this.zLevel = 0.0F; +// GuiElementInfoRegion.itemRenderer.zLevel = 0.0F; + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSlider.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSlider.java new file mode 100644 index 00000000..8689fbf4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSlider.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import java.util.Collections; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public class GuiElementSlider extends GuiButton +{ + + private Vector3 firstColor; + private Vector3 lastColor; + private final boolean isVertical; + private int sliderPos; + + public GuiElementSlider(int id, int x, int y, int width, int height, boolean vertical, Vector3 firstColor, Vector3 lastColor) + { + this(id, x, y, width, height, vertical, firstColor, lastColor, ""); + } + + public GuiElementSlider(int id, int x, int y, int width, int height, boolean vertical, Vector3 firstColor, Vector3 lastColor, String displayString) + { + super(id, x, y, width, height, displayString); + this.isVertical = vertical; + this.firstColor = firstColor; + this.lastColor = lastColor; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.visible) + { + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + + if (Mouse.isButtonDown(0) && this.hovered) + { + if (this.isVertical) + { + this.sliderPos = par3 - this.y; + } else + { + this.sliderPos = par2 - this.x; + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + + if (this.isVertical) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width, this.y, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(this.x, this.y, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(this.x, (double) this.y + this.height, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.width, (double) this.y + this.height, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width - 1, (double) this.y + 1, this.zLevel).color(this.firstColor.floatX(), this.firstColor.floatY(), this.firstColor.floatZ(), 1.0F) + .endVertex(); + worldRenderer.pos((double) this.x + 1, (double) this.y + 1, this.zLevel).color(this.firstColor.floatX(), this.firstColor.floatY(), this.firstColor.floatZ(), 1.0F).endVertex(); + worldRenderer.pos((double) this.x + 1, (double) this.y + this.height - 1, this.zLevel).color(this.lastColor.floatX(), this.lastColor.floatY(), this.lastColor.floatZ(), 1.0F) + .endVertex(); + worldRenderer.pos((double) this.x + this.width - 1, (double) this.y + this.height - 1, this.zLevel) + .color(this.lastColor.floatX(), this.lastColor.floatY(), this.lastColor.floatZ(), 1.0F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width, (double) this.y + this.sliderPos - 1, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos(this.x, (double) this.y + this.sliderPos - 1, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos(this.x, (double) this.y + this.sliderPos + 1, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.width, (double) this.y + this.sliderPos + 1, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + tessellator.draw(); + } else + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width, this.y, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(this.x, this.y, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(this.x, (double) this.y + this.height, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.width, (double) this.y + this.height, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width - 1, (double) this.y + 1, this.zLevel).color(this.lastColor.floatX(), this.lastColor.floatY(), this.lastColor.floatZ(), 1.0F) + .endVertex(); + worldRenderer.pos((double) this.x + 1, (double) this.y + 1, this.zLevel).color(this.firstColor.floatX(), this.firstColor.floatY(), this.firstColor.floatZ(), 1.0F).endVertex(); + worldRenderer.pos((double) this.x + 1, (double) this.y + this.height - 1, this.zLevel).color(this.firstColor.floatX(), this.firstColor.floatY(), this.firstColor.floatZ(), 1.0F) + .endVertex(); + worldRenderer.pos((double) this.x + this.width - 1, (double) this.y + this.height - 1, this.zLevel) + .color(this.lastColor.floatX(), this.lastColor.floatY(), this.lastColor.floatZ(), 1.0F).endVertex(); + tessellator.draw(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.sliderPos + 1, this.y, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.sliderPos - 1, this.y, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.sliderPos - 1, (double) this.y + this.height, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.sliderPos + 1, (double) this.y + this.height, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + tessellator.draw(); + } + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + } + + public void drawHoveringText() + { + if (this.hovered) + { + FontRenderer font = FMLClientHandler.instance().getClient().fontRenderer; + Minecraft mc = FMLClientHandler.instance().getClient(); + ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + int width = scaledresolution.getScaledWidth(); + int height = scaledresolution.getScaledHeight(); + int x = Mouse.getX() * width / mc.displayWidth; + int y = height - Mouse.getY() * height / mc.displayHeight - 1; + net.minecraftforge.fml.client.config.GuiUtils.drawHoveringText(Collections.singletonList(this.displayString), x, y, width, height, -1, font); + } + } + + public void setSliderPos(float pos) + { + this.sliderPos = (int) Math.floor(this.height * pos); + } + + public int getSliderPos() + { + return this.sliderPos; + } + + public float getNormalizedValue() + { + return this.sliderPos / (float) this.height; + } + + public double getColorValueD() + { + return (this.sliderPos * 255.0D) / (this.height - 1); + } + + public int getButtonHeight() + { + return this.height; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSpinner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSpinner.java new file mode 100644 index 00000000..5230cbcd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSpinner.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiElementSpinner extends GuiButton +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + private ISpinnerCallback parentGui; + private int textColor; + private boolean hoverUpper; + private boolean hoverLower; + public Integer value; + + public GuiElementSpinner(int id, ISpinnerCallback parentGui, int x, int y) + { + this(id, parentGui, x, y, 4210752); + } + + public GuiElementSpinner(int id, ISpinnerCallback parentGui, int x, int y, int textColor) + { + super(id, x, y, 31, 20, ""); + this.parentGui = parentGui; + this.textColor = textColor; + } + + @Override + public void drawButton(Minecraft mc, int mX, int mY, float partial) + { + if (this.value == null) + { + this.value = this.parentGui.getInitialValue(this); + } + + if (this.visible) + { + mc.getTextureManager().bindTexture(GuiElementSpinner.texture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = mX >= this.x && mY >= this.y && mX < this.x + this.width && mY < this.y + this.height; + this.hoverUpper = mX >= this.x + 20 && mX < this.x + width && mY > this.y && mY < this.y + this.height / 2; + this.hoverLower = mX >= this.x + 20 && mX < this.x + width && mY > this.y + this.height / 2 && mY < this.y + this.height; + this.drawTexturedModalRect(this.x, this.y, 214, 0, 20, this.height); + this.drawTexturedModalRect(this.x + 20, this.y, this.hoverUpper ? 245 : 234, 0, 11, 10); + this.drawTexturedModalRect(this.x + 20, this.y + 10, this.hoverLower ? 245 : 234, 10, 11, 10); +// this.mouseDragged(mc, mX, mY); + mc.fontRenderer.drawString(this.value.toString(), this.x + 11 - (mc.fontRenderer.getStringWidth(this.value.toString()) >> 1), this.y + (this.height - 6) / 2, this.textColor, false); + } + } + + public void increase() + { + this.parentGui.onSelectionChanged(this, this.value + 1); + this.value++; + } + + public void decrease() + { + this.parentGui.onSelectionChanged(this, this.value - 1); + this.value--; + } + + @Override + public boolean mousePressed(Minecraft mc, int mX, int mY) + { + if (this.enabled && this.visible) + { + if (mX >= this.x + 20 && mX < this.x + width && mY > this.y && mY < this.y + this.height / 2) + { + if (this.parentGui.canPlayerEdit(this, mc.player)) + { + increase(); + return true; + } + } + + if (mX >= this.x + 20 && mX < this.x + width && mY > this.y + this.height / 2 && mY < this.y + this.height) + { + if (this.parentGui.canPlayerEdit(this, mc.player)) + { + decrease(); + return true; + } + } + } + + return false; + } + + public interface ISpinnerCallback + { + + void onSelectionChanged(GuiElementSpinner spinner, int newVal); + + boolean canPlayerEdit(GuiElementSpinner spinner, EntityPlayer player); + + int getInitialValue(GuiElementSpinner spinner); + + void onIntruderInteraction(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTextBox.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTextBox.java new file mode 100644 index 00000000..d8ab2637 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTextBox.java @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Keyboard; + +public class GuiElementTextBox extends GuiButton +{ + + public String text; + public boolean numericOnly; + public boolean centered; + private int maxLength; + + public long timeBackspacePressed; + public int cursorPulse; + public int backspacePressed; + public boolean isTextFocused = false; + public int incorrectUseTimer; + public boolean resetOnClick = true; + + private ITextBoxCallback parentGui; + + private Minecraft mc = FMLClientHandler.instance().getClient(); + + public GuiElementTextBox(int id, ITextBoxCallback parentGui, int x, int y, int width, int height, String initialText, boolean numericOnly, int maxLength, boolean centered) + { + super(id, x, y, width, height, initialText); + this.parentGui = parentGui; + this.numericOnly = numericOnly; + this.maxLength = maxLength; + this.centered = centered; + } + + /** + * Call this from the parent GUI class in keyTyped. + */ + public boolean keyTyped(char keyChar, int keyID) + { + if (this.isTextFocused) + { + if (keyID == Keyboard.KEY_BACK) + { + if (this.text.length() > 0) + { + if (this.parentGui.canPlayerEdit(this, this.mc.player)) + { + String toBeParsed = this.text.substring(0, this.text.length() - 1); + + if (this.isValid(toBeParsed)) + { + this.text = toBeParsed; + this.timeBackspacePressed = System.currentTimeMillis(); + } else + { + this.text = ""; + } + } else + { + this.incorrectUseTimer = 10; + this.parentGui.onIntruderInteraction(this); + } + } + } else if (keyChar == 22) + { + String pastestring = GuiScreen.getClipboardString(); + + if (pastestring == null) + { + pastestring = ""; + } + + if (this.isValid(this.text + pastestring)) + { + if (this.parentGui.canPlayerEdit(this, this.mc.player)) + { + this.text = this.text + pastestring; + this.text = this.text.substring(0, Math.min(String.valueOf(this.text).length(), this.maxLength)); + } else + { + this.incorrectUseTimer = 10; + this.parentGui.onIntruderInteraction(this); + } + } + } else if (this.isValid(this.text + keyChar)) + { + if (this.parentGui.canPlayerEdit(this, this.mc.player)) + { + this.text = this.text + keyChar; + this.text = this.text.substring(0, Math.min(this.text.length(), this.maxLength)); + } else + { + this.incorrectUseTimer = 10; + this.parentGui.onIntruderInteraction(this); + } + } + + this.parentGui.onTextChanged(this, this.text); + return true; + } + + return false; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.text == null) + { + this.text = this.parentGui.getInitialText(this); + this.parentGui.onTextChanged(this, this.text); + } + + if (this.visible) + { + Gui.drawRect(this.x, this.y, this.x + this.width, this.y + this.height, ColorUtil.to32BitColor(140, 140, 140, 140)); + Gui.drawRect(this.x + 1, this.y + 1, this.x + this.width - 1, this.y + this.height - 1, ColorUtil.to32BitColor(255, 0, 0, 0)); + + this.cursorPulse++; + + if (this.timeBackspacePressed > 0) + { + if (Keyboard.isKeyDown(Keyboard.KEY_BACK) && this.text.length() > 0) + { + if (System.currentTimeMillis() - this.timeBackspacePressed > 200 / (1 + this.backspacePressed * 0.3F) && this.parentGui.canPlayerEdit(this, this.mc.player)) + { + String toBeParsed = this.text.substring(0, this.text.length() - 1); + + if (this.isValid(toBeParsed)) + { + this.text = toBeParsed; + this.parentGui.onTextChanged(this, this.text); + } else + { + this.text = ""; + } + + this.timeBackspacePressed = System.currentTimeMillis(); + this.backspacePressed++; + } else if (!this.parentGui.canPlayerEdit(this, this.mc.player)) + { + this.incorrectUseTimer = 10; + this.parentGui.onIntruderInteraction(this); + } + } else + { + this.timeBackspacePressed = 0; + this.backspacePressed = 0; + } + } + + if (this.incorrectUseTimer > 0) + { + this.incorrectUseTimer--; + } + + int xPos = this.x + 4; + + if (this.centered) + { + xPos = this.x + this.width / 2 - this.mc.fontRenderer.getStringWidth(this.text) / 2; + } + + this.drawString(this.mc.fontRenderer, this.text + (this.cursorPulse / 24 % 2 == 0 && this.isTextFocused ? "_" : ""), xPos, this.y + this.height / 2 - 4, + this.incorrectUseTimer > 0 ? ColorUtil.to32BitColor(255, 255, 20, 20) : this.parentGui.getTextColor(this)); + } + } + + public int getIntegerValue() + { + try + { + return Integer.parseInt(this.text.equals("") ? "0" : this.text); + } catch (Exception e) + { + return -1; + } + } + + public boolean isValid(String string) + { + if (this.numericOnly) + { + if (string.length() > 0 && ChatAllowedCharacters.isAllowedCharacter(string.charAt(string.length() - 1))) + { + try + { + Integer.parseInt(string); + return true; + } catch (Exception e) + { + return false; + } + } else + { + return false; + } + } else + { + if (string.length() <= 0) + { + return false; + } + + return ChatAllowedCharacters.isAllowedCharacter(string.charAt(string.length() - 1)); + } + } + + @Override + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) + { + if (super.mousePressed(par1Minecraft, par2, par3)) + { + Gui.drawRect(this.x, this.y, this.x + this.width, this.y + this.height, 0xffA0A0A0); + this.isTextFocused = true; + if (resetOnClick) + { + this.text = this.parentGui.getInitialText(this); + } + this.parentGui.onTextChanged(this, this.text); + return true; + } else + { + this.isTextFocused = false; + return false; + } + } + + public int getMaxLength() + { + return maxLength; + } + + public interface ITextBoxCallback + { + + boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player); + + void onTextChanged(GuiElementTextBox textBox, String newText); + + String getInitialText(GuiElementTextBox textBox); + + int getTextColor(GuiElementTextBox textBox); + + void onIntruderInteraction(GuiElementTextBox textBox); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTexturedButton.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTexturedButton.java new file mode 100644 index 00000000..e5f53ca7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTexturedButton.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiElementTexturedButton extends GuiButton +{ + + private final ResourceLocation texture; + private final int bWidth, bHeight; + + public GuiElementTexturedButton(int par1, int par2, int par3, int par4, int par5, ResourceLocation texture, int width, int height) + { + super(par1, par2, par3, par4, par5, ""); + this.texture = texture; + this.bWidth = width; + this.bHeight = height; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.visible) + { + final FontRenderer var4 = par1Minecraft.fontRenderer; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + this.getHoverState(this.hovered); + par1Minecraft.renderEngine.bindTexture(this.texture); + this.drawTexturedModalRect(this.x, this.y, 0, 0, this.bWidth, this.bHeight); + this.mouseDragged(par1Minecraft, par2, par3); + int var6 = 14737632; + + if (!this.enabled) + { + var6 = -6250336; + } else if (this.hovered) + { + var6 = 16777120; + } + + this.drawCenteredString(var4, this.displayString, this.x + this.width / 2, this.y + (this.height - 8) / 2, var6); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTurnPageButton.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTurnPageButton.java new file mode 100644 index 00000000..1bce050a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTurnPageButton.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiElementTurnPageButton extends GuiButton +{ + + private final boolean nextPage; + private static final ResourceLocation background = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/bookleft.png"); + + public GuiElementTurnPageButton(int par1, int par2, int par3, boolean par4) + { + super(par1, par2, par3, 23, 13, ""); + this.nextPage = par4; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.visible) + { + boolean var4 = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + par1Minecraft.getTextureManager().bindTexture(GuiElementTurnPageButton.background); + int var5 = 0; + int var6 = 192; + + if (var4) + { + var5 += 23; + } + + if (!this.nextPage) + { + var6 += 13; + } + + this.drawTexturedModalRect(this.x, this.y, var5, var6, 23, 13); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/Overlay.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/Overlay.java new file mode 100644 index 00000000..65b89bec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/Overlay.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import org.lwjgl.opengl.GL11; + +public class Overlay +{ + + /** + * Get the player's spaceship height off ground + * + * @param player thePlayer + * @return position of player's spaceship + */ + protected static int getPlayerPositionY(EntityPlayer player) + { + if (player.getRidingEntity() != null && player.getRidingEntity() instanceof EntityTier1Rocket) + { + return (int) Math.floor(((EntityTier1Rocket) player.getRidingEntity()).posY); + } + + return (int) Math.floor(player.posY); + } + + /** + * Draw a textured rectangle at the specified position + * + * @param par1 xpos + * @param par2 ypos + * @param par3 u + * @param par4 v + * @param par5 width + * @param par6 height + */ + protected static void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6) + { + final float var7 = 0.00390625F; + final float var8 = 0.00390625F; + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(par1 + 0, par2 + par6, 0.0).tex((par3 + 0) * var7, (par4 + par6) * var8).endVertex(); + worldRenderer.pos(par1 + par5, par2 + par6, 0.0).tex((par3 + par5) * var7, (par4 + par6) * var8).endVertex(); + worldRenderer.pos(par1 + par5, par2 + 0, 0.0).tex((par3 + par5) * var7, (par4 + 0) * var8).endVertex(); + worldRenderer.pos(par1 + 0, par2 + 0, 0.0).tex((par3 + 0) * var7, (par4 + 0) * var8).endVertex(); + tess.draw(); + } + + /** + * Draws a rectangle with middle at point specified + * + * @param var1 x + * @param var3 y + * @param var5 depth + * @param var7 width + * @param var9 height + */ + protected static void drawCenteringRectangle(double var1, double var3, double var5, double var7, double var9) + { + var7 *= 0.5D; + var9 *= 0.5D; + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(var1 - var7, var3 + var9, var5).tex(0.0D, 1.0D).endVertex(); + worldRenderer.pos(var1 + var7, var3 + var9, var5).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(var1 + var7, var3 - var9, var5).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(var1 - var7, var3 - var9, var5).tex(0.0D, 0.0D).endVertex(); + tess.draw(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayDockingRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayDockingRocket.java new file mode 100644 index 00000000..dcb0493a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayDockingRocket.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OverlayDockingRocket extends Overlay +{ + + /** + * Render the GUI when player is docking a vehicle + */ + public static void renderDockingOverlay(Minecraft mc, long ticks) + { + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int width = scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + + if (mc.player.getRidingEntity() instanceof EntityAutoRocket) + { + EntityAutoRocket rocket = (EntityAutoRocket) mc.player.getRidingEntity(); + + if (rocket.launchPhase == EnumLaunchPhase.LANDING.ordinal() && rocket.targetVec != null) + { + double dX = Math.round((rocket.posX - rocket.targetVec.getX()) * 100.0D) / 100.0D; + double dY = Math.round((rocket.posY - rocket.targetVec.getY()) * 100.0D) / 100.0D; + double dZ = Math.round((rocket.posZ - rocket.targetVec.getZ()) * 100.0D) / 100.0D; + String dXStr = String.valueOf(dX); + String dYStr = String.valueOf(dY); + String dZStr = String.valueOf(dZ); + + double targetMotionY = Math.round(Math.max((rocket.posY - rocket.targetVec.getY()) / -100.0D, -0.9D) * 100.0D) / 100.0D; + double currentMotionY = Math.round(rocket.motionY * 100.0D) / 100.0D; + double dMY = Math.floor((targetMotionY - currentMotionY) * 300); + int dMotionY = (int) Math.max(1, Math.min(255, dMY)); + int dMotionYN = (int) Math.max(1, Math.min(255, -dMY)); + String targetMotionYStr = GCCoreUtil.translate("gui.docking_rocket.target_vel.name") + ": " + String.format("%.2f", targetMotionY); + String currentMotionYStr = GCCoreUtil.translate("gui.docking_rocket.current_vel.name") + ": " + String.format("%.2f", currentMotionY); + + int red = ColorUtil.to32BitColor(dMY > 0 ? 0 : dMotionYN, 255, 255, 255); + int green = ColorUtil.to32BitColor(dMY < 0 ? 0 : dMotionY, 255, 255, 255); + int grey = ColorUtil.to32BitColor(255, 220, 220, 220); + +// if (dMY > 25) +// { +// String warning = GCCoreUtil.translateWithFormat("gui.docking_rocket.warning.name.0", GameSettings.getKeyDisplayString(KeyHandlerClient.spaceKey.getKeyCode())); +// mc.fontRenderer.drawString(warning, width / 2 - mc.fontRenderer.getStringWidth(warning) / 2, height / 3 - 50, green); +// } +// else if (dMY < -25) +// { +// String warning2 = GCCoreUtil.translateWithFormat("gui.docking_rocket.warning.name.1", GameSettings.getKeyDisplayString(KeyHandlerClient.leftShiftKey.getKeyCode())); +// mc.fontRenderer.drawString(warning2, width / 2 - mc.fontRenderer.getStringWidth(warning2) / 2, height / 3 - 35, red); +// } + + mc.fontRenderer.drawString(targetMotionYStr, width - mc.fontRenderer.getStringWidth(targetMotionYStr) - 50, height / 3 + 50, grey); + mc.fontRenderer.drawString(currentMotionYStr, width - mc.fontRenderer.getStringWidth(currentMotionYStr) - 50, height / 3 + 35, grey); + + mc.fontRenderer.drawString(GCCoreUtil.translate("gui.docking_rocket.distance_from.name"), 50, height / 3 + 15, grey); + mc.fontRenderer.drawString("X: " + dXStr, 50, height / 3 + 35, Math.abs(dX) > 15 ? red : grey); + mc.fontRenderer.drawString("Y: " + dYStr, 50, height / 3 + 45, Math.abs(dY) > 50 || Math.abs(dY) < 1.9 ? grey : ticks / 10 % 2 == 0 ? red : grey); + mc.fontRenderer.drawString("Z: " + dZStr, 50, height / 3 + 55, Math.abs(dZ) > 15 ? red : grey); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLander.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLander.java new file mode 100644 index 00000000..d3c043e6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLander.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.settings.GameSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OverlayLander extends Overlay +{ + + /** + * Render the GUI when player is in inventory + */ + public static void renderLanderOverlay(Minecraft mc, long ticks) + { + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int width = scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + + GlStateManager.pushMatrix(); + GlStateManager.scale(2.0F, 2.0F, 0.0F); + + if (mc.player.getRidingEntity().motionY < -2.0) + { + mc.fontRenderer.drawString(GCCoreUtil.translate("gui.warning"), width / 4 - mc.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.warning")) / 2, height / 8 - 20, + ColorUtil.to32BitColor(255, 255, 0, 0)); + final int alpha = (int) (200 * (Math.sin(ticks) * 0.5F + 0.5F)) + 5; + final String press1 = GCCoreUtil.translate("gui.lander.warning2"); + final String press2 = GCCoreUtil.translate("gui.lander.warning3"); + mc.fontRenderer.drawString(press1 + GameSettings.getKeyDisplayString(KeyHandlerClient.spaceKey.getKeyCode()) + press2, + width / 4 - mc.fontRenderer.getStringWidth(press1 + GameSettings.getKeyDisplayString(KeyHandlerClient.spaceKey.getKeyCode()) + press2) / 2, height / 8, + ColorUtil.to32BitColor(alpha, alpha, alpha, alpha)); + } + + GlStateManager.popMatrix(); + + if (mc.player.getRidingEntity().motionY != 0.0D) + { + String string = GCCoreUtil.translate("gui.lander.velocity") + ": " + Math.round(((EntityLander) mc.player.getRidingEntity()).motionY * 1000) / 100.0D + " " + + GCCoreUtil.translate("gui.lander.velocityu"); + int color = + ColorUtil.to32BitColor(255, (int) Math.floor(Math.abs(mc.player.getRidingEntity().motionY) * 51.0D), 255 - (int) Math.floor(Math.abs(mc.player.getRidingEntity().motionY) * 51.0D), 0); + mc.fontRenderer.drawString(string, width / 2 - mc.fontRenderer.getStringWidth(string) / 2, height / 3, color); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLaunchCountdown.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLaunchCountdown.java new file mode 100644 index 00000000..729d45b9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLaunchCountdown.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OverlayLaunchCountdown extends Overlay +{ + + public static void renderCountdownOverlay(Minecraft mc) + { + GlStateManager.disableLighting(); + int count = ((EntitySpaceshipBase) mc.player.getRidingEntity()).timeUntilLaunch / 2; + + count = (int) Math.floor(count / 10.0F); + + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int width = scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + + GlStateManager.pushMatrix(); + + if (count <= 10) + { + GlStateManager.scale(4.0F, 4.0F, 0.0F); + mc.fontRenderer.drawString(String.valueOf(count), width / 8 - mc.fontRenderer.getStringWidth(String.valueOf(count)) / 2, height / 20, ColorUtil.to32BitColor(255, 255, 0, 0)); + } else + { + GlStateManager.scale(2.0F, 2.0F, 0.0F); + mc.fontRenderer.drawString(String.valueOf(count), width / 4 - mc.fontRenderer.getStringWidth(String.valueOf(count)) / 2, height / 8, ColorUtil.to32BitColor(255, 255, 0, 0)); + } + + GlStateManager.popMatrix(); + GlStateManager.enableLighting(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenTanks.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenTanks.java new file mode 100644 index 00000000..3c163291 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenTanks.java @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class OverlayOxygenTanks extends Overlay +{ + + private final static ResourceLocation guiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + + /** + * Render the GUI that displays oxygen level in tanks + */ + public static void renderOxygenTankIndicator(Minecraft mc, int heatLevel, int oxygenInTank1, int oxygenInTank2, boolean right, boolean top, boolean invalid) + { + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int i = scaledresolution.getScaledWidth(); + final int j = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.depthMask(false); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableAlpha(); + mc.renderEngine.bindTexture(OverlayOxygenTanks.guiTexture); + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GlStateManager.enableDepth(); + GlStateManager.enableAlpha(); + GlStateManager.disableLighting(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + int minLeftX = 0; + int maxLeftX = 0; + int minRightX = 0; + int maxRightX = 0; + double bottomY = 0; + double topY = 0; + double zLevel = -190.0D; + + if (right) + { + minLeftX = i - 59; + maxLeftX = i - 40; + minRightX = i - 39; + maxRightX = i - 20; + } else + { + minLeftX = 10; + maxLeftX = 29; + minRightX = 30; + maxRightX = 49; + } + + if (top) + { + topY = 10.5; + } else + { + topY = j - 57; + } + + bottomY = topY + 46.5; + + float texMod = 0.00390625F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX, bottomY, zLevel).tex(66 * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(minLeftX + 9, bottomY, zLevel).tex((66 + 9) * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(minLeftX + 9, topY, zLevel).tex((66 + 9) * texMod, 47 * 2 * texMod).endVertex(); + worldRenderer.pos(minLeftX, topY, zLevel).tex(66 * texMod, 47 * 2 * texMod).endVertex(); + tessellator.draw(); + + int heatLevelScaled = Math.min(Math.max(heatLevel, 1), 45); + int heatLeveLScaledMax = Math.min(heatLevelScaled + 2, 45); + int heatLevelScaledMin = Math.max(heatLeveLScaledMax - 2, 0); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX + 1, bottomY - heatLevelScaledMin, zLevel).tex(76 * texMod, (48 + 45 - heatLevelScaled) * texMod).endVertex(); + worldRenderer.pos(minLeftX + 8, bottomY - heatLevelScaledMin, zLevel).tex((76 + 7) * texMod, (48 + 45 - heatLevelScaled) * texMod).endVertex(); + worldRenderer.pos(minLeftX + 8, bottomY - heatLeveLScaledMax, zLevel).tex((76 + 7) * texMod, (48 + 45 - heatLevelScaled) * texMod).endVertex(); + worldRenderer.pos(minLeftX + 1, bottomY - heatLeveLScaledMax, zLevel).tex(76 * texMod, (48 + 45 - heatLevelScaled) * texMod).endVertex(); + tessellator.draw(); + + if (invalid) + { + GlStateManager.color(1, 0, 0); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX - 5, bottomY - heatLevelScaledMin + 3, zLevel).tex(84 * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(minLeftX - 1, bottomY - heatLevelScaledMin + 3, zLevel).tex((84 + 5) * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(minLeftX - 1, bottomY - heatLeveLScaledMax - 3, zLevel).tex((84 + 5) * texMod, (47 + 9) * texMod).endVertex(); + worldRenderer.pos(minLeftX - 5, bottomY - heatLeveLScaledMax - 3, zLevel).tex(84 * texMod, (47 + 9) * texMod).endVertex(); + tessellator.draw(); + GlStateManager.color(1, 1, 1); + } + + minLeftX += 10; + maxLeftX += 10; + minRightX += 10; + maxRightX += 10; + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minRightX, bottomY, zLevel).tex(85 * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(maxRightX, bottomY, zLevel).tex((85 + 19) * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(maxRightX, topY, zLevel).tex((85 + 19) * texMod, 0 * texMod).endVertex(); + worldRenderer.pos(minRightX, topY, zLevel).tex(85 * texMod, 0 * texMod).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX, bottomY, zLevel).tex(85 * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(maxLeftX, bottomY, zLevel).tex((85 + 19) * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(maxLeftX, topY, zLevel).tex((85 + 19) * texMod, 0 * texMod).endVertex(); + worldRenderer.pos(minLeftX, topY, zLevel).tex(85 * texMod, 0 * texMod).endVertex(); + tessellator.draw(); + GlStateManager.depthMask(true); + + if (oxygenInTank1 > 0) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX + 1, topY + 1 + oxygenInTank1 / 2, zLevel).tex(105 * 0.00390625F, oxygenInTank1 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxLeftX - 1, topY + 1 + oxygenInTank1 / 2, zLevel).tex((105 + 17) * 0.00390625F, oxygenInTank1 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxLeftX - 1, topY + 1, zLevel).tex((105 + 17) * 0.00390625F, 1 * 0.00390625F).endVertex(); + worldRenderer.pos(minLeftX + 1, topY + 1, zLevel).tex(105 * 0.00390625F, 1 * 0.00390625F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX, topY + 1 + oxygenInTank1 / 2, zLevel).tex(66 * 0.00390625F, oxygenInTank1 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxLeftX - 1, topY + 1 + oxygenInTank1 / 2, zLevel).tex((66 + 17) * 0.00390625F, oxygenInTank1 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxLeftX - 1, topY + 1 + oxygenInTank1 / 2 - 1, zLevel).tex((66 + 17) * 0.00390625F, 1 * 0.00390625F).endVertex(); + worldRenderer.pos(minLeftX, topY + 1 + oxygenInTank1 / 2 - 1, zLevel).tex(66 * 0.00390625F, 1 * 0.00390625F).endVertex(); + tessellator.draw(); + } + + if (oxygenInTank2 > 0) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minRightX + 1, topY + 1 + oxygenInTank2 / 2, 0).tex(105 * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxRightX - 1, topY + 1 + oxygenInTank2 / 2, 0).tex((105 + 17) * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxRightX - 1, topY + 1, 0).tex((105 + 17) * 0.00390625F, 1 * 0.00390625F).endVertex(); + worldRenderer.pos(minRightX + 1, topY + 1, 0).tex(105 * 0.00390625F, 1 * 0.00390625F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minRightX, topY + 1 + oxygenInTank2 / 2, 0).tex(66 * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxRightX - 1, topY + 1 + oxygenInTank2 / 2, 0).tex((66 + 17) * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxRightX - 1, topY + 1 + oxygenInTank2 / 2 - 1, 0).tex((66 + 17) * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(minRightX, topY + 1 + oxygenInTank2 / 2 - 1, 0).tex(66 * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + tessellator.draw(); + } + + if (invalid) + { + String value = GCCoreUtil.translate("gui.warning.invalid_thermal"); + mc.fontRenderer.drawString(value, minLeftX - 18 - mc.fontRenderer.getStringWidth(value), (int) bottomY - heatLevelScaled - mc.fontRenderer.FONT_HEIGHT / 2 - 1, + ColorUtil.to32BitColor(255, 255, 10, 10)); + } + GlStateManager.disableBlend(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenWarning.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenWarning.java new file mode 100644 index 00000000..009fd0f4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenWarning.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OverlayOxygenWarning extends Overlay +{ + + /** + * Render the GUI when player is in inventory + */ + public static void renderOxygenWarningOverlay(Minecraft mc, long ticks) + { + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int width = scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + GlStateManager.enableColorMaterial(); + GlStateManager.pushMatrix(); + GlStateManager.scale(2.0F, 2.0F, 0.0F); + GlStateManager.enableBlend(); + mc.fontRenderer.drawString(GCCoreUtil.translate("gui.warning"), width / 4 - mc.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.warning")) / 2, height / 8 - 20, + ColorUtil.to32BitColor(255, 255, 0, 0)); + final int alpha = (int) (200 * (Math.sin(ticks / 1.5F) * 0.5F + 0.5F)) + 5; + mc.fontRenderer.drawString(GCCoreUtil.translate("gui.oxygen.warning"), width / 4 - mc.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.oxygen.warning")) / 2, height / 8, + ColorUtil.to32BitColor(alpha, 255, 0, 0)); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayRocket.java new file mode 100644 index 00000000..c2ab161d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayRocket.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class OverlayRocket extends Overlay +{ + + /** + * Render the GUI when player is in inventory + */ + public static void renderSpaceshipOverlay(Minecraft mc, ResourceLocation guiTexture) + { + if (guiTexture == null) + { + return; + } + + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(guiTexture); + + float var1 = 0F; + float var2 = height / 2 - 170 / 2; + float var3 = 0.0F; + float var3b = 0.0F; + float var4 = 0.0F; + float var5 = 1.0F; + float var6 = 1.0F; + float var7 = 1.0F; + float var8 = 1.0F; + float sizeScale = 0.65F; + + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(var1 + 0, var2 + 242.0F * sizeScale, 0.0).tex((var3 + 0) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + 20.0F * sizeScale, var2 + 242.0F * sizeScale, 0.0).tex((var3 + var5) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + 20.0F * sizeScale, var2 + 0, 0.0).tex((var3 + var5) * var7, (var4 + 0) * var8).endVertex(); + worldRenderer.pos(var1 + 0, var2 + 0, 0.0).tex((var3 + 0) * var7, (var4 + 0) * var8).endVertex(); + tess.draw(); + + GlStateManager.color(1.0F, 1.0F, 1.0F); + + Entity rocket = mc.player.getRidingEntity(); + float headOffset = 0; + if (rocket instanceof EntityTier1Rocket) + { + headOffset = 5F; + } + Render spaceshipRender = (Render) mc.getRenderManager().entityRenderMap.get(rocket.getClass()); + + final int y1 = height / 2 + 60 - (int) Math.floor(Overlay.getPlayerPositionY(mc.player) / 10.5F); + var1 = 2.5F; + var2 = y1; + var3 = 8; + var3b = 40; + var4 = 8; + var5 = 8; + var6 = 8; + var7 = 1.0F / 64.0F; + var8 = 1.0F / 64.0F; + + GlStateManager.pushMatrix(); + final int i = rocket.getBrightnessForRender(); + final int j = i % 65536; + final int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j / 1.0F, k / 1.0F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableColorMaterial(); + GlStateManager.translate(var1 + 4, var2 + 6, 50F); + GlStateManager.scale(5F, 5F, 5F); + GlStateManager.rotate(180F, 1, 0, 0); + GlStateManager.rotate(90F, 0, 1, 0); + + try + { + spaceshipRender.doRender(rocket.getClass().getConstructor(World.class).newInstance(mc.player.world), 0, 0, 0, 0, 0); + } catch (Exception e) + { + e.printStackTrace(); + } + + GlStateManager.popMatrix(); + + mc.renderEngine.bindTexture(ClientProxyCore.playerHead); + + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(770, 771); + GlStateManager.translate(0F, -12F + headOffset, 60F); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(var1 + 0, var2 + var6, 0.0).tex((var3 + 0) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + var5, var2 + var6, 0.0).tex((var3 + var5) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + var5, var2 + 0, 0.0).tex((var3 + var5) * var7, (var4 + 0) * var8).endVertex(); + worldRenderer.pos(var1 + 0, var2 + 0, 0.0).tex((var3 + 0) * var7, (var4 + 0) * var8).endVertex(); + tess.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(var1 + 0, var2 + var6, 0.0).tex((var3b + 0) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + var5, var2 + var6, 0.0).tex((var3b + var5) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + var5, var2 + 0, 0.0).tex((var3b + var5) * var7, (var4 + 0) * var8).endVertex(); + worldRenderer.pos(var1 + 0, var2 + 0, 0.0).tex((var3b + 0) * var7, (var4 + 0) * var8).endVertex(); + tess.draw(); + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlaySensorGlasses.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlaySensorGlasses.java new file mode 100644 index 00000000..1a277a0f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlaySensorGlasses.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import java.util.Iterator; +import micdoodle8.mods.galacticraft.api.item.ISensorGlassesArmor; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class OverlaySensorGlasses extends Overlay +{ + + private static final ResourceLocation hudTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/hud.png"); + private static final ResourceLocation indicatorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/indicator.png"); + public static final ResourceLocation altTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/sensor_mobs.png"); + + private static Minecraft minecraft = FMLClientHandler.instance().getClient(); + + private static int zoom = 0; + + /** + * Render the GUI that displays sensor glasses + */ + public static void renderSensorGlassesMain(ItemStack stack, EntityPlayer player, ScaledResolution resolution, float partialTicks) + { + OverlaySensorGlasses.zoom++; + + final float f = MathHelper.sin(OverlaySensorGlasses.zoom / 80.0F) * 0.1F + 0.1F; + + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(OverlaySensorGlasses.minecraft, OverlaySensorGlasses.minecraft.displayWidth, OverlaySensorGlasses.minecraft.displayHeight); + final int i = scaledresolution.getScaledWidth(); + final int k = scaledresolution.getScaledHeight(); + OverlaySensorGlasses.minecraft.entityRenderer.setupOverlayRendering(); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_ALPHA_TEST); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(OverlaySensorGlasses.hudTexture); + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(i / 2 - k - f * 80, k + f * 40, -90D).tex(0.0D, 1.0D).endVertex(); + worldRenderer.pos(i / 2 + k + f * 80, k + f * 40, -90D).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(i / 2 + k + f * 80, 0.0D - f * 40, -90D).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(i / 2 - k - f * 80, 0.0D - f * 40, -90D).tex(0.0D, 0.0D).endVertex(); + tessellator.draw(); + + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + public static void renderSensorGlassesValueableBlocks(ItemStack stack, EntityPlayer player, ScaledResolution resolution, float partialTicks) + { + final Iterator var51 = ClientProxyCore.valueableBlocks.iterator(); + double var52; + double var58; + double var59; + double var20; + double var21; + float var60; + + while (var51.hasNext()) + { + BlockVec3 coords = var51.next(); + + var52 = ClientProxyCore.playerPosX - coords.x - 0.5D; + var58 = ClientProxyCore.playerPosY - coords.y - 0.5D; + var59 = ClientProxyCore.playerPosZ - coords.z - 0.5D; + var60 = (float) Math.toDegrees(Math.atan2(var52, var59)); + var20 = Math.sqrt(var52 * var52 + var58 * var58 + var59 * var59) * 0.5D; + var21 = Math.sqrt(var52 * var52 + var59 * var59) * 0.5D; + + final ScaledResolution var5 = ClientUtil.getScaledRes(OverlaySensorGlasses.minecraft, OverlaySensorGlasses.minecraft.displayWidth, OverlaySensorGlasses.minecraft.displayHeight); + final int var6 = var5.getScaledWidth(); + final int var7 = var5.getScaledHeight(); + + boolean var2 = false; + + final EntityPlayerSP client = PlayerUtil.getPlayerBaseClientFromPlayer(OverlaySensorGlasses.minecraft.player, false); + + if (client != null) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(client); + var2 = stats.isUsingAdvancedGoggles(); + } + + OverlaySensorGlasses.minecraft.fontRenderer.drawString( + GCCoreUtil.translate("gui.sensor.advanced") + ": " + (var2 ? GCCoreUtil.translate("gui.sensor.advancedon") : GCCoreUtil.translate("gui.sensor.advancedoff")), var6 / 2 - 50, 4, + 0x03b88f); + + try + { + GL11.glPushMatrix(); + + if (var20 < 4.0D) + { + GL11.glColor4f(0.0F, 255F / 255F, 198F / 255F, (float) Math.min(1.0D, Math.max(0.2D, (var20 - 1.0D) * 0.1D))); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(OverlaySensorGlasses.indicatorTexture); + GL11.glRotatef(-var60 - ClientProxyCore.playerRotationYaw + 180.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslated(0.0D, var2 ? -var20 * 16 : -var21 * 16, 0.0D); + GL11.glRotatef(-(-var60 - ClientProxyCore.playerRotationYaw + 180.0F), 0.0F, 0.0F, 1.0F); + Overlay.drawCenteringRectangle(var6 / 2, var7 / 2, 1.0D, 8.0D, 8.0D); + } + } finally + { + GL11.glPopMatrix(); + } + } + } + + public static void preRenderMobs() + { + GL11.glEnable(GL11.GL_BLEND); +//TODO Enable these to see the entity through solid blocks - but would need a postRenderCallback to switch this off again otherwise everything is changed +// GL11.glDisable(GL11.GL_DEPTH_TEST); +// GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_ALPHA_TEST); + int i = 15728880; + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j / 1.0F, (float) k / 1.0F); + GL11.glTranslatef(0.0F, 0.045F, 0.0F); + GL11.glScalef(1.07F, 1.035F, 1.07F); + } + + public static void postRenderMobs() + { + GL11.glEnable(GL11.GL_ALPHA_TEST); +// GL11.glEnable(GL11.GL_DEPTH_TEST); +// GL11.glDepthMask(true); + } + + public static boolean overrideMobTexture() + { + EntityPlayer player = Minecraft.getMinecraft().player; + return (player != null && player.inventory.armorItemInSlot(3) != null && player.inventory.armorItemInSlot(3).getItem() instanceof ISensorGlassesArmor); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/CFPage.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/CFPage.java new file mode 100644 index 00000000..3c4eb52a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/CFPage.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class CFPage extends GuiTeleporting +{ + public CFPage() + { + super(1); + this.message = ""; + TickHandlerClient.teleportingGui = this; + } + + @Override + public void initGui() + { + super.initGui(); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + super.drawScreen(mouseX, mouseY, partialTicks); + ResourceLocation img = new ResourceLocation(Constants.MOD_ID_CORE, "textures/gui/landing.png"); + Minecraft.getMinecraft().renderEngine.bindTexture(img); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder vertexbuffer = tessellator.getBuffer(); + vertexbuffer.begin(7, DefaultVertexFormats.POSITION_TEX); + vertexbuffer.pos(0 + 0, 0 + height, zLevel).tex(0, 1).endVertex(); + vertexbuffer.pos(0 + width, 0 + height, zLevel).tex(1, 1).endVertex(); + vertexbuffer.pos(0 + width, 0 + 0, zLevel).tex(1, 0).endVertex(); + vertexbuffer.pos(0 + 0, 0 + 0, zLevel).tex(0, 0).endVertex(); + tessellator.draw(); + } + + @Override + public void updateScreen() + { + super.updateScreen(); + } + + @Override + public boolean doesGuiPauseGame() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/ConfigGuiFactoryCore.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/ConfigGuiFactoryCore.java new file mode 100644 index 00000000..c6dd8487 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/ConfigGuiFactoryCore.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import java.util.Set; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.fml.client.IModGuiFactory; +import net.minecraftforge.fml.client.config.GuiConfig; + +public class ConfigGuiFactoryCore implements IModGuiFactory +{ + + public static class CoreConfigGUI extends GuiConfig + { + + public CoreConfigGUI(GuiScreen parent) + { + super(parent, ConfigManagerCore.getConfigElements(), Constants.MOD_ID_CORE, false, false, GCCoreUtil.translate("gc.configgui.title")); + } + } + + @Override + public void initialize(Minecraft minecraftInstance) + { + + } + + @Override + public Set runtimeGuiCategories() + { + return null; + } + + public GuiScreen createConfigGui(GuiScreen arg0) + { + // TODO Forge 2282 addition! + return new CoreConfigGUI(arg0); + } + + public boolean hasConfigGui() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiCelestialSelection.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiCelestialSelection.java new file mode 100644 index 00000000..671d2e85 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiCelestialSelection.java @@ -0,0 +1,2434 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.ibm.icu.text.ArabicShaping; +import com.ibm.icu.text.ArabicShapingException; +import com.ibm.icu.text.Bidi; +import java.io.IOException; +import java.nio.FloatBuffer; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.event.client.CelestialBodyRenderEvent; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.IChildBody; +import micdoodle8.mods.galacticraft.api.galaxies.Moon; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.galaxies.SolarSystem; +import micdoodle8.mods.galacticraft.api.galaxies.Star; +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; +import micdoodle8.mods.galacticraft.api.world.SpaceStationType; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.BufferUtils; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.vector.Matrix4f; +import org.lwjgl.util.vector.Vector2f; +import org.lwjgl.util.vector.Vector3f; +import org.lwjgl.util.vector.Vector4f; + +public class GuiCelestialSelection extends GuiScreen +{ + + protected enum EnumView + { + PREVIEW, PROFILE + } + + protected enum EnumSelection + { + UNSELECTED, SELECTED, ZOOMED + } + + protected static final int MAX_SPACE_STATION_NAME_LENGTH = 32; + + protected float zoom = 0.0F; + protected float planetZoom = 0.0F; + protected boolean doneZooming = false; + protected float preSelectZoom = 0.0F; + protected Vector2f preSelectPosition = new Vector2f(); + protected static ResourceLocation guiMain0 = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialselection.png"); + protected static ResourceLocation guiMain1 = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialselection1.png"); + protected float ticksSinceSelectionF = 0; + protected float ticksSinceUnselectionF = -1; + protected float ticksSinceMenuOpenF = 0; + protected float ticksTotalF = 0; + @Deprecated + protected int ticksSinceSelection = (int) ticksSinceSelectionF; + @Deprecated + protected int ticksSinceUnselection = (int) ticksSinceUnselectionF; + @Deprecated + protected int ticksSinceMenuOpen = (int) ticksSinceMenuOpenF; + @Deprecated + protected int ticksTotal = (int) ticksTotalF; + protected int animateGrandchildren = 0; + protected Vector2f position = new Vector2f(0, 0); + protected Map planetPosMap = Maps.newHashMap(); + @Deprecated + protected Map celestialBodyTicks = Maps.newHashMap(); + protected CelestialBody selectedBody; + protected CelestialBody lastSelectedBody; + protected static int BORDER_SIZE = 0; + protected static int BORDER_EDGE_SIZE = 0; + protected int canCreateOffset = 24; + protected EnumView viewState = EnumView.PREVIEW; + protected EnumSelection selectionState = EnumSelection.UNSELECTED; + protected int zoomTooltipPos = 0; + protected Object selectedParent = GalacticraftCore.solarSystemSol; + protected final boolean mapMode; + public List possibleBodies; + + // Each home planet has a map of owner's names linked with their station + // data: + public Map> spaceStationMap = Maps.newHashMap(); + + protected String selectedStationOwner = ""; + protected int spaceStationListOffset = 0; + protected boolean renamingSpaceStation; + protected String renamingString = ""; + protected Vector2f translation = new Vector2f(0.0F, 0.0F); + protected boolean mouseDragging = false; + protected int lastMovePosX = -1; + protected int lastMovePosY = -1; + protected boolean errorLogged = false; + public boolean canCreateStations = false; + protected List bodiesToRender = Lists.newArrayList(); + + // String colours + protected static final int WHITE = ColorUtil.to32BitColor(255, 255, 255, 255); + protected static final int GREY5 = ColorUtil.to32BitColor(255, 150, 150, 150); + protected static final int GREY4 = ColorUtil.to32BitColor(255, 140, 140, 140); + protected static final int GREY3 = ColorUtil.to32BitColor(255, 120, 120, 120); + protected static final int GREY2 = ColorUtil.to32BitColor(255, 100, 100, 100); + protected static final int GREY1 = ColorUtil.to32BitColor(255, 80, 80, 80); + protected static final int GREY0 = ColorUtil.to32BitColor(255, 40, 40, 40); + protected static final int GREEN = ColorUtil.to32BitColor(255, 0, 255, 0); + protected static final int RED = ColorUtil.to32BitColor(255, 255, 0, 0); + protected static final int RED3 = ColorUtil.to32BitColor(255, 255, 100, 100); + protected static final int CYAN = ColorUtil.to32BitColor(255, 150, 200, 255); + + public GuiCelestialSelection(boolean mapMode, List possibleBodies, boolean canCreateStations) + { + this.mapMode = mapMode; + this.possibleBodies = possibleBodies; + this.canCreateStations = canCreateStations; + } + + @Override + public void initGui() + { + GuiCelestialSelection.BORDER_SIZE = this.width / 65; + GuiCelestialSelection.BORDER_EDGE_SIZE = GuiCelestialSelection.BORDER_SIZE / 4; + + for (SolarSystem solarSystem : GalaxyRegistry.getRegisteredSolarSystems().values()) + { + bodiesToRender.add(solarSystem.getMainStar()); + } + bodiesToRender.addAll(GalaxyRegistry.getRegisteredPlanets().values()); + bodiesToRender.addAll(GalaxyRegistry.getRegisteredMoons().values()); + bodiesToRender.addAll(GalaxyRegistry.getRegisteredSatellites().values()); + } + + protected String getGrandparentName() + { + if (this.selectedParent instanceof Planet) + { + SolarSystem parentSolarSystem = ((Planet) this.selectedParent).getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedName(); + } + } else if (this.selectedParent instanceof IChildBody) + { + Planet parentPlanet = ((IChildBody) this.selectedParent).getParentPlanet(); + + if (parentPlanet != null) + { + SolarSystem parentSolarSystem = parentPlanet.getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedName(); + } + } + } else if (this.selectedParent instanceof Star) + { + SolarSystem parentSolarSystem = ((Star) this.selectedParent).getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedParentGalaxyName(); + } + } else if (this.selectedParent instanceof SolarSystem) + { + return ((SolarSystem) this.selectedParent).getTranslatedParentGalaxyName(); + } + + return "Null"; + } + + protected int getSatelliteParentID(Satellite satellite) + { + return satellite.getParentPlanet().getDimensionID(); + } + + protected String getParentName() + { + if (this.selectedBody instanceof Planet) + { + SolarSystem parentSolarSystem = ((Planet) this.selectedBody).getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedName(); + } + } else if (this.selectedBody instanceof IChildBody) + { + Planet parentPlanet = ((IChildBody) this.selectedBody).getParentPlanet(); + + if (parentPlanet != null) + { + return parentPlanet.getTranslatedName(); + } + } else if (this.selectedBody instanceof Star) + { + SolarSystem parentSolarSystem = ((Star) this.selectedBody).getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedName(); + } + } else if (this.selectedParent != null) + { + if (this.selectedParent instanceof SolarSystem) + { + return ((SolarSystem) this.selectedParent).getTranslatedName(); + } + } + + return "Null"; + } + + protected float getScale(CelestialBody celestialBody) + { + return 3.0F * celestialBody.getRelativeDistanceFromCenter().unScaledDistance * (celestialBody instanceof Planet ? 25.0F : 1.0F / 5.0F); + } + + protected List getSiblings(CelestialBody celestialBody) + { + List bodyList = Lists.newArrayList(); + + if (celestialBody instanceof Planet) + { + SolarSystem solarSystem = ((Planet) celestialBody).getParentSolarSystem(); + + for (Planet planet : GalaxyRegistry.getRegisteredPlanets().values()) + { + SolarSystem solarSystem1 = planet.getParentSolarSystem(); + + if (solarSystem1 != null && solarSystem1.equals(solarSystem)) + { + bodyList.add(planet); + } + } + } else if (celestialBody instanceof IChildBody) + { + Planet planet = ((IChildBody) celestialBody).getParentPlanet(); + + for (Moon moon : GalaxyRegistry.getRegisteredMoons().values()) + { + Planet planet1 = moon.getParentPlanet(); + + if (planet1 != null && planet1.equals(planet)) + { + bodyList.add(moon); + } + } + + for (Satellite sat : GalaxyRegistry.getRegisteredSatellites().values()) + { + Planet planet1 = sat.getParentPlanet(); + + if (planet1 != null && planet1.equals(planet)) + { + bodyList.add(sat); + } + } + } + + Collections.sort(bodyList); + + return bodyList; + } + + protected List getChildren(Object object) + { + List bodyList = Lists.newArrayList(); + + if (object instanceof Planet) + { + List moons = GalaxyRegistry.getMoonsForPlanet((Planet) object); + bodyList.addAll(moons); + } else if (object instanceof SolarSystem) + { + List planets = GalaxyRegistry.getPlanetsForSolarSystem((SolarSystem) object); + bodyList.addAll(planets); + } + + Collections.sort(bodyList); + + return bodyList; + } + + protected float lerp(float min, float max, float val) + { + return min + val * (max - min); + } + + protected Vector2f lerpVec2(Vector2f v0, Vector2f v1, float t) + { + return new Vector2f(v0.x + t * (v1.x - v0.x), v0.y + t * (v1.y - v0.y)); + } + + protected float getZoomAdvanced() + { + if (this.ticksTotalF < 30) + { + float scale = Math.max(0.0F, Math.min(this.ticksTotalF / 30.0F, 1.0F)); + return this.lerp(-0.75F, 0.0F, (float) Math.pow(scale, 0.5F)); + } + + if (this.selectedBody == null || this.selectionState != EnumSelection.ZOOMED) + { + if (!this.doneZooming) + { + float unselectScale = this.lerp(this.zoom, this.preSelectZoom, Math.max(0.0F, Math.min(this.ticksSinceUnselectionF / 100.0F, 1.0F))); + + if (unselectScale <= this.preSelectZoom + 0.05F) + { + this.zoom = this.preSelectZoom; + this.ticksSinceUnselectionF = -1; + this.doneZooming = true; + } + + return unselectScale; + } + + return this.zoom; + } + + if (!this.doneZooming) + { + float f = this.lerp(this.zoom, 12, Math.max(0.0F, Math.min((this.ticksSinceSelectionF - 20) / 40.0F, 1.0F))); + + if (f >= 11.95F) + { + this.doneZooming = true; + } + + return f; + } + + return 12 + this.planetZoom; + } + + protected Vector2f getTranslationAdvanced(float partialTicks) + { + if (this.selectedBody == null) + { + if (this.ticksSinceUnselectionF > 0) + { + float f0 = Math.max(0.0F, Math.min(this.ticksSinceUnselectionF / 100.0F, 1.0F)); + if (f0 >= 0.999999F) + { + this.ticksSinceUnselectionF = 0; + } + return this.lerpVec2(this.position, this.preSelectPosition, f0); + } + + return new Vector2f(this.position.x + translation.x, this.position.y + translation.y); + } + + if (!this.isZoomed()) + { + if (this.selectedBody instanceof IChildBody) + { + Vector3f posVec = this.getCelestialBodyPosition(((IChildBody) this.selectedBody).getParentPlanet()); + return new Vector2f(posVec.x, posVec.y); + } + + return new Vector2f(this.position.x + translation.x, this.position.y + translation.y); + } + + Vector2f pos = this.position; + + if (this.lastSelectedBody != null) + { + Vector3f pos3 = this.getCelestialBodyPosition(this.lastSelectedBody); + pos.x = pos3.x; + pos.y = pos3.y; + } + + Vector3f posVec = this.getCelestialBodyPosition(this.selectedBody); + return this.lerpVec2(pos, new Vector2f(posVec.x, posVec.y), Math.max(0.0F, Math.min((this.ticksSinceSelectionF - 18) / 7.5F, 1.0F))); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + // Override and do nothing, so it isn't possible to exit the GUI + if (this.mapMode) + { + super.keyTyped(keyChar, keyID); + } + + if (keyID == 1) + { + if (this.selectedBody != null) + { + this.unselectCelestialBody(); + } + } + + if (this.renamingSpaceStation) + { + if (keyID == Keyboard.KEY_BACK) + { + if (this.renamingString != null && this.renamingString.length() > 0) + { + String toBeParsed = this.renamingString.substring(0, this.renamingString.length() - 1); + + if (this.isValid(toBeParsed)) + { + this.renamingString = toBeParsed; + } else + { + this.renamingString = ""; + } + } + } else if (keyChar == 22) + { + String pastestring = GuiScreen.getClipboardString(); + + if (pastestring == null) + { + pastestring = ""; + } + + if (this.isValid(this.renamingString + pastestring)) + { + this.renamingString = this.renamingString + pastestring; + this.renamingString = this.renamingString.substring(0, Math.min(String.valueOf(this.renamingString).length(), MAX_SPACE_STATION_NAME_LENGTH)); + } + } else if (this.isValid(this.renamingString + keyChar)) + { + this.renamingString = this.renamingString + keyChar; + this.renamingString = this.renamingString.substring(0, Math.min(this.renamingString.length(), MAX_SPACE_STATION_NAME_LENGTH)); + } + + return; + } + + // Keyboard shortcut - teleport to dimension by pressing 'Enter' + if (keyID == Keyboard.KEY_RETURN) + { + this.teleportToSelectedBody(); + } + } + + public boolean isValid(String string) + { + return string.length() > 0 && ChatAllowedCharacters.isAllowedCharacter(string.charAt(string.length() - 1)); + + } + + protected boolean canCreateSpaceStation(CelestialBody atBody) + { + if (this.mapMode || ConfigManagerCore.disableSpaceStationCreation || !this.canCreateStations) + { + return false; + } + + if (!atBody.isReachable() || (this.possibleBodies != null && !this.possibleBodies.contains(atBody))) + { + // If parent body is unreachable, the satellite is also unreachable + return false; + } + + boolean foundRecipe = false; + for (SpaceStationType type : GalacticraftRegistry.getSpaceStationData()) + { + if (type.getWorldToOrbitID() == atBody.getDimensionID()) + { + foundRecipe = true; + } + } + + if (!foundRecipe) + { + return false; + } + + if (!ClientProxyCore.clientSpaceStationID.containsKey(atBody.getDimensionID())) + { + return true; + } + + int resultID = ClientProxyCore.clientSpaceStationID.get(atBody.getDimensionID()); + + return !(resultID != 0 && resultID != -1); + } + + protected void unselectCelestialBody() + { + this.selectionState = EnumSelection.UNSELECTED; + this.ticksSinceUnselectionF = 0; + this.lastSelectedBody = this.selectedBody; + this.selectedBody = null; + this.doneZooming = false; + this.selectedStationOwner = ""; + this.animateGrandchildren = 0; + } + + @Override + public void updateScreen() + { + if (this.ticksSinceMenuOpenF < 20) + { + Mouse.setGrabbed(false); + } + + if (!this.renamingSpaceStation && (this.selectedBody == null || !this.isZoomed())) + { + if (GameSettings.isKeyDown(KeyHandlerClient.leftKey)) + { + translation.x += -2.0F; + translation.y += -2.0F; + } + + if (GameSettings.isKeyDown(KeyHandlerClient.rightKey)) + { + translation.x += 2.0F; + translation.y += 2.0F; + } + + if (GameSettings.isKeyDown(KeyHandlerClient.upKey)) + { + translation.x += 2.0F; + translation.y += -2.0F; + } + + if (GameSettings.isKeyDown(KeyHandlerClient.downKey)) + { + translation.x += -2.0F; + translation.y += 2.0F; + } + } + } + + protected void teleportToSelectedBody() + { + if (this.selectedBody != null) + { + if (this.selectedBody.isReachable() && this.possibleBodies != null && this.possibleBodies.contains(this.selectedBody)) + { + try + { + String dimension; + int dimensionID; + + if (this.selectedBody instanceof Satellite) + { + if (this.spaceStationMap == null) + { + GalacticraftCore.logger.error("Please report as a BUG: spaceStationIDs was null."); + return; + } + Satellite selectedSatellite = (Satellite) this.selectedBody; + Integer mapping = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(this.selectedStationOwner).getStationDimensionID(); + // No need to check lowercase as selectedStationOwner is + // taken from keys. + if (mapping == null) + { + GalacticraftCore.logger.error("Problem matching player name in space station check: " + this.selectedStationOwner); + return; + } + dimensionID = mapping; + WorldProvider spacestation = WorldUtil.getProviderForDimensionClient(dimensionID); + if (spacestation != null) + { + dimension = "Space Station " + mapping; + } else + { + GalacticraftCore.logger.error("Failed to find a spacestation with dimension " + dimensionID); + return; + } + } else + { + dimensionID = this.selectedBody.getDimensionID(); + dimension = WorldUtil.getDimensionName(WorldUtil.getProviderForDimensionClient(dimensionID)); + } + + if (dimension.contains("$")) + { + this.mc.gameSettings.thirdPersonView = 0; + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_TELEPORT_ENTITY, GCCoreUtil.getDimensionID(mc.world), new Object[] {dimensionID})); + + if (dimensionID == 666) + { + mc.displayGuiScreen(new CFPage()); + } else + { + mc.displayGuiScreen(new GuiTeleporting(dimensionID)); + } + + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + + @Override + public void handleInput() throws IOException + { + this.translation.x = 0; + this.translation.y = 0; + super.handleInput(); + } + + @Override + protected void mouseClickMove(int x, int y, int lastButtonClicked, long timeSinceMouseClick) + { + super.mouseClickMove(x, y, lastButtonClicked, timeSinceMouseClick); + + if (mouseDragging && lastMovePosX != -1 && lastButtonClicked == 0) + { + int deltaX = x - lastMovePosX; + int deltaY = y - lastMovePosY; + float scollMultiplier = -Math.abs(this.zoom); + + if (this.zoom == -1.0F) + { + scollMultiplier = -1.5F; + } + + if (this.zoom >= -0.25F && this.zoom <= 0.15F) + { + scollMultiplier = -0.2F; + } + + if (this.zoom >= 0.15F) + { + scollMultiplier = -0.15F; + } + + translation.x += (deltaX - deltaY) * scollMultiplier * (ConfigManagerCore.invertMapMouseScroll ? -1.0F : 1.0F) * ConfigManagerCore.mapMouseScrollSensitivity * 0.2F; + translation.y += (deltaY + deltaX) * scollMultiplier * (ConfigManagerCore.invertMapMouseScroll ? -1.0F : 1.0F) * ConfigManagerCore.mapMouseScrollSensitivity * 0.2F; + } + + lastMovePosX = x; + lastMovePosY = y; + } + + @Override + protected void mouseReleased(int x, int y, int button) + { + super.mouseReleased(x, y, button); + + mouseDragging = false; + lastMovePosX = -1; + lastMovePosY = -1; + } + + @Override + protected void mouseClicked(int x, int y, int button) throws IOException + { + super.mouseClicked(x, y, button); + boolean clickHandled = false; + + final int LHS = GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE; + final int RHS = width - LHS; + final int TOP = LHS; + + if (this.selectedBody != null && x > LHS && x < LHS + 88 && y > TOP && y < TOP + 13) + { + this.unselectCelestialBody(); + return; + } + + if (!this.mapMode) + { + if (x >= RHS - 95 && x < RHS && y > TOP + 181 + canCreateOffset && y < TOP + 182 + 12 + canCreateOffset) + { + if (this.selectedBody != null) + { + SpaceStationRecipe recipe = WorldUtil.getSpaceStationRecipe(this.selectedBody.getDimensionID()); + if (recipe != null && this.canCreateSpaceStation(this.selectedBody)) + { + if (recipe.matches(this.mc.player, false) || this.mc.player.capabilities.isCreativeMode) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_BIND_SPACE_STATION_ID, GCCoreUtil.getDimensionID(this.mc.world), new Object[] {this.selectedBody.getDimensionID()})); + // Zoom in on Overworld to show the new SpaceStation + // if not already zoomed + if (!this.isZoomed()) + { + this.selectionState = EnumSelection.ZOOMED; + this.preSelectZoom = this.zoom; + this.preSelectPosition = this.position; + this.ticksSinceSelectionF = 0; + this.doneZooming = false; + } + return; + } + + clickHandled = true; + } + } + } + } + + if (this.mapMode) + { + if (x > RHS - 88 && x < RHS && y > TOP && y < TOP + 13) + { + this.mc.displayGuiScreen(null); + this.mc.setIngameFocus(); + clickHandled = true; + } + } + + if (this.selectedBody != null && !this.mapMode) + { + if (x > RHS - 88 && x < RHS && y > TOP && y < TOP + 13) + { + if (!(this.selectedBody instanceof Satellite) || !this.selectedStationOwner.equals("")) + { + this.teleportToSelectedBody(); + } + + clickHandled = true; + } + } + + // Need unscaled mouse coords + int mouseX = Mouse.getX(); + int mouseY = Mouse.getY() * -1 + Minecraft.getMinecraft().displayHeight - 1; + + if (this.selectedBody instanceof Satellite) + { + if (this.renamingSpaceStation) + { + if (x >= width / 2 - 90 && x <= width / 2 + 90 && y >= this.height / 2 - 38 && y <= this.height / 2 + 38) + { + // Apply + if (x >= width / 2 - 90 + 17 && x <= width / 2 - 90 + 17 + 72 && y >= this.height / 2 - 38 + 59 && y <= this.height / 2 - 38 + 59 + 12) + { + String strName = PlayerUtil.getName(this.mc.player); + Satellite selectedSatellite = (Satellite) this.selectedBody; + Integer spacestationID = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(strName).getStationDimensionID(); + if (spacestationID == null) + { + spacestationID = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(strName.toLowerCase()).getStationDimensionID(); + } + if (spacestationID != null) + { + this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(strName).setStationName(this.renamingString); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_RENAME_SPACE_STATION, GCCoreUtil.getDimensionID(this.mc.world), new Object[] {this.renamingString, spacestationID})); + } + this.renamingSpaceStation = false; + } + // Cancel + if (x >= width / 2 && x <= width / 2 + 72 && y >= this.height / 2 - 38 + 59 && y <= this.height / 2 - 38 + 59 + 12) + { + this.renamingSpaceStation = false; + } + clickHandled = true; + } + } else + { + this.drawTexturedModalRect(width / 2 - 47, TOP, 94, 11, 0, 414, 188, 22, false, false); + + if (x >= width / 2 - 47 && x <= width / 2 - 47 + 94 && y >= TOP && y <= TOP + 11) + { + if (this.selectedStationOwner.length() != 0 && this.selectedStationOwner.equalsIgnoreCase(PlayerUtil.getName(this.mc.player))) + { + this.renamingSpaceStation = true; + this.renamingString = null; + clickHandled = true; + } + } + + Satellite selectedSatellite = (Satellite) this.selectedBody; + int stationListSize = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).size(); + int max = Math.min((this.height / 2) / 14, stationListSize); + + int xPos; + int yPos; + + // Up button + xPos = RHS - 85; + yPos = TOP + 45; + + if (x >= xPos && x <= xPos + 61 && y >= yPos && y <= yPos + 4) + { + if (this.spaceStationListOffset > 0) + { + this.spaceStationListOffset--; + } + clickHandled = true; + } + + // Down button + xPos = RHS - 85; + yPos = TOP + 49 + max * 14; + + if (x >= xPos && x <= xPos + 61 && y >= yPos && y <= yPos + 4) + { + if (max + spaceStationListOffset < stationListSize) + { + this.spaceStationListOffset++; + } + clickHandled = true; + } + + Iterator> it = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).entrySet().iterator(); + int i = 0; + int j = 0; + while (it.hasNext() && i < max) + { + Map.Entry e = it.next(); + if (j >= this.spaceStationListOffset) + { + int xOffset = 0; + + if (e.getKey().equalsIgnoreCase(this.selectedStationOwner)) + { + xOffset -= 5; + } + + xPos = RHS - 95 + xOffset; + yPos = TOP + 50 + i * 14; + + if (x >= xPos && x <= xPos + 93 && y >= yPos && y <= yPos + 12) + { + this.selectedStationOwner = e.getKey(); + clickHandled = true; + } + i++; + } + j++; + } + } + } + + int xPos = LHS + 2; + int yPos = TOP + 10; + + boolean planetZoomedMoon = this.isZoomed() && this.selectedParent instanceof Planet; + + // Top yellow button e.g. Sol + if (x >= xPos && x <= xPos + 93 && y >= yPos && y <= yPos + 12 && this.selectedParent instanceof CelestialBody) + { + if (this.selectedBody == null) + { + this.preSelectZoom = this.zoom; + this.preSelectPosition = this.position; + } + + EnumSelection selectionCountOld = this.selectionState; + + if (this.isSelected()) + { + this.unselectCelestialBody(); + } + + if (selectionCountOld == EnumSelection.ZOOMED) + { + this.selectionState = EnumSelection.SELECTED; + } + + this.selectedBody = (CelestialBody) this.selectedParent; + this.ticksSinceSelectionF = 0; + this.selectionState = EnumSelection.values()[this.selectionState.ordinal() + 1]; + if (this.isZoomed() && !planetZoomedMoon) + { + this.ticksSinceMenuOpenF = 0; + } + clickHandled = true; + } + + yPos += 22; + + // First blue button - normally the Selected Body (but it's the parent + // planet if this is a moon) + if (x >= xPos && x <= xPos + 93 && y >= yPos && y <= yPos + 12) + { + if (planetZoomedMoon) + { + if (this.selectedBody == null) + { + this.preSelectZoom = this.zoom; + this.preSelectPosition = this.position; + } + + EnumSelection selectionCountOld = this.selectionState; + if (this.isSelected()) + { + this.unselectCelestialBody(); + } + if (selectionCountOld == EnumSelection.ZOOMED) + { + this.selectionState = EnumSelection.SELECTED; + } + + this.selectedBody = (CelestialBody) this.selectedParent; + this.ticksSinceSelectionF = 0; + this.selectionState = EnumSelection.values()[this.selectionState.ordinal() + 1]; + } + clickHandled = true; + } + + if (!clickHandled) + { + List children = this.getChildren(this.isZoomed() && !(this.selectedParent instanceof Planet) ? this.selectedBody : this.selectedParent); + + yPos = TOP + 50; + for (CelestialBody child : children) + { + clickHandled = this.testClicked(child, child.equals(this.selectedBody) ? 5 : 0, yPos, x, y, false); + yPos += 14; + + if (!clickHandled && !this.isZoomed() && child.equals(this.selectedBody)) + { + List grandchildren = this.getChildren(child); + int gOffset = 0; + for (CelestialBody grandchild : grandchildren) + { + if (gOffset + 14 > this.animateGrandchildren) + { + break; + } + clickHandled = this.testClicked(grandchild, 10, yPos, x, y, true); + yPos += 14; + gOffset += 14; + if (clickHandled) + break; + } + yPos += this.animateGrandchildren - gOffset; + } + + if (clickHandled) + break; + } + } + + if (!clickHandled) + { + for (Map.Entry e : this.planetPosMap.entrySet()) + { + CelestialBody bodyClicked = e.getKey(); + if (this.selectedBody == null && bodyClicked instanceof IChildBody) + { + continue; + } + + float iconSize = e.getValue().z; // Z value holds size on-screen + + if (mouseX >= e.getValue().x - iconSize && mouseX <= e.getValue().x + iconSize && mouseY >= e.getValue().y - iconSize && mouseY <= e.getValue().y + iconSize) + { + if (this.selectedBody != bodyClicked || !this.isZoomed()) + { + if (this.isSelected() && this.selectedBody != bodyClicked) + { + + if (!(this.selectedBody instanceof IChildBody) || ((IChildBody) this.selectedBody).getParentPlanet() != bodyClicked) + { + this.unselectCelestialBody(); + } else if (this.isZoomed()) + { + this.selectionState = EnumSelection.SELECTED; + } + } + + if (bodyClicked != this.selectedBody) + { + this.lastSelectedBody = this.selectedBody; + this.animateGrandchildren = 0; + if (!(this.selectedBody instanceof IChildBody) || ((IChildBody) this.selectedBody).getParentPlanet() != bodyClicked) + { + // Only unzoom if the new selected body is not + // the child of the previously selected body + this.selectionState = EnumSelection.UNSELECTED; + } + } else + { + this.doneZooming = false; + this.planetZoom = 0.0F; + } + + this.selectedBody = bodyClicked; + this.ticksSinceSelectionF = 0; + this.selectionState = EnumSelection.values()[this.selectionState.ordinal() + 1]; + + if (bodyClicked instanceof IChildBody) + { + this.selectionState = EnumSelection.ZOOMED; + } + + if (this.isZoomed()) + { + this.ticksSinceMenuOpenF = 0; + } + + // Auto select if it's a spacestation and there is only + // a single entry + if (this.selectedBody instanceof Satellite && this.spaceStationMap.get(this.getSatelliteParentID((Satellite) this.selectedBody)).size() == 1) + { + Iterator> it = this.spaceStationMap.get(this.getSatelliteParentID((Satellite) this.selectedBody)).entrySet().iterator(); + this.selectedStationOwner = it.next().getKey(); + } + + clickHandled = true; + break; + } + } + } + } + + if (!clickHandled) + { + if (this.selectedBody != null) + { + this.unselectCelestialBody(); + this.planetZoom = 0.0F; + } + + mouseDragging = true; + } + + Object selectedParent = this.selectedParent; + + if (this.selectedBody instanceof IChildBody) + { + selectedParent = ((IChildBody) this.selectedBody).getParentPlanet(); + } else if (this.selectedBody instanceof Planet) + { + selectedParent = ((Planet) this.selectedBody).getParentSolarSystem(); + } else if (this.selectedBody == null) + { + selectedParent = GalacticraftCore.solarSystemSol; + } + + if (this.selectedParent != selectedParent) + { + this.selectedParent = selectedParent; + } + } + + protected boolean testClicked(CelestialBody body, int xOffset, int yPos, int x, int y, boolean grandchild) + { + int xPos = GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE + 2 + xOffset; + if (x >= xPos && x <= xPos + 93 && y >= yPos && y <= yPos + 12) + { + if (this.selectedBody != body || !this.isZoomed()) + { + if (this.selectedBody == null) + { + this.preSelectZoom = this.zoom; + this.preSelectPosition = this.position; + } + + EnumSelection selectionCountOld = this.selectionState; + + if (selectionCountOld == EnumSelection.ZOOMED) + { + this.selectionState = EnumSelection.SELECTED; + } + + this.doneZooming = false; + this.planetZoom = 0.0F; + + if (body != this.selectedBody) + { + // Selecting a different body + this.lastSelectedBody = this.selectedBody; + this.selectionState = EnumSelection.SELECTED; + } else + { + // Selecting the same body e.g. double-clicking + this.selectionState = EnumSelection.values()[this.selectionState.ordinal() + 1]; + } + + this.selectedBody = body; + this.ticksSinceSelectionF = 0; + if (grandchild) + this.selectionState = EnumSelection.ZOOMED; + if (this.isZoomed()) + { + this.ticksSinceMenuOpenF = 0; + } + this.animateGrandchildren = 0; + return true; + } + } + return false; + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + public void drawScreen(int mousePosX, int mousePosY, float partialTicks) + { + this.ticksSinceMenuOpenF += partialTicks; + this.ticksTotalF += partialTicks; + + if (this.selectedBody != null) + { + this.ticksSinceSelectionF += partialTicks; + } + + if (this.selectedBody == null && this.ticksSinceUnselectionF >= 0) + { + this.ticksSinceUnselectionF += partialTicks; + } + + if (Mouse.hasWheel()) + { + float wheel = Mouse.getDWheel() / (this.selectedBody == null ? 500.0F : 250.0F); + + if (wheel != 0) + { + if (this.selectedBody == null || (this.viewState == EnumView.PREVIEW && !this.isZoomed())) + { + // Minimum zoom increased from 0.55F to 1F to allow zoom out + // to see other solar systems + this.zoom = Math.min(Math.max(this.zoom + wheel * ((this.zoom + 2.0F)) / 10.0F, -1.0F), 3); + } else + { + this.planetZoom = Math.min(Math.max(this.planetZoom + wheel, -4.9F), 5); + } + } + } + + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_BLEND); + + Matrix4f camMatrix = new Matrix4f(); + Matrix4f.translate(new Vector3f(0.0F, 0.0F, -9000.0F), camMatrix, camMatrix); // See + // EntityRenderer.java:setupOverlayRendering + Matrix4f viewMatrix = new Matrix4f(); + viewMatrix.m00 = 2.0F / width; + viewMatrix.m11 = 2.0F / -height; + viewMatrix.m22 = -2.0F / 9000.0F; + viewMatrix.m30 = -1.0F; + viewMatrix.m31 = 1.0F; + viewMatrix.m32 = -2.0F; + + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + FloatBuffer fb = BufferUtils.createFloatBuffer(16 * Float.SIZE); + fb.rewind(); + viewMatrix.store(fb); + fb.flip(); + GL11.glMultMatrix(fb); + fb.clear(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + fb.rewind(); + camMatrix.store(fb); + fb.flip(); + fb.clear(); + GL11.glMultMatrix(fb); + + this.setBlackBackground(); + + GL11.glPushMatrix(); + Matrix4f worldMatrix = this.setIsometric(partialTicks); + float gridSize = 7000F; // 194.4F; + // TODO: Add dynamic map sizing, to allow the map to be small by default + // and expand when more distant solar systems are added. + this.drawGrid(gridSize, height / 3 / 3.5F); + this.drawCircles(); + GL11.glPopMatrix(); + + HashMap matrixMap = this.drawCelestialBodies(worldMatrix); + + this.planetPosMap.clear(); + + for (Map.Entry e : matrixMap.entrySet()) + { + Matrix4f planetMatrix = e.getValue(); + Matrix4f matrix0 = Matrix4f.mul(viewMatrix, planetMatrix, planetMatrix); + int x = (int) Math.floor((matrix0.m30 * 0.5 + 0.5) * Minecraft.getMinecraft().displayWidth); + int y = (int) Math.floor(Minecraft.getMinecraft().displayHeight - (matrix0.m31 * 0.5 + 0.5) * Minecraft.getMinecraft().displayHeight); + Vector2f vec = new Vector2f(x, y); + + Matrix4f scaleVec = new Matrix4f(); + scaleVec.m00 = matrix0.m00; + scaleVec.m11 = matrix0.m11; + scaleVec.m22 = matrix0.m22; + Vector4f newVec = Matrix4f.transform(scaleVec, new Vector4f(2, -2, 0, 0), null); + float iconSize = (newVec.y * (Minecraft.getMinecraft().displayHeight / 2.0F)) * (e.getKey() instanceof Star ? 2 : 1) * (e.getKey() == this.selectedBody ? 1.5F : 1.0F); + + this.planetPosMap.put(e.getKey(), new Vector3f(vec.x, vec.y, iconSize)); // Store + // size + // on-screen + // in + // Z-value + // for + // ease + } + + this.drawSelectionCursor(fb, worldMatrix); + + try + { + this.drawButtons(mousePosX, mousePosY); + } catch (Exception e) + { + if (!this.errorLogged) + { + this.errorLogged = true; + GalacticraftCore.logger.error("Problem identifying planet or dimension in an add on for Galacticraft!"); + GalacticraftCore.logger.error("(The problem is likely caused by a dimension ID conflict. Check configs for dimension clashes. You can also try disabling Mars space station in configs.)"); + e.printStackTrace(); + } + } + + this.drawBorder(); + GL11.glPopMatrix(); + + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + } + + protected void drawSelectionCursor(FloatBuffer fb, Matrix4f worldMatrix) + { + GL11.glPushMatrix(); + switch (this.selectionState) + { + case SELECTED: + if (this.selectedBody != null) + { + setupMatrix(this.selectedBody, worldMatrix, fb); + fb.clear(); + GL11.glScalef(1 / 15.0F, 1 / 15.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + float colMod = this.getZoomAdvanced() < 4.9F ? (float) (Math.sin(this.ticksSinceSelectionF / 2.0F) * 0.5F + 0.5F) : 1.0F; + GL11.glColor4f(1.0F, 1.0F, 0.0F, 1 * colMod); + int width = (int) Math.floor((getWidthForCelestialBody(this.selectedBody) / 2.0) * (this.selectedBody instanceof IChildBody ? 9.0 : 30.0)); + + this.drawTexturedModalRect(-width, -width, width * 2, width * 2, 266, 29, 100, 100, false, false); + } + break; + case ZOOMED: + if (this.selectedBody != null) + { + setupMatrix(this.selectedBody, worldMatrix, fb); + fb.clear(); + float div = (this.zoom + 1.0F - this.planetZoom); + float scale = Math.max(0.3F, 1.5F / (this.ticksSinceSelectionF / 5.0F)) * 2.0F / div; + GL11.glScalef(scale, scale, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + float colMod = this.getZoomAdvanced() < 4.9F ? (float) (Math.sin(this.ticksSinceSelectionF / 1.0F) * 0.5F + 0.5F) : 1.0F; + GL11.glColor4f(0.4F, 0.8F, 1.0F, 1 * colMod); + int width = getWidthForCelestialBody(this.selectedBody) * 13; + this.drawTexturedModalRect(-width, -width, width * 2, width * 2, 266, 29, 100, 100, false, false); + } + break; + default: + break; + } + GL11.glPopMatrix(); + } + + protected Vector3f getCelestialBodyPosition(CelestialBody cBody) + { + if (cBody == null) + return new Vector3f(0.0F, 0.0F, 0.0F); + if (cBody instanceof Star) + { + if (cBody.getTranslationKey().equalsIgnoreCase("star.sol")) + // Return zero vector for Sol, different location for other solar + // systems + { + return new Vector3f(); + } + return ((Star) cBody).getParentSolarSystem().getMapPosition().toVector3f(); + } + + float timeScale = cBody instanceof Planet ? 200.0F : 2.0F; + float distanceFromCenter = this.getScale(cBody); + Vector3f cBodyPos = new Vector3f((float) Math.sin(ticksTotalF / (timeScale * cBody.getRelativeOrbitTime()) + cBody.getPhaseShift()) * distanceFromCenter, (float) Math.cos(ticksTotalF / (timeScale * cBody.getRelativeOrbitTime()) + cBody.getPhaseShift()) * distanceFromCenter, 0); + + if (cBody instanceof Planet) + { + Vector3f parentVec = this.getCelestialBodyPosition(((Planet) cBody).getParentSolarSystem().getMainStar()); + return Vector3f.add(cBodyPos, parentVec, null); + } + + if (cBody instanceof IChildBody) + { + Vector3f parentVec = this.getCelestialBodyPosition(((IChildBody) cBody).getParentPlanet()); + return Vector3f.add(cBodyPos, parentVec, null); + } + + return cBodyPos; + } + + public int getWidthForCelestialBody(CelestialBody celestialBody) + { + boolean zoomed = celestialBody == this.selectedBody && this.selectionState == EnumSelection.SELECTED; + return celestialBody instanceof Star ? (zoomed ? 12 : 8) : celestialBody instanceof Planet ? (zoomed ? 6 : 4) : celestialBody instanceof IChildBody ? (zoomed ? 6 : 4) : 2; + } + + // public int getWidthForCelestialBody(CelestialBody celestialBody) + // { + // float size = celestialBody.getRelativeSize(); + // boolean zoomed = celestialBody == this.selectedBody && this.selectionState == EnumSelection.SELECTED; + // if (celestialBody instanceof Star) + // { + // return (int) (zoomed ? (12 * size) : (8 * size)); + // } else if (celestialBody instanceof Planet) + // { + // return (int) (zoomed ? (6 * size) : (4 * size)); + // } else if (celestialBody instanceof IChildBody) + // { + // return (int) (zoomed ? (6 * size) : (4 * size)); + // } else + // { + // return 2; + // } + // } + + public HashMap drawCelestialBodies(Matrix4f worldMatrix) + { + GL11.glColor3f(1.0F, 1.0F, 1.0F); + FloatBuffer fb = BufferUtils.createFloatBuffer(16 * Float.SIZE); + HashMap matrixMap = Maps.newHashMap(); + + for (CelestialBody body : bodiesToRender) + { + boolean hasParent = body instanceof IChildBody; + + float alpha = getAlpha(body); + + if (alpha > 0.0F) + { + GlStateManager.pushMatrix(); + Matrix4f worldMatrixLocal = setupMatrix(body, worldMatrix, fb, hasParent ? 0.25F : 1.0F); + CelestialBodyRenderEvent.Pre preEvent = new CelestialBodyRenderEvent.Pre(body, body.getBodyIcon(), 16); + MinecraftForge.EVENT_BUS.post(preEvent); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, alpha); + if (preEvent.celestialBodyTexture != null) + { + this.mc.renderEngine.bindTexture(preEvent.celestialBodyTexture); + } + + if (!preEvent.isCanceled()) + { + int size = getWidthForCelestialBody(body); + this.drawTexturedModalRect(-size / 2, -size / 2, size, size, 0, 0, preEvent.textureSize, preEvent.textureSize, false, false, preEvent.textureSize, preEvent.textureSize); + matrixMap.put(body, worldMatrixLocal); + } + + CelestialBodyRenderEvent.Post postEvent = new CelestialBodyRenderEvent.Post(body); + MinecraftForge.EVENT_BUS.post(postEvent); + GlStateManager.popMatrix(); + } + } + + return matrixMap; + } + + /** + * Draws gray border around outside of gui + */ + public void drawBorder() + { + Gui.drawRect(0, 0, GuiCelestialSelection.BORDER_SIZE, height, GREY2); + Gui.drawRect(width - GuiCelestialSelection.BORDER_SIZE, 0, width, height, GREY2); + Gui.drawRect(0, 0, width, GuiCelestialSelection.BORDER_SIZE, GREY2); + Gui.drawRect(0, height - GuiCelestialSelection.BORDER_SIZE, width, height, GREY2); + Gui.drawRect(GuiCelestialSelection.BORDER_SIZE, GuiCelestialSelection.BORDER_SIZE, GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE, height - GuiCelestialSelection.BORDER_SIZE, GREY0); + Gui.drawRect(GuiCelestialSelection.BORDER_SIZE, GuiCelestialSelection.BORDER_SIZE, width - GuiCelestialSelection.BORDER_SIZE, GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE, GREY0); + Gui.drawRect(width - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE, GuiCelestialSelection.BORDER_SIZE, width - GuiCelestialSelection.BORDER_SIZE, height - GuiCelestialSelection.BORDER_SIZE, GREY1); + Gui.drawRect(GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE, width - GuiCelestialSelection.BORDER_SIZE, height - GuiCelestialSelection.BORDER_SIZE, GREY1); + } + + public void drawButtons(int mousePosX, int mousePosY) + { + this.zLevel = 0.0F; + boolean handledSliderPos = false; + + final int LHS = GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE; + final int RHS = width - LHS; + final int TOP = LHS; + final int BOT = height - LHS; + + if (this.viewState == EnumView.PROFILE) + { + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(width / 2 - 43, TOP, 86, 15, 266, 0, 172, 29, false, false); + String str = GCCoreUtil.translate("gui.message.catalog.name").toUpperCase(); + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2, TOP + this.fontRenderer.FONT_HEIGHT / 2, WHITE); + + if (this.selectedBody != null) + { + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + + if (mousePosX > LHS && mousePosX < LHS + 88 && mousePosY > TOP && mousePosY < TOP + 13) + { + GL11.glColor3f(3.0F, 0.0F, 0.0F); + } else + { + GL11.glColor3f(0.9F, 0.2F, 0.2F); + } + + this.drawTexturedModalRect(LHS, TOP, 88, 13, 0, 392, 148, 22, false, false); + str = GCCoreUtil.translate("gui.message.back.name").toUpperCase(); + this.fontRenderer.drawString(str, LHS + 45 - this.fontRenderer.getStringWidth(str) / 2, TOP + this.fontRenderer.FONT_HEIGHT / 2 - 2, WHITE); + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + if (mousePosX > RHS - 88 && mousePosX < RHS && mousePosY > TOP && mousePosY < TOP + 13) + { + GL11.glColor3f(0.0F, 3.0F, 0.0F); + } else + { + GL11.glColor3f(0.2F, 0.9F, 0.2F); + } + + this.drawTexturedModalRect(RHS - 88, TOP, 88, 13, 0, 392, 148, 22, true, false); + + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(LHS, BOT - 13, 88, 13, 0, 392, 148, 22, false, true); + this.drawTexturedModalRect(RHS - 88, BOT - 13, 88, 13, 0, 392, 148, 22, true, true); + int menuTopLeft = TOP - 115 + height / 2 - 4; + int posX = LHS + Math.min((int) this.ticksSinceSelectionF * 10, 133) - 134; + int posX2 = (int) (LHS + Math.min(this.ticksSinceSelectionF * 1.25F, 15) - 15); + int fontPosY = menuTopLeft + GuiCelestialSelection.BORDER_EDGE_SIZE + this.fontRenderer.FONT_HEIGHT / 2 - 2; + this.drawTexturedModalRect(posX, menuTopLeft + 12, 133, 196, 0, 0, 266, 392, false, false); + + str = GCCoreUtil.translate("gui.message.daynightcycle.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 14, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".daynightcycle.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 25, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".daynightcycle.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 36, WHITE); + } + + str = GCCoreUtil.translate("gui.message.surfacegravity.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 50, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".surfacegravity.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 61, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".surfacegravity.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 72, WHITE); + } + + str = GCCoreUtil.translate("gui.message.surfacecomposition.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 88, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".surfacecomposition.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 99, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".surfacecomposition.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 110, WHITE); + } + + str = GCCoreUtil.translate("gui.message.atmosphere.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 126, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".atmosphere.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 137, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".atmosphere.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 148, WHITE); + } + + str = GCCoreUtil.translate("gui.message.meansurfacetemp.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 165, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".meansurfacetemp.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 176, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".meansurfacetemp.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 187, WHITE); + } + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(posX2, menuTopLeft + 12, 17, 199, 439, 0, 32, 399, false, false); + } + } else + { + String str; + // Catalog: + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(LHS, TOP, 74, 11, 0, 392, 148, 22, false, false); + str = GCCoreUtil.translate("gui.message.catalog.name").toUpperCase(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, LHS + 40 - fontRenderer.getStringWidth(str) / 2, TOP + 1, WHITE); + + int scale = (int) Math.min(95, this.ticksSinceMenuOpenF * 12.0F); + boolean planetZoomedNotMoon = this.isZoomed() && !(this.selectedParent instanceof Planet); + + // Parent frame: + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + this.drawTexturedModalRect(LHS - 95 + scale, TOP + 12, 95, 41, 0, 436, 95, 41, false, false); + str = planetZoomedNotMoon ? this.selectedBody.getTranslatedName() : this.getParentName(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, LHS + 9 - 95 + scale, TOP + 34, WHITE); + GL11.glColor4f(1, 1, 0, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + + // Grandparent frame: + this.drawTexturedModalRect(LHS + 2 - 95 + scale, TOP + 14, 93, 17, 95, 436, 93, 17, false, false); + str = planetZoomedNotMoon ? this.getParentName() : this.getGrandparentName(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, LHS + 7 - 95 + scale, TOP + 16, GREY3); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + + List children = this.getChildren(planetZoomedNotMoon ? this.selectedBody : this.selectedParent); + drawChildren(children, 0, 0, true); + + if (this.mapMode) + { + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + this.drawTexturedModalRect(RHS - 74, TOP, 74, 11, 0, 392, 148, 22, true, false); + str = GCCoreUtil.translate("gui.message.exit.name").toUpperCase(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, RHS - 40 - fontRenderer.getStringWidth(str) / 2, TOP + 1, WHITE); + } + + if (this.selectedBody != null) + { + // Right-hand bar (basic selectionState info) + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + + if (this.selectedBody instanceof Satellite) + { + Satellite selectedSatellite = (Satellite) this.selectedBody; + int stationListSize = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).size(); + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + int max = Math.min((this.height / 2) / 14, stationListSize); + this.drawTexturedModalRect(RHS - 95, TOP, 95, 53, this.selectedStationOwner.length() == 0 ? 95 : 0, 186, 95, 53, false, false); + if (this.spaceStationListOffset <= 0) + { + GL11.glColor4f(0.65F, 0.65F, 0.65F, 1); + } else + { + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + } + this.drawTexturedModalRect(RHS - 85, TOP + 45, 61, 4, 0, 239, 61, 4, false, false); + if (max + spaceStationListOffset >= stationListSize) + { + GL11.glColor4f(0.65F, 0.65F, 0.65F, 1); + } else + { + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + } + this.drawTexturedModalRect(RHS - 85, TOP + 49 + max * 14, 61, 4, 0, 239, 61, 4, false, true); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + + if (this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(this.selectedStationOwner) == null) + { + str = GCCoreUtil.translate("gui.message.select_ss.name"); + this.drawSplitString(str, RHS - 47, TOP + 20, 91, WHITE, false, false); + } else + { + str = GCCoreUtil.translate("gui.message.ss_owner.name"); + this.fontRenderer.drawString(str, RHS - 85, TOP + 18, WHITE); + str = this.selectedStationOwner; + this.fontRenderer.drawString(str, RHS - 47 - this.fontRenderer.getStringWidth(str) / 2, TOP + 30, WHITE); + } + + Iterator> it = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).entrySet().iterator(); + int i = 0; + int j = 0; + while (it.hasNext() && i < max) + { + Map.Entry e = it.next(); + + if (j >= this.spaceStationListOffset) + { + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + int xOffset = 0; + + if (e.getKey().equalsIgnoreCase(this.selectedStationOwner)) + { + xOffset -= 5; + } + + this.drawTexturedModalRect(RHS - 95 + xOffset, TOP + 50 + i * 14, 93, 12, 95, 464, 93, 12, true, false); + str = ""; + String str0 = e.getValue().getStationName(); + int point = 0; + while (this.fontRenderer.getStringWidth(str) < 80 && point < str0.length()) + { + str = str + str0.substring(point, point + 1); + point++; + } + if (this.fontRenderer.getStringWidth(str) >= 80) + { + str = str.substring(0, str.length() - 3); + str = str + "..."; + } + this.fontRenderer.drawString(str, RHS - 88 + xOffset, TOP + 52 + i * 14, WHITE); + i++; + } + j++; + } + } else + { + this.drawTexturedModalRect(RHS - 96, TOP, 96, 139, 63, 0, 96, 139, false, false); + } + + if (this.canCreateSpaceStation(this.selectedBody) && (!(this.selectedBody instanceof Satellite))) + { + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + int canCreateLength = Math.max(0, this.drawSplitString(GCCoreUtil.translate("gui.message.can_create_space_station.name"), 0, 0, 91, 0, true, true) - 2); + canCreateOffset = canCreateLength * this.fontRenderer.FONT_HEIGHT; + + this.drawTexturedModalRect(RHS - 95, TOP + 134, 93, 4, 159, 102, 93, 4, false, false); + for (int barY = 0; barY < canCreateLength; ++barY) + { + this.drawTexturedModalRect(RHS - 95, TOP + 138 + barY * this.fontRenderer.FONT_HEIGHT, 93, this.fontRenderer.FONT_HEIGHT, 159, 106, 93, this.fontRenderer.FONT_HEIGHT, false, false); + } + this.drawTexturedModalRect(RHS - 95, TOP + 138 + canCreateOffset, 93, 43, 159, 106, 93, 43, false, false); + this.drawTexturedModalRect(RHS - 79, TOP + 129, 61, 4, 0, 170, 61, 4, false, false); + + SpaceStationRecipe recipe = WorldUtil.getSpaceStationRecipe(this.selectedBody.getDimensionID()); + if (recipe != null) + { + GL11.glColor4f(0.0F, 1.0F, 0.1F, 1); + boolean validInputMaterials = true; + + int i = 0; + for (Map.Entry e : recipe.getInput().entrySet()) + { + Object next = e.getKey(); + int xPos = (int) (RHS - 95 + i * 93 / (double) recipe.getInput().size() + 5); + int yPos = TOP + 154 + canCreateOffset; + + if (next instanceof ItemStack) + { + int amount = getAmountInInventory((ItemStack) next); + RenderHelper.enableGUIStandardItemLighting(); + ItemStack toRender = ((ItemStack) next).copy(); + this.itemRender.renderItemAndEffectIntoGUI(toRender, xPos, yPos); + this.itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, toRender, xPos, yPos, null); + RenderHelper.disableStandardItemLighting(); + GL11.glEnable(GL11.GL_BLEND); + + if (mousePosX >= xPos && mousePosX <= xPos + 16 && mousePosY >= yPos && mousePosY <= yPos + 16) + { + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glPushMatrix(); + GL11.glTranslatef(0, 0, 300); + int k = this.fontRenderer.getStringWidth(((ItemStack) next).getDisplayName()); + int j2 = mousePosX - k / 2; + int k2 = mousePosY - 12; + int i1 = 8; + + if (j2 + k > this.width) + { + j2 -= (j2 - this.width + k); + } + + if (k2 + i1 + 6 > this.height) + { + k2 = this.height - i1 - 6; + } + + int j1 = ColorUtil.to32BitColor(190, 0, 153, 255); + this.drawGradientRect(j2 - 3, k2 - 4, j2 + k + 3, k2 - 3, j1, j1); + this.drawGradientRect(j2 - 3, k2 + i1 + 3, j2 + k + 3, k2 + i1 + 4, j1, j1); + this.drawGradientRect(j2 - 3, k2 - 3, j2 + k + 3, k2 + i1 + 3, j1, j1); + this.drawGradientRect(j2 - 4, k2 - 3, j2 - 3, k2 + i1 + 3, j1, j1); + this.drawGradientRect(j2 + k + 3, k2 - 3, j2 + k + 4, k2 + i1 + 3, j1, j1); + int k1 = ColorUtil.to32BitColor(170, 0, 153, 255); + int l1 = (k1 & 16711422) >> 1 | k1 & -16777216; + this.drawGradientRect(j2 - 3, k2 - 3 + 1, j2 - 3 + 1, k2 + i1 + 3 - 1, k1, l1); + this.drawGradientRect(j2 + k + 2, k2 - 3 + 1, j2 + k + 3, k2 + i1 + 3 - 1, k1, l1); + this.drawGradientRect(j2 - 3, k2 - 3, j2 + k + 3, k2 - 3 + 1, k1, k1); + this.drawGradientRect(j2 - 3, k2 + i1 + 2, j2 + k + 3, k2 + i1 + 3, l1, l1); + + this.fontRenderer.drawString(((ItemStack) next).getDisplayName(), j2, k2, WHITE); + + GL11.glPopMatrix(); + } + + str = "" + e.getValue(); + boolean valid = amount >= e.getValue(); + if (!valid && validInputMaterials) + { + validInputMaterials = false; + } + int color = valid | this.mc.player.capabilities.isCreativeMode ? GREEN : RED; + this.fontRenderer.drawString(str, xPos + 8 - this.fontRenderer.getStringWidth(str) / 2, TOP + 170 + canCreateOffset, color); + } else if (next instanceof Collection) + { + Collection items = (Collection) next; + + int amount = 0; + + for (ItemStack stack : items) + { + amount += getAmountInInventory(stack); + } + + RenderHelper.enableGUIStandardItemLighting(); + + Iterator it = items.iterator(); + int count = 0; + int toRenderIndex = ((int) this.ticksSinceMenuOpenF / 20) % items.size(); + ItemStack toRender = null; + while (it.hasNext()) + { + ItemStack stack = it.next(); + if (count == toRenderIndex) + { + toRender = stack; + break; + } + count++; + } + + if (toRender == null) + { + continue; + } + + this.itemRender.renderItemAndEffectIntoGUI(toRender, xPos, yPos); + this.itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, toRender, xPos, yPos, null); + RenderHelper.disableStandardItemLighting(); + GL11.glEnable(GL11.GL_BLEND); + + if (mousePosX >= xPos && mousePosX <= xPos + 16 && mousePosY >= yPos && mousePosY <= yPos + 16) + { + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glPushMatrix(); + GL11.glTranslatef(0, 0, 300); + int k = this.fontRenderer.getStringWidth(toRender.getDisplayName()); + int j2 = mousePosX - k / 2; + int k2 = mousePosY - 12; + int i1 = 8; + + if (j2 + k > this.width) + { + j2 -= (j2 - this.width + k); + } + + if (k2 + i1 + 6 > this.height) + { + k2 = this.height - i1 - 6; + } + + int j1 = ColorUtil.to32BitColor(190, 0, 153, 255); + this.drawGradientRect(j2 - 3, k2 - 4, j2 + k + 3, k2 - 3, j1, j1); + this.drawGradientRect(j2 - 3, k2 + i1 + 3, j2 + k + 3, k2 + i1 + 4, j1, j1); + this.drawGradientRect(j2 - 3, k2 - 3, j2 + k + 3, k2 + i1 + 3, j1, j1); + this.drawGradientRect(j2 - 4, k2 - 3, j2 - 3, k2 + i1 + 3, j1, j1); + this.drawGradientRect(j2 + k + 3, k2 - 3, j2 + k + 4, k2 + i1 + 3, j1, j1); + int k1 = ColorUtil.to32BitColor(170, 0, 153, 255); + int l1 = (k1 & 16711422) >> 1 | k1 & -16777216; + this.drawGradientRect(j2 - 3, k2 - 3 + 1, j2 - 3 + 1, k2 + i1 + 3 - 1, k1, l1); + this.drawGradientRect(j2 + k + 2, k2 - 3 + 1, j2 + k + 3, k2 + i1 + 3 - 1, k1, l1); + this.drawGradientRect(j2 - 3, k2 - 3, j2 + k + 3, k2 - 3 + 1, k1, k1); + this.drawGradientRect(j2 - 3, k2 + i1 + 2, j2 + k + 3, k2 + i1 + 3, l1, l1); + + this.fontRenderer.drawString(toRender.getDisplayName(), j2, k2, WHITE); + + GL11.glPopMatrix(); + } + + str = "" + e.getValue(); + boolean valid = amount >= e.getValue(); + if (!valid && validInputMaterials) + { + validInputMaterials = false; + } + int color = valid | this.mc.player.capabilities.isCreativeMode ? GREEN : RED; + this.fontRenderer.drawString(str, xPos + 8 - this.fontRenderer.getStringWidth(str) / 2, TOP + 170 + canCreateOffset, color); + } + + i++; + } + + if (validInputMaterials || this.mc.player.capabilities.isCreativeMode) + { + GL11.glColor4f(0.0F, 1.0F, 0.1F, 1); + } else + { + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + } + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + + if (!this.mapMode) + { + if (mousePosX >= RHS - 95 && mousePosX <= RHS && mousePosY >= TOP + 182 + canCreateOffset && mousePosY <= TOP + 182 + 12 + canCreateOffset) + { + this.drawTexturedModalRect(RHS - 95, TOP + 182 + canCreateOffset, 93, 12, 0, 174, 93, 12, false, false); + } + } + + this.drawTexturedModalRect(RHS - 95, TOP + 182 + canCreateOffset, 93, 12, 0, 174, 93, 12, false, false); + + int color = (int) ((Math.sin(this.ticksSinceMenuOpenF / 5.0) * 0.5 + 0.5) * 255); + this.drawSplitString(GCCoreUtil.translate("gui.message.can_create_space_station.name"), RHS - 48, TOP + 137, 91, ColorUtil.to32BitColor(255, color, 255, color), true, false); + + if (!mapMode) + { + this.drawSplitString(GCCoreUtil.translate("gui.message.create_ss.name").toUpperCase(), RHS - 48, TOP + 185 + canCreateOffset, 91, WHITE, false, false); + } + } else + { + this.drawSplitString(GCCoreUtil.translate("gui.message.cannot_create_space_station.name"), RHS - 48, TOP + 138, 91, WHITE, true, false); + } + } + + // Catalog overlay + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.3F - Math.min(0.3F, this.ticksSinceSelectionF / 50.0F)); + this.drawTexturedModalRect(LHS, TOP, 74, 11, 0, 392, 148, 22, false, false); + str = GCCoreUtil.translate("gui.message.catalog.name").toUpperCase(); + this.fontRenderer.drawString(str, LHS + 40 - fontRenderer.getStringWidth(str) / 2, TOP + 1, WHITE); + + // Top bar title: + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + if (this.selectedBody instanceof Satellite) + { + if (this.selectedStationOwner.length() == 0 || !this.selectedStationOwner.equalsIgnoreCase(PlayerUtil.getName(this.mc.player))) + { + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + } else + { + GL11.glColor4f(0.0F, 1.0F, 0.0F, 1); + } + this.drawTexturedModalRect(width / 2 - 47, TOP, 94, 11, 0, 414, 188, 22, false, false); + } else + { + this.drawTexturedModalRect(width / 2 - 47, TOP, 94, 11, 0, 414, 188, 22, false, false); + } + if (this.selectedBody.getTierRequirement() >= 0 && (!(this.selectedBody instanceof Satellite))) + { + boolean canReach; + if (!this.selectedBody.isReachable() || (this.possibleBodies != null && !this.possibleBodies.contains(this.selectedBody))) + { + canReach = false; + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + } else + { + canReach = true; + GL11.glColor4f(0.0F, 1.0F, 0.0F, 1); + } + this.drawTexturedModalRect(width / 2 - 30, TOP + 11, 30, 11, 0, 414, 60, 22, false, false); + this.drawTexturedModalRect(width / 2, TOP + 11, 30, 11, 128, 414, 60, 22, false, false); + str = GCCoreUtil.translateWithFormat("gui.message.tier.name", this.selectedBody.getTierRequirement() == 0 ? "?" : this.selectedBody.getTierRequirement()); + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2, TOP + 13, canReach ? GREY4 : RED3); + } + + str = this.selectedBody.getTranslatedName(); + + if (this.selectedBody instanceof Satellite) + { + str = GCCoreUtil.translate("gui.message.rename.name").toUpperCase(); + } + + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2, TOP + 2, WHITE); + + // Catalog wedge: + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(LHS + 4, TOP, 83, 12, 0, 477, 83, 12, false, false); + + if (!this.mapMode) + { + if (!this.selectedBody.isReachable() || (this.possibleBodies != null && !this.possibleBodies.contains(this.selectedBody)) || (this.selectedBody instanceof Satellite && this.selectedStationOwner.equals(""))) + { + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + } else + { + GL11.glColor4f(0.0F, 1.0F, 0.0F, 1); + } + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + this.drawTexturedModalRect(RHS - 74, TOP, 74, 11, 0, 392, 148, 22, true, false); + str = GCCoreUtil.translate("gui.message.launch.name").toUpperCase(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, RHS - 40 - fontRenderer.getStringWidth(str) / 2, TOP + 2, WHITE); + } + + if (this.selectionState == EnumSelection.SELECTED && !(this.selectedBody instanceof Satellite)) + { + handledSliderPos = true; + + int sliderPos = this.zoomTooltipPos; + if (zoomTooltipPos != 38) + { + sliderPos = Math.min((int) this.ticksSinceSelectionF * 2, 38); + this.zoomTooltipPos = sliderPos; + } + + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + this.drawTexturedModalRect(RHS - 182, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE - sliderPos, 83, 38, 512 - 166, 512 - 76, 166, 76, true, false); + + boolean flag0 = GalaxyRegistry.getSatellitesForCelestialBody(this.selectedBody).size() > 0; + boolean flag1 = this.selectedBody instanceof Planet && GalaxyRegistry.getMoonsForPlanet((Planet) this.selectedBody).size() > 0; + if (flag0 && flag1) + { + this.drawSplitString(GCCoreUtil.translate("gui.message.click_again.0.name"), RHS - 182 + 41, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE + 2 - sliderPos, 79, GREY5, false, false); + } else if (!flag0 && flag1) + { + this.drawSplitString(GCCoreUtil.translate("gui.message.click_again.1.name"), RHS - 182 + 41, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE + 6 - sliderPos, 79, GREY5, false, false); + } else if (flag0) + { + this.drawSplitString(GCCoreUtil.translate("gui.message.click_again.2.name"), RHS - 182 + 41, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE + 6 - sliderPos, 79, GREY5, false, false); + } else + { + this.drawSplitString(GCCoreUtil.translate("gui.message.click_again.3.name"), RHS - 182 + 41, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE + 11 - sliderPos, 79, GREY5, false, false); + } + + } + + if (this.selectedBody instanceof Satellite && renamingSpaceStation) + { + this.drawDefaultBackground(); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + this.drawTexturedModalRect(width / 2 - 90, this.height / 2 - 38, 179, 67, 159, 0, 179, 67, false, false); + this.drawTexturedModalRect(width / 2 - 90 + 4, this.height / 2 - 38 + 2, 171, 10, 159, 92, 171, 10, false, false); + this.drawTexturedModalRect(width / 2 - 90 + 8, this.height / 2 - 38 + 18, 161, 13, 159, 67, 161, 13, false, false); + this.drawTexturedModalRect(width / 2 - 90 + 17, this.height / 2 - 38 + 59, 72, 12, 159, 80, 72, 12, true, false); + this.drawTexturedModalRect(width / 2, this.height / 2 - 38 + 59, 72, 12, 159, 80, 72, 12, false, false); + str = GCCoreUtil.translate("gui.message.assign_name.name"); + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2, this.height / 2 - 35, WHITE); + str = GCCoreUtil.translate("gui.message.apply.name"); + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2 - 36, this.height / 2 + 23, WHITE); + str = GCCoreUtil.translate("gui.message.cancel.name"); + this.fontRenderer.drawString(str, width / 2 + 36 - this.fontRenderer.getStringWidth(str) / 2, this.height / 2 + 23, WHITE); + + if (this.renamingString == null) + { + Satellite selectedSatellite = (Satellite) this.selectedBody; + String playerName = PlayerUtil.getName(this.mc.player); + this.renamingString = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(playerName).getStationName(); + if (this.renamingString == null) + { + this.renamingString = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(playerName.toLowerCase()).getStationName(); + } + if (this.renamingString == null) + { + this.renamingString = ""; + } + } + + str = this.renamingString; + String str0 = this.renamingString; + + if ((this.ticksSinceMenuOpenF / 10) % 2 == 0) + { + str0 += "_"; + } + + this.fontRenderer.drawString(str0, width / 2 - this.fontRenderer.getStringWidth(str) / 2, this.height / 2 - 17, WHITE); + } + } + } + + if (!handledSliderPos) + { + this.zoomTooltipPos = 0; + } + } + + /** + * Draws child bodies (when appropriate) on the left-hand interface + */ + protected int drawChildren(List children, int xOffsetBase, int yOffsetPrior, boolean recursive) + { + xOffsetBase += GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE; + final int yOffsetBase = GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE + 50 + yOffsetPrior; + int yOffset = 0; + for (int i = 0; i < children.size(); i++) + { + CelestialBody child = children.get(i); + int xOffset = xOffsetBase + (child.equals(this.selectedBody) ? 5 : 0); + final int scale = (int) Math.min(95.0F, Math.max(0.0F, (this.ticksSinceMenuOpenF * 25.0F) - 95 * i)); + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + float brightness = child.equals(this.selectedBody) ? 0.2F : 0.0F; + if (child.isReachable()) + { + GL11.glColor4f(0.0F, 0.6F + brightness, 0.0F, scale / 95.0F); + } else + { + GL11.glColor4f(0.6F + brightness, 0.0F, 0.0F, scale / 95.0F); + } + this.drawTexturedModalRect(3 + xOffset, yOffsetBase + yOffset + 1, 86, 10, 0, 489, 86, 10, false, false); + GL11.glColor4f(3 * brightness, 0.6F + 2 * brightness, 1.0F, scale / 95.0F); + this.drawTexturedModalRect(2 + xOffset, yOffsetBase + yOffset, 93, 12, 95, 464, 93, 12, false, false); + + if (scale > 0) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int color = 14737632; + this.fontRenderer.drawString(child.getTranslatedName(), 7 + xOffset, yOffsetBase + yOffset + 2, color); + } + + yOffset += 14; + if (recursive && child.equals(this.selectedBody)) + { + List grandchildren = this.getChildren(child); + if (grandchildren.size() > 0) + { + if (this.animateGrandchildren == 14 * grandchildren.size()) + { + yOffset += drawChildren(grandchildren, 10, yOffset, false); + } else + { + if (this.animateGrandchildren >= 14) + { + List partial = new LinkedList<>(); + for (int j = 0; j < this.animateGrandchildren / 14; j++) + { + partial.add(grandchildren.get(j)); + } + drawChildren(partial, 10, yOffset, false); + } + yOffset += this.animateGrandchildren; + this.animateGrandchildren += 2; + } + } + } + } + return yOffset; + } + + protected int getAmountInInventory(ItemStack stack) + { + int amountInInv = 0; + + for (int x = 0; x < FMLClientHandler.instance().getClientPlayerEntity().inventory.getSizeInventory(); x++) + { + final ItemStack slot = FMLClientHandler.instance().getClientPlayerEntity().inventory.getStackInSlot(x); + + if (slot != null) + { + if (SpaceStationRecipe.checkItemEquals(stack, slot)) + { + amountInInv += slot.getCount(); + } + } + } + + return amountInInv; + } + + public int drawSplitString(String text, int x, int y, int width, int color, boolean small, boolean simulate) + { + return this.renderSplitString(text, x, y, width, color, small, simulate); + } + + protected int renderSplitString(String text, int x, int y, int width, int color, boolean small, boolean simulate) + { + if (small) + { + List list = this.fontRenderer.listFormattedStringToWidth(text, width); + + for (Iterator iterator = list.iterator(); iterator.hasNext(); y += this.fontRenderer.FONT_HEIGHT) + { + String string = (String) iterator.next(); + if (!simulate) + { + this.renderStringAligned(string, x, y, width, color); + } + } + + return list.size(); + } else + { + List list = this.fontRenderer.listFormattedStringToWidth(text, width); + + for (Iterator iterator = list.iterator(); iterator.hasNext(); y += this.fontRenderer.FONT_HEIGHT) + { + String s1 = iterator.next(); + if (!simulate) + { + this.renderStringAligned(s1, x, y, width, color); + } + } + + return list.size(); + } + } + + protected void renderStringAligned(String text, int x, int y, int width, int color) + { + if (this.fontRenderer.getBidiFlag()) + { + int i1 = this.fontRenderer.getStringWidth(this.bidiReorder(text)); + x = x + width - i1; + } + + this.fontRenderer.drawString(text, x - this.fontRenderer.getStringWidth(text) / 2, y, color, false); + } + + protected String bidiReorder(String text) + { + try + { + Bidi bidi = new Bidi((new ArabicShaping(8)).shape(text), 127); + bidi.setReorderingMode(0); + return bidi.writeReordered(2); + } catch (ArabicShapingException arabicshapingexception) + { + return text; + } + } + + public void drawTexturedModalRect(int x, int y, int width, int height, int u, int v, int uWidth, int vHeight, boolean invertX, boolean invertY) + { + this.drawTexturedModalRect(x, y, width, height, u, v, uWidth, vHeight, invertX, invertY, 512, 512); + } + + public void drawTexturedModalRect(float x, float y, float width, float height, float u, float v, float uWidth, float vHeight, boolean invertX, boolean invertY, float texSizeX, float texSizeY) + { + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + float texModX = 1F / texSizeX; + float texModY = 1F / texSizeY; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + float height0 = invertY ? 0 : vHeight; + float height1 = invertY ? vHeight : 0; + float width0 = invertX ? uWidth : 0; + float width1 = invertX ? 0 : uWidth; + worldRenderer.pos(x, y + height, this.zLevel).tex((u + width0) * texModX, (v + height0) * texModY).endVertex(); + worldRenderer.pos(x + width, y + height, this.zLevel).tex((u + width1) * texModX, (v + height0) * texModY).endVertex(); + worldRenderer.pos(x + width, y, this.zLevel).tex((u + width1) * texModX, (v + height1) * texModY).endVertex(); + worldRenderer.pos(x, y, this.zLevel).tex((u + width0) * texModX, (v + height1) * texModY).endVertex(); + tessellator.draw(); + } + + public void setBlackBackground() + { + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_TEXTURE_2D); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(0.0D, height, -90.0D).endVertex(); + worldRenderer.pos(width, height, -90.0D).endVertex(); + worldRenderer.pos(width, 0.0D, -90.0D).endVertex(); + worldRenderer.pos(0.0D, 0.0D, -90.0D).endVertex(); + tessellator.draw(); + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + /** + * Rotates/translates/scales to appropriate values before drawing celestial + * bodies + */ + public Matrix4f setIsometric(float partialTicks) + { + Matrix4f mat0 = new Matrix4f(); + Matrix4f.translate(new Vector3f(width / 2.0F, height / 2, 0), mat0, mat0); + Matrix4f.rotate((float) Math.toRadians(55), new Vector3f(1, 0, 0), mat0, mat0); + Matrix4f.rotate((float) Math.toRadians(-45), new Vector3f(0, 0, 1), mat0, mat0); + float zoomLocal = this.getZoomAdvanced(); + this.zoom = zoomLocal; + Matrix4f.scale(new Vector3f(1.1f + zoomLocal, 1.1F + zoomLocal, 1.1F + zoomLocal), mat0, mat0); + Vector2f cBodyPos = this.getTranslationAdvanced(partialTicks); + this.position = this.getTranslationAdvanced(partialTicks); + Matrix4f.translate(new Vector3f(-cBodyPos.x, -cBodyPos.y, 0), mat0, mat0); + FloatBuffer fb = BufferUtils.createFloatBuffer(16); + fb.rewind(); + mat0.store(fb); + fb.flip(); + GL11.glMultMatrix(fb); + return mat0; + } + + /** + * Draw background grid + */ + public void drawGrid(float gridSize, float gridScale) + { + GL11.glColor4f(0.0F, 0.2F, 0.5F, 0.55F); + + GL11.glBegin(GL11.GL_LINES); + + gridSize += gridScale / 2; + for (float v = -gridSize; v <= gridSize; v += gridScale) + { + GL11.glVertex3f(v, -gridSize, -0.0F); + GL11.glVertex3f(v, gridSize, -0.0F); + GL11.glVertex3f(-gridSize, v, -0.0F); + GL11.glVertex3f(gridSize, v, -0.0F); + } + + GL11.glEnd(); + } + + /** + * Draw orbit circles on gui + */ + public void drawCircles() + { + GL11.glColor4f(1, 1, 1, 1); + GL11.glLineWidth(3); + int count = 0; + + final float theta = (float) (2 * Math.PI / 90); + final float cos = (float) Math.cos(theta); + final float sin = (float) Math.sin(theta); + + for (CelestialBody body : bodiesToRender) + { + Vector3f systemOffset = new Vector3f(0.0F, 0.0F, 0.0F); + if (body instanceof IChildBody) + { + systemOffset = this.getCelestialBodyPosition(((IChildBody) body).getParentPlanet()); + } else if (body instanceof Planet) + { + systemOffset = this.getCelestialBodyPosition(((Planet) body).getParentSolarSystem().getMainStar()); + } + + float x = this.getScale(body); + float y = 0; + + float alpha = getAlpha(body); + + if (alpha > 0.0F) + { + switch (count % 2) + { + case 0: + GL11.glColor4f(0.0F / 1.4F, 0.6F / 1.4F, 1.0F / 1.4F, alpha / 1.4F); + break; + case 1: + GL11.glColor4f(0.3F / 1.4F, 0.8F / 1.4F, 1.0F / 1.4F, alpha / 1.4F); + break; + } + + CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre preEvent = new CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre(body, systemOffset); + MinecraftForge.EVENT_BUS.post(preEvent); + + if (!preEvent.isCanceled()) + { + GL11.glTranslatef(systemOffset.x, systemOffset.y, systemOffset.z); + + GL11.glBegin(GL11.GL_LINE_LOOP); + + float temp; + for (int i = 0; i < 90; i++) + { + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + } + + GL11.glEnd(); + + GL11.glTranslatef(-systemOffset.x, -systemOffset.y, -systemOffset.z); + + count++; + } + + CelestialBodyRenderEvent.CelestialRingRenderEvent.Post postEvent = new CelestialBodyRenderEvent.CelestialRingRenderEvent.Post(body); + MinecraftForge.EVENT_BUS.post(postEvent); + } + } + + GL11.glLineWidth(1); + } + + /** + * Returns the transparency of the selected body. Hidden bodies will return + * 0.0, opaque bodies will return 1.0, and ones fading in/out will pass + * between those two values + */ + public float getAlpha(CelestialBody body) + { + float alpha = 1.0F; + + if (body instanceof IChildBody) + { + boolean selected = body == this.selectedBody || (((IChildBody) body).getParentPlanet() == this.selectedBody && this.selectionState != EnumSelection.SELECTED); + boolean ready = this.lastSelectedBody != null || this.ticksSinceSelectionF > 35; + boolean isSibling = getSiblings(this.selectedBody).contains(body); + boolean isPossible = !(body instanceof Satellite) || (this.possibleBodies != null && this.possibleBodies.contains(body)); + if ((!selected && !isSibling) || !isPossible) + { + alpha = 0.0F; + } else if (this.isZoomed() && ((!selected || !ready) && !isSibling)) + { + alpha = Math.min(Math.max((this.ticksSinceSelectionF - 30) / 15.0F, 0.0F), 1.0F); + } + } else + { + boolean isSelected = this.selectedBody == body; + boolean isChildSelected = this.selectedBody instanceof IChildBody; + boolean isOwnChildSelected = isChildSelected && ((IChildBody) this.selectedBody).getParentPlanet() == body; + + if (!isSelected && !isOwnChildSelected && (this.isZoomed() || isChildSelected)) + { + if (this.lastSelectedBody != null || this.selectedBody instanceof IChildBody) + { + alpha = 0.0F; + } else + { + alpha = 1.0F - Math.min(this.ticksSinceSelectionF / 25.0F, 1.0F); + } + } + } + + return alpha; + } + + public static class StationDataGUI + { + + private String stationName; + private Integer stationDimensionID; + + public StationDataGUI(String stationName, Integer stationDimensionID) + { + this.stationName = stationName; + this.stationDimensionID = stationDimensionID; + } + + public String getStationName() + { + return stationName; + } + + public void setStationName(String stationName) + { + this.stationName = stationName; + } + + public Integer getStationDimensionID() + { + return stationDimensionID; + } + } + + protected boolean isZoomed() + { + return this.selectionState == EnumSelection.ZOOMED; + } + + protected boolean isSelected() + { + return this.selectionState != EnumSelection.UNSELECTED; + } + + protected Matrix4f setupMatrix(CelestialBody body, Matrix4f worldMatrix, FloatBuffer fb) + { + return setupMatrix(body, worldMatrix, fb, 1.0F); + } + + protected Matrix4f setupMatrix(CelestialBody body, Matrix4f worldMatrix, FloatBuffer fb, float scaleXZ) + { + Matrix4f worldMatrix0 = new Matrix4f(worldMatrix); + Matrix4f.translate(this.getCelestialBodyPosition(body), worldMatrix0, worldMatrix0); + Matrix4f worldMatrix1 = new Matrix4f(); + Matrix4f.rotate((float) Math.toRadians(45), new Vector3f(0, 0, 1), worldMatrix1, worldMatrix1); + Matrix4f.rotate((float) Math.toRadians(-55), new Vector3f(1, 0, 0), worldMatrix1, worldMatrix1); + if (scaleXZ != 1.0F) + { + Matrix4f.scale(new Vector3f(scaleXZ, scaleXZ, 1.0F), worldMatrix1, worldMatrix1); + } + worldMatrix1 = Matrix4f.mul(worldMatrix0, worldMatrix1, worldMatrix1); + fb.rewind(); + worldMatrix1.store(fb); + fb.flip(); + GL11.glMultMatrix(fb); + + return worldMatrix1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiJoinSpaceRace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiJoinSpaceRace.java new file mode 100644 index 00000000..ff3dbe24 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiJoinSpaceRace.java @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientButton; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.client.model.ModelFlag; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiJoinSpaceRace extends GuiScreen implements ICheckBoxCallback, ITextBoxCallback +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + + private int ticksPassed; + private EntityPlayer thePlayer; + private boolean initialized; + + private int buttonFlag_height; + private int buttonFlag_xPosition; + private int buttonFlag_yPosition; + + private EntityFlag dummyFlag = new EntityFlag(FMLClientHandler.instance().getClient().world); + private ModelFlag dummyModel = new ModelFlag(); + + private SpaceRace spaceRaceData; + + public GuiJoinSpaceRace(EntityPlayerSP player) + { + this.thePlayer = player; + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + SpaceRace race = SpaceRaceManager.getSpaceRaceFromID(stats.getSpaceRaceInviteTeamID()); + + if (race != null) + { + this.spaceRaceData = race; + } else + { + List playerList = new ArrayList(); + playerList.add(PlayerUtil.getName(player)); + this.spaceRaceData = new SpaceRace(playerList, SpaceRace.DEFAULT_NAME, new FlagData(48, 32), new Vector3(1, 1, 1)); + } + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + + if (this.initialized) + { + final int var5 = (this.width - this.width / 4) / 2; + final int var6 = (this.height - this.height / 4) / 2; + + int buttonFlag_width = 81; + this.buttonFlag_height = 58; + this.buttonFlag_xPosition = this.width / 2 - buttonFlag_width / 2; + this.buttonFlag_yPosition = this.height / 2 - this.height / 3 + 10; + + this.buttonList + .add(new GuiElementGradientButton(0, this.width / 2 - this.width / 3 + 15, this.height / 2 - this.height / 4 - 15, 50, 15, GCCoreUtil.translate("gui.space_race.create.close.name"))); + int width = (int) (var5 / 1.0F); + this.buttonList.add(new GuiElementGradientButton(1, this.width / 2 - width / 2, this.buttonFlag_yPosition + this.buttonFlag_height + 60, width, 20, + GCCoreUtil.translateWithFormat("gui.space_race.join.name", this.spaceRaceData.getTeamName()))); + } + } + + @Override + protected void actionPerformed(GuiButton buttonClicked) + { + switch (buttonClicked.id) + { + case 0: + this.thePlayer.closeScreen(); + break; + case 1: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ADD_RACE_PLAYER, GCCoreUtil.getDimensionID(mc.world), new Object[] + {PlayerUtil.getName(this.thePlayer), this.spaceRaceData.getSpaceRaceID()})); + this.thePlayer.closeScreen(); + break; + default: + break; + } + } + + @Override + protected void mouseClicked(int x, int y, int clickIndex) throws IOException + { + super.mouseClicked(x, y, clickIndex); + } + + @Override + public void updateScreen() + { + super.updateScreen(); + ++this.ticksPassed; + + if (!this.initialized) + { + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.drawDefaultBackground(); + final int var5 = (this.width - this.width / 4) / 2; + final int var6 = (this.height - this.height / 4) / 2; + + if (this.initialized) + { + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.join.title.name"), this.width / 2, this.height / 2 - this.height / 3 - 15, 16777215); + this.drawFlagButton(par1, par2); + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.join.owner.name") + ": " + this.spaceRaceData.getPlayerNames().get(0), this.width / 2, + this.buttonFlag_yPosition + this.buttonFlag_height + 25, ColorUtil.to32BitColor(255, 150, 150, 150)); + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translateWithFormat("gui.space_race.join.member_count.name", this.spaceRaceData.getPlayerNames().size()), this.width / 2, + this.buttonFlag_yPosition + this.buttonFlag_height + 40, ColorUtil.to32BitColor(255, 150, 150, 150)); + GL11.glPushMatrix(); + GL11.glTranslatef(this.width / 2, this.buttonFlag_yPosition + this.buttonFlag_height + 5 + FMLClientHandler.instance().getClient().fontRenderer.FONT_HEIGHT / 2, 0); + GL11.glScalef(1.5F, 1.5F, 1.0F); + GL11.glTranslatef(-this.width / 2, (-(this.buttonFlag_yPosition + this.buttonFlag_height + 5)) - FMLClientHandler.instance().getClient().fontRenderer.FONT_HEIGHT / 2, 0); + this.drawCenteredString(this.fontRenderer, this.spaceRaceData.getTeamName(), this.width / 2, this.buttonFlag_yPosition + this.buttonFlag_height + 5, + ColorUtil.to32BitColor(255, 100, 150, 20)); + GL11.glPopMatrix(); + } + + super.drawScreen(par1, par2, par3); + } + + private void drawFlagButton(int mouseX, int mouseY) + { + GL11.glPushMatrix(); + GL11.glTranslatef(this.buttonFlag_xPosition + 2.9F, this.buttonFlag_yPosition + this.buttonFlag_height + 1 - 4, 0); + GL11.glScalef(74.0F, 74.0F, 1F); + GL11.glTranslatef(0.0F, 0.36F, 1.0F); + GL11.glScalef(1.0F, 1.0F, -1F); + this.dummyFlag.flagData = this.spaceRaceData.getFlagData(); + this.dummyModel.renderFlag(this.dummyFlag, this.ticksPassed); + GL11.glColor3f(1, 1, 1); + GL11.glPopMatrix(); + } + + @Override + public void drawWorldBackground(int i) + { + if (this.mc.world != null) + { + int scaleX = Math.min(this.ticksPassed * 14, this.width / 3); + int scaleY = Math.min(this.ticksPassed * 14, this.height / 3); + + if (scaleX == this.width / 3 && scaleY == this.height / 3 && !this.initialized) + { + this.initialized = true; + this.initGui(); + } + + this.drawGradientRect(this.width / 2 - scaleX, this.height / 2 - scaleY, this.width / 2 + scaleX, this.height / 2 + scaleY, -1072689136, -804253680); + } else + { + this.drawBackground(i); + } + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return false; + } + + @Override + public void onIntruderInteraction() + { + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return true; + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + return ColorUtil.to32BitColor(255, 255, 255, 255); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiMissingCore.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiMissingCore.java new file mode 100644 index 00000000..e2d5a944 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiMissingCore.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import java.net.URI; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiMissingCore extends GuiScreen +{ + + private int urlX; + private int urlY; + private int urlWidth; + private int urlHeight; + + @Override + public void initGui() + { + super.initGui(); + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.drawDefaultBackground(); + int offset = this.height / 2 - 50; + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.missing_core.name.0"), this.width / 2, offset, 0xFF5555); + offset += 25; + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.missing_core.name.1"), this.width / 2, offset, 0xFF5555); + offset += 20; + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.missing_core.name.2"), this.width / 2, offset, 0x999999); + offset += 20; + String s = TextFormatting.UNDERLINE + GCCoreUtil.translate("gui.missing_core.name.3"); + this.urlX = this.width / 2 - this.fontRenderer.getStringWidth(s) / 2 - 10; + this.urlY = offset - 2; + this.urlWidth = this.fontRenderer.getStringWidth(s) + 20; + this.urlHeight = 14; + Gui.drawRect(this.urlX, this.urlY, this.urlX + this.urlWidth, this.urlY + this.urlHeight, ColorUtil.to32BitColor(50, 0, 0, 255)); + this.drawCenteredString(this.fontRenderer, s, this.width / 2, offset, 0x999999); + } + + @Override + protected void keyTyped(char par1, int par2) + { + } + + public void actionPerformed() + { + this.actionPerformed(null); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + FMLClientHandler.instance().getClient().displayGuiScreen((GuiScreen) null); + } + + @Override + protected void mouseClicked(int x, int y, int which) + { + if (x > this.urlX && x < this.urlX + this.urlWidth && y > this.urlY && y < this.urlY + this.urlHeight) + { + try + { + Class oclass = Class.forName("java.awt.Desktop"); + Object object = oclass.getMethod("getDesktop", new Class[0]).invoke((Object) null, new Object[0]); + oclass.getMethod("browse", new Class[] + {URI.class}).invoke(object, new Object[] + {new URI("http://micdoodle8.com/mods/galacticraft/downloads")}); + } catch (Throwable throwable) + { + throwable.printStackTrace(); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiNewSpaceRace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiNewSpaceRace.java new file mode 100644 index 00000000..61591224 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiNewSpaceRace.java @@ -0,0 +1,1162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import javax.imageio.ImageIO; +import micdoodle8.mods.galacticraft.api.vector.Vector2; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientButton; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientList; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientList.ListElement; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementSlider; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.client.model.ModelFlag; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public class GuiNewSpaceRace extends GuiScreen implements ICheckBoxCallback, ITextBoxCallback +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + + public enum EnumSpaceRaceGui + { + MAIN, ADD_PLAYER, REMOVE_PLAYER, DESIGN_FLAG, CHANGE_TEAM_COLOR + } + + private int ticksPassed; + private EntityPlayer thePlayer; + private GuiElementCheckbox checkboxPaintbrush; + private GuiElementCheckbox checkboxShowGrid; + private GuiElementCheckbox checkboxEraser; + private GuiElementCheckbox checkboxSelector; + private GuiElementCheckbox checkboxColorSelector; + private GuiElementTextBox textBoxRename; + private boolean initialized; + private GuiElementSlider sliderColorR; + private GuiElementSlider sliderColorG; + private GuiElementSlider sliderColorB; + private GuiElementSlider sliderBrushSize; + private GuiElementSlider sliderEraserSize; + private GuiElementGradientList gradientListAddPlayers; + private GuiElementGradientList gradientListRemovePlayers; + private EnumSpaceRaceGui currentState = EnumSpaceRaceGui.MAIN; + + private int buttonFlag_width; + private int buttonFlag_height; + private int buttonFlag_xPosition; + private int buttonFlag_yPosition; + private boolean buttonFlag_hover; + + private int buttonTeamColor_width; + private int buttonTeamColor_height; + private int buttonTeamColor_xPosition; + private int buttonTeamColor_yPosition; + private boolean buttonTeamColor_hover; + + private Vector2 flagDesignerScale = new Vector2(); + private float flagDesignerMinX; + private float flagDesignerMinY; + private float flagDesignerWidth; + private float flagDesignerHeight; + + private int selectionMinX; + private int selectionMaxX; + private int selectionMinY; + private int selectionMaxY; + + private EntityFlag dummyFlag = new EntityFlag(FMLClientHandler.instance().getClient().world); + private ModelFlag dummyModel = new ModelFlag(); + + private SpaceRace spaceRaceData; + public Map recentlyInvited = new HashMap(); + + private boolean lastMousePressed = false; + private boolean isDirty = true; + private boolean canEdit; + + public GuiNewSpaceRace(EntityPlayer player) + { + this.thePlayer = player; + + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(player)); + + if (race != null) + { + this.spaceRaceData = race; + } else + { + List playerList = new ArrayList(); + playerList.add(PlayerUtil.getName(player)); + this.spaceRaceData = new SpaceRace(playerList, SpaceRace.DEFAULT_NAME, new FlagData(48, 32), new Vector3(1, 1, 1)); + } + + this.mc = FMLClientHandler.instance().getClient(); + this.canEdit = canPlayerEdit(); + } + + private boolean canPlayerEdit() + { + return PlayerUtil.getName(this.mc.player).equals(this.spaceRaceData.getPlayerNames().get(0)); + } + + @Override + public void initGui() + { + float sliderR = 0; + float sliderG = 0; + float sliderB = 0; + + if (this.sliderColorR != null && this.sliderColorG != null && this.sliderColorB != null) + { + sliderR = this.sliderColorR.getSliderPos() / (float) this.sliderColorR.getButtonHeight(); + sliderG = this.sliderColorG.getSliderPos() / (float) this.sliderColorG.getButtonHeight(); + sliderB = this.sliderColorB.getSliderPos() / (float) this.sliderColorB.getButtonHeight(); + } + + super.initGui(); + this.buttonList.clear(); + + if (this.initialized) + { + this.buttonFlag_width = 81; + this.buttonFlag_height = 58; + this.buttonFlag_xPosition = this.width / 2 - this.buttonFlag_width / 2; + this.buttonFlag_yPosition = this.height / 2 - this.height / 3 + 10; + + this.buttonTeamColor_width = 45; + this.buttonTeamColor_height = 45; + this.buttonTeamColor_xPosition = this.buttonFlag_xPosition + this.buttonFlag_width + 10; + this.buttonTeamColor_yPosition = this.buttonFlag_yPosition + this.buttonFlag_height / 2 - this.buttonTeamColor_height / 2; + + this.buttonList.add(new GuiElementGradientButton(0, this.width / 2 - this.width / 3 + 15, this.height / 2 - this.height / 4 - 15, 50, 15, + this.currentState == EnumSpaceRaceGui.MAIN ? GCCoreUtil.translate("gui.space_race.create.close.name") : GCCoreUtil.translate("gui.space_race.create.back.name"))); + + switch (this.currentState) + { + case MAIN: + this.textBoxRename = new GuiElementTextBox(1, this, this.width / 2 - 75, this.buttonFlag_yPosition + this.buttonFlag_height + 10, 150, 16, + GCCoreUtil.translate("gui.space_race.create.rename.name"), false, 25, true); + this.buttonList.add(this.textBoxRename); + if (this.canEdit) + { + this.buttonList.add(new GuiElementGradientButton(2, this.width / 2 - 120, this.textBoxRename.y + this.height / 10, 100, this.height / 10, + GCCoreUtil.translate("gui.space_race.create.add_players.name"))); + this.buttonList.add(new GuiElementGradientButton(3, this.width / 2 - 120, this.textBoxRename.y + this.height / 10 + this.height / 10 + this.height / 50, 100, this.height / 10, + GCCoreUtil.translate("gui.space_race.create.rem_players.name"))); + } + + GuiElementGradientButton localStats = new GuiElementGradientButton(4, this.width / 2 + (this.canEdit ? 20 : -50), this.textBoxRename.y + this.height / 10, 100, this.height / 10, + GCCoreUtil.translate("gui.space_race.create.server_stats.name")); + GuiElementGradientButton serverStats = new GuiElementGradientButton(5, this.width / 2 + (this.canEdit ? 20 : -50), + this.textBoxRename.y + this.height / 10 + this.height / 10 + this.height / 50, 100, this.height / 10, GCCoreUtil.translate("gui.space_race.create.global_stats.name")); + localStats.enabled = false; + serverStats.enabled = false; + this.buttonList.add(localStats); + this.buttonList.add(serverStats); + break; + case ADD_PLAYER: + this.buttonList.add(new GuiElementGradientButton(2, this.width / 2 - this.width / 3 + 7, this.height / 2 + this.height / 4 - 15, 64, 15, + GCCoreUtil.translate("gui.space_race.create.send_invite.name"))); + int xPos0 = ((GuiElementGradientButton) this.buttonList.get(0)).x + ((GuiElementGradientButton) this.buttonList.get(0)).getButtonWidth() + 10; + int xPos1 = this.width / 2 + this.width / 3 - 10; + int yPos0 = this.height / 2 - this.height / 3 + 10; + int yPos1 = this.height / 2 + this.height / 3 - 10; + this.gradientListAddPlayers = new GuiElementGradientList(xPos0, yPos0, xPos1 - xPos0, yPos1 - yPos0); + break; + case REMOVE_PLAYER: + this.buttonList.add(new GuiElementGradientButton(2, this.width / 2 - this.width / 3 + 7, this.height / 2 + this.height / 4 - 15, 64, 15, + GCCoreUtil.translate("gui.space_race.create.remove.name"))); + int xPos0b = ((GuiElementGradientButton) this.buttonList.get(0)).x + ((GuiElementGradientButton) this.buttonList.get(0)).getButtonWidth() + 10; + int xPos1b = this.width / 2 + this.width / 3 - 10; + int yPos0b = this.height / 2 - this.height / 3 + 10; + int yPos1b = this.height / 2 + this.height / 3 - 10; + this.gradientListRemovePlayers = new GuiElementGradientList(xPos0b, yPos0b, xPos1b - xPos0b, yPos1b - yPos0b); + break; + case DESIGN_FLAG: + int guiBottom = this.height / 2 + this.height / 4; + int guiTop = this.height / 2 - this.height / 4; + int guiRight = this.width / 2 + this.width / 3; + int guiLeft; + this.flagDesignerScale = new Vector2(this.width / 130.0F, this.height / 70.0F); + this.flagDesignerMinX = this.width / 2 - this.spaceRaceData.getFlagData().getWidth() * (float) this.flagDesignerScale.x / 2; + this.flagDesignerMinY = this.height / 2 - this.spaceRaceData.getFlagData().getHeight() * (float) this.flagDesignerScale.y / 2; + this.flagDesignerWidth = this.spaceRaceData.getFlagData().getWidth() * (float) this.flagDesignerScale.x; + this.flagDesignerHeight = this.spaceRaceData.getFlagData().getHeight() * (float) this.flagDesignerScale.y; + int flagDesignerRight = (int) (this.flagDesignerMinX + this.flagDesignerWidth); + int availWidth = (int) ((guiRight - 10 - (this.flagDesignerMinX + this.flagDesignerWidth + 10)) / 3); + float x1 = flagDesignerRight + 10; + float x2 = guiRight - 10; + float y1 = guiBottom - 10 - (x2 - x1); + int height = (int) (y1 - 10 - (guiTop + 10)); + this.sliderColorR = new GuiElementSlider(1, flagDesignerRight + 10, guiTop + 10, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(1, 0, 0)); + this.sliderColorG = new GuiElementSlider(2, flagDesignerRight + 11 + availWidth, guiTop + 10, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(0, 1, 0)); + this.sliderColorB = new GuiElementSlider(3, flagDesignerRight + 12 + availWidth * 2, guiTop + 10, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(0, 0, 1)); + this.sliderColorR.setSliderPos(sliderR); + this.sliderColorG.setSliderPos(sliderG); + this.sliderColorB.setSliderPos(sliderB); + this.buttonList.add(this.sliderColorR); + this.buttonList.add(this.sliderColorG); + this.buttonList.add(this.sliderColorB); + this.checkboxPaintbrush = new GuiElementCheckbox(5, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 10, 13, 13, 26, 26, 133, 0, "", 4210752, false); + this.checkboxEraser = new GuiElementCheckbox(6, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 25, 13, 13, 26, 26, 133, 52, "", 4210752, false); + this.checkboxSelector = new GuiElementCheckbox(7, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 40, 13, 13, 26, 26, 133, 78, "", 4210752, false); + this.checkboxColorSelector = + new GuiElementCheckbox(8, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 55, 13, 13, 26, 26, 133, 104, "", 4210752, false); + this.checkboxShowGrid = new GuiElementCheckbox(9, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 90, 13, 13, 26, 26, 133, 26, "", 4210752, false); + this.sliderBrushSize = new GuiElementSlider(10, this.checkboxPaintbrush.x - 40, this.checkboxPaintbrush.y, 35, 13, false, new Vector3(0.34, 0.34, 0.34), + new Vector3(0.34, 0.34, 0.34), GCCoreUtil.translate("gui.space_race.create.brush_size.name")); + this.sliderEraserSize = new GuiElementSlider(11, this.checkboxEraser.x - 40, this.checkboxEraser.y, 35, 13, false, new Vector3(0.34, 0.34, 0.34), new Vector3(0.34, 0.34, 0.34), + GCCoreUtil.translate("gui.space_race.create.eraser_size.name")); + this.sliderEraserSize.visible = false; + this.buttonList.add(this.checkboxPaintbrush); + this.buttonList.add(this.checkboxShowGrid); + this.buttonList.add(this.checkboxEraser); + this.buttonList.add(this.checkboxSelector); + this.buttonList.add(this.checkboxColorSelector); + this.buttonList.add(this.sliderBrushSize); + this.buttonList.add(this.sliderEraserSize); + break; + case CHANGE_TEAM_COLOR: + guiBottom = this.height / 2 + this.height / 4; + guiTop = this.height / 2 - this.height / 4; + guiLeft = this.width / 6; + guiRight = this.width / 2 + this.width / 3; + flagDesignerRight = guiLeft; + availWidth = (guiRight - guiLeft - 100) / 3; + x1 = flagDesignerRight + 10; + x2 = guiLeft - 10; + y1 = guiBottom - 10 - (x2 - x1); + height = (int) (y1 - 10 - (guiTop + 30)); + this.sliderColorR = new GuiElementSlider(1, flagDesignerRight + 25, guiTop + 30, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(1, 0, 0)); + this.sliderColorG = new GuiElementSlider(2, flagDesignerRight + availWidth + 50, guiTop + 30, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(0, 1, 0)); + this.sliderColorB = new GuiElementSlider(3, flagDesignerRight + availWidth * 2 + 75, guiTop + 30, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(0, 0, 1)); + this.sliderColorR.setSliderPos(this.spaceRaceData.getTeamColor().floatX()); + this.sliderColorG.setSliderPos(this.spaceRaceData.getTeamColor().floatY()); + this.sliderColorB.setSliderPos(this.spaceRaceData.getTeamColor().floatZ()); + this.buttonList.add(this.sliderColorR); + this.buttonList.add(this.sliderColorG); + this.buttonList.add(this.sliderColorB); + break; + default: + break; + } + } + } + + @Override + public void onGuiClosed() + { + this.exitCurrentScreen(false); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (this.textBoxRename != null && this.textBoxRename.keyTyped(keyChar, keyID)) + { + return; + } + + super.keyTyped(keyChar, keyID); + } + + private void exitCurrentScreen(boolean close) + { + if (this.currentState == EnumSpaceRaceGui.MAIN) + { + if (this.isDirty) + { + this.sendSpaceRaceData(); + } + + if (close) + { + if (this.canEdit) + { + this.writeFlagToFile(); + } + + this.thePlayer.closeScreen(); + } + } else + { + this.currentState = EnumSpaceRaceGui.MAIN; + this.initGui(); + } + } + + @Override + protected void actionPerformed(GuiButton buttonClicked) + { + switch (buttonClicked.id) + { + case 0: + if (this.currentState == EnumSpaceRaceGui.CHANGE_TEAM_COLOR) + { + this.markDirty(); + } + + this.exitCurrentScreen(true); + break; + case 1: + break; + case 2: + if (this.currentState == EnumSpaceRaceGui.MAIN && this.canEdit) + { + this.currentState = EnumSpaceRaceGui.ADD_PLAYER; + this.initGui(); + } else if (this.currentState == EnumSpaceRaceGui.ADD_PLAYER) + { + ListElement playerToInvite = this.gradientListAddPlayers.getSelectedElement(); + if (playerToInvite != null && !this.recentlyInvited.containsKey(playerToInvite.value)) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(this.thePlayer)); + if (race != null) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_INVITE_RACE_PLAYER, GCCoreUtil.getDimensionID(mc.world), new Object[] + {playerToInvite.value, race.getSpaceRaceID()})); + this.recentlyInvited.put(playerToInvite.value, 20 * 60); + } + } + } else if (this.currentState == EnumSpaceRaceGui.REMOVE_PLAYER) + { + ListElement playerToRemove = this.gradientListRemovePlayers.getSelectedElement(); + if (playerToRemove != null) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(this.thePlayer)); + if (race != null) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REMOVE_RACE_PLAYER, GCCoreUtil.getDimensionID(mc.world), new Object[] + {playerToRemove.value, race.getSpaceRaceID()})); + } + } + } + break; + case 3: + if (this.currentState == EnumSpaceRaceGui.MAIN && this.canEdit) + { + this.currentState = EnumSpaceRaceGui.REMOVE_PLAYER; + this.initGui(); + } + break; + default: + break; + } + } + + @Override + protected void mouseClicked(int x, int y, int clickIndex) throws IOException + { + super.mouseClicked(x, y, clickIndex); + } + + @Override + public void updateScreen() + { + super.updateScreen(); + + if (this.ticksPassed % 100 == 0) + { + if (this.isDirty || this.ticksPassed == 0) + { + this.sendSpaceRaceData(); + this.isDirty = false; + } else + { + this.updateSpaceRaceData(); + } + } + + ++this.ticksPassed; + + for (Entry e : new HashSet>(this.recentlyInvited.entrySet())) + { + int timeLeft = e.getValue(); + if (--timeLeft < 0) + { + this.recentlyInvited.remove(e.getKey()); + } else + { + this.recentlyInvited.put(e.getKey(), timeLeft); + } + } + + if (this.currentState == EnumSpaceRaceGui.ADD_PLAYER && this.gradientListAddPlayers != null && this.ticksPassed % 20 == 0) + { + List playerNames = new ArrayList(); + for (int i = 0; i < this.thePlayer.world.playerEntities.size(); i++) + { + EntityPlayer player = (EntityPlayer) this.thePlayer.world.playerEntities.get(i); + + if (player.getDistanceSq(this.thePlayer) <= 25 * 25) + { + String username = PlayerUtil.getName(player); + + if (!this.spaceRaceData.getPlayerNames().contains(username)) + { + playerNames.add(new ListElement(username, this.recentlyInvited.containsKey(username) ? ColorUtil.to32BitColor(255, 250, 120, 0) : ColorUtil.to32BitColor(255, 190, 190, 190))); + } + } + } + + this.gradientListAddPlayers.updateListContents(playerNames); + + if (this.buttonList.size() >= 2) + { + ((GuiElementGradientButton) this.buttonList.get(1)).enabled = this.gradientListAddPlayers.getSelectedElement() != null; + } + } + + if (this.currentState == EnumSpaceRaceGui.REMOVE_PLAYER && this.gradientListRemovePlayers != null && this.ticksPassed % 20 == 0) + { + List playerNames = new ArrayList(); + for (int i = 1; i < this.spaceRaceData.getPlayerNames().size(); i++) + { + String playerName = this.spaceRaceData.getPlayerNames().get(i); + playerNames.add(new ListElement(playerName, ColorUtil.to32BitColor(255, 190, 190, 190))); + } + + this.gradientListRemovePlayers.updateListContents(playerNames); + + if (this.buttonList.size() >= 2) + { + ((GuiElementGradientButton) this.buttonList.get(1)).enabled = this.gradientListRemovePlayers.getSelectedElement() != null; + } + } + + if (this.currentState == EnumSpaceRaceGui.ADD_PLAYER && this.gradientListAddPlayers != null) + { + this.gradientListAddPlayers.update(); + } + + if (this.currentState == EnumSpaceRaceGui.REMOVE_PLAYER && this.gradientListRemovePlayers != null) + { + this.gradientListRemovePlayers.update(); + } + + if (!this.initialized) + { + return; + } + + if (this.currentState == EnumSpaceRaceGui.DESIGN_FLAG) + { + int x = Mouse.getEventX() * this.width / this.mc.displayWidth; + int y = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; + + if (this.canEdit && x >= this.flagDesignerMinX && y >= this.flagDesignerMinY && x <= this.flagDesignerMinX + this.flagDesignerWidth && y <= this.flagDesignerMinY + this.flagDesignerHeight) + { + int unScaledX = (int) Math.floor((x - this.flagDesignerMinX) / this.flagDesignerScale.x); + int unScaledY = (int) Math.floor((y - this.flagDesignerMinY) / this.flagDesignerScale.y); + + if (Mouse.isButtonDown(0)) + { + if (this.checkboxEraser.isSelected != null && this.checkboxEraser.isSelected) + { + this.setColorWithBrushSize(unScaledX, unScaledY, new Vector3(255, 255, 255), (int) Math.floor(this.sliderEraserSize.getNormalizedValue() * 10) + 1); + } else if (this.checkboxColorSelector.isSelected != null && this.checkboxColorSelector.isSelected) + { + Vector3 colorAt = this.spaceRaceData.getFlagData().getColorAt(unScaledX, unScaledY); + this.sliderColorR.setSliderPos(colorAt.floatX()); + this.sliderColorG.setSliderPos(colorAt.floatY()); + this.sliderColorB.setSliderPos(colorAt.floatZ()); + } else if (this.checkboxPaintbrush.isSelected != null && this.checkboxPaintbrush.isSelected) + { + this.setColorWithBrushSize(unScaledX, unScaledY, new Vector3(this.sliderColorR.getColorValueD(), this.sliderColorG.getColorValueD(), this.sliderColorB.getColorValueD()), + (int) Math.floor(this.sliderBrushSize.getNormalizedValue() * 10) + 1); + } + } + } + + if (this.checkboxSelector != null) + { + if (!this.lastMousePressed && Mouse.isButtonDown(0) && this.checkboxSelector.isSelected != null && this.checkboxSelector.isSelected) + { + if (x >= this.flagDesignerMinX && y >= this.flagDesignerMinY && x <= this.flagDesignerMinX + this.flagDesignerWidth && y <= this.flagDesignerMinY + this.flagDesignerHeight) + { + int unScaledX = (int) Math.floor((x - this.flagDesignerMinX) / this.flagDesignerScale.x); + int unScaledY = (int) Math.floor((y - this.flagDesignerMinY) / this.flagDesignerScale.y); + this.selectionMinX = unScaledX; + this.selectionMinY = unScaledY; + } else + { + this.selectionMinX = this.selectionMinY = -1; + } + } else if (this.lastMousePressed && !Mouse.isButtonDown(0) && this.checkboxSelector.isSelected != null && this.checkboxSelector.isSelected) + { + if (this.selectionMinX != -1 && this.selectionMinY != -1 && x >= this.flagDesignerMinX && y >= this.flagDesignerMinY && x <= this.flagDesignerMinX + this.flagDesignerWidth + && y <= this.flagDesignerMinY + this.flagDesignerHeight) + { + int unScaledX = (int) Math.floor((x - this.flagDesignerMinX) / this.flagDesignerScale.x); + int unScaledY = (int) Math.floor((y - this.flagDesignerMinY) / this.flagDesignerScale.y); + this.selectionMaxX = Math.min(unScaledX + 1, this.spaceRaceData.getFlagData().getWidth()); + this.selectionMaxY = Math.min(unScaledY + 1, this.spaceRaceData.getFlagData().getHeight()); + + if (this.selectionMinX > this.selectionMaxX) + { + int temp = this.selectionMaxX - 1; + this.selectionMaxX = this.selectionMinX + 1; + this.selectionMinX = temp; + } + + if (this.selectionMinY > this.selectionMaxY) + { + int temp = this.selectionMaxY - 1; + this.selectionMaxY = this.selectionMinY + 1; + this.selectionMinY = temp; + } + } else + { + this.selectionMaxX = this.selectionMaxY = -1; + } + } + } + + if (this.sliderBrushSize != null && this.sliderBrushSize.visible) + { + this.sliderBrushSize.displayString = GCCoreUtil.translate("gui.space_race.create.brush_radius.name") + ": " + ((int) Math.floor(this.sliderBrushSize.getNormalizedValue() * 10) + 1); + } + + if (this.sliderEraserSize != null && this.sliderEraserSize.visible) + { + this.sliderEraserSize.displayString = GCCoreUtil.translate("gui.space_race.create.eraser_radius.name") + ": " + ((int) Math.floor(this.sliderEraserSize.getNormalizedValue() * 10) + 1); + } + + if (this.sliderColorR != null && this.sliderColorR.visible) + { + this.sliderColorR.displayString = String.valueOf((int) Math.floor(this.sliderColorR.getColorValueD())); + } + + if (this.sliderColorG != null && this.sliderColorG.visible) + { + this.sliderColorG.displayString = String.valueOf((int) Math.floor(this.sliderColorG.getColorValueD())); + } + + if (this.sliderColorB != null && this.sliderColorB.visible) + { + this.sliderColorB.displayString = String.valueOf((int) Math.floor(this.sliderColorB.getColorValueD())); + } + } else if (this.currentState == EnumSpaceRaceGui.MAIN) + { + if (this.lastMousePressed && !Mouse.isButtonDown(0)) + { + if (this.buttonFlag_hover) + { + this.currentState = EnumSpaceRaceGui.DESIGN_FLAG; + this.initGui(); + } + + if (this.buttonTeamColor_hover) + { + this.currentState = EnumSpaceRaceGui.CHANGE_TEAM_COLOR; + this.initGui(); + } + } + } + + this.lastMousePressed = Mouse.isButtonDown(0); + } + + private void setColor(int unScaledX, int unScaledY, Vector3 color) + { + if (this.selectionMaxX - this.selectionMinX > 0 && this.selectionMaxY - this.selectionMinY > 0) + { + if (unScaledX >= this.selectionMinX && unScaledX <= this.selectionMaxX - 1 && unScaledY >= this.selectionMinY && unScaledY <= this.selectionMaxY - 1) + { + this.markDirty(); + this.spaceRaceData.getFlagData().setColorAt(unScaledX, unScaledY, color); + } + } else + { + this.markDirty(); + this.spaceRaceData.getFlagData().setColorAt(unScaledX, unScaledY, color); + } + } + + private void setColorWithBrushSize(int unScaledX, int unScaledY, Vector3 color, int brushSize) + { + for (int x = unScaledX - brushSize + 1; x < unScaledX + brushSize; x++) + { + for (int y = unScaledY - brushSize + 1; y < unScaledY + brushSize; y++) + { + if (x >= 0 && x < this.spaceRaceData.getFlagData().getWidth() && y >= 0 && y < this.spaceRaceData.getFlagData().getHeight()) + { + float relativeX = x + 0.5F - (unScaledX + 0.5F); + float relativeY = y + 0.5F - (unScaledY + 0.5F); + + if (Math.sqrt(relativeX * relativeX + relativeY * relativeY) <= brushSize) + { + this.setColor(x, y, color); + } + } + } + } + } + + public void updateSpaceRaceData() + { + String playerName = PlayerUtil.getName(this.mc.player); + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(playerName); + + if (race != null && !this.isDirty) + { + this.spaceRaceData = race; + this.canEdit = canPlayerEdit(); + + if (!this.textBoxRename.text.equals(race.getTeamName())) + { + this.textBoxRename.text = race.getTeamName(); + } + } + } + + public void sendSpaceRaceData() + { + if (this.canEdit) + { + List objList = new ArrayList(); + objList.add(this.spaceRaceData.getSpaceRaceID()); + objList.add(this.spaceRaceData.getTeamName()); + objList.add(this.spaceRaceData.getFlagData()); + objList.add(this.spaceRaceData.getTeamColor()); + objList.add(this.spaceRaceData.getPlayerNames().toArray(new String[this.spaceRaceData.getPlayerNames().size()])); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_START_NEW_SPACE_RACE, GCCoreUtil.getDimensionID(mc.world), objList)); + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.drawDefaultBackground(); + + if (this.initialized) + { + this.buttonFlag_hover = this.canEdit && this.currentState == EnumSpaceRaceGui.MAIN && par1 >= this.buttonFlag_xPosition && par2 >= this.buttonFlag_yPosition + && par1 < this.buttonFlag_xPosition + this.buttonFlag_width && par2 < this.buttonFlag_yPosition + this.buttonFlag_height; + this.buttonTeamColor_hover = this.canEdit && this.currentState == EnumSpaceRaceGui.MAIN && par1 >= this.buttonTeamColor_xPosition && par2 >= this.buttonTeamColor_yPosition + && par1 < this.buttonTeamColor_xPosition + this.buttonTeamColor_width && par2 < this.buttonTeamColor_yPosition + this.buttonTeamColor_height; + + switch (this.currentState) + { + case MAIN: + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.create.title.name"), this.width / 2, this.height / 2 - this.height / 3 - 15, 16777215); + this.drawFlagButton(); + this.drawColorButton(); + + GuiElementGradientButton serverStats = (GuiElementGradientButton) this.buttonList.get(this.canEdit ? 4 : 2); + GuiElementGradientButton localStats = (GuiElementGradientButton) this.buttonList.get(this.canEdit ? 5 : 3); + + if (par1 > serverStats.x && par1 < serverStats.x + serverStats.width && par2 > serverStats.y && par2 < serverStats.y + serverStats.height) + { + serverStats.displayString = GCCoreUtil.translate("gui.space_race.coming_soon"); + } else + { + serverStats.displayString = GCCoreUtil.translate("gui.space_race.create.server_stats.name"); + } + + if (par1 > localStats.x && par1 < localStats.x + localStats.width && par2 > localStats.y && par2 < localStats.y + localStats.height) + { + localStats.displayString = GCCoreUtil.translate("gui.space_race.coming_soon"); + } else + { + localStats.displayString = GCCoreUtil.translate("gui.space_race.create.global_stats.name"); + } + + break; + case ADD_PLAYER: + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.create.invite_player.name"), this.width / 2, this.height / 2 - this.height / 3 - 15, 16777215); + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.create.player_radius.name"), this.width / 2, this.height / 2 + this.height / 3 + 3, + ColorUtil.to32BitColor(255, 180, 40, 40)); + break; + case REMOVE_PLAYER: + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.create.remove_player.name"), this.width / 2, this.height / 2 - this.height / 3 - 15, 16777215); + break; + case DESIGN_FLAG: + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + + for (int x = 0; x < this.spaceRaceData.getFlagData().getWidth(); x++) + { + for (int y = 0; y < this.spaceRaceData.getFlagData().getHeight(); y++) + { + Vector3 color = this.spaceRaceData.getFlagData().getColorAt(x, y); + GL11.glColor4f(color.floatX(), color.floatY(), color.floatZ(), 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x, this.flagDesignerMinY + y * this.flagDesignerScale.y + 1 * this.flagDesignerScale.y, 0.0D) + .endVertex(); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x + 1 * this.flagDesignerScale.x, + this.flagDesignerMinY + y * this.flagDesignerScale.y + 1 * this.flagDesignerScale.y, 0.0D).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x + 1 * this.flagDesignerScale.x, this.flagDesignerMinY + y * this.flagDesignerScale.y, 0.0D) + .endVertex(); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x, this.flagDesignerMinY + y * this.flagDesignerScale.y, 0.0D).endVertex(); + tessellator.draw(); + } + } + + if (this.checkboxShowGrid != null && this.checkboxShowGrid.isSelected != null && this.checkboxShowGrid.isSelected) + { + for (int x = 0; x <= this.spaceRaceData.getFlagData().getWidth(); x++) + { + worldRenderer.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x, this.flagDesignerMinY, this.zLevel).color(0.0F, 0.0F, 0.0F, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x, this.flagDesignerMinY + this.flagDesignerHeight, this.zLevel).color(0.0F, 0.0F, 0.0F, 1.0F) + .endVertex(); + tessellator.draw(); + } + + for (int y = 0; y <= this.spaceRaceData.getFlagData().getHeight(); y++) + { + worldRenderer.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(this.flagDesignerMinX, this.flagDesignerMinY + y * this.flagDesignerScale.y, this.zLevel).color(0.0F, 0.0F, 0.0F, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.flagDesignerWidth, this.flagDesignerMinY + y * this.flagDesignerScale.y, this.zLevel).color(0.0F, 0.0F, 0.0F, 1.0F) + .endVertex(); + tessellator.draw(); + } + } + + if (!(this.lastMousePressed && this.checkboxSelector.isSelected != null && this.checkboxSelector.isSelected) && this.selectionMaxX - this.selectionMinX > 0 + && this.selectionMaxY - this.selectionMinY > 0) + { + worldRenderer.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR); + float col = (float) (Math.sin(this.ticksPassed * 0.3) * 0.4 + 0.1); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMinX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMinY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMaxX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMinY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMaxX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMaxY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMinX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMaxY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMinX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMinY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + tessellator.draw(); + } + + int guiRight = this.width / 2 + this.width / 3; + int guiBottom = this.height / 2 + this.height / 4; + float x1 = this.sliderColorR.x; + float x2 = guiRight - 10; + float y1 = guiBottom - 10 - (x2 - x1); + float y2 = guiBottom - 10; + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(x2, y1, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(x1, y1, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(x1, y2, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(x2, y2, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) x2 - 1, (double) y1 + 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x1 + 1, (double) y1 + 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x1 + 1, (double) y2 - 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x2 - 1, (double) y2 - 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + tessellator.draw(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + break; + case CHANGE_TEAM_COLOR: + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + x1 = this.sliderColorG.x; + x2 = this.sliderColorG.x + this.sliderColorG.getButtonWidth(); + y1 = this.height / 2 - this.height / 3 + 5; + y2 = this.sliderColorG.y - 5; + float xDiff = x2 - x1; + float yDiff = y2 - y1; + + if (xDiff > yDiff) + { + x1 = this.sliderColorG.x + this.sliderColorG.getButtonWidth() / 2 - yDiff / 2; + x2 = this.sliderColorG.x + this.sliderColorG.getButtonWidth() / 2 + yDiff / 2; + } else + { + y2 = y1 + xDiff; + } + + tessellator = Tessellator.getInstance(); + worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) x2 - 1, (double) y1 + 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x1 + 1, (double) y1 + 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x1 + 1, (double) y2 - 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x2 - 1, (double) y2 - 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + tessellator.draw(); + + this.spaceRaceData.setTeamColor(new Vector3(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue())); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + break; + } + } + + super.drawScreen(par1, par2, par3); + + if (this.currentState == EnumSpaceRaceGui.ADD_PLAYER && this.gradientListAddPlayers != null) + { + this.gradientListAddPlayers.draw(par1, par2); + } + + if (this.currentState == EnumSpaceRaceGui.REMOVE_PLAYER && this.gradientListRemovePlayers != null) + { + this.gradientListRemovePlayers.draw(par1, par2); + } + + for (GuiButton button : this.buttonList) + { + if (button instanceof GuiElementSlider) + { + ((GuiElementSlider) button).drawHoveringText(); + } + } + } + + private void markDirty() + { + this.isDirty = true; + } + + private void drawFlagButton() + { + GL11.glPushMatrix(); + GL11.glTranslatef(this.buttonFlag_xPosition + 2.9F, this.buttonFlag_yPosition + this.buttonFlag_height + 1 - 4, 0); + GL11.glScalef(74.0F, 74.0F, 1F); + GL11.glTranslatef(0.0F, 0.36F, 1.0F); + GL11.glScalef(1.0F, 1.0F, -1F); + this.dummyFlag.flagData = this.spaceRaceData.getFlagData(); + this.dummyModel.renderFlag(this.dummyFlag, this.ticksPassed); + GL11.glColor3f(1, 1, 1); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.0F, 500.0F); + int color = this.buttonFlag_hover ? 170 : 100; + if (this.canEdit) + { + String message = GCCoreUtil.translate("gui.space_race.create.customize.name"); + this.fontRenderer.drawString(message, this.buttonFlag_xPosition + this.buttonFlag_width / 2 - this.fontRenderer.getStringWidth(message) / 2, + this.buttonFlag_yPosition + this.buttonFlag_height / 2 - 5, ColorUtil.to32BitColor(255, color, color, color), this.buttonFlag_hover); + } + GL11.glPopMatrix(); + + if (this.buttonFlag_hover) + { + Gui.drawRect(this.buttonFlag_xPosition, this.buttonFlag_yPosition, this.buttonFlag_xPosition + this.buttonFlag_width, this.buttonFlag_yPosition + this.buttonFlag_height, + ColorUtil.to32BitColor(255, 50, 50, 50)); + } + + Gui.drawRect(this.buttonFlag_xPosition + this.buttonFlag_width - 1, this.buttonFlag_yPosition, this.buttonFlag_xPosition + this.buttonFlag_width, + this.buttonFlag_yPosition + this.buttonFlag_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonFlag_xPosition, this.buttonFlag_yPosition, this.buttonFlag_xPosition + 1, this.buttonFlag_yPosition + this.buttonFlag_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonFlag_xPosition, this.buttonFlag_yPosition, this.buttonFlag_xPosition + this.buttonFlag_width, this.buttonFlag_yPosition + 1, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonFlag_xPosition, this.buttonFlag_yPosition + this.buttonFlag_height - 1, this.buttonFlag_xPosition + this.buttonFlag_width, + this.buttonFlag_yPosition + this.buttonFlag_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + } + + private void drawColorButton() + { + Gui.drawRect(this.buttonTeamColor_xPosition + 2, this.buttonTeamColor_yPosition + 2, this.buttonTeamColor_xPosition + this.buttonTeamColor_width - 2, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height - 2, ColorUtil.to32BitColor(255, (int) (this.spaceRaceData.getTeamColor().x * 255.0F), + (int) (this.spaceRaceData.getTeamColor().y * 255.0F), (int) (this.spaceRaceData.getTeamColor().z * 255.0F))); + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.0F, 500.0F); + int color = this.buttonTeamColor_hover ? 170 : 100; + if (canEdit) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.change_color.name.0"), + this.buttonTeamColor_xPosition + this.buttonTeamColor_width / 2 - this.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.change_color.name.0")) / 2, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height / 2 - 13, ColorUtil.to32BitColor(255, color, color, color), this.buttonTeamColor_hover); + } + this.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.change_color.name.1"), + this.buttonTeamColor_xPosition + this.buttonTeamColor_width / 2 - this.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.change_color.name.1")) / 2, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height / 2 - (canEdit ? 3 : 9), ColorUtil.to32BitColor(255, color, color, color), this.buttonTeamColor_hover); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.change_color.name.2"), + this.buttonTeamColor_xPosition + this.buttonTeamColor_width / 2 - this.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.change_color.name.2")) / 2, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height / 2 + (canEdit ? 7 : 1), ColorUtil.to32BitColor(255, color, color, color), this.buttonTeamColor_hover); + GL11.glPopMatrix(); + + if (this.buttonTeamColor_hover) + { + Gui.drawRect(this.buttonTeamColor_xPosition, this.buttonTeamColor_yPosition, this.buttonTeamColor_xPosition + this.buttonTeamColor_width, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height, ColorUtil.to32BitColor(55, 50, 50, 50)); + } + + Gui.drawRect(this.buttonTeamColor_xPosition + this.buttonTeamColor_width - 1, this.buttonTeamColor_yPosition, this.buttonTeamColor_xPosition + this.buttonTeamColor_width, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonTeamColor_xPosition, this.buttonTeamColor_yPosition, this.buttonTeamColor_xPosition + 1, this.buttonTeamColor_yPosition + this.buttonTeamColor_height, + ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonTeamColor_xPosition, this.buttonTeamColor_yPosition, this.buttonTeamColor_xPosition + this.buttonTeamColor_width, this.buttonTeamColor_yPosition + 1, + ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonTeamColor_xPosition, this.buttonTeamColor_yPosition + this.buttonTeamColor_height - 1, this.buttonTeamColor_xPosition + this.buttonTeamColor_width, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + } + + @Override + public void drawWorldBackground(int i) + { + if (this.mc.world != null) + { + int scaleX = Math.min(this.ticksPassed * 14, this.width / 3); + int scaleY = Math.min(this.ticksPassed * 14, this.height / 3); + + if (scaleX == this.width / 3 && scaleY == this.height / 3 && !this.initialized) + { + this.initialized = true; + this.initGui(); + } + + this.drawGradientRect(this.width / 2 - scaleX, this.height / 2 - scaleY, this.width / 2 + scaleX, this.height / 2 + scaleY, -1072689136, -804253680); + } else + { + this.drawBackground(i); + } + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + if (checkbox.equals(this.checkboxEraser)) + { + if (newSelected) + { + this.sliderEraserSize.visible = true; + + if (this.checkboxPaintbrush.isSelected) + { + this.sliderBrushSize.visible = false; + this.checkboxPaintbrush.isSelected = false; + } else if (this.checkboxSelector.isSelected) + { + this.checkboxSelector.isSelected = false; + } else if (this.checkboxColorSelector.isSelected) + { + this.checkboxColorSelector.isSelected = false; + } + } else + { + this.sliderEraserSize.visible = false; + } + } else if (checkbox.equals(this.checkboxPaintbrush)) + { + if (newSelected) + { + this.sliderBrushSize.visible = true; + + if (this.checkboxEraser.isSelected) + { + this.sliderEraserSize.visible = false; + this.checkboxEraser.isSelected = false; + } else if (this.checkboxSelector.isSelected) + { + this.checkboxSelector.isSelected = false; + } else if (this.checkboxColorSelector.isSelected) + { + this.checkboxColorSelector.isSelected = false; + } + } else + { + this.sliderBrushSize.visible = false; + } + } else if (checkbox.equals(this.checkboxSelector)) + { + if (newSelected) + { + if (this.checkboxEraser.isSelected) + { + this.sliderEraserSize.visible = false; + this.checkboxEraser.isSelected = false; + } else if (this.checkboxPaintbrush.isSelected) + { + this.sliderBrushSize.visible = false; + this.checkboxPaintbrush.isSelected = false; + } else if (this.checkboxColorSelector.isSelected) + { + this.checkboxColorSelector.isSelected = false; + } + } + } else if (checkbox.equals(this.checkboxColorSelector)) + { + if (newSelected) + { + if (this.checkboxEraser.isSelected) + { + this.sliderEraserSize.visible = false; + this.checkboxEraser.isSelected = false; + } else if (this.checkboxPaintbrush.isSelected) + { + this.sliderBrushSize.visible = false; + this.checkboxPaintbrush.isSelected = false; + } else if (this.checkboxSelector.isSelected) + { + this.checkboxSelector.isSelected = false; + } + } + } + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return checkbox.equals(this.checkboxPaintbrush); + + } + + @Override + public void onIntruderInteraction() + { + + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return this.canEdit; + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + if (textBox == this.textBoxRename) + { + if (!newText.equals(this.spaceRaceData.getTeamName())) + { + this.spaceRaceData.setTeamName(newText); + this.markDirty(); + } + } + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + if (textBox == this.textBoxRename) + { + return this.spaceRaceData.getTeamName(); + } + + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + return ColorUtil.to32BitColor(255, 255, 255, 255); + } + + private File writeFlagToFile() + { + try + { + String dirName = Minecraft.getMinecraft().gameDir.getAbsolutePath(); + File directory = new File(dirName, "assets"); + boolean success = true; + if (!directory.exists()) + { + success = directory.mkdir(); + } + if (success) + { + directory = new File(directory, "flagCache"); + if (!directory.exists()) + { + success = directory.mkdir(); + } + + if (success) + { + File file = new File(directory, this.spaceRaceData.getSpaceRaceID() + ".png"); + ImageIO.write(this.spaceRaceData.getFlagData().toBufferedImage(), "png", file); + return file; + } + } + } catch (IOException e) + { + e.printStackTrace(); + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiPreLaunchChecklist.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiPreLaunchChecklist.java new file mode 100644 index 00000000..4dc5fa66 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiPreLaunchChecklist.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckboxPreLaunch; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GuiPreLaunchChecklist extends GuiScreen implements GuiElementCheckboxPreLaunch.ICheckBoxCallback +{ + + private static final ResourceLocation bookGuiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/checklist_book.png"); + private int bookImageWidth = 192; + private int bookImageHeight = 192; + private List> checklistKeys; + private int currPage = 0; + private int bookTotalPages; + private NextPageButton buttonNextPage; + private NextPageButton buttonPreviousPage; + private NBTTagCompound tagCompound; + private Map checkboxToKeyMap = Maps.newHashMap(); + + public GuiPreLaunchChecklist(List> checklistKeys, NBTTagCompound tagCompound) + { + this.tagCompound = tagCompound != null ? tagCompound : new NBTTagCompound(); + this.checklistKeys = checklistKeys; + } + + @Override + public void initGui() + { + this.buttonList.clear(); + this.checkboxToKeyMap.clear(); + + int i = (this.width - this.bookImageWidth) / 2; + int j = 2; + this.buttonList.add(this.buttonNextPage = new NextPageButton(0, i + 120, j + 154, true)); + this.buttonList.add(this.buttonPreviousPage = new NextPageButton(1, i + 38, j + 154, false)); + + int yPos = 25; + int index = 2; + int page = 0; + + for (List e : this.checklistKeys) + { + if (e.isEmpty()) + { + continue; + } + String title = e.get(0); + List checkboxes = e.subList(1, e.size()); + GuiElementCheckboxPreLaunch element = new GuiElementCheckboxPreLaunch(index, this, this.width / 2 - 73 + 11, yPos, GCCoreUtil.translate(title), 0); + int size = element.willFit(152 - yPos); + if (size >= 0) + { + if (page == this.currPage) + { + this.buttonList.add(element); + this.checkboxToKeyMap.put(element.id, title); + index++; + } + yPos += size + mc.fontRenderer.FONT_HEIGHT / 2; + } else + { + page++; + yPos = 25; + size = element.willFit(152 - yPos); + element = new GuiElementCheckboxPreLaunch(index, this, this.width / 2 - 73 + 11, yPos, GCCoreUtil.translate(title), 0); + + if (page == this.currPage) + { + this.buttonList.add(element); + this.checkboxToKeyMap.put(element.id, title); + index++; + } + yPos += size + mc.fontRenderer.FONT_HEIGHT / 2; + } + + for (String checkbox : checkboxes) + { + element = new GuiElementCheckboxPreLaunch(index, this, this.width / 2 - 73 + 16, yPos, GCCoreUtil.translate("checklist." + checkbox + ".key"), 0); + size = element.willFit(152 - yPos); + if (size >= 0) + { + if (page == this.currPage) + { + this.buttonList.add(element); + this.checkboxToKeyMap.put(element.id, title + "." + checkbox + ".key"); + index++; + } + yPos += size + mc.fontRenderer.FONT_HEIGHT / 2; + } else + { + page++; + yPos = 25; + size = element.willFit(152 - yPos); + element = new GuiElementCheckboxPreLaunch(index, this, this.width / 2 - 73 + 16, yPos, GCCoreUtil.translate("checklist." + checkbox + ".key"), 0); + + if (page == this.currPage) + { + this.buttonList.add(element); + this.checkboxToKeyMap.put(element.id, title + "." + checkbox + ".key"); + index++; + } + yPos += size + mc.fontRenderer.FONT_HEIGHT / 2; + } + } + } + + bookTotalPages = page + 1; + this.updateButtons(); + } + + private void updateButtons() + { + this.buttonNextPage.visible = this.currPage < this.bookTotalPages - 1; + this.buttonPreviousPage.visible = this.currPage > 0; + } + + private void onDataChange() + { + for (GuiButton button : this.buttonList) + { + if (button instanceof GuiElementCheckboxPreLaunch) + { + this.tagCompound.setBoolean(this.checkboxToKeyMap.get(button.id), ((GuiElementCheckboxPreLaunch) button).isSelected); + } + } + + // Send changed tag compound to server + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_UPDATE_CHECKLIST, GCCoreUtil.getDimensionID(mc.player.world), new Object[] + {this.tagCompound})); + + // Update client item + ItemStack stack = mc.player + .getHeldItem(EnumHand.MAIN_HAND /* + * TODO Support off-hand use + */); + NBTTagCompound tagCompound = stack.getTagCompound(); + if (tagCompound == null) + { + tagCompound = new NBTTagCompound(); + } + tagCompound.setTag("checklistData", this.tagCompound); + stack.setTagCompound(tagCompound); + } + + @Override + protected void actionPerformed(GuiButton buttonClicked) + { + if (buttonClicked == this.buttonNextPage) + { + this.currPage++; + this.initGui(); + } else if (buttonClicked == this.buttonPreviousPage) + { + this.currPage--; + this.initGui(); + } + } + + @Override + public void updateScreen() + { + + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(bookGuiTexture); + int i = (this.width - this.bookImageWidth) / 2; + int j = 2; + this.drawTexturedModalRect(i, j, 0, 0, this.bookImageWidth, this.bookImageHeight); + + super.drawScreen(par1, par2, par3); + } + + @Override + public void onSelectionChanged(GuiElementCheckboxPreLaunch element, boolean newSelected) + { + // Set all 'sub-boxes' to the new selection + boolean started = false; + for (int i = 2; i < this.buttonList.size(); ++i) + { + GuiButton button = this.buttonList.get(i); + if (started) + { + if (button.x > element.x) + { + ((GuiElementCheckboxPreLaunch) button).isSelected = newSelected; + } else + { + break; + } + } else if (button == element) + { + started = true; + } + } + + this.onDataChange(); + } + + @Override + public boolean canPlayerEdit(GuiElementCheckboxPreLaunch checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckboxPreLaunch checkbox) + { + return this.tagCompound.getBoolean(this.checkboxToKeyMap.get(checkbox.id)); + } + + @Override + public void onIntruderInteraction() + { + } + + @SideOnly(Side.CLIENT) + static class NextPageButton extends GuiButton + { + + private final boolean forward; + + public NextPageButton(int id, int x, int y, boolean forward) + { + super(id, x, y, 23, 13, ""); + this.forward = forward; + } + + @Override + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partial) + { + if (this.visible) + { + boolean flag = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.getTextureManager().bindTexture(bookGuiTexture); + int i = 0; + int j = 192; + + if (flag) + { + i += 23; + } + + if (!this.forward) + { + j += 13; + } + + this.drawTexturedModalRect(this.x, this.y, i, j, 23, 13); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiStarBackground.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiStarBackground.java new file mode 100644 index 00000000..af3c8d52 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiStarBackground.java @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.GLU; + +public abstract class GuiStarBackground extends GuiScreen +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/stars.png"); + private static final ResourceLocation blackTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/black.png"); + + public void drawBlackBackground() + { + final ScaledResolution var5 = ClientUtil.getScaledRes(this.mc, this.mc.displayWidth, this.mc.displayHeight); + final int var6 = var5.getScaledWidth(); + final int var7 = var5.getScaledHeight(); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_ALPHA_TEST); + this.mc.getTextureManager().bindTexture(GuiStarBackground.blackTexture); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.0D, var7, -90.0D).tex(0.0D, 1.0D).endVertex(); + worldRenderer.pos(var6, var7, -90.0D).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(var6, 0.0D, -90.0D).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(0.0D, 0.0D, -90.0D).tex(0.0D, 0.0D).endVertex(); + tess.draw(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + private void drawPanorama2(float par1) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GLU.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + final byte var5 = 1; + + for (int var6 = 0; var6 < var5 * var5; ++var6) + { + GL11.glPushMatrix(); + final float var7 = ((float) (var6 % var5) / (float) var5 - 0.5F) / 128.0F; + final float var8 = ((float) (var6 / var5) / (float) var5 - 0.5F) / 128.0F; + final float var9 = 0.0F; + + float mY; + float mX; + + if (Mouse.getY() < this.height) + { + mY = (-this.height + Mouse.getY()) / 100F; + } else + { + mY = (-this.height + Mouse.getY()) / 100F; + } + + mX = (this.width - Mouse.getX()) / 100F; + + this.doCustomTranslation(0, var7, var8, var9, mX, mY); + + for (int var10 = 0; var10 < 9; ++var10) + { + GL11.glPushMatrix(); + + if (var10 == 1) + { + GL11.glTranslatef(1.96F, 0.0F, 0.0F); + } + + if (var10 == 2) + { + GL11.glTranslatef(-1.96F, 0.0F, 0.0F); + } + + if (var10 == 3) + { + GL11.glTranslatef(0.0F, 1.96F, 0.0F); + } + + if (var10 == 4) + { + GL11.glTranslatef(0.0F, -1.96F, 0.0F); + } + + if (var10 == 5) + { + GL11.glTranslatef(-1.96F, -1.96F, 0.0F); + } + + if (var10 == 6) + { + GL11.glTranslatef(-1.96F, 1.96F, 0.0F); + } + + if (var10 == 7) + { + GL11.glTranslatef(1.96F, -1.96F, 0.0F); + } + + if (var10 == 8) + { + GL11.glTranslatef(1.96F, 1.96F, 0.0F); + } + + this.mc.getTextureManager().bindTexture(GuiStarBackground.backgroundTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); + worldRenderer.pos(-1.0D, -1.0D, 1.0D).tex(0.0F + 1, 0.0F + 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(1.0D, -1.0D, 1.0D).tex(1.0F - 1, 0.0F + 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(1.0D, 1.0D, 1.0D).tex(1.0F - 1, 1.0F - 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(-1.0D, 1.0D, 1.0D).tex(0.0F + 1, 1.0F - 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + tess.draw(); + GL11.glPopMatrix(); + } + + GL11.glPopMatrix(); + } + + worldRenderer.setTranslation(0.0D, 0.0D, 0.0D); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + + private void drawPanorama(float par1) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GLU.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + final byte var5 = 1; + + for (int var6 = 0; var6 < var5 * var5; ++var6) + { + GL11.glPushMatrix(); + final float var7 = ((float) (var6 % var5) / (float) var5 - 0.5F) / 64.0F; + final float var8 = ((float) (var6 / var5) / (float) var5 - 0.5F) / 64.0F; + final float var9 = 0.0F; + + float mY; + float mX; + + if (Mouse.getY() < this.height) + { + mY = (-this.height + Mouse.getY()) / 100F; + } else + { + mY = (-this.height + Mouse.getY()) / 100F; + } + + mX = (this.width - Mouse.getX()) / 100F; + + this.doCustomTranslation(1, var7, var8, var9, mX, mY); + + GL11.glRotatef(MathHelper.sin(par1 / 1000.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-par1 * 0.005F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(41, 0, 0, 1); + + for (int var10 = 0; var10 < 6; ++var10) + { + GL11.glPushMatrix(); + + if (var10 == 1) + { + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + } + + if (var10 == 2) + { + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + } + + if (var10 == 3) + { + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + } + + if (var10 == 4) + { + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + } + + if (var10 == 5) + { + GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); + } + + this.mc.getTextureManager().bindTexture(GuiStarBackground.backgroundTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); + worldRenderer.pos(-1.0D, -1.0D, 1.0D).tex(0.0F + 1, 0.0F + 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(1.0D, -1.0D, 1.0D).tex(1.0F - 1, 0.0F + 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(1.0D, 1.0D, 1.0D).tex(1.0F - 1, 1.0F - 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(-1.0D, 1.0D, 1.0D).tex(0.0F + 1, 1.0F - 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + tess.draw(); + GL11.glPopMatrix(); + } + + GL11.glPopMatrix(); + } + + worldRenderer.setTranslation(0.0D, 0.0D, 0.0D); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + + private void rotateAndBlurSkybox() + { + this.mc.getTextureManager().bindTexture(GuiStarBackground.backgroundTexture); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColorMask(true, true, true, false); + GL11.glPushMatrix(); + GL11.glPopMatrix(); + GL11.glColorMask(true, true, true, true); + } + + public void renderSkybox() + { + GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + GL11.glPushMatrix(); + GL11.glScalef(1.0F, 0.0F, 1.0F); + this.drawPanorama(1); + this.drawPanorama2(1); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_TEXTURE_2D); + this.rotateAndBlurSkybox(); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); + final float var5 = this.width > this.height ? 120.0F / this.width : 120.0F / this.height; + final float var6 = this.height * var5 / 256.0F; + final float var7 = this.width * var5 / 256.0F; + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + final int var8 = this.width; + final int var9 = this.height; + worldRenderer.pos(0.0D, var9, this.zLevel).tex(0.5F - var6, 0.5F + var7).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + worldRenderer.pos(var8, var9, this.zLevel).tex(0.5F - var6, 0.5F - var7).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + worldRenderer.pos(var8, 0.0D, this.zLevel).tex(0.5F + var6, 0.5F - var7).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + worldRenderer.pos(0.0D, 0.0D, this.zLevel).tex(0.5F + var6, 0.5F + var7).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + tess.draw(); + GL11.glPopMatrix(); + } + + public abstract void doCustomTranslation(int type, float coord1, float coord2, float coord3, float mX, float mY); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiTeleporting.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiTeleporting.java new file mode 100644 index 00000000..e6cdf687 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiTeleporting.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.gui.GuiScreen; + +public class GuiTeleporting extends GuiScreen +{ + + private final int targetDimensionID; + protected String message; + + public GuiTeleporting(int targetDimensionID) + { + this.targetDimensionID = targetDimensionID; + String[] possibleStrings = new String[] + {"Taking one small step", "Taking one giant leap", "Prepare for entry!"}; + this.message = possibleStrings[(int) (Math.random() * possibleStrings.length)]; + TickHandlerClient.teleportingGui = this; + } + + @Override + public void initGui() + { + super.initGui(); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + super.drawScreen(mouseX, mouseY, partialTicks); + this.drawBackground(0); + this.drawCenteredString(this.fontRenderer, this.message, this.width / 2, this.height / 2, ColorUtil.to32BitColor(255, 255, 255, 255)); + } + + @Override + public void updateScreen() + { + super.updateScreen(); + if (mc.player != null && mc.player.world != null) + { + // Screen will exit when the player is in the target dimension and + // has started moving down + if (mc.player.world.provider.getDimension() == this.targetDimensionID) + { + if ((mc.player.world.provider instanceof WorldProviderSpaceStation || (mc.player.posY - mc.player.lastTickPosY) < 0.0)) + { + mc.displayGuiScreen(null); + TickHandlerClient.teleportingGui = null; + } + } + } + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/InventoryTabGalacticraft.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/InventoryTabGalacticraft.java new file mode 100644 index 00000000..555a5884 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/InventoryTabGalacticraft.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import micdoodle8.mods.galacticraft.api.client.tabs.AbstractTab; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class InventoryTabGalacticraft extends AbstractTab +{ + + public InventoryTabGalacticraft() + { + super(0, 0, 0, new ItemStack(GCItems.oxMask)); + } + + @Override + public void onTabClicked() + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_OPEN_EXTENDED_INVENTORY, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {})); + ClientProxyCore.playerClientHandler.onBuild(0, FMLClientHandler.instance().getClientPlayerEntity()); + } + + @Override + public boolean shouldAddToList() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/GalacticraftJEI.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/GalacticraftJEI.java new file mode 100644 index 00000000..8890142f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/GalacticraftJEI.java @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei; + +import java.util.LinkedList; +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.BlankModPlugin; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.IJeiRuntime; +import mezz.jei.api.IModRegistry; +import mezz.jei.api.IRecipeRegistry; +import mezz.jei.api.JEIPlugin; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; +import mezz.jei.api.recipe.IRecipeWrapper; +import mezz.jei.api.recipe.IRecipeWrapperFactory; +import mezz.jei.api.recipe.IStackHelper; +import mezz.jei.api.recipe.VanillaRecipeCategoryUid; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.api.recipe.ShapedRecipesGC; +import micdoodle8.mods.galacticraft.api.recipe.ShapelessOreRecipeGC; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.client.jei.buggy.BuggyRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.buggy.BuggyRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.buggy.BuggyRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator.CircuitFabricatorRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator.CircuitFabricatorRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator.CircuitFabricatorRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor.IngotCompressorRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor.IngotCompressorShapedRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor.IngotCompressorShapelessRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor.OxygenCompressorRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor.OxygenCompressorRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor.OxygenCompressorRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.refinery.RefineryRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.refinery.RefineryRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.refinery.RefineryRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeWrapper; +import micdoodle8.mods.galacticraft.core.recipe.ShapedRecipeNBT; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +@JEIPlugin +public class GalacticraftJEI extends BlankModPlugin +{ + + private static IModRegistry registryCached = null; + private static IRecipeRegistry recipesCached = null; + + private static boolean hiddenSteel = false; + private static boolean hiddenAdventure = false; + public static List hidden = new LinkedList<>(); + private static IRecipeCategory ingotCompressorCategory; + + @Override + public void register(@Nonnull IModRegistry registry) + { + registryCached = registry; + IStackHelper stackHelper = registry.getJeiHelpers().getStackHelper(); + + registry.handleRecipes(INasaWorkbenchRecipe.class, Tier1RocketRecipeWrapper::new, RecipeCategories.ROCKET_T1_ID); + registry.handleRecipes(INasaWorkbenchRecipe.class, BuggyRecipeWrapper::new, RecipeCategories.BUGGY_ID); + registry.handleRecipes(CircuitFabricatorRecipeWrapper.class, recipe -> recipe, RecipeCategories.CIRCUIT_FABRICATOR_ID); + registry.handleRecipes(ShapedRecipesGC.class, IngotCompressorShapedRecipeWrapper::new, RecipeCategories.INGOT_COMPRESSOR_ID); + registry.handleRecipes(ShapelessOreRecipeGC.class, new IRecipeWrapperFactory() + { + + @Override + public IRecipeWrapper getRecipeWrapper(ShapelessOreRecipeGC recipe) + { + return new IngotCompressorShapelessRecipeWrapper(stackHelper, recipe); + } + }, RecipeCategories.INGOT_COMPRESSOR_ID); + registry.handleRecipes(RefineryRecipeWrapper.class, recipe -> recipe, RecipeCategories.REFINERY_ID); + registry.handleRecipes(OxygenCompressorRecipeWrapper.class, recipe -> recipe, RecipeCategories.OXYGEN_COMPRESSOR_ID); + registry.handleRecipes(ShapedRecipeNBT.class, NBTSensitiveShapedRecipeWrapper::new, VanillaRecipeCategoryUid.CRAFTING); + + registry.addRecipes(Tier1RocketRecipeMaker.getRecipesList(), RecipeCategories.ROCKET_T1_ID); + registry.addRecipes(BuggyRecipeMaker.getRecipesList(), RecipeCategories.BUGGY_ID); + registry.addRecipes(CircuitFabricatorRecipeMaker.getRecipesList(), RecipeCategories.CIRCUIT_FABRICATOR_ID); + registry.addRecipes(CompressorRecipes.getRecipeListAll(), RecipeCategories.INGOT_COMPRESSOR_ID); + registry.addRecipes(OxygenCompressorRecipeMaker.getRecipesList(), RecipeCategories.OXYGEN_COMPRESSOR_ID); + registry.addRecipes(RefineryRecipeMaker.getRecipesList(), RecipeCategories.REFINERY_ID); + + registry.addRecipeCatalyst(new ItemStack(GCBlocks.nasaWorkbench), RecipeCategories.ROCKET_T1_ID, RecipeCategories.BUGGY_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.compactNasaWorkbench), RecipeCategories.ROCKET_T1_ID, RecipeCategories.BUGGY_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.machineBase2, 1, 4), RecipeCategories.CIRCUIT_FABRICATOR_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.machineBase, 1, 12), RecipeCategories.INGOT_COMPRESSOR_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.machineBase2, 1, 0), RecipeCategories.INGOT_COMPRESSOR_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.oxygenCompressor), RecipeCategories.OXYGEN_COMPRESSOR_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.refinery), RecipeCategories.REFINERY_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.crafting), VanillaRecipeCategoryUid.CRAFTING); + registry.getRecipeTransferRegistry().addRecipeTransferHandler(new MagneticCraftingTransferInfo()); + + this.addInformationPages(registry); + GCItems.hideItemsJEI(registry.getJeiHelpers().getIngredientBlacklist()); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registry) + { + IGuiHelper guiHelper = registry.getJeiHelpers().getGuiHelper(); + ingotCompressorCategory = new IngotCompressorRecipeCategory(guiHelper); + registry.addRecipeCategories(new Tier1RocketRecipeCategory(guiHelper), new BuggyRecipeCategory(guiHelper), new CircuitFabricatorRecipeCategory(guiHelper), ingotCompressorCategory, + new OxygenCompressorRecipeCategory(guiHelper), new RefineryRecipeCategory(guiHelper)); + } + + private void addInformationPages(IModRegistry registry) + { + registry.addIngredientInfo(new ItemStack(GCBlocks.oxygenPipe), ItemStack.class, GCCoreUtil.translate("jei.fluid_pipe.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.fuelLoader), ItemStack.class, GCCoreUtil.translate("jei.fuel_loader.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.oxygenCollector), ItemStack.class, GCCoreUtil.translate("jei.oxygen_collector.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.oxygenDistributor), ItemStack.class, GCCoreUtil.translate("jei.oxygen_distributor.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.oxygenSealer), ItemStack.class, GCCoreUtil.translate("jei.oxygen_sealer.info")); + if (CompatibilityManager.isAppEngLoaded()) + { + registry.addIngredientInfo(new ItemStack(GCBlocks.machineBase2), ItemStack.class, new String[] + {GCCoreUtil.translate("jei.electric_compressor.info"), GCCoreUtil.translate("jei.electric_compressor.appeng.info")}); + } else + { + registry.addIngredientInfo(new ItemStack(GCBlocks.machineBase2), ItemStack.class, GCCoreUtil.translate("jei.electric_compressor.info")); + } + registry.addIngredientInfo(new ItemStack(GCBlocks.crafting), ItemStack.class, GCCoreUtil.translate("jei.magnetic_crafting.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.brightLamp), ItemStack.class, GCCoreUtil.translate("jei.arc_lamp.info")); + registry.addIngredientInfo(new ItemStack(GCItems.wrench), ItemStack.class, GCCoreUtil.translate("jei.wrench.info")); + } + + @Override + public void onRuntimeAvailable(IJeiRuntime rt) + { + recipesCached = rt.getRecipeRegistry(); + } + + public static void updateHidden(boolean hideSteel, boolean hideAdventure) + { + boolean changeHidden = false; + if (hideSteel != hiddenSteel) + { + hiddenSteel = hideSteel; + changeHidden = true; + } + if (hideAdventure != hiddenAdventure) + { + hiddenAdventure = hideAdventure; + changeHidden = true; + } + if (changeHidden && recipesCached != null) + { + unhide(); + List toHide = CompressorRecipes.getRecipeListHidden(hideSteel, hideAdventure); + hidden.clear(); + List allRW = recipesCached.getRecipeWrappers(ingotCompressorCategory); + for (IRecipe recipe : toHide) + { + hidden.add(recipesCached.getRecipeWrapper(recipe, RecipeCategories.INGOT_COMPRESSOR_ID)); + } + hide(); + } + } + + private static void hide() + { + for (IRecipeWrapper wrapper : hidden) + { + recipesCached.hideRecipe(wrapper); + } + } + + private static void unhide() + { + for (IRecipeWrapper wrapper : hidden) + { + recipesCached.unhideRecipe(wrapper); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/MagneticCraftingTransferInfo.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/MagneticCraftingTransferInfo.java new file mode 100644 index 00000000..a0f3dc93 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/MagneticCraftingTransferInfo.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei; + +import java.util.ArrayList; +import java.util.List; +import mezz.jei.api.recipe.VanillaRecipeCategoryUid; +import mezz.jei.api.recipe.transfer.IRecipeTransferInfo; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCrafting; +import net.minecraft.inventory.Slot; + +public class MagneticCraftingTransferInfo implements IRecipeTransferInfo +{ + + @Override + public Class getContainerClass() + { + return ContainerCrafting.class; + } + + @Override + public String getRecipeCategoryUid() + { + return VanillaRecipeCategoryUid.CRAFTING; + } + + // Crafting matrix inventory slots + @Override + public List getRecipeSlots(ContainerCrafting container) + { + List slots = new ArrayList<>(); + for (int i = 1; i < 10; i++) + { + slots.add(container.getSlot(i)); + } + return slots; + } + + // Player inventory slots + @Override + public List getInventorySlots(ContainerCrafting container) + { + List slots = new ArrayList<>(); + for (int i = 10; i < container.inventorySlots.size(); i++) + { + slots.add(container.getSlot(i)); + } + return slots; + } + + @Override + public boolean canHandle(ContainerCrafting container) + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/NBTSensitiveShapedRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/NBTSensitiveShapedRecipeWrapper.java new file mode 100644 index 00000000..daa5df17 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/NBTSensitiveShapedRecipeWrapper.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei; + +import java.util.Arrays; +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.BlankRecipeWrapper; +import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper; +import micdoodle8.mods.galacticraft.core.recipe.ShapedRecipeNBT; +import net.minecraft.item.ItemStack; + +public class NBTSensitiveShapedRecipeWrapper extends BlankRecipeWrapper implements IShapedCraftingRecipeWrapper +{ + + @Nonnull private final ShapedRecipeNBT recipe; + + public NBTSensitiveShapedRecipeWrapper(@Nonnull ShapedRecipeNBT recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + List recipeItems = Arrays.asList(recipe.recipeItems); + ItemStack recipeOutput = recipe.getRecipeOutput(); + try + { + ingredients.setInputs(ItemStack.class, recipeItems); + if (recipeOutput != null) + { + ingredients.setOutput(ItemStack.class, recipeOutput); + } + } catch (RuntimeException e) + { + e.printStackTrace(); + } + } + + @Override + public int getWidth() + { + return 3; + } + + @Override + public int getHeight() + { + return 3; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/RecipeCategories.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/RecipeCategories.java new file mode 100644 index 00000000..530c71e2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/RecipeCategories.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei; + +public class RecipeCategories +{ + + public static final String ROCKET_T1_ID = "galacticraft.rocketT1"; + public static final String ROCKET_T2_ID = "galacticraft.rocketT2"; + public static final String ROCKET_T3_ID = "galacticraft.rocketT3"; + public static final String ROCKET_CARGO_ID = "galacticraft.cargoRocket"; + public static final String BUGGY_ID = "galacticraft.buggy"; + public static final String CIRCUIT_FABRICATOR_ID = "galacticraft.circuits"; + public static final String INGOT_COMPRESSOR_ID = "galacticraft.ingotcompressor"; + public static final String REFINERY_ID = "galacticraft.refinery"; + public static final String OXYGEN_COMPRESSOR_ID = "galacticraft.oxygencompressor"; + public static final String GAS_LIQUEFIER_ID = "galacticraft.gas_liquefier"; + public static final String METHANE_SYNTHESIZER_ID = "galacticraft.methaneSynthesizer"; + public static final String ASTRO_MINER_ID = "galacticraft.astroMiner"; + public static final String RECIPE_NBTSENSITIVE = "galacticraft.recipeShapedNBT"; +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeCategory.java new file mode 100644 index 00000000..f809f51d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeCategory.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.buggy; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.util.ResourceLocation; + +public class BuggyRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation buggyGuiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/buggybench.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public BuggyRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(buggyGuiTexture, 3, 4, 168, 130); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.BUGGY_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 35, 36); + itemstacks.init(1, true, 53, 36); + itemstacks.init(2, true, 71, 36); + itemstacks.init(3, true, 35, 54); + itemstacks.init(4, true, 71, 54); + itemstacks.init(5, true, 53, 54); + itemstacks.init(6, true, 35, 72); + itemstacks.init(7, true, 53, 72); + itemstacks.init(8, true, 71, 72); + itemstacks.init(9, true, 35, 90); + itemstacks.init(10, true, 53, 90); + itemstacks.init(11, true, 71, 90); + + itemstacks.init(12, true, 17, 36); + itemstacks.init(13, true, 17, 90); + itemstacks.init(14, true, 89, 36); + itemstacks.init(15, true, 89, 90); + itemstacks.init(16, true, 89, 7); + itemstacks.init(17, true, 115, 7); + itemstacks.init(18, true, 141, 7); + itemstacks.init(19, false, 138, 102); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeMaker.java new file mode 100644 index 00000000..a919db41 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeMaker.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.buggy; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.GCItems; +import net.minecraft.item.ItemStack; + +public class BuggyRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getBuggyBenchRecipes()) + { + int chests = BuggyRecipeMaker.countStorage(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } + + public static int countStorage(INasaWorkbenchRecipe recipe) + { + int count = 0; + ItemStack storage = new ItemStack(GCItems.partBuggy, 1, 2); + for (Entry e : recipe.getRecipeInput().entrySet()) + { + if (ItemStack.areItemsEqual(storage, e.getValue())) + count++; + } + return count; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeWrapper.java new file mode 100644 index 00000000..b80a2813 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.buggy; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class BuggyRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public BuggyRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeCategory.java new file mode 100644 index 00000000..e2da52fc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeCategory.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +public class CircuitFabricatorRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation circuitFabTex = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/circuit_fabricator.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated progressBar; + + public CircuitFabricatorRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(circuitFabTex, 3, 4, 168, 101); + this.localizedName = GCCoreUtil.translate("tile.machine2.5.name"); + + IDrawableStatic progressBarDrawable = guiHelper.createDrawable(circuitFabTex, 176, 17, 51, 10); + this.progressBar = guiHelper.createAnimatedDrawable(progressBarDrawable, 70, IDrawableAnimated.StartDirection.LEFT, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.CIRCUIT_FABRICATOR_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(Minecraft minecraft) + { + this.progressBar.draw(minecraft, 85, 16); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 11, 12); + itemstacks.init(1, true, 70, 41); + itemstacks.init(2, true, 70, 59); + itemstacks.init(3, true, 118, 41); + itemstacks.init(4, true, 141, 15); + itemstacks.init(5, false, 148, 81); + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeMaker.java new file mode 100644 index 00000000..b680cce2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeMaker.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; + +public class CircuitFabricatorRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int count = 0; + for (List entry : CircuitFabricatorRecipes.getRecipes()) + { + CircuitFabricatorRecipeWrapper wrapper = new CircuitFabricatorRecipeWrapper(entry, CircuitFabricatorRecipes.getOutput(count)); + recipes.add(wrapper); + count++; + } + + return recipes; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeWrapper.java new file mode 100644 index 00000000..40909674 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeWrapper.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator; + +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class CircuitFabricatorRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final List input; + @Nonnull private final ItemStack output; + + public CircuitFabricatorRecipeWrapper(@Nonnull List objects, @Nonnull ItemStack output) + { + this.input = objects; + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, this.input); + ingredients.setOutput(ItemStack.class, this.output); + } + + public boolean equals(Object o) + { + if (o instanceof CircuitFabricatorRecipeWrapper) + { + CircuitFabricatorRecipeWrapper match = (CircuitFabricatorRecipeWrapper) o; + if (!ItemStack.areItemStacksEqual(match.output, this.output)) + return false; + for (int i = 0; i < this.input.size(); i++) + { + Object a = this.input.get(i); + Object b = match.input.get(i); + if (a == null && b == null) + continue; + + if (a instanceof ItemStack) + { + if (!(b instanceof ItemStack)) + return false; + if (!ItemStack.areItemStacksEqual((ItemStack) a, (ItemStack) b)) + return false; + } else if (a instanceof List) + { + if (!(b instanceof List)) + return false; + List aa = ((List) a); + List bb = ((List) b); + if (aa.size() != bb.size()) + return false; + for (int j = 0; j < aa.size(); j++) + { + ItemStack c = (ItemStack) aa.get(j); + ItemStack d = (ItemStack) bb.get(j); + if (!ItemStack.areItemStacksEqual((ItemStack) c, (ItemStack) d)) + return false; + } + } + } + return true; + } + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorRecipeCategory.java new file mode 100644 index 00000000..4a3b3f45 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorRecipeCategory.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor; + +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.GalacticraftJEI; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class IngotCompressorRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation compressorTex = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/ingot_compressor.png"); + private static final ResourceLocation compressorTexBlank = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/ingot_compressor_blank.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final IDrawable backgroundBlank; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated progressBar; + + private boolean drawNothing = false; + + public IngotCompressorRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(compressorTex, 18, 17, 137, 78); + this.backgroundBlank = guiHelper.createDrawable(compressorTexBlank, 18, 17, 137, 78); + this.localizedName = GCCoreUtil.translate("tile.machine.3.name"); + + IDrawableStatic progressBarDrawable = guiHelper.createDrawable(compressorTex, 176, 13, 52, 17); + this.progressBar = guiHelper.createAnimatedDrawable(progressBarDrawable, 70, IDrawableAnimated.StartDirection.LEFT, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.INGOT_COMPRESSOR_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + if (this.drawNothing) + { + return this.backgroundBlank; + } + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + if (!this.drawNothing) + this.progressBar.draw(minecraft, 59, 19); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + this.drawNothing = GalacticraftJEI.hidden.contains(recipeWrapper); + if (this.drawNothing) + return; + + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + for (int j = 0; j < 9; j++) + { + itemstacks.init(j, true, j % 3 * 18, j / 3 * 18); + } + + itemstacks.init(9, false, 119, 20); + + if (ConfigManagerCore.quickMode) + { + List output = ingredients.getOutputs(ItemStack.class).get(0); + ItemStack stackOutput = output.get(0); + if (stackOutput.getItem().getTranslationKey(stackOutput).contains("compressed")) + { + ItemStack stackDoubled = stackOutput.copy(); + stackDoubled.setCount(stackOutput.getCount() * 2); + output.set(0, stackDoubled); + } + } + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapedRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapedRecipeWrapper.java new file mode 100644 index 00000000..508bdbc6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapedRecipeWrapper.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor; + +import java.awt.Color; +import java.util.Arrays; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.ShapedRecipesGC; +import micdoodle8.mods.galacticraft.core.client.jei.GalacticraftJEI; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; + +public class IngotCompressorShapedRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ShapedRecipesGC recipe; + + public IngotCompressorShapedRecipeWrapper(@Nonnull ShapedRecipesGC recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Arrays.asList(recipe.recipeItems)); + ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput()); + } + + @Override + public void drawInfo(Minecraft mc, int recipeWidth, int recipeHeight, int mouseX, int mouseY) + { + if (GalacticraftJEI.hidden.contains(this)) + { + FontRenderer fontRendererObj = mc.fontRenderer; + String experienceString = "Asteroids Challenge"; + GCCoreUtil.drawStringCentered(experienceString, 69, 8, Color.gray.getRGB(), fontRendererObj); + experienceString = "game mode only!"; + GCCoreUtil.drawStringCentered(experienceString, 69, 20, Color.gray.getRGB(), fontRendererObj); + return; + } + FurnaceRecipes furnaceRecipes = FurnaceRecipes.instance(); + float experience = 0; + + try + { + experience = furnaceRecipes.getSmeltingExperience(this.recipe.getRecipeOutput()); + } catch (Exception e) + { + } + + if (experience > 0) + { + String experienceString = GCCoreUtil.translateWithFormat("gui.jei.category.smelting.experience", experience); + FontRenderer fontRendererObj = mc.fontRenderer; + int stringWidth = fontRendererObj.getStringWidth(experienceString); + fontRendererObj.drawString(experienceString, recipeWidth + 6 - stringWidth, 8, Color.gray.getRGB()); + } + } + + public boolean matches(ShapedRecipesGC test) + { + return this.recipe == test; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapelessRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapelessRecipeWrapper.java new file mode 100644 index 00000000..130cf943 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapelessRecipeWrapper.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor; + +import java.awt.Color; +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import mezz.jei.api.recipe.IStackHelper; +import micdoodle8.mods.galacticraft.api.recipe.ShapelessOreRecipeGC; +import micdoodle8.mods.galacticraft.core.client.jei.GalacticraftJEI; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; + +public class IngotCompressorShapelessRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ShapelessOreRecipeGC recipe; + private final IStackHelper stackHelper; + + public IngotCompressorShapelessRecipeWrapper(IStackHelper stackhelper, @Nonnull ShapelessOreRecipeGC recipe) + { + this.recipe = recipe; + this.stackHelper = stackhelper; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + List> inputs = this.stackHelper.expandRecipeItemStackInputs(recipe.getInput()); + ingredients.setInputLists(ItemStack.class, inputs); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } + + @Override + public void drawInfo(Minecraft mc, int recipeWidth, int recipeHeight, int mouseX, int mouseY) + { + if (GalacticraftJEI.hidden.contains(this)) + { + FontRenderer fontRendererObj = mc.fontRenderer; + String experienceString = "Asteroids Challenge"; + GCCoreUtil.drawStringCentered(experienceString, 69, 8, Color.gray.getRGB(), fontRendererObj); + experienceString = "game mode only!"; + GCCoreUtil.drawStringCentered(experienceString, 69, 20, Color.gray.getRGB(), fontRendererObj); + return; + } + FurnaceRecipes furnaceRecipes = FurnaceRecipes.instance(); + float experience = 0; + + try + { + experience = furnaceRecipes.getSmeltingExperience(this.recipe.getRecipeOutput()); + } catch (Exception e) + { + } + + if (experience > 0) + { + String experienceString = GCCoreUtil.translateWithFormat("gui.jei.category.smelting.experience", experience); + FontRenderer fontRendererObj = mc.fontRenderer; + int stringWidth = fontRendererObj.getStringWidth(experienceString); + fontRendererObj.drawString(experienceString, recipeWidth + 6 - stringWidth, 8, Color.gray.getRGB()); + } + } + + public boolean matches(@Nonnull ShapelessOreRecipeGC test) + { + return this.recipe == test; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeCategory.java new file mode 100644 index 00000000..7ba1e1cf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeCategory.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.BlankRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +public class OxygenCompressorRecipeCategory extends BlankRecipeCategory +{ + + private static final ResourceLocation compressorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/compressor.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + private IDrawableAnimated oxygenBar; + private IDrawable oxygenLabel; + + public OxygenCompressorRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(compressorTexture, 3, 4, 168, 80); + this.localizedName = GCCoreUtil.translate("tile.oxygen_compressor.0.name"); + + IDrawableStatic progressBarDrawableO2 = guiHelper.createDrawable(compressorTexture, 197, 7, 54, 7); + this.oxygenBar = guiHelper.createAnimatedDrawable(progressBarDrawableO2, 70, IDrawableAnimated.StartDirection.RIGHT, true); + this.oxygenLabel = guiHelper.createDrawable(compressorTexture, 187, 0, 10, 10); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.OXYGEN_COMPRESSOR_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + this.oxygenLabel.draw(minecraft, 97, 15); + this.oxygenBar.draw(minecraft, 110, 16); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, false, 129, 61); + + if (recipeWrapper instanceof OxygenCompressorRecipeWrapper) + { + itemstacks.set(ingredients); + } + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeHandler.java new file mode 100644 index 00000000..775468d7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeHandler.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor; + +import javax.annotation.Nonnull; +import mezz.jei.api.recipe.IRecipeHandler; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; + +public class OxygenCompressorRecipeHandler implements IRecipeHandler +{ + + @Nonnull + @Override + public Class getRecipeClass() + { + return OxygenCompressorRecipeWrapper.class; + } + + @Override + public String getRecipeCategoryUid(OxygenCompressorRecipeWrapper recipe) + { + return RecipeCategories.OXYGEN_COMPRESSOR_ID; + } + + @Nonnull + @Override + public IRecipeWrapper getRecipeWrapper(@Nonnull OxygenCompressorRecipeWrapper recipe) + { + return recipe; + } + + @Override + public boolean isRecipeValid(@Nonnull OxygenCompressorRecipeWrapper recipe) + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeMaker.java new file mode 100644 index 00000000..392b1e3e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeMaker.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import net.minecraft.item.ItemStack; + +public class OxygenCompressorRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + for (ItemStack stack : GalacticraftRegistry.listAllGearForSlot(EnumExtendedInventorySlot.LEFT_TANK)) + { + if (stack != null && stack.getItem() instanceof ItemOxygenTank) + { + recipes.add(new OxygenCompressorRecipeWrapper(stack.copy())); + } + } + + return recipes; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeWrapper.java new file mode 100644 index 00000000..e2de5116 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeWrapper.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor; + +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.BlankRecipeWrapper; +import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class OxygenCompressorRecipeWrapper extends BlankRecipeWrapper implements ICraftingRecipeWrapper +{ + + @Nonnull private final ItemStack output; + + public OxygenCompressorRecipeWrapper(@Nonnull ItemStack output) + { + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setOutput(ItemStack.class, this.output); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeCategory.java new file mode 100644 index 00000000..e2fe464a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeCategory.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.refinery; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +public class RefineryRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation refineryGuiTex = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/refinery_recipe.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated oilBar; + @Nonnull private final IDrawableAnimated fuelBar; + + public RefineryRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(refineryGuiTex, 3, 4, 168, 64); + this.localizedName = GCCoreUtil.translate("tile.refinery.name"); + + IDrawableStatic progressBarDrawableOil = guiHelper.createDrawable(refineryGuiTex, 176, 0, 16, 38); + this.oilBar = guiHelper.createAnimatedDrawable(progressBarDrawableOil, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic progressBarDrawableFuel = guiHelper.createDrawable(refineryGuiTex, 192, 0, 16, 38); + this.fuelBar = guiHelper.createAnimatedDrawable(progressBarDrawableFuel, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.REFINERY_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + this.oilBar.draw(minecraft, 40, 24); + this.fuelBar.draw(minecraft, 114, 24); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 39, 2); + itemstacks.init(1, false, 113, 2); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeMaker.java new file mode 100644 index 00000000..9632a5d4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeMaker.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.refinery; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GCItems; +import net.minecraft.item.ItemStack; + +public class RefineryRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + recipes.add(new RefineryRecipeWrapper(new ItemStack(GCItems.oilCanister, 1, 1), new ItemStack(GCItems.fuelCanister, 1, 1))); + recipes.add(new RefineryRecipeWrapper(new ItemStack(GCItems.bucketOil), new ItemStack(GCItems.fuelCanister, 1, 1))); + recipes.add(new RefineryRecipeWrapper(new ItemStack(GCItems.oilCanister, 1, 1), new ItemStack(GCItems.bucketFuel))); + recipes.add(new RefineryRecipeWrapper(new ItemStack(GCItems.bucketOil), new ItemStack(GCItems.bucketFuel))); + + return recipes; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeWrapper.java new file mode 100644 index 00000000..d80bd57b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.refinery; + +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class RefineryRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ItemStack input; + @Nonnull private final ItemStack output; + + public RefineryRecipeWrapper(@Nonnull ItemStack input, @Nonnull ItemStack output) + { + this.input = input; + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInput(ItemStack.class, this.input); + ingredients.setOutput(ItemStack.class, this.output); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeCategory.java new file mode 100644 index 00000000..80f309ff --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeCategory.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.tier1rocket; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.util.ResourceLocation; + +public class Tier1RocketRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation rocketGuiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/rocketbench.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public Tier1RocketRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(rocketGuiTexture, 3, 4, 168, 130); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ROCKET_T1_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 44, 14); + itemstacks.init(1, true, 35, 32); + itemstacks.init(2, true, 35, 50); + itemstacks.init(3, true, 35, 68); + itemstacks.init(4, true, 35, 86); + itemstacks.init(5, true, 53, 32); + itemstacks.init(6, true, 53, 50); + itemstacks.init(7, true, 53, 68); + itemstacks.init(8, true, 53, 86); + itemstacks.init(9, true, 17, 104); + itemstacks.init(10, true, 17, 86); + itemstacks.init(11, true, 44, 104); + itemstacks.init(12, true, 71, 86); + itemstacks.init(13, true, 71, 104); + itemstacks.init(14, true, 89, 7); + itemstacks.init(15, true, 115, 7); + itemstacks.init(16, true, 141, 7); + itemstacks.init(17, false, 138, 91); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeMaker.java new file mode 100644 index 00000000..d3288ff6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeMaker.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.tier1rocket; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.oredict.OreDictionary; + +public class Tier1RocketRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT1Recipes()) + { + int chests = Tier1RocketRecipeMaker.countChests(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } + + public static int countChests(INasaWorkbenchRecipe recipe) + { + int count = 0; + NonNullList woodChests = OreDictionary.getOres("chestWood"); + for (ItemStack woodChest : woodChests) + { + for (Entry e : recipe.getRecipeInput().entrySet()) + { + if (ItemStack.areItemsEqual(woodChest, e.getValue())) + count++; + } + } + return count; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeWrapper.java new file mode 100644 index 00000000..564d4535 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.tier1rocket; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class Tier1RocketRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public Tier1RocketRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAlienVillager.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAlienVillager.java new file mode 100644 index 00000000..e35af852 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAlienVillager.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelVillager; +import net.minecraft.entity.Entity; + +public class ModelAlienVillager extends ModelVillager +{ + + public ModelRenderer brain; + + public ModelAlienVillager(float par1) + { + this(par1, 0.0F, 64, 64); + } + + public ModelAlienVillager(float par1, float par2, int par3, int par4) + { + super(par1, par2, 0, 0); + this.villagerHead = new ModelRenderer(this).setTextureSize(par3, par4); + this.villagerHead.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.villagerHead.setTextureOffset(0, 0).addBox(-4.0F, -10.0F, -4.0F, 8, 10, 8, par1 + 0.001F); + this.villagerNose = new ModelRenderer(this).setTextureSize(par3, par4); + this.villagerNose.setRotationPoint(0.0F, par2 - 2.0F, 0.0F); + this.villagerNose.setTextureOffset(24, 0).addBox(-1.0F, -1.0F, -6.0F, 2, 4, 2, par1 + 0.002F); + this.villagerHead.addChild(this.villagerNose); + this.villagerBody = new ModelRenderer(this).setTextureSize(par3, par4); + this.villagerBody.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.villagerBody.setTextureOffset(16, 20).addBox(-4.0F, 0.0F, -3.0F, 8, 12, 6, par1 + 0.003F); + this.villagerBody.setTextureOffset(0, 38).addBox(-4.0F, 0.0F, -3.0F, 8, 18, 6, par1 + 0.5F + 0.004F); + this.villagerArms = new ModelRenderer(this).setTextureSize(par3, par4); + this.villagerArms.setRotationPoint(0.0F, 0.0F + par2 + 2.0F, 0.0F); + this.villagerArms.setTextureOffset(44, 22).addBox(-8.0F, -2.0F, -2.0F, 4, 8, 4, par1 + 0.005F); + this.villagerArms.setTextureOffset(44, 22).addBox(4.0F, -2.0F, -2.0F, 4, 8, 4, par1 + 0.0001F); + this.villagerArms.setTextureOffset(40, 38).addBox(-4.0F, 2.0F, -2.0F, 8, 4, 4, par1 + 0.0004F); + this.rightVillagerLeg = new ModelRenderer(this, 0, 22).setTextureSize(par3, par4); + this.rightVillagerLeg.setRotationPoint(-2.0F, 12.0F + par2, 0.0F); + this.rightVillagerLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, par1 + 0.0006F); + this.leftVillagerLeg = new ModelRenderer(this, 0, 22).setTextureSize(par3, par4); + this.leftVillagerLeg.mirror = true; + this.leftVillagerLeg.setRotationPoint(2.0F, 12.0F + par2, 0.0F); + this.leftVillagerLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, par1 + 0.0002F); + this.brain = new ModelRenderer(this).setTextureSize(par3, par4); + this.brain.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.brain.setTextureOffset(32, 0).addBox(-4.0F, -16.0F, -4.0F, 8, 8, 8, par1 + 0.5F); + } + + @Override + public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + super.render(par1Entity, par2, par3, par4, par5, par6, par7); + + this.brain.render(par7); + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity par7Entity) + { + super.setRotationAngles(par1, par2, par3, par4, par5, par6, par7Entity); + + this.brain.rotateAngleX = this.villagerHead.rotateAngleX; + this.brain.rotateAngleY = this.villagerHead.rotateAngleY; + this.brain.rotateAngleZ = this.villagerHead.rotateAngleZ; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAluminumWire.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAluminumWire.java new file mode 100644 index 00000000..e761cbf5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAluminumWire.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelAluminumWire extends ModelBase +{ + + // fields + ModelRenderer middle; + ModelRenderer right; + ModelRenderer left; + ModelRenderer back; + ModelRenderer front; + ModelRenderer top; + ModelRenderer bottom; + + public ModelAluminumWire() + { + this.textureWidth = 64; + this.textureHeight = 32; + this.middle = new ModelRenderer(this, 0, 0); + this.middle.addBox(-1F, -1F, -1F, 4, 4, 4); + this.middle.setRotationPoint(-1F, 15F, -1F); + this.middle.setTextureSize(64, 32); + this.middle.mirror = true; + this.setRotation(this.middle, 0F, 0F, 0F); + this.right = new ModelRenderer(this, 21, 0); + this.right.addBox(0F, 0F, 0F, 6, 4, 4); + this.right.setRotationPoint(2F, 14F, -2F); + this.right.setTextureSize(64, 32); + this.right.mirror = true; + this.setRotation(this.right, 0F, 0F, 0F); + this.left = new ModelRenderer(this, 21, 0); + this.left.addBox(0F, 0F, 0F, 6, 4, 4); + this.left.setRotationPoint(-8F, 14F, -2F); + this.left.setTextureSize(64, 32); + this.left.mirror = true; + this.setRotation(this.left, 0F, 0F, 0F); + this.back = new ModelRenderer(this, 0, 11); + this.back.addBox(0F, 0F, 0F, 4, 4, 6); + this.back.setRotationPoint(-2F, 14F, 2F); + this.back.setTextureSize(64, 32); + this.back.mirror = true; + this.setRotation(this.back, 0F, 0F, 0F); + this.front = new ModelRenderer(this, 0, 11); + this.front.addBox(0F, 0F, 0F, 4, 4, 6); + this.front.setRotationPoint(-2F, 14F, -8F); + this.front.setTextureSize(64, 32); + this.front.mirror = true; + this.setRotation(this.front, 0F, 0F, 0F); + this.top = new ModelRenderer(this, 21, 11); + this.top.addBox(0F, 0F, 0F, 4, 6, 4); + this.top.setRotationPoint(-2F, 8F, -2F); + this.top.setTextureSize(64, 32); + this.top.mirror = true; + this.setRotation(this.top, 0F, 0F, 0F); + this.bottom = new ModelRenderer(this, 21, 11); + this.bottom.addBox(0F, 0F, 0F, 4, 6, 4); + this.bottom.setRotationPoint(-2F, 18F, -2F); + this.bottom.setTextureSize(64, 32); + this.bottom.mirror = true; + this.setRotation(this.bottom, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.renderMiddle(); + this.renderBottom(); + this.renderTop(); + this.renderLeft(); + this.renderRight(); + this.renderBack(); + this.renderFront(); + } + + public void renderMiddle() + { + this.middle.render(0.0625F); + } + + public void renderBottom() + { + this.bottom.render(0.0625F); + } + + public void renderTop() + { + this.top.render(0.0625F); + } + + public void renderLeft() + { + this.left.render(0.0625F); + } + + public void renderRight() + { + this.right.render(0.0625F); + } + + public void renderBack() + { + this.back.render(0.0625F); + } + + public void renderFront() + { + // this.Front.render(0.0625F); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float x, float y, float z, float f3, float f4, float f5, Entity entity) + { + super.setRotationAngles(x, y, z, f3, f4, f5, entity); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelBipedGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelBipedGC.java new file mode 100644 index 00000000..650f13b0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelBipedGC.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.common.MinecraftForge; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.item.IHoldableItemCustom; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; + +public class ModelBipedGC +{ + + public static void setRotationAngles(ModelBiped biped, float par1, float par2, float par3, float par4, float par5, float par6, Entity par7Entity) + { + if (!(par7Entity instanceof EntityPlayer)) + return; + final EntityPlayer player = (EntityPlayer) par7Entity; + final ItemStack currentItemStack = player.inventory.getCurrentItem(); + final float floatPI = 3.1415927F; + + if (!par7Entity.onGround && par7Entity.world.provider instanceof IGalacticraftWorldProvider && par7Entity.getRidingEntity() == null && ((currentItemStack == null) || !(currentItemStack.getItem() instanceof IHoldableItem))) + { + float speedModifier = 0.1162F * 2; + + float angularSwingArm = MathHelper.cos(par1 * (speedModifier / 2)); + float rightMod = biped.rightArmPose == ModelBiped.ArmPose.ITEM ? 1 : 2; + biped.bipedRightArm.rotateAngleX -= MathHelper.cos(par1 * 0.6662F + floatPI) * rightMod * par2 * 0.5F; + biped.bipedLeftArm.rotateAngleX -= MathHelper.cos(par1 * 0.6662F) * 2.0F * par2 * 0.5F; + biped.bipedRightArm.rotateAngleX += -angularSwingArm * 4.0F * par2 * 0.5F; + biped.bipedLeftArm.rotateAngleX += angularSwingArm * 4.0F * par2 * 0.5F; + biped.bipedLeftLeg.rotateAngleX -= MathHelper.cos(par1 * 0.6662F + floatPI) * 1.4F * par2; + biped.bipedLeftLeg.rotateAngleX += MathHelper.cos(par1 * 0.1162F * 2 + floatPI) * 1.4F * par2; + biped.bipedRightLeg.rotateAngleX -= MathHelper.cos(par1 * 0.6662F) * 1.4F * par2; + biped.bipedRightLeg.rotateAngleX += MathHelper.cos(par1 * 0.1162F * 2) * 1.4F * par2; + } + + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + if (gearData.getParachute() != null) + { + // Parachute is equipped + biped.bipedLeftArm.rotateAngleX += floatPI; + biped.bipedLeftArm.rotateAngleZ += floatPI / 10; + biped.bipedRightArm.rotateAngleX += floatPI; + biped.bipedRightArm.rotateAngleZ -= floatPI / 10; + } + } + + ItemStack heldItemStack = null; + + for (EnumHand hand : EnumHand.values()) + { + ItemStack item = player.getHeldItem(hand); + if (item != null && item.getItem() instanceof IHoldableItem) + { + heldItemStack = item; + } + } + + if (heldItemStack != null && !(player.getRidingEntity() instanceof ICameraZoomEntity)) + { + Item heldItem = heldItemStack.getItem(); + IHoldableItem holdableItem = (IHoldableItem) heldItem; + IHoldableItemCustom holdableItemCustom = heldItem instanceof IHoldableItemCustom ? (IHoldableItemCustom) heldItem : null; + + if (holdableItem.shouldHoldLeftHandUp(player)) + { + Vector3 angle = null; + + if (holdableItemCustom != null) + { + angle = holdableItemCustom.getLeftHandRotation(player); + } + + if (angle == null) + { + angle = new Vector3(floatPI + 0.3F, 0.0F, floatPI / 10.0F); + } + + biped.bipedLeftArm.rotateAngleX = angle.floatX(); + biped.bipedLeftArm.rotateAngleY = angle.floatY(); + biped.bipedLeftArm.rotateAngleZ = angle.floatZ(); + } + + if (holdableItem.shouldHoldRightHandUp(player)) + { + Vector3 angle = null; + + if (holdableItemCustom != null) + { + angle = holdableItemCustom.getRightHandRotation(player); + } + + if (angle == null) + { + angle = new Vector3(floatPI + 0.3F, 0.0F, (float) -Math.PI / 10.0F); + } + + biped.bipedRightArm.rotateAngleX = angle.floatX(); + biped.bipedRightArm.rotateAngleY = angle.floatY(); + biped.bipedRightArm.rotateAngleZ = angle.floatZ(); + } + } + + for (Entity e : player.world.loadedEntityList) + { + if (e instanceof EntityTieredRocket && e.getDistanceSq(player) < 200) + { + final EntityTieredRocket ship = (EntityTieredRocket) e; + + if (!ship.getPassengers().isEmpty() && !ship.getPassengers().contains(player) && (ship.getLaunched() || ship.timeUntilLaunch < 390)) + { + biped.bipedRightArm.rotateAngleZ -= floatPI / 8F + MathHelper.sin(par3 * 0.9F) * 0.2F; + biped.bipedRightArm.rotateAngleX = floatPI; + break; + } + } + } + + if (player.isPlayerSleeping()) + { + RenderPlayerGC.RotatePlayerEvent event = new RenderPlayerGC.RotatePlayerEvent((AbstractClientPlayer) player); + MinecraftForge.EVENT_BUS.post(event); + + if (event.vanillaOverride && (event.shouldRotate == null || event.shouldRotate)) + { + biped.bipedHead.rotateAngleX = (float) (20.0F - Math.sin(player.ticksExisted / 10.0F) / 7.0F); + biped.bipedHead.rotateAngleY = 0.0F; + biped.bipedHead.rotateAngleZ = 0.0F; + biped.bipedLeftArm.rotateAngleX = 0.0F; + biped.bipedLeftArm.rotateAngleY = 0.0F; + biped.bipedLeftArm.rotateAngleZ = 0.0F; + biped.bipedRightArm.rotateAngleX = 0.0F; + biped.bipedRightArm.rotateAngleY = 0.0F; + biped.bipedRightArm.rotateAngleZ = 0.0F; + } + } + + ModelBiped.copyModelAngles(biped.bipedHead, biped.bipedHeadwear); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedCreeper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedCreeper.java new file mode 100644 index 00000000..e9f835ad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedCreeper.java @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ModelEvolvedCreeper extends ModelBase +{ + + ModelRenderer leftOxygenTank; + ModelRenderer rightOxygenTank; + ModelRenderer tubeRight2; + ModelRenderer tubeLeft1; + ModelRenderer tubeRight3; + ModelRenderer tubeRight4; + ModelRenderer tubeRight5; + ModelRenderer tubeLeft6; + ModelRenderer tubeRight7; + ModelRenderer tubeRight1; + ModelRenderer tubeLeft2; + ModelRenderer tubeLeft3; + ModelRenderer tubeLeft4; + ModelRenderer tubeLeft5; + ModelRenderer tubeLeft7; + ModelRenderer tubeRight6; + ModelRenderer tubeLeft8; + ModelRenderer oxygenMask; + public ModelRenderer head; + public ModelRenderer field_78133_b; + public ModelRenderer body; + public ModelRenderer leg1; + public ModelRenderer leg2; + public ModelRenderer leg3; + public ModelRenderer leg4; + + public ModelEvolvedCreeper() + { + this(0.0F); + } + + public ModelEvolvedCreeper(float par1) + { + this.textureWidth = 128; + this.textureHeight = 64; + this.leftOxygenTank = new ModelRenderer(this, 40, 20); + this.leftOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.leftOxygenTank.setRotationPoint(2F, 5F, 3.8F); + this.leftOxygenTank.setTextureSize(128, 64); + this.leftOxygenTank.mirror = true; + this.setRotation(this.leftOxygenTank, 0F, 0F, 0F); + this.rightOxygenTank = new ModelRenderer(this, 40, 20); + this.rightOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.rightOxygenTank.setRotationPoint(-2F, 5F, 3.8F); + this.rightOxygenTank.setTextureSize(128, 64); + this.rightOxygenTank.mirror = true; + this.setRotation(this.rightOxygenTank, 0F, 0F, 0F); + this.tubeRight2 = new ModelRenderer(this, 40, 30); + this.tubeRight2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight2.setRotationPoint(-2F, 5F, 6.8F); + this.tubeRight2.setTextureSize(128, 64); + this.tubeRight2.mirror = true; + this.setRotation(this.tubeRight2, 0F, 0F, 0F); + this.tubeLeft1 = new ModelRenderer(this, 40, 30); + this.tubeLeft1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft1.setRotationPoint(2F, 6F, 5.8F); + this.tubeLeft1.setTextureSize(128, 64); + this.tubeLeft1.mirror = true; + this.setRotation(this.tubeLeft1, 0F, 0F, 0F); + this.tubeRight3 = new ModelRenderer(this, 40, 30); + this.tubeRight3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight3.setRotationPoint(-2F, 4F, 6.8F); + this.tubeRight3.setTextureSize(128, 64); + this.tubeRight3.mirror = true; + this.setRotation(this.tubeRight3, 0F, 0F, 0F); + this.tubeRight4 = new ModelRenderer(this, 40, 30); + this.tubeRight4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight4.setRotationPoint(-2F, 3F, 6.8F); + this.tubeRight4.setTextureSize(128, 64); + this.tubeRight4.mirror = true; + this.setRotation(this.tubeRight4, 0F, 0F, 0F); + this.tubeRight5 = new ModelRenderer(this, 40, 30); + this.tubeRight5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight5.setRotationPoint(-2F, 2F, 6.8F); + this.tubeRight5.setTextureSize(128, 64); + this.tubeRight5.mirror = true; + this.setRotation(this.tubeRight5, 0F, 0F, 0F); + this.tubeLeft6 = new ModelRenderer(this, 40, 30); + this.tubeLeft6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft6.setRotationPoint(2F, 1F, 5.8F); + this.tubeLeft6.setTextureSize(128, 64); + this.tubeLeft6.mirror = true; + this.setRotation(this.tubeLeft6, 0F, 0F, 0F); + this.tubeRight7 = new ModelRenderer(this, 40, 30); + this.tubeRight7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight7.setRotationPoint(-2F, 0F, 4.8F); + this.tubeRight7.setTextureSize(128, 64); + this.tubeRight7.mirror = true; + this.setRotation(this.tubeRight7, 0F, 0F, 0F); + this.tubeRight1 = new ModelRenderer(this, 40, 30); + this.tubeRight1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight1.setRotationPoint(-2F, 6F, 5.8F); + this.tubeRight1.setTextureSize(128, 64); + this.tubeRight1.mirror = true; + this.setRotation(this.tubeRight1, 0F, 0F, 0F); + this.tubeLeft2 = new ModelRenderer(this, 40, 30); + this.tubeLeft2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft2.setRotationPoint(2F, 5F, 6.8F); + this.tubeLeft2.setTextureSize(128, 64); + this.tubeLeft2.mirror = true; + this.setRotation(this.tubeLeft2, 0F, 0F, 0F); + this.tubeLeft3 = new ModelRenderer(this, 40, 30); + this.tubeLeft3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft3.setRotationPoint(2F, 4F, 6.8F); + this.tubeLeft3.setTextureSize(128, 64); + this.tubeLeft3.mirror = true; + this.setRotation(this.tubeLeft3, 0F, 0F, 0F); + this.tubeLeft4 = new ModelRenderer(this, 40, 30); + this.tubeLeft4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft4.setRotationPoint(2F, 3F, 6.8F); + this.tubeLeft4.setTextureSize(128, 64); + this.tubeLeft4.mirror = true; + this.setRotation(this.tubeLeft4, 0F, 0F, 0F); + this.tubeLeft5 = new ModelRenderer(this, 40, 30); + this.tubeLeft5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft5.setRotationPoint(2F, 2F, 6.8F); + this.tubeLeft5.setTextureSize(128, 64); + this.tubeLeft5.mirror = true; + this.setRotation(this.tubeLeft5, 0F, 0F, 0F); + this.tubeLeft7 = new ModelRenderer(this, 40, 30); + this.tubeLeft7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft7.setRotationPoint(2F, 0F, 4.8F); + this.tubeLeft7.setTextureSize(128, 64); + this.tubeLeft7.mirror = true; + this.setRotation(this.tubeLeft7, 0F, 0F, 0F); + this.tubeRight6 = new ModelRenderer(this, 40, 30); + this.tubeRight6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight6.setRotationPoint(-2F, 1F, 5.8F); + this.tubeRight6.setTextureSize(128, 64); + this.tubeRight6.mirror = true; + this.setRotation(this.tubeRight6, 0F, 0F, 0F); + this.tubeLeft8 = new ModelRenderer(this, 40, 30); + this.tubeLeft8.addBox(0F, 0F, 0F, 1, 1, 1, par1); + this.tubeLeft8.setRotationPoint(0F, -2F, 0F); + this.tubeLeft8.setTextureSize(128, 64); + this.tubeLeft8.mirror = true; + this.setRotation(this.tubeLeft8, 0F, 0F, 0F); + this.oxygenMask = new ModelRenderer(this, 40, 0); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10, par1); + this.oxygenMask.setRotationPoint(0F, 4F, 0F); + this.oxygenMask.setTextureSize(128, 64); + this.oxygenMask.mirror = true; + this.setRotation(this.oxygenMask, 0F, 0F, 0F); + + final byte var2 = 4; + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, par1); + this.head.setRotationPoint(0.0F, var2, 0.0F); + this.head.setTextureSize(128, 64); + this.field_78133_b = new ModelRenderer(this, 32, 0); + this.field_78133_b.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, par1 + 0.5F); + this.field_78133_b.setRotationPoint(0.0F, var2, 0.0F); + this.field_78133_b.setTextureSize(128, 64); + this.body = new ModelRenderer(this, 16, 16); + this.body.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, par1); + this.body.setRotationPoint(0.0F, var2, 0.0F); + this.body.setTextureSize(128, 64); + this.leg1 = new ModelRenderer(this, 0, 16); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, par1); + this.leg1.setRotationPoint(-2.0F, 12 + var2, 4.0F); + this.leg1.setTextureSize(128, 64); + this.leg2 = new ModelRenderer(this, 0, 16); + this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, par1); + this.leg2.setRotationPoint(2.0F, 12 + var2, 4.0F); + this.leg2.setTextureSize(128, 64); + this.leg3 = new ModelRenderer(this, 0, 16); + this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, par1); + this.leg3.setRotationPoint(-2.0F, 12 + var2, -4.0F); + this.leg3.setTextureSize(128, 64); + this.leg4 = new ModelRenderer(this, 0, 16); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, par1); + this.leg4.setRotationPoint(2.0F, 12 + var2, -4.0F); + this.leg4.setTextureSize(128, 64); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + this.setRotationAngles(par2, par3, par4, par5, par6, par7); + + if (this.isChild) + { + float f6 = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / f6, 1.5F / f6, 1.5F / f6); + GL11.glTranslatef(0.0F, 16.0F * par7, 0.0F); + this.head.render(par7); + this.oxygenMask.render(par7); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / f6, 1.0F / f6, 1.0F / f6); + GL11.glTranslatef(0.0F, 24.0F * par7, 0.0F); + this.leftOxygenTank.render(par7); + this.rightOxygenTank.render(par7); + this.tubeRight2.render(par7); + this.tubeLeft1.render(par7); + this.tubeRight3.render(par7); + this.tubeRight4.render(par7); + this.tubeRight5.render(par7); + this.tubeLeft6.render(par7); + this.tubeRight7.render(par7); + this.tubeRight1.render(par7); + this.tubeLeft2.render(par7); + this.tubeLeft3.render(par7); + this.tubeLeft4.render(par7); + this.tubeLeft5.render(par7); + this.tubeLeft7.render(par7); + this.tubeRight6.render(par7); + this.tubeLeft8.render(par7); + this.body.render(par7); + this.leg1.render(par7); + this.leg2.render(par7); + this.leg3.render(par7); + this.leg4.render(par7); + GL11.glPopMatrix(); + } else + { + this.leftOxygenTank.render(par7); + this.rightOxygenTank.render(par7); + this.tubeRight2.render(par7); + this.tubeLeft1.render(par7); + this.tubeRight3.render(par7); + this.tubeRight4.render(par7); + this.tubeRight5.render(par7); + this.tubeLeft6.render(par7); + this.tubeRight7.render(par7); + this.tubeRight1.render(par7); + this.tubeLeft2.render(par7); + this.tubeLeft3.render(par7); + this.tubeLeft4.render(par7); + this.tubeLeft5.render(par7); + this.tubeLeft7.render(par7); + this.tubeRight6.render(par7); + this.tubeLeft8.render(par7); + this.oxygenMask.render(par7); + this.head.render(par7); + this.body.render(par7); + this.leg1.render(par7); + this.leg2.render(par7); + this.leg3.render(par7); + this.leg4.render(par7); + } + } + + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6) + { + this.oxygenMask.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + this.oxygenMask.rotateAngleX = par5 / Constants.RADIANS_TO_DEGREES; + this.head.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + this.head.rotateAngleX = par5 / Constants.RADIANS_TO_DEGREES; + this.leg1.rotateAngleX = MathHelper.cos(par1 * 0.6662F) * 1.4F * par2; + this.leg2.rotateAngleX = MathHelper.cos(par1 * 0.6662F + 3.1415927F) * 1.4F * par2; + this.leg3.rotateAngleX = MathHelper.cos(par1 * 0.6662F + 3.1415927F) * 1.4F * par2; + this.leg4.rotateAngleX = MathHelper.cos(par1 * 0.6662F) * 1.4F * par2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedEnderman.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedEnderman.java new file mode 100644 index 00000000..6965cc3b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedEnderman.java @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelEvolvedEnderman extends ModelBiped +{ + + public boolean isCarrying; + public boolean isAttacking; + ModelRenderer oxygenMask; + ModelRenderer tank1; + ModelRenderer tank2; + ModelRenderer tube1; + ModelRenderer tube2; + ModelRenderer tube3; + ModelRenderer tube4; + ModelRenderer tube5; + ModelRenderer tube6; + ModelRenderer tube7; + ModelRenderer tube8; + ModelRenderer tube9; + ModelRenderer tube10; + ModelRenderer tube11; + ModelRenderer tube12; + ModelRenderer tube13; + ModelRenderer tube14; + + public ModelEvolvedEnderman() + { + super(0.0F, -14.0F, 64, 64); + float f1 = -14.0F; + this.bipedHeadwear = new ModelRenderer(this, 0, 16); + this.bipedHeadwear.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.0F - 0.5F); + this.bipedHeadwear.setRotationPoint(0.0F, 0.0F + f1, 0.0F); + this.bipedBody = new ModelRenderer(this, 32, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, 0.0F); + this.bipedBody.setRotationPoint(0.0F, 0.0F + f1, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 56, 0); + this.bipedRightArm.addBox(-1.0F, -2.0F, -1.0F, 2, 30, 2, 0.0F); + this.bipedRightArm.setRotationPoint(-3.0F, 2.0F + f1, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 56, 0); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -1.0F, 2, 30, 2, 0.0F); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + f1, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 56, 0); + this.bipedRightLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 30, 2, 0.0F); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F + f1, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 56, 0); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 30, 2, 0.0F); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F + f1, 0.0F); + + this.oxygenMask = new ModelRenderer(this, 0, 44); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10); + this.oxygenMask.setRotationPoint(0F, -14F, 0F); + + this.tank1 = new ModelRenderer(this, 52, 54); + this.tank1.addBox(0F, 0F, 0F, 3, 7, 3); + this.tank1.setRotationPoint(0F, -11F, 2F); + + this.tank2 = new ModelRenderer(this, 52, 54); + this.tank2.addBox(0F, 0F, 0F, 3, 7, 3); + this.tank2.setRotationPoint(-3F, -11F, 2F); + + this.tube1 = new ModelRenderer(this, 44, 62); + this.tube1.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube1.setRotationPoint(-2F, -10.5F, 5F); + + this.tube2 = new ModelRenderer(this, 44, 62); + this.tube2.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube2.setRotationPoint(-2F, -11F, 6F); + + this.tube3 = new ModelRenderer(this, 44, 62); + this.tube3.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube3.setRotationPoint(-2F, -12F, 7F); + + this.tube4 = new ModelRenderer(this, 44, 62); + this.tube4.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube4.setRotationPoint(-2F, -13F, 7F); + + this.tube5 = new ModelRenderer(this, 44, 62); + this.tube5.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube5.setRotationPoint(-2F, -14F, 7F); + + this.tube6 = new ModelRenderer(this, 44, 62); + this.tube6.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube6.setRotationPoint(-2F, -15F, 6F); + + this.tube7 = new ModelRenderer(this, 44, 62); + this.tube7.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube7.setRotationPoint(-2F, -16F, 5F); + + this.tube8 = new ModelRenderer(this, 44, 62); + this.tube8.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube8.setRotationPoint(1F, -10.5F, 5F); + + this.tube9 = new ModelRenderer(this, 44, 62); + this.tube9.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube9.setRotationPoint(1F, -11F, 6F); + + this.tube10 = new ModelRenderer(this, 44, 62); + this.tube10.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube10.setRotationPoint(1F, -12F, 7F); + + this.tube11 = new ModelRenderer(this, 44, 62); + this.tube11.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube11.setRotationPoint(1F, -13F, 7F); + + this.tube12 = new ModelRenderer(this, 44, 62); + this.tube12.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube12.setRotationPoint(1F, -14F, 7F); + + this.tube13 = new ModelRenderer(this, 44, 62); + this.tube13.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube13.setRotationPoint(1F, -15F, 6F); + + this.tube14 = new ModelRenderer(this, 44, 62); + this.tube14.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube14.setRotationPoint(1F, -16F, 5F); + } + + @Override + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale, Entity entity) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entity); + this.bipedHead.showModel = true; + float f6 = -14.0F; + this.bipedBody.rotateAngleX = 0.0F; + this.bipedBody.rotationPointY = f6; + this.bipedBody.rotationPointZ = -0.0F; + this.bipedRightLeg.rotateAngleX -= 0.0F; + this.bipedLeftLeg.rotateAngleX -= 0.0F; + this.bipedRightArm.rotateAngleX = (float) (this.bipedRightArm.rotateAngleX * 0.5D); + this.bipedLeftArm.rotateAngleX = (float) (this.bipedLeftArm.rotateAngleX * 0.5D); + this.bipedRightLeg.rotateAngleX = (float) (this.bipedRightLeg.rotateAngleX * 0.5D); + this.bipedLeftLeg.rotateAngleX = (float) (this.bipedLeftLeg.rotateAngleX * 0.5D); + float f7 = 0.4F; + + if (this.bipedRightArm.rotateAngleX > f7) + { + this.bipedRightArm.rotateAngleX = f7; + } + if (this.bipedLeftArm.rotateAngleX > f7) + { + this.bipedLeftArm.rotateAngleX = f7; + } + if (this.bipedRightArm.rotateAngleX < -f7) + { + this.bipedRightArm.rotateAngleX = -f7; + } + if (this.bipedLeftArm.rotateAngleX < -f7) + { + this.bipedLeftArm.rotateAngleX = -f7; + } + if (this.bipedRightLeg.rotateAngleX > f7) + { + this.bipedRightLeg.rotateAngleX = f7; + } + if (this.bipedLeftLeg.rotateAngleX > f7) + { + this.bipedLeftLeg.rotateAngleX = f7; + } + if (this.bipedRightLeg.rotateAngleX < -f7) + { + this.bipedRightLeg.rotateAngleX = -f7; + } + if (this.bipedLeftLeg.rotateAngleX < -f7) + { + this.bipedLeftLeg.rotateAngleX = -f7; + } + + if (this.isCarrying) + { + this.bipedRightArm.rotateAngleX = -0.5F; + this.bipedLeftArm.rotateAngleX = -0.5F; + this.bipedRightArm.rotateAngleZ = 0.05F; + this.bipedLeftArm.rotateAngleZ = -0.05F; + } + + this.bipedRightArm.rotationPointZ = 0.0F; + this.bipedLeftArm.rotationPointZ = 0.0F; + this.bipedRightLeg.rotationPointZ = 0.0F; + this.bipedLeftLeg.rotationPointZ = 0.0F; + this.bipedRightLeg.rotationPointY = 9.0F + f6; + this.bipedLeftLeg.rotationPointY = 9.0F + f6; + this.bipedHead.rotationPointZ = -0.0F; + this.bipedHead.rotationPointY = f6 + 1.0F; + this.bipedHeadwear.rotationPointX = this.bipedHead.rotationPointX; + this.bipedHeadwear.rotationPointY = this.bipedHead.rotationPointY; + this.bipedHeadwear.rotationPointZ = this.bipedHead.rotationPointZ; + this.bipedHeadwear.rotateAngleX = this.bipedHead.rotateAngleX; + this.bipedHeadwear.rotateAngleY = this.bipedHead.rotateAngleY; + this.bipedHeadwear.rotateAngleZ = this.bipedHead.rotateAngleZ; + + this.oxygenMask.rotationPointX = this.bipedHead.rotationPointX; + this.oxygenMask.rotationPointY = this.bipedHead.rotationPointY; + this.oxygenMask.rotationPointZ = this.bipedHead.rotationPointZ; + this.oxygenMask.rotateAngleX = this.bipedHead.rotateAngleX; + this.oxygenMask.rotateAngleY = this.bipedHead.rotateAngleY; + this.oxygenMask.rotateAngleZ = this.bipedHead.rotateAngleZ; + + if (this.isAttacking) + { + float f8 = 1.0F; + this.bipedHead.rotationPointY -= f8 * 5.0F; + this.oxygenMask.rotationPointY -= f8 * 5.0F; + } + } + + @Override + public void render(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + super.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entity); + this.oxygenMask.render(scale); + this.tank1.render(scale); + this.tank2.render(scale); + this.tube1.render(scale); + this.tube2.render(scale); + this.tube3.render(scale); + this.tube4.render(scale); + this.tube5.render(scale); + this.tube6.render(scale); + this.tube7.render(scale); + this.tube8.render(scale); + this.tube9.render(scale); + this.tube10.render(scale); + this.tube11.render(scale); + this.tube12.render(scale); + this.tube13.render(scale); + this.tube14.render(scale); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeleton.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeleton.java new file mode 100644 index 00000000..fb07c383 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeleton.java @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelEvolvedSkeleton extends ModelBiped +{ + + ModelRenderer leftOxygenTank; + ModelRenderer rightOxygenTank; + ModelRenderer tubeRight2; + ModelRenderer tubeLeft1; + ModelRenderer tubeRight3; + ModelRenderer tubeRight4; + ModelRenderer tubeRight5; + ModelRenderer tubeLeft6; + ModelRenderer tubeRight7; + ModelRenderer tubeRight1; + ModelRenderer tubeLeft2; + ModelRenderer tubeLeft3; + ModelRenderer tubeLeft4; + ModelRenderer tubeLeft5; + ModelRenderer tubeLeft7; + ModelRenderer tubeRight6; + ModelRenderer oxygenMask; + + public ModelEvolvedSkeleton() + { + this(0.0F); + } + + public ModelEvolvedSkeleton(float par1) + { + this.textureWidth = 128; + this.textureHeight = 64; + final int par2 = 0; + this.rightArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; + this.leftArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; + this.leftOxygenTank = new ModelRenderer(this, 48, 20); + this.leftOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.leftOxygenTank.setRotationPoint(2F, 2F, 3.8F); + this.leftOxygenTank.setTextureSize(128, 64); + this.leftOxygenTank.mirror = true; + this.setRotation(this.leftOxygenTank, 0F, 0F, 0F); + this.rightOxygenTank = new ModelRenderer(this, 48, 20); + this.rightOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.rightOxygenTank.setRotationPoint(-2F, 2F, 3.8F); + this.rightOxygenTank.setTextureSize(128, 64); + this.rightOxygenTank.mirror = true; + this.setRotation(this.rightOxygenTank, 0F, 0F, 0F); + this.tubeRight2 = new ModelRenderer(this, 48, 30); + this.tubeRight2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight2.setRotationPoint(-2F, 2F, 6.8F); + this.tubeRight2.setTextureSize(128, 64); + this.tubeRight2.mirror = true; + this.setRotation(this.tubeRight2, 0F, 0F, 0F); + this.tubeLeft1 = new ModelRenderer(this, 48, 30); + this.tubeLeft1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft1.setRotationPoint(2F, 3F, 5.8F); + this.tubeLeft1.setTextureSize(128, 64); + this.tubeLeft1.mirror = true; + this.setRotation(this.tubeLeft1, 0F, 0F, 0F); + this.tubeRight3 = new ModelRenderer(this, 48, 30); + this.tubeRight3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight3.setRotationPoint(-2F, 1F, 6.8F); + this.tubeRight3.setTextureSize(128, 64); + this.tubeRight3.mirror = true; + this.setRotation(this.tubeRight3, 0F, 0F, 0F); + this.tubeRight4 = new ModelRenderer(this, 48, 30); + this.tubeRight4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight4.setRotationPoint(-2F, 0F, 6.8F); + this.tubeRight4.setTextureSize(128, 64); + this.tubeRight4.mirror = true; + this.setRotation(this.tubeRight4, 0F, 0F, 0F); + this.tubeRight5 = new ModelRenderer(this, 48, 30); + this.tubeRight5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight5.setRotationPoint(-2F, -1F, 6.8F); + this.tubeRight5.setTextureSize(128, 64); + this.tubeRight5.mirror = true; + this.setRotation(this.tubeRight5, 0F, 0F, 0F); + this.tubeLeft6 = new ModelRenderer(this, 48, 30); + this.tubeLeft6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft6.setRotationPoint(2F, -2F, 5.8F); + this.tubeLeft6.setTextureSize(128, 64); + this.tubeLeft6.mirror = true; + this.setRotation(this.tubeLeft6, 0F, 0F, 0F); + this.tubeRight7 = new ModelRenderer(this, 48, 30); + this.tubeRight7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight7.setRotationPoint(-2F, -3F, 4.8F); + this.tubeRight7.setTextureSize(128, 64); + this.tubeRight7.mirror = true; + this.setRotation(this.tubeRight7, 0F, 0F, 0F); + this.tubeRight1 = new ModelRenderer(this, 48, 30); + this.tubeRight1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight1.setRotationPoint(-2F, 3F, 5.8F); + this.tubeRight1.setTextureSize(128, 64); + this.tubeRight1.mirror = true; + this.setRotation(this.tubeRight1, 0F, 0F, 0F); + this.tubeLeft2 = new ModelRenderer(this, 48, 30); + this.tubeLeft2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft2.setRotationPoint(2F, 2F, 6.8F); + this.tubeLeft2.setTextureSize(128, 64); + this.tubeLeft2.mirror = true; + this.setRotation(this.tubeLeft2, 0F, 0F, 0F); + this.tubeLeft3 = new ModelRenderer(this, 48, 30); + this.tubeLeft3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft3.setRotationPoint(2F, 1F, 6.8F); + this.tubeLeft3.setTextureSize(128, 64); + this.tubeLeft3.mirror = true; + this.setRotation(this.tubeLeft3, 0F, 0F, 0F); + this.tubeLeft4 = new ModelRenderer(this, 48, 30); + this.tubeLeft4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft4.setRotationPoint(2F, 0F, 6.8F); + this.tubeLeft4.setTextureSize(128, 64); + this.tubeLeft4.mirror = true; + this.setRotation(this.tubeLeft4, 0F, 0F, 0F); + this.tubeLeft5 = new ModelRenderer(this, 48, 30); + this.tubeLeft5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft5.setRotationPoint(2F, -1F, 6.8F); + this.tubeLeft5.setTextureSize(128, 64); + this.tubeLeft5.mirror = true; + this.setRotation(this.tubeLeft5, 0F, 0F, 0F); + this.tubeLeft7 = new ModelRenderer(this, 48, 30); + this.tubeLeft7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft7.setRotationPoint(2F, -3F, 4.8F); + this.tubeLeft7.setTextureSize(128, 64); + this.tubeLeft7.mirror = true; + this.setRotation(this.tubeLeft7, 0F, 0F, 0F); + this.tubeRight6 = new ModelRenderer(this, 48, 30); + this.tubeRight6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight6.setRotationPoint(-2F, -2F, 5.8F); + this.tubeRight6.setTextureSize(128, 64); + this.tubeRight6.mirror = true; + this.setRotation(this.tubeRight6, 0F, 0F, 0F); + this.oxygenMask = new ModelRenderer(this, 48, 0); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10, par1); + this.oxygenMask.setRotationPoint(0F, 0F, 0F); + this.oxygenMask.setTextureSize(128, 64); + this.oxygenMask.mirror = true; + this.setRotation(this.oxygenMask, 0F, 0F, 0F); + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, par1); + this.bipedHead.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, par1); + this.bipedBody.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-1.0F, -2.0F, -1.0F, 2, 12, 2, par1); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -1.0F, 2, 12, 2, par1); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 12, 2, par1); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 12, 2, par1); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F, 0.0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.leftOxygenTank.render(f5); + this.rightOxygenTank.render(f5); + this.tubeRight2.render(f5); + this.tubeLeft1.render(f5); + this.tubeRight3.render(f5); + this.tubeRight4.render(f5); + this.tubeRight5.render(f5); + this.tubeLeft6.render(f5); + this.tubeRight7.render(f5); + this.tubeRight1.render(f5); + this.tubeLeft2.render(f5); + this.tubeLeft3.render(f5); + this.tubeLeft4.render(f5); + this.tubeLeft5.render(f5); + this.tubeLeft7.render(f5); + this.tubeRight6.render(f5); + this.oxygenMask.render(f5); + this.bipedHead.render(f5); + this.bipedBody.render(f5); + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + this.bipedRightLeg.render(f5); + this.bipedLeftLeg.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity entity) + { + super.setRotationAngles(par1, par2, par3, par4, par5, par6, entity); + copyModelAngles(this.bipedHead, this.oxygenMask); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeletonBoss.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeletonBoss.java new file mode 100644 index 00000000..aea4522f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeletonBoss.java @@ -0,0 +1,397 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelEvolvedSkeletonBoss extends ModelBase +{ + + private ModelRenderer upperHead; + private ModelRenderer pelvis; + private ModelRenderer sternum; + private ModelRenderer rightLeg; + private ModelRenderer rightArm; + private ModelRenderer spine; + private ModelRenderer leftArm; + private ModelRenderer leftLeg; + private ModelRenderer leftFrontBotRib; + private ModelRenderer leftFrontTopRib; + private ModelRenderer leftFront2ndRib; + private ModelRenderer leftFront3rdRib; + private ModelRenderer leftSideBotRib; + private ModelRenderer leftSide3rdRib; + private ModelRenderer leftSide2ndRib; + private ModelRenderer leftSideTopRib; + private ModelRenderer rightSideTopRib; + private ModelRenderer rightSide2ndRib; + private ModelRenderer rightSide3rdRib; + private ModelRenderer rightSideBotRib; + private ModelRenderer rightFrontBotRib; + private ModelRenderer rightFront3rdRib; + private ModelRenderer rightFront2ndRib; + private ModelRenderer rightFrontTopRib; + private ModelRenderer leftBackTopRib; + private ModelRenderer leftBack2ndRib; + private ModelRenderer leftBack3rdRib; + private ModelRenderer leftBackBotRib; + private ModelRenderer rightBackBotRib; + private ModelRenderer rightBack3rdRib; + private ModelRenderer rightBack2ndRib; + private ModelRenderer rightBackTopRib; + + public ModelEvolvedSkeletonBoss() + { + this.textureWidth = 128; + this.textureHeight = 128; + + float halfPI = Constants.halfPI; + + this.upperHead = new ModelRenderer(this, 0, 16); + this.upperHead.addBox(-4F, -8F, -6F, 8, 8, 8); + this.upperHead.setRotationPoint(0F, -24F, 6F); + this.upperHead.setTextureSize(64, 32); + this.upperHead.mirror = true; + this.setRotation(this.upperHead, 0.122173F, 0F, 0F); + this.pelvis = new ModelRenderer(this, 32, 19); + this.pelvis.addBox(-6F, 0F, -3F, 12, 5, 5); + this.pelvis.setRotationPoint(0F, -2F, 5F); + this.pelvis.setTextureSize(64, 32); + this.pelvis.mirror = true; + this.setRotation(this.pelvis, 0F, 0F, 0F); + this.sternum = new ModelRenderer(this, 0, 0); + this.sternum.addBox(-1.5F, 0F, -1F, 3, 9, 1); + this.sternum.setRotationPoint(0F, -21F, 2F); + this.sternum.setTextureSize(64, 32); + this.sternum.mirror = true; + this.setRotation(this.sternum, 0F, 0F, 0F); + this.rightLeg = new ModelRenderer(this, 56, 33); + this.rightLeg.mirror = true; + this.rightLeg.addBox(-2F, 0F, -2F, 3, 26, 3); + this.rightLeg.setRotationPoint(-5F, 0F, 5F); + this.rightLeg.setTextureSize(64, 32); + this.rightLeg.mirror = true; + this.setRotation(this.rightLeg, 0F, 0F, 0F); + this.rightLeg.mirror = false; + this.rightArm = new ModelRenderer(this, 56, 33); + this.rightArm.addBox(-2F, -2F, -1.5F, 3, 24, 3); + this.rightArm.setRotationPoint(-8F, -20F, 5F); + this.rightArm.setTextureSize(64, 32); + this.rightArm.mirror = true; + this.setRotation(this.rightArm, 0F, 0F, 0F); + this.spine = new ModelRenderer(this, 32, 33); + this.spine.addBox(-1.5F, 0F, -1F, 3, 22, 2); + this.spine.setRotationPoint(0F, -24F, 6F); + this.spine.setTextureSize(64, 32); + this.spine.mirror = true; + this.setRotation(this.spine, 0F, 0F, 0F); + this.leftArm = new ModelRenderer(this, 56, 33); + this.leftArm.addBox(-1F, -2F, -1.5F, 3, 24, 3); + this.leftArm.setRotationPoint(8F, -20F, 5F); + this.leftArm.setTextureSize(64, 32); + this.leftArm.mirror = true; + this.setRotation(this.leftArm, 0F, 0F, 0F); + this.leftLeg = new ModelRenderer(this, 56, 33); + this.leftLeg.addBox(-2F, 0F, -2F, 3, 26, 3); + this.leftLeg.setRotationPoint(6F, 0F, 5F); + this.leftLeg.setTextureSize(64, 32); + this.leftLeg.mirror = true; + this.setRotation(this.leftLeg, 0F, 0F, 0F); + this.leftFrontBotRib = new ModelRenderer(this, 0, 0); + this.leftFrontBotRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftFrontBotRib.setRotationPoint(7F, -13F, 2F); + this.leftFrontBotRib.setTextureSize(64, 32); + this.leftFrontBotRib.mirror = true; + this.setRotation(this.leftFrontBotRib, 0F, -halfPI, 0F); + this.leftFrontTopRib = new ModelRenderer(this, 0, 0); + this.leftFrontTopRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftFrontTopRib.setRotationPoint(7F, -22F, 2F); + this.leftFrontTopRib.setTextureSize(64, 32); + this.leftFrontTopRib.mirror = true; + this.setRotation(this.leftFrontTopRib, 0F, -halfPI, 0F); + this.leftFront2ndRib = new ModelRenderer(this, 0, 0); + this.leftFront2ndRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftFront2ndRib.setRotationPoint(7F, -19F, 2F); + this.leftFront2ndRib.setTextureSize(64, 32); + this.leftFront2ndRib.mirror = true; + this.setRotation(this.leftFront2ndRib, 0F, -halfPI, 0F); + this.leftFront3rdRib = new ModelRenderer(this, 0, 0); + this.leftFront3rdRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftFront3rdRib.setRotationPoint(7F, -16F, 2F); + this.leftFront3rdRib.setTextureSize(64, 32); + this.leftFront3rdRib.mirror = true; + this.setRotation(this.leftFront3rdRib, 0F, -halfPI, 0F); + this.leftSideBotRib = new ModelRenderer(this, 0, 0); + this.leftSideBotRib.addBox(-1F, 0F, -6F, 1, 2, 6); + this.leftSideBotRib.setRotationPoint(7F, -13F, 7F); + this.leftSideBotRib.setTextureSize(64, 32); + this.leftSideBotRib.mirror = true; + this.setRotation(this.leftSideBotRib, 0F, 0F, 0F); + this.leftSide3rdRib = new ModelRenderer(this, 0, 0); + this.leftSide3rdRib.addBox(-1F, 0F, -6F, 1, 2, 6); + this.leftSide3rdRib.setRotationPoint(7F, -16F, 7F); + this.leftSide3rdRib.setTextureSize(64, 32); + this.leftSide3rdRib.mirror = true; + this.setRotation(this.leftSide3rdRib, 0F, 0F, 0F); + this.leftSide2ndRib = new ModelRenderer(this, 0, 0); + this.leftSide2ndRib.addBox(-1F, 0F, -6F, 1, 2, 6); + this.leftSide2ndRib.setRotationPoint(7F, -19F, 7F); + this.leftSide2ndRib.setTextureSize(64, 32); + this.leftSide2ndRib.mirror = true; + this.setRotation(this.leftSide2ndRib, 0F, 0F, 0F); + this.leftSideTopRib = new ModelRenderer(this, 0, 0); + this.leftSideTopRib.addBox(-1F, 0F, -6F, 1, 2, 6); + this.leftSideTopRib.setRotationPoint(7F, -22F, 7F); + this.leftSideTopRib.setTextureSize(64, 32); + this.leftSideTopRib.mirror = true; + this.setRotation(this.leftSideTopRib, 0F, 0F, 0F); + this.rightSideTopRib = new ModelRenderer(this, 0, 0); + this.rightSideTopRib.addBox(0F, 0F, -6F, 1, 2, 6); + this.rightSideTopRib.setRotationPoint(-7F, -22F, 7F); + this.rightSideTopRib.setTextureSize(64, 32); + this.rightSideTopRib.mirror = true; + this.setRotation(this.rightSideTopRib, 0F, 0F, 0F); + this.rightSide2ndRib = new ModelRenderer(this, 0, 0); + this.rightSide2ndRib.addBox(0F, 0F, -6F, 1, 2, 6); + this.rightSide2ndRib.setRotationPoint(-7F, -19F, 7F); + this.rightSide2ndRib.setTextureSize(64, 32); + this.rightSide2ndRib.mirror = true; + this.setRotation(this.rightSide2ndRib, 0F, 0F, 0F); + this.rightSide3rdRib = new ModelRenderer(this, 0, 0); + this.rightSide3rdRib.addBox(0F, 0F, -6F, 1, 2, 6); + this.rightSide3rdRib.setRotationPoint(-7F, -16F, 7F); + this.rightSide3rdRib.setTextureSize(64, 32); + this.rightSide3rdRib.mirror = true; + this.setRotation(this.rightSide3rdRib, 0F, 0F, 0F); + this.rightSideBotRib = new ModelRenderer(this, 0, 0); + this.rightSideBotRib.addBox(0F, 0F, -6F, 1, 2, 6); + this.rightSideBotRib.setRotationPoint(-7F, -13F, 7F); + this.rightSideBotRib.setTextureSize(64, 32); + this.rightSideBotRib.mirror = true; + this.setRotation(this.rightSideBotRib, 0F, 0F, 0F); + this.rightFrontBotRib = new ModelRenderer(this, 0, 0); + this.rightFrontBotRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightFrontBotRib.setRotationPoint(-7F, -13F, 2F); + this.rightFrontBotRib.setTextureSize(64, 32); + this.rightFrontBotRib.mirror = true; + this.setRotation(this.rightFrontBotRib, 0F, halfPI, 0F); + this.rightFront3rdRib = new ModelRenderer(this, 0, 0); + this.rightFront3rdRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightFront3rdRib.setRotationPoint(-7F, -16F, 2F); + this.rightFront3rdRib.setTextureSize(64, 32); + this.rightFront3rdRib.mirror = true; + this.setRotation(this.rightFront3rdRib, 0F, halfPI, 0F); + this.rightFront2ndRib = new ModelRenderer(this, 0, 0); + this.rightFront2ndRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightFront2ndRib.setRotationPoint(-7F, -19F, 2F); + this.rightFront2ndRib.setTextureSize(64, 32); + this.rightFront2ndRib.mirror = true; + this.setRotation(this.rightFront2ndRib, 0F, halfPI, 0F); + this.rightFrontTopRib = new ModelRenderer(this, 0, 0); + this.rightFrontTopRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightFrontTopRib.setRotationPoint(-7F, -22F, 2F); + this.rightFrontTopRib.setTextureSize(64, 32); + this.rightFrontTopRib.mirror = true; + this.setRotation(this.rightFrontTopRib, 0F, halfPI, 0F); + this.leftBackTopRib = new ModelRenderer(this, 0, 0); + this.leftBackTopRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftBackTopRib.setRotationPoint(7F, -22F, 7F); + this.leftBackTopRib.setTextureSize(64, 32); + this.leftBackTopRib.mirror = true; + this.setRotation(this.leftBackTopRib, 0F, -halfPI, 0F); + this.leftBack2ndRib = new ModelRenderer(this, 0, 0); + this.leftBack2ndRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftBack2ndRib.setRotationPoint(7F, -19F, 7F); + this.leftBack2ndRib.setTextureSize(64, 32); + this.leftBack2ndRib.mirror = true; + this.setRotation(this.leftBack2ndRib, 0F, -halfPI, 0F); + this.leftBack3rdRib = new ModelRenderer(this, 0, 0); + this.leftBack3rdRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftBack3rdRib.setRotationPoint(7F, -16F, 7F); + this.leftBack3rdRib.setTextureSize(64, 32); + this.leftBack3rdRib.mirror = true; + this.setRotation(this.leftBack3rdRib, 0F, -halfPI, 0F); + this.leftBackBotRib = new ModelRenderer(this, 0, 0); + this.leftBackBotRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftBackBotRib.setRotationPoint(7F, -13F, 7F); + this.leftBackBotRib.setTextureSize(64, 32); + this.leftBackBotRib.mirror = true; + this.setRotation(this.leftBackBotRib, 0F, -halfPI, 0F); + this.rightBackBotRib = new ModelRenderer(this, 0, 0); + this.rightBackBotRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightBackBotRib.setRotationPoint(-7F, -13F, 7F); + this.rightBackBotRib.setTextureSize(64, 32); + this.rightBackBotRib.mirror = true; + this.setRotation(this.rightBackBotRib, 0F, halfPI, 0F); + this.rightBack3rdRib = new ModelRenderer(this, 0, 0); + this.rightBack3rdRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightBack3rdRib.setRotationPoint(-7F, -16F, 7F); + this.rightBack3rdRib.setTextureSize(64, 32); + this.rightBack3rdRib.mirror = true; + this.setRotation(this.rightBack3rdRib, 0F, halfPI, 0F); + this.rightBack2ndRib = new ModelRenderer(this, 0, 0); + this.rightBack2ndRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightBack2ndRib.setRotationPoint(-7F, -19F, 7F); + this.rightBack2ndRib.setTextureSize(64, 32); + this.rightBack2ndRib.mirror = true; + this.setRotation(this.rightBack2ndRib, 0F, halfPI, 0F); + this.rightBackTopRib = new ModelRenderer(this, 0, 0); + this.rightBackTopRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightBackTopRib.setRotationPoint(-7F, -22F, 7F); + this.rightBackTopRib.setTextureSize(64, 32); + this.rightBackTopRib.mirror = true; + this.setRotation(this.rightBackTopRib, 0F, halfPI, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.upperHead.render(f5); + this.pelvis.render(f5); + this.sternum.render(f5); + this.rightLeg.render(f5); + this.rightArm.render(f5); + this.spine.render(f5); + this.leftArm.render(f5); + this.leftLeg.render(f5); + this.leftFrontBotRib.render(f5); + this.leftFrontTopRib.render(f5); + this.leftFront2ndRib.render(f5); + this.leftFront3rdRib.render(f5); + this.leftSideBotRib.render(f5); + this.leftSide3rdRib.render(f5); + this.leftSide2ndRib.render(f5); + this.leftSideTopRib.render(f5); + this.rightSideTopRib.render(f5); + this.rightSide2ndRib.render(f5); + this.rightSide3rdRib.render(f5); + this.rightSideBotRib.render(f5); + this.rightFrontBotRib.render(f5); + this.rightFront3rdRib.render(f5); + this.rightFront2ndRib.render(f5); + this.rightFrontTopRib.render(f5); + this.leftBackTopRib.render(f5); + this.leftBack2ndRib.render(f5); + this.leftBack3rdRib.render(f5); + this.leftBackBotRib.render(f5); + this.rightBackBotRib.render(f5); + this.rightBack3rdRib.render(f5); + this.rightBack2ndRib.render(f5); + this.rightBackTopRib.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity e) + { + final float floatPI = 3.1415927F; + + final EntitySkeletonBoss boss = (EntitySkeletonBoss) e; + super.setRotationAngles(par1, par2, par3, par4, par5, par6, e); + this.upperHead.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + this.upperHead.rotateAngleX = par5 / Constants.RADIANS_TO_DEGREES; + this.rightArm.rotateAngleX = MathHelper.cos(par1 * 0.6662F + floatPI) * 2.0F * par2 * 0.5F; + this.leftArm.rotateAngleX = MathHelper.cos(par1 * 0.6662F) * 2.0F * par2 * 0.5F; + this.rightArm.rotateAngleZ = 0.0F; + this.leftArm.rotateAngleZ = 0.0F; + this.rightLeg.rotateAngleX = MathHelper.cos(par1 * 0.6662F) * 1.4F * par2; + this.leftLeg.rotateAngleX = MathHelper.cos(par1 * 0.6662F + floatPI) * 1.4F * par2; + this.rightLeg.rotateAngleY = 0.0F; + this.leftLeg.rotateAngleY = 0.0F; + + if (this.isRiding) + { + this.rightArm.rotateAngleX += -(floatPI / 5F); + this.leftArm.rotateAngleX += -(floatPI / 5F); + this.rightLeg.rotateAngleX = -(floatPI * 2F / 5F); + this.leftLeg.rotateAngleX = -(floatPI * 2F / 5F); + this.rightLeg.rotateAngleY = floatPI / 10F; + this.leftLeg.rotateAngleY = -(floatPI / 10F); + } + + this.rightArm.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + this.leftArm.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + float var7; + float var8; + + if (this.swingProgress > -9990.0F) + { + var7 = this.swingProgress; + this.spine.rotateAngleY = MathHelper.sin(MathHelper.sqrt(var7) * Constants.twoPI) * 0.2F; + + this.rightArm.rotationPointZ = MathHelper.sin(this.spine.rotateAngleY) * 5.0F; + this.rightArm.rotationPointX = -MathHelper.cos(this.spine.rotateAngleY) * 5.0F; + this.leftArm.rotationPointZ = -MathHelper.sin(this.spine.rotateAngleY) * 5.0F; + this.leftArm.rotationPointX = MathHelper.cos(this.spine.rotateAngleY) * 5.0F; + this.rightArm.rotateAngleY += this.spine.rotateAngleY; + this.leftArm.rotateAngleY += this.spine.rotateAngleY; + this.leftArm.rotateAngleX += this.spine.rotateAngleY; + var7 = 1.0F - this.swingProgress; + var7 *= var7; + var7 *= var7; + var7 = 1.0F - var7; + var8 = MathHelper.sin(var7 * floatPI); + final float var9 = MathHelper.sin(this.swingProgress * floatPI) * -(this.upperHead.rotateAngleX - 0.7F) * 0.75F; + this.rightArm.rotateAngleX = (float) (this.rightArm.rotateAngleX - (var8 * 1.2D + var9)); + this.rightArm.rotateAngleY += this.spine.rotateAngleY * 2.0F; + this.rightArm.rotateAngleZ = MathHelper.sin(this.swingProgress * floatPI) * -0.4F; + } + + final float f6 = MathHelper.sin(this.swingProgress * floatPI); + final float f7 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * floatPI); + this.rightArm.rotateAngleZ = 0.0F; + this.leftArm.rotateAngleZ = 0.0F; + this.rightArm.rotateAngleY = 0.5F * (par4 / Constants.RADIANS_TO_DEGREES) + -(0.1F - f6 * 0.6F); + this.leftArm.rotateAngleY = 0.5F * (par4 / Constants.RADIANS_TO_DEGREES) + 0.1F - f6 * 0.6F; + this.rightArm.rotateAngleX = -(floatPI / 2F); + this.leftArm.rotateAngleX = -(floatPI / 2F); + this.rightArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F; + this.leftArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F; + this.rightArm.rotateAngleZ += MathHelper.cos(par3 * 0.09F) * 0.05F + 0.05F; + this.leftArm.rotateAngleZ -= MathHelper.cos(par3 * 0.09F) * 0.05F + 0.05F; + this.rightArm.rotateAngleX += MathHelper.sin(par3 * 0.067F) * 0.05F; + this.leftArm.rotateAngleX -= MathHelper.sin(par3 * 0.067F) * 0.05F; + + if (((EntitySkeletonBoss) e).deathTicks > 0) + { + this.leftArm.rotateAngleX = -(floatPI / 2F) + (float) (Math.pow(((EntitySkeletonBoss) e).deathTicks, 2) / 5.0F) / 3.0F / Constants.RADIANS_TO_DEGREES; + this.rightArm.rotateAngleX = -(floatPI / 2F) + (float) (Math.pow(((EntitySkeletonBoss) e).deathTicks, 2) / 5.0F) / 2.0F / Constants.RADIANS_TO_DEGREES; + } + + if (boss.throwTimer + boss.postThrowDelay > 0) + { + this.rightArm.rotateAngleX -= MathHelper.cos((boss.throwTimer + boss.postThrowDelay) * 0.05F) * 1.2F + 0.05F; + this.leftArm.rotateAngleX -= MathHelper.cos((boss.throwTimer + boss.postThrowDelay) * 0.05F) * 1.2F + 0.05F; + } + } + + public void postRenderArm(float scale, ItemCameraTransforms.TransformType type) + { + if (type == ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND) + { + this.rightArm.postRender(scale); + } else + { + this.leftArm.postRender(scale); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSpider.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSpider.java new file mode 100644 index 00000000..2a416729 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSpider.java @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelEvolvedSpider extends ModelBase +{ + + ModelRenderer body; + ModelRenderer rearEnd; + ModelRenderer leg8; + ModelRenderer leg6; + ModelRenderer leg4; + ModelRenderer leg2; + ModelRenderer leg7; + ModelRenderer leg5; + ModelRenderer leg3; + ModelRenderer leg1; + ModelRenderer head; + + ModelRenderer oxygenMask; + ModelRenderer tank1; + ModelRenderer tank2; + ModelRenderer tube1; + ModelRenderer tube2; + ModelRenderer tube3; + ModelRenderer tube4; + ModelRenderer tube5; + ModelRenderer tube6; + ModelRenderer tube7; + ModelRenderer tube8; + ModelRenderer tube9; + ModelRenderer tube10; + ModelRenderer tube11; + ModelRenderer tube12; + ModelRenderer tube13; + ModelRenderer tube15; + ModelRenderer tube14; + ModelRenderer tube16; + ModelRenderer tube17; + ModelRenderer tube18; + + public ModelEvolvedSpider() + { + this(0.0F); + } + + public ModelEvolvedSpider(float par1) + { + this.textureWidth = 128; + this.textureHeight = 64; + + this.body = new ModelRenderer(this, 0, 0); + this.body.addBox(-3F, -3F, -3F, 6, 6, 6, par1); + this.body.setRotationPoint(0F, 15F, 0F); + this.body.setTextureSize(128, 64); + this.body.mirror = true; + this.setRotation(this.body, 0F, 0F, 0F); + this.rearEnd = new ModelRenderer(this, 0, 12); + this.rearEnd.addBox(-5F, -4F, -6F, 10, 8, 12, par1); + this.rearEnd.setRotationPoint(0F, 15F, 9F); + this.rearEnd.setTextureSize(128, 64); + this.rearEnd.mirror = true; + this.setRotation(this.rearEnd, 0F, 0F, 0F); + this.leg8 = new ModelRenderer(this, 18, 0); + this.leg8.addBox(-1F, -1F, -1F, 16, 2, 2, par1); + this.leg8.setRotationPoint(4F, 15F, -1F); + this.leg8.setTextureSize(128, 64); + this.leg8.mirror = true; + this.setRotation(this.leg8, 0F, 0.5759587F, 0.1919862F); + this.leg6 = new ModelRenderer(this, 18, 0); + this.leg6.addBox(-1F, -1F, -1F, 16, 2, 2, par1); + this.leg6.setRotationPoint(4F, 15F, 0F); + this.leg6.setTextureSize(128, 64); + this.leg6.mirror = true; + this.setRotation(this.leg6, 0F, 0.2792527F, 0.1919862F); + this.leg4 = new ModelRenderer(this, 18, 0); + this.leg4.addBox(-1F, -1F, -1F, 16, 2, 2, par1); + this.leg4.setRotationPoint(4F, 15F, 1F); + this.leg4.setTextureSize(128, 64); + this.leg4.mirror = true; + this.setRotation(this.leg4, 0F, -0.2792527F, 0.1919862F); + this.leg2 = new ModelRenderer(this, 18, 0); + this.leg2.addBox(-1F, -1F, -1F, 16, 2, 2, par1); + this.leg2.setRotationPoint(4F, 15F, 2F); + this.leg2.setTextureSize(128, 64); + this.leg2.mirror = true; + this.setRotation(this.leg2, 0F, -0.5759587F, 0.1919862F); + this.leg7 = new ModelRenderer(this, 18, 0); + this.leg7.addBox(-15F, -1F, -1F, 16, 2, 2, par1); + this.leg7.setRotationPoint(-4F, 15F, -1F); + this.leg7.setTextureSize(128, 64); + this.leg7.mirror = true; + this.setRotation(this.leg7, 0F, -0.5759587F, -0.1919862F); + this.leg5 = new ModelRenderer(this, 18, 0); + this.leg5.addBox(-15F, -1F, -1F, 16, 2, 2, par1); + this.leg5.setRotationPoint(-4F, 15F, 0F); + this.leg5.setTextureSize(128, 64); + this.leg5.mirror = true; + this.setRotation(this.leg5, 0F, -0.2792527F, -0.1919862F); + this.leg3 = new ModelRenderer(this, 18, 0); + this.leg3.addBox(-15F, -1F, -1F, 16, 2, 2, par1); + this.leg3.setRotationPoint(-4F, 15F, 1F); + this.leg3.setTextureSize(128, 64); + this.leg3.mirror = true; + this.setRotation(this.leg3, 0F, 0.2792527F, -0.1919862F); + this.leg1 = new ModelRenderer(this, 18, 0); + this.leg1.addBox(-15F, -1F, -1F, 16, 2, 2, par1); + this.leg1.setRotationPoint(-4F, 15F, 2F); + this.leg1.setTextureSize(128, 64); + this.leg1.mirror = true; + this.setRotation(this.leg1, 0F, 0.5759587F, -0.1919862F); + this.head = new ModelRenderer(this, 32, 4); + this.head.addBox(-4F, -4F, -8F, 8, 8, 8, par1); + this.head.setRotationPoint(0F, 15F, -3F); + this.head.setTextureSize(128, 64); + this.head.mirror = true; + this.setRotation(this.head, 0F, 0F, 0F); + + this.oxygenMask = new ModelRenderer(this, 0, 32); + this.oxygenMask.addBox(-5F, -5F, -9F, 10, 10, 10, par1); + this.oxygenMask.setRotationPoint(0F, 15F, -3F); + this.oxygenMask.setTextureSize(128, 64); + this.oxygenMask.mirror = true; + this.setRotation(this.oxygenMask, 0F, 0F, 0F); + this.tank1 = new ModelRenderer(this, 40, 34); + this.tank1.addBox(1F, -3F, 0F, 3, 3, 7, par1); + this.tank1.setRotationPoint(0F, 11F, 4F); + this.tank1.setTextureSize(128, 64); + this.tank1.mirror = true; + this.setRotation(this.tank1, 0F, 0F, 0F); + this.tank2 = new ModelRenderer(this, 40, 34); + this.tank2.addBox(-4F, -3F, 0F, 3, 3, 7, par1); + this.tank2.setRotationPoint(0F, 11F, 4F); + this.tank2.setTextureSize(128, 64); + this.tank2.mirror = true; + this.setRotation(this.tank2, 0F, 0F, 0F); + this.tube1 = new ModelRenderer(this, 40, 32); + this.tube1.addBox(2F, 0F, -6.5F, 1, 1, 1, par1); + this.tube1.setRotationPoint(0F, 11F, 4F); + this.tube1.setTextureSize(128, 64); + this.tube1.mirror = true; + this.setRotation(this.tube1, 0F, 0F, 0F); + this.tube2 = new ModelRenderer(this, 40, 32); + this.tube2.addBox(2F, -1F, -5.5F, 1, 1, 1, par1); + this.tube2.setRotationPoint(0F, 11F, 4F); + this.tube2.setTextureSize(128, 64); + this.tube2.mirror = true; + this.setRotation(this.tube2, 0F, 0F, 0F); + this.tube3 = new ModelRenderer(this, 40, 32); + this.tube3.addBox(2F, -1F, -4.5F, 1, 1, 1, par1); + this.tube3.setRotationPoint(0F, 11F, 4F); + this.tube3.setTextureSize(128, 64); + this.tube3.mirror = true; + this.setRotation(this.tube3, 0F, 0F, 0F); + this.tube4 = new ModelRenderer(this, 40, 32); + this.tube4.addBox(2F, -2F, -3.5F, 1, 1, 1, par1); + this.tube4.setRotationPoint(0F, 11F, 4F); + this.tube4.setTextureSize(128, 64); + this.tube4.mirror = true; + this.setRotation(this.tube4, 0F, 0F, 0F); + this.tube5 = new ModelRenderer(this, 40, 32); + this.tube5.addBox(2F, -3F, -2.5F, 1, 1, 1, par1); + this.tube5.setRotationPoint(0F, 11F, 4F); + this.tube5.setTextureSize(128, 64); + this.tube5.mirror = true; + this.setRotation(this.tube5, 0F, 0F, 0F); + this.tube6 = new ModelRenderer(this, 40, 32); + this.tube6.addBox(2F, -4F, -2.5F, 1, 1, 1, par1); + this.tube6.setRotationPoint(0F, 11F, 4F); + this.tube6.setTextureSize(128, 64); + this.tube6.mirror = true; + this.setRotation(this.tube6, 0F, 0F, 0F); + this.tube7 = new ModelRenderer(this, 40, 32); + this.tube7.addBox(2F, -5F, -1.5F, 1, 1, 1, par1); + this.tube7.setRotationPoint(0F, 11F, 4F); + this.tube7.setTextureSize(128, 64); + this.tube7.mirror = true; + this.setRotation(this.tube7, 0F, 0F, 0F); + this.tube8 = new ModelRenderer(this, 40, 32); + this.tube8.addBox(2F, -5F, -0.5F, 1, 1, 1, par1); + this.tube8.setRotationPoint(0F, 11F, 4F); + this.tube8.setTextureSize(128, 64); + this.tube8.mirror = true; + this.setRotation(this.tube8, 0F, 0F, 0F); + this.tube9 = new ModelRenderer(this, 40, 32); + this.tube9.addBox(2F, -4F, 0.5F, 1, 1, 1, par1); + this.tube9.setRotationPoint(0F, 11F, 4F); + this.tube9.setTextureSize(128, 64); + this.tube9.mirror = true; + this.setRotation(this.tube9, 0F, 0F, 0F); + this.tube10 = new ModelRenderer(this, 40, 32); + this.tube10.addBox(-3F, 0F, -6.5F, 1, 1, 1, par1); + this.tube10.setRotationPoint(0F, 11F, 4F); + this.tube10.setTextureSize(128, 64); + this.tube10.mirror = true; + this.setRotation(this.tube10, 0F, 0F, 0F); + this.tube11 = new ModelRenderer(this, 40, 32); + this.tube11.addBox(-3F, -1F, -5.5F, 1, 1, 1, par1); + this.tube11.setRotationPoint(0F, 11F, 4F); + this.tube11.setTextureSize(128, 64); + this.tube11.mirror = true; + this.setRotation(this.tube11, 0F, 0F, 0F); + this.tube12 = new ModelRenderer(this, 40, 32); + this.tube12.addBox(-3F, -1F, -4.5F, 1, 1, 1, par1); + this.tube12.setRotationPoint(0F, 11F, 4F); + this.tube12.setTextureSize(128, 64); + this.tube12.mirror = true; + this.setRotation(this.tube12, 0F, 0F, 0F); + this.tube13 = new ModelRenderer(this, 40, 32); + this.tube13.addBox(-3F, -2F, -3.5F, 1, 1, 1, par1); + this.tube13.setRotationPoint(0F, 11F, 4F); + this.tube13.setTextureSize(128, 64); + this.tube13.mirror = true; + this.setRotation(this.tube13, 0F, 0F, 0F); + this.tube15 = new ModelRenderer(this, 40, 32); + this.tube15.addBox(-3F, -4F, -2.5F, 1, 1, 1, par1); + this.tube15.setRotationPoint(0F, 11F, 4F); + this.tube15.setTextureSize(128, 64); + this.tube15.mirror = true; + this.setRotation(this.tube15, 0F, 0F, 0F); + this.tube14 = new ModelRenderer(this, 40, 32); + this.tube14.addBox(-3F, -3F, -2.5F, 1, 1, 1, par1); + this.tube14.setRotationPoint(0F, 11F, 4F); + this.tube14.setTextureSize(128, 64); + this.tube14.mirror = true; + this.setRotation(this.tube14, 0F, 0F, 0F); + this.tube16 = new ModelRenderer(this, 40, 32); + this.tube16.addBox(-3F, -5F, -1.5F, 1, 1, 1, par1); + this.tube16.setRotationPoint(0F, 11F, 4F); + this.tube16.setTextureSize(128, 64); + this.tube16.mirror = true; + this.setRotation(this.tube16, 0F, 0F, 0F); + this.tube17 = new ModelRenderer(this, 40, 32); + this.tube17.addBox(-3F, -5F, -0.5F, 1, 1, 1, par1); + this.tube17.setRotationPoint(0F, 11F, 4F); + this.tube17.setTextureSize(128, 64); + this.tube17.mirror = true; + this.setRotation(this.tube17, 0F, 0F, 0F); + this.tube18 = new ModelRenderer(this, 40, 32); + this.tube18.addBox(-3F, -4F, 0.5F, 1, 1, 1, par1); + this.tube18.setRotationPoint(0F, 11F, 4F); + this.tube18.setTextureSize(128, 64); + this.tube18.mirror = true; + this.setRotation(this.tube18, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5); + this.body.render(f5); + this.rearEnd.render(f5); + this.leg8.render(f5); + this.leg6.render(f5); + this.leg4.render(f5); + this.leg2.render(f5); + this.leg7.render(f5); + this.leg5.render(f5); + this.leg3.render(f5); + this.leg1.render(f5); + this.head.render(f5); + this.oxygenMask.render(f5); + this.tank1.render(f5); + this.tank2.render(f5); + this.tube1.render(f5); + this.tube2.render(f5); + this.tube3.render(f5); + this.tube4.render(f5); + this.tube5.render(f5); + this.tube6.render(f5); + this.tube7.render(f5); + this.tube8.render(f5); + this.tube9.render(f5); + this.tube10.render(f5); + this.tube11.render(f5); + this.tube12.render(f5); + this.tube13.render(f5); + this.tube15.render(f5); + this.tube14.render(f5); + this.tube16.render(f5); + this.tube17.render(f5); + this.tube18.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + this.head.rotateAngleY = f3 / Constants.RADIANS_TO_DEGREES; + this.head.rotateAngleX = f4 / Constants.RADIANS_TO_DEGREES; + this.oxygenMask.rotateAngleY = f3 / Constants.RADIANS_TO_DEGREES; + this.oxygenMask.rotateAngleX = f4 / Constants.RADIANS_TO_DEGREES; + final float var7 = (float) Math.PI / 4F; + this.leg1.rotateAngleZ = -var7; + this.leg2.rotateAngleZ = var7; + this.leg3.rotateAngleZ = -var7 * 0.74F; + this.leg4.rotateAngleZ = var7 * 0.74F; + this.leg5.rotateAngleZ = -var7 * 0.74F; + this.leg6.rotateAngleZ = var7 * 0.74F; + this.leg7.rotateAngleZ = -var7; + this.leg8.rotateAngleZ = var7; + final float var8 = -0.0F; + final float var9 = 0.3926991F; + this.leg1.rotateAngleY = var9 * 2.0F + var8; + this.leg2.rotateAngleY = -var9 * 2.0F - var8; + this.leg3.rotateAngleY = var9 * 1.0F + var8; + this.leg4.rotateAngleY = -var9 * 1.0F - var8; + this.leg5.rotateAngleY = -var9 * 1.0F + var8; + this.leg6.rotateAngleY = var9 * 1.0F - var8; + this.leg7.rotateAngleY = -var9 * 2.0F + var8; + this.leg8.rotateAngleY = var9 * 2.0F - var8; + final float var10 = -(MathHelper.cos(f * 0.6662F * 2.0F + 0.0F) * 0.4F) * f1; + final float var11 = -(MathHelper.cos(f * 0.6662F * 2.0F + (float) Math.PI) * 0.4F) * f1; + final float var12 = -(MathHelper.cos(f * 0.6662F * 2.0F + Constants.halfPI) * 0.4F) * f1; + final float var13 = -(MathHelper.cos(f * 0.6662F * 2.0F + 3F * Constants.halfPI) * 0.4F) * f1; + final float var14 = Math.abs(MathHelper.sin(f * 0.6662F + 0.0F) * 0.4F) * f1; + final float var15 = Math.abs(MathHelper.sin(f * 0.6662F + (float) Math.PI) * 0.4F) * f1; + final float var16 = Math.abs(MathHelper.sin(f * 0.6662F + Constants.halfPI) * 0.4F) * f1; + final float var17 = Math.abs(MathHelper.sin(f * 0.6662F + 3F * Constants.halfPI) * 0.4F) * f1; + this.leg1.rotateAngleY += var10; + this.leg2.rotateAngleY += -var10; + this.leg3.rotateAngleY += var11; + this.leg4.rotateAngleY += -var11; + this.leg5.rotateAngleY += var12; + this.leg6.rotateAngleY += -var12; + this.leg7.rotateAngleY += var13; + this.leg8.rotateAngleY += -var13; + this.leg1.rotateAngleZ += var14; + this.leg2.rotateAngleZ += -var14; + this.leg3.rotateAngleZ += var15; + this.leg4.rotateAngleZ += -var15; + this.leg5.rotateAngleZ += var16; + this.leg6.rotateAngleZ += -var16; + this.leg7.rotateAngleZ += var17; + this.leg8.rotateAngleZ += -var17; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedWitch.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedWitch.java new file mode 100644 index 00000000..539d2b04 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedWitch.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelWitch; +import net.minecraft.entity.Entity; + +public class ModelEvolvedWitch extends ModelWitch +{ + + ModelRenderer tank1; + ModelRenderer tank2; + ModelRenderer oxygenMask; + ModelRenderer tube1; + ModelRenderer tube2; + ModelRenderer tube3; + ModelRenderer tube4; + ModelRenderer tube5; + ModelRenderer tube6; + ModelRenderer tube7; + ModelRenderer tube8; + ModelRenderer tube9; + ModelRenderer tube10; + ModelRenderer tube11; + ModelRenderer tube12; + ModelRenderer tube13; + ModelRenderer tube14; + ModelRenderer tube15; + ModelRenderer tube16; + ModelRenderer tube17; + ModelRenderer tube18; + + public ModelEvolvedWitch() + { + super(0.0F); + this.textureWidth = 64; + this.textureHeight = 128; + + this.tank1 = new ModelRenderer(this, 52, 66); + this.tank1.addBox(0F, 0F, 0F, 3, 7, 3); + this.tank1.setRotationPoint(0F, 4F, 3F); + + this.tank2 = new ModelRenderer(this, 52, 66); + this.tank2.addBox(0F, 0F, 0F, 3, 7, 3); + this.tank2.setRotationPoint(-3F, 4F, 3F); + + this.oxygenMask = new ModelRenderer(this, 24, 90); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10); + this.oxygenMask.setRotationPoint(0F, 1F, 0F); + + this.tube1 = new ModelRenderer(this, 60, 76); + this.tube1.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube1.setRotationPoint(1F, 4.5F, 6F); + + this.tube2 = new ModelRenderer(this, 60, 76); + this.tube2.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube2.setRotationPoint(1F, 3.5F, 7F); + + this.tube3 = new ModelRenderer(this, 60, 76); + this.tube3.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube3.setRotationPoint(1F, 2.5F, 7.5F); + + this.tube4 = new ModelRenderer(this, 60, 76); + this.tube4.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube4.setRotationPoint(1F, 1.5F, 7.5F); + + this.tube5 = new ModelRenderer(this, 60, 76); + this.tube5.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube5.setRotationPoint(1F, 0.5F, 7.5F); + + this.tube6 = new ModelRenderer(this, 60, 76); + this.tube6.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube6.setRotationPoint(1F, -0.5F, 7F); + + this.tube7 = new ModelRenderer(this, 60, 76); + this.tube7.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube7.setRotationPoint(1F, -1.5F, 6F); + + this.tube8 = new ModelRenderer(this, 60, 76); + this.tube8.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube8.setRotationPoint(1F, -2.5F, 5F); + + this.tube9 = new ModelRenderer(this, 60, 76); + this.tube9.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube9.setRotationPoint(1F, -3F, 4F); + + this.tube10 = new ModelRenderer(this, 60, 76); + this.tube10.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube10.setRotationPoint(-2F, 4.5F, 6F); + + this.tube11 = new ModelRenderer(this, 60, 76); + this.tube11.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube11.setRotationPoint(-2F, 3.5F, 7F); + + this.tube12 = new ModelRenderer(this, 60, 76); + this.tube12.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube12.setRotationPoint(-2F, 2.5F, 7.5F); + + this.tube13 = new ModelRenderer(this, 60, 76); + this.tube13.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube13.setRotationPoint(-2F, 1.5F, 7.5F); + + this.tube14 = new ModelRenderer(this, 60, 76); + this.tube14.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube14.setRotationPoint(-2F, 0.5F, 7.5F); + + this.tube15 = new ModelRenderer(this, 60, 76); + this.tube15.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube15.setRotationPoint(-2F, -0.5F, 7F); + + this.tube16 = new ModelRenderer(this, 60, 76); + this.tube16.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube16.setRotationPoint(-2F, -1.5F, 6F); + + this.tube17 = new ModelRenderer(this, 60, 76); + this.tube17.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube17.setRotationPoint(-2F, -2.5F, 5F); + + this.tube18 = new ModelRenderer(this, 60, 76); + this.tube18.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube18.setRotationPoint(-2F, -3F, 4F); + } + + @Override + public void render(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + super.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.tank1.render(scale); + this.tank2.render(scale); + this.oxygenMask.render(scale); + this.tube1.render(scale); + this.tube2.render(scale); + this.tube3.render(scale); + this.tube4.render(scale); + this.tube5.render(scale); + this.tube6.render(scale); + this.tube7.render(scale); + this.tube8.render(scale); + this.tube9.render(scale); + this.tube10.render(scale); + this.tube11.render(scale); + this.tube12.render(scale); + this.tube13.render(scale); + this.tube14.render(scale); + this.tube15.render(scale); + this.tube16.render(scale); + this.tube17.render(scale); + this.tube18.render(scale); + } + + @Override + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale, Entity entity) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entity); + this.oxygenMask.rotateAngleY = this.villagerHead.rotateAngleY; + this.oxygenMask.rotateAngleX = this.villagerHead.rotateAngleX; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedZombie.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedZombie.java new file mode 100644 index 00000000..781974ba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedZombie.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import org.lwjgl.opengl.GL11; + +public class ModelEvolvedZombie extends ModelBiped +{ + + ModelRenderer leftOxygenTank; + ModelRenderer rightOxygenTank; + ModelRenderer tubeRight2; + ModelRenderer tubeLeft1; + ModelRenderer tubeRight3; + ModelRenderer tubeRight4; + ModelRenderer tubeRight5; + ModelRenderer tubeLeft6; + ModelRenderer tubeRight7; + ModelRenderer tubeRight1; + ModelRenderer tubeLeft2; + ModelRenderer tubeLeft3; + ModelRenderer tubeLeft4; + ModelRenderer tubeLeft5; + ModelRenderer tubeLeft7; + ModelRenderer tubeRight6; + ModelRenderer tubeLeft8; + ModelRenderer oxygenMask; + private float saveGravity; + private boolean renderGear; + + public ModelEvolvedZombie(boolean renderGear) + { + this(0.0F, false, renderGear); + } + + public ModelEvolvedZombie(float par1, boolean halfSizeTexture, boolean renderGear) + { + this.textureWidth = halfSizeTexture ? 64 : 128; + this.textureHeight = halfSizeTexture ? 32 : 64; + this.renderGear = renderGear; + final int par2 = 0; + this.leftOxygenTank = new ModelRenderer(this, 56, 20); + this.leftOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.leftOxygenTank.setRotationPoint(2F, 2F, 3.8F); + this.leftOxygenTank.mirror = true; + this.setRotation(this.leftOxygenTank, 0F, 0F, 0F); + this.rightOxygenTank = new ModelRenderer(this, 56, 20); + this.rightOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.rightOxygenTank.setRotationPoint(-2F, 2F, 3.8F); + this.rightOxygenTank.mirror = true; + this.setRotation(this.rightOxygenTank, 0F, 0F, 0F); + this.tubeRight2 = new ModelRenderer(this, 56, 30); + this.tubeRight2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight2.setRotationPoint(-2F, 2F, 6.8F); + this.tubeRight2.mirror = true; + this.setRotation(this.tubeRight2, 0F, 0F, 0F); + this.tubeLeft1 = new ModelRenderer(this, 56, 30); + this.tubeLeft1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft1.setRotationPoint(2F, 3F, 5.8F); + this.tubeLeft1.mirror = true; + this.setRotation(this.tubeLeft1, 0F, 0F, 0F); + this.tubeRight3 = new ModelRenderer(this, 56, 30); + this.tubeRight3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight3.setRotationPoint(-2F, 1F, 6.8F); + this.tubeRight3.mirror = true; + this.setRotation(this.tubeRight3, 0F, 0F, 0F); + this.tubeRight4 = new ModelRenderer(this, 56, 30); + this.tubeRight4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight4.setRotationPoint(-2F, 0F, 6.8F); + this.tubeRight4.mirror = true; + this.setRotation(this.tubeRight4, 0F, 0F, 0F); + this.tubeRight5 = new ModelRenderer(this, 56, 30); + this.tubeRight5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight5.setRotationPoint(-2F, -1F, 6.8F); + this.tubeRight5.mirror = true; + this.setRotation(this.tubeRight5, 0F, 0F, 0F); + this.tubeLeft6 = new ModelRenderer(this, 56, 30); + this.tubeLeft6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft6.setRotationPoint(2F, -2F, 5.8F); + this.tubeLeft6.mirror = true; + this.setRotation(this.tubeLeft6, 0F, 0F, 0F); + this.tubeRight7 = new ModelRenderer(this, 56, 30); + this.tubeRight7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight7.setRotationPoint(-2F, -3F, 4.8F); + this.tubeRight7.mirror = true; + this.setRotation(this.tubeRight7, 0F, 0F, 0F); + this.tubeRight1 = new ModelRenderer(this, 56, 30); + this.tubeRight1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight1.setRotationPoint(-2F, 3F, 5.8F); + this.tubeRight1.mirror = true; + this.setRotation(this.tubeRight1, 0F, 0F, 0F); + this.tubeLeft2 = new ModelRenderer(this, 56, 30); + this.tubeLeft2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft2.setRotationPoint(2F, 2F, 6.8F); + this.tubeLeft2.mirror = true; + this.setRotation(this.tubeLeft2, 0F, 0F, 0F); + this.tubeLeft3 = new ModelRenderer(this, 56, 30); + this.tubeLeft3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft3.setRotationPoint(2F, 1F, 6.8F); + this.tubeLeft3.mirror = true; + this.setRotation(this.tubeLeft3, 0F, 0F, 0F); + this.tubeLeft4 = new ModelRenderer(this, 56, 30); + this.tubeLeft4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft4.setRotationPoint(2F, 0F, 6.8F); + this.tubeLeft4.mirror = true; + this.setRotation(this.tubeLeft4, 0F, 0F, 0F); + this.tubeLeft5 = new ModelRenderer(this, 56, 30); + this.tubeLeft5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft5.setRotationPoint(2F, -1F, 6.8F); + this.tubeLeft5.mirror = true; + this.setRotation(this.tubeLeft5, 0F, 0F, 0F); + this.tubeLeft7 = new ModelRenderer(this, 56, 30); + this.tubeLeft7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft7.setRotationPoint(2F, -3F, 4.8F); + this.tubeLeft7.mirror = true; + this.setRotation(this.tubeLeft7, 0F, 0F, 0F); + this.tubeRight6 = new ModelRenderer(this, 56, 30); + this.tubeRight6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight6.setRotationPoint(-2F, -2F, 5.8F); + this.tubeRight6.mirror = true; + this.setRotation(this.tubeRight6, 0F, 0F, 0F); + this.tubeLeft8 = new ModelRenderer(this, 56, 30); + this.tubeLeft8.addBox(0F, 0F, 0F, 1, 1, 1, par1); + this.tubeLeft8.setRotationPoint(0F, -5F, 0F); + this.tubeLeft8.mirror = true; + this.setRotation(this.tubeLeft8, 0F, 0F, 0F); + this.oxygenMask = new ModelRenderer(this, 56, 0); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10, par1); + this.oxygenMask.setRotationPoint(0F, 0F, 0F); + this.oxygenMask.mirror = true; + this.setRotation(this.oxygenMask, 0F, 0F, 0F); + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, par1); + this.bipedHead.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, par1); + this.bipedBody.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, par1); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F + par2, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, par1); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + par2, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, par1); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F + par2, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, par1); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F + par2, 0.0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + this.saveGravity = WorldUtil.getGravityFactor(entity); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + if (this.isChild) + { + float f6 = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / f6, 1.5F / f6, 1.5F / f6); + GL11.glTranslatef(0.0F, 16.0F * f5, 0.0F); + this.bipedHead.render(f5); + if (this.renderGear) + { + this.oxygenMask.render(f5); + } + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / f6, 1.0F / f6, 1.0F / f6); + GL11.glTranslatef(0.0F, 24.0F * f5, 0.0F); + if (this.renderGear) + { + this.leftOxygenTank.render(f5); + this.rightOxygenTank.render(f5); + this.tubeRight2.render(f5); + this.tubeLeft1.render(f5); + this.tubeRight3.render(f5); + this.tubeRight4.render(f5); + this.tubeRight5.render(f5); + this.tubeLeft6.render(f5); + this.tubeRight7.render(f5); + this.tubeRight1.render(f5); + this.tubeLeft2.render(f5); + this.tubeLeft3.render(f5); + this.tubeLeft4.render(f5); + this.tubeLeft5.render(f5); + this.tubeLeft7.render(f5); + this.tubeRight6.render(f5); + this.tubeLeft8.render(f5); + } + this.bipedBody.render(f5); + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + this.bipedRightLeg.render(f5); + this.bipedLeftLeg.render(f5); + GL11.glPopMatrix(); + } else + { + if (this.renderGear) + { + this.leftOxygenTank.render(f5); + this.rightOxygenTank.render(f5); + this.tubeRight2.render(f5); + this.tubeLeft1.render(f5); + this.tubeRight3.render(f5); + this.tubeRight4.render(f5); + this.tubeRight5.render(f5); + this.tubeLeft6.render(f5); + this.tubeRight7.render(f5); + this.tubeRight1.render(f5); + this.tubeLeft2.render(f5); + this.tubeLeft3.render(f5); + this.tubeLeft4.render(f5); + this.tubeLeft5.render(f5); + this.tubeLeft7.render(f5); + this.tubeRight6.render(f5); + this.tubeLeft8.render(f5); + this.oxygenMask.render(f5); + } + this.bipedHead.render(f5); + this.bipedBody.render(f5); + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + this.bipedRightLeg.render(f5); + this.bipedLeftLeg.render(f5); + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity entityIn) + { + super.setRotationAngles(p_78087_1_, p_78087_2_, p_78087_3_, p_78087_4_, p_78087_5_, p_78087_6_, entityIn); + float f = MathHelper.sin(this.swingProgress * (float) Math.PI); + float f1 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * (float) Math.PI); + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - f * 0.6F); + this.bipedLeftArm.rotateAngleY = 0.1F - f * 0.6F; + this.bipedRightArm.rotateAngleX = -((float) Math.PI / 2F); + this.bipedLeftArm.rotateAngleX = -((float) Math.PI / 2F); + this.bipedRightArm.rotateAngleX -= f * 1.2F - f1 * 0.4F; + this.bipedLeftArm.rotateAngleX -= f * 1.2F - f1 * 0.4F; + this.bipedRightArm.rotateAngleZ += MathHelper.cos(p_78087_3_ * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(p_78087_3_ * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(p_78087_3_ * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(p_78087_3_ * 0.067F) * 0.05F; + + copyModelAngles(this.bipedHead, this.oxygenMask); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelFlag.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelFlag.java new file mode 100644 index 00000000..25ee11a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelFlag.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import org.lwjgl.opengl.GL11; + +public class ModelFlag extends ModelBase +{ + + ModelRenderer base; + ModelRenderer pole; + + public ModelFlag() + { + this.textureWidth = 128; + this.textureHeight = 64; + this.base = new ModelRenderer(this, 4, 0); + this.base.addBox(-1.5F, 0F, -1.5F, 3, 1, 3); + this.base.setRotationPoint(0F, 23F, 0F); + this.base.setTextureSize(128, 64); + this.base.mirror = true; + this.setRotation(this.base, 0F, 0F, 0F); + this.pole = new ModelRenderer(this, 0, 0); + this.pole.addBox(-0.5F, -40F, -0.5F, 1, 40, 1); + this.pole.setRotationPoint(0F, 23F, 0F); + this.pole.setTextureSize(128, 64); + this.pole.mirror = true; + this.setRotation(this.pole, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + + if (entity instanceof EntityFlag) + { + EntityFlag flag = (EntityFlag) entity; + this.renderPole(flag, f5); + this.renderFlag(flag, flag.ticksExisted); + } + } + + public void renderPole(Entity entity, float f5) + { + this.base.render(f5); + this.pole.render(f5); + } + + public void renderFlag(EntityFlag entity, float ticks) + { + if (entity.flagData != null) + { + GL11.glPushMatrix(); + + GL11.glScalef(0.5F, 0.5F, 0.5F); + GL11.glTranslatef(0.0F, -1.1F, 0.0F); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_CULL_FACE); + + float windLevel = 1.0F; + + if (entity.world.provider instanceof IGalacticraftWorldProvider) + { + windLevel = ((IGalacticraftWorldProvider) entity.world.provider).getWindLevel(); + } + + for (int i = 0; i < entity.flagData.getWidth(); i++) + { + for (int j = 0; j < entity.flagData.getHeight(); j++) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0, -1.0F, 0); + float offset = 0.0F; + float offsetAhead = 0.0F; + + if (windLevel > 0) + { + offset = (float) (Math.sin(ticks / 2.0F + i * 50 + 3) / 25.0F) * i / 30.0F; + offsetAhead = (float) (Math.sin(ticks / 2.0F + (i + 1) * 50 + 3) / 25.0F) * (i + 1) / 30.0F; + offset *= windLevel; + offsetAhead *= windLevel; + } + + Vector3 col = entity.flagData.getColorAt(i, j); + GL11.glColor3f(col.floatX(), col.floatY(), col.floatZ()); + + Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_TRIANGLES, DefaultVertexFormats.POSITION); + + worldRenderer.pos(i / 24.0F + 0.0 / 24.0F, j / 24.0F + 0.0 / 24.0F + offset, offset).endVertex(); + worldRenderer.pos(i / 24.0F + 0.0 / 24.0F, j / 24.0F + 1.0 / 24.0F + offset, offset).endVertex(); + worldRenderer.pos(i / 24.0F + 1.0 / 24.0F, j / 24.0F + 1.0 / 24.0F + offsetAhead, offsetAhead).endVertex(); + + worldRenderer.pos(i / 24.0F + 0.0 / 24.0F, j / 24.0F + 0.0 / 24.0F + offset, offset).endVertex(); + worldRenderer.pos(i / 24.0F + 1.0 / 24.0F, j / 24.0F + 1.0 / 24.0F + offsetAhead, offsetAhead).endVertex(); + worldRenderer.pos(i / 24.0F + 1.0 / 24.0F, j / 24.0F + 0.0 / 24.0F + offsetAhead, offsetAhead).endVertex(); + + tess.draw(); + + GL11.glColor3f(1, 1, 1); + GL11.glPopMatrix(); + } + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glPopMatrix(); + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelKey.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelKey.java new file mode 100644 index 00000000..c5ce4544 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelKey.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelKey extends ModelBase +{ + + public ModelRenderer keyParts[] = new ModelRenderer[5]; + + public ModelKey() + { + this.textureWidth = 64; + this.textureHeight = 64; + this.keyParts[4] = new ModelRenderer(this, 50, 43); + this.keyParts[4].addBox(7F, 2F, -0.5F, 3, 1, 1); + this.keyParts[4].setRotationPoint(0F, 0F, 0F); + this.keyParts[4].setTextureSize(64, 64); + this.keyParts[4].mirror = true; + this.keyParts[3] = new ModelRenderer(this, 39, 43); + this.keyParts[3].addBox(6F, 1F, -0.5F, 4, 1, 1); + this.keyParts[3].setRotationPoint(0F, 0F, 0F); + this.keyParts[3].setTextureSize(64, 64); + this.keyParts[3].mirror = true; + this.keyParts[2] = new ModelRenderer(this, 14, 43); + this.keyParts[2].addBox(-0.5F, 0F, -0.5F, 11, 1, 1); + this.keyParts[2].setRotationPoint(0F, 0F, 0F); + this.keyParts[2].setTextureSize(64, 64); + this.keyParts[2].mirror = true; + this.keyParts[1] = new ModelRenderer(this, 9, 43); + this.keyParts[1].addBox(-1.5F, -0.5F, -0.5F, 1, 2, 1); + this.keyParts[1].setRotationPoint(0F, 0F, 0F); + this.keyParts[1].setTextureSize(64, 64); + this.keyParts[1].mirror = true; + this.keyParts[0] = new ModelRenderer(this, 0, 43); + this.keyParts[0].addBox(-4.5F, -1F, -0.5F, 3, 3, 1); + this.keyParts[0].setRotationPoint(0F, 0F, 0F); + this.keyParts[0].setTextureSize(64, 64); + this.keyParts[0].mirror = true; + } + + public void renderAll() + { + for (final ModelRenderer nmtmr : this.keyParts) + { + nmtmr.rotationPointX = -4.0F; + nmtmr.rotationPointY = 0.0F; + nmtmr.rotationPointZ = -2.0F; + nmtmr.render(0.0625F); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelLander.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelLander.java new file mode 100644 index 00000000..793fa90c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelLander.java @@ -0,0 +1,545 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.entity.Entity; + +public class ModelLander extends ModelBase +{ + + ModelRendererGC bodyMain1; + ModelRendererGC bodyMain2; + ModelRendererGC bodyAux1; + ModelRendererGC bodyAux2; + ModelRendererGC bodyAux3; + ModelRendererGC bodyAux4; + ModelRendererGC bodySupportMain1; + ModelRendererGC bodySupportMain2; + ModelRendererGC legStructureAux1e; + ModelRendererGC footBaseg; + ModelRendererGC legStructure1i; + ModelRendererGC legBase1j; + ModelRendererGC footJointk; + ModelRendererGC footBasel; + ModelRendererGC legBase1n; + ModelRendererGC legStructureAux1s; + ModelRendererGC legStructure1u; + ModelRendererGC footJointv; + ModelRendererGC footBasew; + ModelRendererGC footBasex; + ModelRendererGC legBase1z; + ModelRendererGC legStructureAux1f; + ModelRendererGC legStructure1g; + ModelRendererGC footJointh; + ModelRendererGC footBasei; + ModelRendererGC footBasej; + ModelRendererGC legBase1l; + ModelRendererGC legStructureAux1q; + ModelRendererGC legStructure1s; + ModelRendererGC footJointt; + ModelRendererGC footBaseu; + ModelRendererGC footBasev; + ModelRendererGC moduleMain1; + ModelRendererGC moduleMain2; + ModelRendererGC moduleMainDeco; + ModelRendererGC moduleCore1; + ModelRendererGC moduleCore2; + ModelRendererGC moduleCore3; + ModelRendererGC moduleAux1; + ModelRendererGC moduleAux2; + ModelRendererGC moduleAux3; + ModelRendererGC moduleAux4; + ModelRendererGC moduleAux5; + ModelRendererGC moduleAux6; + ModelRendererGC moduleAux7; + ModelRendererGC moduleAux8; + ModelRendererGC moduleThrusterBase1; + ModelRendererGC moduleThrusterBase2; + ModelRendererGC moduleThrusterBase3; + ModelRendererGC moduleThrusterBase4; + ModelRendererGC moduleThrusterBase5; + ModelRendererGC moduleThrusterConeTop1; + ModelRendererGC moduleThrusterConeTop2; + ModelRendererGC moduleThrusterConeTop3; + ModelRendererGC moduleThrusterConeBack1; + ModelRendererGC moduleThrusterConeBack2; + ModelRendererGC moduleThrusterConeBack3; + ModelRendererGC moduleThrusterConeBot1; + ModelRendererGC moduleThrusterConeBot2; + ModelRendererGC moduleThrusterConeBot3; + ModelRendererGC moduleThrusterConeFront1; + ModelRendererGC moduleThrusterConeFront2; + ModelRendererGC moduleThrusterConeFront3; + + public ModelLander() + { + this.textureWidth = 512; + this.textureHeight = 512; + + this.bodyMain1 = new ModelRendererGC(this, 125, 128); + this.bodyMain1.addBox(-24F, 0F, -24F, 48, 12, 48); + this.bodyMain1.setRotationPoint(0F, 0F, 0F); + this.bodyMain1.setTextureSize(512, 512); + this.bodyMain1.mirror = true; + this.setRotation(this.bodyMain1, 0F, -0.3926991F, 0F); + this.bodyMain2 = new ModelRendererGC(this, 125, 128); + this.bodyMain2.addBox(-24F, -0.1F, -24F, 48, 12, 48); + this.bodyMain2.setRotationPoint(0F, 0F, 0F); + this.bodyMain2.setTextureSize(512, 512); + this.bodyMain2.mirror = true; + this.setRotation(this.bodyMain2, 0F, 0.3926991F, 0F); + this.bodyAux1 = new ModelRendererGC(this, 125, 192); + this.bodyAux1.addBox(-13F, -5F, -34F, 26, 15, 34); + this.bodyAux1.setRotationPoint(0F, 0F, 0F); + this.bodyAux1.setTextureSize(512, 512); + this.bodyAux1.mirror = true; + this.setRotation(this.bodyAux1, 0.0698132F, 0.7853982F, 0F); + this.bodyAux2 = new ModelRendererGC(this, 125, 192); + this.bodyAux2.addBox(-13F, -5F, -34F, 26, 15, 34); + this.bodyAux2.setRotationPoint(0F, 0F, 0F); + this.bodyAux2.setTextureSize(512, 512); + this.bodyAux2.mirror = true; + this.setRotation(this.bodyAux2, 0.0698132F, -0.7853982F, 0F); + this.bodyAux3 = new ModelRendererGC(this, 125, 192); + this.bodyAux3.addBox(-13F, -5F, -34F, 26, 15, 34); + this.bodyAux3.setRotationPoint(0F, 0F, 0F); + this.bodyAux3.setTextureSize(512, 512); + this.bodyAux3.mirror = true; + this.setRotation(this.bodyAux3, 0.0698132F, -2.356194F, 0F); + this.bodyAux4 = new ModelRendererGC(this, 125, 192); + this.bodyAux4.addBox(-13F, -5F, -34F, 26, 15, 34); + this.bodyAux4.setRotationPoint(0F, 0F, 0F); + this.bodyAux4.setTextureSize(512, 512); + this.bodyAux4.mirror = true; + this.setRotation(this.bodyAux4, 0.0698132F, 2.356194F, 0F); + this.bodySupportMain1 = new ModelRendererGC(this, 125, 243); + this.bodySupportMain1.addBox(-19F, -7F, -19F, 38, 10, 38); + this.bodySupportMain1.setRotationPoint(0F, 0F, 0F); + this.bodySupportMain1.setTextureSize(512, 512); + this.bodySupportMain1.mirror = true; + this.setRotation(this.bodySupportMain1, 0F, 0F, 0F); + this.bodySupportMain2 = new ModelRendererGC(this, 125, 293); + this.bodySupportMain2.addBox(-12F, -15F, -12F, 24, 15, 24); + this.bodySupportMain2.setRotationPoint(0F, 0F, 0F); + this.bodySupportMain2.setTextureSize(512, 512); + this.bodySupportMain2.mirror = true; + this.setRotation(this.bodySupportMain2, 0F, 0F, 0F); + this.legStructureAux1e = new ModelRendererGC(this, 0, 81); + this.legStructureAux1e.addBox(-26F, 28F, -2F, 3, 24, 3); + this.legStructureAux1e.setRotationPoint(0F, 0F, 0F); + this.legStructureAux1e.setTextureSize(512, 512); + this.legStructureAux1e.mirror = true; + this.setRotation(this.legStructureAux1e, 0F, -2.356194F, 0.7330383F); + this.footBaseg = new ModelRendererGC(this, 125, 81); + this.footBaseg.addBox(-64F, 18.9F, -2F, 11, 6, 2); + this.footBaseg.setRotationPoint(0F, 0F, 0F); + this.footBaseg.setTextureSize(512, 512); + this.footBaseg.mirror = true; + this.setRotation(this.footBaseg, 0F, -2.356194F, 0F); + this.legStructure1i = new ModelRendererGC(this, 0, 0); + this.legStructure1i.addBox(-27F, 33F, -3F, 5, 14, 5); + this.legStructure1i.setRotationPoint(0F, 0F, 0F); + this.legStructure1i.setTextureSize(512, 512); + this.legStructure1i.mirror = true; + this.setRotation(this.legStructure1i, 0F, -2.356194F, 0.7330383F); + this.legBase1j = new ModelRendererGC(this, 16, 81); + this.legBase1j.addBox(-29F, 20F, -5F, 9, 10, 9); + this.legBase1j.setRotationPoint(0F, 0F, 0F); + this.legBase1j.setTextureSize(512, 512); + this.legBase1j.mirror = true; + this.setRotation(this.legBase1j, 0F, -2.356194F, 0.7330383F); + this.footJointk = new ModelRendererGC(this, 64, 104); + this.footJointk.addBox(-58F, 20F, -6.5F, 7, 5, 11); + this.footJointk.setRotationPoint(0F, 0F, 0F); + this.footJointk.setTextureSize(512, 512); + this.footJointk.mirror = true; + this.setRotation(this.footJointk, 0F, -2.356194F, 0F); + this.footBasel = new ModelRendererGC(this, 64, 81); + this.footBasel.addBox(-62F, 23F, -8.5F, 10, 2, 15); + this.footBasel.setRotationPoint(0F, 0F, 0F); + this.footBasel.setTextureSize(512, 512); + this.footBasel.mirror = true; + this.setRotation(this.footBasel, 0F, -2.356194F, 0F); + this.legBase1n = new ModelRendererGC(this, 16, 81); + this.legBase1n.addBox(-29F, 20F, -5F, 9, 10, 9); + this.legBase1n.setRotationPoint(0F, 0F, 0F); + this.legBase1n.setTextureSize(512, 512); + this.legBase1n.mirror = true; + this.setRotation(this.legBase1n, 0F, -0.7853982F, 0.7330383F); + this.legStructureAux1s = new ModelRendererGC(this, 0, 81); + this.legStructureAux1s.addBox(-26F, 28F, -2F, 3, 24, 3); + this.legStructureAux1s.setRotationPoint(0F, 0F, 0F); + this.legStructureAux1s.setTextureSize(512, 512); + this.legStructureAux1s.mirror = true; + this.setRotation(this.legStructureAux1s, 0F, -0.7853982F, 0.7330383F); + this.legStructure1u = new ModelRendererGC(this, 0, 0); + this.legStructure1u.addBox(-27F, 33F, -3F, 5, 14, 5); + this.legStructure1u.setRotationPoint(0F, 0F, 0F); + this.legStructure1u.setTextureSize(512, 512); + this.legStructure1u.mirror = true; + this.setRotation(this.legStructure1u, 0F, -0.7853982F, 0.7330383F); + this.footJointv = new ModelRendererGC(this, 64, 104); + this.footJointv.addBox(-58F, 20F, -6.5F, 7, 5, 11); + this.footJointv.setRotationPoint(0F, 0F, 0F); + this.footJointv.setTextureSize(512, 512); + this.footJointv.mirror = true; + this.setRotation(this.footJointv, 0F, -0.7853982F, 0F); + this.footBasew = new ModelRendererGC(this, 64, 81); + this.footBasew.addBox(-62F, 23F, -8.5F, 10, 2, 15); + this.footBasew.setRotationPoint(0F, 0F, 0F); + this.footBasew.setTextureSize(512, 512); + this.footBasew.mirror = true; + this.setRotation(this.footBasew, 0F, -0.7853982F, 0F); + this.footBasex = new ModelRendererGC(this, 125, 81); + this.footBasex.addBox(-64F, 18.9F, -2F, 11, 6, 2); + this.footBasex.setRotationPoint(0F, 0F, 0F); + this.footBasex.setTextureSize(512, 512); + this.footBasex.mirror = true; + this.setRotation(this.footBasex, 0F, -0.7853982F, 0F); + this.legBase1z = new ModelRendererGC(this, 16, 81); + this.legBase1z.addBox(-29F, 20F, -5F, 9, 10, 9); + this.legBase1z.setRotationPoint(0F, 0F, 0F); + this.legBase1z.setTextureSize(512, 512); + this.legBase1z.mirror = true; + this.setRotation(this.legBase1z, 0F, 0.7853982F, 0.7330383F); + this.legStructureAux1f = new ModelRendererGC(this, 0, 81); + this.legStructureAux1f.addBox(-26F, 28F, -2F, 3, 24, 3); + this.legStructureAux1f.setRotationPoint(0F, 0F, 0F); + this.legStructureAux1f.setTextureSize(512, 512); + this.legStructureAux1f.mirror = true; + this.setRotation(this.legStructureAux1f, 0F, 0.7853982F, 0.7330383F); + this.legStructure1g = new ModelRendererGC(this, 0, 0); + this.legStructure1g.addBox(-27F, 33F, -3F, 5, 14, 5); + this.legStructure1g.setRotationPoint(0F, 0F, 0F); + this.legStructure1g.setTextureSize(512, 512); + this.legStructure1g.mirror = true; + this.setRotation(this.legStructure1g, 0F, 0.7853982F, 0.7330383F); + this.footJointh = new ModelRendererGC(this, 64, 104); + this.footJointh.addBox(-58F, 20F, -6.5F, 7, 5, 11); + this.footJointh.setRotationPoint(0F, 0F, 0F); + this.footJointh.setTextureSize(512, 512); + this.footJointh.mirror = true; + this.setRotation(this.footJointh, 0F, 0.7853982F, 0F); + this.footBasei = new ModelRendererGC(this, 64, 81); + this.footBasei.addBox(-62F, 23F, -8.5F, 10, 2, 15); + this.footBasei.setRotationPoint(0F, 0F, 0F); + this.footBasei.setTextureSize(512, 512); + this.footBasei.mirror = true; + this.setRotation(this.footBasei, 0F, 0.7853982F, 0F); + this.footBasej = new ModelRendererGC(this, 125, 81); + this.footBasej.addBox(-64F, 18.9F, -2F, 11, 6, 2); + this.footBasej.setRotationPoint(0F, 0F, 0F); + this.footBasej.setTextureSize(512, 512); + this.footBasej.mirror = true; + this.setRotation(this.footBasej, 0F, 0.7853982F, 0F); + this.legBase1l = new ModelRendererGC(this, 16, 81); + this.legBase1l.addBox(-29F, 20F, -5F, 9, 10, 9); + this.legBase1l.setRotationPoint(0F, 0F, 0F); + this.legBase1l.setTextureSize(512, 512); + this.legBase1l.mirror = true; + this.setRotation(this.legBase1l, 0F, 2.356194F, 0.7330383F); + this.legStructureAux1q = new ModelRendererGC(this, 0, 81); + this.legStructureAux1q.addBox(-26F, 28F, -2F, 3, 24, 3); + this.legStructureAux1q.setRotationPoint(0F, 0F, 0F); + this.legStructureAux1q.setTextureSize(512, 512); + this.legStructureAux1q.mirror = true; + this.setRotation(this.legStructureAux1q, 0F, 2.356194F, 0.7330383F); + this.legStructure1s = new ModelRendererGC(this, 0, 0); + this.legStructure1s.addBox(-27F, 33F, -3F, 5, 14, 5); + this.legStructure1s.setRotationPoint(0F, 0F, 0F); + this.legStructure1s.setTextureSize(512, 512); + this.legStructure1s.mirror = true; + this.setRotation(this.legStructure1s, 0F, 2.356194F, 0.7330383F); + this.footJointt = new ModelRendererGC(this, 64, 104); + this.footJointt.addBox(-58F, 20F, -6.5F, 7, 5, 11); + this.footJointt.setRotationPoint(0F, 0F, 0F); + this.footJointt.setTextureSize(512, 512); + this.footJointt.mirror = true; + this.setRotation(this.footJointt, 0F, 2.356194F, 0F); + this.footBaseu = new ModelRendererGC(this, 64, 81); + this.footBaseu.addBox(-62F, 23F, -8.5F, 10, 2, 15); + this.footBaseu.setRotationPoint(0F, 0F, 0F); + this.footBaseu.setTextureSize(512, 512); + this.footBaseu.mirror = true; + this.setRotation(this.footBaseu, 0F, 2.356194F, 0F); + this.footBasev = new ModelRendererGC(this, 125, 81); + this.footBasev.addBox(-64F, 18.9F, -2F, 11, 6, 2); + this.footBasev.setRotationPoint(0F, 0F, 0F); + this.footBasev.setTextureSize(512, 512); + this.footBasev.mirror = true; + this.setRotation(this.footBasev, 0F, 2.356194F, 0F); + this.moduleMain1 = new ModelRendererGC(this, 289, 166); + this.moduleMain1.addBox(-6F, -44F, -16F, 32, 32, 32); + this.moduleMain1.setRotationPoint(0F, 0F, 0F); + this.moduleMain1.setTextureSize(512, 512); + this.moduleMain1.mirror = true; + this.setRotation(this.moduleMain1, 0F, 0F, 0F); + this.moduleMain2 = new ModelRendererGC(this, 249, 234); + this.moduleMain2.addBox(-16F, -30F, -13F, 32, 16, 26); + this.moduleMain2.setRotationPoint(0F, 0F, 0F); + this.moduleMain2.setTextureSize(512, 512); + this.moduleMain2.mirror = true; + this.setRotation(this.moduleMain2, 0F, 0F, 0F); + this.moduleMainDeco = new ModelRendererGC(this, 70, 300); + this.moduleMainDeco.addBox(16F, -46F, -20.9F, 5, 30, 37); + this.moduleMainDeco.setRotationPoint(0F, 0F, 0F); + this.moduleMainDeco.setTextureSize(512, 512); + this.moduleMainDeco.mirror = true; + this.setRotation(this.moduleMainDeco, 0F, 0F, 0F); + this.moduleCore1 = new ModelRendererGC(this, 197, 293); + this.moduleCore1.mirror = true; + this.moduleCore1.addBox(-20F, -48F, -25F, 5, 36, 42); + this.moduleCore1.setRotationPoint(0F, 0F, 0F); + this.moduleCore1.setTextureSize(512, 512); + this.moduleCore1.mirror = true; + this.setRotation(this.moduleCore1, 0F, 0F, 0F); + this.moduleCore1.mirror = false; + this.moduleCore2 = new ModelRendererGC(this, 197, 293); + this.moduleCore2.addBox(-30F, -48F, -25F, 5, 36, 42); + this.moduleCore2.setRotationPoint(0F, 0F, 0F); + this.moduleCore2.setTextureSize(512, 512); + this.moduleCore2.mirror = true; + this.setRotation(this.moduleCore2, 0F, 0F, 0F); + this.moduleCore3 = new ModelRendererGC(this, 295, 300); + this.moduleCore3.addBox(-25F, -44F, -21F, 5, 28, 34); + this.moduleCore3.setRotationPoint(0F, 0F, 0F); + this.moduleCore3.setTextureSize(512, 512); + this.moduleCore3.mirror = true; + this.setRotation(this.moduleCore3, 0F, 0F, 0F); + this.moduleAux1 = new ModelRendererGC(this, 85, 238); + this.moduleAux1.addBox(26F, -34F, -13F, 4, 16, 26); + this.moduleAux1.setRotationPoint(0F, 0F, 0F); + this.moduleAux1.setTextureSize(512, 512); + this.moduleAux1.mirror = true; + this.setRotation(this.moduleAux1, 0F, 0F, 0F); + this.moduleAux2 = new ModelRendererGC(this, 0, 110); + this.moduleAux2.addBox(26.1F, -60F, 9F, 1, 28, 1); + this.moduleAux2.setRotationPoint(0F, 0F, 0F); + this.moduleAux2.setTextureSize(512, 512); + this.moduleAux2.mirror = true; + this.setRotation(this.moduleAux2, 0F, 0F, 0F); + this.moduleAux3 = new ModelRendererGC(this, 17, 110); + this.moduleAux3.addBox(27F, -57F, -12F, 1, 23, 1); + this.moduleAux3.setRotationPoint(0F, 0F, 0F); + this.moduleAux3.setTextureSize(512, 512); + this.moduleAux3.mirror = true; + this.setRotation(this.moduleAux3, 0F, 0F, 0F); + this.moduleAux4 = new ModelRendererGC(this, 5, 110); + this.moduleAux4.addBox(28F, -48F, -8F, 1, 14, 1); + this.moduleAux4.setRotationPoint(0F, 0F, 0F); + this.moduleAux4.setTextureSize(512, 512); + this.moduleAux4.mirror = true; + this.setRotation(this.moduleAux4, 0F, 0F, 0F); + this.moduleAux5 = new ModelRendererGC(this, 5, 110); + this.moduleAux5.addBox(28F, -48F, -6F, 1, 14, 1); + this.moduleAux5.setRotationPoint(0F, 0F, 0F); + this.moduleAux5.setTextureSize(512, 512); + this.moduleAux5.mirror = true; + this.setRotation(this.moduleAux5, 0F, 0F, 0F); + this.moduleAux6 = new ModelRendererGC(this, 5, 110); + this.moduleAux6.addBox(28F, -48F, -4F, 1, 14, 1); + this.moduleAux6.setRotationPoint(0F, 0F, 0F); + this.moduleAux6.setTextureSize(512, 512); + this.moduleAux6.mirror = true; + this.setRotation(this.moduleAux6, 0F, 0F, 0F); + this.moduleAux7 = new ModelRendererGC(this, 11, 110); + this.moduleAux7.addBox(27F, -53F, 2F, 1, 19, 1); + this.moduleAux7.setRotationPoint(0F, 0F, 0F); + this.moduleAux7.setTextureSize(512, 512); + this.moduleAux7.mirror = true; + this.setRotation(this.moduleAux7, 0F, 0F, 0F); + this.moduleAux8 = new ModelRendererGC(this, 0, 110); + this.moduleAux8.addBox(28.9F, -60F, 9F, 1, 28, 1); + this.moduleAux8.setRotationPoint(0F, 0F, 0F); + this.moduleAux8.setTextureSize(512, 512); + this.moduleAux8.mirror = true; + this.setRotation(this.moduleAux8, 0F, 0F, 0F); + this.moduleThrusterBase1 = new ModelRendererGC(this, 21, 19); + this.moduleThrusterBase1.addBox(30F, -28F, -5F, 3, 6, 10); + this.moduleThrusterBase1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase1.setTextureSize(512, 512); + this.moduleThrusterBase1.mirror = true; + this.setRotation(this.moduleThrusterBase1, 0F, 0F, 0F); + this.moduleThrusterBase2 = new ModelRendererGC(this, 50, 0); + this.moduleThrusterBase2.addBox(5F, -39F, -5F, 3, 5, 10); + this.moduleThrusterBase2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase2.setTextureSize(512, 512); + this.moduleThrusterBase2.mirror = true; + this.setRotation(this.moduleThrusterBase2, 0F, 0F, 0.7853982F); + this.moduleThrusterBase3 = new ModelRendererGC(this, 50, 0); + this.moduleThrusterBase3.addBox(-43F, -4F, -5F, 3, 6, 10); + this.moduleThrusterBase3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase3.setTextureSize(512, 512); + this.moduleThrusterBase3.mirror = true; + this.setRotation(this.moduleThrusterBase3, 0F, 0F, 2.356194F); + this.moduleThrusterBase4 = new ModelRendererGC(this, 0, 23); + this.moduleThrusterBase4.addBox(24F, -28F, 13.7F, 3, 6, 6); + this.moduleThrusterBase4.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase4.setTextureSize(512, 512); + this.moduleThrusterBase4.mirror = true; + this.setRotation(this.moduleThrusterBase4, 0F, 0.7853982F, 0F); + this.moduleThrusterBase5 = new ModelRendererGC(this, 0, 23); + this.moduleThrusterBase5.mirror = true; + this.moduleThrusterBase5.addBox(24F, -28F, -19.5F, 3, 6, 6); + this.moduleThrusterBase5.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase5.setTextureSize(512, 512); + this.moduleThrusterBase5.mirror = true; + this.setRotation(this.moduleThrusterBase5, 0F, -0.7853982F, 0F); + this.moduleThrusterBase5.mirror = false; + this.moduleThrusterConeTop1 = new ModelRendererGC(this, 40, 9); + this.moduleThrusterConeTop1.addBox(-44F, -3F, -1F, 1, 2, 2); + this.moduleThrusterConeTop1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeTop1.setTextureSize(512, 512); + this.moduleThrusterConeTop1.mirror = true; + this.setRotation(this.moduleThrusterConeTop1, 0F, 0F, 2.356194F); + this.moduleThrusterConeTop2 = new ModelRendererGC(this, 30, 9); + this.moduleThrusterConeTop2.addBox(-45F, -3.5F, -1.5F, 1, 3, 3); + this.moduleThrusterConeTop2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeTop2.setTextureSize(512, 512); + this.moduleThrusterConeTop2.mirror = true; + this.setRotation(this.moduleThrusterConeTop2, 0F, 0F, 2.356194F); + this.moduleThrusterConeTop3 = new ModelRendererGC(this, 29, 0); + this.moduleThrusterConeTop3.addBox(-46F, -4F, -2F, 1, 4, 4); + this.moduleThrusterConeTop3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeTop3.setTextureSize(512, 512); + this.moduleThrusterConeTop3.mirror = true; + this.setRotation(this.moduleThrusterConeTop3, 0F, 0F, 2.356194F); + this.moduleThrusterConeBack1 = new ModelRendererGC(this, 40, 9); + this.moduleThrusterConeBack1.addBox(27F, -26F, -18.5F, 1, 2, 2); + this.moduleThrusterConeBack1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBack1.setTextureSize(512, 512); + this.moduleThrusterConeBack1.mirror = true; + this.setRotation(this.moduleThrusterConeBack1, 0F, -0.7853982F, 0F); + this.moduleThrusterConeBack2 = new ModelRendererGC(this, 30, 9); + this.moduleThrusterConeBack2.addBox(28F, -26.5F, -19F, 1, 3, 3); + this.moduleThrusterConeBack2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBack2.setTextureSize(512, 512); + this.moduleThrusterConeBack2.mirror = true; + this.setRotation(this.moduleThrusterConeBack2, 0F, -0.7853982F, 0F); + this.moduleThrusterConeBack3 = new ModelRendererGC(this, 29, 0); + this.moduleThrusterConeBack3.addBox(29F, -27F, -19.5F, 1, 4, 4); + this.moduleThrusterConeBack3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBack3.setTextureSize(512, 512); + this.moduleThrusterConeBack3.mirror = true; + this.setRotation(this.moduleThrusterConeBack3, 0F, -0.7853982F, 0F); + this.moduleThrusterConeBot1 = new ModelRendererGC(this, 40, 9); + this.moduleThrusterConeBot1.addBox(8F, -38F, -1F, 1, 2, 2); + this.moduleThrusterConeBot1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBot1.setTextureSize(512, 512); + this.moduleThrusterConeBot1.mirror = true; + this.setRotation(this.moduleThrusterConeBot1, 0F, 0F, 0.7853982F); + this.moduleThrusterConeBot2 = new ModelRendererGC(this, 30, 9); + this.moduleThrusterConeBot2.addBox(9F, -38.5F, -1.5F, 1, 3, 3); + this.moduleThrusterConeBot2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBot2.setTextureSize(512, 512); + this.moduleThrusterConeBot2.mirror = true; + this.setRotation(this.moduleThrusterConeBot2, 0F, 0F, 0.7853982F); + this.moduleThrusterConeBot3 = new ModelRendererGC(this, 29, 0); + this.moduleThrusterConeBot3.addBox(10F, -39F, -2F, 1, 4, 4); + this.moduleThrusterConeBot3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBot3.setTextureSize(512, 512); + this.moduleThrusterConeBot3.mirror = true; + this.setRotation(this.moduleThrusterConeBot3, 0F, 0F, 0.7853982F); + this.moduleThrusterConeFront1 = new ModelRendererGC(this, 40, 9); + this.moduleThrusterConeFront1.addBox(27F, -26F, 16.5F, 1, 2, 2); + this.moduleThrusterConeFront1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeFront1.setTextureSize(512, 512); + this.moduleThrusterConeFront1.mirror = true; + this.setRotation(this.moduleThrusterConeFront1, 0F, 0.7853982F, 0F); + this.moduleThrusterConeFront2 = new ModelRendererGC(this, 30, 9); + this.moduleThrusterConeFront2.addBox(28F, -26.5F, 16F, 1, 3, 3); + this.moduleThrusterConeFront2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeFront2.setTextureSize(512, 512); + this.moduleThrusterConeFront2.mirror = true; + this.setRotation(this.moduleThrusterConeFront2, 0F, 0.7853982F, 0F); + this.moduleThrusterConeFront3 = new ModelRendererGC(this, 29, 0); + this.moduleThrusterConeFront3.addBox(29F, -27F, 15.5F, 1, 4, 4); + this.moduleThrusterConeFront3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeFront3.setTextureSize(512, 512); + this.moduleThrusterConeFront3.mirror = true; + this.setRotation(this.moduleThrusterConeFront3, 0F, 0.7853982F, 0F); + } + + @Override + public void render(Entity entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + super.render(entity, par2, par3, par4, par5, par6, par7); + this.setRotationAngles(par2, par3, par4, par5, par6, par7, entity); + this.bodyMain1.render(par7); + this.bodyMain2.render(par7); + this.bodyAux1.render(par7); + this.bodyAux2.render(par7); + this.bodyAux3.render(par7); + this.bodyAux4.render(par7); + this.bodySupportMain1.render(par7); + this.bodySupportMain2.render(par7); + this.legStructureAux1e.render(par7); + this.footBaseg.render(par7); + this.legStructure1i.render(par7); + this.legBase1j.render(par7); + this.footJointk.render(par7); + this.footBasel.render(par7); + this.legBase1n.render(par7); + this.legStructureAux1s.render(par7); + this.legStructure1u.render(par7); + this.footJointv.render(par7); + this.footBasew.render(par7); + this.footBasex.render(par7); + this.legBase1z.render(par7); + this.legStructureAux1f.render(par7); + this.legStructure1g.render(par7); + this.footJointh.render(par7); + this.footBasei.render(par7); + this.footBasej.render(par7); + this.legBase1l.render(par7); + this.legStructureAux1q.render(par7); + this.legStructure1s.render(par7); + this.footJointt.render(par7); + this.footBaseu.render(par7); + this.footBasev.render(par7); + this.moduleMain1.render(par7); + this.moduleMain2.render(par7); + this.moduleMainDeco.render(par7); + this.moduleCore1.render(par7); + this.moduleCore2.render(par7); + this.moduleCore3.render(par7); + this.moduleAux1.render(par7); + this.moduleAux2.render(par7); + this.moduleAux3.render(par7); + this.moduleAux4.render(par7); + this.moduleAux5.render(par7); + this.moduleAux6.render(par7); + this.moduleAux7.render(par7); + this.moduleAux8.render(par7); + this.moduleThrusterBase1.render(par7); + this.moduleThrusterBase2.render(par7); + this.moduleThrusterBase3.render(par7); + this.moduleThrusterBase4.render(par7); + this.moduleThrusterBase5.render(par7); + this.moduleThrusterConeTop1.render(par7); + this.moduleThrusterConeTop2.render(par7); + this.moduleThrusterConeTop3.render(par7); + this.moduleThrusterConeBack1.render(par7); + this.moduleThrusterConeBack2.render(par7); + this.moduleThrusterConeBack3.render(par7); + this.moduleThrusterConeBot1.render(par7); + this.moduleThrusterConeBot2.render(par7); + this.moduleThrusterConeBot3.render(par7); + this.moduleThrusterConeFront1.render(par7); + this.moduleThrusterConeFront2.render(par7); + this.moduleThrusterConeFront3.render(par7); + } + + private void setRotation(ModelRendererGC model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteor.java new file mode 100644 index 00000000..55eb3c5b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteor.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelMeteor extends ModelBase +{ + + ModelRenderer[] shapes = new ModelRenderer[13]; + + public ModelMeteor() + { + this.textureWidth = 128; + this.textureHeight = 64; + + this.shapes[0] = new ModelRenderer(this, 0, 0); + this.shapes[0].addBox(0F, -7F, -13F, 2, 4, 4); + this.shapes[0].setRotationPoint(0F, 0F, 0F); + this.shapes[0].setTextureSize(128, 64); + this.shapes[0].mirror = true; + this.setRotation(this.shapes[0], 0F, 0F, 0F); + this.shapes[1] = new ModelRenderer(this, 0, 0); + this.shapes[1].addBox(-10F, -10F, -10F, 20, 20, 20); + this.shapes[1].setRotationPoint(0F, 0F, 0F); + this.shapes[1].setTextureSize(128, 64); + this.shapes[1].mirror = true; + this.setRotation(this.shapes[1], 0F, 0F, 0F); + this.shapes[2] = new ModelRenderer(this, 0, 0); + this.shapes[2].addBox(-5F, -8F, -12F, 5, 9, 1); + this.shapes[2].setRotationPoint(0F, 0F, 0F); + this.shapes[2].setTextureSize(128, 64); + this.shapes[2].mirror = true; + this.setRotation(this.shapes[2], 0F, 0F, 0F); + this.shapes[3] = new ModelRenderer(this, 0, 0); + this.shapes[3].addBox(0F, -6F, 11F, 4, 13, 1); + this.shapes[3].setRotationPoint(0F, 0F, 0F); + this.shapes[3].setTextureSize(128, 64); + this.shapes[3].mirror = true; + this.setRotation(this.shapes[3], 0F, 0F, 0F); + this.shapes[4] = new ModelRenderer(this, 0, 0); + this.shapes[4].addBox(-9F, 10F, -9F, 18, 1, 18); + this.shapes[4].setRotationPoint(0F, 0F, 0F); + this.shapes[4].setTextureSize(128, 64); + this.shapes[4].mirror = true; + this.setRotation(this.shapes[4], 0F, 0F, 0F); + this.shapes[5] = new ModelRenderer(this, 0, 0); + this.shapes[5].addBox(11F, 3F, -8F, 1, 5, 5); + this.shapes[5].setRotationPoint(0F, 0F, 0F); + this.shapes[5].setTextureSize(128, 64); + this.shapes[5].mirror = true; + this.setRotation(this.shapes[5], 0F, 0F, 0F); + this.shapes[6] = new ModelRenderer(this, 0, 0); + this.shapes[6].addBox(-7F, -8F, 10F, 7, 12, 2); + this.shapes[6].setRotationPoint(0F, 0F, 0F); + this.shapes[6].setTextureSize(128, 64); + this.shapes[6].mirror = true; + this.setRotation(this.shapes[6], 0F, 0F, 0F); + this.shapes[7] = new ModelRenderer(this, 0, 0); + this.shapes[7].addBox(-9F, -9F, 10F, 18, 18, 1); + this.shapes[7].setRotationPoint(0F, 0F, 0F); + this.shapes[7].setTextureSize(128, 64); + this.shapes[7].mirror = true; + this.setRotation(this.shapes[7], 0F, 0F, 0F); + this.shapes[8] = new ModelRenderer(this, 0, 0); + this.shapes[8].addBox(-11F, -9F, -9F, 1, 18, 18); + this.shapes[8].setRotationPoint(0F, 0F, 0F); + this.shapes[8].setTextureSize(128, 64); + this.shapes[8].mirror = true; + this.setRotation(this.shapes[8], 0F, 0F, 0F); + this.shapes[9] = new ModelRenderer(this, 0, 0); + this.shapes[9].addBox(10F, -9F, -9F, 1, 18, 18); + this.shapes[9].setRotationPoint(0F, 0F, 0F); + this.shapes[9].setTextureSize(128, 64); + this.shapes[9].mirror = true; + this.setRotation(this.shapes[9], 0F, 0F, 0F); + this.shapes[10] = new ModelRenderer(this, 0, 0); + this.shapes[10].addBox(-9F, -9F, -11F, 18, 18, 1); + this.shapes[10].setRotationPoint(0F, 0F, 0F); + this.shapes[10].setTextureSize(128, 64); + this.shapes[10].mirror = true; + this.setRotation(this.shapes[10], 0F, 0F, 0F); + this.shapes[11] = new ModelRenderer(this, 0, 0); + this.shapes[11].addBox(-9F, -9F, -11F, 18, 18, 1); + this.shapes[11].setRotationPoint(0F, 0F, 0F); + this.shapes[11].setTextureSize(128, 64); + this.shapes[11].mirror = true; + this.setRotation(this.shapes[11], 0F, 0F, 0F); + this.shapes[12] = new ModelRenderer(this, 0, 0); + this.shapes[12].addBox(-9F, -11F, -9F, 18, 1, 18); + this.shapes[12].setRotationPoint(0F, 0F, 0F); + this.shapes[12].setTextureSize(128, 64); + this.shapes[12].mirror = true; + this.setRotation(this.shapes[12], 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + for (final ModelRenderer shape : this.shapes) + { + shape.render(f5); + } + } + + public void renderBlock(float f) + { + for (final ModelRenderer shape : this.shapes) + { + shape.render(f); + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteorChunk.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteorChunk.java new file mode 100644 index 00000000..e4b8b52e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteorChunk.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelMeteorChunk extends ModelBase +{ + + private ModelRenderer[] boxes = new ModelRenderer[6]; + + public ModelMeteorChunk() + { + textureWidth = 16; + textureHeight = 16; + + boxes[0] = new ModelRenderer(this, 0, 0); + boxes[0].addBox(0F, 0F, 0F, 1, 8, 6); + boxes[0].setRotationPoint(4F, 0.0F, -5F); + boxes[0].setTextureSize(16, 16); + setRotation(boxes[0], -0F, -0F, -0F); + boxes[0].mirror = false; + boxes[1] = new ModelRenderer(this, 0, 0); + boxes[1].addBox(0F, 0F, 0F, 5, 8, 1); + boxes[1].setRotationPoint(-3F, 1.0F, -7F); + boxes[1].setTextureSize(16, 16); + setRotation(boxes[1], -0F, -0F, -0F); + boxes[1].mirror = false; + boxes[2] = new ModelRenderer(this, 0, 0); + boxes[2].addBox(0F, 0F, 0F, 1, 8, 6); + boxes[2].setRotationPoint(-6F, -1.0F, -5F); + boxes[2].setTextureSize(16, 16); + setRotation(boxes[2], -0F, -0F, -0F); + boxes[2].mirror = false; + boxes[3] = new ModelRenderer(this, 0, 0); + boxes[3].addBox(0F, 0F, 0F, 6, 1, 5); + boxes[3].setRotationPoint(-3F, -3.0F, -4F); + boxes[3].setTextureSize(16, 16); + setRotation(boxes[3], -0F, -0F, -0F); + boxes[3].mirror = false; + boxes[4] = new ModelRenderer(this, 0, 0); + boxes[4].addBox(0F, 0F, 0F, 5, 8, 1); + boxes[4].setRotationPoint(-3F, 0.0F, 3F); + boxes[4].setTextureSize(16, 16); + setRotation(boxes[4], -0F, -0F, -0F); + boxes[4].mirror = false; + boxes[5] = new ModelRenderer(this, 0, 0); + boxes[5].addBox(0F, 0F, 0F, 9, 12, 9); + boxes[5].setRotationPoint(-5F, -2.0F, -6F); + boxes[5].setTextureSize(16, 16); + setRotation(boxes[5], -0F, -0F, -0F); + boxes[5].mirror = false; + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + for (ModelRenderer mr : boxes) + { + mr.render(f5); + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelParaChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelParaChest.java new file mode 100644 index 00000000..01d66235 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelParaChest.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderParaChest; +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class ModelParaChest extends ModelChest +{ + + private static final ResourceLocation grayParachuteTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/gray.png"); + + public ModelRenderer[] parachute = new ModelRenderer[3]; + public ModelRenderer[] parachuteStrings = new ModelRenderer[4]; + + public ModelParaChest() + { + this(0.0F); + } + + public ModelParaChest(float par1) + { + super(); + + this.parachute[0] = new ModelRenderer(this, 0, 0).setTextureSize(256, 256); + this.parachute[0].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, par1); + this.parachute[0].setRotationPoint(15.0F, 4.0F, 0.0F); + this.parachute[1] = new ModelRenderer(this, 0, 42).setTextureSize(256, 256); + this.parachute[1].addBox(-20.0F, -45.0F, -20.0F, 40, 2, 40, par1); + this.parachute[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachute[2] = new ModelRenderer(this, 0, 0).setTextureSize(256, 256); + this.parachute[2].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, par1); + this.parachute[2].setRotationPoint(11F, -11, 0.0F); + + this.parachuteStrings[0] = new ModelRenderer(this, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[0].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[0].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[1] = new ModelRenderer(this, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[1].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[2] = new ModelRenderer(this, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[2].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[2].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[3] = new ModelRenderer(this, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[3].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[3].setRotationPoint(0.0F, 0.0F, 0.0F); + } + + @Override + public void renderAll() + { + this.chestLid.rotateAngleX = (float) Math.PI; + this.chestBelow.rotateAngleX = (float) Math.PI; + this.chestKnob.rotateAngleX = (float) Math.PI; + + this.chestLid.rotationPointX = 2.0F; + this.chestLid.rotationPointY = 7.0F; + this.chestLid.rotationPointZ = -6.0F; + this.chestKnob.rotationPointX = 9.0F; + this.chestKnob.rotationPointY = 7.0F; + this.chestKnob.rotationPointZ = -6.0F; + this.chestBelow.rotationPointX = 2.0F; + this.chestBelow.rotationPointY = 8.0F; + this.chestBelow.rotationPointZ = 8.0F; + + int i; + + for (i = 0; i < this.parachute.length; i++) + { + this.parachute[i].render(0.0625F); + } + + for (i = 0; i < this.parachuteStrings.length; i++) + { + this.parachuteStrings[i].render(0.0625F); + } + + this.parachute[0].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + + this.parachute[0].setRotationPoint(-5.85F, -11.0F, 2.0F); + this.parachute[1].setRotationPoint(9F, -7F, 2.0F); + this.parachute[2].setRotationPoint(-2.15F, 4.0F, 2.0F); + this.parachute[0].rotateAngleZ = (float) (210F / Constants.RADIANS_TO_DEGREES); + this.parachute[1].rotateAngleZ = (float) (180F / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleZ = (float) -(210F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleZ = (float) ((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].setRotationPoint(9.0F, 3.0F, 2.0F); + this.parachuteStrings[1].rotateAngleZ = (float) ((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].setRotationPoint(9.0F, 3.0F, 2.0F); + + this.parachuteStrings[2].rotateAngleZ = (float) -((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].setRotationPoint(9.0F, 3.0F, 2.0F); + this.parachuteStrings[3].rotateAngleZ = (float) -((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].setRotationPoint(9.0F, 3.0F, 2.0F); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(RenderParaChest.parachestTexture); + + super.renderAll(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelPlayerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelPlayerGC.java new file mode 100644 index 00000000..3bf642af --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelPlayerGC.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class ModelPlayerGC extends ModelPlayer +{ + + public static final ResourceLocation oxygenMaskTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/oxygen.png"); + public static final ResourceLocation playerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/player.png"); + + public ModelPlayerGC(float var1, boolean smallArms) + { + super(var1, smallArms); + + if (smallArms) + { + this.bipedLeftArm = new ModelRenderer(this, 32, 48); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 3, 12, 4, var1); + this.bipedLeftArm.setRotationPoint(5.0F, 2.5F, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-2.0F, -2.0F, -2.0F, 3, 12, 4, var1); + this.bipedRightArm.setRotationPoint(-5.0F, 2.5F, 0.0F); + } else + { + this.bipedLeftArm = new ModelRenderer(this, 32, 48); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, var1); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, var1); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + } + } + + @Override + public void render(Entity entityIn, float f1, float f2, float f3, float f4, float f5, float scale) + { + GlStateManager.pushMatrix(); + super.render(entityIn, f1, f2, f3, f4, f5, scale); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRendererGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRendererGC.java new file mode 100644 index 00000000..dd077b06 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRendererGC.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.Tessellator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +public class ModelRendererGC extends ModelRenderer +{ + + private boolean compiled; + private int displayList; + + public ModelRendererGC(ModelBase par1ModelBase, int par2, int par3) + { + super(par1ModelBase, par2, par3); + } + + @Override + @SideOnly(Side.CLIENT) + public void render(float par1) + { + if (!this.isHidden) + { + if (this.showModel) + { + if (!this.compiled) + { + this.compileDisplayList(par1); + } + + GL11.glTranslatef(this.offsetX, this.offsetY, this.offsetZ); + int i; + + if (this.rotateAngleX == 0.0F && this.rotateAngleY == 0.0F && this.rotateAngleZ == 0.0F) + { + if (this.rotationPointX == 0.0F && this.rotationPointY == 0.0F && this.rotationPointZ == 0.0F) + { + GL11.glCallList(this.displayList); + + if (this.childModels != null) + { + for (i = 0; i < this.childModels.size(); ++i) + { + ((ModelRenderer) this.childModels.get(i)).render(par1); + } + } + } else + { + GL11.glTranslatef(this.rotationPointX * par1, this.rotationPointY * par1, this.rotationPointZ * par1); + GL11.glCallList(this.displayList); + + if (this.childModels != null) + { + for (i = 0; i < this.childModels.size(); ++i) + { + ((ModelRenderer) this.childModels.get(i)).render(par1); + } + } + + GL11.glTranslatef(-this.rotationPointX * par1, -this.rotationPointY * par1, -this.rotationPointZ * par1); + } + } else + { + GL11.glPushMatrix(); + GL11.glTranslatef(this.rotationPointX * par1, this.rotationPointY * par1, this.rotationPointZ * par1); + + if (this.rotateAngleY != 0.0F) + { + GL11.glRotatef(this.rotateAngleY * Constants.RADIANS_TO_DEGREES, 0.0F, 1.0F, 0.0F); + } +// + if (this.rotateAngleZ != 0.0F) + { + GL11.glRotatef(this.rotateAngleZ * Constants.RADIANS_TO_DEGREES, 0.0F, 0.0F, 1.0F); + } + + if (this.rotateAngleX != 0.0F) + { + GL11.glRotatef(this.rotateAngleX * Constants.RADIANS_TO_DEGREES, 1.0F, 0.0F, 0.0F); + } + + GL11.glCallList(this.displayList); + + if (this.childModels != null) + { + for (i = 0; i < this.childModels.size(); ++i) + { + ((ModelRenderer) this.childModels.get(i)).render(par1); + } + } + + GL11.glPopMatrix(); + } + + GL11.glTranslatef(-this.offsetX, -this.offsetY, -this.offsetZ); + } + } + } + + @SideOnly(Side.CLIENT) + private void compileDisplayList(float par1) + { + this.displayList = GLAllocation.generateDisplayLists(1); + GL11.glNewList(this.displayList, GL11.GL_COMPILE); + Tessellator tessellator = Tessellator.getInstance(); + + for (int i = 0; i < this.cubeList.size(); ++i) + { + ((ModelBox) this.cubeList.get(i)).render(tessellator.getBuffer(), par1); + } + + GL11.glEndList(); + this.compiled = true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRocketTier1.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRocketTier1.java new file mode 100644 index 00000000..f6bf244e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRocketTier1.java @@ -0,0 +1,358 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelRocketTier1 extends ModelBase +{ + + ModelRenderer insideRoof; + ModelRenderer rocketBase1; + ModelRenderer rocketBase2; + ModelRenderer tip; + ModelRenderer wing4d; + ModelRenderer wing4c; + ModelRenderer wing4e; + ModelRenderer wing4b; + ModelRenderer wing4a; + ModelRenderer wing1a; + ModelRenderer wing1b; + ModelRenderer wing1c; + ModelRenderer wing1e; + ModelRenderer wing1d; + ModelRenderer wing2e; + ModelRenderer wing2d; + ModelRenderer wing2c; + ModelRenderer wing2b; + ModelRenderer wing2a; + ModelRenderer wing3e; + ModelRenderer wing3d; + ModelRenderer wing3c; + ModelRenderer wing3b; + ModelRenderer wing3a; + ModelRenderer top1; + ModelRenderer top2; + ModelRenderer top3; + ModelRenderer top4; + ModelRenderer top5; + ModelRenderer top6; + ModelRenderer top7; + ModelRenderer insideBottom; + ModelRenderer insideLeft; + ModelRenderer insidetop; + ModelRenderer rocketBase3; + ModelRenderer insideRight; + ModelRenderer insideSideLeft; + ModelRenderer insideSideRight; + ModelRenderer insideSideBack; + ModelRenderer insideFloor; + + public ModelRocketTier1() + { + this.textureWidth = 256; + this.textureHeight = 256; + + this.insideRoof = new ModelRenderer(this, 0, 59); + this.insideRoof.addBox(-9F, -45F, -9F, 18, 1, 18); + this.insideRoof.setRotationPoint(0F, 23F, 0F); + this.insideRoof.setTextureSize(256, 256); + this.insideRoof.mirror = true; + this.setRotation(this.insideRoof, 0F, 0F, 0F); + this.rocketBase1 = new ModelRenderer(this, 0, 0); + this.rocketBase1.addBox(-7F, -1F, -7F, 14, 1, 14); + this.rocketBase1.setRotationPoint(0F, 24F, 0F); + this.rocketBase1.setTextureSize(256, 256); + this.rocketBase1.mirror = true; + this.setRotation(this.rocketBase1, 0F, 0F, 0F); + this.rocketBase2 = new ModelRenderer(this, 0, 15); + this.rocketBase2.addBox(-6F, -2F, -6F, 12, 1, 12); + this.rocketBase2.setRotationPoint(0F, 24F, 0F); + this.rocketBase2.setTextureSize(256, 256); + this.rocketBase2.mirror = true; + this.setRotation(this.rocketBase2, 0F, 0F, 0F); + this.tip = new ModelRenderer(this, 248, 144); + this.tip.addBox(-1F, -76F, -1F, 2, 18, 2); + this.tip.setRotationPoint(0F, 24F, 0F); + this.tip.setTextureSize(256, 256); + this.tip.mirror = true; + this.setRotation(this.tip, 0F, 0F, 0F); + this.wing4d = new ModelRenderer(this, 66, 0); + this.wing4d.addBox(11F, -14F, -1F, 2, 8, 2); + this.wing4d.setRotationPoint(0F, 24F, 0F); + this.wing4d.setTextureSize(256, 256); + this.wing4d.mirror = true; + this.setRotation(this.wing4d, 0F, 0F, 0F); + this.wing4c = new ModelRenderer(this, 66, 0); + this.wing4c.addBox(13F, -12F, -1F, 2, 8, 2); + this.wing4c.setRotationPoint(0F, 24F, 0F); + this.wing4c.setTextureSize(256, 256); + this.wing4c.mirror = true; + this.setRotation(this.wing4c, 0F, 0F, 0F); + this.wing4e = new ModelRenderer(this, 66, 0); + this.wing4e.addBox(9.1F, -15F, -1F, 2, 8, 2); + this.wing4e.setRotationPoint(0F, 24F, 0F); + this.wing4e.setTextureSize(256, 256); + this.wing4e.mirror = true; + this.setRotation(this.wing4e, 0F, 0F, 0F); + this.wing4b = new ModelRenderer(this, 66, 0); + this.wing4b.addBox(15F, -9F, -1F, 2, 8, 2); + this.wing4b.setRotationPoint(0F, 24F, 0F); + this.wing4b.setTextureSize(256, 256); + this.wing4b.mirror = true; + this.setRotation(this.wing4b, 0F, 0F, 0F); + this.wing4a = new ModelRenderer(this, 74, 0); + this.wing4a.addBox(17F, -14F, -1F, 1, 15, 2); + this.wing4a.setRotationPoint(0F, 24F, 0F); + this.wing4a.setTextureSize(256, 256); + this.wing4a.mirror = true; + this.setRotation(this.wing4a, 0F, 0F, 0F); + this.wing1a = new ModelRenderer(this, 60, 0); + this.wing1a.addBox(-1F, -14F, -18F, 2, 15, 1); + this.wing1a.setRotationPoint(0F, 24F, 0F); + this.wing1a.setTextureSize(256, 256); + this.wing1a.mirror = true; + this.setRotation(this.wing1a, 0F, 0F, 0F); + this.wing1b = new ModelRenderer(this, 66, 0); + this.wing1b.addBox(-1F, -9F, -17F, 2, 8, 2); + this.wing1b.setRotationPoint(0F, 24F, 0F); + this.wing1b.setTextureSize(256, 256); + this.wing1b.mirror = true; + this.setRotation(this.wing1b, 0F, 0F, 0F); + this.wing1c = new ModelRenderer(this, 66, 0); + this.wing1c.addBox(-1F, -12F, -15F, 2, 8, 2); + this.wing1c.setRotationPoint(0F, 24F, 0F); + this.wing1c.setTextureSize(256, 256); + this.wing1c.mirror = true; + this.setRotation(this.wing1c, 0F, 0F, 0F); + this.wing1e = new ModelRenderer(this, 66, 0); + this.wing1e.addBox(-1F, -15F, -11.1F, 2, 8, 2); + this.wing1e.setRotationPoint(0F, 24F, 0F); + this.wing1e.setTextureSize(256, 256); + this.wing1e.mirror = true; + this.setRotation(this.wing1e, 0F, 0F, 0F); + this.wing1d = new ModelRenderer(this, 66, 0); + this.wing1d.addBox(-1F, -14F, -13F, 2, 8, 2); + this.wing1d.setRotationPoint(0F, 24F, 0F); + this.wing1d.setTextureSize(256, 256); + this.wing1d.mirror = true; + this.setRotation(this.wing1d, 0F, 0F, 0F); + this.wing2e = new ModelRenderer(this, 66, 0); + this.wing2e.addBox(-11.1F, -15F, -1F, 2, 8, 2); + this.wing2e.setRotationPoint(0F, 24F, 0F); + this.wing2e.setTextureSize(256, 256); + this.wing2e.mirror = true; + this.setRotation(this.wing2e, 0F, 0F, 0F); + this.wing2d = new ModelRenderer(this, 66, 0); + this.wing2d.addBox(-13F, -14F, -1F, 2, 8, 2); + this.wing2d.setRotationPoint(0F, 24F, 0F); + this.wing2d.setTextureSize(256, 256); + this.wing2d.mirror = true; + this.setRotation(this.wing2d, 0F, 0F, 0F); + this.wing2c = new ModelRenderer(this, 66, 0); + this.wing2c.addBox(-15F, -12F, -1F, 2, 8, 2); + this.wing2c.setRotationPoint(0F, 24F, 0F); + this.wing2c.setTextureSize(256, 256); + this.wing2c.mirror = true; + this.setRotation(this.wing2c, 0F, 0F, 0F); + this.wing2b = new ModelRenderer(this, 66, 0); + this.wing2b.addBox(-17F, -9F, -1F, 2, 8, 2); + this.wing2b.setRotationPoint(0F, 24F, 0F); + this.wing2b.setTextureSize(256, 256); + this.wing2b.mirror = true; + this.setRotation(this.wing2b, 0F, 0F, 0F); + this.wing2a = new ModelRenderer(this, 74, 0); + this.wing2a.addBox(-18F, -14F, -1F, 1, 15, 2); + this.wing2a.setRotationPoint(0F, 24F, 0F); + this.wing2a.setTextureSize(256, 256); + this.wing2a.mirror = true; + this.setRotation(this.wing2a, 0F, 0F, 0F); + this.wing3e = new ModelRenderer(this, 66, 0); + this.wing3e.addBox(-1F, -15F, 9.1F, 2, 8, 2); + this.wing3e.setRotationPoint(0F, 24F, 0F); + this.wing3e.setTextureSize(256, 256); + this.wing3e.mirror = true; + this.setRotation(this.wing3e, 0F, 0F, 0F); + this.wing3d = new ModelRenderer(this, 66, 0); + this.wing3d.addBox(-1F, -14F, 11F, 2, 8, 2); + this.wing3d.setRotationPoint(0F, 24F, 0F); + this.wing3d.setTextureSize(256, 256); + this.wing3d.mirror = true; + this.setRotation(this.wing3d, 0F, 0F, 0F); + this.wing3c = new ModelRenderer(this, 66, 0); + this.wing3c.addBox(-1F, -12F, 13F, 2, 8, 2); + this.wing3c.setRotationPoint(0F, 24F, 0F); + this.wing3c.setTextureSize(256, 256); + this.wing3c.mirror = true; + this.setRotation(this.wing3c, 0F, 0F, 0F); + this.wing3b = new ModelRenderer(this, 66, 0); + this.wing3b.addBox(-1F, -9F, 15F, 2, 8, 2); + this.wing3b.setRotationPoint(0F, 24F, 0F); + this.wing3b.setTextureSize(256, 256); + this.wing3b.mirror = true; + this.setRotation(this.wing3b, 0F, 0F, 0F); + this.wing3a = new ModelRenderer(this, 60, 0); + this.wing3a.addBox(-1F, -14F, 17F, 2, 15, 1); + this.wing3a.setRotationPoint(0F, 24F, 0F); + this.wing3a.setTextureSize(256, 256); + this.wing3a.mirror = true; + this.setRotation(this.wing3a, 0F, 0F, 0F); + this.top1 = new ModelRenderer(this, 192, 60); + this.top1.addBox(-8F, -48F, -8F, 16, 2, 16); + this.top1.setRotationPoint(0F, 24F, 0F); + this.top1.setTextureSize(256, 256); + this.top1.mirror = true; + this.setRotation(this.top1, 0F, 0F, 0F); + this.top2 = new ModelRenderer(this, 200, 78); + this.top2.addBox(-7F, -50F, -7F, 14, 2, 14); + this.top2.setRotationPoint(0F, 24F, 0F); + this.top2.setTextureSize(256, 256); + this.top2.mirror = true; + this.setRotation(this.top2, 0F, 0F, 0F); + this.top3 = new ModelRenderer(this, 208, 94); + this.top3.addBox(-6F, -52F, -6F, 12, 2, 12); + this.top3.setRotationPoint(0F, 24F, 0F); + this.top3.setTextureSize(256, 256); + this.top3.mirror = true; + this.setRotation(this.top3, 0F, 0F, 0F); + this.top4 = new ModelRenderer(this, 216, 108); + this.top4.addBox(-5F, -54F, -5F, 10, 2, 10); + this.top4.setRotationPoint(0F, 24F, 0F); + this.top4.setTextureSize(256, 256); + this.top4.mirror = true; + this.setRotation(this.top4, 0F, 0F, 0F); + this.top5 = new ModelRenderer(this, 224, 120); + this.top5.addBox(-4F, -56F, -4F, 8, 2, 8); + this.top5.setRotationPoint(0F, 24F, 0F); + this.top5.setTextureSize(256, 256); + this.top5.mirror = true; + this.setRotation(this.top5, 0F, 0F, 0F); + this.top6 = new ModelRenderer(this, 232, 130); + this.top6.addBox(-3F, -58F, -3F, 6, 2, 6); + this.top6.setRotationPoint(0F, 24F, 0F); + this.top6.setTextureSize(256, 256); + this.top6.mirror = true; + this.setRotation(this.top6, 0F, 0F, 0F); + this.top7 = new ModelRenderer(this, 240, 138); + this.top7.addBox(-2F, -60F, -2F, 4, 2, 4); + this.top7.setRotationPoint(0F, 24F, 0F); + this.top7.setTextureSize(256, 256); + this.top7.mirror = true; + this.setRotation(this.top7, 0F, 0F, 0F); + this.insideBottom = new ModelRenderer(this, 85, 18); + this.insideBottom.addBox(-3.9F, -22F, -8.9F, 8, 17, 1); + this.insideBottom.setRotationPoint(0F, 24F, 0F); + this.insideBottom.setTextureSize(256, 256); + this.insideBottom.mirror = true; + this.setRotation(this.insideBottom, 0F, 0F, 0F); + this.insideLeft = new ModelRenderer(this, 103, 0); + this.insideLeft.addBox(3.9F, -46F, -8.9F, 5, 41, 1); + this.insideLeft.setRotationPoint(0F, 24F, 0F); + this.insideLeft.setTextureSize(256, 256); + this.insideLeft.mirror = true; + this.setRotation(this.insideLeft, 0F, 0F, 0F); + this.insidetop = new ModelRenderer(this, 85, 0); + this.insidetop.addBox(-3.9F, -46F, -8.9F, 8, 17, 1); + this.insidetop.setRotationPoint(0F, 24F, 0F); + this.insidetop.setTextureSize(256, 256); + this.insidetop.mirror = true; + this.setRotation(this.insidetop, 0F, 0F, 0F); + this.rocketBase3 = new ModelRenderer(this, 0, 28); + this.rocketBase3.addBox(-5F, -4F, -5F, 10, 2, 10); + this.rocketBase3.setRotationPoint(0F, 24F, 0F); + this.rocketBase3.setTextureSize(256, 256); + this.rocketBase3.mirror = true; + this.setRotation(this.rocketBase3, 0F, 0F, 0F); + this.insideRight = new ModelRenderer(this, 103, 42); + this.insideRight.addBox(-8.9F, -46F, -8.9F, 5, 41, 1); + this.insideRight.setRotationPoint(0F, 24F, 0F); + this.insideRight.setTextureSize(256, 256); + this.insideRight.mirror = true; + this.setRotation(this.insideRight, 0F, 0F, 0F); + this.insideSideLeft = new ModelRenderer(this, 119, 57); + this.insideSideLeft.addBox(8.1F, -46F, -7.9F, 1, 41, 17); + this.insideSideLeft.setRotationPoint(0F, 24F, 0F); + this.insideSideLeft.setTextureSize(256, 256); + this.insideSideLeft.mirror = true; + this.setRotation(this.insideSideLeft, 0F, 0F, 0F); + this.insideSideRight = new ModelRenderer(this, 120, 0); + this.insideSideRight.addBox(-8.9F, -46F, -7.9F, 1, 41, 16); + this.insideSideRight.setRotationPoint(0F, 24F, 0F); + this.insideSideRight.setTextureSize(256, 256); + this.insideSideRight.mirror = true; + this.setRotation(this.insideSideRight, 0F, 0F, 0F); + this.insideSideBack = new ModelRenderer(this, 120, 114); + this.insideSideBack.addBox(-8.9F, -46F, 8.1F, 17, 41, 1); + this.insideSideBack.setRotationPoint(0F, 24F, 0F); + this.insideSideBack.setTextureSize(256, 256); + this.insideSideBack.mirror = true; + this.setRotation(this.insideSideBack, 0F, 0F, 0F); + this.insideFloor = new ModelRenderer(this, 0, 40); + this.insideFloor.addBox(-9F, -4F, -9F, 18, 1, 18); + this.insideFloor.setRotationPoint(0F, 23F, 0F); + this.insideFloor.setTextureSize(256, 256); + this.insideFloor.mirror = true; + this.setRotation(this.insideFloor, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.insideRoof.render(f5); + this.rocketBase1.render(f5); + this.rocketBase2.render(f5); + this.tip.render(f5); + this.wing4d.render(f5); + this.wing4c.render(f5); + this.wing4e.render(f5); + this.wing4b.render(f5); + this.wing4a.render(f5); + this.wing1a.render(f5); + this.wing1b.render(f5); + this.wing1c.render(f5); + this.wing1e.render(f5); + this.wing1d.render(f5); + this.wing2e.render(f5); + this.wing2d.render(f5); + this.wing2c.render(f5); + this.wing2b.render(f5); + this.wing2a.render(f5); + this.wing3e.render(f5); + this.wing3d.render(f5); + this.wing3c.render(f5); + this.wing3b.render(f5); + this.wing3a.render(f5); + this.top1.render(f5); + this.top2.render(f5); + this.top3.render(f5); + this.top4.render(f5); + this.top5.render(f5); + this.top6.render(f5); + this.top7.render(f5); + this.insideBottom.render(f5); + this.insideLeft.render(f5); + this.insidetop.render(f5); + this.rocketBase3.render(f5); + this.insideRight.render(f5); + this.insideSideLeft.render(f5); + this.insideSideRight.render(f5); + this.insideSideBack.render(f5); + this.insideFloor.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/OBJLoaderGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/OBJLoaderGC.java new file mode 100644 index 00000000..5d53c8a9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/OBJLoaderGC.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import com.google.common.collect.ImmutableMap; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.IReloadableResourceManager; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ICustomModelLoader; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.client.model.obj.OBJModel; + +/* + * Loader for OBJ models. + * To enable your mod call instance.addDomain(modid). + * If you need more control over accepted resources - extend the class, and register a new instance with ModelLoaderRegistry. + */ +public class OBJLoaderGC implements ICustomModelLoader +{ + + public static final OBJLoaderGC instance = new OBJLoaderGC(); + private IResourceManager manager; + private final Set enabledDomains = new HashSet<>(); + private final Map cache = new HashMap<>(); + + static + { + ((IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager()).registerReloadListener(instance); + } + + public void addDomain(String domain) + { + enabledDomains.add(domain.toLowerCase()); + } + + @Override + public void onResourceManagerReload(IResourceManager resourceManager) + { + this.manager = resourceManager; + cache.clear(); + } + + @Override + public boolean accepts(ResourceLocation modelLocation) + { + return enabledDomains.contains(modelLocation.getNamespace()) && modelLocation.getPath().endsWith(".obj"); + } + + @Override + public IModel loadModel(ResourceLocation modelLocation) throws IOException + { + IModel model = null; + if (cache.containsKey(modelLocation)) + { + model = cache.get(modelLocation); + } else + { + try + { + String prefix = modelLocation.getPath().contains("models/") ? "" : "models/"; + ResourceLocation file = new ResourceLocation(modelLocation.getNamespace(), prefix + modelLocation.getPath()); + IResource resource = manager.getResource(file); + if (resource != null) + { + OBJModel.Parser parser = new OBJModel.Parser(resource, manager); + try + { + model = parser.parse().process(ImmutableMap.of("flip-v", "true")); + } finally + { + resource.getInputStream().close(); + cache.put(modelLocation, model); + } + } + } catch (IOException e) + { + throw e; + } + } + if (model == null) + return ModelLoaderRegistry.getMissingModel(); + return model; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelGrating.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelGrating.java new file mode 100644 index 00000000..b95eda57 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelGrating.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.block.model.ModelManager; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.common.property.IExtendedBlockState; + +public class ModelGrating implements IBakedModel +{ + + private final IBakedModel gratingMetal; + + public ModelGrating(ModelResourceLocation blockLoc, ModelManager modelManager) + { + this.gratingMetal = modelManager.getModel(blockLoc); + } + + @Override + public List getQuads(IBlockState state, EnumFacing side, long rand) + { + if (side == EnumFacing.DOWN && state.getBlock() instanceof BlockGrating) + { + IBlockState baseState = ((IExtendedBlockState) state).getValue(BlockGrating.BASE_STATE); + if (baseState != null) + { + IBlockAccess blockAccess = BlockGrating.savedBlockAccess; + BlockPos pos = BlockGrating.savedPos; + BufferBuilder buffer = TransformerHooks.renderBuilder.get(); + if (buffer != null) + { + if (baseState.getBlock().canRenderInLayer(baseState, MinecraftForgeClient.getRenderLayer())) + try + { + Minecraft.getMinecraft().getBlockRendererDispatcher().renderBlock(baseState, pos, blockAccess, buffer); + } catch (Exception ignore) + { + ignore.printStackTrace(); + } + } + } + } + if (MinecraftForgeClient.getRenderLayer() == BlockRenderLayer.CUTOUT) + { + return this.gratingMetal.getQuads(state, side, rand); + } + + return ImmutableList.of(); + } + + @Override + public boolean isAmbientOcclusion() + { + return true; + } + + @Override + public boolean isGui3d() + { + return true; + } + + @Override + public boolean isBuiltInRenderer() + { + return false; + } + + @Override + public TextureAtlasSprite getParticleTexture() + { + return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(Constants.ASSET_PREFIX + ":blocks/screen_side"); + } + + @Override + public ItemCameraTransforms getItemCameraTransforms() + { + return ItemCameraTransforms.DEFAULT; + } + + @Override + public ItemOverrideList getOverrides() + { + return ItemOverrideList.NONE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelNasaWorkbench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelNasaWorkbench.java new file mode 100644 index 00000000..daa9fb2d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelNasaWorkbench.java @@ -0,0 +1,324 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelNasaWorkbench extends ModelBase +{ + + ModelRenderer base1a; + ModelRenderer baseAux1; + ModelRenderer base1b; + ModelRenderer base2a; + ModelRenderer base2b; + ModelRenderer baseAux3; + ModelRenderer baseAux2; + ModelRenderer clawL1; + ModelRenderer clawL2; + ModelRenderer clawR1; + ModelRenderer clawR2; + ModelRenderer clawRPR; + ModelRenderer clawRPL; + ModelRenderer armB1; + ModelRenderer manipulatorRotationPointB; + ModelRenderer baseRotationPointB; + ModelRenderer armRotationPointB; + ModelRenderer armB2; + ModelRenderer armR1; + ModelRenderer armR2; + ModelRenderer baseRotationPointR; + ModelRenderer armRotationPointR; + ModelRenderer weldHead; + ModelRenderer weldBit; + ModelRenderer screenRotationPointF; + ModelRenderer armF1; + ModelRenderer baseRotationPointF; + ModelRenderer screen; + ModelRenderer armRotationPointL; + ModelRenderer armL2; + ModelRenderer baseRotationPointL; + ModelRenderer armL1; + ModelRenderer sensorDish; + ModelRenderer sensor; + + public ModelNasaWorkbench() + { + this(0.0F); + } + + public ModelNasaWorkbench(float var1) + { + this.textureWidth = 256; + this.textureHeight = 128; + +// this.base1a = new ModelRenderer(this, 113, 24); +// this.base1a.addBox(-2.5F, -2F, -7.5F, 5, 2, 15); +// this.base1a.setRotationPoint(0F, 24F, 0F); +// this.base1a.setTextureSize(256, 128); +// this.base1a.mirror = true; +// this.setRotation(this.base1a, 0F, halfPI, 0F); +// this.baseAux1 = new ModelRenderer(this, 35, 40); +// this.baseAux1.addBox(-3.5F, 0F, -3.5F, 7, 1, 7); +// this.baseAux1.setRotationPoint(0F, 20F, 0F); +// this.baseAux1.setTextureSize(256, 128); +// this.baseAux1.mirror = true; +// this.setRotation(this.baseAux1, 0F, 0.7853982F, 0F); +// this.base1b = new ModelRenderer(this, 113, 24); +// this.base1b.addBox(-2.5F, -2F, -7.5F, 5, 2, 15); +// this.base1b.setRotationPoint(0F, 24F, 0F); +// this.base1b.setTextureSize(256, 128); +// this.base1b.mirror = true; +// this.setRotation(this.base1b, 0F, 0F, 0F); +// this.base2a = new ModelRenderer(this, 65, 0); +// this.base2a.addBox(-3.5F, -2F, -7F, 7, 5, 14); +// this.base2a.setRotationPoint(0F, 23F, 0F); +// this.base2a.setTextureSize(256, 128); +// this.base2a.mirror = true; +// this.setRotation(this.base2a, 0F, -0.7853982F, 0F); +// this.base2b = new ModelRenderer(this, 65, 0); +// this.base2b.addBox(-3.5F, -2F, -7F, 7, 3, 14); +// this.base2b.setRotationPoint(0F, 23F, 0F); +// this.base2b.setTextureSize(256, 128); +// this.base2b.mirror = true; +// this.setRotation(this.base2b, 0F, 0.7853982F, 0F); +// this.baseAux3 = new ModelRenderer(this, 50, 62); +// this.baseAux3.addBox(-8.5F, 0F, -0.5F, 17, 4, 1); +// this.baseAux3.setRotationPoint(0F, 20.5F, 0F); +// this.baseAux3.setTextureSize(256, 128); +// this.baseAux3.mirror = true; +// this.setRotation(this.baseAux3, 0F, -0.7853982F, 0F); +// this.baseAux2 = new ModelRenderer(this, 50, 62); +// this.baseAux2.addBox(-8.5F, 0F, -0.5F, 17, 4, 1); +// this.baseAux2.setRotationPoint(0F, 20.5F, 0F); +// this.baseAux2.setTextureSize(256, 128); +// this.baseAux2.mirror = true; +// this.setRotation(this.baseAux2, 0F, 0.7853982F, 0F); +// this.clawL1 = new ModelRenderer(this, 7, 57); +// this.clawL1.addBox(-0.5F, -1F, -3F, 1, 2, 3); +// this.clawL1.setRotationPoint(-1F, -0.2F, 4F); +// this.clawL1.setTextureSize(256, 128); +// this.clawL1.mirror = true; +// this.setRotation(this.clawL1, 0F, 1.003826F, 0F); +// this.clawL2 = new ModelRenderer(this, 7, 57); +// this.clawL2.addBox(-2.7F, -1F, -5F, 1, 2, 3); +// this.clawL2.setRotationPoint(-1F, -0.2F, 4F); +// this.clawL2.setTextureSize(256, 128); +// this.clawL2.mirror = true; +// this.setRotation(this.clawL2, 0F, 0.1698892F, 0F); +// this.clawR1 = new ModelRenderer(this, 7, 57); +// this.clawR1.addBox(-0.5F, -1F, -3F, 1, 2, 3); +// this.clawR1.setRotationPoint(1F, -0.2F, 4F); +// this.clawR1.setTextureSize(256, 128); +// this.clawR1.mirror = true; +// this.setRotation(this.clawR1, 0F, -1.041005F, 0F); +// this.clawR2 = new ModelRenderer(this, 7, 57); +// this.clawR2.addBox(1.7F, -1F, -5F, 1, 2, 3); +// this.clawR2.setRotationPoint(1F, -0.2F, 4F); +// this.clawR2.setTextureSize(256, 128); +// this.clawR2.mirror = true; +// this.setRotation(this.clawR2, 0F, -0.1896157F, 0F); +// this.clawRPR = new ModelRenderer(this, 0, 45); +// this.clawRPR.addBox(-2.2F, -1.5F, -3F, 1, 3, 1); +// this.clawRPR.setRotationPoint(1F, -0.2F, 4F); +// this.clawRPR.setTextureSize(256, 128); +// this.clawRPR.mirror = true; +// this.setRotation(this.clawRPR, 0F, -1.63514F, 0F); +// this.clawRPL = new ModelRenderer(this, 0, 45); +// this.clawRPL.addBox(-2.2F, -1.5F, -3F, 1, 3, 1); +// this.clawRPL.setRotationPoint(-1F, -0.2F, 4F); +// this.clawRPL.setTextureSize(256, 128); +// this.clawRPL.mirror = true; +// this.setRotation(this.clawRPL, 0F, 0.4096913F, 0F); +// this.armB1 = new ModelRenderer(this, 46, 0); +// this.armB1.addBox(-1F, -12F, -1F, 2, 12, 2); +// this.armB1.setRotationPoint(0F, 22F, 8F); +// this.armB1.setTextureSize(256, 128); +// this.armB1.mirror = true; +// this.setRotation(this.armB1, -0.3005282F, 0F, 0F); +// this.manipulatorRotationPointB = new ModelRenderer(this, 0, 69); +// this.manipulatorRotationPointB.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.manipulatorRotationPointB.setRotationPoint(0F, 0F, 4.5F); +// this.manipulatorRotationPointB.setTextureSize(256, 128); +// this.manipulatorRotationPointB.mirror = true; +// this.setRotation(this.manipulatorRotationPointB, 0F, halfPI, 0F); +// this.baseRotationPointB = new ModelRenderer(this, 0, 69); +// this.baseRotationPointB.addBox(-1.5F, -1.2F, -1.5F, 3, 3, 3); +// this.baseRotationPointB.setRotationPoint(0F, 22F, 7.5F); +// this.baseRotationPointB.setTextureSize(256, 128); +// this.baseRotationPointB.mirror = true; +// this.setRotation(this.baseRotationPointB, this.toRadians(0), this.toRadians(90), this.toRadians(15)); +// this.armRotationPointB = new ModelRenderer(this, 0, 69); +// this.armRotationPointB.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.armRotationPointB.setRotationPoint(0F, 10F, 11.5F); +// this.armRotationPointB.setTextureSize(256, 128); +// this.armRotationPointB.mirror = true; +// this.setRotation(this.armRotationPointB, this.toRadians(90), this.toRadians(0), this.toRadians(-90)); +// this.armB2 = new ModelRenderer(this, 46, 0); +// this.armB2.addBox(-1F, -12F, -1F, 2, 12, 2); +// this.armB2.setRotationPoint(0F, 9F, 11F); +// this.armB2.setTextureSize(256, 128); +// this.armB2.mirror = true; +// this.setRotation(this.armB2, 0.6289468F, 0F, 0F); +// this.armR1 = new ModelRenderer(this, 46, 0); +// this.armR1.addBox(-1F, -12F, -1F, 2, 12, 2); +// this.armR1.setRotationPoint(-8F, 22F, 0F); +// this.armR1.setTextureSize(256, 128); +// this.armR1.mirror = true; +// this.setRotation(this.armR1, 0.6351428F, halfPI, 0F); +// this.armR2 = new ModelRenderer(this, 55, 0); +// this.armR2.addBox(-1F, -8F, -1F, 2, 8, 2); +// this.armR2.setRotationPoint(-15F, 11F, 0F); +// this.armR2.setTextureSize(256, 128); +// this.armR2.mirror = true; +// this.setRotation(this.armR2, -0.9635439F, halfPI, 0F); +// this.baseRotationPointR = new ModelRenderer(this, 0, 69); +// this.baseRotationPointR.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.baseRotationPointR.setRotationPoint(-7.9F, 22F, 0F); +// this.baseRotationPointR.setTextureSize(256, 128); +// this.baseRotationPointR.mirror = true; +// this.setRotation(this.baseRotationPointR, 0F, 0F, 0.5235988F); +// this.armRotationPointR = new ModelRenderer(this, 0, 69); +// this.armRotationPointR.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.armRotationPointR.setRotationPoint(-15.76667F, 11.5F, 0F); +// this.armRotationPointR.setTextureSize(256, 128); +// this.armRotationPointR.mirror = true; +// this.setRotation(this.armRotationPointR, 0F, 0F, -0.1745329F); +// this.weldHead = new ModelRenderer(this, 17, 0); +// this.weldHead.addBox(-2F, -1.5F, -1.5F, 5, 3, 3); +// this.weldHead.setRotationPoint(-9F, 6F, 0F); +// this.weldHead.setTextureSize(256, 128); +// this.weldHead.mirror = true; +// this.setRotation(this.weldHead, 0F, 0F, 0.5948578F); +// this.weldBit = new ModelRenderer(this, 0, 0); +// this.weldBit.addBox(0F, -0.5F, -0.5F, 7, 1, 1); +// this.weldBit.setRotationPoint(-9F, 6F, 0F); +// this.weldBit.setTextureSize(256, 128); +// this.weldBit.mirror = true; +// this.setRotation(this.weldBit, 0F, 0F, 0.5948606F); +// this.screenRotationPointF = new ModelRenderer(this, 0, 77); +// this.screenRotationPointF.addBox(-1.5F, -1.5F, -1.5F, 3, 2, 3); +// this.screenRotationPointF.setRotationPoint(0F, 14F, -9F); +// this.screenRotationPointF.setTextureSize(256, 128); +// this.screenRotationPointF.mirror = true; +// this.setRotation(this.screenRotationPointF, this.toRadians(30), this.toRadians(0), this.toRadians(0)); +// this.armF1 = new ModelRenderer(this, 55, 0); +// this.armF1.addBox(-1F, -8F, -1F, 2, 8, 2); +// this.armF1.setRotationPoint(0F, 21F, -7.5F); +// this.armF1.setTextureSize(256, 128); +// this.armF1.mirror = true; +// this.setRotation(this.armF1, 0.2602503F, 0F, 0F); +// this.baseRotationPointF = new ModelRenderer(this, 0, 69); +// this.baseRotationPointF.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.baseRotationPointF.setRotationPoint(0F, 21.6F, -6.8F); +// this.baseRotationPointF.setTextureSize(256, 128); +// this.baseRotationPointF.mirror = true; +// this.setRotation(this.baseRotationPointF, this.toRadians(30F), this.toRadians(0), this.toRadians(0)); +// this.screen = new ModelRenderer(this, 10, 45); +// this.screen.addBox(-3.5F, -2.5F, -1F, 7, 5, 1); +// this.screen.setRotationPoint(0F, 13F, -10F); +// this.screen.setTextureSize(256, 128); +// this.screen.mirror = true; +// this.setRotation(this.screen, -1.047198F, 0F, 0F); +// this.armRotationPointL = new ModelRenderer(this, 0, 69); +// this.armRotationPointL.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.armRotationPointL.setRotationPoint(13.8F, 18.4F, 0F); +// this.armRotationPointL.setTextureSize(256, 128); +// this.armRotationPointL.mirror = true; +// this.setRotation(this.armRotationPointL, 0F, -3.141593F, 0.5235988F); +// this.armL2 = new ModelRenderer(this, 55, 0); +// this.armL2.addBox(-1F, -8F, -1F, 2, 8, 2); +// this.armL2.setRotationPoint(13.7F, 18F, 0F); +// this.armL2.setTextureSize(256, 128); +// this.armL2.mirror = true; +// this.setRotation(this.armL2, 0.6351428F, halfPI, 0F); +// this.baseRotationPointL = new ModelRenderer(this, 0, 69); +// this.baseRotationPointL.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.baseRotationPointL.setRotationPoint(7.5F, 22F, 0F); +// this.baseRotationPointL.setTextureSize(256, 128); +// this.baseRotationPointL.mirror = true; +// this.setRotation(this.baseRotationPointL, 0F, -3.141593F, 0.5235988F); +// this.armL1 = new ModelRenderer(this, 55, 0); +// this.armL1.addBox(-1F, -8F, -1F, 2, 8, 2); +// this.armL1.setRotationPoint(8F, 22F, 0F); +// this.armL1.setTextureSize(256, 128); +// this.armL1.mirror = true; +// this.setRotation(this.armL1, -1.037895F, halfPI, 0F); +// this.sensorDish = new ModelRenderer(this, 68, 41); +// this.sensorDish.addBox(-1F, -2F, -2F, 1, 4, 4); +// this.sensorDish.setRotationPoint(6F, 12F, 0F); +// this.sensorDish.setTextureSize(256, 128); +// this.sensorDish.mirror = true; +// this.setRotation(this.sensorDish, 0F, 0F, -0.3005282F); +// this.sensor = new ModelRenderer(this, 60, 54); +// this.sensor.addBox(-3F, -2F, -1F, 5, 2, 2); +// this.sensor.setRotationPoint(9F, 12F, 0F); +// this.sensor.setTextureSize(256, 128); +// this.sensor.mirror = true; +// this.setRotation(this.sensor, 0F, 0F, -0.3005353F); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void renderAll() + { + this.base1a.render(0.0625F); + this.baseAux1.render(0.0625F); + this.base1b.render(0.0625F); + this.base2a.render(0.0625F); + this.base2b.render(0.0625F); + this.baseAux3.render(0.0625F); + this.baseAux2.render(0.0625F); + this.clawL1.render(0.0625F); + this.clawL2.render(0.0625F); + this.clawR1.render(0.0625F); + this.clawR2.render(0.0625F); + this.clawRPR.render(0.0625F); + this.clawRPL.render(0.0625F); + this.armB1.render(0.0625F); + this.manipulatorRotationPointB.render(0.0625F); + this.baseRotationPointB.render(0.0625F); + this.armRotationPointB.render(0.0625F); + this.armB2.render(0.0625F); +// this.armR1.render(0.0625F); + this.armR2.render(0.0625F); + this.baseRotationPointR.render(0.0625F); + this.armRotationPointR.render(0.0625F); + this.weldHead.render(0.0625F); + this.weldBit.render(0.0625F); + this.screenRotationPointF.render(0.0625F); + this.armF1.render(0.0625F); + this.baseRotationPointF.render(0.0625F); + this.screen.render(0.0625F); + this.armRotationPointL.render(0.0625F); + this.armL2.render(0.0625F); + this.baseRotationPointL.render(0.0625F); + this.armL1.render(0.0625F); + this.sensorDish.render(0.0625F); + this.sensor.render(0.0625F); + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity e) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5, e); + } + + private float toRadians(float f) + { + return f / Constants.RADIANS_TO_DEGREES; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelPanelLightBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelPanelLightBase.java new file mode 100644 index 00000000..f7814a99 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelPanelLightBase.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.common.property.IExtendedBlockState; + +public class ModelPanelLightBase implements IBakedModel +{ + + private final ModelResourceLocation callingBlock; + + public ModelPanelLightBase(ModelResourceLocation blockLoc) + { + this.callingBlock = blockLoc; + } + + @Override + public List getQuads(IBlockState state, EnumFacing side, long rand) + { + if (state.getBlock() instanceof BlockPanelLighting) + { + IBlockState baseState = ((IExtendedBlockState) state).getValue(BlockPanelLighting.BASE_STATE); + BlockRenderLayer layer = MinecraftForgeClient.getRenderLayer(); + if (baseState == null) + { + if (layer == null || layer == BlockRenderLayer.SOLID) + { + return Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelManager().getModel(this.callingBlock).getQuads(state, side, rand); + } + } else if (layer == null || baseState.getBlock().canRenderInLayer(baseState, layer)) + { + return Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState(baseState).getQuads(baseState, side, rand); + } + } + return ImmutableList.of(); + } + + @Override + public boolean isAmbientOcclusion() + { + return true; + } + + @Override + public boolean isGui3d() + { + return true; + } + + @Override + public boolean isBuiltInRenderer() + { + return false; + } + + @Override + public TextureAtlasSprite getParticleTexture() + { + return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("minecraft:blocks/glass"); + } + + @Override + public ItemCameraTransforms getItemCameraTransforms() + { + return ItemCameraTransforms.DEFAULT; + } + + @Override + public ItemOverrideList getOverrides() + { + return ItemOverrideList.NONE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelParaChestTile.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelParaChestTile.java new file mode 100644 index 00000000..0b8e9cdc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelParaChestTile.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.model.ModelRenderer; + +public class ModelParaChestTile extends ModelChest +{ + + public ModelRenderer keyParts[] = new ModelRenderer[3]; + + public ModelParaChestTile() + { + super(); + this.keyParts[0] = new ModelRenderer(this, 60, 61); + this.keyParts[0].setTextureSize(64, 64); + this.keyParts[0].addBox(-1.0F, -6.0F, 0.0F, 1, 1, 1); + this.keyParts[0].setRotationPoint(0F, 0F, 0F); + this.keyParts[0].mirror = true; + this.keyParts[0].rotationPointX = 7.0F; + this.keyParts[0].rotationPointY = 7.0F; + this.keyParts[0].rotationPointZ = 7.5F; + this.keyParts[1] = new ModelRenderer(this, 53, 57); + this.keyParts[1].setTextureSize(64, 64); + this.keyParts[1].addBox(-1.0F, -6.0F, 0.0F, 4, 1, 1); + this.keyParts[1].setRotationPoint(0F, 0F, 0F); + this.keyParts[1].mirror = true; + this.keyParts[1].rotationPointX = 7.0F; + this.keyParts[1].rotationPointY = 6.0F; + this.keyParts[1].rotationPointZ = 7.5F; + this.keyParts[2] = new ModelRenderer(this, 60, 61); + this.keyParts[2].setTextureSize(64, 64); + this.keyParts[2].addBox(-1.0F, -6.0F, 0.0F, 1, 1, 1); + this.keyParts[2].setRotationPoint(0F, 0F, 0F); + this.keyParts[2].mirror = true; + this.keyParts[2].rotationPointX = 10.0F; + this.keyParts[2].rotationPointY = 7.0F; + this.keyParts[2].rotationPointZ = 7.5F; + } + + public void renderAll(boolean lidUp) + { + if (lidUp) + { + for (ModelRenderer m : this.keyParts) + { + m.render(0.0625F); + } + } + + super.renderAll(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelSolarPanel.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelSolarPanel.java new file mode 100644 index 00000000..7d3e85b4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelSolarPanel.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelSolarPanel extends ModelBase +{ + + ModelRenderer panelMain; + ModelRenderer sideHorizontal0; + ModelRenderer sideVertical0; + ModelRenderer sideVertical2; + ModelRenderer sideVertical1; + ModelRenderer sideHorizontal1; + ModelRenderer sideHorizontal3; + ModelRenderer sideHorizontal2; + ModelRenderer pole; + + public ModelSolarPanel() + { + this(0.0F); + } + + public ModelSolarPanel(float var1) + { + this.textureWidth = 256; + this.textureHeight = 128; + this.panelMain = new ModelRenderer(this, 0, 0); + this.panelMain.addBox(-23F, -0.5F, -23F, 46, 1, 46); + this.panelMain.setRotationPoint(0F, 0F, 0F); + this.panelMain.setTextureSize(256, 128); + this.panelMain.mirror = true; + this.setRotation(this.panelMain, 0F, 0F, 0F); + this.sideHorizontal0 = new ModelRenderer(this, 0, 48); + this.sideHorizontal0.addBox(-24F, -1.111F, -23F, 1, 1, 46); + this.sideHorizontal0.setRotationPoint(0F, 0F, 0F); + this.sideHorizontal0.setTextureSize(256, 128); + this.sideHorizontal0.mirror = true; + this.setRotation(this.sideHorizontal0, 0F, 0F, 0F); + this.sideVertical0 = new ModelRenderer(this, 94, 48); + this.sideVertical0.addBox(-24F, -1.1F, 23F, 48, 1, 1); + this.sideVertical0.setRotationPoint(0F, 0F, 0F); + this.sideVertical0.setTextureSize(256, 128); + this.sideVertical0.mirror = true; + this.setRotation(this.sideVertical0, 0F, 0F, 0F); + this.sideVertical2 = new ModelRenderer(this, 94, 48); + this.sideVertical2.addBox(-24F, -1.1F, -24F, 48, 1, 1); + this.sideVertical2.setRotationPoint(0F, 0F, 0F); + this.sideVertical2.setTextureSize(256, 128); + this.sideVertical2.mirror = true; + this.setRotation(this.sideVertical2, 0F, 0F, 0F); + this.sideVertical1 = new ModelRenderer(this, 94, 48); + this.sideVertical1.addBox(-24F, -1.1F, -0.5F, 48, 1, 1); + this.sideVertical1.setRotationPoint(0F, 0F, 0F); + this.sideVertical1.setTextureSize(256, 128); + this.sideVertical1.mirror = true; + this.setRotation(this.sideVertical1, 0F, 0F, 0F); + this.sideHorizontal1 = new ModelRenderer(this, 0, 48); + this.sideHorizontal1.addBox(-9F, -1.111F, -23F, 1, 1, 46); + this.sideHorizontal1.setRotationPoint(0F, 0F, 0F); + this.sideHorizontal1.setTextureSize(256, 128); + this.sideHorizontal1.mirror = true; + this.setRotation(this.sideHorizontal1, 0F, 0F, 0F); + this.sideHorizontal3 = new ModelRenderer(this, 0, 48); + this.sideHorizontal3.addBox(23F, -1.111F, -23F, 1, 1, 46); + this.sideHorizontal3.setRotationPoint(0F, 0F, 0F); + this.sideHorizontal3.setTextureSize(256, 128); + this.sideHorizontal3.mirror = true; + this.setRotation(this.sideHorizontal3, 0F, 0F, 0F); + this.sideHorizontal2 = new ModelRenderer(this, 0, 48); + this.sideHorizontal2.addBox(8F, -1.111F, -23F, 1, 1, 46); + this.sideHorizontal2.setRotationPoint(0F, 0F, 0F); + this.sideHorizontal2.setTextureSize(256, 128); + this.sideHorizontal2.mirror = true; + this.setRotation(this.sideHorizontal2, 0F, 0F, 0F); + this.pole = new ModelRenderer(this, 94, 50); + this.pole.addBox(-1.5F, 0.0F, -1.5F, 3, 24, 3); + this.pole.setRotationPoint(0F, 0F, 0F); + this.pole.setTextureSize(256, 128); + this.pole.mirror = true; + this.setRotation(this.pole, 0F, 0F, 0F); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void renderPanel() + { + this.panelMain.render(0.0625F); + this.sideHorizontal0.render(0.0625F); + this.sideVertical0.render(0.0625F); + this.sideVertical2.render(0.0625F); + this.sideVertical1.render(0.0625F); + this.sideHorizontal1.render(0.0625F); + this.sideHorizontal3.render(0.0625F); + this.sideHorizontal2.render(0.0625F); + } + + public void renderPole() + { + this.pole.render(0.0625F); + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity e) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5, e); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChest.java new file mode 100644 index 00000000..91b7b7a6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChest.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.model.ModelRenderer; + +public class ModelTreasureChest extends ModelChest +{ + + public ModelRenderer keyParts[] = new ModelRenderer[6]; + + public ModelTreasureChest() + { + super(); + this.textureWidth = 64; + this.textureHeight = 64; + this.keyParts[4] = new ModelRenderer(this, 50, 43); + this.keyParts[4].addBox(7F, 2F, -0.5F, 3, 1, 1); + this.keyParts[4].setRotationPoint(0F, 0F, 0F); + this.keyParts[4].setTextureSize(64, 64); + this.keyParts[4].mirror = true; + this.keyParts[3] = new ModelRenderer(this, 39, 43); + this.keyParts[3].addBox(6F, 1F, -0.5F, 4, 1, 1); + this.keyParts[3].setRotationPoint(0F, 0F, 0F); + this.keyParts[3].setTextureSize(64, 64); + this.keyParts[3].mirror = true; + this.keyParts[2] = new ModelRenderer(this, 14, 43); + this.keyParts[2].addBox(-0.5F, 0F, -0.5F, 11, 1, 1); + this.keyParts[2].setRotationPoint(0F, 0F, 0F); + this.keyParts[2].setTextureSize(64, 64); + this.keyParts[2].mirror = true; + this.keyParts[1] = new ModelRenderer(this, 9, 43); + this.keyParts[1].addBox(-1.5F, -0.5F, -0.5F, 1, 2, 1); + this.keyParts[1].setRotationPoint(0F, 0F, 0F); + this.keyParts[1].setTextureSize(64, 64); + this.keyParts[1].mirror = true; + this.keyParts[0] = new ModelRenderer(this, 0, 43); + this.keyParts[0].addBox(-4.5F, -1F, -0.5F, 3, 3, 1); + this.keyParts[0].setRotationPoint(0F, 0F, 0F); + this.keyParts[0].setTextureSize(64, 64); + this.keyParts[0].mirror = true; + this.keyParts[5] = new ModelRenderer(this, 0, 0).setTextureSize(64, 64); + this.keyParts[5].addBox(-2.0F, -2.05F, -15.1F, 4, 4, 1, 0.0F); + this.keyParts[5].rotationPointX = 8.0F; + this.keyParts[5].rotationPointY = 7.0F; + this.keyParts[5].rotationPointZ = 15.0F; + } + + public void renderAll(boolean withKey) + { + if (withKey) + { + for (final ModelRenderer nmtmr : this.keyParts) + { + if (!nmtmr.equals(this.keyParts[5])) + { + nmtmr.rotationPointX = 8.0F; + nmtmr.rotationPointY = 7.0F; + nmtmr.rotationPointZ = -2.0F; + nmtmr.rotateAngleY = 3 * Constants.halfPI; + nmtmr.rotateAngleX = -this.chestLid.rotateAngleX; + nmtmr.render(0.0625F); + } + } + } + + this.keyParts[5].rotationPointX = 8.0F; + this.keyParts[5].rotationPointY = 7.0F; + this.keyParts[5].rotationPointZ = 15.0F; + this.keyParts[5].rotateAngleX = 0; + this.keyParts[5].rotateAngleY = 0; + this.keyParts[5].render(0.0625F); + + super.renderAll(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChestLarge.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChestLarge.java new file mode 100644 index 00000000..90c23475 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChestLarge.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelLargeChest; +import net.minecraft.client.model.ModelRenderer; + +public class ModelTreasureChestLarge extends ModelLargeChest +{ + + public ModelRenderer keyParts[] = new ModelRenderer[6]; + + public ModelTreasureChestLarge() + { + super(); + this.textureWidth = 128; + this.textureHeight = 64; + this.keyParts[4] = new ModelRenderer(this, 50, 43); + this.keyParts[4].addBox(7F, 2F, -0.5F, 3, 1, 1); + this.keyParts[4].setRotationPoint(0F, 0F, 0F); + this.keyParts[4].setTextureSize(128, 64); + this.keyParts[4].mirror = true; + this.keyParts[3] = new ModelRenderer(this, 39, 43); + this.keyParts[3].addBox(6F, 1F, -0.5F, 4, 1, 1); + this.keyParts[3].setRotationPoint(0F, 0F, 0F); + this.keyParts[3].setTextureSize(128, 64); + this.keyParts[3].mirror = true; + this.keyParts[2] = new ModelRenderer(this, 14, 43); + this.keyParts[2].addBox(-0.5F, 0F, -0.5F, 11, 1, 1); + this.keyParts[2].setRotationPoint(0F, 0F, 0F); + this.keyParts[2].setTextureSize(128, 64); + this.keyParts[2].mirror = true; + this.keyParts[1] = new ModelRenderer(this, 9, 43); + this.keyParts[1].addBox(-1.5F, -0.5F, -0.5F, 1, 2, 1); + this.keyParts[1].setRotationPoint(0F, 0F, 0F); + this.keyParts[1].setTextureSize(128, 64); + this.keyParts[1].mirror = true; + this.keyParts[0] = new ModelRenderer(this, 0, 43); + this.keyParts[0].addBox(-4.5F, -1F, -0.5F, 3, 3, 1); + this.keyParts[0].setRotationPoint(0F, 0F, 0F); + this.keyParts[0].setTextureSize(128, 64); + this.keyParts[0].mirror = true; + this.keyParts[5] = new ModelRenderer(this, 0, 0).setTextureSize(128, 64); + this.keyParts[5].addBox(-2.0F, -2.05F, -15.1F, 4, 4, 1, 0.0F); + this.keyParts[5].rotationPointX = 8.0F; + this.keyParts[5].rotationPointY = 7.0F; + this.keyParts[5].rotationPointZ = 15.0F; + } + + public void renderAll(boolean withKey) + { + if (withKey) + { + for (final ModelRenderer nmtmr : this.keyParts) + { + if (!nmtmr.equals(this.keyParts[5])) + { + nmtmr.rotationPointX = 16.0F; + nmtmr.rotationPointY = 7.0F; + nmtmr.rotationPointZ = -2.0F; + nmtmr.rotateAngleY = 3 * Constants.halfPI; + nmtmr.rotateAngleX = -this.chestLid.rotateAngleX; + nmtmr.render(0.0625F); + } + } + } + + this.keyParts[5].rotationPointX = 16.0F; + this.keyParts[5].rotationPointY = 7.0F; + this.keyParts[5].rotationPointZ = 15.0F; + this.keyParts[5].rotateAngleX = 0; + this.keyParts[5].rotateAngleY = 0; + this.keyParts[5].render(0.0625F); + + super.renderAll(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/RenderPlanet.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/RenderPlanet.java new file mode 100644 index 00000000..2c9babec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/RenderPlanet.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class RenderPlanet +{ + + private static TextureManager renderEngine = FMLClientHandler.instance().getClient().renderEngine; + + private static ResourceLocation textureEuropa = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/europa.png"); + private static ResourceLocation textureGanymede = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/ganymede.png"); + private static ResourceLocation textureIo = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/io.png"); + private static ResourceLocation textureSaturn = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/saturn.png"); + private static ResourceLocation textureJupiterInner = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/jupiter_inner.png"); + private static ResourceLocation textureJupiterUpper = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/jupiter_upper.png"); + + public static void renderPlanet(int textureId, float scale, float ticks, float relSize) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureId); + float size = relSize / 70 * scale; + ticks = ((float) System.nanoTime()) / 50000000F; + RenderPlanet.drawTexturedRectUV(-size / 2, -size / 2, size, size, ticks); + } + + public static void renderPlanet(ResourceLocation texture, float scale, float ticks, float relSize) + { + RenderPlanet.renderEngine.bindTexture(texture); + float size = relSize / 70 * scale; + ticks = ((float) System.nanoTime()) / 50000000F; + RenderPlanet.drawTexturedRectUV(-size / 2, -size / 2, size, size, ticks); + } + + public static void renderID(int id, float scale, float ticks) + { + ResourceLocation texture; + switch (id) + { + case 0: + texture = textureEuropa; + break; + case 1: + texture = textureGanymede; + break; + case 2: + texture = textureIo; + break; + case 3: + texture = textureJupiterInner; + break; + case 4: + texture = textureSaturn; + break; + default: + texture = textureGanymede; + } + if (id == 3) // Jupiter + { + float relSize = 48F; + float size = relSize / 70 * scale; + RenderPlanet.renderEngine.bindTexture(texture); + RenderPlanet.drawTexturedRectUV(-size / 2, -size / 2, size, size, ticks); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef(0, 0, -0.001F); + RenderPlanet.renderEngine.bindTexture(textureJupiterUpper); + size *= 1.001F; + RenderPlanet.drawTexturedRectUV(-size / 2, -size / 2, size, size, ticks * 0.85F); + } else + { + RenderPlanet.renderPlanet(texture, scale, ticks, 8F); + } + } + + public static void drawTexturedRectUV(float x, float y, float width, float height, float ticks) + { + for (int ysect = 0; ysect < 6; ysect++) + { + float factor = 1F + MathHelper.cos((7.5F + 10F * ysect) / 62F); + drawTexturedRectUVSixth(x, y, width, height, (ticks / 1100F) % 1F - (1F - factor) * 0.15F, ysect / 6F, 0.16F * factor); + } + } + + public static void drawTexturedRectUVSixth(float x, float y, float width, float height, float prog, float y0, float span) + { + y0 /= 2; + if (prog < 0F) + { + prog += 1.0F; + } + prog = 1.0F - prog; + float y1 = y0 + 1 / 12F; + float y2 = 1F - y1; + float y3 = 1F - y0; + float yaa = y + height * y0; + float yab = y + height * y1; + float yba = y + height * y2; + float ybb = y + height * y3; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + if (prog <= 1F - span) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, yab, 0F).tex(prog, y1).endVertex(); + worldRenderer.pos(x + width, yab, 0F).tex(prog + span, y1).endVertex(); + worldRenderer.pos(x + width, yaa, 0F).tex(prog + span, y0).endVertex(); + worldRenderer.pos(x, yaa, 0F).tex(prog, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, ybb, 0F).tex(prog, y3).endVertex(); + worldRenderer.pos(x + width, ybb, 0F).tex(prog + span, y3).endVertex(); + worldRenderer.pos(x + width, yba, 0F).tex(prog + span, y2).endVertex(); + worldRenderer.pos(x, yba, 0F).tex(prog, y2).endVertex(); + tessellator.draw(); + } else + { + double xp = x + width * (1F - prog) / span; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, yab, 0F).tex(prog, y1).endVertex(); + worldRenderer.pos(xp, yab, 0F).tex(1.0F, y1).endVertex(); + worldRenderer.pos(xp, yaa, 0F).tex(1.0F, y0).endVertex(); + worldRenderer.pos(x, yaa, 0F).tex(prog, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, ybb, 0F).tex(prog, y3).endVertex(); + worldRenderer.pos(xp, ybb, 0F).tex(1.0F, y3).endVertex(); + worldRenderer.pos(xp, yba, 0F).tex(1.0F, y2).endVertex(); + worldRenderer.pos(x, yba, 0F).tex(prog, y2).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(xp, yab, 0F).tex(0F, y1).endVertex(); + worldRenderer.pos(x + width, yab, 0F).tex(prog - 1F + span, y1).endVertex(); + worldRenderer.pos(x + width, yaa, 0F).tex(prog - 1F + span, y0).endVertex(); + worldRenderer.pos(xp, yaa, 0F).tex(0F, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(xp, ybb, 0F).tex(0F, y3).endVertex(); + worldRenderer.pos(x + width, ybb, 0F).tex(prog - 1F + span, y3).endVertex(); + worldRenderer.pos(x + width, yba, 0F).tex(prog - 1F + span, y2).endVertex(); + worldRenderer.pos(xp, yba, 0F).tex(0F, y2).endVertex(); + tessellator.draw(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/ThreadDownloadImageDataGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/ThreadDownloadImageDataGC.java new file mode 100644 index 00000000..b3f56832 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/ThreadDownloadImageDataGC.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.concurrent.atomic.AtomicInteger; +import javax.imageio.ImageIO; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.client.renderer.IImageBuffer; +import net.minecraft.client.renderer.texture.SimpleTexture; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.FileUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ThreadDownloadImageDataGC extends SimpleTexture +{ + + private static final Logger logger = LogManager.getLogger(); + private static final AtomicInteger threadDownloadCounter = new AtomicInteger(0); + private final File field_152434_e; + private final String imageUrl; + private final IImageBuffer imageBuffer; + private BufferedImage bufferedImage; + private Thread imageThread; + private boolean textureUploaded; + + public ThreadDownloadImageDataGC(File p_i1049_1_, String p_i1049_2_, ResourceLocation p_i1049_3_, IImageBuffer p_i1049_4_) + { + super(p_i1049_3_); + this.field_152434_e = p_i1049_1_; + this.imageUrl = p_i1049_2_; + this.imageBuffer = p_i1049_4_; + } + + private void checkTextureUploaded() + { + if (!this.textureUploaded) + { + if (this.bufferedImage != null) + { + if (this.textureLocation != null) + { + this.deleteGlTexture(); + } + + TextureUtil.uploadTextureImage(super.getGlTextureId(), this.bufferedImage); + this.textureUploaded = true; + } + } + } + + @Override + public int getGlTextureId() + { + this.checkTextureUploaded(); + return super.getGlTextureId(); + } + + public void setBufferedImage(BufferedImage p_147641_1_) + { + this.bufferedImage = p_147641_1_; + } + + @Override + public void loadTexture(IResourceManager p_110551_1_) + { + try + { + if (this.bufferedImage == null && this.textureLocation != null) + { + super.loadTexture(p_110551_1_); + } + } catch (Exception e) + { + e.printStackTrace(); + } + + if (this.imageThread == null) + { + if (this.field_152434_e != null && this.field_152434_e.isFile()) + { + GalacticraftCore.logger.debug("Loading http texture from local cache (%s)", this.field_152434_e); + + try + { + this.bufferedImage = ImageIO.read(this.field_152434_e); + + if (this.imageBuffer != null) + { + this.setBufferedImage(this.imageBuffer.parseUserSkin(this.bufferedImage)); + } + } catch (IOException ioexception) + { + logger.error("Couldn\'t load skin " + this.field_152434_e, ioexception); + this.func_152433_a(); + } + } else + { + this.func_152433_a(); + } + } + } + + protected void func_152433_a() + { + this.imageThread = new Thread("Texture Downloader #" + threadDownloadCounter.incrementAndGet()) + { + + @Override + public void run() + { + HttpURLConnection httpurlconnection = null; + GalacticraftCore.logger.debug("Downloading http texture from %s to %s", ThreadDownloadImageDataGC.this.imageUrl, ThreadDownloadImageDataGC.this.field_152434_e); + + try + { + httpurlconnection = (HttpURLConnection) (new URL(ThreadDownloadImageDataGC.this.imageUrl)).openConnection(); + httpurlconnection.setDoInput(true); + httpurlconnection.setDoOutput(false); + httpurlconnection.connect(); + + if (httpurlconnection.getResponseCode() / 100 == 2) + { + BufferedImage bufferedimage; + + if (ThreadDownloadImageDataGC.this.field_152434_e != null) + { + FileUtils.copyInputStreamToFile(httpurlconnection.getInputStream(), ThreadDownloadImageDataGC.this.field_152434_e); + bufferedimage = ImageIO.read(ThreadDownloadImageDataGC.this.field_152434_e); + } else + { + bufferedimage = ImageIO.read(httpurlconnection.getInputStream()); + } + + if (ThreadDownloadImageDataGC.this.imageBuffer != null) + { + bufferedimage = ThreadDownloadImageDataGC.this.imageBuffer.parseUserSkin(bufferedimage); + } + + ThreadDownloadImageDataGC.this.setBufferedImage(bufferedimage); + return; + } + } catch (Exception exception) + { + ThreadDownloadImageDataGC.logger.error("Couldn\'t download http texture", exception); + return; + } finally + { + if (httpurlconnection != null) + { + httpurlconnection.disconnect(); + } + } + } + }; + this.imageThread.setDaemon(true); + this.imageThread.start(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderAlienVillager.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderAlienVillager.java new file mode 100644 index 00000000..803bc7ce --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderAlienVillager.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelAlienVillager; +import micdoodle8.mods.galacticraft.core.entities.EntityAlienVillager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderAlienVillager extends RenderLiving +{ + + private static final ResourceLocation villagerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/villager.png"); + private boolean texSwitch; + + protected ModelAlienVillager villagerModel; + + public RenderAlienVillager(RenderManager manager) + { + super(manager, new ModelAlienVillager(0.0F), 0.5F); + this.villagerModel = (ModelAlienVillager) this.mainModel; + } + + @Override + protected void preRenderCallback(EntityAlienVillager villager, float par2) + { + float f1 = 0.9375F; + + if (villager.getGrowingAge() < 0) + { + f1 = (float) (f1 * 0.5D); + this.shadowSize = 0.25F; + } else + { + this.shadowSize = 0.5F; + } + + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + + GL11.glScalef(f1, f1, f1); + } + + @Override + protected ResourceLocation getEntityTexture(EntityAlienVillager par1Entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderAlienVillager.villagerTexture; + } + + @Override + public void doRender(EntityAlienVillager villager, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(villager, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(villager, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderBuggy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderBuggy.java new file mode 100644 index 00000000..050c4487 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderBuggy.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderBuggy extends Render +{ + + private OBJModel.OBJBakedModel mainModel; + private OBJModel.OBJBakedModel radarDish; + private OBJModel.OBJBakedModel wheelLeftCover; + private OBJModel.OBJBakedModel wheelRight; + private OBJModel.OBJBakedModel wheelLeft; + private OBJModel.OBJBakedModel wheelRightCover; + private OBJModel.OBJBakedModel cargoLeft; + private OBJModel.OBJBakedModel cargoMid; + private OBJModel.OBJBakedModel cargoRight; + + private void updateModels() + { + if (this.mainModel == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(Constants.ASSET_PREFIX, "buggy.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + this.mainModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("MainBody"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.radarDish = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("RadarDish_Dish"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.wheelLeftCover = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Wheel_Left_Cover"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.wheelRight = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Wheel_Right"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.wheelLeft = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Wheel_Left"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.wheelRightCover = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Wheel_Right_Cover"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.cargoLeft = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("CargoLeft"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.cargoMid = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("CargoMid"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.cargoRight = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("CargoRight"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + public RenderBuggy(RenderManager manager) + { + super(manager); + this.shadowSize = 1.0F; + } + + @Override + protected ResourceLocation getEntityTexture(EntityBuggy entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityBuggy entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.scale(1.0F, 1.0F, 1.0F); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-pitch, 0.0F, 0.0F, 1.0F); + GlStateManager.scale(0.41F, 0.41F, 0.41F); + + this.updateModels(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + // Front wheels + GlStateManager.pushMatrix(); + float dZ = -2.727F; + float dY = 0.976F; + float dX = 1.25F; + float rotation = entity.wheelRotationX; + GlStateManager.translate(dX, dY, dZ); + GlStateManager.rotate(entity.wheelRotationZ, 0, 1, 0); + ClientUtil.drawBakedModel(this.wheelRightCover); + GlStateManager.rotate(rotation, 1, 0, 0); + ClientUtil.drawBakedModel(this.wheelRight); + GlStateManager.popMatrix(); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-dX, dY, dZ); + GlStateManager.rotate(entity.wheelRotationZ, 0, 1, 0); + ClientUtil.drawBakedModel(this.wheelLeftCover); + GlStateManager.rotate(rotation, 1, 0, 0); + ClientUtil.drawBakedModel(this.wheelLeft); + GlStateManager.popMatrix(); + + // Back wheels + GlStateManager.pushMatrix(); + dX = 1.9F; + dZ = -dZ; + GlStateManager.translate(dX, dY, dZ); + GlStateManager.rotate(-entity.wheelRotationZ, 0, 1, 0); + GlStateManager.rotate(rotation, 1, 0, 0); + ClientUtil.drawBakedModel(this.wheelRight); + GlStateManager.popMatrix(); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-dX, dY, dZ); + GlStateManager.rotate(-entity.wheelRotationZ, 0, 1, 0); + GlStateManager.rotate(rotation, 1, 0, 0); + ClientUtil.drawBakedModel(this.wheelLeft); + GlStateManager.popMatrix(); + + ClientUtil.drawBakedModel(this.mainModel); + + // Radar Dish + GlStateManager.pushMatrix(); + GlStateManager.translate(-1.178F, 4.1F, -2.397F); + int ticks = entity.ticksExisted + entity.getEntityId() * 10000; + GlStateManager.rotate((float) Math.sin(ticks * 0.05) * 50.0F, 1, 0, 0); + GlStateManager.rotate((float) Math.cos(ticks * 0.1) * 50.0F, 0, 0, 1); + ClientUtil.drawBakedModel(this.radarDish); + GlStateManager.popMatrix(); + + if (entity.buggyType > 0) + { + ClientUtil.drawBakedModel(this.cargoLeft); + + if (entity.buggyType > 1) + { + ClientUtil.drawBakedModel(this.cargoMid); + + if (entity.buggyType > 2) + { + ClientUtil.drawBakedModel(this.cargoRight); + } + } + } + + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityBuggy buggy, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = buggy.getEntityBoundingBox().grow(2D, 1D, 2D); + return buggy.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEntityFake.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEntityFake.java new file mode 100644 index 00000000..0d759035 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEntityFake.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEntityFake extends Render +{ + + public RenderEntityFake(RenderManager manager) + { + super(manager); + } + + @Override + protected ResourceLocation getEntityTexture(EntityCelestialFake par1Entity) + { + return null; + } + + @Override + public void doRender(EntityCelestialFake par1Entity, double par2, double par4, double par6, float par8, float par9) + { + } + + @Override + public boolean shouldRender(EntityCelestialFake lander, ICamera camera, double camX, double camY, double camZ) + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedCreeper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedCreeper.java new file mode 100644 index 00000000..0a871204 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedCreeper.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerEvolvedCreeperCharge; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedCreeper extends RenderLiving +{ + + private static final ResourceLocation creeperTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/creeper.png"); + private boolean texSwitch; + + public RenderEvolvedCreeper(RenderManager manager) + { + super(manager, new ModelEvolvedCreeper(), 0.5F); + this.addLayer(new LayerEvolvedCreeperCharge(this)); + } + + @Override + protected void preRenderCallback(EntityEvolvedCreeper entity, float partialTicks) + { + float f = entity.getCreeperFlashIntensity(partialTicks); + float f1 = 1.0F + MathHelper.sin(f * 100.0F) * f * 0.01F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + f = f * f; + f = f * f; + float f2 = (1.0F + f * 0.4F) * f1; + float f3 = (1.0F + f * 0.1F) / f1; + GlStateManager.scale(0.2F + f2, 0.2F + f3, 0.2F + f2); + + if (this.texSwitch) + { + GlStateManager.translate(0.0F, -0.03F, 0.0F); + OverlaySensorGlasses.preRenderMobs(); + } + GlStateManager.translate(0.0F, 0.125F, 0.0F); + } + + @Override + protected int getColorMultiplier(EntityEvolvedCreeper entity, float lightBrightness, float partialTicks) + { + float f = entity.getCreeperFlashIntensity(partialTicks); + + if ((int) (f * 10.0F) % 2 == 0) + { + return 0; + } else + { + int i = (int) (f * 0.2F * 255.0F); + i = MathHelper.clamp(i, 0, 255); + return i << 24 | 16777215; + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedCreeper entity) + { + return this.texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedCreeper.creeperTexture; + } + + @Override + public void doRender(EntityEvolvedCreeper entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedEnderman.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedEnderman.java new file mode 100644 index 00000000..4bad30f3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedEnderman.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerEvolvedEndermanEyes; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerEvolvedEndermanHeldBlock; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedEnderman extends RenderLiving +{ + + private static final ResourceLocation endermanTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/evolved_enderman.png"); + private ModelEvolvedEnderman endermanModel; + private Random rnd = new Random(); + private boolean texSwitch; + + public RenderEvolvedEnderman(RenderManager manager) + { + super(manager, new ModelEvolvedEnderman(), 0.5F); + this.endermanModel = (ModelEvolvedEnderman) super.mainModel; + this.addLayer(new LayerEvolvedEndermanEyes(this)); + this.addLayer(new LayerEvolvedEndermanHeldBlock(this)); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedEnderman entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedEnderman.endermanTexture; + } + + @Override + public void doRender(EntityEvolvedEnderman entity, double x, double y, double z, float entityYaw, float partialTicks) + { + IBlockState iblockstate = entity.getHeldBlockState(); + this.endermanModel.isCarrying = iblockstate != null; + this.endermanModel.isAttacking = entity.isScreaming(); + + if (entity.isScreaming()) + { + double d3 = 0.02D; + x += this.rnd.nextGaussian() * d3; + z += this.rnd.nextGaussian() * d3; + } + super.doRender(entity, x, y, z, entityYaw, partialTicks); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void preRenderCallback(EntityEvolvedEnderman entity, float partialTickTime) + { + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeleton.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeleton.java new file mode 100644 index 00000000..7c1f89e7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeleton.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import net.minecraft.client.model.ModelSkeleton; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderBiped; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedSkeleton extends RenderBiped +{ + + private static final ResourceLocation skeletonTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/skeleton.png"); + private static final ResourceLocation powerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/power.png"); + + private final ModelEvolvedSkeleton model = new ModelEvolvedSkeleton(0.2F); + private boolean texSwitch; + + public RenderEvolvedSkeleton(RenderManager manager) + { + super(manager, new ModelEvolvedSkeleton(), 0.6F); + this.addLayer(new LayerHeldItem(this)); + this.addLayer(new LayerBipedArmor(this) + { + + @Override + protected void initArmor() + { + this.modelLeggings = new ModelSkeleton(0.5F, true); + this.modelArmor = new ModelSkeleton(1.0F, true); + } + }); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedSkeleton par1Entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedSkeleton.skeletonTexture; + } + + @Override + protected void preRenderCallback(EntityEvolvedSkeleton par1EntityLiving, float par2) + { + GL11.glScalef(1.2F, 1.2F, 1.2F); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntityEvolvedSkeleton entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void applyRotations(EntityEvolvedSkeleton skellie, float pitch, float yaw, float partialTicks) + { + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GL11.glTranslatef(0F, -skellie.height * 0.55F, 0F); + GL11.glRotatef(skellie.getTumbleAngle(partialTicks), skellie.getTumbleAxisX(), 0F, skellie.getTumbleAxisZ()); + GL11.glTranslatef(0F, skellie.height * 0.55F, 0F); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + super.applyRotations(skellie, pitch, yaw, partialTicks); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeletonBoss.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeletonBoss.java new file mode 100644 index 00000000..9a2ad445 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeletonBoss.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerHeldItemEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedSkeletonBoss extends RenderLiving +{ + + private static final ResourceLocation skeletonBossTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/skeletonboss.png"); + + public RenderEvolvedSkeletonBoss(RenderManager manager) + { + super(manager, new ModelEvolvedSkeletonBoss(), 0.9F); + this.addLayer(new LayerHeldItemEvolvedSkeletonBoss(this)); + } + + @Override + protected ResourceLocation getEntityTexture(EntitySkeletonBoss entity) + { + return RenderEvolvedSkeletonBoss.skeletonBossTexture; + } + + @Override + protected void preRenderCallback(EntitySkeletonBoss entity, float partialTicks) + { + GlStateManager.scale(1.2F, 1.2F, 1.2F); + GlStateManager.rotate((float) (Math.pow(entity.deathTicks, 2) / 5.0F + (Math.pow(entity.deathTicks, 2) / 5.0F - Math.pow(entity.deathTicks - 1, 2) / 5.0F) * partialTicks), 0.0F, 1.0F, 0.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSpider.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSpider.java new file mode 100644 index 00000000..1a427429 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSpider.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedSpider extends RenderLiving +{ + + private static final ResourceLocation spiderTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/spider.png"); + private boolean texSwitch; + + public RenderEvolvedSpider(RenderManager manager) + { + super(manager, new ModelEvolvedSpider(), 1.0F); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedSpider par1Entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedSpider.spiderTexture; + } + + @Override + protected void preRenderCallback(EntityEvolvedSpider par1EntityLiving, float par2) + { + GL11.glScalef(1.2F, 1.2F, 1.2F); + if (texSwitch) + { + GL11.glTranslatef(0.0F, -0.03F, 0.0F); + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntityEvolvedSpider entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected float getDeathMaxRotation(EntityEvolvedSpider par1EntityLiving) + { + return 180.0F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedWitch.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedWitch.java new file mode 100644 index 00000000..cc238caa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedWitch.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedWitch; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerHeldItemEvolvedWitch; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedWitch; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedWitch extends RenderLiving +{ + + private static final ResourceLocation witchTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/evolved_witch.png"); + private boolean texSwitch; + + public RenderEvolvedWitch(RenderManager manager) + { + super(manager, new ModelEvolvedWitch(), 0.5F); + this.addLayer(new LayerHeldItemEvolvedWitch(this)); + } + + @Override + public void transformHeldFull3DItemLayer() + { + GlStateManager.translate(0.0F, 0.1875F, 0.0F); + } + + @Override + public void doRender(EntityEvolvedWitch entity, double x, double y, double z, float entityYaw, float partialTicks) + { + ((ModelEvolvedWitch) this.mainModel).holdingItem = entity.getHeldItemMainhand() != null; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void preRenderCallback(EntityEvolvedWitch entity, float partialTickTime) + { + float f1 = 0.9375F; + GlStateManager.scale(f1, f1, f1); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedWitch entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedWitch.witchTexture; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedZombie.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedZombie.java new file mode 100644 index 00000000..56ca3ace --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedZombie.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelZombie; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderBiped; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedZombie extends RenderBiped +{ + + private static final ResourceLocation zombieTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/zombie.png"); + private static final ResourceLocation powerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/power.png"); + + private final ModelBase model = new ModelEvolvedZombie(0.2F, false, true); + private boolean texSwitch; + + public RenderEvolvedZombie(RenderManager manager) + { + super(manager, new ModelEvolvedZombie(true), 0.5F); + LayerRenderer layerrenderer = (LayerRenderer) this.layerRenderers.get(0); + this.addLayer(new LayerHeldItem(this)); + LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this) + { + + @Override + protected void initArmor() + { + this.modelLeggings = new ModelZombie(0.5F, true); + this.modelArmor = new ModelZombie(1.0F, true); + } + }; + this.addLayer(layerbipedarmor); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedZombie par1Entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedZombie.zombieTexture; + } + + @Override + protected void preRenderCallback(EntityEvolvedZombie zombie, float par2) + { + GL11.glScalef(1.2F, 1.2F, 1.2F); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntityEvolvedZombie entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void applyRotations(EntityEvolvedZombie zombie, float pitch, float yaw, float partialTicks) + { + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GL11.glTranslatef(0F, -zombie.height * 0.55F, 0F); + GL11.glRotatef(zombie.getTumbleAngle(partialTicks), zombie.getTumbleAxisX(), 0F, zombie.getTumbleAxisZ()); + GL11.glTranslatef(0F, zombie.height * 0.55F, 0F); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + super.applyRotations(zombie, pitch, yaw, partialTicks); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderFlag.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderFlag.java new file mode 100644 index 00000000..3fcc375c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderFlag.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelFlag; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderFlag extends Render +{ + + public static ResourceLocation flagTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/flag.png"); + + protected ModelFlag modelFlag; + + public RenderFlag(RenderManager manager) + { + super(manager); + this.shadowSize = 1F; + this.modelFlag = new ModelFlag(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityFlag entity) + { + return RenderFlag.flagTexture; + } + + @Override + public void doRender(EntityFlag entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + long seed = entity.getEntityId() * 493286711L; + seed = seed * seed * 4392167121L + seed * 98761L; + float seedX = (((seed >> 16 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + float seedY = (((seed >> 20 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + float seedZ = (((seed >> 24 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + GlStateManager.translate(seedX, seedY + 1.5F, seedZ); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entity.getFacingAngle(), 0.0F, 1.0F, 0.0F); + this.bindEntityTexture(entity); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + this.modelFlag.render(entity, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + GlStateManager.popMatrix(); + } + + @Override + public boolean shouldRender(EntityFlag lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(1D, 2D, 1D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderLander.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderLander.java new file mode 100644 index 00000000..e59be20d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderLander.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelLander; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderLander extends Render +{ + + private static final ResourceLocation landerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/lander.png"); + + protected ModelLander landerModel; + + public RenderLander(RenderManager manager) + { + super(manager); + this.shadowSize = 2F; + this.landerModel = new ModelLander(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityLander par1Entity) + { + return RenderLander.landerTexture; + } + + @Override + public void doRender(EntityLander lander, double par2, double par4, double par6, float par8, float par9) + { + GL11.glPushMatrix(); + final float var24 = lander.prevRotationPitch + (lander.rotationPitch - lander.prevRotationPitch) * par9; + GL11.glTranslatef((float) par2, (float) par4 + 1.55F, (float) par6); + GL11.glRotatef(180.0F - par8, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var24, 0.0F, 0.0F, 1.0F); + + float f6 = lander.timeSinceHit - par9; + float f7 = lander.currentDamage - par9; + + if (f7 < 0.0F) + { + f7 = 0.0F; + } + + if (f6 > 0.0F) + { + GL11.glRotatef((float) Math.sin(f6) * 0.2F * f6 * f7 / 25.0F, 1.0F, 0.0F, 0.0F); + } + + this.bindEntityTexture(lander); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.landerModel.render(lander, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + GL11.glPopMatrix(); + } + + @Override + public boolean shouldRender(EntityLander lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(2D, 1D, 2D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteor.java new file mode 100644 index 00000000..93cd5bd7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteor.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelMeteor; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderMeteor extends Render +{ + + private static final ResourceLocation meteorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/meteor.png"); + + private final ModelMeteor modelMeteor; + + public RenderMeteor(RenderManager manager) + { + super(manager); + this.shadowSize = 1F; + this.modelMeteor = new ModelMeteor(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityMeteor par1Entity) + { + return RenderMeteor.meteorTexture; + } + + @Override + public void doRender(EntityMeteor meteor, double par2, double par4, double par6, float par8, float par9) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + GL11.glRotatef(par8, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(par8, 1.0F, 0.0F, 0.0F); + final float f = meteor.getSize(); + GL11.glScalef(f / 2, f / 2, f / 2); + this.bindEntityTexture(meteor); + this.modelMeteor.render(meteor, 0.0F, 0.0F, -0.5F, 0.0F, 0.0F, 0.1F); + GL11.glPopMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteorChunk.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteorChunk.java new file mode 100644 index 00000000..28b67119 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteorChunk.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelMeteorChunk; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; + +public class RenderMeteorChunk extends Render +{ + + private static final ResourceLocation meteorChunkTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/meteor_chunk.png"); + private static final ResourceLocation meteorChunkHotTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/meteor_chunk_hot.png"); + private final ModelMeteorChunk modelMeteor; + + public RenderMeteorChunk(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 0.1F; + this.modelMeteor = new ModelMeteorChunk(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityMeteorChunk entity) + { + if (entity.isHot()) + { + return RenderMeteorChunk.meteorChunkHotTexture; + } else + { + return RenderMeteorChunk.meteorChunkTexture; + } + } + + @Override + public void doRender(EntityMeteorChunk entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + final float pitch = entity.rotationPitch; + final float yaw = entity.rotationYaw; + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.scale(0.3F, 0.3F, 0.3F); + GlStateManager.rotate(yaw, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(pitch, 0.0F, 0.0F, 1.0F); + this.bindEntityTexture(entity); + this.modelMeteor.render(entity, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderParaChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderParaChest.java new file mode 100644 index 00000000..72edfdd4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderParaChest.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelParaChest; +import micdoodle8.mods.galacticraft.core.entities.EntityParachest; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderParaChest extends Render +{ + + private static final ResourceLocation[] textures = + {new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/plain.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/black.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/blue.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/lime.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/brown.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/darkblue.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/darkgray.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/darkgreen.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/gray.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/magenta.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/orange.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/pink.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/purple.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/red.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/teal.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/yellow.png")}; + public static final ResourceLocation parachestTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachest.png"); + + private final ModelParaChest chestModel; + + public RenderParaChest(RenderManager manager) + { + super(manager); + this.shadowSize = 1F; + this.chestModel = new ModelParaChest(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityParachest entity) + { + return RenderParaChest.textures[ItemParaChute.getParachuteDamageValueFromDyeEnum(entity.color)]; + } + + @Override + public void doRender(EntityParachest entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) x - 0.5F, (float) y, (float) z); + + this.bindEntityTexture(entity); + + if (!entity.isDead) + { + this.chestModel.renderAll(); + } + + GL11.glPopMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderPlayerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderPlayerGC.java new file mode 100644 index 00000000..f22b982f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderPlayerGC.java @@ -0,0 +1,362 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import java.lang.reflect.Field; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerArmorBase; +import net.minecraft.client.renderer.entity.layers.LayerCustomHead; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerFrequencyModule; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerHeldItemGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerOxygenGear; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerOxygenMask; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerOxygenParachute; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerOxygenTanks; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerShield; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerThermalPadding; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; + +import org.lwjgl.opengl.GL11; + +/** + * This renders the thermal armor (unless RenderPlayerAPI is installed). The + * thermal armor render is done after the corresponding body part of the player + * is drawn. This ALSO patches RenderPlayer so that it uses ModelPlayerGC in + * place of ModelPlayer to draw the player.

Finally, this also adds a hook + * into applyRotations so as to fire a RotatePlayerEvent - used by the Cryogenic + * Chamber + * + * @author User + */ +public class RenderPlayerGC extends RenderPlayer +{ + + public static ResourceLocation thermalPaddingTexture0; + public static ResourceLocation thermalPaddingTexture1; + public static ResourceLocation thermalPaddingTexture1_T2; + public static ResourceLocation heatShieldTexture; + public static boolean flagThermalOverride = false; + private static Boolean isSmartRenderLoaded = null; + + public RenderPlayerGC() + { + this(false); + } + + public RenderPlayerGC(boolean smallArms) + { + super(FMLClientHandler.instance().getClient().getRenderManager(), smallArms); + this.mainModel = new ModelPlayerGC(0.0F, smallArms); + this.addGCLayers(); + } + + private void addGCLayers() + { + Field f1 = null; + Field f2 = null; + Field f3 = null; + try + { + f1 = LayerArmorBase.class.getDeclaredField(GCCoreUtil.isDeobfuscated() ? "renderer" : "field_177190_a"); + f1.setAccessible(true); + } catch (Exception ignore) + {} + // The following code removes the vanilla skull and item layer renderers + // and replaces them with the Galacticraft ones + // Also updates all armor layers (including layers added by other mods) + // to reflect GC model limb positioning + int itemLayerIndex = -1; + int skullLayerIndex = -1; + for (int i = 0; i < this.layerRenderers.size(); i++) + { + LayerRenderer layer = this.layerRenderers.get(i); + if (layer instanceof LayerHeldItem) + { + itemLayerIndex = i; + } + else if (layer instanceof LayerArmorBase) + { + if (f1 != null) + { + try + { + f1.set(layer, this); + } catch (Exception ignore) + {} + } + } + else if (layer instanceof LayerCustomHead) + { + skullLayerIndex = i; + } + } + if (skullLayerIndex >= 0) + { + this.setLayer(skullLayerIndex, new LayerCustomHead(this.getMainModel().bipedHead)); + } + if (itemLayerIndex >= 0 && !ConfigManagerCore.disableVehicleCameraChanges) + { + this.setLayer(itemLayerIndex, new LayerHeldItemGC(this)); + } + + this.addLayer(new LayerOxygenTanks(this)); + this.addLayer(new LayerOxygenGear(this)); + this.addLayer(new LayerOxygenMask(this)); + this.addLayer(new LayerOxygenParachute(this)); + this.addLayer(new LayerFrequencyModule(this)); + + this.addLayer(new LayerThermalPadding(this)); + + RenderPlayerGC.thermalPaddingTexture0 = new ResourceLocation("galacticraftplanets", "textures/misc/thermal_padding_0.png"); + RenderPlayerGC.thermalPaddingTexture1 = new ResourceLocation("galacticraftplanets", "textures/misc/thermal_padding_1.png"); + RenderPlayerGC.thermalPaddingTexture1_T2 = new ResourceLocation("galacticraftplanets", "textures/misc/thermal_padding_t2_1.png"); + RenderPlayerGC.heatShieldTexture = new ResourceLocation("galacticraftplanets", "textures/misc/shield.png"); + + this.addLayer(new LayerShield(this)); + } + + private > void setLayer(int index, U layer) + { + this.layerRenderers.set(index, (LayerRenderer) layer); + } + + public RenderPlayerGC(RenderPlayer old, boolean smallArms) + { + super(FMLClientHandler.instance().getClient().getRenderManager(), smallArms); + this.mainModel = new ModelPlayerGC(0.0F, smallArms); + + // Preserve any layers added by other mods, for example + // WearableBackpacks + Class clazz = old.getClass().getSuperclass(); + Field f = null; + do + { + try + { + f = clazz.getDeclaredField(GCCoreUtil.isDeobfuscated() ? "layerRenderers" : "field_177097_h"); + f.setAccessible(true); + } catch (Exception ignore) + {} + clazz = clazz.getSuperclass(); + } while (f == null && clazz != null); + if (f != null) + try + { + List> layers = (List>) f.get(old); + if (layers.size() == 0) + { + // Specifically fix for compatibility with MetaMorph's + // non-standard "RenderSubPlayer" class + try + { + Field g = old.getClass().getDeclaredField("original"); + old = (RenderPlayer) g.get(old); + layers = (List>) f.get(old); + } catch (Exception ignore) + {} + } + if (layers.size() > 0) + { + for (LayerRenderer oldLayer : layers) + { + if (this.hasNoLayer(oldLayer.getClass())) + { + LayerRenderer newInstance = null; + try + { + newInstance = oldLayer.getClass().getConstructor(RenderLivingBase.class).newInstance(this); + } catch (Exception ignore) + {} + if (newInstance == null) + { + try + { + newInstance = oldLayer.getClass().getConstructor(RenderPlayer.class).newInstance(this); + } catch (Exception ignore) + {} + } + if (newInstance == null) + { + try + { + newInstance = oldLayer.getClass().getConstructor(boolean.class, ModelPlayer.class).newInstance(smallArms, this.mainModel); + } catch (Exception ignore) + {} + } + if (newInstance != null) + { + oldLayer = newInstance; + } + this.addLayer(oldLayer); + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + + this.addGCLayers(); + } + + private boolean hasNoLayer(Class test) + { + for (LayerRenderer oldLayer : this.layerRenderers) + { + if (oldLayer.getClass() == test) + return false; + } + return true; + } + + @Override + protected void preRenderCallback(AbstractClientPlayer entitylivingbaseIn, float partialTickTime) + { + super.preRenderCallback(entitylivingbaseIn, partialTickTime); + + if (entitylivingbaseIn.isEntityAlive() && entitylivingbaseIn.isPlayerSleeping()) + { + RotatePlayerEvent event = new RotatePlayerEvent(entitylivingbaseIn); + MinecraftForge.EVENT_BUS.post(event); + + if (!event.vanillaOverride) + { + super.preRenderCallback(entitylivingbaseIn, partialTickTime); + } + else if (event.shouldRotate == null || event.shouldRotate) + { + entitylivingbaseIn.rotationYawHead = 0; + entitylivingbaseIn.prevRotationYawHead = 0; + GL11.glTranslatef(0.0F, 0.3F, 0.0F); + } + } + } + + @Override + protected void applyRotations(AbstractClientPlayer abstractClientPlayer, float par2, float par3, float par4) + { + if (abstractClientPlayer.isEntityAlive() && abstractClientPlayer.isPlayerSleeping()) + { + RotatePlayerEvent event = new RotatePlayerEvent(abstractClientPlayer); + MinecraftForge.EVENT_BUS.post(event); + + if (!event.vanillaOverride) + { + super.applyRotations(abstractClientPlayer, par2, par3, par4); + } + else if (event.shouldRotate == null) + { + GL11.glRotatef(abstractClientPlayer.getBedOrientationInDegrees(), 0.0F, 1.0F, 0.0F); + } + else if (event.shouldRotate) + { + float rotation = 0.0F; + + if (abstractClientPlayer.bedLocation != null) + { + IBlockState bed = abstractClientPlayer.world.getBlockState(abstractClientPlayer.bedLocation); + + if (bed.getBlock().isBed(bed, abstractClientPlayer.world, abstractClientPlayer.bedLocation, abstractClientPlayer)) + { + if (bed.getBlock() == GCBlocks.fakeBlock && bed.getValue(BlockMulti.MULTI_TYPE) == BlockMulti.EnumBlockMultiType.CRYO_CHAMBER) + { + TileEntity tile = event.getEntityPlayer().world.getTileEntity(abstractClientPlayer.bedLocation); + if (tile instanceof TileEntityMulti) + { + bed = event.getEntityPlayer().world.getBlockState(((TileEntityMulti) tile).mainBlockPosition); + } + } + + if (bed.getBlock() == MarsBlocks.machine && bed.getValue(BlockMachineMars.TYPE) == BlockMachineMars.EnumMachineType.CRYOGENIC_CHAMBER) + { + switch (bed.getValue(BlockMachineMars.FACING)) + { + case NORTH: + rotation = 0.0F; + break; + case EAST: + rotation = 270.0F; + break; + case SOUTH: + rotation = 180.0F; + break; + case WEST: + rotation = 90.0F; + break; + } + } + } + } + + GL11.glRotatef(rotation, 0.0F, 1.0F, 0.0F); + } + } + else + { + if (Minecraft.getMinecraft().gameSettings.thirdPersonView != 0) + { + final EntityPlayer player = abstractClientPlayer; + + if (player.getRidingEntity() instanceof ICameraZoomEntity) + { + Entity rocket = player.getRidingEntity(); + float rotateOffset = ((ICameraZoomEntity) rocket).getRotateOffset(); + if (rotateOffset > -10F) + { + GL11.glTranslatef(0, -rotateOffset, 0); + float anglePitch = rocket.prevRotationPitch; + float angleYaw = rocket.prevRotationYaw; + GL11.glRotatef(-angleYaw, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(anglePitch, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0, rotateOffset, 0); + } + } + } + super.applyRotations(abstractClientPlayer, par2, par3, par4); + } + } + + public static class RotatePlayerEvent extends PlayerEvent + { + + public Boolean shouldRotate = null; + public boolean vanillaOverride = false; + + public RotatePlayerEvent(AbstractClientPlayer player) + { + super(player); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderSchematic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderSchematic.java new file mode 100644 index 00000000..bcd0e074 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderSchematic.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.EntityHanging; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSchematic extends Render +{ + + public RenderSchematic(RenderManager manager) + { + super(manager); + } + + @Override + protected ResourceLocation getEntityTexture(EntityHangingSchematic entity) + { + return SchematicRegistry.getSchematicTexture(entity.schematic); + } + + @Override + public void doRender(EntityHangingSchematic entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.enableRescaleNormal(); + this.bindEntityTexture(entity); + float f = 0.0625F; + GlStateManager.scale(f, f, f); + this.renderPainting(entity, entity.getWidthPixels(), entity.getHeightPixels()); + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + private void renderPainting(EntityHangingSchematic painting, int width, int height) + { + float f = (float) (-width) / 2.0F; + float f1 = (float) (-height) / 2.0F; + float f2 = 0.5F; + float f3 = 0.75F; + float f4 = 0.8125F; + float f5 = 0.0F; + float f6 = 0.0625F; + float f7 = 0.75F; + float f8 = 0.8125F; + float f9 = 0.001953125F; + float f10 = 0.001953125F; + float f11 = 0.7519531F; + float f12 = 0.7519531F; + float f13 = 0.0F; + float f14 = 0.0625F; + + for (int i = 0; i < width / 16; ++i) + { + for (int j = 0; j < height / 16; ++j) + { + double a = f + (float) ((i + 1) * 16); + double b = f + (float) (i * 16); + double c = f1 + (float) ((j + 1) * 16); + double d = f1 + (float) (j * 16); + this.setLightmap(painting, (a + b) / 2.0F, (c + d) / 2.0F); + float f19 = (float) (width - i * 16) / 32.0F; + float f20 = (float) (width - (i + 1) * 16) / 32.0F; + float f21 = (float) (height - j * 16) / 32.0F; + float f22 = (float) (height - (j + 1) * 16) / 32.0F; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_NORMAL); + worldrenderer.pos(a, d, (-f2)).tex(f20, f21).normal(0.0F, 0.0F, -1.0F).endVertex(); + worldrenderer.pos(b, d, (-f2)).tex(f19, f21).normal(0.0F, 0.0F, -1.0F).endVertex(); + worldrenderer.pos(b, c, (-f2)).tex(f19, f22).normal(0.0F, 0.0F, -1.0F).endVertex(); + worldrenderer.pos(a, c, (-f2)).tex(f20, f22).normal(0.0F, 0.0F, -1.0F).endVertex(); + worldrenderer.pos(a, c, f2).tex(f3, f5).normal(0.0F, 0.0F, 1.0F).endVertex(); + worldrenderer.pos(b, c, f2).tex(f4, f5).normal(0.0F, 0.0F, 1.0F).endVertex(); + worldrenderer.pos(b, d, f2).tex(f4, f6).normal(0.0F, 0.0F, 1.0F).endVertex(); + worldrenderer.pos(a, d, f2).tex(f3, f6).normal(0.0F, 0.0F, 1.0F).endVertex(); + worldrenderer.pos(a, c, (-f2)).tex(f7, f9).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos(b, c, (-f2)).tex(f8, f9).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos(b, c, f2).tex(f8, f10).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos(a, c, f2).tex(f7, f10).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos(a, d, f2).tex(f7, f9).normal(0.0F, -1.0F, 0.0F).endVertex(); + worldrenderer.pos(b, d, f2).tex(f8, f9).normal(0.0F, -1.0F, 0.0F).endVertex(); + worldrenderer.pos(b, d, (-f2)).tex(f8, f10).normal(0.0F, -1.0F, 0.0F).endVertex(); + worldrenderer.pos(a, d, (-f2)).tex(f7, f10).normal(0.0F, -1.0F, 0.0F).endVertex(); + worldrenderer.pos(a, c, f2).tex(f12, f13).normal(-1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(a, d, f2).tex(f12, f14).normal(-1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(a, d, (-f2)).tex(f11, f14).normal(-1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(a, c, (-f2)).tex(f11, f13).normal(-1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(b, c, (-f2)).tex(f12, f13).normal(1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(b, d, (-f2)).tex(f12, f14).normal(1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(b, d, f2).tex(f11, f14).normal(1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(b, c, f2).tex(f11, f13).normal(1.0F, 0.0F, 0.0F).endVertex(); + tessellator.draw(); + } + } + } + + private void setLightmap(EntityHanging painting, double p_77008_2_, double p_77008_3_) + { + int i = MathHelper.floor(painting.posX); + int j = MathHelper.floor(painting.posY + (double) (p_77008_3_ / 16.0F)); + int k = MathHelper.floor(painting.posZ); + EnumFacing enumfacing = painting.facingDirection; + + if (enumfacing == EnumFacing.NORTH) + { + i = MathHelper.floor(painting.posX + (double) (p_77008_2_ / 16.0F)); + } + + if (enumfacing == EnumFacing.WEST) + { + k = MathHelper.floor(painting.posZ - (double) (p_77008_2_ / 16.0F)); + } + + if (enumfacing == EnumFacing.SOUTH) + { + i = MathHelper.floor(painting.posX - (double) (p_77008_2_ / 16.0F)); + } + + if (enumfacing == EnumFacing.EAST) + { + k = MathHelper.floor(painting.posZ + (double) (p_77008_2_ / 16.0F)); + } + + int l = this.renderManager.world.getCombinedLight(new BlockPos(i, j, k), 0); + int i1 = l % 65536; + int j1 = l / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) i1, (float) j1); + GlStateManager.color(1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderTier1Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderTier1Rocket.java new file mode 100644 index 00000000..bf484b06 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderTier1Rocket.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderTier1Rocket extends Render +{ + + private ResourceLocation spaceshipTexture; + + protected ModelBase modelSpaceship; + + public RenderTier1Rocket(RenderManager manager, ModelBase spaceshipModel, String textureDomain, String texture) + { + this(manager, new ResourceLocation(textureDomain, "textures/model/" + texture + ".png")); + this.modelSpaceship = spaceshipModel; + } + + private RenderTier1Rocket(RenderManager manager, ResourceLocation texture) + { + super(manager); + this.spaceshipTexture = texture; + this.shadowSize = 0.9F; + } + + @Override + protected ResourceLocation getEntityTexture(EntitySpaceshipBase par1Entity) + { + return this.spaceshipTexture; + } + + @Override + public void doRender(EntitySpaceshipBase entity, double par2, double par4, double par6, float par8, float par9) + { + GL11.glPushMatrix(); + final float var24 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * par9; + final float var25 = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * par9; + + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + GL11.glRotatef(180.0F - par8, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var24, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-var25, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, entity.getRenderOffsetY(), 0.0F); + final float var28 = entity.rollAmplitude - par9; + + if (var28 > 0.0F) + { + final float i = entity.getLaunched() ? (5 - MathHelper.floor(entity.timeUntilLaunch / 85)) / 10F : 0.3F; + GL11.glRotatef(MathHelper.sin(var28) * var28 * i * par9, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(MathHelper.sin(var28) * var28 * i * par9, 1.0F, 0.0F, 1.0F); + } + + this.bindEntityTexture(entity); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.modelSpaceship.render(entity, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + + GL11.glPopMatrix(); + } + + @Override + public boolean shouldRender(EntitySpaceshipBase rocket, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = rocket.getEntityBoundingBox().grow(0.6D, 1D, 0.6D); + + return rocket.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedCreeperCharge.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedCreeperCharge.java new file mode 100644 index 00000000..937fc6e5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedCreeperCharge.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEvolvedCreeperCharge implements LayerRenderer +{ + + private final RenderEvolvedCreeper render; + private final ModelEvolvedCreeper creeperModel = new ModelEvolvedCreeper(2.0F); + + public LayerEvolvedCreeperCharge(RenderEvolvedCreeper render) + { + this.render = render; + } + + @Override + public void doRenderLayer(EntityEvolvedCreeper entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entity.getPowered()) + { + boolean flag = entity.isInvisible(); + GlStateManager.depthMask(!flag); + this.render.bindTexture(new ResourceLocation("textures/entity/creeper/creeper_armor.png")); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + float f = entity.ticksExisted + partialTicks; + GlStateManager.translate(f * 0.01F, f * 0.01F, 0.0F); + GlStateManager.matrixMode(5888); + GlStateManager.enableBlend(); + float f1 = 0.5F; + GlStateManager.color(f1, f1, f1, 1.0F); + GlStateManager.disableLighting(); + GlStateManager.blendFunc(1, 1); + this.creeperModel.setModelAttributes(this.render.getMainModel()); + this.creeperModel.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + GlStateManager.depthMask(flag); + } + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanEyes.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanEyes.java new file mode 100644 index 00000000..95ac873e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanEyes.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEvolvedEndermanEyes implements LayerRenderer +{ + + private static final ResourceLocation eyesTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/evolved_enderman_eyes.png"); + + private RenderEvolvedEnderman render; + + public LayerEvolvedEndermanEyes(RenderEvolvedEnderman render) + { + this.render = render; + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + @Override + public void doRenderLayer(EntityEvolvedEnderman entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.render.bindTexture(LayerEvolvedEndermanEyes.eyesTexture); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.blendFunc(1, 1); + GlStateManager.disableLighting(); + GlStateManager.depthMask(!entity.isInvisible()); + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F); + GlStateManager.enableLighting(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.render.getMainModel().render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.render.setLightmap(entity); + GlStateManager.depthMask(true); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanHeldBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanHeldBlock.java new file mode 100644 index 00000000..4c8470d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanHeldBlock.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEvolvedEndermanHeldBlock implements LayerRenderer +{ + + private RenderEvolvedEnderman render; + + public LayerEvolvedEndermanHeldBlock(RenderEvolvedEnderman render) + { + this.render = render; + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + @Override + public void doRenderLayer(EntityEvolvedEnderman entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + IBlockState iblockstate = entity.getHeldBlockState(); + + if (iblockstate != null) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.6875F, -0.75F); + GlStateManager.rotate(20.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(45.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.25F, 0.1875F, 0.25F); + float f7 = 0.5F; + GlStateManager.scale(-f7, -f7, f7); + int i = entity.getBrightnessForRender(); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.render.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + blockrendererdispatcher.renderBlockBrightness(iblockstate, 1.0F); + GlStateManager.popMatrix(); + GlStateManager.disableRescaleNormal(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerFrequencyModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerFrequencyModule.java new file mode 100644 index 00000000..a6c1dfed --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerFrequencyModule.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerFrequencyModule implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + private OBJModel.OBJBakedModel moduleModel; + private OBJModel.OBJBakedModel radarModel; + + public LayerFrequencyModule(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + } + + private void updateModels() + { + if (this.moduleModel == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(Constants.ASSET_PREFIX, "frequency_module.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + this.moduleModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.radarModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Radar"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean wearingModule = gearData.getFrequencyModule() != GCPlayerHandler.GEAR_NOT_PRESENT; + boolean wearingHelmet = gearData.getMask() != GCPlayerHandler.GEAR_NOT_PRESENT; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.playerTexture); + + if (wearingModule) + { + this.updateModels(); + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + GlStateManager.rotate(180, 1, 0, 0); + GlStateManager.pushMatrix(); + GlStateManager.rotate((float) (this.playerRenderer.getMainModel().bipedHeadwear.rotateAngleY * -Constants.RADIANS_TO_DEGREES), 0, 1, 0); + GlStateManager.rotate((float) (this.playerRenderer.getMainModel().bipedHeadwear.rotateAngleX * Constants.RADIANS_TO_DEGREES), 1, 0, 0); + GlStateManager.scale(0.3F, 0.3F, 0.3F); + + if (wearingHelmet) + { + GlStateManager.translate(-1.1F, player.isSneaking() ? 0.35F : 1.2F, 0); + } else + { + GlStateManager.translate(-0.9F, player.isSneaking() ? 0.1F : 0.9F, 0); + } + + ClientUtil.drawBakedModel(this.moduleModel); + GlStateManager.translate(0.0F, 1.3F, 0.0F); + GlStateManager.rotate((float) (Math.sin(player.ticksExisted * 0.05) * 50.0F), 1, 0, 0); + GlStateManager.rotate((float) (Math.cos(player.ticksExisted * 0.1) * 50.0F), 0, 1, 0); + ClientUtil.drawBakedModel(this.radarModel); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + } + } + } + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedSkeletonBoss.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedSkeletonBoss.java new file mode 100644 index 00000000..120080aa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedSkeletonBoss.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerHeldItemEvolvedSkeletonBoss implements LayerRenderer +{ + + private final RenderEvolvedSkeletonBoss renderer; + + public LayerHeldItemEvolvedSkeletonBoss(RenderEvolvedSkeletonBoss renderer) + { + this.renderer = renderer; + } + + @Override + public void doRenderLayer(EntitySkeletonBoss entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entity.throwTimer + entity.postThrowDelay == 0) + { + this.renderHeldItem(entity, ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND); + this.renderHeldItem(entity, ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND); + } + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + private void renderHeldItem(EntitySkeletonBoss entity, ItemCameraTransforms.TransformType type) + { + ItemStack bow = new ItemStack(Items.BOW); + + if (bow != null) + { + GlStateManager.pushMatrix(); + ((ModelEvolvedSkeletonBoss) this.renderer.getMainModel()).postRenderArm(0.0625F, type); + + if (type == ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND) + { + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.05F, 0.125F, -1.525F); + } else + { + GlStateManager.translate(0.025F, 1.525F, -0.125F); + } + + Minecraft.getMinecraft().getItemRenderer().renderItemSide(entity, bow, type, false); + GlStateManager.popMatrix(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedWitch.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedWitch.java new file mode 100644 index 00000000..03dc9e8e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedWitch.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedWitch; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedWitch; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedWitch; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerHeldItemEvolvedWitch implements LayerRenderer +{ + + private RenderEvolvedWitch witchRenderer; + + public LayerHeldItemEvolvedWitch(RenderEvolvedWitch witchRenderer) + { + this.witchRenderer = witchRenderer; + } + + @Override + public void doRenderLayer(EntityEvolvedWitch entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + ItemStack itemstack = entity.getHeldItemMainhand(); + + if (!itemstack.isEmpty()) + { + GlStateManager.color(1.0F, 1.0F, 1.0F); + GlStateManager.pushMatrix(); + + if (this.witchRenderer.getMainModel().isChild) + { + GlStateManager.translate(0.0F, 0.625F, 0.0F); + GlStateManager.rotate(-20.0F, -1.0F, 0.0F, 0.0F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + } + + ((ModelEvolvedWitch) this.witchRenderer.getMainModel()).villagerNose.postRender(0.0625F); + GlStateManager.translate(-0.0625F, 0.53125F, 0.21875F); + Item item = itemstack.getItem(); + Minecraft mc = Minecraft.getMinecraft(); + + if (item == Items.BOW) + { + GlStateManager.translate(0.0F, 0.125F, -0.125F); + GlStateManager.rotate(-45.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.scale(0.625F, -0.625F, 0.625F); + GlStateManager.rotate(-100.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-20.0F, 0.0F, 1.0F, 0.0F); + } else if (item.isFull3D()) + { + if (item.shouldRotateAroundWhenRendering()) + { + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, -0.0625F, 0.0F); + } + + this.witchRenderer.transformHeldFull3DItemLayer(); + GlStateManager.translate(0.0625F, -0.125F, 0.0F); + GlStateManager.scale(0.625F, -0.625F, 0.625F); + GlStateManager.rotate(0.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(0.0F, 0.0F, 1.0F, 0.0F); + } else + { + GlStateManager.translate(0.1875F, 0.1875F, 0.0F); + GlStateManager.scale(0.875F, 0.875F, 0.875F); + GlStateManager.rotate(-20.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(-60.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-30.0F, 0.0F, 0.0F, 1.0F); + } + GlStateManager.rotate(-15.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(40.0F, 0.0F, 0.0F, 1.0F); + mc.getItemRenderer().renderItem(entity, itemstack, TransformType.THIRD_PERSON_RIGHT_HAND); + GlStateManager.popMatrix(); + } + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemGC.java new file mode 100644 index 00000000..25d2c3c4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemGC.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHandSide; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerHeldItemGC implements LayerRenderer +{ + + protected final RenderLivingBase livingEntityRenderer; + + public LayerHeldItemGC(RenderLivingBase livingEntityRendererIn) + { + this.livingEntityRenderer = livingEntityRendererIn; + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (player.getRidingEntity() instanceof ICameraZoomEntity) + { + return; + } + boolean flag = player.getPrimaryHand() == EnumHandSide.RIGHT; + ItemStack itemstack = flag ? player.getHeldItemOffhand() : player.getHeldItemMainhand(); + ItemStack itemstack1 = flag ? player.getHeldItemMainhand() : player.getHeldItemOffhand(); + + if (!itemstack.isEmpty() || !itemstack1.isEmpty()) + { + GlStateManager.pushMatrix(); + + if (this.livingEntityRenderer.getMainModel().isChild) + { + float f = 0.5F; + GlStateManager.translate(0.0F, 0.75F, 0.0F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + } + + this.renderHeldItem(player, itemstack1, ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, EnumHandSide.RIGHT); + this.renderHeldItem(player, itemstack, ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, EnumHandSide.LEFT); + GlStateManager.popMatrix(); + } + } + + private void renderHeldItem(EntityLivingBase p_188358_1_, ItemStack p_188358_2_, ItemCameraTransforms.TransformType p_188358_3_, EnumHandSide handSide) + { + if (!p_188358_2_.isEmpty()) + { + GlStateManager.pushMatrix(); + + if (p_188358_1_.isSneaking()) + { + GlStateManager.translate(0.0F, 0.2F, 0.0F); + } + // Forge: moved this call down, fixes incorrect offset while + // sneaking. + ((ModelBiped) this.livingEntityRenderer.getMainModel()).postRenderArm(0.0625F, handSide); + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + boolean flag = handSide == EnumHandSide.LEFT; + GlStateManager.translate((float) (flag ? -1 : 1) / 16.0F, 0.125F, -0.625F); + Minecraft.getMinecraft().getItemRenderer().renderItemSide(p_188358_1_, p_188358_2_, p_188358_3_, flag); + GlStateManager.popMatrix(); + } + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenGear.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenGear.java new file mode 100644 index 00000000..434d294b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenGear.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerOxygenGear implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + public ModelRenderer[][] tubes = new ModelRenderer[2][7]; + + public LayerOxygenGear(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + float scaleFactor = 0.0F; + ModelPlayer modelPlayer = playerRendererIn.getMainModel(); + + this.tubes[0][0] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][0].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][0].setRotationPoint(2F, 3F, 5.8F); + this.tubes[0][0].setTextureSize(128, 64); + this.tubes[0][0].mirror = true; + this.tubes[0][1] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][1].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][1].setRotationPoint(2F, 2F, 6.8F); + this.tubes[0][1].setTextureSize(128, 64); + this.tubes[0][1].mirror = true; + this.tubes[0][2] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][2].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][2].setRotationPoint(2F, 1F, 6.8F); + this.tubes[0][2].setTextureSize(128, 64); + this.tubes[0][2].mirror = true; + this.tubes[0][3] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][3].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][3].setRotationPoint(2F, 0F, 6.8F); + this.tubes[0][3].setTextureSize(128, 64); + this.tubes[0][3].mirror = true; + this.tubes[0][4] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][4].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][4].setRotationPoint(2F, -1F, 6.8F); + this.tubes[0][4].setTextureSize(128, 64); + this.tubes[0][4].mirror = true; + this.tubes[0][5] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][5].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][5].setRotationPoint(2F, -2F, 5.8F); + this.tubes[0][5].setTextureSize(128, 64); + this.tubes[0][5].mirror = true; + this.tubes[0][6] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][6].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][6].setRotationPoint(2F, -3F, 4.8F); + this.tubes[0][6].setTextureSize(128, 64); + this.tubes[0][6].mirror = true; + + this.tubes[1][0] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][0].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][0].setRotationPoint(-2F, 3F, 5.8F); + this.tubes[1][0].setTextureSize(128, 64); + this.tubes[1][0].mirror = true; + this.tubes[1][1] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][1].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][1].setRotationPoint(-2F, 2F, 6.8F); + this.tubes[1][1].setTextureSize(128, 64); + this.tubes[1][1].mirror = true; + this.tubes[1][2] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][2].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][2].setRotationPoint(-2F, 1F, 6.8F); + this.tubes[1][2].setTextureSize(128, 64); + this.tubes[1][2].mirror = true; + this.tubes[1][3] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][3].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][3].setRotationPoint(-2F, 0F, 6.8F); + this.tubes[1][3].setTextureSize(128, 64); + this.tubes[1][3].mirror = true; + this.tubes[1][4] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][4].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][4].setRotationPoint(-2F, -1F, 6.8F); + this.tubes[1][4].setTextureSize(128, 64); + this.tubes[1][4].mirror = true; + this.tubes[1][5] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][5].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][5].setRotationPoint(-2F, -2F, 5.8F); + this.tubes[1][5].setTextureSize(128, 64); + this.tubes[1][5].mirror = true; + this.tubes[1][6] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][6].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][6].setRotationPoint(-2F, -3F, 4.8F); + this.tubes[1][6].setTextureSize(128, 64); + this.tubes[1][6].mirror = true; + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean wearingGear = gearData.getGear() == Constants.GEAR_ID_OXYGEN_GEAR; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.playerTexture); + + if (wearingGear && !playerRenderer.getMainModel().isSneak) + { + for (int i = 0; i < 7; i++) + { + for (int k = 0; k < 2; k++) + { + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.tubes[k][i]); + + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.175F * (float) (k * 2 - 1), 0.0F, 0.0F); + GlStateManager.translate(0.0F, -0.0325F * (float) (i * 2 - 1), 0.0F); + GlStateManager.translate(0.0F, 0.0F, -0.0325F * (float) (Math.pow(i * 2 - 1, 2) * 0.05)); + GlStateManager.translate(0.0F, 0.2F, 0.0F); + GlStateManager.translate(0.0F, 0.0F, 0.2F); + + this.tubes[k][i].render(scale); + + GlStateManager.popMatrix(); + } + } + } + } + } + GlStateManager.color(1.0F, 1.0F, 1.0F); + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenMask.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenMask.java new file mode 100644 index 00000000..58b6ea75 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenMask.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class LayerOxygenMask implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + public ModelRenderer oxygenMask; + + public LayerOxygenMask(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + float scaleFactor = 1.0F; + ModelPlayer modelPlayer = playerRendererIn.getMainModel(); + + this.oxygenMask = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.oxygenMask.addBox(-8.0F, -16.0F, -8.0F, 16, 16, 16, scaleFactor); + this.oxygenMask.setRotationPoint(0.0F, 0.0F, 0.0F); + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean wearingMask = gearData.getMask() != GCPlayerHandler.GEAR_NOT_PRESENT; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.oxygenMaskTexture); + + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedHeadwear, this.oxygenMask); + this.oxygenMask.rotationPointY = this.playerRenderer.getMainModel().bipedHeadwear.rotationPointY * 8.0F; + + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + + if (wearingMask) + { + GL11.glPushMatrix(); + GL11.glScalef(1.05F, 1.05F, 1.05F); + this.oxygenMask.render(scale); + GL11.glScalef(1F, 1F, 1F); + GL11.glPopMatrix(); + } + + GlStateManager.popMatrix(); + } + } + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenParachute.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenParachute.java new file mode 100644 index 00000000..2e1a541d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenParachute.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerOxygenParachute implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + public ModelRenderer[] parachute = new ModelRenderer[3]; + public ModelRenderer[] parachuteStrings = new ModelRenderer[4]; + + public LayerOxygenParachute(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + float scaleFactor = 0.0F; + ModelPlayer modelPlayer = playerRendererIn.getMainModel(); + + this.parachute[0] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(256, 256); + this.parachute[0].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, scaleFactor); + this.parachute[0].setRotationPoint(15.0F, 4.0F, 0.0F); + this.parachute[1] = new ModelRenderer(modelPlayer, 0, 42).setTextureSize(256, 256); + this.parachute[1].addBox(-20.0F, -45.0F, -20.0F, 40, 2, 40, scaleFactor); + this.parachute[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachute[2] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(256, 256); + this.parachute[2].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, scaleFactor); + this.parachute[2].setRotationPoint(11F, -11, 0.0F); + + this.parachuteStrings[0] = new ModelRenderer(modelPlayer, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[0].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, scaleFactor); + this.parachuteStrings[0].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[1] = new ModelRenderer(modelPlayer, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[1].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, scaleFactor); + this.parachuteStrings[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[2] = new ModelRenderer(modelPlayer, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[2].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, scaleFactor); + this.parachuteStrings[2].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[3] = new ModelRenderer(modelPlayer, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[3].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, scaleFactor); + this.parachuteStrings[3].setRotationPoint(0.0F, 0.0F, 0.0F); + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean usingParachute = gearData.getParachute() != null; + + if (usingParachute) + { + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.playerTexture); + + this.parachute[0].rotateAngleZ = (float) (30F / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleZ = (float) -(30F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleZ = (float) (155F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].setRotationPoint(-9.0F, -7.0F, 2.0F); + this.parachuteStrings[1].rotateAngleZ = (float) (155F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].setRotationPoint(-9.0F, -7.0F, 2.0F); + this.parachuteStrings[2].rotateAngleZ = (float) -(155F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].setRotationPoint(9.0F, -7.0F, 2.0F); + this.parachuteStrings[3].rotateAngleZ = (float) -(155F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].setRotationPoint(9.0F, -7.0F, 2.0F); + + GlStateManager.pushMatrix(); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(gearData.getParachute()); + + this.parachute[0].render(scale); + this.parachute[1].render(scale); + this.parachute[2].render(scale); + + this.parachuteStrings[0].render(scale); + this.parachuteStrings[1].render(scale); + this.parachuteStrings[2].render(scale); + this.parachuteStrings[3].render(scale); + + GlStateManager.popMatrix(); + } + } + } + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenTanks.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenTanks.java new file mode 100644 index 00000000..120a3e33 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenTanks.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerOxygenTanks implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + public ModelRenderer[] greenOxygenTanks = new ModelRenderer[2]; + public ModelRenderer[] orangeOxygenTanks = new ModelRenderer[2]; + public ModelRenderer[] redOxygenTanks = new ModelRenderer[2]; + + public LayerOxygenTanks(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + float scaleFactor = 0.0F; + ModelPlayer modelPlayer = playerRendererIn.getMainModel(); + + this.greenOxygenTanks[0] = new ModelRenderer(modelPlayer, 4, 0).setTextureSize(128, 64); + this.greenOxygenTanks[0].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.greenOxygenTanks[0].setRotationPoint(2F, 2F, 3.8F); + this.greenOxygenTanks[0].mirror = true; + this.greenOxygenTanks[1] = new ModelRenderer(modelPlayer, 4, 0).setTextureSize(128, 64); + this.greenOxygenTanks[1].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.greenOxygenTanks[1].setRotationPoint(-2F, 2F, 3.8F); + this.greenOxygenTanks[1].mirror = true; + + this.orangeOxygenTanks[0] = new ModelRenderer(modelPlayer, 16, 0).setTextureSize(128, 64); + this.orangeOxygenTanks[0].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.orangeOxygenTanks[0].setRotationPoint(2F, 2F, 3.8F); + this.orangeOxygenTanks[0].mirror = true; + this.orangeOxygenTanks[1] = new ModelRenderer(modelPlayer, 16, 0).setTextureSize(128, 64); + this.orangeOxygenTanks[1].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.orangeOxygenTanks[1].setRotationPoint(-2F, 2F, 3.8F); + this.orangeOxygenTanks[1].mirror = true; + + this.redOxygenTanks[0] = new ModelRenderer(modelPlayer, 28, 0).setTextureSize(128, 64); + this.redOxygenTanks[0].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.redOxygenTanks[0].setRotationPoint(2F, 2F, 3.8F); + this.redOxygenTanks[0].mirror = true; + this.redOxygenTanks[1] = new ModelRenderer(modelPlayer, 28, 0).setTextureSize(128, 64); + this.redOxygenTanks[1].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.redOxygenTanks[1].setRotationPoint(-2F, 2F, 3.8F); + this.redOxygenTanks[1].mirror = true; + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean wearingLeftTankGreen = gearData.getLeftTank() == Constants.GEAR_ID_OXYGEN_TANK_LIGHT; + boolean wearingLeftTankOrange = gearData.getLeftTank() == Constants.GEAR_ID_OXYGEN_TANK_MEDIUM; + boolean wearingLeftTankRed = gearData.getLeftTank() == Constants.GEAR_ID_OXYGEN_TANK_HEAVY || gearData.getLeftTank() == Constants.GEAR_ID_OXYGEN_TANK_INFINITE; + boolean wearingRightTankGreen = gearData.getRightTank() == Constants.GEAR_ID_OXYGEN_TANK_LIGHT; + boolean wearingRightTankOrange = gearData.getRightTank() == Constants.GEAR_ID_OXYGEN_TANK_MEDIUM; + boolean wearingRightTankRed = gearData.getRightTank() == Constants.GEAR_ID_OXYGEN_TANK_HEAVY || gearData.getRightTank() == Constants.GEAR_ID_OXYGEN_TANK_INFINITE; + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.playerTexture); + + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.greenOxygenTanks[0]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.greenOxygenTanks[1]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.orangeOxygenTanks[0]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.orangeOxygenTanks[1]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.redOxygenTanks[0]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.redOxygenTanks[1]); + + if (playerRenderer.getMainModel().isSneak) + { + this.greenOxygenTanks[0].rotationPointY = 2.0F; + this.greenOxygenTanks[1].rotationPointY = 2.0F; + this.greenOxygenTanks[0].rotationPointZ = 1.6F; + this.greenOxygenTanks[1].rotationPointZ = 1.6F; + + this.orangeOxygenTanks[0].rotationPointY = 2.0F; + this.orangeOxygenTanks[1].rotationPointY = 2.0F; + this.orangeOxygenTanks[0].rotationPointZ = 1.6F; + this.orangeOxygenTanks[1].rotationPointZ = 1.6F; + + this.redOxygenTanks[0].rotationPointY = 2.0F; + this.redOxygenTanks[1].rotationPointY = 2.0F; + this.redOxygenTanks[0].rotationPointZ = 1.6F; + this.redOxygenTanks[1].rotationPointZ = 1.6F; + } else + { + this.greenOxygenTanks[0].rotationPointY = 0.5F; + this.greenOxygenTanks[1].rotationPointY = 0.5F; + this.greenOxygenTanks[0].rotationPointZ = 0.5F; + this.greenOxygenTanks[1].rotationPointZ = 0.5F; + + this.orangeOxygenTanks[0].rotationPointY = 0.5F; + this.orangeOxygenTanks[1].rotationPointY = 0.5F; + this.orangeOxygenTanks[0].rotationPointZ = 0.5F; + this.orangeOxygenTanks[1].rotationPointZ = 0.5F; + + this.redOxygenTanks[0].rotationPointY = 0.5F; + this.redOxygenTanks[1].rotationPointY = 0.5F; + this.redOxygenTanks[0].rotationPointZ = 0.5F; + this.redOxygenTanks[1].rotationPointZ = 0.5F; + } + + for (int i = 0; i < 2; ++i) + { + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.175F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, 0.2F, 0.0F); + GlStateManager.translate(0.0F, 0.0F, 0.2F); + + if (wearingLeftTankRed) + { + this.redOxygenTanks[0].render(scale); + } + + if (wearingLeftTankOrange) + { + this.orangeOxygenTanks[0].render(scale); + } + + if (wearingLeftTankGreen) + { + this.greenOxygenTanks[0].render(scale); + } + + GlStateManager.popMatrix(); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-0.175F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, 0.2F, 0.0F); + GlStateManager.translate(0.0F, 0.0F, 0.2F); + + if (wearingRightTankRed) + { + this.redOxygenTanks[1].render(scale); + } + + if (wearingRightTankOrange) + { + this.orangeOxygenTanks[1].render(scale); + } + + if (wearingRightTankGreen) + { + this.greenOxygenTanks[1].render(scale); + } + GlStateManager.color(1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + } + } + } + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerShield.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerShield.java new file mode 100644 index 00000000..0559c346 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerShield.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import org.lwjgl.opengl.GL11; + +public class LayerShield implements LayerRenderer +{ + + private final RenderPlayer renderer; + private ModelBiped shieldModel; + + public LayerShield(RenderPlayer playerRendererIn) + { + this.renderer = playerRendererIn; + this.initModel(); + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + @Override + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float f2, float f3, float partialTicks, float f5, float f6, float f7, float scale) + { + if (!entitylivingbaseIn.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData((EntityPlayer) entitylivingbaseIn); + + if (gearData != null) + { + if (gearData.getShieldController() != GCPlayerHandler.GEAR_NOT_PRESENT) + { + this.shieldModel.setVisible(false); + this.shieldModel.bipedRightLeg.showModel = true; + this.shieldModel.bipedLeftLeg.showModel = true; + this.shieldModel.bipedBody.showModel = true; + this.shieldModel.bipedRightArm.showModel = true; + this.shieldModel.bipedLeftArm.showModel = true; + this.shieldModel.bipedHead.showModel = true; + this.shieldModel.bipedHeadwear.showModel = true; + this.shieldModel.setModelAttributes(this.renderer.getMainModel()); + this.shieldModel.setLivingAnimations(entitylivingbaseIn, f2, f3, partialTicks); + this.renderer.bindTexture(RenderPlayerGC.thermalPaddingTexture0); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + float f = (float) Math.sin((entitylivingbaseIn.ticksExisted + partialTicks) / 20.0F) * 5.0F; + GlStateManager.translate(0.0F, f * 0.01F, 0.0F); + GlStateManager.matrixMode(5888); + + GL11.glDisable(GL11.GL_LIGHTING); + Minecraft.getMinecraft().renderEngine.bindTexture(RenderPlayerGC.heatShieldTexture); + GL11.glEnable(GL11.GL_BLEND); + float sTime = (float) ((1.0F - Math.sin((entitylivingbaseIn.ticksExisted + partialTicks) / 10.0F)) * 0.1F + 0.0F); + + float r = 0.9F * sTime; + float g = 0.2F * sTime; + float b = 0.9F * sTime; + + GlStateManager.depthMask(false); + GL11.glColor4f(r, g, b, 0.2F); + GlStateManager.blendFunc(GL11.GL_ONE, GL11.GL_ONE); + this.shieldModel.render(entitylivingbaseIn, f2, f3, f5, f6, f7, scale); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GL11.glColor4f(1, 1, 1, 1); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_LIGHTING); + GlStateManager.depthMask(true); + } + } + } + } + + private void initModel() + { + this.shieldModel = new ModelPlayerGC(1.5F, false); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerThermalPadding.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerThermalPadding.java new file mode 100644 index 00000000..53bbb804 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerThermalPadding.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemThermalPaddingTier2; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerArmorBase; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import org.lwjgl.opengl.GL11; + +public class LayerThermalPadding extends LayerArmorBase +{ + + private final RenderPlayer renderer; + + public LayerThermalPadding(RenderPlayer playerRendererIn) + { + super(playerRendererIn); + this.renderer = playerRendererIn; + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + @Override + protected void setModelSlotVisible(ModelBiped model, EntityEquipmentSlot slotIn) + { + model.setVisible(false); + + switch (slotIn) + { + case HEAD: + model.bipedRightLeg.showModel = true; + model.bipedLeftLeg.showModel = true; + break; + case CHEST: + model.bipedRightLeg.showModel = true; + model.bipedLeftLeg.showModel = true; + break; + case LEGS: + model.bipedBody.showModel = true; + model.bipedRightArm.showModel = true; + model.bipedLeftArm.showModel = true; + break; + case FEET: + model.bipedHead.showModel = true; + model.bipedHeadwear.showModel = true; + default: + break; + } + } + + public ItemStack getItemStackFromSlot(EntityLivingBase living, EntityEquipmentSlot slotIn) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData((EntityPlayer) living); + + if (gearData != null) + { + int padding = gearData.getThermalPadding(slotIn.getSlotIndex() - 1); + if (padding != GCPlayerHandler.GEAR_NOT_PRESENT) + { + switch (padding) + { + case Constants.GEAR_ID_THERMAL_PADDING_T1_HELMET: + case Constants.GEAR_ID_THERMAL_PADDING_T1_CHESTPLATE: + case Constants.GEAR_ID_THERMAL_PADDING_T1_LEGGINGS: + case Constants.GEAR_ID_THERMAL_PADDING_T1_BOOTS: + return new ItemStack(AsteroidsItems.thermalPadding, 1, slotIn.getSlotIndex() - 1); + case Constants.GEAR_ID_THERMAL_PADDING_T2_HELMET: + case Constants.GEAR_ID_THERMAL_PADDING_T2_CHESTPLATE: + case Constants.GEAR_ID_THERMAL_PADDING_T2_LEGGINGS: + case Constants.GEAR_ID_THERMAL_PADDING_T2_BOOTS: + return new ItemStack(VenusItems.thermalPaddingTier2, 1, slotIn.getSlotIndex() - 1); + default: + break; + } + } + } + + return null; // This null is OK, it's used only as flag by calling code + // in this same class + } + + @Override + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.CHEST); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.LEGS); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.FEET); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.HEAD); + } + + private void renderArmorLayer(EntityLivingBase entityLivingBaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale, EntityEquipmentSlot slotIn) + { + ItemStack itemstack = this.getItemStackFromSlot(entityLivingBaseIn, slotIn); + + if (itemstack != null) + { + ModelBiped model = this.getModelFromSlot(slotIn); + model.setModelAttributes(this.renderer.getMainModel()); + model.setLivingAnimations(entityLivingBaseIn, limbSwing, limbSwingAmount, partialTicks); + this.setModelSlotVisible(model, slotIn); + this.renderer.bindTexture(itemstack.getItem() instanceof ItemThermalPaddingTier2 ? RenderPlayerGC.thermalPaddingTexture1_T2 : RenderPlayerGC.thermalPaddingTexture1); + model.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + + // Start alpha render + GlStateManager.disableLighting(); + Minecraft.getMinecraft().renderEngine.bindTexture(RenderPlayerGC.thermalPaddingTexture0); + GlStateManager.enableAlpha(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + float time = entityLivingBaseIn.ticksExisted / 10.0F; + float sTime = (float) Math.sin(time) * 0.5F + 0.5F; + + float r = 0.2F * sTime; + float g = 1.0F * sTime; + float b = 0.2F * sTime; + + if (entityLivingBaseIn.world.provider instanceof IGalacticraftWorldProvider) + { + float modifier = ((IGalacticraftWorldProvider) entityLivingBaseIn.world.provider).getThermalLevelModifier(); + + if (modifier > 0) + { + b = g; + g = r; + } else if (modifier < 0) + { + r = g; + g = b; + } + } + + GlStateManager.color(r, g, b, 0.4F * sTime); + model.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + GlStateManager.color(1, 1, 1, 1); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableLighting(); + } + } + + @Override + protected void initArmor() + { + this.modelLeggings = new ModelPlayerGC(0.55F, false); // Head inside + // Oxygen Mask + this.modelArmor = new ModelPlayerGC(0.05F, false); // Chest and limbs + // close to skin + } + + @Override + public ModelBiped getModelFromSlot(EntityEquipmentSlot slotIn) + { + return slotIn == EntityEquipmentSlot.FEET ? this.modelLeggings : this.modelArmor; // FEET + // is + // intended + // here, + // actually + // picks + // up + // the + // helmet + // (yes + // really) + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemLiquidCanisterModel.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemLiquidCanisterModel.java new file mode 100644 index 00000000..4a583c51 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemLiquidCanisterModel.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class ItemLiquidCanisterModel implements IBakedModel +{ + + private final IBakedModel iBakedModel; + + public ItemLiquidCanisterModel(IBakedModel i_modelToWrap) + { + this.iBakedModel = i_modelToWrap; + } + + @Override + public List getQuads(IBlockState state, EnumFacing side, long rand) + { + return iBakedModel.getQuads(state, side, rand); + } + + @Override + public ItemOverrideList getOverrides() + { + return BakedLiquidCanisterOverrideHandler.INSTANCE; + } + + @Override + public boolean isAmbientOcclusion() + { + return iBakedModel.isAmbientOcclusion(); + } + + @Override + public boolean isGui3d() + { + return iBakedModel.isGui3d(); + } + + @Override + public boolean isBuiltInRenderer() + { + return iBakedModel.isBuiltInRenderer(); + } + + @Override + public TextureAtlasSprite getParticleTexture() + { + return iBakedModel.getParticleTexture(); + } + + @Override + public ItemCameraTransforms getItemCameraTransforms() + { + return ItemCameraTransforms.DEFAULT; + } + + private static final class BakedLiquidCanisterOverrideHandler extends ItemOverrideList + { + + public static final BakedLiquidCanisterOverrideHandler INSTANCE = new BakedLiquidCanisterOverrideHandler(); + + private BakedLiquidCanisterOverrideHandler() + { + super(ImmutableList.of()); + } + + @Override + public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) + { + if (stack.getTagCompound() == null) + { + ItemStack copy = stack.copy(); + copy.setTagCompound(new NBTTagCompound()); + copy.getTagCompound().setBoolean("Unbreakable", true); + return FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().getItemModel(copy); + } + return originalModel; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelBuggy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelBuggy.java new file mode 100644 index 00000000..64c2b591 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelBuggy.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelBuggy extends ModelTransformWrapper +{ + + public ItemModelBuggy(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.1085F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.2F, -0.8F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(-0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.0F, -0.4F, -0.3F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.15F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.0F, -0.4F, 1.2F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 15, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (0.2F - Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.075F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(1.5F, -1.5F, -0.15F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelFlag.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelFlag.java new file mode 100644 index 00000000..67cb8746 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelFlag.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.entity.EntityLivingBase; + +public class ItemModelFlag extends ModelTransformWrapper +{ + + public ItemModelFlag(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.25F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.22F, -1.6F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(-Constants.halfPI / 2.0F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 0.65F : 1.5F; + float yTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -0.08F : -0.05F; + Vector3f trans = new Vector3f(xTran, yTran, 0.0F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.rotZ(0.0F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) -(Math.PI / 3.0F)); + ret.mul(mul); + mul.setIdentity(); + EntityLivingBase player = Minecraft.getMinecraft().player; + if (player != null && player.isHandActive() && !player.getActiveItemStack().isEmpty()) + { + final int useTime = Minecraft.getMinecraft().player.getItemInUseMaxCount(); + float interpolate0 = useTime / 20.0F; + interpolate0 = (interpolate0 * interpolate0 + interpolate0 * 2.0F) / 3.0F; + + if (interpolate0 > 1.0F) + { + interpolate0 = 1.0F; + } + final int useTimeFuture = Minecraft.getMinecraft().player.getItemInUseMaxCount() + 1; + float interpolate1 = useTimeFuture / 20.0F; + interpolate1 = (interpolate1 * interpolate1 + interpolate1 * 2.0F) / 3.0F; + + if (interpolate1 > 1.0F) + { + interpolate1 = 1.0F; + } + mul.rotX(((interpolate0 + (interpolate1 - interpolate0) * Minecraft.getMinecraft().getRenderPartialTicks()) * 75.0F) / Constants.RADIANS_TO_DEGREES); + } + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.54F, -0.4F, 0.54F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.0F, 0.5F, 0.0F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.125F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.2F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(3.15F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -1.0F, 0.6F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelRocket.java new file mode 100644 index 00000000..9ffdcf1b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelRocket.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelRocket extends ModelTransformWrapper +{ + + public ItemModelRocket(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.15F, 0.0F, -0.15F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.57F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.5F, -0.6F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + if(!ConfigManagerCore.disableRocketIconRotation) { + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + } + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, -3.2F, -2.6F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.4F, -2.8F, 1.2F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.2F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(0.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -2.75F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelWorkbench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelWorkbench.java new file mode 100644 index 00000000..3ea38c10 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelWorkbench.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelWorkbench extends ModelTransformWrapper +{ + + public ItemModelWorkbench(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.0F, -0.0F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.0F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-0.025F, 0.4F, 0.3F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(38, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-0.05F, 0.3F, 0.4F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(-30, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(-30, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.85F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.05F, 0.25F, 0.45F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.8F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(3.15F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.0F, 0.0F, 0.4F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/TextureDungeonFinder.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/TextureDungeonFinder.java new file mode 100644 index 00000000..b06018d1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/TextureDungeonFinder.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import java.lang.reflect.Field; +import java.util.Map; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TextureDungeonFinder extends TextureAtlasSprite +{ + + /** Current compass heading in radians */ + public double currentAngle; + /** Speed and direction of compass rotation */ + public double angleDelta; + + public TextureDungeonFinder(String iconName) + { + super(iconName); + } + + @Override + public void updateAnimation() + { + Minecraft minecraft = Minecraft.getMinecraft(); + + if (minecraft.world != null && minecraft.player != null) + { + this.updateCompass(minecraft.world, minecraft.player, (double) minecraft.player.rotationYaw, false, false); + } else + { + this.updateCompass((World) null, null, 0.0D, true, false); + } + } + + /** + * Updates the compass based on the given x,z coords and camera direction + */ + public void updateCompass(World worldIn, EntityPlayerSP player, double angle, boolean flag1, boolean flag2) + { + if (!this.framesTextureData.isEmpty()) + { + double d0 = 0.0D; + + if (worldIn != null && player != null && !flag1) + { + if (worldIn.provider instanceof IGalacticraftWorldProvider && player.inventory.hasItemStack(new ItemStack(GCItems.dungeonFinder))) + { + double direction = GCPlayerStatsClient.get(player).getDungeonDirection(); + angle = (angle - direction) % 360.0D; + d0 = -angle / Constants.RADIANS_TO_DEGREES_D; + } else + { + d0 = Math.random() * Math.PI * 2.0D; + } + } + + if (flag2) + { + this.currentAngle = d0; + } else + { + double d3; + + for (d3 = d0 - this.currentAngle; d3 < -Math.PI; d3 += (Math.PI * 2D)) + { + ; + } + + while (d3 >= Math.PI) + { + d3 -= (Math.PI * 2D); + } + + d3 = MathHelper.clamp(d3, -1.0D, 1.0D); + this.angleDelta += d3 * 0.1D; + this.angleDelta *= 0.8D; + this.currentAngle += this.angleDelta; + } + + int i; + + for (i = (int) ((this.currentAngle / (Math.PI * 2D) + 1.0D) * (double) this.framesTextureData.size()) % this.framesTextureData.size(); i < 0; i = + (i + this.framesTextureData.size()) % this.framesTextureData.size()) + { + ; + } + + if (i != this.frameCounter) + { + this.frameCounter = i; + TextureUtil.uploadTextureMipmap((int[][]) this.framesTextureData.get(this.frameCounter), this.width, this.height, this.originX, this.originY, false, false); + } + } + } + + public void register(TextureMap map) + { + try + { + Field f = map.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "mapRegisteredSprites" : "field_110574_e"); + f.setAccessible(true); + Map textureMap = (Map) f.get(map); + textureMap.put(this.getIconName(), this); + } catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityArclampRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityArclampRenderer.java new file mode 100644 index 00000000..0489d669 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityArclampRenderer.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityArclamp; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityArclampRenderer extends TileEntitySpecialRenderer +{ + + public static final ResourceLocation lampTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/underoil.png"); + public static final ResourceLocation lightTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/light.png"); + private static IBakedModel lampMetal; + + @Override + public void render(TileEntityArclamp tileEntity, double d, double d1, double d2, float f, int par9, float alpha) + { + this.updateModels(); + int side = tileEntity.getBlockMetadata(); + int metaFacing = tileEntity.facing; + + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1 + 0.5F, (float) d2 + 0.5F); + RenderHelper.enableStandardItemLighting(); + GlStateManager.enableRescaleNormal(); + + switch (side) + { + case 0: + break; + case 1: + GlStateManager.rotate(180F, 1F, 0, 0); + if (metaFacing < 2) + { + metaFacing ^= 1; + } + break; + case 2: + GlStateManager.rotate(90F, 1F, 0, 0); + metaFacing ^= 1; + break; + case 3: + GlStateManager.rotate(90F, -1F, 0, 0); + break; + case 4: + GlStateManager.rotate(90F, 0, 0, -1F); + metaFacing -= 2; + if (metaFacing < 0) + { + metaFacing = 1 - metaFacing; + } + break; + case 5: + GlStateManager.rotate(90F, 0, 0, 1F); + metaFacing += 2; + if (metaFacing > 3) + { + metaFacing = 5 - metaFacing; + } + break; + } + + GlStateManager.translate(0, -0.175F, 0); + + switch (metaFacing) + { + case 0: + break; + case 1: + GlStateManager.rotate(180F, 0, 1F, 0); + break; + case 2: + GlStateManager.rotate(90F, 0, 1F, 0); + break; + case 3: + GlStateManager.rotate(270F, 0, 1F, 0); + break; + } + + this.bindTexture(TileEntityArclampRenderer.lampTexture); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.rotate(45F, -1F, 0, 0); + GlStateManager.scale(0.048F, 0.048F, 0.048F); + ClientUtil.drawBakedModel(TileEntityArclampRenderer.lampMetal); + RenderHelper.disableStandardItemLighting(); + + float greyLevel = tileEntity.getEnabled() ? 1.0F : 26F / 255F; + // Save the lighting state + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GlStateManager.disableLighting(); + + this.bindTexture(TileEntityArclampRenderer.lightTexture); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableTexture2D(); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(greyLevel, greyLevel, greyLevel, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + float frameA = -3.4331F; // These co-ordinates came originally from + // arclamp_light.obj model + float frameB = -frameA; // These co-ordinates came originally from + // arclamp_light.obj model + float frameY = 2.3703F; // These co-ordinates came originally from + // arclamp_light.obj model + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameA).endVertex(); + worldRenderer.pos(frameA, frameY, frameA).endVertex(); + tess.draw(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableTexture2D(); + // ? need to undo GlStateManager.glBlendFunc()? + + // Restore the lighting state + GlStateManager.enableLighting(); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + GlStateManager.popMatrix(); + } + + private void updateModels() + { + if (lampMetal == null) + { + try + { + lampMetal = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "arclamp_metal.obj")); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityBubbleProviderRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityBubbleProviderRenderer.java new file mode 100644 index 00000000..6d56049e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityBubbleProviderRenderer.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProvider; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@Deprecated +public class TileEntityBubbleProviderRenderer extends TileEntitySpecialRenderer +{ + + private static IBakedModel sphere; + + private final float colorRed; + private final float colorGreen; + private final float colorBlue; + + public TileEntityBubbleProviderRenderer(float colorRed, float colorGreen, float colorBlue) + { + this.colorRed = colorRed; + this.colorGreen = colorGreen; + this.colorBlue = colorBlue; + } + + private static void updateModels() + { + if (sphere == null) + { + try + { + sphere = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "sphere.obj"), ImmutableList.of("Sphere")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void render(E provider, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (!provider.getBubbleVisible()) + { + return; + } + + updateModels(); + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glTranslatef((float) x + 0.5F, (float) y + 1.0F, (float) z + 0.5F); + + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(this.colorRed / 2.0F, this.colorGreen / 2.0F, this.colorBlue / 2.0F, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glDepthMask(false); + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GL11.glScalef(provider.getBubbleSize(), provider.getBubbleSize(), provider.getBubbleSize()); + + int color = ColorUtil.to32BitColor(30, (int) (this.colorBlue / 2.0F * 255), (int) (this.colorGreen / 2.0F * 255), (int) (this.colorRed / 2.0F * 255)); + ClientUtil.drawBakedModelColored(sphere, color); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glDepthMask(true); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glEnable(GL11.GL_CULL_FACE); + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityDishRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityDishRenderer.java new file mode 100644 index 00000000..f5e90156 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityDishRenderer.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDish; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class TileEntityDishRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation textureSupport = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/telesupport.png"); + private static final ResourceLocation textureFork = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/telefork.png"); + private static final ResourceLocation textureDish = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/teledish.png"); + private static IBakedModel modelSupport; + private static IBakedModel modelFork; + private static IBakedModel modelDish; + private TextureManager renderEngine = FMLClientHandler.instance().getClient().renderEngine; + + private void updateModels() + { + if (modelDish == null) + { + try + { + modelDish = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "teledish.obj")); + modelFork = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "telefork.obj")); + modelSupport = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "telesupport.obj")); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + @Override + public void render(TileEntityDish tile, double par2, double par4, double par6, float partialTickTime, int par9, float alpha) + { + this.updateModels(); + TileEntityDish dish = (TileEntityDish) tile; + float hour = dish.rotation(partialTickTime) % 360F; + float declination = dish.elevation(partialTickTime) % 360F; + + final EntityPlayer player = FMLClientHandler.instance().getClient().player; + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + GL11.glTranslatef(0.5F, 1.0F, 0.5F); + GL11.glScalef(1.6F, 1.25F, 1.6F); + + this.renderEngine.bindTexture(textureSupport); + ClientUtil.drawBakedModel(modelSupport); + GL11.glScalef(1.25F, 1.6F, 1.25F); + GL11.glTranslatef(0F, 2.88F * 0.15F / 1.6F, 0F); + GL11.glScalef(0.85F, 0.85F, 0.85F); + GL11.glRotatef(hour, 0, -1, 0); + this.renderEngine.bindTexture(textureFork); + ClientUtil.drawBakedModel(modelFork); + + GL11.glTranslatef(0.0F, 2.3F, 0.0F); + GL11.glRotatef(declination, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(0.0F, -2.3F, 0.0F); + + this.renderEngine.bindTexture(textureDish); + ClientUtil.drawBakedModel(modelDish); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityEmergencyBoxRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityEmergencyBoxRenderer.java new file mode 100644 index 00000000..4fc1838c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityEmergencyBoxRenderer.java @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockEmergencyBox; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEmergencyBox; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityEmergencyBoxRenderer extends TileEntitySpecialRenderer +{ + + private static final float MASKSCALE = 3F; + + public class Flap extends ModelBase + { + + ModelRenderer model; + protected float angle; + + public Flap() + { + this.angle = 0.0F; + this.textureWidth = 32; + this.textureHeight = 32; + this.model = new ModelRenderer(this, 0, 0); + this.model.addBox(-6F, -6F, 0F, 12, 6, 1); + this.model.setRotationPoint(0F, 6F, -7F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void render() + { + this.setRotation(this.model, angle / Constants.RADIANS_TO_DEGREES, 0F, 0F); + this.model.render(1F / 16F); + } + } + + public class Plinth extends ModelBase + { + + ModelRenderer model; + + public Plinth() + { + this.textureWidth = 16; + this.textureHeight = 16; + this.model = new ModelRenderer(this, 0, 0); + this.model.addBox(-6F, -7F, -6F, 12, 1, 12); + this.model.setRotationPoint(0F, 0F, 0F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + public void render(float height) + { + this.model.setRotationPoint(0F, height, 0F); + this.model.render(1F / 16F); + } + } + + public class Mask extends ModelBase + { + + ModelRenderer model; + + public Mask() + { + this.textureWidth = 128; + this.textureHeight = 64; + this.model = new ModelRenderer(this, 0, 0); + this.model.addBox(-8.0F, -4F, -8.0F, 16, 16, 16, 1.0F); + this.model.setRotationPoint(0F, 0F, 0F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + public void render(float height) + { + this.model.setRotationPoint(0F, height * MASKSCALE, 0F); + this.model.render(1F / 16F / MASKSCALE); + } + } + + public class Tank extends ModelBase + { + + ModelRenderer model; + + public Tank() + { + this.textureWidth = 128; + this.textureHeight = 64; + this.model = new ModelRenderer(this, 0, 0); + this.model.setTextureOffset(4, 0); // Green tank + this.model.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, 1.0F); + this.model.setRotationPoint(0F, 0F, 0F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + public void render(float height) + { + this.model.setRotationPoint(0F, height * MASKSCALE, 0F); + this.model.render(1F / 16F / MASKSCALE); + } + } + + public class Pack extends ModelBase + { + + ModelRenderer model; + + public Pack() + { + this.textureWidth = 256; + this.textureHeight = 256; + this.model = new ModelRenderer(this, 0, 0); + this.model.setTextureOffset(50, 50); + this.model.addBox(-6F, -11F, -10F, 12, 1, 20, 1.0F); + this.model.setRotationPoint(0F, 0F, 0F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + public void render(float height) + { + this.model.setRotationPoint(0F, height * 2F, 0F); + this.model.render(1F / 32F); + } + } + + private static final ResourceLocation boxTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/emergency_box.png"); + private static final ResourceLocation flapTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/emergency_box_flap.png"); + private static final ResourceLocation packTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/red.png"); + private static final ResourceLocation oxygenMaskTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/oxygen.png"); + private static final ResourceLocation oxygenTankTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/player.png"); + private Flap flapA = new Flap(); + private Flap flapB = new Flap(); + private Flap flapC = new Flap(); + private Flap flapD = new Flap(); + private Plinth plat = new Plinth(); + private Mask mask = new Mask(); + private Tank tank = new Tank(); + private Pack pack = new Pack(); + + @Override + public void render(TileEntityEmergencyBox tileEntity, double d, double d1, double d2, float f, int par9, float alpha) + { + IBlockState b = tileEntity.getWorld().getBlockState(tileEntity.getPos()); + if (!(b.getBlock() instanceof BlockEmergencyBox)) + return; + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1 + 0.5F, (float) d2 + 0.5F); + + flapA.angle = tileEntity.getAngleA(f); + flapB.angle = tileEntity.getAngleB(f); + flapC.angle = tileEntity.getAngleC(f); + flapD.angle = tileEntity.getAngleD(f); + float height = Math.max(Math.max(flapA.angle, flapB.angle), Math.max(flapC.angle, flapD.angle)) / 90F; + + if (height > 0F && b.getValue(BlockEmergencyBox.KIT)) + { + GlStateManager.pushMatrix(); + this.bindTexture(packTexture); + this.pack.render(height); + GlStateManager.rotate(180F, 1F, 0F, 0F); + this.bindTexture(oxygenMaskTexture); + GlStateManager.translate(0.0F, 0.0F, -0.07F); + this.mask.render(-height); + this.bindTexture(oxygenTankTexture); + GlStateManager.translate(0.1F, 0.11F, 0.3F); + this.tank.render(-height); + GlStateManager.translate(-0.2F, 0F, 0F); + this.tank.render(-height); + GlStateManager.popMatrix(); + } + + this.bindTexture(boxTexture); + this.plat.render(height); + this.bindTexture(flapTexture); + this.flapA.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapB.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapC.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapD.render(); + GlStateManager.rotate(180F, 1F, 0F, 0F); + this.flapB.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapA.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapD.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapC.render(); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidPipeRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidPipeRenderer.java new file mode 100644 index 00000000..9a54448d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidPipeRenderer.java @@ -0,0 +1,374 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import com.google.common.collect.Maps; +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.Fluid; +import org.lwjgl.opengl.GL11; + +public class TileEntityFluidPipeRenderer extends TileEntitySpecialRenderer +{ + + private static HashMap> cache = new HashMap<>(); + + private final int stages = 100; + + @Override + public void render(TileEntityFluidPipe pipe, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (pipe.getBlockType() == GCBlocks.oxygenPipePull) + { + GL11.glPushMatrix(); + + GL11.glTranslatef((float) x, (float) y, (float) z); + + RenderHelper.disableStandardItemLighting(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + TileEntity[] adj = OxygenUtil.getAdjacentFluidConnections(pipe); + + for (EnumFacing facing : EnumFacing.VALUES) + { + TileEntity sideTile = adj[facing.ordinal()]; + + if (sideTile != null && !(sideTile instanceof IBufferTransmitter)) + { + GL11.glPushMatrix(); + if (sideTile instanceof TileEntityFluidTank) + switch (facing) + { + case SOUTH: + GL11.glTranslatef(0F, 0F, 1 / 16F); + break; + case NORTH: + GL11.glTranslatef(0F, 0F, -1 / 16F); + break; + case EAST: + GL11.glTranslatef(1 / 16F, 0F, 0F); + break; + case WEST: + GL11.glTranslatef(-1 / 16F, 0F, 0F); + break; + default: + break; + } + ClientUtil.drawBakedModel(EventHandlerClient.fluidPipeModels[facing.ordinal()]); + GL11.glPopMatrix(); + } + } + + GL11.glPopMatrix(); + } + + float scale; + + if (pipe.hasNetwork()) + { + FluidNetwork network = (FluidNetwork) pipe.getNetwork(); + scale = network.fluidScale; + } else + { + scale = pipe.buffer.getFluidAmount() / (float) pipe.buffer.getCapacity(); + } + + Fluid fluid; + + if (pipe.hasNetwork()) + { + FluidNetwork network = (FluidNetwork) pipe.getNetwork(); + fluid = network.refFluid; + } else + { + fluid = pipe.getBuffer() == null ? null : pipe.getBuffer().getFluid(); + } + + if (fluid == null) + { + return; + } + + if (scale > 0.01) + { + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + float opacity = 1.0F; + + boolean gas = fluid.isGaseous(); + + if (gas) + { + opacity = scale; + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, opacity); + + TileEntity[] connections = OxygenUtil.getAdjacentFluidConnections(pipe); + + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity sideTile = connections[side.ordinal()]; + if (sideTile != null) + { + Integer[] displayLists = getListAndRender(side, fluid); + + if (displayLists != null) + { + if (!gas) + { + Integer list = displayLists[Math.max(3, (int) (scale * (stages - 1)))]; + GL11.glCallList(list); + } else + { + Integer list = displayLists[stages - 1]; + GL11.glCallList(list); + } + } + } + } + + Integer[] displayLists = getListAndRender(null, fluid); + + if (displayLists != null) + { + if (!gas) + { + Integer list = displayLists[Math.max(3, (int) (scale * (stages - 1)))]; + GL11.glCallList(list); + } else + { + Integer list = displayLists[stages - 1]; + GL11.glCallList(list); + } + } + + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + } + + private Integer[] getListAndRender(EnumFacing side, Fluid fluid) + { + if (fluid == null) + { + return null; + } + + TextureAtlasSprite sprite = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(fluid.getStill().toString()); + int sideIndex = side == null ? 6 : side.ordinal(); + + if (cache.containsKey(sideIndex) && cache.get(sideIndex).containsKey(fluid)) + { + return cache.get(sideIndex).get(fluid); + } + + float size = 0.09F; + float mid = 0.0F; + float minX; + float maxX; + float minY; + float maxY; + float minZ; + float maxZ; + + Integer[] displayLists = new Integer[this.stages]; + + if (cache.containsKey(sideIndex)) + { + cache.get(sideIndex).put(fluid, displayLists); + } else + { + HashMap map = Maps.newHashMap(); + map.put(fluid, displayLists); + cache.put(sideIndex, map); + } + + for (int i = 0; i < stages; ++i) + { + displayLists[i] = GLAllocation.generateDisplayLists(1); + GL11.glNewList(displayLists[i], GL11.GL_COMPILE); + + float level = (i / (float) stages); + + switch (sideIndex) + { + case 0: + minX = mid - level * size; + maxX = mid + level * size; + minY = mid + size; + maxY = mid + 0.5F; + minZ = mid - level * size; + maxZ = mid + level * size; + break; + case 1: + minX = mid - level * size; + maxX = mid + level * size; + minY = mid - 0.5F; + maxY = mid - size; + minZ = mid - level * size; + maxZ = mid + level * size; + break; + case 2: + minX = mid - size; + maxX = mid + size; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid + size; + maxZ = mid + 0.5F; + break; + case 3: + minX = mid - size; + maxX = mid + size; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid - 0.5F; + maxZ = mid - size; + break; + case 4: + minX = mid - 0.5F; + maxX = mid - size; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid - size; + maxZ = mid + size; + break; + case 5: + minX = mid + size; + maxX = mid + 0.5F; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid - size; + maxZ = mid + size; + break; + default: + minX = mid - size; + maxX = mid + size; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid - size; + maxZ = mid + size; + break; + } + + renderBox(minX, maxX, minY, maxY, minZ, maxZ, level, sprite); + GL11.glEndList(); + } + + return displayLists; + } + + private void renderBox(float minX, float maxX, float minY, float maxY, float minZ, float maxZ, float level, TextureAtlasSprite sprite) + { + final double uMin = sprite.getMinU(); + final double uMax = sprite.getMaxU(); + final double vMin = sprite.getMinV(); + final double vMax = sprite.getMaxV(); + + Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + + double uDiff = (uMax - uMin); + double vDiff = (vMax - vMin); + double texMinX_U = uMin + (minX + 0.5F) * uDiff; + double texMaxX_U = uMin + (maxX + 0.5F) * uDiff; + double texMinZ_U = uMin + (minZ + 0.5F) * uDiff; + double texMaxZ_U = uMin + (maxZ + 0.5F) * uDiff; + double texMinX_V = vMin + (minX + 0.5F) * vDiff; + double texMaxX_V = vMin + (maxX + 0.5F) * vDiff; + double texMinY_V = vMin + (minY + 0.5F) * vDiff; + double texMaxY_V = vMin + (maxY + 0.5F) * vDiff; + + // North + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minX, minY, minZ).tex(texMinX_U, texMinY_V).endVertex(); + worldRenderer.pos(minX, maxY, minZ).tex(texMinX_U, texMaxY_V).endVertex(); + worldRenderer.pos(maxX, maxY, minZ).tex(texMaxX_U, texMaxY_V).endVertex(); + worldRenderer.pos(maxX, minY, minZ).tex(texMaxX_U, texMinY_V).endVertex(); + tess.draw(); + + // South + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(maxX, minY, maxZ).tex(texMaxX_U, texMinY_V).endVertex(); + worldRenderer.pos(maxX, maxY, maxZ).tex(texMaxX_U, texMaxY_V).endVertex(); + worldRenderer.pos(minX, maxY, maxZ).tex(texMinX_U, texMaxY_V).endVertex(); + worldRenderer.pos(minX, minY, maxZ).tex(texMinX_U, texMinY_V).endVertex(); + tess.draw(); + + // West + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minX, maxY, minZ).tex(texMinZ_U, texMaxY_V).endVertex(); + worldRenderer.pos(minX, minY, minZ).tex(texMinZ_U, texMinY_V).endVertex(); + worldRenderer.pos(minX, minY, maxZ).tex(texMaxZ_U, texMinY_V).endVertex(); + worldRenderer.pos(minX, maxY, maxZ).tex(texMaxZ_U, texMaxY_V).endVertex(); + tess.draw(); + + // East + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(maxX, maxY, maxZ).tex(texMaxZ_U, texMaxY_V).endVertex(); + worldRenderer.pos(maxX, minY, maxZ).tex(texMaxZ_U, texMinY_V).endVertex(); + worldRenderer.pos(maxX, minY, minZ).tex(texMinZ_U, texMinY_V).endVertex(); + worldRenderer.pos(maxX, maxY, minZ).tex(texMinZ_U, texMaxY_V).endVertex(); + tess.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(maxX, minY, maxZ).tex(texMaxZ_U, texMaxX_V).endVertex(); + worldRenderer.pos(minX, minY, maxZ).tex(texMaxZ_U, texMinX_V).endVertex(); + worldRenderer.pos(minX, minY, minZ).tex(texMinZ_U, texMinX_V).endVertex(); + worldRenderer.pos(maxX, minY, minZ).tex(texMinZ_U, texMaxX_V).endVertex(); + tess.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(maxX, maxY, maxZ).tex(texMaxZ_U, texMaxX_V).endVertex(); + worldRenderer.pos(maxX, maxY, minZ).tex(texMinZ_U, texMaxX_V).endVertex(); + worldRenderer.pos(minX, maxY, minZ).tex(texMinZ_U, texMinX_V).endVertex(); + worldRenderer.pos(minX, maxY, maxZ).tex(texMaxZ_U, texMinX_V).endVertex(); + tess.draw(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidTankRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidTankRenderer.java new file mode 100644 index 00000000..6b7c1781 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidTankRenderer.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import org.lwjgl.opengl.GL11; + +public class TileEntityFluidTankRenderer extends TileEntitySpecialRenderer +{ + + @Override + public void render(TileEntityFluidTank tank, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + FluidTankInfo[] info = tank.getTankInfo(EnumFacing.DOWN); + + if (info.length != 1) + { + return; + } + FluidStack tankFluid = info[0].fluid; + if (tankFluid == null || tankFluid.getFluid() == null || (!tankFluid.getFluid().isGaseous() && tankFluid.amount == 0)) + { + return; + } + + TileEntityFluidTank tankAbove = tank.getNextTank(tank.getPos()); + TileEntityFluidTank tankBelow = tank.getPreviousTank(tank.getPos()); + + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + TextureAtlasSprite sprite = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(tankFluid.getFluid().getStill().toString()); + final double uMin = sprite.getMinU(); + final double uMax = sprite.getMaxU(); + final double vMin = sprite.getMinV(); + final double vMax = sprite.getMaxV(); + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) x, (float) y + 1.5F, (float) z + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + + float level = 1.0F; + float levelInv = 0.0F; + float opacity = 1.0F; + + boolean compositeGaseous = tankFluid.getFluid().isGaseous(); + + if (compositeGaseous) + { + opacity = Math.min(tankFluid.amount / (float) info[0].capacity * 0.8F + 0.2F, 1F); + } else + { + level = tank.fluidTank.getFluidAmount() / 16400.0F; + if (level <= 0.012F) + { + levelInv = 1.0F; // Empty tanks render empty - see #3222 + } else + { + levelInv = 0.988F - level; // 1.2% inset from each end of the + // tank, to avoid z-fighting with + // blocks above/below + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, opacity); + + if (levelInv < 1.0F) + { + // North + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-0.4, levelInv, -0.399).tex(uMin, vMin).endVertex(); + worldRenderer.pos(-0.4, 1.0, -0.399).tex(uMin, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(0.4, 1.0, -0.399).tex(uMax, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(0.4, levelInv, -0.399).tex(uMax, vMin).endVertex(); + tess.draw(); + + // South + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.4, levelInv, 0.399).tex(uMax, vMin).endVertex(); + worldRenderer.pos(0.4, 1.0, 0.399).tex(uMax, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(-0.4, 1.0, 0.399).tex(uMin, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(-0.4, levelInv, 0.399).tex(uMin, vMin).endVertex(); + tess.draw(); + + // West + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-0.399, 1.0, -0.4).tex(uMin, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(-0.399, levelInv, -0.4).tex(uMin, vMin).endVertex(); + worldRenderer.pos(-0.399, levelInv, 0.4).tex(uMax, vMin).endVertex(); + worldRenderer.pos(-0.399, 1.0, 0.4).tex(uMax, vMin + (vMax - vMin) * level).endVertex(); + tess.draw(); + + // East + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.399, 1.0, 0.4).tex(uMax, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(0.399, levelInv, 0.4).tex(uMax, vMin).endVertex(); + worldRenderer.pos(0.399, levelInv, -0.4).tex(uMin, vMin).endVertex(); + worldRenderer.pos(0.399, 1.0, -0.4).tex(uMin, vMin + (vMax - vMin) * level).endVertex(); + tess.draw(); + + if (tankAbove == null || (tankAbove.fluidTank.getFluidAmount() == 0 && !compositeGaseous)) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.4, 0.01 + levelInv, 0.4).tex(uMax, vMax).endVertex(); + worldRenderer.pos(-0.4, 0.01 + levelInv, 0.4).tex(uMax, vMin).endVertex(); + worldRenderer.pos(-0.4, 0.01 + levelInv, -0.4).tex(uMin, vMin).endVertex(); + worldRenderer.pos(0.4, 0.01 + levelInv, -0.4).tex(uMin, vMax).endVertex(); + tess.draw(); + } + + if (tankBelow == null || (tankBelow.fluidTank.getFluidAmount() == 0 && !compositeGaseous)) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.4, 0.99, 0.4).tex(uMax, vMax).endVertex(); + worldRenderer.pos(0.4, 0.99, -0.4).tex(uMin, vMax).endVertex(); + worldRenderer.pos(-0.4, 0.99, -0.4).tex(uMin, vMin).endVertex(); + worldRenderer.pos(-0.4, 0.99, 0.4).tex(uMax, vMin).endVertex(); + tess.draw(); + } + } + + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPanelLightRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPanelLightRenderer.java new file mode 100644 index 00000000..edd038b3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPanelLightRenderer.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityPanelLightRenderer extends TileEntitySpecialRenderer +{ + + public static final ResourceLocation lightTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/light.png"); + + @Override + public void render(TileEntityPanelLight tileEntity, double d, double d1, double d2, float f, int par9, float alpha) + { + int side = tileEntity.meta; + int rot = side >> 3; + side = (side & 7) ^ 1; + BlockPanelLighting.PanelType type = tileEntity.getType(); + + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1 + 0.5F, (float) d2 + 0.5F); + + switch (side) + { + case 0: + break; + case 1: + GlStateManager.rotate(180F, 1F, 0, 0); + break; + case 2: + GlStateManager.rotate(90F, 1F, 0, 0); + break; + case 3: + GlStateManager.rotate(90F, -1F, 0, 0); + break; + case 4: + GlStateManager.rotate(90F, 0, 0, -1F); + rot = (rot + 1) % 4; + break; + case 5: + GlStateManager.rotate(90F, 0, 0, 1F); + rot = (rot + 1) % 4; + break; + } + + if (rot > 0) + { + GlStateManager.rotate(90F * rot, 0, 1F, 0F); + } + + if (type == BlockPanelLighting.PanelType.SFDIAG) + { + GlStateManager.rotate(45F, 0, 1F, 0F); + } + + GlStateManager.translate(-0.5F, -0.5F, -0.5F); + RenderHelper.disableStandardItemLighting(); + + if (tileEntity.getEnabled()) + { + ColorUtil.setGLColor(tileEntity.color); + } else + { + float greyLevel = 24F / 255F; + GlStateManager.color(greyLevel, greyLevel, greyLevel, 1.0F); + } + + // Save the lighting state + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GlStateManager.disableLighting(); + + this.bindTexture(TileEntityArclampRenderer.lightTexture); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableTexture2D(); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + float frameY = 1.01F; + float frameA, frameB, frameC; + switch (type) + { + case SQUARE: + default: + frameA = 0.15F; + frameB = 0.5F; + frameC = frameA; + break; + case SPOTS: + frameA = 0.21F; + frameB = 0.29F; + frameC = frameA; + break; + case LINEAR: + frameA = 0.08F; + frameB = 0.5F; + frameC = 0.36F; + break; + case SF: + case SFDIAG: + frameA = 0.1F; + frameB = 0.4F; + frameC = 0.35F; + } + if (type != BlockPanelLighting.PanelType.SFDIAG) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(1.0F - frameA, frameY, frameC).endVertex(); + worldRenderer.pos(1.0F - frameB, frameY, frameC).endVertex(); + worldRenderer.pos(1.0F - frameB, frameY, frameB).endVertex(); + worldRenderer.pos(1.0F - frameA, frameY, frameB).endVertex(); + tess.draw(); + frameA = 1.0F - frameA; + frameB = 1.0F - frameB; + frameC = 1.0F - frameC; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(1.0F - frameA, frameY, frameC).endVertex(); + worldRenderer.pos(1.0F - frameB, frameY, frameC).endVertex(); + worldRenderer.pos(1.0F - frameB, frameY, frameB).endVertex(); + worldRenderer.pos(1.0F - frameA, frameY, frameB).endVertex(); + tess.draw(); + } else + { + frameA += 0.02F; + GlStateManager.translate(0.239F, 0F, -0.345F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + frameA += 0.02F; + GlStateManager.translate(0.23F, 0F, 0.233F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + GlStateManager.translate(-0.48F, 0F, 0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + } + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableTexture2D(); + // ? need to undo GlStateManager.glBlendFunc()? + + // Restore the lighting state + GlStateManager.enableLighting(); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + RenderHelper.enableStandardItemLighting(); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPlatformRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPlatformRenderer.java new file mode 100644 index 00000000..e01d9ad0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPlatformRenderer.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import java.util.HashMap; +import java.util.Map; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockPlatform; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityPlatformRenderer extends TileEntitySpecialRenderer +{ + + public class ModelPlatform extends ModelBase + { + + ModelRenderer panelMain; + + public ModelPlatform() + { + this(0.0F); + } + + public ModelPlatform(float var1) + { + this.textureWidth = 128; + this.textureHeight = 128; + this.panelMain = new ModelRenderer(this, 0, 0); + this.panelMain.addBox(-22F, -3.5F, -22F, 44, 7, 44); + this.panelMain.setRotationPoint(0F, 0F, 0F); + this.panelMain.setTextureSize(128, 128); + this.panelMain.mirror = true; + this.setRotation(this.panelMain, 0F, 0F, 0F); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void render() + { + this.panelMain.render(1.125F / 44F); + } + } + + public static final ResourceLocation platformTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/platform_moving.png"); + public static final ResourceLocation lightTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/light.png"); + private ModelPlatform platform = new ModelPlatform(); + private static Map lastYMap = new HashMap<>(); + private static float lastPartialTicks = -1F; + + @Override + public void render(TileEntityPlatform tileEntity, double d, double d1, double d2, float f, int par9, float alpha) + { + if (f != lastPartialTicks) + { + lastPartialTicks = f; + lastYMap.clear(); + } + IBlockState b = tileEntity.getWorld().getBlockState(tileEntity.getPos()); + float yOffset = tileEntity.getYOffset(f); + if (b.getBlock() == GCBlocks.platform && b.getValue(BlockPlatform.CORNER) == BlockPlatform.EnumCorner.NW) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1 + 0.5F, (float) d2 + 0.5F); + GlStateManager.rotate(90F, 0, 1F, 0F); + GlStateManager.translate(-0.5F, -0.5F, 0.5F); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + + // Render a moving platform + boolean renderPlatformForThisTE = false; + float newY = (float) d1 + yOffset; + int xz = tenLSB(tileEntity.getPos().getX()) << 10; + xz += tenLSB(tileEntity.getPos().getZ()); + Float lastYF = lastYMap.get(xz); + float lastY = lastYF == null ? -1 : lastYF; + if (!tileEntity.isMoving() || Math.abs(newY - lastY) > 0.001F || Math.abs(f - lastPartialTicks) > 0.001F) + { + renderPlatformForThisTE = true; + lastYMap.put(xz, newY); + GlStateManager.pushMatrix(); + if (tileEntity.isMoving()) + { + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, tileEntity.getMeanLightX(yOffset), tileEntity.getMeanLightZ(yOffset)); + } else + { + int light = tileEntity.getBlendedLight(); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) (light % 65536), (float) (light / 65536)); + } + GlStateManager.translate(0F, 0.79F + yOffset, 0F); + this.bindTexture(TileEntityPlatformRenderer.platformTexture); + this.platform.render(); + GlStateManager.popMatrix(); + } + + if (tileEntity.lightEnabled() || tileEntity.isMoving()) + { + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GlStateManager.disableLighting(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableTexture2D(); + + this.bindTexture(TileEntityPlatformRenderer.lightTexture); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + float frameA, frameB, frameC, frameD; + + // Draw the moving platform side-lights + if (tileEntity.isMoving() && renderPlatformForThisTE) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(0F, 0.26F + yOffset, 0F); + GlStateManager.color(1.0F, 0.84F, 65F / 255F, 1.0F); + + float frameRadius = 1.126F / 2F; + frameB = frameRadius - 0.04F; + frameC = -frameB; + frameA = 0.552F; + frameD = 0.578F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + frameA = 0.482F; + frameD = 0.504666F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + frameA = 0.552F; + frameD = 0.578F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + frameA = 0.482F; + frameD = 0.504666F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + frameA = 0.552F; + frameD = 0.578F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + frameA = 0.482F; + frameD = 0.504666F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + frameA = 0.552F; + frameD = 0.578F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + frameA = 0.482F; + frameD = 0.504666F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + + GlStateManager.popMatrix(); + } + + // Draw the activation lights + if (tileEntity.lightEnabled()) + { + float greyLevel = 125F / 255F; + switch (tileEntity.lightColor()) + { + case 1: + GlStateManager.color(1.0F, 115F / 255F, 115F / 255F, 1.0F); + break; + default: + GlStateManager.color(greyLevel, 1.0F, greyLevel, 1.0F); + } + + float frameY = 0.9376F; + frameC = 0.7F; + frameD = 0.58F; + frameB = frameC + 0.02F; + frameA = -frameD; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + } + + // Restore the lighting state + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + // ? need to undo GlStateManager.glBlendFunc()? + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + } + + GlStateManager.enableRescaleNormal(); + RenderHelper.enableStandardItemLighting(); + GlStateManager.popMatrix(); + } + } + + private int tenLSB(int x) + { + if (x < 0) + return x % 1024 + 1024; + + return x % 1024; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityScreenRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityScreenRenderer.java new file mode 100644 index 00000000..847caae2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityScreenRenderer.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import java.nio.FloatBuffer; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityScreenRenderer extends TileEntitySpecialRenderer +{ + + public static final ResourceLocation blockTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/screen_side.png"); + private TextureManager renderEngine = FMLClientHandler.instance().getClient().renderEngine; + private static FloatBuffer colorBuffer = GLAllocation.createDirectFloatBuffer(16); + + private float yPlane = 0.91F; + float frame = 0.098F; + + @Override + public void render(TileEntityScreen screen, double par2, double par4, double par6, float partialTickTime, int par9, float alpha) + { + GL11.glPushMatrix(); + // Texture file + this.renderEngine.bindTexture(TileEntityScreenRenderer.blockTexture); + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + + int meta = screen.getBlockMetadata(); + boolean screenData = (meta >= 8); + meta &= 7; + + switch (meta) + { + case 0: + GL11.glRotatef(180, 1, 0, 0); + GL11.glTranslatef(0, -1.0F, -1.0F); + break; + case 1: + break; + case 2: + GL11.glTranslatef(0.0F, 0.0F, -0.87F); + GL11.glRotatef(90, 1.0F, 0, 0); + GL11.glTranslatef(0.0F, 0.0F, -1.0F); + break; + case 3: + GL11.glTranslatef(0.0F, 0.0F, 0.87F); + GL11.glRotatef(90, -1.0F, 0, 0); + GL11.glTranslatef(1.0F, -1.0F, 1.0F); + GL11.glRotatef(180, 0, -1.0F, 0); + break; + case 4: + GL11.glTranslatef(-0.87F, 0.0F, 0.0F); + GL11.glRotatef(90, 0, 0, -1.0F); + GL11.glTranslatef(-1.0F, 0.0F, 1.0F); + GL11.glRotatef(90, 0, 1.0F, 0); + break; + case 5: + GL11.glTranslatef(0.87F, 0.0F, 0.0F); + GL11.glRotatef(90, 0, 0, 1.0F); + GL11.glTranslatef(1.0F, -1.0F, 0.0F); + GL11.glRotatef(90, 0, -1.0F, 0); + break; + default: + break; + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + GL11.glTranslatef(-screen.screenOffsetx, this.yPlane, -screen.screenOffsetz); + GL11.glRotatef(90, 1F, 0F, 0F); + boolean cornerblock = false; + if (screen.connectionsLeft == 0 || screen.connectionsRight == 0) + { + cornerblock = (screen.connectionsUp == 0 || screen.connectionsDown == 0); + } + int totalLR = screen.connectionsLeft + screen.connectionsRight; + int totalUD = screen.connectionsUp + screen.connectionsDown; + if (totalLR > 1 && totalUD > 1 && !cornerblock) + { + // centre block + if (screen.connectionsLeft == screen.connectionsRight - (totalLR | 1)) + { + if (screen.connectionsUp == screen.connectionsDown - (totalUD | 1)) + { + cornerblock = true; + } + } + } + GL11.glRotatef(180, 0, 1, 0); + GL11.glTranslatef(-screen.screen.getScaleX(), 0.0F, 0.0F); + screen.screen.drawScreen(screen.imageType, partialTickTime + screen.getWorld().getWorldTime(), cornerblock); + + GL11.glPopMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntitySolarPanelRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntitySolarPanelRenderer.java new file mode 100644 index 00000000..a58fd66f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntitySolarPanelRenderer.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelSolarPanel; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class TileEntitySolarPanelRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation solarPanelTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/solar_panel_basic.png"); + private static final ResourceLocation solarPanelAdvTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/solar_panel_advanced.png"); + public ModelSolarPanel model = new ModelSolarPanel(); + + @Override + public void render(TileEntitySolar panel, double par2, double par4, double par6, float partialTickTime, int par9, float alpha) + { + boolean doSkyRotation = false; + if (panel.tierGC == 2) + { + this.bindTexture(TileEntitySolarPanelRenderer.solarPanelAdvTexture); + doSkyRotation = panel.getWorld().provider instanceof WorldProviderSpaceStation; + } else + { + this.bindTexture(TileEntitySolarPanelRenderer.solarPanelTexture); + } + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + + GL11.glTranslatef(0.5F, 1.0F, 0.5F); + if (doSkyRotation) + { + GL11.glPushMatrix(); + GL11.glRotatef(((WorldProviderSpaceStation) panel.getWorld().provider).getSkyRotation(), 0.0F, 1.0F, 0.0F); + this.model.renderPole(); + GL11.glPopMatrix(); + } else + this.model.renderPole(); + + GL11.glTranslatef(0.0F, 1.5F, 0.0F); + + GL11.glRotatef(180.0F, 0, 0, 1); + GL11.glRotatef(-90.0F, 0, 1, 0); + + float celestialAngle = (panel.getWorld().getCelestialAngle(1.0F) - 0.784690560F) * 360.0F; + float celestialAngle2 = panel.getWorld().getCelestialAngle(1.0F) * 360.0F; + + if (doSkyRotation) + { + GL11.glRotatef(((WorldProviderSpaceStation) panel.getWorld().provider).getSkyRotation(), 0.0F, -1.0F, 0.0F); + } + + GL11.glRotatef(panel.currentAngle - (celestialAngle - celestialAngle2), 1.0F, 0.0F, 0.0F); + + this.model.renderPanel(); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityTreasureChestRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityTreasureChestRenderer.java new file mode 100644 index 00000000..85c3bf5f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityTreasureChestRenderer.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelTreasureChest; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelTreasureChestLarge; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@SideOnly(Side.CLIENT) +public class TileEntityTreasureChestRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation treasureChestTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/treasure.png"); + + private final ModelTreasureChest chestModel = new ModelTreasureChest(); + + /** + * Renders the TileEntity for the chest at a position. + */ + @Override + public void render(TileEntityTreasureChest chest, double par2, double par4, double par6, float partialTickTime, int par9, float alpha) + { + int var9; + + if (!chest.hasWorld()) + { + var9 = 0; + } else + { + var9 = chest.getBlockMetadata(); + } + + ModelTreasureChest var14 = null; + ModelTreasureChestLarge var14b = null; + + var14 = this.chestModel; + this.bindTexture(TileEntityTreasureChestRenderer.treasureChestTexture); + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) par2, (float) par4 + 1.0F, (float) par6 + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + short var11 = 0; + + if (var9 == 2) + { + var11 = 180; + } + + if (var9 == 3) + { + var11 = 0; + } + + if (var9 == 4) + { + var11 = 90; + } + + if (var9 == 5) + { + var11 = -90; + } + + GL11.glRotatef(var11, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float var12 = chest.prevLidAngle + (chest.lidAngle - chest.prevLidAngle) * partialTickTime; + + var12 = 1.0F - var12; + var12 = 1.0F - var12 * var12 * var12; + + if (var14 != null) + { + var14.chestLid.rotateAngleX = -(var12 * (float) Math.PI / 4.0F); + var14.renderAll(!chest.locked); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/DrawGameScreen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/DrawGameScreen.java new file mode 100644 index 00000000..69c5388f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/DrawGameScreen.java @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.screen; + +import java.nio.FloatBuffer; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.client.IScreenManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class DrawGameScreen implements IScreenManager +{ + + private TextureManager renderEngine = FMLClientHandler.instance().getClient().renderEngine; + private static FloatBuffer colorBuffer = GLAllocation.createDirectFloatBuffer(16); + private static int texCount = 1; + + private float tickDrawn = -1F; + public boolean initialise = true; + public boolean initialiseLast = false; + private boolean readyToInitialise = false; + private int tileCount = 0; + private int callCount = 0; + private int tickMapDone = -1; + + private float scaleX; + private float scaleZ; + + public TileEntity driver; + public Class telemetryLastClass; + public String telemetryLastName; + public Entity telemetryLastEntity; + public Render telemetryLastRender; + public static DynamicTexture reusableMap; // This will be set up in + // MapUtil.resetClientBody() + public int[] localMap = null; + public boolean mapDone = false; + public boolean mapFirstTick = false; + + public DrawGameScreen(float scaleXparam, float scaleZparam, TileEntity te) + { + this.scaleX = scaleXparam; + this.scaleZ = scaleZparam; + this.driver = te; + this.mapFirstTick = true; + } + + public boolean check(float scaleXparam, float scaleZparam) + { + if (this.mapDone) + { + return this.scaleX == scaleXparam && this.scaleZ == scaleZparam; + } + + return false; + } + + private void makeMap() + { + if (this.mapDone || reusableMap == null || GCCoreUtil.getDimensionID(this.driver.getWorld()) != 0) + { + return; + } + this.localMap = new int[MapUtil.SIZE_STD2 * MapUtil.SIZE_STD2]; + boolean result = MapUtil.getMap(this.localMap, this.driver.getWorld(), this.driver.getPos()); + if (result) + { + TextureUtil.uploadTexture(reusableMap.getGlTextureId(), this.localMap, MapUtil.SIZE_STD2, MapUtil.SIZE_STD2); + mapDone = true; + } + } + + public void drawScreen(int type, float ticks, boolean cornerBlock) + { + if (type >= GalacticraftRegistry.getMaxScreenTypes()) + { + System.out.println("Wrong gamescreen type detected - this is a bug." + type); + return; + } + + if (cornerBlock) + { + if ((this.mapFirstTick || ((int) ticks) % 99 == 0) && !mapDone) + { + if (this.tickMapDone != (int) ticks) + { + this.tickMapDone = (int) ticks; + this.makeMap(); + this.mapFirstTick = false; + } + } + this.doDraw(type, ticks); + this.initialise = true; + this.initialiseLast = false; + return; + } + + // Performance code: if type > 1 then we only want + // to draw the screen once per tick, for multi-screens + + // Spend the first tick just initialising the counter + if (initialise) + { + if (!initialiseLast) + { + tickDrawn = ticks; + readyToInitialise = false; + initialiseLast = true; + return; + } + + if (!readyToInitialise) + { + if (ticks == tickDrawn) + { + return; + } + } + + if (!readyToInitialise) + { + readyToInitialise = true; + tickDrawn = ticks; + tileCount = 1; + return; + } else if (ticks == tickDrawn) + { + tileCount++; + return; + } else + { + // Start normal operations + initialise = false; + initialiseLast = false; + readyToInitialise = false; + } + } + + if (++callCount < tileCount) + { + // Normal situation, everything OK + if (callCount == 1 || tickDrawn == ticks) + { + tickDrawn = ticks; + return; + } else + // The callCount last tick was less than the tileCount, reinitialise + { + initialise = true; + // but draw this tick [probably a tileEntity moved out of the + // frustum] + } + } + + if (callCount == tileCount) + { + callCount = 0; + // Again if this is not the tickDrawn then something is wrong, + // reinitialise + if (tileCount > 1 && ticks != tickDrawn) + { + initialise = true; + } + } + + tickDrawn = ticks; + + this.doDraw(type, ticks); + } + + private void doDraw(int type, float ticks) + { + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + + if (type > 0) + { + GL11.glDisable(GL11.GL_LIGHTING); + } + + GalacticraftRegistry.getGameScreen(type).render(type, ticks, scaleX, scaleZ, this); + + if (type > 0) + { + GL11.glEnable(GL11.GL_LIGHTING); + } + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + } + + @Override + public WorldProvider getWorldProvider() + { + if (this.driver != null) + { + return driver.getWorld().provider; + } + + return null; + } + + public float getScaleZ() + { + return scaleZ; + } + + public float getScaleX() + { + return scaleX; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenBasic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenBasic.java new file mode 100644 index 00000000..a28dc641 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenBasic.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.screen; + +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.client.IScreenManager; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.render.RenderPlanet; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GameScreenBasic implements IGameScreen +{ + + private TextureManager renderEngine; + + private float frameA; + private float frameBx; + private float frameBy; + private double textureAx = 0D; + private double textureAy = 0D; + private double textureBx = 1.0D; + private double textureBy = 1.0D; + + public GameScreenBasic() + { + // This can be called from either server or client, so don't include + // client-side only code on the server. + if (GCCoreUtil.getEffectiveSide().isClient()) + { + renderEngine = FMLClientHandler.instance().getClient().renderEngine; + } + } + + @Override + public void setFrameSize(float frameSize) + { + this.frameA = frameSize; + } + + @Override + public void render(int type, float ticks, float scaleX, float scaleY, IScreenManager scr) + { + frameBx = scaleX - frameA; + frameBy = scaleY - frameA; + + if (scaleX == scaleY) + { + textureAx = 0D; + textureAy = 0D; + textureBx = 1.0D; + textureBy = 1.0D; + } else if (scaleX < scaleY) + { + textureAx = (1.0D - (scaleX / scaleY)) / 2D; + textureAy = 0D; + textureBx = 1.0D - textureAx; + textureBy = 1.0D; + } else if (scaleY < scaleX) + { + textureAx = 0D; + textureAy = (1.0D - (scaleY / scaleX)) / 2D; + textureBx = 1.0D; + textureBy = 1.0D - textureAy; + } + + switch (type) + { + case 0: + drawBlackBackground(0.09F); + break; + case 1: + if (scr instanceof DrawGameScreen && ((DrawGameScreen) scr).mapDone) + { + GlStateManager.bindTexture(DrawGameScreen.reusableMap.getGlTextureId()); + draw2DTexture(); + } else if (ClientProxyCore.overworldTexturesValid) + { + GlStateManager.pushMatrix(); + float centreX = scaleX / 2; + float centreY = scaleY / 2; + GlStateManager.translate(centreX, centreY, 0F); + RenderPlanet.renderPlanet(ClientProxyCore.overworldTextureWide.getGlTextureId(), Math.min(scaleX, scaleY) - 0.2F, ticks, 45F); + GlStateManager.popMatrix(); + } else + { + this.renderEngine.bindTexture(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png")); + if (!ClientProxyCore.overworldTextureRequestSent) + { + GalacticraftCore.packetPipeline.sendToServer( + new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {})); + ClientProxyCore.overworldTextureRequestSent = true; + } +// Overworld texture is 48x48 in a 64x64 .png file + draw2DTexture(); + } + break; + } + } + + private void draw2DTexture() + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + + worldRenderer.pos(frameA, frameBy, 0F).tex(textureAx, textureBy).endVertex(); + worldRenderer.pos(frameBx, frameBy, 0F).tex(textureBx, textureBy).endVertex(); + worldRenderer.pos(frameBx, frameA, 0F).tex(textureBx, textureAy).endVertex(); + worldRenderer.pos(frameA, frameA, 0F).tex(textureAx, textureAy).endVertex(); + tess.draw(); + } + + private void drawBlackBackground(float greyLevel) + { + GlStateManager.disableLighting(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GlStateManager.disableTexture2D(); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(greyLevel, greyLevel, greyLevel, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + worldRenderer.pos(frameA, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameA, 0.005F).endVertex(); + worldRenderer.pos(frameA, frameA, 0.005F).endVertex(); + tess.draw(); + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenCelestial.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenCelestial.java new file mode 100644 index 00000000..6786dafa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenCelestial.java @@ -0,0 +1,411 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.screen; + +import java.nio.DoubleBuffer; +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.client.IScreenManager; +import micdoodle8.mods.galacticraft.api.event.client.CelestialBodyRenderEvent; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Moon; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.galaxies.SolarSystem; +import micdoodle8.mods.galacticraft.api.galaxies.Star; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.render.RenderPlanet; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.vector.Vector3f; + +public class GameScreenCelestial implements IGameScreen +{ + + private TextureManager renderEngine; + + private float frameA; + private float frameBx; + private float frameBy; + private float centreX; + private float centreY; + private float scale; + + private final int lineSegments = 90; + private final float cos = MathHelper.cos(Constants.twoPI / lineSegments); + private final float sin = MathHelper.sin(Constants.twoPI / lineSegments); + + private DoubleBuffer planes; + + public GameScreenCelestial() + { + if (GCCoreUtil.getEffectiveSide().isClient()) + { + renderEngine = FMLClientHandler.instance().getClient().renderEngine; + planes = BufferUtils.createDoubleBuffer(4 * Double.SIZE); + } + } + + @Override + public void setFrameSize(float frameSize) + { + this.frameA = frameSize; + } + + @Override + public void render(int type, float ticks, float scaleX, float scaleY, IScreenManager scr) + { + centreX = scaleX / 2; + centreY = scaleY / 2; + frameBx = scaleX - frameA; + frameBy = scaleY - frameA; + this.scale = Math.max(scaleX, scaleY) - 0.2F; + + drawBlackBackground(0.0F); + + planeEquation(frameA, frameA, 0, frameA, frameBy, 0, frameA, frameBy, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE0, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE0); + planeEquation(frameBx, frameBy, 0, frameBx, frameA, 0, frameBx, frameA, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE1, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE1); + planeEquation(frameA, frameBy, 0, frameBx, frameBy, 0, frameBx, frameBy, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE2, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE2); + planeEquation(frameBx, frameA, 0, frameA, frameA, 0, frameA, frameA, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE3, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE3); + + switch (type) + { + case 2: + WorldProvider wp = scr.getWorldProvider(); + CelestialBody body = null; + if (wp instanceof IGalacticraftWorldProvider) + { + body = ((IGalacticraftWorldProvider) wp).getCelestialBody(); + } + if (body == null) + { + body = GalacticraftCore.planetOverworld; + } + drawCelestialBodies(body, ticks); + break; + case 3: + drawCelestialBodiesZ(GalacticraftCore.planetOverworld, ticks); + break; + case 4: + drawPlanetsTest(ticks); + break; + } + + GL11.glDisable(GL11.GL_CLIP_PLANE3); + GL11.glDisable(GL11.GL_CLIP_PLANE2); + GL11.glDisable(GL11.GL_CLIP_PLANE1); + GL11.glDisable(GL11.GL_CLIP_PLANE0); + } + + private void drawBlackBackground(float greyLevel) + { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GL11.glColor4f(greyLevel, greyLevel, greyLevel, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + worldRenderer.pos(frameA, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameA, 0.005F).endVertex(); + worldRenderer.pos(frameA, frameA, 0.005F).endVertex(); + tess.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + private void drawCelestialBodies(CelestialBody body, float ticks) + { + Star star = null; + SolarSystem solarSystem = null; + if (body instanceof Planet) + { + solarSystem = ((Planet) body).getParentSolarSystem(); + } else if (body instanceof Moon) + { + solarSystem = ((Moon) body).getParentPlanet().getParentSolarSystem(); + } else if (body instanceof Satellite) + { + solarSystem = ((Satellite) body).getParentPlanet().getParentSolarSystem(); + } + + if (solarSystem == null) + { + solarSystem = GalacticraftCore.solarSystemSol; + } + star = solarSystem.getMainStar(); + + if (star != null && star.getBodyIcon() != null) + { + this.drawCelestialBody(star, 0F, 0F, ticks, 6F); + } + + String mainSolarSystem = solarSystem.getTranslationKey(); + for (Planet planet : GalaxyRegistry.getRegisteredPlanets().values()) + { + if (planet.getParentSolarSystem() != null && planet.getBodyIcon() != null) + { + if (planet.getParentSolarSystem().getTranslationKey().equalsIgnoreCase(mainSolarSystem)) + { + Vector3f pos = this.getCelestialBodyPosition(planet, ticks); + this.drawCircle(planet); + this.drawCelestialBody(planet, pos.x, pos.y, ticks, (planet.getRelativeDistanceFromCenter().unScaledDistance < 1.5F) ? 2F : 2.8F); + } + } + } + } + + private void drawCelestialBodiesZ(CelestialBody planet, float ticks) + { + this.drawCelestialBody(planet, 0F, 0F, ticks, 11F); + + for (Moon moon : GalaxyRegistry.getRegisteredMoons().values()) + { + if (moon.getParentPlanet() == planet && moon.getBodyIcon() != null) + { + Vector3f pos = this.getCelestialBodyPosition(moon, ticks); + this.drawCircle(moon); + this.drawCelestialBody(moon, pos.x, pos.y, ticks, 4F); + } + } + + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + if (satellite.getParentPlanet() == planet) + { + Vector3f pos = this.getCelestialBodyPosition(satellite, ticks); + this.drawCircle(satellite); + this.drawCelestialBody(satellite, pos.x, pos.y, ticks, 3F); + } + } + } + + private void drawTexturedRectCBody(float x, float y, float width, float height) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, y + height, 0F).tex(0D, 1.0).endVertex(); + worldRenderer.pos(x + width, y + height, 0F).tex(1.0, 1.0).endVertex(); + worldRenderer.pos(x + width, y, 0F).tex(1.0, 0D).endVertex(); + worldRenderer.pos(x, y, 0F).tex(0D, 0D).endVertex(); + tessellator.draw(); + } + + private void drawCelestialBody(CelestialBody planet, float xPos, float yPos, float ticks, float relSize) + { + if (xPos + centreX > frameBx || xPos + centreX < frameA) + { + return; + } + if (yPos + centreY > frameBy || yPos + centreY < frameA) + { + return; + } + + GL11.glPushMatrix(); + GL11.glTranslatef(xPos + centreX, yPos + centreY, 0F); + + float alpha = 1.0F; + + CelestialBodyRenderEvent.Pre preEvent = new CelestialBodyRenderEvent.Pre(planet, planet.getBodyIcon(), 12); + MinecraftForge.EVENT_BUS.post(preEvent); + + GL11.glColor4f(1, 1, 1, alpha); + if (preEvent.celestialBodyTexture != null) + { + this.renderEngine.bindTexture(preEvent.celestialBodyTexture); + } + + if (!preEvent.isCanceled()) + { + float size = relSize / 70 * scale; + this.drawTexturedRectCBody(-size / 2, -size / 2, size, size); + } + + CelestialBodyRenderEvent.Post postEvent = new CelestialBodyRenderEvent.Post(planet); + MinecraftForge.EVENT_BUS.post(postEvent); + + GL11.glPopMatrix(); + } + + private void drawCircle(CelestialBody cBody) + { + GL11.glPushMatrix(); + GL11.glTranslatef(centreX, centreY, 0.002F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + float sd = 0.002514F * scale; + float x = this.getScale(cBody); + float y = 0; + float grey = 0.1F + 0.65F * Math.max(0F, (0.5F - x)); + x = x * scale / sd; + + GL11.glColor4f(grey, grey, grey, 1.0F); + GL11.glLineWidth(0.002F); + + GL11.glScalef(sd, sd, sd); + CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre preEvent = new CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre(cBody, new Vector3f(0.0F, 0.0F, 0.0F)); + MinecraftForge.EVENT_BUS.post(preEvent); + + if (!preEvent.isCanceled()) + { + GL11.glBegin(GL11.GL_LINE_LOOP); + + float temp; + for (int i = 0; i < lineSegments; i++) + { + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + } + + GL11.glEnd(); + } + + CelestialBodyRenderEvent.CelestialRingRenderEvent.Post postEvent = new CelestialBodyRenderEvent.CelestialRingRenderEvent.Post(cBody); + MinecraftForge.EVENT_BUS.post(postEvent); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glPopMatrix(); + } + + private Vector3f getCelestialBodyPosition(CelestialBody cBody, float ticks) + { + float timeScale = cBody instanceof Planet ? 200.0F : 2.0F; + float distanceFromCenter = this.getScale(cBody) * scale; + return new Vector3f((float) Math.sin(ticks / (timeScale * cBody.getRelativeOrbitTime()) + cBody.getPhaseShift()) * distanceFromCenter, + (float) Math.cos(ticks / (timeScale * cBody.getRelativeOrbitTime()) + cBody.getPhaseShift()) * distanceFromCenter, 0); + } + + private float getScale(CelestialBody celestialBody) + { + float distance = celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + if (distance >= 1.375F) + { + if (distance >= 1.5F) + { + distance *= 1.15F; + } else + { + distance += 0.075F; + } + } + return 1 / 140.0F * distance * (celestialBody instanceof Planet ? 25.0F : 3.5F); + } + + private void planeEquation(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3) + { + double[] result = new double[4]; + result[0] = y1 * (z2 - z3) + y2 * (z3 - z1) + y3 * (z1 - z2); + result[1] = z1 * (x2 - x3) + z2 * (x3 - x1) + z3 * (x1 - x2); + result[2] = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2); + result[3] = -(x1 * (y2 * z3 - y3 * z2) + x2 * (y3 * z1 - y1 * z3) + x3 * (y1 * z2 - y2 * z1)); + planes.put(result, 0, 4); + planes.position(0); + } + + private void drawPlanetsTest(float ticks) + { + GL11.glPushMatrix(); + GL11.glTranslatef(centreX, centreY, 0F); + + int id = (int) (ticks / 600F) % 5; + RenderPlanet.renderID(id, scale, ticks); + GL11.glPopMatrix(); + } + + private void drawTexturedRectUV(float x, float y, float width, float height, float ticks) + { + for (int ysect = 0; ysect < 6; ysect++) + { + float angle = 7.5F + 15F * ysect; + drawTexturedRectUVSixth(x, y, width, height, (ticks / (900F - 80F * MathHelper.cos(angle))) % 1F, ysect / 6F); + } + } + + private void drawTexturedRectUVSixth(float x, float y, float width, float height, float prog, float y0) + { + y0 /= 2; + prog = 1.0F - prog; + float y1 = y0 + 1 / 12F; + float y2 = 1F - y1; + float y3 = 1F - y0; + float yaa = y + height * y0; + float yab = y + height * y1; + float yba = y + height * y2; + float ybb = y + height * y3; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + if (prog <= 0.75F) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, yab, 0F).tex(prog, y1).endVertex(); + worldRenderer.pos(x + width, yab, 0F).tex(prog + 0.25F, y1).endVertex(); + worldRenderer.pos(x + width, yaa, 0F).tex(prog + 0.25F, y0).endVertex(); + worldRenderer.pos(x, yaa, 0F).tex(prog, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, ybb, 0F).tex(prog, y3).endVertex(); + worldRenderer.pos(x + width, ybb, 0F).tex(prog + 0.25F, y3).endVertex(); + worldRenderer.pos(x + width, yba, 0F).tex(prog + 0.25F, y2).endVertex(); + worldRenderer.pos(x, yba, 0F).tex(prog, y2).endVertex(); + tessellator.draw(); + } else + { + double xp = x + width * (1F - prog) / 0.25F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, yab, 0F).tex(prog, y1).endVertex(); + worldRenderer.pos(xp, yab, 0F).tex(1.0F, y1).endVertex(); + worldRenderer.pos(xp, yaa, 0F).tex(1.0F, y0).endVertex(); + worldRenderer.pos(x, yaa, 0F).tex(prog, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, ybb, 0F).tex(prog, y3).endVertex(); + worldRenderer.pos(xp, ybb, 0F).tex(1.0F, y3).endVertex(); + worldRenderer.pos(xp, yba, 0F).tex(1.0F, y2).endVertex(); + worldRenderer.pos(x, yba, 0F).tex(prog, y2).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(xp, yab, 0F).tex(0F, y1).endVertex(); + worldRenderer.pos(x + width, yab, 0F).tex(prog - 0.75F, y1).endVertex(); + worldRenderer.pos(x + width, yaa, 0F).tex(prog - 0.75F, y0).endVertex(); + worldRenderer.pos(xp, yaa, 0F).tex(0F, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(xp, ybb, 0F).tex(0F, y3).endVertex(); + worldRenderer.pos(x + width, ybb, 0F).tex(prog - 0.75F, y3).endVertex(); + worldRenderer.pos(x + width, yba, 0F).tex(prog - 0.75F, y2).endVertex(); + worldRenderer.pos(xp, yba, 0F).tex(0F, y2).endVertex(); + tessellator.draw(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenText.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenText.java new file mode 100644 index 00000000..c55ab717 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenText.java @@ -0,0 +1,466 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.screen; + +import java.lang.reflect.Method; +import java.nio.DoubleBuffer; +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.client.IScreenManager; +import micdoodle8.mods.galacticraft.api.entity.ITelemetry; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityOtherPlayerMP; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; + +public class GameScreenText implements IGameScreen +{ + + private float frameA; + private float frameBx; + private float frameBy; + private int yPos; + private DoubleBuffer planes; + private Method renderModelMethod; + private Method renderLayersMethod; + + public GameScreenText() + { + if (GCCoreUtil.getEffectiveSide().isClient()) + { + planes = BufferUtils.createDoubleBuffer(4 * Double.SIZE); + try + { + Class clazz = RenderLivingBase.class; + int count = 0; + for (Method m : clazz.getDeclaredMethods()) + { + String s = m.getName(); + if (s.equals(GCCoreUtil.isDeobfuscated() ? "renderModel" : "func_77036_a")) + { + m.setAccessible(true); + this.renderModelMethod = m; + if (count == 1) + break; + count = 1; + } else if (s.equals(GCCoreUtil.isDeobfuscated() ? "renderLayers" : "func_177093_a")) + { + m.setAccessible(true); + this.renderLayersMethod = m; + if (count == 1) + break; + count = 1; + } + } + } catch (Exception e) + { + } + } + } + + @Override + public void setFrameSize(float frameSize) + { + this.frameA = frameSize; + } + + + // TODO: Pretty this up a bit maybe? + @Override + @SideOnly(Side.CLIENT) + public void render(int type, float ticks, float sizeX, float sizeY, IScreenManager scr) + { + DrawGameScreen screen = (DrawGameScreen) scr; + + frameBx = sizeX - frameA; + frameBy = sizeY - frameA; + drawBlackBackground(0.0F); + planeEquation(frameA, frameA, 0, frameA, frameBy, 0, frameA, frameBy, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE0, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE0); + planeEquation(frameBx, frameBy, 0, frameBx, frameA, 0, frameBx, frameA, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE1, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE1); + planeEquation(frameA, frameBy, 0, frameBx, frameBy, 0, frameBx, frameBy, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE2, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE2); + planeEquation(frameBx, frameA, 0, frameA, frameA, 0, frameA, frameA, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE3, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE3); + yPos = 0; + + TileEntityTelemetry telemeter = TileEntityTelemetry.getNearest(screen.driver); + // Make the text to draw. To look good it's important the width and + // height + // of the whole text box are correctly set here. + String strName = ""; + String[] str = + {GCCoreUtil.translate("gui.display.nolink"), "", "", "", ""}; + Render renderEntity = null; + Entity entity = null; + float Xmargin = 0; + + if (telemeter != null && telemeter.clientData.length >= 3) + { + if (telemeter.clientClass != null) + { + if (telemeter.clientClass == screen.telemetryLastClass && (telemeter.clientClass != EntityPlayerMP.class || telemeter.clientName.equals(screen.telemetryLastName))) + { + // Used cached data from last time if possible + entity = screen.telemetryLastEntity; + renderEntity = screen.telemetryLastRender; + strName = screen.telemetryLastName; + } else + { + // Create an entity to render, based on class, and get its + // name + entity = null; + + if (telemeter.clientClass == EntityPlayerMP.class) + { + strName = telemeter.clientName; + entity = new EntityOtherPlayerMP(screen.driver.getWorld(), telemeter.clientGameProfile); + renderEntity = (Render) FMLClientHandler.instance().getClient().getRenderManager().getEntityRenderObject(entity); + } else + { + try + { + entity = (Entity) telemeter.clientClass.getConstructor(World.class).newInstance(screen.driver.getWorld()); + } catch (Exception ex) + { + } + if (entity != null) + { + strName = entity.getName(); + } + renderEntity = (Render) FMLClientHandler.instance().getClient().getRenderManager().entityRenderMap.get(telemeter.clientClass); + } + } + + // Setup special visual types from data sent by Telemetry + if (entity instanceof EntityHorse) + { +// ((EntityHorse) entity).setType(HorseType.values()[telemeter.clientData[3]]); + ((EntityHorse) entity).setHorseVariant(telemeter.clientData[4]); + } + if (entity instanceof EntityVillager) + { + ((EntityVillager) entity).setProfession(telemeter.clientData[3]); + ((EntityVillager) entity).setGrowingAge(telemeter.clientData[4]); + } else if (entity instanceof EntityWolf) + { + ((EntityWolf) entity).setCollarColor(EnumDyeColor.byDyeDamage(telemeter.clientData[3])); + ((EntityWolf) entity).setBegging(telemeter.clientData[4] == 1); + } else if (entity instanceof EntitySheep) + { + ((EntitySheep) entity).setFleeceColor(EnumDyeColor.byDyeDamage(telemeter.clientData[3])); + ((EntitySheep) entity).setSheared(telemeter.clientData[4] == 1); + } else if (entity instanceof EntityOcelot) + { + ((EntityOcelot) entity).setTameSkin(telemeter.clientData[3]); + } else if (entity instanceof EntitySkeleton) + { +// ((EntitySkeleton) entity).setSkeletonType(SkeletonType.values()[telemeter.clientData[3]]); + } else if (entity instanceof EntityZombie) + { +// ((EntityZombie) entity).setVillager(telemeter.clientData[3] == 1); TODO Fix for MC 1.10 + ((EntityZombie) entity).setChild(telemeter.clientData[4] == 1); + } + + } + + if (entity instanceof ITelemetry) + { + ((ITelemetry) entity).receiveData(telemeter.clientData, str); + } else if (entity instanceof EntityLivingBase) + { + // Living entity: + // data0 = time to show red damage + // data1 = health in half-hearts + // data2 = pulse + // data3 = hunger (for player); horsetype (for horse) + // data4 = oxygen (for player); horsevariant (for horse) + str[0] = telemeter.clientData[0] > 0 ? GCCoreUtil.translate("gui.player.ouch") : ""; + if (telemeter.clientData[1] >= 0) + { + str[1] = GCCoreUtil.translate("gui.player.health") + ": " + telemeter.clientData[1] + "%"; + } else + { + str[1] = ""; + } + str[2] = "" + telemeter.clientData[2] + " " + GCCoreUtil.translate("gui.player.bpm"); + if (telemeter.clientData[3] > -1) + { + str[3] = GCCoreUtil.translate("gui.player.food") + ": " + telemeter.clientData[3] + "%"; + } + if (telemeter.clientData[4] > -1) + { + int oxygen = telemeter.clientData[4]; + oxygen = (oxygen % 4096) + (oxygen / 4096); + if (oxygen == 180 || oxygen == 90) + { + str[4] = GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": OK"; + } else + { + str[4] = GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + this.makeOxygenString(oxygen) + GCCoreUtil.translate("gui.seconds"); + } + } + } else + // Generic - could be boats or minecarts etc - just show the speed + // TODO can add more here, e.g. position data? + if (telemeter.clientData[2] >= 0) + { + str[2] = makeSpeedString(telemeter.clientData[2]); + } + } else + { + // Default - draw a simple time display just to show the Display + // Screen is working + World w1 = screen.driver.getWorld(); + int time1 = w1 != null ? (int) ((w1.getWorldTime() + 6000L) % 24000L) : 0; + str[2] = makeTimeString(time1 * 360); + } + + int textWidthPixels = 155; + int textHeightPixels = 60; // 1 lines + if (str[3].isEmpty()) + { + textHeightPixels -= 10; + } + if (str[4].isEmpty()) + { + textHeightPixels -= 10; + } + + // First pass - approximate border size + float borders = frameA * 2 + 0.05F * Math.min(sizeX, sizeY); + float scaleXTest = (sizeX - borders) / textWidthPixels; + float scaleYTest = (sizeY - borders) / textHeightPixels; + float scale = sizeX; + if (scaleYTest < scaleXTest) + { + scale = sizeY; + } + // Second pass - the border size may be more accurate now + borders = frameA * 2 + 0.05F * scale; + scaleXTest = (sizeX - borders) / textWidthPixels; + scaleYTest = (sizeY - borders) / textHeightPixels; + scale = sizeX; + float scaleText = scaleXTest; + if (scaleYTest < scaleXTest) + { + scale = sizeY; + scaleText = scaleYTest; + } + + // Centre the text in the display + float border = frameA + 0.025F * scale; + if (entity != null && renderEntity != null) + { + Xmargin = (sizeX - borders) / 2; + } + float Xoffset = (sizeX - borders - textWidthPixels * scaleText) / 2 + Xmargin; + float Yoffset = (sizeY - borders - textHeightPixels * scaleText) / 2 + scaleText; + GL11.glTranslatef(border + Xoffset, border + Yoffset, 0.0F); + GL11.glScalef(scaleText, scaleText, 1.0F); + + // Actually draw the text + int whiteColour = ColorUtil.to32BitColor(255, 240, 216, 255); + drawText(strName, whiteColour); + drawText(str[0], whiteColour); + drawText(str[1], whiteColour); + drawText(str[2], whiteColour); + drawText(str[3], whiteColour); + drawText(str[4], whiteColour); + + // If there is an entity to render, draw it on the left of the text + if (renderEntity != null && entity != null) + { + GL11.glTranslatef(-Xmargin / 2 / scaleText, textHeightPixels / 2 + (-Yoffset + (sizeY - borders) / 2) / scaleText, -0.0005F); + float scalefactor = 38F / (float) Math.pow(Math.max(entity.height, entity.width), 0.65); + GL11.glScalef(scalefactor, scalefactor, 0.0015F); + GL11.glRotatef(180F, 0, 0, 1); + GL11.glRotatef(180F, 0, 1, 0); + if (entity instanceof ITelemetry) + { + ((ITelemetry) entity).adjustDisplay(telemeter.clientData); + } + RenderPlayerGC.flagThermalOverride = true; + if (entity instanceof EntityLivingBase && renderEntity instanceof RenderLivingBase && renderModelMethod != null) + { + this.renderLiving((EntityLivingBase) entity, (RenderLivingBase) renderEntity, ticks % 1F); + } else + { + renderEntity.doRender(entity, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F); + } + RenderPlayerGC.flagThermalOverride = false; +// GL11.glEnable(GL12.GL_RESCALE_NORMAL); +// OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); +// GL11.glDisable(GL11.GL_TEXTURE_2D); +// OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + // TODO Cross-dimensional tracking (i.e. old entity setDead, new entity + // created) + // TODO Deal with text off screen (including where localizations longer + // than English) + + screen.telemetryLastClass = (telemeter == null) ? null : telemeter.clientClass; + screen.telemetryLastEntity = entity; + screen.telemetryLastRender = renderEntity; + screen.telemetryLastName = strName; + GL11.glDisable(GL11.GL_CLIP_PLANE3); + GL11.glDisable(GL11.GL_CLIP_PLANE2); + GL11.glDisable(GL11.GL_CLIP_PLANE1); + GL11.glDisable(GL11.GL_CLIP_PLANE0); + } + + // This is a simplified version of doRender() in RenderLivingEntity + // No lighting adjustment, no sitting, no name text, no sneaking and no + // Forge events + private void renderLiving(EntityLivingBase entity, RenderLivingBase render, float partialTicks) + { + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + render.getMainModel().isChild = entity.isChild(); + + try + { + float f = 0F; + float f1 = 0F; + float f2 = f1 - f; + float f7 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + float f8 = 0F; + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + float f4 = 0.0625F; + GlStateManager.translate(0.0F, -1.5078125F, 0.0F); + float f5 = entity.prevLimbSwingAmount + (entity.limbSwingAmount - entity.prevLimbSwingAmount) * partialTicks; + float f6 = entity.limbSwing - entity.limbSwingAmount * (1.0F - partialTicks); + + if (entity.isChild()) + { + f6 *= 3.0F; + } + + if (f5 > 1.0F) + { + f5 = 1.0F; + } + + GlStateManager.enableAlpha(); + render.getMainModel().setLivingAnimations(entity, f6, f5, partialTicks); + render.getMainModel().setRotationAngles(f6, f5, f8, f2, f7, 0.0625F, entity); + + renderModelMethod.invoke(render, entity, f6, f5, f8, f2, f7, 0.0625F); + GlStateManager.depthMask(true); + renderLayersMethod.invoke(render, entity, f6, f5, partialTicks, f8, f2, f7, 0.0625F); + + GlStateManager.disableRescaleNormal(); + } catch (Exception exception) + { + } + + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.enableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.enableCull(); + GlStateManager.popMatrix(); + } + + private String makeTimeString(int l) + { + int hrs = l / 360000; + int mins = l / 6000 - hrs * 60; + int secs = l / 100 - hrs * 3600 - mins * 60; + String hrsStr = hrs > 9 ? "" + hrs : "0" + hrs; + String minsStr = mins > 9 ? "" + mins : "0" + mins; + String secsStr = secs > 9 ? "" + secs : "0" + secs; + return hrsStr + ":" + minsStr + ":" + secsStr; + } + + public static String makeSpeedString(int speed100) + { + int sp1 = speed100 / 100; + int sp2 = (speed100 % 100); + String spstr1 = GCCoreUtil.translate("gui.rocket.speed") + ": " + sp1; + String spstr2 = (sp2 > 9 ? "" : "0") + sp2; + return spstr1 + "." + spstr2 + " " + GCCoreUtil.translate("gui.lander.velocityu"); + } + + private String makeOxygenString(int oxygen) + { + // Server takes 1 air away every 9 ticks (OxygenUtil.getDrainSpacing) + int sp1 = oxygen * 9 / 20; + int sp2 = ((oxygen * 9) % 20) / 2; + String spstr1 = "" + sp1; + String spstr2 = "" + sp2; + return spstr1 + "." + spstr2; + } + + private void drawText(String str, int colour) + { + Minecraft.getMinecraft().fontRenderer.drawString(str, 0, yPos, colour, false); + yPos += 10; + } + + private void drawBlackBackground(float greyLevel) + { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GL11.glColor4f(greyLevel, greyLevel, greyLevel, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameA, 0.005F).endVertex(); + worldRenderer.pos(frameA, frameA, 0.005F).endVertex(); + tess.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + private void planeEquation(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3) + { + double[] result = new double[4]; + result[0] = y1 * (z2 - z3) + y2 * (z3 - z1) + y3 * (z1 - z2); + result[1] = z1 * (x2 - x3) + z2 * (x3 - x1) + z3 * (x1 - x2); + result[2] = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2); + result[3] = -(x1 * (y2 * z3 - y3 * z2) + x2 * (y3 * z1 - y1 * z3) + x3 * (y1 * z2 - y2 * z1)); + planes.put(result, 0, 4); + planes.position(0); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/GCSounds.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/GCSounds.java new file mode 100644 index 00000000..5bcff4d1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/GCSounds.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.sounds; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.registries.IForgeRegistry; + +public class GCSounds +{ + + public static SoundEvent bossDeath; + public static SoundEvent bossLaugh; + public static SoundEvent bossOoh; + public static SoundEvent bossOuch; + public static SoundEvent slimeDeath; + public static SoundEvent astroMiner; + public static SoundEvent shuttle; + public static SoundEvent parachute; + public static SoundEvent openAirLock; + public static SoundEvent closeAirLock; + public static SoundEvent singleDrip; + public static SoundEvent scaryScape; + public static SoundEvent deconstructor; + public static SoundEvent advanced_compressor; + public static SoundEvent laserCharge; + public static SoundEvent laserShoot; + + public static SoundEvent music; + + public static void registerSounds(IForgeRegistry registry) + { + bossDeath = registerSound("entity.bossdeath", registry); + bossLaugh = registerSound("entity.bosslaugh", registry); + bossOoh = registerSound("entity.ooh", registry); + bossOuch = registerSound("entity.ouch", registry); + slimeDeath = registerSound("entity.slime_death", registry); + astroMiner = registerSound("entity.astrominer", registry); + shuttle = registerSound("shuttle.shuttle", registry); + parachute = registerSound("player.parachute", registry); + openAirLock = registerSound("player.openairlock", registry); + closeAirLock = registerSound("player.closeairlock", registry); + singleDrip = registerSound("ambience.singledrip", registry); + scaryScape = registerSound("ambience.scaryscape", registry); + music = registerSound("galacticraft.music_space", registry); + deconstructor = registerSound("block.deconstructor", registry); + advanced_compressor = registerSound("player.unlockchest", registry); + laserCharge = registerSound("laser.charge", registry); + laserShoot = registerSound("laser.shoot", registry); + } + + private static SoundEvent registerSound(String soundName, IForgeRegistry registry) + { + ResourceLocation soundID = new ResourceLocation(Constants.ASSET_PREFIX, soundName); + SoundEvent result = new SoundEvent(soundID).setRegistryName(soundID); + registry.register(result); + return result; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/MusicTickerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/MusicTickerGC.java new file mode 100644 index 00000000..cb714e4c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/MusicTickerGC.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.sounds; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.MusicTicker; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class MusicTickerGC extends MusicTicker +{ + + public MusicTickerGC(Minecraft mc) + { + super(mc); + } + + @Override + public void update() + { + MusicTicker.MusicType musictype = this.mc.getAmbientMusicType(); + if (FMLClientHandler.instance().getWorldClient() != null && FMLClientHandler.instance().getWorldClient().provider instanceof IGalacticraftWorldProvider) + { + musictype = ClientProxyCore.MUSIC_TYPE_MARS; + } + + if (this.currentMusic != null) + { + if (!musictype.getMusicLocation().getSoundName().equals(this.currentMusic.getSoundLocation())) + { + this.mc.getSoundHandler().stopSound(this.currentMusic); + this.timeUntilNextMusic = MathHelper.getInt(this.rand, 0, musictype.getMinDelay() / 2); + } + + if (!this.mc.getSoundHandler().isSoundPlaying(this.currentMusic)) + { + this.currentMusic = null; + this.timeUntilNextMusic = Math.min(MathHelper.getInt(this.rand, musictype.getMinDelay(), musictype.getMaxDelay()), this.timeUntilNextMusic); + } + } + + this.timeUntilNextMusic = Math.min(this.timeUntilNextMusic, musictype.getMaxDelay()); + + if (this.currentMusic == null && this.timeUntilNextMusic-- <= 0) + { + this.playMusic(musictype); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/SoundUpdaterRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/SoundUpdaterRocket.java new file mode 100644 index 00000000..a3a06d97 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/SoundUpdaterRocket.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.sounds; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.audio.MovingSound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.util.SoundCategory; + +/** + * This file is part of the Galacticraft project + * + * @author micdoodle8 + */ +public class SoundUpdaterRocket extends MovingSound +{ + + private final EntityPlayerSP thePlayer; + private final EntityAutoRocket theRocket; + private boolean soundStopped; + private boolean ignition = false; + + public SoundUpdaterRocket(EntityPlayerSP entityPlayerSP, EntityAutoRocket par2Entity) + { + super(GCSounds.shuttle, SoundCategory.NEUTRAL); + this.theRocket = par2Entity; + this.thePlayer = entityPlayerSP; + this.attenuationType = ISound.AttenuationType.NONE; + this.volume = 0.00001F; // If it's zero it won't start playing + this.pitch = 0.0F; // pitch + this.repeat = true; + this.repeatDelay = 0; // repeat delay + this.updateSoundLocation(par2Entity); + } + + /** + * Updates the JList with a new model. + */ + @Override + public void update() + { + if (!this.theRocket.isDead) + { + if (this.theRocket.launchPhase == EnumLaunchPhase.IGNITED.ordinal()) + { + if (!ignition) + { + this.pitch = 0.0F; + ignition = true; + } + if (this.theRocket.timeUntilLaunch < this.theRocket.getPreLaunchWait()) + { + if (this.pitch < 1.0F) + { + this.pitch += 0.0025F; + } + + if (this.pitch > 1.0F) + { + this.pitch = 1.0F; + } + } + } else + { + this.pitch = 1.0F; + } + + if (this.theRocket.launchPhase >= EnumLaunchPhase.IGNITED.ordinal()) + { + if (this.theRocket.posY > 1000) + { + this.volume = 0F; + if (this.theRocket.launchPhase != EnumLaunchPhase.LANDING.ordinal()) + { + this.donePlaying = true; + } + } else if (this.theRocket.posY > Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + this.volume = 1.0F - (float) ((this.theRocket.posY - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / (1000.0 - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT)); + } else + { + this.volume = 1.0F; + } + } + + this.updateSoundLocation(this.theRocket); + } else + { + this.donePlaying = true; + } + } + + public void stopRocketSound() + { + this.donePlaying = true; + this.soundStopped = true; + } + + public void updateSoundLocation(Entity e) + { + this.xPosF = (float) e.posX; + this.yPosF = (float) e.posY; + this.zPosF = (float) e.posZ; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCAstroMiner.java new file mode 100644 index 00000000..a28d87d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCAstroMiner.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.List; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandGCAstroMiner extends CommandBase +{ + + @Override + public String getName() + { + return "gcastrominer"; + } + + @Override + public String getUsage(ICommandSender sender) + { + return "/" + this.getName() + " [show|reset|set] "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, "show", "set", "reset"); + } + if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + return null; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 1; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length > 2) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.dimensiontp.too_many", this.getUsage(sender)), new Object[0]); + } + if (args.length < 1) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssinvite.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + int type = 0; + int newvalue = 0; + if (args[0].equalsIgnoreCase("show")) + { + type = 1; + } else if (args[0].equalsIgnoreCase("reset")) + { + type = 2; + } else if (args[0].length() > 3 && args[0].substring(0, 3).equalsIgnoreCase("set")) + { + String number = args[0].substring(3); + try + { + newvalue = Integer.parseInt(number); + if (newvalue > 0) + { + type = 3; + } + } catch (NumberFormatException ex) + { + } + } + + // Proceed if syntax of show|reset|set was correct + if (type > 0) + { + EntityPlayerMP playerBase = null; + try + { + if (args.length == 2) + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[1], true); + } else + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + } + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + switch (type) + { + case 1: + sender.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("command.gcastrominer.count", PlayerUtil.getName(playerBase), "" + stats.getAstroMinerCount()))); + break; + case 2: + stats.setAstroMinerCount(0); + sender.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("command.gcastrominer.count", PlayerUtil.getName(playerBase), "" + 0))); + break; + case 3: + stats.setAstroMinerCount(newvalue); + sender.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("command.gcastrominer.count", PlayerUtil.getName(playerBase), "" + newvalue))); + break; + } + } else + { + throw new Exception("Could not find player with name: " + args[1]); + } + } catch (final Exception e) + { + throw new CommandException(e.getMessage(), new Object[0]); + } + return; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCEnergyUnits.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCEnergyUnits.java new file mode 100644 index 00000000..b6e4e1ad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCEnergyUnits.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandGCEnergyUnits extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + String options = " [gJ"; + if (EnergyConfigHandler.isBuildcraftLoaded()) + { + options = options + "|MJ"; + } + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + options = options + "|EU"; + } + if (EnergyConfigHandler.isMekanismLoaded()) + { + options = options + "|J"; + } + options = options + "|RF"; + return "/" + this.getName() + options + "]"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "gcenergyunits"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + if (playerBase == null) + { + return; + } + + if (args.length == 1) + { + String param = args[0].toLowerCase(); + if (param.length() <= 2) + { + int paramvalue = 0; + if ("gj".equals(param)) + { + paramvalue = 1; + } else if ("mj".equals(param) && EnergyConfigHandler.isBuildcraftLoaded()) + { + paramvalue = 2; + } else if ("eu".equals(param) && EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + paramvalue = 3; + } else if ("j".equals(param) && EnergyConfigHandler.isMekanismLoaded()) + { + paramvalue = 4; + } else if ("rf".equals(param)) + { + paramvalue = 5; + } + + if (paramvalue > 0) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_ENERGYUNITS, GCCoreUtil.getDimensionID(playerBase.world), new Object[] + {paramvalue}), playerBase); + return; + } + + } + + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.gcenergyunits.invalid_units", this.getUsage(sender)), new Object[0]); + } + + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.gcenergyunits.no_units", this.getUsage(sender)), new Object[0]); + } + + public static void handleParamClientside(int param) + { + if (param == 1) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = false; + EnergyConfigHandler.displayEnergyUnitsRF = false; + return; + } + + if (param == 2 && EnergyConfigHandler.isBuildcraftLoaded()) + { + EnergyConfigHandler.displayEnergyUnitsBC = true; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = false; + EnergyConfigHandler.displayEnergyUnitsRF = false; + return; + } + + if (param == 3 && EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = true; + EnergyConfigHandler.displayEnergyUnitsMek = false; + EnergyConfigHandler.displayEnergyUnitsRF = false; + return; + } + + if (param == 4 && EnergyConfigHandler.isMekanismLoaded()) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = true; + EnergyConfigHandler.displayEnergyUnitsRF = false; + return; + } + + if (param == 5) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = false; + EnergyConfigHandler.displayEnergyUnitsRF = true; + return; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHelp.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHelp.java new file mode 100644 index 00000000..ba8db05e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHelp.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.ITextComponent; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandGCHelp extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName(); + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "gchelp"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + if (playerBase == null) + { + return; + } + playerBase.sendMessage( + ITextComponent.Serializer.jsonToComponent("[{\"text\":\"" + GCCoreUtil.translate("gui.message.help1") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + + Constants.PREFIX + "com" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki" + "\"}}]")); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHouston.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHouston.java new file mode 100644 index 00000000..e94ef031 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHouston.java @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +import com.mojang.authlib.GameProfile; + +public class CommandGCHouston extends CommandBase +{ + + private static List timerList = new LinkedList<>(); + + public static void reset() + { + timerList.clear(); + } + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " []"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "gchouston"; + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + if (args.length == 1 && this.isOp(server, sender)) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + return null; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 1; + } + + private boolean isOp(MinecraftServer server, ICommandSender sender) + { + Entity entitySender = sender.getCommandSenderEntity(); + if (entitySender == null) + { + return true; + } else if (entitySender instanceof EntityPlayer) + { + GameProfile prof = ((EntityPlayer) entitySender).getGameProfile(); + return server.getPlayerList().canSendCommands(prof); + } + return false; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = null; + boolean isOp = this.isOp(server, sender); + + if (args.length < 2) + { + try + { + if (args.length == 0) + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + if (!playerBase.capabilities.isCreativeMode) + { + if (ConfigManagerCore.challengeMode || !(playerBase.world.provider instanceof IGalacticraftWorldProvider)) + { + CommandBase.notifyCommandListener(sender, this, "commands.gchouston.fail"); + return; + } + } + + if (timerList.contains(playerBase)) + { + timerList.remove(playerBase); + } else + { + timerList.add(playerBase); + TickHandlerServer.timerHoustonCommand = 250; + String msg = EnumColor.YELLOW + GCCoreUtil.translate("commands.gchouston.confirm.1") + " " + EnumColor.WHITE + GCCoreUtil.translate("commands.gchouston.confirm.2"); + CommandBase.notifyCommandListener(sender, this, msg); + return; + } + } else + { + if (!isOp) + { + CommandBase.notifyCommandListener(sender, this, "commands.gchouston.noop"); + return; + } + + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[0], true); + } + + if (playerBase != null) + { + int dimID = ConfigManagerCore.idDimensionOverworld; + WorldServer worldserver = server.getWorld(dimID); + if (worldserver == null) + { + worldserver = server.getWorld(0); + if (worldserver == null) + { + throw new Exception("/gchouston could not find Overworld."); + } + dimID = 0; + } + BlockPos spawnPoint = null; + BlockPos bedPos = playerBase.getBedLocation(dimID); + if (bedPos != null) + { + spawnPoint = EntityPlayer.getBedSpawnLocation(worldserver, bedPos, false); + } + if (spawnPoint == null) + { + spawnPoint = worldserver.getTopSolidOrLiquidBlock(worldserver.getSpawnPoint()); + } + GCPlayerStats stats = GCPlayerStats.get(playerBase); + stats.setRocketStacks(NonNullList.withSize(0, ItemStack.EMPTY)); + stats.setRocketType(IRocketType.EnumRocketType.DEFAULT.ordinal()); + stats.setRocketItem(null); + stats.setFuelLevel(0); + stats.setCoordsTeleportedFromX(spawnPoint.getX()); + stats.setCoordsTeleportedFromZ(spawnPoint.getZ()); + stats.setUsingPlanetSelectionGui(false); + playerBase.closeScreen(); + Vector3 spawnPos = new Vector3(spawnPoint.getX() + 0.5D, spawnPoint.getY() + 0.25D, spawnPoint.getZ() + 0.5D); + + try + { + WorldUtil.teleportEntitySimple(worldserver, dimID, playerBase, spawnPos); + } catch (Exception e) + { + e.printStackTrace(); + throw e; + } + + CommandBase.notifyCommandListener(sender, this, "commands.gchouston.success", new Object[] + {String.valueOf(EnumColor.GREY + "" + playerBase.getName())}); + } else + { + throw new Exception("Could not find player with name: " + args[0]); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.dimensiontp.too_many", this.getUsage(sender)), new Object[0]); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCInv.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCInv.java new file mode 100644 index 00000000..809cc384 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCInv.java @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class CommandGCInv extends CommandBase +{ + + protected static final Map savedata = new HashMap(); + private static final Set dontload = new HashSet(); + private static boolean firstuse = true; + private static GCInvSaveData savefile; + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " [save|restore|drop|clear] "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public String getName() + { + return "gcinv"; + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, "save", "restore", "drop", "clear"); + } + if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + return null; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 1; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (CommandGCInv.firstuse) + { + CommandGCInv.firstuse = false; + CommandGCInv.initialise(); + } + + if (args.length == 2) + { + try + { + EntityPlayerMP thePlayer = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[1], true); + if (thePlayer != null && !thePlayer.isDead && thePlayer.world != null) + { + GCPlayerStats stats = GCPlayerStats.get(thePlayer); + + if (args[0].equalsIgnoreCase("drop")) + { + InventoryExtended gcInventory = stats.getExtendedInventory(); + gcInventory.dropExtendedItems(thePlayer); + } else if (args[0].equalsIgnoreCase("save")) + { + InventoryExtended gcInventory = stats.getExtendedInventory(); + ItemStack[] saveinv = new ItemStack[gcInventory.getSizeInventory()]; + for (int i = 0; i < gcInventory.getSizeInventory(); i++) + { + saveinv[i] = gcInventory.getStackInSlot(i); + gcInventory.setInventorySlotContents(i, ItemStack.EMPTY); + } + + CommandGCInv.savedata.put(args[1].toLowerCase(), saveinv); + CommandGCInv.dontload.add(args[1].toLowerCase()); + CommandGCInv.writefile(); + System.out.println("[GCInv] Saving and clearing GC inventory slots of " + PlayerUtil.getName(thePlayer)); + } else if (args[0].equalsIgnoreCase("restore")) + { + ItemStack[] saveinv = CommandGCInv.savedata.get(args[1].toLowerCase()); + CommandGCInv.dontload.remove(args[1].toLowerCase()); + if (saveinv == null) + { + System.out.println("[GCInv] Tried to restore but player " + PlayerUtil.getName(thePlayer) + " had no saved GC inventory items."); + return; + } + + CommandGCInv.doLoad(thePlayer); + } else if (args[0].equalsIgnoreCase("clear")) + { + InventoryExtended gcInventory = stats.getExtendedInventory(); + for (int i = 0; i < gcInventory.getSizeInventory(); i++) + { + gcInventory.setInventorySlotContents(i, ItemStack.EMPTY); + } + } else + { + throw new WrongUsageException("Invalid GCInv command. Usage: " + this.getUsage(sender)); + } + } else + { + // Special rule for 'restore' command if player not found - + // look to see if the player is offline (i.e. had a saved + // inventory already) + if (args[0].equalsIgnoreCase("restore")) + { + ItemStack[] saveinv = CommandGCInv.savedata.get(args[1].toLowerCase()); + if (saveinv != null) + { + System.out.println("[GCInv] Restore command for offline player " + args[1] + ", setting to restore GCInv on next login."); + CommandGCInv.dontload.remove(args[1].toLowerCase()); + // Now it can autoload on next player logon + return; + } + } + + // No player found, and not a 'restore' command + if (args[0].equalsIgnoreCase("clear") || args[0].equalsIgnoreCase("save") || args[0].equalsIgnoreCase("drop")) + { + System.out.println("GCInv command: player " + args[1] + " not found."); + } else + { + throw new WrongUsageException("Invalid GCInv command. Usage: " + this.getUsage(sender), new Object[0]); + } + } + } catch (final Exception e) + { + System.out.println(e.toString()); + e.printStackTrace(); + } + } else + { + throw new WrongUsageException("Not enough command arguments! Usage: " + this.getUsage(sender), new Object[0]); + } + } + + public static void doLoad(EntityPlayerMP thePlayer) + { + String theName = PlayerUtil.getName(thePlayer).toLowerCase(); + if (!CommandGCInv.dontload.contains(theName)) + // This is a simple flag: if the playername is in dontload then no + // restore command has yet been run. + // Dontload resets to nothing on server restart so that all will + // auto-restore on a server restart. + { + ItemStack[] saveinv = CommandGCInv.savedata.get(theName); + InventoryExtended gcInventory = GCPlayerStats.get(thePlayer).getExtendedInventory(); + for (int i = 0; i < gcInventory.getSizeInventory(); i++) + { + gcInventory.setInventorySlotContents(i, saveinv[i]); + } + CommandGCInv.savedata.remove(theName); + CommandGCInv.writefile(); + System.out.println("[GCInv] Restored GC inventory slots of " + PlayerUtil.getName(thePlayer)); + + } else + { + System.out.println("[GCInv] Player " + PlayerUtil.getName(thePlayer) + " was spawned without restoring the GCInv save. Run /gcinv restore playername to restore it."); + } + } + + private static void writefile() + { + CommandGCInv.savefile.writeToNBT(new NBTTagCompound()); + CommandGCInv.savefile.markDirty(); + } + + private static void initialise() + { + World world0 = WorldUtil.getWorldForDimensionServer(0); + if (world0 == null) + { + return; + } + CommandGCInv.savefile = (GCInvSaveData) world0.loadData(GCInvSaveData.class, GCInvSaveData.SAVE_ID); + if (CommandGCInv.savefile == null) + { + CommandGCInv.savefile = new GCInvSaveData(); + world0.setData(GCInvSaveData.SAVE_ID, CommandGCInv.savefile); + } + } + + public static ItemStack[] getSaveData(String p) + { + if (CommandGCInv.firstuse) + { + CommandGCInv.firstuse = false; + CommandGCInv.initialise(); + } + + return CommandGCInv.savedata.get(p); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCKit.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCKit.java new file mode 100644 index 00000000..534a236b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCKit.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.List; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.items.ItemHandlerHelper; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandGCKit extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " []"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public String getName() + { + return "gckit"; + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + return null; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = null; + + if (args.length < 2) + { + try + { + if (args.length == 1) + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[0], true); + } else + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + } + + if (playerBase != null) + { + ItemHandlerHelper.giveItemToPlayer(playerBase, new ItemStack(GCItems.emergencyKit), 0); + CommandBase.notifyCommandListener(sender, this, "commands.emergencykit", new Object[] + {String.valueOf(EnumColor.GREY + "[" + playerBase.getName()), "]"}); + } else + { + throw new Exception("Could not find player with name: " + args[0]); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.dimensiontp.too_many", this.getUsage(sender)), new Object[0]); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandJoinSpaceRace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandJoinSpaceRace.java new file mode 100644 index 00000000..65f0de4b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandJoinSpaceRace.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandJoinSpaceRace extends CommandBase +{ + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName(); + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "joinrace"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(server, sender.getName(), true); + + if (args.length == 0) + { + try + { + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (stats.getSpaceRaceInviteTeamID() > 0) + { + SpaceRaceManager.sendSpaceRaceData(server, playerBase, SpaceRaceManager.getSpaceRaceFromID(stats.getSpaceRaceInviteTeamID())); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_JOIN_RACE_GUI, GCCoreUtil.getDimensionID(playerBase.world), new Object[] + {stats.getSpaceRaceInviteTeamID()}), playerBase); + } else + { + throw new Exception("You haven't been invited to a space race team!"); + } + } else + { + throw new Exception("Could not find player with name: " + args[0]); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.joinrace.no_team", this.getUsage(sender)), new Object[0]); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandKeepDim.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandKeepDim.java new file mode 100644 index 00000000..987bb865 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandKeepDim.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandKeepDim extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 4; + } + + @Override + public String getName() + { + return "gckeeploaded"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase; + + if (args.length > 1) + { + throw new WrongUsageException("Too many command arguments! Usage: " + this.getUsage(sender), new Object[0]); + } else + { + try + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + + if (playerBase != null) + { + int dimID; + + if (args.length == 0) + { + dimID = playerBase.dimension; + } else + { + try + { + dimID = CommandBase.parseInt(args[0]); + } catch (Exception e) + { + throw new WrongUsageException("Needs a dimension number! Usage: " + this.getUsage(sender), new Object[0]); + } + } + + if (ConfigManagerCore.setLoaded(dimID)) + { + playerBase.sendMessage(new TextComponentString("[GCKeepLoaded] Successfully set dimension " + dimID + " to load staticly")); + } else + { + if (ConfigManagerCore.setUnloaded(dimID)) + { + playerBase.sendMessage(new TextComponentString("[GCKeepLoaded] Successfully set dimension " + dimID + " to not load staticly")); + } else + { + playerBase.sendMessage(new TextComponentString("[GCKeepLoaded] Failed to set dimension as not static")); + } + } + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandPlanetTeleport.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandPlanetTeleport.java new file mode 100644 index 00000000..839a34db --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandPlanetTeleport.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class CommandPlanetTeleport extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " []"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public String getName() + { + return "dimensiontp"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = null; + + if (args.length < 2) + { + try + { + if (args.length == 1) + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[0], true); + } else + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + } + + if (playerBase != null) + { + WorldServer worldserver = server.getWorld(GCCoreUtil.getDimensionID(server.worlds[0])); + BlockPos spawnPoint = worldserver.getSpawnPoint(); + GCPlayerStats stats = GCPlayerStats.get(playerBase); + stats.setRocketStacks(NonNullList.withSize(2, ItemStack.EMPTY)); + stats.setRocketType(IRocketType.EnumRocketType.DEFAULT.ordinal()); + stats.setRocketItem(GCItems.rocketTier1); + stats.setFuelLevel(1000); + stats.setCoordsTeleportedFromX(spawnPoint.getX()); + stats.setCoordsTeleportedFromZ(spawnPoint.getZ()); + + try + { + WorldUtil.toCelestialSelection(playerBase, stats, Integer.MAX_VALUE); + } catch (Exception e) + { + e.printStackTrace(); + throw e; + } + + CommandBase.notifyCommandListener(sender, this, "commands.dimensionteleport", new Object[] + {String.valueOf(EnumColor.GREY + "[" + playerBase.getName()), "]"}); + } else + { + throw new Exception("Could not find player with name: " + args[0]); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.dimensiontp.too_many", this.getUsage(sender)), new Object[0]); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationAddOwner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationAddOwner.java new file mode 100644 index 00000000..f349eb42 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationAddOwner.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.List; +import java.util.Map; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandSpaceStationAddOwner extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " [ | +all | -all ]"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "ssinvite"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + String var3 = null; + EntityPlayerMP playerBase = null; + + if (args.length > 0) + { + var3 = args[0]; + + try + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (stats.getSpaceStationDimensionData().isEmpty()) + { + throw new WrongUsageException(GCCoreUtil.translate("commands.ssinvite.not_found"), new Object[0]); + } else + { + for (Map.Entry ownedStations : stats.getSpaceStationDimensionData().entrySet()) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, ownedStations.getValue(), playerBase); + + if (var3.equalsIgnoreCase("+all")) + { + data.setAllowedAll(true); + playerBase.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.allow_all_true"))); + return; + } + if (var3.equalsIgnoreCase("-all")) + { + data.setAllowedAll(false); + playerBase.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.allow_all_false", var3))); + return; + } + + if (!data.getAllowedPlayers().contains(var3)) + { + data.getAllowedPlayers().add(var3); + data.markDirty(); + } + } + } + + final EntityPlayerMP playerToAdd = PlayerUtil.getPlayerBaseServerFromPlayerUsername(var3, true); + + if (playerToAdd != null) + { + playerToAdd.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.added", PlayerUtil.getName(playerBase)))); + } + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssinvite.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + if (playerBase != null) + { + playerBase.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.addsuccess", var3))); + } + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : null; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationChangeOwner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationChangeOwner.java new file mode 100644 index 00000000..9c228487 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationChangeOwner.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class CommandSpaceStationChangeOwner extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public String getName() + { + return "ssnewowner"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + String oldOwner = null; + String newOwner = "ERROR"; + int stationID = -1; + EntityPlayerMP playerAdmin = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + + if (args.length > 1) + { + newOwner = args[1]; + + try + { + stationID = Integer.parseInt(args[0]); + } catch (final Exception var6) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssnewowner.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + if (stationID < 2) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssnewowner.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + try + { + SpaceStationWorldData stationData = SpaceStationWorldData.getMPSpaceStationData(null, stationID, null); + if (stationData == null) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssnewowner.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + oldOwner = stationData.getOwner(); + stationData.getAllowedPlayers().remove(oldOwner); + if (stationData.getSpaceStationName().equals("Station: " + oldOwner)) + { + stationData.setSpaceStationName("Station: " + newOwner); + } + stationData.getAllowedPlayers().add(newOwner); + stationData.setOwner(newOwner); + + final EntityPlayerMP oldPlayer = PlayerUtil.getPlayerBaseServerFromPlayerUsername(oldOwner, true); + final EntityPlayerMP newPlayer = PlayerUtil.getPlayerBaseServerFromPlayerUsername(newOwner, true); + if (oldPlayer != null) + { + GCPlayerStats stats = GCPlayerStats.get(oldPlayer); + SpaceStationWorldData.updateSSOwnership(oldPlayer, oldOwner, stats, stationID, stationData); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_CLIENT_ID, GCCoreUtil.getDimensionID(oldPlayer.world), new Object[] + {WorldUtil.spaceStationDataToString(stats.getSpaceStationDimensionData())}), oldPlayer); + } + if (newPlayer != null) + { + GCPlayerStats stats = GCPlayerStats.get(newPlayer); + SpaceStationWorldData.updateSSOwnership(newPlayer, newOwner.replace(".", ""), stats, stationID, stationData); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_CLIENT_ID, GCCoreUtil.getDimensionID(oldPlayer.world), new Object[] + {WorldUtil.spaceStationDataToString(stats.getSpaceStationDimensionData())}), newPlayer); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssinvite.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + if (playerAdmin != null) + { + playerAdmin.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.changesuccess", oldOwner, newOwner))); + } else + // Console + { + System.out.println(GCCoreUtil.translateWithFormat("gui.spacestation.changesuccess", oldOwner, newOwner)); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationRemoveOwner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationRemoveOwner.java new file mode 100644 index 00000000..09547fd2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationRemoveOwner.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +import com.google.common.collect.Sets; + +public class CommandSpaceStationRemoveOwner extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "ssuninvite"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + String var3 = null; + EntityPlayerMP playerBase = null; + + if (args.length > 0) + { + var3 = args[0]; + + try + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (stats.getSpaceStationDimensionData().isEmpty()) + { + throw new WrongUsageException(GCCoreUtil.translate("commands.ssinvite.not_found"), new Object[0]); + } else + { + for (Map.Entry e : stats.getSpaceStationDimensionData().entrySet()) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, e.getValue(), playerBase); + + String str = null; + for (String name : data.getAllowedPlayers()) + { + if (name.equalsIgnoreCase(var3)) + { + str = name; + break; + } + } + + if (str != null) + { + data.getAllowedPlayers().remove(str); + data.markDirty(); + } else + { + throw new CommandException(GCCoreUtil.translateWithFormat("commands.ssuninvite.no_player", "\"" + var3 + "\""), new Object[0]); + } + } + } + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssinvite.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + if (playerBase != null) + { + playerBase.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.removesuccess", var3))); + } + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, this.getPlayers(server, sender)) : null; + } + + protected String[] getPlayers(MinecraftServer server, ICommandSender sender) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + if (!stats.getSpaceStationDimensionData().isEmpty()) + { + String[] allNames = server.getOnlinePlayerNames(); + // data.getAllowedPlayers may include some in lowercase + // Convert to correct case at least for those players who are + // online + HashSet allowedNames = Sets.newHashSet(); + + for (Map.Entry e : stats.getSpaceStationDimensionData().entrySet()) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, e.getValue(), playerBase); + allowedNames.addAll(data.getAllowedPlayers()); + } + + Iterator itName = allowedNames.iterator(); + ArrayList replaceNames = new ArrayList(); + while (itName.hasNext()) + { + String name = itName.next(); + for (String allEntry : allNames) + { + if (name.equalsIgnoreCase(allEntry)) + { + itName.remove(); + replaceNames.add(allEntry); + } + } + } + // This does the conversion to correct case + allowedNames.addAll(replaceNames); + String[] rvsize = new String[allowedNames.size()]; + return allowedNames.toArray(rvsize); + } + } + + String[] returnvalue = + {""}; + return returnvalue; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/GCInvSaveData.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/GCInvSaveData.java new file mode 100644 index 00000000..cb1830d8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/GCInvSaveData.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.storage.WorldSavedData; + +import micdoodle8.mods.galacticraft.core.Constants; + +public class GCInvSaveData extends WorldSavedData +{ + + public static final String SAVE_ID = Constants.GCDATAFOLDER + "GCInv_savefile"; + + public GCInvSaveData() + { + super(SAVE_ID); + } + + public GCInvSaveData(String name) + { + super(name); + } + + @Override + public void readFromNBT(NBTTagCompound filedata) + { + for (Object obj : filedata.getKeySet()) + { + if (obj instanceof NBTTagList) + { + NBTTagList entry = (NBTTagList) obj; + String name = entry.toString(); // TODO See if this is + // equivilent to 1.6's getName + // function + ItemStack[] saveinv = new ItemStack[6]; + if (entry.tagCount() > 0) + { + for (int j = 0; j < entry.tagCount(); j++) + { + NBTTagCompound obj1 = entry.getCompoundTagAt(j); + + if (obj1 != null) + { + int i = obj1.getByte("Slot") & 7; + if (i >= 6) + { + System.out.println("GCInv error retrieving savefile: slot was outside range 0-5"); + return; + } + saveinv[i] = new ItemStack(obj1); + } + } + } + CommandGCInv.savedata.put(name.toLowerCase(), saveinv); + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound toSave) + { + for (String name : CommandGCInv.savedata.keySet()) + { + NBTTagList par1NBTTagList = new NBTTagList(); + ItemStack[] saveinv = CommandGCInv.savedata.get(name); + + for (int i = 0; i < 6; i++) + { + if (saveinv[i] != null) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) (i + 200)); + saveinv[i].writeToNBT(nbttagcompound); + par1NBTTagList.appendTag(nbttagcompound); + } + } + toSave.setTag(name, par1NBTTagList); + } + + return toSave; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/CoreTileEntityFixer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/CoreTileEntityFixer.java new file mode 100644 index 00000000..1d7904cb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/CoreTileEntityFixer.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.datafix.types.TileFixer; + +public class CoreTileEntityFixer extends TileFixer +{ + + protected CoreTileEntityFixer() + { + super(Constants.MOD_ID_CORE); + putFixEntry("GC Treasure Chest"); + putFixEntry("GC Air Distributor"); + putFixEntry("GC Air Collector"); + putFixEntry("GC Oxygen Pipe"); + putFixEntry("GC Air Lock Frame"); + putFixEntry("GC Refinery"); + putFixEntry("GC NASA Workbench"); + putFixEntry("GC Deconstructor"); + putFixEntry("GC Air Compressor"); + putFixEntry("GC Fuel Loader"); + putFixEntry("GC Landing Pad"); + putFixEntry("GC Landing Pad Full"); + putFixEntry("GC Space Station"); + putFixEntry("GC Dummy Block"); + putFixEntry("GC Air Sealer"); + putFixEntry("GC Dungeon Boss Spawner"); + putFixEntry("GC Oxygen Detector"); + putFixEntry("GC Buggy Fueler"); + putFixEntry("GC Buggy Fueler Single"); + putFixEntry("GC Cargo Loader"); + putFixEntry("GC Cargo Unloader"); + putFixEntry("GC Parachest Tile"); + putFixEntry("GC Solar Panel"); + putFixEntry("GC Radio Telescope"); + putFixEntry("GC Magnetic Crafting Table"); + putFixEntry("GC Energy Storage Module"); + putFixEntry("GC Coal Generator"); + putFixEntry("GC Electric Furnace"); + putFixEntry("GC Aluminum Wire"); + putFixEntry("GC Switchable Aluminum Wire"); + putFixEntry("GC Fallen Meteor"); + putFixEntry("GC Ingot Compressor"); + putFixEntry("GC Electric Ingot Compressor"); + putFixEntry("GC Circuit Fabricator"); + putFixEntry("GC Air Lock Controller"); + putFixEntry("GC Oxygen Storage Module"); + putFixEntry("GC Oxygen Decompressor"); + putFixEntry("GC Space Station Thruster"); + putFixEntry("GC Arc Lamp"); + putFixEntry("GC View Screen"); + putFixEntry("GC Panel Lighting"); + putFixEntry("GC Telemetry Unit"); + putFixEntry("GC Painter"); + putFixEntry("GC Fluid Tank"); + putFixEntry("GC Player Detector"); + putFixEntry("GC Platform"); + putFixEntry("GC Emergency Post"); + putFixEntry("GC Null Tile"); + putFixEntry("GC Sealed IC2 Cable"); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/GCCoreDataFixers.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/GCCoreDataFixers.java new file mode 100644 index 00000000..52b4b848 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/GCCoreDataFixers.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.datafix.base.AbstractFixer; + +public class GCCoreDataFixers extends AbstractFixer +{ + + private static final int VERSION = 1; + + public GCCoreDataFixers() + { + super(Constants.MOD_ID_CORE, VERSION); + } + + @Override + public void registerAll() + { + registerFixer(new CoreTileEntityFixer()); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixableData.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixableData.java new file mode 100644 index 00000000..57223828 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixableData.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix.base; + +import net.minecraft.util.datafix.IFixableData; + +public abstract class AbstractFixableData implements IFixableData +{ + + private final GCFix fix; + + protected AbstractFixableData(GCFix fix) + { + this.fix = fix; + } + + public GCFix getGCFix() + { + return this.fix; + } + + @Override + public int getFixVersion() + { + return this.fix.getVersion(); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixer.java new file mode 100644 index 00000000..f59df250 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixer.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix.base; + +import net.minecraftforge.common.util.CompoundDataFixer; +import net.minecraftforge.common.util.ModFixs; +import net.minecraftforge.fml.common.FMLCommonHandler; + +public abstract class AbstractFixer +{ + + protected CompoundDataFixer compoundDataFixer; + protected ModFixs modFixs; + + public AbstractFixer(String modId, int version) + { + this.compoundDataFixer = FMLCommonHandler.instance().getDataFixer(); + this.modFixs = compoundDataFixer.init(modId, version); + } + + public abstract void registerAll(); + + protected void registerFixer(AbstractFixableData fixer) + { + modFixs.registerFix(fixer.getGCFix().geFixType(), fixer); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/GCFix.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/GCFix.java new file mode 100644 index 00000000..58f00e23 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/GCFix.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix.base; + +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IFixType; + +public enum GCFix +{ + + TILE_ENTITIES(FixTypes.BLOCK_ENTITY); + + private IFixType fixType; + + GCFix(IFixType fixType) + { + this.fixType = fixType; + } + + public IFixType geFixType() + { + return fixType; + } + + public int getVersion() + { + return this.ordinal() + 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/types/TileFixer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/types/TileFixer.java new file mode 100644 index 00000000..c8c37833 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/types/TileFixer.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix.types; + +import java.util.HashMap; +import java.util.Map; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.datafix.base.AbstractFixableData; +import micdoodle8.mods.galacticraft.core.datafix.base.GCFix; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.BlockPos; + +public class TileFixer extends AbstractFixableData +{ + + private final Map tileEntityNames = new HashMap<>(); + private final String modid; + + protected TileFixer(String modId) + { + super(GCFix.TILE_ENTITIES); + this.modid = modId; + } + + protected void putFixEntry(String from) + { + putFixEntry(from, from.replaceAll(" ", "_").toLowerCase()); + } + + protected void putFixEntry(String from, String to) + { + String toLocation = modid + ":" + to; + tileEntityNames.put("minecraft:" + from.toLowerCase(), toLocation); + } + + @Override + public NBTTagCompound fixTagCompound(NBTTagCompound nbt) + { + String loc = nbt.getString("id"); + + if (tileEntityNames.containsKey(loc)) + { + String id = tileEntityNames.get(loc); + nbt.setString("id", tileEntityNames.get(loc)); + if (ConfigManagerCore.enableDebug) + { + BlockPos p = new BlockPos(nbt.getInteger("x"), nbt.getInteger("y"), nbt.getInteger("z")); + GalacticraftCore.logger.info("DataFixer @ {} -> {}", p.toString(), p.toString(), id); + } + } + return nbt; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/GCDimensions.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/GCDimensions.java new file mode 100644 index 00000000..626ae93c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/GCDimensions.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import net.minecraft.world.DimensionType; + +public class GCDimensions +{ + + public static DimensionType MOON; + public static DimensionType ORBIT; + public static DimensionType ORBIT_KEEPLOADED; +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/OrbitSpinSaveData.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/OrbitSpinSaveData.java new file mode 100644 index 00000000..1431e31d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/OrbitSpinSaveData.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.storage.WorldSavedData; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class OrbitSpinSaveData extends WorldSavedData +{ + + public static final String saveDataID = Constants.GCDATAFOLDER + "GCSpinData"; + public NBTTagCompound datacompound; + private NBTTagCompound alldata; + private int dim = 0; + + public OrbitSpinSaveData(String s) + { + super(OrbitSpinSaveData.saveDataID); + this.datacompound = new NBTTagCompound(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + this.alldata = nbt; + // world.loadData calls this but can't extract from alldata until we + // know the dimension ID + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + if (this.dim != 0) + { + nbt.setTag("" + this.dim, this.datacompound); + } + + return nbt; + } + + public static OrbitSpinSaveData initWorldData(World world) + { + OrbitSpinSaveData worldData = (OrbitSpinSaveData) world.loadData(OrbitSpinSaveData.class, OrbitSpinSaveData.saveDataID); + + if (worldData == null) + { + worldData = new OrbitSpinSaveData(""); + world.setData(OrbitSpinSaveData.saveDataID, worldData); + if (world.provider instanceof WorldProviderSpaceStation) + { + worldData.dim = GCCoreUtil.getDimensionID(world); + ((WorldProviderSpaceStation) world.provider).getSpinManager().writeToNBT(worldData.datacompound); + } + worldData.markDirty(); + } else if (world.provider instanceof WorldProviderSpaceStation) + { + worldData.dim = GCCoreUtil.getDimensionID(world); + + worldData.datacompound = null; + if (worldData.alldata != null) + { + worldData.datacompound = worldData.alldata.getCompoundTag("" + worldData.dim); + } + if (worldData.datacompound == null) + { + worldData.datacompound = new NBTTagCompound(); + } + } + + return worldData; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRace.java new file mode 100644 index 00000000..904c6b43 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRace.java @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; + +public class SpaceRace +{ + + public static final String DEFAULT_NAME = "gui.space_race.unnamed"; + private static int lastSpaceRaceID = 0; + private int spaceRaceID; + private List playerNames = Lists.newArrayList(); + public String teamName; + private FlagData flagData; + private Vector3 teamColor; + private int ticksSpent; + private Map celestialBodyStatusList = new HashMap<>(4, 1F); + private Map> schematicsToUnlock = new HashMap<>(4, 1F); + + public SpaceRace() + { + } + + public SpaceRace(List playerNames, String teamName, FlagData flagData, Vector3 teamColor) + { + this.playerNames = playerNames; + this.teamName = teamName; + this.ticksSpent = 0; + this.flagData = flagData; + this.teamColor = teamColor; + this.spaceRaceID = ++SpaceRace.lastSpaceRaceID; + } + + public void loadFromNBT(NBTTagCompound nbt) + { + this.teamName = nbt.getString("TeamName"); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Loading spacerace data for team " + this.teamName); + } + this.spaceRaceID = nbt.getInteger("SpaceRaceID"); + this.ticksSpent = (int) nbt.getLong("TicksSpent"); // Deal with legacy + // error + this.flagData = FlagData.readFlagData(nbt); + this.teamColor = new Vector3(nbt.getDouble("teamColorR"), nbt.getDouble("teamColorG"), nbt.getDouble("teamColorB")); + + NBTTagList tagList = nbt.getTagList("PlayerList", 10); + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound tagAt = tagList.getCompoundTagAt(i); + this.playerNames.add(tagAt.getString("PlayerName")); + } + + tagList = nbt.getTagList("CelestialBodyList", 10); + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound tagAt = tagList.getCompoundTagAt(i); + + CelestialBody body = GalaxyRegistry.getPlanetOrMoonFromTranslationkey(tagAt.getString("CelestialBodyName")); + + if (body != null) + { + this.celestialBodyStatusList.put(body, tagAt.getInteger("TimeTaken")); + } + } + + tagList = nbt.getTagList("SchList", 10); + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound tagAt = tagList.getCompoundTagAt(i); + String name = tagAt.getString("Mem"); + if (name != null && this.playerNames.contains(name)) + { + final NBTTagList itemList = tagAt.getTagList("Sch", 10); + for (int j = 0; j < itemList.tagCount(); ++j) + { + addNewSchematic(name, new ItemStack(itemList.getCompoundTagAt(j))); + } + } + } + + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Loaded spacerace team data OK."); + } + } + + public void saveToNBT(NBTTagCompound nbt) + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Saving spacerace data for team " + this.teamName); + } + nbt.setString("TeamName", this.teamName); + nbt.setInteger("SpaceRaceID", this.spaceRaceID); + nbt.setLong("TicksSpent", this.ticksSpent); + this.flagData.saveFlagData(nbt); + nbt.setDouble("teamColorR", this.teamColor.x); + nbt.setDouble("teamColorG", this.teamColor.y); + nbt.setDouble("teamColorB", this.teamColor.z); + + NBTTagList tagList = new NBTTagList(); + for (String player : this.playerNames) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("PlayerName", player); + tagList.appendTag(tagComp); + } + + nbt.setTag("PlayerList", tagList); + + tagList = new NBTTagList(); + for (Entry celestialBody : this.celestialBodyStatusList.entrySet()) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("CelestialBodyName", celestialBody.getKey().getTranslationKey()); + tagComp.setInteger("TimeTaken", celestialBody.getValue()); + tagList.appendTag(tagComp); + } + nbt.setTag("CelestialBodyList", tagList); + + tagList = new NBTTagList(); + for (Entry> schematic : this.schematicsToUnlock.entrySet()) + { + if (this.playerNames.contains(schematic.getKey())) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("Mem", schematic.getKey()); + final NBTTagList itemList = new NBTTagList(); + for (ItemStack stack : schematic.getValue()) + { + final NBTTagCompound itemTag = new NBTTagCompound(); + stack.writeToNBT(itemTag); + itemList.appendTag(itemTag); + } + tagComp.setTag("Sch", itemList); + tagList.appendTag(tagComp); + } + } + nbt.setTag("SchList", tagList); + + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Saved spacerace team data OK."); + } + } + + public void tick() + { + this.ticksSpent++; + } + + public String getTeamName() + { + String ret = this.teamName; + if (SpaceRace.DEFAULT_NAME.equals(ret)) + { + ret = GCCoreUtil.translate(SpaceRace.DEFAULT_NAME); + } + return ret; + } + + public List getPlayerNames() + { + return this.playerNames; + } + + public FlagData getFlagData() + { + return this.flagData; + } + + public void setFlagData(FlagData flagData) + { + this.flagData = flagData; + } + + public Vector3 getTeamColor() + { + return this.teamColor; + } + + public void setTeamColor(Vector3 teamColor) + { + this.teamColor = teamColor; + } + + public void setTeamName(String teamName) + { + this.teamName = teamName; + } + + public void setPlayerNames(List playerNames) + { + this.playerNames = playerNames; + } + + public void setSpaceRaceID(int raceID) + { + this.spaceRaceID = raceID; + } + + public int getSpaceRaceID() + { + return this.spaceRaceID; + } + + public Map getCelestialBodyStatusList() + { + return ImmutableMap.copyOf(this.celestialBodyStatusList); + } + + public void setCelestialBodyReached(CelestialBody body) + { + this.celestialBodyStatusList.put(body, this.ticksSpent); + } + + public int getTicksSpent() + { + return this.ticksSpent; + } + + @Override + public int hashCode() + { + return this.spaceRaceID; + } + + @Override + public boolean equals(Object other) + { + if (other instanceof SpaceRace) + { + return ((SpaceRace) other).getSpaceRaceID() == this.getSpaceRaceID(); + } + + return false; + } + + /* + * Used to store schematics which need to be unlocked for offline players + */ + public void addNewSchematic(String member, ItemStack stack) + { + List list; + list = this.schematicsToUnlock.get(member); + if (list == null) + { + list = new ArrayList<>(1); + this.schematicsToUnlock.put(member, list); + } + list.add(stack); + } + + /* + * Used to give a stored schematic to a team player on next login + */ + public void updatePlayerSchematics(EntityPlayerMP player) + { + List list = this.schematicsToUnlock.get(PlayerUtil.getName(player)); + if (list != null) + { + for (ItemStack stack : list) + { + SchematicRegistry.unlockNewPage(player, stack); + } + this.schematicsToUnlock.remove(PlayerUtil.getName(player)); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRaceManager.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRaceManager.java new file mode 100644 index 00000000..9c191245 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRaceManager.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +public class SpaceRaceManager +{ + + private static final Set spaceRaces = Sets.newHashSet(); + + public static SpaceRace addSpaceRace(SpaceRace spaceRace) + { + SpaceRaceManager.spaceRaces.remove(spaceRace); + SpaceRaceManager.spaceRaces.add(spaceRace); + return spaceRace; + } + + public static void removeSpaceRace(SpaceRace race) + { + SpaceRaceManager.spaceRaces.remove(race); + } + + public static void tick() + { + for (SpaceRace race : SpaceRaceManager.spaceRaces) + { + boolean playerOnline = false; + + for (EntityPlayerMP player : PlayerUtil.getPlayersOnline()) + { + if (race.getPlayerNames().contains(PlayerUtil.getName(player))) + { + CelestialBody body = GalaxyRegistry.getCelestialBodyFromDimensionID(player.world.provider.getDimension()); + + if (body != null) + { + if (!race.getCelestialBodyStatusList().containsKey(body)) + { + race.setCelestialBodyReached(body); + } + } + + playerOnline = true; + } + } + + if (playerOnline) + { + race.tick(); + } + } + } + + public static void loadSpaceRaces(NBTTagCompound nbt) + { + NBTTagList tagList = nbt.getTagList("SpaceRaceList", 10); + + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound nbt2 = tagList.getCompoundTagAt(i); + SpaceRace race = new SpaceRace(); + race.loadFromNBT(nbt2); + SpaceRaceManager.spaceRaces.add(race); + } + } + + public static NBTTagCompound saveSpaceRaces(NBTTagCompound nbt) + { + NBTTagList tagList = new NBTTagList(); + + for (SpaceRace race : SpaceRaceManager.spaceRaces) + { + NBTTagCompound nbt2 = new NBTTagCompound(); + race.saveToNBT(nbt2); + tagList.appendTag(nbt2); + } + + nbt.setTag("SpaceRaceList", tagList); + return nbt; + } + + public static SpaceRace getSpaceRaceFromPlayer(String username) + { + for (SpaceRace race : SpaceRaceManager.spaceRaces) + { + if (race.getPlayerNames().contains(username)) + { + return race; + } + } + + return null; + } + + public static SpaceRace getSpaceRaceFromID(int teamID) + { + for (SpaceRace race : SpaceRaceManager.spaceRaces) + { + if (race.getSpaceRaceID() == teamID) + { + return race; + } + } + + return null; + } + + public static void sendSpaceRaceData(MinecraftServer theServer, EntityPlayerMP toPlayer, SpaceRace spaceRace) + { + if (spaceRace != null) + { + List objList = new ArrayList(); + objList.add(spaceRace.getSpaceRaceID()); + objList.add(spaceRace.getTeamName()); + objList.add(spaceRace.getFlagData()); + objList.add(spaceRace.getTeamColor()); + objList.add(spaceRace.getPlayerNames().toArray(new String[spaceRace.getPlayerNames().size()])); + + if (toPlayer != null) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACE_RACE_DATA, GCCoreUtil.getDimensionID(toPlayer.world), objList), toPlayer); + spaceRace.updatePlayerSchematics(toPlayer); + } else + { + for (WorldServer server : theServer.worlds) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACE_RACE_DATA, GCCoreUtil.getDimensionID(server), objList), + GCCoreUtil.getDimensionID(server)); + } + } + } + } + + public static ImmutableSet getSpaceRaces() + { + return ImmutableSet.copyOf(new HashSet(SpaceRaceManager.spaceRaces)); + } + + public static void onPlayerRemoval(MinecraftServer server, String player, SpaceRace race) + { + for (String member : race.getPlayerNames()) + { + EntityPlayerMP memberObj = PlayerUtil.getPlayerForUsernameVanilla(server, member); + + if (memberObj != null) + { + memberObj.sendMessage(new TextComponentString(EnumColor.DARK_AQUA + GCCoreUtil.translateWithFormat("gui.space_race.chat.remove_success", EnumColor.RED + player + EnumColor.DARK_AQUA)) + .setStyle(new Style().setColor(TextFormatting.DARK_AQUA))); + } + } + + List playerList = new ArrayList(); + playerList.add(player); + SpaceRace newRace = SpaceRaceManager.addSpaceRace(new SpaceRace(playerList, SpaceRace.DEFAULT_NAME, new FlagData(48, 32), new Vector3(1, 1, 1))); + EntityPlayerMP playerToRemove = PlayerUtil.getPlayerBaseServerFromPlayerUsername(server, player, true); + + if (playerToRemove != null) + { + SpaceRaceManager.sendSpaceRaceData(server, playerToRemove, newRace); + SpaceRaceManager.sendSpaceRaceData(server, playerToRemove, race); + } + } + + public static void teamUnlockSchematic(EntityPlayerMP player, ItemStack stack) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(player)); + if (race == null) + return; + MinecraftServer server = player.server; + for (String member : race.getPlayerNames()) + { + if (player.getName().equalsIgnoreCase(member)) + continue; + + EntityPlayerMP memberObj = PlayerUtil.getPlayerForUsernameVanilla(server, member); + if (memberObj != null) + { + SchematicRegistry.unlockNewPage(memberObj, stack); + } else + { + race.addNewSchematic(member, stack); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceStationWorldData.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceStationWorldData.java new file mode 100644 index 00000000..10a487a1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceStationWorldData.java @@ -0,0 +1,395 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.DimensionType; +import net.minecraft.world.World; +import net.minecraft.world.storage.WorldSavedData; + +import net.minecraftforge.common.DimensionManager; + +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class SpaceStationWorldData extends WorldSavedData +{ + + private String spaceStationName = "NoName"; + private String owner = "NoOwner"; + private ArrayList allowedPlayers; + private boolean allowAllPlayers; + private int homePlanet; + private int dimensionIdDynamic; + private int dimensionIdStatic; + private NBTTagCompound dataCompound; + + public SpaceStationWorldData(String par1Str) + { + super(par1Str); + + this.allowedPlayers = new ArrayList() + { + + // Override contains so it ignores case. + @Override + public boolean contains(Object o) + { + if (o instanceof String) + { + String paramStr = (String) o; + + for (String s : this) + { + if (paramStr.equalsIgnoreCase(s)) + { + return true; + } + } + } + + return false; + } + }; + } + + public ArrayList getAllowedPlayers() + { + return this.allowedPlayers; + } + + public boolean getAllowedAll() + { + return this.allowAllPlayers; + } + + public void setAllowedAll(boolean b) + { + this.allowAllPlayers = b; + this.markDirty(); + } + + public String getOwner() + { + return this.owner; + } + + public void setOwner(String name) + { + this.owner = name.replace(".", ""); + this.markDirty(); + } + + public String getSpaceStationName() + { + return this.spaceStationName; + } + + public int getHomePlanet() + { + return homePlanet; + } + + public void setSpaceStationName(String string) + { + this.spaceStationName = string; + } + + public int getDimensionIdStatic() + { + return dimensionIdStatic; + } + + public void setDimensionIdStatic(int dimensionIdStatic) + { + this.dimensionIdStatic = dimensionIdStatic; + } + + public int getDimensionIdDynamic() + { + return dimensionIdDynamic; + } + + public void setDimensionIdDynamic(int dimensionIdDynamic) + { + this.dimensionIdDynamic = dimensionIdDynamic; + } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) + { + this.owner = nbttagcompound.getString("owner").replace(".", ""); + this.spaceStationName = nbttagcompound.getString("spaceStationName"); + + if (nbttagcompound.hasKey("dataCompound")) + { + this.dataCompound = nbttagcompound.getCompoundTag("dataCompound"); + } else + { + this.dataCompound = new NBTTagCompound(); + } + + if (nbttagcompound.hasKey("homePlanet")) + { + this.homePlanet = nbttagcompound.getInteger("homePlanet"); + } else + { + GalacticraftCore.logger.info("Home planet data not found in space station save file for \"" + this.spaceStationName + "\". Using default overworld."); + this.homePlanet = 0; // Overworld dimension ID + } + + if (nbttagcompound.hasKey("dimensionIdStatic")) + { + this.dimensionIdStatic = nbttagcompound.getInteger("dimensionIdStatic"); + } else + { + GalacticraftCore.logger.info("Static dimension ID not found in space station save file for \"" + this.spaceStationName + "\". Using default overworld."); + this.dimensionIdStatic = ConfigManagerCore.idDimensionOverworldOrbitStatic; + } + + if (nbttagcompound.hasKey("dimensionIdDynamic")) + { + this.dimensionIdDynamic = nbttagcompound.getInteger("dimensionIdDynamic"); + } else + { + GalacticraftCore.logger.info("Dynamic dimension ID not found in space station save file for \"" + this.spaceStationName + "\". Using default overworld."); + this.dimensionIdDynamic = ConfigManagerCore.idDimensionOverworldOrbit; + } + + this.allowAllPlayers = nbttagcompound.getBoolean("allowedAll"); + + final NBTTagList var2 = nbttagcompound.getTagList("allowedPlayers", 10); + this.allowedPlayers.clear(); + + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + final NBTTagCompound var4 = var2.getCompoundTagAt(var3); + final String var5 = var4.getString("allowedPlayer"); + + if (!this.allowedPlayers.contains(var5)) + { + this.allowedPlayers.add(var5); + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbttagcompound) + { + nbttagcompound.setString("owner", this.owner); + nbttagcompound.setString("spaceStationName", this.spaceStationName); + nbttagcompound.setInteger("homePlanet", this.homePlanet); + nbttagcompound.setInteger("dimensionIdDynamic", this.dimensionIdDynamic); + nbttagcompound.setInteger("dimensionIdStatic", this.dimensionIdStatic); + nbttagcompound.setTag("dataCompound", this.dataCompound); + nbttagcompound.setBoolean("allowedAll", this.allowAllPlayers); + + final NBTTagList var2 = new NBTTagList(); + + for (int var3 = 0; var3 < this.allowedPlayers.size(); ++var3) + { + final String player = this.allowedPlayers.get(var3); + + if (player != null) + { + final NBTTagCompound var4 = new NBTTagCompound(); + var4.setString("allowedPlayer", player); + var2.appendTag(var4); + } + } + + nbttagcompound.setTag("allowedPlayers", var2); + return nbttagcompound; + } + + /** + * Retrieve an already created space station date entry + */ + public static SpaceStationWorldData getStationData(World world, int stationID, EntityPlayer player) + { + return getStationData(world, stationID, -1, -1, -1, player); + } + + /** + * Retrieve a space station data entry, creating if necessary (with provided + * data) + */ + public static SpaceStationWorldData getStationData(World world, int stationID, int homeID, int providerIdDynamic, int providerIdStatic, EntityPlayer owner) + { + DimensionType providerType = DimensionManager.getProviderType(stationID); + + boolean foundMatch = false; + + // Loop through all registered satellites, checking for a provider ID + // match. If none is found, this method is + // being called on an incorrect + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + if (satellite.getDimensionIdStatic() == providerType.getId() || satellite.getDimensionID() == providerType.getId()) + { + foundMatch = true; + break; + } + } + + if (!foundMatch) + { + return null; + } else + { + final String stationIdentifier = SpaceStationWorldData.getSpaceStationID(stationID); + SpaceStationWorldData stationData = (SpaceStationWorldData) world.loadData(SpaceStationWorldData.class, Constants.GCDATAFOLDER + stationIdentifier); + + if (stationData == null) + { + stationData = new SpaceStationWorldData(stationIdentifier); + world.setData(Constants.GCDATAFOLDER + stationIdentifier, stationData); + stationData.dataCompound = new NBTTagCompound(); + + if (owner != null) + { + stationData.owner = PlayerUtil.getName(owner).replace(".", ""); + } + + stationData.spaceStationName = "Station: " + stationData.owner; + + if (owner != null) + { + stationData.allowedPlayers.add(PlayerUtil.getName(owner)); + } + + if (homeID == -1) + { + throw new RuntimeException("Space station being created on bad home planet ID!"); + } else + { + stationData.homePlanet = homeID; + } + + if (providerIdDynamic == -1 || providerIdStatic == -1) + { + throw new RuntimeException("Space station being created on bad provider IDs!"); + } else + { + stationData.dimensionIdDynamic = providerIdDynamic; + stationData.dimensionIdStatic = providerIdStatic; + } + + stationData.markDirty(); + } + + if (stationData.getSpaceStationName().replace(" ", "").isEmpty()) + { + stationData.setSpaceStationName("Station: " + stationData.owner); + stationData.markDirty(); + } + + return stationData; + } + } + + public static SpaceStationWorldData getMPSpaceStationData(World var0, int var1, EntityPlayer player) + { + final String var2 = SpaceStationWorldData.getSpaceStationID(var1); + if (var0 == null) + { + var0 = WorldUtil.getWorldForDimensionServer(0); + } + SpaceStationWorldData var3 = null; + + if (var0 != null) + { + var3 = (SpaceStationWorldData) var0.loadData(SpaceStationWorldData.class, Constants.GCDATAFOLDER + var2); + } else + { + GalacticraftCore.logger.error("No world for dimension 0? That should be unpossible! Please report at https://github.com/micdoodle8/Galacticraft/issues/2617"); + } + + if (var3 == null) + { + var3 = new SpaceStationWorldData(var2); + var0.setData(Constants.GCDATAFOLDER + var2, var3); + var3.dataCompound = new NBTTagCompound(); + + if (player != null) + { + var3.owner = PlayerUtil.getName(player).replace(".", ""); + } + + var3.spaceStationName = "Station: " + var3.owner; + + if (player != null) + { + var3.allowedPlayers.add(PlayerUtil.getName(player)); + } + + var3.markDirty(); + } + + if (var3.getSpaceStationName().replace(" ", "").isEmpty()) + { + var3.setSpaceStationName("Station: " + var3.owner); + var3.markDirty(); + } + + return var3; + } + + public static String getSpaceStationID(int dimID) + { + return "spacestation_" + dimID; + } + + public static void updateSSOwnership(EntityPlayerMP player, String playerName, GCPlayerStats stats, int stationID, SpaceStationWorldData stationData) + { + if (stationData == null) + { + stationData = SpaceStationWorldData.getMPSpaceStationData(null, stationID, null); + } + + if (stationData.owner.equals(playerName)) + { + // This player is the owner of the station - ensure stats data + // matches + if (!(stats.getSpaceStationDimensionData().values().contains(stationID))) + { + GalacticraftCore.logger.debug("Player owns station: " + stationData.getSpaceStationName() + " with home planet " + stationData.getHomePlanet()); + stats.getSpaceStationDimensionData().put(stationData.getHomePlanet(), stationID); + } + } else + { + // This player is the owner of the station - remove from stats data + Integer savedOwned = stats.getSpaceStationDimensionData().get(stationData.getHomePlanet()); + if (savedOwned != null && savedOwned == stationID) + { + GalacticraftCore.logger.debug("Player does not own station: " + stationData.getSpaceStationName() + " with home planet " + stationData.getHomePlanet()); + stats.getSpaceStationDimensionData().remove(savedOwned); + } + } + } + + public static void checkAllStations(EntityPlayerMP thePlayer, GCPlayerStats stats) + { + String name = PlayerUtil.getName(thePlayer).replace(".", ""); + for (int id : WorldUtil.registeredSpaceStations.keySet()) + { + SpaceStationWorldData.updateSSOwnership(thePlayer, name, stats, id, null); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpinManager.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpinManager.java new file mode 100644 index 00000000..9849bd6b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpinManager.java @@ -0,0 +1,905 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDynamicLiquid; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpinThruster; +import micdoodle8.mods.galacticraft.core.entities.ITumblable; +import micdoodle8.mods.galacticraft.core.entities.player.FreefallHandler; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +import com.google.common.collect.Lists; + +public class SpinManager +{ + + private static final float GFORCE = 9.81F / 400F; // gravity in metres per + // tick squared + public boolean doSpinning = true; + public float angularVelocityRadians = 0F; + public float skyAngularVelocity = this.angularVelocityRadians * Constants.RADIANS_TO_DEGREES; + public float angularVelocityTarget = 0F; + public float angularVelocityAccel = 0F; + public double spinCentreX; + public double spinCentreZ; + private float momentOfInertia; + private float massCentreX; + private float massCentreZ; + public int ssBoundsMaxX; + public int ssBoundsMinX; + public int ssBoundsMaxY; + public int ssBoundsMinY; + public int ssBoundsMaxZ; + public int ssBoundsMinZ; + + private OrbitSpinSaveData savefile; + + private LinkedList thrustersPlus = Lists.newLinkedList(); + private LinkedList thrustersMinus = Lists.newLinkedList(); + private BlockPos oneSSBlock; + // private HashSet stationBlocks = new HashSet<>(); + + private HashSet checked = new HashSet(); + + private float artificialG; + // Used to make continuous particles + thrust sounds at the spin thrusters + // in this dimension + // If false, make particles + sounds occasionally in small bursts, just for + // fun (micro attitude changes) + // see: BlockSpinThruster.randomDisplayTick() + public boolean thrustersFiring = false; + private boolean dataNotLoaded = true; + private List loadedEntities = Lists.newLinkedList(); + + private WorldProviderSpaceStation worldProvider; + private boolean clientSide = true; + + public SpinManager(WorldProviderSpaceStation provider) + { + this.worldProvider = provider; + } + + /** + * Called from WorldProviderOrbit when registering the worldObj + */ + public void registerServerSide() + { + if (!this.worldProvider.world.isRemote) + { + this.clientSide = false; + } + } + + public float getSpinRate() + { + return this.skyAngularVelocity; + } + + /** + * Sets the spin rate for the dimension in radians per tick For example, + * 0.031415 would be 1/200 revolution per tick So that would be 1 revolution + * every 10 seconds + */ + public void setSpinRate(float angle) + { + this.angularVelocityRadians = angle; + this.skyAngularVelocity = angle * 180F / 3.1415927F; + + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + this.updateSkyProviderSpinRate(); + } + } + + @SideOnly(Side.CLIENT) + private void updateSkyProviderSpinRate() + { + this.worldProvider.setSpinDeltaPerTick(this.skyAngularVelocity); + } + + public void setSpinRate(float angle, boolean firing) + { + this.angularVelocityRadians = angle; + this.skyAngularVelocity = angle * 180F / 3.1415927F; + this.worldProvider.setSpinDeltaPerTick(this.skyAngularVelocity); + this.thrustersFiring = firing; + } + + public void setSpinCentre(double x, double z) + { + this.spinCentreX = x; + this.spinCentreZ = z; + if (this.clientSide) + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Clientside update to spin centre: " + x + "," + z); + } + } + } + + public void setSpinBox(int mx, int xx, int my, int yy, int mz, int zz) + { + this.ssBoundsMinX = mx; + this.ssBoundsMaxX = xx; + this.ssBoundsMinY = my; + this.ssBoundsMaxY = yy; + this.ssBoundsMinZ = mz; + this.ssBoundsMaxZ = zz; + } + + public void removeThruster(BlockPos thruster, boolean positive) + { + if (positive) + { + this.thrustersPlus.remove(thruster); + } else + { + this.thrustersMinus.remove(thruster); + } + } + + /** + * This will check all blocks which are in contact with each other to find + * the shape of the spacestation. It also finds the centre of mass (to + * rotate around) and the moment of inertia (how easy/hard this is to + * rotate).

If placingThruster is true, it will return false if the + * thruster (at baseBlock) is not in contact with the "existing" + * spacestation - so the player cannot place thrusters on outlying + * disconnected blocks and expect them to have an effect.

Note: this + * check will briefly load, server-side, all chunks which have spacestation + * blocks in them or 1 block adjacent to those. + * + * @param baseBlock + * @return + */ + public boolean refresh(BlockPos baseBlock, boolean placingThruster) + { + if (this.oneSSBlock == null + || this.worldProvider.world.getBlockState(this.oneSSBlock).getBlock().isAir(this.worldProvider.world.getBlockState(this.oneSSBlock), this.worldProvider.world, this.oneSSBlock)) + { + if (baseBlock != null) + { + this.oneSSBlock = baseBlock; + } else + { + this.oneSSBlock = new BlockPos(0, 64, 0); + } + } + + // Find contiguous blocks using an algorithm like the oxygen sealer one + List currentLayer = new LinkedList(); + List nextLayer = new LinkedList(); + final List foundThrusters = new LinkedList(); + + this.checked.clear(); + currentLayer.add(new BlockVec3(this.oneSSBlock)); + this.checked.add(new BlockVec3(this.oneSSBlock)); + IBlockState bsStart = this.worldProvider.world.getBlockState(this.oneSSBlock); + Block bStart = bsStart.getBlock(); + if (bStart instanceof BlockSpinThruster) + { + foundThrusters.add(this.oneSSBlock); + } + + int thisssBoundsMaxX = this.oneSSBlock.getX(); + int thisssBoundsMinX = thisssBoundsMaxX; + int thisssBoundsMaxY = this.oneSSBlock.getY(); + int thisssBoundsMinY = thisssBoundsMaxY; + int thisssBoundsMaxZ = this.oneSSBlock.getZ(); + int thisssBoundsMinZ = thisssBoundsMaxZ; + float thismass = 0.1F; // Mass of a thruster + float thismassCentreX = 0.1F * thisssBoundsMaxX; + float thismassCentreY = 0.1F * thisssBoundsMaxY; + float thismassCentreZ = 0.1F * thisssBoundsMaxZ; + float thismoment = 0F; + + while (currentLayer.size() > 0) + { + int bits; + for (BlockVec3 vec : currentLayer) + { + bits = vec.sideDoneBits; + if (vec.x < thisssBoundsMinX) + { + thisssBoundsMinX = vec.x; + } + if (vec.y < thisssBoundsMinY) + { + thisssBoundsMinY = vec.y; + } + if (vec.z < thisssBoundsMinZ) + { + thisssBoundsMinZ = vec.z; + } + if (vec.x > thisssBoundsMaxX) + { + thisssBoundsMaxX = vec.x; + } + if (vec.y > thisssBoundsMaxY) + { + thisssBoundsMaxY = vec.y; + } + if (vec.z > thisssBoundsMaxZ) + { + thisssBoundsMaxZ = vec.z; + } + + for (int side = 0; side < 6; side++) + { + if ((bits & (1 << side)) == 1) + { + continue; + } + BlockVec3 sideVec = vec.newVecSide(side); + + if (sideVec != null && !this.checked.contains(sideVec)) + { + this.checked.add(sideVec); + IBlockState state = sideVec.getBlockState(this.worldProvider.world); + if (state == null) + { + continue; + } + Block b = state.getBlock(); + if (b != null && !b.isAir(state, this.worldProvider.world, sideVec.toBlockPos()) && !(b instanceof BlockDynamicLiquid)) + { + nextLayer.add(sideVec); + if (bStart.isAir(bsStart, this.worldProvider.world, this.oneSSBlock)) + { + this.oneSSBlock = sideVec.toBlockPos(); + bStart = b; + } + float m = 1.0F; + // Liquids have a mass of 1, stone, metal blocks etc + // will be heavier + if (!(b instanceof BlockLiquid)) + { + // For most blocks, hardness gives a good idea + // of mass + m = b.getBlockHardness(state, this.worldProvider.world, sideVec.toBlockPos()); + if (m < 0.1F) + { + m = 0.1F; + } else if (m > 30F) + { + m = 30F; + } + // Wood items have a high hardness compared with + // their presumed mass + if (b.getMaterial(state) == Material.WOOD) + { + m /= 4; + } + + // TODO: higher mass for future Galacticraft + // hi-density item like neutronium + // Maybe also check for things in other mods by + // name: lead, uranium blocks? + } + thismassCentreX += m * sideVec.x; + thismassCentreY += m * sideVec.y; + thismassCentreZ += m * sideVec.z; + thismass += m; + thismoment += m * (sideVec.x * sideVec.x + sideVec.z * sideVec.z); + if (b instanceof BlockSpinThruster && !RedstoneUtil.isBlockReceivingRedstone(this.worldProvider.world, sideVec.toBlockPos())) + { + foundThrusters.add(sideVec.toBlockPos()); + } + } + } + } + } + + currentLayer = nextLayer; + nextLayer = new LinkedList(); + } + + if (placingThruster && !this.checked.contains(new BlockVec3(baseBlock))) + { + if (foundThrusters.size() > 0) + { + // The thruster was not placed on the existing contiguous space + // station: it must be. + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Thruster placed on wrong part of space station: base at " + this.oneSSBlock + " - baseBlock was " + baseBlock + " - found " + foundThrusters.size()); + } + return false; + } + + // No thruster on the original space station - so assume the player + // made new station and start check again + // This offers players a reset option: just remove all thrusters + // from original station then starting adding to new one + // (This first check prevents an infinite loop) + if (!this.oneSSBlock.equals(baseBlock)) + { + this.oneSSBlock = baseBlock; + IBlockState state = this.worldProvider.world.getBlockState(this.oneSSBlock); + if (state.getMaterial() != Material.AIR) + { + return this.refresh(baseBlock, true); + } + } + + return false; + + } + + // Update thruster lists based on what was found + this.thrustersPlus.clear(); + this.thrustersMinus.clear(); + for (BlockPos thruster : foundThrusters) + { + IBlockState state = this.worldProvider.world.getBlockState(thruster); + boolean reversed = state.getValue(BlockSpinThruster.ORIENTATION); + if (reversed) + { + this.thrustersMinus.add(thruster); + } else + { + this.thrustersPlus.add(thruster); + } + } + + // Calculate centre of mass + float mass = thismass; + + this.massCentreX = thismassCentreX / thismass + 0.5F; + float massCentreY = thismassCentreY / thismass + 0.5F; + this.massCentreZ = thismassCentreZ / thismass + 0.5F; + // System.out.println("(X,Z) = "+this.massCentreX+","+this.massCentreZ); + + this.setSpinCentre(this.massCentreX, this.massCentreZ); + + // The boundary is at the outer edges of the blocks + this.ssBoundsMaxX = thisssBoundsMaxX + 1; + this.ssBoundsMinX = thisssBoundsMinX; + this.ssBoundsMaxY = thisssBoundsMaxY + 1; + this.ssBoundsMinY = thisssBoundsMinY; + this.ssBoundsMaxZ = thisssBoundsMaxZ + 1; + this.ssBoundsMinZ = thisssBoundsMinZ; + + // Calculate momentOfInertia + thismoment -= this.massCentreX * this.massCentreX * mass; + thismoment -= this.massCentreZ * this.massCentreZ * mass; + this.momentOfInertia = thismoment; + + // TODO + // TODO defy gravity + // TODO break blocks which are outside SS (not in checked) + // TODO prevent spin if there is a huge number of blocks outside SS + + GalacticraftCore.logger.debug("MoI = " + this.momentOfInertia + " CoMx = " + this.massCentreX + " CoMz = " + this.massCentreZ); + + // Send packets to clients in this dimension + List objList = new ArrayList(); + objList.add(Double.valueOf(this.spinCentreX)); + objList.add(Double.valueOf(this.spinCentreZ)); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_DATA, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + + objList = new ArrayList(); + objList.add(Integer.valueOf(this.ssBoundsMinX)); + objList.add(Integer.valueOf(this.ssBoundsMaxX)); + objList.add(Integer.valueOf(this.ssBoundsMinY)); + objList.add(Integer.valueOf(this.ssBoundsMaxY)); + objList.add(Integer.valueOf(this.ssBoundsMinZ)); + objList.add(Integer.valueOf(this.ssBoundsMaxZ)); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_BOX, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + + this.updateSpinSpeed(); + + return true; + } + + public void updateSpinSpeed() + { + if (this.momentOfInertia > 0F) + { + float netTorque = 0F; + int countThrusters = 0; + int countThrustersReverse = 0; + + for (BlockPos thruster : this.thrustersPlus) + { + float xx = thruster.getX() - this.massCentreX; + float zz = thruster.getZ() - this.massCentreZ; + netTorque += MathHelper.sqrt(xx * xx + zz * zz); + countThrusters++; + } + for (BlockPos thruster : this.thrustersMinus) + { + float xx = thruster.getX() - this.massCentreX; + float zz = thruster.getZ() - this.massCentreZ; + netTorque -= MathHelper.sqrt(xx * xx + zz * zz); + countThrustersReverse++; + } + + if (countThrusters == countThrustersReverse) + { + this.angularVelocityAccel = 0.000004F; + this.angularVelocityTarget = 0F; + } else + { + countThrusters += countThrustersReverse; + if (countThrusters > 4) + { + countThrusters = 4; + } + + float maxRx = Math.max(this.ssBoundsMaxX - this.massCentreX, this.massCentreX - this.ssBoundsMinX); + float maxRz = Math.max(this.ssBoundsMaxZ - this.massCentreZ, this.massCentreZ - this.ssBoundsMinZ); + float maxR = Math.max(maxRx, maxRz); + this.angularVelocityTarget = MathHelper.sqrt(GFORCE / maxR) / 2; + // The divide by 2 is not scientific but is a Minecraft factor + // as everything happens more quickly + float spinCap = 0.00125F * countThrusters; + + // TODO: increase this above 20F in release versions so + // everything happens more slowly + this.angularVelocityAccel = netTorque / this.momentOfInertia / 20F; + if (this.angularVelocityAccel < 0) + { + this.angularVelocityAccel = -this.angularVelocityAccel; + this.angularVelocityTarget = -this.angularVelocityTarget; + if (this.angularVelocityTarget < -spinCap) + { + this.angularVelocityTarget = -spinCap; + } + } else + // Do not make it spin too fast or players might get dizzy + // Also make it so players need minimum 4 thrusters for best + // spin + if (this.angularVelocityTarget > spinCap) + { + this.angularVelocityTarget = spinCap; + } + + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("MaxR = " + maxR + " Angular vel = " + this.angularVelocityTarget + " Angular accel = " + this.angularVelocityAccel); + } + } + } + + if (!this.clientSide) + { + // Save the updated data for the world + this.save(); + } + } + + public void updateSpin() + { + if (!this.clientSide) + { + if (this.dataNotLoaded) + { + this.savefile = OrbitSpinSaveData.initWorldData(this.worldProvider.world); + this.readFromNBT(this.savefile.datacompound); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Loading data from save: " + this.savefile.datacompound.getFloat("omegaSky")); + } + this.dataNotLoaded = false; + } + + if (this.doSpinning) + { + boolean updateNeeded = true; + if (this.angularVelocityTarget < this.angularVelocityRadians) + { + float newAngle = this.angularVelocityRadians - this.angularVelocityAccel; + if (newAngle < this.angularVelocityTarget) + { + newAngle = this.angularVelocityTarget; + } + this.setSpinRate(newAngle); + this.thrustersFiring = true; + } else if (this.angularVelocityTarget > this.angularVelocityRadians) + { + float newAngle = this.angularVelocityRadians + this.angularVelocityAccel; + if (newAngle > this.angularVelocityTarget) + { + newAngle = this.angularVelocityTarget; + } + this.setSpinRate(newAngle); + this.thrustersFiring = true; + } else if (this.thrustersFiring) + { + this.thrustersFiring = false; + } else + { + updateNeeded = false; + } + + if (updateNeeded) + { + this.writeToNBT(this.savefile.datacompound); + this.savefile.markDirty(); + List objList = new ArrayList(); + objList.add(Float.valueOf(this.angularVelocityRadians)); + objList.add(Boolean.valueOf(this.thrustersFiring)); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_SPIN, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + } + } + + // Update entity positions if in freefall + this.loadedEntities.clear(); + this.loadedEntities.addAll(this.worldProvider.world.loadedEntityList); + for (Entity e : this.loadedEntities) + { + // TODO: What about vehicles from GC (buggies) and other mods? + if ((e instanceof EntityItem || e instanceof EntityLivingBase && !(e instanceof EntityPlayer) || e instanceof EntityTNTPrimed || e instanceof EntityFallingBlock) && !e.onGround) + { + AxisAlignedBB entityBoundingBox = e.getEntityBoundingBox(); + boolean outsideStation = entityBoundingBox.maxX < this.ssBoundsMinX || entityBoundingBox.minX > this.ssBoundsMaxX || entityBoundingBox.maxY < this.ssBoundsMinY + || entityBoundingBox.minY > this.ssBoundsMaxY || entityBoundingBox.maxZ < this.ssBoundsMinZ || entityBoundingBox.minZ > this.ssBoundsMaxZ; + + if (outsideStation || FreefallHandler.testEntityFreefall(this.worldProvider.world, entityBoundingBox)) + { + if (this.doSpinning) + { + this.moveRotatedEntity(e, this.spinCentreX, this.spinCentreZ, this.angularVelocityRadians); + } + FreefallHandler.tickFreefallEntity(e); + if (e instanceof ITumblable) + { + ((ITumblable) e).setTumbling(3F); + } + } else + { + if (e instanceof ITumblable) + { + ((ITumblable) e).setTumbling(0F); + } + } + } + } + } + } + + private void moveRotatedEntity(Entity e, double rotationCentreX, double rotationCentreZ, float deltaTheta) + { + // Do the rotation + if (deltaTheta != 0F) + { + float angle; + final double xx = e.posX - rotationCentreX; + final double zz = e.posZ - rotationCentreZ; + double arc = Math.sqrt(xx * xx + zz * zz); + if (xx == 0D) + { + angle = zz > 0 ? 3.1415926535F / 2 : -3.1415926535F / 2; + } else + { + angle = (float) Math.atan(zz / xx); + } + if (xx < 0D) + { + angle += 3.1415926535F; + } + angle += deltaTheta / 3F; + arc = arc * deltaTheta; + final double offsetX = -arc * MathHelper.sin(angle); + final double offsetZ = arc * MathHelper.cos(angle); + e.posX += offsetX; + e.posZ += offsetZ; + e.lastTickPosX += offsetX; + e.lastTickPosZ += offsetZ; + + // Rotated into an unloaded chunk (probably also drifted out to + // there): byebye + if (!e.world.isBlockLoaded(new BlockPos(MathHelper.floor(e.posX), 64, MathHelper.floor(e.posZ)))) + { + e.setDead(); + return; + } + + e.setEntityBoundingBox(e.getEntityBoundingBox().offset(offsetX, 0.0D, offsetZ)); + // TODO check for block collisions here - if so move the entity + // appropriately and apply fall damage + // Moving the entity = slide along / down + e.rotationYaw += this.skyAngularVelocity; + while (e.rotationYaw > 360F) + { + e.rotationYaw -= 360F; + } + + // Rotate the motion vector (motionX, motionZ) by the angular + // rotation + double velocity = Math.sqrt(e.motionX * e.motionX + e.motionZ * e.motionZ); + if (e.motionX == 0D) + { + angle = e.motionZ > 0 ? 3.1415926535F / 2 : -3.1415926535F / 2; + } else + { + angle = (float) Math.atan(e.motionZ / e.motionX); + } + if (e.motionX < 0D) + { + angle += 3.1415926535F; + } + angle += deltaTheta; + e.motionX = velocity * MathHelper.cos(angle); + e.motionZ = velocity * MathHelper.sin(angle); + } + } + + @SideOnly(Side.CLIENT) + public boolean updatePlayerForSpin(EntityPlayerSP p, float partial) + { + float angleDelta = partial * this.angularVelocityRadians; + if (this.doSpinning && angleDelta != 0F) + { + // TODO maybe need to test to make sure xx and zz are not too large + // (outside sight range of SS) + // TODO think about server + network load (loading/unloading chunks) + // when movement is rapid + // Maybe reduce chunkloading radius? + + boolean doCentrifugal = false; + float angle; + final double xx = p.posX - this.spinCentreX; + final double zz = p.posZ - this.spinCentreZ; + double arc = Math.sqrt(xx * xx + zz * zz); + if (xx == 0D) + { + angle = zz > 0 ? 3.1415926535F / 2 : -3.1415926535F / 2; + } else + { + angle = (float) Math.atan(zz / xx); + } + if (xx < 0D) + { + angle += 3.1415926535F; + } + angle += angleDelta / 3F; + arc = arc * angleDelta; + double offsetX = -arc * Math.sin(angle); + double offsetZ = arc * Math.cos(angle); + + // Check for block collisions here - if so move the player + // appropriately + // First check that there are no existing collisions where the + // player is now (TODO: bounce the player away) + if (p.world.getCollisionBoxes(p, p.getEntityBoundingBox()).size() == 0) + { + // Now check for collisions in the new direction and if there + // are some, try reducing the movement + int collisions = 0; + do + { + List list = p.world.getCollisionBoxes(p, p.getEntityBoundingBox().expand(offsetX, 0.0D, offsetZ)); + collisions = list.size(); + if (collisions > 0) + { + if (!doCentrifugal) + { + p.motionX += -offsetX; + p.motionZ += -offsetZ; + } + offsetX /= 2D; + offsetZ /= 2D; + if (offsetX < 0.01D && offsetX > -0.01D) + { + offsetX = 0D; + } + if (offsetZ < 0.01D && offsetZ > -0.01D) + { + offsetZ = 0D; + } + doCentrifugal = true; + + } + } while (collisions > 0); + + p.posX += offsetX; + p.posZ += offsetZ; + p.setEntityBoundingBox(p.getEntityBoundingBox().offset(offsetX, 0.0D, offsetZ)); + } + + p.rotationYaw += this.skyAngularVelocity * partial; + p.renderYawOffset += this.skyAngularVelocity * partial; + while (p.rotationYaw > 360F) + { + p.rotationYaw -= 360F; + } + while (p.rotationYaw < 0F) + { + p.rotationYaw += 360F; + } + + return doCentrifugal; + } + + return false; + } + + @SideOnly(Side.CLIENT) + public void applyCentrifugalForce(EntityPlayerSP p) + { + int quadrant = 0; + double xd = p.posX - this.spinCentreX; + double zd = p.posZ - this.spinCentreZ; + double accel = Math.sqrt(xd * xd + zd * zd) * this.angularVelocityRadians * this.angularVelocityRadians * 4D; + + if (xd < 0) + { + if (xd < -Math.abs(zd)) + { + quadrant = 2; + } else + { + quadrant = zd < 0 ? 3 : 1; + } + } else if (xd > Math.abs(zd)) + { + quadrant = 0; + } else + { + quadrant = zd < 0 ? 3 : 1; + } + + switch (quadrant) + { + case 0: + p.motionX += accel; + break; + case 1: + p.motionZ += accel; + break; + case 2: + p.motionX -= accel; + break; + case 3: + default: + p.motionZ -= accel; + } + } + + /** + * Call this when player first login/transfer to this dimension

TODO + * how can this code be called by other mods / plugins with teleports (e.g. + * Bukkit)? See WorldUtil.teleportEntity() + * + * @param player + */ + public void sendPackets(EntityPlayerMP player) + { + List objList = new ArrayList(); + objList.add(this.angularVelocityRadians); + objList.add(this.thrustersFiring); + if (player == null) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_SPIN, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + } else + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_SPIN, GCCoreUtil.getDimensionID(player.world), objList), player); + } + + objList = new ArrayList<>(); + objList.add(this.spinCentreX); + objList.add(this.spinCentreZ); + if (player == null) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_DATA, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + } else + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_DATA, GCCoreUtil.getDimensionID(player.world), objList), player); + } + + objList = new ArrayList<>(); + objList.add(this.ssBoundsMinX); + objList.add(this.ssBoundsMaxX); + objList.add(this.ssBoundsMinY); + objList.add(this.ssBoundsMaxY); + objList.add(this.ssBoundsMinZ); + objList.add(this.ssBoundsMaxZ); + if (player == null) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_BOX, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + } else + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_BOX, GCCoreUtil.getDimensionID(player.world), objList), player); + } + } + + private void save() + { + if (this.savefile == null) + { + this.savefile = OrbitSpinSaveData.initWorldData(this.worldProvider.world); + this.dataNotLoaded = false; + } else + { + this.writeToNBT(this.savefile.datacompound); + this.savefile.markDirty(); + } + } + + public void readFromNBT(NBTTagCompound nbt) + { + this.doSpinning = true;// nbt.getBoolean("doSpinning"); + this.angularVelocityRadians = nbt.getFloat("omegaRad"); + this.skyAngularVelocity = nbt.getFloat("omegaSky"); + this.angularVelocityTarget = nbt.getFloat("omegaTarget"); + this.angularVelocityAccel = nbt.getFloat("omegaAcc"); + + NBTTagCompound oneBlock = (NBTTagCompound) nbt.getTag("oneBlock"); + if (oneBlock != null) + { +// this.oneSSBlock = BlockVec3.readFromNBT(oneBlock); + this.oneSSBlock = new BlockPos(oneBlock.getInteger("x"), oneBlock.getInteger("y"), oneBlock.getInteger("z")); + } else + { + this.oneSSBlock = null; + } + + // A lot of the data can be refreshed by refresh + this.refresh(this.oneSSBlock, false); + + this.sendPackets(null); + } + + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + nbt.setBoolean("doSpinning", this.doSpinning); + nbt.setFloat("omegaRad", this.angularVelocityRadians); + nbt.setFloat("omegaSky", this.skyAngularVelocity); + nbt.setFloat("omegaTarget", this.angularVelocityTarget); + nbt.setFloat("omegaAcc", this.angularVelocityAccel); + if (this.oneSSBlock != null) + { + NBTTagCompound oneBlock = new NBTTagCompound(); + oneBlock.setInteger("x", this.oneSSBlock.getX()); + oneBlock.setInteger("y", this.oneSSBlock.getY()); + oneBlock.setInteger("z", this.oneSSBlock.getZ()); + nbt.setTag("oneBlock", oneBlock); + } + return nbt; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeMoon.java new file mode 100644 index 00000000..333bd5a5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeMoon.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class TeleportTypeMoon implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return ConfigManagerCore.disableLander; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + double x = stats.getCoordsTeleportedFromX(); + double z = stats.getCoordsTeleportedFromZ(); + int limit = ConfigManagerCore.otherPlanetWorldBorders - 2; + if (limit > 20) + { + if (x > limit) + { + z *= limit / x; + x = limit; + } else if (x < -limit) + { + z *= -limit / x; + x = -limit; + } + if (z > limit) + { + x *= limit / z; + z = limit; + } else if (z < -limit) + { + x *= -limit / z; + z = -limit; + } + } + return new Vector3(x, ConfigManagerCore.disableLander ? 250.0 : 900.0, z); + } + + return null; + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, ConfigManagerCore.disableLander ? 250.0 : 900.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + if (ConfigManagerCore.disableLander) + { + final double x = (rand.nextDouble() * 2 - 1.0D) * 4.0D; + final double z = (rand.nextDouble() * 2 - 1.0D) * 4.0D; + return new Vector3(player.posX + x, 220.0D, player.posZ + z); + } + + return null; + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + GCPlayerStats stats = GCPlayerStats.get(player); + if (!ridingAutoRocket && !ConfigManagerCore.disableLander && stats.getTeleportCooldown() <= 0) + { + if (player.capabilities.isFlying) + { + player.capabilities.isFlying = false; + } + + EntityLander lander = new EntityLander(player); + lander.setPosition(player.posX, player.posY, player.posZ); + + if (!newWorld.isRemote) + { + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) newWorld); + lander.forceSpawn = true; + newWorld.spawnEntity(lander); + lander.setWorld(newWorld); + newWorld.updateEntityWithOptionalForce(lander, true); + player.startRiding(lander); + CompatibilityManager.forceLoadChunksEnd((WorldServer) newWorld, previous); + GalacticraftCore.logger.debug("Entering lander at : " + player.posX + "," + player.posZ + " lander spawn at: " + lander.posX + "," + lander.posZ); + } + + stats.setTeleportCooldown(10); + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOrbit.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOrbit.java new file mode 100644 index 00000000..917f853a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOrbit.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; + +public class TeleportTypeOrbit implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + return new Vector3(0.5, 65.0, 0.5); + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity player) + { + return new Vector3(0.5, 65.0, 0.5); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return new Vector3(-8.5D, 90.0, -1.5D); + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOverworld.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOverworld.java new file mode 100644 index 00000000..d5197f86 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOverworld.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; + +public class TeleportTypeOverworld implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return true; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + return new Vector3(stats.getCoordsTeleportedFromX(), 250.0, stats.getCoordsTeleportedFromZ()); + } + + return null; + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, 250.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + final double x = (rand.nextDouble() * 2 - 1.0D) * 5.0D; + final double z = (rand.nextDouble() * 2 - 1.0D) * 5.0D; + + return new Vector3(player.posX + x, 230.0D, player.posZ + z); + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeSpaceStation.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeSpaceStation.java new file mode 100644 index 00000000..3321e1a3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeSpaceStation.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TeleportTypeSpaceStation implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + return new Vector3(0.5, 65.0, 0.5); + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity player) + { + return new Vector3(0.5, 65.0, 0.5); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return null; + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + if (ConfigManagerCore.spaceStationsRequirePermission && !newWorld.isRemote) + { + player.sendMessage(new TextComponentString(EnumColor.YELLOW + GCCoreUtil.translate("gui.spacestation.type_command") + " " + EnumColor.AQUA + "/ssinvite " + + GCCoreUtil.translate("gui.spacestation.playername") + " " + EnumColor.YELLOW + GCCoreUtil.translate("gui.spacestation.to_allow_entry"))); + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldDataSpaceRaces.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldDataSpaceRaces.java new file mode 100644 index 00000000..ec3f0bf9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldDataSpaceRaces.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.storage.WorldSavedData; + +import micdoodle8.mods.galacticraft.core.Constants; + +public class WorldDataSpaceRaces extends WorldSavedData +{ + + public static final String saveDataID = Constants.GCDATAFOLDER + "GCSpaceRaceData"; + private NBTTagCompound dataCompound; + + public WorldDataSpaceRaces(String id) + { + super(id); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + SpaceRaceManager.loadSpaceRaces(nbt); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + return SpaceRaceManager.saveSpaceRaces(nbt); + } + + public static WorldDataSpaceRaces initWorldData(World world) + { + WorldDataSpaceRaces worldData = (WorldDataSpaceRaces) world.loadData(WorldDataSpaceRaces.class, WorldDataSpaceRaces.saveDataID); + + if (worldData == null) + { + worldData = new WorldDataSpaceRaces(WorldDataSpaceRaces.saveDataID); + world.setData(WorldDataSpaceRaces.saveDataID, worldData); + worldData.dataCompound = new NBTTagCompound(); + worldData.markDirty(); + } + + return worldData; + } + + @Override + public boolean isDirty() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderMoon.java new file mode 100644 index 00000000..ad50d318 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderMoon.java @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; +import net.minecraft.world.gen.IChunkGenerator; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.world.gen.ChunkProviderMoon; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; + +public class WorldProviderMoon extends WorldProviderSpace implements IGalacticraftWorldProvider, ISolarLevel +{ + + @Override + public DimensionType getDimensionType() + { + return GCDimensions.MOON; + } + + @Override + public Vector3 getFogColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public Vector3 getSkyColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 192000L; + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderMoon.class; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + final float var2 = this.world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.cos(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 0.5F + 0.3F; + } + + @Override + public boolean isSkyColored() + { + return false; + } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 68; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + + // Overriding so that beds do not explode on Moon + @Override + public boolean canRespawnHere() + { + if (EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = false; + return true; + } + return false; + } + + @Override + public float getGravity() + { + return 0.062F; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.7D; + } + + @Override + public double getSolarEnergyMultiplier() + { + return 1.4D; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier > 0; + } + + @Override + public float getFallDamageModifier() + { + return 0.18F; + } + + @Override + public CelestialBody getCelestialBody() + { + return GalacticraftCore.moonMoon; + } + + @Override + public int getDungeonSpacing() + { + return 704; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasure.MOONCHEST; + } + + @Override + public List getSurfaceBlocks() + { + List list = new LinkedList<>(); + list.add(GCBlocks.blockMoon); + return list; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderOverworldOrbit.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderOverworldOrbit.java new file mode 100644 index 00000000..7c82c409 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderOverworldOrbit.java @@ -0,0 +1,272 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IExitHeight; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.client.SkyProviderOrbit; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; + +public class WorldProviderOverworldOrbit extends WorldProviderSpaceStation implements IOrbitDimension, IZeroGDimension, ISolarLevel, IExitHeight +{ + + Set freefallingEntities = new HashSet(); + + @Override + public DimensionType getDimensionType() + { + return GCDimensions.ORBIT; + } + + @Override + public Vector3 getFogColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public Vector3 getSkyColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 24000L; + } + + @Override + public boolean isDaytime() + { + final float a = this.world.getCelestialAngle(0F); + // TODO: adjust this according to size of planet below + return a < 0.42F || a > 0.58F; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + final float var2 = this.world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.cos(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 0.5F + 0.3F; + } + + @Override + public boolean isSkyColored() + { + return false; + } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 64; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + +// @Override +// public String getWelcomeMessage() +// { +// return "Entering Earth Orbit"; +// } +// +// @Override +// public String getDepartMessage() +// { +// return "Leaving Earth Orbit"; +// } + + @Override + public CelestialBody getCelestialBody() + { + return GalacticraftCore.satelliteSpaceStation; + } + + @Override + public float getGravity() + { + return 0.075F; + } + + @Override + public double getMeteorFrequency() + { + return 0; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.5D; + } + + @Override + @Deprecated + public String getPlanetToOrbit() + { + return "overworld"; + } + + @Override + public int getPlanetIdToOrbit() + { + return 0; + } + + @Override + public int getYCoordToTeleportToPlanet() + { + return 30; + } + + @Override + public String getSaveFolder() + { + return "DIM_SPACESTATION" + this.getDimension(); + } + + @Override + public double getSolarEnergyMultiplier() + { + return ConfigManagerCore.spaceStationEnergyScalar; + } + + @Override + public double getYCoordinateToTeleport() + { + return 750; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier > 0; + } + + @Override + public float getFallDamageModifier() + { + return 0.4F; + } + + @Override + public boolean inFreefall(Entity entity) + { + return freefallingEntities.contains(entity); + } + + @Override + public void setInFreefall(Entity entity) + { + freefallingEntities.add(entity); + } + + @Override + public void updateWeather() + { + freefallingEntities.clear(); + super.updateWeather(); + } + + @Override + @SideOnly(Side.CLIENT) + public void setSpinDeltaPerTick(float angle) + { + SkyProviderOrbit skyProvider = ((SkyProviderOrbit) this.getSkyRenderer()); + if (skyProvider != null) + skyProvider.spinDeltaPerTick = angle; + } + + @Override + @SideOnly(Side.CLIENT) + public float getSkyRotation() + { + SkyProviderOrbit skyProvider = ((SkyProviderOrbit) this.getSkyRenderer()); + return skyProvider.spinAngle; + } + + @Override + @SideOnly(Side.CLIENT) + public void createSkyProvider() + { + this.setSkyRenderer(new SkyProviderOrbit(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"), true, true)); + this.setSpinDeltaPerTick(this.getSpinManager().getSpinRate()); + + if (this.getCloudRenderer() == null) + this.setCloudRenderer(new CloudRenderer()); + } + + @Override + public int getDungeonSpacing() + { + return 0; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasure.MOONCHEST; + } + + @Override + public List getSurfaceBlocks() + { + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderSpaceStation.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderSpaceStation.java new file mode 100644 index 00000000..c378223f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderSpaceStation.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import net.minecraft.world.gen.IChunkGenerator; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.core.world.gen.ChunkProviderOrbit; + +/*** + * Properties of a WorldProviderSpaceStation 1. Spinnable with Spin Thrusters + * (if you don't want spin, create your own SpinManager subclass which does + * nothing) (note: your SkyProvider needs to rotate according to + * setSpinDeltaPerTick() 2. Oregen from other mods is inhibited in this + * dimension 3. AstroMiner placement is inhibited in this dimension 4. The + * player on arrival into this dimension (after rocket flight) will be in 1st + * person view + * + */ +public abstract class WorldProviderSpaceStation extends WorldProviderSpace +{ + + private SpinManager spinManager = new SpinManager(this); + + public SpinManager getSpinManager() + { + return spinManager; + } + + @Override + public void setDimension(int var1) + { + super.setDimension(var1); + } + + /** + * Called only once from WorldProvider.registerWorld() so this provides a + * handy initialisation method + */ + @Override + protected void init() + { + super.init(); + this.getSpinManager().registerServerSide(); + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderOrbit.class; + } + + @Override + public void updateWeather() + { + super.updateWeather(); + spinManager.updateSpin(); + } + + @SideOnly(Side.CLIENT) + public abstract void setSpinDeltaPerTick(float angle); + + @SideOnly(Side.CLIENT) + public abstract float getSkyRotation(); + + @SideOnly(Side.CLIENT) + public abstract void createSkyProvider(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyConfigHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyConfigHandler.java new file mode 100644 index 00000000..ce3a3699 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyConfigHandler.java @@ -0,0 +1,421 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy; + +import java.io.File; +import java.util.ArrayList; + +import net.minecraftforge.common.config.Configuration; + +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; + +import buildcraft.api.mj.MjAPI; +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasRegistry; + +/** + * The universal energy compatibility module allows Galacticraft to be + * compatible with most other major power systems in Minecraft as well. + * + * @author Calclavia, Micdoodle, radfast + */ +public class EnergyConfigHandler +{ + + private static Configuration config; + + /** + * Ratio of Build craft(MJ) energy to Galacticraft energy(gJ). Multiply BC3 + * energy by this to convert to gJ. + */ + public static float BC3_RATIO = 16F; + private static float BC8_MICROJOULE_RATIO = 1000000F; + public static float BC8_INTERNAL_RATIO = BC3_RATIO / BC8_MICROJOULE_RATIO; + + // Note on energy equivalence: + // + // In BuildCraft, 1 lump of coal produces 1600 MJ (Minecraft Joules) + // in a Stirling Engine. This is by design: coal has 1600 ticks burn time + // in a vanilla Furnace, which corresponds with 1600 MJ in BuildCraft. + // + // In Galacticraft, 1 lump of coal produces 38,400 gJ + // in a coal generator operating at 100% hull heat (less efficient at lower + // hull heats). + + // If 1600 MJ = 38,400 gJ then strictly 1 MJ = 24 gJ. + // But, that feels imbalanced - for example redstone engines make too much + // gJ if the ratio is 24. + // So, the BC conversion ratio is set at 16. + // Think of it as the Galacticraft coal generator at full heat turning coal + // into + // electrical energy 50% more efficiently than BuildCraft's Stirling Engine + // can. + + /** + * Ratio of RF energy to Galacticraft energy(gJ). Multiply RF energy by this + * to convert to gJ. + */ + public static float RF_RATIO = EnergyConfigHandler.BC3_RATIO / 10F; + + /** + * Ratio of IC2 energy (EU) to Galacticraft energy(gJ). Multiply IC2 power + * by this to convert to gJ. + */ + public static float IC2_RATIO = EnergyConfigHandler.BC3_RATIO / 2.44F; + + public static float MEKANISM_RATIO = EnergyConfigHandler.IC2_RATIO / 10F; + + private static int conversionLossFactor = 100; + + /** + * Convert gJ back to Buildcraft MJ (microJoules) + */ + public static float TO_BC_RATIO = 1 / EnergyConfigHandler.BC3_RATIO * BC8_MICROJOULE_RATIO; + + /** + * Convert gJ back to RF + */ + public static float TO_RF_RATIO = 1 / EnergyConfigHandler.RF_RATIO; + + /** + * Convert gJ back to IC2 EU + */ + public static float TO_IC2_RATIO = 1 / EnergyConfigHandler.IC2_RATIO; + + public static float TO_MEKANISM_RATIO = 1 / EnergyConfigHandler.MEKANISM_RATIO; + + public static float TO_BC_RATIOdisp = 1 / EnergyConfigHandler.BC3_RATIO; + public static float TO_RF_RATIOdisp = 1 / EnergyConfigHandler.RF_RATIO; + public static float TO_IC2_RATIOdisp = 1 / EnergyConfigHandler.IC2_RATIO; + public static float TO_MEKANISM_RATIOdisp = 1 / EnergyConfigHandler.MEKANISM_RATIO; + + /** + * Oxygen gas used when Mekanism is loaded. Always null otherwise. + */ + public static Object gasOxygen = null; + public static Object gasHydrogen = null; + + public static boolean displayEnergyUnitsBC = false; + public static boolean displayEnergyUnitsIC2 = false; + public static boolean displayEnergyUnitsMek = false; + public static boolean displayEnergyUnitsRF = false; + + private static boolean cachedBCLoaded = false; + private static boolean cachedBCLoadedValue = false; + private static int cachedBCVersion = -1; + private static boolean cachedBCRLoaded = false; + private static boolean cachedBCRLoadedValue = false; + private static boolean cachedRFLoaded = false; + private static boolean cachedRFLoadedValue = false; + private static boolean cachedRF1LoadedValue = false; + private static boolean cachedRF2LoadedValue = false; + + private static boolean disableMJinterface = false; + + public static boolean disableBuildCraftInput = false; + public static boolean disableBuildCraftOutput = false; + public static boolean disableRFInput = false; + public static boolean disableRFOutput = false; + public static boolean disableFEInput = false; + public static boolean disableFEOutput = false; + public static boolean disableIC2Input = false; + public static boolean disableIC2Output = false; + public static boolean disableMekanismInput = false; + public static boolean disableMekanismOutput = false; + + /** + * You must call this function to enable the Universal Network module. + */ + public static void setDefaultValues(File file) + { + if (EnergyConfigHandler.config == null) + { + EnergyConfigHandler.config = new Configuration(file); + } + + EnergyConfigHandler.config.load(); + EnergyConfigHandler.IC2_RATIO = + (float) EnergyConfigHandler.config.get("Compatibility", "IndustrialCraft Conversion Ratio", EnergyConfigHandler.IC2_RATIO).getDouble(EnergyConfigHandler.IC2_RATIO); + EnergyConfigHandler.RF_RATIO = (float) EnergyConfigHandler.config.get("Compatibility", "RF Conversion Ratio", EnergyConfigHandler.RF_RATIO).getDouble(EnergyConfigHandler.RF_RATIO); + EnergyConfigHandler.BC3_RATIO = (float) EnergyConfigHandler.config.get("Compatibility", "BuildCraft Conversion Ratio", EnergyConfigHandler.BC3_RATIO).getDouble(EnergyConfigHandler.BC3_RATIO); + EnergyConfigHandler.MEKANISM_RATIO = + (float) EnergyConfigHandler.config.get("Compatibility", "Mekanism Conversion Ratio", EnergyConfigHandler.MEKANISM_RATIO).getDouble(EnergyConfigHandler.MEKANISM_RATIO); + EnergyConfigHandler.conversionLossFactor = + EnergyConfigHandler.config.get("Compatibility", "Loss factor when converting energy as a percentage (100 = no loss, 90 = 10% loss ...)", 100).getInt(100); + if (EnergyConfigHandler.conversionLossFactor > 100) + { + EnergyConfigHandler.conversionLossFactor = 100; + } + if (EnergyConfigHandler.conversionLossFactor < 5) + { + EnergyConfigHandler.conversionLossFactor = 5; + } + + updateRatios(); + + EnergyConfigHandler.displayEnergyUnitsBC = + EnergyConfigHandler.config.get("Display", "If BuildCraft is loaded, show Galacticraft machines energy as MJ instead of gJ?", false).getBoolean(false); + EnergyConfigHandler.displayEnergyUnitsIC2 = + EnergyConfigHandler.config.get("Display", "If IndustrialCraft2 is loaded, show Galacticraft machines energy as EU instead of gJ?", false).getBoolean(false); + EnergyConfigHandler.displayEnergyUnitsMek = + EnergyConfigHandler.config.get("Display", "If Mekanism is loaded, show Galacticraft machines energy as Joules (J) instead of gJ?", false).getBoolean(false); + EnergyConfigHandler.displayEnergyUnitsRF = EnergyConfigHandler.config.get("Display", "Show Galacticraft machines energy in RF instead of gJ?", false).getBoolean(false); + + EnergyConfigHandler.disableMJinterface = EnergyConfigHandler.config.get("Compatibility", "Disable old Buildcraft API (MJ) interfacing completely?", false).getBoolean(false); + + EnergyConfigHandler.disableBuildCraftInput = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of BuildCraft energy", false).getBoolean(false); + EnergyConfigHandler.disableBuildCraftOutput = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of BuildCraft energy", false).getBoolean(false); + EnergyConfigHandler.disableRFInput = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of RF energy", false).getBoolean(false); + EnergyConfigHandler.disableRFOutput = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of RF energy", false).getBoolean(false); + EnergyConfigHandler.disableFEInput = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of Forge Energy to GC machines", false).getBoolean(false); + EnergyConfigHandler.disableFEOutput = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of Forge Energy from GC machines", false).getBoolean(false); + EnergyConfigHandler.disableIC2Input = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of IC2 energy", false).getBoolean(false); + EnergyConfigHandler.disableIC2Output = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of IC2 energy", false).getBoolean(false); + EnergyConfigHandler.disableMekanismInput = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of Mekanism energy", false).getBoolean(false); + EnergyConfigHandler.disableMekanismOutput = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of Mekanism energy", false).getBoolean(false); + + if (!EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + } + if (!EnergyConfigHandler.isMekanismLoaded()) + { + EnergyConfigHandler.displayEnergyUnitsMek = false; + } + if (EnergyConfigHandler.displayEnergyUnitsIC2) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + } + if (EnergyConfigHandler.displayEnergyUnitsMek) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + } + if (EnergyConfigHandler.displayEnergyUnitsRF) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = false; + } + + EnergyConfigHandler.config.save(); + } + + public static void initGas() + { + if (EnergyConfigHandler.isMekanismLoaded()) + { + Gas oxygen = GasRegistry.getGas("oxygen"); + + if (oxygen == null) + { + EnergyConfigHandler.gasOxygen = GasRegistry.register(new Gas(GCFluids.fluidOxygenGas)).registerFluid(); + } else + { + EnergyConfigHandler.gasOxygen = oxygen; + } + + Gas hydrogen = GasRegistry.getGas("hydrogen"); + + if (hydrogen == null) + { + EnergyConfigHandler.gasHydrogen = GasRegistry.register(new Gas(GCFluids.fluidHydrogenGas)).registerFluid(); + } else + { + EnergyConfigHandler.gasHydrogen = hydrogen; + } + } + } + + /** + * Checks using the FML loader too see if IC2 is loaded + */ + public static boolean isIndustrialCraft2Loaded() + { + return CompatibilityManager.isIc2Loaded(); + } + + public static boolean isBuildcraftLoaded() + { + if (!cachedBCRLoaded) + { + boolean mjAPIFound = false; + try + { + Class.forName("buildcraft.api.mj.MjAPI"); + mjAPIFound = true; + BC8_MICROJOULE_RATIO = MjAPI.MJ; + BC8_INTERNAL_RATIO = BC3_RATIO / BC8_MICROJOULE_RATIO; + TO_BC_RATIO = conversionLossFactor / 100F / EnergyConfigHandler.BC3_RATIO * BC8_MICROJOULE_RATIO; + } catch (Throwable ignore) + { + } + cachedBCRLoaded = true; + cachedBCRLoadedValue = mjAPIFound && CompatibilityManager.isBCraftEnergyLoaded() && CompatibilityManager.classBCTransportPipeTile != null; + } + + return cachedBCRLoadedValue; + } + + public static boolean isRFAPILoaded() + { + if (!cachedRFLoaded) + { + initialiseRF(); + } + + return cachedRFLoadedValue; + } + + public static boolean isRFAPIv1Loaded() + { + if (!cachedRFLoaded) + { + initialiseRF(); + } + + return cachedRF1LoadedValue; + } + + public static boolean isRFAPIv2Loaded() + { + if (!cachedRFLoaded) + { + initialiseRF(); + } + + return cachedRF2LoadedValue; + } + + private static void initialiseRF() + { + cachedRFLoaded = true; + cachedRFLoadedValue = false; + cachedRF2LoadedValue = false; + int count = 0; + int count2 = 0; + try + { + if (Class.forName("cofh.redstoneflux.api.IEnergyConnection") != null) + { + count++; + } + if (Class.forName("cofh.redstoneflux.api.IEnergyHandler") != null) + { + count += 2; + } + } catch (Exception e) + { + } + try + { + if (Class.forName("cofh.redstoneflux.api.IEnergyProvider") != null) + { + count2++; + } + } catch (Exception e) + { + } + try + { + if (Class.forName("cofh.redstoneflux.api.IEnergyReceiver") != null) + { + count2++; + } + } catch (Exception e) + { + } + + if ((count + count2 == 3 && count2 != 1) || count + count2 == 5) + { + cachedRFLoadedValue = true; + cachedRF1LoadedValue = (count == 3); + cachedRF2LoadedValue = (count2 == 2); + } else if (count > 0 || count2 > 0) + { + GalacticraftCore.logger.error("Incomplete Redstone Flux API detected: Galacticraft will not support RF energy connections until this is fixed."); + } + } + + public static boolean isMekanismLoaded() + { + return CompatibilityManager.isMekanismLoaded(); + } + + private static void updateRatios() + { + // Sense checks to avoid crazy large inverse ratios or ratios + if (EnergyConfigHandler.IC2_RATIO < 0.01F) + { + EnergyConfigHandler.IC2_RATIO = 0.01F; + } + if (EnergyConfigHandler.RF_RATIO < 0.001F) + { + EnergyConfigHandler.RF_RATIO = 0.001F; + } + if (EnergyConfigHandler.BC3_RATIO < 0.01F) + { + EnergyConfigHandler.BC3_RATIO = 0.01F; + } + if (EnergyConfigHandler.MEKANISM_RATIO < 0.001F) + { + EnergyConfigHandler.MEKANISM_RATIO = 0.001F; + } + if (EnergyConfigHandler.IC2_RATIO > 1000F) + { + EnergyConfigHandler.IC2_RATIO = 1000F; + } + if (EnergyConfigHandler.RF_RATIO > 100F) + { + EnergyConfigHandler.RF_RATIO = 100F; + } + if (EnergyConfigHandler.BC3_RATIO > 1000F) + { + EnergyConfigHandler.BC3_RATIO = 1000F; + } + if (EnergyConfigHandler.MEKANISM_RATIO > 100F) + { + EnergyConfigHandler.MEKANISM_RATIO = 100F; + } + + float factor = conversionLossFactor / 100F; + TO_BC_RATIO = factor / EnergyConfigHandler.BC3_RATIO * BC8_MICROJOULE_RATIO; + TO_RF_RATIO = factor / EnergyConfigHandler.RF_RATIO; + TO_IC2_RATIO = factor / EnergyConfigHandler.IC2_RATIO; + TO_MEKANISM_RATIO = factor / EnergyConfigHandler.MEKANISM_RATIO; + TO_BC_RATIOdisp = 1 / EnergyConfigHandler.BC3_RATIO; + TO_RF_RATIOdisp = 1 / EnergyConfigHandler.RF_RATIO; + TO_IC2_RATIOdisp = 1 / EnergyConfigHandler.IC2_RATIO; + TO_MEKANISM_RATIOdisp = 1 / EnergyConfigHandler.MEKANISM_RATIO; + EnergyConfigHandler.BC3_RATIO *= factor; + EnergyConfigHandler.RF_RATIO *= factor; + EnergyConfigHandler.IC2_RATIO *= factor; + EnergyConfigHandler.MEKANISM_RATIO *= factor; + } + + public static void serverConfigOverride(ArrayList returnList) + { + returnList.add(EnergyConfigHandler.BC3_RATIO); + returnList.add(EnergyConfigHandler.RF_RATIO); + returnList.add(EnergyConfigHandler.IC2_RATIO); + returnList.add(EnergyConfigHandler.MEKANISM_RATIO); + returnList.add(EnergyConfigHandler.conversionLossFactor); + } + + public static void setConfigOverride(float sBC3, float sRF, float sIC2, float sMEK, int sLossRatio) + { + EnergyConfigHandler.BC3_RATIO = sBC3; + EnergyConfigHandler.RF_RATIO = sRF; + EnergyConfigHandler.IC2_RATIO = sIC2; + EnergyConfigHandler.MEKANISM_RATIO = sMEK; + EnergyConfigHandler.conversionLossFactor = sLossRatio; + updateRatios(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyDisplayHelper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyDisplayHelper.java new file mode 100644 index 00000000..c8c43b12 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyDisplayHelper.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy; + +import java.util.List; + +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextFormatting; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class EnergyDisplayHelper +{ + + public static void getEnergyDisplayTooltip(float energyVal, float maxEnergy, List strList) + { + strList.add(TextFormatting.GREEN + GCCoreUtil.translate("gui.message.energy") + ": " + getEnergyDisplayS(energyVal)); + strList.add(TextFormatting.RED + GCCoreUtil.translate("gui.message.max_energy") + ": " + getEnergyDisplayS(maxEnergy)); + } + + public static String getEnergyDisplayS(float energyVal) + { + if (EnergyConfigHandler.displayEnergyUnitsIC2) + { + return getEnergyDisplayIC2(energyVal * EnergyConfigHandler.TO_IC2_RATIOdisp); + } else if (EnergyConfigHandler.displayEnergyUnitsBC) + { + return getEnergyDisplayBC(energyVal * EnergyConfigHandler.TO_BC_RATIOdisp); + } else if (EnergyConfigHandler.displayEnergyUnitsMek) + { + return getEnergyDisplayMek(energyVal * EnergyConfigHandler.TO_MEKANISM_RATIOdisp); + } else if (EnergyConfigHandler.displayEnergyUnitsRF) + { + return getEnergyDisplayRF(energyVal * EnergyConfigHandler.TO_RF_RATIOdisp); + } + String val = String.valueOf(getEnergyDisplayI(energyVal)); + String newVal = ""; + + for (int i = val.length() - 1; i >= 0; i--) + { + newVal += val.charAt(val.length() - 1 - i); + if (i % 3 == 0 && i != 0) + { + newVal += ','; + } + } + + return newVal + " gJ"; + } + + public static String getEnergyDisplayIC2(float energyVal) + { + String val = String.valueOf(getEnergyDisplayI(energyVal)); + String newVal = ""; + + for (int i = val.length() - 1; i >= 0; i--) + { + newVal += val.charAt(val.length() - 1 - i); + if (i % 3 == 0 && i != 0) + { + newVal += ','; + } + } + + return newVal + " EU"; + } + + public static String getEnergyDisplayBC(float energyVal) + { + String val = String.valueOf(getEnergyDisplayI(energyVal)); + + return val + " MJ"; + } + + public static String getEnergyDisplayMek(float energyVal) + { + if (energyVal < 1000) + { + String val = String.valueOf(getEnergyDisplayI(energyVal)); + return val + " J"; + } else if (energyVal < 1000000) + { + String val = getEnergyDisplay1DP(energyVal / 1000); + return val + " kJ"; + } else + { + String val = getEnergyDisplay1DP(energyVal / 1000000); + return val + " MJ"; + } + } + + public static String getEnergyDisplayRF(float energyVal) + { + String val = String.valueOf(getEnergyDisplayI(energyVal)); + + return val + " RF"; + } + + public static int getEnergyDisplayI(float energyVal) + { + return MathHelper.floor(energyVal); + } + + public static String getEnergyDisplay1DP(float energyVal) + { + return "" + MathHelper.floor(energyVal) + "." + (MathHelper.floor(energyVal * 10) % 10) + (MathHelper.floor(energyVal * 100) % 10); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyUtil.java new file mode 100644 index 00000000..35922bfd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyUtil.java @@ -0,0 +1,952 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.List; +import java.util.Set; + +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +import buildcraft.api.mj.IMjPassiveProvider; +import buildcraft.api.mj.IMjReceiver; +import buildcraft.api.mj.MjAPI; +import cofh.redstoneflux.api.IEnergyConnection; +import cofh.redstoneflux.api.IEnergyContainerItem; +import cofh.redstoneflux.api.IEnergyHandler; +import cofh.redstoneflux.api.IEnergyProvider; +import cofh.redstoneflux.api.IEnergyReceiver; +import ic2.api.energy.EnergyNet; +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyConductor; +import ic2.api.energy.tile.IEnergyEmitter; +import ic2.api.energy.tile.IEnergySink; +import ic2.api.energy.tile.IEnergySource; +import ic2.api.energy.tile.IEnergyTile; +import ic2.api.item.IElectricItem; +import ic2.api.item.ISpecialElectricItem; +import mekanism.api.energy.IEnergizedItem; +import mekanism.api.energy.IStrictEnergyAcceptor; +import mekanism.api.energy.IStrictEnergyOutputter; +import mekanism.api.energy.IStrictEnergyStorage; +import mekanism.api.gas.IGasHandler; +import mekanism.api.gas.ITubeConnection; + +public class EnergyUtil +{ + + private static boolean isMekLoaded = EnergyConfigHandler.isMekanismLoaded(); + private static boolean isRFLoaded = EnergyConfigHandler.isRFAPILoaded(); + private static boolean isRF1Loaded = EnergyConfigHandler.isRFAPIv1Loaded(); + private static boolean isRF2Loaded = EnergyConfigHandler.isRFAPIv2Loaded(); + private static boolean isIC2Loaded = EnergyConfigHandler.isIndustrialCraft2Loaded(); + private static boolean isIC2ClassicLoaded = CompatibilityManager.isIc2ClassicLoaded(); + private static boolean isIC2TileLoaded = false; + private static boolean isBCReallyLoaded = EnergyConfigHandler.isBuildcraftLoaded(); + + public static boolean voltageParameterIC2 = false; + public static Method demandedEnergyIC2 = null; + public static Method injectEnergyIC2 = null; + public static Method offeredEnergyIC2 = null; + public static Method drawEnergyIC2 = null; + public static Class clazzIC2EnergyTile = null; + public static Class clazzIC2Cable = null; + public static Class clazzMekCable = null; + public static Class clazzEnderIOCable = null; + public static Class clazzMFRRednetEnergyCable = null; + public static Class clazzRailcraftEngine = null; + private static Class clazzPipeTile = null; + private static Class clazzPipeWood = null; + public static boolean initialisedIC2Methods = EnergyUtil.initialiseIC2Methods(); + private static Field fieldCableAcceptor = null; + public static Field fieldEnergyStorage = null; + public static Field fieldCableOutput = null; + private static Capability mekCableAcceptor = null; + public static Capability mekEnergyStorage = null; + public static Capability mekCableOutput = null; + public static Capability mekTubeConnection = null; + public static Capability mekGasHandler = null; + public static Class mekCapabilities; + + public static TileEntity[] getAdjacentPowerConnections(TileEntity tile) + { + final TileEntity[] adjacentConnections = new TileEntity[6]; + + BlockVec3 thisVec = new BlockVec3(tile); + for (EnumFacing direction : EnumFacing.VALUES) + { + if (tile instanceof IConductor && !((IConductor) tile).canConnect(direction, NetworkType.POWER)) + { + continue; + } + + TileEntity tileEntity = thisVec.getTileEntityOnSide(tile.getWorld(), direction); + + if (tileEntity == null) + { + continue; + } + + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(direction.getOpposite(), NetworkType.POWER)) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + continue; + } + + if ((!EnergyConfigHandler.disableMekanismOutput || !EnergyConfigHandler.disableMekanismInput) && isMekLoaded && (tileEntity instanceof IStrictEnergyAcceptor || tileEntity instanceof IStrictEnergyOutputter)) + { + // Do not connect GC wires directly to Mek Universal Cables + try + { + if (clazzMekCable != null && clazzMekCable.isInstance(tileEntity)) + { + continue; + } + } catch (Exception e) + { + e.printStackTrace(); + } + + if (tileEntity instanceof IStrictEnergyAcceptor && ((IStrictEnergyAcceptor) tileEntity).canReceiveEnergy(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } else if (tileEntity instanceof IStrictEnergyOutputter && ((IStrictEnergyOutputter) tileEntity).canOutputEnergy(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + continue; + } + + if ((!EnergyConfigHandler.disableBuildCraftOutput || !EnergyConfigHandler.disableBuildCraftInput) && isBCReallyLoaded) + { + // Do not connect GC wires directly to BC pipes of any type + try + { + if (clazzPipeTile != null && clazzPipeTile.isInstance(tileEntity)) + { + continue; + } + } catch (Exception e) + { + } + + if (hasCapability(tileEntity, MjAPI.CAP_CONNECTOR, direction.getOpposite()) || hasCapability(tileEntity, MjAPI.CAP_RECEIVER, direction.getOpposite()) + || hasCapability(tileEntity, MjAPI.CAP_PASSIVE_PROVIDER, direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + continue; + } + } + + if ((!EnergyConfigHandler.disableRFOutput || !EnergyConfigHandler.disableRFInput) && isRFLoaded && tileEntity instanceof IEnergyConnection) + { + if (isRF2Loaded && (tileEntity instanceof IEnergyProvider || tileEntity instanceof IEnergyReceiver) || isRF1Loaded && tileEntity instanceof IEnergyHandler + || clazzRailcraftEngine != null && clazzRailcraftEngine.isInstance(tileEntity)) + { + if (clazzMFRRednetEnergyCable != null && clazzMFRRednetEnergyCable.isInstance(tileEntity)) + { + continue; + } + + if (((IEnergyConnection) tileEntity).canConnectEnergy(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + } + continue; + } + + if ((!EnergyConfigHandler.disableIC2Output || !EnergyConfigHandler.disableIC2Input) && isIC2Loaded && !isIC2ClassicLoaded) + { + if (tileEntity instanceof IEnergyConductor) + { + continue; + } + + if (!tile.getWorld().isRemote) + { + Object IC2tile = tileEntity; + BlockPos checkingIC2 = thisVec.toBlockPos().offset(direction); + try + { + IC2tile = EnergyNet.instance.getSubTile(tile.getWorld(), checkingIC2); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (IC2tile instanceof IEnergyAcceptor && tile instanceof IEnergyEmitter) + { + if (((IEnergyAcceptor) IC2tile).acceptsEnergyFrom((IEnergyEmitter) tile, direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + continue; + } + if (IC2tile instanceof IEnergyEmitter && tile instanceof IEnergyAcceptor) + { + if (((IEnergyEmitter) IC2tile).emitsEnergyTo((IEnergyAcceptor) tile, direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + continue; + } + } else + { + try + { + Class clazz = tileEntity.getClass(); + if (clazz.getName().startsWith("ic2")) + { + // Special case: IC2's transformers don't seem to + // setup their sink and source directions in Energy + // clientside + if (clazz.getName().startsWith("ic2.core.block.wiring.TileEntityTransformer")) + { + adjacentConnections[direction.ordinal()] = tileEntity; + continue; + } + + Field energyField = null; + fieldLoop: while (energyField == null && clazz != null) + { + for (Field f : clazz.getDeclaredFields()) + { + if (f.getName().equals("energy")) + { + energyField = f; + break fieldLoop; + } + } + clazz = clazz.getSuperclass(); + } + energyField.setAccessible(true); + Object energy = energyField.get(tileEntity); + Set connections; + if (tile instanceof IEnergyEmitter) + { + connections = (Set) energy.getClass().getMethod("getSinkDirs").invoke(energy); + if (connections.contains(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + continue; + } + } + if (tile instanceof IEnergyAcceptor) + { + connections = (Set) energy.getClass().getMethod("getSourceDirs").invoke(energy); + if (connections.contains(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + continue; + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + if (hasCapability(tileEntity, net.minecraftforge.energy.CapabilityEnergy.ENERGY, direction.getOpposite())) + { + // Do not connect GC wires directly to power conduits + if (clazzEnderIOCable != null && clazzEnderIOCable.isInstance(tileEntity)) + { + continue; + } + + net.minecraftforge.energy.IEnergyStorage forgeEnergy = getCapability(tileEntity, net.minecraftforge.energy.CapabilityEnergy.ENERGY, direction.getOpposite()); + if (forgeEnergy != null && (forgeEnergy.canReceive() && !EnergyConfigHandler.disableFEOutput || forgeEnergy.canExtract() && !EnergyConfigHandler.disableFEInput)) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + } + } + + return adjacentConnections; + } + + /** + * Similar to getAdjacentPowerConnections but specific to energy receivers + * only Adds the adjacent power connections found to the passed acceptors, + * directions parameter Lists (Note: an acceptor can therefore sometimes be + * entered in the Lists more than once, with a different direction each + * time: this would represent GC wires connected to the acceptor on more + * than one side.) + * + * @param conductor + * @param connectedAcceptors + * @param directions + * @throws Exception + */ + public static void setAdjacentPowerConnections(TileEntity conductor, List connectedAcceptors, List directions) throws Exception + { + final BlockVec3 thisVec = new BlockVec3(conductor); + final World world = conductor.getWorld(); + for (EnumFacing direction : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(world, direction); + + if (tileEntity == null || tileEntity instanceof IConductor) // world.getTileEntity + // will + // not + // have + // returned + // an + // invalid + // tile, + // invalid + // tiles + // are + // null + { + continue; + } + + EnumFacing sideFrom = direction.getOpposite(); + + if (tileEntity instanceof IElectrical) + { + if (((IElectrical) tileEntity).canConnect(sideFrom, NetworkType.POWER)) + { + connectedAcceptors.add(tileEntity); + directions.add(sideFrom); + } + continue; + } + + if (!EnergyConfigHandler.disableMekanismOutput && isMekLoaded && tileEntity instanceof IStrictEnergyAcceptor) + { + if (clazzMekCable != null && clazzMekCable.isInstance(tileEntity)) + { + continue; + } + if (((IStrictEnergyAcceptor) tileEntity).canReceiveEnergy(sideFrom)) + { + connectedAcceptors.add(tileEntity); + directions.add(sideFrom); + } + continue; + } + + if (!EnergyConfigHandler.disableIC2Output && isIC2Loaded && !world.isRemote) + { + IEnergyTile IC2tile = null; + BlockPos checkingIC2 = thisVec.toBlockPos().offset(direction); + try + { + IC2tile = EnergyNet.instance.getSubTile(world, checkingIC2); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (IC2tile instanceof IEnergyConductor) + { + continue; + } + if (IC2tile instanceof IEnergyAcceptor) + { + if (((IEnergyAcceptor) IC2tile).acceptsEnergyFrom((IEnergyEmitter) conductor, sideFrom)) + { + connectedAcceptors.add(IC2tile); + directions.add(sideFrom); + } + continue; + } + } + + if (!EnergyConfigHandler.disableBuildCraftOutput && isBCReallyLoaded) + { + if (clazzPipeTile != null && clazzPipeTile.isInstance(tileEntity)) + { + continue; + } + + if (hasCapability(tileEntity, MjAPI.CAP_RECEIVER, sideFrom)) + { + IMjReceiver bcReceiver = getCapability(tileEntity, MjAPI.CAP_RECEIVER, sideFrom); + connectedAcceptors.add(bcReceiver); + directions.add(sideFrom); + continue; + } + } + + if (!EnergyConfigHandler.disableRFOutput && (isRF2Loaded && tileEntity instanceof IEnergyReceiver) || (isRF1Loaded && tileEntity instanceof IEnergyHandler)) + { + if (clazzMFRRednetEnergyCable != null && clazzMFRRednetEnergyCable.isInstance(tileEntity)) + { + continue; + } + + if (((IEnergyConnection) tileEntity).canConnectEnergy(sideFrom)) + { + connectedAcceptors.add(tileEntity); + directions.add(sideFrom); + } + continue; + } + + if (!EnergyConfigHandler.disableFEOutput && hasCapability(tileEntity, net.minecraftforge.energy.CapabilityEnergy.ENERGY, sideFrom)) + { + if (clazzEnderIOCable != null && clazzEnderIOCable.isInstance(tileEntity)) + { + continue; + } + + net.minecraftforge.energy.IEnergyStorage forgeEnergy = getCapability(tileEntity, net.minecraftforge.energy.CapabilityEnergy.ENERGY, sideFrom); + if (forgeEnergy != null && forgeEnergy.canReceive()) + { + connectedAcceptors.add(forgeEnergy); + directions.add(sideFrom); + } + } + } + return; + } + + public static float otherModsEnergyTransfer(TileEntity tileAdj, EnumFacing inputAdj, float toSend, boolean simulate) + { + if (isMekLoaded && !EnergyConfigHandler.disableMekanismOutput) + { + IStrictEnergyAcceptor tileMek = null; + if (EnergyUtil.mekCableAcceptor == null) + { + initialiseMekCapabilities(); + } + if (tileAdj instanceof IStrictEnergyAcceptor) + { + tileMek = (IStrictEnergyAcceptor) tileAdj; + } else if (mekCableAcceptor != null && hasCapability(tileAdj, mekCableAcceptor, inputAdj)) + { + tileMek = getCapability(tileAdj, mekCableAcceptor, inputAdj); + } + + if (tileMek != null && tileMek.canReceiveEnergy(inputAdj)) + { + float transferredMek = (float) tileMek.acceptEnergy(inputAdj, toSend * EnergyConfigHandler.TO_MEKANISM_RATIO, simulate); + return transferredMek / EnergyConfigHandler.TO_MEKANISM_RATIO; + } + } else if (isIC2Loaded && !EnergyConfigHandler.disableIC2Output && tileAdj instanceof IEnergySink) + { + // TODO: need to use new subTile system + double demanded = 0; + try + { + demanded = (Double) EnergyUtil.demandedEnergyIC2.invoke(tileAdj); + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + + if (simulate) + { + return Math.min(toSend, (float) demanded / EnergyConfigHandler.TO_IC2_RATIO); + } + + double energySendingIC2 = Math.min(toSend * EnergyConfigHandler.TO_IC2_RATIO, demanded); + if (energySendingIC2 >= 1D) + { + double result = 0; + try + { + if (EnergyUtil.voltageParameterIC2) + { + result = energySendingIC2 - (Double) EnergyUtil.injectEnergyIC2.invoke(tileAdj, inputAdj, energySendingIC2, 120D); + } else + { + result = energySendingIC2 - (Double) EnergyUtil.injectEnergyIC2.invoke(tileAdj, inputAdj, energySendingIC2); + } + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + if (result < 0D) + { + return 0F; + } + return (float) result / EnergyConfigHandler.TO_IC2_RATIO; + } + } else if (isBCReallyLoaded && !EnergyConfigHandler.disableBuildCraftOutput && hasCapability(tileAdj, MjAPI.CAP_RECEIVER, inputAdj)) + // MJ API + { + IMjReceiver bcReceiver = getCapability(tileAdj, MjAPI.CAP_RECEIVER, inputAdj); + long toSendBC = Math.min((long) (toSend * EnergyConfigHandler.TO_BC_RATIO), bcReceiver.getPowerRequested()); + float sent = (toSendBC - bcReceiver.receivePower(toSendBC, simulate)) / EnergyConfigHandler.TO_BC_RATIO; + return sent; + } else if (isRF2Loaded && !EnergyConfigHandler.disableRFOutput && tileAdj instanceof IEnergyReceiver) + { + float sent = ((IEnergyReceiver) tileAdj).receiveEnergy(inputAdj, (int) Math.floor(toSend * EnergyConfigHandler.TO_RF_RATIO), simulate) / EnergyConfigHandler.TO_RF_RATIO; +// GalacticraftCore.logger.debug("Beam/storage offering RF2 up to " + toSend + " into pipe, it accepted " + sent); + return sent; + } else if (!EnergyConfigHandler.disableFEOutput && hasCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj)) + { + net.minecraftforge.energy.IEnergyStorage forgeEnergy = getCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj); + if (forgeEnergy != null && forgeEnergy.canReceive()) + { + float sent = forgeEnergy.receiveEnergy((int) Math.floor(toSend * EnergyConfigHandler.TO_RF_RATIO), simulate) / EnergyConfigHandler.TO_RF_RATIO; + return sent; + } + } + + return 0F; + } + + public static float otherModsEnergyExtract(TileEntity tileAdj, EnumFacing inputAdj, float toPull, boolean simulate) + { + if (isIC2Loaded && !EnergyConfigHandler.disableIC2Input && tileAdj instanceof IEnergySource) + { + double offered = 0; + try + { + offered = (Double) EnergyUtil.offeredEnergyIC2.invoke(tileAdj); + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + + if (simulate) + { + return Math.min(toPull, (float) offered / EnergyConfigHandler.TO_IC2_RATIO); + } + + double energySendingIC2 = Math.min(toPull * EnergyConfigHandler.TO_IC2_RATIO, offered); + if (energySendingIC2 >= 1D) + { + double resultIC2 = 0; + try + { + resultIC2 = energySendingIC2 - (Double) EnergyUtil.drawEnergyIC2.invoke(tileAdj, energySendingIC2); + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + if (resultIC2 < 0D) + { + resultIC2 = 0D; + } + return (float) resultIC2 / EnergyConfigHandler.TO_IC2_RATIO; + } + } else if (isBCReallyLoaded && !EnergyConfigHandler.disableBuildCraftInput && hasCapability(tileAdj, MjAPI.CAP_PASSIVE_PROVIDER, inputAdj)) + { + IMjPassiveProvider bcEmitter = getCapability(tileAdj, MjAPI.CAP_PASSIVE_PROVIDER, inputAdj); + long toSendBC = (long) (toPull * EnergyConfigHandler.TO_BC_RATIO); + float sent = bcEmitter.extractPower(toSendBC, toSendBC, simulate) / EnergyConfigHandler.TO_BC_RATIO; + return sent; + } else if (isRF2Loaded && !EnergyConfigHandler.disableRFInput && tileAdj instanceof IEnergyProvider) + { + float sent = ((IEnergyProvider) tileAdj).extractEnergy(inputAdj, (int) Math.floor(toPull * EnergyConfigHandler.TO_RF_RATIO), simulate) / EnergyConfigHandler.TO_RF_RATIO; + return sent; + } else if (!EnergyConfigHandler.disableFEInput && hasCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj)) + { + net.minecraftforge.energy.IEnergyStorage forgeEnergy = getCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj); + if (forgeEnergy != null && forgeEnergy.canExtract()) + { + float sent = forgeEnergy.extractEnergy((int) Math.floor(toPull * EnergyConfigHandler.TO_RF_RATIO), simulate) / EnergyConfigHandler.TO_RF_RATIO; + return sent; + } + } + + return 0F; + } + + /** + * Test whether an energy connection can be made to a tile using other mods' + * energy methods.

Parameters: + * + * @param tileAdj - the tile under test, it might be an energy tile from + * another mod + * @param inputAdj - the energy input side for that tile which is under test + */ + public static boolean otherModCanReceive(TileEntity tileAdj, EnumFacing inputAdj) + { + if (tileAdj instanceof TileBaseConductor || tileAdj instanceof EnergyStorageTile) + { + return false; // Do not try using other mods' methods to connect to + // GC's own tiles + } + + if (isMekLoaded && tileAdj instanceof IStrictEnergyAcceptor) + { + return ((IStrictEnergyAcceptor) tileAdj).canReceiveEnergy(inputAdj); + } else if (isIC2Loaded && tileAdj instanceof IEnergyAcceptor) + { + return ((IEnergyAcceptor) tileAdj).acceptsEnergyFrom(null, inputAdj); + } else if (isBCReallyLoaded && hasCapability(tileAdj, MjAPI.CAP_RECEIVER, inputAdj)) + { + IMjReceiver bcReceiver = getCapability(tileAdj, MjAPI.CAP_RECEIVER, inputAdj); + return bcReceiver.canReceive(); + } else if (isRF1Loaded && tileAdj instanceof IEnergyHandler || isRF2Loaded && tileAdj instanceof IEnergyReceiver) + { + return ((IEnergyConnection) tileAdj).canConnectEnergy(inputAdj); + } else if (hasCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj)) + { + return (getCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj).canReceive()); + } + + return false; + } + + /** + * Test whether a tile can output energy using other mods' energy methods. + * Currently restricted to IC2 and RF mods - Mekanism tiles do not provide + * an interface to "output" energy

Parameters: + * + * @param tileAdj - the tile under test, it might be an energy tile from + * another mod + * @param side - the energy output side for that tile which is under test + */ + public static boolean otherModCanProduce(TileEntity tileAdj, EnumFacing side) + { + if (tileAdj instanceof TileBaseConductor || tileAdj instanceof EnergyStorageTile) + { + return false; // Do not try using other mods' methods to connect to + // GC's own tiles + } + + if (isIC2Loaded && tileAdj instanceof IEnergyEmitter) + { + return ((IEnergyEmitter) tileAdj).emitsEnergyTo(null, side); + } + + if (isBCReallyLoaded && hasCapability(tileAdj, MjAPI.CAP_PASSIVE_PROVIDER, side)) + { + return true; + } + + if (hasCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, side)) + { + return (getCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, side).canExtract()); + } + + return false; + } + + public static boolean initialiseIC2Methods() + { + // Initialise a couple of non-IC2 classes + try + { + clazzMekCable = Class.forName("mekanism.common.tile.transmitter.TileEntityUniversalCable"); + } catch (Exception e) + { + } + try + { + clazzEnderIOCable = Class.forName("crazypants.enderio.conduits.conduit.TileConduitBundle"); + } catch (Exception e) + { + } + try + { + clazzMFRRednetEnergyCable = Class.forName("powercrystals.minefactoryreloaded.tile.rednet.TileEntityRedNetEnergy"); + } catch (Exception e) + { + } + try + { + clazzRailcraftEngine = Class.forName("mods.railcraft.common.blocks.single.TileEngine"); + } catch (Exception e) + { + } + + clazzPipeTile = CompatibilityManager.classBCTransportPipeTile; + + try + { + clazzPipeWood = Class.forName("buildcraft.transport.pipes.PipePowerWood"); + } catch (Exception e) + { + } + + if (isMekLoaded) + { + try + { + EnergyUtil.mekCapabilities = Class.forName("mekanism.common.capabilities.Capabilities"); + } catch (Exception ignore) + { + } + } + + if (isIC2Loaded) + { + GalacticraftCore.logger.debug("Initialising IC2 methods OK"); + + try + { + clazzIC2EnergyTile = Class.forName("ic2.core.energy.Tile"); + if (clazzIC2EnergyTile != null) + isIC2TileLoaded = true; + } catch (Exception ignore) + { + } + + try + { + clazzIC2Cable = Class.forName("ic2.api.energy.tile.IEnergyConductor"); + Class clazz = Class.forName("ic2.api.energy.tile.IEnergySink"); + + GalacticraftCore.logger.debug("Found IC2 IEnergySink class OK"); + + try + { + EnergyUtil.demandedEnergyIC2 = clazz.getMethod("getDemandedEnergy"); + } catch (Exception e) + { + // if that fails, try legacy version + try + { + EnergyUtil.demandedEnergyIC2 = clazz.getMethod("demandedEnergyUnits"); + } catch (Exception ee) + { + ee.printStackTrace(); + } + } + + GalacticraftCore.logger.debug("Set IC2 demandedEnergy method OK"); + + try + { + EnergyUtil.injectEnergyIC2 = clazz.getMethod("injectEnergy", EnumFacing.class, double.class, double.class); + EnergyUtil.voltageParameterIC2 = true; + GalacticraftCore.logger.debug("Set IC2 injectEnergy method OK"); + } catch (Exception e) + { + // if that fails, try legacy version + try + { + EnergyUtil.injectEnergyIC2 = clazz.getMethod("injectEnergyUnits", EnumFacing.class, double.class); + GalacticraftCore.logger.debug("IC2 inject 1.7.2 succeeded"); + } catch (Exception ee) + { + ee.printStackTrace(); + } + } + + Class clazzSource = Class.forName("ic2.api.energy.tile.IEnergySource"); + EnergyUtil.offeredEnergyIC2 = clazzSource.getMethod("getOfferedEnergy"); + EnergyUtil.drawEnergyIC2 = clazzSource.getMethod("drawEnergy", double.class); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + return true; + } + + public static boolean isElectricItem(Item item) + { + if (item instanceof IItemElectric) + return true; + + if (item == null) + return false; + + if (EnergyConfigHandler.isRFAPILoaded()) + { + if (item instanceof IEnergyContainerItem) + return true; + } + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof IElectricItem) + return true; + if (item instanceof ISpecialElectricItem) + return true; + } + if (EnergyConfigHandler.isMekanismLoaded()) + { + if (item instanceof IEnergizedItem) + return true; + } + + return false; + } + + public static boolean isChargedElectricItem(ItemStack stack) + { + if (stack.isEmpty()) + return false; + + Item item = stack.getItem(); + if (item instanceof IItemElectric) + { + return ((IItemElectric) item).getElectricityStored(stack) > 0; + } + + if (item == Items.AIR) + return false; + + if (EnergyConfigHandler.isRFAPILoaded()) + { + if (item instanceof IEnergyContainerItem) + return ((IEnergyContainerItem) item).getEnergyStored(stack) > 0; + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ISpecialElectricItem) + { + ISpecialElectricItem electricItem = (ISpecialElectricItem) item; + return electricItem.getManager(stack).discharge(stack, Double.POSITIVE_INFINITY, 3, true, true, true) > 0.0D; + } else if (item instanceof IElectricItem) + { + IElectricItem electricItem = (IElectricItem) item; + return electricItem.canProvideEnergy(stack); + } + } + + if (EnergyConfigHandler.isMekanismLoaded()) + { + if (item instanceof IEnergizedItem) + return ((IEnergizedItem) item).getEnergy(stack) > 0; + } + + return false; + } + + public static boolean isFillableElectricItem(ItemStack stack) + { + if (stack.isEmpty()) + return false; + + Item item = stack.getItem(); + if (item instanceof IItemElectric) + { + return ((IItemElectric) item).getElectricityStored(stack) < ((IItemElectric) item).getMaxElectricityStored(stack); + } + + if (item == Items.AIR) + return false; + + if (EnergyConfigHandler.isRFAPILoaded()) + { + if (item instanceof IEnergyContainerItem) + return ((IEnergyContainerItem) item).getEnergyStored(stack) < ((IEnergyContainerItem) item).getMaxEnergyStored(stack); + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ISpecialElectricItem) + { + ISpecialElectricItem electricItem = (ISpecialElectricItem) item; + return electricItem.getManager(stack).charge(stack, Double.POSITIVE_INFINITY, 3, true, true) > 0.0D; + } else if (item instanceof IElectricItem) + { + IElectricItem electricItem = (IElectricItem) item; + return electricItem.canProvideEnergy(stack); + } + } + + if (EnergyConfigHandler.isMekanismLoaded()) + { + if (item instanceof IEnergizedItem) + return ((IEnergizedItem) item).getEnergy(stack) < ((IEnergizedItem) item).getMaxEnergy(stack); + } + + return false; + } + + public static boolean hasCapability(ICapabilityProvider provider, Capability capability, EnumFacing side) + { + return (provider == null || capability == null) ? false : provider.hasCapability(capability, side); + } + + public static T getCapability(ICapabilityProvider provider, Capability capability, EnumFacing side) + { + return (provider == null || capability == null) ? null : provider.getCapability(capability, side); + } + + public static void initialiseMekCapabilities() + { + try + { + EnergyUtil.fieldCableAcceptor = mekCapabilities.getField("ENERGY_ACCEPTOR_CAPABILITY"); + if (EnergyUtil.fieldCableAcceptor != null) + { + EnergyUtil.mekCableAcceptor = (Capability) fieldCableAcceptor.get(null); + } + EnergyUtil.fieldEnergyStorage = mekCapabilities.getField("ENERGY_STORAGE_CAPABILITY"); + if (EnergyUtil.fieldEnergyStorage != null) + { + EnergyUtil.mekEnergyStorage = (Capability) fieldEnergyStorage.get(null); + } + Field gasHandlerCapability = mekCapabilities.getField("GAS_HANDLER_CAPABILITY"); + if (gasHandlerCapability != null) + { + EnergyUtil.mekGasHandler = (Capability) gasHandlerCapability.get(null); + } + Field gasTubeConnection = mekCapabilities.getField("TUBE_CONNECTION_CAPABILITY"); + if (gasTubeConnection != null) + { + EnergyUtil.mekTubeConnection = (Capability) gasTubeConnection.get(null); + } + EnergyUtil.fieldCableOutput = mekCapabilities.getField("ENERGY_OUTPUTTER_CAPABILITY"); + if (EnergyUtil.fieldCableOutput != null) + { + EnergyUtil.mekCableOutput = (Capability) fieldCableOutput.get(null); + } + } catch (Exception e) + { + } + } + + public static boolean checkMekGasHandler(Capability capability) + { + if (!EnergyConfigHandler.isMekanismLoaded() || capability == null || EnergyUtil.mekCapabilities == null) + { + return false; + } + if (EnergyUtil.mekGasHandler == null) + { + initialiseMekCapabilities(); + } + return capability == EnergyUtil.mekGasHandler || capability == EnergyUtil.mekTubeConnection; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/ChunkPowerHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/ChunkPowerHandler.java new file mode 100644 index 00000000..f5e32465 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/ChunkPowerHandler.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.grid; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.ChunkEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class ChunkPowerHandler +{ + + private static boolean initiated = false; + + public static void initiate() + { + if (!ChunkPowerHandler.initiated) + { + ChunkPowerHandler.initiated = true; + MinecraftForge.EVENT_BUS.register(new ChunkPowerHandler()); + } + } + + @SubscribeEvent + public void onChunkLoad(ChunkEvent.Load event) + { + if (!event.getWorld().isRemote && event.getChunk() != null) + { + try + { + ArrayList tileList = Lists.newArrayList(); + tileList.addAll(event.getChunk().getTileEntityMap().values()); + + for (Object o : tileList) + { + if (o instanceof TileEntity) + { + TileEntity tile = (TileEntity) o; + + if (tile instanceof INetworkConnection) + { + ((INetworkConnection) tile).refresh(); + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + + if (ConfigManagerCore.retrogenOil && GCCoreUtil.getDimensionID(event.getWorld()) == 0) + { + EventHandlerGC.retrogenOil(event.getWorld(), event.getChunk()); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/EnergyNetwork.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/EnergyNetwork.java new file mode 100644 index 00000000..9b1a5f0a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/EnergyNetwork.java @@ -0,0 +1,804 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.grid; + +import buildcraft.api.mj.IMjReceiver; +import cofh.redstoneflux.api.IEnergyReceiver; +import ic2.api.energy.tile.IEnergySink; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import mekanism.api.energy.IStrictEnergyAcceptor; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +//import buildcraft.api.power.PowerHandler.Type; + +/** + * A universal network that works with multiple energy systems. + * + * @author radfast, micdoodle8, Calclavia, Aidancbrady + */ +public class EnergyNetwork implements IElectricityNetwork +{ + + private boolean isMekLoaded = EnergyConfigHandler.isMekanismLoaded() && !EnergyConfigHandler.disableMekanismOutput; + private boolean isRF1Loaded = EnergyConfigHandler.isRFAPIv1Loaded() && !EnergyConfigHandler.disableRFOutput; + private boolean isRF2Loaded = EnergyConfigHandler.isRFAPIv2Loaded() && !EnergyConfigHandler.disableRFOutput; + private boolean isIC2Loaded = EnergyConfigHandler.isIndustrialCraft2Loaded() && !EnergyConfigHandler.disableIC2Output; + private boolean isFELoaded = !EnergyConfigHandler.disableFEOutput; + private boolean isBCLoaded = EnergyConfigHandler.isBuildcraftLoaded() && !EnergyConfigHandler.disableBuildCraftOutput; + + /* + * Re-written by radfast for better performance Imagine a 30 producer, 80 + * acceptor network... Before: it would have called the inner loop in + * produce() 2400 times each tick. Not good! After: the inner loop runs 80 + * times - part of it is in doTickStartCalc() at/near the tick start, and + * part of it is in doProduce() at the end of the tick + */ + public static int tickCount = 0; + private int tickDone = -1; + private float totalRequested = 0F; + private float totalStorageExcess = 0F; + private float totalEnergy = 0F; + private float totalSent = 0F; + private boolean doneScheduled = false; + private boolean spamstop = false; + private boolean loopPrevention = false; + public int networkTierGC = 1; + private int producersTierGC = 1; + + /* + * connectedAcceptors is all the acceptors connected to this network + * connectedDirections is the directions of those connections (from the + * point of view of the acceptor tile) Note: each position in those two + * linked lists matches so, an acceptor connected on two sides will be in + * connectedAcceptors twice + */ + private List connectedAcceptors = new LinkedList<>(); + private List connectedDirections = new LinkedList<>(); + + /* + * availableAcceptors is the acceptors which can receive energy (this tick) + * availableconnectedDirections is a map of those acceptors and the + * directions they will receive from (from the point of view of the acceptor + * tile) Note: each acceptor will only be included once in these collections + * (there is no point trying to put power into a machine twice from two + * different sides) + */ + private Set availableAcceptors = new HashSet<>(); + private Map availableconnectedDirections = new HashMap<>(); + + private Map energyRequests = new HashMap<>(); + private List ignoreAcceptors = new LinkedList<>(); + + private final Set conductors = new HashSet<>(); + + // This is an energy per tick which exceeds what any normal machine will + // request, so the requester must be an energy storage - for example, a + // battery or an energy cube + private final static float ENERGY_STORAGE_LEVEL = 200F; + + @Override + public Set getTransmitters() + { + return this.conductors; + } + + /** + * Get the total energy request in this network + * + * @param ignoreTiles Tiles to ignore in the request calculations (NOTE: + * only used in initial (internal) check. + * @return Amount of energy requested in this network + */ + @Override + public float getRequest(TileEntity... ignoreTiles) + { + if (EnergyNetwork.tickCount != this.tickDone) + { + // Start the new tick - initialise everything + this.ignoreAcceptors.clear(); + this.ignoreAcceptors.addAll(Arrays.asList(ignoreTiles)); + this.doTickStartCalc(); + } + return this.totalRequested - this.totalEnergy - this.totalSent; + } + + /** + * Produce energy into the network + * + * @param energy Amount of energy to send into the network + * @param doReceive Whether to put energy into the network (true) or just + * simulate (false) + * @param ignoreTiles TileEntities to ignore for energy transfers. + * @return Amount of energy REMAINING from the passed energy parameter + */ + @Override + public float produce(float energy, boolean doReceive, int producerTier, TileEntity... ignoreTiles) + { + if (this.loopPrevention) + { + return energy; + } + + if (energy > 0F) + { + if (EnergyNetwork.tickCount != this.tickDone) + { + this.tickDone = EnergyNetwork.tickCount; + // Start the new tick - initialise everything + this.ignoreAcceptors.clear(); + this.ignoreAcceptors.addAll(Arrays.asList(ignoreTiles)); + this.producersTierGC = 1; + this.doTickStartCalc(); + } else + { + this.ignoreAcceptors.addAll(Arrays.asList(ignoreTiles)); + } + + if (!this.doneScheduled && this.totalRequested > 0.0F) + { + TickHandlerServer.scheduleNetworkTick(this); + this.doneScheduled = true; + } + + // On a regular mid-tick produce(), just figure out how much is + // totalEnergy this tick and return the used amount + // This will return 0 if totalRequested is 0 - for example a network + // with no acceptors + float totalEnergyLast = this.totalEnergy; + + // Add the energy for distribution by this grid later this tick + // Note: totalEnergy cannot exceed totalRequested + if (doReceive) + { + this.totalEnergy += Math.min(energy, this.totalRequested - totalEnergyLast); + // The field producersTierGC will be the *highest* of any + // producers putting energy into the network this tick + if (producerTier > this.producersTierGC) + { + this.producersTierGC = producerTier; + } + } + + if (this.totalRequested >= totalEnergyLast + energy) + { + return 0F; // All the electricity will be used + } + if (totalEnergyLast >= this.totalRequested) + { + return energy; // None of the electricity will be used + } + return totalEnergyLast + energy - this.totalRequested; // Some of + // the + // electricity + // will be + // used + } + return energy; + } + + /** + * Called on server tick end, from the Galacticraft Core tick handler. + */ + public void tickEnd() + { + this.doneScheduled = false; + this.loopPrevention = true; + + // Finish the last tick if there was some to send and something to + // receive it + if (this.totalEnergy > 0F) + { + // Call doTickStartCalc a second time in case anything has updated + // meanwhile + this.doTickStartCalc(); + + if (this.totalRequested > 0F) + { + this.totalSent = this.doProduce(); + if (this.totalSent < this.totalEnergy) + { + // Any spare energy left is retained for the next tick + this.totalEnergy -= this.totalSent; + } else + { + this.totalEnergy = 0F; + } + } else + { + this.totalEnergy = 0F; + } + } else + { + this.totalEnergy = 0F; + } + + this.loopPrevention = false; + } + + /** + * Refreshes all tiles in network, and updates requested energy + */ + private void doTickStartCalc() + { + this.tickDone = EnergyNetwork.tickCount; + this.totalSent = 0F; + this.refreshAcceptors(); + + if (!EnergyUtil.initialisedIC2Methods) + { + EnergyUtil.initialiseIC2Methods(); + } + + if (this.conductors.size() == 0) + { + return; + } + + this.loopPrevention = true; + + this.availableAcceptors.clear(); + this.availableconnectedDirections.clear(); + this.energyRequests.clear(); + this.totalRequested = 0.0F; + this.totalStorageExcess = 0F; + + if (!this.connectedAcceptors.isEmpty()) + { + float e; + final Iterator acceptorDirection = this.connectedDirections.iterator(); + for (Object acceptor : this.connectedAcceptors) + { + // This tries all sides of the acceptor which are connected (see + // refreshAcceptors()) + EnumFacing sideFrom = acceptorDirection.next(); + + // But the grid will only put energy into the acceptor from one + // side - once it's in availableAcceptors + if (!this.ignoreAcceptors.contains(acceptor) && !this.availableAcceptors.contains(acceptor)) + { + e = 0.0F; + + if (acceptor instanceof IElectrical) + { + e = ((IElectrical) acceptor).getRequest(sideFrom); + } else if (isMekLoaded && acceptor instanceof IStrictEnergyAcceptor) + { + e = (float) (((IStrictEnergyAcceptor) acceptor).acceptEnergy(sideFrom, 1000000D, true) / EnergyConfigHandler.TO_MEKANISM_RATIO); + } else if (isIC2Loaded && acceptor instanceof IEnergySink) + { + double result = 0; + try + { + result = (Double) EnergyUtil.demandedEnergyIC2.invoke(acceptor); + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + // Cap IC2 power transfer at 128EU/t for standard Alu + // wire, 256EU/t for heavy Alu wire + result = Math.min(result, this.networkTierGC * 128D); + e = (float) result / EnergyConfigHandler.TO_IC2_RATIO; + } else if (isBCLoaded && acceptor instanceof IMjReceiver) + { + long bcDemand = ((IMjReceiver) acceptor).getPowerRequested(); + bcDemand = Math.min(bcDemand, this.networkTierGC * this.networkTierGC * 16000000L); // Capped + // at + // 16 + // MJ/tick + // for + // standard + // Alu + // wire, + // 64 + // for + // heavy. + e = bcDemand / EnergyConfigHandler.TO_BC_RATIO; + } else if (isRF2Loaded && acceptor instanceof IEnergyReceiver) + { + e = ((IEnergyReceiver) acceptor).receiveEnergy(sideFrom, Integer.MAX_VALUE, true) / EnergyConfigHandler.TO_RF_RATIO; + } else if (isFELoaded && acceptor instanceof net.minecraftforge.energy.IEnergyStorage) + { + net.minecraftforge.energy.IEnergyStorage forgeEnergy = (net.minecraftforge.energy.IEnergyStorage) acceptor; + if (forgeEnergy.canReceive()) + { + e = forgeEnergy.receiveEnergy(Integer.MAX_VALUE, true) / EnergyConfigHandler.TO_RF_RATIO; + } + } + + if (e > 0.0F) + { + this.availableAcceptors.add(acceptor); + this.availableconnectedDirections.put(acceptor, sideFrom); + this.energyRequests.put(acceptor, e); + this.totalRequested += e; + if (e > EnergyNetwork.ENERGY_STORAGE_LEVEL) + { + this.totalStorageExcess += e - EnergyNetwork.ENERGY_STORAGE_LEVEL; + } + } + } + } + } + + this.loopPrevention = false; + } + + /** + * Complete the energy transfer. Called internally on server tick end. + * + * @return Amount of energy SENT to all acceptors + */ + private float doProduce() + { + float sent = 0.0F; + + if (!this.availableAcceptors.isEmpty()) + { + float energyNeeded = this.totalRequested; + float energyAvailable = this.totalEnergy; + float reducor = 1.0F; + float energyStorageReducor = 1.0F; + + if (energyNeeded > energyAvailable) + { + // If not enough energy, try reducing what goes into energy + // storage (if any) + energyNeeded -= this.totalStorageExcess; + // If there's still not enough, put the minimum into energy + // storage (if any) and, anyhow, reduce everything + // proportionately + if (energyNeeded > energyAvailable) + { + energyStorageReducor = 0F; + reducor = energyAvailable / energyNeeded; + } else + { + // Energyavailable exceeds the total needed but only if + // storage does not fill all in one go - this is a common + // situation + energyStorageReducor = (energyAvailable - energyNeeded) / this.totalStorageExcess; + } + } + + float currentSending; + float sentToAcceptor; + int tierProduced = Math.min(this.producersTierGC, this.networkTierGC); + + Object debugTE = null; + try + { + for (Object tileEntity : this.availableAcceptors) + { + debugTE = tileEntity; + // Exit the loop if there is no energy left at all (should + // normally not happen, should be some even for the last + // acceptor) + if (sent >= energyAvailable) + { + break; + } + + // The base case is to give each acceptor what it is + // requesting + currentSending = this.energyRequests.get(tileEntity); + + // If it's an energy store, we may need to damp it down if + // energyStorageReducor is less than 1 + if (currentSending > EnergyNetwork.ENERGY_STORAGE_LEVEL) + { + currentSending = EnergyNetwork.ENERGY_STORAGE_LEVEL + (currentSending - EnergyNetwork.ENERGY_STORAGE_LEVEL) * energyStorageReducor; + } + + // Reduce everything proportionately if there is not enough + // energy for all needs + currentSending *= reducor; + + if (currentSending > energyAvailable - sent) + { + currentSending = energyAvailable - sent; + } + + EnumFacing sideFrom = this.availableconnectedDirections.get(tileEntity); + + if (tileEntity instanceof IElectrical) + { + sentToAcceptor = ((IElectrical) tileEntity).receiveElectricity(sideFrom, currentSending, tierProduced, true); + } else if (isMekLoaded && tileEntity instanceof IStrictEnergyAcceptor) + { + sentToAcceptor = + (float) ((IStrictEnergyAcceptor) tileEntity).acceptEnergy(sideFrom, currentSending * EnergyConfigHandler.TO_MEKANISM_RATIO, false) / EnergyConfigHandler.TO_MEKANISM_RATIO; + } else if (isIC2Loaded && tileEntity instanceof IEnergySink) + { + double energySendingIC2 = currentSending * EnergyConfigHandler.TO_IC2_RATIO; + if (energySendingIC2 >= 1D) + { + double result = 0; + try + { + if (EnergyUtil.voltageParameterIC2) + { + result = (Double) EnergyUtil.injectEnergyIC2.invoke(tileEntity, sideFrom.getOpposite(), energySendingIC2, 120D); + } else + { + result = (Double) EnergyUtil.injectEnergyIC2.invoke(tileEntity, sideFrom.getOpposite(), energySendingIC2); + } + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + sentToAcceptor = currentSending - (float) result / EnergyConfigHandler.TO_IC2_RATIO; + if (sentToAcceptor < 0F) + { + sentToAcceptor = 0F; + } + } else + { + sentToAcceptor = 0F; + } + } else if (isBCLoaded && tileEntity instanceof IMjReceiver) + { + long toSendBC = (long) (currentSending * EnergyConfigHandler.TO_BC_RATIO); + sentToAcceptor = (toSendBC - ((IMjReceiver) tileEntity).receivePower(toSendBC, false)) / EnergyConfigHandler.TO_BC_RATIO; + } else if (isRF2Loaded && tileEntity instanceof IEnergyReceiver) + { + final int currentSendinginRF = + (currentSending >= Integer.MAX_VALUE / EnergyConfigHandler.TO_RF_RATIO) ? Integer.MAX_VALUE : (int) (currentSending * EnergyConfigHandler.TO_RF_RATIO); + sentToAcceptor = ((IEnergyReceiver) tileEntity).receiveEnergy(sideFrom, currentSendinginRF, false) / EnergyConfigHandler.TO_RF_RATIO; + } else if (isFELoaded && tileEntity instanceof net.minecraftforge.energy.IEnergyStorage) + { + final int currentSendinginRF = + (currentSending >= Integer.MAX_VALUE / EnergyConfigHandler.TO_RF_RATIO) ? Integer.MAX_VALUE : (int) (currentSending * EnergyConfigHandler.TO_RF_RATIO); + sentToAcceptor = ((net.minecraftforge.energy.IEnergyStorage) tileEntity).receiveEnergy(currentSendinginRF, false) / EnergyConfigHandler.TO_RF_RATIO; + } else + { + sentToAcceptor = 0F; + } + + if (sentToAcceptor / currentSending > 1.002F && sentToAcceptor > 0.01F) + { + if (!this.spamstop) + { + GalacticraftCore.logger.info("Energy network: acceptor took too much energy, offered " + currentSending + ", took " + sentToAcceptor + ". " + tileEntity.toString()); + this.spamstop = true; + } + sentToAcceptor = currentSending; + } + + sent += sentToAcceptor; + } + } catch (Exception e) + { + GalacticraftCore.logger.error("DEBUG Energy network loop issue, please report this"); + if (debugTE instanceof TileEntity) + { + GalacticraftCore.logger.error("Problem was likely caused by tile in dim " + GCCoreUtil.getDimensionID(((TileEntity) debugTE).getWorld()) + " at " + ((TileEntity) debugTE).getPos() + " Type:" + + debugTE.getClass().getSimpleName()); + } + } + } + + if (EnergyNetwork.tickCount % 200 == 0) + { + this.spamstop = false; + } + + float returnvalue = sent; + if (returnvalue > this.totalEnergy) + { + returnvalue = this.totalEnergy; + } + if (returnvalue < 0F) + { + returnvalue = 0F; + } + return returnvalue; + } + + /** + * Refresh validity of each conductor in the network + */ + public void refreshWithChecks() + { + int tierfound = Integer.MAX_VALUE; + Iterator it = this.conductors.iterator(); + while (it.hasNext()) + { + IConductor conductor = it.next(); + + if (conductor == null) + { + it.remove(); + continue; + } + + TileEntity tile = (TileEntity) conductor; + World world = tile.getWorld(); + // Remove any conductors in unloaded chunks + if (tile.isInvalid() || world == null || !world.isBlockLoaded(tile.getPos())) + { + it.remove(); + continue; + } + + if (conductor != world.getTileEntity(tile.getPos())) + { + it.remove(); + continue; + } + + if (conductor.getTierGC() < tierfound) + { + tierfound = conductor.getTierGC(); + } + + if (conductor.getNetwork() != this) + { + conductor.setNetwork(this); + conductor.onNetworkChanged(); + } + } + + // This will set the network tier to 2 if all the conductors are tier 2 + if (tierfound == Integer.MAX_VALUE) + { + tierfound = 1; + } + this.networkTierGC = tierfound; + } + + @Override + public void refresh() + { + int tierfound = Integer.MAX_VALUE; + Iterator it = this.conductors.iterator(); + while (it.hasNext()) + { + IConductor conductor = it.next(); + + if (conductor == null) + { + it.remove(); + continue; + } + + TileEntity tile = (TileEntity) conductor; + World world = tile.getWorld(); + // Remove any conductors in unloaded chunks + if (tile.isInvalid() || world == null) + { + it.remove(); + continue; + } + + if (conductor.getTierGC() < tierfound) + { + tierfound = conductor.getTierGC(); + } + + if (conductor.getNetwork() != this) + { + conductor.setNetwork(this); + conductor.onNetworkChanged(); + } + } + + // This will set the network tier to 2 if all the conductors are tier 2, + // etc + if (tierfound == Integer.MAX_VALUE) + { + tierfound = 1; + } + this.networkTierGC = tierfound; + } + + /** + * Refresh all energy acceptors in the network + */ + private void refreshAcceptors() + { + this.connectedAcceptors.clear(); + this.connectedDirections.clear(); + + this.refreshWithChecks(); + + try + { + LinkedList conductorsCopy = new LinkedList<>(); + conductorsCopy.addAll(this.conductors); + // This prevents concurrent modifications if something in the loop + // causes chunk loading + // (Chunk loading can change the network if new conductors are + // found) + for (IConductor conductor : conductorsCopy) + { + EnergyUtil.setAdjacentPowerConnections((TileEntity) conductor, this.connectedAcceptors, this.connectedDirections); + } + } catch (Exception e) + { + GalacticraftCore.logger.error("GC Aluminium Wire: Error when testing whether another mod's tileEntity can accept energy."); + e.printStackTrace(); + } + } + + /** + * Combine this network with another electricitynetwork + * + * @param network Network to merge with + * @return The final, joined network + */ + @Override + public IElectricityNetwork merge(IElectricityNetwork network) + { + if (network != null && network != this) + { + Set thisNetwork = this.conductors; + Set thatNetwork = network.getTransmitters(); + if (thisNetwork.size() < thatNetwork.size()) + { + thatNetwork.addAll(thisNetwork); + network.refresh(); + this.destroy(); + return network; + } + thisNetwork.addAll(thatNetwork); + this.refresh(); + if (network instanceof EnergyNetwork) + { + ((EnergyNetwork) network).destroy(); + } + } + + return this; + } + + private void destroy() + { + this.conductors.clear(); + this.connectedAcceptors.clear(); + this.availableAcceptors.clear(); + this.totalEnergy = 0F; + this.totalRequested = 0F; + TickHandlerServer.removeNetworkTick(this); + } + + @SuppressWarnings("unlikely-arg-type") + @Override + public void split(IConductor splitPoint) + { + if (splitPoint instanceof TileEntity) + { + this.getTransmitters().remove(splitPoint); + splitPoint.setNetwork(null); + + // If the size of the residual network is 1, it should simply be + // preserved + if (this.getTransmitters().size() > 1) + { + World world = ((TileEntity) splitPoint).getWorld(); + + if (this.getTransmitters().size() > 0) + { + TileEntity[] nextToSplit = new TileEntity[6]; + boolean[] toDo = + {true, true, true, true, true, true}; + TileEntity tileEntity; + + BlockPos pos = ((TileEntity) splitPoint).getPos(); + + for (int j = 0; j < 6; j++) + { + switch (j) + { + case 0: + tileEntity = world.getTileEntity(pos.down()); + break; + case 1: + tileEntity = world.getTileEntity(pos.up()); + break; + case 2: + tileEntity = world.getTileEntity(pos.north()); + break; + case 3: + tileEntity = world.getTileEntity(pos.south()); + break; + case 4: + tileEntity = world.getTileEntity(pos.west()); + break; + case 5: + tileEntity = world.getTileEntity(pos.east()); + break; + default: + // Not reachable, only to prevent uninitiated + // compile errors + tileEntity = null; + break; + } + + if (tileEntity instanceof IConductor && ((IConductor) tileEntity).canConnect(EnumFacing.byIndex(j ^ 1), NetworkType.POWER)) + { + nextToSplit[j] = tileEntity; + } else + { + toDo[j] = false; + } + } + + for (int i1 = 0; i1 < 6; i1++) + { + if (toDo[i1]) + { + TileEntity connectedBlockA = nextToSplit[i1]; + NetworkFinder finder = new NetworkFinder(world, new BlockVec3(connectedBlockA), new BlockVec3(pos)); + List partNetwork = finder.exploreNetwork(); + + // Mark any others still to do in the nextToSplit + // array which are connected to this, as dealt with + for (int i2 = i1 + 1; i2 < 6; i2++) + { + TileEntity connectedBlockB = nextToSplit[i2]; + + if (toDo[i2]) + { + if (partNetwork.contains(connectedBlockB)) + { + toDo[i2] = false; + } + } + } + + // Now make the new network from partNetwork + EnergyNetwork newNetwork = new EnergyNetwork(); + newNetwork.getTransmitters().addAll(partNetwork); + newNetwork.refreshWithChecks(); + } + } + + this.destroy(); + } + } + // Splitting a 1-block network leaves nothing + else if (this.getTransmitters().size() == 0) + { + this.destroy(); + } + } + } + + @Override + public String toString() + { + return "EnergyNetwork[" + this.hashCode() + "|Wires:" + this.getTransmitters().size() + "|Acceptors:" + this.connectedAcceptors.size() + "]"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/NetworkFinder.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/NetworkFinder.java new file mode 100644 index 00000000..1d2ce7a1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/NetworkFinder.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.grid; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class NetworkFinder +{ + + public World worldObj; + public BlockVec3 start; + private int theDim; + private BlockVec3 toIgnore; + + private Set iterated = new HashSet(); + public List found = new LinkedList(); + + public NetworkFinder(World world, BlockVec3 location, BlockVec3 ignore) + { + worldObj = world; + start = location; + + toIgnore = ignore; + } + + private void loopAll(int x, int y, int z, int dirIn) + { + BlockVec3 obj = null; + for (int dir = 0; dir < 6; dir++) + { + if (dir == dirIn) + { + continue; + } + switch (dir) + { + case 0: + obj = new BlockVec3(x, y - 1, z); + break; + case 1: + obj = new BlockVec3(x, y + 1, z); + break; + case 2: + obj = new BlockVec3(x, y, z - 1); + break; + case 3: + obj = new BlockVec3(x, y, z + 1); + break; + case 4: + obj = new BlockVec3(x - 1, y, z); + break; + case 5: + obj = new BlockVec3(x + 1, y, z); + break; + } + + if (!iterated.contains(obj)) + { + iterated.add(obj); + + TileEntity tileEntity = worldObj.getTileEntity(new BlockPos(obj.x, obj.y, obj.z)); + + if (tileEntity instanceof IConductor && ((IConductor) tileEntity).canConnect(EnumFacing.byIndex(dir ^ 1), NetworkType.POWER)) + { + found.add((IConductor) tileEntity); + loopAll(obj.x, obj.y, obj.z, dir ^ 1); + } + } + } + } + + public List exploreNetwork() + { + if (start.getTileEntity(worldObj) instanceof IConductor) + { + iterated.add(start); + iterated.add(toIgnore); + found.add((IConductor) start.getTileEntity(worldObj)); + loopAll(start.x, start.y, start.z, 6); + } + + return found; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ElectricItemManagerIC2.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ElectricItemManagerIC2.java new file mode 100644 index 00000000..95b93c06 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ElectricItemManagerIC2.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.item; + +import ic2.api.item.IElectricItem; +import ic2.api.item.IElectricItemManager; +import micdoodle8.mods.galacticraft.api.item.IItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +/* + * Interface between Galacticraft electric items (batteries) and IC2. + * + * Galactricraft items implemented as Tier 1 items when recharging + * and for discharging purposes (so can power anything) + */ +public class ElectricItemManagerIC2 implements IElectricItemManager +{ + + @Override + public double charge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + IItemElectricBase item = (IItemElectricBase) itemStack.getItem(); + if (amount > ((IElectricItem) item).getMaxCharge(itemStack)) + { + amount = ((IElectricItem) item).getMaxCharge(itemStack); + } + float energy = (float) amount * EnergyConfigHandler.IC2_RATIO; + float rejectedElectricity = Math.max(item.getElectricityStored(itemStack) + energy - item.getMaxElectricityStored(itemStack), 0); + float energyToReceive = energy - rejectedElectricity; + if (!ignoreTransferLimit && energyToReceive > item.getMaxTransferGC(itemStack)) + { + energyToReceive = item.getMaxTransferGC(itemStack); + } + + if (!simulate) + { + item.setElectricity(itemStack, item.getElectricityStored(itemStack) + energyToReceive); + } + + return energyToReceive / EnergyConfigHandler.IC2_RATIO; + } + return 0D; + } + + @Override + public double discharge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + IItemElectricBase item = (IItemElectricBase) itemStack.getItem(); + float energy = (float) amount / EnergyConfigHandler.TO_IC2_RATIO; + float energyToTransfer = Math.min(item.getElectricityStored(itemStack), energy); + if (!ignoreTransferLimit) + { + energyToTransfer = Math.min(energyToTransfer, item.getMaxTransferGC(itemStack)); + } + + if (!simulate) + { + item.setElectricity(itemStack, item.getElectricityStored(itemStack) - energyToTransfer); + } + + return energyToTransfer * EnergyConfigHandler.TO_IC2_RATIO; + } + return 0D; + } + + @Override + public double getCharge(ItemStack itemStack) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + IItemElectricBase item = (IItemElectricBase) itemStack.getItem(); + return item.getElectricityStored(itemStack) * EnergyConfigHandler.TO_IC2_RATIO; + } + return 0D; + } + + @Override + public boolean canUse(ItemStack itemStack, double amount) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + return this.getCharge(itemStack) >= amount; + } + return false; + } + + @Override + public boolean use(ItemStack itemStack, double amount, EntityLivingBase entity) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + return this.discharge(itemStack, amount, 1, true, false, false) >= amount - 1; + } + return false; + } + + @Override + public void chargeFromArmor(ItemStack itemStack, EntityLivingBase entity) + { + } + + @Override + public String getToolTip(ItemStack itemStack) + { + return null; + } + + @Override + public double getMaxCharge(ItemStack stack) + { + if (stack.getItem() instanceof IItemElectricBase) + { + return ((IElectricItem) stack.getItem()).getMaxCharge(stack); + } + return 1; + } + + @Override + public int getTier(ItemStack stack) + { + if (stack.getItem() instanceof IItemElectricBase) + { + return ((IElectricItem) stack.getItem()).getTier(stack); + } + + return 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ItemElectricBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ItemElectricBase.java new file mode 100644 index 00000000..6deae74d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ItemElectricBase.java @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.item; + +import ic2.api.item.IElectricItem; +import ic2.api.item.IElectricItemManager; +import ic2.api.item.ISpecialElectricItem; +import java.util.List; +import javax.annotation.Nullable; +import mekanism.api.energy.IEnergizedItem; +import micdoodle8.mods.galacticraft.api.item.ElectricItemHelper; +import micdoodle8.mods.galacticraft.api.item.IItemElectricBase; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.items.ItemBatteryInfinite; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagDouble; +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion; +import net.minecraftforge.fml.relauncher.FMLInjectionData; + +//@noformat +@InterfaceList(value = { + @Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.item.IElectricItem", modid = CompatibilityManager.modidIC2), + @Interface(iface = "mekanism.api.energy.IEnergizedItem", modid = CompatibilityManager.modidMekanism) +}) +public abstract class ItemElectricBase extends Item implements IItemElectricBase, ISpecialElectricItem, IElectricItem, IEnergizedItem +{ + + private static Object itemManagerIC2; + public float transferMax; + private DefaultArtifactVersion mcVersion = null; + private static final int DAMAGE_RANGE = 100; + + public ItemElectricBase() + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(DAMAGE_RANGE); + this.setNoRepair(); + this.setMaxTransfer(); + + this.mcVersion = new DefaultArtifactVersion((String) FMLInjectionData.data()[4]); + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + itemManagerIC2 = new ElectricItemManagerIC2(); + } + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + protected void setMaxTransfer() + { + this.transferMax = 200; + } + + @Override + public float getMaxTransferGC(ItemStack itemStack) + { + return this.transferMax; + } + + @Override + public void addInformation(ItemStack itemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + String color = ""; + float joules = this.getElectricityStored(itemStack); + + if (joules <= this.getMaxElectricityStored(itemStack) / 3) + { + color = "\u00a74"; + } else if (joules > this.getMaxElectricityStored(itemStack) * 2 / 3) + { + color = "\u00a72"; + } else + { + color = "\u00a76"; + } + + tooltip.add(color + EnergyDisplayHelper.getEnergyDisplayS(joules) + "/" + EnergyDisplayHelper.getEnergyDisplayS(this.getMaxElectricityStored(itemStack))); + } + + /** + * Makes sure the item is uncharged when it is crafted and not charged. + * Change this if you do not want this to happen! + */ + @Override + public void onCreated(ItemStack itemStack, World par2World, EntityPlayer par3EntityPlayer) + { + this.setElectricity(itemStack, 0); + } + + @Override + public float recharge(ItemStack itemStack, float energy, boolean doReceive) + { + float rejectedElectricity = Math.max(this.getElectricityStored(itemStack) + energy - this.getMaxElectricityStored(itemStack), 0); + float energyToReceive = energy - rejectedElectricity; + if (energyToReceive > this.transferMax) + { + rejectedElectricity += energyToReceive - this.transferMax; + energyToReceive = this.transferMax; + } + + if (doReceive) + { + this.setElectricity(itemStack, this.getElectricityStored(itemStack) + energyToReceive); + } + + return energyToReceive; + } + + @Override + public float discharge(ItemStack itemStack, float energy, boolean doTransfer) + { + float thisEnergy = this.getElectricityStored(itemStack); + float energyToTransfer = Math.min(Math.min(thisEnergy, energy), this.transferMax); + + if (doTransfer) + { + this.setElectricity(itemStack, thisEnergy - energyToTransfer); + } + + return energyToTransfer; + } + + @Override + public int getTierGC(ItemStack itemStack) + { + return 1; + } + + @Override + public void setElectricity(ItemStack itemStack, float joules) + { + // Saves the frequency in the ItemStack + if (itemStack.getTagCompound() == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + float electricityStored = Math.max(Math.min(joules, this.getMaxElectricityStored(itemStack)), 0); + if (joules > 0F || itemStack.getTagCompound().hasKey("electricity")) + { + itemStack.getTagCompound().setFloat("electricity", electricityStored); + } + + /** Sets the damage as a percentage to render the bar properly. */ + itemStack.setItemDamage(DAMAGE_RANGE - (int) (electricityStored / this.getMaxElectricityStored(itemStack) * DAMAGE_RANGE)); + } + + @Override + public float getTransfer(ItemStack itemStack) + { + return Math.min(this.transferMax, this.getMaxElectricityStored(itemStack) - this.getElectricityStored(itemStack)); + } + + /** + * Gets the energy stored in the item. Energy is stored using item NBT + */ + @Override + public float getElectricityStored(ItemStack itemStack) + { + if (itemStack.getTagCompound() == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + float energyStored = 0f; + if (itemStack.getTagCompound().hasKey("electricity")) + { + NBTBase obj = itemStack.getTagCompound().getTag("electricity"); + if (obj instanceof NBTTagDouble) + { + energyStored = ((NBTTagDouble) obj).getFloat(); + } else if (obj instanceof NBTTagFloat) + { + energyStored = ((NBTTagFloat) obj).getFloat(); + } + } else // First time check item - maybe from addInformation() in a JEI + // recipe display? + { + if (itemStack.getItemDamage() == DAMAGE_RANGE) + return 0F; + + energyStored = this.getMaxElectricityStored(itemStack) * (DAMAGE_RANGE - itemStack.getItemDamage()) / DAMAGE_RANGE; + itemStack.getTagCompound().setFloat("electricity", energyStored); + } + + /** Sets the damage as a percentage to render the bar properly. */ + itemStack.setItemDamage(DAMAGE_RANGE - (int) (energyStored / this.getMaxElectricityStored(itemStack) * DAMAGE_RANGE)); + return energyStored; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(ElectricItemHelper.getUncharged(new ItemStack(this))); + list.add(ElectricItemHelper.getWithCharge(new ItemStack(this), this.getMaxElectricityStored(new ItemStack(this)))); + } + } + + public static boolean isElectricItem(Item item) + { + if (item instanceof IItemElectricBase) + { + return true; + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ic2.api.item.ISpecialElectricItem) + { + return true; + } + } + + return false; + } + + public static boolean isElectricItemEmpty(ItemStack itemstack) + { + if (itemstack.isEmpty()) + { + return false; + } + Item item = itemstack.getItem(); + + if (item instanceof IItemElectricBase) + { + return ((IItemElectricBase) item).getElectricityStored(itemstack) <= 0; + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ic2.api.item.IElectricItem) + { + return !((ic2.api.item.IElectricItem) item).canProvideEnergy(itemstack); + } + } + + return false; + } + + public static boolean isElectricItemCharged(ItemStack itemstack) + { + if (itemstack == null) + return false; + Item item = itemstack.getItem(); + + if (item instanceof IItemElectricBase) + { + return ((IItemElectricBase) item).getElectricityStored(itemstack) > 0; + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ic2.api.item.IElectricItem) + { + return ((ic2.api.item.IElectricItem) item).canProvideEnergy(itemstack); + } + } + + return false; + } + + // For RF compatibility + + public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) + { + return (int) (this.recharge(container, maxReceive * EnergyConfigHandler.RF_RATIO, !simulate) / EnergyConfigHandler.RF_RATIO); + } + + public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) + { + return (int) (this.discharge(container, maxExtract / EnergyConfigHandler.TO_RF_RATIO, !simulate) * EnergyConfigHandler.TO_RF_RATIO); + } + + public int getEnergyStored(ItemStack container) + { + return (int) (this.getElectricityStored(container) * EnergyConfigHandler.TO_RF_RATIO); + } + + public int getMaxEnergyStored(ItemStack container) + { + return (int) (this.getMaxElectricityStored(container) * EnergyConfigHandler.TO_RF_RATIO); + } + + // The following seven methods are for Mekanism compatibility + + @Method(modid = CompatibilityManager.modidMekanism) + public double getEnergy(ItemStack itemStack) + { + return this.getElectricityStored(itemStack) * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public void setEnergy(ItemStack itemStack, double amount) + { + this.setElectricity(itemStack, (float) amount * EnergyConfigHandler.MEKANISM_RATIO); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxEnergy(ItemStack itemStack) + { + return this.getMaxElectricityStored(itemStack) * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxTransfer(ItemStack itemStack) + { + return this.transferMax * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canReceive(ItemStack itemStack) + { + return (itemStack != null && !(itemStack.getItem() instanceof ItemBatteryInfinite)); + } + + public boolean canSend(ItemStack itemStack) + { + return true; + } + + // All the following methods are for IC2 compatibility + + @Method(modid = CompatibilityManager.modidIC2) + public IElectricItemManager getManager(ItemStack itemstack) + { + return (IElectricItemManager) ItemElectricBase.itemManagerIC2; + } + + @Method(modid = CompatibilityManager.modidIC2) + public boolean canProvideEnergy(ItemStack itemStack) + { + return true; + } + + @Method(modid = CompatibilityManager.modidIC2) + public int getTier(ItemStack itemStack) + { + return 1; + } + + @Method(modid = CompatibilityManager.modidIC2) + public double getMaxCharge(ItemStack itemStack) + { + return this.getMaxElectricityStored(itemStack) / EnergyConfigHandler.IC2_RATIO; + } + + @Method(modid = CompatibilityManager.modidIC2) + public double getTransferLimit(ItemStack itemStack) + { + return this.transferMax * EnergyConfigHandler.TO_IC2_RATIO; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorage.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorage.java new file mode 100644 index 00000000..1b40750e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorage.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import micdoodle8.mods.galacticraft.api.power.IEnergyStorageGC; +import net.minecraft.nbt.NBTTagCompound; + +public class EnergyStorage implements IEnergyStorageGC +{ + + protected float energy; + protected float capacity; + protected float maxReceive; + protected float maxExtract; + protected float maxExtractRemaining; + + public EnergyStorage(float capacity) + { + this(capacity, 60, 30); + } + + public EnergyStorage(float capacity, float maxTransfer) + { + this(capacity, 2.5F * maxTransfer, maxTransfer); + } + + public EnergyStorage(float capacity, float maxReceive, float maxExtract) + { + this.capacity = capacity; + this.maxReceive = maxReceive; + this.maxExtract = maxExtract; + this.maxExtractRemaining = maxExtract; + } + + public EnergyStorage readFromNBT(NBTTagCompound nbt) + { + this.energy = nbt.getFloat("EnergyF"); + return this; + } + + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + if (this.energy < 0) + { + this.energy = 0; + } + + nbt.setFloat("EnergyF", Math.min(this.energy, this.capacity)); + return nbt; + } + + public void setCapacity(float capacity) + { + this.capacity = capacity; + + if (this.energy > capacity) + { + this.energy = capacity; + } + } + + /* + * Sets the maximum energy transfer rate on input Call this AFTER + * setMaxExtract(). + */ + public void setMaxReceive(float maxReceive) + { + this.maxReceive = maxReceive; + } + + /* + * Sets the energy consumption rate in gJ/t (For machines, this is the + * energy used per tick.) (For energy sources, this is the maximum output.) + * Also sets the receive rate at a default value of 2 * the energy + * consumption rate - so the machine's energy store can charge up even while + * it is working. If that is not required, call setMaxReceive() AFTER + * calling setMaxExtract(). + */ + public void setMaxExtract(float maxExtract) + { + this.maxExtract = maxExtract; + this.maxExtractRemaining = maxExtract; + this.maxReceive = 2.5F * maxExtract; + } + + public void setEnergyStored(float energy) + { + this.energy = Math.max(0, Math.min(energy, this.capacity)); + } + + public float getMaxReceive() + { + return this.maxReceive; + } + + public float getMaxExtract() + { + return this.maxExtract; + } + + @Override + public float receiveEnergyGC(float maxReceive, boolean simulate) + { + float energyReceived = Math.min(this.capacity - this.energy, Math.min(this.maxReceive, maxReceive)); + + if (!simulate) + { + this.energy += energyReceived; + } + + return energyReceived; + } + + public float receiveEnergyGC(float amount) + { + float energyReceived = Math.min(this.capacity - this.energy, Math.min(this.maxReceive, amount)); + this.energy += energyReceived; + return energyReceived; + } + + @Override + public float extractEnergyGC(float amount, boolean simulate) + { + float energyExtracted = Math.min(this.energy, Math.min(this.maxExtractRemaining, amount)); + + if (!simulate) + { + this.energy -= energyExtracted; + } + + return energyExtracted; + } + + public float extractEnergyGCnoMax(float amount, boolean simulate) + { + float energyExtracted = Math.min(this.energy, amount); + + if (!simulate) + { + this.energy -= energyExtracted; + } + + return energyExtracted; + } + + @Override + public float getEnergyStoredGC() + { + return this.energy; + } + + @Override + public float getCapacityGC() + { + return this.capacity; + } + + @Override + public boolean equals(Object obj) + { + if (obj == null) + { + return false; + } + if (obj instanceof EnergyStorage) + { + EnergyStorage storage = (EnergyStorage) obj; + return (storage.getEnergyStoredGC() == energy && storage.getCapacityGC() == capacity && storage.getMaxReceive() == maxReceive && storage.getMaxExtract() == maxExtract); + } + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorageTile.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorageTile.java new file mode 100644 index 00000000..6123e505 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorageTile.java @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import micdoodle8.mods.galacticraft.api.power.EnergySource; +import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceAdjacent; +import micdoodle8.mods.galacticraft.api.power.IEnergyHandlerGC; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.core.tile.ReceiverMode; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; + +public abstract class EnergyStorageTile extends TileEntityAdvanced implements IEnergyHandlerGC, IElectrical +{ + + public static final float STANDARD_CAPACITY = 16000F; + + @NetworkedField(targetSide = Side.CLIENT) + public EnergyStorage storage = new EnergyStorage(STANDARD_CAPACITY, 10); + public int tierGC = 1; + @NetworkedField(targetSide = Side.CLIENT) + public int poweredByTierGC = 1; + + public EnergyStorageTile(String tileName) + { + super(tileName); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + + super.readFromNBT(nbt); + this.storage.readFromNBT(nbt); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + this.storage.writeToNBT(nbt); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public abstract ReceiverMode getModeFromDirection(EnumFacing direction); + + @Override + public float receiveEnergyGC(EnergySource from, float amount, boolean simulate) + { + return this.storage.receiveEnergyGC(amount, simulate); + } + + @Override + public float extractEnergyGC(EnergySource from, float amount, boolean simulate) + { + return this.storage.extractEnergyGC(amount, simulate); + } + + @Override + public boolean nodeAvailable(EnergySource from) + { + if (!(from instanceof EnergySourceAdjacent)) + { + return false; + } + + return this.getModeFromDirection(((EnergySourceAdjacent) from).direction) != ReceiverMode.UNDEFINED; + } + + @Override + public float getEnergyStoredGC(EnergySource from) + { + return this.storage.getEnergyStoredGC(); + } + + public float getEnergyStoredGC() + { + return this.storage.getEnergyStoredGC(); + } + + @Override + public float getMaxEnergyStoredGC(EnergySource from) + { + return this.storage.getCapacityGC(); + } + + public float getMaxEnergyStoredGC() + { + return this.storage.getCapacityGC(); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return false; + } + + // Five methods for compatibility with basic electricity + @Override + public float receiveElectricity(EnumFacing from, float receive, int tier, boolean doReceive) + { + this.poweredByTierGC = (tier < 6) ? tier : 6; + return this.storage.receiveEnergyGC(receive, !doReceive); + } + + @Override + public float provideElectricity(EnumFacing from, float request, boolean doProvide) + { + return this.storage.extractEnergyGC(request, !doProvide); + } + + @Override + public float getRequest(EnumFacing direction) + { + return Math.min(this.storage.getCapacityGC() - this.storage.getEnergyStoredGC(), this.storage.getMaxReceive()); + } + + @Override + public float getProvide(EnumFacing direction) + { + return 0; + } + + @Override + public int getTierGC() + { + return this.tierGC; + } + + public void setTierGC(int newTier) + { + this.tierGC = newTier; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseConductor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseConductor.java new file mode 100644 index 00000000..3f89ede5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseConductor.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.energy.grid.EnergyNetwork; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/** + * This tile entity pre-fabricated for all conductors. + * + * @author Calclavia + */ +@SuppressWarnings( +{"rawtypes"}) +public abstract class TileBaseConductor extends TileEntity implements IConductor +{ + + protected IGridNetwork network; + + public TileEntity[] adjacentConnections = null; + + @Override + public void validate() + { + super.validate(); + if (!this.world.isRemote) + { + TickHandlerServer.energyTransmitterUpdates.add(this); + } + } + + @Override + public void invalidate() + { + if (!this.world.isRemote) + { + this.getNetwork().split(this); + } + + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + super.invalidate(); + super.onChunkUnload(); + } + + @Override + public IElectricityNetwork getNetwork() + { + if (this.network == null) + { + EnergyNetwork network = new EnergyNetwork(); + network.getTransmitters().add(this); + this.setNetwork(network); + } + + return (IElectricityNetwork) this.network; + } + + @Override + public void setNetwork(IGridNetwork network) + { + this.network = network; + } + + @Override + public void refresh() + { + if (!this.world.isRemote) + { + this.adjacentConnections = null; + + this.getNetwork().refresh(); + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity instanceof TileBaseConductor && ((TileBaseConductor) tileEntity).canConnect(side.getOpposite(), NetworkType.POWER)) + { + IGridNetwork otherNet = ((INetworkProvider) tileEntity).getNetwork(); + if (!this.getNetwork().equals(otherNet)) + { + if (!otherNet.getTransmitters().isEmpty()) + { + otherNet.merge(this.getNetwork()); + } + } + } + } + } + } + + @Override + public TileEntity[] getAdjacentConnections() + { + /** + * Cache the adjacentConnections. + */ + if (this.adjacentConnections == null) + { + this.adjacentConnections = new TileEntity[6]; + + BlockVec3 thisVec = new BlockVec3(this); + for (int i = 0; i < 6; i++) + { + EnumFacing side = EnumFacing.byIndex(i); + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(side.getOpposite(), NetworkType.POWER)) + { + this.adjacentConnections[i] = tileEntity; + } + } + } + } + + return this.adjacentConnections; + } + + @Override + public boolean hasNetwork() + { + return this.network != null; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.POWER; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getPos().getX() + 1, this.getPos().getY() + 1, this.getPos().getZ() + 1); + } + + @Override + public NetworkType getNetworkType() + { + return NetworkType.POWER; + } + + @Override + public boolean canTransmit() + { + return true; + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlock.java new file mode 100644 index 00000000..1f437be6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlock.java @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import com.google.common.collect.Lists; +import ic2.api.tile.IWrenchable; +import java.util.EnumSet; +import java.util.List; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; + +@Interface(iface = "ic2.api.tile.IWrenchable", modid = CompatibilityManager.modidIC2, striprefs = true) +public abstract class TileBaseElectricBlock extends TileBaseUniversalElectrical implements IDisableableMachine, IConnector, IWrenchable +{ + + @NetworkedField(targetSide = Side.CLIENT) + public boolean disabled = false; + @NetworkedField(targetSide = Side.CLIENT) + public int disableCooldown = 0; + @NetworkedField(targetSide = Side.CLIENT) + public boolean hasEnoughEnergyToRun = false; + public boolean noRedstoneControl = false; + + public TileBaseElectricBlock(String tileName) + { + super(tileName); + } + + public boolean shouldPullEnergy() + { + return this.shouldUseEnergy() || this.getEnergyStoredGC(null) < this.getMaxEnergyStoredGC(); + } + + public abstract boolean shouldUseEnergy(); + + public abstract EnumFacing getElectricInputDirection(); + + public abstract ItemStack getBatteryInSlot(); + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC(null) * i / this.getMaxEnergyStoredGC(null)); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + if (this.shouldPullEnergy() && this.getEnergyStoredGC(null) < this.getMaxEnergyStoredGC(null) && this.getBatteryInSlot() != null && this.getElectricInputDirection() != null) + { + this.discharge(this.getBatteryInSlot()); + } + + if (this.getEnergyStoredGC(null) > this.storage.getMaxExtract() && (this.noRedstoneControl || !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos()))) + { + this.hasEnoughEnergyToRun = true; + if (this.shouldUseEnergy()) + { + this.storage.extractEnergyGC(this.storage.getMaxExtract(), false); + } else + { + this.slowDischarge(); + } + } else + { + this.hasEnoughEnergyToRun = false; + this.slowDischarge(); + } + } + + super.update(); + + if (!this.world.isRemote) + { + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + } + } + + public void slowDischarge() + { + if (this.ticks % 10 == 0) + { + this.storage.extractEnergyGC(5F, false); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setBoolean("isDisabled", this.getDisabled(0)); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.setDisabled(0, nbt.getBoolean("isDisabled")); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + this.disabled = disabled; + this.disableCooldown = 10; + } + } + + public abstract EnumFacing getFront(); + + public EnumFacing byIndex() { + return getFront(); + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public EnumFacing getFacing(World world, BlockPos pos) + { + return this.getFront(); + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean setFacing(World world, BlockPos pos, EnumFacing newDirection, EntityPlayer player) + { + return false; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean wrenchCanRemove(World world, BlockPos pos, EntityPlayer player) + { + return false; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public List getWrenchDrops(World world, BlockPos pos, IBlockState state, TileEntity te, EntityPlayer player, int fortune) + { + List drops = Lists.newArrayList(); + drops.add(this.getBlockType().getPickBlock(state, null, this.world, this.getPos(), player)); + return drops; + } + + @Override + public EnumSet getElectricalInputDirections() + { + if (this.getElectricInputDirection() == null) + { + return EnumSet.noneOf(EnumFacing.class); + } + + return EnumSet.of(this.getElectricInputDirection()); + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return this.getWorld().getTileEntity(this.getPos()) == this && entityplayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + + return direction == this.getElectricInputDirection(); + } + + public String getGUIstatus() + { + if (!this.noRedstoneControl && RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.off.name"); + } + + if (this.getEnergyStoredGC() == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + if (this.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } + + if (this.getEnergyStoredGC() < this.storage.getMaxExtract()) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.active.name"); + } + + /** + * @param missingInput = dynamically: null if all inputs are present, or a + * string if an input (e.g. oxygen, fuel) is missing + * @param activeString = the specific 'Running' / 'Processing' etc string + * for this machine + * @return + */ + public String getGUIstatus(String missingInput, String activeString, boolean shorten) + { + if (!this.noRedstoneControl && RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.off.name"); + } + + if (this.getEnergyStoredGC() == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate(shorten ? "gui.status.missingpower.short.name" : "gui.status.missingpower.name"); + } + + if (missingInput != null) + { + return missingInput; + } + + if (this.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } + + if (this.getEnergyStoredGC() < this.storage.getMaxExtract()) + { + return EnumColor.ORANGE + GCCoreUtil.translate(shorten ? "gui.status.missingpower.short.name" : "gui.status.missingpower.name"); + } + + if (activeString != null) + { + return activeString; + } + + return EnumColor.RED + GCCoreUtil.translate("gui.status.unknown.name"); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlockWithInventory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlockWithInventory.java new file mode 100644 index 00000000..1af8b6af --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlockWithInventory.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +public abstract class TileBaseElectricBlockWithInventory extends TileBaseElectricBlock implements ISidedInventory, IInventoryDefaults +{ + + public TileBaseElectricBlockWithInventory(String tileName) + { + super(tileName); + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.byHorizontalIndex(((this.getBlockMetadata() & 3) + 1) % 4); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalConductor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalConductor.java new file mode 100644 index 00000000..5d2aaecd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalConductor.java @@ -0,0 +1,494 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import buildcraft.api.mj.IMjConnector; +import buildcraft.api.mj.IMjReceiver; +import buildcraft.api.mj.MjAPI; +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyEmitter; +import ic2.api.energy.tile.IEnergySink; +import ic2.api.energy.tile.IEnergySource; +import ic2.api.energy.tile.IEnergyTile; +import javax.annotation.Nonnull; +import mekanism.api.energy.IStrictEnergyAcceptor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.common.eventhandler.Event; + +@InterfaceList(value = { + @Interface(iface = "net.minecraft.util.ITickable", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergyAcceptor", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergyEmitter", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = CompatibilityManager.modidIC2), + @Interface(iface = "mekanism.api.energy.IStrictEnergyAcceptor", modid = CompatibilityManager.modidMekanism), + @Interface(iface = "buildcraft.api.mj.IMjReceiver", modid = CompatibilityManager.modBCraftEnergy) +}) +public abstract class TileBaseUniversalConductor extends TileBaseConductor implements IEnergyStorage, ITickable, IMjReceiver, IEnergyAcceptor, IEnergyEmitter, IEnergySink, IStrictEnergyAcceptor +{ + + protected boolean isAddedToEnergyNet; + private float IC2surplusJoules = 0F; + + @Override + public void onNetworkChanged() + { + } + + @Override + public TileEntity[] getAdjacentConnections() + { + return EnergyUtil.getAdjacentPowerConnections(this); + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public void update() + { + if (!this.isAddedToEnergyNet) + { + if (!this.world.isRemote) + { + this.initIC(); + } + + this.isAddedToEnergyNet = true; + } + } + + @Override + public void invalidate() + { + this.IC2surplusJoules = 0F; + this.unloadTileIC2(); + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + this.unloadTileIC2(); + super.onChunkUnload(); + } + + protected void initIC() + { + if (EnergyConfigHandler.isIndustrialCraft2Loaded() && !this.world.isRemote) + { + try + { + Object o = CompatibilityManager.classIC2tileEventLoad.getConstructor(IEnergyTile.class).newInstance(this); + + if (o != null && o instanceof Event) + { + MinecraftForge.EVENT_BUS.post((Event) o); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + private void unloadTileIC2() + { + if (this.isAddedToEnergyNet && this.world != null) + { + if (!this.world.isRemote && EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + try + { + Object o = CompatibilityManager.classIC2tileEventUnload.getConstructor(IEnergyTile.class).newInstance(this); + + if (o != null && o instanceof Event) + { + MinecraftForge.EVENT_BUS.post((Event) o); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.isAddedToEnergyNet = false; + } + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double getDemandedEnergy() + { + if (this.getNetwork() == null) + { + return 0.0; + } + + if (this.IC2surplusJoules < 0.001F) + { + this.IC2surplusJoules = 0F; + return this.getNetwork().getRequest(this) / EnergyConfigHandler.IC2_RATIO; + } + + this.IC2surplusJoules = this.getNetwork().produce(this.IC2surplusJoules, true, 1, this); + if (this.IC2surplusJoules < 0.001F) + { + this.IC2surplusJoules = 0F; + return this.getNetwork().getRequest(this) / EnergyConfigHandler.IC2_RATIO; + } + return 0D; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double injectEnergy(EnumFacing directionFrom, double amount, double voltage) + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, directionFrom); + int tier = ((int) voltage > 120) ? 2 : 1; + if (tile instanceof IEnergySource && ((IEnergySource) tile).getOfferedEnergy() >= 128) + { + tier = 2; + } + float convertedEnergy = (float) amount * EnergyConfigHandler.IC2_RATIO; + float surplus = this.getNetwork().produce(convertedEnergy, true, tier, this, tile); + + if (surplus >= 0.001F) + { + this.IC2surplusJoules = surplus; + } + else + { + this.IC2surplusJoules = 0F; + } + + return 0D; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public int getSinkTier() + { + return 3; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean acceptsEnergyFrom(IEnergyEmitter emitter, EnumFacing side) + { + //Don't add connection to IC2 grid if it's a Galacticraft tile + if (emitter instanceof IElectrical || emitter instanceof IConductor) + { + return false; + } + + //Don't make connection with IC2 wires [don't want risk of multiple connections + there is a graphical glitch in IC2] + try + { + if (EnergyUtil.clazzIC2Cable != null && EnergyUtil.clazzIC2Cable.isInstance(emitter)) + { + return false; + } + } + catch (Exception e) + { + e.printStackTrace(); + } + + return true; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean emitsEnergyTo(IEnergyAcceptor receiver, EnumFacing side) + { + //Don't add connection to IC2 grid if it's a Galacticraft tile + if (receiver instanceof IElectrical || receiver instanceof IConductor) + { + return false; + } + + //Don't make connection with IC2 wires [don't want risk of multiple connections + there is a graphical glitch in IC2] + try + { + if (EnergyUtil.clazzIC2Cable != null && EnergyUtil.clazzIC2Cable.isInstance(receiver)) + { + return false; + } + } + catch (Exception e) + { + e.printStackTrace(); + } + + return true; + } + + // ForgeEnergy + @Override + public int receiveEnergy(int maxReceive, boolean simulate) + { + if (this.getNetwork() == null || EnergyConfigHandler.disableFEInput) + { + return 0; + } + + float receiveGC = maxReceive * EnergyConfigHandler.RF_RATIO; + float sentGC = receiveGC - this.getNetwork().produce(receiveGC, !simulate, 1); + return MathHelper.floor(sentGC / EnergyConfigHandler.RF_RATIO); + } + + // ForgeEnergy OR BuildCraft (method name clash!) + @Override + public boolean canReceive() + { + return !EnergyConfigHandler.disableBuildCraftInput || !EnergyConfigHandler.disableFEInput; + } + + // ForgeEnergy + @Override + public int getEnergyStored() + { + return 0; + } + + // ForgeEnergy + @Override + public int getMaxEnergyStored() + { + if (this.getNetwork() == null || EnergyConfigHandler.disableFEInput) + { + return 0; + } + + return MathHelper.floor(this.getNetwork().getRequest(this) / EnergyConfigHandler.RF_RATIO); + } + + // ForgeEnergy + @Override + public int extractEnergy(int maxExtract, boolean simulate) + { + return 0; + } + + // ForgeEnergy + @Override + public boolean canExtract() + { + return false; + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long getPowerRequested() + { + if (this.getNetwork() == null || EnergyConfigHandler.disableBuildCraftInput) + { + return 0L; + } + + return (long) (this.getNetwork().getRequest(this) / EnergyConfigHandler.BC8_INTERNAL_RATIO); + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long receivePower(long microJoules, boolean simulate) + { + if (this.getNetwork() == null || EnergyConfigHandler.disableBuildCraftInput) + { + return microJoules; + } + float receiveGC = microJoules * EnergyConfigHandler.BC8_INTERNAL_RATIO; + float sentGC = receiveGC - this.getNetwork().produce(receiveGC, !simulate, 1); + return (long) (sentGC / EnergyConfigHandler.BC8_INTERNAL_RATIO); + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public boolean canConnect(@Nonnull IMjConnector other) + { + return true; + } + + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) + { + if (this.getNetwork() == null) + { + return 0; + } + float receiveGC = maxReceive * EnergyConfigHandler.RF_RATIO; + float sentGC = receiveGC - this.getNetwork().produce(receiveGC, !simulate, 1); + return MathHelper.floor(sentGC / EnergyConfigHandler.RF_RATIO); + } + + public int extractEnergy(EnumFacing from, int maxExtract, boolean simulate) + { + return 0; + } + + public boolean canConnectEnergy(EnumFacing from) + { + // Do not form wire-to-wire connections with EnderIO conduits + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, from); + try + { + if (EnergyUtil.clazzMekCable != null && EnergyUtil.clazzMekCable.isInstance(tile)) + { + return false; + } + } catch (Exception e) + { + } + return true; + } + + public int getEnergyStored(EnumFacing from) + { + return 0; + } + + public int getMaxEnergyStored(EnumFacing from) + { + if (this.getNetwork() == null) + { + return 0; + } + + return MathHelper.floor(this.getNetwork().getRequest(this) / EnergyConfigHandler.RF_RATIO); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double transferEnergyToAcceptor(EnumFacing side, double amount) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0.0; + } + + if (!this.canReceiveEnergy(side)) + { + return 0.0; + } + + return amount - this.getNetwork().produce((float) amount * EnergyConfigHandler.MEKANISM_RATIO, true, 1, this) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double acceptEnergy(EnumFacing side, double amount, boolean simulate) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0.0; + } + + if (!this.canReceiveEnergy(side)) + { + return 0.0; + } + + return amount - this.getNetwork().produce((float) amount * EnergyConfigHandler.MEKANISM_RATIO, !simulate, 1, this) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canReceiveEnergy(EnumFacing side) + { + if (this.getNetwork() == null) + { + return false; + } + + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, side); + try + { + if (EnergyUtil.clazzMekCable != null && EnergyUtil.clazzMekCable.isInstance(te)) + { + return true; + } + } catch (Exception e) + { + e.printStackTrace(); + } + + return true; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getEnergy() + { + return 0; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public void setEnergy(double energy) + { + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxEnergy() + { + if (this.getNetwork() == null) + { + return 0; + } + return this.getNetwork().getRequest(this) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityEnergy.ENERGY) + { + return true; + } + if (EnergyConfigHandler.isBuildcraftLoaded() && (capability == MjAPI.CAP_RECEIVER || capability == MjAPI.CAP_CONNECTOR)) + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, facing); + return !(CompatibilityManager.classBCTransportPipeTile.isInstance(tile)); + } + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityEnergy.ENERGY) + { + if (EnergyUtil.clazzEnderIOCable == null) + return (T) this; + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, facing); + return EnergyUtil.clazzEnderIOCable.isInstance(tile) ? null : (T) this; + } + if (EnergyConfigHandler.isBuildcraftLoaded() && (capability == MjAPI.CAP_RECEIVER || capability == MjAPI.CAP_CONNECTOR)) + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, facing); + if (!(CompatibilityManager.classBCTransportPipeTile.isInstance(tile))) + { + return (T) this; + } + } + return super.getCapability(capability, facing); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectrical.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectrical.java new file mode 100644 index 00000000..eae9a472 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectrical.java @@ -0,0 +1,621 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import buildcraft.api.mj.IMjConnector; +import buildcraft.api.mj.IMjReceiver; +import buildcraft.api.mj.MjAPI; +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyEmitter; +import ic2.api.energy.tile.IEnergySink; +import ic2.api.energy.tile.IEnergyTile; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; +import ic2.api.item.ISpecialElectricItem; +import java.util.EnumSet; +import javax.annotation.Nonnull; +import mekanism.api.energy.EnergizedItemManager; +import mekanism.api.energy.IEnergizedItem; +import mekanism.api.energy.IStrictEnergyAcceptor; +import mekanism.api.energy.IStrictEnergyOutputter; +import micdoodle8.mods.galacticraft.api.item.ElectricItemHelper; +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.tile.ReceiverMode; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.items.CapabilityItemHandler; + +@InterfaceList(value = { + @Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergyAcceptor", modid = CompatibilityManager.modidIC2), + @Interface(iface = "buildcraft.api.mj.IMjReceiver", modid = CompatibilityManager.modBCraftEnergy), + @Interface(iface = "mekanism.api.energy.IStrictEnergyOutputter", modid = CompatibilityManager.modidMekanism), + @Interface(iface = "mekanism.api.energy.IStrictEnergyAcceptor", modid = CompatibilityManager.modidMekanism) +}) +public abstract class TileBaseUniversalElectrical extends EnergyStorageTile implements IEnergySink, IEnergyAcceptor, IMjReceiver, IStrictEnergyOutputter, IStrictEnergyAcceptor +{ + + protected boolean isAddedToEnergyNet; + protected Object powerHandlerBC; + + private float IC2surplusInGJ = 0F; + + public TileBaseUniversalElectrical(String tileName) + { + super(tileName); + } + + @Override + public double getPacketRange() + { + return 12.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + public EnumSet getElectricalInputDirections() + { + return EnumSet.allOf(EnumFacing.class); + } + + public EnumSet getElectricalOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public float getRequest(EnumFacing direction) + { + if (this.getElectricalInputDirections().contains(direction) || direction == null) + { + return super.getRequest(direction); + } + + return 0F; + } + + @Override + public float receiveElectricity(EnumFacing from, float receive, int tier, boolean doReceive) + { + if (this.getElectricalInputDirections().contains(from) || from == null) + { + return super.receiveElectricity(from, receive, tier, doReceive); + } + + return 0F; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + return nbt; + } + + public void discharge(ItemStack itemStack) + { + if (itemStack != null) + { + Item item = itemStack.getItem(); + float energyToDischarge = this.getRequest(null); + + if (item instanceof IItemElectric) + { + this.storage.receiveEnergyGC(ElectricItemHelper.dischargeItem(itemStack, energyToDischarge)); + this.poweredByTierGC = ((IItemElectric) item).getTierGC(itemStack); + } + else if (EnergyConfigHandler.isMekanismLoaded() && item instanceof IEnergizedItem && ((IEnergizedItem) item).canSend(itemStack)) + { + this.storage.receiveEnergyGC((float) EnergizedItemManager.discharge(itemStack, energyToDischarge / EnergyConfigHandler.MEKANISM_RATIO) * EnergyConfigHandler.MEKANISM_RATIO); + } else if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ISpecialElectricItem && item instanceof IElectricItem) + { + IElectricItem electricItem = (IElectricItem) item; + ISpecialElectricItem specialElectricItem = (ISpecialElectricItem) item; + if (electricItem.canProvideEnergy(itemStack)) + { + double energyDischargeIC2 = energyToDischarge / EnergyConfigHandler.IC2_RATIO; + double result = specialElectricItem.getManager(itemStack).discharge(itemStack, energyDischargeIC2, 4, false, false, false); + float energyDischarged = (float) result * EnergyConfigHandler.IC2_RATIO; + this.storage.receiveEnergyGC(energyDischarged); + } + } else if (item instanceof IElectricItem) + { + IElectricItem electricItem = (IElectricItem) item; + if (electricItem.canProvideEnergy(itemStack)) + { + double energyDischargeIC2 = energyToDischarge / EnergyConfigHandler.IC2_RATIO; + double result = ElectricItem.manager.discharge(itemStack, energyDischargeIC2, 4, false, false, false); + float energyDischarged = (float) result * EnergyConfigHandler.IC2_RATIO; + this.storage.receiveEnergyGC(energyDischarged); + } + } + + } + } + } + + @Override + public void initiate() + { + super.initiate(); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + if (!this.isAddedToEnergyNet) + { + // Register to the IC2 Network + this.initIC(); + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded() && this.IC2surplusInGJ >= 0.001F) + { + this.IC2surplusInGJ -= this.storage.receiveEnergyGC(this.IC2surplusInGJ); + if (this.IC2surplusInGJ < 0.001F) + { + this.IC2surplusInGJ = 0; + } + } + } + } + + /** + * IC2 Methods + */ + @Override + public void invalidate() + { + super.invalidate(); + this.unloadTileIC2(); + } + + @Override + public void onChunkUnload() + { + super.onChunkUnload(); + this.unloadTileIC2(); + } + + protected void initIC() + { + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + try + { + Object o = CompatibilityManager.classIC2tileEventLoad.getConstructor(IEnergyTile.class).newInstance(this); + + if (o instanceof Event) + { + MinecraftForge.EVENT_BUS.post((Event) o); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.isAddedToEnergyNet = true; + } + + private void unloadTileIC2() + { + if (this.isAddedToEnergyNet && this.world != null) + { + if (EnergyConfigHandler.isIndustrialCraft2Loaded() && !this.world.isRemote) + { + try + { + Object o = CompatibilityManager.classIC2tileEventUnload.getConstructor(IEnergyTile.class).newInstance(this); + + if (o instanceof Event) + { + MinecraftForge.EVENT_BUS.post((Event) o); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.isAddedToEnergyNet = false; + } + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double getDemandedEnergy() + { + if (EnergyConfigHandler.disableIC2Input) + { + return 0.0; + } + + try + { + if (this.IC2surplusInGJ < 0.001F) + { + this.IC2surplusInGJ = 0F; + return Math.ceil((this.storage.receiveEnergyGC(Integer.MAX_VALUE, true)) / EnergyConfigHandler.IC2_RATIO); + } + + float received = this.storage.receiveEnergyGC(this.IC2surplusInGJ, true); + if (received == this.IC2surplusInGJ) + { + return Math.ceil((this.storage.receiveEnergyGC(Integer.MAX_VALUE, true) - this.IC2surplusInGJ) / EnergyConfigHandler.IC2_RATIO); + } + } catch (Exception e) + { + e.printStackTrace(); + } + return 0D; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double injectEnergy(EnumFacing direction, double amount, double voltage) + { + // IC2 in 1.8.9 seems to have reversed the sense of direction here, but + // not in acceptsEnergyFrom. (Seriously?!) + if (!EnergyConfigHandler.disableIC2Input && (direction == null || this.getElectricalInputDirections().contains(direction.getOpposite()))) + { + float convertedEnergy = (float) amount * EnergyConfigHandler.IC2_RATIO; + int tierFromIC2 = ((int) voltage > 120) ? (((int) voltage > 256) ? 4 : 2) : 1; + float receive = this.receiveElectricity(direction == null ? null : direction.getOpposite(), convertedEnergy, tierFromIC2, true); + + if (convertedEnergy > receive) + { + this.IC2surplusInGJ = convertedEnergy - receive; + } else + { + this.IC2surplusInGJ = 0F; + } + + // injectEnergy returns left over energy but all is used or goes + // into 'surplus' + return 0D; + } + + return amount; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public int getSinkTier() + { + return 3; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean acceptsEnergyFrom(IEnergyEmitter emitter, EnumFacing direction) + { + if (this.tileEntityInvalid) + return false; + //Don't add connection to IC2 grid if it's a Galacticraft tile + if (emitter instanceof IElectrical || emitter instanceof IConductor || !(emitter instanceof IEnergyTile)) + { + return false; + } + + return this.getElectricalInputDirections().contains(direction); + } + + // BuildCraft + @Override + public boolean canReceive() + { + return !EnergyConfigHandler.disableBuildCraftInput; + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long getPowerRequested() + { + if (EnergyConfigHandler.disableBuildCraftInput) + { + return 0L; + } + + // Boost stated demand by factor of 30, otherwise Buildcraft seems to + // send only a trickle of power + return (long) (this.storage.receiveEnergyGC(Integer.MAX_VALUE, true) / EnergyConfigHandler.BC8_INTERNAL_RATIO * 30F); + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long receivePower(long microJoules, boolean simulate) + { + if (EnergyConfigHandler.disableBuildCraftInput) + { + return microJoules; + } + float receiveGC = microJoules * EnergyConfigHandler.BC8_INTERNAL_RATIO; + float sentGC = receiveGC - super.receiveElectricity(null, receiveGC, 1, !simulate); + return (long) (sentGC / EnergyConfigHandler.BC8_INTERNAL_RATIO); + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public boolean canConnect(@Nonnull IMjConnector other) + { + return true; + } + + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) + { + if (EnergyConfigHandler.disableRFInput) + { + return 0; + } + + if (!this.getElectricalInputDirections().contains(from)) + { + return 0; + } + + return MathHelper.floor(super.receiveElectricity(from, maxReceive * EnergyConfigHandler.RF_RATIO, 1, !simulate) / EnergyConfigHandler.RF_RATIO); + } + + public boolean canConnectEnergy(EnumFacing from) + { + return this.getElectricalInputDirections().contains(from) || this.getElectricalOutputDirections().contains(from); + } + + public int getEnergyStored(EnumFacing from) + { + return MathHelper.floor(this.getEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + public int getMaxEnergyStored(EnumFacing from) + { + return MathHelper.floor(this.getMaxEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double transferEnergyToAcceptor(EnumFacing from, double amount) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0; + } + + if (!this.getElectricalInputDirections().contains(from)) + { + return 0; + } + + return this.receiveElectricity(from, (float) amount * EnergyConfigHandler.MEKANISM_RATIO, 1, true) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canReceiveEnergy(EnumFacing side) + { + return this.getElectricalInputDirections().contains(side); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double acceptEnergy(EnumFacing side, double amount, boolean simulate) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0.0; + } + + if (!this.getElectricalInputDirections().contains(side)) + { + return 0; + } + + return this.receiveElectricity(side, (float) amount * EnergyConfigHandler.MEKANISM_RATIO, 1, simulate) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public void setEnergy(double energy) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return; + } + + this.storage.setEnergyStored((float) energy * EnergyConfigHandler.MEKANISM_RATIO); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxEnergy() + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0.0; + } + + return this.getMaxEnergyStoredGC() / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + public boolean canOutputEnergy(EnumFacing side) + { + return this.getElectricalOutputDirections().contains(side); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double pullEnergy(EnumFacing side, double amount, boolean simulate) + { + return 0D; + } + + @Override + public ReceiverMode getModeFromDirection(EnumFacing direction) + { + if (this.getElectricalInputDirections().contains(direction)) + { + return ReceiverMode.RECEIVE; + } else if (this.getElectricalOutputDirections().contains(direction)) + { + return ReceiverMode.EXTRACT; + } + + return null; + } + + /* + * Compatibility: call this if the facing metadata is updated + */ + public void updateFacing() + { + if (EnergyConfigHandler.isIndustrialCraft2Loaded() && !this.world.isRemote) + { + // This seems the only method to tell IC2 the connection sides have + // changed + // (Maybe there is an internal refresh() method but it's not in the + // API) + this.unloadTileIC2(); + // This will do an initIC2 on next tick update. + } + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityEnergy.ENERGY || (EnergyConfigHandler.isBuildcraftLoaded() && (capability == MjAPI.CAP_RECEIVER || capability == MjAPI.CAP_CONNECTOR))) + { + return this.getElectricalInputDirections().contains(facing); + } + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityEnergy.ENERGY || (EnergyConfigHandler.isBuildcraftLoaded() && (capability == MjAPI.CAP_RECEIVER || capability == MjAPI.CAP_CONNECTOR))) + { + return this.getElectricalInputDirections().contains(facing) ? (T) new ForgeReceiver(this) : null; + } + return super.getCapability(capability, facing); + } + + @Interface(modid = CompatibilityManager.modBCraftEnergy, iface = "buildcraft.api.mj.IMjReceiver") + private static class ForgeReceiver implements net.minecraftforge.energy.IEnergyStorage, IMjReceiver + { + + private TileBaseUniversalElectrical tile; + + public ForgeReceiver(TileBaseUniversalElectrical tileElectrical) + { + this.tile = tileElectrical; + } + + @Override + public int receiveEnergy(int maxReceive, boolean simulate) + { + if (EnergyConfigHandler.disableFEInput) + return 0; + + return MathHelper.floor(tile.receiveElectricity(null, maxReceive * EnergyConfigHandler.RF_RATIO, 1, !simulate) / EnergyConfigHandler.RF_RATIO); + } + + @Override + public boolean canReceive() + { + return !EnergyConfigHandler.disableFEInput; + } + + @Override + public int getEnergyStored() + { + if (EnergyConfigHandler.disableFEInput) + return 0; + + return MathHelper.floor(tile.getEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Override + public int getMaxEnergyStored() + { + if (EnergyConfigHandler.disableFEInput) + return 0; + + return MathHelper.floor(tile.getMaxEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate) + { + return 0; + } + + @Override + public boolean canExtract() + { + return false; + } + + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public boolean canConnect(@Nonnull IMjConnector other) + { + return true; + } + + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long getPowerRequested() + { + return tile.getPowerRequested(); + } + + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long receivePower(long microJoules, boolean simulate) + { + return tile.receivePower(microJoules, simulate); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectricalSource.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectricalSource.java new file mode 100644 index 00000000..d0ccb330 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectricalSource.java @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import buildcraft.api.mj.MjAPI; +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyEmitter; +import ic2.api.energy.tile.IEnergySource; +import ic2.api.energy.tile.IEnergyTile; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; +import ic2.api.item.IElectricItemManager; +import ic2.api.item.ISpecialElectricItem; +import java.util.EnumSet; +import mekanism.api.energy.EnergizedItemManager; +import mekanism.api.energy.IEnergizedItem; +import mekanism.api.energy.IStrictEnergyStorage; +import micdoodle8.mods.galacticraft.api.item.ElectricItemHelper; +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; + +@InterfaceList(value = { + @Interface(iface = "ic2.api.energy.tile.IEnergyEmitter", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergySource", modid = CompatibilityManager.modidIC2), + @Interface(iface = "mekanism.api.energy.IStrictEnergyStorage", modid = CompatibilityManager.modidMekanism) +}) +public abstract class TileBaseUniversalElectricalSource extends TileBaseUniversalElectrical implements IEnergyEmitter, IEnergySource, IStrictEnergyStorage +{ + + public TileBaseUniversalElectricalSource(String tileName) + { + super(tileName); + } + + /* + * The main function to output energy each tick from a source. The source + * will attempt to produce into its outputDirections whatever energy it has + * available, and will reduce its stored energy by the amount which is in + * fact used. Max output = this.storage.maxExtract. + * @return The amount of energy that was used. + */ + public float produce() + { + this.storage.maxExtractRemaining = this.storage.maxExtract; + float produced = this.extractEnergyGC(null, this.produce(false), false); + this.storage.maxExtractRemaining -= produced; + if (this.storage.maxExtractRemaining < 0) + { + this.storage.maxExtractRemaining = 0; + } + return produced; + } + + /* + * Function to produce energy each tick into the outputs of a source. If + * simulate is true, no energy is in fact transferred. Note: even if + * simulate is false this does NOT reduce the source's own energy storage by + * the amount produced, that needs to be done elsewhere See this.produce() + * for an example. + */ + public float produce(boolean simulate) + { + float amountProduced = 0; + + if (!this.world.isRemote) + { + EnumSet outputDirections = this.getElectricalOutputDirections(); + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing direction : outputDirections) + { + TileEntity tileAdj = thisVec.getTileEntityOnSide(this.world, direction); + + if (tileAdj != null) + { + float toSend = this.extractEnergyGC(null, Math.min(this.getEnergyStoredGC() - amountProduced, this.getEnergyStoredGC() / outputDirections.size()), true); + if (toSend <= 0) + { + continue; + } + + if (tileAdj instanceof TileBaseConductor && ((TileBaseConductor) tileAdj).canConnect(direction.getOpposite(), NetworkType.POWER)) + { + IElectricityNetwork network = ((IConductor) tileAdj).getNetwork(); + if (network != null) + { + amountProduced += (toSend - network.produce(toSend, !simulate, this.tierGC, this)); + } + } else if (tileAdj instanceof TileBaseUniversalElectrical) + { + amountProduced += ((TileBaseUniversalElectrical) tileAdj).receiveElectricity(direction.getOpposite(), toSend, this.tierGC, !simulate); + } else + { + amountProduced += EnergyUtil.otherModsEnergyTransfer(tileAdj, direction.getOpposite(), toSend, simulate); + } + } + } + } + + return amountProduced; + } + + /** + * Recharges electric item. + */ + public void recharge(ItemStack itemStack) + { + if (itemStack != null && itemStack.getCount() == 1) + { + Item item = itemStack.getItem(); + float maxExtractSave = this.storage.getMaxExtract(); + if (this.tierGC > 1) + { + this.storage.setMaxExtract(maxExtractSave * 2.5F); + } + float energyToCharge = this.storage.extractEnergyGC(this.storage.getMaxExtract(), true); + + if (item instanceof IItemElectric) + { + this.storage.extractEnergyGC(ElectricItemHelper.chargeItem(itemStack, energyToCharge), false); + } + else if (EnergyConfigHandler.isMekanismLoaded() && item instanceof IEnergizedItem && ((IEnergizedItem) item).canReceive(itemStack)) + { + this.storage.extractEnergyGC((float) EnergizedItemManager.charge(itemStack, energyToCharge * EnergyConfigHandler.TO_MEKANISM_RATIO) / EnergyConfigHandler.TO_MEKANISM_RATIO, false); + } else if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ISpecialElectricItem) + { + ISpecialElectricItem specialElectricItem = (ISpecialElectricItem) item; + IElectricItemManager manager = specialElectricItem.getManager(itemStack); + double result = manager.charge(itemStack, energyToCharge * EnergyConfigHandler.TO_IC2_RATIO, this.tierGC + 1, false, false); + float energy = (float) result / EnergyConfigHandler.TO_IC2_RATIO; + this.storage.extractEnergyGC(energy, false); + } else if (item instanceof IElectricItem) + { + double result = ElectricItem.manager.charge(itemStack, energyToCharge * EnergyConfigHandler.TO_IC2_RATIO, this.tierGC + 1, false, false); + float energy = (float) result / EnergyConfigHandler.TO_IC2_RATIO; + this.storage.extractEnergyGC(energy, false); + } + } + if (this.tierGC > 1) + { + this.storage.setMaxExtract(maxExtractSave); + } + } + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean emitsEnergyTo(IEnergyAcceptor receiver, EnumFacing direction) + { + if (this.tileEntityInvalid) + return false; + + //Don't add connection to IC2 grid if it's a Galacticraft tile + if (receiver instanceof IElectrical || receiver instanceof IConductor || !(receiver instanceof IEnergyTile)) + { + return false; + } + + return this.getElectricalOutputDirections().contains(direction); + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double getOfferedEnergy() + { + if (EnergyConfigHandler.disableIC2Output) + { + return 0.0; + } + + return this.getProvide(null) * EnergyConfigHandler.TO_IC2_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public void drawEnergy(double amount) + { + if (EnergyConfigHandler.disableIC2Output) + { + return; + } + + this.storage.extractEnergyGC((float) amount / EnergyConfigHandler.TO_IC2_RATIO, false); + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public int getSourceTier() + { + return this.tierGC + 1; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double pullEnergy(EnumFacing side, double amount, boolean simulate) + { + if (this.canOutputEnergy(side)) + { + float amountGC = (float) amount / EnergyConfigHandler.TO_MEKANISM_RATIO; + return this.storage.extractEnergyGC(amountGC, simulate) * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + return 0D; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double getEnergy() + { + return this.storage.getEnergyStoredGC() * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxEnergy() + { + return this.storage.getCapacityGC() * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public void setEnergy(double energy) + { + this.storage.setEnergyStored((float) energy / EnergyConfigHandler.TO_MEKANISM_RATIO); + } + + @Override + public boolean hasCapability(Capability cap, EnumFacing side) + { + if (cap == CapabilityEnergy.ENERGY && this.canOutputEnergy(side)) + return true; + if (cap == EnergyUtil.mekCableOutput || cap == EnergyUtil.mekEnergyStorage) + { + return this.canOutputEnergy(side); + } + if (EnergyConfigHandler.isBuildcraftLoaded() && cap == MjAPI.CAP_CONNECTOR && this.canOutputEnergy(side)) + { + return true; + } + return super.hasCapability(cap, side); + } + + @Override + public T getCapability(Capability cap, EnumFacing side) + { + if (cap == CapabilityEnergy.ENERGY && this.getElectricalOutputDirections().contains(side)) + return (T) new ForgeEmitter(this); + if (cap != null && (cap == EnergyUtil.mekCableOutput || cap == EnergyUtil.mekEnergyStorage)) + { + return (T) this; + } + if (EnergyConfigHandler.isBuildcraftLoaded() && cap == MjAPI.CAP_CONNECTOR && this.canOutputEnergy(side)) + { + return (T) this; + } + return super.getCapability(cap, side); + } + + @Override + public float getProvide(EnumFacing direction) + { + if (direction == null && EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, this.getElectricOutputDirection()); + if (tile instanceof IConductor) + { + // No power provide to IC2 mod if it's a Galacticraft wire on + // the output. Galacticraft network will provide the power. + return 0.0F; + } + return this.storage.extractEnergyGC(Float.MAX_VALUE, true); + } + + if (this.getElectricalOutputDirections().contains(direction)) + { + return this.storage.extractEnergyGC(Float.MAX_VALUE, true); + } + + return 0F; + } + + public EnumFacing getElectricOutputDirection() + { + return null; + } + + public int extractEnergy(EnumFacing from, int maxExtract, boolean simulate) + { + if (EnergyConfigHandler.disableRFOutput) + { + return 0; + } + + if (!this.getElectricalOutputDirections().contains(from)) + { + return 0; + } + + return MathHelper.floor(this.storage.extractEnergyGC(maxExtract / EnergyConfigHandler.TO_RF_RATIO, !simulate) * EnergyConfigHandler.TO_RF_RATIO); + } + + private static class ForgeEmitter implements net.minecraftforge.energy.IEnergyStorage + { + + private TileBaseUniversalElectrical tile; + + public ForgeEmitter(TileBaseUniversalElectrical tileElectrical) + { + this.tile = tileElectrical; + } + + @Override + public int receiveEnergy(int maxReceive, boolean simulate) + { + return 0; + } + + @Override + public boolean canReceive() + { + return false; + } + + @Override + public int getEnergyStored() + { + if (EnergyConfigHandler.disableFEOutput) + return 0; + + return MathHelper.floor(tile.getEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Override + public int getMaxEnergyStored() + { + if (EnergyConfigHandler.disableFEOutput) + return 0; + + return MathHelper.floor(tile.getMaxEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate) + { + if (!canExtract()) + return 0; + + return MathHelper.floor(tile.storage.extractEnergyGC(maxExtract / EnergyConfigHandler.TO_RF_RATIO, !simulate) * EnergyConfigHandler.TO_RF_RATIO); + } + + @Override + public boolean canExtract() + { + return !EnergyConfigHandler.disableFEOutput; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileCableIC2Sealed.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileCableIC2Sealed.java new file mode 100644 index 00000000..b1700447 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileCableIC2Sealed.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.miccore.Annotations.RuntimeInterface; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class TileCableIC2Sealed extends TileEntity +{ + + private static boolean onLoadedDone = false; + private static boolean loadStateDone = false; + private static boolean rSWTDone = false; + private static boolean cableFieldsDone = false; + private static Method onLoaded = null; + private static Field loadState = null; + private static Method requestSingleWorldTick = null; + private static Field fieldInsulation = null; + private static Field fieldCableType = null; + + @RuntimeInterface(clazz = "ic2.core.block.wiring.TileEntityCable", modID = CompatibilityManager.modidIC2, deobfName = "EXTENDS") + public TileCableIC2Sealed setupInsulation(Object cableType, int insulation) + { + if (!cableFieldsDone) + getCableFields(); + try + { + if (fieldInsulation != null) + fieldInsulation.set(this, insulation); + if (cableType != null) + { + if (fieldCableType != null) + fieldCableType.set(this, cableType); + } + } catch (Exception ignore) + { + } + + return this; + } + + @Override + public void validate() + { + this.tileEntityInvalid = false; + World world = this.getWorld(); + if (world != null && this.pos != null) + { + try + { + if (!loadStateDone) + getLoadState(); + if (loadState != null) + loadState.set(this, (byte) 1); + Object tickHandler = CompatibilityManager.fieldIC2tickhandler.get(null); + if (!rSWTDone) + getRSWT(tickHandler); + if (requestSingleWorldTick != null) + requestSingleWorldTick.invoke(tickHandler, world, this); + } catch (Exception ignore) + { + } + } + } + + @RuntimeInterface(clazz = "ic2.core.IWorldTickCallback", modID = CompatibilityManager.modidIC2) + public void onTick(World worldIn) + { + if (!this.isInvalid() && world.isBlockLoaded(this.pos) && (world.getBlockState(this.pos)).getBlock() == GCBlocks.sealableBlock && world.getTileEntity(this.pos) == this) + { + if (!onLoadedDone) + getOnLoaded(); + if (onLoaded != null) + { + try + { + onLoaded.invoke(this); + } catch (Exception ignore) + { + } + } + } + } + + private void getOnLoaded() + { + Class ic2Tile = this.getClass().getSuperclass().getSuperclass(); + try + { + onLoaded = ic2Tile.getDeclaredMethod("onLoaded"); + } catch (NoSuchMethodException e) + { + ic2Tile = this.getClass().getSuperclass(); + try + { + onLoaded = ic2Tile.getDeclaredMethod("onLoaded"); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } catch (SecurityException e) + { + e.printStackTrace(); + } + onLoadedDone = true; + } + + private void getLoadState() + { + Class tileIC2 = this.getClass().getSuperclass().getSuperclass(); + try + { + loadState = tileIC2.getDeclaredField("loadState"); + loadState.setAccessible(true); + } catch (NoSuchFieldException e) + { + tileIC2 = this.getClass().getSuperclass(); + try + { + loadState = tileIC2.getDeclaredField("loadState"); + loadState.setAccessible(true); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } catch (SecurityException e) + { + e.printStackTrace(); + } + loadStateDone = true; + } + + private void getRSWT(Object tickHandler) + { + for (Method m : tickHandler.getClass().getMethods()) + { + if (m.getName().equals("requestSingleWorldTick")) + { + requestSingleWorldTick = m; + break; + } + } + rSWTDone = true; + } + + private void getCableFields() + { + Class tileIC2 = this.getClass().getSuperclass(); + try + { + fieldInsulation = tileIC2.getDeclaredField("insulation"); + fieldInsulation.setAccessible(true); + } catch (NoSuchFieldException | SecurityException e) + { + e.printStackTrace(); + } + try + { + fieldCableType = tileIC2.getDeclaredField("cableType"); + fieldCableType.setAccessible(true); + } catch (NoSuchFieldException | SecurityException e) + { + e.printStackTrace(); + } + cableFieldsDone = true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIArrowAttack.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIArrowAttack.java new file mode 100644 index 00000000..6fcd56f5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIArrowAttack.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.util.math.MathHelper; + +public class EntityAIArrowAttack extends EntityAIBase +{ + + private final EntityLiving entityHost; + + private final IRangedAttackMob rangedAttackEntityHost; + private EntityLivingBase attackTarget; + + private int rangedAttackTime; + private double entityMoveSpeed; + private int field_96561_g; + + private int maxRangedAttackTime; + private float field_96562_i; + private float field_82642_h; + + public EntityAIArrowAttack(IRangedAttackMob par1IRangedAttackMob, double par2, int par4, float par5) + { + this(par1IRangedAttackMob, par2, par4, par4, par5); + } + + public EntityAIArrowAttack(IRangedAttackMob par1IRangedAttackMob, double par2, int par4, int par5, float par6) + { + this.rangedAttackTime = -1; + + if (!(par1IRangedAttackMob instanceof EntityLivingBase)) + { + throw new IllegalArgumentException("ArrowAttackGoal requires Mob implements RangedAttackMob"); + } else + { + this.rangedAttackEntityHost = par1IRangedAttackMob; + this.entityHost = (EntityLiving) par1IRangedAttackMob; + this.entityMoveSpeed = par2; + this.field_96561_g = par4; + this.maxRangedAttackTime = par5; + this.field_96562_i = par6; + this.field_82642_h = par6 * par6; + this.setMutexBits(3); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + @Override + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.entityHost.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } else + { + this.attackTarget = entitylivingbase; + return true; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + @Override + public boolean shouldContinueExecuting() + { + return this.shouldExecute() || !this.entityHost.getNavigator().noPath(); + } + + /** + * Resets the task + */ + @Override + public void resetTask() + { + this.attackTarget = null; + this.rangedAttackTime = -1; + } + + /** + * Updates the task + */ + @Override + public void updateTask() + { + double d0 = this.entityHost.getDistanceSq(this.attackTarget.posX, this.attackTarget.getEntityBoundingBox().minY, this.attackTarget.posZ); + boolean flag = this.entityHost.getEntitySenses().canSee(this.attackTarget); + + this.entityHost.getNavigator().tryMoveToEntityLiving(this.attackTarget, this.entityMoveSpeed); + + this.entityHost.getLookHelper().setLookPositionWithEntity(this.attackTarget, 30.0F, 30.0F); + float f; + + if (--this.rangedAttackTime == 0) + { + if (d0 > this.field_82642_h || !flag) + { + return; + } + + f = MathHelper.sqrt(d0) / this.field_96562_i; + float f1 = f; + + if (f < 0.1F) + { + f1 = 0.1F; + } + + if (f1 > 1.0F) + { + f1 = 1.0F; + } + + this.rangedAttackEntityHost.attackEntityWithRangedAttack(this.attackTarget, f1); + this.rangedAttackTime = MathHelper.floor(f * (this.maxRangedAttackTime - this.field_96561_g) + this.field_96561_g); + } else if (this.rangedAttackTime < 0) + { + f = MathHelper.sqrt(d0) / this.field_96562_i; + this.rangedAttackTime = MathHelper.floor(f * (this.maxRangedAttackTime - this.field_96561_g) + this.field_96561_g); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAILookAtTradePlayerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAILookAtTradePlayerGC.java new file mode 100644 index 00000000..da115cc0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAILookAtTradePlayerGC.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; + +public class EntityAILookAtTradePlayerGC extends EntityAIWatchClosest +{ + + private final EntityAlienVillager theMerchant; + + public EntityAILookAtTradePlayerGC(EntityAlienVillager theMerchantIn) + { + super(theMerchantIn, EntityPlayer.class, 8.0F); + this.theMerchant = theMerchantIn; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + @Override + public boolean shouldExecute() + { + if (this.theMerchant.isTrading()) + { + this.closestEntity = this.theMerchant.getCustomer(); + return true; + } else + { + return false; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIThrowPlayer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIThrowPlayer.java new file mode 100644 index 00000000..1736ffc9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIThrowPlayer.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; + +import micdoodle8.mods.galacticraft.core.Constants; + +public class EntityAIThrowPlayer extends EntityAIBase +{ + + EntitySkeletonBoss skeletonBoss; + + EntityPlayer targetPlayer; + + public EntityAIThrowPlayer(EntitySkeletonBoss boss) + { + this.skeletonBoss = boss; + this.setMutexBits(1); + } + + @Override + public boolean shouldExecute() + { + final EntityPlayer player = this.skeletonBoss.world.getClosestPlayerToEntity(this.skeletonBoss, 5.0F); + + if (player == null) + { + return false; + } else + { + this.targetPlayer = player; + return true; + } + } + + @Override + public void startExecuting() + { + this.skeletonBoss.setAttackTarget(this.targetPlayer); + + // if (this.skeletonBoss.getDistanceToEntity(this.targetPlayer) <= 5.0F) + { + double d0 = this.skeletonBoss.posX - this.targetPlayer.posX; + double d1; + + for (d1 = this.skeletonBoss.posZ - this.targetPlayer.posZ; d0 * d0 + d1 * d1 < 1.0E-4D; d1 = (Math.random() - Math.random()) * 0.01D) + { + d0 = (Math.random() - Math.random()) * 0.01D; + } + + this.targetPlayer.attackedAtYaw = (float) Math.atan2(d1, d0) * Constants.RADIANS_TO_DEGREES - this.targetPlayer.rotationYaw; + + this.targetPlayer.knockBack(this.skeletonBoss, 20, d0, d1); + } + + super.startExecuting(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAITradePlayerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAITradePlayerGC.java new file mode 100644 index 00000000..3ebe59b2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAITradePlayerGC.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; + +public class EntityAITradePlayerGC extends EntityAIBase +{ + + private EntityAlienVillager villager; + + public EntityAITradePlayerGC(EntityAlienVillager villagerIn) + { + this.villager = villagerIn; + this.setMutexBits(5); + } + + @Override + public boolean shouldExecute() + { + if (!this.villager.isEntityAlive()) + { + return false; + } else if (this.villager.isInWater()) + { + return false; + } else if (!this.villager.onGround) + { + return false; + } else if (this.villager.velocityChanged) + { + return false; + } else + { + EntityPlayer entityplayer = this.villager.getCustomer(); + return entityplayer == null ? false : (this.villager.getDistanceSq(entityplayer) > 16.0D ? false : entityplayer.openContainer instanceof Container); + } + } + + @Override + public void startExecuting() + { + this.villager.getNavigator().clearPath(); + } + + @Override + public void resetTask() + { + this.villager.setCustomer((EntityPlayer) null); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvanced.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvanced.java new file mode 100644 index 00000000..b92a0645 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvanced.java @@ -0,0 +1,299 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public abstract class EntityAdvanced extends Entity implements IPacketReceiver +{ + + protected long ticks = 0; + private LinkedHashSet fieldCacheClient; + private LinkedHashSet fieldCacheServer; + private Map lastSentData = new HashMap(); + private boolean networkDataChanged = false; + + public EntityAdvanced(World world) + { + super(world); + + if (world != null && world.isRemote) + { + // Empty packet client->server just to kickstart the server into + // sending this client an initial packet + this.fieldCacheServer = new LinkedHashSet(); + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + /** + * Whether or not this entity should be sending packets to/from server + * + * @return If the entity needs network capabilities + */ + public abstract boolean isNetworkedEntity(); + + /** + * Get the amount of ticks between each packet send + * + * @param side The target side. + * @return The amount of ticks to wait before sending another packet to this + * target + */ + public abstract int getPacketCooldown(Side side); + + /** + * Add any additional data to the stream (only effective if there are both + * CLIENT and SERVER targeted regular networked fields ... currently nothing + * in GC uses this) + * + * @param networkedList List of additional data + */ +// public void addExtraNetworkedData(List networkedList) +// { +// +// } + + /** + * Read any additional data from the stream + * + * @param stream The ByteBuf stream to read data from + */ +// public void readExtraNetworkedData(ByteBuf stream) +// { +// +// } + + /** + * Called after a packet is read, only on client side. + * + * @param player The player associated with the received packet + */ + public abstract void onPacketClient(EntityPlayer player); + + /** + * Called after a packet is read, only on server side. + * + * @param player The player associated with the received packet + */ + public abstract void onPacketServer(EntityPlayer player); + + /** + * Packets will be sent to all (client-side) players within this range + * + * @return Maximum distance to send packets to client players + */ + public abstract double getPacketRange(); + + @Override + public void onUpdate() + { + super.onUpdate(); + + this.ticks++; + + if (this.isNetworkedEntity()) + { + if (!this.world.isRemote && this.ticks % this.getPacketCooldown(Side.CLIENT) == 0) + { + if (this.fieldCacheClient == null) + { + try + { + this.initFieldCache(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + PacketDynamic packet = new PacketDynamic(this); + if (networkDataChanged) + { + GalacticraftCore.packetPipeline.sendToAllAround(packet, new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, this.getPacketRange())); + } + } + + if (this.world.isRemote && this.ticks % this.getPacketCooldown(Side.SERVER) == 0) + { + if (this.fieldCacheClient == null) // The target server cache + // may have been initialised + // to an empty set + { + try + { + this.initFieldCache(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + PacketDynamic packet = new PacketDynamic(this); + if (networkDataChanged) + { + GalacticraftCore.packetPipeline.sendToServer(packet); + } + } + } + } + + private void initFieldCache() throws IllegalArgumentException, IllegalAccessException + { + this.fieldCacheClient = new LinkedHashSet(); + this.fieldCacheServer = new LinkedHashSet(); + + for (Field field : this.getClass().getFields()) + { + if (field.isAnnotationPresent(NetworkedField.class)) + { + NetworkedField f = field.getAnnotation(NetworkedField.class); + + if (f.targetSide() == Side.CLIENT) + { + this.fieldCacheClient.add(field); + } else + { + this.fieldCacheServer.add(field); + } + } + } + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + Set fieldList = null; + boolean changed = false; + + if (this.world.isRemote) + { + fieldList = this.fieldCacheServer; + } else + { + fieldList = this.fieldCacheClient; + } + + for (Field f : fieldList) + { + boolean fieldChanged = false; + try + { + Object data = f.get(this); + Object lastData = lastSentData.get(f); + + if (!NetworkUtil.fuzzyEquals(lastData, data)) + { + fieldChanged = true; + } + + sendData.add(data); + + if (fieldChanged) + { + lastSentData.put(f, NetworkUtil.cloneNetworkedObject(data)); + } + } catch (Exception e) + { + e.printStackTrace(); + } + + changed |= fieldChanged; + } + +//Currently unused as there is no entity in Galacticraft with extraNetworkedData + +// if (changed) +// { +// this.addExtraNetworkedData(sendData); +// } +// else +// { +// ArrayList prevSendData = new ArrayList(sendData); +// +// this.addExtraNetworkedData(sendData); +// +// if (!prevSendData.equals(sendData)) +// { +// changed = true; +// } +// } + + networkDataChanged = changed; + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.fieldCacheClient == null || this.fieldCacheServer == null) + { + try + { + this.initFieldCache(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + +// if (this.world.isRemote && this.fieldCacheClient.size() == 0) +// { +// return; +// } +// else if (!this.world.isRemote && this.fieldCacheServer.size() == 0) +// { +// return; +// } + + Set fieldSet = null; + + if (this.world.isRemote) + { + fieldSet = this.fieldCacheClient; + } else + { + fieldSet = this.fieldCacheServer; + } + + for (Field field : fieldSet) + { + try + { + Object obj = NetworkUtil.getFieldValueFromStream(field, buffer, this.world); + field.set(this, obj); + } catch (Exception e) + { + e.printStackTrace(); + } + } + +// this.readExtraNetworkedData(buffer); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvancedMotion.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvancedMotion.java new file mode 100644 index 00000000..82d4aa57 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvancedMotion.java @@ -0,0 +1,422 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketEntityUpdate; +import micdoodle8.mods.galacticraft.core.network.PacketEntityUpdate.IEntityFullSync; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public abstract class EntityAdvancedMotion extends InventoryEntity implements IControllableEntity, IEntityFullSync +{ + + protected long ticks = 0; + + public float currentDamage; + public int timeSinceHit; + public int rockDirection; + + public double advancedPositionX; + public double advancedPositionY; + public double advancedPositionZ; + public double advancedYaw; + public double advancedPitch; + public int posRotIncrements; + + protected boolean lastOnGround; + + public EntityAdvancedMotion(World world) + { + super(world); + this.preventEntitySpawning = true; + this.ignoreFrustumCheck = true; + this.isImmuneToFire = true; + } + + public EntityAdvancedMotion(World world, double var2, double var4, double var6) + { + this(world); + this.setPosition(var2, var4, var6); + } + + @Override + protected void entityInit() + { + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public double getMountedYOffset() + { + return this.height - 1.0D; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + final double offsetx = Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D + 114.8) * -0.5D; + final double offsetz = Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D + 114.8) * -0.5D; + passenger.setPosition(this.posX + offsetx, this.posY + this.getMountedYOffset() + passenger.getYOffset(), this.posZ + offsetz); + } + } + + @Override + public void setPositionRotationAndMotion(double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ, boolean onGround) + { + if (this.world.isRemote) + { + this.advancedPositionX = x; + this.advancedPositionY = y; + this.advancedPositionZ = z; + this.advancedYaw = yaw; + this.advancedPitch = pitch; + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + this.posRotIncrements = 5; + } else + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + if (onGround || this.forceGroundUpdate()) + { + this.onGround = onGround; + } + } + } + + protected boolean forceGroundUpdate() + { + return true; + } + + @Override + public void performHurtAnimation() + { + this.rockDirection = -this.rockDirection; + this.timeSinceHit = 10; + this.currentDamage *= 5; + } + + @Override + public boolean attackEntityFrom(DamageSource var1, float var2) + { + if (this.isDead || var1.equals(DamageSource.CACTUS) || !this.allowDamageSource(var1)) + { + return true; + } else + { + Entity e = var1.getTrueSource(); + if (this.isEntityInvulnerable(var1) || this.posY > 300 || (e instanceof EntityLivingBase && !(e instanceof EntityPlayer))) + { + return false; + } else + { + this.rockDirection = -this.rockDirection; + this.timeSinceHit = 10; + this.currentDamage = this.currentDamage + var2 * 10; + this.markVelocityChanged(); + + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + this.currentDamage = 100; + } + + if (this.currentDamage > 70) + { + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + + return false; + } + + if (!this.world.isRemote) + { + this.dropItems(); + + this.setDead(); + } + } + + return true; + } + } + } + + public abstract List getItemsDropped(); + + public abstract boolean shouldMove(); + + public abstract boolean shouldSpawnParticles(); + + /** + * @return map of the particle vectors. Map key is the position and map + * value is the motion of the particles. Each entry will be spawned + * as a separate particle + */ + public abstract Map getParticleMap(); + + @SideOnly(Side.CLIENT) + public abstract Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ); + + public abstract void tickInAir(); + + public abstract void tickOnGround(); + + public abstract void onGroundHit(); + + public abstract Vector3 getMotionVec(); + + /** + * Can be called in the superclass init method before the subclass fields + * have been initialised! Therefore include null checks!!! + */ + public abstract ArrayList getNetworkedData(); + + /** + * @return ticks between packets being sent to client + */ + public abstract int getPacketTickSpacing(); + + /** + * @return players within this distance will recieve packets from this + * entity + */ + public abstract double getPacketSendDistance(); + + public abstract void readNetworkedData(ByteBuf buffer); + + public abstract boolean allowDamageSource(DamageSource damageSource); + + public void dropItems() + { + if (this.getItemsDropped() == null) + { + return; + } + + for (final ItemStack item : this.getItemsDropped()) + { + if (item != null && !item.isEmpty()) + { + this.entityDropItem(item, 0); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + if (!this.getPassengers().isEmpty()) + { + if (this.getPassengers().contains(FMLClientHandler.instance().getClient().player)) + { + } else + { + this.posRotIncrements = posRotationIncrements + 5; + this.advancedPositionX = x; + this.advancedPositionY = y; + this.advancedPositionZ = z; + this.advancedYaw = yaw; + this.advancedPitch = pitch; + } + } + } + + @Override + public void move(MoverType type, double x, double y, double z) + { + if (this.shouldMove()) + { + super.move(type, x, y, z); + } + } + + public abstract boolean canSetPositionClient(); + + public abstract boolean shouldSendAdvancedMotionPacket(); + + @Override + public void onUpdate() + { + this.ticks++; + + super.onUpdate(); + + if (this.canSetPositionClient() && this.world.isRemote && (this.getPassengers().isEmpty() || !this.getPassengers().contains(FMLClientHandler.instance().getClient().player))) + { + double x; + double y; + double var12; + double z; + if (this.posRotIncrements > 0) + { + x = this.posX + (this.advancedPositionX - this.posX) / this.posRotIncrements; + y = this.posY + (this.advancedPositionY - this.posY) / this.posRotIncrements; + z = this.posZ + (this.advancedPositionZ - this.posZ) / this.posRotIncrements; + var12 = MathHelper.wrapDegrees(this.advancedYaw - this.rotationYaw); + this.rotationYaw = (float) (this.rotationYaw + var12 / this.posRotIncrements); + this.rotationPitch = (float) (this.rotationPitch + (this.advancedPitch - this.rotationPitch) / this.posRotIncrements); + --this.posRotIncrements; + this.setPosition(x, y, z); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else + { +// x = this.posX + this.motionX; +// y = this.posY + this.motionY; +// z = this.posZ + this.motionZ; +// this.setPosition(x, y, z); + } + } + + if (this.timeSinceHit > 0) + { + this.timeSinceHit--; + } + + if (this.currentDamage > 0) + { + this.currentDamage--; + } + + if (this.shouldSpawnParticles() && this.world.isRemote) + { + this.spawnParticles(this.getParticleMap()); + } + + if (this.onGround) + { + this.tickOnGround(); + } else + { + this.tickInAir(); + } + + if (this.world.isRemote) + { + Vector3 mot = this.getMotionVec(); + this.motionX = mot.x; + this.motionY = mot.y; + this.motionZ = mot.z; + } + // Necessary on both server and client to achieve a correct + // this.onGround setting + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + + if (this.onGround && !this.lastOnGround) + { + this.onGroundHit(); + } + + if (shouldSendAdvancedMotionPacket()) + { + if (this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketEntityUpdate(this)); + } + + if (!this.world.isRemote && this.ticks % 5 == 0) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketEntityUpdate(this), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 50.0D)); + } + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.lastOnGround = this.onGround; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + sendData.addAll(this.getNetworkedData()); + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.readNetworkedData(buffer); + } + + @SideOnly(Side.CLIENT) + public void spawnParticles(Map points) + { + for (final Entry vec : points.entrySet()) + { + final Vector3 posVec = vec.getKey(); + final Vector3 motionVec = vec.getValue(); + + this.spawnParticle(this.getParticle(this.rand, posVec.x, posVec.y, posVec.z, motionVec.x, motionVec.y, motionVec.z)); + } + } + + @SideOnly(Side.CLIENT) + public void spawnParticle(Particle fx) + { + final Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + if (fx != null) + { + mc.effectRenderer.addEffect(fx); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAlienVillager.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAlienVillager.java new file mode 100644 index 00000000..422f6163 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAlienVillager.java @@ -0,0 +1,858 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.Random; +import java.util.UUID; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.INpc; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAIMoveIndoors; +import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; +import net.minecraft.entity.ai.EntityAIOpenDoor; +import net.minecraft.entity.ai.EntityAIRestrictOpenDoor; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityAIWatchClosest2; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.monster.IMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.potion.PotionEffect; +import net.minecraft.stats.StatList; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.Tuple; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.village.MerchantRecipe; +import net.minecraft.village.MerchantRecipeList; +import net.minecraft.village.Village; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ItemBasic; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; + +public class EntityAlienVillager extends EntityAgeable implements IMerchant, INpc, IEntityBreathable +{ + + private int randomTickDivider; + private boolean isMating; + private boolean isPlaying; + private Village villageObj; + private EntityPlayer buyingPlayer; + private MerchantRecipeList buyingList; + private int timeUntilReset; + private boolean needsInitilization; + private int wealth; + private UUID lastBuyingPlayerUuid; + private boolean isLookingForHome; + private InventoryBasic villagerInventory; + private static final EntityAlienVillager.ITradeList[] DEFAULT_TRADE_LIST_MAP = new EntityAlienVillager.ITradeList[] + {new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.oxMask, 1, 0), new EntityAlienVillager.PriceInfo(1, 2)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.oxTankLight, 1, 235), new EntityAlienVillager.PriceInfo(3, 4)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.oxygenGear, 1, 0), new EntityAlienVillager.PriceInfo(3, 4)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.fuelCanister, 1, 317), new EntityAlienVillager.PriceInfo(3, 4)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.parachute, 1, 0), new EntityAlienVillager.PriceInfo(1, 2)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.battery, 1, 58), new EntityAlienVillager.PriceInfo(2, 4)), + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), new EntityAlienVillager.PriceInfo(1, 1), + new ItemStack(GCItems.foodItem, 1, 1)), // carrots + // = + // also + // yields + // a + // tin! + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.basicItem, 1, ItemBasic.WAFER_BASIC), new EntityAlienVillager.PriceInfo(3, 4)), + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.schematic, 1, 0), new EntityAlienVillager.PriceInfo(3, 5), new ItemStack(GCItems.schematic, 1, 1)), // Exchange + // buggy + // and + // rocket + // schematics + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.schematic, 1, 1), new EntityAlienVillager.PriceInfo(3, 5), new ItemStack(GCItems.schematic, 1, 0)), // Exchange + // buggy + // and + // rocket + // schematics + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.basicItem, 2, 3), new EntityAlienVillager.PriceInfo(1, 1), new ItemStack(GCItems.basicItem, 1, 6)), // Compressed + // Tin + // - + // needed + // to + // craft + // a + // Fuel + // Loader + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.basicItem, 2, 4), new EntityAlienVillager.PriceInfo(1, 1), new ItemStack(GCItems.basicItem, 1, 7)), // Compressed + // Copper + // - + // needed + // to + // craft + // a + // Fuel + // Loader + new EntityAlienVillager.EmeraldForItems(new ItemStack(Blocks.SAPLING, 1, 3), new EntityAlienVillager.PriceInfo(11, 39)) // The + // one + // thing + // Alien + // Villagers + // don't + // have + // and + // can't + // get + // is + // jungle + // trees... + }; + + public EntityAlienVillager(World worldIn) + { + super(worldIn); + this.villagerInventory = new InventoryBasic("Items", false, 8); + this.setSize(0.6F, 1.8F); + ((PathNavigateGround) this.getNavigator()).setBreakDoors(true); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIAvoidEntity<>(this, EntityZombie.class, 8.0F, 0.6D, 0.6D)); + this.tasks.addTask(1, new EntityAITradePlayerGC(this)); + this.tasks.addTask(1, new EntityAILookAtTradePlayerGC(this)); + this.tasks.addTask(2, new EntityAIMoveIndoors(this)); + this.tasks.addTask(3, new EntityAIRestrictOpenDoor(this)); + this.tasks.addTask(4, new EntityAIOpenDoor(this, true)); + this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 0.6D)); + this.tasks.addTask(9, new EntityAIWatchClosest2(this, EntityPlayer.class, 3.0F, 1.0F)); + this.tasks.addTask(9, new EntityAIWander(this, 0.6D)); + this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityLiving.class, 8.0F)); + this.setCanPickUpLoot(true); + } + + @Override + protected void onGrowingAdult() + { + super.onGrowingAdult(); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D); + } + + @Override + protected void updateAITasks() + { + if (--this.randomTickDivider <= 0) + { + BlockPos blockpos = new BlockPos(this); + this.world.getVillageCollection().addToVillagerPositionList(blockpos); + this.randomTickDivider = 70 + this.rand.nextInt(50); + this.villageObj = this.world.getVillageCollection().getNearestVillage(blockpos, 32); + + if (this.villageObj == null) + { + this.detachHome(); + } else + { + BlockPos blockpos1 = this.villageObj.getCenter(); + this.setHomePosAndDistance(blockpos1, (int) ((float) this.villageObj.getVillageRadius() * 1.0F)); + + if (this.isLookingForHome) + { + this.isLookingForHome = false; + this.villageObj.setDefaultPlayerReputation(5); + } + } + } + + if (!this.isTrading() && this.timeUntilReset > 0) + { + --this.timeUntilReset; + + if (this.timeUntilReset <= 0) + { + if (this.needsInitilization) + { + for (MerchantRecipe merchantrecipe : this.buyingList) + { + if (merchantrecipe.isRecipeDisabled()) + { + merchantrecipe.increaseMaxTradeUses(this.rand.nextInt(6) + this.rand.nextInt(6) + 2); + } + } + + this.populateBuyingList(); + this.needsInitilization = false; + + if (this.villageObj != null && this.lastBuyingPlayerUuid != null) + { + this.world.setEntityState(this, (byte) 14); + this.villageObj.modifyPlayerReputation(this.lastBuyingPlayerUuid, 1); + } + } + + this.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 200, 0)); + } + } + + super.updateAITasks(); + } + + @Override + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.inventory.getCurrentItem(); + boolean flag = itemstack != null && itemstack.getItem() == Items.SPAWN_EGG; + + if (!flag && this.isEntityAlive() && !this.isTrading() && !this.isChild() && !player.isSneaking()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (!this.world.isRemote && (this.buyingList == null || this.buyingList.size() > 0)) + { + if (gearData != null && gearData.getFrequencyModule() != GCPlayerHandler.GEAR_NOT_PRESENT) + { + this.setCustomer(player); + player.displayVillagerTradeGui(this); + } else + { + if (player instanceof EntityPlayerMP) + { + EntityPlayerMP playerMP = (EntityPlayerMP) player; + GCPlayerStats stats = GCPlayerStats.get(playerMP); + if (stats.getChatCooldown() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.village.warning.no_freq_mod"))); + stats.setChatCooldown(20); + } + } + } + } + + player.addStat(StatList.TALKED_TO_VILLAGER); + return true; + } else + { + return super.processInteract(player, hand); + } + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + super.writeEntityToNBT(tagCompound); + tagCompound.setInteger("Riches", this.wealth); + + if (this.buyingList != null) + { + tagCompound.setTag("Offers", this.buyingList.getRecipiesAsTags()); + } + + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < this.villagerInventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.villagerInventory.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + nbttaglist.appendTag(itemstack.writeToNBT(new NBTTagCompound())); + } + } + + tagCompound.setTag("Inventory", nbttaglist); + } + + @Override + public void readEntityFromNBT(NBTTagCompound tagCompund) + { + super.readEntityFromNBT(tagCompund); + this.wealth = tagCompund.getInteger("Riches"); + + if (tagCompund.hasKey("Offers", 10)) + { + NBTTagCompound nbttagcompound = tagCompund.getCompoundTag("Offers"); + this.buyingList = new MerchantRecipeList(nbttagcompound); + } + + NBTTagList nbttaglist = tagCompund.getTagList("Inventory", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + ItemStack itemstack = new ItemStack(nbttaglist.getCompoundTagAt(i)); + + if (!itemstack.isEmpty()) + { + this.villagerInventory.addItem(itemstack); + } + } + + this.setCanPickUpLoot(true); + } + + @Override + protected boolean canDespawn() + { + return false; + } + + @Override + protected float getSoundPitch() + { + return (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 0.5F; + } + + @Override + protected SoundEvent getAmbientSound() + { + return this.isTrading() ? SoundEvents.ENTITY_VILLAGER_TRADING : SoundEvents.ENTITY_VILLAGER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_VILLAGER_HURT; + } + + @Override + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_VILLAGER_DEATH; + } + + public boolean isMating() + { + return this.isMating; + } + + public void setMating(boolean mating) + { + this.isMating = mating; + } + + public void setPlaying(boolean playing) + { + this.isPlaying = playing; + } + + public boolean isPlaying() + { + return this.isPlaying; + } + + @Override + public void setRevengeTarget(EntityLivingBase livingBase) + { + super.setRevengeTarget(livingBase); + + if (this.villageObj != null && livingBase != null) + { + this.villageObj.addOrRenewAgressor(livingBase); + + if (livingBase instanceof EntityPlayer) + { + int i = -1; + + if (this.isChild()) + { + i = -3; + } + + this.villageObj.modifyPlayerReputation(livingBase.getUniqueID(), i); + + if (this.isEntityAlive()) + { + this.world.setEntityState(this, (byte) 13); + } + } + } + } + + @Override + public void onDeath(DamageSource cause) + { + if (this.villageObj != null) + { + Entity entity = cause.getTrueSource(); + + if (entity != null) + { + if (entity instanceof EntityPlayer) + { + this.villageObj.modifyPlayerReputation(entity.getUniqueID(), -2); + } else if (entity instanceof IMob) + { + this.villageObj.endMatingSeason(); + } + } else + { + EntityPlayer entityplayer = this.world.getClosestPlayerToEntity(this, 16.0D); + + if (entityplayer != null) + { + this.villageObj.endMatingSeason(); + } + } + } + + super.onDeath(cause); + } + + @Override + public void setCustomer(EntityPlayer p_70932_1_) + { + this.buyingPlayer = p_70932_1_; + } + + @Override + public EntityPlayer getCustomer() + { + return this.buyingPlayer; + } + + public boolean isTrading() + { + return this.buyingPlayer != null; + } + + @Override + public void useRecipe(MerchantRecipe recipe) + { + recipe.incrementToolUses(); + this.livingSoundTime = -this.getTalkInterval(); + this.playSound(SoundEvents.ENTITY_VILLAGER_YES, this.getSoundVolume(), this.getSoundPitch()); + int i = 3 + this.rand.nextInt(4); + + if (recipe.getToolUses() == 1 || this.rand.nextInt(5) == 0) + { + this.timeUntilReset = 40; + this.needsInitilization = true; + + if (this.buyingPlayer != null) + { + this.lastBuyingPlayerUuid = this.buyingPlayer.getUniqueID(); + } else + { + this.lastBuyingPlayerUuid = null; + } + + i += 5; + } + + if (recipe.getItemToBuy().getItem() == Items.EMERALD) + { + this.wealth += recipe.getItemToBuy().getCount(); + } + + if (recipe.getRewardsExp()) + { + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY + 0.5D, this.posZ, i)); + } + } + + @Override + public void verifySellingItem(ItemStack stack) + { + if (!this.world.isRemote && this.livingSoundTime > -this.getTalkInterval() + 20) + { + this.livingSoundTime = -this.getTalkInterval(); + + if (!stack.isEmpty()) + { + this.playSound(SoundEvents.ENTITY_VILLAGER_YES, this.getSoundVolume(), this.getSoundPitch()); + } else + { + this.playSound(SoundEvents.ENTITY_VILLAGER_NO, this.getSoundVolume(), this.getSoundPitch()); + } + } + } + + @Override + public MerchantRecipeList getRecipes(EntityPlayer p_70934_1_) + { + if (this.buyingList == null) + { + this.populateBuyingList(); + } + + return this.buyingList; + } + + private void populateBuyingList() + { + if (this.buyingList == null) + { + this.buyingList = new MerchantRecipeList(); + } + + for (EntityAlienVillager.ITradeList tradeList : DEFAULT_TRADE_LIST_MAP) + { + tradeList.modifyMerchantRecipeList(this.buyingList, this.rand); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void setRecipes(MerchantRecipeList recipeList) + { + } + + @Override + public float getEyeHeight() + { + float f = 1.62F; + + if (this.isChild()) + { + f = (float) ((double) f - 0.81D); + } + + return f; + } + + @Override + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 12) + { + this.spawnParticles(EnumParticleTypes.HEART); + } else if (id == 13) + { + this.spawnParticles(EnumParticleTypes.VILLAGER_ANGRY); + } else if (id == 14) + { + this.spawnParticles(EnumParticleTypes.VILLAGER_HAPPY); + } else + { + super.handleStatusUpdate(id); + } + } + + @SideOnly(Side.CLIENT) + private void spawnParticles(EnumParticleTypes particleType) + { + for (int i = 0; i < 5; ++i) + { + double d0 = this.rand.nextGaussian() * 0.02D; + double d1 = this.rand.nextGaussian() * 0.02D; + double d2 = this.rand.nextGaussian() * 0.02D; + this.world.spawnParticle(particleType, this.posX + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, + this.posY + 1.0D + (double) (this.rand.nextFloat() * this.height), this.posZ + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, d0, d1, d2, new int[0]); + } + } + + @Override + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + return livingdata; + } + + @Override + public EntityAlienVillager createChild(EntityAgeable ageable) + { + EntityAlienVillager entityvillager = new EntityAlienVillager(this.world); + entityvillager.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(entityvillager)), (IEntityLivingData) null); + return entityvillager; + } + + @Override + public World getWorld() + { + return this.world; + } + + @Override + public BlockPos getPos() + { + return new BlockPos(this); + } + + @Override + public boolean canBeLeashedTo(EntityPlayer player) + { + return false; + } + + @Override + public void onStruckByLightning(EntityLightningBolt lightningBolt) + { + if (!this.world.isRemote && !this.isDead) + { + EntityWitch entitywitch = new EntityEvolvedWitch(this.world); + entitywitch.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + entitywitch.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(entitywitch)), (IEntityLivingData) null); + entitywitch.setNoAI(this.isAIDisabled()); + + if (this.hasCustomName()) + { + entitywitch.setCustomNameTag(this.getCustomNameTag()); + entitywitch.setAlwaysRenderNameTag(this.getAlwaysRenderNameTag()); + } + + this.world.spawnEntity(entitywitch); + this.setDead(); + } + } + + public InventoryBasic getVillagerInventory() + { + return this.villagerInventory; + } + + @Override + protected void updateEquipmentIfNeeded(EntityItem itemEntity) + { + ItemStack itemstack = itemEntity.getItem(); + Item item = itemstack.getItem(); + + if (this.canVillagerPickupItem(item)) + { + ItemStack itemstack1 = this.villagerInventory.addItem(itemstack); + + if (itemstack1.isEmpty()) + { + itemEntity.setDead(); + } else + { + itemstack.setCount(itemstack1.getCount()); + } + } + } + + private boolean canVillagerPickupItem(Item itemIn) + { + return itemIn == Items.BREAD || itemIn == Items.POTATO || itemIn == Items.CARROT || itemIn == Items.WHEAT || itemIn == Items.WHEAT_SEEDS; + } + + public boolean func_175553_cp() + { + return this.hasEnoughItems(1); + } + + public boolean canAbondonItems() + { + return this.hasEnoughItems(2); + } + + public boolean func_175557_cr() + { + return !this.hasEnoughItems(5); + } + + private boolean hasEnoughItems(int multiplier) + { + for (int i = 0; i < this.villagerInventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.villagerInventory.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + if (itemstack.getItem() == Items.BREAD && itemstack.getCount() >= 3 * multiplier || itemstack.getItem() == Items.POTATO && itemstack.getCount() >= 12 * multiplier + || itemstack.getItem() == Items.CARROT && itemstack.getCount() >= 12 * multiplier) + { + return true; + } + + if (itemstack.getItem() == Items.WHEAT && itemstack.getCount() >= 9 * multiplier) + { + return true; + } + } + } + + return false; + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) + { + if (super.replaceItemInInventory(inventorySlot, itemStackIn)) + { + return true; + } else + { + int i = inventorySlot - 300; + + if (i >= 0 && i < this.villagerInventory.getSizeInventory()) + { + this.villagerInventory.setInventorySlotContents(i, itemStackIn); + return true; + } else + { + return false; + } + } + } + + public static class EmeraldForItems implements EntityAlienVillager.ITradeList + { + + public ItemStack sellItem; + public EntityAlienVillager.PriceInfo price; + + public EmeraldForItems(ItemStack itemStack, EntityAlienVillager.PriceInfo priceIn) + { + this.sellItem = itemStack; + this.price = priceIn; + } + + @Override + public void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random) + { + int i = 1; + + if (this.price != null) + { + i = this.price.getPrice(random); + } + + ItemStack tradeStack = this.sellItem.copy(); + tradeStack.setCount(i); + + recipeList.add(new MerchantRecipe(tradeStack, new ItemStack(GCItems.itemBasicMoon, 1, 2))); + } + } + + public interface ITradeList + { + + void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random); + } + + public static class ItemAndEmeraldToItem implements EntityAlienVillager.ITradeList + { + + public ItemStack buyingItemStack; + public EntityAlienVillager.PriceInfo buyingPriceInfo; + public ItemStack sellingItemstack; + + public ItemAndEmeraldToItem(Item p_i45813_1_, EntityAlienVillager.PriceInfo p_i45813_2_, Item p_i45813_3_) + { + this.buyingItemStack = new ItemStack(p_i45813_1_); + this.buyingPriceInfo = p_i45813_2_; + this.sellingItemstack = new ItemStack(p_i45813_3_); + } + + public ItemAndEmeraldToItem(ItemStack p_i45813_1_, EntityAlienVillager.PriceInfo p_i45813_2_, ItemStack p_i45813_3_) + { + this.buyingItemStack = p_i45813_1_; + this.buyingPriceInfo = p_i45813_2_; + this.sellingItemstack = p_i45813_3_; + } + + @Override + public void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random) + { + int i = 1; + + if (this.buyingPriceInfo != null) + { + i = this.buyingPriceInfo.getPrice(random); + } + + recipeList.add(new MerchantRecipe(this.buyingItemStack.copy(), new ItemStack(GCItems.itemBasicMoon, i, 2), this.sellingItemstack.copy())); + } + } + + public static class ListItemForEmeralds implements EntityAlienVillager.ITradeList + { + + public ItemStack itemToBuy; + public EntityAlienVillager.PriceInfo priceInfo; + + public ListItemForEmeralds(ItemStack stack, EntityAlienVillager.PriceInfo priceInfo) + { + this.itemToBuy = stack; + this.priceInfo = priceInfo; + } + + @Override + public void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random) + { + int i = 1; + + if (this.priceInfo != null) + { + i = this.priceInfo.getPrice(random); + } + + ItemStack itemstack; + ItemStack itemstack1; + + if (i < 0) + { + itemstack = new ItemStack(GCItems.itemBasicMoon, 1, 2); + itemstack1 = new ItemStack(this.itemToBuy.getItem(), -i, this.itemToBuy.getMetadata()); + } else + { + itemstack = new ItemStack(GCItems.itemBasicMoon, i, 2); + itemstack1 = new ItemStack(this.itemToBuy.getItem(), 1, this.itemToBuy.getMetadata()); + } + + recipeList.add(new MerchantRecipe(itemstack, itemstack1)); + } + } + + public static class PriceInfo extends Tuple + { + + public PriceInfo(int p_i45810_1_, int p_i45810_2_) + { + super(Integer.valueOf(p_i45810_1_), Integer.valueOf(p_i45810_2_)); + } + + public int getPrice(Random rand) + { + return ((Integer) this.getFirst()).intValue() >= ((Integer) this.getSecond()).intValue() ? ((Integer) this.getFirst()).intValue() + : ((Integer) this.getFirst()).intValue() + rand.nextInt(((Integer) this.getSecond()).intValue() - ((Integer) this.getFirst()).intValue() + 1); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBossBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBossBase.java new file mode 100644 index 00000000..3ffa51d4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBossBase.java @@ -0,0 +1,247 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.BossInfo; +import net.minecraft.world.BossInfoServer; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class EntityBossBase extends EntityMob implements IBoss +{ + + protected TileEntityDungeonSpawner spawner; + public int deathTicks = 0; + + public int entitiesWithin; + public int entitiesWithinLast; + + private final BossInfoServer bossInfo = (BossInfoServer) (new BossInfoServer(this.getDisplayName(), getHealthBarColor(), BossInfo.Overlay.PROGRESS)); + + public EntityBossBase(World world) + { + super(world); + } + + public abstract int getChestTier(); + + public abstract ItemStack getGuaranteedLoot(Random rand); + + public abstract void dropKey(); + + public abstract BossInfo.Color getHealthBarColor(); + + @Override + protected void updateAITasks() + { + this.bossInfo.setPercent(this.getHealth() / this.getMaxHealth()); + super.updateAITasks(); + } + + @Override + protected void onDeathUpdate() + { + ++this.deathTicks; + + if (this.deathTicks >= 180 && this.deathTicks <= 200) + { + final float x = (this.rand.nextFloat() - 0.5F) * this.width; + final float y = (this.rand.nextFloat() - 0.5F) * (this.height / 2.0F); + final float z = (this.rand.nextFloat() - 0.5F) * this.width; + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_HUGE, this.posX + x, this.posY + 2.0D + y, this.posZ + z, 0.0D, 0.0D, 0.0D); + } + + int i; + int j; + + if (!this.world.isRemote) + { + if (this.deathTicks >= 180 && this.deathTicks % 5 == 0) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(PacketSimple.EnumSimplePacket.C_PLAY_SOUND_EXPLODE, GCCoreUtil.getDimensionID(this.world), new Object[] + {}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + } + + if (this.deathTicks > 150 && this.deathTicks % 5 == 0) + { + i = 30; + + while (i > 0) + { + j = EntityXPOrb.getXPSplit(i); + i -= j; + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY, this.posZ, j)); + } + } + } + + if (this.deathTicks == 200 && !this.world.isRemote) + { + i = 20; + + while (i > 0) + { + j = EntityXPOrb.getXPSplit(i); + i -= j; + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY, this.posZ, j)); + } + + TileEntityTreasureChest chest = null; + + if (this.spawner != null && this.spawner.getChestPos() != null) + { + TileEntity chestTest = this.world.getTileEntity(this.spawner.getChestPos()); + + if (chestTest != null && chestTest instanceof TileEntityTreasureChest) + { + chest = (TileEntityTreasureChest) chestTest; + } + } + + if (chest == null) + { + // Fallback to finding closest chest + chest = TileEntityTreasureChest.findClosest(this, this.getChestTier()); + } + + if (chest != null) + { + double dist = this.getDistanceSq(chest.getPos().getX() + 0.5, chest.getPos().getY() + 0.5, chest.getPos().getZ() + 0.5); + if (dist < 1000 * 1000) + { + if (!chest.locked) + { + chest.locked = true; + } + + for (int k = 0; k < chest.getSizeInventory(); k++) + { + chest.setInventorySlotContents(k, ItemStack.EMPTY); + } + + chest.fillWithLoot(null); + +// ChestGenHooks info = ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST); +// +// // Generate twice, since it's an extra special chest +// WeightedRandomChestContent.generateChestContents(this.rand, info.getItems(this.rand), chest, info.getCount(this.rand)); +// WeightedRandomChestContent.generateChestContents(this.rand, info.getItems(this.rand), chest, info.getCount(this.rand)); + + ItemStack schematic = this.getGuaranteedLoot(this.rand); + int slot = this.rand.nextInt(chest.getSizeInventory()); + chest.setInventorySlotContents(slot, schematic); + } + } + + this.dropKey(); + + super.setDead(); + + if (this.spawner != null) + { + // Note: spawner.isBossDefeated is true, so it's properly dead + this.spawner.isBossDefeated = true; + this.spawner.boss = null; + this.spawner.spawned = false; + + if (!this.world.isRemote) + { + this.spawner.lastKillTime = MinecraftServer.getCurrentTimeMillis(); + } + } + } + } + + @Override + public void onLivingUpdate() + { + if (this.world.isRemote) + { + this.setHealth(this.getHealth()); + } + + if (this.spawner != null) + { + List playersWithin = this.world.getEntitiesWithinAABB(EntityPlayer.class, this.spawner.getRangeBounds()); + + this.entitiesWithin = playersWithin.size(); + + if (this.entitiesWithin == 0 && this.entitiesWithinLast != 0) + { + List entitiesWithin2 = this.world.getEntitiesWithinAABB(EntityPlayer.class, this.spawner.getRangeBoundsPlus11()); + + for (EntityPlayer p : entitiesWithin2) + { + p.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.skeleton_boss.message"))); + } + + this.setDead(); + // Note: spawner.isBossDefeated is false, so the boss will + // respawn if any player comes back inside the room + + return; + } + + this.entitiesWithinLast = this.entitiesWithin; + } + + super.onLivingUpdate(); + } + + @Override + public void setDead() + { + if (this.spawner != null) + { + this.spawner.isBossDefeated = false; + this.spawner.boss = null; + this.spawner.spawned = false; + } + + super.setDead(); + } + + @Override + public void onBossSpawned(TileEntityDungeonSpawner spawner) + { + this.spawner = spawner; + } + + @Override + public void addTrackingPlayer(EntityPlayerMP player) + { + super.addTrackingPlayer(player); + this.bossInfo.addPlayer(player); + } + + @Override + public void removeTrackingPlayer(EntityPlayerMP player) + { + super.removeTrackingPlayer(player); + this.bossInfo.removePlayer(player); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBuggy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBuggy.java new file mode 100644 index 00000000..b371af38 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBuggy.java @@ -0,0 +1,861 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.network.PacketEntityUpdate; +import micdoodle8.mods.galacticraft.core.network.PacketEntityUpdate.IEntityFullSync; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFueler; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class EntityBuggy extends Entity implements IInventory, IPacketReceiver, IDockable, IControllableEntity, IEntityFullSync +{ + + private static final DataParameter CURRENT_DAMAGE = EntityDataManager.createKey(EntityBuggy.class, DataSerializers.VARINT); + private static final DataParameter TIME_SINCE_HIT = EntityDataManager.createKey(EntityBuggy.class, DataSerializers.VARINT); + private static final DataParameter ROCK_DIRECTION = EntityDataManager.createKey(EntityBuggy.class, DataSerializers.VARINT); + public static final int tankCapacity = 1000; + public FluidTank buggyFuelTank = new FluidTank(EntityBuggy.tankCapacity); + protected long ticks = 0; + public int buggyType; + public int currentDamage; + public int timeSinceHit; + public int rockDirection; + public double speed; + public float wheelRotationZ; + public float wheelRotationX; + float maxSpeed = 0.5F; + float accel = 0.2F; + float turnFactor = 3.0F; + public String texture; + private NonNullList stacks = NonNullList.withSize(60, ItemStack.EMPTY); + public double boatX; + public double boatY; + public double boatZ; + public double boatYaw; + public double boatPitch; + public int boatPosRotationIncrements; + private IFuelDock landingPad; + private int timeClimbing; + private boolean shouldClimb; + + public EntityBuggy(World var1) + { + super(var1); + this.setSize(1.4F, 0.6F); + this.speed = 0.0D; + this.preventEntitySpawning = true; + this.dataManager.register(CURRENT_DAMAGE, 0); + this.dataManager.register(TIME_SINCE_HIT, 0); + this.dataManager.register(ROCK_DIRECTION, 1); + this.ignoreFrustumCheck = true; + this.isImmuneToFire = true; + + if (var1 != null && var1.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + public EntityBuggy(World var1, double var2, double var4, double var6, int type) + { + this(var1); + this.setPosition(var2, var4, var6); + this.setBuggyType(type); + this.stacks = NonNullList.withSize(this.buggyType * 18, ItemStack.EMPTY); + } + + public int getScaledFuelLevel(int i) + { + final double fuelLevel = this.buggyFuelTank.getFluid() == null ? 0 : this.buggyFuelTank.getFluid().amount; + + return (int) (fuelLevel * i / EntityBuggy.tankCapacity); + } + + public ModelBase getModel() + { + return null; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(GCItems.buggy, 1, this.buggyType); + } + + public int getType() + { + return this.buggyType; + } + + @Override + protected void entityInit() + { + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public double getMountedYOffset() + { + return this.height - 3.0D; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + public void setBuggyType(int par1) + { + this.buggyType = par1; + } + + @Override + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + final double offsetX = Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D + 114.8) * -0.5D; + final double offsetZ = Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D + 114.8) * -0.5D; + passenger.setPosition(this.posX + offsetX, this.posY + 0.4F + passenger.getYOffset(), this.posZ + offsetZ); + } + } + + @Override + public void setPositionRotationAndMotion(double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ, boolean onGround) + { + if (this.world.isRemote) + { + this.boatX = x; + this.boatY = y; + this.boatZ = z; + this.boatYaw = yaw; + this.boatPitch = pitch; + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + this.boatPosRotationIncrements = 5; + } else + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + } + } + + @Override + public void performHurtAnimation() + { + this.dataManager.set(ROCK_DIRECTION, -this.dataManager.get(ROCK_DIRECTION)); + this.dataManager.set(TIME_SINCE_HIT, 10); + this.dataManager.set(CURRENT_DAMAGE, this.dataManager.get(CURRENT_DAMAGE) * 5); + } + + @Override + public boolean attackEntityFrom(DamageSource var1, float var2) + { + if (this.isDead || var1.equals(DamageSource.CACTUS)) + { + return true; + } else + { + Entity e = var1.getTrueSource(); + boolean flag = e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode; + + if (this.isEntityInvulnerable(var1) || (e instanceof EntityLivingBase && !(e instanceof EntityPlayer))) + { + return false; + } else + { + this.dataManager.set(ROCK_DIRECTION, -this.dataManager.get(ROCK_DIRECTION)); + this.dataManager.set(TIME_SINCE_HIT, 10); + this.dataManager.set(CURRENT_DAMAGE, (int) (this.dataManager.get(CURRENT_DAMAGE) + var2 * 10)); + this.markVelocityChanged(); + + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + this.dataManager.set(CURRENT_DAMAGE, 100); + } + + if (flag || this.dataManager.get(CURRENT_DAMAGE) > 2) + { + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + if (flag) + { + this.setDead(); + } else + { + this.setDead(); + if (!this.world.isRemote) + { + this.dropBuggyAsItem(); + } + } + this.setDead(); + } + + return true; + } + } + } + + public void dropBuggyAsItem() + { + List dropped = this.getItemsDropped(); + + if (dropped == null) + { + return; + } + + for (final ItemStack item : dropped) + { + EntityItem entityItem = this.entityDropItem(item, 0); + + if (item.hasTagCompound()) + { + entityItem.getItem().setTagCompound(item.getTagCompound().copy()); + } + } + } + + public List getItemsDropped() + { + final List items = new ArrayList(); + + ItemStack buggy = new ItemStack(GCItems.buggy, 1, this.buggyType); + buggy.setTagCompound(new NBTTagCompound()); + buggy.getTagCompound().setInteger("BuggyFuel", this.buggyFuelTank.getFluidAmount()); + items.add(buggy); + + for (ItemStack item : this.stacks) + { + if (!item.isEmpty()) + { + items.add(item); + } + } + + return items; + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + if (!this.getPassengers().isEmpty()) + { + if (!this.getPassengers().contains(FMLClientHandler.instance().getClient().player)) + { + this.boatPosRotationIncrements = posRotationIncrements + 5; + this.boatX = x; + this.boatY = y; + this.boatZ = z; + this.boatYaw = yaw; + this.boatPitch = pitch; + } + } + } + + @Override + public void onUpdate() + { + this.ticks++; + + super.onUpdate(); + + if (this.world.isRemote) + { + this.wheelRotationX += Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ) * 150.0F * (this.speed < 0 ? 1 : -1); + this.wheelRotationX %= 360; + this.wheelRotationZ = Math.max(-30.0F, Math.min(30.0F, this.wheelRotationZ * 0.9F)); + } + + if (this.world.isRemote && !FMLClientHandler.instance().getClient().player.equals(this.world.getClosestPlayerToEntity(this, -1))) + { + double x; + double y; + double var12; + double z; + if (this.boatPosRotationIncrements > 0) + { + x = this.posX + (this.boatX - this.posX) / this.boatPosRotationIncrements; + y = this.posY + (this.boatY - this.posY) / this.boatPosRotationIncrements; + z = this.posZ + (this.boatZ - this.posZ) / this.boatPosRotationIncrements; + var12 = MathHelper.wrapDegrees(this.boatYaw - this.rotationYaw); + this.rotationYaw = (float) (this.rotationYaw + var12 / this.boatPosRotationIncrements); + this.rotationPitch = (float) (this.rotationPitch + (this.boatPitch - this.rotationPitch) / this.boatPosRotationIncrements); + --this.boatPosRotationIncrements; + this.setPosition(x, y, z); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else + { + x = this.posX + this.motionX; + y = this.posY + this.motionY; + z = this.posZ + this.motionZ; + if (!this.getPassengers().isEmpty()) + { + this.setPosition(x, y, z); + } + + if (this.onGround) + { + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + + this.motionX *= 0.9900000095367432D; + this.motionY *= 0.949999988079071D; + this.motionZ *= 0.9900000095367432D; + } + return; + } + + if (this.dataManager.get(TIME_SINCE_HIT) > 0) + { + this.dataManager.set(TIME_SINCE_HIT, this.dataManager.get(TIME_SINCE_HIT) - 1); + } + + if (this.dataManager.get(CURRENT_DAMAGE) > 0) + { + this.dataManager.set(CURRENT_DAMAGE, this.dataManager.get(CURRENT_DAMAGE) - 1); + } + + if (!this.onGround) + { + this.motionY -= TransformerHooks.getGravityForEntity(this) * 0.5D; + } + + if (this.inWater && this.speed > 0.2D) + { + this.world.playSound(null, (float) this.posX, (float) this.posY, (float) this.posZ, SoundEvents.ENTITY_GENERIC_BURN, SoundCategory.NEUTRAL, 0.5F, + 2.6F + (this.world.rand.nextFloat() - this.world.rand.nextFloat()) * 0.8F); + } + + this.speed *= 0.98D; + + if (this.speed > this.maxSpeed) + { + this.speed = this.maxSpeed; + } + + if (this.collidedHorizontally && this.shouldClimb) + { + this.speed *= 0.9; + this.motionY = 0.15D * ((-Math.pow((this.timeClimbing) - 1, 2)) / 250.0F) + 0.15F; + this.motionY = Math.max(-0.15, this.motionY); + this.shouldClimb = false; + } + + if ((this.motionX == 0 || this.motionZ == 0) && !this.onGround) + { + this.timeClimbing++; + } else + { + this.timeClimbing = 0; + } + + if (this.world.isRemote && this.buggyFuelTank.getFluid() != null && this.buggyFuelTank.getFluid().amount > 0) + { + this.motionX = -(this.speed * Math.cos((this.rotationYaw - 90F) / Constants.RADIANS_TO_DEGREES_D)); + this.motionZ = -(this.speed * Math.sin((this.rotationYaw - 90F) / Constants.RADIANS_TO_DEGREES_D)); + } + + if (this.world.isRemote) + { + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + + if (!this.world.isRemote && Math.abs(this.motionX * this.motionZ) > 0.000001) + { + double d = this.motionX * this.motionX + this.motionZ * this.motionZ; + + if (d != 0 && this.ticks % (MathHelper.floor(2 / d) + 1) == 0) + { + this.removeFuel(1); + } + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketEntityUpdate(this)); + } else if (this.ticks % 5 == 0) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketEntityUpdate(this), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 50.0D)); + GalacticraftCore.packetPipeline.sendToAllAround(new PacketDynamic(this), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 50.0D)); + } + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.world.isRemote) + { + return; + } + sendData.add(this.buggyType); + sendData.add(this.buggyFuelTank); + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.buggyType = buffer.readInt(); + + try + { + this.buggyFuelTank = NetworkUtil.readFluidTank(buffer); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.buggyType = nbt.getInteger("buggyType"); + ItemStackHelper.loadAllItems(nbt, this.stacks); + + if (nbt.hasKey("fuelTank")) + { + this.buggyFuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("buggyType", this.buggyType); + final NBTTagList var2 = new NBTTagList(); + + if (this.buggyFuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.buggyFuelTank.writeToNBT(new NBTTagCompound())); + } + + ItemStackHelper.saveAllItems(nbt, stacks); + } + + @Override + public int getSizeInventory() + { + return this.buggyType * 18; + } + + @Override + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public String getName() + { + return "Buggy"; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer var1) + { + return !this.isDead && var1.getDistanceSq(this) <= 64.0D; + } + + @Override + public void markDirty() + { + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (this.getPassengers().isEmpty()) + { + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.leftKey.getKeyCode()) + " / " + + GameSettings.getKeyDisplayString(KeyHandlerClient.rightKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.buggy.turn.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.accelerateKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.buggy.accel.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.decelerateKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.buggy.decel.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.openFuelGui.getKeyCode()) + " - " + GCCoreUtil.translate("gui.buggy.inv.name"))); + } + + return true; + } else + { + if (this.getPassengers().contains(player)) + { + this.removePassenger(player); + + return true; + } else + { + player.startRiding(this); + return true; + } + } + } + + @Override + public boolean pressKey(int key) + { + if (this.world.isRemote && (key == 6 || key == 8 || key == 9)) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_CONTROL_ENTITY, GCCoreUtil.getDimensionID(this.world), new Object[] + {key})); + return true; + } + + switch (key) + { + case 0: // Accelerate + this.speed += this.accel / 20D; + this.shouldClimb = true; + return true; + case 1: // Deccelerate + this.speed -= this.accel / 20D; + this.shouldClimb = true; + return true; + case 2: // Left + this.rotationYaw -= 0.5F * this.turnFactor; + this.wheelRotationZ = Math.max(-30.0F, Math.min(30.0F, this.wheelRotationZ + 0.5F)); + return true; + case 3: // Right + this.rotationYaw += 0.5F * this.turnFactor; + this.wheelRotationZ = Math.max(-30.0F, Math.min(30.0F, this.wheelRotationZ - 0.5F)); + return true; + } + + return false; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public int addFuel(FluidStack liquid, boolean doDrain) + { + if (this.landingPad != null) + { + return FluidUtil.fillWithGCFuel(this.buggyFuelTank, liquid, doDrain); + } + + return 0; + } + + @Override + public FluidStack removeFuel(int amount) + { + return this.buggyFuelTank.drain(amount, true); + } + + @Override + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + if (this.buggyType == 0) + { + return EnumCargoLoadingState.NOINVENTORY; + } + + int count = 0; + + for (count = 0; count < this.stacks.size(); count++) + { + ItemStack stackAt = this.stacks.get(count); + + if (stackAt != null && stackAt.getItem() == stack.getItem() && stackAt.getItemDamage() == stack.getItemDamage() && stackAt.getCount() < stackAt.getMaxStackSize()) + { + if (stackAt.getCount() + stack.getCount() <= stackAt.getMaxStackSize()) + { + if (doAdd) + { + stackAt.grow(stack.getCount()); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } else + { + // Part of the stack can fill this slot but there will be + // some left over + int origSize = stackAt.getCount(); + int surplus = origSize + stack.getCount() - stackAt.getMaxStackSize(); + + if (doAdd) + { + stackAt.setCount(stackAt.getMaxStackSize()); + this.markDirty(); + } + + stack.setCount(surplus); + if (this.addCargo(stack, doAdd) == EnumCargoLoadingState.SUCCESS) + { + return EnumCargoLoadingState.SUCCESS; + } + + stackAt.setCount(origSize); + return EnumCargoLoadingState.FULL; + } + } + } + + for (count = 0; count < this.stacks.size(); count++) + { + ItemStack stackAt = this.stacks.get(count); + + if (!stackAt.isEmpty()) + { + if (doAdd) + { + this.stacks.set(count, stack); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + } + + return EnumCargoLoadingState.FULL; + } + + @Override + public RemovalResult removeCargo(boolean doRemove) + { + for (int i = 0; i < this.stacks.size(); i++) + { + ItemStack stackAt = this.getStackInSlot(i); + + if (stackAt != null) + { + ItemStack resultStack = stackAt.copy(); + resultStack.setCount(1); + + if (doRemove) + { + stackAt.shrink(1); + this.markDirty(); + } + + return new RemovalResult(EnumCargoLoadingState.SUCCESS, resultStack); + } + } + + return new RemovalResult(EnumCargoLoadingState.EMPTY, ItemStack.EMPTY); + } + + @Override + public void setPad(IFuelDock pad) + { + this.landingPad = pad; + } + + @Override + public IFuelDock getLandingPad() + { + return this.landingPad; + } + + @Override + public void onPadDestroyed() + { + + } + + @Override + public boolean isDockValid(IFuelDock dock) + { + return dock instanceof TileEntityBuggyFueler; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public UUID getOwnerUUID() + { + if (!this.getPassengers().isEmpty() && !(this.getPassengers().get(0) instanceof EntityPlayer)) + { + return null; + } + + return !this.getPassengers().isEmpty() ? this.getPassengers().get(0).getPersistentID() : null; + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + public boolean inFlight() + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityCelestialFake.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityCelestialFake.java new file mode 100644 index 00000000..d50a1a73 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityCelestialFake.java @@ -0,0 +1,393 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.UUID; + +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +import io.netty.buffer.ByteBuf; + +public class EntityCelestialFake extends EntityAdvancedMotion implements IIgnoreShift +{ + + private boolean lastShouldMove; + private UUID persistantRiderUUID; + private Boolean shouldMoveClient; + private Boolean shouldMoveServer; + private boolean hasReceivedPacket; + private ArrayList prevData; + private boolean networkDataChanged; + + public EntityCelestialFake(World var1) + { + super(var1); + this.setSize(3.0F, 1.0F); + } + + @Override + public boolean shouldSendAdvancedMotionPacket() + { + return this.shouldMoveClient != null && this.shouldMoveServer != null; + } + + @Override + public boolean canSetPositionClient() + { + return this.shouldSendAdvancedMotionPacket(); + } + + public EntityCelestialFake(World var1, double var2, double var4, double var6) + { + this(var1); + this.setPosition(var2, var4, var6); + } + + public EntityCelestialFake(EntityPlayerMP player) + { + this(player.world, player.posX, player.posY, player.posZ); + + this.setPositionAndRotation(player.posX, player.posY, player.posZ, 0, 0); + + player.startRiding(this, true); + } + + @Override + public void onUpdate() + { + if (this.getPassengers().isEmpty()) + { + this.setDead(); + return; + } + super.onUpdate(); + + if (this.ticks < 40 && this.posY > 150) + { + if (this.getPassengers().isEmpty()) + { + final EntityPlayer player = this.world.getClosestPlayerToEntity(this, 5); + + if (player != null && player.getRidingEntity() == null) + { + player.startRiding(this, true); + } + } + } + + AxisAlignedBB box = this.getEntityBoundingBox().grow(0.2D, 0.4D, 0.2D); + + final List var15 = this.world.getEntitiesWithinAABBExcludingEntity(this, box); + + if (var15 != null && !var15.isEmpty()) + { + for (Entity entity : var15) + { + if (!this.getPassengers().contains(entity)) + { + this.pushEntityAway(entity); + } + } + } + } + + private void pushEntityAway(Entity entityToPush) + { + if (!this.getPassengers().contains(entityToPush) && this.getRidingEntity() != entityToPush) + { + double d0 = this.posX - entityToPush.posX; + double d1 = this.posZ - entityToPush.posZ; + double d2 = MathHelper.absMax(d0, d1); + + if (d2 >= 0.009999999776482582D) + { + d2 = MathHelper.sqrt(d2); + d0 /= d2; + d1 /= d2; + double d3 = 1.0D / d2; + + if (d3 > 1.0D) + { + d3 = 1.0D; + } + + d0 *= d3; + d1 *= d3; + d0 *= 0.05000000074505806D; + d1 *= 0.05000000074505806D; + d0 *= 1.0F - entityToPush.entityCollisionReduction; + d1 *= 1.0F - entityToPush.entityCollisionReduction; + entityToPush.addVelocity(-d0, 0.0D, -d1); + } + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + if (nbt.hasKey("RiderUUID_LSB")) + { + this.persistantRiderUUID = new UUID(nbt.getLong("RiderUUID_LSB"), nbt.getLong("RiderUUID_MSB")); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + final NBTTagList nbttaglist = new NBTTagList(); + + UUID id = this.getOwnerUUID(); + + if (id != null) + { + nbt.setLong("RiderUUID_LSB", id.getLeastSignificantBits()); + nbt.setLong("RiderUUID_MSB", id.getMostSignificantBits()); + } + } + + @Override + public boolean shouldMove() + { + return false; + } + + @Override + public void tickInAir() + { + if (this.world.isRemote) + { + this.motionY = this.motionX = this.motionZ = 0.0F; + + this.lastShouldMove = false; + } + } + + @Override + public ArrayList getNetworkedData() + { + final ArrayList objList = new ArrayList(); + + if (this.world.isRemote) + { + this.shouldMoveClient = this.shouldMove(); + objList.add(this.shouldMoveClient); + } else + { + this.shouldMoveServer = this.shouldMove(); + objList.add(this.shouldMoveServer); + // Server send rider information for client to check + objList.add(this.getPassengers().isEmpty() ? -1 : this.getPassengers().get(0).getEntityId()); + } + + this.networkDataChanged = !objList.equals(this.prevData); + this.prevData = objList; + return objList; + } + + @Override + public boolean networkedDataChanged() + { + return this.networkDataChanged; + } + + @Override + public boolean canRiderInteract() + { + return true; + } + + @Override + public int getPacketTickSpacing() + { + return 2; + } + + @Override + public double getPacketSendDistance() + { + return 500.0D; + } + + @Override + public void readNetworkedData(ByteBuf buffer) + { + try + { + if (this.world.isRemote) + { + this.hasReceivedPacket = true; + this.shouldMoveServer = buffer.readBoolean(); + + // Check has correct rider on client + int shouldBeMountedId = buffer.readInt(); + if (this.getPassengers().isEmpty()) + { + if (shouldBeMountedId > -1) + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + e.startRiding(this, true); + } + } + } else if (this.getPassengers().get(0).getEntityId() != shouldBeMountedId) + { + if (shouldBeMountedId == -1) + { + this.removePassengers(); + } else + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + e.startRiding(this, true); + } + } + } + } else + { + this.shouldMoveClient = buffer.readBoolean(); + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + @Override + public boolean allowDamageSource(DamageSource damageSource) + { + return !damageSource.isExplosion(); + } + + @Override + public List getItemsDropped() + { + return null; + } + + @Override + public boolean isItemValidForSlot(int var1, ItemStack var2) + { + return false; + } + + @Override + public double getPacketRange() + { + return 50.0D; + } + + @Override + public UUID getOwnerUUID() + { + if (!this.getPassengers().isEmpty() && !(this.getPassengers().get(0) instanceof EntityPlayer)) + { + return null; + } + + UUID id; + + if (!this.getPassengers().isEmpty()) + { + id = this.getPassengers().get(0).getPersistentID(); + + this.persistantRiderUUID = id; + } else + { + id = this.persistantRiderUUID; + } + + return id; + } + + @Override + public boolean pressKey(int key) + { + return false; + } + + @Override + public int getSizeInventory() + { + return 0; + } + + @Override + public String getName() + { + return ""; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean shouldSpawnParticles() + { + return false; + } + + @Override + public Map getParticleMap() + { + return null; + } + + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + return null; + } + + @Override + public void tickOnGround() + { + this.tickInAir(); + } + + @Override + public void onGroundHit() + { + + } + + @Override + public Vector3 getMotionVec() + { + return new Vector3(0, 0, 0); + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedCreeper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedCreeper.java new file mode 100644 index 00000000..31287450 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedCreeper.java @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.UUID; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAICreeperSwell; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class EntityEvolvedCreeper extends EntityCreeper implements IEntityBreathable +{ + + private float sizeXBase = -1.0F; + private float sizeYBase; + private static final DataParameter IS_CHILD = EntityDataManager.createKey(EntityEvolvedCreeper.class, DataSerializers.BOOLEAN); + private static final UUID babySpeedBoostUUID = UUID.fromString("ef67a435-32a4-4efd-b218-e7431438b109"); + private static final AttributeModifier babySpeedBoostModifier = new AttributeModifier(babySpeedBoostUUID, "Baby speed boost evolved creeper", 0.5D, 1); + + public EntityEvolvedCreeper(World par1World) + { + super(par1World); + this.tasks.taskEntries.clear(); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAICreeperSwell(this)); + this.tasks.addTask(3, new EntityAIAvoidEntity<>(this, EntityOcelot.class, 6.0F, 1.0D, 1.2D)); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, false)); + this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); + this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0])); + this.setSize(0.7F, 2.2F); + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(IS_CHILD, false); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(25.0D); + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + + if (this.isChild()) + { + nbt.setBoolean("IsBaby", true); + } + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + + if (nbt.getBoolean("IsBaby")) + { + this.setChild(true); + } + } + + @Override + public boolean canBreath() + { + return true; + } + + public void setChildSize(boolean isChild) + { + this.setCreeperScale(isChild ? 0.5F : 1.0F); + } + + @Override + protected final void setSize(float sizeX, float sizeY) + { + boolean flag = this.sizeXBase > 0.0F && this.sizeYBase > 0.0F; + this.sizeXBase = sizeX; + this.sizeYBase = sizeY; + + if (!flag) + { + this.setCreeperScale(1.0F); + } + } + + protected final void setCreeperScale(float scale) + { + super.setSize(this.sizeXBase * scale, this.sizeYBase * scale); + // GalacticraftCore.logger.info("" + this.sizeYBase + " " + scale); + } + + @Override + public boolean isChild() + { + return this.dataManager.get(IS_CHILD); + } + + @Override + protected int getExperiencePoints(EntityPlayer p_70693_1_) + { + if (this.isChild()) + { + this.experienceValue = (this.experienceValue * 5) / 2; + } + + return super.getExperiencePoints(p_70693_1_); + } + + public void setChild(boolean isChild) + { + this.dataManager.set(IS_CHILD, isChild); + + if (this.world != null && !this.world.isRemote) + { + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + iattributeinstance.removeModifier(babySpeedBoostModifier); + + if (isChild) + { + iattributeinstance.applyModifier(babySpeedBoostModifier); + } + } + + this.setChildSize(isChild); + } + + @Override + protected void jump() + { + this.motionY = 0.45D / WorldUtil.getGravityFactor(this); + if (this.motionY < 0.22D) + { + this.motionY = 0.22D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } + + @Override + protected Item getDropItem() + { + if (this.isBurning()) + { + return Items.BLAZE_ROD; + } + return Items.REDSTONE; + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(12)) + { + case 0: + case 1: + case 2: + case 3: + this.entityDropItem(new ItemStack(Blocks.SAND), 0.0F); + break; + case 4: + case 5: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 6: + this.dropItem(GCItems.oxygenGear, 1); + break; + case 7: + case 8: + this.entityDropItem(new ItemStack(Blocks.ICE), 0.0F); + break; + default: + if (ConfigManagerCore.challengeMobDropsAndSpawning) + this.dropItem(Items.REEDS, 1); + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + // No loot table + this.dropFewItems(wasRecentlyHit, lootingModifier); + this.dropEquipment(wasRecentlyHit, lootingModifier); + } + + @Override + protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) + { + super.dropFewItems(wasRecentlyHit, lootingModifier); + + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.02F) + { + this.addRandomDrop(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedEnderman.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedEnderman.java new file mode 100644 index 00000000..69e6442f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedEnderman.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.GCItems; + +public class EntityEvolvedEnderman extends EntityEnderman implements IEntityBreathable +{ + + public EntityEvolvedEnderman(World world) + { + super(world); + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + super.dropLoot(wasRecentlyHit, lootingModifier, source); + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.015F) + { + this.addRandomDrop(); + } + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(10)) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + this.dropItem(Items.ENDER_PEARL, 1); + break; + case 6: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 7: + case 8: + this.dropItem(Items.ENDER_EYE, 1); + break; + case 9: + this.dropItem(GCItems.oxygenConcentrator, 1); + break; + case 10: + this.dropItem(GCItems.oxMask, 1); + break; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSkeleton.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSkeleton.java new file mode 100644 index 00000000..4420ef37 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSkeleton.java @@ -0,0 +1,261 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class EntityEvolvedSkeleton extends EntitySkeleton implements IEntityBreathable, ITumblable +{ + + private static final DataParameter SPIN_PITCH = EntityDataManager.createKey(EntityEvolvedSkeleton.class, DataSerializers.FLOAT); + private float tumbling = 0F; + private float tumbleAngle = 0F; + + public EntityEvolvedSkeleton(World worldIn) + { + super(worldIn); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(25); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.35F); + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + protected void jump() + { + this.motionY = 0.45D / WorldUtil.getGravityFactor(this); + if (this.motionY < 0.24D) + { + this.motionY = 0.24D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } + + protected void addRandomDrop() + { + int r = this.rand.nextInt(12); + switch (r) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + this.entityDropItem(new ItemStack(GCBlocks.oxygenPipe), 0.0F); + break; + case 6: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 7: + case 8: + this.dropItem(GCItems.canister, 1); + break; + default: + if (ConfigManagerCore.challengeMobDropsAndSpawning) + this.dropItem(Items.PUMPKIN_SEEDS, 1); + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + // No loot table + this.dropFewItems(wasRecentlyHit, lootingModifier); + this.dropEquipment(wasRecentlyHit, lootingModifier); + } + + @Override + protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) + { + Item item = Items.BONE; + + int j = this.rand.nextInt(3); + + if (item != null) + { + if (lootingModifier > 0) + { + j += this.rand.nextInt(lootingModifier + 1); + } + + for (int k = 1; k < j; ++k) + { + this.dropItem(item, 1); + } + } + + j = this.rand.nextInt(3 + lootingModifier); + if (j > 1) + this.dropItem(Items.BONE, 1); + + // Drop lapis as semi-rare drop if player hit and if dropping bones + if (wasRecentlyHit && (ConfigManagerCore.challengeMobDropsAndSpawning) && j > 1 && this.rand.nextInt(12) <= lootingModifier) + this.entityDropItem(new ItemStack(Items.DYE, 1, 4), 0.0F); + + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.02F) + { + this.addRandomDrop(); + } + } + + @Override + public void setTumbling(float value) + { + if (value != 0F) + { + if (this.tumbling == 0F) + this.tumbling = (this.world.rand.nextFloat() + 0.5F) * value; + } else + this.tumbling = 0F; + } + + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + if (!this.isDead) + { + if (this.tumbling != 0F) + { + if (this.onGround) + { + this.tumbling = 0F; + } + } + + if (!this.world.isRemote) + { + this.setSpinPitch(this.tumbling); + } else + { + this.tumbling = this.getSpinPitch(); + this.tumbleAngle -= this.tumbling; + if (this.tumbling == 0F && this.tumbleAngle != 0F) + { + this.tumbleAngle *= 0.8F; + if (Math.abs(this.tumbleAngle) < 1F) + this.tumbleAngle = 0F; + } + } + } + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.getDataManager().register(SPIN_PITCH, 0.0F); + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + this.tumbling = nbt.getFloat("tumbling"); + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + nbt.setFloat("tumbling", this.tumbling); + } + + public float getSpinPitch() + { + return this.getDataManager().get(SPIN_PITCH); + } + + public void setSpinPitch(float pitch) + { + this.getDataManager().set(SPIN_PITCH, pitch); + } + + @Override + public float getTumbleAngle(float partial) + { + float angle = this.tumbleAngle - partial * this.tumbling; + if (angle > 360F) + { + this.tumbleAngle -= 360F; + angle -= 360F; + } + if (angle < 0F) + { + this.tumbleAngle += 360F; + angle += 360F; + } + return angle; + } + + @Override + public float getTumbleAxisX() + { + double velocity2 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if (velocity2 == 0D) + return 1F; + return (float) (this.motionZ / MathHelper.sqrt(velocity2)); + } + + @Override + public float getTumbleAxisZ() + { + double velocity2 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if (velocity2 == 0D) + return 0F; + return (float) (this.motionX / MathHelper.sqrt(velocity2)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSpider.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSpider.java new file mode 100644 index 00000000..d6f42cb3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSpider.java @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class EntityEvolvedSpider extends EntitySpider implements IEntityBreathable +{ + + public EntityEvolvedSpider(World par1World) + { + super(par1World); + this.setSize(1.5F, 1.0F); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(22.0D); + double difficulty = 0; + switch (this.world.getDifficulty()) + { + case HARD: + difficulty = 2D; + break; + case NORMAL: + difficulty = 1D; + break; + default: + break; + } + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.3 + 0.05 * difficulty); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(2D + difficulty); + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + + // onInitialSpawn is called for EntitySpider, which has a chance of + // adding a vanilla skeleton, remove these + for (Entity entity : getPassengers()) + { + entity.dismountRidingEntity(); + if (!(entity instanceof EntitySkeleton)) + { + GalacticraftCore.logger.error("Removed unexpected passenger from spider: " + entity); + } else + { + entity.setDead(); + } + } + + if (this.world.rand.nextInt(100) == 0) + { + EntityEvolvedSkeleton entityskeleton = new EntityEvolvedSkeleton(this.world); + entityskeleton.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + entityskeleton.onInitialSpawn(difficulty, (IEntityLivingData) null); + this.world.spawnEntity(entityskeleton); + entityskeleton.startRiding(this); + } + + if (livingdata == null) + { + livingdata = new EntitySpider.GroupData(); + + if (this.world.getDifficulty() == EnumDifficulty.HARD && this.world.rand.nextFloat() < 0.1F * difficulty.getClampedAdditionalDifficulty()) + { + ((EntitySpider.GroupData) livingdata).setRandomEffect(this.world.rand); + } + } + + if (livingdata instanceof EntitySpider.GroupData) + { + Potion potion = ((EntitySpider.GroupData) livingdata).effect; + + if (potion != null) + { + this.addPotionEffect(new PotionEffect(potion, Integer.MAX_VALUE)); + } + } + + return livingdata; + } + + @Override + protected void jump() + { + this.motionY = 0.52D / WorldUtil.getGravityFactor(this); + + if (this.motionY < 0.26D) + { + this.motionY = 0.26D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(14)) + { + case 0: + case 1: + case 2: + this.dropItem(GCItems.cheeseCurd, 1); + break; + case 3: + case 4: + case 5: + this.dropItem(Items.FERMENTED_SPIDER_EYE, 1); + break; + case 6: + case 7: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 8: + this.dropItem(GCItems.oxygenGear, 1); + break; + case 9: + this.dropItem(GCItems.oxygenConcentrator, 1); + break; + default: + if (ConfigManagerCore.challengeMobDropsAndSpawning) + { + this.dropItem(Items.NETHER_WART, 1); + } + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + super.dropLoot(wasRecentlyHit, lootingModifier > 1 ? lootingModifier - 1 : 0, source); + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.02F) + { + this.addRandomDrop(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedWitch.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedWitch.java new file mode 100644 index 00000000..da0c2bc8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedWitch.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.GCItems; + +public class EntityEvolvedWitch extends EntityWitch implements IEntityBreathable +{ + + public EntityEvolvedWitch(World world) + { + super(world); + } + + @Override + public boolean canBreath() + { + return true; + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(10)) + { + case 0: + case 1: + case 9: + // Dehydrated carrot + this.entityDropItem(new ItemStack(GCItems.foodItem, 1, 1), 0.0F); + break; + case 2: + case 3: + this.entityDropItem(new ItemStack(Blocks.GLOWSTONE, 1), 0.0F); + break; + case 4: + case 5: + this.entityDropItem(new ItemStack(GCItems.basicItem, 1, 20), 0.0F); + break; + case 6: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankHeavy, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 7: + this.dropItem(GCItems.oxMask, 1); + break; + case 8: + this.dropItem(GCItems.oxygenVent, 1); + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + super.dropLoot(wasRecentlyHit, lootingModifier, source); + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.015F) + { + this.addRandomDrop(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedZombie.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedZombie.java new file mode 100644 index 00000000..29e5b549 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedZombie.java @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class EntityEvolvedZombie extends EntityZombie implements IEntityBreathable, ITumblable +{ + + private static final DataParameter SPIN_PITCH = EntityDataManager.createKey(EntityEvolvedZombie.class, DataSerializers.FLOAT); + private int conversionTime = 0; + private float tumbling = 0F; + private float tumbleAngle = 0F; + + public EntityEvolvedZombie(World par1World) + { + super(par1World); + this.setSize(0.6F, 1.95F); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D); + double difficulty = 0; + switch (this.world.getDifficulty()) + { + case HARD: + difficulty = 2D; + break; + case NORMAL: + difficulty = 1D; + break; + } + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.26D + 0.04D * difficulty); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(3D + difficulty); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(16D + difficulty * 2D); + } + + @Override + public boolean canBreath() + { + return true; + } + + public IAttribute getReinforcementsAttribute() + { + return EntityZombie.SPAWN_REINFORCEMENTS_CHANCE; + } + + @Override + protected void jump() + { + this.motionY = 0.48D / WorldUtil.getGravityFactor(this); + if (this.motionY < 0.24D) + { + this.motionY = 0.24D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(16)) + { + case 0: + case 1: + case 2: + // Dehydrated carrot + this.entityDropItem(new ItemStack(GCItems.foodItem, 1, 1), 0.0F); + break; + case 3: + case 4: + this.dropItem(GCItems.meteoricIronRaw, 1); + break; + case 5: + case 6: + // Dehydrated potato + this.entityDropItem(new ItemStack(GCItems.foodItem, 1, 3), 0.0F); + break; + case 7: + case 8: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 9: + this.dropItem(GCItems.oxMask, 1); + break; + case 10: + this.dropItem(GCItems.oxygenVent, 1); + break; + case 11: + case 12: + this.dropItem(Items.CARROT, 1); + break; + case 13: + case 14: + case 15: + if (ConfigManagerCore.challengeMobDropsAndSpawning) + this.dropItem(Items.MELON_SEEDS, 1); + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + // No loot table + this.dropFewItems(wasRecentlyHit, lootingModifier); + this.dropEquipment(wasRecentlyHit, lootingModifier); + } + + @Override + protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) + { + Item item = Items.ROTTEN_FLESH; + + // Less rotten flesh than vanilla + int j = this.rand.nextInt(2); + + if (item != null) + { + if (lootingModifier > 0) + { + j += this.rand.nextInt(lootingModifier + 1); + } + + for (int k = 0; k < j; ++k) + { + this.dropItem(item, 1); + } + } + + // Drop copper ingot as semi-rare drop if player hit and if dropping + // rotten flesh (50% chance) + if (wasRecentlyHit && (ConfigManagerCore.challengeMobDropsAndSpawning) && j > 0 && this.rand.nextInt(6) <= (lootingModifier + 1) / 2) + this.entityDropItem(new ItemStack(GCItems.basicItem, 1, 3), 0.0F); + + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.02F) + { + this.addRandomDrop(); + } + } + + @Override + public void setTumbling(float value) + { + if (value != 0F) + { + if (this.tumbling == 0F) + this.tumbling = (this.world.rand.nextFloat() + 0.5F) * value; + } else + this.tumbling = 0F; + } + + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + if (!this.isDead) + { + if (this.tumbling != 0F) + { + if (this.onGround) + { + this.tumbling = 0F; + } + } + + if (!this.world.isRemote) + { + this.setSpinPitch(this.tumbling); + } else + { + this.tumbling = this.getSpinPitch(); + this.tumbleAngle -= this.tumbling; + if (this.tumbling == 0F && this.tumbleAngle != 0F) + { + this.tumbleAngle *= 0.8F; + if (Math.abs(this.tumbleAngle) < 1F) + this.tumbleAngle = 0F; + } + } + } + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.getDataManager().register(SPIN_PITCH, 0.0F); + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + this.tumbling = nbt.getFloat("tumbling"); + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + nbt.setFloat("tumbling", this.tumbling); + } + + public float getSpinPitch() + { + return this.getDataManager().get(SPIN_PITCH); + } + + public void setSpinPitch(float pitch) + { + this.getDataManager().set(SPIN_PITCH, pitch); + } + + @Override + public float getTumbleAngle(float partial) + { + float angle = this.tumbleAngle - partial * this.tumbling; + if (angle > 360F) + { + this.tumbleAngle -= 360F; + angle -= 360F; + } + if (angle < 0F) + { + this.tumbleAngle += 360F; + angle += 360F; + } + return angle; + } + + @Override + public float getTumbleAxisX() + { + double velocity2 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if (velocity2 == 0D) + return 1F; + return (float) (this.motionZ / MathHelper.sqrt(velocity2)); + } + + @Override + public float getTumbleAxisZ() + { + double velocity2 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if (velocity2 == 0D) + return 0F; + return (float) (this.motionX / MathHelper.sqrt(velocity2)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityFlag.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityFlag.java new file mode 100644 index 00000000..c80bc720 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityFlag.java @@ -0,0 +1,270 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFence; +import net.minecraft.block.SoundType; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; + +public class EntityFlag extends Entity +{ + + private static final DataParameter OWNER = EntityDataManager.createKey(EntityFlag.class, DataSerializers.STRING); + private static final DataParameter DAMAGE = EntityDataManager.createKey(EntityFlag.class, DataSerializers.FLOAT); + private static final DataParameter TYPE = EntityDataManager.createKey(EntityFlag.class, DataSerializers.VARINT); + private static final DataParameter FACING_ANGLE = EntityDataManager.createKey(EntityFlag.class, DataSerializers.VARINT); + public double xPosition; + public double yPosition; + public double zPosition; + public boolean indestructable = false; + public FlagData flagData; + + public EntityFlag(World world) + { + super(world); + this.setSize(0.4F, 3F); + this.ignoreFrustumCheck = true; + } + + public EntityFlag(World par1World, double x, double y, double z, int dir) + { + this(par1World); + this.setFacingAngle(dir); + this.setPosition(x, y, z); + this.xPosition = x; + this.yPosition = y; + this.zPosition = z; + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + Entity e = par1DamageSource.getTrueSource(); + boolean flag = e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode; + + if (!this.world.isRemote && !this.isDead && !this.indestructable) + { + if (this.isEntityInvulnerable(par1DamageSource)) + { + return false; + } else + { + this.markVelocityChanged(); + this.setDamage(this.getDamage() + par2 * 10); + this.world.playSound(null, this.posX, this.posY, this.posZ, SoundType.METAL.getBreakSound(), SoundCategory.BLOCKS, SoundType.METAL.getVolume(), SoundType.METAL.getPitch() + 1.0F); + + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + this.setDamage(100.0F); + } + + if (flag || this.getDamage() > 40) + { + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + if (flag) + { + this.setDead(); + } else + { + this.setDead(); + this.dropItemStack(); + } + } + + return true; + } + } else + { + return true; + } + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(GCItems.flag, 1, this.getType()); + } + + public int getWidth() + { + return 25; + } + + public int getHeight() + { + return 40; + } + + @Override + public boolean canBeCollidedWith() + { + return true; + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return par1Entity.getCollisionBoundingBox(); + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + protected void entityInit() + { + this.dataManager.register(OWNER, ""); + this.dataManager.register(DAMAGE, 0.0F); + this.dataManager.register(TYPE, -1); + this.dataManager.register(FACING_ANGLE, -1); + } + + @Override + public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + this.setOwner(par1NBTTagCompound.getString("Owner")); + this.setType(par1NBTTagCompound.getInteger("Type")); + this.indestructable = par1NBTTagCompound.getBoolean("Indestructable"); + + this.xPosition = par1NBTTagCompound.getDouble("TileX"); + this.yPosition = par1NBTTagCompound.getDouble("TileY"); + this.zPosition = par1NBTTagCompound.getDouble("TileZ"); + this.setFacingAngle(par1NBTTagCompound.getInteger("AngleI")); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + par1NBTTagCompound.setString("Owner", String.valueOf(this.getOwner())); + par1NBTTagCompound.setInteger("Type", Integer.valueOf(this.getType())); + par1NBTTagCompound.setBoolean("Indestructable", this.indestructable); + par1NBTTagCompound.setInteger("AngleI", this.getFacingAngle()); + par1NBTTagCompound.setDouble("TileX", this.xPosition); + par1NBTTagCompound.setDouble("TileY", this.yPosition); + par1NBTTagCompound.setDouble("TileZ", this.zPosition); + } + + public void dropItemStack() + { + this.entityDropItem(new ItemStack(GCItems.flag, 1, this.getType()), 0.0F); + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if ((this.ticksExisted - 1) % 20 == 0 && this.world.isRemote) + { + this.flagData = ClientUtil.updateFlagData(this.getOwner(), Minecraft.getMinecraft().player.getDistance(this) < 50.0D); + } + + Vector3 vec = new Vector3(this.posX, this.posY, this.posZ); + vec = vec.translate(new Vector3(0, -1, 0)); + final Block blockAt = vec.getBlock(this.world); + + if (blockAt != null) + { + BlockPos pos = new BlockPos(vec.intX(), vec.intY(), vec.intZ()); + if (blockAt instanceof BlockFence) + { + + } else if (blockAt.isAir(this.world.getBlockState(pos), this.world, pos)) + { + this.motionY -= 0.02F; + } + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (!this.world.isRemote) + { + this.setFacingAngle(this.getFacingAngle() + 3); + } + + return true; + } + + public void setOwner(String par1) + { + this.dataManager.set(OWNER, String.valueOf(par1)); + } + + public String getOwner() + { + return this.dataManager.get(OWNER); + } + + public void setDamage(float par1) + { + this.dataManager.set(DAMAGE, Float.valueOf(par1)); + } + + public float getDamage() + { + return this.dataManager.get(DAMAGE); + } + + public void setType(int par1) + { + this.dataManager.set(TYPE, Integer.valueOf(par1)); + } + + public int getType() + { + return this.dataManager.get(TYPE); + } + + public void setFacingAngle(int par1) + { + this.dataManager.set(FACING_ANGLE, Integer.valueOf(par1)); + } + + public int getFacingAngle() + { + return this.dataManager.get(FACING_ANGLE); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityHangingSchematic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityHangingSchematic.java new file mode 100644 index 00000000..8c4e5fa6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityHangingSchematic.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityHanging; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class EntityHangingSchematic extends EntityHanging +{ + + public int schematic; + private boolean sendToClient; + + public EntityHangingSchematic(World worldIn) + { + super(worldIn); + } + + public EntityHangingSchematic(World worldIn, BlockPos pos, EnumFacing facing, int meta) + { + super(worldIn, pos); + this.schematic = meta; + this.updateFacingWithBoundingBox(facing); + } + + private int tickCounter1; + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.sendToClient) + { + this.sendToClient = false; + this.sendToClient(this.world, this.hangingPosition); + } + + if (this.tickCounter1++ == 10) + { + this.tickCounter1 = 0; + + if (!this.world.isRemote && !this.isDead && !this.onValidSurface()) + { + this.setDead(); + this.onBroken((Entity) null); + } + } + } + + @Override + public void setDead() + { + super.setDead(); + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + tagCompound.setInteger("schem", this.schematic); + super.writeEntityToNBT(tagCompound); + } + + @Override + public void readEntityFromNBT(NBTTagCompound tag) + { + this.schematic = tag.getInteger("schem"); + super.readEntityFromNBT(tag); + this.setSendToClient(); + } + + @Override + public int getWidthPixels() + { + return 32; + } + + @Override + public int getHeightPixels() + { + return 32; + } + + @Override + public void onBroken(Entity brokenEntity) + { + if (this.world.getGameRules().getBoolean("doEntityDrops")) + { + if (brokenEntity instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer) brokenEntity; + + if (entityplayer.capabilities.isCreativeMode) + { + return; + } + } + + this.entityDropItem(SchematicRegistry.getSchematicItem(this.schematic), 0.0F); + } + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return SchematicRegistry.getSchematicItem(this.schematic); + } + + @Override + public void setLocationAndAngles(double x, double y, double z, float yaw, float pitch) + { + BlockPos blockpos = this.hangingPosition.add(x - this.posX, y - this.posY, z - this.posZ); + this.setPosition((double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ()); + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + } + + public void sendToClient(World worldIn, BlockPos blockpos) + { + int dimID = GCCoreUtil.getDimensionID(worldIn); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_HANGING_SCHEMATIC, dimID, new Object[] + {blockpos, this.getEntityId(), this.facingDirection.ordinal(), this.schematic}), worldIn, dimID, blockpos, 150D); + } + + public void setSendToClient() + { + this.sendToClient = true; + } + + @Override + public void playPlaceSound() + { + this.playSound(SoundEvents.ENTITY_PAINTING_PLACE, 1.0F, 1.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLander.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLander.java new file mode 100644 index 00000000..f67530d8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLander.java @@ -0,0 +1,325 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.fx.ParticleLanderFlame; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class EntityLander extends EntityLanderBase implements IIgnoreShift, ICameraZoomEntity +{ + + private double lastMotionY; + + public EntityLander(World world) + { + super(world); + this.setSize(3.0F, 4.25F); + } + + public EntityLander(EntityPlayerMP player) + { + super(player, 0.0F); + } + + @Override + public double getMountedYOffset() + { + return 2.25; + } + + @Override + public float getRotateOffset() + { + return +0.0F; + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + this.lastMotionY = this.motionY; + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + + this.lastMotionY = this.motionY; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.lander.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (!this.onGround) + { + return false; + } + + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + return true; + } + + if (this.getPassengers().isEmpty() && player instanceof EntityPlayerMP) + { + GCCoreUtil.openParachestInv((EntityPlayerMP) player, this); + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + return true; + } else + { + return true; + } + } + + @Override + public boolean pressKey(int key) + { + if (this.onGround) + { + return false; + } + + float turnFactor = 2.0F; + float angle = 45; + + switch (key) + { + case 0: + this.rotationPitch = Math.min(Math.max(this.rotationPitch - 0.5F * turnFactor, -angle), angle); + return true; + case 1: + this.rotationPitch = Math.min(Math.max(this.rotationPitch + 0.5F * turnFactor, -angle), angle); + return true; + case 2: + this.rotationYaw -= 0.5F * turnFactor; + return true; + case 3: + this.rotationYaw += 0.5F * turnFactor; + return true; + case 4: + this.motionY = Math.min(this.motionY + 0.03F, this.posY < 90 ? -0.15 : -1.0); + return true; + case 5: + this.motionY = Math.min(this.motionY - 0.022F, -1.0); + return true; + } + + return false; + } + + @Override + public boolean shouldSpawnParticles() + { + return this.ticks > 40 && this.rotationPitch != 0.0000001F; + } + + @Override + public Map getParticleMap() + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + final double x1 = 4 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + final double z1 = 4 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + final double y1 = -4 * Math.abs(Math.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D)); + + new Vector3(this); + + final Map particleMap = new HashMap(); + particleMap.put(new Vector3(this.posX, this.posY + 1D + this.motionY / 2, this.posZ), new Vector3(x1, y1 + this.motionY / 2, z1)); + return particleMap; + } + + @SideOnly(Side.CLIENT) + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + EntityLivingBase passenger = this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof EntityLivingBase) ? null : (EntityLivingBase) this.getPassengers().get(0); + return new ParticleLanderFlame(this.world, x, y, z, motX, motY, motZ, passenger); + } + + @Override + public void tickInAir() + { + super.tickInAir(); + + if (this.world.isRemote) + { + if (!this.onGround) + { + this.motionY -= 0.008D; + } + + double motY = -1 * Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double motX = Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * motY; + double motZ = Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * motY; + this.motionX = motX / 2.0F; + this.motionZ = motZ / 2.0F; + } + } + + @Override + public void tickOnGround() + { + // Signal switch off flames + this.rotationPitch = 0.0000001F; + } + + @Override + public void onGroundHit() + { + if (!this.world.isRemote) + { + if (Math.abs(this.lastMotionY) > 2.0D) + { + for (Entity entity : this.getPassengers()) + { + entity.dismountRidingEntity(); + if (entity instanceof EntityPlayerMP) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(this.world), new Object[] + {}), (EntityPlayerMP) entity); + } + entity.motionX = 0; + entity.motionY = 0; + entity.motionZ = 0; + entity.setPosition(entity.posX, this.posY + this.getMountedYOffset(), entity.posZ); + this.world.updateEntityWithOptionalForce(entity, false); + } + this.world.createExplosion(this, this.posX, this.posY, this.posZ, 12, true); + + this.setDead(); + } + } + } + + @Override + public Vector3 getMotionVec() + { + if (this.onGround) + { + return new Vector3(0, 0, 0); + } + + if (this.ticks >= 40 && this.ticks < 45) + { + this.motionY = this.getInitialMotionY(); + } + + return new Vector3(this.motionX, this.ticks < 40 ? 0 : this.motionY, this.motionZ); + } + + @Override + public float getCameraZoom() + { + return 15; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return !this.onGround; + } + + @Override + public double getInitialMotionY() + { + return -2.5D; + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return null; + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLanderBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLanderBase.java new file mode 100644 index 00000000..6e71eb89 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLanderBase.java @@ -0,0 +1,534 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.network.PacketDynamicInventory; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +import io.netty.buffer.ByteBuf; + +public abstract class EntityLanderBase extends EntityAdvancedMotion implements IInventorySettable, IScaleableFuelLevel +{ + + private final int FUEL_TANK_CAPACITY = 5000; + public FluidTank fuelTank = new FluidTank(this.FUEL_TANK_CAPACITY); + protected boolean hasReceivedPacket; + private boolean lastShouldMove; + private UUID persistantRiderUUID; + private Boolean shouldMoveClient; + private Boolean shouldMoveServer; + private ArrayList prevData; + private boolean networkDataChanged; + private boolean syncAdjustFlag = true; + + public EntityLanderBase(World var1) + { + super(var1); + this.setSize(3.0F, 3.0F); + } + + @Override + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + passenger.setPosition(this.posX, this.posY + this.getMountedYOffset() + passenger.getYOffset(), this.posZ); + } + } + + @Override + public boolean shouldSendAdvancedMotionPacket() + { + return this.shouldMoveClient != null && this.shouldMoveServer != null; + } + + @Override + public boolean canSetPositionClient() + { + return this.shouldSendAdvancedMotionPacket(); + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + super.setPositionAndRotationDirect(x, y, z, yaw, pitch, posRotationIncrements, b); + if (this.syncAdjustFlag && this.world.isBlockLoaded(new BlockPos(x, 255D, z))) + { + EntityPlayer p = FMLClientHandler.instance().getClientPlayerEntity(); + double dx = x - p.posX; + double dz = z - p.posZ; + if (dx * dx + dz * dz < 1024) + { + if (!this.world.loadedEntityList.contains(this)) + { + try + { + this.world.loadedEntityList.add(this); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.posX = x; + this.posY = y; + this.posZ = z; + + int cx = MathHelper.floor(x / 16.0D); + int cz = MathHelper.floor(z / 16.0D); + + if (!this.addedToChunk || this.chunkCoordX != cx || this.chunkCoordZ != cz) + { + if (this.addedToChunk && this.world.isBlockLoaded(new BlockPos(this.chunkCoordX << 4, 255, this.chunkCoordZ << 4), true)) + { + this.world.getChunk(this.chunkCoordX, this.chunkCoordZ).removeEntityAtIndex(this, this.chunkCoordY); + } + + this.addedToChunk = true; + this.world.getChunk(cx, cz).addEntity(this); + } + + this.syncAdjustFlag = false; + } + } + } + + @Override + public int getScaledFuelLevel(int i) + { + final double fuelLevel = this.fuelTank.getFluid() == null ? 0 : this.fuelTank.getFluid().amount; + + return (int) (fuelLevel * i / this.FUEL_TANK_CAPACITY); + } + + public EntityLanderBase(World var1, double var2, double var4, double var6, float yOffset) + { + this(var1); + this.setPosition(var2, var4, var6); + } + + public EntityLanderBase(EntityPlayerMP player, float yOffset) + { + this(player.world, player.posX, player.posY, player.posZ, yOffset); + + GCPlayerStats stats = GCPlayerStats.get(player); + this.stacks = NonNullList.withSize(stats.getRocketStacks().size() + 1, ItemStack.EMPTY); + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, stats.getFuelLevel())); + + for (int i = 0; i < stats.getRocketStacks().size(); i++) + { + if (!stats.getRocketStacks().get(i).isEmpty()) + { + this.stacks.set(i, stats.getRocketStacks().get(i).copy()); + } else + { + this.stacks.get(i).setCount(0); + } + } + + this.setPositionAndRotation(player.posX, player.posY, player.posZ, 0, 0); + + player.startRiding(this, true); + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (this.ticks < 40 && this.posY > 150) + { + if (this.getPassengers().isEmpty()) + { + final EntityPlayer player = this.world.getClosestPlayerToEntity(this, 5); + + if (player != null && player.getRidingEntity() == null) + { + player.startRiding(this); + } + } + } + + if (!this.world.isRemote) + { + this.checkFluidTankTransfer(this.stacks.size() - 1, this.fuelTank); + } + + AxisAlignedBB box = this.getEntityBoundingBox().grow(0.2D, 0.4D, 0.2D); + + final List var15 = this.world.getEntitiesWithinAABBExcludingEntity(this, box); + + if (var15 != null && !var15.isEmpty()) + { + for (Entity entity : var15) + { + if (!this.getPassengers().contains(entity)) + { + this.pushEntityAway(entity); + } + } + } + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + FluidUtil.tryFillContainerFuel(tank, this.stacks, slot); + } + + private void pushEntityAway(Entity entityToPush) + { + if (!this.getPassengers().contains(entityToPush) && this.getRidingEntity() != entityToPush) + { + double d0 = this.posX - entityToPush.posX; + double d1 = this.posZ - entityToPush.posZ; + double d2 = MathHelper.absMax(d0, d1); + + if (d2 >= 0.009999999776482582D) + { + d2 = MathHelper.sqrt(d2); + d0 /= d2; + d1 /= d2; + double d3 = 1.0D / d2; + + if (d3 > 1.0D) + { + d3 = 1.0D; + } + + d0 *= d3; + d1 *= d3; + d0 *= 0.05000000074505806D; + d1 *= 0.05000000074505806D; + d0 *= 1.0F - entityToPush.entityCollisionReduction; + d1 *= 1.0F - entityToPush.entityCollisionReduction; + entityToPush.addVelocity(-d0, 0.0D, -d1); + } + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + int invSize = nbt.getInteger("rocketStacksLength"); + if (invSize < 3) + { + invSize = 3; + } + this.stacks = NonNullList.withSize(invSize, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.stacks); + + if (nbt.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + + if (nbt.hasKey("RiderUUID_LSB")) + { + this.persistantRiderUUID = new UUID(nbt.getLong("RiderUUID_LSB"), nbt.getLong("RiderUUID_MSB")); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("rocketStacksLength", this.stacks.size()); + + ItemStackHelper.saveAllItems(nbt, this.stacks); + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + + UUID id = this.getOwnerUUID(); + + if (id != null) + { + nbt.setLong("RiderUUID_LSB", id.getLeastSignificantBits()); + nbt.setLong("RiderUUID_MSB", id.getMostSignificantBits()); + } + } + + @Override + public boolean shouldMove() + { + if (this.shouldMoveClient == null || this.shouldMoveServer == null) + { + return false; + } + + if (this.ticks < 40) + { + return false; + } + + return !this.onGround; + } + + public abstract double getInitialMotionY(); + + @Override + public void tickInAir() + { + if (this.world.isRemote) + { + if (!this.shouldMove()) + { + this.motionY = this.motionX = this.motionZ = 0.0F; + } + + if (this.shouldMove() && !this.lastShouldMove) + { + this.motionY = this.getInitialMotionY(); + } + + this.lastShouldMove = this.shouldMove(); + } + } + + @Override + public ArrayList getNetworkedData() + { + final ArrayList objList = new ArrayList(); + + if (!this.world.isRemote) + { + Integer cargoLength = this.stacks != null ? this.stacks.size() : 0; + objList.add(cargoLength); + objList.add(this.fuelTank.getFluid() == null ? 0 : this.fuelTank.getFluid().amount); + } + + if (this.world.isRemote) + { + this.shouldMoveClient = this.shouldMove(); + objList.add(this.shouldMoveClient); + } else + { + this.shouldMoveServer = this.shouldMove(); + objList.add(this.shouldMoveServer); + // Server send rider information for client to check + objList.add(this.getPassengers().isEmpty() ? -1 : this.getPassengers().get(0).getEntityId()); + } + + this.networkDataChanged = !objList.equals(this.prevData); + this.prevData = objList; + return objList; + } + + @Override + public boolean networkedDataChanged() + { + return this.networkDataChanged || this.shouldMoveClient == null || this.shouldMoveServer == null; + } + + @Override + public boolean canRiderInteract() + { + return true; + } + + @Override + public int getPacketTickSpacing() + { + return 2; + } + + @Override + public double getPacketSendDistance() + { + return 250.0D; + } + + @Override + public void readNetworkedData(ByteBuf buffer) + { + try + { + if (this.world.isRemote) + { + if (!this.hasReceivedPacket) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + this.hasReceivedPacket = true; + } + + int cargoLength = buffer.readInt(); + if (this.stacks == null || this.stacks.isEmpty()) + { + this.stacks = NonNullList.withSize(cargoLength, ItemStack.EMPTY); + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamicInventory(this)); + } + + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, buffer.readInt())); + + this.shouldMoveServer = buffer.readBoolean(); + + // Check has correct rider on client + int shouldBeMountedId = buffer.readInt(); + if (this.getPassengers().isEmpty()) + { + if (shouldBeMountedId > -1) + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + if (e.dimension != this.dimension) + { + if (e instanceof EntityPlayer) + { + e = WorldUtil.forceRespawnClient(this.dimension, e.world.getDifficulty().getId(), e.world.getWorldInfo().getTerrainType().getName(), + ((EntityPlayerMP) e).interactionManager.getGameType().getID()); + e.startRiding(this); + this.syncAdjustFlag = true; + } + } else + { + e.startRiding(this); + this.syncAdjustFlag = true; + } + } + } + } else if (this.getPassengers().get(0).getEntityId() != shouldBeMountedId) + { + if (shouldBeMountedId == -1) + { + this.removePassengers(); + } else + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + if (e.dimension != this.dimension) + { + if (e instanceof EntityPlayer) + { + e = WorldUtil.forceRespawnClient(this.dimension, e.world.getDifficulty().getId(), e.world.getWorldInfo().getTerrainType().getName(), + ((EntityPlayerMP) e).interactionManager.getGameType().getID()); + e.startRiding(this, true); + this.syncAdjustFlag = true; + } + } else + { + e.startRiding(this, true); + this.syncAdjustFlag = true; + } + } + } + } + } else + { + this.shouldMoveClient = buffer.readBoolean(); + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + @Override + public boolean allowDamageSource(DamageSource damageSource) + { + return !damageSource.isExplosion(); + } + + @Override + public List getItemsDropped() + { + return this.stacks; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public void setSizeInventory(int size) + { + this.stacks = NonNullList.withSize(size, ItemStack.EMPTY); + } + + @Override + public boolean isItemValidForSlot(int var1, ItemStack var2) + { + return false; + } + + @Override + public double getPacketRange() + { + return 50.0D; + } + + @Override + public UUID getOwnerUUID() + { + if (!this.getPassengers().isEmpty() && !(this.getPassengers().get(0) instanceof EntityPlayer)) + { + return null; + } + + UUID id; + + if (!this.getPassengers().isEmpty()) + { + id = this.getPassengers().get(0).getPersistentID(); + + this.persistantRiderUUID = id; + } else + { + id = this.persistantRiderUUID; + } + + return id; + } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double height = this.posY + (double) this.getEyeHeight(); + if (height > 255D) + height = 255D; + BlockPos blockpos = new BlockPos(this.posX, height, this.posZ); + return this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteor.java new file mode 100644 index 00000000..7c521a8f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteor.java @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.Iterator; +import java.util.List; + +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSourceIndirect; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.entity.ILaserTrackableFast; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class EntityMeteor extends Entity implements ILaserTrackableFast +{ + + private static final DataParameter SIZE = EntityDataManager.createKey(EntityMeteor.class, DataSerializers.VARINT); + public EntityLiving shootingEntity; + public int size; + + public EntityMeteor(World world) + { + super(world); + this.setSize(1.0F, 1.0F); + } + + public EntityMeteor(World world, double x, double y, double z, double motX, double motY, double motZ, int size) + { + this(world); + this.size = size; + this.setSize(1.0F, 1.0F); + this.setLocationAndAngles(x, y, z, this.rotationYaw, this.rotationPitch); + this.setPosition(x, y, z); + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + this.setSize(size); + } + + @Override + public void onUpdate() + { + this.setRotation(this.rotationYaw + 2F, this.rotationPitch + 2F); + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= 0.03999999910593033D; + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + + if (this.world.isRemote) + { + this.spawnParticles(); + } + + Vec3d currentPosition = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d nextPosition = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult collisionIntercept = this.world.rayTraceBlocks(currentPosition, nextPosition, true, true, false); + currentPosition = new Vec3d(this.posX, this.posY, this.posZ); + nextPosition = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (collisionIntercept != null) + { + nextPosition = new Vec3d(collisionIntercept.hitVec.x, collisionIntercept.hitVec.y, collisionIntercept.hitVec.z); + } + + Entity collidingEntity = null; + final List nearbyEntities = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(2.0D, 2.0D, 2.0D)); + double distanceToCollidingEntityIntercept = 0.0D; + final Iterator nearbyEntitiesIterator = nearbyEntities.iterator(); + final double entityBBPadding = 0.01D; + + while (nearbyEntitiesIterator.hasNext()) + { + final Entity nearbyEntity = (Entity) nearbyEntitiesIterator.next(); + + if (nearbyEntity.canBeCollidedWith() && !nearbyEntity.isEntityEqual(this.shootingEntity)) + { + final AxisAlignedBB nearbyEntityPaddedBB = nearbyEntity.getEntityBoundingBox().grow(entityBBPadding, entityBBPadding, entityBBPadding); + final RayTraceResult nearbyEntityIntercept = nearbyEntityPaddedBB.calculateIntercept(currentPosition, nextPosition); + + if (nearbyEntityIntercept != null) + { + final double distanceToNearbyEntityIntercept = currentPosition.distanceTo(nearbyEntityIntercept.hitVec); + + if (distanceToNearbyEntityIntercept < distanceToCollidingEntityIntercept || distanceToCollidingEntityIntercept == 0.0D) + { + collidingEntity = nearbyEntity; + distanceToCollidingEntityIntercept = distanceToNearbyEntityIntercept; + } + } + } + } + + if (collidingEntity != null) + { + collisionIntercept = new RayTraceResult(collidingEntity); + } + + if (collisionIntercept != null) + { + this.onImpact(collisionIntercept); + } + + if (this.posY <= -20 || this.posY >= 400) + { + this.setDead(); + } + } + + protected void spawnParticles() + { + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX, this.posY + 1D + Math.random(), this.posZ), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX + Math.random() / 2, this.posY + 1D + Math.random() / 2, this.posZ), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX, this.posY + 1D + Math.random(), this.posZ + Math.random()), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX - Math.random() / 2, this.posY + 1D + Math.random() / 2, this.posZ), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX, this.posY + 1D + Math.random(), this.posZ - Math.random()), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + } + + protected void onImpact(RayTraceResult movingObjPos) + { + if (!this.world.isRemote) + { + this.world.newExplosion(this, this.posX, this.posY, this.posZ, this.size / 3 + 2, false, true); + + if (movingObjPos != null) + { + BlockPos pos = movingObjPos.getBlockPos(); + if (pos == null) + { + if (movingObjPos.entityHit != null) + { + pos = this.world.getTopSolidOrLiquidBlock(movingObjPos.entityHit.getPosition()); + } else + { + pos = this.world.getTopSolidOrLiquidBlock(this.getPosition()); + } + } + BlockPos above = pos.up(); + if (this.world.getBlockState(above).getBlock() instanceof BlockAir) + { + this.world.setBlockState(above, GCBlocks.fallenMeteor.getDefaultState(), 3); + } + + if (movingObjPos.entityHit != null) + { + movingObjPos.entityHit.attackEntityFrom(EntityMeteor.causeMeteorDamage(this, this.shootingEntity), ConfigManagerCore.hardMode ? 12F : 6F); + } + } + } + + this.setDead(); + } + + @Override + public boolean canExplosionDestroyBlock(Explosion explosionIn, World worldIn, BlockPos pos, IBlockState blockStateIn, float p_174816_5_) + { + return ConfigManagerCore.meteorBlockDamageEnabled; + } + + public static DamageSource causeMeteorDamage(EntityMeteor par0EntityMeteor, Entity par1Entity) + { + if (par1Entity != null && par1Entity instanceof EntityPlayer) + { + I18n.translateToLocalFormatted("death." + "meteor", PlayerUtil.getName(((EntityPlayer) par1Entity)) + " was hit by a meteor! That's gotta hurt!"); + } + return new EntityDamageSourceIndirect("explosion", par0EntityMeteor, par1Entity).setProjectile(); + } + + @Override + protected void entityInit() + { + this.dataManager.register(SIZE, this.size); + this.noClip = true; + } + + public int getSize() + { + return this.dataManager.get(SIZE); + } + + /** + * Sets the state of creeper, -1 to idle and 1 to be 'in fuse' + */ + public void setSize(int par1) + { + this.dataManager.set(SIZE, Integer.valueOf(par1)); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound compound) + { + } + + @Override + protected void writeEntityToNBT(NBTTagCompound compound) + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteorChunk.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteorChunk.java new file mode 100644 index 00000000..fb725926 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteorChunk.java @@ -0,0 +1,464 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSourceIndirect; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class EntityMeteorChunk extends Entity implements IProjectile +{ + + private static final DataParameter IS_HOT = EntityDataManager.createKey(EntityMeteorChunk.class, DataSerializers.BOOLEAN); + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private Block inTile; + private int inData; + + public int canBePickedUp; + public Entity shootingEntity; + private int ticksInGround; + private int ticksInAir; + private boolean inGround; + private float randYawInc; + private float randPitchInc; + + private int knockbackStrength; + + public boolean isHot; + + public EntityMeteorChunk(World world) + { + super(world); + this.setSize(0.25F, 0.25F); + this.randPitchInc = rand.nextFloat() * 20 - 10; + this.randYawInc = rand.nextFloat() * 20 - 10; + } + + public EntityMeteorChunk(World par1World, EntityLivingBase par2EntityLivingBase, float speed) + { + super(par1World); + this.randPitchInc = rand.nextFloat() * 20 - 10; + this.randYawInc = rand.nextFloat() * 20 - 10; + this.shootingEntity = par2EntityLivingBase; + + if (par2EntityLivingBase instanceof EntityPlayer) + { + this.canBePickedUp = 1; + } + + this.setSize(0.5F, 0.5F); + this.setLocationAndAngles(par2EntityLivingBase.posX, par2EntityLivingBase.posY + par2EntityLivingBase.getEyeHeight(), par2EntityLivingBase.posZ, par2EntityLivingBase.rotationYaw, + par2EntityLivingBase.rotationPitch); + this.posX -= MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * 0.16F; + this.posY -= 0.10000000149011612D; + this.posZ -= MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * 0.16F; + this.setPosition(this.posX, this.posY, this.posZ); + this.motionX = -MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.motionZ = MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.motionY = -MathHelper.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.shoot(this.motionX, this.motionY, this.motionZ, speed * 1.5F, 1.0F); + } + + @Override + public void shoot(double headingX, double headingY, double headingZ, float speed, float randMod) + { + float f2 = MathHelper.sqrt(headingX * headingX + headingY * headingY + headingZ * headingZ); + headingX /= f2; + headingY /= f2; + headingZ /= f2; + headingX += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * randMod; + headingY += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * randMod; + headingZ += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * randMod; + headingX *= speed; + headingY *= speed; + headingZ *= speed; + this.motionX = headingX; + this.motionY = headingY; + this.motionZ = headingZ; + float f3 = MathHelper.sqrt(headingX * headingX + headingZ * headingZ); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(headingX, headingZ) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(headingY, f3) * Constants.RADIANS_TO_DEGREES; + this.ticksInGround = 0; + } + + @Override + @SideOnly(Side.CLIENT) + public void setVelocity(double par1, double par3, double par5) + { + this.motionX = par1; + this.motionY = par3; + this.motionZ = par5; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(par1 * par1 + par5 * par5); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(par1, par5) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(par3, f) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.ticksInGround = 0; + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (this.ticksExisted > 400) + { + if (this.isHot) + { + this.isHot = false; + this.setHot(this.isHot); + } + } else if (!this.world.isRemote) + { + this.setHot(this.isHot); + } + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(this.motionY, f) * Constants.RADIANS_TO_DEGREES; + } + + BlockPos pos = new BlockPos(this.xTile, this.yTile, this.zTile); + IBlockState stateIn = this.world.getBlockState(pos); + + if (!stateIn.getBlock().isAir(this.world.getBlockState(pos), this.world, pos)) + { + AxisAlignedBB axisalignedbb = stateIn.getCollisionBoundingBox(this.world, pos); + + if (axisalignedbb != null && axisalignedbb.contains(new Vec3d(this.posX, this.posY, this.posZ))) + { + this.inGround = true; + } + } + + if (this.inGround) + { + Block j = this.world.getBlockState(pos).getBlock(); + int k = j.getMetaFromState(this.world.getBlockState(pos)); + + if (j == this.inTile && k == this.inData) + { + ++this.ticksInGround; + + if (this.ticksInGround == 1200) + { + this.setDead(); + } + } else + { + this.inGround = false; + this.motionX *= this.rand.nextFloat() * 0.2F; + this.motionY *= this.rand.nextFloat() * 0.2F; + this.motionZ *= this.rand.nextFloat() * 0.2F; + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } else + { + ++this.ticksInAir; + Vec3d vec3 = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec31 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult movingobjectposition = this.world.rayTraceBlocks(vec3, vec31, false, true, false); + vec3 = new Vec3d(this.posX, this.posY, this.posZ); + vec31 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (movingobjectposition != null) + { + vec31 = new Vec3d(movingobjectposition.hitVec.x, movingobjectposition.hitVec.y, movingobjectposition.hitVec.z); + } + + this.rotationPitch += 1F; + + Entity entity = null; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D, 1.0D, 1.0D)); + double d0 = 0.0D; + int l; + float f1; + final double border = 0.3D; + + for (l = 0; l < list.size(); ++l) + { + Entity entity1 = list.get(l); + + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) + { + AxisAlignedBB axisalignedbb1 = entity1.getEntityBoundingBox().grow(border, border, border); + RayTraceResult movingobjectposition1 = axisalignedbb1.calculateIntercept(vec3, vec31); + + if (movingobjectposition1 != null) + { + double d1 = vec3.distanceTo(movingobjectposition1.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) + { + movingobjectposition = new RayTraceResult(entity); + } + + if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer) movingobjectposition.entityHit; + + if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer) this.shootingEntity).canAttackPlayer(entityplayer)) + { + movingobjectposition = null; + } + } + + float f2; + float f3; + double damage = ConfigManagerCore.hardMode ? 3.2D : 1.6D; + + if (movingobjectposition != null) + { + if (movingobjectposition.entityHit != null) + { + f2 = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + int i1 = MathHelper.ceil(f2 * damage); + + DamageSource damagesource = null; + + if (this.shootingEntity == null) + { + damagesource = new EntityDamageSourceIndirect("meteor_chunk", this, this).setProjectile(); + } else + { + damagesource = new EntityDamageSourceIndirect("meteor_chunk", this, this.shootingEntity).setProjectile(); + } + + if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman)) + { + movingobjectposition.entityHit.setFire(2); + } + + if (movingobjectposition.entityHit.attackEntityFrom(damagesource, i1)) + { + if (movingobjectposition.entityHit instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase) movingobjectposition.entityHit; + + if (!this.world.isRemote) + { + entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1); + } + + if (this.knockbackStrength > 0) + { + f3 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (f3 > 0.0F) + { + movingobjectposition.entityHit.addVelocity(this.motionX * this.knockbackStrength * 0.6000000238418579D / f3, 0.1D, + this.motionZ * this.knockbackStrength * 0.6000000238418579D / f3); + } + } + + if (this.shootingEntity != null) + { + EnchantmentHelper.applyThornEnchantments(entitylivingbase, this.shootingEntity); + EnchantmentHelper.applyArthropodEnchantments((EntityLivingBase) this.shootingEntity, entitylivingbase); + } + + if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer + && this.shootingEntity instanceof EntityPlayerMP) + { + ((EntityPlayerMP) this.shootingEntity).connection.sendPacket(new SPacketChangeGameState(6, 0.0F)); + } + } + + if (!(movingobjectposition.entityHit instanceof EntityEnderman)) + { + this.setDead(); + } + } else + { + this.motionX *= -0.10000000149011612D; + this.motionY *= -0.10000000149011612D; + this.motionZ *= -0.10000000149011612D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } else + { + this.xTile = movingobjectposition.getBlockPos().getX(); + this.yTile = movingobjectposition.getBlockPos().getY(); + this.zTile = movingobjectposition.getBlockPos().getZ(); + IBlockState state = this.world.getBlockState(movingobjectposition.getBlockPos()); + this.inTile = state.getBlock(); + this.inData = this.inTile.getMetaFromState(state); + this.motionX = (float) (movingobjectposition.hitVec.x - this.posX); + this.motionY = (float) (movingobjectposition.hitVec.y - this.posY); + this.motionZ = (float) (movingobjectposition.hitVec.z - this.posZ); + f2 = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / f2 * 0.05000000074505806D; + this.posY -= this.motionY / f2 * 0.05000000074505806D; + this.posZ -= this.motionZ / f2 * 0.05000000074505806D; + this.inGround = true; + + IBlockState hitState = this.world.getBlockState(movingobjectposition.getBlockPos()); + if (!this.inTile.isAir(hitState, this.world, movingobjectposition.getBlockPos())) + { + this.inTile.onEntityCollision(this.world, movingobjectposition.getBlockPos(), hitState, this); + } + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + f2 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (!this.onGround) + { + this.rotationPitch += this.randPitchInc; + this.rotationYaw += this.randYawInc; + } + + float f4 = 0.99F; + f1 = 0.05F; + + if (this.isInWater()) + { + for (int j1 = 0; j1 < 4; ++j1) + { + f3 = 0.25F; + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * f3, this.posY - this.motionY * f3, this.posZ - this.motionZ * f3, this.motionX, this.motionY, + this.motionZ); + } + this.isHot = false; + f4 = 0.8F; + } + + this.motionX *= f4; + this.motionY *= f4; + this.motionZ *= f4; + this.motionY -= TransformerHooks.getGravityForEntity(this); + this.setPosition(this.posX, this.posY, this.posZ); + this.doBlockCollisions(); + } + } + + @Override + protected void entityInit() + { + this.dataManager.register(IS_HOT, false); + } + + public boolean isHot() + { + return this.dataManager.get(IS_HOT); + } + + public void setHot(boolean isHot) + { + this.dataManager.set(IS_HOT, isHot); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbttagcompound) + { + + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbttagcompound) + { + + } + + @Override + public void onCollideWithPlayer(EntityPlayer entityPlayer) + { + if (!this.world.isRemote && this.inGround) + { + boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && entityPlayer.capabilities.isCreativeMode; + + if (this.canBePickedUp == 1 && !entityPlayer.inventory.addItemStackToInventory(new ItemStack(GCItems.meteorChunk, 1, 0))) + { + flag = false; + } + + if (flag) + { + this.playSound(SoundEvents.ENTITY_ITEM_PICKUP, 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + entityPlayer.onItemPickup(this, 1); + this.setDead(); + } + } + } + + @Override + public boolean canBeAttackedWithItem() + { + return false; + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 10.0; + return distance < d0 * d0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityParachest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityParachest.java new file mode 100644 index 00000000..5fb1374f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityParachest.java @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.ArrayList; +import java.util.Collections; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.tile.TileEntityParaChest; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class EntityParachest extends Entity implements IPacketReceiver +{ + + public NonNullList cargo; + public int fuelLevel; + private boolean placedChest; + public EnumDyeColor color = EnumDyeColor.WHITE; + + public EntityParachest(World world, NonNullList cargo, int fuelLevel) + { + this(world); + this.cargo = NonNullList.withSize(cargo.size(), ItemStack.EMPTY); + Collections.copy(this.cargo, cargo); + this.placedChest = false; + this.fuelLevel = fuelLevel; + } + + public EntityParachest(World world) + { + super(world); + this.setSize(1.0F, 1.0F); + } + + @Override + protected void entityInit() + { + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + int size = 56; + if (nbt.hasKey("CargoLength")) + { + size = nbt.getInteger("CargoLength"); + } + this.cargo = NonNullList.withSize(size, ItemStack.EMPTY); + + ItemStackHelper.loadAllItems(nbt, this.cargo); + + this.placedChest = nbt.getBoolean("placedChest"); + this.fuelLevel = nbt.getInteger("FuelLevel"); + + if (nbt.hasKey("color")) + { + this.color = EnumDyeColor.byDyeDamage(nbt.getInteger("color")); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("CargoLength", this.cargo.size()); + ItemStackHelper.saveAllItems(nbt, this.cargo); + + nbt.setBoolean("placedChest", this.placedChest); + nbt.setInteger("FuelLevel", this.fuelLevel); + nbt.setInteger("color", this.color.getDyeDamage()); + } + + @Override + public void onUpdate() + { + if (!this.placedChest) + { + if (this.onGround && !this.world.isRemote) + { + for (int i = 0; i < 100; i++) + { + final int x = MathHelper.floor(this.posX); + final int y = MathHelper.floor(this.posY); + final int z = MathHelper.floor(this.posZ); + + if (tryPlaceAtPos(new BlockPos(x, y + i, z))) + { + return; + } + } + + for (int size = 1; size < 5; ++size) + { + for (int xOff = -size; xOff <= size; xOff++) + { + for (int yOff = -size; yOff <= size; yOff++) + { + for (int zOff = -size; zOff <= size; zOff++) + { + final int x = MathHelper.floor(this.posX) + xOff; + final int y = MathHelper.floor(this.posY) + yOff; + final int z = MathHelper.floor(this.posZ) + zOff; + + if (tryPlaceAtPos(new BlockPos(x, y, z))) + { + return; + } + } + } + } + } + + if (this.cargo != null) + { + for (final ItemStack stack : this.cargo) + { + final EntityItem e = new EntityItem(this.world, this.posX, this.posY, this.posZ, stack); + this.world.spawnEntity(e); + } + } + + this.placedChest = true; + this.setDead(); + } else + { + this.motionY = -0.35; + } + + this.move(MoverType.SELF, 0, this.motionY, 0); + } + + if (!this.world.isRemote && this.ticksExisted % 5 == 0) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketDynamic(this), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 64.0)); + } + } + + private boolean tryPlaceAtPos(BlockPos pos) + { + IBlockState state = this.world.getBlockState(pos); + Block block = state.getBlock(); + + if (block.getMaterial(state).isReplaceable()) + { + if (this.placeChest(pos)) + { + this.placedChest = true; + this.setDead(); + return true; + } + } + return false; + } + + private boolean placeChest(BlockPos pos) + { + if (this.world.setBlockState(pos, GCBlocks.parachest.getDefaultState(), 3)) + { + if (this.cargo != null) + { + final TileEntity te = this.world.getTileEntity(pos); + + if (te instanceof TileEntityParaChest) + { + final TileEntityParaChest chest = (TileEntityParaChest) te; + + chest.inventory = NonNullList.withSize(this.cargo.size() + 1, ItemStack.EMPTY); + chest.color = this.color; + + Collections.copy(chest.getInventory(), this.cargo); + + chest.fuelTank.fill(FluidRegistry.getFluidStack(GCFluids.fluidFuel.getName().toLowerCase(), this.fuelLevel), true); + } else + { + for (ItemStack stack : this.cargo) + { + final EntityItem e = new EntityItem(this.world, this.posX, this.posY, this.posZ, stack); + this.world.spawnEntity(e); + } + } + } + return true; + } + + return false; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (!this.world.isRemote) + { + sendData.add(this.color.getDyeDamage()); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world.isRemote) + { + this.color = EnumDyeColor.byDyeDamage(buffer.readInt()); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntitySkeletonBoss.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntitySkeletonBoss.java new file mode 100644 index 00000000..a4c4d980 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntitySkeletonBoss.java @@ -0,0 +1,395 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.List; +import java.util.Random; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.BossInfo; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.advancement.GCTriggers; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class EntitySkeletonBoss extends EntityBossBase implements IEntityBreathable, IRangedAttackMob, IIgnoreShift +{ + + protected long ticks = 0; + private static final ItemStack defaultHeldItem = new ItemStack(Items.BOW, 1); + + public int throwTimer; + public int postThrowDelay = 20; + public Entity thrownEntity; + public Entity targetEntity; + + public EntitySkeletonBoss(World par1World) + { + super(par1World); + this.setSize(1.5F, 4.0F); + this.isImmuneToFire = true; + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIArrowAttack(this, 1.0D, 25, 10.0F)); + this.tasks.addTask(2, new EntityAIWander(this, 1.0D)); + this.tasks.addTask(3, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(3, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, false, true)); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + double difficulty = 0; + switch (this.world.getDifficulty()) + { + case HARD: + difficulty = 2D; + break; + case NORMAL: + difficulty = 1D; + break; + } + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(150.0F * ConfigManagerCore.dungeonBossHealthMod); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D + 0.075 * difficulty); + } + + @Override + protected void onDeathUpdate() + { + super.onDeathUpdate(); + + if (!this.world.isRemote) + { + if (this.deathTicks == 100) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(PacketSimple.EnumSimplePacket.C_PLAY_SOUND_BOSS_DEATH, GCCoreUtil.getDimensionID(this.world), new Object[] + {1.5F}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + } + } + } + + @Override + public boolean isInWater() + { + return false; + } + + @Override + public boolean handleWaterMovement() + { + return false; + } + + @Override + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + final double offsetX = Math.sin(-this.rotationYawHead / Constants.RADIANS_TO_DEGREES_D); + final double offsetZ = Math.cos(this.rotationYawHead / Constants.RADIANS_TO_DEGREES_D); + final double offsetY = 2 * Math.cos((this.throwTimer + this.postThrowDelay) * 0.05F); + + passenger.setPosition(this.posX + offsetX, this.posY + this.getMountedYOffset() + passenger.getYOffset() + offsetY, this.posZ + offsetZ); + } + } + + @Override + public void knockBack(Entity par1Entity, float par2, double par3, double par5) + { + } + + @Override + public void onCollideWithPlayer(EntityPlayer entityPlayer) + { + if (!this.isAIDisabled() && this.getPassengers().isEmpty() && this.postThrowDelay == 0 && this.throwTimer == 0 && entityPlayer.equals(this.targetEntity) && this.deathTicks == 0) + { + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_PLAY_SOUND_BOSS_LAUGH, GCCoreUtil.getDimensionID(this.world), new Object[] + {}), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + entityPlayer.startRiding(this); + } + + this.throwTimer = 40; + } + + super.onCollideWithPlayer(entityPlayer); + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + this.playSound(GCSounds.bossOoh, this.getSoundVolume(), this.getSoundPitch() + 1.0F); + return null; + } + + @Override + protected SoundEvent getDeathSound() + { + return null; + } + +// @Override +// @SideOnly(Side.CLIENT) +// public ItemStack getHeldItem() +// { +// return EntitySkeletonBoss.defaultHeldItem; +// } + + @Override + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.UNDEAD; + } + + @Override + public void onLivingUpdate() + { + this.ticks++; + + for (int j2 = 0; j2 < world.playerEntities.size(); ++j2) // World#isAnyPlayerWithinRangeAt + { + EntityPlayer entityplayer = world.playerEntities.get(j2); + + if (EntitySelectors.NOT_SPECTATING.apply(entityplayer) && entityplayer instanceof EntityPlayerMP) + { + double d0 = entityplayer.getDistanceSq(this.posX, this.posY, this.posZ); + + if (d0 < 20 * 20) + { + GCTriggers.FIND_MOON_BOSS.trigger(((EntityPlayerMP) entityplayer)); + + } + } + } + + if (!this.world.isRemote && this.getHealth() <= 150.0F * ConfigManagerCore.dungeonBossHealthMod / 2) + { + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + } + + final EntityPlayer player = this.world.getClosestPlayer(this.posX, this.posY, this.posZ, 20.0, false); + + if (player != null && !player.equals(this.targetEntity)) + { + if (this.getDistanceSq(player) < 400.0D) + { + this.getNavigator().getPathToEntityLiving(player); + this.targetEntity = player; + } + } else + { + this.targetEntity = null; + } + + if (this.throwTimer > 0) + { + this.throwTimer--; + } + + if (this.postThrowDelay > 0) + { + this.postThrowDelay--; + } + + if (!this.getPassengers().isEmpty() && this.throwTimer == 0) + { + this.postThrowDelay = 20; + + this.thrownEntity = this.getPassengers().get(0); + + if (!this.world.isRemote) + { + this.removePassengers(); + } + } + + if (this.thrownEntity != null && this.postThrowDelay == 18) + { + double d0 = this.posX - this.thrownEntity.posX; + double d1; + + for (d1 = this.posZ - this.thrownEntity.posZ; d0 * d0 + d1 * d1 < 1.0E-4D; d1 = (Math.random() - Math.random()) * 0.01D) + { + d0 = (Math.random() - Math.random()) * 0.01D; + } + + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_PLAY_SOUND_BOW, GCCoreUtil.getDimensionID(this.world), new Object[] + {}), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + } + ((EntityPlayer) this.thrownEntity).attackedAtYaw = (float) Math.atan2(d1, d0) * Constants.RADIANS_TO_DEGREES - this.rotationYaw; + + this.thrownEntity.isAirBorne = true; + final float f = MathHelper.sqrt(d0 * d0 + d1 * d1); + final float f1 = 2.4F; + this.thrownEntity.motionX /= 2.0D; + this.thrownEntity.motionY /= 2.0D; + this.thrownEntity.motionZ /= 2.0D; + this.thrownEntity.motionX -= d0 / f * f1; + this.thrownEntity.motionY += (double) f1 / 5; + this.thrownEntity.motionZ -= d1 / f * f1; + + if (this.thrownEntity.motionY > 0.4000000059604645D) + { + this.thrownEntity.motionY = 0.4000000059604645D; + } + } + + super.onLivingUpdate(); + } + + @Override + protected Item getDropItem() + { + return Items.ARROW; + } + + @Override + public EntityItem entityDropItem(ItemStack par1ItemStack, float par2) + { + final EntityItem entityitem = new EntityItem(this.world, this.posX, this.posY + par2, this.posZ, par1ItemStack); + entityitem.motionY = -2.0D; + entityitem.setDefaultPickupDelay(); + if (this.captureDrops) + { + this.capturedDrops.add(entityitem); + } else + { + this.world.spawnEntity(entityitem); + } + return entityitem; + } + + @Override + protected void dropFewItems(boolean b, int i) + { + if (this.rand.nextInt(200) - i >= 5) + { + return; + } + + if (i > 0) + { + final ItemStack var2 = new ItemStack(Items.BOW); + EnchantmentHelper.addRandomEnchantment(this.rand, var2, 5, false); + this.entityDropItem(var2, 0.0F); + } else + { + this.dropItem(Items.BOW, 1); + } + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase target, float f) + { + if (!this.getPassengers().isEmpty()) + { + return; + } + + EntityTippedArrow arrow = new EntityTippedArrow(this.world, this); + double d0 = target.posX - this.posX; + double d1 = target.getEntityBoundingBox().minY + (double) (target.height / 3.0F) - arrow.posY; + double d2 = target.posZ - this.posZ; + double d3 = MathHelper.sqrt(d0 * d0 + d2 * d2); + arrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.world.getDifficulty().getId() * 4)); + + this.playSound(SoundEvents.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); + this.world.spawnEntity(arrow); + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return true; + } + + @Override + public ItemStack getGuaranteedLoot(Random rand) + { + List stackList = GalacticraftRegistry.getDungeonLoot(1); + return stackList.get(rand.nextInt(stackList.size())).copy(); + } + + @Override + public int getChestTier() + { + return 1; + } + + @Override + public void dropKey() + { + this.entityDropItem(new ItemStack(GCItems.key, 1, 0), 0.5F); + } + + @Override + public BossInfo.Color getHealthBarColor() + { + return BossInfo.Color.GREEN; + } + + @Override + public void setSwingingArms(boolean swingingArms) + { + // TODO Auto-generated method stub + // Unused in this Galacticraft entity + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityTier1Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityTier1Rocket.java new file mode 100644 index 00000000..9aea380d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityTier1Rocket.java @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +//import calclavia.api.icbm.IMissile; + +public class EntityTier1Rocket extends EntityTieredRocket +{ + + public EntityTier1Rocket(World par1World) + { + super(par1World); + this.setSize(1.2F, 3.5F); +// this.yOffset = 1.5F; + } + + public EntityTier1Rocket(World par1World, double par2, double par4, double par6, EnumRocketType rocketType) + { + super(par1World, par2, par4, par6); + this.rocketType = rocketType; + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + this.setSize(1.2F, 3.5F); +// this.yOffset = 1.5F; + } + + @Override + public double getMountedYOffset() + { + return 0.3D; + } + + @Override + public float getRotateOffset() + { + return -1.5F; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(GCItems.rocketTier1, 1, this.rocketType.getIndex()); + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + int i; + + if (this.timeUntilLaunch >= 100) + { + i = Math.abs(this.timeUntilLaunch / 100); + } else + { + i = 1; + } + + if ((this.getLaunched() || this.launchPhase == EnumLaunchPhase.IGNITED.ordinal() && this.rand.nextInt(i) == 0) && !ConfigManagerCore.disableSpaceshipParticles && this.hasValidFuel()) + { + if (this.world.isRemote) + { + this.spawnParticles(this.getLaunched()); + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal() && this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.LAUNCHED.ordinal()) + { + double d = this.timeSinceLaunch / 150; + + if (this.world.provider instanceof IGalacticraftWorldProvider && ((IGalacticraftWorldProvider) this.world.provider).hasNoAtmosphere()) + { + d = Math.min(d * 1.2, 1.6); + } else + { + d = Math.min(d, 1); + } + + if (d != 0.0) + { + this.motionY = -d * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + } + } else + { + this.motionY -= 0.008D; + } + + double multiplier = 1.0D; + + if (this.world.provider instanceof IGalacticraftWorldProvider) + { + multiplier = ((IGalacticraftWorldProvider) this.world.provider).getFuelUsageMultiplier(); + + if (multiplier <= 0) + { + multiplier = 1; + } + } + + if (this.timeSinceLaunch % MathHelper.floor(3 * (1 / multiplier)) == 0) + { + this.removeFuel(1); + if (!this.hasValidFuel()) + { + this.stopRocketSound(); + } + } + } else if (!this.hasValidFuel() && this.getLaunched() && !this.world.isRemote) + { + if (Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 10 != 0.0) + { + this.motionY -= Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 20; + } + } + } + + @Override + public void onTeleport(EntityPlayerMP player) + { + final EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + if (this.stacks == null || this.stacks.isEmpty()) + { + stats.setRocketStacks(NonNullList.withSize(2, ItemStack.EMPTY)); + } else + { + stats.setRocketStacks(this.stacks); + } + + stats.setRocketType(this.rocketType.getIndex()); + stats.setRocketItem(GCItems.rocketTier1); + stats.setFuelLevel(this.fuelTank.getFluidAmount()); + } + } + + protected void spawnParticles(boolean launched) + { + if (!this.isDead) + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double x1 = 2 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double z1 = 2 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double y1 = 2 * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null) + { + double modifier = this.posY - this.targetVec.getY(); + modifier = Math.min(Math.max(modifier, 120.0), 300.0); + x1 *= modifier / 100.0D; + y1 *= modifier / 100.0D; + z1 *= modifier / 100.0D; + } + + double y = this.prevPosY + (this.posY - this.prevPosY) + y1 - this.motionY + 1.2D; + + final double x2 = this.posX + x1 - this.motionX; + final double z2 = this.posZ + z1 - this.motionZ; + + EntityLivingBase riddenByEntity = !this.getPassengers().isEmpty() && this.getPassengers().get(0) instanceof EntityLivingBase ? (EntityLivingBase) this.getPassengers().get(0) : null; + + if (this.getLaunched()) + { + Vector3 motionVec = new Vector3(x1, y1, z1); + Object[] rider = {riddenByEntity}; + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y, z2 + 0.4 - this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y, z2 + 0.4 - this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y, z2 - 0.4 + this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y, z2 - 0.4 + this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y, z2 + 0.4D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y, z2 - 0.4D), motionVec, rider); + + } else if (this.ticksExisted % 2 == 0) + { + Object[] rider = {riddenByEntity}; + y += 0.6D; + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y, z2 + 0.4 - this.rand.nextDouble() / 10D), + new Vector3(this.rand.nextDouble() / 2.0 - 0.25, 0.0, this.rand.nextDouble() / 2.0 - 0.25), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y, z2 + 0.4 - this.rand.nextDouble() / 10D), + new Vector3(this.rand.nextDouble() / 2.0 - 0.25, 0.0, this.rand.nextDouble() / 2.0 - 0.25), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y, z2 - 0.4 + this.rand.nextDouble() / 10D), + new Vector3(this.rand.nextDouble() / 2.0 - 0.25, 0.0, this.rand.nextDouble() / 2.0 - 0.25), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y, z2 - 0.4 + this.rand.nextDouble() / 10D), + new Vector3(this.rand.nextDouble() / 2.0 - 0.25, 0.0, this.rand.nextDouble() / 2.0 - 0.25), rider); + } + } + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return !this.isDead && entityPlayer.getDistanceSq(this) <= 64.0D; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeEntityToNBT(par1NBTTagCompound); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readEntityFromNBT(par1NBTTagCompound); + } + + @Override + public int getPreLaunchWait() + { + return 400; + } + + @Override + public List getItemsDropped(List droppedItems) + { + super.getItemsDropped(droppedItems); + ItemStack rocket = new ItemStack(GCItems.rocketTier1, 1, this.rocketType.getIndex()); + rocket.setTagCompound(new NBTTagCompound()); + rocket.getTagCompound().setInteger("RocketFuel", this.fuelTank.getFluidAmount()); + droppedItems.add(rocket); + return droppedItems; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public boolean isDockValid(IFuelDock dock) + { + return dock instanceof TileEntityLandingPad; + } + + @Override + public int getRocketTier() + { + return 1; + } + + @Override + public int getFuelTankCapacity() + { + return 1000; + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public double getOnPadYOffset() + { + return 0.0D; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBoss.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBoss.java new file mode 100644 index 00000000..2bf6a949 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBoss.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; + +public interface IBoss +{ + + void onBossSpawned(TileEntityDungeonSpawner spawner); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProvider.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProvider.java new file mode 100644 index 00000000..64b4abec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProvider.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +public interface IBubbleProvider +{ + + float getBubbleSize(); + + void setBubbleVisible(boolean shouldRender); + + boolean getBubbleVisible(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProviderColored.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProviderColored.java new file mode 100644 index 00000000..286cabd2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProviderColored.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +/** + * To be combined with IBubbleProvider in the next major update + */ +public interface IBubbleProviderColored extends IBubbleProvider +{ + + Vector3 getColor(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IControllableEntity.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IControllableEntity.java new file mode 100644 index 00000000..f3872794 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IControllableEntity.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +public interface IControllableEntity +{ + + boolean pressKey(int key); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IScaleableFuelLevel.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IScaleableFuelLevel.java new file mode 100644 index 00000000..5585910c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IScaleableFuelLevel.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +public interface IScaleableFuelLevel +{ + + int getScaledFuelLevel(int scale); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/ITumblable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/ITumblable.java new file mode 100644 index 00000000..746c07ef --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/ITumblable.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +public interface ITumblable +{ + + public void setTumbling(float value); + + public float getTumbleAngle(float partial); + + public float getTumbleAxisX(); + + public float getTumbleAxisZ(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/InventoryEntity.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/InventoryEntity.java new file mode 100644 index 00000000..81742ba6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/InventoryEntity.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; + +public abstract class InventoryEntity extends NetworkedEntity implements IInventory +{ + + protected NonNullList stacks = NonNullList.withSize(0, ItemStack.EMPTY); + + public InventoryEntity(World par1World) + { + super(par1World); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + ItemStackHelper.loadAllItems(nbt, this.stacks); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + ItemStackHelper.saveAllItems(nbt, this.stacks); + } + + @Override + public ItemStack getStackInSlot(int var1) + { + return this.stacks.get(var1); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return true; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + for (int i = 0; i < this.stacks.size(); ++i) + { + this.stacks.set(i, ItemStack.EMPTY); + } + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/NetworkedEntity.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/NetworkedEntity.java new file mode 100644 index 00000000..04c1e8ed --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/NetworkedEntity.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class NetworkedEntity extends Entity implements IPacketReceiver +{ + + public NetworkedEntity(World par1World) + { + super(par1World); + + if (par1World != null && par1World.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + PacketDynamic packet = new PacketDynamic(this); + if (this.networkedDataChanged()) + { + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToAllAround(packet, new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, this.getPacketRange())); + } else + { + GalacticraftCore.packetPipeline.sendToServer(packet); + } + } + } + + public abstract boolean networkedDataChanged(); + + public abstract double getPacketRange(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStats.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStats.java new file mode 100644 index 00000000..acc3b242 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStats.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.ref.WeakReference; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilitySerializable; + +public class CapabilityProviderStats implements ICapabilitySerializable +{ + + private EntityPlayerMP owner; + private GCPlayerStats statsCapability; + + public CapabilityProviderStats(EntityPlayerMP owner) + { + this.owner = owner; + this.statsCapability = GCCapabilities.GC_STATS_CAPABILITY.getDefaultInstance(); + this.statsCapability.setPlayer(new WeakReference<>(this.owner)); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + return capability == GCCapabilities.GC_STATS_CAPABILITY; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (GCCapabilities.GC_STATS_CAPABILITY != null && capability == GCCapabilities.GC_STATS_CAPABILITY) + { + return GCCapabilities.GC_STATS_CAPABILITY.cast(statsCapability); + } + + return null; + } + + @Override + public NBTTagCompound serializeNBT() + { + NBTTagCompound nbt = new NBTTagCompound(); + statsCapability.saveNBTData(nbt); + return nbt; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + statsCapability.loadNBTData(nbt); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStatsClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStatsClient.java new file mode 100644 index 00000000..737e9166 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStatsClient.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; + +public class CapabilityProviderStatsClient implements ICapabilityProvider +{ + + private EntityPlayerSP owner; + private GCPlayerStatsClient statsCapability; + + public CapabilityProviderStatsClient(EntityPlayerSP owner) + { + this.owner = owner; + this.statsCapability = GCCapabilities.GC_STATS_CLIENT_CAPABILITY.getDefaultInstance(); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + return capability == GCCapabilities.GC_STATS_CLIENT_CAPABILITY; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (GCCapabilities.GC_STATS_CLIENT_CAPABILITY != null && capability == GCCapabilities.GC_STATS_CLIENT_CAPABILITY) + { + return GCCapabilities.GC_STATS_CLIENT_CAPABILITY.cast(statsCapability); + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/EnumGravity.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/EnumGravity.java new file mode 100644 index 00000000..59948053 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/EnumGravity.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +public enum EnumGravity +{ + + down(0, 1.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F), + up(1, 1.0F, 0.0F, 0.0F, -1.0F, 0.0F, -1.0F, 0.0F, 0.0F, -1.0F, 0.0F, 0.0F, 1.0F, 0.0F), + west(2, 0.0F, -1.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 0.0F, 0.0F, -1.0F, 1.0F, 0.0F), + east(3, 0.0F, 1.0F, -1.0F, 0.0F, 0.0F, 0.0F, -0.5F, -1.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.0F), + south(4, 1.0F, 0.0F, 0.0F, 0.0F, -1.0F, 0.5F, 0.0F, 0.0F, 0.0F, -1.0F, 0.0F, 1.0F, 1.0F), + north(5, 1.0F, 0.0F, 0.0F, 0.0F, 1.0F, -0.5F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 1.0F, -1.0F); + + private final int intValue; + private final float pitchGravityX; + private final float pitchGravityY; + private final float yawGravityX; + private final float yawGravityY; + private final float yawGravityZ; + private final float thetaX; + private final float thetaZ; + private final float sneakVecX; + private final float sneakVecY; + private final float sneakVecZ; + private final float eyeVecX; + private final float eyeVecY; + private final float eyeVecZ; + private final static EnumGravity[] GDirections = + {down, up, west, east, south, north}; + + EnumGravity(int value, float pitchX, float pitchY, float yawX, float yawY, float yawZ, float thetaX, float thetaZ, float sneakX, float sneakY, float sneakZ, float eyeX, float eyeY, float eyeZ) + { + this.intValue = value; + this.pitchGravityX = pitchX; + this.pitchGravityY = pitchY; + this.yawGravityX = yawX; + this.yawGravityY = yawY; + this.yawGravityZ = yawZ; + this.thetaX = thetaX; + this.thetaZ = thetaZ; + this.sneakVecX = sneakX; + this.sneakVecY = sneakY; + this.sneakVecZ = sneakZ; + this.eyeVecX = eyeX; + this.eyeVecY = eyeY; + this.eyeVecZ = eyeZ; + } + + public int getIntValue() + { + return intValue; + } + + public float getPitchGravityX() + { + return pitchGravityX; + } + + public float getPitchGravityY() + { + return pitchGravityY; + } + + public float getYawGravityX() + { + return yawGravityX; + } + + public float getYawGravityY() + { + return yawGravityY; + } + + public float getYawGravityZ() + { + return yawGravityZ; + } + + public float getThetaX() + { + return thetaX; + } + + public float getThetaZ() + { + return thetaZ; + } + + public float getSneakVecX() + { + return sneakVecX; + } + + public float getSneakVecY() + { + return sneakVecY; + } + + public float getSneakVecZ() + { + return sneakVecZ; + } + + public float getEyeVecX() + { + return eyeVecX; + } + + public float getEyeVecY() + { + return eyeVecY; + } + + public float getEyeVecZ() + { + return eyeVecZ; + } + + public static EnumGravity[] getGDirections() + { + return GDirections; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/FreefallHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/FreefallHandler.java new file mode 100644 index 00000000..e96f56ea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/FreefallHandler.java @@ -0,0 +1,673 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import micdoodle8.mods.galacticraft.api.event.ZeroGravityEvent; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.dimension.SpinManager; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityFlying; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class FreefallHandler +{ + + private double pPrevMotionX; + public double pPrevMotionY; + private double pPrevMotionZ; + private float jetpackBoost; + private double pPrevdY; + public boolean sneakLast; + public boolean onWall; + + public int pjumpticks = 0; + private GCPlayerStatsClient stats; + + public FreefallHandler(GCPlayerStatsClient statsClientCapability) + { + stats = statsClientCapability; + } + + public boolean testFreefall(EntityPlayer player) + { + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.InFreefall(player); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (zeroGEvent.isCanceled()) + { + return false; + } + + // Test whether feet are on a block, also stops the login glitch + int playerFeetOnY = (int) (player.getEntityBoundingBox().minY - 0.01D); + int xx = MathHelper.floor(player.posX); + int zz = MathHelper.floor(player.posZ); + BlockPos pos = new BlockPos(xx, playerFeetOnY, zz); + IBlockState state = player.world.getBlockState(pos); + Block b = state.getBlock(); + if (b.getMaterial(state) != Material.AIR && !(b instanceof BlockLiquid)) + { + double blockYmax; + if (b == GCBlocks.platform) + blockYmax = playerFeetOnY + 1.0D; + else + blockYmax = playerFeetOnY + b.getBoundingBox(state, player.world, pos).maxY; + if (player.getEntityBoundingBox().minY - blockYmax < 0.01D && player.getEntityBoundingBox().minY - blockYmax > -0.5D) + { + player.onGround = true; + if (player.getEntityBoundingBox().minY - blockYmax > 0D) + { + player.posY -= player.getEntityBoundingBox().minY - blockYmax; + player.setEntityBoundingBox(player.getEntityBoundingBox().offset(0, blockYmax - player.getEntityBoundingBox().minY, 0)); + } else if (b.canCollideCheck(player.world.getBlockState(new BlockPos(xx, playerFeetOnY, zz)), false)) + { + BlockPos offsetPos = new BlockPos(xx, playerFeetOnY, zz); + AxisAlignedBB collisionBox = b.getCollisionBoundingBox(player.world.getBlockState(offsetPos), player.world, offsetPos); + if (collisionBox != null && collisionBox.intersects(player.getEntityBoundingBox())) + { + player.posY -= player.getEntityBoundingBox().minY - blockYmax; + player.setEntityBoundingBox(player.getEntityBoundingBox().offset(0, blockYmax - player.getEntityBoundingBox().minY, 0)); + } + } + return false; + } + } + return true; + } + + @SideOnly(Side.CLIENT) + private boolean testFreefall(EntityPlayerSP p, boolean flag) + { + World world = p.world; + WorldProvider worldProvider = world.provider; + if (!(worldProvider instanceof IZeroGDimension)) + { + return false; + } + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.InFreefall(p); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (zeroGEvent.isCanceled()) + { + return false; + } + if (this.pjumpticks > 0 || (stats.isSsOnGroundLast() && p.movementInput.jump)) + { + return false; + } + + if (p.getRidingEntity() != null) + { + Entity e = p.getRidingEntity(); + if (e instanceof EntitySpaceshipBase) + { + return ((EntitySpaceshipBase) e).getLaunched(); + } + if (e instanceof EntityLanderBase) + { + return false; + } + // TODO: should check whether lander has landed (whatever that + // means) + // TODO: could check other ridden entities - every entity should + // have its own freefall check :( + } + + // This is an "on the ground" check + if (!flag) + { + return false; + } else + { + float rY = p.rotationYaw % 360F; + double zreach = 0D; + double xreach = 0D; + if (rY < 80F || rY > 280F) + { + zreach = 0.2D; + } + if (rY < 170F && rY > 10F) + { + xreach = 0.2D; + } + if (rY < 260F && rY > 100F) + { + zreach = -0.2D; + } + if (rY < 350F && rY > 190F) + { + xreach = -0.2D; + } + AxisAlignedBB playerReach = p.getEntityBoundingBox().expand(xreach, 0, zreach); + + boolean checkBlockWithinReach; + if (worldProvider instanceof WorldProviderSpaceStation) + { + SpinManager spinManager = ((WorldProviderSpaceStation) worldProvider).getSpinManager(); + checkBlockWithinReach = playerReach.maxX >= spinManager.ssBoundsMinX && playerReach.minX <= spinManager.ssBoundsMaxX && playerReach.maxY >= spinManager.ssBoundsMinY + && playerReach.minY <= spinManager.ssBoundsMaxY && playerReach.maxZ >= spinManager.ssBoundsMinZ && playerReach.minZ <= spinManager.ssBoundsMaxZ; + // Player is somewhere within the space station boundaries + } else + { + checkBlockWithinReach = true; + } + + if (checkBlockWithinReach) + { + // Check if the player's bounding box is in the same block + // coordinates as any non-vacuum block (including torches etc) + // If so, it's assumed the player has something close enough to + // grab onto, so is not in freefall + // Note: breatheable air here means the player is definitely not + // in freefall + int xm = MathHelper.floor(playerReach.minX); + int xx = MathHelper.floor(playerReach.maxX); + int ym = MathHelper.floor(playerReach.minY); + int yy = MathHelper.floor(playerReach.maxY); + int zm = MathHelper.floor(playerReach.minZ); + int zz = MathHelper.floor(playerReach.maxZ); + for (int x = xm; x <= xx; x++) + { + for (int y = ym; y <= yy; y++) + { + for (int z = zm; z <= zz; z++) + { + // Blocks.AIR is hard vacuum - we want to check for + // that, here + Block b = world.getBlockState(new BlockPos(x, y, z)).getBlock(); + if (Blocks.AIR != b && GCBlocks.brightAir != b) + { + this.onWall = true; + return false; + } + } + } + } + } + } + + /* + * if (freefall) { //If that check didn't produce a result, see if the + * player is inside the walls //TODO: could apply special weightless + * movement here like Coriolis force - the player is inside the walls, + * not touching them, and in a vacuum int quadrant = 0; double xd = + * p.posX - this.spinCentreX; double zd = p.posZ - this.spinCentreZ; if + * (xd<0) { if (xd<-Math.abs(zd)) { quadrant = 2; } else quadrant = + * (zd<0) ? 3 : 1; } else if (xd>Math.abs(zd)) { quadrant = 0; } else + * quadrant = (zd<0) ? 3 : 1; int ymin = + * MathHelper.floor(p.boundingBox.minY)-1; int ymax = + * MathHelper.floor(p.boundingBox.maxY); int xmin, xmax, zmin, zmax; + * switch (quadrant) { case 0: xmin = + * MathHelper.floor(p.boundingBox.maxX); xmax = this.ssBoundsMaxX - 1; + * zmin = MathHelper.floor(p.boundingBox.minZ)-1; zmax = + * MathHelper.floor(p.boundingBox.maxZ)+1; break; case 1: xmin = + * MathHelper.floor(p.boundingBox.minX)-1; xmax = + * MathHelper.floor(p.boundingBox.maxX)+1; zmin = + * MathHelper.floor(p.boundingBox.maxZ); zmax = this.ssBoundsMaxZ - 1; + * break; case 2: zmin = MathHelper.floor(p.boundingBox.minZ)-1; zmax = + * MathHelper.floor(p.boundingBox.maxZ)+1; xmin = this.ssBoundsMinX; + * xmax = MathHelper.floor(p.boundingBox.minX); break; case 3: default: + * xmin = MathHelper.floor(p.boundingBox.minX)-1; xmax = + * MathHelper.floor(p.boundingBox.maxX)+1; zmin = this.ssBoundsMinZ; + * zmax = MathHelper.floor(p.boundingBox.minZ); break; } //This block + * search could cost a lot of CPU (but client side) - maybe optimise + * later BLOCKCHECK0: for(int x = xmin; x <= xmax; x++) for (int z = + * zmin; z <= zmax; z++) for (int y = ymin; y <= ymax; y++) if + * (Blocks.AIR != this.worldProvider.world.getBlock(x, y, z)) { freefall + * = false; break BLOCKCHECK0; } } + */ + + this.onWall = false; + return true; + } + + @SideOnly(Side.CLIENT) + public void setupFreefallPre(EntityPlayerSP p) + { + double dY = p.motionY - pPrevMotionY; + jetpackBoost = 0F; + pPrevdY = dY; + pPrevMotionX = p.motionX; + pPrevMotionY = p.motionY; + pPrevMotionZ = p.motionZ; + } + + @SideOnly(Side.CLIENT) + public void freefallMotion(EntityPlayerSP p) + { + boolean jetpackUsed = false; + double dX = p.motionX - pPrevMotionX; + double dY = p.motionY - pPrevMotionY; + double dZ = p.motionZ - pPrevMotionZ; + + double posOffsetX = -p.motionX; + double posOffsetY = -p.motionY; + if (posOffsetY == -TransformerHooks.getGravityForEntity(p)) + posOffsetY = 0; + double posOffsetZ = -p.motionZ; + // if (p.capabilities.isFlying) + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(p); + /// Undo whatever vanilla tried to do to our y motion + if (dY < 0D && p.motionY != 0.0D) + { + p.motionY = pPrevMotionY; + } else if (dY > 0.01D && stats.isInFreefallLast()) + { + // Impulse upwards - it's probably a jetpack from another mod + if (dX < 0.01D && dZ < 0.01D) + { + float pitch = p.rotationPitch / Constants.RADIANS_TO_DEGREES; + jetpackBoost = (float) dY * MathHelper.cos(pitch) * 0.1F; + float factor = 1 + MathHelper.sin(pitch) / 5; + p.motionY -= dY * factor; + jetpackUsed = true; + } else + { + p.motionY -= dY / 2; + } + } + + p.motionX -= dX; +// p.motionY -= dY; //Enabling this will disable jetpacks + p.motionZ -= dZ; + + if (p.movementInput.moveForward != 0) + { + p.motionX -= p.movementInput.moveForward * MathHelper.sin(p.rotationYaw / Constants.RADIANS_TO_DEGREES) / (ConfigManagerCore.hardMode ? 600F : 200F); + p.motionZ += p.movementInput.moveForward * MathHelper.cos(p.rotationYaw / Constants.RADIANS_TO_DEGREES) / (ConfigManagerCore.hardMode ? 600F : 200F); + } + + if (jetpackBoost != 0) + { + p.motionX -= jetpackBoost * MathHelper.sin(p.rotationYaw / Constants.RADIANS_TO_DEGREES); + p.motionZ += jetpackBoost * MathHelper.cos(p.rotationYaw / Constants.RADIANS_TO_DEGREES); + } + + if (p.movementInput.sneak) + { + if (!sneakLast) + { +// posOffsetY += 0.0268; + sneakLast = true; + } + p.motionY -= ConfigManagerCore.hardMode ? 0.002D : 0.0032D; + } else if (sneakLast) + { + sneakLast = false; +// posOffsetY -= 0.0268; + } + + if (!jetpackUsed && p.movementInput.jump) + { + p.motionY += ConfigManagerCore.hardMode ? 0.002D : 0.0032D; + } + + float speedLimit = ConfigManagerCore.hardMode ? 0.9F : 0.7F; + + if (p.motionX > speedLimit) + { + p.motionX = speedLimit; + } + if (p.motionX < -speedLimit) + { + p.motionX = -speedLimit; + } + if (p.motionY > speedLimit) + { + p.motionY = speedLimit; + } + if (p.motionY < -speedLimit) + { + p.motionY = -speedLimit; + } + if (p.motionZ > speedLimit) + { + p.motionZ = speedLimit; + } + if (p.motionZ < -speedLimit) + { + p.motionZ = -speedLimit; + } + pPrevMotionX = p.motionX; + pPrevMotionY = p.motionY; + pPrevMotionZ = p.motionZ; + p.move(MoverType.SELF, p.motionX + posOffsetX, p.motionY + posOffsetY, p.motionZ + posOffsetZ); + } + + /* + * double dyaw = p.rotationYaw - p.prevRotationYaw; p.rotationYaw -= dyaw * + * 0.8D; double dyawh = p.rotationYawHead - p.prevRotationYawHead; + * p.rotationYawHead -= dyawh * 0.8D; while (p.rotationYaw > 360F) { + * p.rotationYaw -= 360F; } while (p.rotationYaw < 0F) { p.rotationYaw += + * 360F; } while (p.rotationYawHead > 360F) { p.rotationYawHead -= 360F; } + * while (p.rotationYawHead < 0F) { p.rotationYawHead += 360F; } + */ + + public void updateFreefall(EntityPlayer p) + { + pPrevMotionX = p.motionX; + pPrevMotionY = p.motionY; + pPrevMotionZ = p.motionZ; + } + + @SideOnly(Side.CLIENT) + public void preVanillaMotion(EntityPlayerSP p) + { + this.setupFreefallPre(p); + stats.setSsOnGroundLast(p.onGround); + } + + @SideOnly(Side.CLIENT) + public void postVanillaMotion(EntityPlayerSP p) + { + World world = p.world; + WorldProvider worldProvider = world.provider; + if (!(worldProvider instanceof IZeroGDimension)) + { + return; + } + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.Motion(p); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (zeroGEvent.isCanceled()) + { + return; + } + + boolean freefall = stats.isInFreefall(); + freefall = this.testFreefall(p, freefall); + stats.setInFreefall(freefall); + stats.setInFreefallFirstCheck(true); + + SpinManager spinManager = null; + if (worldProvider instanceof WorldProviderSpaceStation && !stats.getPlatformControlled()) + { + spinManager = ((WorldProviderSpaceStation) worldProvider).getSpinManager(); + } + boolean doCentrifugal = spinManager != null; + + if (freefall) + { + this.pjumpticks = 0; + // Reverse effects of deceleration + p.motionX /= 0.91F; + p.motionZ /= 0.91F; + p.motionY /= 0.9800000190734863D; + + if (spinManager != null) + { + doCentrifugal = spinManager.updatePlayerForSpin(p, 1F); + } + + // Do freefall motion + if (!p.capabilities.isCreativeMode) + { + this.freefallMotion(p); + } else + { + p.capabilities.isFlying = true; + // Half the normal acceleration in Creative mode + double dx = p.motionX - this.pPrevMotionX; + double dy = p.motionY - this.pPrevMotionY; + double dz = p.motionZ - this.pPrevMotionZ; + p.motionX -= dx / 2; + p.motionY -= dy / 2; + p.motionZ -= dz / 2; + + if (p.motionX > 1.2F) + { + p.motionX = 1.2F; + } + if (p.motionX < -1.2F) + { + p.motionX = -1.2F; + } + if (p.motionY > 0.7F) + { + p.motionY = 0.7F; + } + if (p.motionY < -0.7F) + { + p.motionY = -0.7F; + } + if (p.motionZ > 1.2F) + { + p.motionZ = 1.2F; + } + if (p.motionZ < -1.2F) + { + p.motionZ = -1.2F; + } + } + // TODO: Think about endless drift? + // Player may run out of oxygen - that will kill the player + // eventually if can't get back to SS + // Could auto-kill + respawn the player if floats too far away + // (config option whether to lose items or not) + // But we want players to be able to enjoy the view of the spinning + // space station from the outside + // Arm and leg movements could start tumbling the player? + } else + // Not freefall - within arm's length of something or jumping + { + double dy = p.motionY - this.pPrevMotionY; + // if (p.motionY < 0 && this.pPrevMotionY >= 0) p.posY -= p.motionY; + // if (p.motionY != 0) p.motionY = this.pPrevMotionY; + if (p.movementInput.jump) + { + if ((p.onGround || stats.isSsOnGroundLast()) && !p.capabilities.isCreativeMode) + { + if (this.pjumpticks < 25) + this.pjumpticks++; + p.motionY -= dy; + } else + { + p.motionY += 0.015D; + if (this.pjumpticks == 0) + { + p.motionY -= dy; + } + } + } else if (this.pjumpticks > 0) + { + p.motionY += 0.0145D * this.pjumpticks; + this.pjumpticks = 0; + } else if (p.movementInput.sneak) + { + if (!p.onGround) + { + p.motionY -= 0.015D; + } + this.pjumpticks = 0; + } + } + + // Artificial gravity + if (doCentrifugal && !p.onGround) + { + spinManager.applyCentrifugalForce(p); + } + + this.pPrevMotionX = p.motionX; + this.pPrevMotionY = p.motionY; + this.pPrevMotionZ = p.motionZ; + } + + /** + * Used for non-player entities in ZeroGDimensions + */ + public static boolean testEntityFreefall(World worldObj, AxisAlignedBB entityBoundingBox) + { + // Check if the entity's bounding box is in the same block coordinates + // as any non-vacuum block (including torches etc) + // If so, it's assumed the entity has something close enough to catch + // onto, so is not in freefall + // Note: breatheable air here means the entity is definitely not in + // freefall + int xmx = MathHelper.floor(entityBoundingBox.maxX + 0.2D); + int ym = MathHelper.floor(entityBoundingBox.minY - 0.1D); + int yy = MathHelper.floor(entityBoundingBox.maxY + 0.1D); + int zm = MathHelper.floor(entityBoundingBox.minZ - 0.2D); + int zz = MathHelper.floor(entityBoundingBox.maxZ + 0.2D); + if (ym < 0) + ym = 0; + if (yy > 255) + yy = 255; + + for (int x = MathHelper.floor(entityBoundingBox.minX - 0.2D); x <= xmx; x++) + { + for (int z = zm; z <= zz; z++) + { + if (!worldObj.isBlockLoaded(new BlockPos(x, 0, z), false)) + continue; + + for (int y = ym; y <= yy; y++) + { + if (Blocks.AIR != worldObj.getBlockState(new BlockPos(x, y, z)).getBlock()) + { + return false; + } + } + } + } + + return true; + } + + /** + * Call this on every freefalling non-player entity in a dimension either at + * the end of the world tick (ideal) or else during the start of the next + * world tick (e.g. during updateWeather()) + * + * May require iteration through the world's loadedEntityList See + * SpinManager.updateSpin() for an example + * + * @param e + */ + public static void tickFreefallEntity(Entity e) + { + if (e.world.provider instanceof IZeroGDimension) + ((IZeroGDimension) e.world.provider).setInFreefall(e); + + // Undo deceleration applied at the end of the previous tick + boolean warnLog = false; + if (e instanceof EntityLivingBase) + { + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.InFreefall((EntityLivingBase) e); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (!zeroGEvent.isCanceled()) + { + e.motionX /= (double) 0.91F; // 0.91F; + e.motionZ /= (double) 0.91F; // 0.91F; + e.motionY /= (e instanceof EntityFlying) ? 0.91F : 0.9800000190734863D; + + if (e.motionX > 10D) + { + warnLog = true; + e.motionX = 10D; + } else if (e.motionX < -10D) + { + warnLog = true; + e.motionX = -10D; + } + if (e.motionY > 10D) + { + warnLog = true; + e.motionY = 10D; + } else if (e.motionY < -10D) + { + warnLog = true; + e.motionY = -10D; + } + if (e.motionZ > 10D) + { + warnLog = true; + e.motionZ = 10D; + } else if (e.motionZ < -10D) + { + warnLog = true; + e.motionZ = -10D; + } + } + } else if (e instanceof EntityFallingBlock) + { + e.motionY /= 0.9800000190734863D; + // e.motionY += 0.03999999910593033D; + // e.posY += 0.03999999910593033D; + // e.lastTickPosY += 0.03999999910593033D; + if (e.motionY > 10D) + { + warnLog = true; + e.motionY = 10D; + } else if (e.motionY < -10D) + { + warnLog = true; + e.motionY = -10D; + } + } else + { + e.motionX /= 0.9800000190734863D; + e.motionY /= 0.9800000190734863D; + e.motionZ /= 0.9800000190734863D; + + if (e.motionX > 10D) + { + warnLog = true; + e.motionX = 10D; + } else if (e.motionX < -10D) + { + warnLog = true; + e.motionX = -10D; + } + if (e.motionY > 10D) + { + warnLog = true; + e.motionY = 10D; + } else if (e.motionY < -10D) + { + warnLog = true; + e.motionY = -10D; + } + if (e.motionZ > 10D) + { + warnLog = true; + e.motionZ = 10D; + } else if (e.motionZ < -10D) + { + warnLog = true; + e.motionZ = -10D; + } + } + + if (warnLog) + GalacticraftCore.logger.debug(e.getName() + " moving too fast"); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCCapabilities.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCCapabilities.java new file mode 100644 index 00000000..89b3e743 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCCapabilities.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; +import net.minecraftforge.common.capabilities.CapabilityManager; + +public class GCCapabilities +{ + + @CapabilityInject(GCPlayerStats.class) public static Capability GC_STATS_CAPABILITY = null; + + @CapabilityInject(GCPlayerStatsClient.class) public static Capability GC_STATS_CLIENT_CAPABILITY = null; + + public static final ResourceLocation GC_PLAYER_PROP = new ResourceLocation(Constants.ASSET_PREFIX, "player_stats"); + public static final ResourceLocation GC_PLAYER_CLIENT_PROP = new ResourceLocation(Constants.ASSET_PREFIX, "player_stats_client"); + + public static void register() + { + CapabilityManager.INSTANCE.register(GCPlayerStats.class, new Capability.IStorage() + { + + @Override + public NBTBase writeNBT(Capability capability, GCPlayerStats instance, EnumFacing side) + { + NBTTagCompound nbt = new NBTTagCompound(); + instance.saveNBTData(nbt); + return nbt; + } + + @Override + public void readNBT(Capability capability, GCPlayerStats instance, EnumFacing side, NBTBase nbt) + { + instance.loadNBTData((NBTTagCompound) nbt); + } + }, StatsCapability::new); + + CapabilityManager.INSTANCE.register(GCPlayerStatsClient.class, new Capability.IStorage() + { + + @Override + public NBTBase writeNBT(Capability capability, GCPlayerStatsClient instance, EnumFacing side) + { + return null; + } + + @Override + public void readNBT(Capability capability, GCPlayerStatsClient instance, EnumFacing side, NBTBase nbt) + { + } + }, StatsClientCapability::new); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityClientPlayerMP.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityClientPlayerMP.java new file mode 100644 index 00000000..3ea18860 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityClientPlayerMP.java @@ -0,0 +1,525 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.event.ZeroGravityEvent; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.RecipeBook; +import net.minecraft.stats.StatisticsManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GCEntityClientPlayerMP extends EntityPlayerSP +{ + + private boolean lastIsFlying; + private boolean sneakLast; + private int lastLandingTicks; + private boolean checkedCape = false; + private ResourceLocation galacticraftCape = null; + + public GCEntityClientPlayerMP(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandler, StatisticsManager statFileWriter, RecipeBook book) + { + super(mcIn, worldIn, netHandler, statFileWriter, book); + } + + @Override + public void wakeUpPlayer(boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + if (!ClientProxyCore.playerClientHandler.wakeUpPlayer(this, immediately, updateWorldFlag, setSpawn)) + { + super.wakeUpPlayer(immediately, updateWorldFlag, setSpawn); + } + } + + @Override + public boolean isEntityInsideOpaqueBlock() + { + return ClientProxyCore.playerClientHandler.isEntityInsideOpaqueBlock(this, super.isEntityInsideOpaqueBlock()); + } + + @Override + public boolean isServerWorld() + { + return true; + } + + @Override + public void onLivingUpdate() + { + ClientProxyCore.playerClientHandler.onLivingUpdatePre(this); + try + { + if (this.world.provider instanceof IZeroGDimension) + { + // from: EntityPlayerSP + if (this.sprintingTicksLeft > 0) + { + --this.sprintingTicksLeft; + + if (this.sprintingTicksLeft == 0) + { + this.setSprinting(false); + } + } + + if (this.sprintToggleTimer > 0) + { + --this.sprintToggleTimer; + } + + this.prevTimeInPortal = this.timeInPortal; + + if (this.inPortal) + { + if (this.mc.currentScreen != null && !this.mc.currentScreen.doesGuiPauseGame()) + { + this.mc.displayGuiScreen((GuiScreen) null); + } + + if (this.timeInPortal == 0.0F) + { + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.BLOCK_PORTAL_TRIGGER, this.rand.nextFloat() * 0.4F + 0.8F)); + } + + this.timeInPortal += 0.0125F; + + if (this.timeInPortal >= 1.0F) + { + this.timeInPortal = 1.0F; + } + + this.inPortal = false; + } else if (this.isPotionActive(MobEffects.NAUSEA) && this.getActivePotionEffect(MobEffects.NAUSEA).getDuration() > 60) + { + this.timeInPortal += 0.006666667F; + + if (this.timeInPortal > 1.0F) + { + this.timeInPortal = 1.0F; + } + } else + { + if (this.timeInPortal > 0.0F) + { + this.timeInPortal -= 0.05F; + } + + if (this.timeInPortal < 0.0F) + { + this.timeInPortal = 0.0F; + } + } + + if (this.timeUntilPortal > 0) + { + --this.timeUntilPortal; + } + + boolean flag1 = this.movementInput.sneak; + float sprintlevel = 0.8F; + boolean flag2 = this.movementInput.moveForward >= sprintlevel; + this.movementInput.updatePlayerMoveState(); + + if (this.isHandActive() && !this.isRiding()) + { + this.movementInput.moveStrafe *= 0.2F; + this.movementInput.moveForward *= 0.2F; + this.sprintToggleTimer = 0; + } + + // CUSTOM------------------- + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this); + if (stats.getLandingTicks() > 0) + { + this.movementInput.moveStrafe *= 0.5F; + this.movementInput.moveForward *= 0.5F; + } + // -----------END CUSTOM + + this.pushOutOfBlocks(this.posX - this.width * 0.35D, this.getEntityBoundingBox().minY + 0.5D, this.posZ + this.width * 0.35D); + this.pushOutOfBlocks(this.posX - this.width * 0.35D, this.getEntityBoundingBox().minY + 0.5D, this.posZ - this.width * 0.35D); + this.pushOutOfBlocks(this.posX + this.width * 0.35D, this.getEntityBoundingBox().minY + 0.5D, this.posZ - this.width * 0.35D); + this.pushOutOfBlocks(this.posX + this.width * 0.35D, this.getEntityBoundingBox().minY + 0.5D, this.posZ + this.width * 0.35D); + boolean flag4 = this.getFoodStats().getFoodLevel() > 6.0F || this.capabilities.allowFlying; + + if (this.onGround && !flag1 && !flag2 && this.movementInput.moveForward >= 0.8F && !this.isSprinting() && flag4 && !this.isHandActive() && !this.isPotionActive(MobEffects.BLINDNESS)) + { + if (this.sprintToggleTimer <= 0 && !this.mc.gameSettings.keyBindSprint.isKeyDown()) + { + this.sprintToggleTimer = 7; + } else + { + this.setSprinting(true); + } + } + + if (!this.isSprinting() && this.movementInput.moveForward >= sprintlevel && flag4 && !this.isHandActive() && !this.isPotionActive(MobEffects.BLINDNESS) && this.mc.gameSettings.keyBindSprint.isKeyDown()) + { + this.setSprinting(true); + } + + if (this.isSprinting() && (this.movementInput.moveForward < sprintlevel || this.collidedHorizontally || !flag4)) + { + this.setSprinting(false); + } + + // Omit flying toggles - flying will be controlled by freefall + // status + + if (this.capabilities.isFlying && this.isCurrentViewEntity()) + { + if (this.movementInput.sneak) + { + this.motionY -= this.capabilities.getFlySpeed() * 3.0F; + } + + if (this.movementInput.jump) + { + this.motionY += this.capabilities.getFlySpeed() * 3.0F; + } + } + + // Omit horse jumping - no horse jumping in space! + + // -from: EntityPlayer + + // Omit fly toggle timer + + if (this.world.getDifficulty() == EnumDifficulty.PEACEFUL && this.world.getGameRules().getBoolean("naturalRegeneration")) + { + if (this.getHealth() < this.getMaxHealth() && this.ticksExisted % 20 == 0) + { + this.heal(1.0F); + } + + if (this.foodStats.needFood() && this.ticksExisted % 10 == 0) + { + this.foodStats.setFoodLevel(this.foodStats.getFoodLevel() + 1); + } + } + + this.inventory.decrementAnimations(); + this.prevCameraYaw = this.cameraYaw; + + // from: EntityLivingBase + if (this.newPosRotationIncrements > 0) + { + double d0 = this.posX + (this.interpTargetX - this.posX) / this.newPosRotationIncrements; + double d1 = this.posY + (this.interpTargetY - this.posY) / this.newPosRotationIncrements; + double d2 = this.posZ + (this.interpTargetZ - this.posZ) / this.newPosRotationIncrements; + double d3 = MathHelper.wrapDegrees(this.interpTargetYaw - this.rotationYaw); + this.rotationYaw = (float) (this.rotationYaw + d3 / this.newPosRotationIncrements); + this.rotationPitch = (float) (this.rotationPitch + (this.interpTargetPitch - this.rotationPitch) / this.newPosRotationIncrements); + --this.newPosRotationIncrements; + this.setPosition(d0, d1, d2); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else if (!this.isServerWorld()) + { + this.motionX *= 0.98D; + this.motionY *= 0.98D; + this.motionZ *= 0.98D; + } + + if (Math.abs(this.motionX) < 0.005D) + { + this.motionX = 0.0D; + } + + if (Math.abs(this.motionY) < 0.005D) + { + this.motionY = 0.0D; + } + + if (Math.abs(this.motionZ) < 0.005D) + { + this.motionZ = 0.0D; + } + + this.world.profiler.startSection("ai"); + + if (this.isMovementBlocked()) + { + this.isJumping = false; + this.moveStrafing = 0.0F; + this.moveForward = 0.0F; + this.randomYawVelocity = 0.0F; + } else + this.updateEntityActionState(); + + this.world.profiler.endSection(); + this.world.profiler.startSection("travel"); + this.moveStrafing *= 0.98F; + this.moveForward *= 0.98F; + this.randomYawVelocity *= 0.9F; + + // CUSTOM-------------- + AxisAlignedBB aABB = this.getEntityBoundingBox(); + if ((aABB.minY % 1D) == 0.5D) + this.setEntityBoundingBox(aABB.offset(0D, 0.00001D, 0D)); + // -----------END CUSTOM + + // NOTE: No Elytra movement from this.updateElytra() in a zero G + // dimension + this.travel(this.moveStrafing, this.moveVertical, this.moveForward); + this.world.profiler.endSection(); + this.world.profiler.startSection("push"); + + if (!this.world.isRemote) + { + this.collideWithNearbyEntities(); + } + + this.world.profiler.endSection(); + + // -from: EntityPlayer + + // Omit IAttributeInstance - seems relevant only on server + + // Omit this.jumpMovementFactor = this.speedInAir; + // (no bounding in space) + + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + float f1 = (float) (Math.atan(-this.motionY * 0.20000000298023224D) * 15.0D); + + if (f > 0.1F) + { + f = 0.1F; + } + + if (!this.onGround || this.getHealth() <= 0.0F) + { + f = 0.0F; + } + + if (this.onGround || this.getHealth() <= 0.0F) + { + f1 = 0.0F; + } + + this.cameraYaw += (f - this.cameraYaw) * 0.4F; + this.cameraPitch += (f1 - this.cameraPitch) * 0.8F; + + if (this.getHealth() > 0.0F && !this.isSpectator()) + { + AxisAlignedBB axisalignedbb = null; + + if (this.getRidingEntity() != null && !this.getRidingEntity().isDead) + { + axisalignedbb = this.getEntityBoundingBox().union(this.getRidingEntity().getEntityBoundingBox()).grow(1.0D, 0.0D, 1.0D); + } else + { + axisalignedbb = this.getEntityBoundingBox().grow(1.0D, 0.5D, 1.0D); + } + + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, axisalignedbb); + + for (Entity entity : list) + { + if (!entity.isDead) + { + entity.onCollideWithPlayer(this); + } + } + } + + // from: EntityPlayerSP + // (modified CUSTOM) + if (this.lastIsFlying != this.capabilities.isFlying) + { + this.lastIsFlying = this.capabilities.isFlying; + this.sendPlayerAbilities(); + } + } else + { + super.onLivingUpdate(); + } + } catch (RuntimeException e) + { + GalacticraftCore.logger.error(e, + "A mod has crashed while Minecraft was doing a normal player tick update. See details below. GCEntityClientPlayerMP is in this because that is the player class name when Galacticraft is installed. This is =*NOT*= a bug in Galacticraft, please report it to the mod indicated by the first lines of the crash report."); + throw (e); + } + ClientProxyCore.playerClientHandler.onLivingUpdatePost(this); + } + + @Override + public void move(MoverType type, double x, double y, double z) + { + super.move(type, x, y, z); + ClientProxyCore.playerClientHandler.move(this, type, x, y, z); + } + + @Override + public void onUpdate() + { + ClientProxyCore.playerClientHandler.onUpdate(this); + super.onUpdate(); + } + + @Override + public boolean isSneaking() + { + if (this.world.provider instanceof IZeroGDimension) + { + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.SneakOverride(this); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (zeroGEvent.isCanceled()) + { + return super.isSneaking(); + } + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this); + if (stats.getLandingTicks() > 0) + { + if (this.lastLandingTicks == 0) + this.lastLandingTicks = stats.getLandingTicks(); + + this.sneakLast = stats.getLandingTicks() < this.lastLandingTicks; + return sneakLast; + } + this.lastLandingTicks = 0; + if (stats.getFreefallHandler().pjumpticks > 0) + { + this.sneakLast = true; + return true; + } + if (EventHandlerClient.sneakRenderOverride) + { + if (this.movementInput != null && this.movementInput.sneak != this.sneakLast) + { + return false; + } + if (stats.isInFreefall() || stats.getFreefallHandler().onWall) + { + this.sneakLast = false; + return false; + } + } + this.sneakLast = this.movementInput == null ? false : this.movementInput.sneak; + } else + { + this.sneakLast = false; + if (EventHandlerClient.sneakRenderOverride && this.onGround && this.inventory.getCurrentItem() != null && this.inventory.getCurrentItem().getItem() instanceof IHoldableItem && !(this.getRidingEntity() instanceof ICameraZoomEntity)) + { + IHoldableItem holdableItem = (IHoldableItem) this.inventory.getCurrentItem().getItem(); + + if (holdableItem.shouldCrouch(this)) + { + return true; + } + } + } + return super.isSneaking(); + } + + @Override + public float getEyeHeight() + { + float f = eyeHeight; + + if (this.isPlayerSleeping()) + { + return 0.2F; + } + + float ySize = 0.0F; + if (this.world.provider instanceof IZeroGDimension) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this); + if (stats.getLandingTicks() > 0) + { + ySize = stats.getLandingYOffset()[stats.getLandingTicks()]; + if (this.movementInput.sneak && ySize < 0.08F) + { + ySize = 0.08F; + } + } else if (stats.getFreefallHandler().pjumpticks > 0) + { + ySize = 0.01F * stats.getFreefallHandler().pjumpticks; + } else if (this.isSneaking() && !stats.isInFreefall() && !stats.getFreefallHandler().onWall) + { + ySize = 0.08F; + } + } else if (this.isSneaking() && this.movementInput != null && this.movementInput.sneak) + { + ySize = 0.08F; + } + + return f - ySize; + } + + @Override + @SideOnly(Side.CLIENT) + public float getBedOrientationInDegrees() + { + return ClientProxyCore.playerClientHandler.getBedOrientationInDegrees(this, super.getBedOrientationInDegrees()); + } + + @Override + public ResourceLocation getLocationCape() + { + if (this.getRidingEntity() instanceof EntitySpaceshipBase) + { + // Don't draw any cape if riding a rocket (the cape renders outside the rocket model!) + return null; + } + + ResourceLocation vanillaCape = super.getLocationCape(); + + if (!this.checkedCape) + { + NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); + this.galacticraftCape = ClientProxyCore.capeMap.get(networkplayerinfo.getGameProfile().getId().toString().replace("-", "")); + this.checkedCape = true; + } + + if ((ConfigManagerCore.overrideCapes || vanillaCape == null) && galacticraftCape != null) + { + return galacticraftCape; + } + + return vanillaCape; + } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double offset = this.posY + this.getEyeHeight(); + if (offset > 255D) + offset = 255D; + BlockPos blockpos = new BlockPos(this.posX, offset, this.posZ); + return this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityOtherPlayerMP.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityOtherPlayerMP.java new file mode 100644 index 00000000..20a904d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityOtherPlayerMP.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import com.mojang.authlib.GameProfile; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.client.entity.EntityOtherPlayerMP; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GCEntityOtherPlayerMP extends EntityOtherPlayerMP +{ + + private boolean checkedCape = false; + private ResourceLocation galacticraftCape = null; + + public GCEntityOtherPlayerMP(World par1World, GameProfile profile) + { + super(par1World, profile); + } + + @Override + public ResourceLocation getLocationCape() + { + if (this.getRidingEntity() instanceof EntitySpaceshipBase) + { + // Don't draw any cape if riding a rocket (the cape renders outside the rocket model!) + return null; + } + + ResourceLocation vanillaCape = super.getLocationCape(); + + if (!this.checkedCape) + { + NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); + this.galacticraftCape = ClientProxyCore.capeMap.get(networkplayerinfo.getGameProfile().getId().toString().replace("-", "")); + this.checkedCape = true; + } + + if ((ConfigManagerCore.overrideCapes || vanillaCape == null) && galacticraftCape != null) + { + return galacticraftCape; + } + + return vanillaCape; + } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double h = this.posY + this.getEyeHeight(); + if (h > 255D) + h = 255D; + BlockPos blockpos = new BlockPos(this.posX, h, this.posZ); + return this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + } + + @Override + public boolean isSneaking() + { + if (EventHandlerClient.sneakRenderOverride && !(this.world.provider instanceof IZeroGDimension)) + { + if (this.onGround && this.inventory.getCurrentItem() != null && this.inventory.getCurrentItem().getItem() instanceof IHoldableItem + && !(this.getRidingEntity() instanceof ICameraZoomEntity)) + { + IHoldableItem holdableItem = (IHoldableItem) this.inventory.getCurrentItem().getItem(); + + if (holdableItem.shouldCrouch(this)) + { + return true; + } + } + } + return super.isSneaking(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java new file mode 100644 index 00000000..e388760d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import com.mojang.authlib.GameProfile; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.management.PlayerInteractionManager; +import net.minecraft.util.DamageSource; +import net.minecraft.world.WorldServer; + +/** + * This class provides various hooks which are missing from Forge or don't quite + * do what we need.

Do not reference this or test 'instance of' this in + * your code: if PlayerAPI is installed, GCEntityPlayerMP will not be used. + */ +public class GCEntityPlayerMP extends EntityPlayerMP +{ + + public GCEntityPlayerMP(MinecraftServer server, WorldServer world, GameProfile profile, PlayerInteractionManager interactionManager) + { + super(server, world, profile, interactionManager); +// if (this.world != world) +// { +// GCPlayerStats.get(this).setStartDimension(WorldUtil.getDimensionName(this.world.provider)); +// } + } + + @Override + public void updateRidden() + { + GalacticraftCore.proxy.player.updateRiddenPre(this); + super.updateRidden(); + GalacticraftCore.proxy.player.updateRiddenPost(this); + } + + @Override + public void dismountRidingEntity() + { + if (!GalacticraftCore.proxy.player.dismountEntity(this, this.getRidingEntity())) + { + super.dismountRidingEntity(); + } + } + + @Override + public void move(MoverType type, double x, double y, double z) + { + super.move(type, x, y, z); + GalacticraftCore.proxy.player.move(this, type, x, y, z); + } + + @Override + public void wakeUpPlayer(boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + if (GalacticraftCore.proxy.player.wakeUpPlayer(this, immediately, updateWorldFlag, setSpawn)) + { + return; + } + super.wakeUpPlayer(immediately, updateWorldFlag, setSpawn); + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + par2 = GalacticraftCore.proxy.player.attackEntityFrom(this, par1DamageSource, par2); + return par2 != -1F && super.attackEntityFrom(par1DamageSource, par2); + } + + @Override + public void knockBack(Entity p_70653_1_, float p_70653_2_, double impulseX, double impulseZ) + { + GalacticraftCore.proxy.player.knockBack(this, p_70653_1_, p_70653_2_, impulseX, impulseZ); + } + + @Override + public boolean isSpectator() + { + return GalacticraftCore.proxy.player.isSpectator(this) || super.isSpectator(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseMP.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseMP.java new file mode 100644 index 00000000..fd676f33 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseMP.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import api.player.server.ServerPlayerAPI; +import api.player.server.ServerPlayerBase; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.util.DamageSource; + +public class GCPlayerBaseMP extends ServerPlayerBase +{ + + public GCPlayerBaseMP(ServerPlayerAPI playerAPI) + { + super(playerAPI); + } + + private IPlayerServer getClientHandler() + { + return GalacticraftCore.proxy.player; + } + +// @Override +// public void updateRidden() +// { +// this.getClientHandler().updateRiddenPre(this); +// super.updateRidden(); +// this.getClientHandler().updateRiddenPost(this); +// } +// +// @Override +// public void mountEntity(Entity par1Entity) +// { +// if (!this.getClientHandler().mountEntity(this, par1Entity)) +// { +// super.mountEntity(par1Entity); +// } +// } + + @Override + public void moveEntity(MoverType moverType, double x, double y, double z) + { + super.moveEntity(moverType, x, y, z); + this.getClientHandler().move(this.player, moverType, x, y, z); + } + + @Override + public void wakeUpPlayer(boolean par1, boolean par2, boolean par3) + { + if (!this.getClientHandler().wakeUpPlayer(this.player, par1, par2, par3)) + { + super.wakeUpPlayer(par1, par2, par3); + } + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + par2 = this.getClientHandler().attackEntityFrom(this.player, par1DamageSource, par2); + + if (par2 == -1) + { + return false; + } + + return super.attackEntityFrom(par1DamageSource, par2); + } + + @Override + public void knockBack(Entity p_70653_1_, float p_70653_2_, double impulseX, double impulseZ) + { + this.getClientHandler().knockBack(this.player, p_70653_1_, p_70653_2_, impulseX, impulseZ); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseSP.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseSP.java new file mode 100644 index 00000000..20940a1d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseSP.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import api.player.client.ClientPlayerAPI; +import api.player.client.ClientPlayerBase; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.entity.MoverType; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GCPlayerBaseSP extends ClientPlayerBase +{ + + boolean lastIsFlying; + int lastLandingTicks; + + public GCPlayerBaseSP(ClientPlayerAPI playerAPI) + { + super(playerAPI); + } + + private IPlayerClient getClientHandler() + { + return ClientProxyCore.playerClientHandler; + } + +// @Override +// public void wakeUpPlayer(boolean par1, boolean par2, boolean par3) +// { +// if (!this.getClientHandler().wakeUpPlayer(this, par1, par2, par3)) +// { +// super.wakeUpPlayer(par1, par2, par3); +// } +// } + + @Override + public boolean isEntityInsideOpaqueBlock() + { + return this.getClientHandler().isEntityInsideOpaqueBlock(this.player, super.isEntityInsideOpaqueBlock()); + } + + @Override + public void onLivingUpdate() + { + this.getClientHandler().onLivingUpdatePre(this.player); + super.onLivingUpdate(); + this.getClientHandler().onLivingUpdatePost(this.player); + } + + @Override + public void beforeUpdateEntityActionState() + { + if (this.player.world.provider instanceof IZeroGDimension) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this.player); + if (stats.getLandingTicks() > 0) + { + this.player.movementInput.moveStrafe *= 0.5F; + this.player.movementInput.moveForward *= 0.5F; + } + + // TODO: equivalent to getEyeHeight() in GCEntityClientPlayerMP + + // TODO: set this.player.flyToggleTimer = 0; + } + } + + @Override + public void afterUpdateEntityActionState() + { + if (this.player.world.provider instanceof IZeroGDimension) + { + this.player.setJumping(false); + AxisAlignedBB aABB = this.player.getEntityBoundingBox(); + if ((aABB.minY % 1D) == 0.5D) + this.player.setEntityBoundingBox(aABB.offset(0D, 0.00001D, 0D)); + } + } + + @Override + public void moveEntity(MoverType moverType, double x, double y, double z) + { + super.moveEntity(moverType, x, y, z); + this.getClientHandler().move(this.player, moverType, x, y, z); + } + + @Override + public void afterMoveEntityWithHeading(float paramFloat1, float paramFloat2, float paramFloat3) + { + super.afterMoveEntityWithHeading(paramFloat1, paramFloat2, paramFloat3); + + if (CompatibilityManager.isSmartMovingLoaded && !this.player.capabilities.isFlying) + { + this.player.motionY += 0.080000000000000002D; + this.player.motionY -= TransformerHooks.getGravityForEntity(this.player); + } + } + + @Override + public void onUpdate() + { + this.getClientHandler().onUpdate(this.player); + super.onUpdate(); + } + + @Override + public boolean isSneaking() + { + if (this.player.world.provider instanceof IZeroGDimension) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this.player); + if (stats.getLandingTicks() > 0) + { + if (this.lastLandingTicks == 0) + this.lastLandingTicks = stats.getLandingTicks(); + + return stats.getLandingTicks() < this.lastLandingTicks; + } else + this.lastLandingTicks = 0; + + if (stats.getFreefallHandler().pjumpticks > 0) + return true; + + if (EventHandlerClient.sneakRenderOverride) + { + if (stats.getFreefallHandler().testFreefall(this.player)) + return false; + if (stats.isInFreefall()) + return false; + } + } + return super.isSneaking(); + } + +// @Override +// @SideOnly(Side.CLIENT) +// public float getBedOrientationInDegrees() +// { +// return this.getClientHandler().getBedOrientationInDegrees(this, super.getBedOrientationInDegrees()); +// } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double height = this.player.posY + (double) this.player.getEyeHeight(); + if (height > 255D) + height = 255D; + BlockPos blockpos = new BlockPos(this.player.posX, height, this.player.posZ); + return this.player.world.isBlockLoaded(blockpos) ? this.player.world.getCombinedLight(blockpos, 0) : 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerHandler.java new file mode 100644 index 00000000..c94fbfa9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerHandler.java @@ -0,0 +1,1621 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.UUID; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.MobEffects; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.AttachCapabilitiesEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.server.permission.PermissionAPI; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.event.oxygen.GCCoreOxygenSuffocationEvent; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.item.IArmorCorrosionResistant; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.item.IItemThermal; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.entities.EntityParachest; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemArmorAsteroids; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +public class GCPlayerHandler +{ + + private static final int OXYGENHEIGHTLIMIT = 450; + public static final int GEAR_NOT_PRESENT = -1; + + private List torchItemsSpace = new ArrayList<>(2); + private List torchItemsRegular = new ArrayList<>(2); + private List itemChangesPre = new ArrayList<>(6); + private List itemChangesPost = new ArrayList<>(6); + private static HashMap deathTimes = new HashMap<>(); + + @SubscribeEvent + public void onPlayerLogin(PlayerLoggedInEvent event) + { + if (event.player instanceof EntityPlayerMP) + { + this.onPlayerLogin((EntityPlayerMP) event.player); + } + } + + @SubscribeEvent + public void onPlayerCloned(PlayerEvent.Clone event) + { + GCPlayerStats oldStats = GCPlayerStats.get(event.getOriginal()); + GCPlayerStats newStats = GCPlayerStats.get(event.getEntityPlayer()); + newStats.copyFrom(oldStats, !event.isWasDeath() || event.getOriginal().world.getGameRules().getBoolean("keepInventory")); + if (event.getOriginal() instanceof EntityPlayerMP && event.getEntityPlayer() instanceof EntityPlayerMP) + { + TileEntityTelemetry.updateLinkedPlayer((EntityPlayerMP) event.getOriginal(), (EntityPlayerMP) event.getEntityPlayer()); + } + if (event.isWasDeath() && event.getOriginal() instanceof EntityPlayerMP) + { + UUID uu = event.getOriginal().getPersistentID(); + if (event.getOriginal().world.provider instanceof IGalacticraftWorldProvider) + { + Integer timeA = deathTimes.get(uu); + int bb = ((EntityPlayerMP) event.getOriginal()).server.getTickCounter(); + if (timeA != null && (bb - timeA) < 1500) + { + String msg = EnumColor.YELLOW + GCCoreUtil.translate("commands.gchouston.help.1") + " " + EnumColor.WHITE + GCCoreUtil.translate("commands.gchouston.help.2"); + event.getOriginal().sendMessage(new TextComponentString(msg)); + } + deathTimes.put(uu, bb); + } + else + { + deathTimes.remove(uu); + } + } + } + + @SubscribeEvent + public void onAttachCapability(AttachCapabilitiesEvent event) + { + if (event.getObject() instanceof EntityPlayerMP) + { + event.addCapability(GCCapabilities.GC_PLAYER_PROP, new CapabilityProviderStats((EntityPlayerMP) event.getObject())); + } + else if (event.getObject() instanceof EntityPlayer && ((EntityPlayer) event.getObject()).world.isRemote) + { + this.onAttachCapabilityClient(event); + } + } + + @SideOnly(Side.CLIENT) + private void onAttachCapabilityClient(AttachCapabilitiesEvent event) + { + if (event.getObject() instanceof EntityPlayerSP) + { + event.addCapability(GCCapabilities.GC_PLAYER_CLIENT_PROP, new CapabilityProviderStatsClient((EntityPlayerSP) event.getObject())); + } + } + + // @SubscribeEvent + // public void onEntityConstructing(EntityEvent.EntityConstructing event) + // { + // if (event.getEntity() instanceof EntityPlayerMP && GCPlayerStats.get((EntityPlayerMP) event.getEntity()) == null) + // { + // GCPlayerStats.register((EntityPlayerMP) event.getEntity()); + // } + // + // if (event.entity instanceof EntityPlayer && event.entity.world.isRemote) + // { + // this.onEntityConstructingClient(event); + // } + // } + // + // @SideOnly(Side.CLIENT) + // public void onEntityConstructingClient(EntityEvent.EntityConstructing event) + // { + // if (event.getEntity() instanceof EntityPlayerSP) + // { + // if (GCPlayerStatsClient.get((EntityPlayerSP) event.getEntity()) == null) + // { + // GCPlayerStatsClient.register((EntityPlayerSP) event.getEntity()); + // } + // + // Minecraft.getMinecraft().gameSettings.sendSettingsToServer(); + // } + // } + + private void onPlayerLogin(EntityPlayerMP player) + { + // GCPlayerStats oldData = this.playerStatsMap.remove(player.getPersistentID()); + // if (oldData != null) + // { + // oldData.saveNBTData(player.getEntityData()); + // } + + GCPlayerStats stats = GCPlayerStats.get(player); + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_GET_CELESTIAL_BODY_LIST, GCCoreUtil.getDimensionID(player.world), new Object[] {}), player); + int repeatCount = stats.getBuildFlags() >> 9; + if (repeatCount < 3) + { + stats.setBuildFlags(stats.getBuildFlags() & 1536); + } + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_STATS, GCCoreUtil.getDimensionID(player.world), stats.getMiscNetworkedStats()), player); + ColorUtil.sendUpdatedColorsToPlayer(stats); + } + + // private void onPlayerLogout(EntityPlayerMP player) + // { + // } + // + // private void onPlayerRespawn(EntityPlayerMP player) + // { + // GCPlayerStats oldData = this.playerStatsMap.remove(player.getPersistentID()); + // GCPlayerStats stats = GCPlayerStats.get(player); + // + // if (oldData != null) + // { + // stats.copyFrom(oldData, false); + // } + // + // stats.player = new WeakReference(player); + // } + + public static void checkGear(EntityPlayerMP player, GCPlayerStats stats, boolean forceSend) + { + stats.setMaskInSlot(stats.getExtendedInventory().getStackInSlot(0)); + stats.setGearInSlot(stats.getExtendedInventory().getStackInSlot(1)); + stats.setTankInSlot1(stats.getExtendedInventory().getStackInSlot(2)); + stats.setTankInSlot2(stats.getExtendedInventory().getStackInSlot(3)); + stats.setParachuteInSlot(stats.getExtendedInventory().getStackInSlot(4)); + stats.setFrequencyModuleInSlot(stats.getExtendedInventory().getStackInSlot(5)); + stats.setThermalHelmetInSlot(stats.getExtendedInventory().getStackInSlot(6)); + stats.setThermalChestplateInSlot(stats.getExtendedInventory().getStackInSlot(7)); + stats.setThermalLeggingsInSlot(stats.getExtendedInventory().getStackInSlot(8)); + stats.setThermalBootsInSlot(stats.getExtendedInventory().getStackInSlot(9)); + stats.setShieldControllerInSlot(stats.getExtendedInventory().getStackInSlot(10)); + // + + if (stats.getFrequencyModuleInSlot() != stats.getLastFrequencyModuleInSlot() || forceSend) + { + if (player.server != null) + { + if (stats.getFrequencyModuleInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.FREQUENCY_MODULE); + TileEntityTelemetry.frequencyModulePlayer(stats.getLastFrequencyModuleInSlot(), player, true); + } + else if (stats.getLastFrequencyModuleInSlot().isEmpty()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getFrequencyModuleInSlot(), EnumExtendedInventorySlot.FREQUENCY_MODULE); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.FREQUENCY_MODULE, gearID); + TileEntityTelemetry.frequencyModulePlayer(stats.getFrequencyModuleInSlot(), player, false); + } + } + } + + stats.setLastFrequencyModuleInSlot(stats.getFrequencyModuleInSlot()); + } + + // + + if (stats.getMaskInSlot() != stats.getLastMaskInSlot() || forceSend) + { + if (stats.getMaskInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.MASK); + } + else if (stats.getLastMaskInSlot().isEmpty() || forceSend) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getMaskInSlot(), EnumExtendedInventorySlot.MASK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.MASK, gearID); + } + } + + stats.setLastMaskInSlot(stats.getMaskInSlot()); + } + + // + + if (stats.getGearInSlot() != stats.getLastGearInSlot() || forceSend) + { + if (stats.getGearInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.GEAR); + } + else if (stats.getGearInSlot().getItem() == GCItems.oxygenGear && (stats.getLastGearInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getGearInSlot(), EnumExtendedInventorySlot.GEAR); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.GEAR, gearID); + } + } + + stats.setLastGearInSlot(stats.getGearInSlot()); + } + + // + + if (stats.getTankInSlot1() != stats.getLastTankInSlot1() || forceSend) + { + if (stats.getTankInSlot1().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.LEFT_TANK); + stats.setAirRemaining(0); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + else if (stats.getLastTankInSlot1().isEmpty() || forceSend) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot1(), EnumExtendedInventorySlot.LEFT_TANK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.LEFT_TANK, gearID); + } + if (!stats.getMaskInSlot().isEmpty() && !stats.getGearInSlot().isEmpty()) + { + stats.setAirRemaining(stats.getTankInSlot1().getMaxDamage() - stats.getTankInSlot1().getItemDamage()); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + } + // if the else is reached then both tankInSlot and lastTankInSlot + // are non-null + else if (stats.getTankInSlot1().getItem() != stats.getLastTankInSlot1().getItem()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot1(), EnumExtendedInventorySlot.LEFT_TANK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.LEFT_TANK, gearID); + } + if (!stats.getMaskInSlot().isEmpty() && !stats.getGearInSlot().isEmpty()) + { + stats.setAirRemaining(stats.getTankInSlot1().getMaxDamage() - stats.getTankInSlot1().getItemDamage()); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + } + + stats.setLastTankInSlot1(stats.getTankInSlot1()); + } + + // + + if (stats.getTankInSlot2() != stats.getLastTankInSlot2() || forceSend) + { + if (stats.getTankInSlot2().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.RIGHT_TANK); + stats.setAirRemaining2(0); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + else if (stats.getLastTankInSlot2().isEmpty() || forceSend) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot2(), EnumExtendedInventorySlot.RIGHT_TANK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.RIGHT_TANK, gearID); + } + if (!stats.getMaskInSlot().isEmpty() && !stats.getGearInSlot().isEmpty()) + { + stats.setAirRemaining2(stats.getTankInSlot2().getMaxDamage() - stats.getTankInSlot2().getItemDamage()); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + } + // if the else is reached then both tankInSlot and lastTankInSlot + // are non-null + else if (stats.getTankInSlot2().getItem() != stats.getLastTankInSlot2().getItem()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot2(), EnumExtendedInventorySlot.RIGHT_TANK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.RIGHT_TANK, gearID); + } + if (!stats.getMaskInSlot().isEmpty() && !stats.getGearInSlot().isEmpty()) + { + stats.setAirRemaining2(stats.getTankInSlot2().getMaxDamage() - stats.getTankInSlot2().getItemDamage()); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + } + + stats.setLastTankInSlot2(stats.getTankInSlot2()); + } + + // + + if (stats.getParachuteInSlot() != stats.getLastParachuteInSlot() || forceSend) + { + if (stats.isUsingParachute()) + { + if (stats.getParachuteInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.PARACHUTE); + } + else if (forceSend || stats.getLastParachuteInSlot().isEmpty() || stats.getParachuteInSlot().getItemDamage() != stats.getLastParachuteInSlot().getItemDamage()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getParachuteInSlot(), EnumExtendedInventorySlot.PARACHUTE); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.PARACHUTE, stats.getParachuteInSlot().getItemDamage()); + } + } + } + + stats.setLastParachuteInSlot(stats.getParachuteInSlot()); + } + + // + + if (stats.getThermalHelmetInSlot() != stats.getLastThermalHelmetInSlot() || forceSend) + { + ThermalArmorEvent armorEvent = new ThermalArmorEvent(0, stats.getThermalHelmetInSlot()); + MinecraftForge.EVENT_BUS.post(armorEvent); + + if (armorEvent.armorResult != ThermalArmorEvent.ArmorAddResult.NOTHING) + { + if (stats.getThermalHelmetInSlot().isEmpty() || armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.REMOVE) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.THERMAL_HELMET); + } + else if (armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.ADD && (stats.getLastThermalHelmetInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getThermalHelmetInSlot(), EnumExtendedInventorySlot.THERMAL_HELMET); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.THERMAL_HELMET, gearID); + } + } + } + + stats.setLastThermalHelmetInSlot(stats.getThermalHelmetInSlot()); + } + + if (stats.getThermalChestplateInSlot() != stats.getLastThermalChestplateInSlot() || forceSend) + { + ThermalArmorEvent armorEvent = new ThermalArmorEvent(1, stats.getThermalChestplateInSlot()); + MinecraftForge.EVENT_BUS.post(armorEvent); + + if (armorEvent.armorResult != ThermalArmorEvent.ArmorAddResult.NOTHING) + { + if (stats.getThermalChestplateInSlot().isEmpty() || armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.REMOVE) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.THERMAL_CHESTPLATE); + } + else if (armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.ADD && (stats.getLastThermalChestplateInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getThermalChestplateInSlot(), EnumExtendedInventorySlot.THERMAL_CHESTPLATE); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.THERMAL_CHESTPLATE, gearID); + } + } + } + + stats.setLastThermalChestplateInSlot(stats.getThermalChestplateInSlot()); + } + + if (stats.getThermalLeggingsInSlot() != stats.getLastThermalLeggingsInSlot() || forceSend) + { + ThermalArmorEvent armorEvent = new ThermalArmorEvent(2, stats.getThermalLeggingsInSlot()); + MinecraftForge.EVENT_BUS.post(armorEvent); + + if (armorEvent.armorResult != ThermalArmorEvent.ArmorAddResult.NOTHING) + { + if (stats.getThermalLeggingsInSlot().isEmpty() || armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.REMOVE) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.THERMAL_LEGGINGS); + } + else if (armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.ADD && (stats.getLastThermalLeggingsInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getThermalLeggingsInSlot(), EnumExtendedInventorySlot.THERMAL_LEGGINGS); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.THERMAL_LEGGINGS, gearID); + } + } + } + + stats.setLastThermalLeggingsInSlot(stats.getThermalLeggingsInSlot()); + } + + if (stats.getThermalBootsInSlot() != stats.getLastThermalBootsInSlot() || forceSend) + { + ThermalArmorEvent armorEvent = new ThermalArmorEvent(3, stats.getThermalBootsInSlot()); + MinecraftForge.EVENT_BUS.post(armorEvent); + + if (armorEvent.armorResult != ThermalArmorEvent.ArmorAddResult.NOTHING) + { + if (stats.getThermalBootsInSlot().isEmpty() || armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.REMOVE) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.THERMAL_BOOTS); + } + else if (armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.ADD && (stats.getLastThermalBootsInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getThermalBootsInSlot(), EnumExtendedInventorySlot.THERMAL_BOOTS); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.THERMAL_BOOTS, gearID); + } + } + } + + stats.setLastThermalBootsInSlot(stats.getThermalBootsInSlot()); + } + + if ((stats.getShieldControllerInSlot() != stats.getLastShieldControllerInSlot() || forceSend)) + { + if (stats.getShieldControllerInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.SHIELD_CONTROLLER); + } + else if (stats.getShieldControllerInSlot().getItem() == VenusItems.basicItem && (stats.getLastShieldControllerInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getShieldControllerInSlot(), EnumExtendedInventorySlot.SHIELD_CONTROLLER); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.SHIELD_CONTROLLER, gearID); + } + } + + stats.setLastShieldControllerInSlot(stats.getShieldControllerInSlot()); + } + } + + protected void checkThermalStatus(EntityPlayerMP player, GCPlayerStats playerStats) + { + if (player.world.provider instanceof IGalacticraftWorldProvider && !player.capabilities.isCreativeMode && !CompatibilityManager.isAndroid(player)) + { + final ItemStack thermalPaddingHelm = playerStats.getExtendedInventory().getStackInSlot(6); + final ItemStack thermalPaddingChestplate = playerStats.getExtendedInventory().getStackInSlot(7); + final ItemStack thermalPaddingLeggings = playerStats.getExtendedInventory().getStackInSlot(8); + final ItemStack thermalPaddingBoots = playerStats.getExtendedInventory().getStackInSlot(9); + float lowestThermalStrength = 0.0F; + if (!thermalPaddingHelm.isEmpty() && !thermalPaddingChestplate.isEmpty() && !thermalPaddingLeggings.isEmpty() && !thermalPaddingBoots.isEmpty()) + { + if (thermalPaddingHelm.getItem() instanceof IItemThermal) + { + lowestThermalStrength += ((IItemThermal) thermalPaddingHelm.getItem()).getThermalStrength(); + } + if (thermalPaddingChestplate.getItem() instanceof IItemThermal) + { + lowestThermalStrength += ((IItemThermal) thermalPaddingChestplate.getItem()).getThermalStrength(); + } + if (thermalPaddingLeggings.getItem() instanceof IItemThermal) + { + lowestThermalStrength += ((IItemThermal) thermalPaddingLeggings.getItem()).getThermalStrength(); + } + if (thermalPaddingBoots.getItem() instanceof IItemThermal) + { + lowestThermalStrength += ((IItemThermal) thermalPaddingBoots.getItem()).getThermalStrength(); + } + lowestThermalStrength /= 4.0F; + lowestThermalStrength = Math.abs(lowestThermalStrength); // It + // shouldn't + // be + // negative, + // but + // just + // in + // case! + } + + IGalacticraftWorldProvider provider = (IGalacticraftWorldProvider) player.world.provider; + float thermalLevelMod = provider.getThermalLevelModifier(); + float absThermalLevelMod = Math.abs(thermalLevelMod); + + if (absThermalLevelMod > 0D) + { + int thermalLevelCooldownBase = Math.abs(MathHelper.floor(200 / thermalLevelMod)); + int normaliseCooldown = MathHelper.floor(150 / lowestThermalStrength); + int thermalLevelTickCooldown = thermalLevelCooldownBase; + if (thermalLevelTickCooldown < 1) + { + thermalLevelTickCooldown = 1; // Prevent divide by zero + // errors + } + + if (!thermalPaddingHelm.isEmpty() && !thermalPaddingChestplate.isEmpty() && !thermalPaddingLeggings.isEmpty() && !thermalPaddingBoots.isEmpty()) + { + // If the thermal strength exceeds the dimension's thermal + // level mod, it can't improve the normalise + // This factor of 1.5F is chosen so that a combination of + // Tier 1 and Tier 2 thermal isn't enough to normalise on + // Venus (three Tier 2, one Tier 1 stays roughly constant) + float relativeFactor = Math.max(1.0F, absThermalLevelMod / lowestThermalStrength) / 1.5F; + normaliseCooldown = MathHelper.floor(normaliseCooldown / absThermalLevelMod * relativeFactor); + if (normaliseCooldown < 1) + { + normaliseCooldown = 1; // Prevent divide by zero errors + } + // Player is wearing all required thermal padding items + if ((player.ticksExisted - 1) % normaliseCooldown == 0) + { + this.normaliseThermalLevel(player, playerStats, 1); + } + thermalLevelMod /= Math.max(1.0F, lowestThermalStrength / 2.0F); + absThermalLevelMod = Math.abs(thermalLevelMod); + } + + if (OxygenUtil.isAABBInBreathableAirBlock(player, true)) + { + playerStats.setThermalLevelNormalising(true); + this.normaliseThermalLevel(player, playerStats, 1); + // If player is in ambient thermal area, slowly reset to + // normal + return; + } + + // For each piece of thermal equipment being used, slow down the + // the harmful thermal change slightly + if (!thermalPaddingHelm.isEmpty()) + { + thermalLevelTickCooldown += thermalLevelCooldownBase; + } + if (!thermalPaddingChestplate.isEmpty()) + { + thermalLevelTickCooldown += thermalLevelCooldownBase; + } + if (!thermalPaddingLeggings.isEmpty()) + { + thermalLevelTickCooldown += thermalLevelCooldownBase; + } + if (!thermalPaddingBoots.isEmpty()) + { + thermalLevelTickCooldown += thermalLevelCooldownBase; + } + + // Instead of increasing/decreasing the thermal level by a large + // amount every ~200 ticks, increase/decrease + // by a small amount each time (still the same average + // increase/decrease) + int thermalLevelTickCooldownSingle = MathHelper.floor(thermalLevelTickCooldown / absThermalLevelMod); + if (thermalLevelTickCooldownSingle < 1) + { + thermalLevelTickCooldownSingle = 1; // Prevent divide by + // zero errors + } + + if ((player.ticksExisted - 1) % thermalLevelTickCooldownSingle == 0) + { + int last = playerStats.getThermalLevel(); + playerStats.setThermalLevel(Math.min(Math.max(last + (thermalLevelMod < 0 ? -1 : 1), -22), 22)); + + if (playerStats.getThermalLevel() != last) + { + this.sendThermalLevelPacket(player, playerStats); + } + } + + // If the normalisation is outpacing the freeze/overheat + playerStats.setThermalLevelNormalising(thermalLevelTickCooldownSingle > normaliseCooldown && !thermalPaddingHelm.isEmpty() && !thermalPaddingChestplate.isEmpty() && !thermalPaddingLeggings.isEmpty() && !thermalPaddingBoots.isEmpty()); + + if (!playerStats.isThermalLevelNormalising()) + { + if ((player.ticksExisted - 1) % thermalLevelTickCooldown == 0) + { + if (Math.abs(playerStats.getThermalLevel()) >= 22) + { + player.attackEntityFrom(DamageSourceGC.thermal, 1.5F); + } + } + + if (playerStats.getThermalLevel() < -15) + { + player.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 5, 2, true, true)); + } + + if (playerStats.getThermalLevel() > 15) + { + player.addPotionEffect(new PotionEffect(MobEffects.NAUSEA, 5, 2, true, true)); + } + } + } + else + // Normalise thermal level if on Space Station or non-modifier + // planet + { + playerStats.setThermalLevelNormalising(true); + this.normaliseThermalLevel(player, playerStats, 2); + } + } + else + // Normalise thermal level if on Overworld or any non-GC dimension + { + playerStats.setThermalLevelNormalising(true); + this.normaliseThermalLevel(player, playerStats, 3); + } + } + + public void normaliseThermalLevel(EntityPlayerMP player, GCPlayerStats stats, int increment) + { + final int last = stats.getThermalLevel(); + + if (stats.getThermalLevel() < 0) + { + stats.setThermalLevel(stats.getThermalLevel() + Math.min(increment, -stats.getThermalLevel())); + } + else if (stats.getThermalLevel() > 0) + { + stats.setThermalLevel(stats.getThermalLevel() - Math.min(increment, stats.getThermalLevel())); + } + + if (stats.getThermalLevel() != last) + { + this.sendThermalLevelPacket(player, stats); + } + } + + protected void checkShield(EntityPlayerMP playerMP, GCPlayerStats playerStats) + { + if (playerMP.ticksExisted % 20 == 0 && playerMP.world.provider instanceof IGalacticraftWorldProvider) + { + if (((IGalacticraftWorldProvider) playerMP.world.provider).shouldCorrodeArmor()) + { + ItemStack shieldController = playerStats.getExtendedInventory().getStackInSlot(10); + boolean valid = false; + + if (!shieldController.isEmpty()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(shieldController, EnumExtendedInventorySlot.SHIELD_CONTROLLER); + + if (gearID != -1) + { + valid = true; + } + } + + if (!valid) + { + for (ItemStack armor : playerMP.getArmorInventoryList()) + { + if (!armor.isEmpty() && armor.getItem() instanceof ItemArmor && !(armor.getItem() instanceof IArmorCorrosionResistant)) + { + armor.damageItem(1, playerMP); + } + } + } + } + } + } + + protected void checkOxygen(EntityPlayerMP player, GCPlayerStats stats) + { + if ((player.dimension == 0 || player.world.provider instanceof IGalacticraftWorldProvider) && (((player.dimension != 0) && !((IGalacticraftWorldProvider) player.world.provider).hasBreathableAtmosphere()) || player.posY > GCPlayerHandler.OXYGENHEIGHTLIMIT) && !player.capabilities.isCreativeMode && !(player.getRidingEntity() instanceof EntityLanderBase) && !(player.getRidingEntity() instanceof EntityAutoRocket) && !(player.getRidingEntity() instanceof EntityCelestialFake) && !CompatibilityManager.isAndroid(player)) + { + final ItemStack tankInSlot = stats.getExtendedInventory().getStackInSlot(2); + final ItemStack tankInSlot2 = stats.getExtendedInventory().getStackInSlot(3); + + final int drainSpacing = OxygenUtil.getDrainSpacing(tankInSlot, tankInSlot2); + + if (tankInSlot.isEmpty()) + { + stats.setAirRemaining(0); + } + else + { + stats.setAirRemaining(tankInSlot.getMaxDamage() - tankInSlot.getItemDamage()); + } + + if (tankInSlot2.isEmpty()) + { + stats.setAirRemaining2(0); + } + else + { + stats.setAirRemaining2(tankInSlot2.getMaxDamage() - tankInSlot2.getItemDamage()); + } + + if (drainSpacing > 0) + { + if ((player.ticksExisted - 1) % drainSpacing == 0 && !OxygenUtil.isAABBInBreathableAirBlock(player) && !stats.isUsingPlanetSelectionGui()) + { + int toTake = 1; + // Take 1 oxygen from Tank 1 + if (stats.getAirRemaining() > 0) + { + tankInSlot.damageItem(1, player); + stats.setAirRemaining(stats.getAirRemaining() - 1); + toTake = 0; + } + + // Alternatively, take 1 oxygen from Tank 2 + if (toTake > 0 && stats.getAirRemaining2() > 0) + { + tankInSlot2.damageItem(1, player); + stats.setAirRemaining2(stats.getAirRemaining2() - 1); + toTake = 0; + } + } + } + else + { + if ((player.ticksExisted - 1) % 60 == 0) + { + if (OxygenUtil.isAABBInBreathableAirBlock(player)) + { + if (stats.getAirRemaining() < 90 && !tankInSlot.isEmpty()) + { + stats.setAirRemaining(Math.min(stats.getAirRemaining() + 1, tankInSlot.getMaxDamage() - tankInSlot.getItemDamage())); + } + + if (stats.getAirRemaining2() < 90 && !tankInSlot2.isEmpty()) + { + stats.setAirRemaining2(Math.min(stats.getAirRemaining2() + 1, tankInSlot2.getMaxDamage() - tankInSlot2.getItemDamage())); + } + } + else + { + if (stats.getAirRemaining() > 0) + { + stats.setAirRemaining(stats.getAirRemaining() - 1); + } + + if (stats.getAirRemaining2() > 0) + { + stats.setAirRemaining2(stats.getAirRemaining2() - 1); + } + } + } + } + + final boolean airEmpty = stats.getAirRemaining() <= 0 && stats.getAirRemaining2() <= 0; + + if (player.isOnLadder()) + { + stats.setOxygenSetupValid(stats.isLastOxygenSetupValid()); + } + else + { + stats.setOxygenSetupValid(((OxygenUtil.hasValidOxygenSetup(player) && !airEmpty) || OxygenUtil.isAABBInBreathableAirBlock(player))); + } + + if (!player.world.isRemote && player.isEntityAlive()) + { + if (!stats.isOxygenSetupValid()) + { + GCCoreOxygenSuffocationEvent suffocationEvent = new GCCoreOxygenSuffocationEvent.Pre(player); + MinecraftForge.EVENT_BUS.post(suffocationEvent); + + if (!suffocationEvent.isCanceled()) + { + if (stats.getDamageCounter() == 0) + { + stats.setDamageCounter(ConfigManagerCore.suffocationCooldown); + + player.attackEntityFrom(DamageSourceGC.oxygenSuffocation, ConfigManagerCore.suffocationDamage * (2 + stats.getIncrementalDamage()) / 2); + if (ConfigManagerCore.hardMode) + stats.setIncrementalDamage(stats.getIncrementalDamage() + 1); + + GCCoreOxygenSuffocationEvent suffocationEventPost = new GCCoreOxygenSuffocationEvent.Post(player); + MinecraftForge.EVENT_BUS.post(suffocationEventPost); + } + } + else + stats.setOxygenSetupValid(true); + } + else + stats.setIncrementalDamage(0); + } + } + else if ((player.ticksExisted - 1) % 20 == 0 && !player.capabilities.isCreativeMode && stats.getAirRemaining() < 90) + { + stats.setAirRemaining(stats.getAirRemaining() + 1); + stats.setAirRemaining2(stats.getAirRemaining2() + 1); + } + else if (player.capabilities.isCreativeMode) + { + stats.setAirRemaining(90); + stats.setAirRemaining2(90); + } + else + { + stats.setOxygenSetupValid(true); + } + } + + protected void throwMeteors(EntityPlayerMP player) + { + World world = player.world; + if (world.provider instanceof IGalacticraftWorldProvider && !world.isRemote) + { + if (((IGalacticraftWorldProvider) world.provider).getMeteorFrequency() > 0 && ConfigManagerCore.meteorSpawnMod > 0.0) + { + final int f = (int) (((IGalacticraftWorldProvider) world.provider).getMeteorFrequency() * 750D * (1.0 / ConfigManagerCore.meteorSpawnMod)); + + if (world.rand.nextInt(f) == 0) + { + final EntityPlayer closestPlayer = world.getClosestPlayerToEntity(player, 100); + + if (closestPlayer == null || closestPlayer.getEntityId() <= player.getEntityId()) + { + int r = world.getMinecraftServer().getPlayerList().getViewDistance(); + int x, z; + double motX, motZ; + x = world.rand.nextInt(20) + 160; + z = world.rand.nextInt(20) - 10; + motX = world.rand.nextDouble() * 2 - 2.5D; + motZ = world.rand.nextDouble() * 5 - 2.5D; + int px = MathHelper.floor(player.posX); + if ((x + px >> 4) - (px >> 4) >= r) + { + x = ((px >> 4) + r << 4) - 1 - px; + } + + final EntityMeteor meteor = new EntityMeteor(world, player.posX + x, 355D, player.posZ + z, motX, 0, motZ, 1); + + if (!world.isRemote) + { + world.spawnEntity(meteor); + } + } + } + + if (world.rand.nextInt(f * 3) == 0) + { + final EntityPlayer closestPlayer = world.getClosestPlayerToEntity(player, 100); + + if (closestPlayer == null || closestPlayer.getEntityId() <= player.getEntityId()) + { + int r = world.getMinecraftServer().getPlayerList().getViewDistance(); + int x, z; + double motX, motZ; + x = world.rand.nextInt(20) + 160; + z = world.rand.nextInt(20) - 10; + motX = world.rand.nextDouble() * 2 - 2.5D; + motZ = world.rand.nextDouble() * 5 - 2.5D; + int px = MathHelper.floor(player.posX); + if ((x + px >> 4) - (px >> 4) >= r) + { + x = ((px >> 4) + r << 4) - 1 - px; + } + + final EntityMeteor meteor = new EntityMeteor(world, player.posX + x, 355D, player.posZ + z, motX, 0, motZ, 6); + + if (!world.isRemote) + { + world.spawnEntity(meteor); + } + } + } + } + } + } + + private void checkItemAndSwitch(ItemStack currentItem, EntityPlayerMP player, List sourceList, List replaceList, boolean offhand) + { + if (!currentItem.isEmpty() && sourceList.contains(currentItem.getItem())) + { + // Get space torch for this overworld torch + int torchItem = 0; + for (Item i : sourceList) + { + if (i == currentItem.getItem()) + { + ItemStack stack = new ItemStack(replaceList.get(torchItem), currentItem.getCount(), 0); + if (offhand) + { + player.inventory.offHandInventory.set(0, stack); + } + else + { + player.inventory.mainInventory.set(player.inventory.currentItem, stack); + } + break; + } + torchItem++; + } + } + } + + protected void checkCurrentItem(EntityPlayerMP player) + { + ItemStack theCurrentItem = player.inventory.getCurrentItem(); + ItemStack offHandItem = player.getHeldItemOffhand(); + + int postChangeItem = 0; + for (ItemStack i : itemChangesPre) + { + if (!theCurrentItem.isEmpty() && i.getItem() == theCurrentItem.getItem() && i.getItemDamage() == theCurrentItem.getItemDamage()) + { + ItemStack postChange = itemChangesPost.get(postChangeItem).copy(); + postChange.setCount(theCurrentItem.getCount()); + player.inventory.mainInventory.set(player.inventory.currentItem, postChange); + break; + } + if (!offHandItem.isEmpty() && i.getItem() == offHandItem.getItem() && i.getItemDamage() == offHandItem.getItemDamage()) + { + ItemStack postChange = itemChangesPost.get(postChangeItem).copy(); + postChange.setCount(offHandItem.getCount()); + player.inventory.offHandInventory.set(0, postChange); + break; + } + postChangeItem++; + } + if (OxygenUtil.noAtmosphericCombustion(player.world.provider)) + { + checkItemAndSwitch(theCurrentItem, player, torchItemsRegular, torchItemsSpace, false); + checkItemAndSwitch(offHandItem, player, torchItemsRegular, torchItemsSpace, true); + } + else + { + checkItemAndSwitch(theCurrentItem, player, torchItemsSpace, torchItemsRegular, false); + checkItemAndSwitch(offHandItem, player, torchItemsSpace, torchItemsRegular, true); + } + + // If the player is holding a two-handed item in both hands, switch the + // off-hand item out, or drop if necessary + if (!theCurrentItem.isEmpty() && !offHandItem.isEmpty()) + { + if (theCurrentItem.getItem() instanceof IHoldableItem && offHandItem.getItem() instanceof IHoldableItem) + { + int emptyStack = player.inventory.getFirstEmptyStack(); + + if (emptyStack >= 0) + { + ItemStack copyOffHandItem = offHandItem.copy(); + copyOffHandItem.setAnimationsToGo(5); + player.inventory.mainInventory.set(emptyStack, copyOffHandItem); + } + else + { + player.dropItem(offHandItem, false); + } + + player.setItemStackToSlot(EntityEquipmentSlot.OFFHAND, ItemStack.EMPTY); + } + } + } + + public void registerTorchTypes() + { + for (Entry type : BlockUnlitTorch.registeredTorches.entrySet()) + { + // Space Torch registration must be unique; there may be multiple + // mappings for vanillaTorch + torchItemsSpace.add(Item.getItemFromBlock(type.getKey())); + torchItemsRegular.add(Item.getItemFromBlock(type.getValue())); + } + } + + public void registerItemChanges() + { + for (Entry type : GCBlocks.itemChanges.entrySet()) + { + itemChangesPre.add(new ItemStack(type.getKey())); + itemChangesPost.add(new ItemStack(type.getValue())); + } + for (Entry type : GCItems.itemChanges.entrySet()) + { + itemChangesPre.add(type.getKey()); + itemChangesPost.add(type.getValue()); + } + } + + public static void setUsingParachute(EntityPlayerMP player, GCPlayerStats playerStats, boolean tf) + { + playerStats.setUsingParachute(tf); + + if (tf) + { + int subtype = GCPlayerHandler.GEAR_NOT_PRESENT; + + if (!playerStats.getParachuteInSlot().isEmpty()) + { + subtype = playerStats.getParachuteInSlot().getItemDamage(); + } + + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.PARACHUTE, subtype); + } + else + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.PARACHUTE); + } + } + + protected static void updateFeet(EntityPlayerMP player, double motionX, double motionZ) + { + double motionSqrd = motionX * motionX + motionZ * motionZ; + if (motionSqrd > 0.001D && !player.capabilities.isFlying) + { + int iPosX = MathHelper.floor(player.posX); + int iPosY = MathHelper.floor(player.posY - 0.05); + int iPosZ = MathHelper.floor(player.posZ); + + // If the block below is the moon block + IBlockState state = player.world.getBlockState(new BlockPos(iPosX, iPosY, iPosZ)); + if (state.getBlock() == GCBlocks.blockMoon) + { + // And is the correct metadata (moon turf) + if (state.getValue(BlockBasicMoon.BASIC_TYPE_MOON) == BlockBasicMoon.EnumBlockBasicMoon.MOON_TURF) + { + GCPlayerStats stats = GCPlayerStats.get(player); + // If it has been long enough since the last step + if (stats.getDistanceSinceLastStep() > 0.35D) + { + Vector3 pos = new Vector3(player); + // Set the footprint position to the block below and add + // random number to stop z-fighting + pos.y = MathHelper.floor(player.posY - 1D) + player.world.rand.nextFloat() / 100.0F; + + // Adjust footprint to left or right depending on step + // count + switch (stats.getLastStep()) + { + case 0: + float a = (-player.rotationYaw + 90F) / Constants.RADIANS_TO_DEGREES; + pos.translate(new Vector3(MathHelper.sin(a) * 0.25F, 0, MathHelper.cos(a) * 0.25F)); + break; + case 1: + a = (-player.rotationYaw - 90F) / Constants.RADIANS_TO_DEGREES; + pos.translate(new Vector3(MathHelper.sin(a) * 0.25, 0, MathHelper.cos(a) * 0.25)); + break; + } + + float rotation = player.rotationYaw - 180; + pos = WorldUtil.getFootprintPosition(player.world, rotation, pos, new BlockVec3(player)); + + long chunkKey = ChunkPos.asLong(pos.intX() >> 4, pos.intZ() >> 4); + TickHandlerServer.addFootprint(chunkKey, new Footprint(GCCoreUtil.getDimensionID(player.world), pos, rotation, player.getName(), -1), GCCoreUtil.getDimensionID(player.world)); + + // Increment and cap step counter at 1 + stats.setLastStep((stats.getLastStep() + 1) % 2); + stats.setDistanceSinceLastStep(0); + } + else + { + stats.setDistanceSinceLastStep(stats.getDistanceSinceLastStep() + motionSqrd); + } + } + } + } + } + + protected void updateSchematics(EntityPlayerMP player, GCPlayerStats stats) + { + SchematicRegistry.addUnlockedPage(player, SchematicRegistry.getMatchingRecipeForID(0)); + SchematicRegistry.addUnlockedPage(player, SchematicRegistry.getMatchingRecipeForID(Integer.MAX_VALUE)); + + Collections.sort(stats.getUnlockedSchematics()); + + if (player.connection != null && (stats.getUnlockedSchematics().size() != stats.getLastUnlockedSchematics().size() || (player.ticksExisted - 1) % 100 == 0)) + { + Integer[] iArray = new Integer[stats.getUnlockedSchematics().size()]; + + for (int i = 0; i < iArray.length; i++) + { + ISchematicPage page = stats.getUnlockedSchematics().get(i); + iArray[i] = page == null ? -2 : page.getPageID(); + } + + List objList = new ArrayList<>(); + objList.add(iArray); + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SCHEMATIC_LIST, GCCoreUtil.getDimensionID(player.world), objList), player); + } + } + + public static class ThermalArmorEvent extends Event + { + + public ArmorAddResult armorResult = ArmorAddResult.NOTHING; + public final int armorIndex; + public final ItemStack armorStack; + + public ThermalArmorEvent(int armorIndex, ItemStack armorStack) + { + this.armorIndex = armorIndex; + this.armorStack = armorStack; + } + + public void setArmorAddResult(ArmorAddResult result) + { + this.armorResult = result; + } + + public enum ArmorAddResult + { + ADD, REMOVE, NOTHING + } + } + + protected void sendPlanetList(EntityPlayerMP player, GCPlayerStats stats) + { + HashMap map; + if (player.ticksExisted % 50 == 0) + // Check for genuine update - e.g. maybe some other player created a + // space station or changed permissions + // CAUTION: possible server load due to dimension loading, if any + // planets or moons were (contrary to GC default) set to hotload + { + map = WorldUtil.getArrayOfPossibleDimensions(stats.getSpaceshipTier(), player); + } + else + { + map = WorldUtil.getArrayOfPossibleDimensionsAgain(stats.getSpaceshipTier(), player); + } + + String temp = ""; + int count = 0; + + for (Entry entry : map.entrySet()) + { + temp = temp.concat(entry.getKey() + (count < map.entrySet().size() - 1 ? "?" : "")); + count++; + } + + if (!temp.equals(stats.getSavedPlanetList()) || (player.ticksExisted % 100 == 0)) + { + boolean canCreateStations = PermissionAPI.hasPermission(player, Constants.PERMISSION_CREATE_STATION); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_DIMENSION_LIST, GCCoreUtil.getDimensionID(player.world), new Object[] {PlayerUtil.getName(player), temp, canCreateStations}), player); + stats.setSavedPlanetList(temp); + // GalacticraftCore.logger.debug("Sending to " + PlayerUtil.getName(player) + ": " + + // temp); + } + } + + protected static void sendAirRemainingPacket(EntityPlayerMP player, GCPlayerStats stats) + { + final float f1 = stats.getTankInSlot1().isEmpty() ? 0.0F : stats.getTankInSlot1().getMaxDamage() / 90.0F; + final float f2 = stats.getTankInSlot2().isEmpty() ? 0.0F : stats.getTankInSlot2().getMaxDamage() / 90.0F; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_AIR_REMAINING, GCCoreUtil.getDimensionID(player.world), new Object[] {MathHelper.floor(stats.getAirRemaining() / f1), MathHelper.floor(stats.getAirRemaining2() / f2), PlayerUtil.getName(player)}), player); + } + + protected void sendThermalLevelPacket(EntityPlayerMP player, GCPlayerStats stats) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_THERMAL_LEVEL, GCCoreUtil.getDimensionID(player.world), new Object[] {stats.getThermalLevel(), stats.isThermalLevelNormalising()}), player); + } + + protected void sendDungeonDirectionPacket(EntityPlayerMP player, GCPlayerStats stats) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_DUNGEON_DIRECTION, GCCoreUtil.getDimensionID(player.world), new Object[] {MapGenDungeon.directionToNearestDungeon(player.world, player.posX + player.motionX, player.posZ + player.motionZ)}), player); + } + + public static void sendGearUpdatePacket(EntityPlayerMP player, EnumModelPacketType packetType, EnumExtendedInventorySlot gearType) + { + GCPlayerHandler.sendGearUpdatePacket(player, packetType, gearType, GCPlayerHandler.GEAR_NOT_PRESENT); + } + + public static void sendGearUpdatePacket(EntityPlayerMP player, EnumModelPacketType packetType, EnumExtendedInventorySlot gearType, int gearID) + { + MinecraftServer theServer = player.server; + if (theServer != null && PlayerUtil.getPlayerForUsernameVanilla(theServer, PlayerUtil.getName(player)) != null) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_UPDATE_GEAR_SLOT, GCCoreUtil.getDimensionID(player.world), new Object[] {PlayerUtil.getName(player), packetType.ordinal(), gearType.ordinal(), gearID}), new TargetPoint(GCCoreUtil.getDimensionID(player.world), player.posX, player.posY, player.posZ, 50.0D)); + } + } + + public enum EnumModelPacketType + { + ADD, REMOVE + } + + public void onPlayerUpdate(EntityPlayerMP player) + { + int tick = player.ticksExisted - 1; + + // This will speed things up a little + GCPlayerStats stats = GCPlayerStats.get(player); + + if ((ConfigManagerCore.challengeSpawnHandling) && stats.getUnlockedSchematics().size() == 0) + { + if (stats.getStartDimension().length() > 0) + { + stats.setStartDimension(""); + } + else + { + // PlayerAPI is installed + WorldServer worldOld = (WorldServer) player.world; + try + { + worldOld.getPlayerChunkMap().removePlayer(player); + } catch (Exception e) + {} + worldOld.playerEntities.remove(player); + worldOld.updateAllPlayersSleepingFlag(); + worldOld.loadedEntityList.remove(player); + worldOld.onEntityRemoved(player); + worldOld.getEntityTracker().untrack(player); + if (player.addedToChunk && worldOld.getChunkProvider().chunkExists(player.chunkCoordX, player.chunkCoordZ)) + { + Chunk chunkOld = worldOld.getChunk(player.chunkCoordX, player.chunkCoordZ); + chunkOld.removeEntity(player); + chunkOld.setModified(true); + } + + WorldServer worldNew = WorldUtil.getStartWorld(worldOld); + int dimID = GCCoreUtil.getDimensionID(worldNew); + player.dimension = dimID; + GalacticraftCore.logger.debug("DEBUG: Sending respawn packet to player for dim " + dimID); + player.connection.sendPacket(new SPacketRespawn(dimID, player.world.getDifficulty(), player.world.getWorldInfo().getTerrainType(), player.interactionManager.getGameType())); + + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(player.world), new Object[] {}), player); + } + worldNew.spawnEntity(player); + player.setWorld(worldNew); + player.server.getPlayerList().preparePlayer(player, worldOld); + } + + // This is a mini version of the code at WorldUtil.teleportEntity + player.interactionManager.setWorld((WorldServer) player.world); + final ITeleportType type = GalacticraftRegistry.getTeleportTypeForDimension(player.world.provider.getClass()); + Vector3 spawnPos = type.getPlayerSpawnLocation((WorldServer) player.world, player); + ChunkPos pair = player.world.getChunk(spawnPos.intX() >> 4, spawnPos.intZ() >> 4).getPos(); + GalacticraftCore.logger.debug("Loading first chunk in new dimension."); + ((WorldServer) player.world).getChunkProvider().loadChunk(pair.x, pair.z); + player.setLocationAndAngles(spawnPos.x, spawnPos.y, spawnPos.z, player.rotationYaw, player.rotationPitch); + type.setupAdventureSpawn(player); + type.onSpaceDimensionChanged(player.world, player, false); + player.setSpawnChunk(new BlockPos(spawnPos.intX(), spawnPos.intY(), spawnPos.intZ()), true, GCCoreUtil.getDimensionID(player.world)); + stats.setNewAdventureSpawn(true); + } + final boolean isInGCDimension = player.world.provider instanceof IGalacticraftWorldProvider; + + if (tick >= 25) + { + if (ConfigManagerCore.enableSpaceRaceManagerPopup && !stats.hasOpenedSpaceRaceManager()) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(player)); + + if (race == null || race.teamName.equals(SpaceRace.DEFAULT_NAME)) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_SPACE_RACE_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] {}), player); + } + + stats.setOpenedSpaceRaceManager(true); + } + if (!stats.hasSentFlags()) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_STATS, GCCoreUtil.getDimensionID(player.world), stats.getMiscNetworkedStats()), player); + stats.setSentFlags(true); + } + } + + if (stats.getCryogenicChamberCooldown() > 0) + { + stats.setCryogenicChamberCooldown(stats.getCryogenicChamberCooldown() - 1); + } + + if (!player.onGround && stats.isLastOnGround()) + { + stats.setTouchedGround(true); + } + + if (stats.getTeleportCooldown() > 0) + { + stats.setTeleportCooldown(stats.getTeleportCooldown() - 1); + } + + if (stats.getChatCooldown() > 0) + { + stats.setChatCooldown(stats.getChatCooldown() - 1); + } + + if (stats.getOpenPlanetSelectionGuiCooldown() > 0) + { + stats.setOpenPlanetSelectionGuiCooldown(stats.getOpenPlanetSelectionGuiCooldown() - 1); + + if (stats.getOpenPlanetSelectionGuiCooldown() == 1 && !stats.hasOpenedPlanetSelectionGui()) + { + WorldUtil.toCelestialSelection(player, stats, stats.getSpaceshipTier()); + stats.setHasOpenedPlanetSelectionGui(true); + } + } + + if (stats.isUsingParachute()) + { + if (!stats.getLastParachuteInSlot().isEmpty()) + { + player.fallDistance = 0.0F; + } + if (player.onGround) + { + GCPlayerHandler.setUsingParachute(player, stats, false); + } + } + + this.checkCurrentItem(player); + + if (stats.isUsingPlanetSelectionGui()) + { + // This sends the planets list again periodically (forcing the + // Celestial Selection screen to open) in case of server/client lag + // #PACKETSPAM + this.sendPlanetList(player, stats); + } + + /* + * if (isInGCDimension || player.usingPlanetSelectionGui) { + * player.connection.ticksForFloatKick = 0; } + */ + if (stats.getDamageCounter() > 0) + { + stats.setDamageCounter(stats.getDamageCounter() - 1); + } + + if (isInGCDimension) + { + if (tick % 10 == 0) + { + boolean doneDungeon = false; + ItemStack current = player.inventory.getCurrentItem(); + if (current != null && current.getItem() == GCItems.dungeonFinder) + { + this.sendDungeonDirectionPacket(player, stats); + doneDungeon = true; + } + if (tick % 30 == 0) + { + GCPlayerHandler.sendAirRemainingPacket(player, stats); + this.sendThermalLevelPacket(player, stats); + + if (!doneDungeon) + { + for (ItemStack stack : player.inventory.mainInventory) + { + if (stack != null && stack.getItem() == GCItems.dungeonFinder) + { + this.sendDungeonDirectionPacket(player, stats); + break; + } + } + } + } + } + + if (player.getRidingEntity() instanceof EntityLanderBase) + { + stats.setInLander(true); + stats.setJustLanded(false); + } + else + { + if (stats.isInLander()) + { + stats.setJustLanded(true); + } + stats.setInLander(false); + } + + if (player.onGround && stats.hasJustLanded()) + { + stats.setJustLanded(false); + + // Set spawn point here if just descended from a lander for the + // first time + if (player.getBedLocation(GCCoreUtil.getDimensionID(player.world)) == null || stats.isNewAdventureSpawn()) + { + int i = 30000000; + int j = Math.min(i, Math.max(-i, MathHelper.floor(player.posX + 0.5D))); + int k = Math.min(256, Math.max(0, MathHelper.floor(player.posY + 1.5D))); + int l = Math.min(i, Math.max(-i, MathHelper.floor(player.posZ + 0.5D))); + BlockPos coords = new BlockPos(j, k, l); + player.setSpawnChunk(coords, true, GCCoreUtil.getDimensionID(player.world)); + stats.setNewAdventureSpawn(false); + } + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(player.world), new Object[] {}), player); + } + + if (player.world.provider instanceof WorldProviderSpaceStation || player.world.provider instanceof IZeroGDimension || player.world.provider instanceof WorldProviderAsteroids) + { + this.preventFlyingKicks(player); + if (player.world.provider instanceof WorldProviderSpaceStation && stats.isNewInOrbit()) + { + ((WorldProviderSpaceStation) player.world.provider).getSpinManager().sendPackets(player); + stats.setNewInOrbit(false); + } + } + else + { + stats.setNewInOrbit(true); + } + } + else + { + stats.setNewInOrbit(true); + } + + checkGear(player, stats, false); + + if (stats.getChestSpawnCooldown() > 0) + { + stats.setChestSpawnCooldown(stats.getChestSpawnCooldown() - 1); + + if (stats.getChestSpawnCooldown() == 180) + { + if (stats.getChestSpawnVector() != null) + { + EntityParachest chest = new EntityParachest(player.world, stats.getRocketStacks(), stats.getFuelLevel()); + + chest.setPosition(stats.getChestSpawnVector().x, stats.getChestSpawnVector().y, stats.getChestSpawnVector().z); + chest.color = stats.getParachuteInSlot().isEmpty() ? EnumDyeColor.WHITE : ItemParaChute.getDyeEnumFromParachuteDamage(stats.getParachuteInSlot().getItemDamage()); + + if (!player.world.isRemote) + { + player.world.spawnEntity(chest); + } + } + } + } + + // + + if (stats.getLaunchAttempts() > 0 && player.getRidingEntity() == null) + { + stats.setLaunchAttempts(0); + } + + this.checkThermalStatus(player, stats); + this.checkOxygen(player, stats); + this.checkShield(player, stats); + + if (isInGCDimension && (stats.isOxygenSetupValid() != stats.isLastOxygenSetupValid() || tick % 100 == 0)) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_OXYGEN_VALIDITY, player.world.provider.getDimension(), new Object[] {stats.isOxygenSetupValid()}), player); + } + + this.throwMeteors(player); + + this.updateSchematics(player, stats); + + if (tick % 250 == 0 && stats.getFrequencyModuleInSlot().isEmpty() && !stats.hasReceivedSoundWarning() && isInGCDimension && player.onGround && tick > 0 && ((IGalacticraftWorldProvider) player.world.provider).getSoundVolReductionAmount() > 1.0F) + { + String[] string2 = GCCoreUtil.translate("gui.frequencymodule.warning1").split(" "); + StringBuilder sb = new StringBuilder(); + for (String aString2 : string2) + { + sb.append(" ").append(EnumColor.YELLOW).append(aString2); + } + player.sendMessage(new TextComponentString(EnumColor.YELLOW + GCCoreUtil.translate("gui.frequencymodule.warning0") + " " + EnumColor.AQUA + GCItems.basicItem.getItemStackDisplayName(new ItemStack(GCItems.basicItem, 1, 19)) + sb.toString())); + stats.setReceivedSoundWarning(true); + } + + // Player moves and sprints 18% faster with full set of Titanium Armor + if (tick % 40 == 1 && player.inventory != null) + { + int titaniumCount = 0; + for (ItemStack armorPiece : player.getArmorInventoryList()) + { + if (armorPiece != null && armorPiece.getItem() instanceof ItemArmorAsteroids) + { + titaniumCount++; + } + } + if (stats.getSavedSpeed() == 0F) + { + if (titaniumCount == 4) + { + float speed = player.capabilities.getWalkSpeed(); + if (speed < 0.118F) + { + try + { + Field f = player.capabilities.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "walkSpeed" : "field_75097_g"); + f.setAccessible(true); + f.set(player.capabilities, 0.118F); + stats.setSavedSpeed(speed); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + else if (titaniumCount < 4) + { + try + { + Field f = player.capabilities.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "walkSpeed" : "field_75097_g"); + f.setAccessible(true); + f.set(player.capabilities, stats.getSavedSpeed()); + stats.setSavedSpeed(0F); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + stats.setLastOxygenSetupValid(stats.isOxygenSetupValid()); + stats.setLastUnlockedSchematics(stats.getUnlockedSchematics()); + stats.setLastOnGround(player.onGround); + } + + public void preventFlyingKicks(EntityPlayerMP player) + { + player.fallDistance = 0.0F; + player.connection.floatingTickCount = 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStats.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStats.java new file mode 100644 index 00000000..0d6c3dda --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStats.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.ref.WeakReference; +import java.util.HashMap; +import java.util.List; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; + +public abstract class GCPlayerStats +{ + + public static GCPlayerStats get(Entity entity) + { + return entity.getCapability(GCCapabilities.GC_STATS_CAPABILITY, null); + } + + public abstract void saveNBTData(NBTTagCompound nbt); + + public abstract void loadNBTData(NBTTagCompound nbt); + + public abstract void copyFrom(GCPlayerStats oldData, boolean keepInv); + + public abstract WeakReference getPlayer(); + + public abstract void setPlayer(WeakReference player); + + public abstract InventoryExtended getExtendedInventory(); + + public abstract void setExtendedInventory(InventoryExtended extendedInventory); + + public abstract int getAirRemaining(); + + public abstract void setAirRemaining(int airRemaining); + + public abstract int getAirRemaining2(); + + public abstract void setAirRemaining2(int airRemaining2); + + public abstract int getThermalLevel(); + + public abstract void setThermalLevel(int thermalLevel); + + public abstract boolean isThermalLevelNormalising(); + + public abstract void setThermalLevelNormalising(boolean thermalLevelNormalising); + + public abstract int getDamageCounter(); + + public abstract void setDamageCounter(int damageCounter); + + public abstract int getSpaceshipTier(); + + public abstract void setSpaceshipTier(int spaceshipTier); + + public abstract NonNullList getRocketStacks(); + + public abstract void setRocketStacks(NonNullList rocketStacks); + + public abstract int getRocketType(); + + public abstract void setRocketType(int rocketType); + + public abstract int getFuelLevel(); + + public abstract void setFuelLevel(int fuelLevel); + + public abstract Item getRocketItem(); + + public abstract void setRocketItem(Item rocketItem); + + public abstract ItemStack getLaunchpadStack(); + + public abstract void setLaunchpadStack(ItemStack launchpadStack); + + public abstract int getAstroMinerCount(); + + public abstract void setAstroMinerCount(int astroMinerCount); + + public abstract List getActiveAstroMinerChunks(); + + public abstract boolean isUsingParachute(); + + public abstract void setUsingParachute(boolean usingParachute); + + public abstract ItemStack getParachuteInSlot(); + + public abstract void setParachuteInSlot(ItemStack parachuteInSlot); + + public abstract ItemStack getLastParachuteInSlot(); + + public abstract void setLastParachuteInSlot(ItemStack lastParachuteInSlot); + + public abstract ItemStack getFrequencyModuleInSlot(); + + public abstract void setFrequencyModuleInSlot(ItemStack frequencyModuleInSlot); + + public abstract ItemStack getLastFrequencyModuleInSlot(); + + public abstract void setLastFrequencyModuleInSlot(ItemStack lastFrequencyModuleInSlot); + + public abstract ItemStack getMaskInSlot(); + + public abstract void setMaskInSlot(ItemStack maskInSlot); + + public abstract ItemStack getLastMaskInSlot(); + + public abstract void setLastMaskInSlot(ItemStack lastMaskInSlot); + + public abstract ItemStack getGearInSlot(); + + public abstract void setGearInSlot(ItemStack gearInSlot); + + public abstract ItemStack getLastGearInSlot(); + + public abstract void setLastGearInSlot(ItemStack lastGearInSlot); + + public abstract ItemStack getTankInSlot1(); + + public abstract void setTankInSlot1(ItemStack tankInSlot1); + + public abstract ItemStack getLastTankInSlot1(); + + public abstract void setLastTankInSlot1(ItemStack lastTankInSlot1); + + public abstract ItemStack getTankInSlot2(); + + public abstract void setTankInSlot2(ItemStack tankInSlot2); + + public abstract ItemStack getLastTankInSlot2(); + + public abstract void setLastTankInSlot2(ItemStack lastTankInSlot2); + + public abstract ItemStack getThermalHelmetInSlot(); + + public abstract void setThermalHelmetInSlot(ItemStack thermalHelmetInSlot); + + public abstract ItemStack getLastThermalHelmetInSlot(); + + public abstract void setLastThermalHelmetInSlot(ItemStack lastThermalHelmetInSlot); + + public abstract ItemStack getThermalChestplateInSlot(); + + public abstract void setThermalChestplateInSlot(ItemStack thermalChestplateInSlot); + + public abstract ItemStack getLastThermalChestplateInSlot(); + + public abstract void setLastThermalChestplateInSlot(ItemStack lastThermalChestplateInSlot); + + public abstract ItemStack getThermalLeggingsInSlot(); + + public abstract void setThermalLeggingsInSlot(ItemStack thermalLeggingsInSlot); + + public abstract ItemStack getLastThermalLeggingsInSlot(); + + public abstract void setLastThermalLeggingsInSlot(ItemStack lastThermalLeggingsInSlot); + + public abstract ItemStack getThermalBootsInSlot(); + + public abstract void setThermalBootsInSlot(ItemStack thermalBootsInSlot); + + public abstract ItemStack getLastThermalBootsInSlot(); + + public abstract void setLastThermalBootsInSlot(ItemStack lastThermalBootsInSlot); + + public abstract ItemStack getShieldControllerInSlot(); + + public abstract void setShieldControllerInSlot(ItemStack shieldControllerInSlot); + + public abstract ItemStack getLastShieldControllerInSlot(); + + public abstract void setLastShieldControllerInSlot(ItemStack lastShieldControllerInSlot); + + public abstract int getLaunchAttempts(); + + public abstract void setLaunchAttempts(int launchAttempts); + + public abstract int getSpaceRaceInviteTeamID(); + + public abstract void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID); + + public abstract boolean isUsingPlanetSelectionGui(); + + public abstract void setUsingPlanetSelectionGui(boolean usingPlanetSelectionGui); + + public abstract String getSavedPlanetList(); + + public abstract void setSavedPlanetList(String savedPlanetList); + + public abstract int getOpenPlanetSelectionGuiCooldown(); + + public abstract void setOpenPlanetSelectionGuiCooldown(int openPlanetSelectionGuiCooldown); + + public abstract boolean hasOpenedPlanetSelectionGui(); + + public abstract void setHasOpenedPlanetSelectionGui(boolean hasOpenedPlanetSelectionGui); + + public abstract int getChestSpawnCooldown(); + + public abstract void setChestSpawnCooldown(int chestSpawnCooldown); + + public abstract Vector3 getChestSpawnVector(); + + public abstract void setChestSpawnVector(Vector3 chestSpawnVector); + + public abstract int getTeleportCooldown(); + + public abstract void setTeleportCooldown(int teleportCooldown); + + public abstract int getChatCooldown(); + + public abstract void setChatCooldown(int chatCooldown); + + public abstract double getDistanceSinceLastStep(); + + public abstract void setDistanceSinceLastStep(double distanceSinceLastStep); + + public abstract int getLastStep(); + + public abstract void setLastStep(int lastStep); + + public abstract double getCoordsTeleportedFromX(); + + public abstract void setCoordsTeleportedFromX(double coordsTeleportedFromX); + + public abstract double getCoordsTeleportedFromZ(); + + public abstract void setCoordsTeleportedFromZ(double coordsTeleportedFromZ); + + public abstract HashMap getSpaceStationDimensionData(); + + public abstract void setSpaceStationDimensionData(HashMap spaceStationDimensionData); + + public abstract boolean isOxygenSetupValid(); + + public abstract void setOxygenSetupValid(boolean oxygenSetupValid); + + public abstract boolean isLastOxygenSetupValid(); + + public abstract void setLastOxygenSetupValid(boolean lastOxygenSetupValid); + + public abstract boolean isTouchedGround(); + + public abstract void setTouchedGround(boolean touchedGround); + + public abstract boolean isLastOnGround(); + + public abstract void setLastOnGround(boolean lastOnGround); + + public abstract boolean isInLander(); + + public abstract void setInLander(boolean inLander); + + public abstract boolean hasJustLanded(); + + public abstract void setJustLanded(boolean justLanded); + + public abstract List getUnlockedSchematics(); + + public abstract void setUnlockedSchematics(List unlockedSchematics); + + public abstract List getLastUnlockedSchematics(); + + public abstract void setLastUnlockedSchematics(List lastUnlockedSchematics); + + public abstract int getCryogenicChamberCooldown(); + + public abstract void setCryogenicChamberCooldown(int cryogenicChamberCooldown); + + public abstract boolean hasReceivedSoundWarning(); + + public abstract void setReceivedSoundWarning(boolean receivedSoundWarning); + + public abstract boolean hasReceivedBedWarning(); + + public abstract void setReceivedBedWarning(boolean receivedBedWarning); + + public abstract boolean hasOpenedSpaceRaceManager(); + + public abstract void setOpenedSpaceRaceManager(boolean openedSpaceRaceManager); + + public abstract boolean hasSentFlags(); + + public abstract void setSentFlags(boolean sentFlags); + + public abstract boolean isNewInOrbit(); + + public abstract void setNewInOrbit(boolean newInOrbit); + + public abstract boolean isNewAdventureSpawn(); + + public abstract void setNewAdventureSpawn(boolean newAdventureSpawn); + + public abstract int getBuildFlags(); + + public abstract void setBuildFlags(int buildFlags); + + public abstract int getIncrementalDamage(); + + public abstract void setIncrementalDamage(int incrementalDamage); + + public abstract String getStartDimension(); + + public abstract void setStartDimension(String startDimension); + + public abstract void setGlassColors(int color1, int color2, int color3); + + public abstract int getGlassColor1(); + + public abstract int getGlassColor2(); + + public abstract int getGlassColor3(); + + public abstract IBlockState[] getPanelLightingBases(); + + public abstract int getPanelLightingColor(); + + public abstract void setPanelLightingColor(int color); + + public abstract Object[] getMiscNetworkedStats(); + + public abstract void setSavedSpeed(float value); + + public abstract float getSavedSpeed(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStatsClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStatsClient.java new file mode 100644 index 00000000..42b13dfd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStatsClient.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.AxisAlignedBB; + +public abstract class GCPlayerStatsClient +{ + + public static GCPlayerStatsClient get(Entity entity) + { + return entity.getCapability(GCCapabilities.GC_STATS_CLIENT_CAPABILITY, null); + } + + public abstract void setGravity(EnumGravity newGravity); + + public abstract boolean isUsingParachute(); + + public abstract void setUsingParachute(boolean usingParachute); + + public abstract boolean isLastUsingParachute(); + + public abstract void setLastUsingParachute(boolean lastUsingParachute); + + public abstract boolean isUsingAdvancedGoggles(); + + public abstract void setUsingAdvancedGoggles(boolean usingAdvancedGoggles); + + public abstract int getThermalLevel(); + + public abstract void setThermalLevel(int thermalLevel); + + public abstract boolean isThermalLevelNormalising(); + + public abstract void setThermalLevelNormalising(boolean thermalLevelNormalising); + + public abstract int getThirdPersonView(); + + public abstract void setThirdPersonView(int thirdPersonView); + + public abstract long getTick(); + + public abstract void setTick(long tick); + + public abstract boolean isOxygenSetupValid(); + + public abstract void setOxygenSetupValid(boolean oxygenSetupValid); + + public abstract AxisAlignedBB getBoundingBoxBefore(); + + public abstract void setBoundingBoxBefore(AxisAlignedBB boundingBoxBefore); + + public abstract boolean isLastOnGround(); + + public abstract void setLastOnGround(boolean lastOnGround); + + public abstract double getDistanceSinceLastStep(); + + public abstract void setDistanceSinceLastStep(double distanceSinceLastStep); + + public abstract int getLastStep(); + + public abstract void setLastStep(int lastStep); + + public abstract boolean isInFreefall(); + + public abstract void setInFreefall(boolean inFreefall); + + public abstract boolean isInFreefallLast(); + + public abstract void setInFreefallLast(boolean inFreefallLast); + + public abstract boolean isInFreefallFirstCheck(); + + public abstract void setInFreefallFirstCheck(boolean inFreefallFirstCheck); + + public abstract double getDownMotionLast(); + + public abstract void setDownMotionLast(double downMotionLast); + + public abstract boolean isLastRidingCameraZoomEntity(); + + public abstract void setLastRidingCameraZoomEntity(boolean lastRidingCameraZoomEntity); + + public abstract int getLandingTicks(); + + public abstract void setLandingTicks(int landingTicks); + + public abstract EnumGravity getGdir(); + + public abstract void setGdir(EnumGravity gdir); + + public abstract float getGravityTurnRate(); + + public abstract void setGravityTurnRate(float gravityTurnRate); + + public abstract float getGravityTurnRatePrev(); + + public abstract void setGravityTurnRatePrev(float gravityTurnRatePrev); + + public abstract float getGravityTurnVecX(); + + public abstract void setGravityTurnVecX(float gravityTurnVecX); + + public abstract float getGravityTurnVecY(); + + public abstract void setGravityTurnVecY(float gravityTurnVecY); + + public abstract float getGravityTurnVecZ(); + + public abstract void setGravityTurnVecZ(float gravityTurnVecZ); + + public abstract float getGravityTurnYaw(); + + public abstract void setGravityTurnYaw(float gravityTurnYaw); + + public abstract int getSpaceRaceInviteTeamID(); + + public abstract void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID); + + public abstract boolean isLastZoomed(); + + public abstract void setLastZoomed(boolean lastZoomed); + + public abstract int getBuildFlags(); + + public abstract void setBuildFlags(int buildFlags); + + public abstract boolean isSsOnGroundLast(); + + public abstract void setSsOnGroundLast(boolean ssOnGroundLast); + + public abstract FreefallHandler getFreefallHandler(); + + public abstract void setFreefallHandler(FreefallHandler freefallHandler); + + public abstract ArrayList getUnlockedSchematics(); + + public abstract void setUnlockedSchematics(ArrayList unlockedSchematics); + + public abstract int getMaxLandingticks(); + + public abstract float[] getLandingYOffset(); + + public abstract void setLandingYOffset(float[] landingYOffset); + + public abstract void setDungeonDirection(float dir); + + public abstract float getDungeonDirection(); + + public abstract void startPlatformAscent(TileEntityPlatform noCollide, TileEntityPlatform moving, double target); + + public abstract void finishPlatformAscent(); + + public abstract boolean getPlatformControlled(); + + public abstract double getPlatformVelocity(double posY); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerClient.java new file mode 100644 index 00000000..d47e50ec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerClient.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.MoverType; + +public interface IPlayerClient +{ + + void move(EntityPlayerSP player, MoverType type, double x, double y, double z); + + void onUpdate(EntityPlayerSP player); + + void onLivingUpdatePre(EntityPlayerSP player); + + void onLivingUpdatePost(EntityPlayerSP player); + + float getBedOrientationInDegrees(EntityPlayerSP player, float vanillaDegrees); + + boolean isEntityInsideOpaqueBlock(EntityPlayerSP player, boolean vanillaInside); + + boolean wakeUpPlayer(EntityPlayerSP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn); + + void onBuild(int i, EntityPlayerSP player); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerServer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerServer.java new file mode 100644 index 00000000..42bc52b8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerServer.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.DamageSource; + +public interface IPlayerServer +{ + + void updateRiddenPre(EntityPlayerMP player); + + void updateRiddenPost(EntityPlayerMP player); + + boolean dismountEntity(EntityPlayerMP player, Entity par1Entity); + + void move(EntityPlayerMP player, MoverType type, double x, double y, double z); + + boolean wakeUpPlayer(EntityPlayerMP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn); + + float attackEntityFrom(EntityPlayerMP player, DamageSource par1DamageSource, float par2); + + void knockBack(EntityPlayerMP player, Entity p_70653_1_, float p_70653_2_, double impulseX, double impulseZ); + + boolean isSpectator(EntityPlayerMP player); + + void setNoClip(EntityPlayerMP player, boolean noClip); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsCapability.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsCapability.java new file mode 100644 index 00000000..82985df4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsCapability.java @@ -0,0 +1,318 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; + +public interface IStatsCapability +{ + + void saveNBTData(NBTTagCompound nbt); + + void loadNBTData(NBTTagCompound nbt); + + void copyFrom(IStatsCapability oldData, boolean keepInv); + + WeakReference getPlayer(); + + void setPlayer(WeakReference player); + + InventoryExtended getExtendedInventory(); + + void setExtendedInventory(InventoryExtended extendedInventory); + + int getAirRemaining(); + + void setAirRemaining(int airRemaining); + + int getAirRemaining2(); + + void setAirRemaining2(int airRemaining2); + + int getThermalLevel(); + + void setThermalLevel(int thermalLevel); + + boolean isThermalLevelNormalising(); + + void setThermalLevelNormalising(boolean thermalLevelNormalising); + + int getDamageCounter(); + + void setDamageCounter(int damageCounter); + + int getSpaceshipTier(); + + void setSpaceshipTier(int spaceshipTier); + + NonNullList getRocketStacks(); + + void setRocketStacks(NonNullList rocketStacks); + + int getRocketType(); + + void setRocketType(int rocketType); + + int getFuelLevel(); + + void setFuelLevel(int fuelLevel); + + Item getRocketItem(); + + void setRocketItem(Item rocketItem); + + ItemStack getLaunchpadStack(); + + void setLaunchpadStack(ItemStack launchpadStack); + + int getAstroMinerCount(); + + void setAstroMinerCount(int astroMinerCount); + + boolean isUsingParachute(); + + void setUsingParachute(boolean usingParachute); + + ItemStack getParachuteInSlot(); + + void setParachuteInSlot(ItemStack parachuteInSlot); + + ItemStack getLastParachuteInSlot(); + + void setLastParachuteInSlot(ItemStack lastParachuteInSlot); + + ItemStack getFrequencyModuleInSlot(); + + void setFrequencyModuleInSlot(ItemStack frequencyModuleInSlot); + + ItemStack getLastFrequencyModuleInSlot(); + + void setLastFrequencyModuleInSlot(ItemStack lastFrequencyModuleInSlot); + + ItemStack getMaskInSlot(); + + void setMaskInSlot(ItemStack maskInSlot); + + ItemStack getLastMaskInSlot(); + + void setLastMaskInSlot(ItemStack lastMaskInSlot); + + ItemStack getGearInSlot(); + + void setGearInSlot(ItemStack gearInSlot); + + ItemStack getLastGearInSlot(); + + void setLastGearInSlot(ItemStack lastGearInSlot); + + ItemStack getTankInSlot1(); + + void setTankInSlot1(ItemStack tankInSlot1); + + ItemStack getLastTankInSlot1(); + + void setLastTankInSlot1(ItemStack lastTankInSlot1); + + ItemStack getTankInSlot2(); + + void setTankInSlot2(ItemStack tankInSlot2); + + ItemStack getLastTankInSlot2(); + + void setLastTankInSlot2(ItemStack lastTankInSlot2); + + ItemStack getThermalHelmetInSlot(); + + void setThermalHelmetInSlot(ItemStack thermalHelmetInSlot); + + ItemStack getLastThermalHelmetInSlot(); + + void setLastThermalHelmetInSlot(ItemStack lastThermalHelmetInSlot); + + ItemStack getThermalChestplateInSlot(); + + void setThermalChestplateInSlot(ItemStack thermalChestplateInSlot); + + ItemStack getLastThermalChestplateInSlot(); + + void setLastThermalChestplateInSlot(ItemStack lastThermalChestplateInSlot); + + ItemStack getThermalLeggingsInSlot(); + + void setThermalLeggingsInSlot(ItemStack thermalLeggingsInSlot); + + ItemStack getLastThermalLeggingsInSlot(); + + void setLastThermalLeggingsInSlot(ItemStack lastThermalLeggingsInSlot); + + ItemStack getThermalBootsInSlot(); + + void setThermalBootsInSlot(ItemStack thermalBootsInSlot); + + ItemStack getLastThermalBootsInSlot(); + + void setLastThermalBootsInSlot(ItemStack lastThermalBootsInSlot); + + ItemStack getShieldControllerInSlot(); + + void setShieldControllerInSlot(ItemStack shieldControllerInSlot); + + ItemStack getLastShieldControllerInSlot(); + + void setLastShieldControllerInSlot(ItemStack lastShieldControllerInSlot); + + int getLaunchAttempts(); + + void setLaunchAttempts(int launchAttempts); + + int getSpaceRaceInviteTeamID(); + + void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID); + + boolean isUsingPlanetSelectionGui(); + + void setUsingPlanetSelectionGui(boolean usingPlanetSelectionGui); + + String getSavedPlanetList(); + + void setSavedPlanetList(String savedPlanetList); + + int getOpenPlanetSelectionGuiCooldown(); + + void setOpenPlanetSelectionGuiCooldown(int openPlanetSelectionGuiCooldown); + + boolean hasOpenedPlanetSelectionGui(); + + void setHasOpenedPlanetSelectionGui(boolean hasOpenedPlanetSelectionGui); + + int getChestSpawnCooldown(); + + void setChestSpawnCooldown(int chestSpawnCooldown); + + Vector3 getChestSpawnVector(); + + void setChestSpawnVector(Vector3 chestSpawnVector); + + int getTeleportCooldown(); + + void setTeleportCooldown(int teleportCooldown); + + int getChatCooldown(); + + void setChatCooldown(int chatCooldown); + + double getDistanceSinceLastStep(); + + void setDistanceSinceLastStep(double distanceSinceLastStep); + + int getLastStep(); + + void setLastStep(int lastStep); + + double getCoordsTeleportedFromX(); + + void setCoordsTeleportedFromX(double coordsTeleportedFromX); + + double getCoordsTeleportedFromZ(); + + void setCoordsTeleportedFromZ(double coordsTeleportedFromZ); + + HashMap getSpaceStationDimensionData(); + + void setSpaceStationDimensionData(HashMap spaceStationDimensionData); + + boolean isOxygenSetupValid(); + + void setOxygenSetupValid(boolean oxygenSetupValid); + + boolean isLastOxygenSetupValid(); + + void setLastOxygenSetupValid(boolean lastOxygenSetupValid); + + boolean isTouchedGround(); + + void setTouchedGround(boolean touchedGround); + + boolean isLastOnGround(); + + void setLastOnGround(boolean lastOnGround); + + boolean isInLander(); + + void setInLander(boolean inLander); + + boolean hasJustLanded(); + + void setJustLanded(boolean justLanded); + + ArrayList getUnlockedSchematics(); + + void setUnlockedSchematics(ArrayList unlockedSchematics); + + ArrayList getLastUnlockedSchematics(); + + void setLastUnlockedSchematics(ArrayList lastUnlockedSchematics); + + int getCryogenicChamberCooldown(); + + void setCryogenicChamberCooldown(int cryogenicChamberCooldown); + + boolean hasReceivedSoundWarning(); + + void setReceivedSoundWarning(boolean receivedSoundWarning); + + boolean hasReceivedBedWarning(); + + void setReceivedBedWarning(boolean receivedBedWarning); + + boolean hasOpenedSpaceRaceManager(); + + void setOpenedSpaceRaceManager(boolean openedSpaceRaceManager); + + boolean hasSentFlags(); + + void setSentFlags(boolean sentFlags); + + boolean isNewInOrbit(); + + void setNewInOrbit(boolean newInOrbit); + + boolean isNewAdventureSpawn(); + + void setNewAdventureSpawn(boolean newAdventureSpawn); + + int getBuildFlags(); + + void setBuildFlags(int buildFlags); + + int getIncrementalDamage(); + + void setIncrementalDamage(int incrementalDamage); + + String getStartDimension(); + + void setStartDimension(String startDimension); + + void setGlassColors(int color1, int color2, int color3); + + int getGlassColor1(); + + int getGlassColor2(); + + int getGlassColor3(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsClientCapability.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsClientCapability.java new file mode 100644 index 00000000..7ceb2b40 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsClientCapability.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import net.minecraft.util.math.AxisAlignedBB; + +public interface IStatsClientCapability +{ + + void setGravity(EnumGravity newGravity); + + boolean isUsingParachute(); + + void setUsingParachute(boolean usingParachute); + + boolean isLastUsingParachute(); + + void setLastUsingParachute(boolean lastUsingParachute); + + boolean isUsingAdvancedGoggles(); + + void setUsingAdvancedGoggles(boolean usingAdvancedGoggles); + + int getThermalLevel(); + + void setThermalLevel(int thermalLevel); + + boolean isThermalLevelNormalising(); + + void setThermalLevelNormalising(boolean thermalLevelNormalising); + + int getThirdPersonView(); + + void setThirdPersonView(int thirdPersonView); + + long getTick(); + + void setTick(long tick); + + boolean isOxygenSetupValid(); + + void setOxygenSetupValid(boolean oxygenSetupValid); + + AxisAlignedBB getBoundingBoxBefore(); + + void setBoundingBoxBefore(AxisAlignedBB boundingBoxBefore); + + boolean isLastOnGround(); + + void setLastOnGround(boolean lastOnGround); + + double getDistanceSinceLastStep(); + + void setDistanceSinceLastStep(double distanceSinceLastStep); + + int getLastStep(); + + void setLastStep(int lastStep); + + boolean isInFreefall(); + + void setInFreefall(boolean inFreefall); + + boolean isInFreefallLast(); + + void setInFreefallLast(boolean inFreefallLast); + + boolean isInFreefallFirstCheck(); + + void setInFreefallFirstCheck(boolean inFreefallFirstCheck); + + double getDownMotionLast(); + + void setDownMotionLast(double downMotionLast); + + boolean isLastRidingCameraZoomEntity(); + + void setLastRidingCameraZoomEntity(boolean lastRidingCameraZoomEntity); + + int getLandingTicks(); + + void setLandingTicks(int landingTicks); + + EnumGravity getGdir(); + + void setGdir(EnumGravity gdir); + + float getGravityTurnRate(); + + void setGravityTurnRate(float gravityTurnRate); + + float getGravityTurnRatePrev(); + + void setGravityTurnRatePrev(float gravityTurnRatePrev); + + float getGravityTurnVecX(); + + void setGravityTurnVecX(float gravityTurnVecX); + + float getGravityTurnVecY(); + + void setGravityTurnVecY(float gravityTurnVecY); + + float getGravityTurnVecZ(); + + void setGravityTurnVecZ(float gravityTurnVecZ); + + float getGravityTurnYaw(); + + void setGravityTurnYaw(float gravityTurnYaw); + + int getSpaceRaceInviteTeamID(); + + void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID); + + boolean isLastZoomed(); + + void setLastZoomed(boolean lastZoomed); + + int getBuildFlags(); + + void setBuildFlags(int buildFlags); + + boolean isSsOnGroundLast(); + + void setSsOnGroundLast(boolean ssOnGroundLast); + + FreefallHandler getFreefallHandler(); + + void setFreefallHandler(FreefallHandler freefallHandler); + + ArrayList getUnlockedSchematics(); + + void setUnlockedSchematics(ArrayList unlockedSchematics); + + int getMaxLandingticks(); + + float[] getLandingYOffset(); + + void setLandingYOffset(float[] landingYOffset); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerClient.java new file mode 100644 index 00000000..89e4552f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerClient.java @@ -0,0 +1,435 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.client.FootprintRenderer; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.event.EventWakePlayer; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class PlayerClient implements IPlayerClient +{ + + private boolean saveSneak; + private double downMot2; + public static boolean startup; + + @Override + public void move(EntityPlayerSP player, MoverType type, double x, double y, double z) + { + this.updateFeet(player, x, z); + } + + @Override + public boolean wakeUpPlayer(EntityPlayerSP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + return this.wakeUpPlayer(player, immediately, updateWorldFlag, setSpawn, false); + } + + @Override + public void onUpdate(EntityPlayerSP player) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + stats.setTick(stats.getTick() + 1); + + if (stats.isUsingParachute() && !player.capabilities.isFlying && !player.handleWaterMovement()) + { + player.motionY = -0.5D; + player.motionX *= 0.5F; + player.motionZ *= 0.5F; + } + } + + @Override + public boolean isEntityInsideOpaqueBlock(EntityPlayerSP player, boolean vanillaInside) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + if (vanillaInside && stats.isInFreefall()) + { + stats.setInFreefall(false); + return false; + } + return !(player.getRidingEntity() instanceof EntityLanderBase) && vanillaInside; + } + + @Override + public void onLivingUpdatePre(EntityPlayerSP player) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + if (stats.getPlatformControlled() || player.world.provider instanceof IGalacticraftWorldProvider) + { + if (!startup) + { + stats.setInFreefallLast(stats.isInFreefall()); + stats.setInFreefall(stats.getPlatformControlled() || stats.getFreefallHandler().testFreefall(player)); + startup = true; + } + if (stats.getPlatformControlled() || player.world.provider instanceof IZeroGDimension) + { + stats.setInFreefallLast(stats.isInFreefall()); + stats.setInFreefall(stats.getPlatformControlled() || stats.getFreefallHandler().testFreefall(player)); + this.downMot2 = stats.getDownMotionLast(); + stats.setDownMotionLast(player.motionY); + stats.getFreefallHandler().preVanillaMotion(player); + if (stats.getPlatformControlled()) + { + player.motionY = stats.getPlatformVelocity(player.posY); + player.motionX = 0D; + player.motionZ = 0D; + } + } + } + +// if (player.boundingBox != null && stats.boundingBoxBefore == null) +// { +// GalacticraftCore.logger.debug("Changed player BB from " + player.boundingBox.minY); +// stats.boundingBoxBefore = player.boundingBox; +// player.boundingBox.setBounds(stats.boundingBoxBefore.minX + 0.4, stats.boundingBoxBefore.minY + 0.9, stats.boundingBoxBefore.minZ + 0.4, stats.boundingBoxBefore.maxX - 0.4, stats.boundingBoxBefore.maxY - 0.9, stats.boundingBoxBefore.maxZ - 0.4); +// GalacticraftCore.logger.debug("Changed player BB to " + player.boundingBox.minY); +// } +// else if (player.boundingBox != null && stats.boundingBoxBefore != null) +// { +// player.boundingBox.setBB(stats.boundingBoxBefore); +// GalacticraftCore.logger.debug("Changed player BB to " + player.boundingBox.minY); +// } + } + + public void cancelLimbSwing(EntityPlayerSP player) + { + player.limbSwing -= player.limbSwingAmount; + player.limbSwingAmount = player.prevLimbSwingAmount; + float adjust = Math.min(Math.abs(player.limbSwing), Math.abs(player.limbSwingAmount) / 3); + if (player.limbSwing < 0) + { + player.limbSwing += adjust; + } else if (player.limbSwing > 0) + { + player.limbSwing -= adjust; + } + player.limbSwingAmount *= 0.9; + } + + @Override + public void onLivingUpdatePost(EntityPlayerSP player) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + boolean ridingThirdPersonEntity = player.getRidingEntity() instanceof ICameraZoomEntity && ((ICameraZoomEntity) player.getRidingEntity()).defaultThirdPerson(); + + if (stats.getPlatformControlled() || player.world.provider instanceof IZeroGDimension) + { + stats.getFreefallHandler().postVanillaMotion(player); + + if (stats.isInFreefall() || ridingThirdPersonEntity) + { + this.cancelLimbSwing(player); + } else + { + if (stats.isInFreefallLast() && this.downMot2 < -0.008D) + { + stats.setLandingTicks(5 - (int) (Math.min(this.downMot2, stats.getDownMotionLast()) * 40)); + if (stats.getLandingTicks() > stats.getMaxLandingticks()) + { + if (stats.getLandingTicks() > stats.getMaxLandingticks() + 4) + { + stats.getFreefallHandler().pjumpticks = stats.getLandingTicks() - stats.getMaxLandingticks() - 5; + } + stats.setLandingTicks(stats.getMaxLandingticks()); + } + float dYmax = 0.3F * stats.getLandingTicks() / stats.getMaxLandingticks(); + float factor = 1F; + for (int i = 0; i <= stats.getLandingTicks(); i++) + { + stats.getLandingYOffset()[i] = dYmax * MathHelper.sin(i * 3.1415926F / stats.getLandingTicks()) * factor; + factor *= 0.97F; + } + } + } + + if (stats.getLandingTicks() > 0) + { + stats.setLandingTicks(stats.getLandingTicks() - 1); + player.limbSwing *= 0.8F; + player.limbSwingAmount = 0F; + } + } else + { + stats.setInFreefall(false); + if (ridingThirdPersonEntity) + { + this.cancelLimbSwing(player); + } + } + + if (ridingThirdPersonEntity && !stats.isLastRidingCameraZoomEntity()) + { + if (!ConfigManagerCore.disableVehicleCameraChanges) + FMLClientHandler.instance().getClient().gameSettings.thirdPersonView = 1; + } + + if (player.getRidingEntity() instanceof ICameraZoomEntity) + { + if (!ConfigManagerCore.disableVehicleCameraChanges) + { + stats.setLastZoomed(true); + TickHandlerClient.zoom(((ICameraZoomEntity) player.getRidingEntity()).getCameraZoom()); + } + } else if (stats.isLastZoomed()) + { + if (!ConfigManagerCore.disableVehicleCameraChanges) + { + stats.setLastZoomed(false); + TickHandlerClient.zoom(4.0F); + } + } + + stats.setLastRidingCameraZoomEntity(ridingThirdPersonEntity); + + if (stats.isUsingParachute()) + { + player.fallDistance = 0.0F; + } + + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + stats.setUsingParachute(false); + + if (gearData != null) + { + stats.setUsingParachute(gearData.getParachute() != null); + if (!GalacticraftCore.isHeightConflictingModInstalled) + { + if (gearData.getMask() != GCPlayerHandler.GEAR_NOT_PRESENT) + { + player.height = 1.9375F; + } else + { + player.height = 1.8F; + } + AxisAlignedBB bounds = player.getEntityBoundingBox(); + player.setEntityBoundingBox(new AxisAlignedBB(bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.minY + (double) player.height, bounds.maxZ)); + } + } + + if (stats.isUsingParachute() && player.onGround) + { + stats.setUsingParachute(false); + stats.setLastUsingParachute(false); + FMLClientHandler.instance().getClient().gameSettings.thirdPersonView = stats.getThirdPersonView(); + } + + if (!stats.isLastUsingParachute() && stats.isUsingParachute()) + { + FMLClientHandler.instance().getClient().getSoundHandler().playSound( + new PositionedSoundRecord(GCSounds.parachute, SoundCategory.PLAYERS, 0.95F + player.getRNG().nextFloat() * 0.1F, 1.0F, (float) player.posX, (float) player.posY, (float) player.posZ)); + } + + stats.setLastUsingParachute(stats.isUsingParachute()); + stats.setLastOnGround(player.onGround); + } + + @Override + public float getBedOrientationInDegrees(EntityPlayerSP player, float vanillaDegrees) + { + if (player.bedLocation != null) + { + if (player.world.getTileEntity(player.bedLocation) instanceof TileEntityAdvanced) + { +// int j = player.world.getBlock(x, y, z).getBedDirection(player.world, x, y, z); + IBlockState state = player.world.getBlockState(player.bedLocation); + switch (state.getBlock().getMetaFromState(state) - 4) + { + case 0: + return 90.0F; + case 1: + return 270.0F; + case 2: + return 180.0F; + case 3: + return 0.0F; + } + } else + { + return vanillaDegrees; + } + } + + return vanillaDegrees; + } + + private void updateFeet(EntityPlayerSP player, double motionX, double motionZ) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + double motionSqrd = motionX * motionX + motionZ * motionZ; + + // If the player is on the moon, not airbourne and not riding anything + if (motionSqrd > 0.001 && player.world != null && player.world.provider instanceof WorldProviderMoon && player.getRidingEntity() == null && !player.capabilities.isFlying) + { + int iPosX = MathHelper.floor(player.posX); + int iPosY = MathHelper.floor(player.posY - 0.05); + int iPosZ = MathHelper.floor(player.posZ); + BlockPos pos1 = new BlockPos(iPosX, iPosY, iPosZ); + IBlockState state = player.world.getBlockState(pos1); + + // If the block below is the moon block + if (state.getBlock() == GCBlocks.blockMoon) + { + // And is the correct metadata (moon turf) + if (state.getValue(BlockBasicMoon.BASIC_TYPE_MOON) == BlockBasicMoon.EnumBlockBasicMoon.MOON_TURF) + { + // If it has been long enough since the last step + if (stats.getDistanceSinceLastStep() > 0.35) + { + Vector3 pos = new Vector3(player); + // Set the footprint position to the block below and add + // random number to stop z-fighting + pos.y = MathHelper.floor(player.posY) + player.getRNG().nextFloat() / 100.0F; + + // Adjust footprint to left or right depending on step + // count + switch (stats.getLastStep()) + { + case 0: + pos.translate(new Vector3(Math.sin(Math.toRadians(-player.rotationYaw + 90)) * 0.25, 0, Math.cos(Math.toRadians(-player.rotationYaw + 90)) * 0.25)); + break; + case 1: + pos.translate(new Vector3(Math.sin(Math.toRadians(-player.rotationYaw - 90)) * 0.25, 0, Math.cos(Math.toRadians(-player.rotationYaw - 90)) * 0.25)); + break; + } + + pos = WorldUtil.getFootprintPosition(player.world, player.rotationYaw - 180, pos, new BlockVec3(player)); + + long chunkKey = ChunkPos.asLong(pos.intX() >> 4, pos.intZ() >> 4); + int lightmapVal = player.world.getCombinedLight(new BlockPos(pos.intX(), pos.intY(), pos.intZ()), 0); + FootprintRenderer.addFootprint(chunkKey, GCCoreUtil.getDimensionID(player.world), pos, player.rotationYaw, player.getName(), lightmapVal); + + // Increment and cap step counter at 1 + stats.setLastStep((stats.getLastStep() + 1) % 2); + stats.setDistanceSinceLastStep(0); + } else + { + stats.setDistanceSinceLastStep(stats.getDistanceSinceLastStep() + motionSqrd); + } + } + } + } + } + + public boolean wakeUpPlayer(EntityPlayerSP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn, boolean bypass) + { + BlockPos c = player.bedLocation; + + if (c != null) + { + EventWakePlayer event = new EventWakePlayer(player, c, immediately, updateWorldFlag, setSpawn, bypass); + MinecraftForge.EVENT_BUS.post(event); + + if (bypass || event.result == null || event.result == EntityPlayer.SleepResult.OK) + { + return false; + } + } + + return true; + } + + @Override + public void onBuild(int i, EntityPlayerSP player) + { + // 0 : opened GC inventory tab + // 1,2,3 : Compressor, CF, Standard Wrench + // 4,5,6 : Fuel loader, Launchpad, NASA Workbench + // 7: oil found 8: placed rocket + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + int flag = stats.getBuildFlags(); + if (flag == -1) + { + flag = 0; + } + int repeatCount = flag >> 9; + if (repeatCount <= 3) + { + repeatCount++; + } + if ((flag & 1 << i) > 0) + { + return; + } + flag |= 1 << i; + stats.setBuildFlags((flag & 511) + (repeatCount << 9)); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_BUILDFLAGS_UPDATE, GCCoreUtil.getDimensionID(player.world), new Object[] + {stats.getBuildFlags()})); + switch (i) + { + case 0: + case 1: + case 2: + case 3: + player.sendMessage(ITextComponent.Serializer + .jsonToComponent("[{\"text\":\"" + GCCoreUtil.translate("gui.message.help1") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + Constants.PREFIX + + "com/wiki/1" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki/1" + "\"}}]")); + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.help1a") + EnumColor.AQUA + " /gchelp")); + break; + case 4: + case 5: + case 6: + player.sendMessage(ITextComponent.Serializer + .jsonToComponent("[{\"text\":\"" + GCCoreUtil.translate("gui.message.help2") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + Constants.PREFIX + + "com/wiki/2" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki/2" + "\"}}]")); + break; + case 7: + player.sendMessage(ITextComponent.Serializer + .jsonToComponent("[{\"text\":\"" + GCCoreUtil.translate("gui.message.help3") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + Constants.PREFIX + + "com/wiki/oil" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki/oil" + "\"}}]")); + break; + case 8: + player.sendMessage(ITextComponent.Serializer.jsonToComponent( + "[{\"text\":\"" + GCCoreUtil.translate("gui.message.prelaunch") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + Constants.PREFIX + + "com/wiki/pre" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki/pre" + "\"}}]")); + break; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerServer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerServer.java new file mode 100644 index 00000000..f0b69ff1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerServer.java @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingKnockBackEvent; + +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.event.EventWakePlayer; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemArmorAsteroids; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemArmorMars; + +public class PlayerServer implements IPlayerServer +{ + + private boolean updatingRidden = false; + static List noClipList = new LinkedList<>(); + + @Override + public void updateRiddenPre(EntityPlayerMP player) + { + this.updatingRidden = true; + } + + @Override + public void updateRiddenPost(EntityPlayerMP player) + { + this.updatingRidden = false; + } + + @Override + public boolean dismountEntity(EntityPlayerMP player, Entity par1Entity) + { + return updatingRidden && player.getRidingEntity() instanceof IIgnoreShift && ((IIgnoreShift) player.getRidingEntity()).shouldIgnoreShiftExit(); + + } + + @Override + public void move(EntityPlayerMP player, MoverType type, double x, double y, double z) + { + // If the player is on the moon, not airbourne and not riding anything + if (player.world.provider instanceof WorldProviderMoon && !player.world.isRemote && player.getRidingEntity() == null) + { + GCPlayerHandler.updateFeet(player, x, z); + } + } + + @Override + public boolean wakeUpPlayer(EntityPlayerMP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + BlockPos c = player.bedLocation; + + if (c != null) + { + EventWakePlayer event = new EventWakePlayer(player, c, immediately, updateWorldFlag, setSpawn, false); + MinecraftForge.EVENT_BUS.post(event); + + if (event.result == null || event.result == EntityPlayer.SleepResult.OK) + { + return false; + } + } + + return true; + } + + @Override + public float attackEntityFrom(EntityPlayerMP player, DamageSource par1DamageSource, float par2) + { + // No damage while in Celestial Selection screen + if (player.getRidingEntity() instanceof EntityCelestialFake) + { + return -1F; + } + + if (par1DamageSource == DamageSource.OUT_OF_WORLD) + { + if (player.world.provider instanceof WorldProviderAsteroids) + { + if (player.posY > -120D) + { + return -1F; + } + if (player.posY > -180D) + { + par2 /= 2; + } + } + } + else if (par1DamageSource == DamageSource.FALL || par1DamageSource == DamageSourceGC.spaceshipCrash) + { + int titaniumCount = 0; + if (player.inventory != null) + { + for (ItemStack armorPiece : player.getArmorInventoryList()) + { + if (armorPiece != null && armorPiece.getItem() instanceof ItemArmorAsteroids) + { + titaniumCount++; + } + } + } + if (titaniumCount == 4) + { + titaniumCount = 5; + } + + par2 *= (1 - 0.15D * titaniumCount); + } + + return (par2 == -1F) ? -0.9999F : par2; + } + + @Override + public void knockBack(EntityPlayerMP player, Entity entity, float strength, double impulseX, double impulseZ) + { + LivingKnockBackEvent event = ForgeHooks.onLivingKnockBack(player, entity, strength, impulseX, impulseZ); + if (event.isCanceled()) + return; + + int deshCount = 0; + if (player.inventory != null) + { + for (int i = 0; i < 4; i++) + { + for (ItemStack armorPiece : player.getArmorInventoryList()) + { + if (armorPiece != null && armorPiece.getItem() instanceof ItemArmorMars) + { + deshCount++; + } + } + } + } + + if (player.getRNG().nextDouble() >= player.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).getAttributeValue()) + { + player.isAirBorne = deshCount < 2; + float f1 = MathHelper.sqrt(impulseX * impulseX + impulseZ * impulseZ); + float f2 = 0.4F - deshCount * 0.05F; + double d1 = 2.0D - deshCount * 0.15D; + player.motionX /= d1; + player.motionY /= d1; + player.motionZ /= d1; + player.motionX -= f2 * impulseX / f1; + player.motionY += f2; + player.motionZ -= f2 * impulseZ / f1; + + if (player.motionY > 0.4D) + { + player.motionY = 0.4D; + } + } + } + + @Override + public boolean isSpectator(EntityPlayerMP player) + { + return noClipList.contains(player); + } + + @Override + public void setNoClip(EntityPlayerMP player, boolean noClip) + { + if (noClip) + { + if (!noClipList.contains(player)) + noClipList.add(player); + } + else + { + noClipList.remove(player); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsCapability.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsCapability.java new file mode 100644 index 00000000..3831be2a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsCapability.java @@ -0,0 +1,1420 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.command.CommandGCInv; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.tick.AsteroidsTickHandlerServer; + +import com.google.common.collect.Maps; + +public class StatsCapability extends GCPlayerStats +{ + + //@noformat + public WeakReference player; + + public InventoryExtended extendedInventory = new InventoryExtended(); + + public int airRemaining; + public int airRemaining2; + + public int thermalLevel; + public boolean thermalLevelNormalising; + + public int damageCounter; + + // temporary data while player is in planet selection GUI + public int spaceshipTier = 1; + public NonNullList stacks = NonNullList.withSize(2, ItemStack.EMPTY); + public int rocketType; + public int fuelLevel; + public Item rocketItem; + public ItemStack launchpadStack; + public int astroMinerCount = 0; + private List activeAstroMinerChunks = new LinkedList<>(); + + public boolean usingParachute; + + public ItemStack parachuteInSlot = ItemStack.EMPTY; + public ItemStack lastParachuteInSlot = ItemStack.EMPTY; + + public ItemStack frequencyModuleInSlot = ItemStack.EMPTY; + public ItemStack lastFrequencyModuleInSlot = ItemStack.EMPTY; + + public ItemStack maskInSlot = ItemStack.EMPTY; + public ItemStack lastMaskInSlot = ItemStack.EMPTY; + + public ItemStack gearInSlot = ItemStack.EMPTY; + public ItemStack lastGearInSlot = ItemStack.EMPTY; + + public ItemStack tankInSlot1 = ItemStack.EMPTY; + public ItemStack lastTankInSlot1 = ItemStack.EMPTY; + + public ItemStack tankInSlot2 = ItemStack.EMPTY; + public ItemStack lastTankInSlot2 = ItemStack.EMPTY; + + public ItemStack thermalHelmetInSlot = ItemStack.EMPTY; + public ItemStack lastThermalHelmetInSlot = ItemStack.EMPTY; + + public ItemStack thermalChestplateInSlot = ItemStack.EMPTY; + public ItemStack lastThermalChestplateInSlot = ItemStack.EMPTY; + + public ItemStack thermalLeggingsInSlot = ItemStack.EMPTY; + public ItemStack lastThermalLeggingsInSlot = ItemStack.EMPTY; + + public ItemStack thermalBootsInSlot = ItemStack.EMPTY; + public ItemStack lastThermalBootsInSlot = ItemStack.EMPTY; + + public ItemStack shieldControllerInSlot = ItemStack.EMPTY; + public ItemStack lastShieldControllerInSlot = ItemStack.EMPTY; + + public int launchAttempts = 0; + + public int spaceRaceInviteTeamID; + + public boolean usingPlanetSelectionGui; + public String savedPlanetList = ""; + public int openPlanetSelectionGuiCooldown; + public boolean hasOpenedPlanetSelectionGui = false; + + public int chestSpawnCooldown; + public Vector3 chestSpawnVector; + + public int teleportCooldown; + + public int chatCooldown; + + public double distanceSinceLastStep; + public int lastStep; + + public double coordsTeleportedFromX; + public double coordsTeleportedFromZ; + + public HashMap spaceStationDimensionData = Maps.newHashMap(); + + public boolean oxygenSetupValid; + public boolean lastOxygenSetupValid; + + public boolean touchedGround; + public boolean lastOnGround; + public boolean inLander; + public boolean justLanded; + + public List unlockedSchematics = new LinkedList<>(); + public List lastUnlockedSchematics = new LinkedList<>(); + + public int cryogenicChamberCooldown; + + public boolean receivedSoundWarning; + public boolean receivedBedWarning; + public boolean openedSpaceRaceManager = false; + public boolean sentFlags = false; + public boolean newInOrbit = true; + public boolean newAdventureSpawn; + public int buildFlags = 0; + + public int incrementalDamage = 0; + private float savedSpeed = 0F; // used by titanium armor + + public String startDimension = ""; + public int glassColor1 = -1; + public int glassColor2 = -1; + public int glassColor3 = -1; + + private IBlockState[] panelLightingBases = new IBlockState[BlockPanelLighting.PANELTYPES_LENGTH]; + private int panelLightingColor = 0xf0f0e0; + //@format + + @Override + public WeakReference getPlayer() + { + return player; + } + + @Override + public void setPlayer(WeakReference player) + { + this.player = player; + } + + @Override + public InventoryExtended getExtendedInventory() + { + return extendedInventory; + } + + @Override + public void setExtendedInventory(InventoryExtended extendedInventory) + { + this.extendedInventory = extendedInventory; + } + + @Override + public int getAirRemaining() + { + return airRemaining; + } + + @Override + public void setAirRemaining(int airRemaining) + { + this.airRemaining = airRemaining; + } + + @Override + public int getAirRemaining2() + { + return airRemaining2; + } + + @Override + public void setAirRemaining2(int airRemaining2) + { + this.airRemaining2 = airRemaining2; + } + + @Override + public int getThermalLevel() + { + return thermalLevel; + } + + @Override + public void setThermalLevel(int thermalLevel) + { + this.thermalLevel = thermalLevel; + } + + @Override + public boolean isThermalLevelNormalising() + { + return thermalLevelNormalising; + } + + @Override + public void setThermalLevelNormalising(boolean thermalLevelNormalising) + { + this.thermalLevelNormalising = thermalLevelNormalising; + } + + @Override + public int getDamageCounter() + { + return damageCounter; + } + + @Override + public void setDamageCounter(int damageCounter) + { + this.damageCounter = damageCounter; + } + + @Override + public int getSpaceshipTier() + { + return spaceshipTier; + } + + @Override + public void setSpaceshipTier(int spaceshipTier) + { + this.spaceshipTier = spaceshipTier; + } + + @Override + public NonNullList getRocketStacks() + { + return stacks; + } + + @Override + public void setRocketStacks(NonNullList rocketStacks) + { + this.stacks = rocketStacks; + } + + @Override + public int getRocketType() + { + return rocketType; + } + + @Override + public void setRocketType(int rocketType) + { + this.rocketType = rocketType; + } + + @Override + public int getFuelLevel() + { + return fuelLevel; + } + + @Override + public void setFuelLevel(int fuelLevel) + { + this.fuelLevel = fuelLevel; + } + + @Override + public Item getRocketItem() + { + return rocketItem; + } + + @Override + public void setRocketItem(Item rocketItem) + { + this.rocketItem = rocketItem; + } + + @Override + @Nullable + public ItemStack getLaunchpadStack() + { + return launchpadStack; + } + + @Override + public void setLaunchpadStack(ItemStack launchpadStack) + { + this.launchpadStack = launchpadStack; + } + + @Override + public int getAstroMinerCount() + { + return astroMinerCount; + } + + @Override + public void setAstroMinerCount(int astroMinerCount) + { + this.astroMinerCount = astroMinerCount; + } + + @Override + public List getActiveAstroMinerChunks() + { + return this.activeAstroMinerChunks; + } + + @Override + public boolean isUsingParachute() + { + return usingParachute; + } + + @Override + public void setUsingParachute(boolean usingParachute) + { + this.usingParachute = usingParachute; + } + + @Override + public ItemStack getParachuteInSlot() + { + return parachuteInSlot; + } + + @Override + public void setParachuteInSlot(ItemStack parachuteInSlot) + { + this.parachuteInSlot = parachuteInSlot; + } + + @Override + public ItemStack getLastParachuteInSlot() + { + return lastParachuteInSlot; + } + + @Override + public void setLastParachuteInSlot(ItemStack lastParachuteInSlot) + { + this.lastParachuteInSlot = lastParachuteInSlot; + } + + @Override + public ItemStack getFrequencyModuleInSlot() + { + return frequencyModuleInSlot; + } + + @Override + public void setFrequencyModuleInSlot(ItemStack frequencyModuleInSlot) + { + this.frequencyModuleInSlot = frequencyModuleInSlot; + } + + @Override + public ItemStack getLastFrequencyModuleInSlot() + { + return lastFrequencyModuleInSlot; + } + + @Override + public void setLastFrequencyModuleInSlot(ItemStack lastFrequencyModuleInSlot) + { + this.lastFrequencyModuleInSlot = lastFrequencyModuleInSlot; + } + + @Override + public ItemStack getMaskInSlot() + { + return maskInSlot; + } + + @Override + public void setMaskInSlot(ItemStack maskInSlot) + { + this.maskInSlot = maskInSlot; + } + + @Override + public ItemStack getLastMaskInSlot() + { + return lastMaskInSlot; + } + + @Override + public void setLastMaskInSlot(ItemStack lastMaskInSlot) + { + this.lastMaskInSlot = lastMaskInSlot; + } + + @Override + public ItemStack getGearInSlot() + { + return gearInSlot; + } + + @Override + public void setGearInSlot(ItemStack gearInSlot) + { + this.gearInSlot = gearInSlot; + } + + @Override + public ItemStack getLastGearInSlot() + { + return lastGearInSlot; + } + + @Override + public void setLastGearInSlot(ItemStack lastGearInSlot) + { + this.lastGearInSlot = lastGearInSlot; + } + + @Override + public ItemStack getTankInSlot1() + { + return tankInSlot1; + } + + @Override + public void setTankInSlot1(ItemStack tankInSlot1) + { + this.tankInSlot1 = tankInSlot1; + } + + @Override + public ItemStack getLastTankInSlot1() + { + return lastTankInSlot1; + } + + @Override + public void setLastTankInSlot1(ItemStack lastTankInSlot1) + { + this.lastTankInSlot1 = lastTankInSlot1; + } + + @Override + public ItemStack getTankInSlot2() + { + return tankInSlot2; + } + + @Override + public void setTankInSlot2(ItemStack tankInSlot2) + { + this.tankInSlot2 = tankInSlot2; + } + + @Override + public ItemStack getLastTankInSlot2() + { + return lastTankInSlot2; + } + + @Override + public void setLastTankInSlot2(ItemStack lastTankInSlot2) + { + this.lastTankInSlot2 = lastTankInSlot2; + } + + @Override + public ItemStack getThermalHelmetInSlot() + { + return thermalHelmetInSlot; + } + + @Override + public void setThermalHelmetInSlot(ItemStack thermalHelmetInSlot) + { + this.thermalHelmetInSlot = thermalHelmetInSlot; + } + + @Override + public ItemStack getLastThermalHelmetInSlot() + { + return lastThermalHelmetInSlot; + } + + @Override + public void setLastThermalHelmetInSlot(ItemStack lastThermalHelmetInSlot) + { + this.lastThermalHelmetInSlot = lastThermalHelmetInSlot; + } + + @Override + public ItemStack getThermalChestplateInSlot() + { + return thermalChestplateInSlot; + } + + @Override + public void setThermalChestplateInSlot(ItemStack thermalChestplateInSlot) + { + this.thermalChestplateInSlot = thermalChestplateInSlot; + } + + @Override + public ItemStack getLastThermalChestplateInSlot() + { + return lastThermalChestplateInSlot; + } + + @Override + public void setLastThermalChestplateInSlot(ItemStack lastThermalChestplateInSlot) + { + this.lastThermalChestplateInSlot = lastThermalChestplateInSlot; + } + + @Override + public ItemStack getThermalLeggingsInSlot() + { + return thermalLeggingsInSlot; + } + + @Override + public void setThermalLeggingsInSlot(ItemStack thermalLeggingsInSlot) + { + this.thermalLeggingsInSlot = thermalLeggingsInSlot; + } + + @Override + public ItemStack getLastThermalLeggingsInSlot() + { + return lastThermalLeggingsInSlot; + } + + @Override + public void setLastThermalLeggingsInSlot(ItemStack lastThermalLeggingsInSlot) + { + this.lastThermalLeggingsInSlot = lastThermalLeggingsInSlot; + } + + @Override + public ItemStack getThermalBootsInSlot() + { + return thermalBootsInSlot; + } + + @Override + public void setThermalBootsInSlot(ItemStack thermalBootsInSlot) + { + this.thermalBootsInSlot = thermalBootsInSlot; + } + + @Override + public ItemStack getLastThermalBootsInSlot() + { + return lastThermalBootsInSlot; + } + + @Override + public void setLastThermalBootsInSlot(ItemStack lastThermalBootsInSlot) + { + this.lastThermalBootsInSlot = lastThermalBootsInSlot; + } + + @Override + public ItemStack getShieldControllerInSlot() + { + return shieldControllerInSlot; + } + + @Override + public void setShieldControllerInSlot(ItemStack shieldControllerInSlot) + { + this.shieldControllerInSlot = shieldControllerInSlot; + } + + @Override + public ItemStack getLastShieldControllerInSlot() + { + return lastShieldControllerInSlot; + } + + @Override + public void setLastShieldControllerInSlot(ItemStack lastShieldControllerInSlot) + { + this.lastShieldControllerInSlot = lastShieldControllerInSlot; + } + + @Override + public int getLaunchAttempts() + { + return launchAttempts; + } + + @Override + public void setLaunchAttempts(int launchAttempts) + { + this.launchAttempts = launchAttempts; + } + + @Override + public int getSpaceRaceInviteTeamID() + { + return spaceRaceInviteTeamID; + } + + @Override + public void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID) + { + this.spaceRaceInviteTeamID = spaceRaceInviteTeamID; + } + + @Override + public boolean isUsingPlanetSelectionGui() + { + return usingPlanetSelectionGui; + } + + @Override + public void setUsingPlanetSelectionGui(boolean usingPlanetSelectionGui) + { + this.usingPlanetSelectionGui = usingPlanetSelectionGui; + } + + @Override + public String getSavedPlanetList() + { + return savedPlanetList; + } + + @Override + public void setSavedPlanetList(String savedPlanetList) + { + this.savedPlanetList = savedPlanetList; + } + + @Override + public int getOpenPlanetSelectionGuiCooldown() + { + return openPlanetSelectionGuiCooldown; + } + + @Override + public void setOpenPlanetSelectionGuiCooldown(int openPlanetSelectionGuiCooldown) + { + this.openPlanetSelectionGuiCooldown = openPlanetSelectionGuiCooldown; + } + + @Override + public boolean hasOpenedPlanetSelectionGui() + { + return hasOpenedPlanetSelectionGui; + } + + @Override + public void setHasOpenedPlanetSelectionGui(boolean hasOpenedPlanetSelectionGui) + { + this.hasOpenedPlanetSelectionGui = hasOpenedPlanetSelectionGui; + } + + @Override + public int getChestSpawnCooldown() + { + return chestSpawnCooldown; + } + + @Override + public void setChestSpawnCooldown(int chestSpawnCooldown) + { + this.chestSpawnCooldown = chestSpawnCooldown; + } + + @Override + public Vector3 getChestSpawnVector() + { + return chestSpawnVector; + } + + @Override + public void setChestSpawnVector(Vector3 chestSpawnVector) + { + this.chestSpawnVector = chestSpawnVector; + } + + @Override + public int getTeleportCooldown() + { + return teleportCooldown; + } + + @Override + public void setTeleportCooldown(int teleportCooldown) + { + this.teleportCooldown = teleportCooldown; + } + + @Override + public int getChatCooldown() + { + return chatCooldown; + } + + @Override + public void setChatCooldown(int chatCooldown) + { + this.chatCooldown = chatCooldown; + } + + @Override + public double getDistanceSinceLastStep() + { + return distanceSinceLastStep; + } + + @Override + public void setDistanceSinceLastStep(double distanceSinceLastStep) + { + this.distanceSinceLastStep = distanceSinceLastStep; + } + + @Override + public int getLastStep() + { + return lastStep; + } + + @Override + public void setLastStep(int lastStep) + { + this.lastStep = lastStep; + } + + @Override + public double getCoordsTeleportedFromX() + { + return coordsTeleportedFromX; + } + + @Override + public void setCoordsTeleportedFromX(double coordsTeleportedFromX) + { + this.coordsTeleportedFromX = coordsTeleportedFromX; + } + + @Override + public double getCoordsTeleportedFromZ() + { + return coordsTeleportedFromZ; + } + + @Override + public void setCoordsTeleportedFromZ(double coordsTeleportedFromZ) + { + this.coordsTeleportedFromZ = coordsTeleportedFromZ; + } + + @Override + public HashMap getSpaceStationDimensionData() + { + return spaceStationDimensionData; + } + + @Override + public void setSpaceStationDimensionData(HashMap spaceStationDimensionData) + { + this.spaceStationDimensionData = spaceStationDimensionData; + } + + @Override + public boolean isOxygenSetupValid() + { + return oxygenSetupValid; + } + + @Override + public void setOxygenSetupValid(boolean oxygenSetupValid) + { + this.oxygenSetupValid = oxygenSetupValid; + } + + @Override + public boolean isLastOxygenSetupValid() + { + return lastOxygenSetupValid; + } + + @Override + public void setLastOxygenSetupValid(boolean lastOxygenSetupValid) + { + this.lastOxygenSetupValid = lastOxygenSetupValid; + } + + @Override + public boolean isTouchedGround() + { + return touchedGround; + } + + @Override + public void setTouchedGround(boolean touchedGround) + { + this.touchedGround = touchedGround; + } + + @Override + public boolean isLastOnGround() + { + return lastOnGround; + } + + @Override + public void setLastOnGround(boolean lastOnGround) + { + this.lastOnGround = lastOnGround; + } + + @Override + public boolean isInLander() + { + return inLander; + } + + @Override + public void setInLander(boolean inLander) + { + this.inLander = inLander; + } + + @Override + public boolean hasJustLanded() + { + return justLanded; + } + + @Override + public void setJustLanded(boolean justLanded) + { + this.justLanded = justLanded; + } + + @Override + public List getUnlockedSchematics() + { + return unlockedSchematics; + } + + @Override + public void setUnlockedSchematics(List unlockedSchematics) + { + this.unlockedSchematics = unlockedSchematics; + } + + @Override + public List getLastUnlockedSchematics() + { + return lastUnlockedSchematics; + } + + @Override + public void setLastUnlockedSchematics(List lastUnlockedSchematics) + { + this.lastUnlockedSchematics = lastUnlockedSchematics; + } + + @Override + public int getCryogenicChamberCooldown() + { + return cryogenicChamberCooldown; + } + + @Override + public void setCryogenicChamberCooldown(int cryogenicChamberCooldown) + { + this.cryogenicChamberCooldown = cryogenicChamberCooldown; + } + + @Override + public boolean hasReceivedSoundWarning() + { + return receivedSoundWarning; + } + + @Override + public void setReceivedSoundWarning(boolean receivedSoundWarning) + { + this.receivedSoundWarning = receivedSoundWarning; + } + + @Override + public boolean hasReceivedBedWarning() + { + return receivedBedWarning; + } + + @Override + public void setReceivedBedWarning(boolean receivedBedWarning) + { + this.receivedBedWarning = receivedBedWarning; + } + + @Override + public boolean hasOpenedSpaceRaceManager() + { + return openedSpaceRaceManager; + } + + @Override + public void setOpenedSpaceRaceManager(boolean openedSpaceRaceManager) + { + this.openedSpaceRaceManager = openedSpaceRaceManager; + } + + @Override + public boolean hasSentFlags() + { + return sentFlags; + } + + @Override + public void setSentFlags(boolean sentFlags) + { + this.sentFlags = sentFlags; + } + + @Override + public boolean isNewInOrbit() + { + return newInOrbit; + } + + @Override + public void setNewInOrbit(boolean newInOrbit) + { + this.newInOrbit = newInOrbit; + } + + @Override + public boolean isNewAdventureSpawn() + { + return newAdventureSpawn; + } + + @Override + public void setNewAdventureSpawn(boolean newAdventureSpawn) + { + this.newAdventureSpawn = newAdventureSpawn; + } + + @Override + public int getBuildFlags() + { + return buildFlags; + } + + @Override + public void setBuildFlags(int buildFlags) + { + this.buildFlags = buildFlags; + } + + @Override + public int getIncrementalDamage() + { + return incrementalDamage; + } + + @Override + public void setIncrementalDamage(int incrementalDamage) + { + this.incrementalDamage = incrementalDamage; + } + + @Override + public String getStartDimension() + { + return startDimension; + } + + @Override + public void setStartDimension(String startDimension) + { + this.startDimension = startDimension; + } + + @Override + public void saveNBTData(NBTTagCompound nbt) + { + nbt.setTag("ExtendedInventoryGC", this.extendedInventory.writeToNBT(new NBTTagList())); + nbt.setInteger("playerAirRemaining", this.airRemaining); + nbt.setInteger("damageCounter", this.damageCounter); + nbt.setBoolean("OxygenSetupValid", this.oxygenSetupValid); + nbt.setBoolean("usingParachute2", this.usingParachute); + nbt.setBoolean("usingPlanetSelectionGui", this.usingPlanetSelectionGui); + nbt.setInteger("teleportCooldown", this.teleportCooldown); + nbt.setDouble("coordsTeleportedFromX", this.coordsTeleportedFromX); + nbt.setDouble("coordsTeleportedFromZ", this.coordsTeleportedFromZ); + nbt.setString("startDimension", this.startDimension); + nbt.setString("spaceStationDimensionInfo", WorldUtil.spaceStationDataToString(this.spaceStationDimensionData)); + nbt.setInteger("thermalLevel", this.thermalLevel); + + Collections.sort(this.unlockedSchematics); + + Arrays.sort(new int[6]); + + NBTTagList tagList = new NBTTagList(); + + for (ISchematicPage page : this.unlockedSchematics) + { + if (page != null) + { + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setInteger("UnlockedPage", page.getPageID()); + tagList.appendTag(nbttagcompound); + } + } + + nbt.setTag("Schematics", tagList); + + nbt.setInteger("rocketStacksLength", this.stacks.size()); + nbt.setInteger("SpaceshipTier", this.spaceshipTier); + nbt.setInteger("FuelLevel", this.fuelLevel); + if (this.rocketItem != null) + { + ItemStack returnRocket = new ItemStack(this.rocketItem, 1, this.rocketType); + nbt.setTag("ReturnRocket", returnRocket.writeToNBT(new NBTTagCompound())); + } + + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < this.stacks.size(); ++i) + { + ItemStack itemstack = this.stacks.get(i); + + if (!itemstack.isEmpty()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) i); + itemstack.writeToNBT(nbttagcompound); + nbttaglist.appendTag(nbttagcompound); + } + } + + if (!nbttaglist.isEmpty()) + { + nbt.setTag("RocketItems", nbttaglist); + } + + final NBTTagCompound var4 = new NBTTagCompound(); + if (this.launchpadStack != null) + { + nbt.setTag("LaunchpadStack", this.launchpadStack.writeToNBT(var4)); + } + else + { + nbt.setTag("LaunchpadStack", var4); + } + + nbt.setInteger("CryogenicChamberCooldown", this.cryogenicChamberCooldown); + nbt.setBoolean("ReceivedSoundWarning", this.receivedSoundWarning); + nbt.setBoolean("ReceivedBedWarning", this.receivedBedWarning); + nbt.setInteger("BuildFlags", this.buildFlags); + nbt.setBoolean("ShownSpaceRace", this.openedSpaceRaceManager); + nbt.setInteger("AstroMinerCount", this.astroMinerCount); + NBTTagList astroList = new NBTTagList(); + for (BlockVec3 data : this.activeAstroMinerChunks) + { + if (data != null) + { + astroList.appendTag(data.writeToNBT(new NBTTagCompound())); + } + } + nbt.setTag("AstroData", astroList); + + nbt.setInteger("GlassColor1", this.glassColor1); + nbt.setInteger("GlassColor2", this.glassColor2); + nbt.setInteger("GlassColor3", this.glassColor3); + + NBTTagList panelList = new NBTTagList(); + for (int i = 0; i < BlockPanelLighting.PANELTYPES_LENGTH; ++i) + { + final NBTTagCompound stateNBT = new NBTTagCompound(); + IBlockState bs = this.panelLightingBases[i]; + if (bs != null) + { + TileEntityPanelLight.writeBlockState(stateNBT, bs); + } + panelList.appendTag(stateNBT); + } + nbt.setTag("PanLi", panelList); + + nbt.setInteger("PanCo", this.panelLightingColor); + } + + @Override + public void loadNBTData(NBTTagCompound nbt) + { + try + { + this.airRemaining = nbt.getInteger("playerAirRemaining"); + this.damageCounter = nbt.getInteger("damageCounter"); + this.oxygenSetupValid = this.lastOxygenSetupValid = nbt.getBoolean("OxygenSetupValid"); + this.thermalLevel = nbt.getInteger("thermalLevel"); + + // Backwards compatibility + NBTTagList nbttaglist = nbt.getTagList("Inventory", 10); + this.extendedInventory.readFromNBTOld(nbttaglist); + + if (nbt.hasKey("ExtendedInventoryGC")) + { + this.extendedInventory.readFromNBT(nbt.getTagList("ExtendedInventoryGC", 10)); + } + + // Added for GCInv command - if tried to load an offline player's + // inventory, load it now + // (if there was no offline load, then the dontload flag in doLoad() + // will make sure nothing happens) + EntityPlayerMP p = this.player.get(); + if (p != null) + { + ItemStack[] saveinv = CommandGCInv.getSaveData(PlayerUtil.getName(p).toLowerCase()); + if (saveinv != null) + { + CommandGCInv.doLoad(p); + } + } + + if (nbt.hasKey("SpaceshipTier")) + { + this.spaceshipTier = nbt.getInteger("SpaceshipTier"); + } + + // New keys in version 3.0.5.220 + if (nbt.hasKey("FuelLevel")) + { + this.fuelLevel = nbt.getInteger("FuelLevel"); + } + if (nbt.hasKey("ReturnRocket")) + { + ItemStack returnRocket = new ItemStack(nbt.getCompoundTag("ReturnRocket")); + this.rocketItem = returnRocket.getItem(); + this.rocketType = returnRocket.getItemDamage(); + } + + this.usingParachute = nbt.getBoolean("usingParachute2"); + this.usingPlanetSelectionGui = nbt.getBoolean("usingPlanetSelectionGui"); + this.teleportCooldown = nbt.getInteger("teleportCooldown"); + this.coordsTeleportedFromX = nbt.getDouble("coordsTeleportedFromX"); + this.coordsTeleportedFromZ = nbt.getDouble("coordsTeleportedFromZ"); + this.startDimension = nbt.hasKey("startDimension") ? nbt.getString("startDimension") : ""; + if (nbt.hasKey("spaceStationDimensionID")) + { + // If loading from an old save file, the home space station is + // always the overworld, so use 0 as home planet + this.spaceStationDimensionData = WorldUtil.stringToSpaceStationData("0$" + nbt.getInteger("spaceStationDimensionID")); + } + else + { + this.spaceStationDimensionData = WorldUtil.stringToSpaceStationData(nbt.getString("spaceStationDimensionInfo")); + } + + if (nbt.getBoolean("usingPlanetSelectionGui")) + { + this.openPlanetSelectionGuiCooldown = 20; + } + + if (nbt.hasKey("RocketItems") && nbt.hasKey("rocketStacksLength")) + { + int length = nbt.getInteger("rocketStacksLength"); + + this.stacks = NonNullList.withSize(length, ItemStack.EMPTY); + + NBTTagList nbttaglist1 = nbt.getTagList("RocketItems", 10); + + for (int i = 0; i < nbttaglist1.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist1.getCompoundTagAt(i); + int j = nbttagcompound.getByte("Slot") & 255; + + if (j >= 0 && j < this.stacks.size()) + { + this.stacks.set(j, new ItemStack(nbttagcompound)); + } + } + } + + this.unlockedSchematics = new ArrayList<>(); + + if (p != null) + { + for (int i = 0; i < nbt.getTagList("Schematics", 10).tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = nbt.getTagList("Schematics", 10).getCompoundTagAt(i); + + final int j = nbttagcompound.getInteger("UnlockedPage"); + + SchematicRegistry.addUnlockedPage(p, SchematicRegistry.getMatchingRecipeForID(j)); + } + } + + Collections.sort(this.unlockedSchematics); + + this.cryogenicChamberCooldown = nbt.getInteger("CryogenicChamberCooldown"); + + if (nbt.hasKey("ReceivedSoundWarning")) + { + this.receivedSoundWarning = nbt.getBoolean("ReceivedSoundWarning"); + } + if (nbt.hasKey("ReceivedBedWarning")) + { + this.receivedBedWarning = nbt.getBoolean("ReceivedBedWarning"); + } + + if (nbt.hasKey("LaunchpadStack")) + { + this.launchpadStack = new ItemStack(nbt.getCompoundTag("LaunchpadStack")); + } + else + { + // for backwards compatibility with saves which don't have this + // tag - players can't lose launchpads + this.launchpadStack = new ItemStack(GCBlocks.landingPad, 9, 0); + } + + if (nbt.hasKey("BuildFlags")) + { + this.buildFlags = nbt.getInteger("BuildFlags"); + } + + if (nbt.hasKey("ShownSpaceRace")) + { + this.openedSpaceRaceManager = nbt.getBoolean("ShownSpaceRace"); + } + + if (nbt.hasKey("AstroMinerCount")) + { + this.astroMinerCount = nbt.getInteger("AstroMinerCount"); + } + if (nbt.hasKey("AstroData")) + { + this.activeAstroMinerChunks.clear(); + NBTTagList astroList = nbt.getTagList("AstroData", 10); + for (int i = 0; i < astroList.tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = astroList.getCompoundTagAt(i); + BlockVec3 data = BlockVec3.readFromNBT(nbttagcompound); + this.activeAstroMinerChunks.add(data); + } + AsteroidsTickHandlerServer.loadAstroChunkList(this.activeAstroMinerChunks); + } + + if (nbt.hasKey("GlassColor1")) + { + this.glassColor1 = nbt.getInteger("GlassColor1"); + this.glassColor2 = nbt.getInteger("GlassColor2"); + this.glassColor3 = nbt.getInteger("GlassColor3"); + } + + if (nbt.hasKey("PanLi")) + { + final NBTTagList panels = nbt.getTagList("PanLi", 10); + for (int i = 0; i < panels.tagCount(); ++i) + { + if (i == BlockPanelLighting.PANELTYPES_LENGTH) + break; + final NBTTagCompound stateNBT = panels.getCompoundTagAt(i); + IBlockState bs = TileEntityPanelLight.readBlockState(stateNBT); + this.panelLightingBases[i] = (bs.getBlock() == Blocks.AIR) ? null : bs; + } + } + + if (nbt.hasKey("PanCo")) + { + this.panelLightingColor = nbt.getInteger("PanCo"); + } + + GalacticraftCore.logger.debug("Loading GC player data for " + PlayerUtil.getName(player.get()) + " : " + this.buildFlags); + + this.sentFlags = false; + } catch (Exception e) + { + GalacticraftCore.logger.error("Found error in saved Galacticraft player data for " + PlayerUtil.getName(player.get()) + " - this should fix itself next relog."); + e.printStackTrace(); + } + + GalacticraftCore.logger.debug("Finished loading GC player data for " + PlayerUtil.getName(player.get()) + " : " + this.buildFlags); + } + + @Override + public void copyFrom(GCPlayerStats oldData, boolean keepInv) + { + if (keepInv) + { + this.extendedInventory.copyInventory(oldData.getExtendedInventory()); + } + + this.spaceStationDimensionData = oldData.getSpaceStationDimensionData(); + this.unlockedSchematics = oldData.getUnlockedSchematics(); + this.receivedSoundWarning = oldData.hasReceivedSoundWarning(); + this.receivedBedWarning = oldData.hasReceivedBedWarning(); + this.openedSpaceRaceManager = oldData.hasOpenedSpaceRaceManager(); + this.spaceRaceInviteTeamID = oldData.getSpaceRaceInviteTeamID(); + this.buildFlags = oldData.getBuildFlags(); + this.glassColor1 = oldData.getGlassColor1(); + this.glassColor2 = oldData.getGlassColor2(); + this.glassColor3 = oldData.getGlassColor3(); + this.panelLightingBases = oldData.getPanelLightingBases(); + this.panelLightingColor = oldData.getPanelLightingColor(); + this.astroMinerCount = oldData.getAstroMinerCount(); + this.activeAstroMinerChunks = oldData.getActiveAstroMinerChunks(); + this.sentFlags = false; + } + + @Override + public void setGlassColors(int color1, int color2, int color3) + { + boolean changes = false; + if (this.glassColor1 != color1) + { + changes = true; + this.glassColor1 = color1; + } + if (this.glassColor2 != color2) + { + changes = true; + this.glassColor2 = color2; + } + if (this.glassColor3 != color3) + { + changes = true; + this.glassColor3 = color3; + } + if (changes) + ColorUtil.sendUpdatedColorsToPlayer(this); + } + + @Override + public int getGlassColor1() + { + return glassColor1; + } + + @Override + public int getGlassColor2() + { + return glassColor2; + } + + @Override + public int getGlassColor3() + { + return glassColor3; + } + + @Override + public IBlockState[] getPanelLightingBases() + { + return panelLightingBases; + } + + @Override + public int getPanelLightingColor() + { + return panelLightingColor; + } + + @Override + public void setPanelLightingColor(int color) + { + panelLightingColor = color; + } + + @Override + public Object[] getMiscNetworkedStats() + { + int length = 2 + BlockPanelLighting.PANELTYPES_LENGTH * 2; + Object[] result = new Object[length]; + result[0] = this.getBuildFlags(); + BlockPanelLighting.getNetworkedData(result, this.panelLightingBases); + result[length - 1] = this.panelLightingColor; + return result; + } + + @Override + public void setSavedSpeed(float value) + { + this.savedSpeed = value; + } + + @Override + public float getSavedSpeed() + { + return this.savedSpeed; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsClientCapability.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsClientCapability.java new file mode 100644 index 00000000..aa04d070 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsClientCapability.java @@ -0,0 +1,716 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.util.math.AxisAlignedBB; + +public class StatsClientCapability extends GCPlayerStatsClient +{ + + public boolean usingParachute; + public boolean lastUsingParachute; + public boolean usingAdvancedGoggles; + public int thermalLevel; + public boolean thermalLevelNormalising; + public int thirdPersonView = 0; + public long tick; + public boolean oxygenSetupValid = true; + AxisAlignedBB boundingBoxBefore; + public boolean lastOnGround; + + public double distanceSinceLastStep; + public int lastStep; + public boolean inFreefall; + public boolean inFreefallLast; + public boolean inFreefallFirstCheck; + public double downMotionLast; + public boolean lastRidingCameraZoomEntity; + public int landingTicks; + public static final int MAX_LANDINGTICKS = 15; + public float[] landingYOffset = new float[MAX_LANDINGTICKS + 1]; + + public boolean platformControlled; + private TileEntityPlatform platformTarget; + private TileEntityPlatform platformMoving; + private double platformTargetY; + private double platformVelocityTarget; + private double platformVelocityCurrent; + private boolean platformPacketSent; + + public EnumGravity gdir = EnumGravity.down; + public float gravityTurnRate; + public float gravityTurnRatePrev; + public float gravityTurnVecX; + public float gravityTurnVecY; + public float gravityTurnVecZ; + public float gravityTurnYaw; + + public int spaceRaceInviteTeamID; + public boolean lastZoomed; + public int buildFlags = -1; + + public boolean ssOnGroundLast; + private float dungeonDirection; + + public FreefallHandler freefallHandler = new FreefallHandler(this); + + public ArrayList unlockedSchematics = new ArrayList(); + + @Override + public void setGravity(EnumGravity newGravity) + { + if (this.gdir == newGravity) + { + return; + } + this.gravityTurnRatePrev = this.gravityTurnRate = 0.0F; + float turnSpeed = 0.05F; + this.gravityTurnVecX = 0.0F; + this.gravityTurnVecY = 0.0F; + this.gravityTurnVecZ = 0.0F; + this.gravityTurnYaw = 0.0F; + + switch (this.gdir.getIntValue()) + { + case 1: + switch (newGravity.getIntValue()) + { + case 1: + break; + case 2: + this.gravityTurnVecX = -2.0F; + break; + case 3: + this.gravityTurnVecY = -1.0F; + this.gravityTurnYaw = -90.0F; + break; + case 4: + this.gravityTurnVecY = 1.0F; + this.gravityTurnYaw = 90.0F; + break; + case 5: + this.gravityTurnVecX = 1.0F; + break; + case 6: + this.gravityTurnVecX = -1.0F; + } + + break; + case 2: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecX = -2.0F; + break; + case 2: + break; + case 3: + this.gravityTurnVecY = 1.0F; + this.gravityTurnYaw = 90.0F; + break; + case 4: + this.gravityTurnVecY = -1.0F; + this.gravityTurnYaw = -90.0F; + break; + case 5: + this.gravityTurnVecX = -1.0F; + break; + case 6: + this.gravityTurnVecX = 1.0F; + } + + break; + case 3: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecY = 1.0F; + this.gravityTurnYaw = 90.0F; + break; + case 2: + this.gravityTurnVecY = -1.0F; + this.gravityTurnYaw = -90.0F; + break; + case 3: + break; + case 4: + this.gravityTurnVecZ = -2.0F; + break; + case 5: + this.gravityTurnVecZ = -1.0F; + this.gravityTurnYaw = -180.0F; + break; + case 6: + this.gravityTurnVecZ = 1.0F; + } + + break; + case 4: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecY = -1.0F; + this.gravityTurnYaw = -90.0F; + break; + case 2: + this.gravityTurnVecY = 1.0F; + this.gravityTurnYaw = 90.0F; + break; + case 3: + this.gravityTurnVecZ = -2.0F; + break; + case 4: + break; + case 5: + this.gravityTurnVecZ = 1.0F; + this.gravityTurnYaw = -180.0F; + break; + case 6: + this.gravityTurnVecZ = -1.0F; + } + + break; + case 5: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecX = -1.0F; + break; + case 2: + this.gravityTurnVecX = 1.0F; + break; + case 3: + this.gravityTurnVecZ = 1.0F; + this.gravityTurnYaw = 180.0F; + break; + case 4: + this.gravityTurnVecZ = -1.0F; + this.gravityTurnYaw = 180.0F; + break; + case 5: + break; + case 6: + this.gravityTurnVecX = -2.0F; + } + + break; + case 6: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecX = 1.0F; + break; + case 2: + this.gravityTurnVecX = -1.0F; + break; + case 3: + this.gravityTurnVecZ = -1.0F; + break; + case 4: + this.gravityTurnVecZ = 1.0F; + break; + case 5: + this.gravityTurnVecX = -2.0F; + case 6: + } + break; + } + + this.gdir = newGravity; + } + + @Override + public boolean isUsingParachute() + { + return usingParachute; + } + + @Override + public void setUsingParachute(boolean usingParachute) + { + this.usingParachute = usingParachute; + } + + @Override + public boolean isLastUsingParachute() + { + return lastUsingParachute; + } + + @Override + public void setLastUsingParachute(boolean lastUsingParachute) + { + this.lastUsingParachute = lastUsingParachute; + } + + @Override + public boolean isUsingAdvancedGoggles() + { + return usingAdvancedGoggles; + } + + @Override + public void setUsingAdvancedGoggles(boolean usingAdvancedGoggles) + { + this.usingAdvancedGoggles = usingAdvancedGoggles; + } + + @Override + public int getThermalLevel() + { + return thermalLevel; + } + + @Override + public void setThermalLevel(int thermalLevel) + { + this.thermalLevel = thermalLevel; + } + + @Override + public boolean isThermalLevelNormalising() + { + return thermalLevelNormalising; + } + + @Override + public void setThermalLevelNormalising(boolean thermalLevelNormalising) + { + this.thermalLevelNormalising = thermalLevelNormalising; + } + + @Override + public int getThirdPersonView() + { + return thirdPersonView; + } + + @Override + public void setThirdPersonView(int thirdPersonView) + { + this.thirdPersonView = thirdPersonView; + } + + @Override + public long getTick() + { + return tick; + } + + @Override + public void setTick(long tick) + { + this.tick = tick; + } + + @Override + public boolean isOxygenSetupValid() + { + return oxygenSetupValid; + } + + @Override + public void setOxygenSetupValid(boolean oxygenSetupValid) + { + this.oxygenSetupValid = oxygenSetupValid; + } + + @Override + public AxisAlignedBB getBoundingBoxBefore() + { + return boundingBoxBefore; + } + + @Override + public void setBoundingBoxBefore(AxisAlignedBB boundingBoxBefore) + { + this.boundingBoxBefore = boundingBoxBefore; + } + + @Override + public boolean isLastOnGround() + { + return lastOnGround; + } + + @Override + public void setLastOnGround(boolean lastOnGround) + { + this.lastOnGround = lastOnGround; + } + + @Override + public double getDistanceSinceLastStep() + { + return distanceSinceLastStep; + } + + @Override + public void setDistanceSinceLastStep(double distanceSinceLastStep) + { + this.distanceSinceLastStep = distanceSinceLastStep; + } + + @Override + public int getLastStep() + { + return lastStep; + } + + @Override + public void setLastStep(int lastStep) + { + this.lastStep = lastStep; + } + + @Override + public boolean isInFreefall() + { + return inFreefall; + } + + @Override + public void setInFreefall(boolean inFreefall) + { + this.inFreefall = inFreefall; + } + + @Override + public boolean isInFreefallLast() + { + return inFreefallLast; + } + + @Override + public void setInFreefallLast(boolean inFreefallLast) + { + this.inFreefallLast = inFreefallLast; + } + + @Override + public boolean isInFreefallFirstCheck() + { + return inFreefallFirstCheck; + } + + @Override + public void setInFreefallFirstCheck(boolean inFreefallFirstCheck) + { + this.inFreefallFirstCheck = inFreefallFirstCheck; + } + + @Override + public double getDownMotionLast() + { + return downMotionLast; + } + + @Override + public void setDownMotionLast(double downMotionLast) + { + this.downMotionLast = downMotionLast; + } + + @Override + public boolean isLastRidingCameraZoomEntity() + { + return lastRidingCameraZoomEntity; + } + + @Override + public void setLastRidingCameraZoomEntity(boolean lastRidingCameraZoomEntity) + { + this.lastRidingCameraZoomEntity = lastRidingCameraZoomEntity; + } + + @Override + public int getLandingTicks() + { + return landingTicks; + } + + @Override + public void setLandingTicks(int landingTicks) + { + this.landingTicks = landingTicks; + } + + @Override + public EnumGravity getGdir() + { + return gdir; + } + + @Override + public void setGdir(EnumGravity gdir) + { + this.gdir = gdir; + } + + @Override + public float getGravityTurnRate() + { + return gravityTurnRate; + } + + @Override + public void setGravityTurnRate(float gravityTurnRate) + { + this.gravityTurnRate = gravityTurnRate; + } + + @Override + public float getGravityTurnRatePrev() + { + return gravityTurnRatePrev; + } + + @Override + public void setGravityTurnRatePrev(float gravityTurnRatePrev) + { + this.gravityTurnRatePrev = gravityTurnRatePrev; + } + + @Override + public float getGravityTurnVecX() + { + return gravityTurnVecX; + } + + @Override + public void setGravityTurnVecX(float gravityTurnVecX) + { + this.gravityTurnVecX = gravityTurnVecX; + } + + @Override + public float getGravityTurnVecY() + { + return gravityTurnVecY; + } + + @Override + public void setGravityTurnVecY(float gravityTurnVecY) + { + this.gravityTurnVecY = gravityTurnVecY; + } + + @Override + public float getGravityTurnVecZ() + { + return gravityTurnVecZ; + } + + @Override + public void setGravityTurnVecZ(float gravityTurnVecZ) + { + this.gravityTurnVecZ = gravityTurnVecZ; + } + + @Override + public float getGravityTurnYaw() + { + return gravityTurnYaw; + } + + @Override + public void setGravityTurnYaw(float gravityTurnYaw) + { + this.gravityTurnYaw = gravityTurnYaw; + } + + @Override + public int getSpaceRaceInviteTeamID() + { + return spaceRaceInviteTeamID; + } + + @Override + public void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID) + { + this.spaceRaceInviteTeamID = spaceRaceInviteTeamID; + } + + @Override + public boolean isLastZoomed() + { + return lastZoomed; + } + + @Override + public void setLastZoomed(boolean lastZoomed) + { + this.lastZoomed = lastZoomed; + } + + @Override + public int getBuildFlags() + { + return buildFlags; + } + + @Override + public void setBuildFlags(int buildFlags) + { + this.buildFlags = buildFlags; + } + + @Override + public boolean isSsOnGroundLast() + { + return ssOnGroundLast; + } + + @Override + public void setSsOnGroundLast(boolean ssOnGroundLast) + { + this.ssOnGroundLast = ssOnGroundLast; + } + + @Override + public FreefallHandler getFreefallHandler() + { + return freefallHandler; + } + + @Override + public void setFreefallHandler(FreefallHandler freefallHandler) + { + this.freefallHandler = freefallHandler; + } + + @Override + public ArrayList getUnlockedSchematics() + { + return unlockedSchematics; + } + + @Override + public void setUnlockedSchematics(ArrayList unlockedSchematics) + { + this.unlockedSchematics = unlockedSchematics; + } + + @Override + public int getMaxLandingticks() + { + return MAX_LANDINGTICKS; + } + + @Override + public float[] getLandingYOffset() + { + return landingYOffset; + } + + @Override + public void setLandingYOffset(float[] landingYOffset) + { + this.landingYOffset = landingYOffset; + } + + @Override + public void setDungeonDirection(float dir) + { + this.dungeonDirection = dir; + } + + @Override + public float getDungeonDirection() + { + return this.dungeonDirection; + } + + @Override + public boolean getPlatformControlled() + { + return this.platformControlled; + } + + @Override + public void startPlatformAscent(TileEntityPlatform noCollide, TileEntityPlatform moving, double target) + { + this.platformControlled = true; + this.platformTarget = noCollide; + this.platformMoving = moving; + noCollide.markNoCollide(0, true); + this.platformTargetY = target; + this.platformVelocityCurrent = 0D; + this.platformVelocityTarget = 0D; + this.platformPacketSent = false; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_NOCLIP_PLAYER, GCCoreUtil.getDimensionID(noCollide), new Object[] + {true})); + } + + @Override + public void finishPlatformAscent() + { + } + + @Override + public double getPlatformVelocity(double posY) + { + double delta = this.platformTargetY - posY + 0.03D; + if (Math.abs(delta) < 0.04D) + { + this.platformVelocityCurrent = 0D; + this.platformVelocityTarget = 0D; + this.platformTarget.markNoCollide(0, false); + this.platformControlled = false; + this.platformTarget.stopMoving(); + this.platformMoving.stopMoving(); + if (!this.platformPacketSent) + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_NOCLIP_PLAYER, GCCoreUtil.getDimensionID(this.platformTarget), new Object[] + {false})); + return 0D; + } else + { + if (delta > 0D) + { + this.platformVelocityTarget = (delta < 1.0D + 8 * this.platformVelocityCurrent * this.platformVelocityCurrent) ? 0.08D : 0.45D; + if (delta < 0.6D && !this.platformPacketSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_NOCLIP_PLAYER, GCCoreUtil.getDimensionID(this.platformTarget), new Object[] + {false})); + this.platformPacketSent = true; + } + } else if (delta < 0D) + { + this.platformVelocityTarget = (delta > -1.0D - 8 * this.platformVelocityCurrent * this.platformVelocityCurrent) ? -0.08D : -0.45D; + if (delta > -1.0D && !this.platformPacketSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_NOCLIP_PLAYER, GCCoreUtil.getDimensionID(this.platformTarget), new Object[] + {false})); + this.platformPacketSent = true; + } + } + if (this.platformVelocityCurrent < this.platformVelocityTarget) + { + this.platformVelocityCurrent += 0.036D; + if (this.platformVelocityCurrent > this.platformVelocityTarget) + { + this.platformVelocityCurrent = this.platformVelocityTarget; + } + } else if (this.platformVelocityCurrent > this.platformVelocityTarget) + { + this.platformVelocityCurrent -= 0.036D; + if (this.platformVelocityCurrent < this.platformVelocityTarget) + { + this.platformVelocityCurrent = this.platformVelocityTarget; + } + } + } + return this.platformVelocityCurrent; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventHandlerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventHandlerGC.java new file mode 100644 index 00000000..94a6366f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventHandlerGC.java @@ -0,0 +1,1018 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.event; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.SortedSet; +import java.util.TreeSet; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockGravel; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockSand; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.audio.PositionedSound; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Biomes; +import net.minecraft.init.Blocks; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBucket; +import net.minecraft.item.ItemFireball; +import net.minecraft.item.ItemFlintAndSteel; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDesert; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.client.event.EntityViewRenderEvent; +import net.minecraftforge.client.event.sound.PlaySoundEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.living.LivingFallEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.living.ZombieEvent; +import net.minecraftforge.event.entity.player.FillBucketEvent; +import net.minecraftforge.event.entity.player.PlayerDropsEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; +import net.minecraftforge.event.terraingen.TerrainGen; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.event.world.ChunkDataEvent; +import net.minecraftforge.event.world.ChunkEvent.Load; +import net.minecraftforge.event.world.WorldEvent.Save; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.event.ConfigChangedEvent; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.fml.common.eventhandler.Event.Result; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.event.oxygen.GCCoreOxygenSuffocationEvent; +import micdoodle8.mods.galacticraft.api.item.IKeyItem; +import micdoodle8.mods.galacticraft.api.item.IKeyable; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicEvent.FlipPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicEvent.Unlock; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.client.SkyProviderOverworld; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.ASMUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.world.ChunkLoadingCallback; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; + +public class EventHandlerGC +{ + + public static Map bucketList = new HashMap<>(4, 1F); + public static boolean bedActivated; + + @SubscribeEvent + public void onWorldSave(Save event) + { + ChunkLoadingCallback.save((WorldServer) event.getWorld()); + } + + @SubscribeEvent + public void onChunkDataLoad(ChunkDataEvent.Load event) + { + ChunkLoadingCallback.load((WorldServer) event.getWorld()); + } + + @SubscribeEvent + public void onWorldLoad(Load event) + { + if (!event.getWorld().isRemote) + { + ChunkLoadingCallback.load((WorldServer) event.getWorld()); + } + } + + @SubscribeEvent + public void playerJoinWorld(EntityJoinWorldEvent event) + { + TickHandlerServer.markWorldNeedsUpdate(GCCoreUtil.getDimensionID(event.getWorld())); + } + + @SubscribeEvent + public void onConfigChanged(ConfigChangedEvent event) + { + if (event.getModID().equals(Constants.MOD_ID_CORE)) + { + ConfigManagerCore.syncConfig(false); + } + } + + @SubscribeEvent + public void onPortalSpawn(BlockEvent.PortalSpawnEvent event) + { + WorldProvider provider = event.getWorld().provider; + if (provider instanceof IGalacticraftWorldProvider) + { + event.setCanceled(!((IGalacticraftWorldProvider) provider).netherPortalsOperational()); + } + } + + @SubscribeEvent + public void onEntityDamaged(LivingHurtEvent event) + { + if (event.getSource().damageType.equals(DamageSource.ON_FIRE.damageType)) + { + if (OxygenUtil.noAtmosphericCombustion(event.getEntityLiving().world.provider)) + { + if (OxygenUtil.isAABBInBreathableAirBlock(event.getEntityLiving().world, event.getEntityLiving().getEntityBoundingBox())) + { + return; + } + + if (event.getEntityLiving().world instanceof WorldServer) + { + ((WorldServer) event.getEntityLiving().world).spawnParticle(EnumParticleTypes.SMOKE_NORMAL, event.getEntityLiving().posX, event.getEntityLiving().posY + event.getEntityLiving().getEntityBoundingBox().maxY - event.getEntityLiving().getEntityBoundingBox().minY, event.getEntityLiving().posZ, 50, 0.0, 0.05, 0.0, 0.001); + } + + event.getEntityLiving().extinguish(); + } + } + } + + @SubscribeEvent + public void onEntityFall(LivingFallEvent event) + { + if (event.getEntityLiving() instanceof EntityPlayer) + { + EntityPlayer player = (EntityPlayer) event.getEntityLiving(); + if (player.getRidingEntity() instanceof EntityAutoRocket || player.getRidingEntity() instanceof EntityLanderBase) + { + event.setDistance(0.0F); + event.setCanceled(true); + return; + } + } + + if (event.getEntityLiving().world.provider instanceof IGalacticraftWorldProvider) + { + event.setDistance(event.getDistance() * ((IGalacticraftWorldProvider) event.getEntityLiving().world.provider).getFallDamageModifier()); + } + } + + @SubscribeEvent + public void blockBreakSpeed(PlayerEvent.BreakSpeed event) + { + EntityPlayer p = event.getEntityPlayer(); + if (!p.onGround && p.world.provider instanceof IZeroGDimension && !ConfigManagerCore.hardMode && event.getOriginalSpeed() < 5.0F) + { + event.setNewSpeed(event.getOriginalSpeed() * 5.0F); + } + } + + @SubscribeEvent + public void onPlayerLeftClickedBlock(PlayerInteractEvent.LeftClickBlock event) + { + // Skip events triggered from Thaumcraft Golems and other non-players + if (event.getEntityPlayer() == null || event.getEntityPlayer().inventory == null || event.getPos() == null || (event.getPos().getX() == 0 && event.getPos().getY() == 0 && event.getPos().getZ() == 0)) + { + return; + } + + final World worldObj = event.getEntityPlayer().world; + if (worldObj == null) + { + return; + } + + final ItemStack heldStack = event.getEntityPlayer().inventory.getCurrentItem(); + final TileEntity tileClicked = worldObj.getTileEntity(event.getPos()); + + if (!heldStack.isEmpty()) + { + if (tileClicked != null && tileClicked instanceof IKeyable) + { + event.setCanceled(!((IKeyable) tileClicked).canBreak() && !event.getEntityPlayer().capabilities.isCreativeMode); + } + } + else if (tileClicked != null && tileClicked instanceof IKeyable) + { + event.setCanceled(!((IKeyable) tileClicked).canBreak() && !event.getEntityPlayer().capabilities.isCreativeMode); + } + } + + @SubscribeEvent + public void onPlayerRightClickedBlock(PlayerInteractEvent.RightClickBlock event) + { + // Skip events triggered from Thaumcraft Golems and other non-players + if (event.getEntityPlayer() == null || event.getEntityPlayer().inventory == null || event.getPos() == null || (event.getPos().getX() == 0 && event.getPos().getY() == 0 && event.getPos().getZ() == 0)) + { + return; + } + + final World worldObj = event.getEntityPlayer().world; + if (worldObj == null) + { + return; + } + + final Block idClicked = worldObj.getBlockState(event.getPos()).getBlock(); + + if (idClicked == Blocks.BED && worldObj.provider instanceof IGalacticraftWorldProvider && !worldObj.isRemote && !((IGalacticraftWorldProvider) worldObj.provider).hasBreathableAtmosphere()) + { + GCPlayerStats stats = GCPlayerStats.get(event.getEntityPlayer()); + if (!stats.hasReceivedBedWarning()) + { + event.getEntityPlayer().sendMessage(new TextComponentString(GCCoreUtil.translate("gui.bed_fail.message"))); + stats.setReceivedBedWarning(true); + } + + if (worldObj.provider instanceof WorldProviderSpaceStation) + { + // On space stations simply block the bed activation => no + // explosion + event.setCanceled(true); + return; + } + + // Optionally prevent beds from exploding - depends on + // canRespawnHere() in the WorldProvider interacting with this + EventHandlerGC.bedActivated = true; + if (worldObj.provider.canRespawnHere() && !EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = true; + + // On planets allow the bed to be used to designate a player + // spawn point + event.getEntityPlayer().setSpawnChunk(event.getPos(), false, GCCoreUtil.getDimensionID(event.getWorld())); + } + else + { + EventHandlerGC.bedActivated = false; + } + } + + final ItemStack heldStack = event.getEntityPlayer().inventory.getCurrentItem(); + final TileEntity tileClicked = worldObj.getTileEntity(event.getPos()); + + if (!heldStack.isEmpty()) + { + if (tileClicked != null && tileClicked instanceof IKeyable) + { + if (heldStack.getItem() instanceof IKeyItem) + { + if (((IKeyItem) heldStack.getItem()).getTier(heldStack) == -1 || ((IKeyable) tileClicked).getTierOfKeyRequired() == -1 || ((IKeyItem) heldStack.getItem()).getTier(heldStack) == ((IKeyable) tileClicked).getTierOfKeyRequired()) + { + event.setCanceled(((IKeyable) tileClicked).onValidKeyActivated(event.getEntityPlayer(), heldStack, event.getFace())); + } + else if (!event.getEntityPlayer().isSneaking()) + { + event.setCanceled(((IKeyable) tileClicked).onActivatedWithoutKey(event.getEntityPlayer(), event.getFace())); + } + } + else + { + event.setCanceled(((IKeyable) tileClicked).onActivatedWithoutKey(event.getEntityPlayer(), event.getFace())); + } + } + + if (heldStack.getItem() instanceof ItemFlintAndSteel || heldStack.getItem() instanceof ItemFireball) + { + if (!worldObj.isRemote) + { + if (idClicked != Blocks.TNT && OxygenUtil.noAtmosphericCombustion(event.getEntityPlayer().world.provider) && !OxygenUtil.isAABBInBreathableAirBlock(event.getEntityLiving().world, new AxisAlignedBB(event.getPos().getX(), event.getPos().getY(), event.getPos().getZ(), event.getPos().getX() + 1, event.getPos().getY() + 2, event.getPos().getZ() + 1))) + { + event.setCanceled(true); + } + } + } + } + else if (tileClicked != null && tileClicked instanceof IKeyable) + { + event.setCanceled(((IKeyable) tileClicked).onActivatedWithoutKey(event.getEntityPlayer(), event.getFace())); + } + } + + @SubscribeEvent + public void entityLivingEvent(LivingEvent.LivingUpdateEvent event) + { + final EntityLivingBase entityLiving = event.getEntityLiving(); + if (entityLiving instanceof EntityPlayerMP) + { + GalacticraftCore.handler.onPlayerUpdate((EntityPlayerMP) entityLiving); + AsteroidsModule.playerHandler.onPlayerUpdate((EntityPlayerMP) entityLiving); + return; + } + + if (entityLiving.ticksExisted % ConfigManagerCore.suffocationCooldown == 0) + { + if (entityLiving.world.provider instanceof IGalacticraftWorldProvider) + { + if (!(entityLiving instanceof EntityPlayer) && (!(entityLiving instanceof IEntityBreathable) || !((IEntityBreathable) entityLiving).canBreath()) && !((IGalacticraftWorldProvider) entityLiving.world.provider).hasBreathableAtmosphere()) + { + if (!OxygenUtil.isAABBInBreathableAirBlock(entityLiving)) + { + GCCoreOxygenSuffocationEvent suffocationEvent = new GCCoreOxygenSuffocationEvent.Pre(entityLiving); + MinecraftForge.EVENT_BUS.post(suffocationEvent); + + if (suffocationEvent.isCanceled()) + { + return; + } + + entityLiving.attackEntityFrom(DamageSourceGC.oxygenSuffocation, Math.max(ConfigManagerCore.suffocationDamage / 2, 1)); + + GCCoreOxygenSuffocationEvent suffocationEventPost = new GCCoreOxygenSuffocationEvent.Post(entityLiving); + MinecraftForge.EVENT_BUS.post(suffocationEventPost); + } + } + } + } + } + + @SubscribeEvent + public void entityUpdateCancelInFreefall(EntityEvent.CanUpdate event) + { + if (event.getEntity() instanceof EntityMeteor) + { + event.setCanUpdate(true); + return; + } + + if (event.getEntity().world.provider instanceof IZeroGDimension) + { + if (((IZeroGDimension) event.getEntity().world.provider).inFreefall(event.getEntity())) + { + event.setCanUpdate(true); + // event.entity.move(event.entity.motionX, event.entity.motionY, event.entity.motionZ); + } + } + } + + private ItemStack fillBucket(World world, RayTraceResult position) + { + IBlockState state = world.getBlockState(position.getBlockPos()); + Block block = state.getBlock(); + + Item bucket = bucketList.get(block); + + if (bucket != null && block.getMetaFromState(state) == 0) + { + world.setBlockToAir(position.getBlockPos()); + return new ItemStack(bucket); + } + + return null; + } + + @SubscribeEvent + public void onBucketFill(FillBucketEvent event) + { + if (event.getEmptyBucket() == null || !(event.getEmptyBucket().getItem() instanceof ItemBucket)) + { + return; + } + RayTraceResult pos = event.getTarget(); + if (pos == null) + { + return; + } + + ItemStack ret = fillBucket(event.getWorld(), pos); + + if (ret == null) // Intentional null check - see fillBucket() + { + return; + } + + event.setFilledBucket(ret); + event.setResult(Result.ALLOW); + } + + @SubscribeEvent + public void populate(PopulateChunkEvent.Post event) + { + final boolean doGen = TerrainGen.populate(event.getGenerator(), event.getWorld(), event.getRand(), event.getChunkX(), event.getChunkZ(), event.isHasVillageGenerated(), PopulateChunkEvent.Populate.EventType.CUSTOM); + + if (!doGen) + { + return; + } + + final int worldX = event.getChunkX() << 4; + final int worldZ = event.getChunkZ() << 4; + + EventHandlerGC.generateOil(event.getWorld(), event.getRand(), worldX + 15, worldZ + 15, false); + } + + public static boolean oilPresent(World world, Random rand, int x, int z, BlockVec3 pos) + { + boolean doGen2 = false; + + for (Integer dim : ConfigManagerCore.externalOilGen) + { + if (dim == GCCoreUtil.getDimensionID(world)) + { + doGen2 = true; + break; + } + } + + if (!doGen2) + { + return false; + } + + final Biome biome = world.getBiome(new BlockPos(x + 8, 0, z + 8)); + + if (biome == Biomes.SKY || biome == Biomes.HELL) + { + return false; + } + + rand.setSeed(world.getSeed()); + long i1 = rand.nextInt() / 2L * 2L + 1L; + long j1 = rand.nextInt() / 2L * 2L + 1L; + rand.setSeed(x * i1 + z * j1 ^ world.getSeed()); + + double randMod = Math.min(0.2D, 0.05D * ConfigManagerCore.oilGenFactor); + + if (biome.getBaseHeight() >= 0.45F) + { + randMod /= 2; + } + if (biome.getBaseHeight() < -0.5F) + { + randMod *= 1.8; + } + if (biome instanceof BiomeDesert) + { + randMod *= 1.8; + } + + final boolean flag1 = rand.nextDouble() <= randMod; + final boolean flag2 = rand.nextDouble() <= randMod; + + if (flag1 || flag2) + { + pos.y = 17 + rand.nextInt(10) + rand.nextInt(5); + pos.x = x + 8 - rand.nextInt(16); // do not change without thinking + // about chunk loading, see notes + // in generateOil() + pos.z = z + 8 - rand.nextInt(16); // do not change without thinking + // about chunk loading, see notes + // in generateOil() + return true; + } + + return false; + } + + /** + * xx, zz are the central position of 4 chunks: the chunk currently being + * populated + 1 in the x,z plane We must not stray more than 1 chunk away + * from this position, that's 16 blocks + */ + public static void generateOil(World world, Random rand, int xx, int zz, boolean testFirst) + { + BlockVec3 pos = new BlockVec3(); + if (oilPresent(world, rand, xx, zz, pos)) + { + int x = pos.x; + int cy = pos.y; + int z = pos.z; + int r = 3 + rand.nextInt(5); + + // The method loads blocks in the range (x - r - 1) to (x + r + 1) - + // whatever the randoms, all these positions must be inside the +/-1 + // chunk range + // This can be minimum xx - 7 - 7 - 1, that's OK! + // This can be maximum xx + 8 + 7 + 1, that's also OK! + + if (testFirst && checkOilPresent(world, x, cy, z, r)) + { + return; + } + + final int r2 = r * r; + + IBlockState crudeOil = GCBlocks.crudeOil.getDefaultState(); + for (int bx = -r; bx <= r; bx++) + { + for (int by = -r + 2; by <= r - 2; by++) + { + int xySquared = bx * bx + by * by * 3; + for (int bz = -r; bz <= r; bz++) + { + if (xySquared + bz * bz <= r2) + { + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x - 1, by + cy, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x + 1, by + cy, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy - 1, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy, bz + z - 1))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy, bz + z + 1))) + { + continue; + } + if (EventHandlerGC.checkBlockAbove(world, new BlockPos(bx + x, by + cy + 1, bz + z))) + { + continue; + } + + world.setBlockState(new BlockPos(bx + x, by + cy, bz + z), crudeOil, 2); + } + } + } + } + } + } + + private static boolean checkOilPresent(World world, int x, int cy, int z, int r) + { + final int r2 = r * r; + + for (int bx = -r; bx <= r; bx++) + { + for (int by = -r + 2; by <= r - 2; by++) + { + int xySquared = bx * bx + by * by * 3; + for (int bz = -r; bz <= r; bz++) + { + if (xySquared + bz * bz <= r2) + { + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x - 1, by + cy, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x + 1, by + cy, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy - 1, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy, bz + z - 1))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy, bz + z + 1))) + { + continue; + } + if (EventHandlerGC.checkBlockAbove(world, new BlockPos(bx + x, by + cy + 1, bz + z))) + { + continue; + } + + if (world.getBlockState(new BlockPos(bx + x, by + cy, bz + z)).getBlock() == GCBlocks.crudeOil) + { + return true; + } + } + } + } + } + + return false; + } + + public static void retrogenOil(World world, Chunk chunk) + { + int cx = chunk.x; + int cz = chunk.z; + + generateOil(world, new Random(), cx << 4, cz << 4, true); + } + + private static boolean checkBlock(World w, BlockPos pos) + { + IBlockState state = w.getBlockState(pos); + Block b = state.getBlock(); + if (b.getMaterial(state) == Material.AIR) + { + return true; + } + return b instanceof BlockLiquid && b != GCBlocks.crudeOil; + } + + private static boolean checkBlockAbove(World w, BlockPos pos) + { + Block b = w.getBlockState(pos).getBlock(); + if (b instanceof BlockSand) + { + return true; + } + if (b instanceof BlockGravel) + { + return true; + } + return false; + } + + @SubscribeEvent + public void schematicUnlocked(Unlock event) + { + GCPlayerStats stats = GCPlayerStats.get(event.player); + + if (!stats.getUnlockedSchematics().contains(event.page)) + { + stats.getUnlockedSchematics().add(event.page); + Collections.sort(stats.getUnlockedSchematics()); + + if (event.player != null && event.player.connection != null) + { + Integer[] iArray = new Integer[stats.getUnlockedSchematics().size()]; + + for (int i = 0; i < iArray.length; i++) + { + ISchematicPage page = stats.getUnlockedSchematics().get(i); + iArray[i] = page == null ? -2 : page.getPageID(); + } + + List objList = new ArrayList<>(); + objList.add(iArray); + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SCHEMATIC_LIST, GCCoreUtil.getDimensionID(event.player.world), objList), event.player); + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void schematicFlipEvent(FlipPage event) + { + ISchematicPage page = null; + + switch (event.direction) + { + case 1: + page = EventHandlerGC.getNextSchematic(event.index); + break; + case -1: + page = EventHandlerGC.getLastSchematic(event.index); + break; + } + + if (page != null) + { + GuiScreen cs = event.currentGui; + int benchX = (int) FMLClientHandler.instance().getClient().player.posX; + int benchY = (int) FMLClientHandler.instance().getClient().player.posY; + int benchZ = (int) FMLClientHandler.instance().getClient().player.posZ; + if (cs instanceof GuiPositionedContainer) + { + benchX = ((GuiPositionedContainer) cs).getX(); + benchY = ((GuiPositionedContainer) cs).getY(); + benchZ = ((GuiPositionedContainer) cs).getZ(); + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_OPEN_SCHEMATIC_PAGE, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] {page.getPageID(), benchX, benchY, benchZ})); + FMLClientHandler.instance().getClient().player.openGui(GalacticraftCore.instance, page.getGuiID(), FMLClientHandler.instance().getClient().player.world, benchX, benchY, benchZ); + } + } + + @SideOnly(Side.CLIENT) + private static ISchematicPage getNextSchematic(int currentIndex) + { + EntityPlayerSP player = PlayerUtil.getPlayerBaseClientFromPlayer(FMLClientHandler.instance().getClient().player, false); + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + final int size = stats.getUnlockedSchematics().size(); + final HashMap idList = new HashMap<>(size, 1F); + for (int i = 0; i < size; i++) + { + idList.put(i, stats.getUnlockedSchematics().get(i).getPageID()); + } + + final SortedSet keys = new TreeSet<>(idList.keySet()); + final Iterator iterator = keys.iterator(); + + for (int count = 0; count < keys.size(); count++) + { + final int i = iterator.next(); + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForID(idList.get(i)); + + if (page.getPageID() == currentIndex) + { + if (count + 1 < stats.getUnlockedSchematics().size()) + { + return stats.getUnlockedSchematics().get(count + 1); + } + else + { + return null; + } + } + } + + return null; + } + + @SideOnly(Side.CLIENT) + private static ISchematicPage getLastSchematic(int currentIndex) + { + EntityPlayerSP player = PlayerUtil.getPlayerBaseClientFromPlayer(FMLClientHandler.instance().getClient().player, false); + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + final int size = stats.getUnlockedSchematics().size(); + final HashMap idList = new HashMap<>(size, 1F); + for (int i = 0; i < size; i++) + { + idList.put(i, stats.getUnlockedSchematics().get(i).getPageID()); + } + + final SortedSet keys = new TreeSet<>(idList.keySet()); + final Iterator iterator = keys.iterator(); + + for (int count = 0; count < keys.size(); count++) + { + final int i = iterator.next(); + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForID(idList.get(i)); + + if (page.getPageID() == currentIndex) + { + if (count - 1 >= 0) + { + return stats.getUnlockedSchematics().get(count - 1); + } + else + { + return null; + } + } + } + + return null; + } + + @SubscribeEvent + public void onPlayerDeath(PlayerDropsEvent event) + { + if (event.getEntityLiving() instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(event.getEntityPlayer()); + if (!event.getEntityPlayer().world.getGameRules().getBoolean("keepInventory")) + { + event.getEntityPlayer().captureDrops = true; + for (int i = stats.getExtendedInventory().getSizeInventory() - 1; i >= 0; i--) + { + ItemStack stack = stats.getExtendedInventory().getStackInSlot(i); + + if (!stack.isEmpty()) + { + event.getEntityPlayer().dropItem(stack, true, false); + stats.getExtendedInventory().setInventorySlotContents(i, ItemStack.EMPTY); + } + } + event.getEntityLiving().captureDrops = false; + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onLeaveBedButtonClicked(SleepCancelledEvent event) + { + EntityPlayer player = FMLClientHandler.instance().getClient().player; + + BlockPos c = player.bedLocation; + + if (c != null) + { + EventWakePlayer event0 = new EventWakePlayer(player, c, true, true, false, true); + MinecraftForge.EVENT_BUS.post(event0); + player.wakeUpPlayer(true, true, false); + + if (player.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(PacketSimpleMars.EnumSimplePacketMars.S_WAKE_PLAYER, GCCoreUtil.getDimensionID(player.world), new Object[] {})); + } + } + } + + @SubscribeEvent + public void onZombieSummonAid(ZombieEvent.SummonAidEvent event) + { + if (event.getEntity() instanceof EntityEvolvedZombie) + { + event.setCustomSummonedAid(new EntityEvolvedZombie(event.getWorld())); + + if (((EntityLivingBase) event.getEntity()).getRNG().nextFloat() < ((EntityEvolvedZombie) event.getEntity()).getEntityAttribute(((EntityEvolvedZombie) event.getEntity()).getReinforcementsAttribute()).getAttributeValue()) + { + event.setResult(Result.ALLOW); + } + else + { + event.setResult(Result.DENY); + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void overrideSkyColor(EntityViewRenderEvent.FogColors event) + { + // Disable any night vision effects on the sky, if the planet has no + // atmosphere + if (event.getEntity() instanceof EntityLivingBase && ((EntityLivingBase) event.getEntity()).isPotionActive(MobEffects.NIGHT_VISION)) + { + WorldClient worldclient = Minecraft.getMinecraft().world; + + if (worldclient.provider instanceof IGalacticraftWorldProvider && ((IGalacticraftWorldProvider) worldclient.provider).hasNoAtmosphere() && event.getState().getMaterial() == Material.AIR && !((IGalacticraftWorldProvider) worldclient.provider).hasBreathableAtmosphere()) + { + Vec3d vec = worldclient.getFogColor(1.0F); + event.setRed((float) vec.x); + event.setGreen((float) vec.y); + event.setBlue((float) vec.z); + return; + } + + if (worldclient.provider.getSkyRenderer() instanceof SkyProviderOverworld && event.getEntity().posY > Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + Vec3d vec = TransformerHooks.getFogColorHook(event.getEntity().world); + event.setRed((float) vec.x); + event.setGreen((float) vec.y); + event.setBlue((float) vec.z); + return; + } + } + } + + private List soundPlayList = new ArrayList<>(); + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onSoundPlayed(PlaySoundEvent event) + { + // The event.result starts off equal to event.sound, but could have been + // altered or set to null by another mod + if (event.getResultSound() == null) + { + return; + } + + EntityPlayerSP player = FMLClientHandler.instance().getClient().player; + + if (player != null && player.world != null && player.world.provider instanceof IGalacticraftWorldProvider) + { + // Only modify standard game sounds, not music + if (event.getResultSound().getAttenuationType() != ISound.AttenuationType.NONE) + { + PlayerGearData gearData = ClientProxyCore.playerItemData.get(PlayerUtil.getName(player)); + + float x = event.getResultSound().getXPosF(); + float y = event.getResultSound().getYPosF(); + float z = event.getResultSound().getZPosF(); + + if (gearData == null || gearData.getFrequencyModule() == -1) + { + // If the player doesn't have a frequency module, and the + // player isn't in an oxygenated environment + // Note: this is a very simplistic approach, and nowhere + // near realistic, but required for performance reasons + AxisAlignedBB bb = new AxisAlignedBB(x - 0.0015D, y - 0.0015D, z - 0.0015D, x + 0.0015D, y + 0.0015D, z + 0.0015D); + boolean playerInAtmosphere = OxygenUtil.isAABBInBreathableAirBlock(player); + boolean soundInAtmosphere = OxygenUtil.isAABBInBreathableAirBlock(player.world, bb); + if ((!playerInAtmosphere || !soundInAtmosphere)) + { + float volume = 1.0F; + float pitch = 1.0F; + + if (event.getSound() instanceof PositionedSound) + { + volume = ASMUtil.getPrivateValue(PositionedSound.class, (PositionedSound) event.getSound(), "volume", "field_147662_b"); + pitch = ASMUtil.getPrivateValue(PositionedSound.class, (PositionedSound) event.getSound(), "pitch", "field_147663_c"); + } + + // First check for duplicate firing of PlaySoundEvent17 + // on this handler's own playing of a reduced volume + // sound (see below) + for (int i = 0; i < this.soundPlayList.size(); i++) + { + SoundPlayEntry entry = this.soundPlayList.get(i); + + if (entry.name.equals(event.getName()) && entry.x == x && entry.y == y && entry.z == z && entry.volume == volume) + { + this.soundPlayList.remove(i); + return; + } + } + + // If it's not a duplicate: play the same sound but at + // reduced volume + float newVolume = volume / Math.max(0.01F, ((IGalacticraftWorldProvider) player.world.provider).getSoundVolReductionAmount()); + + this.soundPlayList.add(new SoundPlayEntry(event.getName(), x, y, z, newVolume)); + SoundEvent soundEvent = SoundEvent.REGISTRY.getObject(event.getResultSound().getSoundLocation()); + if (soundEvent != null) + { + ISound newSound = new PositionedSoundRecord(soundEvent, SoundCategory.NEUTRAL, newVolume, pitch, x, y, z); + event.getManager().playSound(newSound); + event.setResultSound(null); + } + else + { + GalacticraftCore.logger.error("Sound event null! " + event.getName() + " " + event.getResultSound().getSoundLocation()); + } + } + } + } + } + } + + private static class SoundPlayEntry + { + + private final String name; + private final float x; + private final float y; + private final float z; + private final float volume; + + private SoundPlayEntry(String name, float x, float y, float z, float volume) + { + this.name = name; + this.volume = volume; + this.x = x; + this.y = y; + this.z = z; + } + } + + public static class SleepCancelledEvent extends Event + {} + + public static class OrientCameraEvent extends Event + {} + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventLandingPadRemoval.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventLandingPadRemoval.java new file mode 100644 index 00000000..c76430c2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventLandingPadRemoval.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.event; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public class EventLandingPadRemoval extends Event +{ + + public boolean allow = true; + public final BlockPos pos; + public final World world; + + public EventLandingPadRemoval(World world, BlockPos pos) + { + this.world = world; + this.pos = pos; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventWakePlayer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventWakePlayer.java new file mode 100644 index 00000000..2096ee8c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventWakePlayer.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.event; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.fml.common.eventhandler.Cancelable; + +@Cancelable +public class EventWakePlayer extends PlayerEvent +{ + + public EntityPlayer.SleepResult result = null; + public final BlockPos pos; + public final boolean immediately; + public final boolean updateWorld; + public final boolean setSpawn; + public final boolean bypassed; + + public EventWakePlayer(EntityPlayer player, BlockPos pos, boolean immediately, boolean updateWorld, boolean setSpawn, boolean bypassed) + { + super(player); + this.pos = pos; + this.immediately = immediately; + this.updateWorld = updateWorld; + this.setSpawn = setSpawn; + this.bypassed = bypassed; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/LootHandlerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/LootHandlerGC.java new file mode 100644 index 00000000..92845bd8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/LootHandlerGC.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.event; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.loot.LootTableList; + +import micdoodle8.mods.galacticraft.core.Constants; + +public class LootHandlerGC +{ + + public static ResourceLocation TABLE_CRASHED_PROBE; + + public static void registerAll() + { + TABLE_CRASHED_PROBE = register("crashed_probe"); + } + + private static ResourceLocation register(String table) + { + return LootTableList.register(new ResourceLocation(Constants.MOD_ID_CORE, table)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/FluidNetwork.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/FluidNetwork.java new file mode 100644 index 00000000..53829a27 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/FluidNetwork.java @@ -0,0 +1,736 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.fluid; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.grid.Pathfinder; +import micdoodle8.mods.galacticraft.api.transmission.grid.PathfinderChecker; +import micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacket; +import micdoodle8.mods.galacticraft.core.network.PacketFluidNetworkUpdate; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import org.apache.commons.lang3.tuple.Pair; + +/** + * Based heavily on Mekanism FluidNetwork + * + * @author aidancbrady + */ +public class FluidNetwork implements IGridNetwork, TileEntity> +{ + + public Map acceptors = Maps.newHashMap(); + public Map> acceptorDirections = Maps.newHashMap(); + public final Set> pipes = Sets.newHashSet(); + private Set> pipesAdded = Sets.newHashSet(); + private Set updateQueue = Sets.newLinkedHashSet(); + public FluidStack buffer; + private int capacity; + private World world; + private int prevBufferAmount; + private boolean needsUpdate; + public float fluidScale; + public Fluid refFluid; + public boolean didTransfer; + public boolean prevTransfer; + public int transferDelay = 0; + private int prevTransferAmount; + private int updateDelay; + private boolean firstUpdate = true; + + public FluidNetwork() + { + } + + public FluidNetwork(Collection toMerge) + { + for (FluidNetwork network : toMerge) + { + if (network != null) + { + if (network.buffer != null) + { + if (this.buffer == null) + { + this.buffer = network.buffer.copy(); + } else + { + if (buffer.getFluid() == network.buffer.getFluid()) + { + buffer.amount += network.buffer.amount; + } else if (network.buffer.amount > buffer.amount) + { + this.buffer = network.buffer.copy(); + } + } + + network.buffer = null; + } + + this.adoptNetwork(network); + network.unregister(); + } + } + + this.register(); + } + + public void adoptNetwork(FluidNetwork network) + { + for (IBufferTransmitter transmitter : network.pipes) + { + transmitter.setNetwork(this); + this.pipes.add(transmitter); + this.pipesAdded.add(transmitter); + this.updateDelay = this.firstUpdate ? 3 : 1; + } + + this.acceptors.putAll(network.acceptors); + + for (Map.Entry> e : network.acceptorDirections.entrySet()) + { + BlockPos pos = e.getKey(); + + if (this.acceptorDirections.containsKey(pos)) + { + this.acceptorDirections.get(pos).addAll(e.getValue()); + } else + { + this.acceptorDirections.put(pos, e.getValue()); + } + } + } + + public void register() + { + GalacticraftCore.proxy.registerNetwork(this); + } + + public void unregister() + { + GalacticraftCore.proxy.unregisterNetwork(this); + } + + public void addTransmitter(IBufferTransmitter transmitter) + { + this.pipes.add(transmitter); + this.pipesAdded.add(transmitter); + this.refresh(); + this.updateDelay = this.firstUpdate ? 20 : 1; + } + + public void removeTransmitter(IBufferTransmitter transmitter) + { + this.pipes.remove(transmitter); + this.updateCapacity(); + } + + public void onTransmitterAdded(IBufferTransmitter transmitter) + { + FluidStack stack = transmitter.getBuffer(); + + if (stack == null || stack.getFluid() == null || stack.amount == 0) + { + // Nothing to do + return; + } + + if (buffer == null || buffer.getFluid() == null || buffer.amount == 0) + { + // Set transmitter buffer to network buffer + buffer = stack.copy(); + stack.amount = 0; + return; + } + + if (buffer.isFluidEqual(stack)) + { + // Add transmitter fluid to network buffer + buffer.amount += stack.amount; + } + + stack.amount = 0; + } + + public void clamp() + { + if (buffer != null && buffer.amount > getCapacity()) + { + buffer.amount = this.capacity; + } + } + + public void updateCapacity() + { + this.capacity = 0; + + for (IBufferTransmitter transmitter : this.pipes) + { + this.capacity += transmitter.getCapacity(); + } + } + + public int getCapacity() + { + return capacity; + } + + public int getRequest() + { + return getCapacity() - (buffer != null ? buffer.amount : 0); + } + + private int emitToAcceptors(FluidStack toSend, boolean doTransfer) + { + List>> available = new ArrayList<>(); + available.addAll(this.getAcceptors(toSend)); + + Collections.shuffle(available); + + int totalSend = 0; + + if (!available.isEmpty()) + { + int divider = available.size(); + int remainder = toSend.amount % divider; + int each = (toSend.amount - remainder) / divider; + + for (Pair> pair : available) + { + int currentSend = each; + Map acceptors = pair.getRight(); + EnumSet sides = acceptorDirections.get(pair.getLeft()); + + if (remainder > 0) + { + currentSend++; + remainder--; + } + + for (EnumFacing side : sides) + { + int prev = totalSend; + IFluidHandler acceptor = acceptors.get(side); + + if (acceptor != null) + { + FluidStack copy = toSend.copy(); + copy.amount = currentSend; + totalSend += acceptor.fill(copy, doTransfer); + } + + if (totalSend > prev) + { + // If fluid was sent to this handler, continue to next + break; + } + } + } + } + + if (doTransfer && totalSend > 0 && GCCoreUtil.getEffectiveSide().isServer()) + { + this.didTransfer = true; + this.transferDelay = 2; + } + + return totalSend; + } + + public int emitToBuffer(FluidStack toSend, boolean doTransfer) + { + if (toSend == null || (buffer != null && buffer.getFluid() != toSend.getFluid())) + { + return 0; + } + + int toUse = Math.min(getRequest(), toSend.amount); + + if (doTransfer) + { + if (buffer == null) + { + // Copy + buffer = toSend.copy(); + buffer.amount = toUse; + } else + { + // Add + buffer.amount += toUse; + } + } + + return toUse; + } + + public void tickEnd() + { + this.onUpdate(); + } + + public void addUpdate(EntityPlayerMP player) + { + this.updateQueue.add(new DelayQueue(player)); + } + + private IPacket getAddTransmitterUpdate() + { + BlockPos pos = ((TileEntity) this.pipes.iterator().next()).getPos(); + return PacketFluidNetworkUpdate.getAddTransmitterUpdate(GCCoreUtil.getDimensionID(this.world), pos, this.firstUpdate, this.pipesAdded); + } + + public void onUpdate() + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + Iterator iterator = this.updateQueue.iterator(); + + try + { + while (iterator.hasNext()) + { + DelayQueue queue = iterator.next(); + + if (queue.delay > 0) + { + queue.delay--; + } else + { + this.pipesAdded.addAll(this.pipes); + GalacticraftCore.packetPipeline.sendTo(this.getAddTransmitterUpdate(), queue.player); + this.pipesAdded.clear(); + iterator.remove(); + } + } + } catch (Exception e) + { + + } + + if (this.updateDelay > 0) + { + this.updateDelay--; + + if (this.updateDelay == 0) + { + BlockPos pos = ((TileEntity) this.pipes.iterator().next()).getPos(); + GalacticraftCore.packetPipeline.sendToAllAround(this.getAddTransmitterUpdate(), + new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), pos.getX(), pos.getY(), pos.getZ(), 30.0)); + this.firstUpdate = false; + this.pipesAdded.clear(); + this.needsUpdate = true; + } + } + + this.prevTransferAmount = 0; + + if (this.transferDelay == 0) + { + this.didTransfer = false; + } else + { + this.transferDelay--; + } + + int stored = buffer != null ? buffer.amount : 0; + + if (stored != this.prevBufferAmount) + { + this.needsUpdate = true; + } + + this.prevBufferAmount = stored; + + if (this.didTransfer != this.prevTransfer || this.needsUpdate) + { + BlockPos pos = ((TileEntity) this.pipes.iterator().next()).getPos(); + GalacticraftCore.packetPipeline.sendToAllAround(PacketFluidNetworkUpdate.getFluidUpdate(GCCoreUtil.getDimensionID(this.world), pos, this.buffer, this.didTransfer), + new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), pos.getX(), pos.getY(), pos.getZ(), 20.0)); + this.needsUpdate = false; + } + + this.prevTransfer = this.didTransfer; + + if (buffer != null) + { + this.prevTransferAmount = this.emitToAcceptors(buffer, true); + if (buffer != null) + { + buffer.amount -= this.prevTransferAmount; + + if (buffer.amount <= 0) + { + this.buffer = null; + } + } + } + } + } + + public void clientTick() + { + this.fluidScale = Math.max(this.fluidScale, this.getScale()); + + if (this.didTransfer && this.fluidScale < 1.0F) + { + this.fluidScale = Math.max(this.getScale(), Math.min(1, fluidScale + 0.02F)); + } else if (!this.didTransfer && fluidScale > 0.0F) + { + this.fluidScale = this.getScale(); + + if (this.fluidScale == 0.0F) + { + this.buffer = null; + } + } + } + + public float getScale() + { + if (this.buffer == null || this.getCapacity() == 0) + { + return 0.0F; + } + + return Math.min(1.0F, this.buffer.amount / (float) this.getCapacity()); + } + + public List>> getAcceptors(FluidStack toSend) + { + List>> toReturn = new LinkedList<>(); + + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + return toReturn; + } + + if (this.acceptors == null || this.acceptors.isEmpty()) + { + this.refreshAcceptors(); + } + + List acceptorsCopy = new ArrayList<>(); + acceptorsCopy.addAll(acceptors.keySet()); + + for (BlockPos coords : acceptorsCopy) + { + EnumSet sides = acceptorDirections.get(coords); + if (sides == null || sides.isEmpty()) + { + continue; + } + + TileEntity tile = this.world.getTileEntity(coords); + + if (tile == null) + { + continue; + } + + Map handlers = Maps.newHashMap(); + + IFluidHandler handler; + Fluid fluidToSend = toSend.getFluid(); + for (EnumFacing side : sides) + { + handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); + if (handler != null && handler.fill(new FluidStack(fluidToSend, 1), false) > 0) + { + handlers.put(side, handler); + } + } + + toReturn.add(Pair.of(coords, handlers)); + } + + return toReturn; + } + + @Override + public void refresh() + { + if (this.acceptors != null) + { + this.acceptors.clear(); + } + + try + { + Iterator> it = this.pipes.iterator(); + + while (it.hasNext()) + { + ITransmitter transmitter = it.next(); + TileEntity tileTransmitter = (TileEntity) transmitter; + + if (transmitter == null) + { + it.remove(); + continue; + } + + transmitter.onNetworkChanged(); + + if (tileTransmitter.isInvalid() || tileTransmitter.getWorld() == null) + { + it.remove(); + continue; + } else + { + if (this.world == null) + { + this.world = tileTransmitter.getWorld(); + } + + transmitter.setNetwork(this); + } + } + + updateCapacity(); + clamp(); + } catch (Exception e) + { + GalacticraftCore.logger.error("Failed to refresh liquid pipe network."); + e.printStackTrace(); + } + } + + public void refreshAcceptors() + { + if (this.acceptors == null) + { + this.acceptors = Maps.newHashMap(); + } else + { + this.acceptors.clear(); + } + + try + { + Iterator> it = this.pipes.iterator(); + + while (it.hasNext()) + { + IBufferTransmitter transmitter = it.next(); + TileEntity tile = (TileEntity) transmitter; + + if (transmitter == null || tile.isInvalid() || tile.getWorld() == null) + { + it.remove(); + continue; + } + + if (!transmitter.canTransmit()) + { + continue; + } + + int i = 0; + for (TileEntity acceptor : transmitter.getAdjacentConnections()) + { + if (!(acceptor instanceof IBufferTransmitter) && acceptor != null) + { + EnumFacing facing = EnumFacing.byIndex(i).getOpposite(); + IFluidHandler handler = acceptor.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, facing); + if (handler != null) + { + BlockPos acceptorPos = tile.getPos().offset(facing.getOpposite()); + EnumSet facingSet = this.acceptorDirections.get(acceptorPos); + if (facingSet != null) + { + facingSet.add(facing); + } else + { + facingSet = EnumSet.of(facing); + } + this.acceptors.put(acceptorPos, handler); + this.acceptorDirections.put(acceptorPos, facingSet); + } + } + i++; + } + } + } catch (Exception e) + { + GalacticraftCore.logger.fatal("Failed to refresh liquid acceptors"); + e.printStackTrace(); + } + } + + @Override + public ImmutableSet> getTransmitters() + { + return ImmutableSet.copyOf(this.pipes); + } + + @Override + public FluidNetwork merge(FluidNetwork network) + { + if (network != null && network != this) + { + FluidNetwork newNetwork = new FluidNetwork(Lists.newArrayList(this, network)); + newNetwork.refresh(); + return newNetwork; + } + + return this; + } + + @SuppressWarnings({"unchecked", "unlikely-arg-type"}) + @Override + public void split(IBufferTransmitter splitPoint) + { + if (splitPoint instanceof TileEntity) + { + this.pipes.remove(splitPoint); + + /** + * Loop through the connected blocks and attempt to see if there are + * connections between the two points elsewhere. + */ + TileEntity[] connectedBlocks = splitPoint.getAdjacentConnections(); + + for (TileEntity connectedBlockA : connectedBlocks) + { + if (connectedBlockA instanceof INetworkConnection) + { + for (final TileEntity connectedBlockB : connectedBlocks) + { + if (connectedBlockA != connectedBlockB && connectedBlockB instanceof INetworkConnection) + { + Pathfinder finder = new PathfinderChecker(((TileEntity) splitPoint).getWorld(), (INetworkConnection) connectedBlockB, NetworkType.FLUID, splitPoint); + finder.init(new BlockVec3(connectedBlockA)); + + if (finder.results.size() > 0) + { + /** + * The connections A and B are still intact + * elsewhere. Set all references of wire + * connection into one network. + */ + + for (BlockVec3 node : finder.closedSet) + { + TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).getWorld()); + + if (nodeTile instanceof INetworkProvider) + { + if (nodeTile != splitPoint) + { + ((INetworkProvider) nodeTile).setNetwork(this); + } + } + } + } else + { + /** + * The connections A and B are not connected + * anymore. Give both of them a new network. + */ + FluidNetwork newNetwork = new FluidNetwork(); + + for (BlockVec3 node : finder.closedSet) + { + TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).getWorld()); + + if (nodeTile instanceof IBufferTransmitter) + { + if (nodeTile != splitPoint) + { + newNetwork.pipes.add((IBufferTransmitter) nodeTile); + newNetwork.pipesAdded.add((IBufferTransmitter) nodeTile); + newNetwork.onTransmitterAdded((IBufferTransmitter) nodeTile); + this.pipes.remove(nodeTile); + } + } + } + + newNetwork.refresh(); + newNetwork.register(); + } + } + } + } + } + + if (this.pipes.isEmpty()) + { + this.unregister(); + } else + { + this.updateCapacity(); + } + } + } + + @Override + public String toString() + { + return "FluidNetwork[" + this.hashCode() + "|Pipes:" + this.pipes.size() + "|Acceptors:" + (this.acceptors == null ? 0 : this.acceptors.size()) + "]"; + } + + public static class DelayQueue + { + + public EntityPlayerMP player; + public int delay; + + public DelayQueue(EntityPlayerMP player) + { + this.player = player; + this.delay = 5; + } + + @Override + public int hashCode() + { + return this.player.hashCode(); + } + + @Override + public boolean equals(Object obj) + { + return obj instanceof DelayQueue && ((DelayQueue) obj).player.equals(this.player); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/NetworkHelper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/NetworkHelper.java new file mode 100644 index 00000000..4b258425 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/NetworkHelper.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.fluid; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; + +/** + * A helper class that provides additional useful functions to interact with the + * ElectricityNetwork + * + * @author Calclavia + */ +public class NetworkHelper +{ + + public static EnumSet getDirections(TileEntity tileEntity, NetworkType type) + { + EnumSet possibleSides = EnumSet.noneOf(EnumFacing.class); + + if (tileEntity instanceof IConnector) + { + for (int i = 0; i < 6; i++) + { + EnumFacing direction = EnumFacing.byIndex(i); + if (((IConnector) tileEntity).canConnect(direction, type)) + { + possibleSides.add(direction); + } + } + } + + return possibleSides; + } + + /** + * @param tileEntity - The TileEntity's sides. + * @param approachingDirection - The directions that can be connected. + * @return A list of networks from all specified sides. There will be no + * repeated ElectricityNetworks and it will never return null. + */ + public static Set getNetworksFromMultipleSides(TileEntity tileEntity, EnumSet approachingDirection) + { + final Set connectedNetworks = new HashSet(); + + BlockVec3 tileVec = new BlockVec3(tileEntity); + for (EnumFacing side : EnumFacing.VALUES) + { + if (approachingDirection.contains(side)) + { + TileEntity outputConductor = tileVec.getTileEntityOnSide(tileEntity.getWorld(), side); + IElectricityNetwork electricityNetwork = NetworkHelper.getElectricalNetworkFromTileEntity(outputConductor, side); + + if (electricityNetwork != null) + { + connectedNetworks.add(electricityNetwork); + } + } + } + + return connectedNetworks; + } + + /** + * Tries to find the electricity network based in a tile entity and checks + * to see if it is a conductor. All machines should use this function to + * search for a connecting conductor around it. + * + * @param tileEntity - The TileEntity conductor + * @param approachDirection - The direction you are approaching this wire + * from. + * @return The ElectricityNetwork or null if not found. + */ + public static IElectricityNetwork getElectricalNetworkFromTileEntity(TileEntity tileEntity, EnumFacing approachDirection) + { + if (tileEntity != null) + { + if (tileEntity instanceof INetworkProvider) + { + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(approachDirection.getOpposite(), NetworkType.POWER)) + { + if (((INetworkProvider) tileEntity).getNetwork() instanceof IElectricityNetwork) + { + return (IElectricityNetwork) ((INetworkProvider) tileEntity).getNetwork(); + } + } + } else + { + if (((INetworkProvider) tileEntity).getNetwork() instanceof IElectricityNetwork) + { + return (IElectricityNetwork) ((INetworkProvider) tileEntity).getNetwork(); + } + } + } + } + + return null; + } + + public static FluidNetwork getFluidNetworkFromTile(TileEntity tileEntity, EnumFacing approachDirection) + { + if (tileEntity != null) + { + if (tileEntity instanceof INetworkProvider) + { + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(approachDirection.getOpposite(), NetworkType.FLUID)) + { + if (((INetworkProvider) tileEntity).getNetwork() instanceof FluidNetwork) + { + return (FluidNetwork) ((INetworkProvider) tileEntity).getNetwork(); + } + } + } else + { + if (((INetworkProvider) tileEntity).getNetwork() instanceof FluidNetwork) + { + return (FluidNetwork) ((INetworkProvider) tileEntity).getNetwork(); + } + } + } + } + + return null; + } + +// public static IHydrogenNetwork getHydrogenNetworkFromTileEntity(TileEntity tileEntity, EnumFacing approachDirection) +// { +// if (tileEntity != null) +// { +// if (tileEntity instanceof INetworkProvider) +// { +// if (tileEntity instanceof IConnector) +// { +// if (((IConnector) tileEntity).canConnect(approachDirection.getOpposite(), NetworkType.HYDROGEN)) +// { +// if (((INetworkProvider) tileEntity).getNetwork() instanceof IHydrogenNetwork) +// { +// return (IHydrogenNetwork) ((INetworkProvider) tileEntity).getNetwork(); +// } +// } +// } +// else +// { +// if (((INetworkProvider) tileEntity).getNetwork() instanceof IHydrogenNetwork) +// { +// return (IHydrogenNetwork) ((INetworkProvider) tileEntity).getNetwork(); +// } +// } +// } +// } +// +// return null; +// } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/OxygenPressureProtocol.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/OxygenPressureProtocol.java new file mode 100644 index 00000000..0001aec7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/OxygenPressureProtocol.java @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.fluid; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockEnchantmentTable; +import net.minecraft.block.BlockFarmland; +import net.minecraft.block.BlockGlass; +import net.minecraft.block.BlockGravel; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.BlockSponge; +import net.minecraft.block.BlockStainedGlass; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.util.BlockUtil; +import micdoodle8.mods.galacticraft.core.util.BlockUtil.MultiBlockStateHolder; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class OxygenPressureProtocol +{ + + //public final static Map> nonPermeableBlocks = new HashMap<>(); + public final static List newNonPermeableBlockStateList = new ArrayList<>(); + public final static List nonPermeableBlockList = new ArrayList<>(); + static + { + BlockUtil.getBlockStateHolderList(BlockUtil.getListFromStringArray(ConfigManagerCore.sealableIDs)).forEach(mbsh -> newNonPermeableBlockStateList.add(mbsh)); + newNonPermeableBlockStateList.forEach(mbsh -> nonPermeableBlockList.add(mbsh.getBlock())); + // for (final String s : ConfigManagerCore.sealableIDs) + // { + // try + // { + // BlockTuple bt = ConfigManagerCore.stringToBlock(s, "External Sealable IDs", true); + // if (bt == null) + // { + // continue; + // } + // + // int meta = bt.meta; + // + // if (OxygenPressureProtocol.nonPermeableBlocks.containsKey(bt.block)) + // { + // final ArrayList list = OxygenPressureProtocol.nonPermeableBlocks.get(bt.block); + // if (!list.contains(meta)) + // { + // list.add(meta); + // } else + // { + // GalacticraftCore.logger.info("[config] External Sealable IDs: skipping duplicate entry '" + s + "'."); + // } + // } else + // { + // final ArrayList list = new ArrayList<>(); + // list.add(meta); + // OxygenPressureProtocol.nonPermeableBlocks.put(bt.block, list); + // } + // } catch (final Exception e) + // { + // GalacticraftCore.logger.error("[config] External Sealable IDs: error parsing '" + s + "'. Must be in the form Blockname or BlockName:metadata"); + // } + // } + } + + public static void updateSealerStatus(TileEntityOxygenSealer head) + { + try + { + head.threadSeal = new ThreadFindSeal(head); + } catch (IllegalThreadStateException e) + { + + } + } + + public static void onEdgeBlockUpdated(World world, BlockPos vec) + { + if (ConfigManagerCore.enableSealerEdgeChecks) + { + TickHandlerServer.scheduleNewEdgeCheck(GCCoreUtil.getDimensionID(world), vec); + } + } + + @Deprecated + public static boolean canBlockPassAir(World world, Block block, BlockPos pos, EnumFacing side) + { + return canBlockPassAir(world, world.getBlockState(pos), pos, side); + } + + public static boolean canBlockPassAir(World world, IBlockState state, BlockPos pos, EnumFacing side) + { + Block block = state.getBlock(); + if (block == null) + { + return true; + } + + if (block instanceof IPartialSealableBlock) + { + return !((IPartialSealableBlock) block).isSealed(world, pos, side); + } + + // Check leaves first, because their isOpaqueCube() test depends on + // graphics settings + // (See net.minecraft.block.BlockLeaves.isOpaqueCube()!) + if (block instanceof BlockLeaves) + { + return true; + } + + if (block.isOpaqueCube(state)) + { + return block instanceof BlockGravel || block.getMaterial(state) == Material.CLOTH || block instanceof BlockSponge; + + } + + if (block instanceof BlockGlass || block instanceof BlockStainedGlass) + { + return false; + } + + for (MultiBlockStateHolder mbsh : OxygenPressureProtocol.newNonPermeableBlockStateList) + { + if (mbsh.getBlock().equals(block)) + { + if (mbsh.getBlockstateList().contains(state)) + { + return false; + } + } + } + // Solid but non-opaque blocks, for example special glass + // if (OxygenPressureProtocol.nonPermeableBlocks.containsKey(block)) + // { + // ArrayList metaList = OxygenPressureProtocol.nonPermeableBlocks.get(block); + // if (metaList.contains(Integer.valueOf(-1)) || metaList.contains(state.getBlock().getMetaFromState(state))) + // { + // return false; + // } + // } + + // Half slab seals on the top side or the bottom side according to its + // metadata + if (block instanceof BlockSlab) + { + int meta = state.getBlock().getMetaFromState(state); + return (((side != EnumFacing.DOWN) || ((meta & 8) != 8)) && ((side != EnumFacing.UP) || ((meta & 8) != 0))); + } + + // Farmland etc only seals on the solid underside + if (block instanceof BlockFarmland || block instanceof BlockEnchantmentTable || block instanceof BlockLiquid) + { + return side != EnumFacing.UP; + } + + if (block instanceof BlockPistonBase) + { + if (state.getValue(BlockPistonBase.EXTENDED)) + { + EnumFacing facing = state.getValue(BlockPistonBase.FACING); + return side != facing; + } + return false; + } + + // General case - this should cover any block which correctly implements + // isBlockSolidOnSide + // including most modded blocks - Forge microblocks in particular is + // covered by this. + // ### Any exceptions in mods should implement the IPartialSealableBlock + // interface ### + return !block.isSideSolid(state, world, pos, side.getOpposite()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/ThreadFindSeal.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/ThreadFindSeal.java new file mode 100644 index 00000000..74fa7fae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/ThreadFindSeal.java @@ -0,0 +1,1367 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.fluid; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockEnchantmentTable; +import net.minecraft.block.BlockFarmland; +import net.minecraft.block.BlockGlass; +import net.minecraft.block.BlockGravel; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.BlockSponge; +import net.minecraft.block.BlockStainedGlass; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.util.BlockUtil.MultiBlockStateHolder; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledBlockChange; + +public class ThreadFindSeal +{ + + public AtomicBoolean sealedFinal = new AtomicBoolean(); + public static AtomicBoolean anylooping = new AtomicBoolean(); + public AtomicBoolean looping = new AtomicBoolean(); + + private World world; + private BlockVec3 head; + private boolean sealed; + private List sealers; + private static intBucket[] buckets; + private static int checkedSize; + private int checkCount; + private HashMap sealersAround; + private List currentLayer; + private List airToReplace; + private List fireToReplace; + private List breatheableToReplace; + private List airToReplaceBright; + private List breatheableToReplaceBright; + private List ambientThermalTracked; + private List ambientThermalTrackedBright; + private List otherSealers; + private List torchesToUpdate; + private boolean foundAmbientThermal; + public List leakTrace; + + static + { + buckets = new intBucket[256]; + checkedInit(); + } + + public ThreadFindSeal(TileEntityOxygenSealer sealer) + { + this(sealer.getWorld(), sealer.getPos().up(), sealer.getFindSealChecks(), new ArrayList<>(Collections.singletonList(sealer))); + } + + public ThreadFindSeal(World world, BlockPos head, int checkCount, List sealers) + { + if (ThreadFindSeal.anylooping.getAndSet(true)) + { + return; + } + this.world = world; + this.head = new BlockVec3(head); + this.checkCount = checkCount; + this.sealers = sealers; + this.foundAmbientThermal = false; + checkedClear(); + checkedSize = 0; + this.torchesToUpdate = new LinkedList<>(); + + this.sealersAround = TileEntityOxygenSealer.getSealersAround(world, head, 1024 * 1024); + + // If called by a sealer test the head block and if partiallySealable + // mark its sides done as required + if (!sealers.isEmpty()) + { + if (checkCount > 0) + { + IBlockState headState = this.world.getBlockState(head); + if (!(headState.getBlock().isAir(headState, world, head))) + { + this.canBlockPassAirCheck(headState.getBlock(), this.head, 1); + // reset the checkCount as canBlockPassAirCheck might have + // changed it + this.checkCount = checkCount; + } + } + + this.looping.set(true); + for (TileEntityOxygenSealer eachSealer : sealers) + { + eachSealer.threadSeal = this; + } + +// if (ConfigManagerCore.enableSealerMultithreading) +// { +// new ThreadedFindSeal(); +// } +// else +// { + this.check(); +// } + } else + // If not called by a sealer, it's a breathable air edge check + { + // Run this in the main thread + this.check(); + } + ThreadFindSeal.anylooping.set(false); + } + + // Multi-threaded version of the code for sealer updates (not for edge + // checks). + public class ThreadedFindSeal extends Thread + { + + public ThreadedFindSeal() + { + super("GC Sealer Roomfinder Thread"); + + if (this.isAlive()) + { + this.interrupt(); + } + + // Run this as a separate thread + this.start(); + } + + @Override + public void run() + { + ThreadFindSeal.this.check(); + ThreadFindSeal.anylooping.set(false); + } + } + + public void check() + { + long time1 = System.nanoTime(); + + this.sealed = true; + TileEntity tile = this.head.getTileEntityOnSide(world, EnumFacing.DOWN); + this.foundAmbientThermal = tile instanceof TileEntityOxygenSealer && ((TileEntityOxygenSealer) tile).thermalControlEnabled(); + this.checkedAdd(this.head); + this.currentLayer = new LinkedList<>(); + this.airToReplace = new LinkedList<>(); + this.airToReplaceBright = new LinkedList<>(); + this.ambientThermalTracked = new LinkedList<>(); + this.ambientThermalTrackedBright = new LinkedList<>(); + + if (this.checkCount > 0) + { + this.currentLayer.add(this.head); + if (this.head.x < -29990000 || this.head.z < -29990000 || this.head.x >= 29990000 || this.head.z >= 29990000) + { + IBlockState state = this.head.getBlockState_noChunkLoad(this.world); + if (Blocks.AIR == state.getBlock()) + { + this.airToReplace.add(this.head.clone()); + } else if (state.getBlock() == GCBlocks.brightAir) + { + this.airToReplaceBright.add(this.head.clone()); + } + this.doLayerNearMapEdge(); + } else + { + IBlockState headState = this.head.getBlockStateSafe_noChunkLoad(this.world); + if (Blocks.AIR == headState.getBlock()) + { + this.airToReplace.add(this.head.clone()); + } else if (headState.getBlock() == GCBlocks.brightAir) + { + this.airToReplaceBright.add(this.head.clone()); + } + this.doLayer(); + } + } else + { + this.sealed = false; + } + + long time2 = System.nanoTime(); + + // Can only be properly sealed if there is at least one sealer here (on + // edge check) + if (this.sealers.isEmpty()) + { + this.sealed = false; + } + + if (this.sealed) + { + this.makeSealGood(this.foundAmbientThermal); + this.leakTrace = null; + } else + { + int checkedSave = checkedSize; + checkedClear(); + this.breatheableToReplace = new LinkedList<>(); + this.breatheableToReplaceBright = new LinkedList<>(); + this.fireToReplace = new LinkedList<>(); + this.otherSealers = new LinkedList<>(); + // unseal() will mark breatheableAir blocks for change as it + // finds them, also searches for unchecked sealers + this.currentLayer.clear(); + this.currentLayer.add(this.head); + this.torchesToUpdate.clear(); + if (this.head.x < -29990000 || this.head.z < -29990000 || this.head.x >= 29990000 || this.head.z >= 29990000) + { + this.unsealNearMapEdge(); + } else + { + this.unseal(); + } + + if (!this.otherSealers.isEmpty()) + { + // OtherSealers will have members if the space to be made + // unbreathable actually still has an unchecked sealer in it + List sealersSave = this.sealers; + List torchesSave = this.torchesToUpdate; + List sealersDone = new ArrayList<>(); + sealersDone.addAll(this.sealers); + for (TileEntityOxygenSealer otherSealer : this.otherSealers) + { + // If it hasn't already been counted, need to check the + // other sealer immediately in case it can keep the space + // sealed + if (!sealersDone.contains(otherSealer) && otherSealer.getFindSealChecks() > 0) + { + BlockVec3 newhead = new BlockVec3(otherSealer).translate(0, 1, 0); + this.sealed = true; + this.checkCount = otherSealer.getFindSealChecks(); + this.sealers = new LinkedList<>(); + this.sealers.add(otherSealer); + if (otherSealer.thermalControlEnabled()) + { + foundAmbientThermal = true; + } + checkedClear(); + this.checkedAdd(newhead); + this.currentLayer.clear(); + this.airToReplace.clear(); + this.airToReplaceBright.clear(); + this.torchesToUpdate = new LinkedList<>(); + this.currentLayer.add(newhead.clone()); + if (newhead.x < -29990000 || newhead.z < -29990000 || newhead.x >= 29990000 || newhead.z >= 29990000) + { + this.doLayerNearMapEdge(); + } else + { + this.doLayer(); + } + + // If found a sealer which can still seal the space, it + // should take over as head + if (this.sealed) + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Oxygen Sealer replacing head at x" + this.head.x + " y" + (this.head.y - 1) + " z" + this.head.z); + } + if (!sealersSave.isEmpty()) + { + TileEntityOxygenSealer oldHead = sealersSave.get(0); + if (!this.sealers.contains(oldHead)) + { + this.sealers.add(oldHead); + if (oldHead.thermalControlEnabled()) + { + foundAmbientThermal = true; + } + } + } + this.head = newhead.clone(); + otherSealer.threadSeal = this; + otherSealer.stopSealThreadCooldown = 75 + TileEntityOxygenSealer.countEntities; + checkedSave += checkedSize; + break; + } else + { + sealersDone.addAll(this.sealers); + } + + checkedSave += checkedSize; + } + } + + // Restore sealers to what it was, if this search did not + // result in a seal + if (!this.sealed) + { + this.sealers = sealersSave; + this.torchesToUpdate = torchesSave; + } else + { + // If the second search sealed the area, there may also be + // air or torches to update + this.makeSealGood(foundAmbientThermal); + } + } + checkedSize = checkedSave; + + if (!this.sealed) + { + Block block = this.head.getBlockState(this.world).getBlock(); + if (block == GCBlocks.breatheableAir) + { + this.breatheableToReplace.add(this.head); + } + if (block == GCBlocks.brightBreatheableAir) + { + this.breatheableToReplaceBright.add(this.head); + } + this.makeSealBad(); + } else + { + this.leakTrace = null; + } + } + + // Set any sealers found which are not the head sealer, not to run their + // own seal checks for a while + // (The player can control which is the head sealer in a space by + // enabling just that one and disabling all the others) + TileEntityOxygenSealer headSealer = this.sealersAround.get(this.head.clone().translate(0, -1, 0)); + + // TODO: if multi-threaded, this final code block giving access to the + // sealer tiles needs to be threadsafe + + // If it is sealed, cooldown can be extended as frequent checks are not + // needed + if (headSealer != null) + { + headSealer.stopSealThreadCooldown = 75 + TileEntityOxygenSealer.countEntities; + } + + for (TileEntityOxygenSealer sealer : this.sealers) + { + // Sealers which are not the head sealer: put them on cooldown so + // the inactive ones don't start their own threads and so unseal + // this volume + // and update threadSeal reference of all sealers found (even the + // inactive ones) + if (sealer != headSealer && headSealer != null) + { + sealer.threadSeal = this; + sealer.stopSealThreadCooldown = headSealer.stopSealThreadCooldown + 51; + } + } + + this.sealedFinal.set(this.sealed); + this.looping.set(false); + + if (ConfigManagerCore.enableDebug) + { + long time3 = System.nanoTime(); + float total = (time3 - time1) / 1000000.0F; + float looping = (time2 - time1) / 1000000.0F; + float replacing = (time3 - time2) / 1000000.0F; + GalacticraftCore.logger.info("Oxygen Sealer Check Completed at x" + this.head.x + " y" + this.head.y + " z" + this.head.z); + GalacticraftCore.logger.info(" Sealed: " + this.sealed + " ~ " + this.sealers.size() + " sealers ~ " + (checkedSize - 1) + " blocks"); + GalacticraftCore.logger.info(" Total Time taken: " + String.format("%.2f", total) + "ms ~ " + String.format("%.2f", looping) + " + " + String.format("%.2f", replacing) + ""); + } + } + + private void makeSealGood(boolean ambientThermal) + { + if (!this.airToReplace.isEmpty() || !this.airToReplaceBright.isEmpty() || !ambientThermalTracked.isEmpty() || !ambientThermalTracked.isEmpty()) + { + List changeList = new LinkedList<>(); + Block breatheableAirID = GCBlocks.breatheableAir; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + int metadata = ambientThermal ? 1 : 0; + // TODO: Can we somehow detect only changes in state of + // ambientThermal since last check? tricky... + for (BlockVec3 checkedVec : this.airToReplace) + { + // No block update for performance reasons; deal with unlit + // torches separately + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), breatheableAirID.getStateFromMeta(metadata), 0)); + } + for (BlockVec3 checkedVec : this.airToReplaceBright) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), breatheableAirIDBright.getStateFromMeta(metadata), 0)); + } + for (BlockVec3 checkedVec : this.ambientThermalTracked) + { + if (checkedVec.getBlockMetadata(this.world) != metadata) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), breatheableAirID.getStateFromMeta(metadata), 0)); + } + } + for (BlockVec3 checkedVec : this.ambientThermalTrackedBright) + { + if (checkedVec.getBlockMetadata(this.world) != metadata) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), breatheableAirIDBright.getStateFromMeta(metadata), 0)); + } + } + + TickHandlerServer.scheduleNewBlockChange(GCCoreUtil.getDimensionID(this.world), changeList); + } + if (!this.torchesToUpdate.isEmpty()) + { + TickHandlerServer.scheduleNewTorchUpdate(GCCoreUtil.getDimensionID(this.world), this.torchesToUpdate); + } + } + + private void makeSealBad() + { + if (!this.breatheableToReplace.isEmpty() || !this.breatheableToReplaceBright.isEmpty()) + { + List changeList = new LinkedList<>(); + for (BlockVec3 checkedVec : this.breatheableToReplace) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), Blocks.AIR.getDefaultState(), 0)); + } + for (BlockVec3 checkedVec : this.fireToReplace) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), Blocks.AIR.getDefaultState(), 2)); + } + for (BlockVec3 checkedVec : this.breatheableToReplaceBright) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), GCBlocks.brightAir.getDefaultState(), 0)); + } + TickHandlerServer.scheduleNewBlockChange(GCCoreUtil.getDimensionID(this.world), changeList); + } + if (!this.torchesToUpdate.isEmpty()) + { + TickHandlerServer.scheduleNewTorchUpdate(GCCoreUtil.getDimensionID(this.world), this.torchesToUpdate); + } + } + + private void unseal() + { + // Local variables are fractionally faster than statics + Block breatheableAirID = GCBlocks.breatheableAir; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + Block oxygenSealerID = GCBlocks.oxygenSealer; + Block fireBlock = Blocks.FIRE; + Block airBlock = Blocks.AIR; + Block airBlockBright = GCBlocks.brightAir; + List toReplaceLocal = this.breatheableToReplace; + List toReplaceLocalBright = this.breatheableToReplaceBright; + LinkedList nextLayer = new LinkedList<>(); + World world = this.world; + int side, bits; + + while (this.currentLayer.size() > 0) + { + for (BlockVec3 vec : this.currentLayer) + { + side = 0; + bits = vec.sideDoneBits; + do + { + if ((bits & (1 << side)) == 0) + { + if (!checkedContains(vec, side)) + { + BlockVec3 sideVec = vec.newVecSide(side); + IBlockState state = sideVec.getBlockStateSafe_noChunkLoad(world); + Block block = state == null ? null : state.getBlock(); + + if (block == breatheableAirID) + { + toReplaceLocal.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == breatheableAirIDBright) + { + toReplaceLocalBright.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == fireBlock) + { + this.fireToReplace.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == oxygenSealerID) + { + TileEntityOxygenSealer sealer = this.sealersAround.get(sideVec); + + if (sealer != null && !this.sealers.contains(sealer)) + { + if (side == 0) + { + // Accessing the vent side of the + // sealer, so add it + this.otherSealers.add(sealer); + checkedAdd(sideVec); + } + // if side is not 0, do not add to checked + // so can be rechecked from other sides + } else + { + checkedAdd(sideVec); + } + } else + { + if (block != null && block != airBlock && block != airBlockBright) + { + // This test applies any necessary + // checkedAdd(); + if (this.canBlockPassAirCheck(block, sideVec, side)) + { + // Look outbound through partially + // sealable blocks in case there is + // breatheableAir to clear beyond + nextLayer.add(sideVec); + } + } else + { + if (state != null) + checkedAdd(sideVec); + } + } + } + } + side++; + } while (side < 6); + } + + // Set up the next layer as current layer for the while loop + this.currentLayer = nextLayer; + nextLayer = new LinkedList<>(); + } + } + + /** + * Literally the only difference from unseal() should be this: Block id = + * sideVec.getBlockID_noChunkLoad(world); + * + * In this code, there is a map edge check on the x, z coordinates (outside + * map edge at 30,000,000 blocks?) This check is skipped in the "safe" + * version of the same code, for higher performance because doing this check + * 50000 times when looking at blocks around a sealer at spawn is obviously + * dumb + */ + private void unsealNearMapEdge() + { + // Local variables are fractionally faster than statics + Block breatheableAirID = GCBlocks.breatheableAir; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + Block oxygenSealerID = GCBlocks.oxygenSealer; + Block fireBlock = Blocks.FIRE; + Block airBlock = Blocks.AIR; + Block airBlockBright = GCBlocks.brightAir; + List toReplaceLocal = this.breatheableToReplace; + LinkedList nextLayer = new LinkedList<>(); + World world = this.world; + int side, bits; + + while (this.currentLayer.size() > 0) + { + for (BlockVec3 vec : this.currentLayer) + { + side = 0; + bits = vec.sideDoneBits; + do + { + if ((bits & (1 << side)) == 0) + { + if (!checkedContains(vec, side)) + { + BlockVec3 sideVec = vec.newVecSide(side); + IBlockState state = sideVec.getBlockState_noChunkLoad(world); + Block block = state == null ? null : state.getBlock(); + + if (block == breatheableAirID) + { + toReplaceLocal.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == breatheableAirIDBright) + { + this.breatheableToReplaceBright.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == fireBlock) + { + this.fireToReplace.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == oxygenSealerID) + { + TileEntityOxygenSealer sealer = this.sealersAround.get(sideVec); + + if (sealer != null && !this.sealers.contains(sealer)) + { + if (side == 0) + { + // Accessing the vent side of the + // sealer, so add it + this.otherSealers.add(sealer); + checkedAdd(sideVec); + } + // if side is not 0, do not add to checked + // so can be rechecked from other sides + } else + { + checkedAdd(sideVec); + } + } else + { + if (block != null && block != airBlock && block != airBlockBright) + { + // This test applies any necessary + // checkedAdd(); + if (this.canBlockPassAirCheck(block, sideVec, side)) + { + // Look outbound through partially + // sealable blocks in case there is + // breatheableAir to clear beyond + nextLayer.add(sideVec); + } + } else + { + if (block != null) + checkedAdd(sideVec); + } + } + } + } + side++; + } while (side < 6); + } + + // Set up the next layer as current layer for the while loop + this.currentLayer = nextLayer; + nextLayer = new LinkedList<>(); + } + } + + private void doLayer() + { + // Local variables are fractionally faster than statics + Block breatheableAirID = GCBlocks.breatheableAir; + Block airID = Blocks.AIR; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + Block airIDBright = GCBlocks.brightAir; + Block oxygenSealerID = GCBlocks.oxygenSealer; + LinkedList nextLayer = new LinkedList<>(); + World world = this.world; + int side, bits; + + while (this.sealed && this.currentLayer.size() > 0) + { + for (BlockVec3 vec : this.currentLayer) + { + // This is for side = 0 to 5 - but using do...while() is + // fractionally quicker + side = 0; + bits = vec.sideDoneBits; + do + { + // Skip the side which this was entered from + // This is also used to skip looking on the solid sides of + // partially sealable blocks + if ((bits & (1 << side)) == 0) + { + // The sides 0 to 5 correspond with the EnumFacings + // but saves a bit of time not to call EnumFacing + + if (!checkedContains(vec, side)) + { + BlockVec3 sideVec = vec.newVecSide(side); + if (this.checkCount > 0) + { + this.checkCount--; + + IBlockState state = sideVec.getBlockStateSafe_noChunkLoad(world); + Block block = state == null ? null : state.getBlock(); + // The most likely case + if (block == breatheableAirID) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.ambientThermalTracked.add(sideVec); + } else if (block == airID) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.airToReplace.add(sideVec); + } else if (block == breatheableAirIDBright) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.ambientThermalTrackedBright.add(sideVec); + } else if (block == airIDBright) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.airToReplaceBright.add(sideVec); + } else if (block == null) + { + // Broken through to the void or the + // stratosphere (above y==255) - set + // unsealed and abort + this.checkCount = 0; + this.sealed = false; + return; + } else if (block == oxygenSealerID) + { + TileEntityOxygenSealer sealer = this.sealersAround.get(sideVec); + + if (sealer != null && !this.sealers.contains(sealer)) + { + if (side == 0) + { + checkedAdd(sideVec); + this.sealers.add(sealer); + if (sealer.thermalControlEnabled()) + { + foundAmbientThermal = true; + } + this.checkCount += sealer.getFindSealChecks(); + } + // if side != 0, no checkedAdd() - + // allows this sealer to be checked + // again from other sides + } + } else if (this.canBlockPassAirCheck(block, sideVec, side)) + { + nextLayer.add(sideVec); + } + // If the chunk was unloaded, + // BlockVec3.getBlockID returns Blocks.bedrock + // which is a solid block, so the loop will + // treat that as a sealed edge + // and not iterate any further in that direction + } + // the if (this.isSealed) check here is unnecessary + // because of the returns + else + { + IBlockState state = sideVec.getBlockStateSafe_noChunkLoad(this.world); + Block block = state == null ? null : state.getBlock(); + // id == null means the void or height y>255, + // both + // of which are unsealed obviously + if (block == null || block == airID || block == breatheableAirID || block == airIDBright || block == breatheableAirIDBright + || this.canBlockPassAirCheck(block, sideVec, side)) + { + this.sealed = false; + if (this.sealers.size() > 0) + { + vec.sideDoneBits = side << 6; + traceLeak(vec); + } + return; + } + } + } + } + side++; + } while (side < 6); + } + + // Is there a further layer of air/permeable blocks to test? + this.currentLayer = nextLayer; + nextLayer = new LinkedList<>(); + } + } + + /** + * Again, literally the only difference from doLayer() should be these two + * lines: Block id = sideVec.getBlockID_noChunkLoad(world); + * + * In this code, there is a map edge check on the x, z coordinates (outside + * map edge at 30,000,000 blocks?) This check is skipped in the "safe" + * version of the same code, for higher performance because doing this check + * 50000 times when looking at blocks around a sealer at spawn is obviously + * dumb + */ + private void doLayerNearMapEdge() + { + // Local variables are fractionally faster than statics + Block breatheableAirID = GCBlocks.breatheableAir; + Block airID = Blocks.AIR; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + Block airIDBright = GCBlocks.brightAir; + Block oxygenSealerID = GCBlocks.oxygenSealer; + LinkedList nextLayer = new LinkedList<>(); + World world = this.world; + int side, bits; + + while (this.sealed && this.currentLayer.size() > 0) + { + for (BlockVec3 vec : this.currentLayer) + { + // This is for side = 0 to 5 - but using do...while() is + // fractionally quicker + side = 0; + bits = vec.sideDoneBits; + do + { + // Skip the side which this was entered from + // This is also used to skip looking on the solid sides of + // partially sealable blocks + if ((bits & (1 << side)) == 0) + { + // The sides 0 to 5 correspond with the EnumFacings + // but saves a bit of time not to call EnumFacing + + if (!checkedContains(vec, side)) + { + BlockVec3 sideVec = vec.newVecSide(side); + if (this.checkCount > 0) + { + this.checkCount--; + + IBlockState state = sideVec.getBlockState_noChunkLoad(world); + Block block = state == null ? null : state.getBlock(); + // The most likely case + if (block == breatheableAirID) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.ambientThermalTracked.add(sideVec); + } else if (block == airID) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.airToReplace.add(sideVec); + } else if (block == breatheableAirIDBright) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.ambientThermalTrackedBright.add(sideVec); + } else if (block == airIDBright) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.airToReplaceBright.add(sideVec); + } else if (block == null) + { + // Broken through to the void or the + // stratosphere (above y==255) - set + // unsealed and abort + this.checkCount = 0; + this.sealed = false; + return; + } else if (block == oxygenSealerID) + { + TileEntityOxygenSealer sealer = this.sealersAround.get(sideVec); + + if (sealer != null && !this.sealers.contains(sealer)) + { + if (side == 0) + { + checkedAdd(sideVec); + this.sealers.add(sealer); + if (sealer.thermalControlEnabled()) + { + foundAmbientThermal = true; + } + this.checkCount += sealer.getFindSealChecks(); + } + // if side != 0, no checkedAdd() - + // allows this sealer to be checked + // again from other sides + } + } else if (this.canBlockPassAirCheck(block, sideVec, side)) + { + nextLayer.add(sideVec); + } + // If the chunk was unloaded, + // BlockVec3.getBlockID returns Blocks.bedrock + // which is a solid block, so the loop will + // treat that as a sealed edge + // and not iterate any further in that direction + } + // the if (this.isSealed) check here is unnecessary + // because of the returns + else + { + IBlockState state = sideVec.getBlockState_noChunkLoad(this.world); + Block block = state == null ? null : state.getBlock(); + // id == null means the void or height y>255, + // both + // of which are unsealed obviously + if (block == null || block == airID || block == breatheableAirID || block == airIDBright || block == breatheableAirIDBright + || this.canBlockPassAirCheck(block, sideVec, side)) + { + this.sealed = false; + if (this.sealers.size() > 0) + { + vec.sideDoneBits = side << 6; + traceLeak(vec); + } + return; + } + } + } + } + side++; + } while (side < 6); + } + + // Is there a further layer of air/permeable blocks to test? + this.currentLayer = nextLayer; + nextLayer = new LinkedList<>(); + } + } + + private void checkedAdd(BlockVec3 vec) + { + int dx = this.head.x - vec.x; + int dz = this.head.z - vec.z; + if (dx < -8191 || dx > 8192) + return; + if (dz < -8191 || dz > 8192) + return; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + bucket.add(vec.y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) + ((vec.sideDoneBits & 0x1C0) << 18) << 4)); + } + + /** + * Currently unused - the sided implementation is used instead + */ + private boolean checkedContains(BlockVec3 vec) + { + int dx = this.head.x - vec.x; + int dz = this.head.z - vec.z; + if (dx < -8191 || dx > 8192) + return true; + if (dz < -8191 || dz > 8192) + return true; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + return bucket.contains(vec.y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + private boolean checkedContains(BlockVec3 vec, int side) + { + int y = vec.y; + int dx = this.head.x - vec.x; + int dz = this.head.z - vec.z; + switch (side) + { + case 0: + y--; + if (y < 0) + return false; + break; + case 1: + y++; + if (y > 255) + return false; + break; + case 2: + dz++; + break; + case 3: + dz--; + break; + case 4: + dx++; + break; + case 5: + dx--; + } + if (dx < -8191 || dx > 8192) + return true; + if (dz < -8191 || dz > 8192) + return true; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + return bucket.contains(y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + private BlockVec3 checkedContainsTrace(int x, int y, int z) + { + int dx = this.head.x - x; + int dz = this.head.z - z; + if (dx < -8191 || dx > 8192) + return null; + if (dz < -8191 || dz > 8192) + return null; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + int side = bucket.getMSB4shifted(y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + if (side >= 0) + { + BlockVec3 vec = new BlockVec3(x, y, z); + vec.sideDoneBits = side; + return vec; + } + return null; + } + + private static void checkedInit() + { + for (int i = 0; i < 256; i++) + { + buckets[i] = new intBucket(); + } + } + + private static void checkedClear() + { + for (int i = 0; i < 256; i++) + { + buckets[i].clear(); + } + checkedSize = 0; + } + + public List checkedAll() + { + List list = new LinkedList<>(); + int x = head.x; + int z = head.z; + for (int i = 0; i < 256; i++) + { + int size = this.buckets[i].size(); + if (size == 0) + continue; + int ddx = i >> 4; + int ddz = i & 15; + int[] ints = this.buckets[i].contents(); + for (int j = 0; j < size; j++) + { + int k = ints[j]; + int y = k & 255; + k >>= 4; + int dx = (k & 0x3FF0) + ddx; + int dz = ((k >> 10) & 0x3FF0) + ddz; + if (dx > 0x2000) + dx -= 0x4000; + if (dz > 0x2000) + dz -= 0x4000; + list.add(new BlockPos(x + dx, y, z + dz)); + } + } + return list; + } + + private void traceLeak(BlockVec3 tracer) + { + ArrayList route = new ArrayList<>(); + BlockVec3 start = this.head.clone().translate(0, 1, 0); + int count = 0; + int x = tracer.x; + int y = tracer.y; + int z = tracer.z; + while (!tracer.equals(start) && count < 90) + { + route.add(tracer); + switch (tracer.sideDoneBits >> 6) + { + case 1: + y--; + break; + case 0: + y++; + break; + case 3: + z--; + break; + case 2: + z++; + break; + case 5: + x--; + break; + case 4: + x++; + break; + } + tracer = checkedContainsTrace(x, y, z); + if (tracer == null) + { + return; + } + count++; + } + + this.leakTrace = new ArrayList<>(); + this.leakTrace.add(start); + for (int j = route.size() - 1; j >= 0; j--) + { + this.leakTrace.add(route.get(j)); + } + } + + private boolean canBlockPassAirCheck(Block block, BlockVec3 vec, int side) + { + if (block instanceof IPartialSealableBlock) + { + EnumFacing testSide = EnumFacing.byIndex(side); + IPartialSealableBlock blockPartial = (IPartialSealableBlock) block; + BlockPos vecPos = new BlockPos(vec.x, vec.y, vec.z); + if (blockPartial.isSealed(this.world, vecPos, testSide)) + { + // If a partial block checks as solid, allow it to be tested + // again from other directions + // This won't cause an endless loop, because the block won't + // be included in nextLayer if it checks as solid + this.checkCount--; + return false; + } + + // Find the solid sides so they don't get iterated into, when doing + // the next layer + for (EnumFacing face : EnumFacing.VALUES) + { + if (face == testSide) + { + continue; + } + if (blockPartial.isSealed(this.world, vecPos, face)) + { + vec.setSideDone(face.getIndex() ^ 1); + } + } + checkedAdd(vec); + return true; + } + + // Check leaves first, because their isOpaqueCube() test depends on + // graphics settings + // (See net.minecraft.block.BlockLeaves.isOpaqueCube()!) + if (block instanceof BlockLeaves) + { + checkedAdd(vec); + return true; + } + + IBlockState state = world.getBlockState(vec.toBlockPos()); + if (block.isOpaqueCube(state)) + { + checkedAdd(vec); + // Gravel, wool and sponge are porous + return block instanceof BlockGravel || block.getMaterial(state) == Material.CLOTH || block instanceof BlockSponge; + + } + + if (block instanceof BlockGlass || block instanceof BlockStainedGlass) + { + checkedAdd(vec); + return false; + } + + for (MultiBlockStateHolder mbsh : OxygenPressureProtocol.newNonPermeableBlockStateList) + { + if (mbsh.getBlock().equals(block)) + { + if (mbsh.getBlockstateList().contains(state)) + { + checkedAdd(vec); + return false; + } + } + } + + // Solid but non-opaque blocks, for example special glass + // if (OxygenPressureProtocol.nonPermeableBlocks.containsKey(block)) + // { + // ArrayList metaList = OxygenPressureProtocol.nonPermeableBlocks.get(block); + // if (metaList.contains(Integer.valueOf(-1)) || metaList.contains(vec.getBlockMetadata(this.world))) + // { + // checkedAdd(vec); + // return false; + // } + // } + + if (block instanceof BlockUnlitTorch) + { + this.torchesToUpdate.add(vec); + checkedAdd(vec); + return true; + } + + // Half slab seals on the top side or the bottom side according to its + // metadata + if (block instanceof BlockSlab) + { + boolean isTopSlab = (vec.getBlockMetadata(this.world) & 8) == 8; + // Looking down onto a top slab or looking up onto a bottom slab + if (side == 0 && isTopSlab || side == 1 && !isTopSlab) + { + // Sealed from that solid side but allow other sides still to be + // checked + this.checkCount--; + return false; + } + // Not sealed + vec.setSideDone(isTopSlab ? 1 : 0); + checkedAdd(vec); + return true; + } + + // Farmland etc only seals on the solid underside + if (block instanceof BlockFarmland || block instanceof BlockEnchantmentTable || block instanceof BlockLiquid) + { + if (side == 1) + { + // Sealed from the underside but allow other sides still to be + // checked + this.checkCount--; + return false; + } + // Not sealed + vec.setSideDone(0); + checkedAdd(vec); + return true; + } + + if (block instanceof BlockPistonBase) + { + BlockPistonBase piston = (BlockPistonBase) block; + if (state.getValue(BlockPistonBase.EXTENDED)) + { + int facing = state.getValue(BlockPistonBase.FACING).getIndex(); + if (side == facing) + { + this.checkCount--; + return false; + } + vec.setSideDone(facing ^ 1); + checkedAdd(vec); + return true; + } + checkedAdd(vec); + return false; + } + + // General case - this should cover any block which correctly implements + // isBlockSolidOnSide + // including most modded blocks - Forge microblocks in particular is + // covered by this. + // ### Any exceptions in mods should implement the IPartialSealableBlock + // interface ### + if (block.isSideSolid(state, this.world, vec.toBlockPos(), EnumFacing.byIndex(side ^ 1))) + { + // Solid on all sides + if (block.getMaterial(state).blocksMovement() && block.isFullCube(state)) + { + checkedAdd(vec); + return false; + } + // Sealed from this side but allow other sides still to be checked + this.checkCount--; + return false; + } + + // Easy case: airblock, return without checking other sides + if (block.getMaterial(state) == Material.AIR) + { + checkedAdd(vec); + return true; + } + + // Not solid on that side. + // Look to see if there is any other side which is solid in which case a + // check will not be needed next time + for (int i = 0; i < 6; i++) + { + if (i == (side ^ 1)) + { + continue; + } + if (block.isSideSolid(state, this.world, new BlockPos(vec.x, vec.y, vec.z), EnumFacing.byIndex(i))) + { + vec.setSideDone(i); + } + } + + // Not solid from this side, so this is not sealed + checkedAdd(vec); + return true; + } + + public static class intBucket + { + + private int maxSize = 64; // default size + private int size = 0; + private int[] table = new int[maxSize]; + + public void add(int i) + { + if (this.contains(i)) + return; + + if (size >= maxSize) + { + int[] newTable = new int[maxSize + maxSize]; + System.arraycopy(table, 0, newTable, 0, maxSize); + table = newTable; + maxSize += maxSize; + } + table[size] = i; + size++; + checkedSize++; + } + + public boolean contains(int test) + { + for (int i = size - 1; i >= 0; i--) + { + if ((table[i] & 0xFFFFFFF) == test) + return true; + } + return false; + } + + public int getMSB4shifted(int test) + { + for (int i = size - 1; i >= 0; i--) + { + if ((table[i] & 0xFFFFFFF) == test) + { + return (table[i] & 0xF0000000) >> 22; + } + } + return -1; + } + + public void clear() + { + size = 0; + } + + public int size() + { + return size; + } + + public int[] contents() + { + return table; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggy.java new file mode 100644 index 00000000..9de41e17 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggy.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerBuggy extends Container +{ + + private final IInventory lowerChestInventory; + private final IInventory spaceshipInv; + + public ContainerBuggy(IInventory par1IInventory, IInventory par2IInventory, int type, EntityPlayer player) + { + this.lowerChestInventory = par1IInventory; + this.spaceshipInv = par2IInventory; + par2IInventory.openInventory(player); + + int var4; + int var5; + + if (type != 0) + { + for (var4 = 0; var4 < type * 2; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.spaceshipInv, var5 + var4 * 9, 8 + var5 * 18, 50 + var4 * 18)); + } + } + } + + for (var4 = 0; var4 < 3; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var5 + var4 * 9 + 9, 8 + var5 * 18, 49 + var4 * 18 + 14 + type * 36)); + } + } + + for (var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var4, 8 + var4 * 18, 107 + 14 + type * 36)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.spaceshipInv.isUsableByPlayer(entityPlayer); + } + + /** + * Called when a player shift-clicks on a slot. You must override this or + * you will crash when someone does that. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot var4 = (Slot) this.inventorySlots.get(par2); + final int b = this.inventorySlots.size() - 36; + + if (var4 != null && var4.getHasStack()) + { + final ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 < b) + { + if (!this.mergeItemStack(var5, b, b + 36, true)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 0, b, false)) + { + return ItemStack.EMPTY; + } + + if (var5.getCount() == 0) + { + var4.putStack(ItemStack.EMPTY); + } else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + /** + * Callback for when the crafting gui is closed. + */ + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + this.lowerChestInventory.closeInventory(entityPlayer); + } + + /** + * Return this chest container's lower chest inventory. + */ + public IInventory getLowerChestInventory() + { + return this.lowerChestInventory; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggyBench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggyBench.java new file mode 100644 index 00000000..26a0e5d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggyBench.java @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class ContainerBuggyBench extends Container +{ + + public InventoryBuggyBench craftMatrix = new InventoryBuggyBench(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerBuggyBench(InventoryPlayer par1InventoryPlayer, BlockPos pos, EntityPlayer player) + { + final int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 79 + change)); + int var6; + int var7; + + // Body + for (var6 = 0; var6 < 4; ++var6) + { + for (var7 = 0; var7 < 3; ++var7) + { + this.addSlotToContainer(new SlotBuggyBench(this.craftMatrix, var7 * 4 + var6 + 1, 39 + var7 * 18, 14 + var6 * 18 + change, pos, par1InventoryPlayer.player)); + } + } + + for (var6 = 0; var6 < 2; ++var6) + { + for (var7 = 0; var7 < 2; ++var7) + { + this.addSlotToContainer(new SlotBuggyBench(this.craftMatrix, var7 * 2 + var6 + 13, 21 + var7 * 72, 14 + var6 * 54 + change, pos, par1InventoryPlayer.player)); + } + } + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotBuggyBench(this.craftMatrix, 17 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 111 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack slot = this.craftMatrix.removeStackFromSlot(var2); + + if (!slot.isEmpty()) + { + entityPlayer.entityDropItem(slot, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtil.findMatchingBuggy(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = (Slot) this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < b - 36) + { + if (!this.mergeItemStack(var4, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 0) + { + slot.onSlotChange(var4, var2); + } + } else + { + Item i = var4.getItem(); + if (i == GCItems.heavyPlatingTier1 || i == GCItems.partBuggy) + { + for (int j = 1; j < 20; j++) + { + if (((Slot) this.inventorySlots.get(j)).isItemValid(var4)) + { + this.mergeOneItem(var4, j, j + 1, false); + } + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(var4, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (!this.mergeItemStack(var4, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onSlotChanged(); + slot.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (par1ItemStack.getCount() > 0) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCargoLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCargoLoader.java new file mode 100644 index 00000000..b33f21ef --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCargoLoader.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.tile.ILockable; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; + +public class ContainerCargoLoader extends Container +{ + + private TileBaseElectricBlock tileEntity; + private boolean locked; + + public ContainerCargoLoader(InventoryPlayer par1InventoryPlayer, IInventory cargoLoader) + { + this.tileEntity = (TileBaseElectricBlock) cargoLoader; + if (tileEntity instanceof ILockable) + { + this.locked = ((ILockable) tileEntity).getLocked(); + } + + this.addSlotToContainer(new SlotSpecific(cargoLoader, 0, 10, 27, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 2; ++var6) + { + for (var7 = 0; var7 < 7; ++var7) + { + this.addSlotToContainer(new Slot(cargoLoader, var7 + var6 * 7 + 1, 38 + var7 * 18, 27 + var6 * 18)); + } + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 124 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 66 + 116)); + } + } + + @Override + public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player) + { + if (this.locked && slotId > 0 && slotId < 15) + { + return ItemStack.EMPTY; + } + return super.slotClick(slotId, dragType, clickTypeIn, player); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par2); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var5 = slot.getStack(); + var3 = var5.copy(); + + if (par2 < 15) + { + if ((this.locked && par2 > 0) || !this.mergeItemStack(var5, 15, 51, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var5.getItem())) + { + if (!this.mergeItemStack(var5, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (par2 < 42) + { + if ((this.locked || !this.mergeItemStack(var5, 1, 15, false)) && !this.mergeItemStack(var5, 42, 51, false)) + { + return ItemStack.EMPTY; + } + } else if ((this.locked || !this.mergeItemStack(var5, 1, 15, false)) && !this.mergeItemStack(var5, 15, 42, false)) + { + return ItemStack.EMPTY; + } + } + + if (var5.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var5.getCount() == var3.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var5); + } + + return var3; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCircuitFabricator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCircuitFabricator.java new file mode 100644 index 00000000..e66f8e71 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCircuitFabricator.java @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotFurnaceOutput; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; + +public class ContainerCircuitFabricator extends Container +{ + + private TileEntityCircuitFabricator tileEntity; + + public ContainerCircuitFabricator(InventoryPlayer playerInv, TileEntityCircuitFabricator tileEntity) + { + this.tileEntity = tileEntity; + + // Energy slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 6, 69, IItemElectric.class)); + + // Diamond + ArrayList slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(0); + this.addSlotToContainer(new SlotSpecific(tileEntity, 1, 15, 17, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + + // Silicon + slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(1); + this.addSlotToContainer(new SlotSpecific(tileEntity, 2, 74, 46, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(2); + this.addSlotToContainer(new SlotSpecific(tileEntity, 3, 74, 64, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + + // Redstone + slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(3); + this.addSlotToContainer(new SlotSpecific(tileEntity, 4, 122, 46, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + + // Optional + slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(4); + this.addSlotToContainer(new SlotSpecific(tileEntity, 5, 145, 20, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + + // Smelting result + this.addSlotToContainer(new SlotFurnaceOutput(playerInv.player, tileEntity, 6, 152, 86)); + + int slot; + + for (slot = 0; slot < 3; ++slot) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(playerInv, var4 + slot * 9 + 9, 8 + var4 * 18, 110 + slot * 18)); + } + } + + for (slot = 0; slot < 9; ++slot) + { + this.addSlotToContainer(new Slot(playerInv, slot, 8 + slot * 18, 168)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + super.onCraftMatrixChanged(par1IInventory); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < b - 36) + { + if (!this.mergeItemStack(var4, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 6) + { + slot.onSlotChange(var4, var2); + } + } else + { + Item i = var4.getItem(); + if (EnergyUtil.isElectricItem(i)) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (i == Items.DIAMOND) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (this.isSilicon(var4)) + { + if (!this.mergeEven(var4, 2, 4)) + { + return ItemStack.EMPTY; + } + } else if (i == Items.REDSTONE) + { + if (!this.mergeItemStack(var4, 4, 5, false)) + { + return ItemStack.EMPTY; + } + } else if (i == Items.REPEATER || i == new ItemStack(Blocks.REDSTONE_TORCH).getItem() || i == Items.DYE && i.getDamage(var4) == 4) + { + if (!this.mergeItemStack(var4, 5, 6, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < b - 9) + { + if (!this.mergeItemStack(var4, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } + + private boolean mergeEven(ItemStack stack, int a, int b) + { + List acceptSlots = new LinkedList<>(); + List acceptQuantity = new LinkedList<>(); + int minQuantity = 64; + int acceptTotal = 0; + for (int i = a; i < b; i++) + { + Slot slot = (Slot) this.inventorySlots.get(i); + + if (slot != null) + { + ItemStack target = slot.getStack(); + if (matchingStacks(stack, target)) + { + acceptSlots.add(slot); + int availSpace = stack.getMaxStackSize() - target.getCount(); + acceptQuantity.add(availSpace); + acceptTotal += availSpace; + if (availSpace < minQuantity) + minQuantity = availSpace; + } + } + } + + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + if (target.isEmpty()) + { + target = stack.copy(); + target.setCount(1); + slot.putStack(target); + stack.shrink(1); + if (stack.isEmpty()) + { + return false; + } + } + } + + // The stack more than exceeds what the crafting inventory requires + if (stack.getCount() >= acceptTotal) + { + if (acceptTotal == 0) + return false; + + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + stack.shrink(target.getMaxStackSize() - target.getCount()); + target.setCount(target.getMaxStackSize()); + slot.onSlotChanged(); + } + return true; + } + + int uneven = 0; + for (int q : acceptQuantity) + { + uneven += q - minQuantity; + } + + // Use the whole stack to try to even up the neediest slots + if (stack.getCount() <= uneven) + { + do + { + Slot neediest = null; + int smallestStack = 64; + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + if (target.getCount() < smallestStack) + { + smallestStack = target.getCount(); + neediest = slot; + } + } + neediest.getStack().grow(1); + stack.shrink(1); + } while (!stack.isEmpty()); + for (Slot slot : acceptSlots) + { + slot.onSlotChanged(); + } + return true; + } + + // Use some of the stack to even things up + if (uneven > 0) + { + int targetSize = stack.getMaxStackSize() - minQuantity; + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + stack.shrink(targetSize - target.getCount()); + acceptTotal -= targetSize - target.getCount(); + target.setCount(targetSize); + slot.onSlotChanged(); + } + } + + // Spread the remaining stack over all slots evenly + int average = stack.getCount() / acceptSlots.size(); + int modulus = stack.getCount() - average * acceptSlots.size(); + for (Slot slot : acceptSlots) + { + if (slot != null) + { + ItemStack target = slot.getStack(); + int transfer = average; + if (modulus > 0) + { + transfer++; + modulus--; + } + if (transfer > stack.getCount()) + transfer = stack.getCount(); + stack.shrink(transfer); + target.grow(transfer); + if (target.getCount() > target.getMaxStackSize()) + { + GalacticraftCore.logger.info("Shift clicking - slot " + slot.slotNumber + " wanted more than it could accept:" + target.getCount()); + stack.grow(target.getCount() - target.getMaxStackSize()); + target.setCount(target.getMaxStackSize()); + } + slot.onSlotChanged(); + if (stack.isEmpty()) + break; + } + } + + return true; + } + + private boolean isSilicon(ItemStack test) + { + for (ItemStack stack : CircuitFabricatorRecipes.slotValidItems.get(1)) + { + if (stack.isItemEqual(test)) + return true; + } + return false; + } + + private boolean matchingStacks(ItemStack stack, ItemStack target) + { + return target.isEmpty() || target.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == target.getMetadata()) && ItemStack.areItemStackTagsEqual(stack, target) + && (target.isStackable() && target.getCount() < target.getMaxStackSize()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCoalGenerator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCoalGenerator.java new file mode 100644 index 00000000..02314a20 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCoalGenerator.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; + +public class ContainerCoalGenerator extends Container +{ + + private TileEntityCoalGenerator tileEntity; + + public ContainerCoalGenerator(InventoryPlayer inventoryPlayer, TileEntityCoalGenerator tileEntity) + { + this.tileEntity = tileEntity; + this.addSlotToContainer(new SlotCoalGenerator(tileEntity, 0, 33, 34)); + int i; + + for (i = 0; i < 3; ++i) + { + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(inventoryPlayer, k + i * 9 + 9, 8 + k * 18, 84 + i * 18)); + } + } + + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int index) + { + ItemStack stack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack var4 = slot.getStack(); + stack = var4.copy(); + + if (index != 0) + { + if (var4.getItem() == Items.COAL) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (index >= 28) + { + if (!this.mergeItemStack(var4, 1, 28, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 28, 37, false)) + { + return ItemStack.EMPTY; + } + + } else if (!this.mergeItemStack(var4, 1, 37, false)) + { + return ItemStack.EMPTY; + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == stack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return stack; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCrafting.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCrafting.java new file mode 100644 index 00000000..fe3c679e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCrafting.java @@ -0,0 +1,378 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class ContainerCrafting extends Container +{ + + public TileEntityCrafting tileEntity; + public PersistantInventoryCrafting craftMatrix; + public IInventory craftResult = new InventoryCraftResult(); + private NonNullList memory = NonNullList.withSize(9, ItemStack.EMPTY); + + public ContainerCrafting(InventoryPlayer playerInventory, IInventory tile) + { + this.tileEntity = (TileEntityCrafting) tile; + this.craftMatrix = tileEntity.craftMatrix; + this.craftMatrix.eventHandler = this; + this.addSlotToContainer(new SlotCraftingMemory(playerInventory.player, this.craftMatrix, this.craftResult, 0, 124, 33, this.tileEntity)); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + this.addSlotToContainer(new Slot(this.craftMatrix, j + i * 3, 30 + j * 18, 17 + i * 18)); + } + } + + for (int k = 0; k < 3; ++k) + { + for (int i1 = 0; i1 < 9; ++i1) + { + this.addSlotToContainer(new Slot(playerInventory, i1 + k * 9 + 9, 8 + i1 * 18, 84 + k * 18)); + } + } + + for (int l = 0; l < 9; ++l) + { + this.addSlotToContainer(new Slot(playerInventory, l, 8 + l * 18, 142)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public NonNullList getInventory() + { + NonNullList list = NonNullList.create(); + + for (int i = 0; i < this.inventorySlots.size(); ++i) + { + list.add(this.inventorySlots.get(i).getStack()); + } + + // Override this method to trick vanilla networking into carrying our + // memory at end of its packets + for (int i = 0; i < 9; i++) + list.add(this.tileEntity.memory.get(i)); + + return list; + } + + @Override + public void setAll(List list) + { + for (int i = 0; i < list.size(); ++i) + { + if (i < 46) + this.getSlot(i).putStack(list.get(i)); + else if (i < 55) + // Read memory clientside from the end of the vanilla packet, + // see getInventory() + this.tileEntity.memory.set(i - 46, list.get(i)); + } + } + + /** + * Callback for when the crafting matrix is changed. + */ + @Override + public void onCraftMatrixChanged(IInventory inventoryIn) + { + this.craftResult.setInventorySlotContents(0, CraftingManager.findMatchingResult(this.craftMatrix, this.tileEntity.getWorld())); + } + + /** + * Called when the container is closed. + */ + @Override + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + if (!playerIn.world.isRemote) + { + craftMatrix.eventHandler = null; + } + } + + @Override + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.tileEntity.isUsableByPlayer(playerIn); + } + + /** + * Take a stack from the specified inventory slot. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack() && !slot.getStack().isEmpty()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 0) + { + if (!this.mergeItemStack(itemstack1, 10, 46, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } else if (index < 10) + { + if (!this.mergeItemStack(itemstack1, 10, 46, false)) + { + return ItemStack.EMPTY; + } + } else if (this.matchesCrafting(itemstack1)) + { + if (!this.mergeToCrafting(itemstack1, false)) + { + return ItemStack.EMPTY; + } + } else if (index >= 10 && index < 37) + { + if (!this.mergeItemStack(itemstack1, 37, 46, false)) + { + return ItemStack.EMPTY; + } + } else if (index >= 37 && index < 46) + { + if (!this.mergeItemStack(itemstack1, 10, 37, false)) + { + return ItemStack.EMPTY; + } + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } + + private boolean mergeToCrafting(ItemStack stack, boolean b) + { + if (stack.isEmpty()) + { + return false; + } + List acceptSlots = new LinkedList<>(); + List acceptQuantity = new LinkedList<>(); + int minQuantity = 64; + int acceptTotal = 0; + for (int i = 1; i < 10; i++) + { + Slot slot = this.inventorySlots.get(i); + + if (slot != null) + { + ItemStack target = slot.getStack(); + ItemStack target2 = this.memory.get(i - 1); + if (target2.isEmpty()) + continue; + if (target.isEmpty()) + { + target = target2.copy(); + } + if (matchingStacks(stack, target)) + { + acceptSlots.add(slot); + int availSpace = target.getMaxStackSize() - target.getCount(); + acceptQuantity.add(availSpace); + acceptTotal += availSpace; + if (availSpace < minQuantity) + minQuantity = availSpace; + } + } + } + + // First fill any empty slots + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + if (target.isEmpty()) + { + ItemStack target2 = this.memory.get(slot.slotNumber - 1); + this.craftMatrix.setInventorySlotContents(slot.slotNumber - 1, target2.copy()); + stack.shrink(1); + if (stack.isEmpty()) + { + return false; + } + } + } + + // The stack more than exceeds what the crafting inventory requires + if (stack.getCount() >= acceptTotal) + { + if (acceptTotal == 0) + return false; + + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + stack.shrink(target.getMaxStackSize() - target.getCount()); + target.setCount(target.getMaxStackSize()); + slot.onSlotChanged(); + } + return true; + } + + int uneven = 0; + for (int q : acceptQuantity) + { + uneven += q - minQuantity; + } + + // Use the whole stack to try to even up the neediest slots + if (stack.getCount() <= uneven) + { + do + { + Slot neediest = null; + int smallestStack = 64; + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + if (target.getCount() < smallestStack) + { + smallestStack = target.getCount(); + neediest = slot; + } + } + neediest.getStack().grow(1); + stack.shrink(1); + } while (!stack.isEmpty()); + for (Slot slot : acceptSlots) + { + slot.onSlotChanged(); + } + return true; + } + + // Use some of the stack to even things up + if (uneven > 0) + { + int targetSize = stack.getMaxStackSize() - minQuantity; + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + stack.shrink(targetSize - target.getCount()); + acceptTotal -= targetSize - target.getCount(); + target.setCount(targetSize); + slot.onSlotChanged(); + } + } + + // Spread the remaining stack over all slots evenly + int average = stack.getCount() / acceptSlots.size(); + int modulus = stack.getCount() - average * acceptSlots.size(); + for (Slot slot : acceptSlots) + { + if (slot != null) + { + ItemStack target = slot.getStack(); + int transfer = average; + if (modulus > 0) + { + transfer++; + modulus--; + } + if (transfer > stack.getCount()) + transfer = stack.getCount(); + stack.shrink(transfer); + target.grow(transfer); + if (target.getCount() > target.getMaxStackSize()) + { + GalacticraftCore.logger.info("Shift clicking - slot " + slot.slotNumber + " wanted more than it could accept:" + target.getCount()); + stack.grow(target.getCount() - target.getMaxStackSize()); + target.setCount(target.getMaxStackSize()); + } + slot.onSlotChanged(); + if (stack.isEmpty()) + break; + } + } + + return true; + } + + private boolean matchesCrafting(ItemStack itemstack1) + { + if (this.tileEntity.overrideMemory(itemstack1, this.memory)) + { + return true; + } + + for (int i = 0; i < 9; i++) + { + if (matchingStacks(itemstack1, this.tileEntity.getMemory(i)) + && (this.craftMatrix.getStackInSlot(i).isEmpty() || this.craftMatrix.getStackInSlot(i).getCount() < itemstack1.getMaxStackSize())) + { + for (int j = 0; j < 9; j++) + { + this.memory.set(j, this.tileEntity.getMemory(j)); + } + return true; + } + } + return false; + } + + private boolean matchingStacks(ItemStack stack, ItemStack target) + { + return !target.isEmpty() && target.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == target.getMetadata()) && RecipeUtil.areItemStackTagsEqual(stack, target) + && (!target.isStackable() || target.getCount() < target.getMaxStackSize()); + } + + /** + * Called to determine if the current slot is valid for the stack merging + * (double-click) code. The stack passed in is null for the initial slot + * that was double-clicked. + */ + @Override + public boolean canMergeSlot(ItemStack stack, Slot p_94530_2_) + { + return p_94530_2_.inventory != this.craftResult && super.canMergeSlot(stack, p_94530_2_); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerDeconstructor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerDeconstructor.java new file mode 100644 index 00000000..7ad5d084 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerDeconstructor.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; + +public class ContainerDeconstructor extends Container +{ + + private TileEntityDeconstructor tileEntity; + + public ContainerDeconstructor(InventoryPlayer par1InventoryPlayer, TileEntityDeconstructor tileEntity) + { + this.tileEntity = tileEntity; + + // Battery Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 55, 75, IItemElectric.class)); + + // Input slot + this.addSlotToContainer(new Slot(tileEntity, 1, 26, 36)); + + int count = 2; + for (int x = 0; x < 3; x++) + { + for (int y = 0; y < 3; y++) + { + this.addSlotToContainer(new Slot(tileEntity, count++, 112 + y * 18, 18 + x * 18)); + } + } + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 117 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 175)); + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot var3 = (Slot) this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + if (par1 <= 10) + { + if (!this.mergeItemStack(var4, 11, 47, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 38) + { + if (!this.mergeItemStack(var4, 1, 2, false) && !this.mergeItemStack(var4, 38, 47, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 1, 2, false) && !this.mergeItemStack(var4, 11, 38, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.getCount() == 0) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricFurnace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricFurnace.java new file mode 100644 index 00000000..933be2b8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricFurnace.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotFurnaceOutput; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; + +public class ContainerElectricFurnace extends Container +{ + + private TileEntityElectricFurnace tileEntity; + + public ContainerElectricFurnace(InventoryPlayer par1InventoryPlayer, TileEntityElectricFurnace tileEntity) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 8, 49, IItemElectric.class)); + + // To be smelted + this.addSlotToContainer(new Slot(tileEntity, 1, 56, 25)); + + // Smelting result + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 2, 109, 25)); + if (tileEntity.tierGC == 2) + { + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 3, 127, 25)); + } + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + + tileEntity.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot var3 = this.inventorySlots.get(par1); + int off = this.tileEntity.tierGC == 2 ? 1 : 0; + + if (var3 != null && var3.getHasStack()) + { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + if (par1 >= 2 && par1 <= 2 + off) + { + if (!this.mergeItemStack(var4, 3 + off, 39 + off, true)) + { + return ItemStack.EMPTY; + } + + var3.onSlotChange(var4, var2); + } else if (par1 != 1 && par1 != 0) + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (!FurnaceRecipes.instance().getSmeltingResult(var4).isEmpty()) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 3 + off && par1 < 30 + off) + { + if (!this.mergeItemStack(var4, 30 + off, 39 + off, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 30 + off && par1 < 39 + off && !this.mergeItemStack(var4, 3 + off, 30 + off, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 3 + off, 39 + off, false)) + { + return ItemStack.EMPTY; + } + + if (var4.getCount() == 0) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricIngotCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricIngotCompressor.java new file mode 100644 index 00000000..7fe8b43e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricIngotCompressor.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotFurnaceOutput; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; + +public class ContainerElectricIngotCompressor extends Container +{ + + private TileEntityElectricIngotCompressor tileEntity; + + public ContainerElectricIngotCompressor(InventoryPlayer par1InventoryPlayer, TileEntityElectricIngotCompressor tileEntity) + { + this.tileEntity = tileEntity; + tileEntity.compressingCraftMatrix.eventHandler = this; + + for (int x = 0; x < 3; x++) + { + for (int y = 0; y < 3; y++) + { + this.addSlotToContainer(new Slot(tileEntity.compressingCraftMatrix, y + x * 3, 19 + y * 18, 18 + x * 18)); + } + } + + // Battery Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 55, 75, IItemElectric.class)); + + // Smelting result + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 1, 138, 30)); + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 2, 138, 48)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 117 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 175)); + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + super.onCraftMatrixChanged(par1IInventory); + this.tileEntity.updateInput(); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + if (par1 <= 11) + { + if (!this.mergeItemStack(var4, 12, 48, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 1 || par1 == 2) + { + var3.onSlotChange(var4, var2); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 9, 10, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 39) + { + if (!this.mergeItemStack(var4, 0, 9, false) && !this.mergeItemStack(var4, 39, 48, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 0, 9, false) && !this.mergeItemStack(var4, 12, 39, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.getCount() == 0) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerEnergyStorageModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerEnergyStorageModule.java new file mode 100644 index 00000000..9b0f8b94 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerEnergyStorageModule.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; + +public class ContainerEnergyStorageModule extends Container +{ + + private TileEntityEnergyStorageModule tileEntity; + + public ContainerEnergyStorageModule(InventoryPlayer par1InventoryPlayer, TileEntityEnergyStorageModule batteryBox) + { + this.tileEntity = batteryBox; + // Top slot for battery output + this.addSlotToContainer(new SlotSpecific(batteryBox, 0, 33, 24, IItemElectric.class)); + // Bottom slot for batter input + this.addSlotToContainer(new SlotSpecific(batteryBox, 1, 33, 48, IItemElectric.class)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + + this.tileEntity.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotID) + { + ItemStack returnStack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(slotID); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemStack = slot.getStack(); + returnStack = itemStack.copy(); + boolean movedToMachineSlot = false; + + if (slotID != 0 && slotID != 1) + { + if (EnergyUtil.isElectricItem(itemStack.getItem())) + { + if (EnergyUtil.isChargedElectricItem(itemStack)) + { + if (!this.mergeItemStack(itemStack, 1, 2, false)) + { + if (EnergyUtil.isFillableElectricItem(itemStack) && !this.mergeItemStack(itemStack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } + movedToMachineSlot = true; + } else + { + if (!this.mergeItemStack(itemStack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } + } else + { + if (slotID < b - 9) + { + if (!this.mergeItemStack(itemStack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemStack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } else if (!this.mergeItemStack(itemStack, 2, 38, false)) + { + return ItemStack.EMPTY; + } + + if (itemStack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && returnStack.getCount() > 1) + { + ItemStack remainder = returnStack.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (itemStack.getCount() == returnStack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, itemStack); + } + + return returnStack; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerExtendedInventory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerExtendedInventory.java new file mode 100644 index 00000000..8ba28ae4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerExtendedInventory.java @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; + +public class ContainerExtendedInventory extends Container +{ + + public InventoryPlayer inventoryPlayer; + public InventoryExtended extendedInventory; + + public ContainerExtendedInventory(EntityPlayer thePlayer, InventoryExtended extendedInventory) + { + this.inventoryPlayer = thePlayer.inventory; + this.extendedInventory = extendedInventory; + + int i; + int j; + + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(thePlayer.inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(thePlayer.inventory, i, 8 + i * 18, 142)); + } + + for (i = 0; i < 4; ++i) + { + this.addSlotToContainer(new SlotArmorGC(thePlayer, thePlayer.inventory, 39 - i, 61, 8 + i * 18, i)); + } + + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 0, 125, 26)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 1, 125, 44)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 2, 116, 62)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 3, 134, 62)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 4, 143, 26)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 5, 107, 26)); + + for (i = 0; i < 4; ++i) + { + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 6 + i, 79, 8 + i * 18)); + } + + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 10, 125, 8)); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 >= 36) + { + if (!this.mergeItemStack(stack, 0, 36, true)) + { + return ItemStack.EMPTY; + } + } else + { + boolean flag = false; + for (int j = 36; j < 40; j++) + { + if (((SlotArmorGC) this.inventorySlots.get(j)).isItemValid(stack)) + { + if (!this.mergeOneItem(stack, j, j + 1, false)) + { + return ItemStack.EMPTY; + } + flag = true; + break; + } + } + + if (!flag) + { + if (stack.getItem() instanceof ItemOxygenTank || stack.getItem() instanceof ItemCanisterOxygenInfinite) + { + if (!this.mergeOneItem(stack, 42, 44, false)) + { + return ItemStack.EMPTY; + } + flag = true; + } else + { + for (int j = 40; j < 51; j++) + { + if (((SlotExtendedInventory) this.inventorySlots.get(j)).isItemValid(stack)) + { + if (!this.mergeOneItem(stack, j, j + 1, false)) + { + return ItemStack.EMPTY; + } + flag = true; + break; + } + } + } + } + + if (!flag) + { + if (par1 < 27) + { + if (!this.mergeItemStack(stack, 27, 36, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, 0, 27, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (par1ItemStack.getCount() > 0) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerFuelLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerFuelLoader.java new file mode 100644 index 00000000..c66148b4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerFuelLoader.java @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class ContainerFuelLoader extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerFuelLoader(InventoryPlayer par1InventoryPlayer, TileEntityFuelLoader fuelLoader) + { + this.tileEntity = fuelLoader; + this.addSlotToContainer(new SlotSpecific(fuelLoader, 0, 51, 55, IItemElectric.class)); + this.addSlotToContainer(new Slot(fuelLoader, 1, 7, 12)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 31 + 58 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 31 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par2); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var5 = slot.getStack(); + var3 = var5.copy(); + boolean movedToMachineSlot = false; + + if (par2 < 2) + { + if (!this.mergeItemStack(var5, 2, 38, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var5.getItem())) + { + if (!this.mergeItemStack(var5, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (FluidUtil.isFuelContainerAny(var5)) + { + if (!this.mergeItemStack(var5, 1, 2, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else if (par2 < 29) + { + if (!this.mergeItemStack(var5, 29, 38, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 2, 29, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var5.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var3.getCount() > 1) + { + ItemStack remainder = var3.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (var5.getCount() == var3.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var5); + } + + return var3; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerIngotCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerIngotCompressor.java new file mode 100644 index 00000000..42210730 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerIngotCompressor.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotFurnaceOutput; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityFurnace; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; + +public class ContainerIngotCompressor extends Container +{ + + private TileEntityIngotCompressor tileEntity; + + public ContainerIngotCompressor(InventoryPlayer par1InventoryPlayer, TileEntityIngotCompressor tileEntity) + { + this.tileEntity = tileEntity; + tileEntity.compressingCraftMatrix.eventHandler = this; + + for (int x = 0; x < 3; x++) + { + for (int y = 0; y < 3; y++) + { + this.addSlotToContainer(new Slot(tileEntity.compressingCraftMatrix, y + x * 3, 19 + y * 18, 18 + x * 18)); + } + } + + // Coal slot + this.addSlotToContainer(new Slot(tileEntity, 0, 55, 75)); + + // Smelting result + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 1, 138, 38)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 110 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 168)); + } + + tileEntity.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + super.onCraftMatrixChanged(par1IInventory); + this.tileEntity.updateInput(); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 <= 10) + { + if (!this.mergeItemStack(var4, 11, 47, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 1) + { + slot.onSlotChange(var4, var2); + } + } else + { + if (TileEntityFurnace.getItemBurnTime(var4) > 0) + { + if (!this.mergeItemStack(var4, 9, 10, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 38) + { + if (!this.mergeItemStack(var4, 0, 9, false) && !this.mergeItemStack(var4, 38, 47, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 0, 9, false) && !this.mergeItemStack(var4, 11, 38, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } + + // Can only split-drag into the crafting table slots + @Override + public boolean canDragIntoSlot(Slot par1Slot) + { + return par1Slot.slotNumber < 9; + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCollector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCollector.java new file mode 100644 index 00000000..230a682f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCollector.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; + +public class ContainerOxygenCollector extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenCollector(InventoryPlayer par1InventoryPlayer, TileEntityOxygenCollector collector) + { + this.tileEntity = collector; + this.addSlotToContainer(new SlotSpecific(collector, 0, 32, 27, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 46 + 58 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 46 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCompressor.java new file mode 100644 index 00000000..8d99c0d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCompressor.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; + +public class ContainerOxygenCompressor extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenCompressor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenCompressor compressor, EntityPlayer player) + { + this.tileEntity = compressor; + this.addSlotToContainer(new Slot(compressor, 0, 133, 71)); + this.addSlotToContainer(new SlotSpecific(compressor, 1, 47, 27, IItemElectric.class)); + this.addSlotToContainer(new SlotSpecific(compressor, 2, 17, 27, IItemOxygenSupply.class)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 20 + 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 20 + 142)); + } + + compressor.openInventory(player); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 < 3) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else if (stack.getItem() instanceof IItemOxygenSupply) + { + if (!this.mergeItemStack(stack, 2, 3, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else if (stack.getItem() instanceof ItemOxygenTank && stack.getItemDamage() > 0) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDecompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDecompressor.java new file mode 100644 index 00000000..0fabe0ab --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDecompressor.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; + +public class ContainerOxygenDecompressor extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenDecompressor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenDecompressor compressor, EntityPlayer player) + { + this.tileEntity = compressor; + this.addSlotToContainer(new Slot(compressor, 0, 133, 71)); + this.addSlotToContainer(new SlotSpecific(compressor, 1, 32, 27, IItemElectric.class)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 20 + 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 20 + 142)); + } + + compressor.openInventory(player); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 < 2) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else if (stack.getItem() instanceof ItemCanisterOxygenInfinite || (stack.getItem() instanceof ItemOxygenTank && stack.getItemDamage() < stack.getMaxDamage())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDistributor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDistributor.java new file mode 100644 index 00000000..bee20fe4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDistributor.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; + +public class ContainerOxygenDistributor extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenDistributor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenDistributor distributor) + { + this.tileEntity = distributor; + this.addSlotToContainer(new SlotSpecific(distributor, 0, 47, 27, IItemElectric.class)); + this.addSlotToContainer(new SlotSpecific(distributor, 1, 17, 27, IItemOxygenSupply.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 46 + 58 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 46 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = (Slot) this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 < 2) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (stack.getItem() instanceof IItemOxygenSupply) + { + if (!this.mergeItemStack(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else + + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenSealer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenSealer.java new file mode 100644 index 00000000..409b9cf1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenSealer.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; + +public class ContainerOxygenSealer extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenSealer(InventoryPlayer par1InventoryPlayer, TileEntityOxygenSealer sealer) + { + this.tileEntity = sealer; + this.addSlotToContainer(new SlotSpecific(sealer, 0, 33, 27, IItemElectric.class)); + this.addSlotToContainer(new SlotSpecific(sealer, 1, 10, 27, IItemOxygenSupply.class)); + this.addSlotToContainer(new SlotSpecific(sealer, 2, 56, 27, new ItemStack(GCItems.basicItem, 1, 20))); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 46 + 78 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 46 + 136)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 <= 2) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (stack.getItem() instanceof IItemOxygenSupply) + { + if (!this.mergeItemStack(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (stack.getItem() == GCItems.basicItem && stack.getItemDamage() == 20) + { + if (!this.mergeItemStack(stack, 2, 3, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenStorageModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenStorageModule.java new file mode 100644 index 00000000..ecc76221 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenStorageModule.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; + +public class ContainerOxygenStorageModule extends Container +{ + + private TileEntityOxygenStorageModule tileEntity; + + public ContainerOxygenStorageModule(InventoryPlayer par1InventoryPlayer, TileEntityOxygenStorageModule storageModule) + { + this.tileEntity = storageModule; + this.addSlotToContainer(new SlotSpecific(storageModule, 0, 17, 22, IItemOxygenSupply.class)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + + this.tileEntity.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 < 1) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (stack.getItem() instanceof IItemOxygenSupply) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerPainter.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerPainter.java new file mode 100644 index 00000000..3027446a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerPainter.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IPaintable; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; + +public class ContainerPainter extends Container +{ + + private TileEntityPainter tileEntity; + + public ContainerPainter(InventoryPlayer par1InventoryPlayer, TileEntityPainter tileEntity2) + { + this.tileEntity = tileEntity2; + + // To be painted + this.addSlotToContainer(new Slot(tileEntity2, 0, 40, 25)); + // TODO: slots which can only accept one item + + // For dyes and other colour giving items + this.addSlotToContainer(new Slot(tileEntity2, 1, 122, 25)); + + int i; + for (i = 0; i < 3; ++i) + { + for (int j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); + } + } + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 162)); + } + + tileEntity2.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int index) + { + ItemStack stackOrig = ItemStack.EMPTY; + Slot slot = (Slot) this.inventorySlots.get(index); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + ItemStack stack = slot.getStack(); + stackOrig = stack.copy(); + + if (index < 2) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + slot.onSlotChange(stack, stackOrig); + } else if (index != 1 && index != 0) + { + Item item = stack.getItem(); + if (item instanceof IPaintable || (item instanceof ItemBlock && ((ItemBlock) item).getBlock() instanceof IPaintable)) + { + if (!this.mergeOneItem(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (index < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == stackOrig.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return stackOrig; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (par1ItemStack.getCount() > 0) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = (Slot) this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerParaChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerParaChest.java new file mode 100644 index 00000000..4c3ac198 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerParaChest.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerParaChest extends Container +{ + + private IInventory parachestInventory; + public int numRows; + + public ContainerParaChest(IInventory par1IInventory, IInventory par2IInventory, EntityPlayer player) + { + this.parachestInventory = par2IInventory; + this.numRows = (par2IInventory.getSizeInventory() - 3) / 9; + par2IInventory.openInventory(player); + int i = (this.numRows - 4) * 18 + 19; + int j; + int k; + + for (j = 0; j < this.numRows; ++j) + { + for (k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(par2IInventory, k + j * 9, 8 + k * 18, 18 + j * 18)); + } + } + + this.addSlotToContainer(new Slot(par2IInventory, par2IInventory.getSizeInventory() - 3, 125 + 0 * 18, (this.numRows == 0 ? 24 : 26) + this.numRows * 18)); + this.addSlotToContainer(new Slot(par2IInventory, par2IInventory.getSizeInventory() - 2, 125 + 1 * 18, (this.numRows == 0 ? 24 : 26) + this.numRows * 18)); + this.addSlotToContainer(new Slot(par2IInventory, par2IInventory.getSizeInventory() - 1, 75, (this.numRows == 0 ? 24 : 26) + this.numRows * 18)); + + for (j = 0; j < 3; ++j) + { + for (k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(par1IInventory, k + j * 9 + 9, 8 + k * 18, (this.numRows == 0 ? 116 : 118) + j * 18 + i)); + } + } + + for (j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(par1IInventory, j, 8 + j * 18, (this.numRows == 0 ? 174 : 176) + i)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.parachestInventory.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(par2); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (par2 < this.parachestInventory.getSizeInventory()) + { + if (!this.mergeItemStack(itemstack1, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemstack1, 0, this.parachestInventory.getSizeInventory(), false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + } + + return itemstack; + } + + /** + * Callback for when the crafting gui is closed. + */ + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + this.parachestInventory.closeInventory(entityPlayer); + } + + /** + * Return this chest container's lower chest inventory. + */ + public IInventory getparachestInventory() + { + return this.parachestInventory; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRefinery.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRefinery.java new file mode 100644 index 00000000..5d1894c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRefinery.java @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class ContainerRefinery extends Container +{ + + private final TileEntityRefinery tileEntity; + + public ContainerRefinery(InventoryPlayer par1InventoryPlayer, TileEntityRefinery tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 38, 51, IItemElectric.class)); + + // To be smelted + this.addSlotToContainer(new Slot(tileEntity, 1, 7, 7)); + + // Smelting result + this.addSlotToContainer(new Slot(tileEntity, 2, 153, 7)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 104 + var3 * 18 - 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 144)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < 3) + { + if (!this.mergeItemStack(var4, 3, 39, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 2) + { + slot.onSlotChange(var4, var2); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (FluidUtil.isOilContainerAny(var4)) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (FluidUtil.isPartialContainer(var4, GCItems.fuelCanister)) + { + if (!this.mergeItemStack(var4, 2, 3, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 30) + { + if (!this.mergeItemStack(var4, 30, 39, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 3, 30, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRocketInventory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRocketInventory.java new file mode 100644 index 00000000..ea4232ab --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRocketInventory.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; + +public class ContainerRocketInventory extends Container +{ + + private final IInventory lowerChestInventory; + private final IInventory spaceshipInv; + private final EnumRocketType rocketType; + + public ContainerRocketInventory(IInventory par1IInventory, IInventory par2IInventory, EnumRocketType rocketType, EntityPlayer player) + { + this.lowerChestInventory = par1IInventory; + this.spaceshipInv = par2IInventory; + this.rocketType = rocketType; + par2IInventory.openInventory(player); + + switch (rocketType.getInventorySpace() - 2) + { + case 0: + this.addSlotsNoInventory(); + break; + case 18: + this.addSlotsWithInventory(rocketType.getInventorySpace()); + break; + case 36: + this.addSlotsWithInventory(rocketType.getInventorySpace()); + break; + case 54: + this.addSlotsWithInventory(rocketType.getInventorySpace()); + break; + } + } + + private void addSlotsNoInventory() + { + int var4; + int var5; + + for (var4 = 0; var4 < 3; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var5 + (var4 + 1) * 9, 8 + var5 * 18, 84 + var4 * 18 - 34)); + } + } + + for (var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var4, 8 + var4 * 18, 142 - 34)); + } + } + + private void addSlotsWithInventory(int slotCount) + { + int var4; + int var5; + int lastRow = slotCount / 9; + int ySize = 145 + (this.rocketType.getInventorySpace() - 2) * 2; + + for (var4 = 0; var4 < lastRow; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.spaceshipInv, var5 + var4 * 9, 8 + var5 * 18, 50 + var4 * 18)); + } + } + + for (var4 = 0; var4 < 3; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var5 + var4 * 9 + 9, 8 + var5 * 18, ySize - 82 + var4 * 18)); + } + } + + for (var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var4, 8 + var4 * 18, ySize - 24)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.spaceshipInv.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot var4 = this.inventorySlots.get(par2); + final int b = this.inventorySlots.size() - 36; + + if (var4 != null && var4.getHasStack()) + { + final ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 < b) + { + if (!this.mergeItemStack(var5, b, b + 36, true)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 0, b, false)) + { + return ItemStack.EMPTY; + } + + if (var5.getCount() == 0) + { + var4.putStack(ItemStack.EMPTY); + } else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + /** + * Callback for when the crafting gui is closed. + */ + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + this.lowerChestInventory.closeInventory(entityPlayer); + } + + /** + * Return this chest container's lower chest inventory. + */ + public IInventory getLowerChestInventory() + { + return this.lowerChestInventory; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematic.java new file mode 100644 index 00000000..abccb061 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematic.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicItem; + +public class ContainerSchematic extends Container +{ + + public InventorySchematic craftMatrix = new InventorySchematic(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematic(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotSpecific(this.craftMatrix, 0, 80, 1, ISchematicItem.class)); + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 111 + var6 * 18 - 59 + 16)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 169 - 59 + 16)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 0; var2 < 1; ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot var4 = (Slot) this.inventorySlots.get(par2); + + if (var4 != null && var4.getHasStack()) + { + final ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 < 1) + { + if (!this.mergeItemStack(var5, 1, this.inventorySlots.size(), true)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 0, 1, false)) + { + return ItemStack.EMPTY; + } + + if (var5.getCount() == 0) + { + var4.putStack(ItemStack.EMPTY); + } else + { + var4.onSlotChanged(); + } + } + + return var3; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematicTier1Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematicTier1Rocket.java new file mode 100644 index 00000000..fca16dfe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematicTier1Rocket.java @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class ContainerSchematicTier1Rocket extends Container +{ + + public InventoryRocketBench craftMatrix = new InventoryRocketBench(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicTier1Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + final int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 69 + change)); + int var6; + int var7; + + // Cone + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 1, 48, -8 + change, pos, par1InventoryPlayer.player)); + + // Body + for (var6 = 0; var6 < 4; ++var6) + { + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 2 + var6, 39, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Body Right + for (var6 = 0; var6 < 4; ++var6) + { + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 6 + var6, 57, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Left fins + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 10, 21, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 11, 21, 82 + change, pos, par1InventoryPlayer.player)); + + // Engine + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 12, 48, 82 + change, pos, par1InventoryPlayer.player)); + + // Right fins + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 13, 75, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 14, 75, 82 + change, pos, par1InventoryPlayer.player)); + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 15 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 111 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < 18; ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtil.findMatchingSpaceshipRecipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = (Slot) this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + if (par1 <= 17) + { + if (!this.mergeItemStack(var4, 18, 54, false)) + { + return ItemStack.EMPTY; + } + + if (par1 == 0) + { + var3.onSlotChange(var4, var2); + } + } else if (var2.getItem() == GCItems.partNoseCone) + { + if (!this.mergeOneItem(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == GCItems.heavyPlatingTier1) + { + if (!this.mergeOneItem(var4, 2, 10, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == GCItems.partFins) + { + if (!this.mergeOneItem(var4, 10, 12, false) && !this.mergeOneItem(var4, 13, 15, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == GCItems.rocketEngine) + { + if (!this.mergeOneItem(var4, 12, 13, false)) + { + return ItemStack.EMPTY; + } + } else + { + boolean foundChest = false; + for (ItemStack woodChest : OreDictionary.getOres("chestWood")) + { + if (var2.getItem() == woodChest.getItem()) + { + foundChest = true; + break; + } + } + if (foundChest) + { + if (!this.mergeOneItem(var4, 15, 18, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 18 && par1 < 45) + { + if (!this.mergeItemStack(var4, 45, 54, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 45 && par1 < 54) + { + if (!this.mergeItemStack(var4, 18, 45, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.getCount() == 0) + { + if (par1 == 0) + { + var3.onTake(entityPlayer, var4); + } + var3.putStack(ItemStack.EMPTY); + return var2; + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + if (par1 == 0) + { + var3.onSlotChanged(); + } + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (par1ItemStack.getCount() > 0) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSolar.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSolar.java new file mode 100644 index 00000000..017ed8d7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSolar.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; + +public class ContainerSolar extends Container +{ + + private TileEntitySolar tileEntity; + + public ContainerSolar(InventoryPlayer par1InventoryPlayer, TileEntitySolar solarGen) + { + this.tileEntity = solarGen; + this.addSlotToContainer(new SlotSpecific(solarGen, 0, 152, 83, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 51 + 68 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 61 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventoryDefaults.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventoryDefaults.java new file mode 100644 index 00000000..53338b96 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventoryDefaults.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +/* + * IInventory providing defaults for the eight methods + * which we normally don't use in tiles and entities. + * + * (It's not necessary to use the fields system where + * we use a Container for the inventory.) + * + * Override .hasCustomName() if true is required. + */ +public interface IInventoryDefaults extends ISidedInventory +{ + + // We don't use these because we use forge containers + @Override + public default void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public default void closeInventory(EntityPlayer player) + { + } + + @Override + public default int getField(int id) + { + return 0; + } + + @Override + public default void setField(int id, int value) + { + } + + @Override + public default int getFieldCount() + { + return 0; + } + + @Override + public default void clear() + { + + } + + /** + * Override this and return true IF the inventory .getName() is ALREADY a + * localized name e.g. by GCCoreUtil.translate() + * + **/ + @Override + public default boolean hasCustomName() + { + return false; + } + + @Override + public default ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventorySettable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventorySettable.java new file mode 100644 index 00000000..396b412a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventorySettable.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; + +public interface IInventorySettable extends IInventory +{ + + void setSizeInventory(int size); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryBuggyBench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryBuggyBench.java new file mode 100644 index 00000000..3fe56d0f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryBuggyBench.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventoryBuggyBench implements IInventory +{ + + private final NonNullList stackList; + private final int inventoryWidth; + private final Container eventHandler; + + public InventoryBuggyBench(Container par1Container) + { + final int size = 32; + this.stackList = NonNullList.withSize(size, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stackList.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stackList.get(par1); + } + + public ItemStack getStackInRowAndColumn(int par1, int par2) + { + if (par1 >= 0 && par1 < this.inventoryWidth) + { + final int var3 = par1 + par2 * this.inventoryWidth; + return this.getStackInSlot(var3); + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stackList, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stackList, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stackList.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public void openInventory(EntityPlayer player) + { + } + + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stackList) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryExtended.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryExtended.java new file mode 100644 index 00000000..bd364b27 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryExtended.java @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; + +import micdoodle8.mods.galacticraft.api.inventory.IInventoryGC; + +public class InventoryExtended implements IInventoryGC +{ + + public NonNullList stacks = NonNullList.withSize(11, ItemStack.EMPTY); + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + @Nonnull + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public String getName() + { + return "Galacticraft Player Inventory"; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return true; + } + + @Override + public void openInventory(EntityPlayer player) + { + + } + + @Override + public void closeInventory(EntityPlayer player) + { + + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public void dropExtendedItems(EntityPlayer player) + { + for (int i = 0; i < this.stacks.size(); i++) + { + ItemStack stack = this.stacks.get(i); + + if (!stack.isEmpty()) + { + player.dropItem(stack, true); + } + + this.stacks.set(i, ItemStack.EMPTY); + } + } + + // Backwards compatibility for old inventory + public void readFromNBTOld(NBTTagList par1NBTTagList) + { + this.stacks = NonNullList.withSize(11, ItemStack.EMPTY); + + for (int i = 0; i < par1NBTTagList.tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = par1NBTTagList.getCompoundTagAt(i); + final int j = nbttagcompound.getByte("Slot") & 255; + final ItemStack itemstack = new ItemStack(nbttagcompound); + + if (!itemstack.isEmpty()) + { + if (j >= 200 && j < this.stacks.size() + 200 - 1) + { + this.stacks.set(j - 200, itemstack); + } + } + } + } + + public void readFromNBT(NBTTagList tagList) + { + this.stacks = NonNullList.withSize(11, ItemStack.EMPTY); + + for (int i = 0; i < tagList.tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = tagList.getCompoundTagAt(i); + final int j = nbttagcompound.getByte("Slot") & 255; + final ItemStack itemstack = new ItemStack(nbttagcompound); + + if (!itemstack.isEmpty()) + { + this.stacks.set(j, itemstack); + } + } + } + + public NBTTagList writeToNBT(NBTTagList tagList) + { + NBTTagCompound nbttagcompound; + + for (int i = 0; i < this.stacks.size(); ++i) + { + if (!this.stacks.get(i).isEmpty()) + { + nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) i); + this.stacks.get(i).writeToNBT(nbttagcompound); + tagList.appendTag(nbttagcompound); + } + } + + return tagList; + } + + @Override + public void copyInventory(IInventoryGC par1InventoryPlayer) + { + InventoryExtended toCopy = (InventoryExtended) par1InventoryPlayer; + for (int i = 0; i < this.stacks.size(); ++i) + { + this.stacks.set(i, toCopy.stacks.get(i).copy()); + } + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public ITextComponent getDisplayName() + { + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryRocketBench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryRocketBench.java new file mode 100644 index 00000000..cfa33271 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryRocketBench.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventoryRocketBench implements IInventory +{ + + public NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventoryRocketBench(Container par1Container) + { + final int size = 18; + this.stacks = NonNullList.withSize(size, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + public ItemStack getStackInRowAndColumn(int par1, int par2) + { + if (par1 >= 0 && par1 < this.inventoryWidth) + { + final int var3 = par1 + par2 * this.inventoryWidth; + if (var3 >= 18) + { + return ItemStack.EMPTY; + } + return this.getStackInSlot(var3); + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventorySchematic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventorySchematic.java new file mode 100644 index 00000000..72dd54c8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventorySchematic.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematic implements IInventory +{ + + public NonNullList stacks; + protected final Container eventHandler; + + public InventorySchematic(Container par1Container) + { + this.stacks = NonNullList.withSize(1, ItemStack.EMPTY); + this.eventHandler = par1Container; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryTreasureChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryTreasureChest.java new file mode 100644 index 00000000..799b2789 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryTreasureChest.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventoryTreasureChest implements IInventory +{ + + private String name; + private IInventory upperChest; + private IInventory lowerChest; + + public InventoryTreasureChest(String name, IInventory upper, IInventory lower) + { + this.name = name; + + if (upper == null) + { + upper = lower; + } + + if (lower == null) + { + lower = upper; + } + + this.upperChest = upper; + this.lowerChest = lower; + } + + @Override + public int getSizeInventory() + { + return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory(); + } + + @Override + public String getName() + { + return this.upperChest.hasCustomName() ? this.upperChest.getName() : (this.lowerChest.hasCustomName() ? this.lowerChest.getName() : this.name); + } + + @Override + public boolean hasCustomName() + { + return this.upperChest.hasCustomName() || this.lowerChest.hasCustomName(); + } + + @Override + public ItemStack getStackInSlot(int p_70301_1_) + { + return p_70301_1_ >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlot(p_70301_1_ - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlot(p_70301_1_); + } + + @Override + public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) + { + return p_70298_1_ >= this.upperChest.getSizeInventory() ? this.lowerChest.decrStackSize(p_70298_1_ - this.upperChest.getSizeInventory(), p_70298_2_) + : this.upperChest.decrStackSize(p_70298_1_, p_70298_2_); + } + + @Override + public ItemStack removeStackFromSlot(int p_70304_1_) + { + return p_70304_1_ >= this.upperChest.getSizeInventory() ? this.lowerChest.removeStackFromSlot(p_70304_1_ - this.upperChest.getSizeInventory()) + : this.upperChest.removeStackFromSlot(p_70304_1_); + } + + @Override + public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) + { + if (p_70299_1_ >= this.upperChest.getSizeInventory()) + { + this.lowerChest.setInventorySlotContents(p_70299_1_ - this.upperChest.getSizeInventory(), p_70299_2_); + } else + { + this.upperChest.setInventorySlotContents(p_70299_1_, p_70299_2_); + } + } + + @Override + public int getInventoryStackLimit() + { + return this.upperChest.getInventoryStackLimit(); + } + + @Override + public void markDirty() + { + this.upperChest.markDirty(); + this.lowerChest.markDirty(); + } + + @Override + public boolean isUsableByPlayer(EntityPlayer p_70300_1_) + { + return this.upperChest.isUsableByPlayer(p_70300_1_) && this.lowerChest.isUsableByPlayer(p_70300_1_); + } + + @Override + public void openInventory(EntityPlayer player) + { + this.upperChest.openInventory(player); + this.lowerChest.openInventory(player); + } + + @Override + public void closeInventory(EntityPlayer player) + { + this.upperChest.closeInventory(player); + this.lowerChest.closeInventory(player); + } + + @Override + public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) + { + return true; + } + + @Override + public void clear() + { + this.upperChest.clear(); + this.lowerChest.clear(); + } + + @Override + public boolean isEmpty() + { + return this.upperChest.isEmpty() && this.lowerChest.isEmpty(); + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/PersistantInventoryCrafting.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/PersistantInventoryCrafting.java new file mode 100644 index 00000000..87fb807c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/PersistantInventoryCrafting.java @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; + +public class PersistantInventoryCrafting extends InventoryCrafting +{ + + public NonNullList stacks; + + private int inventoryWidth; + private int inventoryHeight; + + public Container eventHandler; + + public PersistantInventoryCrafting() + { + super(null, 3, 3); + int k = 9; + this.stacks = NonNullList.withSize(k, ItemStack.EMPTY); + this.inventoryWidth = 3; + this.inventoryHeight = 3; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + @Nonnull + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + if (this.eventHandler != null) + { + this.eventHandler.onCraftMatrixChanged(this); + } + } + + return itemstack; + } + + @Override + public ItemStack getStackInRowAndColumn(int row, int column) + { + return row >= 0 && row < this.inventoryWidth && column >= 0 && column < this.inventoryHeight ? this.getStackInSlot(row + column * this.inventoryWidth) : ItemStack.EMPTY; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + if (this.eventHandler != null) + { + this.eventHandler.onCraftMatrixChanged(this); + } + } + + public void setInventorySlotContentsNoUpdate(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public void openInventory(EntityPlayer player) + { + } + + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public boolean isItemValidForSlot(int par1, ItemStack par2ItemStack) + { + return true; + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public ITextComponent getDisplayName() + { + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotArmorGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotArmorGC.java new file mode 100644 index 00000000..9b017119 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotArmorGC.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SlotArmorGC extends Slot +{ + + private static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[] + {EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; + final int armorType; + final EntityPlayer thePlayer; + + public SlotArmorGC(EntityPlayer thePlayer, IInventory par2IInventory, int par3, int par4, int par5, int par6) + { + super(par2IInventory, par3, par4, par5); + this.thePlayer = thePlayer; + this.armorType = par6; + } + + @Override + public int getSlotStackLimit() + { + return 1; + } + + @Override + public boolean canTakeStack(EntityPlayer playerIn) { + ItemStack item = this.inventory.getStackInSlot(getSlotIndex()); + if(EnchantmentHelper.hasBindingCurse(item)) { + return false; + } + return super.canTakeStack(playerIn); + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + final Item item = par1ItemStack.isEmpty() ? null : par1ItemStack.getItem(); + return item != null && item.isValidArmor(par1ItemStack, VALID_EQUIPMENT_SLOTS[this.armorType], this.thePlayer); + } + + @Override + @SideOnly(Side.CLIENT) + public String getSlotTexture() + { + return ItemArmor.EMPTY_SLOT_NAMES[VALID_EQUIPMENT_SLOTS[this.armorType].getIndex()]; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotBuggyBench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotBuggyBench.java new file mode 100644 index 00000000..a2d8981c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotBuggyBench.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class SlotBuggyBench extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotBuggyBench(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getBuggyBenchRecipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCoalGenerator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCoalGenerator.java new file mode 100644 index 00000000..c3b0bbe7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCoalGenerator.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.util.ItemUtil; + +public class SlotCoalGenerator extends Slot +{ + public SlotCoalGenerator(IInventory inventoryIn, int index, int xPosition, int yPosition) + { + super(inventoryIn, index, xPosition, yPosition); + } + + //@noformat + @Override + public boolean isItemValid(ItemStack stack) + { + return ( + ItemUtil.hasOreDictSuffix(stack, "coal") || + ItemUtil.hasOreDictSuffix(stack, "charcoal") || + stack.getItem() == Items.COAL + ) && stack.getItem() != Item.getItemFromBlock(Blocks.COAL_ORE); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCompressor.java new file mode 100644 index 00000000..447106f5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCompressor.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; + +public class SlotCompressor extends Slot +{ + + public SlotCompressor(IInventory par1iInventory, int par2, int par3, int par4) + { + super(par1iInventory, par2, par3, par4); + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + return par1ItemStack.getItem() instanceof ItemOxygenTank; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCraftingMemory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCraftingMemory.java new file mode 100644 index 00000000..fa4c7734 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCraftingMemory.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.SlotCrafting; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; + +public class SlotCraftingMemory extends SlotCrafting +{ + + public TileEntityCrafting tileEntity; + + public SlotCraftingMemory(EntityPlayer player, InventoryCrafting craftingInventory, IInventory p_i45790_3_, int slotIndex, int xPosition, int yPosition, TileEntityCrafting tile) + { + super(player, craftingInventory, p_i45790_3_, slotIndex, xPosition, yPosition); + this.tileEntity = tile; + } + + @Override + public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) + { + if (!stack.isEmpty()) + this.tileEntity.updateMemory(stack); + return super.onTake(thePlayer, stack); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotExtendedInventory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotExtendedInventory.java new file mode 100644 index 00000000..8c2e0fe4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotExtendedInventory.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; + +public class SlotExtendedInventory extends Slot +{ + + public SlotExtendedInventory(IInventory par2IInventory, int par3, int par4, int par5) + { + super(par2IInventory, par3, par4, par5); + } + + @Override + public int getSlotStackLimit() + { + return 1; + } + + @Override + public boolean isItemValid(ItemStack itemstack) + { + int gearID = GalacticraftRegistry.findMatchingGearID(itemstack, getTypeFromSlot()); + + if (gearID >= 0) + { + return true; + } + + return false; + } + + private EnumExtendedInventorySlot getTypeFromSlot() + { + switch (this.getSlotIndex()) + { + case 0: + return EnumExtendedInventorySlot.MASK; + case 1: + return EnumExtendedInventorySlot.GEAR; + case 2: + return EnumExtendedInventorySlot.LEFT_TANK; + case 3: + return EnumExtendedInventorySlot.RIGHT_TANK; + case 4: + return EnumExtendedInventorySlot.PARACHUTE; + case 5: + return EnumExtendedInventorySlot.FREQUENCY_MODULE; + case 6: + return EnumExtendedInventorySlot.THERMAL_HELMET; + case 7: + return EnumExtendedInventorySlot.THERMAL_CHESTPLATE; + case 8: + return EnumExtendedInventorySlot.THERMAL_LEGGINGS; + case 9: + return EnumExtendedInventorySlot.THERMAL_BOOTS; + case 10: + return EnumExtendedInventorySlot.SHIELD_CONTROLLER; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotFuelCanister.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotFuelCanister.java new file mode 100644 index 00000000..de952a8f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotFuelCanister.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.items.ItemFuelCanister; + +public class SlotFuelCanister extends Slot +{ + + public SlotFuelCanister(IInventory par1iInventory, int par2, int par3, int par4) + { + super(par1iInventory, par2, par3, par4); + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + return par1ItemStack.getItem() instanceof ItemFuelCanister && par1ItemStack.getItemDamage() > 0; + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRefinery.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRefinery.java new file mode 100644 index 00000000..26bd6338 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRefinery.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class SlotRefinery extends Slot +{ + + public SlotRefinery(IInventory par1iInventory, int par2, int par3, int par4) + { + super(par1iInventory, par2, par3, par4); + } + + @Override + public boolean isItemValid(ItemStack stack) + { + return FluidUtil.isOilContainerAny(stack); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBench.java new file mode 100644 index 00000000..66125c51 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBench.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class SlotRocketBench extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotRocketBench(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getRocketT1Recipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBenchResult.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBenchResult.java new file mode 100644 index 00000000..06ed6e96 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBenchResult.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class SlotRocketBenchResult extends Slot +{ + + private final IInventory craftMatrix; + private final EntityPlayer thePlayer; + + public SlotRocketBenchResult(EntityPlayer entityPlayer, IInventory par2IInventory, IInventory par3IInventory, int par4, int par5, int par6) + { + super(par3IInventory, par4, par5, par6); + this.thePlayer = entityPlayer; + this.craftMatrix = par2IInventory; + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + return false; + } + + @Override + public ItemStack onTake(EntityPlayer entityPlayer, ItemStack stack) + { + for (int var2 = 0; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.getStackInSlot(var2); + + if (!var3.isEmpty()) + { + this.craftMatrix.decrStackSize(var2, 1); + + if (var3.getItem().hasContainerItem(var3)) + { + final ItemStack var4 = new ItemStack(var3.getItem().getContainerItem()); + + if (!this.thePlayer.inventory.addItemStackToInventory(var4)) + { + if (this.craftMatrix.getStackInSlot(var2).isEmpty()) + { + this.craftMatrix.setInventorySlotContents(var2, var4); + } else + { + this.thePlayer.entityDropItem(var4, 0.0F); + } + } + } + } + } + + return stack; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotSpecific.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotSpecific.java new file mode 100644 index 00000000..97f1e5d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotSpecific.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.ArrayList; +import java.util.Arrays; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; + +/** + * Creates a slot with a specific amount of items that matches the slot's + * requirements. Allows easy shift right clicking management and slot blocking + * in classes. In your container you can use this.getSlot(i).isItemValid to + * justify the player's shift clicking actions to match the slot. + * + * @author Calclavia + */ +public class SlotSpecific extends Slot +{ + + public ItemStack[] validItemStacks = new ItemStack[0]; + public Class[] validClasses = new Class[0]; + + public boolean isInverted = false; + public boolean isMetadataSensitive = false; + + public SlotSpecific(IInventory inventory, int par3, int par4, int par5, ItemStack... itemStacks) + { + super(inventory, par3, par4, par5); + this.setItemStacks(itemStacks); + } + + @SafeVarargs + public SlotSpecific(IInventory inventory, int par3, int par4, int par5, Class... validClasses) + { + super(inventory, par3, par4, par5); + if (validClasses != null && Arrays.asList(validClasses).contains(IItemElectric.class)) + { + try + { + if (EnergyConfigHandler.isRFAPILoaded()) + { + ArrayList> existing = new ArrayList<>(Arrays.asList(validClasses)); + existing.add(cofh.redstoneflux.api.IEnergyContainerItem.class); + validClasses = existing.toArray(new Class[existing.size()]); + } + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + ArrayList> existing = new ArrayList<>(Arrays.asList(validClasses)); + existing.add(ic2.api.item.IElectricItem.class); + existing.add(ic2.api.item.ISpecialElectricItem.class); + validClasses = existing.toArray(new Class[existing.size()]); + } + if (EnergyConfigHandler.isMekanismLoaded()) + { + ArrayList> existing = new ArrayList<>(Arrays.asList(validClasses)); + existing.add(mekanism.api.energy.IEnergizedItem.class); + validClasses = existing.toArray(new Class[existing.size()]); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + this.validClasses = validClasses; + } + + public SlotSpecific setMetadataSensitive() + { + this.isMetadataSensitive = true; + return this; + } + + public SlotSpecific setItemStacks(ItemStack... validItemStacks) + { + this.validItemStacks = validItemStacks; + return this; + } + + public SlotSpecific toggleInverted() + { + this.isInverted = !this.isInverted; + return this; + } + + /** + * Check if the stack is a valid item for this slot. Always true beside for + * the armor slots. + */ + @Override + public boolean isItemValid(ItemStack compareStack) + { + boolean returnValue = false; + + for (ItemStack itemStack : this.validItemStacks) + { + if (compareStack.isItemEqual(itemStack) || !this.isMetadataSensitive && compareStack.getItem() == itemStack.getItem()) + { + returnValue = true; + break; + } + } + + if (!returnValue) + { + for (Class clazz : this.validClasses) + { + if (clazz.isInstance(compareStack.getItem())) + { + returnValue = true; + break; + } + } + } + + if (this.isInverted) + { + return !returnValue; + } + + return returnValue; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotTankRefill.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotTankRefill.java new file mode 100644 index 00000000..98271fb9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotTankRefill.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; + +public class SlotTankRefill extends Slot +{ + + public SlotTankRefill(IInventory par3IInventory, int par4, int par5, int par6) + { + super(par3IInventory, par4, par5, par6); + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (this.slotNumber == 49) + { + return par1ItemStack.getItem() instanceof ItemParaChute; + } + + return OxygenUtil.isItemValidForPlayerTankInv(this.slotNumber - 45, par1ItemStack); + } + + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IClickableItem.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IClickableItem.java new file mode 100644 index 00000000..a8719ec9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IClickableItem.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface IClickableItem +{ + + /** + * Use to replicate ItemStack version of onItemRightClick as in MC1.10 + */ + ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IShiftDescription.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IShiftDescription.java new file mode 100644 index 00000000..d2ba03d3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IShiftDescription.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +public interface IShiftDescription +{ + + String getShiftDescription(int meta); + + boolean showDescription(int meta); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ISortableItem.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ISortableItem.java new file mode 100644 index 00000000..8a16202f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ISortableItem.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public interface ISortableItem +{ + + EnumSortCategoryItem getCategory(int meta); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemArmorGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemArmorGC.java new file mode 100644 index 00000000..b4f36177 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemArmorGC.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemArmorGC extends ItemArmor implements ISortableItem, GCRarity +{ + + public ItemArmorGC(EntityEquipmentSlot armorIndex, String assetSuffix) + { + super(GCItems.ARMOR_STEEL, 0, armorIndex); + this.setTranslationKey("steel_" + assetSuffix); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) + { + if (this.getArmorMaterial() == GCItems.ARMOR_STEEL) + { + if (stack.getItem() == GCItems.steelHelmet) + { + return Constants.TEXTURE_PREFIX + "textures/model/armor/steel_1.png"; + } else if (stack.getItem() == GCItems.steelChestplate || stack.getItem() == GCItems.steelBoots) + { + return Constants.TEXTURE_PREFIX + "textures/model/armor/steel_2.png"; + } else if (stack.getItem() == GCItems.steelLeggings) + { + return Constants.TEXTURE_PREFIX + "textures/model/armor/steel_3.png"; + } + } + + return null; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return repair.getItem() == GCItems.basicItem && repair.getItemDamage() == 9; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemAxeGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemAxeGC.java new file mode 100644 index 00000000..427c1307 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemAxeGC.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +import com.google.common.collect.Sets; + +public class ItemAxeGC extends ItemTool implements ISortableItem, GCRarity +{ + + private static final Set EFFECTIVE_ON = Sets.newHashSet(new Block[] + {Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER, Blocks.WOODEN_BUTTON, + Blocks.WOODEN_PRESSURE_PLATE}); + + public ItemAxeGC(String assetName) + { + super(GCItems.TOOL_STEEL, EFFECTIVE_ON); + this.setTranslationKey(assetName); + this.attackDamage = 6.0F; + this.attackSpeed = -3.0F; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Material material = state.getMaterial(); + return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getDestroySpeed(stack, state) : this.efficiency; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBase.java new file mode 100644 index 00000000..a8c68c1b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBase.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBase extends Item implements ISortableItem, GCRarity +{ + + float smeltingXP = -1F; + + public ItemBase(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack != null && this == GCItems.heavyPlatingTier1) + { + tooltip.add(GCCoreUtil.translate("item.tier1.desc")); + } else if (par1ItemStack != null && this == GCItems.dungeonFinder) + { + tooltip.add(EnumColor.RED + GCCoreUtil.translate("gui.creative_only.desc")); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } + + public Item setSmeltingXP(float f) + { + this.smeltingXP = f; + return this; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + return this.smeltingXP; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBasic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBasic.java new file mode 100644 index 00000000..11d2d1c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBasic.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBasic extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"solar_module_0", "solar_module_1", "raw_silicon", "ingot_copper", "ingot_tin", "ingot_aluminum", "compressed_copper", "compressed_tin", "compressed_aluminum", "compressed_steel", + "compressed_bronze", "compressed_iron", "wafer_solar", "wafer_basic", "wafer_advanced", "dehydrated_apple", "dehydrated_carrot", "dehydrated_melon", "dehydrated_potato", + "frequency_module", "ambient_thermal_controller"}; + public static final int WAFER_BASIC = 13; + public static final int WAFER_ADVANCED = 14; + + public ItemBasic(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getItemDamage() > 14 && itemStack.getItemDamage() < 19) + { + return this.getTranslationKey() + ".canned_food"; + } + + return this.getTranslationKey() + "." + ItemBasic.names[itemStack.getItemDamage()]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 15; i++) + { + list.add(new ItemStack(this, 1, i)); + } + for (int i = 19; i < ItemBasic.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getItemDamage() > 14 && par1ItemStack.getItemDamage() < 19) + { + tooltip.add(EnumColor.BRIGHT_GREEN + GCCoreUtil.translate(this.getTranslationKey() + "." + ItemBasic.names[par1ItemStack.getItemDamage()] + ".name")); + } else if (par1ItemStack.getItemDamage() == 19) + { + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate("gui.frequency_module.desc.0")); + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate("gui.frequency_module.desc.1")); + } + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + ItemStack itemStackIn = playerIn.getHeldItem(hand); + if (itemStackIn.getItemDamage() == 19) + { + if (playerIn instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(playerIn); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(5); + + if (gear.isEmpty() && itemStackIn.getTagCompound() == null) + { + stats.getExtendedInventory().setInventorySlotContents(5, itemStackIn.copy()); + itemStackIn = ItemStack.EMPTY; + } + } + } + + return new ActionResult<>(EnumActionResult.FAIL, itemStackIn); + } + + @Override + public boolean onLeftClickEntity(ItemStack itemStack, EntityPlayer player, Entity entity) + { + if (itemStack.getItemDamage() != 19) + { + return false; + } + + // Frequency module + if (!player.world.isRemote && entity != null && !(entity instanceof EntityPlayer)) + { + if (itemStack.getTagCompound() == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + itemStack.getTagCompound().setLong("linkedUUIDMost", entity.getUniqueID().getMostSignificantBits()); + itemStack.getTagCompound().setLong("linkedUUIDLeast", entity.getUniqueID().getLeastSignificantBits()); + + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.tracking.message"))); + return true; + } + return false; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 3: + case 4: + case 5: + return EnumSortCategoryItem.INGOT; + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + return EnumSortCategoryItem.PLATE; + case 19: + return EnumSortCategoryItem.GEAR; + } + return EnumSortCategoryItem.GENERAL; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + switch (item.getItemDamage()) + { + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + return 1F; + } + return -1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBattery.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBattery.java new file mode 100644 index 00000000..29591a87 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBattery.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemBattery extends ItemElectricBase implements ISortableItem, GCRarity +{ + + public ItemBattery(String assetName) + { + super(); + this.setMaxStackSize(4); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public float getMaxElectricityStored(ItemStack itemStack) + { + return 15000; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } + + @Override + public int getItemStackLimit(ItemStack stack) + { + if (stack.getItemDamage() < 100 || stack.hasTagCompound() && stack.getTagCompound().hasKey("electricity")) + { + return 1; + } + return this.getItemStackLimit(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBatteryInfinite.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBatteryInfinite.java new file mode 100644 index 00000000..66c31f9b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBatteryInfinite.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBatteryInfinite extends ItemElectricBase implements ISortableItem, GCRarity +{ + + public ItemBatteryInfinite(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public boolean hasEffect(ItemStack stack) + { + return true; + } + + @Override + protected void setMaxTransfer() + { + this.transferMax = 1000; + } + + @Override + public int getTierGC(ItemStack itemStack) + { + return 3; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.infinite_item.desc")); + tooltip.add(EnumColor.RED + GCCoreUtil.translate("gui.creative_only.desc")); + } + + @Override + public float getElectricityStored(ItemStack itemStack) + { + return this.getMaxElectricityStored(itemStack); + } + + @Override + public void setElectricity(ItemStack itemStack, float joules) + { + } + + @Override + public float getMaxElectricityStored(ItemStack itemStack) + { + return Float.POSITIVE_INFINITY; + } + + @Override + public float getTransfer(ItemStack itemStack) + { + return 0.0F; + } + + @Override + public float recharge(ItemStack theItem, float energy, boolean doReceive) + { + return 0F; + } + + @Override + public float discharge(ItemStack theItem, float energy, boolean doTransfer) + { + return energy; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAirLock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAirLock.java new file mode 100644 index 00000000..82b4e890 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAirLock.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockAirLock extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockAirLock(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = ""; + + switch (itemstack.getItemDamage()) + { + case 0: + { + name = "air_lock_frame"; + break; + } + case 1: + { + name = "air_lock_controller"; + break; + } + default: + name = "null"; + } + + return "tile" + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAluminumWire.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAluminumWire.java new file mode 100644 index 00000000..144900c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAluminumWire.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockAluminumWire; + +public class ItemBlockAluminumWire extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockAluminumWire(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockAluminumWire.EnumWireType.values()[itemstack.getItemDamage()].getName(); + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockArclamp.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockArclamp.java new file mode 100644 index 00000000..a5d2e916 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockArclamp.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockArclamp extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockArclamp(Block b) + { + super(b); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockBase.java new file mode 100644 index 00000000..56436779 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockBase.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasic; + +public class ItemBlockBase extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockBase(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockBasic.EnumBlockBasic.values()[Math.min(Math.max(itemstack.getItemDamage() - 3, 0), 10)].getName(); + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCargoLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCargoLoader.java new file mode 100644 index 00000000..04771f74 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCargoLoader.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockCargoLoader extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockCargoLoader(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + String name = ""; + + if (par1ItemStack.getItemDamage() < 4) + { + name = "loader"; + } else + { + name = "unloader"; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCheese.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCheese.java new file mode 100644 index 00000000..9ee1e8a1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCheese.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +public class ItemBlockCheese extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockCheese(Block par2Block) + { + super(par2Block); + this.setMaxStackSize(1); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCreativeGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCreativeGC.java new file mode 100644 index 00000000..f9a5cb47 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCreativeGC.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBlockCreativeGC extends ItemBlock implements GCRarity +{ + + public ItemBlockCreativeGC(Block block) + { + super(block); + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(EnumColor.RED + GCCoreUtil.translate("gui.creative_only.desc")); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDesc.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDesc.java new file mode 100644 index 00000000..28fe8257 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDesc.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvancedTile; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBlockDesc extends ItemBlockGC +{ + + public ItemBlockDesc(Block block) + { + super(block); + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) + { + if (!world.isRemote) + { + return; + } + + // The player could be a FakePlayer made by another mod e.g. + // LogisticsPipes + if (player instanceof EntityPlayerSP) + { + if (this.getBlock() == GCBlocks.fuelLoader) + { + ClientProxyCore.playerClientHandler.onBuild(4, (EntityPlayerSP) player); + } else if (this.getBlock() == GCBlocks.fuelLoader) + { + ClientProxyCore.playerClientHandler.onBuild(6, (EntityPlayerSP) player); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List info, ITooltipFlag flagIn) + { + if (this.getBlock() instanceof IShiftDescription && ((IShiftDescription) this.getBlock()).showDescription(stack.getItemDamage())) + { + if (ClientUtil.isKeyPressed(Minecraft.getMinecraft().gameSettings.keyBindSneak)) + { + info.addAll(FMLClientHandler.instance().getClient().fontRenderer.listFormattedStringToWidth(((IShiftDescription) this.getBlock()).getShiftDescription(stack.getItemDamage()), 150)); + } else + { + if (this.getBlock() instanceof BlockTileGC) + { + TileEntity te = ((BlockTileGC) this.getBlock()).createTileEntity(null, getBlock().getStateFromMeta(stack.getItemDamage() & 12)); + if (te instanceof TileBaseElectricBlock) + { + float powerDrawn = ((TileBaseElectricBlock) te).storage.getMaxExtract(); + if (powerDrawn > 0) + { + info.add(TextFormatting.GREEN + GCCoreUtil.translateWithFormat("item_desc.powerdraw.name", EnergyDisplayHelper.getEnergyDisplayS(powerDrawn * 20))); + } + } + } else if (this.getBlock() instanceof BlockAdvancedTile) + { + TileEntity te = ((BlockAdvancedTile) this.getBlock()).createTileEntity(worldIn, getBlock().getStateFromMeta(stack.getItemDamage() & 12)); + if (te instanceof TileBaseElectricBlock) + { + float powerDrawn = ((TileBaseElectricBlock) te).storage.getMaxExtract(); + if (powerDrawn > 0) + { + info.add(TextFormatting.GREEN + GCCoreUtil.translateWithFormat("item_desc.powerdraw.name", EnergyDisplayHelper.getEnergyDisplayS(powerDrawn * 20))); + } + } + } + info.add(GCCoreUtil.translateWithFormat("item_desc.shift.name", GameSettings.getKeyDisplayString(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode()))); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDummy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDummy.java new file mode 100644 index 00000000..fb779a8f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDummy.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockDummy extends ItemBlock implements GCRarity +{ + + public ItemBlockDummy(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int metadata = itemstack.getItemDamage(); + String blockName = ""; + + switch (metadata) + { + case 1: + blockName = "spaceStationBase"; + break; + case 2: + blockName = "launchPad"; + break; + case 3: + blockName = "nasaWorkbench"; + break; + case 4: + blockName = "solar"; + break; + case 5: + blockName = "cryogenicChamber"; + break; + default: + blockName = null; + break; + } + + return this.getBlock().getTranslationKey() + "." + blockName; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEmergencyBox.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEmergencyBox.java new file mode 100644 index 00000000..20cbf614 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEmergencyBox.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockEmergencyBox extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockEmergencyBox(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (par1ItemStack.getItemDamage() == 1) + { + return this.getBlock().getTranslationKey() + ".filled"; + } + + return this.getBlock().getTranslationKey(); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEnclosed.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEnclosed.java new file mode 100644 index 00000000..bd8ea05a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEnclosed.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.lang.reflect.Method; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed.EnumEnclosedBlockType; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; + +import appeng.api.AEApi; +import appeng.api.util.AEColor; + +public class ItemBlockEnclosed extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockEnclosed(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + String name; + + try + { + name = BlockEnclosed.EnumEnclosedBlockType.byMetadata(par1ItemStack.getItemDamage()).getName(); + name = name.substring(9, name.length()); // Remove "enclosed_" + } catch (Exception e) + { + name = "null"; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = playerIn.getHeldItem(hand); + int metadata = this.getMetadata(itemstack.getItemDamage()); + if (metadata == EnumEnclosedBlockType.ME_CABLE.getMeta() && CompatibilityManager.isAppEngLoaded()) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + BlockPos origPos = pos; + + if (!block.isReplaceable(worldIn, pos)) + { + pos = pos.offset(side); + } + + if (itemstack.getCount() == 0) + { + return EnumActionResult.FAIL; + } else if (!playerIn.canPlayerEdit(pos, side, itemstack)) + { + return EnumActionResult.FAIL; + } else if (worldIn.mayPlace(this.block, pos, false, side, null)) + { + int i = this.getMetadata(itemstack.getMetadata()); + IBlockState iblockstate1 = this.block.getStateForPlacement(worldIn, pos, side, hitX, hitY, hitZ, i, playerIn); + + if (placeBlockAt(itemstack, playerIn, worldIn, pos, side, hitX, hitY, hitZ, iblockstate1)) + { + SoundType soundType = this.getBlock().getSoundType(iblockstate, worldIn, pos, playerIn); + worldIn.playSound(playerIn, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, soundType.getPlaceSound(), SoundCategory.BLOCKS, (soundType.getVolume() + 1.0F) / 2.0F, + soundType.getPitch() * 0.8F); + itemstack.shrink(1); + + ItemStack itemME = AEApi.instance().definitions().parts().cableGlass().stack(AEColor.TRANSPARENT, 1); + itemME.setCount(2); // Fool AppEng into not destroying + // anything in the player inventory + AEApi.instance().partHelper().placeBus(itemME, origPos, side, playerIn, hand, worldIn); + // Emulate appeng.parts.PartPlacement.place( is, pos, side, + // player, w, PartPlacement.PlaceType.INTERACT_SECOND_PASS, + // 0 ); + try + { + Class clazzpp = Class.forName("appeng.parts.PartPlacement"); + Class enumPlaceType = Class.forName("appeng.parts.PartPlacement$PlaceType"); + Method methPl = clazzpp.getMethod("place", ItemStack.class, BlockPos.class, EnumFacing.class, EntityPlayer.class, EnumHand.class, World.class, enumPlaceType, int.class); + methPl.invoke(null, itemME, origPos, side, playerIn, hand, worldIn, enumPlaceType.getEnumConstants()[2], 0); + } catch (Exception e) + { + e.printStackTrace(); + } + } + return EnumActionResult.SUCCESS; + } else + { + return EnumActionResult.FAIL; + } + } else + { + return super.onItemUse(playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); + } + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGC.java new file mode 100644 index 00000000..02c17ffa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGC.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockGC extends ItemBlock implements GCRarity +{ + + public ItemBlockGC(Block block) + { + super(block); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGlassGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGlassGC.java new file mode 100644 index 00000000..5c9ebc25 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGlassGC.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockGlassGC extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockGlassGC(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) + { + if (!world.setBlockState(pos, newState, 3)) + return false; + + IBlockState state = world.getBlockState(pos); + if (state.getBlock().getClass() == this.block.getClass()) + { + setTileEntityNBT(world, player, pos, stack); + this.block.onBlockPlacedBy(world, pos, state, player, stack); + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockLandingPad.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockLandingPad.java new file mode 100644 index 00000000..5f68248d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockLandingPad.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; + +public class ItemBlockLandingPad extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockLandingPad(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + String name = ""; + + switch (par1ItemStack.getItemDamage()) + { + case 0: + name = "landing_pad"; + break; + case 1: + name = "buggy_fueler"; + break; + case 2: + name = "cargo_pad"; + break; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) + { + if (world.isRemote && stack.getItemDamage() == 0 && player instanceof EntityPlayerSP) + { + ClientProxyCore.playerClientHandler.onBuild(5, (EntityPlayerSP) player); + } + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMachine.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMachine.java new file mode 100644 index 00000000..458623da --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMachine.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; + +public class ItemBlockMachine extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockMachine(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int index = 0; + int typenum = itemstack.getItemDamage() & 12; + + if (this.getBlock() instanceof BlockMachineBase) + { + return ((BlockMachineBase) this.getBlock()).getTranslationKey(typenum); + } + return "tile.machine.0"; + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) + { + if (!world.isRemote) + { + return; + } + + int typenum = stack.getItemDamage() & 12; + + // The player could be a FakePlayer made by another mod e.g. + // LogisticsPipes + if (player instanceof EntityPlayerSP) + { + if (this.getBlock() == GCBlocks.machineBase && typenum == BlockMachine.EnumMachineType.COMPRESSOR.getMetadata()) + { + ClientProxyCore.playerClientHandler.onBuild(1, (EntityPlayerSP) player); + } else if (this.getBlock() == GCBlocks.machineBase2 && typenum == BlockMachine2.EnumMachineExtendedType.CIRCUIT_FABRICATOR.getMetadata()) + { + ClientProxyCore.playerClientHandler.onBuild(2, (EntityPlayerSP) player); + } + } + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMoon.java new file mode 100644 index 00000000..ade2c94d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMoon.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockMoon extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockMoon(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name; + + switch (itemstack.getItemDamage()) + { + case 0: + { + name = "coppermoon"; + break; + } + case 1: + { + name = "tinmoon"; + break; + } + case 2: + { + name = "cheesestone"; + break; + } + case 3: + { + name = "moondirt"; + break; + } + case 4: + { + name = "moonstone"; + break; + } + case 5: + { + name = "moongrass"; + break; + } + case 6: + { + name = "sapphiremoon"; + break; + } + case 14: + { + name = "bricks"; + break; + } + default: + name = "null"; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockNasaWorkbench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockNasaWorkbench.java new file mode 100644 index 00000000..669a2865 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockNasaWorkbench.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBlockNasaWorkbench extends ItemBlockDesc +{ + + public ItemBlockNasaWorkbench(Block block) + { + super(block); + } + + @Override + public boolean placeBlockAt(ItemStack itemStack, EntityPlayer player, World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, IBlockState state) + { + for (int x = -1; x < 2; x++) + { + for (int y = 0; y < 4; y++) + { + for (int z = -1; z < 2; z++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + if (Math.abs(x) != 1 || Math.abs(z) != 1) + { + IBlockState stateAt = world.getBlockState(new BlockPos(pos.getX() + x, pos.getY() + y, pos.getZ() + z)); + + if ((y == 0 || y == 3) && x == 0 && z == 0) + { + if (!stateAt.getMaterial().isReplaceable()) + { + if (world.isRemote) + { + FMLClientHandler.instance().getClient().ingameGUI.setOverlayMessage( + new TextComponentString(GCCoreUtil.translate("gui.warning.noroom")).setStyle(new Style().setColor(TextFormatting.RED)).getFormattedText(), false); + } + return false; + } + } else if (y != 0 && y != 3) + { + if (!stateAt.getMaterial().isReplaceable()) + { + if (world.isRemote) + { + FMLClientHandler.instance().getClient().ingameGUI.setOverlayMessage( + new TextComponentString(GCCoreUtil.translate("gui.warning.noroom")).setStyle(new Style().setColor(TextFormatting.RED)).getFormattedText(), false); + } + return false; + } + } + } + } + } + } + } + return super.placeBlockAt(itemStack, player, world, pos, facing, hitX, hitY, hitZ, state); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockOxygenCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockOxygenCompressor.java new file mode 100644 index 00000000..9bffa657 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockOxygenCompressor.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCompressor; + +public class ItemBlockOxygenCompressor extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockOxygenCompressor(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int metadata = 0; + + if (itemstack.getItemDamage() >= BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA) + { + metadata = 1; + } else if (itemstack.getItemDamage() >= BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA) + { + metadata = 0; + } + + return this.getBlock().getTranslationKey() + "." + metadata; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockPanel.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockPanel.java new file mode 100644 index 00000000..23a2c58b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockPanel.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; + +public class ItemBlockPanel extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockPanel(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + String name = ""; + + int meta = par1ItemStack.getItemDamage(); + if (meta >= BlockPanelLighting.PANELTYPES_LENGTH) + { + meta = 0; + } + + return this.getBlock().getTranslationKey() + "_" + meta; + } + + @Override + public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + { + if (!player.isSneaking()) + { + return EnumActionResult.PASS; + } + IBlockState state = world.getBlockState(pos); + if (state.getBlock().isOpaqueCube(state) && !(state.getBlock() instanceof BlockPanelLighting)) + { + ItemStack stack; + if (hand == EnumHand.OFF_HAND) + { + stack = player.inventory.offHandInventory.get(0); + } else + { + stack = player.inventory.getStackInSlot(player.inventory.currentItem); + } + if (stack.getItem() != this) + { + return EnumActionResult.FAIL; + } + if (world.isRemote) + { + BlockPanelLighting.updateClient(stack.getItemDamage(), state); + } else + { + int meta = stack.getItemDamage(); + if (meta >= BlockPanelLighting.PANELTYPES_LENGTH) + meta = 0; + GCPlayerStats stats = GCPlayerStats.get(player); + IBlockState[] panels = stats.getPanelLightingBases(); + panels[meta] = state; + } + } + + return EnumActionResult.PASS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSlabGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSlabGC.java new file mode 100644 index 00000000..15c60688 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSlabGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemSlab; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockDoubleSlabGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockSlabGC; + +public class ItemBlockSlabGC extends ItemSlab implements GCRarity +{ + + public ItemBlockSlabGC(Block block, BlockSlabGC singleSlab, BlockDoubleSlabGC doubleSlab) + { + super(block, singleSlab, doubleSlab); + } + + @Override + public int getMetadata(int meta) + { + return meta & 7; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + BlockSlabGC slab = (BlockSlabGC) Block.getBlockFromItem(itemStack.getItem()); + return super.getTranslationKey() + "." + slab.getTranslationKey(itemStack.getItemDamage()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSolar.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSolar.java new file mode 100644 index 00000000..ef1e2e64 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSolar.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockSolar; + +public class ItemBlockSolar extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockSolar(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + int index = Math.min(Math.max(par1ItemStack.getItemDamage() / 4, 0), BlockSolar.EnumSolarType.values().length); + + String name = BlockSolar.EnumSolarType.values()[index].getName(); + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockThruster.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockThruster.java new file mode 100644 index 00000000..af710479 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockThruster.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockThruster extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockThruster(Block block) + { + super(block); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockWallGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockWallGC.java new file mode 100644 index 00000000..05114141 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockWallGC.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockWallGC extends ItemBlock implements GCRarity +{ + + private static final String[] types = new String[] + {"tin", "tin", "moon", "moon_bricks", "mars", "mars_bricks"}; + + public ItemBlockWallGC(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int meta = itemstack.getItemDamage(); + + if (meta < 0 || meta >= types.length) + { + meta = 0; + } + return super.getTranslationKey() + "." + types[meta]; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBucketGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBucketGC.java new file mode 100644 index 00000000..e7c997d3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBucketGC.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.HashMap; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.ItemBucket; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.FluidTankProperties; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.capability.IFluidTankProperties; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class ItemBucketGC extends ItemBucket implements ISortableItem, ICapabilityProvider, GCRarity +{ + + public Fluid accepts; + private static HashMap allFluids = new HashMap<>(); + + public ItemBucketGC(Block block, Fluid fluid) + { + super(block); + this.setContainerItem(Items.BUCKET); + this.accepts = fluid; + allFluids.put(fluid.getName(), this); + } + + public static ItemBucketGC getBucketForFluid(Fluid fluid) + { + return allFluids.get(fluid.getName()); + } + + public static ItemStack fillBucketFrom(IFluidHandler fluidHandler) + { + FluidStack liquid = fluidHandler.drain(Fluid.BUCKET_VOLUME, false); + if (liquid != null && liquid.amount == Fluid.BUCKET_VOLUME) + { + ItemBucketGC test = ItemBucketGC.getBucketForFluid(liquid.getFluid()); + if (test != null) + { + fluidHandler.drain(Fluid.BUCKET_VOLUME, true); + return new ItemStack(test); + } + } + return null; + } + + public ItemStack drainBucketTo(IFluidHandler fluidHandler) + { + FluidStack fs = new FluidStack(this.accepts, Fluid.BUCKET_VOLUME); + int transferred = fluidHandler.fill(fs, false); + if (transferred == Fluid.BUCKET_VOLUME) + { + fluidHandler.fill(fs, true); + return new ItemStack(Items.BUCKET); + } + return ItemStack.EMPTY; + } + + @Override + @SideOnly(Side.CLIENT) + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.BUCKET; + } + + @Override + public net.minecraftforge.common.capabilities.ICapabilityProvider initCapabilities(ItemStack stack, net.minecraft.nbt.NBTTagCompound nbt) + { + return new FluidHandlerBucketGC(stack); + } + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY; + } + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY ? (T) this : null; + } + + public static class FluidHandlerBucketGC implements IFluidHandlerItem, ICapabilityProvider + { + + public static final String FLUID_NBT_KEY = "Fluid"; + + @Nonnull protected ItemStack container; + protected int capacity; + private ItemBucketGC item; + + public FluidHandlerBucketGC(@Nonnull ItemStack container) + { + container.setCount(1); + this.container = container; + this.item = (ItemBucketGC) container.getItem(); + this.capacity = Fluid.BUCKET_VOLUME; + } + + @Nonnull + @Override + public ItemStack getContainer() + { + return container; + } + + @Nullable + public FluidStack getFluid() + { + return new FluidStack(item.accepts, this.capacity); + } + + protected void setFluid(FluidStack fluid) + { + } + + @Override + public IFluidTankProperties[] getTankProperties() + { + return new IFluidTankProperties[] + {new FluidTankProperties(getFluid(), capacity)}; + } + + @Override + public int fill(FluidStack resource, boolean doFill) + { + // This is a full bucket already, can't be filled + return 0; + } + + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) + { + if (resource == null || !this.canDrainFluidType(resource)) + { + return null; + } + return drain(resource.amount, doDrain); + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) + { + if (maxDrain < this.capacity) + { + return null; + } + if (doDrain) + { + container = new ItemStack(Items.BUCKET); + } + return this.getFluid(); + } + + public boolean canFillFluidType(FluidStack fluid) + { + return false; + } + + public boolean canDrainFluidType(FluidStack fluid) + { + return FluidUtil.fluidsSame(item.accepts, fluid.getFluid(), true); + } + + protected void setContainerToEmpty() + { + container = new ItemStack(Items.BUCKET); + } + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY; + } + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY ? (T) this : null; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggy.java new file mode 100644 index 00000000..275f8107 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggy.java @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBuggy extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemBuggy(String assetName) + { + super(); + this.setTranslationKey(assetName); + this.setMaxStackSize(1); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 4; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + ItemStack itemstack = playerIn.getHeldItem(hand); + final float var4 = 1.0F; + final float var5 = playerIn.prevRotationPitch + (playerIn.rotationPitch - playerIn.prevRotationPitch) * var4; + final float var6 = playerIn.prevRotationYaw + (playerIn.rotationYaw - playerIn.prevRotationYaw) * var4; + final double var7 = playerIn.prevPosX + (playerIn.posX - playerIn.prevPosX) * var4; + final double var9 = playerIn.prevPosY + (playerIn.posY - playerIn.prevPosY) * var4 + 1.62D - playerIn.getYOffset(); + final double var11 = playerIn.prevPosZ + (playerIn.posZ - playerIn.prevPosZ) * var4; + final Vec3d var13 = new Vec3d(var7, var9, var11); + final float var14 = MathHelper.cos(-var6 / Constants.RADIANS_TO_DEGREES - (float) Math.PI); + final float var15 = MathHelper.sin(-var6 / Constants.RADIANS_TO_DEGREES - (float) Math.PI); + final float var16 = -MathHelper.cos(-var5 / Constants.RADIANS_TO_DEGREES); + final float var17 = MathHelper.sin(-var5 / Constants.RADIANS_TO_DEGREES); + final float var18 = var15 * var16; + final float var20 = var14 * var16; + final double var21 = 5.0D; + final Vec3d var23 = var13.add(var18 * var21, var17 * var21, var20 * var21); + final RayTraceResult var24 = worldIn.rayTraceBlocks(var13, var23, true); + + if (var24 == null) + { + return new ActionResult<>(EnumActionResult.PASS, itemstack); + } else + { + final Vec3d var25 = playerIn.getLook(var4); + boolean var26 = false; + final float var27 = 1.0F; + final List var28 = + worldIn.getEntitiesWithinAABBExcludingEntity(playerIn, playerIn.getEntityBoundingBox().grow(var25.x * var21, var25.y * var21, var25.z * var21).expand(var27, var27, var27)); + int var29; + + for (var29 = 0; var29 < var28.size(); ++var29) + { + final Entity var30 = (Entity) var28.get(var29); + + if (var30.canBeCollidedWith()) + { + final float var31 = var30.getCollisionBorderSize(); + final AxisAlignedBB var32 = var30.getEntityBoundingBox().expand(var31, var31, var31); + + if (var32.contains(var13)) + { + var26 = true; + } + } + } + + if (var26) + { + return new ActionResult<>(EnumActionResult.PASS, itemstack); + } else + { + if (var24.typeOfHit == RayTraceResult.Type.BLOCK) + { + var29 = var24.getBlockPos().getX(); + int var33 = var24.getBlockPos().getY(); + final int var34 = var24.getBlockPos().getZ(); + + if (worldIn.getBlockState(new BlockPos(var29, var33, var34)).getBlock() == Blocks.SNOW) + { + --var33; + } + + final EntityBuggy var35 = new EntityBuggy(worldIn, var29 + 0.5F, var33 + 1.0F, var34 + 0.5F, itemstack.getItemDamage()); + + if (!worldIn.getCollisionBoxes(var35, var35.getEntityBoundingBox().expand(-0.1D, -0.1D, -0.1D)).isEmpty()) + { + return new ActionResult<>(EnumActionResult.PASS, itemstack); + } + + if (itemstack.hasTagCompound() && itemstack.getTagCompound().hasKey("BuggyFuel")) + { + var35.buggyFuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, itemstack.getTagCompound().getInteger("BuggyFuel"))); + } + + if (!worldIn.isRemote) + { + worldIn.spawnEntity(var35); + } + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + } + + return new ActionResult<>(EnumActionResult.SUCCESS, itemstack); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getItemDamage() != 0) + { + tooltip.add(GCCoreUtil.translate("gui.buggy.storage_space") + ": " + par1ItemStack.getItemDamage() * 18); + } + + if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("BuggyFuel")) + { + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + par1ItemStack.getTagCompound().getInteger("BuggyFuel") + " / " + EntityBuggy.tankCapacity); + } + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggyMaterial.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggyMaterial.java new file mode 100644 index 00000000..0274cb79 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggyMaterial.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemBuggyMaterial extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"wheel", // 0 + "seat", // 1 + "storage"}; // 2 + + public ItemBuggyMaterial(String assetName) + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + "." + ItemBuggyMaterial.names[itemStack.getItemDamage()]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemBuggyMaterial.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanister.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanister.java new file mode 100644 index 00000000..c3e817b3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanister.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemCanister extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"tin", // 0 + "copper"}; // 1 + + public ItemCanister(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + "." + ItemCanister.names[itemStack.getItemDamage()]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 2; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGeneric.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGeneric.java new file mode 100644 index 00000000..3caa7147 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGeneric.java @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.ItemFluidContainer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.JavaUtil; + +public abstract class ItemCanisterGeneric extends ItemFluidContainer implements GCRarity +{ + + public final static int EMPTY = Fluid.BUCKET_VOLUME + 1; + private static boolean isTELoaded = CompatibilityManager.isTELoaded(); + + private String allowedFluid = null; + + public ItemCanisterGeneric(String assetName) + { + super(Fluid.BUCKET_VOLUME); + this.setMaxDamage(ItemCanisterGeneric.EMPTY); + this.setMaxStackSize(1); + this.setNoRepair(); + this.setTranslationKey(assetName); + this.setContainerItem(GCItems.oilCanister); + this.setHasSubtypes(true); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) + { + return new ItemCanisterGenericHandler(stack); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 1)); + } + } + + @Override + public ItemStack getContainerItem(ItemStack itemStack) + { + // Workaround for strange behaviour in TE Transposer + if (isTELoaded) + { + if (JavaUtil.instance.isCalledBy("thermalexpansion.block.machine.TileTransposer")) + { + return ItemStack.EMPTY; + } + } + + return new ItemStack(this.getContainerItem(), 1, ItemCanisterGeneric.EMPTY); + } + + @Override + public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) + { + if (ItemCanisterGeneric.EMPTY == par1ItemStack.getItemDamage()) + { + if (par1ItemStack.getItem() != GCItems.oilCanister) + { + this.replaceEmptyCanisterItem(par1ItemStack, GCItems.oilCanister); + } + par1ItemStack.setTagCompound(null); + } else if (par1ItemStack.getItemDamage() <= 0) + { + par1ItemStack.setItemDamage(1); + } + } + + public void setAllowedFluid(String name) + { + this.allowedFluid = name; + } + + public String getAllowedFluid() + { + return this.allowedFluid; + } + + public int fill(ItemStack container, FluidStack resource, boolean doFill) + { + if (resource == null || resource.getFluid() == null || resource.amount <= 0 || container == null || container.getItemDamage() <= 1 || !(container.getItem() instanceof ItemCanisterGeneric)) + { + return 0; + } + String fluidName = resource.getFluid().getName(); + + int capacityPlusOne = container.getItemDamage(); + if (capacityPlusOne <= 1) + { + if (capacityPlusOne < 1) + { + // It shouldn't be possible, but just in case, set this to a + // proper filled item + container.setItemDamage(1); + } + return 0; + } + if (capacityPlusOne >= ItemCanisterGeneric.EMPTY) + { + // Empty canister - find a new canister to match the fluid + for (ItemCanisterGeneric i : GCItems.canisterTypes) + { + if (fluidName.equalsIgnoreCase(i.allowedFluid)) + { + if (!doFill) + { + return Math.min(resource.amount, this.capacity); + } + + this.replaceEmptyCanisterItem(container, i); + break; + } + } + if (capacityPlusOne > ItemCanisterGeneric.EMPTY) + { + // It shouldn't be possible, but just in case, set this to a + // proper empty item + capacityPlusOne = ItemCanisterGeneric.EMPTY; + container.setItemDamage(capacityPlusOne); + } + } + + if (fluidName.equalsIgnoreCase(((ItemCanisterGeneric) container.getItem()).allowedFluid)) + { + int added = Math.min(resource.amount, capacityPlusOne - 1); + if (doFill && added > 0) + { + container.setItemDamage(Math.max(1, container.getItemDamage() - added)); + } + return added; + } + + return 0; + } + + public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) + { + if (this.allowedFluid == null || container.getItemDamage() >= ItemCanisterGeneric.EMPTY) + { + return null; + } + + FluidStack used = this.getFluid(container); + if (used != null && used.amount > maxDrain) + used.amount = maxDrain; + if (doDrain && used != null && used.amount > 0) + { + this.setNewDamage(container, container.getItemDamage() + used.amount); + } + return used; + } + + protected void setNewDamage(ItemStack container, int newDamage) + { + newDamage = Math.min(newDamage, ItemCanisterGeneric.EMPTY); + container.setItemDamage(newDamage); + if (newDamage == ItemCanisterGeneric.EMPTY) + { + if (container.getItem() != GCItems.oilCanister) + { + this.replaceEmptyCanisterItem(container, GCItems.oilCanister); + return; + } + } + } + + private void replaceEmptyCanisterItem(ItemStack container, Item newItem) + { + try + { + Class itemStack = container.getClass(); + Field itemId = itemStack.getDeclaredField(GCCoreUtil.isDeobfuscated() ? "item" : "field_151002_e"); + itemId.setAccessible(true); + itemId.set(container, newItem); + Method forgeInit = itemStack.getDeclaredMethod("forgeInit"); + forgeInit.setAccessible(true); + forgeInit.invoke(container); + } catch (Exception ignore) + { + } + } + + public FluidStack getFluid(ItemStack container) + { + String fluidName = ((ItemCanisterGeneric) container.getItem()).allowedFluid; + if (fluidName == null || container.getItemDamage() >= ItemCanisterGeneric.EMPTY) + { + return null; + } + + Fluid fluid = FluidRegistry.getFluid(fluidName); + if (fluid == null) + { + return null; + } + + return new FluidStack(fluid, ItemCanisterGeneric.EMPTY - container.getItemDamage()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGenericHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGenericHandler.java new file mode 100644 index 00000000..7187ac64 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGenericHandler.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.FluidTankProperties; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.capability.IFluidTankProperties; + +public class ItemCanisterGenericHandler implements IFluidHandlerItem, ICapabilityProvider +{ + + @Nonnull protected ItemStack container; + + public ItemCanisterGenericHandler(@Nonnull ItemStack container) + { + this.container = container; + } + + @Nonnull + @Override + public ItemStack getContainer() + { + return container; // never varies + } + + @Nullable + public FluidStack getFluid() + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + return ((ItemCanisterGeneric) container.getItem()).getFluid(container); + } + return null; + } + + protected void setFluid(FluidStack fluid) + { + if (this.canFillFluidType(fluid)) + { + ((ItemCanisterGeneric) container.getItem()).setDamage(container, ItemCanisterGeneric.EMPTY - fluid.amount); + } + } + + @Override + public IFluidTankProperties[] getTankProperties() + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + return new FluidTankProperties[] + {new FluidTankProperties(getFluid(), ItemCanisterGeneric.EMPTY - 1)}; + } + return new FluidTankProperties[0]; + } + + @Override + public int fill(FluidStack resource, boolean doFill) + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + return ((ItemCanisterGeneric) container.getItem()).fill(container, resource, doFill); + } + return 0; + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + return ((ItemCanisterGeneric) container.getItem()).drain(container, maxDrain, doDrain); + } + return null; + } + + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) + { + if (this.canDrainFluidType(resource)) + { + return ((ItemCanisterGeneric) container.getItem()).drain(container, resource.amount, doDrain); + } + return null; + } + + public boolean canFillFluidType(FluidStack fluid) + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric && fluid != null && fluid.getFluid() != null) + { + return ((ItemCanisterGeneric) container.getItem()).getAllowedFluid().equalsIgnoreCase(fluid.getFluid().getName()); + } + return false; + } + + public boolean canDrainFluidType(FluidStack fluid) + { + return this.canFillFluidType(fluid); + } + + protected void setContainerToEmpty() + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + ((ItemCanisterGeneric) container.getItem()).setDamage(container, ItemCanisterGeneric.EMPTY); + ; + } + } + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY; + } + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY ? (T) this : null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterOxygenInfinite.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterOxygenInfinite.java new file mode 100644 index 00000000..dcdcfc66 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterOxygenInfinite.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemCanisterOxygenInfinite extends Item implements IItemOxygenSupply, ISortableItem, GCRarity +{ + + public ItemCanisterOxygenInfinite(String assetName) + { + super(); + this.setMaxDamage(ItemCanisterGeneric.EMPTY); + this.setMaxStackSize(1); + this.setNoRepair(); + this.setTranslationKey(assetName); + this.setContainerItem(GCItems.oilCanister); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public boolean hasEffect(ItemStack stack) + { + return true; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.infinite_item.desc")); + tooltip.add(EnumColor.RED + GCCoreUtil.translate("gui.creative_only.desc")); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public ItemStack getContainerItem(ItemStack itemstack) + { + if (super.getContainerItem(itemstack).isEmpty()) + { + return ItemStack.EMPTY; + } + return itemstack; + } + + @Override + public int discharge(ItemStack itemStack, int amount) + { + return amount; + } + + @Override + public int getOxygenStored(ItemStack par1ItemStack) + { + return par1ItemStack.getMaxDamage(); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(2); + ItemStack gear1 = stats.getExtendedInventory().getStackInSlot(3); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(2, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } else if (gear1.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(3, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + } + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCheese.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCheese.java new file mode 100644 index 00000000..58db6b91 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCheese.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemFood; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemCheese extends ItemFood implements ISortableItem, GCRarity +{ + + public ItemCheese(int par1, float par2, boolean par3) + { + super(par1, par2, par3); + this.setTranslationKey("cheese_curd"); + } + + public ItemCheese(int par1, boolean par2) + { + this(par1, 0.6F, par2); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemDesc.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemDesc.java new file mode 100644 index 00000000..9ea7e6a6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemDesc.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class ItemDesc extends Item implements IShiftDescription +{ + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List info, ITooltipFlag flagIn) + { + if (this.showDescription(stack.getItemDamage())) + { + if (ClientUtil.isKeyPressed(Minecraft.getMinecraft().gameSettings.keyBindSneak)) + { + info.addAll(FMLClientHandler.instance().getClient().fontRenderer.listFormattedStringToWidth(this.getShiftDescription(stack.getItemDamage()), 150)); + } else + { + info.add(GCCoreUtil.translateWithFormat("item_desc.shift.name", GameSettings.getKeyDisplayString(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode()))); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemEmergencyKit.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemEmergencyKit.java new file mode 100644 index 00000000..f3e856a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemEmergencyKit.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import net.minecraftforge.items.ItemHandlerHelper; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemEmergencyKit extends ItemDesc implements ISortableItem, GCRarity +{ + + private static final int SIZE = 9; + + public ItemEmergencyKit(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(false); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + for (int i = 0; i < SIZE; i++) + { + ItemStack newGear = getContents(i); + if (newGear.getItem() instanceof IClickableItem) + { + newGear = ((IClickableItem) newGear.getItem()).onItemRightClick(newGear, worldIn, player); + } + if (newGear.getCount() >= 1) + { + ItemHandlerHelper.giveItemToPlayer(player, newGear, 0); + } + } + + itemStack.setCount(0); + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + public static ItemStack getContents(int slot) + { + switch (slot) + { + case 0: + return new ItemStack(GCItems.oxMask); + case 1: + return new ItemStack(GCItems.oxygenGear); + case 2: + return new ItemStack(GCItems.oxTankLight); + case 3: + return new ItemStack(GCItems.oxTankLight); + case 4: + return new ItemStack(GCItems.steelPickaxe); + case 5: + return new ItemStack(GCItems.foodItem, 1, 3); + case 6: + return PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.HEALING); + case 7: + return PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.LONG_NIGHT_VISION); + case 8: + return new ItemStack(GCItems.parachute, 1, 13); + default: + return null; + } + } + + public static Object[] getRecipe() + { + Object[] result = new Object[] + {"EAB", "CID", "FGH", 'A', null, 'B', null, 'C', null, 'D', null, 'E', null, 'F', null, 'G', null, 'H', null, 'I', null}; + for (int i = 0; i < SIZE; i++) + { + result[i * 2 + 4] = getContents(i); + } + return result; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate("item.emergency_kit.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFlag.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFlag.java new file mode 100644 index 00000000..66150268 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFlag.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.SoundType; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItemCustom; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class ItemFlag extends Item implements IHoldableItemCustom, ISortableItem, GCRarity +{ + + public int placeProgress; + + public ItemFlag(String assetName) + { + super(); + this.setMaxDamage(0); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entity, int timeLeft) + { + final int useTime = this.getMaxItemUseDuration(stack) - timeLeft; + + boolean placed = false; + + if (!(entity instanceof EntityPlayer)) + { + return; + } + + EntityPlayer player = (EntityPlayer) entity; + + final RayTraceResult var12 = this.rayTrace(worldIn, player, true); + + float var7 = useTime / 20.0F; + var7 = (var7 * var7 + var7 * 2.0F) / 3.0F; + + if (var7 > 1.0F) + { + var7 = 1.0F; + } + + if (var7 == 1.0F && var12 != null && var12.typeOfHit == RayTraceResult.Type.BLOCK) + { + final BlockPos pos = var12.getBlockPos(); + + if (!worldIn.isRemote) + { + final EntityFlag flag = new EntityFlag(worldIn, pos.getX() + 0.5F, pos.getY() + 1.0F, pos.getZ() + 0.5F, (int) (entity.rotationYaw - 90)); + + if (worldIn.getEntitiesWithinAABB(EntityFlag.class, new AxisAlignedBB(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 3, pos.getZ() + 1)).isEmpty()) + { + worldIn.spawnEntity(flag); + flag.setType(stack.getItemDamage()); + flag.setOwner(PlayerUtil.getName(player)); + worldIn.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundType.METAL.getBreakSound(), SoundCategory.BLOCKS, SoundType.METAL.getVolume(), SoundType.METAL.getPitch() + 2.0F); + placed = true; + } else + { + entity.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.flag.already_placed"))); + } + } + + if (placed) + { + final int var2 = this.getInventorySlotContainItem(player, stack); + + if (var2 >= 0 && !player.capabilities.isCreativeMode) + { + player.inventory.mainInventory.get(var2).shrink(1); + } + } + } + } + + private int getInventorySlotContainItem(EntityPlayer player, ItemStack stack) + { + for (int var2 = 0; var2 < player.inventory.mainInventory.size(); ++var2) + { + if (!player.inventory.mainInventory.get(var2).isEmpty() && player.inventory.mainInventory.get(var2).isItemEqual(stack)) + { + return var2; + } + } + + return -1; + } + + @Override + public int getMaxItemUseDuration(ItemStack par1ItemStack) + { + return 72000; + } + + @Override + public EnumAction getItemUseAction(ItemStack par1ItemStack) + { + return EnumAction.NONE; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + playerIn.setActiveHand(hand); + return new ActionResult<>(EnumActionResult.SUCCESS, playerIn.getHeldItem(hand)); + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return "item.flag"; + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public Vector3 getLeftHandRotation(EntityPlayer player) + { + return new Vector3((float) Math.PI + 1.3F, 0.5F, (float) Math.PI / 5.0F); + } + + @Override + public Vector3 getRightHandRotation(EntityPlayer player) + { + return new Vector3((float) Math.PI + 1.3F, -0.5F, (float) Math.PI / 5.0F); + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return false; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFood.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFood.java new file mode 100644 index 00000000..e7e4a860 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFood.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemFood extends net.minecraft.item.ItemFood implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"dehydrated_apple", "dehydrated_carrot", "dehydrated_melon", "dehydrated_potato", "cheese_slice", "burger_bun", "beef_patty_raw", "beef_patty_cooked", "cheeseburger", "canned_beef"}; + + public ItemFood(String assetName) + { + super(2, 0.3F, false); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getItemDamage() < 4) + { + return "item.basic_item.canned_food"; + } else + { + return "item.food." + ItemFood.names[itemStack.getItemDamage()]; + } + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 4; i++) + { + list.add(new ItemStack(this, 1, i)); + } + list.add(new ItemStack(this, 1, 9)); + for (int i = 4; i < 9; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getItemDamage() < 4) + { + tooltip.add(EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("item.basic_item." + ItemFood.names[par1ItemStack.getItemDamage()] + ".name")); + } else if (par1ItemStack.getItemDamage() == 8) + { + tooltip.add(EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("item.food.cheeseburger.desc")); + } + } + + @Override + public int getHealAmount(ItemStack par1ItemStack) + { + switch (par1ItemStack.getItemDamage()) + { + case 0: + return 8; + case 1: + return 8; + case 2: + return 4; + case 3: + return 2; + case 4: + return 2; + case 5: + return 4; + case 6: + return 2; + case 7: + return 4; + case 8: + return 14; + case 9: + return 8; + default: + return 0; + } + } + + @Override + public float getSaturationModifier(ItemStack par1ItemStack) + { + switch (par1ItemStack.getItemDamage()) + { + case 0: + return 0.3F; + case 1: + return 0.6F; + case 2: + return 0.3F; + case 3: + return 0.3F; + case 4: + return 0.1F; + case 5: + return 0.8F; + case 6: + return 0.3F; + case 7: + return 0.6F; + case 8: + return 1.0F; + case 9: + return 0.6F; + default: + return 0.0F; + } + } + + @Override + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) + { + if (entityLiving instanceof EntityPlayer) + { + ((EntityPlayer) entityLiving).getFoodStats().addStats(this, stack); + } + worldIn.playSound(null, entityLiving.posX, entityLiving.posY, entityLiving.posZ, SoundEvents.ENTITY_PLAYER_BURP, SoundCategory.PLAYERS, 0.5F, worldIn.rand.nextFloat() * 0.1F + 0.9F); + if (!worldIn.isRemote && (stack.getItemDamage() < 4 || stack.getItemDamage() == 9)) + { + entityLiving.entityDropItem(new ItemStack(GCItems.canister, 1, 0), 0.0F); + } + stack.shrink(1); + return stack; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuel.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuel.java new file mode 100644 index 00000000..49ac6d94 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuel.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.item.Item; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemFuel extends Item implements GCRarity +{ + + public ItemFuel(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuelCanister.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuelCanister.java new file mode 100644 index 00000000..dd26d61d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuelCanister.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemFuelCanister extends ItemCanisterGeneric implements ISortableItem, GCRarity +{ + + public ItemFuelCanister(String assetName) + { + super(assetName); + this.setAllowedFluid(ConfigManagerCore.useOldFuelFluidID ? "fuelgc" : "fuel"); + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getItemDamage() == 1) + { + return "item.fuel_canister"; + } + + return "item.fuel_canister_partial"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemHoeGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemHoeGC.java new file mode 100644 index 00000000..ff6aa443 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemHoeGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemHoe; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemHoeGC extends ItemHoe implements ISortableItem, GCRarity +{ + + public ItemHoeGC(String assetName) + { + super(GCItems.TOOL_STEEL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemIC2Compat.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemIC2Compat.java new file mode 100644 index 00000000..f7d1aacd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemIC2Compat.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemIC2Compat extends Item implements ISortableItem, GCRarity +{ + + public static final String[] types = + {"dust", "ore_purified", "ore_crushed", "dust_small"}; + public static final String[] names = + {"alu", "titanium"}; + + public ItemIC2Compat(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(CompatibilityManager.isIc2Loaded()); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + int meta = itemStack.getItemDamage(); + if (!CompatibilityManager.isIc2Loaded()) + meta = 0; + return this.getTranslationKey() + "." + ItemIC2Compat.types[meta % 4] + "_" + ItemIC2Compat.names[meta / 4]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList par3List) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + par3List.add(new ItemStack(this, 1, 0)); + if (CompatibilityManager.isIc2Loaded()) + { + par3List.add(new ItemStack(this, 1, 1)); + par3List.add(new ItemStack(this, 1, 2)); + par3List.add(new ItemStack(this, 1, 7)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemKey.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemKey.java new file mode 100644 index 00000000..28effc80 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemKey.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IKeyItem; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemKey extends Item implements IKeyItem, ISortableItem, GCRarity +{ + + public ItemKey(String assetName) + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + ".t1"; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getTier(ItemStack keyStack) + { + return 1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.KEYS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteorChunk.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteorChunk.java new file mode 100644 index 00000000..f62237db --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteorChunk.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemMeteorChunk extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"meteor_chunk", "meteor_chunk_hot"}; + + public static final int METEOR_BURN_TIME = 45 * 20; + + public ItemMeteorChunk(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.MATERIALS); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void onUpdate(ItemStack itemstack, World world, Entity entity, int par4, boolean par5) + { + if (itemstack.getItemDamage() == 1 && !world.isRemote) + { + if (itemstack.hasTagCompound()) + { + float meteorBurnTime = itemstack.getTagCompound().getFloat("MeteorBurnTimeF"); + + if (meteorBurnTime >= 0.5F) + { + meteorBurnTime -= 0.5F; + itemstack.getTagCompound().setFloat("MeteorBurnTimeF", meteorBurnTime); + } else + { + itemstack.setItemDamage(0); + itemstack.setTagCompound(null); + } + } else + { + itemstack.setTagCompound(new NBTTagCompound()); + itemstack.getTagCompound().setFloat("MeteorBurnTimeF", ItemMeteorChunk.METEOR_BURN_TIME); + } + } + } + + @Override + public void onCreated(ItemStack itemstack, World world, EntityPlayer entityPlayer) + { + super.onCreated(itemstack, world, entityPlayer); + + if (itemstack.getItemDamage() == 1) + { + if (!itemstack.hasTagCompound()) + { + itemstack.setTagCompound(new NBTTagCompound()); + } + + itemstack.getTagCompound().setFloat("MeteorBurnTimeF", ItemMeteorChunk.METEOR_BURN_TIME); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack itemstack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (itemstack.getItemDamage() > 0) + { + float burnTime = 0.0F; + + if (itemstack.hasTagCompound()) + { + float meteorBurnTime = itemstack.getTagCompound().getFloat("MeteorBurnTimeF"); + burnTime = Math.round(meteorBurnTime / 10.0F) / 2.0F; + } else + { + burnTime = 45.0F; + } + + tooltip.add(GCCoreUtil.translate("item.hot_description.name") + " " + burnTime + GCCoreUtil.translate("gui.seconds")); + } + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return "item." + ItemMeteorChunk.names[itemStack.getItemDamage()]; + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (!player.capabilities.isCreativeMode) + { + itemStack.shrink(1); + } + + world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.NEUTRAL, 1.0F, 0.0001F / (Item.itemRand.nextFloat() * 0.1F)); + + if (!world.isRemote) + { + EntityMeteorChunk meteor = new EntityMeteorChunk(world, player, 1.0F); + + if (itemStack.getItemDamage() > 0) + { + meteor.setFire(20); + meteor.isHot = true; + } + meteor.canBePickedUp = player.capabilities.isCreativeMode ? 2 : 1; + world.spawnEntity(meteor); + } + + player.swingArm(hand); + + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteoricIron.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteoricIron.java new file mode 100644 index 00000000..1a54bf9f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteoricIron.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemMeteoricIron extends Item implements ISortableItem, GCRarity +{ + + public ItemMeteoricIron(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMoon.java new file mode 100644 index 00000000..a38de1cb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMoon.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemMoon extends ItemDesc implements ISortableItem, GCRarity +{ + + public static String[] names = + {"meteoric_iron_ingot", "compressed_meteoric_iron", "lunar_sapphire"}; + + public ItemMoon(String str) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(str); + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemMoon.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemMoon.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 0: + return EnumSortCategoryItem.INGOT; + case 2: + return EnumSortCategoryItem.GENERAL; + default: + return EnumSortCategoryItem.PLATE; + } + } + + @Override + public String getShiftDescription(int meta) + { + if (meta == 2) + { + return GCCoreUtil.translate("item.lunar_sapphire.description"); + } + + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return meta == 2; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + switch (item.getItemDamage()) + { + case 1: + return 1F; + } + return -1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOilCanister.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOilCanister.java new file mode 100644 index 00000000..25c13233 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOilCanister.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemOilCanister extends ItemCanisterGeneric implements ISortableItem +{ + + public ItemOilCanister(String assetName) + { + super(assetName); + this.setAllowedFluid(ConfigManagerCore.useOldOilFluidID ? "oilgc" : "oil"); + this.setContainerItem(this); + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getMaxDamage() - itemStack.getItemDamage() == 0) + { + return "item.empty_liquid_canister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.oil_canister"; + } + + return "item.oil_canister_partial"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("gui.message.oil.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, this.getMaxDamage())); + list.add(new ItemStack(this, 1, 1)); + } + } + + @Override + public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) + { + if (ItemCanisterGeneric.EMPTY == par1ItemStack.getItemDamage()) + { + par1ItemStack.setTagCompound(null); + } else if (par1ItemStack.getItemDamage() <= 0) + { + par1ItemStack.setItemDamage(1); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenGear.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenGear.java new file mode 100644 index 00000000..7b4fb113 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenGear.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemOxygenGear extends Item implements ISortableItem, IClickableItem, GCRarity +{ + + public ItemOxygenGear(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + if (itemStack.getItem() instanceof IClickableItem) + { + itemStack = ((IClickableItem) itemStack.getItem()).onItemRightClick(itemStack, worldIn, player); + } + + if (itemStack.isEmpty()) + { + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(1); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(1, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + + return itemStack; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenMask.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenMask.java new file mode 100644 index 00000000..0c16b2b1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenMask.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemOxygenMask extends Item implements ISortableItem, IClickableItem, GCRarity +{ + + public ItemOxygenMask(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + if (itemStack.getItem() instanceof IClickableItem) + { + itemStack = ((IClickableItem) itemStack.getItem()).onItemRightClick(itemStack, worldIn, player); + } + + if (itemStack.isEmpty()) + { + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(0); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(0, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + + return itemStack; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenTank.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenTank.java new file mode 100644 index 00000000..8784a5a7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenTank.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemOxygenTank extends Item implements ISortableItem, IClickableItem, GCRarity +{ + + public ItemOxygenTank(int tier, String assetName) + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(tier * 900); + this.setTranslationKey(assetName); + this.setNoRepair(); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, this.getMaxDamage())); + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(GCCoreUtil.translate("gui.tank.oxygen_remaining") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + if (itemStack.getItem() instanceof IClickableItem) + { + itemStack = ((IClickableItem) itemStack.getItem()).onItemRightClick(itemStack, worldIn, player); + } + + if (itemStack.isEmpty()) + { + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(2); + ItemStack gear1 = stats.getExtendedInventory().getStackInSlot(3); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(2, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } else if (gear1.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(3, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + + return itemStack; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemParaChute.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemParaChute.java new file mode 100644 index 00000000..6372f352 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemParaChute.java @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +import static net.minecraft.item.EnumDyeColor.BLACK; +import static net.minecraft.item.EnumDyeColor.BLUE; +import static net.minecraft.item.EnumDyeColor.BROWN; +import static net.minecraft.item.EnumDyeColor.CYAN; +import static net.minecraft.item.EnumDyeColor.GRAY; +import static net.minecraft.item.EnumDyeColor.GREEN; +import static net.minecraft.item.EnumDyeColor.LIGHT_BLUE; +import static net.minecraft.item.EnumDyeColor.LIME; +import static net.minecraft.item.EnumDyeColor.MAGENTA; +import static net.minecraft.item.EnumDyeColor.ORANGE; +import static net.minecraft.item.EnumDyeColor.PINK; +import static net.minecraft.item.EnumDyeColor.PURPLE; +import static net.minecraft.item.EnumDyeColor.RED; +import static net.minecraft.item.EnumDyeColor.SILVER; +import static net.minecraft.item.EnumDyeColor.WHITE; +import static net.minecraft.item.EnumDyeColor.YELLOW; + +public class ItemParaChute extends Item implements ISortableItem, IClickableItem, GCRarity +{ + + public static final String[] names = + {"plain", // 0 + "black", // 1 + "blue", // 2 + "lime", // 3 + "brown", // 4 + "darkblue", // 5 + "darkgray", // 6 + "darkgreen", // 7 + "gray", // 8 + "magenta", // 9 + "orange", // 10 + "pink", // 11 + "purple", // 12 + "red", // 13 + "teal", // 14 + "yellow"}; // 15 + + public ItemParaChute(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemParaChute.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + "_" + ItemParaChute.names[itemStack.getItemDamage()]; + } + + public static EnumDyeColor getDyeEnumFromParachuteDamage(int damage) + { + switch (damage) + { + case 1: + return BLACK; + case 13: + return RED; + case 7: + return GREEN; + case 4: + return BROWN; + case 5: + return BLUE; + case 12: + return PURPLE; + case 14: + return CYAN; + case 8: + return SILVER; + case 6: + return GRAY; + case 11: + return PINK; + case 3: + return LIME; + case 15: + return YELLOW; + case 2: + return LIGHT_BLUE; + case 9: + return MAGENTA; + case 10: + return ORANGE; + case 0: + return WHITE; + } + + return WHITE; + } + + public static int getParachuteDamageValueFromDyeEnum(EnumDyeColor color) + { + switch (color) + { + case BLACK: + return 1; + case RED: + return 13; + case GREEN: + return 7; + case BROWN: + return 4; + case BLUE: + return 5; + case PURPLE: + return 12; + case CYAN: + return 14; + case SILVER: + return 8; + case GRAY: + return 6; + case PINK: + return 11; + case LIME: + return 3; + case YELLOW: + return 15; + case LIGHT_BLUE: + return 2; + case MAGENTA: + return 9; + case ORANGE: + return 10; + case WHITE: + return 0; + } + + return -1; + } + + public static int getParachuteDamageValueFromDye(int meta) + { + return getParachuteDamageValueFromDyeEnum(EnumDyeColor.byDyeDamage(meta)); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + if (itemStack.getItem() instanceof IClickableItem) + { + itemStack = ((IClickableItem) itemStack.getItem()).onItemRightClick(itemStack, worldIn, player); + } + + if (itemStack.isEmpty()) + { + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + public ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(4); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(4, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + + return itemStack; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPickaxeGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPickaxeGC.java new file mode 100644 index 00000000..1d339c5e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPickaxeGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemPickaxe; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemPickaxeGC extends ItemPickaxe implements ISortableItem, GCRarity +{ + + public ItemPickaxeGC(String assetName) + { + super(GCItems.TOOL_STEEL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPreLaunchChecklist.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPreLaunchChecklist.java new file mode 100644 index 00000000..090cacc5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPreLaunchChecklist.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemPreLaunchChecklist extends Item implements ISortableItem, GCRarity +{ + + public ItemPreLaunchChecklist(String assetName) + { + super(); + this.setTranslationKey(assetName); + this.setMaxStackSize(1); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack != null && this == GCItems.heavyPlatingTier1) + { + tooltip.add(GCCoreUtil.translate("item.tier1.desc")); + } + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + ItemStack itemStack = playerIn.getHeldItem(hand); + + if (worldIn.isRemote) + { + playerIn.openGui(GalacticraftCore.instance, GuiIdsCore.PRE_LAUNCH_CHECKLIST, playerIn.world, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ); + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemRocketEngineGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemRocketEngineGC.java new file mode 100644 index 00000000..4a3d8a28 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemRocketEngineGC.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemRocketEngineGC extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"tier1engine", // 0 + "tier1booster"}; // 1 + + public ItemRocketEngineGC(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + "." + ItemRocketEngineGC.names[itemStack.getItemDamage()]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemRocketEngineGC.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSchematic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSchematic.java new file mode 100644 index 00000000..566eedd6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSchematic.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemHangingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicItem; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemSchematic extends ItemHangingEntity implements ISchematicItem, ISortableItem, GCRarity +{ + + public ItemSchematic(String assetName) + { + super(EntityHangingSchematic.class); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 2; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + switch (par1ItemStack.getItemDamage()) + { + case 0: + tooltip.add(GCCoreUtil.translate("schematic.moonbuggy.name")); + break; + case 1: + tooltip.add(GCCoreUtil.translate("schematic.rocket_t2.name")); + break; + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.SCHEMATIC; + } + + @Override + public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack stack = playerIn.getHeldItem(hand); + BlockPos blockpos = pos.offset(facing); + + if (facing != EnumFacing.DOWN && facing != EnumFacing.UP && playerIn.canPlayerEdit(blockpos, facing, stack)) + { + EntityHangingSchematic entityhanging = this.createEntity(worldIn, blockpos, facing, this.getIndex(stack.getItemDamage())); + + if (entityhanging != null && entityhanging.onValidSurface()) + { + if (!worldIn.isRemote) + { + entityhanging.playPlaceSound(); + worldIn.spawnEntity(entityhanging); + entityhanging.sendToClient(worldIn, blockpos); + } + + stack.shrink(1); + } + + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.FAIL; + } + } + + private EntityHangingSchematic createEntity(World worldIn, BlockPos pos, EnumFacing clickedSide, int index) + { + return new EntityHangingSchematic(worldIn, pos, clickedSide, index); + } + + /** + * Higher tiers should override - see ItemSchematicTier2 for example + **/ + protected int getIndex(int damage) + { + return damage; + } + + /** + * Make sure the number of these will match the index values + */ + public static void registerSchematicItems() + { + SchematicRegistry.registerSchematicItem(new ItemStack(GCItems.schematic, 1, 0)); + SchematicRegistry.registerSchematicItem(new ItemStack(GCItems.schematic, 1, 1)); + } + + /** + * Make sure the order of these will match the index values + */ + @SideOnly(value = Side.CLIENT) + public static void registerTextures() + { + SchematicRegistry.registerTexture(new ResourceLocation(Constants.ASSET_PREFIX, "textures/items/schematic_buggy.png")); + SchematicRegistry.registerTexture(new ResourceLocation(Constants.ASSET_PREFIX, "textures/items/schematic_rocket_t2.png")); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSensorGlasses.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSensorGlasses.java new file mode 100644 index 00000000..217bed41 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSensorGlasses.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.ISensorGlassesArmor; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemSensorGlasses extends ItemArmor implements ISortableItem, ISensorGlassesArmor, GCRarity +{ + + public ItemSensorGlasses(String assetName) + { + super(GCItems.ARMOR_SENSOR_GLASSES, 0, EntityEquipmentSlot.HEAD); + this.setTranslationKey(assetName); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) + { + return Constants.TEXTURE_PREFIX + "textures/model/armor/sensor_1.png"; + } + + @Override + @SideOnly(Side.CLIENT) + public void renderHelmetOverlay(ItemStack stack, EntityPlayer player, ScaledResolution resolution, float partialTicks) + { + OverlaySensorGlasses.renderSensorGlassesMain(stack, player, resolution, partialTicks); + OverlaySensorGlasses.renderSensorGlassesValueableBlocks(stack, player, resolution, partialTicks); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSpadeGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSpadeGC.java new file mode 100644 index 00000000..ab106d19 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSpadeGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemSpade; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemSpadeGC extends ItemSpade implements ISortableItem, GCRarity +{ + + public ItemSpadeGC(String assetName) + { + super(GCItems.TOOL_STEEL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSwordGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSwordGC.java new file mode 100644 index 00000000..bdc5c0b5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSwordGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemSword; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemSwordGC extends ItemSword implements ISortableItem, GCRarity +{ + + public ItemSwordGC(String assetName) + { + super(GCItems.TOOL_STEEL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemTier1Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemTier1Rocket.java new file mode 100644 index 00000000..0d73789a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemTier1Rocket.java @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemTier1Rocket extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemTier1Rocket(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack stack = playerIn.getHeldItem(hand); + boolean padFound = false; + TileEntity tile = null; + + if (worldIn.isRemote && playerIn instanceof EntityPlayerSP) + { + ClientProxyCore.playerClientHandler.onBuild(8, (EntityPlayerSP) playerIn); + return EnumActionResult.PASS; + } else + { + float centerX = -1; + float centerY = -1; + float centerZ = -1; + + for (int i = -1; i < 2; i++) + { + for (int j = -1; j < 2; j++) + { + BlockPos pos1 = pos.add(i, 0, j); + IBlockState state = worldIn.getBlockState(pos1); + final Block id = state.getBlock(); + int meta = id.getMetaFromState(state); + + if (id == GCBlocks.landingPadFull && meta == 0) + { + padFound = true; + tile = worldIn.getTileEntity(pos.add(i, 0, j)); + + centerX = pos.getX() + i + 0.5F; + centerY = pos.getY() + 0.4F; + centerZ = pos.getZ() + j + 0.5F; + + break; + } + } + + if (padFound) + { + break; + } + } + + if (padFound) + { + if (!placeRocketOnPad(stack, worldIn, tile, centerX, centerY, centerZ)) + { + return EnumActionResult.FAIL; + } + + if (!playerIn.capabilities.isCreativeMode) + { + stack.shrink(1); + } + return EnumActionResult.SUCCESS; + } else + { + return EnumActionResult.PASS; + } + } + } + + public static boolean placeRocketOnPad(ItemStack stack, World worldIn, TileEntity tile, float centerX, float centerY, float centerZ) + { + // Check whether there is already a rocket on the pad + if (tile instanceof TileEntityLandingPad) + { + if (((TileEntityLandingPad) tile).getDockedEntity() != null) + { + return false; + } + } else + { + return false; + } + + final EntityTier1Rocket spaceship = new EntityTier1Rocket(worldIn, centerX, centerY, centerZ, EnumRocketType.values()[stack.getItemDamage()]); + + spaceship.setPosition(spaceship.posX, spaceship.posY + spaceship.getOnPadYOffset(), spaceship.posZ); + worldIn.spawnEntity(spaceship); + + if (spaceship.rocketType.getPreFueled()) + { + spaceship.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, spaceship.getMaxFuel()), true); + } else if (stack.hasTagCompound() && stack.getTagCompound().hasKey("RocketFuel")) + { + spaceship.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, stack.getTagCompound().getInteger("RocketFuel")), true); + } + + return true; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < EnumRocketType.values().length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + EnumRocketType type = EnumRocketType.values()[par1ItemStack.getItemDamage()]; + + if (!type.getTooltip().isEmpty()) + { + tooltip.add(type.getTooltip()); + } + + if (type.getPreFueled()) + { + tooltip.add(EnumColor.RED + "\u00a7o" + GCCoreUtil.translate("gui.creative_only.desc")); + } + + if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("RocketFuel")) + { + EntityTier1Rocket rocket = new EntityTier1Rocket(FMLClientHandler.instance().getWorldClient(), 0, 0, 0, EnumRocketType.values()[par1ItemStack.getItemDamage()]); + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + par1ItemStack.getTagCompound().getInteger("RocketFuel") + " / " + rocket.fuelTank.getCapacity()); + } + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ROCKET; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemUniversalWrench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemUniversalWrench.java new file mode 100644 index 00000000..ba6d8c40 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemUniversalWrench.java @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.Optional; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvanced; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectrical; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemUniversalWrench extends Item implements ISortableItem, GCRarity +{ + + public ItemUniversalWrench(String assetName) + { + super(); + this.setTranslationKey(assetName); + this.setMaxStackSize(1); + this.setMaxDamage(256); + } + + @Optional.Method(modid = "buildcraftcore") + public boolean canWrench(EntityPlayer player, EnumHand hand, ItemStack wrench, RayTraceResult rayTrace) + { + return true; + } + + @Optional.Method(modid = "buildcraftcore") + public void wrenchUsed(EntityPlayer player, EnumHand hand, ItemStack wrench, RayTraceResult rayTrace) + { + ItemStack stack = player.inventory.getCurrentItem(); + + if (!stack.isEmpty()) + { + stack.damageItem(1, player); + + if (stack.getItemDamage() >= stack.getMaxDamage()) + { + stack.shrink(1); + } + + if (stack.getCount() <= 0) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + } + } + } + + public void wrenchUsed(EntityPlayer entityPlayer, BlockPos pos) + { + + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public boolean doesSneakBypassUse(ItemStack stack, IBlockAccess world, BlockPos pos, EntityPlayer player) + { + return true; + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) + { + if (world.isRemote && player instanceof EntityPlayerSP) + { + ClientProxyCore.playerClientHandler.onBuild(3, (EntityPlayerSP) player); + } + } + + @Override + public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + { + if (world.isRemote || player.isSneaking()) + { + return EnumActionResult.PASS; + } + + IBlockState state = world.getBlockState(pos); + + if (state.getBlock() instanceof BlockAdvanced) + { + if (((BlockAdvanced) state.getBlock()).onUseWrench(world, pos, player, hand, player.getHeldItem(hand), side, hitX, hitY, hitZ)) + { + return EnumActionResult.SUCCESS; + } + } + + for (Map.Entry, Comparable> entry : state.getProperties().entrySet()) + { + IProperty iProperty = entry.getKey(); + if (iProperty instanceof PropertyEnum && iProperty.getName().equals("facing") && state.getValue(iProperty) instanceof EnumFacing) + { + PropertyEnum property = (PropertyEnum) iProperty; + Collection values = property.getAllowedValues(); + if (values.size() > 0) + { + boolean done = false; + EnumFacing currentFacing = state.getValue(property); + + // Special case: horizontal facings should be rotated around + // the Y axis - this includes most of GC's own blocks + if (values.size() == 4 && !values.contains(EnumFacing.UP) && !values.contains(EnumFacing.DOWN)) + { + EnumFacing newFacing = currentFacing.rotateY(); + if (values.contains(newFacing)) + { + world.setBlockState(pos, state.withProperty(property, newFacing)); + done = true; + } + } + if (!done) + { + // General case: rotation will follow the order in + // FACING (may be a bit jumpy) + List list = Arrays.asList(values.toArray(new EnumFacing[0])); + int i = list.indexOf(currentFacing) + 1; + EnumFacing newFacing = list.get(i >= list.size() ? 0 : i); + world.setBlockState(pos, state.withProperty(property, newFacing)); + } + + ItemStack stack = player.getHeldItem(hand).copy(); + stack.damageItem(1, player); + player.setHeldItem(hand, stack); + + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileBaseUniversalElectrical) + ((TileBaseUniversalElectrical) tile).updateFacing(); + + return EnumActionResult.SUCCESS; + } + return EnumActionResult.PASS; + } + } + + return EnumActionResult.PASS; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionEvents.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionEvents.java new file mode 100644 index 00000000..cd193b1f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionEvents.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.EnumPacketDirection; +import net.minecraft.network.INetHandler; +import net.minecraft.network.Packet; + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; +import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent; +import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientDisconnectionFromServerEvent; +import net.minecraftforge.fml.common.network.FMLNetworkEvent.ServerConnectionFromClientEvent; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.world.ChunkLoadingCallback; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +import org.apache.logging.log4j.LogManager; + +public class ConnectionEvents +{ + + private static boolean clientConnected = false; + + static + { + EnumConnectionState.STATES_BY_CLASS.put(PacketSimple.class, EnumConnectionState.PLAY); + registerPacket(EnumPacketDirection.CLIENTBOUND, PacketSimple.class); + } + + protected static EnumConnectionState registerPacket(EnumPacketDirection direction, Class> packetClass) + { + BiMap>> bimap = (BiMap>>) EnumConnectionState.PLAY.directionMaps.get(direction); + + if (bimap == null) + { + bimap = HashBiMap.create(); + EnumConnectionState.PLAY.directionMaps.put(direction, bimap); + } + + if (bimap.containsValue(packetClass)) + { + String s = direction + " packet " + packetClass + " is already known to ID " + bimap.inverse().get(packetClass); + LogManager.getLogger().fatal(s); + throw new IllegalArgumentException(s); + } else + { + bimap.put(Integer.valueOf(bimap.size()), packetClass); + return EnumConnectionState.PLAY; + } + } + + @SubscribeEvent + public void onPlayerLogin(PlayerLoggedInEvent event) + { + ChunkLoadingCallback.onPlayerLogin(event.player); + + if (event.player instanceof EntityPlayerMP) + { + EntityPlayerMP thePlayer = (EntityPlayerMP) event.player; + GCPlayerStats stats = GCPlayerStats.get(thePlayer); + SpaceStationWorldData.checkAllStations(thePlayer, stats); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_CLIENT_ID, GCCoreUtil.getDimensionID(thePlayer.world), new Object[] + {WorldUtil.spaceStationDataToString(stats.getSpaceStationDimensionData())}), thePlayer); + SpaceRace raceForPlayer = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(thePlayer)); + if (raceForPlayer != null) + { + SpaceRaceManager.sendSpaceRaceData(thePlayer.server, thePlayer, raceForPlayer); + } + } + + if (event.player.world.provider instanceof WorldProviderSpaceStation && event.player instanceof EntityPlayerMP) + { + ((WorldProviderSpaceStation) event.player.world.provider).getSpinManager().sendPackets((EntityPlayerMP) event.player); + } + } + + @SubscribeEvent + public void onConnectionReceived(ServerConnectionFromClientEvent event) + { + if (ConfigManagerCore.enableDebug) + { + Integer[] idList = (Integer[]) WorldUtil.getPlanetList().get(0); + String ids = ""; + for (int j = 0; j < idList.length; j++) + { + ids += idList[j].toString() + " "; + } + GalacticraftCore.logger.info("Galacticraft server sending dimension IDs to connecting client: " + ids); + } + event.getManager().sendPacket(ConnectionPacket.createDimPacket(WorldUtil.getPlanetListInts())); + event.getManager().sendPacket(ConnectionPacket.createSSPacket(WorldUtil.getSpaceStationListInts())); + event.getManager().sendPacket(ConnectionPacket.createConfigPacket(ConfigManagerCore.getServerConfigOverride())); + } + + @SubscribeEvent + public void onConnectionOpened(ClientConnectedToServerEvent event) + { + if (!event.isLocal()) + { + ConnectionEvents.clientConnected = true; + } + } + + @SubscribeEvent + public void onConnectionClosed(ClientDisconnectionFromServerEvent event) + { + TickHandlerClient.menuReset = true; + if (ConnectionEvents.clientConnected) + { + ConnectionEvents.clientConnected = false; + WorldUtil.unregisterPlanets(); + WorldUtil.unregisterSpaceStations(); + ConfigManagerCore.restoreClientConfigOverrideable(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionPacket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionPacket.java new file mode 100644 index 00000000..03f801dc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionPacket.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.PacketBuffer; + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.network.FMLEventChannel; +import net.minecraftforge.fml.common.network.FMLNetworkEvent; +import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +public class ConnectionPacket +{ + + public static final String CHANNEL = "galacticraft"; + public static FMLEventChannel bus; + + public void handle(ByteBuf payload, EntityPlayer player) + { + int packetId = payload.readByte(); + List data = new ArrayList(); + switch (packetId) + { + case 101: + int length = payload.readInt(); + for (int i = 0; i < length; i++) + { + data.add(payload.readInt()); + } + WorldUtil.decodePlanetsListClient(data); + break; + case 102: + int llength = payload.readInt(); + for (int i = 0; i < llength; i++) + { + data.add(payload.readInt()); + } + WorldUtil.decodeSpaceStationListClient(data); + break; + case 103: + try + { + data = NetworkUtil.decodeData(EnumSimplePacket.C_UPDATE_CONFIGS.getDecodeClasses(), payload); + ConfigManagerCore.saveClientConfigOverrideable(); + ConfigManagerCore.setConfigOverride(data); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Server-set configs received OK on client."); + } + } catch (Exception e) + { + System.err.println("[Galacticraft] Error handling connection packet - maybe the player's Galacticraft version does not match the server version?"); + e.printStackTrace(); + } + break; + default: + } + if (payload.readInt() != 3519) + { + GalacticraftCore.logger.error("Packet completion problem for connection packet " + packetId + " - maybe the player's Galacticraft version does not match the server version?"); + } + } + + public static FMLProxyPacket createDimPacket(Integer[] dims) + { + ArrayList data = new ArrayList<>(); + for (Integer dim : dims) + { + data.add(dim); + } + return createPacket((byte) 101, data); + } + + public static FMLProxyPacket createSSPacket(Integer[] dims) + { + ArrayList data = new ArrayList<>(); + Collections.addAll(data, dims); + return createPacket((byte) 102, data); + } + + public static FMLProxyPacket createPacket(byte packetId, Collection data) + { + PacketBuffer payload = new PacketBuffer(Unpooled.buffer()); + + payload.writeByte(packetId); + payload.writeInt(data.size()); + for (Integer i : data) + { + payload.writeInt(i.intValue()); + } + payload.writeInt(3519); // signature + return new FMLProxyPacket(payload, CHANNEL); + } + + public static FMLProxyPacket createConfigPacket(List data) + { + PacketBuffer payload = new PacketBuffer(Unpooled.buffer()); + payload.writeByte(103); + try + { + NetworkUtil.encodeData(payload, data); + } catch (IOException e) + { + e.printStackTrace(); + } + payload.writeInt(3519); // signature + return new FMLProxyPacket(payload, CHANNEL); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onPacketData(FMLNetworkEvent.ClientCustomPacketEvent event) + { + FMLProxyPacket pkt = event.getPacket(); + + onFMLProxyPacketData(event.getManager(), pkt, Minecraft.getMinecraft().player); + } + + @SubscribeEvent + public void onPacketData(FMLNetworkEvent.ServerCustomPacketEvent event) + { + FMLProxyPacket pkt = event.getPacket(); + + onFMLProxyPacketData(event.getManager(), pkt, ((NetHandlerPlayServer) event.getHandler()).player); + } + + public void onFMLProxyPacketData(NetworkManager manager, FMLProxyPacket packet, EntityPlayer player) + { + try + { + if ((packet == null) || (packet.payload() == null)) + { + throw new RuntimeException("Empty packet sent to Galacticraft channel"); + } + ByteBuf data = packet.payload(); + this.handle(data, player); + } catch (Exception e) + { + GalacticraftCore.logger.error("GC login packet handler: Failed to read packet"); + GalacticraftCore.logger.error(e.toString()); + e.printStackTrace(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftChannelHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftChannelHandler.java new file mode 100644 index 00000000..b0077f97 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftChannelHandler.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.EnumMap; + +import net.minecraft.entity.player.EntityPlayerMP; + +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.network.FMLEmbeddedChannel; +import net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec; +import net.minecraftforge.fml.common.network.FMLOutboundHandler; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; + +public class GalacticraftChannelHandler extends FMLIndexedMessageToMessageCodec +{ + + private EnumMap channels; + + private GalacticraftChannelHandler() + { + this.addDiscriminator(0, PacketSimple.class); + this.addDiscriminator(1, PacketRotateRocket.class); + this.addDiscriminator(2, PacketDynamic.class); + this.addDiscriminator(3, PacketFluidNetworkUpdate.class); + this.addDiscriminator(4, PacketEntityUpdate.class); + this.addDiscriminator(5, PacketDynamicInventory.class); + } + + public static GalacticraftChannelHandler init() + { + GalacticraftChannelHandler channelHandler = new GalacticraftChannelHandler(); + channelHandler.channels = NetworkRegistry.INSTANCE.newChannel(Constants.MOD_ID_CORE, channelHandler, new GalacticraftPacketHandler()); + return channelHandler; + } + + @Override + public void encodeInto(ChannelHandlerContext ctx, IPacket msg, ByteBuf target) throws Exception + { + msg.encodeInto(target); + } + + @Override + public void decodeInto(ChannelHandlerContext ctx, ByteBuf source, IPacket msg) + { + try + { + msg.decodeInto(source); + } catch (IndexOutOfBoundsException ex) + { + GalacticraftCore.logger.error("Incomplete Galacticraft entity packet: dimension " + msg.getDimensionID()); + } + } + + /** + * Send this message to everyone.

Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + */ + public void sendToAll(IPacket message) + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALL); + this.channels.get(Side.SERVER).writeOutbound(message); + } + + /** + * Send this message to the specified player.

Adapted from CPW's code + * in cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + * @param player The player to send it to + */ + public void sendTo(IPacket message, EntityPlayerMP player) + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.PLAYER); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(player); + this.channels.get(Side.SERVER).writeOutbound(message); + } + + /** + * Send this message to everyone within a certain range of a point.

+ * Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + * @param point The + * {@link net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint} + * around which to send + */ + public void sendToAllAround(IPacket message, NetworkRegistry.TargetPoint point) + { + try + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(point); + this.channels.get(Side.SERVER).writeOutbound(message); + } catch (Exception e) + { + GalacticraftCore.logger.error("Forge error when sending network packet to nearby players - this is not a Galacticraft bug, does another mod make fake players?"); + e.printStackTrace(); + } + } + + /** + * Send this message to everyone within the supplied dimension.

Adapted + * from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + * @param dimensionID The dimension id to target + */ + public void sendToDimension(IPacket message, int dimensionID) + { + try + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.DIMENSION); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(dimensionID); + this.channels.get(Side.SERVER).writeOutbound(message); + } catch (Exception e) + { + GalacticraftCore.logger.error("Forge error when sending network packet to all players in dimension - this is not a Galacticraft bug, does another mod make fake players?"); + e.printStackTrace(); + } + } + + /** + * Send this message to the server.

Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + */ + public void sendToServer(IPacket message) + { + if (FMLCommonHandler.instance().getSide() != Side.CLIENT) + { + return; + } + this.channels.get(Side.CLIENT).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.TOSERVER); + this.channels.get(Side.CLIENT).writeOutbound(message); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftPacketHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftPacketHandler.java new file mode 100644 index 00000000..0476b5f3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftPacketHandler.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.Map; +import java.util.Queue; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.INetHandler; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.google.common.collect.Queues; + +import io.netty.channel.ChannelHandler.Sharable; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; + +@Sharable +public class GalacticraftPacketHandler extends SimpleChannelInboundHandler +{ + + private final Map>> packetMap; + private static volatile int livePacketCount = 0; + + public GalacticraftPacketHandler() + { + Map>> map = Maps.newHashMap(); + for (Side side : Side.values()) + { + Map> sideMap = new ConcurrentHashMap>(); + map.put(side, sideMap); + } + + packetMap = ImmutableMap.copyOf(map); + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + TickHandlerClient.addPacketHandler(this); + } + TickHandlerServer.addPacketHandler(this); + } + + public void unload(World world) + { + Side side = world.isRemote ? Side.CLIENT : Side.SERVER; + int dimId = GCCoreUtil.getDimensionID(world); + Queue queue = getQueue(side, dimId); + queue.clear(); + } + + public void tick(World world) + { + PacketPlayerPair pair; + Side side = world.isRemote ? Side.CLIENT : Side.SERVER; + int dimID = GCCoreUtil.getDimensionID(world); + Queue queue = getQueue(side, dimID); + while ((pair = queue.poll()) != null) + { + switch (side) + { + case CLIENT: + pair.getPacket().handleClientSide(pair.getPlayer()); + break; + case SERVER: + pair.getPacket().handleServerSide(pair.getPlayer()); + break; + } + } + } + + @Override + protected void channelRead0(ChannelHandlerContext ctx, IPacket msg) throws Exception + { + INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get(); + Side side = ctx.channel().attr(NetworkRegistry.CHANNEL_SOURCE).get(); + EntityPlayer player = GalacticraftCore.proxy.getPlayerFromNetHandler(netHandler); + + if (player == null) + { + return; + } + + if (side != null) + { + getQueue(side, msg.getDimensionID()).add(new PacketPlayerPair(msg, player)); + livePacketCount++; + } + } + + private Queue getQueue(Side side, int dimID) + { + Map> map = packetMap.get(side); + if (!map.containsKey(dimID)) + { + map.put(dimID, Queues.newConcurrentLinkedQueue()); + } + return map.get(dimID); + } + + private final class PacketPlayerPair + { + + private IPacket packet; + private EntityPlayer player; + + public PacketPlayerPair(IPacket packet, EntityPlayer player) + { + this.packet = packet; + this.player = player; + } + + public IPacket getPacket() + { + return packet; + } + + public void setPacket(IPacket packet) + { + this.packet = packet; + } + + public EntityPlayer getPlayer() + { + return player; + } + + public void setPlayer(EntityPlayer player) + { + this.player = player; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacket.java new file mode 100644 index 00000000..f63b987a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacket.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import net.minecraft.entity.player.EntityPlayer; + +import io.netty.buffer.ByteBuf; + +public interface IPacket +{ + + void encodeInto(ByteBuf buffer); + + void decodeInto(ByteBuf buffer); + + void handleClientSide(EntityPlayer player); + + void handleServerSide(EntityPlayer player); + + int getDimensionID(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacketReceiver.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacketReceiver.java new file mode 100644 index 00000000..d1bc472f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacketReceiver.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.ArrayList; + +import io.netty.buffer.ByteBuf; + +public interface IPacketReceiver +{ + + /** + * Note this can be called during the init constructor of the entity's + * superclass, if this is a subclass of the IPacketReceiver entity. So make + * sure any fields referenced in getNetworkedData() are either in the + * superclass, or add some null checks!! + */ + void getNetworkedData(ArrayList sendData); + + void decodePacketdata(ByteBuf buffer); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/NetworkUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/NetworkUtil.java new file mode 100644 index 00000000..6140c150 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/NetworkUtil.java @@ -0,0 +1,603 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collection; +import java.util.UUID; + +import net.minecraft.entity.Entity; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.common.network.ByteBufUtils; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorage; +import micdoodle8.mods.galacticraft.core.tile.FluidTankGC; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; + +import com.google.common.math.DoubleMath; + +import io.netty.buffer.ByteBuf; + +public class NetworkUtil +{ + + public static void encodeData(ByteBuf buffer, Collection sendData) throws IOException + { + for (Object dataValue : sendData) + { + if (dataValue instanceof Integer) + { + buffer.writeInt((Integer) dataValue); + } else if (dataValue instanceof Float) + { + buffer.writeFloat((Float) dataValue); + } else if (dataValue instanceof Double) + { + buffer.writeDouble((Double) dataValue); + } else if (dataValue instanceof Byte) + { + buffer.writeByte((Byte) dataValue); + } else if (dataValue instanceof Boolean) + { + buffer.writeBoolean((Boolean) dataValue); + } else if (dataValue instanceof String) + { + ByteBufUtils.writeUTF8String(buffer, (String) dataValue); + } else if (dataValue instanceof Short) + { + buffer.writeShort((Short) dataValue); + } else if (dataValue instanceof Long) + { + buffer.writeLong((Long) dataValue); + } else if (dataValue instanceof EnergyStorage) + { + EnergyStorage storage = (EnergyStorage) dataValue; + buffer.writeFloat(storage.getCapacityGC()); + buffer.writeFloat(storage.getMaxReceive()); + buffer.writeFloat(storage.getMaxExtract()); + buffer.writeFloat(storage.getEnergyStoredGC()); + } else if (dataValue instanceof NBTTagCompound) + { + NetworkUtil.writeNBTTagCompound((NBTTagCompound) dataValue, buffer); + } else if (dataValue instanceof FluidTankGC) + { + FluidTankGC tankGC = (FluidTankGC) dataValue; + BlockPos pos = tankGC.getTilePosition(); + buffer.writeInt(pos.getX()); + buffer.writeInt(pos.getY()); + buffer.writeInt(pos.getZ()); + NetworkUtil.writeFluidTank((FluidTank) dataValue, buffer); + } else if (dataValue instanceof FluidTank) + { + NetworkUtil.writeFluidTank((FluidTank) dataValue, buffer); + } else if (dataValue instanceof Entity) + { + buffer.writeInt(((Entity) dataValue).getEntityId()); + } else if (dataValue instanceof Vector3) + { + buffer.writeDouble(((Vector3) dataValue).x); + buffer.writeDouble(((Vector3) dataValue).y); + buffer.writeDouble(((Vector3) dataValue).z); + } else if (dataValue instanceof BlockVec3) + { + buffer.writeInt(((BlockVec3) dataValue).x); + buffer.writeInt(((BlockVec3) dataValue).y); + buffer.writeInt(((BlockVec3) dataValue).z); + } else if (dataValue instanceof byte[]) + { + int size = ((byte[]) dataValue).length; + buffer.writeInt(size); + int pos = buffer.writerIndex(); + buffer.capacity(pos + size); + buffer.setBytes(pos, (byte[]) dataValue); + buffer.writerIndex(pos + size); + } else if (dataValue instanceof UUID) + { + buffer.writeLong(((UUID) dataValue).getMostSignificantBits()); + buffer.writeLong(((UUID) dataValue).getLeastSignificantBits()); + } else if (dataValue instanceof Collection) + { + NetworkUtil.encodeData(buffer, (Collection) dataValue); + } else if (dataValue instanceof FlagData) + { + buffer.writeInt(((FlagData) dataValue).getWidth()); + buffer.writeInt(((FlagData) dataValue).getHeight()); + + for (int i = 0; i < ((FlagData) dataValue).getWidth(); i++) + { + for (int j = 0; j < ((FlagData) dataValue).getHeight(); j++) + { + Vector3 vec = ((FlagData) dataValue).getColorAt(i, j); + buffer.writeByte((byte) (vec.x * 256 - 128)); + buffer.writeByte((byte) (vec.y * 256 - 128)); + buffer.writeByte((byte) (vec.z * 256 - 128)); + } + } + } else if (dataValue instanceof Integer[]) + { + Integer[] array = (Integer[]) dataValue; + buffer.writeInt(array.length); + + for (int i = 0; i < array.length; i++) + { + buffer.writeInt(array[i]); + } + } else if (dataValue instanceof String[]) + { + String[] array = (String[]) dataValue; + buffer.writeInt(array.length); + + for (int i = 0; i < array.length; i++) + { + ByteBufUtils.writeUTF8String(buffer, array[i]); + } + } else if (dataValue instanceof Footprint[]) + { + Footprint[] array = (Footprint[]) dataValue; + buffer.writeInt(array.length); + + for (int i = 0; i < array.length; i++) + { + buffer.writeInt(array[i].dimension); + buffer.writeFloat((float) array[i].position.x); + buffer.writeFloat((float) array[i].position.y + 1); + buffer.writeFloat((float) array[i].position.z); + buffer.writeFloat(array[i].rotation); + buffer.writeShort(array[i].age); + ByteBufUtils.writeUTF8String(buffer, array[i].owner); + } + } else if (dataValue instanceof EnumFacing) + { + buffer.writeInt(((EnumFacing) dataValue).getIndex()); + } else if (dataValue instanceof BlockPos) + { + BlockPos pos = (BlockPos) dataValue; + buffer.writeInt(pos.getX()); + buffer.writeInt(pos.getY()); + buffer.writeInt(pos.getZ()); + } else if (dataValue instanceof EnumDyeColor) + { + buffer.writeInt(((EnumDyeColor) dataValue).getDyeDamage()); + } else + { + if (dataValue == null) + { + GalacticraftCore.logger.error("Cannot construct PacketSimple with null data, this is a bug."); + } + GalacticraftCore.logger.info("Could not find data type to encode!: " + dataValue); + } + } + } + + public static ArrayList decodeData(Class[] types, ByteBuf buffer) + { + ArrayList objList = new ArrayList(); + + for (Class clazz : types) + { + if (clazz.equals(Integer.class)) + { + objList.add(buffer.readInt()); + } else if (clazz.equals(Float.class)) + { + objList.add(buffer.readFloat()); + } else if (clazz.equals(Double.class)) + { + objList.add(buffer.readDouble()); + } else if (clazz.equals(Byte.class)) + { + objList.add(buffer.readByte()); + } else if (clazz.equals(Boolean.class)) + { + objList.add(buffer.readBoolean()); + } else if (clazz.equals(String.class)) + { + objList.add(ByteBufUtils.readUTF8String(buffer)); + } else if (clazz.equals(Short.class)) + { + objList.add(buffer.readShort()); + } else if (clazz.equals(Long.class)) + { + objList.add(buffer.readLong()); + } else if (clazz.equals(byte[].class)) + { + int size = buffer.readInt(); + byte[] bytes = new byte[size]; + buffer.readBytes(bytes, 0, size); + objList.add(bytes); + } else if (clazz.equals(EnergyStorage.class)) + { + EnergyStorage storage = new EnergyStorage(buffer.readFloat(), buffer.readFloat(), buffer.readFloat()); + storage.setEnergyStored(buffer.readFloat()); + objList.add(storage); + } else if (clazz.equals(NBTTagCompound.class)) + { + try + { + objList.add(NetworkUtil.readNBTTagCompound(buffer)); + } catch (IOException e) + { + e.printStackTrace(); + } + } else if (clazz.equals(BlockVec3.class)) + { + objList.add(new BlockVec3(buffer.readInt(), buffer.readInt(), buffer.readInt())); + } else if (clazz.equals(UUID.class)) + { + objList.add(new UUID(buffer.readLong(), buffer.readLong())); + } else if (clazz.equals(Vector3.class)) + { + objList.add(new Vector3(buffer.readDouble(), buffer.readDouble(), buffer.readDouble())); + } else if (clazz.equals(FlagData.class)) + { + int width = buffer.readInt(); + int height = buffer.readInt(); + FlagData flagData = new FlagData(width, height); + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + flagData.setColorAt(i, j, new Vector3(buffer.readByte() + 128, buffer.readByte() + 128, buffer.readByte() + 128)); + } + } + + objList.add(flagData); + } else if (clazz.equals(Integer[].class)) + { + int size = buffer.readInt(); + + for (int i = 0; i < size; i++) + { + objList.add(buffer.readInt()); + } + } else if (clazz.equals(String[].class)) + { + int size = buffer.readInt(); + + for (int i = 0; i < size; i++) + { + objList.add(ByteBufUtils.readUTF8String(buffer)); + } + } else if (clazz.equals(Footprint[].class)) + { + int size = buffer.readInt(); + + for (int i = 0; i < size; i++) + { + objList.add(new Footprint(buffer.readInt(), new Vector3(buffer.readFloat(), buffer.readFloat(), buffer.readFloat()), buffer.readFloat(), buffer.readShort(), + ByteBufUtils.readUTF8String(buffer), -1)); + } + } else if (clazz.equals(EnumFacing.class)) + { + objList.add(EnumFacing.byIndex(buffer.readInt())); + } else if (clazz.equals(BlockPos.class)) + { + objList.add(new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt())); + } else if (clazz.equals(EnumDyeColor.class)) + { + objList.add(EnumDyeColor.byDyeDamage(buffer.readInt())); + } + } + + return objList; + } + + public static Object getFieldValueFromStream(Field field, ByteBuf buffer, World world) throws IOException + { + Class dataValue = field.getType(); + + if (dataValue.equals(int.class)) + { + return buffer.readInt(); + } else if (dataValue.equals(float.class)) + { + return buffer.readFloat(); + } else if (dataValue.equals(double.class)) + { + return buffer.readDouble(); + } else if (dataValue.equals(byte.class)) + { + return buffer.readByte(); + } else if (dataValue.equals(boolean.class)) + { + return buffer.readBoolean(); + } else if (dataValue.equals(String.class)) + { + return ByteBufUtils.readUTF8String(buffer); + } else if (dataValue.equals(short.class)) + { + return buffer.readShort(); + } else if (dataValue.equals(Long.class)) + { + return buffer.readLong(); + } else if (dataValue.equals(NBTTagCompound.class)) + { + return NetworkUtil.readNBTTagCompound(buffer); + } else if (dataValue.equals(FluidTankGC.class)) + { + return NetworkUtil.readFluidTankGC(buffer, world); + } else if (dataValue.equals(FluidTank.class)) + { + return NetworkUtil.readFluidTank(buffer); + } else if (dataValue.equals(Vector3.class)) + { + return new Vector3(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()); + } else if (dataValue.equals(BlockVec3.class)) + { + return new BlockVec3(buffer.readInt(), buffer.readInt(), buffer.readInt()); + } else if (dataValue.equals(UUID.class)) + { + return new UUID(buffer.readLong(), buffer.readLong()); + } else if (dataValue.equals(byte[].class)) + { + byte[] bytes = new byte[buffer.readInt()]; + for (int i = 0; i < bytes.length; i++) + { + bytes[i] = buffer.readByte(); + } + return bytes; + } else if (dataValue.equals(EnergyStorage.class)) + { + float capacity = buffer.readFloat(); + float maxReceive = buffer.readFloat(); + float maxExtract = buffer.readFloat(); + EnergyStorage storage = new EnergyStorage(capacity, maxReceive, maxExtract); + storage.setEnergyStored(buffer.readFloat()); + return storage; + } else if (dataValue.equals(EnumFacing.class)) + { + return EnumFacing.byIndex(buffer.readInt()); + } else if (dataValue.equals(BlockPos.class)) + { + return new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + } else if (dataValue.equals(EnumDyeColor.class)) + { + return EnumDyeColor.byDyeDamage(buffer.readInt()); + } else + { + Class c = dataValue; + + while (c != null) + { + if (c.equals(Entity.class)) + { + return world.getEntityByID(buffer.readInt()); + } + + c = c.getSuperclass(); + } + } + + throw new NullPointerException("Field type not found: " + field.getType().getSimpleName()); + } + + public static ItemStack readItemStack(ByteBuf buffer) throws IOException + { + ItemStack itemstack = ItemStack.EMPTY; + short itemID = buffer.readShort(); + + if (itemID >= 0) + { + byte stackSize = buffer.readByte(); + short meta = buffer.readShort(); + itemstack = new ItemStack(Item.getItemById(itemID), stackSize, meta); + if (buffer.readBoolean()) + { + itemstack.setTagCompound(readNBTTagCompound(buffer)); + } + } + + return itemstack; + } + + public static void writeItemStack(ItemStack itemStack, ByteBuf buffer) throws IOException + { + if (itemStack.isEmpty()) + { + buffer.writeShort(-1); + } else + { + buffer.writeShort(Item.getIdFromItem(itemStack.getItem())); + buffer.writeByte(itemStack.getCount()); + buffer.writeShort(itemStack.getItemDamage()); + NBTTagCompound nbttagcompound = null; + + if (itemStack.getItem().isDamageable() || itemStack.getItem().getShareTag()) + { + nbttagcompound = itemStack.getTagCompound(); + } + + buffer.writeBoolean(nbttagcompound != null); + if (nbttagcompound != null) + { + NetworkUtil.writeNBTTagCompound(nbttagcompound, buffer); + } + } + } + + public static NBTTagCompound readNBTTagCompound(ByteBuf buffer) throws IOException + { + try + { + int length = buffer.readInt(); + byte[] compressed = new byte[length]; + buffer.readBytes(compressed); + ByteArrayInputStream bais = new ByteArrayInputStream(compressed); + return CompressedStreamTools.readCompressed(bais); + } catch (Exception e) + { + e.printStackTrace(); + return null; + } + } + + public static void writeNBTTagCompound(NBTTagCompound nbt, ByteBuf buffer) throws IOException + { + try + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + CompressedStreamTools.writeCompressed(nbt, baos); + byte[] compressed = baos.toByteArray(); + buffer.writeInt(compressed.length); + buffer.writeBytes(compressed); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + public static void writeFluidTank(FluidTank fluidTank, ByteBuf buffer) throws IOException + { + if (fluidTank == null) + { + buffer.writeInt(0); + ByteBufUtils.writeUTF8String(buffer, ""); + buffer.writeInt(0); + } else + { + buffer.writeInt(fluidTank.getCapacity()); + ByteBufUtils.writeUTF8String(buffer, fluidTank.getFluid() == null ? "" : fluidTank.getFluid().getFluid().getName()); + buffer.writeInt(fluidTank.getFluidAmount()); + } + } + + public static FluidTankGC readFluidTankGC(ByteBuf buffer, World world) throws IOException + { + BlockPos pos = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + TileEntity tile = world.getTileEntity(pos); + int capacity = buffer.readInt(); + String fluidName = ByteBufUtils.readUTF8String(buffer); + FluidTankGC fluidTank = new FluidTankGC(capacity, tile); + int amount = buffer.readInt(); + + if (fluidName.equals("")) + { + fluidTank.setFluid(null); + } else + { + Fluid fluid = FluidRegistry.getFluid(fluidName); + fluidTank.setFluid(new FluidStack(fluid, amount)); + } + + return fluidTank; + } + + public static FluidTank readFluidTank(ByteBuf buffer) throws IOException + { + int capacity = buffer.readInt(); + String fluidName = ByteBufUtils.readUTF8String(buffer); + FluidTank fluidTank = new FluidTank(capacity); + int amount = buffer.readInt(); + + if (fluidName.equals("")) + { + fluidTank.setFluid(null); + } else + { + Fluid fluid = FluidRegistry.getFluid(fluidName); + fluidTank.setFluid(new FluidStack(fluid, amount)); + } + + return fluidTank; + } + + public static boolean fuzzyEquals(Object a, Object b) + { + if ((a == null) != (b == null)) + { + return false; + } else if (a == null) + { + return true; + } else if (a instanceof Float && b instanceof Float) + { + float af = (Float) a; + float bf = (Float) b; + return af == bf || Math.abs(af - bf) < 0.01F; + } else if (a instanceof Double && b instanceof Double) + { + return DoubleMath.fuzzyEquals((Double) a, (Double) b, 0.01); + } else if (a instanceof Entity && b instanceof Entity) + { + Entity a2 = (Entity) a; + Entity b2 = (Entity) b; + return fuzzyEquals(a2.getEntityId(), b2.getEntityId()); + } else if (a instanceof Vector3 && b instanceof Vector3) + { + Vector3 a2 = (Vector3) a; + Vector3 b2 = (Vector3) b; + return fuzzyEquals(a2.x, b2.x) && fuzzyEquals(a2.y, b2.y) && fuzzyEquals(a2.z, b2.z); + } else if (a instanceof EnergyStorage && b instanceof EnergyStorage) + { + EnergyStorage a2 = (EnergyStorage) a; + EnergyStorage b2 = (EnergyStorage) b; + return fuzzyEquals(a2.getEnergyStoredGC(), b2.getEnergyStoredGC()) && fuzzyEquals(a2.getCapacityGC(), b2.getCapacityGC()) && fuzzyEquals(a2.getMaxReceive(), b2.getMaxReceive()) + && fuzzyEquals(a2.getMaxExtract(), b2.getMaxExtract()); + } else if (a instanceof FluidTank && b instanceof FluidTank) + { + FluidTank a2 = (FluidTank) a; + FluidTank b2 = (FluidTank) b; + FluidStack fluidA = a2.getFluid(); + FluidStack fluidB = b2.getFluid(); + return fuzzyEquals(a2.getCapacity(), b2.getCapacity()) && fuzzyEquals(fluidA != null ? fluidA.getFluid().getName() : "", fluidB != null ? fluidB.getFluid().getName() : "") + && fuzzyEquals(a2.getFluidAmount(), b2.getFluidAmount()); + } else + { + return a.equals(b); + } + } + + public static Object cloneNetworkedObject(Object a) + { + // We only need to clone mutable objects + if (a instanceof EnergyStorage) + { + EnergyStorage prevStorage = (EnergyStorage) a; + EnergyStorage storage = new EnergyStorage(prevStorage.getCapacityGC(), prevStorage.getMaxReceive(), prevStorage.getMaxExtract()); + storage.setEnergyStored(prevStorage.getEnergyStoredGC()); + return storage; + } else if (a instanceof FluidTankGC) + { + FluidTankGC prevTank = (FluidTankGC) a; + FluidTankGC tank = new FluidTankGC(prevTank.getFluid(), prevTank.getCapacity(), prevTank.getTile()); + return tank; + } else if (a instanceof FluidTank) + { + FluidTank prevTank = (FluidTank) a; + FluidStack prevFluid = prevTank.getFluid(); + prevFluid = prevFluid == null ? null : prevFluid.copy(); + FluidTank tank = new FluidTank(prevFluid, prevTank.getCapacity()); + return tank; + } else + { + return a; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketBase.java new file mode 100644 index 00000000..0779109c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketBase.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import io.netty.buffer.ByteBuf; + +public abstract class PacketBase implements IPacket +{ + + public static final int INVALID_DIMENSION_ID = Integer.MIN_VALUE + 12; + private int dimensionID; + + public PacketBase() + { + this.dimensionID = INVALID_DIMENSION_ID; + } + + public PacketBase(int dimensionID) + { + this.dimensionID = dimensionID; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + if (dimensionID == INVALID_DIMENSION_ID) + { + throw new IllegalStateException("Invalid Dimension ID! [GC]"); + } + buffer.writeInt(this.dimensionID); + } + + @Override + public void decodeInto(ByteBuf buffer) + { + this.dimensionID = buffer.readInt(); + } + + @Override + public int getDimensionID() + { + return dimensionID; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamic.java new file mode 100644 index 00000000..aed31999 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamic.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.IOException; +import java.util.ArrayList; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +/** + * PacketDynamic is used for updating data for regularly updating Entities and + * TileEntities Two types of PacketDynamic: Type 0: the identifier is an Entity + * ID Type 1: the identifier is a TileEntity's BlockPos + */ +public class PacketDynamic extends PacketBase +{ + + private int type; + private Object identifier; + private ArrayList sendData; + private ByteBuf payloadData; + + public PacketDynamic() + { + super(); + } + + public PacketDynamic(Entity entity) + { + super(GCCoreUtil.getDimensionID(entity.world)); + assert entity instanceof IPacketReceiver : "Entity does not implement " + IPacketReceiver.class.getSimpleName(); + this.type = 0; + this.identifier = new Integer(entity.getEntityId()); + this.sendData = new ArrayList(); + ((IPacketReceiver) entity).getNetworkedData(this.sendData); + } + + public PacketDynamic(TileEntity tile) + { + super(GCCoreUtil.getDimensionID(tile.getWorld())); + assert tile instanceof IPacketReceiver : "TileEntity does not implement " + IPacketReceiver.class.getSimpleName(); + this.type = 1; + this.identifier = tile.getPos(); + this.sendData = new ArrayList(); + ((IPacketReceiver) tile).getNetworkedData(this.sendData); + } + + public boolean isEmpty() + { + return sendData.isEmpty(); + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type); + + switch (this.type) + { + case 0: + buffer.writeInt((Integer) this.identifier); + break; + case 1: + BlockPos bp = (BlockPos) this.identifier; + buffer.writeInt(bp.getX()); + buffer.writeInt(bp.getY()); + buffer.writeInt(bp.getZ()); + break; + } + + ByteBuf payloadData = Unpooled.buffer(); + + try + { + NetworkUtil.encodeData(payloadData, this.sendData); + } catch (IOException e) + { + e.printStackTrace(); + } + + int readableBytes = payloadData.readableBytes(); + buffer.writeInt(readableBytes); + buffer.writeBytes(payloadData); + } + + @Override + public void decodeInto(ByteBuf buffer) throws IndexOutOfBoundsException + { + super.decodeInto(buffer); + this.type = buffer.readInt(); +// World world = GalacticraftCore.proxy.getWorldForID(this.getDimensionID()); +// +// if (world == null) +// { +// GalacticraftCore.logger.error("Failed to get world for dimension ID: " + this.getDimensionID()); +// } +// + switch (this.type) + { + case 0: + this.identifier = new Integer(buffer.readInt()); + + int length = buffer.readInt(); + payloadData = Unpooled.copiedBuffer(buffer.readBytes(length)); +// if (entity instanceof IPacketReceiver && buffer.readableBytes() > 0) + break; + case 1: + this.identifier = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + + length = buffer.readInt(); + payloadData = Unpooled.copiedBuffer(buffer.readBytes(length)); + + break; + } + } + + @Override + public void handleClientSide(EntityPlayer player) + { + this.handleData(Side.CLIENT, player); + } + + @Override + public void handleServerSide(EntityPlayer player) + { + this.handleData(Side.SERVER, player); + } + + private void handleData(Side side, EntityPlayer player) + { + switch (this.type) + { + case 0: + Entity entity = player.world.getEntityByID((Integer) this.identifier); + + if (entity instanceof IPacketReceiver) + { + if (this.payloadData.readableBytes() > 0) + { + ((IPacketReceiver) entity).decodePacketdata(payloadData); + } + + // Treat any packet received by a server from a client as an + // update request specifically to that client + if (side == Side.SERVER && player instanceof EntityPlayerMP && entity != null) + { + GalacticraftCore.packetPipeline.sendTo(new PacketDynamic(entity), (EntityPlayerMP) player); + } + } + break; + + case 1: + BlockPos bp = (BlockPos) this.identifier; + if (player.world.isBlockLoaded(bp, false)) + { + TileEntity tile = player.world.getTileEntity(bp); + + if (tile instanceof IPacketReceiver) + { + if (this.payloadData.readableBytes() > 0) + { + ((IPacketReceiver) tile).decodePacketdata(payloadData); + } + + // Treat any packet received by a server from a client + // as an update request specifically to that client + if (side == Side.SERVER && player instanceof EntityPlayerMP && tile != null) + { + GalacticraftCore.packetPipeline.sendTo(new PacketDynamic(tile), (EntityPlayerMP) player); + } + } + } + break; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamicInventory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamicInventory.java new file mode 100644 index 00000000..6a14f56a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamicInventory.java @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.IOException; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class PacketDynamicInventory extends PacketBase +{ + + private int type; + private Object identifier; + private ItemStack[] stacks; + + public PacketDynamicInventory() + { + super(); + } + + public PacketDynamicInventory(Entity entity) + { + super(GCCoreUtil.getDimensionID(entity.world)); + assert entity instanceof IInventory : "Entity does not implement " + IInventory.class.getSimpleName(); + this.type = 0; + this.identifier = new Integer(entity.getEntityId()); + this.stacks = new ItemStack[((IInventory) entity).getSizeInventory()]; + + for (int i = 0; i < this.stacks.length; i++) + { + this.stacks[i] = ((IInventory) entity).getStackInSlot(i); + } + } + + public PacketDynamicInventory(TileEntity tile) + { + super(GCCoreUtil.getDimensionID(tile.getWorld())); + assert tile instanceof IInventory : "Tile does not implement " + IInventory.class.getSimpleName(); + IInventory chest = ((IInventory) tile); + this.type = 1; + this.identifier = tile.getPos(); + int size = chest.getSizeInventory(); + if (chest instanceof TileEntityCrafting) + { + this.stacks = new ItemStack[size + 1]; + this.stacks[size] = ((TileEntityCrafting) chest).getMemoryHeld(); + } else + this.stacks = new ItemStack[size]; + + for (int i = 0; i < size; i++) + { + this.stacks[i] = chest.getStackInSlot(i); + } + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type); + + switch (this.type) + { + case 0: + buffer.writeInt((Integer) this.identifier); + break; + case 1: + BlockPos pos = (BlockPos) this.identifier; + buffer.writeInt(pos.getX()); + buffer.writeInt(pos.getY()); + buffer.writeInt(pos.getZ()); + break; + } + + buffer.writeInt(this.stacks.length); + + for (int i = 0; i < this.stacks.length; i++) + { + try + { + NetworkUtil.writeItemStack(this.stacks[i], buffer); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = buffer.readInt(); + + switch (this.type) + { + case 0: + this.identifier = new Integer(buffer.readInt()); + break; + case 1: + this.identifier = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + break; + } + + this.stacks = new ItemStack[buffer.readInt()]; + + for (int i = 0; i < this.stacks.length; i++) + { + try + { + this.stacks[i] = NetworkUtil.readItemStack(buffer); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + + @Override + public void handleClientSide(EntityPlayer player) + { + if (player.world == null) + { + return; + } + + switch (this.type) + { + case 0: + Entity entity = player.world.getEntityByID((Integer) this.identifier); + + if (entity instanceof IInventorySettable) + { + this.setInventoryStacks((IInventorySettable) entity); + } + + break; + case 1: + TileEntity tile = player.world.getTileEntity((BlockPos) this.identifier); + + if (tile instanceof TileEntityCrafting) + { + ((TileEntityCrafting) tile).setStacksClientSide(this.stacks); + } else if (tile instanceof IInventorySettable) + { + this.setInventoryStacks((IInventorySettable) tile); + } + + break; + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + switch (this.type) + { + case 0: + Entity entity = player.world.getEntityByID((Integer) this.identifier); + + if (entity instanceof IInventorySettable) + { + GalacticraftCore.packetPipeline.sendTo(new PacketDynamicInventory(entity), (EntityPlayerMP) player); + } + + break; + case 1: + TileEntity tile = player.world.getTileEntity((BlockPos) this.identifier); + + if (tile instanceof IInventorySettable) + { + GalacticraftCore.packetPipeline.sendTo(new PacketDynamicInventory(tile), (EntityPlayerMP) player); + } + + break; + } + } + + private void setInventoryStacks(IInventorySettable inv) + { + inv.setSizeInventory(this.stacks.length); + + for (int i = 0; i < this.stacks.length; i++) + { + inv.setInventorySlotContents(i, this.stacks[i]); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketEntityUpdate.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketEntityUpdate.java new file mode 100644 index 00000000..61fad1e2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketEntityUpdate.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.UUID; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; + +import micdoodle8.mods.galacticraft.api.vector.Vector2; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class PacketEntityUpdate extends PacketBase +{ + + private int entityID; + private Vector3 position; + private float rotationYaw; + private float rotationPitch; + private Vector3 motion; + private boolean onGround; + + public PacketEntityUpdate() + { + super(); + } + + public PacketEntityUpdate(int entityID, Vector3 position, Vector2 rotation, Vector3 motion, boolean onGround, int dimID) + { + super(dimID); + this.entityID = entityID; + this.position = position; + this.rotationYaw = (float) rotation.x; + this.rotationPitch = (float) rotation.y; + this.motion = motion; + this.onGround = onGround; + } + + public PacketEntityUpdate(Entity entity) + { + this(entity.getEntityId(), new Vector3(entity.posX, entity.posY, entity.posZ), new Vector2(entity.rotationYaw, entity.rotationPitch), + new Vector3(entity.motionX, entity.motionY, entity.motionZ), entity.onGround, GCCoreUtil.getDimensionID(entity.world)); + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.entityID); + buffer.writeDouble(this.position.x); + buffer.writeDouble(this.position.y); + buffer.writeDouble(this.position.z); + buffer.writeFloat(this.rotationYaw); + buffer.writeFloat(this.rotationPitch); + buffer.writeDouble(this.motion.x); + buffer.writeDouble(this.motion.y); + buffer.writeDouble(this.motion.z); + buffer.writeBoolean(this.onGround); + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.entityID = buffer.readInt(); + this.position = new Vector3(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()); + this.rotationYaw = buffer.readFloat(); + this.rotationPitch = buffer.readFloat(); + this.motion = new Vector3(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()); + this.onGround = buffer.readBoolean(); + } + + @Override + public void handleClientSide(EntityPlayer player) + { + this.setEntityData(player); + } + + @Override + public void handleServerSide(EntityPlayer player) + { + this.setEntityData(player); + } + + private void setEntityData(EntityPlayer player) + { + Entity entity = player.world.getEntityByID(this.entityID); + + if (entity instanceof IEntityFullSync) + { + if (player.world.isRemote || player.getUniqueID().equals(((IEntityFullSync) entity).getOwnerUUID()) || ((IEntityFullSync) entity).getOwnerUUID() == null) + { + IEntityFullSync controllable = (IEntityFullSync) entity; + controllable.setPositionRotationAndMotion(this.position.x, this.position.y, this.position.z, this.rotationYaw, this.rotationPitch, this.motion.x, this.motion.y, this.motion.z, + this.onGround); + } + } + } + + public interface IEntityFullSync + { + + void setPositionRotationAndMotion(double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ, boolean onGround); + + UUID getOwnerUUID(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketFluidNetworkUpdate.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketFluidNetworkUpdate.java new file mode 100644 index 00000000..a90421bd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketFluidNetworkUpdate.java @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.Collection; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.common.network.ByteBufUtils; + +import micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; + +import com.google.common.collect.Sets; + +import io.netty.buffer.ByteBuf; + +public class PacketFluidNetworkUpdate extends PacketBase +{ + + private PacketType type; + private BlockPos pos; + + private FluidStack stack; + private Fluid fluidType; + private boolean didTransfer; + + private boolean newNetwork; + private Collection> transmittersAdded; + private Collection transmittersCoords; + + public PacketFluidNetworkUpdate() + { + } + + public static PacketFluidNetworkUpdate getFluidUpdate(int dimensionID, BlockPos pos, FluidStack stack, boolean didTransfer) + { + return new PacketFluidNetworkUpdate(PacketType.FLUID, dimensionID, pos, stack, didTransfer); + } + + public static PacketFluidNetworkUpdate getAddTransmitterUpdate(int dimensionID, BlockPos pos, boolean newNetwork, Collection> transmittersAdded) + { + return new PacketFluidNetworkUpdate(PacketType.ADD_TRANSMITTER, dimensionID, pos, newNetwork, transmittersAdded); + } + + private PacketFluidNetworkUpdate(PacketType type, int dimensionID, BlockPos pos, FluidStack stack, boolean didTransfer) + { + super(dimensionID); + this.type = type; + this.pos = pos; + this.stack = stack; + this.didTransfer = didTransfer; + } + + private PacketFluidNetworkUpdate(PacketType type, int dimensionID, BlockPos pos, boolean newNetwork, Collection> transmittersAdded) + { + super(dimensionID); + this.type = type; + this.pos = pos; + this.newNetwork = newNetwork; + this.transmittersAdded = transmittersAdded; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.pos.getX()); + buffer.writeInt(this.pos.getY()); + buffer.writeInt(this.pos.getZ()); + buffer.writeInt(this.type.ordinal()); + + switch (this.type) + { + case ADD_TRANSMITTER: + buffer.writeBoolean(this.newNetwork); + buffer.writeInt(this.transmittersAdded.size()); + + for (IBufferTransmitter transmitter : this.transmittersAdded) + { + TileEntity tile = (TileEntity) transmitter; + buffer.writeInt(tile.getPos().getX()); + buffer.writeInt(tile.getPos().getY()); + buffer.writeInt(tile.getPos().getZ()); + } + break; + case FLUID: + if (this.stack != null) + { + buffer.writeBoolean(true); + ByteBufUtils.writeUTF8String(buffer, FluidRegistry.getFluidName(this.stack)); + buffer.writeInt(this.stack.amount); + } else + { + buffer.writeBoolean(false); + } + + buffer.writeBoolean(this.didTransfer); + break; + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.pos = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + this.type = PacketType.values()[buffer.readInt()]; + + switch (this.type) + { + case ADD_TRANSMITTER: + this.newNetwork = buffer.readBoolean(); + this.transmittersCoords = Sets.newHashSet(); + int transmitterCount = buffer.readInt(); + + for (int i = 0; i < transmitterCount; ++i) + { + this.transmittersCoords.add(new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt())); + } + break; + case FLUID: + if (buffer.readBoolean()) + { + this.fluidType = FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buffer)); + if (this.fluidType != null) + { + this.stack = new FluidStack(this.fluidType, buffer.readInt()); + } + } else + { + this.fluidType = null; + this.stack = null; + } + + this.didTransfer = buffer.readBoolean(); + break; + } + } + + @Override + public void handleClientSide(EntityPlayer player) + { + TileEntity tile = player.world.getTileEntity(this.pos); + + if (tile instanceof IBufferTransmitter) + { + IBufferTransmitter transmitter = (IBufferTransmitter) tile; + + switch (this.type) + { + case ADD_TRANSMITTER: + { + FluidNetwork network = transmitter.hasNetwork() && !this.newNetwork ? (FluidNetwork) transmitter.getNetwork() : new FluidNetwork(); + network.register(); + transmitter.setNetwork(network); + + for (BlockPos pos : this.transmittersCoords) + { + TileEntity transmitterTile = player.world.getTileEntity(pos); + + if (transmitterTile instanceof IBufferTransmitter) + { + ((IBufferTransmitter) transmitterTile).setNetwork(network); + } + } + + network.updateCapacity(); + } + break; + case FLUID: + if (transmitter.getNetwork() != null) + { + FluidNetwork network = (FluidNetwork) transmitter.getNetwork(); + + if (this.fluidType != null) + { + network.refFluid = this.fluidType; + } + + network.buffer = this.stack; + network.didTransfer = this.didTransfer; + } + break; + } + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + + } + + public enum PacketType + { + ADD_TRANSMITTER, FLUID, + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketRotateRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketRotateRocket.java new file mode 100644 index 00000000..5b70cfdc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketRotateRocket.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class PacketRotateRocket extends PacketBase +{ + + private int entityID; + private float entityPitch; + private float entityYaw; + + public PacketRotateRocket() + { + super(); + } + + public PacketRotateRocket(Entity rotateableEntity) + { + super(GCCoreUtil.getDimensionID(rotateableEntity.world)); + this.entityID = rotateableEntity.getEntityId(); + this.entityPitch = rotateableEntity.rotationPitch; + this.entityYaw = rotateableEntity.rotationYaw; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.entityID); + buffer.writeFloat(this.entityPitch); + buffer.writeFloat(this.entityYaw); + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.entityID = buffer.readInt(); + this.entityPitch = buffer.readFloat(); + this.entityYaw = buffer.readFloat(); + } + + @Override + public void handleClientSide(EntityPlayer player) + { + + } + + @Override + public void handleServerSide(EntityPlayer player) + { + Entity entity = player.world.getEntityByID(this.entityID); + + if (entity != null) + { + entity.rotationPitch = this.entityPitch; + entity.rotationYaw = this.entityYaw; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketSimple.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketSimple.java new file mode 100644 index 00000000..0b17f5d4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketSimple.java @@ -0,0 +1,1422 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.INetHandler; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.GameType; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.advancement.GCTriggers; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.client.FootprintRenderer; +import micdoodle8.mods.galacticraft.core.client.fx.ParticleSparks; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiBuggy; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiParaChest; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.command.CommandGCEnergyUnits; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProvider; +import micdoodle8.mods.galacticraft.core.entities.IControllableEntity; +import micdoodle8.mods.galacticraft.core.entities.player.GCEntityPlayerMP; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematic; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledDimensionChange; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import io.netty.buffer.ByteBuf; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; + +public class PacketSimple extends PacketBase implements Packet +{ + + public enum EnumSimplePacket + { + + // SERVER + S_RESPAWN_PLAYER(Side.SERVER, String.class), + S_TELEPORT_ENTITY(Side.SERVER, Integer.class), + S_IGNITE_ROCKET(Side.SERVER), + S_OPEN_SCHEMATIC_PAGE(Side.SERVER, Integer.class, Integer.class, Integer.class, Integer.class), + S_OPEN_FUEL_GUI(Side.SERVER, String.class), + S_UPDATE_SHIP_YAW(Side.SERVER, Float.class), + S_UPDATE_SHIP_PITCH(Side.SERVER, Float.class), + S_SET_ENTITY_FIRE(Side.SERVER, Integer.class), + S_BIND_SPACE_STATION_ID(Side.SERVER, Integer.class), + S_UNLOCK_NEW_SCHEMATIC(Side.SERVER), + S_UPDATE_DISABLEABLE_BUTTON(Side.SERVER, BlockPos.class, Integer.class), + S_ON_FAILED_CHEST_UNLOCK(Side.SERVER, Integer.class), + S_RENAME_SPACE_STATION(Side.SERVER, String.class, Integer.class), + S_OPEN_EXTENDED_INVENTORY(Side.SERVER), + S_ON_ADVANCED_GUI_CLICKED_INT(Side.SERVER, Integer.class, BlockPos.class, Integer.class), + S_ON_ADVANCED_GUI_CLICKED_STRING(Side.SERVER, Integer.class, BlockPos.class, String.class), + S_UPDATE_SHIP_MOTION_Y(Side.SERVER, Integer.class, Boolean.class), + S_START_NEW_SPACE_RACE(Side.SERVER, Integer.class, String.class, FlagData.class, Vector3.class, String[].class), + S_REQUEST_FLAG_DATA(Side.SERVER, String.class), + S_INVITE_RACE_PLAYER(Side.SERVER, String.class, Integer.class), + S_REMOVE_RACE_PLAYER(Side.SERVER, String.class, Integer.class), + S_ADD_RACE_PLAYER(Side.SERVER, String.class, Integer.class), + S_COMPLETE_CBODY_HANDSHAKE(Side.SERVER, String[].class), + S_REQUEST_GEAR_DATA1(Side.SERVER, UUID.class), + S_REQUEST_GEAR_DATA2(Side.SERVER, UUID.class), + S_REQUEST_OVERWORLD_IMAGE(Side.SERVER), + S_REQUEST_MAP_IMAGE(Side.SERVER, Integer.class, Integer.class, Integer.class), + S_REQUEST_PLAYERSKIN(Side.SERVER, String.class), + S_BUILDFLAGS_UPDATE(Side.SERVER, Integer.class), + S_CONTROL_ENTITY(Side.SERVER, Integer.class), + S_NOCLIP_PLAYER(Side.SERVER, Boolean.class), + S_REQUEST_DATA(Side.SERVER, Integer.class, BlockPos.class), + S_UPDATE_CHECKLIST(Side.SERVER, NBTTagCompound.class), + S_REQUEST_MACHINE_DATA(Side.SERVER, BlockPos.class), + S_REQUEST_CONTAINER_SLOT_REFRESH(Side.SERVER, Integer.class), + // CLIENT + C_AIR_REMAINING(Side.CLIENT, Integer.class, Integer.class, String.class), + C_UPDATE_DIMENSION_LIST(Side.CLIENT, String.class, String.class, Boolean.class), + C_SPAWN_SPARK_PARTICLES(Side.CLIENT, BlockPos.class), + C_UPDATE_GEAR_SLOT(Side.CLIENT, String.class, Integer.class, Integer.class, Integer.class), + C_CLOSE_GUI(Side.CLIENT), + C_RESET_THIRD_PERSON(Side.CLIENT), + C_UPDATE_SPACESTATION_LIST(Side.CLIENT, Integer[].class), + C_UPDATE_SPACESTATION_DATA(Side.CLIENT, Integer.class, NBTTagCompound.class), + C_UPDATE_SPACESTATION_CLIENT_ID(Side.CLIENT, String.class), + C_UPDATE_PLANETS_LIST(Side.CLIENT, Integer[].class), + C_UPDATE_CONFIGS( + Side.CLIENT, + Integer.class, + Double.class, + Integer.class, + Integer.class, + Integer.class, + String.class, + Float.class, + Float.class, + Float.class, + Float.class, + Integer.class, + String[].class), + C_UPDATE_STATS( + Side.CLIENT, + Integer.class, + String.class, + Integer.class, + String.class, + Integer.class, + String.class, + Integer.class, + String.class, + Integer.class, + String.class, + Integer.class, + Integer.class), // Note: + // Integer, + // PANELTYPES_LENGTH + // * + // , + // Integer + // - + // see + // StatsCapability.getMiscNetworkedStats() + C_ADD_NEW_SCHEMATIC(Side.CLIENT, Integer.class), + C_UPDATE_SCHEMATIC_LIST(Side.CLIENT, Integer[].class), + C_PLAY_SOUND_BOSS_DEATH(Side.CLIENT, Float.class), + C_PLAY_SOUND_EXPLODE(Side.CLIENT), + C_PLAY_SOUND_BOSS_LAUGH(Side.CLIENT), + C_PLAY_SOUND_BOW(Side.CLIENT), + C_UPDATE_OXYGEN_VALIDITY(Side.CLIENT, Boolean.class), + C_OPEN_PARACHEST_GUI(Side.CLIENT, Integer.class, Integer.class, Integer.class), + C_UPDATE_WIRE_BOUNDS(Side.CLIENT, BlockPos.class), + C_OPEN_SPACE_RACE_GUI(Side.CLIENT), + C_UPDATE_SPACE_RACE_DATA(Side.CLIENT, Integer.class, String.class, FlagData.class, Vector3.class, String[].class), + C_OPEN_JOIN_RACE_GUI(Side.CLIENT, Integer.class), + C_UPDATE_FOOTPRINT_LIST(Side.CLIENT, Long.class, Footprint[].class), + C_UPDATE_DUNGEON_DIRECTION(Side.CLIENT, Float.class), + C_FOOTPRINTS_REMOVED(Side.CLIENT, Long.class, BlockVec3.class), + C_UPDATE_STATION_SPIN(Side.CLIENT, Float.class, Boolean.class), + C_UPDATE_STATION_DATA(Side.CLIENT, Double.class, Double.class), + C_UPDATE_STATION_BOX(Side.CLIENT, Integer.class, Integer.class, Integer.class, Integer.class, Integer.class, Integer.class), + C_UPDATE_THERMAL_LEVEL(Side.CLIENT, Integer.class, Boolean.class), + C_DISPLAY_ROCKET_CONTROLS(Side.CLIENT), + C_GET_CELESTIAL_BODY_LIST(Side.CLIENT), + C_UPDATE_ENERGYUNITS(Side.CLIENT, Integer.class), + C_RESPAWN_PLAYER(Side.CLIENT, String.class, Integer.class, String.class, Integer.class), + C_UPDATE_TELEMETRY(Side.CLIENT, BlockPos.class, String.class, Integer.class, Integer.class, Integer.class, Integer.class, Integer.class, String.class), + C_SEND_PLAYERSKIN(Side.CLIENT, String.class, String.class, String.class, String.class), + C_SEND_OVERWORLD_IMAGE(Side.CLIENT, Integer.class, Integer.class, byte[].class), + C_RECOLOR_PIPE(Side.CLIENT, BlockPos.class), + C_RECOLOR_ALL_GLASS(Side.CLIENT, Integer.class, Integer.class, Integer.class), // Number + // of + // integers + // to + // match + // number + // of + // different + // blocks + // of + // PLAIN + // glass + // individually + // instanced + // and + // registered + // in + // GCBlocks + C_UPDATE_MACHINE_DATA(Side.CLIENT, BlockPos.class, Integer.class, Integer.class, Integer.class, Integer.class), + C_SPAWN_HANGING_SCHEMATIC(Side.CLIENT, BlockPos.class, Integer.class, Integer.class, Integer.class), + C_LEAK_DATA(Side.CLIENT, BlockPos.class, Integer[].class); + + private Side targetSide; + private Class[] decodeAs; + + EnumSimplePacket(Side targetSide, Class... decodeAs) + { + this.targetSide = targetSide; + this.decodeAs = decodeAs; + } + + public Side getTargetSide() + { + return this.targetSide; + } + + public Class[] getDecodeClasses() + { + return this.decodeAs; + } + } + + private EnumSimplePacket type; + private List data; + static private String spamCheckString; + static private Map savedSettings = new HashMap<>(); + + public PacketSimple() + { + super(); + } + + public PacketSimple(EnumSimplePacket packetType, int dimID, Object[] data) + { + this(packetType, dimID, Arrays.asList(data)); + } + + public PacketSimple(EnumSimplePacket packetType, World world, Object[] data) + { + this(packetType, GCCoreUtil.getDimensionID(world), Arrays.asList(data)); + } + + public PacketSimple(EnumSimplePacket packetType, int dimID, List data) + { + super(dimID); + if (packetType.getDecodeClasses().length != data.size()) + { + GalacticraftCore.logger.info("Simple Packet Core found data length different than packet type"); + new RuntimeException().printStackTrace(); + } + + this.type = packetType; + this.data = data; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type.ordinal()); + + try + { + NetworkUtil.encodeData(buffer, this.data); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = EnumSimplePacket.values()[buffer.readInt()]; + + try + { + if (this.type.getDecodeClasses().length > 0) + { + this.data = NetworkUtil.decodeData(this.type.getDecodeClasses(), buffer); + } + if (buffer.readableBytes() > 0 && buffer.writerIndex() < 0xfff00) + { + GalacticraftCore.logger.error("Galacticraft packet length problem for packet type " + this.type.toString()); + } + } catch (Exception e) + { + System.err.println("[Galacticraft] Error handling simple packet type: " + this.type.toString() + " " + buffer.toString()); + e.printStackTrace(); + throw e; + } + } + + @SideOnly(Side.CLIENT) + @Override + public void handleClientSide(EntityPlayer player) + { + EntityPlayerSP playerBaseClient = null; + GCPlayerStatsClient stats = null; + + if (player instanceof EntityPlayerSP) + { + playerBaseClient = (EntityPlayerSP) player; + stats = GCPlayerStatsClient.get(playerBaseClient); + } else + { + if (type != EnumSimplePacket.C_UPDATE_SPACESTATION_LIST && type != EnumSimplePacket.C_UPDATE_PLANETS_LIST && type != EnumSimplePacket.C_UPDATE_CONFIGS) + { + return; + } + } + + switch (this.type) + { + case C_AIR_REMAINING: + if (String.valueOf(this.data.get(2)).equals(String.valueOf(PlayerUtil.getName(player)))) + { + TickHandlerClient.airRemaining = (Integer) this.data.get(0); + TickHandlerClient.airRemaining2 = (Integer) this.data.get(1); + } + break; + case C_UPDATE_DIMENSION_LIST: + if (String.valueOf(this.data.get(0)).equals(PlayerUtil.getName(player))) + { + String dimensionList = (String) this.data.get(1); + if (ConfigManagerCore.enableDebug) + { + if (!dimensionList.equals(PacketSimple.spamCheckString)) + { + GalacticraftCore.logger.info("DEBUG info: " + dimensionList); + PacketSimple.spamCheckString = dimensionList; + } + } + final String[] destinations = dimensionList.split("\\?"); + List possibleCelestialBodies = Lists.newArrayList(); + Map> spaceStationData = Maps.newHashMap(); +// Map spaceStationNames = Maps.newHashMap(); +// Map spaceStationIDs = Maps.newHashMap(); +// Map spaceStationHomes = Maps.newHashMap(); + + for (String str : destinations) + { + CelestialBody celestialBody = WorldUtil.getReachableCelestialBodiesForName(str); + + if (celestialBody == null && str.contains("$")) + { + String[] values = str.split("\\$"); + + int homePlanetID = Integer.parseInt(values[4]); + + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + if (satellite.getParentPlanet().getDimensionID() == homePlanetID) + { + celestialBody = satellite; + break; + } + } + + if (!spaceStationData.containsKey(homePlanetID)) + { + spaceStationData.put(homePlanetID, new HashMap()); + } + + spaceStationData.get(homePlanetID).put(values[1], new GuiCelestialSelection.StationDataGUI(values[2], Integer.parseInt(values[3]))); + +// spaceStationNames.put(values[1], values[2]); +// spaceStationIDs.put(values[1], Integer.parseInt(values[3])); +// spaceStationHomes.put(values[1], Integer.parseInt(values[4])); + } + + if (celestialBody != null) + { + possibleCelestialBodies.add(celestialBody); + } + } + + if (FMLClientHandler.instance().getClient().world != null) + { + if (!(FMLClientHandler.instance().getClient().currentScreen instanceof GuiCelestialSelection)) + { + GuiCelestialSelection gui = new GuiCelestialSelection(false, possibleCelestialBodies, (Boolean) this.data.get(2)); + gui.spaceStationMap = spaceStationData; +// gui.spaceStationNames = spaceStationNames; +// gui.spaceStationIDs = spaceStationIDs; + FMLClientHandler.instance().getClient().displayGuiScreen(gui); + } else + { + ((GuiCelestialSelection) FMLClientHandler.instance().getClient().currentScreen).possibleBodies = possibleCelestialBodies; + ((GuiCelestialSelection) FMLClientHandler.instance().getClient().currentScreen).spaceStationMap = spaceStationData; +// ((GuiCelestialSelection) FMLClientHandler.instance().getClient().currentScreen).spaceStationNames = spaceStationNames; +// ((GuiCelestialSelection) FMLClientHandler.instance().getClient().currentScreen).spaceStationIDs = spaceStationIDs; + } + } + } + break; + case C_SPAWN_SPARK_PARTICLES: + BlockPos pos = (BlockPos) this.data.get(0); + Minecraft mc = Minecraft.getMinecraft(); + + for (int i = 0; i < 4; i++) + { + if (mc.getRenderViewEntity() != null && mc.effectRenderer != null && mc.world != null) + { + final ParticleSparks fx = new ParticleSparks(mc.world, pos.getX() - 0.15 + 0.5, pos.getY() + 1.2, pos.getZ() + 0.15 + 0.5, + mc.world.rand.nextDouble() / 20 - mc.world.rand.nextDouble() / 20, mc.world.rand.nextDouble() / 20 - mc.world.rand.nextDouble() / 20); + + mc.effectRenderer.addEffect(fx); + } + } + break; + case C_UPDATE_GEAR_SLOT: + int subtype = (Integer) this.data.get(3); + String gearName = (String) this.data.get(0); + + EntityPlayer gearDataPlayer = player.world.getPlayerEntityByName(gearName); + + if (gearDataPlayer != null) + { + PlayerGearData gearData = ClientProxyCore.playerItemData.get(PlayerUtil.getName(gearDataPlayer)); + UUID gearDataPlayerID = gearDataPlayer.getUniqueID(); + + if (gearData == null) + { + gearData = new PlayerGearData(player); + if (!ClientProxyCore.gearDataRequests.contains(gearDataPlayerID)) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_GEAR_DATA1, getDimensionID(), new Object[] + {gearDataPlayerID})); + ClientProxyCore.gearDataRequests.add(gearDataPlayerID); + } + } else + { + ClientProxyCore.gearDataRequests.remove(gearDataPlayerID); + } + + EnumExtendedInventorySlot type = EnumExtendedInventorySlot.values()[(Integer) this.data.get(2)]; + GCPlayerHandler.EnumModelPacketType typeChange = GCPlayerHandler.EnumModelPacketType.values()[(Integer) this.data.get(1)]; + + switch (type) + { + case MASK: + gearData.setMask(subtype); + break; + case GEAR: + gearData.setGear(subtype); + break; + case LEFT_TANK: + gearData.setLeftTank(subtype); + break; + case RIGHT_TANK: + gearData.setRightTank(subtype); + break; + case PARACHUTE: + if (typeChange == GCPlayerHandler.EnumModelPacketType.ADD) + { + String name; + + if (subtype != -1) + { + name = ItemParaChute.names[subtype]; + gearData.setParachute(new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/" + name + ".png")); + } + } else + { + gearData.setParachute(null); + } + break; + case FREQUENCY_MODULE: + gearData.setFrequencyModule(subtype); + break; + case THERMAL_HELMET: + gearData.setThermalPadding(0, subtype); + break; + case THERMAL_CHESTPLATE: + gearData.setThermalPadding(1, subtype); + break; + case THERMAL_LEGGINGS: + gearData.setThermalPadding(2, subtype); + break; + case THERMAL_BOOTS: + gearData.setThermalPadding(3, subtype); + break; + case SHIELD_CONTROLLER: + gearData.setShieldController(subtype); + break; + default: + break; + } + + ClientProxyCore.playerItemData.put(gearName, gearData); + } + + break; + case C_CLOSE_GUI: + FMLClientHandler.instance().getClient().displayGuiScreen(null); + break; + case C_RESET_THIRD_PERSON: + FMLClientHandler.instance().getClient().gameSettings.thirdPersonView = stats.getThirdPersonView(); + break; + case C_UPDATE_SPACESTATION_LIST: + WorldUtil.decodeSpaceStationListClient(data); + break; + case C_UPDATE_SPACESTATION_DATA: + SpaceStationWorldData var4 = SpaceStationWorldData.getMPSpaceStationData(player.world, (Integer) this.data.get(0), player); + var4.readFromNBT((NBTTagCompound) this.data.get(1)); + break; + case C_UPDATE_SPACESTATION_CLIENT_ID: + ClientProxyCore.clientSpaceStationID = WorldUtil.stringToSpaceStationData((String) this.data.get(0)); + break; + case C_UPDATE_PLANETS_LIST: + WorldUtil.decodePlanetsListClient(data); + break; + case C_UPDATE_CONFIGS: + ConfigManagerCore.saveClientConfigOverrideable(); + ConfigManagerCore.setConfigOverride(data); + break; + case C_ADD_NEW_SCHEMATIC: + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForID((Integer) this.data.get(0)); + if (!stats.getUnlockedSchematics().contains(page)) + { + stats.getUnlockedSchematics().add(page); + } + break; + case C_UPDATE_SCHEMATIC_LIST: + for (Object o : this.data) + { + Integer schematicID = (Integer) o; + + if (schematicID != -2) + { + Collections.sort(stats.getUnlockedSchematics()); + + if (!stats.getUnlockedSchematics().contains(SchematicRegistry.getMatchingRecipeForID(schematicID))) + { + stats.getUnlockedSchematics().add(SchematicRegistry.getMatchingRecipeForID(schematicID)); + } + } + } + break; + case C_PLAY_SOUND_BOSS_DEATH: + player.playSound(GCSounds.bossDeath, 10.0F, (Float) this.data.get(0)); + break; + case C_PLAY_SOUND_EXPLODE: + player.playSound(SoundEvents.ENTITY_GENERIC_EXPLODE, 10.0F, 0.7F); + break; + case C_PLAY_SOUND_BOSS_LAUGH: + player.playSound(GCSounds.bossLaugh, 10.0F, 0.2F); + break; + case C_PLAY_SOUND_BOW: + player.playSound(SoundEvents.ENTITY_ARROW_SHOOT, 10.0F, 0.2F); + break; + case C_UPDATE_OXYGEN_VALIDITY: + stats.setOxygenSetupValid((Boolean) this.data.get(0)); + break; + case C_OPEN_PARACHEST_GUI: + switch ((Integer) this.data.get(1)) + { + case 0: + if (player.getRidingEntity() instanceof EntityBuggy) + { + FMLClientHandler.instance().getClient() + .displayGuiScreen(new GuiBuggy(player.inventory, (EntityBuggy) player.getRidingEntity(), ((EntityBuggy) player.getRidingEntity()).getType())); + player.openContainer.windowId = (Integer) this.data.get(0); + } + break; + case 1: + int entityID = (Integer) this.data.get(2); + Entity entity = player.world.getEntityByID(entityID); + + if (entity != null && entity instanceof IInventorySettable) + { + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiParaChest(player.inventory, (IInventorySettable) entity)); + } + + player.openContainer.windowId = (Integer) this.data.get(0); + break; + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_CONTAINER_SLOT_REFRESH, GCCoreUtil.getDimensionID(player.world), new Object[] + {player.openContainer.windowId})); + break; + case C_UPDATE_WIRE_BOUNDS: + TileEntity tile = player.world.getTileEntity((BlockPos) this.data.get(0)); + + if (tile instanceof TileBaseConductor) + { + ((TileBaseConductor) tile).adjacentConnections = null; + } + break; + case C_OPEN_SPACE_RACE_GUI: + if (Minecraft.getMinecraft().currentScreen == null) + { + TickHandlerClient.spaceRaceGuiScheduled = false; + player.openGui(GalacticraftCore.instance, GuiIdsCore.SPACE_RACE_START, player.world, (int) player.posX, (int) player.posY, (int) player.posZ); + } else + { + TickHandlerClient.spaceRaceGuiScheduled = true; + } + break; + case C_UPDATE_SPACE_RACE_DATA: + Integer teamID = (Integer) this.data.get(0); + String teamName = (String) this.data.get(1); + FlagData flagData = (FlagData) this.data.get(2); + Vector3 teamColor = (Vector3) this.data.get(3); + List playerList = new ArrayList<>(); + + for (int i = 4; i < this.data.size(); i++) + { + String playerName = (String) this.data.get(i); + ClientProxyCore.flagRequestsSent.remove(playerName); + playerList.add(playerName); + } + + SpaceRace race = new SpaceRace(playerList, teamName, flagData, teamColor); + race.setSpaceRaceID(teamID); + SpaceRaceManager.addSpaceRace(race); + break; + case C_OPEN_JOIN_RACE_GUI: + stats.setSpaceRaceInviteTeamID((Integer) this.data.get(0)); + player.openGui(GalacticraftCore.instance, GuiIdsCore.SPACE_RACE_JOIN, player.world, (int) player.posX, (int) player.posY, (int) player.posZ); + break; + case C_UPDATE_DUNGEON_DIRECTION: + stats.setDungeonDirection((Float) this.data.get(0)); + break; + case C_UPDATE_FOOTPRINT_LIST: + List printList = new ArrayList<>(); + long chunkKey = (Long) this.data.get(0); + for (int i = 1; i < this.data.size(); i++) + { + Footprint print = (Footprint) this.data.get(i); + if (!print.owner.equals(player.getName())) + { + printList.add(print); + } + } + FootprintRenderer.setFootprints(chunkKey, printList); + break; + case C_FOOTPRINTS_REMOVED: + long chunkKey0 = (Long) this.data.get(0); + BlockVec3 position = (BlockVec3) this.data.get(1); + List footprintList = FootprintRenderer.footprints.get(chunkKey0); + List toRemove = new ArrayList<>(); + + if (footprintList != null) + { + for (Footprint footprint : footprintList) + { + if (footprint.position.x > position.x && footprint.position.x < position.x + 1 && footprint.position.z > position.z && footprint.position.z < position.z + 1) + { + toRemove.add(footprint); + } + } + } + + if (!toRemove.isEmpty()) + { + footprintList.removeAll(toRemove); + FootprintRenderer.footprints.put(chunkKey0, footprintList); + } + break; + case C_UPDATE_STATION_SPIN: + if (playerBaseClient.world.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) playerBaseClient.world.provider).getSpinManager().setSpinRate((Float) this.data.get(0), (Boolean) this.data.get(1)); + } + break; + case C_UPDATE_STATION_DATA: + if (playerBaseClient.world.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) playerBaseClient.world.provider).getSpinManager().setSpinCentre((Double) this.data.get(0), (Double) this.data.get(1)); + } + break; + case C_UPDATE_STATION_BOX: + if (playerBaseClient.world.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) playerBaseClient.world.provider).getSpinManager().setSpinBox((Integer) this.data.get(0), (Integer) this.data.get(1), (Integer) this.data.get(2), + (Integer) this.data.get(3), (Integer) this.data.get(4), (Integer) this.data.get(5)); + } + break; + case C_UPDATE_THERMAL_LEVEL: + stats.setThermalLevel((Integer) this.data.get(0)); + stats.setThermalLevelNormalising((Boolean) this.data.get(1)); + break; + case C_DISPLAY_ROCKET_CONTROLS: + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.spaceKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.rocket.launch.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.leftKey.getKeyCode()) + " / " + + GameSettings.getKeyDisplayString(KeyHandlerClient.rightKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.rocket.turn.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.accelerateKey.getKeyCode()) + " / " + + GameSettings.getKeyDisplayString(KeyHandlerClient.decelerateKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.rocket.updown.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.openFuelGui.getKeyCode()) + " - " + GCCoreUtil.translate("gui.rocket.inv.name"))); + break; + case C_GET_CELESTIAL_BODY_LIST: + String[] objKeys = GalaxyRegistry.getAllTransltionKeys(); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_COMPLETE_CBODY_HANDSHAKE, getDimensionID(), new Object[] {objKeys})); + break; + case C_UPDATE_ENERGYUNITS: + CommandGCEnergyUnits.handleParamClientside((Integer) this.data.get(0)); + break; + case C_RESPAWN_PLAYER: + final WorldProvider provider = WorldUtil.getProviderForNameClient((String) this.data.get(0)); + final int dimID = GCCoreUtil.getDimensionID(provider); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("DEBUG: Client receiving respawn packet for dim " + dimID); + } + int par2 = (Integer) this.data.get(1); + String par3 = (String) this.data.get(2); + int par4 = (Integer) this.data.get(3); + WorldUtil.forceRespawnClient(dimID, par2, par3, par4); + break; + case C_UPDATE_STATS: + stats.setBuildFlags((Integer) this.data.get(0)); + BlockPanelLighting.updateClient(this.data); + break; + case C_UPDATE_TELEMETRY: + tile = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tile instanceof TileEntityTelemetry) + { + ((TileEntityTelemetry) tile).receiveUpdate(data, this.getDimensionID()); + } + break; + case C_SEND_PLAYERSKIN: + String strName = (String) this.data.get(0); + String s1 = (String) this.data.get(1); + String s2 = (String) this.data.get(2); + String strUUID = (String) this.data.get(3); + GameProfile gp = PlayerUtil.getOtherPlayerProfile(strName); + if (gp == null) + { + gp = PlayerUtil.makeOtherPlayerProfile(strName, strUUID); + } + gp.getProperties().put("textures", new Property("textures", s1, s2)); + break; + case C_SEND_OVERWORLD_IMAGE: + try + { + int cx = (Integer) this.data.get(0); + int cz = (Integer) this.data.get(1); + byte[] bytes = (byte[]) this.data.get(2); + MapUtil.receiveOverworldImageCompressed(cx, cz, bytes); + } catch (Exception e) + { + e.printStackTrace(); + } + break; + case C_RECOLOR_PIPE: + TileEntity tileEntity = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tileEntity instanceof TileEntityFluidPipe) + { + TileEntityFluidPipe pipe = (TileEntityFluidPipe) tileEntity; + pipe.getNetwork().split(pipe); + pipe.setNetwork(null); + } + break; + case C_RECOLOR_ALL_GLASS: + BlockSpaceGlass.updateGlassColors((Integer) this.data.get(0), (Integer) this.data.get(1), (Integer) this.data.get(2)); + break; + case C_UPDATE_MACHINE_DATA: + TileEntity tile3 = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tile3 instanceof ITileClientUpdates) + { + ((ITileClientUpdates) tile3).updateClient(this.data); + } + break; + case C_LEAK_DATA: + TileEntity tile4 = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tile4 instanceof TileEntityOxygenSealer) + { + ((ITileClientUpdates) tile4).updateClient(this.data); + } + break; + case C_SPAWN_HANGING_SCHEMATIC: + EntityHangingSchematic entity = new EntityHangingSchematic(player.world, (BlockPos) this.data.get(0), EnumFacing.byIndex((Integer) this.data.get(2)), (Integer) this.data.get(3)); + ((WorldClient) player.world).addEntityToWorld((Integer) this.data.get(1), entity); + break; + default: + break; + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + final EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase == null) + { + return; + } + + final MinecraftServer server = playerBase.server; + final GCPlayerStats stats = GCPlayerStats.get(playerBase); + + switch (this.type) + { + case S_RESPAWN_PLAYER: + playerBase.connection + .sendPacket(new SPacketRespawn(player.dimension, player.world.getDifficulty(), player.world.getWorldInfo().getTerrainType(), playerBase.interactionManager.getGameType())); + break; + case S_TELEPORT_ENTITY: + TickHandlerServer.scheduleNewDimensionChange(new ScheduledDimensionChange(playerBase, (int) PacketSimple.this.data.get(0))); + break; + case S_IGNITE_ROCKET: + if (!player.world.isRemote && !player.isDead && player.getRidingEntity() != null && !player.getRidingEntity().isDead && player.getRidingEntity() instanceof EntityTieredRocket) + { + final EntityTieredRocket ship = (EntityTieredRocket) player.getRidingEntity(); + + if (ship.launchPhase != EnumLaunchPhase.LANDING.ordinal()) + { + if (ship.hasValidFuel()) + { + ItemStack stack2 = stats.getExtendedInventory().getStackInSlot(4); + + if (stack2 != null && stack2.getItem() instanceof ItemParaChute || stats.getLaunchAttempts() > 0) + { + ship.igniteCheckingCooldown(); + stats.setLaunchAttempts(0); + } else if (stats.getChatCooldown() == 0 && stats.getLaunchAttempts() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.noparachute"))); + stats.setChatCooldown(80); + stats.setLaunchAttempts(1); + } + } else if (stats.getChatCooldown() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.nofuel"))); + stats.setChatCooldown(250); + } + } + } + break; + case S_OPEN_SCHEMATIC_PAGE: + if (player != null) + { + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForID((Integer) this.data.get(0)); + + player.openGui(GalacticraftCore.instance, page.getGuiID(), player.world, (Integer) this.data.get(1), (Integer) this.data.get(2), (Integer) this.data.get(3)); + } + break; + case S_OPEN_FUEL_GUI: + if (player.getRidingEntity() instanceof EntityBuggy) + { + GCCoreUtil.openBuggyInv(playerBase, (EntityBuggy) player.getRidingEntity(), ((EntityBuggy) player.getRidingEntity()).getType()); + } else if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + player.openGui(GalacticraftCore.instance, GuiIdsCore.ROCKET_INVENTORY, player.world, (int) player.posX, (int) player.posY, (int) player.posZ); + } + break; + case S_UPDATE_SHIP_YAW: + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + final EntitySpaceshipBase ship = (EntitySpaceshipBase) player.getRidingEntity(); + + if (ship != null) + { + ship.rotationYaw = (Float) this.data.get(0); + } + } + break; + case S_UPDATE_SHIP_PITCH: + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + final EntitySpaceshipBase ship = (EntitySpaceshipBase) player.getRidingEntity(); + + if (ship != null) + { + ship.rotationPitch = (Float) this.data.get(0); + } + } + break; + case S_SET_ENTITY_FIRE: + Entity entity = player.world.getEntityByID((Integer) this.data.get(0)); + + if (entity instanceof EntityLivingBase) + { + ((EntityLivingBase) entity).setFire(3); + } + break; + case S_BIND_SPACE_STATION_ID: + int homeID = (Integer) this.data.get(0); + if ((!stats.getSpaceStationDimensionData().containsKey(homeID) || stats.getSpaceStationDimensionData().get(homeID) == -1 || stats.getSpaceStationDimensionData().get(homeID) == 0) + && !ConfigManagerCore.disableSpaceStationCreation) + { + if (playerBase.capabilities.isCreativeMode || WorldUtil.getSpaceStationRecipe(homeID).matches(playerBase, true)) + { + GCTriggers.CREATE_SPACE_STATION.trigger(playerBase); + WorldUtil.bindSpaceStationToNewDimension(playerBase.world, playerBase, homeID); + } + } + break; + case S_UNLOCK_NEW_SCHEMATIC: + final Container container = player.openContainer; + + if (container instanceof ContainerSchematic) + { + final ContainerSchematic schematicContainer = (ContainerSchematic) container; + + ItemStack stack = schematicContainer.craftMatrix.getStackInSlot(0); + + if (!stack.isEmpty()) + { + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForItemStack(stack); + + if (page != null) + { + SchematicRegistry.unlockNewPage(playerBase, stack); + SpaceRaceManager.teamUnlockSchematic(playerBase, stack); + stack.shrink(1); + + schematicContainer.craftMatrix.setInventorySlotContents(0, stack); + schematicContainer.craftMatrix.markDirty(); + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_ADD_NEW_SCHEMATIC, getDimensionID(), new Object[] + {page.getPageID()}), playerBase); + } + } + } + break; + case S_UPDATE_DISABLEABLE_BUTTON: + final TileEntity tileAt = player.world.getTileEntity((BlockPos) this.data.get(0)); + + if (tileAt instanceof IDisableableMachine) + { + final IDisableableMachine machine = (IDisableableMachine) tileAt; + + machine.setDisabled((Integer) this.data.get(1), !machine.getDisabled((Integer) this.data.get(1))); + } + break; + case S_ON_FAILED_CHEST_UNLOCK: + if (stats.getChatCooldown() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.chest.warning.wrongkey", this.data.get(0)))); + stats.setChatCooldown(100); + } + break; + case S_RENAME_SPACE_STATION: + final SpaceStationWorldData ssdata = SpaceStationWorldData.getStationData(playerBase.world, (Integer) this.data.get(1), playerBase); + + if (ssdata != null && ssdata.getOwner().equalsIgnoreCase(PlayerUtil.getName(player))) + { + ssdata.setSpaceStationName((String) this.data.get(0)); + ssdata.setDirty(true); + } + break; + case S_OPEN_EXTENDED_INVENTORY: + player.openGui(GalacticraftCore.instance, GuiIdsCore.EXTENDED_INVENTORY, player.world, 0, 0, 0); + break; + case S_ON_ADVANCED_GUI_CLICKED_INT: + TileEntity tile1 = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.redstoneActivation = (Integer) this.data.get(2) == 1; + } + break; + case 1: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.playerDistanceActivation = (Integer) this.data.get(2) == 1; + } + break; + case 2: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.playerDistanceSelection = (Integer) this.data.get(2); + } + break; + case 3: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.playerNameMatches = (Integer) this.data.get(2) == 1; + } + break; + case 4: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.invertSelection = (Integer) this.data.get(2) == 1; + } + break; + case 5: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.lastHorizontalModeEnabled = airlockController.horizontalModeEnabled; + airlockController.horizontalModeEnabled = (Integer) this.data.get(2) == 1; + } + break; + case 6: + if (tile1 instanceof IBubbleProvider) + { + IBubbleProvider distributor = (IBubbleProvider) tile1; + distributor.setBubbleVisible((Integer) this.data.get(2) == 1); + } + break; + default: + break; + } + break; + case S_ON_ADVANCED_GUI_CLICKED_STRING: + TileEntity tile2 = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile2 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile2; + airlockController.playerToOpenFor = (String) this.data.get(2); + } + break; + default: + break; + } + break; + case S_UPDATE_SHIP_MOTION_Y: + int entityID = (Integer) this.data.get(0); + boolean up = (Boolean) this.data.get(1); + + Entity entity2 = player.world.getEntityByID(entityID); + + if (entity2 instanceof EntityAutoRocket) + { + EntityAutoRocket autoRocket = (EntityAutoRocket) entity2; + autoRocket.motionY += up ? 0.02F : -0.02F; + } + + break; + case S_START_NEW_SPACE_RACE: + Integer teamID = (Integer) this.data.get(0); + String teamName = (String) this.data.get(1); + FlagData flagData = (FlagData) this.data.get(2); + Vector3 teamColor = (Vector3) this.data.get(3); + List playerList = new ArrayList<>(); + + for (int i = 4; i < this.data.size(); i++) + { + playerList.add((String) this.data.get(i)); + } + + boolean previousData = SpaceRaceManager.getSpaceRaceFromID(teamID) != null; + + SpaceRace newRace = new SpaceRace(playerList, teamName, flagData, teamColor); + + if (teamID > 0) + { + newRace.setSpaceRaceID(teamID); + } + + SpaceRaceManager.addSpaceRace(newRace); + + if (previousData) + { + SpaceRaceManager.sendSpaceRaceData(server, null, SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(playerBase))); + } + break; + case S_REQUEST_FLAG_DATA: + SpaceRaceManager.sendSpaceRaceData(server, playerBase, SpaceRaceManager.getSpaceRaceFromPlayer((String) this.data.get(0))); + break; + case S_INVITE_RACE_PLAYER: + EntityPlayerMP playerInvited = PlayerUtil.getPlayerBaseServerFromPlayerUsername(server, (String) this.data.get(0), true); + if (playerInvited != null) + { + Integer teamInvitedTo = (Integer) this.data.get(1); + SpaceRace race = SpaceRaceManager.getSpaceRaceFromID(teamInvitedTo); + + if (race != null) + { + GCPlayerStats.get(playerInvited).setSpaceRaceInviteTeamID(teamInvitedTo); + String dA = EnumColor.DARK_AQUA.getCode(); + String bG = EnumColor.BRIGHT_GREEN.getCode(); + String dB = EnumColor.PURPLE.getCode(); + String teamNameTotal = ""; + String[] teamNameSplit = race.getTeamName().split(" "); + for (String teamNamePart : teamNameSplit) + { + teamNameTotal = teamNameTotal.concat(dB + teamNamePart + " "); + } + playerInvited.sendMessage(new TextComponentString(dA + GCCoreUtil.translateWithFormat("gui.space_race.chat.invite_received", bG + PlayerUtil.getName(player) + dA) + " " + + GCCoreUtil.translateWithFormat("gui.space_race.chat.to_join", teamNameTotal, EnumColor.AQUA + "/joinrace" + dA)) + .setStyle(new Style().setColor(TextFormatting.DARK_AQUA))); + } + } + break; + case S_REMOVE_RACE_PLAYER: + Integer teamInvitedTo = (Integer) this.data.get(1); + SpaceRace race = SpaceRaceManager.getSpaceRaceFromID(teamInvitedTo); + + if (race != null) + { + String playerToRemove = (String) this.data.get(0); + + if (!race.getPlayerNames().remove(playerToRemove)) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.space_race.chat.not_found", playerToRemove))); + } else + { + SpaceRaceManager.onPlayerRemoval(server, playerToRemove, race); + } + } + break; + case S_ADD_RACE_PLAYER: + Integer teamToAddPlayer = (Integer) this.data.get(1); + SpaceRace spaceRaceToAddPlayer = SpaceRaceManager.getSpaceRaceFromID(teamToAddPlayer); + + if (spaceRaceToAddPlayer != null) + { + String playerToAdd = (String) this.data.get(0); + + if (!spaceRaceToAddPlayer.getPlayerNames().contains(playerToAdd)) + { + SpaceRace oldRace = null; + while ((oldRace = SpaceRaceManager.getSpaceRaceFromPlayer(playerToAdd)) != null) + { + SpaceRaceManager.removeSpaceRace(oldRace); + } + + spaceRaceToAddPlayer.getPlayerNames().add(playerToAdd); + SpaceRaceManager.sendSpaceRaceData(server, null, spaceRaceToAddPlayer); + + for (String member : spaceRaceToAddPlayer.getPlayerNames()) + { + EntityPlayerMP memberObj = PlayerUtil.getPlayerForUsernameVanilla(server, member); + + if (memberObj != null) + { + memberObj.sendMessage(new TextComponentString( + EnumColor.DARK_AQUA + GCCoreUtil.translateWithFormat("gui.space_race.chat.add_success", EnumColor.BRIGHT_GREEN + playerToAdd + EnumColor.DARK_AQUA)) + .setStyle(new Style().setColor(TextFormatting.DARK_AQUA))); + } + } + } else + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.space_race.chat.already_part")).setStyle(new Style().setColor(TextFormatting.DARK_RED))); + } + } + break; + case S_COMPLETE_CBODY_HANDSHAKE: + List clientObjects = new ArrayList<>(); + for (int i = 0; i < this.data.size(); i++) + { + clientObjects.add(GalaxyRegistry.getCelestialObjectFromTranslationKey((String) this.data.get(i))); + } + List serverObjects = GalaxyRegistry.getAllRegisteredObjects(); + String missingObjects = ""; + + for (CelestialObject celestialObject : serverObjects) + { + if (!clientObjects.contains(celestialObject)) + { + missingObjects = missingObjects.concat(celestialObject.getName() + "\n"); + } + } + + if (missingObjects.length() > 0) + { + playerBase.connection.disconnect(new TextComponentString("Missing Galacticraft Celestial Objects:\n\n " + missingObjects)); + } + + break; + case S_REQUEST_GEAR_DATA1: + case S_REQUEST_GEAR_DATA2: + UUID id = (UUID) this.data.get(0); + if (id != null) + { + EntityPlayer otherPlayer = player.world.getPlayerEntityByUUID(id); + if (otherPlayer instanceof EntityPlayerMP) + { + GCPlayerHandler.checkGear((EntityPlayerMP) otherPlayer, GCPlayerStats.get(otherPlayer), true); + } + } + break; + case S_BUILDFLAGS_UPDATE: + stats.setBuildFlags((Integer) this.data.get(0)); + break; + case S_REQUEST_OVERWORLD_IMAGE: + MapUtil.sendOverworldToClient(playerBase); + break; + case S_REQUEST_MAP_IMAGE: + int dim = (Integer) this.data.get(0); + int cx = (Integer) this.data.get(1); + int cz = (Integer) this.data.get(2); + MapUtil.sendOrCreateMap(WorldUtil.getProviderForDimensionServer(dim).world, cx, cz, playerBase); + break; + case S_REQUEST_PLAYERSKIN: + String strName = (String) this.data.get(0); + EntityPlayerMP playerRequested = server.getPlayerList().getPlayerByUsername(strName); + + // Player not online + if (playerRequested == null) + { + return; + } + + GameProfile gp = playerRequested.getGameProfile(); + if (gp == null) + { + return; + } + + Property property = (Property) Iterables.getFirst(gp.getProperties().get("textures"), (Object) null); + if (property == null) + { + return; + } + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_SEND_PLAYERSKIN, getDimensionID(), new Object[] + {strName, property.getValue(), property.getSignature(), playerRequested.getUniqueID().toString()}), playerBase); + break; + case S_CONTROL_ENTITY: + if (player.getRidingEntity() != null && player.getRidingEntity() instanceof IControllableEntity) + { + ((IControllableEntity) player.getRidingEntity()).pressKey((Integer) this.data.get(0)); + } + break; + case S_NOCLIP_PLAYER: + boolean noClip = (Boolean) this.data.get(0); + if (player instanceof GCEntityPlayerMP) + { + GalacticraftCore.proxy.player.setNoClip((EntityPlayerMP) player, noClip); + if (noClip == false) + { + player.fallDistance = 0.0F; + ((EntityPlayerMP) player).connection.floatingTickCount = 0; + } + } else if (player instanceof EntityPlayerMP) + { + EntityPlayerMP emp = ((EntityPlayerMP) player); + try + { + Field f = emp.interactionManager.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "gameType" : "field_73091_c"); + f.setAccessible(true); + if (noClip == false) + { + emp.fallDistance = 0.0F; + emp.connection.floatingTickCount = 0; + GameType gt = savedSettings.get(emp); + if (gt != null) + { + savedSettings.remove(emp); + f.set(emp.interactionManager, gt); + } + } else + { + savedSettings.put(emp, emp.interactionManager.getGameType()); + f.set(emp.interactionManager, GameType.SPECTATOR); + } + } catch (Exception ee) + { + ee.printStackTrace(); + } + } + break; + case S_REQUEST_DATA: + WorldServer worldServer = server.getWorld((Integer) this.data.get(0)); + if (worldServer != null) + { + TileEntity requestedTile = worldServer.getTileEntity((BlockPos) this.data.get(1)); + if (requestedTile instanceof INetworkProvider) + { + if (((INetworkProvider) requestedTile).getNetwork() instanceof FluidNetwork) + { + FluidNetwork network = (FluidNetwork) ((INetworkProvider) requestedTile).getNetwork(); + network.addUpdate(playerBase); + } + } + } + break; + case S_UPDATE_CHECKLIST: + for (EnumHand enumhand : EnumHand.values()) + { + ItemStack stack = player.getHeldItem(enumhand); + if (stack != null && stack.getItem() == GCItems.prelaunchChecklist) + { + NBTTagCompound tagCompound = stack.getTagCompound(); + if (tagCompound == null) + { + tagCompound = new NBTTagCompound(); + } + NBTTagCompound tagCompoundRead = (NBTTagCompound) this.data.get(0); + tagCompound.setTag("checklistData", tagCompoundRead); + stack.setTagCompound(tagCompound); + } + } + break; + case S_REQUEST_MACHINE_DATA: + TileEntity tile3 = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tile3 instanceof ITileClientUpdates) + { + ((ITileClientUpdates) tile3).sendUpdateToClient(playerBase); + } + break; + case S_REQUEST_CONTAINER_SLOT_REFRESH: + // It seems as though "Update slot" packets sent internally on + // the minecraft network packets are sent and + // received before our custom gui open packets are handled. This + // causes slots to not update, because from + // the client's perspective the gui isn't open yet. Sending this + // to the server causes all slots to be updated + // server -> client + if (player.openContainer.windowId == (Integer) this.data.get(0)) + { + for (int i = 0; i < player.openContainer.inventoryItemStacks.size(); ++i) + { + player.openContainer.inventoryItemStacks.set(i, ItemStack.EMPTY); + } + } + break; + default: + break; + } + } + + /* + * BEGIN "net.minecraft.network.Packet" IMPLEMENTATION This is for handling + * server->client packets before the player has joined the world + */ + + @Override + public void readPacketData(PacketBuffer var1) + { + this.decodeInto(var1); + } + + @Override + public void writePacketData(PacketBuffer var1) + { + this.encodeInto(var1); + } + + @SideOnly(Side.CLIENT) + @Override + public void processPacket(INetHandler var1) + { + if (this.type != EnumSimplePacket.C_UPDATE_SPACESTATION_LIST && this.type != EnumSimplePacket.C_UPDATE_PLANETS_LIST && this.type != EnumSimplePacket.C_UPDATE_CONFIGS) + { + return; + } + + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + this.handleClientSide(FMLClientHandler.instance().getClientPlayerEntity()); + } + } + + /* + * END "net.minecraft.network.Packet" IMPLEMENTATION This is for handling + * server->client packets before the player has joined the world + */ +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/Evaluator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/Evaluator.java new file mode 100644 index 00000000..d9403193 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/Evaluator.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin; + +public interface Evaluator +{ + + double evalNoise(double x); + + double evalNoise(double x, double y); + + double evalNoise(double x, double y, double z); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/FishyNoise.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/FishyNoise.java new file mode 100644 index 00000000..44340d71 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/FishyNoise.java @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin; + +import java.util.Random; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; + +public class FishyNoise +{ + + int[] perm = new int[512]; + + //@noformat + public double[][] grad2d = new double[][] + { + { 1.0D, 0.0D }, + { 0.9239000082015991D, 0.38269999623298645D }, + { 0.7071070075035095D, 0.7071070075035095D }, + { 0.38269999623298645D, 0.9239000082015991D }, + { 0.0D, 1.0D }, + { -0.38269999623298645D, 0.9239000082015991D }, + { -0.7071070075035095D, 0.7071070075035095D }, + { -0.9239000082015991D, 0.38269999623298645D }, + { -1.0D, 0.0D }, + { -0.9239000082015991D, -0.38269999623298645D }, + { -0.7071070075035095D, -0.7071070075035095D }, + { -0.38269999623298645D, -0.9239000082015991D }, + { 0.0D, -1.0D }, + { 0.38269999623298645D, -0.9239000082015991D }, + { 0.7071070075035095D, -0.7071070075035095D }, + { 0.9239000082015991D, -0.38269999623298645D } + }; + + private float[][] grad2f = new float[][] + { + {1, 0}, + {.9239F, .3827F}, + {.707107F, 0.707107F}, + {.3827F, .9239F}, + {0, 1}, + {-.3827F, .9239F}, + {-.707107F, 0.707107F}, + {-.9239F, .3827F}, + {-1, 0}, + {-.9239F, -.3827F}, + {-.707107F, -0.707107F}, + {-.3827F, -.9239F}, + {0, -1}, + {.3827F, -.9239F}, + {.707107F, -0.707107F}, + {.9239F, -.3827F}}; + + private int[][] grad3i = new int[][] + { + {1, 1, 0}, + {-1, 1, 0}, + {1, -1, 0}, + {-1, -1, 0}, + {1, 0, 1}, + {-1, 0, 1}, + {1, 0, -1}, + {-1, 0, -1}, + {0, 1, 1}, + {0, -1, 1}, + {0, 1, -1}, + {0, -1, -1}, + {1, 1, 0}, + {-1, 1, 0}, + {0, -1, 1}, + {0, -1, -1}}; + //@format + + public FishyNoise(long seed) + { + final Random rand = new Random(seed); + // Fill up the random array with numbers 0-256 + for (int i = 0; i < 256; i++) + { + this.perm[i] = i; + } + // Shuffle those numbers for the random effect + for (int i = 0; i < 256; i++) + { + final int j = rand.nextInt(256); + this.perm[i] = this.perm[i] ^ this.perm[j]; + this.perm[j] = this.perm[i] ^ this.perm[j]; + this.perm[i] = this.perm[i] ^ this.perm[j]; + } + + System.arraycopy(this.perm, 0, this.perm, 256, 256); + } + + public double eval(double x, double y) + { + int largeX = (x > 0.0D) ? (int) x : ((int) x - 1); + int largeY = (y > 0.0D) ? (int) y : ((int) y - 1); + x -= largeX; + y -= largeY; + largeX &= 0xFF; + largeY &= 0xFF; + double u = x * x * x * (x * (x * 6.0D - 15.0D) + 10.0D); + double v = y * y * y * (y * (y * 6.0D - 15.0D) + 10.0D); + int randY = this.perm[largeY] + largeX; + int randY1 = this.perm[largeY + 1] + largeX; + double[] grad2 = this.grad2d[this.perm[randY] & 0xF]; + double grad00 = grad2[0] * x + grad2[1] * y; + grad2 = this.grad2d[this.perm[randY1] & 0xF]; + double grad01 = grad2[0] * x + grad2[1] * (y - 1.0D); + grad2 = this.grad2d[this.perm[1 + randY1] & 0xF]; + double grad11 = grad2[0] * (x - 1.0D) + grad2[1] * (y - 1.0D); + grad2 = this.grad2d[this.perm[1 + randY] & 0xF]; + double grad10 = grad2[0] * (x - 1.0D) + grad2[1] * y; + double lerpX0 = grad00 + u * (grad10 - grad00); + return lerpX0 + v * (grad01 + u * (grad11 - grad01) - lerpX0); + } + + public double eval(double x, double y, double z) + { + int unitX = (x > 0.0D) ? (int) x : ((int) x - 1); + int unitY = (y > 0.0D) ? (int) y : ((int) y - 1); + int unitZ = (z > 0.0D) ? (int) z : ((int) z - 1); + x -= unitX; + y -= unitY; + z -= unitZ; + unitX &= 0xFF; + unitY &= 0xFF; + unitZ &= 0xFF; + double u = x * x * x * (x * (x * 6.0D - 15.0D) + 10.0D); + double v = y * y * y * (y * (y * 6.0D - 15.0D) + 10.0D); + double w = z * z * z * (z * (z * 6.0D - 15.0D) + 10.0D); + int randZ = this.perm[unitZ] + unitY; + int randZ1 = this.perm[unitZ + 1] + unitY; + int randYZ = this.perm[randZ] + unitX; + int randY1Z = this.perm[1 + randZ] + unitX; + int randYZ1 = this.perm[randZ1] + unitX; + int randY1Z1 = this.perm[1 + randZ1] + unitX; + int[] grad3 = this.grad3i[this.perm[randYZ] & 0xF]; + double grad000 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randYZ] & 0xF]; + double grad100 = grad3[0] * (x - 1.0D) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[randY1Z] & 0xF]; + double grad010 = grad3[0] * x + grad3[1] * (y - 1.0D) + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randY1Z] & 0xF]; + double grad110 = grad3[0] * (x - 1.0D) + grad3[1] * (y - 1.0D) + grad3[2] * z; + z--; + grad3 = this.grad3i[this.perm[randYZ1] & 0xF]; + double grad001 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randYZ1] & 0xF]; + double grad101 = grad3[0] * (x - 1.0D) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[randY1Z1] & 0xF]; + double grad011 = grad3[0] * x + grad3[1] * (y - 1.0D) + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randY1Z1] & 0xF]; + double grad111 = grad3[0] * (x - 1.0D) + grad3[1] * (y - 1.0D) + grad3[2] * z; + double f1 = grad000 + u * (grad100 - grad000); + double f2 = grad010 + u * (grad110 - grad010); + double f3 = grad001 + u * (grad101 - grad001); + double f4 = grad011 + u * (grad111 - grad011); + double lerp1 = f1 + v * (f2 - f1); + return lerp1 + w * (f3 + v * (f4 - f3) - lerp1); + } + + @Deprecated + @ReplaceWith("evalNoise(double x, double y)") + public float noise2d(float x, float y) + { + int largeX = x > 0 ? (int) x : (int) x - 1; + int largeY = y > 0 ? (int) y : (int) y - 1; + x -= largeX; + y -= largeY; + largeX &= 255; + largeY &= 255; + + final float u = x * x * x * (x * (x * 6 - 15) + 10); + final float v = y * y * y * (y * (y * 6 - 15) + 10); + + int randY = this.perm[largeY] + largeX; + int randY1 = this.perm[largeY + 1] + largeX; + float[] grad2 = this.grad2f[this.perm[randY] & 15]; + final float grad00 = grad2[0] * x + grad2[1] * y; + grad2 = this.grad2f[this.perm[randY1] & 15]; + final float grad01 = grad2[0] * x + grad2[1] * (y - 1); + grad2 = this.grad2f[this.perm[1 + randY1] & 15]; + final float grad11 = grad2[0] * (x - 1) + grad2[1] * (y - 1); + grad2 = this.grad2f[this.perm[1 + randY] & 15]; + final float grad10 = grad2[0] * (x - 1) + grad2[1] * y; + + final float lerpX0 = grad00 + u * (grad10 - grad00); + return lerpX0 + v * (grad01 + u * (grad11 - grad01) - lerpX0); + } + + @Deprecated + @ReplaceWith("evalNoise(double x, double y, double z)") + public float noise3d(float x, float y, float z) + { + int unitX = x > 0 ? (int) x : (int) x - 1; + int unitY = y > 0 ? (int) y : (int) y - 1; + int unitZ = z > 0 ? (int) z : (int) z - 1; + + x -= unitX; + y -= unitY; + z -= unitZ; + + unitX &= 255; + unitY &= 255; + unitZ &= 255; + + final float u = x * x * x * (x * (x * 6 - 15) + 10); + final float v = y * y * y * (y * (y * 6 - 15) + 10); + final float w = z * z * z * (z * (z * 6 - 15) + 10); + + int randZ = this.perm[unitZ] + unitY; + int randZ1 = this.perm[unitZ + 1] + unitY; + int randYZ = this.perm[randZ] + unitX; + int randY1Z = this.perm[1 + randZ] + unitX; + int randYZ1 = this.perm[randZ1] + unitX; + int randY1Z1 = this.perm[1 + randZ1] + unitX; + int[] grad3 = this.grad3i[this.perm[randYZ] & 15]; + final float grad000 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randYZ] & 15]; + final float grad100 = grad3[0] * (x - 1) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[randY1Z] & 15]; + final float grad010 = grad3[0] * x + grad3[1] * (y - 1) + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randY1Z] & 15]; + final float grad110 = grad3[0] * (x - 1) + grad3[1] * (y - 1) + grad3[2] * z; + z--; + grad3 = this.grad3i[this.perm[randYZ1] & 15]; + final float grad001 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randYZ1] & 15]; + final float grad101 = grad3[0] * (x - 1) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[randY1Z1] & 15]; + final float grad011 = grad3[0] * x + grad3[1] * (y - 1) + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randY1Z1] & 15]; + final float grad111 = grad3[0] * (x - 1) + grad3[1] * (y - 1) + grad3[2] * z; + + float f1 = grad000 + u * (grad100 - grad000); + float f2 = grad010 + u * (grad110 - grad010); + float f3 = grad001 + u * (grad101 - grad001); + float f4 = grad011 + u * (grad111 - grad011); + float lerp1 = f1 + v * (f2 - f1); + return lerp1 + w * (f3 + v * (f4 - f3) - lerp1); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/NoiseModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/NoiseModule.java new file mode 100644 index 00000000..d87e2574 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/NoiseModule.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; + +public abstract class NoiseModule +{ + + public double freqX = 1.0D; + public double freqY = 1.0D; + public double freqZ = 1.0D; + public double ampl = 1.0D; + + public void setFrequencyAll(double frequency) + { + this.freqX = frequency; + this.freqY = frequency; + this.freqZ = frequency; + } + + @Deprecated + @ReplaceWith("freqX") + public float frequencyX = 1; + @Deprecated + @ReplaceWith("freqY") + public float frequencyY = 1; + @Deprecated + @ReplaceWith("freqZ") + public float frequencyZ = 1; + @Deprecated + @ReplaceWith("ampl") + public float amplitude = 1; + + @Deprecated + @ReplaceWith("evalNoise(double x)") + public float getNoise(float i) + { + return i; + } + + @Deprecated + @ReplaceWith("evalNoise(double x, double y)") + public float getNoise(float i, float j) + { + return i; + } + + @Deprecated + @ReplaceWith("evalNoise(double x, double y, double z)") + public float getNoise(float i, float j, float k) + { + return i; + } + + @Deprecated + @ReplaceWith("setFrequencyAll(double frequency)") + public void setFrequency(float frequency) + { + this.frequencyX = frequency; + this.frequencyY = frequency; + this.frequencyZ = frequency; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/SimplexNoise.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/SimplexNoise.java new file mode 100644 index 00000000..fec13877 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/SimplexNoise.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin; + +import java.util.Random; + +public class SimplexNoise +{ + + int[] perm = new int[512]; + + public int[][] grad2d = new int[][] + { + {0, 0}, + {0, 1}, + {1, 1}, + {1, 0}}; + + public SimplexNoise(long seed) + { + final Random rand = new Random(seed); + for (int i = 0; i < 256; i++) + { + this.perm[i] = i; // Fill up the random array with numbers 0-256 + } + + for (int i = 0; i < 256; i++) // Shuffle those numbers for the random + // effect + { + final int j = rand.nextInt(256); + this.perm[i] = this.perm[i] ^ this.perm[j]; + this.perm[j] = this.perm[i] ^ this.perm[j]; + this.perm[i] = this.perm[i] ^ this.perm[j]; + } + + System.arraycopy(this.perm, 0, this.perm, 256, 256); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Billowed.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Billowed.java new file mode 100644 index 00000000..bdfa1956 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Billowed.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin.generator; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.perlin.FishyNoise; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; + +public class Billowed extends NoiseModule +{ + + private final FishyNoise noiseGen; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final int numOctaves; + private final float persistance; + + public Billowed(long seed, int nOctaves, float p) + { + this.numOctaves = nOctaves; + this.persistance = p; + final Random rand = new Random(seed); + this.offsetX = rand.nextFloat() / 2 + 0.01F; + this.offsetY = rand.nextFloat() / 2 + 0.01F; + this.offsetZ = rand.nextFloat() / 2 + 0.01F; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public float getNoise(float i) + { + i *= this.frequencyX; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += Math.abs(this.noiseGen.noise2d(i + this.offsetX, this.offsetY) * curAmplitude); + i *= 2; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j) + { + i *= this.frequencyX; + j *= this.frequencyY; + if (this.numOctaves == 2) + { + return Math.abs(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * this.amplitude) + + Math.abs(this.noiseGen.noise2d(i + i + this.offsetX, j + j + this.offsetY) * this.amplitude * this.persistance); + } + + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += Math.abs(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * curAmplitude); + i += i; + j += j; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j, float k) + { + i *= this.frequencyX; + j *= this.frequencyY; + k *= this.frequencyZ; + float val = 0; + for (int n = 0; n < this.numOctaves; n++) + { + val += Math.abs(this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ) * this.amplitude); + i *= 2; + j *= 2; + k *= 2; + } + return val; + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Gradient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Gradient.java new file mode 100644 index 00000000..54df4ecd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Gradient.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin.generator; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.perlin.FishyNoise; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; + +public class Gradient extends NoiseModule +{ + + private final FishyNoise noiseGen; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final int numOctaves; + private final float persistance; + + public Gradient(long seed, int nOctaves, float p) + { + this.numOctaves = nOctaves; + this.persistance = p; + final Random rand = new Random(seed); + this.offsetX = rand.nextFloat() / 2 + 0.01F; + this.offsetY = rand.nextFloat() / 2 + 0.01F; + this.offsetZ = rand.nextFloat() / 2 + 0.01F; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public float getNoise(float i) + { + i *= this.frequencyX; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.noise2d(i + this.offsetX, this.offsetY) * curAmplitude; + i *= 2; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j) + { + if (this.numOctaves == 1) + { + return this.noiseGen.noise2d(i * this.frequencyX + this.offsetX, j * this.frequencyY + this.offsetY) * this.amplitude; + } + + i *= this.frequencyX; + j *= this.frequencyY; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * curAmplitude; + i *= 2; + j *= 2; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j, float k) + { + if (this.numOctaves == 1) + { + return this.noiseGen.noise3d(i * this.frequencyX + this.offsetX, j * this.frequencyY + this.offsetY, k * this.frequencyZ + this.offsetZ) * this.amplitude; + } + + i *= this.frequencyX; + j *= this.frequencyY; + k *= this.frequencyZ; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ) * curAmplitude; + i *= 2; + j *= 2; + k *= 2; + curAmplitude *= this.persistance; + } + return val; + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/GradientNoise.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/GradientNoise.java new file mode 100644 index 00000000..43fd1354 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/GradientNoise.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin.generator; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.perlin.Evaluator; +import micdoodle8.mods.galacticraft.core.perlin.FishyNoise; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; + +public class GradientNoise extends NoiseModule implements Evaluator +{ + + private final FishyNoise noiseGen; + private final double offsetX; + private final double offsetY; + private final double offsetZ; + private final int numOctaves; + private final double persistance; + + public GradientNoise(long seed, int nOctaves, double p) + { + this.numOctaves = nOctaves; + this.persistance = p; + Random rand = new Random(seed); + this.offsetX = (rand.nextFloat() / 2.0F) + 0.0D; + this.offsetY = (rand.nextFloat() / 2.0F) + 0.0D; + this.offsetZ = (rand.nextFloat() / 2.0F) + 0.0D; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public double evalNoise(double i) + { + i *= this.freqX; + double val = 0.0D; + double curAmplitude = this.ampl; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.eval(i + this.offsetX, this.offsetY) * curAmplitude; + i *= 2.0D; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public double evalNoise(double i, double j) + { + if (this.numOctaves == 1) + return this.noiseGen.eval(i * this.freqX + this.offsetX, j * this.freqY + this.offsetY) * this.ampl; + i *= this.freqX; + j *= this.freqY; + double val = 0.0D; + double curAmplitude = this.ampl; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.eval(i + this.offsetX, j + this.offsetY) * curAmplitude; + i *= 2.0D; + j *= 2.0D; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public double evalNoise(double i, double j, double k) + { + if (this.numOctaves == 1) + return this.noiseGen.eval(i * this.freqX + this.offsetX, j * this.freqY + this.offsetY, k * this.freqZ + this.offsetZ) * this.ampl; + i *= this.freqX; + j *= this.freqY; + k *= this.freqZ; + double val = 0.0D; + double curAmplitude = this.ampl; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.eval(i + this.offsetX, j + this.offsetY, k + this.offsetZ) * curAmplitude; + i *= 2.0D; + j *= 2.0D; + k *= 2.0D; + curAmplitude *= this.persistance; + } + return val; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/RidgedMulti.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/RidgedMulti.java new file mode 100644 index 00000000..0cbc1a92 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/RidgedMulti.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin.generator; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.perlin.FishyNoise; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; + +public class RidgedMulti extends NoiseModule +{ + + private final FishyNoise noiseGen; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final int numOctaves; + + public RidgedMulti(long seed, int nOctaves) + { + this.numOctaves = nOctaves; + final Random rand = new Random(seed); + this.offsetX = rand.nextFloat() / 2 + 0.01F; + this.offsetY = rand.nextFloat() / 2 + 0.01F; + this.offsetZ = rand.nextFloat() / 2 + 0.01F; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public float getNoise(float i) + { + i *= this.frequencyX; + float val = 0; + float weight = 1.0F; + final float offset = 1.0F; + final float gain = 2.0F; + for (int n = 0; n < this.numOctaves; n++) + { + float noise = this.absolute(this.noiseGen.noise2d(i + this.offsetX, this.offsetY)); + noise = offset - noise; + noise *= noise; + noise *= weight; + + weight = noise * gain; + + if (weight > 1F) + { + weight = 1F; + } + + if (weight < 0F) + { + weight = 0F; + } + + val += noise; + + i *= 2; + } + return val; + } + + @Override + public float getNoise(float i, float j) + { + i *= this.frequencyX; + j *= this.frequencyY; + float val = 0; + float weight = 1.0F; + final float offset = 1.0F; + final float gain = 2.0F; + for (int n = 0; n < this.numOctaves; n++) + { + float noise = this.absolute(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY)); + noise = offset - noise; + noise *= noise; + noise *= weight; + + weight = noise * gain; + + if (weight > 1F) + { + weight = 1F; + } + + if (weight < 0F) + { + weight = 0F; + } + + val += noise; + + i *= 2; + j *= 2; + } + return val; + } + + @Override + public float getNoise(float i, float j, float k) + { + i *= this.frequencyX; + j *= this.frequencyY; + k *= this.frequencyZ; + float val = 0F; + float weight = 1.0F; + final float offset = 1.0F; + final float gain = 2.0F; + for (int n = 0; n < this.numOctaves; n++) + { + float noise = this.absolute(this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ)); + noise = offset - noise; + noise *= noise; + noise *= weight; + + weight = noise * gain; + + if (weight > 1F) + { + weight = 1F; + } + + if (weight < 0F) + { + weight = 0F; + } + + val += noise; + + i *= 2; + j *= 2; + k *= 2; + } + return val; + } + + private float absolute(float d) + { + if (d < 0) + { + d = -d; + } + return d; + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/ClientProxyCore.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/ClientProxyCore.java new file mode 100644 index 00000000..1d64130e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/ClientProxyCore.java @@ -0,0 +1,1005 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.proxy; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.function.Predicate; + +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.MusicTicker; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMap; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.resources.IReloadableResourceManager; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.client.resource.IResourceType; +import net.minecraftforge.client.resource.ISelectiveResourceReloadListener; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.model.IModelState; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.client.IItemMeshDefinitionCustom; +import micdoodle8.mods.galacticraft.api.client.tabs.InventoryTabVanilla; +import micdoodle8.mods.galacticraft.api.client.tabs.TabRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedDetector; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedRedstone; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedRepeater; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.blocks.BlockFallenMeteor; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDetector; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.client.DynamicTextureProper; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.client.fx.EffectHandler; +import micdoodle8.mods.galacticraft.core.client.gui.screen.InventoryTabGalacticraft; +import micdoodle8.mods.galacticraft.core.client.model.ModelRocketTier1; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelGrating; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelPanelLightBase; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderAlienVillager; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderBuggy; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEntityFake; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedSpider; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedWitch; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedZombie; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderFlag; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderLander; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderMeteor; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderMeteorChunk; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderParaChest; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderSchematic; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderTier1Rocket; +import micdoodle8.mods.galacticraft.core.client.render.item.ItemModelBuggy; +import micdoodle8.mods.galacticraft.core.client.render.item.ItemModelFlag; +import micdoodle8.mods.galacticraft.core.client.render.item.ItemModelRocket; +import micdoodle8.mods.galacticraft.core.client.render.item.ItemModelWorkbench; +import micdoodle8.mods.galacticraft.core.client.render.item.TextureDungeonFinder; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityArclampRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityDishRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityEmergencyBoxRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityFluidPipeRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityFluidTankRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityPanelLightRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityPlatformRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityScreenRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntitySolarPanelRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityTreasureChestRenderer; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.client.sounds.MusicTickerGC; +import micdoodle8.mods.galacticraft.core.entities.EntityAlienVillager; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedWitch; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import micdoodle8.mods.galacticraft.core.entities.EntityParachest; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerBaseSP; +import micdoodle8.mods.galacticraft.core.entities.player.IPlayerClient; +import micdoodle8.mods.galacticraft.core.entities.player.PlayerClient; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import micdoodle8.mods.galacticraft.core.items.ItemFood; +import micdoodle8.mods.galacticraft.core.items.ItemSchematic; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.tile.TileEntityArclamp; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDish; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEmergencyBox; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.util.ASMUtil; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.BlockMetaList; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.PartialCanister; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import api.player.client.ClientPlayerAPI; + +public class ClientProxyCore extends CommonProxyCore implements ISelectiveResourceReloadListener +{ + + public static List flagRequestsSent = new ArrayList<>(); + public static Set valueableBlocks = Sets.newHashSet(); + public static HashSet detectableBlocks = Sets.newHashSet(); + public static List leakTrace = null; + public static Map playerItemData = Maps.newHashMap(); + public static double playerPosX; + public static double playerPosY; + public static double playerPosZ; + public static float playerRotationYaw; + public static float playerRotationPitch; + public static boolean lastSpacebarDown; + + public static HashMap clientSpaceStationID = Maps.newHashMap(); + public static MusicTicker.MusicType MUSIC_TYPE_MARS; + public static InventoryExtended dummyInventory = new InventoryExtended(); + public static Map submergedTextures = Maps.newHashMap(); + public static IPlayerClient playerClientHandler = new PlayerClient(); + public static Minecraft mc = FMLClientHandler.instance().getClient(); + public static List gearDataRequests = Lists.newArrayList(); + public static DynamicTextureProper overworldTextureClient; + public static DynamicTextureProper overworldTextureWide; + public static DynamicTextureProper overworldTextureLarge; + public static boolean overworldTextureRequestSent; + public static boolean overworldTexturesValid; + public static float PLAYER_Y_OFFSET = 1.6200000047683716F; + public static ResourceLocation playerHead = null; + public static final ResourceLocation saturnRingTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/saturn_rings.png"); + public static final ResourceLocation uranusRingTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/uranus_rings.png"); + private static List itemsToRegisterJson = Lists.newArrayList(); + private static ModelResourceLocation fuelLocation = new ModelResourceLocation(Constants.TEXTURE_PREFIX + "fuel", "fluid"); + private static ModelResourceLocation oilLocation = new ModelResourceLocation(Constants.TEXTURE_PREFIX + "oil", "fluid"); + private static List canisters = Lists.newArrayList(); + public static Map capeMap = new HashMap<>(); + + @Deprecated + public static EnumRarity galacticraftItem = EnumHelper.addRarity("GCRarity", TextFormatting.BLUE, "Space"); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + ClientProxyCore.registerEntityRenderers(); + ModelLoaderRegistry.registerLoader(OBJLoaderGC.instance); + OBJLoaderGC.instance.addDomain(Constants.ASSET_PREFIX); + + if (CompatibilityManager.PlayerAPILoaded) + { + ClientPlayerAPI.register(Constants.MOD_ID_CORE, GCPlayerBaseSP.class); + } + MinecraftForge.EVENT_BUS.register(this); + ClientProxyCore.registerHandlers(); + } + + @Override + public void init(FMLInitializationEvent event) + { + MUSIC_TYPE_MARS = EnumHelper.addEnum(MusicTicker.MusicType.class, "MARS_JC", new Class[] {SoundEvent.class, Integer.TYPE, Integer.TYPE}, GCSounds.music, 12000, 24000); + ClientProxyCore.registerTileEntityRenderers(); + ClientProxyCore.updateCapeList(); + ClientProxyCore.registerInventoryJsons(); + + Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler((state, world, pos, tintIndex) -> + { + return BlockFallenMeteor.colorMultiplier(world, pos); + }, GCBlocks.fallenMeteor); + + Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler((state, world, pos, tintIndex) -> + { + Block b = state.getBlock(); + return (b instanceof BlockSpaceGlass) ? ((BlockSpaceGlass) b).color : 0xFFFFFF; + }, GCBlocks.spaceGlassVanilla, GCBlocks.spaceGlassClear, GCBlocks.spaceGlassStrong); + + Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler((state, world, pos, tintIndex) -> + { + if (world != null && pos != null) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityPanelLight) + { + IBlockState baseState = ((TileEntityPanelLight) tile).getBaseBlock(); + return Minecraft.getMinecraft().getBlockColors().colorMultiplier(baseState, world, pos, tintIndex); + } + } + return 0xFFFFFF; + }, GCBlocks.panelLighting); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + ClientProxyCore.registerInventoryTabs(); + ItemSchematic.registerTextures(); + + MinecraftForge.EVENT_BUS.register(new TabRegistry()); + + if (!CompatibilityManager.RenderPlayerAPILoaded) + { + try + { + RenderManager renderManager = FMLClientHandler.instance().getClient().getRenderManager(); + ASMUtil.setPrivateValue(RenderManager.class, renderManager, new RenderPlayerGC(), "playerRenderer", "field_178637_m"); + + Map skinMap = ASMUtil.getPrivateValue(RenderManager.class, renderManager, "skinMap", "field_178636_l"); + skinMap.put("default", new RenderPlayerGC(skinMap.get("default"), false)); + skinMap.put("slim", new RenderPlayerGC(skinMap.get("slim"), true)); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + ((IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager()).registerReloadListener(this); + + try + { + ASMUtil.setPrivateValue(Minecraft.class, Minecraft.getMinecraft(), new MusicTickerGC(Minecraft.getMinecraft()), "musicTicker", "field_147126_aw"); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + @Override + public void onResourceManagerReload(IResourceManager resourceManager, Predicate resourcePredicate) + { + //NOOP + } + + @Override + public void postRegisterItem(Item item) + { + if (!item.getHasSubtypes()) + { + ClientProxyCore.itemsToRegisterJson.add(item); + } + } + + @Override + public void registerVariants() + { + ClientProxyCore.addVariants(); + + Item fuel = Item.getItemFromBlock(GCBlocks.fuel); + ModelBakery.registerItemVariants(fuel, new ResourceLocation("galacticraftcore:fuel")); + ModelLoader.setCustomMeshDefinition(fuel, IItemMeshDefinitionCustom.create((ItemStack stack) -> fuelLocation)); + ModelLoader.setCustomStateMapper(GCBlocks.fuel, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return fuelLocation; + } + }); + Item oil = Item.getItemFromBlock(GCBlocks.crudeOil); + ModelBakery.registerItemVariants(oil, new ResourceLocation("galacticraftcore:oil")); + ModelLoader.setCustomMeshDefinition(oil, IItemMeshDefinitionCustom.create((ItemStack stack) -> oilLocation)); + ModelLoader.setCustomStateMapper(GCBlocks.crudeOil, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return oilLocation; + } + }); + + Item nasaWorkbench = Item.getItemFromBlock(GCBlocks.nasaWorkbench); + ModelResourceLocation modelResourceLocation = new ModelResourceLocation("galacticraftcore:rocket_workbench", "inventory"); + ModelLoader.setCustomModelResourceLocation(nasaWorkbench, 0, modelResourceLocation); + + modelResourceLocation = new ModelResourceLocation("galacticraftcore:rocket_t1", "inventory"); + for (int i = 0; i < 5; ++i) + { + ModelLoader.setCustomModelResourceLocation(GCItems.rocketTier1, i, modelResourceLocation); + } + + for (int i = 0; i < 4; ++i) + { + modelResourceLocation = new ModelResourceLocation("galacticraftcore:buggy" + (i > 0 ? "_" + i : ""), "inventory"); + ModelLoader.setCustomModelResourceLocation(GCItems.buggy, i, modelResourceLocation); + } + + modelResourceLocation = new ModelResourceLocation("galacticraftcore:flag", "inventory"); + ModelLoader.setCustomModelResourceLocation(GCItems.flag, 0, modelResourceLocation); + ModelLoader.setCustomStateMapper(GCBlocks.oxygenDetector, new StateMap.Builder().ignore(BlockOxygenDetector.ACTIVE).build()); + ModelLoader.setCustomStateMapper(GCBlocks.panelLighting, new StateMap.Builder().ignore(BlockPanelLighting.TYPE).build()); + ModelLoader.setCustomStateMapper(GCBlocks.grating, new StateMap.Builder().ignore(BlockLiquid.LEVEL).ignore(BlockFluidBase.LEVEL).build()); + BlockGrating.remapVariant(GCBlocks.gratingWater); + BlockGrating.remapVariant(GCBlocks.gratingLava); + BlockGrating.remapForgeVariants(); + ModelLoader.setCustomStateMapper(GCBlocks.concealedRedstone, new StateMap.Builder().ignore(BlockConcealedRedstone.POWER).build()); + ModelLoader.setCustomStateMapper(GCBlocks.concealedRepeater_Powered, new StateMap.Builder().ignore(BlockConcealedRepeater.FACING, BlockConcealedRepeater.DELAY, BlockConcealedRepeater.LOCKED).build()); + ModelLoader.setCustomStateMapper(GCBlocks.concealedRepeater_Unpowered, new StateMap.Builder().ignore(BlockConcealedRepeater.FACING, BlockConcealedRepeater.DELAY, BlockConcealedRepeater.LOCKED).build()); + ModelLoader.setCustomStateMapper(GCBlocks.concealedDetector, new StateMap.Builder().ignore(BlockConcealedDetector.FACING, BlockConcealedDetector.DETECTED).build()); + } + + @Override + public World getClientWorld() + { + return ClientProxyCore.mc.world; + } + + @Override + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object[] otherInfo) + { + EffectHandler.spawnParticle(particleID, position, motion, otherInfo); + } + + @Override + public World getWorldForID(int dimensionID) + { + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + return WorldUtil.getWorldForDimensionServer(dimensionID); + } + + World world = ClientProxyCore.mc.world; + + if (world != null && GCCoreUtil.getDimensionID(world) == dimensionID) + { + return world; + } + + return null; + } + + @Override + public EntityPlayer getPlayerFromNetHandler(INetHandler handler) + { + if (handler instanceof NetHandlerPlayServer) + { + return ((NetHandlerPlayServer) handler).player; + } + return FMLClientHandler.instance().getClientPlayerEntity(); + } + + @Override + public void unregisterNetwork(FluidNetwork fluidNetwork) + { + super.unregisterNetwork(fluidNetwork); + + if (!GCCoreUtil.getEffectiveSide().isServer()) + { + TickHandlerClient.removeFluidNetwork(fluidNetwork); + } + } + + @Override + public void registerNetwork(FluidNetwork fluidNetwork) + { + super.registerNetwork(fluidNetwork); + + if (!GCCoreUtil.getEffectiveSide().isServer()) + { + TickHandlerClient.addFluidNetwork(fluidNetwork); + } + } + + @Override + public boolean isPaused() + { + if (FMLClientHandler.instance().getClient().isSingleplayer() && !FMLClientHandler.instance().getClient().getIntegratedServer().getPublic()) + { + GuiScreen screen = FMLClientHandler.instance().getClient().currentScreen; + + if (screen != null) + { + return screen.doesGuiPauseGame(); + } + } + + return false; + } + + @SubscribeEvent + public void onTextureStitchedPre(TextureStitchEvent.Pre event) + { + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:blocks/assembly")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/rocket_t1")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/buggy_main")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/buggy_storage")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/buggy_wheels")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/flag0")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/frequency_module")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:blocks/fluids/oxygen_gas")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:blocks/fluids/hydrogen_gas")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:blocks/bubble")); + new TextureDungeonFinder("galacticraftcore:items/dungeonfinder").register(event.getMap()); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onModelBakeEvent(ModelBakeEvent event) + { + // Specified transformations only take effect on the "inventory" + // variant, not other variants. + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + replaceModelDefault(event, "rocket_workbench", "block/workbench.obj", ImmutableList.of("Cube"), ItemModelWorkbench.class, new TRSRTransformation(new javax.vecmath.Vector3f(0.7F, 0.1F, 0.0F), rot, new javax.vecmath.Vector3f(0.2604F, 0.2604F, 0.2604F), new javax.vecmath.Quat4f()), "inventory", "normal"); + replaceModelDefault(event, "rocket_t1", "rocket_t1.obj", ImmutableList.of("Rocket"), ItemModelRocket.class, TRSRTransformation.identity()); + + for (int i = 0; i < 4; ++i) + { + ImmutableList objects = ImmutableList.of("MainBody", "RadarDish_Dish", "Wheel_Back_Left", "Wheel_Back_Right", "Wheel_Front_Left", "Wheel_Front_Right"); + switch (i) + { + case 0: + break; + case 1: + objects = ImmutableList.of("MainBody", "RadarDish_Dish", "Wheel_Back_Left", "Wheel_Back_Right", "Wheel_Front_Left", "Wheel_Front_Right", "CargoLeft"); + break; + case 2: + objects = ImmutableList.of("MainBody", "RadarDish_Dish", "Wheel_Back_Left", "Wheel_Back_Right", "Wheel_Front_Left", "Wheel_Front_Right", "CargoLeft", "CargoMid"); + break; + case 3: + objects = ImmutableList.of("MainBody", "RadarDish_Dish", "Wheel_Back_Left", "Wheel_Back_Right", "Wheel_Front_Left", "Wheel_Front_Right", "CargoLeft", "CargoMid", "CargoRight"); + break; + } + replaceModelDefault(event, "buggy" + (i > 0 ? "_" + i : ""), "buggy_inv.obj", objects, ItemModelBuggy.class, TRSRTransformation.identity()); + } + + replaceModelDefault(event, "flag", "flag.obj", ImmutableList.of("Flag", "Pole"), ItemModelFlag.class, TRSRTransformation.identity()); + ModelResourceLocation blockLoc = new ModelResourceLocation(Constants.ASSET_PREFIX + ":panel_lighting", "normal"); + ModelResourceLocation defaultLoc; + defaultLoc = new ModelResourceLocation(GalacticraftPlanets.ASSET_PREFIX + ":asteroids_block", "basictypeasteroids=asteroid_deco"); + event.getModelRegistry().putObject(blockLoc, new ModelPanelLightBase(defaultLoc)); + defaultLoc = new ModelResourceLocation(Constants.ASSET_PREFIX + ":grating", "normal"); + event.getModelRegistry().putObject(defaultLoc, new ModelGrating(defaultLoc, event.getModelManager())); + for (int i = 1; i < BlockGrating.number; i++) + { + blockLoc = new ModelResourceLocation(Constants.ASSET_PREFIX + ":grating" + i, "normal"); + event.getModelRegistry().putObject(blockLoc, new ModelGrating(defaultLoc, event.getModelManager())); + } + } + + /** + * Specified parentState transformations only take effect on the "inventory" + * variant, not other variants Make sure that identity gives the correct + * model for other variants! Used for example by the NASA Workbench: + * transform the model for inventory but not for normal model + */ + private void replaceModelDefault(ModelBakeEvent event, String resLoc, String objLoc, List visibleGroups, Class clazz, IModelState parentState, String... variants) + { + ClientUtil.replaceModel(Constants.ASSET_PREFIX, event, resLoc, objLoc, visibleGroups, clazz, parentState, variants); + } + + public static void registerEntityRenderers() + { + RenderingRegistry.registerEntityRenderingHandler(EntityTier1Rocket.class, (RenderManager manager) -> new RenderTier1Rocket(manager, new ModelRocketTier1(), Constants.ASSET_PREFIX, "rocket_t1")); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedSpider.class, (RenderManager manager) -> new RenderEvolvedSpider(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedZombie.class, (RenderManager manager) -> new RenderEvolvedZombie(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedCreeper.class, (RenderManager manager) -> new RenderEvolvedCreeper(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedSkeleton.class, (RenderManager manager) -> new RenderEvolvedSkeleton(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntitySkeletonBoss.class, (RenderManager manager) -> new RenderEvolvedSkeletonBoss(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityMeteor.class, (RenderManager manager) -> new RenderMeteor(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityFlag.class, (RenderManager manager) -> new RenderFlag(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityParachest.class, (RenderManager manager) -> new RenderParaChest(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityAlienVillager.class, (RenderManager manager) -> new RenderAlienVillager(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityLander.class, (RenderManager manager) -> new RenderLander(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityCelestialFake.class, (RenderManager manager) -> new RenderEntityFake(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityBuggy.class, (RenderManager manager) -> new RenderBuggy(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityMeteorChunk.class, (RenderManager manager) -> new RenderMeteorChunk(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityHangingSchematic.class, (RenderManager manager) -> new RenderSchematic(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedEnderman.class, (RenderManager manager) -> new RenderEvolvedEnderman(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedWitch.class, (RenderManager manager) -> new RenderEvolvedWitch(manager)); + } + + private static void registerHandlers() + { + TickHandlerClient tickHandlerClient = new TickHandlerClient(); + MinecraftForge.EVENT_BUS.register(tickHandlerClient); + MinecraftForge.EVENT_BUS.register(new KeyHandlerClient()); + ClientRegistry.registerKeyBinding(KeyHandlerClient.galaxyMap); + ClientRegistry.registerKeyBinding(KeyHandlerClient.openFuelGui); + ClientRegistry.registerKeyBinding(KeyHandlerClient.toggleAdvGoggles); + MinecraftForge.EVENT_BUS.register(new EventHandlerClient()); + } + + private static void registerTileEntityRenderers() + { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTreasureChest.class, new TileEntityTreasureChestRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySolar.class, new TileEntitySolarPanelRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityScreen.class, new TileEntityScreenRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluidTank.class, new TileEntityFluidTankRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluidPipe.class, new TileEntityFluidPipeRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDish.class, new TileEntityDishRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityArclamp.class, new TileEntityArclampRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPanelLight.class, new TileEntityPanelLightRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPlatform.class, new TileEntityPlatformRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEmergencyBox.class, new TileEntityEmergencyBoxRenderer()); + } + + private static void registerInventoryJsons() + { + for (Item toReg : ClientProxyCore.itemsToRegisterJson) + { + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, toReg); + } + + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.canister, 0, "canister"); // This + // was + // canister_tin + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.canister, 1, "canister_copper"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.rocketEngine, 0, "engine"); // This + // was + // tier1engine + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.rocketEngine, 1, "tier1booster"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 0, "parachute"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 1, "parachute_black"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 2, "parachute_blue"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 3, "parachute_lime"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 4, "parachute_brown"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 5, "parachute_darkblue"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 6, "parachute_darkgray"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 7, "parachute_darkgreen"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 8, "parachute_gray"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 9, "parachute_magenta"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 10, "parachute_orange"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 11, "parachute_pink"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 12, "parachute_purple"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 13, "parachute_red"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 14, "parachute_teal"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 15, "parachute_yellow"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.schematic, 0, "schematic"); // This + // was + // schematic_buggy + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.schematic, 1, "schematic_rocket_t2"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.key, 0, "key"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.partBuggy, 0, "buggymat"); // This + // was + // wheel + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.partBuggy, 1, "seat"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.partBuggy, 2, "storage"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 0, "basic_item"); // This + // was + // solar_module_0 + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 1, "solar_module_1"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 2, "raw_silicon"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 3, "ingot_copper"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 4, "ingot_tin"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 5, "ingot_aluminum"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 6, "compressed_copper"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 7, "compressed_tin"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 8, "compressed_aluminum"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 9, "compressed_steel"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 10, "compressed_bronze"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 11, "compressed_iron"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 12, "wafer_solar"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 13, "wafer_basic"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 14, "wafer_advanced"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 15, "food"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 16, "dehydrated_carrot"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 17, "dehydrated_melon"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 18, "dehydrated_potato"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 19, "frequency_module"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 20, "ambient_thermal_controller"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.foodItem, 0, "food"); + for (int j = 1; j < ItemFood.names.length; j++) + { + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.foodItem, j, ItemFood.names[j]); + } + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.itemBasicMoon, 0, "item_basic_moon"); // This + // was + // meteoric_iron_ingot + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.itemBasicMoon, 1, "compressed_meteoric_iron"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.itemBasicMoon, 2, "lunar_sapphire"); + if (CompatibilityManager.isIc2Loaded()) + { + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.ic2compat, 0, "ic2compat"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.ic2compat, 1, "ic2_ore_purified_alu"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.ic2compat, 2, "ic2_ore_crushed_alu"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.ic2compat, 7, "ic2_dust_small_titanium"); + } + + for (PartialCanister container : ClientProxyCore.canisters) + { + for (int i = 0; i <= container.getItem().getMaxDamage(); ++i) + { + final int levels = container.getTextureCount() - 1; + final int fillLevel = levels - levels * i / container.getItem().getMaxDamage(); + ClientUtil.registerItemJson(container.getModID() + ":", container.getItem(), i, container.getBaseName() + (fillLevel > 0 ? "_" + fillLevel : "")); + } + } + + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.meteorChunk, 0, "meteor_chunk"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.meteorChunk, 1, "meteor_chunk_hot"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.buggy, 0, "buggy"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.buggy, 1, "buggy_1"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.buggy, 2, "buggy_2"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.buggy, 3, "buggy_3"); + + // Blocks + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.breatheableAir); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.brightAir); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.brightBreatheableAir); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.brightLamp); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.treasureChestTier1); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.landingPad, 0, "landing_pad"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.landingPad, 1, "buggy_pad"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.unlitTorch); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.unlitTorchLit); + for (Block torch : GCBlocks.otherModTorchesLit) + { + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, torch); + } + for (Block torch : GCBlocks.otherModTorchesUnlit) + { + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, torch); + } + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenDistributor); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenPipe); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenPipePull); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenCollector); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenCompressor, 0, "oxygen_compressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenCompressor, 4, "oxygen_decompressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenSealer); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenDetector); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.nasaWorkbench); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.compactNasaWorkbench); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.radioTelescope); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.fallenMeteor); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 3, "deco_block_0"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 4, "deco_block_1"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 5, "ore_copper_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 6, "ore_tin_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 7, "ore_aluminum_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 8, "ore_silicon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 9, "block_copper_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 10, "block_tin_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 11, "block_aluminum_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 12, "block_meteoric_iron_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 13, "block_silicon_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.airLockFrame, 0, "air_lock_frame"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.airLockFrame, 1, "air_lock_controller"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.airLockSeal, 0, "air_lock_seal"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassClear, 0, "space_glass_clear"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassVanilla, 0, "space_glass_vanilla"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassStrong, 0, "space_glass_strong"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassClear, 1, "space_glass_tin_clear"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassVanilla, 1, "space_glass_tin_vanilla"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassStrong, 1, "space_glass_tin_strong"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.crafting); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.refinery); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.fuelLoader); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.landingPadFull, 0, "landing_pad_full"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.landingPadFull, 1, "buggy_pad_full"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceStationBase); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.fakeBlock); + for (BlockEnclosed.EnumEnclosedBlockType type : BlockEnclosed.EnumEnclosedBlockType.values()) + { + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.sealableBlock, type.getMeta(), type == BlockEnclosed.EnumEnclosedBlockType.ALUMINUM_WIRE ? "enclosed" : type.getName()); + } + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.cargoLoader, 0, "cargo"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.cargoLoader, 4, "cargo_unloader"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.parachest); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.solarPanel, 0, "solar"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.solarPanel, 4, "advanced_solar"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase, 0, "coal_generator"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase, 12, "ingot_compressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase2, 0, "electric_ingot_compressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase2, 4, "circuit_fabricator"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase2, 8, "oxygen_storage_module"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase2, 12, "deconstructor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineTiered, 0, "energy_storage"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineTiered, 4, "electric_furnace"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineTiered, 8, "cluster_storage"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineTiered, 12, "arc_furnace"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase3, 0, "painter"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase4, 0, "advanced_compressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.aluminumWire, 0, "aluminum_wire"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.aluminumWire, 1, "aluminum_wire_heavy"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.aluminumWire, 2, "aluminum_wire_switch"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.aluminumWire, 3, "aluminum_wire_switch_heavy"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 0, "panel_lighting"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 1, "panel_lighting_1"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 2, "panel_lighting_2"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 3, "panel_lighting_3"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 4, "panel_lighting_4"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.platform); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.emergencyBox, 0, "emergency_box"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.emergencyBox, 1, "emergency_box_full"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.grating); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.glowstoneTorch); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 0, "ore_copper_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 1, "ore_tin_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 2, "ore_cheese_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 3, "moon_dirt_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 4, "basic_block_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 5, "moon_turf"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 6, "ore_sapphire_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 14, "moon_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.cheeseBlock); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spinThruster); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.screen); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.telemetry); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.fluidTank); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 0, "slab_tin_1"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 1, "slab_tin_2"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 2, "slab_moon_stone"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 3, "slab_moon_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 4, "slab_mars_cobblestone"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 5, "slab_mars_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 6, "slab_asteroid"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.tinStairs1); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.tinStairs2); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.moonStoneStairs); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.moonBricksStairs); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 0, "wall_tin_1"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 1, "wall_tin_2"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 2, "wall_moon_stone"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 3, "wall_moon_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 4, "wall_mars_cobblestone"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 5, "wall_mars_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.bossSpawner); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.concealedRedstone); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.concealedRepeater_Powered); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.concealedRepeater_Unpowered); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.concealedDetector); + // TODO: doubleslabs, fluids - and all the remaining meta-dependent + // block models (e.g. machine, machine2) have no 'inventory' variant for + // the meta-less block... + } + + private static void addVariants() + { + // BlockItem variants: + addCoreVariant("air_lock_frame", "air_lock_frame", "air_lock_controller"); + addCoreVariant("basic_block_core", "deco_block_0", "deco_block_1", "ore_copper_gc", "ore_tin_gc", "ore_aluminum_gc", "ore_silicon", "block_copper_gc", "block_tin_gc", "block_aluminum_gc", "block_meteoric_iron_gc", "block_silicon_gc"); + addCoreVariant("air_lock_frame", "air_lock_frame", "air_lock_controller"); + addCoreVariant("landing_pad", "landing_pad", "buggy_pad"); + addCoreVariant("oxygen_compressor", "oxygen_compressor", "oxygen_decompressor"); + addCoreVariant("cargo", "cargo", "cargo_unloader"); + addCoreVariant("enclosed", "enclosed_hv_cable", "enclosed_fluid_pipe", "enclosed_copper_cable", "enclosed_gold_cable", "enclosed_te_conduit", "enclosed_glass_fibre_cable", "enclosed_lv_cable", "enclosed_pipe_items_stone", "enclosed_pipe_items_cobblestone", "enclosed_pipe_fluids_stone", "enclosed_pipe_fluids_cobblestone", "enclosed_pipe_power_stone", "enclosed_pipe_power_gold", "enclosed_me_cable", "enclosed", "enclosed_heavy_aluminum_wire"); + addCoreVariant("solar", "advanced_solar", "solar"); + addCoreVariant("machine", "coal_generator", "ingot_compressor"); + addCoreVariant("machine2", "circuit_fabricator", "oxygen_storage_module", "electric_ingot_compressor", "deconstructor"); + addCoreVariant("machine3", "painter"); + addCoreVariant("machine4", "advanced_compressor"); + addCoreVariant("machine_tiered", "energy_storage", "electric_furnace", "cluster_storage", "arc_furnace"); + addCoreVariant("basic_block_moon", "ore_copper_moon", "ore_tin_moon", "ore_cheese_moon", "moon_dirt_moon", "basic_block_moon", "moon_turf", "ore_sapphire_moon", "moon_dungeon_brick"); + addCoreVariant("aluminum_wire", "aluminum_wire", "aluminum_wire_heavy", "aluminum_wire_switch", "aluminum_wire_switch_heavy"); + addCoreVariant("slab_gc_half", "slab_tin_1", "slab_tin_2", "slab_moon_stone", "slab_moon_dungeon_brick", "slab_mars_cobblestone", "slab_mars_dungeon_brick", "slab_asteroid"); + addCoreVariant("wall_gc", "wall_tin_1", "wall_tin_2", "wall_moon_stone", "wall_moon_dungeon_brick", "wall_mars_cobblestone", "wall_mars_dungeon_brick"); + addCoreVariant("space_glass_clear", "space_glass_clear", "space_glass_tin_clear"); + addCoreVariant("space_glass_vanilla", "space_glass_vanilla", "space_glass_tin_vanilla"); + addCoreVariant("space_glass_strong", "space_glass_strong", "space_glass_tin_strong"); + addCoreVariant("panel_lighting", "panel_lighting", "panel_lighting_1", "panel_lighting_2", "panel_lighting_3", "panel_lighting_4"); + addCoreVariant("emergency_box", "emergency_box", "emergency_box_full"); + + // Item variants: best if the damage=0 variant has the registered item + // name, to avoid ModelLoader errors for the #inventory variant + addCoreVariant("canister", "canister", "canister_copper"); + addCoreVariant("engine", "engine", "tier1booster"); + addCoreVariant("parachute", "parachute", "parachute_black", "parachute_blue", "parachute_lime", "parachute_brown", "parachute_darkblue", "parachute_darkgray", "parachute_darkgreen", "parachute_gray", "parachute_magenta", "parachute_orange", "parachute_pink", "parachute_purple", "parachute_red", "parachute_teal", "parachute_yellow"); + addCoreVariant("schematic", "schematic", "schematic_rocket_t2"); + addCoreVariant("key", "key"); + addCoreVariant("buggymat", "buggymat", "seat", "storage"); + addCoreVariant("basic_item", "basic_item", "solar_module_1", "raw_silicon", "ingot_copper", "ingot_tin", "ingot_aluminum", "compressed_copper", "compressed_tin", "compressed_aluminum", "compressed_steel", "compressed_bronze", "compressed_iron", "wafer_solar", "wafer_basic", "wafer_advanced", "food", "dehydrated_carrot", "dehydrated_melon", "dehydrated_potato", "frequency_module", "ambient_thermal_controller"); + addCoreVariant("food", "food", "dehydrated_carrot", "dehydrated_melon", "dehydrated_potato", ItemFood.names[4], ItemFood.names[5], ItemFood.names[6], ItemFood.names[7], ItemFood.names[8], ItemFood.names[9]); + addCoreVariant("item_basic_moon", "item_basic_moon", "compressed_meteoric_iron", "lunar_sapphire"); + addCoreVariant("meteor_chunk", "meteor_chunk", "meteor_chunk_hot"); + addCoreVariant("buggy", "buggy", "buggy_1", "buggy_2", "buggy_3"); + if (CompatibilityManager.isIc2Loaded()) + addCoreVariant("ic2compat", "ic2compat", "ic2_ore_purified_alu", "ic2_ore_crushed_alu", "ic2_dust_small_titanium"); + + for (PartialCanister container : ClientProxyCore.canisters) + { + String[] variants = new String[container.getTextureCount()]; + for (int i = 0; i < container.getTextureCount(); ++i) + { + variants[i] = container.getBaseName() + (i > 0 ? "_" + i : ""); + } + ClientUtil.addVariant(container.getModID(), container.getBaseName(), variants); + } + } + + private static void addCoreVariant(String name, String... variants) + { + ClientUtil.addVariant(Constants.MOD_ID_CORE, name, variants); + } + + public static void registerInventoryTabs() + { + if (TabRegistry.getTabList().size() == 0) + { + TabRegistry.registerTab(new InventoryTabVanilla()); + } + + TabRegistry.registerTab(new InventoryTabGalacticraft()); + } + + @Override + public void registerCanister(PartialCanister container) + { + ClientProxyCore.canisters.add(container); + } + + @Override + public void registerFluidTexture(Fluid fluid, ResourceLocation submergedTexture) + { + ClientProxyCore.submergedTextures.put(fluid, submergedTexture); + } + + private static void updateCapeList() + { + int timeout = 10000; + URL capeListUrl; + + try + { + capeListUrl = new URL("https://raw.github.com/micdoodle8/Galacticraft/master/capes-uuid.txt"); + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.noticableWarning(e, "Error getting capes list URL"); + } + else + { + GalacticraftCore.logger.warn("Error getting capes list URL"); + } + return; + } + + URLConnection connection; + + try + { + connection = capeListUrl.openConnection(); + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + e.printStackTrace(); + return; + } + + connection.setConnectTimeout(timeout); + connection.setReadTimeout(timeout); + InputStream stream; + + try + { + stream = connection.getInputStream(); + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + e.printStackTrace(); + return; + } + + InputStreamReader streamReader = new InputStreamReader(stream); + BufferedReader reader = new BufferedReader(streamReader); + + String line; + try + { + while ((line = reader.readLine()) != null) + { + if (line.contains(":")) + { + capeMap.put(line.split(":")[0], new ResourceLocation(Constants.MOD_ID_CORE, "textures/misc/capes/cape_" + line.split(":")[1].split(" ")[0].substring(4).toLowerCase() + ".png")); + } + } + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + e.printStackTrace(); + } finally + { + try + { + reader.close(); + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + e.printStackTrace(); + } + } + } + + public static class EventSpecialRender extends Event + { + + public final float partialTicks; + + public EventSpecialRender(float partialTicks) + { + this.partialTicks = partialTicks; + } + } + + @Override + public PlayerGearData getGearData(EntityPlayer player) + { + PlayerGearData gearData = ClientProxyCore.playerItemData.get(player.getName()); + + if (gearData == null) + { + UUID id = player.getUniqueID(); + + if (!ClientProxyCore.gearDataRequests.contains(id)) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_GEAR_DATA2, GCCoreUtil.getDimensionID(player.world), new Object[] {id})); + ClientProxyCore.gearDataRequests.add(id); + } + } + + return gearData; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/CommonProxyCore.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/CommonProxyCore.java new file mode 100644 index 00000000..9aadba14 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/CommonProxyCore.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.proxy; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.IPlayerServer; +import micdoodle8.mods.galacticraft.core.entities.player.PlayerServer; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PartialCanister; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; + +public class CommonProxyCore +{ + + public IPlayerServer player = new PlayerServer(); + + public void preInit(FMLPreInitializationEvent event) + { + } + + public void registerVariants() + { + + } + + public void init(FMLInitializationEvent event) + { + } + + public void postInit(FMLPostInitializationEvent event) + { + } + + public void registerCanister(PartialCanister container) + { + } + + public void registerFluidTexture(Fluid fluid, ResourceLocation submergedTexture) + { + } + + public World getClientWorld() + { + return null; + } + + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object[] otherInfo) + { + } + + public World getWorldForID(int dimensionID) + { + return WorldUtil.getWorldForDimensionServer(dimensionID); + } + + public EntityPlayer getPlayerFromNetHandler(INetHandler handler) + { + if (handler instanceof NetHandlerPlayServer) + { + return ((NetHandlerPlayServer) handler).player; + } else + { + return null; + } + } + + public void postRegisterItem(Item item) + { + } + + public void unregisterNetwork(FluidNetwork fluidNetwork) + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + TickHandlerServer.removeFluidNetwork(fluidNetwork); + } + } + + public void registerNetwork(FluidNetwork fluidNetwork) + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + TickHandlerServer.addFluidNetwork(fluidNetwork); + } + } + + public boolean isPaused() + { + return false; + } + + public PlayerGearData getGearData(EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + int mask = stats.getMaskInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getMaskInSlot(), EnumExtendedInventorySlot.MASK); + int gear = stats.getGearInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getGearInSlot(), EnumExtendedInventorySlot.GEAR); + int leftTank = stats.getTankInSlot1() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot1(), EnumExtendedInventorySlot.LEFT_TANK); + int rightTank = stats.getTankInSlot2() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot2(), EnumExtendedInventorySlot.RIGHT_TANK); + int frequencyModule = stats.getFrequencyModuleInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT + : GalacticraftRegistry.findMatchingGearID(stats.getFrequencyModuleInSlot(), EnumExtendedInventorySlot.FREQUENCY_MODULE); + int[] thermalPadding = new int[4]; + thermalPadding[0] = stats.getThermalHelmetInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT + : GalacticraftRegistry.findMatchingGearID(stats.getThermalHelmetInSlot(), EnumExtendedInventorySlot.THERMAL_HELMET); + thermalPadding[1] = stats.getThermalChestplateInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT + : GalacticraftRegistry.findMatchingGearID(stats.getThermalChestplateInSlot(), EnumExtendedInventorySlot.THERMAL_CHESTPLATE); + thermalPadding[2] = stats.getThermalLeggingsInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT + : GalacticraftRegistry.findMatchingGearID(stats.getThermalLeggingsInSlot(), EnumExtendedInventorySlot.THERMAL_LEGGINGS); + thermalPadding[3] = + stats.getThermalBootsInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getThermalBootsInSlot(), EnumExtendedInventorySlot.THERMAL_BOOTS); + // TODO: Parachute + return new PlayerGearData(player, mask, gear, leftTank, rightTank, frequencyModule, thermalPadding); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleActuallyAdditions.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleActuallyAdditions.java new file mode 100644 index 00000000..9aa699d1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleActuallyAdditions.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; + +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; + +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; + +public class CompatModuleActuallyAdditions +{ + + public static void addRecipes() + { + ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("oreAluminum"), OreDictionary.getOres("dustAluminum"), 2, new ArrayList(0), 0, 0); + // Silicon ore :- gives 5 silicon (normally 1-5 depending on fortune enchantment) + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(GCBlocks.basicBlock, 1, 8), new ItemStack(GCItems.basicItem, 5, 2), ItemStack.EMPTY, 0); + // Cheese ore :- gives 2 cheese curd (normally 1, fortune enchantment gives chance of 2) + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(GCBlocks.blockMoon, 1, 2), new ItemStack(GCItems.cheeseCurd, 2, 0), ItemStack.EMPTY, 0); + // Desh ore :- gives 2 raw desh (normally 1, fortune enchantment gives chance of 2) + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 2), new ItemStack(MarsItems.marsItemBasic, 2, 0), ItemStack.EMPTY, 0); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleIC2.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleIC2.java new file mode 100644 index 00000000..73322543 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleIC2.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.nbt.NBTTagCompound; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +import ic2.api.item.IC2Items; +import ic2.api.recipe.Recipes; + +public class CompatModuleIC2 +{ + + public static void addIndustrialCraft2Recipes() + { + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.ic2compat, 1, 1), new ItemStack(GCItems.basicItem, 1, 5), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.ic2compat, 1, 2), new ItemStack(GCItems.basicItem, 1, 5), 1.0F); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCBlocks.basicBlock, 1, 7), 1), null, false, new ItemStack(GCItems.ic2compat, 2, 2)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.basicItem, 1, 5), 1), null, false, new ItemStack(GCItems.ic2compat, 1, 0)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.basicItem, 1, 8), 1), null, false, new ItemStack(GCItems.ic2compat, 1, 0)); + ItemStack dustSmallIron = IC2Items.getItem("dust", "small_iron").copy(); + ItemStack dustStone = IC2Items.getItem("dust", "stone").copy(); + NBTTagCompound amountTag = new NBTTagCompound(); + amountTag.setInteger("amount", 1000); + ItemStack dustSmallTitanium = new ItemStack(GCItems.ic2compat, 1, 7); + NBTTagCompound heatTag1 = new NBTTagCompound(); + heatTag1.setInteger("minHeat", 2000); + Recipes.centrifuge.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.ic2compat, 1, 1), 1), heatTag1, false, new ItemStack[] + {dustSmallTitanium, new ItemStack(GCItems.ic2compat, 1, 0)}); + NBTTagCompound heatTag2 = new NBTTagCompound(); + heatTag2.setInteger("minHeat", 750); + Recipes.centrifuge.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.ic2compat, 1, 2), 1), heatTag1, false, new ItemStack[] + {dustSmallIron, new ItemStack(GCItems.ic2compat, 1, 0), dustStone}); + dustSmallIron = dustSmallIron.copy(); + dustSmallIron.setCount(2); + Recipes.oreWashing.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.ic2compat, 1, 2), 1), amountTag, false, new ItemStack[] + {new ItemStack(GCItems.ic2compat, 1, 1), dustSmallIron, dustStone}); + + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_COPPER_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:copper,insulation:0"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_GOLD_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:gold,insulation:1"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_HV_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:iron,insulation:1"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_GLASS_FIBRE_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:glass,insulation:0"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_LV_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:tin,insulation:1"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ConditionEnabled.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ConditionEnabled.java new file mode 100644 index 00000000..72caf488 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ConditionEnabled.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.function.BooleanSupplier; + +import net.minecraft.util.JsonUtils; + +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.IConditionFactory; +import net.minecraftforge.common.crafting.JsonContext; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +import com.google.gson.JsonObject; + +public class ConditionEnabled implements IConditionFactory +{ + + @Override + public BooleanSupplier parse(JsonContext context, JsonObject json) + { + if (JsonUtils.hasField(json, "data")) + { + String data = JsonUtils.getString(json, "data"); + if (data.equals("can_default")) + { + return () -> !ConfigManagerCore.alternateCanisterRecipe; + } + if (data.equals("can_alt")) + { + return () -> ConfigManagerCore.alternateCanisterRecipe; + } + if (data.equals("aa_loaded")) + { + return () -> !CompatibilityManager.modAALoaded; + } + GalacticraftCore.logger.error("Unrecognised condition data: " + data); + } + + throw new IllegalStateException("Galacticraft recipe JSON condition error in recipe for " + CraftingHelper.getItemStack(json, context)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientAdvancedMetal.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientAdvancedMetal.java new file mode 100644 index 00000000..e7e8bdfc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientAdvancedMetal.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.JsonUtils; + +import net.minecraftforge.common.crafting.IIngredientFactory; +import net.minecraftforge.common.crafting.JsonContext; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +import com.google.gson.JsonObject; + +public class IngredientAdvancedMetal implements IIngredientFactory +{ + + @Nonnull + @Override + public Ingredient parse(JsonContext context, JsonObject json) + { + String metal = JsonUtils.getString(json, "metal"); + if (metal.equals("meteoric_iron_ingot")) + { + return Ingredient.fromStacks(new ItemStack(GCItems.itemBasicMoon, 1, 0)); + } + if (metal.equals("meteoric_iron_plate")) + { + return Ingredient.fromStacks(new ItemStack(GCItems.itemBasicMoon, 1, 1)); + } + if (metal.equals("desh_ingot")) + { + return Ingredient.fromStacks(new ItemStack(MarsItems.marsItemBasic, 1, 2)); + } + if (metal.equals("desh_plate")) + { + return Ingredient.fromStacks(new ItemStack(MarsItems.marsItemBasic, 1, 5)); + } + if (metal.equals("titanium_ingot")) + { + return Ingredient.fromStacks(new ItemStack(AsteroidsItems.basicItem, 1, 0)); + } + if (metal.equals("titanium_plate")) + { + return Ingredient.fromStacks(new ItemStack(AsteroidsItems.basicItem, 1, 6)); + } + if (metal.equals("lead_ingot")) + { + return Ingredient.fromStacks(new ItemStack(VenusItems.basicItem, 1, 1)); + } + return Ingredient.fromItem(GCItems.infiniteBatery); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientSilicon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientSilicon.java new file mode 100644 index 00000000..6389aaa8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientSilicon.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import javax.annotation.Nonnull; + +import net.minecraft.item.crafting.Ingredient; + +import net.minecraftforge.common.crafting.IIngredientFactory; +import net.minecraftforge.common.crafting.JsonContext; +import net.minecraftforge.oredict.OreIngredient; + +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +import com.google.gson.JsonObject; + +public class IngredientSilicon implements IIngredientFactory +{ + + @Nonnull + @Override + public Ingredient parse(JsonContext context, JsonObject json) + { + return new OreIngredient(ConfigManagerCore.otherModsSilicon); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/NasaWorkbenchRecipe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/NasaWorkbenchRecipe.java new file mode 100644 index 00000000..e3351be5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/NasaWorkbenchRecipe.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.HashMap; +import java.util.Map.Entry; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; + +public class NasaWorkbenchRecipe implements INasaWorkbenchRecipe +{ + + private ItemStack output; + private HashMap input; + + public NasaWorkbenchRecipe(ItemStack output, HashMap input) + { + this.output = output; + this.input = input; + + for (Entry entry : this.input.entrySet()) + { + if (entry.getValue() == null) + { + throw new IllegalArgumentException("Recipe contains null ingredient!"); + } + } + } + + @Override + public boolean matches(IInventory inventory) + { + for (Entry entry : this.input.entrySet()) + { + ItemStack stackAt = inventory.getStackInSlot(entry.getKey()); + + if (!this.checkItemEquals(stackAt, entry.getValue())) + { + return false; + } + } + + return true; + } + + private boolean checkItemEquals(ItemStack target, ItemStack input) + { + if (input.isEmpty() && !target.isEmpty() || !input.isEmpty() && target.isEmpty()) + { + return false; + } + return target.isEmpty() && input.isEmpty() + || target.getItem() == input.getItem() && (target.getItemDamage() == OreDictionary.WILDCARD_VALUE || target.getItemDamage() == input.getItemDamage()); + } + + @Override + public int getRecipeSize() + { + return this.input.size(); + } + + @Override + public ItemStack getRecipeOutput() + { + return this.output.copy(); + } + + @Override + public HashMap getRecipeInput() + { + return this.input; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/OreRecipeUpdatable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/OreRecipeUpdatable.java new file mode 100644 index 00000000..94bbe394 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/OreRecipeUpdatable.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.CraftingHelper.ShapedPrimer; +import net.minecraftforge.common.crafting.IRecipeFactory; +import net.minecraftforge.common.crafting.JsonContext; +import net.minecraftforge.oredict.OreIngredient; +import net.minecraftforge.oredict.ShapedOreRecipe; + +import micdoodle8.mods.galacticraft.api.recipe.IRecipeUpdatable; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; + +public class OreRecipeUpdatable extends ShapedOreRecipe implements IRecipeUpdatable +{ + + public OreRecipeUpdatable(ResourceLocation group, Block result, Object... recipe) + { + super(group, new ItemStack(result), recipe); + } + + public OreRecipeUpdatable(ResourceLocation group, Item result, Object... recipe) + { + super(group, new ItemStack(result), recipe); + } + + public OreRecipeUpdatable(ResourceLocation group, @Nonnull ItemStack result, Object... recipe) + { + super(group, result, CraftingHelper.parseShaped(recipe)); + } + + public OreRecipeUpdatable(ResourceLocation group, @Nonnull ItemStack result, ShapedPrimer primer) + { + super(group, result, primer); + } + + @Override + public void replaceInput(ItemStack inputA, List inputB) + { + if (inputB.isEmpty()) + return; + + for (int i = 0; i < this.input.size(); i++) + { + Ingredient test = this.input.get(i); + if (test.apply(inputA)) + { + this.input.set(i, Ingredient.fromStacks(inputB.toArray(new ItemStack[inputB.size()]))); + } + } + } + + @Override + public void replaceInput(ItemStack inputB) + { + for (int i = 0; i < this.input.size(); i++) + { + Ingredient test = this.input.get(i); + if (test instanceof OreIngredient && test.apply(inputB)) + { + this.input.set(i, Ingredient.fromStacks(inputB)); + } + } + } + + public static boolean itemListContains(List test, ItemStack stack) + { + for (Object b : test) + { + if (b instanceof ItemStack && ItemStack.areItemsEqual(stack, (ItemStack) b) && RecipeUtil.areItemStackTagsEqual(stack, (ItemStack) b)) + return true; + } + return false; + } + + public static OreRecipeUpdatable factory(JsonContext context, JsonObject json) + { + String group = JsonUtils.getString(json, "group", ""); + Map ingMap = Maps.newHashMap(); + for (Entry entry : JsonUtils.getJsonObject(json, "key").entrySet()) + { + if (entry.getKey().length() != 1) + throw new JsonSyntaxException("Invalid key entry: '" + entry.getKey() + "' is an invalid symbol (must be 1 character only)."); + if (" ".equals(entry.getKey())) + throw new JsonSyntaxException("Invalid key entry: ' ' is a reserved symbol."); + + ingMap.put(entry.getKey().toCharArray()[0], CraftingHelper.getIngredient(entry.getValue(), context)); + } + + ingMap.put(' ', Ingredient.EMPTY); + + JsonArray patternJ = JsonUtils.getJsonArray(json, "pattern"); + + if (patternJ.size() == 0) + throw new JsonSyntaxException("Invalid pattern: empty pattern not allowed"); + + String[] pattern = new String[patternJ.size()]; + for (int x = 0; x < pattern.length; ++x) + { + String line = JsonUtils.getString(patternJ.get(x), "pattern[" + x + "]"); + if (x > 0 && pattern[0].length() != line.length()) + throw new JsonSyntaxException("Invalid pattern: each row must be the same width"); + pattern[x] = line; + } + + ShapedPrimer primer = new ShapedPrimer(); + primer.width = pattern[0].length(); + primer.height = pattern.length; + primer.mirrored = JsonUtils.getBoolean(json, "mirrored", true); + primer.input = NonNullList.withSize(primer.width * primer.height, Ingredient.EMPTY); + + Set keys = Sets.newHashSet(ingMap.keySet()); + keys.remove(' '); + + int x = 0; + for (String line : pattern) + { + for (char chr : line.toCharArray()) + { + Ingredient ing = ingMap.get(chr); + if (ing == null) + throw new JsonSyntaxException("Pattern references symbol '" + chr + "' but it's not defined in the key"); + primer.input.set(x++, ing); + keys.remove(chr); + } + } + + if (!keys.isEmpty()) + throw new JsonSyntaxException("Key defines symbols that aren't used in pattern: " + keys); + + ItemStack result = CraftingHelper.getItemStack(JsonUtils.getJsonObject(json, "result"), context); + return new OreRecipeUpdatable(group.isEmpty() ? null : new ResourceLocation(group), result, primer); + } + + public static class RecipeFactory implements IRecipeFactory + { + + @Override + public IRecipe parse(JsonContext context, JsonObject json) + { + return OreRecipeUpdatable.factory(context, json); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/RecipeManagerGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/RecipeManagerGC.java new file mode 100644 index 00000000..4553bd4b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/RecipeManagerGC.java @@ -0,0 +1,567 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Optional; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.IRecipeUpdatable; +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; +import micdoodle8.mods.galacticraft.api.world.SpaceStationType; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed.EnumEnclosedBlockType; +import micdoodle8.mods.galacticraft.core.items.ItemBasic; +import micdoodle8.mods.galacticraft.core.items.ItemEmergencyKit; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +import appeng.api.AEApi; +import appeng.api.features.IGrinderRegistry; +import appeng.api.util.AEColor; + +public class RecipeManagerGC +{ + + public static ArrayList aluminumIngots = new ArrayList<>(); + private static boolean configSaved_RequireGCmetals = true; + private static boolean configSaved_QuickMode = false; + private static String configSaved_Silicon = "-"; + + public static void loadCompatibilityRecipes() + { + if (CompatibilityManager.isBCraftTransportLoaded()) + { + RecipeManagerGC.addBuildCraftCraftingRecipes(); + } + + if (CompatibilityManager.isIc2Loaded()) + { + CompatModuleIC2.addIndustrialCraft2Recipes(); + } + + if (CompatibilityManager.isAppEngLoaded()) + { + RecipeManagerGC.addAppEngRecipes(); + } + + if (CompatibilityManager.modAALoaded) + { + CompatModuleActuallyAdditions.addRecipes(); + } + + RecipeManagerGC.addExNihiloHeatSource(); + } + + public static void addUniversalRecipes() + { + // Look im just following orders here + //RecipeSorter.register("galacticraftcore:shapedore", OreRecipeUpdatable.class, Category.SHAPED, "after:minecraft:shaped before:minecraft:shapeless"); + + Object meteoricIronIngot = new ItemStack(GCItems.itemBasicMoon, 1, 0); + Object meteoricIronPlate = new ItemStack(GCItems.itemBasicMoon, 1, 1); + Object deshIngot = new ItemStack(MarsItems.marsItemBasic, 1, 2); + + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.basicBlock, 1, 5), new ItemStack(GCItems.basicItem, 1, 3), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.basicBlock, 1, 6), new ItemStack(GCItems.basicItem, 1, 4), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.basicBlock, 1, 7), new ItemStack(GCItems.basicItem, 1, 5), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.meteorChunk, 1, 0), new ItemStack(GCItems.meteorChunk, 1, 1), 0.1F); + FurnaceRecipes.instance().addSmelting(GCItems.meteoricIronRaw, new ItemStack(GCItems.itemBasicMoon), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.blockMoon, 1, 0), new ItemStack(GCItems.basicItem, 1, 3), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.blockMoon, 1, 1), new ItemStack(GCItems.basicItem, 1, 4), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.blockMoon, 1, 2), new ItemStack(GCItems.cheeseCurd), 1.0F); + // Recycling: smelt tin/copper canisters back into ingots + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.canister, 1, 0), new ItemStack(GCItems.basicItem, 3, 4), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.canister, 1, 1), new ItemStack(GCItems.basicItem, 3, 3), 1.0F); + if (CompatibilityManager.useAluDust()) + { + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.ic2compat, 1, 0), new ItemStack(GCItems.basicItem, 1, 5), 1.0F); + } + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.foodItem, 1, 6), new ItemStack(GCItems.foodItem, 1, 7), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.blockMoon, 1, 6), new ItemStack(GCItems.itemBasicMoon, 1, 2), 1.0F); + + HashMap input = new HashMap<>(); + input.put(1, new ItemStack(GCItems.partNoseCone)); + input.put(2, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(3, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(4, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(5, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(6, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(7, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(8, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(9, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(10, new ItemStack(GCItems.partFins)); + input.put(11, new ItemStack(GCItems.partFins)); + input.put(12, new ItemStack(GCItems.rocketEngine)); + input.put(13, new ItemStack(GCItems.partFins)); + input.put(14, new ItemStack(GCItems.partFins)); + input.put(15, ItemStack.EMPTY); + input.put(16, ItemStack.EMPTY); + input.put(17, ItemStack.EMPTY); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 0), input); + + NonNullList woodChests = OreDictionary.getOres("chestWood"); + HashMap input2; + + for (ItemStack woodChest : woodChests) + { + input2 = new HashMap<>(input); + input2.put(15, woodChest); + input2.put(16, ItemStack.EMPTY); + input2.put(17, ItemStack.EMPTY); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(15, ItemStack.EMPTY); + input2.put(16, woodChest); + input2.put(17, ItemStack.EMPTY); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(15, ItemStack.EMPTY); + input2.put(16, ItemStack.EMPTY); + input2.put(17, woodChest); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(15, woodChest); + input2.put(16, woodChest); + input2.put(17, ItemStack.EMPTY); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(15, woodChest); + input2.put(16, ItemStack.EMPTY); + input2.put(17, woodChest); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(15, ItemStack.EMPTY); + input2.put(16, woodChest); + input2.put(17, woodChest); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(15, woodChest); + input2.put(16, woodChest); + input2.put(17, woodChest); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 3), input2); + } + + // + + input = new HashMap<>(); + input.put(1, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(2, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(3, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(4, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(5, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(6, new ItemStack(GCItems.partBuggy, 1, 1)); + input.put(7, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(8, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(9, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(10, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(11, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(12, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(13, new ItemStack(GCItems.partBuggy)); + input.put(14, new ItemStack(GCItems.partBuggy)); + input.put(15, new ItemStack(GCItems.partBuggy)); + input.put(16, new ItemStack(GCItems.partBuggy)); + input.put(17, ItemStack.EMPTY); + input.put(18, ItemStack.EMPTY); + input.put(19, ItemStack.EMPTY); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 0), input); + + input2 = new HashMap<>(input); + input2.put(17, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(18, ItemStack.EMPTY); + input2.put(19, ItemStack.EMPTY); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(17, ItemStack.EMPTY); + input2.put(18, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(19, ItemStack.EMPTY); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(17, ItemStack.EMPTY); + input2.put(18, ItemStack.EMPTY); + input2.put(19, new ItemStack(GCItems.partBuggy, 1, 2)); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(17, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(18, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(19, ItemStack.EMPTY); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(17, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(18, ItemStack.EMPTY); + input2.put(19, new ItemStack(GCItems.partBuggy, 1, 2)); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(17, ItemStack.EMPTY); + input2.put(18, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(19, new ItemStack(GCItems.partBuggy, 1, 2)); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(17, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(18, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(19, new ItemStack(GCItems.partBuggy, 1, 2)); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 3), input2); + + aluminumIngots.addAll(OreDictionary.getOres("ingotAluminum")); + ArrayList addedList = new ArrayList<>(); + for (ItemStack ingotNew : OreDictionary.getOres("ingotAluminium")) + { + boolean flag = false; + for (ItemStack ingotDone : aluminumIngots) + { + if (ItemStack.areItemStacksEqual(ingotNew, ingotDone)) + { + flag = true; + break; + } + } + if (!flag) + { + addedList.add(ingotNew); + OreDictionary.registerOre("ingotAluminum", ingotNew); + } + } + if (addedList.size() > 0) + { + aluminumIngots.addAll(addedList); + addedList.clear(); + } + for (ItemStack ingotNew : OreDictionary.getOres("ingotNaturalAluminum")) + { + for (ItemStack ingotDone : aluminumIngots) + { + if (!ItemStack.areItemStacksEqual(ingotNew, ingotDone)) + { + addedList.add(ingotNew); + } + } + } + if (addedList.size() > 0) + { + aluminumIngots.addAll(addedList); + } + + final HashMap spaceStationRequirements = new HashMap<>(4, 1.0F); + spaceStationRequirements.put("ingotTin", 32); + spaceStationRequirements.put(aluminumIngots, 16); + spaceStationRequirements.put(new ItemStack(GCItems.basicItem, 1, ItemBasic.WAFER_ADVANCED), 1); + spaceStationRequirements.put(Items.IRON_INGOT, 24); + GalacticraftRegistry.registerSpaceStation(new SpaceStationType(ConfigManagerCore.idDimensionOverworldOrbit, ConfigManagerCore.idDimensionOverworld, new SpaceStationRecipe(spaceStationRequirements))); + + // EmergencyKit + RecipeUtil.addCustomRecipe(new ShapedRecipeNBT(new ItemStack(GCItems.emergencyKit), ItemEmergencyKit.getRecipe())); + + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 6), "ingotCopper", "ingotCopper"); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 7), "ingotTin", "ingotTin"); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 8), "ingotAluminum", "ingotAluminum"); + + /* + * // Support for all the spellings of Aluminum for (ItemStack stack : + * aluminumIngots) { CompressorRecipes.addShapelessRecipe(new + * ItemStack(GCItems.basicItem, 1, 8), stack, stack); } + */ + if (OreDictionary.getOres("ingotBronze").size() > 0) + { + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 10), "ingotBronze", "ingotBronze"); + } + if (OreDictionary.getOres("ingotSteel").size() > 0) + { + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 9), "ingotSteel", "ingotSteel"); + CompressorRecipes.steelIngotsPresent = true; + } + CompressorRecipes.steelRecipeGC = Arrays.asList(new ItemStack(Items.COAL), new ItemStack(GCItems.basicItem, 1, 11), new ItemStack(Items.COAL)); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 9), Items.COAL, new ItemStack(GCItems.basicItem, 1, 11), Items.COAL); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 10), new ItemStack(GCItems.basicItem, 1, 6), new ItemStack(GCItems.basicItem, 1, 7)); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 11), Items.IRON_INGOT, Items.IRON_INGOT); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.itemBasicMoon, 1, 1), meteoricIronIngot); + CompressorRecipes.addRecipe(new ItemStack(GCItems.heavyPlatingTier1, 2, 0), "XYZ", "XYZ", 'X', new ItemStack(GCItems.basicItem, 1, 9), 'Y', new ItemStack(GCItems.basicItem, 1, 8), 'Z', new ItemStack(GCItems.basicItem, 1, 10)); + + ItemStack solarPanels = new ItemStack(GCItems.basicItem, 9, 12); + ItemStack basicWafers = new ItemStack(GCItems.basicItem, 3, 13); + ItemStack advancedWafers = new ItemStack(GCItems.basicItem, 1, 14); + ItemStack silicon = new ItemStack(GCItems.basicItem, 1, 2); + CircuitFabricatorRecipes.addRecipe(solarPanels, Arrays.asList(new ItemStack(Items.DIAMOND), silicon, silicon, new ItemStack(Items.REDSTONE), new ItemStack(Items.DYE, 1, 4))); + CircuitFabricatorRecipes.addRecipe(basicWafers, Arrays.asList(new ItemStack(Items.DIAMOND), silicon, silicon, new ItemStack(Items.REDSTONE), new ItemStack(Blocks.REDSTONE_TORCH))); + CircuitFabricatorRecipes.addRecipe(advancedWafers, Arrays.asList(new ItemStack(Items.DIAMOND), silicon, silicon, new ItemStack(Items.REDSTONE), new ItemStack(Items.REPEATER))); + } + + public static void setConfigurableRecipes() + { + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT && CompatibilityManager.modJEILoaded) + TickHandlerClient.updateJEIhiding = true; + + // Update Aluminium Wire and Battery crafting recipes and GC Advanced + // Metals recipes + ItemStack aluWire = new ItemStack(GCBlocks.aluminumWire, ConfigManagerCore.quickMode ? 9 : 6, 0); + ItemStack battery = new ItemStack(GCItems.battery, ConfigManagerCore.quickMode ? 3 : 2, 100); + boolean doQuickMode = ConfigManagerCore.quickMode != configSaved_QuickMode; + configSaved_QuickMode = ConfigManagerCore.quickMode; + + ItemStack meteoricIronIngot = new ItemStack(GCItems.itemBasicMoon, 1, 0); + ItemStack meteoricIronPlate = new ItemStack(GCItems.itemBasicMoon, 1, 1); + boolean doMetalsToOreDict = configSaved_RequireGCmetals && !ConfigManagerCore.recipesRequireGCAdvancedMetals; + boolean doMetalsToGC = !configSaved_RequireGCmetals && ConfigManagerCore.recipesRequireGCAdvancedMetals; + configSaved_RequireGCmetals = ConfigManagerCore.recipesRequireGCAdvancedMetals; + + boolean doSilicon = !ConfigManagerCore.otherModsSilicon.equals(configSaved_Silicon); + configSaved_Silicon = ConfigManagerCore.otherModsSilicon; + + if (doQuickMode || doMetalsToOreDict || doMetalsToGC) + { + for (IRecipe recipe : ForgeRegistries.RECIPES) + { + if (recipe instanceof IRecipeUpdatable) + { + if (doQuickMode) + { + ItemStack test = recipe.getRecipeOutput(); + if (ItemStack.areItemsEqual(test, aluWire)) + { + test.setCount(aluWire.getCount()); + } + else if (ItemStack.areItemsEqual(test, battery)) + { + test.setCount(battery.getCount()); + } + } + if (doMetalsToOreDict) + { + ((IRecipeUpdatable) recipe).replaceInput(meteoricIronIngot, OreDictionary.getOres("ingotMeteoricIron")); + ((IRecipeUpdatable) recipe).replaceInput(meteoricIronPlate, OreDictionary.getOres("compressedMeteoricIron")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(MarsItems.marsItemBasic, 1, 2), OreDictionary.getOres("ingotDesh")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(MarsItems.marsItemBasic, 1, 5), OreDictionary.getOres("compressedDesh")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(AsteroidsItems.basicItem, 1, 0), OreDictionary.getOres("ingotTitanium")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(AsteroidsItems.basicItem, 1, 6), OreDictionary.getOres("compressedTitanium")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(VenusItems.basicItem, 1, 1), OreDictionary.getOres("ingotLead")); + } + else if (doMetalsToGC) + { + ((IRecipeUpdatable) recipe).replaceInput(meteoricIronIngot); + ((IRecipeUpdatable) recipe).replaceInput(meteoricIronPlate); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(MarsItems.marsItemBasic, 1, 2)); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(MarsItems.marsItemBasic, 1, 5)); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(AsteroidsItems.basicItem, 1, 0)); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(AsteroidsItems.basicItem, 1, 6)); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(VenusItems.basicItem, 1, 1)); + } + } + } + } + + if (doSilicon) + { + ItemStack siliconGC = new ItemStack(GCItems.basicItem, 1, 2); + boolean needNewList = true; + List silicons = OreDictionary.getOres(ConfigManagerCore.otherModsSilicon); + if (silicons.size() > 0) + { + for (ItemStack s : silicons) + { + if (ItemStack.areItemsEqual(s, siliconGC)) + { + needNewList = false; + break; + } + } + } + if (needNewList) + { + List newList = new ArrayList<>(1 + silicons.size()); + newList.add(siliconGC); + if (silicons.size() > 0) + newList.addAll(silicons); + silicons = newList; + } + CircuitFabricatorRecipes.replaceRecipeIngredient(siliconGC, silicons); + } + + if (doMetalsToOreDict || doMetalsToGC) + { + if (ConfigManagerCore.recipesRequireGCAdvancedMetals) + { + CompressorRecipes.replaceRecipeIngredient(meteoricIronIngot); + } + else + { + CompressorRecipes.replaceRecipeIngredient(meteoricIronIngot, OreDictionary.getOres("ingotMeteoricIron")); + } + setConfigurableRecipesPlanets(); + + // Update Advanced Wafer in space station recipe + ItemStack sswafer = new ItemStack(GCItems.basicItem, 1, ItemBasic.WAFER_ADVANCED); + for (SpaceStationType station : GalacticraftRegistry.getSpaceStationData()) + { + HashMap ssrecipe = station.getRecipeForSpaceStation().getInput(); + if (doMetalsToOreDict) + { + ItemStack found = null; + for (Object test : ssrecipe.keySet()) + { + if (test instanceof ItemStack && ItemStack.areItemsEqual((ItemStack) test, sswafer)) + { + found = (ItemStack) test; + break; + } + } + if (found != null) + { + ssrecipe.remove(found); + ssrecipe.put(OreDictionary.getOres("waferAdvanced"), 1); + } + } + else if (doMetalsToGC) + { + Object found = null; + for (Object test : ssrecipe.keySet()) + { + if (test instanceof List && OreRecipeUpdatable.itemListContains((List) test, sswafer)) + { + found = test; + break; + } + } + if (found != null) + { + ssrecipe.remove(found); + ssrecipe.put(sswafer, 1); + } + } + } + } + } + + private static void setConfigurableRecipesPlanets() + { + if (ConfigManagerCore.recipesRequireGCAdvancedMetals) + { + CompressorRecipes.replaceRecipeIngredient(new ItemStack(MarsItems.marsItemBasic, 1, 2)); + CompressorRecipes.replaceRecipeIngredient(new ItemStack(AsteroidsItems.basicItem, 1, 0)); + } + else + { + CompressorRecipes.replaceRecipeIngredient(new ItemStack(MarsItems.marsItemBasic, 1, 2), OreDictionary.getOres("ingotDesh")); + CompressorRecipes.replaceRecipeIngredient(new ItemStack(AsteroidsItems.basicItem, 1, 0), OreDictionary.getOres("ingotTitanium")); + } + } + + private static void addBuildCraftCraftingRecipes() + { + boolean refineryDone = false; + try + { + // BuildcraftRecipeRegistry.refinery.addRecipe("buildcraft:fuel", new FluidStack(GCFluids.fluidOil, 1), new FluidStack(FluidRegistry.getFluid("fuel"), 1), 120, 1); + // refineryDone = true; + } catch (Exception e) + {} + + if (refineryDone) + { + GalacticraftCore.logger.info("Successfully added GC oil to Buildcraft Refinery recipes."); + } + + try + { + if (CompatibilityManager.classBCTransport != null) + { + // TODO: Add the two Power pipes once they are included in + // Buildcraft 8.0.x + for (int i = BlockEnclosed.EnumEnclosedBlockType.BC_ITEM_STONEPIPE.getMeta(); i <= BlockEnclosed.EnumEnclosedBlockType.BC_FLUIDS_COBBLESTONEPIPE.getMeta(); i++) + { + String pipeName = EnumEnclosedBlockType.values()[i].getBCPipeType(); + Object pipeItemBC = CompatibilityManager.classBCTransport.getField(pipeName).get(null); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, i), new Object[] {"XYX", 'Y', pipeItemBC, 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + private static void addAppEngRecipes() + { + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, EnumEnclosedBlockType.ME_CABLE.getMeta()), new Object[] {"XYX", 'Y', AEApi.instance().definitions().parts().cableGlass().stack(AEColor.TRANSPARENT, 1), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + IGrinderRegistry a = AEApi.instance().registries().grinder(); + boolean officialAE2API = false; + try + { + officialAE2API = a.getClass().getMethod("builder") != null; + } catch (Exception ignore) + {} + if (officialAE2API) + { + a.addRecipe(a.builder().withInput(new ItemStack(GCBlocks.basicBlock, 1, 7)).withOutput(new ItemStack(GCItems.ic2compat, 1, 0)).withFirstOptional(new ItemStack(GCItems.ic2compat, 1, 0), 0.8F).withTurns(8).build()); + a.addRecipe(a.builder().withInput(new ItemStack(AsteroidBlocks.blockBasic, 1, 3)).withOutput(new ItemStack(GCItems.ic2compat, 1, 0)).withFirstOptional(new ItemStack(GCItems.ic2compat, 1, 0), 0.9F).withTurns(8).build()); + a.addRecipe(a.builder().withInput(new ItemStack(VenusBlocks.venusBlock, 1, 6)).withOutput(new ItemStack(GCItems.ic2compat, 1, 0)).withFirstOptional(new ItemStack(GCItems.ic2compat, 1, 0), 1.0F).withTurns(8).build()); + // Grind Ilmenite Ore for 1 Titanium Dust, 1 Iron Dust + Optional ironDust = AEApi.instance().definitions().materials().ironDust().maybeStack(1); + ironDust.ifPresent(dustStack -> a.addRecipe(a.builder().withInput(new ItemStack(AsteroidBlocks.blockBasic, 1, 4)).withOutput(new ItemStack(AsteroidsItems.basicItem, 1, 9)).withFirstOptional(dustStack, 1.0F).withTurns(8).build())); + } + else + { + GalacticraftCore.logger.debug("Failed to add Applied Energistics 2 Recipes"); + } + } + + private static void addExNihiloHeatSource() + { + try + { + Class registry = Class.forName("exnihilo.registries.HeatRegistry"); + Method m = registry.getMethod("register", Block.class, float.class); + m.invoke(null, GCBlocks.unlitTorchLit, 0.1F); + for (Block torch : GCBlocks.otherModTorchesLit) + { + m.invoke(null, torch, 0.1F); + } + GalacticraftCore.logger.info("Successfully added space torches as heat sources for Ex Nihilo crucibles etc"); + } catch (Throwable e) + {} + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ShapedRecipeNBT.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ShapedRecipeNBT.java new file mode 100644 index 00000000..a47554f6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ShapedRecipeNBT.java @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.HashMap; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.registries.IForgeRegistryEntry; + +public class ShapedRecipeNBT extends IForgeRegistryEntry.Impl implements IRecipe +{ + + public int recipeWidth; + public int recipeHeight; + public final ItemStack[] recipeItems; + private final ItemStack recipeOutput; + private boolean copyIngredientNBT; + + public ShapedRecipeNBT(ItemStack output, Object[] layout) + { + this.recipeOutput = output; + String shape = ""; + int idx = 0; + + int width = 0; + int height = 0; + while (layout[idx] instanceof String) + { + String s = (String) layout[idx++]; + shape += s; + width = s.length(); + height++; + } + if (width * height != shape.length()) + { + String ret = "Invalid shaped recipe: "; + for (Object tmp : layout) + { + ret += tmp + ", "; + } + throw new RuntimeException(ret); + } + + HashMap itemMap = new HashMap<>(); + + for (; idx < layout.length; idx += 2) + { + Character chr = (Character) layout[idx]; + Object in = layout[idx + 1]; + + if (in instanceof ItemStack) + { + itemMap.put(chr, ((ItemStack) in).copy()); + } else if (in instanceof Item) + { + itemMap.put(chr, new ItemStack((Item) in)); + } else if (in instanceof Block) + { + itemMap.put(chr, new ItemStack((Block) in, 1, OreDictionary.WILDCARD_VALUE)); + } else + { + String ret = "Invalid shaped recipe: "; + for (Object tmp : layout) + { + ret += tmp + ", "; + } + throw new RuntimeException(ret); + } + } + + this.recipeWidth = width; + this.recipeHeight = height; + this.recipeItems = new ItemStack[width * height]; + int x = 0; + for (char chr : shape.toCharArray()) + { + this.recipeItems[x++] = itemMap.get(chr); + } + } + + @Override + @Nullable + public ItemStack getRecipeOutput() + { + return this.recipeOutput; + } + + @Override + public NonNullList getRemainingItems(InventoryCrafting inv) + { + return ForgeHooks.defaultRecipeGetRemainingItems(inv); + } + + @Override + public boolean matches(InventoryCrafting inv, World worldIn) + { + for (int i = 0; i <= 3 - this.recipeWidth; ++i) + { + for (int j = 0; j <= 3 - this.recipeHeight; ++j) + { + if (this.checkMatch(inv, i, j, false)) + { + return true; + } + + if (this.checkMatch(inv, i, j, true)) + { + return true; + } + } + } + + return false; + } + + private boolean checkMatch(InventoryCrafting inv, int x, int z, boolean mirror) + { + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int k = i - x; + int l = j - z; + ItemStack target = null; + + if (k >= 0 && l >= 0 && k < this.recipeWidth && l < this.recipeHeight) + { + if (mirror) + { + target = this.recipeItems[this.recipeWidth - k - 1 + l * this.recipeWidth]; + } else + { + target = this.recipeItems[k + l * this.recipeWidth]; + } + } + + ItemStack itemstack1 = inv.getStackInRowAndColumn(i, j); + + if (!itemstack1.isEmpty() || target != null) + { + if (itemstack1.isEmpty() || target == null) + { + return false; + } + + if (target.getItem() != itemstack1.getItem()) + { + return false; + } + + if (target.getMetadata() != 32767 && target.getMetadata() != itemstack1.getMetadata()) + { + return false; + } + + if (!ItemStack.areItemStackTagsEqual(target, itemstack1)) + { + return false; + } + } + } + } + + return true; + } + + @Override + @Nullable + public ItemStack getCraftingResult(InventoryCrafting inv) + { + return this.getRecipeOutput().copy(); + } + + @Override + public boolean canFit(int width, int height) + { + return width >= this.recipeWidth && height >= this.recipeHeight; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicAdd.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicAdd.java new file mode 100644 index 00000000..a8ad1529 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicAdd.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.schematic; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicPage; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiSchematicInput; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematic; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class SchematicAdd extends SchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerCore.idSchematicAddSchematic; + } + + @Override + public int getGuiID() + { + return GuiIdsCore.NASA_WORKBENCH_NEW_SCHEMATIC; + } + + @Override + public ItemStack getRequiredItem() + { + return null; // This null is OK, it's used only as a flag by + // SchematicRegistry calling code + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicInput(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematic(player.inventory, pos); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicMoonBuggy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicMoonBuggy.java new file mode 100644 index 00000000..7744c05a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicMoonBuggy.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.schematic; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicPage; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiSchematicBuggy; +import micdoodle8.mods.galacticraft.core.inventory.ContainerBuggyBench; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class SchematicMoonBuggy extends SchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerCore.idSchematicMoonBuggy; + } + + @Override + public int getGuiID() + { + return GuiIdsCore.NASA_WORKBENCH_BUGGY; + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(GCItems.schematic, 1, 0); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicBuggy(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerBuggyBench(player.inventory, pos, player); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicRocketT1.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicRocketT1.java new file mode 100644 index 00000000..f9d3e8ae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicRocketT1.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.schematic; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicPage; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiSchematicTier1Rocket; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematicTier1Rocket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class SchematicRocketT1 extends SchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerCore.idSchematicRocketT1; + } + + @Override + public int getGuiID() + { + return GuiIdsCore.NASA_WORKBENCH_ROCKET; + } + + @Override + public ItemStack getRequiredItem() + { + return null; // This null is OK, it's used only as a flag by the calling + // code in SchematicRegistry + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicTier1Rocket(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicTier1Rocket(player.inventory, pos); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/KeyHandlerClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/KeyHandlerClient.java new file mode 100644 index 00000000..bcc0428e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/KeyHandlerClient.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tick; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.entity.Entity; + +import net.minecraftforge.fml.common.gameevent.TickEvent.Type; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.KeyHandler; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.entities.IControllableEntity; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +import org.lwjgl.input.Keyboard; + +public class KeyHandlerClient extends KeyHandler +{ + + public static KeyBinding galaxyMap; + public static KeyBinding openFuelGui; + public static KeyBinding toggleAdvGoggles; + + static + { + galaxyMap = new KeyBinding(GCCoreUtil.translate("keybind.map.name"), ConfigManagerCore.keyOverrideMapI == 0 ? Keyboard.KEY_M : ConfigManagerCore.keyOverrideMapI, Constants.MOD_NAME_SIMPLE); + openFuelGui = new KeyBinding(GCCoreUtil.translate("keybind.spaceshipinv.name"), ConfigManagerCore.keyOverrideFuelLevelI == 0 ? Keyboard.KEY_F : ConfigManagerCore.keyOverrideFuelLevelI, + Constants.MOD_NAME_SIMPLE); + toggleAdvGoggles = new KeyBinding(GCCoreUtil.translate("keybind.sensortoggle.name"), + ConfigManagerCore.keyOverrideToggleAdvGogglesI == 0 ? Keyboard.KEY_K : ConfigManagerCore.keyOverrideToggleAdvGogglesI, Constants.MOD_NAME_SIMPLE); + // See ConfigManagerCore.class for actual defaults. These do nothing + } + + public static KeyBinding accelerateKey; + public static KeyBinding decelerateKey; + public static KeyBinding leftKey; + public static KeyBinding rightKey; + public static KeyBinding upKey; + public static KeyBinding downKey; + public static KeyBinding spaceKey; + public static KeyBinding leftShiftKey; + private static Minecraft mc = Minecraft.getMinecraft(); + + public KeyHandlerClient() + { + super(new KeyBinding[] + {KeyHandlerClient.galaxyMap, KeyHandlerClient.openFuelGui, KeyHandlerClient.toggleAdvGoggles}, new boolean[] + {false, false, false}, KeyHandlerClient.getVanillaKeyBindings(), new boolean[] + {false, true, true, true, true, true, true}); + } + + private static KeyBinding[] getVanillaKeyBindings() + { + KeyBinding invKey = KeyHandlerClient.mc.gameSettings.keyBindInventory; + KeyHandlerClient.accelerateKey = KeyHandlerClient.mc.gameSettings.keyBindForward; + KeyHandlerClient.decelerateKey = KeyHandlerClient.mc.gameSettings.keyBindBack; + KeyHandlerClient.leftKey = KeyHandlerClient.mc.gameSettings.keyBindLeft; + KeyHandlerClient.rightKey = KeyHandlerClient.mc.gameSettings.keyBindRight; + KeyHandlerClient.upKey = KeyHandlerClient.mc.gameSettings.keyBindForward; + KeyHandlerClient.downKey = KeyHandlerClient.mc.gameSettings.keyBindBack; + KeyHandlerClient.spaceKey = KeyHandlerClient.mc.gameSettings.keyBindJump; + KeyHandlerClient.leftShiftKey = KeyHandlerClient.mc.gameSettings.keyBindSneak; + return new KeyBinding[] + {invKey, KeyHandlerClient.accelerateKey, KeyHandlerClient.decelerateKey, KeyHandlerClient.leftKey, KeyHandlerClient.rightKey, KeyHandlerClient.spaceKey, KeyHandlerClient.leftShiftKey}; + } + + @Override + public void keyDown(Type types, KeyBinding kb, boolean tickEnd, boolean isRepeat) + { + if (KeyHandlerClient.mc.player != null && tickEnd) + { + EntityPlayerSP playerBase = PlayerUtil.getPlayerBaseClientFromPlayer(KeyHandlerClient.mc.player, false); + + if (playerBase == null) + { + return; + } + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(playerBase); + + if (kb.getKeyCode() == KeyHandlerClient.galaxyMap.getKeyCode()) + { + if (KeyHandlerClient.mc.currentScreen == null) + { + KeyHandlerClient.mc.player.openGui(GalacticraftCore.instance, GuiIdsCore.GALAXY_MAP, KeyHandlerClient.mc.world, (int) KeyHandlerClient.mc.player.posX, + (int) KeyHandlerClient.mc.player.posY, (int) KeyHandlerClient.mc.player.posZ); + } + } else if (kb.getKeyCode() == KeyHandlerClient.openFuelGui.getKeyCode()) + { + if (playerBase.getRidingEntity() instanceof EntitySpaceshipBase || playerBase.getRidingEntity() instanceof EntityBuggy) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_OPEN_FUEL_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {PlayerUtil.getName(playerBase)})); + } + } else if (kb.getKeyCode() == KeyHandlerClient.toggleAdvGoggles.getKeyCode()) + { + if (playerBase != null) + { + stats.setUsingAdvancedGoggles(!stats.isUsingAdvancedGoggles()); + } + } + } + + if (KeyHandlerClient.mc.player != null && KeyHandlerClient.mc.currentScreen == null) + { + int keyNum = -1; + + if (kb == KeyHandlerClient.accelerateKey) + { + keyNum = 0; + } else if (kb == KeyHandlerClient.decelerateKey) + { + keyNum = 1; + } else if (kb == KeyHandlerClient.leftKey) + { + keyNum = 2; + } else if (kb == KeyHandlerClient.rightKey) + { + keyNum = 3; + } else if (kb == KeyHandlerClient.spaceKey) + { + keyNum = 4; + } else if (kb == KeyHandlerClient.leftShiftKey) + { + keyNum = 5; + } + + Entity entityTest = KeyHandlerClient.mc.player.getRidingEntity(); + if (entityTest != null && entityTest instanceof IControllableEntity && keyNum != -1) + { + IControllableEntity entity = (IControllableEntity) entityTest; + + if (kb.getKeyCode() == KeyHandlerClient.mc.gameSettings.keyBindInventory.getKeyCode()) + { + KeyBinding.setKeyBindState(KeyHandlerClient.mc.gameSettings.keyBindInventory.getKeyCode(), false); + } + + entity.pressKey(keyNum); + } else if (entityTest != null && entityTest instanceof EntityAutoRocket) + { + EntityAutoRocket autoRocket = (EntityAutoRocket) entityTest; + + if (autoRocket.launchPhase == EnumLaunchPhase.LANDING.ordinal()) + { + if (kb == KeyHandlerClient.leftShiftKey) + { + autoRocket.motionY -= 0.02D; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_SHIP_MOTION_Y, GCCoreUtil.getDimensionID(mc.world), new Object[] + {autoRocket.getEntityId(), false})); + } + + if (kb == KeyHandlerClient.spaceKey) + { + autoRocket.motionY += 0.02D; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_SHIP_MOTION_Y, GCCoreUtil.getDimensionID(mc.world), new Object[] + {autoRocket.getEntityId(), true})); + } + } + } + } + } + + @Override + public void keyUp(Type types, KeyBinding kb, boolean tickEnd) + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerClient.java new file mode 100644 index 00000000..72cb25d6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerClient.java @@ -0,0 +1,739 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tick; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiIngameMenu; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldProviderSurface; + +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.common.gameevent.TickEvent.RenderTickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.entity.IEntityNoisy; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.item.ISensorGlassesArmor; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.vector.BlockTuple; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.BubbleRenderer; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.client.FootprintRenderer; +import micdoodle8.mods.galacticraft.core.client.SkyProviderMoon; +import micdoodle8.mods.galacticraft.core.client.SkyProviderOverworld; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayDockingRocket; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayLander; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayLaunchCountdown; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayOxygenTanks; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayOxygenWarning; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayRocket; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiNewSpaceRace; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiTeleporting; +import micdoodle8.mods.galacticraft.core.client.jei.GalacticraftJEI; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProviderColored; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.network.GalacticraftPacketHandler; +import micdoodle8.mods.galacticraft.core.network.PacketRotateRocket; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import micdoodle8.mods.galacticraft.core.util.BlockUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.BlockMetaList; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public class TickHandlerClient +{ + + public static int airRemaining; + public static int airRemaining2; + private static boolean lastInvKeyPressed; + private static long tickCount; + public static boolean spaceRaceGuiScheduled = false; + private static List packetHandlers = Lists.newCopyOnWriteArrayList(); + private static Set fluidNetworks = Sets.newHashSet(); + public static GuiTeleporting teleportingGui; + public static volatile boolean menuReset = true; + public static volatile boolean updateJEIhiding = false; + + public static void resetClient() + { + ClientProxyCore.playerItemData.clear(); + ClientProxyCore.overworldTextureRequestSent = false; + ClientProxyCore.flagRequestsSent.clear(); + TickHandlerClient.clearLiquidNetworks(); + ClientProxyCore.clientSpaceStationID.clear(); + ConfigManagerCore.challengeModeUpdate(); + + MapUtil.resetClient(); + GCBlocks.spaceGlassVanilla.resetColor(); + GCBlocks.spaceGlassClear.resetColor(); + GCBlocks.spaceGlassStrong.resetColor(); + GCBlocks.spaceGlassTinVanilla.resetColor(); + GCBlocks.spaceGlassTinClear.resetColor(); + GCBlocks.spaceGlassTinStrong.resetColor(); + } + + public static void addFluidNetwork(FluidNetwork network) + { + fluidNetworks.add(network); + } + + public static void removeFluidNetwork(FluidNetwork network) + { + fluidNetworks.remove(network); + } + + public static void clearLiquidNetworks() + { + fluidNetworks.clear(); + } + + public static void addPacketHandler(GalacticraftPacketHandler handler) + { + TickHandlerClient.packetHandlers.add(handler); + } + + @SubscribeEvent + public void worldUnloadEvent(WorldEvent.Unload event) + { + for (GalacticraftPacketHandler packetHandler : packetHandlers) + { + packetHandler.unload(event.getWorld()); + } + } + + public static HashSet screenConnectionsUpdateList = new HashSet<>(); + + static + { + registerDetectableBlocks(true); + } + + public static void registerDetectableBlocks(boolean logging) + { + ClientProxyCore.detectableBlocks.clear(); + + for (final String s : ConfigManagerCore.detectableIDs) + { + //BlockTuple bt = ConfigManagerCore.stringToBlock(s, "External Detectable IDs", logging); + BlockTuple bt = BlockUtil.getBlockTupleFromString(s); + if (bt == null) + { + continue; + } + + int meta = bt.meta; + if (meta == -1) + { + meta = 0; + } + + boolean flag = false; + for (BlockMetaList blockMetaList : ClientProxyCore.detectableBlocks) + { + if (blockMetaList.getBlock() == bt.block) + { + if (!blockMetaList.getMetaList().contains(meta)) + { + blockMetaList.getMetaList().add(meta); + } + flag = true; + break; + } + } + + if (!flag) + { + List metaList = Lists.newArrayList(); + metaList.add(meta); + ClientProxyCore.detectableBlocks.add(new BlockMetaList(bt.block, metaList)); + } + } + } + + @SubscribeEvent + public void onRenderTick(RenderTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final EntityPlayerSP player = minecraft.player; + final EntityPlayerSP playerBaseClient = PlayerUtil.getPlayerBaseClientFromPlayer(player, false); + if (player == null || playerBaseClient == null) + { + return; + } + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(playerBaseClient); + + if (event.phase == Phase.END) + { + if (minecraft.currentScreen instanceof GuiIngameMenu) + { + int i = Mouse.getEventX() * minecraft.currentScreen.width / minecraft.displayWidth; + int j = minecraft.currentScreen.height - Mouse.getEventY() * minecraft.currentScreen.height / minecraft.displayHeight - 1; + + int k = Mouse.getEventButton(); + + int deltaColor = 0; + + if (i > minecraft.currentScreen.width - 100 && j > minecraft.currentScreen.height - 35) + { + deltaColor = 20; + + if (k == 0) + { + if (Mouse.getEventButtonState()) + { + minecraft.displayGuiScreen(new GuiNewSpaceRace(playerBaseClient)); + } + } + } + + this.drawGradientRect(minecraft.currentScreen.width - 100, minecraft.currentScreen.height - 35, minecraft.currentScreen.width, minecraft.currentScreen.height, + ColorUtil.to32BitColor(150, 10 + deltaColor, 10 + deltaColor, 10 + deltaColor), ColorUtil.to32BitColor(250, 10 + deltaColor, 10 + deltaColor, 10 + deltaColor)); + minecraft.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.title.name.0"), + minecraft.currentScreen.width - 50 - minecraft.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.title.name.0")) / 2, minecraft.currentScreen.height - 26, + ColorUtil.to32BitColor(255, 240, 240, 240)); + minecraft.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.title.name.1"), + minecraft.currentScreen.width - 50 - minecraft.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.title.name.1")) / 2, minecraft.currentScreen.height - 16, + ColorUtil.to32BitColor(255, 240, 240, 240)); + Gui.drawRect(minecraft.currentScreen.width - 100, minecraft.currentScreen.height - 35, minecraft.currentScreen.width - 99, minecraft.currentScreen.height, + ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(minecraft.currentScreen.width - 100, minecraft.currentScreen.height - 35, minecraft.currentScreen.width, minecraft.currentScreen.height - 34, + ColorUtil.to32BitColor(255, 0, 0, 0)); + } + + ClientProxyCore.playerPosX = player.prevPosX + (player.posX - player.prevPosX) * event.renderTickTime; + ClientProxyCore.playerPosY = player.prevPosY + (player.posY - player.prevPosY) * event.renderTickTime; + ClientProxyCore.playerPosZ = player.prevPosZ + (player.posZ - player.prevPosZ) * event.renderTickTime; + ClientProxyCore.playerRotationYaw = player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * event.renderTickTime; + ClientProxyCore.playerRotationPitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * event.renderTickTime; + + if (minecraft.currentScreen == null && minecraft.gameSettings.thirdPersonView != 0 && !minecraft.gameSettings.hideGUI) + { + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + OverlayRocket.renderSpaceshipOverlay(minecraft, ((EntitySpaceshipBase) player.getRidingEntity()).getSpaceshipGui()); + } + + if (player.getRidingEntity() instanceof EntityLander) + { + OverlayLander.renderLanderOverlay(minecraft, TickHandlerClient.tickCount); + } + + if (player.getRidingEntity() instanceof EntityAutoRocket) + { + OverlayDockingRocket.renderDockingOverlay(minecraft, TickHandlerClient.tickCount); + } + + if (player.getRidingEntity() instanceof EntitySpaceshipBase && !((EntitySpaceshipBase) minecraft.player.getRidingEntity()).getLaunched()) + { + OverlayLaunchCountdown.renderCountdownOverlay(minecraft); + } + } + + if (player.world.provider instanceof IGalacticraftWorldProvider && OxygenUtil.shouldDisplayTankGui(minecraft.currentScreen) && OxygenUtil.noAtmosphericCombustion(player.world.provider) + && (!playerBaseClient.isCreative() && !playerBaseClient.isSpectator()) && !minecraft.gameSettings.showDebugInfo) + { + int var6 = (TickHandlerClient.airRemaining - 90) * -1; + + if (TickHandlerClient.airRemaining <= 0) + { + var6 = 90; + } + + int var7 = (TickHandlerClient.airRemaining2 - 90) * -1; + + if (TickHandlerClient.airRemaining2 <= 0) + { + var7 = 90; + } + + int thermalLevel = stats.getThermalLevel() + 22; + OverlayOxygenTanks.renderOxygenTankIndicator(minecraft, thermalLevel, var6, var7, !ConfigManagerCore.oxygenIndicatorLeft, !ConfigManagerCore.oxygenIndicatorBottom, + Math.abs(thermalLevel - 22) >= 10 && !stats.isThermalLevelNormalising()); + } + + if (playerBaseClient != null && player.world.provider instanceof IGalacticraftWorldProvider && !stats.isOxygenSetupValid() && OxygenUtil.noAtmosphericCombustion(player.world.provider) + && minecraft.currentScreen == null && !minecraft.gameSettings.hideGUI && (!playerBaseClient.isCreative() && !playerBaseClient.isSpectator())) + { + OverlayOxygenWarning.renderOxygenWarningOverlay(minecraft, TickHandlerClient.tickCount); + } + } + } + + @SubscribeEvent + public void onPreGuiRender(RenderGameOverlayEvent.Pre event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final EntityPlayerSP player = minecraft.player; + + if (event.getType() == RenderGameOverlayEvent.ElementType.ALL) + { + if (player != null && player.getRidingEntity() != null && player.getRidingEntity() instanceof IIgnoreShift && ((IIgnoreShift) player.getRidingEntity()).shouldIgnoreShiftExit()) + { + // Remove "Press shift to dismount" message when shift-exiting + // is disabled (not ideal, but the only option) + String str = I18n.format("mount.onboard", new Object[] + {GameSettings.getKeyDisplayString(minecraft.gameSettings.keyBindSneak.getKeyCode())}); + if (minecraft.ingameGUI.overlayMessage.equals(str)) + { + minecraft.ingameGUI.overlayMessage = ""; + } + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTick(ClientTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final WorldClient world = minecraft.world; + final EntityPlayerSP player = minecraft.player; + + if (teleportingGui != null) + { + if (minecraft.currentScreen != teleportingGui) + { + minecraft.currentScreen = teleportingGui; + } + } + + if (menuReset) + { + TickHandlerClient.resetClient(); + menuReset = false; + } + + if (event.phase == Phase.START && player != null) + { + if (ClientProxyCore.playerHead == null && player.getGameProfile() != null) + { + Map map = minecraft.getSkinManager().loadSkinFromCache(player.getGameProfile()); + + if (map.containsKey(Type.SKIN)) + { + ClientProxyCore.playerHead = minecraft.getSkinManager().loadSkin(map.get(Type.SKIN), Type.SKIN); + } else + { + ClientProxyCore.playerHead = DefaultPlayerSkin.getDefaultSkin(EntityPlayer.getUUID(player.getGameProfile())); + } + } + + TickHandlerClient.tickCount++; + + if (!GalacticraftCore.proxy.isPaused()) + { + Iterator it = TickHandlerClient.fluidNetworks.iterator(); + while (it.hasNext()) + { + FluidNetwork network = it.next(); + + if (network.getTransmitters().size() == 0) + { + it.remove(); + } else + { + network.clientTick(); + } + } + } + + if (TickHandlerClient.tickCount % 20 == 0) + { + BubbleRenderer.clearBubbles(); + + for (TileEntity tile : player.world.tickableTileEntities) + { + if (tile instanceof IBubbleProviderColored) + { + BubbleRenderer.addBubble((IBubbleProviderColored) tile); + } + } + + if (updateJEIhiding) + { + updateJEIhiding = false; + // Update JEI to hide the ingot compressor recipe for GC + // steel in hard mode + // Update JEI to hide adventure mode recipes when not in + // adventure mode + GalacticraftJEI.updateHidden(CompressorRecipes.steelIngotsPresent && ConfigManagerCore.hardMode && !ConfigManagerCore.challengeRecipes, !ConfigManagerCore.challengeRecipes); + } + + for (List fpList : FootprintRenderer.footprints.values()) + { + Iterator fpIt = fpList.iterator(); + while (fpIt.hasNext()) + { + Footprint fp = fpIt.next(); + fp.age += 20; + fp.lightmapVal = player.world.getCombinedLight(new BlockPos(fp.position.x, fp.position.y, fp.position.z), 0); + + if (fp.age >= Footprint.MAX_AGE) + { + fpIt.remove(); + } + } + } + + if (!player.inventory.armorItemInSlot(3).isEmpty() && player.inventory.armorItemInSlot(3).getItem() instanceof ISensorGlassesArmor) + { + ClientProxyCore.valueableBlocks.clear(); + + for (int i = -4; i < 5; i++) + { + int x = MathHelper.floor(player.posX + i); + for (int j = -4; j < 5; j++) + { + int y = MathHelper.floor(player.posY + j); + for (int k = -4; k < 5; k++) + { + int z = MathHelper.floor(player.posZ + k); + BlockPos pos = new BlockPos(x, y, z); + + IBlockState state = player.world.getBlockState(pos); + final Block block = state.getBlock(); + + if (block.getMaterial(state) != Material.AIR) + { + int metadata = block.getMetaFromState(state); + boolean isDetectable = false; + + for (BlockMetaList blockMetaList : ClientProxyCore.detectableBlocks) + { + if (blockMetaList.getBlock() == block && blockMetaList.getMetaList().contains(metadata)) + { + isDetectable = true; + break; + } + } + + if (isDetectable || (block instanceof IDetectableResource && ((IDetectableResource) block).isValueable(state))) + { + ClientProxyCore.valueableBlocks.add(new BlockVec3(x, y, z)); + } + } + } + } + } + + TileEntityOxygenSealer nearestSealer = TileEntityOxygenSealer.getNearestSealer(world, MathHelper.floor(player.posX), MathHelper.floor(player.posY), MathHelper.floor(player.posZ)); + if (nearestSealer != null && !nearestSealer.sealed) + { + ClientProxyCore.leakTrace = nearestSealer.getLeakTraceClient(); + } else + { + ClientProxyCore.leakTrace = null; + } + } else + { + ClientProxyCore.leakTrace = null; + } + + if (world != null) + { + if (MapUtil.resetClientFlag.getAndSet(false)) + { + MapUtil.resetClientBody(); + } + } + } + + if (ClientProxyCore.leakTrace != null) + this.spawnLeakParticles(); + + if (world != null && TickHandlerClient.spaceRaceGuiScheduled && minecraft.currentScreen == null && ConfigManagerCore.enableSpaceRaceManagerPopup) + { + player.openGui(GalacticraftCore.instance, GuiIdsCore.SPACE_RACE_START, player.world, (int) player.posX, (int) player.posY, (int) player.posZ); + TickHandlerClient.spaceRaceGuiScheduled = false; + } + + boolean inSpaceShip = false; + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + inSpaceShip = true; + EntitySpaceshipBase rocket = (EntitySpaceshipBase) player.getRidingEntity(); + if (rocket.prevRotationPitch != rocket.rotationPitch || rocket.prevRotationYaw != rocket.rotationYaw) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketRotateRocket(player.getRidingEntity())); + } + } + + if (world != null) + { + if (world.provider instanceof WorldProviderSurface) + { + if (world.provider.getSkyRenderer() == null && inSpaceShip && player.getRidingEntity().posY > Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + world.provider.setSkyRenderer(new SkyProviderOverworld()); + } else if (world.provider.getSkyRenderer() instanceof SkyProviderOverworld && player.posY <= Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + world.provider.setSkyRenderer(null); + } + } else if (world.provider instanceof WorldProviderSpaceStation) + { + if (world.provider.getSkyRenderer() == null) + { + ((WorldProviderSpaceStation) world.provider).createSkyProvider(); + } + } else if (world.provider instanceof WorldProviderMoon) + { + if (world.provider.getSkyRenderer() == null) + { + world.provider.setSkyRenderer(new SkyProviderMoon()); + } + + if (world.provider.getCloudRenderer() == null) + { + world.provider.setCloudRenderer(new CloudRenderer()); + } + } + } + + if (inSpaceShip) + { + final EntitySpaceshipBase ship = (EntitySpaceshipBase) player.getRidingEntity(); + boolean hasChanged = false; + + if (minecraft.gameSettings.keyBindLeft.isKeyDown()) + { + ship.turnYaw(-1.0F); + hasChanged = true; + } + + if (minecraft.gameSettings.keyBindRight.isKeyDown()) + { + ship.turnYaw(1.0F); + hasChanged = true; + } + + if (minecraft.gameSettings.keyBindForward.isKeyDown()) + { + if (ship.getLaunched()) + { + ship.turnPitch(-0.7F); + hasChanged = true; + } + } + + if (minecraft.gameSettings.keyBindBack.isKeyDown()) + { + if (ship.getLaunched()) + { + ship.turnPitch(0.7F); + hasChanged = true; + } + } + + if (hasChanged) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketRotateRocket(ship)); + } + } + + if (world != null) + { + List entityList = world.loadedEntityList; + for (Object e : entityList) + { + if (e instanceof IEntityNoisy) + { + IEntityNoisy vehicle = (IEntityNoisy) e; + if (vehicle.getSoundUpdater() == null) + { + ISound noise = vehicle.setSoundUpdater(FMLClientHandler.instance().getClient().player); + if (noise != null) + { + FMLClientHandler.instance().getClient().getSoundHandler().playSound(noise); + } + } + } + } + } + + if (FMLClientHandler.instance().getClient().currentScreen instanceof GuiCelestialSelection) + { + player.motionY = 0; + } + + if (world != null && world.provider instanceof IGalacticraftWorldProvider && OxygenUtil.noAtmosphericCombustion(world.provider) + && ((IGalacticraftWorldProvider) world.provider).shouldDisablePrecipitation()) + { + world.setRainStrength(0.0F); + } + + boolean isPressed = KeyHandlerClient.spaceKey.isKeyDown(); + + if (!isPressed) + { + ClientProxyCore.lastSpacebarDown = false; + } + + if (player.getRidingEntity() != null && isPressed && !ClientProxyCore.lastSpacebarDown) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_IGNITE_ROCKET, GCCoreUtil.getDimensionID(player.world), new Object[] + {})); + ClientProxyCore.lastSpacebarDown = true; + } + + if (!(TickHandlerClient.screenConnectionsUpdateList.isEmpty())) + { + HashSet updateListCopy = (HashSet) screenConnectionsUpdateList.clone(); + screenConnectionsUpdateList.clear(); + for (TileEntityScreen te : updateListCopy) + { + if (te.getWorld().getBlockState(te.getPos()).getBlock() == GCBlocks.screen) + { + if (te.refreshOnUpdate) + { + te.refreshConnections(true); + } + te.getWorld().markBlockRangeForRenderUpdate(te.getPos(), te.getPos()); + } + } + } + } else if (event.phase == Phase.END) + { + if (world != null) + { + for (GalacticraftPacketHandler handler : packetHandlers) + { + handler.tick(world); + } + } + } + } + + private void spawnLeakParticles() + { + Random rand = new Random(); + for (int i = ClientProxyCore.leakTrace.size() - 1; i >= 0; i--) + { + if (i == 1) + continue; + BlockVec3 curr = ClientProxyCore.leakTrace.get(i); + int nx = i - 2; + if (i > 2 && rand.nextInt(3) == 0) + nx--; + BlockVec3 vec; + if (i > 1) + vec = ClientProxyCore.leakTrace.get(nx).clone(); + else + { + vec = curr.clone().translate(0, -2, 0); + } + Vector3 mot = new Vector3(vec.subtract(curr)); + Vector3 rnd = new Vector3(rand.nextDouble() / 2 - 0.25, rand.nextDouble() / 2 - 0.25, rand.nextDouble() / 2 - 0.25); + GalacticraftCore.proxy.spawnParticle("oxygen", curr.midPoint().add(rnd), mot, new Object[] + {new Vector3(0.7D, 0.7D, 1.0D)}); + } + } + + private boolean alreadyContainsBlock(int x1, int y1, int z1) + { + return ClientProxyCore.valueableBlocks.contains(new BlockVec3(x1, y1, z1)); + } + + public static void zoom(float value) + { +// FMLClientHandler.instance().getClient().entityRenderer.thirdPersonDistance = value; +// FMLClientHandler.instance().getClient().entityRenderer.thirdPersonDistancePrev = value; + } + + private void drawGradientRect(int par1, int par2, int par3, int par4, int par5, int par6) + { + float f = (par5 >> 24 & 255) / 255.0F; + float f1 = (par5 >> 16 & 255) / 255.0F; + float f2 = (par5 >> 8 & 255) / 255.0F; + float f3 = (par5 & 255) / 255.0F; + float f4 = (par6 >> 24 & 255) / 255.0F; + float f5 = (par6 >> 16 & 255) / 255.0F; + float f6 = (par6 >> 8 & 255) / 255.0F; + float f7 = (par6 & 255) / 255.0F; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(par3, par2, 0.0D).color(f1, f2, f3, f).endVertex(); + worldRenderer.pos(par1, par2, 0.0D).color(f1, f2, f3, f).endVertex(); + worldRenderer.pos(par1, par4, 0.0D).color(f5, f6, f7, f4).endVertex(); + worldRenderer.pos(par3, par4, 0.0D).color(f5, f6, f7, f4).endVertex(); + tessellator.draw(); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerServer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerServer.java new file mode 100644 index 00000000..447de937 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerServer.java @@ -0,0 +1,689 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tick; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.ChunkProviderServer; + +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.common.gameevent.TickEvent.ServerTickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.WorldTickEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import micdoodle8.mods.galacticraft.core.command.CommandGCHouston; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.dimension.WorldDataSpaceRaces; +import micdoodle8.mods.galacticraft.core.energy.grid.EnergyNetwork; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.ThreadFindSeal; +import micdoodle8.mods.galacticraft.core.network.GalacticraftPacketHandler; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTransmitter; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledBlockChange; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledDimensionChange; + +import com.google.common.collect.Lists; + +public class TickHandlerServer +{ + + private static Map> scheduledBlockChanges = new ConcurrentHashMap>(); + private static Map> scheduledTorchUpdates = new ConcurrentHashMap>(); + private static Map> edgeChecks = new TreeMap>(); + private static LinkedList networkTicks = new LinkedList(); + public static Map>> serverFootprintMap = new TreeMap>>(); + public static List footprintBlockChanges = Lists.newArrayList(); + public static WorldDataSpaceRaces spaceRaceData = null; + public static ArrayList playersRequestingMapData = Lists.newArrayList(); + private static long tickCount; + public static LinkedList oxygenTransmitterUpdates = new LinkedList(); + public static LinkedList energyTransmitterUpdates = new LinkedList(); + private static CopyOnWriteArrayList scheduledDimensionChanges = new CopyOnWriteArrayList(); + private final int MAX_BLOCKS_PER_TICK = 50000; + private static List packetHandlers = Lists.newCopyOnWriteArrayList(); + private static List fluidNetworks = Lists.newArrayList(); + public static int timerHoustonCommand; + + public static void addFluidNetwork(FluidNetwork network) + { + fluidNetworks.add(network); + } + + public static void removeFluidNetwork(FluidNetwork network) + { + fluidNetworks.remove(network); + } + + public static void addPacketHandler(GalacticraftPacketHandler handler) + { + TickHandlerServer.packetHandlers.add(handler); + } + + @SubscribeEvent + public void worldUnloadEvent(WorldEvent.Unload event) + { + for (GalacticraftPacketHandler packetHandler : packetHandlers) + { + packetHandler.unload(event.getWorld()); + } + } + + public static void restart() + { + TickHandlerServer.scheduledBlockChanges.clear(); + TickHandlerServer.scheduledTorchUpdates.clear(); + TickHandlerServer.edgeChecks.clear(); + TickHandlerServer.networkTicks.clear(); + TickHandlerServer.serverFootprintMap.clear(); + TickHandlerServer.oxygenTransmitterUpdates.clear(); +// TickHandlerServer.hydrogenTransmitterUpdates.clear(); + TickHandlerServer.energyTransmitterUpdates.clear(); + TickHandlerServer.playersRequestingMapData.clear(); + TickHandlerServer.networkTicks.clear(); + + for (SpaceRace race : SpaceRaceManager.getSpaceRaces()) + { + SpaceRaceManager.removeSpaceRace(race); + } + + TickHandlerServer.spaceRaceData = null; + TickHandlerServer.tickCount = 0L; + TickHandlerServer.fluidNetworks.clear(); + MapUtil.reset(); + TileEntityPainter.loadedTilesForDim.clear(); + } + + public static void addFootprint(long chunkKey, Footprint print, int dimID) + { + Map> footprintMap = TickHandlerServer.serverFootprintMap.get(dimID); + List footprints; + + if (footprintMap == null) + { + footprintMap = new HashMap>(); + TickHandlerServer.serverFootprintMap.put(dimID, footprintMap); + footprints = new ArrayList(); + footprintMap.put(chunkKey, footprints); + } else + { + footprints = footprintMap.get(chunkKey); + + if (footprints == null) + { + footprints = new ArrayList(); + footprintMap.put(chunkKey, footprints); + } + } + + footprints.add(print); + } + + public static void scheduleNewBlockChange(int dimID, ScheduledBlockChange change) + { + CopyOnWriteArrayList changeList = TickHandlerServer.scheduledBlockChanges.get(dimID); + + if (changeList == null) + { + changeList = new CopyOnWriteArrayList(); + } + + changeList.add(change); + TickHandlerServer.scheduledBlockChanges.put(dimID, changeList); + } + + /** + * Only use this for AIR blocks (any type of BlockAir) + * + * @param dimID + * @param changeAdd List of + */ + public static void scheduleNewBlockChange(int dimID, List changeAdd) + { + CopyOnWriteArrayList changeList = TickHandlerServer.scheduledBlockChanges.get(dimID); + + if (changeList == null) + { + changeList = new CopyOnWriteArrayList(); + } + + changeList.addAll(changeAdd); + TickHandlerServer.scheduledBlockChanges.put(dimID, changeList); + } + + public static void scheduleNewDimensionChange(ScheduledDimensionChange change) + { + scheduledDimensionChanges.add(change); + } + + public static void scheduleNewTorchUpdate(int dimID, List torches) + { + CopyOnWriteArrayList updateList = TickHandlerServer.scheduledTorchUpdates.get(dimID); + + if (updateList == null) + { + updateList = new CopyOnWriteArrayList(); + } + + updateList.addAll(torches); + TickHandlerServer.scheduledTorchUpdates.put(dimID, updateList); + } + + public static void scheduleNewEdgeCheck(int dimID, BlockPos edgeBlock) + { + Set updateList = TickHandlerServer.edgeChecks.get(dimID); + + if (updateList == null) + { + updateList = new HashSet(); + } + + updateList.add(edgeBlock); + TickHandlerServer.edgeChecks.put(dimID, updateList); + } + + public static boolean scheduledForChange(int dimID, BlockPos test) + { + CopyOnWriteArrayList changeList = TickHandlerServer.scheduledBlockChanges.get(dimID); + + if (changeList != null) + { + for (ScheduledBlockChange change : changeList) + { + if (test.equals(change.getChangePosition())) + { + return true; + } + } + } + return false; + } + + public static void scheduleNetworkTick(EnergyNetwork grid) + { + TickHandlerServer.networkTicks.add(grid); + } + + public static void removeNetworkTick(EnergyNetwork grid) + { + TickHandlerServer.networkTicks.remove(grid); + } + + @SubscribeEvent + public void onServerTick(ServerTickEvent event) + { + MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); + // Prevent issues when clients switch to LAN servers + if (server == null) + { + return; + } + + if (event.phase == Phase.START) + { + if (timerHoustonCommand > 0) + { + if (--timerHoustonCommand == 0) + { + CommandGCHouston.reset(); + } + } + + for (ScheduledDimensionChange change : TickHandlerServer.scheduledDimensionChanges) + { + try + { + GCPlayerStats stats = GCPlayerStats.get(change.getPlayer()); + final WorldProvider provider = WorldUtil.getProviderForDimensionServer(change.getDimensionId()); + if (provider != null) + { + final int dim = GCCoreUtil.getDimensionID(provider); + GalacticraftCore.logger.info("Found matching world (" + dim + ") for name: " + change.getDimensionId()); + + if (change.getPlayer().world instanceof WorldServer) + { + final WorldServer world = (WorldServer) change.getPlayer().world; + + WorldUtil.transferEntityToDimension(change.getPlayer(), dim, world); + } + } else + { + GalacticraftCore.logger.error("World not found when attempting to transfer entity to dimension: " + change.getDimensionId()); + } + + stats.setTeleportCooldown(10); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_CLOSE_GUI, GCCoreUtil.getDimensionID(change.getPlayer().world), new Object[] + {}), change.getPlayer()); + } catch (Exception e) + { + GalacticraftCore.logger.error("Error occurred when attempting to transfer entity to dimension: " + change.getDimensionId()); + e.printStackTrace(); + } + } + + TickHandlerServer.scheduledDimensionChanges.clear(); + + if (MapUtil.calculatingMap.get()) + { + MapUtil.BiomeMapNextTick_MultiThreaded(); + } else if (!MapUtil.doneOverworldTexture) + { + MapUtil.makeOverworldTexture(); + } + + if (TickHandlerServer.spaceRaceData == null) + { + World world = server.getWorld(0); + TickHandlerServer.spaceRaceData = (WorldDataSpaceRaces) world.getMapStorage().getOrLoadData(WorldDataSpaceRaces.class, WorldDataSpaceRaces.saveDataID); + + if (TickHandlerServer.spaceRaceData == null) + { + TickHandlerServer.spaceRaceData = new WorldDataSpaceRaces(WorldDataSpaceRaces.saveDataID); + world.getMapStorage().setData(WorldDataSpaceRaces.saveDataID, TickHandlerServer.spaceRaceData); + } + } + + SpaceRaceManager.tick(); + + TileEntityOxygenSealer.onServerTick(); + + if (TickHandlerServer.tickCount % 33 == 0) + { + WorldServer[] worlds = server.worlds; + + for (int i = worlds.length - 1; i >= 0; i--) + { + WorldServer world = worlds[i]; + TileEntityPainter.onServerTick(world); + } + } + if (TickHandlerServer.tickCount % 100 == 0) + { + WorldServer[] worlds = server.worlds; + + for (int i = 0; i < worlds.length; i++) + { + WorldServer world = worlds[i]; + ChunkProviderServer chunkProviderServer = world.getChunkProvider(); + + Map> footprintMap = TickHandlerServer.serverFootprintMap.get(GCCoreUtil.getDimensionID(world)); + + if (footprintMap != null) + { + boolean mapChanged = false; + + if (chunkProviderServer != null) + { + Iterator iterator = chunkProviderServer.getLoadedChunks().iterator(); + + while (iterator.hasNext()) + { + Chunk chunk = (Chunk) iterator.next(); + long chunkKey = ChunkPos.asLong(chunk.x, chunk.z); + + List footprints = footprintMap.get(chunkKey); + + if (footprints != null) + { + List toRemove = new ArrayList(); + + for (int j = 0; j < footprints.size(); j++) + { + footprints.get(j).age += 100; + + if (footprints.get(j).age >= Footprint.MAX_AGE) + { + toRemove.add(footprints.get(j)); + } + } + + if (!toRemove.isEmpty()) + { + footprints.removeAll(toRemove); + } + + footprintMap.put(chunkKey, footprints); + mapChanged = true; + + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(EnumSimplePacket.C_UPDATE_FOOTPRINT_LIST, worlds[i].provider.getDimension(), new Object[] + {chunkKey, footprints.toArray(new Footprint[footprints.size()])}), worlds[i].provider.getDimension()); + } + } + } + + if (mapChanged) + { + TickHandlerServer.serverFootprintMap.put(GCCoreUtil.getDimensionID(world), footprintMap); + } + } + } + } + + if (!footprintBlockChanges.isEmpty()) + { + for (BlockVec3Dim targetPoint : footprintBlockChanges) + { + WorldServer[] worlds = server.worlds; + + for (int i = 0; i < worlds.length; i++) + { + WorldServer world = worlds[i]; + + if (GCCoreUtil.getDimensionID(world) == targetPoint.dim) + { + long chunkKey = ChunkPos.asLong((int) targetPoint.x >> 4, (int) targetPoint.z >> 4); + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_FOOTPRINTS_REMOVED, GCCoreUtil.getDimensionID(world), new Object[] + {chunkKey, new BlockVec3(targetPoint.x, targetPoint.y, targetPoint.z)}), new NetworkRegistry.TargetPoint(targetPoint.dim, targetPoint.x, targetPoint.y, targetPoint.z, 50)); + +// Map> footprintMap = TickHandlerServer.serverFootprintMap.get(world.provider.dimensionId); +// +// if (footprintMap != null && !footprintMap.isEmpty()) +// { +// List footprints = footprintMap.get(chunkKey); +// if (footprints != null) +// GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_UPDATE_FOOTPRINT_LIST, new Object[] { chunkKey, footprints.toArray(new Footprint[footprints.size()]) }), new NetworkRegistry.TargetPoint(targetPoint.dim, targetPoint.x, targetPoint.y, targetPoint.z, 50)); +// } + } + } + } + + footprintBlockChanges.clear(); + } + + if (tickCount % 20 == 0) + { + if (!playersRequestingMapData.isEmpty()) + { + File baseFolder = new File(DimensionManager.getCurrentSaveRootDirectory(), "galacticraft/overworldMap"); + if (!baseFolder.exists() && !baseFolder.mkdirs()) + { + + GalacticraftCore.logger.error("Base folder(s) could not be created: " + baseFolder.getAbsolutePath()); + } else + { + ArrayList copy = new ArrayList(playersRequestingMapData); + BufferedImage reusable = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB); + for (EntityPlayerMP playerMP : copy) + { + GCPlayerStats stats = GCPlayerStats.get(playerMP); + MapUtil.makeVanillaMap(playerMP.dimension, (int) Math.floor(stats.getCoordsTeleportedFromZ()) >> 4, (int) Math.floor(stats.getCoordsTeleportedFromZ()) >> 4, baseFolder, + reusable); + } + playersRequestingMapData.removeAll(copy); + } + } + } + + TickHandlerServer.tickCount++; + + EnergyNetwork.tickCount++; + } else if (event.phase == Phase.END) + { + for (FluidNetwork network : new ArrayList<>(fluidNetworks)) + { + if (!network.pipes.isEmpty()) + { + network.tickEnd(); + } else + { + fluidNetworks.remove(network); + } + } + + int maxPasses = 10; + while (!TickHandlerServer.networkTicks.isEmpty()) + { + LinkedList pass = new LinkedList<>(); + pass.addAll(TickHandlerServer.networkTicks); + TickHandlerServer.networkTicks.clear(); + for (EnergyNetwork grid : pass) + { + grid.tickEnd(); + } + + if (--maxPasses <= 0) + { + break; + } + } + + maxPasses = 10; + while (!TickHandlerServer.oxygenTransmitterUpdates.isEmpty()) + { + LinkedList pass = new LinkedList<>(); + pass.addAll(TickHandlerServer.oxygenTransmitterUpdates); + TickHandlerServer.oxygenTransmitterUpdates.clear(); + for (TileEntityFluidTransmitter newTile : pass) + { + if (!newTile.isInvalid()) + { + newTile.refresh(); + } + } + + if (--maxPasses <= 0) + { + break; + } + } + + maxPasses = 10; + while (!TickHandlerServer.energyTransmitterUpdates.isEmpty()) + { + LinkedList pass = new LinkedList<>(); + pass.addAll(TickHandlerServer.energyTransmitterUpdates); + TickHandlerServer.energyTransmitterUpdates.clear(); + for (TileBaseConductor newTile : pass) + { + // I'm not sure why this would be null, but apparently it + // can be + // See + // https://github.com/micdoodle8/Galacticraft/issues/3700 + if (newTile != null && !newTile.isInvalid()) + { + newTile.refresh(); + } + } + + if (--maxPasses <= 0) + { + break; + } + } + } + } + + private static Set worldsNeedingUpdate = new HashSet(); + + public static void markWorldNeedsUpdate(int dimension) + { + worldsNeedingUpdate.add(dimension); + } + + @SubscribeEvent + public void onWorldTick(WorldTickEvent event) + { + if (event.phase == Phase.START) + { + final WorldServer world = (WorldServer) event.world; + + CopyOnWriteArrayList changeList = TickHandlerServer.scheduledBlockChanges.get(GCCoreUtil.getDimensionID(world)); + + if (changeList != null && !changeList.isEmpty()) + { + int blockCount = 0; + int blockCountMax = Math.max(this.MAX_BLOCKS_PER_TICK, changeList.size() / 4); + List newList = new ArrayList(Math.max(0, changeList.size() - blockCountMax)); + + for (ScheduledBlockChange change : changeList) + { + if (++blockCount > blockCountMax) + { + newList.add(change); + } else + { + if (change != null) + { + BlockPos changePosition = change.getChangePosition(); + Block block = world.getBlockState(changePosition).getBlock(); + // Only replace blocks of type BlockAir or fire - + // this is to prevent accidents where other mods + // have moved blocks + if (changePosition != null && (block instanceof BlockAir || block == Blocks.FIRE)) + { + world.setBlockState(changePosition, change.getChangeState(), change.getChangeUpdateFlag()); + } + } + } + } + + changeList.clear(); + TickHandlerServer.scheduledBlockChanges.remove(GCCoreUtil.getDimensionID(world)); + if (newList.size() > 0) + { + TickHandlerServer.scheduledBlockChanges.put(GCCoreUtil.getDimensionID(world), new CopyOnWriteArrayList(newList)); + } + } + + CopyOnWriteArrayList torchList = TickHandlerServer.scheduledTorchUpdates.get(GCCoreUtil.getDimensionID(world)); + + if (torchList != null && !torchList.isEmpty()) + { + for (BlockVec3 torch : torchList) + { + if (torch != null) + { + BlockPos pos = new BlockPos(torch.x, torch.y, torch.z); + Block b = world.getBlockState(pos).getBlock(); + if (b instanceof BlockUnlitTorch) + { + world.scheduleUpdate(pos, b, 2 + world.rand.nextInt(30)); + } + } + } + + torchList.clear(); + TickHandlerServer.scheduledTorchUpdates.remove(GCCoreUtil.getDimensionID(world)); + } + + if (world.provider instanceof IOrbitDimension) + { + try + { + int dim = ((IOrbitDimension) world.provider).getPlanetIdToOrbit(); + if (dim == Integer.MIN_VALUE) + dim = GCCoreUtil.getDimensionID(WorldUtil.getProviderForNameServer(((IOrbitDimension) world.provider).getPlanetToOrbit())); + int minY = ((IOrbitDimension) world.provider).getYCoordToTeleportToPlanet(); + + final Entity[] entityList = world.loadedEntityList.toArray(new Entity[world.loadedEntityList.size()]); + for (final Entity e : entityList) + { + if (e.posY <= minY && e.world == world) + { + WorldUtil.transferEntityToDimension(e, dim, world, false, null); + } + } + } catch (Exception ex) + { + } + } + + int dimensionID = GCCoreUtil.getDimensionID(world); + if (worldsNeedingUpdate.contains(dimensionID)) + { + worldsNeedingUpdate.remove(dimensionID); + for (Object obj : event.world.loadedTileEntityList) + { + TileEntity tile = (TileEntity) obj; + if (tile instanceof TileEntityFluidTank) + { + ((TileEntityFluidTank) tile).updateClient = true; + } + } + } + } else if (event.phase == Phase.END) + { + final WorldServer world = (WorldServer) event.world; + + for (GalacticraftPacketHandler handler : packetHandlers) + { + handler.tick(world); + } + + int dimID = GCCoreUtil.getDimensionID(world); + Set edgesList = TickHandlerServer.edgeChecks.get(dimID); + final HashSet checkedThisTick = new HashSet<>(); + + if (edgesList != null && !edgesList.isEmpty()) + { + List edgesListCopy = new ArrayList<>(); + edgesListCopy.addAll(edgesList); + for (BlockPos edgeBlock : edgesListCopy) + { + if (edgeBlock != null && !checkedThisTick.contains(edgeBlock)) + { + if (TickHandlerServer.scheduledForChange(dimID, edgeBlock)) + { + continue; + } + + ThreadFindSeal done = new ThreadFindSeal(world, edgeBlock, 0, new ArrayList()); + checkedThisTick.addAll(done.checkedAll()); + } + } + + TickHandlerServer.edgeChecks.remove(GCCoreUtil.getDimensionID(world)); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/AirLockProtocol.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/AirLockProtocol.java new file mode 100644 index 00000000..cc8212bb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/AirLockProtocol.java @@ -0,0 +1,322 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +class AirLockProtocol +{ + + private ArrayList adjacentAirLocks; + private HashSet checked; + private final World world; + private final TileEntity head; + private final int maxLoops; + + private int airLocksDimension1Min = 0; + private int airLocksDimension1Max = 0; + private int airLocksDimension2Min = 0; + private int airLocksDimension2Max = 0; + + public int minX = 6000000; + public int maxX = -6000000; + public int minY = 6000000; + public int maxY = -6000000; + public int minZ = 6000000; + public int maxZ = -6000000; + + public AirLockProtocol(TileEntity head) + { + this.adjacentAirLocks = new ArrayList(); + this.checked = new HashSet(); + this.world = head.getWorld(); + this.head = head; + this.maxLoops = 26; + } + + private void loopThrough(BlockPos pos, int loops) + { + int xAligned = this.head.getPos().getX(); + int zAligned = this.head.getPos().getZ(); + for (int x = -1; x <= 1; x++) + { + int xTest = pos.getX() + x; + for (int z = -1; z <= 1; z++) + { + int zTest = pos.getZ() + z; + + if ((xTest == xAligned || zTest == zAligned)) + { + for (int y = -1; y <= 1; y++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + final BlockPos testPos = new BlockPos(xTest, pos.getY() + y, zTest); + if (!this.checked.contains(testPos)) + { + this.checked.add(testPos); + if (this.world.getTileEntity(testPos) instanceof TileEntityAirLock) + { + this.adjacentAirLocks.add(testPos); + if (loops > 1) + { + this.loopThrough(testPos, loops - 1); + } + } + } + } + } + } + } + } + } + + private void loopThroughHorizontal(BlockPos pos, int loops) + { + int yTest = pos.getY(); + for (int x = -1; x <= 1; x++) + { + int xTest = pos.getX() + x; + for (int z = -1; z <= 1; z++) + { + if (!(x == 0 && z == 0)) + { + final BlockPos testPos = new BlockPos(xTest, yTest, pos.getZ() + z); + if (!this.checked.contains(testPos)) + { + this.checked.add(testPos); + if (this.world.getTileEntity(testPos) instanceof TileEntityAirLock) + { + this.adjacentAirLocks.add(testPos); + if (loops > 1) + { + this.loopThroughHorizontal(testPos, loops - 1); + } + } + } + } + } + } + } + + public int calculate(boolean horizontal) + { + if (this.world.isRemote) + { + return -1; + } + + this.minX = 6000000; + this.maxX = -6000000; + this.minY = 6000000; + this.maxY = -6000000; + this.minZ = 6000000; + this.maxZ = -6000000; + + this.adjacentAirLocks = new ArrayList(); + this.checked.clear(); + final BlockPos headPos = this.head.getPos(); + this.checked.add(headPos); + this.adjacentAirLocks.add(headPos); + + if (horizontal) + { + this.loopThroughHorizontal(headPos, this.maxLoops); + } else + { + this.loopThrough(headPos, this.maxLoops); + } + + for (final BlockPos airLock : this.adjacentAirLocks) + { + if (airLock.getX() < this.minX) + { + this.minX = airLock.getX(); + } + + if (airLock.getX() > this.maxX) + { + this.maxX = airLock.getX(); + } + + if (airLock.getY() < this.minY) + { + this.minY = airLock.getY(); + } + + if (airLock.getY() > this.maxY) + { + this.maxY = airLock.getY(); + } + + if (airLock.getZ() < this.minZ) + { + this.minZ = airLock.getZ(); + } + + if (airLock.getZ() > this.maxZ) + { + this.maxZ = airLock.getZ(); + } + } + + final int count = this.maxX - this.minX + this.maxZ - this.minZ + this.maxY - this.minY; + + if (count > 24 || this.maxX - this.minX <= 1 && this.maxZ - this.minZ <= 1 || !horizontal && this.maxY - this.minY <= 1) + { + return -1; + } + + if (horizontal && (this.maxX - this.minX <= 1 || this.maxZ - this.minZ <= 1)) + { + return -1; + } + + this.airLocksDimension1Min = 0; + this.airLocksDimension1Max = 0; + this.airLocksDimension2Min = 0; + this.airLocksDimension2Max = 0; + + if (horizontal) + { + this.checkDimensionsHorizontal(); + } else + { + this.checkDimensions(); + } + + if (this.airLocksDimension2Max == 0 || this.airLocksDimension2Min == 0 || (this.airLocksDimension1Min == 0 || this.airLocksDimension1Max == 0) + || this.airLocksDimension2Max != this.airLocksDimension2Min || this.airLocksDimension1Max != this.airLocksDimension1Min) + { + return -1; + } + + return this.adjacentAirLocks.size(); + } + + private void checkDimensions() + { + for (int y = this.minY; y <= this.maxY; y++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.minX, y, this.minZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension1Min++; + } + } + + for (int y = this.minY; y <= this.maxY; y++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.maxX, y, this.maxZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension1Max++; + } + } + + if (this.minX != this.maxX) + { + for (int x = this.minX; x <= this.maxX; x++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(x, this.maxY, this.maxZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Max++; + } + } + + for (int x = this.minX; x <= this.maxX; x++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(x, this.minY, this.maxZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Min++; + } + } + } else if (this.minZ != this.maxZ) + { + for (int z = this.minZ; z <= this.maxZ; z++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.maxX, this.maxY, z)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Max++; + } + } + + for (int z = this.minZ; z <= this.maxZ; z++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.maxX, this.minY, z)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Min++; + } + } + } + } + + private void checkDimensionsHorizontal() + { + if (this.minX != this.maxX) + { + for (int x = this.minX; x <= this.maxX; x++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(x, this.minY, this.maxZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension1Max++; + } + } + + for (int x = this.minX; x <= this.maxX; x++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(x, this.minY, this.minZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension1Min++; + } + } + } + + if (this.minZ != this.maxZ) + { + for (int z = this.minZ; z <= this.maxZ; z++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.maxX, this.minY, z)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Max++; + } + } + + for (int z = this.minZ; z <= this.maxZ; z++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.minX, this.minY, z)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Min++; + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/FluidTankGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/FluidTankGC.java new file mode 100644 index 00000000..d2bf05f6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/FluidTankGC.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; + +public class FluidTankGC extends FluidTank +{ + + public FluidTankGC(int capacity, TileEntity tile) + { + super(capacity); + this.tile = tile; + } + + public FluidTankGC(FluidStack stack, int capacity, TileEntity tile) + { + super(stack, capacity); + this.tile = tile; + } + + public BlockPos getTilePosition() + { + return this.tile.getPos(); + } + + public TileEntity getTile() + { + return this.tile; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSides.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSides.java new file mode 100644 index 00000000..9a845008 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSides.java @@ -0,0 +1,594 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties.MachineSidesModel; + +/** + * Used as a common interface for any TileEntity with configurable power, pipe, + * etc sides + * + */ +public interface IMachineSides extends ITileClientUpdates +{ + + /** + * The different sides which a MachineSide (e.g. electric input) can be set + * to. These are relative to the front of the machine (looking at the + * machine from the normal front). + */ + public enum Face + { + + LEFT("l", 2, 1), RIGHT("r", 0, 2), REAR("b", 1, 0), TOP("u", 4, 4), BOTTOM("d", 3, 3), NOT_SET("n", 5, 5), NOT_CONFIGURABLE("fail", 6, 6); + + private final String name; + private final int next; + private final int prior; + public static Face[] Horizontals = new Face[] + {Face.LEFT, Face.REAR, Face.RIGHT}; + public static Face[] AllAvailable = new Face[] + {Face.LEFT, Face.REAR, Face.RIGHT, Face.TOP, Face.BOTTOM}; + + Face(String newname, int theNext, int thePrior) + { + this.name = newname; + this.next = theNext; + this.prior = thePrior; + } + + public String getName() + { + return this.name; + } + + public Face next() + { + return Face.values()[this.next]; + } + + public Face prior() + { + return Face.values()[this.prior]; + } + } + + /* + * All the different possible types of configurable side. Each of these can + * correspond to a texture and a function according to the block type. Many + * may be unused. this.listConfigurableSides() provides a list of which ones + * the tile actually uses. + */ + public enum MachineSide + { + + FRONT("front"), REARDECO("reardeco"), PLAIN("plain"), TOP("top"), BASE("bottom"), ELECTRIC_IN("elec_in"), ELECTRIC_OUT("elec_out"), PIPE_IN("pipe_in"), PIPE_OUT("pipe_out"), CUSTOM("custom"); + + private final String name; + + MachineSide(String newname) + { + this.name = newname; + } + } + + // --------------METHODS-------------- + /** + * The front of this machine, with the graphic. This CANNOT be set: use a + * wrench to change the block's facing to change it (If player wants to + * change the front then rotate the block's facing and all other sides) + */ + public EnumFacing byIndex(); + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getElectricInputDirection() + { + return null; + } + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getElectricOutputDirection() + { + return null; + } + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getPipeInputDirection() + { + return null; + } + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getPipeOutputDirection() + { + return null; + } + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getCustomDirection() + { + return null; + } + + /* + * Returns true if the setting succeeded (Also returns true if it is an + * attempt to set it to the same value as it is currently.) Returns false if + * the MachineSide is not configurable. Use isValidForSide() first to test + * whether the setting is valid for the side here. + */ + public default boolean setSide(MachineSide sideToSet, Face newSide) + { + if (this.getConfigurationType() == IMachineSidesProperties.NOT_CONFIGURABLE) + { + return false; + } + + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.test(sideToSet)) + { + msp.set(newSide); + return true; + } + } + + return false; + } + + /** + * Like setSide() but using index for performance - for internal use + * + * index matches the index in getConfigurableSides() + */ + public default boolean setSide(int index, Face newSide) + { + if (this.getConfigurationType() == IMachineSidesProperties.NOT_CONFIGURABLE) + { + return false; + } + + MachineSidePack[] msps = this.getAllMachineSides(); + if (index >= 0 && index < msps.length) + { + msps[index].set(newSide); + return true; + } + + return false; + } + + /** + * Like getSide(MachineSide) but using index for performance - for internal + * use + * + * index matches the index in getConfigurableSides() + */ + public default Face getSide(int index) + { + MachineSidePack[] msps = this.getAllMachineSides(); + if (index >= 0 && index < msps.length) + return msps[index].get(); + + return Face.NOT_CONFIGURABLE; + } + + public default Face getSide(MachineSide sideToGet) + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.test(sideToGet)) + { + return msp.get(); + } + } + return Face.NOT_CONFIGURABLE; + } + + /* + * Like getSide() but results limited to sides which the blockstate is + * allowed to render index matches the index in getConfigurableSides() + */ + public default Face getAllowedSide(int index) + { + Face test = this.getSide(index); + for (Face face : this.allowableFaces()) + { + if (face == test) + return test; + } + return this.listDefaultFaces()[index]; + } + + /** + * Returns true if the machine side can be set to this face + * + * By default, returns all allowable configurable faces + * + * Overide this for special tile logic for specific sides + */ + public default boolean isValidForSide(MachineSide sideToSet, Face newSide) + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.test(sideToSet)) + { + return Arrays.asList(this.allowableFaces()).contains(newSide); + } + } + + // TODO: could maybe return true for default settings for + // this.getConfigurationType() + // e.g. front == front, top == top, base == bottom + return false; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeLeft() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.LEFT) + { + return msp.getRenderType(); + } + } + + return MachineSide.PLAIN; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeRight() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.RIGHT) + { + return msp.getRenderType(); + } + } + + return MachineSide.PLAIN; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeRear() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.REAR) + { + return msp.getRenderType(); + } + } + return MachineSide.PLAIN; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeTop() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.TOP) + { + return msp.getRenderType(); + } + } + return MachineSide.TOP; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeBase() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.BOTTOM) + { + return msp.getRenderType(); + } + } + + return MachineSide.BASE; + } + + /** + * Essential for block rendering - use in getActualState() Automatically + * returns a valid property as long as getConfigurationType() matches the + * property (see BlockMachineTiered for an example) + * + * Override this if you want more options. + */ + public default IMachineSidesProperties.MachineSidesModel buildBlockStateProperty() + { + int length = listConfigurableSides().length; + switch (length) + { + case 1: + return IMachineSidesProperties.getModelForOneFace(this.getAllowedSide(0)).validFor(getConfigurationType()); + case 2: + default: + return IMachineSidesProperties.getModelForTwoFaces(this.getAllowedSide(0), this.getAllowedSide(1)).validFor(getConfigurationType()); + } + } + + /** + * Call this from a Block's getActualState() method + * + * @param state The blockstate prior to addition of this property + * @param tile The tile entity matching the block position (null will return + * a default value) + * @param renderType The calling block's MACHINESIDES_RENDERTYPE + * @param key The name given to the machine sides property in the calling + * block e.g. SIDES + * + * @return A blockstate with the property added + */ + public static IBlockState addPropertyForTile(IBlockState state, TileEntity tile, IMachineSidesProperties renderType, PropertyEnum key) + { + if (tile instanceof IMachineSides) + { + IMachineSides tileSides = (IMachineSides) tile; + return state.withProperty(key, tileSides.buildBlockStateProperty()); + } else + return state.withProperty(key, renderType.getDefault()); + } + + /** + * For testing purposes - Sneak Wrench to activate this + */ + public default void nextSideConfiguration(TileEntity te) + { + if (this.getConfigurationType() == IMachineSidesProperties.NOT_CONFIGURABLE) + { + return; + } + + int length = listConfigurableSides().length; + + // TODO: adapt result of Face.next() and Face.prior() according to Horiz + // or All models + switch (length) + { + case 1: + this.setSide(0, this.getSide(0).next()); + break; + case 2: + Face leadingSide = this.getSide(0); + if (this.getSide(1) != leadingSide.next()) + { + this.setSide(1, leadingSide.prior()); + this.setSide(0, leadingSide.next()); + } else + { + this.setSide(1, leadingSide.prior()); + } + break; + default: + // Override this for 3 or more configurable sides! + } + + if (te.getWorld().isRemote) + { + te.getWorld().markBlockRangeForRenderUpdate(te.getPos(), te.getPos()); + } else + { + this.updateAllInDimension(); + } + } + + /** + * Array with all the configurable sides for this machine (not including the + * front) + * + * Any sides not included in this list are defaults: PLAIN for left, right + * and rear sides TOP for top BASE for bottom + */ + public MachineSide[] listConfigurableSides(); + + /** + * Array with the default faces to match entries in listConfigurableSides() + */ + public Face[] listDefaultFaces(); + + /** + * All the different allowable faces which the configurable sides can be + * configured to (for example it might be horizontal faces only, for this + * machine) + */ + public default Face[] allowableFaces() + { + return this.getConfigurationType().allowableFaces(); + } + + /** + * The type of configuration (one or two sides to configure, only horizontal + * settings or all allowed) - this needs to match the blockstate model + * implementation, take it from the Block. (Look at TileEnergyStorageModule + * for an example.) + */ + public IMachineSidesProperties getConfigurationType(); + + /** + * Call this in getAllMachineSides() or else in the class constructor + */ + public default void initialiseSides() + { + int length = listConfigurableSides().length; + this.setupMachineSides(length); + for (int i = 0; i < length; i++) + { + this.getAllMachineSides()[i] = new MachineSidePack(listConfigurableSides()[i], listDefaultFaces()[i]); + } + } + + /** + * The array storing all configurable machine sides and their current + * settings in this tile. + * + * IMPORTANT: Run initialiseSides() in the first call to this if it would + * otherwise be null - see examples in GC code + */ + public MachineSidePack[] getAllMachineSides(); + + /** + * Create an array of MachineSidePack[length] which can later be get using + * getAllMachineSides() + */ + public void setupMachineSides(int length); + + public default void addMachineSidesToNBT(NBTTagCompound par1nbtTagCompound) + { + NBTTagList tagList = new NBTTagList(); + for (MachineSidePack msp : this.getAllMachineSides()) + { + NBTTagCompound tag = new NBTTagCompound(); + msp.writeToNBT(tag); + tagList.appendTag(tag); + } + par1nbtTagCompound.setTag("macsides", tagList); + } + + public default void readMachineSidesFromNBT(NBTTagCompound par1nbtTagCompound) + { + NBTTagList tagList = par1nbtTagCompound.getTagList("macsides", 10); + MachineSidePack[] msps = this.getAllMachineSides(); + if (tagList.tagCount() == msps.length) + { + for (int i = 0; i < tagList.tagCount(); ++i) + { + msps[i].readFromNBT(tagList.getCompoundTagAt(i)); + } + } + } + + @Override + public default void buildDataPacket(int[] data) + { + MachineSidePack[] msps = this.getAllMachineSides(); + for (int i = 0; i < msps.length; ++i) + { + data[i] = msps[i].get().ordinal(); + } + } + + @Override + @SideOnly(Side.CLIENT) + public default void updateClient(List data) + { + MachineSidePack[] msps = this.getAllMachineSides(); + for (int i = 0; i < msps.length; ++i) + { + msps[i].set((Integer) data.get(i + 1)); + } + BlockPos pos = ((TileEntity) this).getPos(); + ((TileEntity) this).getWorld().markBlockRangeForRenderUpdate(pos, pos); + } + + /** + * A container object for Machine Sides settings This should be implemented + * in an array by each TileEntity + * + */ + public class MachineSidePack + { + + private MachineSide theSide; + private Face currentFace; + + public MachineSidePack(MachineSide type, Face defaultFace) + { + assert (type != null); + this.theSide = type; + this.set(defaultFace); + } + + public void writeToNBT(NBTTagCompound tag) + { + tag.setInteger("ts", this.theSide.ordinal()); + tag.setInteger("cf", this.currentFace.ordinal()); + } + + public void readFromNBT(NBTTagCompound tag) + { + int ts = -1; + int cf = -1; + if (tag.hasKey("ts")) + { + ts = tag.getInteger("ts"); + } + if (tag.hasKey("cf")) + { + cf = tag.getInteger("cf"); + } + if (ts == theSide.ordinal() && cf >= 0 && cf < Face.values().length) + { + this.currentFace = Face.values()[cf]; + } + } + + public void set(Face face) + { + this.currentFace = (face == null) ? Face.NOT_SET : face; + } + + public void set(int index) + { + if (index >= 0 && index < Face.values().length) + this.currentFace = Face.values()[index]; + } + + public Face get() + { + return this.currentFace; + } + + public MachineSide getRenderType() + { + return this.theSide; + } + + public boolean test(MachineSide type) + { + return this.theSide == type; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSidesProperties.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSidesProperties.java new file mode 100644 index 00000000..f06ca453 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSidesProperties.java @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.util.IStringSerializable; + +import micdoodle8.mods.galacticraft.core.tile.IMachineSides.Face; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; + +/** + * Used to create the blockState property corresponding to the machine sides, + * and to correspondingly constrain the allowable faces. + * + * It's not compulsory to use this, a block could create its blockState model + * from the machine sides in some different way. + */ +public class IMachineSidesProperties +{ + + public static IMachineSidesProperties NOT_CONFIGURABLE = new IMachineSidesProperties(MachineSidesModel.noneConfigurable(), Face.Horizontals); + public static IMachineSidesProperties ONEFACE_HORIZ = new IMachineSidesProperties(MachineSidesModel.oneFacedHoriz(), Face.Horizontals); + public static IMachineSidesProperties ONEFACE = new IMachineSidesProperties(MachineSidesModel.oneFacedAll(), Face.AllAvailable); + public static IMachineSidesProperties TWOFACES_HORIZ = new IMachineSidesProperties(MachineSidesModel.twoFacedHoriz(), Face.Horizontals); + public static IMachineSidesProperties TWOFACES_ALL = new IMachineSidesProperties(MachineSidesModel.twoFacedAll(), Face.AllAvailable); + + public PropertyEnum asProperty; + private Predicate filter; + private Face[] toFaces; + + public IMachineSidesProperties(Predicate theFilter, Face[] faces) + { + this.asProperty = PropertyEnum.create("msm", MachineSidesModel.class, theFilter); + this.filter = theFilter; + this.toFaces = faces; + } + + /** + * Default blockState model to use if the tile can't be read + */ + public MachineSidesModel getDefault() + { + return MachineSidesModel.LEFT1; + } + + /** + * Allowable faces for the configurable sides, consistent with the + * blockState variants + */ + public Face[] allowableFaces() + { + return this.toFaces; + } + + public boolean isValidFor(MachineSidesModel machineSidesModel) + { + return filter.apply(machineSidesModel); + } + + public static MachineSidesModel getModelForTwoFaces(Face faceA, Face faceB) + { + String result = faceA.getName() + faceB.getName(); + for (MachineSidesModel test : MachineSidesModel.values()) + { + if (result.equals(test.name)) + return test; + } + return MachineSidesModel.RIGHT1; + } + + /** + * The return results will all be allowed by the oneFacedAll predicate + */ + public static MachineSidesModel getModelForOneFace(Face allowedSide) + { + switch (allowedSide) + { + case RIGHT: + return MachineSidesModel.RIGHT1; + case REAR: + return MachineSidesModel.REAR1; + case TOP: + return MachineSidesModel.TOP1; + case BOTTOM: + return MachineSidesModel.BOTTOM1; + case LEFT: + default: + return MachineSidesModel.LEFT1; + } + } + + /** + * The strings match the blockState model implementation for rendering + */ + public static enum MachineSidesModel implements IStringSerializable + { + + // Don't change the order, the ordinal is important for the predicate + // definitions + LEFT1("lr"), + LEFT2("lb"), + LEFT3("lu"), + LEFT4("ld"), + RIGHT1("rl"), + RIGHT2("rb"), + RIGHT3("ru"), + RIGHT4("rd"), + REAR1("bl"), + REAR2("br"), + REAR3("bu"), + REAR4("bd"), + TOP1("ul"), + TOP2("ur"), + TOP3("ub"), + TOP4("ud"), + BOTTOM1("dl"), + BOTTOM2("dr"), + BOTTOM3("db"), + BOTTOM4("du"); + + private final String name; + + MachineSidesModel(String newname) + { + this.name = newname; + } + + @Override + public String getName() + { + return this.name; + } + + public MachineSidesModel validFor(IMachineSidesProperties configurationType) + { + if (configurationType.isValidFor(this)) + { + return this; + } + return configurationType.getDefault(); + } + + private static Predicate oneFacedAll() + { + return new Predicate() + { + + @Override + public boolean apply(MachineSidesModel msm) + { + return (msm.ordinal() % 4) == 0; + } + }; + } + + private static Predicate twoFacedAll() + { + return Predicates.alwaysTrue(); + } + + private static Predicate oneFacedHoriz() + { + return new Predicate() + { + + @Override + public boolean apply(MachineSidesModel msm) + { + return msm.ordinal() < 12 && (msm.ordinal() % 4) == 0; + } + }; + } + + private static Predicate twoFacedHoriz() + { + return new Predicate() + { + + @Override + public boolean apply(MachineSidesModel msm) + { + return msm.ordinal() < 12 && (msm.ordinal() % 4) < 2; + } + }; + } + + private static Predicate noneConfigurable() + { + return new Predicate() + { + + @Override + public boolean apply(MachineSidesModel msm) + { + return msm == LEFT1; + } + }; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMultiBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMultiBlock.java new file mode 100644 index 00000000..d7b79bdb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMultiBlock.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; + +public interface IMultiBlock extends ITickable +{ + + /** + * Called when activated + */ + boolean onActivated(EntityPlayer entityPlayer); + + /** + * Called when this multiblock is created + * + * @param placedPosition - The position the block was placed at + */ + void onCreate(World world, BlockPos placedPosition); + + /** + * Called when one of the multiblocks of this block is destroyed + * + * @param callingBlock - The tile entity who called the onDestroy function + */ + void onDestroy(TileEntity callingBlock); + + void getPositions(BlockPos placedPosition, List positions); + + BlockMulti.EnumBlockMultiType getMultiType(); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/ReceiverMode.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/ReceiverMode.java new file mode 100644 index 00000000..4565b508 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/ReceiverMode.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +public enum ReceiverMode +{ + EXTRACT, RECEIVE, UNDEFINED +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAdvanced.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAdvanced.java new file mode 100644 index 00000000..ee4f82c8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAdvanced.java @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public abstract class TileEntityAdvanced extends TileEntityInventory implements IPacketReceiver, ITickable +{ + + public int ticks = 0; + private LinkedHashSet fieldCacheClient; + private LinkedHashSet fieldCacheServer; + private Map lastSentData = new HashMap(4, 1F); + private boolean networkDataChanged = false; + + public TileEntityAdvanced(String tileName) + { + super(tileName); + } + + @Override + public void update() + { + if (this.ticks == 0) + { + this.initiate(); + + if (this.isNetworkedTile()) + { + if (this.fieldCacheClient == null || this.fieldCacheServer == null) + { + this.initFieldCache(); + } + + if (this.world != null && this.world.isRemote && this.fieldCacheClient.size() > 0) + { + // Request any networked information from server on first + // client update (maybe client just logged on, but server + // networkdata didn't change recently) + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + } + + this.ticks++; + + if (this.isNetworkedTile() && this.ticks % this.getPacketCooldown() == 0) + { + if (this.world.isRemote && this.fieldCacheServer.size() > 0) + { + PacketDynamic packet = new PacketDynamic(this); + if (networkDataChanged) + { + GalacticraftCore.packetPipeline.sendToServer(packet); + } + } else if (!this.world.isRemote && this.fieldCacheClient.size() > 0) + { + PacketDynamic packet = new PacketDynamic(this); + if (networkDataChanged) + { + GalacticraftCore.packetPipeline.sendToAllAround(packet, + new TargetPoint(GCCoreUtil.getDimensionID(this.world), getPos().getX(), getPos().getY(), getPos().getZ(), this.getPacketRange())); + } + } + } + } + + private void initFieldCache() + { + try + { + this.fieldCacheClient = new LinkedHashSet(); + this.fieldCacheServer = new LinkedHashSet(); + + for (Field field : this.getClass().getFields()) + { + if (field.isAnnotationPresent(NetworkedField.class)) + { + NetworkedField f = field.getAnnotation(NetworkedField.class); + + if (f.targetSide() == Side.CLIENT) + { + this.fieldCacheClient.add(field); + } else + { + this.fieldCacheServer.add(field); + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + public abstract double getPacketRange(); + + public abstract int getPacketCooldown(); + + public abstract boolean isNetworkedTile(); + + public void addExtraNetworkedData(List networkedList) + { + } + + public void readExtraNetworkedData(ByteBuf dataStream) + { + } + + public void initiate() + { + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + Set fieldList = null; + boolean changed = false; + + if (this.fieldCacheClient == null || this.fieldCacheServer == null) + { + this.initFieldCache(); + } + + if (this.world.isRemote) + { + fieldList = this.fieldCacheServer; + } else + { + fieldList = this.fieldCacheClient; + } + + for (Field f : fieldList) + { + boolean fieldChanged = false; + try + { + Object data = f.get(this); + Object lastData = lastSentData.get(f); + + if (!NetworkUtil.fuzzyEquals(lastData, data)) + { + fieldChanged = true; + } + + sendData.add(data); + + if (fieldChanged) + { + lastSentData.put(f, NetworkUtil.cloneNetworkedObject(data)); + } + } catch (Exception e) + { + e.printStackTrace(); + } + + changed |= fieldChanged; + } + + if (changed) + { + this.addExtraNetworkedData(sendData); + } else + { + ArrayList prevSendData = new ArrayList(sendData); + + this.addExtraNetworkedData(sendData); + + if (!prevSendData.equals(sendData)) + { + changed = true; + } + } + + networkDataChanged = changed; + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world == null) + { + GalacticraftCore.logger.error("World is NULL! Connot decode packet data!"); + return; + } + + if (this.fieldCacheClient == null || this.fieldCacheServer == null) + { + this.initFieldCache(); + } + Set fieldSet = null; + + if (this.world.isRemote) + { + fieldSet = this.fieldCacheClient; + } else + { + fieldSet = this.fieldCacheServer; + } + + for (Field field : fieldSet) + { + try + { + Object obj = NetworkUtil.getFieldValueFromStream(field, buffer, this.world); + field.set(this, obj); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.readExtraNetworkedData(buffer); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLock.java new file mode 100644 index 00000000..abb90b0a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLock.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.util.EnumFacing; + +public class TileEntityAirLock extends TileEntityAdvanced +{ + + public TileEntityAirLock() + { + super("tile.air_lock_seal.name"); + } + + @Override + public void update() + { + super.update(); + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLockController.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLockController.java new file mode 100644 index 00000000..b1529a2c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLockController.java @@ -0,0 +1,447 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class TileEntityAirLockController extends TileEntityAirLock +{ + + @NetworkedField(targetSide = Side.CLIENT) public boolean redstoneActivation; + @NetworkedField(targetSide = Side.CLIENT) public boolean playerDistanceActivation = true; + @NetworkedField(targetSide = Side.CLIENT) public int playerDistanceSelection; + @NetworkedField(targetSide = Side.CLIENT) public boolean playerNameMatches; + @NetworkedField(targetSide = Side.CLIENT) public String playerToOpenFor = ""; + @NetworkedField(targetSide = Side.CLIENT) public boolean invertSelection; + @NetworkedField(targetSide = Side.CLIENT) public boolean horizontalModeEnabled; + public boolean lastHorizontalModeEnabled; + @NetworkedField(targetSide = Side.CLIENT) public String ownerName = ""; + + @NetworkedField(targetSide = Side.CLIENT) public boolean active; + public boolean lastActive; + private int otherAirLocks; + private int lastOtherAirLocks; + private AirLockProtocol protocol; + private AirLockProtocol lastProtocol; + + public TileEntityAirLockController() + { + this.lastProtocol = this.protocol; + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + this.active = false; + + if (this.redstoneActivation) + { + this.active = this.world.getRedstonePowerFromNeighbors(this.getPos()) > 0; + } + + if ((this.active || !this.redstoneActivation) && this.playerDistanceActivation) + { + double distance = 0D; + + switch (this.playerDistanceSelection) + { + case 0: + distance = 1.0D; + break; + case 1: + distance = 2.0D; + break; + case 2: + distance = 5.0D; + break; + case 3: + distance = 10.0D; + break; + } + + Vector3 minPos = new Vector3(this).translate(0.5D - distance); + Vector3 maxPos = new Vector3(this).translate(0.5D + distance); + AxisAlignedBB matchingRegion = new AxisAlignedBB(minPos.x, minPos.y, minPos.z, maxPos.x, maxPos.y, maxPos.z); + List playersWithin = this.world.getEntitiesWithinAABB(EntityPlayer.class, matchingRegion); + + if (this.playerNameMatches) + { + boolean foundPlayer = false; + for (EntityPlayer p : playersWithin) + { + if (PlayerUtil.getName(p).equalsIgnoreCase(this.playerToOpenFor)) + { + foundPlayer = true; + break; + } + } + this.active = foundPlayer; + } else + { + this.active = !playersWithin.isEmpty(); + } + } + + if (!this.invertSelection) + { + this.active = !this.active; + } + + if (this.protocol == null) + { + this.protocol = this.lastProtocol = new AirLockProtocol(this); + } + + if (this.ticks % 5 == 0) + { + if (this.horizontalModeEnabled != this.lastHorizontalModeEnabled) + { + this.unsealAirLock(); + } else if (this.active || this.lastActive) + { + this.lastOtherAirLocks = this.otherAirLocks; + this.otherAirLocks = this.protocol.calculate(this.horizontalModeEnabled); + + if (this.active) + { + if (this.otherAirLocks != this.lastOtherAirLocks || !this.lastActive) + { + this.unsealAirLock(); + if (this.otherAirLocks >= 0) + { + this.sealAirLock(); + } + } + } else + { + if (this.lastActive) + { + this.unsealAirLock(); + } + } + } + + if (this.active != this.lastActive) + { + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + } + + this.lastActive = this.active; + this.lastProtocol = this.protocol; + this.lastHorizontalModeEnabled = this.horizontalModeEnabled; + } + } + } + + private void sealAirLock() + { + int x = (this.lastProtocol.maxX + this.lastProtocol.minX) / 2; + int y = (this.lastProtocol.maxY + this.lastProtocol.minY) / 2; + int z = (this.lastProtocol.maxZ + this.lastProtocol.minZ) / 2; + + if (this.world.getBlockState(new BlockPos(x, y, z)).getBlock() != GCBlocks.airLockSeal) + { + this.world.playSound(null, x, y, z, GCSounds.openAirLock, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + + if (this.horizontalModeEnabled) + { + if (this.protocol.minY == this.protocol.maxY && this.protocol.minX != this.protocol.maxX && this.protocol.minZ != this.protocol.maxZ) + { + for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) + { + for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) + { + BlockPos pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock().isAir(this.world.getBlockState(pos), this.world, pos)) + { + this.world.setBlockState(pos, GCBlocks.airLockSeal.getDefaultState(), 3); + } + } + } + } + } else + { + if (this.protocol.minX != this.protocol.maxX) + { + for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) + { + for (y = this.protocol.minY + 1; y <= this.protocol.maxY - 1; y++) + { + BlockPos pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock().isAir(this.world.getBlockState(pos), this.world, pos)) + { + this.world.setBlockState(pos, GCBlocks.airLockSeal.getDefaultState(), 3); + } + } + } + } else if (this.protocol.minZ != this.protocol.maxZ) + { + for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) + { + for (y = this.protocol.minY + 1; y <= this.protocol.maxY - 1; y++) + { + BlockPos pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock().isAir(this.world.getBlockState(pos), this.world, pos)) + { + this.world.setBlockState(pos, GCBlocks.airLockSeal.getDefaultState(), 3); + } + } + } + } + } + } + + public void unsealAirLock() + { + if (this.lastProtocol == null) + { + return; + } + + int x = this.lastProtocol.minX + (this.lastProtocol.maxX - this.lastProtocol.minX) / 2; + int y = this.lastProtocol.minY + (this.lastProtocol.maxY - this.lastProtocol.minY) / 2; + int z = this.lastProtocol.minZ + (this.lastProtocol.maxZ - this.lastProtocol.minZ) / 2; + + BlockPos pos = new BlockPos(x, y, z); + IBlockState state = this.world.getBlockState(pos); + + if (state.getMaterial() != Material.AIR) + { + this.world.playSound(null, x, y, z, GCSounds.closeAirLock, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + + boolean sealedSide = false; + Block b; + if (this.lastHorizontalModeEnabled) + { + if (this.protocol.minY == this.protocol.maxY && this.protocol.minX != this.protocol.maxX && this.protocol.minZ != this.protocol.maxZ) + { + // First test if there is sealed air to either side + for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) + { + for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) + { + pos = new BlockPos(x, y, z); + b = this.world.getBlockState(pos.up()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + continue; + } + b = this.world.getBlockState(pos.down()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + } + } + if (sealedSide) + break; + } + // Now replace the airlock blocks with either air, or sealed air + for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) + { + for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) + { + pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + if (sealedSide) + this.world.setBlockState(pos, GCBlocks.breatheableAir.getDefaultState(), 3); + else + this.world.setBlockToAir(pos); + } + } + } + } + } else + { + if (this.lastProtocol.minX != this.lastProtocol.maxX) + { + // First test if there is sealed air to either side + for (x = this.lastProtocol.minX + 1; x <= this.lastProtocol.maxX - 1; x++) + { + for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) + { + pos = new BlockPos(x, y, z); + b = this.world.getBlockState(pos.north()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + continue; + } + b = this.world.getBlockState(pos.south()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + } + } + if (sealedSide) + break; + } + // Now replace the airlock blocks with either air, or sealed air + for (x = this.lastProtocol.minX + 1; x <= this.lastProtocol.maxX - 1; x++) + { + for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) + { + pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + if (sealedSide) + this.world.setBlockState(pos, GCBlocks.breatheableAir.getDefaultState(), 3); + else + this.world.setBlockToAir(pos); + } + } + } + } else if (this.lastProtocol.minZ != this.lastProtocol.maxZ) + { + // First test if there is sealed air to either side + for (z = this.lastProtocol.minZ + 1; z <= this.lastProtocol.maxZ - 1; z++) + { + for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) + { + pos = new BlockPos(x, y, z); + b = this.world.getBlockState(pos.west()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + continue; + } + b = this.world.getBlockState(pos.east()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + } + } + if (sealedSide) + break; + } + // Now replace the airlock blocks with either air, or sealed air + for (z = this.lastProtocol.minZ + 1; z <= this.lastProtocol.maxZ - 1; z++) + { + for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) + { + pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + if (sealedSide) + this.world.setBlockState(pos, GCBlocks.breatheableAir.getDefaultState(), 3); + else + this.world.setBlockToAir(pos); + } + } + } + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.ownerName = nbt.getString("OwnerName"); + this.redstoneActivation = nbt.getBoolean("RedstoneActivation"); + this.playerDistanceActivation = nbt.getBoolean("PlayerDistanceActivation"); + this.playerDistanceSelection = nbt.getInteger("PlayerDistanceSelection"); + this.playerNameMatches = nbt.getBoolean("PlayerNameMatches"); + this.playerToOpenFor = nbt.getString("PlayerToOpenFor"); + this.invertSelection = nbt.getBoolean("InvertSelection"); + this.active = nbt.getBoolean("active"); + this.lastActive = nbt.getBoolean("lastActive"); + this.horizontalModeEnabled = nbt.getBoolean("HorizontalModeEnabled"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setString("OwnerName", this.ownerName); + nbt.setBoolean("RedstoneActivation", this.redstoneActivation); + nbt.setBoolean("PlayerDistanceActivation", this.playerDistanceActivation); + nbt.setInteger("PlayerDistanceSelection", this.playerDistanceSelection); + nbt.setBoolean("PlayerNameMatches", this.playerNameMatches); + nbt.setString("PlayerToOpenFor", this.playerToOpenFor); + nbt.setBoolean("InvertSelection", this.invertSelection); + nbt.setBoolean("active", this.active); + nbt.setBoolean("lastActive", this.lastActive); + nbt.setBoolean("HorizontalModeEnabled", this.horizontalModeEnabled); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public double getPacketRange() + { + return 20.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWire.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWire.java new file mode 100644 index 00000000..a1a809f2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWire.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.nbt.NBTTagCompound; + +import net.minecraftforge.fml.common.Optional.Interface; + +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalConductor; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; + +import buildcraft.api.mj.IMjReceiver; + +@Interface(iface = "buildcraft.api.mj.IMjReceiver", modid = CompatibilityManager.modBCraftEnergy) +public class TileEntityAluminumWire extends TileBaseUniversalConductor implements IMjReceiver +{ + + public int tier; + + public TileEntityAluminumWire() + { + this(1); + } + + public TileEntityAluminumWire(int theTier) + { + this.tier = theTier; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.tier = nbt.getInteger("tier"); + // For legacy worlds (e.g. converted from 1.6.4) + if (this.tier == 0) + { + this.tier = 1; + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("tier", this.tier); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public int getTierGC() + { + return this.tier; + } + + @Override + public long getPowerRequested() + { + // TODO Auto-generated method stub + return super.getPowerRequested(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWireSwitch.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWireSwitch.java new file mode 100644 index 00000000..043c7d18 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWireSwitch.java @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.energy.grid.EnergyNetwork; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalConductor; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyEmitter; + +public class TileEntityAluminumWireSwitch extends TileBaseUniversalConductor +{ + + public int tier; + private boolean disableConnections; + + public TileEntityAluminumWireSwitch() + { + this(1); + } + + public TileEntityAluminumWireSwitch(int theTier) + { + this.tier = theTier; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.tier = nbt.getInteger("tier"); + // For legacy worlds (e.g. converted from 1.6.4) + if (this.tier == 0) + { + this.tier = 1; + } + this.disableConnections = this.disableConnections(); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("tier", this.tier); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public int getTierGC() + { + return this.tier; + } + + @Override + public void refresh() + { + boolean newDisableConnections = this.disableConnections(); + if (newDisableConnections && !this.disableConnections) + { + this.disableConnections = newDisableConnections; + if (!this.world.isRemote) + { + this.disConnect(); + } + } else if (!newDisableConnections && this.disableConnections) + { + this.disableConnections = newDisableConnections; + if (!this.world.isRemote) + { + this.setNetwork(null); // Force a full network refresh of this + // and conductors either side + } + } + + if (!this.world.isRemote) + { + this.adjacentConnections = null; + if (!this.disableConnections) + { + this.getNetwork().refresh(); + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing side : EnumFacing.VALUES) + { + if (this.canConnect(side, NetworkType.POWER)) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity instanceof TileBaseConductor && ((TileBaseConductor) tileEntity).canConnect(side.getOpposite(), NetworkType.POWER)) + { + IGridNetwork otherNet = ((INetworkProvider) tileEntity).getNetwork(); + if (!this.getNetwork().equals(otherNet)) + { + if (!otherNet.getTransmitters().isEmpty()) + { + otherNet.merge(this.getNetwork()); + } + } + } + } + } + } + } + } + + private void disConnect() + { + EnergyNetwork net = (EnergyNetwork) this.getNetwork(); + if (net != null) + { + net.split(this); + } + } + + private boolean disableConnections() + { + return RedstoneUtil.isBlockReceivingRedstone(this.world, this.pos); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.POWER && !this.disableConnections(); + } + + @Override + public IElectricityNetwork getNetwork() + { + if (this.network == null) + { + EnergyNetwork network = new EnergyNetwork(); + if (!this.disableConnections) + network.getTransmitters().add(this); + this.setNetwork(network); + } + + return (IElectricityNetwork) this.network; + } + + @Override + public TileEntity[] getAdjacentConnections() + { + if (this.adjacentConnections == null) + { + this.adjacentConnections = new TileEntity[6]; + + if (!this.disableConnections) + { + BlockVec3 thisVec = new BlockVec3(this); + for (int i = 0; i < 6; i++) + { + EnumFacing side = EnumFacing.byIndex(i); + if (this.canConnect(side, NetworkType.POWER)) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(side.getOpposite(), NetworkType.POWER)) + { + this.adjacentConnections[i] = tileEntity; + } + } + } + } + } + } + + return this.adjacentConnections; + } + + // IC2 + @Override + public boolean acceptsEnergyFrom(IEnergyEmitter emitter, EnumFacing side) + { + return this.disableConnections() ? false : super.acceptsEnergyFrom(emitter, side); + } + + // IC2 + @Override + public double injectEnergy(EnumFacing directionFrom, double amount, double voltage) + { + return this.disableConnections ? amount : super.injectEnergy(directionFrom, amount, voltage); + } + + // IC2 + @Override + public boolean emitsEnergyTo(IEnergyAcceptor receiver, EnumFacing side) + { + return this.disableConnections() ? false : super.emitsEnergyTo(receiver, side); + } + + // RF + @Override + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) + { + return this.disableConnections ? 0 : super.receiveEnergy(from, maxReceive, simulate); + } + + // RF + @Override + public boolean canConnectEnergy(EnumFacing from) + { + return this.disableConnections() ? false : super.canConnectEnergy(from); + } + + // Mekanism + @Override + public boolean canReceiveEnergy(EnumFacing side) + { + return this.disableConnections() ? false : super.canReceiveEnergy(side); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityArclamp.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityArclamp.java new file mode 100644 index 00000000..307d297d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityArclamp.java @@ -0,0 +1,1191 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.ai.RandomPositionGenerator; +import net.minecraft.entity.monster.IMob; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +import io.netty.buffer.ByteBuf; + +//ITileClientUpdates for changing in facing; IPacketReceiver for initial transfer of NBT Data (airToRestore) +public class TileEntityArclamp extends TileEntity implements ITickable, ITileClientUpdates, IPacketReceiver +{ + + private static final int LIGHTRANGE = 14; + private int ticks = 0; + private int sideRear = 0; + public int facing = 0; + private HashSet airToRestore = new HashSet<>(); + private intBucket[] buckets; + private static intBucket[] bucketsServer; + private static intBucket[] bucketsClient; + private static AtomicBoolean usingBucketsServer = new AtomicBoolean(); + private static AtomicBoolean usingBucketsClient = new AtomicBoolean(); + private AtomicBoolean usingBuckets; + private static final int SIZELIST = 65536; + private int[] lightUpdateBlockList; + private static int[] lightUpdateBlockListServer = null; + private static int[] lightUpdateBlockListClient = null; + private static AtomicBoolean usingLightListServer = new AtomicBoolean(); + private static AtomicBoolean usingLightListClient = new AtomicBoolean(); + private AtomicBoolean usingLightList; + private boolean isActive = false; + private AxisAlignedBB thisAABB; + private AxisAlignedBB renderAABB; + private Vec3d thisPos; + private int facingSide = 0; + + static + { + bucketsServer = new intBucket[256]; + bucketsClient = new intBucket[256]; + checkedInit(bucketsServer); + checkedInit(bucketsClient); + } + + @Override + public void update() + { + boolean initialLight = false; + + if (RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + if (this.isActive) + { + this.isActive = false; + this.revertAir(); + this.markDirty(); + } + } else if (!this.isActive && this.pos.getX() >= -30000000 + 32 && this.pos.getZ() >= -30000000 + 32 && this.pos.getX() < 30000000 - 32 && this.pos.getZ() < 30000000 - 32) + { + this.isActive = true; + initialLight = true; + } + + if (this.isActive) + { + // Test for first tick after placement + if (this.thisAABB == null) + { + initialLight = true; + int side = this.getBlockMetadata(); + switch (side) + { + case 0: + this.sideRear = side; // Down + this.facingSide = this.facing + 2; + break; + case 1: + this.sideRear = side; // Up + this.facingSide = this.facing + 2; + break; + case 2: + this.sideRear = side; // North + this.facingSide = this.facing; + if (this.facing > 1) + { + this.facingSide = 7 - this.facing; + } + break; + case 3: + this.sideRear = side; // South + this.facingSide = this.facing; + if (this.facing > 1) + { + this.facingSide += 2; + } + break; + case 4: + this.sideRear = side; // West + this.facingSide = this.facing; + break; + case 5: + this.sideRear = side; // East + this.facingSide = this.facing; + if (this.facing > 1) + { + this.facingSide = 5 - this.facing; + } + break; + default: + } + + this.thisAABB = getAABBforSideAndFacing(); + } + + if (initialLight || this.ticks % 100 == 0) + { + this.lightArea(); + } + + if (!this.world.isRemote && this.world.rand.nextInt(20) == 0) + { + List moblist = this.world.getEntitiesInAABBexcluding(null, this.thisAABB, IMob.MOB_SELECTOR); + + if (!moblist.isEmpty()) + { + Vec3d thisVec3 = new Vec3d(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + for (Entity entry : moblist) + { + if (!(entry instanceof EntityCreature)) + { + continue; + } + EntityCreature mob = (EntityCreature) entry; + // Check whether the mob can actually *see* the arclamp + // tile + // if (this.world.func_147447_a(thisPos, new + // Vec3(entry.posX, entry.posY, entry.posZ), true, true, + // false) != null) continue; + + PathNavigate nav = mob.getNavigator(); + if (nav == null) + { + continue; + } + + Vec3d vecNewTarget = RandomPositionGenerator.findRandomTargetBlockAwayFrom(mob, 28, 11, this.thisPos); + if (vecNewTarget == null) + { + continue; + } + + double distanceNew = vecNewTarget.squareDistanceTo(thisVec3); + double distanceCurrent = thisVec3.squareDistanceTo(new Vec3d(mob.posX, mob.posY, mob.posZ)); + if (distanceNew > distanceCurrent) + { + Vec3d vecOldTarget = null; + if (nav.getPath() != null && !nav.getPath().isFinished()) + { + vecOldTarget = nav.getPath().getPosition(mob); + } + if (vecOldTarget == null || distanceCurrent > vecOldTarget.squareDistanceTo(thisVec3)) + { + nav.tryMoveToXYZ(vecNewTarget.x, vecNewTarget.y, vecNewTarget.z, 1.3D); + } + } + } + } + } + } + + this.ticks++; + } + + private AxisAlignedBB getAABBforSideAndFacing() + { + int x = this.pos.getX(); + int y = this.pos.getY(); + int z = this.pos.getZ(); + int rangeForSide[] = new int[6]; + for (int i = 0; i < 6; i++) + { + rangeForSide[i] = (i == this.sideRear) ? 2 : (i == (this.facingSide ^ 1)) ? 4 : 25; + } + return new AxisAlignedBB(x - rangeForSide[4], y - rangeForSide[0], z - rangeForSide[2], x + rangeForSide[5], y + rangeForSide[1], z + rangeForSide[3]); + } + + @Override + public void onLoad() + { + this.thisPos = new Vec3d(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D); + this.ticks = 0; + this.thisAABB = null; + if (this.world.isRemote) + { + this.buckets = bucketsClient; + this.usingBuckets = usingBucketsClient; + if (lightUpdateBlockListClient == null) + { + lightUpdateBlockListClient = new int[SIZELIST]; + } + this.lightUpdateBlockList = lightUpdateBlockListClient; + this.usingLightList = usingLightListClient; + this.clientOnLoad(); + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } else + { + this.buckets = bucketsServer; + this.usingBuckets = usingBucketsServer; + if (lightUpdateBlockListServer == null) + { + lightUpdateBlockListServer = new int[SIZELIST]; + } + this.lightUpdateBlockList = lightUpdateBlockListServer; + this.usingLightList = usingLightListServer; + this.isActive = this.pos.getX() >= -30000000 + 32 && this.pos.getZ() >= -30000000 + 32 && this.pos.getX() < 30000000 - 32 && this.pos.getZ() < 30000000 - 32; + } + } + + @Override + public void invalidate() + { + if (this.lightUpdateBlockList == null) + { + if (this.world.isRemote) + { + this.buckets = bucketsClient; + this.usingBuckets = usingBucketsClient; + if (lightUpdateBlockListClient == null) + { + lightUpdateBlockListClient = new int[SIZELIST]; + } + this.lightUpdateBlockList = lightUpdateBlockListClient; + this.usingLightList = usingLightListClient; + } else + { + this.buckets = bucketsServer; + this.usingBuckets = usingBucketsServer; + if (lightUpdateBlockListServer == null) + { + lightUpdateBlockListServer = new int[SIZELIST]; + } + this.lightUpdateBlockList = lightUpdateBlockListServer; + this.usingLightList = usingLightListServer; + } + } + this.revertAir(); + this.isActive = false; + super.invalidate(); + } + + public void lightArea() + { + if (this.usingBuckets.getAndSet(true) || this.usingLightList.getAndSet(true)) + { + return; + } +// long time1 = System.nanoTime(); + int index = 0; + Block air = Blocks.AIR; + Block breatheableAirID = GCBlocks.breatheableAir; + IBlockState brightAir = GCBlocks.brightAir.getDefaultState(); + IBlockState brightBreatheableAir = GCBlocks.brightBreatheableAir.getDefaultState(); + boolean dirty = false; + checkedClear(); + HashSet airToRevert = new HashSet<>(); + airToRevert.addAll(airToRestore); + LinkedList airNew = new LinkedList<>(); + LinkedList currentLayer = new LinkedList<>(); + LinkedList nextLayer = new LinkedList<>(); + BlockVec3 thisvec = new BlockVec3(this); + currentLayer.add(thisvec); + World world = this.world; + int sideskip1 = this.sideRear; + int sideskip2 = this.facingSide ^ 1; + int side, bits; + for (int i = 0; i < 6; i++) + { + if (i != sideskip1 && i != sideskip2 && i != (sideskip1 ^ 1) && i != (sideskip2 ^ 1)) + { + BlockVec3 onEitherSide = thisvec.newVecSide(i); + IBlockState state = onEitherSide.getBlockStateSafe_noChunkLoad(world); + if (state != null && state.getBlock().getLightOpacity(state) < 15) + { + currentLayer.add(onEitherSide); + } + } + } + BlockVec3 inFront = new BlockVec3(this); + for (int i = 0; i < 4; i++) + { + inFront = inFront.newVecSide(this.facingSide); + IBlockState state = inFront.getBlockStateSafe_noChunkLoad(world); + if (state != null && state.getBlock().getLightOpacity(state) == 15) + { + break; + } + inFront = inFront.newVecSide(sideskip1 ^ 1); + state = inFront.getBlockStateSafe_noChunkLoad(world); + if (state != null && state.getBlock().getLightOpacity(state) < 15) + { + currentLayer.add(inFront); + } else + { + break; + } + } + + inFront = new BlockVec3(this).newVecSide(this.facingSide); + + for (int count = 0; count < LIGHTRANGE; count++) + { + for (BlockVec3 vec : currentLayer) + { + // Shape the arc lamp lighted area to more of a cone in front of + // it + if (count > 1) + { + int offset = 0; + switch (this.facingSide) + { + case 0: + offset = inFront.y - vec.y; + break; + case 1: + offset = vec.y - inFront.y; + break; + case 2: + offset = inFront.z - vec.z; + break; + case 3: + offset = vec.z - inFront.z; + break; + case 4: + offset = inFront.x - vec.x; + break; + case 5: + offset = vec.x - inFront.x; + break; + } + int offset2 = 0; + switch (this.sideRear ^ 1) + { + case 0: + offset2 = inFront.y - vec.y; + break; + case 1: + offset2 = vec.y - inFront.y; + break; + case 2: + offset2 = inFront.z - vec.z; + break; + case 3: + offset2 = vec.z - inFront.z; + break; + case 4: + offset2 = inFront.x - vec.x; + break; + case 5: + offset2 = vec.x - inFront.x; + break; + } + if (offset2 - 2 > offset) + offset = offset2 - 2; + if (Math.abs(vec.x - inFront.x) > offset + 2) + continue; + if (Math.abs(vec.y - inFront.y) > offset + 2) + continue; + if (Math.abs(vec.z - inFront.z) > offset + 2) + continue; + } + + // Now process each layer outwards from the source, finding new + // blocks to light (similar to ThreadFindSeal) + // This is high performance code using our own custom HashSet + // (that's intBucket) + side = 0; + bits = vec.sideDoneBits; + boolean doShine = false; + do + { + // Skip the side which this was entered from + // and never go 'backwards' + if ((bits & (1 << side)) == 0) + { + BlockVec3 sideVec = vec.newVecSide(side); + boolean toAdd = false; + if (!checkedContains(vec, side)) + { + checkedAdd(sideVec); + toAdd = true; + } + + IBlockState bs = sideVec.getBlockStateSafe_noChunkLoad(world); + if (bs == null) + { + side++; + continue; + } + Block b = bs.getBlock(); + if (b instanceof BlockAir) + { + if (toAdd && side != sideskip1 && side != sideskip2) + { + nextLayer.add(sideVec); + } + } else + { + doShine = true; + // Glass blocks go through to the next layer as well + if (side != sideskip1 && side != sideskip2) + { + if (toAdd && b != null && b.getLightOpacity(bs, world, sideVec.toBlockPos()) == 0) + { + nextLayer.add(sideVec); + } + } + } + } + side++; + } while (side < 6); + + if (doShine) + { + airNew.add(vec); + Block id = vec.getBlockStateSafe_noChunkLoad(world).getBlock(); + if (Blocks.AIR == id) + { + this.brightenAir(world, vec, brightAir); + index = this.checkLightPartA(EnumSkyBlock.BLOCK, vec.toBlockPos(), index); + dirty = true; + } else if (id == breatheableAirID) + { + this.brightenAir(world, vec, brightBreatheableAir); + index = this.checkLightPartA(EnumSkyBlock.BLOCK, vec.toBlockPos(), index); + dirty = true; + } + } + } + if (nextLayer.size() == 0) + { + break; + } + currentLayer = nextLayer; + nextLayer = new LinkedList(); + } + + if (dirty) + { + this.markDirty(); + this.checkLightPartB(EnumSkyBlock.BLOCK, index); + } + + // Look for any holdover bright blocks which are no longer lit (e.g. + // because the Arc Lamp became blocked in a tunnel) + airToRevert.removeAll(airNew); + index = 0; + dirty = false; + for (Object obj : airToRevert) + { + BlockVec3 vec = (BlockVec3) obj; + this.setDarkerAir(vec); + index = this.checkLightPartA(EnumSkyBlock.BLOCK, vec.toBlockPos(), index); + this.airToRestore.remove(vec); + dirty = true; + } + + if (dirty) + { + this.markDirty(); + this.checkLightPartB(EnumSkyBlock.BLOCK, index); + } + +// long time3 = System.nanoTime(); +// float total = (time3 - time1) / 1000000.0F; +// GalacticraftCore.logger.info(" Total Time taken: " + String.format("%.2f", total) + "ms"); + + this.usingBuckets.set(false); + this.usingLightList.set(false); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.facing = nbt.getInteger("Facing"); + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.airToRestore.clear(); + NBTTagList airBlocks = nbt.getTagList("AirBlocks", 10); + if (airBlocks.tagCount() > 0) + { + for (int j = airBlocks.tagCount() - 1; j >= 0; j--) + { + NBTTagCompound tag1 = airBlocks.getCompoundTagAt(j); + if (tag1 != null) + { + this.airToRestore.add(BlockVec3.readFromNBT(tag1)); + } + } + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setInteger("Facing", this.facing); + + NBTTagList airBlocks = new NBTTagList(); + + for (BlockVec3 vec : this.airToRestore) + { + NBTTagCompound tag = new NBTTagCompound(); + vec.writeToNBT(tag); + airBlocks.appendTag(tag); + } + nbt.setTag("AirBlocks", airBlocks); + return nbt; + } + + public void facingChanged() + { + this.facing -= 2; + if (this.facing < 0) + { + this.facing = 1 - this.facing; + // facing sequence: 0 - 3 - 1 - 2 + } + + this.updateAllInDimension(); + this.thisAABB = null; + this.revertAir(); + this.markDirty(); + this.ticks = 91; + } + + private void brightenAir(World world, BlockVec3 vec, IBlockState newState) + { + BlockPos blockpos = vec.toBlockPos(); + Chunk chunk = this.world.getChunk(blockpos); + IBlockState oldState = chunk.setBlockState(blockpos, newState); + if (this.world.isRemote && oldState != null) + this.world.markAndNotifyBlock(blockpos, chunk, oldState, newState, 2); + // No block update on server - not necessary for changing air to air + // (also must not trigger a sealer edge check!) + this.airToRestore.add(vec); + } + + private void setDarkerAir(BlockVec3 vec) + { + BlockPos blockpos = vec.toBlockPos(); + Block b = this.world.getBlockState(blockpos).getBlock(); + IBlockState newState; + if (b == GCBlocks.brightAir) + { + newState = Blocks.AIR.getDefaultState(); + } else if (b == GCBlocks.brightBreatheableAir) + { + newState = GCBlocks.breatheableAir.getDefaultState(); + } else + { + return; + } + +// Roughly similar to: this.worldObj.setBlockState(pos, newState, (this.worldObj.isRemote) ? 2 : 0); + + Chunk chunk = this.world.getChunk(blockpos); + IBlockState oldState = chunk.setBlockState(blockpos, newState); + if (this.world.isRemote && oldState != null) + this.world.markAndNotifyBlock(blockpos, chunk, oldState, newState, 2); + // No block update on server - not necessary for changing air to air + // (also must not trigger a sealer edge check!) + } + + private void revertAir() + { + if (this.airToRestore.isEmpty()) + return; + + if (this.usingLightList == null) + { + this.usingLightList = this.world.isRemote ? usingLightListClient : usingLightListServer; + } + + int index = 0; + for (BlockVec3 vec : this.airToRestore) + { + this.setDarkerAir(vec); + } + if (!this.usingLightList.getAndSet(true)) + { + for (BlockVec3 vec : this.airToRestore) + { + index = this.checkLightPartA(EnumSkyBlock.BLOCK, vec.toBlockPos(), index); + } + this.checkLightPartB(EnumSkyBlock.BLOCK, index); + this.usingLightList.set(false); + } + this.airToRestore.clear(); + this.checkLightFor(EnumSkyBlock.BLOCK, this.pos); + } + + public boolean checkLightFor(EnumSkyBlock lightType, BlockPos bp) + { + if (!this.world.isAreaLoaded(bp, 17, false)) + { + return false; + } + + World world = this.world; + BlockPos blockpos; + int i = 0; + int index = 0; + int savedLight = world.getLightFor(lightType, bp); + int rawLight = this.getRawLight(bp, lightType); + int testx = bp.getX(); + int testy = bp.getY(); + int testz = bp.getZ(); + int x = testx - 32; + int y = testy - 32; + int z = testz - 32; + int value, opacity, arraylight; + int xx, yy, zz, range; + LinkedList result = new LinkedList<>(); + + if (rawLight > savedLight) // Light switched on + { + lightUpdateBlockList[index++] = 133152; // 32, 32, 32 = the 0 + // position + } else if (rawLight < savedLight) // Light switched off ? + { + lightUpdateBlockList[index++] = 133152 | savedLight << 18; + + while (i < index) // This becomes CRAZY LARGE + { + value = lightUpdateBlockList[i++]; + xx = (value & 63) + x; + yy = (value >> 6 & 63) + y; + zz = (value >> 12 & 63) + z; + arraylight = value >> 18 & 15; + + if (arraylight > 0) + { + blockpos = new BlockPos(xx, yy, zz); + if (world.getLightFor(lightType, blockpos) == arraylight) // Only + // gonna + // happen + // once + // (definitely + // will + // happen + // the + // first + // iteration) + { + this.setLightFor_preChecked(lightType, blockpos, 0); // = + // flagdone + + range = MathHelper.abs(xx - testx) + MathHelper.abs(yy - testy) + MathHelper.abs(zz - testz); + if (range < 17) + { + GCCoreUtil.getPositionsAdjoining(xx, yy, zz, result); + for (BlockPos vec : result) + { + savedLight = world.getLightFor(lightType, vec); + if (savedLight == 0) + continue; // eliminate backtracking + IBlockState bs = world.getBlockState(vec); + opacity = bs.getBlock().getLightOpacity(bs, world, vec); + if (opacity <= 0) + opacity = 1; + // Tack positions onto the list as long as it + // looks like lit from here. i.e. saved light is + // adjacent light - opacity! + // There will be some errors due to coincidence + // / equality of light levels from 2 sources + if (savedLight == arraylight - opacity && index < SIZELIST) + { + lightUpdateBlockList[index++] = vec.getX() - x + (((savedLight << 6) + vec.getZ() - z << 6) + vec.getY() - y << 6); + } + } + } + } + } + } + + i = 0; + } + + while (i < index) + { + value = lightUpdateBlockList[i++]; + xx = (value & 63) + x; + yy = (value >> 6 & 63) + y; + zz = (value >> 12 & 63) + z; + blockpos = new BlockPos(xx, yy, zz); + savedLight = world.getLightFor(lightType, blockpos); + rawLight = this.getRawLight(blockpos, lightType); + + if (rawLight != savedLight) + { + this.setLightFor_preChecked(lightType, blockpos, rawLight); // <-------the + // light + // setting + if (world.isRemote) + world.notifyLightSet(blockpos); + + if (rawLight > savedLight) + { + range = MathHelper.abs(xx - testx) + MathHelper.abs(yy - testy) + MathHelper.abs(zz - testz); + if (range < 17 && index < SIZELIST - 6) + { + GCCoreUtil.getPositionsAdjoining(xx, yy, zz, result); + for (BlockPos vec : result) + { + if (world.getLightFor(lightType, vec) < rawLight - 1) // -1 + // here + // because + // opacity + // can't + // be + // less + // than + // 1 + // in + // getRawLight + { + // Tack even more positions on to the end of the + // list - this propagates each time we find a + // light source block... including going back + // over old positions + lightUpdateBlockList[index++] = vec.getX() - x + ((vec.getZ() - z << 6) + vec.getY() - y << 6); + } + } + } + } + } else if (world.isRemote && savedLight != ((value >> 21) & 15)) + { + world.notifyLightSet(blockpos); + } + } + + return true; + } + + public int checkLightPartA(EnumSkyBlock lightType, BlockPos bp, int indexIn) + { + if (indexIn >= SIZELIST) + { + return indexIn; + } + + World world = this.world; + BlockPos blockpos; + int i = indexIn; + int iNextStart = 0; + int index = indexIn; + int savedLight = world.getLightFor(lightType, bp); + int rawLight = this.getRawLight(bp, lightType); + int x = this.pos.getX() - 64; + int y = this.pos.getY() - 64; + int z = this.pos.getZ() - 64; + int testx = bp.getX(); + int testy = bp.getY(); + int testz = bp.getZ(); + int value, opacity, arraylight; + int xx, yy, zz, range; + LinkedList neighbours = new LinkedList<>(); + + if (rawLight > savedLight) // Light switched on + { + lightUpdateBlockList[index++] = ((testz - z << 7) + testy - y << 7) + testx - x; + } else if (rawLight < savedLight) // Light switched off: savedLight + // cannot be 0 here + { + lightUpdateBlockList[index++] = ((testz - z << 7) + testy - y << 7) + testx - x | savedLight << 21; + this.setLightFor_preChecked(lightType, bp, 0); + + while (i < index) + { + value = lightUpdateBlockList[i++]; + xx = (value & 127) + x; + yy = (value >> 7 & 127) + y; + zz = (value >> 14 & 127) + z; + range = MathHelper.abs(xx - testx) + MathHelper.abs(yy - testy) + MathHelper.abs(zz - testz); + if (range < 17) + { + arraylight = value >> 21 & 15; + GCCoreUtil.getPositionsAdjoiningLoaded(xx, yy, zz, neighbours, world); + for (BlockPos vec : neighbours) + { + savedLight = world.getLightFor(lightType, vec); + if (savedLight == 0) + continue; // eliminate backtracking + IBlockState bs = world.getBlockState(vec); + opacity = bs.getBlock().getLightOpacity(bs, world, vec); + if (opacity <= 0) + opacity = 1; + // Tack positions onto the list as long as it looks like + // lit from here. i.e. saved light is adjacent light - + // opacity! + // There will be some errors due to coincidence / + // equality of light levels from 2 sources + if (savedLight == arraylight - opacity && index < SIZELIST) + { + lightUpdateBlockList[index++] = vec.getX() - x + (((savedLight << 7) + vec.getZ() - z << 7) + vec.getY() - y << 7); + this.setLightFor_preChecked(lightType, vec, 0); // darken + // everything + // ready + // for + // re-light + } + } + } + } + + i = indexIn; + } + return index; + } + + public boolean checkLightPartB(EnumSkyBlock lightType, int index) + { + World world = this.world; + BlockPos blockpos; + int i = 0; + int savedLight, rawLight; + int testx = this.pos.getX(); + int testy = this.pos.getY(); + int testz = this.pos.getZ(); + int x = testx - 64; + int y = testy - 64; + int z = testz - 64; + int value; + int xx, yy, zz, range; + LinkedList neighbours = new LinkedList<>(); + + while (i < index) + { + value = lightUpdateBlockList[i++]; + xx = (value & 127) + x; + yy = (value >> 7 & 127) + y; + zz = (value >> 14 & 127) + z; + blockpos = new BlockPos(xx, yy, zz); + savedLight = world.getLightFor(lightType, blockpos); + rawLight = this.getRawLight(blockpos, lightType); + + if (rawLight != savedLight) + { + this.setLightFor_preChecked(lightType, blockpos, rawLight); // <-------the + // light + // setting + if (world.isRemote) + world.notifyLightSet(blockpos); + + if (rawLight > savedLight) + { + range = MathHelper.abs(xx - testx) + MathHelper.abs(yy - testy) + MathHelper.abs(zz - testz); + if (range < 34 && index < SIZELIST - 6) + { + GCCoreUtil.getPositionsAdjoiningLoaded(xx, yy, zz, neighbours, world); + for (BlockPos vec : neighbours) + { + if (world.getLightFor(lightType, vec) < rawLight - 1) // -1 + // here + // because + // opacity + // can't + // be + // less + // than + // 1 + // in + // getRawLight + { + // Tack even more positions on to the end of the + // list - this propagates each time we find a + // light source block... including going back + // over old positions + lightUpdateBlockList[index++] = vec.getX() - x + ((vec.getZ() - z << 7) + vec.getY() - y << 7); + } + } + } + } + } else if (world.isRemote && savedLight != ((value >> 21) & 15)) + { + world.notifyLightSet(blockpos); + } + } + return true; + } + + /** + * From vanilla. This is buggy, gets confused if two low opacity blocks + * adjacent (e.g. redstone wire, stairs) if those blocks are receiving + * similar light levels from another source + */ + private int getRawLight(BlockPos pos, EnumSkyBlock lightType) + { + IBlockState bs = this.world.getBlockState(pos); + Block block = bs.getBlock(); + int blockLight = block.getLightValue(bs, this.world, pos); + int light = lightType == EnumSkyBlock.SKY ? 0 : blockLight; + + if (light < 14) + { + int opacity = block.getLightOpacity(bs, this.world, pos); + if (opacity < 1) + { + opacity = 1; + } else if (opacity >= 15) + { + if (blockLight > 0) + { + opacity = 1; + } else + { + return 0; + } + } + + for (BlockPos blockpos : GCCoreUtil.getPositionsAdjoining(pos)) + { + int neighbourLight = this.world.getLightFor(lightType, blockpos) - opacity; // Easily + // picks + // up + // neighbour + // lighting + // if + // opacity + // is + // low... + if (neighbourLight > light) + { + if (neighbourLight >= 14) + { + return neighbourLight; + } + light = neighbourLight; + } + } + } + + return light; + } + + private void setLightFor_preChecked(EnumSkyBlock type, BlockPos pos, int lightValue) + { + this.world.getChunk(pos.getX() >> 4, pos.getZ() >> 4).setLightFor(type, pos, lightValue); + } + + public boolean getEnabled() + { + return !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos()); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } + + private void checkedAdd(BlockVec3 vec) + { + int dx = this.pos.getX() - vec.x; + int dz = this.pos.getZ() - vec.z; + if (dx < -8191 || dx > 8192) + return; + if (dz < -8191 || dz > 8192) + return; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + bucket.add(vec.y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + /** + * Currently unused - the sided implementation is used instead + */ + private boolean checkedContains(BlockVec3 vec) + { + int dx = this.pos.getX() - vec.x; + int dz = this.pos.getZ() - vec.z; + if (dx < -8191 || dx > 8192) + return true; + if (dz < -8191 || dz > 8192) + return true; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + return bucket.contains(vec.y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + private boolean checkedContains(BlockVec3 vec, int side) + { + int y = vec.y; + int dx = this.pos.getX() - vec.x; + int dz = this.pos.getZ() - vec.z; + switch (side) + { + case 0: + y--; + if (y < 0) + return true; + break; + case 1: + y++; + if (y > 255) + return true; + break; + case 2: + dz++; + break; + case 3: + dz--; + break; + case 4: + dx++; + break; + case 5: + dx--; + } + if (dx < -8191 || dx > 8192) + return true; + if (dz < -8191 || dz > 8192) + return true; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + return bucket.contains(y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + private static void checkedInit(intBucket[] buckets) + { + for (int i = 0; i < 256; i++) + { + buckets[i] = new intBucket(); + } + } + + private void checkedClear() + { + for (int i = 0; i < 256; i++) + { + this.buckets[i].clear(); + } + } + + public static class intBucket + { + + private int maxSize = 12; // default size + private int size = 0; + private int[] table = new int[maxSize]; + + public void add(int i) + { + if (this.contains(i)) + return; + + if (size >= maxSize) + { + int[] newTable = new int[maxSize + maxSize]; + System.arraycopy(table, 0, newTable, 0, maxSize); + table = newTable; + maxSize += maxSize; + } + table[size] = i; + size++; + } + + public boolean contains(int test) + { + for (int i = size - 1; i >= 0; i--) + { + if (table[i] == test) + return true; + } + return false; + } + + public void clear() + { + size = 0; + } + + public int size() + { + return size; + } + + public int[] contents() + { + return table; + } + } + + @Override + public void buildDataPacket(int[] data) + { + data[0] = this.facing; + } + + @Override + public void updateClient(List data) + { + this.facing = (Integer) data.get(1); + this.revertAir(); + this.thisAABB = null; + this.ticks = 86; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + for (BlockVec3 vec : this.airToRestore) + { + sendData.add(vec); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + while (buffer.readableBytes() >= 12) + { + int x = buffer.readInt(); + int y = buffer.readInt(); + int z = buffer.readInt(); + this.airToRestore.add(new BlockVec3(x, y, z)); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFueler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFueler.java new file mode 100644 index 00000000..829b8d32 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFueler.java @@ -0,0 +1,258 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.entity.IFuelable; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; + +import com.google.common.base.Predicate; + +public class TileEntityBuggyFueler extends TileEntityMulti implements IMultiBlock, IFuelable, IFuelDock, ICargoEntity +{ + + public TileEntityBuggyFueler() + { + super(null); + } + + private IDockable dockedEntity; + private boolean initialised; + + @Override + public void update() + { + if (!this.initialised) + { + if (!this.world.isRemote) + this.onCreate(this.world, this.getPos()); + this.initialiseMultiTiles(this.getPos(), this.world); + this.initialised = true; + } + + if (!this.world.isRemote) + { + final List list = this.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(this.getPos().getX() - 1.5D, this.getPos().getY() - 2.0, this.getPos().getZ() - 1.5D, + this.getPos().getX() + 1.5D, this.getPos().getY() + 4.0, this.getPos().getZ() + 1.5D), (Predicate) input -> input instanceof IFuelable); + + boolean changed = false; + + for (final Object o : list) + { + if (o != null && o instanceof IDockable && !this.world.isRemote) + { + final IDockable fuelable = (IDockable) o; + + if (fuelable.isDockValid(this)) + { + this.dockedEntity = fuelable; + + this.dockedEntity.setPad(this); + + changed = true; + } + } + } + + if (!changed) + { + if (this.dockedEntity != null) + { + this.dockedEntity.setPad(null); + } + + this.dockedEntity = null; + } + } + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + + List positions = new ArrayList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.BUGGY_FUEL_PAD; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int y = placedPosition.getY(); + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + if (x == 0 && z == 0) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && (EnumBlockMultiType) stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.BUGGY_FUEL_PAD) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + + if (this.dockedEntity != null) + { + this.dockedEntity.onPadDestroyed(); + this.dockedEntity = null; + } + } + + @Override + public int addFuel(FluidStack liquid, boolean doFill) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.addFuel(liquid, doFill); + } + + return 0; + } + + @Override + public FluidStack removeFuel(int amount) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.removeFuel(amount); + } + + return null; + } + + @Override + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.addCargo(stack, doAdd); + } + + return EnumCargoLoadingState.NOTARGET; + } + + @Override + public RemovalResult removeCargo(boolean doRemove) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.removeCargo(doRemove); + } + + return new RemovalResult(EnumCargoLoadingState.NOTARGET, ItemStack.EMPTY); + } + + @Override + public HashSet getConnectedTiles() + { + HashSet connectedTiles = new HashSet(); + + for (int x = -2; x < 3; x++) + { + for (int z = -2; z < 3; z++) + { + if (x == -2 || x == 2 || z == -2 || z == 2) + { + if (Math.abs(x) != Math.abs(z)) + { + final TileEntity tile = this.world.getTileEntity(new BlockPos(this.getPos().getX() + x, this.getPos().getY(), this.getPos().getZ() + z)); + + if (tile != null && tile instanceof ILandingPadAttachable && ((ILandingPadAttachable) tile).canAttachToLandingPad(this.world, this.getPos())) + { + connectedTiles.add((ILandingPadAttachable) tile); + } + } + } + } + } + + return connectedTiles; + } + + @Override + public boolean isBlockAttachable(IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile != null && tile instanceof ILandingPadAttachable) + { + return ((ILandingPadAttachable) tile).canAttachToLandingPad(world, this.getPos()); + } + + return false; + } + + @Override + public IDockable getDockedEntity() + { + return this.dockedEntity; + } + + @Override + public void dockEntity(IDockable entity) + { + this.dockedEntity = entity; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFuelerSingle.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFuelerSingle.java new file mode 100644 index 00000000..45752cbb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFuelerSingle.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPadFull; + +public class TileEntityBuggyFuelerSingle extends TileEntity implements ITickable +{ + + private int corner = 0; + + @Override + public void update() + { + if (!this.world.isRemote && this.corner == 0) + { + final ArrayList attachedLaunchPads = new ArrayList(); + + for (int x = this.getPos().getX() - 1; x < this.getPos().getX() + 2; x++) + { + for (int z = this.getPos().getZ() - 1; z < this.getPos().getZ() + 2; z++) + { + final TileEntity tile = this.world.getTileEntity(new BlockPos(x, this.getPos().getY(), z)); + + if (tile instanceof TileEntityBuggyFuelerSingle && !tile.isInvalid() && ((TileEntityBuggyFuelerSingle) tile).corner == 0) + { + attachedLaunchPads.add(tile); + } + } + } + + if (attachedLaunchPads.size() == 9) + { + for (final TileEntity tile : attachedLaunchPads) + { + this.world.markTileEntityForRemoval(tile); + ((TileEntityBuggyFuelerSingle) tile).corner = 1; + } + + this.world.setBlockState(this.getPos(), GCBlocks.landingPadFull.getStateFromMeta(BlockLandingPadFull.EnumLandingPadFullType.BUGGY_PAD.getMeta()), 2); + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoLoader.java new file mode 100644 index 00000000..19b491b9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoLoader.java @@ -0,0 +1,345 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity.EnumCargoLoadingState; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity.RemovalResult; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.api.tile.ILockable; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.blocks.BlockCargoLoader; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class TileEntityCargoLoader extends TileBaseElectricBlockWithInventory implements ISidedInventory, ILandingPadAttachable, ILockable +{ + + public boolean outOfItems; + @NetworkedField(targetSide = Side.CLIENT) public boolean targetFull; + @NetworkedField(targetSide = Side.CLIENT) public boolean targetNoInventory; + @NetworkedField(targetSide = Side.CLIENT) public boolean noTarget; + @NetworkedField(targetSide = Side.CLIENT) public boolean locked; + + public ICargoEntity attachedFuelable; + + public TileEntityCargoLoader() + { + super("container.cargoloader.name"); + this.storage.setMaxExtract(45); + this.inventory = NonNullList.withSize(15, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.getWorld().isRemote) + { + if (this.ticks % 100 == 0) + { + this.checkForCargoEntity(); + } + + if (this.attachedFuelable != null) + { + this.noTarget = false; + ItemStack stack = this.removeCargo(false).resultStack; + + if (!stack.isEmpty()) + { + this.outOfItems = false; + + EnumCargoLoadingState state = this.attachedFuelable.addCargo(stack, false); + + this.targetFull = state == EnumCargoLoadingState.FULL; + this.targetNoInventory = state == EnumCargoLoadingState.NOINVENTORY; + this.noTarget = state == EnumCargoLoadingState.NOTARGET; + + if (this.ticks % (this.poweredByTierGC > 1 ? 9 : 15) == 0 && state == EnumCargoLoadingState.SUCCESS && !this.disabled && this.hasEnoughEnergyToRun) + { + this.attachedFuelable.addCargo(this.removeCargo(true).resultStack, true); + } + } else + { + this.outOfItems = true; + } + } else + { + this.noTarget = true; + } + } + } + + public void checkForCargoEntity() + { + boolean foundFuelable = false; + + BlockVec3 thisVec = new BlockVec3(this); + for (final EnumFacing dir : EnumFacing.VALUES) + { + final TileEntity pad = thisVec.getTileEntityOnSide(this.getWorld(), dir); + + if (pad != null && pad instanceof TileEntityMulti) + { + final TileEntity mainTile = ((TileEntityMulti) pad).getMainBlockTile(); + + if (mainTile instanceof ICargoEntity) + { + this.attachedFuelable = (ICargoEntity) mainTile; + foundFuelable = true; + break; + } + } else if (pad != null && pad instanceof ICargoEntity) + { + this.attachedFuelable = (ICargoEntity) pad; + foundFuelable = true; + break; + } + } + + if (!foundFuelable) + { + this.attachedFuelable = null; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.locked = nbt.getBoolean("locked"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("locked", this.locked); + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return side != this.getElectricInputDirection() ? new int[] + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14} : new int[] + {}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (side != this.getElectricInputDirection()) + { + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } else + { + return true; + } + } + + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } else + { + return true; + } + } + + @Override + public boolean shouldUseEnergy() + { + return !this.getDisabled(0); + } + + public RemovalResult removeCargo(boolean doRemove) + { + for (int i = 1; i < this.getInventory().size(); i++) + { + ItemStack stackAt = this.getInventory().get(i); + + if (!stackAt.isEmpty()) + { + ItemStack resultStack = stackAt.copy(); + resultStack.setCount(1); + + if (doRemove) + { + stackAt.shrink(1); + if (stackAt.isEmpty()) + { + this.getInventory().set(i, ItemStack.EMPTY); + } + } + + if (doRemove) + { + this.markDirty(); + } + + return new RemovalResult(EnumCargoLoadingState.SUCCESS, resultStack); + } + } + + return new RemovalResult(EnumCargoLoadingState.EMPTY, ItemStack.EMPTY); + } + + // Used by Abandoned Base worldgen + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + int count = 1; + + for (count = 1; count < this.getInventory().size(); count++) + { + ItemStack stackAt = this.getInventory().get(count); + + if (RecipeUtil.stacksMatch(stack, stackAt) && stackAt.getCount() < stackAt.getMaxStackSize()) + { + if (stackAt.getCount() + stack.getCount() <= stackAt.getMaxStackSize()) + { + if (doAdd) + { + stackAt.grow(stack.getCount()); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } else + { + // Part of the stack can fill this slot but there will be + // some left over + int origSize = stackAt.getCount(); + int surplus = origSize + stack.getCount() - stackAt.getMaxStackSize(); + + if (doAdd) + { + stackAt.setCount(stackAt.getMaxStackSize()); + this.markDirty(); + } + + stack.setCount(surplus); + if (this.addCargo(stack, doAdd) == EnumCargoLoadingState.SUCCESS) + { + return EnumCargoLoadingState.SUCCESS; + } + + stackAt.setCount(origSize); + return EnumCargoLoadingState.FULL; + } + } + } + + int size = this.getInventory().size(); + for (count = 1; count < size; count++) + { + ItemStack stackAt = this.getInventory().get(count); + + if (stackAt.isEmpty()) + { + if (doAdd) + { + this.getInventory().set(count, stack); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + } + + return EnumCargoLoadingState.FULL; + } + + @Override + public boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockCargoLoader) + { + return (state.getValue(BlockCargoLoader.FACING)); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public void clearLockedInventory() + { + for (int i = 1; i < 15; i++) + { + this.getInventory().set(i, ItemStack.EMPTY); + } + } + + @Override + public boolean getLocked() + { + return this.locked; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoUnloader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoUnloader.java new file mode 100644 index 00000000..1661437b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoUnloader.java @@ -0,0 +1,277 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity.EnumCargoLoadingState; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity.RemovalResult; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.blocks.BlockCargoLoader; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class TileEntityCargoUnloader extends TileBaseElectricBlockWithInventory implements ILandingPadAttachable +{ + + @NetworkedField(targetSide = Side.CLIENT) public boolean targetEmpty; + @NetworkedField(targetSide = Side.CLIENT) public boolean targetNoInventory; + @NetworkedField(targetSide = Side.CLIENT) public boolean noTarget; + + public ICargoEntity attachedFuelable; + + public TileEntityCargoUnloader() + { + super("container.cargounloader.name"); + this.storage.setMaxExtract(45); + this.inventory = NonNullList.withSize(15, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + if (this.ticks % 100 == 0) + { + this.checkForCargoEntity(); + } + + if (this.attachedFuelable != null) + { + this.noTarget = false; + RemovalResult result = this.attachedFuelable.removeCargo(false); + + if (!result.resultStack.isEmpty()) + { + this.targetEmpty = false; + + EnumCargoLoadingState state = this.addCargo(result.resultStack, false); + + this.targetEmpty = state == EnumCargoLoadingState.EMPTY; + + if (this.ticks % (this.poweredByTierGC > 1 ? 9 : 15) == 0 && state == EnumCargoLoadingState.SUCCESS && !this.disabled && this.hasEnoughEnergyToRun) + { + this.addCargo(this.attachedFuelable.removeCargo(true).resultStack, true); + } + } else + { + this.targetNoInventory = result.resultState == EnumCargoLoadingState.NOINVENTORY; + this.noTarget = result.resultState == EnumCargoLoadingState.NOTARGET; + this.targetEmpty = true; + } + } else + { + this.noTarget = true; + } + } + } + + public void checkForCargoEntity() + { + boolean foundFuelable = false; + + BlockVec3 thisVec = new BlockVec3(this); + for (final EnumFacing dir : EnumFacing.VALUES) + { + final TileEntity pad = thisVec.getTileEntityOnSide(this.world, dir); + + if (pad != null && pad instanceof TileEntityMulti) + { + final TileEntity mainTile = ((TileEntityMulti) pad).getMainBlockTile(); + + if (mainTile instanceof ICargoEntity) + { + this.attachedFuelable = (ICargoEntity) mainTile; + foundFuelable = true; + break; + } + } else if (pad != null && pad instanceof ICargoEntity) + { + this.attachedFuelable = (ICargoEntity) pad; + foundFuelable = true; + break; + } + } + + if (!foundFuelable) + { + this.attachedFuelable = null; + } + } + + @Override + public boolean hasCustomName() + { + return false; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return side != this.getElectricInputDirection() ? new int[] + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14} : new int[] + {}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (side != this.getElectricInputDirection()) + { + if (slotID == 0) + { + return ItemElectricBase.isElectricItemEmpty(itemstack); + } else + { + return true; + } + } + + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } else + { + return true; + } + } + + @Override + public boolean shouldUseEnergy() + { + return !this.getDisabled(0); + } + + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + int count = 1; + + for (count = 1; count < this.getInventory().size(); count++) + { + ItemStack stackAt = this.getInventory().get(count); + + if (RecipeUtil.stacksMatch(stack, stackAt) && stackAt.getCount() < stackAt.getMaxStackSize()) + { + if (stackAt.getCount() + stack.getCount() <= stackAt.getMaxStackSize()) + { + if (doAdd) + { + stackAt.grow(stack.getCount()); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } else + { + // Part of the stack can fill this slot but there will be + // some left over + int origSize = stackAt.getCount(); + int surplus = origSize + stack.getCount() - stackAt.getMaxStackSize(); + + if (doAdd) + { + stackAt.setCount(stackAt.getMaxStackSize()); + this.markDirty(); + } + + stack.setCount(surplus); + if (this.addCargo(stack, doAdd) == EnumCargoLoadingState.SUCCESS) + { + return EnumCargoLoadingState.SUCCESS; + } + + stackAt.setCount(origSize); + return EnumCargoLoadingState.FULL; + } + } + } + + int size = this.getInventory().size(); + for (count = 1; count < size; count++) + { + ItemStack stackAt = this.getInventory().get(count); + + if (stackAt.isEmpty()) + { + if (doAdd) + { + this.getInventory().set(count, stack); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + } + + return EnumCargoLoadingState.FULL; + } + + @Override + public boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockCargoLoader) + { + return (state.getValue(BlockCargoLoader.FACING)); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCircuitFabricator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCircuitFabricator.java new file mode 100644 index 00000000..056456a9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCircuitFabricator.java @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; + +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.items.ItemBasic; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityCircuitFabricator extends TileBaseElectricBlockWithInventory implements ISidedInventory, IMachineSides +{ + + public static final int PROCESS_TIME_REQUIRED = 300; + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + private ItemStack producingStack = ItemStack.EMPTY; + private long ticks; + + public TileEntityCircuitFabricator() + { + super("tile.machine2.5.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 40 : 20); + this.inventory = NonNullList.withSize(7, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + this.updateInput(); + + if (!this.world.isRemote) + { + boolean updateInv = false; + + if (this.hasEnoughEnergyToRun) + { + if (this.canCompress()) + { + ++this.processTicks; + + if (this.processTicks >= this.getProcessTimeRequired()) + { + this.world.playSound(null, this.getPos(), SoundEvents.BLOCK_ANVIL_LAND, SoundCategory.BLOCKS, 0.3F, this.world.rand.nextFloat() * 0.1F + 0.9F); + this.processTicks = 0; + this.compressItems(); + updateInv = true; + } + } else + { + this.processTicks = 0; + } + } else + { + this.processTicks = 0; + } + + if (updateInv) + { + this.markDirty(); + } + } + + this.ticks++; + } + + public int getProcessTimeRequired() + { + return TileEntityCircuitFabricator.PROCESS_TIME_REQUIRED * 2 / (1 + this.poweredByTierGC); + } + + public void updateInput() + { + this.producingStack = CircuitFabricatorRecipes.getOutputForInput(this.getInventory().subList(1, 6)); + } + + private boolean canCompress() + { + if (this.producingStack.isEmpty()) + { + return false; + } + if (this.getInventory().get(6).isEmpty()) + { + return true; + } + if (!this.getInventory().get(6).isEmpty() && !this.getInventory().get(6).isItemEqual(this.producingStack)) + { + return false; + } + int result = this.getInventory().get(6).isEmpty() ? 0 : this.getInventory().get(6).getCount() + this.producingStack.getCount(); + return result <= this.getInventoryStackLimit() && result <= this.producingStack.getMaxStackSize(); + } + + public void compressItems() + { + if (this.canCompress()) + { + ItemStack resultItemStack = this.producingStack.copy(); + if (this.world.provider instanceof IZeroGDimension) + { + if (resultItemStack.getItem() == GCItems.basicItem) + { + if (resultItemStack.getItemDamage() == ItemBasic.WAFER_BASIC) + { + resultItemStack.setCount(5); + } else if (resultItemStack.getItemDamage() == 12) // Solar + // panels + { + resultItemStack.setCount(15); + } else + { + resultItemStack.setCount(resultItemStack.getCount() * 2); + } + } + } + + if (this.getInventory().get(6).isEmpty()) + { + this.getInventory().set(6, resultItemStack); + } else if (this.getInventory().get(6).isItemEqual(resultItemStack)) + { + if (this.getInventory().get(6).getCount() + resultItemStack.getCount() > 64) + { + resultItemStack.setCount(this.getInventory().get(6).getCount() + resultItemStack.getCount() - 64); + GCCoreUtil.spawnItem(this.world, this.getPos(), resultItemStack); + this.getInventory().get(6).setCount(64); + } else + { + this.getInventory().get(6).grow(resultItemStack.getCount()); + } + } + } + + for (int i = 1; i < 6; i++) + { + this.decrStackSize(i, 1); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + return nbt; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (slotID == 0) + { + return itemStack != null && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + if (slotID > 5) + { + return false; + } + + ArrayList list = CircuitFabricatorRecipes.slotValidItems.get(slotID - 1); + + for (ItemStack test : list) + { + if (test.isItemEqual(itemStack)) + { + return true; + } + } + + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return new int[] + {6}; + } + + // Offer whichever silicon slot has less silicon + boolean siliconFlag = !this.getInventory().get(2).isEmpty() && (this.getInventory().get(3).isEmpty() || this.getInventory().get(3).getCount() < this.getInventory().get(2).getCount()); + return siliconFlag ? new int[] + {0, 1, 3, 4, 5} : new int[] + {0, 1, 2, 4, 5}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID < 6 && this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 6; + } + + @Override + public boolean shouldUseEnergy() + { + return this.processTicks > 0; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachine2.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCoalGenerator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCoalGenerator.java new file mode 100644 index 00000000..a0d6372b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCoalGenerator.java @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.util.ItemUtil; + +public class TileEntityCoalGenerator extends TileBaseUniversalElectricalSource implements IInventoryDefaults, ISidedInventory, IConnector +{ + private final int dustCoalCookTime = 220; + private final int itemCoalCookTime = 320; + private final int blockCoalCookTime = 3200; + // + private final int dustCharcoalCookTime = 120; + private final int itemCharcoalCookTime = 160; + private final int blockCharcoalCookTime = 1600; + // New energy rates: + // + // Tier 1 machine typically consumes 600 gJ/s = 30 gJ/t + // Coal generator on max heat can power up to 4 Tier 1 machines + // (fewer if one of them is an Electric Furnace) + // Basic solar gen in full sun can power 1 Tier 1 machine + // 1 lump of coal is equivalent to 38400 gJ + // because on max heat it produces 120 gJ/t over 320 ticks + // Below the min_generate, all heat is wasted + // At max generate, 100% efficient conversion coal energy -> electric makes + // 120 gJ/t + public static final int MAX_GENERATE_GJ_PER_TICK = 150; + public static final int MIN_GENERATE_GJ_PER_TICK = 30; + private static final float BASE_ACCELERATION = 0.3f; + public float prevGenerateWatts = 0; + @NetworkedField(targetSide = Side.CLIENT) + public float heatGJperTick = 0; + @NetworkedField(targetSide = Side.CLIENT) + public int itemCookTime = 0; + + public TileEntityCoalGenerator() + { + super("tile.machine.0.name"); + this.storage.setMaxExtract(TileEntityCoalGenerator.MAX_GENERATE_GJ_PER_TICK - TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK); + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.world.isRemote && this.heatGJperTick - TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK > 0) + { + this.receiveEnergyGC(null, (this.heatGJperTick - TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK), false); + } + super.update(); + if (!this.world.isRemote) + { + if (this.itemCookTime > 0) + { + this.itemCookTime--; + this.heatGJperTick = Math.min(this.heatGJperTick + Math.max(this.heatGJperTick * 0.005F, TileEntityCoalGenerator.BASE_ACCELERATION), TileEntityCoalGenerator.MAX_GENERATE_GJ_PER_TICK); + } + if (this.itemCookTime <= 0 && !this.getInventory().get(0).isEmpty()) + { + ItemStack stack = this.getInventory().get(0); + if (stack.getCount() > 0) + { + if (ItemUtil.hasOreDictSuffix(stack, "charcoal")) + { + if (ItemUtil.isBlock(stack)) + { + this.handleFuel(blockCharcoalCookTime); + } else if (ItemUtil.isDust(stack)) + { + this.handleFuel(dustCharcoalCookTime); + } else + { + this.handleFuel(itemCharcoalCookTime); + } + } else if (ItemUtil.hasOreDictSuffix(stack, "coal")) + { + if (ItemUtil.isBlock(stack)) + { + this.handleFuel(blockCoalCookTime); + } else if (ItemUtil.isDust(stack)) + { + this.handleFuel(dustCoalCookTime); + } else + { + this.handleFuel(itemCoalCookTime); + } + } else + { + if (stack.getItem() == Items.COAL) + { + this.itemCookTime = 320; + this.decrStackSize(0, 1); + } else if (stack.getItem() == Item.getItemFromBlock(Blocks.COAL_BLOCK) && stack.getCount() > 0) + { + this.itemCookTime = 320 * 10; + this.decrStackSize(0, 1); + } + } + } + } + this.produce(); + if (this.itemCookTime <= 0) + { + this.heatGJperTick = Math.max(this.heatGJperTick - 0.3F, 0); + } + this.heatGJperTick = Math.min(Math.max(this.heatGJperTick, 0.0F), this.getMaxEnergyStoredGC()); + } + } + + private void handleFuel(int cookTime) + { + this.itemCookTime = cookTime; + this.decrStackSize(0, 1); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.itemCookTime = nbt.getInteger("itemCookTime"); + this.heatGJperTick = nbt.getInteger("generateRateInt"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("itemCookTime", this.itemCookTime); + nbt.setFloat("generateRate", this.heatGJperTick); + return nbt; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + // if (itemstack.getItem() != Items.COAL || itemstack.getItem() != Item.getItemFromBlock(Blocks.COAL_BLOCK)) + // { + // return ItemUtil.hasOreDictSuffix(itemstack, "coal") || ItemUtil.hasOreDictSuffix(itemstack, "charcoal"); + // } else + // { + // return itemstack.getItem() == Item.getItemFromBlock(Blocks.COAL_BLOCK); + // } + return true; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing direction) + { + return slotID == 0; + } + + @Override + public float receiveElectricity(EnumFacing from, float energy, int tier, boolean doReceive) + { + return 0; + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(this.getElectricOutputDirection()); + } + + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricOutputDirection() + { + return byIndex().rotateY(); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + return direction == this.getElectricOutputDirection(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCompactNasaWorkbench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCompactNasaWorkbench.java new file mode 100644 index 00000000..923ec659 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCompactNasaWorkbench.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; + +public class TileEntityCompactNasaWorkbench extends TileEntity +{ + + public TileEntityCompactNasaWorkbench() + { + } + + public boolean onActivated(EntityPlayer entityPlayer) + { + entityPlayer.openGui(GalacticraftCore.instance, GuiIdsCore.NASA_WORKBENCH_ROCKET, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCrafting.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCrafting.java new file mode 100644 index 00000000..5f68db10 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCrafting.java @@ -0,0 +1,611 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Random; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.inventory.PersistantInventoryCrafting; +import micdoodle8.mods.galacticraft.core.network.PacketDynamicInventory; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class TileEntityCrafting extends TileEntity implements IInventoryDefaults, ISidedInventory, IInventorySettable +{ + + private static final int SIZEINVENTORY = 9; + public PersistantInventoryCrafting craftMatrix = new PersistantInventoryCrafting(); + public NonNullList memory = NonNullList.withSize(SIZEINVENTORY, ItemStack.EMPTY); + private ItemStack hiddenOutputBuffer = ItemStack.EMPTY; // Used for + // Buildcraft pipes + // and other + // inventory-slot + // setters which do + // not fully clear + // the results slot + // - see + // setInventorySlotContents() + private Boolean overriddenStatus; + private ItemStack memoryResult; + + public TileEntityCrafting() + { + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request size + contents information from server + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamicInventory(this)); + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } + + public void updateMemory(ItemStack craftingResult) + { + if (CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()) == ItemStack.EMPTY) + return; + this.setMemoryHeld(craftingResult); + for (int i = 0; i < SIZEINVENTORY; i++) + { + ItemStack stack = this.craftMatrix.getStackInSlot(i); + if (stack.isEmpty()) + { + this.memory.set(i, ItemStack.EMPTY); + } else + { + ItemStack stack2 = stack.copy(); + stack2.setCount(1); + this.memory.set(i, stack2.copy()); + } + } + } + + public ItemStack getMemory(int i) + { + return this.memory.get(i); + } + + @Override + public int getSizeInventory() + { + return SIZEINVENTORY; + } + + @Override + public ItemStack getStackInSlot(int par1) + { + if (par1 < SIZEINVENTORY) + return this.craftMatrix.getStackInSlot(par1); + + // Results slot + // First, try to clear the hidden output buffer before generating new + // results items + if (!this.hiddenOutputBuffer.isEmpty()) + { + return this.hiddenOutputBuffer; + } + + // Crafting Manager can produce concurrent modification exception in + // single player + // if a server-side tick (e.g. from a Hopper) calls this while + // client-side is still initialising recipes + try + { + return CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()); + } catch (Exception ignore) + { + } + return ItemStack.EMPTY; + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (par1 >= 0 && par1 < SIZEINVENTORY) + { + ItemStack result = this.craftMatrix.decrStackSize(par1, par2); + this.markDirty(); + this.updateOverriddenStatus(); + return result; + } else if (par1 == SIZEINVENTORY) + { + if (!this.hiddenOutputBuffer.isEmpty()) + { + return this.hiddenOutputBuffer.splitStack(par2); + } + if (this.stillMatchesRecipe()) + { + ItemStack craftingResult = CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()); + if (!craftingResult.isEmpty()) + { + this.pullOneResultStack(); + this.markDirty(); + this.updateOverriddenStatus(); + ItemStack result = craftingResult.splitStack(par2); + this.hiddenOutputBuffer = craftingResult; // save any + // balance + return result; + } + } + } + return ItemStack.EMPTY; + } + + private void pullOneResultStack() + { +// Thread.dumpStack(); + NonNullList aitemstack = CraftingManager.getRemainingItems(this.craftMatrix, this.world); + + for (int i = 0; i < aitemstack.size(); ++i) + { + ItemStack itemstack = this.craftMatrix.getStackInSlot(i); + ItemStack itemstack1 = aitemstack.get(i); + + if (!itemstack.isEmpty()) + { + this.craftMatrix.decrStackSize(i, 1); + } + + if (!itemstack1.isEmpty()) + { + if (this.craftMatrix.getStackInSlot(i).isEmpty()) + { + this.craftMatrix.setInventorySlotContents(i, itemstack1); + } else + { + // TODO - things like buckets which can't go back into this + // - drop? + } + } + } + } + + protected boolean stillMatchesRecipe() + { + int emptyCount = 0; + for (int i = 0; i < SIZEINVENTORY; i++) + { + ItemStack stack = this.craftMatrix.getStackInSlot(i); + ItemStack targetOther = this.memory.get(i); + if (targetOther.isEmpty() && stack.isEmpty()) + continue; + + if (targetOther.isEmpty() || stack.isEmpty() || !sameItem(targetOther, stack)) + { + return false; + } + } + return emptyCount < SIZEINVENTORY; + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.memory) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (par1 >= 0) + { + this.markDirty(); + this.updateOverriddenStatus(); + return this.craftMatrix.removeStackFromSlot(par1); + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public void setInventorySlotContents(int par1, ItemStack stack) + { + if (par1 >= 0 && par1 < SIZEINVENTORY) + { + this.craftMatrix.setInventorySlotContents(par1, stack); + } else if (par1 == SIZEINVENTORY) + { + if (stack.isEmpty()) + { + if (this.hiddenOutputBuffer.isEmpty()) + { + // Standard behaviour: hiddenOutputBuffer not in use + this.craftOutput(); + } + } else + // Buildcraft pipes and some other extractors may not fully clear + // the results slot, but instead set it to partial contents + { + if (!stack.isItemEqual(this.hiddenOutputBuffer)) // also true if + // hiddenOutputBuffer + // is empty, + // e.g. craft 9 + // new items + // and pipe + // takes 4, + // setting + // output stack + // to 5 items + { + this.dropHiddenOutputBuffer(this.world, this.pos); + this.craftOutput(); + } + } + this.hiddenOutputBuffer = stack; + } + this.markDirty(); + this.updateOverriddenStatus(); + } + + private void craftOutput() + { + if (this.stillMatchesRecipe()) + { + ItemStack craftingResult = CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()); + if (!craftingResult.isEmpty()) + { + this.pullOneResultStack(); + } + } + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.magneticcrafting.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.craftMatrix.clear(); + for (int i = 0; i < SIZEINVENTORY; ++i) + this.memory.set(i, ItemStack.EMPTY); + NBTTagList contents = nbt.getTagList("Items", 10); + if (contents != null && contents.tagCount() > 0) + { + for (int i = 0; i < contents.tagCount(); ++i) + { + NBTTagCompound var4 = contents.getCompoundTagAt(i); + int slot = var4.getByte("Slot") & 255; + + if (slot < SIZEINVENTORY) + { + this.craftMatrix.setInventorySlotContents(slot, new ItemStack(var4)); + } else if (slot < 18) + { + this.memory.set(slot - SIZEINVENTORY, new ItemStack(var4)); + } + } + } + NBTTagCompound buffer = nbt.getCompoundTag("buf"); + this.hiddenOutputBuffer = new ItemStack(buffer); + this.updateMemoryItem(); + } + this.updateOverriddenStatus(); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + NBTTagList var2 = new NBTTagList(); + for (int i = 0; i < SIZEINVENTORY; ++i) + { + if (!this.craftMatrix.getStackInSlot(i).isEmpty()) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte) (i)); + this.craftMatrix.getStackInSlot(i).writeToNBT(var4); + var2.appendTag(var4); + } + } + for (int i = 0; i < SIZEINVENTORY; ++i) + { + if (!this.memory.get(i).isEmpty()) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte) (i + SIZEINVENTORY)); + this.memory.get(i).writeToNBT(var4); + var2.appendTag(var4); + } + } + + nbt.setTag("Items", var2); + NBTTagCompound buffer = new NBTTagCompound(); + this.hiddenOutputBuffer.writeToNBT(buffer); + nbt.setTag("buf", buffer); + return nbt; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer player) + { + return this.world.getTileEntity(this.getPos()) == this && player.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + + @Override + public boolean isItemValidForSlot(int par1, ItemStack par2ItemStack) + { + return true; + } + + @Override + public void invalidate() + { + super.invalidate(); + this.updateContainingBlockInfo(); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + } + + @Override + public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction) + { + if (index >= SIZEINVENTORY || stack.isEmpty()) + return false; + boolean override = this.overriddenMemory(); + ItemStack target = override ? this.craftMatrix.getStackInSlot(index) : this.memory.get(index); + + if (!target.isEmpty() && sameItem(target, stack)) + { + ItemStack is3 = this.getStackInSlot(index); + if (is3.isEmpty()) + return true; + int currentSize = is3.getCount(); + + // If any other slot matching this item has a smaller stacksize, + // return false (and hopefully that slot will be filled instead) + for (int i = 0; i < SIZEINVENTORY; i++) + { + if (i == index) + continue; + ItemStack targetOther = override ? this.craftMatrix.getStackInSlot(i) : this.memory.get(i); + + // It's another memory slot matching this item, and may be a + // more suitable recipient if the stack count is lower + if (!targetOther.isEmpty() && sameItem(targetOther, stack)) + { + ItemStack itemstack2; + if (override) + { + itemstack2 = targetOther; // Performance shortcut as we + // already know that + // targetOther is not empty + } else + { + itemstack2 = this.craftMatrix.getStackInSlot(i); + if (itemstack2.isEmpty()) + return false; // A totally empty slot in the recipe + // needs this item + } + + if (override || sameItem(stack, itemstack2)) + { + if (itemstack2.getCount() < currentSize) + return false; // A less well-filled slot in the + // recipe needs this item + } + } + } + + return true; + } + return false; + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return index == SIZEINVENTORY && (!this.hiddenOutputBuffer.isEmpty() || this.stillMatchesRecipe()); + } + + /** + * Does not include a null check, do a null check first + */ + private boolean sameItem(ItemStack target, ItemStack stack) + { + return target.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == target.getMetadata()) && RecipeUtil.areItemStackTagsEqual(stack, target); + } + + public boolean overrideMemory(ItemStack itemstack1, NonNullList memory2) + { + boolean allEmpty = true; + for (int i = 0; i < 9; i++) + { + if (!this.craftMatrix.getStackInSlot(i).isEmpty()) + { + allEmpty = false; + break; + } + } + if (allEmpty) + return false; + if (!CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()).isEmpty()) + { + // Valid recipe on the table. Does it fuzzy match this tile's memory + // (empty slots which should have recipe components are OK) + boolean fuzzyMatch = true; + for (int i = 0; i < 9; i++) + { + if (!this.craftMatrix.getStackInSlot(i).isEmpty() && !matchingStacks(this.craftMatrix.getStackInSlot(i), this.getMemory(i))) + { + fuzzyMatch = false; + break; + } + } + + // If it's a valid recipe and CAN'T match the memory, then override + // the remembered recipe + if (!fuzzyMatch) + { + for (int i = 0; i < 9; i++) + { + if (matchingStacks(itemstack1, this.craftMatrix.getStackInSlot(i))) + { + for (int j = 0; j < 9; j++) + { + memory2.set(j, this.craftMatrix.getStackInSlot(j).copy()); + } + return true; + } + } + } + } + return false; + } + + public boolean overriddenMemory() + { + if (this.overriddenStatus != null) + return this.overriddenStatus; + if (!CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()).isEmpty()) + { + // Valid recipe on the table. Does it fuzzy match this tile's memory + // (empty slots which should have recipe components are OK) + for (int i = 0; i < 9; i++) + { + if (!this.craftMatrix.getStackInSlot(i).isEmpty() && !matchingStacks(this.craftMatrix.getStackInSlot(i), this.getMemory(i))) + { + this.overriddenStatus = true; + return true; + } + } + } + this.overriddenStatus = false; + return false; + } + + private void updateOverriddenStatus() + { + this.overriddenStatus = null; + } + + private boolean matchingStacks(ItemStack stack, ItemStack target) + { + return !target.isEmpty() && target.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == target.getMetadata()) && RecipeUtil.areItemStackTagsEqual(stack, target) + && target.isStackable() && target.getCount() < target.getMaxStackSize(); + } + + public void dropHiddenOutputBuffer(World worldIn, BlockPos pos) + { + ItemStack var7 = this.hiddenOutputBuffer; + + if (var7 != null && !var7.isEmpty()) + { + Random syncRandom = GCCoreUtil.getRandom(pos); + + float var8 = syncRandom.nextFloat() * 0.8F + 0.1F; + float var9 = syncRandom.nextFloat() * 0.8F + 0.1F; + float var10 = syncRandom.nextFloat() * 0.8F + 0.1F; + + while (!var7.isEmpty()) + { + EntityItem var12 = new EntityItem(worldIn, pos.getX() + var8, pos.getY() + var9, pos.getZ() + var10, var7.splitStack(syncRandom.nextInt(21) + 10)); + float var13 = 0.05F; + var12.motionX = (float) syncRandom.nextGaussian() * var13; + var12.motionY = (float) syncRandom.nextGaussian() * var13 + 0.2F; + var12.motionZ = (float) syncRandom.nextGaussian() * var13; + worldIn.spawnEntity(var12); + } + } + } + + public void setMemoryHeld(ItemStack stack) + { + this.memoryResult = stack.copy(); + } + + public ItemStack getMemoryHeld() + { + return this.memoryResult == null ? ItemStack.EMPTY : this.memoryResult; + } + + private void updateMemoryItem() + { + PersistantInventoryCrafting memCopy = new PersistantInventoryCrafting(); + for (int i = 0; i < SIZEINVENTORY; i++) + { + memCopy.setInventorySlotContents(i, this.getMemory(i)); + } + ItemStack stack = CraftingManager.findMatchingResult(memCopy, this.getWorld()); + if (!stack.isEmpty()) + this.setMemoryHeld(stack); + } + + public void setStacksClientSide(ItemStack[] stacks) + { + for (int i = 0; i < SIZEINVENTORY; i++) + { + this.setInventorySlotContents(i, stacks[i]); + } + if (stacks.length > SIZEINVENTORY) + this.setMemoryHeld(stacks[SIZEINVENTORY]); + } + + @Override + public void setSizeInventory(int size) + { + // Intentionally no operation + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDeconstructor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDeconstructor.java new file mode 100644 index 00000000..ccf3f51a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDeconstructor.java @@ -0,0 +1,594 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; + +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; + +public class TileEntityDeconstructor extends TileBaseElectricBlock implements IInventoryDefaults, ISidedInventory, IMachineSides +{ + + public static final float SALVAGE_CHANCE = 0.75F; + public static final int PROCESS_TIME_REQUIRED_BASE = 250; + public int processTimeRequired = PROCESS_TIME_REQUIRED_BASE; + @NetworkedField(targetSide = Side.CLIENT) + public int processTicks = 0; + private ItemStack producingStack = ItemStack.EMPTY; + private long ticks; + + public static List salvageable = new LinkedList<>(); + public static List knownRecipes = new LinkedList<>(); + private int recursiveCount; + + static + { + initialiseItemList(); + } + + private static void initialiseItemList() + { + addSalvage(new ItemStack(AsteroidsItems.basicItem, 1, 5)); // T3 plate + addSalvage(new ItemStack(AsteroidsItems.basicItem, 1, 6)); // Compressed titanium + addSalvage(new ItemStack(AsteroidsItems.basicItem, 1, 0)); // Titanium ingot + addSalvage(new ItemStack(MarsItems.marsItemBasic, 1, 3)); // T2 plate + addSalvage(new ItemStack(MarsItems.marsItemBasic, 1, 5)); // Compressed desh + addSalvage(new ItemStack(MarsItems.marsItemBasic, 1, 2)); // Desh ingot + addSalvage(new ItemStack(GCItems.flagPole)); + addSalvage(new ItemStack(GCItems.heavyPlatingTier1)); + addSalvage(new ItemStack(GCItems.itemBasicMoon, 1, 1)); // Compressed meteoric iron + addSalvage(new ItemStack(GCItems.itemBasicMoon, 1, 0)); // Meteoric iron ingot + addSalvage(new ItemStack(GCItems.basicItem, 1, 9)); // Compressed steel + addSalvage(new ItemStack(GCItems.basicItem, 1, 10)); // Compressed bronze + addSalvage(new ItemStack(GCItems.basicItem, 1, 6)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 7)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 8)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 11)); // Compressed iron + addSalvage(new ItemStack(GCItems.basicItem, 1, 3)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 4)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 5)); + addSalvage(new ItemStack(Items.IRON_INGOT)); + addSalvage(new ItemStack(Items.GOLD_INGOT)); + addSalvage(new ItemStack(Items.GOLD_NUGGET)); + addSalvage(new ItemStack(Items.DIAMOND)); + } + + public static void initialiseRecipeList() + { + knownRecipes.addAll(GalacticraftRegistry.getRocketT1Recipes()); + knownRecipes.addAll(GalacticraftRegistry.getBuggyBenchRecipes()); + } + + public static void initialiseRecipeListPlanets() + { + knownRecipes.addAll(GalacticraftRegistry.getRocketT2Recipes()); + knownRecipes.addAll(GalacticraftRegistry.getCargoRocketRecipes()); + knownRecipes.addAll(GalacticraftRegistry.getRocketT3Recipes()); + knownRecipes.addAll(GalacticraftRegistry.getAstroMinerRecipes()); + } + + public TileEntityDeconstructor() + { + super("tile.machine2.10.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 75); + this.setTierGC(2); + this.inventory = NonNullList.withSize(11, ItemStack.EMPTY); + } + + public static void addSalvage(ItemStack itemStack) + { + for (ItemStack inList : salvageable) + { + if (ItemStack.areItemsEqual(inList, itemStack)) + return; + } + salvageable.add(itemStack.copy()); + } + + public static boolean isSalvage(ItemStack stack) + { + for (ItemStack inList : salvageable) + { + if (ItemStack.areItemsEqual(inList, stack)) + return true; + } + return false; + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + boolean updateInv = false; + + if (this.hasEnoughEnergyToRun) + { + if (this.canDeconstruct()) + { + ++this.processTicks; + + if ((this.processTicks * 5) % this.processTimeRequired == 5) + { + this.world.playSound(null, this.getPos(), GCSounds.deconstructor, SoundCategory.BLOCKS, 0.25F, this.world.rand.nextFloat() * 0.04F + 0.38F); + } + + if (this.processTicks >= this.processTimeRequired) + { + this.processTicks = 0; + this.deconstruct(); + updateInv = true; + } + } + else + { + this.processTicks = 0; + } + } + else + { + this.processTicks = 0; + } + + if (updateInv) + { + this.markDirty(); + } + } + + this.ticks++; + } + + private boolean canDeconstruct() + { + return !this.getInventory().get(1).isEmpty(); + } + + public void deconstruct() + { + List ingredients = new LinkedList<>(); + ingredients.add(new ItemStack(this.getInventory().get(1).getItem(), 1, this.getInventory().get(1).getItemDamage())); + this.recursiveCount = 0; + List salvaged = this.getSalvageable(ingredients, null); + salvaged = this.squashList(salvaged); + salvaged = this.randomChanceList(salvaged); + if (salvaged != null) + { + for (ItemStack output : salvaged) + { + this.addToOutputMatrix(output); + } + } + this.decrStackSize(1, 1); + } + + private List getSalvageable(List ingredients, ItemStack done) + { + if (ingredients == null || ingredients.isEmpty()) + { + return null; + } + if (this.recursiveCount++ > 10) + { + return null; + } + + List ret = new LinkedList<>(); + for (ItemStack stack : ingredients) + { + if (isSalvage(stack)) + { + ret.add(stack); + } + else + { + GalacticraftCore.logger.debug("Trying to " + this.recursiveCount + " break down " + stack.toString()); + List ingredients2 = this.getIngredients(stack); + if (ingredients2 != null) + { + if (done != null) + { + Iterator it = ingredients2.iterator(); + while (it.hasNext()) + { + if (ItemStack.areItemStacksEqual(it.next(), done)) + it.remove(); // prevent recursive A->{B} B->{A} + // type recipe chains + } + } + List recursive = this.getSalvageable(ingredients2, stack); + if (recursive != null && !recursive.isEmpty()) + { + ret.addAll(recursive); + } + } + } + } + this.recursiveCount--; + return ret; + } + + private List squashList(List ingredients) + { + if (ingredients == null || ingredients.isEmpty()) + { + return null; + } + List ret = new LinkedList<>(); + for (ItemStack stack : ingredients) + { + boolean matched = false; + for (ItemStack stack1 : ret) + { + if (ItemStack.areItemsEqual(stack, stack1)) + { + matched = true; + stack1.grow(stack.getCount()); + break; + } + } + if (!matched) + { + ret.add(stack); + } + } + return ret; + } + + private List randomChanceList(List ingredients) + { + if (ingredients == null || ingredients.isEmpty()) + { + return null; + } + List ret = new LinkedList<>(); + for (ItemStack stack : ingredients) + { + int count = stack.getCount(); + int result = 0; + for (int i = 0; i < count; i++) + { + if (this.world.rand.nextFloat() < SALVAGE_CHANCE) + { + result++; + } + } + if (result > 0) + { + stack.setCount(result); + ret.add(stack); + } + } + return ret; + } + + private List getIngredients(ItemStack stack) + { + for (INasaWorkbenchRecipe recipe : knownRecipes) + { + ItemStack test = recipe.getRecipeOutput(); + if (ItemStack.areItemsEqual(test, stack) && test.getCount() == 1) + { + return toItemStackList(recipe.getRecipeInput().values()); + } + } + for (IRecipe recipe : ForgeRegistries.RECIPES) + { + ItemStack test = recipe.getRecipeOutput(); + if (ItemStack.areItemsEqual(test, stack) && test.getCount() == 1) + { + if (recipe instanceof ShapedRecipes) + { + return expandRecipeInputs(((ShapedRecipes) recipe).recipeItems); + } + else if (recipe instanceof ShapelessRecipes) + { + return expandRecipeInputs(((ShapelessRecipes) recipe).recipeItems); + } + else if (recipe instanceof ShapedOreRecipe) + { + return expandRecipeInputs(((ShapedOreRecipe) recipe).getIngredients()); + } + else if (recipe instanceof ShapelessOreRecipe) + { + return expandRecipeInputs(((ShapelessOreRecipe) recipe).getIngredients()); + } + } + } + return null; + } + + private List expandRecipeInputs(List inputs) + { + List ret = new LinkedList<>(); + for (Object input : inputs) + { + ItemStack toAdd = parseRecipeInput(input); + if (toAdd != null && !toAdd.isEmpty()) + { + ret.add(toAdd); + } + } + return ret; + } + + private ItemStack parseRecipeInput(Object input) + { + if (input instanceof Ingredient) + { + for (ItemStack obj : ((Ingredient) input).getMatchingStacks()) + { + ItemStack ret = parseRecipeInput(obj); + if (ret != null) + { + return ret; + } + } + } + else if (input instanceof ItemStack) + { + ItemStack stack = (ItemStack) input; + if (stack.getMetadata() == OreDictionary.WILDCARD_VALUE) + { + return new ItemStack(stack.getItem(), stack.getCount(), 0); + } + else + { + return stack.copy(); + } + } + else if (input instanceof String) + { + List stacks = OreDictionary.getOres((String) input); + if (stacks.isEmpty()) + { + return null; + } + for (ItemStack stack : stacks) + { + if (isSalvage(stack)) + { + return stack.copy(); + } + } + return stacks.get(0) == null ? null : stacks.get(0).copy(); + } + else if (input instanceof Iterable) + { + for (Object obj : (Iterable) input) + { + ItemStack ret = parseRecipeInput(obj); + if (ret != null) + { + return ret; + } + } + } + + return null; + } + + private List toItemStackList(Collection inputs) + { + List ret = new LinkedList<>(); + for (ItemStack o : inputs) + { + if (o != null && !o.isEmpty()) + { + ret.add(o.copy()); + } + } + return ret; + } + + private void addToOutputMatrix(ItemStack stack) + { + for (int i = 2; i < 11; i++) + { + if (this.getInventory().get(i).isEmpty()) + { + this.getInventory().set(i, stack); + return; + } + if (!(ItemStack.areItemsEqual(stack, this.getInventory().get(i)))) + { + continue; + } + int size = this.getInventory().get(i).getCount(); + if (size + stack.getCount() < this.getInventoryStackLimit()) + { + this.getInventory().get(i).grow(stack.getCount()); + return; + } + this.getInventory().get(i).setCount(this.getInventoryStackLimit()); + stack.shrink(this.getInventoryStackLimit() - size); + } + GCCoreUtil.spawnItem(this.world, this.getPos(), stack); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.processTicks = par1NBTTagCompound.getInteger("smeltingTicks"); + + this.readMachineSidesFromNBT(par1NBTTagCompound); // Needed by + // IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + return nbt; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (slotID == 0) + { + return itemStack != null && !itemStack.isEmpty() && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + return slotID == 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10}; + } + + return new int[] {1}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID >= 2; + } + + @Override + public boolean shouldUseEnergy() + { + return this.processTicks > 0; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachine2.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDish.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDish.java new file mode 100644 index 00000000..0c438370 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDish.java @@ -0,0 +1,367 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectrical; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; + +public class TileEntityDish extends TileBaseUniversalElectrical implements IMultiBlock, IDisableableMachine, IInventoryDefaults, ISidedInventory, IConnector +{ + + public float targetAngle; + public float currentAngle; + @NetworkedField(targetSide = Side.CLIENT) public boolean disabled = false; + @NetworkedField(targetSide = Side.CLIENT) public int disableCooldown = 0; + + private boolean initialised = false; + private AxisAlignedBB renderAABB; + + public TileEntityDish() + { + super("tile.satellitedish.name"); + this.storage.setMaxExtract(100); + this.setTierGC(1); + inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + public float rotation(float partial) + { + return (this.ticks + partial) / 12; + } + + public float elevation(float partial) + { + return (MathHelper.sin(rotation(partial) / 40) + 1.0F) * 22.5F; + } + + @Override + public void update() + { + super.update(); + + if (!this.initialised) + { + this.initialised = this.initialiseMultiTiles(this.getPos(), this.world); + } + + if (!this.world.isRemote) + { + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + } + + float angle = this.world.getCelestialAngle(1.0F) - 0.7845194F < 0 ? 1.0F - 0.7845194F : -0.7845194F; + float celestialAngle = (this.world.getCelestialAngle(1.0F) + angle) * 360.0F; + + celestialAngle %= 360; + + { + if (celestialAngle > 30 && celestialAngle < 150) + { + float difference = this.targetAngle - celestialAngle; + + this.targetAngle -= difference / 20.0F; + } else if (!this.world.isDaytime() || this.world.isRaining() || this.world.isThundering()) + { + this.targetAngle = 77.5F + 180.0F; + } else if (celestialAngle < 50) + { + this.targetAngle = 50; + } else if (celestialAngle > 150) + { + this.targetAngle = 150; + } + } + + float difference = this.targetAngle - this.currentAngle; + + this.currentAngle += difference / 20.0F; + } + + protected boolean initialiseMultiTiles(BlockPos pos, World world) + { + // Client can create its own fake blocks and tiles - no need for + // networking in 1.8+ + if (world.isRemote) + this.onCreate(world, pos); + + List positions = new ArrayList<>(); + this.getPositions(pos, positions); + boolean result = true; + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMulti) + { + ((TileEntityMulti) tile).mainBlockPosition = pos; + } else + { + result = false; + } + } + return result; + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.DISH_LARGE; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + int y = placedPosition.getY(); + + if (++y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + + if (++y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + + if (++y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + + if (++y > buildHeight) + { + return; + } + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + if (++y > buildHeight) + { + return; + } + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + if (++y > buildHeight) + { + return; + } + for (int x = -3; x < 4; x++) + { + for (int z = -3; z < 4; z++) + { + if (Math.abs(x) + Math.abs(z) == 6) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + if (++y > buildHeight) + { + return; + } + for (int x = -3; x < 4; x++) + { + for (int z = -3; z < 4; z++) + { + if (Math.abs(x) + Math.abs(z) == 6) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + if (++y > buildHeight) + { + return; + } + for (int x = -2; x < 3; x++) + { + for (int z = -2; z < 3; z++) + { + if (Math.abs(x) + Math.abs(z) == 4) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new LinkedList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && (EnumBlockMultiType) stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.DISH_LARGE) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.05D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.setBlockToAir(pos); + } + } + this.world.destroyBlock(thisBlock, true); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.storage.setCapacity(nbt.getFloat("maxEnergy")); + this.currentAngle = nbt.getFloat("currentAngle"); + this.targetAngle = nbt.getFloat("targetAngle"); + this.setDisabled(0, nbt.getBoolean("disabled")); + this.disableCooldown = nbt.getInteger("disabledCooldown"); + + this.initialised = false; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setFloat("maxEnergy", this.getMaxEnergyStoredGC()); + nbt.setFloat("currentAngle", this.currentAngle); + nbt.setFloat("targetAngle", this.targetAngle); + nbt.setInteger("disabledCooldown", this.disableCooldown); + nbt.setBoolean("disabled", this.getDisabled(0)); + + return nbt; + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos.add(-3, 0, -3), pos.add(3, 8, 3)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + this.disabled = disabled; + this.disableCooldown = 20; + } + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC() * i / this.getMaxEnergyStoredGC()); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDungeonSpawner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDungeonSpawner.java new file mode 100644 index 00000000..616100c3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDungeonSpawner.java @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.IBoss; + +public class TileEntityDungeonSpawner extends TileEntityAdvanced +{ + + public Class bossClass; + public IBoss boss; + public boolean spawned; + public boolean isBossDefeated; + public boolean playerInRange; + public boolean lastPlayerInRange; + private Vector3 roomCoords; + private Vector3 roomSize; + public long lastKillTime; + private BlockPos chestPos; + private AxisAlignedBB range15 = null; + private AxisAlignedBB rangeBounds = null; + private AxisAlignedBB rangeBoundsPlus3 = null; + private AxisAlignedBB rangeBoundsPlus11 = null; + + public TileEntityDungeonSpawner() + { + this(null); + } + + public TileEntityDungeonSpawner(Class bossClass) + { + super("tile.gcdungeonspawner.name"); + this.bossClass = bossClass; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public void update() + { + super.update(); + + if (this.roomCoords == null) + { + return; + } + + if (!this.world.isRemote) + { + if (this.range15 == null) + { + final Vector3 thisVec = new Vector3(this); + this.range15 = new AxisAlignedBB(thisVec.x - 15, thisVec.y - 15, thisVec.z - 15, thisVec.x + 15, thisVec.y + 15, thisVec.z + 15); + this.rangeBounds = new AxisAlignedBB(this.roomCoords.intX(), this.roomCoords.intY(), this.roomCoords.intZ(), this.roomCoords.intX() + this.roomSize.intX(), + this.roomCoords.intY() + this.roomSize.intY(), this.roomCoords.intZ() + this.roomSize.intZ()); + this.rangeBoundsPlus3 = this.rangeBounds.grow(3, 3, 3); + } + + if (this.lastKillTime > 0 && MinecraftServer.getCurrentTimeMillis() - lastKillTime > 900000) // 15 + // minutes + { + this.lastKillTime = 0; + this.isBossDefeated = false; + // After 15 minutes a new boss is able to be spawned + } + + final List l = this.world.getEntitiesWithinAABB(bossClass, this.range15); + + for (final Entity e : l) + { + if (!e.isDead) + { + this.boss = (IBoss) e; + this.spawned = true; + this.isBossDefeated = false; + this.boss.onBossSpawned(this); + } + } + + List entitiesWithin = this.world.getEntitiesWithinAABB(EntityMob.class, this.rangeBoundsPlus3); + + for (Entity mob : entitiesWithin) + { + if (this.getDisabledCreatures().contains(mob.getClass())) + { + mob.setDead(); + } + } + + List playersWithin = this.world.getEntitiesWithinAABB(EntityPlayer.class, this.rangeBounds); + + this.playerInRange = !playersWithin.isEmpty(); + + if (this.playerInRange) + { + if (!this.lastPlayerInRange && !this.spawned) + { + // Try to create a boss entity + if (this.boss == null && !this.isBossDefeated) + { + try + { + Constructor c = this.bossClass.getConstructor(World.class); + this.boss = (IBoss) c.newInstance(this.world); + ((Entity) this.boss).setPosition(this.getPos().getX() + 0.5, this.getPos().getY() + 1.0, this.getPos().getZ() + 0.5); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + // Now spawn the boss + if (this.boss != null) + { + if (this.boss instanceof EntityLiving) + { + EntityLiving bossLiving = (EntityLiving) this.boss; + bossLiving.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(bossLiving)), null); + this.world.spawnEntity(bossLiving); + this.playSpawnSound(bossLiving); + this.spawned = true; + } + } + } + } + + this.lastPlayerInRange = this.playerInRange; + } + } + + public void playSpawnSound(Entity entity) + { + + } + + public List> getDisabledCreatures() + { + List> list = new ArrayList>(); + list.add(EntityEvolvedSkeleton.class); + list.add(EntityEvolvedCreeper.class); + list.add(EntityEvolvedZombie.class); + list.add(EntityEvolvedSpider.class); + return list; + } + + public void setRoom(Vector3 coords, Vector3 size) + { + this.roomCoords = coords; + this.roomSize = size; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.playerInRange = this.lastPlayerInRange = nbt.getBoolean("playerInRange"); + this.isBossDefeated = nbt.getBoolean("defeated"); + + try + { + this.bossClass = (Class) Class.forName(nbt.getString("bossClass")); + } catch (Exception e) + { + // This exception will be thrown when read is called from + // TileEntity.handleUpdateTag + // but we only care if an exception is thrown on server side read + if (!this.world.isRemote) + { + e.printStackTrace(); + } + } + + this.roomCoords = new Vector3(); + this.roomCoords.x = nbt.getDouble("roomCoordsX"); + this.roomCoords.y = nbt.getDouble("roomCoordsY"); + this.roomCoords.z = nbt.getDouble("roomCoordsZ"); + this.roomSize = new Vector3(); + this.roomSize.x = nbt.getDouble("roomSizeX"); + this.roomSize.y = nbt.getDouble("roomSizeY"); + this.roomSize.z = nbt.getDouble("roomSizeZ"); + + if (nbt.hasKey("lastKillTime")) + { + this.lastKillTime = nbt.getLong("lastKillTime"); + } else if (nbt.hasKey("lastKillTimeNew")) + { + long savedTime = nbt.getLong("lastKillTimeNew"); + this.lastKillTime = savedTime == 0 ? 0 : savedTime + MinecraftServer.getCurrentTimeMillis(); + } + + if (nbt.hasKey("chestPosNull") && !nbt.getBoolean("chestPosNull")) + { + this.chestPos = new BlockPos(nbt.getInteger("chestX"), nbt.getInteger("chestY"), nbt.getInteger("chestZ")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setBoolean("playerInRange", this.playerInRange); + nbt.setBoolean("defeated", this.isBossDefeated); + nbt.setString("bossClass", this.bossClass.getCanonicalName()); + + if (this.roomCoords != null) + { + nbt.setDouble("roomCoordsX", this.roomCoords.x); + nbt.setDouble("roomCoordsY", this.roomCoords.y); + nbt.setDouble("roomCoordsZ", this.roomCoords.z); + nbt.setDouble("roomSizeX", this.roomSize.x); + nbt.setDouble("roomSizeY", this.roomSize.y); + nbt.setDouble("roomSizeZ", this.roomSize.z); + } + + nbt.setLong("lastKillTimeNew", this.lastKillTime == 0 ? 0 : this.lastKillTime - MinecraftServer.getCurrentTimeMillis()); + + nbt.setBoolean("chestPosNull", this.chestPos == null); + if (this.chestPos != null) + { + nbt.setInteger("chestX", this.chestPos.getX()); + nbt.setInteger("chestY", this.chestPos.getY()); + nbt.setInteger("chestZ", this.chestPos.getZ()); + } + return nbt; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + public BlockPos getChestPos() + { + return chestPos; + } + + public void setChestPos(BlockPos chestPos) + { + this.chestPos = chestPos; + } + + public AxisAlignedBB getRangeBounds() + { + if (this.rangeBounds == null) + this.rangeBounds = new AxisAlignedBB(this.roomCoords.intX(), this.roomCoords.intY(), this.roomCoords.intZ(), this.roomCoords.intX() + this.roomSize.intX(), + this.roomCoords.intY() + this.roomSize.intY(), this.roomCoords.intZ() + this.roomSize.intZ()); + + return this.rangeBounds; + } + + public AxisAlignedBB getRangeBoundsPlus11() + { + if (this.rangeBoundsPlus11 == null) + this.rangeBoundsPlus11 = this.getRangeBounds().grow(11, 11, 11); + + return this.rangeBoundsPlus11; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricFurnace.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricFurnace.java new file mode 100644 index 00000000..e78295ff --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricFurnace.java @@ -0,0 +1,449 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineTiered; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; + +public class TileEntityElectricFurnace extends TileBaseElectricBlockWithInventory implements ISidedInventory, IMachineSides +{ + // The electric furnace is 50% faster than a vanilla Furnace + // but at a cost of some inefficiency: + // It uses 46800 gJ to smelt 8 ingots quickly + // compared with the energy generated by 1 coal which is 38400 gJ + // + // The efficiency can be increased using a Tier 2 furnace + + public static int PROCESS_TIME_REQUIRED = 130; + + @NetworkedField(targetSide = Side.CLIENT) public int processTimeRequired = PROCESS_TIME_REQUIRED; + + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + + public final Set playersUsing = new HashSet(); + + private boolean initialised = false; + + public TileEntityElectricFurnace() + { + this(1); + } + + /* + * @param tier: 1 = Electric Furnace 2 = Electric Arc Furnace + */ + public TileEntityElectricFurnace(int tier) + { + super(tier == 1 ? "tile.machine.2.name" : "tile.machine.7.name"); + this.initialised = true; + this.inventory = NonNullList.withSize(4, ItemStack.EMPTY); + if (tier == 1) + { + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 60 : 45); + return; + } + + this.setTier2(); + } + + private void setTier2() + { + this.storage.setCapacity(25000); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 60); + this.processTimeRequired = 100; + this.setTierGC(2); + } + + @Override + public void update() + { + if (!this.initialised) + { + int metadata = this.getBlockMetadata(); + // for version update compatibility + Block b = this.world.getBlockState(this.getPos()).getBlock(); + if (b == GCBlocks.machineBase) + { + this.world.setBlockState(this.getPos(), + GCBlocks.machineTiered.getDefaultState()/* + * ,s 4 + */, 2); + } else if (metadata >= 8) + { + this.setTier2(); + } + this.initialised = true; + } + + super.update(); + + if (!this.world.isRemote) + { + if (this.canProcess()) + { + if (this.hasEnoughEnergyToRun) + { + // 100% extra speed boost for Tier 2 machine if powered by + // Tier 2 power + if (this.tierGC >= 2) + { + this.processTimeRequired = PROCESS_TIME_REQUIRED / 2 / this.poweredByTierGC; + } + + if (this.processTicks == 0) + { + this.processTicks = this.processTimeRequired; + } else + { + if (--this.processTicks <= 0) + { + this.smeltItem(); + this.processTicks = this.canProcess() ? this.processTimeRequired : 0; + } + } + } else if (this.processTicks > 0 && this.processTicks < this.processTimeRequired) + { + // Apply a "cooling down" process if the electric furnace + // runs out of energy while smelting + if (this.world.rand.nextInt(4) == 0) + { + this.processTicks++; + } + } + } else + { + this.processTicks = 0; + } + } else + { + // Smoother client side animation before the networked fields get + // updated + if (this.processTicks > 0 && this.processTicks < this.processTimeRequired) + { + this.processTicks--; + } + } + } + + /** + * @return Is this machine able to process its specific task? + */ + public boolean canProcess() + { + ItemStack stack = this.getInventory().get(1); + if (stack.isEmpty()) + { + return false; + } + ItemStack result = FurnaceRecipes.instance().getSmeltingResult(stack); + if (result.isEmpty()) + { + int burnable = TileEntityFurnace.getItemBurnTime(stack); + if (burnable >= 200 && burnable < 400) + result = new ItemStack(MarsItems.carbonFragments); // this + // includes + // most + // wooden + // tools, + // doors, + // stairs, + // boats etc + // but not + // saplings + // and sticks + else + return false; + } + + if (this.tierGC == 1) + { + if (!this.getInventory().get(2).isEmpty()) + { + return (this.getInventory().get(2).isItemEqual(result) && this.getInventory().get(2).getCount() < 64); + } + } + + // Electric Arc Furnace + if (this.getInventory().get(2).isEmpty() || this.getInventory().get(3).isEmpty()) + { + return true; + } + int space = 0; + if (this.getInventory().get(2).isItemEqual(result)) + { + space = 64 - this.getInventory().get(2).getCount(); + } + if (this.getInventory().get(3).isItemEqual(result)) + { + space += 64 - this.getInventory().get(3).getCount(); + } + return space >= 2; + } + + /** + * Turn one item from the furnace source stack into the appropriate smelted + * item in the furnace result stack + */ + public void smeltItem() + { + if (this.canProcess()) + { + ItemStack resultItemStack = FurnaceRecipes.instance().getSmeltingResult(this.getInventory().get(1)); + boolean doubleResult = false; + if (this.tierGC > 1) + { + String nameSmelted = this.getInventory().get(1).getTranslationKey().toLowerCase(); + if ((resultItemStack.getTranslationKey().toLowerCase().contains("ingot") || resultItemStack.getItem() == Items.QUARTZ) + && (nameSmelted.contains("ore") || nameSmelted.contains("raw") || nameSmelted.contains("moon") || nameSmelted.contains("mars") || nameSmelted.contains("shard"))) + { + doubleResult = true; + } + } + + if (doubleResult) + { + int space2 = 0; + int space3 = 0; + if (this.getInventory().get(2).isEmpty()) + { + this.getInventory().set(2, resultItemStack.copy()); + this.getInventory().get(2).grow(resultItemStack.getCount()); + space2 = 2; + } else if (this.getInventory().get(2).isItemEqual(resultItemStack)) + { + space2 = (64 - this.getInventory().get(2).getCount()) / resultItemStack.getCount(); + if (space2 > 2) + space2 = 2; + this.getInventory().get(2).grow(resultItemStack.getCount() * space2); + } + if (space2 < 2) + { + if (this.getInventory().get(3).isEmpty()) + { + this.getInventory().set(3, resultItemStack.copy()); + if (space2 == 0) + { + this.getInventory().get(3).grow(resultItemStack.getCount()); + } + } else if (this.getInventory().get(3).isItemEqual(resultItemStack)) + { + space3 = (64 - this.getInventory().get(3).getCount()) / resultItemStack.getCount(); + if (space3 > 2 - space2) + space3 = 2 - space2; + this.getInventory().get(3).grow(resultItemStack.getCount() * space3); + } + } + } else if (this.getInventory().get(2).isEmpty()) + { + this.getInventory().set(2, resultItemStack.copy()); + } else if (this.getInventory().get(2).isItemEqual(resultItemStack)) + { + this.getInventory().get(2).grow(resultItemStack.getCount()); + } + + this.getInventory().get(1).shrink(1); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (this.storage.getEnergyStoredGC() > EnergyStorageTile.STANDARD_CAPACITY) + { + this.setTier2(); + this.initialised = true; + } else + { + this.initialised = false; + } + this.processTicks = nbt.getInteger("smeltingTicks"); + + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + if (this.tierGC == 1 && this.storage.getEnergyStoredGC() > EnergyStorageTile.STANDARD_CAPACITY) + { + this.storage.setEnergyStored(EnergyStorageTile.STANDARD_CAPACITY); + } + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + + return nbt; + } + +// @Override +// public boolean hasCustomName() +// { +// return true; +// } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring + * stack size) into the given slot. + */ + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (itemStack.isEmpty()) + { + return false; + } + return slotID == 1 ? !FurnaceRecipes.instance().getSmeltingResult(itemStack).isEmpty() : slotID == 0 && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (this.tierGC == 2) + { + return new int[] + {0, 1, 2, 3}; + } + return new int[] + {0, 1, 2}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 2 || this.tierGC == 2 && slotID == 3; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachineTiered.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricIngotCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricIngotCompressor.java new file mode 100644 index 00000000..438c73a0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricIngotCompressor.java @@ -0,0 +1,699 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.ShapedRecipesGC; +import micdoodle8.mods.galacticraft.api.recipe.ShapelessOreRecipeGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine4; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.inventory.PersistantInventoryCrafting; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityElectricIngotCompressor extends TileBaseElectricBlock implements IInventoryDefaults, ISidedInventory, IMachineSides +{ + + private static final int PROCESS_TIME_REQUIRED_BASE = 200; + private int processTimeRequiredBase; + @NetworkedField(targetSide = Side.CLIENT) public int processTimeRequired = PROCESS_TIME_REQUIRED_BASE; + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + private ItemStack producingStack = ItemStack.EMPTY; + private long ticks; + private static final int[] allSlots = new int[] + {0, 3, 4, 5, 6, 7, 8, 9, 10, 11}; + private boolean advanced; + + public PersistantInventoryCrafting compressingCraftMatrix = new PersistantInventoryCrafting(); + private static Random randnum = new Random(); + + public TileEntityElectricIngotCompressor() + { + super("tile.machine2.4.name"); + this.processTimeRequiredBase = PROCESS_TIME_REQUIRED_BASE; + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 75); + this.setTierGC(2); + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + public TileEntityElectricIngotCompressor(boolean advanced) + { + super("tile.machine4.11.name"); + this.processTimeRequiredBase = PROCESS_TIME_REQUIRED_BASE * 3 / 5; + this.processTimeRequired = processTimeRequiredBase; + this.advanced = true; + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 75); + this.setTierGC(3); + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + boolean updateInv = false; + + if (this.hasEnoughEnergyToRun) + { + if (this.canCompress()) + { + ++this.processTicks; + + this.processTimeRequired = this.processTimeRequiredBase / (1 + this.poweredByTierGC * 2); + + if (this.processTicks >= this.processTimeRequired) + { + if (this.advanced) + this.world.playSound(null, this.getPos(), GCSounds.advanced_compressor, SoundCategory.BLOCKS, 0.23F, this.world.rand.nextFloat() * 0.1F + 9.5F); + else + this.world.playSound(null, this.getPos(), SoundEvents.BLOCK_ANVIL_LAND, SoundCategory.BLOCKS, 0.12F, this.world.rand.nextFloat() * 0.1F - 9.5F); + this.processTicks = 0; + this.compressItems(); + updateInv = true; + } + } else + { + this.processTicks = 0; + } + } else + { + this.processTicks = 0; + } + + if (updateInv) + { + this.markDirty(); + } + } + + this.ticks++; + } + + private boolean canCompress() + { + ItemStack itemstack = this.producingStack; + if (itemstack.isEmpty()) + { + return false; + } + if (this.getInventory().get(1).isEmpty() && this.getInventory().get(2).isEmpty()) + { + return true; + } + if (!this.getInventory().get(1).isEmpty() && !this.getInventory().get(1).isItemEqual(itemstack) || !this.getInventory().get(2).isEmpty() && !this.getInventory().get(2).isItemEqual(itemstack)) + { + return false; + } + int contents1 = this.getInventory().get(1).getCount(); + int contents2 = this.getInventory().get(2).getCount(); + int result = itemstack.getCount(); + if (ConfigManagerCore.quickMode && itemstack.getItem().getTranslationKey(itemstack).contains("compressed")) + { + result += result; + } + result += (contents2 < contents1) ? contents2 : contents1; + return result <= this.getInventoryStackLimit() && result <= itemstack.getMaxStackSize(); + } + + public void updateInput() + { + this.producingStack = CompressorRecipes.findMatchingRecipe(this.compressingCraftMatrix, this.world); + } + + public void compressItems() + { + int stackSize1 = this.getInventory().get(1).isEmpty() ? 0 : this.getInventory().get(1).getCount(); + int stackSize2 = this.getInventory().get(2).isEmpty() ? 0 : this.getInventory().get(2).getCount(); + + if (stackSize1 <= stackSize2) + { + this.compressIntoSlot(1); + this.compressIntoSlot(2); + } else + { + this.compressIntoSlot(2); + this.compressIntoSlot(1); + } + } + + private void compressIntoSlot(int slot) + { + if (this.canCompress()) + { + ItemStack resultItemStack = this.producingStack.copy(); + if (ConfigManagerCore.quickMode) + { + if (resultItemStack.getItem().getTranslationKey(resultItemStack).contains("compressed")) + { + resultItemStack.grow(resultItemStack.getCount()); + } + } + + if (this.getInventory().get(slot).isEmpty()) + { + this.getInventory().set(slot, resultItemStack); + } else if (this.getInventory().get(slot).isItemEqual(resultItemStack)) + { + if (this.getInventory().get(slot).getCount() + resultItemStack.getCount() > resultItemStack.getMaxStackSize()) + { + resultItemStack.grow(this.getInventory().get(slot).getCount() - resultItemStack.getMaxStackSize()); + GCCoreUtil.spawnItem(this.world, this.getPos(), resultItemStack); + this.getInventory().get(slot).setCount(resultItemStack.getMaxStackSize()); + } else + { + this.getInventory().get(slot).grow(resultItemStack.getCount()); + } + } + + for (int i = 0; i < this.compressingCraftMatrix.getSizeInventory(); i++) + { + if (!this.compressingCraftMatrix.getStackInSlot(i).isEmpty() && this.compressingCraftMatrix.getStackInSlot(i).getItem() == Items.WATER_BUCKET) + { + this.compressingCraftMatrix.setInventorySlotContentsNoUpdate(i, new ItemStack(Items.BUCKET)); + } else + { + this.compressingCraftMatrix.decrStackSize(i, 1); + } + } + + this.updateInput(); + } + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.advanced = nbt.getBoolean("adv"); + if (this.advanced) + { + this.processTimeRequiredBase = PROCESS_TIME_REQUIRED_BASE * 3 / 5; + this.processTimeRequired = processTimeRequiredBase; + this.setTierGC(3); + } + this.processTicks = nbt.getInteger("smeltingTicks"); + + this.inventory = NonNullList.withSize(this.getSizeInventory() - this.compressingCraftMatrix.getSizeInventory(), ItemStack.EMPTY); + NBTTagList nbttaglist = nbt.getTagList("Items", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + int j = nbttagcompound.getByte("Slot") & 255; + + if (j >= 0 && j < this.inventory.size()) + { + this.inventory.set(j, new ItemStack(nbttagcompound)); + } else if (j < this.inventory.size() + this.compressingCraftMatrix.getSizeInventory()) + { + this.compressingCraftMatrix.setInventorySlotContents(j - this.inventory.size(), new ItemStack(nbttagcompound)); + } + } + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + this.updateInput(); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("adv", this.advanced); + nbt.setInteger("smeltingTicks", this.processTicks); + NBTTagList items = new NBTTagList(); + int i; + + for (i = 0; i < this.inventory.size(); ++i) + { + if (!this.inventory.get(i).isEmpty()) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte) i); + this.inventory.get(i).writeToNBT(var4); + items.appendTag(var4); + } + } + + for (i = 0; i < this.compressingCraftMatrix.getSizeInventory(); ++i) + { + if (!this.compressingCraftMatrix.getStackInSlot(i).isEmpty()) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte) (i + this.inventory.size())); + this.compressingCraftMatrix.getStackInSlot(i).writeToNBT(var4); + items.appendTag(var4); + } + } + nbt.setTag("Items", items); + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + return nbt; + } + + @Override + public int getSizeInventory() + { + return super.getSizeInventory() + this.compressingCraftMatrix.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + if (par1 >= this.getInventory().size()) + { + return this.compressingCraftMatrix.getStackInSlot(par1 - this.inventory.size()); + } + + return this.inventory.get(par1); + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (par1 >= this.inventory.size()) + { + ItemStack result = this.compressingCraftMatrix.decrStackSize(par1 - this.inventory.size(), par2); + if (!result.isEmpty()) + { + this.updateInput(); + } + this.markDirty(); + return result; + } + + if (!this.inventory.get(par1).isEmpty()) + { + ItemStack var3; + + if (this.inventory.get(par1).getCount() <= par2) + { + var3 = this.inventory.get(par1); + this.inventory.set(par1, ItemStack.EMPTY); + this.markDirty(); + return var3; + } else + { + var3 = this.inventory.get(par1).splitStack(par2); + + if (this.inventory.get(par1).isEmpty()) + { + this.inventory.set(par1, ItemStack.EMPTY); + } + + this.markDirty(); + return var3; + } + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (par1 >= this.inventory.size()) + { + this.markDirty(); + return this.compressingCraftMatrix.removeStackFromSlot(par1 - this.inventory.size()); + } + + if (!this.inventory.get(par1).isEmpty()) + { + ItemStack var2 = this.inventory.get(par1); + this.inventory.set(par1, ItemStack.EMPTY); + this.markDirty(); + return var2; + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public void setInventorySlotContents(int par1, ItemStack stack) + { + if (par1 >= this.inventory.size()) + { + this.compressingCraftMatrix.setInventorySlotContents(par1 - this.inventory.size(), stack); + this.updateInput(); + } else + { + this.inventory.set(par1, stack); + + if (!stack.isEmpty() && stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + } + this.markDirty(); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return this.world.getTileEntity(this.getPos()) == this && entityplayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + +// @Override +// public boolean hasCustomName() +// { +// return true; +// } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (slotID == 0) + { + return itemStack != null && !itemStack.isEmpty() && ItemElectricBase.isElectricItem(itemStack.getItem()); + } else if (slotID >= 3) + { + if (!this.producingStack.isEmpty()) + { + ItemStack stackInSlot = this.getStackInSlot(slotID); + return !stackInSlot.isEmpty() && stackInSlot.isItemEqual(itemStack); + } + return this.isItemCompressorInput(itemStack, slotID - 3); + } + + return false; + } + + public boolean isItemCompressorInput(ItemStack stack, int id) + { + for (IRecipe recipe : CompressorRecipes.getRecipeList()) + { + if (recipe instanceof ShapedRecipesGC) + { + if (id >= ((ShapedRecipesGC) recipe).recipeItems.length) + continue; + ItemStack itemstack1 = ((ShapedRecipesGC) recipe).recipeItems[id]; + if (stack.getItem() == itemstack1.getItem() && (itemstack1.getItemDamage() == 32767 || stack.getItemDamage() == itemstack1.getItemDamage())) + { + for (int i = 0; i < ((ShapedRecipesGC) recipe).recipeItems.length; i++) + { + if (i == id) + continue; + ItemStack itemstack2 = ((ShapedRecipesGC) recipe).recipeItems[i]; + if (stack.getItem() == itemstack2.getItem() && (itemstack2.getItemDamage() == 32767 || stack.getItemDamage() == itemstack2.getItemDamage())) + { + ItemStack is3 = this.getStackInSlot(id + 3); + ItemStack is4 = this.getStackInSlot(i + 3); + return is3.isEmpty() || !is4.isEmpty() && is3.getCount() < is4.getCount(); + } + } + return true; + } + } else if (recipe instanceof ShapelessOreRecipeGC) + { + ArrayList required = new ArrayList(((ShapelessOreRecipeGC) recipe).getInput()); + + Iterator req = required.iterator(); + + int match = 0; + + while (req.hasNext()) + { + Object next = req.next(); + + if (next instanceof ItemStack) + { + if (OreDictionary.itemMatches((ItemStack) next, stack, false)) + match++; + } else if (next instanceof List) + { + Iterator itr = ((List) next).iterator(); + while (itr.hasNext()) + { + if (OreDictionary.itemMatches(itr.next(), stack, false)) + { + match++; + break; + } + } + } + } + + if (match == 0) + continue; + + if (match == 1) + return true; + + // Shapeless recipe can go into (match) number of slots + int slotsFilled = 0; + for (int i = 3; i < 12; i++) + { + ItemStack inMatrix = this.getStackInSlot(i); + if (!inMatrix.isEmpty() && inMatrix.isItemEqual(stack)) + slotsFilled++; + } + if (slotsFilled < match) + { + return this.getStackInSlot(id + 3).isEmpty(); + } + + return randnum.nextInt(match) == 0; + } + } + + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return new int[] + {1, 2}; + } + ArrayList removeSlots = new ArrayList<>(); + ArrayList doneSlots = new ArrayList<>(); + + for (int i = 3; i < 12; i++) + { + if (doneSlots.contains(i)) + { + continue; + } + ItemStack stack1 = this.getStackInSlot(i); + if (stack1.isEmpty()) + { + continue; + } + + int lowestCount = stack1.getCount(); + int lowestSlot = i; + ArrayList slotsWithSameItem = new ArrayList<>(); + for (int j = i + 1; j < 12; j++) + { + if (doneSlots.contains(j)) + { + continue; + } + ItemStack stack2 = this.getStackInSlot(j); + if (stack2.isEmpty()) + { + continue; + } + + if (stack1.isItemEqual(stack2)) + { + slotsWithSameItem.add(j); + if (stack2.getCount() < lowestCount) + { + lowestCount = stack2.getCount(); + lowestSlot = j; + } + } + } + if (!slotsWithSameItem.isEmpty()) + { + if (lowestSlot != i) + removeSlots.add(i); + for (Integer k : slotsWithSameItem) + { + doneSlots.add(k); + if (k.intValue() != lowestSlot) + removeSlots.add(k); + } + } + } + + if (removeSlots.size() > 0) + { + int[] returnSlots = new int[10 - removeSlots.size()]; + returnSlots[0] = 0; + int j = 1; + for (int i = 3; i < 12; i++) + { + if (removeSlots.contains(i)) + { + continue; + } + returnSlots[j++] = i; + } + + return returnSlots; + } + + return allSlots; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 1 || slotID == 2; + } + + @Override + public boolean shouldUseEnergy() + { + return this.processTicks > 0; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return this.advanced ? BlockMachine4.MACHINESIDES_RENDERTYPE : BlockMachine2.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEmergencyBox.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEmergencyBox.java new file mode 100644 index 00000000..6f7f517a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEmergencyBox.java @@ -0,0 +1,673 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.ai.RandomPositionGenerator; +import net.minecraft.entity.monster.IMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.items.ItemHandlerHelper; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ItemEmergencyKit; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class TileEntityEmergencyBox extends TileEntity implements ITickable, IPacketReceiver +{ + + private static final float SPEED = 4F; + public float angleA = 0F; + public float angleB = 0F; + public float angleC = 0F; + public float angleD = 0F; + public float lastAngleA = 0F; + public float lastAngleB = 0F; + public float lastAngleC = 0F; + public float lastAngleD = 0F; + + private boolean openN = false; + private boolean openW = false; + private boolean openS = false; + private boolean openE = false; + private int cooldown = 0; + + private HashSet airToRestore = new HashSet<>(); + private boolean activated = false; + private Vec3d vec3Centre; + private Vec3d thisVec3; + private AxisAlignedBB mobsAABB; + + @Override + public void update() + { + if (!this.activated) + { + this.activated = true; + this.setLightBlocks(); + this.thisVec3 = new Vec3d(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + this.vec3Centre = new Vec3d(this.pos.getX() + 0.5D, this.pos.getY() + 0.5D, this.pos.getZ() + 0.5D); + this.mobsAABB = new AxisAlignedBB(this.pos.getX() - 14, this.pos.getY() - 7, this.pos.getZ() - 14, this.pos.getX() + 14, this.pos.getY() + 7, this.pos.getZ() + 14); + } + + if (this.world.isRemote) + { + if (this.openN && this.angleA < 90F) + { + this.lastAngleA = this.angleA; + this.angleA += SPEED; + if (this.angleA > 90F) + this.angleA = 90F; + } + if (this.openW && this.angleB < 90F) + { + this.lastAngleB = this.angleB; + this.angleB += SPEED; + if (this.angleB > 90F) + this.angleB = 90F; + } + if (this.openS && this.angleC < 90F) + { + this.lastAngleC = this.angleC; + this.angleC += SPEED; + if (this.angleC > 90F) + this.angleC = 90F; + } + if (this.openE && this.angleD < 90F) + { + this.lastAngleD = this.angleD; + this.angleD += SPEED; + if (this.angleD > 90F) + this.angleD = 90F; + } + + if (!this.openN && this.angleA > 0F) + { + this.lastAngleA = this.angleA; + this.angleA -= SPEED; + if (this.angleA < 0F) + this.angleA = 0F; + } + if (!this.openW && this.angleB > 0F) + { + this.lastAngleB = this.angleB; + this.angleB -= SPEED; + if (this.angleB < 0F) + this.angleB = 0F; + } + if (!this.openS && this.angleC > 0F) + { + this.lastAngleC = this.angleC; + this.angleC -= SPEED; + if (this.angleC < 0F) + this.angleC = 0F; + } + if (!this.openE && this.angleD > 0F) + { + this.lastAngleD = this.angleD; + this.angleD -= SPEED; + if (this.angleD < 0F) + this.angleD = 0F; + } + } else + { + if (this.cooldown > 0) + { + this.cooldown--; + } + + boolean updateRequired = false; + if (this.openN) + { + boolean clash = false; + BlockPos testPos = this.pos.north(1); + IBlockState bs = this.world.getBlockState(testPos); + if (!(bs.getBlock() instanceof BlockAir)) + { + if (bs.isFullBlock()) + { + clash = true; + } else + { + AxisAlignedBB check = new AxisAlignedBB(0.125D, 0.125D, 11 / 16D, 0.875D, 0.875D, 1D); + AxisAlignedBB neighbour = bs.getCollisionBoundingBox(this.world, testPos); + if (neighbour != null) + { + clash = check.intersects(neighbour); + } + } + } + if (clash) + { + this.openN = false; + updateRequired = true; + } + } + if (this.openS) + { + boolean clash = false; + BlockPos testPos = this.pos.south(1); + IBlockState bs = this.world.getBlockState(testPos); + if (!(bs.getBlock() instanceof BlockAir)) + { + if (bs.isFullBlock()) + { + clash = true; + } else + { + AxisAlignedBB check = new AxisAlignedBB(0.125D, 0.125D, 0D, 0.875D, 0.875D, 5 / 16D); + AxisAlignedBB neighbour = bs.getCollisionBoundingBox(this.world, testPos); + if (neighbour != null) + { + clash = check.intersects(neighbour); + } + } + } + if (clash) + { + this.openS = false; + updateRequired = true; + } + } + if (this.openW) + { + boolean clash = false; + BlockPos testPos = this.pos.west(1); + IBlockState bs = this.world.getBlockState(testPos); + if (!(bs.getBlock() instanceof BlockAir)) + { + if (bs.isFullBlock()) + { + clash = true; + } else + { + AxisAlignedBB check = new AxisAlignedBB(11 / 16D, 0.125D, 0.125D, 1D, 0.875D, 0.875D); + AxisAlignedBB neighbour = bs.getCollisionBoundingBox(this.world, testPos); + if (neighbour != null) + { + clash = check.intersects(neighbour); + } + } + } + if (clash) + { + this.openW = false; + updateRequired = true; + } + } + if (this.openE) + { + boolean clash = false; + BlockPos testPos = this.pos.east(1); + IBlockState bs = this.world.getBlockState(testPos); + if (!(bs.getBlock() instanceof BlockAir)) + { + if (bs.isFullBlock()) + { + clash = true; + } else + { + AxisAlignedBB check = new AxisAlignedBB(0D, 0.125D, 0.125D, 5 / 16D, 0.875D, 0.875D); + AxisAlignedBB neighbour = bs.getCollisionBoundingBox(this.world, testPos); + if (neighbour != null) + { + clash = check.intersects(neighbour); + } + } + } + if (clash) + { + this.openE = false; + updateRequired = true; + } + } + + if (updateRequired) + { + this.updateClients(); + } + + if (this.world.rand.nextInt(15) == 0) + { + this.scareMobs(); + } + } + } + + private void scareMobs() + { + List moblist = this.world.getEntitiesInAABBexcluding(null, mobsAABB, IMob.MOB_SELECTOR); + if (!moblist.isEmpty()) + { + for (Entity entry : moblist) + { + if (!(entry instanceof EntityCreature && entry instanceof IEntityBreathable)) + { + continue; + } + EntityCreature mob = (EntityCreature) entry; + PathNavigate nav = mob.getNavigator(); + if (nav == null) + { + continue; + } + + Vec3d vecNewTarget = RandomPositionGenerator.findRandomTargetBlockAwayFrom(mob, 12, 5, vec3Centre); + if (vecNewTarget == null) + { + vecNewTarget = RandomPositionGenerator.findRandomTargetBlockAwayFrom(mob, 14, 7, vec3Centre); + if (vecNewTarget == null) + continue; + } + double distanceNew = vecNewTarget.squareDistanceTo(thisVec3); + double distanceCurrent = thisVec3.squareDistanceTo(new Vec3d(mob.posX, mob.posY, mob.posZ)); + if (distanceNew > distanceCurrent) + { + Vec3d vecOldTarget = null; + if (nav.getPath() != null && !nav.getPath().isFinished()) + { + vecOldTarget = nav.getPath().getPosition(mob); + } + if (vecOldTarget == null || distanceCurrent > vecOldTarget.squareDistanceTo(thisVec3)) + { + nav.tryMoveToXYZ(vecNewTarget.x, vecNewTarget.y, vecNewTarget.z, 1.1D); + } + } + } + } + } + + public float getAngleA(float f) + { + float result = this.angleA + (this.angleA - this.lastAngleA) * f; + if (result > 90F) + result = 90F; + if (result < 0F) + result = 0F; + return result; + } + + public float getAngleB(float f) + { + float result = this.angleB + (this.angleB - this.lastAngleB) * f; + if (result > 90F) + result = 90F; + if (result < 0F) + result = 0F; + return result; + } + + public float getAngleC(float f) + { + float result = this.angleC + (this.angleC - this.lastAngleC) * f; + if (result > 90F) + result = 90F; + if (result < 0F) + result = 0F; + return result; + } + + public float getAngleD(float f) + { + float result = this.angleD + (this.angleD - this.lastAngleD) * f; + if (result > 90F) + result = 90F; + if (result < 0F) + result = 0F; + return result; + } + + public void click(EntityPlayer player, EnumFacing side, boolean kitted) + { + switch (side) + { + case NORTH: + if (this.openN && this.cooldown == 0) + { + if (kitted) + { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(GCItems.emergencyKit), 0); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getDefaultState(), 3); + break; + } else + { + ItemStack stack = player.inventory.getCurrentItem(); + if (!stack.isEmpty() && stack.getItem() instanceof ItemEmergencyKit) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getStateFromMeta(1), 3); + this.openW = false; + this.openS = false; + this.openE = false; + } + } + } + this.cooldown = 12; + this.openN = !this.openN; + this.updateClients(); + break; + case WEST: + if (this.openW && this.cooldown == 0) + { + if (kitted) + { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(GCItems.emergencyKit), 0); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getDefaultState(), 3); + break; + } else + { + ItemStack stack = player.inventory.getCurrentItem(); + if (!stack.isEmpty() && stack.getItem() instanceof ItemEmergencyKit) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getStateFromMeta(1), 3); + this.openN = false; + this.openS = false; + this.openE = false; + } + } + } + this.cooldown = 12; + this.openW = !this.openW; + this.updateClients(); + break; + case SOUTH: + if (this.openS && this.cooldown == 0) + { + if (kitted) + { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(GCItems.emergencyKit), 0); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getDefaultState(), 3); + break; + } else + { + ItemStack stack = player.inventory.getCurrentItem(); + if (!stack.isEmpty() && stack.getItem() instanceof ItemEmergencyKit) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getStateFromMeta(1), 3); + this.openN = false; + this.openW = false; + this.openE = false; + } + } + } + this.cooldown = 12; + this.openS = !this.openS; + this.updateClients(); + break; + case EAST: + if (this.openE && this.cooldown == 0) + { + if (kitted) + { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(GCItems.emergencyKit), 0); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getDefaultState(), 3); + break; + } else + { + ItemStack stack = player.inventory.getCurrentItem(); + if (!stack.isEmpty() && stack.getItem() instanceof ItemEmergencyKit) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getStateFromMeta(1), 3); + this.openN = false; + this.openW = false; + this.openS = false; + } + } + } + this.cooldown = 12; + this.openE = !this.openE; + this.updateClients(); + break; + default: + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + int data = nbt.getInteger("open"); + this.openN = (data & 1) == 1; + this.openW = (data & 2) == 2; + this.openS = (data & 4) == 4; + this.openE = (data & 8) == 8; + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.airToRestore.clear(); + NBTTagList airBlocks = nbt.getTagList("air", 10); + if (airBlocks.tagCount() > 0) + { + for (int j = airBlocks.tagCount() - 1; j >= 0; j--) + { + NBTTagCompound tag1 = airBlocks.getCompoundTagAt(j); + if (tag1 != null) + { + this.airToRestore.add(BlockVec3.readFromNBT(tag1)); + } + } + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + int data = (this.openN ? 1 : 0) + (this.openW ? 2 : 0) + (this.openS ? 4 : 0) + (this.openE ? 8 : 0); + nbt.setInteger("open", data); + + NBTTagList airBlocks = new NBTTagList(); + for (BlockVec3 vec : this.airToRestore) + { + NBTTagCompound tag = new NBTTagCompound(); + vec.writeToNBT(tag); + airBlocks.appendTag(tag); + } + nbt.setTag("air", airBlocks); + return nbt; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.world.isRemote) + { + return; + } + + int data = (this.openN ? 1 : 0) + (this.openW ? 2 : 0) + (this.openS ? 4 : 0) + (this.openE ? 8 : 0); + sendData.add((byte) data); + for (BlockVec3 vec : this.airToRestore) + { + sendData.add(vec); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world.isRemote) + { + try + { + int data = buffer.readByte(); + this.openN = (data & 1) == 1; + this.openW = (data & 2) == 2; + this.openS = (data & 4) == 4; + this.openE = (data & 8) == 8; + while (buffer.readableBytes() >= 12) + { + int x = buffer.readInt(); + int y = buffer.readInt(); + int z = buffer.readInt(); + this.airToRestore.add(new BlockVec3(x, y, z)); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request any networked information from server on first client + // update + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + private void updateClients() + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketDynamic(this), + new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), getPos().getX(), getPos().getY(), getPos().getZ(), 128)); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) + { + return oldState.getBlock() != newState.getBlock(); + } + + private void brightenAir(BlockPos blockpos, IBlockState newState) + { + Chunk chunk = this.world.getChunk(blockpos); + IBlockState oldState = chunk.setBlockState(blockpos, newState); + if (this.world.isRemote && oldState != null) + { + this.world.markAndNotifyBlock(blockpos, chunk, oldState, newState, 2); + } + // No block update on server - not necessary for changing air to air + // (also must not trigger a sealer edge check!) + this.airToRestore.add(new BlockVec3(blockpos)); + this.world.checkLightFor(EnumSkyBlock.BLOCK, blockpos); + this.markDirty(); + } + + private void setDarkerAir(BlockVec3 vec) + { + BlockPos blockpos = vec.toBlockPos(); + Block b = this.world.getBlockState(blockpos).getBlock(); + IBlockState newState; + if (b == GCBlocks.brightAir) + { + newState = Blocks.AIR.getDefaultState(); + } else if (b == GCBlocks.brightBreatheableAir) + { + newState = GCBlocks.breatheableAir.getDefaultState(); + } else + { + return; + } + + Chunk chunk = this.world.getChunk(blockpos); + IBlockState oldState = chunk.setBlockState(blockpos, newState); + if (this.world.isRemote && oldState != null) + this.world.markAndNotifyBlock(blockpos, chunk, oldState, newState, 2); + this.world.checkLightFor(EnumSkyBlock.BLOCK, blockpos); + } + + private void revertAir() + { + if (this.airToRestore.isEmpty()) + return; + + int index = 0; + for (BlockVec3 vec : this.airToRestore) + { + this.setDarkerAir(vec); + } + this.airToRestore.clear(); + this.markDirty(); + } + + @Override + public void invalidate() + { + this.revertAir(); + super.invalidate(); + } + + private void setLightBlocks() + { + this.setLightBlock(new BlockPos(this.pos.getX() - 6, this.pos.getY(), this.pos.getZ())); + this.setLightBlock(new BlockPos(this.pos.getX() + 6, this.pos.getY(), this.pos.getZ())); + this.setLightBlock(new BlockPos(this.pos.getX(), this.pos.getY(), this.pos.getZ() - 6)); + this.setLightBlock(new BlockPos(this.pos.getX(), this.pos.getY(), this.pos.getZ() + 6)); + this.setLightBlock(new BlockPos(this.pos.getX() - 5, this.pos.getY(), this.pos.getZ() - 5)); + this.setLightBlock(new BlockPos(this.pos.getX() - 5, this.pos.getY(), this.pos.getZ() + 5)); + this.setLightBlock(new BlockPos(this.pos.getX() + 5, this.pos.getY(), this.pos.getZ() + 5)); + this.setLightBlock(new BlockPos(this.pos.getX() + 5, this.pos.getY(), this.pos.getZ() - 5)); + } + + private boolean setLightBlock(BlockPos blockPos) + { + IBlockState bs = this.world.getBlockState(blockPos); + if (bs.getBlock() == Blocks.AIR) + { + this.brightenAir(blockPos, GCBlocks.brightAir.getDefaultState()); + return true; + } else if (bs.getBlock() == GCBlocks.breatheableAir) + { + this.brightenAir(blockPos, GCBlocks.brightBreatheableAir.getDefaultState()); + return true; + } + + blockPos = blockPos.up(1); + bs = this.world.getBlockState(blockPos); + if (bs.getBlock() == Blocks.AIR) + { + this.brightenAir(blockPos, GCBlocks.brightAir.getDefaultState()); + return true; + } else if (bs.getBlock() == GCBlocks.breatheableAir) + { + this.brightenAir(blockPos, GCBlocks.brightBreatheableAir.getDefaultState()); + return true; + } + + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEnergyStorageModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEnergyStorageModule.java new file mode 100644 index 00000000..356b2e60 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEnergyStorageModule.java @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.IItemElectricBase; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineTiered; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; + +public class TileEntityEnergyStorageModule extends TileBaseUniversalElectricalSource implements ISidedInventory, IInventoryDefaults, IConnector, IMachineSides +{ + + private final static float BASE_CAPACITY = 500000; + private final static float TIER2_CAPACITY = 2500000; + + public final Set playersUsing = new HashSet(); + public int scaledEnergyLevel; + public int lastScaledEnergyLevel; + private float lastEnergy = 0; + + private boolean initialised = false; + + public TileEntityEnergyStorageModule() + { + this(1); + } + + /* + * @param tier: 1 = Electric Furnace 2 = Electric Arc Furnace + */ + public TileEntityEnergyStorageModule(int tier) + { + super(tier == 1 ? "tile.machine.1.name" : "tile.machine.8.name"); + this.initialised = true; + this.inventory = NonNullList.withSize(2, ItemStack.EMPTY); + if (tier == 1) + { + // Designed so that Tier 1 Energy Storage can power up to 10 Tier 1 + // machines + this.storage.setCapacity(BASE_CAPACITY); + this.storage.setMaxExtract(300); + return; + } + + this.setTier2(); + } + + private void setTier2() + { + this.storage.setCapacity(TIER2_CAPACITY); + this.storage.setMaxExtract(1800); + this.setTierGC(2); + } + + @Override + public void update() + { + if (!this.initialised) + { + int metadata = this.getBlockMetadata(); + + // for version update compatibility + Block b = this.world.getBlockState(this.getPos()).getBlock(); + if (b == GCBlocks.machineBase) + { + this.world.setBlockState(this.getPos(), GCBlocks.machineTiered.getDefaultState(), 2); + } else if (metadata >= 8) + { + this.setTier2(); + } + this.initialised = true; + } + + float energy = this.storage.getEnergyStoredGC(); + if (this.getTierGC() == 1 && !this.world.isRemote) + { + if (this.lastEnergy - energy > this.storage.getMaxExtract() - 1) + { + // Deplete faster if being drained at maximum output + this.storage.extractEnergyGC(25, false); + } + } + this.lastEnergy = energy; + + super.update(); + + this.scaledEnergyLevel = (int) Math.floor((this.getEnergyStoredGC() + 49) * 16 / this.getMaxEnergyStoredGC()); + + if (this.scaledEnergyLevel != this.lastScaledEnergyLevel) + { + this.world.notifyLightSet(this.getPos()); + } + + if (!this.world.isRemote) + { + this.recharge(this.getInventory().get(0)); + this.discharge(this.getInventory().get(1)); + } + + if (!this.world.isRemote) + { + this.produce(); + } + + this.lastScaledEnergyLevel = this.scaledEnergyLevel; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (this.storage.getEnergyStoredGC() > BASE_CAPACITY) + { + this.setTier2(); + this.initialised = true; + } else + { + this.initialised = false; + } + + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + if (this.tierGC == 1 && this.storage.getEnergyStoredGC() > BASE_CAPACITY) + { + this.storage.setEnergyStored(BASE_CAPACITY); + } + + super.writeToNBT(nbt); + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + + return nbt; + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } + +// @Override +// public int[] getAccessibleSlotsFromSide(int slotID) +// { +// return new int[] { 0, 1 }; +// } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (itemstack.getItem() instanceof IItemElectricBase) + { + if (slotID == 0) + { + return ((IItemElectricBase) itemstack.getItem()).getTransfer(itemstack) > 0; + } else if (slotID == 1) + { + return ((IItemElectricBase) itemstack.getItem()).getElectricityStored(itemstack) > 0; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (itemstack.getItem() instanceof IItemElectricBase) + { + if (slotID == 0) + { + return ((IItemElectricBase) itemstack.getItem()).getTransfer(itemstack) <= 0; + } else if (slotID == 1) + { + return ((IItemElectricBase) itemstack.getItem()).getElectricityStored(itemstack) <= 0 || this.getEnergyStoredGC() >= this.getMaxEnergyStoredGC(); + } + } + + return false; + + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.of(getElectricInputDirection()); + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(getElectricOutputDirection()); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + + return getElectricalInputDirections().contains(direction) || getElectricalOutputDirections().contains(direction); + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case LEFT: + return byIndex().rotateY(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case RIGHT: + default: + return byIndex().rotateYCCW(); + } + } + + @Override + public EnumFacing getElectricOutputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_OUT)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN, MachineSide.ELECTRIC_OUT}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.RIGHT, Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachineTiered.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFallenMeteor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFallenMeteor.java new file mode 100644 index 00000000..d7900c43 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFallenMeteor.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.List; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import io.netty.buffer.ByteBuf; + +public class TileEntityFallenMeteor extends TileEntityAdvanced +{ + + public static final int MAX_HEAT_LEVEL = 5000; + @NetworkedField(targetSide = Side.CLIENT) public int heatLevel = TileEntityFallenMeteor.MAX_HEAT_LEVEL; + private boolean sentOnePacket = false; + + public TileEntityFallenMeteor() + { + super("tile.fallenmeteor.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote && this.heatLevel > 0) + { + this.heatLevel--; + } + } + + public int getHeatLevel() + { + return this.heatLevel; + } + + public void setHeatLevel(int heatLevel) + { + this.heatLevel = heatLevel; + } + + public float getScaledHeatLevel() + { + return (float) this.heatLevel / TileEntityFallenMeteor.MAX_HEAT_LEVEL; + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + if (this.world.isRemote) + { + this.world.notifyLightSet(this.getPos()); + } + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + this.sentOnePacket = true; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.heatLevel = nbt.getInteger("MeteorHeatLevel"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("MeteorHeatLevel", this.heatLevel); + return nbt; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public double getPacketRange() + { + return 50; + } + + @Override + public int getPacketCooldown() + { + return this.sentOnePacket ? 100 : 1; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidPipe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidPipe.java new file mode 100644 index 00000000..28a15361 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidPipe.java @@ -0,0 +1,425 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.tile.IColorable; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidPipe; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; + +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.common.capabilities.Capabilities; + +@Interface(iface = "mekanism.api.gas.IGasHandler", modid = "mekanism") +public class TileEntityFluidPipe extends TileEntityFluidTransmitter implements IColorable, IGasHandler +{ + + public FluidTankGC buffer = new FluidTankGC(1000, this); + private boolean dataRequest = false; + private AxisAlignedBB renderAABB; + + public TileEntityFluidPipe() + { + super("tile.fluid_pipe.name", 100); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) + { + // Do not re-create tile entity if only the pipe's color changed! + if (oldState != newState) + { + return oldState.getBlock() != newState.getBlock(); + } + + return super.shouldRefresh(world, pos, oldState, newState); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + TileEntity adjacentTile = new BlockVec3(this).getTileEntityOnSide(this.world, direction); + + if (type == NetworkType.FLUID) + { + if (adjacentTile instanceof IColorable) + { + IBlockState state = this.world.getBlockState(this.getPos()); + IBlockState adjacentTileState = adjacentTile.getWorld().getBlockState(adjacentTile.getPos()); + byte thisCol = this.getColor(state); + byte otherCol = ((IColorable) adjacentTile).getColor(adjacentTileState); + return thisCol == otherCol || thisCol == EnumDyeColor.WHITE.getDyeDamage() || otherCol == EnumDyeColor.WHITE.getDyeDamage(); + } + + return true; + } + + return false; + } + + @Override + public double getPacketRange() + { + return 12.0D; + } + + @Override + public int getPacketCooldown() + { + return 5; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + this.world.notifyLightSet(getPos()); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_DATA, GCCoreUtil.getDimensionID(this.world), new Object[] {GCCoreUtil.getDimensionID(this.world), this.getPos()})); + } + } + + @Override + public void onColorUpdate() + { + if (this.world != null) + { + if (this.world.isRemote) + { + this.world.notifyLightSet(getPos()); + } else + { + this.getNetwork().split(this); + this.resetNetwork(); + } + } + } + + @Override + public byte getColor(IBlockState state) + { + if (state.getBlock() instanceof BlockFluidPipe) + { + return (byte) state.getValue(BlockFluidPipe.COLOR).getDyeDamage(); + } + return 15; + } + + @Override + public void onAdjacentColorChanged(EnumFacing direction) + { + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + + if (!this.world.isRemote) + { + this.refresh(); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) + { + super.writeToNBT(tagCompound); + if (this.buffer.getFluid() != null) + { + tagCompound.setTag("buff", this.buffer.writeToNBT(new NBTTagCompound())); + } + return tagCompound; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) + { + super.readFromNBT(tagCompound); + + if (tagCompound.hasKey("pipeColor")) + { + // Backwards compatibility + this.world.setBlockState(getPos(), this.world.getBlockState(getPos()).withProperty(BlockFluidPipe.COLOR, EnumDyeColor.byDyeDamage(tagCompound.getByte("pipeColor")))); + } + + if (tagCompound.hasKey("buff")) + { + this.buffer.readFromNBT(tagCompound.getCompoundTag("buff")); + } + } + + @Override + public FluidStack getBuffer() + { + return buffer.getFluid() == null ? null : buffer.getFluid(); + } + + @Override + public int getCapacity() + { + return 200; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + IGridNetwork network = this.getNetwork(); + if (network instanceof FluidNetwork) + { + FluidNetwork fluidNetwork = (FluidNetwork) network; + return fluidNetwork.emitToBuffer(resource, doFill); + } else + { + return this.buffer.fill(resource, doFill); + } + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + return true; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + return new FluidTankInfo[0]; + } + + public boolean switchType() + { + if (this.ticks < 10) + { + return false; + } + + Block block; + Block currentType = this.getBlockType(); + + if (!(currentType instanceof BlockFluidPipe)) + { + return false; + } + + switch (((BlockFluidPipe) currentType).getMode()) + { + case NORMAL: + block = GCBlocks.oxygenPipePull; + break; + default: + block = GCBlocks.oxygenPipe; + break; + } + + BlockFluidPipe.ignoreDrop = true; + this.world.setBlockState(pos, block.getStateFromMeta(currentType.getMetaFromState(this.world.getBlockState(pos)))); + BlockFluidPipe.ignoreDrop = false; + if (this.hasNetwork()) + { + this.refresh(); + this.getNetwork().refresh(); + } + + return true; + } + + @Override + public boolean canTransmit() + { + Block currentType = this.getBlockType(); + + if (!(currentType instanceof BlockFluidPipe)) + { + // Walkway blocks, etc + return true; + } + + return ((BlockFluidPipe) currentType).getMode() != BlockFluidPipe.EnumPipeMode.PULL; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 16384; // 128 squared + } + + @Override + @Optional.Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + String mekGas = stack.getGas().getName(); + if (mekGas == null) + { + return 0; + } + FluidStack mekEquivalent = null; + if (mekGas.equals("oxygen")) + { + mekEquivalent = new FluidStack(GCFluids.fluidOxygenGas, stack.amount); + } else if (mekGas.equals("hydrogen")) + { + mekEquivalent = new FluidStack(GCFluids.fluidHydrogenGas, stack.amount); + } else + { + return 0; + } + return this.fill(side, mekEquivalent, doTransfer); + } + + @Override + @Optional.Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Override + @Optional.Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return null; + } + + @Override + @Optional.Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount) + { + return null; + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return type.getName().equals("oxygen") || type.getName().equals("hydrogen"); + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing side, Gas type) + { + return false; + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing side) + { + return false; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (EnergyUtil.checkMekGasHandler(capability)) + return true; + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (EnergyUtil.checkMekGasHandler(capability)) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + + return super.getCapability(capability, facing); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTank.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTank.java new file mode 100644 index 00000000..c6086b1f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTank.java @@ -0,0 +1,444 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidEvent; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.DelayTimer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledBlockChange; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +public class TileEntityFluidTank extends TileEntityAdvanced implements IFluidHandlerWrapper +{ + + public FluidTankGC fluidTank = new FluidTankGC(16000, this); + public boolean updateClient = false; + private DelayTimer delayTimer = new DelayTimer(1); + private AxisAlignedBB renderAABB; + + public TileEntityFluidTank() + { + super("tile.fluid_tank.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + public void onBreak() + { + if (fluidTank.getFluidAmount() > 0) + { + FluidEvent.fireEvent(new FluidEvent.FluidSpilledEvent(fluidTank.getFluid(), world, pos)); + if (!this.world.isRemote && fluidTank.getFluidAmount() > 1000) + { + Block b = fluidTank.getFluid().getFluid().getBlock(); + if (!(b == null || b instanceof BlockAir)) + { + TickHandlerServer.scheduleNewBlockChange(GCCoreUtil.getDimensionID(this.world), new ScheduledBlockChange(pos, b.getStateFromMeta(0), 3)); + } + } + } + } + + @Override + public void update() + { + super.update(); + + if (fluidTank.getFluid() != null) + { + moveFluidDown(); + } + + if (!this.world.isRemote && updateClient && delayTimer.markTimeIfDelay(this.world)) + { + PacketDynamic packet = new PacketDynamic(this); + GalacticraftCore.packetPipeline.sendToAllAround(packet, + new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), getPos().getX(), getPos().getY(), getPos().getZ(), this.getPacketRange())); + this.updateClient = false; + } + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + if (resource == null) + { + return 0; + } + + FluidStack copy = resource.copy(); + int totalUsed = 0; + TileEntityFluidTank toFill = getLastTank(); + + FluidStack fluid = toFill.fluidTank.getFluid(); + if (fluid != null && fluid.amount > 0 && !fluid.isFluidEqual(copy)) + { + return 0; + } + + while (toFill != null && copy.amount > 0) + { + int used = toFill.fluidTank.fill(copy, doFill); + if (used > 0) + { + toFill.updateClient = true; + } + copy.amount -= used; + totalUsed += used; + toFill = getNextTank(toFill.getPos()); + } + + return totalUsed; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + if (resource == null) + { + return null; + } + TileEntityFluidTank last = getLastTank(); + if (!resource.isFluidEqual(last.fluidTank.getFluid())) + { + return null; + } + return drain(from, resource.amount, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + TileEntityFluidTank last = getLastTank(); + FluidStack stack = last.fluidTank.drain(maxDrain, doDrain); + if (doDrain && stack != null && stack.amount > 0) + { + last.updateClient = true; + } + return stack; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + return fluidTank.getFluid() == null || fluidTank.getFluid().getFluid() == null || fluid == null || fluidTank.getFluid().getFluid() == fluid; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return fluid == null || fluidTank.getFluid() != null && fluidTank.getFluid().getFluid() == fluid; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTank compositeTank = new FluidTank(fluidTank.getCapacity()); + TileEntityFluidTank last = getLastTank(); + + if (last != null && last.fluidTank.getFluid() != null) + { + compositeTank.setFluid(last.fluidTank.getFluid().copy()); + } else + { + return new FluidTankInfo[] + {compositeTank.getInfo()}; + } + + int capacity = last.fluidTank.getCapacity(); + last = getNextTank(last.getPos()); + + while (last != null) + { + FluidStack fluid = last.fluidTank.getFluid(); + if (fluid == null || fluid.amount == 0) + { + + } else if (!compositeTank.getFluid().isFluidEqual(fluid)) + { + break; + } else + { + compositeTank.getFluid().amount += fluid.amount; + } + + capacity += last.fluidTank.getCapacity(); + last = getNextTank(last.getPos()); + } + + compositeTank.setCapacity(capacity); + return new FluidTankInfo[] + {compositeTank.getInfo()}; + } + + public void moveFluidDown() + { + TileEntityFluidTank next = getPreviousTank(this.getPos()); + if (next != null) + { + int used = next.fluidTank.fill(fluidTank.getFluid(), true); + + if (used > 0) + { + this.updateClient = true; + next.updateClient = true; + fluidTank.drain(used, true); + } + } + } + + public TileEntityFluidTank getLastTank() + { + TileEntityFluidTank lastTank = this; + + while (true) + { + TileEntityFluidTank tank = getPreviousTank(lastTank.getPos()); + if (tank != null) + { + lastTank = tank; + } else + { + break; + } + } + + return lastTank; + } + + public TileEntityFluidTank getNextTank(BlockPos current) + { + TileEntity above = this.world.getTileEntity(current.up()); + if (above instanceof TileEntityFluidTank) + { + return (TileEntityFluidTank) above; + } + return null; + } + + public TileEntityFluidTank getPreviousTank(BlockPos current) + { + TileEntity below = this.world.getTileEntity(current.down()); + if (below instanceof TileEntityFluidTank) + { + return (TileEntityFluidTank) below; + } + return null; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if (nbt.hasKey("fluidTank")) + { + fluidTank.readFromNBT(nbt.getCompoundTag("fluidTank")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + if (fluidTank.getFluid() != null) { + nbt.setTag("fluidTank", fluidTank.writeToNBT(new NBTTagCompound())); + } + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public SPacketUpdateTileEntity getUpdatePacket() + { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("net-type", "desc-packet"); + PacketDynamic packet = new PacketDynamic(this); + ByteBuf buf = Unpooled.buffer(); + packet.encodeInto(buf); + byte[] bytes = new byte[buf.readableBytes()]; + buf.readBytes(bytes); + nbt.setByteArray("net-data", bytes); + SPacketUpdateTileEntity tileUpdate = new SPacketUpdateTileEntity(getPos(), 0, nbt); + return tileUpdate; + } + + @Override + @SideOnly(Side.CLIENT) + public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) + { + if (!this.world.isRemote) + { + return; + } + if (pkt.getNbtCompound() == null) + { + throw new RuntimeException("[GC] Missing NBTTag compound!"); + } + NBTTagCompound nbt = pkt.getNbtCompound(); + try + { + if ("desc-packet".equals(nbt.getString("net-type"))) + { + byte[] bytes = nbt.getByteArray("net-data"); + ByteBuf data = Unpooled.wrappedBuffer(bytes); + PacketDynamic packet = new PacketDynamic(); + packet.decodeInto(data); + packet.handleClientSide(FMLClientHandler.instance().getClientPlayerEntity()); + } + } catch (Throwable t) + { + throw new RuntimeException("[GC] Failed to read a packet! (" + nbt.getTag("net-type") + ", " + nbt.getTag("net-data"), t); + } + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + if (!this.world.isRemote) + { + if (fluidTank == null) + { + networkedList.add(0); + networkedList.add(""); + networkedList.add(0); + } else + { + networkedList.add(fluidTank.getCapacity()); + networkedList.add(fluidTank.getFluid() == null ? "" : fluidTank.getFluid().getFluid().getName()); + networkedList.add(fluidTank.getFluidAmount()); + } + } + } + + @Override + public void readExtraNetworkedData(ByteBuf buffer) + { + if (this.world.isRemote) + { + int capacity = buffer.readInt(); + String fluidName = ByteBufUtils.readUTF8String(buffer); + FluidTankGC fluidTank = new FluidTankGC(capacity, this); + int amount = buffer.readInt(); + + if (fluidName.equals("")) + { + fluidTank.setFluid(null); + } else + { + Fluid fluid = FluidRegistry.getFluid(fluidName); + fluidTank.setFluid(new FluidStack(fluid, amount)); + } + + this.fluidTank = fluidTank; + } + } + + @Override + public double getPacketRange() + { + return 40; + } + + @Override + public int getPacketCooldown() + { + return 1; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } + + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTransmitter.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTransmitter.java new file mode 100644 index 00000000..5c14afbd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTransmitter.java @@ -0,0 +1,329 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.grid.IOxygenNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidPipe; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; + +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; + +public abstract class TileEntityFluidTransmitter extends TileEntityAdvanced implements IBufferTransmitter, IFluidHandlerWrapper +{ + + private IGridNetwork network; + public TileEntity[] adjacentConnections = null; + private int pullAmount; + private boolean validated = true; + + public TileEntityFluidTransmitter(String tileName, int pullAmount) + { + super(tileName); + this.pullAmount = pullAmount; + } + + @Override + public void validate() + { + this.validated = false; + super.validate(); + } + + @Override + public void invalidate() + { + if (!BlockFluidPipe.ignoreDrop) + { + this.getNetwork().split(this); + } + + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + super.invalidate(); + super.onChunkUnload(); + } + + @Override + public IGridNetwork getNetwork() + { + if (this.network == null) + { + this.resetNetwork(); + } + + return this.network; + } + + @Override + public boolean hasNetwork() + { + return this.network != null; + } + + @Override + public void onNetworkChanged() + { + this.world.markBlockRangeForRenderUpdate(this.getPos(), this.getPos()); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + if (!this.validated) + { + TickHandlerServer.oxygenTransmitterUpdates.add(this); + this.validated = true; + } + + Block blockType = this.getBlockType(); + if (blockType instanceof BlockFluidPipe && ((BlockFluidPipe) blockType).getMode() == BlockFluidPipe.EnumPipeMode.PULL) + { + TileEntity[] tiles = OxygenUtil.getAdjacentFluidConnections(this); + + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity sideTile = tiles[side.ordinal()]; + + if (sideTile != null && !(sideTile instanceof IBufferTransmitter)) + { + IFluidHandler handler = sideTile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side.getOpposite()); + + if (handler != null) + { + FluidStack received = handler.drain(this.pullAmount, false); + + if (received != null && received.amount != 0) + { + handler.drain(this.fill(EnumFacing.DOWN, received, true), true); + } + } + } + } + } + } + + super.update(); + } + + protected void resetNetwork() + { + FluidNetwork network = new FluidNetwork(); + network.addTransmitter(this); + network.register(); + this.setNetwork(network); + } + + @Override + public void setNetwork(IGridNetwork network) + { + if (this.network == network) + { + return; + } + + if (this.world.isRemote && this.network != null) + { + FluidNetwork fluidNetwork = (FluidNetwork) this.network; + fluidNetwork.removeTransmitter(this); + + if (fluidNetwork.getTransmitters().isEmpty()) + { + fluidNetwork.unregister(); + } + } + + this.network = network; + + if (this.world.isRemote && this.network != null) + { + ((FluidNetwork) this.network).pipes.add(this); + } + } + + @Override + public void refresh() + { + if (!this.world.isRemote) + { + this.adjacentConnections = null; + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity != null) + { + if (tileEntity.getClass() == this.getClass() && tileEntity instanceof INetworkProvider && ((INetworkProvider) tileEntity).hasNetwork()) + { + if (!(tileEntity instanceof ITransmitter) || (((ITransmitter) tileEntity).canConnect(side.getOpposite(), ((ITransmitter) tileEntity).getNetworkType()))) + { + if (!this.hasNetwork()) + { + this.setNetwork(((INetworkProvider) tileEntity).getNetwork()); + ((FluidNetwork) this.getNetwork()).addTransmitter(this); + ((FluidNetwork) this.getNetwork()).onTransmitterAdded(this); + } else if (this.hasNetwork() && !this.getNetwork().equals(((INetworkProvider) tileEntity).getNetwork())) + { + this.setNetwork((IGridNetwork) this.getNetwork().merge(((INetworkProvider) tileEntity).getNetwork())); + } + } + } + } + } + + this.getNetwork().refresh(); + } + } + + @Override + public TileEntity[] getAdjacentConnections() + { + /** + * Cache the adjacentConnections. + */ + if (this.adjacentConnections == null) + { + this.adjacentConnections = OxygenUtil.getAdjacentFluidConnections(this, this.world.isRemote); + } + + return this.adjacentConnections; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.FLUID; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getPos().getX() + 1, this.getPos().getY() + 1, this.getPos().getZ() + 1); + } + + @Override + public NetworkType getNetworkType() + { + return NetworkType.FLUID; + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + if (!stack.getGas().getName().equals("oxygen")) + { + return 0; + } + return stack.amount - (int) Math.floor(((IOxygenNetwork) this.getNetwork()).produce(stack.amount, this)); + } + + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return null; + } + + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount) + { + return null; + } + + @Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing side, Gas type) + { + return false; + } + + @Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return type.getName().equals("oxygen"); + } + + @Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing side) + { + return this.canConnect(side, NetworkType.FLUID); + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFuelLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFuelLoader.java new file mode 100644 index 00000000..5a34886c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFuelLoader.java @@ -0,0 +1,406 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import javax.annotation.Nullable; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.IFuelable; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockFuelLoader; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; + +public class TileEntityFuelLoader extends TileBaseElectricBlockWithInventory implements ISidedInventory, IFluidHandlerWrapper, ILandingPadAttachable, IMachineSides +{ + + private final int tankCapacity = 12000; + @NetworkedField(targetSide = Side.CLIENT) public FluidTank fuelTank = new FluidTank(this.tankCapacity); + public IFuelable attachedFuelable; + private boolean loadedFuelLastTick = false; + + public TileEntityFuelLoader() + { + super("container.fuelloader.name"); + this.storage.setMaxExtract(30); + this.inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + public int getScaledFuelLevel(int i) + { + final double fuelLevel = this.fuelTank.getFluid() == null ? 0 : this.fuelTank.getFluid().amount; + + return (int) (fuelLevel * i / this.tankCapacity); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + this.loadedFuelLastTick = false; + + final FluidStack liquidContained = FluidUtil.getFluidContained(this.getInventory().get(1)); + if (FluidUtil.isFuel(liquidContained)) + { + FluidUtil.loadFromContainer(this.fuelTank, GCFluids.fluidFuel, this.getInventory(), 1, liquidContained.amount); + } + + if (this.ticks % 100 == 0) + { + this.attachedFuelable = null; + + BlockVec3 thisVec = new BlockVec3(this); + for (final EnumFacing dir : EnumFacing.VALUES) + { + final TileEntity pad = thisVec.getTileEntityOnSide(this.world, dir); + + if (pad instanceof TileEntityMulti) + { + final TileEntity mainTile = ((TileEntityMulti) pad).getMainBlockTile(); + + if (mainTile instanceof IFuelable) + { + this.attachedFuelable = (IFuelable) mainTile; + break; + } + } else if (pad instanceof IFuelable) + { + this.attachedFuelable = (IFuelable) pad; + break; + } + } + + } + + if (this.fuelTank != null && this.fuelTank.getFluid() != null && this.fuelTank.getFluid().amount > 0) + { + final FluidStack liquid = new FluidStack(GCFluids.fluidFuel, 2); + + if (this.attachedFuelable != null && this.hasEnoughEnergyToRun && !this.disabled) + { + int filled = this.attachedFuelable.addFuel(liquid, true); + this.loadedFuelLastTick = filled > 0; + this.fuelTank.drain(filled, true); + } + } + } + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + + if (par1NBTTagCompound.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(par1NBTTagCompound.getCompoundTag("fuelTank")); + } + + this.readMachineSidesFromNBT(par1NBTTagCompound); // Needed by + // IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + + return nbt; + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return this.isItemValidForSlot(slotID, itemstack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (slotID == 1 && !itemstack.isEmpty()) + { + return FluidUtil.isEmptyContainer(itemstack); + } + return false; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return (slotID == 1 && itemstack != null && itemstack.getItem() == GCItems.fuelCanister) || (slotID == 0 ? ItemElectricBase.isElectricItem(itemstack.getItem()) : false); + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (this.getPipeInputDirection().equals(from)) + { + return this.fuelTank.getFluid() == null || this.fuelTank.getFluidAmount() < this.fuelTank.getCapacity(); + } + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (this.getPipeInputDirection().equals(from) && resource != null) + { + if (FluidUtil.testFuel(FluidRegistry.getFluidName(resource))) + { + used = this.fuelTank.fill(resource, doFill); + } + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + if (this.getPipeInputDirection().equals(from)) + { + return new FluidTankInfo[] + {new FluidTankInfo(this.fuelTank)}; + } + return null; + } + + @Override + public boolean shouldUseEnergy() + { + return this.fuelTank.getFluid() != null && this.fuelTank.getFluid().amount > 0 && !this.getDisabled(0) && loadedFuelLastTick; + } + + @Override + public boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockFuelLoader) + { + return state.getValue(BlockFuelLoader.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + if (type == NetworkType.FLUID) + { + return direction == this.getPipeInputDirection(); + } + return false; + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + @Override + public EnumFacing getPipeInputDirection() + { + switch (this.getSide(MachineSide.PIPE_IN)) + { + case RIGHT: + default: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + return byIndex().rotateY(); + } + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN, MachineSide.PIPE_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT, Face.RIGHT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockFuelLoader.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityIngotCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityIngotCompressor.java new file mode 100644 index 00000000..5606c77c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityIngotCompressor.java @@ -0,0 +1,578 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.ShapedRecipesGC; +import micdoodle8.mods.galacticraft.api.recipe.ShapelessOreRecipeGC; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.inventory.PersistantInventoryCrafting; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityIngotCompressor extends TileEntityAdvanced implements IInventoryDefaults, ISidedInventory +{ + + public static final int PROCESS_TIME_REQUIRED = 200; + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + @NetworkedField(targetSide = Side.CLIENT) public int furnaceBurnTime = 0; + @NetworkedField(targetSide = Side.CLIENT) public int currentItemBurnTime = 0; + private long ticks; + + private ItemStack producingStack = ItemStack.EMPTY; + public PersistantInventoryCrafting compressingCraftMatrix = new PersistantInventoryCrafting(); + public final Set playersUsing = new HashSet(); + private static Random random = new Random(); + + public TileEntityIngotCompressor() + { + super("tile.machine.3.name"); + inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + boolean updateInv = false; + boolean flag = this.furnaceBurnTime > 0; + + if (this.furnaceBurnTime > 0) + { + --this.furnaceBurnTime; + } + + if (this.furnaceBurnTime == 0 && this.canSmelt()) + { + ItemStack fuel = this.getInventory().get(0); + this.currentItemBurnTime = this.furnaceBurnTime = TileEntityFurnace.getItemBurnTime(fuel); + + if (this.furnaceBurnTime > 0) + { + updateInv = true; + + if (!fuel.isEmpty()) + { + fuel.shrink(1); + + if (fuel.getCount() == 0) + { + this.getInventory().set(0, fuel.getItem().getContainerItem(fuel)); + } + } + } + } + + if (this.furnaceBurnTime > 0 && this.canSmelt()) + { + ++this.processTicks; + + if (this.processTicks % 40 == 0 && this.processTicks > TileEntityIngotCompressor.PROCESS_TIME_REQUIRED / 2) + { + this.world.playSound(null, this.getPos(), SoundEvents.BLOCK_ANVIL_LAND, SoundCategory.BLOCKS, 0.3F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.processTicks == TileEntityIngotCompressor.PROCESS_TIME_REQUIRED) + { + this.processTicks = 0; + this.smeltItem(); + updateInv = true; + } + } else + { + this.processTicks = 0; + } + + if (flag != this.furnaceBurnTime > 0) + { + updateInv = true; + } + + if (updateInv) + { + this.markDirty(); + } + } + + this.ticks++; + } + + public void updateInput() + { + this.producingStack = CompressorRecipes.findMatchingRecipe(this.compressingCraftMatrix, this.world); + } + + private boolean canSmelt() + { + ItemStack itemstack = this.producingStack; + if (itemstack.isEmpty()) + { + return false; + } + if (this.getInventory().get(1).isEmpty()) + { + return true; + } + if (!this.getInventory().get(1).isItemEqual(itemstack)) + { + return false; + } + int result = this.getInventory().get(1).getCount() + itemstack.getCount(); + return result <= this.getInventoryStackLimit() && result <= itemstack.getMaxStackSize(); + } + + public static boolean isItemCompressorInput(ItemStack stack) + { + for (IRecipe recipe : CompressorRecipes.getRecipeList()) + { + if (recipe instanceof ShapedRecipesGC) + { + for (ItemStack itemstack1 : ((ShapedRecipesGC) recipe).recipeItems) + { + if (stack.getItem() == itemstack1.getItem() && (itemstack1.getItemDamage() == 32767 || stack.getItemDamage() == itemstack1.getItemDamage())) + { + return true; + } + } + } else if (recipe instanceof ShapelessOreRecipeGC) + { + ArrayList required = new ArrayList(((ShapelessOreRecipeGC) recipe).getInput()); + + Iterator req = required.iterator(); + + int match = 0; + + while (req.hasNext()) + { + Object next = req.next(); + + if (next instanceof ItemStack) + { + if (OreDictionary.itemMatches((ItemStack) next, stack, false)) + { + match++; + } + } else if (next instanceof List) + { + for (ItemStack itemStack : ((List) next)) + { + if (OreDictionary.itemMatches(itemStack, stack, false)) + { + match++; + break; + } + } + } + } + + if (match == 0) + { + continue; + } + + if (match == 1) + { + return true; + } + + return random.nextInt(match) == 0; + } + } + + return false; + } + + private void smeltItem() + { + if (this.canSmelt()) + { + ItemStack resultItemStack = this.producingStack; + if (ConfigManagerCore.quickMode) + { + if (resultItemStack.getItem().getTranslationKey(resultItemStack).contains("compressed")) + { + resultItemStack.grow(resultItemStack.getCount()); + } + } + + if (this.getInventory().get(1).isEmpty()) + { + this.getInventory().set(1, resultItemStack.copy()); + } else if (this.getInventory().get(1).isItemEqual(resultItemStack)) + { + if (this.getInventory().get(1).getCount() + resultItemStack.getCount() > 64) + { + resultItemStack.grow(this.getInventory().get(1).getCount() - 64); + GCCoreUtil.spawnItem(this.world, this.getPos(), resultItemStack); + this.getInventory().get(1).setCount(64); + } else + { + this.getInventory().get(1).grow(resultItemStack.getCount()); + } + } + + for (int i = 0; i < this.compressingCraftMatrix.getSizeInventory(); i++) + { + if (!this.compressingCraftMatrix.getStackInSlot(i).isEmpty() && this.compressingCraftMatrix.getStackInSlot(i).getItem() == Items.WATER_BUCKET) + { + this.compressingCraftMatrix.setInventorySlotContentsNoUpdate(i, new ItemStack(Items.BUCKET)); + } else + { + this.compressingCraftMatrix.decrStackSize(i, 1); + } + } + this.updateInput(); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + NBTTagList var2 = nbt.getTagList("Items", 10); + + this.inventory = NonNullList.withSize(this.getSizeInventory() - this.compressingCraftMatrix.getSizeInventory(), ItemStack.EMPTY); + + NBTTagList nbttaglist = nbt.getTagList("Items", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + int j = nbttagcompound.getByte("Slot") & 255; + + if (j >= 0 && j < this.getInventory().size()) + { + this.getInventory().set(j, new ItemStack(nbttagcompound)); + } else if (j < this.getInventory().size() + this.compressingCraftMatrix.getSizeInventory()) + { + this.compressingCraftMatrix.setInventorySlotContents(j - this.getInventory().size(), new ItemStack(nbttagcompound)); + } + } + + this.updateInput(); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + NBTTagList var2 = new NBTTagList(); + int i; + + for (i = 0; i < this.getInventory().size(); ++i) + { + if (!this.getInventory().get(i).isEmpty()) + { + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setByte("Slot", (byte) i); + this.getInventory().get(i).writeToNBT(tagCompound); + var2.appendTag(tagCompound); + } + } + + for (i = 0; i < this.compressingCraftMatrix.getSizeInventory(); ++i) + { + if (!this.compressingCraftMatrix.getStackInSlot(i).isEmpty()) + { + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setByte("Slot", (byte) (i + this.getInventory().size())); + this.compressingCraftMatrix.getStackInSlot(i).writeToNBT(tagCompound); + var2.appendTag(tagCompound); + } + } + + nbt.setTag("Items", var2); + return nbt; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public int getSizeInventory() + { + return super.getSizeInventory() + this.compressingCraftMatrix.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + if (par1 >= this.getInventory().size()) + { + return this.compressingCraftMatrix.getStackInSlot(par1 - this.getInventory().size()); + } + + return this.getInventory().get(par1); + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (par1 >= this.getInventory().size()) + { + ItemStack result = this.compressingCraftMatrix.decrStackSize(par1 - this.getInventory().size(), par2); + if (!result.isEmpty()) + { + this.updateInput(); + } + this.markDirty(); + return result; + } + + if (!this.getInventory().get(par1).isEmpty()) + { + ItemStack var3; + + if (this.getInventory().get(par1).getCount() <= par2) + { + var3 = this.getInventory().get(par1); + this.getInventory().set(par1, ItemStack.EMPTY); + this.markDirty(); + return var3; + } else + { + var3 = this.getInventory().get(par1).splitStack(par2); + + if (this.getInventory().get(par1).isEmpty()) + { + this.getInventory().set(par1, ItemStack.EMPTY); + } + + this.markDirty(); + return var3; + } + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (par1 >= this.getInventory().size()) + { + this.markDirty(); + return this.compressingCraftMatrix.removeStackFromSlot(par1 - this.getInventory().size()); + } + + if (!this.getInventory().get(par1).isEmpty()) + { + ItemStack var2 = this.getInventory().get(par1); + this.getInventory().set(par1, ItemStack.EMPTY); + this.markDirty(); + return var2; + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public void setInventorySlotContents(int par1, ItemStack stack) + { + if (par1 >= this.getInventory().size()) + { + this.compressingCraftMatrix.setInventorySlotContents(par1 - this.getInventory().size(), stack); + this.updateInput(); + } else + { + this.getInventory().set(par1, stack); + + if (!stack.isEmpty() && stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + } + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.getInventory()) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return this.world.getTileEntity(this.getPos()) == this && entityPlayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + +// @Override +// public boolean hasCustomName() +// { +// return true; +// } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (slotID == 0) + { + return TileEntityFurnace.getItemBurnTime(itemStack) > 0; + } else if (slotID >= 2) + { + if (!this.producingStack.isEmpty()) + { + ItemStack stackInSlot = this.getStackInSlot(slotID); + return !stackInSlot.isEmpty() && stackInSlot.isItemEqual(itemStack); + } + return TileEntityIngotCompressor.isItemCompressorInput(itemStack); + } + + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return new int[] + {1}; + } + int[] slots = new int[] + {0, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + ArrayList removeSlots = new ArrayList<>(); + + for (int i = 2; i < 11; i++) + { + if (removeSlots.contains(i)) + { + continue; + } + ItemStack stack1 = this.getStackInSlot(i); + if (stack1.isEmpty()) + { + continue; + } + + for (int j = i + 1; j < 11; j++) + { + if (removeSlots.contains(j)) + { + continue; + } + ItemStack stack2 = this.getStackInSlot(j); + if (stack2.isEmpty()) + { + continue; + } + + if (stack1.isItemEqual(stack2)) + { + if (stack2.getCount() >= stack1.getCount()) + { + removeSlots.add(j); + } else + { + removeSlots.add(i); + } + break; + } + } + } + + if (removeSlots.size() > 0) + { + int[] returnSlots = new int[slots.length - removeSlots.size()]; + int j = 0; + for (int i = 0; i < slots.length; i++) + { + if (i > 0 && removeSlots.contains(slots[i])) + { + continue; + } + returnSlots[j] = slots[i]; + j++; + } + + return returnSlots; + } + + return slots; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 1; + } + + @Override + public double getPacketRange() + { + return 12.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityInventory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityInventory.java new file mode 100644 index 00000000..c1cf5c80 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityInventory.java @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.HashMap; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.SidedInvWrapper; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class TileEntityInventory extends TileEntity implements ISidedInventory +{ + + public NonNullList inventory; + private HashMap itemHandlers = new HashMap<>(); + private String tileName; + + public TileEntityInventory(String tileName) + { + this.tileName = tileName; + } + + public NonNullList getInventory() + { + return inventory; + } + + protected boolean handleInventory() + { + return true; + } + + @Override + public boolean isEmpty() + { + if(inventory == null) { return true; } + return getInventory().isEmpty(); + } + + @Override + public void readFromNBT(NBTTagCompound tags) + { + super.readFromNBT(tags); + + if (handleInventory()) + { + NonNullList stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(tags, stacks); + inventory = stacks; + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tags) + { + super.writeToNBT(tags); + + if (handleInventory()) + { + ItemStackHelper.saveAllItems(tags, getInventory()); + } + + return tags; + } + + @Override + public int getSizeInventory() + { + return getInventory() == null ? 0 : getInventory().size(); + } + + @Override + public ItemStack getStackInSlot(int slot) + { + return getInventory() == null ? ItemStack.EMPTY : getInventory().get(slot); + } + + @Override + public ItemStack decrStackSize(int slot, int amount) + { + if (getInventory() == null) + { + return ItemStack.EMPTY; + } + + return ItemStackHelper.getAndSplit(getInventory(), slot, amount); + } + + @Override + public ItemStack removeStackFromSlot(int slot) + { + if (getInventory() == null) + { + return ItemStack.EMPTY; + } + + return ItemStackHelper.getAndRemove(getInventory(), slot); + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + getInventory().set(slot, stack); + if (!stack.isEmpty() && stack.getCount() > getInventoryStackLimit()) + { + stack.setCount(getInventoryStackLimit()); + } + markDirty(); + } + + @Override + public boolean isUsableByPlayer(EntityPlayer player) + { + return !isInvalid() && this.world.isBlockLoaded(this.pos); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) + { + return true; + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side) + { + return isItemValidForSlot(slot, stack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side) + { + return true; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing side) + { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, side); + } + + @Override + public T getCapability(Capability capability, EnumFacing side) + { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + IItemHandler handler = itemHandlers.get(side); + if (handler == null) + { + handler = new SidedInvWrapper(this, side); + itemHandlers.put(side, handler); + } + return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(handler); + } + + return super.getCapability(capability, side); + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + for (int i = 0; i < this.getInventory().size(); ++i) + { + this.getInventory().set(i, ItemStack.EMPTY); + } + } + + /** + * Override this and return true IF the inventory .getName() is ALREADY a + * localized name e.g. by GCCoreUtil.translate() + * + **/ + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } + + @Override + public String getName() + { + return GCCoreUtil.translate(tileName); + } + + @Override + public synchronized void handleUpdateTag(NBTTagCompound tag) + { + this.readFromNBT(tag); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPad.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPad.java new file mode 100644 index 00000000..bed93dea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPad.java @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.entity.IFuelable; +import micdoodle8.mods.galacticraft.api.entity.ILandable; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; + +public class TileEntityLandingPad extends TileEntityMulti implements IMultiBlock, IFuelable, IFuelDock, ICargoEntity +{ + + public TileEntityLandingPad() + { + super(null); + } + + private IDockable dockedEntity; + private boolean initialised; + + @Override + public void update() + { + if (!this.initialised) + { + if (!this.world.isRemote) + this.onCreate(this.world, this.getPos()); + this.initialiseMultiTiles(this.getPos(), this.world); + this.initialised = true; + } + + if (!this.world.isRemote) + { + final List list = this.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(this.getPos().getX() - 0.5D, this.getPos().getY(), this.getPos().getZ() - 0.5D, this.getPos().getX() + 0.5D, this.getPos().getY() + 1.0D, this.getPos().getZ() + 0.5D)); + + boolean docked = false; + + for (final Object o : list) + { + if (o instanceof IDockable && !((Entity) o).isDead) + { + final IDockable fuelable = (IDockable) o; + + if (!fuelable.inFlight()) + { + docked = true; + + if (fuelable != this.dockedEntity && fuelable.isDockValid(this)) + { + if (fuelable instanceof ILandable) + { + ((ILandable) fuelable).landEntity(this.getPos()); + } + else + { + fuelable.setPad(this); + } + } + + break; + } + } + } + + if (!docked) + { + this.dockedEntity = null; + } + } + } + + // @Override + // public boolean canUpdate() + // { + // return true; + // } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + + List positions = new ArrayList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.ROCKET_PAD; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int y = placedPosition.getY(); + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + if (x == 0 && z == 0) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.ROCKET_PAD) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + + if (this.dockedEntity != null) + { + this.dockedEntity.onPadDestroyed(); + this.dockedEntity = null; + } + + } + + @Override + public int addFuel(FluidStack liquid, boolean doFill) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.addFuel(liquid, doFill); + } + + return 0; + } + + @Override + public FluidStack removeFuel(int amount) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.removeFuel(amount); + } + + return null; + } + + @Override + public HashSet getConnectedTiles() + { + HashSet connectedTiles = new HashSet<>(); + + for (int x = this.getPos().getX() - 1; x < this.getPos().getX() + 2; x++) + { + this.testConnectedTile(x, this.getPos().getZ() - 2, connectedTiles); + this.testConnectedTile(x, this.getPos().getZ() + 2, connectedTiles); + } + + for (int z = this.getPos().getZ() - 1; z < this.getPos().getZ() + 2; z++) + { + this.testConnectedTile(this.getPos().getX() - 2, z, connectedTiles); + this.testConnectedTile(this.getPos().getX() + 2, z, connectedTiles); + } + + return connectedTiles; + } + + private void testConnectedTile(int x, int z, HashSet connectedTiles) + { + BlockPos testPos = new BlockPos(x, this.getPos().getY(), z); + if (!this.world.isBlockLoaded(testPos, false)) + return; + + final TileEntity tile = this.world.getTileEntity(testPos); + + if (tile instanceof ILandingPadAttachable && ((ILandingPadAttachable) tile).canAttachToLandingPad(this.world, this.getPos())) + { + connectedTiles.add((ILandingPadAttachable) tile); + if (tile instanceof TileEntityLaunchController) + { + ((TileEntityLaunchController) tile).setAttachedPad(this); + } + } + } + + @Override + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.addCargo(stack, doAdd); + } + + return EnumCargoLoadingState.NOTARGET; + } + + @Override + public RemovalResult removeCargo(boolean doRemove) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.removeCargo(doRemove); + } + + return new RemovalResult(EnumCargoLoadingState.NOTARGET, ItemStack.EMPTY); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(getPos().getX() - 1, getPos().getY(), getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 0.4D, getPos().getZ() + 2); + } + + @Override + public boolean isBlockAttachable(IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile != null && tile instanceof ILandingPadAttachable) + { + return ((ILandingPadAttachable) tile).canAttachToLandingPad(world, this.getPos()); + } + + return false; + } + + @Override + public IDockable getDockedEntity() + { + return this.dockedEntity; + } + + @Override + public void dockEntity(IDockable entity) + { + this.dockedEntity = entity; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPadSingle.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPadSingle.java new file mode 100644 index 00000000..a3776f75 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPadSingle.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; + +public class TileEntityLandingPadSingle extends TileEntity implements ITickable +{ + + private int corner = 0; + + @Override + public void update() + { + if (!this.world.isRemote && this.corner == 0) + { + final ArrayList attachedLaunchPads = new ArrayList<>(); + + for (int x = this.getPos().getX() - 1; x < this.getPos().getX() + 2; x++) + { + for (int z = this.getPos().getZ() - 1; z < this.getPos().getZ() + 2; z++) + { + final TileEntity tile = this.world.getTileEntity(new BlockPos(x, this.getPos().getY(), z)); + + if (tile instanceof TileEntityLandingPadSingle && !tile.isInvalid() && ((TileEntityLandingPadSingle) tile).corner == 0) + { + attachedLaunchPads.add(tile); + } + } + } + + if (attachedLaunchPads.size() == 9) + { + for (final TileEntity tile : attachedLaunchPads) + { + this.world.markTileEntityForRemoval(tile); + ((TileEntityLandingPadSingle) tile).corner = 1; + } + + this.world.setBlockState(this.getPos(), GCBlocks.landingPadFull.getDefaultState(), 2); + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityMulti.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityMulti.java new file mode 100644 index 00000000..12700357 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityMulti.java @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvanced; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; + +public class TileEntityMulti extends TileEntity +{ + // NOTE: No need for networking in 1.8+: see comment in + // initialiseMultiTiles() + + // The the position of the main block + public BlockPos mainBlockPosition; + + public TileEntityMulti() + { + + } + + public TileEntityMulti(BlockPos mainBlockPosition) + { + this.mainBlockPosition = mainBlockPosition; + } + + public void onBlockRemoval() + { + if (this.mainBlockPosition != null) + { + TileEntity tileEntity = this.world.getTileEntity(this.mainBlockPosition); + + if (tileEntity instanceof IMultiBlock) + { + IMultiBlock mainBlock = (IMultiBlock) tileEntity; + mainBlock.onDestroy(this); + } + } + } + + public boolean onBlockActivated(World worldIn, BlockPos pos, EntityPlayer player) + { + if (this.mainBlockPosition != null) + { + TileEntity tileEntity = this.world.getTileEntity(this.mainBlockPosition); + + if (tileEntity instanceof IMultiBlock) + { + return ((IMultiBlock) tileEntity).onActivated(player); + } + } + + return false; + } + + public boolean onBlockWrenched(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (this.mainBlockPosition != null) + { + IBlockState state = this.world.getBlockState(this.mainBlockPosition); + + if (state.getBlock() instanceof BlockAdvanced) + { + return ((BlockAdvanced) state.getBlock()).onBlockActivated(world, this.mainBlockPosition, state, entityPlayer, hand, side, hitX, hitY, hitZ); + } + } + + return false; + } + + public TileEntity getMainBlockTile() + { + if (this.mainBlockPosition != null) + { + return this.world.getTileEntity(this.mainBlockPosition); + } + + return null; + } + + /** + * Reads a tile entity from NBT. + */ + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + NBTTagCompound tag = nbt.getCompoundTag("mainBlockPosition"); + this.mainBlockPosition = new BlockPos(tag.getInteger("x"), tag.getInteger("y"), tag.getInteger("z")); + } + + /** + * Writes a tile entity to NBT. + */ + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + if (this.mainBlockPosition != null) + { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("x", this.mainBlockPosition.getX()); + tag.setInteger("y", this.mainBlockPosition.getY()); + tag.setInteger("z", this.mainBlockPosition.getZ()); + nbt.setTag("mainBlockPosition", tag); + } + + return nbt; + } + + protected boolean initialiseMultiTiles(BlockPos pos, World world) + { + IMultiBlock thisTile = (IMultiBlock) this; + + // Client can create its own fake blocks and tiles - no need for + // networking in 1.8+ + if (world.isRemote) + { + thisTile.onCreate(world, pos); + } + + List positions = new ArrayList<>(); + thisTile.getPositions(pos, positions); + boolean result = true; + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMulti) + { + ((TileEntityMulti) tile).mainBlockPosition = pos; + } else if (tile == null) + { + Block b = world.getBlockState(vecToAdd).getBlock(); + if (!(b instanceof BlockMulti)) + { + world.setBlockState(vecToAdd, GCBlocks.fakeBlock.getDefaultState().withProperty(BlockMulti.MULTI_TYPE, thisTile.getMultiType()), 2); + } + world.setTileEntity(vecToAdd, new TileEntityMulti(pos)); + } else + { + result = false; + } + } + if (result == false && !world.isRemote) + { +// //Try again to create all the multiblocks - currently disabled because making new tiles here interferes with server->client tileEntity sync during worldgen (Abandoned Base) +// thisTile.onCreate(world, pos); + } + + return result; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNasaWorkbench.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNasaWorkbench.java new file mode 100644 index 00000000..cf493b8c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNasaWorkbench.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; + +public class TileEntityNasaWorkbench extends TileEntityMulti implements IMultiBlock +{ + + private boolean initialised; + + public TileEntityNasaWorkbench() + { + super(null); + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + entityPlayer.openGui(GalacticraftCore.instance, GuiIdsCore.NASA_WORKBENCH_ROCKET, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + return true; + } + + @Override + public void update() + { + if (!this.initialised) + { + this.initialised = this.initialiseMultiTiles(this.getPos(), this.world); + } + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + List positions = new ArrayList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.NASA_WORKBENCH; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + + for (int y = 1; y < 3; y++) + { + if (placedPosition.getY() + y > buildHeight) + { + return; + } + + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + if (Math.abs(x) != 1 || Math.abs(z) != 1) + { + positions.add(new BlockPos(placedPosition.getX() + x, placedPosition.getY() + y, placedPosition.getZ() + z)); + } + } + } + } + + if (placedPosition.getY() + 3 <= buildHeight) + { + positions.add(new BlockPos(placedPosition.getX(), placedPosition.getY() + 3, placedPosition.getZ())); + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.NASA_WORKBENCH) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.05D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(thisBlock)); + } + this.world.setBlockToAir(pos); + } + } + this.world.destroyBlock(thisBlock, true); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(getPos().getX() - 1, getPos().getY() - 1, getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 5, getPos().getZ() + 2); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNull.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNull.java new file mode 100644 index 00000000..3ff6a7c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNull.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.tileentity.TileEntity; + +public class TileEntityNull extends TileEntity +{ +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygen.java new file mode 100644 index 00000000..2560e7fb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygen.java @@ -0,0 +1,487 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenReceiver; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenStorage; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.NetworkHelper; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; + +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.api.gas.ITubeConnection; +import mekanism.common.capabilities.Capabilities; + +@InterfaceList({ + @Interface(iface = "mekanism.api.gas.IGasHandler", modid = CompatibilityManager.modidMekanism), + @Interface(iface = "mekanism.api.gas.ITubeConnection", modid = CompatibilityManager.modidMekanism) +}) +public abstract class TileEntityOxygen extends TileBaseElectricBlock implements IOxygenReceiver, IOxygenStorage, IFluidHandlerWrapper, IGasHandler, ITubeConnection +{ + + public int oxygenPerTick; + @NetworkedField(targetSide = Side.CLIENT) + public FluidTankGC tank; + public float lastStoredOxygen; + public static int timeSinceOxygenRequest; + + public TileEntityOxygen(String tileName, int maxOxygen, int oxygenPerTick) + { + super(tileName); + this.tank = new FluidTankGC(maxOxygen, this); + this.oxygenPerTick = oxygenPerTick; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + return true; + } + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + } + + return super.getCapability(capability, facing); + } + + public int getScaledOxygenLevel(int scale) + { + return (int) Math.floor(this.getOxygenStored() * scale / (this.getMaxOxygenStored() - this.oxygenPerTick)); + } + + public abstract boolean shouldUseOxygen(); + + public int getCappedScaledOxygenLevel(int scale) + { + return (int) Math.max(Math.min(Math.floor((double) this.tank.getFluidAmount() / (double) this.tank.getCapacity() * scale), scale), 0); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + if (TileEntityOxygen.timeSinceOxygenRequest > 0) + { + TileEntityOxygen.timeSinceOxygenRequest--; + } + + if (this.shouldUseOxygen()) + { + if (this.tank.getFluid() != null) + { + FluidStack fluid = this.tank.getFluid().copy(); + fluid.amount = Math.max(fluid.amount - this.oxygenPerTick, 0); + this.tank.setFluid(fluid); + } + } + } + + this.lastStoredOxygen = this.tank.getFluidAmount(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if (nbt.hasKey("storedOxygen")) + { + this.tank.setFluid(new FluidStack(GCFluids.fluidOxygenGas, nbt.getInteger("storedOxygen"))); + } else if (nbt.hasKey("storedOxygenF")) + { + int oxygen = (int) nbt.getFloat("storedOxygenF"); + oxygen = Math.min(this.tank.getCapacity(), oxygen); + this.tank.setFluid(new FluidStack(GCFluids.fluidOxygenGas, oxygen)); + } else + { + this.tank.readFromNBT(nbt); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + this.tank.writeToNBT(nbt); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void setOxygenStored(int oxygen) + { + this.tank.setFluid(new FluidStack(GCFluids.fluidOxygenGas, Math.max(Math.min(oxygen, this.getMaxOxygenStored()), 0))); + } + + @Override + public int getOxygenStored() + { + return this.tank.getFluidAmount(); + } + + @Override + public int getMaxOxygenStored() + { + return this.tank.getCapacity(); + } + + public EnumSet getOxygenInputDirections() + { + return EnumSet.allOf(EnumFacing.class); + } + + public EnumSet getOxygenOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + + if (type == NetworkType.FLUID) + { + return this.getOxygenInputDirections().contains(direction) || this.getOxygenOutputDirections().contains(direction); + } + if (type == NetworkType.POWER) + // return this.nodeAvailable(new EnergySourceAdjacent(direction)); + { + return super.canConnect(direction, type); + } + + return false; + } + + @Override + public int receiveOxygen(EnumFacing from, int receive, boolean doReceive) + { + if (this.getOxygenInputDirections().contains(from)) + { + if (!doReceive) + { + return this.getOxygenRequest(from); + } + + return this.receiveOxygen(receive, doReceive); + } + + return 0; + } + + public int receiveOxygen(int receive, boolean doReceive) + { + if (receive > 0) + { + int prevOxygenStored = this.getOxygenStored(); + int newStoredOxygen = Math.min(prevOxygenStored + receive, this.getMaxOxygenStored()); + + if (doReceive) + { + TileEntityOxygen.timeSinceOxygenRequest = 20; + this.setOxygenStored(newStoredOxygen); + } + + return Math.max(newStoredOxygen - prevOxygenStored, 0); + } + + return 0; + } + + @Override + public int provideOxygen(EnumFacing from, int request, boolean doProvide) + { + if (this.getOxygenOutputDirections().contains(from)) + { + return this.drawOxygen(request, doProvide); + } + + return 0; + } + + public int drawOxygen(int request, boolean doProvide) + { + if (request > 0) + { + int requestedOxygen = Math.min(request, this.getOxygenStored()); + + if (doProvide) + { + this.setOxygenStored(this.getOxygenStored() - requestedOxygen); + } + + return requestedOxygen; + } + + return 0; + } + + public void produceOxygen() + { + if (!this.world.isRemote) + { + for (EnumFacing direction : this.getOxygenOutputDirections()) + { + if (direction != null) + { + this.produceOxygen(direction); + } + } + } + } + + public boolean produceOxygen(EnumFacing outputDirection) + { + int provide = this.getOxygenProvide(outputDirection); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).getTileEntityOnSide(this.world, outputDirection); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int gasRequested = outputNetwork.getRequest(); + + if (gasRequested > 0) + { + int usedGas = outputNetwork.emitToBuffer(new FluidStack(GCFluids.fluidOxygenGas, Math.min(gasRequested, provide)), true); + + this.drawOxygen(usedGas, true); + return true; + } + } else if (outputTile instanceof IOxygenReceiver) + { + float requestedOxygen = ((IOxygenReceiver) outputTile).getOxygenRequest(outputDirection.getOpposite()); + + if (requestedOxygen > 0) + { + int acceptedOxygen = ((IOxygenReceiver) outputTile).receiveOxygen(outputDirection.getOpposite(), provide, true); + this.drawOxygen(acceptedOxygen, true); + return true; + } + } + // else if (EnergyConfigHandler.isMekanismLoaded()) + // { + // //TODO Oxygen item handling - internal tank (IGasItem) + // //int acceptedOxygen = GasTransmission.addGas(itemStack, type, amount); + // //this.drawOxygen(acceptedOxygen, true); + // + // if (outputTile instanceof IGasHandler && ((IGasHandler) outputTile).canReceiveGas(outputDirection.getOpposite(), (Gas) EnergyConfigHandler.gasOxygen)) + // { + // GasStack toSend = new GasStack((Gas) EnergyConfigHandler.gasOxygen, (int) Math.floor(provide)); + // int acceptedOxygen = 0; + // try { + // acceptedOxygen = ((IGasHandler) outputTile).receiveGas(outputDirection.getOpposite(), toSend); + // } catch (Exception e) { } + // this.drawOxygen(acceptedOxygen, true); + // return true; + // } + // } + } + + return false; + } + + @Override + public int getOxygenRequest(EnumFacing direction) + { + if (this.shouldPullOxygen()) + { + return Math.min(this.oxygenPerTick * 2, this.getMaxOxygenStored() - this.getOxygenStored()); + } else + { + return 0; + } + } + + @Override + public boolean shouldPullOxygen() + { + return this.getOxygenStored() < this.getMaxOxygenStored(); + } + + /** + * Make sure this does not exceed the oxygen stored. This should return 0 if + * no oxygen is stored. Implementing tiles must respect this or you will + * generate infinite oxygen. + */ + @Override + public int getOxygenProvide(EnumFacing direction) + { + return 0; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + if (!stack.getGas().getName().equals("oxygen")) + { + return 0; + } + return (int) Math.floor(this.receiveOxygen(stack.amount, doTransfer)); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return new GasStack((Gas) EnergyConfigHandler.gasOxygen, (int) Math.floor(this.drawOxygen(amount, doTransfer))); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public GasStack drawGas(EnumFacing side, int amount) + { + return this.drawGas(side, amount, true); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return type.getName().equals("oxygen") && this.getOxygenInputDirections().contains(side); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canDrawGas(EnumFacing side, Gas type) + { + return type.getName().equals("oxygen") && this.getOxygenOutputDirections().contains(side); + } + + @Deprecated + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canTubeConnect(EnumFacing side) + { + return this.canConnect(side, NetworkType.FLUID); + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + if (this.getOxygenInputDirections().contains(from) && resource != null) + { + if (!doFill) + { + return this.getOxygenRequest(from); + } + + return this.receiveOxygen(resource.amount, doFill); + } + + return 0; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return resource == null ? null : drain(from, resource.amount, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + if (this.getOxygenOutputDirections().contains(from)) + { + return new FluidStack(GCFluids.fluidOxygenGas, this.drawOxygen(maxDrain, doDrain)); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + return this.getOxygenInputDirections().contains(from) && (fluid == null || fluid.getName().equals("oxygen")); + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return this.getOxygenOutputDirections().contains(from) && (fluid == null || fluid.getName().equals("oxygen")); + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + if (canConnect(from, NetworkType.FLUID)) + { + return new FluidTankInfo[] {this.tank.getInfo()}; + } + + return new FluidTankInfo[] {}; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCollector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCollector.java new file mode 100644 index 00000000..16a54aa9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCollector.java @@ -0,0 +1,264 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.common.EnumPlantType; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCollector; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; + +public class TileEntityOxygenCollector extends TileEntityOxygen +{ + + public boolean active; + public static final int OUTPUT_PER_TICK = 100; + public static float OXYGEN_PER_PLANT = 0.75F; + @NetworkedField(targetSide = Side.CLIENT) public float lastOxygenCollected; + private boolean noAtmosphericOxygen = true; + private boolean isInitialised = false; + private boolean producedLastTick = false; + + public TileEntityOxygenCollector() + { + super("container.oxygencollector.name", 6000, 0); + this.noRedstoneControl = true; + inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public int getCappedScaledOxygenLevel(int scale) + { + return (int) Math.max(Math.min(Math.floor((double) this.getOxygenStored() / (double) this.getMaxOxygenStored() * scale), scale), 0); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + producedLastTick = this.getOxygenStored() < this.getMaxOxygenStored(); + + this.produceOxygen(); + + // Approximately once every 40 ticks, search out oxygen producing + // blocks + if (this.world.rand.nextInt(10) == 0) + { + if (this.hasEnoughEnergyToRun) + { + // The later calculations are more efficient if power is a + // float, so + // there are fewer casts + float nearbyLeaves = 0; + + if (!this.isInitialised) + { + this.noAtmosphericOxygen = + (this.world.provider instanceof IGalacticraftWorldProvider && !((IGalacticraftWorldProvider) this.world.provider).isGasPresent(EnumAtmosphericGas.OXYGEN)); + this.isInitialised = true; + } + + if (this.noAtmosphericOxygen) + { + // Pre-test to see if close to the map edges, so code + // doesn't have to continually test for map edges inside + // the + // loop + if (this.getPos().getX() > -29999995 && this.getPos().getY() < 2999995 && this.getPos().getZ() > -29999995 && this.getPos().getZ() < 29999995) + { + // Test the y coordinates, so code doesn't have to + // keep + // testing that either + int miny = this.getPos().getY() - 5; + int maxy = this.getPos().getY() + 5; + if (miny < 0) + { + miny = 0; + } + if (maxy >= this.world.getHeight()) + { + maxy = this.world.getHeight() - 1; + } + + // Loop the x and the z first, so the y loop will be + // at + // fixed (x,z) coordinates meaning fixed chunk + // coordinates + for (int x = this.getPos().getX() - 5; x <= this.getPos().getX() + 5; x++) + { + int chunkx = x >> 4; + int intrachunkx = x & 15; + // Preload the first chunk for the z loop - + // there + // can be a maximum of 2 chunks in the z loop + int chunkz = this.getPos().getZ() - 5 >> 4; + Chunk chunk = this.world.getChunk(chunkx, chunkz); + for (int z = this.getPos().getZ() - 5; z <= this.getPos().getZ() + 5; z++) + { + if (z >> 4 != chunkz) + { + // moved across z chunk boundary into a + // new + // chunk, so load the new chunk + chunkz = z >> 4; + chunk = this.world.getChunk(chunkx, chunkz); + } + for (int y = miny; y <= maxy; y++) + { + // chunk.getBlockID is like + // world.getBlock + // but faster - needs to be given + // intra-chunk coordinates though + final IBlockState state = chunk.getBlockState(intrachunkx, y, z & 15); + // Test for the two most common blocks + // (air + // and breatheable air) without looking + // up + // in the blocksList + if (!(state.getBlock() instanceof BlockAir)) + { + BlockPos pos = new BlockPos(x, y, z); + if (state.getBlock().isLeaves(state, this.world, pos) + || state.getBlock() instanceof IPlantable && ((IPlantable) state.getBlock()).getPlantType(this.world, pos) == EnumPlantType.Crop) + { + nearbyLeaves += OXYGEN_PER_PLANT; + } + } + } + } + } + } + } else + { + nearbyLeaves = 9.3F * 10F; + } + + nearbyLeaves = (float) Math.floor(nearbyLeaves); + + this.lastOxygenCollected = nearbyLeaves / 10F; + + this.tank.setFluid(new FluidStack(GCFluids.fluidOxygenGas, (int) Math.max(Math.min(this.getOxygenStored() + nearbyLeaves, this.getMaxOxygenStored()), 0))); + } else + { + this.lastOxygenCollected = 0; + } + } + } + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + @Override + public boolean shouldUseEnergy() + { + return this.getOxygenStored() > 0F && producedLastTick; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenCollector) + { + return state.getValue(BlockOxygenCollector.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + @Override + public boolean shouldPullOxygen() + { + return false; + } + + @Override + public boolean shouldUseOxygen() + { + return false; + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return this.getOxygenOutputDirections().contains(direction) ? Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.getOxygenStored()) : 0; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCompressor.java new file mode 100644 index 00000000..ccadbea6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCompressor.java @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCompressor; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class TileEntityOxygenCompressor extends TileEntityOxygen +{ + + public static final int TANK_TRANSFER_SPEED = 2; + private boolean usingEnergy = false; + + public TileEntityOxygenCompressor() + { + super("container.oxygencompressor.name", 1200, 16); + this.storage.setMaxExtract(15); + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + ItemStack oxygenItemStack = this.getStackInSlot(2); + if (oxygenItemStack != null && oxygenItemStack.getItem() instanceof IItemOxygenSupply) + { + IItemOxygenSupply oxygenItem = (IItemOxygenSupply) oxygenItemStack.getItem(); + int oxygenDraw = (int) Math.floor(Math.min(this.oxygenPerTick * 2.5F, this.getMaxOxygenStored() - this.getOxygenStored())); + this.setOxygenStored(getOxygenStored() + oxygenItem.discharge(oxygenItemStack, oxygenDraw)); + if (this.getOxygenStored() > this.getMaxOxygenStored()) + { + this.setOxygenStored(this.getOxygenStored()); + } + } + } + + super.update(); + + if (!this.world.isRemote) + { + this.usingEnergy = false; + if (this.getOxygenStored() > 0 && this.hasEnoughEnergyToRun) + { + ItemStack tank0 = this.getInventory().get(0); + + if (!tank0.isEmpty()) + { + if (tank0.getItem() instanceof ItemOxygenTank && tank0.getItemDamage() > 0) + { + tank0.setItemDamage(tank0.getItemDamage() - TileEntityOxygenCompressor.TANK_TRANSFER_SPEED); + this.setOxygenStored(this.getOxygenStored() - TileEntityOxygenCompressor.TANK_TRANSFER_SPEED); + this.usingEnergy = true; + } + } + } + } + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return itemstack.getItemDamage() > 1; + case 1: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 2: + return itemstack.getItemDamage() < itemstack.getItem().getMaxDamage(); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + switch (slotID) + { + case 0: + return itemstack.getItem() instanceof ItemOxygenTank && itemstack.getItemDamage() == 0; + case 1: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 2: + return FluidUtil.isEmptyContainer(itemstack); + default: + return false; + } + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return itemstack.getItem() instanceof ItemOxygenTank; + case 1: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + case 2: + return itemstack.getItem() instanceof IItemOxygenSupply; + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.usingEnergy; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenCompressor) + { + return state.getValue(BlockOxygenCompressor.FACING).rotateY(); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return this.byIndex(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(1); + } + + @Override + public boolean shouldUseOxygen() + { + return false; + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDecompressor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDecompressor.java new file mode 100644 index 00000000..8a9475c2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDecompressor.java @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCompressor; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; + +public class TileEntityOxygenDecompressor extends TileEntityOxygen implements IInventoryDefaults, ISidedInventory +{ + + public static final int OUTPUT_PER_TICK = 100; + private boolean usingEnergy = false; + + public TileEntityOxygenDecompressor() + { + super("container.oxygendecompressor.name", 1200, 0); + inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + this.usingEnergy = false; + ItemStack tank1 = this.getInventory().get(0); + + if (!tank1.isEmpty() && this.hasEnoughEnergyToRun && this.getOxygenStored() < this.getMaxOxygenStored()) + { + if (tank1.getItem() instanceof ItemOxygenTank && tank1.getItemDamage() < tank1.getMaxDamage()) + { + tank1.setItemDamage(tank1.getItemDamage() + 1); + this.receiveOxygen(1, true); + this.usingEnergy = true; + } else if (tank1.getItem() instanceof ItemCanisterOxygenInfinite) + { + this.receiveOxygen(1, true); + this.usingEnergy = true; + } + } + + this.produceOxygen(); + } + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return itemstack.getItemDamage() < itemstack.getMaxDamage(); + case 1: + return ItemElectricBase.isElectricItemCharged(itemstack); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return itemstack.getItemDamage() == itemstack.getMaxDamage(); + case 1: + return ItemElectricBase.isElectricItemEmpty(itemstack); + default: + return false; + } + } + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return itemstack.getItem() instanceof ItemOxygenTank; + case 1: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.usingEnergy; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenCompressor) + { + return state.getValue(BlockOxygenCompressor.FACING).rotateY(); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return this.byIndex(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(1); + } + + public EnumFacing getOxygenOutputDirection() + { + return this.getElectricInputDirection().getOpposite(); + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public boolean shouldPullOxygen() + { + return false; + } + + @Override + public boolean shouldUseOxygen() + { + return false; + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return this.getOxygenOutputDirections().contains(direction) ? Math.min(TileEntityOxygenDecompressor.OUTPUT_PER_TICK, this.getOxygenStored()) : 0; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDetector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDetector.java new file mode 100644 index 00000000..ecd5961c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDetector.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDetector; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; + +public class TileEntityOxygenDetector extends TileEntity implements ITickable +{ + + private int ticks = 49; + private AxisAlignedBB oxygenSearch; + + @Override + public void update() + { + if (!this.world.isRemote && ++this.ticks == 50) + { + this.ticks = 0; + if (this.getBlockType() instanceof BlockOxygenDetector) + { + boolean oxygenFound = false; + if (this.world.provider instanceof IGalacticraftWorldProvider && !((IGalacticraftWorldProvider) this.world.provider).hasBreathableAtmosphere()) + { + oxygenFound = OxygenUtil.isAABBInBreathableAirBlock(this.world, this.oxygenSearch, false); + } else + { + for (EnumFacing side : EnumFacing.VALUES) + { + BlockPos offset = this.pos.offset(side, 1); + IBlockState bs = this.world.getBlockState(offset); + if (!bs.getBlock().isSideSolid(bs, world, offset, side.getOpposite())) + { + oxygenFound = true; + break; + } + } + } + ((BlockOxygenDetector) this.blockType).updateOxygenState(this.world, this.getPos(), oxygenFound); + } + } + } + + @Override + public void onLoad() + { + this.oxygenSearch = + new AxisAlignedBB(this.getPos().getX() - 0.6, this.getPos().getY() - 0.6, this.getPos().getZ() - 0.6, this.getPos().getX() + 1.6, this.getPos().getY() + 1.6, this.getPos().getZ() + 1.6); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDistributor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDistributor.java new file mode 100644 index 00000000..22f7ade0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDistributor.java @@ -0,0 +1,494 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.block.IOxygenReliantBlock; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDistributor; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProviderColored; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +import io.netty.buffer.ByteBuf; + +public class TileEntityOxygenDistributor extends TileEntityOxygen implements IBubbleProviderColored +{ + + public boolean active; + public boolean lastActive; + + public static HashSet loadedTiles = new HashSet<>(); + public float bubbleSize; + @NetworkedField(targetSide = Side.CLIENT) public boolean shouldRenderBubble = true; + + public TileEntityOxygenDistributor() + { + super("container.oxygendistributor.name", 6000, 8); +// this.oxygenBubble = null; + this.inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + @Override + public void onLoad() + { + if (!this.world.isRemote) + TileEntityOxygenDistributor.loadedTiles.add(new BlockVec3Dim(this)); + } + + @Override + public void onChunkUnload() + { + if (!this.world.isRemote) + TileEntityOxygenDistributor.loadedTiles.remove(new BlockVec3Dim(this)); + super.onChunkUnload(); + } + + @Override + public void invalidate() + { + if (!this.world.isRemote) + { + int bubbleR = MathHelper.ceil(bubbleSize); + int bubbleR2 = (int) (bubbleSize * bubbleSize); + final int xMin = this.getPos().getX() - bubbleR; + final int xMax = this.getPos().getX() + bubbleR; + final int yMin = this.getPos().getY() - bubbleR; + final int yMax = this.getPos().getY() + bubbleR; + final int zMin = this.getPos().getZ() - bubbleR; + final int zMax = this.getPos().getZ() + bubbleR; + for (int x = xMin; x < xMax; x++) + { + for (int z = zMin; z < zMax; z++) + { + // Doing y as the inner loop allows BlockVec3 to cache the + // chunks more efficiently + for (int y = yMin; y < yMax; y++) + { + IBlockState state = new BlockVec3(x, y, z).getBlockState(this.world); + + if (state != null && state.getBlock() instanceof IOxygenReliantBlock && this.getDistanceFromServer(x, y, z) <= bubbleR2) + { + this.world.scheduleUpdate(new BlockPos(x, y, z), state.getBlock(), 0); + } + } + } + } +// this.oxygenBubble.setDead(); + TileEntityOxygenDistributor.loadedTiles.remove(new BlockVec3Dim(this)); + } + + super.invalidate(); + } + + @Override + public double getPacketRange() + { + return 64.0F; + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + if (!this.world.isRemote && !this.isInvalid()) + { +// networkedList.add(this.oxygenBubble != null); +// if (this.oxygenBubble != null) +// { +// networkedList.add(this.oxygenBubble.getEntityId()); +// } + if (this.world.getMinecraftServer().isDedicatedServer()) + { + networkedList.add(loadedTiles.size()); + // TODO: Limit this to ones in the same dimension as this tile? + for (BlockVec3Dim distributor : loadedTiles) + { + if (distributor == null) + { + networkedList.add(-1); + networkedList.add(-1); + networkedList.add(-1); + networkedList.add(-1); + } else + { + networkedList.add(distributor.x); + networkedList.add(distributor.y); + networkedList.add(distributor.z); + networkedList.add(distributor.dim); + } + } + } else + // Signal integrated server, do not clear loadedTiles + { + networkedList.add(-1); + } + networkedList.add(this.bubbleSize); + } + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(this.getPos().getX() - this.bubbleSize, this.getPos().getY() - this.bubbleSize, this.getPos().getZ() - this.bubbleSize, this.getPos().getX() + this.bubbleSize, + this.getPos().getY() + this.bubbleSize, this.getPos().getZ() + this.bubbleSize); + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + if (this.world.isRemote) + { +// if (dataStream.readBoolean()) +// { +// this.oxygenBubble = (EntityBubble) worldObj.getEntityByID(dataStream.readInt()); +// } + int size = dataStream.readInt(); + if (size >= 0) + { + loadedTiles.clear(); + for (int i = 0; i < size; ++i) + { + int i1 = dataStream.readInt(); + int i2 = dataStream.readInt(); + int i3 = dataStream.readInt(); + int i4 = dataStream.readInt(); + if (i1 == -1 && i2 == -1 && i3 == -1 && i4 == -1) + { + continue; + } + loadedTiles.add(new BlockVec3Dim(i1, i2, i3, i4)); + } + } + this.bubbleSize = dataStream.readFloat(); + } + } + + public int getDistanceFromServer(int par1, int par3, int par5) + { + final int d3 = this.getPos().getX() - par1; + final int d4 = this.getPos().getY() - par3; + final int d5 = this.getPos().getZ() - par5; + return d3 * d3 + d4 * d4 + d5 * d5; + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + ItemStack oxygenItemStack = this.getStackInSlot(1); + if (oxygenItemStack != null && oxygenItemStack.getItem() instanceof IItemOxygenSupply) + { + IItemOxygenSupply oxygenItem = (IItemOxygenSupply) oxygenItemStack.getItem(); + int oxygenDraw = (int) Math.floor(Math.min(this.oxygenPerTick * 2.5F, this.getMaxOxygenStored() - this.getOxygenStored())); + this.setOxygenStored(getOxygenStored() + oxygenItem.discharge(oxygenItemStack, oxygenDraw)); + if (this.getOxygenStored() > this.getMaxOxygenStored()) + { + this.setOxygenStored(this.getOxygenStored()); + } + } + } + + super.update(); + + if (!this.world.isRemote) + { + if (this.getEnergyStoredGC() > 0.0F && this.hasEnoughEnergyToRun && this.getOxygenStored() > this.oxygenPerTick) + { + this.bubbleSize += 0.01F; + } else + { + this.bubbleSize -= 0.1F; + } + + this.bubbleSize = Math.min(Math.max(this.bubbleSize, 0.0F), 10.0F); + } + +// if (!hasValidBubble && !this.world.isRemote && (this.oxygenBubble == null || this.ticks < 25)) +// { +// //Check it's a world without a breathable atmosphere +// if (this.oxygenBubble == null && this.world.provider instanceof IGalacticraftWorldProvider && !((IGalacticraftWorldProvider)this.world.provider).hasBreathableAtmosphere()) +// { +// this.oxygenBubble = new EntityBubble(this.world, new Vector3(this), this); +// this.hasValidBubble = true; +// this.world.spawnEntity(this.oxygenBubble); +// } +// } + + if (!this.world.isRemote) + { + this.active = bubbleSize >= 1 && this.hasEnoughEnergyToRun && this.getOxygenStored() > this.oxygenPerTick; + + if (this.ticks % (this.active ? 20 : 4) == 0) + { + double size = bubbleSize; + int bubbleR = MathHelper.floor(size) + 4; + int bubbleR2 = (int) (size * size); + for (int x = this.getPos().getX() - bubbleR; x <= this.getPos().getX() + bubbleR; x++) + { + for (int y = this.getPos().getY() - bubbleR; y <= this.getPos().getY() + bubbleR; y++) + { + for (int z = this.getPos().getZ() - bubbleR; z <= this.getPos().getZ() + bubbleR; z++) + { + BlockPos pos = new BlockPos(x, y, z); + IBlockState state = this.world.getBlockState(pos); + Block block = state.getBlock(); + + if (block instanceof IOxygenReliantBlock) + { + if (this.getDistanceFromServer(x, y, z) <= bubbleR2) + { + ((IOxygenReliantBlock) block).onOxygenAdded(this.world, pos, state); + } else + { + // Do not necessarily extinguish it - it + // might be inside another oxygen system + this.world.scheduleUpdate(pos, block, 0); + } + } + } + } + } + } + } + + this.lastActive = this.active; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if (nbt.hasKey("bubbleVisible")) + { + this.setBubbleVisible(nbt.getBoolean("bubbleVisible")); + } + + if (nbt.hasKey("bubbleSize")) + { + this.bubbleSize = nbt.getFloat("bubbleSize"); + } +// this.hasValidBubble = nbt.getBoolean("hasValidBubble"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setBoolean("bubbleVisible", this.shouldRenderBubble); + nbt.setFloat("bubbleSize", this.bubbleSize); +// nbt.setBoolean("hasValidBubble", this.hasValidBubble); + return nbt; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return itemstack.getItemDamage() < itemstack.getItem().getMaxDamage(); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 1: + return FluidUtil.isEmptyContainer(itemstack); + default: + return false; + } + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (itemstack.isEmpty()) + { + return false; + } + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } + if (slotID == 1) + { + return itemstack.getItem() instanceof IItemOxygenSupply; + } + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.getOxygenStored() > this.oxygenPerTick; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenDistributor) + { + return state.getValue(BlockOxygenDistributor.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + @Override + public boolean shouldUseOxygen() + { + return this.hasEnoughEnergyToRun; + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + +// @Override +// public IBubble getBubble() +// { +// return this.oxygenBubble; +// } + + public boolean inBubble(double pX, double pY, double pZ) + { + double r = bubbleSize; + r *= r; + double d3 = this.getPos().getX() + 0.5D - pX; + d3 *= d3; + if (d3 > r) + { + return false; + } + double d4 = this.getPos().getZ() + 0.5D - pZ; + d4 *= d4; + if (d3 + d4 > r) + { + return false; + } + double d5 = this.getPos().getY() + 0.5D - pY; + return d3 + d4 + d5 * d5 < r; + } + + @Override + public void setBubbleVisible(boolean shouldRender) + { + this.shouldRenderBubble = shouldRender; +// this.oxygenBubble.setShouldRender(shouldRender); + } + + @Override + public float getBubbleSize() + { + return this.bubbleSize; + } + + @Override + public boolean getBubbleVisible() + { + return this.shouldRenderBubble; + } + + @Override + public Vector3 getColor() + { + return new Vector3(0.125F, 0.125F, 0.5F); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenSealer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenSealer.java new file mode 100644 index 00000000..973d2c8d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenSealer.java @@ -0,0 +1,455 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenSealer; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; +import micdoodle8.mods.galacticraft.core.fluid.ThreadFindSeal; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityOxygenSealer extends TileEntityOxygen implements ITileClientUpdates +{ + + @NetworkedField(targetSide = Side.CLIENT) public boolean sealed; + public boolean lastSealed = false; + + public boolean lastDisabled = false; + + @NetworkedField(targetSide = Side.CLIENT) public boolean active; + public ThreadFindSeal threadSeal; + @NetworkedField(targetSide = Side.CLIENT) public int stopSealThreadCooldown; + @NetworkedField(targetSide = Side.CLIENT) public int threadCooldownTotal; + @NetworkedField(targetSide = Side.CLIENT) public boolean calculatingSealed; + public static int countEntities = 0; + private static int countTemp = 0; + private static boolean sealerCheckedThisTick = false; + public static ArrayList loadedTiles = new ArrayList<>(); + private static final int UNSEALED_OXYGENPERTICK = 12; + public List leaksClient; + + public TileEntityOxygenSealer() + { + super("container.oxygensealer.name", 10000, UNSEALED_OXYGENPERTICK); + this.noRedstoneControl = true; + this.storage.setMaxExtract(5.0F); // Half of a standard machine's power + // draw + this.storage.setMaxReceive(25.0F); + this.storage.setCapacity(EnergyStorageTile.STANDARD_CAPACITY * 2); + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void onLoad() + { + if (!this.world.isRemote) + { + if (!TileEntityOxygenSealer.loadedTiles.contains(this)) + { + TileEntityOxygenSealer.loadedTiles.add(this); + } + this.stopSealThreadCooldown = 126 + countEntities; + } else + { + this.clientOnLoad(); + } + } + + @Override + public void invalidate() + { + if (!this.world.isRemote) + { + TileEntityOxygenSealer.loadedTiles.remove(this); + } + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + if (!this.world.isRemote) + { + TileEntityOxygenSealer.loadedTiles.remove(this); + } + super.onChunkUnload(); + } + + public int getScaledThreadCooldown(int i) + { + if (this.active) + { + return Math.min(i, (int) Math.floor(this.stopSealThreadCooldown * i / (double) this.threadCooldownTotal)); + } + return 0; + } + + public int getFindSealChecks() + { + if (!this.active || this.getOxygenStored() < this.oxygenPerTick || !this.hasEnoughEnergyToRun) + { + return 0; + } + BlockPos posAbove = new BlockPos(this.getPos().getX(), this.getPos().getY() + 1, this.getPos().getZ()); + IBlockState stateAbove = this.world.getBlockState(posAbove); + if (!(stateAbove.getBlock().isAir(stateAbove, this.world, posAbove)) && !OxygenPressureProtocol.canBlockPassAir(this.world, stateAbove, this.getPos().up(), EnumFacing.UP)) + { + // The vent is blocked + return 0; + } + + return 1250; + } + + public boolean thermalControlEnabled() + { + ItemStack oxygenItemStack = this.getStackInSlot(2); + return oxygenItemStack != null && oxygenItemStack.getItem() == GCItems.basicItem && oxygenItemStack.getItemDamage() == 20 && this.hasEnoughEnergyToRun && !this.disabled; + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + ItemStack oxygenItemStack = this.getStackInSlot(1); + if (oxygenItemStack != null && oxygenItemStack.getItem() instanceof IItemOxygenSupply) + { + IItemOxygenSupply oxygenItem = (IItemOxygenSupply) oxygenItemStack.getItem(); + int oxygenDraw = (int) Math.floor(Math.min(UNSEALED_OXYGENPERTICK * 2.5F, this.getMaxOxygenStored() - this.getOxygenStored())); + this.setOxygenStored(getOxygenStored() + oxygenItem.discharge(oxygenItemStack, oxygenDraw)); + if (this.getOxygenStored() > this.getMaxOxygenStored()) + { + this.setOxygenStored(this.getOxygenStored()); + } + } + + if (this.thermalControlEnabled()) + { + if (this.storage.getMaxExtract() != 20.0F) + { + this.storage.setMaxExtract(20.0F); + } + } else if (this.storage.getMaxExtract() != 5.0F) + { + this.storage.setMaxExtract(5.0F); + this.storage.setMaxReceive(25.0F); + } + } + + this.oxygenPerTick = this.sealed ? 2 : UNSEALED_OXYGENPERTICK; + super.update(); + + if (!this.world.isRemote) + { + // Some code to count the number of Oxygen Sealers being updated, + // tick by tick - needed for queueing + TileEntityOxygenSealer.countTemp++; + + this.active = this.getOxygenStored() >= 1 && this.hasEnoughEnergyToRun && !this.disabled; + if (this.disabled != this.lastDisabled) + { + this.lastDisabled = this.disabled; + if (!this.disabled) + this.stopSealThreadCooldown = this.threadCooldownTotal * 3 / 5; + } + + // TODO: if multithreaded, this codeblock should not run if the + // current threadSeal is flagged looping + if (this.stopSealThreadCooldown > 0) + { + this.stopSealThreadCooldown--; + } else if (!TileEntityOxygenSealer.sealerCheckedThisTick) + { + // This puts any Sealer which is updated to the back of the + // queue for updates + this.threadCooldownTotal = this.stopSealThreadCooldown = 75 + TileEntityOxygenSealer.countEntities; + if (this.active || this.sealed) + { + TileEntityOxygenSealer.sealerCheckedThisTick = true; + OxygenPressureProtocol.updateSealerStatus(this); + } + } + + // TODO: if multithreaded, this.threadSeal needs to be atomic + if (this.threadSeal != null) + { + if (this.threadSeal.looping.get()) + { + this.calculatingSealed = this.active; + } else + { + this.calculatingSealed = false; + this.sealed = this.threadSeal.sealedFinal.get(); + } + } else + { + this.calculatingSealed = true; // Give an initial 'Check + // pending' in GUI when first + // placed + } + + this.lastSealed = this.sealed; + } + } + + public static void onServerTick() + { + TileEntityOxygenSealer.countEntities = TileEntityOxygenSealer.countTemp; + TileEntityOxygenSealer.countTemp = 0; + TileEntityOxygenSealer.sealerCheckedThisTick = false; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return itemstack.getItemDamage() < itemstack.getItem().getMaxDamage(); + case 2: + return itemstack.getItem() == GCItems.basicItem && itemstack.getItemDamage() == 20; + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 1: + return FluidUtil.isEmptyContainer(itemstack); + default: + return false; + } + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (itemstack.isEmpty()) + { + return false; + } + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } + if (slotID == 1) + { + return itemstack.getItem() instanceof IItemOxygenSupply; + } + if (slotID == 2) + { + return itemstack.getItem() == GCItems.basicItem && itemstack.getItemDamage() == 20; + } + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.getOxygenStored() > this.oxygenPerTick && !this.getDisabled(0); + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenSealer) + { + return state.getValue(BlockOxygenSealer.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + @Override + public boolean shouldUseOxygen() + { + return this.hasEnoughEnergyToRun && this.active; + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + public static HashMap getSealersAround(World world, BlockPos pos, int rSquared) + { + HashMap ret = new HashMap<>(); + + for (TileEntityOxygenSealer tile : new ArrayList<>(TileEntityOxygenSealer.loadedTiles)) + { + if (tile != null && tile.getWorld() == world && tile.getDistanceSq(pos.getX(), pos.getY(), pos.getZ()) < rSquared) + { + ret.put(new BlockVec3(tile.getPos()), tile); + } + } + + return ret; + } + + public static TileEntityOxygenSealer getNearestSealer(World world, double x, double y, double z) + { + TileEntityOxygenSealer ret = null; + double dist = 96 * 96D; + + for (Object tile : world.loadedTileEntityList) + { + if (tile instanceof TileEntityOxygenSealer) + { + double testDist = ((TileEntityOxygenSealer) tile).getDistanceSq(x, y, z); + if (testDist < dist) + { + dist = testDist; + ret = (TileEntityOxygenSealer) tile; + } + } + } + + return ret; + } + + @Override + public void sendUpdateToClient(EntityPlayerMP player) + { + if (this.sealed || this.threadSeal == null || this.threadSeal.leakTrace == null || this.threadSeal.leakTrace.isEmpty()) + { + return; + } + Integer[] data = new Integer[this.threadSeal.leakTrace.size()]; + int index = 0; + for (BlockVec3 vec : this.threadSeal.leakTrace) + { + int dx = vec.x - this.pos.getX() + 128; + int dz = vec.z - this.pos.getZ() + 128; + int dy = vec.y; + int composite; + if (dx < 0 || dx > 255 || dz < 0 || dz > 255 || dy < 0) + composite = -1; + else + composite = dz + ((dy + (dx << 8)) << 8); + data[index++] = composite; + } + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_LEAK_DATA, GCCoreUtil.getDimensionID(player.world), new Object[] + {this.getPos(), data}), player); + } + + @Override + public void buildDataPacket(int[] data) + { + // unused + } + + @Override + public void updateClient(List data) + { + this.leaksClient = new ArrayList<>(); + if (data.size() > 1) + { + for (int i = 1; i < data.size(); i++) + { + int comp = (Integer) data.get(i); + if (comp >= 0) + { + int dx = (comp >> 16) - 128; + int dy = (comp >> 8) & 255; + int dz = (comp & 255) - 128; + this.leaksClient.add(new BlockVec3(this.pos.getX() + dx, dy, this.pos.getZ() + dz)); + } + } + } + } + + public List getLeakTraceClient() + { + this.clientOnLoad(); + return this.leaksClient; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenStorageModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenStorageModule.java new file mode 100644 index 00000000..6444d35a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenStorageModule.java @@ -0,0 +1,357 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class TileEntityOxygenStorageModule extends TileEntityOxygen implements IInventoryDefaults, ISidedInventory, IMachineSides +{ + + public final Set playersUsing = new HashSet<>(); + public int scaledOxygenLevel; + private int lastScaledOxygenLevel; + + public static final int OUTPUT_PER_TICK = 500; + public static final int OXYGEN_CAPACITY = 60000; + + public TileEntityOxygenStorageModule() + { + super("tile.machine2.6.name", OXYGEN_CAPACITY, 40); + this.storage.setCapacity(0); + this.storage.setMaxExtract(0); + inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + ItemStack oxygenItemStack = this.getStackInSlot(0); + if (oxygenItemStack != null && oxygenItemStack.getItem() instanceof IItemOxygenSupply) + { + IItemOxygenSupply oxygenItem = (IItemOxygenSupply) oxygenItemStack.getItem(); + int oxygenDraw = (int) Math.floor(Math.min(this.oxygenPerTick * 2.5F, this.getMaxOxygenStored() - this.getOxygenStored())); + this.setOxygenStored(getOxygenStored() + oxygenItem.discharge(oxygenItemStack, oxygenDraw)); + if (this.getOxygenStored() > this.getMaxOxygenStored()) + { + this.setOxygenStored(this.getOxygenStored()); + } + } + } + + super.update(); + + this.scaledOxygenLevel = this.getScaledOxygenLevel(16); + + if (this.scaledOxygenLevel != this.lastScaledOxygenLevel) + { + this.world.notifyLightSet(this.getPos()); + } + + this.lastScaledOxygenLevel = this.scaledOxygenLevel; + + this.produceOxygen(byIndex().rotateY().getOpposite()); + + this.lastScaledOxygenLevel = this.scaledOxygenLevel; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + return nbt; + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public boolean shouldPullEnergy() + { + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return false; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return null; + } + + @Override + public ItemStack getBatteryInSlot() + { + return ItemStack.EMPTY; + } + + @Override + public boolean shouldUseOxygen() + { + return false; + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return this.getOxygenOutputDirections().contains(direction) ? Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.getOxygenStored()) : 0; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && itemstack != null && itemstack.getItem() instanceof IItemOxygenSupply; + } + + // ISidedInventory + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (slotID == 0 && this.isItemValidForSlot(slotID, itemstack)) + { + return itemstack.getItemDamage() < itemstack.getItem().getMaxDamage(); + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (slotID == 0 && !itemstack.isEmpty()) + { + return FluidUtil.isEmptyContainer(itemstack); + } + return false; + } + + // IFluidHandler methods - to allow this to accept Liquid Oxygen + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return super.canDrain(from, fluid); + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return super.drain(from, resource, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + return super.drain(from, maxDrain, doDrain); + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { +// if (from.ordinal() == this.getBlockMetadata() - BlockMachine2.OXYGEN_STORAGE_MODULE_METADATA + 2 && GalacticraftCore.isPlanetsLoaded) +// { +// //Can fill with LOX only +// return fluid != null && fluid.getName().equals(AsteroidsModule.fluidLiquidOxygen.getName()); +// } + + return super.canFill(from, fluid); + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { +// int used = 0; +// +// if (resource != null && this.canFill(from, resource.getFluid())) +// { +// used = (int) (this.receiveOxygen((int) Math.floor(resource.amount / Constants.LOX_GAS_RATIO), doFill) * Constants.LOX_GAS_RATIO); +// } + + return super.fill(from, resource, doFill); + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { +// FluidTankInfo[] tankInfo = new FluidTankInfo[] {}; +// int metaside = this.getBlockMetadata() - BlockMachine2.OXYGEN_STORAGE_MODULE_METADATA + 2; +// int side = from.ordinal(); +// +// if (metaside == side && GalacticraftCore.isPlanetsLoaded) +// { +// tankInfo = new FluidTankInfo[] { new FluidTankInfo(new FluidStack(AsteroidsModule.fluidLiquidOxygen, (int) (this.getOxygenStored() * Constants.LOX_GAS_RATIO)), (int) (OXYGEN_CAPACITY * Constants.LOX_GAS_RATIO)) }; +// } +// return tankInfo; + return super.getTankInfo(from); + } + + @Override + public EnumSet getOxygenInputDirections() + { + EnumFacing dir; + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case REAR: + dir = byIndex().getOpposite(); + break; + case TOP: + dir = EnumFacing.UP; + break; + case BOTTOM: + dir = EnumFacing.DOWN; + break; + case RIGHT: + dir = byIndex().rotateYCCW(); + break; + case LEFT: + default: + dir = byIndex().rotateY(); + } + return EnumSet.of(dir); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + EnumFacing dir; + switch (this.getSide(MachineSide.PIPE_OUT)) + { + case REAR: + dir = byIndex().getOpposite(); + break; + case TOP: + dir = EnumFacing.UP; + break; + case BOTTOM: + dir = EnumFacing.DOWN; + break; + case LEFT: + dir = byIndex().rotateY(); + break; + case RIGHT: + default: + dir = byIndex().rotateYCCW(); + } + return EnumSet.of(dir); + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + // Have to use Electric_In for compatibility with other BlockMachine2, + // as all use same blockstate + return new MachineSide[] + {MachineSide.ELECTRIC_IN, MachineSide.PIPE_OUT}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT, Face.RIGHT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachine2.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPainter.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPainter.java new file mode 100644 index 00000000..bf4005ca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPainter.java @@ -0,0 +1,390 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.api.item.IPaintable; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +import io.netty.buffer.ByteBuf; + +import biomesoplenty.api.item.BOPItems; +import ic2.api.item.IC2Items; + +//import net.minecraft.item.EnumDyeColor; + +public class TileEntityPainter extends TileEntityInventory implements IDisableableMachine, IPacketReceiver +{ + + private static final int RANGE_DEFAULT = 96; + public static Map> loadedTilesForDim = new HashMap>(); + + public int range = RANGE_DEFAULT; // currently unused + + public int[] glassColor = new int[] + {-1, -1, -1}; // Size of this array must + // match GlassType enum + public final Set playersUsing = new HashSet(); + + public int guiColor = 0xffffff; + + public TileEntityPainter() + { + super("tile.machine3.9.name"); + inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + public void takeColorFromItem(ItemStack itemStack) + { + if (itemStack == null) + { + return; + } + + Item item = itemStack.getItem(); + int color = -1; + if (item == Items.DYE) + { + color = ItemDye.DYE_COLORS[itemStack.getItemDamage()]; + } else if (item instanceof ItemBlock) + { + Block b = ((ItemBlock) item).getBlock(); + IBlockState bs = b.getStateFromMeta(itemStack.getItemDamage()); + try + { + MapColor mc = b.getMapColor(bs, null, null); + color = mc.colorValue; + } catch (Exception e) + { + } + } else + { + color = tryOtherModDyes(itemStack); + } + + if (color >= 0) + { + color = ColorUtil.addColorsBasic(color, this.guiColor); + this.guiColor = color; + } + } + + private void applyColorToItem(ItemStack itemStack, int color, Side side, EntityPlayer player) + { + if (itemStack == null) + { + return; + } + + Item item = itemStack.getItem(); + + if (item instanceof IPaintable) + { + // TODO e.g. flags, eggs, rockets??? + } else if (item instanceof ItemBlock) + { + color = ColorUtil.lighten(color, 0.03F); + Block b = ((ItemBlock) item).getBlock(); + int result = 0; + if (b instanceof IPaintable) + { + result = ((IPaintable) b).setColor(color, player, side); + } + if (b instanceof BlockSpaceGlass) + { + int type = ((BlockSpaceGlass) b).type.ordinal(); + this.glassColor[type] = color; + if (result > 0 && side == Side.CLIENT) + { + BlockSpaceGlass.updateClientRender(); + } + } + } + } + + private void setGlassColors(int color1, int color2, int color3) + { + boolean changes = false; + if (this.glassColor[0] != color1) + { + changes = true; + this.glassColor[0] = color1; + } + if (this.glassColor[1] != color2) + { + changes = true; + this.glassColor[1] = color2; + } + if (this.glassColor[2] != color3) + { + changes = true; + this.glassColor[2] = color3; + } + +// if (changes) +// ColorUtil.updateColorsForArea(this.world), this.pos, this.range, this.glassColor[0], this.glassColor[1], this.glassColor[2]);; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (nbt.hasKey("guic")) + { + this.glassColor[0] = nbt.getInteger("G1"); + this.glassColor[1] = nbt.getInteger("G2"); + this.glassColor[2] = nbt.getInteger("G3"); + this.range = nbt.getInteger("rge"); + this.guiColor = nbt.getInteger("guic"); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("G1", this.glassColor[0]); + nbt.setInteger("G2", this.glassColor[1]); + nbt.setInteger("G3", this.glassColor[2]); + nbt.setInteger("guic", this.guiColor); + nbt.setInteger("rge", this.range); + + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + private static Set getLoadedTiles(World world) + { + int dimID = GCCoreUtil.getDimensionID(world); + Set loaded = loadedTilesForDim.get(dimID); + + if (loaded == null) + { + loaded = new HashSet(); + loadedTilesForDim.put(dimID, loaded); + } + + return loaded; + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request any networked information from server on first client + // update + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } else + { + this.getLoadedTiles(this.world).add(new BlockVec3(this.pos)); + } + } + + @Override + public void onChunkUnload() + { + this.getLoadedTiles(this.world).remove(new BlockVec3(this.pos)); + super.onChunkUnload(); + } + + @Override + public void invalidate() + { + if (!this.world.isRemote) + this.getLoadedTiles(this.world).remove(new BlockVec3(this.pos)); + super.invalidate(); + } + + public static void onServerTick(World world) + { + Set loaded = getLoadedTiles(world); + int dimID = GCCoreUtil.getDimensionID(world); + List allPlayers = PlayerUtil.getPlayersOnline(); + for (final EntityPlayerMP player : allPlayers) + { + if (player.dimension != dimID) + continue; + + BlockVec3 playerPos = new BlockVec3(player); + BlockVec3 nearest = null; + int shortestDistance = RANGE_DEFAULT * RANGE_DEFAULT; + for (final BlockVec3 bv : loaded) + { + int distance = bv.distanceSquared(playerPos); + if (distance < shortestDistance) + { + shortestDistance = distance; + nearest = bv; + } + } + + if (nearest != null) + { + TileEntity te = nearest.getTileEntity(world); + if (te instanceof TileEntityPainter) + { + ((TileEntityPainter) te).dominantToPlayer(player); + } + } + + // TODO + // Make sure this works in a way so that the nearest Painter quickly + // takes priority, but there is no race condition... + // Also maybe some hysteresis? + } + } + + private void dominantToPlayer(EntityPlayerMP player) + { + GCPlayerStats.get(player).setGlassColors(this.glassColor[0], this.glassColor[1], this.glassColor[2]); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + // Used to do the painting! + for (EntityPlayer entityPlayer : playersUsing) + { + this.buttonPressed(index, entityPlayer, Side.SERVER); + } + } + + public void buttonPressed(int index, EntityPlayer player, Side side) + { + switch (index) + { + case 0: // Apply Paint + this.applyColorToItem(this.getStackInSlot(1), this.guiColor, side, player); + break; + case 1: // Mix Colors + this.takeColorFromItem(this.getStackInSlot(0)); + break; + case 2: // Reset Colors + this.guiColor = 0xffffff; + break; + } + } + + @Override + public boolean getDisabled(int index) + { + return false; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.world.isRemote) + { + return; + } + + sendData.add(this.guiColor); + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world.isRemote) + { + try + { + this.guiColor = buffer.readInt(); + } catch (Exception ignore) + { + ignore.printStackTrace(); + } + } + } + + // Any special cases go here, e.g. coloured dye or paint items added by + // other mods + private static int tryOtherModDyes(ItemStack itemStack) + { + Item item = itemStack.getItem(); + + if (CompatibilityManager.isIc2Loaded()) + { + ItemStack ic2paintbrush = IC2Items.getItem("painter"); + if (ic2paintbrush != null && item == ic2paintbrush.getItem()) + { + return ItemDye.DYE_COLORS[itemStack.getItemDamage()]; + } + } + + if (CompatibilityManager.isBOPLoaded()) + { + if (item == BOPItems.black_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.BLACK.getDyeDamage()]; + if (item == BOPItems.blue_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.BLUE.getDyeDamage()]; + if (item == BOPItems.brown_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.BROWN.getDyeDamage()]; + if (item == BOPItems.green_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.GREEN.getDyeDamage()]; + if (item == BOPItems.white_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.WHITE.getDyeDamage()]; + } + + return -1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPanelLight.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPanelLight.java new file mode 100644 index 00000000..d0531efa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPanelLight.java @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; + +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; + +import io.netty.buffer.ByteBuf; + +public class TileEntityPanelLight extends TileEntity implements IPacketReceiver +{ + + public int meta; + private IBlockState superState; + private static IBlockState defaultLook = AsteroidBlocks.blockBasic.getStateFromMeta(6); + public int color = 0xf0f0e0; + @SideOnly(Side.CLIENT) private AxisAlignedBB renderAABB; + + public TileEntityPanelLight() + { + } + + public void initialise(int type, EnumFacing facing, EntityPlayer player, boolean isRemote, IBlockState superStateClient) + { + this.meta = facing.ordinal(); + if (isRemote) + { + this.superState = superStateClient; + this.color = BlockPanelLighting.color; + } else + { + GCPlayerStats stats = GCPlayerStats.get(player); + this.superState = stats.getPanelLightingBases()[type]; + this.color = stats.getPanelLightingColor(); + } + } + + public IBlockState getBaseBlock() + { + if (this.superState != null && this.superState.getBlock() == Blocks.AIR) + { + this.superState = null; + } + return this.superState == null ? defaultLook : this.superState; + } + + public BlockPanelLighting.PanelType getType() + { + if (this.world != null) + { + IBlockState b = this.world.getBlockState(this.pos); + if (b.getBlock() instanceof BlockPanelLighting) + { + return b.getValue(BlockPanelLighting.TYPE); + } + } + return BlockPanelLighting.PanelType.SQUARE; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.meta = nbt.getInteger("meta"); + if (nbt.hasKey("col")) + { + this.color = nbt.getInteger("col"); + } + NBTTagCompound tag = nbt.getCompoundTag("sust"); + if (!tag.isEmpty()) + { + this.superState = readBlockState(tag); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("meta", this.meta); + nbt.setInteger("col", this.color); + if (this.superState != null) + { + NBTTagCompound tag = new NBTTagCompound(); + writeBlockState(tag, this.superState); + nbt.setTag("sust", tag); + } + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + //TODO Create datafixer to transition to NBTUtil methods + + /** + * Reads a blockstate from the given tag. In MC1.10+ use NBTUtil instead! + */ + public static IBlockState readBlockState(NBTTagCompound tag) + { + if (!tag.hasKey("Name", 8)) + { + return Blocks.AIR.getDefaultState(); + } else + { + Block block = Block.REGISTRY.getObject(new ResourceLocation(tag.getString("Name"))); + + if (tag.hasKey("Meta")) + { + int meta = tag.getInteger("Meta"); + if (meta >= 0 && meta < 16) + { + return block.getStateFromMeta(meta); + } + } + + return block.getDefaultState(); + } + } + + /** + * Writes the given blockstate to the given tag. In MC1.10+ use NBTUtil + * instead! + */ + public static NBTTagCompound writeBlockState(NBTTagCompound tag, IBlockState state) + { + + tag.setString("Name", Block.REGISTRY.getNameForObject(state.getBlock()).toString()); + tag.setInteger("Meta", state.getBlock().getMetaFromState(state)); + return tag; + } + + public static IBlockState readBlockState(String name, Integer meta) + { + Block block = Block.REGISTRY.getObject(new ResourceLocation(name)); + if (block == null) + { + return Blocks.AIR.getDefaultState(); + } + return block.getStateFromMeta(meta); + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request any networked information from server on first client update + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.world.isRemote) + { + return; + } + + sendData.add((byte) this.meta); + sendData.add(this.color); + if (this.superState != null) + { + Block block = this.superState.getBlock(); + if (block == Blocks.AIR) + { + this.superState = null; + return; + } + + sendData.add(Block.REGISTRY.getNameForObject(block).toString()); + sendData.add((byte) block.getMetaFromState(this.superState)); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world.isRemote) + { + try + { + this.meta = buffer.readByte(); + this.color = buffer.readInt(); + if (buffer.readableBytes() > 0) + { + String name = ByteBufUtils.readUTF8String(buffer); + int otherMeta = buffer.readByte(); + this.superState = readBlockState(name, otherMeta); + this.world.markBlockRangeForRenderUpdate(this.pos, this.pos); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + public boolean getEnabled() + { + return !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityParaChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityParaChest.java new file mode 100644 index 00000000..904b8fde --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityParaChest.java @@ -0,0 +1,313 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Iterator; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; + +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockParaChest; +import micdoodle8.mods.galacticraft.core.entities.IScaleableFuelLevel; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.network.PacketDynamicInventory; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +import io.netty.buffer.ByteBuf; + +public class TileEntityParaChest extends TileEntityAdvanced implements IInventorySettable, IScaleableFuelLevel +{ + + private final int tankCapacity = 5000; + @NetworkedField(targetSide = Side.CLIENT) public FluidTank fuelTank = new FluidTank(this.tankCapacity); + + public boolean adjacentChestChecked = false; + public float lidAngle; + public float prevLidAngle; + public int numUsingPlayers; + @NetworkedField(targetSide = Side.CLIENT) public EnumDyeColor color = EnumDyeColor.RED; + + public TileEntityParaChest() + { + super("container.parachest.name"); + this.color = EnumDyeColor.RED; + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request size + contents information from server + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamicInventory(this)); + } + } + + @Override + public int getScaledFuelLevel(int i) + { + final double fuelLevel = this.fuelTank.getFluid() == null ? 0 : this.fuelTank.getFluid().amount; + + return (int) (fuelLevel * i / this.tankCapacity); + } + + @Override + public void setSizeInventory(int size) + { + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + // Custom size loading, so handle in this class + return false; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + int size = nbt.getInteger("chestContentLength"); + if ((size - 3) % 18 != 0) + { + size += 18 - ((size - 3) % 18); + } + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + + ItemStackHelper.loadAllItems(nbt, this.getInventory()); + + if (nbt.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + + if (nbt.hasKey("color")) + { + this.color = EnumDyeColor.byDyeDamage(nbt.getInteger("color")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setInteger("chestContentLength", this.getInventory().size()); + ItemStackHelper.saveAllItems(nbt, this.getInventory()); + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + + nbt.setInteger("color", this.color.getDyeDamage()); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void updateContainingBlockInfo() + { + super.updateContainingBlockInfo(); + this.adjacentChestChecked = false; + } + + @Override + public void update() + { + super.update(); + float f; + + if (!this.world.isRemote && this.numUsingPlayers != 0 && (this.ticks + this.getPos().getX() + this.getPos().getY() + this.getPos().getZ()) % 200 == 0) + { + this.numUsingPlayers = 0; + f = 5.0F; + List list = this.world.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB(this.getPos().getX() - f, this.getPos().getY() - f, this.getPos().getZ() - f, + this.getPos().getX() + 1 + f, this.getPos().getY() + 1 + f, this.getPos().getZ() + 1 + f)); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) + { + EntityPlayer entityplayer = (EntityPlayer) iterator.next(); + + if (entityplayer.openContainer instanceof ContainerParaChest) + { + ++this.numUsingPlayers; + } + } + } + + this.prevLidAngle = this.lidAngle; + f = 0.1F; + double d0; + + if (this.numUsingPlayers > 0 && this.lidAngle == 0.0F) + { + double d1 = this.getPos().getX() + 0.5D; + d0 = this.getPos().getZ() + 0.5D; + + this.world.playSound(null, d1, this.getPos().getY() + 0.5D, d0, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.numUsingPlayers == 0 && this.lidAngle > 0.0F || this.numUsingPlayers > 0 && this.lidAngle < 1.0F) + { + float f1 = this.lidAngle; + + if (this.numUsingPlayers > 0) + { + this.lidAngle += f; + } else + { + this.lidAngle -= f; + } + + if (this.lidAngle > 1.0F) + { + this.lidAngle = 1.0F; + } + + float f2 = 0.5F; + + if (this.lidAngle < f2 && f1 >= f2) + { + d0 = this.getPos().getX() + 0.5D; + double d2 = this.getPos().getZ() + 0.5D; + + this.world.playSound(null, d0, this.getPos().getY() + 0.5D, d2, SoundEvents.BLOCK_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.lidAngle < 0.0F) + { + this.lidAngle = 0.0F; + } + } + + if (!this.world.isRemote) + { + this.checkFluidTankTransfer(this.getInventory().size() - 1, this.fuelTank); + } + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + FluidUtil.tryFillContainerFuel(tank, this.getInventory(), slot); + } + + @Override + public boolean receiveClientEvent(int par1, int par2) + { + if (par1 == 1) + { + this.numUsingPlayers = par2; + return true; + } else + { + return super.receiveClientEvent(par1, par2); + } + } + + @Override + public void openInventory(EntityPlayer player) + { + if (this.numUsingPlayers < 0) + { + this.numUsingPlayers = 0; + } + + ++this.numUsingPlayers; + this.world.addBlockEvent(this.getPos(), this.getBlockType(), 1, this.numUsingPlayers); + this.world.notifyNeighborsOfStateChange(this.getPos(), this.getBlockType(), false); + this.world.notifyNeighborsOfStateChange(this.getPos().down(), this.getBlockType(), false); + } + + @Override + public void closeInventory(EntityPlayer player) + { + if (this.getBlockType() != null && this.getBlockType() instanceof BlockParaChest) + { + --this.numUsingPlayers; + this.world.addBlockEvent(this.getPos(), this.getBlockType(), 1, this.numUsingPlayers); + this.world.notifyNeighborsOfStateChange(this.getPos(), this.getBlockType(), false); + this.world.notifyNeighborsOfStateChange(this.getPos().down(), this.getBlockType(), false); + } + } + + @Override + public boolean isItemValidForSlot(int par1, ItemStack par2ItemStack) + { + return true; + } + + @Override + public void invalidate() + { + super.invalidate(); + this.updateContainingBlockInfo(); + } + + @Override + public double getPacketRange() + { + return 12.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + EnumDyeColor color = this.color; + + super.decodePacketdata(buffer); + + if (this.world.isRemote && color != this.color) + { + this.world.markBlockRangeForRenderUpdate(getPos(), getPos()); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlatform.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlatform.java new file mode 100644 index 00000000..ba473c0d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlatform.java @@ -0,0 +1,553 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockPlatform; +import micdoodle8.mods.galacticraft.core.blocks.BlockPlatform.EnumCorner; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; + +public class TileEntityPlatform extends TileEntity implements ITickable +{ + + private static final int MAXRANGE = 16; + private int corner = 0; + private AxisAlignedBB detection = null; + private boolean noCollide; + private boolean moving; + private boolean lightOn = false; + private int colorState = 0; // 0 = green 1 = red + private int colorTicks = 0; + private AxisAlignedBB renderAABB; + private int lightA; + private int lightB; + private int deltaY; + private boolean firstTickCheck; + + public TileEntityPlatform() + { + } + + public TileEntityPlatform(int meta) + { + this.corner = (meta > 4 || meta < 0) ? 0 : meta; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.corner = nbt.getInteger("co"); + if (this.corner != 0) + { + this.firstTickCheck = true; + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("co", this.corner); + return nbt; + } + + @Override + public void update() + { + if (this.firstTickCheck && !this.world.isRemote) + { + this.firstTickCheck = !this.checkIntact(); + } + + if (this.corner == 0 && !this.world.isRemote) + { + final List adjacentPlatforms = new LinkedList<>(); + final int thisX = this.getPos().getX(); + final int thisY = this.getPos().getY(); + final int thisZ = this.getPos().getZ(); + + for (int x = -1; x < 1; x++) + { + for (int z = -1; z < 1; z++) + { + BlockPos pos = new BlockPos(x + thisX, thisY, z + thisZ); + final TileEntity tile = this.world.isBlockLoaded(pos, false) ? this.world.getTileEntity(pos) : null; + + if (tile instanceof TileEntityPlatform && !tile.isInvalid() && ((TileEntityPlatform) tile).corner == 0) + { + final TileEntity tileUp = this.world.getTileEntity(pos.up()); + final TileEntity tileDown = this.world.getTileEntity(pos.down()); + if (!(tileUp instanceof TileEntityPlatform) && !(tileDown instanceof TileEntityPlatform)) + { + adjacentPlatforms.add((TileEntityPlatform) tile); + } + } + } + } + + if (adjacentPlatforms.size() == 4) + { + int index = 1; + for (final TileEntityPlatform tile : adjacentPlatforms) + { + tile.setWhole(index++); + ; + } + } + } else if (this.world.isRemote) + { + this.updateClient(); + } + } + + @SideOnly(Side.CLIENT) + private void updateClient() + { + this.lightOn = false; + if (this.colorTicks > 0) + { + if (--this.colorTicks == 0) + { + this.colorState = 0; + } + } + + IBlockState b = this.world.getBlockState(this.getPos()); + if (b.getBlock() == GCBlocks.platform && b.getValue(BlockPlatform.CORNER) == BlockPlatform.EnumCorner.NW) + { + // Scan area for player entities and light up + if (this.detection == null) + { + this.detection = new AxisAlignedBB(this.getPos().getX() + 0.9D, this.getPos().getY() + 0.75D, this.getPos().getZ() + 0.9D, this.getPos().getX() + 1.1D, this.getPos().getY() + 1.85D, + this.getPos().getZ() + 1.1D); + } + final List list = this.world.getEntitiesWithinAABB(EntityPlayer.class, detection); + + if (list.size() > 0) + { + // Light up the platform + this.lightOn = true; + + // If this player is within the box + EntityPlayerSP p = FMLClientHandler.instance().getClientPlayerEntity(); + GCPlayerStatsClient stats = GCPlayerStatsClient.get(p); + if (list.contains(p) && !stats.getPlatformControlled() && p.getRidingEntity() == null) + { + if (p.movementInput.sneak) + { + int canDescend = this.checkNextPlatform(-1); + if (canDescend == -1) + { + this.colorState = 1; + this.colorTicks = 16; + } else if (canDescend > 0) + { + TileEntity te = this.world.getTileEntity(this.pos.down(canDescend)); + if (te instanceof TileEntityPlatform) + { + TileEntityPlatform tep = (TileEntityPlatform) te; + stats.startPlatformAscent(this, tep, this.pos.getY() - canDescend + (this.world.provider instanceof IZeroGDimension ? 0.97D : (double) BlockPlatform.HEIGHT)); + this.startMove(tep); + tep.startMove(this); + } + } + } else if (p.movementInput.jump) + { + int canAscend = this.checkNextPlatform(1); + if (canAscend == -1) + { + this.colorState = 1; + this.colorTicks = 16; + } else if (canAscend > 0) + { + TileEntity te = this.world.getTileEntity(this.pos.up(canAscend)); + if (te instanceof TileEntityPlatform) + { + p.motionY = 0D; + TileEntityPlatform tep = (TileEntityPlatform) te; + stats.startPlatformAscent(tep, this, this.pos.getY() + canAscend + BlockPlatform.HEIGHT + 0.01D); + this.startMove(tep); + tep.startMove(this); + } + } + } + } + } + } + } + + @SideOnly(Side.CLIENT) + private void startMove(TileEntityPlatform te) + { + this.moving = true; + this.lightA = this.getBlendedLight(); + this.lightB = te.getBlendedLight(); + this.deltaY = te.getPos().getY() - this.getPos().getY(); + } + + /** + * @return 0 for no platform, range for good platform, -1 for blocked + * platform + */ + private int checkNextPlatform(int dir) + { + final int thisX = this.getPos().getX(); + final int thisY = this.getPos().getY(); + final int thisZ = this.getPos().getZ(); + int maxY = thisY + MAXRANGE * dir; + if (maxY > 255) + maxY = 255; + if (maxY < 0) + maxY = 0; + + for (int y = thisY + dir; y != maxY; y += dir) + { + int c1 = this.checkCorner(new BlockPos(thisX, y, thisZ), BlockPlatform.EnumCorner.NW); + if (c1 >= 2) + return c1 - 3; + c1 += this.checkCorner(new BlockPos(thisX + 1, y, thisZ), BlockPlatform.EnumCorner.NE) * 4; + if (c1 >= 8) + return c1 - 3; + c1 += this.checkCorner(new BlockPos(thisX, y, thisZ + 1), BlockPlatform.EnumCorner.SW) * 16; + if (c1 >= 32) + return c1 - 3; + c1 += this.checkCorner(new BlockPos(thisX + 1, y, thisZ + 1), BlockPlatform.EnumCorner.SE) * 64; + if (c1 >= 128) + return c1 - 3; + // Good platform on all four corners + if (c1 == 0) + continue; + if (this.motionObstructed(thisY + 1, y - thisY)) + { + return -1; + } + return (y - thisY) * dir; + } + return 0; + } + + /** + * @return 0 for air, 1 for good platform, 2 for blocked platform, 3 for + * block + */ + private int checkCorner(BlockPos blockPos, EnumCorner corner) + { + IBlockState b = this.world.getBlockState(blockPos); + if (b.getBlock() instanceof BlockAir) + { + return 0; + } + if (b.getBlock() == GCBlocks.platform && b.getValue(BlockPlatform.CORNER) == corner) + { + return (this.world.getBlockState(blockPos.up(1)).causesSuffocation() || this.world.getBlockState(blockPos.up(2)).causesSuffocation()) ? 2 : 1; + } + if (b.causesSuffocation() || b.getBlock().isFullBlock(b)) + { + return 3; + } + return 0; + } + + private void setWhole(int index) + { + this.corner = index; + this.world.setBlockState(this.getPos(), GCBlocks.platform.getDefaultState().withProperty(BlockPlatform.CORNER, EnumCorner.byMetadata(index))); + } + + public void onDestroy(TileEntity callingBlock) + { + if (this.corner > 0) + { + resetBlocks(); + } + this.world.destroyBlock(this.pos, true); + } + + private void resetBlocks() + { + List positions = new ArrayList<>(); + this.getPositions(this.pos, positions); + + for (BlockPos pos : positions) + { + if (this.world.isBlockLoaded(pos, false) && this.world.getBlockState(pos).getBlock() == GCBlocks.platform) + { + final TileEntity tile = this.world.getTileEntity(pos); + if (tile instanceof TileEntityPlatform) + { + ((TileEntityPlatform) tile).setWhole(0); + } + } + } + } + + public void getPositions(BlockPos blockPos, List positions) + { + int x = blockPos.getX(); + int y = blockPos.getY(); + int z = blockPos.getZ(); + switch (this.corner) + { + case 0: + break; + case 1: + positions.add(new BlockPos(x + 1, y, z)); + positions.add(new BlockPos(x, y, z + 1)); + positions.add(new BlockPos(x + 1, y, z + 1)); + break; + case 2: + positions.add(new BlockPos(x + 1, y, z)); + positions.add(new BlockPos(x, y, z - 1)); + positions.add(new BlockPos(x + 1, y, z - 1)); + break; + case 3: + positions.add(new BlockPos(x - 1, y, z)); + positions.add(new BlockPos(x, y, z + 1)); + positions.add(new BlockPos(x - 1, y, z + 1)); + break; + case 4: + positions.add(new BlockPos(x - 1, y, z)); + positions.add(new BlockPos(x, y, z - 1)); + positions.add(new BlockPos(x - 1, y, z - 1)); + break; + } + } + + private boolean checkIntact() + { + IBlockState bs = this.world.getBlockState(this.pos); + if (bs.getBlock() != GCBlocks.platform || ((BlockPlatform.EnumCorner) bs.getValue(BlockPlatform.CORNER)).getMeta() != this.corner) + { + this.resetBlocks(); + return false; + } + int x = this.pos.getX(); + int y = this.pos.getY(); + int z = this.pos.getZ(); + int count = 0; + switch (this.corner) + { + case 0: + count = 3; + break; + case 1: + count += checkState(new BlockPos(x + 1, y, z), 3); + count += checkState(new BlockPos(x, y, z + 1), 2); + count += checkState(new BlockPos(x + 1, y, z + 1), 4); + break; + case 2: + count += checkState(new BlockPos(x + 1, y, z), 4); + count += checkState(new BlockPos(x, y, z - 1), 1); + count += checkState(new BlockPos(x + 1, y, z - 1), 3); + break; + case 3: + count += checkState(new BlockPos(x - 1, y, z), 1); + count += checkState(new BlockPos(x, y, z + 1), 4); + count += checkState(new BlockPos(x - 1, y, z + 1), 2); + break; + case 4: + count += checkState(new BlockPos(x - 1, y, z), 2); + count += checkState(new BlockPos(x, y, z - 1), 3); + count += checkState(new BlockPos(x - 1, y, z - 1), 1); + break; + } + + if (count >= 3) + { + return count == 3; + } + + this.resetBlocks(); + return true; + } + + private int checkState(BlockPos blockPos, int meta) + { + if (!this.world.isBlockLoaded(blockPos, false)) + return 4; + + IBlockState bs = this.world.getBlockState(blockPos); + if (bs.getBlock() == GCBlocks.platform && ((BlockPlatform.EnumCorner) bs.getValue(BlockPlatform.CORNER)).getMeta() == meta) + { + final TileEntity tile = this.world.getTileEntity(blockPos); + if (tile instanceof TileEntityPlatform) + { + ((TileEntityPlatform) tile).corner = meta; + ((TileEntityPlatform) tile).firstTickCheck = false; + return 1; + } + } + + return 0; + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) + { + return oldState.getBlock() != newState.getBlock(); + } + + public boolean noCollide() + { + return this.noCollide; + } + + public void markNoCollide(int y, boolean b) + { + TileEntity te; + final int x = this.getPos().getX(); + final int z = this.getPos().getZ(); + y += this.getPos().getY(); + te = this.world.getTileEntity(new BlockPos(x, y, z)); + if (te instanceof TileEntityPlatform) + { + ((TileEntityPlatform) te).noCollide = b; + } + te = this.world.getTileEntity(new BlockPos(x + 1, y, z)); + if (te instanceof TileEntityPlatform) + { + ((TileEntityPlatform) te).noCollide = b; + } + te = this.world.getTileEntity(new BlockPos(x, y, z + 1)); + if (te instanceof TileEntityPlatform) + { + ((TileEntityPlatform) te).noCollide = b; + } + te = this.world.getTileEntity(new BlockPos(x + 1, y, z + 1)); + if (te instanceof TileEntityPlatform) + { + ((TileEntityPlatform) te).noCollide = b; + } + } + + public boolean lightEnabled() + { + return this.lightOn; + } + + public int lightColor() + { + return this.colorState; + } + + public boolean isMoving() + { + return this.moving; + } + + public void stopMoving() + { + this.moving = false; + } + + @SideOnly(Side.CLIENT) + public float getYOffset(float partialTicks) + { + if (this.moving) + { + EntityPlayerSP p = FMLClientHandler.instance().getClientPlayerEntity(); + float playerY = (float) (p.lastTickPosY + (p.posY - p.lastTickPosY) * (double) partialTicks); + return (playerY - this.pos.getY() - BlockPlatform.HEIGHT); + } else + return 0.0F; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(this.pos.add(-1, -18, -1), this.pos.add(1, 18, 1)); + } + return this.renderAABB; + } + + @SideOnly(Side.CLIENT) + public int getBlendedLight() + { + int j = 0, k = 0; + int light = this.world.getCombinedLight(this.getPos().up(), 0); + j += light % 65536; + k += light / 65536; + light = this.world.getCombinedLight(this.getPos().add(1, 1, 0), 0); + j += light % 65536; + k += light / 65536; + light = this.world.getCombinedLight(this.getPos().add(0, 1, 1), 0); + j += light % 65536; + k += light / 65536; + light = this.world.getCombinedLight(this.getPos().add(1, 1, 1), 0); + j += light % 65536; + k += light / 65536; + return j / 4 + k * 16384; + } + + @SideOnly(Side.CLIENT) + public float getMeanLightX(float yOffset) + { + float a = (float) (this.lightA % 65536); + float b = (float) (this.lightB % 65536); + float f = yOffset / deltaY; + return (1 - f) * a + f * b; + } + + @SideOnly(Side.CLIENT) + public float getMeanLightZ(float yOffset) + { + float a = (float) (this.lightA / 65536); + float b = (float) (this.lightB / 65536); + float f = yOffset / deltaY; + return (1 - f) * a + f * b; + } + + @SideOnly(Side.CLIENT) + public boolean motionObstructed(double y, double velocityY) + { + EntityPlayerSP p = FMLClientHandler.instance().getClientPlayerEntity(); + int x = this.pos.getX() + 1; + int z = this.pos.getZ() + 1; + double size = 9 / 16D; + double height = p.height + velocityY; + double depth = velocityY < 0D ? 0.179D : 0D; + AxisAlignedBB bb = new AxisAlignedBB(x - size, y - depth, z - size, x + size, y + height, z + size); + BlockPlatform.ignoreCollisionTests = true; + boolean obstructed = !this.world.getCollisionBoxes(p, bb).isEmpty(); + BlockPlatform.ignoreCollisionTests = false; + return obstructed; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlayerDetector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlayerDetector.java new file mode 100644 index 00000000..3e4fc9be --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlayerDetector.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedDetector; + +public class TileEntityPlayerDetector extends TileEntity implements ITickable +{ + + private int ticks = 24; + private AxisAlignedBB playerSearch; + private boolean result = false; + + @Override + public void update() + { + if (!this.world.isRemote && ++this.ticks >= 25) + { + this.ticks = 0; + int facing = 0; + IBlockState state = this.world.getBlockState(this.pos); + if (state.getBlock() == GCBlocks.concealedDetector) + { + facing = state.getValue(BlockConcealedDetector.FACING); + } + int x = this.getPos().getX(); + double y = this.getPos().getY(); + int z = this.getPos().getZ(); + double range = 14D; + double hysteresis = result ? 3D : 0D; + switch (facing) + { + case 0: + this.playerSearch = + new AxisAlignedBB(x - range / 2 + 0.5D - hysteresis, y - 6 - hysteresis, z - range - hysteresis, x + range / 2 + 0.5D + hysteresis, y + 2 + hysteresis, z + hysteresis); + break; + case 1: + this.playerSearch = + new AxisAlignedBB(x + 1 - hysteresis, y - 6 - hysteresis, z - range / 2 + 0.5D - hysteresis, x + range + 1 + hysteresis, y + 2 + hysteresis, z + range / 2 + 0.5D + hysteresis); + break; + case 2: + // South + this.playerSearch = new AxisAlignedBB(x - range / 2 + 0.5D - hysteresis, y - 6 - hysteresis, z + 1 - hysteresis, x + range / 2 + 0.5D + hysteresis, y + 2 + hysteresis, + z + range + 1D + hysteresis); + break; + case 3: + this.playerSearch = + new AxisAlignedBB(x - range - hysteresis, y - 6 - hysteresis, z - range / 2 + 0.5D - hysteresis, x + hysteresis, y + 2 + hysteresis, z + range / 2 + 0.5D + hysteresis); + } + result = !this.world.getEntitiesWithinAABB(EntityPlayer.class, playerSearch).isEmpty(); + if (this.getBlockType() instanceof BlockConcealedDetector) + { + ((BlockConcealedDetector) this.blockType).updateState(this.world, this.getPos(), result); + } + } + } + + public boolean detectingPlayer() + { + return result; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityRefinery.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityRefinery.java new file mode 100644 index 00000000..296d343e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityRefinery.java @@ -0,0 +1,425 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import javax.annotation.Nullable; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockRefinery; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; + +public class TileEntityRefinery extends TileBaseElectricBlockWithInventory implements ISidedInventory, IFluidHandlerWrapper +{ + + private final int tankCapacity = 24000; + @NetworkedField(targetSide = Side.CLIENT) public FluidTank oilTank = new FluidTank(this.tankCapacity); + @NetworkedField(targetSide = Side.CLIENT) public FluidTank fuelTank = new FluidTank(this.tankCapacity); + + public static final int PROCESS_TIME_REQUIRED = 2; + public static final int OUTPUT_PER_SECOND = 1; + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + + public TileEntityRefinery() + { + super("container.refinery.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 60); + this.oilTank.setFluid(new FluidStack(GCFluids.fluidOil, 0)); + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, 0)); + this.inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + final FluidStack liquid = FluidUtil.getFluidContained(this.getInventory().get(1)); + if (FluidUtil.isOil(liquid)) + { + FluidUtil.loadFromContainer(this.oilTank, GCFluids.fluidOil, this.getInventory(), 1, liquid.amount); + } + + checkFluidTankTransfer(2, this.fuelTank); + + if (this.canProcess() && this.hasEnoughEnergyToRun) + { + if (this.processTicks == 0) + { + this.processTicks = this.getProcessTimeRequired(); + } else + { + if (--this.processTicks <= 0) + { + this.smeltItem(); + this.processTicks = this.canProcess() ? this.getProcessTimeRequired() : 0; + } + } + } else + { + this.processTicks = 0; + } + } + } + + private int getProcessTimeRequired() + { + return (this.poweredByTierGC > 1) ? 1 : TileEntityRefinery.PROCESS_TIME_REQUIRED; + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + FluidUtil.tryFillContainerFuel(tank, this.getInventory(), slot); + } + + public int getScaledOilLevel(int i) + { + return this.oilTank.getFluidAmount() * i / this.oilTank.getCapacity(); + } + + public int getScaledFuelLevel(int i) + { + return this.fuelTank.getFluidAmount() * i / this.fuelTank.getCapacity(); + } + + public boolean canProcess() + { + if (this.oilTank.getFluidAmount() <= 0) + { + return false; + } + + if (this.fuelTank.getFluidAmount() >= this.fuelTank.getCapacity()) + { + return false; + } + + return !this.getDisabled(0); + + } + + public void smeltItem() + { + if (this.canProcess()) + { + final int oilAmount = this.oilTank.getFluidAmount(); + final int fuelSpace = this.fuelTank.getCapacity() - this.fuelTank.getFluidAmount(); + + final int amountToDrain = Math.min(Math.min(oilAmount, fuelSpace), TileEntityRefinery.OUTPUT_PER_SECOND); + + this.oilTank.drain(amountToDrain, true); + this.fuelTank.fill(FluidRegistry.getFluidStack(ConfigManagerCore.useOldFuelFluidID ? "fuelgc" : "fuel", amountToDrain), true); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + + if (nbt.hasKey("oilTank")) + { + this.oilTank.readFromNBT(nbt.getCompoundTag("oilTank")); + } + if (this.oilTank.getFluid() != null && this.oilTank.getFluid().getFluid() != GCFluids.fluidOil) + { + this.oilTank.setFluid(new FluidStack(GCFluids.fluidOil, this.oilTank.getFluidAmount())); + } + + if (nbt.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + if (this.fuelTank.getFluid() != null && this.fuelTank.getFluid().getFluid() != GCFluids.fluidFuel) + { + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, this.fuelTank.getFluidAmount())); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + if (this.oilTank.getFluid() != null) + { + nbt.setTag("oilTank", this.oilTank.writeToNBT(new NBTTagCompound())); + } + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (!itemstack.isEmpty() && this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return FluidUtil.isOilContainerAny(itemstack); + case 2: + return FluidUtil.isPartialContainer(itemstack, GCItems.fuelCanister); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (!itemstack.isEmpty() && this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack) || !this.shouldPullEnergy(); + case 1: + return FluidUtil.isEmptyContainer(itemstack); + case 2: + return FluidUtil.isFullContainer(itemstack); + default: + return false; + } + } + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return !itemstack.isEmpty() && ItemElectricBase.isElectricItem(itemstack.getItem()); + case 1: + case 2: + return FluidUtil.isValidContainer(itemstack); + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.UP; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockRefinery) + { + return state.getValue(BlockRefinery.FACING); + } + return EnumFacing.NORTH; + } + + private EnumFacing getOilPipe() + { + return byIndex().rotateY(); + } + + private EnumFacing getFuelPipe() + { + return byIndex().rotateYCCW(); + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + if (from == getFuelPipe()) + { + return this.fuelTank.getFluid() != null && this.fuelTank.getFluidAmount() > 0; + } + + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + if (from == getFuelPipe() && resource != null) + { + return this.fuelTank.drain(resource.amount, doDrain); + } + + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + if (from == getFuelPipe()) + { + return this.drain(from, new FluidStack(GCFluids.fluidFuel, maxDrain), doDrain); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (from == getOilPipe()) + { + return this.oilTank.getFluid() == null || this.oilTank.getFluidAmount() < this.oilTank.getCapacity(); + } + + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (from == getOilPipe() && resource != null) + { + final String liquidName = FluidRegistry.getFluidName(resource); + + if (liquidName != null && FluidUtil.testOil(liquidName)) + { + if (liquidName.equals(GCFluids.fluidOil.getName())) + { + used = this.oilTank.fill(resource, doFill); + } else + { + used = this.oilTank.fill(new FluidStack(GCFluids.fluidOil, resource.amount), doFill); + } + } + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTankInfo[] tankInfo = new FluidTankInfo[] + {}; + + if (from == getOilPipe()) + { + tankInfo = new FluidTankInfo[] + {new FluidTankInfo(this.oilTank)}; + } else if (from == getFuelPipe()) + { + tankInfo = new FluidTankInfo[] + {new FluidTankInfo(this.fuelTank)}; + } + + return tankInfo; + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + if (type == NetworkType.FLUID) + { + EnumFacing pipeSide = getFuelPipe(); + return direction == pipeSide || direction == pipeSide.getOpposite(); + } + return false; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityScreen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityScreen.java new file mode 100644 index 00000000..b1d6f237 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityScreen.java @@ -0,0 +1,1413 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockScreen; +import micdoodle8.mods.galacticraft.core.client.screen.DrawGameScreen; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; + +public class TileEntityScreen extends TileEntityAdvanced implements ITileClientUpdates +{ + + public static float FRAMEBORDER = 0.098F; // used for rendering + public int imageType; + public DrawGameScreen screen; + public boolean connectedUp; + public boolean connectedDown; + public boolean connectedLeft; + public boolean connectedRight; + public int connectionsUp; + public int connectionsDown; + public int connectionsLeft; + public int connectionsRight; + public boolean isMultiscreen; + + public int screenOffsetx = 0; + public int screenOffsetz = 0; + + private int requiresUpdate = 0; + private boolean doneClientUpdate = false; + // Used on client side only + public boolean refreshOnUpdate = false; + private AxisAlignedBB renderAABB; + private static final boolean LOGGING = false; + + public TileEntityScreen() + { + super("tile.view_screen.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + public void setConnectedUp(boolean connectedUpL) + { + this.connectedUp = connectedUpL; + } + + public void setConnectedDown(boolean connectedDownL) + { + this.connectedDown = connectedDownL; + } + + public void setConnectedLeft(boolean connectedLeftL) + { + this.connectedLeft = connectedLeftL; + } + + public void setConnectedRight(boolean connectedRightL) + { + this.connectedRight = connectedRightL; + } + + public TileEntity setVerifiedConnectedUp(BlockVec3 vec, int meta) + { + TileEntity tileUp = vec.getTileEntityOnSide(this.world, 1); + this.setConnectedUp(tileUp instanceof TileEntityScreen && tileUp.getBlockMetadata() == meta && !tileUp.isInvalid()); + return tileUp; + } + + public TileEntity setVerifiedConnectedDown(BlockVec3 vec, int meta) + { + TileEntity tileDown = vec.getTileEntityOnSide(this.world, 0); + this.setConnectedDown(tileDown instanceof TileEntityScreen && tileDown.getBlockMetadata() == meta && !tileDown.isInvalid()); + return tileDown; + } + + public TileEntity setVerifiedConnectedLeft(BlockVec3 vec, int meta) + { + int side = this.getLeft(meta); + TileEntity tileLeft = vec.getTileEntityOnSide(this.world, side); + this.setConnectedLeft(tileLeft instanceof TileEntityScreen && tileLeft.getBlockMetadata() == meta && !tileLeft.isInvalid()); + return tileLeft; + } + + public TileEntity setVerifiedConnectedRight(BlockVec3 vec, int meta) + { + int side = this.getRight(meta); + TileEntity tileRight = vec.getTileEntityOnSide(this.world, side); + this.setConnectedRight(tileRight instanceof TileEntityScreen && tileRight.getBlockMetadata() == meta && !tileRight.isInvalid()); + return tileRight; + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + this.clientOnLoad(); + this.screen = new DrawGameScreen(1.0F, 1.0F, this); + } + } + + @Override + public void buildDataPacket(int[] data) + { + data[0] = this.imageType; + int connectedFlags = 0; + if (this.connectedUp) + { + connectedFlags += 8; + } + if (this.connectedDown) + { + connectedFlags += 4; + } + if (this.connectedLeft) + { + connectedFlags += 2; + } + if (this.connectedRight) + { + connectedFlags += 1; + } + data[1] = connectedFlags; + } + + public EnumFacing byIndex() + { + return this.getFacing(this.world.getBlockState(getPos())); + } + + private EnumFacing getFacing(IBlockState state) + { + return state.getValue(BlockScreen.FACING); + } + + /** + * Call when a screen (which maybe part of a multiscreen) is either broken + * or rotated. + * + * @param state The state of the screen prior to breaking or rotation + */ + public void breakScreen(IBlockState state) + { + BlockVec3 vec = new BlockVec3(this); + int meta = state.getBlock().getMetaFromState(state); + TileEntity tile; + EnumFacing facingRight = getFacing(state).rotateY(); + + int left = this.connectionsLeft; + int right = this.connectionsRight; + int up = this.connectionsUp; + int down = this.connectionsDown; + + boolean doUp = this.connectedUp; + boolean doDown = this.connectedDown; + boolean doLeft = this.connectedLeft; + boolean doRight = this.connectedRight; + + for (int x = -left; x <= right; x++) + { + for (int z = -up; z <= down; z++) + { + if (x == 0 && z == 0) + { + this.resetToSingle(); + } else + { + BlockVec3 newVec = vec.clone().modifyPositionFromSide(facingRight, x).modifyPositionFromSide(EnumFacing.DOWN, z); + tile = newVec.getTileEntity(this.world); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta) + { + ((TileEntityScreen) tile).resetToSingle(); + } + } + } + } + + // TODO Try to generate largest screen possible out of remaining blocks + + this.setConnectedDown(false); + this.setConnectedUp(false); + this.setConnectedLeft(false); + this.setConnectedRight(false); + + if (doUp) + { + tile = vec.getTileEntityOnSide(this.world, 1); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + if (doLeft) + { + ((TileEntityScreen) tile).setConnectedLeft(true); + } + if (doRight) + { + ((TileEntityScreen) tile).setConnectedRight(true); + } + ((TileEntityScreen) tile).setConnectedUp(true); +// if (doLeft) ((TileEntityScreen)tile).connectedLeft = true; +// if (doRight) ((TileEntityScreen)tile).connectedRight = true; +// ((TileEntityScreen)tile).connectedUp = true; + ((TileEntityScreen) tile).refreshConnections(true); + } + } + if (doDown) + { + tile = vec.getTileEntityOnSide(this.world, 0); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + if (doLeft) + { + ((TileEntityScreen) tile).setConnectedLeft(true); + } + if (doRight) + { + ((TileEntityScreen) tile).setConnectedRight(true); + } + ((TileEntityScreen) tile).setConnectedDown(true); +// if (doLeft) ((TileEntityScreen)tile).connectedLeft = true; +// if (doRight) ((TileEntityScreen)tile).connectedRight = true; +// ((TileEntityScreen)tile).connectedDown = true; + ((TileEntityScreen) tile).refreshConnections(true); + } + } + if (doLeft) + { + tile = vec.getTileEntityOnSide(this.world, this.getLeft(meta)); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + if (doUp) + { + ((TileEntityScreen) tile).setConnectedUp(true); + } + if (doDown) + { + ((TileEntityScreen) tile).setConnectedDown(true); + } + ((TileEntityScreen) tile).setConnectedLeft(true); +// if (doUp) ((TileEntityScreen)tile).connectedUp = true; +// if (doDown) ((TileEntityScreen)tile).connectedDown = true; +// ((TileEntityScreen)tile).connectedLeft = true; + ((TileEntityScreen) tile).refreshConnections(true); + } + } + if (doRight) + { + tile = vec.getTileEntityOnSide(this.world, this.getRight(meta)); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + if (doUp) + { + ((TileEntityScreen) tile).setConnectedUp(true); + } + if (doDown) + { + ((TileEntityScreen) tile).setConnectedDown(true); + } + ((TileEntityScreen) tile).setConnectedRight(true); +// if (doUp) ((TileEntityScreen)tile).connectedUp = true; +// if (doDown) ((TileEntityScreen)tile).connectedDown = true; +// ((TileEntityScreen)tile).connectedRight = true; + ((TileEntityScreen) tile).refreshConnections(true); + } + } + } + + /** + * Check whether the screen can sustain 'multi-screen' connections on each + * of its 4 sides (note: this can be called recursively from inside itself) + * + * @param doScreen If true, build a new multi-screen if connections are + * found + */ + public void refreshConnections(boolean doScreen) + { + if (LOGGING) + this.log("Starting connection check"); + + IBlockState iblockstate = this.world.getBlockState(this.pos); + EnumFacing facing = iblockstate.getValue(BlockScreen.FACING); + + int meta = this.getBlockMetadata() & 7; + if (meta < 2) + { + // TODO System.out.println("Up/down oriented screens cannot be + // multiscreen"); + this.resetToSingle(); + return; + } + + TileEntity tileUp = null; + TileEntity tileDown = null; + TileEntity tileLeft = null; + TileEntity tileRight = null; + BlockVec3 vec = new BlockVec3(this); + + // First, basic check that a neighbour is there and in the same + // orientation + if (this.connectedUp) + { + tileUp = this.setVerifiedConnectedUp(vec, meta); + } + if (this.connectedDown) + { + tileDown = this.setVerifiedConnectedDown(vec, meta); + } + if (this.connectedLeft) + { + tileLeft = this.setVerifiedConnectedLeft(vec, meta); + } + if (this.connectedRight) + { + tileRight = this.setVerifiedConnectedRight(vec, meta); + } + + // Now test whether a connection can be sustained with that other tile + if (this.connectedUp) + { + this.setConnectedUp(this.tryConnectUp((TileEntityScreen) tileUp)); + } + + if (this.connectedDown) + { + this.setConnectedDown(this.tryConnectDown((TileEntityScreen) tileDown)); + } + + if (this.connectedLeft) + { + this.setConnectedLeft(this.tryConnectLeft((TileEntityScreen) tileLeft)); + } + + if (this.connectedRight) + { + this.setConnectedRight(this.tryConnectRight((TileEntityScreen) tileRight)); + } + if (LOGGING) + this.log("Ending connection check"); + if (doScreen) + { + this.checkScreenSize(); + this.markDirty(); + } + } + +// @Override +// public boolean canUpdate() +// { +// return false; +// } + + /** + * Cycle through different screen contents + */ + public void changeChannel() + { + if (!this.world.isRemote) + { + if (++this.imageType >= GalacticraftRegistry.getMaxScreenTypes()) + { + this.imageType = 0; + } + + boolean flag = false; + + if (!this.connectedRight && this.canJoinRight()) + { + this.joinRight(); + flag = true; + } else if (!this.connectedLeft && this.canJoinLeft()) + { + this.joinLeft(); + flag = true; + } else if (!this.connectedUp && this.canJoinUp()) + { + this.joinUp(); + flag = true; + } else if (!this.connectedDown && this.canJoinDown()) + { + this.joinDown(); + flag = true; + } + + this.doneClientUpdate = false; + this.refreshConnections(true); + this.markDirty(); + + if (!this.doneClientUpdate) + { + this.updateAllInDimension(); + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.imageType = nbt.getInteger("type"); + this.connectionsDown = nbt.getInteger("connectionsDown"); + this.connectionsUp = nbt.getInteger("connectionsUp"); + this.connectionsLeft = nbt.getInteger("connectionsLeft"); + this.connectionsRight = nbt.getInteger("connectionsRight"); + this.isMultiscreen = nbt.getBoolean("multiscreen"); + this.setConnectedUp(this.connectionsUp > 0); + this.setConnectedDown(this.connectionsDown > 0); + this.setConnectedLeft(this.connectionsLeft > 0); + this.setConnectedRight(this.connectionsRight > 0); +// this.connectedUp = (this.connectionsUp > 0); +// this.connectedDown = (this.connectionsDown > 0); +// this.connectedLeft = (this.connectionsLeft > 0); +// this.connectedRight = (this.connectionsRight > 0); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("type", this.imageType); + nbt.setInteger("connectionsDown", this.connectionsDown); + nbt.setInteger("connectionsUp", this.connectionsUp); + nbt.setInteger("connectionsLeft", this.connectionsLeft); + nbt.setInteger("connectionsRight", this.connectionsRight); + nbt.setBoolean("multiscreen", this.isMultiscreen); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public void checkScreenSize() + { + if (LOGGING) + this.log("Checking screen size"); + int up = 0; + int down = 0; + int left = 0; + int right = 0; + int meta = this.getBlockMetadata() & 7; + + BlockVec3 vec = new BlockVec3(this); + TileEntityScreen tile = this; + while (up < 8) + { + if (tile.connectedUp) + { + up++; + TileEntity newTile = vec.getTileEntityOnSide(this.world, 1); + if (newTile instanceof TileEntityScreen) + { + tile = (TileEntityScreen) newTile; + vec.translate(0, 1, 0); + } else + { + System.out.println("Debug - connected up to a non-screen tile"); +// tile.connectedUp = false; + this.setConnectedUp(false); + tile.markDirty(); + up--; + break; + } + } else + { + break; + } + } + + vec = new BlockVec3(this); + tile = this; + while (down < 8 - up) + { + if (tile.connectedDown) + { + down++; + TileEntity newTile = vec.getTileEntityOnSide(this.world, 0); + if (newTile instanceof TileEntityScreen) + { + tile = (TileEntityScreen) newTile; + vec.translate(0, -1, 0); + } else + { + System.out.println("Debug - connected down to a non-screen tile"); +// tile.connectedDown = false; + this.setConnectedDown(false); + tile.markDirty(); + down--; + break; + } + } else + { + break; + } + } + + vec = new BlockVec3(this); + tile = this; + int leftside = this.getLeft(meta); + while (left < ((up + down == 0) ? 1 : 8)) + { + if (tile.connectedLeft) + { + left++; + TileEntity newTile = vec.getTileEntityOnSide(this.world, leftside); + if (newTile instanceof TileEntityScreen) + { + tile = (TileEntityScreen) newTile; + vec = vec.newVecSide(leftside); + } else + { + System.out.println("Debug - connected left to a non-screen tile"); +// tile.connectedLeft = false; + this.setConnectedLeft(false); + tile.markDirty(); + left--; + break; + } + } else + { + break; + } + } + + vec = new BlockVec3(this); + tile = this; + int rightside = this.getRight(meta); + while (right < ((up + down == 0) ? 1 : 8) - left) + { + if (tile.connectedRight) + { + right++; + TileEntity newTile = vec.getTileEntityOnSide(this.world, rightside); + if (newTile instanceof TileEntityScreen) + { + tile = (TileEntityScreen) newTile; + vec = vec.newVecSide(rightside); + } else + { + System.out.println("Debug - connected right to a non-screen tile"); +// tile.connectedRight = false; + this.setConnectedRight(false); + tile.markDirty(); + right--; + break; + } + } else + { + break; + } + } + + if (LOGGING) + this.log("Screen size check midpoint " + up + " " + down + " " + left + " " + right + " "); + + vec = new BlockVec3(this); + TileEntity newtile = vec.getTileEntityOnSide(this.world, 1); + TileEntityScreen tileUp = (newtile instanceof TileEntityScreen) ? (TileEntityScreen) newtile : null; + newtile = vec.getTileEntityOnSide(this.world, 0); + TileEntityScreen tileDown = (newtile instanceof TileEntityScreen) ? (TileEntityScreen) newtile : null; + newtile = vec.getTileEntityOnSide(this.world, leftside); + TileEntityScreen tileLeft = (newtile instanceof TileEntityScreen) ? (TileEntityScreen) newtile : null; + newtile = vec.getTileEntityOnSide(this.world, rightside); + TileEntityScreen tileRight = (newtile instanceof TileEntityScreen) ? (TileEntityScreen) newtile : null; + // Prevent 3 x 1 and longer + if (left + right == 0 && up + down >= 1) + { + if (up > 0 && !tileUp.connectedUp) // No need for null check if up > + // 0 + { + up = 1; + down = 0; + } else + { + up = 0; + if (tileDown != null && !tileDown.connectedDown) + { + down = 1; + } else + { + down = 0; + } + } + } + if (up + down == 0 && left + right >= 1) + { + if (left > 0 && !tileLeft.connectedLeft) // No need for null check + // if right > 0 + { + if (right == 0 || tileRight == null || tileRight.connectionsLeft == 0) + { + left = 1; + right = 0; + } else + { + left = 0; + right = 1; + } + } else + { + left = 0; + if (tileRight != null && !tileRight.connectedRight) + { + right = 1; + } else + { + right = 0; + } + } + } + + if (up == 0) + { + this.setConnectedUp(false); + if (tileUp != null) + { + tileUp.setConnectedDown(false); + } +// this.connectedUp = false; +// if (tileUp != null) tileUp.connectedDown = false; + } + if (down == 0) + { + this.setConnectedDown(false); + if (tileUp != null) + { + tileUp.setConnectedUp(false); + } +// this.connectedDown = false; +// if (tileDown != null) tileDown.connectedUp = false; + } + if (left == 0) + { + this.setConnectedLeft(false); + if (tileUp != null) + { + tileUp.setConnectedRight(false); + } +// this.connectedLeft = false; +// if (tileLeft != null) tileLeft.connectedRight = false; + } + if (right == 0) + { + this.setConnectedRight(false); + if (tileUp != null) + { + tileUp.setConnectedLeft(false); + } +// this.connectedRight = false; +// if (tileRight != null) tileRight.connectedLeft = false; + } + + if (LOGGING) + this.log("Finished screen size check"); + + this.checkWholeScreen(up, down, left, right); + } + + /** + * After figuring out the screen edges (overall screen dimensions) check + * that the screen is a whole A x B rectangle with no tiles missing

If + * it is whole, set all tiles in the screen to match this screen type + * + * @param up Number of blocks the screen edge is away from this in the up + * direction + * @param down Number of blocks the screen edge is away from this in the + * down direction + * @param left Number of blocks the screen edge is away from this in the + * left direction + * @param right Number of blocks the screen edge is away from this in the + * right direction + * @return True if the screen was whole + */ + private boolean checkWholeScreen(int up, int down, int left, int right) + { + if (up + down + left + right == 0 || up < 0 || down < 0 || left < 0 || right < 0) + { + this.doneClientUpdate = true; + this.resetToSingle(); + return true; + } + + // System.out.println("Checking screen size at + // "+this.getPos().getX()+","+this.getPos().getZ()+": Up "+up+" Dn + // "+down+" Lf "+left+" Rg "+right); + + boolean screenWhole = true; + boolean existingScreen = false; + int barrierUp = up; + int barrierDown = down; + int barrierLeft = left; + int barrierRight = right; + + int meta = this.getBlockMetadata() & 7; + BlockVec3 vec = new BlockVec3(this); + ArrayList screenList = new ArrayList(); + +// int side = this.getRight(meta); + EnumFacing side = byIndex().rotateY(); + + for (int x = -left; x <= right; x++) + { + for (int z = -up; z <= down; z++) + { + BlockVec3 newVec = vec.clone().modifyPositionFromSide(side, x).modifyPositionFromSide(EnumFacing.DOWN, z); + TileEntity tile = newVec.getTileEntity(this.world); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; + screenList.add(screenTile); + + if (screenTile.isMultiscreen) + { + if (screenTile.connectionsUp > z + up) + { + barrierUp = -z - 1; + existingScreen = true; + } + if (screenTile.connectionsDown > down - z) + { + barrierDown = z - 1; + existingScreen = true; + } + if (screenTile.connectionsLeft > x + left) + { + barrierLeft = -x - 1; + existingScreen = true; + } + if (screenTile.connectionsRight > right - x) + { + barrierRight = x - 1; + existingScreen = true; + } + } + } else + { + screenWhole = false; + } + } + } + + if (!screenWhole) + { + for (TileEntityScreen scr : screenList) + { + scr.resetToSingle(); + } + + return false; + } + + if (existingScreen) + { + return this.checkWholeScreen(barrierUp, barrierDown, barrierLeft, barrierRight); + } + + DrawGameScreen newScreen = null; + boolean serverside = true; + TileEntity bottomLeft = vec.clone().modifyPositionFromSide(side, -left).modifyPositionFromSide(EnumFacing.DOWN, down).getTileEntity(this.world); + if (this.world.isRemote) + { + if (bottomLeft instanceof TileEntityScreen) // It always will be if + // reached this far + { + newScreen = ((TileEntityScreen) bottomLeft).screen; + if (!newScreen.check(1.0F + left + right, 1.0F + up + down)) + { + newScreen = new DrawGameScreen(1.0F + left + right, 1.0F + up + down, bottomLeft); + } + } + serverside = false; + } + + Iterator it = screenList.iterator(); + for (int x = -left; x <= right; x++) + { + for (int z = -up; z <= down; z++) + { + TileEntityScreen screenTile = it.next(); + screenTile.screenOffsetx = x + left; + screenTile.screenOffsetz = z + up; + screenTile.screen = newScreen; + screenTile.connectionsLeft = x + left; + screenTile.connectionsRight = right - x; + screenTile.connectionsUp = z + up; + screenTile.connectionsDown = down - z; + screenTile.isMultiscreen = true; + screenTile.refreshOnUpdate = false; + if (serverside) + { + screenTile.imageType = this.imageType; + screenTile.markDirty(); + screenTile.updateAllInDimension(); + } + screenTile.refreshConnections(false); + } + } + + this.connectionsUp = up; + this.connectionsDown = down; + this.connectionsLeft = left; + this.connectionsRight = right; + + return true; + } + + /** + * Reset the screen to a 1x1 size, not part of a 'multi-screen' + */ + public void resetToSingle() + { + this.screenOffsetx = 0; + this.screenOffsetz = 0; + this.connectionsUp = 0; + this.connectionsDown = 0; + this.connectionsLeft = 0; + this.connectionsRight = 0; + this.isMultiscreen = false; +// this.connectedDown = this.connectedLeft = this.connectedRight = this.connectedUp = false; + this.setConnectedLeft(false); + this.setConnectedRight(false); + this.setConnectedUp(false); + this.setConnectedDown(false); + this.refreshOnUpdate = false; + this.markDirty(); + if (this.world.isRemote) + { + this.screen = new DrawGameScreen(1.0F, 1.0F, this); + } else + { + this.updateAllInDimension(); + } + } + + /** + * Get the Minecraft direction which is on the left side for the block + * orientation given by metadata + */ + private int getLeft(int meta) + { + switch (meta) + { + case 2: + return 4; + case 3: + return 5; + case 4: + return 3; + case 5: + return 2; + } + return 4; + } + + /** + * Get the Minecraft direction which is on the right side for the block + * orientation given by metadata + */ + private int getRight(int meta) + { + switch (meta) + { + case 2: + return 5; + case 3: + return 4; + case 4: + return 2; + case 5: + return 3; + } + return 5; + } + + private boolean canJoinRight() + { + int meta = this.getBlockMetadata(); + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, this.getRight(meta)); + if (!(te instanceof TileEntityScreen)) + { + return false; + } + TileEntityScreen screenTile = (TileEntityScreen) te; + if (screenTile.getBlockMetadata() != meta) + { + return false; + } + if (screenTile.connectionsUp != this.connectionsUp) + { + return false; + } + if (screenTile.connectionsDown != this.connectionsDown) + { + return false; + } + if (this.connectionsUp + this.connectionsDown > 0) + { + return true; + } + if (this.connectionsLeft > 0) + { + return false; + } + if (screenTile.connectionsRight > 0) + { + return false; + } + return true; + } + + private boolean canJoinLeft() + { + int meta = this.getBlockMetadata(); + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, this.getLeft(meta)); + if (!(te instanceof TileEntityScreen)) + { + return false; + } + TileEntityScreen screenTile = (TileEntityScreen) te; + if (screenTile.getBlockMetadata() != meta) + { + return false; + } + if (screenTile.connectionsUp != this.connectionsUp) + { + return false; + } + if (screenTile.connectionsDown != this.connectionsDown) + { + return false; + } + if (this.connectionsUp + this.connectionsDown > 0) + { + return true; + } + if (this.connectionsRight > 0) + { + return false; + } + if (screenTile.connectionsLeft > 0) + { + return false; + } + return true; + } + + private boolean canJoinUp() + { + int meta = this.getBlockMetadata(); + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, 1); + if (!(te instanceof TileEntityScreen)) + { + return false; + } + TileEntityScreen screenTile = (TileEntityScreen) te; + if (screenTile.getBlockMetadata() != meta) + { + return false; + } + if (screenTile.connectionsLeft != this.connectionsLeft) + { + return false; + } + if (screenTile.connectionsRight != this.connectionsRight) + { + return false; + } + if (this.connectionsLeft + this.connectionsRight > 0) + { + return true; + } + if (this.connectionsDown > 0) + { + return false; + } + if (screenTile.connectionsUp > 0) + { + return false; + } + return true; + } + + private boolean canJoinDown() + { + int meta = this.getBlockMetadata(); + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, 0); + if (!(te instanceof TileEntityScreen)) + { + return false; + } + TileEntityScreen screenTile = (TileEntityScreen) te; + if (screenTile.getBlockMetadata() != meta) + { + return false; + } + if (screenTile.connectionsLeft != this.connectionsLeft) + { + return false; + } + if (screenTile.connectionsRight != this.connectionsRight) + { + return false; + } + if (this.connectionsLeft + this.connectionsRight > 0) + { + return true; + } + if (this.connectionsUp > 0) + { + return false; + } + if (screenTile.connectionsDown > 0) + { + return false; + } + return true; + } + + private void joinRight() + { + int meta = this.getBlockMetadata(); + int side = this.getRight(meta); + BlockVec3 vec = new BlockVec3(this); + for (int z = -this.connectionsUp; z <= this.connectionsDown; z++) + { + TileEntity tile; + BlockVec3 newVec = vec.clone().modifyPositionFromSide(EnumFacing.DOWN, z); + if (z == 0) + { + tile = this; + } else + { + tile = newVec.getTileEntity(this.world); + } + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; +// screenTile.connectedRight = true; + screenTile.setConnectedRight(true); + TileEntity te2 = newVec.getTileEntityOnSide(this.world, side); + if (te2 instanceof TileEntityScreen && te2.getBlockMetadata() == meta && !te2.isInvalid()) + { + screenTile.tryConnectRight((TileEntityScreen) te2); + } + } + } + } + + private void joinLeft() + { + int meta = this.getBlockMetadata(); + int side = this.getLeft(meta); + BlockVec3 vec = new BlockVec3(this); + for (int z = -this.connectionsUp; z <= this.connectionsDown; z++) + { + TileEntity tile; + BlockVec3 newVec = vec.clone().modifyPositionFromSide(EnumFacing.DOWN, z); + if (z == 0) + { + tile = this; + } else + { + tile = newVec.getTileEntity(this.world); + } + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; +// screenTile.connectedLeft = true; + screenTile.setConnectedLeft(true); + TileEntity te2 = newVec.getTileEntityOnSide(this.world, side); + if (te2 instanceof TileEntityScreen && te2.getBlockMetadata() == meta && !te2.isInvalid()) + { + screenTile.tryConnectLeft((TileEntityScreen) te2); + } + } + } + } + + private void joinUp() + { + int meta = this.getBlockMetadata(); +// EnumFacing side = EnumFacing.byIndex(this.getRight(meta)); + EnumFacing side = byIndex().rotateY(); + BlockVec3 vec = new BlockVec3(this); + for (int x = -this.connectionsLeft; x <= this.connectionsRight; x++) + { + TileEntity tile; + BlockVec3 newVec = vec.clone().modifyPositionFromSide(side, x); + if (x == 0) + { + tile = this; + } else + { + tile = newVec.getTileEntity(this.world); + } + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; +// screenTile.connectedUp = true; + screenTile.setConnectedUp(true); + TileEntity te2 = newVec.getTileEntityOnSide(this.world, 1); + if (te2 instanceof TileEntityScreen && te2.getBlockMetadata() == meta && !te2.isInvalid()) + { + screenTile.tryConnectUp((TileEntityScreen) te2); + } + } + } + } + + private void joinDown() + { + int meta = this.getBlockMetadata(); +// EnumFacing side = EnumFacing.byIndex(this.getRight(meta)); + EnumFacing side = byIndex().rotateY(); + BlockVec3 vec = new BlockVec3(this); + for (int x = -this.connectionsLeft; x <= this.connectionsRight; x++) + { + TileEntity tile; + BlockVec3 newVec = vec.clone().modifyPositionFromSide(side, x); + if (x == 0) + { + tile = this; + } else + { + tile = newVec.getTileEntity(this.world); + } + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; +// screenTile.connectedDown = true; + screenTile.setConnectedDown(true); + TileEntity te2 = newVec.getTileEntityOnSide(this.world, 0); + if (te2 instanceof TileEntityScreen && te2.getBlockMetadata() == meta && !te2.isInvalid()) + { + screenTile.tryConnectDown((TileEntityScreen) te2); + } + } + } + } + + private boolean tryConnectUp(TileEntityScreen screenTile) + { + if (screenTile.connectedDown) + { + return true; // No checks? + } + +// screenTile.connectedDown = true; +// if (this.connectedLeft) screenTile.connectedLeft = true; +// if (this.connectedRight) screenTile.connectedRight = true; + screenTile.setConnectedDown(true); + BlockVec3 vec = null; + int meta = this.getBlockMetadata() & 7; + if (this.connectedLeft) + { + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedLeft(vec, meta); + } + if (this.connectedRight) + { + if (vec == null) + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedRight(vec, meta); + } + screenTile.refreshConnections(false); + // Undo if the neighbour could not maintain the same left-right + // connections + if ((this.connectedLeft ^ screenTile.connectedLeft) || (this.connectedRight ^ screenTile.connectedRight)) + { + screenTile.setConnectedDown(false); +// screenTile.connectedDown = false; + return false; + } + + return true; + } + + private boolean tryConnectDown(TileEntityScreen screenTile) + { + if (screenTile.connectedUp) + { + return true; // No checks? + } + +// screenTile.connectedUp = true; +// if (this.connectedLeft) screenTile.connectedLeft = true; +// if (this.connectedRight) screenTile.connectedRight = true; + screenTile.setConnectedUp(true); + BlockVec3 vec = null; + int meta = this.getBlockMetadata() & 7; + if (this.connectedLeft) + { + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedLeft(vec, meta); + } + if (this.connectedRight) + { + if (vec == null) + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedRight(vec, meta); + } + screenTile.refreshConnections(false); + // Undo if the neighbour could not maintain the same left-right + // connections + if ((this.connectedLeft ^ screenTile.connectedLeft) || (this.connectedRight ^ screenTile.connectedRight)) + { + screenTile.setConnectedUp(false); +// screenTile.connectedUp = false; + return false; + } + + return true; + } + + private boolean tryConnectLeft(TileEntityScreen screenTile) + { + if (screenTile.connectedRight) + { + return true; // No checks? + } + + if ((screenTile.connectedUp && !this.connectedUp) || (screenTile.connectedDown && !this.connectedDown)) + { + return false; + } + +// screenTile.connectedRight = true; +// if (this.connectedUp) screenTile.connectedUp = true; +// if (this.connectedDown) screenTile.connectedDown = true; + screenTile.setConnectedRight(true); + BlockVec3 vec = null; + int meta = this.getBlockMetadata() & 7; + if (this.connectedUp) + { + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedUp(vec, meta); + } + if (this.connectedDown) + { + if (vec == null) + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedDown(vec, meta); + } + screenTile.refreshConnections(false); + // Undo if the neighbour could not maintain the same up-down connections + if ((this.connectedUp ^ screenTile.connectedUp) || (this.connectedDown ^ screenTile.connectedDown)) + { + screenTile.setConnectedRight(false); +// screenTile.connectedRight = false; + return false; + } + + return true; + } + + private boolean tryConnectRight(TileEntityScreen screenTile) + { + if (screenTile.connectedLeft) + { + return true; // No checks? + } + + if ((screenTile.connectedUp && !this.connectedUp) || (screenTile.connectedDown && !this.connectedDown)) + { + return false; + } + +// screenTile.connectedLeft = true; +// if (this.connectedUp) screenTile.connectedUp = true; +// if (this.connectedDown) screenTile.connectedDown = true; + screenTile.setConnectedLeft(true); + BlockVec3 vec = null; + int meta = this.getBlockMetadata() & 7; + if (this.connectedUp) + { + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedUp(vec, meta); + } + if (this.connectedDown) + { + if (vec == null) + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedDown(vec, meta); + } + screenTile.refreshConnections(false); + // Undo if the neighbour could not maintain the same up-down connections + if ((this.connectedUp ^ screenTile.connectedUp) || (this.connectedDown ^ screenTile.connectedDown)) + { + screenTile.setConnectedLeft(false); +// screenTile.connectedLeft = false; + return false; + } + + return true; + } + + private void log(String msg) + { + String connections = ""; + String strSide = "S"; + if (this.connectedUp) + { + connections = "U"; + } + if (this.connectedDown) + { + connections += "D"; + } + if (this.connectedLeft) + { + connections += "L"; + } + if (this.connectedRight) + { + connections += "R"; + } + if (this.world.isRemote) + { + strSide = "C"; + } + // System.out.println(strSide + ":" + msg + " at + // "+this.getPos().getX()+","+this.getPos().getZ()+" "+connections); + } + + @SideOnly(Side.CLIENT) + public void refreshNextTick(boolean b) + { + this.refreshOnUpdate = true; + TickHandlerClient.screenConnectionsUpdateList.add(this); + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void updateClient(List data) + { + int screenType = (Integer) data.get(1); + int flags = (Integer) data.get(2); + this.imageType = screenType; + this.connectedUp = (flags & 8) != 0; + this.connectedDown = (flags & 4) != 0; + this.connectedLeft = (flags & 2) != 0; + this.connectedRight = (flags & 1) != 0; + this.refreshNextTick(true); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySolar.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySolar.java new file mode 100644 index 00000000..40b8f907 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySolar.java @@ -0,0 +1,552 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.blocks.BlockSolar; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.planets.venus.dimension.WorldProviderVenus; + +public class TileEntitySolar extends TileBaseUniversalElectricalSource implements IMultiBlock, IDisableableMachine, IInventoryDefaults, ISidedInventory, IConnector +{ + + @NetworkedField(targetSide = Side.CLIENT) + public int solarStrength = 0; + public float targetAngle; + public float currentAngle; + @NetworkedField(targetSide = Side.CLIENT) + public boolean disabled = false; + @NetworkedField(targetSide = Side.CLIENT) + public int disableCooldown = 0; + public static final int MAX_GENERATE_WATTS = 200; + @NetworkedField(targetSide = Side.CLIENT) + public int generateWatts = 0; + + private boolean initialised = false; + private boolean initialisedMulti = false; + private AxisAlignedBB renderAABB; + + public TileEntitySolar() + { + this(1); + } + + /* + * @param tier: 1 = Basic Solar 2 = Advanced Solar + */ + public TileEntitySolar(int tier) + { + super(tier == 1 ? "container.solarbasic.name" : "container.solaradvanced.name"); + this.storage.setMaxExtract(TileEntitySolar.MAX_GENERATE_WATTS); + this.storage.setMaxReceive(TileEntitySolar.MAX_GENERATE_WATTS); + if (tier == 2) + { + this.storage.setCapacity(30000); + } + this.setTierGC(tier); + this.initialised = true; + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.initialised) + { + int metadata = this.getBlockMetadata(); + if (metadata >= BlockSolar.ADVANCED_METADATA) + { + this.storage.setCapacity(30000); + this.setTierGC(2); + } + this.initialised = true; + } + + if (!this.initialisedMulti) + { + this.initialisedMulti = this.initialiseMultiTiles(this.getPos(), this.world); + } + + if (!this.world.isRemote) + { + this.receiveEnergyGC(null, this.generateWatts, false); + } + + super.update(); + + if (!this.world.isRemote) + { + this.recharge(this.getInventory().get(0)); + + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + + if (!this.getDisabled(0) && this.ticks % 20 == 0) + { + this.solarStrength = 0; + + if (this.world.isDaytime() && (this.world.provider instanceof IGalacticraftWorldProvider || !this.world.isRaining() && !this.world.isThundering())) + { + double distance = 100.0D; + double sinA = -Math.sin((this.currentAngle - 77.5D) / Constants.RADIANS_TO_DEGREES_D); + double cosA = Math.abs(Math.cos((this.currentAngle - 77.5D) / Constants.RADIANS_TO_DEGREES_D)); + + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + if (this.tierGC == 1) + { + if (this.world.canBlockSeeSky(this.getPos().add(x, 2, z))) + { + boolean valid = true; + + for (int y = this.getPos().getY() + 3; y < 256; y++) + { + IBlockState state = this.world.getBlockState(new BlockPos(this.getPos().getX() + x, y, this.getPos().getZ() + z)); + + if (state.getBlock().isOpaqueCube(state)) + { + valid = false; + break; + } + } + + if (valid) + { + this.solarStrength++; + } + } + } else + { + boolean valid = true; + + BlockVec3 blockVec = new BlockVec3(this).translate(x, 3, z); + for (double d = 0.0D; d < distance; d++) + { + BlockVec3 blockAt = blockVec.clone().translate((int) (d * sinA), (int) (d * cosA), 0); + IBlockState state = blockAt.getBlockState(this.world); + + if (state == null) + { + break; + } + + if (state.getBlock().isOpaqueCube(state)) + { + valid = false; + break; + } + } + + if (valid) + { + this.solarStrength++; + } + } + } + } + } + } + } + + float angle = this.world.getCelestialAngle(1.0F) - 0.7845194F < 0 ? 1.0F - 0.7845194F : -0.7845194F; + float celestialAngle = (this.world.getCelestialAngle(1.0F) + angle) * 360.0F; + if (!(this.world.provider instanceof WorldProviderSpaceStation)) + celestialAngle += 12.5F; + if (this.world.provider instanceof WorldProviderVenus) + celestialAngle = 180F - celestialAngle; + celestialAngle %= 360; + boolean isDaytime = this.world.isDaytime() && (celestialAngle < 180.5F || celestialAngle > 359.5F) || this.world.provider instanceof WorldProviderSpaceStation; + + if (this.tierGC == 1) + { + if (!isDaytime || this.world.isRaining() || this.world.isThundering()) + { + this.targetAngle = 77.5F + 180.0F; + } else + { + this.targetAngle = 77.5F; + } + } else + { + if (!isDaytime || this.world.isRaining() || this.world.isThundering()) + { + this.targetAngle = 77.5F + 180F; + } else if (celestialAngle > 27.5F && celestialAngle < 152.5F) + { + float difference = this.targetAngle - celestialAngle + 12.5F; + + this.targetAngle -= difference / 20.0F; + } else if (celestialAngle <= 27.5F || celestialAngle > 270F) + { + this.targetAngle = 15F; + } else if (celestialAngle >= 152.5F) + { + this.targetAngle = 140F; + } + } + + float difference = this.targetAngle - this.currentAngle; + + this.currentAngle += difference / 20.0F; + + if (!this.world.isRemote) + { + int generated = this.getGenerate(); + if (generated > 0) + { + this.generateWatts = Math.min(Math.max(generated, 0), TileEntitySolar.MAX_GENERATE_WATTS); + } else + { + this.generateWatts = 0; + } + } + + this.produce(); + } + + protected boolean initialiseMultiTiles(BlockPos pos, World world) + { + // Client can create its own fake blocks and tiles - no need for + // networking in 1.8+ + if (world.isRemote) + this.onCreate(world, pos); + + List positions = new ArrayList<>(); + this.getPositions(pos, positions); + boolean result = true; + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMulti) + { + ((TileEntityMulti) tile).mainBlockPosition = pos; + } else + { + result = false; + } + } + return result; + } + + public int getGenerate() + { + if (this.getDisabled(0)) + { + return 0; + } + + float angle = this.world.getCelestialAngle(1.0F) - 0.784690560F < 0 ? 1.0F - 0.784690560F : -0.784690560F; + float celestialAngle = (this.world.getCelestialAngle(1.0F) + angle) * 360.0F; + if (!(this.world.provider instanceof WorldProviderSpaceStation)) + celestialAngle += 12.5F; + + if (this.world.provider instanceof WorldProviderVenus) + celestialAngle = 180F - celestialAngle; + celestialAngle %= 360F; + + float difference = (180.0F - Math.abs((this.currentAngle + 12.5F) % 180F - celestialAngle)) / 180.0F; + + return MathHelper.floor(0.01F * difference * difference * (this.solarStrength * (Math.abs(difference) * 500.0F)) * this.getSolarBoost()); + } + + public float getSolarBoost() + { + float result = (float) (this.world.provider instanceof ISolarLevel ? ((ISolarLevel) this.world.provider).getSolarEnergyMultiplier() : 1.0F); + if (this.world.provider instanceof WorldProviderVenus) + { + if (this.pos.getY() > 90) + { + // Small improvement on Venus at higher altitudes + result += (this.pos.getY() - 90) / 1000F; + } + } + return result; + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + if (positions.size() > 0) + { + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions.get(0), placedPosition, EnumBlockMultiType.SOLAR_PANEL_0.getMeta()); + positions.remove(0); + } + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return (this.getTierGC() == 1) ? EnumBlockMultiType.SOLAR_PANEL_1 : EnumBlockMultiType.SOLAR_PANEL_0; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + int y = placedPosition.getY() + 1; + if (y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + + y++; + if (y > buildHeight) + { + return; + } + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock) + { + EnumBlockMultiType type = stateAt.getValue(BlockMulti.MULTI_TYPE); + if ((type == EnumBlockMultiType.SOLAR_PANEL_0 || type == EnumBlockMultiType.SOLAR_PANEL_1)) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, GCBlocks.solarPanel.getDefaultState()); + } + + this.world.setBlockToAir(pos); + } + } + } + + this.world.destroyBlock(getPos(), true); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.storage.setCapacity(nbt.getFloat("maxEnergy")); + this.currentAngle = nbt.getFloat("currentAngle"); + this.targetAngle = nbt.getFloat("targetAngle"); + this.setDisabled(0, nbt.getBoolean("disabled")); + this.disableCooldown = nbt.getInteger("disabledCooldown"); + + this.initialised = false; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setFloat("maxEnergy", this.getMaxEnergyStoredGC()); + nbt.setFloat("currentAngle", this.currentAngle); + nbt.setFloat("targetAngle", this.targetAngle); + nbt.setInteger("disabledCooldown", this.disableCooldown); + nbt.setBoolean("disabled", this.getDisabled(0)); + + return nbt; + } + + /* + * @Override public float getRequest(EnumFacing direction) { return 0; } + */ + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockSolar) + { + return state.getValue(BlockSolar.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(byIndex()); + } + + @Override + public EnumFacing getElectricOutputDirection() + { + return this.byIndex(); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(getPos().getX() - 1, getPos().getY(), getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 4, getPos().getZ() + 2); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + this.disabled = disabled; + this.disableCooldown = 20; + } + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC() * i / this.getMaxEnergyStoredGC()); + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + // @Override + // public boolean hasCapability(Capability cap, EnumFacing side) + // { + // if (cap == Capabilities.ENERGY_OUTPUTTER_CAPABILITY && this.canOutputEnergy(side)) + // { + // return true; + // } + // + // return super.hasCapability(cap, side); + // } + // + // @Override + // public T getCapability(Capability cap, EnumFacing side) + // { + // if (CompatibilityManager.isMekanismLoaded()) + // { + // if (cap != null && (cap == EnergyUtil.mekCableOutput)) + // { + // return Capabilities.ENERGY_OUTPUTTER_CAPABILITY.cast(this); + // } + // } + // + // return super.getCapability(cap, side); + // } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + + return direction == this.getElectricOutputDirection(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySpaceStationBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySpaceStationBase.java new file mode 100644 index 00000000..d0848c04 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySpaceStationBase.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; + +public class TileEntitySpaceStationBase extends TileEntityMulti implements IMultiBlock +{ + + public TileEntitySpaceStationBase() + { + super(null); + } + + private boolean initialised; + + @Override + public void update() + { + if (!this.initialised) + { + this.initialised = this.initialiseMultiTiles(this.getPos(), this.world); + } + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.SPACE_STATION_BASE; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + + for (int y = 1; y < 3; y++) + { + if (placedPosition.getY() + y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), placedPosition.getY() + y, placedPosition.getZ())); + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new LinkedList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && (EnumBlockMultiType) stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.SPACE_STATION_BASE) + { + this.world.setBlockToAir(pos); + } + } + this.world.destroyBlock(this.getPos(), false); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTelemetry.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTelemetry.java new file mode 100644 index 00000000..e585297c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTelemetry.java @@ -0,0 +1,407 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.HashSet; +import java.util.List; +import java.util.UUID; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.common.registry.EntityEntry; +import net.minecraftforge.fml.common.registry.EntityRegistry; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.ITelemetry; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +import com.mojang.authlib.GameProfile; + +public class TileEntityTelemetry extends TileEntity implements ITickable +{ + + public Class clientClass; + public int[] clientData = + {-1}; + public String clientName; + public GameProfile clientGameProfile = null; + + public static HashSet loadedList = new HashSet(); + public Entity linkedEntity; + private UUID toUpdate = null; + private int pulseRate = 400; + private int lastHurttime = 0; + private int ticks = 0; + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + loadedList.add(new BlockVec3Dim(this)); + } + } + + @Override + public void invalidate() + { + super.invalidate(); + if (this.world.isRemote) + { + loadedList.remove(new BlockVec3Dim(this)); + } + } + + @Override + public void update() + { + if (!this.world.isRemote && ++this.ticks % 2 == 0) + { + if (this.toUpdate != null) + { + this.addTrackedEntity(this.toUpdate); + this.toUpdate = null; + } + + String name = null; + int[] data = + {-1, -1, -1, -1, -1}; + String strUUID = ""; + + if (linkedEntity != null) + { + // Help the Garbage Collector + if (linkedEntity.isDead) + { + linkedEntity = null; + name = ""; + // TODO: track players after death and respawn? or not? + } else + { + if (linkedEntity instanceof EntityPlayerMP) + { + name = "$" + linkedEntity.getName(); + } else + { + EntityEntry entityEntry = EntityRegistry.getEntry(linkedEntity.getClass()); + if (entityEntry != null && entityEntry.getRegistryName() != null) + { + name = entityEntry.getRegistryName().toString(); + } + } + + if (name == null) + { + GalacticraftCore.logger.info("Telemetry Unit: Error finding name for " + linkedEntity.getClass().getSimpleName()); + name = ""; + } + + double xmotion = linkedEntity.motionX; + double ymotion = linkedEntity instanceof EntityLivingBase ? linkedEntity.motionY + 0.078D : linkedEntity.motionY; + double zmotion = linkedEntity.motionZ; + data[2] = (int) (MathHelper.sqrt(xmotion * xmotion + ymotion * ymotion + zmotion * zmotion) * 2000D); + + if (linkedEntity instanceof ITelemetry) + { + ((ITelemetry) linkedEntity).transmitData(data); + } else if (linkedEntity instanceof EntityLivingBase) + { + EntityLivingBase eLiving = (EntityLivingBase) linkedEntity; + data[0] = eLiving.hurtTime; + + // Calculate a "pulse rate" based on motion and taking + // damage + this.pulseRate--; + if (eLiving.hurtTime > this.lastHurttime) + { + this.pulseRate += 100; + } + this.lastHurttime = eLiving.hurtTime; + if (eLiving.getRidingEntity() != null) + { + data[2] /= 4; // reduced pulse effect if riding a + // vehicle + } else if (data[2] > 1) + { + this.pulseRate += 2; + } + this.pulseRate += Math.max(data[2] - pulseRate, 0) / 4; + if (this.pulseRate > 2000) + { + this.pulseRate = 2000; + } + if (this.pulseRate < 400) + { + this.pulseRate = 400; + } + data[2] = this.pulseRate / 10; + + data[1] = (int) (eLiving.getHealth() * 100 / eLiving.getMaxHealth()); + if (eLiving instanceof EntityPlayerMP) + { + data[3] = ((EntityPlayerMP) eLiving).getFoodStats().getFoodLevel() * 5; + GCPlayerStats stats = GCPlayerStats.get(eLiving); + data[4] = stats.getAirRemaining() * 4096 + stats.getAirRemaining2(); + UUID uuid = ((EntityPlayerMP) eLiving).getUniqueID(); + if (uuid != null) + { + strUUID = uuid.toString(); + } + } else if (eLiving instanceof EntityHorse) + { +// data[3] = ((EntityHorse) eLiving).getType().ordinal(); + data[4] = ((EntityHorse) eLiving).getHorseVariant(); + } else if (eLiving instanceof EntityVillager) + { + data[3] = ((EntityVillager) eLiving).getProfession(); + data[4] = ((EntityVillager) eLiving).getGrowingAge(); + } else if (eLiving instanceof EntityWolf) + { + data[3] = ((EntityWolf) eLiving).getCollarColor().getDyeDamage(); + data[4] = ((EntityWolf) eLiving).isBegging() ? 1 : 0; + } else if (eLiving instanceof EntitySheep) + { + data[3] = ((EntitySheep) eLiving).getFleeceColor().getDyeDamage(); + data[4] = ((EntitySheep) eLiving).getSheared() ? 1 : 0; + } else if (eLiving instanceof EntityOcelot) + { + data[3] = ((EntityOcelot) eLiving).getTameSkin(); + } else if (eLiving instanceof EntitySkeleton) + { +// data[3] = ((EntitySkeleton) eLiving).getSkeletonType().ordinal(); + } else if (eLiving instanceof EntityZombie) + { +// data[3] = ((EntityZombie) eLiving).isVillager() ? 1 : 0; TODO Fix for MC 1.10 + data[4] = ((EntityZombie) eLiving).isChild() ? 1 : 0; + } + } + } + } else + { + name = ""; + } + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_UPDATE_TELEMETRY, this.world.provider.getDimension(), new Object[] + {this.getPos(), name, data[0], data[1], data[2], data[3], data[4], strUUID}), + new TargetPoint(this.world.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 320D)); + } + } + + @SideOnly(Side.CLIENT) + public void receiveUpdate(List data, int dimID) + { + String name = (String) data.get(1); + if (name.startsWith("$")) + { + // It's a player name + this.clientClass = EntityPlayerMP.class; + String strName = name.substring(1); + this.clientName = strName; + this.clientGameProfile = PlayerUtil.getSkinForName(strName, (String) data.get(7), dimID); + } else + { + EntityEntry entityEntry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(name)); + this.clientClass = entityEntry == null ? null : entityEntry.getEntityClass(); + } + this.clientData = new int[5]; + for (int i = 2; i < 7; i++) + { + this.clientData[i - 2] = (Integer) data.get(i); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + Long msb = nbt.getLong("entityUUIDMost"); + Long lsb = nbt.getLong("entityUUIDLeast"); + this.toUpdate = new UUID(msb, lsb); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + if (this.linkedEntity != null && !this.linkedEntity.isDead) + { + nbt.setLong("entityUUIDMost", this.linkedEntity.getUniqueID().getMostSignificantBits()); + nbt.setLong("entityUUIDLeast", this.linkedEntity.getUniqueID().getLeastSignificantBits()); + } + return nbt; + } + + public void addTrackedEntity(UUID uuid) + { + this.pulseRate = 400; + this.lastHurttime = 0; + List eList = this.world.loadedEntityList; + for (Entity e : eList) + { + if (e.getUniqueID().equals(uuid)) + { + this.linkedEntity = e; + if (e instanceof EntitySpaceshipBase) + { + ((EntitySpaceshipBase) e).addTelemetry(this); + } + return; + } + } + // TODO Add some kind of watcher to add the entity when next loaded + this.linkedEntity = null; + } + + public void addTrackedEntity(Entity e) + { + this.pulseRate = 400; + this.lastHurttime = 0; + this.linkedEntity = e; + if (e instanceof EntitySpaceshipBase) + { + ((EntitySpaceshipBase) e).addTelemetry(this); + } + } + + public void removeTrackedEntity() + { + this.pulseRate = 400; + this.linkedEntity = null; + } + + public static TileEntityTelemetry getNearest(TileEntity te) + { + if (te == null) + { + return null; + } + BlockVec3 target = new BlockVec3(te); + + int distSq = 1025; + BlockVec3Dim nearest = null; + int dim = GCCoreUtil.getDimensionID(te.getWorld()); + for (BlockVec3Dim telemeter : loadedList) + { + if (telemeter.dim != dim) + { + continue; + } + int dist = telemeter.distanceSquared(target); + if (dist < distSq) + { + distSq = dist; + nearest = telemeter; + } + } + + if (nearest == null) + { + return null; + } + TileEntity result = te.getWorld().getTileEntity(new BlockPos(nearest.x, nearest.y, nearest.z)); + if (result instanceof TileEntityTelemetry) + { + return (TileEntityTelemetry) result; + } + return null; + } + + /** + * Call this when a player wears a frequency module to check whether it has + * been linked with a Telemetry Unit. + * + * @param held The frequency module + * @param player + */ + public static void frequencyModulePlayer(ItemStack held, EntityPlayerMP player, boolean remove) + { + if (held == null) + { + return; + } + NBTTagCompound fmData = held.getTagCompound(); + if (fmData != null && fmData.hasKey("teDim")) + { + int dim = fmData.getInteger("teDim"); + int x = fmData.getInteger("teCoordX"); + int y = fmData.getInteger("teCoordY"); + int z = fmData.getInteger("teCoordZ"); + WorldProvider wp = WorldUtil.getProviderForDimensionServer(dim); + // TODO + if (wp == null || wp.world == null) + { + GalacticraftCore.logger.debug("Frequency module worn: world provider is null. This is a bug. " + dim); + } else + { + TileEntity te = wp.world.getTileEntity(new BlockPos(x, y, z)); + if (te instanceof TileEntityTelemetry) + { + if (remove) + { + if (((TileEntityTelemetry) te).linkedEntity == player) + ((TileEntityTelemetry) te).removeTrackedEntity(); + } else + { + ((TileEntityTelemetry) te).addTrackedEntity(player.getUniqueID()); + } + } + } + } + } + + public static void updateLinkedPlayer(EntityPlayerMP playerOld, EntityPlayerMP playerNew) + { + for (BlockVec3Dim telemeter : loadedList) + { + TileEntity te = telemeter.getTileEntityNoLoad(); + if (te instanceof TileEntityTelemetry) + { + if (((TileEntityTelemetry) te).linkedEntity == playerOld) + { + ((TileEntityTelemetry) te).linkedEntity = playerNew; + } + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityThruster.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityThruster.java new file mode 100644 index 00000000..e231b4e2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityThruster.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileEntityThruster extends TileEntity +{ +// @Override +// public boolean canUpdate() +// { +// return false; +// } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTreasureChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTreasureChest.java new file mode 100644 index 00000000..18121493 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTreasureChest.java @@ -0,0 +1,491 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerChest; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.InventoryLargeChest; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTable; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.miccore.Annotations; + +import micdoodle8.mods.galacticraft.api.item.IKeyable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityTreasureChest extends TileEntityAdvanced implements ITickable, IInventory, IKeyable, ISidedInventory +{ + + public boolean adjacentChestChecked; + public float lidAngle; + public float prevLidAngle; + public int numPlayersUsing; + private int ticksSinceSync; + private AxisAlignedBB renderAABB; + + protected ResourceLocation lootTable; + protected long lootTableSeed; + + @Annotations.NetworkedField(targetSide = Side.CLIENT) public boolean locked = true; + @Annotations.NetworkedField(targetSide = Side.CLIENT) public int tier = 1; + + public TileEntityTreasureChest() + { + this(1); + } + + public TileEntityTreasureChest(int tier) + { + super("container.treasurechest.name"); + this.tier = tier; + inventory = NonNullList.withSize(27, ItemStack.EMPTY); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.locked = nbt.getBoolean("isLocked"); + this.tier = nbt.getInteger("tier"); + + checkLootAndRead(nbt); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("isLocked", this.locked); + nbt.setInteger("tier", this.tier); + + checkLootAndWrite(nbt); + + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void updateContainingBlockInfo() + { + super.updateContainingBlockInfo(); + this.adjacentChestChecked = false; + } + + /** + * Updates the JList with a new model. + */ + @Override + public void update() + { + int i = this.pos.getX(); + int j = this.pos.getY(); + int k = this.pos.getZ(); + ++this.ticksSinceSync; + float f; + + if (this.locked) + { + this.numPlayersUsing = 0; + } + + if (!this.world.isRemote && this.numPlayersUsing != 0 && (this.ticksSinceSync + i + j + k) % 200 == 0) + { + this.numPlayersUsing = 0; + f = 5.0F; + List list = this.world.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB((double) ((float) i - f), (double) ((float) j - f), (double) ((float) k - f), + (double) ((float) (i + 1) + f), (double) ((float) (j + 1) + f), (double) ((float) (k + 1) + f))); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) + { + EntityPlayer entityplayer = (EntityPlayer) iterator.next(); + + if (entityplayer.openContainer instanceof ContainerChest) + { + IInventory iinventory = ((ContainerChest) entityplayer.openContainer).getLowerChestInventory(); + + if (iinventory == this || iinventory instanceof InventoryLargeChest && ((InventoryLargeChest) iinventory).isPartOfLargeChest(this)) + { + ++this.numPlayersUsing; + } + } + } + } + + this.prevLidAngle = this.lidAngle; + f = 0.1F; + double d2; + + if (this.numPlayersUsing > 0 && this.lidAngle == 0.0F) + { + double d1 = (double) i + 0.5D; + d2 = (double) k + 0.5D; + + this.world.playSound(null, d1, (double) j + 0.5D, d2, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (((this.numPlayersUsing == 0 || this.locked) && this.lidAngle > 0.0F) || this.numPlayersUsing > 0 && this.lidAngle < 1.0F) + { + float f1 = this.lidAngle; + + if (this.numPlayersUsing == 0 || this.locked) + { + this.lidAngle -= f; + } else + { + this.lidAngle += f; + } + + if (this.lidAngle > 1.0F) + { + this.lidAngle = 1.0F; + } + + float f2 = 0.5F; + + if (this.lidAngle < f2 && f1 >= f2) + { + d2 = (double) i + 0.5D; + double d0 = (double) k + 0.5D; + + this.world.playSound(null, d2, (double) j + 0.5D, d0, SoundEvents.BLOCK_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.lidAngle < 0.0F) + { + this.lidAngle = 0.0F; + } + } + + super.update(); + } + + @Override + public boolean receiveClientEvent(int id, int type) + { + if (id == 1) + { + this.numPlayersUsing = type; + return true; + } else + { + return super.receiveClientEvent(id, type); + } + } + + @Override + public void openInventory(EntityPlayer player) + { + if (!player.isSpectator()) + { + if (this.numPlayersUsing < 0) + { + this.numPlayersUsing = 0; + } + + ++this.numPlayersUsing; + this.world.addBlockEvent(this.pos, this.getBlockType(), 1, this.numPlayersUsing); + this.world.notifyNeighborsOfStateChange(this.pos, this.getBlockType(), false); + this.world.notifyNeighborsOfStateChange(this.pos.down(), this.getBlockType(), false); + } + } + + @Override + public void closeInventory(EntityPlayer player) + { + if (!player.isSpectator()) + { +// --this.numPlayersUsing; +// this.world.addBlockEvent(this.pos, this.getBlockType(), 1, this.numPlayersUsing); +// this.world.notifyNeighborsOfStateChange(this.pos, this.getBlockType()); +// this.world.notifyNeighborsOfStateChange(this.pos.down(), this.getBlockType()); + } + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring + * stack size) into the given slot. + */ + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + /** + * invalidates a tile entity + */ + @Override + public void invalidate() + { + super.invalidate(); + this.updateContainingBlockInfo(); + } + + public String getGuiID() + { + return "minecraft:chest"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerChest(playerInventory, this, playerIn); + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public double getPacketRange() + { + return 20.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public int getTierOfKeyRequired() + { + return this.tier; + } + + @Override + public boolean onValidKeyActivated(EntityPlayer player, ItemStack key, EnumFacing face) + { + if (this.locked) + { + this.locked = false; + + if (this.world.isRemote) + { + // player.playSound("galacticraft.player.unlockchest", 1.0F, + // 1.0F); + } else + { + if (!player.capabilities.isCreativeMode) + { + player.inventory.getCurrentItem().shrink(1); + } + + return true; + } + } + + return false; + } + + @Override + public boolean onActivatedWithoutKey(EntityPlayer player, EnumFacing face) + { + if (this.locked) + { + if (player.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_ON_FAILED_CHEST_UNLOCK, GCCoreUtil.getDimensionID(this.world), new Object[] + {this.getTierOfKeyRequired()})); + } + return true; + } + + return false; + } + + @Override + public boolean canBreak() + { + return false; + } + + public static TileEntityTreasureChest findClosest(Entity entity, int tier) + { + double distance = Double.MAX_VALUE; + TileEntityTreasureChest chest = null; + for (final TileEntity tile : entity.world.loadedTileEntityList) + { + if (tile instanceof TileEntityTreasureChest && ((TileEntityTreasureChest) tile).getTierOfKeyRequired() == tier) + { + double dist = entity.getDistanceSq(tile.getPos().getX() + 0.5, tile.getPos().getY() + 0.5, tile.getPos().getZ() + 0.5); + if (dist < distance) + { + distance = dist; + chest = (TileEntityTreasureChest) tile; + } + } + } + + if (chest != null) + { + GalacticraftCore.logger.debug("Found chest to generate boss loot in: " + chest.pos); + } else + { + GalacticraftCore.logger.debug("Could not find chest to generate boss loot in!"); + } + + return chest; + } + + protected boolean checkLootAndRead(NBTTagCompound compound) + { + if (compound.hasKey("LootTable", 8)) + { + this.lootTable = new ResourceLocation(compound.getString("LootTable")); + this.lootTableSeed = compound.getLong("LootTableSeed"); + return true; + } else + { + return false; + } + } + + protected boolean checkLootAndWrite(NBTTagCompound compound) + { + if (this.lootTable != null) + { + compound.setString("LootTable", this.lootTable.toString()); + + if (this.lootTableSeed != 0L) + { + compound.setLong("LootTableSeed", this.lootTableSeed); + } + + return true; + } else + { + return false; + } + } + + public void fillWithLoot(EntityPlayer player) + { + if (this.lootTable != null) + { + LootTable loottable = this.world.getLootTableManager().getLootTableFromLocation(this.lootTable); + this.lootTable = null; + Random random; + + if (this.lootTableSeed == 0L) + { + random = new Random(); + } else + { + random = new Random(this.lootTableSeed); + } + + LootContext.Builder builder = new LootContext.Builder((WorldServer) this.world); + + if (player != null) + { + builder.withLuck(player.getLuck()); + } + + loottable.fillInventory(this, random, builder.build()); + } + } + + public ResourceLocation getLootTable() + { + return this.lootTable; + } + + public void setLootTable(ResourceLocation lootTable, long lootTableSeed) + { + this.lootTable = lootTable; + this.lootTableSeed = lootTableSeed; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 2, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { + return false; + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ASMUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ASMUtil.java new file mode 100644 index 00000000..951329d5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ASMUtil.java @@ -0,0 +1,413 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.HashMap; +import java.util.Optional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.launchwrapper.Launch; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.BiomeProperties; + +import net.minecraftforge.fml.relauncher.FMLLaunchHandler; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; + +import org.apache.commons.lang3.StringUtils; + +public class ASMUtil { + + private static HashMap sFieldCache = new HashMap<>(); + + /** + * Creates a new instance with the provided constructor and arguments. + * + * @param constructor The constructor of the class for which a new instance should be created. + * @param arguments Array of objects to be passed as arguments to the constructor call. + * @return A new object created by calling the constructor. + */ + public static T getInstance(Constructor constructor, Object... arguments) { + try { + return constructor.newInstance(arguments); + } catch (Exception e) { + GalacticraftCore.logger.error("Exception creating instance of " + constructor.getClass().getName()); + } + return null; + } + + @SuppressWarnings("unchecked") + public static T getInstance(String className, Class assignable) { + try { + Class clazz = Class.forName(className); + if (!assignable.isAssignableFrom(assignable)) { + throw new RuntimeException("Class '" + className + "' is not assignable from " + assignable.getSimpleName()); + } + return (T) clazz.newInstance(); + } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { + GalacticraftCore.logger.error("Exception creating instance of " + className); + } + return null; + } + + /** + * Obtains the constructor for the named class identified by the parameter types. + * + * @param className The fully qualified name of the class. + * @param argumentTypes Parameter types to identify the constructor. + * @return Constructor object representing the declared constructor for the parameter types. + */ + public static Constructor getConstructor(final String className, final Class... argumentTypes) { + if (className == null || argumentTypes == null) { + GalacticraftCore.logger.error("The provided class name or arguments can't be null."); + return null; + } + try { + Class clazz = Class.forName(className); + Constructor constructor = clazz.getDeclaredConstructor(argumentTypes); + constructor.setAccessible(true); + return constructor; + } catch (Exception ex) { + GalacticraftCore.logger.error("Exception getting constructor of " + className); + } + return null; + } + + /** + * Obtains the constructor for the class identified by the parameter types. + * + * @param clazz The Class for which the constructor should be obtained. + * @param types Parameter types to identify the constructor. + * @return Constructor object representing the declared constructor for the parameter types. + */ + public static Constructor getConstructor(Class clazz, Class... types) { + try { + Constructor constructor = clazz.getDeclaredConstructor(types); + constructor.setAccessible(true); + return constructor; + } catch (Exception ex) { + GalacticraftCore.logger.error("Exception getting constructor of " + clazz.getName()); + } + return null; + } + + /** + * Returns the value of a private field for an object instance. + * + * @param object An object instance from which the field value is to be extracted. + * @param fieldNames A list of field names for which the value should be extracted. The functions returns value of the first field found. + * @return The value of the provided field name. + */ + @SuppressWarnings("unchecked") + public static T getObject(Object object, String... fieldNames) { + Class cls = object.getClass(); + for (String field : fieldNames) { + try { + Field result = cls.getDeclaredField(field); + result.setAccessible(true); + return (T) result.get(object); + } catch (Exception ex) { + GalacticraftCore.logger.error("Exception in getObject()"); + } + } + GalacticraftCore.logger.error("Could not retrieve any object for the provided field names."); + + return null; + } + + /** + * Returns the value of a private final field for an object instance and removes the final modifier. + * + * @param object An object instance from which the field value is to be extracted. + * @param fieldNames A list of field names for which the value should be extracted. The functions returns value of the first field found. + * @return The value of the provided field name. + */ + @SuppressWarnings("unchecked") + public static T getFinalObject(Object object, String... fieldNames) { + Class cls = object.getClass(); + for (String field : fieldNames) { + try { + Field result = cls.getDeclaredField(field); + result.setAccessible(true); + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(result, result.getModifiers() & ~Modifier.FINAL); + return (T) result.get(object); + } catch (Exception ex) { + GalacticraftCore.logger.error("Exception in getFinalObject()"); + } + } + GalacticraftCore.logger.error("Could not retrieve any final object for the provided field names."); + + return null; + } + + /** + * Returns the value of a private static field for a class. + * + * @param clazz The class for which the field value is to be extracted. + * @param fieldNames A list of field names for which the value should be extracted. + * @return The value of the provided field name. + */ + @SuppressWarnings("unchecked") + public static Optional getStaticObject(Class clazz, String fieldName) { + Optional object = Optional.empty(); + try { + Field result = clazz.getDeclaredField(fieldName); + result.setAccessible(true); + object = Optional.of((T) result.get(null)); + } catch (Exception e) { + } + return object; + } + + /** + * Finds a method with the specified name and parameters in the given class and makes it accessible.

Throws an exception if the method is not found. + * + * @param clazz The class to find the method on. + * @param methodName The name of the method to find (used in developer environments, i.e. "getWorldTime"). + * @param parameterTypes The parameter types of the method to find. + * + * @return The method with the specified name and parameters in the given class. + */ + @Nonnull + public static Method findMethod(@Nonnull Class clazz, @Nonnull String methodName, Class... parameterTypes) + { + Preconditions.checkNotNull(clazz); + Preconditions.checkArgument(StringUtils.isNotEmpty(methodName), "Method name cannot be empty"); + try + { + Method m = clazz.getDeclaredMethod(methodName, parameterTypes); + m.setAccessible(true); + return m; + } catch (Exception e) + { + throw new ReflectionThrows.UnableToFindMethodException(e); + } + } + + /** + * Finds a method with the specified name and parameters in the given class and makes it accessible. Note: for performance, store the returned value and avoid calling this repeatedly.

Throws an exception if the method is not found. + * + * @param clazz The class to find the method on. + * @param methodName The name of the method to find (used in developer environments, i.e. "getWorldTime"). + * @param methodObfName The obfuscated name of the method to find (used in obfuscated environments, i.e. "getWorldTime"). If the name you are looking for is on a class that is never obfuscated, this should be null. + * @param parameterTypes The parameter types of the method to find. + * + * @return The method with the specified name and parameters in the given class. + */ + @Nonnull + public static Method findMethod(@Nonnull Class clazz, @Nonnull String methodName, @Nullable String methodObfName, Class... parameterTypes) + { + Preconditions.checkNotNull(clazz); + Preconditions.checkArgument(StringUtils.isNotEmpty(methodName), "Method name cannot be empty"); + + String nameToFind = FMLLaunchHandler.isDeobfuscatedEnvironment() ? methodName : MoreObjects.firstNonNull(methodObfName, methodName); + + try + { + Method m = clazz.getDeclaredMethod(nameToFind, parameterTypes); + m.setAccessible(true); + return m; + } catch (Exception e) + { + throw new ReflectionThrows.UnableToFindMethodException(e); + } + } + + @SuppressWarnings("unchecked") + public static T getPrivateValue(Class classToAccess, @Nullable E instance, String fieldName) { + try { + return (T) findField(classToAccess, fieldName, null).get(instance); + } catch (Exception e) { + e.getStackTrace(); + } + return null; + } + + @SuppressWarnings("unchecked") + public static T getPrivateValue(Class classToAccess, @Nullable E instance, String fieldName, @Nullable String fieldObfName) { + try { + return (T) findField(classToAccess, fieldName, fieldObfName).get(instance); + } catch (Exception e) { + e.getStackTrace(); + } + return null; + } + + public static void setPrivateValue(Class classToAccess, @Nullable T instance, @Nullable E value, String fieldName) { + try { + findField(classToAccess, fieldName, null).set(instance, value); + } catch (Exception e) { + e.getStackTrace(); + } + } + + public static void setPrivateValue(Class classToAccess, @Nullable T instance, @Nullable E value, String fieldName, @Nullable String fieldObfName) { + try { + findField(classToAccess, fieldName, fieldObfName).set(instance, value); + } catch (Exception e) { + e.getStackTrace(); + } + } + + public static Field findField(@Nonnull Class clazz, @Nonnull String fieldName, @Nullable String fieldObfName) { + Preconditions.checkNotNull(clazz); + Preconditions.checkArgument(StringUtils.isNotEmpty(fieldName), "Field name cannot be empty"); + + String nameToFind = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment") ? fieldName : MoreObjects.firstNonNull(fieldObfName, fieldName); + try { + Field f = clazz.getDeclaredField(nameToFind); + f.setAccessible(true); + return f; + } catch (Exception e) { + e.getStackTrace(); + } + return null; + } + + public static void setStaticFieldObject(Class clazz, String fieldName, Object value) { + Field field = getStaticField(clazz, fieldName); + try { + field.set(clazz, value); + } catch (IllegalArgumentException | IllegalAccessException e) { + GalacticraftCore.logger.error("An error occured when attempting to set static Field [ " + fieldName + " ]"); + } + } + + private static Field getStaticField(Class clazz, String fieldName) { + Preconditions.checkNotNull(clazz); + Preconditions.checkArgument(StringUtils.isNotEmpty(fieldName), "Field name cannot be empty"); + + String fullFieldName = genFieldFullName(clazz, fieldName); + if (sFieldCache.containsKey(fullFieldName)) { + return sFieldCache.get(fullFieldName); + } + Field field = null; + try { + field = clazz.getField(fieldName); + } catch (NoSuchFieldException e) { + } + if (field == null) { + try { + field = clazz.getDeclaredField(fieldName); + field.setAccessible(true); + } catch (NoSuchFieldException e) { + } + } + if (field == null) { + for (clazz = clazz.getSuperclass(); clazz != Object.class; clazz = clazz.getSuperclass()) { + try { + field = clazz.getDeclaredField(fieldName); + field.setAccessible(true); + } catch (NoSuchFieldException e) { + } + } + } + if (field == null) { + GalacticraftCore.logger.error("Can't get [ " + fieldName + " ] Field from Class [ " + clazz.getSimpleName() + " ]"); + } + sFieldCache.put(fullFieldName, field); + return field; + } + + private static String genFieldFullName(Class clazz, String fieldName) { + StringBuilder name = new StringBuilder(); + name.append(clazz.getName()); + name.append(":"); + name.append(fieldName); + return name.toString(); + } + + public static String getBiomeName(BiomeProperties instance) { + return ASMUtil.getPrivateValue(Biome.BiomeProperties.class, instance, "biomeName", "field_185412_a"); + } + + static class ReflectionThrows + { + + public static class UnableToFindMethodException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnableToFindMethodException(String[] methodNames, Exception failed) + { + super(failed); + } + + public UnableToFindMethodException(Throwable failed) + { + super(failed); + } + } + + public static class UnableToFindClassException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnableToFindClassException(String[] classNames, @Nullable Exception err) + { + super(err); + } + } + + public static class UnableToAccessFieldException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnableToAccessFieldException(String[] fieldNames, Exception e) + { + super(e); + } + + public UnableToAccessFieldException(Exception e) + { + super(e); + } + } + + public static class UnableToFindFieldException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnableToFindFieldException(String[] fieldNameList, Exception e) + { + super(e); + } + + public UnableToFindFieldException(Exception e) + { + super(e); + } + } + + public static class UnknownConstructorException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnknownConstructorException(final String message) + { + super(message); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/BlockUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/BlockUtil.java new file mode 100644 index 00000000..aeda9b11 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/BlockUtil.java @@ -0,0 +1,244 @@ +package micdoodle8.mods.galacticraft.core.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.api.vector.BlockTuple; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import lombok.Getter; + +public class BlockUtil +{ + + public static final String FULL_ID_MATCHER = "^(?(?[a-z\\d\\._-]+):(?[a-z\\d\\._-]+))(?::(?[0-9\\*]{1,}))?$"; + public static final String SHORTHAND_MATCHER = "^(?[a-z\\d\\._-]+)(?::(?[0-9\\*]{1,}))?$"; + + public static final Pattern FULL_ID_REGEX = Pattern.compile(FULL_ID_MATCHER); + public static final Pattern SHORTHAND_REGEX = Pattern.compile(SHORTHAND_MATCHER); + + public static NonNullList getListFromStringArray(String[] strArr) + { + NonNullList nnl = NonNullList.create(); + for (String str : strArr) + { + addToBlockStackList(getResloc(str), nnl); + } + return nnl; + } + + public static NonNullList getBlockStateHolderList(NonNullList itemStacks) + { + final Map> stateList = new HashMap<>(); + for (ItemStack stack : itemStacks) + { + Block b = ((ItemBlock) stack.getItem()).getBlock(); + IBlockState state = b.getStateFromMeta(stack.getItem().getMetadata(stack.getMetadata())); + if (stateList.keySet().contains(b)) + { + if (!stateList.get(b).contains(state)) + { + stateList.get(b).add(state); + } + } else + { + List list = new ArrayList<>(); + list.add(state); + stateList.put(b, list); + } + } + + NonNullList mbsl = NonNullList.create(); + for (Entry> e : stateList.entrySet()) + { + mbsl.add(new MultiBlockStateHolder(e.getKey(), e.getValue())); + } + return mbsl; + } + + public static BlockTuple getBlockTupleFromString(String string) + { + Block oldFormat = parseBlockFromOldConfigFormat(string); + if (oldFormat != null) + { + GalacticraftCore.logger.debug("oldFormat: " + string); + return new BlockTuple(oldFormat, parseMetaFromOldConfigFormat(string)); + } + + ItemStack s = getItemStackFromString(string); + return new BlockTuple(((ItemBlock) s.getItem()).getBlock(), s.getMetadata()); + } + + @Nullable + private static Block parseBlockFromOldConfigFormat(String string) + { + return Block.getBlockFromName(string); + } + + private static int parseMetaFromOldConfigFormat(String string) + { + int lastColon = string.lastIndexOf(':'); + int meta = -1; + if (lastColon > 0) + { + try + { + meta = Integer.parseInt(string.substring(lastColon + 1, string.length())); + } catch (NumberFormatException ex) + { + } + } + return meta; + } + + public static ItemStack getItemStackFromString(String string) + { + return getItemStackFromResloc(getResloc(string)); + } + + private static void addToBlockStackList(Resloc resloc, NonNullList nnl) + { + GalacticraftCore.logger.debug("Attempting to locate Block with ResourceLocation: " + resloc.toString() + " | Input: " + resloc.rawInput); + Block block = Block.REGISTRY.getObject(resloc); + if (resloc.isBlock(block)) + { + ItemStack i = resloc.toItemStack(block); + if (resloc.isWildcard() && i.getHasSubtypes()) + { + i.getItem().getSubItems(CreativeTabs.SEARCH, nnl); + } else + { + nnl.add(i); + } + } else + { + GalacticraftCore.logger.error("No block with ResourceLocation (" + resloc.rawInput + ") could be located. Skipping"); + } + } + + private static ItemStack getItemStackFromResloc(Resloc resloc) + { + NonNullList nnl = NonNullList.create(); + addToBlockStackList(resloc, nnl); + return nnl.get(0); + } + + public static Resloc getResloc(String string) + { + boolean isShorthand = string.matches(SHORTHAND_MATCHER); + Matcher m = isShorthand ? SHORTHAND_REGEX.matcher(string) : FULL_ID_REGEX.matcher(string); + boolean found = m.find(); + if (found) + { + if (m.group("meta") != null) + { + return Resloc.of(m.group("resloc"), m.group("meta")); + } + + return Resloc.of(m.group("resloc")); + } + return Resloc.of("null"); + } + + + public static class Resloc extends ResourceLocation + { + + private String rawInput; + private int meta; + + public static Resloc of(String resourceName, String meta) + { + return new Resloc(resourceName, meta); + } + + public static Resloc of(String resourceName) + { + return new Resloc(resourceName); + } + + public Resloc(String resourceName) + { + this(resourceName, ""); + } + + public Resloc(String resourceName, String meta) + { + super(resourceName); + this.rawInput = resourceName; + setMetaValue(meta); + } + + private void setMetaValue(String meta) + { + this.rawInput = meta.isEmpty() ? rawInput : rawInput + ":" + meta; + this.meta = (meta.equals("*")) ? OreDictionary.WILDCARD_VALUE : safeParse(meta); + } + + public boolean isBlock(Block block) + { + return block.getRegistryName().equals(this); + } + + private int safeParse(String str) + { + try + { + return Integer.parseInt(str); + } catch (NumberFormatException e) + { + return 0; + } + } + + public int getMeta() + { + return this.meta; + } + + public boolean isWildcard() + { + return this.meta == OreDictionary.WILDCARD_VALUE; + } + + public ItemStack toItemStack(Block block) + { + return meta > 0 ? new ItemStack(block, 1, this.meta) : new ItemStack(block); + } + } + + @Getter + public static class MultiBlockStateHolder + { + + private Block block; + private List blockstateList = new ArrayList<>(); + + private MultiBlockStateHolder() + { + } + + public MultiBlockStateHolder(Block block, List blockstateList) + { + this.block = block; + this.blockstateList = blockstateList; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ClientUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ClientUtil.java new file mode 100644 index 00000000..5eee4151 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ClientUtil.java @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.io.IOException; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.common.model.IModelState; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +/** + * Starting with Release 4.1.0 this class will be removed and all methods + * moved to a dedicated utility class. At this time all planned utility classes + * will be internal and non-accessible. + *

+ * ADDON DEVELOPERS THAT MAKE CALLS TO ANY METHOD IN THIS CLASS ARE ADVISED + * TO MOVE TO THEIR OWN IMPLEMENTATIONS + * + */ +@ForRemoval(deadline = "4.1.0") +@SideOnly(Side.CLIENT) +public class ClientUtil +{ + + @Deprecated + @ReplaceWith("getClientTimeTotal()") + public static long getMilliseconds() + { + return getClientTimeTotal(); + } + + public static long getClientTimeTotal() + { + return (long) (Minecraft.getMinecraft().world.getTotalWorldTime() * 66.666666666666); + } + + public static void addVariant(String modID, String name, String... variants) + { + Item itemBlockVariants = Item.REGISTRY.getObject(new ResourceLocation(modID, name)); + ResourceLocation[] variants0 = new ResourceLocation[variants.length]; + for (int i = 0; i < variants.length; ++i) + { + variants0[i] = new ResourceLocation(modID + ":" + variants[i]); + } + ModelBakery.registerItemVariants(itemBlockVariants, variants0); + } + + public static void registerBlockJson(String texturePrefix, Block block) + { + registerBlockJson(texturePrefix, block, 0, block.getTranslationKey().substring(5)); + } + + public static void registerBlockJson(String texturePrefix, Block block, int meta, String name) + { + FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), meta, new ModelResourceLocation(texturePrefix + name, "inventory")); + } + + public static void registerItemJson(String texturePrefix, Item item) + { + registerItemJson(texturePrefix, item, 0, item.getTranslationKey().substring(5)); + } + + public static void registerItemJson(String texturePrefix, Item item, int meta, String name) + { + FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().register(item, meta, new ModelResourceLocation(texturePrefix + name, "inventory")); + } + + public static ScaledResolution getScaledRes(Minecraft minecraft, int width, int height) + { + return new ScaledResolution(minecraft); + } + + public static FlagData updateFlagData(String playerName, boolean sendPacket) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(playerName); + + if (race != null) + { + return race.getFlagData(); + } + if (!ClientProxyCore.flagRequestsSent.contains(playerName) && sendPacket) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REQUEST_FLAG_DATA, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {playerName})); + ClientProxyCore.flagRequestsSent.add(playerName); + } + + return FlagData.DEFAULT; + } + + public static Vector3 updateTeamColor(String playerName, boolean sendPacket) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(playerName); + + if (race != null) + { + return race.getTeamColor(); + } + if (!ClientProxyCore.flagRequestsSent.contains(playerName) && sendPacket) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REQUEST_FLAG_DATA, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {playerName})); + ClientProxyCore.flagRequestsSent.add(playerName); + } + + return new Vector3(1, 1, 1); + } + + public static void replaceModel(String modid, ModelBakeEvent event, String resLoc, String objLoc, List visibleGroups, Class clazz, IModelState parentState, String... variants) + { + OBJModel model; + try + { + model = (OBJModel) OBJLoaderGC.instance.loadModel(new ResourceLocation(modid, objLoc)); + } catch (Exception e) + { + throw new RuntimeException(e); + } + + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + IBakedModel newModelBase = model.bake(new OBJModel.OBJState(visibleGroups, false, parentState), DefaultVertexFormats.ITEM, spriteFunction); + IBakedModel newModelAlt = null; + if (variants.length == 0) + { + variants = new String[] + {"inventory"}; + } else if (variants.length > 1 || !variants[0].equals("inventory")) + { + newModelAlt = model.bake(new OBJModel.OBJState(visibleGroups, false, TRSRTransformation.identity()), DefaultVertexFormats.ITEM, spriteFunction); + } + + for (String variant : variants) + { + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(modid + ":" + resLoc, variant); + IBakedModel object = event.getModelRegistry().getObject(modelResourceLocation); + if (object != null) + { + IBakedModel newModel = variant.equals("inventory") ? newModelBase : newModelAlt; + if (clazz != null) + { + try + { + newModel = clazz.getConstructor(IBakedModel.class).newInstance(newModel); + } catch (Exception e) + { + GalacticraftCore.logger.error("ItemModel constructor problem for " + modelResourceLocation); + e.printStackTrace(); + } + } + event.getModelRegistry().putObject(modelResourceLocation, newModel); + } + } + } + + public static IBakedModel modelFromOBJ(ResourceLocation loc) throws IOException + { + return modelFromOBJ(loc, ImmutableList.of("main")); + } + + public static IBakedModel modelFromOBJ(ResourceLocation loc, List visibleGroups) throws IOException + { + return modelFromOBJ(loc, visibleGroups, TRSRTransformation.identity()); + } + + public static IBakedModel modelFromOBJ(ResourceLocation loc, List visibleGroups, IModelState parentState) throws IOException + { + IModel model = OBJLoaderGC.instance.loadModel(loc); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + return model.bake(new OBJModel.OBJState(visibleGroups, false, parentState), DefaultVertexFormats.ITEM, spriteFunction); + } + + public static void drawBakedModel(IBakedModel model) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM); + + for (BakedQuad bakedquad : model.getQuads(null, null, 0)) + { + worldrenderer.addVertexData(bakedquad.getVertexData()); + } + + tessellator.draw(); + } + + public static void drawBakedModelColored(IBakedModel model, int color) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM); + + for (BakedQuad bakedquad : model.getQuads(null, null, 0)) + { + int[] data = bakedquad.getVertexData(); + data[3] = color; + data[10] = color; + data[17] = color; + data[24] = color; + worldrenderer.addVertexData(data); + } + + tessellator.draw(); + } + + public static boolean isKeyPressed(KeyBinding keyBinding) + { + try + { + int key = keyBinding.getKeyCode(); + return key < 0 ? Mouse.isButtonDown(key + 100) : Keyboard.isKeyDown(key); + } catch (Exception e) + { + return false; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ColorUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ColorUtil.java new file mode 100644 index 00000000..37760723 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ColorUtil.java @@ -0,0 +1,345 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; + +public class ColorUtil +{ + // Credit to Mark Ransom @ StackOverflow for the colorwheel idea + + static Vector3 red = new Vector3(255, 0, 0); + static Vector3 orange = new Vector3(255, 160, 0); + static Vector3 yellow = new Vector3(255, 255, 0); + static Vector3 green = new Vector3(0, 255, 0); + static Vector3 cyan = new Vector3(0, 255, 255); + static Vector3 blue = new Vector3(0, 0, 255); + static Vector3 magenta = new Vector3(255, 0, 255); + static Vector3 white = new Vector3(255, 255, 255); + static Vector3 black = new Vector3(0, 0, 0); + static Vector3 mud = new Vector3(94, 81, 74); + + static double[] colorwheelAngles = + {-110D, -30D, 0D, 60D, 120D, 180D, 215D, 250D, 330D, 360D, 420D, 480D}; + static Vector3[] colorwheelColors = + {blue, magenta, red, orange, yellow, green, cyan, blue, magenta, red, orange, yellow}; + + private static Vector3 hue_to_rgb(double deg) + { + deg = deg % 360; + + double previous_angle = colorwheelAngles[1]; + + for (int i = 2; i < colorwheelAngles.length - 2; i++) + { + Double angle = colorwheelAngles[i]; + if (deg <= angle) + { + return interpolateInArray(colorwheelColors, i, (angle - deg) / (angle - previous_angle)); + } + previous_angle = angle; + } + + return null; + } + + private static double rgb_to_hue(Vector3 input) + { + double maxCol = Math.max(Math.max(input.x, input.y), input.z); + if (maxCol <= 0) + { + return 0; + } + Vector3 rgb = input.scale(255D / maxCol); + + double mindist = 1024; + int mini = 0; + + for (int i = 2; i < colorwheelAngles.length - 2; i++) + { + Vector3 color = colorwheelColors[i]; + double separation = color.distance(rgb); + if (separation < mindist) + { + mindist = separation; + mini = i; + } + } + + double separation1; + double separation2; + separation1 = colorwheelColors[mini - 1].distance(rgb); + separation2 = colorwheelColors[mini + 1].distance(rgb); + + double hue; + if (separation1 < separation2) + { + double separationtot = colorwheelColors[mini - 1].distance(colorwheelColors[mini]); + hue = interpolateInArray(colorwheelAngles, mini, mindist / separationtot); + if (hue < 0) + { + hue += 360D; + } + } else + { + double separationtot = colorwheelColors[mini + 1].distance(colorwheelColors[mini]); + hue = interpolateInArray(colorwheelAngles, mini + 1, separation2 / separationtot); + if (hue > 360D) + { + hue -= 360D; + } + } + + return hue; + } + + private static double cubicInterpolate(double y0, double y1, double y2, double y3, double mu) + { + double a0, a1, a2, a3, mu2; + + mu2 = mu * mu; + a3 = y3 - y2 - y0 + y1; + a2 = y0 - y1 - a3; + a1 = y2 - y0; + a0 = y1; + + return (a3 * mu * mu2 + a2 * mu2 + a1 * mu + a0); + } + + private static Vector3 interpolateInArray(Vector3[] array, int i, double mu) + { + Vector3 point0 = array[i + 1]; + Vector3 point1 = array[i]; + Vector3 point2 = array[i - 1]; + Vector3 point3 = array[i - 2]; + + double x = cubicInterpolate(point0.x, point1.x, point2.x, point3.x, mu); + double y = cubicInterpolate(point0.y, point1.y, point2.y, point3.y, mu); + double z = cubicInterpolate(point0.z, point1.z, point2.z, point3.z, mu); + + return new Vector3(x, y, z); + } + + private static double interpolateInArray(double[] array, int i, double mu) + { + return cubicInterpolate(array[i + 1], array[i], array[i - 1], array[i - 2], mu); + } + + public static Vector3 addColorsRealistically(Vector3 color1, Vector3 color2) + { + double hue1 = ColorUtil.rgb_to_hue(color1); + double hue2 = ColorUtil.rgb_to_hue(color2); + if (hue1 - hue2 > 180D) + { + hue2 += 360D; + } + if (hue2 - hue1 > 180D) + { + hue1 += 360D; + } + double hueresult = (hue1 + hue2) / 2; + if (hueresult > 360D) + { + hueresult -= 360D; + } + // TODO: if hue1 and hue2 differ by close to 180degrees, add in some + // 'mud' color + // TODO: add greyscale here + + return ColorUtil.hue_to_rgb(hueresult).scale(1 / 255D); + } + + public static int addColorsRealistically(int color1, int color2) + { + Vector3 result = addColorsRealistically(toVec3(color1), toVec3(color2)); + return fromVec3(result); + } + + public static int addColorsBasic(int color1, int color2) + { + int g = color1 >> 8; + int r = g >> 8; + g &= 255; + int b = color1 & 255; + int gg = color2 >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = color2 & 255; + + r = (r + rr) / 2; + g = (g + gg) / 2; + b = (b + bb) / 2; + + r = r << 16; + g = g << 8; + return r | g | b; + } + + public static Vector3 toVec3(int col) + { + int gg = col >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = col & 255; + return new Vector3(rr / 255F, gg / 255F, bb / 255F); + } + + public static int fromVec3(Vector3 result) + { + int r = (int) (result.x * 255D + 0.499D); + int g = (int) (result.y * 255D + 0.499D); + int b = (int) (result.z * 255D + 0.499D); + r = r << 16; + g = g << 8; + return r | g | b; + } + + public static int to32BitColor(int a, int r, int g, int b) + { + a = a << 24; + r = r << 16; + g = g << 8; + + return a | r | g | b; + } + + public static int to32BitColorB(byte r, byte g, byte b) + { + int rr = (r & 255) << 16; + int gg = (g & 255) << 8; + + return rr | gg | (b & 255); + } + + public static int lighten(int col, float factor) + { + int gg = col >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = col & 255; + rr *= (1F + factor); + gg *= (1F + factor); + bb *= (1F + factor); + if (rr > 255) + { + rr = 255; + } + if (gg > 255) + { + gg = 255; + } + if (bb > 255) + { + bb = 255; + } + return rr << 16 | gg << 8 | bb; + } + + /** + * Lighten to the specified intensity + * + * @param col + * @return + */ + public static int lightenFully(int col, int intensity) + { + if (intensity == 0) + return 0; + int gg = col >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = col & 255; + rr = 255 - rr; + gg = 255 - gg; + bb = 255 - bb; + double greyInvert = Math.min(rr, Math.min(gg, bb)); + double delta = Math.max(rr, Math.max(gg, bb)); + delta = (delta - greyInvert) / delta; + if (greyInvert >= intensity) + { + return col; + } + double factor = (intensity - greyInvert) / intensity / Math.pow(delta, 0.6); + rr -= 24; // this -24 and math.pow(delta 0.6) found empirically, there's + // no science here! + gg -= 24; + bb -= 24; + rr *= factor; + gg *= factor; + bb *= factor; + if (rr > 255) + { + rr = 255; + } + if (gg > 255) + { + gg = 255; + } + if (bb > 255) + { + bb = 255; + } + rr = 255 - rr; + gg = 255 - gg; + bb = 255 - bb; + if (rr > 255) + { + rr = 255; + } + if (gg > 255) + { + gg = 255; + } + if (bb > 255) + { + bb = 255; + } + return rr << 16 | gg << 8 | bb; + } + + public static int toGreyscale(int col) + { + int gg = col >> 8; + int grey = gg >> 8; + grey += gg & 255; + grey += col & 255; + grey /= 3; + return grey << 16 | grey << 8 | (grey & 255); + } + + public static void sendUpdatedColorsToPlayer(GCPlayerStats stats) + { + int dimID = stats.getPlayer().get().dimension; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RECOLOR_ALL_GLASS, dimID, new Object[] + {Integer.valueOf(stats.getGlassColor1()), Integer.valueOf(stats.getGlassColor2()), Integer.valueOf(stats.getGlassColor3())}), stats.getPlayer().get()); + } + + public static void updateColorsForArea(int dimID, BlockPos pos, int range, int color1, int color2, int color3) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_RECOLOR_ALL_GLASS, dimID, new Object[] + {color1, color2, color3}), new TargetPoint(dimID, pos.getX(), pos.getY(), pos.getZ(), range)); + } + + public static void setGLColor(int col) + { + int gg = col >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = col & 255; + GlStateManager.color(rr / 255F, gg / 255F, bb / 255F, 1.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/Compatibility.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/Compatibility.java new file mode 100644 index 00000000..1886ee85 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/Compatibility.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Optional; + +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; + +public enum Compatibility +{ + + ACTUALLYADDITIONS("actuallyadditions"), + APPLIEDENERGISTICS2("appliedenergistics2"), + BIOMESOPLENTY("biomesoplenty"), + BUILDCRAFT("buildcraftcore"), + BUILDCRAFT_TRANSPORT("buildcrafttransport"), + BUILDCRAFT_ENERGY("buildcraftenergy"), + CUBIC_CHUNKS("cubicchunks"), + ENDERIO("enderio"), + GRECHTECH("gregtech", "gregtech_addon"), + INDUSTRIALCRAFT("ic2"), + JEI("jei"), + MATTEROVERDRIVE("matteroverdrive"), + MEKANISM("mekanism"), + PLAYER_API("PlayerAPI"), + RENDER_PLAYER_API("RenderPlayerAPI"), + PNEUMATICCRAFT("pneumaticcraft"), + SPONGEFORGE("spongeforge"), + TINKERS_CONSTRUCT("tconstruct"), + WAILA("waila"); + + + private final String modid; + private final String displayName; + private final boolean isLoaded; + private final Optional modContainer; + + Compatibility(String modid, String altModid) + { + final boolean loaded = (Loader.isModLoaded(modid) || Loader.isModLoaded(altModid)); + this.modid = modid; + this.isLoaded = loaded; + this.modContainer = Loader.instance().getModList().stream().filter(m -> m.getModId().equals(modid)).findFirst(); + this.displayName = loaded ? modContainer.get().getName() : ""; + } + + Compatibility(String modid) + { + final boolean loaded = Loader.isModLoaded(modid); + this.modid = modid; + this.isLoaded = loaded; + this.modContainer = Loader.instance().getModList().stream().filter(m -> m.getModId().equals(modid)).findFirst(); + this.displayName = loaded ? modContainer.get().getName() : ""; + } + + public String modid() + { + return modid; + } + + public String displayName() + { + return displayName; + } + + public boolean isLoaded() + { + return isLoaded; + } + + public String getVersion() + { + if (modContainer.isPresent()) + { + return modContainer.get().getVersion(); + } + return "unspecified"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CompatibilityManager.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CompatibilityManager.java new file mode 100644 index 00000000..ab6f989d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CompatibilityManager.java @@ -0,0 +1,465 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ +package micdoodle8.mods.galacticraft.core.util; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +//import cpw.mods.fml.common.Loader; +//import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; +import net.minecraft.world.WorldType; +import net.minecraft.world.gen.ChunkProviderServer; + +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; + +@SuppressWarnings({"rawtypes", "unchecked"}) +public class CompatibilityManager +{ + public final static String modidIC2 = "ic2"; + public final static String modidMekanism = "mekanism"; + public final static String modidBuildcraft = "buildcraftcore"; + public final static String modBCraftTransport = "buildcrafttransport"; + public final static String modBCraftEnergy = "buildcraftenergy"; + public static boolean PlayerAPILoaded = Loader.isModLoaded("PlayerAPI"); + public static boolean RenderPlayerAPILoaded = Loader.isModLoaded("RenderPlayerAPI"); + public static boolean modJEILoaded = Loader.isModLoaded("jei"); + private static boolean modIc2Loaded = Loader.isModLoaded(modidIC2); + private static boolean modICClassicLoaded; + public static boolean modBCraftLoaded = Loader.isModLoaded(modidBuildcraft); + private static boolean modBCraftEnergyLoaded = Loader.isModLoaded(modBCraftEnergy); + private static boolean modBCraftTransportLoaded; + private static boolean modGTLoaded; + private static boolean modTELoaded = Loader.isModLoaded("thermalexpansion"); + private static boolean modMekLoaded = Loader.isModLoaded(modidMekanism); + private static boolean modAetherIILoaded; + private static boolean modAppEngLoaded; + private static boolean modPneumaticCraftLoaded; + private static boolean modBOPLoaded = Loader.isModLoaded("biomesoplenty"); + private static boolean modEIOLoaded = Loader.isModLoaded("enderio"); + public static boolean modAALoaded = Loader.isModLoaded("actuallyadditions"); + private static boolean spongeLoaded; + private static boolean modMatterOverdriveLoaded; + private static boolean wailaLoaded; + public static boolean isSmartMovingLoaded = Loader.isModLoaded("smartmoving"); + public static boolean isTConstructLoaded = Loader.isModLoaded("tconstruct"); + public static boolean isWitcheryLoaded = Loader.isModLoaded("witchery"); + public static boolean isCubicChunksLoaded; + public static Class classGTOre = null; + private static Method spongeOverrideSet = null; + private static Method spongeOverrideGet = null; + public static Class classBCTransport; + public static Class classBCTransportPipeTile; + public static Class classBOPWorldType = null; + public static Class classBOPws = null; + public static Class classBOPwcm = null; + public static Class classIC2wrench = null; + public static Class classIC2wrenchElectric = null; + public static Class classIC2tileEventLoad; + public static Class classIC2tileEventUnload; + public static Field fieldIC2tickhandler; + public static Field fieldIC2networkManager; + public static Class classIc2ClassicNetworkManager; + public static Class classIC2cableType = null; + public static Constructor constructorIC2cableTE = null; + private static Method androidPlayerGet; + private static Method androidPlayerIsAndroid; + public static Class classIc2ClassicTileCable; + + public static void checkForCompatibleMods() + { + if (Loader.isModLoaded("gregtech") || Loader.isModLoaded("gregtech_addon")) + { + CompatibilityManager.modGTLoaded = true; + } + if (CompatibilityManager.modMekLoaded) + { + GalacticraftCore.logger.info("Activating Mekanism compatibility."); + } + if (CompatibilityManager.modTELoaded) + { + GalacticraftCore.logger.info("Activating ThermalExpansion compatibility features."); + } + if (CompatibilityManager.isTConstructLoaded) + { + GalacticraftCore.logger.info("Activating Tinker's Construct compatibility features."); + } + if (CompatibilityManager.modIc2Loaded) + { + if (tryClass("ic2.api.classic.addon.IC2Plugin") != null) + { + modICClassicLoaded = true; + classIc2ClassicTileCable = tryClass("ic2.core.block.wiring.tile.TileEntityCable"); + classIc2ClassicNetworkManager = tryClass("ic2.core.network.NetworkManager"); + } else + { + classIC2cableType = tryClass("ic2.core.block.wiring.CableType"); + } + try + { + classIC2wrench = tryClass("ic2.core.item.tool.ItemToolWrench"); + classIC2wrenchElectric = tryClass("ic2.core.item.tool.ItemToolWrenchElectric"); + classIC2tileEventLoad = tryClass("ic2.api.energy.event.EnergyTileLoadEvent"); + classIC2tileEventUnload = tryClass("ic2.api.energy.event.EnergyTileUnloadEvent"); + Class clazzIC2 = tryClass("ic2.core.IC2"); + fieldIC2networkManager = clazzIC2.getDeclaredField("network"); + fieldIC2tickhandler = clazzIC2.getDeclaredField("tickHandler"); + Class classIC2cable; + try + { + classIC2cable = Class.forName("ic2.core.block.wiring.TileEntityCable"); + } catch (ClassNotFoundException e) + { + try + { + classIC2cable = Class.forName("ic2.core.block.wiring.tile.TileEntityCable"); + } catch (Exception e1) + { + classIC2cable = null; + } + } + if (classIC2cable != null) + { + try + { + BlockEnclosed.onBlockNeighbourChangeIC2a = classIC2cable.getMethod("onNeighborChange", Block.class); + } catch (Exception e) + { + try + { + BlockEnclosed.onBlockNeighbourChangeIC2b = classIC2cable.getMethod("onNeighborChange", Block.class, BlockPos.class); + } catch (Exception e1) + { + BlockEnclosed.onBlockNeighbourChangeIC2a = classIC2cable.getMethod("onBlockUpdate", Block.class); + } + } + Constructor[] constructors = classIC2cable.getDeclaredConstructors(); + for (Constructor constructor2 : constructors) + { + if (constructor2.getGenericParameterTypes().length == 2) + { + constructorIC2cableTE = constructor2; + break; + } + } + } + GalacticraftCore.logger.info("Activating IndustrialCraft2 compatibility features."); + } catch (Exception e) + { + e.printStackTrace(); + } + } + if (Loader.isModLoaded(modBCraftTransport)) + { + CompatibilityManager.modBCraftTransportLoaded = true; + try + { + classBCTransport = Class.forName("buildcraft.transport.BCTransportItems"); + classBCTransportPipeTile = Class.forName("buildcraft.transport.tile.TilePipeHolder"); + } catch (Exception e) + { + e.printStackTrace(); + } + BlockEnclosed.initialiseBC(); + if (CompatibilityManager.classBCTransportPipeTile == null) + { + CompatibilityManager.modBCraftTransportLoaded = false; + } else + { + GalacticraftCore.logger.info("Activating BuildCraft Transport (Pipes) compatibility features."); + } + } + if (CompatibilityManager.modBOPLoaded) + { + try + { + classBOPWorldType = Class.forName("biomesoplenty.common.world.WorldTypeBOP"); + classBOPws = Class.forName("biomesoplenty.common.world.BOPWorldSettings"); + classBOPwcm = Class.forName("biomesoplenty.common.world.BiomeProviderBOP"); + GalacticraftCore.logger.info("Activating Biomes O'Plenty compatibility feature."); + } catch (Exception e) + { + e.printStackTrace(); + } + } + if (Loader.isModLoaded("aetherii")) + { + CompatibilityManager.modAetherIILoaded = true; + GalacticraftCore.logger.info("Activating AetherII compatibility feature."); + } + if (Loader.isModLoaded("appliedenergistics2")) + { + CompatibilityManager.modAppEngLoaded = true; + GalacticraftCore.logger.info("Activating AppliedEnergistics2 compatibility features."); + } + if (Loader.isModLoaded("pneumaticcraft")) + { + CompatibilityManager.modPneumaticCraftLoaded = true; + GalacticraftCore.logger.info("Activating PneumaticCraft compatibility features."); + } + if (Loader.isModLoaded("waila")) + { + CompatibilityManager.wailaLoaded = true; + GalacticraftCore.logger.info("Activating WAILA compatibility features."); + } + if (Loader.isModLoaded("sponge")) + { + try + { + Class clazz = Class.forName("org.spongepowered.common.interfaces.world.gen.IMixinChunkProviderServer"); + spongeOverrideSet = clazz.getMethod("setForceChunkRequests", boolean.class); + spongeOverrideGet = clazz.getMethod("getForceChunkRequests"); + spongeLoaded = true; + } catch (Exception e) + { + try + { + Class clazz = Class.forName("org.spongepowered.common.bridge.world.chunk.ChunkProviderServerBridge"); + spongeOverrideSet = clazz.getMethod("bridge$setForceChunkRequests", boolean.class); + spongeOverrideGet = clazz.getMethod("bridge$getForceChunkRequests"); + spongeLoaded = true; + } catch (Exception enew) + { + enew.printStackTrace(); + } + } + } + if (Loader.isModLoaded("cubicchunks")) + { + CompatibilityManager.isCubicChunksLoaded = true; + } + if (Loader.isModLoaded("matteroverdrive")) + { + try + { + Class androidPlayer = Class.forName("matteroverdrive.entity.android_player.AndroidPlayer"); + Class androidCapability = Class.forName("matteroverdrive.entity.player.MOPlayerCapabilityProvider"); + CompatibilityManager.androidPlayerGet = androidCapability.getMethod("GetAndroidCapability", Entity.class); + CompatibilityManager.androidPlayerIsAndroid = androidPlayer.getMethod("isAndroid"); + CompatibilityManager.modMatterOverdriveLoaded = true; + } catch (Exception e) + { + e.printStackTrace(); + } + } + if (CompatibilityManager.isIc2ClassicLoaded()) + { + Item ic2Coal = ForgeRegistries.ITEMS.getValue(new ResourceLocation("ic2", "itemmisc")); + // Coal Chunk + OreDictionary.registerOre("coal", new ItemStack(ic2Coal, 1, 252)); + // Coal Ball + OreDictionary.registerOre("coal", new ItemStack(ic2Coal, 1, 250)); + // Compressed Coal Ball + OreDictionary.registerOre("compressedCoal", new ItemStack(ic2Coal, 1, 251)); + // Charcoal Block + OreDictionary.registerOre("blockCharcoal", new ItemStack(ic2Coal, 1, 250)); + } else if (CompatibilityManager.isIc2Loaded()) + { + Item ic2Coal = ForgeRegistries.ITEMS.getValue(new ResourceLocation("ic2", "crafting")); + // Coal Chunk + OreDictionary.registerOre("coal", new ItemStack(ic2Coal, 1, 18)); + // Coal Ball + OreDictionary.registerOre("coal", new ItemStack(ic2Coal, 1, 16)); + // Compressed Coal Ball + OreDictionary.registerOre("compressedCoal", new ItemStack(ic2Coal, 1, 17)); + } + OreDictionary.registerOre("charcoal", new ItemStack(Items.COAL, 1, 1)); + } + + @Nullable + private static Class tryClass(String name) + { + try + { + return Class.forName(name); + } catch (ClassNotFoundException e) + { + return null; + } + } + + public static boolean isIc2Loaded() + { + return CompatibilityManager.modIc2Loaded; + } + + public static boolean isIc2ClassicLoaded() + { + return CompatibilityManager.modICClassicLoaded; + } + + public static boolean isBCraftTransportLoaded() + { + return CompatibilityManager.modBCraftTransportLoaded; + } + + public static boolean isBCraftEnergyLoaded() + { + return CompatibilityManager.modBCraftEnergyLoaded; + } + + public static boolean isTELoaded() + { + return CompatibilityManager.modTELoaded; + } + + public static boolean isMekanismLoaded() + { + return CompatibilityManager.modMekLoaded; + } + + public static boolean isGTLoaded() + { + return CompatibilityManager.modGTLoaded; + } + + public static boolean isAIILoaded() + { + return CompatibilityManager.modAetherIILoaded; + } + + public static boolean isAppEngLoaded() + { + return CompatibilityManager.modAppEngLoaded; + } + + public static boolean isBOPLoaded() + { + return CompatibilityManager.modBOPLoaded; + } + + public static boolean isBOPWorld(WorldType worldType) + { + if (modBOPLoaded && classBOPWorldType != null && classBOPws != null && classBOPwcm != null) + { + return classBOPWorldType.isInstance(worldType); + } + return false; + } + + public static boolean isPneumaticCraftLoaded() + { + return CompatibilityManager.modPneumaticCraftLoaded; + } + + public static boolean isWailaLoaded() + { + return CompatibilityManager.wailaLoaded; + } + + public static void spongeOverrideStart(WorldServer w) + { + } + + public static boolean forceLoadChunks(WorldServer w) + { + Boolean spongeForceChunksPrevious = null; + if (spongeLoaded) + { + ChunkProviderServer cps = w.getChunkProvider(); + try + { + spongeForceChunksPrevious = (Boolean) spongeOverrideGet.invoke(cps); + spongeOverrideSet.invoke(cps, true); + } catch (Exception ignore) + { + } + } + return Boolean.TRUE.equals(spongeForceChunksPrevious); + } + + public static void forceLoadChunksEnd(WorldServer w, boolean previous) + { + if (spongeLoaded) + { + try + { + spongeOverrideSet.invoke(w.getChunkProvider(), previous); + } catch (Exception ignore) + { + } + } + } + + public static void registerMicroBlocks() + { + try + { + Class clazz = Class.forName("codechicken.microblock.MicroMaterialRegistry"); + if (clazz != null) + { + Method registerMethod = null; + Method[] methodz = clazz.getMethods(); + for (Method m : methodz) + { + if (m.getName().equals("registerMaterial")) + { + registerMethod = m; + break; + } + } + Class clazzbm = Class.forName("codechicken.microblock.BlockMicroMaterial"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 3), "tile.gcBlockCore.decoblock1"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 4), "tile.gcBlockCore.decoblock2"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 9), "tile.gcBlockCore.copperBlock"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 10), "tile.gcBlockCore.tinBlock"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 11), "tile.gcBlockCore.aluminumBlock"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 12), "tile.gcBlockCore.meteorironBlock"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.blockMoon, 3), "tile.moonBlock.moondirt"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.blockMoon, 4), "tile.moonBlock.moonstone"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.blockMoon, 5), "tile.moonBlock.moongrass"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.blockMoon, 14), "tile.moonBlock.bricks"); + GalacticraftCore.logger.info("Activating CodeChicken Microblocks compatibility."); + } + } catch (Exception e) + { + } + } + + public static boolean isAndroid(EntityPlayer player) + { + if (CompatibilityManager.modMatterOverdriveLoaded) + { + // Equivalent to: + // AndroidPlayer androidPlayer = AndroidPlayer.get(player); + // return (androidPlayer != null && androidPlayer.isAndroid()); + try + { + Object androidPlayer = CompatibilityManager.androidPlayerGet.invoke(null, player); + if (androidPlayer != null) + { + return (Boolean) CompatibilityManager.androidPlayerIsAndroid.invoke(androidPlayer); + } + } catch (Exception ignore) + { + } + } + return false; + } + + public static boolean useAluDust() + { + return modIc2Loaded || modAppEngLoaded || modTELoaded || modEIOLoaded || modAALoaded; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ConfigManagerCore.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ConfigManagerCore.java new file mode 100644 index 00000000..810269af --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ConfigManagerCore.java @@ -0,0 +1,1112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; + +import net.minecraftforge.common.config.ConfigCategory; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; +import net.minecraftforge.fml.client.config.IConfigElement; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.recipe.RecipeManagerGC; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; + +import com.google.common.primitives.Ints; + +import org.lwjgl.input.Keyboard; + +public class ConfigManagerCore +{ + + static Configuration config; + + // GAME CONTROL + public static boolean forceOverworldRespawn; + public static boolean hardMode; + public static boolean quickMode; + public static boolean challengeMode; + private static int challengeFlags; + public static boolean challengeRecipes; + public static boolean challengeMobDropsAndSpawning; + public static boolean challengeSpawnHandling; + public static boolean challengeAsteroidPopulation; + public static boolean disableRocketsToOverworld; + public static boolean disableSpaceStationCreation; + public static boolean spaceStationsRequirePermission; + public static boolean disableUpdateCheck; + public static boolean enableSpaceRaceManagerPopup; + public static boolean enableDebug; + public static boolean enableSealerEdgeChecks; + public static boolean disableLander; + public static boolean recipesRequireGCAdvancedMetals = true; + public static boolean allowLiquidGratings; + + // DIMENSIONS + public static int idDimensionOverworld; + public static int idDimensionOverworldOrbit; + public static int idDimensionOverworldOrbitStatic; + public static int idDimensionMoon; + public static int biomeIDbase = 102; + public static boolean disableBiomeTypeRegistrations; + public static int[] staticLoadDimensions = {}; + public static int[] disableRocketLaunchDimensions = {-1, 1}; + public static boolean disableRocketLaunchAllNonGC; + public static int otherPlanetWorldBorders = 0; + public static boolean keepLoadedNewSpaceStations; + + // SCHEMATICS + public static int idSchematicRocketT1; + public static int idSchematicMoonBuggy; + public static int idSchematicAddSchematic; + + // ACHIEVEMENTS + public static int idAchievBase; + + // CLIENT / VISUAL FX + public static boolean moreStars; + public static boolean disableSpaceshipParticles; + public static boolean disableVehicleCameraChanges; + public static boolean oxygenIndicatorLeft; + public static boolean oxygenIndicatorBottom; + public static boolean overrideCapes; + public static boolean disableRocketIconRotation; + + // DIFFICULTY + public static double dungeonBossHealthMod; + public static int suffocationCooldown; + public static int suffocationDamage; + public static int rocketFuelFactor; + public static double meteorSpawnMod; + public static boolean meteorBlockDamageEnabled; + public static boolean disableSpaceshipGrief; + public static double spaceStationEnergyScalar; + + // WORLDGEN + public static boolean enableCopperOreGen; + public static boolean enableTinOreGen; + public static boolean enableAluminumOreGen; + public static boolean enableSiliconOreGen; + public static boolean disableCheeseMoon; + public static boolean disableTinMoon; + public static boolean disableCopperMoon; + public static boolean disableMoonVillageGen; + public static boolean disableSapphireMoon; + public static int[] externalOilGen; + public static double oilGenFactor; + public static boolean retrogenOil; + public static String[] oregenIDs = {}; + public static boolean enableOtherModsFeatures; + public static boolean whitelistCoFHCoreGen; + public static boolean enableThaumCraftNodes; + + // COMPATIBILITY + public static String[] sealableIDs = {}; + public static String[] detectableIDs = {}; + public static boolean alternateCanisterRecipe; + public static String otherModsSilicon; + public static boolean useOldOilFluidID; + public static boolean useOldFuelFluidID; + + // KEYBOARD AND MOUSE + public static String keyOverrideMap; + public static String keyOverrideFuelLevel; + public static String keyOverrideToggleAdvGoggles; + public static int keyOverrideMapI; + public static int keyOverrideFuelLevelI; + public static int keyOverrideToggleAdvGogglesI; + public static float mapMouseScrollSensitivity; + public static boolean invertMapMouseScroll; + + // CHUNKLOADING + public static boolean loadOnLogin; + + public static ArrayList clientSave = null; + private static Map> propOrder = new TreeMap<>(); + private static String currentCat; + + public static void initialize(File file) + { + ConfigManagerCore.config = new Configuration(file); + ConfigManagerCore.syncConfig(true); + } + + public static void forceSave() + { + ConfigManagerCore.config.save(); + } + + public static void syncConfig(boolean load) + { + try + { + propOrder.clear(); + Property prop; + + if (!config.isChild) + { + if (load) + { + config.load(); + } + } + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Enable Debug Messages", false); + prop.setComment("If this is enabled, debug messages will appear in the console. This is useful for finding bugs in the mod."); + prop.setLanguageKey("gc.configgui.enable_debug"); + enableDebug = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "idDimensionOverworld", 0); + prop.setComment("Dimension ID for the Overworld (as seen in the Celestial Map)"); + prop.setLanguageKey("gc.configgui.id_dimension_overworld").setRequiresMcRestart(true); + idDimensionOverworld = prop.getInt(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "idDimensionMoon", -28); + prop.setComment("Dimension ID for the Moon"); + prop.setLanguageKey("gc.configgui.id_dimension_moon").setRequiresMcRestart(true); + idDimensionMoon = prop.getInt(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "idDimensionOverworldOrbit", -27); + prop.setComment("WorldProvider ID for Overworld Space Stations (advanced: do not change unless you have conflicts)"); + prop.setLanguageKey("gc.configgui.id_dimension_overworld_orbit").setRequiresMcRestart(true); + idDimensionOverworldOrbit = prop.getInt(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "idDimensionOverworldOrbitStatic", -26); + prop.setComment("WorldProvider ID for Static Space Stations (advanced: do not change unless you have conflicts)"); + prop.setLanguageKey("gc.configgui.id_dimension_overworld_orbit_static").setRequiresMcRestart(true); + idDimensionOverworldOrbitStatic = prop.getInt(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "biomeIDBase", 102); + prop.setComment("Biome ID base. GC will use biome IDs from this to this + 3, or more with addons. Allowed 40-250. Default 102."); + prop.setLanguageKey("gc.configgui.biome_id_base").setRequiresMcRestart(true); + biomeIDbase = prop.getInt(); + if (biomeIDbase < 40 || biomeIDbase > 250) + { + biomeIDbase = 102; + } + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "Static Loaded Dimensions", ConfigManagerCore.staticLoadDimensions); + prop.setComment("IDs to load at startup, and keep loaded until server stops. Can be added via /gckeeploaded"); + prop.setLanguageKey("gc.configgui.static_loaded_dimensions"); + staticLoadDimensions = prop.getIntList(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "Set new Space Stations to be static loaded", true); + prop.setComment("Set this to true to have an automatic /gckeeploaded for any new Space Station created."); + prop.setLanguageKey("gc.configgui.static_loaded_new_ss"); + keepLoadedNewSpaceStations = prop.getBoolean(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "Dimensions where rockets cannot launch", new String[] {"1", "-1"}); + prop.setComment("IDs of dimensions where rockets should not launch - this should always include the Nether."); + prop.setLanguageKey("gc.configgui.rocket_disabled_dimensions"); + disableRocketLaunchDimensions = prop.getIntList(); + disableRocketLaunchAllNonGC = searchAsterisk(prop.getStringList()); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "Disable rockets from returning to Overworld", false); + prop.setComment("If true, rockets will be unable to reach the Overworld (only use this in special modpacks!)"); + prop.setLanguageKey("gc.configgui.rocket_disable_overworld_return"); + disableRocketsToOverworld = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SERVER, "World border for landing location on other planets (Moon, Mars, etc)", 0); + prop.setComment("Set this to 0 for no borders (default). If set to e.g. 2000, players will land on the Moon inside the x,z range -2000 to 2000.)"); + prop.setLanguageKey("gc.configgui.planet_worldborders"); + otherPlanetWorldBorders = prop.getInt(0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Force Overworld Spawn", false); + prop.setComment("By default, you will respawn on Galacticraft dimensions if you die. If you are dying over and over on a planet, set this to true, and you will respawn back on the Overworld."); + prop.setLanguageKey("gc.configgui.force_overworld_respawn"); + forceOverworldRespawn = prop.getBoolean(false); + finishProp(prop); + + // + + prop = getConfig(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicRocketT1", 0); + prop.setComment("Schematic ID for Tier 1 Rocket, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_rocket_t1"); + idSchematicRocketT1 = prop.getInt(0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicMoonBuggy", 1); + prop.setComment("Schematic ID for Moon Buggy, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_moon_buggy"); + idSchematicMoonBuggy = prop.getInt(1); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicAddSchematic", Integer.MAX_VALUE); + prop.setComment("Schematic ID for \"Add Schematic\" Page, must be unique"); + prop.setLanguageKey("gc.configgui.id_schematic_add_schematic"); + idSchematicAddSchematic = prop.getInt(Integer.MAX_VALUE); + finishProp(prop); + + // + + prop = getConfig(Constants.CONFIG_CATEGORY_ACHIEVEMENTS, "idAchievBase", 1784); + prop.setComment("Base Achievement ID. All achievement IDs will start at this number."); + prop.setLanguageKey("gc.configgui.id_achiev_base"); + idAchievBase = prop.getInt(1784); + finishProp(prop); + + //Client side + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "More Stars", true); + prop.setComment("Setting this to false will revert night skies back to default minecraft star count"); + prop.setLanguageKey("gc.configgui.more_stars"); + moreStars = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Disable Spaceship Particles", false); + prop.setComment("If you have FPS problems, setting this to true will help if rocket particles are in your sights"); + prop.setLanguageKey("gc.configgui.disable_spaceship_particles"); + disableSpaceshipParticles = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Disable Vehicle Third-Person and Zoom", false); + prop.setComment("If you're using this mod in virtual reality, or if you don't want the camera changes when entering a Galacticraft vehicle, set this to true."); + prop.setLanguageKey("gc.configgui.disable_vehicle_camera_changes"); + disableVehicleCameraChanges = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Minimap Left", false); + prop.setComment("If true, this will move the Oxygen Indicator to the left side. You can combine this with \"Minimap Bottom\""); + prop.setLanguageKey("gc.configgui.oxygen_indicator_left"); + oxygenIndicatorLeft = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Minimap Bottom", false); + prop.setComment("If true, this will move the Oxygen Indicator to the bottom. You can combine this with \"Minimap Left\""); + prop.setLanguageKey("gc.configgui.oxygen_indicator_bottom"); + oxygenIndicatorBottom = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Disable Rocket Icon Rotation", false); + prop.setComment("If you have FPS problems, setting this to true will disable GC Rocket icons from rotating in GUI's"); + prop.setLanguageKey("gc.configgui.disable_rocket_icon_rotation"); + disableRocketIconRotation = prop.getBoolean(false); + finishProp(prop); + + //World gen + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Oil Generation Factor", 1.8); + prop.setComment("Increasing this will increase amount of oil that will generate in each chunk."); + prop.setLanguageKey("gc.configgui.oil_gen_factor"); + oilGenFactor = prop.getDouble(1.8); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Oil gen in external dimensions", new int[] {0}); + prop.setComment("List of non-galacticraft dimension IDs to generate oil in."); + prop.setLanguageKey("gc.configgui.external_oil_gen"); + externalOilGen = prop.getIntList(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Retro Gen of GC Oil in existing map chunks", false); + prop.setComment("If this is enabled, GC oil will be added to existing Overworld maps where possible."); + prop.setLanguageKey("gc.configgui.enable_retrogen_oil"); + retrogenOil = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Enable Copper Ore Gen", true); + prop.setComment("If this is enabled, copper ore will generate on the overworld."); + prop.setLanguageKey("gc.configgui.enable_copper_ore_gen").setRequiresMcRestart(true); + enableCopperOreGen = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Enable Tin Ore Gen", true); + prop.setComment("If this is enabled, tin ore will generate on the overworld."); + prop.setLanguageKey("gc.configgui.enable_tin_ore_gen").setRequiresMcRestart(true); + enableTinOreGen = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Enable Aluminum Ore Gen", true); + prop.setComment("If this is enabled, aluminum ore will generate on the overworld."); + prop.setLanguageKey("gc.configgui.enable_aluminum_ore_gen").setRequiresMcRestart(true); + enableAluminumOreGen = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Enable Silicon Ore Gen", true); + prop.setComment("If this is enabled, silicon ore will generate on the overworld."); + prop.setLanguageKey("gc.configgui.enable_silicon_ore_gen").setRequiresMcRestart(true); + enableSiliconOreGen = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Cheese Ore Gen on Moon", false); + prop.setComment("Disable Cheese Ore Gen on Moon."); + prop.setLanguageKey("gc.configgui.disable_cheese_moon"); + disableCheeseMoon = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Tin Ore Gen on Moon", false); + prop.setComment("Disable Tin Ore Gen on Moon."); + prop.setLanguageKey("gc.configgui.disable_tin_moon"); + disableTinMoon = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Copper Ore Gen on Moon", false); + prop.setComment("Disable Copper Ore Gen on Moon."); + prop.setLanguageKey("gc.configgui.disable_copper_moon"); + disableCopperMoon = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Sapphire Ore Gen on Moon", false); + prop.setComment("Disable Sapphire Ore Gen on Moon."); + prop.setLanguageKey("gc.configgui.disable_sapphire_moon"); + disableSapphireMoon = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Moon Village Gen", false); + prop.setComment("If true, moon villages will not generate."); + prop.setLanguageKey("gc.configgui.disable_moon_village_gen"); + disableMoonVillageGen = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Generate all other mods features on planets", false); + prop.setComment("If this is enabled, other mods' standard ores and all other features (eg. plants) can generate on the Moon and planets. Apart from looking wrong, this make cause 'Already Decorating!' type crashes. NOT RECOMMENDED! See Wiki."); + prop.setLanguageKey("gc.configgui.enable_other_mods_features"); + enableOtherModsFeatures = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Whitelist CoFHCore worldgen to generate its ores and lakes on planets", false); + prop.setComment("If generate other mods features is disabled as recommended, this setting can whitelist CoFHCore custom worldgen on planets."); + prop.setLanguageKey("gc.configgui.whitelist_co_f_h_core_gen"); + whitelistCoFHCoreGen = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Generate ThaumCraft wild nodes on planetary surfaces", true); + prop.setComment("If ThaumCraft is installed, ThaumCraft wild nodes can generate on the Moon and planets."); + prop.setLanguageKey("gc.configgui.enable_thaum_craft_nodes"); + enableThaumCraftNodes = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Other mods ores for GC to generate on the Moon and planets", new String[] {}); + prop.setComment( + "Enter IDs of other mods' ores here for Galacticraft to generate them on the Moon and other planets. Format is BlockName or BlockName:metadata. Use optional parameters at end of each line: /RARE /UNCOMMON or /COMMON for rarity in a chunk; /DEEP /SHALLOW or /BOTH for height; /SINGLE /STANDARD or /LARGE for clump size; /XTRARANDOM for ores sometimes there sometimes not at all. /ONLYMOON or /ONLYMARS if wanted on one planet only. If nothing specified, defaults are /COMMON, /BOTH and /STANDARD. Repeat lines to generate a huge quantity of ores."); + prop.setLanguageKey("gc.configgui.other_mod_ore_gen_i_ds"); + oregenIDs = prop.getStringList(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Use legacy oilgc fluid registration", false); + prop.setComment("Set to true to make Galacticraft oil register as oilgc, for backwards compatibility with previously generated worlds."); + prop.setLanguageKey("gc.configgui.use_old_oil_fluid_i_d"); + useOldOilFluidID = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Use legacy fuelgc fluid registration", false); + prop.setComment("Set to true to make Galacticraft fuel register as fuelgc, for backwards compatibility with previously generated worlds."); + prop.setLanguageKey("gc.configgui.use_old_fuel_fluid_i_d"); + useOldFuelFluidID = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Disable lander on Moon and other planets", false); + prop.setComment("If this is true, the player will parachute onto the Moon instead - use only in debug situations."); + prop.setLanguageKey("gc.configgui.disable_lander"); + disableLander = prop.getBoolean(false); + finishProp(prop); + + //Server side + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Disable Spaceship Explosion", false); + prop.setComment("Spaceships will not explode on contact if set to true."); + prop.setLanguageKey("gc.configgui.disable_spaceship_grief"); + disableSpaceshipGrief = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SERVER, "Space Stations Require Permission", true); + prop.setComment("While true, space stations require you to invite other players using /ssinvite "); + prop.setLanguageKey("gc.configgui.space_stations_require_permission"); + spaceStationsRequirePermission = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SERVER, "Disable Space Station creation", false); + prop.setComment("If set to true on a server, players will be completely unable to create space stations."); + prop.setLanguageKey("gc.configgui.disable_space_station_creation"); + disableSpaceStationCreation = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Override Capes", true); + prop.setComment("By default, Galacticraft will override capes with the mod's donor cape. Set to false to disable."); + prop.setLanguageKey("gc.configgui.override_capes"); + overrideCapes = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Space Station Solar Energy Multiplier", 2.0); + prop.setComment("Solar panels will work (default 2x) more effective on space stations."); + prop.setLanguageKey("gc.configgui.space_station_energy_scalar"); + spaceStationEnergyScalar = prop.getDouble(2.0); + finishProp(prop); + + try + { + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "External Sealable IDs", new String[] {"glass_pane"}); + prop.setComment( + "List non-opaque blocks from other mods (for example, special types of glass) that the Oxygen Sealer should recognize as solid seals. Format is 'modid:blockname:meta'\n'modid' is optional but will default to 'minecraft'\n'meta' can be '*' and will be all variants of that block if any"); + prop.setLanguageKey("gc.configgui.sealable_i_ds").setRequiresMcRestart(true); + sealableIDs = prop.getStringList(); + finishProp(prop); + } catch (Exception e) + { + GalacticraftCore.logger.error("[Galacticraft] It appears you have installed the 'Dev' version of Galacticraft instead of the regular version (or vice versa). Please re-install."); + } + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "External Detectable IDs", new String[] {Block.REGISTRY.getNameForObject(Blocks.COAL_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.DIAMOND_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.GOLD_ORE) + .getPath(), Block.REGISTRY.getNameForObject(Blocks.IRON_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.LAPIS_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.REDSTONE_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.LIT_REDSTONE_ORE).getPath()}); + prop.setComment("List blocks from other mods that the Sensor Glasses should recognize as solid blocks. Format is 'modid:blockname:meta'\n'modid' is optional but will default to 'minecraft'\n'meta' can be '*' and will be all variants of that block if any"); + prop.setLanguageKey("gc.configgui.detectable_i_ds").setRequiresMcRestart(true); + detectableIDs = prop.getStringList(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Quick Game Mode", false); + prop.setComment("Set this to true for less metal use in Galacticraft recipes (makes the game easier)."); + prop.setLanguageKey("gc.configgui.quick_mode"); + quickMode = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Harder Difficulty", false); + prop.setComment("Set this to true for increased difficulty in modpacks (see forum for more info)."); + prop.setLanguageKey("gc.configgui.hard_mode"); + hardMode = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Adventure Game Mode", false); + prop.setComment("Set this to true for a challenging adventure where the player starts the game stranded in the Asteroids dimension with low resources (only effective if Galacticraft Planets installed)."); + prop.setLanguageKey("gc.configgui.asteroids_start"); + challengeMode = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Adventure Game Mode Flags", 15); + prop.setComment("Add together flags 8, 4, 2, 1 to enable the four elements of adventure game mode. Default 15. 1 = extended compressor recipes. 2 = mob drops and spawning. 4 = more trees in hollow asteroids. 8 = start stranded in Asteroids."); + prop.setLanguageKey("gc.configgui.asteroids_flags"); + challengeFlags = prop.getInt(15); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Suffocation Cooldown", 100); + prop.setComment("Lower/Raise this value to change time between suffocation damage ticks (allowed range 50-250)"); + prop.setLanguageKey("gc.configgui.suffocation_cooldown"); + suffocationCooldown = Math.min(Math.max(50, prop.getInt(100)), 250); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Suffocation Damage", 2); + prop.setComment("Change this value to modify the damage taken per suffocation tick"); + prop.setLanguageKey("gc.configgui.suffocation_damage"); + suffocationDamage = prop.getInt(2); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Dungeon Boss Health Modifier", 1.0); + prop.setComment("Change this if you wish to balance the mod (if you have more powerful weapon mods)."); + prop.setLanguageKey("gc.configgui.dungeon_boss_health_mod"); + dungeonBossHealthMod = prop.getDouble(1.0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SERVER, "Enable Sealed edge checks", true); + prop.setComment("If this is enabled, areas sealed by Oxygen Sealers will run a seal check when the player breaks or places a block (or on block updates). This should be enabled for a 100% accurate sealed status, but can be disabled on servers for performance reasons."); + prop.setLanguageKey("gc.configgui.enable_sealer_edge_checks"); + enableSealerEdgeChecks = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Alternate recipe for canisters", false); + prop.setComment("Enable this if the standard canister recipe causes a conflict."); + prop.setLanguageKey("gc.configgui.alternate_canister_recipe").setRequiresMcRestart(true); + alternateCanisterRecipe = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "OreDict name of other mod's silicon", "itemSilicon"); + prop.setComment("This needs to match the OreDictionary name used in the other mod. Set a nonsense name to disable."); + prop.setLanguageKey("gc.configgui.ore_dict_silicon"); + otherModsSilicon = prop.getString(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Must use GC's own space metals in recipes", true); + prop.setComment("Should normally be true. If you set this to false, in a modpack with other mods with the same metals, players may be able to craft advanced GC items without travelling to Moon, Mars, Asteroids etc."); + prop.setLanguageKey("gc.configgui.disable_ore_dict_space_metals"); + recipesRequireGCAdvancedMetals = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_KEYS, "Open Galaxy Map", "KEY_M"); + prop.setComment("Default Map key on first Galacticraft run only. After first run, change keys by Minecraft in-game Controls menu. Valid settings: KEY_ followed by 0-9 or A-Z."); + prop.setLanguageKey("gc.configgui.override_map").setRequiresMcRestart(true); + keyOverrideMap = prop.getString(); + keyOverrideMapI = parseKeyValue(keyOverrideMap); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_KEYS, "Open Rocket GUI", "KEY_G"); + prop.setComment("Default Rocket/Fuel key on first Galacticraft run only. After first run, change keys by Minecraft in-game Controls menu. Valid settings: KEY_ followed by 0-9 or A-Z."); + prop.setLanguageKey("gc.configgui.key_override_fuel_level").setRequiresMcRestart(true); + keyOverrideFuelLevel = prop.getString(); + keyOverrideFuelLevelI = parseKeyValue(keyOverrideFuelLevel); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_KEYS, "Toggle Advanced Goggles", "KEY_K"); + prop.setComment("Default Goggles key on first Galacticraft run only. After first run, change keys by Minecraft in-game Controls menu. Valid settings: KEY_ followed by 0-9 or A-Z."); + prop.setLanguageKey("gc.configgui.key_override_toggle_adv_goggles").setRequiresMcRestart(true); + keyOverrideToggleAdvGoggles = prop.getString(); + keyOverrideToggleAdvGogglesI = parseKeyValue(keyOverrideToggleAdvGoggles); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Rocket fuel factor", 1); + prop.setComment("The normal factor is 1. Increase this to 2 - 5 if other mods with a lot of oil (e.g. BuildCraft) are installed to increase GC rocket fuel requirement."); + prop.setLanguageKey("gc.configgui.rocket_fuel_factor"); + rocketFuelFactor = prop.getInt(1); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CONTROLS, "Map Scroll Mouse Sensitivity", 1.0); + prop.setComment("Increase to make the mouse drag scroll more sensitive, decrease to lower sensitivity."); + prop.setLanguageKey("gc.configgui.map_scroll_sensitivity"); + mapMouseScrollSensitivity = (float) prop.getDouble(1.0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CONTROLS, "Map Scroll Mouse Invert", false); + prop.setComment("Set to true to invert the mouse scroll feature on the galaxy map."); + prop.setLanguageKey("gc.configgui.map_scroll_invert"); + invertMapMouseScroll = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Meteor Spawn Modifier", 1.0); + prop.setComment("Set to a value between 0.0 and 1.0 to decrease meteor spawn chance (all dimensions)."); + prop.setLanguageKey("gc.configgui.meteor_spawn_mod"); + meteorSpawnMod = prop.getDouble(1.0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Meteor Block Damage Enabled", true); + prop.setComment("Set to false to stop meteors from breaking blocks on contact."); + prop.setLanguageKey("gc.configgui.meteor_block_damage"); + meteorBlockDamageEnabled = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Disable Update Check", false); + prop.setComment("Update check will not run if this is set to true."); + prop.setLanguageKey("gc.configgui.disable_update_check"); + disableUpdateCheck = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Allow liquids into Gratings", true); + prop.setComment("Liquids will not flow into Grating block if this is set to false."); + prop.setLanguageKey("gc.configgui.allow_liquids_grating").setRequiresMcRestart(true); + allowLiquidGratings = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Biome Type Registrations", false); + prop.setComment("Biome Types will not be registered in the BiomeDictionary if this is set to true."); + prop.setLanguageKey("gc.configgui.disable_biome_type_registrations"); + disableBiomeTypeRegistrations = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Enable Space Race Manager Popup", false); + prop.setComment("Space Race Manager will show on-screen after login, if enabled."); + prop.setLanguageKey("gc.configgui.enable_space_race_manager_popup"); + enableSpaceRaceManagerPopup = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig("chunkloading", "LoadOnLogin", true); + prop.setComment("If you don't want each player's chunks to load when they log in, set to false"); + loadOnLogin = prop.getBoolean(false); + finishProp(prop); + + // Cleanup older GC config files + cleanConfig(config, propOrder); + + if (config.hasChanged()) + { + config.save(); + } + + challengeModeUpdate(); + } catch (final Exception e) + { + GalacticraftCore.logger.error("Problem loading core config (\"core.conf\")"); + e.printStackTrace(); + } + } + + public static void cleanConfig(Configuration config, Map> propOrder) + { + List categoriesToRemove = new LinkedList<>(); + for (String catName : config.getCategoryNames()) + { + List newProps = propOrder.get(catName); + if (newProps == null) + { + categoriesToRemove.add(catName); + } + else + { + ConfigCategory cat = config.getCategory(catName); + List toRemove = new LinkedList<>(); + for (String oldprop : cat.keySet()) + { + if (!newProps.contains(oldprop)) + { + toRemove.add(oldprop); + } + } + for (String removeMe : toRemove) + { + cat.remove(removeMe); + } + config.setCategoryPropertyOrder(catName, propOrder.get(catName)); + } + } + for (String catName : categoriesToRemove) + { + config.removeCategory(config.getCategory(catName)); + } + } + + private static Property getConfig(String cat, String key, int defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, double defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, boolean defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, String defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + config.moveProperty(Constants.CONFIG_CATEGORY_CONTROLS, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, String[] defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, int[] defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static void finishProp(Property prop) + { + if (propOrder.get(currentCat) == null) + { + propOrder.put(currentCat, new ArrayList<>()); + } + propOrder.get(currentCat).add(prop.getName()); + } + + public static boolean setLoaded(int newID) + { + boolean found = false; + + for (int staticLoadDimension : ConfigManagerCore.staticLoadDimensions) + { + if (staticLoadDimension == newID) + { + found = true; + break; + } + } + + if (!found) + { + int[] oldIDs = ConfigManagerCore.staticLoadDimensions; + ConfigManagerCore.staticLoadDimensions = new int[ConfigManagerCore.staticLoadDimensions.length + 1]; + System.arraycopy(oldIDs, 0, staticLoadDimensions, 0, oldIDs.length); + + ConfigManagerCore.staticLoadDimensions[ConfigManagerCore.staticLoadDimensions.length - 1] = newID; + String[] values = new String[ConfigManagerCore.staticLoadDimensions.length]; + Arrays.sort(ConfigManagerCore.staticLoadDimensions); + + for (int i = 0; i < values.length; i++) + { + values[i] = String.valueOf(ConfigManagerCore.staticLoadDimensions[i]); + } + + Property prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "Static Loaded Dimensions", ConfigManagerCore.staticLoadDimensions); + prop.setComment("IDs to load at startup, and keep loaded until server stops. Can be added via /gckeeploaded"); + prop.setLanguageKey("gc.configgui.static_loaded_dimensions"); + prop.set(values); + + ConfigManagerCore.config.save(); + } + + return !found; + } + + public static boolean setUnloaded(int idToRemove) + { + int foundCount = 0; + + for (int staticLoadDimension : ConfigManagerCore.staticLoadDimensions) + { + if (staticLoadDimension == idToRemove) + { + foundCount++; + } + } + + if (foundCount > 0) + { + List idArray = new ArrayList<>(Ints.asList(ConfigManagerCore.staticLoadDimensions)); + idArray.removeAll(Collections.singleton(idToRemove)); + + ConfigManagerCore.staticLoadDimensions = new int[idArray.size()]; + + for (int i = 0; i < idArray.size(); i++) + { + ConfigManagerCore.staticLoadDimensions[i] = idArray.get(i); + } + + String[] values = new String[ConfigManagerCore.staticLoadDimensions.length]; + Arrays.sort(ConfigManagerCore.staticLoadDimensions); + + for (int i = 0; i < values.length; i++) + { + values[i] = String.valueOf(ConfigManagerCore.staticLoadDimensions[i]); + } + + Property prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "Static Loaded Dimensions", ConfigManagerCore.staticLoadDimensions); + prop.setComment("IDs to load at startup, and keep loaded until server stops. Can be added via /gckeeploaded"); + prop.setLanguageKey("gc.configgui.static_loaded_dimensions"); + prop.set(values); + + ConfigManagerCore.config.save(); + } + + return foundCount > 0; + } + + public static void challengeModeUpdate() + { + if (challengeMode) + { + challengeRecipes = (challengeFlags & 1) > 0; + challengeMobDropsAndSpawning = (challengeFlags & 2) > 0; + challengeAsteroidPopulation = (challengeFlags & 4) > 0; + challengeSpawnHandling = (challengeFlags & 8) > 0; + } + else + { + challengeRecipes = false; + challengeMobDropsAndSpawning = false; + challengeAsteroidPopulation = false; + challengeSpawnHandling = false; + } + } + + /** + * Note for this to be effective, the prop = config.get() call has to + * provide a String[] as the default values If you use an Integer[] then the + * config parser deletes all non-numerical lines from the config before GC + * even sees them + */ + private static boolean searchAsterisk(String[] strings) + { + for (String s : strings) + { + if (s != null && "*".equals(s.trim())) + { + return true; + } + } + return false; + } + + public static List getConfigElements() + { + List list = new ArrayList<>(); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_DIFFICULTY)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_GENERAL)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_CLIENT)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_CONTROLS)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_COMPATIBILITY)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_WORLDGEN)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_SERVER)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_DIMENSIONS)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_SCHEMATIC)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_ACHIEVEMENTS)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_ENTITIES)).getChildElements()); + + return list; + } + + public static List getServerConfigOverride() + { + ArrayList returnList = new ArrayList<>(); + int modeFlags = ConfigManagerCore.hardMode ? 1 : 0; + modeFlags += ConfigManagerCore.quickMode ? 2 : 0; + modeFlags += ConfigManagerCore.challengeMode ? 4 : 0; + modeFlags += ConfigManagerCore.disableSpaceStationCreation ? 8 : 0; + modeFlags += ConfigManagerCore.recipesRequireGCAdvancedMetals ? 16 : 0; + modeFlags += ConfigManagerCore.challengeRecipes ? 32 : 0; + modeFlags += ConfigManagerCore.allowLiquidGratings ? 64 : 0; + returnList.add(modeFlags); + returnList.add(ConfigManagerCore.dungeonBossHealthMod); + returnList.add(ConfigManagerCore.suffocationDamage); + returnList.add(ConfigManagerCore.suffocationCooldown); + returnList.add(ConfigManagerCore.rocketFuelFactor); + returnList.add(ConfigManagerCore.otherModsSilicon); + // If changing this, update definition of + // EnumSimplePacket.C_UPDATE_CONFIGS - see comment in + // setConfigOverride() below + EnergyConfigHandler.serverConfigOverride(returnList); + + returnList.add(ConfigManagerCore.detectableIDs.clone()); + // TODO Should this include any other client-side configurables too? + return returnList; + } + + @SideOnly(Side.CLIENT) + public static void setConfigOverride(List configs) + { + int dataCount = 0; + int modeFlag = (Integer) configs.get(dataCount++); + ConfigManagerCore.hardMode = (modeFlag & 1) != 0; + ConfigManagerCore.quickMode = (modeFlag & 2) != 0; + ConfigManagerCore.challengeMode = (modeFlag & 4) != 0; + ConfigManagerCore.disableSpaceStationCreation = (modeFlag & 8) != 0; + ConfigManagerCore.recipesRequireGCAdvancedMetals = (modeFlag & 16) != 0; + ConfigManagerCore.challengeRecipes = (modeFlag & 32) != 0; + ConfigManagerCore.allowLiquidGratings = (modeFlag & 64) != 0; + ConfigManagerCore.dungeonBossHealthMod = (Double) configs.get(dataCount++); + ConfigManagerCore.suffocationDamage = (Integer) configs.get(dataCount++); + ConfigManagerCore.suffocationCooldown = (Integer) configs.get(dataCount++); + ConfigManagerCore.rocketFuelFactor = (Integer) configs.get(dataCount++); + ConfigManagerCore.otherModsSilicon = (String) configs.get(dataCount++); + // If adding any additional data objects here, also remember to update + // the packet definition of EnumSimplePacket.C_UPDATE_CONFIGS in + // PacketSimple + // Current working packet definition: Integer.class, Double.class, + // Integer.class, Integer.class, Integer.class, String.class, + // Float.class, Float.class, Float.class, Float.class, Integer.class, + // String[].class + + EnergyConfigHandler.setConfigOverride((Float) configs.get(dataCount++), (Float) configs.get(dataCount++), (Float) configs.get(dataCount++), (Float) configs.get(dataCount++), (Integer) configs.get(dataCount++)); + + int sizeIDs = configs.size() - dataCount; + if (sizeIDs > 0) + { + Object dataLast = configs.get(dataCount); + if (dataLast instanceof String) + { + ConfigManagerCore.detectableIDs = new String[sizeIDs]; + for (int j = 0; j < sizeIDs; j++) + ConfigManagerCore.detectableIDs[j] = new String((String) configs.get(dataCount++)); + } + else if (dataLast instanceof String[]) + { + ConfigManagerCore.detectableIDs = ((String[]) dataLast); + } + TickHandlerClient.registerDetectableBlocks(false); + } + + challengeModeUpdate(); + RecipeManagerGC.setConfigurableRecipes(); + } + + public static void saveClientConfigOverrideable() + { + if (ConfigManagerCore.clientSave == null) + { + ConfigManagerCore.clientSave = (ArrayList) ConfigManagerCore.getServerConfigOverride(); + } + } + + public static void restoreClientConfigOverrideable() + { + if (ConfigManagerCore.clientSave != null) + { + ConfigManagerCore.setConfigOverride(clientSave); + } + } + + private static int parseKeyValue(String key) + { + if (key.equals("KEY_A")) + { + return Keyboard.KEY_A; + } + else if (key.equals("KEY_B")) + { + return Keyboard.KEY_B; + } + else if (key.equals("KEY_C")) + { + return Keyboard.KEY_C; + } + else if (key.equals("KEY_D")) + { + return Keyboard.KEY_D; + } + else if (key.equals("KEY_E")) + { + return Keyboard.KEY_E; + } + else if (key.equals("KEY_F")) + { + return Keyboard.KEY_F; + } + else if (key.equals("KEY_G")) + { + return Keyboard.KEY_G; + } + else if (key.equals("KEY_H")) + { + return Keyboard.KEY_H; + } + else if (key.equals("KEY_I")) + { + return Keyboard.KEY_I; + } + else if (key.equals("KEY_J")) + { + return Keyboard.KEY_J; + } + else if (key.equals("KEY_K")) + { + return Keyboard.KEY_K; + } + else if (key.equals("KEY_L")) + { + return Keyboard.KEY_L; + } + else if (key.equals("KEY_M")) + { + return Keyboard.KEY_M; + } + else if (key.equals("KEY_N")) + { + return Keyboard.KEY_N; + } + else if (key.equals("KEY_O")) + { + return Keyboard.KEY_O; + } + else if (key.equals("KEY_P")) + { + return Keyboard.KEY_P; + } + else if (key.equals("KEY_Q")) + { + return Keyboard.KEY_Q; + } + else if (key.equals("KEY_R")) + { + return Keyboard.KEY_R; + } + else if (key.equals("KEY_S")) + { + return Keyboard.KEY_S; + } + else if (key.equals("KEY_T")) + { + return Keyboard.KEY_T; + } + else if (key.equals("KEY_U")) + { + return Keyboard.KEY_U; + } + else if (key.equals("KEY_V")) + { + return Keyboard.KEY_V; + } + else if (key.equals("KEY_W")) + { + return Keyboard.KEY_W; + } + else if (key.equals("KEY_X")) + { + return Keyboard.KEY_X; + } + else if (key.equals("KEY_Y")) + { + return Keyboard.KEY_Y; + } + else if (key.equals("KEY_Z")) + { + return Keyboard.KEY_Z; + } + else if (key.equals("KEY_1")) + { + return Keyboard.KEY_1; + } + else if (key.equals("KEY_2")) + { + return Keyboard.KEY_2; + } + else if (key.equals("KEY_3")) + { + return Keyboard.KEY_3; + } + else if (key.equals("KEY_4")) + { + return Keyboard.KEY_4; + } + else if (key.equals("KEY_5")) + { + return Keyboard.KEY_5; + } + else if (key.equals("KEY_6")) + { + return Keyboard.KEY_6; + } + else if (key.equals("KEY_7")) + { + return Keyboard.KEY_7; + } + else if (key.equals("KEY_8")) + { + return Keyboard.KEY_8; + } + else if (key.equals("KEY_9")) + { + return Keyboard.KEY_9; + } + else if (key.equals("KEY_0")) + { + return Keyboard.KEY_0; + } + + GalacticraftCore.logger.error("Failed to parse keyboard key: " + key + "... Use values A-Z or 0-9"); + + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CreativeTabGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CreativeTabGC.java new file mode 100644 index 00000000..25cb22b5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CreativeTabGC.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Collections; +import java.util.Comparator; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CreativeTabGC extends CreativeTabs +{ + + private ItemStack itemForTab; + private Comparator tabSorter; + + public CreativeTabGC(int par1, String par2Str, ItemStack itemForTab, Comparator tabSorter) + { + super(par1, par2Str); + this.itemForTab = itemForTab; + this.tabSorter = tabSorter; + } + + @Override + @SideOnly(Side.CLIENT) + public ItemStack createIcon() + { + return this.itemForTab; + } + + public void setItemForTab(ItemStack itemForTab) + { + this.itemForTab = itemForTab; + } + + @Override + @SideOnly(Side.CLIENT) + public String getTranslationKey() + { + return "item_group." + this.getTabLabel(); + } + + @Override + public void displayAllRelevantItems(NonNullList list) + { + super.displayAllRelevantItems(list); + if (this.tabSorter != null) + { + try + { + Collections.sort(list, tabSorter); + } catch (Exception ingored) + { + } + } + } + + public void setTabSorter(Comparator tabSorter) + { + this.tabSorter = tabSorter; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DamageSourceGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DamageSourceGC.java new file mode 100644 index 00000000..5f294103 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DamageSourceGC.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.util.DamageSource; + +public class DamageSourceGC extends DamageSource +{ + + public static final DamageSourceGC spaceshipCrash = (DamageSourceGC) new DamageSourceGC("spaceship_crash").setDamageBypassesArmor().setExplosion(); + public static final DamageSourceGC oxygenSuffocation = (DamageSourceGC) new DamageSourceGC("oxygen_suffocation").setDamageBypassesArmor().setDamageIsAbsolute(); + public static final DamageSourceGC thermal = (DamageSourceGC) new DamageSourceGC("thermal").setDamageBypassesArmor().setDamageIsAbsolute(); + public static final DamageSourceGC acid = (DamageSourceGC) new DamageSourceGC("sulphuric_acid"); + public static final DamageSourceGC laserTurret = new DamageSourceGC("laser_turret"); + + public DamageSourceGC(String damageType) + { + super(damageType); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DelayTimer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DelayTimer.java new file mode 100644 index 00000000..48c0bbcb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DelayTimer.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.world.World; + +public class DelayTimer +{ + + private long lastMark = Long.MIN_VALUE; + private long internalDelay = 1; + + public DelayTimer(long delay) + { + internalDelay = delay; + } + + public boolean markTimeIfDelay(World world) + { + return markTimeIfDelay(world, internalDelay); + } + + public boolean markTimeIfDelay(World world, long delay) + { + if (world == null) + { + return false; + } + + long currentTime = world.getTotalWorldTime(); + + if (currentTime < lastMark) + { + lastMark = currentTime; + return false; + } else if (lastMark + delay <= currentTime) + { + lastMark = currentTime; + return true; + } else + { + return false; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumColor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumColor.java new file mode 100644 index 00000000..165aa609 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumColor.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +/** + * Simple color enum for adding colors to in-game GUI strings of text. + * + * @author AidanBrady + */ +public enum EnumColor +{ + + BLACK("\u00a70", "black", new int[] + {0, 0, 0}), DARK_BLUE("\u00a71", "darkBlue", new int[] + {0, 0, 170}), DARK_GREEN("\u00a72", "darkGreen", new int[] + {0, 170, 0}), DARK_AQUA("\u00a73", "darkAqua", new int[] + {0, 170, 170}), DARK_RED("\u00a74", "darkRed", new int[] + {170, 0, 0}), PURPLE("\u00a75", "purple", new int[] + {170, 0, 170}), ORANGE("\u00a76", "orange", new int[] + {255, 170, 0}), GREY("\u00a77", "grey", new int[] + {170, 170, 170}), DARK_GREY("\u00a78", "darkGrey", new int[] + {85, 85, 85}), INDIGO("\u00a79", "indigo", new int[] + {85, 85, 255}), BRIGHT_GREEN("\u00a7a", "brightGreen", new int[] + {85, 255, 85}), AQUA("\u00a7b", "aqua", new int[] + {85, 255, 255}), RED("\u00a7c", "red", new int[] + {255, 85, 85}), PINK("\u00a7d", "pink", new int[] + {255, 85, 255}), YELLOW("\u00a7e", "yellow", new int[] + {255, 255, 85}), WHITE("\u00a7f", "white", new int[] + {255, 255, 255}); + + /** + * The color code that will be displayed + */ + private final String code; + + private final int[] rgbCode; + + /** + * A friendly name of the color. + */ + private final String unlocalizedName; + + EnumColor(String s, String n, int[] rgb) + { + this.code = s; + this.unlocalizedName = n; + this.rgbCode = rgb; + } + + public String getCode() + { + return code; + } + + public String getLocalizedName() + { + return GCCoreUtil.translate("color." + this.unlocalizedName); + } + + public String getName() + { + return this.code + this.getLocalizedName(); + } + + public float getColor(int index) + { + return this.rgbCode[index] / 255F; + } + + @Override + public String toString() + { + return this.code; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryBlock.java new file mode 100644 index 00000000..efbbe558 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryBlock.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +public enum EnumSortCategoryBlock +{ + PAD, TRANSMITTER, MACHINE, GENERAL, BRICKS, ORE, DECORATION, TREASURE, EGG, INGOT_BLOCK, STAIRS, SLABS, WALLS +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryItem.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryItem.java new file mode 100644 index 00000000..df523430 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryItem.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +public enum EnumSortCategoryItem +{ + GEAR, ROCKET, CANISTER, GENERAL, KEYS, BUCKET, SCHEMATIC, ARMOR, PLATE, INGOT, TOOLS +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/FluidUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/FluidUtil.java new file mode 100644 index 00000000..73c75ac8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/FluidUtil.java @@ -0,0 +1,891 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidActionResult; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; + +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.items.ItemBucketGC; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; + +public class FluidUtil +{ + + private static boolean oldFluidIDMethod = true; + private static Class fluidStackClass = null; + private static Method getFluidMethod = null; + private static Field fluidIdField = null; + + /** + * This looks for any type of filled or partly filled container of "fuel" + * + * @param var4 The ItemStack being examined + * @return True if it's a container with "fuel" + */ + public static boolean isFuelContainerAny(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItem() == GCItems.fuelCanister && var4.getItemDamage() < var4.getMaxDamage(); + } + + if (var4.getItem() == GCItems.bucketFuel) + { + return true; + } + + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return liquid != null && FluidUtil.testFuel(FluidRegistry.getFluidName(liquid)); + } + + /** + * Tests whether the named liquid is fuel / fuelgc or rocket fuel from + * another mod, for compatibility (includes RotaryCraft Jet Fuel) + * + * @param name - which MUST be in lowercase, as always returned by + * FluidRegistry.getFluidName + * @return true if a type of recognised fuel, false if not + */ + public static boolean testFuel(String name) + { + if (name == null) + return false; + + if (name.equals("fuel") || name.equals("fuelgc") || name.equals("fuel_light")) + { + return true; + } + + if (name.contains("rocket") && name.contains("fuel")) // from EnderIO + { + return true; + } + + if (name.equals("rc jet fuel")) // from RotaryCraft + { + return true; + } + + if (name.startsWith("fuel")) + { + return !name.contains("dense") && !name.contains("heavy") && !name.contains("mixed") && !name.contains("gaseous"); + } + + return name.equals("refined_fuel"); // from Thermal Expansion + } + + public static boolean testOil(String name) + { + if (name == null) + return false; + + if (name.equals("oil") || name.equals("oilgc")) + { + return true; + } + + if (name.equals("crude_oil")) + { + return true; + } + + if (name.startsWith("oil")) + { + return !name.contains("dense") && !name.contains("residue"); + } + + return false; + } + + public static boolean isFuel(FluidStack fluid) + { + return fluid != null && testFuel(FluidRegistry.getFluidName(fluid)); + } + + public static boolean isOil(FluidStack fluid) + { + return fluid != null && testOil(FluidRegistry.getFluidName(fluid)); + } + + public static boolean isFluidFuzzy(FluidStack fluid, String name) + { + return fluid != null && fluid.getFluid() != null && fluid.getFluid().getName().startsWith(name); + } + + public static boolean isFluidStrict(FluidStack fluid, String name) + { + return fluid != null && fluid.getFluid() != null && fluid.getFluid().getName().equals(name); + } + + /** + * Fill Galacticraft entities (e.g. rockets, buggies) with Galacticraft + * fuel. For legacy reasons, accepts either "fuel" or "fuelgc". + * Auto-converts either one to the same type of fuel as is already + * contained. + * + * @param tank The tank + * @param liquid A FluidStack being the fuel offered + * @param doFill True if this is not a simulation / tank capacity test + * @return The amount filled + */ + public static int fillWithGCFuel(FluidTank tank, FluidStack liquid, boolean doFill) + { + if (liquid != null && testFuel(FluidRegistry.getFluidName(liquid))) + { + final FluidStack liquidInTank = tank.getFluid(); + + // If the tank is empty, fill it with the current type of GC fuel + if (liquidInTank == null) + { + return tank.fill(new FluidStack(GCFluids.fluidFuel, liquid.amount), doFill); + } + + // If the tank already contains something, fill it with more of the + // same + if (liquidInTank.amount < tank.getCapacity()) + { + return tank.fill(new FluidStack(liquidInTank, liquid.amount), doFill); + } + } + + return 0; + } + + /** + * This looks for any type of filled or partly filled container of "oil" or + * the alternative fluid "oilgc" which may be present if Buildcraft was + * installed on top of a GC world + * + * @param var4 The ItemStack being examined + * @return True if it's a container with "oil" + */ + public static boolean isOilContainerAny(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItem() == GCItems.oilCanister && var4.getItemDamage() < var4.getMaxDamage(); + } + + if (var4.getItem() == GCItems.bucketOil) + { + return true; + } + + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return isOil(liquid); + } + + /** + * This looks for any type of filled or partly filled container of "methane" + * gas + * + * @param var4 The ItemStack being examined + * @return True if it's a container with "methane" + */ + public static boolean isMethaneContainerAny(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItem() == AsteroidsItems.methaneCanister && var4.getItemDamage() < var4.getMaxDamage(); + } + + FluidStack stack = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return stack != null && stack.getFluid() != null && stack.getFluid().getName().toLowerCase().contains("methane"); + } + + /** + * This looks for any type of completely full container Used, for example, + * in canExtractItem() logic + * + * @param var4 The ItemStack being examined + * @return True if it's a full container + */ + public static boolean isFullContainer(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItemDamage() == 1; + } + + if (var4.getItem() instanceof ItemBucketGC) + { + return true; + } + + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return liquid != null; + } + + /** + * This tries to fill the given container (at inventory[slot]) with fluid + * from the specified tank If successful, it places the resulting filled + * container in inventory[slot]

+ * + * @param tank The tank to take the fluid from + * @param liquid The type of liquid in that tank (the calling method will + * normally have checked this already) + * @param inventory + * @param slot + * @param canisterType The type of canister to return, if it's a canister + * being filled (pre-matched with the liquid type) + */ + public static void tryFillContainer(FluidTank tank, FluidStack liquid, NonNullList inventory, int slot, Item canisterType) + { + ItemStack slotItem = inventory.get(slot); + if (liquid.amount <= 0 || slotItem.isEmpty()) + { + return; + } + + if (slotItem.getItem() instanceof ItemCanisterGeneric) + { + if (slotItem.getCount() != 1 || slotItem.getItem() != canisterType && slotItem.getItemDamage() != ItemCanisterGeneric.EMPTY) + { + return; + } + + final int used = Math.min(liquid.amount, slotItem.getItemDamage() - 1); + if (used > 0) + { + inventory.set(slot, new ItemStack(canisterType, 1, slotItem.getItemDamage() - used)); + tank.drain(used, true); + } + return; + } else if (slotItem.getCount() == 1) + { + ItemBucketGC bucketGC; + if (slotItem.getItem() == Items.BUCKET && liquid.amount >= Fluid.BUCKET_VOLUME && (bucketGC = ItemBucketGC.getBucketForFluid(liquid.getFluid())) != null) + { + inventory.set(slot, new ItemStack(bucketGC)); + tank.drain(Fluid.BUCKET_VOLUME, true); + return; + } + + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(inventory.get(slot)); + if (handler != null) + { + final int used = handler.fill(liquid, true); + if (used > 0) + { + inventory.set(slot, handler.getContainer()); + tank.drain(used, true); + } + } + } + } + + /** + * @param tank + * @param inventory + * @param slot + */ + public static void tryFillContainerFuel(FluidTank tank, NonNullList inventory, int slot) + { + if (FluidUtil.isValidContainer(inventory.get(slot))) + { + FluidStack liquid = tank.getFluid(); + + if (liquid != null && liquid.amount > 0) + { + String liquidname = liquid.getFluid().getName(); + + // Test for the GC fuels (though anything similarly named would + // also pass here) + if (liquidname.startsWith("fuel")) + { + // Make sure it is the current GC fuel + if (!liquidname.equals(GCFluids.fluidFuel.getName())) + { + liquid = new FluidStack(GCFluids.fluidFuel, liquid.amount); + } + + // But match any existing fuel fluid in the container + ItemStack stack = inventory.get(slot); + Item item = stack.isEmpty() ? null : stack.getItem(); + if (!(item instanceof ItemCanisterGeneric || item instanceof ItemBucketGC)) + { + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(stack); + if (handler != null) + { + FluidStack existingFluid = net.minecraftforge.fluids.FluidUtil.getFluidContained(stack); + if (existingFluid != null && !existingFluid.getFluid().getName().equals(GCFluids.fluidFuel.getName())) + { + liquid = new FluidStack(existingFluid, liquid.amount); + } + } + } + + FluidUtil.tryFillContainer(tank, liquid, inventory, slot, GCItems.fuelCanister); + } + } + } + } + + /** + * This tries to empty the container (at inventory[slot]) into the specified + * tank forcing the tank contents to Fluid: desiredLiquid even if the + * container had something different (useful for different types of fuel, + * for example). If successful, it replaces inventory[slot] with the + * corresponding empty container

+ * + * @param tank The tank to fill with the fluid + * @param desiredLiquid The type of liquid intended for that tank + * @param stacks + * @param slot + * @param amountOffered The amount in the container being offered + */ + public static void loadFromContainer(FluidTank tank, Fluid desiredLiquid, NonNullList stacks, int slot, int amountOffered) + { + ItemStack slotItem = stacks.get(slot); + + if (slotItem.getItem() instanceof ItemCanisterGeneric) + { + int originalDamage = slotItem.getItemDamage(); + int used = tank.fill(new FluidStack(desiredLiquid, ItemCanisterGeneric.EMPTY - originalDamage), true); + if (originalDamage + used >= ItemCanisterGeneric.EMPTY) + { + stacks.set(slot, new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY)); + } else + { + stacks.set(slot, new ItemStack(slotItem.getItem(), 1, originalDamage + used)); + } + } else if (slotItem.getItem() instanceof ItemBucketGC && amountOffered == Fluid.BUCKET_VOLUME) + { + ItemBucketGC bucket = (ItemBucketGC) slotItem.getItem(); + if (fluidsSame(bucket.accepts, desiredLiquid, true)) + { + tank.fill(new FluidStack(desiredLiquid, amountOffered), true); + stacks.set(slot, new ItemStack(Items.BUCKET)); + } + } else + { + if (tank.getFluid() == null || amountOffered <= tank.getCapacity() - tank.getFluid().amount) + { + // Now deal with the resulting container + if (FluidUtil.isFilledContainer(slotItem)) + { + final int itemCount = slotItem.getCount(); + if (FluidUtil.isBucket(slotItem)) + { + int used = tank.fill(new FluidStack(desiredLiquid, amountOffered), true); + if (itemCount > 1) + { + tank.fill(new FluidStack(desiredLiquid, (itemCount - 1) * Fluid.BUCKET_VOLUME), true); + } + stacks.set(slot, new ItemStack(Items.BUCKET, itemCount)); + return; + } else if (itemCount == 1) + { + IFluidHandlerItem handlerItem = net.minecraftforge.fluids.FluidUtil.getFluidHandler(slotItem); + if (handlerItem != null) + { + int used = tank.fill(new FluidStack(desiredLiquid, amountOffered), false); + FluidStack given = handlerItem.drain(used, true); + if (given != null) + { + tank.fill(new FluidStack(desiredLiquid, given.amount), true); + stacks.set(slot, handlerItem.getContainer()); + } + return; + } + // Fallback basic treatment + ItemStack emptyStack = FluidUtil.getUsedContainer(slotItem); + tank.fill(new FluidStack(desiredLiquid, FluidUtil.getContainerCapacity(slotItem)), true); + stacks.set(slot, emptyStack); + return; + } + } + } + } + } + + /** + * Tests for any type of container with some space in it It can be either an + * empty container, or a Galacticraft canister of the appropriate type, + * either empty or at least with some capacity remaining Will return true + * for any type of empty Forge fluid container including vanilla buckets + * + * @param var4 + * @param canisterType + * @return + */ + public static boolean isPartialContainer(ItemStack var4, Item canisterType) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItemDamage() == ItemCanisterGeneric.EMPTY || (var4.getItem() == canisterType && var4.getItemDamage() > 1); + } + + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(var4); + FluidStack containedFluid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + + if (handler != null) + { + if (containedFluid == null) + { + return true; + } + + // Check that there is at least some space in container + containedFluid = containedFluid.copy(); + containedFluid.amount = 1; + if (handler.fill(containedFluid, false) > 0) + { + return true; + } + } + + return false; + } + + /** + * Tests for any empty container which can accept the specified fluid Either + * Galacticraft canisters or Forge containers + * + * @param var4 + * @param targetFluid + * @return + */ + public static boolean isEmptyContainerFor(ItemStack var4, FluidStack targetFluid) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + if (var4.getItemDamage() == ItemCanisterGeneric.EMPTY) + { + return true; + } + if (var4.getItemDamage() == 1) + { + return false; + } + + return fluidsSame(FluidUtil.getFluidContained(var4), targetFluid); + } + + if (isEmptyContainer(var4)) + { + return true; + } + + return fluidsSame(net.minecraftforge.fluids.FluidUtil.getFluidContained(var4), targetFluid); + } + + /** + * Returns the amount of fluid this container can provide in its current + * state (Similar to Forge's FluidUtil.getFluidContained()) + * + * @param container + * @return + */ + public static int getContainerCapacity(ItemStack container) + { + if (container.getItem() instanceof ItemCanisterGeneric) + { + return container.getItemDamage() - 1; + } + if (!container.isEmpty()) + { + container = container.copy(); + container.setCount(1); + IFluidHandlerItem fluidHandler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(container); + if (fluidHandler != null) + { + FluidStack drain = fluidHandler.drain(Integer.MAX_VALUE, false); + return drain == null ? 0 : drain.amount; + } + } + return 0; + } + + /** + * @param fs1 First FluidStack to compare + * @param fs2 Second FluidStack to compare + * @return True if the FluidStacks are both not null and the same fluid type + * False otherwise + */ + public static boolean fluidsSame(FluidStack fs1, FluidStack fs2) + { + if (fs1 == null || fs2 == null) + { + return false; + } + Fluid f1 = fs1.getFluid(); + Fluid f2 = fs2.getFluid(); + if (f1 == null || f2 == null || f1.getName() == null) + { + return false; + } + return f1.getName().equals(f2.getName()); + } + + public static boolean fluidsSame(Fluid f1, Fluid f2, boolean fuzzy) + { + if (f1 == null || f2 == null || f1.getName() == null) + { + return false; + } + if (fuzzy) + { + if (f1.getName().startsWith("fuel")) + { + return testFuel(f2.getName()); + } + if (f1.getName().startsWith("oil")) + { + return f2.getName().startsWith("oil"); + } + if (f1.getName().startsWith("water")) + { + return f2.getName().startsWith("water"); + } + } + return f1.getName().equals(f2.getName()); + } + + public static boolean fluidsSame(Fluid f1, String name2, boolean fuzzy) + { + if (f1 == null || name2 == null || f1.getName() == null) + { + return false; + } + if (fuzzy) + { + if (name2.equals("fuel")) + { + return testFuel(f1.getName()); + } + + return f1.getName().startsWith(name2); + } + return f1.getName().equals(name2); + } + + /** + * Test for any completely empty container of either type Used, for example, + * in canExtractItem() logic + * + * @param var4 The ItemStack being tested + * @return True if the container is empty + */ + public static boolean isEmptyContainer(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItemDamage() == ItemCanisterGeneric.EMPTY; + } + + if (var4.getItem() == Items.BUCKET) + { + return true; + } + + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(var4); + FluidStack containedFluid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return handler != null && (containedFluid == null || containedFluid.amount == 0); + } + + /** + * Test for any empty specialist gas container For future use, e.g. for + * compatibility with Mekanism tank items + * + * @param var4 The ItemStack being tested + * @return True if the container is empty + */ + public static boolean isEmptyGasContainer(ItemStack var4) + { + return false; + } + + /** + * Test for any container with some level of contents Used, for example, in + * shift-clicking items into input item slots + * + * @param var4 The ItemStack being tested + * @return True if the container contains something + */ + public static boolean isFilledContainer(ItemStack var4) + { + if (net.minecraftforge.fluids.FluidUtil.getFluidHandler(var4) == null) + { + return false; + } + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItemDamage() < ItemCanisterGeneric.EMPTY; + } + return net.minecraftforge.fluids.FluidUtil.getFluidContained(var4) != null; + } + + /** + * Test for any container with water (vanilla or Forge items only, + * Galacticraft does not have a water container) + * + * @param var4 The ItemStack being tested + * @return True if the container contains water + */ + public static boolean isWaterContainer(ItemStack var4) + { + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return liquid != null && liquid.getFluid() != null && liquid.getFluid().getName().equals("water"); + } + + public static FluidStack getFluidContained(ItemStack container) + { + if (container == null) + { + return null; + } + + if (container.getItem() instanceof ItemCanisterGeneric) + { + ItemCanisterGeneric canister = (ItemCanisterGeneric) container.getItem(); + return canister.getFluid(container); + } + + if (container.getItem() instanceof ItemBucketGC) + { + return new FluidStack(((ItemBucketGC) container.getItem()).accepts, Fluid.BUCKET_VOLUME); + } + + return net.minecraftforge.fluids.FluidUtil.getFluidContained(container); + } + + /** + * Test for any container type at all Used, for example, in + * isItemValidForSlot() logic + * + * @param slotItem + * @return True if it is a container; False if it is null or not a container + */ + public static boolean isValidContainer(ItemStack slotItem) + { + return slotItem != null && slotItem.getCount() == 1 + && (slotItem.getItem() instanceof ItemCanisterGeneric || slotItem.getItem() instanceof ItemBucketGC || net.minecraftforge.fluids.FluidUtil.getFluidHandler(slotItem) != null); + } + + /** + * Returns the used (empty) container, for example an empty bucket Used, for + * example, in isItemValidForSlot() logic + * + * @param container + * @return True if it is a container; False if it is null or not a container + */ + public static ItemStack getUsedContainer(ItemStack container) + { + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(container); + if (FluidUtil.isBucket(container) && handler != null) + { + return new ItemStack(Items.BUCKET, container.getCount()); + } else if (handler != null) + { + handler.drain(Integer.MAX_VALUE, true); + return handler.getContainer(); + } else + { + container.shrink(1); + + if (!container.isEmpty()) + { + return ItemStack.EMPTY; + } + + return container; + } + } + + @SideOnly(Side.CLIENT) + public static boolean isInsideOfFluid(Entity entity, Fluid fluid) + { + double d0 = entity.posY + entity.getEyeHeight(); + int i = MathHelper.floor(entity.posX); + int j = MathHelper.floor(MathHelper.floor(d0)); + int k = MathHelper.floor(entity.posZ); + BlockPos pos = new BlockPos(i, j, k); + Block block = entity.world.getBlockState(pos).getBlock(); + + if (block != null && block instanceof IFluidBlock && ((IFluidBlock) block).getFluid() != null && ((IFluidBlock) block).getFluid().getName().equals(fluid.getName())) + { + double filled = ((IFluidBlock) block).getFilledPercentage(entity.world, pos); + if (filled < 0) + { + filled *= -1; + return d0 > j + (1 - filled); + } else + { + return d0 < j + filled; + } + } else + { + return false; + } + } + + public static boolean isBucket(ItemStack container) + { + if (container == null) + { + return false; + } + + IFluidHandlerItem handlerItem = net.minecraftforge.fluids.FluidUtil.getFluidHandler(container); + if (handlerItem != null) + { + if (container.getItem() == Items.BUCKET) + { + return true; + } + + if (handlerItem.getContainer().getItem() == Items.BUCKET) + { + return true; + } + } + + return false; + } + + @Nonnull + public static FluidActionResult interactWithFluidHandler(@Nonnull ItemStack container, IFluidHandler fluidHandler, EntityPlayer player) + { + if (container.isEmpty() || fluidHandler == null || player == null) + { + return FluidActionResult.FAILURE; + } + + // -----------Special code for canisters onto FluidTanks------------ + // This is NOT strictly necessary, as our 1.11 code for canisters + // implements IFluidHandler 100% correctly + // + // But our code offers three improvements over Forge: + // 1: Performance :) + // 2: Tries to empty partial canister BEFORE filling it, that seems more + // natural + // 3: Forge's behaviour in Creative Mode with partial canisters is not a + // bug, but it still feels wrong + // + if (container.getItem() instanceof ItemCanisterGeneric) + { + ItemStack result; + if ((result = FluidUtil.tryEmptyCanister(container, fluidHandler, player.capabilities.isCreativeMode)) != ItemStack.EMPTY + || (result = FluidUtil.tryFillCanister(container, fluidHandler, player.capabilities.isCreativeMode)) != ItemStack.EMPTY) + { + // send inventory updates to client + if (player.inventoryContainer != null) + { + player.inventoryContainer.detectAndSendChanges(); + } + return new FluidActionResult(result); + } + + return FluidActionResult.FAILURE; + } + + // Forge's UniversalBucket appears to be non-functional, currently, for + // FILLING modded buckets + // Try to fill an empty vanilla bucket: + if (container.getItem() == Items.BUCKET) + { + ItemStack result = ItemBucketGC.fillBucketFrom(fluidHandler); + if (result != null) + { + // Handle stacks of buckets: insert the filled bucket into + // another inventory slot or drop it + if (container.getCount() > 1) + { + ItemStack remainder = ItemHandlerHelper.insertItemStacked(new PlayerMainInvWrapper(player.inventory), result, false); + if (!remainder.isEmpty() && player != null) + { + ItemHandlerHelper.giveItemToPlayer(player, remainder); + } + result = container.copy(); + result.shrink(1); + } + return new FluidActionResult(result); + } + // If failure, fall through to other Forge methods + } + + // ---------the rest of this is standard Forge code from + // interactWithFluidHandler()--------- + // -----------(but without the InvWrapper bug which could put fluids in + // armor slots!)------- + IItemHandler playerInventory = new PlayerMainInvWrapper(player.inventory); + + FluidActionResult fillResult = net.minecraftforge.fluids.FluidUtil.tryFillContainerAndStow(container, fluidHandler, playerInventory, Integer.MAX_VALUE, player); + if (fillResult.isSuccess()) + { + return fillResult; + } else + { + return net.minecraftforge.fluids.FluidUtil.tryEmptyContainerAndStow(container, fluidHandler, playerInventory, Integer.MAX_VALUE, player); + } + } + + private static ItemStack tryFillCanister(ItemStack canister, IFluidHandler tank, boolean isCreativeMode) + { + int currCapacity = canister.getItemDamage() - 1; + if (currCapacity <= 0) + { + return ItemStack.EMPTY; + } + FluidStack liquid = tank.drain(currCapacity, false); + int transferred = ((ItemCanisterGeneric) canister.getItem()).fill(canister, liquid, !isCreativeMode); + if (transferred > 0) + { + liquid = tank.drain(transferred, true); + return canister; + } + return ItemStack.EMPTY; + } + + private static ItemStack tryEmptyCanister(ItemStack canister, IFluidHandler tank, boolean isCreativeMode) + { + int currContents = ItemCanisterGeneric.EMPTY - canister.getItemDamage(); + if (currContents <= 0) + { + return ItemStack.EMPTY; + } + FluidStack liquid = ((ItemCanisterGeneric) canister.getItem()).drain(canister, currContents, false); + int transferred = tank.fill(liquid, true); + if (transferred > 0) + { + ((ItemCanisterGeneric) canister.getItem()).drain(canister, transferred, !isCreativeMode); + return canister; + } + return ItemStack.EMPTY; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCCoreUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCCoreUtil.java new file mode 100644 index 00000000..76ff5df3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCCoreUtil.java @@ -0,0 +1,442 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.resources.Language; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.launchwrapper.Launch; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; + +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.registry.EntityRegistry; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.inventory.ContainerBuggy; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; + +/** + * Starting with Release 4.1.0 this class will be removed and all methods moved + * to a dedicated utility class. At this time all planned utility classes will + * be internal and non-accessible. + * + */ +@ForRemoval(deadline = "4.1.0") +public class GCCoreUtil +{ + + public static int nextID = 0; + private static boolean deobfuscated; + private static String lastLang = ""; + public static boolean langDisable; + private static MinecraftServer serverCached; + + static + { + try + { + deobfuscated = Launch.classLoader.getClassBytes("net.minecraft.world.World") != null; + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + public static boolean isDeobfuscated() + { + return deobfuscated; + } + + public static void openBuggyInv(EntityPlayerMP player, IInventory buggyInv, int type) + { + player.getNextWindowId(); + player.closeContainer(); + int id = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_PARACHEST_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] {id, 0, 0}), player); + player.openContainer = new ContainerBuggy(player.inventory, buggyInv, type, player); + player.openContainer.windowId = id; + player.openContainer.addListener(player); + } + + public static void openParachestInv(EntityPlayerMP player, EntityLanderBase landerInv) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_PARACHEST_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] {windowId, 1, landerInv.getEntityId()}), player); + player.openContainer = new ContainerParaChest(player.inventory, landerInv, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } + + public static int nextInternalID() + { + GCCoreUtil.nextID++; + return GCCoreUtil.nextID - 1; + } + + public static void registerGalacticraftCreature(Class clazz, String name, int back, int fore) + { + registerGalacticraftNonMobEntity(clazz, name, 80, 3, true); + int nextEggID = getNextValidID(); + if (nextEggID < 65536) + { + ResourceLocation resourcelocation = new ResourceLocation(Constants.MOD_ID_CORE, name); + EntityList.ENTITY_EGGS.put(resourcelocation, new EntityList.EntityEggInfo(resourcelocation, back, fore)); + } + } + + public static int getNextValidID() + { + int eggID = 255; + + // Non-global entity IDs - for egg ID purposes - can be greater than 255 + // The spawn egg will have this metadata. Metadata up to 65535 is + // acceptable (see potions). + + do + { + eggID++; + } while (net.minecraftforge.registries.GameData.getEntityRegistry().getValue(eggID) != null); + + return eggID; + } + + public static void registerGalacticraftNonMobEntity(Class var0, String var1, int trackingDistance, int updateFreq, boolean sendVel) + { + ResourceLocation registryName = new ResourceLocation(Constants.MOD_ID_CORE, var1); + EntityRegistry.registerModEntity(registryName, var0, var1, nextInternalID(), GalacticraftCore.instance, trackingDistance, updateFreq, sendVel); + } + + public static void registerGalacticraftItem(String key, Item item) + { + registerGalacticraftItem(key, new ItemStack(item)); + } + + public static void registerGalacticraftItem(String key, Item item, int metadata) + { + registerGalacticraftItem(key, new ItemStack(item, 1, metadata)); + } + + public static void registerGalacticraftItem(String key, ItemStack stack) + { + GalacticraftCore.itemList.add(stack); + } + + public static void registerGalacticraftBlock(String key, Block block) + { + GalacticraftCore.blocksList.add(block); + } + + public static String translate(String key) + { + String result = I18n.translateToLocal(key); + int comment = result.indexOf('#'); + String ret = (comment > 0) ? result.substring(0, comment).trim() : result; + for (int i = 0; i < key.length(); ++i) + { + Character c = key.charAt(i); + if (Character.isUpperCase(c)) + { + System.err.println(ret); + } + } + return ret; + } + + public static List translateWithSplit(String key) + { + String translated = translate(key); + int comment = translated.indexOf('#'); + translated = (comment > 0) ? translated.substring(0, comment).trim() : translated; + return Arrays.asList(translated.split("\\$")); + } + + public static String translateWithFormat(String key, Object... values) + { + String result = I18n.translateToLocalFormatted(key, values); + int comment = result.indexOf('#'); + String ret = (comment > 0) ? result.substring(0, comment).trim() : result; + for (int i = 0; i < key.length(); ++i) + { + Character c = key.charAt(i); + if (Character.isUpperCase(c)) + { + System.err.println(ret); + } + } + return ret; + } + + public static void drawStringRightAligned(String string, int x, int y, int color, FontRenderer fontRendererObj) + { + fontRendererObj.drawString(string, x - fontRendererObj.getStringWidth(string), y, color); + } + + public static void drawStringCentered(String string, int x, int y, int color, FontRenderer fontRendererObj) + { + fontRendererObj.drawString(string, x - fontRendererObj.getStringWidth(string) / 2, y, color); + } + + public static String lowerCaseNoun(String string) + { + Language l = Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage(); + if (l.getLanguageCode().equals("de_DE")) + { + return string; + } + return GCCoreUtil.translate(string).toLowerCase(); + } + + public static int getDimensionID(World world) + { + return world.provider.getDimension(); + } + + public static int getDimensionID(WorldProvider provider) + { + return provider.getDimension(); + } + + public static int getDimensionID(TileEntity tileEntity) + { + return tileEntity.getWorld().provider.getDimension(); + } + + public static WorldServer[] getWorldServerList() + { + MinecraftServer server = getServer(); + if (server != null) + { + return server.worlds; + } + return new WorldServer[0]; + } + + public static WorldServer[] getWorldServerList(World world) + { + if (world instanceof WorldServer) + { + return ((WorldServer) world).getMinecraftServer().worlds; + } + return GCCoreUtil.getWorldServerList(); + } + + public static void sendToAllDimensions(EnumSimplePacket packetType, Object[] data) + { + for (WorldServer world : GCCoreUtil.getWorldServerList()) + { + int id = getDimensionID(world); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(packetType, id, data), id); + } + } + + public static void sendToAllAround(PacketSimple packet, World world, int dimID, BlockPos pos, double radius) + { + double x = pos.getX() + 0.5D; + double y = pos.getY() + 0.5D; + double z = pos.getZ() + 0.5D; + double r2 = radius * radius; + for (EntityPlayer playerMP : world.playerEntities) + { + if (playerMP.dimension == dimID) + { + final double dx = x - playerMP.posX; + final double dy = y - playerMP.posY; + final double dz = z - playerMP.posZ; + + if (dx * dx + dy * dy + dz * dz < r2) + { + GalacticraftCore.packetPipeline.sendTo(packet, (EntityPlayerMP) playerMP); + } + } + } + } + + /** + * Call this to obtain a seeded random which will be the SAME on client and + * server. This means EntityItems won't jump position, for example. + */ + public static Random getRandom(BlockPos pos) + { + long blockSeed = ((pos.getY() << 28) + pos.getX() + 30000000 << 28) + pos.getZ() + 30000000; + return new Random(blockSeed); + } + + /** + * Returns the angle of the compass (0 - 360 degrees) needed to reach the + * given position offset + */ + public static float getAngleForRelativePosition(double nearestX, double nearestZ) + { + return ((float) MathHelper.atan2(nearestX, -nearestZ) * Constants.RADIANS_TO_DEGREES + 360F) % 360F; + } + + /** + * Custom getEffectiveSide method, covering more cases than FMLCommonHandler + */ + public static Side getEffectiveSide() + { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER || Thread.currentThread().getName().startsWith("Netty Epoll Server IO")) + { + return Side.SERVER; + } + + return Side.CLIENT; + } + + public static MinecraftServer getServer() + { + MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); + if (server == null) + { + // This may be called from a different thread e.g. MapUtil + // If on a different thread, + // FMLCommonHandler.instance().getMinecraftServerInstance() can + // return null on LAN servers + // (I think because the FMLCommonHandler wrongly picks the client + // proxy if it's not in the Integrated Server thread) + return serverCached; + } + return server; + } + + public static ItemStack getMatchingItemEitherHand(EntityPlayer player, Item item) + { + ItemStack stack = player.inventory.getStackInSlot(player.inventory.currentItem); + if (stack != null && stack.getItem() == item) + { + return stack; + } + stack = player.inventory.offHandInventory.get(0); + if (stack != null && stack.getItem() == item) + { + return stack; + } + return null; + } + + // For performance + public static List getPositionsAdjoining(BlockPos pos) + { + LinkedList result = new LinkedList<>(); + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + if (y > 0) + result.add(new BlockPos(x, y - 1, z)); + if (y < 255) + result.add(new BlockPos(x, y + 1, z)); + result.add(new BlockPos(x, y, z - 1)); + result.add(new BlockPos(x, y, z + 1)); + result.add(new BlockPos(x - 1, y, z)); + result.add(new BlockPos(x + 1, y, z)); + return result; + } + + // For performance + public static void getPositionsAdjoining(int x, int y, int z, List result) + { + result.clear(); + if (y > 0) + result.add(new BlockPos(x, y - 1, z)); + if (y < 255) + result.add(new BlockPos(x, y + 1, z)); + result.add(new BlockPos(x, y, z - 1)); + result.add(new BlockPos(x, y, z + 1)); + result.add(new BlockPos(x - 1, y, z)); + result.add(new BlockPos(x + 1, y, z)); + } + + public static void getPositionsAdjoiningLoaded(int x, int y, int z, List result, World world) + { + result.clear(); + if (y > 0) + result.add(new BlockPos(x, y - 1, z)); + if (y < 255) + result.add(new BlockPos(x, y + 1, z)); + BlockPos pos = new BlockPos(x, y, z - 1); + if ((z & 15) > 0 || world.isBlockLoaded(pos, false)) + result.add(pos); + pos = new BlockPos(x, y, z + 1); + if ((z & 15) < 15 || world.isBlockLoaded(pos, false)) + result.add(pos); + pos = new BlockPos(x - 1, y, z); + if ((x & 15) > 0 || world.isBlockLoaded(pos, false)) + result.add(pos); + pos = new BlockPos(x + 1, y, z); + if ((x & 15) < 15 || world.isBlockLoaded(pos, false)) + result.add(pos); + } + + // For performance + public static void getPositionsAdjoining(BlockPos pos, List result) + { + result.clear(); + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + if (y > 0) + result.add(new BlockPos(x, y - 1, z)); + if (y < 255) + result.add(new BlockPos(x, y + 1, z)); + result.add(new BlockPos(x, y, z - 1)); + result.add(new BlockPos(x, y, z + 1)); + result.add(new BlockPos(x - 1, y, z)); + result.add(new BlockPos(x + 1, y, z)); + } + + public static void spawnItem(World world, BlockPos pos, ItemStack stack) + { + float var = 0.7F; + while (!stack.isEmpty()) + { + double dx = world.rand.nextFloat() * var + (1.0F - var) * 0.5D; + double dy = world.rand.nextFloat() * var + (1.0F - var) * 0.5D; + double dz = world.rand.nextFloat() * var + (1.0F - var) * 0.5D; + EntityItem entityitem = new EntityItem(world, pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz, stack.splitStack(world.rand.nextInt(21) + 10)); + + entityitem.setPickupDelay(10); + + world.spawnEntity(entityitem); + } + } + + public static void notifyStarted(MinecraftServer server) + { + serverCached = server; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCLog.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCLog.java new file mode 100644 index 00000000..ce55e32a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCLog.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@Deprecated +@ForRemoval(deadline = "4.1.0") +public class GCLog +{ + + private static Logger log = LogManager.getFormatterLogger("Deprecated-GCLog"); + + public static void info(String message) + { + log.info(message); + } + + public static void info(String message, Object... args) + { + log.info(message, args); + } + + public static void error(String message) + { + log.error(message); + } + + public static void error(Exception e, String message) + { + log.error(message, e); + } + + public static void debug(String message) + { + if (ConfigManagerCore.enableDebug) + { + log.debug(message); + } + } + + public static void exception(Exception e) + { + log.catching(e); + } + + public static void severe(String message) + { + error(message); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GalacticLog.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GalacticLog.java new file mode 100644 index 00000000..52e65010 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GalacticLog.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.google.common.collect.ImmutableList; + +import lombok.Getter; +//import lombok.Getter; +import org.apache.commons.lang3.SystemUtils; +import org.apache.commons.lang3.text.WordUtils; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class GalacticLog +{ + + @Getter + private final Logger logger; + + public GalacticLog(Object modClass) + { + this.logger = LogManager.getLogger(modClass.getClass().getSimpleName()); + } + + public void catching(Throwable t) + { + this.logger.catching(t); + } + + public void debug(String msg, Object... params) + { + if (ConfigManagerCore.enableDebug || GCCoreUtil.isDeobfuscated()) + { + this.logger.info("[GCDebug] " + msg, params); + } + } + + public void error(String msg, Object... params) + { + this.logger.error(msg, params); + } + + public void error(Throwable t, String msg) + { + this.logger.error(msg, t); + } + + public void fatal(String msg, Object... params) + { + this.logger.fatal(msg, params); + } + + public void info(String msg, Object... params) + { + this.logger.info(msg, params); + } + + public void log(Level level, String msg, Object... params) + { + this.logger.log(level, msg, params); + } + + public void trace(String msg, Object... params) + { + this.logger.trace(msg, params); + } + + public void warn(String msg, Object... params) + { + this.logger.warn(msg, params); + } + + public void warn(Throwable t, String msg, Object... params) + { + this.logger.warn(msg, params); + this.logger.catching(t); + } + + public void noticableWarning(String... strings) + { + noticableWarning(true, ImmutableList.copyOf(strings)); + } + + public void noticableWarning(Throwable t, String... strings) + { + noticableWarning(true, ImmutableList.copyOf(strings), t.getStackTrace()); + } + + public void noticableWarningNoTrace(String... strings) + { + noticableWarning(false, ImmutableList.copyOf(strings)); + } + + private void noticableWarning(boolean trace, List lines) + { + this.noticableWarning(trace, lines, Thread.currentThread().getStackTrace()); + } + + private void noticableWarning(boolean trace, List lines, StackTraceElement[] elements) + { + this.error("********************************************************************************"); + for (final String line : lines) + { + for (final String subline : wrapString(line, 78, false, new ArrayList<>())) + { + this.error("* " + subline); + } + } + if (trace) + { + final StackTraceElement[] stackTrace = elements; + for (int i = 2; i < 8 && i < stackTrace.length; i++) + { + this.warn("* at {}{}", stackTrace[i].toString(), i == 7 ? "..." : ""); + } + } + this.error("********************************************************************************"); + } + + private static List wrapString(String string, int lnLength, boolean wrapLongWords, List list) + { + final String lines[] = WordUtils.wrap(string, lnLength, null, wrapLongWords).split(SystemUtils.LINE_SEPARATOR); + Collections.addAll(list, lines); + return list; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/I18nUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/I18nUtil.java new file mode 100644 index 00000000..2e6bf953 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/I18nUtil.java @@ -0,0 +1,101 @@ +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Locale; +import java.util.Objects; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.block.Block; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.registries.IForgeRegistryEntry; + +@ParametersAreNonnullByDefault +public final class I18nUtil +{ + + public static final I18nUtil instance = new I18nUtil(); + + public String getKey(String prefix, ResourceLocation name) + { + return prefix + "." + name.getNamespace() + "." + name.getPath(); + } + + public String getKey(IForgeRegistryEntry object, String key) + { + String prefix = getPrefixFor(object); + ResourceLocation name = Objects.requireNonNull(object.getRegistryName()); + return prefix + "." + name.getNamespace() + "." + name.getPath() + "." + key; + } + + /** + * Check whether or not the key is in the translation file. You do not need to call this in most + * cases, translation attempts just return the key if it is not found. + * + * @param key The key, checked as-is + * @return If the key exists + */ + public boolean hasKey(String key) + { + return I18n.hasKey(key); + } + + public String translate(String key, Object... params) + { + if (!FMLCommonHandler.instance().getSide().isClient()) + { + // Go ahead and translate text with deprecated I18n on the server for now... + return net.minecraft.util.text.translation.I18n.translateToLocalFormatted(key, params); + } + + return I18n.format(key, params); + } + + public String translatedName(Block block) + { + return translate(block.getTranslationKey() + ".name"); + } + + public String translatedName(Item item) + { + return translate(item.getTranslationKey() + ".name"); + } + + public String translatedName(ItemStack stack) + { + return translate(stack.getTranslationKey() + ".name"); + } + + /** + * Translates the text with key "(prefix).registry_name.key". This uses the object's registry + * name namespace instead of {@link #modId}. Prefix is determined by the object's type. + * + * @param object An {@link IForgeRegistryEntry} of some kind, such as a {@link Block} or {@link + * Item} + * @param key Key suffix + * @param params Optional parameters to format into translation + * @return Translation result, or {@code key} if the key is not found + */ + public String subText(IForgeRegistryEntry object, String key, Object... params) + { + return translate(getKey(object, key), params); + } + + public String miscText(String key, Object... params) + { + return translate("misc", key, params); + } + + private String getPrefixFor(IForgeRegistryEntry object) + { + if (object instanceof Item) + return "item"; + if (object instanceof Block) + return "tile"; + return object.getClass().getName().toLowerCase(Locale.ROOT); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ItemUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ItemUtil.java new file mode 100644 index 00000000..08dca7eb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ItemUtil.java @@ -0,0 +1,330 @@ +package micdoodle8.mods.galacticraft.core.util; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.oredict.OreDictionary; + +import com.google.common.base.Strings; +import com.google.common.primitives.Ints; + +public final class ItemUtil +{ + // Dictionary prefix's + public static final String BLOCK = "block"; + public static final String ORE = "ore"; + public static final String CLUSTER = "cluster"; + public static final String DUST = "dust"; + public static final String DUST_SMALL = "dustSmall"; + public static final String DUST_TINY = "dustTiny"; + public static final String INGOT = "ingot"; + public static final String PLATE = "plate"; + public static final String COIN = "coin"; + public static final String NUGGET = "nugget"; + public static final String LOG = "log"; + public static final String GEM = "gem"; + public static final String COVER = "cover"; + public static final String ROD = "rod"; + public static final String COMPRESSED = "compressed"; + public static final String CROP = "crop"; + private static final OreDictProxy PROXY = new OreDictProxy(); + + //@noformat + public static final String[] ALL_TYPES = { + BLOCK, ORE, CLUSTER, DUST, DUST_SMALL, DUST_TINY, + INGOT, PLATE, COIN, NUGGET, LOG, GEM, COVER, ROD, + COMPRESSED, CROP + }; + //@format + + public static boolean isPlayerHoldingSomething(EntityPlayer player) + { + return !player.getHeldItemMainhand().isEmpty() || !player.getHeldItemOffhand().isEmpty(); + } + + public static ItemStack getHeldStack(EntityPlayer player) + { + if (isPlayerHoldingSomething(player)) + { + ItemStack stack = player.getHeldItemMainhand(); + if (stack.isEmpty()) + { + stack = player.getHeldItemOffhand(); + } + return stack; + } + return ItemStack.EMPTY; + } + + public static ItemStack cloneStack(Item item) + { + return cloneStack(item, 1); + } + + public static ItemStack cloneStack(Block block) + { + return cloneStack(block, 1); + } + + public static ItemStack cloneStack(Item item, int stackSize) + { + if (item == null) + { + return ItemStack.EMPTY; + } + return new ItemStack(item, stackSize); + } + + public static ItemStack cloneStack(Block block, int stackSize) + { + if (block == null) + { + return ItemStack.EMPTY; + } + return new ItemStack(block, stackSize); + } + + public static ItemStack cloneStack(ItemStack stack, int stackSize) + { + if (stack.isEmpty()) + { + return ItemStack.EMPTY; + } + ItemStack retStack = stack.copy(); + retStack.setCount(stackSize); + return retStack; + } + + public static ItemStack cloneStack(ItemStack stack) + { + return stack.isEmpty() ? ItemStack.EMPTY : stack.copy(); + } + + public static ItemStack readItemStackFromNBT(NBTTagCompound nbt) + { + ItemStack stack = new ItemStack(Item.getItemById(nbt.getShort("id"))); + stack.setCount(nbt.getInteger("Count")); + stack.setItemDamage(Math.max(0, nbt.getShort("Damage"))); + if (nbt.hasKey("tag", 10)) + { + stack.setTagCompound(nbt.getCompoundTag("tag")); + } + return stack; + } + + public static NBTTagCompound writeItemStackToNBT(ItemStack stack, NBTTagCompound nbt) + { + nbt.setShort("id", (short) Item.getIdFromItem(stack.getItem())); + nbt.setInteger("Count", stack.getCount()); + nbt.setShort("Damage", (short) getItemDamage(stack)); + if (stack.hasTagCompound()) + { + nbt.setTag("tag", stack.getTagCompound()); + } + return nbt; + } + + public static NBTTagCompound writeItemStackToNBT(ItemStack stack, int amount, NBTTagCompound nbt) + { + nbt.setShort("id", (short) Item.getIdFromItem(stack.getItem())); + nbt.setInteger("Count", amount); + nbt.setShort("Damage", (short) getItemDamage(stack)); + if (stack.hasTagCompound()) + { + nbt.setTag("tag", stack.getTagCompound()); + } + return nbt; + } + + public static String getNameFromItemStack(ItemStack stack) + { + if (stack.isEmpty() || !stack.hasTagCompound() || !stack.getTagCompound().hasKey("display")) + { + return ""; + } + return stack.getTagCompound().getCompoundTag("display").getString("Name"); + } + + public static int getItemDamage(ItemStack stack) + { + return Items.DIAMOND.getMetadata(stack); + } + + public static boolean hasOreDictSuffix(ItemStack stack, String oreDictSuffix) + { + return PROXY.getOreName(stack).toLowerCase().endsWith(oreDictSuffix.toLowerCase()); + } + + public static ItemStack getOre(String oreName) + { + return getOre(oreName, 1); + } + + public static ItemStack getOre(String oreName, int amount) + { + return PROXY.getOre(oreName, amount); + } + + public static String getOreName(ItemStack stack) + { + return PROXY.getOreName(stack); + } + + public static boolean isOreIDEqual(ItemStack stack, int oreID) + { + return PROXY.isOreIDEqual(stack, oreID); + } + + public static boolean isOreNameEqual(ItemStack stack, String oreName) + { + return PROXY.isOreNameEqual(stack, oreName); + } + + public static boolean oreNameExists(String oreName) + { + return PROXY.oreNameExists(oreName); + } + + public static boolean hasOreName(ItemStack stack) + { + return !getOreName(stack).equals("Unknown"); + } + + public static boolean isBlock(ItemStack stack) + { + return getOreName(stack).startsWith(BLOCK); + } + + public static boolean isOre(ItemStack stack) + { + return getOreName(stack).startsWith(ORE); + } + + public static boolean isCluster(ItemStack stack) + { + return getOreName(stack).startsWith(CLUSTER); + } + + public static boolean isDust(ItemStack stack) + { + return getOreName(stack).startsWith(DUST); + } + + public static boolean isIngot(ItemStack stack) + { + return getOreName(stack).startsWith(INGOT); + } + + public static boolean isPlate(ItemStack stack) + { + return getOreName(stack).startsWith(PLATE); + } + + public static boolean isCoin(ItemStack stack) + { + return getOreName(stack).startsWith(COIN); + } + + public static boolean isNugget(ItemStack stack) + { + return getOreName(stack).startsWith(NUGGET); + } + + public static boolean isLog(ItemStack stack) + { + return getOreName(stack).startsWith(LOG); + } + + public static boolean doOreIDsMatch(ItemStack stackA, ItemStack stackB) + { + int id = PROXY.getOreID(stackA); + return id >= 0 && id == PROXY.getOreID(stackB); + } + + public static NonNullList getOres(String oreName) + { + return PROXY.getOres(oreName); + } + + public static NonNullList getOresThatContain(String oreName) + { + return PROXY.getOres(oreName); + } + + static class OreDictProxy + { + public ItemStack getOre(String oreName, int amount) + { + if (!oreNameExists(oreName)) + { + return ItemStack.EMPTY; + } + return ItemUtil.cloneStack(OreDictionary.getOres(oreName, false).get(0), amount); + } + + public NonNullList getOres(String oreName) + { + if (!oreNameExists(oreName)) + { + return NonNullList.create(); + } + return OreDictionary.getOres(oreName, false); + } + + public int getOreID(ItemStack stack) + { + return getOreID(getOreName(stack)); + } + + public int getOreID(String oreName) + { + if (Strings.isNullOrEmpty(oreName)) + { + return -1; + } + return OreDictionary.getOreID(oreName); + } + + public List getAllOreIDs(ItemStack stack) + { + return Ints.asList(OreDictionary.getOreIDs(stack)); + } + + public String getOreName(ItemStack stack) + { + int[] ids = OreDictionary.getOreIDs(stack); + if (ids != null && ids.length >= 1) + { + return OreDictionary.getOreName(ids[0]); + } + return ""; + } + + public String getOreName(int oreID) + { + return OreDictionary.getOreName(oreID); + } + + public boolean isOreIDEqual(ItemStack stack, int oreID) + { + return getOreID(stack) == oreID; + } + + public boolean isOreNameEqual(ItemStack stack, String oreName) + { + return OreDictionary.getOreName(getOreID(stack)).equals(oreName); + } + + public boolean oreNameExists(String oreName) + { + return OreDictionary.doesOreNameExist(oreName) && OreDictionary.getOres(oreName, false).size() > 0; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/JavaUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/JavaUtil.java new file mode 100644 index 00000000..563efd34 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/JavaUtil.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +public class JavaUtil extends SecurityManager +{ + + public static JavaUtil instance = new JavaUtil(); + + public Class getCaller() + { + return getClassContext()[2]; + } + + public boolean isCalledBy(Class clazz) + { + Class[] context = getClassContext(); + + int imax = Math.min(context.length, 6); + for (int i = 2; i < imax; i++) + { + if (clazz == context[i]) + { + return true; + } + } + return false; + } + + public boolean isCalledBy(Class clazz1, Class clazz2) + { + Class[] context = getClassContext(); + + int imax = Math.min(context.length, 7); + for (int i = 2; i < imax; i++) + { + Class test = context[i]; + if (test == clazz1 || test == clazz2) + { + return true; + } + } + return false; + } + + public boolean isCalledBy(Class clazz1, Class clazz2, Class clazz3) + { + Class[] context = getClassContext(); + + int imax = Math.min(context.length, 6); + for (int i = 2; i < imax; i++) + { + Class test = context[i]; + if (test == clazz1 || test == clazz2 || test == clazz3) + { + return true; + } + } + return false; + } + + public boolean isCalledBy(String name) + { + Class[] context = getClassContext(); + + int imax = Math.min(context.length, 6); + for (int i = 2; i < imax; i++) + { + if (context[i].getName().equals(name)) + { + return true; + } + } + return false; + } + + public boolean isCalledBySpecific(Class clazz) + { + Class[] context = getClassContext(); + if (context.length < 6) + return false; + return (clazz == context[3] && !clazz.isAssignableFrom(context[4])); + } + + public int isCalledBySecond(Class clazz1, Class clazz2, Class clazz3) + { + Class[] context = getClassContext(); + if (context.length < 4) + return 0; + Class test = context[3]; + if (test == clazz1) + return 1; + if (test == clazz2) + return 2; + if (test == clazz3) + return 3; + return 0; + } + + public boolean isCalledByThird(Class clazz) + { + Class[] context = getClassContext(); + if (context.length < 5) + return false; + return (context[4] == clazz); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapGen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapGen.java new file mode 100644 index 00000000..3d5b3344 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapGen.java @@ -0,0 +1,775 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Method; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.channels.FileChannel; +import java.util.ArrayList; +import java.util.Random; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +import net.minecraft.init.Biomes; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeCache; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.ChunkGeneratorSettings; +import net.minecraft.world.gen.NoiseGeneratorOctaves; +import net.minecraft.world.gen.NoiseGeneratorPerlin; +import net.minecraft.world.gen.layer.GenLayer; +import net.minecraft.world.storage.WorldInfo; + +import micdoodle8.mods.miccore.IntCache; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import org.apache.commons.io.FileUtils; + +public class MapGen extends BiomeProvider implements Runnable +{ + + public static boolean disabled; + private static final float[] parabolicField = new float[25]; + + public boolean mapNeedsCalculating = false; + public AtomicBoolean finishedCalculating; + private AtomicBoolean paused; + private AtomicBoolean aborted; + + private AtomicInteger progressX; + private int progressZ; + private int biomeMapX; + private int biomeMapZ; + private int biomeMap0; + private int biomeMapCx; + private int biomeMapCz; + private final int biomeMapFactor; + private final int tickLimit; + private int imagefactor; + + private BiomeCache biomeCache; + private GenLayer genBiomes; + private GenLayer biomeIndexLayer; + public File biomeMapFile; + private byte[] biomeAndHeightArray = null; + private int biomeMapSizeX; + private int biomeMapSizeZ; + + private Random rand; + private int[] heights; + private double[] heighttemp; + private World world; + private WorldType worldType; + private WorldInfo worldInfo; + private ChunkGeneratorSettings settings = null; + + private int[] biomesGrid = null; // Memory efficient to keep re-using the + // same one. + private Biome[] biomesGridHeights = null; + private int[] biomeCount = null; + private final int dimID; + + static + { + for (int j = -2; j <= 2; ++j) + { + for (int k = -2; k <= 2; ++k) + { + float f = 10.0F / MathHelper.sqrt(j * j + k * k + 0.2F); + parabolicField[j + 2 + (k + 2) * 5] = f; + } + } + } + + public MapGen(World worldIn, int sx, int sz, int cx, int cz, int scale, File file) + { + this.dimID = GCCoreUtil.getDimensionID(worldIn); + this.biomeMapFactor = scale; + this.tickLimit = Math.min(scale, 16); + if (MapGen.disabled) + { + this.mapNeedsCalculating = false; + return; + } + this.biomeMapSizeX = sx; + this.biomeMapSizeZ = sz; + int progress = this.checkProgress(file); + if (progress < 0) + { + this.mapNeedsCalculating = false; + return; + } + this.mapNeedsCalculating = true; + + this.rand = new Random(); + this.finishedCalculating = new AtomicBoolean(); + this.paused = new AtomicBoolean(); + this.aborted = new AtomicBoolean(); + + this.biomeMapCx = cx >> 4; + this.biomeMapCz = cz >> 4; + this.biomeMapFile = file; + this.imagefactor = 16 / biomeMapFactor; + if (this.imagefactor < 1) + { + this.imagefactor = 1; + } + int limitX = biomeMapSizeX * biomeMapFactor / 32; + int limitZ = biomeMapSizeZ * biomeMapFactor / 32; + this.biomeMap0 = -limitZ; + this.biomeMapX = -limitX; + this.biomeMapZ = this.biomeMap0; + this.progressX = new AtomicInteger(); + this.progressZ = 0; + this.world = worldIn; + this.worldInfo = worldIn.getWorldInfo(); + this.worldType = worldInfo.getTerrainType(); + long seed = worldInfo.getSeed(); + this.biomeCache = new BiomeCache(this); + String options = worldInfo.getGeneratorOptions(); + GenLayer[] agenlayer; + try + { + if (options != null) + { + this.settings = ChunkGeneratorSettings.Factory.jsonToFactory(options).build(); + } + if (CompatibilityManager.isBOPWorld(this.worldType)) + { + Object settingsBOP = CompatibilityManager.classBOPws.getConstructor(String.class).newInstance(options); + Method bopSetup = CompatibilityManager.classBOPwcm.getMethod("setupBOPGenLayers", long.class, settingsBOP.getClass()); + agenlayer = (GenLayer[]) bopSetup.invoke(null, seed, settingsBOP); + } else + { + agenlayer = GenLayer.initializeAllBiomeGenerators(seed, worldType, this.settings); + } + agenlayer = getModdedBiomeGenerators(worldType, seed, agenlayer); + } catch (Exception e) + { + GalacticraftCore.logger.error("Galacticraft background map image generator not able to run (probably a mod conflict?)"); + GalacticraftCore.logger.error("Please report this at https://github.com/micdoodle8/Galacticraft/issues/2481"); + e.printStackTrace(); + this.mapNeedsCalculating = false; + MapGen.disabled = true; + return; + } + this.genBiomes = agenlayer[0]; + this.biomeIndexLayer = agenlayer[1]; + + GalacticraftCore.logger.debug("Starting map generation " + file.getName() + " top left " + ((biomeMapCx - limitX) * 16) + "," + ((biomeMapCz - limitZ) * 16)); + if (progress > 0) + { + this.resumeProgress(progress); + } + } + + /** + * Returns -1 if the map file saved by the server on disk is already + * complete. Returns 0 if a new file is needed Returns >0 if an existing + * file is in progress (in this case, initialises biomeAndHeightArray and + * smaller arrays to match that existing file. + */ + private int checkProgress(File file) + { + if (!file.exists()) + return 0; + + if (file.length() != biomeMapSizeX * biomeMapSizeZ * 2) + { + return 0; + } + + int progress = 0; + if (file.getName().equals("Overworld" + MapUtil.OVERWORLD_LARGEMAP_WIDTH + ".bin")) + { + int len = (int) file.length(); + FileChannel fc; + try + { + fc = (FileChannel.open(file.toPath())); + fc.position(len - 8); + byte[] flagdata = new byte[8]; + ByteBuffer databuff = ByteBuffer.wrap(flagdata); + fc.read(databuff); + if (testFlag(flagdata)) + { + databuff.order(ByteOrder.BIG_ENDIAN); + databuff.position(0); + progress = databuff.getInt(); + } else + { + // No progress flag data, therefore the file must be + // complete + return -1; + } + fc.close(); + } catch (IOException e) + { + e.printStackTrace(); + } + + if (progress > 0 && progress <= biomeMapSizeX - imagefactor) + { + try + { + this.biomeAndHeightArray = FileUtils.readFileToByteArray(file); + this.initialiseSmallerArrays(); + return progress; + } catch (IOException e) + { + e.printStackTrace(); + this.biomeAndHeightArray = null; + } + } + + return 0; + } + + // Smaller files are always complete, if present and name and size match + return -1; + } + + @Override + public void run() + { + // Allow some time for the pause on any other map gen thread to become + // effective + try + { + Thread.sleep(90); + } catch (InterruptedException e) + { + } + + long seed = worldInfo.getSeed(); + this.initialise(seed); + + // Generate this map from start to finish within the thread + while (!this.aborted.get()) + { + if (this.paused.get()) + { + try + { + // Sleep for a bit, next time around maybe will not be + // paused? + Thread.sleep(1211); + } catch (InterruptedException e) + { + } + } else + { + // Do the actual work of the thread + if (this.BiomeMapOneTick()) + { + break; // finished! + } + } + } + + this.finishedCalculating.set(true); + } + + public void pause() + { + this.paused.set(true); + } + + public void resume() + { + this.paused.set(false); + } + + public void abort() + { + this.aborted.set(true); + } + + private void flagProgress() + { + int progX = this.progressX.get(); + if (progX > biomeMapSizeX - imagefactor) + return; + + GalacticraftCore.logger.debug("Saving partial map image progress " + progX); + int offset = this.biomeAndHeightArray.length; + this.biomeAndHeightArray[offset - 1] = (byte) 0xFE; + this.biomeAndHeightArray[offset - 2] = (byte) 0x06; + this.biomeAndHeightArray[offset - 3] = (byte) 0x03; + this.biomeAndHeightArray[offset - 4] = (byte) 0x0E; + this.biomeAndHeightArray[offset - 5] = (byte) (progX & 0xFF); + this.biomeAndHeightArray[offset - 6] = (byte) (progX >> 8 & 0xFF); + this.biomeAndHeightArray[offset - 7] = (byte) (progX >> 16 & 0xFF); + this.biomeAndHeightArray[offset - 8] = (byte) (progX >> 24 & 0xFF); + } + + public static boolean testFlag(byte[] bb) + { + return (bb[7] & 0xFF) == 0xFE && bb[6] == 0x06 && bb[5] == 0x03 && bb[4] == 0x0E; + } + + private void resumeProgress(int progress) + { + int multifactor = biomeMapFactor >> 4; + if (multifactor < 1) + { + multifactor = 1; + } + int progCount = progress / imagefactor; + + progressX.set(progress); + biomeMapX = multifactor * progCount - (biomeMapSizeX * biomeMapFactor / 32); + if (biomeMapX > -biomeMap0 * 4) + { + biomeMapX += biomeMap0 * 8; + } + } + + /** + * This is outside the multithreaded portion of the code This should be + * called after the finishedCalculating flag is set. + */ + public void writeOutputFile(boolean sendToClientImmediately) + { + if (this.biomeAndHeightArray == null) + return; + + if (!this.aborted.get()) // It should be error-free if it wasn't aborted + { + try + { + if (!this.biomeMapFile.exists() || (this.biomeMapFile.canWrite() && this.biomeMapFile.canRead())) + { + this.flagProgress(); + FileUtils.writeByteArrayToFile(this.biomeMapFile, this.biomeAndHeightArray); + } + } catch (IOException ex) + { + ex.printStackTrace(); + } + + if (sendToClientImmediately) + { + MapUtil.sendMapPacketToAll(this.biomeMapCx << 4, this.biomeMapCz << 4, this.biomeAndHeightArray); + } + } + + this.biomeAndHeightArray = null; + } + + private void initialiseSmallerArrays() + { + this.heights = new int[256]; + this.heighttemp = new double[825]; + this.biomeCount = new int[this.tickLimit * this.tickLimit]; + } + + public static void arrayClear(int[] array, int len) + { + int lenB = len < 16 ? len : 16; + for (int i = 0; i < lenB; i++) + { + array[i] = 0; + } + for (int i = 16; i < len; i += i) + { + System.arraycopy(array, 0, array, i, i + i > len ? i : len - i); + } + } + + /* + * Return false while there are further ticks to carry out Return true when + * completed + */ + public boolean BiomeMapOneTick() + { + if (this.biomeAndHeightArray == null) + { + this.biomeAndHeightArray = new byte[biomeMapSizeX * biomeMapSizeZ * 2]; + this.initialiseSmallerArrays(); + } + int multifactor = biomeMapFactor >> 4; + if (multifactor < 1) + { + multifactor = 1; + } + int progX = this.progressX.get(); + try + { + biomeMapOneChunk(biomeMapCx + biomeMapX, biomeMapCz + biomeMapZ, progX, progressZ, tickLimit); + } catch (Exception e) + { + GalacticraftCore.logger.error("Galacticraft background map image generator hit an error (probably a mod conflict?)"); + GalacticraftCore.logger.error("--> Please report this at https://github.com/micdoodle8/Galacticraft/issues/2544 <--"); + e.printStackTrace(); + MapGen.disabled = true; + this.aborted.set(true); + return true; + } + biomeMapZ += multifactor; + progressZ += imagefactor; + if (progressZ > biomeMapSizeZ - imagefactor) + { + progressZ = 0; +// if (progX % 3 == 0) +// { +// System.out.println("Finished map column " + progX + " at " + (biomeMapCx + biomeMapX) + "," + (biomeMapCz + biomeMapZ)); +// } + this.progressX.set(progX + imagefactor); + biomeMapZ = biomeMap0; + biomeMapX += multifactor; + if (biomeMapX > -biomeMap0 * 4) + { + biomeMapX += biomeMap0 * 8; + } + return progX > biomeMapSizeX - imagefactor - imagefactor; + } + return false; + } + + private void biomeMapOneChunk(int x0, int z0, int ix, int iz, int limit) + { + biomesGrid = this.getBiomeGenAt(biomesGrid, x0 << 4, z0 << 4, 16, 16); + if (biomesGrid == null) + { + return; + } + this.getHeightMap(x0, z0); + int factor = this.biomeMapFactor; + int halfFactor = limit * limit / 2; + ArrayList cols = new ArrayList<>(); + for (int j = 0; j < biomeCount.length; j++) + { + biomeCount[j] = 0; + } + for (int x = 0; x < 16; x += factor) + { + int izstore = iz; + for (int z = 0; z < 16; z += factor) + { + cols.clear(); + int maxcount = 0; + int maxindex = -1; + int biome = -1; + int lastcol = -1; + int idx = 0; + int avgHeight = 0; + int divisor = 0; + // TODO: start in centre instead of top left + BIOMEDONE: for (int xx = 0; xx < limit; xx++) + { + int hidx = ((xx + x) << 4) + z; + for (int zz = 0; zz < limit; zz++) + { + int height = heights[hidx + zz]; + avgHeight += height; + divisor++; + biome = biomesGrid[xx + x + ((zz + z) << 4)]; + if (biome != lastcol) + { + idx = cols.indexOf(biome); + if (idx == -1) + { + idx = cols.size(); + cols.add(biome); + } + lastcol = biome; + } + biomeCount[idx]++; + if (biomeCount[idx] > maxcount) + { + maxcount = biomeCount[idx]; + maxindex = idx; + if (maxcount > halfFactor) + { + break BIOMEDONE; + } + } + } + } + // Clear the array for next time + arrayClear(biomeCount, cols.size()); + + int arrayIndex = (ix * biomeMapSizeZ + iz) * 2; + this.biomeAndHeightArray[arrayIndex] = (byte) (cols.get(maxindex).intValue()); + this.biomeAndHeightArray[arrayIndex + 1] = (byte) ((avgHeight + (divisor + 1) / 2) / divisor); + iz++; + } + iz = izstore; + ix++; + } + } + + public void getHeightMap(int cx, int cz) + { + rand.setSeed(cx * 341873128712L + cz * 132897987541L); + biomesGridHeights = this.getBiomesForGeneration(biomesGridHeights, cx * 4 - 2, cz * 4 - 2, 10, 10); + this.generateHeightMap(cx * 4, 0, cz * 4); + + final double d0 = 0.125D; + final double d9 = 0.25D; + + for (int xx = 0; xx < 4; ++xx) + { + int xa = xx * 5; + int xb = xa + 5; + + for (int zz = 0; zz < 4; ++zz) + { + int aa = (xa + zz) * 33; + int ab = aa + 33; + int ba = (xb + zz) * 33; + int bb = ba + 33; + + for (int yy = 2; yy < 18; ++yy) + { + double d1 = heighttemp[aa + yy]; + double d2 = heighttemp[ab + yy]; + double d3 = heighttemp[ba + yy]; + double d4 = heighttemp[bb + yy]; + double d5 = (heighttemp[aa + yy + 1] - d1) * d0; + double d6 = (heighttemp[ab + yy + 1] - d2) * d0; + double d7 = (heighttemp[ba + yy + 1] - d3) * d0; + double d8 = (heighttemp[bb + yy + 1] - d4) * d0; + + for (int y = 0; y < 8; ++y) + { + double d10 = d1; + double d11 = d2; + double d12 = (d3 - d1) * d9; + double d13 = (d4 - d2) * d9; + + int truey = yy * 8 + y; + for (int x = 0; x < 4; ++x) + { + int idx = x + xx * 4 << 4 | zz * 4; + double d16 = (d11 - d10) * d9; + double d15 = d10 - d16; + + for (int z = 0; z < 4; ++z) + { + if ((d15 += d16) > 0.0D) + { + heights[idx + z] = truey; + } + } + + d10 += d12; + d11 += d13; + } + + d1 += d5; + d2 += d6; + d3 += d7; + d4 += d8; + } + } + } + } + } + + static double[] mainNoiseRegion; + static double[] minLimitRegion; + static double[] maxLimitRegion; + static double[] depthRegion; + private NoiseGeneratorOctaves noiseGen1; + private NoiseGeneratorOctaves noiseGen2; + private NoiseGeneratorOctaves noiseGen3; + public NoiseGeneratorOctaves noiseGen4; + + public void initialise(long seed) + { + rand = new Random(seed); + noiseGen1 = new NoiseGeneratorOctaves(rand, 16); + noiseGen2 = new NoiseGeneratorOctaves(rand, 16); + noiseGen3 = new NoiseGeneratorOctaves(rand, 8); + NoiseGeneratorPerlin ignore1 = new NoiseGeneratorPerlin(this.rand, 4); + NoiseGeneratorOctaves ignore2 = new NoiseGeneratorOctaves(this.rand, 10); + noiseGen4 = new NoiseGeneratorOctaves(rand, 16); + NoiseGeneratorOctaves ignore3 = new NoiseGeneratorOctaves(this.rand, 8); + net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextOverworld ctx = + new net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextOverworld(noiseGen1, noiseGen2, noiseGen3, ignore1, ignore2, noiseGen4, ignore3); + ctx = net.minecraftforge.event.terraingen.TerrainGen.getModdedNoiseGenerators(this.world, this.rand, ctx); + noiseGen1 = ctx.getLPerlin1(); + noiseGen2 = ctx.getLPerlin2(); + noiseGen3 = ctx.getPerlin(); + noiseGen4 = ctx.getDepth(); + } + + private void generateHeightMap(int cx, int cy, int cz) + { + float f = this.settings.coordinateScale; + float f1 = this.settings.heightScale; + depthRegion = + noiseGen4.generateNoiseOctaves(depthRegion, cx, cz, 5, 5, this.settings.depthNoiseScaleX, this.settings.depthNoiseScaleZ, this.settings.depthNoiseScaleExponent); + mainNoiseRegion = noiseGen3.generateNoiseOctaves(mainNoiseRegion, cx, cy, cz, 5, 33, 5, f / this.settings.mainNoiseScaleX, f1 / this.settings.mainNoiseScaleY, + f / this.settings.mainNoiseScaleZ); + minLimitRegion = noiseGen1.generateNoiseOctaves(minLimitRegion, cx, cy, cz, 5, 33, 5, f, f1, f); + maxLimitRegion = noiseGen2.generateNoiseOctaves(maxLimitRegion, cx, cy, cz, 5, 33, 5, f, f1, f); + boolean amplified = this.worldType == WorldType.AMPLIFIED; + double minLimitScale = this.settings.lowerLimitScale; + double maxLimitScale = this.settings.upperLimitScale; + double stretchY = this.settings.stretchY * 128.0D / 256.0D; + double baseSize = this.settings.baseSize; + int i = 2; // start at 2 and later skip 19-33 - because these heightMap + // entries are never referenced in our code in this class + int j = 0; + + for (int xx = 0; xx < 5; ++xx) + { + for (int zz = 0; zz < 5; ++zz) + { + float f2 = 0.0F; + float f3 = 0.0F; + float f4 = 0.0F; + float theMinHeight = biomesGridHeights[xx + 22 + zz * 10].getBaseHeight(); + + for (int x = -2; x <= 2; ++x) + { + int baseIndex = xx + x + 22; + for (int z = -2; z <= 2; ++z) + { + Biome biomegenbase1 = biomesGridHeights[baseIndex + (zz + z) * 10]; + float f5 = this.settings.biomeDepthOffSet + biomegenbase1.getBaseHeight() * this.settings.biomeDepthWeight; + float f6 = this.settings.biomeScaleOffset + biomegenbase1.getHeightVariation() * this.settings.biomeScaleWeight; + + if (amplified && f5 > 0.0F) + { + f5 = 1.0F + f5 + f5; + f6 = 1.0F + f6 * 4.0F; + } + + float f7 = parabolicField[x + 12 + z * 5] / (f5 + 2.0F); + + if (biomegenbase1.getBaseHeight() > theMinHeight) + { + f7 /= 2.0F; + } + + f2 += f6 * f7; + f3 += f5 * f7; + f4 += f7; + } + } + + f2 = f2 / f4; + f3 = f3 / f4; + f2 = f2 * 0.9F + 0.1F; + f3 = (f3 * 4.0F - 1.0F) / 8.0F; + double d7 = this.depthRegion[j] / 8000.0D; + + if (d7 < 0.0D) + { + d7 = -d7 * 0.3D; + } + + d7 = d7 * 3.0D - 2.0D; + + if (d7 < 0.0D) + { + d7 = d7 / 2.0D; + + if (d7 < -1.0D) + { + d7 = -1.0D; + } + + d7 = d7 / 1.4D; + d7 = d7 / 2.0D; + } else + { + if (d7 > 1.0D) + { + d7 = 1.0D; + } + + d7 = d7 / 8.0D; + } + + ++j; + double d8 = f3; + double d9 = f2; + d8 = d8 + d7 * 0.2D; + d8 = d8 * baseSize / 8.0D; + double d0 = baseSize + d8 * 4.0D; + + for (int j2 = 2; j2 < 19; ++j2) + { + double d1 = (j2 - d0) * stretchY / d9; + if (d1 < 0.0D) + { + d1 *= 4.0D; + } + + double d2 = this.minLimitRegion[i] / minLimitScale; + double d3 = this.maxLimitRegion[i] / maxLimitScale; + double d4 = (this.mainNoiseRegion[i] / 10.0D + 1.0D) / 2.0D; + double d5 = MathHelper.clampedLerp(d2, d3, d4) - d1; + heighttemp[i] = d5; + ++i; + } + i += 16; // We skip j2 = 0-1 and 19-32 + } + } + } + + /** + * REPLICATES method in WorldChunkManager Returns an array of biomes for the + * location input, used for generating the height map + */ + @Override + public Biome[] getBiomesForGeneration(Biome[] biomes, int x, int z, int width, int height) + { + IntCache.resetIntCacheGC(); + int[] aint = this.genBiomes.getInts(x, z, width, height); + + int size = width * height; + if (biomes == null || biomes.length < size) + { + biomes = new Biome[size]; + } + for (int i = 0; i < size; ++i) + { + int biomeId = aint[i]; + Biome biomegenbase = Biome.getBiome(biomeId, Biomes.DEFAULT); +// else +// System.err.println("MapGen: Biome ID is out of bounds: " + biomeId + ", defaulting to 0 (Ocean)"); + biomes[i] = biomegenbase == null ? Biomes.OCEAN : biomegenbase; + } + + return biomes; + } + + /** + * REPLICATES method in WorldChunkManager (with higher performance!) Return + * a list of ints representing mapgen biomes at the specified coordinates. + * Args: listToReuse, x, y, width, height This is after all genlayers + * (oceans, islands, hills, rivers, etc) + */ + public int[] getBiomeGenAt(int[] listToReuse, int x, int z, int width, int height) + { + IntCache.resetIntCacheGC(); + int[] aint = this.biomeIndexLayer.getInts(x, z, width, height); + + int size = width * height; + if (listToReuse == null || listToReuse.length < size) + { + listToReuse = new int[size]; + } + System.arraycopy(aint, 0, listToReuse, 0, size); + + return listToReuse; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapUtil.java new file mode 100644 index 00000000..1472e352 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapUtil.java @@ -0,0 +1,1341 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Random; +import java.util.TreeMap; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.zip.DataFormatException; +import java.util.zip.Deflater; +import java.util.zip.Inflater; + +import javax.imageio.IIOImage; +import javax.imageio.ImageIO; +import javax.imageio.ImageReadParam; +import javax.imageio.ImageReader; +import javax.imageio.ImageTypeSpecifier; +import javax.imageio.stream.FileImageOutputStream; +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.ImageOutputStream; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Biomes; +import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderSurface; +import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.DynamicTextureProper; +import micdoodle8.mods.galacticraft.core.client.screen.DrawGameScreen; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; + +import org.apache.commons.io.FileUtils; + +public class MapUtil +{ + + // Mapgen management + public static AtomicBoolean calculatingMap = new AtomicBoolean(); + public static AtomicBoolean resetClientFlag = new AtomicBoolean(); + private static MapGen currentMap = null; + private static MapGen slowMap = null; + private static Thread threadCurrentMap = null; + private static Thread threadSlowMap = null; + public static boolean doneOverworldTexture = false; + private static LinkedList queuedMaps = new LinkedList<>(); + public static LinkedList clientRequests = new LinkedList<>(); + + public static ArrayList biomeColours = new ArrayList(40); + private static Random rand = new Random(); + private static byte[] overworldImageBytesPart; // Used client side only + private static byte[] overworldImageCompressed = null; + + // Map size definitions + private static final int SIZE_STD = 176; + public static final int SIZE_STD2 = SIZE_STD * 2; + public static final int OVERWORLD_LARGEMAP_WIDTH = 1536; + private static final int OVERWORLD_LARGEMAP_HEIGHT = 960; + private static final int OVERWORLD_MAP_SCALE = 4; + private static final int OVERWORLD_TEXTURE_WIDTH = 192; + private static final int OVERWORLD_TEXTURE_HEIGHT = 48; + private static final int OVERWORLD_TEXTURE_SCALE = 7; + private static final int LARGEMAP_MARKER = 30000001; + + // Color related constants + private static final int OCEAN_HEIGHT = 63; + private static final int DEEP_OCEAN = 56; + + static + { + // TODO: Deal with mods like ExtraBiomes + setupColours(); + } + + public static void reset() + { + if (currentMap != null) + currentMap.abort(); + currentMap = null; + saveMapProgress(); + threadCurrentMap = null; + threadSlowMap = null; + queuedMaps.clear(); + calculatingMap.set(false); + doneOverworldTexture = false; + overworldImageCompressed = null; + } + + @SideOnly(Side.CLIENT) + public static void resetClient() + { + resetClientFlag.set(true); + // Threadsafe + } + + @SideOnly(Side.CLIENT) + public static void resetClientBody() + { + ClientProxyCore.overworldTexturesValid = false; + clientRequests.clear(); + overworldImageBytesPart = null; + File baseFolder = new File(FMLClientHandler.instance().getClient().gameDir, "assets/galacticraftMaps"); + if (baseFolder.exists() && baseFolder.isDirectory()) + { + for (File f : baseFolder.listFiles()) + { + if (f.isFile()) + { + f.delete(); + } + } + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] {})); + ClientProxyCore.overworldTextureRequestSent = true; + DrawGameScreen.reusableMap = new DynamicTexture(MapUtil.SIZE_STD2, MapUtil.SIZE_STD2); + MapUtil.biomeColours.clear(); + setupColours(); + } + + /** + * The BufferedImage needs to be already set up as a sized image of + * TYPE_INT_RGB + */ + public static void getLocalMap(World world, int chunkXPos, int chunkZPos, BufferedImage image) + { + for (int x0 = -12; x0 <= 12; x0++) + { + for (int z0 = -12; z0 <= 12; z0++) + { + Chunk chunk = world.getChunk(chunkXPos + x0, chunkZPos + z0); + BlockPos pos = null; + + if (chunk != null) + { + for (int z = 0; z < 16; z++) + { + for (int x = 0; x < 16; x++) + { + int l4 = chunk.getHeight(new BlockPos(x, 0, z)) + 1; + IBlockState state = Blocks.AIR.getDefaultState(); + + if (l4 > 1) + { + do + { + --l4; + state = chunk.getBlockState(x, l4, z); + } while (state.getMapColor(world, pos) == MapColor.AIR && l4 > 0); + } + + int col = pos != null ? state.getMapColor(world, pos).colorValue : 0; + image.setRGB(x + (x0 + 12) * 16, z + (z0 + 12) * 16, col); + } + } + } + } + } + } + + public static void makeOverworldTexture() + { + if (doneOverworldTexture) + { + return; + } + World overworld = WorldUtil.getProviderForDimensionServer(ConfigManagerCore.idDimensionOverworld).world; + if (overworld == null) + { + return; + } + + if (overworld.getWorldType() == WorldType.FLAT || !(overworld.provider instanceof WorldProviderSurface)) + { + doneOverworldTexture = true; + return; + } + + File baseFolder = MapUtil.getBaseFolder(); + ; + if (!baseFolder.exists() && !baseFolder.mkdirs()) + { + GalacticraftCore.logger.error("Base folder(s) could not be created: " + baseFolder.getAbsolutePath()); + doneOverworldTexture = true; + return; + } + + if (MapUtil.getBiomeMapForCoords(overworld, 0, 0, OVERWORLD_TEXTURE_SCALE, OVERWORLD_TEXTURE_WIDTH, OVERWORLD_TEXTURE_HEIGHT, baseFolder)) + { + doneOverworldTexture = true; + } + + // This will make the 'slow map', a map covering a large part of the + // world around spawn + // (On a typical modern PC, this should take 20-30 minutes to generate + // in its own thread) + // MapUtil.getBiomeMapForCoords(overworld, 0, 0, OVERWORLD_MAP_SCALE, + // OVERWORLD_LARGEMAP_WIDTH, OVERWORLD_LARGEMAP_HEIGHT, baseFolder); + } + + public static void sendOverworldToClient(EntityPlayerMP client) + { + if (doneOverworldTexture) + { + try + { + File baseFolder = MapUtil.getBaseFolder(); + ; + if (!baseFolder.exists()) + { + GalacticraftCore.logger.error("Base folder missing: " + baseFolder.getAbsolutePath()); + return; + } + File file = new File(baseFolder, "Overworld" + OVERWORLD_TEXTURE_WIDTH + ".bin"); + if (file.exists()) + { + sendMapPacket(0, 0, client, FileUtils.readFileToByteArray(file)); + } + file = new File(baseFolder, "Overworld" + OVERWORLD_LARGEMAP_WIDTH + ".bin"); + if (file.exists()) + { + sendMapPacket(LARGEMAP_MARKER, 0, client, FileUtils.readFileToByteArray(file)); + } + } + catch (Exception ex) + { + System.err.println("Error sending overworld image to player."); + ex.printStackTrace(); + } + } + } + + public static void sendOrCreateMap(World world, int cx, int cz, EntityPlayerMP client) + { + + if (world.getWorldType() == WorldType.FLAT || !(world.provider instanceof WorldProviderSurface)) + { + doneOverworldTexture = true; + return; + } + + try + { + File baseFolder = MapUtil.getBaseFolder(); + ; + if (!baseFolder.exists()) + { + GalacticraftCore.logger.error("Base folder missing: " + baseFolder.getAbsolutePath()); + return; + } + File file = makeFileName(baseFolder, cx, cz); + if (!file.exists()) + { + getBiomeMapForCoords(world, cx, cz, 1, SIZE_STD, SIZE_STD, baseFolder); + return; + } + sendMapPacket(cx, cz, client, FileUtils.readFileToByteArray(file)); + } + catch (Exception ex) + { + System.err.println("Error sending map image to player."); + ex.printStackTrace(); + } + } + + public static void sendMapPacket(int cx, int cz, EntityPlayerMP client, byte[] largeMap) throws IOException + { + byte[] compressed; + if (cx == LARGEMAP_MARKER) + { + if (overworldImageCompressed == null) + { + overworldImageCompressed = zipCompress(largeMap); + } + compressed = overworldImageCompressed; + } + else + { + compressed = zipCompress(largeMap); + } + sendMapPacketCompressed(cx, cz, client, compressed); + } + + public static void sendMapPacketToAll(int cx, int cz, byte[] largeMap) + { + byte[] compressed; + if (cx == LARGEMAP_MARKER) + { + if (overworldImageCompressed == null) + { + overworldImageCompressed = zipCompress(largeMap); + } + compressed = overworldImageCompressed; + } + else + { + compressed = zipCompress(largeMap); + } + sendMapPacketAllCompressed(cx, cz, compressed); + } + + private static void sendMapPacketCompressed(int cx, int cz, EntityPlayerMP client, byte[] map) throws IOException + { + if (cx == LARGEMAP_MARKER && map.length < 2080000) + { + int halfSize = map.length / 2; + byte[] largeMapPartA = Arrays.copyOf(map, halfSize); + byte[] largeMapPartB = Arrays.copyOfRange(map, halfSize, map.length); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(client.world), new Object[] + {cx, map.length, largeMapPartA}), client); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(client.world), new Object[] + {cx + 1, map.length, largeMapPartB}), client); + } + else if (map.length < 1040000) // That's about the limit on a Forge + // packet length + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(client.world), new Object[] + {cx, cz, map}), client); + } + } + + private static void sendMapPacketAllCompressed(int cx, int cz, byte[] map) + { + if (cx == LARGEMAP_MARKER && map.length < 2080000) + { + int halfSize = map.length / 2; + byte[] largeMapPartA = Arrays.copyOf(map, halfSize); + byte[] largeMapPartB = Arrays.copyOfRange(map, halfSize, map.length); + GCCoreUtil.sendToAllDimensions(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, new Object[] + {cx, map.length, largeMapPartA}); + GCCoreUtil.sendToAllDimensions(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, new Object[] + {cx + 1, map.length, largeMapPartB}); + } + else if (map.length < 1040000) // That's about the limit on a Forge + // packet length + { + GCCoreUtil.sendToAllDimensions(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, new Object[] + {cx, cz, map}); + } + } + + /** + * On a server, build any needed patchwork map files around co-ordinates (x, + * z) The needed files may already have been generated by previous calls on + * the same server Files are stored in the world save folder, subfolder + * galacticraft/overworldMap + */ + public static boolean buildMaps(World world, int x, int z) + { + if (world.getWorldType() == WorldType.FLAT || !(world.provider instanceof WorldProviderSurface)) + { + return false; + } + + File baseFolder = MapUtil.getBaseFolder(); + ; + if (!baseFolder.exists() && !baseFolder.mkdirs()) + { + GalacticraftCore.logger.error("Base folder(s) could not be created: " + baseFolder.getAbsolutePath()); + return false; + } + int cx = convertMap(x); + int cz = convertMap(z); + getBiomeMapForCoords(world, cx, cz, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx + SIZE_STD2, cz, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx, cz + SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx - SIZE_STD2, cz, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx, cz - SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx + SIZE_STD2, cz + SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx - SIZE_STD2, cz + SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx - SIZE_STD2, cz - SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx + SIZE_STD2, cz - SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + return true; + } + + private static File getBaseFolder() + { + return new File(DimensionManager.getCurrentSaveRootDirectory(), "galacticraft/overworldMap"); + } + + private static int convertMap(int x) + { + int cx = x + SIZE_STD; + if (cx < 0) + { + cx -= SIZE_STD2 - 1; + } + cx /= SIZE_STD2; + return cx * SIZE_STD2; + } + + public static boolean getBiomeMapForCoords(World world, int cx, int cz, int scale, int sizeX, int sizeZ, File baseFolder) + { + File outputFile; + if (sizeX != sizeZ) + { + outputFile = new File(baseFolder, "Overworld" + sizeX + ".bin"); + if (sizeX == OVERWORLD_LARGEMAP_WIDTH) + { + MapGen newGen = new MapGen(world, sizeX, sizeZ, cx, cz, 1 << scale, outputFile); + if (newGen.mapNeedsCalculating) + { + slowMap = newGen; + calculatingMap.set(true); + } + return false; + } + } + else + { + outputFile = makeFileName(baseFolder, cx, cz); + } + + MapGen newGen = new MapGen(world, sizeX, sizeZ, cx, cz, 1 << scale, outputFile); + if (newGen.mapNeedsCalculating) + { + if (calculatingMap.getAndSet(true)) + { + queuedMaps.add(newGen); + } + else + { + currentMap = newGen; + } + return false; + } + return true; + } + + public static void saveMapProgress() + { + if (slowMap != null) + { + slowMap.abort(); + try + { + Thread.sleep(90); + } + catch (InterruptedException e) + {} + slowMap.writeOutputFile(false); + slowMap = null; + } + } + + /** + * Poll any map threads to see if they need starting or if they're finished + * + * Multi-threaded version - runs each MapGen in its own thread, polls + * MapGen.finishedCalculatingMap to know when finished + */ + public static void BiomeMapNextTick_MultiThreaded() + { + if (currentMap != null) + { + if (threadCurrentMap == null) + { + // Create the current map thread, pausing any slow map thread + if (slowMap != null) + { + slowMap.pause(); + } + // TODO = should it use a re-usable thread pool? + threadCurrentMap = new Thread(currentMap); + threadCurrentMap.setName("Background world mapping"); + threadCurrentMap.setPriority(Thread.NORM_PRIORITY - 1); + threadCurrentMap.start(); + } + else if (currentMap.finishedCalculating.get()) + { + // Finished the current map + threadCurrentMap = null; + currentMap.writeOutputFile(true); + + if (queuedMaps.size() > 0) + { + currentMap = queuedMaps.removeFirst(); + } + else + { + currentMap = null; + + if (slowMap == null) + calculatingMap.set(false); + else + { + if (slowMap != null) + { + slowMap.resume(); + } + } + } + } + + return; + } + + if (!queuedMaps.isEmpty()) + { + if (slowMap != null) + { + slowMap.pause(); + } + + currentMap = queuedMaps.removeFirst(); + return; + } + + if (slowMap != null) + { + if (threadSlowMap == null) + { + // Create the slow map thread + threadSlowMap = new Thread(slowMap); + threadSlowMap.setName("Background world mapping"); + threadSlowMap.setPriority(Thread.NORM_PRIORITY - 1); + threadSlowMap.start(); + } + else if (slowMap.finishedCalculating.get()) + { + // Finished the current map + threadSlowMap = null; + slowMap.writeOutputFile(true); + slowMap = null; + calculatingMap.set(false); + } + + return; + } + } + + // Single Threaded Version of the same code + // (Currently unused) + public static void BiomeMapNextTick_SingleThreaded() + { + MapGen map; + boolean doingSlow = false; + if (currentMap != null) + { + map = currentMap; + } + else if (slowMap != null) + { + map = slowMap; + doingSlow = true; + } + else + { + return; + } + + // If single threade, allow GC background mapping around 9% of the + // server tick time if server running at full speed + // (on a slow server, it will be proportionately lower %) + long end = System.nanoTime() + 4500000L; + while (System.nanoTime() < end) + { + if (map.BiomeMapOneTick()) + { + // Finished + map.writeOutputFile(true); + if (doingSlow) + { + slowMap = null; + } + else + { + currentMap = null; + if (queuedMaps.size() > 0) + { + currentMap = queuedMaps.removeFirst(); + } + } + if (currentMap == null && slowMap == null) + { + calculatingMap.set(false); + } + return; + } + } + } + + public static boolean backgroundMapping(Thread currentThread) + { + return currentThread == threadSlowMap || currentThread == threadCurrentMap; + } + + /** + * Converts a 48px high image to a 12px high image with a palette chosen + * only from the colours in the paletteImage + * + * @param overworldImage Output image already created as a blank image, + * dimensions biomeMapSizeX x biomeMapSizeY + * @param paletteImage Palette image, dimensions must be a square with + * sides biomeMapSizeZ / 4 + */ + public static BufferedImage convertTo12pxTexture(BufferedImage overworldImage, BufferedImage paletteImage) + { + BufferedImage result = new BufferedImage(overworldImage.getWidth(), overworldImage.getHeight(), BufferedImage.TYPE_INT_RGB); + TreeMap mapColPos = new TreeMap<>(); + TreeMap mapColPosB = new TreeMap<>(); + int count = 0; + for (int x = 0; x < overworldImage.getWidth(); x += 4) + { + for (int z = 0; z < overworldImage.getHeight(); z += 4) + { + //int r = 0; + int g = 0; + int b = 0; + for (int xx = 0; xx < 4; xx++) + { + for (int zz = 0; zz < 4; zz++) + { + int col = overworldImage.getRGB(xx + x, zz + z); + //r += (col >> 16); + g += (col >> 8) & 255; + b += col & 255; + } + } + while (mapColPos.containsKey(g - b)) + { + g++; + } + mapColPos.put(g - b, count); + if (x < overworldImage.getHeight()) + { + int col = paletteImage.getRGB(x + 1, z + 1); + //r = (col >> 16); + g = (col >> 8) & 255; + b = col & 255; + while (mapColPosB.containsKey(g - b)) + { + g++; + } + mapColPosB.put(g - b, col); + } + count++; + } + } + + count = 0; + int newCol = 0; + Iterator it = mapColPosB.keySet().iterator(); + Iterator itt = mapColPos.keySet().iterator(); + int modulus = overworldImage.getHeight() / 4; + int mod2 = overworldImage.getWidth() / overworldImage.getHeight(); + for (int x = 0; x < overworldImage.getWidth() / 4; x++) + { + for (int z = 0; z < modulus; z++) + { + if (count % mod2 == 0) + { + newCol = mapColPosB.get(it.next()); + } + int position = mapColPos.get(itt.next()); + int xx = position / modulus; + int zz = position % modulus; + for (int xxx = 0; xxx < 4; xxx++) + { + for (int zzz = 0; zzz < 4; zzz++) + { + result.setRGB(xx * 4 + xxx, zz * 4 + zzz, newCol); + } + } + count++; + } + } + + return result; + } + + // Unused + public static BufferedImage readImage(Object source) throws IOException + { + ImageInputStream stream = ImageIO.createImageInputStream(source); + ImageReader reader = ImageIO.getImageReaders(stream).next(); + reader.setInput(stream); + ImageReadParam param = reader.getDefaultReadParam(); + + ImageTypeSpecifier typeToUse = null; + for (Iterator i = reader.getImageTypes(0); i.hasNext();) + { + ImageTypeSpecifier type = (ImageTypeSpecifier) i.next(); + if (type.getColorModel().getColorSpace().isCS_sRGB()) + { + typeToUse = type; + } + } + if (typeToUse != null) + { + param.setDestinationType(typeToUse); + } + + BufferedImage b = reader.read(0, param); + reader.dispose(); + stream.close(); + return b; + } + + @SideOnly(Side.CLIENT) + public static void writeImgToFile(BufferedImage img, String name) + { + if (GalacticraftCore.enableJPEG) + { + File folder = new File(FMLClientHandler.instance().getClient().gameDir, "assets/galacticraftMaps"); + + try + { + ImageOutputStream outputStreamA = new FileImageOutputStream(new File(folder, name)); + GalacticraftCore.jpgWriter.setOutput(outputStreamA); + GalacticraftCore.jpgWriter.write(null, new IIOImage(img, null, null), GalacticraftCore.writeParam); + outputStreamA.close(); + } + catch (Exception e) + {} + } + } + + public static byte[] zipCompress(byte[] data) + { + Deflater deflater = new Deflater(); + deflater.setLevel(Deflater.BEST_SPEED); + deflater.setInput(data); + deflater.finish(); + ByteArrayOutputStream compressed = new ByteArrayOutputStream(data.length * 2 / 3); + byte[] miniBuffer = new byte[4096]; + while (!deflater.finished()) + { + int count = deflater.deflate(miniBuffer); + compressed.write(miniBuffer, 0, count); + } + return compressed.toByteArray(); + } + + private static byte[] zipDeCompress(byte[] data) throws DataFormatException + { + Inflater inflater = new Inflater(); + inflater.setInput(data); + ByteArrayOutputStream deCompressed = new ByteArrayOutputStream(data.length * 2); + byte[] miniBuffer = new byte[4096]; + while (!inflater.finished()) + { + int count = inflater.inflate(miniBuffer); + deCompressed.write(miniBuffer, 0, count); + } + return deCompressed.toByteArray(); + } + + @SideOnly(Side.CLIENT) + public static void receiveOverworldImageCompressed(int cx, int cz, byte[] raw) throws IOException + { + if (cx == LARGEMAP_MARKER) + { + // Received large map part A + if (overworldImageBytesPart == null) + { + overworldImageBytesPart = raw; + return; + } + else + { + byte[] overWorldImageComplete = Arrays.copyOf(raw, cz); + int offsetPartB = cz / 2; + for (int i = offsetPartB; i < cz; i++) + overWorldImageComplete[i] = overworldImageBytesPart[i - offsetPartB]; + overworldImageBytesPart = null; + raw = overWorldImageComplete; + } + } + else if (cx == LARGEMAP_MARKER + 1) + { + // Received large map part B + if (overworldImageBytesPart == null) + { + overworldImageBytesPart = raw; + return; + } + else + { + byte[] overWorldImageComplete = Arrays.copyOf(overworldImageBytesPart, cz); + int offsetPartB = cz / 2; + for (int i = offsetPartB; i < cz; i++) + overWorldImageComplete[i] = raw[i - offsetPartB]; + overworldImageBytesPart = null; + raw = overWorldImageComplete; + } + } + + try + { + getOverworldImageFromRaw(cx, cz, zipDeCompress(raw)); + } + catch (DataFormatException e) + { + GalacticraftCore.logger.debug(e.toString()); + GalacticraftCore.logger.debug("Client received a corrupted map image data packet from server " + cx + "_" + cz); + } + } + + @SideOnly(Side.CLIENT) + public static void getOverworldImageFromRaw(int cx, int cz, byte[] raw) throws IOException + { + File folder = MapUtil.getClientMapsFolder(); + + if (raw.length == OVERWORLD_LARGEMAP_WIDTH * OVERWORLD_LARGEMAP_HEIGHT * 2) + { + if (folder != null) + { + File file0 = new File(folder, "overworldRaw.bin"); + + if (!file0.exists() || (file0.canRead() && file0.canWrite())) + { + FileUtils.writeByteArrayToFile(file0, raw); + } + else + { + System.err.println("Cannot write to file %minecraft%/assets/galacticraftMaps/overworldRaw.bin"); + } + } + else + { + System.err.println("No folder for file %minecraft%/assets/galacticraftMaps/overworldRaw.bin"); + } + + // raw is a WIDTH_WORLD x HEIGHT_WORLD array of 2 byte entries: + // biome type followed by height + // Here we will make a texture from that, but twice as large: 4 + // pixels for each data point, it just looks better that way when + // the texture is used + BufferedImage worldImageLarge = new BufferedImage(OVERWORLD_LARGEMAP_WIDTH * 2, OVERWORLD_LARGEMAP_HEIGHT * 2, BufferedImage.TYPE_INT_RGB); + + for (int x = 0; x < OVERWORLD_LARGEMAP_WIDTH; x++) + { + for (int z = 0; z < OVERWORLD_LARGEMAP_HEIGHT; z++) + { + int arrayIndex = (x * OVERWORLD_LARGEMAP_HEIGHT + z) * 2; + int biome = ((int) raw[arrayIndex]) & 255; + int height = ((int) raw[arrayIndex + 1]) & 255; + + if (height < OCEAN_HEIGHT && biome != 2 && biome != 10) + { + // Includes ponds, lakes and rivers in other biomes + biome = 0; + } + if (height < DEEP_OCEAN && biome == 0) + { + biome = 24; + } + + worldImageLarge.setRGB(x * 2, z * 2, convertBiomeColour(biome, height)); + worldImageLarge.setRGB(x * 2, z * 2 + 1, convertBiomeColour(biome, height)); + worldImageLarge.setRGB(x * 2 + 1, z * 2, convertBiomeColour(biome, height)); + worldImageLarge.setRGB(x * 2 + 1, z * 2 + 1, convertBiomeColour(biome, height)); + } + } + + // Write it to a .jpg file on client for beta preview + if (GalacticraftCore.enableJPEG && folder != null) + { + ImageOutputStream outputStream = new FileImageOutputStream(new File(folder, "large.jpg")); + GalacticraftCore.jpgWriter.setOutput(outputStream); + GalacticraftCore.jpgWriter.write(null, new IIOImage(worldImageLarge, null, null), GalacticraftCore.writeParam); + outputStream.close(); + } + } + // This is the dimensions of the Overworld texture map + else if (raw.length == OVERWORLD_TEXTURE_WIDTH * OVERWORLD_TEXTURE_HEIGHT * 2) + { + // raw is a WIDTH_STD x HEIGHT_STD array of 2 byte entries: biome + // type followed by height + BufferedImage worldImage = new BufferedImage(OVERWORLD_TEXTURE_WIDTH, OVERWORLD_TEXTURE_HEIGHT, BufferedImage.TYPE_INT_RGB); + + for (int x = 0; x < OVERWORLD_TEXTURE_WIDTH; x++) + { + for (int z = 0; z < OVERWORLD_TEXTURE_HEIGHT; z++) + { + int arrayIndex = (x * OVERWORLD_TEXTURE_HEIGHT + z) * 2; + int biome = ((int) raw[arrayIndex]) & 255; + int height = ((int) raw[arrayIndex + 1]) & 255; + + if (height < OCEAN_HEIGHT && biome != 2 && biome != 10) + { + // Includes ponds, lakes and rivers in other biomes + biome = 0; + } + if (height < DEEP_OCEAN && biome == 0) + { + biome = 24; + } + + worldImage.setRGB(x, z, convertBiomeColour(biome, height)); + } + } + + IResourceManager rm = Minecraft.getMinecraft().getResourceManager(); + BufferedImage paletteImage = null; + try + { + InputStream in = rm.getResource(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png")).getInputStream(); + paletteImage = ImageIO.read(in); + in.close(); + paletteImage.getHeight(); + } + catch (Exception e) + { + e.printStackTrace(); + return; + } + + BufferedImage result = convertTo12pxTexture(worldImage, paletteImage); + + if (result != null) + { + if (ClientProxyCore.overworldTextureWide == null) + { + ClientProxyCore.overworldTextureWide = new DynamicTextureProper(OVERWORLD_TEXTURE_WIDTH, OVERWORLD_TEXTURE_HEIGHT); + } + if (ClientProxyCore.overworldTextureClient == null) + { + ClientProxyCore.overworldTextureClient = new DynamicTextureProper(OVERWORLD_TEXTURE_HEIGHT, OVERWORLD_TEXTURE_HEIGHT); + } + ClientProxyCore.overworldTextureWide.update(result); + ClientProxyCore.overworldTextureClient.update(result); + ClientProxyCore.overworldTexturesValid = true; + } + } + else if (folder != null) + { + File file0 = makeFileName(folder, cx, cz); + + if (!file0.exists() || (file0.canRead() && file0.canWrite())) + { + FileUtils.writeByteArrayToFile(file0, raw); + } + } + else + { + System.err.println("No folder %minecraft%/assets/galacticraftMaps for local map file."); + } + } + + @SideOnly(Side.CLIENT) + public static boolean getMap(int[] image, World world, BlockPos pos) + { + int xCoord = pos.getX(); + int zCoord = pos.getZ(); + int cx = convertMap(xCoord); + int cz = convertMap(zCoord); + + File baseFolder = new File(FMLClientHandler.instance().getClient().gameDir, "assets/galacticraftMaps"); + if (!baseFolder.exists() && !baseFolder.mkdirs()) + { + GalacticraftCore.logger.error("Base folder(s) could not be created: " + baseFolder.getAbsolutePath()); + return false; + } + + int dim = GCCoreUtil.getDimensionID(world); + boolean result = true; + if (makeRGBimage(image, baseFolder, cx - SIZE_STD2, cz - SIZE_STD2, 0, 0, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx - SIZE_STD2, cz, 0, SIZE_STD, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx - SIZE_STD2, cz + SIZE_STD2, 0, SIZE_STD2, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx, cz - SIZE_STD2, SIZE_STD, 0, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx, cz, SIZE_STD, SIZE_STD, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx, cz + SIZE_STD2, SIZE_STD, SIZE_STD2, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx + SIZE_STD2, cz - SIZE_STD2, SIZE_STD2, 0, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx + SIZE_STD2, cz, SIZE_STD2, SIZE_STD, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx + SIZE_STD2, cz + SIZE_STD2, SIZE_STD2, SIZE_STD2, xCoord, zCoord, dim, result)) + { + result = false; + } + return result; + } + + @SideOnly(Side.CLIENT) + private static boolean makeRGBimage(int[] array, File baseFolder, int cx, int cz, int offsetX, int offsetZ, int xCoord, int zCoord, int dim, boolean prevResult) + { + File filename = makeFileName(baseFolder, cx, cz); + if (!filename.exists()) + { + if (clientRequests.contains(filename.getName())) + { + // GalacticraftCore.logger.debug("Info: Server not yet ready to send map file " + + // baseFolder.getName() + "/" + filename.getName()); + } + else + { + clientRequests.add(filename.getName()); + // GalacticraftCore.logger.debug("Info: Client requested map file" + + // filename.getName()); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_MAP_IMAGE, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {dim, cx, cz})); + } + return true; + } + + if (!prevResult) + { + return true; + } + + int ox = (convertMap(xCoord) - xCoord - SIZE_STD) / 2; + int oz = (convertMap(zCoord) - zCoord - SIZE_STD) / 2; + + byte[] raw = null; + try + { + raw = FileUtils.readFileToByteArray(filename); + } + catch (IOException e) + { + GalacticraftCore.logger.error("Problem reading map file: " + baseFolder.getAbsolutePath() + filename.getName()); + return true; + } + if (raw == null || raw.length != SIZE_STD * SIZE_STD * 2) + { + GalacticraftCore.logger.debug("Warning: unexpected map size is " + raw.length + " for file " + filename.toString()); + return true; + } + + int xstart = Math.max(0, -offsetX - ox); + int zstart = Math.max(0, -offsetZ - oz); + for (int x = xstart; x < SIZE_STD; x++) + { + int imagex = x + offsetX + ox; + if (imagex >= SIZE_STD2) + { + break; + } + for (int z = zstart; z < SIZE_STD; z++) + { + int imageZ = z + oz + offsetZ;// + SIZE_STD - 1 - z; + if (imageZ >= SIZE_STD2) + { + break; + } + + int arrayIndex = (x * SIZE_STD + z) * 2; + int biome = ((int) raw[arrayIndex]) & 255; + int height = ((int) raw[arrayIndex + 1]) & 255; + + if (height < OCEAN_HEIGHT && biome != 2 && biome != 10) + { + // Includes ponds, lakes and rivers in other biomes + biome = 0; + } + if (height < DEEP_OCEAN && biome == 0) + { + biome = 24; + } + + if (imagex < 0 || imageZ < 0) + { + GalacticraftCore.logger.debug("Outside image " + imagex + "," + imageZ + " - " + "x=" + x + " z=" + z + " offsetX=" + offsetX + " offsetZ = " + offsetZ + " ox=" + ox + " oz=" + oz); + } + else + { + array[imagex + SIZE_STD2 * imageZ] = convertBiomeColour(biome, height) + 0xff000000; + } + } + } + return false; + } + + private static File makeFileName(File folder, int cx, int cz) + { + return new File(folder, "overworld" + cx / SIZE_STD2 + "_" + cz / SIZE_STD2 + ".bin"); + } + + private static int getBiomeBaseColour(int biomeId) + { + Biome biomegenbase = Biome.REGISTRY.getObjectById(biomeId); + return biomegenbase == null ? Biomes.OCEAN.getWaterColor() : biomegenbase.getWaterColor(); + } + + public static int convertBiomeColour(int in, int height) + { + int rv; + int s = MapUtil.biomeColours.size(); + if (in >= 128 && in < 128 + s) + { + in -= 128; + } + if (in >= s) + { + rv = getBiomeBaseColour(in); + } + else + { + BlockVec3 bv = MapUtil.biomeColours.get(in); + if (bv == null) + { + rv = getBiomeBaseColour(in); + } + else + { + if (bv.z > 0 && MapUtil.rand.nextInt(100) < bv.z) + { + rv = bv.y; + } + else + { + rv = bv.x; + } + } + } + if (rv == 0x9c2424 && MapUtil.rand.nextInt(2) == 0) + { + rv = 0xbfa384; + } + if (height < OCEAN_HEIGHT) + { + return rv; + } + if (height > 92 && (in == 3 || in == 20 || in == 31 || in == 33 || in == 34)) + { + if (MapUtil.rand.nextInt(8) > 98 - height) + { + rv = Material.SNOW.getMaterialMapColor().colorValue; + } + } + float factor = (height - 68F) / 94F; + return ColorUtil.lighten(rv, factor); + } + + private static void setupColours() + { + // ocean = Ocean(0) colour(112) "Ocean" + MapUtil.biomeColours.add(new BlockVec3(Material.WATER.getMaterialMapColor().colorValue, 0, 0)); + // plains = Plains(1) colour(9286496) "Plains" + MapUtil.biomeColours.add(new BlockVec3(0x497436, 0, 0)); + // desert = Desert(2) colour(16421912) "Desert" + MapUtil.biomeColours.add(new BlockVec3(0xd4cd98, Material.CACTUS.getMaterialMapColor().colorValue, 3)); + // extremeHills = Hills(3, false) colour(6316128) "Extreme Hills" + MapUtil.biomeColours.add(new BlockVec3(0x4d654c, Material.ROCK.getMaterialMapColor().colorValue, 15)); + // forest = Forest(4, 0) colour(353825) "Forest" + MapUtil.biomeColours.add(new BlockVec3(0x3c7521, 0x295416, 45)); + // taiga = Taiga(5, 0) colour(747097) "Taiga" + MapUtil.biomeColours.add(new BlockVec3(0x627e61, 0x172a17, 18)); + // swampland = Swamp(6) colour(522674) "Swampland" + MapUtil.biomeColours.add(new BlockVec3(0x43541b, 0x111309, 25)); + // river = River(7) colour(255) "River" + MapUtil.biomeColours.add(new BlockVec3(0x497436, 0, 0)); + MapUtil.biomeColours.add(new BlockVec3(0, 0, 0)); + MapUtil.biomeColours.add(new BlockVec3(0, 0, 0)); + // frozenOcean = Ocean(10) colour(9474208) "FrozenOcean" + MapUtil.biomeColours.add(new BlockVec3(Material.ICE.getMaterialMapColor().colorValue, 0, 0)); + // frozenRiver = River(11) colour(10526975) "FrozenRiver" + MapUtil.biomeColours.add(new BlockVec3(Material.ICE.getMaterialMapColor().colorValue, 0, 0)); + // icePlains = Snow(12, false) colour(16777215) "Ice Plains" + MapUtil.biomeColours.add(new BlockVec3(Material.SNOW.getMaterialMapColor().colorValue, 0x497436, 3)); + // iceMountains = Snow(13, false) colour(10526880) "Ice Mountains" + MapUtil.biomeColours.add(new BlockVec3(Material.SNOW.getMaterialMapColor().colorValue, Material.ICE.getMaterialMapColor().colorValue, 5)); + // mushroomIsland = MushroomIsland(14) colour(16711935) "MushroomIsland" + MapUtil.biomeColours.add(new BlockVec3(0x63565f, 0x7c1414, 10)); + // mushroomIslandShore = MushroomIsland(15) colour(10486015) + // "MushroomIslandShore" + MapUtil.biomeColours.add(new BlockVec3(0x6a6066, 0, 0)); + // beach = Beach(16) colour(16440917) "Beach" + MapUtil.biomeColours.add(new BlockVec3(Material.SAND.getMaterialMapColor().colorValue, 0, 0)); + // desertHills = Desert(17) colour(13786898) "DesertHills" + MapUtil.biomeColours.add(new BlockVec3(0xd4cd98, 0, 0)); + // forestHills = Forest(18, 0) colour(2250012) "ForestHills" + MapUtil.biomeColours.add(new BlockVec3(0x3c7521, 0x295416, 35)); + // taigaHills = Taiga(19, 0) colour(1456435) "TaigaHills" + MapUtil.biomeColours.add(new BlockVec3(0x627e61, 0x172a17, 14)); + // extremeHillsEdge = Hills(20, true) colour(7501978) "Extreme Hills + // Edge" + MapUtil.biomeColours.add(new BlockVec3(0x4d654c, 0x497436, 50)); + // jungle = Jungle(21, false) colour(5470985) "Jungle" + MapUtil.biomeColours.add(new BlockVec3(0x176c03, 0x0f4502, 25)); + // jungleHills = Jungle(22, false) colour(2900485) "JungleHills" + MapUtil.biomeColours.add(new BlockVec3(0x176c03, 0x0f4502, 25)); + // jungleEdge = Jungle(23, true) colour(6458135) "JungleEdge" + MapUtil.biomeColours.add(new BlockVec3(0x176c03, 0x0f4502, 25)); + // deepOcean = Ocean(24) colour(48) "Deep Ocean" + MapUtil.biomeColours.add(new BlockVec3(0x2f2fd4, 0, 0)); + // stoneBeach = StoneBeach(25) colour(10658436) "Stone Beach" + MapUtil.biomeColours.add(new BlockVec3(Material.ROCK.getMaterialMapColor().colorValue, 0, 0)); + // coldBeach = Beach(26) colour(16445632) "Cold Beach" + MapUtil.biomeColours.add(new BlockVec3(Material.SAND.getMaterialMapColor().colorValue, Material.SNOW.getMaterialMapColor().colorValue, 75)); + // birchForest = Forest(27, 2)) colour(3175492) "Birch Forest" + MapUtil.biomeColours.add(new BlockVec3(0x516b36, 0x497436, 65)); + // birchForestHills = Forest(28, 2)) colour(2055986) "Birch Forest + // Hills" + MapUtil.biomeColours.add(new BlockVec3(0x516b36, 0x497436, 55)); + // roofedForest = Forest(29, 3) colour(4215066) "Roofed Forest" + MapUtil.biomeColours.add(new BlockVec3(0x9c2424, 0x1e2e18, 98)); + // coldTaiga = Taiga(30, 0) colour(3233098) "Cold Taiga" + MapUtil.biomeColours.add(new BlockVec3(Material.SNOW.getMaterialMapColor().colorValue, 0x172a17, 12)); + // coldTaigaHills = Taiga(31, 0) colour(2375478) "Cold Taiga Hills" + MapUtil.biomeColours.add(new BlockVec3(Material.SNOW.getMaterialMapColor().colorValue, 0x172a17, 12)); + // megaTaiga = Taiga(32, 1) colour(5858897) "Mega Taiga" + MapUtil.biomeColours.add(new BlockVec3(0x172a17, 0x6e4e35, 12)); + // megaTaigaHills = Taiga(33, 1) colour(4542270) "Mega Taiga Hills" + MapUtil.biomeColours.add(new BlockVec3(0x172a17, 0x6e4e35, 12)); + // extremeHillsPlus = Hills(34, true) colour(5271632) "Extreme Hills+" + MapUtil.biomeColours.add(new BlockVec3(0x7b7978, 0x497436, 10)); + // savanna = Savanna(35) colour(12431967) "Savanna" + MapUtil.biomeColours.add(new BlockVec3(0x565529, 0x262304, 20)); + // savannaPlateau = Savanna(36) colour(10984804) "Savanna Plateau" + MapUtil.biomeColours.add(new BlockVec3(0x565529, 0x262304, 14)); + // mesa = Mesa(37, false, false) colour(14238997) "Mesa" + MapUtil.biomeColours.add(new BlockVec3(0xa0521f, 0x712f23, 14)); + // mesaPlateau_F = Mesa(38, false, true) colour(11573093) "Mesa Plateau + // F" + MapUtil.biomeColours.add(new BlockVec3(0xa0521f, 0x712f23, 17)); + // mesaPlateau = Mesa(39, false, false) colour(13274213) "Mesa Plateau" + MapUtil.biomeColours.add(new BlockVec3(0xa0521f, 0x712f23, 20)); + } + + public static void makeVanillaMap(int dim, int chunkXPos, int chunkZPos, File baseFolder, BufferedImage image) + { + World world = WorldUtil.getWorldForDimensionServer(dim); + for (int x0 = -12; x0 <= 12; x0++) + { + for (int z0 = -12; z0 <= 12; z0++) + { + Chunk chunk = world.getChunk(chunkXPos + x0, chunkZPos + z0); + + if (chunk != null) + { + for (int z = 0; z < 16; z++) + { + for (int x = 0; x < 16; x++) + { + int l4 = chunk.getHeightValue(x, z) + 1; + IBlockState state = Blocks.AIR.getDefaultState(); + BlockPos pos = null; + + if (l4 > 1) + { + do + { + --l4; + pos = new BlockPos(x, l4, z); + state = chunk.getBlockState(pos); + } while (state.getMapColor(world, pos) == MapColor.AIR && l4 > 0); + } + + int col = pos != null ? state.getMapColor(world, pos).colorValue : 0; + image.setRGB(x + (x0 + 12) * 16, z + (z0 + 12) * 16, col); + } + } + } + } + } + + try + { + File outputFile = new File(baseFolder, dim + "_" + chunkXPos + "_" + chunkZPos + ".jpg"); + + if (!outputFile.exists() || (outputFile.canWrite() && outputFile.canRead())) + { + ImageIO.write(image, "jpg", outputFile); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + @SideOnly(Side.CLIENT) + public static File getClientMapsFolder() + { + File folder = new File(FMLClientHandler.instance().getClient().gameDir, "assets/galacticraftMaps"); + try + { + if (folder.exists() || folder.mkdirs()) + { + return folder; + } + else + { + System.err.println("Cannot create directory %minecraft%/assets/galacticraftMaps! : " + folder.toString()); + } + } + catch (Exception e) + { + System.err.println(folder.toString()); + e.printStackTrace(); + } + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/OxygenUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/OxygenUtil.java new file mode 100644 index 00000000..a7a68e12 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/OxygenUtil.java @@ -0,0 +1,559 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.HashSet; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockEnchantmentTable; +import net.minecraft.block.BlockFarmland; +import net.minecraft.block.BlockGlass; +import net.minecraft.block.BlockGravel; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.BlockSponge; +import net.minecraft.block.BlockStainedGlass; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.inventory.GuiInventory; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; + +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.item.IBreathableArmor; +import micdoodle8.mods.galacticraft.api.item.IBreathableArmor.EnumGearType; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenGear; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenMask; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.util.BlockUtil.MultiBlockStateHolder; + +public class OxygenUtil +{ + + private static HashSet checked; + + @SideOnly(Side.CLIENT) + public static boolean shouldDisplayTankGui(GuiScreen gui) + { + if (FMLClientHandler.instance().getClient().gameSettings.hideGUI) + { + return false; + } + + if (gui == null) + { + return true; + } + + if (gui instanceof GuiInventory) + { + return false; + } + + return gui instanceof GuiChat; + + } + + public static boolean isAABBInBreathableAirBlock(EntityLivingBase entity) + { + return isAABBInBreathableAirBlock(entity, false); + } + + public static boolean isAABBInBreathableAirBlock(EntityLivingBase entity, boolean testThermal) + { + double y = entity.posY + entity.getEyeHeight(); + double x = entity.posX; + double z = entity.posZ; + + double sx = entity.getEntityBoundingBox().maxX - entity.getEntityBoundingBox().minX; + double sy = entity.getEntityBoundingBox().maxY - entity.getEntityBoundingBox().minY; + double sz = entity.getEntityBoundingBox().maxZ - entity.getEntityBoundingBox().minZ; + + // A good first estimate of head size is that it's the smallest of the + // entity's 3 dimensions (e.g. front to back, for Steve) + double smin = Math.min(sx, Math.min(sy, sz)) / 2; + double offsetXZ = 0.0; + + // If entity is within air lock wall, check adjacent blocks for oxygen + // The value is equal to the max distance from an adjacent oxygen block + // to the edge of a sealer wall + if (entity.world.getBlockState(entity.getPosition()).getBlock() == GCBlocks.airLockSeal) + { + offsetXZ = 0.75F; + } + + return OxygenUtil.isAABBInBreathableAirBlock(entity.world, new AxisAlignedBB(x - smin - offsetXZ, y - smin, z - smin - offsetXZ, x + smin + offsetXZ, y + smin, z + smin + offsetXZ), + testThermal); + } + + public static boolean isAABBInBreathableAirBlock(World world, AxisAlignedBB bb) + { + return isAABBInBreathableAirBlock(world, bb, false); + } + + public static boolean isAABBInBreathableAirBlock(World world, AxisAlignedBB bb, boolean testThermal) + { + final double avgX = (bb.minX + bb.maxX) / 2.0D; + final double avgY = (bb.minY + bb.maxY) / 2.0D; + final double avgZ = (bb.minZ + bb.maxZ) / 2.0D; + + if (testThermal) + { + return OxygenUtil.isInOxygenAndThermalBlock(world, bb); + } + + if (OxygenUtil.inOxygenBubble(world, avgX, avgY, avgZ)) + { + return true; + } + + return OxygenUtil.isInOxygenBlock(world, bb); + } + + public static boolean isInOxygenBlock(World world, AxisAlignedBB bb) + { + int xm = MathHelper.floor(bb.minX + 0.001D); + int xx = MathHelper.floor(bb.maxX - 0.001D); + int ym = MathHelper.floor(bb.minY + 0.001D); + int yy = MathHelper.floor(bb.maxY - 0.001D); + int zm = MathHelper.floor(bb.minZ + 0.001D); + int zz = MathHelper.floor(bb.maxZ - 0.001D); + + OxygenUtil.checked = new HashSet<>(); + if (world.isAreaLoaded(new BlockPos(xm, ym, zm), new BlockPos(xx, yy, zz))) + { + for (int x = xm; x <= xx; ++x) + { + for (int z = zm; z <= zz; ++z) + { + for (int y = ym; y <= yy; ++y) + { + BlockPos pos = new BlockPos(x, y, z); + Block block = world.getBlockState(pos).getBlock(); + if (OxygenUtil.testContactWithBreathableAir(world, block, pos, 0) >= 0) + { + return true; + } + } + } + } + } + + return false; + } + + public static boolean isInOxygenAndThermalBlock(World world, AxisAlignedBB bb) + { + int i = MathHelper.floor(bb.minX + 0.001D); + int j = MathHelper.floor(bb.maxX - 0.001D); + int k = MathHelper.floor(bb.minY + 0.001D); + int l = MathHelper.floor(bb.maxY - 0.001D); + int i1 = MathHelper.floor(bb.minZ + 0.001D); + int j1 = MathHelper.floor(bb.maxZ - 0.001D); + + OxygenUtil.checked = new HashSet<>(); + if (world.isAreaLoaded(new BlockPos(i, k, i1), new BlockPos(j, l, j1))) + { + for (int x = i; x <= j; ++x) + { + for (int y = k; y <= l; ++y) + { + for (int z = i1; z <= j1; ++z) + { + BlockPos pos = new BlockPos(x, y, z); + Block block = world.getBlockState(pos).getBlock(); + if (OxygenUtil.testContactWithBreathableAir(world, block, pos, 0) == 1) // Thermal + // air + // has + // metadata + // 1 + { + return true; + } + } + } + } + } + + return false; + } + + /* + * A simplified version of the breathable air check which checks all 6 sides + * of the given block (because a torch can pass air on all sides) Used in + * BlockUnlitTorch. + */ + public static boolean checkTorchHasOxygen(World world, BlockPos pos) + { + if (OxygenUtil.inOxygenBubble(world, pos.getX() + 0.5D, pos.getY() + 0.6D, pos.getZ() + 0.5D)) + { + return true; + } + OxygenUtil.checked = new HashSet<>(); + BlockVec3 vec = new BlockVec3(pos); + for (int side = 0; side < 6; side++) + { + BlockVec3 sidevec = vec.newVecSide(side); + IBlockState state = sidevec.getBlockState_noChunkLoad(world); + if (OxygenUtil.testContactWithBreathableAir(world, state.getBlock(), sidevec.toBlockPos(), 1) >= 0) + { + return true; + } + } + return false; + } + + /* + * Test whether the given block at (x,y,z) coordinates is either: - + * breathable air (returns true) - solid, or air which is not breathable + * (returns false) - an air-permeable block, for example a torch, in which + * case test the surrounding air-reachable blocks (up to 5 blocks away) and + * return true if breathable air is found in one of them, or false if not. + */ + private static synchronized int testContactWithBreathableAir(World world, Block block, BlockPos pos, int limitCount) + { + checked.add(pos); + if (block == GCBlocks.breatheableAir || block == GCBlocks.brightBreatheableAir) + { + return block.getMetaFromState(world.getBlockState(pos)); + } + + IBlockState state = world.getBlockState(pos); + if (block == null || block.getMaterial(state) == Material.AIR) + { + return -1; + } + + // Test for non-sided permeable or solid blocks first + boolean permeableFlag = false; + if (!(block instanceof BlockLeaves)) + { + if (block.isOpaqueCube(state)) + { + if (block instanceof BlockGravel || block.getMaterial(state) == Material.CLOTH || block instanceof BlockSponge) + { + permeableFlag = true; + } else + { + return -1; + } + } else if (block instanceof BlockGlass || block instanceof BlockStainedGlass) + { + return -1; + } else if (block instanceof BlockLiquid) + { + return -1; + } + for (MultiBlockStateHolder mbsh : OxygenPressureProtocol.newNonPermeableBlockStateList) + { + if (mbsh.getBlock().equals(block)) + { + if (mbsh.getBlockstateList().contains(state)) + { + return -1; + } + } + } + } else + { + permeableFlag = true; + } + + // Testing a non-air, permeable block (for example a torch or a ladder) + if (limitCount < 5) + { + for (EnumFacing side : EnumFacing.VALUES) + { + if (permeableFlag || OxygenUtil.canBlockPassAirOnSide(world, block, pos, side)) + { + BlockPos sidevec = pos.add(side.getXOffset(), side.getYOffset(), side.getZOffset()); + if (!checked.contains(sidevec)) + { + Block newblock = world.getBlockState(sidevec).getBlock(); + int adjResult = OxygenUtil.testContactWithBreathableAir(world, newblock, sidevec, limitCount + 1); + if (adjResult >= 0) + { + return adjResult; + } + } + } + } + } + + return -1; + } + // TODO - performance, could add a 'safe' version of this code (inside world + // borders) + + // TODO - add more performance increase, these sided checks could be done + // once only + private static boolean canBlockPassAirOnSide(World world, Block block, BlockPos vec, EnumFacing side) + { + if (block instanceof IPartialSealableBlock) + { + return !((IPartialSealableBlock) block).isSealed(world, vec, side); + } + + // Half slab seals on the top side or the bottom side according to its + // metadata + if (block instanceof BlockSlab) + { + IBlockState state = world.getBlockState(vec); + int meta = state.getBlock().getMetaFromState(state); + return (((side != EnumFacing.DOWN) || ((meta & 8) != 8)) && ((side != EnumFacing.UP) || ((meta & 8) != 0))); + } + + // Farmland etc only seals on the solid underside + if (block instanceof BlockFarmland || block instanceof BlockEnchantmentTable || block instanceof BlockLiquid) + { + return side != EnumFacing.UP; + } + + if (block instanceof BlockPistonBase) + { + IBlockState state = world.getBlockState(vec); + if (state.getValue(BlockPistonBase.EXTENDED)) + { + int meta0 = state.getBlock().getMetaFromState(state); + EnumFacing facing = BlockPistonBase.getFacing(meta0); + return side != facing; + } + return false; + } + + return !block.isSideSolid(world.getBlockState(vec), world, vec, EnumFacing.byIndex(side.getIndex() ^ 1)); + } + + public static int getDrainSpacing(ItemStack tank, ItemStack tank2) + { + boolean tank1Valid = !tank.isEmpty() && tank.getItem() instanceof ItemOxygenTank && tank.getMaxDamage() - tank.getItemDamage() > 0; + boolean tank2Valid = !tank2.isEmpty() && tank2.getItem() instanceof ItemOxygenTank && tank2.getMaxDamage() - tank2.getItemDamage() > 0; + + if (!tank1Valid && !tank2Valid) + { + return 0; + } + + return 9; + } + + public static boolean hasValidOxygenSetup(EntityPlayerMP player) + { + boolean missingComponent = false; + + GCPlayerStats stats = GCPlayerStats.get(player); + + if (!OxygenUtil.isItemValidForPlayerTankInv(0, stats.getExtendedInventory().getStackInSlot(0))) + { + boolean handled = false; + + for (final ItemStack armorStack : player.inventory.armorInventory) + { + if (!armorStack.isEmpty() && armorStack.getItem() instanceof IBreathableArmor) + { + final IBreathableArmor breathableArmor = (IBreathableArmor) armorStack.getItem(); + + if (breathableArmor.handleGearType(EnumGearType.HELMET)) + { + if (breathableArmor.canBreathe(armorStack, player, EnumGearType.HELMET)) + { + handled = true; + } + } + } + } + + if (!handled) + { + missingComponent = true; + } + } + + if (!OxygenUtil.isItemValidForPlayerTankInv(1, stats.getExtendedInventory().getStackInSlot(1))) + { + boolean handled = false; + + for (final ItemStack armorStack : player.inventory.armorInventory) + { + if (!armorStack.isEmpty() && armorStack.getItem() instanceof IBreathableArmor) + { + final IBreathableArmor breathableArmor = (IBreathableArmor) armorStack.getItem(); + + if (breathableArmor.handleGearType(EnumGearType.GEAR)) + { + if (breathableArmor.canBreathe(armorStack, player, EnumGearType.GEAR)) + { + handled = true; + } + } + } + } + + if (!handled) + { + missingComponent = true; + } + } + + if (!OxygenUtil.isItemValidForPlayerTankInv(2, stats.getExtendedInventory().getStackInSlot(2)) && !OxygenUtil.isItemValidForPlayerTankInv(3, stats.getExtendedInventory().getStackInSlot(3))) + { + boolean handled = false; + + for (final ItemStack armorStack : player.inventory.armorInventory) + { + if (!armorStack.isEmpty() && armorStack.getItem() instanceof IBreathableArmor) + { + final IBreathableArmor breathableArmor = (IBreathableArmor) armorStack.getItem(); + + if (breathableArmor.handleGearType(EnumGearType.TANK1)) + { + if (breathableArmor.canBreathe(armorStack, player, EnumGearType.TANK1)) + { + handled = true; + } + } + + if (breathableArmor.handleGearType(EnumGearType.TANK2)) + { + if (breathableArmor.canBreathe(armorStack, player, EnumGearType.TANK2)) + { + handled = true; + } + } + } + } + + if (!handled) + { + missingComponent = true; + } + } + + return !missingComponent; + } + + public static boolean isItemValidForPlayerTankInv(int slotIndex, ItemStack stack) + { + switch (slotIndex) + { + case 0: + return stack.getItem() instanceof ItemOxygenMask; + case 1: + return stack.getItem() instanceof ItemOxygenGear; + case 2: + case 3: + return stack.getItem() instanceof ItemOxygenTank || stack.getItem() instanceof ItemCanisterOxygenInfinite; + } + + return false; + } + + public static TileEntity[] getAdjacentFluidConnections(TileEntity tile) + { + return getAdjacentFluidConnections(tile, false); + } + + public static TileEntity[] getAdjacentFluidConnections(TileEntity tile, boolean ignoreConnect) + { + TileEntity[] adjacentConnections = new TileEntity[EnumFacing.VALUES.length]; + + if (tile == null) + { + return adjacentConnections; + } + + boolean isMekLoaded = EnergyConfigHandler.isMekanismLoaded(); + + BlockVec3 thisVec = new BlockVec3(tile); + for (EnumFacing direction : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(tile.getWorld(), direction); + + boolean connectable = false; + if (tileEntity instanceof IConnector) + { + connectable = ignoreConnect || ((IConnector) tileEntity).canConnect(direction.getOpposite(), NetworkType.FLUID); + } else if (tileEntity != null) + { + connectable = tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction.getOpposite()) != null; + } + + if (connectable) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + } + + return adjacentConnections; + } + + public static boolean noAtmosphericCombustion(World world) + { + return noAtmosphericCombustion(world.provider); + } + + public static boolean noAtmosphericCombustion(WorldProvider provider) + { + if (provider instanceof IGalacticraftWorldProvider) + { + return (!((IGalacticraftWorldProvider) provider).isGasPresent(EnumAtmosphericGas.OXYGEN) && !((IGalacticraftWorldProvider) provider).hasBreathableAtmosphere()); + } + + return false; + } + + public static boolean inOxygenBubble(World worldObj, double avgX, double avgY, double avgZ) + { + int dimID = GCCoreUtil.getDimensionID(worldObj); + for (final BlockVec3Dim blockVec : TileEntityOxygenDistributor.loadedTiles) + { + if (blockVec != null && blockVec.dim == dimID) + { + TileEntity tile = blockVec.getTileEntity(); + if (tile instanceof TileEntityOxygenDistributor) + { + if (((TileEntityOxygenDistributor) tile).inBubble(avgX, avgY, avgZ)) + { + return true; + } + } + } + } + + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PlayerUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PlayerUtil.java new file mode 100644 index 00000000..af0f4f2c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PlayerUtil.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; + +import com.mojang.authlib.GameProfile; + +public class PlayerUtil +{ + + public static HashMap knownSkins = new HashMap<>(); + + public static EntityPlayerMP getPlayerForUsernameVanilla(MinecraftServer server, String username) + { + return server.getPlayerList().getPlayerByUsername(username); + } + + public static EntityPlayerMP getPlayerBaseServerFromPlayerUsername(String username, boolean ignoreCase) + { + MinecraftServer server = GCCoreUtil.getServer(); + return getPlayerBaseServerFromPlayerUsername(server, username, ignoreCase); + } + + public static EntityPlayerMP getPlayerBaseServerFromPlayerUsername(MinecraftServer server, String username, boolean ignoreCase) + { + if (server != null) + { + if (ignoreCase) + { + return getPlayerForUsernameVanilla(server, username); + } else + { + Iterator iterator = server.getPlayerList().getPlayers().iterator(); + EntityPlayerMP entityplayermp; + + do + { + if (!iterator.hasNext()) + { + return null; + } + + entityplayermp = (EntityPlayerMP) iterator.next(); + } while (!entityplayermp.getName().equalsIgnoreCase(username)); + + return entityplayermp; + } + } + + GalacticraftCore.logger.error("Warning: Could not find player base server instance for player " + username); + + return null; + } + + public static EntityPlayerMP getPlayerBaseServerFromPlayer(EntityPlayer player, boolean ignoreCase) + { + if (player == null) + { + return null; + } + + if (player instanceof EntityPlayerMP) + { + return (EntityPlayerMP) player; + } + + return PlayerUtil.getPlayerBaseServerFromPlayerUsername(player.getName(), ignoreCase); + } + + @SideOnly(Side.CLIENT) + public static EntityPlayerSP getPlayerBaseClientFromPlayer(EntityPlayer player, boolean ignoreCase) + { + EntityPlayerSP clientPlayer = FMLClientHandler.instance().getClientPlayerEntity(); + + if (clientPlayer == null && player != null) + { + GalacticraftCore.logger.error("Warning: Could not find player base client instance for player " + PlayerUtil.getName(player)); + } + + return clientPlayer; + } + + @SideOnly(Side.CLIENT) + public static GameProfile getOtherPlayerProfile(String name) + { + return knownSkins.get(name); + } + + @SideOnly(Side.CLIENT) + public static GameProfile makeOtherPlayerProfile(String strName, String strUUID) + { + GameProfile profile = null; + for (Object e : FMLClientHandler.instance().getWorldClient().getLoadedEntityList()) + { + if (e instanceof AbstractClientPlayer) + { + GameProfile gp2 = ((AbstractClientPlayer) e).getGameProfile(); + if (gp2.getName().equals(strName)) + { + profile = gp2; + break; + } + } + } + if (profile == null) + { + UUID uuid = strUUID.isEmpty() ? UUID.randomUUID() : UUID.fromString(strUUID); + profile = new GameProfile(uuid, strName); + } + + PlayerUtil.knownSkins.put(strName, profile); + return profile; + } + + @SideOnly(Side.CLIENT) + public static GameProfile getSkinForName(String strName, String strUUID, int dimID) + { + GameProfile profile = FMLClientHandler.instance().getClientPlayerEntity().getGameProfile(); + if (!strName.equals(profile.getName())) + { + profile = PlayerUtil.getOtherPlayerProfile(strName); + if (profile == null) + { + profile = PlayerUtil.makeOtherPlayerProfile(strName, strUUID); + } + if (!profile.getProperties().containsKey("textures")) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REQUEST_PLAYERSKIN, dimID, new Object[] + {strName})); + } + } + return profile; + } + + public static EntityPlayerMP getPlayerByUUID(UUID theUUID) + { + List players = PlayerUtil.getPlayersOnline(); + EntityPlayerMP entityplayermp; + for (int i = players.size() - 1; i >= 0; --i) + { + entityplayermp = (EntityPlayerMP) players.get(i); + + if (entityplayermp.getUniqueID().equals(theUUID)) + { + return entityplayermp; + } + } + return null; + } + + public static List getPlayersOnline() + { + return GCCoreUtil.getServer().getPlayerList().getPlayers(); + } + + public static boolean isPlayerOnline(EntityPlayerMP player) + { + return player.server.getPlayerList().getPlayers().contains(player); + } + + public static String getName(EntityPlayer player) + { + if (player == null) + return null; + + if (player.getGameProfile() == null) + return null; + + return player.getGameProfile().getName(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PropertyObject.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PropertyObject.java new file mode 100644 index 00000000..519c7001 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PropertyObject.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Objects; + +import net.minecraftforge.common.property.IUnlistedProperty; + +/** + * This class was originally created by as + * part of the Botania mod API. Original source: + * https://raw.githubusercontent.com/williewillus/Botania/MC18/src/main/java/vazkii/botania/api/state/PropertyObject.java + *

+ * Use in Galacticraft is permitted under the Botania License: + * http://botaniamod.net/license.php + */ + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; + +public class PropertyObject implements IUnlistedProperty +{ + + private final String name; + private final Class clazz; + private final Predicate validator; + private final Function stringFunction; + + public PropertyObject(String name, Class clazz, Predicate validator, Function stringFunction) + { + this.name = name; + this.clazz = clazz; + this.validator = validator; + this.stringFunction = stringFunction; + } + + public PropertyObject(String name, Class clazz) + { + this(name, clazz, Predicates.alwaysTrue(), new Function() + { + + @Override + public String apply(T input) + { + return Objects.toString(input); + } + }); + } + + @Override + public String getName() + { + return name; + } + + @Override + public boolean isValid(T value) + { + return validator.apply(value); + } + + @Override + public Class getType() + { + return clazz; + } + + @Override + public String valueToString(T value) + { + return stringFunction.apply(value); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RecipeUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RecipeUtil.java new file mode 100644 index 00000000..ba7fb1f0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RecipeUtil.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.HashMap; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.registries.GameData; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.inventory.InventoryBuggyBench; +import micdoodle8.mods.galacticraft.core.inventory.InventoryRocketBench; +import micdoodle8.mods.galacticraft.core.recipe.NasaWorkbenchRecipe; + +import ic2.api.item.IC2Items; + +public class RecipeUtil +{ + + @Nonnull + public static ItemStack findMatchingBuggy(InventoryBuggyBench benchStacks) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getBuggyBenchRecipes()) + { + if (recipe.matches(benchStacks)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + @Nonnull + public static ItemStack findMatchingSpaceshipRecipe(InventoryRocketBench inventoryRocketBench) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT1Recipes()) + { + if (recipe.matches(inventoryRocketBench)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + public static void addRecipe(ItemStack result, Object[] obj) + { + CraftingHelper.ShapedPrimer pattern = CraftingHelper.parseShaped(obj); + addCustomRecipe(new ShapedRecipes(result.getItem().getRegistryName().toString(), pattern.width, pattern.height, pattern.input, result)); + } + + public static void addCustomRecipe(IRecipe rec) + { + String modID = Loader.instance().activeModContainer().getModId(); + ResourceLocation newLocation = new ResourceLocation(modID, rec.getRecipeOutput().getItem().getRegistryName().getPath()); + if (CraftingManager.REGISTRY.containsKey(newLocation)) + { + int count = 1; + String newNameBase = newLocation.getPath() + "_"; + while (CraftingManager.REGISTRY.containsKey(newLocation)) + { + newLocation = new ResourceLocation(modID, newNameBase + count++); + } + } + rec.setRegistryName(newLocation); + + GameData.register_impl(rec); + } + + public static void addRocketBenchRecipe(ItemStack result, HashMap input) + { + GalacticraftRegistry.addT1RocketRecipe(new NasaWorkbenchRecipe(result, input)); + } + + public static void addBuggyBenchRecipe(ItemStack result, HashMap input) + { + GalacticraftRegistry.addMoonBuggyRecipe(new NasaWorkbenchRecipe(result, input)); + } + + public static ItemStack getIndustrialCraftItem(String indentifier, String variant) + { + return IC2Items.getItem(indentifier, variant); + } + + /** + * An extended version of areItemStackTagsEqual which ignores LevelUp's + * "NoPlacing" tag on mined blocks + */ + public static boolean areItemStackTagsEqual(ItemStack stackA, ItemStack stackB) + { + if (ItemStack.areItemStackTagsEqual(stackA, stackB)) + return true; + + NBTTagCompound query = null; + if (stackA.getTagCompound() == null && stackB.getTagCompound() != null) + { + query = stackB.getTagCompound(); + } else if (stackA.getTagCompound() != null && stackB.getTagCompound() == null) + { + query = stackA.getTagCompound(); + } + if (query != null) + { + if (query.getKeySet().size() == 1 && query.hasKey("NoPlacing")) + return true; + } + + return false; + } + + /** + * + * @param itemstack - it is assumed this one is not null in calling code + * @param itemstack1 + * @return + */ + public static boolean stacksMatch(ItemStack itemstack, ItemStack itemstack1) + { + return !itemstack1.isEmpty() && itemstack1.getItem() == itemstack.getItem() && (!itemstack.getHasSubtypes() || itemstack.getItemDamage() == itemstack1.getItemDamage()) + && RecipeUtil.areItemStackTagsEqual(itemstack, itemstack1); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RedstoneUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RedstoneUtil.java new file mode 100644 index 00000000..cceb8bf1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RedstoneUtil.java @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class RedstoneUtil +{ + + /** + * Returns true if the block is being directly powered with a redstone wire, + * lever, etc (generally only used by actual redstone components for onward + * transmission of redstone signal) + */ + public static boolean isBlockReceivingDirectRedstone(World w, BlockPos pos) + { + if (w == null) + { + return false; + } + + // Check up/down without chunk load test first + if (getStrongPower(w, pos.down(), EnumFacing.DOWN) > 0) + { + return true; + } + if (getStrongPower(w, pos.up(), EnumFacing.UP) > 0) + { + return true; + } + + for (EnumFacing facing : EnumFacing.HORIZONTALS) + { + if (getStrongPower_NoChunkLoad(w, pos.offset(facing, 1), facing) > 0) + { + return true; + } + } + + return false; + } + + /** + * Is this block powering in the specified direction Args: x, y, z, + * direction + */ + public static int getStrongPower(World w, BlockPos pos, EnumFacing side) + { + IBlockState bs = w.getBlockState(pos); + return bs.getBlock().getStrongPower(bs, w, pos, side); + } + + public static int getStrongPower_NoChunkLoad(World w, BlockPos pos, EnumFacing side) + { + if (!w.isBlockLoaded(pos, false)) + { + return 0; + } + IBlockState bs = w.getBlockState(pos); + return bs.getBlock().getStrongPower(bs, w, pos, side); + } + + /** + * Returns true if the block is being INDIRECTLY powered e.g by redstone + * passing through another block (similar to how a vanilla piston or + * redstone lamp responds) + * + * INEFFICIENT: (almost as bad as Vanilla!) examines redstone status of 30 + * nearby blocks if there is no redstone power + * + * Note: if the calling block is itself a redstone emitter (!!) its redstone + * output to neighbours will be ignored + */ + public static boolean isBlockReceivingRedstone(World w, BlockPos pos) + { + if (w == null) + { + return false; + } + + // Check up/down without chunk load test first + if (getRedstonePowerIndirect(w, pos.up(1), EnumFacing.UP) > 0) + { + return true; + } + if (getRedstonePowerIndirect(w, pos.down(1), EnumFacing.DOWN) > 0) + { + return true; + } + + for (EnumFacing facing : EnumFacing.HORIZONTALS) + { + if (getRedstonePowerIndirect_NoChunkLoad(w, pos.offset(facing, 1), facing) > 0) + { + return true; + } + } + return false; + } + + public static int getRedstonePowerIndirect_NoChunkLoad(World w, BlockPos pos, EnumFacing side) + { + if (!w.isBlockLoaded(pos, false)) + { + return 0; + } + return getRedstonePowerIndirect(w, pos, side); + } + + public static int getRedstonePowerIndirect(World w, BlockPos pos, EnumFacing facing) + { + IBlockState bs = w.getBlockState(pos); + Block block = bs.getBlock(); + if (block instanceof BlockAir) + { + return 0; + } + return block.shouldCheckWeakPower(bs, w, pos, facing) ? getNeighbourPower_NoChunkLoad(w, pos, facing.getOpposite()) : bs.getWeakPower(w, pos, facing); + } + + /** + * Similar to the vanilla method getStrongPower(BlockPos pos) but more + * efficient - doesn't backtrack, so 15% faster (also the low level code + * here is faster...) + */ + public static int getNeighbourPower_NoChunkLoad(World w, BlockPos pos, EnumFacing skip) + { + int i = 0; + int p; + IBlockState bs; + BlockPos sidePos; + + if (skip != EnumFacing.DOWN) + { + sidePos = pos.add(0, -1, 0); + bs = w.getBlockState(sidePos); + i = bs.getBlock().getStrongPower(bs, w, sidePos, EnumFacing.DOWN); + if (i >= 15) + { + return i; + } + } + + if (skip != EnumFacing.UP) + { + sidePos = pos.add(0, 1, 0); + bs = w.getBlockState(sidePos); + p = bs.getBlock().getStrongPower(bs, w, sidePos, EnumFacing.UP); + if (p >= 15) + { + return p; + } + if (p > i) + i = p; + } + + for (EnumFacing side : EnumFacing.HORIZONTALS) + { + if (side == skip) + { + continue; + } + // This is a slightly faster pos.offset(side) + sidePos = pos.add(side.getXOffset(), 0, side.getZOffset()); + if (!w.isBlockLoaded(sidePos, false)) + { + continue; + } + + bs = w.getBlockState(sidePos); + p = bs.getBlock().getStrongPower(bs, w, sidePos, side); + if (p >= 15) + { + return p; + } + if (p > i) + i = p; + } + + return i; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/StackSorted.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/StackSorted.java new file mode 100644 index 00000000..09d26117 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/StackSorted.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; + +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +public class StackSorted +{ + + private final Item item; + private final int meta; + + public StackSorted(Block block, int meta) + { + this(Item.getItemFromBlock(block), meta); + } + + public StackSorted(Item item, int meta) + { + this.item = item; + this.meta = meta; + } + + public Item getItem() + { + return item; + } + + public int getMeta() + { + return meta; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof StackSorted)) + { + return false; + } + if (obj == this) + { + return true; + } + + StackSorted other = (StackSorted) obj; + return new EqualsBuilder().append(item, other.item).append(meta, other.meta).isEquals(); + } + + @Override + public int hashCode() + { + return new HashCodeBuilder().append(item).append(meta).toHashCode(); + } + + @Override + public String toString() + { + return "Item:(" + item + "),Meta:(" + meta + ")"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/WorldUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/WorldUtil.java new file mode 100644 index 00000000..8666bd81 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/WorldUtil.java @@ -0,0 +1,1675 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.io.File; +import java.io.FileInputStream; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; +import java.util.TreeMap; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketEntityEffect; +import net.minecraft.network.play.server.SPacketPlayerAbilities; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.network.play.server.SPacketSetExperience; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.WorldType; + +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.server.permission.PermissionAPI; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IAntiGrav; +import micdoodle8.mods.galacticraft.api.entity.IWorldTransferCallback; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Moon; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.api.world.SpaceStationType; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; + +import com.google.common.collect.Lists; +import com.google.common.collect.MapMaker; +import com.google.common.collect.Maps; + +import it.unimi.dsi.fastutil.ints.Int2ReferenceMap; +import org.apache.commons.lang3.ArrayUtils; + +/** + * This class will be removed and all methods + * moved to a dedicated utility class. At this time all planned utility classes + * will be internal and non-accessible. + *

+ * Certain methods commonly used will be moved into the API package for use by addon developers. + * When more information is available each method will be annotated accordingly with {@link ReplaceWith} + *

+ * + */ +@ForRemoval(deadline = "4.1.0") +public class WorldUtil +{ + + /** + * Dimension IDs and providers (providers are -26 or -27 by default) + */ + public static HashMap registeredSpaceStations; + + /** + * Dimension IDs and provider names + */ + public static Map dimNames = new TreeMap<>(); + public static Map> celestialMapCache = new MapMaker().weakKeys().makeMap(); + public static List registeredPlanets; + + public static float getGravityFactor(Entity entity) + { + if (entity.world.provider instanceof IGalacticraftWorldProvider) + { + final IGalacticraftWorldProvider customProvider = (IGalacticraftWorldProvider) entity.world.provider; + float returnValue = MathHelper.sqrt(0.08F / (0.08F - customProvider.getGravity())); + if (returnValue > 2.5F) + { + returnValue = 2.5F; + } + if (returnValue < 0.75F) + { + returnValue = 0.75F; + } + return returnValue; + } + if (entity instanceof IAntiGrav) + { + } + return 1F; + } + + public static Vector3 getWorldColor(World world) + { + return new Vector3(1, 1, 1); + } + + public static WorldProvider getProviderForNameServer(String par1String) + { + String nameToFind = par1String; + if (par1String.contains("$")) + { + final String[] twoDimensions = par1String.split("\\$"); + nameToFind = twoDimensions[0]; + } + if (nameToFind == null) + { + return null; + } + + for (Map.Entry element : WorldUtil.dimNames.entrySet()) + { + if (nameToFind.equalsIgnoreCase(element.getValue())) + { + return WorldUtil.getProviderForDimensionServer(element.getKey()); + } + } + + GalacticraftCore.logger.info("Failed to find matching world for '" + par1String + "'"); + return null; + } + + @SideOnly(Side.CLIENT) + public static WorldProvider getProviderForNameClient(String par1String) + { + String nameToFind = par1String; + if (par1String.contains("$")) + { + final String[] twoDimensions = par1String.split("\\$"); + nameToFind = twoDimensions[0]; + } + if (nameToFind == null) + { + return null; + } + + for (Map.Entry element : WorldUtil.dimNames.entrySet()) + { + if (nameToFind.equalsIgnoreCase(element.getValue())) + { + return WorldUtil.getProviderForDimensionClient(element.getKey()); + } + } + + GalacticraftCore.logger.info("Failed to find matching world for '" + par1String + "'"); + return null; + } + + public static void initialiseDimensionNames() + { + WorldProvider provider = WorldUtil.getProviderForDimensionServer(ConfigManagerCore.idDimensionOverworld); + WorldUtil.dimNames.put(ConfigManagerCore.idDimensionOverworld, provider.getDimensionType().getName()); + } + + /** + * This will *load* all the GC dimensions which the player has access to + * (taking account of space station permissions). Loading the dimensions + * through Forge activates any chunk loaders or forced chunks in that + * dimension, if the dimension was not previously loaded. This may place + * load on the server. + * + * @param tier - the rocket tier to test + * @param playerBase - the player who will be riding the rocket (needed for + * space station permissions) + * @return a List of integers which are the dimension IDs + */ + public static List getPossibleDimensionsForSpaceshipTier(int tier, EntityPlayerMP playerBase) + { + List temp = new ArrayList<>(); + + if (!ConfigManagerCore.disableRocketsToOverworld) + { + temp.add(ConfigManagerCore.idDimensionOverworld); + } + + for (Integer element : WorldUtil.registeredPlanets) + { + if (element == ConfigManagerCore.idDimensionOverworld) + { + continue; + } + WorldProvider provider = WorldUtil.getProviderForDimensionServer(element); + + if (provider != null) + { + if (provider instanceof IGalacticraftWorldProvider) + { + if (((IGalacticraftWorldProvider) provider).canSpaceshipTierPass(tier)) + { + temp.add(element); + } + } else + { + temp.add(element); + } + } + } + + for (Integer element : WorldUtil.registeredSpaceStations.keySet()) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, element, null); + + if (!ConfigManagerCore.spaceStationsRequirePermission || data.getAllowedAll() || data.getAllowedPlayers().contains(PlayerUtil.getName(playerBase)) + || ArrayUtils.contains(playerBase.server.getPlayerList().getOppedPlayerNames(), playerBase.getName())) + { + // Satellites always reachable from their own homeworld or from + // its other satellites + if (playerBase != null) + { + int currentWorld = playerBase.dimension; + // Player is on homeworld + if (currentWorld == data.getHomePlanet()) + { + temp.add(element); + continue; + } + if (playerBase.world.provider instanceof IOrbitDimension) + { + // Player is currently on another space station around + // the same planet + final SpaceStationWorldData dataCurrent = SpaceStationWorldData.getStationData(playerBase.world, playerBase.dimension, null); + if (dataCurrent.getHomePlanet() == data.getHomePlanet()) + { + temp.add(element); + continue; + } + } + } + + // Testing dimension is a satellite, but with a different + // homeworld - test its tier + WorldProvider homeWorld = WorldUtil.getProviderForDimensionServer(data.getHomePlanet()); + + if (homeWorld != null) + { + if (homeWorld instanceof IGalacticraftWorldProvider) + { + if (((IGalacticraftWorldProvider) homeWorld).canSpaceshipTierPass(tier)) + { + temp.add(element); + } + } else + { + temp.add(element); + } + } + } + } + + return temp; + } + + public static CelestialBody getReachableCelestialBodiesForDimensionID(int id) + { + List celestialBodyList = Lists.newArrayList(); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredMoons().values()); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredPlanets().values()); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredSatellites().values()); + + for (CelestialBody cBody : celestialBodyList) + { + if (cBody.isReachable()) + { + if (cBody.getDimensionID() == id) + { + return cBody; + } + } + } + + return null; + } + + public static CelestialBody getReachableCelestialBodiesForName(String name) + { + List celestialBodyList = Lists.newArrayList(); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredMoons().values()); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredPlanets().values()); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredSatellites().values()); + + for (CelestialBody cBody : celestialBodyList) + { + if (cBody.isReachable()) + { + if (cBody.getName().equals(name)) + { + return cBody; + } + } + } + + return null; + } + + /** + * CAUTION: this loads the dimension if it is not already loaded. This can + * cause server load if used too frequently or with a list of multiple + * dimensions. + * + * @param id + * @return + */ + public static World getWorldForDimensionServer(int id) + { + MinecraftServer theServer = GCCoreUtil.getServer(); + if (theServer == null) + { + GalacticraftCore.logger.debug("Called WorldUtil server side method but FML returned no server - is this a bug?"); + return null; + } + return theServer.getWorld(id); + } + + /** + * CAUTION: this loads the dimension if it is not already loaded. This can + * cause server load if used too frequently or with a list of multiple + * dimensions. + * + * @param id + * @return + */ + public static WorldProvider getProviderForDimensionServer(int id) + { + World ws = getWorldForDimensionServer(id); + if (ws != null) + { + return ws.provider; + } + return null; + } + + @SideOnly(Side.CLIENT) + public static WorldProvider getProviderForDimensionClient(int id) + { + World ws = ClientProxyCore.mc.world; + if (ws != null && GCCoreUtil.getDimensionID(ws) == id) + { + return ws.provider; + } + return DimensionManager.createProviderFor(id); + } + + /** + * This will *load* all the GC dimensions which the player has access to + * (taking account of space station permissions). Loading the dimensions + * through Forge activates any chunk loaders or forced chunks in that + * dimension, if the dimension was not previously loaded. This may place + * load on the server. + * + * @param tier - the rocket tier to test + * @param playerBase - the player who will be riding the rocket (needed for + * checking space station permissions) + * @return a Map of the names of the dimension vs. the dimension IDs + */ + public static HashMap getArrayOfPossibleDimensions(int tier, EntityPlayerMP playerBase) + { + List ids = WorldUtil.getPossibleDimensionsForSpaceshipTier(tier, playerBase); + final HashMap map = new HashMap<>(ids.size(), 1F); + + for (Integer id : ids) + { + CelestialBody celestialBody = getReachableCelestialBodiesForDimensionID(id); + + // It's a space station + if (id > 0 && celestialBody == null) + { + celestialBody = GalacticraftCore.satelliteSpaceStation; + // This no longer checks whether a WorldProvider can be created, + // for performance reasons (that causes the dimension to load + // unnecessarily at map building stage) + if (playerBase != null) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, id, null); + map.put(celestialBody.getName() + "$" + data.getOwner() + "$" + data.getSpaceStationName() + "$" + id + "$" + data.getHomePlanet(), id); + } + } else if (celestialBody == GalacticraftCore.planetOverworld) + { + map.put(celestialBody.getName(), id); + } else + { + WorldProvider provider = WorldUtil.getProviderForDimensionServer(id); + if (celestialBody != null && provider != null) + { + if (provider instanceof IGalacticraftWorldProvider && !(provider instanceof IOrbitDimension) || GCCoreUtil.getDimensionID(provider) == 0) + { + map.put(celestialBody.getName(), GCCoreUtil.getDimensionID(provider)); + } + } + } + } + + ArrayList cBodyList = new ArrayList<>(); + cBodyList.addAll(GalaxyRegistry.getRegisteredPlanets().values()); + cBodyList.addAll(GalaxyRegistry.getRegisteredMoons().values()); + + for (CelestialBody body : cBodyList) + { + if (!body.isReachable()) + { + map.put(body.getTranslatedName() + "*", body.getDimensionID()); + } + } + + WorldUtil.celestialMapCache.put(playerBase, map); + return map; + } + + /** + * Get the cached version of getArrayOfPossibleDimensions() to reduce server + * load + unwanted dimension loading The cache will be updated every time + * the 'proper' version of getArrayOfPossibleDimensions is called. + * + * @param tier - the rocket tier to test + * @param playerBase - the player who will be riding the rocket (needed for + * checking space station permissions) + * @return a Map of the names of the dimension vs. the dimension IDs + */ + public static HashMap getArrayOfPossibleDimensionsAgain(int tier, EntityPlayerMP playerBase) + { + HashMap map = WorldUtil.celestialMapCache.get(playerBase); + if (map != null) + { + return map; + } + return getArrayOfPossibleDimensions(tier, playerBase); + } + + public static void unregisterSpaceStations() + { + if (WorldUtil.registeredSpaceStations != null) + { + for (Integer registeredID : WorldUtil.registeredSpaceStations.keySet()) + { + DimensionManager.unregisterDimension(registeredID); + } + + WorldUtil.registeredSpaceStations = null; + } + } + + public static void registerSpaceStations(MinecraftServer theServer, File spaceStationList) + { + // WorldUtil.registeredSpaceStations = WorldUtil.getExistingSpaceStationList(spaceStationList); + WorldUtil.registeredSpaceStations = Maps.newHashMap(); + if (theServer == null || !spaceStationList.exists() && !spaceStationList.isDirectory()) + { + return; + } + + final File[] var2 = spaceStationList.listFiles(); + + if (var2 != null) + { + for (File var5 : var2) + { + if (var5.getName().startsWith("spacestation_") && var5.getName().endsWith(".dat")) + { + try + { + // Note: this is kind of a hacky way of doing this, + // loading the NBT from each space station file + // during dimension registration, to find out what each + // space station's provider IDs are. + + String name = var5.getName(); + SpaceStationWorldData worldDataTemp = new SpaceStationWorldData(name); + name = name.substring(13, name.length() - 4); + int registeredID = Integer.parseInt(name); + + FileInputStream fileinputstream = new FileInputStream(var5); + NBTTagCompound nbttagcompound = CompressedStreamTools.readCompressed(fileinputstream); + fileinputstream.close(); + worldDataTemp.readFromNBT(nbttagcompound.getCompoundTag("data")); + + // Search for id in server-defined statically loaded + // dimensions + int index = Arrays.binarySearch(ConfigManagerCore.staticLoadDimensions, registeredID); + + int providerID = index >= 0 ? worldDataTemp.getDimensionIdStatic() : worldDataTemp.getDimensionIdDynamic(); + boolean registrationOK = false; + if (!DimensionManager.isDimensionRegistered(registeredID)) + { + DimensionManager.registerDimension(registeredID, WorldUtil.getDimensionTypeById(providerID)); + registrationOK = true; + } else if (GalacticraftRegistry.isDimensionTypeIDRegistered(providerID)) + { + registrationOK = DimensionManager.getProviderType(registeredID).getId() == providerID; + if (!registrationOK) + { + try + { + Class sponge = Class.forName("org.spongepowered.common.world.WorldManager"); + Field dtDI = sponge.getDeclaredField("dimensionTypeByDimensionId"); + dtDI.setAccessible(true); + Int2ReferenceMap result = (Int2ReferenceMap) dtDI.get(null); + if (result != null) + { + result.put(registeredID, WorldUtil.getDimensionTypeById(providerID)); + GalacticraftCore.logger.info("Re-registered dimension type " + providerID); + } + registrationOK = true; + } catch (ClassNotFoundException ignore) + { + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + if (registrationOK) + { + WorldUtil.registeredSpaceStations.put(registeredID, providerID); + if (index >= 0) + { + theServer.getWorld(registeredID); + } + WorldUtil.dimNames.put(registeredID, "Space Station " + registeredID); + } else + { + GalacticraftCore.logger.error("Dimension already registered to another mod: unable to register space station dimension " + registeredID); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + + // for (Integer registeredID : WorldUtil.registeredSpaceStations) + // { + // int id = Arrays.binarySearch(ConfigManagerCore.staticLoadDimensions, registeredID); + // + // if (!DimensionManager.isDimensionRegistered(registeredID)) + // { + // if (id >= 0) + // { + // DimensionManager.registerDimension(registeredID, ConfigManagerCore.idDimensionOverworldOrbitStatic); + // theServer.getWorld(registeredID); + // } + // else + // { + // DimensionManager.registerDimension(registeredID, ConfigManagerCore.idDimensionOverworldOrbit); + // } + // } + // else + // { + // GCLog.severe("Dimension already registered to another mod: unable to register space station dimension " + registeredID); + // } + // } + } + + /** + * Call this on FMLServerStartingEvent to register a planet which has a + * dimension ID. Now returns a boolean to indicate whether registration was + * successful.

NOTE: Planets and Moons dimensions should normally be + * initialised at server init If you do not do this, you must find your own + * way to register the dimension in DimensionManager and you must find your + * own way to include the cached provider name in WorldUtil.dimNames

+ * IMPORTANT: GalacticraftRegistry.registerDimension() must always be called + * in parallel with this meaning the CelestialBodies are iterated in the + * same order when registered there and here. + * + * The defaultID should be 0, and the id should be both a dimension ID and a + * DimensionType id. + */ + public static boolean registerPlanet(int id, boolean initialiseDimensionAtServerInit, int defaultID) + { + if (WorldUtil.registeredPlanets == null) + { + WorldUtil.registeredPlanets = new ArrayList<>(); + } + + if (initialiseDimensionAtServerInit) + { + if (!DimensionManager.isDimensionRegistered(id)) + { + DimensionManager.registerDimension(id, WorldUtil.getDimensionTypeById(id)); + GalacticraftCore.logger.info("Registered Dimension: " + id); + WorldUtil.registeredPlanets.add(id); + } else if (DimensionManager.getProviderType(id).getId() == id && GalacticraftRegistry.isDimensionTypeIDRegistered(id)) + { + GalacticraftCore.logger.info("Re-registered dimension: " + id); + WorldUtil.registeredPlanets.add(id); + } else + { + GalacticraftCore.logger.error("Dimension already registered: unable to register planet dimension " + id); + // Add 0 to the list to preserve the correct order of the + // other planets (e.g. if server/client initialise with + // different dimension IDs in configs, the order becomes + // important for figuring out what is going on) + WorldUtil.registeredPlanets.add(defaultID); + return false; + } + DimensionType dt = WorldUtil.getDimensionTypeById(id); + WorldProvider wp = dt.createDimension(); + WorldUtil.dimNames.put(id, WorldUtil.getDimensionName(wp)); + return true; + } + + // Not to be initialised - still add to the registered planets list (for + // hotloading later?) + WorldUtil.registeredPlanets.add(id); + return true; + } + + public static void unregisterPlanets() + { + if (WorldUtil.registeredPlanets != null) + { + for (Integer var1 : WorldUtil.registeredPlanets) + { + DimensionManager.unregisterDimension(var1); + GalacticraftCore.logger.info("Unregistered Dimension: " + var1); + } + + WorldUtil.registeredPlanets = null; + } + WorldUtil.dimNames.clear(); + } + + public static void registerPlanetClient(Integer dimID, int providerIndex) + { + int typeID = GalacticraftRegistry.getDimensionTypeID(providerIndex); + + if (typeID == 0) + { + GalacticraftCore.logger.error("Server dimension " + dimID + " has no match on client due to earlier registration problem."); + } else if (dimID == 0) + { + GalacticraftCore.logger.error("Client dimension " + providerIndex + " has no match on server - probably a server dimension ID conflict problem."); + } else if (!WorldUtil.registeredPlanets.contains(dimID)) + { + WorldUtil.registeredPlanets.add(dimID); + DimensionManager.registerDimension(dimID, WorldUtil.getDimensionTypeById(typeID)); + } else + { + GalacticraftCore.logger.error("Dimension already registered to another mod: unable to register planet dimension " + dimID); + } + } + + public static SpaceStationWorldData bindSpaceStationToNewDimension(World world, EntityPlayerMP player, int homePlanetID) + { + int dynamicProviderID = -1; + int staticProviderID = -1; + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + if (satellite.getParentPlanet().getDimensionID() == homePlanetID) + { + dynamicProviderID = satellite.getDimensionID(); + staticProviderID = satellite.getDimensionIdStatic(); + } + } + if (dynamicProviderID == -1 || staticProviderID == -1) + { + throw new RuntimeException("Space station being bound on bad provider IDs!"); + } + int newID = DimensionManager.getNextFreeDimId(); + SpaceStationWorldData data = WorldUtil.createSpaceStation(world, newID, homePlanetID, dynamicProviderID, staticProviderID, player); + dimNames.put(newID, "Space Station " + newID); + GCPlayerStats stats = GCPlayerStats.get(player); + stats.getSpaceStationDimensionData().put(homePlanetID, newID); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_CLIENT_ID, GCCoreUtil.getDimensionID(player.world), new Object[] + {WorldUtil.spaceStationDataToString(stats.getSpaceStationDimensionData())}), player); + return data; + } + + public static SpaceStationWorldData createSpaceStation(World world, int dimID, int homePlanetID, int dynamicProviderID, int staticProviderID, EntityPlayerMP player) + { + if (!DimensionManager.isDimensionRegistered(dimID)) + { + if (ConfigManagerCore.keepLoadedNewSpaceStations) + { + ConfigManagerCore.setLoaded(dimID); + } + + int id = Arrays.binarySearch(ConfigManagerCore.staticLoadDimensions, dimID); + + if (id >= 0) + { + DimensionManager.registerDimension(dimID, WorldUtil.getDimensionTypeById(staticProviderID)); + WorldUtil.registeredSpaceStations.put(dimID, staticProviderID); + } else + { + DimensionManager.registerDimension(dimID, WorldUtil.getDimensionTypeById(dynamicProviderID)); + WorldUtil.registeredSpaceStations.put(dimID, dynamicProviderID); + } + } else + { + GalacticraftCore.logger.error("Dimension already registered to another mod: unable to register space station dimension " + dimID); + } + + for (WorldServer server : world.getMinecraftServer().worlds) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_LIST, GCCoreUtil.getDimensionID(server), WorldUtil.getSpaceStationList()), + GCCoreUtil.getDimensionID(server)); + } + return SpaceStationWorldData.getStationData(world, dimID, homePlanetID, dynamicProviderID, staticProviderID, player); + } + + public static Entity transferEntityToDimension(Entity entity, int dimensionID, WorldServer world) + { + return WorldUtil.transferEntityToDimension(entity, dimensionID, world, true, null); + } + + /** + * It is not necessary to use entity.setDead() following calling this + * method. If the entity left the old world it was in, it will now + * automatically be removed from that old world before the next update tick. + * (See WorldUtil.removeEntityFromWorld()) + */ + public static Entity transferEntityToDimension(Entity entity, int dimensionID, WorldServer world, boolean transferInv, EntityAutoRocket ridingRocket) + { + if (!world.isRemote) + { + MinecraftServer mcServer = world.getMinecraftServer(); + + if (mcServer != null) + { + final WorldServer var6 = mcServer.getWorld(dimensionID); + + if (var6 == null) + { + GalacticraftCore.logger.error("Cannot Transfer Entity to Dimension: Could not get World for Dimension " + dimensionID); + return null; + } + + final ITeleportType type = GalacticraftRegistry.getTeleportTypeForDimension(var6.provider.getClass()); + + if (type != null) + { + return WorldUtil.teleportEntity(var6, entity, dimensionID, type, transferInv, ridingRocket); + } + } + } + + return null; + } + + private static Entity teleportEntity(World worldNew, Entity entity, int dimID, ITeleportType type, boolean transferInv, EntityAutoRocket ridingRocket) + { + Entity otherRiddenEntity = null; + if (entity.getRidingEntity() != null) + { + if (entity.getRidingEntity() instanceof EntitySpaceshipBase) + { + entity.startRiding(entity.getRidingEntity()); + } else if (entity.getRidingEntity() instanceof EntityCelestialFake) + { + Entity e = entity.getRidingEntity(); + e.removePassengers(); + e.setDead(); + } else + { + otherRiddenEntity = entity.getRidingEntity(); + entity.dismountRidingEntity(); + } + } + + boolean dimChange = entity.world != worldNew; + // Make sure the entity is added to the correct chunk in the OLD world + // so that it will be properly removed later if it needs to be unloaded + // from that world + entity.world.updateEntityWithOptionalForce(entity, false); + EntityPlayerMP player = null; + Vector3 spawnPos = null; + int oldDimID = GCCoreUtil.getDimensionID(entity.world); + + if (ridingRocket != null) + { + NBTTagCompound nbt = new NBTTagCompound(); + ridingRocket.isDead = false; + ridingRocket.removePassengers(); + ridingRocket.writeToNBTOptional(nbt); + + ((WorldServer) ridingRocket.world).getEntityTracker().untrack(ridingRocket); + removeEntityFromWorld(ridingRocket.world, ridingRocket, true); + + ridingRocket = (EntityAutoRocket) EntityList.createEntityFromNBT(nbt, worldNew); + + if (ridingRocket != null) + { + ridingRocket.setWaitForPlayer(true); + + if (ridingRocket instanceof IWorldTransferCallback) + { + ((IWorldTransferCallback) ridingRocket).onWorldTransferred(worldNew); + } + } + } + + if (dimChange) + { + if (entity instanceof EntityPlayerMP) + { + player = (EntityPlayerMP) entity; + World worldOld = player.world; + + GCPlayerStats stats = GCPlayerStats.get(player); + stats.setUsingPlanetSelectionGui(false); + + player.dimension = dimID; + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("DEBUG: Sending respawn packet to player for dim " + dimID); + } + player.connection.sendPacket(new SPacketRespawn(dimID, worldNew.getDifficulty(), worldNew.getWorldInfo().getTerrainType(), player.interactionManager.getGameType())); + player.server.getPlayerList().updatePermissionLevel(player); + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + if (WorldUtil.registeredSpaceStations.containsKey(dimID)) + // TODO This has never been effective before due to the + // earlier bug - what does it actually do? + { + NBTTagCompound var2 = new NBTTagCompound(); + SpaceStationWorldData.getStationData(worldNew, dimID, player).writeToNBT(var2); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_DATA, GCCoreUtil.getDimensionID(player.world), new Object[] + {dimID, var2}), player); + } + } + + removeEntityFromWorld(worldOld, player, true); + + if (ridingRocket != null) + { + spawnPos = new Vector3(ridingRocket); + } else + { + spawnPos = type.getPlayerSpawnLocation((WorldServer) worldNew, player); + } + forceMoveEntityToPos(entity, (WorldServer) worldNew, spawnPos, true); + + GalacticraftCore.logger.info("Server attempting to transfer player " + PlayerUtil.getName(player) + " to dimension " + GCCoreUtil.getDimensionID(worldNew)); + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(worldNew), new Object[] + {}), player); + } + player.capabilities.isFlying = false; + + player.server.getPlayerList().preparePlayer(player, (WorldServer) worldOld); + player.interactionManager.setWorld((WorldServer) worldNew); + player.connection.sendPacket(new SPacketPlayerAbilities(player.capabilities)); + player.server.getPlayerList().updateTimeAndWeatherForPlayer(player, (WorldServer) worldNew); + player.server.getPlayerList().syncPlayerInventory(player); + + for (Object o : player.getActivePotionEffects()) + { + PotionEffect var10 = (PotionEffect) o; + player.connection.sendPacket(new SPacketEntityEffect(player.getEntityId(), var10)); + } + + player.connection.sendPacket(new SPacketSetExperience(player.experience, player.experienceTotal, player.experienceLevel)); + } else + // Non-player entity transfer i.e. it's an EntityCargoRocket or an + // empty rocket + { + ArrayList tList = null; + if (entity instanceof EntitySpaceshipBase) + { + tList = ((EntitySpaceshipBase) entity).getTelemetry(); + } + WorldUtil.removeEntityFromWorld(entity.world, entity, true); + + NBTTagCompound nbt = new NBTTagCompound(); + entity.isDead = false; + entity.writeToNBTOptional(nbt); + entity = EntityList.createEntityFromNBT(nbt, worldNew); + + if (entity == null) + { + return null; + } + + if (entity instanceof IWorldTransferCallback) + { + ((IWorldTransferCallback) entity).onWorldTransferred(worldNew); + } + + forceMoveEntityToPos(entity, (WorldServer) worldNew, new Vector3(entity), true); + + if (tList != null && tList.size() > 0) + { + for (TileEntityTelemetry t : tList) + { + t.addTrackedEntity(entity); + } + } + } + } else // Same dimension player transfer + if (entity instanceof EntityPlayerMP) + { + player = (EntityPlayerMP) entity; + player.closeScreen(); + GCPlayerStats stats = GCPlayerStats.get(player); + stats.setUsingPlanetSelectionGui(false); + + if (ridingRocket != null) + { + spawnPos = new Vector3(ridingRocket); + } else + { + spawnPos = type.getPlayerSpawnLocation((WorldServer) entity.world, (EntityPlayerMP) entity); + } + forceMoveEntityToPos(entity, (WorldServer) worldNew, spawnPos, false); + + GalacticraftCore.logger.info("Server attempting to transfer player " + PlayerUtil.getName(player) + " within same dimension " + GCCoreUtil.getDimensionID(worldNew)); + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(worldNew), new Object[] + {}), player); + } + player.capabilities.isFlying = false; + } + + // Update PlayerStatsGC + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + if (ridingRocket == null && type.useParachute() && stats.getExtendedInventory().getStackInSlot(4) != null + && stats.getExtendedInventory().getStackInSlot(4).getItem() instanceof ItemParaChute) + { + GCPlayerHandler.setUsingParachute(player, stats, true); + } else + { + GCPlayerHandler.setUsingParachute(player, stats, false); + } + + if (stats.getRocketStacks() != null && !stats.getRocketStacks().isEmpty()) + { + for (int stack = 0; stack < stats.getRocketStacks().size(); stack++) + { + if (transferInv) + { + if (stats.getRocketStacks().get(stack).isEmpty()) + { + if (stack == stats.getRocketStacks().size() - 1) + { + if (stats.getRocketItem() != null) + { + stats.getRocketStacks().set(stack, new ItemStack(stats.getRocketItem(), 1, stats.getRocketType())); + } + } else if (stack == stats.getRocketStacks().size() - 2) + { + ItemStack launchpad = stats.getLaunchpadStack(); + stats.getRocketStacks().set(stack, launchpad == null ? ItemStack.EMPTY : launchpad); + stats.setLaunchpadStack(null); + } + } + } else + { + stats.getRocketStacks().set(stack, ItemStack.EMPTY); + } + } + } + + if (transferInv && stats.getChestSpawnCooldown() == 0) + { + stats.setChestSpawnVector(type.getParaChestSpawnLocation((WorldServer) entity.world, player, new Random())); + stats.setChestSpawnCooldown(200); + } + } + + if (ridingRocket != null) + { + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) worldNew); + ridingRocket.forceSpawn = true; + worldNew.spawnEntity(ridingRocket); + ridingRocket.setWorld(worldNew); + worldNew.updateEntityWithOptionalForce(ridingRocket, true); + CompatibilityManager.forceLoadChunksEnd((WorldServer) worldNew, previous); + entity.startRiding(ridingRocket); + GalacticraftCore.logger.debug("Entering rocket at : " + entity.posX + "," + entity.posZ + " rocket at: " + ridingRocket.posX + "," + ridingRocket.posZ); + } else if (otherRiddenEntity != null) + { + if (dimChange) + { + World worldOld = otherRiddenEntity.world; + NBTTagCompound nbt = new NBTTagCompound(); + otherRiddenEntity.writeToNBTOptional(nbt); + removeEntityFromWorld(worldOld, otherRiddenEntity, true); + otherRiddenEntity = EntityList.createEntityFromNBT(nbt, worldNew); + worldNew.spawnEntity(otherRiddenEntity); + otherRiddenEntity.setWorld(worldNew); + } + otherRiddenEntity.setPositionAndRotation(entity.posX, entity.posY - 10, entity.posZ, otherRiddenEntity.rotationYaw, otherRiddenEntity.rotationPitch); + worldNew.updateEntityWithOptionalForce(otherRiddenEntity, true); + } + + if (entity instanceof EntityPlayerMP) + { + if (dimChange) + FMLCommonHandler.instance().firePlayerChangedDimensionEvent((EntityPlayerMP) entity, oldDimID, dimID); + + // Spawn in a lander if appropriate + type.onSpaceDimensionChanged(worldNew, (EntityPlayerMP) entity, ridingRocket != null); + } + + return entity; + } + + public static Entity teleportEntitySimple(World worldNew, int dimID, EntityPlayerMP player, Vector3 spawnPos) + { + if (player.getRidingEntity() != null) + { + player.getRidingEntity().setDead(); + player.dismountRidingEntity(); + } + + World worldOld = player.world; + int oldDimID = GCCoreUtil.getDimensionID(worldOld); + boolean dimChange = worldOld != worldNew; + // Make sure the entity is added to the correct chunk in the OLD world + // so that it will be properly removed later if it needs to be unloaded + // from that world + worldOld.updateEntityWithOptionalForce(player, false); + + if (dimChange) + { + player.dimension = dimID; + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("DEBUG: Sending respawn packet to player for dim " + dimID); + } + player.connection.sendPacket(new SPacketRespawn(dimID, player.world.getDifficulty(), player.world.getWorldInfo().getTerrainType(), player.interactionManager.getGameType())); + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + if (WorldUtil.registeredSpaceStations.containsKey(dimID)) + // TODO This has never been effective before due to the earlier + // bug - what does it actually do? + { + NBTTagCompound var2 = new NBTTagCompound(); + SpaceStationWorldData.getStationData(worldNew, dimID, player).writeToNBT(var2); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_DATA, GCCoreUtil.getDimensionID(player.world), new Object[] + {dimID, var2}), player); + } + } + removeEntityFromWorld(worldOld, player, true); + forceMoveEntityToPos(player, (WorldServer) worldNew, spawnPos, true); + GalacticraftCore.logger.info("Server attempting to transfer player " + PlayerUtil.getName(player) + " to dimension " + GCCoreUtil.getDimensionID(worldNew)); + + player.server.getPlayerList().preparePlayer(player, (WorldServer) worldOld); + player.interactionManager.setWorld((WorldServer) worldNew); + player.server.getPlayerList().updateTimeAndWeatherForPlayer(player, (WorldServer) worldNew); + player.server.getPlayerList().syncPlayerInventory(player); + + for (Object o : player.getActivePotionEffects()) + { + PotionEffect var10 = (PotionEffect) o; + player.connection.sendPacket(new SPacketEntityEffect(player.getEntityId(), var10)); + } + + player.connection.sendPacket(new SPacketSetExperience(player.experience, player.experienceTotal, player.experienceLevel)); + FMLCommonHandler.instance().firePlayerChangedDimensionEvent(player, oldDimID, dimID); + } else + { + forceMoveEntityToPos(player, (WorldServer) worldNew, spawnPos, false); + GalacticraftCore.logger.info("Server attempting to transfer player " + PlayerUtil.getName(player) + " within same dimension " + GCCoreUtil.getDimensionID(worldNew)); + } + player.capabilities.isFlying = false; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(player.world), new Object[] + {}), player); + + // Update PlayerStatsGC + GCPlayerStats stats = GCPlayerStats.get(player); + GCPlayerHandler.setUsingParachute(player, stats, false); + + return player; + } + + /** + * This correctly positions an entity at spawnPos in worldNew loading and + * adding it to the chunk as required. + * + * @param entity + * @param worldNew + * @param spawnPos + * @param spawnRequired - set this to true if the entity changed dimension + * so that a spawn in the new world is needed + */ + public static void forceMoveEntityToPos(Entity entity, WorldServer worldNew, Vector3 spawnPos, boolean spawnRequired) + { + boolean previous = CompatibilityManager.forceLoadChunks(worldNew); + ChunkPos pair = worldNew.getChunk(spawnPos.intX() >> 4, spawnPos.intZ() >> 4).getPos(); + GalacticraftCore.logger.debug("Loading first chunk in new dimension at " + pair.x + "," + pair.z); + worldNew.getChunkProvider().loadChunk(pair.x, pair.z); + entity.setLocationAndAngles(spawnPos.x, spawnPos.y, spawnPos.z, entity.rotationYaw, entity.rotationPitch); + WorldServer fromWorld = ((WorldServer) entity.world); + if (spawnRequired) + { + ((WorldServer) entity.world).getEntityTracker().untrack(entity); + entity.forceSpawn = true; + worldNew.spawnEntity(entity); + entity.setWorld(worldNew); + } + worldNew.updateEntityWithOptionalForce(entity, true); + if (entity instanceof EntityPlayerMP) + { + ((EntityPlayerMP) entity).connection.setPlayerLocation(spawnPos.x, spawnPos.y, spawnPos.z, entity.rotationYaw, entity.rotationPitch); + } + CompatibilityManager.forceLoadChunksEnd(worldNew, previous); + } + + public static WorldServer getStartWorld(WorldServer unchanged) + { + if (ConfigManagerCore.challengeSpawnHandling) + { + WorldProvider wp = WorldUtil.getProviderForNameServer("planet.asteroids"); + WorldServer worldNew = (wp == null) ? null : (WorldServer) wp.world; + if (worldNew != null) + { + return worldNew; + } + } + return unchanged; + } + + @SideOnly(Side.CLIENT) + public static EntityPlayer forceRespawnClient(int dimID, int par2, String par3, int par4) + { + SPacketRespawn fakePacket = new SPacketRespawn(dimID, EnumDifficulty.byId(par2), WorldType.byName(par3), WorldSettings.getGameTypeById(par4)); + FMLClientHandler.instance().getClient().player.connection.handleRespawn(fakePacket); + return FMLClientHandler.instance().getClientPlayerEntity(); + } + + /** + * This is similar to World.removeEntityDangerously() but without the risk + * of concurrent modification error + */ + private static void removeEntityFromWorld(World var0, Entity var1, boolean directlyRemove) + { + if (var1 instanceof EntityPlayer) + { + final EntityPlayer var2 = (EntityPlayer) var1; + var2.closeScreen(); + var0.playerEntities.remove(var2); + var0.updateAllPlayersSleepingFlag(); + } + + int i = var1.chunkCoordX; + int j = var1.chunkCoordZ; + + if (var1.addedToChunk && var0.isBlockLoaded(new BlockPos(i << 4, 63, j << 4), true)) + { + var0.getChunk(i, j).removeEntity(var1); + } + + if (directlyRemove) + { + List l = new ArrayList<>(); + l.add(var1); + var0.unloadEntities(l); + // This will automatically remove the entity from the world and the + // chunk prior to the world's next update entities tick + // It is important NOT to directly modify World.loadedEntityList + // here, as the World will be currently iterating through that list + // when updating each entity (see the line + // "this.loadedEntityList.remove(i--);" in World.updateEntities() + } + + var1.isDead = false; + } + + public static SpaceStationRecipe getSpaceStationRecipe(int planetID) + { + for (SpaceStationType type : GalacticraftRegistry.getSpaceStationData()) + { + if (type.getWorldToOrbitID() == planetID) + { + return type.getRecipeForSpaceStation(); + } + } + + return null; + } + + /** + * This must return planets in the same order their provider IDs were + * registered in GalacticraftRegistry by GalacticraftCore. + */ + public static List getPlanetList() + { + List objList = new ArrayList<>(); + objList.add(getPlanetListInts()); + return objList; + } + + public static Integer[] getPlanetListInts() + { + Integer[] iArray = new Integer[WorldUtil.registeredPlanets.size()]; + + for (int i = 0; i < iArray.length; i++) + { + iArray[i] = WorldUtil.registeredPlanets.get(i); + } + + return iArray; + } + + /** + * What's important here is that Galacticraft and the server both register + * the same reachable Galacticraft planets (and their provider types) in the + * same order. See WorldUtil.registerPlanet(). + * + * Even if there are dimension conflicts or other problems, the planets must + * be registered in the same order on both client and server. This should + * happen automatically if Galacticraft versions match, and if planets + * modules match (including Galacticraft-Planets and any other sub-mods). + * + * It is NOT a good idea for sub-mods to make the registration order of + * planets variable or dependent on configs. + */ + public static void decodePlanetsListClient(List data) + { + try + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("GC connecting to server: received planets dimension ID list."); + } + if (WorldUtil.registeredPlanets != null) + { + for (Integer registeredID : WorldUtil.registeredPlanets) + { + if (DimensionManager.isDimensionRegistered(registeredID)) + { + DimensionManager.unregisterDimension(registeredID); + } + } + } + WorldUtil.registeredPlanets = new ArrayList<>(); + + String ids = ""; + if (data.size() > 0) + { + // Start the provider index at offset 2 to skip the two + // Overworld Orbit dimensions + // (this will be iterating through + // GalacticraftRegistry.worldProviderIDs) + int providerIndex = GalaxyRegistry.getRegisteredSatellites().size() * 2; + if (data.get(0) instanceof Integer) + { + for (Object o : data) + { + WorldUtil.registerPlanetClient((Integer) o, providerIndex); + providerIndex++; + ids += ((Integer) o).toString() + " "; + } + } else if (data.get(0) instanceof Integer[]) + { + for (Object o : (Integer[]) data.get(0)) + { + WorldUtil.registerPlanetClient((Integer) o, providerIndex); + providerIndex++; + ids += ((Integer) o).toString() + " "; + } + } + } + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.debug("GC clientside planet dimensions registered: " + ids); + WorldProvider dimMoon = WorldUtil.getProviderForNameClient("moon.moon"); + if (dimMoon != null) + { + GalacticraftCore.logger.debug("Crosscheck: Moon is " + GCCoreUtil.getDimensionID(dimMoon)); + } + WorldProvider dimMars = WorldUtil.getProviderForNameClient("planet.mars"); + if (dimMars != null) + { + GalacticraftCore.logger.debug("Crosscheck: Mars is " + GCCoreUtil.getDimensionID(dimMars)); + } + WorldProvider dimAst = WorldUtil.getProviderForNameClient("planet.asteroids"); + if (dimAst != null) + { + GalacticraftCore.logger.debug("Crosscheck: Asteroids is " + GCCoreUtil.getDimensionID(dimAst)); + } + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + public static List getSpaceStationList() + { + List objList = new ArrayList<>(); + objList.add(getSpaceStationListInts()); + return objList; + } + + public static Integer[] getSpaceStationListInts() + { + Integer[] iArray = new Integer[WorldUtil.registeredSpaceStations.size() * 2]; + + int i = 0; + for (Map.Entry e : WorldUtil.registeredSpaceStations.entrySet()) + { + iArray[i] = e.getKey(); + iArray[i + 1] = e.getValue(); + i += 2; + } + + // for (int i = 0; i < iArray.length; i++) + // { + // iArray[i] = WorldUtil.registeredSpaceStations.get(i); + // } + + return iArray; + } + + public static void decodeSpaceStationListClient(List data) + { + try + { + if (WorldUtil.registeredSpaceStations != null) + { + for (Integer registeredID : WorldUtil.registeredSpaceStations.keySet()) + { + DimensionManager.unregisterDimension(registeredID); + } + } + WorldUtil.registeredSpaceStations = Maps.newHashMap(); + + if (data.size() > 0) + { + if (data.get(0) instanceof Integer) + { + for (int i = 0; i < data.size(); i += 2) + { + registerSSdim((Integer) data.get(i), (Integer) data.get(i + 1)); + } + // for (Object dimID : data) + // { + // registerSSdim((Integer) dimID); + // } + } else if (data.get(0) instanceof Integer[]) + { + Integer[] array = ((Integer[]) data.get(0)); + for (int i = 0; i < array.length; i += 2) + { + registerSSdim(array[i], array[i + 1]); + } + // for (Object dimID : (Integer[]) data.get(0)) + // { + // registerSSdim((Integer) dimID); + // } + } + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + private static void registerSSdim(Integer dimID, Integer providerKey) + { + if (!WorldUtil.registeredSpaceStations.containsKey(dimID)) + { + if (!DimensionManager.isDimensionRegistered(dimID)) + { + WorldUtil.registeredSpaceStations.put(dimID, providerKey); + DimensionManager.registerDimension(dimID, WorldUtil.getDimensionTypeById(providerKey)); + } else + { + GalacticraftCore.logger.error("Dimension already registered on client: unable to register space station dimension " + dimID); + } + } + } + + public static void toCelestialSelection(EntityPlayerMP player, GCPlayerStats stats, int tier) + { + player.dismountRidingEntity(); + stats.setSpaceshipTier(tier); + + HashMap map = WorldUtil.getArrayOfPossibleDimensions(tier, player); + String dimensionList = ""; + int count = 0; + for (Entry entry : map.entrySet()) + { + dimensionList = dimensionList.concat(entry.getKey() + (count < map.entrySet().size() - 1 ? "?" : "")); + count++; + } + + boolean canCreateStations = PermissionAPI.hasPermission(player, Constants.PERMISSION_CREATE_STATION); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_DIMENSION_LIST, GCCoreUtil.getDimensionID(player.world), new Object[] + {PlayerUtil.getName(player), dimensionList, canCreateStations}), player); + stats.setUsingPlanetSelectionGui(true); + stats.setSavedPlanetList(dimensionList); + Entity fakeEntity = new EntityCelestialFake(player.world, player.posX, player.posY, player.posZ); + player.world.spawnEntity(fakeEntity); + player.startRiding(fakeEntity); + } + + public static Vector3 getFootprintPosition(World world, float rotation, Vector3 startPosition, BlockVec3 playerCenter) + { + Vector3 position = startPosition.clone(); + float footprintScale = 0.375F; + + int mainPosX = position.intX(); + int mainPosY = position.intY(); + int mainPosZ = position.intZ(); + BlockPos posMain = new BlockPos(mainPosX, mainPosY, mainPosZ); + + // If the footprint is hovering over air... + if (world.getBlockState(posMain).getBlock().isAir(world.getBlockState(posMain), world, posMain)) + { + position.x += (playerCenter.x - mainPosX); + position.z += (playerCenter.z - mainPosZ); + + BlockPos pos1 = new BlockPos(position.intX(), position.intY(), position.intZ()); + // If the footprint is still over air.... + Block b2 = world.getBlockState(pos1).getBlock(); + if (b2 != null && b2.isAir(world.getBlockState(pos1), world, pos1)) + { + for (EnumFacing direction : EnumFacing.VALUES) + { + BlockPos offsetPos = posMain.offset(direction); + if (direction != EnumFacing.DOWN && direction != EnumFacing.UP) + { + if (!world.getBlockState(offsetPos).getBlock().isAir(world.getBlockState(offsetPos), world, offsetPos)) + { + position.x += direction.getXOffset(); + position.z += direction.getZOffset(); + break; + } + } + } + } + } + + mainPosX = position.intX(); + mainPosZ = position.intZ(); + + double x0 = (Math.sin((45 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.x; + double x1 = (Math.sin((135 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.x; + double x2 = (Math.sin((225 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.x; + double x3 = (Math.sin((315 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.x; + double z0 = (Math.cos((45 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.z; + double z1 = (Math.cos((135 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.z; + double z2 = (Math.cos((225 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.z; + double z3 = (Math.cos((315 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.z; + + double xMin = Math.min(Math.min(x0, x1), Math.min(x2, x3)); + double xMax = Math.max(Math.max(x0, x1), Math.max(x2, x3)); + double zMin = Math.min(Math.min(z0, z1), Math.min(z2, z3)); + double zMax = Math.max(Math.max(z0, z1), Math.max(z2, z3)); + + if (xMin < mainPosX) + { + position.x += mainPosX - xMin; + } + + if (xMax > mainPosX + 1) + { + position.x -= xMax - (mainPosX + 1); + } + + if (zMin < mainPosZ) + { + position.z += mainPosZ - zMin; + } + + if (zMax > mainPosZ + 1) + { + position.z -= zMax - (mainPosZ + 1); + } + + return position; + } + + public static String spaceStationDataToString(HashMap data) + { + StringBuilder builder = new StringBuilder(); + Iterator> it = data.entrySet().iterator(); + while (it.hasNext()) + { + Map.Entry e = it.next(); + builder.append(e.getKey()); + builder.append("$"); + builder.append(e.getValue()); + if (it.hasNext()) + { + builder.append("?"); + } + } + return builder.toString(); + } + + public static HashMap stringToSpaceStationData(String input) + { + HashMap data = Maps.newHashMap(); + if (!input.isEmpty()) + { + String[] str0 = input.split("\\?"); + for (String element : str0) + { + String[] str1 = element.split("\\$"); + data.put(Integer.parseInt(str1[0]), Integer.parseInt(str1[1])); + } + } + return data; + } + + public static String getDimensionName(WorldProvider wp) + { + if (wp instanceof IGalacticraftWorldProvider) + { + CelestialBody cb = ((IGalacticraftWorldProvider) wp).getCelestialBody(); + if (cb != null && !(cb instanceof Satellite)) + { + return cb.getTranslationKey(); + } + } + + if (GCCoreUtil.getDimensionID(wp) == ConfigManagerCore.idDimensionOverworld) + { + return "overworld"; + } + + return wp.getDimensionType().getName(); + } + + private static void insertChecklistEntries(CelestialBody body, List bodiesDone, List> checklistValues) + { + if (body.isReachable()) + { + int insertPos = 0; + for (CelestialBody prevBody : bodiesDone) + { + if (body.getTierRequirement() >= prevBody.getTierRequirement()) + { + insertPos++; + } + } + List checklist = Lists.newArrayList(); + checklist.add(body.getTranslationKey()); + checklist.addAll(body.getChecklistKeys()); + checklistValues.add(insertPos, checklist); + bodiesDone.add(body); + } + } + + public static List> getAllChecklistKeys() + { + List> checklistValues = Lists.newArrayList(); + List bodiesDone = Lists.newArrayList(); + + for (Planet planet : GalaxyRegistry.getRegisteredPlanets().values()) + { + insertChecklistEntries(planet, bodiesDone, checklistValues); + } + + for (Moon moon : GalaxyRegistry.getRegisteredMoons().values()) + { + insertChecklistEntries(moon, bodiesDone, checklistValues); + } + + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + insertChecklistEntries(satellite, bodiesDone, checklistValues); + } + + return checklistValues; + } + + public static DimensionType getDimensionTypeById(int id) + { + for (DimensionType dimensiontype : DimensionType.values()) + { + if (dimensiontype.getId() == id) + { + return dimensiontype; + } + } + + GalacticraftCore.logger.error("There was a problem getting WorldProvider type " + id); + GalacticraftCore.logger.error("(possibly this is a conflict, check Galacticraft config.)"); + return null; + } + + public static void markAdjacentPadForUpdate(World worldIn, BlockPos pos) + { + BlockPos offsetPos; + for (int dX = -2; dX <= 2; dX++) + { + for (int dZ = -2; dZ <= 2; dZ++) + { + offsetPos = pos.add(dX, 0, dZ); + final IBlockState blockState = worldIn.getBlockState(offsetPos); + + if (blockState.getBlock() == GCBlocks.landingPadFull) + { + worldIn.notifyBlockUpdate(offsetPos, blockState, blockState, 3); + } + } + } + } + + public static void setNextMorning(WorldServer world) + { + if (world.provider instanceof WorldProviderSpace) + { + long current = ((WorldProviderSpace) world.provider).preTickTime; + long dayLength = ((WorldProviderSpace) world.provider).getDayLength(); + if (dayLength <= 0) + return; + world.setWorldTime(current - current % dayLength + dayLength); + } else + { + long newTime = world.getWorldTime(); + for (WorldServer worldServer : GCCoreUtil.getWorldServerList(world)) + { + if (worldServer == world) + continue; + if (worldServer.provider instanceof WorldProviderSpace) + { + ((WorldProviderSpace) worldServer.provider).adjustTime(newTime); + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/CelestialList.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/CelestialList.java new file mode 100644 index 00000000..da1729ec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/CelestialList.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util.list; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; + +import com.google.common.collect.ImmutableMap; + +public class CelestialList extends ArrayList +{ + + private static final long serialVersionUID = 1L; + private Map celestialListMap; + + public static CelestialList create() + { + return new CelestialList<>(); + } + + @SafeVarargs + public static CelestialList of(CelestialList... lists) + { + List temp = new ArrayList<>(); + for (List l : lists) + { + temp.addAll(l); + } + return new CelestialList<>(temp); + } + + public CelestialList(Collection s) + { + super(s); + } + + public CelestialList() + { + super(); + this.celestialListMap = new HashMap<>(); + } + + private T mapPut(String name, T t) + {//@noformat + if (celestialListMap.containsKey(name)) { return celestialListMap.get(name); } + return celestialListMap.put(name, t); + } + + @Override + public boolean add(T e) + {//@noformat + if (this.contains(e)) { return false; } + mapPut(e.getName(), e); + return super.add(e); + } + + @Override + public boolean addAll(Collection c) + {//@noformat + for (T t : c) { add(t); } + return true; + } + + public Map getRegistered() + { + return ImmutableMap.copyOf(this.celestialListMap); + } + + public ImmutableCelestialList toUnmodifiableList() + { + return ImmutableCelestialList.unmodifiable(this); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/Immutable.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/Immutable.java new file mode 100644 index 00000000..89f7bfe9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/Immutable.java @@ -0,0 +1,287 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util.list; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ListIterator; +import java.util.NoSuchElementException; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.function.Predicate; + +import com.google.common.collect.ObjectArrays; + +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkPositionIndex; + +abstract class Immutable extends ArrayList implements Serializable +{ + + private static final long serialVersionUID = -3175142460104260006L; + static final int SPLITERATOR_CHARACTERISTICS = Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED; + static final Object[] EMPTY_ARRAY = new Object[0]; + + public Immutable() + {} + + public Immutable(Collection collection) + { + super(collection); + } + + /** + * Returns an unmodifiable iterator across the elements in this collection. + */ + @Override + public abstract Immutable.Iterator iterator(); + + @Override + public Spliterator spliterator() + { + return Spliterators.spliterator(this, SPLITERATOR_CHARACTERISTICS); + } + + @Override + public final Object[] toArray() + { + int size = size(); + if (size == 0) + { + return EMPTY_ARRAY; + } + Object[] result = new Object[size]; + copyIntoArray(result, 0); + return result; + } + + @Override + public final T[] toArray(T[] other) + { + checkNotNull(other); + int size = size(); + if (other.length < size) + { + other = ObjectArrays.newArray(other, size); + } + else if (other.length > size) + { + other[size] = null; + } + copyIntoArray(other, 0); + return other; + } + + int copyIntoArray(Object[] dst, int offset) + { + for (E e : this) + { + dst[offset++] = e; + } + return offset; + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean add(E e) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean remove(Object object) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean addAll(Collection newElements) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean removeAll(Collection oldElements) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean removeIf(Predicate filter) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean retainAll(Collection elementsToKeep) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final void clear() + { + throw new UnsupportedOperationException(); + } + + public static abstract class Iterator implements ListIterator + { + + private final int size; + private int position; + + /** + * Returns the element with the specified index. This method is called + * by {@link #next()}. + */ + protected abstract E get(int index); + + protected Iterator(int size) + { + this(size, 0); + } + + protected Iterator(int size, int position) + { + checkPositionIndex(position, size); + this.size = size; + this.position = position; + } + + protected Iterator() + { + this.size = 0; + this.position = 0; + } + + @Override + public final boolean hasNext() + { + return position < size; + } + + @Override + public final E next() + { + if (!hasNext()) + { + throw new NoSuchElementException(); + } + return get(position++); + } + + @Override + public final int nextIndex() + { + return position; + } + + @Override + public final boolean hasPrevious() + { + return position > 0; + } + + @Override + public final E previous() + { + if (!hasPrevious()) + { + throw new NoSuchElementException(); + } + return get(--position); + } + + @Override + public final int previousIndex() + { + return position - 1; + } + + /** + * Guaranteed to throw an exception and leave the underlying data + * unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final void add(E e) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the underlying data + * unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final void set(E e) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the underlying data + * unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final void remove() + { + throw new UnsupportedOperationException(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/ImmutableCelestialList.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/ImmutableCelestialList.java new file mode 100644 index 00000000..2c4e79b8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/ImmutableCelestialList.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util.list; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; + +public class ImmutableCelestialList extends Immutable +{ + + private static final long serialVersionUID = -186156409078238142L; + + @SafeVarargs + public static ImmutableCelestialList from(CelestialList... lists) + { + List temp = new ArrayList<>(); + for (List l : lists) + { + temp.addAll(l); + } + return new ImmutableCelestialList<>(temp); + } + + public static ImmutableCelestialList of(Collection collection) + { + return new ImmutableCelestialList<>(collection); + } + + static ImmutableCelestialList unmodifiable(CelestialList celestialList) + { + return new ImmutableCelestialList<>(celestialList); + } + + public ImmutableCelestialList() + { + super(); + } + + public ImmutableCelestialList(Collection collection) + { + super(collection); + } + + @Override + public Immutable.Iterator iterator() + { + return listIterator(); + } + + @Override + public Immutable.Iterator listIterator() + { + return listIterator(0); + } + + @Override + public Immutable.Iterator listIterator(int index) + { + return new Immutable.Iterator(size(), index) + { + + @Override + protected E get(int index) + { + return ImmutableCelestialList.this.get(index); + } + }; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/ChunkLoadingCallback.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/ChunkLoadingCallback.java new file mode 100644 index 00000000..20c9d3bc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/ChunkLoadingCallback.java @@ -0,0 +1,320 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map.Entry; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.ForgeChunkManager.LoadingCallback; +import net.minecraftforge.common.ForgeChunkManager.Ticket; +import net.minecraftforge.common.config.Configuration; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.GCLog; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class ChunkLoadingCallback implements LoadingCallback +{ + private static HashMap>> chunkLoaderList = new HashMap<>(); + + + private static boolean loaded; + private static boolean configLoaded; + private static Configuration config; + private static boolean loadOnLogin; + private static boolean dirtyData; + + @Override + public void ticketsLoaded(List tickets, World world) + { + for (Ticket ticket : tickets) + { + NBTTagCompound nbt = ticket.getModData(); + + if (nbt != null) + { + int tileX = nbt.getInteger("ChunkLoaderTileX"); + int tileY = nbt.getInteger("ChunkLoaderTileY"); + int tileZ = nbt.getInteger("ChunkLoaderTileZ"); + TileEntity tile = world.getTileEntity(new BlockPos(tileX, tileY, tileZ)); + + if (tile instanceof IChunkLoader) + { + ((IChunkLoader) tile).onTicketLoaded(ticket, false); + } + } + } + } + + public static void loadConfig(File file) + { + if (!ChunkLoadingCallback.configLoaded) + { + ChunkLoadingCallback.config = new Configuration(file); + } + + try + { + ChunkLoadingCallback.loadOnLogin = ChunkLoadingCallback.config.get("CHUNKLOADING", "LoadOnLogin", true, "If you don't want each player's chunks to load when they log in, set to false.").getBoolean(true); + } catch (final Exception e) + { + GCLog.severe("Problem loading chunkloading config (\"core.conf\")"); + } finally + { + if (ChunkLoadingCallback.config.hasChanged()) + { + ChunkLoadingCallback.config.save(); + } + + ChunkLoadingCallback.configLoaded = true; + } + } + + public static void addToList(World world, int x, int y, int z, String playerName) + { + HashMap> dimensionMap = ChunkLoadingCallback.chunkLoaderList.get(playerName); + + if (dimensionMap == null) + { + dimensionMap = new HashMap<>(); + ChunkLoadingCallback.chunkLoaderList.put(playerName, dimensionMap); + } + + HashSet chunkLoaders = dimensionMap.get(world.provider.getDimension()); + + if (chunkLoaders == null) + { + chunkLoaders = new HashSet<>(); + } + + chunkLoaders.add(new BlockPos(x, y, z)); + dimensionMap.put(GCCoreUtil.getDimensionID(world), chunkLoaders); + ChunkLoadingCallback.chunkLoaderList.put(playerName, dimensionMap); + ChunkLoadingCallback.dirtyData = true; + } + + public static void forceChunk(Ticket ticket, World world, int x, int y, int z, String playerName) + { + ChunkLoadingCallback.addToList(world, x, y, z, playerName); + ChunkPos chunkPos = new ChunkPos(x >> 4, z >> 4); + ForgeChunkManager.forceChunk(ticket, chunkPos); + } + + public static void save(WorldServer world) + { + if (!ChunkLoadingCallback.dirtyData) + { + return; + } + + File saveDir = ChunkLoadingCallback.getSaveDir(); + + if (saveDir != null) + { + File saveFile = new File(saveDir, "chunkloaders.dat"); + + if (!saveFile.exists()) + { + try + { + if (!saveFile.createNewFile()) + { + GCLog.severe("Could not create chunk loader data file: " + saveFile.getAbsolutePath()); + } + } catch (IOException e) + { + GCLog.severe("Could not create chunk loader data file: " + saveFile.getAbsolutePath()); + e.printStackTrace(); + } + } + + FileOutputStream fos = null; + try + { + fos = new FileOutputStream(saveFile); + } catch (FileNotFoundException e) + { + e.printStackTrace(); + } + if (fos != null) + { + DataOutputStream dataStream = new DataOutputStream(fos); + try + { + dataStream.writeInt(ChunkLoadingCallback.chunkLoaderList.size()); + + for (Entry>> playerEntry : ChunkLoadingCallback.chunkLoaderList.entrySet()) + { + dataStream.writeUTF(playerEntry.getKey()); + dataStream.writeInt(playerEntry.getValue().size()); + + for (Entry> dimensionEntry : playerEntry.getValue().entrySet()) + { + dataStream.writeInt(dimensionEntry.getKey()); + dataStream.writeInt(dimensionEntry.getValue().size()); + + for (BlockPos coords : dimensionEntry.getValue()) + { + dataStream.writeInt(coords.getX()); + dataStream.writeInt(coords.getY()); + dataStream.writeInt(coords.getZ()); + } + } + } + } catch (IOException e) + { + e.printStackTrace(); + } + try + { + dataStream.close(); + fos.close(); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + ChunkLoadingCallback.dirtyData = false; + } + + private static File getSaveDir() + { + if (DimensionManager.getWorld(0) != null) + { + File saveDir = new File(DimensionManager.getCurrentSaveRootDirectory(), "galacticraft"); + + if (!saveDir.exists()) + { + if (!saveDir.mkdirs()) + { + GCLog.severe("Could not create chunk loader save data folder: " + saveDir.getAbsolutePath()); + } + } + + return saveDir; + } + + return null; + } + + public static void load(WorldServer world) + { + if (ChunkLoadingCallback.loaded) + { + return; + } + + DataInputStream dataStream = null; + + try + { + File saveDir = ChunkLoadingCallback.getSaveDir(); + + if (saveDir != null) + { + if (!saveDir.exists()) + { + if (!saveDir.mkdirs()) + { + GCLog.severe("Could not create chunk loader save data folder: " + saveDir.getAbsolutePath()); + } + } + + File saveFile = new File(saveDir, "chunkloaders.dat"); + + if (saveFile.exists()) + { + dataStream = new DataInputStream(new FileInputStream(saveFile)); + + int playerCount = dataStream.readInt(); + + for (int l = 0; l < playerCount; l++) + { + String ownerName = dataStream.readUTF(); + + int mapSize = dataStream.readInt(); + HashMap> dimensionMap = new HashMap<>(); + + for (int i = 0; i < mapSize; i++) + { + int dimensionID = dataStream.readInt(); + HashSet coords = new HashSet<>(); + dimensionMap.put(dimensionID, coords); + int coordSetSize = dataStream.readInt(); + + for (int j = 0; j < coordSetSize; j++) + { + coords.add(new BlockPos(dataStream.readInt(), dataStream.readInt(), dataStream.readInt())); + } + } + + ChunkLoadingCallback.chunkLoaderList.put(ownerName, dimensionMap); + } + + dataStream.close(); + } + } + } catch (Exception e) + { + e.printStackTrace(); + + if (dataStream != null) + { + try + { + dataStream.close(); + } catch (IOException e1) + { + e1.printStackTrace(); + } + } + } + + ChunkLoadingCallback.loaded = true; + ChunkLoadingCallback.dirtyData = false; + } + + public static void onPlayerLogin(EntityPlayer player) + { + for (Entry>> playerEntry : ChunkLoadingCallback.chunkLoaderList.entrySet()) + { + if (PlayerUtil.getName(player).equals(playerEntry.getKey())) + { + for (Entry> dimensionEntry : playerEntry.getValue().entrySet()) + { + int dimID = dimensionEntry.getKey(); + + if (ChunkLoadingCallback.loadOnLogin) + { + player.world.getMinecraftServer().getWorld(dimID); + } + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/IChunkLoader.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/IChunkLoader.java new file mode 100644 index 00000000..3ad03fd4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/IChunkLoader.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeChunkManager.Ticket; + +public interface IChunkLoader +{ + + void onTicketLoaded(Ticket ticket, boolean placed); + + Ticket getTicket(); + + World getWorld(); + + BlockPos getCoords(); + + String getOwnerName(); + + void setOwnerName(String ownerName); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeDecoratorMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeDecoratorMoon.java new file mode 100644 index 00000000..e0021b4d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeDecoratorMoon.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockMatcher; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.MinecraftForge; + +public class BiomeDecoratorMoon extends BiomeDecorator +{ + + private World world; + private Random randomGenerator; + + private WorldGenerator dirtGen; + private WorldGenerator cheeseGen; + private WorldGenerator copperGen; + private WorldGenerator tinGen; + + public BiomeDecoratorMoon() + { + this.copperGen = new WorldGenMinableMeta(GCBlocks.blockMoon, 4, 0, true, GCBlocks.blockMoon, 4); + this.tinGen = new WorldGenMinableMeta(GCBlocks.blockMoon, 4, 1, true, GCBlocks.blockMoon, 4); + this.cheeseGen = new WorldGenMinableMeta(GCBlocks.blockMoon, 3, 2, true, GCBlocks.blockMoon, 4); + this.dirtGen = new WorldGenMinableMeta(GCBlocks.blockMoon, 32, 3, true, GCBlocks.blockMoon, 4); + } + + @Override + public void decorate(World worldIn, Random random, Biome p_180292_3_, BlockPos pos) + { + if (this.world != null) + { + throw new RuntimeException("Already decorating!!"); + } else + { + this.world = worldIn; + this.randomGenerator = random; + this.chunkPos = pos; + this.generateMoon(); + this.world = null; + this.randomGenerator = null; + } + } + + private void genStandardOre(int amountPerChunk, WorldGenerator worldGenerator, int minY, int maxY) + { + for (int var5 = 0; var5 < amountPerChunk; ++var5) + { + BlockPos blockpos = this.chunkPos.add(this.randomGenerator.nextInt(16), this.randomGenerator.nextInt(maxY - minY) + minY, this.randomGenerator.nextInt(16)); + worldGenerator.generate(this.world, this.randomGenerator, blockpos); + } + } + + private void generateMoon() + { + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Pre(this.world, this.randomGenerator, chunkPos)); + this.genStandardOre(20, this.dirtGen, 0, 200); + if (!ConfigManagerCore.disableCopperMoon) + { + this.genStandardOre(26, this.copperGen, 0, 60); + } + if (!ConfigManagerCore.disableTinMoon) + { + this.genStandardOre(23, this.tinGen, 0, 60); + } + if (!ConfigManagerCore.disableCheeseMoon) + { + this.genStandardOre(14, this.cheeseGen, 0, 85); + } + if (!ConfigManagerCore.disableSapphireMoon) + { + int count = 3 + this.randomGenerator.nextInt(6); + IBlockState sapphire = GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.ORE_SAPPHIRE); + for (int i = 0; i < count; i++) + { + BlockPos blockpos = this.chunkPos.add(this.randomGenerator.nextInt(16) + 8, this.randomGenerator.nextInt(28) + 4, this.randomGenerator.nextInt(16) + 8); + + IBlockState toReplace = this.world.getBlockState(blockpos); + + if (toReplace.getBlock() == GCBlocks.blockMoon && toReplace.getBlock().isReplaceableOreGen(toReplace, this.world, blockpos, BlockMatcher.forBlock(Blocks.STONE))) + { + this.world.setBlockState(blockpos, sapphire, 2); + } + } + } + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Post(this.world, this.randomGenerator, chunkPos)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeFlatMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeFlatMoon.java new file mode 100644 index 00000000..9af21699 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeFlatMoon.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeFlatMoon extends BiomeMoon +{ + + public BiomeFlatMoon(BiomeData properties) + { + super(properties); + } + + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.COLD, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeMoon.java new file mode 100644 index 00000000..c225bf12 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeMoon.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.chunk.ChunkPrimer; + +public class BiomeMoon extends BiomeGenBaseGC +{ + + public static final Biome moonFlat = new BiomeFlatMoon(BiomeData.builder().biomeName("Moon").baseHeight(1.5F).heightVariation(0.4F).build()); + + BiomeMoon(BiomeData properties) + { + super(properties, true); + } + + @Override + public BiomeDecorator createBiomeDecorator() + { + return getModdedBiomeDecorator(new BiomeDecoratorMoon()); + } + + @Override + public float getSpawningChance() + { + return 0.1F; + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal) + { + this.fillerBlock = ChunkProviderMoon.BLOCK_LOWER; + this.topBlock = ChunkProviderMoon.BLOCK_TOP; + super.genTerrainBlocks(worldIn, rand, chunkPrimerIn, x, z, noiseVal); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeOrbit.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeOrbit.java new file mode 100644 index 00000000..b1fd4051 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeOrbit.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeOrbit extends BiomeGenBaseGC +{ + + public static final Biome space = new BiomeOrbit(BiomeData.builder().biomeName("Space").build()); + + private BiomeOrbit(BiomeData properties) + { + super(properties, true); + this.spawnableMonsterList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableCaveCreatureList.clear(); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedZombie.class, 10, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedSpider.class, 10, 4, 4)); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SPARSE, BiomeDictionary.Type.SPOOKY); + } + + @Override + public float getSpawningChance() + { + return 0.01F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderMoon.java new file mode 100644 index 00000000..844b224c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderMoon.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeProviderSpace; +import net.minecraft.world.biome.Biome; + +public class BiomeProviderMoon extends BiomeProviderSpace +{ + + @Override + public Biome getBiome() + { + return BiomeMoon.moonFlat; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderOrbit.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderOrbit.java new file mode 100644 index 00000000..37dc65be --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderOrbit.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeProviderSpace; +import net.minecraft.world.biome.Biome; + +public class BiomeProviderOrbit extends BiomeProviderSpace +{ + + @Override + public Biome getBiome() + { + return BiomeOrbit.space; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderMoon.java new file mode 100644 index 00000000..3bc362b5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderMoon.java @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.BlockFalling; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; + +import net.minecraftforge.event.ForgeEventFactory; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.perlin.generator.GradientNoise; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomBoss; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; + +public class ChunkProviderMoon extends ChunkProviderBase +{ + + public static final IBlockState BLOCK_TOP = GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_TURF); + public static final IBlockState BLOCK_FILL = GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_DIRT); + public static final IBlockState BLOCK_LOWER = GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_STONE); + + private final Random rand; + + private final GradientNoise noiseGen1; + private final GradientNoise noiseGen2; + private final GradientNoise noiseGen3; + private final GradientNoise noiseGen4; + + private final World world; + private final MapGenVillageMoon villageGenerator = new MapGenVillageMoon(); + + private final MapGenDungeon dungeonGeneratorMoon = + new MapGenDungeon(new DungeonConfiguration(GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_DUNGEON_BRICK), 25, 8, 16, + 5, 6, RoomBoss.class, RoomTreasure.class)); + + private final MapGenBaseMeta caveGenerator = new MapGenCavesMoon(); + + private static final int CRATER_PROB = 300; + + // DO NOT CHANGE + private static final int MID_HEIGHT = 63; + private static final int CHUNK_SIZE_X = 16; + private static final int CHUNK_SIZE_Y = 128; + private static final int CHUNK_SIZE_Z = 16; + + public ChunkProviderMoon(World worldIn, long seed, boolean mapFeaturesEnabled) + { + this.world = worldIn; + this.rand = new Random(seed); + this.noiseGen1 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen2 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen3 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + this.noiseGen4 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + } + + public void setBlocksInChunk(int chunkX, int chunkZ, ChunkPrimer primer) + { + this.noiseGen1.setFrequencyAll(0.012500000186264515D); + this.noiseGen2.setFrequencyAll(0.014999999664723873D); + this.noiseGen3.setFrequencyAll(0.0D); + this.noiseGen4.setFrequencyAll(0.019999999552965164D); + + for (int x = 0; x < ChunkProviderMoon.CHUNK_SIZE_X; x++) + { + for (int z = 0; z < ChunkProviderMoon.CHUNK_SIZE_Z; z++) + { + final double d = this.noiseGen1.evalNoise(x + chunkX * 16, z + chunkZ * 16) * 8; + final double d2 = this.noiseGen2.evalNoise(x + chunkX * 16, z + chunkZ * 16) * 24; + double d3 = this.noiseGen3.evalNoise(x + chunkX * 16, z + chunkZ * 16) - 0.1; + d3 *= 4; + + double yDev; + + if (d3 < 0.0D) + { + yDev = d; + } else if (d3 > 1.0D) + { + yDev = d2; + } else + { + yDev = d + (d2 - d) * d3; + } + + for (int y = 0; y < ChunkProviderMoon.CHUNK_SIZE_Y; y++) + { + if (y < ChunkProviderMoon.MID_HEIGHT + yDev) + { + primer.setBlockState(x, y, z, BLOCK_LOWER); + } + } + } + } + } + + public void replaceBlocksForBiome(int x, int z, ChunkPrimer primer, Biome[] biomes) + { + final int var5 = 20; + for (int i = 0; i < 16; ++i) + { + for (int j = 0; j < 16; ++j) + { + final int var12 = (int) (this.noiseGen4.evalNoise(i + x * 16, j * z * 16) / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D); + int var13 = -1; + IBlockState state0 = BLOCK_TOP; + IBlockState state1 = BLOCK_FILL; + + for (int var16 = 127; var16 >= 0; --var16) + { + if (var16 <= this.rand.nextInt(5)) + { + primer.setBlockState(i, var16, j, Blocks.BEDROCK.getDefaultState()); + } else + { + IBlockState var18 = primer.getBlockState(i, var16, j); + if (Blocks.AIR == var18.getBlock()) + { + var13 = -1; + } else if (var18 == BLOCK_LOWER) + { + if (var13 == -1) + { + if (var12 <= 0) + { + state0 = Blocks.AIR.getDefaultState(); + state1 = BLOCK_LOWER; + } else if (var16 >= var5 - -16 && var16 <= var5 + 1) + { + state0 = BLOCK_FILL; + } + + var13 = var12; + + if (var16 >= var5 - 1) + { + primer.setBlockState(i, var16, j, state0); + } else if (var16 < var5 - 1 && var16 >= var5 - 2) + { + primer.setBlockState(i, var16, j, state1); + } + } else if (var13 > 0) + { + --var13; + primer.setBlockState(i, var16, j, state1); + } + } + } + } + } + } + } + + @Override + public Chunk generateChunk(int x, int z) + { + this.rand.setSeed(x * 341873128712L + z * 132897987541L); + ChunkPrimer chunkprimer = new ChunkPrimer(); + this.setBlocksInChunk(x, z, chunkprimer); + this.createCraters(x, z, chunkprimer); + this.replaceBlocksForBiome(x, z, chunkprimer, null); + + this.caveGenerator.generate(this.world, x, z, chunkprimer); + + this.dungeonGeneratorMoon.generate(this.world, x, z, chunkprimer); + this.villageGenerator.generate(this.world, x, z, chunkprimer); + + Chunk chunk = new Chunk(this.world, chunkprimer, x, z); + byte[] abyte = chunk.getBiomeArray(); + final byte b = (byte) Biome.getIdForBiome(BiomeAdaptive.biomeDefault); + for (int i = 0; i < abyte.length; ++i) + { + abyte[i] = b; + } + + chunk.generateSkylightMap(); + return chunk; + } + + private void createCraters(int chunkX, int chunkZ, ChunkPrimer primer) + { + for (int cx = chunkX - 2; cx <= chunkX + 2; cx++) + { + for (int cz = chunkZ - 2; cz <= chunkZ + 2; cz++) + { + for (int x = 0; x < ChunkProviderMoon.CHUNK_SIZE_X; x++) + { + for (int z = 0; z < ChunkProviderMoon.CHUNK_SIZE_Z; z++) + { + if (Math.abs(this.randFromPoint(cx * 16 + x, (cz * 16 + z) * 1000)) < this.noiseGen4.evalNoise(x * ChunkProviderMoon.CHUNK_SIZE_X + x, cz * ChunkProviderMoon.CHUNK_SIZE_Z + z) + / ChunkProviderMoon.CRATER_PROB) + { + final Random random = new Random(cx * 16 + x + (cz * 16 + z) * 5000); + final EnumCraterSize cSize = EnumCraterSize.sizeArray[random.nextInt(EnumCraterSize.sizeArray.length)]; + final int size = random.nextInt(cSize.MAX_SIZE - cSize.MIN_SIZE) + cSize.MIN_SIZE; + this.makeCrater(cx * 16 + x, cz * 16 + z, chunkX * 16, chunkZ * 16, size, primer); + } + } + } + } + } + } + + private void makeCrater(int craterX, int craterZ, int chunkX, int chunkZ, int size, ChunkPrimer primer) + { + for (int x = 0; x < ChunkProviderMoon.CHUNK_SIZE_X; x++) + { + for (int z = 0; z < ChunkProviderMoon.CHUNK_SIZE_Z; z++) + { + double xDev = craterX - (chunkX + x); + double zDev = craterZ - (chunkZ + z); + if (xDev * xDev + zDev * zDev < size * size) + { + xDev /= size; + zDev /= size; + final double sqrtY = xDev * xDev + zDev * zDev; + double yDev = sqrtY * sqrtY * 6; + yDev = 5 - yDev; + int helper = 0; + for (int y = 127; y > 0; y--) + { + if (Blocks.AIR != primer.getBlockState(x, y, z).getBlock() && helper <= yDev) + { + primer.setBlockState(x, y, z, Blocks.AIR.getDefaultState()); + helper++; + } + if (helper > yDev) + { + break; + } + } + } + } + } + } + + private double randFromPoint(int x, int z) + { + int n; + n = x + z * 57; + n = n << 13 ^ n; + return 1.0 - (n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff) / 1073741824.0; + } + + @Override + public void populate(int x, int z) + { + BlockFalling.fallInstantly = true; + int i = x * 16; + int j = z * 16; + BlockPos blockpos = new BlockPos(i, 0, j); + Biome biomegenbase = this.world.getBiome(blockpos.add(16, 0, 16)); + this.rand.setSeed(this.world.getSeed()); + long k = this.rand.nextLong() / 2L * 2L + 1L; + long l = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(x * k + z * l ^ this.world.getSeed()); + boolean flag = false; + ForgeEventFactory.onChunkPopulate(true, this, this.world, this.rand, x, z, flag); + if (!ConfigManagerCore.disableMoonVillageGen) + { + flag = this.villageGenerator.generateStructure(this.world, this.rand, new ChunkPos(x, z)); + } + + this.dungeonGeneratorMoon.generateStructure(this.world, this.rand, new ChunkPos(x, z)); + + biomegenbase.decorate(this.world, this.rand, new BlockPos(i, 0, j)); + ForgeEventFactory.onChunkPopulate(false, this, this.world, this.rand, x, z, flag); + BlockFalling.fallInstantly = false; + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + Biome biomegenbase = this.world.getBiome(pos); + return biomegenbase.getSpawnableList(creatureType); + } + + @Override + public void recreateStructures(Chunk chunk, int x, int z) + { + if (!ConfigManagerCore.disableMoonVillageGen) + { + this.villageGenerator.generate(this.world, x, z, null); + } + + this.dungeonGeneratorMoon.generate(this.world, x, z, null); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderOrbit.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderOrbit.java new file mode 100644 index 00000000..53bd0e4d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderOrbit.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import net.minecraft.block.BlockFalling; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.SpawnListEntry; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; + +public class ChunkProviderOrbit extends ChunkProviderBase +{ + + private final Random rand; + + private final World world; + + public ChunkProviderOrbit(World world, long seed, boolean mapFeaturesEnabled) + { + this.rand = new Random(seed); + this.world = world; + } + + @Override + public Chunk generateChunk(int par1, int par2) + { + ChunkPrimer chunkprimer = new ChunkPrimer(); + this.rand.setSeed(par1 * 341873128712L + par2 * 132897987541L); + + final Chunk var4 = new Chunk(this.world, chunkprimer, par1, par2); + + final byte b = (byte) Biome.getIdForBiome(BiomeAdaptive.biomeDefault); + final byte[] biomesArray = var4.getBiomeArray(); + for (int i = 0; i < biomesArray.length; ++i) + { + biomesArray[i] = b; + } + + var4.generateSkylightMap(); + return var4; + } + + @Override + public void populate(int x, int z) + { + BlockFalling.fallInstantly = true; + final int k = x * 16; + final int l = z * 16; + this.rand.setSeed(this.world.getSeed()); + final long i1 = this.rand.nextLong() / 2L * 2L + 1L; + final long j1 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(x * i1 + z * j1 ^ this.world.getSeed()); + if (k == 0 && l == 0) + { + BlockPos pos = new BlockPos(k, 64, l); + this.world.setBlockState(pos, GCBlocks.spaceStationBase.getDefaultState(), 2); + + final TileEntity var8 = this.world.getTileEntity(pos); + + if (var8 instanceof IMultiBlock) + { + ((IMultiBlock) var8).onCreate(this.world, pos); + } + + new WorldGenSpaceStation().generate(this.world, this.rand, new BlockPos(k - 10, 62, l - 3)); + } + BlockFalling.fallInstantly = false; + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + return null; + } + + @Override + public void recreateStructures(Chunk p_180514_1_, int p_180514_2_, int p_180514_3_) + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/EnumCraterSize.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/EnumCraterSize.java new file mode 100644 index 00000000..58183679 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/EnumCraterSize.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +public enum EnumCraterSize +{ + + SMALL(8, 12, 14), MEDIUM(13, 17, 8), LARGE(18, 25, 2), EXTREME(26, 30, 1); + + public final int MIN_SIZE; + public final int MAX_SIZE; + private final int PROBABILITY; + + public static EnumCraterSize[] sizeArray; + + EnumCraterSize(int min, int max, int prob) + { + this.MIN_SIZE = min; + this.MAX_SIZE = max; + this.PROBABILITY = prob; + } + + static + { + int amount = 0; + for (final EnumCraterSize c : EnumCraterSize.values()) + { + amount += c.PROBABILITY; + } + EnumCraterSize.sizeArray = new EnumCraterSize[amount]; + int pointer = 0; + for (final EnumCraterSize c : EnumCraterSize.values()) + { + for (int i = 0; i < c.PROBABILITY; i++) + { + EnumCraterSize.sizeArray[pointer] = c; + pointer++; + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenCavesMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenCavesMoon.java new file mode 100644 index 00000000..63fcf7ef --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenCavesMoon.java @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenCavesMoon extends MapGenBaseMeta +{ + + public static final int BREAK_THROUGH_CHANCE = 25; // 1 in n chance + + protected void generateLargeCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10) + { + this.generateCaveNode(par1, par3, par4, primer, par6, par8, par10, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10, float par12, float par13, float par14, int par15, int par16, double par17) + { + final double d4 = par3 * 16 + 8; + final double d5 = par4 * 16 + 8; + float f3 = 0.0F; + float f4 = 0.0F; + final Random random = new Random(par1); + + if (par16 <= 0) + { + final int j1 = this.range * 16 - 16; + par16 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (par15 == -1) + { + par15 = par16 / 2; + flag = true; + } + + final int k1 = random.nextInt(par16 / 2) + par16 / 4; + + for (final boolean flag1 = random.nextInt(6) == 0; par15 < par16; ++par15) + { + final double d6 = 1.5D + MathHelper.sin(par15 * (float) Math.PI / par16) * par12 * 1.0F; + final double d7 = d6 * par17; + final float f5 = MathHelper.cos(par14); + final float f6 = MathHelper.sin(par14); + par6 += MathHelper.cos(par13) * f5; + par8 += f6; + par10 += MathHelper.sin(par13) * f5; + + if (flag1) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += f4 * 0.1F; + par13 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + + if (!flag && par15 == k1 && par12 > 1.0F && par16 > 0) + { + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 - Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 + Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) + { + final double d8 = par6 - d4; + final double d9 = par10 - d5; + final double d10 = par16 - par15; + final double d11 = par12 + 2.0F + 16.0F; + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) + { + return; + } + + if (par6 >= d4 - 16.0D - d6 * 2.0D && par10 >= d5 - 16.0D - d6 * 2.0D && par6 <= d4 + 16.0D + d6 * 2.0D && par10 <= d5 + 16.0D + d6 * 2.0D) + { + int l1 = MathHelper.floor(par6 - d6) - par3 * 16 - 1; + int i2 = MathHelper.floor(par6 + d6) - par3 * 16 + 1; + int j2 = MathHelper.floor(par8 - d7) - 1; + int k2 = MathHelper.floor(par8 + d7) + 1; + int l2 = MathHelper.floor(par10 - d6) - par4 * 16 - 1; + int i3 = MathHelper.floor(par10 + d6) - par4 * 16 + 1; + + if (l1 < 0) + { + l1 = 0; + } + + if (i2 > 16) + { + i2 = 16; + } + + if (j2 < 1) + { + j2 = 1; + } + + if (k2 > 120) + { + k2 = 120; + } + + if (l2 < 0) + { + l2 = 0; + } + + if (i3 > 16) + { + i3 = 16; + } + + int j3; + for (j3 = l1; j3 < i2; ++j3) + { + for (int l3 = l2; l3 < i3; ++l3) + { + for (int i4 = k2 + 1; i4 >= j2 - 1; --i4) + { + if (i4 >= 0 && i4 < 128) + { + if (i4 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && l3 != l2 && l3 != i3 - 1) + { + i4 = j2; + } + } + } + } + } + + if (true) + { + Block testBlock = GCBlocks.blockMoon; + for (int localY = j2; localY < k2; localY++) + { + final double yfactor = (localY + 0.5D - par8) / d7; + final double yfactorSq = yfactor * yfactor; + + for (int localX = l1; localX < i2; localX++) + { + final double zfactor = (localX + par3 * 16 + 0.5D - par6) / d6; + final double zfactorSq = zfactor * zfactor; + + for (int localZ = l2; localZ < i3; localZ++) + { + final double xfactor = (localZ + par4 * 16 + 0.5D - par10) / d6; + final double xfactorSq = xfactor * xfactor; + + if (xfactorSq + zfactorSq < 1.0D) + { + if (yfactor > -0.7D && xfactorSq + yfactorSq + zfactorSq < 1.0D) + { + IBlockState state = primer.getBlockState(localX, localY, localZ); + if (state.getBlock() == testBlock) + { + int meta = state.getBlock().getMetaFromState(state); + if (meta == 3 || meta == 4 || meta == 5) + { + primer.setBlockState(localX, localY, localZ, Blocks.AIR.getDefaultState()); + } + } + } + } + } + } + } + + if (flag) + { + break; + } + } + } + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int par2, int par3, int par4, int par5, ChunkPrimer primer) + { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + + if (this.rand.nextInt(15) != 0) + { + var7 = 0; + } + + for (int var8 = 0; var8 < var7; ++var8) + { + final double var9 = par2 * 16 + this.rand.nextInt(16); + final double var11 = this.rand.nextInt(this.rand.nextInt(120) + 8); + final double var13 = par3 * 16 + this.rand.nextInt(16); + int var15 = 1; + + if (this.rand.nextInt(4) == 0) + { + this.generateLargeCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for (int var16 = 0; var16 < var15; ++var16) + { + final float var17 = this.rand.nextFloat() * Constants.twoPI; + final float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + + if (this.rand.nextInt(10) == 0) + { + var19 *= this.rand.nextFloat() * this.rand.nextFloat() * 3.0F + 1.0F; + } + + this.generateCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenVillageMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenVillageMoon.java new file mode 100644 index 00000000..37decddf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenVillageMoon.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.structure.MapGenStructure; +import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraft.world.gen.structure.StructureStart; + +public class MapGenVillageMoon extends MapGenStructure +{ + + public static List villageSpawnBiomes = Arrays.asList(new Biome[] + {BiomeAdaptive.biomeDefault}); + private final int terrainType; + private static boolean initialized; + + static + { + try + { + MapGenVillageMoon.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenVillageMoon.initialized) + { + MapGenStructureIO.registerStructure(StructureVillageStartMoon.class, "MoonVillage"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageField.class, "MoonField1"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageField2.class, "MoonField2"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageHouse.class, "MoonHouse"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageRoadPiece.class, "MoonRoadPiece"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillagePathGen.class, "MoonPath"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageTorch.class, "MoonTorch"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageStartPiece.class, "MoonWell"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageWoodHut.class, "MoonWoodHut"); + } + + MapGenVillageMoon.initialized = true; + } + + public MapGenVillageMoon() + { + this.terrainType = 0; + } + + @Override + protected boolean canSpawnStructureAtCoords(int i, int j) + { + final byte numChunks = 32; + final byte offsetChunks = 8; + final int oldi = i; + final int oldj = j; + + if (i < 0) + { + i -= numChunks - 1; + } + + if (j < 0) + { + j -= numChunks - 1; + } + + int randX = i / numChunks; + int randZ = j / numChunks; + final Random var7 = this.world.setRandomSeed(i, j, 10387312); + randX *= numChunks; + randZ *= numChunks; + randX += var7.nextInt(numChunks - offsetChunks); + randZ += var7.nextInt(numChunks - offsetChunks); + + return oldi == randX && oldj == randZ; + } + + @Override + public BlockPos getNearestStructurePos(World worldIn, BlockPos pos, boolean p_180706_3_) + { + this.world = worldIn; + return findNearestStructurePosBySpacing(worldIn, this, pos, 32, 8, 10387312, false, 100, p_180706_3_); + } + + @Override + protected StructureStart getStructureStart(int par1, int par2) + { + GalacticraftCore.logger.debug("Generating Moon Village at x" + par1 * 16 + " z" + par2 * 16); + return new StructureVillageStartMoon(this.world, this.rand, par1, par2, this.terrainType); + } + + @Override + public String getStructureName() + { + return "MoonVillage"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OreGenOtherMods.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OreGenOtherMods.java new file mode 100644 index 00000000..171b06c3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OreGenOtherMods.java @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.ArrayList; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.gen.feature.WorldGenerator; + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import micdoodle8.mods.galacticraft.api.vector.BlockTuple; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.util.BlockUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.dimension.WorldProviderMars; + +//TODO: Seriously redo this +public class OreGenOtherMods +{ + + private World world; + private Random randomGenerator; + private BlockPos pos; + private WorldGenerator oreGen; + public static ArrayList data = new ArrayList<>(); + static + { + for (final String str : ConfigManagerCore.oregenIDs) + { + try + { + int slash = str.indexOf('/'); + String s; + int rarity = 0; // 0 = common 1 = uncommon 2 = rare + int depth = 0; // 0 = even 1 = deep 2 = shallow + int size = 1; // 0 = single 1 = standard 2 = large + boolean extraRandom = false; + int dim = 0; + if (slash >= 0) + { + s = str.substring(0, slash).trim(); + String params = str.substring(slash).toUpperCase(); + if (params.contains("UNCOMMON")) + { + rarity = 1; + } + else if (params.contains("RARE")) + { + rarity = 2; + } + if (params.contains("DEEP")) + { + depth = 1; + } + else if (params.contains("SHALLOW")) + { + depth = 2; + } + if (params.contains("SINGLE")) + { + size = 0; + } + else if (params.contains("LARGE")) + { + size = 2; + } + if (params.contains("XTRARANDOM")) + { + extraRandom = true; + } + if (params.contains("ONLYMOON")) + { + dim = 1; + } + else if (params.contains("ONLYMARS")) + { + dim = 2; + } + } + else + { + s = str; + } + BlockTuple bt = BlockUtil.getBlockTupleFromString(s); + if (bt == null) + { + continue; + } + int meta = bt.meta; + if (meta == -1) + { + meta = 0; + } + OreGenOtherMods.addOre(bt.block, meta, rarity, depth, size, extraRandom, dim); + } catch (final Exception e) + { + GalacticraftCore.logger.error("[config] External Sealable IDs: error parsing '" + str + "'. Must be in the form Blockname or BlockName:metadata followed by / parameters "); + } + } + } + + public static void addOre(Block block, int meta, int rarity, int depth, int clumpSize, boolean extraRandom, int dim) + { + int clusters = 12; + int size = 4; + int min = 0; + int max = 64; + switch (depth) + { + case 0: + // Evenly distributed + size = 6; + clusters = 20; + max = 80; + if (rarity == 1) + { + clusters = 9; + size = 4; + } + else if (rarity == 2) + { + clusters = 6; + size = 3; + max = 96; + } + break; + case 1: + // Deep + size = 5; + clusters = 12; + max = 32; + if (rarity == 1) + { + clusters = 6; + size = 4; + max = 20; + } + else if (rarity == 2) + { + clusters = 2; + size = 3; + max = 16; + } + break; + case 2: + // Shallow + size = 6; + clusters = 15; + min = 32; + max = 80; + if (rarity == 1) + { + clusters = 8; + size = 4; + min = 32; + max = 72; + } + else if (rarity == 2) + { + clusters = 3; + size = 3; + min = 40; + max = 64; + } + } + if (clumpSize == 0) + { + size = 1; + clusters = (3 * clusters) / 2; + } + else if (clumpSize == 2) + { + size *= 4; + clusters /= 2; + } + if (extraRandom) + { + if (depth == 1) + { + min = -max * 3; + } + else + { + max *= 4; + } + } + OreGenData ore = new OreGenData(block, meta, clusters, size, min, max, dim); + OreGenOtherMods.data.add(ore); + } + + @SubscribeEvent + public void onPlanetDecorated(GCCoreEventPopulate.Post event) + { + this.world = event.world; + this.randomGenerator = event.rand; + this.pos = event.pos; + int dimDetected = 0; + WorldProvider prov = world.provider; + if (!(prov instanceof IGalacticraftWorldProvider) || (prov instanceof WorldProviderSpaceStation)) + { + return; + } + Block stoneBlock = null; + int stoneMeta = 0; + if (prov instanceof WorldProviderMoon) + { + stoneBlock = GCBlocks.blockMoon; + stoneMeta = 4; + dimDetected = 1; + } + else if (prov instanceof WorldProviderMars) + { + stoneBlock = MarsBlocks.marsBlock; + stoneMeta = 9; + dimDetected = 2; + } + if (stoneBlock == null) + { + return; + } + for (OreGenData ore : OreGenOtherMods.data) + { + if (ore.dimRestrict == 0 || ore.dimRestrict == dimDetected) + { + this.oreGen = new WorldGenMinableMeta(ore.oreBlock, ore.sizeCluster, ore.oreMeta, true, stoneBlock, stoneMeta); + this.genStandardOre1(ore.numClusters, this.oreGen, ore.minHeight, ore.maxHeight); + } + } + } + + void genStandardOre1(int amountPerChunk, WorldGenerator worldGenerator, int minY, int maxY) + { + for (int var5 = 0; var5 < amountPerChunk; ++var5) + { + BlockPos blockpos = this.pos.add(this.randomGenerator.nextInt(16), this.randomGenerator.nextInt(maxY - minY) + minY, this.randomGenerator.nextInt(16)); + worldGenerator.generate(this.world, this.randomGenerator, blockpos); + } + } + + public static class OreGenData + { + + public Block oreBlock = GCBlocks.blockMoon; + public int oreMeta = 0; + public int sizeCluster = 4; + public int numClusters = 8; + public int minHeight = 0; + public int maxHeight = 128; + public int dimRestrict = 0; + + public OreGenData(Block block, int meta, int num, int cluster, int min, int max, int dim) + { + this.oreBlock = block; + this.oreMeta = meta; + this.sizeCluster = cluster; + this.numClusters = num; + this.minHeight = min; + this.maxHeight = max; + this.dimRestrict = dim; + } + + public OreGenData(Block block, int meta, int num, int cluster) + { + this.oreBlock = block; + this.oreMeta = meta; + this.sizeCluster = cluster; + this.numClusters = num; + this.minHeight = 0; + this.maxHeight = 128; + } + + public OreGenData(Block block, int meta, int num) + { + this.oreBlock = block; + this.oreMeta = meta; + this.sizeCluster = 4; + this.numClusters = num; + this.minHeight = 0; + this.maxHeight = 128; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OverworldGenerator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OverworldGenerator.java new file mode 100644 index 00000000..f1561ac8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OverworldGenerator.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockMatcher; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.common.IWorldGenerator; + +public class OverworldGenerator implements IWorldGenerator +{ + + private final int amountPerChunk; + private final int maxGenerateLevel; + private final int minGenerateLevel; + private final int amountPerVein; + private final Block oreBlock; + private final int metadata; + + public OverworldGenerator(Block oreBlock, int metadata, int amountPerChunk, int minGenLevel, int maxGenLevel, int amountPerVein) + { + this.oreBlock = oreBlock; + this.metadata = metadata; + this.amountPerChunk = amountPerChunk; + this.minGenerateLevel = minGenLevel; + this.maxGenerateLevel = maxGenLevel; + this.amountPerVein = amountPerVein; + } + + @Override + public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) + { + if (!(world.provider instanceof IGalacticraftWorldProvider)) + { + for (int i = 0; i < this.amountPerChunk; i++) + { + int x = chunkX * 16 + random.nextInt(16); + int z = chunkZ * 16 + random.nextInt(16); + int y = random.nextInt(Math.max(this.maxGenerateLevel - this.minGenerateLevel, 0)) + this.minGenerateLevel; + this.generateOre(world, random, x, y, z); + } + } + } + + private boolean generateOre(World par1World, Random par2Random, int par3, int par4, int par5) + { + float var6 = par2Random.nextFloat() * (float) Math.PI; + double var7 = par3 + 8 + MathHelper.sin(var6) * this.amountPerVein / 8.0F; + double var9 = par3 + 8 - MathHelper.sin(var6) * this.amountPerVein / 8.0F; + double var11 = par5 + 8 + MathHelper.cos(var6) * this.amountPerVein / 8.0F; + double var13 = par5 + 8 - MathHelper.cos(var6) * this.amountPerVein / 8.0F; + double var15 = par4 + par2Random.nextInt(3) - 2; + double var17 = par4 + par2Random.nextInt(3) - 2; + + for (int var19 = 0; var19 <= this.amountPerVein; ++var19) + { + double var20 = var7 + (var9 - var7) * var19 / this.amountPerVein; + double var22 = var15 + (var17 - var15) * var19 / this.amountPerVein; + double var24 = var11 + (var13 - var11) * var19 / this.amountPerVein; + double var26 = par2Random.nextDouble() * this.amountPerVein / 16.0D; + double var28 = (MathHelper.sin(var19 * (float) Math.PI / this.amountPerVein) + 1.0F) * var26 + 1.0D; + double var30 = (MathHelper.sin(var19 * (float) Math.PI / this.amountPerVein) + 1.0F) * var26 + 1.0D; + int var32 = MathHelper.floor(var20 - var28 / 2.0D); + int var33 = MathHelper.floor(var22 - var30 / 2.0D); + int var34 = MathHelper.floor(var24 - var28 / 2.0D); + int var35 = MathHelper.floor(var20 + var28 / 2.0D); + int var36 = MathHelper.floor(var22 + var30 / 2.0D); + int var37 = MathHelper.floor(var24 + var28 / 2.0D); + + for (int var38 = var32; var38 <= var35; ++var38) + { + double var39 = (var38 + 0.5D - var20) / (var28 / 2.0D); + + if (var39 * var39 < 1.0D) + { + for (int var41 = var33; var41 <= var36; ++var41) + { + double var42 = (var41 + 0.5D - var22) / (var30 / 2.0D); + + if (var39 * var39 + var42 * var42 < 1.0D) + { + for (int var44 = var34; var44 <= var37; ++var44) + { + double var45 = (var44 + 0.5D - var24) / (var28 / 2.0D); + + BlockPos pos = new BlockPos(var38, var41, var44); + IBlockState state = par1World.getBlockState(pos); + if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && state.getBlock().isReplaceableOreGen(state, par1World, pos, BlockMatcher.forBlock(Blocks.STONE))) + { + par1World.setBlockState(new BlockPos(var38, var41, var44), this.oreBlock.getStateFromMeta(this.metadata), 2); + } + } + } + } + } + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentGC.java new file mode 100644 index 00000000..4fd96f5a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentGC.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public abstract class StructureComponentGC extends StructureComponent +{ + + public StructureComponentGC(int var1) + { + super(var1); + } + + public static StructureBoundingBox getComponentToAddBoundingBox(int x, int y, int z, int lengthOffset, int heightOffset, int widthOffset, int length, int height, int width, EnumFacing coordBaseMode) + { + if (coordBaseMode != null) + { + switch (SwitchEnumFacing.field_176064_a[coordBaseMode.ordinal()]) + { + case 0: + return new StructureBoundingBox(x + lengthOffset, y + heightOffset, z + widthOffset, x + length + lengthOffset, y + height + heightOffset, z + width + widthOffset); + case 1: + return new StructureBoundingBox(x - width + widthOffset, y + heightOffset, z + lengthOffset, x + widthOffset, y + height + heightOffset, z + length + lengthOffset); + case 2: + return new StructureBoundingBox(x - length - lengthOffset, y + heightOffset, z - width - widthOffset, x - lengthOffset, y + height + heightOffset, z - widthOffset); + case 3: + return new StructureBoundingBox(x + widthOffset, y + heightOffset, z - length, x + width + widthOffset, y + height + heightOffset, z + lengthOffset); + } + } + return new StructureBoundingBox(x + lengthOffset, y + heightOffset, z + widthOffset, x + length + lengthOffset, y + height + heightOffset, z + width + widthOffset); + } + + protected void placeSpawnerAtCurrentPosition(World var1, Random var2, int var3, int var4, int var5, ResourceLocation var6, StructureBoundingBox var7) + { + final int var8 = this.getXWithOffset(var3, var5); + final int var9 = this.getYWithOffset(var4); + final int var10 = this.getZWithOffset(var3, var5); + + BlockPos pos = new BlockPos(var8, var9, var10); + if (var7.isVecInside(pos) && var1.getBlockState(pos).getBlock() != Blocks.MOB_SPAWNER) + { + var1.setBlockState(pos, Blocks.MOB_SPAWNER.getDefaultState(), 2); + final TileEntityMobSpawner var11 = (TileEntityMobSpawner) var1.getTileEntity(pos); + + if (var11 != null) + { + var11.getSpawnerBaseLogic().setEntityId(var6); + } + } + } + + protected int[] offsetTowerCoords(int var1, int var2, int var3, int var4, int var5) + { + final int var6 = this.getXWithOffset(var1, var3); + final int var7 = this.getYWithOffset(var2); + final int var8 = this.getZWithOffset(var1, var3); + return var5 == 0 ? new int[] + {var6 + 1, var7 - 1, var8 - var4 / 2} : var5 == 1 ? new int[] + {var6 + var4 / 2, var7 - 1, var8 + 1} : var5 == 2 ? new int[] + {var6 - 1, var7 - 1, var8 + var4 / 2} : var5 == 3 ? new int[] + {var6 - var4 / 2, var7 - 1, var8 - 1} : new int[] + {var1, var2, var3}; + } + + public int[] getOffsetAsIfRotated(int[] var1, EnumFacing var2) + { + final EnumFacing var3 = getCoordBaseMode(); + final int[] var4 = new int[3]; + this.setCoordBaseMode(var2); + var4[0] = this.getXWithOffset(var1[0], var1[2]); + var4[1] = this.getYWithOffset(var1[1]); + var4[2] = this.getZWithOffset(var1[0], var1[2]); + this.setCoordBaseMode(var3); + return var4; + } + + @Override + protected int getXWithOffset(int var1, int var2) + { + switch (getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return this.boundingBox.minX + var1; + + case 1: + return this.boundingBox.maxX - var2; + + case 2: + return this.boundingBox.maxX - var1; + + case 3: + return this.boundingBox.minX + var2; + + default: + return var1; + } + } + + @Override + protected int getZWithOffset(int var1, int var2) + { + switch (getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return this.boundingBox.minZ + var2; + + case 1: + return this.boundingBox.minZ + var1; + + case 2: + return this.boundingBox.maxZ - var2; + + case 3: + return this.boundingBox.maxZ - var1; + + default: + return var2; + } + } + + @Override + protected int getYWithOffset(int var1) + { + return super.getYWithOffset(var1); + } + + protected static class SwitchEnumFacing + { + + protected static int[] field_176064_a = new int[EnumFacing.VALUES.length]; + + static + { + try + { + field_176064_a[EnumFacing.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError var4) + { + } + + try + { + field_176064_a[EnumFacing.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError var3) + { + } + + try + { + field_176064_a[EnumFacing.WEST.ordinal()] = 3; + } catch (NoSuchFieldError var2) + { + } + + try + { + field_176064_a[EnumFacing.EAST.ordinal()] = 4; + } catch (NoSuchFieldError var1) + { + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentMoon.java new file mode 100644 index 00000000..7dc82430 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentMoon.java @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public abstract class StructureComponentMoon extends StructureComponent +{ + + public StructureComponentMoon() + { + } + + public StructureComponentMoon(int var1) + { + super(var1); + } + + public static StructureBoundingBox getComponentToAddBoundingBox(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9) + { + switch (var9) + { + case 0: + return new StructureBoundingBox(var0 + var3, var1 + var4, var2 + var5, var0 + var6 + var3, var1 + var7 + var4, var2 + var8 + var5); + + case 1: + return new StructureBoundingBox(var0 - var8 + var5, var1 + var4, var2 + var3, var0 + var5, var1 + var7 + var4, var2 + var6 + var3); + + case 2: + return new StructureBoundingBox(var0 - var6 - var3, var1 + var4, var2 - var8 - var5, var0 - var3, var1 + var7 + var4, var2 - var5); + + case 3: + return new StructureBoundingBox(var0 + var5, var1 + var4, var2 - var6, var0 + var8 + var5, var1 + var7 + var4, var2 + var3); + + default: + return new StructureBoundingBox(var0 + var3, var1 + var4, var2 + var5, var0 + var6 + var3, var1 + var7 + var4, var2 + var8 + var5); + } + } + + protected TileEntityMobSpawner placeSpawnerAtCurrentPosition(World var1, Random var2, int var3, int var4, int var5, ResourceLocation var6, StructureBoundingBox var7) + { + TileEntityMobSpawner var8 = null; + final int var9 = this.getXWithOffset(var3, var5); + final int var10 = this.getYWithOffset(var4); + final int var11 = this.getZWithOffset(var3, var5); + + if (var7.isVecInside(new BlockPos(var9, var10, var11)) && var1.getBlockState(new BlockPos(var9, var10, var11)).getBlock() != Blocks.MOB_SPAWNER) + { + var1.setBlockState(new BlockPos(var9, var10, var11), Blocks.MOB_SPAWNER.getDefaultState(), 2); + var8 = (TileEntityMobSpawner) var1.getTileEntity(new BlockPos(var9, var10, var11)); + + if (var8 != null) + { + var8.getSpawnerBaseLogic().setEntityId(var6); + } + } + + return var8; + } + + protected int[] offsetTowerCoords(int var1, int var2, int var3, int var4, int var5) + { + final int var6 = this.getXWithOffset(var1, var3); + final int var7 = this.getYWithOffset(var2); + final int var8 = this.getZWithOffset(var1, var3); + return var5 == 0 ? new int[] + {var6 + 1, var7 - 1, var8 - var4 / 2} : var5 == 1 ? new int[] + {var6 + var4 / 2, var7 - 1, var8 + 1} : var5 == 2 ? new int[] + {var6 - 1, var7 - 1, var8 + var4 / 2} : var5 == 3 ? new int[] + {var6 - var4 / 2, var7 - 1, var8 - 1} : new int[] + {var1, var2, var3}; + } + + @Override + protected int getXWithOffset(int var1, int var2) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return this.boundingBox.minX + var1; + + case 1: + return this.boundingBox.maxX - var2; + + case 2: + return this.boundingBox.maxX - var1; + + case 3: + return this.boundingBox.minX + var2; + + default: + return var1; + } + } + + @Override + protected int getYWithOffset(int var1) + { + return super.getYWithOffset(var1); + } + + @Override + protected int getZWithOffset(int var1, int var2) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return this.boundingBox.minZ + var2; + + case 1: + return this.boundingBox.minZ + var1; + + case 2: + return this.boundingBox.maxZ - var2; + + case 3: + return this.boundingBox.maxZ - var1; + + default: + return var2; + } + } + + protected int getXWithOffsetAsIfRotated(int var1, int var2, int var3) + { + if (this.getCoordBaseMode().getHorizontalIndex() < 0) + { + return var1; + } else + { + switch ((this.getCoordBaseMode().getHorizontalIndex() + var3) % 4) + { + case 0: + return this.boundingBox.minX + var1; + + case 1: + return this.boundingBox.maxX - var2; + + case 2: + return this.boundingBox.maxX - var1; + + case 3: + return this.boundingBox.minX + var2; + + default: + return var1; + } + } + } + + protected int getZWithOffsetAsIfRotated(int var1, int var2, int var3) + { + if (this.getCoordBaseMode().getHorizontalIndex() < 0) + { + return var1; + } else + { + switch ((this.getCoordBaseMode().getHorizontalIndex() + var3) % 4) + { + case 0: + return this.boundingBox.minZ + var2; + + case 1: + return this.boundingBox.minZ + var1; + + case 2: + return this.boundingBox.maxZ - var2; + + case 3: + return this.boundingBox.maxZ - var1; + + default: + return var2; + } + } + } + + protected void placeBlockRotated(World var1, Block var2, int var3, int var4, int var5, int var6, int var7, StructureBoundingBox var8) + { + final int var9 = this.getXWithOffsetAsIfRotated(var4, var6, var7); + final int var10 = this.getYWithOffset(var5); + final int var11 = this.getZWithOffsetAsIfRotated(var4, var6, var7); + + if (var8.isVecInside(new BlockPos(var9, var10, var11))) + { + var1.setBlockState(new BlockPos(var9, var10, var11), var2.getStateFromMeta(var3), 2); + } + } + + protected void fillBlocksRotated(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8, Block var9, int var10, int var11) + { + for (int var12 = var4; var12 <= var7; ++var12) + { + for (int var13 = var3; var13 <= var6; ++var13) + { + for (int var14 = var5; var14 <= var8; ++var14) + { + this.placeBlockRotated(var1, var9, var10, var13, var12, var14, var11, var2); + } + } + } + } + + protected void fillAirRotated(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9) + { + this.fillBlocksRotated(var1, var2, var3, var4, var5, var6, var7, var8, Blocks.AIR, 0, var9); + } + + protected int getStairMeta(int var1) + { + switch ((this.getCoordBaseMode().getHorizontalIndex() + var1) % 4) + { + case 0: + return 0; + + case 1: + return 2; + + case 2: + return 1; + + case 3: + return 3; + + default: + return -1; + } + } + + protected int getLadderMeta(int var1) + { + switch ((this.getCoordBaseMode().getHorizontalIndex() + var1) % 4) + { + case 0: + return 4; + + case 1: + return 2; + + case 2: + return 5; + + case 3: + return 3; + + default: + return -1; + } + } + + protected int getLadderMeta(int var1, int var2) + { + return this.getLadderMeta(var1 + var2); + } + + public void nullifySkyLightForBoundingBox(World var1) + { + this.nullifySkyLight(var1, this.boundingBox.minX - 1, this.boundingBox.minY - 1, this.boundingBox.minZ - 1, this.boundingBox.maxX + 1, this.boundingBox.maxY + 1, this.boundingBox.maxZ + 1); + } + + public void nullifySkyLightAtCurrentPosition(World var1, int var2, int var3, int var4, int var5, int var6, int var7) + { + this.nullifySkyLight(var1, this.getXWithOffset(var2, var4), this.getYWithOffset(var3), this.getZWithOffset(var2, var4), this.getXWithOffset(var5, var7), this.getYWithOffset(var6), + this.getZWithOffset(var5, var7)); + } + + public void nullifySkyLight(World var1, int var2, int var3, int var4, int var5, int var6, int var7) + { + for (int var8 = var2; var8 <= var5; ++var8) + { + for (int var9 = var4; var9 <= var7; ++var9) + { + for (int var10 = var3; var10 <= var6; ++var10) + { + var1.setLightFor(EnumSkyBlock.SKY, new BlockPos(var8, var10, var9), 0); + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillage.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillage.java new file mode 100644 index 00000000..4af98e1a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillage.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.entities.EntityAlienVillager; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class StructureComponentVillage extends StructureComponent +{ + + static + { + try + { + MapGenVillageMoon.initiateStructures(); + } catch (Throwable e) + { + + } + } + + private int villagersSpawned; + protected StructureComponentVillageStartPiece startPiece; + + public StructureComponentVillage() + { + } + + protected StructureComponentVillage(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2) + { + super(par2); + this.startPiece = par1ComponentVillageStartPiece; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbttagcompound) + { + nbttagcompound.setInteger("VCount", this.villagersSpawned); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + this.villagersSpawned = nbt.getInteger("VCount"); + } + + protected StructureComponent getNextComponentNN(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, List par2List, Random par3Random, int par4, int par5) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY + par4, + this.boundingBox.minZ + par5, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + case 1: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, + this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + case 2: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY + par4, + this.boundingBox.minZ + par5, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + case 3: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, + this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + default: + return null; + } + } + + protected StructureComponent getNextComponentPP(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, List par2List, Random par3Random, int par4, int par5) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY + par4, + this.boundingBox.minZ + par5, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + case 1: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, + this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + case 2: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY + par4, + this.boundingBox.minZ + par5, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + case 3: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, + this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + default: + return null; + } + } + + protected int getAverageGroundLevel(World world, StructureBoundingBox boundingBox) + { + int i = 0; + int j = 0; + BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(); + + for (int k = this.boundingBox.minZ; k <= this.boundingBox.maxZ; ++k) + { + for (int l = this.boundingBox.minX; l <= this.boundingBox.maxX; ++l) + { + mutableBlockPos.setPos(l, 64, k); + + if (boundingBox.isVecInside(mutableBlockPos)) + { + i += world.getTopSolidOrLiquidBlock(mutableBlockPos).getY(); + ++j; + } + } + } + + if (j == 0) + { + return -1; + } else + { + return i / j; + } + } + + protected static boolean canVillageGoDeeper(StructureBoundingBox par0StructureBoundingBox) + { + return par0StructureBoundingBox != null && par0StructureBoundingBox.minY > 10; + } + + protected void spawnVillagers(World par1World, StructureBoundingBox par2StructureBoundingBox, int par3, int par4, int par5, int par6) + { + if (this.villagersSpawned < par6) + { + for (int var7 = this.villagersSpawned; var7 < par6; ++var7) + { + int var8 = this.getXWithOffset(par3 + var7, par5); + final int var9 = this.getYWithOffset(par4); + int var10 = this.getZWithOffset(par3 + var7, par5); + + var8 += par1World.rand.nextInt(3) - 1; + var10 += par1World.rand.nextInt(3) - 1; + + if (!par2StructureBoundingBox.isVecInside(new BlockPos(var8, var9, var10))) + { + break; + } + + ++this.villagersSpawned; + final EntityAlienVillager var11 = new EntityAlienVillager(par1World); + var11.setLocationAndAngles(var8 + 0.5D, var9, var10 + 0.5D, 0.0F, 0.0F); + par1World.spawnEntity(var11); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField.java new file mode 100644 index 00000000..a127f52a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageField extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageField() + { + } + + public StructureComponentVillageField(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + public static StructureComponentVillageField func_74900_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 13, 4, 9, par6); + return StructureComponent.findIntersecting(par1List, var8) == null ? new StructureComponentVillageField(par0ComponentVillageStartPiece, par7, par2Random, var8, par6) : null; + } + + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 7 - 1, 0); + } + + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 1, 0, 12, 4, 8, Blocks.AIR.getDefaultState(), Blocks.AIR.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 1, 2, 0, 7, Blocks.DIRT.getDefaultState(), Blocks.DIRT.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 4, 0, 1, 5, 0, 7, Blocks.DIRT.getDefaultState(), Blocks.DIRT.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 7, 0, 1, 8, 0, 7, Blocks.DIRT.getDefaultState(), Blocks.DIRT.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 10, 0, 1, 11, 0, 7, Blocks.DIRT.getDefaultState(), Blocks.DIRT.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 0, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 6, 0, 0, 6, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 12, 0, 0, 12, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 0, 11, 0, 0, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 8, 11, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 3, 0, 1, 3, 0, 7, Blocks.FLOWING_WATER.getDefaultState(), Blocks.FLOWING_WATER.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 9, 0, 1, 9, 0, 7, Blocks.FLOWING_WATER.getDefaultState(), Blocks.FLOWING_WATER.getDefaultState(), false); + int var4; + + for (var4 = 1; var4 <= 7; ++var4) + { + for (int i = 1; i < 12; i++) + { + if (i % 3 != 0) + { + if (par2Random.nextInt(3) == 0) + { + this.setBlockState(par1World, Blocks.SAPLING.getStateFromMeta(MathHelper.getInt(par2Random, 0, 2)), i, 1, var4, par3StructureBoundingBox); + } + } + } + } + + for (var4 = 0; var4 < 9; ++var4) + { + for (int var5 = 0; var5 < 13; ++var5) + { + this.clearCurrentPositionBlocksUpwards(par1World, var5, 4, var4, par3StructureBoundingBox); + this.replaceAirAndLiquidDownwards(par1World, Blocks.DIRT.getDefaultState(), var5, -1, var4, par3StructureBoundingBox); + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField2.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField2.java new file mode 100644 index 00000000..2452d3ab --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField2.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageField2 extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + private Block cropTypeA; + private Block cropTypeB; + private Block cropTypeC; + private Block cropTypeD; + + public StructureComponentVillageField2() + { + } + + public StructureComponentVillageField2(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + this.cropTypeA = this.getRandomCrop(par3Random); + this.cropTypeB = this.getRandomCrop(par3Random); + this.cropTypeC = this.getRandomCrop(par3Random); + this.cropTypeD = this.getRandomCrop(par3Random); + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + nbt.setInteger("CropTypeA", Block.getIdFromBlock(this.cropTypeA)); + nbt.setInteger("CropTypeB", Block.getIdFromBlock(this.cropTypeB)); + nbt.setInteger("CropTypeC", Block.getIdFromBlock(this.cropTypeC)); + nbt.setInteger("CropTypeD", Block.getIdFromBlock(this.cropTypeD)); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + this.cropTypeA = Block.getBlockById(nbt.getInteger("CropTypeA")); + this.cropTypeB = Block.getBlockById(nbt.getInteger("CropTypeB")); + this.cropTypeC = Block.getBlockById(nbt.getInteger("CropTypeC")); + this.cropTypeD = Block.getBlockById(nbt.getInteger("CropTypeD")); + } + + private Block getRandomCrop(Random par1Random) + { + switch (par1Random.nextInt(5)) + { + case 0: + return Blocks.CARROTS; + case 1: + return Blocks.POTATOES; + default: + return Blocks.WHEAT; + } + } + + public static StructureComponentVillageField2 func_74900_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final StructureBoundingBox structureboundingbox = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 13, 4, 9, par6); + return StructureComponentVillage.canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(par1List, structureboundingbox) == null + ? new StructureComponentVillageField2(par0ComponentVillageStartPiece, par7, par2Random, structureboundingbox, par6) : null; + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 4 - 1, 0); + } + + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 1, 0, 12, 4, 8, Blocks.AIR.getDefaultState(), Blocks.AIR.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 1, 2, 0, 7, Blocks.FARMLAND.getDefaultState(), Blocks.FARMLAND.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 4, 0, 1, 5, 0, 7, Blocks.FARMLAND.getDefaultState(), Blocks.FARMLAND.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 7, 0, 1, 8, 0, 7, Blocks.FARMLAND.getDefaultState(), Blocks.FARMLAND.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 10, 0, 1, 11, 0, 7, Blocks.FARMLAND.getDefaultState(), Blocks.FARMLAND.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 0, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 6, 0, 0, 6, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 12, 0, 0, 12, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 0, 11, 0, 0, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 8, 11, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 3, 0, 1, 3, 0, 7, Blocks.FLOWING_WATER.getDefaultState(), Blocks.FLOWING_WATER.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 9, 0, 1, 9, 0, 7, Blocks.FLOWING_WATER.getDefaultState(), Blocks.FLOWING_WATER.getDefaultState(), false); + int i; + + for (i = 1; i <= 7; ++i) + { + this.setBlockState(par1World, this.cropTypeA.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 1, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeA.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 2, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeB.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 4, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeB.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 5, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeC.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 7, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeC.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 8, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeD.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 10, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeD.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 11, 1, i, par3StructureBoundingBox); + } + + for (i = 0; i < 9; ++i) + { + for (int j = 0; j < 13; ++j) + { + this.clearCurrentPositionBlocksUpwards(par1World, j, 4, i, par3StructureBoundingBox); + this.replaceAirAndLiquidDownwards(par1World, Blocks.DIRT.getDefaultState(), j, -1, i, par3StructureBoundingBox); + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageHouse.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageHouse.java new file mode 100644 index 00000000..a221713b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageHouse.java @@ -0,0 +1,472 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockGlowstoneTorch; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageHouse extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageHouse() + { + } + + public StructureComponentVillageHouse(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + } + + public static StructureComponentVillageHouse func_74921_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 17, 9, 17, par6); + return StructureComponent.findIntersecting(par1List, var8) == null ? new StructureComponentVillageHouse(par0ComponentVillageStartPiece, par7, par2Random, var8, par6) : null; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 9 - 1, 0); + } + + this.fillWithAir(par1World, par3StructureBoundingBox, 3, 0, 3, 13, 9, 13); + this.fillWithAir(par1World, par3StructureBoundingBox, 5, 0, 2, 11, 9, 14); + this.fillWithAir(par1World, par3StructureBoundingBox, 2, 0, 5, 14, 9, 11); + + for (int i = 3; i <= 13; i++) + { + for (int j = 3; j <= 13; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + for (int i = 5; i <= 11; i++) + { + for (int j = 2; j <= 14; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + for (int i = 2; i <= 14; i++) + { + for (int j = 5; j <= 11; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + int yLevel = 0; + + for (yLevel = -8; yLevel < 4; yLevel++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 11, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 15, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 1, par3StructureBoundingBox); + } + + yLevel = 4; + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 11, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 15, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 1, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode()), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateY()), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().getOpposite()), 8, yLevel, 14, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateYCCW()), 2, yLevel, 8, par3StructureBoundingBox); + + yLevel = 5; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 5, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 14, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 11, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 2, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + + yLevel = 6; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 4, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 11, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 13, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 14, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 12, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 5, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 3, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 2, par3StructureBoundingBox); + + yLevel = 7; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 6, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 9, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 13, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 14, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 10, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 7, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 3, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 2, par3StructureBoundingBox); + + yLevel = 8; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 6, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 9, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 12, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 13, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 10, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 7, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 4, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 3, par3StructureBoundingBox); + + // extras + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 9, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 9, par3StructureBoundingBox); + + yLevel = 9; + + for (int i = 5; i <= 11; i++) + { + for (int j = 5; j <= 11; j++) + { + if (!(j == 5 && i == 5 || j == 5 && i == 11 || j == 11 && i == 5 || j == 11 && i == 11)) + { + if (i >= 7 && i <= 9 && j >= 7 && j <= 9) + { + this.setBlockState(par1World, Blocks.GLASS.getDefaultState(), i, yLevel, j, par3StructureBoundingBox); + } else + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), i, yLevel, j, par3StructureBoundingBox); + } + } + } + } + + this.spawnVillagers(par1World, par3StructureBoundingBox, 6, 5, 6, 4); + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillagePathGen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillagePathGen.java new file mode 100644 index 00000000..79cfe413 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillagePathGen.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillagePathGen extends StructureComponentVillageRoadPiece +{ + + private int averageGroundLevel; + + public StructureComponentVillagePathGen() + { + } + + public StructureComponentVillagePathGen(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + this.averageGroundLevel = Math.max(par4StructureBoundingBox.getXSize(), par4StructureBoundingBox.getZSize()); + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + @Override + public void buildComponent(StructureComponent par1StructureComponent, List par2List, Random par3Random) + { + boolean var4 = false; + int var5; + StructureComponent var6; + + for (var5 = par3Random.nextInt(5); var5 < this.averageGroundLevel - 8; var5 += 2 + par3Random.nextInt(5)) + { + var6 = this.getNextComponentNN((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, 0, var5); + + if (var6 != null) + { + var5 += Math.max(var6.getBoundingBox().getXSize(), var6.getBoundingBox().getZSize()); + var4 = true; + } + } + + for (var5 = par3Random.nextInt(5); var5 < this.averageGroundLevel - 8; var5 += 2 + par3Random.nextInt(5)) + { + var6 = this.getNextComponentPP((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, 0, var5); + + if (var6 != null) + { + var5 += Math.max(var6.getBoundingBox().getXSize(), var6.getBoundingBox().getZSize()); + var4 = true; + } + } + + if (var4 && par3Random.nextInt(3) > 0) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, + this.boundingBox.minY, this.boundingBox.maxZ - 2, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + break; + case 1: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX, + this.boundingBox.minY, this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + break; + case 2: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, + this.boundingBox.minY, this.boundingBox.minZ, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + break; + case 3: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX - 2, + this.boundingBox.minY, this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + } + } + + if (var4 && par3Random.nextInt(3) > 0) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, + this.boundingBox.minY, this.boundingBox.maxZ - 2, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + break; + case 1: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX, + this.boundingBox.minY, this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + break; + case 2: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, + this.boundingBox.minY, this.boundingBox.minZ, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + break; + case 3: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX - 2, + this.boundingBox.minY, this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + } + } + } + + public static StructureBoundingBox func_74933_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6) + { + for (int var7 = 7 * MathHelper.getInt(par2Random, 3, 5); var7 >= 7; var7 -= 7) + { + final StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 3, 3, var7, par6); + + if (StructureComponent.findIntersecting(par1List, var8) == null) + { + return var8; + } + } + + return null; + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + final Block var4 = Blocks.PLANKS; + + for (int var5 = this.boundingBox.minX; var5 <= this.boundingBox.maxX; ++var5) + { + for (int var6 = this.boundingBox.minZ; var6 <= this.boundingBox.maxZ; ++var6) + { + BlockPos pos = new BlockPos(var5, par1World.getTopSolidOrLiquidBlock(new BlockPos(var5, 0, var6)).getY() - 1, var6); + IBlockState state = par1World.getBlockState(pos); + if (par3StructureBoundingBox.isVecInside(new BlockPos(var5, 64, var6)) + && (state.getBlock() == GCBlocks.blockMoon && state.getBlock().getMetaFromState(state) == 5 || Blocks.AIR == state.getBlock())) + { + final int var7 = par1World.getTopSolidOrLiquidBlock(new BlockPos(var5, 0, var6)).getY() - 1; + par1World.setBlockState(new BlockPos(var5, var7, var6), var4.getStateFromMeta(1), 2); + } + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageRoadPiece.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageRoadPiece.java new file mode 100644 index 00000000..cf655c7a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageRoadPiece.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +public abstract class StructureComponentVillageRoadPiece extends StructureComponentVillage +{ + + public StructureComponentVillageRoadPiece() + { + } + + protected StructureComponentVillageRoadPiece(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2) + { + super(par1ComponentVillageStartPiece, par2); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageStartPiece.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageStartPiece.java new file mode 100644 index 00000000..07c2d470 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageStartPiece.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.ArrayList; +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageStartPiece extends StructureComponentVillageWell +{ + + public BiomeProvider biomeProvider; + public int terrainType; + public StructureVillagePieceWeightMoon structVillagePieceWeight; + public ArrayList structureVillageWeightedPieceList; + public ArrayList pendingHouses = new ArrayList(); + public ArrayList pendingRoads = new ArrayList(); + + public StructureComponentVillageStartPiece() + { + } + + public StructureComponentVillageStartPiece(BiomeProvider biomeProvider, int par2, Random par3Random, int par4, int par5, ArrayList par6ArrayList, int par7) + { + super(null, 0, par3Random, par4, par5); + this.biomeProvider = biomeProvider; + this.structureVillageWeightedPieceList = par6ArrayList; + this.terrainType = par7; + this.startPiece = this; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("TerrainType", this.terrainType); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.terrainType = nbt.getInteger("TerrainType"); + } + + public BiomeProvider getBiomeProvider() + { + return this.biomeProvider; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageTorch.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageTorch.java new file mode 100644 index 00000000..eb2e0307 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageTorch.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockGlowstoneTorch; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageTorch extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageTorch() + { + } + + public StructureComponentVillageTorch(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + public static StructureBoundingBox func_74904_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6) + { + final StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 3, 4, 2, par6); + return StructureComponent.findIntersecting(par1List, var7) != null ? null : var7; + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 4 - 1, 0); + } + + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 2, 3, 1, Blocks.AIR.getDefaultState(), Blocks.AIR.getDefaultState(), false); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 0, 0, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 1, 0, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 2, 0, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.WOOL.getStateFromMeta(15), 1, 3, 0, par3StructureBoundingBox); + boolean flag = this.getCoordBaseMode() == EnumFacing.EAST || this.getCoordBaseMode() == EnumFacing.NORTH; + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateY()), flag ? 2 : 0, 3, 0, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode()), 1, 3, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateYCCW()), flag ? 0 : 2, 3, 0, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().getOpposite()), 1, 3, -1, par3StructureBoundingBox); + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWell.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWell.java new file mode 100644 index 00000000..058b5979 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWell.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import net.minecraft.block.BlockPlanks; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageWell extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageWell() + { + } + + public StructureComponentVillageWell(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, int par4, int par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(EnumFacing.byIndex(par3Random.nextInt(4))); + + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + case 2: + this.boundingBox = new StructureBoundingBox(par4, 64, par5, par4 + 6 - 1, 78, par5 + 6 - 1); + break; + default: + this.boundingBox = new StructureBoundingBox(par4, 64, par5, par4 + 6 - 1, 78, par5 + 6 - 1); + } + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + @Override + public void buildComponent(StructureComponent par1StructureComponent, List par2List, Random par3Random) + { + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, + this.boundingBox.maxY - 4, this.boundingBox.minZ + 1, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, + this.boundingBox.maxY - 4, this.boundingBox.minZ + 1, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX + 1, + this.boundingBox.maxY - 4, this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX + 1, + this.boundingBox.maxY - 4, this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + } + + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 3, 0); + } + + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 1, 4, 12, 4, GCBlocks.basicBlock.getStateFromMeta(4), Blocks.FLOWING_WATER.getDefaultState(), false); + this.setBlockState(par1World, Blocks.AIR.getDefaultState(), 2, 12, 2, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.AIR.getDefaultState(), 3, 12, 2, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.AIR.getDefaultState(), 2, 12, 3, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.AIR.getDefaultState(), 3, 12, 3, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 13, 1, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 14, 1, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 4, 13, 1, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 4, 14, 1, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 13, 4, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 14, 4, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 4, 13, 4, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 4, 14, 4, par3StructureBoundingBox); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 15, 1, 4, 15, 4, GCBlocks.basicBlock.getStateFromMeta(4), GCBlocks.basicBlock.getStateFromMeta(4), false); + + for (int var4 = 0; var4 <= 5; ++var4) + { + for (int var5 = 0; var5 <= 5; ++var5) + { + if (var5 == 0 || var5 == 5 || var4 == 0 || var4 == 5) + { + this.setBlockState(par1World, Blocks.PLANKS.getDefaultState().withProperty(BlockPlanks.VARIANT, BlockPlanks.EnumType.SPRUCE), var5, 11, var4, par3StructureBoundingBox); + this.clearCurrentPositionBlocksUpwards(par1World, var5, 12, var4, par3StructureBoundingBox); + } + } + } + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWoodHut.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWoodHut.java new file mode 100644 index 00000000..c8f9ff26 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWoodHut.java @@ -0,0 +1,473 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockGlowstoneTorch; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageWoodHut extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageWoodHut() + { + } + + public StructureComponentVillageWoodHut(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + public static StructureComponentVillageWoodHut func_74908_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 17, 9, 17, par6); + return StructureComponent.findIntersecting(par1List, var8) == null ? new StructureComponentVillageWoodHut(par0ComponentVillageStartPiece, par7, par2Random, var8, par6) : null; + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 9 - 1, 0); + } + + this.fillWithAir(par1World, par3StructureBoundingBox, 3, 0, 3, 13, 9, 13); + this.fillWithAir(par1World, par3StructureBoundingBox, 5, 0, 2, 11, 9, 14); + this.fillWithAir(par1World, par3StructureBoundingBox, 2, 0, 5, 14, 9, 11); + + for (int i = 3; i <= 13; i++) + { + for (int j = 3; j <= 13; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + for (int i = 5; i <= 11; i++) + { + for (int j = 2; j <= 14; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + for (int i = 2; i <= 14; i++) + { + for (int j = 5; j <= 11; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + int yLevel = 0; + + for (yLevel = -8; yLevel < 4; yLevel++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 11, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 15, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 1, par3StructureBoundingBox); + } + + yLevel = 4; + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 11, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 15, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 1, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode()), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateYCCW()), 14, yLevel, 8, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().getOpposite()), 8, yLevel, 14, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateY()), 2, yLevel, 8, par3StructureBoundingBox); + + yLevel = 5; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 5, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 14, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 11, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 2, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + + yLevel = 6; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 4, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 11, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 13, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 14, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 12, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 5, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 3, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 2, par3StructureBoundingBox); + + yLevel = 7; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 6, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 9, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 13, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 14, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 10, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 7, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 3, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 2, par3StructureBoundingBox); + + yLevel = 8; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 6, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 9, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 12, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 13, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 10, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 7, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 4, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 3, par3StructureBoundingBox); + + // extras + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 9, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 9, par3StructureBoundingBox); + + yLevel = 9; + + for (int i = 5; i <= 11; i++) + { + for (int j = 5; j <= 11; j++) + { + if (!(j == 5 && i == 5 || j == 5 && i == 11 || j == 11 && i == 5 || j == 11 && i == 11)) + { + if (i >= 7 && i <= 9 && j >= 7 && j <= 9) + { + this.setBlockState(par1World, Blocks.GLASS.getDefaultState(), i, yLevel, j, par3StructureBoundingBox); + } else + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), i, yLevel, j, par3StructureBoundingBox); + } + } + } + } + + this.spawnVillagers(par1World, par3StructureBoundingBox, 6, 5, 6, 4); + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePieceWeightMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePieceWeightMoon.java new file mode 100644 index 00000000..bd1e9631 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePieceWeightMoon.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +public class StructureVillagePieceWeightMoon +{ + + public Class villagePieceClass; + public final int villagePieceWeight; + public int villagePiecesSpawned; + public int villagePiecesLimit; + + public StructureVillagePieceWeightMoon(Class par1Class, int par2, int par3) + { + this.villagePieceClass = par1Class; + this.villagePieceWeight = par2; + this.villagePiecesLimit = (int) (par3 / 1.5D); + } + + public boolean canSpawnMoreVillagePiecesOfType(int par1) + { + return this.villagePiecesLimit == 0 || this.villagePiecesSpawned < this.villagePiecesLimit; + } + + public boolean canSpawnMoreVillagePieces() + { + return this.villagePiecesLimit == 0 || this.villagePiecesSpawned < this.villagePiecesLimit; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePiecesMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePiecesMoon.java new file mode 100644 index 00000000..8b98bdf3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePiecesMoon.java @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public class StructureVillagePiecesMoon +{ + + public static ArrayList getStructureVillageWeightedPieceList(Random par0Random, int par1) + { + final ArrayList var2 = new ArrayList(); + var2.add(new StructureVillagePieceWeightMoon(StructureComponentVillageWoodHut.class, 5, MathHelper.getInt(par0Random, 2 + par1, 5 + par1 * 3))); + var2.add(new StructureVillagePieceWeightMoon(StructureComponentVillageField.class, 5, MathHelper.getInt(par0Random, 3 + par1, 5 + par1))); + var2.add(new StructureVillagePieceWeightMoon(StructureComponentVillageField2.class, 5, MathHelper.getInt(par0Random, 3 + par1, 5 + par1))); + var2.add(new StructureVillagePieceWeightMoon(StructureComponentVillageHouse.class, 5, MathHelper.getInt(par0Random, 3 + par1, 4 + par1 * 2))); + + final Iterator var3 = var2.iterator(); + + while (var3.hasNext()) + { + if (var3.next().villagePiecesLimit == 0) + { + var3.remove(); + } + } + + return var2; + } + + private static int func_75079_a(List par0List) + { + boolean var1 = false; + int var2 = 0; + StructureVillagePieceWeightMoon var4; + + for (final Iterator var3 = par0List.iterator(); var3.hasNext(); var2 += var4.villagePieceWeight) + { + var4 = var3.next(); + + if (var4.villagePiecesLimit > 0 && var4.villagePiecesSpawned < var4.villagePiecesLimit) + { + var1 = true; + } + } + + return var1 ? var2 : -1; + } + + private static StructureComponentVillage func_75083_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, StructureVillagePieceWeightMoon par1StructureVillagePieceWeight, List par2List, Random par3Random, int par4, int par5, int par6, EnumFacing par7, int par8) + { + final Class var9 = par1StructureVillagePieceWeight.villagePieceClass; + Object var10 = null; + + if (var9 == StructureComponentVillageWoodHut.class) + { + var10 = StructureComponentVillageWoodHut.func_74908_a(par0ComponentVillageStartPiece, par2List, par3Random, par4, par5, par6, par7, par8); + } else if (var9 == StructureComponentVillageField.class) + { + var10 = StructureComponentVillageField.func_74900_a(par0ComponentVillageStartPiece, par2List, par3Random, par4, par5, par6, par7, par8); + } else if (var9 == StructureComponentVillageField2.class) + { + var10 = StructureComponentVillageField2.func_74900_a(par0ComponentVillageStartPiece, par2List, par3Random, par4, par5, par6, par7, par8); + } else if (var9 == StructureComponentVillageHouse.class) + { + var10 = StructureComponentVillageHouse.func_74921_a(par0ComponentVillageStartPiece, par2List, par3Random, par4, par5, par6, par7, par8); + } + + return (StructureComponentVillage) var10; + } + + private static StructureComponentVillage getNextVillageComponent(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final int var8 = StructureVillagePiecesMoon.func_75079_a(par0ComponentVillageStartPiece.structureVillageWeightedPieceList); + + if (var8 <= 0) + { + return null; + } else + { + int var9 = 0; + + while (var9 < 5) + { + ++var9; + int var10 = par2Random.nextInt(var8); + final Iterator var11 = par0ComponentVillageStartPiece.structureVillageWeightedPieceList.iterator(); + + while (var11.hasNext()) + { + final StructureVillagePieceWeightMoon var12 = var11.next(); + var10 -= var12.villagePieceWeight; + + if (var10 < 0) + { + if (!var12.canSpawnMoreVillagePiecesOfType(par7) + || var12 == par0ComponentVillageStartPiece.structVillagePieceWeight && par0ComponentVillageStartPiece.structureVillageWeightedPieceList.size() > 1) + { + break; + } + + final StructureComponentVillage var13 = StructureVillagePiecesMoon.func_75083_a(par0ComponentVillageStartPiece, var12, par1List, par2Random, par3, par4, par5, par6, par7); + + if (var13 != null) + { + ++var12.villagePiecesSpawned; + par0ComponentVillageStartPiece.structVillagePieceWeight = var12; + + if (!var12.canSpawnMoreVillagePieces()) + { + par0ComponentVillageStartPiece.structureVillageWeightedPieceList.remove(var12); + } + + return var13; + } + } + } + } + + final StructureBoundingBox var14 = StructureComponentVillageTorch.func_74904_a(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6); + + if (var14 != null) + { + return new StructureComponentVillageTorch(par0ComponentVillageStartPiece, par7, par2Random, var14, par6); + } else + { + return null; + } + } + } + + /** + * attempts to find a next Structure Component to be spawned, private + * Village function + */ + private static StructureComponent getNextVillageStructureComponent(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + if (par7 > 50) + { + return null; + } else if (Math.abs(par3 - par0ComponentVillageStartPiece.getBoundingBox().minX) <= 112 && Math.abs(par5 - par0ComponentVillageStartPiece.getBoundingBox().minZ) <= 112) + { + final StructureComponentVillage var8 = StructureVillagePiecesMoon.getNextVillageComponent(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6, par7 + 1); + + if (var8 != null) + { + par1List.add(var8); + par0ComponentVillageStartPiece.pendingHouses.add(var8); + return var8; + } + + return null; + } else + { + return null; + } + } + + private static StructureComponent getNextComponentVillagePath(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + if (par7 > 3 + par0ComponentVillageStartPiece.terrainType) + { + return null; + } else if (Math.abs(par3 - par0ComponentVillageStartPiece.getBoundingBox().minX) <= 112 && Math.abs(par5 - par0ComponentVillageStartPiece.getBoundingBox().minZ) <= 112) + { + final StructureBoundingBox var8 = StructureComponentVillagePathGen.func_74933_a(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6); + + if (var8 != null && var8.minY > 10) + { + final StructureComponentVillagePathGen var9 = new StructureComponentVillagePathGen(par0ComponentVillageStartPiece, par7, par2Random, var8, par6); + + par1List.add(var9); + par0ComponentVillageStartPiece.pendingRoads.add(var9); + return var9; + } + + return null; + } else + { + return null; + } + } + + /** + * attempts to find a next Structure Component to be spawned + */ + static StructureComponent getNextStructureComponent(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + return StructureVillagePiecesMoon.getNextVillageStructureComponent(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6, par7); + } + + static StructureComponent getNextStructureComponentVillagePath(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + return StructureVillagePiecesMoon.getNextComponentVillagePath(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6, par7); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillageStartMoon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillageStartMoon.java new file mode 100644 index 00000000..7ef7aa1f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillageStartMoon.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.StructureStart; + +public class StructureVillageStartMoon extends StructureStart +{ + + public StructureVillageStartMoon() + { + } + + public StructureVillageStartMoon(World par1World, Random par2Random, int par3, int par4, int par5) + { + super(par3, par4); + + final ArrayList var6 = StructureVillagePiecesMoon.getStructureVillageWeightedPieceList(par2Random, par5); + final StructureComponentVillageStartPiece var7 = new StructureComponentVillageStartPiece(par1World.getBiomeProvider(), 0, par2Random, (par3 << 4) + 2, (par4 << 4) + 2, var6, par5); + this.components.add(var7); + var7.buildComponent(var7, this.components, par2Random); + final ArrayList var8 = var7.pendingRoads; + final ArrayList var9 = var7.pendingHouses; + int var10; + + while (!var8.isEmpty() || !var9.isEmpty()) + { + StructureComponent var11; + + if (var8.isEmpty()) + { + var10 = par2Random.nextInt(var9.size()); + var11 = (StructureComponent) var9.remove(var10); + var11.buildComponent(var7, this.components, par2Random); + } else + { + var10 = par2Random.nextInt(var8.size()); + var11 = (StructureComponent) var8.remove(var10); + var11.buildComponent(var7, this.components, par2Random); + } + } + + this.updateBoundingBox(); + var10 = 0; + final Iterator var13 = this.components.iterator(); + + while (var13.hasNext()) + { + final StructureComponent var12 = var13.next(); + + if (!(var12 instanceof StructureComponentVillageRoadPiece)) + { + ++var10; + } + } + } + + /** + * currently only defined for Villages, returns true if Village has more + * than 2 non-road components + */ + @Override + public boolean isSizeableStructure() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenMinableMeta.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenMinableMeta.java new file mode 100644 index 00000000..46bd4ff1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenMinableMeta.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockMatcher; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenMinable; + +public class WorldGenMinableMeta extends WorldGenMinable +{ + + private final Block minableBlockId; + + private final int numberOfBlocks; + + private final int metadata; + + private boolean usingMetadata = false; + + private final Block fillerID; + + private final int fillerMetadata; + + public WorldGenMinableMeta(Block placeBlock, int blockCount, int placeMeta, boolean metaActive, Block replaceBlock, int replaceMeta) + { + super(placeBlock.getStateFromMeta(placeMeta), blockCount, BlockMatcher.forBlock(replaceBlock)); + this.minableBlockId = placeBlock; + this.numberOfBlocks = blockCount; + this.metadata = placeMeta; + this.usingMetadata = metaActive; + this.fillerID = replaceBlock; + this.fillerMetadata = replaceMeta; + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + float f = rand.nextFloat() * (float) Math.PI; + float sinFvalue = MathHelper.sin(f) * (float) this.numberOfBlocks / 8.0F; + float cosFvalue = MathHelper.cos(f) * (float) this.numberOfBlocks / 8.0F; + float chunkCentreX = (float) (position.getX() + 8); + float chunkCentreZ = (float) (position.getZ() + 8); + double clumpXa = (double) (chunkCentreX + sinFvalue); + double clumpXb = (double) (chunkCentreX - sinFvalue) - clumpXa; + double clumpZa = (double) (chunkCentreZ + cosFvalue); + double clumpZb = (double) (chunkCentreZ - cosFvalue) - clumpZa; + double clumpYa = (double) (position.getY() + rand.nextInt(3) - 2); + double clumpYb = (double) (position.getY() + rand.nextInt(3) - 2) - clumpYa; + + final IBlockState oreState = this.minableBlockId.getStateFromMeta(this.usingMetadata ? this.metadata : 0); + float concentricRadius = this.numberOfBlocks; + double size = (rand.nextDouble() * (double) this.numberOfBlocks + 1D) / 16.0D; + + for (int i = 0; i < this.numberOfBlocks; ++i) + { + float f1 = (float) i / concentricRadius; + double centreX = clumpXa + clumpXb * (double) f1; + double centreY = clumpYa + clumpYb * (double) f1; + double centreZ = clumpZa + clumpZb * (double) f1; + double sizeXZ = ((double) (MathHelper.sin((float) Math.PI * f1) + 1.0F) * size + 1.0D) / 2.0D; + double sizeY = sizeXZ; + int xmin = MathHelper.floor(centreX - sizeXZ); + int xmax = MathHelper.floor(centreX + sizeXZ); + int ymin = MathHelper.floor(centreY - sizeY); + int ymax = MathHelper.floor(centreY + sizeY); + int zmin = MathHelper.floor(centreZ - sizeXZ); + int zmax = MathHelper.floor(centreZ + sizeXZ); + centreX -= 0.5D; + centreY -= 0.5D; + centreZ -= 0.5D; + + for (int x = xmin; x <= xmax; ++x) + { + double dx = ((double) x - centreX) / sizeXZ; + + if (dx * dx < 1.0D) + { + for (int y = ymin; y <= ymax; ++y) + { + double dy = ((double) y - centreY) / sizeY; + double xySquared = dx * dx + dy * dy; + + if (xySquared < 1.0D) + { + for (int z = zmin; z <= zmax; ++z) + { + double dz = ((double) z - centreZ) / sizeXZ; + + if (xySquared + dz * dz < 1.0D) + { + BlockPos blockpos = new BlockPos(x, y, z); + IBlockState state = worldIn.getBlockState(blockpos); + + if (state.getBlock() == this.fillerID && state.getBlock().getMetaFromState(state) == this.fillerMetadata) + { + worldIn.setBlockState(blockpos, oreState, 2); + } + } + } + } + } + } + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenSpaceStation.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenSpaceStation.java new file mode 100644 index 00000000..ea290f36 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenSpaceStation.java @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenSpaceStation extends WorldGenerator +{ + + @Override + public boolean generate(World world, Random rand, BlockPos pos) + { + world.setBlockState(pos.add(0, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + + world.setBlockState(pos.add(3, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 3, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 3, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 2, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 2, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 3, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 3, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 3, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 3, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 4, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 4, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 3, 0), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(8, 3, 6), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(8, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + + // world.setBlockState(pos.add(10, 2, 3, 3, 0), 3); + + world.setBlockState(pos.add(10, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 3, 0), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(12, 3, 6), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(12, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 2, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 2, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 3, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 3, 1), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(13, 3, 5), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(13, 3, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 4, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 4, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Corridor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Corridor.java new file mode 100644 index 00000000..2720fb28 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Corridor.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.lang.reflect.Constructor; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class Corridor extends SizedPiece +{ + + public Corridor() + { + } + + public Corridor(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, sizeX, sizeY, sizeZ, direction); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.boundingBox = new StructureBoundingBox(blockPosX, configuration.getYPosition(), blockPosZ, blockPosX + sizeX, configuration.getYPosition() + sizeY, blockPosZ + sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i < this.boundingBox.getXSize(); i++) + { + for (int j = 0; j < this.boundingBox.getYSize(); j++) + { + for (int k = 0; k < this.boundingBox.getZSize(); k++) + { + if ((this.getDirection().getAxis() == EnumFacing.Axis.Z && (i == 0 || i == this.boundingBox.getXSize() - 1)) || j == 0 || j == this.boundingBox.getYSize() - 1 + || (this.getDirection().getAxis() == EnumFacing.Axis.X && (k == 0 || k == this.boundingBox.getZSize() - 1))) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, this.boundingBox); + } else + { + if (j == this.boundingBox.getYSize() - 2) + { + if (this.getDirection().getAxis() == EnumFacing.Axis.Z && (k + 1) % 4 == 0 && (i == 1 || i == this.boundingBox.getXSize() - 2)) + { + this.setBlockState(worldIn, + GCBlocks.unlitTorch.getDefaultState().withProperty(BlockUnlitTorch.FACING, i == 1 ? EnumFacing.WEST.getOpposite() : EnumFacing.EAST.getOpposite()), i, j, k, + this.boundingBox); + continue; + } else if (this.getDirection().getAxis() == EnumFacing.Axis.X && (i + 1) % 4 == 0 && (k == 1 || k == this.boundingBox.getZSize() - 2)) + { + this.setBlockState(worldIn, + GCBlocks.unlitTorch.getDefaultState().withProperty(BlockUnlitTorch.FACING, k == 1 ? EnumFacing.NORTH.getOpposite() : EnumFacing.SOUTH.getOpposite()), i, j, k, + this.boundingBox); + continue; + } + } + + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } + } + } + + return true; + } + + private T getRoom(Class clazz, DungeonStart startPiece, Random rand) + { + try + { + Constructor c0 = clazz.getConstructor(DungeonConfiguration.class, Random.class, Integer.TYPE, Integer.TYPE, EnumFacing.class); + T dummy = (T) c0.newInstance(this.configuration, rand, 0, 0, this.getDirection().getOpposite()); + StructureBoundingBox extension = getExtension(this.getDirection(), getDirection().getAxis() == EnumFacing.Axis.X ? dummy.getSizeX() : dummy.getSizeZ(), + getDirection().getAxis() == EnumFacing.Axis.X ? dummy.getSizeZ() : dummy.getSizeX()); + if (startPiece.checkIntersection(extension)) + { + return null; + } + int sizeX = extension.maxX - extension.minX; + int sizeZ = extension.maxZ - extension.minZ; + int sizeY = dummy.sizeY; + int blockX = extension.minX; + int blockZ = extension.minZ; + Constructor c1 = clazz.getConstructor(DungeonConfiguration.class, Random.class, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, EnumFacing.class); + return (T) c1.newInstance(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + int pieceCount = startPiece.attachedComponents.size(); + if (pieceCount > 10 && startPiece.attachedComponents.get(pieceCount - 2) instanceof RoomBoss) + { + try + { + return getRoom(this.configuration.getTreasureRoom(), startPiece, rand); + } catch (Exception e) + { + e.printStackTrace(); + } + } else + { + int bossRoomChance = Math.max((int) (20.0 / (pieceCount - 10)), 1); + boolean bossRoom = pieceCount > 25 || (pieceCount > 10 && rand.nextInt(bossRoomChance) == 0); + if (bossRoom) + { + try + { + return getRoom(this.configuration.getBossRoom(), startPiece, rand); + } catch (Exception e) + { + e.printStackTrace(); + return null; + } + } else + { + StructureBoundingBox extension = getExtension(this.getDirection(), rand.nextInt(4) + 6, rand.nextInt(4) + 6); + + if (startPiece.checkIntersection(extension)) + { + return null; + } + + int sizeX = extension.maxX - extension.minX; + int sizeZ = extension.maxZ - extension.minZ; + int sizeY = configuration.getRoomHeight(); + int blockX = extension.minX; + int blockZ = extension.minZ; + + if (Math.abs(startPiece.getBoundingBox().maxZ - boundingBox.minZ) > 200) + { + return null; + } + + if (Math.abs(startPiece.getBoundingBox().maxX - boundingBox.minX) > 200) + { + return null; + } + + switch (rand.nextInt(3)) + { + case 0: + return new RoomSpawner(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + case 1: + return new RoomChest(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + default: + case 2: + return new RoomEmpty(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } + } + + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DirectionalPiece.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DirectionalPiece.java new file mode 100644 index 00000000..2620577f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DirectionalPiece.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class DirectionalPiece extends Piece +{ + + private EnumFacing direction; + + public DirectionalPiece() + { + } + + public DirectionalPiece(DungeonConfiguration configuration, EnumFacing direction) + { + super(configuration); + this.direction = direction; + } + + public EnumFacing getDirection() + { + return direction; + } + + public void setDirection(EnumFacing direction) + { + this.direction = direction; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("direction", this.direction.ordinal()); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + if (nbt.hasKey("direction")) + { + this.direction = EnumFacing.byIndex(nbt.getInteger("direction")); + } else + { + this.direction = EnumFacing.NORTH; + } + } + + public Piece getCorridor(Random rand, DungeonStart startPiece, int maxAttempts, boolean small) + { + EnumFacing randomDir; + int blockX; + int blockZ; + int sizeX; + int sizeZ; + boolean valid; + int attempts = maxAttempts; + int randDir = rand.nextInt(3); + do + { + randomDir = EnumFacing.byHorizontalIndex((getDirection().getOpposite().getHorizontalIndex() + 1 + randDir) % 4); + StructureBoundingBox extension = + getExtension(randomDir, this.configuration.getHallwayLengthMin() + rand.nextInt(this.configuration.getHallwayLengthMax() - this.configuration.getHallwayLengthMin()), 3); + blockX = extension.minX; + blockZ = extension.minZ; + sizeX = extension.maxX - extension.minX; + sizeZ = extension.maxZ - extension.minZ; + valid = !startPiece.checkIntersection(extension); + attempts--; + randDir++; + } while (!valid && attempts > 0); + + if (!valid) + { + return null; + } + + return new Corridor(this.configuration, rand, blockX, blockZ, sizeX, small ? 3 : this.configuration.getHallwayHeight(), sizeZ, randomDir); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonConfiguration.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonConfiguration.java new file mode 100644 index 00000000..6cc80ba9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonConfiguration.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; + +public class DungeonConfiguration +{ + + private IBlockState brickBlock; + private int yPosition; + private int hallwayLengthMin; + private int hallwayLengthMax; + private int hallwayHeight; + private int roomHeight; + private Class bossRoom; + private Class treasureRoom; + + public DungeonConfiguration() + { + } + + public DungeonConfiguration(IBlockState brickBlock, int yPosition, int hallwayLengthMin, int hallwayLengthMax, int hallwayHeight, int roomHeight, Class bossRoom, Class treasureRoom) + { + this.brickBlock = brickBlock; + this.yPosition = yPosition; + this.hallwayLengthMin = hallwayLengthMin; + this.hallwayLengthMax = hallwayLengthMax; + this.hallwayHeight = hallwayHeight; + this.roomHeight = roomHeight; + this.bossRoom = bossRoom; + this.treasureRoom = treasureRoom; + } + + public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) + { + tagCompound.setString("brickBlock", Block.REGISTRY.getNameForObject(this.brickBlock.getBlock()).toString()); + tagCompound.setInteger("brickBlockMeta", this.brickBlock.getBlock().getMetaFromState(this.brickBlock)); + tagCompound.setInteger("yPosition", this.yPosition); + tagCompound.setInteger("hallwayLengthMin", this.hallwayLengthMin); + tagCompound.setInteger("hallwayLengthMax", this.hallwayLengthMax); + tagCompound.setInteger("hallwayHeight", this.hallwayHeight); + tagCompound.setInteger("roomHeight", this.roomHeight); + tagCompound.setString("bossRoom", this.bossRoom.getName()); + tagCompound.setString("treasureRoom", this.treasureRoom.getName()); + return tagCompound; + } + + public void readFromNBT(NBTTagCompound tagCompound) + { + try + { + this.brickBlock = Block.getBlockFromName(tagCompound.getString("brickBlock")).getStateFromMeta(tagCompound.getInteger("brickBlockMeta")); + this.yPosition = tagCompound.getInteger("yPosition"); + this.hallwayLengthMin = tagCompound.getInteger("hallwayLengthMin"); + this.hallwayLengthMax = tagCompound.getInteger("hallwayLengthMax"); + this.hallwayHeight = tagCompound.getInteger("hallwayHeight"); + this.roomHeight = tagCompound.getInteger("roomHeight"); + this.bossRoom = Class.forName(tagCompound.getString("bossRoom")); + this.treasureRoom = Class.forName(tagCompound.getString("treasureRoom")); + } catch (Exception e) + { + System.err.println("Failed to read dungeon configuration from NBT"); + e.printStackTrace(); + } + } + + public IBlockState getBrickBlock() + { + return brickBlock; + } + + public int getYPosition() + { + return yPosition; + } + + public int getHallwayLengthMin() + { + return hallwayLengthMin; + } + + public int getHallwayLengthMax() + { + return hallwayLengthMax; + } + + public int getHallwayHeight() + { + return hallwayHeight; + } + + public int getRoomHeight() + { + return roomHeight; + } + + public Class getBossRoom() + { + return bossRoom; + } + + public Class getTreasureRoom() + { + return treasureRoom; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonStart.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonStart.java new file mode 100644 index 00000000..c111a89e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonStart.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public class DungeonStart extends EntranceCrater +{ + + public List attachedComponents = Lists.newArrayList(); + public List componentBounds = Lists.newArrayList(); + + public DungeonStart() + { + } + + public DungeonStart(World world, DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ) + { + super(world, configuration, rand, blockPosX, blockPosZ); + } + + @Override + public void buildComponent(StructureComponent componentIn, List listIn, Random rand) + { + boolean validAttempt = false; + final int maxAttempts = 10; + int attempts = 0; + while (!validAttempt && attempts < maxAttempts) + { + attachedComponents.clear(); + componentBounds.clear(); + componentBounds.add(this.boundingBox); + listIn.clear(); + listIn.add(this); + Piece next = getNextPiece(this, rand); + while (next != null) + { + listIn.add(next); + attachedComponents.add(next); + componentBounds.add(next.getBoundingBox()); + + next = next.getNextPiece(this, rand); + } + if (attachedComponents.size() >= 3 && attachedComponents.get(attachedComponents.size() - 1) instanceof RoomTreasure + && attachedComponents.get(attachedComponents.size() - 3) instanceof RoomBoss) + { + validAttempt = true; + } + attempts++; + } + + GalacticraftCore.logger.debug("Dungeon generation took " + attempts + " attempt(s)"); + + if (!validAttempt) + { + int xPos = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2; + int zPos = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2; + System.err.println("Could not find valid dungeon layout! This is a bug, please report it, including your world seed (/seed) and dungeon location (" + xPos + ", " + zPos + ")"); + } + + super.buildComponent(componentIn, listIn, rand); + } + + public boolean checkIntersection(int blockX, int blockZ, int sizeX, int sizeZ) + { + return this.checkIntersection(new StructureBoundingBox(blockX, blockZ, blockX + sizeX, blockZ + sizeZ)); + } + + public boolean checkIntersection(StructureBoundingBox bounds) + { + for (int i = 0; i < componentBounds.size() - 1; ++i) + { + StructureBoundingBox boundingBox = componentBounds.get(i); + if (boundingBox.intersectsWith(bounds)) + { + return true; + } + } + + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/EntranceCrater.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/EntranceCrater.java new file mode 100644 index 00000000..b6aea594 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/EntranceCrater.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class EntranceCrater extends SizedPiece +{ + + private final int range = 16; + + public EntranceCrater() + { + } + + public EntranceCrater(World world, DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand.nextInt(4) + 6, 12, rand.nextInt(4) + 6, EnumFacing.Plane.HORIZONTAL.random(rand)); + this.setCoordBaseMode(EnumFacing.SOUTH); + + this.boundingBox = new StructureBoundingBox(blockPosX - range, configuration.getYPosition() + 11, blockPosZ - range, blockPosX + range, 150, blockPosZ + range); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + IBlockState block1; + + int maxLevel = 0; + + for (int i = -range; i <= range; i++) + { + for (int k = -range; k <= range; k++) + { + int j = 150; + int x = this.getXWithOffset(i + range, k + range); + int z = this.getZWithOffset(i + range, k + range); + + while (j >= 0) + { + j--; + + int y = this.getYWithOffset(j); + BlockPos blockpos = new BlockPos(x, y, z); + Block block = worldIn.getBlockState(blockpos).getBlock(); + + if (Blocks.AIR != block) + { + break; + } + } + + maxLevel = Math.max(maxLevel, j + 3); + } + } + + Mirror mirror = Mirror.NONE; + Rotation rotation = Rotation.NONE; + if (this.getCoordBaseMode() != null) + { + switch (this.getCoordBaseMode()) + { + case SOUTH: + mirror = Mirror.LEFT_RIGHT; + break; + case WEST: + mirror = Mirror.LEFT_RIGHT; + rotation = Rotation.CLOCKWISE_90; + break; + case EAST: + rotation = Rotation.CLOCKWISE_90; + break; + default: + break; + } + } + + for (int i = -range; i < range; i++) + { + for (int k = -range; k < range; k++) + { + final double xDev = i / 20D; + final double zDev = k / 20D; + final double distance = xDev * xDev + zDev * zDev; + final int depth = (int) Math.abs(0.5 / (distance + .00001D)); + int helper = 0; + for (int j = maxLevel; j > 1 && helper <= depth; j--) + { + block1 = this.getBlockStateFromPos(worldIn, i + range, j, k + range, boundingBox); +// if (block1 == this.configuration.getBrickBlock() || j != this.sizeY) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i + range, k + range), this.getYWithOffset(j), this.getZWithOffset(i + range, k + range)); + IBlockState state = Blocks.AIR.getDefaultState(); + + if (mirror != Mirror.NONE) + { + state = state.withMirror(mirror); + } + + if (rotation != Rotation.NONE) + { + state = state.withRotation(rotation); + } + + worldIn.setBlockState(blockpos, state, 2); +// this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i + range, j, k + range, boundingBox); + helper++; + } + } + } + } + + return true; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + return new RoomEntrance(this.configuration, rand, this.boundingBox.minX + this.boundingBox.getXSize() / 2, this.boundingBox.minZ + this.boundingBox.getZSize() / 2); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/MapGenDungeon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/MapGenDungeon.java new file mode 100644 index 00000000..c0685b93 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/MapGenDungeon.java @@ -0,0 +1,290 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import com.google.common.collect.Lists; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.GridLayout; +import java.util.List; +import java.util.Random; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.MapGenStructure; +import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.StructureStart; + +public class MapGenDungeon extends MapGenStructure +{ + + private static boolean initialized; + private DungeonConfiguration configuration; + + static + { + try + { + MapGenDungeon.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public MapGenDungeon(DungeonConfiguration configuration) + { + this.configuration = configuration; + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenDungeon.initialized) + { + MapGenStructureIO.registerStructure(MapGenDungeon.Start.class, "MoonDungeon"); + MapGenStructureIO.registerStructureComponent(DungeonStart.class, "MoonDungeonStart"); + MapGenStructureIO.registerStructureComponent(Corridor.class, "MoonDungeonCorridor"); + MapGenStructureIO.registerStructureComponent(RoomEmpty.class, "MoonDungeonEmptyRoom"); + MapGenStructureIO.registerStructureComponent(RoomBoss.class, "MoonDungeonBossRoom"); + MapGenStructureIO.registerStructureComponent(RoomTreasure.class, "MoonDungeonTreasureRoom"); + MapGenStructureIO.registerStructureComponent(RoomSpawner.class, "MoonDungeonSpawnerRoom"); + MapGenStructureIO.registerStructureComponent(RoomChest.class, "MoonDungeonChestRoom"); + MapGenStructureIO.registerStructureComponent(RoomEntrance.class, "MoonDungeonEntranceRoom"); + } + + MapGenDungeon.initialized = true; + } + + @Override + public String getStructureName() + { + return "GC_Dungeon"; + } + + @Override + protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ) + { + long dungeonPos = getDungeonPosForCoords(this.world, chunkX, chunkZ, ((IGalacticraftWorldProvider) this.world.provider).getDungeonSpacing()); + int i = (int) (dungeonPos >> 32); + int j = (int) dungeonPos; // Java automatically gives the 32 least + // significant bits + return i == chunkX && j == chunkZ; + } + + public static long getDungeonPosForCoords(World world, int chunkX, int chunkZ, int spacing) + { + final int numChunks = spacing / 16; + if (chunkX < 0) + { + chunkX -= numChunks - 1; + } + + if (chunkZ < 0) + { + chunkZ -= numChunks - 1; + } + + int k = chunkX / numChunks; + int l = chunkZ / numChunks; + long seed = (long) k * 341873128712L + (long) l * 132897987541L + world.getWorldInfo().getSeed() + (long) (10387340 + world.provider.getDimension()); + Random random = new Random(); + random.setSeed(seed); + k = k * numChunks + random.nextInt(numChunks); + l = l * numChunks + random.nextInt(numChunks); + return (((long) k) << 32) + l; + } + + /** + * This returns an angle between 0 and 360 degrees. 0 degrees means due + * North from the current (x, z) position Only provides meaningful results + * in worlds with dungeon generation using this class! + */ + public static float directionToNearestDungeon(World world, double xpos, double zpos) + { + int spacing = ((IGalacticraftWorldProvider) world.provider).getDungeonSpacing(); + if (spacing == 0) + return 0F; + int x = MathHelper.floor(xpos); + int z = MathHelper.floor(zpos); + int quadrantX = x % spacing; + int quadrantZ = z % spacing; + int searchOffsetX = quadrantX / (spacing / 2); // 0 or 1 + int searchOffsetZ = quadrantZ / (spacing / 2); // 0 or 1 + double nearestX = 0; + double nearestZ = 0; + double nearestDistance = Double.MAX_VALUE; + for (int cx = searchOffsetX - 1; cx < searchOffsetX + 1; cx++) + { + for (int cz = searchOffsetZ - 1; cz < searchOffsetZ + 1; cz++) + { + long dungeonPos = getDungeonPosForCoords(world, (x + cx * spacing) / 16, (z + cz * spacing) / 16, spacing); + int i = 2 + (((int) (dungeonPos >> 32)) << 4); + int j = 2 + (((int) dungeonPos) << 4); // Java automatically + // gives the 32 least + // significant bits + double oX = i - xpos; + double oZ = j - zpos; + double distanceSq = oX * oX + oZ * oZ; + if (distanceSq < nearestDistance) + { + nearestDistance = distanceSq; + nearestX = oX; + nearestZ = oZ; + } + } + } + + return GCCoreUtil.getAngleForRelativePosition(nearestX, nearestZ); + } + + @Override + protected StructureStart getStructureStart(int chunkX, int chunkZ) + { + return new MapGenDungeon.Start(this.world, this.rand, chunkX, chunkZ, this.configuration); + } + + @Override + public BlockPos getNearestStructurePos(World worldIn, BlockPos pos, boolean p_180706_3_) + { + return null; + } + + public static class Start extends StructureStart + { + + private DungeonConfiguration configuration; + DungeonStart startPiece; + + public Start() + { + } + + public Start(World worldIn, Random rand, int chunkX, int chunkZ, DungeonConfiguration configuration) + { + super(chunkX, chunkZ); + this.configuration = configuration; + startPiece = new DungeonStart(worldIn, configuration, rand, (chunkX << 4) + 2, (chunkZ << 4) + 2); + startPiece.buildComponent(startPiece, this.components, rand); + List list = startPiece.attachedComponents; + + while (!list.isEmpty()) + { + int i = rand.nextInt(list.size()); + StructureComponent structurecomponent = list.remove(i); + structurecomponent.buildComponent(startPiece, this.components, rand); + } + + this.updateBoundingBox(); + } + } + + public static void main(String args[]) + { + Random rand = new Random(); + Start start = new Start(null, rand, 0, 0, new DungeonConfiguration(null, 25, 8, 16, 5, 6, RoomBoss.class, RoomTreasure.class)); + + EventQueue.invokeLater(() -> + { + try + { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) + { + ex.printStackTrace(); + } + + JFrame frame = new JFrame("Dungeon Test"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.add(new DungeonGenPanel(start.startPiece.componentBounds)); + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + }); + } + + public static class DungeonGenPanel extends JPanel + { + + DungeonGenPanel(List componentBounds) + { + int absMinX = Integer.MAX_VALUE; + int absMinZ = Integer.MAX_VALUE; + int absMaxX = Integer.MIN_VALUE; + int absMaxZ = Integer.MIN_VALUE; + for (StructureBoundingBox b : componentBounds) + { + if (b.minX < absMinX) + { + absMinX = b.minX; + } + if (b.minZ < absMinZ) + { + absMinZ = b.minZ; + } + if (b.maxX > absMaxX) + { + absMaxX = b.maxX; + } + if (b.maxZ > absMaxZ) + { + absMaxZ = b.maxZ; + } + } + setLayout(new GridLayout(absMaxX - absMinX, absMaxZ - absMinZ, 0, 0)); + + Color[] colors = new Color[] + {Color.GREEN, Color.BLUE, Color.RED, Color.MAGENTA}; + List> cells = Lists.newArrayList(); + for (int row = 0; row < absMaxX - absMinX; row++) + { + List rowCells = Lists.newArrayList(); + for (int col = 0; col < absMaxZ - absMinZ; col++) + { + JPanel cell = new JPanel() + { + + @Override + public Dimension getPreferredSize() + { + return new Dimension(8, 8); + } + }; + cell.setBackground(Color.GRAY); + add(cell); + rowCells.add(cell); + } + cells.add(rowCells); + } + + int color = 0; + // X is rows, Z is cols + for (StructureBoundingBox bb : componentBounds) + { + color = ++color % colors.length; + + for (int i = bb.minX; i < bb.maxX; ++i) + { + for (int j = bb.minZ; j < bb.maxZ; ++j) + { + cells.get(i - absMinX).get(j - absMinZ).setBackground(colors[color]); + } + } + } + } + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Piece.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Piece.java new file mode 100644 index 00000000..3b8bedfd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Piece.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class Piece extends StructureComponent +{ + protected DungeonConfiguration configuration; + + public Piece() + { + } + + public Piece(DungeonConfiguration configuration) + { + this.configuration = configuration; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + this.configuration.writeToNBT(tagCompound); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + if (this.configuration == null) + { + this.configuration = new DungeonConfiguration(); + this.configuration.readFromNBT(tagCompound); + } + } + + protected StructureBoundingBox getExtension(EnumFacing direction, int length, int width) + { + int blockX, blockZ, sizeX, sizeZ; + switch (direction) + { + case NORTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.minZ - sizeZ; + break; + case EAST: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.maxX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + case SOUTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.maxZ; + break; + case WEST: + default: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.minX - sizeX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + } + return new StructureBoundingBox(blockX, this.configuration.getYPosition(), blockZ, blockX + sizeX, this.configuration.getYPosition() + this.configuration.getHallwayHeight(),blockZ + sizeZ); + } + + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + return null; + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomBoss.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomBoss.java new file mode 100644 index 00000000..1244c651 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomBoss.java @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class RoomBoss extends SizedPiece +{ + private BlockPos chestPos; + + public RoomBoss() + { + } + + public RoomBoss(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + this(configuration, rand, blockPosX, blockPosZ, rand.nextInt(6) + 14, rand.nextInt(2) + 8, rand.nextInt(6) + 14, entranceDir); + } + + public RoomBoss(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.sizeX = sizeX; + this.sizeZ = sizeZ; + this.sizeY = sizeY; + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } + else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } + else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } + else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + else if ((i == 1 && k == 1) || (i == 1 && k == this.sizeZ - 1) || (i == this.sizeX - 1 && k == 1) || (i == this.sizeX - 1 && k == this.sizeZ - 1)) + { + this.setBlockState(worldIn, Blocks.FLOWING_LAVA.getDefaultState(), i, j, k, chunkBox); + } + else if (j % 3 == 0 && j >= 2 && ((i == 1 || i == this.sizeX - 1 || k == 1 || k == this.sizeZ - 1) || (i == 2 && k == 2) || (i == 2 && k == this.sizeZ - 2) || (i == this.sizeX - 2 && k == 2) || (i == this.sizeX - 2 && k == this.sizeZ - 2))) + { + // Horizontal bars + this.setBlockState(worldIn, Blocks.IRON_BARS.getDefaultState(), i, j, k, chunkBox); + } + else if ((i == 1 && k == 2) || (i == 2 && k == 1) || + (i == 1 && k == this.sizeZ - 2) || (i == 2 && k == this.sizeZ - 1) || + (i == this.sizeX - 1 && k == 2) || (i == this.sizeX - 2 && k == 1) || + (i == this.sizeX - 1 && k == this.sizeZ - 2) || (i == this.sizeX - 2 && k == this.sizeZ - 1)) + { + // Vertical bars + this.setBlockState(worldIn, Blocks.IRON_BARS.getDefaultState(), i, j, k, chunkBox); + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + + int spawnerX = this.sizeX / 2; + int spawnerY = 1; + int spawnerZ = this.sizeZ / 2; + BlockPos blockpos = new BlockPos(this.getXWithOffset(spawnerX, spawnerZ), this.getYWithOffset(spawnerY), this.getZWithOffset(spawnerX, spawnerZ)); + //Is this position inside the chunk currently being generated? + if (chunkBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, GCBlocks.bossSpawner.getDefaultState(), 2); + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) worldIn.getTileEntity(blockpos); + if (spawner != null) + { + spawner.setRoom(new Vector3(this.boundingBox.minX + 1, this.boundingBox.minY + 1, this.boundingBox.minZ + 1), new Vector3(this.sizeX - 1, this.sizeY - 1, this.sizeZ - 1)); + spawner.setChestPos(this.chestPos); + } + } + + return true; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + if(this.chestPos != null) + { + tagCompound.setInteger("chestX", this.chestPos.getX()); + tagCompound.setInteger("chestY", this.chestPos.getY()); + tagCompound.setInteger("chestZ", this.chestPos.getZ()); + } + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + this.chestPos = new BlockPos(nbt.getInteger("chestX"), nbt.getInteger("chestY"), nbt.getInteger("chestZ")); + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + return getCorridor(rand, startPiece, 10, true); + } + + public BlockPos getChestPos() + { + return chestPos; + } + + public void setChestPos(BlockPos chestPos) + { + this.chestPos = chestPos; + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomChest.java new file mode 100644 index 00000000..92cc7288 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomChest.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomChest extends RoomEmpty +{ + public RoomChest() + { + } + + public RoomChest(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random rand, StructureBoundingBox boundingBox) + { + if (super.addComponentParts(worldIn, rand, boundingBox)) + { + int chestX = this.sizeX / 2; + int chestY = 1; + int chestZ = this.sizeZ / 2; + this.setBlockState(worldIn, Blocks.CHEST.getDefaultState().withProperty(BlockTier1TreasureChest.FACING, this.getDirection().getOpposite()), chestX, chestY, chestZ, boundingBox); + + BlockPos blockpos = new BlockPos(this.getXWithOffset(chestX, chestZ), this.getYWithOffset(chestY), this.getZWithOffset(chestX, chestZ)); + TileEntityChest chest = (TileEntityChest) worldIn.getTileEntity(blockpos); + + if (chest != null) + { + ResourceLocation chesttype = RoomTreasure.MOONCHEST; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + chest.setLootTable(chesttype, rand.nextLong()); + } + + return true; + } + + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEmpty.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEmpty.java new file mode 100644 index 00000000..605cb973 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEmpty.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomEmpty extends SizedPiece +{ + public RoomEmpty() + { + } + + public RoomEmpty(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < this.configuration.getHallwayHeight() && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } + else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } + else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < this.configuration.getHallwayHeight() && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } + else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, boundingBox); + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + if (Math.abs(startPiece.getBoundingBox().maxZ - boundingBox.minZ) > 200) + { + return null; + } + + if (Math.abs(startPiece.getBoundingBox().maxX - boundingBox.minX) > 200) + { + return null; + } + + return getCorridor(rand, startPiece, 10, false); + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEntrance.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEntrance.java new file mode 100644 index 00000000..0201fa2d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEntrance.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomEntrance extends SizedPiece +{ + public RoomEntrance() + { + } + + public RoomEntrance(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand.nextInt(4) + 6, 12, rand.nextInt(4) + 6, EnumFacing.Plane.HORIZONTAL.random(rand)); + this.setCoordBaseMode(EnumFacing.SOUTH); + int sX = this.sizeX / 2; + int sZ = this.sizeZ / 2; + + this.boundingBox = new StructureBoundingBox(blockPosX - sX, configuration.getYPosition(), blockPosZ - sZ, blockPosX - sX + this.sizeX, configuration.getYPosition() + this.sizeY, blockPosZ - sZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 /*|| j == this.sizeY*/ || k == 0 || k == this.sizeZ) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, boundingBox); + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + return getCorridor(rand, startPiece, 10, false); + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomSpawner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomSpawner.java new file mode 100644 index 00000000..0565b507 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomSpawner.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomSpawner extends RoomEmpty +{ + public RoomSpawner() + { + } + + public RoomSpawner(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + if (super.addComponentParts(worldIn, random, boundingBox)) + { + for (int i = 1; i <= this.sizeX - 1; ++i) + { + for (int j = 1; j <= this.sizeY - 1; ++j) + { + for (int k = 1; k <= this.sizeZ - 1; ++k) + { + if (random.nextFloat() < 0.05F) + { + this.setBlockState(worldIn, Blocks.WEB.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + this.setBlockState(worldIn, Blocks.MOB_SPAWNER.getDefaultState(), 1, 0, 1, boundingBox); + this.setBlockState(worldIn, Blocks.MOB_SPAWNER.getDefaultState(), this.sizeX - 1, 0, this.sizeZ - 1, boundingBox); + + BlockPos blockpos = new BlockPos(this.getXWithOffset(1, 1), this.getYWithOffset(0), this.getZWithOffset(1, 1)); + TileEntityMobSpawner spawner = (TileEntityMobSpawner) worldIn.getTileEntity(blockpos); + + if (spawner != null) + { + spawner.getSpawnerBaseLogic().setEntityId(getMob(random)); + } + + blockpos = new BlockPos(this.getXWithOffset(this.sizeX - 1, this.sizeZ - 1), this.getYWithOffset(0), this.getZWithOffset(this.sizeX - 1, this.sizeZ - 1)); + spawner = (TileEntityMobSpawner) worldIn.getTileEntity(blockpos); + + if (spawner != null) + { + spawner.getSpawnerBaseLogic().setEntityId(getMob(random)); + } + + return true; + } + + return false; + } + + private static ResourceLocation getMob(Random rand) + { + switch (rand.nextInt(4)) + { + case 0: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_spider"); + case 1: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_creeper"); + case 2: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_skeleton"); + case 3: + default: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_zombie"); + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomTreasure.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomTreasure.java new file mode 100644 index 00000000..db732052 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomTreasure.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.storage.loot.LootTableList; + +public class RoomTreasure extends SizedPiece +{ + + public static ResourceLocation MOONCHEST = new ResourceLocation(Constants.ASSET_PREFIX, "dungeon_tier_1"); + public static final ResourceLocation TABLE_TIER_1_DUNGEON = LootTableList.register(MOONCHEST); + + public RoomTreasure() + { + } + + public RoomTreasure(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + this(configuration, rand, blockPosX, blockPosZ, rand.nextInt(4) + 6, configuration.getRoomHeight(), rand.nextInt(4) + 6, entranceDir); + } + + public RoomTreasure(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } else if ((i == 1 && k == 1) || (i == 1 && k == this.sizeZ - 1) || (i == this.sizeX - 1 && k == 1) || (i == this.sizeX - 1 && k == this.sizeZ - 1)) + { + this.setBlockState(worldIn, Blocks.GLOWSTONE.getDefaultState(), i, j, k, chunkBox); + } else if (i == this.sizeX / 2 && j == 1 && k == this.sizeZ / 2) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i, k), this.getYWithOffset(j), this.getZWithOffset(i, k)); + if (chunkBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, GCBlocks.treasureChestTier1.getDefaultState().withProperty(BlockTier1TreasureChest.FACING, this.getDirection().getOpposite()), 2); + TileEntityTreasureChest treasureChest = (TileEntityTreasureChest) worldIn.getTileEntity(blockpos); + if (treasureChest != null) + { + ResourceLocation chesttype = TABLE_TIER_1_DUNGEON; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + treasureChest.setLootTable(chesttype, random.nextLong()); + } + } + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + + return true; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + if (startPiece.attachedComponents.size() > 2) + { + StructureComponent component = startPiece.attachedComponents.get(startPiece.attachedComponents.size() - 3); + if (component instanceof RoomBoss) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(this.sizeX / 2, this.sizeZ / 2), this.getYWithOffset(1), this.getZWithOffset(this.sizeX / 2, this.sizeZ / 2)); + ((RoomBoss) component).setChestPos(new BlockPos(blockpos)); + } + } + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/SizedPiece.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/SizedPiece.java new file mode 100644 index 00000000..4147f782 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/SizedPiece.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class SizedPiece extends DirectionalPiece +{ + + protected int sizeX; + protected int sizeY; + protected int sizeZ; + + public SizedPiece() + { + } + + public SizedPiece(DungeonConfiguration configuration, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, direction); + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("sizeX", this.sizeX); + tagCompound.setInteger("sizeY", this.sizeY); + tagCompound.setInteger("sizeZ", this.sizeZ); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.sizeX = nbt.getInteger("sizeX"); + this.sizeY = nbt.getInteger("sizeY"); + this.sizeZ = nbt.getInteger("sizeZ"); + } + + public int getSizeX() + { + return sizeX; + } + + public int getSizeY() + { + return sizeY; + } + + public int getSizeZ() + { + return sizeZ; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/BlockMetaList.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/BlockMetaList.java new file mode 100644 index 00000000..049f90d8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/BlockMetaList.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import java.util.Arrays; +import java.util.List; +import net.minecraft.block.Block; + +public class BlockMetaList +{ + + private Block block; + private List metaList; + + public BlockMetaList(Block blockID, Integer... metadata) + { + this(blockID, Arrays.asList(metadata)); + } + + public BlockMetaList(Block blockID, List metadata) + { + this.block = blockID; + this.metaList = metadata; + } + + public Block getBlock() + { + return this.block; + } + + public List getMetaList() + { + return this.metaList; + } + + public void addMetadata(int meta) + { + this.metaList.add(meta); + } + + public void removeMetadata(int meta) + { + this.metaList.remove(meta); + } + + @Override + public int hashCode() + { + return this.block.hashCode(); + } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof BlockMetaList) + { + return (BlockMetaList) obj == this; + } + + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FlagData.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FlagData.java new file mode 100644 index 00000000..009e2459 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FlagData.java @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import java.awt.image.BufferedImage; +import java.util.Arrays; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.nbt.NBTTagCompound; + +public class FlagData +{ + + public static FlagData DEFAULT = new FlagData(48, 32); + private int height; + private int width; + private byte[][][] color; + + public FlagData(int width, int height) + { + this.height = height; + this.width = width; + this.color = new byte[width][height][3]; + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + this.color[i][j][0] = 127; + this.color[i][j][1] = 127; + this.color[i][j][2] = 127; + } + } + } + + public int getHeight() + { + return this.height; + } + + public void setHeight(int height) + { + this.height = height; + } + + public int getWidth() + { + return this.width; + } + + public void setWidth(int width) + { + this.width = width; + } + + /** + * Returns the color, normalized, at the flag coordinates.

0, 0 is the + * top left. + * + * @param posX x-position of the flag + * @param posY y-position of the flag + * @return The color vector, capped from 0-1 + */ + public Vector3 getColorAt(int posX, int posY) + { + if (posX >= this.width || posY >= this.height) + { + return new Vector3(0, 0, 0); + } + + return new Vector3((this.color[posX][posY][0] + 128) / 256.0D, (this.color[posX][posY][1] + 128) / 256.0D, (this.color[posX][posY][2] + 128) / 256.0D); + } + + /** + * Set the color at the designated flag coordinates + * + * @param posX The x-position of the flag + * @param posY The y-position of the flag + * @param colorVec The color vector, values from 0-256 + */ + public void setColorAt(int posX, int posY, Vector3 colorVec) + { + this.color[posX][posY][0] = (byte) (colorVec.intX() - 128); + this.color[posX][posY][1] = (byte) (colorVec.intY() - 128); + this.color[posX][posY][2] = (byte) (colorVec.intZ() - 128); + } + + public static FlagData readFlagData(NBTTagCompound nbt) + { + if (nbt.hasKey("FlagWidth")) + { + // Legacy saves + int width = nbt.getInteger("FlagWidth"); + int height = nbt.getInteger("FlagHeight"); + + FlagData flagData = new FlagData(width, height); + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + flagData.color[i][j][0] = nbt.getByte("ColorR-X" + i + "-Y" + j); + flagData.color[i][j][1] = nbt.getByte("ColorG-X" + i + "-Y" + j); + flagData.color[i][j][2] = nbt.getByte("ColorB-X" + i + "-Y" + j); + } + } + + return flagData; + } + + // New more compact flag save style + int width = nbt.getInteger("FWidth"); + int height = nbt.getInteger("FHeight"); + + FlagData flagData = new FlagData(width, height); + for (int i = 0; i < height; i++) + { + int[] colorRow = nbt.getIntArray("FRow" + i); + for (int j = 0; j < width; j++) + { + int color = colorRow[j]; + flagData.color[j][i][0] = (byte) (color >> 16); + flagData.color[j][i][1] = (byte) ((color >> 8) & 255); + flagData.color[j][i][2] = (byte) (color & 255); + } + } + return flagData; + } + + public void saveFlagData(NBTTagCompound nbt) + { + nbt.setInteger("FWidth", this.width); + nbt.setInteger("FHeight", this.height); + + for (int i = 0; i < this.height; i++) + { + int[] colorRow = new int[this.width]; + for (int j = 0; j < this.width; j++) + { + byte[] arrayColor = this.color[j][i]; + colorRow[j] = ColorUtil.to32BitColorB(arrayColor[0], arrayColor[1], arrayColor[2]); + } + nbt.setIntArray("FRow" + i, colorRow); + } + } + + public BufferedImage toBufferedImage() + { + BufferedImage image = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_RGB); + for (int i = 0; i < this.width; i++) + { + for (int j = 0; j < this.height; j++) + { + int col = ((this.color[i][j][0] + 128) << 16) | ((this.color[i][j][1] + 128) << 8) | (this.color[i][j][2] + 128); + image.setRGB(i, j, col); + } + } + return image; + } + + @Override + public boolean equals(Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + FlagData flagData = (FlagData) o; + + if (height != flagData.height) + { + return false; + } + if (width != flagData.width) + { + return false; + } + return Arrays.deepEquals(color, flagData.color); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FluidHandlerWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FluidHandlerWrapper.java new file mode 100644 index 00000000..140adb63 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FluidHandlerWrapper.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.FluidTankProperties; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; + +public class FluidHandlerWrapper implements IFluidHandler +{ + + public IFluidHandlerWrapper wrapper; + + public EnumFacing side; + + public FluidHandlerWrapper(IFluidHandlerWrapper w, EnumFacing s) + { + wrapper = w; + side = s; + } + + @Override + public IFluidTankProperties[] getTankProperties() + { + FluidTankInfo[] infos = wrapper.getTankInfo(side); + if (infos != null) + { + FluidTankProperties[] properties = new FluidTankProperties[infos.length]; + for (int i = 0; i < infos.length; i++) + { + FluidTankInfo info = infos[i]; + properties[i] = new FluidTankProperties(info.fluid, info.capacity, this.wrapper.canFill(side, null), this.wrapper.canDrain(side, null)); + } + return properties; + } + return new IFluidTankProperties[] + {}; + } + + @Override + public int fill(FluidStack resource, boolean doFill) + { + if (wrapper.canFill(side, resource != null ? resource.getFluid() : null)) + { + return wrapper.fill(side, resource, doFill); + } + + return 0; + } + + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) + { + if (wrapper.canDrain(side, resource != null ? resource.getFluid() : null)) + { + return wrapper.drain(side, resource, doDrain); + } + + return null; + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) + { + if (wrapper.canDrain(side, null)) + { + return wrapper.drain(side, maxDrain, doDrain); + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/Footprint.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/Footprint.java new file mode 100644 index 00000000..c12e4e29 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/Footprint.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +public class Footprint +{ + + public static final short MAX_AGE = 3200; + public final int dimension; + public final float rotation; + public final Vector3 position; + public short age; + public final String owner; + public int lightmapVal; + + public Footprint(int dimension, Vector3 position, float rotation, String ownerUUID, int lightmapVal) + { + this(dimension, position, rotation, (short) 0, ownerUUID, lightmapVal); + } + + public Footprint(int dimension, Vector3 position, float rotation, short age, String ownerUUID, int lightmapVal) + { + this.dimension = dimension; + this.position = position; + this.rotation = rotation; + this.age = age; + this.owner = ownerUUID; + this.lightmapVal = lightmapVal; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/IFluidHandlerWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/IFluidHandlerWrapper.java new file mode 100644 index 00000000..0c43816e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/IFluidHandlerWrapper.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +public interface IFluidHandlerWrapper +{ + + int fill(EnumFacing from, FluidStack resource, boolean doFill); + + FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain); + + FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain); + + boolean canFill(EnumFacing from, Fluid fluid); + + boolean canDrain(EnumFacing from, Fluid fluid); + + FluidTankInfo[] getTankInfo(EnumFacing from); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ModelTransformWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ModelTransformWrapper.java new file mode 100644 index 00000000..c48a2dea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ModelTransformWrapper.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import java.util.List; +import javax.annotation.Nullable; +import javax.vecmath.Matrix4f; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.model.TRSRTransformation; +import org.apache.commons.lang3.tuple.Pair; + +abstract public class ModelTransformWrapper implements IBakedModel +{ + + private final IBakedModel parent; + + public ModelTransformWrapper(IBakedModel parent) + { + this.parent = parent; + } + + public boolean isAmbientOcclusion() + { + return parent.isAmbientOcclusion(); + } + + public boolean isGui3d() + { + return parent.isGui3d(); + } + + public boolean isBuiltInRenderer() + { + return parent.isBuiltInRenderer(); + } + + public TextureAtlasSprite getParticleTexture() + { + return parent.getParticleTexture(); + } + + @SuppressWarnings("deprecation") + public ItemCameraTransforms getItemCameraTransforms() + { + return parent.getItemCameraTransforms(); + } + + public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) + { + return parent.getQuads(state, side, rand); + } + + public ItemOverrideList getOverrides() + { + return parent.getOverrides(); + } + + @Override + public Pair handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) + { + Matrix4f matrix4f = getTransformForPerspective(cameraTransformType); + + if (matrix4f == null) + { + return Pair.of(this, TRSRTransformation.blockCornerToCenter(TRSRTransformation.identity()).getMatrix()); + } + + return Pair.of(this, matrix4f); + } + + abstract protected Matrix4f getTransformForPerspective(TransformType cameraTransformType); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PartialCanister.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PartialCanister.java new file mode 100644 index 00000000..a728f73b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PartialCanister.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import net.minecraft.item.Item; + +/** + * Used to register canisters with partially filled textures + */ +public class PartialCanister +{ + + private Item item; + private String modID; + private String baseName; + private int textureCount; + + public PartialCanister(Item item, String modID, String baseName, int textureCount) + { + this.item = item; + this.modID = modID; + this.baseName = baseName; + this.textureCount = textureCount; + } + + public Item getItem() + { + return item; + } + + public String getModID() + { + return modID; + } + + public String getBaseName() + { + return baseName; + } + + public int getTextureCount() + { + return textureCount; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PlayerGearData.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PlayerGearData.java new file mode 100644 index 00000000..5ca2f097 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PlayerGearData.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; + +public class PlayerGearData +{ + + private final EntityPlayer player; + private int mask; + private int gear; + private int leftTank; + private int rightTank; + private int[] thermalPadding; + private ResourceLocation parachute; + private int frequencyModule; + private int shieldController; + + public PlayerGearData(EntityPlayer player) + { + this(player, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, new int[] + {GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT}); + } + + public PlayerGearData(EntityPlayer player, int mask, int gear, int leftTank, int rightTank, int frequencyModule, int[] thermalPadding) + { + this.player = player; + this.mask = mask; + this.gear = gear; + this.leftTank = leftTank; + this.rightTank = rightTank; + this.frequencyModule = frequencyModule; + this.thermalPadding = thermalPadding; + } + + public int getMask() + { + return this.mask; + } + + public void setMask(int mask) + { + this.mask = mask; + } + + public int getGear() + { + return this.gear; + } + + public void setGear(int gear) + { + this.gear = gear; + } + + public int getLeftTank() + { + return this.leftTank; + } + + public void setLeftTank(int leftTank) + { + this.leftTank = leftTank; + } + + public int getRightTank() + { + return this.rightTank; + } + + public void setRightTank(int rightTank) + { + this.rightTank = rightTank; + } + + public EntityPlayer getPlayer() + { + return this.player; + } + + public ResourceLocation getParachute() + { + return this.parachute; + } + + public void setParachute(ResourceLocation parachute) + { + this.parachute = parachute; + } + + public int getFrequencyModule() + { + return this.frequencyModule; + } + + public void setFrequencyModule(int frequencyModule) + { + this.frequencyModule = frequencyModule; + } + + public int getThermalPadding(int slot) + { + if (slot >= 0 && slot < this.thermalPadding.length) + { + return this.thermalPadding[slot]; + } + + return -1; + } + + public void setThermalPadding(int slot, int thermalPadding) + { + if (slot >= 0 && slot < this.thermalPadding.length) + { + this.thermalPadding[slot] = thermalPadding; + } + } + + public int getShieldController() + { + return shieldController; + } + + public void setShieldController(int shieldController) + { + this.shieldController = shieldController; + } + + @Override + public int hashCode() + { + return PlayerUtil.getName(this.player).hashCode(); + } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof PlayerGearData) + { + return PlayerUtil.getName(((PlayerGearData) obj).player).equals(PlayerUtil.getName(this.player)); + } + + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledBlockChange.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledBlockChange.java new file mode 100644 index 00000000..b9a2308b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledBlockChange.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; + +public class ScheduledBlockChange +{ + + private BlockPos changePosition; + private IBlockState change; + private int changeUpdateFlag; + + public ScheduledBlockChange(BlockVec3 changePosition, IBlockState change) + { + this(changePosition.toBlockPos(), change, 3); + } + + public ScheduledBlockChange(BlockPos pos, IBlockState change, int changeUpdateFlag) + { + this.changePosition = pos; + this.change = change; + this.changeUpdateFlag = changeUpdateFlag; + } + + public BlockPos getChangePosition() + { + return this.changePosition; + } + + public void setChangePosition(BlockPos changePosition) + { + this.changePosition = changePosition; + } + + public IBlockState getChangeState() + { + return this.change; + } + + public void setChangeState(IBlockState change) + { + this.change = change; + } + + public int getChangeUpdateFlag() + { + return changeUpdateFlag; + } + + public void setChangeUpdateFlag(int changeUpdateFlag) + { + this.changeUpdateFlag = changeUpdateFlag; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledDimensionChange.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledDimensionChange.java new file mode 100644 index 00000000..bf3bdaad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledDimensionChange.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import net.minecraft.entity.player.EntityPlayerMP; + +public class ScheduledDimensionChange +{ + + private EntityPlayerMP player; + private int dimensionName; + + public ScheduledDimensionChange(EntityPlayerMP player, int dimensionName) + { + this.player = player; + this.dimensionName = dimensionName; + } + + public EntityPlayerMP getPlayer() + { + return player; + } + + public int getDimensionId() + { + return dimensionName; + } + + public void setPlayer(EntityPlayerMP player) + { + this.player = player; + } + + public void setDimensionName(int dimensionName) + { + this.dimensionName = dimensionName; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/ConfigGuiFactoryPlanets.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/ConfigGuiFactoryPlanets.java new file mode 100644 index 00000000..7bae6fb6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/ConfigGuiFactoryPlanets.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.util.Set; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.fml.client.IModGuiFactory; +import net.minecraftforge.fml.client.config.GuiConfig; + +public class ConfigGuiFactoryPlanets implements IModGuiFactory +{ + + public static class PlanetsConfigGUI extends GuiConfig + { + + public PlanetsConfigGUI(GuiScreen parent) + { + super(parent, GalacticraftPlanets.getConfigElements(), Constants.MOD_ID_PLANETS, false, false, GCCoreUtil.translate("gc.configgui.planets.title")); + } + } + + @Override + public void initialize(Minecraft minecraftInstance) + { + + } + + @Override + public Set runtimeGuiCategories() + { + return null; + } + + public GuiScreen createConfigGui(GuiScreen arg0) + { + // TODO Forge 2282 addition! + return new PlanetsConfigGUI(arg0); + } + + public boolean hasConfigGui() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GCPlanetDimensions.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GCPlanetDimensions.java new file mode 100644 index 00000000..254eead2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GCPlanetDimensions.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import net.minecraft.world.DimensionType; + +public class GCPlanetDimensions +{ + + public static DimensionType ASTEROIDS; + public static DimensionType MARS; + public static DimensionType VENUS; +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GalacticraftPlanets.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GalacticraftPlanets.java new file mode 100644 index 00000000..bdb301c5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GalacticraftPlanets.java @@ -0,0 +1,223 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.common.config.Property; +import net.minecraftforge.fml.client.config.IConfigElement; +import net.minecraftforge.fml.client.event.ConfigChangedEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.Mod.Instance; +import net.minecraftforge.fml.common.ModMetadata; +import net.minecraftforge.fml.common.SidedProxy; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GalacticLog; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.datafix.GCPlanetsDataFixers; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import micdoodle8.mods.galacticraft.planets.venus.ConfigManagerVenus; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; + +@Mod(modid = Constants.MOD_ID_PLANETS, + name = GalacticraftPlanets.NAME, + version = Constants.VERSION, + dependencies = "required-after:galacticraftcore;", + useMetadata = false, + acceptedMinecraftVersions = "[1.12, 1.13)", + guiFactory = "micdoodle8.mods.galacticraft.planets.ConfigGuiFactoryPlanets") +public class GalacticraftPlanets +{ + + public static final String NAME = "Galacticraft Planets"; + private File GCPlanetsSource; + + @Instance(Constants.MOD_ID_PLANETS) + public static GalacticraftPlanets instance; + + public static List commonModules = new ArrayList<>(); + public static List clientModules = new ArrayList<>(); + + public static final String ASSET_PREFIX = "galacticraftplanets"; + public static final String TEXTURE_PREFIX = ASSET_PREFIX + ":"; + + @SidedProxy(clientSide = "micdoodle8.mods.galacticraft.planets.PlanetsProxyClient", serverSide = "micdoodle8.mods.galacticraft.planets.PlanetsProxy") + public static PlanetsProxy proxy; + + public static Map> propOrder = new TreeMap<>(); + + public static GalacticLog logger; + + public GalacticraftPlanets() + { + logger = new GalacticLog(this); + } + + @EventHandler + public void preInit(FMLPreInitializationEvent event) + { + GCPlanetsSource = event.getSourceFile(); + this.initModInfo(event.getModMetadata()); + MinecraftForge.EVENT_BUS.register(this); + + // Initialise configs, converting mars.conf + asteroids.conf to + // planets.conf if necessary + File oldMarsConf = new File(event.getModConfigurationDirectory(), "Galacticraft/mars.conf"); + File newPlanetsConf = new File(event.getModConfigurationDirectory(), "Galacticraft/planets.conf"); + boolean update = false; + if (oldMarsConf.exists()) + { + oldMarsConf.renameTo(newPlanetsConf); + update = true; + } + + File planetsConfig = new File(event.getModConfigurationDirectory(), Constants.PLANETS_CONFIG_FILE); + + if (newPlanetsConf.exists()) + { + newPlanetsConf.renameTo(planetsConfig); + } + + this.configSyncStart(); + new ConfigManagerMars(planetsConfig, update); + new ConfigManagerAsteroids(new File(event.getModConfigurationDirectory(), "Galacticraft/asteroids.conf")); + new ConfigManagerVenus(new File(event.getModConfigurationDirectory(), "Galacticraft/venus.conf")); + this.configSyncEnd(true); + + GalacticraftPlanets.commonModules.add(new MarsModule()); + GalacticraftPlanets.commonModules.add(new AsteroidsModule()); + GalacticraftPlanets.commonModules.add(new VenusModule()); + GalacticraftPlanets.proxy.preInit(event); + } + + @EventHandler + public void init(FMLInitializationEvent event) + { + GalacticraftPlanets.proxy.init(event); + NetworkRegistry.INSTANCE.registerGuiHandler(GalacticraftPlanets.instance, GalacticraftPlanets.proxy); + + new GCPlanetsDataFixers().registerAll(); + } + + @EventHandler + public void postInit(FMLPostInitializationEvent event) + { + GalacticraftPlanets.proxy.postInit(event); + TileEntityDeconstructor.initialiseRecipeListPlanets(); + } + + @EventHandler + public void serverStarting(FMLServerStartingEvent event) + { + GalacticraftPlanets.proxy.serverStarting(event); + } + + @EventHandler + public void serverInit(FMLServerStartedEvent event) + { + GalacticraftPlanets.proxy.serverInit(event); + } + + public static void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData) + { + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.spawnParticle(particleID, position, motion, extraData); + } + } + + public static List getConfigElements() + { + List list = new ArrayList<>(); + + // Get the last planet to be configured only, as all will reference and + // re-use the same planets.conf config file + IPlanetsModule module = GalacticraftPlanets.commonModules.get(GalacticraftPlanets.commonModules.size() - 1); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_ENTITIES)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_ACHIEVEMENTS)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_GENERAL)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_WORLDGEN)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_DIMENSIONS)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_SCHEMATIC)).getChildElements()); + + return list; + } + + @SubscribeEvent + public void onConfigChanged(ConfigChangedEvent event) + { + if (event.getModID().equals(Constants.MOD_ID_PLANETS)) + { + this.configSyncStart(); + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.syncConfig(); + } + this.configSyncEnd(false); + } + } + + private void configSyncEnd(boolean load) + { + // Cleanup older GC config files + ConfigManagerCore.cleanConfig(ConfigManagerMars.config, propOrder); + + // Always save - this is last to be called both at load time and at + // mid-game + if (ConfigManagerMars.config.hasChanged()) + { + ConfigManagerMars.config.save(); + } + } + + private void configSyncStart() + { + propOrder.clear(); + } + + public static void finishProp(Property prop, String currentCat) + { + if (propOrder.get(currentCat) == null) + { + propOrder.put(currentCat, new ArrayList<>()); + } + propOrder.get(currentCat).add(prop.getName()); + } + + private void initModInfo(ModMetadata info) + { + info.autogenerated = false; + info.modId = Constants.MOD_ID_PLANETS; + info.name = GalacticraftPlanets.NAME; + info.version = Constants.VERSION; + info.description = "Planets addon for Galacticraft."; + info.authorList = Arrays.asList("micdoodle8", "radfast", "EzerArch", "fishtaco", "SpaceViking", "SteveKunG"); + info.logoFile = "assets/galacticraftplanets/planets-logo.png"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GuiIdsPlanets.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GuiIdsPlanets.java new file mode 100644 index 00000000..a46ab6cf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GuiIdsPlanets.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +public class GuiIdsPlanets +{ + + // MARS + public static final int NASA_WORKBENCH_CARGO_ROCKET = 0; + public static final int NASA_WORKBENCH_TIER_2_ROCKET = 1; + public static final int MACHINE_MARS = 2; + + // ASTEROIDS + public static final int MACHINE_ASTEROIDS = 3; + public static final int NASA_WORKBENCH_TIER_3_ROCKET = 4; + public static final int NASA_WORKBENCH_ASTRO_MINER = 5; + + // VENUS + public static final int MACHINE_VENUS = 6; +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModule.java new file mode 100644 index 00000000..9c269a70 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModule.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; + +public interface IPlanetsModule +{ + + public void preInit(FMLPreInitializationEvent event); + + public void init(FMLInitializationEvent event); + + public void postInit(FMLPostInitializationEvent event); + + public void serverInit(FMLServerStartedEvent event); + + public void serverStarting(FMLServerStartingEvent event); + + public void getGuiIDs(List idList); + + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z); + + public Configuration getConfiguration(); + + public void syncConfig(); + + public default void register(Class tileEntityClass, String key) + { + GameRegistry.registerTileEntity(tileEntityClass, new ResourceLocation(Constants.MOD_ID_PLANETS, key)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModuleClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModuleClient.java new file mode 100644 index 00000000..971562f4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModuleClient.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.relauncher.Side; + +public interface IPlanetsModuleClient +{ + + public void preInit(FMLPreInitializationEvent event); + + public void registerVariants(); + + public void init(FMLInitializationEvent event); + + public void postInit(FMLPostInitializationEvent event); + + public void getGuiIDs(List idList); + + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z); + + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData); +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxy.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxy.java new file mode 100644 index 00000000..38742327 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxy.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.venus.tick.VenusTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.venus.tile.SolarModuleNetwork; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.network.IGuiHandler; +import net.minecraftforge.fml.relauncher.Side; + +public class PlanetsProxy implements IGuiHandler +{ + + public void preInit(FMLPreInitializationEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.preInit(event); + } + } + + public void registerVariants() + { + + } + + public void init(FMLInitializationEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.init(event); + } + } + + public void postInit(FMLPostInitializationEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.postInit(event); + } + } + + public void serverStarting(FMLServerStartingEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.serverStarting(event); + } + } + + public void serverInit(FMLServerStartedEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.serverInit(event); + } + } + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + List guiIDs = new ArrayList(); + module.getGuiIDs(guiIDs); + if (guiIDs.contains(ID)) + { + return module.getGuiElement(Side.SERVER, ID, player, world, x, y, z); + } + } + + return null; + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + List guiIDs = new ArrayList(); + module.getGuiIDs(guiIDs); + if (guiIDs.contains(ID)) + { + return module.getGuiElement(Side.CLIENT, ID, player, world, x, y, z); + } + } + + return null; + } + + public void postRegisterItem(Item item) + { + } + + public void unregisterNetwork(SolarModuleNetwork solarNetwork) + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + VenusTickHandlerServer.removeSolarNetwork(solarNetwork); + } + } + + public void registerNetwork(SolarModuleNetwork solarNetwork) + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + VenusTickHandlerServer.addSolarNetwork(solarNetwork); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxyClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxyClient.java new file mode 100644 index 00000000..6e03a51c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxyClient.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import com.google.common.collect.Lists; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModuleClient; +import micdoodle8.mods.galacticraft.planets.mars.MarsModuleClient; +import micdoodle8.mods.galacticraft.planets.venus.VenusModuleClient; +import net.minecraft.item.Item; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; + +public class PlanetsProxyClient extends PlanetsProxy +{ + + private List itemsToRegisterJson = Lists.newArrayList(); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + OBJLoaderGC.instance.addDomain(GalacticraftPlanets.ASSET_PREFIX); + GalacticraftPlanets.clientModules.add(new MarsModuleClient()); + GalacticraftPlanets.clientModules.add(new AsteroidsModuleClient()); + GalacticraftPlanets.clientModules.add(new VenusModuleClient()); + + super.preInit(event); + + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.preInit(event); + } + } + + @Override + public void registerVariants() + { + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.registerVariants(); + } + } + + @Override + public void init(FMLInitializationEvent event) + { + super.init(event); + + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.init(event); + } + + for (Item toReg : itemsToRegisterJson) + { + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, toReg); + } + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + super.postInit(event); + + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.postInit(event); + } + } + + @Override + public void serverStarting(FMLServerStartingEvent event) + { + super.serverStarting(event); + } + + @Override + public void postRegisterItem(Item item) + { + if (!item.getHasSubtypes()) + { + itemsToRegisterJson.add(item); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModule.java new file mode 100644 index 00000000..ad7834e3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModule.java @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids; + +import java.lang.reflect.Method; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.command.CommandGCAstroMiner; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.TeleportTypeAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntitySmallAsteroid; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.player.AsteroidsPlayerHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.event.AsteroidsEventHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerAstroMinerDock; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.network.PacketSimpleAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.recipe.CanisterRecipes; +import micdoodle8.mods.galacticraft.planets.asteroids.recipe.RecipeManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.schematic.SchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.schematic.SchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.tick.AsteroidsTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReceiver; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReflector; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBaseSingle; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityTelepadFake; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.BiomeAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.ChunkProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.RecipeSorter; + +public class AsteroidsModule implements IPlanetsModule +{ + + public static Planet planetAsteroids; + + public static AsteroidsPlayerHandler playerHandler; + public static Fluid fluidMethaneGas; + public static Fluid fluidOxygenGas; + public static Fluid fluidNitrogenGas; + public static Fluid fluidLiquidMethane; + public static Fluid fluidLiquidOxygen; + public static Fluid fluidLiquidNitrogen; + public static Fluid fluidLiquidArgon; + public static Fluid fluidAtmosphericGases; + + private Fluid registerFluid(String fluidName, int density, int viscosity, int temperature, boolean gaseous) + { + Fluid returnFluid = FluidRegistry.getFluid(fluidName); + if (returnFluid == null) + { + ResourceLocation texture = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/" + fluidName); + FluidRegistry.registerFluid(new Fluid(fluidName, texture, texture).setDensity(density).setViscosity(viscosity).setTemperature(temperature).setGaseous(gaseous)); + returnFluid = FluidRegistry.getFluid(fluidName); + } + return returnFluid; + } + + @Override + public void preInit(FMLPreInitializationEvent event) + { + AsteroidsModule.planetAsteroids = new Planet("asteroids").setParentSolarSystem(GalacticraftCore.solarSystemSol); + + playerHandler = new AsteroidsPlayerHandler(); + MinecraftForge.EVENT_BUS.register(playerHandler); + AsteroidsEventHandler eventHandler = new AsteroidsEventHandler(); + MinecraftForge.EVENT_BUS.register(eventHandler); + RecipeSorter.register("galacticraftplanets:canisterRecipe", CanisterRecipes.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless"); + + registerFluid("methane", 1, 11, 295, true); + registerFluid("atmosphericgases", 1, 13, 295, true); + registerFluid("liquidmethane", 450, 120, 109, false); + // Data source for liquid methane: + // http://science.nasa.gov/science-news/science-at-nasa/2005/25feb_titan2/ + registerFluid("liquidoxygen", 1141, 140, 90, false); + registerFluid("liquidnitrogen", 808, 130, 90, false); + registerFluid("nitrogen", 1, 12, 295, true); + registerFluid("carbondioxide", 2, 20, 295, true); + registerFluid("argon", 1, 4, 295, true); + registerFluid("liquidargon", 900, 100, 87, false); + registerFluid("helium", 1, 1, 295, true); + AsteroidsModule.fluidMethaneGas = FluidRegistry.getFluid("methane"); + AsteroidsModule.fluidAtmosphericGases = FluidRegistry.getFluid("atmosphericgases"); + AsteroidsModule.fluidLiquidMethane = FluidRegistry.getFluid("liquidmethane"); + AsteroidsModule.fluidLiquidOxygen = FluidRegistry.getFluid("liquidoxygen"); + AsteroidsModule.fluidOxygenGas = FluidRegistry.getFluid("oxygen"); + AsteroidsModule.fluidLiquidNitrogen = FluidRegistry.getFluid("liquidnitrogen"); + AsteroidsModule.fluidLiquidArgon = FluidRegistry.getFluid("liquidargon"); + AsteroidsModule.fluidNitrogenGas = FluidRegistry.getFluid("nitrogen"); + + AsteroidBlocks.initBlocks(); + AsteroidBlocks.registerBlocks(); + AsteroidBlocks.setHarvestLevels(); + + AsteroidsItems.initItems(); + + AsteroidsModule.planetAsteroids.setBiomeInfo(BiomeAsteroids.asteroid); + // This enables Endermen on Asteroids in Asteroids Challenge mode + ((BiomeAsteroids) BiomeAsteroids.asteroid).resetMonsterListByMode(ConfigManagerCore.challengeMobDropsAndSpawning); + } + + @Override + public void init(FMLInitializationEvent event) + { + AsteroidBlocks.oreDictRegistration(); + AsteroidsItems.oreDictRegistrations(); + + // Set creative tab item to AstroMiner + GalacticraftCore.galacticraftItemsTab.setItemForTab(new ItemStack(AsteroidsItems.astroMiner)); + + this.registerMicroBlocks(); + SchematicRegistry.registerSchematicRecipe(new SchematicTier3Rocket()); + SchematicRegistry.registerSchematicRecipe(new SchematicAstroMiner()); + + GalacticraftCore.packetPipeline.addDiscriminator(7, PacketSimpleAsteroids.class); + + AsteroidsTickHandlerServer eventHandler = new AsteroidsTickHandlerServer(); + MinecraftForge.EVENT_BUS.register(eventHandler); + + this.registerEntities(); + + RecipeManagerAsteroids.loadCompatibilityRecipes(); + + AsteroidsModule.planetAsteroids.setDimensionInfo(ConfigManagerAsteroids.dimensionIDAsteroids, WorldProviderAsteroids.class).setTierRequired(3); + AsteroidsModule.planetAsteroids.setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.375F, 1.375F)).setRelativeOrbitTime(45.0F).setPhaseShift((float) (Math.random() * (2 * Math.PI))); + AsteroidsModule.planetAsteroids.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/asteroid.png")); + AsteroidsModule.planetAsteroids.setAtmosphere(new AtmosphereInfo(false, false, false, -1.5F, 0.05F, 0.0F)); + AsteroidsModule.planetAsteroids.addChecklistKeys("equip_oxygen_suit", "craft_grapple_hook", "thermal_padding"); + + GalaxyRegistry.register(AsteroidsModule.planetAsteroids); + GalacticraftRegistry.registerTeleportType(WorldProviderAsteroids.class, new TeleportTypeAsteroids()); + + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T1_HELMET, EnumExtendedInventorySlot.THERMAL_HELMET, new ItemStack(AsteroidsItems.thermalPadding, 1, 0)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T1_CHESTPLATE, EnumExtendedInventorySlot.THERMAL_CHESTPLATE, new ItemStack(AsteroidsItems.thermalPadding, 1, 1)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T1_LEGGINGS, EnumExtendedInventorySlot.THERMAL_LEGGINGS, new ItemStack(AsteroidsItems.thermalPadding, 1, 2)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T1_BOOTS, EnumExtendedInventorySlot.THERMAL_BOOTS, new ItemStack(AsteroidsItems.thermalPadding, 1, 3)); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + GCPlanetDimensions.ASTEROIDS = WorldUtil.getDimensionTypeById(ConfigManagerAsteroids.dimensionIDAsteroids); + } + + @Override + public void serverStarting(FMLServerStartingEvent event) + { + event.registerServerCommand(new CommandGCAstroMiner()); + ChunkProviderAsteroids.reset(); + } + + @Override + public void serverInit(FMLServerStartedEvent event) + { + AsteroidsTickHandlerServer.restart(); + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_ASTEROIDS); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (side == Side.SERVER) + { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + + switch (ID) + { + case GuiIdsPlanets.MACHINE_ASTEROIDS: + + if (tile instanceof TileEntityShortRangeTelepad) + { + return new ContainerShortRangeTelepad(player.inventory, ((TileEntityShortRangeTelepad) tile), player); + } + if (tile instanceof TileEntityMinerBase) + { + return new ContainerAstroMinerDock(player.inventory, (TileEntityMinerBase) tile); + } + + break; + } + } + + return null; + } + + private void registerEntities() + { + this.registerCreatures(); + this.registerNonMobEntities(); + this.registerTileEntities(); + } + + private void registerCreatures() + { + + } + + private void registerNonMobEntities() + { + MarsModule.registerGalacticraftNonMobEntity(EntitySmallAsteroid.class, "small_asteroid", 150, 3, true); + MarsModule.registerGalacticraftNonMobEntity(EntityGrapple.class, "grapple_hook", 150, 1, true); + MarsModule.registerGalacticraftNonMobEntity(EntityTier3Rocket.class, "rocket_t3", 150, 1, false); + MarsModule.registerGalacticraftNonMobEntity(EntityEntryPod.class, "entry_pod", 150, 1, true); + MarsModule.registerGalacticraftNonMobEntity(EntityAstroMiner.class, "astro_miner", 80, 1, true); + } + + private void registerMicroBlocks() + { + try + { + Class clazz = Class.forName("codechicken.microblock.MicroMaterialRegistry"); + if (clazz != null) + { + Method registerMethod = null; + Method[] methodz = clazz.getMethods(); + for (Method m : methodz) + { + if (m.getName().equals("registerMaterial")) + { + registerMethod = m; + break; + } + } + Class clazzbm = Class.forName("codechicken.microblock.BlockMicroMaterial"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(AsteroidBlocks.blockBasic, 0), "tile.asteroids_block.asteroid_rock_0"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(AsteroidBlocks.blockBasic, 1), "tile.asteroids_block.asteroid_rock_1"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(AsteroidBlocks.blockBasic, 2), "tile.asteroids_block.asteroid_rock_2"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(AsteroidBlocks.blockDenseIce, 0), "tile.dense_ice"); + } + } + catch (Exception e) + {} + } + + private void registerTileEntities() + { + register(TileEntityBeamReflector.class, "gc_beam_reflector"); + register(TileEntityBeamReceiver.class, "gc_beam_receiver"); + register(TileEntityShortRangeTelepad.class, "gc_short_range_telepad"); + register(TileEntityTelepadFake.class, "gc_fake_short_range_telepad"); + register(TileEntityMinerBaseSingle.class, "gc_astro_miner_base_builder"); + register(TileEntityMinerBase.class, "gc_astro_miner_base"); + } + + @Override + public Configuration getConfiguration() + { + return ConfigManagerAsteroids.config; + } + + @Override + public void syncConfig() + { + ConfigManagerAsteroids.syncConfig(false, false); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModuleClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModuleClient.java new file mode 100644 index 00000000..ab08720c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModuleClient.java @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModuleClient; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.client.FluidTexturesGC; +import micdoodle8.mods.galacticraft.planets.asteroids.client.fx.EntityFXTeleport; +import micdoodle8.mods.galacticraft.planets.asteroids.client.gui.GuiAstroMinerDock; +import micdoodle8.mods.galacticraft.planets.asteroids.client.gui.GuiShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderEntryPod; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderSmallAsteroid; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelBeamReceiver; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelBeamReflector; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelRocketT3; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile.TileEntityBeamReceiverRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile.TileEntityBeamReflectorRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile.TileEntityMinerBaseRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile.TileEntityShortRangeTelepadRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntitySmallAsteroid; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.event.AsteroidsEventHandlerClient; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReceiver; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReflector; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.mars.client.fx.EntityCryoFX; +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.model.IModelState; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class AsteroidsModuleClient implements IPlanetsModuleClient +{ + + @Override + public void preInit(FMLPreInitializationEvent event) + { + RenderingRegistry.registerEntityRenderingHandler(EntitySmallAsteroid.class, (RenderManager manager) -> new RenderSmallAsteroid(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrapple.class, (RenderManager manager) -> new RenderGrapple(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEntryPod.class, (RenderManager manager) -> new RenderEntryPod(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityTier3Rocket.class, (RenderManager manager) -> new RenderTier3Rocket(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityAstroMiner.class, (RenderManager manager) -> new RenderAstroMiner(manager)); + MinecraftForge.EVENT_BUS.register(this); + } + + @Override + public void registerVariants() + { + addPlanetVariants("asteroids_block", "asteroids_block", "asteroid_rock_1", "asteroid_rock_2", "ore_aluminum_asteroids", "ore_ilmenite_asteroids", "ore_iron_asteroids", "asteroid_deco", + "titanium_block"); + addPlanetVariants("thermal_padding", "thermal_padding", "thermal_chestplate", "thermal_leggings", "thermal_boots"); + addPlanetVariants("item_basic_asteroids", "item_basic_asteroids", "engine_t2", "rocket_fins_t2", "shard_iron", "shard_titanium", "ingot_titanium", "compressed_titanium", "thermal_cloth", + "beam_core", "dust_titanium"); + addPlanetVariants("walkway", "walkway", "walkway_wire", "walkway_pipe"); + addPlanetVariants("strange_seed", "strange_seed", "strange_seed1"); + + Item receiver = Item.getItemFromBlock(AsteroidBlocks.beamReceiver); + ModelResourceLocation modelResourceLocation = new ModelResourceLocation("galacticraftplanets:beam_receiver", "inventory"); + ModelLoader.setCustomModelResourceLocation(receiver, 0, modelResourceLocation); + + Item reflector = Item.getItemFromBlock(AsteroidBlocks.beamReflector); + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:beam_reflector", "inventory"); + ModelLoader.setCustomModelResourceLocation(reflector, 0, modelResourceLocation); + + Item teleporter = Item.getItemFromBlock(AsteroidBlocks.shortRangeTelepad); + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:telepad_short", "inventory"); + ModelLoader.setCustomModelResourceLocation(teleporter, 0, modelResourceLocation); + + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:grapple", "inventory"); + ModelLoader.setCustomModelResourceLocation(AsteroidsItems.grapple, 0, modelResourceLocation); + + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:rocket_t3", "inventory"); + for (int i = 0; i < 5; ++i) + { + ModelLoader.setCustomModelResourceLocation(AsteroidsItems.tier3Rocket, i, modelResourceLocation); + } + + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:astro_miner", "inventory"); + ModelLoader.setCustomModelResourceLocation(AsteroidsItems.astroMiner, 0, modelResourceLocation); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onModelBakeEvent(ModelBakeEvent event) + { + replaceModelDefault(event, "beam_receiver", "block/receiver.obj", ImmutableList.of("Main", "Receiver", "Ring"), ItemModelBeamReceiver.class, TRSRTransformation.identity(), "inventory", + "facing=up", "facing=down", "facing=north", "facing=west", "facing=east", "facing=south"); + replaceModelDefault(event, "beam_reflector", "block/reflector.obj", ImmutableList.of("Base", "Axle", "EnergyBlaster", "Ring"), ItemModelBeamReflector.class, TRSRTransformation.identity(), + "inventory", "normal"); + replaceModelDefault(event, "telepad_short", "block/telepad_short.obj", ImmutableList.of("Top", "Bottom", "Connector"), ItemModelTelepad.class, TRSRTransformation.identity(), "inventory", + "normal"); + replaceModelDefault(event, "grapple", "grapple.obj", ImmutableList.of("Grapple"), ItemModelGrapple.class, TRSRTransformation.identity()); + replaceModelDefault(event, "rocket_t3", "tier3rocket.obj", ImmutableList.of("Boosters", "Cube", "NoseCone", "Rocket"), ItemModelRocketT3.class, TRSRTransformation.identity()); + replaceModelDefault(event, "astro_miner", "astro_miner_inv.obj", ImmutableList.of("Hull_Center"), ItemModelAstroMiner.class, TRSRTransformation.identity()); + } + + private void replaceModelDefault(ModelBakeEvent event, String resLoc, String objLoc, List visibleGroups, Class clazz, IModelState parentState, String... variants) + { + ClientUtil.replaceModel(GalacticraftPlanets.ASSET_PREFIX, event, resLoc, objLoc, visibleGroups, clazz, parentState, variants); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void loadTextures(TextureStitchEvent.Pre event) + { + registerTexture(event, "minerbase"); + registerTexture(event, "beam_reflector"); + registerTexture(event, "beam_receiver"); + registerTexture(event, "telepad_short"); + registerTexture(event, "telepad_short0"); + registerTexture(event, "grapple"); + registerTexture(event, "tier3rocket"); + registerTexture(event, "astro_miner"); + registerTexture(event, "astro_miner_off"); + registerTexture(event, "astro_miner_fx"); + registerTexture(event, "space_pod"); + registerTexture(event, "fluids/argon"); + registerTexture(event, "fluids/atmosphericgases"); + registerTexture(event, "fluids/carbondioxide"); + registerTexture(event, "fluids/helium"); + registerTexture(event, "fluids/liquidargon"); + registerTexture(event, "fluids/liquidmethane"); + registerTexture(event, "fluids/liquidnitrogen"); + registerTexture(event, "fluids/liquidoxygen"); + registerTexture(event, "fluids/methane"); + registerTexture(event, "fluids/nitrogen"); + } + + private void registerTexture(TextureStitchEvent.Pre event, String texture) + { + event.getMap().registerSprite(new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/" + texture)); + } + + @Override + public void init(FMLInitializationEvent event) + { + AsteroidsEventHandlerClient clientEventHandler = new AsteroidsEventHandlerClient(); + MinecraftForge.EVENT_BUS.register(clientEventHandler); + FluidTexturesGC.init(); + AsteroidsModuleClient.registerBlockRenderers(); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { +// RenderingRegistry.registerEntityRenderingHandler(EntityAstroMiner.class, (RenderManager manager) -> new RenderAstroMiner()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBeamReflector.class, new TileEntityBeamReflectorRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBeamReceiver.class, new TileEntityBeamReceiverRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMinerBase.class, new TileEntityMinerBaseRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityShortRangeTelepad.class, new TileEntityShortRangeTelepadRenderer()); + +// if (Loader.isModLoaded("craftguide")) +// { +// CraftGuideIntegration.register(); +// } + } + + public static void registerBlockRenderers() + { + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 0, "asteroids_block"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 1, "asteroid_rock_1"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 2, "asteroid_rock_2"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 3, "ore_aluminum_asteroids"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 4, "ore_ilmenite_asteroids"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 5, "ore_iron_asteroids"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 6, "asteroid_deco"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 7, "titanium_block"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockWalkway, 0, "walkway"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockWalkway, 1, "walkway_wire"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockWalkway, 2, "walkway_pipe"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockDenseIce); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockMinerBase); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.minerBaseFull); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.thermalPadding, 0, "thermal_padding"); // helm + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.thermalPadding, 1, "thermal_chestplate"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.thermalPadding, 2, "thermal_leggings"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.thermalPadding, 3, "thermal_boots"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 5, "item_basic_asteroids"); // reinforced_plate_t3 + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 1, "engine_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 2, "rocket_fins_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 3, "shard_iron"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 4, "shard_titanium"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 0, "ingot_titanium"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 6, "compressed_titanium"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 7, "thermal_cloth"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 8, "beam_core"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 9, "dust_titanium"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.heavyNoseCone, 0, "heavy_nose_cone"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.strangeSeed, 0, "strange_seed"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.strangeSeed, 1, "strange_seed1"); + } + + private void addPlanetVariants(String name, String... variants) + { + Item itemBlockVariants = Item.REGISTRY.getObject(new ResourceLocation(Constants.MOD_ID_PLANETS, name)); + ResourceLocation[] variants0 = new ResourceLocation[variants.length]; + for (int i = 0; i < variants.length; ++i) + { + variants0[i] = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + variants[i]); + } + ModelBakery.registerItemVariants(itemBlockVariants, variants0); + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_ASTEROIDS); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + + switch (ID) + { + case GuiIdsPlanets.MACHINE_ASTEROIDS: + + if (tile instanceof TileEntityShortRangeTelepad) + { + return new GuiShortRangeTelepad(player.inventory, ((TileEntityShortRangeTelepad) tile)); + } + if (tile instanceof TileEntityMinerBase) + { + return new GuiAstroMinerDock(player.inventory, (TileEntityMinerBase) tile); + } + + break; + } + + return null; + } + + @Override + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData) + { + Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + double dX = mc.getRenderViewEntity().posX - position.x; + double dY = mc.getRenderViewEntity().posY - position.y; + double dZ = mc.getRenderViewEntity().posZ - position.z; + Particle particle = null; + double viewDistance = 64.0D; + + if (dX * dX + dY * dY + dZ * dZ < viewDistance * viewDistance) + { + if (particleID.equals("portalBlue")) + { + particle = new EntityFXTeleport(mc.world, position, motion, (TileEntityShortRangeTelepad) extraData[0], (Boolean) extraData[1]); + } else if (particleID.equals("cryoFreeze")) + { + particle = new EntityCryoFX(mc.world, position, motion); + } + } + + if (particle != null) + { + mc.effectRenderer.addEffect(particle); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/ConfigManagerAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/ConfigManagerAsteroids.java new file mode 100644 index 00000000..2eb8e09f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/ConfigManagerAsteroids.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids; + +import java.io.File; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +public class ConfigManagerAsteroids +{ + + public static boolean loaded; + + static Configuration config; + + public ConfigManagerAsteroids(File file) + { + if (!ConfigManagerAsteroids.loaded) + { + if (file.exists()) + { + ConfigManagerAsteroids.config = new Configuration(file); + ConfigManagerAsteroids.syncConfig(true, true); + file.delete(); + config = ConfigManagerMars.config; + } else + { + config = ConfigManagerMars.config; + ConfigManagerAsteroids.syncConfig(true, false); + } + } + } + + // DIMENSIONS + public static int dimensionIDAsteroids; + + // GUI + + // SCHEMATIC + public static int idSchematicRocketT3; + + // GENERAL + public static boolean disableGalacticraftHelium; + public static boolean disableSmallAsteroids; + public static int astroMinerMax; + + public static boolean disableIlmeniteGen; + public static boolean disableIronGen; + public static boolean disableAluminumGen; + + public static void syncConfig(boolean load, boolean update) + { + try + { + Property prop; + Property propCopy; + + if (!config.isChild) + { + if (update) + { + config.load(); + } + } + + prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "dimensionIDAsteroids", -30); + prop.setComment("Dimension ID for Asteroids"); + prop.setLanguageKey("gc.configgui.dimension_id_asteroids").setRequiresMcRestart(true); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, prop.getName(), prop.getInt(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + propCopy.setRequiresMcRestart(prop.requiresMcRestart()); + } + dimensionIDAsteroids = prop.getInt(); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_DIMENSIONS); + + // + + prop = config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicRocketT3", 4); + prop.setComment("Schematic ID for Tier 3 Rocket, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_rocket_t3"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, prop.getName(), prop.getInt(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + idSchematicRocketT3 = prop.getInt(4); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_SCHEMATIC); + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "disableGalacticraftHelium", false); + prop.setComment("Option to disable Helium gas in Galacticraft (because it will be registered by another mod eg GregTech)."); + prop.setLanguageKey("gc.configgui.disable_galacticraft_helium"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_GENERAL, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableGalacticraftHelium = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "maximumAstroMiners", 6); + prop.setComment("Maximum number of Astro Miners each player is allowed to have active (default 6)."); + prop.setLanguageKey("gc.configgui.astro_miners_max"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_GENERAL, prop.getName(), prop.getInt(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + astroMinerMax = prop.getInt(6); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "disableSmallAsteroids", false); + prop.setComment("Option to disable small asteroids from spawning in the Asteroids Dimension."); + prop.setLanguageKey("gc.configgui.disable_small_asteroids"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_GENERAL, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableSmallAsteroids = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Iron Ore Gen on Asteroids", false); + prop.setComment("Disable Iron Ore Gen on Asteroids."); + prop.setLanguageKey("gc.configgui.disable_iron_gen_asteroids"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableIronGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Aluminum Ore Gen on Asteroids", false); + prop.setComment("Disable Aluminum Ore Gen on Asteroids."); + prop.setLanguageKey("gc.configgui.disable_aluminum_gen_asteroids"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableAluminumGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Ilmenite Ore Gen on Asteroids", false); + prop.setComment("Disable Ilmenite Ore Gen on Asteroids."); + prop.setLanguageKey("gc.configgui.disable_ilmenite_gen_asteroids"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableIlmeniteGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + } catch (final Exception e) + { + GalacticraftPlanets.logger.error(e, "Galacticraft Asteroids (Planets) has a problem loading its config"); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/AsteroidBlocks.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/AsteroidBlocks.java new file mode 100644 index 00000000..5bc8c36e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/AsteroidBlocks.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGC; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemBlockAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemBlockShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemBlockWalkway; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public class AsteroidBlocks +{ + + public static Block blockWalkway; + public static Block blockBasic; + // public static Block machineFrame; + public static Block beamReflector; + public static Block beamReceiver; + public static Block shortRangeTelepad; + public static Block fakeTelepad; + public static Block blockDenseIce; + public static Block blockMinerBase; + public static Block minerBaseFull; + public static Block spaceWart; + + public static void initBlocks() + { + AsteroidBlocks.blockWalkway = new BlockWalkway("walkway"); + AsteroidBlocks.blockBasic = new BlockBasicAsteroids("asteroids_block"); + AsteroidBlocks.beamReflector = new BlockBeamReflector("beam_reflector"); + AsteroidBlocks.beamReceiver = new BlockBeamReceiver("beam_receiver"); + AsteroidBlocks.shortRangeTelepad = new BlockShortRangeTelepad("telepad_short"); + AsteroidBlocks.fakeTelepad = new BlockTelepadFake("telepad_fake"); + AsteroidBlocks.blockDenseIce = new BlockIceAsteroids("dense_ice"); + AsteroidBlocks.blockMinerBase = new BlockMinerBase("miner_base"); + AsteroidBlocks.minerBaseFull = new BlockMinerBaseFull("miner_base_full"); + AsteroidBlocks.spaceWart = new BlockSpaceWart("spacewart"); + } + + public static void registerBlock(Block block, Class itemClass) + { + GCBlocks.register(Constants.MOD_ID_PLANETS, block, itemClass); + } + + public static void registerBlocks() + { + registerBlock(AsteroidBlocks.blockBasic, ItemBlockAsteroids.class); + registerBlock(AsteroidBlocks.blockWalkway, ItemBlockWalkway.class); + registerBlock(AsteroidBlocks.beamReflector, ItemBlockDesc.class); + registerBlock(AsteroidBlocks.beamReceiver, ItemBlockDesc.class); + registerBlock(AsteroidBlocks.shortRangeTelepad, ItemBlockShortRangeTelepad.class); + registerBlock(AsteroidBlocks.fakeTelepad, null); + registerBlock(AsteroidBlocks.blockDenseIce, ItemBlockGC.class); + registerBlock(AsteroidBlocks.blockMinerBase, ItemBlockDesc.class); + registerBlock(AsteroidBlocks.minerBaseFull, null); + registerBlock(AsteroidBlocks.spaceWart, null); + } + + private static void setHarvestLevel(Block block, String toolClass, int level, int meta) + { + block.setHarvestLevel(toolClass, level, block.getStateFromMeta(meta)); + } + + private static void setHarvestLevel(Block block, String toolClass, int level) + { + block.setHarvestLevel(toolClass, level); + } + + public static void setHarvestLevels() + { + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 0, 0); // Rock + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 0, 1); // Rock + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 0, 2); // Rock + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 2, 3); // Aluminium + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 3, 4); // Ilmenite + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 2, 5); // Iron + } + + public static void oreDictRegistration() + { + OreDictionary.registerOre("oreAluminum", new ItemStack(AsteroidBlocks.blockBasic, 1, 3)); + OreDictionary.registerOre("oreAluminium", new ItemStack(AsteroidBlocks.blockBasic, 1, 3)); + OreDictionary.registerOre("oreNaturalAluminum", new ItemStack(AsteroidBlocks.blockBasic, 1, 3)); + OreDictionary.registerOre("oreIlmenite", new ItemStack(AsteroidBlocks.blockBasic, 1, 4)); + OreDictionary.registerOre("oreIron", new ItemStack(AsteroidBlocks.blockBasic, 1, 5)); + + OreDictionary.registerOre("blockTitanium", new ItemStack(AsteroidBlocks.blockBasic, 1, 7)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBasicAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBasicAsteroids.java new file mode 100644 index 00000000..270e5a13 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBasicAsteroids.java @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.block.IPlantableBlock; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBasicAsteroids extends Block implements IDetectableResource, IPlantableBlock, ITerraformableBlock, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE = PropertyEnum.create("basictypeasteroids", EnumBlockBasic.class); + + public enum EnumBlockBasic implements IStringSerializable + { + + ASTEROID_0(0, "asteroid_rock_0"), + ASTEROID_1(1, "asteroid_rock_1"), + ASTEROID_2(2, "asteroid_rock_2"), + ORE_ALUMINUM(3, "ore_aluminum_asteroids"), + ORE_ILMENITE(4, "ore_ilmenite_asteroids"), + ORE_IRON(5, "ore_iron_asteroids"), + DECO(6, "asteroid_deco"), + TITANIUM_BLOCK(7, "titanium_block"); + + private final int meta; + private final String name; + + private EnumBlockBasic(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockBasic[] values = values(); + + public static EnumBlockBasic byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockBasicAsteroids(String assetName) + { + super(Material.ROCK); + this.blockHardness = 3.0F; + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_ILMENITE && world instanceof World) + { + ArrayList ret = new ArrayList(); + + int count = quantityDropped(state, fortune, ((World) world).rand); + for (int i = 0; i < count; i++) + { + ret.add(new ItemStack(AsteroidsItems.basicItem, 1, 3)); + } + count = quantityDropped(state, fortune, ((World) world).rand); + for (int i = 0; i < count; i++) + { + ret.add(new ItemStack(AsteroidsItems.basicItem, 1, 4)); + } + return ret; + } + + return super.getDrops(world, pos, state, fortune); + } + + @Override + public int damageDropped(IBlockState state) + { + switch (getMetaFromState(state)) + { + case 4: + return 0; + default: + return getMetaFromState(state); + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + switch (getMetaFromState(state)) + { + case 4: + if (fortune >= 1) + { + return (random.nextFloat() < fortune * 0.29F - 0.25F) ? 2 : 1; + } + default: + return 1; + } + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + int var4; + + for (var4 = 0; var4 < EnumBlockBasic.values().length; ++var4) + { + list.add(new ItemStack(this, 1, var4)); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + switch (this.getMetaFromState(state)) + { + case 3: + case 4: + case 5: + return true; + default: + return false; + } + } + + @Override + public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) + { + return false; + } + + @Override + public int requiredLiquidBlocksNearby() + { + return 4; + } + + @Override + public boolean isPlantable(IBlockState state) + { + return false; + } + + @Override + public boolean isTerraformable(World world, BlockPos pos) + { + return false; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_ILMENITE) + { + return new ItemStack(Item.getItemFromBlock(this), 1, getMetaFromState(state)); + } + + return super.getPickBlock(state, target, world, pos, player); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE, EnumBlockBasic.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasic) state.getValue(BASIC_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + switch (meta) + { + case 3: + case 4: + case 5: + return EnumSortCategoryBlock.ORE; + case 6: + return EnumSortCategoryBlock.DECORATION; + case 7: + return EnumSortCategoryBlock.INGOT_BLOCK; + } + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + int meta = this.getMetaFromState(state); + if (meta == 4) + { + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 2, 3); + } + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReceiver.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReceiver.java new file mode 100644 index 00000000..93d31a24 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReceiver.java @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReceiver; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBeamReceiver extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing"); + protected static final AxisAlignedBB UP_AABB = new AxisAlignedBB(0.3F, 0.3F, 0.3F, 0.7F, 1.0F, 0.7F); + protected static final AxisAlignedBB DOWN_AABB = new AxisAlignedBB(0.2F, 0.0F, 0.2F, 0.8F, 0.42F, 0.8F); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.58F, 0.2F, 0.2F, 1.0F, 0.8F, 0.8F); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.0F, 0.2F, 0.2F, 0.42F, 0.8F, 0.8F); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.0F, 0.8F, 0.8F, 0.42F); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.58F, 0.8F, 0.8F, 1.0F); + + public BlockBeamReceiver(String assetName) + { + super(Material.IRON); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case UP: + return UP_AABB; + case DOWN: + return DOWN_AABB; + case EAST: + return EAST_AABB; + case WEST: + return WEST_AABB; + case SOUTH: + return SOUTH_AABB; + default: + case NORTH: + return NORTH_AABB; + } + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + int oldMeta = getMetaFromState(state); + int meta = this.getMetadataFromAngle(worldIn, pos, EnumFacing.byIndex(oldMeta).getOpposite()); + + if (meta == -1) + { + worldIn.destroyBlock(pos, true); + } else if (meta != oldMeta) + { + worldIn.setBlockState(pos, getStateFromMeta(meta), 3); + TileEntity thisTile = worldIn.getTileEntity(pos); + if (thisTile instanceof TileEntityBeamReceiver) + { + TileEntityBeamReceiver thisReceiver = (TileEntityBeamReceiver) thisTile; + thisReceiver.setFacing(EnumFacing.byIndex(meta)); + thisReceiver.invalidateReflector(); + thisReceiver.initiateReflector(); + } + } + + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } + + @Override + public void onBlockAdded(World world, BlockPos pos, IBlockState state) + { + TileEntity thisTile = world.getTileEntity(pos); + if (thisTile instanceof TileEntityBeamReceiver) + { + ((TileEntityBeamReceiver) thisTile).setFacing(EnumFacing.byIndex(getMetaFromState(state))); + } + } + + private int getMetadataFromAngle(World world, BlockPos pos, EnumFacing side) + { + EnumFacing direction = side.getOpposite(); + + TileEntity tileAt = world.getTileEntity(pos.add(direction.getXOffset(), direction.getYOffset(), direction.getZOffset())); + + if (tileAt instanceof EnergyStorageTile) + { + if (((EnergyStorageTile) tileAt).getModeFromDirection(direction.getOpposite()) != null) + { + return direction.ordinal(); + } else + { + return -1; + } + } + + if (EnergyUtil.otherModCanReceive(tileAt, direction.getOpposite())) + { + return direction.ordinal(); + } + + for (EnumFacing adjacentDir : EnumFacing.VALUES) + { + if (adjacentDir == direction) + { + continue; + } + tileAt = world.getTileEntity(pos.add(adjacentDir.getXOffset(), adjacentDir.getYOffset(), adjacentDir.getZOffset())); + + if (tileAt instanceof IConductor) + { + continue; + } + + if (tileAt instanceof EnergyStorageTile && ((EnergyStorageTile) tileAt).getModeFromDirection(adjacentDir.getOpposite()) != null) + { + return adjacentDir.ordinal(); + } + + if (EnergyUtil.otherModCanReceive(tileAt, adjacentDir.getOpposite())) + { + return adjacentDir.ordinal(); + } + } + + return -1; + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + return getStateFromMeta(this.getMetadataFromAngle(world, pos, facing)); + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + if (this.getMetadataFromAngle(worldIn, pos, side) != -1) + { + return true; + } + + if (worldIn.isRemote) + { + this.sendIncorrectSideMessage(); + } + + return false; + } + + @SideOnly(Side.CLIENT) + private void sendIncorrectSideMessage() + { + FMLClientHandler.instance().getClient().player.sendMessage(new TextComponentString(EnumColor.RED + GCCoreUtil.translate("gui.receiver.cannot_attach"))); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public int damageDropped(IBlockState metadata) + { + return 0; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState metadata) + { + return new TileEntityBeamReceiver(); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityBeamReceiver) + { + return ((TileEntityBeamReceiver) tile).onMachineActivated(worldIn, pos, state, playerIn, hand, heldItem, side, hitX, hitY, hitZ); + } + + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReflector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReflector.java new file mode 100644 index 00000000..76143307 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReflector.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReflector; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBeamReflector extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.25, 0.0, 0.25, 0.75, 0.8, 0.75); + + public BlockBeamReflector(String assetName) + { + super(Material.IRON); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityBeamReflector(); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + } + + @Override + public boolean onSneakMachineActivated(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntityBeamReflector) + { + return ((TileEntityBeamReflector) tile).onMachineActivated(world, pos, world.getBlockState(pos), entityPlayer, hand, heldItem, side, hitX, hitY, hitZ); + } + + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockIceAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockIceAsteroids.java new file mode 100644 index 00000000..59421551 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockIceAsteroids.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBreakable; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockIceAsteroids extends BlockBreakable implements ISortableBlock +{ + + public BlockIceAsteroids(String assetName) + { + super(Material.ICE, false); + this.slipperiness = 0.98F; + this.setTickRandomly(true); + this.setHardness(0.5F); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.GLASS); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te, ItemStack tool) + { + player.addStat(StatList.getBlockStats(this)); + player.addExhaustion(0.025F); + + if (this.canSilkHarvest(worldIn, pos, state, player) && EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) + { + ArrayList items = new ArrayList(); + items.add(this.getSilkTouchDrop(state)); + + ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player); + for (ItemStack is : items) + { + Block.spawnAsEntity(worldIn, pos, is); + } + } else + { + if (worldIn.provider.getDimension() == -1 || worldIn.provider instanceof IGalacticraftWorldProvider) + { + worldIn.setBlockToAir(pos); + return; + } + + int i1 = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, tool); + harvesters.set(player); + this.dropBlockAsItem(worldIn, pos, state, i1); + harvesters.set(null); + IBlockState state1 = worldIn.getBlockState(pos.down()); + Material material = state1.getMaterial(); + + if (material.blocksMovement() || material.isLiquid()) + { + worldIn.setBlockState(pos, Blocks.FLOWING_WATER.getDefaultState()); + } + } + } + + @Override + public int quantityDropped(Random rand) + { + return 0; + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (worldIn.getLightFor(EnumSkyBlock.BLOCK, pos) > 13 - this.getLightOpacity(state)) + { + if (GCCoreUtil.getDimensionID(worldIn) == -1 || worldIn.provider instanceof IGalacticraftWorldProvider) + { + worldIn.setBlockToAir(pos); + return; + } + + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockState(pos, Blocks.WATER.getDefaultState()); + } + } + + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.NORMAL; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBase.java new file mode 100644 index 00000000..b0569a0a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBase.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBaseSingle; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockMinerBase extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + public BlockMinerBase(String assetName) + { + super(Material.ROCK); + this.blockHardness = 3.0F; + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public Item getItemDropped(IBlockState state, Random random, int par3) + { + return super.getItemDropped(state, random, par3); + } + + @Override + public int damageDropped(IBlockState state) + { + return 0; + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + return 1; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState metadata) + { + return new TileEntityMinerBaseSingle(); + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + return getStateFromMeta(0); + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBaseFull.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBaseFull.java new file mode 100644 index 00000000..9fa083a3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBaseFull.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockMinerBaseFull extends BlockTileGC +{ + + public BlockMinerBaseFull(String assetName) + { + super(Material.ROCK); + this.blockHardness = 3.0F; + this.setResistance(35F); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public int damageDropped(IBlockState state) + { + return 0; + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + return 1; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityMinerBase(); + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tileEntity).onBlockRemoval(); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + if (tileEntity instanceof TileEntityMinerBase) + { + return ((TileEntityMinerBase) tileEntity).onActivated(playerIn); + } else + { + return false; + } + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(AsteroidBlocks.blockMinerBase); + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(Item.getItemFromBlock(AsteroidBlocks.blockMinerBase), 8, 0)); + return ret; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(AsteroidBlocks.blockMinerBase), 1, 0); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity te = world.getTileEntity(pos); + if (te instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) te).updateFacing(); + } + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockShortRangeTelepad.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockShortRangeTelepad.java new file mode 100644 index 00000000..93e7f221 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockShortRangeTelepad.java @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.ShortRangeTelepadHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockShortRangeTelepad extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + protected static final AxisAlignedBB AABB_TELEPAD = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 0.45F, 1.0F); + + protected BlockShortRangeTelepad(String assetName) + { + super(Material.IRON); + this.blockHardness = 3.0F; + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityShortRangeTelepad(); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB_TELEPAD; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + + TileEntity tile = worldIn.getTileEntity(pos); + + boolean validSpot = true; + + for (int x = -1; x <= 1; x++) + { + for (int y = 0; y < 3; y += 2) + { + for (int z = -1; z <= 1; z++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + IBlockState stateAt = worldIn.getBlockState(pos.add(x, y, z)); + + if (!stateAt.getMaterial().isReplaceable()) + { + validSpot = false; + } + } + } + } + } + + if (!validSpot) + { + worldIn.setBlockToAir(pos); + + if (placer instanceof EntityPlayer) + { + if (!worldIn.isRemote) + { + ((EntityPlayer) placer).sendMessage(new TextComponentString(EnumColor.RED + GCCoreUtil.translate("gui.warning.noroom"))); + } + ((EntityPlayer) placer).inventory.addItemStackToInventory(new ItemStack(Item.getItemFromBlock(this), 1, 0)); + } + + return; + } + + if (tile instanceof TileEntityShortRangeTelepad) + { + ((TileEntityShortRangeTelepad) tile).onCreate(worldIn, pos); + ((TileEntityShortRangeTelepad) tile).setOwner(PlayerUtil.getName(((EntityPlayer) placer))); + } + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return ((IMultiBlock) worldIn.getTileEntity(pos)).onActivated(playerIn); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity tileAt = worldIn.getTileEntity(pos); + + int fakeBlockCount = 0; + + for (int x = -1; x <= 1; x++) + { + for (int y = 0; y < 3; y += 2) + { + for (int z = -1; z <= 1; z++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + if (worldIn.getBlockState(pos.add(x, y, z)).getBlock() == AsteroidBlocks.fakeTelepad) + { + fakeBlockCount++; + } + } + } + } + } + + if (tileAt instanceof TileEntityShortRangeTelepad) + { + if (fakeBlockCount > 0) + { + ((TileEntityShortRangeTelepad) tileAt).onDestroy(tileAt); + } + ShortRangeTelepadHandler.removeShortRangeTeleporter((TileEntityShortRangeTelepad) tileAt); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + final TileEntity tileAt = worldIn.getTileEntity(pos); + + if (tileAt instanceof TileEntityShortRangeTelepad) + { + TileEntityShortRangeTelepad telepad = (TileEntityShortRangeTelepad) tileAt; + float teleportTimeScaled = Math.min(1.0F, telepad.teleportTime / (float) TileEntityShortRangeTelepad.MAX_TELEPORT_TIME); + float f; + float r; + float g; + float b; + + for (int i = 0; i < 6; i++) + { + for (int j = 0; j < 4; j++) + { + f = rand.nextFloat() * 0.6F + 0.4F; + r = f * 0.3F; + g = f * (0.3F + (teleportTimeScaled * 0.7F)); + b = f * (1.0F - (teleportTimeScaled * 0.7F)); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + 0.2 + rand.nextDouble() * 0.6, pos.getY() + 0.1, pos.getZ() + 0.2 + rand.nextDouble() * 0.6), + new Vector3(0.0, 1.4, 0.0), telepad, false); + } + + f = rand.nextFloat() * 0.6F + 0.4F; + r = f * 0.3F; + g = f * (0.3F + (teleportTimeScaled * 0.7F)); + b = f * (1.0F - (teleportTimeScaled * 0.7F)); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + 0.0 + rand.nextDouble() * 0.2, pos.getY() + 2.9, pos.getZ() + rand.nextDouble()), new Vector3(0.0, -2.95, 0.0), + telepad, true); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + 0.8 + rand.nextDouble() * 0.2, pos.getY() + 2.9, pos.getZ() + rand.nextDouble()), new Vector3(0.0, -2.95, 0.0), + telepad, true); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + rand.nextDouble(), pos.getY() + 2.9, pos.getZ() + 0.2 + rand.nextDouble() * 0.2), new Vector3(0.0, -2.95, 0.0), + telepad, true); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + rand.nextDouble(), pos.getY() + 2.9, pos.getZ() + 0.8 + rand.nextDouble() * 0.2), new Vector3(0.0, -2.95, 0.0), + telepad, true); + } + } + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockSpaceWart.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockSpaceWart.java new file mode 100644 index 00000000..6197ba94 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockSpaceWart.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import net.minecraft.block.BlockNetherWart; + +public class BlockSpaceWart extends BlockNetherWart +{ + + public BlockSpaceWart(String assetName) + { + super(); + this.setTickRandomly(false); + this.setTranslationKey(assetName); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockTelepadFake.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockTelepadFake.java new file mode 100644 index 00000000..c83b39ab --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockTelepadFake.java @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvancedTile; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityTelepadFake; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDirectional; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.ParticleManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import java.util.Random; + +public class BlockTelepadFake extends BlockAdvancedTile implements ITileEntityProvider +{ + + public static final PropertyBool TOP = PropertyBool.create("top"); + public static final PropertyBool CONNECTABLE = PropertyBool.create("connectable"); + protected static final AxisAlignedBB AABB_TOP = new AxisAlignedBB(0.0F, 0.55F, 0.0F, 1.0F, 1.0F, 1.0F); + protected static final AxisAlignedBB AABB_BOTTOM = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 0.2F, 1.0F); + + public BlockTelepadFake(String assetName) + { + super(GCBlocks.machine); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setResistance(1000000000000000.0F); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return state.getValue(TOP) ? AABB_TOP : AABB_BOTTOM; + } + + @Override + public boolean canDropFromExplosion(Explosion par1Explosion) + { + return false; + } + + public void makeFakeBlock(World worldObj, BlockPos pos, BlockPos mainBlock, IBlockState state) + { + worldObj.setBlockState(pos, state, 3); + ((TileEntityTelepadFake) worldObj.getTileEntity(pos)).setMainBlock(mainBlock); + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityTelepadFake) + { + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + return worldIn.getBlockState(mainBlockPosition).getBlockHardness(worldIn, mainBlockPosition); + } + } + + return this.blockHardness; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityTelepadFake) + { + ((TileEntityTelepadFake) tileEntity).onBlockRemoval(); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntityTelepadFake tileEntity = (TileEntityTelepadFake) worldIn.getTileEntity(pos); + return tileEntity.onActivated(playerIn); + } + + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World var1, int meta) + { + return new TileEntityTelepadFake(); + } + + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + IBlockState mainBlockState = world.getBlockState(mainBlockPosition); + Block mainBlockID = mainBlockState.getBlock(); + + if (Blocks.AIR != mainBlockID) + { + return mainBlockID.getPickBlock(mainBlockState, target, world, mainBlockPosition, player); + } + } + + return ItemStack.EMPTY; + } + + @Override + public EnumFacing getBedDirection(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + IBlockState mainBlockState = world.getBlockState(mainBlockPosition); + return mainBlockState.getBlock().getBedDirection(mainBlockState, world, mainBlockPosition); + } + + return getActualState(world.getBlockState(pos), world, pos).getValue(BlockDirectional.FACING); + } + + @Override + public boolean isBed(IBlockState state, IBlockAccess world, BlockPos pos, Entity player) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + return world.getBlockState(pos).getBlock().isBed(world.getBlockState(mainBlockPosition), world, mainBlockPosition, player); + } + + return super.isBed(state, world, pos, player); + } + + @Override + public void setBedOccupied(IBlockAccess world, BlockPos pos, EntityPlayer player, boolean occupied) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + world.getBlockState(pos).getBlock().setBedOccupied(world, mainBlockPosition, player, occupied); + } else + { + super.setBedOccupied(world, pos, player, occupied); + } + } + + @Override + public boolean addHitEffects(IBlockState state, World worldObj, RayTraceResult target, ParticleManager manager) + { + TileEntity tileEntity = worldObj.getTileEntity(target.getBlockPos()); + + if (tileEntity instanceof TileEntityTelepadFake) + { + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + manager.addBlockHitEffects(mainBlockPosition, target); + } + } + + return super.addHitEffects(state, worldObj, target, manager); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, TOP, CONNECTABLE); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(TOP, meta % 2 == 1).withProperty(CONNECTABLE, meta > 1); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(TOP) ? 1 : 0) + (state.getValue(CONNECTABLE) ? 2 : 0); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockWalkway.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockWalkway.java new file mode 100644 index 00000000..fa6eb7ca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockWalkway.java @@ -0,0 +1,291 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTransmitter; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWire; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNull; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockWalkway extends BlockTransmitter implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum WALKWAY_TYPE = PropertyEnum.create("type", EnumWalkwayType.class); + protected static final AxisAlignedBB AABB_UNCONNECTED = new AxisAlignedBB(0.0, 0.32, 0.0, 1.0, 1.0, 1.0); + protected static final AxisAlignedBB AABB_CONNECTED_DOWN = new AxisAlignedBB(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + + public enum EnumWalkwayType implements IStringSerializable + { + + WALKWAY(0, "walkway"), WALKWAY_WIRE(1, "walkway_wire"), WALKWAY_PIPE(2, "walkway_pipe"); + + private final int meta; + private final String name; + + private EnumWalkwayType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumWalkwayType[] values = values(); + + public static EnumWalkwayType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + protected BlockWalkway(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + this.hasTileEntity = true; + this.setDefaultState(this.blockState.getBaseState().withProperty(WALKWAY_TYPE, EnumWalkwayType.WALKWAY)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + + if (state.getValue(DOWN)) + { + return AABB_CONNECTED_DOWN; + } + + return AABB_UNCONNECTED; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public boolean isNormalCube(IBlockState state) + { + return state.getMaterial().blocksMovement() && state.getBlock().isFullCube(state); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int metadata) + { + if (metadata == EnumWalkwayType.WALKWAY_PIPE.getMeta()) + { + return new TileEntityFluidPipe(); + } + + if (metadata == EnumWalkwayType.WALKWAY_WIRE.getMeta()) + { + return new TileEntityAluminumWire(2); + } + + return new TileEntityNull(); + } + + @Override + public NetworkType getNetworkType(IBlockState state) + { + if (state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY_PIPE) + { + return NetworkType.FLUID; + } + + if (state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY_PIPE) + { + return NetworkType.POWER; + } + + return null; + } + + @Override + public String getShiftDescription(int meta) + { + if (meta == EnumWalkwayType.WALKWAY.getMeta()) + { + return GCCoreUtil.translate("tile.walkway.walkway.description"); + } else if (meta == EnumWalkwayType.WALKWAY_WIRE.getMeta()) + { + return GCCoreUtil.translate("tile.walkway.walkway_wire.description"); + } else if (meta == EnumWalkwayType.WALKWAY_PIPE.getMeta()) + { + return GCCoreUtil.translate("tile.walkway.walkway_pipe.description"); + } + + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, WALKWAY_TYPE, NORTH, EAST, SOUTH, WEST, DOWN); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + Object[] connectable = new Object[EnumFacing.VALUES.length]; + + TileEntity tileEntity = null; + + if (state.getValue(WALKWAY_TYPE) != EnumWalkwayType.WALKWAY) + { + tileEntity = worldIn.getTileEntity(pos); + } + for (EnumFacing direction : EnumFacing.VALUES) + { + if (direction == EnumFacing.UP || (direction == EnumFacing.DOWN && tileEntity == null)) + { + continue; + } + + if (state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY) + { + BlockPos neighbour = pos.offset(direction); + Block block = worldIn.getBlockState(neighbour).getBlock(); + + if (block == this || block.isSideSolid(worldIn.getBlockState(neighbour), worldIn, neighbour, direction.getOpposite())) + { + connectable[direction.ordinal()] = block; + } + } else if (tileEntity != null && state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY_PIPE) + { + connectable = OxygenUtil.getAdjacentFluidConnections(tileEntity); + } else if (tileEntity != null && state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY_WIRE) + { + connectable = EnergyUtil.getAdjacentPowerConnections(tileEntity); + } + } + + return state.withProperty(NORTH, Boolean.valueOf(connectable[EnumFacing.NORTH.ordinal()] != null)).withProperty(EAST, Boolean.valueOf(connectable[EnumFacing.EAST.ordinal()] != null)) + .withProperty(SOUTH, Boolean.valueOf(connectable[EnumFacing.SOUTH.ordinal()] != null)).withProperty(WEST, Boolean.valueOf(connectable[EnumFacing.WEST.ordinal()] != null)) + .withProperty(DOWN, Boolean.valueOf(connectable[EnumFacing.DOWN.ordinal()] != null)); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(WALKWAY_TYPE, EnumWalkwayType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumWalkwayType) state.getValue(WALKWAY_TYPE)).getMeta(); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + list.add(new ItemStack(this, 1, 2)); + } + + @Override + public int damageDropped(IBlockState state) + { + return this.getMetaFromState(state); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/FluidTexturesGC.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/FluidTexturesGC.java new file mode 100644 index 00000000..f11f3c1f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/FluidTexturesGC.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class FluidTexturesGC +{ + public static void init() + { + MinecraftForge.EVENT_BUS.register(new FluidTexturesGC()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/SkyProviderAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/SkyProviderAsteroids.java new file mode 100644 index 00000000..ed847dfe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/SkyProviderAsteroids.java @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class SkyProviderAsteroids extends IRenderHandler +{ + + private static final ResourceLocation overworldTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + private static final ResourceLocation galaxyTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/planets/galaxy.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/orbitalsun.png"); + + public int starGLCallList = GLAllocation.generateDisplayLists(3); + public int glSkyList; + public int glSkyList2; + + private float sunSize; + + public SkyProviderAsteroids(IGalacticraftWorldProvider asteroidsProvider) + { + this.sunSize = 17.5F * asteroidsProvider.getSolarSize(); + + GL11.glPushMatrix(); + GL11.glNewList(this.starGLCallList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + this.glSkyList = this.starGLCallList + 1; + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j + 0, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j + 0, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + this.glSkyList2 = this.starGLCallList + 2; + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + float var10; + float var11; + float var12; + final Tessellator var23 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var23.getBuffer(); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + GL11.glColor3f(1F, 1F, 1F); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(0, 0, 0); + GL11.glCallList(this.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.7F, 0.7F, 0.7F, 0.7F); + GL11.glCallList(this.starGLCallList); + + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + // Sun: + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + var12 = this.sunSize / 4.2F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-var12, 90.0D, -var12).endVertex(); + worldRenderer.pos(var12, 90.0D, -var12).endVertex(); + worldRenderer.pos(var12, 90.0D, var12).endVertex(); + worldRenderer.pos(-var12, 90.0D, var12).endVertex(); + var23.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var12 = this.sunSize / 1.2F; + // 110 distance instead of the normal 100, because there is no + // atmosphere to make the disk seem larger + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderAsteroids.sunTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, 90.0D, -var12).tex(0.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 90.0D, -var12).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 90.0D, var12).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(-var12, 90.0D, var12).tex(0.0D, 1.0D).endVertex(); + var23.draw(); + + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + + // HOME: + var12 = 0.5F; + GL11.glScalef(0.6F, 0.6F, 0.6F); + GL11.glRotatef(40.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(200F, 1.0F, 0.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1F); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderAsteroids.overworldTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, -100.0D, var12).tex(0, 1.0).endVertex(); + worldRenderer.pos(var12, -100.0D, var12).tex(1.0, 1.0).endVertex(); + worldRenderer.pos(var12, -100.0D, -var12).tex(1.0, 0).endVertex(); + worldRenderer.pos(-var12, -100.0D, -var12).tex(0, 0).endVertex(); + var23.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + final double var25 = mc.player.getPosition().getY() - world.getHorizon(); + + GL11.glColor3f(70F / 256F, 70F / 256F, 70F / 256F); + + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random var1 = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var2.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int var3 = 0; var3 < (ConfigManagerCore.moreStars ? 35000 : 6000); ++var3) + { + double var4 = var1.nextFloat() * 2.0F - 1.0F; + double var6 = var1.nextFloat() * 2.0F - 1.0F; + double var8 = var1.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.08F + var1.nextFloat() * 0.07F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double pX = var4 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 75D + 65D : 80.0D); + final double pY = var6 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 75D + 65D : 80.0D); + final double pZ = var8 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 75D + 65D : 80.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = var1.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int i = 0; i < 4; ++i) + { + final double i1 = ((i & 2) - 1) * var10; + final double i2 = ((i + 1 & 2) - 1) * var10; + final double var47 = i1 * var36 - i2 * var34; + final double var49 = i2 * var36 + i1 * var34; + final double var55 = -var47 * var30; + final double dX = var55 * var22 - var49 * var24; + final double dZ = var49 * var22 + var55 * var24; + final double dY = var47 * var28; + worldRenderer.pos(pX + dX, pY + dY, pZ + dZ).endVertex(); + } + } + } + + var2.draw(); + } + + private Vec3d getCustomSkyColor() + { + return new Vec3d(0.26796875D, 0.1796875D, 0.0D); + } + + public float getSkyBrightness(float par1) + { + final float var2 = FMLClientHandler.instance().getClient().world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.sin(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/fx/EntityFXTeleport.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/fx/EntityFXTeleport.java new file mode 100644 index 00000000..c9a00de7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/fx/EntityFXTeleport.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.fx; + +import java.lang.ref.WeakReference; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class EntityFXTeleport extends Particle +{ + + private float portalParticleScale; + private double portalPosX; + private double portalPosY; + private double portalPosZ; + private WeakReference telepad; + private boolean direction; + + public EntityFXTeleport(World par1World, Vector3 position, Vector3 motion, TileEntityShortRangeTelepad telepad, boolean direction) + { + super(par1World, position.x, position.y, position.z, motion.x, motion.y, motion.z); + this.motionX = motion.x; + this.motionY = motion.y; + this.motionZ = motion.z; + this.portalPosX = this.posX = position.x; + this.portalPosY = this.posY = position.y; + this.portalPosZ = this.posZ = position.z; + this.portalParticleScale = this.particleScale = this.rand.nextFloat() * 0.2F + 0.5F; + this.particleMaxAge = (int) (Math.random() * 10.0D) + 40; + this.canCollide = false; + this.canCollide = false; + this.setParticleTextureIndex((int) (Math.random() * 8.0D)); + this.telepad = new WeakReference(telepad); + this.direction = direction; + } + + @Override + public void renderParticle(BufferBuilder worldRenderer, Entity entity, float f0, float f1, float f2, float f3, float f4, float f5) + { + float f6 = (this.particleAge + f0) / this.particleMaxAge; + f6 = 1.0F - f6; + f6 *= f6; + f6 = 1.0F - f6; + this.particleScale = this.portalParticleScale * f6; + super.renderParticle(worldRenderer, entity, f0, f1, f2, f3, f4, f5); + } + + @Override + public int getBrightnessForRender(float par1) + { + int i = super.getBrightnessForRender(par1); + float f1 = (float) this.particleAge / (float) this.particleMaxAge; + f1 *= f1; + f1 *= f1; + int j = i & 255; + int k = i >> 16 & 255; + k += (int) (f1 * 15.0F * 16.0F); + + if (k > 240) + { + k = 240; + } + + return j | k << 16; + } + + @Override + public void onUpdate() + { + TileEntityShortRangeTelepad telepad1 = this.telepad.get(); + + if (telepad1 != null) + { + Vector3 color = telepad1.getParticleColor(this.rand, this.direction); + this.particleRed = color.floatX(); + this.particleGreen = color.floatY(); + this.particleBlue = color.floatZ(); + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + float f = (float) this.particleAge / (float) this.particleMaxAge; + float f1 = f; + f = -f + f * f * 2.0F; + f = 1.0F - f; + this.posX = this.portalPosX + this.motionX * f; + this.posY = this.portalPosY + this.motionY * f + (1.0F - f1); + this.posZ = this.portalPosZ + this.motionZ * f; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiAstroMinerDock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiAstroMinerDock.java new file mode 100644 index 00000000..f539e27d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiAstroMinerDock.java @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCargoLoader; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerAstroMinerDock; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiAstroMinerDock extends GuiContainerGC +{ + + private static final ResourceLocation dockGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gui_astro_miner_dock.png"); + private final TileEntityMinerBase tile; + private GuiButton recallButton; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 233, (this.height - this.ySize) / 2 + 31, 10, 68, new ArrayList(), this.width, this.height, this); + private boolean extraLines; + + public GuiAstroMinerDock(InventoryPlayer playerInventory, TileEntityMinerBase dock) + { + super(new ContainerAstroMinerDock(playerInventory, dock)); + this.xSize = 256; + this.ySize = 221; + this.tile = dock; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.recallButton.enabled = true; + + if (this.tile.linkedMinerID == null) + { + this.recallButton.enabled = false; + } else + { + if (this.tile.linkedMinerDataAIState < EntityAstroMiner.AISTATE_TRAVELLING || this.tile.linkedMinerDataAIState == EntityAstroMiner.AISTATE_DOCKING) + { + this.recallButton.enabled = false; + } + } + this.recallButton.displayString = GCCoreUtil.translate("gui.button.recall.name"); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @Override + public void initGui() + { + super.initGui(); + int xPos = (this.width - this.xSize) / 2; + int yPos = (this.height - this.ySize) / 2; + List electricityDesc = new ArrayList<>(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc + .add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.tile.getEnergyStoredGC()) + " / " + (int) Math.floor(this.tile.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = xPos + 233; + this.electricInfoRegion.yPosition = yPos + 29; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList<>(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(xPos + 230, yPos + 108, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.buttonList.add(this.recallButton = new GuiButton(0, xPos + 173, yPos + 195, 76, 20, GCCoreUtil.translate("gui.button.recall.name"))); + } + + @Override + protected void actionPerformed(GuiButton button) + { + if (button.enabled) + { + switch (button.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.tile.getPos(), 0})); + break; + default: + break; + } + } + } + + private String getDeltaString(int num) + { + return num > 0 ? "+" + num : "" + num; + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(this.tile.getName(), 7, 6, 4210752); + this.fontRenderer.drawString(this.getStatus(), 177, 141, 4210752); + + if (this.extraLines) + { + this.fontRenderer.drawString("\u0394x: " + this.getDeltaString(this.tile.linkedMinerDataDX), 186, 152, 2536735); + } + if (this.extraLines) + { + this.fontRenderer.drawString("\u0394y: " + this.getDeltaString(this.tile.linkedMinerDataDY), 186, 162, 2536735); + } + if (this.extraLines) + { + this.fontRenderer.drawString("\u0394z: " + this.getDeltaString(this.tile.linkedMinerDataDZ), 186, 172, 2536735); + } + if (this.extraLines) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.miner.mined") + ": " + this.tile.linkedMinerDataCount, 177, 183, 2536735); + } + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 7, this.ySize - 92, 4210752); + } + + private String getStatus() + { + this.extraLines = false; + + switch (this.tile.linkedMinerDataAIState) + { + case -3: // no linked miner + return ""; + case -2: + return EnumColor.ORANGE + GCCoreUtil.translate("gui.miner.out_of_range"); + case EntityAstroMiner.AISTATE_OFFLINE: + return EnumColor.ORANGE + GCCoreUtil.translate("gui.miner.offline"); + case EntityAstroMiner.AISTATE_STUCK: + this.extraLines = true; + return EnumColor.RED + GCCoreUtil.translate("gui.miner.stuck"); + case EntityAstroMiner.AISTATE_ATBASE: + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.docked"); + case EntityAstroMiner.AISTATE_TRAVELLING: + this.extraLines = true; + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.travelling"); + case EntityAstroMiner.AISTATE_MINING: + this.extraLines = true; + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.mining"); + case EntityAstroMiner.AISTATE_RETURNING: + this.extraLines = true; + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.returning"); + case EntityAstroMiner.AISTATE_DOCKING: + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.docking"); + } + return ""; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int xPos = (this.width - this.xSize) / 2; + int yPos = (this.height - this.ySize) / 2; + this.mc.getTextureManager().bindTexture(GuiAstroMinerDock.dockGui); + this.drawTexturedModalRect(xPos, yPos, 0, 0, this.xSize, this.ySize); + List electricityDesc = new ArrayList<>(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tile.getEnergyStoredGC(), this.tile.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + this.mc.getTextureManager().bindTexture(GuiCargoLoader.loaderTexture); + + if (this.tile.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(xPos + 233, yPos + 17, 176, 0, 11, 10); + } + + int level = Math.min(this.tile.getScaledElecticalLevel(66), 66); + this.drawColorModalRect(xPos + 234, yPos + 29 + 66 - level, 8, level, 0xc1aa24); + } + + private void drawColorModalRect(int x, int y, int width, int height, int color) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GlStateManager.enableBlend(); + GlStateManager.disableTexture2D(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(x + 0, y + height, this.zLevel).color((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, 1.0F).endVertex(); + worldRenderer.pos(x + width, y + height, this.zLevel).color((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, 1.0F).endVertex(); + worldRenderer.pos(x + width, y + 0, this.zLevel).color((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, 1.0F).endVertex(); + worldRenderer.pos(x + 0, y + 0, this.zLevel).color((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, 1.0F).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + GlStateManager.blendFunc(770, 771); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicAstroMiner.java new file mode 100644 index 00000000..07098bd6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicAstroMiner.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.gui; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerSchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicAstroMiner extends GuiPositionedContainer implements ISchematicResultPage +{ + + public static final ResourceLocation schematicTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_astro_miner.png"); + + private int pageIndex; + + public GuiSchematicAstroMiner(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicAstroMiner(par1InventoryPlayer, pos), pos); + this.ySize = 221; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(AsteroidsItems.astroMiner.getItemStackDisplayName(new ItemStack(AsteroidsItems.astroMiner, 1, 0)), 7, -20 + 25, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 220 - 104 + 2 - 16, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicAstroMiner.schematicTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 26, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicTier3Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicTier3Rocket.java new file mode 100644 index 00000000..9f635944 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicTier3Rocket.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.gui; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerSchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicTier3Rocket extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation tier2SchematicTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_t3.png"); + + private int pageIndex; + + public GuiSchematicTier3Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicTier3Rocket(par1InventoryPlayer, pos), pos); + this.ySize = 238; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(AsteroidsItems.tier3Rocket.getItemStackDisplayName(new ItemStack(AsteroidsItems.tier3Rocket, 1, 0)), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 220 - 104 + 2 + 27, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicTier3Rocket.tier2SchematicTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiShortRangeTelepad.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiShortRangeTelepad.java new file mode 100644 index 00000000..215fea52 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiShortRangeTelepad.java @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.gui; + +import com.google.common.collect.Maps; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.network.PacketSimpleAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiShortRangeTelepad extends GuiContainerGC implements ITextBoxCallback +{ + + private static final ResourceLocation launchControllerGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/short_range_telepad.png"); + + private TileEntityShortRangeTelepad telepad; + + private GuiButton enableControllerButton; + private GuiElementTextBox address; + private GuiElementTextBox targetAddress; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 52, 9, null, 0, 0, this); + + private Map cannotEditMap = Maps.newHashMap(); + + public GuiShortRangeTelepad(InventoryPlayer playerInventory, TileEntityShortRangeTelepad telepad) + { + super(new ContainerShortRangeTelepad(playerInventory, telepad, FMLClientHandler.instance().getClient().player)); + this.ySize = 209; + this.telepad = telepad; + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + if (this.telepad.disableCooldown > 0) + { + this.enableControllerButton.enabled = false; + } else + { + this.enableControllerButton.enabled = true; + } + + this.enableControllerButton.displayString = this.telepad.getDisabled(0) ? GCCoreUtil.translate("gui.button.enable.name") : GCCoreUtil.translate("gui.button.disable.name"); + + super.drawScreen(par1, par2, par3); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (keyID != Keyboard.KEY_ESCAPE && keyID != this.mc.gameSettings.keyBindInventory.getKeyCode()) + { + if (this.address.keyTyped(keyChar, keyID)) + { + return; + } + + if (this.targetAddress.keyTyped(keyChar, keyID)) + { + return; + } + } + + super.keyTyped(keyChar, keyID); + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.enableControllerButton = new GuiButton(0, var5 + 70 + 124 - 72, var6 + 16, 48, 20, GCCoreUtil.translate("gui.button.enable.name")); + this.address = new GuiElementTextBox(1, this, var5 + 66, var6 + 16, 48, 20, "", true, 6, false); + this.targetAddress = new GuiElementTextBox(2, this, var5 + 122, var6 + 16 + 22, 48, 20, "", true, 6, false); + this.buttonList.add(this.enableControllerButton); + this.buttonList.add(this.address); + this.buttonList.add(this.targetAddress); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 98; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 113; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 104, 18, 18, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.telepad.desc.0")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 5, (this.height - this.ySize) / 2 + 20, 59, 13, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.telepad.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 5, (this.height - this.ySize) / 2 + 42, 117, 13, batterySlotDesc, this.width, this.height, this)); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.telepad.getPos(), 0})); + break; + default: + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = this.telepad.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, 4210752); + + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 115, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.address.name") + ":", 7, 22, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.dest_address.name") + ":", 7, 44, 4210752); + this.fontRenderer.drawString(this.telepad.getReceivingStatus(), 7, 66, 4210752); + if (!this.telepad.getReceivingStatus().equals(this.telepad.getSendingStatus())) + { + this.fontRenderer.drawString(this.telepad.getSendingStatus(), 7, 88, 4210752); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiShortRangeTelepad.launchControllerGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.telepad.getEnergyStoredGC(), this.telepad.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (this.telepad.getEnergyStoredGC() > 0) + { + int scale = this.telepad.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 99, var6 + 114, 176, 0, Math.min(scale, 54), 7); + } + + GL11.glPopMatrix(); + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.telepad.getOwner()); + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + if (textBox.equals(this.address)) + { + this.telepad.address = textBox.getIntegerValue(); + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleAsteroids(PacketSimpleAsteroids.EnumSimplePacketAsteroids.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {0, this.telepad.getPos(), this.telepad.address})); + } else if (textBox.equals(this.targetAddress)) + { + this.telepad.targetAddress = textBox.getIntegerValue(); + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleAsteroids(PacketSimpleAsteroids.EnumSimplePacketAsteroids.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {1, this.telepad.getPos(), this.telepad.targetAddress})); + } + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + if (textBox.equals(this.address)) + { + return String.valueOf(this.telepad.address); + } else if (textBox.equals(this.targetAddress)) + { + return String.valueOf(this.telepad.targetAddress); + } + + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + if (textBox.equals(this.address)) + { + return this.telepad.addressValid ? ColorUtil.to32BitColor(255, 20, 255, 20) : ColorUtil.to32BitColor(255, 255, 25, 25); + } else if (textBox.equals(this.targetAddress)) + { + if (this.telepad.targetAddressResult == TileEntityShortRangeTelepad.EnumTelepadSearchResult.VALID) + { + return ColorUtil.to32BitColor(255, 20, 255, 20); + } else if (this.telepad.targetAddressResult == TileEntityShortRangeTelepad.EnumTelepadSearchResult.TARGET_DISABLED) + { + return ColorUtil.to32BitColor(255, 255, 170, 25); + } else + { + return ColorUtil.to32BitColor(255, 255, 25, 25); + } + } + + return 0; + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + this.cannotEditMap.put(textBox.id, 50); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/GalacticraftAsteroidsJEI.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/GalacticraftAsteroidsJEI.java new file mode 100644 index 00000000..685e0236 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/GalacticraftAsteroidsJEI.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei; + +import javax.annotation.Nonnull; +import mezz.jei.api.BlankModPlugin; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.IModRegistry; +import mezz.jei.api.JEIPlugin; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer.AstroMinerRecipeCategory; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer.AstroMinerRecipeWrapper; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket.Tier3RocketRecipeCategory; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket.Tier3RocketRecipeMaker; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket.Tier3RocketRecipeWrapper; +import net.minecraft.item.ItemStack; + +@JEIPlugin +public class GalacticraftAsteroidsJEI extends BlankModPlugin +{ + + @Override + public void register(@Nonnull IModRegistry registry) + { + registry.handleRecipes(INasaWorkbenchRecipe.class, Tier3RocketRecipeWrapper::new, RecipeCategories.ROCKET_T3_ID); + registry.handleRecipes(INasaWorkbenchRecipe.class, AstroMinerRecipeWrapper::new, RecipeCategories.ASTRO_MINER_ID); + + registry.addRecipes(Tier3RocketRecipeMaker.getRecipesList(), RecipeCategories.ROCKET_T3_ID); + registry.addRecipes(GalacticraftRegistry.getAstroMinerRecipes(), RecipeCategories.ASTRO_MINER_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.nasaWorkbench), RecipeCategories.ROCKET_T3_ID, RecipeCategories.ASTRO_MINER_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.compactNasaWorkbench), RecipeCategories.ROCKET_T3_ID, RecipeCategories.ASTRO_MINER_ID); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registry) + { + IGuiHelper guiHelper = registry.getJeiHelpers().getGuiHelper(); + registry.addRecipeCategories(new Tier3RocketRecipeCategory(guiHelper), new AstroMinerRecipeCategory(guiHelper)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeCategory.java new file mode 100644 index 00000000..e29eb0cd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeCategory.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.util.ResourceLocation; + +public class AstroMinerRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation astroMinerGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_astro_miner.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public AstroMinerRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(astroMinerGuiTexture, 3, 39, 168, 91); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ASTRO_MINER_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 23, 21); + itemstacks.init(1, true, 41, 21); + itemstacks.init(2, true, 59, 21); + itemstacks.init(3, true, 77, 21); + itemstacks.init(4, true, 12, 39); + itemstacks.init(5, true, 30, 39); + itemstacks.init(6, true, 48, 39); + itemstacks.init(7, true, 66, 39); + itemstacks.init(8, true, 84, 39); + itemstacks.init(9, true, 40, 57); + itemstacks.init(10, true, 58, 57); + itemstacks.init(11, true, 76, 57); + itemstacks.init(12, true, 4, 63); + itemstacks.init(13, true, 22, 63); + itemstacks.init(14, false, 138, 58); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeMaker.java new file mode 100644 index 00000000..5acf085a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeMaker.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; + +public class AstroMinerRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getAstroMinerRecipes()) + { + AstroMinerRecipeWrapper wrapper = new AstroMinerRecipeWrapper(recipe); + recipes.add(wrapper); + } + + return recipes; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeWrapper.java new file mode 100644 index 00000000..0a5e02d1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class AstroMinerRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public AstroMinerRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(this.recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeCategory.java new file mode 100644 index 00000000..58394d62 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeCategory.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.util.ResourceLocation; + +public class Tier3RocketRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation rocketGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_t3_recipe.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public Tier3RocketRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(rocketGuiTexture, 0, 0, 168, 126); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ROCKET_T3_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 44, 0); + itemstacks.init(1, true, 35, 18); + itemstacks.init(2, true, 35, 36); + itemstacks.init(3, true, 35, 54); + itemstacks.init(4, true, 35, 72); + itemstacks.init(5, true, 35, 90); + itemstacks.init(6, true, 53, 18); + itemstacks.init(7, true, 53, 36); + itemstacks.init(8, true, 53, 54); + itemstacks.init(9, true, 53, 72); + itemstacks.init(10, true, 53, 90); + itemstacks.init(11, true, 17, 72); // Booster left + itemstacks.init(12, true, 17, 90); + itemstacks.init(13, true, 71, 90); + itemstacks.init(14, true, 44, 108); // Rocket + itemstacks.init(15, true, 71, 72); // Booster right + itemstacks.init(16, true, 17, 108); + itemstacks.init(17, true, 71, 108); + itemstacks.init(18, true, 89, 7); + itemstacks.init(19, true, 115, 7); + itemstacks.init(20, true, 141, 7); + itemstacks.init(21, false, 138, 95); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeMaker.java new file mode 100644 index 00000000..9223bdd7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeMaker.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeMaker; + +public class Tier3RocketRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT3Recipes()) + { + int chests = Tier1RocketRecipeMaker.countChests(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeWrapper.java new file mode 100644 index 00000000..bd34f963 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class Tier3RocketRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public Tier3RocketRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(this.recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/NetworkRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/NetworkRenderer.java new file mode 100644 index 00000000..7185c78d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/NetworkRenderer.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamOutput; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class NetworkRenderer +{ + + public static void renderNetworks(World world, float partialTicks) + { + List nodes = new ArrayList(); + + for (Object o : new ArrayList(world.loadedTileEntityList)) + { + if (o instanceof TileEntityBeamOutput) + { + nodes.add((TileEntityBeamOutput) o); + } + } + + if (nodes.isEmpty()) + { + return; + } + + Tessellator tess = Tessellator.getInstance(); + EntityPlayerSP player = FMLClientHandler.instance().getClient().player; + double interpPosX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; + double interpPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; + double interpPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; + + GL11.glDisable(GL11.GL_TEXTURE_2D); + + for (TileEntityBeamOutput tileEntity : nodes) + { + if (tileEntity.getTarget() == null) + { + continue; + } + + GL11.glPushMatrix(); + + Vector3 outputPoint = tileEntity.getOutputPoint(true); + Vector3 targetInputPoint = tileEntity.getTarget().getInputPoint(); + + Vector3 direction = Vector3.subtract(outputPoint, targetInputPoint); + float directionLength = (float) direction.getMagnitude(); + + float posX = (float) (tileEntity.getPos().getX() - interpPosX); + float posY = (float) (tileEntity.getPos().getY() - interpPosY); + float posZ = (float) (tileEntity.getPos().getZ() - interpPosZ); + GL11.glTranslatef(posX, posY, posZ); + + GL11.glTranslatef(outputPoint.floatX() - tileEntity.getPos().getX(), outputPoint.floatY() - tileEntity.getPos().getY(), outputPoint.floatZ() - tileEntity.getPos().getZ()); + GL11.glRotatef(tileEntity.yaw + 180, 0, 1, 0); + GL11.glRotatef(-tileEntity.pitch, 1, 0, 0); + GL11.glRotatef(tileEntity.ticks * 10, 0, 0, 1); + + tess.getBuffer().begin(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR); + + for (EnumFacing dir : EnumFacing.VALUES) + { + tess.getBuffer().pos(dir.getXOffset() / 40.0F, dir.getYOffset() / 40.0F, dir.getZOffset() / 40.0F) + .color(tileEntity.getColor().floatX(), tileEntity.getColor().floatY(), tileEntity.getColor().floatZ(), 1.0F).endVertex(); + tess.getBuffer().pos(dir.getXOffset() / 40.0F, dir.getYOffset() / 40.0F, directionLength + dir.getZOffset() / 40.0F) + .color(tileEntity.getColor().floatX(), tileEntity.getColor().floatY(), tileEntity.getColor().floatZ(), 1.0F).endVertex(); + } + + tess.draw(); + + GL11.glPopMatrix(); + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glColor4f(1, 1, 1, 1); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderAstroMiner.java new file mode 100644 index 00000000..1c3cd8ad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderAstroMiner.java @@ -0,0 +1,601 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import java.util.ArrayList; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; +import micdoodle8.mods.galacticraft.core.perlin.generator.Gradient; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class RenderAstroMiner extends Render +{ + + private static final float LSIZE = 0.12F; + private static final float RETRACTIONSPEED = 0.02F; + private float lastPartTime; + + public static ResourceLocation scanTexture; + private OBJModel.OBJBakedModel mainModel; + private OBJModel.OBJBakedModel hoverPadMain; + private OBJModel.OBJBakedModel hoverPadGlow; + private OBJModel.OBJBakedModel mainModelInactive; + private OBJModel.OBJBakedModel modellaser1; + private OBJModel.OBJBakedModel modellaser3; + private OBJModel.OBJBakedModel modellasergl; + + private final NoiseModule wobbleX; + private final NoiseModule wobbleY; + private final NoiseModule wobbleZ; + private final NoiseModule wobbleXX; + private final NoiseModule wobbleYY; + private final NoiseModule wobbleZZ; + + private void updateModels() + { + if (this.mainModel == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "astro_miner_full.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + this.mainModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Hull", "Lasers"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.hoverPadMain = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("HoverPad"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.hoverPadGlow = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Glow"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.modellaser1 = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main_Laser_Front"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.modellaser3 = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main_Laser_Center"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.modellasergl = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main_Laser_Left_Guard"), false), DefaultVertexFormats.ITEM, spriteFunction); + + model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "astro_miner_full_off.obj")); + this.mainModelInactive = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Hull", "Lasers", "HoverPad"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + static + { + scanTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/misc/gradient.png"); + } + + public RenderAstroMiner(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 2F; + + Random rand = new Random(); + this.wobbleX = new Gradient(rand.nextLong(), 2, 1); + this.wobbleX.amplitude = 0.5F; + this.wobbleX.frequencyX = 0.025F; + + this.wobbleY = new Gradient(rand.nextLong(), 2, 1); + this.wobbleY.amplitude = 0.6F; + this.wobbleY.frequencyX = 0.025F; + + this.wobbleZ = new Gradient(rand.nextLong(), 2, 1); + this.wobbleZ.amplitude = 0.1F; + this.wobbleZ.frequencyX = 0.025F; + + this.wobbleXX = new Gradient(rand.nextLong(), 2, 1); + this.wobbleXX.amplitude = 0.1F; + this.wobbleXX.frequencyX = 0.8F; + + this.wobbleYY = new Gradient(rand.nextLong(), 2, 1); + this.wobbleYY.amplitude = 0.15F; + this.wobbleYY.frequencyX = 0.8F; + + this.wobbleZZ = new Gradient(rand.nextLong(), 2, 1); + this.wobbleZZ.amplitude = 0.04F; + this.wobbleZZ.frequencyX = 0.8F; + } + + @Override + public void doRender(EntityAstroMiner astroMiner, double x, double y, double z, float f, float partialTickTime) + { + int ais = astroMiner.AIstate; + boolean active = ais > EntityAstroMiner.AISTATE_ATBASE; + float time = astroMiner.ticksExisted + partialTickTime; + float sinOfTheTime = (MathHelper.sin(time / 4) + 1F) / 4F + 0.5F; + float wx = active ? this.wobbleX.getNoise(time) + this.wobbleXX.getNoise(time) : 0F; + float wy = active ? this.wobbleY.getNoise(time) + this.wobbleYY.getNoise(time) : 0F; + float wz = active ? this.wobbleZ.getNoise(time) + this.wobbleZZ.getNoise(time) : 0F; + float partTime = partialTickTime - this.lastPartTime; + this.lastPartTime = partialTickTime; + + while (partTime < 0) + { + partTime += 1F; + } + + this.updateModels(); + this.bindEntityTexture(astroMiner); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + + final float rotPitch = astroMiner.prevRotationPitch + (astroMiner.rotationPitch - astroMiner.prevRotationPitch) * partialTickTime; + final float rotYaw = astroMiner.prevRotationYaw + (astroMiner.rotationYaw - astroMiner.prevRotationYaw) * partialTickTime; + + GlStateManager.translate((float) x, (float) y + 1.4F, (float) z); + float partBlock; + + switch (astroMiner.facing) + { + case DOWN: + partBlock = (float) (astroMiner.posY % 2D); + break; + case UP: + partBlock = 1F - (float) (astroMiner.posY % 2D); + break; + case NORTH: + partBlock = (float) (astroMiner.posZ % 2D); + break; + case SOUTH: + partBlock = 1F - (float) (astroMiner.posZ % 2D); + break; + case WEST: + partBlock = (float) (astroMiner.posX % 2D); + break; + case EAST: + partBlock = 1F - (float) (astroMiner.posX % 2D); + break; + default: + partBlock = 0F; + } + partBlock /= 0.06F; + + GlStateManager.rotate(rotYaw + 180F, 0, 1, 0); + + if (rotPitch != 0F) + { + GlStateManager.translate(-0.65F, -0.65F, 0); + GlStateManager.rotate(rotPitch / 4F, 1, 0, 0); + GlStateManager.translate(0.65F, 0.65F, 0); + } + + GlStateManager.translate(0F, -0.42F, 0.28F); + GlStateManager.scale(0.0495F, 0.0495F, 0.0495F); + GlStateManager.translate(wx, wy, wz); + + if (active) + { + ClientUtil.drawBakedModel(this.mainModel); + this.renderLaserModel(astroMiner.retraction); + + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GlStateManager.disableLighting(); + GlStateManager.color(sinOfTheTime, sinOfTheTime, sinOfTheTime, 1.0F); + ClientUtil.drawBakedModel(this.hoverPadMain); + + GlStateManager.disableCull(); + GlStateManager.disableAlpha(); + GlStateManager.depthMask(false); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GlStateManager.enableBlend(); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GlStateManager.color(sinOfTheTime, sinOfTheTime, sinOfTheTime, 0.6F); + ClientUtil.drawBakedModel(this.hoverPadGlow); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); + + if (ais < EntityAstroMiner.AISTATE_DOCKING) + { + // This is the scanning lasers: + FMLClientHandler.instance().getClient().renderEngine.bindTexture(scanTexture); + final Tessellator tess = Tessellator.getInstance(); + GlStateManager.color(0, 0.6F, 1.0F, 0.2F); + BufferBuilder worldRenderer = tess.getBuffer(); + float scanProgress = (MathHelper.cos(partBlock * 0.012F * 6.283F)) * 0.747F; + float scanAngle = 0.69866F - scanProgress * scanProgress; + float scanEndX = 38.77F * MathHelper.sin(scanAngle); + float scanEndY = 32F; + float scanEndZ = 38.77F * MathHelper.cos(scanAngle); + scanEndZ += 20F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(15.6F, -0.6F, -20F).tex(0D, 0D).endVertex(); + worldRenderer.pos(15.6F + scanEndX, scanEndY - 0.6F, -scanEndZ).tex(1D, 0D).endVertex(); + worldRenderer.pos(15.6F + scanEndX, -0.6F - scanEndY, -scanEndZ).tex(1D, 1D).endVertex(); + worldRenderer.pos(15.6F, -0.7F, -20F).tex(0D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-15.6F, -0.6F, -20F).tex(0D, 0D).endVertex(); + worldRenderer.pos(-15.6F - scanEndX, scanEndY - 0.6F, -scanEndZ).tex(1D, 0D).endVertex(); + worldRenderer.pos(-15.6F - scanEndX, -0.6F - scanEndY, -scanEndZ).tex(1D, 1D).endVertex(); + worldRenderer.pos(-15.6F, -0.7F, -20F).tex(0D, 1D).endVertex(); + tess.draw(); + + int removeCount = 0; + int afterglowCount = 0; + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) (x - astroMiner.posX), (float) (y - astroMiner.posY), (float) (z - astroMiner.posZ)); + + for (Integer blockTime : new ArrayList(astroMiner.laserTimes)) + { + if (blockTime < astroMiner.ticksExisted - 19) + { + removeCount++; + } else if (blockTime < astroMiner.ticksExisted - 3) + { + afterglowCount++; + } + } + if (removeCount > 0) + { + astroMiner.removeLaserBlocks(removeCount); + } + int count = 0; + for (BlockVec3 blockLaser : new ArrayList(astroMiner.laserBlocks)) + { + if (count < afterglowCount) + { + int fade = astroMiner.ticksExisted - astroMiner.laserTimes.get(count) - 8; + if (fade < 0) + { + fade = 0; + } + this.doAfterGlow(blockLaser, fade); + } else + { + this.doLaser(astroMiner, blockLaser); + } + count++; + } + if (astroMiner.retraction > 0F) + { + astroMiner.retraction -= RETRACTIONSPEED * partTime; + if (astroMiner.retraction < 0F) + { + astroMiner.retraction = 0F; + } + } + GlStateManager.popMatrix(); + } else + { + if (astroMiner.retraction < 1F) + { + astroMiner.retraction += RETRACTIONSPEED * partTime; + if (astroMiner.retraction > 1F) + { + astroMiner.retraction = 1F; + } + } + GlStateManager.popMatrix(); + } + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.enableCull(); + GlStateManager.enableAlpha(); + GlStateManager.enableLighting(); + GlStateManager.depthMask(true); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + } else + { + this.bindEntityTexture(astroMiner); + ClientUtil.drawBakedModel(this.mainModelInactive); + this.renderLaserModel(astroMiner.retraction); + if (astroMiner.retraction < 1F) + { + astroMiner.retraction += RETRACTIONSPEED * partTime; + if (astroMiner.retraction > 1F) + { + astroMiner.retraction = 1F; + } + } + GlStateManager.popMatrix(); + } + } + + private void doAfterGlow(BlockVec3 blockLaser, int level) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(blockLaser.x, blockLaser.y, blockLaser.z); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(1.0F, 0.7F, 0.7F, 0.016667F * (12 - level)); + float cA = -0.01F; + float cB = 1.01F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cB, cA).tex(0D, 1D).endVertex(); + worldRenderer.pos(cB, cB, cA).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cB, cB).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cB).tex(0D, 0D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(cA, cA, cB).tex(0D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cB).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cA).tex(1D, 0D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cB).tex(0D, 1D).endVertex(); + worldRenderer.pos(cA, cA, cB).tex(1D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cB, cA, cA).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cB).tex(1D, 0D).endVertex(); + worldRenderer.pos(cB, cB, cB).tex(0D, 0D).endVertex(); + worldRenderer.pos(cB, cB, cA).tex(0D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(1D, 0D).endVertex(); + worldRenderer.pos(1F, cA, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(1F, 1F, cA).tex(0D, 1D).endVertex(); + worldRenderer.pos(cA, 1F, cA).tex(1D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(1F, cA, 1F).tex(1D, 1D).endVertex(); + worldRenderer.pos(cA, cA, 1F).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, 1F, 1F).tex(0D, 0D).endVertex(); + worldRenderer.pos(1F, 1F, 1F).tex(0D, 1D).endVertex(); + tess.draw(); + GlStateManager.popMatrix(); + } + + private void doLaser(EntityAstroMiner entity, BlockVec3 blockLaser) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(blockLaser.x, blockLaser.y, blockLaser.z); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(1.0F, 0.7F, 0.7F, 0.2F); + float cA = -0.01F; + float cB = 1.01F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cB, cA).tex(0D, 1D).endVertex(); + worldRenderer.pos(cB, cB, cA).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cB, cB).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cB).tex(0D, 0D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(cA, cA, cB).tex(0D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cB).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cA).tex(1D, 0D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cB).tex(0D, 1D).endVertex(); + worldRenderer.pos(cA, cA, cB).tex(1D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cB, cA, cA).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cB).tex(1D, 0D).endVertex(); + worldRenderer.pos(cB, cB, cB).tex(0D, 0D).endVertex(); + worldRenderer.pos(cB, cB, cA).tex(0D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(1D, 0D).endVertex(); + worldRenderer.pos(1F, cA, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(1F, 1F, cA).tex(0D, 1D).endVertex(); + worldRenderer.pos(cA, 1F, cA).tex(1D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(1F, cA, 1F).tex(1D, 1D).endVertex(); + worldRenderer.pos(cA, cA, 1F).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, 1F, 1F).tex(0D, 0D).endVertex(); + worldRenderer.pos(1F, 1F, 1F).tex(0D, 1D).endVertex(); + tess.draw(); + + GlStateManager.color(1.0F, 0.79F, 0.79F, 0.17F); + float bb = 1.7F; + float cc = 0.4F; + float radiansYaw = entity.rotationYaw / Constants.RADIANS_TO_DEGREES; + float radiansPitch = entity.rotationPitch / Constants.RADIANS_TO_DEGREES / 4F; + float mainLaserX = bb * MathHelper.sin(radiansYaw) * MathHelper.cos(radiansPitch); + float mainLaserY = cc + bb * MathHelper.sin(radiansPitch); + float mainLaserZ = bb * MathHelper.cos(radiansYaw) * MathHelper.cos(radiansPitch); + + mainLaserX += entity.posX - blockLaser.x; + mainLaserY += entity.posY - blockLaser.y; + mainLaserZ += entity.posZ - blockLaser.z; + + float xD = mainLaserX - 0.5F; + float yD = mainLaserY - 0.5F; + float zD = mainLaserZ - 0.5F; + float xx, yy, zz; + + if (entity.facing.getIndex() > EnumFacing.SOUTH.getIndex()) + { + xx = xD < 0 ? cA : cB; + this.drawLaserX(mainLaserX, mainLaserY, mainLaserZ, xx, 0.5F, 0.5F); + } else if (entity.facing.getIndex() <= EnumFacing.UP.getIndex()) + { + yy = yD < 0 ? cA : cB; + this.drawLaserY(mainLaserX, mainLaserY, mainLaserZ, 0.5F, yy, 0.5F); + } else + { + zz = zD < 0 ? cA : cB; + this.drawLaserZ(mainLaserX, mainLaserY, mainLaserZ, 0.5F, 0.5F, zz); + } + + GlStateManager.popMatrix(); + } + + private void drawLaserX(float x1, float y1, float z1, float x2, float y2, float z2) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 - 0.01F, z1 - 0.01F).endVertex(); + worldRenderer.pos(x2, y2 - LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1, y1 + 0.01F, z1 - 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 - 0.01F, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2, y2 - LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x1, y1 + 0.01F, z1 + 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 - 0.01F, z1 - 0.01F).endVertex(); + worldRenderer.pos(x2, y2 - LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x2, y2 - LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x1, y1 - 0.01F, z1 + 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 + 0.01F, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1, y1 + 0.01F, z1 - 0.01F).endVertex(); + tess.draw(); + } + + private void drawLaserY(float x1, float y1, float z1, float x2, float y2, float z2) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1, z1 - 0.01F).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2, z2 - LSIZE).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1, z1 - 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2, z2 + LSIZE).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1, z1 + 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1, z1 - 0.01F).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2, z2 - LSIZE).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2, z2 + LSIZE).endVertex(); + worldRenderer.pos(x1 - 0.01F, y1, z1 + 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 + 0.01F, y1, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1, z1 - 0.01F).endVertex(); + tess.draw(); + } + + private void drawLaserZ(float x1, float y1, float z1, float x2, float y2, float z2) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1 - 0.01F, z1).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2 - LSIZE, z2).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2 + LSIZE, z2).endVertex(); + worldRenderer.pos(x1 - 0.01F, y1 + 0.01F, z1).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 + 0.01F, y1 - 0.01F, z1).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2 - LSIZE, z2).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2 + LSIZE, z2).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1 + 0.01F, z1).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1 - 0.01F, z1).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2 - LSIZE, z2).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2 - LSIZE, z2).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1 - 0.01F, z1).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 + 0.01F, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1, y1 + 0.01F, z1 - 0.01F).endVertex(); + tess.draw(); + } + + private void renderLaserModel(float retraction) + { + float laserretraction = retraction / 0.8F; + if (laserretraction > 1F) + { + laserretraction = 1F; + } + float guardmovement = (retraction - 0.6F) / 0.4F * 1.875F; + if (guardmovement < 0F) + { + guardmovement = 0F; + } + GlStateManager.pushMatrix(); + float zadjust = laserretraction * 5F; + float yadjust = zadjust; + + if (yadjust > 0.938F) + { + yadjust = 0.938F; + zadjust = (zadjust - yadjust) * 2.5F + yadjust; + } + GlStateManager.translate(0F, yadjust, zadjust); + ClientUtil.drawBakedModel(this.modellaser1); + if (yadjust == 0.938F) + { + // Do not move laser centre into body + GlStateManager.translate(0F, 0F, -zadjust + 0.938F); + } + ClientUtil.drawBakedModel(this.modellaser3); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.translate(guardmovement, 0F, 0F); + ClientUtil.drawBakedModel(this.modellasergl); + GlStateManager.translate(-2 * guardmovement + 8.75F, 0F, 0F); + ClientUtil.drawBakedModel(this.modellasergl); + GlStateManager.popMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityAstroMiner entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public boolean shouldRender(EntityAstroMiner miner, ICamera camera, double camX, double camY, double camZ) + { + return miner.isInRangeToRender3d(camX, camY, camZ); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderEntryPod.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderEntryPod.java new file mode 100644 index 00000000..9b43f2be --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderEntryPod.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import org.lwjgl.opengl.GL11; + +public class RenderEntryPod extends Render +{ + + private IBakedModel modelEntryPod; + + public RenderEntryPod(RenderManager manager) + { + super(manager); + } + + private void updateModels() + { + if (this.modelEntryPod == null) + { + try + { + this.modelEntryPod = ClientUtil.modelFromOBJ(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "pod.obj"), ImmutableList.of("PodBody")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void doRender(EntityEntryPod entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + float yaw = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F - pitch, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(-yaw, 0.0F, 1.0F, 0.0F); + + this.updateModels(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.65F, 0.6F, 0.65F); + ClientUtil.drawBakedModel(this.modelEntryPod); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEntryPod entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public boolean shouldRender(EntityEntryPod lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(1D, 2D, 1D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderGrapple.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderGrapple.java new file mode 100644 index 00000000..72fe72d1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderGrapple.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import com.google.common.base.Function; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderGrapple extends Render +{ + + private ItemModelGrapple grappleModel; + + public RenderGrapple(RenderManager manager) + { + super(manager); + } + + private void updateModel() + { + if (grappleModel == null) + { + Function TEXTUREGETTER = input -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(input.toString()); + + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "grapple", "inventory"); + grappleModel = (ItemModelGrapple) FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().getModelManager().getModel(modelResourceLocation); + } + } + + @Override + public void doRender(EntityGrapple grapple, double x, double y, double z, float par8, float partialTicks) + { + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPushMatrix(); + + Vec3d vec3 = new Vec3d(0.0D, -0.2D, 0.0D); + EntityPlayer shootingEntity = grapple.getShootingEntity(); + + if (shootingEntity != null && grapple.getPullingEntity()) + { + double d3 = shootingEntity.prevPosX + (shootingEntity.posX - shootingEntity.prevPosX) * partialTicks + vec3.x; + double d4 = shootingEntity.prevPosY + (shootingEntity.posY - shootingEntity.prevPosY) * partialTicks + vec3.y; + double d5 = shootingEntity.prevPosZ + (shootingEntity.posZ - shootingEntity.prevPosZ) * partialTicks + vec3.z; + + Tessellator tessellator = Tessellator.getInstance(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + tessellator.getBuffer().begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR); + byte b2 = 16; + + double d14 = grapple.prevPosX + (grapple.posX - grapple.prevPosX) * partialTicks; + double d8 = grapple.prevPosY + (grapple.posY - grapple.prevPosY) * partialTicks + 0.25D; + double d10 = grapple.prevPosZ + (grapple.posZ - grapple.prevPosZ) * partialTicks; + double d11 = (float) (d3 - d14); + double d12 = (float) (d4 - d8); + double d13 = (float) (d5 - d10); + tessellator.getBuffer().setTranslation(0, -0.2F, 0); + + for (int i = 0; i <= b2; ++i) + { + float f12 = (float) i / (float) b2; + tessellator.getBuffer().pos(x + d11 * f12, y + d12 * (f12 * f12 + f12) * 0.5D + 0.15D, z + d13 * f12).color(203.0F / 255.0F, 203.0F / 255.0F, 192.0F / 255.0F, 1.0F).endVertex(); + } + + tessellator.draw(); + tessellator.getBuffer().setTranslation(0, 0, 0); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + GL11.glTranslatef((float) x, (float) y, (float) z); + GL11.glRotatef(grapple.prevRotationYaw + (grapple.rotationYaw - grapple.prevRotationYaw) * partialTicks - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(grapple.prevRotationPitch + (grapple.rotationPitch - grapple.prevRotationPitch) * partialTicks - 180, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(grapple.prevRotationRoll + (grapple.rotationRoll - grapple.prevRotationRoll) * partialTicks, 1.0F, 0.0F, 0.0F); + + updateModel(); + + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + ClientUtil.drawBakedModel(grappleModel); + +// this.bindEntityTexture(grapple); +// ItemRendererGrappleHook.modelGrapple.renderAll(); TODO + + GL11.glPopMatrix(); + } + +// protected ResourceLocation getEntityTexture(EntityGrapple grapple) +// { +//// return ItemRendererGrappleHook.grappleTexture; +// } + + @Override + protected ResourceLocation getEntityTexture(EntityGrapple entity) + { + return new ResourceLocation("missing"); + } + + @Override + public boolean shouldRender(EntityGrapple entity, ICamera camera, double camX, double camY, double camZ) + { + return entity.isInRangeToRender3d(camX, camY, camZ); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderSmallAsteroid.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderSmallAsteroid.java new file mode 100644 index 00000000..d38139ab --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderSmallAsteroid.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import static micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockBasicAsteroids.EnumBlockBasic.ASTEROID_0; + +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockBasicAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntitySmallAsteroid; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderSmallAsteroid extends Render +{ + + public RenderSmallAsteroid(RenderManager manager) + { + super(manager); + } + + @Override + public void doRender(EntitySmallAsteroid asteroid, double x, double y, double z, float f, float partialTickTime) + { + BlockRendererDispatcher dispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + + GL11.glPushMatrix(); + GL11.glTranslatef((float) x, (float) y + 0.5F, (float) z); + GL11.glRotatef(asteroid.rotationPitch, 1, 0, 0); + GL11.glRotatef(asteroid.rotationYaw, 0, 1, 0); + + this.bindEntityTexture(asteroid); + dispatcher.renderBlockBrightness(AsteroidBlocks.blockBasic.getDefaultState().withProperty(BlockBasicAsteroids.BASIC_TYPE, ASTEROID_0), 1.0F); + + GL11.glPopMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(EntitySmallAsteroid entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderTier3Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderTier3Rocket.java new file mode 100644 index 00000000..11778e2e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderTier3Rocket.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import java.io.IOException; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityTier3Rocket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderTier3Rocket extends Render +{ + + private OBJModel.OBJBakedModel rocketModel; + private OBJModel.OBJBakedModel coneModel; + private OBJModel.OBJBakedModel cubeModel; + + public RenderTier3Rocket(RenderManager manager) + { + super(manager); + this.shadowSize = 2F; + } + + private void updateModel() + { + if (this.rocketModel == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "tier3rocket.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + this.rocketModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Boosters", "Rocket"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.coneModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("NoseCone"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.cubeModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Cube"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (IOException e) + { + throw new RuntimeException(e); + } + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityTier3Rocket entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityTier3Rocket entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks + 180; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-pitch, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, entity.getRenderOffsetY(), 0.0F); + float rollAmplitude = entity.rollAmplitude / 3 - partialTicks; + + if (rollAmplitude > 0.0F) + { + final float i = entity.getLaunched() ? (5 - MathHelper.floor(entity.timeUntilLaunch / 85)) / 10F : 0.3F; + GlStateManager.rotate(MathHelper.sin(rollAmplitude) * rollAmplitude * i * partialTicks, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(MathHelper.sin(rollAmplitude) * rollAmplitude * i * partialTicks, 1.0F, 0.0F, 1.0F); + } + + this.updateModel(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.8F, 0.8F, 0.8F); + ClientUtil.drawBakedModel(this.rocketModel); + + Vector3 teamColor = ClientUtil.updateTeamColor(PlayerUtil.getName(FMLClientHandler.instance().getClient().player), true); + + if (teamColor != null) + { + int color = ColorUtil.to32BitColor(255, (int) (teamColor.floatZ() * 255), (int) (teamColor.floatY() * 255), (int) (teamColor.floatX() * 255)); + GlStateManager.disableTexture2D(); + ClientUtil.drawBakedModelColored(coneModel, color); + } else + { + ClientUtil.drawBakedModel(coneModel); + GlStateManager.disableTexture2D(); + } + + GlStateManager.disableLighting(); + + boolean red = FMLClientHandler.instance().getClient().player.ticksExisted / 10 % 2 < 1; + int color = ColorUtil.to32BitColor(255, 0, red ? 0 : 255, red ? 255 : 0); + ClientUtil.drawBakedModelColored(cubeModel, color); + + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); + + GlStateManager.color(1F, 1F, 1F); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityTier3Rocket rocket, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = rocket.getEntityBoundingBox().grow(0.5D, 0, 0.5D); + return rocket.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelAstroMiner.java new file mode 100644 index 00000000..31d88755 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelAstroMiner.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelAstroMiner extends ModelTransformWrapper +{ + + public ItemModelAstroMiner(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.17F, 0.0F, -0.17F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.85F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.36F, 0.3F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, 0.0F, -1.7F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(4.0F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) -(Math.PI / 2.0F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-0.2F, -0.0F, 1.1F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 15, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.8F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.2F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) -(Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (Math.PI)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.2F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 1.0F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.5F, 0.6F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReceiver.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReceiver.java new file mode 100644 index 00000000..9cd88f21 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReceiver.java @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelBeamReceiver extends ModelTransformWrapper +{ + + public ItemModelBeamReceiver(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, -45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.75F)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.0F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -0.5F : 0.5F; + float zTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 0.3F : 0.7F; + int yRot = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -90 : 90; + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, yRot, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(xTran, 0.4F, zTran)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? -0.4F : 0.4F; + float zTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.5F : 0.5F; + int yRot = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? -45 : -225; + Vector3f trans = new Vector3f(xTran, 0.0F, zTran); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(70, yRot, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.1F, 0.25F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.6F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.565F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.4F, -0.2F, 0.45F)); + ret.mul(mul); + return ret; + } + return null; + } + + @Override + public TextureAtlasSprite getParticleTexture() + { + return super.getParticleTexture(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReflector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReflector.java new file mode 100644 index 00000000..5bb91967 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReflector.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelBeamReflector extends ModelTransformWrapper +{ + + public ItemModelBeamReflector(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.55F, 0.15F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.6F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -0.5F : 0.5F; + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, -90, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(xTran, 0.5F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? -0.3F : 0.6F; + float zTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.3F : 0.3F; + Vector3f trans = new Vector3f(xTran, 0.3F, zTran); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(70, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.25F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.25F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.4F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.565F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelCargoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelCargoRocket.java new file mode 100644 index 00000000..20e2fd53 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelCargoRocket.java @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelCargoRocket extends ModelTransformWrapper +{ + public ItemModelCargoRocket(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.15F, 0.0F, -0.15F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.3F, -0.4F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + if(!ConfigManagerCore.disableRocketIconRotation) { + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + } + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-2.5F, 1.8F, -3.0F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(4.0F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-0.65F + Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(1.2F, -2.7F, 1.0F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(65, 15, -3)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 3.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (Math.PI / 4.0F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(0.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -2.75F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelGrapple.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelGrapple.java new file mode 100644 index 00000000..f03e8831 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelGrapple.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelGrapple extends ModelTransformWrapper +{ + + public ItemModelGrapple(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.7F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.3F, 1.15F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.3F : 0.3F; + float yTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.2F : -0.2F; + float zTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.2F : 0.8F; + int xRot = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 180 : 0; + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(xRot, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(xTran, yTran, zTran)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (-Math.PI / 2.0F)); + mul.rotZ((float) (-Math.PI / 2.0F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -0.275F : 0.5F; + float yTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 0.925F : 0.05F; + float zTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 0.2F : -0.2F; + int xRot = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -180 : 0; + int yRot = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 75 : 45; + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(xRot, yRot, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.6F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(xTran, yTran, zTran)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (-Math.PI / 1.2F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.65F, 0.35F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.6F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(3.15F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.8F, 0.5F, 0.525F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelRocketT3.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelRocketT3.java new file mode 100644 index 00000000..fd3d8ee9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelRocketT3.java @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelRocketT3 extends ModelTransformWrapper +{ + public ItemModelRocketT3(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.15F, 0.0F, -0.15F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.61F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.25F, -0.35F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + if(!ConfigManagerCore.disableRocketIconRotation) { + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + } + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, 3.2F, -3.6F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.45F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-0.65F + Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(1.0F, -2.5F, 1.05F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 15, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.6F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 3.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 1.5F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(3.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -1.5F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelTelepad.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelTelepad.java new file mode 100644 index 00000000..8634b55e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelTelepad.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelTelepad extends ModelTransformWrapper +{ + + public ItemModelTelepad(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(8, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.12F, -0.2F, 0.24F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) Math.PI / 12.0F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) Math.PI / 5.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.1625F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-0.6F, 0.1F, 1.6F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(80, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, 1.0F, 0.7F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(-12, 20, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.15F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.575F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -1.0F, 0.5F)); + ret.mul(mul); + return ret; + } + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReceiverRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReceiverRenderer.java new file mode 100644 index 00000000..841ba6fc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReceiverRenderer.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.tile.ReceiverMode; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReceiver; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityBeamReceiverRenderer extends TileEntitySpecialRenderer +{ + + private static OBJModel.OBJBakedModel reflectorModelMain; + private static OBJModel.OBJBakedModel reflectorModelReceiver; + private static OBJModel.OBJBakedModel reflectorModelRing; + + private void updateModels() + { + if (reflectorModelMain == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "block/receiver.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + reflectorModelMain = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelReceiver = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Receiver"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelRing = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Ring"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void render(TileEntityBeamReceiver tile, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (tile.facing == null) + { + return; + } + + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x + 0.5F, (float) y, (float) z + 0.5F); + GlStateManager.scale(0.85F, 0.85F, 0.85F); + + switch (tile.facing) + { + case DOWN: + GlStateManager.translate(0.7F, -0.15F, 0.0F); + GlStateManager.rotate(90, 0, 0, 1); + break; + case UP: + GlStateManager.translate(-0.7F, 1.3F, 0.0F); + GlStateManager.rotate(-90, 0, 0, 1); + break; + case EAST: + GlStateManager.translate(0.7F, -0.15F, 0.0F); + GlStateManager.rotate(180, 0, 1, 0); + break; + case SOUTH: + GlStateManager.translate(0.0F, -0.15F, 0.7F); + GlStateManager.rotate(90, 0, 1, 0); + break; + case WEST: + GlStateManager.translate(-0.7F, -0.15F, 0.0F); + GlStateManager.rotate(0, 0, 1, 0); + break; + case NORTH: + GlStateManager.translate(0.0F, -0.15F, -0.7F); + GlStateManager.rotate(270, 0, 1, 0); + break; + default: + GlStateManager.popMatrix(); + return; + } + + this.updateModels(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + ClientUtil.drawBakedModel(reflectorModelMain); + + int color; + + if (tile.modeReceive == ReceiverMode.RECEIVE.ordinal()) + { + color = ColorUtil.to32BitColor(255, 0, 204, 0); + } else if (tile.modeReceive == ReceiverMode.EXTRACT.ordinal()) + { + color = ColorUtil.to32BitColor(255, 0, 0, 153); + } else + { + color = ColorUtil.to32BitColor(255, 25, 25, 25); + } + + GlStateManager.disableTexture2D(); + GlStateManager.disableCull(); + ClientUtil.drawBakedModelColored(reflectorModelReceiver, color); + GlStateManager.enableTexture2D(); + GlStateManager.enableCull(); + float dX = 0.34772F; + float dY = 0.75097F; + float dZ = 0.0F; + GlStateManager.translate(dX, dY, dZ); + + if (tile.modeReceive != ReceiverMode.UNDEFINED.ordinal()) + { + GlStateManager.rotate(-tile.ticks * 50, 1, 0, 0); + } + + GlStateManager.translate(-dX, -dY, -dZ); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + ClientUtil.drawBakedModel(reflectorModelRing); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReflectorRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReflectorRenderer.java new file mode 100644 index 00000000..03f11584 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReflectorRenderer.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReflector; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityBeamReflectorRenderer extends TileEntitySpecialRenderer +{ + + private static OBJModel.OBJBakedModel reflectorModelBase; + private static OBJModel.OBJBakedModel reflectorModelAxle; + private static OBJModel.OBJBakedModel reflectorModelEnergyBlaster; + private static OBJModel.OBJBakedModel reflectorModelRing; + + private void updateModels() + { + if (reflectorModelBase == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "block/reflector.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + reflectorModelBase = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Base"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelAxle = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Axle"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelEnergyBlaster = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("EnergyBlaster"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelRing = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Ring"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void render(TileEntityBeamReflector tile, double d, double d1, double d2, float f, int i, float alpha) + { + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1, (float) d2 + 0.5F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + this.updateModels(); + ClientUtil.drawBakedModel(reflectorModelBase); + GlStateManager.rotate(tile.yaw, 0, 1, 0); + ClientUtil.drawBakedModel(reflectorModelAxle); + float dX = 0.0F; + float dY = 1.13228F; + float dZ = 0.0F; + GlStateManager.translate(dX, dY, dZ); + GlStateManager.rotate(tile.pitch, 1, 0, 0); + GlStateManager.translate(-dX, -dY, -dZ); + ClientUtil.drawBakedModel(reflectorModelEnergyBlaster); + GlStateManager.translate(dX, dY, dZ); + GlStateManager.rotate(tile.ticks * 5, 0, 0, 1); + GlStateManager.translate(-dX, -dY, -dZ); + ClientUtil.drawBakedModel(reflectorModelRing); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityMinerBaseRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityMinerBaseRenderer.java new file mode 100644 index 00000000..13d0844d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityMinerBaseRenderer.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableMap; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityMinerBaseRenderer extends TileEntitySpecialRenderer +{ + + public static OBJModel.OBJBakedModel minerBaseModelBaked; + + public IBakedModel getBakedModel() + { + if (minerBaseModelBaked == null) + { + OBJModel minerBaseModel; + try + { + minerBaseModel = (OBJModel) OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "minerbase0.obj")); + minerBaseModel = (OBJModel) minerBaseModel.process(ImmutableMap.of("ambient", "false")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + minerBaseModelBaked = (OBJModel.OBJBakedModel) minerBaseModel.bake(TRSRTransformation.identity(), DefaultVertexFormats.ITEM, spriteFunction); + } + return minerBaseModelBaked; + } + + @Override + public void render(TileEntityMinerBase tile, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (!tile.isMaster) + { + return; + } + + int j = 0, k = 0; + int light = tile.getWorld().getCombinedLight(tile.getPos(), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(1, 0, 0), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(0, 0, 1), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(1, 0, 1), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().up(), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(1, 1, 0), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(0, 1, 1), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(1, 1, 1), 0); + j += light % 65536; + k += light / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j / 8.0F, k / 8.0F); + + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + GL11.glTranslatef((float) x + 1F, (float) y + 1F, (float) z + 1F); + GL11.glScalef(0.05F, 0.05F, 0.05F); + + switch (tile.facing) + { + case SOUTH: + GL11.glRotatef(180F, 0, 1F, 0); + break; + case WEST: + GL11.glRotatef(90F, 0, 1F, 0); + break; + case NORTH: + break; + case EAST: + GL11.glRotatef(270F, 0, 1F, 0); + break; + } + + RenderHelper.disableStandardItemLighting(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + Tessellator tessellator = Tessellator.getInstance(); + tessellator.getBuffer().begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); + GlStateManager.translate(-tile.getPos().getX(), -tile.getPos().getY(), -tile.getPos().getZ()); + Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelRenderer().renderModel(tile.getWorld(), getBakedModel(), tile.getWorld().getBlockState(tile.getPos()), tile.getPos(), + tessellator.getBuffer(), false); + tessellator.draw(); + + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityShortRangeTelepadRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityShortRangeTelepadRenderer.java new file mode 100644 index 00000000..036a56b3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityShortRangeTelepadRenderer.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityShortRangeTelepadRenderer extends TileEntitySpecialRenderer +{ + + private static OBJModel.OBJBakedModel teleporterTop; + private static OBJModel.OBJBakedModel teleporterBottom; + + private void updateModels() + { + if (teleporterTop == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "block/telepad_short.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + teleporterTop = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Top", "Connector"), false), DefaultVertexFormats.ITEM, spriteFunction); + teleporterBottom = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Bottom"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void render(TileEntityShortRangeTelepad te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + GL11.glPushMatrix(); + + RenderHelper.disableStandardItemLighting(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + updateModels(); + + GL11.glTranslatef((float) x + 0.5F, (float) y, (float) z + 0.5F); + + GL11.glScalef(0.745F, 1.0F, 0.745F); + + ClientUtil.drawBakedModel(teleporterBottom); + GL11.glTranslatef(0.0F, -0.7F, 0.0F); + ClientUtil.drawBakedModel(teleporterTop); + + GL11.glPopMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/sounds/SoundUpdaterMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/sounds/SoundUpdaterMiner.java new file mode 100644 index 00000000..ceff89d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/sounds/SoundUpdaterMiner.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.sounds; + +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import net.minecraft.client.audio.MovingSound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.util.SoundCategory; + +/** + * This file is part of the Galacticraft project + * + * @author micdoodle8, radfast + */ +public class SoundUpdaterMiner extends MovingSound +{ + + private final EntityPlayerSP thePlayer; + private final EntityAstroMiner theRocket; + private boolean soundStopped; + private float targetVolume; + private float targetPitch; + + public SoundUpdaterMiner(EntityPlayerSP entityPlayerSP, EntityAstroMiner par2Entity) + { + super(GCSounds.astroMiner, SoundCategory.AMBIENT); + this.theRocket = par2Entity; + this.thePlayer = entityPlayerSP; + this.volume = 0.00001F; // If it's zero it won't start playing + this.targetVolume = 0.6F; + this.targetPitch = 1.0F; + this.pitch = 1.0F; // pitch + this.repeat = true; + this.repeatDelay = 0; // repeat delay + this.updateSoundLocation(par2Entity); + } + + /** + * Updates the JList with a new model. + */ + @Override + public void update() + { + if (!this.theRocket.isDead) + { + if (this.theRocket.AIstate == EntityAstroMiner.AISTATE_ATBASE || this.theRocket.AIstate == EntityAstroMiner.AISTATE_DOCKING) + { + this.targetVolume = 0.6F; + this.targetPitch = 0.1F; + } else + { + this.targetVolume = 1.0F; + this.targetPitch = 1.0F; + } + if (this.volume < this.targetVolume) + { + this.volume += 0.1F; + if (this.volume > this.targetVolume) + { + this.volume = this.targetVolume; + } + } else if (this.volume > this.targetVolume) + { + this.volume -= 0.1F; + if (this.volume < this.targetVolume) + { + this.volume = this.targetVolume; + } + } + if (this.pitch < this.targetPitch) + { + this.pitch += 0.05F; + if (this.pitch > this.targetPitch) + { + this.pitch = this.targetPitch; + } + } else if (this.pitch > this.targetPitch) + { + this.pitch -= 0.05F; + if (this.pitch < this.targetPitch) + { + this.pitch = this.targetPitch; + } + } + this.updateSoundLocation(this.theRocket); + } else + { + this.donePlaying = true; + } + } + + public void stopRocketSound() + { + this.donePlaying = true; + this.soundStopped = true; + } + + public void updateSoundLocation(Entity e) + { + this.xPosF = (float) e.posX; + this.yPosF = (float) e.posY; + this.zPosF = (float) e.posZ; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/AsteroidSaveData.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/AsteroidSaveData.java new file mode 100644 index 00000000..8d66f060 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/AsteroidSaveData.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.dimension; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.storage.WorldSavedData; + +public class AsteroidSaveData extends WorldSavedData +{ + + public static final String saveDataID = Constants.GCDATAFOLDER + "GCAsteroidData"; + public NBTTagCompound datacompound; + + public AsteroidSaveData(String s) + { + super(AsteroidSaveData.saveDataID); + this.datacompound = new NBTTagCompound(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + this.datacompound = nbt.getCompoundTag("asteroids"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + nbt.setTag("asteroids", this.datacompound); + return nbt; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/ShortRangeTelepadHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/ShortRangeTelepadHandler.java new file mode 100644 index 00000000..fed8ee66 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/ShortRangeTelepadHandler.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.dimension; + +import com.google.common.collect.Maps; +import java.util.Map; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.planets.asteroids.tick.AsteroidsTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.storage.WorldSavedData; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +public class ShortRangeTelepadHandler extends WorldSavedData +{ + + public static final String saveDataID = "ShortRangeTelepads"; + private static Map tileMap = Maps.newHashMap(); + + public ShortRangeTelepadHandler(String saveDataID) + { + super(saveDataID); + } + + public static class TelepadEntry + { + + public int dimensionID; + public BlockVec3 position; + public boolean enabled; + + public TelepadEntry(int dimID, BlockVec3 position, boolean enabled) + { + this.dimensionID = dimID; + this.position = position; + this.enabled = enabled; + } + + @Override + public int hashCode() + { + return new HashCodeBuilder().append(dimensionID).append(position.hashCode()).append(enabled).toHashCode(); + } + + @Override + public boolean equals(Object other) + { + if (other instanceof TelepadEntry) + { + return new EqualsBuilder().append(((TelepadEntry) other).dimensionID, this.dimensionID).append(((TelepadEntry) other).position, this.position) + .append(((TelepadEntry) other).enabled, this.enabled).isEquals(); + } + + return false; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + NBTTagList tagList = nbt.getTagList("TelepadList", 10); + tileMap.clear(); + + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound nbt2 = tagList.getCompoundTagAt(i); + int address = nbt2.getInteger("Address"); + int dimID = nbt2.getInteger("DimID"); + int posX = nbt2.getInteger("PosX"); + int posY = nbt2.getInteger("PosY"); + int posZ = nbt2.getInteger("PosZ"); + boolean enabled = true; + if (nbt2.hasKey("Enabled")) + { + enabled = nbt2.getBoolean("Enabled"); + } + tileMap.put(address, new TelepadEntry(dimID, new BlockVec3(posX, posY, posZ), enabled)); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + NBTTagList tagList = new NBTTagList(); + + for (Map.Entry e : tileMap.entrySet()) + { + NBTTagCompound nbt2 = new NBTTagCompound(); + nbt2.setInteger("Address", e.getKey()); + nbt2.setInteger("DimID", e.getValue().dimensionID); + nbt2.setInteger("PosX", e.getValue().position.x); + nbt2.setInteger("PosY", e.getValue().position.y); + nbt2.setInteger("PosZ", e.getValue().position.z); + nbt2.setBoolean("Enabled", e.getValue().enabled); + tagList.appendTag(nbt2); + } + + nbt.setTag("TelepadList", tagList); + return nbt; + } + + public static void addShortRangeTelepad(TileEntityShortRangeTelepad telepad) + { + if (!telepad.getWorld().isRemote) + { + if (telepad.addressValid) + { + TelepadEntry newEntry = new TelepadEntry(telepad.getWorld().provider.getDimension(), new BlockVec3(telepad), !telepad.getDisabled(0)); + TelepadEntry previous = tileMap.put(telepad.address, newEntry); + + if (previous == null || !previous.equals(newEntry)) + { + AsteroidsTickHandlerServer.spaceRaceData.setDirty(true); + } + } + } + } + + public static void removeShortRangeTeleporter(TileEntityShortRangeTelepad telepad) + { + if (!telepad.getWorld().isRemote) + { + if (telepad.addressValid) + { + tileMap.remove(telepad.address); + AsteroidsTickHandlerServer.spaceRaceData.setDirty(true); + } + } + } + + public static TelepadEntry getLocationFromAddress(int address) + { + return tileMap.get(address); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/TeleportTypeAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/TeleportTypeAsteroids.java new file mode 100644 index 00000000..be4e4a58 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/TeleportTypeAsteroids.java @@ -0,0 +1,407 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.dimension; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.ItemMonsterPlacer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.gen.ChunkProviderServer; + +public class TeleportTypeAsteroids implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + int x = MathHelper.floor(stats.getCoordsTeleportedFromX()); + int z = MathHelper.floor(stats.getCoordsTeleportedFromZ()); + int limit = ConfigManagerCore.otherPlanetWorldBorders - 2; + if (limit > 20) + { + if (x > limit) + { + z *= limit / x; + x = limit; + } else if (x < -limit) + { + z *= -limit / x; + x = -limit; + } + if (z > limit) + { + x *= limit / z; + z = limit; + } else if (z < -limit) + { + x *= -limit / z; + z = -limit; + } + } + + int attemptCount = 0; + + // Small pre-generate with a chunk loading radius of 3, to make sure + // some asteroids get generated + // (if the world is already generated here, this will be very quick) + this.preGenChunks(world, x >> 4, z >> 4); + + do + { + BlockVec3 bv3 = null; + if (world.provider instanceof WorldProviderAsteroids) + { + bv3 = ((WorldProviderAsteroids) world.provider).getClosestAsteroidXZ(x, 0, z, true); + } + + if (bv3 != null) + { + // Check whether the returned asteroid is too far from the + // desired entry location in which case, give up + if (bv3.distanceSquared(new BlockVec3(x, 128, z)) > 25600) + { + break; + } + + if (ConfigManagerCore.enableDebug) + { + GalacticraftPlanets.logger.info("Testing asteroid at x" + (bv3.x) + " y" + (bv3.y) + " z" + bv3.z); + } + this.loadChunksAround(bv3.x, bv3.z, 2, world.getChunkProvider()); + this.loadChunksAround(bv3.x, bv3.z, -3, world.getChunkProvider()); + + if (goodAsteroidEntry(world, bv3.x, bv3.y, bv3.z)) + { + return new Vector3(bv3.x, 310, bv3.z); + } + if (goodAsteroidEntry(world, bv3.x + 2, bv3.y, bv3.z + 2)) + { + return new Vector3(bv3.x + 2, 310, bv3.z + 2); + } + if (goodAsteroidEntry(world, bv3.x + 2, bv3.y, bv3.z - 2)) + { + return new Vector3(bv3.x + 2, 310, bv3.z - 2); + } + if (goodAsteroidEntry(world, bv3.x - 2, bv3.y, bv3.z - 2)) + { + return new Vector3(bv3.x - 2, 310, bv3.z - 2); + } + if (goodAsteroidEntry(world, bv3.x - 2, bv3.y, bv3.z + 2)) + { + return new Vector3(bv3.x - 2, 310, bv3.z + 2); + } + + // Failed to find an asteroid even though there should be + // one there + if (ConfigManagerCore.enableDebug) + { + GalacticraftPlanets.logger.info("Removing drilled out asteroid at x" + (bv3.x) + " z" + (bv3.z)); + } + ((WorldProviderAsteroids) world.provider).removeAsteroid(bv3.x, bv3.y, bv3.z); + } + + attemptCount++; + } while (attemptCount < 5); + + GalacticraftPlanets.logger.info("Failed to find good large asteroid landing spot! Falling back to making a small one."); + this.makeSmallLandingSpot(world, x, z); + return new Vector3(x, 310, z); + } + + GalacticraftPlanets.logger.error("Null player when teleporting to Asteroids!"); + return new Vector3(0, 310, 0); + } + + private boolean goodAsteroidEntry(World world, int x, int yorig, int z) + { + for (int k = 208; k > 48; k--) + { + if (!world.isAirBlock(new BlockPos(x, k, z))) + { + if (Math.abs(k - yorig) > 20) + { + continue; + } + // Clear the downward path of small asteroids and any other + // asteroid rock + for (int y = k + 2; y < 256; y++) + { + if (world.getBlockState(new BlockPos(x, y, z)).getBlock() == AsteroidBlocks.blockBasic) + { + world.setBlockToAir(new BlockPos(x, y, z)); + } + if (world.getBlockState(new BlockPos(x - 1, y, z)).getBlock() == AsteroidBlocks.blockBasic) + { + world.setBlockToAir(new BlockPos(x - 1, y, z)); + } + if (world.getBlockState(new BlockPos(x, y, z - 1)).getBlock() == AsteroidBlocks.blockBasic) + { + world.setBlockToAir(new BlockPos(x, y, z - 1)); + } + if (world.getBlockState(new BlockPos(x - 1, y, z - 1)).getBlock() == AsteroidBlocks.blockBasic) + { + world.setBlockToAir(new BlockPos(x - 1, y, z - 1)); + } + } + if (ConfigManagerCore.enableDebug) + { + GalacticraftPlanets.logger.info("Found asteroid at x" + (x) + " z" + (z)); + } + return true; + } + } + return false; + } + + private void makeSmallLandingSpot(World world, int x, int z) + { + this.loadChunksAround(x, z, -1, (ChunkProviderServer) world.getChunkProvider()); + + for (int k = 255; k > 48; k--) + { + if (!world.isAirBlock(new BlockPos(x, k, z))) + { + this.makePlatform(world, x, k - 1, z); + return; + } + if (!world.isAirBlock(new BlockPos(x - 1, k, z))) + { + this.makePlatform(world, x - 1, k - 1, z); + return; + } + if (!world.isAirBlock(new BlockPos(x - 1, k, z - 1))) + { + this.makePlatform(world, x - 1, k - 1, z - 1); + return; + } + if (!world.isAirBlock(new BlockPos(x, k, z - 1))) + { + this.makePlatform(world, x, k - 1, z - 1); + return; + } + } + + this.makePlatform(world, x, 48 + world.rand.nextInt(128), z); + return; + } + + private void loadChunksAround(int x, int z, int i, ChunkProviderServer cp) + { + cp.loadChunk(x >> 4, z >> 4); + if ((x + i) >> 4 != x >> 4) + { + cp.loadChunk((x + i) >> 4, z >> 4); + if ((z + i) >> 4 != z >> 4) + { + cp.loadChunk(x >> 4, (z + i) >> 4); + cp.loadChunk((x + i) >> 4, (z + i) >> 4); + } + } else if ((z + i) >> 4 != z >> 4) + { + cp.loadChunk(x >> 4, (z + i) >> 4); + } + } + + private void makePlatform(World world, int x, int y, int z) + { + for (int xx = -3; xx < 3; xx++) + { + for (int zz = -3; zz < 3; zz++) + { + if (xx == -3 && (zz == -3 || zz == 2)) + { + continue; + } + if (xx == 2 && (zz == -3 || zz == 2)) + { + continue; + } + doBlock(world, x + xx, y, z + zz); + } + } + for (int xx = -2; xx < 2; xx++) + { + for (int zz = -2; zz < 2; zz++) + { + doBlock(world, x + xx, y - 1, z + zz); + } + } + doBlock(world, x - 1, y - 2, z - 1); + doBlock(world, x - 1, y - 2, z); + doBlock(world, x, y - 2, z); + doBlock(world, x, y - 2, z - 1); + } + + private void doBlock(World world, int x, int y, int z) + { + int meta = (int) (world.rand.nextFloat() * 1.5F); + if (world.isAirBlock(new BlockPos(x, y, z))) + { + world.setBlockState(new BlockPos(x, y, z), AsteroidBlocks.blockBasic.getStateFromMeta(meta), 2); + } + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, ConfigManagerCore.disableLander ? 250.0 : 900.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return null; + } + + private void preGenChunks(World w, int cx, int cz) + { + this.preGenChunk(w, cx, cz); + for (int r = 1; r < 3; r++) + { + int xmin = cx - r; + int xmax = cx + r; + int zmin = cz - r; + int zmax = cz + r; + for (int i = -r; i < r; i++) + { + this.preGenChunk(w, xmin, cz + i); + this.preGenChunk(w, xmax, cz - i); + this.preGenChunk(w, cx - i, zmin); + this.preGenChunk(w, cx + i, zmax); + } + } + } + + private void preGenChunk(World w, int chunkX, int chunkZ) + { + w.getChunk(chunkX, chunkZ); + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + if (!ridingAutoRocket && player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + if (stats.getTeleportCooldown() <= 0) + { + if (player.capabilities.isFlying) + { + player.capabilities.isFlying = false; + } + + if (!newWorld.isRemote) + { + EntityEntryPod entryPod = new EntityEntryPod(player); + + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) newWorld); + entryPod.forceSpawn = true; + newWorld.spawnEntity(entryPod); + CompatibilityManager.forceLoadChunksEnd((WorldServer) newWorld, previous); + } + + stats.setTeleportCooldown(10); + } + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + SchematicRegistry.unlockNewPage(player, new ItemStack(GCItems.schematic, 1, 1)); // Knows + // how + // to + // build + // T2 + // rocket + SchematicRegistry.unlockNewPage(player, new ItemStack(MarsItems.schematic, 1, 0)); // Knows + // how + // to + // build + // T3 + // rocket + SchematicRegistry.unlockNewPage(player, new ItemStack(MarsItems.schematic, 1, 2)); // Knows + // how + // to + // build + // Astro + // Miner + NonNullList rocketStacks = NonNullList.create(); + stats.setFuelLevel(1000); + rocketStacks.add(new ItemStack(GCItems.oxMask)); + rocketStacks.add(new ItemStack(GCItems.oxygenGear)); + rocketStacks.add(new ItemStack(GCItems.oxTankMedium)); + rocketStacks.add(new ItemStack(GCItems.oxTankHeavy)); + rocketStacks.add(new ItemStack(GCItems.oxTankHeavy)); + rocketStacks.add(new ItemStack(AsteroidsItems.canisterLOX)); + rocketStacks.add(new ItemStack(AsteroidsItems.canisterLOX)); + rocketStacks.add(new ItemStack(AsteroidsItems.canisterLOX)); + rocketStacks.add(new ItemStack(AsteroidsItems.basicItem, 32, 7)); + rocketStacks.add(new ItemStack(Blocks.GLASS_PANE, 16)); + rocketStacks.add(new ItemStack(Blocks.PLANKS, 32, 2)); + rocketStacks.add(new ItemStack(MarsItems.marsItemBasic, 16, 2)); // Desh + // ingot + rocketStacks.add(new ItemStack(GCItems.basicItem, 8, 13)); // Basic + // Wafer + rocketStacks.add(new ItemStack(GCItems.basicItem, 2, 1)); // Solar + // Panels + rocketStacks.add(new ItemStack(GCItems.foodItem, 16, 0)); // Canned food + rocketStacks.add(new ItemStack(Items.EGG, 12)); + + ItemStack spawnEgg = new ItemStack(Items.SPAWN_EGG, 2); + ResourceLocation name = EntityList.getKey(EntityCow.class); + ItemMonsterPlacer.applyEntityIdToItemStack(spawnEgg, name); + rocketStacks.add(spawnEgg); + rocketStacks.add(PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM, 4), PotionTypes.LONG_NIGHT_VISION)); // Night + // Vision + // Potion + rocketStacks.add(new ItemStack(MarsBlocks.machine, 1, 4)); // Cryogenic + // Chamber + rocketStacks.add(new ItemStack(MarsItems.rocketMars, 1, IRocketType.EnumRocketType.INVENTORY36.ordinal())); + stats.setRocketStacks(rocketStacks); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/WorldProviderAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/WorldProviderAsteroids.java new file mode 100644 index 00000000..9c7d7f1c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/WorldProviderAsteroids.java @@ -0,0 +1,551 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.dimension; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.TreeMap; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.ChunkProviderAsteroids; +import net.minecraft.block.Block; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.DimensionType; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class WorldProviderAsteroids extends WorldProviderSpace implements ISolarLevel +{ + + // Used to list asteroid centres to external code that needs to know them + private HashSet asteroids = new HashSet<>(); + private boolean dataNotLoaded = true; + private AsteroidSaveData datafile; + private double solarMultiplier = -1D; + + // @Override +// public void registerWorldChunkManager() +// { +// this.worldChunkMgr = new WorldChunkManagerAsteroids(this.world, 0F); +// } + + @Override + public CelestialBody getCelestialBody() + { + return AsteroidsModule.planetAsteroids; + } + + @Override + public Vector3 getFogColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public Vector3 getSkyColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 0; + } + + @Override + public boolean isDaytime() + { + return true; + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderAsteroids.class; + } + + @Override + public float calculateCelestialAngle(long par1, float par3) + { + return 0.25F; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + return 1.0F; + } + +// @Override +// public IChunkProvider createChunkGenerator() +// { +// return new ChunkProviderAsteroids(this.world, this.world.getSeed(), this.world.getWorldInfo().isMapFeaturesEnabled()); +// } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 96; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + + // Overriding so that beds do not explode on Asteroids + @Override + public boolean canRespawnHere() + { + if (EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = false; + return true; + } + return false; + } + + @Override + public float getGravity() + { + return 0.072F; + } + + @Override + public double getMeteorFrequency() + { + return 10.0D; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.9D; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier >= 3; + } + + @Override + public float getFallDamageModifier() + { + return 0.1F; + } + + public void addAsteroid(int x, int y, int z, int size, int core) + { + AsteroidData coords = new AsteroidData(x, y, z, size, core); + if (!this.asteroids.contains(coords)) + { + if (this.dataNotLoaded) + { + this.loadAsteroidSavedData(); + } + if (!this.asteroids.contains(coords)) + { + this.addToNBT(this.datafile.datacompound, coords); + this.asteroids.add(coords); + } + } + } + + public void removeAsteroid(int x, int y, int z) + { + AsteroidData coords = new AsteroidData(x, y, z); + if (this.asteroids.contains(coords)) + { + this.asteroids.remove(coords); + + if (this.dataNotLoaded) + { + this.loadAsteroidSavedData(); + } + this.writeToNBT(this.datafile.datacompound); + } + } + + private void loadAsteroidSavedData() + { + this.datafile = (AsteroidSaveData) this.world.loadData(AsteroidSaveData.class, AsteroidSaveData.saveDataID); + + if (this.datafile == null) + { + this.datafile = new AsteroidSaveData(""); + this.world.setData(AsteroidSaveData.saveDataID, this.datafile); + this.writeToNBT(this.datafile.datacompound); + } else + { + this.readFromNBT(this.datafile.datacompound); + } + + this.dataNotLoaded = false; + } + + private void readFromNBT(NBTTagCompound nbt) + { + NBTTagList coordList = nbt.getTagList("coords", 10); + if (coordList.tagCount() > 0) + { + for (int j = 0; j < coordList.tagCount(); j++) + { + NBTTagCompound tag1 = coordList.getCompoundTagAt(j); + + if (tag1 != null) + { + this.asteroids.add(AsteroidData.readFromNBT(tag1)); + } + } + } + } + + private void writeToNBT(NBTTagCompound nbt) + { + NBTTagList coordList = new NBTTagList(); + for (AsteroidData coords : this.asteroids) + { + NBTTagCompound tag = new NBTTagCompound(); + coords.writeToNBT(tag); + coordList.appendTag(tag); + } + nbt.setTag("coords", coordList); + this.datafile.markDirty(); + } + + private void addToNBT(NBTTagCompound nbt, AsteroidData coords) + { + NBTTagList coordList = nbt.getTagList("coords", 10); + NBTTagCompound tag = new NBTTagCompound(); + coords.writeToNBT(tag); + coordList.appendTag(tag); + nbt.setTag("coords", coordList); + this.datafile.markDirty(); + } + + public boolean checkHasAsteroids() + { + if (this.dataNotLoaded) + { + this.loadAsteroidSavedData(); + } + + if (this.asteroids.size() == 0) + { + return false; + } + + return true; + } + + public BlockVec3 getClosestAsteroidXZ(int x, int y, int z, boolean mark) + { + if (!this.checkHasAsteroids()) + { + return null; + } + + BlockVec3 result = null; + AsteroidData resultRoid = null; + int lowestDistance = Integer.MAX_VALUE; + + for (AsteroidData test : this.asteroids) + { + if (mark && (test.sizeAndLandedFlag & 128) > 0) + { + continue; + } + + int dx = x - test.centre.x; + int dz = z - test.centre.z; + int a = dx * dx + dz * dz; + if (a < lowestDistance) + { + lowestDistance = a; + result = test.centre; + resultRoid = test; + } + } + + if (result == null) + { + return null; + } + + if (mark) + { + resultRoid.sizeAndLandedFlag |= 128; + this.writeToNBT(this.datafile.datacompound); + } + result = result.clone(); + result.sideDoneBits = resultRoid.sizeAndLandedFlag & 127; + return result; + } + + public ArrayList getClosestAsteroidsXZ(int x, int y, int z, int facing, int count) + { + if (!this.checkHasAsteroids()) + { + return null; + } + + TreeMap targets = new TreeMap<>(); + + for (AsteroidData roid : this.asteroids) + { + BlockVec3 test = roid.centre; + switch (facing) + { + case 2: + if (z - 16 < test.z) + { + continue; + } + break; + case 3: + if (z + 16 > test.z) + { + continue; + } + break; + case 4: + if (x - 16 < test.x) + { + continue; + } + break; + case 5: + if (x + 16 > test.x) + { + continue; + } + break; + } + int dx = x - test.x; + int dz = z - test.z; + int a = dx * dx + dz * dz; + if (a < 262144) + { + targets.put(a, test); + } + } + + int max = Math.max(count, targets.size()); + if (max <= 0) + { + return null; + } + + ArrayList returnValues = new ArrayList<>(); + int i = 0; + int offset = EntityAstroMiner.MINE_LENGTH_AST / 2; + for (BlockVec3 target : targets.values()) + { + BlockVec3 coords = target.clone(); + GalacticraftPlanets.logger.debug("Found nearby asteroid at " + target.toString()); + switch (facing) + { + case 2: + coords.z += offset; + break; + case 3: + coords.z -= offset; + break; + case 4: + coords.x += offset; + break; + case 5: + coords.x -= offset; + break; + } + returnValues.add(coords); + if (++i >= count) + { + break; + } + } + + return returnValues; + } + + @Override + public int getActualHeight() + { + return 256; + } + + @Override + protected void init() + { + super.init(); + this.nether = true; + } + + @Override + public double getSolarEnergyMultiplier() + { + if (this.solarMultiplier < 0D) + { + double s = this.getSolarSize(); + this.solarMultiplier = s * s * s * ConfigManagerCore.spaceStationEnergyScalar; + } + return this.solarMultiplier; + } + + private static class AsteroidData + { + + protected BlockVec3 centre; + protected int sizeAndLandedFlag = 15; + protected int coreAndSpawnedFlag = -2; + + public AsteroidData(int x, int y, int z) + { + this.centre = new BlockVec3(x, y, z); + } + + public AsteroidData(int x, int y, int z, int size, int core) + { + this.centre = new BlockVec3(x, y, z); + this.sizeAndLandedFlag = size; + this.coreAndSpawnedFlag = core; + } + + public AsteroidData(BlockVec3 bv) + { + this.centre = bv; + } + + @Override + public int hashCode() + { + if (this.centre != null) + { + return this.centre.hashCode(); + } else + { + return 0; + } + } + + @Override + public boolean equals(Object o) + { + if (o instanceof AsteroidData) + { + BlockVec3 vector = ((AsteroidData) o).centre; + return this.centre.x == vector.x && this.centre.y == vector.y && this.centre.z == vector.z; + } + + if (o instanceof BlockVec3) + { + BlockVec3 vector = (BlockVec3) o; + return this.centre.x == vector.x && this.centre.y == vector.y && this.centre.z == vector.z; + } + + return false; + } + + public NBTTagCompound writeToNBT(NBTTagCompound tag) + { + tag.setInteger("x", this.centre.x); + tag.setInteger("y", this.centre.y); + tag.setInteger("z", this.centre.z); + tag.setInteger("coreAndFlag", this.coreAndSpawnedFlag); + tag.setInteger("sizeAndFlag", this.sizeAndLandedFlag); + return tag; + } + + public static AsteroidData readFromNBT(NBTTagCompound tag) + { + BlockVec3 tempVector = new BlockVec3(); + tempVector.x = tag.getInteger("x"); + tempVector.y = tag.getInteger("y"); + tempVector.z = tag.getInteger("z"); + + AsteroidData roid = new AsteroidData(tempVector); + if (tag.hasKey("coreAndFlag")) + { + roid.coreAndSpawnedFlag = tag.getInteger("coreAndFlag"); + } + if (tag.hasKey("sizeAndFlag")) + { + roid.sizeAndLandedFlag = tag.getInteger("sizeAndFlag"); + } + + return roid; + } + } + + @Override + public int getDungeonSpacing() + { + return 576; + // Used for generating Abandoned Base + } + + @Override + public DimensionType getDimensionType() + { + return GCPlanetDimensions.ASTEROIDS; + } + + @Override + public float getArrowGravity() + { + return 0.002F; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasure.MOONCHEST; + } + + @Override + public boolean hasSkyLight() + { + return false; + } + + @Override + public List getSurfaceBlocks() + { + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityAstroMiner.java new file mode 100644 index 00000000..1e69794f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityAstroMiner.java @@ -0,0 +1,2594 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; +import micdoodle8.mods.galacticraft.api.entity.IAntiGrav; +import micdoodle8.mods.galacticraft.api.entity.IEntityNoisy; +import micdoodle8.mods.galacticraft.api.entity.ITelemetry; +import micdoodle8.mods.galacticraft.api.vector.BlockTuple; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.client.sounds.SoundUpdaterMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.tick.AsteroidsTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.block.Block; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockReed; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +public class EntityAstroMiner extends Entity implements IInventory, IPacketReceiver, IEntityNoisy, IAntiGrav, ITelemetry +{ + + private static final DataParameter DAMAGE = EntityDataManager.createKey(EntityAstroMiner.class, DataSerializers.FLOAT); + + public static final int MINE_LENGTH = 24; + public static final int MINE_LENGTH_AST = 12; + private static final int MAXENERGY = 12000; + private static final int RETURNENERGY = 1000; + private static final int RETURNDROPS = 10; + private static final int INV_SIZE = 227; + private static final float cLENGTH = 2.6F; + private static final float cWIDTH = 1.8F; + private static final float cHEIGHT = 1.7F; + private static final double SPEEDUP = 2.5D; + + public static final int AISTATE_OFFLINE = -1; + public static final int AISTATE_STUCK = 0; + public static final int AISTATE_ATBASE = 1; + public static final int AISTATE_TRAVELLING = 2; + public static final int AISTATE_MINING = 3; + public static final int AISTATE_RETURNING = 4; + public static final int AISTATE_DOCKING = 5; + + public static final int FAIL_BASEDESTROYED = 3; + public static final int FAIL_OUTOFENERGY = 4; + public static final int FAIL_RETURNPATHBLOCKED = 5; + public static final int FAIL_ANOTHERWASLINKED = 8; + + private boolean TEMPDEBUG = false; + private boolean TEMPFAST = false; + + public boolean serverTick = false; + public int serverTickSave; + public NonNullList stacks; + + public int energyLevel; + public int mineCount = 0; + public float targetYaw; + public float targetPitch; + + public int AIstate; + public int timeInCurrentState = 0; + public EntityPlayerMP playerMP = null; + private UUID playerUUID; + private BlockVec3 posTarget; + private BlockVec3 posBase; + private BlockVec3 waypointBase; + private LinkedList wayPoints = new LinkedList<>(); + private LinkedList minePoints = new LinkedList<>(); + private BlockVec3 minePointCurrent = null; + private EnumFacing baseFacing; + public EnumFacing facing; + private EnumFacing facingAI; + private EnumFacing lastFacing; + private static BlockVec3[] headings = + {new BlockVec3(0, -1, 0), new BlockVec3(0, 1, 0), new BlockVec3(0, 0, -1), new BlockVec3(0, 0, 1), new BlockVec3(-1, 0, 0), new BlockVec3(1, 0, 0)}; + private static BlockVec3[] headings2 = + {new BlockVec3(0, -3, 0), new BlockVec3(0, 2, 0), new BlockVec3(0, 0, -3), new BlockVec3(0, 0, 2), new BlockVec3(-3, 0, 0), new BlockVec3(2, 0, 0)}; + + private final int baseSafeRadius = 32; + private final double speedbase = TEMPFAST ? 0.16D : 0.022D; + private double speed = speedbase; + private final float rotSpeedBase = TEMPFAST ? 8F : 1.5F; + private float rotSpeed = rotSpeedBase; + private double speedup = SPEEDUP; + private boolean noSpeedup = false; // This stops the miner getting stuck at + // turning points + public float shipDamage; + public int currentDamage; + public int timeSinceHit; + private boolean flagLink = false; + private boolean flagCheckPlayer = false; + private boolean toAddToServer = AsteroidsTickHandlerServer.loadingSavedChunks.get(); + + // To do: + // break the entity drops it as an item + + private int turnProgress; + private double minecartX; + private double minecartY; + private double minecartZ; + private double minecartYaw; + private double minecartPitch; + @SideOnly(Side.CLIENT) private double velocityX; + @SideOnly(Side.CLIENT) private double velocityY; + @SideOnly(Side.CLIENT) private double velocityZ; + + private int tryBlockLimit; + private int inventoryDrops; + public boolean stopForTurn; + + private static ArrayList noMineList = new ArrayList<>(); + public static BlockTuple blockingBlock = new BlockTuple(Blocks.AIR, 0); + private int givenFailMessage = 0; + private BlockVec3 mineLast = null; + private int mineCountDown = 0; + private int pathBlockedCount = 0; + public LinkedList laserBlocks = new LinkedList<>(); + public LinkedList laserTimes = new LinkedList<>(); + public float retraction = 1F; + protected ITickable soundUpdater; + private boolean soundToStop = false; + private boolean spawnedInCreative = false; + private int serverIndex; + + static + { + // Avoid: + // Overworld: avoid lava source blocks, mossy cobble, End Portal and + // Fortress blocks + // railtrack, levers, redstone dust, GC walkways, + // Anything with a tileEntity will also be avoided: + // spawners, chests, oxygen pipes, hydrogen pipes, wires + noMineList.add(Blocks.BEDROCK); + noMineList.add(Blocks.MOSSY_COBBLESTONE); + noMineList.add(Blocks.END_PORTAL); + noMineList.add(Blocks.END_PORTAL_FRAME); + noMineList.add(Blocks.PORTAL); + noMineList.add(Blocks.STONEBRICK); + noMineList.add(Blocks.FARMLAND); + noMineList.add(Blocks.RAIL); + noMineList.add(Blocks.LEVER); + noMineList.add(Blocks.REDSTONE_WIRE); + noMineList.add(AsteroidBlocks.blockWalkway); + // TODO: + // Add configurable blacklist + } + + public EntityAstroMiner(World world, NonNullList cargo, int energy) + { + this(world); + this.toAddToServer = true; + this.stacks = cargo; + this.energyLevel = energy; + } + + public EntityAstroMiner(World world) + { + super(world); + this.facing = EnumFacing.NORTH; + this.preventEntitySpawning = true; + this.ignoreFrustumCheck = true; + this.isImmuneToFire = true; + this.width = cLENGTH; + this.height = cWIDTH; + this.setSize(cLENGTH, cWIDTH); +// this.myEntitySize = Entity.EnumEntitySize.SIZE_6; +// this.dataManager.addObject(this.currentDamage, new Integer(0)); +// this.dataManager.addObject(this.timeSinceHit, new Integer(0)); + this.noClip = true; + + if (world != null && world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 5.0; + return distance < d0 * d0; + } + + @Override + protected void entityInit() + { + this.dataManager.register(DAMAGE, 0.0F); + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int var1) + { + return this.stacks.get(var1); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + } + return oldstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public String getName() + { + return GCCoreUtil.translate("entity.astro_miner.name"); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer var1) + { + return !this.isDead && var1.getDistanceSq(this) <= 64.0D; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + private boolean emptyInventory(TileEntityMinerBase minerBase) + { + boolean doneOne = false; + for (int i = 0; i < this.stacks.size(); i++) + { + ItemStack stack = this.stacks.get(i); + if (stack.isEmpty()) + { + continue; + } + int sizeprev = stack.getCount(); + minerBase.addToInventory(stack); + if (stack.isEmpty()) + { + this.stacks.set(i, ItemStack.EMPTY); + this.markDirty(); + return true; + } else if (stack.getCount() < sizeprev) + { + this.stacks.set(i, stack); + this.markDirty(); + // Something was transferred although some stacks remaining + return true; + } + } + // No stacks were transferred + return false; + } + + @Override + public void onUpdate() + { + this.serverTick = false; + if (this.posY < -64.0D) + { + this.setDead(); + return; + } + + if (this.getDamage() > 0.0F) + { + this.setDamage(this.getDamage() - 1.0F); + } + + stopForTurn = !this.checkRotation(); + this.facing = this.getFacingFromRotation(); + this.setBoundingBoxForFacing(); + + if (this.world.isRemote) + { + // CLIENT CODE + if (this.turnProgress == 0) + { + this.turnProgress++; + if (this.AIstate < AISTATE_TRAVELLING) + { + // It should be stationary, so this deals with the spooky + // movement (due to minor differences between server and + // client position) + this.posX = this.minecartX; + this.posY = this.minecartY; + this.posZ = this.minecartZ; + } else + { + double diffX = this.minecartX - this.posX; + double diffY = this.minecartY - this.posY; + double diffZ = this.minecartZ - this.posZ; + if (Math.abs(diffX) > 1.0D || Math.abs(diffY) > 1.0D || Math.abs(diffZ) > 1.0D) + { + this.posX = this.minecartX; + this.posY = this.minecartY; + this.posZ = this.minecartZ; + } else + { + if (Math.abs(diffX) > Math.abs(this.motionX)) + { + this.motionX += diffX / 10D; + } + if (Math.abs(diffY) > Math.abs(this.motionY)) + { + this.motionY += diffY / 10D; + } + if (Math.abs(diffZ) > Math.abs(this.motionZ)) + { + this.motionZ += diffZ / 10D; + } + } + } + } + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + setEntityBoundingBox(getEntityBoundingBox().offset(this.motionX, this.motionY, this.motionZ)); + this.setRotation(this.rotationYaw, this.rotationPitch); + if (this.AIstate == AISTATE_MINING && this.ticksExisted % 2 == 0) + { + this.prepareMoveClient(TEMPFAST ? 8 : 1, 2); + } + + // Sound updates on client + if (this.AIstate < AISTATE_ATBASE) + { + this.stopRocketSound(); + } + return; + } + + if (this.toAddToServer) + { + this.toAddToServer = false; + this.serverIndex = AsteroidsTickHandlerServer.monitorMiner(this); + } + + // SERVER CODE + if (this.ticksExisted % 10 == 0 || this.flagLink) + { + this.flagLink = false; + this.checkPlayer(); + if (posBase.blockExists(this.world)) + { + TileEntity tileEntity = posBase.getTileEntity(this.world); + if (tileEntity instanceof TileEntityMinerBase && ((TileEntityMinerBase) tileEntity).isMaster && !tileEntity.isInvalid()) + { + // Create link with base on loading the EntityAstroMiner + UUID linker = ((TileEntityMinerBase) tileEntity).getLinkedMiner(); + if (!this.getUniqueID().equals(linker)) + { + if (linker == null) + { + ((TileEntityMinerBase) tileEntity).linkMiner(this); + } else + { + this.freeze(FAIL_ANOTHERWASLINKED); + return; + } + } else if (((TileEntityMinerBase) tileEntity).linkedMiner != this) + { + ((TileEntityMinerBase) tileEntity).linkMiner(this); + } + } else + { + if (this.playerMP != null && (this.givenFailMessage & (1 << FAIL_BASEDESTROYED)) == 0) + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner" + FAIL_BASEDESTROYED + ".fail"))); + this.givenFailMessage += (1 << FAIL_BASEDESTROYED); + // Continue mining even though base was destroyed - + // maybe it will be replaced + } + } + } + } else if (this.flagCheckPlayer) + { + this.checkPlayer(); + } + + if (this.playerMP == null) + { + // Go into dormant state if player is offline + // but do not actually set the dormant state on the server, so can + // resume immediately if player comes online + if (this.motionX != 0 || this.motionY != 0 || this.motionZ != 0) + { + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + GalacticraftCore.packetPipeline.sendToDimension(new PacketDynamic(this), GCCoreUtil.getDimensionID(this.world)); + } + return; + } + + if (this.lastFacing != this.facingAI) + { + this.lastFacing = this.facingAI; + this.prepareMove(12, 0); + this.prepareMove(12, 1); + this.prepareMove(12, 2); + } + + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + + if (this.AIstate > AISTATE_ATBASE) + { + if (this.energyLevel <= 0) + { + this.freeze(FAIL_OUTOFENERGY); + } else if (!(this.world.provider instanceof WorldProviderAsteroids) && this.ticksExisted % 2 == 0) + { + this.energyLevel--; + } + // No energy consumption when moving in space in Asteroids dimension + // (this reduces the risk of the Astro Miner becoming stranded!) + } + + switch (this.AIstate) + { + case AISTATE_STUCK: + // TODO blinking distress light or something? + // Attempt to re-start every 30 seconds or so + if (this.ticksExisted % 600 == 0) + { + if ((this.givenFailMessage & 8) > 0) + { + // The base was destroyed - see if it has been replaced? + this.atBase(); + } else + { + // See if the return path has been unblocked, and give a + // small amount of backup energy to try to get home + this.AIstate = AISTATE_RETURNING; + if (this.energyLevel <= 0) + { + this.energyLevel = 20; + } + } + } + break; + case AISTATE_ATBASE: + this.atBase(); + break; + case AISTATE_TRAVELLING: + if (!this.moveToTarget()) + { + this.prepareMove(TEMPFAST ? 8 : 2, 2); + } + break; + case AISTATE_MINING: + if (!this.doMining() && this.ticksExisted % 2 == 0) + { + this.energyLevel--; + this.prepareMove(TEMPFAST ? 8 : 1, 2); + } + break; + case AISTATE_RETURNING: + this.moveToBase(); + this.prepareMove(TEMPFAST ? 8 : 4, 1); + break; + case AISTATE_DOCKING: + if (this.waypointBase != null) + { + this.speed = speedbase / 1.6; + this.rotSpeed = rotSpeedBase / 1.6F; + if (this.moveToPos(this.waypointBase, true)) + { + this.AIstate = AISTATE_ATBASE; + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + this.speed = speedbase; + this.rotSpeed = rotSpeedBase; + } + } else + { + GalacticraftPlanets.logger.error("AstroMiner missing base position: this is a bug."); + this.AIstate = AISTATE_STUCK; + } + break; + } + + GalacticraftCore.packetPipeline.sendToDimension(new PacketDynamic(this), GCCoreUtil.getDimensionID(this.world)); + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + setEntityBoundingBox(getEntityBoundingBox().offset(this.motionX, this.motionY, this.motionZ)); + + /* + * if (this.dataManager.get(this.timeSinceHit) > 0) { + * this.dataManager.set(this.timeSinceHit, + * Integer.valueOf(this.dataManager.get(this.timeSinceHit) - 1)); } if + * (this.dataManager.get(this.currentDamage) > 0) { + * this.dataManager.set(this.currentDamage, + * Integer.valueOf(this.dataManager.get(this.currentDamage) - 1)); } + */ + } + + private void checkPlayer() + { + if (this.playerMP == null) + { + if (this.playerUUID != null) + { + this.playerMP = PlayerUtil.getPlayerByUUID(this.playerUUID); + } + } else + { + if (!PlayerUtil.isPlayerOnline(this.playerMP)) + { + this.playerMP = null; + } + } + } + + private void freeze(int i) + { + this.AIstate = AISTATE_STUCK; + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + if (this.playerMP != null && (this.givenFailMessage & (1 << i)) == 0) + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner" + i + ".fail"))); + this.givenFailMessage += (1 << i); + } + } + + // packet with AIstate, energy, rotationP + Y, mining data count + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.AIstate = buffer.readInt(); + this.energyLevel = buffer.readInt(); + this.targetPitch = buffer.readFloat(); + this.targetYaw = buffer.readFloat(); + this.mineCount = buffer.readInt(); + int x = buffer.readInt(); + int y = buffer.readInt(); + int z = buffer.readInt(); + BlockPos pos = new BlockPos(x, y, z); + if (this.world.isBlockLoaded(pos)) + { + TileEntity tile = this.world.getTileEntity(pos); + if (tile instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tile).linkedMiner = this; + ((TileEntityMinerBase) tile).linkCountDown = 20; + } + } + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + return; + } + list.add(this.playerMP == null ? AISTATE_OFFLINE : this.AIstate); + list.add(this.energyLevel); + list.add(this.targetPitch); + list.add(this.targetYaw); + list.add(this.mineCount); + list.add(this.posBase.x); + list.add(this.posBase.y); + list.add(this.posBase.z); + } + + public void recall() + { + if (this.AIstate > this.AISTATE_ATBASE && this.AIstate < this.AISTATE_RETURNING) + { + AIstate = AISTATE_RETURNING; + this.pathBlockedCount = 0; + } + } + + private EnumFacing getFacingFromRotation() + { + if (this.rotationPitch > 45F) + { + return EnumFacing.UP; + } + if (this.rotationPitch < -45F) + { + return EnumFacing.DOWN; + } + float rY = this.rotationYaw % 360F; + // rotationYaw 5 90 4 270 2 180 3 0 + if (rY < 45F || rY > 315F) + { + return EnumFacing.SOUTH; + } + if (rY < 135F) + { + return EnumFacing.EAST; + } + if (rY < 225F) + { + return EnumFacing.NORTH; + } + return EnumFacing.WEST; + } + + private void atBase() + { + TileEntity tileEntity = posBase.getTileEntity(this.world); + + if (!(tileEntity instanceof TileEntityMinerBase) || tileEntity.isInvalid() || !((TileEntityMinerBase) tileEntity).isMaster) + { + this.freeze(FAIL_BASEDESTROYED); + return; + } + + TileEntityMinerBase minerBase = (TileEntityMinerBase) tileEntity; + // If it's successfully reached its base, clear all fail messages except + // number 6, which is that all mining areas are finished (see below) + this.givenFailMessage &= 64; + this.wayPoints.clear(); + + boolean somethingTransferred = true; + if (this.ticksExisted % 5 == 0) + { + somethingTransferred = this.emptyInventory(minerBase); + } + this.inventoryDrops = 0; + + // Recharge + if (minerBase.hasEnoughEnergyToRun && this.energyLevel < MAXENERGY) + { + this.energyLevel += 16; + minerBase.storage.extractEnergyGC(minerBase.storage.getMaxExtract(), false); + } + + // When fully charged, set off again + if (this.energyLevel >= MAXENERGY && !somethingTransferred && this.hasHoldSpace()) + { + this.energyLevel = MAXENERGY; + if (this.findNextTarget(minerBase)) + { + this.AIstate = AISTATE_TRAVELLING; + this.wayPoints.add(this.waypointBase.clone()); + this.mineCount = 0; + } else + { + if (this.playerMP != null && (this.givenFailMessage & 64) == 0) + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner6.fail"))); + this.givenFailMessage += 64; + } + } + } + } + + private boolean hasHoldSpace() + { + for (int i = 0; i < this.getSizeInventory(); i++) + { + if (this.stacks.get(i).isEmpty()) + { + return true; + } + } + return false; + } + + private boolean findNextTarget(TileEntityMinerBase minerBase) + { + // If mining has finished, or path has been blocked two or more times, + // try mining elsewhere + if (!this.minePoints.isEmpty() && this.pathBlockedCount < 2) + { + this.posTarget = this.minePoints.getFirst().clone(); + GalacticraftPlanets.logger.debug("Still mining at: " + posTarget.toString() + " Remaining shafts: " + this.minePoints.size()); + return true; + } + + // Target is completely mined: change target + this.posTarget = minerBase.findNextTarget(); + this.pathBlockedCount = 0; + + // No more mining targets, the whole area is mined + if (this.posTarget == null) + { + return false; + } + + GalacticraftPlanets.logger.debug("Miner target: " + posTarget.toString()); + + return true; + } + + /** + * @return True if reached a turning point + */ + private boolean moveToTarget() + { + if (this.energyLevel < this.RETURNENERGY || this.inventoryDrops > this.RETURNDROPS) + { + AIstate = AISTATE_RETURNING; + this.pathBlockedCount = 0; + return true; + } + + if (this.posTarget == null) + { + GalacticraftPlanets.logger.error("AstroMiner missing target: this is a bug."); + AIstate = AISTATE_STUCK; + return true; + } + + if (this.moveToPos(this.posTarget, false)) + { + AIstate = AISTATE_MINING; + wayPoints.add(this.posTarget.clone()); + this.setMinePoints(); + return true; + } + + return false; + } + + private void moveToBase() + { + if (this.wayPoints.size() == 0) + { + // When it gets there: stop and reverse in! + AIstate = AISTATE_DOCKING; + if (this.waypointBase != null) + { + // Teleport back to base in case of any serious problem + this.setPosition(this.waypointBase.x, this.waypointBase.y, this.waypointBase.z); + this.facingAI = this.baseFacing; + } + return; + } + + if (this.moveToPos(this.wayPoints.getLast(), true)) + { + this.wayPoints.removeLast(); + } + } + + private void setMinePoints() + { + // Still some areas left to mine from last visit (maybe it was full or + // out of power?) + if (this.minePoints.size() > 0) + { + return; + } + + BlockVec3 inFront = new BlockVec3(MathHelper.floor(this.posX + 0.5D), MathHelper.floor(this.posY + 1.5D), MathHelper.floor(this.posZ + 0.5D)); + int otherEnd = (this.world.provider instanceof WorldProviderAsteroids) ? this.MINE_LENGTH_AST : this.MINE_LENGTH; + if (this.baseFacing == EnumFacing.NORTH || this.baseFacing == EnumFacing.WEST) + { + otherEnd = -otherEnd; + } + switch (this.baseFacing) + { + case NORTH: + case SOUTH: + this.minePoints.add(inFront.clone().translate(0, 0, otherEnd)); + this.minePoints.add(inFront.clone().translate(4, 0, otherEnd)); + this.minePoints.add(inFront.clone().translate(4, 0, 0)); + this.minePoints.add(inFront.clone().translate(2, 3, 0)); + this.minePoints.add(inFront.clone().translate(2, 3, otherEnd)); + this.minePoints.add(inFront.clone().translate(-2, 3, otherEnd)); + this.minePoints.add(inFront.clone().translate(-2, 3, 0)); + this.minePoints.add(inFront.clone().translate(-4, 0, 0)); + this.minePoints.add(inFront.clone().translate(-4, 0, otherEnd)); + this.minePoints.add(inFront.clone().translate(-2, -3, otherEnd)); + this.minePoints.add(inFront.clone().translate(-2, -3, 0)); + this.minePoints.add(inFront.clone().translate(2, -3, 0)); + this.minePoints.add(inFront.clone().translate(2, -3, otherEnd)); + this.minePoints.add(inFront.clone().translate(0, 0, otherEnd)); + break; + case WEST: + case EAST: + this.minePoints.add(inFront.clone().translate(otherEnd, 0, 0)); + this.minePoints.add(inFront.clone().translate(otherEnd, 0, 4)); + this.minePoints.add(inFront.clone().translate(0, 0, 4)); + this.minePoints.add(inFront.clone().translate(0, 3, 2)); + this.minePoints.add(inFront.clone().translate(otherEnd, 3, 2)); + this.minePoints.add(inFront.clone().translate(otherEnd, 3, -2)); + this.minePoints.add(inFront.clone().translate(0, 3, -2)); + this.minePoints.add(inFront.clone().translate(0, 0, -4)); + this.minePoints.add(inFront.clone().translate(otherEnd, 0, -4)); + this.minePoints.add(inFront.clone().translate(otherEnd, -3, -2)); + this.minePoints.add(inFront.clone().translate(0, -3, -2)); + this.minePoints.add(inFront.clone().translate(0, -3, 2)); + this.minePoints.add(inFront.clone().translate(otherEnd, -3, 2)); + this.minePoints.add(inFront.clone().translate(otherEnd, 0, 0)); + break; + } + } + + /** + * @return True if reached a turning point + */ + private boolean doMining() + { + if (this.energyLevel < this.RETURNENERGY || this.inventoryDrops > this.RETURNDROPS || this.minePoints.size() == 0) + { + if (this.minePoints.size() > 0 && this.minePointCurrent != null) + { + this.minePoints.addFirst(this.minePointCurrent); + } + AIstate = AISTATE_RETURNING; + this.pathBlockedCount = 0; + GalacticraftPlanets.logger.debug("Miner going home: " + this.posBase.toString() + " " + this.minePoints.size() + " shafts still to be mined"); + return true; + } + + if (this.moveToPos(this.minePoints.getFirst(), false)) + { + this.minePointCurrent = this.minePoints.removeFirst(); + GalacticraftPlanets.logger.debug("Miner mid mining: " + this.minePointCurrent.toString() + " " + this.minePoints.size() + " shafts still to be mined"); + return true; + } + return false; + } + + private void tryBackIn() + { + if (this.waypointBase.distanceSquared(new BlockVec3(this)) <= 9.1D) + { + this.AIstate = AISTATE_DOCKING; + switch (this.baseFacing) + { + case NORTH: + this.targetYaw = 180; + break; + case SOUTH: + this.targetYaw = 0; + break; + case WEST: + this.targetYaw = 270; + break; + case EAST: + this.targetYaw = 90; + break; + } + } else + { + this.freeze(FAIL_RETURNPATHBLOCKED); + } + } + + /** + * Mine out the area in front of the miner (dist blocks from miner centre) + * + * @param limit Maximum block count to be mined this tick + * @param dist + * @return True if the mining failed (meaning the miner's path is blocked) + */ + private boolean prepareMove(int limit, int dist) + { + if (this.mineCountDown > 0) + { + this.mineCountDown--; + return false; + } + BlockVec3 inFront = new BlockVec3(MathHelper.floor(this.posX + 0.5D), MathHelper.floor(this.posY + 1.5D), MathHelper.floor(this.posZ + 0.5D)); + if (dist == 2) + { + inFront.translate(headings2[this.facingAI.getIndex()]); + } else + { + if ((this.facingAI.getIndex() & 1) == EnumFacing.DOWN.getIndex()) + { + dist++; + } + if (dist > 0) + { + inFront.translate(headings[this.facingAI.getIndex()].clone().scale(dist)); + } + } + + if (!inFront.equals(this.mineLast) && this.AIstate != AISTATE_ATBASE) + { + this.mineCountDown = 3; + this.mineLast = inFront; + return false; + } + + int x = inFront.x; + int y = inFront.y; + int z = inFront.z; + + // Test not trying to mine own dock! + if (y == this.waypointBase.y && x == this.waypointBase.x - ((this.baseFacing == EnumFacing.EAST) ? 1 : 0) && z == this.waypointBase.z - ((this.baseFacing == EnumFacing.SOUTH) ? 1 : 0)) + { + this.tryBackIn(); + return false; + } + boolean wayBarred = false; + this.tryBlockLimit = limit; + + // Check not obstructed by something immovable e.g. bedrock + // Mine out the 12 blocks in front of it in direction of travel when + // getting close + // There are 12 blocks around ... and 12 in front. One block per tick? + // (That means can move at 5/6 block per second when mining, and 1.67 + // bps when traveling) + BlockPos pos = new BlockPos(x, y, z); + switch (EnumFacing.byIndex(this.facingAI.getIndex() & 6)) + { + case DOWN: + if (tryMineBlock(pos)) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(1, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(1, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, -2))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, -2))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-2, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-2, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, 1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, 1))) + { + wayBarred = true; + } + break; + case NORTH: + if (tryMineBlock(pos.add(0, -2, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, -2, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(1, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-2, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(1, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-2, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos)) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 1, 0))) + { + wayBarred = true; + } + break; + case WEST: + if (tryMineBlock(pos.add(0, -2, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, +1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, -2))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, 1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, -2))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -2, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 1, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos)) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 1, 0))) + { + wayBarred = true; + } + break; + } + + // If it is obstructed, return to base, or stand still if that is + // impossible + if (wayBarred) + { + if (this.playerMP != null && blockingBlock.block != Blocks.AIR) + { + if (blockingBlock.block == Blocks.STONE) + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner1_a.fail") + " " + GCCoreUtil.translate("gui.message.astro_miner1_b.fail"))); + } else + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner1_a.fail") + " " + GCCoreUtil.translate(EntityAstroMiner.blockingBlock.toString()))); + } + } + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + this.tryBlockLimit = 0; + if (this.AIstate == AISTATE_TRAVELLING) + { + this.AIstate = AISTATE_RETURNING; + } else if (AIstate == AISTATE_MINING) + { + this.pathBlockedCount++; + this.AIstate = AISTATE_RETURNING; + } else if (this.AIstate == AISTATE_RETURNING) + { + this.tryBackIn(); + } else + { + this.freeze(FAIL_RETURNPATHBLOCKED); + } + blockingBlock = new BlockTuple(Blocks.AIR, 0); + } + + if (this.tryBlockLimit == limit && !this.noSpeedup) + { + this.motionX *= this.speedup; + this.motionY *= this.speedup; + this.motionZ *= this.speedup; + } + + return wayBarred; + } + + private boolean prepareMoveClient(int limit, int dist) + { + BlockVec3 inFront = new BlockVec3(MathHelper.floor(this.posX + 0.5D), MathHelper.floor(this.posY + 1.5D), MathHelper.floor(this.posZ + 0.5D)); + if (dist == 2) + { + inFront.translate(headings2[this.facing.getIndex()]); + } else + { + if ((this.facing.getIndex() & 1) == EnumFacing.DOWN.getIndex()) + { + dist++; + } + if (dist > 0) + { + inFront.translate(headings[this.facing.getIndex()].clone().scale(dist)); + } + } + if (inFront.equals(this.mineLast)) + { + return false; + } + + int x = inFront.x; + int y = inFront.y; + int z = inFront.z; + + boolean wayBarred = false; + this.tryBlockLimit = limit; + + // Check not obstructed by something immovable e.g. bedrock + // Mine out the 12 blocks in front of it in direction of travel when + // getting close + // There are 12 blocks around ... and 12 in front. One block per tick? + // (That means can move at 5/6 block per second when mining, and 1.67 + // bps when traveling) + BlockPos pos = new BlockPos(x, y, z); + switch (EnumFacing.byIndex(this.facing.getIndex() & 6)) + { + case DOWN: + if (tryBlockClient(pos)) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(1, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(1, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, -2))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, -2))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-2, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-2, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, 1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, 1))) + { + wayBarred = true; + } + break; + case NORTH: + if (tryBlockClient(pos.add(0, -2, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, -2, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(1, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-2, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(1, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-2, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos)) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 1, 0))) + { + wayBarred = true; + } + break; + case WEST: + if (tryBlockClient(pos.add(0, -2, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, +1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, -2))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, 1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, -2))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -2, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 1, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos)) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 1, 0))) + { + wayBarred = true; + } + break; + } + + // If it is obstructed, return to base, or stand still if that is + // impossible + if (wayBarred) + { + this.tryBlockLimit = 0; + } + + if (this.tryBlockLimit == limit) + { + this.mineLast = inFront; + } + + return wayBarred; + } + + private boolean tryMineBlock(BlockPos pos) + { + // Check things to avoid in front of it (see static list for list) + // including base type things + // Can move through liquids including flowing lava + IBlockState state = this.world.getBlockState(pos); + Block b = state.getBlock(); + if (b.getMaterial(state) == Material.AIR) + { + return false; + } + if (noMineList.contains(b)) + { + blockingBlock.block = b; + blockingBlock.meta = b.getMetaFromState(state); + return true; + } + if (b instanceof BlockLiquid) + { + if ((b == Blocks.LAVA || b == Blocks.FLOWING_LAVA) && state.getValue(BlockLiquid.LEVEL) == 0 && this.AIstate != AISTATE_RETURNING) + { + blockingBlock.block = Blocks.LAVA; + blockingBlock.meta = 0; + return true; + } + return false; + } + if (b instanceof IFluidBlock) + { + return false; + } + + boolean gtFlag = false; + if (b != GCBlocks.fallenMeteor) + { + if (b instanceof IPlantable && b != Blocks.TALLGRASS && b != Blocks.DEADBUSH && b != Blocks.DOUBLE_PLANT && b != Blocks.WATERLILY && !(b instanceof BlockFlower) && b != Blocks.REEDS) + { + blockingBlock.block = b; + blockingBlock.meta = b.getMetaFromState(state); + return true; + } + int meta = b.getMetaFromState(state); + if (b.getBlockHardness(state, this.world, pos) < 0) + { + blockingBlock.block = b; + blockingBlock.meta = meta; + return true; + } + if (b.hasTileEntity(state)) + { + if (CompatibilityManager.isGTLoaded() && gregTechCheck(b)) + { + gtFlag = true; + } else + { + blockingBlock.block = b; + blockingBlock.meta = meta; + return true; + } + } + } + + if (this.tryBlockLimit == 0) + { + return false; + } + int result = ForgeHooks.onBlockBreakEvent(this.world, this.playerMP.interactionManager.getGameType(), this.playerMP, pos); + if (result < 0) + { + blockingBlock.block = Blocks.STONE; + blockingBlock.meta = 0; + return true; + } + + this.tryBlockLimit--; + + // Collect the mined block - unless it's a plant or leaves in which case + // just break it + if (!((b instanceof IPlantable && !(b instanceof BlockReed)) || b instanceof BlockLeaves)) + { + ItemStack drops = gtFlag ? getGTDrops(this.world, pos, b) : getPickBlock(this.world, pos, b); + if (drops != null && !this.addToInventory(drops)) + { + // drop itemstack if AstroMiner can't hold it + dropStack(pos, drops); + } + } + + this.world.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); + return false; + } + + private void dropStack(BlockPos pos, ItemStack drops) + { + float f = 0.7F; + double d0 = this.world.rand.nextFloat() * f + (1.0F - f) * 0.5D; + double d1 = this.world.rand.nextFloat() * f + (1.0F - f) * 0.5D; + double d2 = this.world.rand.nextFloat() * f + (1.0F - f) * 0.5D; + EntityItem entityitem = new EntityItem(this.world, pos.getX() + d0, pos.getY() + d1, pos.getZ() + d2, drops); + entityitem.setDefaultPickupDelay(); + this.world.spawnEntity(entityitem); + this.inventoryDrops++; + } + + private boolean gregTechCheck(Block b) + { + Class clazz = CompatibilityManager.classGTOre; + return clazz != null && clazz.isInstance(b); + } + + private ItemStack getGTDrops(World w, BlockPos pos, Block b) + { + List array = b.getDrops(w, pos, b.getDefaultState(), 1); + if (array != null && array.size() > 0) + { + return array.get(0); + } + return ItemStack.EMPTY; + } + + private boolean tryBlockClient(BlockPos pos) + { + BlockVec3 bv = new BlockVec3(pos.getX(), pos.getY(), pos.getZ()); + if (this.laserBlocks.contains(bv)) + { + return false; + } + + // Add minable blocks to the laser fx list + IBlockState state = this.world.getBlockState(pos); + Block b = state.getBlock(); + if (b.getMaterial(state) == Material.AIR) + { + return false; + } + if (noMineList.contains(b)) + { + return true; + } + if (b instanceof BlockLiquid) + { + return false; + } + if (b instanceof IFluidBlock) + { + return false; + } + if (b instanceof IPlantable) + { + return true; + } + if (b.hasTileEntity(state) || b.getBlockHardness(state, this.world, pos) < 0) + { + return true; + } + if (this.tryBlockLimit == 0) + { + return false; + } + + this.tryBlockLimit--; + + this.laserBlocks.add(bv); + this.laserTimes.add(this.ticksExisted); + return false; + } + + public void removeLaserBlocks(int removeCount) + { + for (int i = 0; i < removeCount; i++) + { + this.laserBlocks.removeFirst(); + this.laserTimes.removeFirst(); + } + } + + private ItemStack getPickBlock(World world, BlockPos pos, Block b) + { + if (b == GCBlocks.fallenMeteor) + { + return new ItemStack(GCItems.meteoricIronRaw); + } + if (b instanceof BlockSpaceGlass) + { + return b.getDrops(world, pos, b.getDefaultState(), 0).get(0); + } + + int i = 0; + Item item = Item.getItemFromBlock(b); + + if (item == null) + { + GalacticraftPlanets.logger.info("AstroMiner was unable to mine anything from: " + b.getTranslationKey()); + return null; + } + + if (item.getHasSubtypes()) + { + i = b.getMetaFromState(world.getBlockState(pos)); + } + + return new ItemStack(item, 1, i); + } + + private boolean addToInventory(ItemStack itemstack) + { + boolean flag1 = false; + int k = 0; + int invSize = this.getSizeInventory(); + + ItemStack itemstack1; + + if (itemstack.isStackable()) + { + while (!itemstack.isEmpty() && k < invSize) + { + itemstack1 = this.stacks.get(k); + + if (RecipeUtil.stacksMatch(itemstack, itemstack1)) + { + int l = itemstack1.getCount() + itemstack.getCount(); + + if (l <= itemstack.getMaxStackSize()) + { + itemstack.setCount(0); + itemstack1.setCount(l); + flag1 = true; + } else if (itemstack1.getCount() < itemstack.getMaxStackSize()) + { + itemstack.shrink(itemstack.getMaxStackSize() - itemstack1.getCount()); + itemstack1.setCount(itemstack.getMaxStackSize()); + flag1 = true; + } + } + + ++k; + } + } + + if (!itemstack.isEmpty()) + { + k = 0; + + while (k < invSize) + { + itemstack1 = this.stacks.get(k); + + if (itemstack1.isEmpty()) + { + this.stacks.set(k, itemstack.copy()); + itemstack.setCount(0); + flag1 = true; + break; + } + + ++k; + } + } + + if (flag1) + { + this.markDirty(); + this.mineCount++; + } + return flag1; + } + + /** + * Logic to move the miner to a given position + * + * @param pos + * @param reverse True if returning home (re-use same tunnels) + * @return False while the miner is en route, True when the position is + * reached + */ + private boolean moveToPos(BlockVec3 pos, boolean reverse) + { + this.noSpeedup = false; + + if (reverse != (this.baseFacing.getIndex() < 4)) + { + if (this.posZ > pos.z + 0.0001D || this.posZ < pos.z - 0.0001D) + { + this.moveToPosZ(pos.z, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving Z to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else if (this.posY > pos.y - 0.9999D || this.posY < pos.y - 1.0001D) + { + this.moveToPosY(pos.y - 1, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving Y to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else if (this.posX > pos.x + 0.0001D || this.posX < pos.x - 0.0001D) + { + this.moveToPosX(pos.x, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving X to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else + { + return true; + } + // got there + } else + { + if (this.posX > pos.x + 0.0001D || this.posX < pos.x - 0.0001D) + { + this.moveToPosX(pos.x, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving X to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else if (this.posY > pos.y - 0.9999D || this.posY < pos.y - 1.0001D) + { + this.moveToPosY(pos.y - 1, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving Y to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else if (this.posZ > pos.z + 0.0001D || this.posZ < pos.z - 0.0001D) + { + this.moveToPosZ(pos.z, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving Z to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else + { + return true; + } + // got there + } + + return false; + } + + private void moveToPosX(int x, boolean stopForTurn) + { + this.targetPitch = 0; + + if (this.posX > x) + { + if (this.AIstate != AISTATE_DOCKING) + { + this.targetYaw = 270; + } + this.motionX = -this.speed; + // TODO some acceleration and deceleration + if (this.motionX * speedup <= x - this.posX) + { + this.motionX = x - this.posX; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.WEST; + } else + { + if (this.AIstate != AISTATE_DOCKING) + { + this.targetYaw = 90; + } + this.motionX = this.speed; + if (this.motionX * speedup >= x - this.posX) + { + this.motionX = x - this.posX; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.EAST; + } + + if (stopForTurn) + { + this.motionX = 0; + } + + this.motionY = 0; + this.motionZ = 0; + } + + private void moveToPosY(int y, boolean stopForTurn) + { + if (this.posY > y) + { + this.targetPitch = -90; + this.motionY = -this.speed; + if (this.motionY * speedup <= y - this.posY) + { + this.motionY = y - this.posY; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.DOWN; + } else + { + this.targetPitch = 90; + this.motionY = this.speed; + if (this.motionY * speedup >= y - this.posY) + { + this.motionY = y - this.posY; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.UP; + } + + if (stopForTurn) + { + this.motionY = 0; + } + + this.motionX = 0; + this.motionZ = 0; + } + + private void moveToPosZ(int z, boolean stopForTurn) + { + this.targetPitch = 0; + + if (this.posZ > z) + { + if (this.AIstate != AISTATE_DOCKING) + { + this.targetYaw = 180; + } + this.motionZ = -this.speed; + // TODO some acceleration and deceleration + if (this.motionZ * speedup <= z - this.posZ) + { + this.motionZ = z - this.posZ; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.NORTH; + } else + { + if (this.AIstate != AISTATE_DOCKING) + { + this.targetYaw = 0; + } + this.motionZ = this.speed; + if (this.motionZ * speedup >= z - this.posZ) + { + this.motionZ = z - this.posZ; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.SOUTH; + } + + if (stopForTurn) + { + this.motionZ = 0; + } + + this.motionY = 0; + this.motionX = 0; + } + + private boolean checkRotation() + { + boolean flag = true; + // Handle the turns when it changes direction + if (this.rotationPitch > this.targetPitch + 0.001F || this.rotationPitch < this.targetPitch - 0.001F) + { + if (this.rotationPitch > this.targetPitch + 180) + { + this.rotationPitch -= 360; + } else if (this.rotationPitch < this.targetPitch - 180) + { + this.rotationPitch += 360; + } + + if (this.rotationPitch > this.targetPitch) + { + this.rotationPitch -= this.rotSpeed; + if (this.rotationPitch < this.targetPitch) + { + this.rotationPitch = this.targetPitch; + } + } else + { + this.rotationPitch += this.rotSpeed; + if (this.rotationPitch > this.targetPitch) + { + this.rotationPitch = this.targetPitch; + } + } + } + + if (this.rotationYaw > this.targetYaw + 0.001F || this.rotationYaw < this.targetYaw - 0.001F) + { + if (this.rotationYaw > this.targetYaw + 180) + { + this.rotationYaw -= 360; + } else if (this.rotationYaw < this.targetYaw - 180) + { + this.rotationYaw += 360; + } + + if (this.rotationYaw > this.targetYaw) + { + this.rotationYaw -= this.rotSpeed; + if (this.rotationYaw < this.targetYaw) + { + this.rotationYaw = this.targetYaw; + } + } else + { + this.rotationYaw += this.rotSpeed; + if (this.rotationYaw > this.targetYaw) + { + this.rotationYaw = this.targetYaw; + } + } + flag = false; + } + + return flag; + } + + /** + * x y z should be the mid-point of the 4 base blocks + * + * @param world + * @param x + * @param y + * @param z + * @param facing + * @param base + * @return + */ + public static boolean spawnMinerAtBase(World world, int x, int y, int z, EnumFacing facing, BlockVec3 base, EntityPlayerMP player) + { + if (world.isRemote) + { + return true; + } + final EntityAstroMiner miner = new EntityAstroMiner(world, NonNullList.withSize(EntityAstroMiner.INV_SIZE, ItemStack.EMPTY), 0); + miner.setPlayer(player); + if (player.capabilities.isCreativeMode) + { + miner.spawnedInCreative = true; + } + miner.waypointBase = new BlockVec3(x, y, z).modifyPositionFromSide(facing, 1); + miner.setPosition(miner.waypointBase.x, miner.waypointBase.y - 1, miner.waypointBase.z); + miner.baseFacing = facing; + miner.facingAI = facing; + miner.lastFacing = facing; + miner.motionX = 0; + miner.motionY = 0; + miner.motionZ = 0; + miner.targetPitch = 0; + switch (facing) + { + case NORTH: + miner.targetYaw = 180; + break; + case SOUTH: + miner.targetYaw = 0; + break; + case WEST: + miner.targetYaw = 270; + break; + case EAST: + miner.targetYaw = 90; + break; + } + miner.rotationPitch = miner.targetPitch; + miner.rotationYaw = miner.targetYaw; + miner.setBoundingBoxForFacing(); + miner.AIstate = AISTATE_ATBASE; + miner.posBase = base; + + // Increase motion speed when moving in empty space between asteroids + miner.speedup = (world.provider instanceof WorldProviderAsteroids) ? SPEEDUP * 2.2D : SPEEDUP; + + // Clear blocks, and test to see if its movement area in front of the + // base is blocked + if (miner.prepareMove(12, 0)) + { + miner.isDead = true; + return false; + } + if (miner.prepareMove(12, 1)) + { + miner.isDead = true; + return false; + } + if (miner.prepareMove(12, 2)) + { + miner.isDead = true; + return false; + } + + world.spawnEntity(miner); + miner.flagLink = true; + return true; + } + + public void setPlayer(EntityPlayerMP player) + { + this.playerMP = player; + this.playerUUID = player.getUniqueID(); + } + + private void setBoundingBoxForFacing() + { + float xsize = cWIDTH; + float ysize = cWIDTH; + float zsize = cWIDTH; + switch (this.facing) + { + case DOWN: + case UP: + ysize = cLENGTH; + break; + case NORTH: + case SOUTH: + ysize = cHEIGHT; + zsize = cLENGTH; + break; + case WEST: + case EAST: + ysize = cHEIGHT; + xsize = cLENGTH; + break; + } + this.width = Math.max(xsize, zsize); + this.height = ysize; + this.setEntityBoundingBox( + new AxisAlignedBB(this.posX - xsize / 2D, this.posY + 1D - ysize / 2D, this.posZ - zsize / 2D, this.posX + xsize / 2D, this.posY + 1D + ysize / 2D, this.posZ + zsize / 2D)); + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + if (this.isDead || par1DamageSource.equals(DamageSource.CACTUS)) + { + return true; + } + + if (!this.world.isRemote) + { + Entity e = par1DamageSource.getTrueSource(); + + // If creative mode player, kill the entity (even if player owner is + // offline) and drop nothing + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + if (this.playerMP == null && !this.spawnedInCreative) + { + ((EntityPlayer) e).sendMessage(new TextComponentString("WARNING: that Astro Miner belonged to an offline player, cannot reset player's Astro Miner count.")); + } + this.setDead(); + return true; + } + + // Invulnerable to mobs + if (this.isEntityInvulnerable() || (e instanceof EntityLivingBase && !(e instanceof EntityPlayer))) + { + return false; + } else + { + this.markVelocityChanged(); +// this.dataManager.set(this.timeSinceHit, Integer.valueOf(10)); +// this.dataManager.set(this.currentDamage, Integer.valueOf((int) (this.dataManager.get(this.currentDamage) + par2 * 10))); + this.shipDamage += par2 * 10; + + if (e instanceof EntityPlayer) + { + this.shipDamage += par2 * 21; +// this.dataManager.set(this.currentDamage, 100); + } + + if (this.shipDamage > 90) + { + this.setDead(); + this.dropShipAsItem(); + return true; + } + + return true; + } + } else + { + return true; + } + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; // AstroMiners aren't stopped by any other entity + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return this.getEntityBoundingBox().shrink(0.1D); + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public void performHurtAnimation() + { +// this.dataManager.set(this.timeSinceHit, Integer.valueOf(10)); +// this.dataManager.set(this.currentDamage, Integer.valueOf(this.dataManager.get(this.currentDamage) * 5)); + } + + public float getDamage() + { + return this.dataManager.get(DAMAGE); + } + + public void setDamage(float p_70492_1_) + { + this.dataManager.set(DAMAGE, Float.valueOf(p_70492_1_)); + } + + @Override + public void setLocationAndAngles(double x, double y, double z, float rotYaw, float rotPitch) + { + this.minecartX = x; + this.minecartY = y; + this.minecartZ = z; + super.setLocationAndAngles(x, y, z, rotYaw, rotPitch); + } + + @SideOnly(Side.CLIENT) + @Override + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + this.minecartX = x; + this.minecartY = y; + this.minecartZ = z; + this.minecartYaw = y; + this.minecartPitch = pitch; + this.turnProgress = 0; + this.motionX = this.velocityX; + this.motionY = this.velocityY; + this.motionZ = this.velocityZ; + } + + @Override + @SideOnly(Side.CLIENT) + public void setVelocity(double p_70016_1_, double p_70016_3_, double p_70016_5_) + { + this.velocityX = this.motionX = p_70016_1_; + this.velocityY = this.motionY = p_70016_3_; + this.velocityZ = this.motionZ = p_70016_5_; + this.turnProgress = 0; + } + + @Override + protected void setSize(float p_70105_1_, float p_70105_2_) + { + this.setBoundingBoxForFacing(); + } + + @Override + public void setPosition(double p_70107_1_, double p_70107_3_, double p_70107_5_) + { + this.setEntityBoundingBox(this.getEntityBoundingBox().offset(p_70107_1_ - this.posX, p_70107_3_ - this.posY, p_70107_5_ - this.posZ)); + this.posX = p_70107_1_; + this.posY = p_70107_3_; + this.posZ = p_70107_5_; + } + + @Override + public void setDead() + { + if (!this.world.isRemote && this.playerMP != null) + { + GCPlayerStats stats = GCPlayerStats.get(this.playerMP); + if (!this.spawnedInCreative) + { + int astroCount = stats.getAstroMinerCount(); + if (astroCount > 0) + { + stats.setAstroMinerCount(stats.getAstroMinerCount() - 1); + } + } + AsteroidsTickHandlerServer.removeChunkData(stats, this); + } + + super.setDead(); + if (posBase != null) + { + TileEntity tileEntity = posBase.getTileEntity(this.world); + if (tileEntity instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tileEntity).unlinkMiner(); + } + } + + if (this.soundUpdater != null) + { + this.soundUpdater.update(); + } + } + + public boolean isEntityInvulnerable() + { + // Can't be damaged if its player is offline - it's in a fully dormant + // state + return this.playerMP == null; + } + + public List getItemsDropped(List droppedItems) + { + ItemStack rocket = new ItemStack(AsteroidsItems.astroMiner, 1, 0); + droppedItems.add(rocket); + for (int i = 0; i < this.stacks.size(); i++) + { + if (!this.stacks.get(i).isEmpty()) + { + droppedItems.add(this.stacks.get(i)); + } + this.stacks.set(i, ItemStack.EMPTY); + } + return droppedItems; + } + + public void dropShipAsItem() + { + if (this.world.isRemote) + { + return; + } + + for (final ItemStack item : this.getItemsDropped(new ArrayList())) + { + EntityItem entityItem = this.entityDropItem(item, 0); + + if (item.hasTagCompound()) + { + entityItem.getItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public ITickable getSoundUpdater() + { + return this.soundUpdater; + } + + @Override + @SideOnly(Side.CLIENT) + public ISound setSoundUpdater(EntityPlayerSP player) + { + this.soundUpdater = new SoundUpdaterMiner(player, this); + return (ISound) this.soundUpdater; + } + + public void stopRocketSound() + { + if (this.soundUpdater != null) + { + ((SoundUpdaterMiner) this.soundUpdater).stopRocketSound(); + } + this.soundToStop = false; + } + + @Override + public void transmitData(int[] data) + { + data[0] = (int) (this.posX); + data[1] = (int) (this.posY); + data[2] = (int) (this.posZ); + data[3] = this.energyLevel; + data[4] = this.AIstate; + } + + @Override + public void receiveData(int[] data, String[] str) + { + str[0] = ""; + str[1] = "x: " + data[0]; + str[2] = "y: " + data[1]; + str[3] = "z: " + data[2]; + int energyPerCent = data[3] / 120; + str[4] = GCCoreUtil.translate("gui.energy_storage.desc.1") + ": " + energyPerCent + "%"; + switch (data[4]) + { + case EntityAstroMiner.AISTATE_STUCK: + str[0] = GCCoreUtil.translate("gui.message.no_energy.name"); + break; + case EntityAstroMiner.AISTATE_ATBASE: + str[0] = GCCoreUtil.translate("gui.miner.docked"); + break; + case EntityAstroMiner.AISTATE_TRAVELLING: + str[0] = GCCoreUtil.translate("gui.miner.travelling"); + break; + case EntityAstroMiner.AISTATE_MINING: + str[0] = GCCoreUtil.translate("gui.miner.mining"); + break; + case EntityAstroMiner.AISTATE_RETURNING: + str[0] = GCCoreUtil.translate("gui.miner.returning"); + break; + case EntityAstroMiner.AISTATE_DOCKING: + str[0] = GCCoreUtil.translate("gui.miner.docking"); + break; + case EntityAstroMiner.AISTATE_OFFLINE: + str[0] = GCCoreUtil.translate("gui.miner.offline"); + break; + } + } + + @Override + public void adjustDisplay(int[] data) + { + GL11.glScalef(0.9F, 0.9F, 0.9F); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.stacks = NonNullList.withSize(INV_SIZE, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.stacks); + int itemCount = 0; + for (ItemStack stack : this.stacks) + { + itemCount += stack.getCount(); + } + this.mineCount = itemCount; + + if (nbt.hasKey("sindex")) + { + this.serverIndex = nbt.getInteger("sindex"); + } else + { + this.serverIndex = -1; + } + + if (nbt.hasKey("Energy")) + { + this.energyLevel = nbt.getInteger("Energy"); + } + if (nbt.hasKey("BaseX")) + { + this.posBase = new BlockVec3(nbt.getInteger("BaseX"), nbt.getInteger("BaseY"), nbt.getInteger("BaseZ")); + this.flagLink = true; + } + if (nbt.hasKey("TargetX")) + { + this.posTarget = new BlockVec3(nbt.getInteger("TargetX"), nbt.getInteger("TargetY"), nbt.getInteger("TargetZ")); + } + if (nbt.hasKey("WBaseX")) + { + this.waypointBase = new BlockVec3(nbt.getInteger("WBaseX"), nbt.getInteger("WBaseY"), nbt.getInteger("WBaseZ")); + } + if (nbt.hasKey("BaseFacing")) + { + this.baseFacing = EnumFacing.byIndex(nbt.getInteger("BaseFacing")); + } + if (nbt.hasKey("AIState")) + { + this.AIstate = nbt.getInteger("AIState"); + } + if (nbt.hasKey("Facing")) + { + this.facingAI = EnumFacing.byIndex(nbt.getInteger("Facing")); + switch (this.facingAI) + { + case NORTH: + this.targetYaw = 180; + break; + case SOUTH: + this.targetYaw = 0; + break; + case WEST: + this.targetYaw = 270; + break; + case EAST: + this.targetYaw = 90; + break; + } + } + this.lastFacing = null; + if (nbt.hasKey("WayPoints")) + { + this.wayPoints.clear(); + final NBTTagList wpList = nbt.getTagList("WayPoints", 10); + for (int j = 0; j < wpList.tagCount(); j++) + { + NBTTagCompound bvTag = wpList.getCompoundTagAt(j); + this.wayPoints.add(BlockVec3.readFromNBT(bvTag)); + } + } + if (nbt.hasKey("MinePoints")) + { + this.minePoints.clear(); + final NBTTagList mpList = nbt.getTagList("MinePoints", 10); + for (int j = 0; j < mpList.tagCount(); j++) + { + NBTTagCompound bvTag = mpList.getCompoundTagAt(j); + this.minePoints.add(BlockVec3.readFromNBT(bvTag)); + } + } + if (nbt.hasKey("MinePointCurrent")) + { + this.minePointCurrent = BlockVec3.readFromNBT(nbt.getCompoundTag("MinePointCurrent")); + } else + { + this.minePointCurrent = null; + } + if (nbt.hasKey("playerUUIDMost", 4) && nbt.hasKey("playerUUIDLeast", 4)) + { + this.playerUUID = new UUID(nbt.getLong("playerUUIDMost"), nbt.getLong("playerUUIDLeast")); + } else + { + this.playerUUID = null; + } + if (nbt.hasKey("speedup")) + { + this.speedup = nbt.getDouble("speedup"); + } else + { + this.speedup = (WorldUtil.getProviderForDimensionServer(this.dimension) instanceof WorldProviderAsteroids) ? SPEEDUP * 1.6D : SPEEDUP; + } + + this.pathBlockedCount = nbt.getInteger("pathBlockedCount"); + this.spawnedInCreative = nbt.getBoolean("spawnedInCreative"); + this.flagCheckPlayer = true; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + final NBTTagList var2 = new NBTTagList(); + + ItemStackHelper.saveAllItems(nbt, this.stacks); + + nbt.setTag("Items", var2); + nbt.setInteger("sindex", this.serverIndex); + nbt.setInteger("Energy", this.energyLevel); + if (this.posBase != null) + { + nbt.setInteger("BaseX", this.posBase.x); + nbt.setInteger("BaseY", this.posBase.y); + nbt.setInteger("BaseZ", this.posBase.z); + } + if (this.posTarget != null) + { + nbt.setInteger("TargetX", this.posTarget.x); + nbt.setInteger("TargetY", this.posTarget.y); + nbt.setInteger("TargetZ", this.posTarget.z); + } + if (this.waypointBase != null) + { + nbt.setInteger("WBaseX", this.waypointBase.x); + nbt.setInteger("WBaseY", this.waypointBase.y); + nbt.setInteger("WBaseZ", this.waypointBase.z); + } + nbt.setInteger("BaseFacing", this.baseFacing.getIndex()); + nbt.setInteger("AIState", this.AIstate); + nbt.setInteger("Facing", this.facingAI.getIndex()); + if (this.wayPoints.size() > 0) + { + NBTTagList wpList = new NBTTagList(); + for (int j = 0; j < this.wayPoints.size(); j++) + { + wpList.appendTag(this.wayPoints.get(j).writeToNBT(new NBTTagCompound())); + } + nbt.setTag("WayPoints", wpList); + } + if (this.minePoints.size() > 0) + { + NBTTagList mpList = new NBTTagList(); + for (int j = 0; j < this.minePoints.size(); j++) + { + mpList.appendTag(this.minePoints.get(j).writeToNBT(new NBTTagCompound())); + } + nbt.setTag("MinePoints", mpList); + } + if (this.minePointCurrent != null) + { + nbt.setTag("MinePointCurrent", this.minePointCurrent.writeToNBT(new NBTTagCompound())); + } + if (this.playerUUID != null) + { + nbt.setLong("playerUUIDMost", this.playerUUID.getMostSignificantBits()); + nbt.setLong("playerUUIDLeast", this.playerUUID.getLeastSignificantBits()); + } + nbt.setDouble("speedup", this.speedup); + nbt.setInteger("pathBlockedCount", this.pathBlockedCount); + nbt.setBoolean("spawnedInCreative", this.spawnedInCreative); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityEntryPod.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityEntryPod.java new file mode 100644 index 00000000..7ecd2f25 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityEntryPod.java @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import java.util.Map; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.entities.IScaleableFuelLevel; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityEntryPod extends EntityLanderBase implements IScaleableFuelLevel, ICameraZoomEntity, IIgnoreShift +{ + + public EntityEntryPod(World var1) + { + super(var1); + this.setSize(1.5F, 3.0F); + } + + public EntityEntryPod(EntityPlayerMP player) + { + super(player, 0.0F); + this.setSize(1.5F, 3.0F); + } + + @Override + public double getInitialMotionY() + { + return -0.5F; + } + + @Override + public double getMountedYOffset() + { + return this.height - 2.0D; + } + + @Override + public float getRotateOffset() + { + // Signal no rotate + return -20.0F; + } + + @Override + public boolean shouldSpawnParticles() + { + return false; + } + + @Override + public Map getParticleMap() + { + return null; + } + + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + return null; + } + + @Override + public void tickOnGround() + { + + } + + @Override + public void tickInAir() + { + super.tickInAir(); + + if (this.world.isRemote) + { + if (!this.onGround) + { + this.motionY -= 0.002D; + } + } + } + + @Override + public void onGroundHit() + { + BlockPos pos = new BlockPos(this).up(2); + this.world.setBlockState(pos, GCBlocks.brightAir.getDefaultState(), 2); + } + + @Override + public Vector3 getMotionVec() + { + if (this.onGround) + { + return new Vector3(0, 0, 0); + } + + if (this.ticks >= 40 && this.ticks < 45) + { + this.motionY = this.getInitialMotionY(); + } + + return new Vector3(this.motionX, this.motionY, this.motionZ); + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public boolean pressKey(int key) + { + return false; + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.entry_pod.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return null; + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (!this.onGround) + { + return false; + } + + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + return true; + } + + if (this.getPassengers().isEmpty() && player instanceof EntityPlayerMP) + { + GCCoreUtil.openParachestInv((EntityPlayerMP) player, this); + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + return true; + } else + { + return true; + } + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return !this.onGround; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityGrapple.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityGrapple.java new file mode 100644 index 00000000..2f16d6c5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityGrapple.java @@ -0,0 +1,582 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import java.util.List; +import java.util.Objects; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.network.PacketSimpleAsteroids; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityGrapple extends Entity implements IProjectile +{ + + private static final DataParameter PULLING_ENTITY_ID = EntityDataManager.createKey(EntityGrapple.class, DataSerializers.VARINT); + private static final DataParameter IS_PULLING = EntityDataManager.createKey(EntityGrapple.class, DataSerializers.BOOLEAN); + private static final DataParameter STRING_ITEM_STACK = EntityDataManager.createKey(EntityGrapple.class, DataSerializers.ITEM_STACK); + private BlockPos hitVec; + private Block hitBlock; + private int inData; + private boolean inGround; + public int canBePickedUp; + public int arrowShake; + public EntityPlayer shootingEntity; + private int ticksInGround; + private int ticksInAir; + public float rotationRoll; + public float prevRotationRoll; + public boolean pullingPlayer; + + public EntityGrapple(World par1World) + { + super(par1World); + this.ignoreFrustumCheck = false; +// this.yOffset = -1.5F; + this.setSize(0.75F, 0.75F); + } + + public EntityGrapple(World par1World, EntityPlayer shootingEntity, float par3, ItemStack stringStack) + { + super(par1World); + this.shootingEntity = shootingEntity; + this.setSize(0.75F, 0.75F); + + if (shootingEntity != null) + { + this.canBePickedUp = 1; + this.setLocationAndAngles(shootingEntity.posX, shootingEntity.posY + shootingEntity.getEyeHeight(), shootingEntity.posZ, shootingEntity.rotationYaw, shootingEntity.rotationPitch); + } + + this.motionX = -MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.motionZ = MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.motionY = -MathHelper.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; +// this.yOffset = -1.5F; + this.setPosition(this.posX, this.posY, this.posZ); + this.shoot(this.motionX, this.motionY, this.motionZ, par3 * 1.5F, 1.0F); + this.updateStringStack(stringStack); + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 10.0; + return distance < d0 * d0; + } + + @Override + public double getYOffset() + { + return -1.5F; + } + + @Override + protected void entityInit() + { + this.dataManager.register(PULLING_ENTITY_ID, 0); + this.dataManager.register(IS_PULLING, false); + this.dataManager.register(STRING_ITEM_STACK, new ItemStack(Items.STRING)); + } + + @Override + public void shoot(double par1, double par3, double par5, float par7, float par8) + { + float f2 = MathHelper.sqrt(par1 * par1 + par3 * par3 + par5 * par5); + par1 /= f2; + par3 /= f2; + par5 /= f2; + par1 += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * par8; + par3 += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * par8; + par5 += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * par8; + par1 *= par7; + par3 *= par7; + par5 *= par7; + this.motionX = par1; + this.motionY = par3; + this.motionZ = par5; + float f3 = MathHelper.sqrt(par1 * par1 + par5 * par5); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(par1, par5) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(par3, f3) * Constants.RADIANS_TO_DEGREES; + this.ticksInGround = 0; + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + } + + @Override + public void setPosition(double x, double y, double z) + { + super.setPosition(x, y, z); + } + + @Override + @SideOnly(Side.CLIENT) + public void setVelocity(double par1, double par3, double par5) + { + this.motionX = par1; + this.motionY = par3; + this.motionZ = par5; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(par1 * par1 + par5 * par5); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(par1, par5) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(par3, f) * Constants.RADIANS_TO_DEGREES; + this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.ticksInGround = 0; + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + this.prevRotationRoll = this.rotationRoll; + + if (!this.world.isRemote) + { + this.updateShootingEntity(); + + if (this.getPullingEntity()) + { + EntityPlayer shootingEntity = this.getShootingEntity(); + if (shootingEntity != null) + { + double deltaPosition = this.getDistanceSq(shootingEntity); + + Vector3 mot = new Vector3(shootingEntity.motionX, shootingEntity.motionY, shootingEntity.motionZ); + + if (mot.getMagnitudeSquared() < 0.01 && this.pullingPlayer) + { + if (deltaPosition < 10) + { + this.onCollideWithPlayer(shootingEntity); + } + this.updatePullingEntity(false); + this.setDead(); + } + + this.pullingPlayer = true; + } + } + } else + { + if (this.getPullingEntity()) + { + EntityPlayer shootingEntity = this.getShootingEntity(); + if (shootingEntity != null) + { + shootingEntity.setVelocity((this.posX - shootingEntity.posX) / 12.0F, (this.posY - shootingEntity.posY) / 12.0F, (this.posZ - shootingEntity.posZ) / 12.0F); + if (shootingEntity.world.isRemote && shootingEntity.world.provider instanceof IZeroGDimension) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(shootingEntity); + if (stats != null) + { + stats.getFreefallHandler().updateFreefall(shootingEntity); + } + } + } + } + } + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(this.motionY, f) * Constants.RADIANS_TO_DEGREES; + } + + if (this.hitVec != null) + { + IBlockState state = this.world.getBlockState(this.hitVec); + + if (state.getMaterial() != Material.AIR) + { + AxisAlignedBB axisalignedbb = state.getBlock().getCollisionBoundingBox(state, this.world, this.hitVec); + + if (axisalignedbb != null && axisalignedbb.contains(new Vec3d(this.posX, this.posY, this.posZ))) + { + this.inGround = true; + } + } + } + + if (this.arrowShake > 0) + { + --this.arrowShake; + } + + if (this.inGround) + { + if (this.hitVec != null) + { + IBlockState state = this.world.getBlockState(this.hitVec); + Block block = state.getBlock(); + int j = block.getMetaFromState(state); + + if (block == this.hitBlock && j == this.inData) + { + if (this.shootingEntity != null) + { + this.shootingEntity.motionX = (this.posX - this.shootingEntity.posX) / 16.0F; + this.shootingEntity.motionY = (this.posY - this.shootingEntity.posY) / 16.0F; + this.shootingEntity.motionZ = (this.posZ - this.shootingEntity.posZ) / 16.0F; + if (this.shootingEntity instanceof EntityPlayerMP) + GalacticraftCore.handler.preventFlyingKicks((EntityPlayerMP) this.shootingEntity); + } + + if (!this.world.isRemote && this.ticksInGround < 5) + { + this.updatePullingEntity(true); + } + + ++this.ticksInGround; + + if (this.ticksInGround == 1200) + { + this.setDead(); + } + } else + { + this.inGround = false; + this.motionX *= this.rand.nextFloat() * 0.2F; + this.motionY *= this.rand.nextFloat() * 0.2F; + this.motionZ *= this.rand.nextFloat() * 0.2F; + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } + } else + { + this.rotationRoll += 5; + ++this.ticksInAir; + + if (!this.world.isRemote) + { + this.updatePullingEntity(false); + } + + if (this.shootingEntity != null && this.getDistanceSq(this.shootingEntity) >= 40 * 40) + { + this.setDead(); + } + + Vec3d vec31 = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec3 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult movingobjectposition = this.world.rayTraceBlocks(vec31, vec3, false, true, false); + vec31 = new Vec3d(this.posX, this.posY, this.posZ); + vec3 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (movingobjectposition != null) + { + vec3 = new Vec3d(movingobjectposition.hitVec.x, movingobjectposition.hitVec.y, movingobjectposition.hitVec.z); + } + + Entity entity = null; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D, 1.0D, 1.0D)); + double d0 = 0.0D; + int i; + final double border = 0.3D; + + for (i = 0; i < list.size(); ++i) + { + Entity entity1 = list.get(i); + + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) + { + AxisAlignedBB axisalignedbb1 = entity1.getEntityBoundingBox().grow(border, border, border); + RayTraceResult movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3); + + if (movingobjectposition1 != null) + { + double d1 = vec31.distanceTo(movingobjectposition1.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) + { + movingobjectposition = new RayTraceResult(entity); + } + + if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer) movingobjectposition.entityHit; + + if (entityplayer.capabilities.disableDamage || this.shootingEntity != null && !this.shootingEntity.canAttackPlayer(entityplayer)) + { + movingobjectposition = null; + } + } + + float motion; + + if (movingobjectposition != null) + { + if (movingobjectposition.entityHit == null) + { + this.hitVec = movingobjectposition.getBlockPos(); + IBlockState state = this.world.getBlockState(this.hitVec); + this.hitBlock = state.getBlock(); + this.inData = state.getBlock().getMetaFromState(state); + this.motionX = (float) (movingobjectposition.hitVec.x - this.posX); + this.motionY = (float) (movingobjectposition.hitVec.y - this.posY); + this.motionZ = (float) (movingobjectposition.hitVec.z - this.posZ); + motion = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / motion * 0.05000000074505806D; + this.posY -= this.motionY / motion * 0.05000000074505806D; + this.posZ -= this.motionZ / motion * 0.05000000074505806D; + this.playSound(SoundEvents.ENTITY_ARROW_HIT, 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + + if (this.hitBlock.getMaterial(state) != Material.AIR) + { + this.hitBlock.onEntityCollision(this.world, this.hitVec, state, this); + } + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + motion = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float) Math.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + this.rotationPitch = (float) Math.atan2(this.motionY, motion) * Constants.RADIANS_TO_DEGREES; + + while (this.rotationPitch - this.prevRotationPitch < -180.0F) + { + this.prevRotationPitch -= 360.0F; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + + if (this.isInWater()) + { + float f4 = 0.25F; + for (int l = 0; l < 4; ++l) + { + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * f4, this.posY - this.motionY * f4, this.posZ - this.motionZ * f4, this.motionX, this.motionY, + this.motionZ); + } + + } + + if (this.isWet()) + { + this.extinguish(); + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.doBlockCollisions(); + } + + if (!this.world.isRemote && (this.ticksInGround - 1) % 10 == 0) + { + GalacticraftCore.packetPipeline + .sendToAllAround(new PacketSimpleAsteroids(PacketSimpleAsteroids.EnumSimplePacketAsteroids.C_UPDATE_GRAPPLE_POS, GCCoreUtil.getDimensionID(this.world), new Object[] + {this.getEntityId(), new Vector3(this)}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 150)); + } + } + + @Override + public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + if (this.hitVec != null) + { + par1NBTTagCompound.setShort("xTile", (short) this.hitVec.getX()); + par1NBTTagCompound.setShort("yTile", (short) this.hitVec.getY()); + par1NBTTagCompound.setShort("zTile", (short) this.hitVec.getZ()); + } + par1NBTTagCompound.setShort("life", (short) this.ticksInGround); + par1NBTTagCompound.setByte("inTile", (byte) Block.getIdFromBlock(this.hitBlock)); + par1NBTTagCompound.setByte("inData", (byte) this.inData); + par1NBTTagCompound.setByte("shake", (byte) this.arrowShake); + par1NBTTagCompound.setByte("inGround", (byte) (this.inGround ? 1 : 0)); + par1NBTTagCompound.setByte("pickup", (byte) this.canBePickedUp); + par1NBTTagCompound.setString("stringStack", Objects.requireNonNull(getStringItemStack().getItem().getRegistryName()).toString()); + } + + @Override + public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + if (par1NBTTagCompound.hasKey("xTile")) + { + this.hitVec = new BlockPos(par1NBTTagCompound.getShort("xTile"), par1NBTTagCompound.getShort("yTile"), par1NBTTagCompound.getShort("zTile")); + } + + this.ticksInGround = par1NBTTagCompound.getShort("life"); + this.hitBlock = Block.getBlockById(par1NBTTagCompound.getByte("inTile") & 255); + this.inData = par1NBTTagCompound.getByte("inData") & 255; + this.arrowShake = par1NBTTagCompound.getByte("shake") & 255; + this.inGround = par1NBTTagCompound.getByte("inGround") == 1; + + if (par1NBTTagCompound.hasKey("pickup", 99)) + { + this.canBePickedUp = par1NBTTagCompound.getByte("pickup"); + } else if (par1NBTTagCompound.hasKey("player", 99)) + { + this.canBePickedUp = par1NBTTagCompound.getBoolean("player") ? 1 : 0; + } + + if (par1NBTTagCompound.hasKey("stringStack")) + { + this.updateStringStack(new ItemStack(Objects.requireNonNull(ForgeRegistries.ITEMS.getValue(new ResourceLocation(par1NBTTagCompound.getString("stringStack")))))); + } else + { + this.updateStringStack(new ItemStack(Items.STRING)); + } + } + + @Override + public void onCollideWithPlayer(EntityPlayer entityPlayer) + { + if (!this.world.isRemote && this.inGround && this.arrowShake <= 0) + { + boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && entityPlayer.capabilities.isCreativeMode; + + if (this.canBePickedUp == 1 && getStringItemStack() != ItemStack.EMPTY && !entityPlayer.inventory.addItemStackToInventory(getStringItemStack())) + { + flag = false; + } + + if (flag) + { + this.playSound(SoundEvents.ENTITY_ITEM_PICKUP, 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + entityPlayer.onItemPickup(this, 1); + this.setDead(); + } + } + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + +// @Override +// @SideOnly(Side.CLIENT) +// public float getShadowSize() +// { +// return 0.0F; +// } + + @Override + public boolean canBeAttackedWithItem() + { + return false; + } + + private void updateShootingEntity() + { + if (this.shootingEntity != null) + { + this.dataManager.set(PULLING_ENTITY_ID, this.shootingEntity.getEntityId()); + } + } + + public EntityPlayer getShootingEntity() + { + Entity entity = this.world.getEntityByID(this.dataManager.get(PULLING_ENTITY_ID)); + + if (entity instanceof EntityPlayer) + { + return (EntityPlayer) entity; + } + + return null; + } + + public void updatePullingEntity(boolean pulling) + { + this.dataManager.set(IS_PULLING, pulling); + } + + public void updateStringStack(ItemStack stringStack) + { + this.dataManager.set(STRING_ITEM_STACK, stringStack); + } + + public boolean getPullingEntity() + { + return this.dataManager.get(IS_PULLING); + } + + public ItemStack getStringItemStack() + { + return this.dataManager.get(STRING_ITEM_STACK); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntitySmallAsteroid.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntitySmallAsteroid.java new file mode 100644 index 00000000..47a4e30c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntitySmallAsteroid.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.world.World; + +public class EntitySmallAsteroid extends Entity +{ + + private static final DataParameter SPIN_PITCH = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.FLOAT); + private static final DataParameter SPIN_YAW = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.FLOAT); + private static final DataParameter ASTEROID_TYPE = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.VARINT); + public float spinPitch; + public float spinYaw; + public int type; + private boolean firstUpdate = true; + + public EntitySmallAsteroid(World world) + { + super(world); + this.setSize(1.0F, 1.0F); + this.isImmuneToFire = true; + } + + @Override + public void onEntityUpdate() + { + if (!this.firstUpdate) + { + // Kill non-moving entities + if (Math.abs(this.posX - this.prevPosX) + Math.abs(this.posZ - this.prevPosZ) <= 0) + { + this.setDead(); + } + + // Remove entities far outside the build range, or too old (to stop + // accumulations) + else if (this.posY > 288D || this.posY < -32D || this.ticksExisted > 3000) + { + this.setDead(); + } + } + + super.onEntityUpdate(); + + if (!this.world.isRemote) + { + this.setSpinPitch(this.spinPitch); + this.setSpinYaw(this.spinYaw); + this.setAsteroidType(this.type); + this.rotationPitch += this.spinPitch; + this.rotationYaw += this.spinYaw; + } else + { + this.rotationPitch += this.getSpinPitch(); + this.rotationYaw += this.getSpinYaw(); + } + + double sqrdMotion = this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ; + + if (sqrdMotion < 0.05) + { + // If the motion is too low (for some odd reason), speed it back up + // slowly. + this.motionX *= 1.001D; + this.motionY *= 1.001D; + this.motionZ *= 1.001D; + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.firstUpdate = false; + } + + @Override + protected void entityInit() + { + this.dataManager.register(SPIN_PITCH, 0.0F); + this.dataManager.register(SPIN_YAW, 0.0F); + this.dataManager.register(ASTEROID_TYPE, 0); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + return compound; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + } + + public float getSpinPitch() + { + return this.dataManager.get(SPIN_PITCH); + } + + public float getSpinYaw() + { + return this.dataManager.get(SPIN_YAW); + } + + public void setSpinPitch(float pitch) + { + this.dataManager.set(SPIN_PITCH, pitch); + } + + public void setSpinYaw(float yaw) + { + this.dataManager.set(SPIN_YAW, yaw); + } + + public int getAsteroidType() + { + return this.dataManager.get(ASTEROID_TYPE); + } + + public void setAsteroidType(int type) + { + this.dataManager.set(ASTEROID_TYPE, type); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityTier3Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityTier3Rocket.java new file mode 100644 index 00000000..a6bf4fdc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityTier3Rocket.java @@ -0,0 +1,328 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class EntityTier3Rocket extends EntityTieredRocket +{ + + public EntityTier3Rocket(World par1World) + { + super(par1World); + this.setSize(1.8F, 6F); + } + + public EntityTier3Rocket(World par1World, double par2, double par4, double par6, EnumRocketType rocketType) + { + super(par1World, par2, par4, par6); + this.rocketType = rocketType; + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + } + + public EntityTier3Rocket(World par1World, double par2, double par4, double par6, boolean reversed, EnumRocketType rocketType, NonNullList inv) + { + this(par1World, par2, par4, par6, rocketType); + this.stacks = inv; + } + + @Override + public double getYOffset() + { + return 1.5F; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(AsteroidsItems.tier3Rocket, 1, this.rocketType.getIndex()); + } + + @Override + protected void entityInit() + { + super.entityInit(); + } + + @Override + public double getMountedYOffset() + { + return 1.75D; + } + + @Override + public float getRotateOffset() + { + return 1.5F; + } + + @Override + public double getOnPadYOffset() + { + return 0.0D; + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + int i; + + if (this.timeUntilLaunch >= 100) + { + i = Math.abs(this.timeUntilLaunch / 100); + } else + { + i = 1; + } + + if ((this.getLaunched() || this.launchPhase == EnumLaunchPhase.IGNITED.ordinal() && this.rand.nextInt(i) == 0) && !ConfigManagerCore.disableSpaceshipParticles && this.hasValidFuel()) + { + if (this.world.isRemote) + { + this.spawnParticles(this.getLaunched()); + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal() && this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.LAUNCHED.ordinal()) + { + double d = this.timeSinceLaunch / 150; + + if (this.world.provider instanceof IGalacticraftWorldProvider && ((IGalacticraftWorldProvider) this.world.provider).hasNoAtmosphere()) + { + d = Math.min(d * 1.2, 2); + } else + { + d = Math.min(d, 1.4); + } + + if (d != 0.0) + { + this.motionY = -d * 2.5D * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES); + } + } else + { + this.motionY -= 0.008D; + } + + double multiplier = 1.0D; + + if (this.world.provider instanceof IGalacticraftWorldProvider) + { + multiplier = ((IGalacticraftWorldProvider) this.world.provider).getFuelUsageMultiplier(); + + if (multiplier <= 0) + { + multiplier = 1; + } + } + + if (this.timeSinceLaunch % MathHelper.floor(2 * (1 / multiplier)) == 0) + { + this.removeFuel(1); + if (!this.hasValidFuel()) + { + this.stopRocketSound(); + } + } + } else if (!this.hasValidFuel() && this.getLaunched() && !this.world.isRemote) + { + if (Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 10 != 0.0) + { + this.motionY -= Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 20; + } + } + } + + @Override + public void onTeleport(EntityPlayerMP player) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (this.stacks == null || this.stacks.isEmpty()) + { + stats.setRocketStacks(NonNullList.withSize(2, ItemStack.EMPTY)); + } else + { + stats.setRocketStacks(this.stacks); + } + + stats.setRocketType(this.rocketType.getIndex()); + stats.setRocketItem(AsteroidsItems.tier3Rocket); + stats.setFuelLevel(this.fuelTank.getFluidAmount()); + } + } + + protected void spawnParticles(boolean launched) + { + if (!this.isDead) + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double x1 = 3.2 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double z1 = 3.2 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double y1 = 3.2 * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null) + { + double modifier = this.posY - this.targetVec.getY(); + modifier = Math.max(modifier, 180.0); + x1 *= modifier / 200.0D; + y1 *= Math.min(modifier / 200.0D, 2.5D); + z1 *= modifier / 200.0D; + } + + final double y2 = this.prevPosY + (this.posY - this.prevPosY) + y1 - 0.75 * this.motionY - 0.3 + 1.2D; + + final double x2 = this.posX + x1 + this.motionX; + final double z2 = this.posZ + z1 + this.motionZ; + Vector3 motionVec = new Vector3(x1 + this.motionX, y1 + this.motionY, z1 + this.motionZ); + Vector3 d1 = new Vector3(y1 * 0.1D, -x1 * 0.1D, z1 * 0.1D).rotate(315 - this.rotationYaw, motionVec); + Vector3 d2 = new Vector3(x1 * 0.1D, -z1 * 0.1D, y1 * 0.1D).rotate(315 - this.rotationYaw, motionVec); + Vector3 d3 = new Vector3(-y1 * 0.1D, x1 * 0.1D, z1 * 0.1D).rotate(315 - this.rotationYaw, motionVec); + Vector3 d4 = new Vector3(x1 * 0.1D, z1 * 0.1D, -y1 * 0.1D).rotate(315 - this.rotationYaw, motionVec); + Vector3 mv1 = motionVec.clone().translate(d1); + Vector3 mv2 = motionVec.clone().translate(d2); + Vector3 mv3 = motionVec.clone().translate(d3); + Vector3 mv4 = motionVec.clone().translate(d4); + // T3 - Four flameballs which spread + EntityLivingBase riddenByEntity = this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof EntityLivingBase) ? null : (EntityLivingBase) this.getPassengers().get(0); + Object[] rider = new Object[] + {riddenByEntity}; + makeFlame(x2 + d1.x, y2 + d1.y, z2 + d1.z, mv1, this.getLaunched(), rider); + makeFlame(x2 + d2.x, y2 + d2.y, z2 + d2.z, mv2, this.getLaunched(), rider); + makeFlame(x2 + d3.x, y2 + d3.y, z2 + d3.z, mv3, this.getLaunched(), rider); + makeFlame(x2 + d4.x, y2 + d4.y, z2 + d4.z, mv4, this.getLaunched(), rider); + } + } + + private void makeFlame(double x2, double y2, double z2, Vector3 motionVec, boolean getLaunched, Object[] rider) + { + if (getLaunched) + { + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y2, z2 + 0.4 - this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y2, z2 + 0.4 - this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y2, z2 - 0.4 + this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y2, z2 - 0.4 + this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y2, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4, y2, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4, y2, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y2, z2 + 0.4D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y2, z2 - 0.4D), motionVec, rider); + return; + } + + if (this.ticksExisted % 2 == 0) + return; + + y2 += 1.6D; + double x1 = motionVec.x; + double y1 = motionVec.y; + double z1 = motionVec.z; + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y2, z2 + 0.4 - this.rand.nextDouble() / 10D), + new Vector3(x1 + 0.1D + this.rand.nextDouble() / 10D, y1 - 0.3D, z1 + 0.1D + this.rand.nextDouble() / 10D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y2, z2 + 0.4 - this.rand.nextDouble() / 10D), + new Vector3(x1 - 0.1D - this.rand.nextDouble() / 10D, y1 - 0.3D, z1 + 0.1D + this.rand.nextDouble() / 10D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y2, z2 - 0.4 + this.rand.nextDouble() / 10D), + new Vector3(x1 - 0.1D - this.rand.nextDouble() / 10D, y1 - 0.3D, z1 - 0.1D - this.rand.nextDouble() / 10D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y2, z2 - 0.4 + this.rand.nextDouble() / 10D), + new Vector3(x1 + 0.1D + this.rand.nextDouble() / 10D, y1 - 0.3D, z1 - 0.1D - this.rand.nextDouble() / 10D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4, y2, z2), new Vector3(x1 + 0.3D, y1 - 0.3D, z1), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4, y2, z2), new Vector3(x1 - 0.3D, y1 - 0.3D, z1), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2, y2, z2 + 0.4D), new Vector3(x1, y1 - 0.3D, z1 + 0.3D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2, y2, z2 - 0.4D), new Vector3(x1, y1 - 0.3D, z1 - 0.3D), rider); + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return !this.isDead && entityPlayer.getDistanceSq(this) <= 64.0D; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeEntityToNBT(par1NBTTagCompound); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readEntityFromNBT(par1NBTTagCompound); + } + + @Override + public int getRocketTier() + { + return 3; + } + + @Override + public int getFuelTankCapacity() + { + return 1500; + } + + @Override + public int getPreLaunchWait() + { + return 400; + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public List getItemsDropped(List droppedItems) + { + super.getItemsDropped(droppedItems); + ItemStack rocket = new ItemStack(AsteroidsItems.tier3Rocket, 1, this.rocketType.getIndex()); + rocket.setTagCompound(new NBTTagCompound()); + rocket.getTagCompound().setInteger("RocketFuel", this.fuelTank.getFluidAmount()); + droppedItems.add(rocket); + return droppedItems; + } + + @Override + public float getRenderOffsetY() + { + return -1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/player/AsteroidsPlayerHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/player/AsteroidsPlayerHandler.java new file mode 100644 index 00000000..43e5f4e1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/player/AsteroidsPlayerHandler.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities.player; + +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntitySmallAsteroid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedOutEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent; + +public class AsteroidsPlayerHandler +{ + + @SubscribeEvent + public void onPlayerLogin(PlayerLoggedInEvent event) + { + if (event.player instanceof EntityPlayerMP) + { + this.onPlayerLogin((EntityPlayerMP) event.player); + } + } + + @SubscribeEvent + public void onPlayerLogout(PlayerLoggedOutEvent event) + { + if (event.player instanceof EntityPlayerMP) + { + this.onPlayerLogout((EntityPlayerMP) event.player); + } + } + + @SubscribeEvent + public void onPlayerRespawn(PlayerRespawnEvent event) + { + if (event.player instanceof EntityPlayerMP) + { + this.onPlayerRespawn((EntityPlayerMP) event.player); + } + } + +// @SubscribeEvent +// public void onEntityConstructing(EntityEvent.EntityConstructing event) +// { +// if (event.getEntity() instanceof EntityPlayerMP && GCPlayerStats.get((EntityPlayerMP) event.entity) == null) +// { +// GCPlayerStats.register((EntityPlayerMP) event.entity); +// } +// } + + private void onPlayerLogin(EntityPlayerMP player) + { + } + + private void onPlayerLogout(EntityPlayerMP player) + { + + } + + private void onPlayerRespawn(EntityPlayerMP player) + { + } + + public void onPlayerUpdate(EntityPlayerMP player) + { + if (!ConfigManagerAsteroids.disableSmallAsteroids) + { + if (!player.world.isRemote && player.world.provider instanceof WorldProviderAsteroids) + { + final int f = 50; + + if (player.world.rand.nextInt(f) == 0 && player.posY < 260D) + { + final EntityPlayer closestPlayer = player.world.getClosestPlayerToEntity(player, 100); + + if (closestPlayer == null || closestPlayer.getEntityId() <= player.getEntityId()) + { + double x, y, z; + double motX, motY, motZ; + double r = player.world.rand.nextInt(60) + 30D; + double theta = Math.PI * 2.0 * player.world.rand.nextDouble(); + x = player.posX + Math.cos(theta) * r; + y = player.posY + player.world.rand.nextInt(5); + z = player.posZ + Math.sin(theta) * r; + motX = (player.posX - x + (player.world.rand.nextDouble() - 0.5) * 40) / 400.0F; + motY = (player.world.rand.nextDouble() - 0.5) * 0.4; + motZ = (player.posZ - z + (player.world.rand.nextDouble() - 0.5) * 40) / 400.0F; + + final EntitySmallAsteroid smallAsteroid = new EntitySmallAsteroid(player.world); + smallAsteroid.setPosition(x, y, z); + smallAsteroid.motionX = motX; + smallAsteroid.motionY = motY; + smallAsteroid.motionZ = motZ; + smallAsteroid.spinYaw = player.world.rand.nextFloat() * 4; + smallAsteroid.spinPitch = player.world.rand.nextFloat() * 2; + + player.world.spawnEntity(smallAsteroid); + } + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandler.java new file mode 100644 index 00000000..d7d16e88 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandler.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.event; + +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler.ThermalArmorEvent; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class AsteroidsEventHandler +{ + + @SubscribeEvent + public void onThermalArmorEvent(ThermalArmorEvent event) + { + if (event.armorStack.isEmpty()) + { + event.setArmorAddResult(ThermalArmorEvent.ArmorAddResult.REMOVE); + } else if (event.armorStack.getItem() == AsteroidsItems.thermalPadding && event.armorStack.getItemDamage() == event.armorIndex) + { + event.setArmorAddResult(ThermalArmorEvent.ArmorAddResult.ADD); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandlerClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandlerClient.java new file mode 100644 index 00000000..9ee37250 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandlerClient.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.event; + +import micdoodle8.mods.galacticraft.api.event.client.CelestialBodyRenderEvent; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore.EventSpecialRender; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.client.SkyProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.NetworkRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +public class AsteroidsEventHandlerClient +{ + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTick(ClientTickEvent event) + { + Minecraft minecraft = Minecraft.getMinecraft(); + WorldClient world = minecraft.world; + + if (world != null) + { + if (world.provider instanceof WorldProviderAsteroids) + { + if (world.provider.getSkyRenderer() == null) + { + world.provider.setSkyRenderer(new SkyProviderAsteroids((IGalacticraftWorldProvider) world.provider)); + } + + if (world.provider.getCloudRenderer() == null) + { + world.provider.setCloudRenderer(new CloudRenderer()); + } + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onRingRender(CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre renderEvent) + { + if (renderEvent.celestialBody.equals(AsteroidsModule.planetAsteroids)) + { + float alpha = 1.0F; + GuiScreen screen = FMLClientHandler.instance().getClient().currentScreen; + if (screen instanceof GuiCelestialSelection) + { + alpha = ((GuiCelestialSelection) screen).getAlpha(renderEvent.celestialBody); + GL11.glColor4f(0.7F, 0.0F, 0.0F, alpha / 2.0F); + } else + { + GL11.glColor4f(0.3F, 0.1F, 0.1F, 1.0F); + } + renderEvent.setCanceled(true); + GL11.glBegin(GL11.GL_LINE_LOOP); + + final float theta = Constants.twoPI / 90; + final float cos = MathHelper.cos(theta); + final float sin = MathHelper.sin(theta); + + float min = 72.0F; + float max = 78.0F; + + float x = max * renderEvent.celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + float y = 0; + + float temp; + for (int i = 0; i < 90; i++) + { + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + } + + GL11.glEnd(); + GL11.glBegin(GL11.GL_LINE_LOOP); + + x = min * renderEvent.celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + y = 0; + + for (int i = 0; i < 90; i++) + { + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + } + + GL11.glEnd(); + GL11.glColor4f(0.7F, 0.0F, 0.0F, alpha / 10.0F); + GL11.glBegin(GL11.GL_QUADS); + + x = min * renderEvent.celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + y = 0; + float x2 = max * renderEvent.celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + float y2 = 0; + + for (int i = 0; i < 90; i++) + { + GL11.glVertex2f(x2, y2); + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + temp = x2; + x2 = cos * x2 - sin * y2; + y2 = sin * temp + cos * y2; + + GL11.glVertex2f(x, y); + GL11.glVertex2f(x2, y2); + } + + GL11.glEnd(); + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onBodyRender(CelestialBodyRenderEvent.Pre renderEvent) + { + if (renderEvent.celestialBody.equals(AsteroidsModule.planetAsteroids)) + { + GL11.glRotatef(ClientUtil.getClientTimeTotal() / 10.0F % 360, 0, 0, 1); + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onSpecialRender(EventSpecialRender event) + { + NetworkRenderer.renderNetworks(FMLClientHandler.instance().getClient().world, event.partialTicks); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerAstroMinerDock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerAstroMinerDock.java new file mode 100644 index 00000000..d0a242f1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerAstroMinerDock.java @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerAstroMinerDock extends Container +{ + + private TileEntityMinerBase tileEntity; + + public ContainerAstroMinerDock(InventoryPlayer par1InventoryPlayer, IInventory tile) + { + this.tileEntity = (TileEntityMinerBase) tile; + this.addSlotToContainer(new SlotSpecific(tile, 0, 230, 108, IItemElectric.class)); + + int i; + int j; + + for (i = 0; i < 6; ++i) + { + for (j = 0; j < 12; ++j) + { + this.addSlotToContainer(new Slot(tile, j + i * 12 + 1, 8 + j * 18, 18 + i * 18)); + } + } + + // Player inv: + + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 139 + i * 18)); + } + } + + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 58 + 139)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par2); + int b = TileEntityMinerBase.HOLDSIZE + 1; + + if (slot != null && slot.getHasStack()) + { + final ItemStack var5 = slot.getStack(); + var3 = var5.copy(); + + if (par2 < b) + { + if (!this.mergeItemStack(var5, b, b + 36, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var5.getItem())) + { + if (!this.mergeItemStack(var5, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (par2 < b + 27) + { + if (!this.mergeItemStack(var5, 1, b, false) && !this.mergeItemStack(var5, b + 27, b + 36, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 1, b, false) && !this.mergeItemStack(var5, b, b + 27, false)) + { + return ItemStack.EMPTY; + } + } + + if (var5.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var5.getCount() == var3.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var5); + } + + return var3; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicAstroMiner.java new file mode 100644 index 00000000..79221626 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicAstroMiner.java @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import micdoodle8.mods.galacticraft.core.inventory.SlotRocketBenchResult; +import micdoodle8.mods.galacticraft.planets.mars.util.RecipeUtilMars; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ContainerSchematicAstroMiner extends Container +{ + + public InventorySchematicAstroMiner craftMatrix = new InventorySchematicAstroMiner(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicAstroMiner(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 72)); + int i; + int j; + int count = 1; + + // Miner top layer + for (i = 0; i < 4; i++) + { + this.addSlotToContainer(new SlotSchematicAstroMiner(this.craftMatrix, count++, 27 + i * 18, 35, pos, par1InventoryPlayer.player)); + } + + // Miner mid layer + for (i = 0; i < 5; i++) + { + this.addSlotToContainer(new SlotSchematicAstroMiner(this.craftMatrix, count++, 16 + i * 18, 53, pos, par1InventoryPlayer.player)); + } + + // Miner bottom layer + for (i = 0; i < 3; i++) + { + this.addSlotToContainer(new SlotSchematicAstroMiner(this.craftMatrix, count++, 44 + i * 18, 71, pos, par1InventoryPlayer.player)); + } + + // Laser + for (i = 0; i < 2; ++i) + { + this.addSlotToContainer(new SlotSchematicAstroMiner(this.craftMatrix, count++, 8 + i * 18, 77, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 140 + i * 18 - 26)); + } + } + + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 144 + 54 - 26)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtilMars.findMatchingAstroMinerRecipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + boolean done = false; + if (par1 <= 14) + { + if (!this.mergeItemStack(var4, 15, 51, false)) + { + return ItemStack.EMPTY; + } + + var3.onSlotChange(var4, var2); + } else + { + boolean valid = false; + for (int i = 1; i < 15; i++) + { + Slot testSlot = this.inventorySlots.get(i); + if (!testSlot.getHasStack() && testSlot.isItemValid(var2)) + { + valid = true; + break; + } + } + if (valid) + { + if (!this.mergeOneItemTestValid(var4, 1, 15, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 >= 15 && par1 < 42) + { + if (!this.mergeItemStack(var4, 42, 51, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 42 && par1 < 51) + { + if (!this.mergeItemStack(var4, 15, 42, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 15, 51, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItemTestValid(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (!par1ItemStack.isEmpty()) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty() && slot.isItemValid(par1ItemStack)) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicTier3Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicTier3Rocket.java new file mode 100644 index 00000000..554b9fa7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicTier3Rocket.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import micdoodle8.mods.galacticraft.core.inventory.SlotRocketBenchResult; +import micdoodle8.mods.galacticraft.planets.mars.util.RecipeUtilMars; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; + +public class ContainerSchematicTier3Rocket extends Container +{ + + public InventorySchematicTier3Rocket craftMatrix = new InventorySchematicTier3Rocket(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicTier3Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + final int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 18 + 69 + change)); + int var6; + int var7; + + // Cone + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 1, 48, -8 + change, pos, par1InventoryPlayer.player)); + + // Body + for (var6 = 0; var6 < 5; ++var6) + { + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 2 + var6, 39, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Body Right + for (var6 = 0; var6 < 5; ++var6) + { + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 7 + var6, 57, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Left fins + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 12, 21, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 13, 21, 82 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 14, 21, 100 + change, pos, par1InventoryPlayer.player)); + + // Engine + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 15, 48, 100 + change, pos, par1InventoryPlayer.player)); + + // Right fins + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 16, 75, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 17, 75, 82 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 18, 75, 100 + change, pos, par1InventoryPlayer.player)); + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 19 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 129 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 18 + 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtilMars.findMatchingSpaceshipT3Recipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + boolean done = false; + if (par1 <= 21) + { + if (!this.mergeItemStack(var4, 22, 58, false)) + { + return ItemStack.EMPTY; + } + + var3.onSlotChange(var4, var2); + } else + { + boolean valid = false; + for (int i = 1; i < 19; i++) + { + Slot testSlot = this.inventorySlots.get(i); + if (!testSlot.getHasStack() && testSlot.isItemValid(var2)) + { + valid = true; + break; + } + } + if (valid) + { + if (!this.mergeOneItemTestValid(var4, 1, 19, false)) + { + return ItemStack.EMPTY; + } + } else + { + boolean foundChest = false; + for (ItemStack woodChest : OreDictionary.getOres("chestWood")) + { + if (var2.getItem() == woodChest.getItem()) + { + foundChest = true; + break; + } + } + if (foundChest) + { + if (!this.mergeOneItemTestValid(var4, 19, 22, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 22 && par1 < 49) + { + if (!this.mergeItemStack(var4, 49, 58, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 49 && par1 < 58) + { + if (!this.mergeItemStack(var4, 22, 49, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 22, 58, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItemTestValid(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (!par1ItemStack.isEmpty()) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty() && slot.isItemValid(par1ItemStack)) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerShortRangeTelepad.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerShortRangeTelepad.java new file mode 100644 index 00000000..749b341a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerShortRangeTelepad.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerShortRangeTelepad extends Container +{ + + private final TileEntityShortRangeTelepad tileEntity; + + public ContainerShortRangeTelepad(InventoryPlayer par1InventoryPlayer, TileEntityShortRangeTelepad tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 152, 105, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 127 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 185)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicAstroMiner.java new file mode 100644 index 00000000..c64d3805 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicAstroMiner.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematicAstroMiner implements IInventory +{ + + private final NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventorySchematicAstroMiner(Container par1Container) + { + this.stacks = NonNullList.withSize(15, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicTier3Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicTier3Rocket.java new file mode 100644 index 00000000..2b1c8153 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicTier3Rocket.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematicTier3Rocket implements IInventory +{ + + private final NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventorySchematicTier3Rocket(Container par1Container) + { + this.stacks = NonNullList.withSize(22, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicAstroMiner.java new file mode 100644 index 00000000..8ad29169 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicAstroMiner.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +public class SlotSchematicAstroMiner extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotSchematicAstroMiner(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getAstroMinerRecipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicTier3Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicTier3Rocket.java new file mode 100644 index 00000000..7c7d0189 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicTier3Rocket.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +public class SlotSchematicTier3Rocket extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotSchematicTier3Rocket(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getRocketT3Recipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/AsteroidsItems.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/AsteroidsItems.java new file mode 100644 index 00000000..9c66556e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/AsteroidsItems.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PartialCanister; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.oredict.OreDictionary; + +public class AsteroidsItems +{ + + public static Item grapple; + public static Item tier3Rocket; + public static Item astroMiner; + public static Item thermalPadding; + public static Item basicItem; + public static Item methaneCanister; + public static Item canisterLOX; + public static Item canisterLN2; + // public static Item canisterLAr; + public static Item atmosphericValve; + public static ItemHeavyNoseCone heavyNoseCone; + public static Item orionDrive; + public static Item titaniumHelmet; + public static Item titaniumChestplate; + public static Item titaniumLeggings; + public static Item titaniumBoots; + public static Item titaniumAxe; + public static Item titaniumPickaxe; + public static Item titaniumSpade; + public static Item titaniumHoe; + public static Item titaniumSword; + public static Item strangeSeed; + + public static Item.ToolMaterial TOOL_TITANIUM = EnumHelper.addToolMaterial("titanium", 4, 760, 14.0F, 4.0F, 16); + public static ItemArmor.ArmorMaterial ARMOR_TITANIUM = EnumHelper.addArmorMaterial("titanium", "", 26, new int[] + {5, 7, 10, 5}, 20, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 1.0F); + + public static void initItems() + { + AsteroidsItems.grapple = new ItemGrappleHook("grapple"); + AsteroidsItems.tier3Rocket = new ItemTier3Rocket("rocket_t3"); + AsteroidsItems.astroMiner = new ItemAstroMiner("astro_miner"); + AsteroidsItems.thermalPadding = new ItemThermalPadding("thermal_padding"); + AsteroidsItems.basicItem = new ItemBasicAsteroids("item_basic_asteroids"); + AsteroidsItems.methaneCanister = new ItemCanisterMethane("methane_canister_partial"); + AsteroidsItems.canisterLOX = new ItemCanisterLiquidOxygen("canister_partial_lox"); + AsteroidsItems.canisterLN2 = new ItemCanisterLiquidNitrogen("canister_partial_ln2"); + // AsteroidsItems.canisterLAr = new + // ItemCanisterLiquidArgon("canisterPartialLAr"); + AsteroidsItems.atmosphericValve = new ItemAtmosphericValve("atmospheric_valve"); + AsteroidsItems.heavyNoseCone = new ItemHeavyNoseCone("heavy_nose_cone"); + AsteroidsItems.orionDrive = new ItemOrionDrive("orion_drive"); + AsteroidsItems.titaniumHelmet = new ItemArmorAsteroids(EntityEquipmentSlot.HEAD, "helmet"); + AsteroidsItems.titaniumChestplate = new ItemArmorAsteroids(EntityEquipmentSlot.CHEST, "chestplate"); + AsteroidsItems.titaniumLeggings = new ItemArmorAsteroids(EntityEquipmentSlot.LEGS, "leggings"); + AsteroidsItems.titaniumBoots = new ItemArmorAsteroids(EntityEquipmentSlot.FEET, "boots"); + AsteroidsItems.titaniumAxe = new ItemAxeAsteroids("titanium_axe"); + AsteroidsItems.titaniumPickaxe = new ItemPickaxeAsteroids("titanium_pickaxe"); + AsteroidsItems.titaniumSpade = new ItemSpadeAsteroids("titanium_shovel"); + AsteroidsItems.titaniumHoe = new ItemHoeAsteroids("titanium_hoe"); + AsteroidsItems.titaniumSword = new ItemSwordAsteroids("titanium_sword"); + AsteroidsItems.strangeSeed = new ItemStrangeSeed("strange_seed"); + + AsteroidsItems.registerItems(); + + AsteroidsItems.registerHarvestLevels(); + + GalacticraftCore.proxy.registerCanister(new PartialCanister(AsteroidsItems.methaneCanister, Constants.MOD_ID_PLANETS, "methane_canister_partial", 7)); + GalacticraftCore.proxy.registerCanister(new PartialCanister(AsteroidsItems.canisterLOX, Constants.MOD_ID_PLANETS, "canister_partial_lox", 7)); + GalacticraftCore.proxy.registerCanister(new PartialCanister(AsteroidsItems.canisterLN2, Constants.MOD_ID_PLANETS, "canister_partial_ln2", 7)); + } + + public static void oreDictRegistrations() + { + OreDictionary.registerOre("compressedTitanium", new ItemStack(AsteroidsItems.basicItem, 1, 6)); + OreDictionary.registerOre("ingotTitanium", new ItemStack(AsteroidsItems.basicItem, 1, 0)); + OreDictionary.registerOre("shardTitanium", new ItemStack(AsteroidsItems.basicItem, 1, 4)); + OreDictionary.registerOre("shardIron", new ItemStack(AsteroidsItems.basicItem, 1, 3)); + OreDictionary.registerOre("dustTitanium", new ItemStack(AsteroidsItems.basicItem, 1, 9)); + } + + public static void registerHarvestLevels() + { + AsteroidsItems.titaniumPickaxe.setHarvestLevel("pickaxe", 5); + AsteroidsItems.titaniumAxe.setHarvestLevel("axe", 5); + AsteroidsItems.titaniumSpade.setHarvestLevel("shovel", 5); + } + + private static void registerItems() + { + registerItem(AsteroidsItems.grapple); + registerItem(AsteroidsItems.tier3Rocket); + registerItem(AsteroidsItems.astroMiner); + registerItem(AsteroidsItems.thermalPadding); + registerItem(AsteroidsItems.basicItem); + registerItem(AsteroidsItems.methaneCanister); + registerItem(AsteroidsItems.canisterLOX); + registerItem(AsteroidsItems.canisterLN2); + // registerItem(AsteroidsItems.canisterLAr); + registerItem(AsteroidsItems.atmosphericValve); + registerItem(AsteroidsItems.heavyNoseCone); + registerItem(AsteroidsItems.orionDrive); + registerItem(AsteroidsItems.titaniumHelmet); + registerItem(AsteroidsItems.titaniumChestplate); + registerItem(AsteroidsItems.titaniumLeggings); + registerItem(AsteroidsItems.titaniumBoots); + registerItem(AsteroidsItems.titaniumAxe); + registerItem(AsteroidsItems.titaniumPickaxe); + registerItem(AsteroidsItems.titaniumSpade); + registerItem(AsteroidsItems.titaniumHoe); + registerItem(AsteroidsItems.titaniumSword); + registerItem(AsteroidsItems.strangeSeed); + + ARMOR_TITANIUM.setRepairItem(new ItemStack(AsteroidsItems.basicItem, 1, 0)); + + GCItems.canisterTypes.add((ItemCanisterGeneric) AsteroidsItems.canisterLOX); + GCItems.canisterTypes.add((ItemCanisterGeneric) AsteroidsItems.methaneCanister); + GCItems.canisterTypes.add((ItemCanisterGeneric) AsteroidsItems.canisterLN2); + } + + public static void registerItem(Item item) + { + String name = item.getTranslationKey().substring(5); + GCCoreUtil.registerGalacticraftItem(name, item); + GalacticraftCore.itemListTrue.add(item); + item.setRegistryName(name); + GalacticraftPlanets.proxy.postRegisterItem(item); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemArmorAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemArmorAsteroids.java new file mode 100644 index 00000000..174a6291 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemArmorAsteroids.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +public class ItemArmorAsteroids extends ItemArmor implements ISortableItem, GCRarity +{ + + public ItemArmorAsteroids(EntityEquipmentSlot armorIndex, String assetSuffix) + { + super(AsteroidsItems.ARMOR_TITANIUM, 0, armorIndex); + this.setTranslationKey("titanium_" + assetSuffix); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) + { + if (this.getArmorMaterial() == AsteroidsItems.ARMOR_TITANIUM) + { + if (stack.getItem() == AsteroidsItems.titaniumHelmet) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/titanium_1.png"; + } else if (stack.getItem() == AsteroidsItems.titaniumChestplate || stack.getItem() == AsteroidsItems.titaniumBoots) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/titanium_2.png"; + } else if (stack.getItem() == AsteroidsItems.titaniumLeggings) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/titanium_3.png"; + } + } + + return null; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return repair.getItem() == AsteroidsItems.basicItem && repair.getItemDamage() == 6; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAstroMiner.java new file mode 100644 index 00000000..647a98d5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAstroMiner.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemAstroMiner extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemAstroMiner(String assetName) + { + super(); + this.setMaxDamage(0); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + // this.setTextureName("arrow"); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumActionResult onItemUseFirst(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + { + TileEntity tile = null; + + if (playerIn == null) + { + return EnumActionResult.PASS; + } else + { + final Block id = worldIn.getBlockState(pos).getBlock(); + + if (id == GCBlocks.fakeBlock) + { + tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityMulti) + { + tile = ((TileEntityMulti) tile).getMainBlockTile(); + } + } + + if (id == AsteroidBlocks.minerBaseFull) + { + tile = worldIn.getTileEntity(pos); + } + + if (tile instanceof TileEntityMinerBase) + { + // Don't open GUI on client + if (worldIn.isRemote) + { + return EnumActionResult.FAIL; + } + + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + playerIn.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner7.fail"))); + return EnumActionResult.FAIL; + } + + if (((TileEntityMinerBase) tile).getLinkedMiner() != null) + { + playerIn.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner.fail"))); + return EnumActionResult.FAIL; + } + + // Gives a chance for any loaded Astro Miner to link itself + if (((TileEntityMinerBase) tile).ticks < 15) + { + return EnumActionResult.FAIL; + } + + EntityPlayerMP playerMP = (EntityPlayerMP) playerIn; + GCPlayerStats stats = GCPlayerStats.get(playerIn); + + int astroCount = stats.getAstroMinerCount(); + if (astroCount >= ConfigManagerAsteroids.astroMinerMax && (!playerIn.capabilities.isCreativeMode)) + { + playerIn.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner2.fail"))); + return EnumActionResult.FAIL; + } + + if (!((TileEntityMinerBase) tile).spawnMiner(playerMP)) + { + playerIn.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner1.fail") + " " + GCCoreUtil.translate(EntityAstroMiner.blockingBlock.toString()))); + return EnumActionResult.FAIL; + } + + if (!playerIn.capabilities.isCreativeMode) + { + stats.setAstroMinerCount(stats.getAstroMinerCount() + 1); + playerIn.getHeldItem(hand).shrink(1); + } + return EnumActionResult.SUCCESS; + } + } + return EnumActionResult.PASS; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + // TODO + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAtmosphericValve.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAtmosphericValve.java new file mode 100644 index 00000000..d997f584 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAtmosphericValve.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemAtmosphericValve extends Item implements ISortableItem, GCRarity +{ + + public ItemAtmosphericValve(String assetName) + { + super(); + this.setMaxDamage(0); + this.setTranslationKey(assetName); + this.setMaxStackSize(64); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAxeAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAxeAsteroids.java new file mode 100644 index 00000000..879162c9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAxeAsteroids.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import com.google.common.collect.Sets; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; + +public class ItemAxeAsteroids extends ItemTool implements ISortableItem, GCRarity +{ + + private static final Set EFFECTIVE_ON = Sets.newHashSet(new Block[] + {Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER, Blocks.WOODEN_BUTTON, + Blocks.WOODEN_PRESSURE_PLATE}); + + public ItemAxeAsteroids(String assetName) + { + super(GCItems.TOOL_STEEL, EFFECTIVE_ON); + this.setTranslationKey(assetName); + this.attackDamage = 6.0F; + this.attackSpeed = -3.0F; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Material material = state.getMaterial(); + return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getDestroySpeed(stack, state) : this.efficiency; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBasicAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBasicAsteroids.java new file mode 100644 index 00000000..514f4232 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBasicAsteroids.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBasicAsteroids extends Item implements ISortableItem, GCRarity +{ + + public static String[] names = + {"ingot_titanium", "engine_t2", "rocket_fins_t2", "shard_iron", "shard_titanium", "reinforced_plate_t3", "compressed_titanium", "thermal_cloth", "beam_core", "dust_titanium"}; + + public ItemBasicAsteroids(String name) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(name); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemBasicAsteroids.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (ItemBasicAsteroids.names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemBasicAsteroids.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack != null && par1ItemStack.getItemDamage() == 5) + { + tooltip.add(GCCoreUtil.translate("item.tier3.desc")); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 0: + return EnumSortCategoryItem.INGOT; + case 5: + case 6: + return EnumSortCategoryItem.PLATE; + } + return EnumSortCategoryItem.GENERAL; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + switch (item.getItemDamage()) + { + case 5: + return 2F; + case 6: + return 1F; + } + return -1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockAsteroids.java new file mode 100644 index 00000000..f3b1f2ce --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockAsteroids.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockBasicAsteroids; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockAsteroids extends ItemBlock implements GCRarity +{ + + public ItemBlockAsteroids(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockBasicAsteroids.EnumBlockBasic.values()[itemstack.getItemDamage()].getName(); + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockLaser.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockLaser.java new file mode 100644 index 00000000..56660b44 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockLaser.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +public class ItemBlockLaser extends ItemBlockDesc +{ + + public ItemBlockLaser(Block block) + { + super(block); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List info, ITooltipFlag flagIn) + { + super.addInformation(stack, worldIn, info, flagIn); + + info.add(TextFormatting.DARK_RED + "BETA Testing Phase"); + info.add(TextFormatting.DARK_RED + "Please Report Bugs"); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockShortRangeTelepad.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockShortRangeTelepad.java new file mode 100644 index 00000000..8fc50059 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockShortRangeTelepad.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBlockShortRangeTelepad extends ItemBlockDesc +{ + + public ItemBlockShortRangeTelepad(Block block) + { + super(block); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + super.addInformation(par1ItemStack, worldIn, tooltip, flagIn); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockWalkway.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockWalkway.java new file mode 100644 index 00000000..1a51eaba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockWalkway.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockWalkway; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBlockWalkway extends ItemBlockDesc +{ + + public ItemBlockWalkway(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack itemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (itemStack.getItemDamage() == BlockWalkway.EnumWalkwayType.WALKWAY_WIRE.getMeta()) + { + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate("tile.aluminum_wire.alu_wire.name")); + } else if (itemStack.getItemDamage() == BlockWalkway.EnumWalkwayType.WALKWAY_PIPE.getMeta()) + { + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate(GCBlocks.oxygenPipe.getTranslationKey() + ".name")); + } + + super.addInformation(itemStack, worldIn, tooltip, flagIn); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockWalkway.EnumWalkwayType.values()[itemstack.getItemDamage()].getName(); + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidArgon.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidArgon.java new file mode 100644 index 00000000..a0c174e8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidArgon.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCanisterLiquidArgon extends ItemCanisterGeneric +{ +// protected IIcon[] icons = new IIcon[7]; + + public ItemCanisterLiquidArgon(String assetName) + { + super(assetName); + this.setAllowedFluid("liquidargon"); + // this.setTextureName(GalacticraftPlanets.TEXTURE_PREFIX + assetName); + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister + * iconRegister) { for (int i = 0; i < this.icons.length; i++) { + * this.icons[i] = iconRegister.registerIcon(this.getIconString() + "_" + + * i); } } + */ + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getMaxDamage() - itemStack.getItemDamage() == 0) + { + return "item.emptyGasCanister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.canister.liquidArgon.full"; + } + + return "item.canister.liquidArgon.partial"; + } + + /* + * @Override public IIcon getIconFromDamage(int par1) { final int damage = 6 + * * par1 / this.getMaxDamage(); if (this.icons.length > damage) { return + * this.icons[this.icons.length - damage - 1]; } return + * super.getIconFromDamage(damage); } + */ + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("item.canister.liquid_argon.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidNitrogen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidNitrogen.java new file mode 100644 index 00000000..16163ec5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidNitrogen.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCanisterLiquidNitrogen extends ItemCanisterGeneric implements ISortableItem +{ + + public ItemCanisterLiquidNitrogen(String assetName) + { + super(assetName); + this.setAllowedFluid("liquidnitrogen"); + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getMaxDamage() - itemStack.getItemDamage() == 0) + { + return "item.empty_gas_canister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.canister.liquid_nitrogen.full"; + } + + return "item.canister.liquid_nitrogen.partial"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("item.canister.liquid_nitrogen.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } + + private Block canFreeze(Block b) + { + if (b == Blocks.WATER) + { + return Blocks.ICE; + } + if (b == Blocks.LAVA) + { + return Blocks.OBSIDIAN; + } + return null; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + ItemStack itemStack = playerIn.getHeldItem(hand); + + int damage = itemStack.getItemDamage() + 125; + if (damage > itemStack.getMaxDamage()) + { + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + RayTraceResult movingobjectposition = this.rayTrace(worldIn, playerIn, true); + + if (movingobjectposition == null || movingobjectposition.typeOfHit == RayTraceResult.Type.MISS) + { + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } else + { + if (movingobjectposition.typeOfHit == RayTraceResult.Type.BLOCK) + { + BlockPos pos = movingobjectposition.getBlockPos(); + + if (!worldIn.canMineBlockBody(playerIn, pos)) + { + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + if (!playerIn.canPlayerEdit(pos, movingobjectposition.sideHit, itemStack)) + { + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + IBlockState state = worldIn.getBlockState(pos); + Block b = state.getBlock(); + + Block result = this.canFreeze(b); + if (result != null) + { + this.setNewDamage(itemStack, damage); + worldIn.playSound(null, pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.NEUTRAL, 1.0F, Item.itemRand.nextFloat() * 0.4F + 0.8F); + worldIn.setBlockState(pos, result.getDefaultState(), 3); + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidOxygen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidOxygen.java new file mode 100644 index 00000000..8f2ff0ad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidOxygen.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.HashMap; +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCanisterLiquidOxygen extends ItemCanisterGeneric implements IItemOxygenSupply, ISortableItem +{ + + // protected IIcon[] icons = new IIcon[7]; + private static HashMap craftingvalues = new HashMap<>(); + + public ItemCanisterLiquidOxygen(String assetName) + { + super(assetName); + this.setAllowedFluid("liquidoxygen"); + // this.setTextureName(GalacticraftPlanets.TEXTURE_PREFIX + assetName); + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister + * iconRegister) { for (int i = 0; i < this.icons.length; i++) { + * this.icons[i] = iconRegister.registerIcon(this.getIconString() + "_" + + * i); } } + */ + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (ItemCanisterGeneric.EMPTY - itemStack.getItemDamage() == 0) + { + return "item.empty_gas_canister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.canister.lox.full"; + } + + return "item.canister.lox.partial"; + } + + /* + * @Override public IIcon getIconFromDamage(int par1) { final int damage = 6 + * * par1 / ItemCanisterGeneric.EMPTY; if (this.icons.length > damage) { + * return this.icons[this.icons.length - damage - 1]; } return + * super.getIconFromDamage(damage); } + */ + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (ItemCanisterGeneric.EMPTY - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("item.canister.lox.name") + ": " + (ItemCanisterGeneric.EMPTY - par1ItemStack.getItemDamage())); + } + } + + public static void saveDamage(ItemStack itemstack, int damage) + { + ItemCanisterLiquidOxygen.craftingvalues.put(itemstack, Integer.valueOf(damage)); + } + + @Override + public ItemStack getContainerItem(ItemStack itemstack) + { + Integer saved = ItemCanisterLiquidOxygen.craftingvalues.get(itemstack); + if (saved != null) + { + if (saved < ItemCanisterGeneric.EMPTY) + { + ItemCanisterLiquidOxygen.craftingvalues.remove(itemstack); + itemstack.setItemDamage(saved); + return itemstack.copy(); + } + return new ItemStack(this.getContainerItem(), 1, ItemCanisterGeneric.EMPTY); + } + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + return itemstack.copy(); + } + return super.getContainerItem(itemstack); + } + + @Override + public int discharge(ItemStack itemStack, int amount) + { + int damage = itemStack.getItemDamage(); + int used = Math.min((int) (amount * Constants.LOX_GAS_RATIO), ItemCanisterGeneric.EMPTY - damage); + this.setNewDamage(itemStack, damage + used); + return (int) Math.floor(used / Constants.LOX_GAS_RATIO); + } + + @Override + public int getOxygenStored(ItemStack par1ItemStack) + { + return ItemCanisterGeneric.EMPTY - par1ItemStack.getItemDamage(); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterMethane.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterMethane.java new file mode 100644 index 00000000..b2bcf12e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterMethane.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCanisterMethane extends ItemCanisterGeneric implements ISortableItem +{ +// protected IIcon[] icons = new IIcon[7]; + + public ItemCanisterMethane(String assetName) + { + super(assetName); + this.setAllowedFluid("methane"); + // this.setTextureName(GalacticraftPlanets.TEXTURE_PREFIX + assetName); + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister + * iconRegister) { for (int i = 0; i < this.icons.length; i++) { + * this.icons[i] = iconRegister.registerIcon(this.getIconString() + "_" + + * i); } } + */ + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getMaxDamage() - itemStack.getItemDamage() == 0) + { + return "item.empty_gas_canister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.methane_canister"; + } + + return "item.methane_canister_partial"; + } + + /* + * @Override public IIcon getIconFromDamage(int par1) { final int damage = 6 + * * par1 / this.getMaxDamage(); if (this.icons.length > damage) { return + * this.icons[this.icons.length - damage - 1]; } return + * super.getIconFromDamage(damage); } + */ + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("item.canister.gas.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemGrappleHook.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemGrappleHook.java new file mode 100644 index 00000000..09dc2f65 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemGrappleHook.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Enchantments; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBow; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.oredict.OreDictionary; + +public class ItemGrappleHook extends ItemBow implements ISortableItem, GCRarity +{ + + private static NonNullList stringEntries = null; + + public ItemGrappleHook(String assetName) + { + super(); + this.setTranslationKey(assetName); + this.setMaxStackSize(1); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entity, int timeLeft) + { + if (!(entity instanceof EntityPlayer)) + { + return; + } + + EntityPlayer player = (EntityPlayer) entity; + + boolean canShoot = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantments.INFINITY, stack) > 0; + ItemStack string = ItemStack.EMPTY; + + if (stringEntries == null) + stringEntries = OreDictionary.getOres("string"); + + for (ItemStack itemstack : player.inventory.mainInventory) + { + if (!canShoot && OreDictionary.containsMatch(false, stringEntries, itemstack)) + { + string = itemstack; + canShoot = true; + } + } + + if (canShoot) + { + ItemStack pickupString = string == ItemStack.EMPTY ? ItemStack.EMPTY : new ItemStack(string.getItem(), 1, string.getItemDamage(), string.getTagCompound()); + EntityGrapple grapple = new EntityGrapple(worldIn, player, 2.0F, pickupString); + + worldIn.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.NEUTRAL, 1.0F, 1.0F / (Item.itemRand.nextFloat() * 0.4F + 1.2F) + 0.5F); + + if (!worldIn.isRemote) + { + worldIn.spawnEntity(grapple); + } + + stack.damageItem(1, player); + grapple.canBePickedUp = player.capabilities.isCreativeMode ? 2 : 1; + + if (!player.capabilities.isCreativeMode) + { + string.shrink(1); + + if (string.isEmpty()) + { + player.inventory.deleteStack(string); + } + } + } else if (worldIn.isRemote) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.grapple.fail"))); + } + } + + @Override + public int getMaxItemUseDuration(ItemStack par1ItemStack) + { + return 72000; + } + + @Override + public EnumAction getItemUseAction(ItemStack par1ItemStack) + { + return EnumAction.BOW; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + playerIn.setActiveHand(hand); + return new ActionResult<>(EnumActionResult.SUCCESS, playerIn.getHeldItem(hand)); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHeavyNoseCone.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHeavyNoseCone.java new file mode 100644 index 00000000..1d6362c9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHeavyNoseCone.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +public class ItemHeavyNoseCone extends Item implements ISortableItem, GCRarity +{ + + public ItemHeavyNoseCone(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHoeAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHoeAsteroids.java new file mode 100644 index 00000000..684b1c2d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHoeAsteroids.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemHoe; + +public class ItemHoeAsteroids extends ItemHoe implements ISortableItem, GCRarity +{ + + public ItemHoeAsteroids(String assetName) + { + super(AsteroidsItems.TOOL_TITANIUM); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemOrionDrive.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemOrionDrive.java new file mode 100644 index 00000000..a55a0379 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemOrionDrive.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +public class ItemOrionDrive extends Item implements ISortableItem, GCRarity +{ + + public ItemOrionDrive(String assetName) + { + super(); + this.setMaxDamage(0); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemPickaxeAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemPickaxeAsteroids.java new file mode 100644 index 00000000..252926a4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemPickaxeAsteroids.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemPickaxe; + +public class ItemPickaxeAsteroids extends ItemPickaxe implements ISortableItem, GCRarity +{ + + public ItemPickaxeAsteroids(String assetName) + { + super(AsteroidsItems.TOOL_TITANIUM); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSpadeAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSpadeAsteroids.java new file mode 100644 index 00000000..5e6fd638 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSpadeAsteroids.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemSpade; + +public class ItemSpadeAsteroids extends ItemSpade implements ISortableItem, GCRarity +{ + + public ItemSpadeAsteroids(String assetName) + { + super(AsteroidsItems.TOOL_TITANIUM); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemStrangeSeed.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemStrangeSeed.java new file mode 100644 index 00000000..8e718252 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemStrangeSeed.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +public class ItemStrangeSeed extends Item implements ISortableItem, GCRarity +{ + + public ItemStrangeSeed(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSwordAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSwordAsteroids.java new file mode 100644 index 00000000..ce311058 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSwordAsteroids.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import com.google.common.collect.Multimap; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemSwordAsteroids extends ItemSword implements ISortableItem, GCRarity +{ + + private double attackDamageD; + + public ItemSwordAsteroids(String assetName) + { + super(AsteroidsItems.TOOL_TITANIUM); + this.setTranslationKey(assetName); + this.attackDamageD = 9.0D; + } + + @Override + public float getAttackDamage() + { + return 6.0F; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public Multimap getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) + { + Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); + + if (equipmentSlot == EntityEquipmentSlot.MAINHAND) + { + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", this.attackDamageD, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.8D, 0)); + } + + return multimap; + } + + @Override + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + float hardness = state.getBlockHardness(worldIn, pos); + if (hardness > 0F) + { + stack.damageItem(hardness > 0.2001F ? 2 : 1, entityLiving); + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemThermalPadding.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemThermalPadding.java new file mode 100644 index 00000000..ab55ce2e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemThermalPadding.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IItemThermal; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemThermalPadding extends Item implements IItemThermal, ISortableItem, GCRarity +{ + + public static String[] names = + {"thermal_helm", "thermal_chestplate", "thermal_leggings", "thermal_boots", "thermal_helm0", "thermal_chestplate0", "thermal_leggings0", "thermal_boots0"}; + + public ItemThermalPadding(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemThermalPadding.names.length / 2; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemThermalPadding.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getThermalStrength() + { + return 1; + } + + @Override + public boolean isValidForSlot(ItemStack stack, int armorSlot) + { + return stack.getItemDamage() == armorSlot; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(6); + ItemStack gear1 = stats.getExtendedInventory().getStackInSlot(7); + ItemStack gear2 = stats.getExtendedInventory().getStackInSlot(8); + ItemStack gear3 = stats.getExtendedInventory().getStackInSlot(9); + + if (itemStack.getItemDamage() == 0) + { + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(6, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 1) + { + if (gear1.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(7, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 2) + { + if (gear2.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(8, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 3) + { + if (gear3.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(9, itemStack.copy()); + itemStack.setCount(0); + } + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemTier3Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemTier3Rocket.java new file mode 100644 index 00000000..f5414353 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemTier3Rocket.java @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityTier3Rocket; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemTier3Rocket extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemTier3Rocket(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + boolean padFound = false; + TileEntity tile = null; + ItemStack stack = playerIn.getHeldItem(hand); + + if (worldIn.isRemote) + { + return EnumActionResult.PASS; + } else + { + float centerX = -1; + float centerY = -1; + float centerZ = -1; + + for (int i = -1; i < 2; i++) + { + for (int j = -1; j < 2; j++) + { + BlockPos pos1 = pos.add(i, 0, j); + IBlockState state = worldIn.getBlockState(pos1); + final Block id = state.getBlock(); + int meta = id.getMetaFromState(state); + + if (id == GCBlocks.landingPadFull && meta == 0) + { + padFound = true; + tile = worldIn.getTileEntity(pos1); + + centerX = pos.getX() + i + 0.5F; + centerY = pos.getY() + 0.4F; + centerZ = pos.getZ() + j + 0.5F; + + break; + } + } + + if (padFound) + { + break; + } + } + + if (padFound) + { + if (!placeRocketOnPad(stack, worldIn, tile, centerX, centerY, centerZ)) + { + return EnumActionResult.FAIL; + } + + if (!playerIn.capabilities.isCreativeMode) + { + stack.shrink(1); + } + return EnumActionResult.SUCCESS; + } else + { + return EnumActionResult.PASS; + } + } + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < EnumRocketType.values().length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + EnumRocketType type; + + if (par1ItemStack.getItemDamage() < 10) + { + type = EnumRocketType.values()[par1ItemStack.getItemDamage()]; + } else + { + type = EnumRocketType.values()[par1ItemStack.getItemDamage() - 10]; + } + + if (!type.getTooltip().isEmpty()) + { + tooltip.add(type.getTooltip()); + } + + if (type.getPreFueled()) + { + tooltip.add(EnumColor.RED + "\u00a7o" + GCCoreUtil.translate("gui.creative_only.desc")); + } + + if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("RocketFuel")) + { + EntityTier3Rocket rocket = new EntityTier3Rocket(FMLClientHandler.instance().getWorldClient(), 0, 0, 0, EnumRocketType.values()[par1ItemStack.getItemDamage()]); + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + par1ItemStack.getTagCompound().getInteger("RocketFuel") + " / " + rocket.fuelTank.getCapacity()); + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + return super.getTranslationKey(par1ItemStack) + ".t3Rocket"; + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ROCKET; + } + + public static boolean placeRocketOnPad(ItemStack stack, World worldIn, TileEntity tile, float centerX, float centerY, float centerZ) + { + // Check whether there is already a rocket on the pad + if (tile instanceof TileEntityLandingPad) + { + if (((TileEntityLandingPad) tile).getDockedEntity() != null) + { + return false; + } + } else + { + return false; + } + + EntityTier3Rocket rocket = new EntityTier3Rocket(worldIn, centerX, centerY, centerZ, EnumRocketType.values()[stack.getItemDamage()]); + + rocket.rotationYaw += 45; + rocket.setPosition(rocket.posX, rocket.posY + rocket.getOnPadYOffset(), rocket.posZ); + worldIn.spawnEntity(rocket); + + if (rocket.getType().getPreFueled()) + { + rocket.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, rocket.getMaxFuel()), true); + } else if (stack.hasTagCompound() && stack.getTagCompound().hasKey("RocketFuel")) + { + rocket.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, stack.getTagCompound().getInteger("RocketFuel")), true); + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/network/PacketSimpleAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/network/PacketSimpleAsteroids.java new file mode 100644 index 00000000..39d8499d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/network/PacketSimpleAsteroids.java @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.network; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketBase; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PacketSimpleAsteroids extends PacketBase +{ + + public static enum EnumSimplePacketAsteroids + { + + // SERVER + S_UPDATE_ADVANCED_GUI(Side.SERVER, Integer.class, BlockPos.class, Integer.class), + // CLIENT + C_TELEPAD_SEND(Side.CLIENT, BlockVec3.class, Integer.class), + C_UPDATE_GRAPPLE_POS(Side.CLIENT, Integer.class, Vector3.class); + + private Side targetSide; + private Class[] decodeAs; + + private EnumSimplePacketAsteroids(Side targetSide, Class... decodeAs) + { + this.targetSide = targetSide; + this.decodeAs = decodeAs; + } + + public Side getTargetSide() + { + return this.targetSide; + } + + public Class[] getDecodeClasses() + { + return this.decodeAs; + } + } + + private EnumSimplePacketAsteroids type; + private List data; + + public PacketSimpleAsteroids() + { + super(); + } + + public PacketSimpleAsteroids(EnumSimplePacketAsteroids packetType, int dimID, Object[] data) + { + this(packetType, dimID, Arrays.asList(data)); + } + + public PacketSimpleAsteroids(EnumSimplePacketAsteroids packetType, int dimID, List data) + { + super(dimID); + + if (packetType.getDecodeClasses().length != data.size()) + { + GalacticraftPlanets.logger.info("Asteroids Simple Packet found data length different than packet type: " + packetType.name()); + } + + this.type = packetType; + this.data = data; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type.ordinal()); + + try + { + NetworkUtil.encodeData(buffer, this.data); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = EnumSimplePacketAsteroids.values()[buffer.readInt()]; + + if (this.type.getDecodeClasses().length > 0) + { + this.data = NetworkUtil.decodeData(this.type.getDecodeClasses(), buffer); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void handleClientSide(EntityPlayer player) + { + EntityPlayerSP playerBaseClient = null; + + if (player instanceof EntityPlayerSP) + { + playerBaseClient = (EntityPlayerSP) player; + } + + TileEntity tile; + switch (this.type) + { + case C_TELEPAD_SEND: + Entity entity = playerBaseClient.world.getEntityByID((Integer) this.data.get(1)); + + if (entity != null && entity instanceof EntityLivingBase) + { + BlockVec3 pos = (BlockVec3) this.data.get(0); + entity.setPosition(pos.x + 0.5, pos.y + 2.2, pos.z + 0.5); + } + break; + case C_UPDATE_GRAPPLE_POS: + entity = playerBaseClient.world.getEntityByID((Integer) this.data.get(0)); + if (entity != null && entity instanceof EntityGrapple) + { + Vector3 vec = (Vector3) this.data.get(1); + entity.setPosition(vec.x, vec.y, vec.z); + } + break; + default: + break; + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + switch (this.type) + { + case S_UPDATE_ADVANCED_GUI: + TileEntity tile = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile instanceof TileEntityShortRangeTelepad) + { + TileEntityShortRangeTelepad launchController = (TileEntityShortRangeTelepad) tile; + launchController.setAddress((Integer) this.data.get(2)); + } + break; + case 1: + if (tile instanceof TileEntityShortRangeTelepad) + { + TileEntityShortRangeTelepad launchController = (TileEntityShortRangeTelepad) tile; + launchController.setTargetAddress((Integer) this.data.get(2)); + } + break; + default: + break; + } + break; + default: + break; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CanisterRecipes.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CanisterRecipes.java new file mode 100644 index 00000000..c49794ce --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CanisterRecipes.java @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.recipe; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemCanisterLiquidOxygen; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class CanisterRecipes extends ShapelessRecipes +{ + + public CanisterRecipes(ItemStack stack, NonNullList list) + { + super("canisters", stack, list); + } + + /** + * Used to check if a recipe matches current crafting inventory + */ + @Override + public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_) + { + ItemStack itemCanister = ItemStack.EMPTY; + ItemStack itemTank = ItemStack.EMPTY; + + for (int i = 0; i < p_77569_1_.getSizeInventory(); ++i) + { + ItemStack itemstack1 = p_77569_1_.getStackInSlot(i); + + if (!itemstack1.isEmpty()) + { + Item testItem = itemstack1.getItem(); + if (testItem instanceof ItemCanisterLiquidOxygen || testItem == GCItems.oxygenCanisterInfinite) + { + if (!itemCanister.isEmpty()) + { + // Two canisters + return false; + } + + itemCanister = itemstack1; + } else + { + if (!(testItem instanceof ItemOxygenTank) || !itemTank.isEmpty()) + { + // Something other than an oxygen tank + return false; + } + + itemTank = itemstack1; + } + } + } + + // Need one canister + one tank + if (itemCanister.isEmpty() || itemTank.isEmpty()) + { + return false; + } + + // Empty canister + if (itemCanister.getItemDamage() >= itemCanister.getMaxDamage()) + { + return false; + } + + // Full tank + if (itemTank.getItemDamage() <= 0) + { + return false; + } + + return true; + } + + /** + * Returns an Item that is the result of this recipe + */ + @Override + public ItemStack getCraftingResult(InventoryCrafting inv) + { + ItemStack itemTank = null; // Intentionally null - internal use only + ItemStack itemCanister = null; // Intentionally null - internal use only + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack1 = inv.getStackInSlot(i); + + if (!itemstack1.isEmpty()) + { + Item testItem = itemstack1.getItem(); + if (testItem instanceof ItemCanisterLiquidOxygen || testItem == GCItems.oxygenCanisterInfinite) + { + // Intentional item null check + if (itemCanister != null) + { + // Two canisters + return ItemStack.EMPTY; + } + + itemCanister = itemstack1; + } else + { + // Intentional item null check + if (!(testItem instanceof ItemOxygenTank) || itemTank != null) + { + // Something other than an oxygen tank + return ItemStack.EMPTY; + } + + itemTank = itemstack1; + } + } + } + + // Need one canister + one tank (intentional item null check) + if (itemCanister == null || itemTank == null) + { + return ItemStack.EMPTY; + } + + // Empty canister + if (itemCanister.getItemDamage() >= itemCanister.getMaxDamage()) + { + return ItemStack.EMPTY; + } + + // Full tank + if (itemTank.getItemDamage() <= 0) + { + return ItemStack.EMPTY; + } + + int oxygenAvail = itemCanister.getMaxDamage() - itemCanister.getItemDamage(); + int oxygenToFill = itemTank.getItemDamage() * 5 / 54; + + if (oxygenAvail >= oxygenToFill) + { + ItemStack result = itemTank.copy(); + result.setItemDamage(0); + if (itemCanister.getItem() instanceof ItemCanisterLiquidOxygen) + { + ItemCanisterLiquidOxygen.saveDamage(itemCanister, itemCanister.getItemDamage() + oxygenToFill); + } + return result; + } + + int tankDamageNew = (oxygenToFill - oxygenAvail) * 54 / 5; + ItemStack result = itemTank.copy(); + result.setItemDamage(tankDamageNew); + if (itemCanister.getItem() instanceof ItemCanisterLiquidOxygen) + { + ItemCanisterLiquidOxygen.saveDamage(itemCanister, itemCanister.getMaxDamage()); + } + return result; + } + + @Override + public boolean canFit(int width, int height) + { + return width * height >= 2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CompatModuleIC2Asteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CompatModuleIC2Asteroids.java new file mode 100644 index 00000000..6673afeb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CompatModuleIC2Asteroids.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.recipe; + +import ic2.api.recipe.Recipes; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import net.minecraft.item.ItemStack; + +public class CompatModuleIC2Asteroids +{ + + public static void addIC2Recipes(ItemStack titaniumIngot, ItemStack titaniumDust) + { + // Titanium dust from small dust + RecipeUtil.addRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 9), new Object[] + {"XXX", "XXX", "XXX", 'X', new ItemStack(GCItems.ic2compat, 1, 7)}); + Recipes.compressor.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.ic2compat, 1, 7), 9), null, false, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(titaniumIngot, 1), null, false, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(AsteroidsItems.basicItem, 1, 4), 1), null, false, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(AsteroidsItems.basicItem, 1, 6), 1), null, false, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + // Asteroids and Venus versions of aluminium ore (because IC2 oredicting + // or .ini will not pick up aluminium ores) + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(AsteroidBlocks.blockBasic, 1, 3), 1), null, false, new ItemStack(GCItems.ic2compat, 2, 2)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(VenusBlocks.venusBlock, 1, 6), 1), null, false, new ItemStack(GCItems.ic2compat, 2, 2)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/RecipeManagerAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/RecipeManagerAsteroids.java new file mode 100644 index 00000000..7cf86991 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/RecipeManagerAsteroids.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.recipe; + +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.recipe.NasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.NonNullList; +import net.minecraftforge.oredict.OreDictionary; + +public class RecipeManagerAsteroids +{ + + public static void addUniversalRecipes() + { + ItemStack titaniumIngot = new ItemStack(AsteroidsItems.basicItem, 1, 0); + ItemStack platingTier3 = new ItemStack(AsteroidsItems.basicItem, 1, 5); + + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidBlocks.blockBasic, 1, 3), new ItemStack(GCItems.basicItem, 1, 5), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidBlocks.blockBasic, 1, 4), new ItemStack(AsteroidsItems.basicItem, 1, 0), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidBlocks.blockBasic, 1, 5), new ItemStack(Items.IRON_INGOT), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 3), new ItemStack(Items.IRON_INGOT), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 4), new ItemStack(AsteroidsItems.basicItem, 1, 0), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 9), new ItemStack(AsteroidsItems.basicItem, 1, 0), 0.5F); + + // Cobblestone->Gravel, Gravel->Sand, Sand->Clay + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.GRAVEL, 9, 0), "XXX", "XXX", "XXX", 'X', new ItemStack(Blocks.COBBLESTONE, 1)); + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.SAND, 9, 0), "XXX", "XXX", "XXX", 'X', new ItemStack(Blocks.GRAVEL, 1)); + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.CLAY, 8, 0), "XXX", "XBX", "XXX", 'X', new ItemStack(Blocks.SAND), 'B', new ItemStack(Items.WATER_BUCKET)); + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.SOUL_SAND, 4, 0), "XFX", "FEF", "XFX", 'X', new ItemStack(Blocks.SAND), 'F', new ItemStack(Items.ROTTEN_FLESH), 'E', + new ItemStack(Items.FERMENTED_SPIDER_EYE)); + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.OBSIDIAN, 1, 0), "XXX", "XBX", "XXX", 'X', new ItemStack(Blocks.STONE), 'B', new ItemStack(Items.BLAZE_POWDER)); + // Charcoal into coal + CompressorRecipes.addShapelessAdventure(new ItemStack(Items.COAL, 2, 0), new ItemStack(Items.COAL, 1, 1), new ItemStack(AsteroidBlocks.blockBasic, 1, 0), new ItemStack(Items.COAL, 1, 1)); + CompressorRecipes.addShapelessAdventure(new ItemStack(Items.COAL, 2, 0), new ItemStack(Items.COAL, 1, 1), new ItemStack(AsteroidBlocks.blockBasic, 1, 1), new ItemStack(Items.COAL, 1, 1)); + CompressorRecipes.addShapelessAdventure(new ItemStack(Items.COAL, 2, 0), new ItemStack(Items.COAL, 1, 1), new ItemStack(AsteroidBlocks.blockBasic, 1, 2), new ItemStack(Items.COAL, 1, 1)); + // Splintered ice into Ice + CompressorRecipes.addShapelessRecipe(new ItemStack(Blocks.ICE), new ItemStack(AsteroidBlocks.blockDenseIce), new ItemStack(AsteroidBlocks.blockDenseIce)); + + CompressorRecipes.addShapelessRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 6), titaniumIngot, titaniumIngot); + CompressorRecipes.addShapelessRecipe(platingTier3, new ItemStack(MarsItems.marsItemBasic, 1, 3), new ItemStack(MarsItems.marsItemBasic, 1, 5)); + + HashMap input = new HashMap<>(); + ItemStack plateTier3 = new ItemStack(AsteroidsItems.basicItem, 1, 5); + ItemStack rocketFinsTier2 = new ItemStack(AsteroidsItems.basicItem, 1, 2); + input.put(1, new ItemStack(AsteroidsItems.heavyNoseCone)); + input.put(2, plateTier3); + input.put(3, plateTier3); + input.put(4, plateTier3); + input.put(5, plateTier3); + input.put(6, plateTier3); + input.put(7, plateTier3); + input.put(8, plateTier3); + input.put(9, plateTier3); + input.put(10, plateTier3); + input.put(11, plateTier3); + input.put(12, new ItemStack(GCItems.rocketEngine, 1, 1)); + input.put(13, rocketFinsTier2); + input.put(14, rocketFinsTier2); + input.put(15, new ItemStack(AsteroidsItems.basicItem, 1, 1)); + input.put(16, new ItemStack(GCItems.rocketEngine, 1, 1)); + input.put(17, rocketFinsTier2); + input.put(18, rocketFinsTier2); + input.put(19, ItemStack.EMPTY); + input.put(20, ItemStack.EMPTY); + input.put(21, ItemStack.EMPTY); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 0), input)); + + NonNullList woodChests = OreDictionary.getOres("chestWood"); + HashMap input2; + + for (ItemStack woodChest : woodChests) + { + input2 = new HashMap(input); + input2.put(19, woodChest); + input2.put(20, ItemStack.EMPTY); + input2.put(21, ItemStack.EMPTY); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 1), input2)); + + input2 = new HashMap(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, woodChest); + input2.put(21, ItemStack.EMPTY); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 1), input2)); + + input2 = new HashMap(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, ItemStack.EMPTY); + input2.put(21, woodChest); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 1), input2)); + + input2 = new HashMap(input); + input2.put(19, woodChest); + input2.put(20, woodChest); + input2.put(21, ItemStack.EMPTY); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 2), input2)); + + input2 = new HashMap(input); + input2.put(19, woodChest); + input2.put(20, ItemStack.EMPTY); + input2.put(21, woodChest); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 2), input2)); + + input2 = new HashMap(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, woodChest); + input2.put(21, woodChest); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 2), input2)); + + input2 = new HashMap(input); + input2.put(19, woodChest); + input2.put(20, woodChest); + input2.put(21, woodChest); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 3), input2)); + } + + for (ItemStack woodChest : woodChests) + { + input = new HashMap(); + input.put(1, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(3, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(5, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(11, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(2, new ItemStack(AsteroidsItems.orionDrive)); + input.put(4, new ItemStack(AsteroidsItems.orionDrive)); + input.put(9, new ItemStack(AsteroidsItems.orionDrive)); + input.put(10, new ItemStack(AsteroidsItems.orionDrive)); + input.put(12, new ItemStack(AsteroidsItems.orionDrive)); + input.put(6, new ItemStack(GCItems.basicItem, 1, 14)); + input.put(7, woodChest); + input.put(8, woodChest); + input.put(13, new ItemStack(AsteroidsItems.basicItem, 1, 8)); + input.put(14, new ItemStack(GCItems.flagPole)); + GalacticraftRegistry.addAstroMinerRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.astroMiner, 1, 0), input)); + } + + // All this is for NEI's benefit + NonNullList list1 = NonNullList.create(); + NonNullList list2 = NonNullList.create(); + NonNullList list3 = NonNullList.create(); + list1.add(Ingredient.fromStacks(new ItemStack(AsteroidsItems.canisterLOX, 1, 751))); + list2.add(Ingredient.fromStacks(new ItemStack(AsteroidsItems.canisterLOX, 1, 834))); + list3.add(Ingredient.fromStacks(new ItemStack(AsteroidsItems.canisterLOX, 1, 918))); + list1.add(Ingredient.fromStacks(new ItemStack(GCItems.oxTankHeavy, 1, 2700))); + list2.add(Ingredient.fromStacks(new ItemStack(GCItems.oxTankMedium, 1, 1800))); + list3.add(Ingredient.fromStacks(new ItemStack(GCItems.oxTankLight, 1, 900))); + RecipeUtil.addCustomRecipe(new CanisterRecipes(new ItemStack(GCItems.oxTankHeavy, 1, 0), list1)); + RecipeUtil.addCustomRecipe(new CanisterRecipes(new ItemStack(GCItems.oxTankMedium, 1, 0), list2)); + RecipeUtil.addCustomRecipe(new CanisterRecipes(new ItemStack(GCItems.oxTankLight, 1, 0), list3)); + } + + public static void loadCompatibilityRecipes() + { + ItemStack titaniumIngot = new ItemStack(AsteroidsItems.basicItem, 1, 0); + if (CompatibilityManager.isIc2Loaded()) + { + CompatModuleIC2Asteroids.addIC2Recipes(titaniumIngot, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicAstroMiner.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicAstroMiner.java new file mode 100644 index 00000000..1b8d19d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicAstroMiner.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.schematic; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.client.gui.GuiSchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerSchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicAstroMiner implements ISchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerAsteroids.idSchematicRocketT3 + 1; + } + + @Override + public int getGuiID() + { + return GuiIdsPlanets.NASA_WORKBENCH_ASTRO_MINER + Constants.MOD_ID_PLANETS.hashCode(); + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(MarsItems.schematic, 1, 2); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicAstroMiner(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicAstroMiner(player.inventory, pos); + } + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicTier3Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicTier3Rocket.java new file mode 100644 index 00000000..c95859ad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicTier3Rocket.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.schematic; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.client.gui.GuiSchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerSchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicTier3Rocket implements ISchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerAsteroids.idSchematicRocketT3; + } + + @Override + public int getGuiID() + { + return GuiIdsPlanets.NASA_WORKBENCH_TIER_3_ROCKET + Constants.MOD_ID_PLANETS.hashCode(); + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(MarsItems.schematic, 1, 0); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicTier3Rocket(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicTier3Rocket(player.inventory, pos); + } + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tick/AsteroidsTickHandlerServer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tick/AsteroidsTickHandlerServer.java new file mode 100644 index 00000000..42a97346 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tick/AsteroidsTickHandlerServer.java @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tick; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.ASMUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.ShortRangeTelepadHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; +import net.minecraft.world.gen.ChunkProviderServer; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.common.gameevent.TickEvent.WorldTickEvent; + +public class AsteroidsTickHandlerServer +{ + + public static ShortRangeTelepadHandler spaceRaceData = null; + public static List activeMiners = new ArrayList<>(); + public static AtomicBoolean loadingSavedChunks = new AtomicBoolean(); + + public static void restart() + { + spaceRaceData = null; + activeMiners.clear(); + } + + @SubscribeEvent + public void onServerTick(TickEvent.ServerTickEvent event) + { + MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); + // Prevent issues when clients switch to LAN servers + if (server == null) + { + return; + } + + if (event.phase == TickEvent.Phase.START) + { + TileEntityMinerBase.checkNewMinerBases(); + + if (AsteroidsTickHandlerServer.spaceRaceData == null) + { + World world = server.getWorld(0); + AsteroidsTickHandlerServer.spaceRaceData = (ShortRangeTelepadHandler) world.getMapStorage().getOrLoadData(ShortRangeTelepadHandler.class, ShortRangeTelepadHandler.saveDataID); + + if (AsteroidsTickHandlerServer.spaceRaceData == null) + { + AsteroidsTickHandlerServer.spaceRaceData = new ShortRangeTelepadHandler(ShortRangeTelepadHandler.saveDataID); + world.getMapStorage().setData(ShortRangeTelepadHandler.saveDataID, AsteroidsTickHandlerServer.spaceRaceData); + } + } + + int index = -1; + for (EntityAstroMiner miner : activeMiners) + { + index++; + if (miner.isDead) + { +// minerIt.remove(); Don't remove it, we want the index number to be static for the others + continue; + } + + if (miner.playerMP != null) + { + GCPlayerStats stats = GCPlayerStats.get(miner.playerMP); + if (stats != null) + { + List list = stats.getActiveAstroMinerChunks(); + boolean inListAlready = false; + Iterator it = list.iterator(); + while (it.hasNext()) + { + BlockVec3 data = it.next(); + if (data.sideDoneBits == index) // SideDoneBits + // won't be saved to + // NBT, but during + // an active server + // session we can + // use it as a + // cross-reference + // to the index here + // - it's a 4th data + // int hidden inside + // a BlockVec3 + { + if (miner.isDead) + { + it.remove(); // Player stats should not save + // position of dead AstroMiner + // entity (probably broken by + // player deliberately breaking + // it) + } else + { + data.x = miner.chunkCoordX; + data.z = miner.chunkCoordZ; + } + inListAlready = true; + break; + } + } + if (!inListAlready) + { + BlockVec3 data = new BlockVec3(miner.chunkCoordX, miner.dimension, miner.chunkCoordZ); + data.sideDoneBits = index; + list.add(data); + } + } + } + + } + } + } + + @SubscribeEvent + public void onWorldTick(WorldTickEvent event) + { + if (event.phase == Phase.START) + { + for (EntityAstroMiner miner : activeMiners) + { + if (miner.playerMP != null && miner.world == event.world && !miner.isDead) + { + miner.serverTick = true; + miner.serverTickSave = miner.ticksExisted; + } + } + } else if (event.phase == Phase.END) + { + for (EntityAstroMiner miner : activeMiners) + { + if (miner.isDead) + { +// minerIt.remove(); Don't remove it, we want the index number to be static for the others + continue; + } + if (miner.playerMP != null && miner.world == event.world) + { + if (miner.serverTick) + { + // Force an entity update tick, if it didn't happen + // already (mainly needed on Sponge servers - entities + // not super close to players seem to be not updated at + // all on Sponge even if the chunk is active, see issue + // #3307) + miner.ticksExisted = miner.serverTickSave + 1; + miner.onUpdate(); + } + + try + { + Set undrop = ASMUtil.getPrivateValue(ChunkProviderServer.class, ((WorldServer) miner.world).getChunkProvider(), "droppedChunks", "field_73248_b"); + undrop.remove(ChunkPos.asLong(miner.chunkCoordX, miner.chunkCoordZ)); + } catch (Exception ignore) + { + } + } + } + } + } + + public static void removeChunkData(GCPlayerStats stats, EntityAstroMiner entityToRemove) + { + int index = 0; + for (EntityAstroMiner miner : activeMiners) + { + if (miner == entityToRemove) // Found it in the list here + { + List list = stats.getActiveAstroMinerChunks(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + BlockVec3 data = it.next(); + if (data.sideDoneBits == index) // Found it in the player's + // stats + { + it.remove(); + return; + } + } + return; + } + index++; + } + } + + /** + * How this works: every spawned or saved (in player stats) miner is added + * to the activeMiners list here. Once per server tick its position will be + * saved to player stats. When the player quits, the saved miner positions + * will be saved with the player's stats NBT When the player next loads, + * loadAstroChunkList will force load those chunks, therefore reactivating + * AstroMiners if those chunks weren't already loaded. + */ + public static void loadAstroChunkList(List activeChunks) + { + List copyList = new LinkedList<>(activeChunks); + activeChunks.clear(); + if (!(AsteroidsTickHandlerServer.loadingSavedChunks.getAndSet(true))) + { + for (BlockVec3 data : copyList) + { + WorldProvider p = WorldUtil.getProviderForDimensionServer(data.y); + if (p != null && p.world != null) + { + GalacticraftPlanets.logger.debug("Loading chunk " + data.y + ": " + data.x + "," + data.z + " - should contain a miner!"); + WorldServer w = (WorldServer) p.world; + boolean previous = CompatibilityManager.forceLoadChunks(w); + w.getChunkProvider().loadChunk(data.x, data.z); + CompatibilityManager.forceLoadChunksEnd(w, previous); + } + } + AsteroidsTickHandlerServer.loadingSavedChunks.set(false); + } + } + + public static int monitorMiner(EntityAstroMiner entityAstroMiner) + { + int result = activeMiners.size(); + activeMiners.add(entityAstroMiner); + GalacticraftPlanets.logger.debug("Monitoring miner " + result); + return result; + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamOutput.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamOutput.java new file mode 100644 index 00000000..6c61719d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamOutput.java @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import java.util.LinkedList; +import micdoodle8.mods.galacticraft.api.power.ILaserNode; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.relauncher.Side; + +public abstract class TileEntityBeamOutput extends TileEntityAdvanced implements ILaserNode +{ + + public LinkedList nodeList = new LinkedList(); + @NetworkedField(targetSide = Side.CLIENT) public BlockPos targetVec = new BlockPos(-1, -1, -1); + public float pitch; + public float yaw; + private BlockPos preLoadTarget = null; + private BlockPos lastTargetVec = new BlockPos(-1, -1, -1); + + public TileEntityBeamOutput(String tileName) + { + super(tileName); + } + + @Override + public void update() + { + if (this.preLoadTarget != null) + { + TileEntity tileAtTarget = this.world.getTileEntity(this.preLoadTarget); + + if (tileAtTarget != null && tileAtTarget instanceof ILaserNode) + { + this.setTarget((ILaserNode) tileAtTarget); + this.preLoadTarget = null; + } + } + + super.update(); + + if (!this.targetVec.equals(this.lastTargetVec)) + { + this.markDirty(); + } + + this.lastTargetVec = this.targetVec; + + if (this.world.isRemote) + { + this.updateOrientation(); + } else if (this.targetVec.getX() == -1 && this.targetVec.getY() == -1 && this.targetVec.getZ() == -1) + { + this.initiateReflector(); + } + + } + + @Override + public void invalidate() + { + super.invalidate(); + this.invalidateReflector(); + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public void onLoad() + { + } + + @Override + public void onChunkUnload() + { + this.invalidateReflector(); + } + + public void invalidateReflector() + { + for (ILaserNode node : this.nodeList) + { + node.removeNode(this); + } + + this.nodeList.clear(); + } + + public void initiateReflector() + { + this.nodeList.clear(); + + int chunkXMin = this.getPos().getX() - 15 >> 4; + int chunkZMin = this.getPos().getZ() - 15 >> 4; + int chunkXMax = this.getPos().getX() + 15 >> 4; + int chunkZMax = this.getPos().getZ() + 15 >> 4; + + for (int cX = chunkXMin; cX <= chunkXMax; cX++) + { + for (int cZ = chunkZMin; cZ <= chunkZMax; cZ++) + { + if (this.world.getChunkProvider().getLoadedChunk(cX, cZ) != null) + { + Chunk chunk = this.world.getChunk(cX, cZ); + + for (Object obj : chunk.getTileEntityMap().values()) + { + if (obj != this && obj instanceof ILaserNode) + { + BlockVec3 deltaPos = new BlockVec3(this).subtract(new BlockVec3(((ILaserNode) obj).getTile())); + + if (deltaPos.x < 16 && deltaPos.y < 16 && deltaPos.z < 16) + { + ILaserNode laserNode = (ILaserNode) obj; + + if (this.canConnectTo(laserNode) && laserNode.canConnectTo(this)) + { + this.addNode(laserNode); + laserNode.addNode(this); + } + } + } + } + } + } + } + + this.setTarget(this.nodeList.peekFirst()); + } + + @Override + public void addNode(ILaserNode node) + { + int index = -1; + + for (int i = 0; i < this.nodeList.size(); i++) + { + if (new BlockVec3(this.nodeList.get(i).getTile()).equals(new BlockVec3(node.getTile()))) + { + index = i; + break; + } + } + + if (index != -1) + { + this.nodeList.set(index, node); + return; + } + + if (this.nodeList.isEmpty()) + { + this.nodeList.add(node); + } else + { + int nodeCompare = this.nodeList.get(0).compareTo(node, new BlockVec3(this)); + + if (nodeCompare <= 0) + { + this.nodeList.addFirst(node); + return; + } + + nodeCompare = this.nodeList.get(this.nodeList.size() - 1).compareTo(node, new BlockVec3(this)); + + if (nodeCompare >= 0) + { + this.nodeList.addLast(node); + return; + } + + index = 1; + + while (index < this.nodeList.size()) + { + index++; + } + + this.nodeList.add(index, node); + } + } + + @Override + public void removeNode(ILaserNode node) + { + int index = -1; + + for (int i = 0; i < this.nodeList.size(); i++) + { + if (new BlockVec3(this.nodeList.get(i).getTile()).equals(new BlockVec3(node.getTile()))) + { + index = i; + break; + } + } + + if (new BlockVec3(node.getTile()).equals(new BlockVec3(this.targetVec))) + { + if (index == 0) + { + if (this.nodeList.size() > 1) + { + this.setTarget(this.nodeList.get(index + 1)); + } else + { + this.setTarget(null); + } + } else if (index > 0) + { + this.setTarget(this.nodeList.get(index - 1)); + } else + { + this.setTarget(null); + } + } + + if (index != -1) + { + this.nodeList.remove(index); + } + } + + public void updateOrientation() + { + if (this.getTarget() != null) + { + Vector3 direction = Vector3.subtract(this.getOutputPoint(false), this.getTarget().getInputPoint()).normalize(); + this.pitch = (float) -Vector3.getAngle(new Vector3(-direction.x, -direction.y, -direction.z), new Vector3(0, 1, 0)) * Constants.RADIANS_TO_DEGREES + 90; + this.yaw = (float) -(Math.atan2(direction.z, direction.x) * Constants.RADIANS_TO_DEGREES) + 90; + } + } + + @Override + public TileEntity getTile() + { + return this; + } + + @Override + public int compareTo(ILaserNode otherNode, BlockVec3 origin) + { + int thisDistance = new BlockVec3(this).subtract(origin).getMagnitudeSquared(); + int otherDistance = new BlockVec3(otherNode.getTile()).subtract(origin).getMagnitudeSquared(); + + if (thisDistance < otherDistance) + { + return 1; + } else if (thisDistance > otherDistance) + { + return -1; + } + + return 0; + } + + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (this.nodeList.size() > 1) + { + int index = -1; + + if (this.getTarget() != null) + { + for (int i = 0; i < this.nodeList.size(); i++) + { + if (new BlockVec3(this.nodeList.get(i).getTile()).equals(new BlockVec3(this.getTarget().getTile()))) + { + index = i; + break; + } + } + } + + if (index == -1) + { + // This shouldn't happen, but just in case... + this.initiateReflector(); + } else + { + index++; + index %= this.nodeList.size(); + this.setTarget(this.nodeList.get(index)); + return true; + } + } + + return false; + } + + @Override + public ILaserNode getTarget() + { + if (this.targetVec.getX() != -1 || this.targetVec.getY() != -1 || this.targetVec.getZ() != -1) + { + TileEntity tileAtTarget = this.world.getTileEntity(this.targetVec); + + if (tileAtTarget != null && tileAtTarget instanceof ILaserNode) + { + return (ILaserNode) tileAtTarget; + } + + return null; + } + + return null; + } + + public void setTarget(ILaserNode target) + { + if (target != null) + { + this.targetVec = target.getTile().getPos(); + } else + { + this.targetVec = new BlockPos(-1, -1, -1); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if (nbt.getBoolean("HasTarget")) + { + this.preLoadTarget = new BlockPos(nbt.getInteger("TargetX"), nbt.getInteger("TargetY"), nbt.getInteger("TargetZ")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setBoolean("HasTarget", this.getTarget() != null); + + if (this.getTarget() != null) + { + nbt.setInteger("TargetX", this.getTarget().getTile().getPos().getX()); + nbt.setInteger("TargetY", this.getTarget().getTile().getPos().getY()); + nbt.setInteger("TargetZ", this.getTarget().getTile().getPos().getZ()); + } + + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReceiver.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReceiver.java new file mode 100644 index 00000000..b539f7d7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReceiver.java @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import com.google.common.collect.Lists; +import micdoodle8.mods.galacticraft.api.power.EnergySource; +import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceAdjacent; +import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceWireless; +import micdoodle8.mods.galacticraft.api.power.IEnergyHandlerGC; +import micdoodle8.mods.galacticraft.api.power.ILaserNode; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorage; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectrical; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.tile.ReceiverMode; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityBeamReceiver extends TileEntityBeamOutput implements IEnergyHandlerGC, ILaserNode +{ + + @NetworkedField(targetSide = Side.CLIENT) public EnumFacing facing = null; + private int preLoadFacing = -1; + private float maxRate = 1500; + private EnergyStorage storage = new EnergyStorage(10 * maxRate, maxRate); // In + // broken + // circuits, + // Beam + // Receiver + // will + // accept + // energy + // for + // 0.5s + // (15000gJ + // max) + // then + // stop + @NetworkedField(targetSide = Side.CLIENT) public int modeReceive = ReceiverMode.UNDEFINED.ordinal(); + public Vector3 color = new Vector3(0, 1, 0); + + public TileEntityBeamReceiver() + { + super("container.beam_receiver.name"); + } + + @Override + public void update() + { + super.update(); + + if (this.preLoadFacing != -1) + { + this.setFacing(EnumFacing.byIndex(this.preLoadFacing)); + this.preLoadFacing = -1; + } + + if (!this.world.isRemote) + { + if (this.getTarget() != null && this.modeReceive == ReceiverMode.EXTRACT.ordinal() && this.facing != null) + { + TileEntity tile = this.getAttachedTile(); + + if (tile instanceof TileBaseUniversalElectricalSource) + { + // GC energy source + TileBaseUniversalElectricalSource electricalTile = (TileBaseUniversalElectricalSource) tile; + + if (electricalTile.storage.getEnergyStoredGC() > 0) + { + EnergySourceAdjacent source = new EnergySourceAdjacent(EnumFacing.byIndex(this.facing.getIndex() ^ 1)); + float toSend = Math.min(electricalTile.storage.getMaxExtract(), electricalTile.storage.getEnergyStoredGC()); + float transmitted = this.getTarget().receiveEnergyGC(new EnergySourceWireless(Lists.newArrayList((ILaserNode) this)), toSend, false); + electricalTile.extractEnergyGC(source, transmitted, false); + } + } else if (!(tile instanceof EnergyStorageTile) && !(tile instanceof TileBaseConductor)) + // Another mod's energy source + // But don't use other mods methods to connect Beam Receivers to + // GC's own wires or machines + { + float availableToSend = EnergyUtil.otherModsEnergyExtract(tile, this.facing, this.maxRate, true); + if (availableToSend > 0F) + { + float transmitted = this.getTarget().receiveEnergyGC(new EnergySourceWireless(Lists.newArrayList((ILaserNode) this)), availableToSend, false); + EnergyUtil.otherModsEnergyExtract(tile, this.facing, transmitted, false); + } + } + } else if (this.modeReceive == ReceiverMode.RECEIVE.ordinal() && this.storage.getEnergyStoredGC() > 0) + { + // One Beam Receiver might be powered by multiple transmitters - + // allow for 5 at maximum transfer rate + float maxTransfer = Math.min(this.storage.getEnergyStoredGC(), maxRate * 5); + + if (maxTransfer < 0.01F) + // Stop updating this when de minimis energy remains + { + this.storage.extractEnergyGCnoMax(maxTransfer, false); + } else + { + TileEntity tileAdj = this.getAttachedTile(); + + if (tileAdj instanceof TileBaseUniversalElectrical) + { + TileBaseUniversalElectrical electricalTile = (TileBaseUniversalElectrical) tileAdj; + EnergySourceAdjacent source = new EnergySourceAdjacent(this.facing.getOpposite()); + this.storage.extractEnergyGCnoMax(electricalTile.receiveEnergyGC(source, maxTransfer, false), false); + } else if (!(tileAdj instanceof EnergyStorageTile) && !(tileAdj instanceof TileBaseConductor)) + // Dont use other mods methods to connect Beam Receivers to + // GC's own wires or machines + { + float otherModTransferred = EnergyUtil.otherModsEnergyTransfer(tileAdj, this.facing, maxTransfer, false); + if (otherModTransferred > 0F) + { + this.storage.extractEnergyGCnoMax(otherModTransferred, false); + } + } + } + } + } + } + + @Override + public double getPacketRange() + { + return 24.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public Vector3 getInputPoint() + { + Vector3 headVec = new Vector3(this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5); + if (this.facing != null) + { + headVec.x += this.facing.getXOffset() * 0.1F; + headVec.y += this.facing.getYOffset() * 0.1F; + headVec.z += this.facing.getZOffset() * 0.1F; + } + return headVec; + } + + @Override + public Vector3 getOutputPoint(boolean offset) + { + Vector3 headVec = new Vector3(this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5); + if (this.facing != null) + { + headVec.x += this.facing.getXOffset() * 0.1F; + headVec.y += this.facing.getYOffset() * 0.1F; + headVec.z += this.facing.getZOffset() * 0.1F; + } + return headVec; + } + + @Override + public TileEntity getTile() + { + return this; + } + + public TileEntity getAttachedTile() + { + if (this.facing == null) + { + return null; + } + + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, this.facing); + + if (tile == null || tile.isInvalid()) + { + this.setFacing(null); + } + + if (tile instanceof IConductor) + { + this.setFacing(null ); + return null; + } + + if (tile instanceof EnergyStorageTile) + { + EnergyStorage attachedStorage = ((EnergyStorageTile) tile).storage; + this.storage.setCapacity(attachedStorage.getCapacityGC() - attachedStorage.getEnergyStoredGC()); + this.storage.setMaxExtract(attachedStorage.getMaxExtract()); + this.storage.setMaxReceive(attachedStorage.getMaxReceive()); + } + + return tile; + } + + @Override + public float receiveEnergyGC(EnergySource from, float amount, boolean simulate) + { + if (this.modeReceive != ReceiverMode.RECEIVE.ordinal()) + { + return 0; + } + + this.getAttachedTile(); + + if (this.facing == null) + { + return 0; + } + + // if (received < amount) + // { + // if (tile instanceof EnergyStorageTile) + // { + // received += ((EnergyStorageTile) tile).storage.receiveEnergyGC(amount + // - received, simulate); + // } + // } + + return this.storage.receiveEnergyGC(amount, simulate); + } + + @Override + public float extractEnergyGC(EnergySource from, float amount, boolean simulate) + { + if (this.modeReceive != ReceiverMode.EXTRACT.ordinal()) + { + return 0; + } + + TileEntity tile = this.getAttachedTile(); + + if (this.facing == null) + { + return 0; + } + + float extracted = this.storage.extractEnergyGC(amount, simulate); + + if (extracted < amount) + { + if (tile instanceof EnergyStorageTile) + { + extracted += ((EnergyStorageTile) tile).storage.extractEnergyGC(amount - extracted, simulate); + } + } + + return extracted; + } + + @Override + public float getEnergyStoredGC(EnergySource from) + { + TileEntity tile = this.getAttachedTile(); + + if (this.facing == null) + { + return 0; + } + + return this.storage.getEnergyStoredGC(); + } + + @Override + public float getMaxEnergyStoredGC(EnergySource from) + { + TileEntity tile = this.getAttachedTile(); + + if (this.facing == null) + { + return 0; + } + + return this.storage.getCapacityGC(); + } + + @Override + public boolean nodeAvailable(EnergySource from) + { + TileEntity tile = this.getAttachedTile(); + + return this.facing != null; + + } + + public void setFacing(EnumFacing newDirection) + { + if (newDirection != this.facing) + { + if (newDirection == null) + { + this.modeReceive = ReceiverMode.UNDEFINED.ordinal(); + } else + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, newDirection); + + if (tile == null) + { + this.modeReceive = ReceiverMode.UNDEFINED.ordinal(); + } else if (tile instanceof EnergyStorageTile) + { + ReceiverMode mode = ((EnergyStorageTile) tile).getModeFromDirection(newDirection.getOpposite()); + + if (mode != null) + { + this.modeReceive = mode.ordinal(); + } else + { + this.modeReceive = ReceiverMode.UNDEFINED.ordinal(); + } + } else if (EnergyUtil.otherModCanReceive(tile, newDirection.getOpposite())) + { + this.modeReceive = ReceiverMode.RECEIVE.ordinal(); + } else if (EnergyUtil.otherModCanProduce(tile, newDirection.getOpposite())) + { + this.modeReceive = ReceiverMode.EXTRACT.ordinal(); + } + } + } + + this.facing = newDirection; + } + + @Override + public boolean canConnectTo(ILaserNode laserNode) + { + if (this.modeReceive != ReceiverMode.UNDEFINED.ordinal() && this.color.equals(laserNode.getColor())) + { + if (laserNode instanceof TileEntityBeamReceiver) + { + return ((TileEntityBeamReceiver) laserNode).modeReceive != this.modeReceive; + } + + return true; + } + + return false; + } + + @Override + public Vector3 getColor() + { + return new Vector3(0, 1, 0); + } + + @Override + public ILaserNode getTarget() + { + if (this.modeReceive == ReceiverMode.EXTRACT.ordinal()) + { + return super.getTarget(); + } + + return null; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.preLoadFacing = nbt.getInteger("FacingSide"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("FacingSide", this.facing == null ? this.preLoadFacing : this.facing.ordinal()); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + private AxisAlignedBB renderAABB; + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 2, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_SHORT; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReflector.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReflector.java new file mode 100644 index 00000000..9b2428e1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReflector.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import micdoodle8.mods.galacticraft.api.power.EnergySource; +import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceWireless; +import micdoodle8.mods.galacticraft.api.power.ILaserNode; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorage; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityBeamReflector extends TileEntityBeamOutput implements ILaserNode +{ + + public Vector3 color = new Vector3(0, 1, 0); + private EnergyStorage storage = new EnergyStorage(10, 1); + +// @Override +// public void update() +// { +// super.update(); +// } + + public TileEntityBeamReflector() + { + super("container.beam_reflector.name"); + } + + @Override + public Vector3 getInputPoint() + { + float distance = 0.15F; + Vector3 deviation = new Vector3(Math.sin(Math.toRadians(this.yaw - 180)) * distance, 0, Math.cos(Math.toRadians(this.yaw - 180)) * distance); + Vector3 headVec = new Vector3(this.getPos().getX() + 0.5, this.getPos().getY() + 1.13228 / 2.0, this.getPos().getZ() + 0.5); + headVec.translate(deviation.clone().invert()); + return headVec; + } + + @Override + public Vector3 getOutputPoint(boolean offset) + { + return new Vector3(this.getPos().getX() + 0.5, this.getPos().getY() + 1.13228 / 2.0, this.getPos().getZ() + 0.5); + } + + @Override + public double getPacketRange() + { + return 24.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public Vector3 getColor() + { + return this.color; + } + + @Override + public boolean canConnectTo(ILaserNode laserNode) + { + return this.color.equals(laserNode.getColor()); + } + + @Override + public float receiveEnergyGC(EnergySource from, float amount, boolean simulate) + { + if (this.getTarget() != null) + { + if (from instanceof EnergySourceWireless) + { + if (((EnergySourceWireless) from).nodes.contains(this.getTarget())) + { + return 0; + } + + ((EnergySourceWireless) from).nodes.add(this); + + return this.getTarget().receiveEnergyGC(from, amount, simulate); + } else + { + return 0; + } + } + + return this.storage.receiveEnergyGC(amount, simulate); + } + + @Override + public float extractEnergyGC(EnergySource from, float amount, boolean simulate) + { + return 0; + } + + @Override + public boolean nodeAvailable(EnergySource from) + { + return from instanceof EnergySourceWireless; + } + + @Override + public float getEnergyStoredGC(EnergySource from) + { + return this.storage.getEnergyStoredGC(); + } + + @Override + public float getMaxEnergyStoredGC(EnergySource from) + { + return this.storage.getCapacityGC(); + } + + @Override + public void setTarget(ILaserNode target) + { + super.setTarget(target); + } + + private AxisAlignedBB renderAABB; + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 2, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_SHORT; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBase.java new file mode 100644 index 00000000..0cfe9350 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBase.java @@ -0,0 +1,1121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import com.google.common.collect.Lists; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumFacing.Axis; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityMinerBase extends TileBaseElectricBlockWithInventory implements ISidedInventory, IMultiBlock, IMachineSides +{ + + public static final int HOLDSIZE = 72; + private int[] slotArray; + public boolean isMaster = false; + public EnumFacing facing = EnumFacing.NORTH; + private BlockPos mainBlockPosition; + private LinkedList targetPoints = new LinkedList<>(); + private WeakReference masterTile = null; + public boolean updateClientFlag; + public boolean findTargetPointsFlag; + public int linkCountDown = 0; + public static Map> newMinerBases = new HashMap>(); + private AxisAlignedBB renderAABB; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataAIState; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataDX; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataDY; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataDZ; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataCount; + + public void setMainBlockPosition(BlockPos mainBlockPosition) + { + this.mainBlockPosition = mainBlockPosition; + } + + /** + * The number of players currently using this chest + */ + public int numUsingPlayers; + + /** + * Server sync counter (once per 20 ticks) + */ + private int ticksSinceSync; + + private boolean spawnedMiner = false; + + public EntityAstroMiner linkedMiner = null; + public UUID linkedMinerID = null; + private boolean initialised; + + public TileEntityMinerBase() + { + super("tile.miner_base.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 20 : 12); + this.slotArray = new int[HOLDSIZE]; + for (int i = 0; i < HOLDSIZE; i++) + { + this.slotArray[i] = i + 1; + } + this.inventory = NonNullList.withSize(HOLDSIZE + 1, ItemStack.EMPTY); + } + + public static void checkNewMinerBases() + { + Iterator>> entries = newMinerBases.entrySet().iterator(); + while (entries.hasNext()) + { + Entry> entry = entries.next(); + if (entry.getValue().isEmpty()) + continue; + + World w = WorldUtil.getWorldForDimensionServer(entry.getKey()); + if (w == null) + { + GalacticraftPlanets.logger.error("Astro Miner Base placement: Unable to find server world for dim " + entry.getKey()); + entries.remove(); + continue; + } + + for (BlockPos posMain : entry.getValue()) + { + BlockPos master = new BlockPos(posMain); + for (int x = 0; x < 2; x++) + { + for (int y = 0; y < 2; y++) + { + for (int z = 0; z < 2; z++) + { + BlockPos pos = posMain.add(x, y, z); + w.setBlockState(pos, AsteroidBlocks.minerBaseFull.getDefaultState(), 2); + final TileEntity tile = w.getTileEntity(pos); + + if (tile instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tile).setMainBlockPos(master); + ((TileEntityMinerBase) tile).updateClientFlag = true; + } + } + } + } + } + + entry.getValue().clear(); + } + } + + public static void addNewMinerBase(int dimID, BlockPos blockPos) + { + if (newMinerBases.containsKey(dimID)) + { + newMinerBases.get(dimID).add(blockPos); + } else + { + List blockPositions = Lists.newArrayList(); + newMinerBases.put(dimID, blockPositions); + blockPositions.add(blockPos); + } + } + + @Override + public void update() + { + super.update(); + + if (!this.initialised) + { + this.initialised = true; + if (!this.world.isRemote && !this.isMaster) + { + if (this.getMaster() == null) + { + this.world.setBlockState(this.getPos(), AsteroidBlocks.blockMinerBase.getDefaultState(), 2); + } + } + } + + if (this.updateClientFlag) + { + assert (!this.world.isRemote); // Just checking: updateClientFlag + // should not be capable of being set + // on clients + this.updateAllInDimension(); + this.updateClientFlag = false; + } + + if (this.findTargetPointsFlag) + { + if (this.isMaster && this.linkedMiner != null) + { + this.findTargetPoints(); + } + this.findTargetPointsFlag = false; + } + + // TODO: Find linkedminer by UUID and update it if not chunkloaded? + + if (!this.isMaster) + { + TileEntityMinerBase master = this.getMaster(); + + if (master != null) + { + float energyLimit = master.storage.getCapacityGC() - master.storage.getEnergyStoredGC(); + if (energyLimit < 0F) + { + energyLimit = 0F; + } + this.storage.setCapacity(energyLimit); + this.storage.setMaxExtract(energyLimit); + this.storage.setMaxReceive(energyLimit); + float hasEnergy = this.getEnergyStoredGC(); + if (hasEnergy > 0F) + { + this.extractEnergyGC(null, master.receiveEnergyGC(null, hasEnergy, false), false); + } + } + } + + // Used for refreshing client with linked miner position data + if (this.linkCountDown > 0) + { + this.linkCountDown--; + } + + if (this.isMaster && !this.world.isRemote) + { + this.updateGUIstate(); + // System.out.println("Miner base state " + + // this.linkedMinerDataAIState); + } + } + + public void updateGUIstate() + { + if (this.linkedMinerID == null) + { + this.linkedMinerDataAIState = -3; + return; + } + EntityAstroMiner miner = this.linkedMiner; + if (miner == null || miner.isDead) + { + this.linkedMinerDataAIState = -3; + return; + } + if (this.linkCountDown > 0) + { + this.linkedMinerDataAIState = -2; + return; + } + + this.linkedMinerDataAIState = miner.AIstate; + this.linkedMinerDataDX = (MathHelper.floor(this.linkedMiner.posX) - this.getPos().getX() - 1); + this.linkedMinerDataDY = (MathHelper.floor(this.linkedMiner.posY) - this.getPos().getY() - 1); + this.linkedMinerDataDZ = (MathHelper.floor(this.linkedMiner.posZ) - this.getPos().getZ() - 1); + this.linkedMinerDataCount = miner.mineCount; + } + + // TODO - currently unused, the master position replaces this? + protected void initialiseMultiTiles(BlockPos pos, World world) + { + List positions = new ArrayList<>(); + this.getPositions(pos, positions); + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tile).mainBlockPosition = pos; + } + } + } + + public boolean spawnMiner(EntityPlayerMP player) + { + if (this.isMaster) + { + if (this.linkedMiner != null) + { + if (this.linkedMiner.isDead) + { + this.unlinkMiner(); + } + } + if (this.linkedMinerID == null) + { +// System.err.println("" + this.facing); + if (EntityAstroMiner.spawnMinerAtBase(this.world, this.getPos().getX() + 1, this.getPos().getY() + 1, this.getPos().getZ() + 1, this.facing, new BlockVec3(this), player)) + { + this.findTargetPoints(); + return true; + } + } + return false; + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.spawnMiner(player); + } + return false; + } + + public TileEntityMinerBase getMaster() + { + if (this.mainBlockPosition == null) + { + return null; + } + + if (masterTile == null) + { + TileEntity tileEntity = this.world.getTileEntity(this.mainBlockPosition); + + if (tileEntity instanceof TileEntityMinerBase) + { + masterTile = new WeakReference(((TileEntityMinerBase) tileEntity)); + } + + if (masterTile == null) + { + return null; + } + } + + TileEntityMinerBase master = this.masterTile.get(); + + if (master != null && master.isMaster) + { + return master; + } + + return null; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.facing = EnumFacing.byHorizontalIndex(nbt.getInteger("facing")); + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.isMaster = nbt.getBoolean("isMaster"); + if (this.isMaster) + { + this.updateClientFlag = true; + } else + { + NBTTagCompound tagCompound = nbt.getCompoundTag("masterpos"); + if (tagCompound.getKeySet().isEmpty()) + this.setMainBlockPosition(null); + else + { + this.setMainBlockPosition(new BlockPos(tagCompound.getInteger("x"), tagCompound.getInteger("y"), tagCompound.getInteger("z"))); + this.updateClientFlag = true; + } + } + if (nbt.hasKey("LinkedUUIDMost", 4) && nbt.hasKey("LinkedUUIDLeast", 4)) + { + this.linkedMinerID = new UUID(nbt.getLong("LinkedUUIDMost"), nbt.getLong("LinkedUUIDLeast")); + } else + { + this.linkedMinerID = null; + } + if (nbt.hasKey("TargetPoints")) + { + this.targetPoints.clear(); + final NBTTagList mpList = nbt.getTagList("TargetPoints", 10); + for (int j = 0; j < mpList.tagCount(); j++) + { + NBTTagCompound bvTag = mpList.getCompoundTagAt(j); + this.targetPoints.add(BlockVec3.readFromNBT(bvTag)); + } + } else + { + this.findTargetPointsFlag = this.isMaster; + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("isMaster", this.isMaster); + if (!this.isMaster && this.mainBlockPosition != null) + { + NBTTagCompound masterTag = new NBTTagCompound(); + masterTag.setInteger("x", this.mainBlockPosition.getX()); + masterTag.setInteger("y", this.mainBlockPosition.getY()); + masterTag.setInteger("z", this.mainBlockPosition.getZ()); + nbt.setTag("masterpos", masterTag); + } + nbt.setInteger("facing", this.facing.getHorizontalIndex()); + if (this.isMaster && this.linkedMinerID != null) + { + nbt.setLong("LinkedUUIDMost", this.linkedMinerID.getMostSignificantBits()); + nbt.setLong("LinkedUUIDLeast", this.linkedMinerID.getLeastSignificantBits()); + } + NBTTagList mpList = new NBTTagList(); + for (int j = 0; j < this.targetPoints.size(); j++) + { + mpList.appendTag(this.targetPoints.get(j).writeToNBT(new NBTTagCompound())); + } + nbt.setTag("TargetPoints", mpList); + return nbt; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return this.world.getTileEntity(this.getPos()) == this && entityPlayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + public boolean addToInventory(ItemStack itemstack) + { + // TODO - add test for is container open and if so use + // Container.mergeItemStack + + boolean flag1 = false; + int k = 1; + int invSize = this.getSizeInventory(); + + ItemStack existingStack; + + if (itemstack.isStackable()) + { + while (!itemstack.isEmpty() && k < invSize) + { + existingStack = this.getInventory().get(k); + + if (RecipeUtil.stacksMatch(itemstack, existingStack)) + { + int combined = existingStack.getCount() + itemstack.getCount(); + + if (combined <= itemstack.getMaxStackSize()) + { + itemstack.setCount(0); + existingStack.setCount(combined); + flag1 = true; + } else if (existingStack.getCount() < itemstack.getMaxStackSize()) + { + itemstack.shrink(itemstack.getMaxStackSize() - existingStack.getCount()); + existingStack.setCount(itemstack.getMaxStackSize()); + flag1 = true; + } + } + + ++k; + } + } + + if (!itemstack.isEmpty()) + { + k = 1; + + while (k < invSize) + { + existingStack = this.getInventory().get(k); + + if (existingStack.isEmpty()) + { + this.getInventory().set(k, itemstack.copy()); + itemstack.setCount(0); + flag1 = true; + break; + } + + ++k; + } + } + + this.markDirty(); + return flag1; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + /** + * invalidates a tile entity + */ + @Override + public void invalidate() + { + super.invalidate(); + this.updateContainingBlockInfo(); + } + + @Override + public double getPacketRange() + { + return 20.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public NonNullList getInventory() + { + if (this.isMaster) + { + return super.getInventory(); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.getInventory(); + } + + return super.getInventory(); + } + + @Override + public boolean shouldUseEnergy() + { + return false; + } + + public void setMainBlockPos(BlockPos master) + { + this.masterTile = null; + if (this.getPos().equals(master)) + { + this.isMaster = true; + this.setMainBlockPosition(null); + return; + } + this.isMaster = false; + this.setMainBlockPosition(master); + this.markDirty(); + } + + public void onBlockRemoval() + { + if (this.isMaster) + { + this.invalidate(); + this.onDestroy(this); + return; + } + + TileEntityMinerBase master = this.getMaster(); + + if (master != null && !master.isInvalid()) + { + this.world.destroyBlock(master.getPos(), false); + } + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + if (this.isMaster) + { + ItemStack holding = entityPlayer.getActiveItemStack(); + if (holding != null && holding.getItem() == AsteroidsItems.astroMiner) + { + return false; + } + + entityPlayer.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_ASTEROIDS, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + return true; + } else + { + TileEntityMinerBase master = this.getMaster(); + return master != null && master.onActivated(entityPlayer); + } + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.MINER_BASE; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + for (int y = 0; y < 2; y++) + { + if (placedPosition.getY() + y >= this.world.getHeight()) + break; + for (int x = 0; x < 2; x++) + { + for (int z = 0; z < 2; z++) + { + if (x + y + z == 0) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, placedPosition.getY() + y, placedPosition.getZ() + z)); + } + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == AsteroidBlocks.minerBaseFull) // GCBlocks.fakeBlock + // && + // (EnumBlockMultiType) + // stateAt.getValue(BlockMulti.MULTI_TYPE) + // == + // EnumBlockMultiType.MINER_BASE) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + } + + // TODO + // maybe 2 electrical inputs are needed? + // chest goes above (could be 2 chests or other mods storage) + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(2, 2, 2)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public void updateFacing() + { + if (this.isMaster && this.linkedMinerID == null) + { + // Re-orient the block + switch (this.facing) + { + case SOUTH: + this.facing = EnumFacing.WEST; + break; + case EAST: + this.facing = EnumFacing.SOUTH; + break; + case WEST: + this.facing = EnumFacing.NORTH; + break; + case NORTH: + this.facing = EnumFacing.EAST; + break; + } + + super.updateFacing(); + } else + { + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + master.updateFacing(); + } + } + + if (!this.world.isRemote) + { + this.updateAllInDimension(); + } + + for (EnumFacing facing : EnumFacing.VALUES) + { + BlockPos offset = this.getPos().offset(facing); + TileEntity tileOffset = this.world.getTileEntity(offset); + if (tileOffset != null && !(tileOffset instanceof TileEntityMinerBase)) + { + IBlockState state = this.world.getBlockState(offset); + state.getBlock().neighborChanged(state, this.world, offset, this.world.getBlockState(this.getPos()).getBlock(), this.getPos()); + world.markBlockRangeForRenderUpdate(offset, offset); + } + } + + this.markDirty(); + } + + @Override + public void buildDataPacket(int[] data) + { + int x, y, z; + if (this.mainBlockPosition != null) + { + x = this.mainBlockPosition.getX(); + y = this.mainBlockPosition.getY(); + z = this.mainBlockPosition.getZ(); + } else + { + x = this.getPos().getX(); + y = this.getPos().getY(); + z = this.getPos().getZ(); + } + int link = (this.linkedMinerID != null) ? 8 : 0; + data[0] = link + this.facing.ordinal(); + data[1] = x; + data[2] = y; + data[3] = z; + } + + @Override + public EnumFacing getElectricInputDirection() + { + if (this.isMaster) + { + return this.facing.getOpposite(); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.facing.getOpposite(); + } + return null; + } + + public void linkMiner(EntityAstroMiner entityAstroMiner) + { + this.linkedMiner = entityAstroMiner; + this.linkedMinerID = this.linkedMiner.getUniqueID(); + this.updateClientFlag = true; + this.markDirty(); + } + + public void unlinkMiner() + { + this.linkedMiner = null; + this.linkedMinerID = null; + this.updateClientFlag = true; + this.markDirty(); + } + + public UUID getLinkedMiner() + { + if (this.isMaster) + { + return this.linkedMinerID; + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.linkedMinerID; + } + return null; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (this.isMaster) + { + return side != this.facing ? slotArray : new int[] + {}; + } + + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.getSlotsForFace(side); + } + + return new int[] + {}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isMaster) + { + if (side != this.facing) + { + return slotID > 0 || ItemElectricBase.isElectricItemEmpty(itemstack); + } + + return false; + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.canExtractItem(slotID, itemstack, side); + } + + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (this.isMaster) + { + return slotID > 0 || ItemElectricBase.isElectricItem(itemstack.getItem()); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.isItemValidForSlot(slotID, itemstack); + } + + return false; + } + + @Override + public ItemStack getStackInSlot(int par1) + { + if (this.isMaster) + { + return super.getStackInSlot(par1); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.getStackInSlot(par1); + } + + return ItemStack.EMPTY; + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.isMaster) + { + return super.decrStackSize(par1, par2); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.decrStackSize(par1, par2); + } + + return ItemStack.EMPTY; + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (this.isMaster) + { + return super.removeStackFromSlot(par1); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.removeStackFromSlot(par1); + } + + return ItemStack.EMPTY; + } + + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + if (this.isMaster) + { + super.setInventorySlotContents(par1, par2ItemStack); + return; + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + master.setInventorySlotContents(par1, par2ItemStack); + } + + return; + } + + @Override + public ItemStack getBatteryInSlot() + { + if (this.isMaster) + { + return this.getStackInSlot(0); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + master.getBatteryInSlot(); + } + + return null; + } + + @Override + public int getSizeInventory() + { + return HOLDSIZE + 1; + } + + public BlockVec3 findNextTarget() + { + if (!this.targetPoints.isEmpty()) + { + BlockVec3 pos = this.targetPoints.removeFirst(); + this.markDirty(); + if (pos != null) + { + return pos.clone(); + } + } + + // No more mining targets, the whole area is mined + return null; + } + + private void findTargetPoints() + { + this.targetPoints.clear(); + BlockVec3 posnTarget = new BlockVec3(this); + + if (this.world.provider instanceof WorldProviderAsteroids) + { + ArrayList roids = ((WorldProviderAsteroids) this.world.provider).getClosestAsteroidsXZ(posnTarget.x, posnTarget.y, posnTarget.z, this.facing.getIndex(), 100); + if (roids != null && roids.size() > 0) + { + this.targetPoints.addAll(roids); + return; + } + } + + posnTarget.modifyPositionFromSide(this.facing, this.world.rand.nextInt(16) + 32); + int miny = Math.min(this.getPos().getY() * 2 - 90, this.getPos().getY() - 22); + if (miny < 5) + { + miny = 5; + } + posnTarget.y = miny + 5 + this.world.rand.nextInt(4); + + this.targetPoints.add(posnTarget); + + EnumFacing lateral = EnumFacing.NORTH; + EnumFacing inLine = this.facing; + if (inLine.getAxis() == Axis.Z) + { + lateral = EnumFacing.WEST; + } + + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 13)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -13)); + if (posnTarget.y > 17) + { + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 7).modifyPositionFromSide(EnumFacing.DOWN, 11)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -7).modifyPositionFromSide(EnumFacing.DOWN, 11)); + } else + { + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 26)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -26)); + } + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 7).modifyPositionFromSide(EnumFacing.UP, 11)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -7).modifyPositionFromSide(EnumFacing.UP, 11)); + if (posnTarget.y < this.getPos().getY() - 38) + { + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 13).modifyPositionFromSide(EnumFacing.UP, 22)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(EnumFacing.UP, 22)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -13).modifyPositionFromSide(EnumFacing.UP, 22)); + } + + int s = this.targetPoints.size(); + for (int i = 0; i < s; i++) + { + this.targetPoints.add(this.targetPoints.get(i).clone().modifyPositionFromSide(inLine, EntityAstroMiner.MINE_LENGTH + 6)); + } + + this.markDirty(); + return; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + // Used to recall miner + TileEntityMinerBase master; + if (!this.isMaster) + { + master = this.getMaster(); + if (master == null) + { + return; + } + } else + { + master = this; + } + if (master.linkedMiner != null) + { + master.linkedMiner.recall(); + } + } + + @Override + public EnumFacing byIndex() + { + return this.facing; + } + + /** + * This would normally be used by IMachineSides but here it's overridden to + * get at the same facing packet for the MinerBase's own purposes + * (IMachineSides won't be using it because as implemented here, extending + * TileEntityElectricBlock, sides are not configurable) + */ + + @Override + public void updateClient(List data) + { + int data1 = (Integer) data.get(1); + this.facing = EnumFacing.byIndex(data1 & 7); + this.setMainBlockPos(new BlockPos((Integer) data.get(2), (Integer) data.get(3), (Integer) data.get(4))); + if (data1 > 7) + { + this.linkedMinerID = UUID.randomUUID(); + } else + { + this.linkedMinerID = null; + } + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return IMachineSidesProperties.NOT_CONFIGURABLE; + } + + @Override + public MachineSide[] listConfigurableSides() + { + return null; + } + + @Override + public Face[] listDefaultFaces() + { + return null; + } + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + return null; + } + + @Override + public void setupMachineSides(int length) + { + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBaseSingle.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBaseSingle.java new file mode 100644 index 00000000..f3bec3f3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBaseSingle.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileEntityMinerBaseSingle extends TileEntity implements ITickable +{ + + private int corner = 0; + + @Override + public void update() + { + if (!this.world.isRemote && this.corner == 0) + { + final ArrayList attachedBaseBlocks = new ArrayList(); + + final int thisX = this.getPos().getX(); + final int thisY = this.getPos().getY(); + final int thisZ = this.getPos().getZ(); + + boolean success = true; + SEARCH: for (int x = 0; x < 2; x++) + { + for (int y = 0; y < 2; y++) + { + for (int z = 0; z < 2; z++) + { + BlockPos pos = new BlockPos(x + thisX, y + thisY, z + thisZ); + final TileEntity tile = this.world.isBlockLoaded(pos, false) ? this.world.getTileEntity(pos) : null; + + if (tile instanceof TileEntityMinerBaseSingle && !tile.isInvalid() && ((TileEntityMinerBaseSingle) tile).corner == 0) + { + attachedBaseBlocks.add(tile); + } else + { + success = false; + break SEARCH; + } + } + } + } + + if (success) + { + TileEntityMinerBase.addNewMinerBase(GCCoreUtil.getDimensionID(this), this.getPos()); + for (final TileEntity tile : attachedBaseBlocks) + { + ((TileEntityMinerBaseSingle) tile).corner = 1; + this.world.setBlockToAir(this.getPos()); + } + // Don't try setting a new block with a TileEntity, because new + // tiles can + // get removed after the end of this tileEntity.update() tick - + // setting a new block + // here would automatically invalidate this tile. + // + // (It's because if this tileEntity is now invalid, + // World.updateEntities() removes + // *any* tileEntity at this position - see call to + // Chunk.removeTileEntity(pos)nee!) + // + // Equally if any others of these TileEntityMinerBaseSingle are + // ticked AFTER this + // in the same server update tick, then those new ones will also + // be removed + // because their TileEntityMinerBaseSingle is now, inevitably, + // invalid! + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityShortRangeTelepad.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityShortRangeTelepad.java new file mode 100644 index 00000000..b54cb781 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityShortRangeTelepad.java @@ -0,0 +1,675 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import io.netty.buffer.ByteBuf; +import java.util.EnumSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockTelepadFake; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.ShortRangeTelepadHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.network.PacketSimpleAsteroids; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityShortRangeTelepad extends TileBaseElectricBlock implements IMultiBlock, IInventoryDefaults, ISidedInventory +{ + + public enum EnumTelepadSearchResult + { + VALID, NOT_FOUND, TOO_FAR, WRONG_DIM, TARGET_DISABLED + } + + public static final int MAX_TELEPORT_TIME = 150; + public static final int TELEPORTER_RANGE = 256; + public static final int ENERGY_USE_ON_TELEPORT = 2500; + + @NetworkedField(targetSide = Side.CLIENT) public int address = -1; + @NetworkedField(targetSide = Side.CLIENT) public boolean addressValid = false; + @NetworkedField(targetSide = Side.CLIENT) public int targetAddress = -1; + public EnumTelepadSearchResult targetAddressResult = EnumTelepadSearchResult.NOT_FOUND; + @NetworkedField(targetSide = Side.CLIENT) public int teleportTime = 0; + @NetworkedField(targetSide = Side.CLIENT) public String owner = ""; + @NetworkedField(targetSide = Side.CLIENT) public boolean teleporting; + private AxisAlignedBB renderAABB; + + public TileEntityShortRangeTelepad() + { + super("container.short_range_telepad.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 115 : 50); + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + public int canTeleportHere() + { + if (this.world.isRemote) + { + return -1; + } + + this.setAddress(this.address); + this.setTargetAddress(this.targetAddress); + + if (!this.addressValid) + { + return 1; + } + + if (this.getEnergyStoredGC() < ENERGY_USE_ON_TELEPORT) + { + return 2; + } + + return 0; // GOOD + } + + @Override + public void update() + { + if (this.ticks % 40 == 0 && !this.world.isRemote) + { + this.setAddress(this.address); + this.setTargetAddress(this.targetAddress); + } + + if (!this.world.isRemote) + { + if (!this.getDisabled(0) && this.targetAddressResult == EnumTelepadSearchResult.VALID && (this.ticks % 5 == 0 || teleporting)) + { + List containedEntities = this.world.getEntitiesWithinAABB(EntityLivingBase.class, + new AxisAlignedBB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getPos().getX() + 1, this.getPos().getY() + 2, this.getPos().getZ() + 1)); + + if (containedEntities.size() > 0 && this.getEnergyStoredGC() >= ENERGY_USE_ON_TELEPORT) + { + ShortRangeTelepadHandler.TelepadEntry entry = ShortRangeTelepadHandler.getLocationFromAddress(this.targetAddress); + + if (entry != null) + { + teleporting = true; + } + } else + { + teleporting = false; + } + } + + if (this.teleporting) + { + this.teleportTime++; + + if (teleportTime >= MAX_TELEPORT_TIME) + { + ShortRangeTelepadHandler.TelepadEntry entry = ShortRangeTelepadHandler.getLocationFromAddress(this.targetAddress); + + BlockVec3 finalPos = (entry == null) ? null : entry.position; + + if (finalPos != null) + { + TileEntity tileAt = finalPos.getTileEntity(this.world); + List containedEntities = this.world.getEntitiesWithinAABB(EntityLivingBase.class, + new AxisAlignedBB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getPos().getX() + 1, this.getPos().getY() + 2, this.getPos().getZ() + 1)); + + if (tileAt instanceof TileEntityShortRangeTelepad) + { + TileEntityShortRangeTelepad destTelepad = (TileEntityShortRangeTelepad) tileAt; + int teleportResult = destTelepad.canTeleportHere(); + if (teleportResult == 0) + { + for (EntityLivingBase e : containedEntities) + { + e.setPosition(finalPos.x + 0.5F, finalPos.y + 0.08F, finalPos.z + 0.5F); + this.world.updateEntityWithOptionalForce(e, true); + if (e instanceof EntityPlayerMP) + { + ((EntityPlayerMP) e).connection.setPlayerLocation(finalPos.x, finalPos.y, finalPos.z, e.rotationYaw, e.rotationPitch); + } + GalacticraftCore.packetPipeline + .sendToDimension(new PacketSimpleAsteroids(PacketSimpleAsteroids.EnumSimplePacketAsteroids.C_TELEPAD_SEND, GCCoreUtil.getDimensionID(this.world), new Object[] + {finalPos, e.getEntityId()}), GCCoreUtil.getDimensionID(this.world)); + } + + if (containedEntities.size() > 0) + { + this.storage.setEnergyStored(this.storage.getEnergyStoredGC() - ENERGY_USE_ON_TELEPORT); + destTelepad.storage.setEnergyStored(this.storage.getEnergyStoredGC() - ENERGY_USE_ON_TELEPORT); + } + } else + { + switch (teleportResult) + { + case -1: + for (EntityLivingBase e : containedEntities) + { + if (e instanceof EntityPlayer) + { + e.sendMessage(new TextComponentString("Cannot Send client-side")); // No + // need + // for + // translation, + // since + // this + // should + // never + // happen + } + } + break; + case 1: + for (EntityLivingBase e : containedEntities) + { + if (e instanceof EntityPlayer) + { + e.sendMessage(new TextComponentString("Target address invalid")); // No + // need + // for + // translation, + // since + // this + // should + // never + // happen + } + } + break; + case 2: + for (EntityLivingBase e : containedEntities) + { + if (e instanceof EntityPlayer) + { + e.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.target_no_energy.name"))); + } + } + break; + } + } + } + } + + this.teleportTime = 0; + this.teleporting = false; + } + } else + { + this.teleportTime = Math.max(--this.teleportTime, 0); + } + } + + super.update(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.inventory = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.getInventory()); + + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.setAddress(nbt.getInteger("Address")); + } + this.targetAddress = nbt.getInteger("TargetAddress"); + this.owner = nbt.getString("Owner"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + ItemStackHelper.saveAllItems(nbt, this.getInventory()); + + nbt.setInteger("TargetAddress", this.targetAddress); + nbt.setInteger("Address", this.address); + nbt.setString("Owner", this.owner); + return nbt; + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + super.addExtraNetworkedData(networkedList); + networkedList.add(targetAddressResult.ordinal()); + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + super.readExtraNetworkedData(dataStream); + targetAddressResult = EnumTelepadSearchResult.values()[dataStream.readInt()]; + } + + @Override + public double getPacketRange() + { + return 24.0D; + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + entityPlayer.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_ASTEROIDS, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + return true; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + for (BlockPos vecToAdd : positions) + ((BlockTelepadFake) AsteroidBlocks.fakeTelepad).makeFakeBlock(world, vecToAdd, placedPosition, + AsteroidBlocks.fakeTelepad.getDefaultState().withProperty(BlockTelepadFake.TOP, vecToAdd.getY() == placedPosition.getY() + 2)); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + // Not actually used - maybe this shouldn't be an IMultiBlock at all? + return EnumBlockMultiType.MINER_BASE; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + for (int y = 0; y < 3; y += 2) + { + if (placedPosition.getY() + y > buildHeight) + { + return; + } + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + if (x == 0 && y == 0 && z == 0) + continue; + positions.add(placedPosition.add(x, y, z)); + } + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new LinkedList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == AsteroidBlocks.fakeTelepad) + { + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(getPos().getX() - 1, getPos().getY(), getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 4, getPos().getZ() + 2); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return this.world.getTileEntity(getPos()) == this && entityPlayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return index == 0; + } + + @Override + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { + return this.isItemValidForSlot(index, itemStackIn); + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public boolean shouldUseEnergy() + { + return !this.getDisabled(0); + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.byIndex((this.getBlockMetadata() & 3) + 2); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + switch (index) + { + case 0: + this.disabled = disabled; + this.disableCooldown = 10; + if (world != null && !world.isRemote) + { + ShortRangeTelepadHandler.addShortRangeTelepad(this); + } + break; + default: + break; + } + } + } + + @Override + public boolean getDisabled(int index) + { + switch (index) + { + case 0: + return this.disabled; + default: + break; + } + + return true; + } + + public void setAddress(int address) + { + if (this.world != null && address != this.address) + { + ShortRangeTelepadHandler.removeShortRangeTeleporter(this); + } + + this.address = address; + + if (this.address >= 0) + { + ShortRangeTelepadHandler.TelepadEntry entry = ShortRangeTelepadHandler.getLocationFromAddress(this.address); + this.addressValid = entry == null || (this.world != null && (entry.dimensionID == GCCoreUtil.getDimensionID(this.world) && entry.position.x == this.getPos().getX() + && entry.position.y == this.getPos().getY() && entry.position.z == this.getPos().getZ())); + } else + { + this.addressValid = false; + } + + if (this.world != null && !this.world.isRemote) + { + ShortRangeTelepadHandler.addShortRangeTelepad(this); + } + } + + public boolean updateTarget() + { + if (this.targetAddress >= 0 && !this.world.isRemote) + { + this.targetAddressResult = EnumTelepadSearchResult.NOT_FOUND; + + ShortRangeTelepadHandler.TelepadEntry addressResult = ShortRangeTelepadHandler.getLocationFromAddress(this.targetAddress); + + if (addressResult != null) + { + if (GCCoreUtil.getDimensionID(this.world) == addressResult.dimensionID) + { + double distance = this.getDistanceSq(addressResult.position.x + 0.5F, addressResult.position.y + 0.5F, addressResult.position.z + 0.5F); + + if (distance < Math.pow(TELEPORTER_RANGE, 2)) + { + if (!addressResult.enabled) + { + this.targetAddressResult = EnumTelepadSearchResult.TARGET_DISABLED; + return false; + } + + this.targetAddressResult = EnumTelepadSearchResult.VALID; + return true; + } else + { + this.targetAddressResult = EnumTelepadSearchResult.TOO_FAR; + return false; + } + } else + { + this.targetAddressResult = EnumTelepadSearchResult.WRONG_DIM; + return false; + } + } else + { + this.targetAddressResult = EnumTelepadSearchResult.NOT_FOUND; + return false; + } + } else + { + this.targetAddressResult = EnumTelepadSearchResult.NOT_FOUND; + return false; + } + } + + public void setTargetAddress(int address) + { + this.targetAddress = address; + this.updateTarget(); + } + + public void setOwner(String owner) + { + this.owner = owner; + } + + public String getOwner() + { + return this.owner; + } + + @SideOnly(Side.CLIENT) + public String getReceivingStatus() + { + if (!this.addressValid) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.invalid_address.name"); + } + + if (this.getEnergyStoredGC() <= 0.0F) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_energy.name"); + } + + if (this.getEnergyStoredGC() <= ENERGY_USE_ON_TELEPORT) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.not_enough_energy.name"); + } + + if (this.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.message.receiving_active.name"); + } + + @SideOnly(Side.CLIENT) + public String getSendingStatus() + { + if (!this.addressValid) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.invalid_target_address.name"); + } + + if (this.targetAddressResult == EnumTelepadSearchResult.TOO_FAR) + { + return EnumColor.RED + GCCoreUtil.translateWithFormat("gui.message.telepad_too_far.name", TELEPORTER_RANGE); + } + + if (this.targetAddressResult == EnumTelepadSearchResult.WRONG_DIM) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.telepad_wrong_dim.name"); + } + + if (this.targetAddressResult == EnumTelepadSearchResult.NOT_FOUND) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.telepad_not_found.name"); + } + + if (this.targetAddressResult == EnumTelepadSearchResult.TARGET_DISABLED) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.message.telepad_target_disabled.name"); + } + + if (this.getEnergyStoredGC() <= 0.0F) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_energy.name"); + } + + if (this.getEnergyStoredGC() <= ENERGY_USE_ON_TELEPORT) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.not_enough_energy.name"); + } + + if (this.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.message.sending_active.name"); + } + + @SideOnly(Side.CLIENT) + public Vector3 getParticleColor(Random rand, boolean sending) + { + float teleportTimeScaled = Math.min(1.0F, this.teleportTime / (float) TileEntityShortRangeTelepad.MAX_TELEPORT_TIME); + float f; + f = rand.nextFloat() * 0.6F + 0.4F; + + if (sending && this.targetAddressResult != EnumTelepadSearchResult.VALID) + { + return new Vector3(f, f * 0.3F, f * 0.3F); + } + + if (!sending && !this.addressValid) + { + return new Vector3(f, f * 0.3F, f * 0.3F); + } + + if (this.getEnergyStoredGC() < ENERGY_USE_ON_TELEPORT) + { + return new Vector3(f, f * 0.6F, f * 0.3F); + } + + float r = f * 0.3F; + float g = f * (0.3F + (teleportTimeScaled * 0.7F)); + float b = f * (1.0F - (teleportTimeScaled * 0.7F)); + + return new Vector3(r, g, b); + } + + @Override + public EnumFacing byIndex() + { + return EnumFacing.NORTH; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityTelepadFake.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityTelepadFake.java new file mode 100644 index 00000000..8f5ebc50 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityTelepadFake.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; + +public class TileEntityTelepadFake extends TileBaseElectricBlock +{ + + // The the position of the main block + @NetworkedField(targetSide = Side.CLIENT) public BlockPos mainBlockPosition; + private WeakReference mainTelepad = null; + @NetworkedField(targetSide = Side.CLIENT) private boolean canConnect = false; + + public TileEntityTelepadFake() + { + super("tile.telepadfake.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + public void setMainBlock(BlockPos mainBlock) + { + this.setMainBlockInternal(mainBlock); + + if (!this.world.isRemote) + { + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + } + } + + private void setMainBlockInternal(BlockPos mainBlock) + { + this.mainBlockPosition = mainBlock; + this.updateConnectable(); + } + + public void onBlockRemoval() + { + TileEntityShortRangeTelepad telepad = this.getBaseTelepad(); + + if (telepad != null) + { + telepad.onDestroy(this); + } + } + + public boolean onActivated(EntityPlayer par5EntityPlayer) + { + TileEntityShortRangeTelepad telepad = this.getBaseTelepad(); + return telepad != null && telepad.onActivated(par5EntityPlayer); + } + + @Override + public void update() + { + super.update(); + + TileEntityShortRangeTelepad telepad = this.getBaseTelepad(); + + if (telepad != null) + { + this.storage.setCapacity(telepad.storage.getCapacityGC()); + this.storage.setMaxExtract(telepad.storage.getMaxExtract()); + this.storage.setMaxReceive(telepad.storage.getMaxReceive()); + this.extractEnergyGC(null, telepad.receiveEnergyGC(null, this.getEnergyStoredGC(), false), false); + } + } + + private TileEntityShortRangeTelepad getBaseTelepad() + { + if (this.mainBlockPosition == null) + { + return null; + } + + if (mainTelepad == null) + { + TileEntity tileEntity = this.world.getTileEntity(this.mainBlockPosition); + + if (tileEntity != null) + { + if (tileEntity instanceof TileEntityShortRangeTelepad) + { + mainTelepad = new WeakReference(((TileEntityShortRangeTelepad) tileEntity)); + } + } + } + + if (mainTelepad == null) + { + this.world.setBlockToAir(this.mainBlockPosition); + } else + { + TileEntityShortRangeTelepad telepad = this.mainTelepad.get(); + + if (telepad != null) + { + return telepad; + } else + { + this.world.removeTileEntity(this.getPos()); + } + } + + return null; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + NBTTagCompound tagCompound = nbt.getCompoundTag("mainBlockPosition"); + this.setMainBlockInternal(new BlockPos(tagCompound.getInteger("x"), tagCompound.getInteger("y"), tagCompound.getInteger("z"))); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + if (this.mainBlockPosition != null) + { + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setInteger("x", this.mainBlockPosition.getX()); + tagCompound.setInteger("y", this.mainBlockPosition.getY()); + tagCompound.setInteger("z", this.mainBlockPosition.getZ()); + nbt.setTag("mainBlockPosition", tagCompound); + } + + return nbt; + } + + @Override + public double getPacketRange() + { + return 30.0D; + } + + @Override + public int getPacketCooldown() + { + return 50; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.mainBlockPosition == null) + { + if (this.world.isRemote || !this.resetMainBlockPosition()) + { + return; + } + } + super.getNetworkedData(sendData); + } + + private boolean resetMainBlockPosition() + { + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + for (int y = -2; y < 1; y += 2) + { + final BlockPos vecToCheck = this.getPos().add(x, y, z); + if (this.world.getTileEntity(vecToCheck) instanceof TileEntityShortRangeTelepad) + { + this.setMainBlock(vecToCheck); + return true; + } + } + } + } + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return false; + } + + @Override + public EnumFacing getElectricInputDirection() + { + if (!this.canConnect) + { + return null; + } + + return EnumFacing.UP; + } + + @Override + public EnumFacing byIndex() + { + return EnumFacing.NORTH; + } + + @Override + public ItemStack getBatteryInSlot() + { + return ItemStack.EMPTY; + } + + private void updateConnectable() + { + if (this.mainBlockPosition != null) + { + if (this.getPos().getX() == mainBlockPosition.getX() && this.getPos().getZ() == mainBlockPosition.getZ()) + { + if (this.getPos().getY() > mainBlockPosition.getY()) + { + // If the block has the same x- and y- coordinates, but is + // above the base block, this is the + // connectable tile + this.canConnect = true; + return; + } + } + } + + this.canConnect = false; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeAsteroids.java new file mode 100644 index 00000000..421637b8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeAsteroids.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import java.util.LinkedList; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeAsteroids extends BiomeGenBaseGC +{ + + public static final Biome asteroid = new BiomeAsteroids(BiomeData.builder().biomeName("Asteroids").build()); + + private BiomeAsteroids(BiomeData properties) + { + super(properties, true); + this.spawnableMonsterList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableCaveCreatureList.clear(); + this.resetMonsterListByMode(ConfigManagerCore.challengeMobDropsAndSpawning); + } + + @Override + public void registerTypes(Biome b) + { + // Currently unused for Asteroids due to adaptive biomes system + BiomeDictionary.addTypes(b, BiomeDictionary.Type.COLD, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SPOOKY); + } + + public void resetMonsterListByMode(boolean challengeMode) + { + this.spawnableMonsterList.clear(); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedZombie.class, 3000, 1, 3)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedSpider.class, 2000, 1, 2)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedSkeleton.class, 1500, 1, 1)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedCreeper.class, 2000, 1, 1)); + if (challengeMode) + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedEnderman.class, 250, 1, 1)); + } + + @Override + public void initialiseMobLists(LinkedList mobInfo) + { + } + + @Override + public float getSpawningChance() + { + return 0.01F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeProviderAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeProviderAsteroids.java new file mode 100644 index 00000000..8a452a6e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeProviderAsteroids.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeProviderSpace; +import net.minecraft.world.biome.Biome; + +public class BiomeProviderAsteroids extends BiomeProviderSpace +{ + + @Override + public Biome getBiome() + { + return BiomeAsteroids.asteroid; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/ChunkProviderAsteroids.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/ChunkProviderAsteroids.java new file mode 100644 index 00000000..84e36370 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/ChunkProviderAsteroids.java @@ -0,0 +1,1109 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; +import micdoodle8.mods.galacticraft.core.perlin.generator.Billowed; +import micdoodle8.mods.galacticraft.core.perlin.generator.Gradient; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base.MapGenAbandonedBase; +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.BlockFlower.EnumFlowerType; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockOldLeaf; +import net.minecraft.block.BlockOldLog; +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.BlockTallGrass; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import net.minecraft.world.gen.feature.WorldGenFlowers; +import net.minecraft.world.gen.feature.WorldGenLakes; +import net.minecraft.world.gen.feature.WorldGenTallGrass; +import net.minecraft.world.gen.feature.WorldGenTrees; + +public class ChunkProviderAsteroids extends ChunkProviderBase +{ + + final Block ASTEROID_STONE = AsteroidBlocks.blockBasic; + final byte ASTEROID_STONE_META_0 = 0; + final byte ASTEROID_STONE_META_1 = 1; + final byte ASTEROID_STONE_META_2 = 2; + + final Block DIRT = Blocks.DIRT; + final byte DIRT_META = 0; + final Block GRASS = Blocks.GRASS; + final byte GRASS_META = 0; + final Block LIGHT = Blocks.GLOWSTONE; + final byte LIGHT_META = 0; + BlockTallGrass.EnumType GRASS_TYPE = BlockTallGrass.EnumType.GRASS; + final BlockFlower FLOWER = Blocks.RED_FLOWER; + + final Block LAVA = Blocks.LAVA; + final byte LAVA_META = 0; + final Block WATER = Blocks.WATER; + final byte WATER_META = 0; + + private final Random rand; + + private final World world; + + private final NoiseModule asteroidDensity; + + private final NoiseModule asteroidTurbulance; + + private final NoiseModule asteroidSkewX; + private final NoiseModule asteroidSkewY; + private final NoiseModule asteroidSkewZ; + + private final SpecialAsteroidBlockHandler coreHandler; + private final SpecialAsteroidBlockHandler shellHandler; + + // DO NOT CHANGE + private static final int CHUNK_SIZE_X = 16; + private static final int CHUNK_SIZE_Y = 256; + private static final int CHUNK_SIZE_Z = 16; + + private static final int MAX_ASTEROID_RADIUS = 25; + private static final int MIN_ASTEROID_RADIUS = 5; + + private static final int MAX_ASTEROID_SKEW = 8; + + private static final int MIN_ASTEROID_Y = 48; + private static final int MAX_ASTEROID_Y = ChunkProviderAsteroids.CHUNK_SIZE_Y - 48; + + private static final int ASTEROID_CHANCE = 800; // About 1 / n chance per XZ + // pair + + private static final int ASTEROID_CORE_CHANCE = 2; // 1 / n chance per + // asteroid + private static final int ASTEROID_SHELL_CHANCE = 2; // 1 / n chance per + // asteroid + + private static final int MIN_BLOCKS_PER_CHUNK = 50; + private static final int MAX_BLOCKS_PER_CHUNK = 200; + + private static final int ILMENITE_CHANCE = 400; + private static final int IRON_CHANCE = 300; + private static final int ALUMINUM_CHANCE = 250; + + private static final int RANDOM_BLOCK_FADE_SIZE = 32; + private static final int FADE_BLOCK_CHANCE = 5; // 1 / n chance of a block + // being in the fade zone + + private static final int NOISE_OFFSET_SIZE = 256; + + private static final float MIN_HOLLOW_SIZE = .6F; + private static final float MAX_HOLLOW_SIZE = .8F; + private static final int HOLLOW_CHANCE = 10; // 1 / n chance per asteroid + private static final int MIN_RADIUS_FOR_HOLLOW = 15; + private static final float HOLLOW_LAVA_SIZE = .12F; + + // Per chunk per asteroid + private static final int TREE_CHANCE = 2; + private static final int TALL_GRASS_CHANCE = 2; + private static final int FLOWER_CHANCE = 2; + private static final int WATER_CHANCE = 2; + private static final int LAVA_CHANCE = 2; + private static final int GLOWSTONE_CHANCE = 20; + + private LinkedList largeAsteroids = new LinkedList(); + private int largeCount = 0; + private static HashSet chunksDone = new HashSet(); + private int largeAsteroidsLastChunkX; + private int largeAsteroidsLastChunkZ; + private final MapGenAbandonedBase dungeonGenerator = new MapGenAbandonedBase(); + + public ChunkProviderAsteroids(World par1World, long par2, boolean par4) + { + this.world = par1World; + this.rand = new Random(par2); + + this.asteroidDensity = new Billowed(this.rand.nextLong(), 2, .25F); + this.asteroidDensity.setFrequency(.009F); + this.asteroidDensity.amplitude = .6F; + + this.asteroidTurbulance = new Gradient(this.rand.nextLong(), 1, .2F); + this.asteroidTurbulance.setFrequency(.08F); + this.asteroidTurbulance.amplitude = .5F; + + this.asteroidSkewX = new Gradient(this.rand.nextLong(), 1, 1); + this.asteroidSkewX.amplitude = ChunkProviderAsteroids.MAX_ASTEROID_SKEW; + this.asteroidSkewX.frequencyX = 0.005F; + + this.asteroidSkewY = new Gradient(this.rand.nextLong(), 1, 1); + this.asteroidSkewY.amplitude = ChunkProviderAsteroids.MAX_ASTEROID_SKEW; + this.asteroidSkewY.frequencyY = 0.005F; + + this.asteroidSkewZ = new Gradient(this.rand.nextLong(), 1, 1); + this.asteroidSkewZ.amplitude = ChunkProviderAsteroids.MAX_ASTEROID_SKEW; + this.asteroidSkewZ.frequencyZ = 0.005F; + + this.coreHandler = new SpecialAsteroidBlockHandler(); + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_2, 5, .3)); + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_1, 7, .3)); + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_0, 11, .25)); + + if (!ConfigManagerAsteroids.disableAluminumGen) + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, (byte) 3, 5, .2)); + if (!ConfigManagerAsteroids.disableIlmeniteGen) + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, (byte) 4, 4, .15)); + if (!ConfigManagerAsteroids.disableIronGen) + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, (byte) 5, 3, .2)); + if (ConfigManagerCore.enableSiliconOreGen) + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.basicBlock, (byte) 8, 2, .15)); // TODO: + // Asteroids + // version + // of + // silicon + // ore + // Solid Meteoric Iron - has no config to disable + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.basicBlock, (byte) 12, 2, .13)); + // Diamond ore - has no config to disable + this.coreHandler.addBlock(new SpecialAsteroidBlock(Blocks.DIAMOND_ORE, (byte) 0, 1, .1)); // TODO: + // Asteroids + // version + // of + // diamond + // ore + + this.shellHandler = new SpecialAsteroidBlockHandler(); + this.shellHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_0, 1, .15)); + this.shellHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_1, 3, .15)); + this.shellHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_2, 1, .15)); + this.shellHandler.addBlock(new SpecialAsteroidBlock(AsteroidBlocks.blockDenseIce, (byte) 0, 1, .15)); + } + + public void generateTerrain(int chunkX, int chunkZ, ChunkPrimer primer, boolean flagDataOnly) + { + this.largeAsteroids.clear(); + this.largeCount = 0; + final Random random = new Random(); + final int asteroidChance = ChunkProviderAsteroids.ASTEROID_CHANCE; + final int rangeY = ChunkProviderAsteroids.MAX_ASTEROID_Y - ChunkProviderAsteroids.MIN_ASTEROID_Y; + final int rangeSize = ChunkProviderAsteroids.MAX_ASTEROID_RADIUS - ChunkProviderAsteroids.MIN_ASTEROID_RADIUS; + + // If there is an asteroid centre nearby, it might need to generate some + // asteroid parts in this chunk + for (int i = chunkX - 3; i < chunkX + 3; i++) + { + int minX = i * 16; + int maxX = minX + ChunkProviderAsteroids.CHUNK_SIZE_X; + for (int k = chunkZ - 3; k < chunkZ + 3; k++) + { + int minZ = k * 16; + int maxZ = minZ + ChunkProviderAsteroids.CHUNK_SIZE_Z; + + // NOTE: IF UPDATING THIS CODE also update addLargeAsteroids() + // which is the same algorithm + // ??? ^^ this now seems redundant + for (int x = minX; x < maxX; x += 2) + { + for (int z = minZ; z < maxZ; z += 2) + { + // The next line is called 3136 times per chunk + // generated. getNoise is a little slow. + if (this.randFromPointPos(x, z) < (this.asteroidDensity.getNoise(x, z) + .4) / asteroidChance) + { + random.setSeed(x + z * 3067); + int y = random.nextInt(rangeY) + ChunkProviderAsteroids.MIN_ASTEROID_Y; + int size = random.nextInt(rangeSize) + ChunkProviderAsteroids.MIN_ASTEROID_RADIUS; + + // Generate the parts of the asteroid which are in + // this chunk + this.generateAsteroid(random, x, y, z, chunkX << 4, chunkZ << 4, size, primer, flagDataOnly); + this.largeCount++; + } + } + } + } + } + } + + private void generateAsteroid(Random rand, int asteroidX, int asteroidY, int asteroidZ, int chunkX, int chunkZ, int size, ChunkPrimer primer, boolean flagDataOnly) + { + SpecialAsteroidBlock core = this.coreHandler.getBlock(rand, size); + + SpecialAsteroidBlock shell = null; + if (rand.nextInt(ChunkProviderAsteroids.ASTEROID_SHELL_CHANCE) == 0) + { + shell = this.shellHandler.getBlock(rand, size); + } + + boolean isHollow = false; + final float hollowSize = rand.nextFloat() * (ChunkProviderAsteroids.MAX_HOLLOW_SIZE - ChunkProviderAsteroids.MIN_HOLLOW_SIZE) + ChunkProviderAsteroids.MIN_HOLLOW_SIZE; + if (rand.nextInt(ChunkProviderAsteroids.HOLLOW_CHANCE) == 0 && size >= ChunkProviderAsteroids.MIN_RADIUS_FOR_HOLLOW) + { + isHollow = true; + shell = new SpecialAsteroidBlock(AsteroidBlocks.blockDenseIce, (byte) 0, 1, .15); + } + + // Add to the list of asteroids for external use + ((WorldProviderAsteroids) this.world.provider).addAsteroid(asteroidX, asteroidY, asteroidZ, size, isHollow ? -1 : core.index); + + final int xMin = this.clamp(Math.max(chunkX, asteroidX - size - ChunkProviderAsteroids.MAX_ASTEROID_SKEW - 2) - chunkX, 0, 16); + final int zMin = this.clamp(Math.max(chunkZ, asteroidZ - size - ChunkProviderAsteroids.MAX_ASTEROID_SKEW - 2) - chunkZ, 0, 16); + final int yMin = asteroidY - size - ChunkProviderAsteroids.MAX_ASTEROID_SKEW - 2; + final int yMax = asteroidY + size + ChunkProviderAsteroids.MAX_ASTEROID_SKEW + 2; + final int xMax = this.clamp(Math.min(chunkX + 16, asteroidX + size + ChunkProviderAsteroids.MAX_ASTEROID_SKEW + 2) - chunkX, 0, 16); + final int zMax = this.clamp(Math.min(chunkZ + 16, asteroidZ + size + ChunkProviderAsteroids.MAX_ASTEROID_SKEW + 2) - chunkZ, 0, 16); + final int xSize = xMax - xMin; + final int ySize = yMax - yMin; + final int zSize = zMax - zMin; + + if (xSize <= 0 || ySize <= 0 || zSize <= 0) + { + return; + } + + final float noiseOffsetX = this.randFromPoint(asteroidX, asteroidY, asteroidZ) * ChunkProviderAsteroids.NOISE_OFFSET_SIZE + chunkX; + final float noiseOffsetY = this.randFromPoint(asteroidX * 7, asteroidY * 11, asteroidZ * 13) * ChunkProviderAsteroids.NOISE_OFFSET_SIZE; + final float noiseOffsetZ = this.randFromPoint(asteroidX * 17, asteroidY * 23, asteroidZ * 29) * ChunkProviderAsteroids.NOISE_OFFSET_SIZE + chunkZ; + this.setOtherAxisFrequency(1F / (size * 2F / 2F)); + + float[] sizeXArray = new float[ySize * zSize]; + float[] sizeZArray = new float[xSize * ySize]; + float[] sizeYArray = new float[xSize * zSize]; + + for (int x = 0; x < xSize; x++) + { + int xx = x * zSize; + float xxx = x + noiseOffsetX; + for (int z = 0; z < zSize; z++) + { + sizeYArray[xx + z] = this.asteroidSkewY.getNoise(xxx, z + noiseOffsetZ); + } + } + + AsteroidData asteroidData = new AsteroidData(isHollow, sizeYArray, xMin, zMin, xMax, zMax, zSize, size, asteroidX, asteroidY, asteroidZ); + this.largeAsteroids.add(asteroidData); + this.largeAsteroidsLastChunkX = chunkX; + this.largeAsteroidsLastChunkZ = chunkZ; + + if (flagDataOnly) + { + return; + } + + for (int y = 0; y < ySize; y++) + { + int yy = y * zSize; + float yyy = y + noiseOffsetY; + for (int z = 0; z < zSize; z++) + { + sizeXArray[yy + z] = this.asteroidSkewX.getNoise(yyy, z + noiseOffsetZ); + } + } + + for (int x = 0; x < xSize; x++) + { + int xx = x * ySize; + float xxx = x + noiseOffsetX; + for (int y = 0; y < ySize; y++) + { + sizeZArray[xx + y] = this.asteroidSkewZ.getNoise(xxx, y + noiseOffsetY); + } + } + + double shellThickness = 0; + int terrainY = 0; + int terrainYY = 0; + + IBlockState asteroidShell = null; + if (shell != null) + { + asteroidShell = shell.block.getStateFromMeta(shell.meta); + shellThickness = 1.0 - shell.thickness; + } + + IBlockState asteroidCore = core.block.getStateFromMeta(core.meta); + IBlockState asteroidRock0 = this.ASTEROID_STONE.getStateFromMeta(this.ASTEROID_STONE_META_0); + IBlockState asteroidRock1 = this.ASTEROID_STONE.getStateFromMeta(this.ASTEROID_STONE_META_1); + IBlockState airBlock = Blocks.AIR.getDefaultState(); + IBlockState dirtBlock = this.DIRT.getStateFromMeta(this.DIRT_META); + IBlockState grassBlock = this.GRASS.getStateFromMeta(this.GRASS_META); + + for (int x = xMax - 1; x >= xMin; x--) + { + int indexXY = (x - xMin) * ySize - yMin; + int indexXZ = (x - xMin) * zSize - zMin; + int distanceX = asteroidX - (x + chunkX); + int indexBaseX = x * ChunkProviderAsteroids.CHUNK_SIZE_Y << 4; + float xx = x + chunkX; + + for (int z = zMin; z < zMax; z++) + { + if (isHollow) + { + float sizeModY = sizeYArray[indexXZ + z]; + terrainY = this.getTerrainHeightFor(sizeModY, asteroidY, size); + terrainYY = this.getTerrainHeightFor(sizeModY, asteroidY - 1, size); + } + + float sizeY = size + sizeYArray[indexXZ + z]; + sizeY *= sizeY; + int distanceZ = asteroidZ - (z + chunkZ); + int indexBase = indexBaseX | z * ChunkProviderAsteroids.CHUNK_SIZE_Y; + float zz = z + chunkZ; + + for (int y = yMin; y < yMax; y++) + { + float dSizeX = distanceX / (size + sizeXArray[(y - yMin) * zSize + z - zMin]); + float dSizeZ = distanceZ / (size + sizeZArray[indexXY + y]); + dSizeX *= dSizeX; + dSizeZ *= dSizeZ; + int distanceY = asteroidY - y; + distanceY *= distanceY; + float distance = dSizeX + distanceY / sizeY + dSizeZ; + float distanceAbove = distance; + distance += this.asteroidTurbulance.getNoise(xx, y, zz); + + if (isHollow && distance <= hollowSize) + { + distanceAbove += this.asteroidTurbulance.getNoise(xx, y + 1, zz); + if (distanceAbove <= 1) + { + if ((y - 1) == terrainYY) + { + int index = indexBase | (y + 1); + primer.setBlockState(x, y + 1, z, this.LIGHT.getStateFromMeta(this.LIGHT_META)); +// blockArray[index] = this.LIGHT; +// metaArray[index] = this.LIGHT_META; + } + } + } + + if (distance <= 1) + { + int index = indexBase | y; + if (isHollow && distance <= hollowSize) + { + if (y == terrainY) + { + primer.setBlockState(x, y, z, grassBlock); +// blockArray[index] = this.GRASS; +// metaArray[index] = this.GRASS_META; + } else if (y < terrainY) + { + primer.setBlockState(x, y, z, dirtBlock); +// blockArray[index] = this.DIRT; +// metaArray[index] = this.DIRT_META; + } else + { + primer.setBlockState(x, y, z, airBlock); +// blockArray[index] = Blocks.air; +// metaArray[index] = 0; + } + } else if (distance <= core.thickness) + { + if (rand.nextBoolean()) + { + primer.setBlockState(x, y, z, asteroidCore); +// blockArray[index] = core.block; +// metaArray[index] = core.meta; + } else + { + primer.setBlockState(x, y, z, asteroidRock0); +// blockArray[index] = this.ASTEROID_STONE; +// metaArray[index] = this.ASTEROID_STONE_META_0; + } + } else if (shell != null && distance >= shellThickness) + { + primer.setBlockState(x, y, z, asteroidShell); +// blockArray[index] = shell.block; +// metaArray[index] = shell.meta; + } else + { + primer.setBlockState(x, y, z, asteroidRock1); +// blockArray[index] = this.ASTEROID_STONE; +// metaArray[index] = this.ASTEROID_STONE_META_1; + } + } + } + } + } + + if (isHollow) + { + shellThickness = 0; + if (shell != null) + { + shellThickness = 1.0 - shell.thickness; + } + for (int x = xMin; x < xMax; x++) + { + int indexXY = (x - xMin) * ySize - yMin; + int indexXZ = (x - xMin) * zSize - zMin; + int distanceX = asteroidX - (x + chunkX); + distanceX *= distanceX; + + for (int z = zMin; z < zMax; z++) + { + float sizeModY = sizeYArray[indexXZ + z]; + float sizeY = size + sizeYArray[indexXZ + z]; + sizeY *= sizeY; + int distanceZ = asteroidZ - (z + chunkZ); + distanceZ *= distanceZ; + + for (int y = yMin; y < yMax; y++) + { + float sizeX = size + sizeXArray[(y - yMin) * zSize + z - zMin]; + float sizeZ = size + sizeZArray[indexXY + y]; + sizeX *= sizeX; + sizeZ *= sizeZ; + int distanceY = asteroidY - y; + distanceY *= distanceY; + float distance = distanceX / sizeX + distanceY / sizeY + distanceZ / sizeZ; + distance += this.asteroidTurbulance.getNoise(x + chunkX, y, z + chunkZ); + + if (distance <= 1) + { + IBlockState state = primer.getBlockState(x, y, z); + IBlockState stateAbove = primer.getBlockState(x, y + 1, z); + if (Blocks.AIR == stateAbove.getBlock() && (state.getBlock() == ASTEROID_STONE || state.getBlock() == GRASS)) + { + if (this.rand.nextInt(GLOWSTONE_CHANCE) == 0) + { + primer.setBlockState(x, y, z, this.LIGHT.getStateFromMeta(this.LIGHT_META)); +// blockArray[index] = this.LIGHT; +// metaArray[index] = this.LIGHT_META; + } + } + } + } + } + } + } + } + + private final void setOtherAxisFrequency(float frequency) + { + this.asteroidSkewX.frequencyY = frequency; + this.asteroidSkewX.frequencyZ = frequency; + + this.asteroidSkewY.frequencyX = frequency; + this.asteroidSkewY.frequencyZ = frequency; + + this.asteroidSkewZ.frequencyX = frequency; + this.asteroidSkewZ.frequencyY = frequency; + } + + private final int clamp(int x, int min, int max) + { + if (x < min) + { + x = min; + } else if (x > max) + { + x = max; + } + return x; + } + + private final double clamp(double x, double min, double max) + { + if (x < min) + { + x = min; + } else if (x > max) + { + x = max; + } + return x; + } + + private final int getTerrainHeightFor(float yMod, int asteroidY, int asteroidSize) + { + return (int) (asteroidY - asteroidSize / 4 + yMod * 1.5F); + } + + private final int getTerrainHeightAt(int x, int z, float[] yModArray, int xMin, int zMin, int zSize, int asteroidY, int asteroidSize) + { + final int index = (x - xMin) * zSize - zMin; + if (index < yModArray.length && index >= 0) + { + final float yMod = yModArray[index]; + return this.getTerrainHeightFor(yMod, asteroidY, asteroidSize); + } + return 1; + } + + @Override + public Chunk generateChunk(int par1, int par2) + { + ChunkPrimer primer = new ChunkPrimer(); +// long time1 = System.nanoTime(); + this.rand.setSeed(par1 * 341873128712L + par2 * 132897987541L); +// final Block[] ids = new Block[65536]; +// final byte[] meta = new byte[65536]; + this.generateTerrain(par1, par2, primer, false); + // this.biomesForGeneration = + // this.world.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, + // par1 * 16, par2 * 16, 16, 16); + + if (this.world.provider instanceof WorldProviderAsteroids && ((WorldProviderAsteroids) this.world.provider).checkHasAsteroids()) + { + this.dungeonGenerator.generate(this.world, par1, par2, primer); + } + +// long time2 = System.nanoTime(); + final Chunk var4 = new Chunk(this.world, primer, par1, par2); + final byte[] biomesArray = var4.getBiomeArray(); + + final byte b = (byte) Biome.getIdForBiome(BiomeAdaptive.biomeDefault); + for (int i = 0; i < biomesArray.length; ++i) + { + biomesArray[i] = b; + } + +// long time3 = System.nanoTime(); + this.generateSkylightMap(var4, par1, par2); +// long time4 = System.nanoTime(); +// if (ConfigManagerCore.enableDebug) +// { +// BlockVec3 vec = new BlockVec3(par1, par2, 0); +// if (chunksDone.contains(vec)) System.out.println("Done chunk already at "+par1+","+par2); +// else chunksDone.add(vec); +// System.out.println("Chunk gen: " + timeString(time1, time4) + " at "+par1+","+par2 + " - L"+this.largeCount+ " H"+this.largeAsteroids.size()+ " Terrain:"+timeString(time1, time2)+ " Biomes:"+timeString(time2,time3)+ " Light:"+timeString(time3, time4)); +// } + return var4; + } + + private int getIndex(int x, int y, int z) + { + return x * ChunkProviderAsteroids.CHUNK_SIZE_Y * 16 | z * ChunkProviderAsteroids.CHUNK_SIZE_Y | y; + } + + private String timeString(long time1, long time2) + { + int ms100 = (int) ((time2 - time1) / 10000); + int msdecimal = ms100 % 100; + String msd = ((ms100 < 10) ? "0" : "") + ms100; + return "" + ms100 / 100 + "." + msd + "ms"; + } + + private float randFromPoint(int x, int y, int z) + { + int n = x + z * 57 + y * 571; + n ^= n << 13; + n = n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff; + return 1.0F - n / 1073741824.0F; + } + + private float randFromPoint(int x, int z) + { + int n = x + z * 57; + n ^= n << 13; + n = n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff; + return 1.0F - n / 1073741824.0F; + } + + private float randFromPointPos(int x, int z) + { + int n = x + z * 57; + n ^= n << 13; + n = n * (n * n * 15731 + 789221) + 1376312589 & 0x3fffffff; + return 1.0F - n / 1073741824.0F; + } + + @Override + public void populate(int chunkX, int chunkZ) + { + int x = chunkX << 4; + int z = chunkZ << 4; + if (!ChunkProviderAsteroids.chunksDone.add(new BlockVec3(x, 0, z))) + { + return; + } + +// BlockFalling.fallInstantly = true; +// this.world.getBiome(new BlockPos(x + 16, 0, z + 16)); +// BlockFalling.fallInstantly = false; + + this.rand.setSeed(this.world.getSeed()); + long var7 = this.rand.nextLong() / 2L * 2L + 1L; + long var9 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(chunkX * var7 + chunkZ * var9 ^ this.world.getSeed()); + + // 50:50 chance to include small blocks each chunk + if (this.rand.nextBoolean()) + { + double density = this.asteroidDensity.getNoise(chunkX * 16, chunkZ * 16) * 0.54; + double numOfBlocks = this.clamp(this.randFromPoint(chunkX, chunkZ), .4, 1) * ChunkProviderAsteroids.MAX_BLOCKS_PER_CHUNK * density + ChunkProviderAsteroids.MIN_BLOCKS_PER_CHUNK; + int y0 = this.rand.nextInt(2); + Block block; + int meta; + int yRange = ChunkProviderAsteroids.MAX_ASTEROID_Y - ChunkProviderAsteroids.MIN_ASTEROID_Y; + x += 4; + z += 4; + + for (int i = 0; i < numOfBlocks; i++) + { + int y = this.rand.nextInt(yRange) + ChunkProviderAsteroids.MIN_ASTEROID_Y; + + // 50:50 chance vertically as well + if (y0 == (y / 16) % 2) + { + int px = x + this.rand.nextInt(ChunkProviderAsteroids.CHUNK_SIZE_X); + int pz = z + this.rand.nextInt(ChunkProviderAsteroids.CHUNK_SIZE_Z); + + block = this.ASTEROID_STONE; + meta = this.ASTEROID_STONE_META_1; + + if (this.rand.nextInt(ILMENITE_CHANCE) == 0) + { + meta = 4; + + if (ConfigManagerAsteroids.disableIlmeniteGen) + { + continue; + } + } else if (this.rand.nextInt(IRON_CHANCE) == 0) + { + meta = 5; + + if (ConfigManagerAsteroids.disableIronGen) + { + continue; + } + } else if (this.rand.nextInt(ALUMINUM_CHANCE) == 0) + { + meta = 3; + + if (ConfigManagerAsteroids.disableAluminumGen) + { + continue; + } + } + + world.setBlockState(new BlockPos(px, y, pz), block.getStateFromMeta(meta), 2); + int count = 9; + if (!(world.getBlockState(new BlockPos(px - 1, y, pz)).getBlock() instanceof BlockAir)) + { + count = 1; + } else if (!(world.getBlockState(new BlockPos(px - 2, y, pz)).getBlock() instanceof BlockAir)) + { + count = 3; + } else if (!(world.getBlockState(new BlockPos(px - 3, y, pz)).getBlock() instanceof BlockAir)) + { + count = 5; + } else if (!(world.getBlockState(new BlockPos(px - 4, y, pz)).getBlock() instanceof BlockAir)) + { + count = 7; + } +//LIGHTEMP world.setLightFor(EnumSkyBlock.BLOCK, new BlockPos(px - (count > 1 ? 1 : 0), y, pz), count); + } + } + } + + if (this.largeAsteroidsLastChunkX != chunkX || this.largeAsteroidsLastChunkZ != chunkZ) + { + this.generateTerrain(chunkX, chunkZ, null, true); + } + + this.rand.setSeed(chunkX * var7 + chunkZ * var9 ^ this.world.getSeed()); + + // Look for hollow asteroids to populate + if (!this.largeAsteroids.isEmpty()) + { + for (AsteroidData asteroidIndex : new ArrayList(this.largeAsteroids)) + { + if (!asteroidIndex.isHollow) + { + continue; + } + + float[] sizeYArray = asteroidIndex.sizeYArray; + int xMin = asteroidIndex.xMinArray; + int zMin = asteroidIndex.zMinArray; + int zSize = asteroidIndex.zSizeArray; + int asteroidY = asteroidIndex.asteroidYArray; + int asteroidSize = asteroidIndex.asteroidSizeArray; + boolean treesdone = false; + + if (ConfigManagerCore.challengeAsteroidPopulation || rand.nextInt(ChunkProviderAsteroids.TREE_CHANCE) == 0) + { + int treeType = rand.nextInt(3); + if (treeType == 1) + { + treeType = 0; + } + IBlockState log = Blocks.LOG.getDefaultState().withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.OAK); + IBlockState leaves = Blocks.LEAVES.getDefaultState().withProperty(BlockOldLeaf.VARIANT, BlockPlanks.EnumType.OAK).withProperty(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + WorldGenTrees wg = new WorldGenTrees(false, 2, log, leaves, false); + for (int tries = 0; tries < 5; tries++) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + if (wg.generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k))) + { + break; + } + } + treesdone = true; + } + if (!treesdone || rand.nextInt(ChunkProviderAsteroids.TALL_GRASS_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + new WorldGenTallGrass(GRASS_TYPE).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + if (rand.nextInt(ChunkProviderAsteroids.FLOWER_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + int[] types = new int[] + {2, 4, 5, 7}; + new WorldGenFlowers(this.FLOWER, EnumFlowerType.getType(BlockFlower.EnumFlowerColor.RED, types[rand.nextInt(types.length)])).generate(world, rand, + new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + if (rand.nextInt(ChunkProviderAsteroids.LAVA_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + new WorldGenLakes(this.LAVA).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + if (rand.nextInt(ChunkProviderAsteroids.WATER_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + new WorldGenLakes(this.WATER).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + } + } + + // Update all block lighting + for (int xx = 0; xx < 16; xx++) + { + int xPos = x + xx; + for (int zz = 0; zz < 16; zz++) + { + int zPos = z + zz; + + // Asteroid at min height 48, size 20, can't have lit blocks + // below 16 + for (int y = 16; y < 240; y++) + { +//LIGHTTEMP world.checkLightFor(EnumSkyBlock.BLOCK, new BlockPos(xPos, y, zPos)); + } + } + } + + this.dungeonGenerator.generateStructure(this.world, this.rand, new ChunkPos(chunkX, chunkZ)); + } + + @Override + public void recreateStructures(Chunk chunk, int x, int z) + { + this.dungeonGenerator.generate(this.world, x, z, null); + } + + public void generateSkylightMap(Chunk chunk, int cx, int cz) + { +// World w = chunk.getWorld(); +// boolean flagXChunk = w.getChunkProvider().chunkExists(cx - 1, cz); +// boolean flagZUChunk = w.getChunkProvider().chunkExists(cx, cz + 1); +// boolean flagZDChunk = w.getChunkProvider().chunkExists(cx, cz - 1); +// boolean flagXZUChunk = w.getChunkProvider().chunkExists(cx - 1, cz + 1); +// boolean flagXZDChunk = w.getChunkProvider().chunkExists(cx - 1, cz - 1); + + boolean flag = world.provider.hasSkyLight(); + for (int j = 0; j < 16; j++) + { + if (chunk.getBlockStorageArray()[j] == null) + { + chunk.getBlockStorageArray()[j] = new ExtendedBlockStorage(j << 4, flag); + } + } + + int i = chunk.getTopFilledSegment(); + chunk.heightMapMinimum = Integer.MAX_VALUE; + + for (int j = 0; j < 16; ++j) + { + int k = 0; + + while (k < 16) + { + chunk.precipitationHeightMap[j + (k << 4)] = -999; + int y = i + 15; + + while (true) + { + if (y > 0) + { + if (chunk.getBlockLightOpacity(new BlockPos(j, y - 1, k)) == 0) + { + --y; + continue; + } + + chunk.heightMap[k << 4 | j] = y; + + if (y < chunk.heightMapMinimum) + { + chunk.heightMapMinimum = y; + } + } + + ++k; + break; + } + } + } + + for (AsteroidData a : this.largeAsteroids) + { + int yMin = a.asteroidYArray - a.asteroidSizeArray; + int yMax = a.asteroidYArray + a.asteroidSizeArray; + int xMin = a.xMinArray; + if (yMin < 0) + { + yMin = 0; + } + if (yMax > 255) + { + yMax = 255; + } + if (xMin == 0) + { + xMin = 1; + } + for (int x = a.xMax - 1; x >= xMin; x--) + { + for (int z = a.zMinArray; z < a.zMax; z++) + { + for (int y = yMin; y < yMax; y++) + { + if (chunk.getBlockState(x - 1, y, z).getBlock() instanceof BlockAir && !(chunk.getBlockState(x, y, z).getBlock() instanceof BlockAir)) + { + int count = 2; + + if (x > 1) + { + if ((chunk.getBlockState(x - 2, y, z).getBlock() instanceof BlockAir)) + { + count += 2; + } + } + if (x > 2) + { + if ((chunk.getBlockState(x - 3, y, z).getBlock() instanceof BlockAir)) + { + count += 2; + } + if ((chunk.getBlockState(x - 3, y + 1, z).getBlock() instanceof BlockAir)) + { + count++; + } + if ((chunk.getBlockState(x - 3, y + 1, z).getBlock() instanceof BlockAir)) + { + count++; + } + if ((z > 0 /* + * || ((xPos & 15) > 2 ? flagZDChunk + * : flagXZDChunk) + */) && (chunk.getBlockState(x - 3, y, z - 1).getBlock() instanceof BlockAir)) + { + count++; + } + if ((z < 15/* + * || ((xPos & 15) > 2 ? flagZUChunk + * : flagXZUChunk) + */) && (chunk.getBlockState(x - 3, y, z + 1).getBlock() instanceof BlockAir)) + { + count++; + } + } + if (x > 3) + { + if ((chunk.getBlockState(x - 4, y, z).getBlock() instanceof BlockAir)) + { + count += 2; + } + if ((chunk.getBlockState(x - 4, y + 1, z).getBlock() instanceof BlockAir)) + { + count++; + } + if ((chunk.getBlockState(x - 4, y + 1, z).getBlock() instanceof BlockAir)) + { + count++; + } + if ((z > 0/* + * || ((xPos & 15) > 3 ? flagZDChunk : + * flagXZDChunk) + */) && !(chunk.getBlockState(x - 4, y, z - 1).getBlock() instanceof BlockAir)) + { + count++; + } + if ((z < 15/* + * || ((xPos & 15) > 3 ? flagZUChunk + * : flagXZUChunk) + */) && !(chunk.getBlockState(x - 4, y, z + 1).getBlock() instanceof BlockAir)) + { + count++; + } + } + if (count > 12) + { + count = 12; + } + if (count > 12) + count = 12; + chunk.setBlockState(new BlockPos(x - 1, y, z), GCBlocks.brightAir.getStateFromMeta(13 - count)); + ExtendedBlockStorage extendedblockstorage = chunk.getBlockStorageArray()[y >> 4]; + if (extendedblockstorage != null) + { + extendedblockstorage.setBlockLight(x - 1, y & 15, z, count + 2); + } + } + } + } + } + } + + chunk.setModified(true); + } + + public void resetBase() + { + this.dungeonGenerator.reset(); + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + Biome biome = this.world.getBiome(pos); + return biome.getSpawnableList(creatureType); + } + + /** + * Whether a large asteroid is located the provided coordinates + * + * @param x0 X-Coordinate to check, in Block Coords + * @param z0 Z-Coordinate to check, in Block Coords + * @return True if large asteroid is located here, False if not + */ + public BlockVec3 isLargeAsteroidAt(int x0, int z0) + { + int xToCheck; + int zToCheck; + for (int i0 = 0; i0 <= 32; i0++) + { + for (int i1 = -i0; i1 <= i0; i1++) + { + xToCheck = (x0 >> 4) + i0; + zToCheck = (z0 >> 4) + i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + + xToCheck = (x0 >> 4) + i0; + zToCheck = (z0 >> 4) - i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + + xToCheck = (x0 >> 4) - i0; + zToCheck = (z0 >> 4) + i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + + xToCheck = (x0 >> 4) - i0; + zToCheck = (z0 >> 4) - i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + } + } + + return null; + } + + private boolean isLargeAsteroidAt0(int x0, int z0) + { + for (int x = x0; x < x0 + ChunkProviderAsteroids.CHUNK_SIZE_X; x += 2) + { + for (int z = z0; z < z0 + ChunkProviderAsteroids.CHUNK_SIZE_Z; z += 2) + { + if ((Math.abs(this.randFromPoint(x, z)) < (this.asteroidDensity.getNoise(x, z) + .4) / ChunkProviderAsteroids.ASTEROID_CHANCE)) + { + return true; + } + } + } + + return false; + } + + public static void reset() + { + chunksDone.clear(); + } + + private class AsteroidData + { + + public boolean isHollow; + public float[] sizeYArray; + public int xMinArray; + public int zMinArray; + public int xMax; + public int zMax; + public int zSizeArray; + public int asteroidSizeArray; + public int asteroidXArray; + public int asteroidYArray; + public int asteroidZArray; + + public AsteroidData(boolean hollow, float[] sizeYArray2, int xMin, int zMin, int xmax, int zmax, int zSize, int size, int asteroidX, int asteroidY, int asteroidZ) + { + this.isHollow = hollow; + this.sizeYArray = sizeYArray2.clone(); + this.xMinArray = xMin; + this.zMinArray = zMin; + this.xMax = xmax; + this.zMax = zmax; + this.zSizeArray = zSize; + this.asteroidSizeArray = size; + this.asteroidXArray = asteroidX; + this.asteroidYArray = asteroidY; + this.asteroidZArray = asteroidZ; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlock.java new file mode 100644 index 00000000..6eb022e2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlock.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import java.util.ArrayList; +import net.minecraft.block.Block; + +public class SpecialAsteroidBlock +{ + + public Block block; + public byte meta; + public int probability; + public double thickness; // Arbitrary scale from 0 to 1; + public int index; + public static ArrayList register = new ArrayList<>(); + + public SpecialAsteroidBlock(Block block, byte meta, int probability, double thickness) + { + this.block = block; + this.meta = meta; + this.probability = probability; + this.thickness = thickness; + this.index = register.size(); + register.add(this); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlockHandler.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlockHandler.java new file mode 100644 index 00000000..3f25f203 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlockHandler.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import java.util.ArrayList; +import java.util.Random; + +public class SpecialAsteroidBlockHandler +{ + + ArrayList asteroidBlocks; + + public SpecialAsteroidBlockHandler(SpecialAsteroidBlock... asteroidBlocks) + { + this.asteroidBlocks = new ArrayList(); + for (SpecialAsteroidBlock asteroidBlock : this.asteroidBlocks) + { + for (int i = 0; i < asteroidBlock.probability; i++) + { + this.asteroidBlocks.add(asteroidBlock); + } + } + } + + public SpecialAsteroidBlockHandler() + { + this.asteroidBlocks = new ArrayList(); + } + + public void addBlock(SpecialAsteroidBlock asteroidBlock) + { + for (int i = 0; i < asteroidBlock.probability; i++) + { + this.asteroidBlocks.add(asteroidBlock); + } + } + + public SpecialAsteroidBlock getBlock(Random rand, int size) + { + int s = this.asteroidBlocks.size(); + if (s < 10) + { + return this.asteroidBlocks.get(rand.nextInt(s)); + } + + Double r = rand.nextDouble(); + int index = (int) (s * Math.pow(r, (size + 5) * 0.05D)); + return this.asteroidBlocks.get(index); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseConfiguration.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseConfiguration.java new file mode 100644 index 00000000..042fff6b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseConfiguration.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base.BaseDeck.EnumBaseType; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base.BaseRoom.EnumRoomType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; + +public class BaseConfiguration +{ + + private final static int HANGAR_AIRLOCK_HEIGHT = 6; + private final static int HANGAR_AIRLOCK_WIDTH = 7; + private int yPosition; + private int baseType; + private boolean hangar; + private int roomHeight; + private int roomDepth; + private IBlockState wallBlock; + private int roomsNo; + private int[] randomRoomTypes; + private EnumRoomType[] roomTypes = EnumRoomType.values(); + + public BaseConfiguration() + { + } + + public BaseConfiguration(int yPosition, Random rand) + { + BaseDeck.EnumBaseType[] types = BaseDeck.EnumBaseType.values(); + this.yPosition = yPosition - 2 + rand.nextInt(5); + this.baseType = rand.nextInt(types.length); + this.hangar = rand.nextInt(3) == 0; + this.roomHeight = types[this.baseType].height; + this.roomDepth = this.hangar ? 7 : rand.nextInt(3) + 5; + this.wallBlock = types[this.baseType].wall; + this.roomsNo = rand.nextInt(2) + 2; + this.createRandomRoomList(rand); + } + + private void createRandomRoomList(Random rand) + { + int range = this.roomTypes.length; + int size = this.hangar ? 8 : this.roomsNo * 6; + this.randomRoomTypes = new int[size]; + for (int i = 0; i < size; i++) + { + this.randomRoomTypes[i] = i % range; + } + int index, temp; + for (int i = size - 1; i > 0; i--) + { + index = rand.nextInt(i + 1); + if (i == index) + continue; + temp = this.randomRoomTypes[index]; + this.randomRoomTypes[index] = this.randomRoomTypes[i]; + this.randomRoomTypes[i] = temp; + } + + // Make sure there's a Cargo Loader on lower tier (50/50 chance this + // causes one other room to be missed completely, that's OK!) + if (this.hangar) + { + boolean storeFound = false; + for (int i = 0; i < 4; i++) + { + if (this.randomRoomTypes[i] == EnumRoomType.STORE.ordinal()) + { + storeFound = true; + break; + } + } + if (!storeFound) + { + this.randomRoomTypes[rand.nextInt(4)] = EnumRoomType.STORE.ordinal(); + } + } + } + + public void writeToNBT(NBTTagCompound tagCompound) + { + tagCompound.setInteger("yPos", this.yPosition); + tagCompound.setInteger("dT", this.baseType + (this.hangar ? 16 : 0)); + tagCompound.setInteger("rmD", this.roomDepth); + tagCompound.setInteger("rmN", this.roomsNo); + } + + public void readFromNBT(NBTTagCompound tagCompound) + { + try + { + this.yPosition = tagCompound.getInteger("yPos"); + this.baseType = tagCompound.getInteger("dT"); + this.hangar = false; + if (this.baseType >= 16) + { + this.hangar = true; + this.baseType -= 16; + } + this.roomDepth = tagCompound.getInteger("rmD"); + this.roomsNo = tagCompound.getInteger("rmN"); + this.roomHeight = BaseDeck.EnumBaseType.values()[this.baseType].height; + this.wallBlock = BaseDeck.EnumBaseType.values()[this.baseType].wall; + } catch (Exception e) + { + System.err.println("Failed to read Abandoned Base configuration from NBT"); + System.err.println(tagCompound.toString()); + } + } + + public int getYPosition() + { + return this.yPosition; + } + + public IBlockState getWallBlock() + { + return this.wallBlock; + } + + public int getRoomHeight() + { + return hangar ? HANGAR_AIRLOCK_HEIGHT : this.roomHeight; + } + + public int getRoomDepth() + { + return this.roomDepth; + } + + public EnumBaseType getDeckType() + { + return BaseDeck.EnumBaseType.values()[this.baseType]; + } + + public boolean isHangarDeck() + { + return hangar; + } + + public int getCorridorWidth() + { + return hangar ? HANGAR_AIRLOCK_WIDTH : this.getDeckType().width; + } + + public int getRoomsNo() + { + return hangar ? 2 : roomsNo; + } + + public int getCorridorLength() + { + if (getRoomsNo() == 1) + return BaseDeck.ROOMLARGE; + + if (getRoomsNo() == 2) + return BaseDeck.ROOMLARGE + BaseDeck.ROOMLARGE; + + return getRoomsNo() * BaseDeck.ROOMSMALL + 2 * (BaseDeck.ROOMLARGE - BaseDeck.ROOMSMALL); + } + + public EnumRoomType getRandomRoom(int i) + { + return roomTypes[this.randomRoomTypes[i % this.randomRoomTypes.length]]; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseDeck.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseDeck.java new file mode 100644 index 00000000..a31e929f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseDeck.java @@ -0,0 +1,734 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class BaseDeck extends SizedPiece +{ + + static final int ROOMSMALL = 6; + static final int ROOMLARGE = 8; + protected int roomsOnSide; + protected int roomDepth; + protected int largeRoomPosA; + protected int largeRoomPosB; + protected int deckTier; // flag 1 means lowest deck in a stack, flag 2 is + // for highest deck, 0 is for middle decks - flag 4 + // is for control room + private ArrayList otherDecks = null; + + public enum EnumBaseType + { + + HUMANOID(5, 3, GCBlocks.basicBlock.getStateFromMeta(4), new ItemStack(Items.GHAST_TEAR, 3, 0)), + AVIAN(4, 3, GCBlocks.blockMoon.getStateFromMeta(4), new ItemStack(AsteroidsItems.strangeSeed, 1, 1)), + TUNNELER(4, 4, GCBlocks.blockMoon.getStateFromMeta(4), new ItemStack(AsteroidsItems.strangeSeed, 1, 0)); + + public final int height; + public final int width; + public final IBlockState wall; + public final ItemStack treasure; + + EnumBaseType(int height, int width, IBlockState wallBlock, ItemStack treasure) + { + this.height = height; + this.width = width; + this.wall = wallBlock; + this.treasure = treasure; + } + } + + public BaseDeck() + { + } + + public BaseDeck(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosY, int blockPosZ, int tier, EnumFacing dir) + { + super(configuration, configuration.getCorridorWidth() + 1, configuration.getRoomHeight() + 1, configuration.getCorridorLength(), dir); + this.roomsOnSide = configuration.getRoomsNo(); + this.roomDepth = configuration.getRoomDepth() + (tier == 0 ? 1 : 0); + this.deckTier = tier; + this.setCoordBaseMode(EnumFacing.NORTH); + if (this.getDirection().getAxis() == EnumFacing.Axis.X) + { + int w = this.sizeX; + this.sizeX = this.sizeZ; + this.sizeZ = w; + } + int xMin = blockPosX - this.sizeX / 2; + int zMin = blockPosZ - this.sizeZ / 2; + this.boundingBox = new StructureBoundingBox(xMin, blockPosY, zMin, xMin + this.sizeX, blockPosY + this.sizeY, zMin + this.sizeZ); + if (this.roomsOnSide <= 1) + { + largeRoomPosA = 0; + largeRoomPosB = 2; + } else + { + largeRoomPosA = rand.nextInt(this.roomsOnSide - 1); + largeRoomPosB = largeRoomPosA + 1 + rand.nextInt(this.roomsOnSide - largeRoomPosA - 1); + } + + if (tier == 1) // 1 means lowest tier and there are going to be some + // higher ones + { + this.createOtherDecks(configuration, rand, blockPosX, blockPosY, blockPosZ); + } + + // Special settings for Control Room + if ((tier & 4) == 4) + { + this.roomDepth -= 2; + if (this.getDirection().getAxis() == EnumFacing.Axis.X) + { + this.sizeZ += 4; + } else + { + this.sizeX += 4; + } + xMin = blockPosX - this.sizeX / 2; + zMin = blockPosZ - this.sizeZ / 2; + switch (this.getDirection()) + { + case NORTH: + this.sizeZ++; + break; + case SOUTH: + zMin--; + this.sizeZ++; + break; + case WEST: + this.sizeX++; + break; + case EAST: + default: + xMin--; + this.sizeX++; + break; + } + this.boundingBox = new StructureBoundingBox(xMin, blockPosY, zMin, xMin + this.sizeX, blockPosY + this.sizeY, zMin + this.sizeZ); + } + } + + private void createOtherDecks(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosY, int blockPosZ) + { + this.otherDecks = new ArrayList(); + if (this.configuration.isHangarDeck()) + { + this.otherDecks.add(new BaseDeck(configuration, rand, blockPosX, blockPosY + this.sizeY + 1, blockPosZ, 6, this.direction)); + } else + { + this.otherDecks.add(new BaseDeck(configuration, rand, blockPosX, blockPosY + this.sizeY, blockPosZ, 0, this.direction)); + this.otherDecks.add(new BaseDeck(configuration, rand, blockPosX, blockPosY + this.sizeY + this.sizeY, blockPosZ, 2, this.direction)); + } + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + int details = this.deckTier + (this.largeRoomPosA << 4) + (this.largeRoomPosB << 8); + tagCompound.setInteger("dD", details); + if (this.otherDecks != null) + { + NBTTagList tagList = new NBTTagList(); + for (BaseDeck deck : this.otherDecks) + { + NBTTagCompound tag1 = new NBTTagCompound(); + deck.writeStructureToNBT(tag1); + tagList.appendTag(tag1); + } + tagCompound.setTag("oD", tagList); + } + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + try + { + int details = tagCompound.getInteger("dD"); + this.deckTier = details & 15; + this.largeRoomPosB = details >> 8; + this.largeRoomPosA = (details >> 4) & 15; + this.roomsOnSide = configuration.getRoomsNo(); + this.roomDepth = configuration.getRoomDepth() + (this.deckTier == 0 ? 1 : 0) - ((this.deckTier & 4) == 4 ? 3 : 0); + + if (tagCompound.hasKey("oD")) + { + NBTTagList tagList = tagCompound.getTagList("oD", 10); + this.otherDecks = new ArrayList(); + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound tagAt = tagList.getCompoundTagAt(i); + BaseDeck deck = new BaseDeck(); + deck.readStructureFromNBT(tagAt, manager); + this.otherDecks.add(deck); + } + } + } catch (Exception e) + { + System.err.println("Failed to read Abandoned Base configuration from NBT"); + System.err.println(tagCompound.toString()); + } + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox chunkBounds) + { + IBlockState block1; + IBlockState blockWall = this.configuration.getWallBlock(); + IBlockState blockGrid = AsteroidBlocks.blockWalkway.getDefaultState(); + Block blockStair = GCBlocks.moonStoneStairs; + IBlockState blockAir = Blocks.AIR.getDefaultState(); + boolean directionNS = this.getDirection().getAxis() == EnumFacing.Axis.Z; + int ceilingSpacer = (directionNS ? this.sizeZ : this.sizeX) / this.roomsOnSide + 1; + int ceilingDeco = ceilingSpacer; + + int startX = 0; + int startZ = 0; + int endX = this.sizeX; + int endZ = this.sizeZ; + int endY = this.sizeY; + if (this.configuration.getDeckType() == EnumBaseType.AVIAN && !this.configuration.isHangarDeck()) + endY--; + + // This is the central corridor of every base + for (int x = startX; x <= endX; x++) + { + for (int z = startZ; z <= endZ; z++) + { + for (int y = 0; y <= endY; y++) + { + if (x == startX || x == endX || y == 0 || y == endY || z == startZ || z == endZ) + { + boolean skipCap = false; + if (this.configuration.isHangarDeck() && this.deckTier == 1 && (this.getDirection() == EnumFacing.NORTH && z == endZ || this.getDirection() == EnumFacing.SOUTH && z == startZ + || this.getDirection() == EnumFacing.WEST && x == endX || this.getDirection() == EnumFacing.EAST && x == startX)) + { + // Make airlock at the hangar end, if it's a hangar + // deck + IBlockState blockLintel = GCBlocks.airLockFrame.getDefaultState(); + IBlockState blockAirlock = GCBlocks.airLockFrame.getStateFromMeta(1); + if ((!directionNS && (z == startZ + 1 || z == endZ - 1) || directionNS && (x == startX + 1 || x == endX - 1)) && y < sizeY - 1) + { + this.setBlockState(worldIn, blockLintel, x, y, z, chunkBounds); + } else if (y >= endY - 1 || directionNS && (x == startX || x == endX) || !directionNS && (z == startZ || z == endZ)) + { + this.setBlockState(worldIn, blockWall, x, y, z, chunkBounds); + } else if (y == 0 || y == endY - 2) + { + // Test mid point bottom + if (y == 0 && (!directionNS && z == (startZ + endZ) / 2 || directionNS && x == (startX + endX) / 2)) + this.setBlockState(worldIn, blockAirlock, x, y, z, chunkBounds); + else + this.setBlockState(worldIn, blockLintel, x, y, z, chunkBounds); + skipCap = true; + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } + // Skip certain blocks at top and bottom to give + // chamfered edge + else if (!((y == 0 && (this.deckTier & 1) == 1 || y == endY && (this.deckTier & 1) == 2) + && (directionNS && (z == startZ || z == endZ) || !directionNS && (x == startX || x == endX)))) + { + if (y == 0 && (this.deckTier & 1) == 1 && this.configuration.getDeckType() == EnumBaseType.HUMANOID + && (directionNS && (x == startX + 2 + (this.configuration.isHangarDeck() ? 1 : 0) || x == startX + 4 + (this.configuration.isHangarDeck() ? 1 : 0)) + || !directionNS && (z == startZ + 2 + (this.configuration.isHangarDeck() ? 1 : 0) || z == startZ + 4 + (this.configuration.isHangarDeck() ? 1 : 0)))) + { + this.setBlockState(worldIn, blockGrid, x, y, z, chunkBounds); + } else if (!this.configuration.isHangarDeck() && (this.getDirection() == EnumFacing.SOUTH && z == endZ || this.getDirection() == EnumFacing.NORTH && z == startZ + || this.getDirection() == EnumFacing.EAST && x == endX || this.getDirection() == EnumFacing.WEST && x == startX)) + { + // Some end windows at the ends of the corridors + IBlockState windowOrWall = blockWall; + IBlockState blockGlass; + switch (this.configuration.getDeckType()) + { + case AVIAN: + blockGlass = GCBlocks.spaceGlassTinVanilla.getDefaultState(); + break; + case TUNNELER: + blockGlass = GCBlocks.spaceGlassTinStrong.getDefaultState(); + break; + case HUMANOID: + default: + blockGlass = GCBlocks.spaceGlassTinClear.getDefaultState(); + break; + } + + int w, startW, endW; + if (directionNS) + { + w = x; + startW = startX; + endW = endX; + } else + { + w = z; + startW = startZ; + endW = endZ; + } + + if (this.configuration.getDeckType() == EnumBaseType.AVIAN) + { + if (y == 2 && w == startW + 2) + { + windowOrWall = blockGlass; + } + } else + { + int edge = this.configuration.getDeckType() == EnumBaseType.TUNNELER ? 1 : 0; + if ((y == 2 || y == 3) && w > startW + edge && w < endW - edge) + { + windowOrWall = blockGlass; + } + } + + this.setBlockState(worldIn, windowOrWall, x, y, z, chunkBounds); + } else + { + this.setBlockState(worldIn, blockWall, x, y, z, chunkBounds); + } + } + + // Special case: cap the grid ends + int hangarOffset = (this.configuration.isHangarDeck() ? 1 : 0); + if (y == 0 && (this.deckTier & 1) == 1 && this.configuration.getDeckType() == EnumBaseType.HUMANOID + && (directionNS && (x >= startX + 2 + hangarOffset && x <= startX + 4 + hangarOffset) + || !directionNS && (z >= startZ + 2 + hangarOffset && z <= startZ + 4 + hangarOffset))) + { + if (directionNS && (z == startZ || z == endZ) || !directionNS && (x == startX || x == endX)) + { + if (!skipCap) + { + this.setBlockState(worldIn, blockWall, x, y, z, chunkBounds); + } + } + } + + } else if (this.configuration.getDeckType().ordinal() >= EnumBaseType.AVIAN.ordinal() && (y == 1 || y == endY - 1)) + { + // Internal decoration - deck corridor corners + int top = (y == 1) ? 0 : 4; + if (this.configuration.getDeckType() == EnumBaseType.TUNNELER) + top++; + + if (directionNS) + { + if (x == startX + 1) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(0 ^ top), x, y, z, chunkBounds); + } else if (x == endX - 1) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(1 ^ top), x, y, z, chunkBounds); + } else if (this.configuration.getDeckType() == EnumBaseType.AVIAN) + { + if (z == ceilingDeco && top >= 4) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(3 ^ top), x, y, z, chunkBounds); + } else if (z == ceilingDeco + 1 && top >= 4) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(2 ^ top), x, y, z, chunkBounds); + if (x >= endX - 2) + ceilingDeco += ceilingSpacer; + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } else + { + if (z == startZ + 1) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(2 ^ top), x, y, z, chunkBounds); + } else if (z == endZ - 1) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(3 ^ top), x, y, z, chunkBounds); + } else if (this.configuration.getDeckType() == EnumBaseType.AVIAN) + { + if (x == ceilingDeco && top == 4) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(1 ^ top), x, y, z, chunkBounds); + } else if (x == ceilingDeco + 1 && top == 4) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(top), x, y, z, chunkBounds); + if (z >= endZ - 2) + ceilingDeco += ceilingSpacer; + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } + + // Infill for the extra height layer + if (endY != this.sizeY) + { + this.setBlockState(worldIn, blockWall, x, this.sizeY, z, chunkBounds); + } + } + } + + int leftX = ((this.deckTier & 4) == 4 && (this.direction == EnumFacing.SOUTH || this.direction == EnumFacing.EAST)) ? 3 : 2; + int rightX = leftX; + int leftZ = leftX; + int rightZ = rightX; + for (int i = 0; i < this.roomsOnSide; i++) + { + boolean largeRoom = (i == largeRoomPosA || i == largeRoomPosB); + int roomsize = largeRoom ? ROOMLARGE : ROOMSMALL; + int largeRoomOffset = largeRoom ? 2 : 1; + + if (directionNS) + { + this.makeDoorway(worldIn, this.sizeX, leftZ + largeRoomOffset, directionNS, chunkBounds); + this.makeDoorway(worldIn, 0, rightZ + largeRoomOffset, directionNS, chunkBounds); + + leftZ += roomsize; + rightZ += roomsize; + } else + { + this.makeDoorway(worldIn, leftX + largeRoomOffset, this.sizeZ, directionNS, chunkBounds); + this.makeDoorway(worldIn, rightX + largeRoomOffset, 0, directionNS, chunkBounds); + + leftX += roomsize; + rightX += roomsize; + } + } + + if (directionNS) + { + this.setCoordBaseMode(this.direction); + } else + { + this.setCoordBaseMode(this.direction.getOpposite()); // bug in + // Vanilla? + } + if (this.configuration.isHangarDeck() && this.deckTier == 1) + { + // Create an access hole between the floors + int width = directionNS ? this.sizeX : this.sizeZ; + this.setBlockState(worldIn, blockAir, 0, this.sizeY, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 1, this.sizeY, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 1, this.sizeY - 1, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, width - 1, this.sizeY - 1, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, width - 1, this.sizeY, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, width, this.sizeY, 1, chunkBounds); + } + + // Special settings for Control Room + if ((this.deckTier & 4) == 4) + { + IBlockState blockGlass; + switch (this.configuration.getDeckType()) + { + case AVIAN: + blockGlass = GCBlocks.spaceGlassTinVanilla.getDefaultState(); + break; + case TUNNELER: + blockGlass = GCBlocks.spaceGlassTinStrong.getDefaultState(); + break; + case HUMANOID: + default: + blockGlass = GCBlocks.spaceGlassTinClear.getDefaultState(); + break; + } + if (!directionNS) + { + int w = endX; + endX = endZ; + endZ = w; + } + for (int y = 1; y < 5; y++) + { + for (int x = 2; x < endX - 1; x++) + { + this.setBlockState(worldIn, blockGlass, x, y, endZ, chunkBounds); + } + } + + // Create two levers + int facing = 0; + switch (this.direction) + { + case NORTH: + break; + case SOUTH: + facing = 2; + break; + case EAST: + facing = 1; + break; + case WEST: + facing = 3; + } + + IBlockState lever = GCBlocks.concealedDetector.getStateFromMeta(8 + facing + (this.configuration.getDeckType() == EnumBaseType.HUMANOID ? 0 : 4)); + this.setBlockState(worldIn, lever, endX / 2 - 2, this.sizeY - 1, endZ, chunkBounds); + this.setBlockState(worldIn, lever, endX / 2 + 2, this.sizeY - 1, endZ, chunkBounds); + lever = Blocks.LEVER.getStateFromMeta(this.direction.getAxis() == EnumFacing.Axis.Z ? 4 : 3); + this.setBlockState(worldIn, lever, endX / 2 - 2, this.sizeY - 1, endZ - 1, chunkBounds); + this.setBlockState(worldIn, lever, endX / 2 + 2, this.sizeY - 1, endZ - 1, chunkBounds); + + // Create two redstone blocks + this.setBlockState(worldIn, GCBlocks.concealedRedstone.getStateFromMeta(15), endX / 2 - 2, this.sizeY, endZ, chunkBounds); + this.setBlockState(worldIn, GCBlocks.concealedRedstone.getStateFromMeta(15), endX / 2 + 2, this.sizeY, endZ, chunkBounds); + + // Create an access hole between the floors + this.setBlockState(worldIn, blockAir, 2, 0, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 3, 0, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 11, 0, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 12, 0, 1, chunkBounds); + } + this.setCoordBaseMode(EnumFacing.NORTH); + + return true; + } + + public List getRooms(int roomIndex, BaseStart startPiece, Random rand) + { + List rooms = new ArrayList(); + + boolean directionNS = this.getDirection().getAxis() == EnumFacing.Axis.Z; + EnumFacing left = directionNS ? EnumFacing.WEST : EnumFacing.SOUTH; + EnumFacing right = directionNS ? EnumFacing.EAST : EnumFacing.NORTH; + int leftX = directionNS ? this.boundingBox.maxX + 1 : this.boundingBox.minX; + int leftZ = directionNS ? this.boundingBox.minZ : this.boundingBox.maxZ + 1; + int rightX = directionNS ? this.boundingBox.minX - this.roomDepth - 1 : this.boundingBox.minX; + int rightZ = directionNS ? this.boundingBox.minZ : this.boundingBox.minZ - this.roomDepth - 1; + // now offset effect of moving control room 1 position North or West, in + // two cases + if ((this.deckTier & 4) == 4 && this.direction == EnumFacing.SOUTH) + { + rightZ++; + leftZ++; + } + if ((this.deckTier & 4) == 4 && this.direction == EnumFacing.EAST) + { + rightX++; + leftX++; + } + + for (int i = 0; i < this.roomsOnSide; i++) + { + boolean largeRoom = (i == largeRoomPosA || i == largeRoomPosB); + int roomsize = largeRoom ? ROOMLARGE : ROOMSMALL; + rooms.add(this.getRoom(roomIndex++, left, leftX, leftZ, largeRoom, true, rand)); + rooms.add(this.getRoom(roomIndex++, right, rightX, rightZ, largeRoom, false, rand)); + if (directionNS) + { + leftZ += roomsize; + rightZ += roomsize; + } else + { + leftX += roomsize; + rightX += roomsize; + } + } + + if (this.configuration.isHangarDeck() && (this.deckTier & 1) == 1) + { + int blockX = 0; + int blockZ = 0; + switch (this.direction) + { + case NORTH: + blockX = this.boundingBox.minX + (this.sizeX - BaseHangar.HANGARWIDTH) / 2; + blockZ = this.boundingBox.maxZ + 1; + break; + case SOUTH: + blockX = this.boundingBox.minX + (this.sizeX - BaseHangar.HANGARWIDTH) / 2; + blockZ = this.boundingBox.minZ - 1 - BaseHangar.HANGARLENGTH; + break; + case WEST: + blockX = this.boundingBox.maxX + 1; + blockZ = this.boundingBox.minZ + (this.sizeZ - BaseHangar.HANGARWIDTH) / 2; + break; + case EAST: + default: + blockX = this.boundingBox.minX - 1 - BaseHangar.HANGARLENGTH; + blockZ = this.boundingBox.minZ + (this.sizeZ - BaseHangar.HANGARWIDTH) / 2; + } + + rooms.add(new BaseHangar(this.configuration, rand, blockX, blockZ, this.direction.getOpposite())); + } + + if ((this.configuration.isHangarDeck() || this.configuration.getDeckType() == EnumBaseType.HUMANOID) && (this.deckTier & 1) == 1) + { + int blockX = this.boundingBox.minX; + int blockZ = this.boundingBox.minZ; + int sX = this.sizeX; + int sZ = this.sizeZ; + switch (this.direction) + { + case NORTH: + blockZ++; + sZ--; + if (!this.configuration.isHangarDeck()) + sZ--; + break; + case SOUTH: + sZ--; + if (!this.configuration.isHangarDeck()) + { + blockZ++; + sZ--; + } + break; + case WEST: + blockX++; + sX--; + if (!this.configuration.isHangarDeck()) + sX--; + break; + case EAST: + default: + sX--; + if (!this.configuration.isHangarDeck()) + { + blockX++; + sX--; + } + } + rooms.add(new BasePlate(this.configuration, blockX, this.boundingBox.minY - 1, blockZ, sX, sZ, this.direction)); + } + + if (this.otherDecks != null) + { + for (BaseDeck deck : this.otherDecks) + { + rooms.add(deck); + List newRooms = deck.getRooms(roomIndex, startPiece, rand); + rooms.addAll(newRooms); + roomIndex += newRooms.size(); + } + } + + return rooms; + } + + protected void makeDoorway(World worldIn, int x, int z, boolean directionNS, StructureBoundingBox chunkBounds) + { +// System.out.println("Making doorway at " + x + "," + z + " NS:" + directionNS + " Tier " + this.deckTier); + IBlockState blockLintel = GCBlocks.airLockFrame.getDefaultState(); + IBlockState blockAirlock = GCBlocks.airLockFrame.getStateFromMeta(1); + Block blockStair = GCBlocks.moonStoneStairs; + IBlockState blockAir = Blocks.AIR.getDefaultState(); + int meta = directionNS ? 2 : 0; + + switch (this.configuration.getDeckType()) + { + case HUMANOID: + if (directionNS) + z--; + else + x--; + this.setBlockState(worldIn, blockLintel, x, 1, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 3, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockAir, x, 1, z, chunkBounds); + this.setBlockState(worldIn, blockAir, x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockAirlock, x, 0, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 3, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockLintel, x, 1, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 3, z, chunkBounds); + break; + case AVIAN: + this.setBlockState(worldIn, blockStair.getStateFromMeta(0 + meta), x, this.sizeY - 4, z, chunkBounds); + this.setBlockState(worldIn, blockAir, x, this.sizeY - 3, z, chunkBounds); + this.setBlockState(worldIn, blockStair.getStateFromMeta(4 + meta), x, this.sizeY - 2, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockStair.getStateFromMeta(1 + meta), x, this.sizeY - 4, z, chunkBounds); + this.setBlockState(worldIn, blockAir, x, this.sizeY - 3, z, chunkBounds); + this.setBlockState(worldIn, blockStair.getStateFromMeta(5 + meta), x, this.sizeY - 2, z, chunkBounds); + break; + case TUNNELER: + if (directionNS) + z--; + else + x--; + this.setBlockState(worldIn, blockStair.getStateFromMeta(1 + meta), x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockStair.getStateFromMeta(5 + meta), x, 3, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockAir, x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockAir, x, 3, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockStair.getStateFromMeta(0 + meta), x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockStair.getStateFromMeta(4 + meta), x, 3, z, chunkBounds); + break; + default: + } + + } + + protected Piece getRoom(int i, EnumFacing dir, int blockX, int blockZ, boolean large, boolean left, Random rand) + { + int sX = large ? ROOMLARGE : ROOMSMALL; + int sZ = sX; + if (dir.getAxis() == EnumFacing.Axis.Z) + { + sZ = this.roomDepth; + } else + { + sX = this.roomDepth; + } + int sY = this.sizeY; + return new BaseRoom(this.configuration, rand, blockX, this.boundingBox.minY, blockZ, sX, sY, sZ, dir, this.configuration.getRandomRoom(i), left ? (i == 0) : (i == this.roomsOnSide - 1), + left ? (i == this.roomsOnSide - 1) : (i == 0), this.deckTier); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseHangar.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseHangar.java new file mode 100644 index 00000000..cabd3be0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseHangar.java @@ -0,0 +1,462 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class BaseHangar extends SizedPiece +{ + + public static final int HANGARWIDTH = 26; + public static final int HANGARLENGTH = 42; + public static final int HANGARHEIGHT = 15; + + public BaseHangar() + { + } + + public BaseHangar(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing direction) + { + super(configuration, HANGARWIDTH, HANGARHEIGHT, HANGARLENGTH, direction); + if (direction.getAxis() == EnumFacing.Axis.X) + { + int w = this.sizeX; + this.sizeX = this.sizeZ; + this.sizeZ = w; + this.setCoordBaseMode(direction.getOpposite()); // Maybe a bug in + // vanilla here? + } else + this.setCoordBaseMode(direction); + int yPos = configuration.getYPosition(); + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + // TODO check save nbt + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + IBlockState blockAir = Blocks.AIR.getDefaultState(); + IBlockState blockPlain = GCBlocks.basicBlock.getStateFromMeta(4); + IBlockState blockPattern = GCBlocks.basicBlock.getStateFromMeta(3); + IBlockState blockGrid = AsteroidBlocks.blockWalkway.getDefaultState(); + IBlockState blockSlab = GCBlocks.slabGCHalf.getStateFromMeta(1); + IBlockState upsideSlab = GCBlocks.slabGCHalf.getStateFromMeta(9); + IBlockState blockWall = GCBlocks.wallGC.getStateFromMeta(1); + IBlockState decoWall = GCBlocks.wallGC.getStateFromMeta(0); + IBlockState moonWall = GCBlocks.wallGC.getStateFromMeta(2); + IBlockState blockBars = Blocks.IRON_BARS.getDefaultState(); + IBlockState blockDesh = MarsBlocks.marsBlock.getStateFromMeta(8); + IBlockState blockRedstone = GCBlocks.concealedRedstone.getDefaultState(); + Block blockStair = GCBlocks.tinStairs2; + Block arcLamp = GCBlocks.brightLamp; + int stairmeta = 1; + int stairmetaB = 2; + int lampmeta = 3; + int lampmeta2 = 5; + if (direction == EnumFacing.SOUTH) + { + stairmeta ^= 1; + stairmetaB ^= 1; + lampmeta ^= 1; + lampmeta2 ^= 1; + } else if (direction == EnumFacing.EAST) + { + stairmeta ^= 2; + stairmetaB ^= 3; + lampmeta = 4; + lampmeta2 = 3; + } else if (direction == EnumFacing.WEST) + { + stairmeta ^= 3; + stairmetaB ^= 2; + lampmeta = 5; + lampmeta2 = 2; + } + + int maxX = HANGARWIDTH; + int maxZ = HANGARLENGTH; + int maxY = this.sizeY; + int midPoint = HANGARLENGTH - 22; + + // AIR + for (int zz = HANGARLENGTH; zz >= 0; zz--) + { + for (int xx = 0; xx <= maxX; xx++) + { + for (int y = 0; y <= maxY; y++) + { + if (y <= 1 && (xx == 0 || xx == maxX)) + continue; + if (y == maxY && (xx < 4 || xx > maxX - 4)) + continue; + if (y == maxY - 1 && (xx < 2 || xx > maxX - 2)) + continue; + this.setBlockState(worldIn, blockAir, xx, y, zz, structureBoundingBoxIn); + } + } + } + + // endwall + for (int y = 7; y <= 8; y++) + { + this.setBlockState(worldIn, blockWall, 1, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 2, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 3, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 23, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 24, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 25, y, HANGARLENGTH, structureBoundingBoxIn); + + for (int x = 5; x < 22; x++) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), x, y, HANGARLENGTH, structureBoundingBoxIn); + if (y == 7 && (x < 9 || x > 17)) + this.setBlockState(worldIn, this.configuration.getWallBlock(), x, maxY, HANGARLENGTH, structureBoundingBoxIn); + } + } + + for (int y = 7; y <= maxY; y++) + { + this.setBlockState(worldIn, blockPlain, 4, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 22, y, HANGARLENGTH, structureBoundingBoxIn); + } + for (int y = 9; y <= maxY; y++) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), 6, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, this.configuration.getWallBlock(), 20, y, HANGARLENGTH, structureBoundingBoxIn); + } + + for (int xx = 0; xx <= 3; xx++) + this.setBlockState(worldIn, moonWall, xx, 1, HANGARLENGTH, structureBoundingBoxIn); + for (int xx = maxX - 3; xx <= maxX; xx++) + this.setBlockState(worldIn, moonWall, xx, 1, HANGARLENGTH, structureBoundingBoxIn); + + this.setBlockState(worldIn, blockDesh, 9, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 11, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 13, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 15, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockDesh, 17, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, upsideSlab, 10, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, upsideSlab, 12, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, upsideSlab, 14, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, upsideSlab, 16, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + + // Ceiling struts + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 4, maxY - 1, HANGARLENGTH - 3, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 4, maxY - 2, HANGARLENGTH - 2, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 4, maxY - 3, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 22, maxY - 1, HANGARLENGTH - 3, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 22, maxY - 2, HANGARLENGTH - 2, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 22, maxY - 3, HANGARLENGTH - 1, structureBoundingBoxIn); + +// this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta), 5, maxY - 3, HANGARLENGTH, structureBoundingBoxIn); +// this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta), 5, maxY - 6, HANGARLENGTH, structureBoundingBoxIn); +// this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta), 21, maxY - 3, HANGARLENGTH, structureBoundingBoxIn); +// this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta), 21, maxY - 6, HANGARLENGTH, structureBoundingBoxIn); + + // FIRST SECTION + for (int zz = HANGARLENGTH; zz > HANGARLENGTH - 5; zz--) + { + for (int xx = 0; xx <= maxX; xx += maxX) + { + this.setBlockState(worldIn, moonWall, xx, 1, zz, structureBoundingBoxIn); + for (int y = 2; y < 7; y++) + { + this.setBlockState(worldIn, blockAir, xx, y, zz, structureBoundingBoxIn); + } + for (int y = 9; y < maxY - 1; y++) + { + this.setBlockState(worldIn, blockAir, xx, y, zz, structureBoundingBoxIn); + } + this.setBlockState(worldIn, blockWall, xx, 7, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 8, zz, structureBoundingBoxIn); + } + + if (zz % 3 == 1) + { + this.setBlockState(worldIn, blockPlain, 4, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 22, maxY, zz, structureBoundingBoxIn); + } else + { + this.setBlockState(worldIn, blockPattern, 4, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 22, maxY, zz, structureBoundingBoxIn); + } + + // Top middle + if (zz < HANGARLENGTH - 1) + { + this.setBlockState(worldIn, blockGrid, 9, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 11, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 13, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 15, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 17, maxY, zz, structureBoundingBoxIn); + } + + // Floor + this.setBlockState(worldIn, blockPattern, 7, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 9, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 19, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 17, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 8, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 18, 0, zz, structureBoundingBoxIn); + + if (zz > HANGARLENGTH - 5) + { + this.setBlockState(worldIn, blockPlain, 10, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 16, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 11, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 15, 0, zz, structureBoundingBoxIn); + } + + if (zz > HANGARLENGTH - 4) + { + this.setBlockState(worldIn, blockPlain, 12, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 14, 0, zz, structureBoundingBoxIn); + } + if (zz > HANGARLENGTH - 3) + this.setBlockState(worldIn, blockPlain, 13, 0, zz, structureBoundingBoxIn); + } + + // Floor end + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 10, 0, HANGARLENGTH - 6, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 16, 0, HANGARLENGTH - 6, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 11, 0, HANGARLENGTH - 5, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 15, 0, HANGARLENGTH - 5, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 12, 0, HANGARLENGTH - 4, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 14, 0, HANGARLENGTH - 4, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 13, 0, HANGARLENGTH - 3, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 10, 0, HANGARLENGTH - 5, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 16, 0, HANGARLENGTH - 5, structureBoundingBoxIn); + + // Join first and second sections + this.setBlockState(worldIn, moonWall, 0, 1, HANGARLENGTH - 5, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, maxX, 1, HANGARLENGTH - 5, structureBoundingBoxIn); + + this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta2 ^ 1), 12, maxY, HANGARLENGTH - 3, structureBoundingBoxIn); + this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta2), 14, maxY, HANGARLENGTH - 3, structureBoundingBoxIn); + + // SECOND SECTION + for (int zz = HANGARLENGTH - 5; zz > midPoint; zz--) + { + // Top sides + if (zz % 3 == 1) + { + this.setBlockState(worldIn, blockSlab, 3, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 4, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 22, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockSlab, 23, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmeta + 4), 2, maxY - 1, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmeta + 4), 1, maxY - 2, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta((stairmeta ^ 1) + 4), 24, maxY - 1, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta((stairmeta ^ 1) + 4), 25, maxY - 2, zz, structureBoundingBoxIn); + if (zz != HANGARLENGTH - 11) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmeta), 1, 1, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmeta ^ 1), 25, 1, zz, structureBoundingBoxIn); + floorStrut(worldIn, blockWall, decoWall, zz, structureBoundingBoxIn); + } + } else + { + this.setBlockState(worldIn, blockPattern, 22, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 4, maxY, zz, structureBoundingBoxIn); + } + + // Top middle + if (zz == midPoint + 1) + { + this.setBlockState(worldIn, blockDesh, 9, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 11, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockDesh, 13, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 15, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockDesh, 17, maxY, zz, structureBoundingBoxIn); + } else + { + this.setBlockState(worldIn, blockGrid, 9, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 13, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 17, maxY, zz, structureBoundingBoxIn); + if (zz == HANGARLENGTH - 12) + { + IBlockState repeater = GCBlocks.concealedRepeater_Powered.getStateFromMeta(direction.getAxis() == EnumFacing.Axis.Z ? 0 : 2); // Rotation + // will + // be + // taken + // care + // of + // by + // getRotation() + // but + // seems + // to + // be + // bugged + // in + // vanilla + this.setBlockState(worldIn, repeater, 11, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, repeater, 15, maxY, zz, structureBoundingBoxIn); + } else + { + this.setBlockState(worldIn, blockRedstone, 11, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 15, maxY, zz, structureBoundingBoxIn); + } + } + if ((zz - midPoint - 1) % 6 == 0) + { + this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta2), 10, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta2 ^ 1), 16, maxY, zz, structureBoundingBoxIn); + } + + // Walls + for (int xx = 0; xx <= maxX; xx += maxX) + { + this.setBlockState(worldIn, blockPlain, xx, maxY - 2, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, xx, maxY - 4, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, xx, 2, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, xx, 4, zz, structureBoundingBoxIn); + if (zz % 3 == 1) + { + this.setBlockState(worldIn, blockPattern, xx, maxY - 3, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, xx, 3, zz, structureBoundingBoxIn); + + this.setBlockState(worldIn, blockWall, xx, 5, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 6, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 9, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 10, zz, structureBoundingBoxIn); + } + this.setBlockState(worldIn, blockWall, xx, 7, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 8, zz, structureBoundingBoxIn); + } + + // Floor + IBlockState blockBeam = (zz % 2 == 0) ? blockPattern : blockPlain; + this.setBlockState(worldIn, blockBeam, 7, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBeam, 9, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBeam, 19, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBeam, 17, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 8, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 18, 0, zz, structureBoundingBoxIn); + } + + // THIRD SECTION + int zz = midPoint; + + // Top sides + extrudeTrioOff(worldIn, randomIn, 2, blockPlain, blockPattern, 4, maxY, zz, structureBoundingBoxIn); + extrudeTrioOff(worldIn, randomIn, 2, blockPlain, blockPattern, 22, maxY, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 23, maxY, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 3, maxY, zz, structureBoundingBoxIn); + + // Walls + for (int xx = 0; xx <= maxX; xx += maxX) + { + extrudeTrio(worldIn, randomIn, 1, blockPlain, blockPattern, xx, maxY - 2, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 1, blockPlain, blockPattern, xx, maxY - 4, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 1, blockPlain, blockPattern, xx, 2, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 1, blockPlain, blockPattern, xx, 4, zz, structureBoundingBoxIn); + + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 5, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 6, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 7, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 8, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 9, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 10, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockBars, xx, maxY - 3, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockBars, xx, 3, zz, structureBoundingBoxIn); + } + + // Floor + extrude(worldIn, randomIn, 2, blockGrid, 1, 1, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 2, 1, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 24, 1, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 25, 1, zz, structureBoundingBoxIn); + extrudeDuo(worldIn, randomIn, 3, blockPlain, blockPattern, 7, 0, zz, structureBoundingBoxIn); + extrudeDuo(worldIn, randomIn, 3, blockPlain, blockPattern, 9, 0, zz, structureBoundingBoxIn); + extrudeDuo(worldIn, randomIn, 3, blockPlain, blockPattern, 19, 0, zz, structureBoundingBoxIn); + extrudeDuo(worldIn, randomIn, 3, blockPlain, blockPattern, 17, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 3, blockGrid, 8, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 3, blockGrid, 18, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 3, blockGrid, 5, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 3, blockGrid, 21, 0, zz, structureBoundingBoxIn); + + this.setBlockState(worldIn, moonWall, 10, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 11, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 12, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 13, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 14, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 15, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 16, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 10, 0, zz - 1, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 16, 0, zz - 1, structureBoundingBoxIn); + + // WHERE SECOND AND THIRD SECTION MEET + // Extend the mid-side walls a little way past the midPoint + for (int xx = 0; xx <= maxX; xx += maxX) + { + this.setBlockState(worldIn, blockWall, xx, 7, midPoint, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 8, midPoint, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBars, xx, 3, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBars, xx, maxY - 3, midPoint + 1, structureBoundingBoxIn); + } + // Extend the walkways a little way also + this.setBlockState(worldIn, blockGrid, 1, 1, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 2, 1, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 5, 0, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 21, 0, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 24, 1, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 25, 1, midPoint + 1, structureBoundingBoxIn); + + return true; + } + + private void floorStrut(World worldIn, IBlockState blockWall, IBlockState decoWall, int zz, StructureBoundingBox structureBoundingBoxIn) + { + this.setBlockState(worldIn, blockWall, 1, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 2, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 3, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 4, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 5, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 6, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 20, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 21, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 22, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 23, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 24, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 25, 0, zz, structureBoundingBoxIn); + } + + private void extrude(World worldIn, Random rand, int solid, IBlockState blockstateIn, int x, int y, int z, StructureBoundingBox boundingBoxIn) + { + for (int zz = z; zz >= rand.nextInt(4 * (4 - solid)); zz--) + this.setBlockState(worldIn, blockstateIn, x, y, zz, boundingBoxIn); + } + + private void extrudeDuo(World worldIn, Random rand, int solid, IBlockState blockA, IBlockState blockB, int x, int y, int z, StructureBoundingBox boundingBoxIn) + { + for (int zz = z; zz >= rand.nextInt(4 * (4 - solid)); zz--) + this.setBlockState(worldIn, (zz % 2 == 0) ? blockA : blockB, x, y, zz, boundingBoxIn); + } + + private void extrudeTrio(World worldIn, Random rand, int solid, IBlockState blockA, IBlockState blockB, int x, int y, int z, StructureBoundingBox boundingBoxIn) + { + for (int zz = z; zz >= rand.nextInt(4 * (4 - solid)); zz--) + this.setBlockState(worldIn, (zz % 3 == 0) ? blockA : blockB, x, y, zz, boundingBoxIn); + } + + private void extrudeTrioOff(World worldIn, Random rand, int solid, IBlockState blockA, IBlockState blockB, int x, int y, int z, StructureBoundingBox boundingBoxIn) + { + for (int zz = z; zz >= rand.nextInt(4 * (4 - solid)); zz--) + this.setBlockState(worldIn, (zz % 3 == 1) ? blockA : blockB, x, y, zz, boundingBoxIn); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseLinking.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseLinking.java new file mode 100644 index 00000000..4dd553fc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseLinking.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class BaseLinking extends SizedPiece +{ + + public BaseLinking() + { + } + + public BaseLinking(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosY, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, sizeX, sizeY, sizeZ, direction); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.boundingBox = new StructureBoundingBox(blockPosX, blockPosY, blockPosZ, blockPosX + sizeX, blockPosY + sizeY, blockPosZ + sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i < this.boundingBox.getXSize(); i++) + { + for (int j = 0; j < this.boundingBox.getYSize(); j++) + { + for (int k = 0; k < this.boundingBox.getZSize(); k++) + { + if ((this.getDirection().getAxis() == EnumFacing.Axis.Z && (i == 0 || i == this.boundingBox.getXSize() - 1)) || j == 0 || j == this.boundingBox.getYSize() - 1 + || (this.getDirection().getAxis() == EnumFacing.Axis.X && (k == 0 || k == this.boundingBox.getZSize() - 1))) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), i, j, k, this.boundingBox); + } else + { + if (j == this.boundingBox.getYSize() - 2) + { + if (this.getDirection().getAxis() == EnumFacing.Axis.Z && (k + 1) % 4 == 0 && (i == 1 || i == this.boundingBox.getXSize() - 2)) + { + // TODO: windows or decor +// this.setBlockState(worldIn, GCBlocks.unlitTorch.getDefaultState().withProperty(BlockUnlitTorch.FACING, i == 1 ? EnumFacing.WEST.getOpposite() : EnumFacing.EAST.getOpposite()), i, j, k, this.boundingBox); + continue; + } else if (this.getDirection().getAxis() == EnumFacing.Axis.X && (i + 1) % 4 == 0 && (k == 1 || k == this.boundingBox.getZSize() - 2)) + { +// this.setBlockState(worldIn, GCBlocks.unlitTorch.getDefaultState().withProperty(BlockUnlitTorch.FACING, k == 1 ? EnumFacing.NORTH.getOpposite() : EnumFacing.SOUTH.getOpposite()), i, j, k, this.boundingBox); + continue; + } + } + + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BasePlate.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BasePlate.java new file mode 100644 index 00000000..aa75a5f3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BasePlate.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class BasePlate extends SizedPiece +{ + + public BasePlate() + { + } + + public BasePlate(BaseConfiguration configuration, int blockPosX, int yPos, int blockPosZ, int sizeX, int sizeZ, EnumFacing dir) + { + super(configuration, sizeX, 1, sizeZ, dir); + this.setCoordBaseMode(dir); + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + IBlockState blockWall = this.configuration.getWallBlock(); + boolean axisEW = getDirection().getAxis() == EnumFacing.Axis.X; + int maxX = axisEW ? this.sizeZ : this.sizeX; + int maxZ = axisEW ? this.sizeX : this.sizeZ; + for (int xx = 0; xx <= maxX; xx++) + { + for (int zz = 0; zz <= maxZ; zz++) + { + this.setBlockState(worldIn, blockWall, xx, 0, zz, boundingBox); + } + } + + return true; + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseRoom.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseRoom.java new file mode 100644 index 00000000..2f8ea0e0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseRoom.java @@ -0,0 +1,632 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base.BaseDeck.EnumBaseType; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionUtils; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBrewingStand; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; +import net.minecraftforge.fluids.FluidStack; + +public class BaseRoom extends SizedPiece +{ + + private EnumRoomType type; + private boolean nearEnd; + private boolean farEnd; + private int deckTier; + + public BaseRoom() + { + } + + public BaseRoom(BaseConfiguration configuration, Random rand, int blockPosX, int yPos, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir, EnumRoomType roomType, boolean near, boolean far, int deckTier) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(this.direction); + this.type = roomType; + this.nearEnd = near; + this.farEnd = far; + this.deckTier = deckTier; + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + int details = this.deckTier + (this.nearEnd ? 16 : 0) + (this.farEnd ? 32 : 0); + tagCompound.setInteger("brT", type.ordinal()); + tagCompound.setInteger("brD", details); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + try + { + int typeNo = tagCompound.getInteger("brT"); + if (typeNo < EnumRoomType.values().length) + { + this.type = EnumRoomType.values()[typeNo]; + } else + this.type = EnumRoomType.EMPTY; + + int details = tagCompound.getInteger("brD"); + this.deckTier = details & 15; + this.nearEnd = (details & 16) == 16; + this.farEnd = (details & 32) == 32; + } catch (Exception e) + { + System.err.println("Failed to read Abandoned Base configuration from NBT"); + System.err.println(tagCompound.toString()); + } + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBoundary) + { + IBlockState blockAir = Blocks.AIR.getDefaultState(); + Block blockStair = GCBlocks.moonStoneStairs; + + boolean axisEW = getDirection().getAxis() == EnumFacing.Axis.X; + int maxX = axisEW ? this.sizeZ : this.sizeX; + int maxZ = axisEW ? this.sizeX : this.sizeZ; + int randomInt = random.nextInt(99); + for (int xx = 0; xx <= maxX; xx++) + { + boolean near = this.nearEnd && xx == maxX; + boolean far = this.farEnd && xx == 0; + for (int yy = 0; yy <= this.sizeY; yy++) + { + for (int zz = 0; zz <= maxZ; zz++) + { + // 5 outer walls of the room + if (xx == 0 || xx == maxX || yy == 0 || yy == this.sizeY || zz == maxZ) + { + boolean xEntrance = maxX > 6 ? (xx > 2 && xx < maxX - 2) : (xx > 1 && xx < maxX - 1); + if (this.type.blockEntrance != null && yy == 0 && zz == 0 && xEntrance && this.configuration.getDeckType() != EnumBaseType.TUNNELER) + { + this.setBlockState(worldIn, this.type.blockEntrance, xx, yy, zz, chunkBoundary); + this.setBlockState(worldIn, this.configuration.getWallBlock(), xx, yy - 1, zz, chunkBoundary); + } + // Shave the top and bottom corners + else if (!((zz == maxZ || near || far) && (yy == 0 && (this.deckTier & 1) == 1 || yy == this.sizeY && (this.deckTier & 2) == 2 || (zz == maxZ && (near || far)))) + || zz == 0 && yy == 0) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), xx, yy, zz, chunkBoundary); + } + // Special case, fill in some corners on hangardeck top + // deck + else if (yy == this.sizeY && (this.deckTier & 2) == 2 && this.configuration.isHangarDeck() && zz < 3) + { + if (xx == 0 || xx == maxX) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), xx, yy, zz, chunkBoundary); + } + } + } else + { + // Room internals + if ((xx > 1 && xx < maxX - 1) && (zz > 0 && zz < maxZ - 1) || (yy > 1 && yy < this.sizeY - 1) || this.type.doEntryWallsToo) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(xx, zz), this.getYWithOffset(yy), this.getZWithOffset(xx, zz)); + if (chunkBoundary.isVecInside(blockpos)) + { + this.buildRoomContents(worldIn, xx, yy, zz, maxX - 1, maxZ - 1, blockpos, randomInt); + } + } else if (this.configuration.getDeckType() == EnumBaseType.TUNNELER && (yy == 1 || yy == this.sizeY - 1)) + { + int meta = 1; + if (xx == 1) + meta = 3; + else if (xx == maxX - 1) + meta = 2; + else if (zz == 0) + meta = 0; + if (this.direction == EnumFacing.NORTH) + { + meta ^= 3 ^ meta / 2; + } else if (this.direction == EnumFacing.SOUTH) + { + meta ^= 2 + meta / 2; + } else if (this.direction == EnumFacing.EAST) + meta ^= 1; + meta += (yy == 1) ? 0 : 4; + this.setBlockState(worldIn, blockStair.getStateFromMeta(meta), xx, yy, zz, chunkBoundary); + } else if (yy == 1 && this.type.blockFloor != null) + { + boolean xEntrance = maxX > 6 ? (xx > 2 && xx < maxX - 2) : (xx > 1 && xx < maxX - 1); + if (zz == 0 && (this.type.blockEntrance != null && xEntrance)) + { + this.setBlockState(worldIn, blockAir, xx, yy, zz, chunkBoundary); + } else + { + this.setBlockState(worldIn, this.type.blockFloor, xx, yy, zz, chunkBoundary); + } + } else + { + this.setBlockState(worldIn, blockAir, xx, yy, zz, chunkBoundary); + } + } + } + } + } + + return true; + } + + /** + * Room contents boundaries are: x from 1 to maxX y from 1 to this.sizeY - 1 + * z from 1 to maxZ + */ + private void buildRoomContents(World worldIn, int x, int y, int z, int maxX, int maxZ, BlockPos blockpos, int randomInt) + { + IBlockState state = Blocks.AIR.getDefaultState(); + int semirand = ((blockpos.getY() * 379 + blockpos.getX()) * 373 + blockpos.getZ()) * 7 & 15; + + int facing = 0; + int facing1 = 0; + int facing2 = 0; + int facingLamp = 2; + int facingScreen = 2; + switch (this.direction) + { + case WEST: + facing1 = 3; + facing2 = 2; + facingLamp = 3; + facingScreen = 5; + break; + case EAST: + facing = 2; + facing1 = 1; + facing2 = 0; + facingLamp = 2; + facingScreen = 4; + break; + case NORTH: + facing = 3; + facing1 = 2; + facing2 = 1; + facingLamp = 5; + facingScreen = 2; + break; + case SOUTH: + facing = 1; + facing1 = 0; + facing2 = 3; + facingLamp = 4; + facingScreen = 3; + } + + // Offset from centre - used for some rooms + int ox = maxX / 2 - 3; + int xx = x - ox; + + switch (this.type) + { + case EMPTY: + // Pillars in corners + if ((z == 1 || z == maxZ - 1) && (x == 2 || x == maxX - 1)) + { + state = GCBlocks.wallGC.getStateFromMeta(2); + } else if (y == 1) + { + // Some random Netherwart + if (semirand < 2) + { + state = AsteroidBlocks.spaceWart.getStateFromMeta(semirand); + } + } + break; + case STORE: + if (maxX >= 6 && y == 1 && maxZ >= 5) + { + // An actual landing pad (indoors!) + if (xx >= 3 && xx <= 5 && z >= 2 && z <= 4) + { + state = GCBlocks.landingPad.getDefaultState(); + } else if (xx == 2) + { + // Cargo loaders and unloaders, these will contain + // treasure items but only accessible when powered + switch (z) + { + case 2: + state = GCBlocks.cargoLoader.getStateFromMeta(facing); + break; + case 3: + state = GCBlocks.aluminumWire.getStateFromMeta(1); + break; + case 4: + state = GCBlocks.cargoLoader.getStateFromMeta(4 + (facing ^ 2)); + break; + default: + } + } + } + break; + case POWER: + facing = (facing + 1) % 4; + switch (y) + { + case 1: + // Layer 1: wall blocks with sealable alu wire in the + // centre + if (z == 3 && xx >= 4 && x <= maxX - 2) + state = GCBlocks.sealableBlock.getStateFromMeta(14); + else if (xx >= 3 && z > 1 && (z < maxZ - 1 || z == 4)) + state = this.configuration.getWallBlock(); + break; + case 2: + // Layer 2: tier 1 storage and alu wire and a switch + if (z == 2) + { + if (xx == 3) + state = GCBlocks.machineTiered.getStateFromMeta(0 + facing); + else if (xx > 3 && x < maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(0); + else if (x == maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(2); + else if ((xx == 3 || x == maxX - 1)) + state = AsteroidBlocks.blockMinerBase.getDefaultState(); + } else if (z == 3 && x == maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(0); + // An industrial looking frame for the whole structure + else if (z == 4 && (xx == 3 || x == maxX - 1)) + state = AsteroidBlocks.blockMinerBase.getDefaultState(); + break; + case 3: + // Layer 3: tier 2 storage and alu wire + if (z == 2 && xx == 4) + state = GCBlocks.aluminumWire.getStateFromMeta(0); + else if (z == 3 && x == maxX - 2) + state = GCBlocks.machineTiered.getStateFromMeta(8 + (facing ^ 2)); + else if (z == 3 && x == maxX - 1) + state = GCBlocks.aluminumWire.getStateFromMeta(1); + else if (z == 3 && xx >= 4 && x < maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(0); + // An industrial looking frame for the whole structure + else if ((z == 2 || z == 4) && (xx == 3 || x == maxX - 1)) + state = AsteroidBlocks.blockMinerBase.getDefaultState(); + break; + case 4: + // Layer 4: tier 2 storage and alu wire + if (z == 3) + { + if (x == maxX - 3) + state = GCBlocks.machineTiered.getStateFromMeta(8 + facing); + else if (x == maxX - 1 || x == maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(1); + } + // An industrial looking frame for the whole structure + else if ((z == 2 || z == 4) && xx >= 3 && x < maxX) + state = AsteroidBlocks.blockMinerBase.getDefaultState(); + break; + } + break; + case ENGINEERING: + if (y == 1) + { + int closerz = (maxZ <= 5) ? 2 : 3; + if ((z == maxZ - 2 && x == maxX / 2 + 1 || (z == closerz && (x == 2 || x == maxX - 1) && maxX > 5)) && maxZ > 3) + { + state = GCBlocks.nasaWorkbench.getDefaultState(); + } else + { + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } + } + break; + case MEDICAL: + int zTable = maxZ - 3; + int zTank = maxZ - 1; + int zLight = zTable; + if (zTable <= 1) + { + if (zTable < 0) + { + // Too small to build the room + break; + } + + // Small medical room: bring everything closer together + zTable++; + zLight++; + zTank = maxZ; + } + if (y == 1) + { + // Operating table at y == 1 + if (z == zTable && x <= maxX - 1 && x >= maxX - 3) + { + state = GCBlocks.crafting.getStateFromMeta(1); + } else + // Tiled floor + state = Blocks.IRON_TRAPDOOR.getDefaultState(); + } else if (y == 2 || y == 3) + { + // Operating table at y == 2 + if (y == 2 && z == zTable && x <= maxX - 1 && x >= maxX - 3) + { + state = GCBlocks.landingPad.getDefaultState(); + } else if (z == zTank) + { + // Fluid tanks, 2 tanks high - these will be filled with + // Bacterial Sludge below + if ((maxX - x) % 2 == 1) + { + state = GCBlocks.fluidTank.getDefaultState(); + } + } + } else if ((y == 4 || y == 5) && (z == zLight || z == zLight - 1)) + { + // Lighting + if (x == maxX) + state = GCBlocks.concealedDetector.getStateFromMeta(8 + facing + (this.configuration.getDeckType() == EnumBaseType.HUMANOID ? 0 : 4)); + else if (x == maxX - 1) + state = GCBlocks.brightLamp.getStateFromMeta(facingLamp); + } + break; + case CREW: + if (y == 1) + { + if (x == 2 || x == maxX - 1) + { + if ((z % 2) == 1) + { + state = GCBlocks.wallGC.getStateFromMeta((z == 1) ? 3 : 2); + } + } else + { + state = Blocks.CARPET.getStateFromMeta(7); + } + } else if (y == 2) + { + if (x == 2 || x == maxX - 1) + { + if (z == 1) + { + state = Blocks.BREWING_STAND.getDefaultState(); + } else if (z > 2 && z < maxZ) + { + state = GCBlocks.landingPad.getStateFromMeta(1); + } + } + } + break; + case CONTROL: + if (y == 1) + { + if (x == maxX / 2 + 1 && z == maxZ - 2) + { + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } else + { + state = GCBlocks.slabGCHalf.getStateFromMeta(6); + } + } else if (y <= 3) + { + if ((x == 1 || x == maxX) && !(z == 0 || z == maxZ)) + { + state = GCBlocks.telemetry.getDefaultState(); + } else if ((x == 2 || x == maxX - 1) && !(z == 0 || z == maxZ)) + { + state = GCBlocks.screen.getStateFromMeta((x == 2 ? facingLamp : facingLamp ^ 1)); + } else if (z == maxZ && x > 2 && x < maxX - 1) + { + state = GCBlocks.screen.getStateFromMeta(facingScreen); + } else if (x == maxX / 2 + 1 && z == maxZ - 2 && y == 2) + { + state = GCBlocks.landingPad.getStateFromMeta(1); + } + } + break; + case CRYO: + boolean xEntrance = maxX > 5 ? (x > 2 && x < maxX - 1) : (x > 1 && x < maxX); + boolean highEntrance = this.configuration.isHangarDeck() && this.configuration.getDeckType() == EnumBaseType.AVIAN; + if (y == 1) + { + // Build a dark plinth for it all at y == 1 + if (z == 1 && x > 1 && x < maxX) + { + state = GCBlocks.slabGCHalf.getStateFromMeta(6); + } else if (z != 0 || !xEntrance || highEntrance) + { + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } + } else if (z == 0 && (y > (highEntrance ? 5 : 3) || !xEntrance)) + { + // Dark ceiling and entrance wall + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } else if (y <= 4 && (z == maxZ || x == 1 || x == maxX)) + { + // Around the walls: Cryo Chambers alternated with dark + // blocks + if (z == maxZ && x % 2 == 0 && x < maxX) + { + if (y == 2) + { + state = MarsBlocks.machine.getStateFromMeta(BlockMachineMars.CRYOGENIC_CHAMBER_METADATA + facing1); + } + } else if (z < maxZ && z > 1 && (maxZ - z) % 2 == 0) + { + if (y == 2) + { + state = MarsBlocks.machine.getStateFromMeta(BlockMachineMars.CRYOGENIC_CHAMBER_METADATA + (x == 1 ? facing : facing2)); + } + } else + { + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } + } else if (y > 5 || y == this.configuration.getRoomHeight() || (z == maxZ || x == 1 || x == maxX)) + { + // Dark top section of walls and ceiling + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } + break; + default: + } + + worldIn.setBlockState(blockpos, state, 2); + if (state.getBlock() instanceof ITileEntityProvider) + { + TileEntity tile = worldIn.getTileEntity(blockpos); + + if (tile instanceof IMultiBlock) + { + List positions = new LinkedList<>(); + ((IMultiBlock) tile).getPositions(blockpos, positions); + for (BlockPos pos : positions) + { + worldIn.setBlockState(pos, GCBlocks.fakeBlock.getDefaultState().withProperty(BlockMulti.MULTI_TYPE, ((IMultiBlock) tile).getMultiType()), 2); + } + } + + if (tile instanceof TileEntityFluidTank) + { + ((TileEntityFluidTank) tile).fill(null, new FluidStack(MarsModule.sludge, 16000), true); + } else if (tile instanceof TileEntityCargoLoader) + { + TileEntityCargoLoader loader = (TileEntityCargoLoader) tile; + loader.locked = true; + // Looks like the food supplies have gone off! + loader.addCargo(new ItemStack(Items.POISONOUS_POTATO, 64, 0), true); + loader.addCargo(new ItemStack(Items.POISONOUS_POTATO, 64, 0), true); + loader.addCargo(new ItemStack(Items.POISONOUS_POTATO, 64, 0), true); + loader.addCargo(new ItemStack(Items.POISONOUS_POTATO, 64, 0), true); + loader.addCargo(new ItemStack(Items.ROTTEN_FLESH, 64, 0), true); + loader.addCargo(new ItemStack(GCItems.flagPole, semirand % 31 + 2, 0), true); + loader.addCargo(new ItemStack(MarsItems.marsItemBasic, semirand % 2 + 1, 4), true); // Slimeling + // Inventory + // Bag + loader.addCargo(new ItemStack(AsteroidsItems.basicItem, semirand % 23 + 41, 7), true); // Thermal + // cloth + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(this.configuration.getDeckType().treasure.copy(), true); + } else if (tile instanceof TileEntityCrafting) + { + switch (semirand % 4) + { + case 0: + break; + case 1: + ((TileEntityCrafting) tile).setInventorySlotContents(1, new ItemStack(Items.IRON_INGOT)); + ((TileEntityCrafting) tile).setInventorySlotContents(3, new ItemStack(Items.IRON_INGOT)); + break; + case 2: + // Creeper or Zombie head + int slot = semirand % 9; + ((TileEntityCrafting) tile).setInventorySlotContents(slot, new ItemStack(Items.SKULL, 1, (semirand % 13 < 6) ? 4 : 2)); + break; + case 3: + ((TileEntityCrafting) tile).setInventorySlotContents(0, new ItemStack(Items.IRON_INGOT)); + ((TileEntityCrafting) tile).setInventorySlotContents(1, new ItemStack(Items.IRON_INGOT)); + ((TileEntityCrafting) tile).setInventorySlotContents(3, new ItemStack(Items.IRON_INGOT)); + ((TileEntityCrafting) tile).setInventorySlotContents(4, new ItemStack(Items.STICK)); + ((TileEntityCrafting) tile).setInventorySlotContents(7, new ItemStack(Items.STICK)); + break; + } + } else if (tile instanceof TileEntityBrewingStand) + { + TileEntityBrewingStand stand = (TileEntityBrewingStand) tile; + stand.setInventorySlotContents(0, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.POISON)); + stand.setInventorySlotContents(1, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.WEAKNESS)); + stand.setInventorySlotContents(2, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.HARMING)); + } else if (tile instanceof TileEntityEnergyStorageModule) + { + TileEntityEnergyStorageModule store = (TileEntityEnergyStorageModule) tile; + if (semirand % 3 == 1) + { + store.setInventorySlotContents(1, new ItemStack(GCItems.battery, 1, 100)); + } + } + } + + if (this.type == EnumRoomType.ENGINEERING && y == (this.configuration.getRoomHeight() <= 4 ? 2 : 3) && z == maxZ && (x == 3 || x == 6)) + { + EnumFacing hangingDirection = this.direction; + if (hangingDirection == EnumFacing.WEST || hangingDirection == EnumFacing.EAST) + { + // Apparently we have our North and our South reversed ? So we + // don't want the opposite for North and South! + hangingDirection = hangingDirection.getOpposite(); + } + EntityHangingSchematic entityhanging = new EntityHangingSchematic(worldIn, blockpos, hangingDirection, x / 3 - 1); + if (entityhanging != null) + { + worldIn.spawnEntity(entityhanging); + entityhanging.setSendToClient(); + } + } + } + + public enum EnumRoomType + { + + ENGINEERING(AsteroidBlocks.blockBasic.getStateFromMeta(6), AsteroidBlocks.blockBasic.getStateFromMeta(6), false), + POWER(null, null, false), + STORE(null, null, false), + EMPTY(null, null, false), + MEDICAL(Blocks.IRON_TRAPDOOR.getDefaultState(), Blocks.IRON_TRAPDOOR.getStateFromMeta(8), false), + CREW(null, null, false), + CRYO(AsteroidBlocks.blockBasic.getStateFromMeta(6), AsteroidBlocks.blockBasic.getStateFromMeta(6), true), + CONTROL(GCBlocks.slabGCHalf.getStateFromMeta(6), AsteroidBlocks.blockBasic.getStateFromMeta(6), false); + + public final IBlockState blockFloor; + public final IBlockState blockEntrance; + public final boolean doEntryWallsToo; + + EnumRoomType(IBlockState floorBlock, IBlockState entrance, boolean doWalls) + { + this.blockFloor = floorBlock; + this.blockEntrance = entrance; + this.doEntryWallsToo = doWalls; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseStart.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseStart.java new file mode 100644 index 00000000..0585239c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseStart.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public class BaseStart extends BaseDeck +{ + + public List attachedComponents = Lists.newArrayList(); + public List componentBounds = Lists.newArrayList(); + + public BaseStart() + { + } + + public BaseStart(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing direction) + { + super(configuration, rand, blockPosX, configuration.getYPosition(), blockPosZ, 1, direction); + } + + @Override + public void buildComponent(StructureComponent componentIn, List listIn, Random rand) + { + attachedComponents.clear(); + componentBounds.clear(); + componentBounds.add(this.boundingBox); + listIn.clear(); + listIn.add(this); + List rooms = getRooms(0, this, rand); + for (Piece next : rooms) + { + listIn.add(next); + attachedComponents.add(next); + componentBounds.add(next.getBoundingBox()); + } + + // TODO applyAsteroidDamage(); + + super.buildComponent(componentIn, listIn, rand); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/MapGenAbandonedBase.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/MapGenAbandonedBase.java new file mode 100644 index 00000000..cd0bcc5b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/MapGenAbandonedBase.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.gen.structure.MapGenStructure; +import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.StructureStart; + +public class MapGenAbandonedBase extends MapGenStructure +{ + + private static boolean initialized; + + static + { + try + { + MapGenAbandonedBase.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public MapGenAbandonedBase() + { + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenAbandonedBase.initialized) + { + MapGenStructureIO.registerStructure(MapGenAbandonedBase.Start.class, "AbandonedBase"); + MapGenStructureIO.registerStructureComponent(BaseStart.class, "AbandonedBaseStart"); + MapGenStructureIO.registerStructureComponent(BaseRoom.class, "AbandonedBaseRoom"); + MapGenStructureIO.registerStructureComponent(BaseDeck.class, "AbandonedBaseDeck"); + MapGenStructureIO.registerStructureComponent(BasePlate.class, "AbandonedBasePlate"); + MapGenStructureIO.registerStructureComponent(BaseHangar.class, "AbandonedBaseHangar"); + + // Currently in fact unused, but just in case... + MapGenStructureIO.registerStructureComponent(BaseLinking.class, "AbandonedBaseCorridor"); + } + + MapGenAbandonedBase.initialized = true; + } + + @Override + public BlockPos getNearestStructurePos(World worldIn, BlockPos pos, boolean p_180706_3_) + { + return null; + } + + @Override + public String getStructureName() + { + return "GC_AbandonedBase"; + } + + @Override + protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ) + { + long dungeonPos = MapGenDungeon.getDungeonPosForCoords(this.world, chunkX, chunkZ, ((IGalacticraftWorldProvider) this.world.provider).getDungeonSpacing()); + int i = (int) (dungeonPos >> 32); + int j = (int) dungeonPos; + return i == chunkX && j == chunkZ; + } + + @Override + public void generate(World worldIn, int x, int z, ChunkPrimer chunkPrimerIn) + { + int i = this.range; + this.world = worldIn; + this.rand.setSeed(worldIn.getSeed()); + long j = this.rand.nextLong(); + long k = this.rand.nextLong(); + + for (int l = x - i; l <= x + i; ++l) + { + for (int i1 = z - i; i1 <= z + i; ++i1) + { + long j1 = (long) l * j; + long k1 = (long) i1 * k; + this.rand.setSeed(j1 ^ k1 ^ worldIn.getSeed()); + this.recursiveGenerate(worldIn, l, i1, x, z, chunkPrimerIn); + } + } + } + + public void reset() + { + this.structureMap.clear(); + } + + @Override + protected StructureStart getStructureStart(int chunkX, int chunkZ) + { + BlockVec3 asteroid = ((WorldProviderAsteroids) this.world.provider).getClosestAsteroidXZ((chunkX << 4) + 8, 0, (chunkZ << 4) + 8, false); + if (asteroid == null) + { + return new MapGenAbandonedBase.Start(this.world, this.rand, (chunkX << 4) + 8, (chunkZ << 4) + 8, 15, new BaseConfiguration(148, this.rand)); + } + return new MapGenAbandonedBase.Start(this.world, this.rand, asteroid.x, asteroid.z, asteroid.sideDoneBits - 5, new BaseConfiguration(asteroid.y - 10, this.rand)); + } + + public static class Start extends StructureStart + { + + private BaseConfiguration configuration; + + public Start() + { + } + + public Start(World worldIn, Random rand, int posX, int posZ, int size, BaseConfiguration configuration) + { + super(posX >> 4, posZ >> 4); + this.configuration = configuration; + if (size < 1) + size = 1; + size = size * (int) MathHelper.sqrt(size) / 4; + if (configuration.isHangarDeck()) + size -= 6; + int xoffset = 0; + int zoffset = 0; + EnumFacing direction = EnumFacing.Plane.HORIZONTAL.random(rand); + switch (direction) + { + case NORTH: + zoffset = -size; + break; + case SOUTH: + zoffset = size; + break; + case WEST: + xoffset = -size; + break; + case EAST: + xoffset = size; + break; + } + BaseStart startPiece = new BaseStart(configuration, rand, posX + xoffset, posZ + zoffset, direction); + startPiece.buildComponent(startPiece, this.components, rand); + List list = startPiece.attachedComponents; + + while (!list.isEmpty()) + { + int i = rand.nextInt(list.size()); + StructureComponent structurecomponent = list.remove(i); + structurecomponent.buildComponent(startPiece, this.components, rand); + } + + this.updateBoundingBox(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/Piece.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/Piece.java new file mode 100644 index 00000000..66ed2c6d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/Piece.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class Piece extends StructureComponent +{ + + protected BaseConfiguration configuration; + + public Piece() + { + } + + public Piece(BaseConfiguration configuration) + { + this.configuration = configuration; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + this.configuration.writeToNBT(tagCompound); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + if (this.configuration == null) + { + this.configuration = new BaseConfiguration(); + this.configuration.readFromNBT(tagCompound); + } + } + + protected StructureBoundingBox getExtension(EnumFacing direction, int length, int width) + { + int blockX, blockZ, sizeX, sizeZ; + switch (direction) + { + case NORTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.minZ - sizeZ; + break; + case EAST: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.maxX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + case SOUTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.maxZ; + break; + case WEST: + default: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.minX - sizeX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + } + return new StructureBoundingBox(blockX, blockZ, blockX + sizeX, blockZ + sizeZ); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/SizedPiece.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/SizedPiece.java new file mode 100644 index 00000000..5f67e43b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/SizedPiece.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class SizedPiece extends Piece +{ + + protected EnumFacing direction; + protected int sizeX; + protected int sizeY; + protected int sizeZ; + + public SizedPiece() + { + } + + public SizedPiece(BaseConfiguration configuration, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration); + this.direction = direction; + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + } + + public EnumFacing getDirection() + { + return direction; + } + + public void setDirection(EnumFacing direction) + { + this.direction = direction; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("dir", this.direction.ordinal()); + tagCompound.setInteger("sX", this.sizeX); + tagCompound.setInteger("sY", this.sizeY); + tagCompound.setInteger("sZ", this.sizeZ); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + + this.sizeX = tagCompound.getInteger("sX"); + this.sizeY = tagCompound.getInteger("sY"); + this.sizeZ = tagCompound.getInteger("sZ"); + + if (tagCompound.hasKey("dir")) + { + this.direction = EnumFacing.byIndex(tagCompound.getInteger("dir")); + } else + { + this.direction = EnumFacing.NORTH; + } + } + + public int getSizeX() + { + return sizeX; + } + + public int getSizeY() + { + return sizeY; + } + + public int getSizeZ() + { + return sizeZ; + } + + @Override + protected int getXWithOffset(int x, int z) + { + if (this.getCoordBaseMode() == null) + { + return x; + } else + { + switch (this.getCoordBaseMode()) + { + case NORTH: + return this.boundingBox.minX + x; + case SOUTH: + return this.boundingBox.maxX - x; + case WEST: + return this.boundingBox.maxX - z; + case EAST: + return this.boundingBox.minX + z; + default: + return x; + } + } + } + + @Override + protected int getZWithOffset(int x, int z) + { + if (this.getCoordBaseMode() == null) + { + return z; + } else + { + switch (this.getCoordBaseMode()) + { + case NORTH: + return this.boundingBox.minZ + z; + case SOUTH: + return this.boundingBox.maxZ - z; + case WEST: + return this.boundingBox.minZ + x; + case EAST: + return this.boundingBox.maxZ - x; + default: + return z; + } + } + } + + // Unused currently + public Piece getDoorway(Random rand, BaseStart startPiece, int maxAttempts, boolean small) + { + EnumFacing randomDir; + int blockX; + int blockZ; + int sizeX; + int sizeZ; + boolean valid; + int attempts = maxAttempts; + do + { + int randDir = rand.nextInt(4); + randomDir = EnumFacing.byHorizontalIndex((randDir == getDirection().getOpposite().getHorizontalIndex() ? randDir + 1 : randDir) % 4); + StructureBoundingBox extension = getExtension(randomDir, 1, 3); + blockX = extension.minX; + blockZ = extension.minZ; + sizeX = extension.maxX - extension.minX; + sizeZ = extension.maxZ - extension.minZ; + valid = true; + attempts--; + } while (!valid && attempts > 0); + + if (!valid) + { + return null; + } + + return new BaseLinking(this.configuration, rand, blockX, this.boundingBox.minY, blockZ, sizeX, 3, sizeZ, randomDir); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/GCPlanetsDataFixers.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/GCPlanetsDataFixers.java new file mode 100644 index 00000000..114f2b08 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/GCPlanetsDataFixers.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.datafix; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.datafix.base.AbstractFixer; + +public class GCPlanetsDataFixers extends AbstractFixer +{ + + private static final int VERSION = 1; + + public GCPlanetsDataFixers() + { + super(Constants.MOD_ID_PLANETS, VERSION); + } + + @Override + public void registerAll() + { + registerFixer(new PlanetsTileEntityFixer()); + } + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/PlanetsTileEntityFixer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/PlanetsTileEntityFixer.java new file mode 100644 index 00000000..bddff5d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/PlanetsTileEntityFixer.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.datafix; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.datafix.types.TileFixer; + +public class PlanetsTileEntityFixer extends TileFixer +{ + + public PlanetsTileEntityFixer() + { + super(Constants.MOD_ID_PLANETS); + putFixEntry("GC Beam Reflector"); + putFixEntry("GC Beam Receiver"); + putFixEntry("GC Short Range Telepad"); + putFixEntry("GC Fake Short Range Telepad"); + putFixEntry("GC Astro Miner Base Builder"); + putFixEntry("GC Astro Miner Base"); + putFixEntry("GC Venus Spout"); + putFixEntry("GC Venus Dungeon Spawner"); + putFixEntry("GC Tier 3 Treasure Chest"); + putFixEntry("GC Geothermal Generator"); + putFixEntry("GC Crashed Probe"); + putFixEntry("GC Solar Array Module"); + putFixEntry("GC Solar Array Controller"); + putFixEntry("GC Laser Turret"); + putFixEntry("GC Slimeling Egg"); + putFixEntry("GC Tier 2 Treasure Chest"); + putFixEntry("GC Planet Terraformer"); + putFixEntry("GC Cryogenic Chamber"); + putFixEntry("GC Gas Liquefier"); + putFixEntry("GC Methane Synthesizer"); + putFixEntry("GC Water Electrolyzer"); + putFixEntry("GC Mars Dungeon Spawner"); + putFixEntry("GC Launch Controller"); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/ConfigManagerMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/ConfigManagerMars.java new file mode 100644 index 00000000..7254720e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/ConfigManagerMars.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars; + +import java.io.File; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +public class ConfigManagerMars +{ + + public static boolean loaded; + + public static Configuration config; + + public ConfigManagerMars(File file, boolean update) + { + if (!ConfigManagerMars.loaded) + { + ConfigManagerMars.config = new Configuration(file); + ConfigManagerMars.syncConfig(true, update); + } + } + + // DIMENSIONS + public static int dimensionIDMars; + + // SCHEMATIC + public static int idSchematicRocketT2; + public static int idSchematicCargoRocket; + + // GENERAL + public static boolean launchControllerChunkLoad; + public static boolean launchControllerAllDims; + + // WGEN + public static boolean disableDeshGen; + public static boolean disableTinGen; + public static boolean disableCopperGen; + public static boolean disableIronGen; + + public static void syncConfig(boolean load, boolean update) + { + try + { + Property prop; + + if (!config.isChild && load) + { + config.load(); + } + + prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "dimensionIDMars", -29); + prop.setComment("Dimension ID for Mars"); + prop.setLanguageKey("gc.configgui.dimension_id_mars").setRequiresMcRestart(true); + dimensionIDMars = prop.getInt(); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_DIMENSIONS); + + // + + prop = config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicRocketT2", 2); + prop.setComment("Schematic ID for Tier 2 Rocket, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_rocket_t2"); + idSchematicRocketT2 = prop.getInt(2); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_SCHEMATIC); + + prop = config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicCargoRocket", 3); + prop.setComment("Schematic ID for Cargo Rocket, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_cargo_rocket"); + idSchematicCargoRocket = prop.getInt(3); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_SCHEMATIC); + + // + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "launchControllerChunkLoad", true); + prop.setComment("Whether or not the launch controller acts as a chunk loader. Will cause issues if disabled!"); + prop.setLanguageKey("gc.configgui.launch_controller_chunk_load"); + launchControllerChunkLoad = prop.getBoolean(true); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "launchControllerAllDims", false); + prop.setComment("May rarely cause issues if enabled, depends on how the other mod's dimensions are."); + prop.setLanguageKey("gc.configgui.launch_controller_all_dims"); + launchControllerAllDims = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Iron Ore Gen on Mars", false); + prop.setComment("Disable Iron Ore Gen on Mars."); + prop.setLanguageKey("gc.configgui.disable_iron_gen_mars"); + if (update) + { + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + prop.setLanguageKey(prop.getLanguageKey()); + config.getCategory(Constants.CONFIG_CATEGORY_GENERAL).remove(prop.getName()); + } + disableIronGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Copper Ore Gen on Mars", false); + prop.setComment("Disable Copper Ore Gen on Mars."); + prop.setLanguageKey("gc.configgui.disable_copper_gen_mars"); + if (update) + { + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + prop.setLanguageKey(prop.getLanguageKey()); + config.getCategory(Constants.CONFIG_CATEGORY_GENERAL).remove(prop.getName()); + } + disableCopperGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Tin Ore Gen on Mars", false); + prop.setComment("Disable Tin Ore Gen on Mars."); + prop.setLanguageKey("gc.configgui.disable_tin_gen_mars"); + if (update) + { + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + prop.setLanguageKey(prop.getLanguageKey()); + config.getCategory(Constants.CONFIG_CATEGORY_GENERAL).remove(prop.getName()); + } + disableTinGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Desh Ore Gen on Mars", false); + prop.setComment("Disable Desh Ore Gen on Mars."); + prop.setLanguageKey("gc.configgui.disable_desh_gen_mars"); + if (update) + { + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + prop.setLanguageKey(prop.getLanguageKey()); + config.getCategory(Constants.CONFIG_CATEGORY_GENERAL).remove(prop.getName()); + } + disableDeshGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + } catch (final Exception e) + { + GalacticraftPlanets.logger.error(e, "Galacticraft Mars (Planets) has a problem loading its config"); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/EventHandlerMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/EventHandlerMars.java new file mode 100644 index 00000000..101e472e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/EventHandlerMars.java @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars; + +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC.OrientCameraEvent; +import micdoodle8.mods.galacticraft.core.event.EventLandingPadRemoval; +import micdoodle8.mods.galacticraft.core.event.EventWakePlayer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars.EnumMachineType; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.dimension.WorldProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityCryogenicChamber; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.world.gen.WorldGenEggs; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldServer; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.living.LivingDeathEvent; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +public class EventHandlerMars +{ + + @SubscribeEvent + public void onLivingDeath(LivingDeathEvent event) + { + if (event.getSource().damageType.equals("slimeling") && event.getSource() instanceof EntityDamageSource) + { + EntityDamageSource source = (EntityDamageSource) event.getSource(); + + if (source.getTrueSource() instanceof EntitySlimeling && !source.getTrueSource().world.isRemote) + { + ((EntitySlimeling) source.getTrueSource()).kills++; + } + } + } + + @SubscribeEvent + public void onLivingAttacked(LivingAttackEvent event) + { + if (!event.getEntity().isEntityInvulnerable(event.getSource()) && !event.getEntity().world.isRemote && event.getEntityLiving().getHealth() <= 0.0F + && !(event.getSource().isFireDamage() && event.getEntityLiving().isPotionActive(MobEffects.FIRE_RESISTANCE))) + { + Entity entity = event.getSource().getTrueSource(); + + if (entity instanceof EntitySlimeling) + { + EntitySlimeling entitywolf = (EntitySlimeling) entity; + + if (entitywolf.isTamed()) + { +// event.entityLiving.recentlyHit = 100; +// event.entityLiving.attackingPlayer = null; TODO + } + } + } + } + + @SubscribeEvent + public void onPlayerWakeUp(EventWakePlayer event) + { + EntityPlayer player = event.getEntityPlayer(); + BlockPos c = player.bedLocation; + IBlockState state = player.getEntityWorld().getBlockState(c); + Block blockID = state.getBlock(); + + if (blockID == MarsBlocks.machine && state.getValue(BlockMachineMars.TYPE) == EnumMachineType.CRYOGENIC_CHAMBER) + { + if (!event.immediately && event.updateWorld && event.setSpawn) + { + event.result = EntityPlayer.SleepResult.NOT_POSSIBLE_HERE; + } else if (!event.immediately && !event.updateWorld && event.setSpawn) + { + if (!player.world.isRemote) + { + player.heal(5.0F); + GCPlayerStats.get(player).setCryogenicChamberCooldown(6000); + + WorldServer ws = (WorldServer) player.world; + ws.updateAllPlayersSleepingFlag(); + if (ws.areAllPlayersAsleep() && ws.getGameRules().getBoolean("doDaylightCycle")) + { + WorldUtil.setNextMorning(ws); + } + } + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRotate(RenderPlayerGC.RotatePlayerEvent event) + { + BlockPos blockPos = event.getEntityPlayer().bedLocation; + if (blockPos != null) + { + IBlockState state = event.getEntityPlayer().world.getBlockState(blockPos); + if (state.getBlock() == GCBlocks.fakeBlock && state.getValue(BlockMulti.MULTI_TYPE) == BlockMulti.EnumBlockMultiType.CRYO_CHAMBER) + { + TileEntity tile = event.getEntityPlayer().world.getTileEntity(blockPos); + if (tile instanceof TileEntityMulti) + { + state = event.getEntityPlayer().world.getBlockState(((TileEntityMulti) tile).mainBlockPosition); + } + } + + if (state.getBlock() == MarsBlocks.machine && state.getValue(BlockMachineMars.TYPE) == BlockMachineMars.EnumMachineType.CRYOGENIC_CHAMBER) + { + event.shouldRotate = true; + event.vanillaOverride = true; + } + } + } + + private WorldGenerator eggGenerator; + + @SubscribeEvent + public void onPlanetDecorated(GCCoreEventPopulate.Post event) + { + if (this.eggGenerator == null) + { + this.eggGenerator = new WorldGenEggs(MarsBlocks.rock); + } + + if (event.world.provider instanceof WorldProviderMars) + { + int eggsPerChunk = 2; + BlockPos blockpos; + + for (int eggCount = 0; eggCount < eggsPerChunk; ++eggCount) + { + blockpos = event.pos.add(event.rand.nextInt(16) + 8, event.rand.nextInt(104) + 24, event.rand.nextInt(16) + 8); + this.eggGenerator.generate(event.world, event.rand, blockpos); + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void orientCamera(OrientCameraEvent event) + { + EntityPlayer entity = Minecraft.getMinecraft().player; + + if (entity != null) + { + int x = MathHelper.floor(entity.posX); + int y = MathHelper.floor(entity.posY); + int z = MathHelper.floor(entity.posZ); + TileEntity tile = Minecraft.getMinecraft().world.getTileEntity(new BlockPos(x, y - 1, z)); + + if (tile instanceof TileEntityMulti) + { + tile = ((TileEntityMulti) tile).getMainBlockTile(); + } + + if (tile instanceof TileEntityCryogenicChamber) + { + GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); + + switch (tile.getBlockMetadata() & 3) + { + case 0: + GL11.glTranslatef(-0.4F, -0.5F, 4.1F); + break; + case 1: + GL11.glTranslatef(0, -0.5F, 4.1F); + break; + case 2: + GL11.glTranslatef(0, -0.5F, 4.1F); + break; + case 3: + GL11.glTranslatef(0.0F, -0.5F, 4.1F); + break; + } + + GL11.glRotatef(-180, 0.0F, 1.0F, 0.0F); + + GL11.glRotatef(FMLClientHandler.instance().getClientPlayerEntity().sleepTimer - 50, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.3F, 0.0F); + } + } + } + + @SubscribeEvent + public void onLandingPadRemoved(EventLandingPadRemoval event) + { + TileEntity tile = event.world.getTileEntity(event.pos); + + if (tile instanceof IFuelDock) + { + IFuelDock dock = (IFuelDock) tile; + + for (ILandingPadAttachable connectedTile : dock.getConnectedTiles()) + { + if (connectedTile instanceof TileEntityLaunchController) + { + final TileEntityLaunchController launchController = (TileEntityLaunchController) connectedTile; + if (launchController.getEnergyStoredGC() > 0.0F && launchController.launchPadRemovalDisabled && !launchController.getDisabled(0)) + { + event.allow = false; + return; + } + break; + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModule.java new file mode 100644 index 00000000..2d1f50c9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModule.java @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars; + +import java.lang.reflect.Method; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBucketGC; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModule; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockSludge; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.dimension.TeleportTypeMars; +import micdoodle8.mods.galacticraft.planets.mars.dimension.WorldProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityProjectileTNT; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySludgeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemSchematicTier2; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.recipe.RecipeManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.schematic.SchematicCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.schematic.SchematicTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityCryogenicChamber; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityDungeonSpawnerMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntitySlimelingEgg; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTreasureChestMars; +import micdoodle8.mods.galacticraft.planets.mars.world.gen.BiomeMars; +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialLiquid; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.registry.EntityRegistry; +import net.minecraftforge.fml.relauncher.Side; + +public class MarsModule implements IPlanetsModule +{ + + public static Fluid sludge; + public static Fluid sludgeGC; + public static Material sludgeMaterial = new MaterialLiquid(MapColor.FOLIAGE); + + public static Planet planetMars; + + @Override + public void preInit(FMLPreInitializationEvent event) + { + MarsModule.planetMars = (Planet) new Planet("mars").setParentSolarSystem(GalacticraftCore.solarSystemSol).setRingColorRGB(0.67F, 0.1F, 0.1F).setPhaseShift(0.1667F).setRelativeSize(0.5319F) + .setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.25F, 1.25F)).setRelativeOrbitTime(1.8811610076670317634173055859803F); + + MinecraftForge.EVENT_BUS.register(new EventHandlerMars()); + + if (!FluidRegistry.isFluidRegistered("bacterialsludge")) + { + ResourceLocation stillIcon = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/sludge_still"); + ResourceLocation flowingIcon = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/sludge_flow"); + sludgeGC = new Fluid("bacterialsludge", stillIcon, flowingIcon).setDensity(800).setViscosity(1500); + FluidRegistry.registerFluid(sludgeGC); + } else + { + GalacticraftPlanets.logger.info("Galacticraft sludge is not default, issues may occur."); + } + + sludge = FluidRegistry.getFluid("bacterialsludge"); + + if (sludge.getBlock() == null) + { + MarsBlocks.blockSludge = new BlockSludge("sludge"); + ((BlockSludge) MarsBlocks.blockSludge).setQuantaPerBlock(3); + MarsBlocks.registerBlock(MarsBlocks.blockSludge, ItemBlockDesc.class); + sludge.setBlock(MarsBlocks.blockSludge); + } else + { + MarsBlocks.blockSludge = sludge.getBlock(); + } + + if (MarsBlocks.blockSludge != null) + { + FluidRegistry.addBucketForFluid(sludge); // Create a Universal + // Bucket AS WELL AS our + // type, this is needed to + // pull fluids out of other + // mods tanks + MarsItems.bucketSludge = new ItemBucketGC(MarsBlocks.blockSludge, sludge).setTranslationKey("bucket_sludge"); + MarsItems.registerItem(MarsItems.bucketSludge); + EventHandlerGC.bucketList.put(MarsBlocks.blockSludge, MarsItems.bucketSludge); + } + + MarsBlocks.initBlocks(); + MarsItems.initItems(); + + MarsModule.planetMars.setBiomeInfo(BiomeMars.marsFlat); + } + + @Override + public void init(FMLInitializationEvent event) + { + MarsBlocks.oreDictRegistration(); + this.registerMicroBlocks(); + SchematicRegistry.registerSchematicRecipe(new SchematicTier2Rocket()); + SchematicRegistry.registerSchematicRecipe(new SchematicCargoRocket()); + + GalacticraftCore.packetPipeline.addDiscriminator(6, PacketSimpleMars.class); + + this.registerTileEntities(); + this.registerCreatures(); + this.registerOtherEntities(); + + MarsModule.planetMars.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/mars.png")); + MarsModule.planetMars.setDimensionInfo(ConfigManagerMars.dimensionIDMars, WorldProviderMars.class).setTierRequired(2); + MarsModule.planetMars.setAtmosphere(new AtmosphereInfo(false, false, false, -1.0F, 0.3F, 0.1F)); + MarsModule.planetMars.atmosphereComponent(EnumAtmosphericGas.CO2).atmosphereComponent(EnumAtmosphericGas.ARGON).atmosphereComponent(EnumAtmosphericGas.NITROGEN); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedZombie.class, 8, 2, 3)); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedSpider.class, 8, 2, 3)); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedSkeleton.class, 8, 2, 3)); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedCreeper.class, 8, 2, 3)); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedEnderman.class, 10, 1, 4)); + MarsModule.planetMars.addChecklistKeys("equip_oxygen_suit", "thermal_padding"); + + GalaxyRegistry.register(MarsModule.planetMars); + GalacticraftRegistry.registerTeleportType(WorldProviderMars.class, new TeleportTypeMars()); + GalacticraftRegistry.registerRocketGui(WorldProviderMars.class, new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/mars_rocket_gui.png")); + GalacticraftRegistry.addDungeonLoot(2, new ItemStack(MarsItems.schematic, 1, 0)); + GalacticraftRegistry.addDungeonLoot(2, new ItemStack(MarsItems.schematic, 1, 1)); + GalacticraftRegistry.addDungeonLoot(2, new ItemStack(MarsItems.schematic, 1, 2)); + + GalacticraftCore.proxy.registerFluidTexture(MarsModule.sludge, new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/misc/underbecterial.png")); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + RecipeManagerMars.loadCompatibilityRecipes(); + GCPlanetDimensions.MARS = WorldUtil.getDimensionTypeById(ConfigManagerMars.dimensionIDMars); + ItemSchematicTier2.registerSchematicItems(); + } + + @Override + public void serverStarting(FMLServerStartingEvent event) + { + } + + @Override + public void serverInit(FMLServerStartedEvent event) + { + + } + + private void registerMicroBlocks() + { + try + { + Class clazz = Class.forName("codechicken.microblock.MicroMaterialRegistry"); + if (clazz != null) + { + Method registerMethod = null; + Method[] methodz = clazz.getMethods(); + for (Method m : methodz) + { + if (m.getName().equals("registerMaterial")) + { + registerMethod = m; + break; + } + } + Class clazzbm = Class.forName("codechicken.microblock.BlockMicroMaterial"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 4), "tile.mars.marscobblestone"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 5), "tile.mars.marsgrass"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 6), "tile.mars.marsdirt"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 7), "tile.mars.marsdungeon"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 8), "tile.mars.marsdeco"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 9), "tile.mars.marsstone"); + } + } catch (Exception e) + { + } + } + + public void registerTileEntities() + { + register(TileEntitySlimelingEgg.class, "gc_slimeling_egg"); + register(TileEntityTreasureChestMars.class, "gc_tier_2_treasure_chest"); + register(TileEntityTerraformer.class, "gc_planet_terraformer"); + register(TileEntityCryogenicChamber.class, "gc_cryogenic_chamber"); + register(TileEntityGasLiquefier.class, "gc_gas_liquefier"); + register(TileEntityMethaneSynthesizer.class, "gc_methane_synthesizer"); + register(TileEntityElectrolyzer.class, "gc_water_electrolyzer"); + register(TileEntityDungeonSpawnerMars.class, "gc_mars_dungeon_spawner"); + register(TileEntityLaunchController.class, "gc_launch_controller"); + } + + public void registerCreatures() + { + this.registerGalacticraftCreature(EntitySludgeling.class, "sludgeling", ColorUtil.to32BitColor(255, 0, 50, 0), ColorUtil.to32BitColor(255, 0, 150, 0)); + this.registerGalacticraftCreature(EntitySlimeling.class, "slimeling", ColorUtil.to32BitColor(255, 0, 50, 0), ColorUtil.to32BitColor(255, 0, 150, 0)); + this.registerGalacticraftCreature(EntityCreeperBoss.class, "creeper_boss", ColorUtil.to32BitColor(255, 0, 50, 0), ColorUtil.to32BitColor(255, 0, 150, 0)); + } + + public void registerOtherEntities() + { + MarsModule.registerGalacticraftNonMobEntity(EntityTier2Rocket.class, "rocket_t2", 150, 1, false); + MarsModule.registerGalacticraftNonMobEntity(EntityProjectileTNT.class, "projectile_tnt", 150, 1, true); + MarsModule.registerGalacticraftNonMobEntity(EntityLandingBalloons.class, "landing_balloons", 150, 5, true); + MarsModule.registerGalacticraftNonMobEntity(EntityCargoRocket.class, "rocket_cargo", 150, 1, false); + } + + public void registerGalacticraftCreature(Class clazz, String name, int back, int fore) + { + MarsModule.registerGalacticraftNonMobEntity(clazz, name, 80, 3, true); + int nextEggID = GCCoreUtil.getNextValidID(); + if (nextEggID < 65536) + { + ResourceLocation resourcelocation = new ResourceLocation(Constants.MOD_ID_PLANETS, name); + // name = Constants.MOD_ID_PLANETS + "." + name; + // net.minecraftforge.fml.common.registry.EntityEntry entry = new net.minecraftforge.fml.common.registry.EntityEntry(clazz, name); + // net.minecraftforge.fml.common.registry.GameData.getEntityRegistry().register(nextEggID, resourcelocation, entry); + EntityList.ENTITY_EGGS.put(resourcelocation, new EntityList.EntityEggInfo(resourcelocation, back, fore)); + } + } + + public static void registerGalacticraftNonMobEntity(Class var0, String var1, int trackingDistance, int updateFreq, boolean sendVel) + { + ResourceLocation registryName = new ResourceLocation(Constants.MOD_ID_PLANETS, var1); + EntityRegistry.registerModEntity(registryName, var0, var1, GCCoreUtil.nextInternalID(), GalacticraftPlanets.instance, trackingDistance, updateFreq, sendVel); + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_MARS); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (side == Side.SERVER) + { + BlockPos pos = new BlockPos(x, y, z); + TileEntity tile = world.getTileEntity(pos); + + if (ID == GuiIdsPlanets.MACHINE_MARS) + { + if (tile instanceof TileEntityTerraformer) + { + return new ContainerTerraformer(player.inventory, (TileEntityTerraformer) tile, player); + } + if (tile instanceof TileEntityLaunchController) + { + return new ContainerLaunchController(player.inventory, (TileEntityLaunchController) tile, player); + } else if (tile instanceof TileEntityElectrolyzer) + { + return new ContainerElectrolyzer(player.inventory, (TileEntityElectrolyzer) tile, player); + } else if (tile instanceof TileEntityGasLiquefier) + { + return new ContainerGasLiquefier(player.inventory, (TileEntityGasLiquefier) tile, player); + } else if (tile instanceof TileEntityMethaneSynthesizer) + { + return new ContainerMethaneSynthesizer(player.inventory, (TileEntityMethaneSynthesizer) tile, player); + } + } + } + + return null; + } + + @Override + public Configuration getConfiguration() + { + return ConfigManagerMars.config; + } + + @Override + public void syncConfig() + { + ConfigManagerMars.syncConfig(false, false); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModuleClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModuleClient.java new file mode 100644 index 00000000..ac784067 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModuleClient.java @@ -0,0 +1,360 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.client.IItemMeshDefinitionCustom; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModuleClient; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockBasicMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockCavernousVine; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.client.SkyProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.client.fx.ParticleDrip; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSlimelingFeed; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiWaterElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderCreeperBoss; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderLandingBalloons; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderProjectileTNT; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderSludgeling; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.client.render.item.ItemModelRocketT2; +import micdoodle8.mods.galacticraft.planets.mars.client.render.tile.TileEntityTreasureChestRenderer; +import micdoodle8.mods.galacticraft.planets.mars.dimension.WorldProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityProjectileTNT; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySludgeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemSchematicTier2; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTreasureChestMars; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.model.IModelState; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class MarsModuleClient implements IPlanetsModuleClient +{ + + private static ModelResourceLocation sludgeLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "sludge", "fluid"); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + MinecraftForge.EVENT_BUS.register(this); + + RenderingRegistry.registerEntityRenderingHandler(EntitySludgeling.class, (RenderManager manager) -> new RenderSludgeling(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntitySlimeling.class, (RenderManager manager) -> new RenderSlimeling(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityCreeperBoss.class, (RenderManager manager) -> new RenderCreeperBoss(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityProjectileTNT.class, (RenderManager manager) -> new RenderProjectileTNT(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityCargoRocket.class, (RenderManager manager) -> new RenderCargoRocket(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityLandingBalloons.class, (RenderManager manager) -> new RenderLandingBalloons(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityTier2Rocket.class, (RenderManager manager) -> new RenderTier2Rocket(manager)); + } + + private void addPlanetVariants(String name, String... variants) + { + Item itemBlockVariants = Item.REGISTRY.getObject(new ResourceLocation(Constants.MOD_ID_PLANETS, name)); + ResourceLocation[] variants0 = new ResourceLocation[variants.length]; + for (int i = 0; i < variants.length; ++i) + { + variants0[i] = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + variants[i]); + } + ModelBakery.registerItemVariants(itemBlockVariants, variants0); + } + + @Override + public void registerVariants() + { + addPlanetVariants("mars", "ore_copper_mars", "ore_tin_mars", "ore_desh_mars", "ore_iron_mars", "cobblestone", "mars_surface", "mars_middle", "dungeon_brick", "desh_block", "mars_stone"); + addPlanetVariants("cavern_vines", "vine_0", "vine_1", "vine_2"); + addPlanetVariants("item_basic_mars", "raw_desh", "desh_stick", "ingot_desh", "reinforced_plate_t2", "slimeling_cargo", "compressed_desh", "fluid_manip"); + addPlanetVariants("schematic", "schematic_rocket_t3", "schematic_rocket_cargo", "schematic_astro_miner"); + addPlanetVariants("slimeling_egg", "slimeling_egg_red", "slimeling_egg_blue", "slimeling_egg_yellow"); + addPlanetVariants("mars_machine", "terraformer", "cryogenic_chamber", "launch_controller"); + addPlanetVariants("mars_machine_t2", "gas_liquefier", "methane_synthesizer", "electrolyzer"); + + Item sludge = Item.getItemFromBlock(MarsBlocks.blockSludge); + ModelBakery.registerItemVariants(sludge, new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "sludge")); + ModelLoader.setCustomMeshDefinition(sludge, IItemMeshDefinitionCustom.create((ItemStack stack) -> sludgeLocation)); + ModelLoader.setCustomStateMapper(MarsBlocks.blockSludge, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return sludgeLocation; + } + }); + + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "rocket_t2", "inventory"); + for (int i = 0; i < 5; ++i) + { + ModelLoader.setCustomModelResourceLocation(MarsItems.rocketMars, i, modelResourceLocation); + } + + modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "rocket_cargo", "inventory"); + for (int i = 11; i < 15; ++i) + { + ModelLoader.setCustomModelResourceLocation(MarsItems.rocketMars, i, modelResourceLocation); + } + } + + @Override + public void init(FMLInitializationEvent event) + { + MinecraftForge.EVENT_BUS.register(new TickHandlerClient()); + MarsModuleClient.registerBlockRenderers(); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void loadTextures(TextureStitchEvent.Pre event) + { + registerTexture(event, "rocket_t2"); + registerTexture(event, "cargo_rocket"); + registerTexture(event, "landing_balloon"); + } + + private void registerTexture(TextureStitchEvent.Pre event, String texture) + { + event.getMap().registerSprite(new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/" + texture)); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onModelBakeEvent(ModelBakeEvent event) + { + replaceModelDefault(event, "rocket_t2", "rocket_t2.obj", ImmutableList.of("Rocket"), ItemModelRocketT2.class, TRSRTransformation.identity()); + replaceModelDefault(event, "rocket_cargo", "cargo_rocket.obj", ImmutableList.of("Rocket"), ItemModelCargoRocket.class, TRSRTransformation.identity()); + } + + private void replaceModelDefault(ModelBakeEvent event, String resLoc, String objLoc, List visibleGroups, Class clazz, IModelState parentState, String... variants) + { + ClientUtil.replaceModel(GalacticraftPlanets.ASSET_PREFIX, event, resLoc, objLoc, visibleGroups, clazz, parentState, variants); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { +// IModelCustom chamberModel = AdvancedModelLoader.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "models/chamber.obj")); +// IModelCustom cargoRocketModel = AdvancedModelLoader.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "models/cargoRocket.obj")); +// +// // Tile Entity Renderers + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTreasureChestMars.class, new TileEntityTreasureChestRenderer()); +// ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCryogenicChamber.class, new TileEntityCryogenicChamberRenderer(chamberModel)); +// ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTerraformer.class, new TileEntityBubbleProviderRenderer<>(0.25F, 1.0F, 0.25F)); +// +// // Entities + + // Add Armor Renderer Prefix +// RenderingRegistry.addNewArmourRendererPrefix("desh"); + + ItemSchematicTier2.registerTextures(); + } + + public static void registerBlockRenderers() + { + for (BlockBasicMars.EnumBlockBasic blockBasic : BlockBasicMars.EnumBlockBasic.values()) + { + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.marsBlock, blockBasic.getMeta(), blockBasic.getName()); + } + + for (BlockCavernousVine.EnumVineType vineType : BlockCavernousVine.EnumVineType.values()) + { + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.vine, vineType.getMeta(), vineType.getName()); + } + + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.rock, 0, "slimeling_egg_red"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.rock, 1, "slimeling_egg_blue"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.rock, 2, "slimeling_egg_yellow"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.creeperEgg); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machine, 0, "terraformer"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machine, 4, "cryogenic_chamber"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machine, 8, "launch_controller"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machineT2, 0, "gas_liquefier"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machineT2, 4, "methane_synthesizer"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machineT2, 8, "electrolyzer"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.treasureChestTier2); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.marsBricksStairs); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.marsCobblestoneStairs); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.bossSpawner); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 0, "raw_desh"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 1, "desh_stick"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 2, "ingot_desh"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 3, "reinforced_plate_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 4, "slimeling_cargo"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 5, "compressed_desh"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 6, "fluid_manip"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.key, 0, "key"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.schematic, 0, "schematic_rocket_t3"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.schematic, 1, "schematic_rocket_cargo"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.schematic, 2, "schematic_astro_miner"); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (side == Side.CLIENT) + { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + + if (ID == GuiIdsPlanets.MACHINE_MARS) + { + if (tile instanceof TileEntityTerraformer) + { + return new GuiTerraformer(player.inventory, (TileEntityTerraformer) tile); + } else if (tile instanceof TileEntityLaunchController) + { + return new GuiLaunchController(player.inventory, (TileEntityLaunchController) tile); + } else if (tile instanceof TileEntityElectrolyzer) + { + return new GuiWaterElectrolyzer(player.inventory, (TileEntityElectrolyzer) tile); + } else if (tile instanceof TileEntityGasLiquefier) + { + return new GuiGasLiquefier(player.inventory, (TileEntityGasLiquefier) tile); + } else if (tile instanceof TileEntityMethaneSynthesizer) + { + return new GuiMethaneSynthesizer(player.inventory, (TileEntityMethaneSynthesizer) tile); + } + } + } + + return null; + } + + @Override + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData) + { + Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + final double dPosX = mc.getRenderViewEntity().posX - position.x; + final double dPosY = mc.getRenderViewEntity().posY - position.y; + final double dPosZ = mc.getRenderViewEntity().posZ - position.z; + Particle particle = null; + final double maxDistSqrd = 64.0D; + + if (dPosX * dPosX + dPosY * dPosY + dPosZ * dPosZ < maxDistSqrd * maxDistSqrd) + { + if (particleID.equals("sludgeDrip")) + { +// particle = new EntityDropParticleFX(mc.world, position.x, position.y, position.z, Material.WATER); TODO + } else if (particleID.equals("bacterialDrip")) + { + particle = new ParticleDrip(mc.world, position.x, position.y, position.z); + } + } + + if (particle != null) + { + mc.effectRenderer.addEffect(particle); + } + } + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_MARS); + } + + public static void openSlimelingGui(EntitySlimeling slimeling, int gui) + { + switch (gui) + { + case 0: + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiSlimeling(slimeling)); + break; + case 1: + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiSlimelingFeed(slimeling)); + break; + } + } + + public static class TickHandlerClient + { + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTick(ClientTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + + final WorldClient world = minecraft.world; + + if (world != null) + { + if (world.provider instanceof WorldProviderMars) + { + if (world.provider.getSkyRenderer() == null) + { + world.provider.setSkyRenderer(new SkyProviderMars((IGalacticraftWorldProvider) world.provider)); + } + + if (world.provider.getCloudRenderer() == null) + { + world.provider.setCloudRenderer(new CloudRenderer()); + } + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBasicMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBasicMars.java new file mode 100644 index 00000000..6bc93fe9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBasicMars.java @@ -0,0 +1,324 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import com.google.common.base.Predicate; +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.block.IPlantableBlock; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.Random; + +public class BlockBasicMars extends Block implements IDetectableResource, IPlantableBlock, ITerraformableBlock, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE = PropertyEnum.create("basictypemars", EnumBlockBasic.class); + + public enum EnumBlockBasic implements IStringSerializable + { + + ORE_COPPER(0, "ore_copper_mars"), + ORE_TIN(1, "ore_tin_mars"), + ORE_DESH(2, "ore_desh_mars"), + ORE_IRON(3, "ore_iron_mars"), + COBBLESTONE(4, "cobblestone"), + SURFACE(5, "mars_surface"), + MIDDLE(6, "mars_middle"), + DUNGEON_BRICK(7, "dungeon_brick"), + DESH_BLOCK(8, "desh_block"), + MARS_STONE(9, "mars_stone"); + + private final int meta; + private final String name; + + private EnumBlockBasic(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockBasic[] values = values(); + + public static EnumBlockBasic byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockBasicMars(String assetName) + { + super(Material.ROCK); + this.setTranslationKey(assetName); + } + + @Override + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.DUNGEON_BRICK) + { + return MapColor.GREEN; + } else if (state.getValue(BASIC_TYPE) == EnumBlockBasic.SURFACE) + { + return MapColor.DIRT; + } + + return MapColor.RED; + } + + @Override + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) + { + EnumBlockBasic type = world.getBlockState(pos).getValue(BASIC_TYPE); + + if (type == EnumBlockBasic.DUNGEON_BRICK) + { + return 40.0F; + } else if (type == EnumBlockBasic.DESH_BLOCK) + { + return 60.0F; + } + + return super.getExplosionResistance(world, pos, exploder, explosion); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + if (blockState.getValue(BASIC_TYPE) == EnumBlockBasic.DUNGEON_BRICK) + { + return 4.0F; + } + + return this.blockHardness; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_DESH) + { + return MarsItems.marsItemBasic; + } + + return Item.getItemFromBlock(this); + } + + @Override + public int damageDropped(IBlockState state) + { + int meta = state.getBlock().getMetaFromState(state); + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.MARS_STONE) + { + return 4; + } else if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_DESH) + { + return 0; + } else + { + return meta; + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_DESH && fortune >= 1) + { + return (random.nextFloat() < fortune * 0.29F - 0.25F) ? 2 : 1; + } + + return 1; + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (EnumBlockBasic blockBasic : EnumBlockBasic.values()) + { + list.add(new ItemStack(this, 1, blockBasic.getMeta())); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + switch (this.getMetaFromState(state)) + { + case 0: + case 1: + case 2: + case 3: + return true; + default: + return false; + } + } + + @Override + public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) + { + return false; + } + + @Override + public int requiredLiquidBlocksNearby() + { + return 4; + } + + @Override + public boolean isPlantable(IBlockState state) + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState state, World worldIn, BlockPos pos, Random rand) + { + if (rand.nextInt(10) == 0) + { + if (state.getBlock() == this && state.getValue(BASIC_TYPE) == EnumBlockBasic.DUNGEON_BRICK) + { + GalacticraftPlanets.spawnParticle("sludgeDrip", new Vector3(pos.getX() + rand.nextDouble(), pos.getY(), pos.getZ() + rand.nextDouble()), new Vector3(0, 0, 0)); + + if (rand.nextInt(100) == 0) + { + worldIn.playSound(null, pos.getX(), pos.getY(), pos.getZ(), GCSounds.singleDrip, SoundCategory.AMBIENT, 1, 0.8F + rand.nextFloat() / 5.0F); + } + } + } + } + + @Override + public boolean isTerraformable(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + IBlockState stateAbove = world.getBlockState(pos.up()); + return state.getValue(BASIC_TYPE) == EnumBlockBasic.SURFACE && !stateAbove.getBlock().isFullCube(stateAbove); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state)); + } + + @Override + public boolean isReplaceableOreGen(IBlockState state, IBlockAccess world, BlockPos pos, Predicate target) + { + return (state.getValue(BASIC_TYPE) == EnumBlockBasic.MIDDLE || state.getValue(BASIC_TYPE) == EnumBlockBasic.MARS_STONE); + } + + @Override + public boolean hasTileEntity(IBlockState state) + { + return state.getBlock().getMetaFromState(state) == 10; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE, EnumBlockBasic.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasic) state.getValue(BASIC_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + switch (meta) + { + case 0: + case 1: + case 2: + case 3: + return EnumSortCategoryBlock.ORE; + case 7: + return EnumSortCategoryBlock.BRICKS; + case 8: + return EnumSortCategoryBlock.INGOT_BLOCK; + } + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + int meta = this.getMetaFromState(state); + if (meta == 2) + { + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 2, 5); + } + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBossSpawnerMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBossSpawnerMars.java new file mode 100644 index 00000000..cc453e15 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBossSpawnerMars.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.core.blocks.BlockBossSpawner; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityDungeonSpawnerMars; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockBossSpawnerMars extends BlockBossSpawner +{ + + public BlockBossSpawnerMars(String assetName) + { + super(assetName); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityDungeonSpawnerMars(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCavernousVine.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCavernousVine.java new file mode 100644 index 00000000..32997fbf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCavernousVine.java @@ -0,0 +1,327 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IShearable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCavernousVine extends Block implements IShearable, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum VINE_TYPE = PropertyEnum.create("vinetype", EnumVineType.class); + + public enum EnumVineType implements IStringSerializable + { + + VINE_0(0, "vine_0"), VINE_1(1, "vine_1"), VINE_2(2, "vine_2"); + + private final int meta; + private final String name; + + private EnumVineType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumVineType[] values = values(); + + public static EnumVineType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockCavernousVine(String assetName) + { + super(Material.VINE); + this.setLightLevel(1.0F); + this.setTickRandomly(true); + this.setSoundType(SoundType.PLANT); + this.setTranslationKey(assetName); + } + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + if (world.setBlockToAir(pos)) + { + int y2 = pos.getY() - 1; + while (world.getBlockState(new BlockPos(pos.getX(), y2, pos.getZ())).getBlock() == this) + { + world.setBlockToAir(new BlockPos(pos.getX(), y2, pos.getZ())); + y2--; + } + + return true; + } + + return false; + } + + public boolean canBlockStay(World worldIn, BlockPos pos) + { + IBlockState stateAbove = worldIn.getBlockState(pos.up()); + return (stateAbove.getBlock() == this || stateAbove.getMaterial().isSolid()); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + + if (!this.canBlockStay(worldIn, pos)) + { + worldIn.setBlockToAir(pos); + } + } + + @Override + public void onEntityCollision(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (entityIn instanceof EntityLivingBase) + { + if (entityIn instanceof EntityPlayer && ((EntityPlayer) entityIn).capabilities.isFlying) + { + return; + } + + entityIn.motionY = 0.06F; + entityIn.rotationYaw += 0.4F; + + ((EntityLivingBase) entityIn).addPotionEffect(new PotionEffect(MobEffects.POISON, 5, 20, false, true)); + } + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + return this.getVineLight(world, pos); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return null; + } + + @Override + public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing facing) + { + return facing == EnumFacing.DOWN && world.getBlockState(pos.up()).getBlockFaceShape(world, pos.up(), facing) == BlockFaceShape.SOLID; + } + + public int getVineLength(IBlockAccess world, BlockPos pos) + { + int vineCount = 0; + int y2 = pos.getY(); + + while (world.getBlockState(new BlockPos(pos.getX(), y2, pos.getZ())).getBlock() == MarsBlocks.vine) + { + vineCount++; + y2++; + } + + return vineCount; + } + + public int getVineLight(IBlockAccess world, BlockPos pos) + { + int vineCount = 0; + int y2 = pos.getY(); + + while (world.getBlockState(new BlockPos(pos.getX(), y2, pos.getZ())).getBlock() == MarsBlocks.vine) + { + vineCount += 4; + y2--; + } + + return Math.max(19 - vineCount, 0); + } + + @Override + public int tickRate(World par1World) + { + return 50; + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + for (int y2 = pos.getY() - 1; y2 >= pos.getY() - 2; y2--) + { + BlockPos pos1 = new BlockPos(pos.getX(), y2, pos.getZ()); + Block blockID = worldIn.getBlockState(pos1).getBlock(); + + if (!blockID.isAir(worldIn.getBlockState(pos1), worldIn, pos1)) + { + return; + } + } + + worldIn.setBlockState(pos.down(), this.getStateFromMeta(this.getVineLength(worldIn, pos) % 3), 2); + worldIn.checkLight(pos); + } + + } + +// @Override +// public void onBlockAdded(World world, int x, int y, int z) +// { +// if (!world.isRemote) +// { +// // world.scheduleBlockUpdate(x, y, z, this, +// // this.tickRate(world) + world.rand.nextInt(10)); +// } +// } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this, 1, 0)); + return ret; + } + + @Override + public boolean isLadder(IBlockState state, IBlockAccess world, BlockPos pos, EntityLivingBase entity) + { + return true; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VINE_TYPE, EnumVineType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumVineType) state.getValue(VINE_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, VINE_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCreeperEgg.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCreeperEgg.java new file mode 100644 index 00000000..308a1a88 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCreeperEgg.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.block.BlockDragonEgg; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCreeperEgg extends BlockDragonEgg implements IShiftDescription, ISortableBlock +{ + + protected static final AxisAlignedBB DRAGON_EGG_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 1.0D, 0.9375D); + + public BlockCreeperEgg(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return DRAGON_EGG_AABB; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + return false; + } + + @Override + public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + + } + + @Override + @SideOnly(Side.CLIENT) + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return ItemStack.EMPTY; + } + + @Override + public void onBlockExploded(World world, BlockPos pos, Explosion explosion) + { + if (!world.isRemote) + { + EntityEvolvedCreeper creeper = new EntityEvolvedCreeper(world); + creeper.setPosition(pos.getX() + 0.5, pos.getY() + 3, pos.getZ() + 0.5); + creeper.setChild(true); + world.spawnEntity(creeper); + } + + world.setBlockToAir(pos); + this.onExplosionDestroy(world, pos, explosion); + } + + @Override + public boolean canDropFromExplosion(Explosion explose) + { + return false; + } + + // Can only be harvested with a Sticky Desh Pickaxe + @Override + public boolean canHarvestBlock(IBlockAccess world, BlockPos pos, EntityPlayer player) + { + ItemStack stack = player.inventory.getCurrentItem(); + if (stack.isEmpty()) + { + return player.canHarvestBlock(world.getBlockState(pos)); + } + return stack.getItem() == MarsItems.deshPickSlime; + } + + @SuppressWarnings("deprecation") + @Override + public float getPlayerRelativeBlockHardness(IBlockState state, EntityPlayer player, World worldIn, BlockPos pos) + { + ItemStack stack = player.inventory.getCurrentItem(); + if (stack != null && stack.getItem() == MarsItems.deshPickSlime) + { + return 0.2F; + } + + return super.getPlayerRelativeBlockHardness(state, player, worldIn, pos); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.EGG; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMars.java new file mode 100644 index 00000000..95e75e24 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMars.java @@ -0,0 +1,371 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.world.IChunkLoader; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityCryogenicChamber; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.ForgeChunkManager.Type; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.Random; + +public class BlockMachineMars extends BlockTileGC implements IShiftDescription, ISortableBlock, IPartialSealableBlock +{ + + public static final int TERRAFORMER_METADATA = 0; + public static final int CRYOGENIC_CHAMBER_METADATA = 4; + public static final int LAUNCH_CONTROLLER_METADATA = 8; + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineType.class); + + public enum EnumMachineType implements IStringSerializable + { + + TERRAFORMER(0, "terraformer"), CRYOGENIC_CHAMBER(1, "cryogenic_chamber"), LAUNCH_CONTROLLER(2, "launch_controller"); + + private final int meta; + private final String name; + + EnumMachineType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + public static EnumMachineType byMetadata(int meta) + { + return values()[meta % 3]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockMachineMars(String assetName) + { + super(GCBlocks.machine); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + if (var9 instanceof IMultiBlock) + { + ((IMultiBlock) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int metadata = getMetaFromState(state); + + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + + worldIn.setBlockState(pos, getStateFromMeta((metadata & 12) + change), 3); + + switch (metadata & 12) + { + + case BlockMachineMars.CRYOGENIC_CHAMBER_METADATA: + BlockMulti.onPlacement(worldIn, pos, placer, this); + break; + + case BlockMachineMars.LAUNCH_CONTROLLER_METADATA: + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + TileEntity var8 = worldIn.getTileEntity(pos); + if (var8 instanceof IChunkLoader && !worldIn.isRemote && ConfigManagerMars.launchControllerChunkLoad && placer instanceof EntityPlayer) + { + ((IChunkLoader) var8).setOwnerName(placer.getName()); + ((IChunkLoader) var8).onTicketLoaded(ForgeChunkManager.requestTicket(GalacticraftCore.instance, var8.getWorld(), Type.NORMAL), true); + } else if (var8 instanceof TileEntityLaunchController && placer instanceof EntityPlayer) + { + ((TileEntityLaunchController) var8).setOwnerName(placer.getName()); + } + break; + } + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + EnumMachineType type = state.getValue(TYPE); + if (type == EnumMachineType.LAUNCH_CONTROLLER) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_MARS, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } else if (type == EnumMachineType.CRYOGENIC_CHAMBER) + { + ((IMultiBlock) worldIn.getTileEntity(pos)).onActivated(playerIn); + return true; + } else + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_MARS, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + EnumMachineType type = state.getValue(TYPE); + return type == EnumMachineType.CRYOGENIC_CHAMBER ? BlockFaceShape.UNDEFINED : BlockFaceShape.SOLID; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + EnumMachineType type = state.getValue(TYPE); + if (type == EnumMachineType.LAUNCH_CONTROLLER) + { + return new TileEntityLaunchController(); + } + if (type == EnumMachineType.CRYOGENIC_CHAMBER) + { + return new TileEntityCryogenicChamber(); + } else + { + return new TileEntityTerraformer(); + } + } + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + if (getMetaFromState(state) >= BlockMachineMars.LAUNCH_CONTROLLER_METADATA) + { + WorldUtil.markAdjacentPadForUpdate(world, pos); + } + + return super.removedByPlayer(state, world, pos, player, willHarvest); + } + + public ItemStack getTerraformer() + { + return new ItemStack(this, 1, BlockMachineMars.TERRAFORMER_METADATA); + } + + public ItemStack getChamber() + { + return new ItemStack(this, 1, BlockMachineMars.CRYOGENIC_CHAMBER_METADATA); + } + + public ItemStack getLaunchController() + { + return new ItemStack(this, 1, BlockMachineMars.LAUNCH_CONTROLLER_METADATA); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(this.getTerraformer()); + list.add(this.getChamber()); + list.add(this.getLaunchController()); + } + + @Override + public int damageDropped(IBlockState state) + { + EnumMachineType type = state.getValue(TYPE); + if (type == EnumMachineType.LAUNCH_CONTROLLER) + { + return BlockMachineMars.LAUNCH_CONTROLLER_METADATA; + } else if (type == EnumMachineType.CRYOGENIC_CHAMBER) + { + return BlockMachineMars.CRYOGENIC_CHAMBER_METADATA; + } else + { + return BlockMachineMars.TERRAFORMER_METADATA; + } + } + + @Override + public boolean isBed(IBlockState state, IBlockAccess world, BlockPos pos, Entity player) + { + return state.getValue(TYPE) == EnumMachineType.CRYOGENIC_CHAMBER; + } + + @Override + public BlockPos getBedSpawnPosition(IBlockState state, IBlockAccess world, BlockPos pos, EntityPlayer player) + { + return pos.up(); + } + + @Override + public void setBedOccupied(IBlockAccess world, BlockPos pos, EntityPlayer player, boolean occupied) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntityCryogenicChamber) + { + ((TileEntityCryogenicChamber) tile).isOccupied = occupied; + } + } + + @Override + public EnumFacing getBedDirection(IBlockState state, IBlockAccess world, BlockPos pos) + { + return state.getValue(FACING); + } + + @Override + public String getShiftDescription(int meta) + { + switch (meta) + { + case CRYOGENIC_CHAMBER_METADATA: + return GCCoreUtil.translate("tile.cryo_chamber.description"); + case LAUNCH_CONTROLLER_METADATA: + return GCCoreUtil.translate("tile.launch_controller.description"); + case TERRAFORMER_METADATA: + return GCCoreUtil.translate("tile.terraformer.description"); + } + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @SideOnly(Side.CLIENT) + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineType type = EnumMachineType.byMetadata((int) Math.floor(meta / 4.0)); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + state.getValue(TYPE).getMeta() * 4; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState state, World worldIn, BlockPos pos, Random rand) + { + if (state.getValue(TYPE) == EnumMachineType.CRYOGENIC_CHAMBER) + { + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY(), pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, 0.05 + rand.nextDouble() * 0.01, 0.0)); + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY(), pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, 0.05 + rand.nextDouble() * 0.01, 0.0)); + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY(), pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, 0.05 + rand.nextDouble() * 0.01, 0.0)); + + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY() + 2.9F, pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, -0.05 - rand.nextDouble() * 0.01, 0.0)); + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY() + 2.9F, pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, -0.05 - rand.nextDouble() * 0.01, 0.0)); + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY() + 2.9F, pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, -0.05 - rand.nextDouble() * 0.01, 0.0)); + } + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return world.getBlockState(pos).getValue(TYPE) != EnumMachineType.CRYOGENIC_CHAMBER; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMarsT2.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMarsT2.java new file mode 100644 index 00000000..f9ed5873 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMarsT2.java @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockMachineMarsT2 extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineType.class); + + public enum EnumMachineType implements EnumMachineBase, IStringSerializable + { + + GAS_LIQUEFIER(0, "gas_liquefier", TileEntityGasLiquefier::new, "tile.gas_liquefier.description", "tile.mars_machine.4"), + METHANE_SYNTHESIZER(4, "methane_synthesizer", TileEntityMethaneSynthesizer::new, "tile.methane_synthesizer.description", "tile.mars_machine.5"), + ELECTROLYZER(8, "electrolyzer", TileEntityElectrolyzer::new, "tile.electrolyzer.description", "tile.mars_machine.6"); + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineType[] values = values(); + + @Override + public EnumMachineType fromMetadata(int meta) + { + return values[(meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachineMarsT2(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineType.values; + this.typeBase = EnumMachineType.values[0]; + } + + /** + * Called when the block is right clicked by the player + */ + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_MARS, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + int metadata = this.getMetaFromState(state) & BlockMachineBase.METADATA_MASK; + return new ItemStack(this, 1, metadata); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + final TileEntity te = worldIn.getTileEntity(pos); + + if (te instanceof TileEntityGasLiquefier) + { + final TileEntityGasLiquefier tileEntity = (TileEntityGasLiquefier) te; + + if (tileEntity.processTicks > 0) + { + final float x = pos.getX() + 0.5F; + final float y = pos.getY() + 0.8F + 0.05F * rand.nextInt(3); + final float z = pos.getZ() + 0.5F; + + for (float i = -0.41F + 0.16F * rand.nextFloat(); i < 0.5F; i += 0.167F) + { + if (rand.nextInt(3) == 0) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeTiny", new Vector3(x + i, y, z - 0.41F), new Vector3(0.0D, -0.015D, -0.0015D), new Object[] + {}); + } + if (rand.nextInt(3) == 0) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeTiny", new Vector3(x + i, y, z + 0.537F), new Vector3(0.0D, -0.015D, 0.0015D), new Object[] + {}); + } + if (rand.nextInt(3) == 0) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeTiny", new Vector3(x - 0.41F, y, z + i), new Vector3(-0.0015D, -0.015D, 0.0D), new Object[] + {}); + } + if (rand.nextInt(3) == 0) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeTiny", new Vector3(x + 0.537F, y, z + i), new Vector3(0.0015D, -0.015D, 0.0D), new Object[] + {}); + } + } + } + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineType type = (EnumMachineType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSlimelingEgg.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSlimelingEgg.java new file mode 100644 index 00000000..89aa50aa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSlimelingEgg.java @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntitySlimelingEgg; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Enchantments; +import net.minecraft.item.Item; +import net.minecraft.item.ItemPickaxe; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSlimelingEgg extends Block implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + // private IIcon[] icons; + public static final PropertyEnum EGG_COLOR = PropertyEnum.create("eggcolor", EnumEggColor.class); + public static final PropertyBool BROKEN = PropertyBool.create("broken"); + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.25, 0.0, 0.25, 0.75, 0.625, 0.75); + + public enum EnumEggColor implements IStringSerializable + { + + RED(0, "red"), BLUE(1, "blue"), YELLOW(2, "yellow"); + + private final int meta; + private final String name; + + private EnumEggColor(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockSlimelingEgg(String assetName) + { + super(Material.ROCK); +// this.setBlockBounds(0.25F, 0.0F, 0.25F, 0.75F, 0.625F, 0.75F); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(EGG_COLOR, EnumEggColor.RED).withProperty(BROKEN, false)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); + } + +// @Override +// public boolean canBlockStay(World par1World, int par2, int par3, int par4) +// { +// Block block = par1World.getBlock(par2, par3 - 1, par4); +// return block.isSideSolid(par1World, par2, par3, par4, ForgeDirection.UP); +// } + + private boolean beginHatch(World world, BlockPos pos, EntityPlayer player, int time) + { + IBlockState state = world.getBlockState(pos); + int l = state.getBlock().getMetaFromState(state); + + if (l < 3) + { + world.setBlockState(pos, state.getBlock().getStateFromMeta(l + 3), 2); + + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntitySlimelingEgg) + { + ((TileEntitySlimelingEgg) tile).timeToHatch = world.rand.nextInt(30 + time) + time; + ((TileEntitySlimelingEgg) tile).lastTouchedPlayerUUID = player.getUniqueID().toString(); + ((TileEntitySlimelingEgg) tile).lastTouchedPlayerName = player.getName(); + } + + world.markBlockRangeForRenderUpdate(pos, pos); + + return true; + } else + { + world.markBlockRangeForRenderUpdate(pos, pos); + return false; + } + } + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + ItemStack currentStack = player.getHeldItemMainhand(); + if (currentStack != null && currentStack.getItem() instanceof ItemPickaxe) + { + return world.setBlockToAir(pos); + } else if (player.capabilities.isCreativeMode) + { + return world.setBlockToAir(pos); + } else + { + beginHatch(world, pos, player, 0); + return false; + } + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + return beginHatch(worldIn, pos, playerIn, 20); + } + + @Override + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, @Nullable ItemStack currentStack) + { + if (!currentStack.isEmpty() && currentStack.getItem() instanceof ItemPickaxe) + { + player.addStat(StatList.getBlockStats(this)); + player.addExhaustion(0.025F); + this.dropBlockAsItem(worldIn, pos, state.getBlock().getStateFromMeta(state.getBlock().getMetaFromState(state) % 3), 0); + if (currentStack.getItem() == MarsItems.deshPickaxe && EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, currentStack) > 0) + { + ItemStack itemstack = new ItemStack(MarsItems.deshPickSlime, 1, currentStack.getItemDamage()); + if (currentStack.getTagCompound() != null) + { + itemstack.setTagCompound(currentStack.getTagCompound().copy()); + } + player.inventory.setInventorySlotContents(player.inventory.currentItem, itemstack); + } + } + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata) { + * return this.icons[metadata % 6]; } + */ + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + +// @Override +// public Item getItemDropped(int meta, Random random, int par3) +// { +// return Item.getItemFromBlock(this); +// } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + +// @Override +// public int quantityDropped(int meta, int fortune, Random random) +// { +// return 1; +// } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int var4 = 0; var4 < EnumEggColor.values().length; ++var4) + { + list.add(new ItemStack(this, 1, var4)); + } + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntitySlimelingEgg(); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + int metadata = state.getBlock().getMetaFromState(state); + + if (metadata == 3) + { + return new ItemStack(Item.getItemFromBlock(this), 1, 0); + } + if (metadata == 4) + { + return new ItemStack(Item.getItemFromBlock(this), 1, 1); + } + if (metadata == 5) + { + return new ItemStack(Item.getItemFromBlock(this), 1, 2); + } + return super.getPickBlock(state, target, world, pos, player); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(EGG_COLOR, EnumEggColor.values()[meta % 3]).withProperty(BROKEN, meta - 3 >= 0); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumEggColor) state.getValue(EGG_COLOR)).getMeta() + (state.getValue(BROKEN) ? 3 : 0); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, EGG_COLOR, BROKEN); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.EGG; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSludge.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSludge.java new file mode 100644 index 00000000..b62c999d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSludge.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySludgeling; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSludge extends BlockFluidClassic +{ +// @SideOnly(Side.CLIENT) +// IIcon stillIcon; +// @SideOnly(Side.CLIENT) +// IIcon flowingIcon; + + @Override + public void onEntityCollision(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (!worldIn.isRemote) + { + if (entityIn instanceof EntityPlayer && ((EntityPlayer) entityIn).capabilities.isFlying || entityIn instanceof EntitySludgeling) + { + return; + } + + int range = 5; + List l = worldIn.getEntitiesWithinAABB(EntitySludgeling.class, + new AxisAlignedBB(pos.getX() - range, pos.getY() - range, pos.getZ() - range, pos.getX() + range, pos.getY() + range, pos.getZ() + range)); + + if (l.size() < 3) + { + EntitySludgeling sludgeling = new EntitySludgeling(worldIn); + sludgeling.setPosition(pos.getX() + worldIn.rand.nextInt(5) - 2, pos.getY(), pos.getZ() + worldIn.rand.nextInt(5) - 2); + worldIn.spawnEntity(sludgeling); + } + } + + super.onEntityCollision(worldIn, pos, state, entityIn); + } + + @Override + @Nullable + public Boolean isEntityInsideMaterial(IBlockAccess world, BlockPos pos, IBlockState state, Entity entity, double yToTest, Material material, boolean testingHead) + { + return true; + } + + public BlockSludge(String assetName) + { + super(MarsModule.sludge, MarsModule.sludgeMaterial); + this.setQuantaPerBlock(9); + this.setLightLevel(1.0F); + this.needsRandomTick = true; + this.setTranslationKey(assetName); + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public IIcon getIcon(int par1, int par2) { return + * par1 != 0 && par1 != 1 ? this.flowingIcon : this.stillIcon; } + * @Override + * @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister + * par1IconRegister) { this.stillIcon = + * par1IconRegister.registerIcon(MarsModule.TEXTURE_PREFIX + + * "sludge_still"); this.flowingIcon = + * par1IconRegister.registerIcon(MarsModule.TEXTURE_PREFIX + "sludge_flow"); + * MarsModule.SLUDGE.setStillIcon(this.stillIcon); + * MarsModule.SLUDGE.setFlowingIcon(this.flowingIcon); } + */ + + @Override + public boolean canDisplace(IBlockAccess world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + return super.canDisplace(world, pos); + } + + @Override + public boolean displaceIfPossible(World world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + return super.displaceIfPossible(world, pos); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + super.randomDisplayTick(stateIn, worldIn, pos, rand); + + if (rand.nextInt(1200) == 0) + { + worldIn.playSound(null, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, SoundEvents.BLOCK_LAVA_AMBIENT, SoundCategory.BLOCKS, rand.nextFloat() * 0.25F + 0.75F, + 0.00001F + rand.nextFloat() * 0.5F); + } + if (rand.nextInt(10) == 0) + { + BlockPos below = pos.down(); + IBlockState state = worldIn.getBlockState(below); + if (state.getBlock().isSideSolid(state, worldIn, below, EnumFacing.UP) && !worldIn.getBlockState(pos.down(2)).getMaterial().blocksMovement()) + { + GalacticraftPlanets.spawnParticle("bacterialDrip", new Vector3(pos.getX() + rand.nextFloat(), pos.getY() - 1.05D, pos.getZ() + rand.nextFloat()), new Vector3(0, 0, 0)); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockTier2TreasureChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockTier2TreasureChest.java new file mode 100644 index 00000000..b22db6d7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockTier2TreasureChest.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTreasureChestMars; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockTier2TreasureChest extends BlockTier1TreasureChest +{ + + public BlockTier2TreasureChest(String assetName) + { + super(assetName); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityTreasureChestMars(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/MarsBlocks.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/MarsBlocks.java new file mode 100644 index 00000000..b765763b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/MarsBlocks.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockStairsGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGC; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemBlockEgg; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemBlockMachine; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemBlockMars; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public class MarsBlocks +{ + + public static Block marsBlock; + public static Block blockSludge; + public static Block vine; + public static Block rock; + public static Block treasureChestTier2; + public static Block machine; + public static Block machineT2; + public static Block creeperEgg; + public static Block marsCobblestoneStairs; + public static Block marsBricksStairs; + public static Block bossSpawner; + + public static void initBlocks() + { + MarsBlocks.marsBlock = new BlockBasicMars("mars").setHardness(2.2F); + MarsBlocks.vine = new BlockCavernousVine("cavern_vines").setHardness(0.1F); + MarsBlocks.rock = new BlockSlimelingEgg("slimeling_egg").setHardness(0.75F); + MarsBlocks.treasureChestTier2 = new BlockTier2TreasureChest("treasure_t2"); + MarsBlocks.machine = new BlockMachineMars("mars_machine").setHardness(1.8F); + MarsBlocks.machineT2 = new BlockMachineMarsT2("mars_machine_t2").setHardness(1.8F); + MarsBlocks.creeperEgg = new BlockCreeperEgg("creeper_egg").setHardness(-1.0F); + MarsBlocks.bossSpawner = new BlockBossSpawnerMars("boss_spawner_mars"); + MarsBlocks.marsCobblestoneStairs = + new BlockStairsGC("mars_stairs_cobblestone", marsBlock.getDefaultState().withProperty(BlockBasicMars.BASIC_TYPE, BlockBasicMars.EnumBlockBasic.COBBLESTONE)).setHardness(1.5F); + MarsBlocks.marsBricksStairs = + new BlockStairsGC("mars_stairs_brick", marsBlock.getDefaultState().withProperty(BlockBasicMars.BASIC_TYPE, BlockBasicMars.EnumBlockBasic.DUNGEON_BRICK)).setHardness(4.0F); + + GCBlocks.hiddenBlocks.add(MarsBlocks.bossSpawner); + + MarsBlocks.registerBlocks(); + MarsBlocks.setHarvestLevels(); + } + + private static void setHarvestLevel(Block block, String toolClass, int level, int meta) + { + block.setHarvestLevel(toolClass, level, block.getStateFromMeta(meta)); + } + + private static void setHarvestLevel(Block block, String toolClass, int level) + { + block.setHarvestLevel(toolClass, level); + } + + public static void setHarvestLevels() + { + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 1, 0); // Copper ore + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 1, 1); // Tin ore + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 3, 2); // Desh ore + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 1, 3); // Iron ore + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 0, 4); // Cobblestone + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 3, 7); // Dungeon brick + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 0, 8); // Decoration + // block + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 1, 9); // Stone + setHarvestLevel(MarsBlocks.marsBlock, "shovel", 0, 5); // Top dirt + setHarvestLevel(MarsBlocks.marsBlock, "shovel", 0, 6); // Dirt + setHarvestLevel(MarsBlocks.rock, "pickaxe", 3); + // setHarvestLevel(MarsBlocks.marsCobblestoneStairs, "pickaxe", 0); + // setHarvestLevel(MarsBlocks.marsBricksStairs, "pickaxe", 3); + } + + public static void registerBlock(Block block, Class itemClass) + { + GCBlocks.register(Constants.MOD_ID_PLANETS, block, itemClass); + } + + public static void registerBlocks() + { + registerBlock(MarsBlocks.treasureChestTier2, ItemBlockDesc.class); + registerBlock(MarsBlocks.marsBlock, ItemBlockMars.class); + registerBlock(MarsBlocks.vine, ItemBlockDesc.class); + registerBlock(MarsBlocks.rock, ItemBlockEgg.class); + registerBlock(MarsBlocks.creeperEgg, ItemBlockDesc.class); + registerBlock(MarsBlocks.machine, ItemBlockMachine.class); + registerBlock(MarsBlocks.machineT2, ItemBlockMachine.class); + registerBlock(MarsBlocks.bossSpawner, ItemBlockGC.class); + registerBlock(MarsBlocks.marsCobblestoneStairs, ItemBlockGC.class); + registerBlock(MarsBlocks.marsBricksStairs, ItemBlockGC.class); + } + + public static void oreDictRegistration() + { + OreDictionary.registerOre("oreCopper", new ItemStack(MarsBlocks.marsBlock, 1, 0)); + OreDictionary.registerOre("oreTin", new ItemStack(MarsBlocks.marsBlock, 1, 1)); + OreDictionary.registerOre("oreIron", new ItemStack(MarsBlocks.marsBlock, 1, 3)); + OreDictionary.registerOre("oreDesh", new ItemStack(MarsBlocks.marsBlock, 1, 2)); + OreDictionary.registerOre("blockDesh", new ItemStack(MarsBlocks.marsBlock, 1, 8)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/SkyProviderMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/SkyProviderMars.java new file mode 100644 index 00000000..c64784a6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/SkyProviderMars.java @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +/** + * SkyProviderMars.java

This file is part of the Galacticraft project + * + * @author micdoodle8 + */ +@SideOnly(Side.CLIENT) +public class SkyProviderMars extends IRenderHandler +{ + + private static final ResourceLocation overworldTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/atmosphericsun.png"); + + public int starList; + public int glSkyList; + public int glSkyList2; + private float sunSize; + + public SkyProviderMars(IGalacticraftWorldProvider marsProvider) + { + this.sunSize = 17.5F * marsProvider.getSolarSize(); + + int displayLists = GLAllocation.generateDisplayLists(3); + this.starList = displayLists; + this.glSkyList = displayLists + 1; + this.glSkyList2 = displayLists + 2; + + // Bind stars to display list + GL11.glPushMatrix(); + GL11.glNewList(this.starList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j, f, l).endVertex(); + worldRenderer.pos(j + byte2, f, l).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1).endVertex(); + worldRenderer.pos(k, f, i1).endVertex(); + worldRenderer.pos(k, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + Vec3d vec3 = world.getSkyColor(mc.getRenderViewEntity(), partialTicks); + float f1 = (float) vec3.x; + float f2 = (float) vec3.y; + float f3 = (float) vec3.z; + float f6; + + if (mc.gameSettings.anaglyph) + { + float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F; + float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F; + f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F; + f1 = f4; + f2 = f5; + f3 = f6; + } + + GL11.glColor3f(f1, f2, f3); + Tessellator tessellator1 = Tessellator.getInstance(); + BufferBuilder worldRenderer1 = tessellator1.getBuffer(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(f1, f2, f3); + GL11.glCallList(this.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + RenderHelper.disableStandardItemLighting(); + float f7; + float f8; + float f9; + float f10; + + float f18 = world.getStarBrightness(partialTicks); + + if (f18 > 0.0F) + { + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-19.0F, 0, 1.0F, 0); + GL11.glColor4f(f18, f18, f18, f18); + GL11.glCallList(this.starList); + GL11.glPopMatrix(); + } + + float[] afloat = new float[4]; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + afloat[0] = 255 / 255.0F; + afloat[1] = 194 / 255.0F; + afloat[2] = 180 / 255.0F; + afloat[3] = 0.3F; + f6 = afloat[0]; + f7 = afloat[1]; + f8 = afloat[2]; + float f11; + + if (mc.gameSettings.anaglyph) + { + f9 = (f6 * 30.0F + f7 * 59.0F + f8 * 11.0F) / 100.0F; + f10 = (f6 * 30.0F + f7 * 70.0F) / 100.0F; + f11 = (f6 * 30.0F + f8 * 70.0F) / 100.0F; + f6 = f9; + f7 = f10; + f8 = f11; + } + + f18 = 1.0F - f18; + + worldRenderer1.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + float r = f6 * f18; + float g = f7 * f18; + float b = f8 * f18; + float a = afloat[3] * 2 / f18; + worldRenderer1.pos(0.0D, 100.0D, 0.0D).color(r, g, b, a).endVertex(); + byte b0 = 16; + r = afloat[0] * f18; + g = afloat[1] * f18; + b = afloat[2] * f18; + a = 0.0F; + + // Render sun aura + f10 = 20.0F; + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) -f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) -f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + + tessellator1.draw(); + worldRenderer1.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + r = f6 * f18; + g = f7 * f18; + b = f8 * f18; + a = afloat[3] * f18; + worldRenderer1.pos(0.0D, 100.0D, 0.0D).color(r, g, b, a).endVertex(); + r = afloat[0] * f18; + g = afloat[1] * f18; + b = afloat[2] * f18; + a = 0.0F; + + // Render larger sun aura + f10 = 40.0F; + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) -f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) -f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + + tessellator1.draw(); + GL11.glPopMatrix(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE, GL11.GL_ZERO); + GL11.glPushMatrix(); + f7 = 0.0F; + f8 = 0.0F; + f9 = 0.0F; + GL11.glTranslatef(f7, f8, f9); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + // Render sun + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + // Some blanking to conceal the stars + f10 = this.sunSize / 3.5F; + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer1.pos(-f10, 99.9D, -f10).endVertex(); + worldRenderer1.pos(f10, 99.9D, -f10).endVertex(); + worldRenderer1.pos(f10, 99.9D, f10).endVertex(); + worldRenderer1.pos(-f10, 99.9D, f10).endVertex(); + tessellator1.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + f10 = this.sunSize; + mc.renderEngine.bindTexture(SkyProviderMars.sunTexture); + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer1.pos(-f10, 100.0D, -f10).tex(0.0D, 0.0D).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).tex(1.0D, 0.0D).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).tex(1.0D, 1.0D).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).tex(0.0D, 1.0D).endVertex(); + tessellator1.draw(); + + // Render earth + f10 = 0.5F; + GL11.glScalef(0.6F, 0.6F, 0.6F); + GL11.glRotatef(40.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(200F, 1.0F, 0.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1F); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderMars.overworldTexture); + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer1.pos(-f10, -100.0D, f10).tex(0, 1.0).endVertex(); + worldRenderer1.pos(f10, -100.0D, f10).tex(1.0, 1.0).endVertex(); + worldRenderer1.pos(f10, -100.0D, -f10).tex(1.0, 0).endVertex(); + worldRenderer1.pos(-f10, -100.0D, -f10).tex(0, 0).endVertex(); + tessellator1.draw(); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + double d0 = mc.player.getPosition().getY() - world.getHorizon(); + + if (d0 < 0.0D) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 12.0F, 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + f8 = 1.0F; + f9 = -((float) (d0 + 65.0D)); + f10 = -f8; + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer1.pos(-f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + tessellator1.draw(); + } + + if (world.provider.isSkyColored()) + { + GL11.glColor3f(f1 * 0.2F + 0.04F, f2 * 0.2F + 0.04F, f3 * 0.6F + 0.1F); + } else + { + GL11.glColor3f(f1, f2, f3); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -((float) (d0 - 16.0D)), 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); + GL11.glDepthMask(true); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random rand = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var2.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int starIndex = 0; starIndex < (ConfigManagerCore.moreStars ? 35000 : 6000); ++starIndex) + { + double var4 = rand.nextFloat() * 2.0F - 1.0F; + double var6 = rand.nextFloat() * 2.0F - 1.0F; + double var8 = rand.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.15F + rand.nextFloat() * 0.1F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double var14 = var4 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var16 = var6 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var18 = var8 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = rand.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int var38 = 0; var38 < 4; ++var38) + { + final double var39 = 0.0D; + final double var41 = ((var38 & 2) - 1) * var10; + final double var43 = ((var38 + 1 & 2) - 1) * var10; + final double var47 = var41 * var36 - var43 * var34; + final double var49 = var43 * var36 + var41 * var34; + final double var53 = var47 * var28 + var39 * var30; + final double var55 = var39 * var28 - var47 * var30; + final double var57 = var55 * var22 - var49 * var24; + final double var61 = var49 * var22 + var55 * var24; + worldRenderer.pos(var14 + var57, var16 + var53, var18 + var61).endVertex(); + } + } + } + + var2.draw(); + } + + private Vec3d getCustomSkyColor() + { + return new Vec3d(0.26796875D, 0.1796875D, 0.0D); + } + + public float getSkyBrightness(float par1) + { + final float var2 = FMLClientHandler.instance().getClient().world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.sin(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/EntityCryoFX.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/EntityCryoFX.java new file mode 100644 index 00000000..d67e1e99 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/EntityCryoFX.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.fx; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class EntityCryoFX extends Particle +{ + + float oSize; + + public EntityCryoFX(World worldIn, Vector3 position, Vector3 motion) + { + super(worldIn, position.x, position.y, position.z, 0.0D, 0.0D, 0.0D); + float f = 2.5F; + this.motionX *= 0.0; + this.motionY *= 0.10000000149011612; + this.motionZ *= 0.0; + this.motionX += motion.x; + this.motionY += motion.y; + this.motionZ += motion.z; + this.particleRed = this.particleGreen = this.particleBlue = 1.0F - (float) (Math.random() * 0.30000001192092896D); + this.particleRed *= 0.8F; + this.particleGreen *= 0.8F; + this.particleScale *= 0.25F; + this.particleScale *= f; + this.oSize = this.particleScale; + this.particleMaxAge = (int) (8.0D / (Math.random() * 0.8D + 0.3D)); + this.particleMaxAge = (int) ((float) this.particleMaxAge * f); + this.canCollide = false; + } + + /** + * Renders the particle + */ + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float p_180434_4_, float p_180434_5_, float p_180434_6_, float p_180434_7_, float p_180434_8_) + { + float f = ((float) this.particleAge + partialTicks) / (float) this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.oSize * f; + super.renderParticle(worldRendererIn, entityIn, partialTicks, p_180434_4_, p_180434_5_, p_180434_6_, p_180434_7_, p_180434_8_); + } + + /** + * Called to update the entity's position/logic. + */ + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + EntityPlayer entityplayer = this.world.getClosestPlayer(this.posX, this.posY, this.posZ, 2.0D, false); + + if (entityplayer != null && this.posY > entityplayer.getEntityBoundingBox().minY) + { + this.posY += (entityplayer.getEntityBoundingBox().minY - this.posY) * 0.2D; + this.motionY += (entityplayer.motionY - this.motionY) * 0.2D; + this.setPosition(this.posX, this.posY, this.posZ); + } + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/ParticleDrip.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/ParticleDrip.java new file mode 100644 index 00000000..46502efe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/ParticleDrip.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.fx; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.Particle; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleDrip extends Particle +{ + + private int bobTimer; + + public ParticleDrip(World world, double x, double y, double z) + { + super(world, x, y, z, 0.0D, 0.0D, 0.0D); + this.motionX = this.motionY = this.motionZ = 0.0D; + this.setParticleTextureIndex(113); + this.setSize(0.01F, 0.01F); + this.particleGravity = 0.06F; + this.bobTimer = 40; + this.particleMaxAge = (int) (64.0D / (Math.random() * 0.8D + 0.2D)); + this.motionX = this.motionY = this.motionZ = 0.0D; + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.particleRed = 0.0F; + this.particleGreen = 0.2F; + this.particleBlue = 0.1F; + this.motionY -= this.particleGravity; + + if (this.bobTimer-- > 0) + { + this.motionX *= 0.02D; + this.motionY *= 0.02D; + this.motionZ *= 0.02D; + this.setParticleTextureIndex(113); + } else + { + this.setParticleTextureIndex(112); + } + + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + + if (this.onGround) + { + this.setExpired(); + } + + BlockPos pos = new BlockPos(this.posX, this.posY, this.posZ); + IBlockState state = this.world.getBlockState(pos); + Material material = state.getMaterial(); + + if (material.isLiquid() || material.isSolid()) + { + double d0 = 0.0D; + + if (state.getBlock() instanceof BlockLiquid) + { + d0 = BlockLiquid.getLiquidHeightPercent(((Integer) state.getValue(BlockLiquid.LEVEL)).intValue()); + } + + double d1 = MathHelper.floor(this.posY) + 1 - d0; + + if (this.posY < d1) + { + this.setExpired(); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiCargoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiCargoRocket.java new file mode 100644 index 00000000..26fa50c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiCargoRocket.java @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRocketInventory; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiCargoRocket extends GuiContainerGC +{ + + private static ResourceLocation[] rocketTextures = new ResourceLocation[4]; + + static + { + for (int i = 0; i < 4; i++) + { + GuiCargoRocket.rocketTextures[i] = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/rocket_" + i * 18 + ".png"); + } + } + + private final IInventory upperChestInventory; + private final EnumRocketType rocketType; + private EntityCargoRocket rocket; + private GuiButton launchButton; + + public GuiCargoRocket(IInventory par1IInventory, EntityCargoRocket rocket) + { + this(par1IInventory, rocket, rocket.rocketType); + } + + public GuiCargoRocket(IInventory par1IInventory, EntityCargoRocket rocket, EnumRocketType rocketType) + { + super(new ContainerRocketInventory(par1IInventory, rocket, rocketType, FMLClientHandler.instance().getClient().player)); + this.upperChestInventory = par1IInventory; + this.rocket = rocket; + this.allowUserInput = false; + this.ySize = rocketType.getInventorySpace() <= 3 ? 132 : 145 + rocketType.getInventorySpace() * 2; + this.rocketType = rocketType; + } + + @Override + protected void actionPerformed(GuiButton button) + { + switch (button.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_CARGO_ROCKET_STATUS, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.rocket.getEntityId(), 0})); + break; + default: + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + final int var6 = (this.height - this.ySize) / 2; + final int var7 = (this.width - this.xSize) / 2; + this.launchButton = new GuiButton(0, var7 + 116, var6 + 26, 50, 20, GCCoreUtil.translate("gui.message.launch.name")); + this.buttonList.add(this.launchButton); + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.0")); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + (this.rocket.rocketType.getInventorySpace() == 2 ? 70 : 71), (this.height - this.ySize) / 2 + 6, 36, 40, + fuelTankDesc, this.width, this.height, this)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + if (this.rocket.rocketType.getInventorySpace() == 2) + { + this.fontRenderer.drawString(GCCoreUtil.translate(this.upperChestInventory.getName()), 8, 76 + (this.rocket.rocketType.getInventorySpace() - 20) / 9 * 18, 4210752); + } else + { + this.fontRenderer.drawString(GCCoreUtil.translate(this.upperChestInventory.getName()), 8, 89 + (this.rocket.rocketType.getInventorySpace() - 20) / 9 * 18, 4210752); + } + + String str = GCCoreUtil.translate("gui.message.fuel.name") + ":"; + this.fontRenderer.drawString(str, 140 - this.fontRenderer.getStringWidth(str) / 2, 5, 4210752); + final double percentage = this.rocket.getScaledFuelLevel(100); + String color = percentage > 80.0D ? EnumColor.BRIGHT_GREEN.getCode() : percentage > 40.0D ? EnumColor.ORANGE.getCode() : EnumColor.RED.getCode(); + str = percentage + "% " + GCCoreUtil.translate("gui.message.full.name"); + this.fontRenderer.drawString(color + str, 140 - this.fontRenderer.getStringWidth(str) / 2, 15, 4210752); + str = GCCoreUtil.translate("gui.message.status.name") + ":"; + this.fontRenderer.drawString(str, 40 - this.fontRenderer.getStringWidth(str) / 2, 9, 4210752); + + String[] spltString = + {""}; + String colour = EnumColor.YELLOW.toString(); + + if (this.rocket.statusMessageCooldown == 0 || this.rocket.statusMessage == null) + { + spltString = new String[2]; + spltString[0] = GCCoreUtil.translate("gui.cargorocket.status.waiting.0"); + spltString[1] = GCCoreUtil.translate("gui.cargorocket.status.waiting.1"); + + if (this.rocket.launchPhase != EnumLaunchPhase.UNIGNITED.ordinal()) + { + spltString = new String[2]; + spltString[0] = GCCoreUtil.translate("gui.cargorocket.status.launched.0"); + spltString[1] = GCCoreUtil.translate("gui.cargorocket.status.launched.1"); + this.launchButton.enabled = false; + } + } else + { + spltString = this.rocket.statusMessage.split("#"); + colour = this.rocket.statusColour; + } + + int y = 2; + for (String splitString : spltString) + { + this.fontRenderer.drawString(colour + splitString, 35 - this.fontRenderer.getStringWidth(splitString) / 2, 9 * y, 4210752); + y++; + } + + if (this.rocket.statusValid && this.rocket.statusMessageCooldown > 0 && this.rocket.statusMessageCooldown < 4) + { + this.mc.displayGuiScreen(null); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.getTextureManager().bindTexture(GuiCargoRocket.rocketTextures[(this.rocketType.getInventorySpace() - 2) / 18]); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, 176, this.ySize); + + final int fuelLevel = this.rocket.getScaledFuelLevel(38); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + (this.rocket.rocketType.getInventorySpace() == 2 ? 71 : 72), (this.height - this.ySize) / 2 + 45 - fuelLevel, 176, 38 - fuelLevel, + 42, fuelLevel); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiGasLiquefier.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiGasLiquefier.java new file mode 100644 index 00000000..9cd4723e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiGasLiquefier.java @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiGasLiquefier extends GuiContainerGC +{ + + private static final ResourceLocation refineryTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gas_liquefier_m.png"); + + private static final ResourceLocation gasTextures = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + private final TileEntityGasLiquefier tileEntity; + + private GuiButton buttonDisable; + + private GuiElementInfoRegion fuelTankRegion = new GuiElementInfoRegion((this.width - this.xSize) / 2 + 132, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + + private GuiElementInfoRegion gasTankRegion = new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion((this.width - this.xSize) / 2 + 62, (this.height - this.ySize) / 2 + 16, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiGasLiquefier(InventoryPlayer par1InventoryPlayer, TileEntityGasLiquefier tileEntity) + { + super(new ContainerGasLiquefier(par1InventoryPlayer, tileEntity, FMLClientHandler.instance().getClient().player)); + this.tileEntity = tileEntity; + this.ySize = 168; + } + + @Override + public void initGui() + { + super.initGui(); + + this.gasTankRegion.xPosition = (this.width - this.xSize) / 2 + 7; + this.gasTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.gasTankRegion.parentWidth = this.width; + this.gasTankRegion.parentHeight = this.height; + this.infoRegions.add(this.gasTankRegion); + + List batterySlotDesc = new ArrayList<>(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 33, (this.height - this.ySize) / 2 + 49, 18, 18, batterySlotDesc, this.width, this.height, this)); + + this.fuelTankRegion.xPosition = (this.width - this.xSize) / 2 + 132; + this.fuelTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.fuelTankRegion.parentWidth = this.width; + this.fuelTankRegion.parentHeight = this.height; + this.infoRegions.add(this.fuelTankRegion); + + List fuelSlotDesc = new ArrayList<>(); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.0")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.1")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.liquid_output.desc.2")); + + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 131, (this.height - this.ySize) / 2 + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + fuelSlotDesc = new ArrayList<>(); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.gas_input.desc.0")); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.gas_input.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 6, (this.height - this.ySize) / 2 + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 42; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 16; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + + this.addToolTips(); + + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 49, this.height / 2 - 56, 76, 20, GCCoreUtil.translate("gui.button.liquefy.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.tileEntity.getWorld()), new Object[] {this.tileEntity.getPos(), 0})); + break; + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 40, 5, 4210752); + String displayText = ""; + int yOffset = -18; + + if (RedstoneUtil.isBlockReceivingRedstone(this.tileEntity.getWorld(), this.tileEntity.getPos())) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.off.name"); + } else if (!this.tileEntity.hasEnoughEnergyToRun) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.message.low_energy.name"); + } else if ((this.tileEntity.processTicks > -10 || this.tileEntity.canProcess())) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.liquefying.name"); + } else if (this.tileEntity.gasTank.getFluid() == null || this.tileEntity.gasTank.getFluidAmount() <= 0) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.nogas.name"); + } else if (this.tileEntity.gasTank.getFluidAmount() > 0 && this.tileEntity.disabled) + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } else if (this.tileEntity.liquidTank.getFluidAmount() == this.tileEntity.liquidTank.getCapacity()) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.tanksfull.name"); + } else + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.unknown.name"); + } + + this.buttonDisable.enabled = this.tileEntity.disableCooldown == 0; + this.buttonDisable.displayString = this.tileEntity.processTicks <= -10 ? GCCoreUtil.translate("gui.button.liquefy.name") : GCCoreUtil.translate("gui.button.liquefy_stop.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ":", 56, 45 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(displayText, 62, 45 + 33 + yOffset, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 23, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiGasLiquefier.refineryTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int edgeLeft = (this.width - this.xSize) / 2; + int edgeTop = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(edgeLeft, edgeTop, 0, 0, this.xSize, this.ySize); + + // Fluid tank 1 + // 0 for fuel, 1 for oxygen, 2 for atmospheric gases + int liquidType = this.tileEntity.fluidTankType; + if (liquidType == 0) + { + int displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect(edgeLeft + 132, edgeTop + 17 + 49 - displayInt, 176 + 16, 38 - displayInt, 16, displayInt); + } + + this.mc.renderEngine.bindTexture(GuiGasLiquefier.gasTextures); + int displayInt = this.tileEntity.getScaledGasLevel(38); + // 0 for methane, 1 for oxygen, 2 for atmospheric gases + int gasType = this.tileEntity.gasTankType; + if (gasType > 2) + { + gasType = 2; + } + if (gasType >= 0) + { + this.drawTexturedModalRect(edgeLeft + 7, edgeTop + 17 + 49 - displayInt, 1 + gasType * 17, 38 - displayInt, 16, displayInt); + } + if (liquidType > 0) + { + displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect(edgeLeft + 132, edgeTop + 17 + 49 - displayInt, (liquidType + 2) * 17 + 1, 38 - displayInt, 16, displayInt); + } + + this.addToolTips(); + + this.mc.renderEngine.bindTexture(GuiGasLiquefier.refineryTexture); + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(edgeLeft + 28, edgeTop + 16, 208, 0, 11, 10); + } + + this.drawTexturedModalRect(edgeLeft + 42, edgeTop + 17, 176, 38, Math.min(this.tileEntity.getScaledElecticalLevel(54), 54), 7); + } + + private void addToolTips() + { + List gasTankDesc = new ArrayList<>(); + gasTankDesc.add(GCCoreUtil.translate("gui.gas_tank_compressed.desc.0")); + FluidStack gasTankContents = this.tileEntity.gasTank != null ? this.tileEntity.gasTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + gasTankDesc.add("(" + gasname + ")"); + } else + { + gasTankDesc.add(" "); + } + int gasLevel = gasTankContents != null ? gasTankContents.amount : 0; + int gasCapacity = this.tileEntity.gasTank != null ? this.tileEntity.gasTank.getCapacity() : 0; + gasTankDesc.add(EnumColor.YELLOW + " " + gasLevel + " / " + gasCapacity); + this.gasTankRegion.tooltipStrings = gasTankDesc; + + List fuelTankDesc = new ArrayList<>(); + fuelTankDesc.add(GCCoreUtil.translate("gui.liquid_tank.desc.0")); + gasTankContents = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + int fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + int fuelCapacity = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + " " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + + fuelTankDesc = new ArrayList<>(); + fuelTankDesc.add(GCCoreUtil.translate("gui.liquid_tank.desc.0")); + + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + + List electricityDesc = new ArrayList<>(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchController.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchController.java new file mode 100644 index 00000000..ce02ee99 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchController.java @@ -0,0 +1,408 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiLabel; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiLaunchController extends GuiContainerGC implements ITextBoxCallback +{ + + private static final ResourceLocation launchControllerGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/launch_controller.png"); + + private TileEntityLaunchController launchController; + + private GuiButton enableControllerButton; + private GuiButton hideDestinationFrequency; + private GuiButton openAdvancedConfig; + private GuiElementTextBox frequency; + private GuiElementTextBox destinationFrequency; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 52, 9, null, 0, 0, this); + private GuiElementInfoRegion waterTankInfoRegion = new GuiElementInfoRegion(0, 0, 41, 28, null, 0, 0, this); + + private int cannotEditTimer; + + public GuiLaunchController(InventoryPlayer playerInventory, TileEntityLaunchController launchController) + { + super(new ContainerLaunchController(playerInventory, launchController, FMLClientHandler.instance().getClient().player)); + this.ySize = 209; + this.launchController = launchController; + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + if (this.launchController.disableCooldown > 0) + { + this.enableControllerButton.enabled = false; + this.hideDestinationFrequency.enabled = false; + } else + { + boolean isOwner = PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName()); + this.enableControllerButton.enabled = isOwner; + this.hideDestinationFrequency.enabled = isOwner; + } + + this.enableControllerButton.displayString = this.launchController.getDisabled(0) ? GCCoreUtil.translate("gui.button.enable.name") : GCCoreUtil.translate("gui.button.disable.name"); + this.hideDestinationFrequency.displayString = !this.launchController.getDisabled(2) ? GCCoreUtil.translate("gui.button.unhide_dest.name") : GCCoreUtil.translate("gui.button.hide_dest.name"); + // Hacky way of rendering buttons properly, possibly bugs here: + List buttonList = new ArrayList<>(this.buttonList); + List labelList = new ArrayList<>(this.labelList); + List infoRegions = new ArrayList<>(this.infoRegions); + this.buttonList.clear(); + this.labelList.clear(); + this.infoRegions.clear(); + super.drawScreen(par1, par2, par3); + + GL11.glColor3f(1, 1, 1); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + int k; + for (k = 0; k < buttonList.size(); ++k) + { + ((GuiButton) buttonList.get(k)).drawButton(this.mc, par1, par2, par3); + } + + for (k = 0; k < labelList.size(); ++k) + { + ((GuiLabel) labelList.get(k)).drawLabel(this.mc, par1, par2); + } + + for (k = 0; k < infoRegions.size(); ++k) + { + infoRegions.get(k).drawRegion(par1, par2); + } + + this.buttonList = buttonList; + this.labelList = labelList; + this.infoRegions = infoRegions; + +// GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + + if (Math.random() < 0.025 && !destinationFrequency.isTextFocused) + { + if (!PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName()) && !this.launchController.getDisabled(2)) + { + // in case the player is not equal to the owner of the + // controller, + // scramble the destination number such that other players can't + // fly to it directly + Random r = new Random(); + String fakefrequency = ""; + for (int i = 0; i < this.destinationFrequency.getMaxLength(); i++) + { + fakefrequency += (char) (r.nextInt(126 - 33) + 33); + } + destinationFrequency.text = fakefrequency; + } else + { + destinationFrequency.text = String.valueOf(this.launchController.destFrequency); + } + } + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (keyID != Keyboard.KEY_ESCAPE && keyID != this.mc.gameSettings.keyBindInventory.getKeyCode()) + { + if (this.frequency.keyTyped(keyChar, keyID)) + { + return; + } + + if (this.destinationFrequency.keyTyped(keyChar, keyID)) + { + return; + } + } + + super.keyTyped(keyChar, keyID); + } + + public boolean isValid(String string) + { + if (string.length() > 0 && ChatAllowedCharacters.isAllowedCharacter(string.charAt(string.length() - 1))) + { + try + { + Integer.parseInt(string); + return true; + } catch (Exception e) + { + return false; + } + } else + { + return false; + } + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int xLeft = (this.width - this.xSize) / 2; + final int yTop = (this.height - this.ySize) / 2; + this.enableControllerButton = new GuiButton(0, xLeft + 70 + 124 - 72, yTop + 16, 48, 20, GCCoreUtil.translate("gui.button.enable.name")); + this.frequency = new GuiElementTextBox(4, this, xLeft + 66, yTop + 16, 48, 20, "", true, 6, false); + this.destinationFrequency = new GuiElementTextBox(5, this, xLeft + 45, yTop + 16 + 22, 48, 20, "", true, 6, false); + this.hideDestinationFrequency = new GuiButton(6, xLeft + 95, yTop + 16 + 22, 39, 20, GCCoreUtil.translate("gui.button.hide_dest.name")); + this.openAdvancedConfig = new GuiButton(7, xLeft + 48, yTop + 62, 80, 20, GCCoreUtil.translate("gui.launch_controller.advanced") + "..."); + this.buttonList.add(this.enableControllerButton); + this.buttonList.add(this.frequency); + this.buttonList.add(this.destinationFrequency); + this.buttonList.add(this.hideDestinationFrequency); + this.buttonList.add(this.openAdvancedConfig); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = xLeft + 98; + this.electricInfoRegion.yPosition = yTop + 113; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 151, yTop + 104, 18, 18, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.0")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 5, yTop + 20, 109, 13, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 5, yTop + 42, 87, 13, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.4")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 95, yTop + 38, 38, 20, batterySlotDesc, this.width, this.height, this)); + } + + @Override + protected void mouseClicked(int px, int py, int par3) throws IOException + { + super.mouseClicked(px, py, par3); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (!PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName())) + { + this.cannotEditTimer = 50; + return; + } + + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, mc.world.provider.getDimension(), new Object[] + {this.launchController.getPos(), 0})); + break; + case 6: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, mc.world.provider.getDimension(), new Object[] + {this.launchController.getPos(), 2})); + break; + case 7: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_SWITCH_LAUNCH_CONTROLLER_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.launchController.getPos(), 0})); + break; + default: + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = this.launchController.getOwnerName() + "\'s " + this.launchController.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, 4210752); + + if (this.cannotEditTimer > 0) + { + this.fontRenderer.drawString(this.launchController.getOwnerName(), this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, + this.cannotEditTimer % 30 < 15 ? ColorUtil.to32BitColor(255, 255, 100, 100) : 4210752); + this.cannotEditTimer--; + } + + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 115, 4210752); + displayString = this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 86, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.launchController.ueWattsPerTick * + // 20, ElectricUnit.WATT); + // this.fontRenderer.drawString(displayString, this.xSize - 26 - + // this.fontRenderer.getStringWidth(displayString), 94, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.launchController.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(displayString, this.xSize - 26 - + // this.fontRenderer.getStringWidth(displayString), 104, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.frequency.name") + ":", 7, 22, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.dest_frequency.name") + ":", 7, 44, 4210752); + + } + + private String getStatus() + { + if (!this.launchController.frequencyValid) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.invalid_freq.name"); + } + + if (this.launchController.getEnergyStoredGC() <= 0.0F) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_energy.name"); + } + + if (this.launchController.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.active.name"); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiLaunchController.launchControllerGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.launchController.getEnergyStoredGC(), this.launchController.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (this.launchController.getEnergyStoredGC() > 0) + { + int scale = this.launchController.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 99, var6 + 114, 176, 0, Math.min(scale, 54), 7); + } + + GL11.glPopMatrix(); + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.launchController.getOwnerName()); + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + if (PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName())) + { + if (textBox.equals(this.frequency)) + { + this.launchController.frequency = textBox.getIntegerValue(); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {0, this.launchController.getPos(), this.launchController.frequency})); + } else if (textBox.equals(this.destinationFrequency)) + { + this.launchController.destFrequency = textBox.getIntegerValue(); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {2, this.launchController.getPos(), this.launchController.destFrequency})); + } + } + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + if (textBox.equals(this.frequency)) + { + return String.valueOf(this.launchController.frequency); + } else if (textBox.equals(this.destinationFrequency)) + { + if (PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName()) || this.launchController.getDisabled(2)) + { + return String.valueOf(this.launchController.destFrequency); + } else + { + // in case the player is not equal to the owner of the + // controller, + // scramble the destination number such that other players can't + // fly to it directly + Random r = new Random(); + String fakefrequency = ""; + for (int i = 0; i < this.destinationFrequency.getMaxLength(); i++) + { + fakefrequency += (char) (r.nextInt(126 - 33) + 33); + } + return fakefrequency; + } + } + + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + if (textBox.equals(this.frequency)) + { + return this.launchController.frequencyValid ? ColorUtil.to32BitColor(255, 20, 255, 20) : ColorUtil.to32BitColor(255, 255, 25, 25); + } else if (textBox.equals(this.destinationFrequency)) + { + return this.launchController.destFrequencyValid ? ColorUtil.to32BitColor(255, 20, 255, 20) : ColorUtil.to32BitColor(255, 255, 25, 25); + } + + return 0; + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + this.cannotEditTimer = 50; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchControllerAdvanced.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchControllerAdvanced.java new file mode 100644 index 00000000..7e39cc96 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchControllerAdvanced.java @@ -0,0 +1,275 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket.EnumAutoLaunch; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementDropdown; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementDropdown.IDropboxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiLabel; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiLaunchControllerAdvanced extends GuiContainerGC implements IDropboxCallback, ICheckBoxCallback +{ + + private static final ResourceLocation launchControllerGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/launch_controller.png"); + + private TileEntityLaunchController launchController; + + private GuiElementCheckbox enablePadRemovalButton; + private GuiElementCheckbox launchWhenCheckbox; + private GuiElementDropdown dropdownTest; + private GuiButton closeAdvancedConfig; + + private int cannotEditTimer; + + public GuiLaunchControllerAdvanced(InventoryPlayer playerInventory, TileEntityLaunchController launchController) + { + super(new ContainerLaunchController(playerInventory, launchController, FMLClientHandler.instance().getClient().player)); + this.ySize = 209; + this.launchController = launchController; + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + if (this.launchController.disableCooldown > 0) + { + this.enablePadRemovalButton.enabled = false; + } else + { + boolean isOwner = PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName()); + this.enablePadRemovalButton.enabled = isOwner; + } + + // Hacky way of rendering buttons properly, possibly bugs here: + List buttonList = new ArrayList<>(this.buttonList); + List labelList = new ArrayList<>(this.labelList); + List infoRegions = new ArrayList<>(this.infoRegions); + this.buttonList.clear(); + this.labelList.clear(); + this.infoRegions.clear(); + super.drawScreen(par1, par2, par3); + + GL11.glColor3f(1, 1, 1); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + int k; + for (k = 0; k < buttonList.size(); ++k) + { + ((GuiButton) buttonList.get(k)).drawButton(this.mc, par1, par2, par3); + } + + for (k = 0; k < labelList.size(); ++k) + { + ((GuiLabel) labelList.get(k)).drawLabel(this.mc, par1, par2); + } + + for (k = 0; k < infoRegions.size(); ++k) + { + infoRegions.get(k).drawRegion(par1, par2); + } + + this.buttonList = buttonList; + this.labelList = labelList; + this.infoRegions = infoRegions; + +// GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int xLeft = (this.width - this.xSize) / 2; + final int yTop = (this.height - this.ySize) / 2; + this.enablePadRemovalButton = new GuiElementCheckbox(1, this, this.width / 2 - 61, yTop + 20, GCCoreUtil.translate("gui.message.remove_pad.name")); + this.launchWhenCheckbox = new GuiElementCheckbox(2, this, this.width / 2 - 61, yTop + 38, GCCoreUtil.translate("gui.message.launch_when.name") + ": "); + this.dropdownTest = new GuiElementDropdown(3, this, xLeft + 52, yTop + 52, EnumAutoLaunch.CARGO_IS_UNLOADED.getTitle(), EnumAutoLaunch.CARGO_IS_FULL.getTitle(), + EnumAutoLaunch.ROCKET_IS_FUELED.getTitle(), EnumAutoLaunch.INSTANT.getTitle(), EnumAutoLaunch.TIME_10_SECONDS.getTitle(), EnumAutoLaunch.TIME_30_SECONDS.getTitle(), + EnumAutoLaunch.TIME_1_MINUTE.getTitle(), EnumAutoLaunch.REDSTONE_SIGNAL.getTitle()); + this.closeAdvancedConfig = new GuiButton(4, xLeft + 5, yTop + 5, 20, 20, "<"); + this.buttonList.add(this.enablePadRemovalButton); + this.buttonList.add(this.launchWhenCheckbox); + this.buttonList.add(this.dropdownTest); + this.buttonList.add(this.closeAdvancedConfig); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 151, yTop + 104, 18, 18, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.2")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 27, yTop + 20, 13, 13, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.3")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 52, yTop + 53, 99, 13, batterySlotDesc, this.width, this.height, this)); + } + + @Override + protected void actionPerformed(GuiButton button) + { + if (!PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName())) + { + this.cannotEditTimer = 50; + return; + } + + if (button.enabled) + { + switch (button.id) + { + case 4: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_SWITCH_LAUNCH_CONTROLLER_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.launchController.getPos(), 1})); + break; + default: + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = GCCoreUtil.translate("gui.launch_controller.owner") + ": " + this.launchController.getOwnerName(); + this.fontRenderer.drawString(displayString, this.xSize - this.fontRenderer.getStringWidth(displayString) - 5, 5, 4210752); + + if (this.cannotEditTimer > 0) + { + this.fontRenderer.drawString(this.launchController.getOwnerName(), this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, + this.cannotEditTimer % 30 < 15 ? ColorUtil.to32BitColor(255, 255, 100, 100) : 4210752); + this.cannotEditTimer--; + } + + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 115, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiLaunchControllerAdvanced.launchControllerGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (this.launchController.getEnergyStoredGC() > 0) + { + int scale = this.launchController.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 99, var6 + 114, 176, 0, Math.min(scale, 54), 7); + } + + GL11.glPopMatrix(); + } + + @Override + public boolean canBeClickedBy(GuiElementDropdown dropdown, EntityPlayer player) + { + if (dropdown.equals(this.dropdownTest)) + { + return PlayerUtil.getName(player).equals(this.launchController.getOwnerName()); + } + + return false; + } + + @Override + public void onSelectionChanged(GuiElementDropdown dropdown, int selection) + { + if (dropdown.equals(this.dropdownTest)) + { + this.launchController.launchDropdownSelection = selection; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {1, this.launchController.getPos(), this.launchController.launchDropdownSelection})); + } + } + + @Override + public int getInitialSelection(GuiElementDropdown dropdown) + { + if (dropdown.equals(this.dropdownTest)) + { + return this.launchController.launchDropdownSelection; + } + + return 0; + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + if (checkbox.equals(this.enablePadRemovalButton)) + { + this.launchController.launchPadRemovalDisabled = !newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {3, this.launchController.getPos(), this.launchController.launchPadRemovalDisabled ? 1 : 0})); + } else if (checkbox.equals(this.launchWhenCheckbox)) + { + this.launchController.launchSchedulingEnabled = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {4, this.launchController.getPos(), this.launchController.launchSchedulingEnabled ? 1 : 0})); + } + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.launchController.getOwnerName()); + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + if (checkbox.equals(this.enablePadRemovalButton)) + { + return !this.launchController.launchPadRemovalDisabled; + } else if (checkbox.equals(this.launchWhenCheckbox)) + { + return this.launchController.launchSchedulingEnabled; + } + + return false; + } + + @Override + public void onIntruderInteraction() + { + this.cannotEditTimer = 50; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiMethaneSynthesizer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiMethaneSynthesizer.java new file mode 100644 index 00000000..871d0eaf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiMethaneSynthesizer.java @@ -0,0 +1,275 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiMethaneSynthesizer extends GuiContainerGC +{ + + private static final ResourceLocation refineryTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/methane_synthesizer.png"); + + private static final ResourceLocation gasTextures = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + private final TileEntityMethaneSynthesizer tileEntity; + + private GuiButton buttonDisable; + + private GuiElementInfoRegion fuelTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion gasTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion gasTank2Region = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 20, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 62, (this.height - this.ySize) / 2 + 16, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiMethaneSynthesizer(InventoryPlayer par1InventoryPlayer, TileEntityMethaneSynthesizer tileEntity) + { + super(new ContainerMethaneSynthesizer(par1InventoryPlayer, tileEntity, FMLClientHandler.instance().getClient().player)); + this.tileEntity = tileEntity; + this.ySize = 168; + } + + @Override + public void initGui() + { + super.initGui(); + + int edgeLeft = (this.width - this.xSize) / 2; + int edgeTop = (this.height - this.ySize) / 2; + + this.gasTankRegion.xPosition = edgeLeft + 7; + this.gasTankRegion.yPosition = edgeTop + 28; + this.gasTankRegion.parentWidth = this.width; + this.gasTankRegion.parentHeight = this.height; + this.infoRegions.add(this.gasTankRegion); + + this.gasTank2Region.xPosition = edgeLeft + 28; + this.gasTank2Region.yPosition = edgeTop + 28; + this.gasTank2Region.parentWidth = this.width; + this.gasTank2Region.parentHeight = this.height; + this.infoRegions.add(this.gasTank2Region); + + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 53, edgeTop + 53, 18, 18, batterySlotDesc, this.width, this.height, this)); + List carbonSlotDesc = new ArrayList(); + carbonSlotDesc.add(GCCoreUtil.translate("gui.carbon_slot.desc.0")); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 27, edgeTop + 53, 18, 18, carbonSlotDesc, this.width, this.height, this)); + + this.fuelTankRegion.xPosition = edgeLeft + 153; + this.fuelTankRegion.yPosition = edgeTop + 28; + this.fuelTankRegion.parentWidth = this.width; + this.fuelTankRegion.parentHeight = this.height; + this.infoRegions.add(this.fuelTankRegion); + + List fuelSlotDesc = new ArrayList(); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.0")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.1")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.methane_output.desc.2")); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 152, edgeTop + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + fuelSlotDesc = new ArrayList(); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.hydrogen_input.desc.0")); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.hydrogen_input.desc.1")); + fuelSlotDesc.add("(" + GCCoreUtil.translate("gui.message.with_atmosphere0.name")); + fuelSlotDesc.add(GCCoreUtil.lowerCaseNoun("fluid.hydrogen")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.message.with_atmosphere1.name") + ")"); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 6, edgeTop + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + fuelSlotDesc = new ArrayList(); + fuelSlotDesc.add(GCCoreUtil.translate("item.atmospheric_valve.name")); + fuelSlotDesc.add("(" + GCCoreUtil.translate("gui.message.with_atmosphere0.name")); + fuelSlotDesc.add(GCCoreUtil.lowerCaseNoun("gas.carbondioxide.name")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.message.with_atmosphere1.name") + ")"); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 27, edgeTop + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + this.electricInfoRegion.xPosition = edgeLeft + 66; + this.electricInfoRegion.yPosition = edgeTop + 16; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + + this.addToolTips(); + + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 28, this.height / 2 - 56, 76, 20, GCCoreUtil.translate("gui.button.liquefy.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.tileEntity.getWorld()), new Object[] + {this.tileEntity.getPos(), 0})); + break; + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 47, 5, 4210752); + String displayText = ""; + int yOffset = -18; + + if (RedstoneUtil.isBlockReceivingRedstone(this.tileEntity.getWorld(), this.tileEntity.getPos())) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.off.name"); + } else if (!this.tileEntity.hasEnoughEnergyToRun) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.message.low_energy.name"); + } else if ((this.tileEntity.processTicks > -8 || this.tileEntity.canProcess())) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.processing.name"); + } else if (this.tileEntity.gasTank.getFluid() == null || this.tileEntity.gasTank.getFluidAmount() == 0) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.nogas.name"); + } else if (this.tileEntity.gasTank.getFluidAmount() > 0 && this.tileEntity.disabled) + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } else if (this.tileEntity.liquidTank.getFluidAmount() == this.tileEntity.liquidTank.getCapacity()) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.tankfull.name"); + } else + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.needs_carbon.name"); + } + + this.buttonDisable.enabled = this.tileEntity.disableCooldown == 0; + this.buttonDisable.displayString = this.tileEntity.processTicks <= -8 ? GCCoreUtil.translate("gui.button.liquefy.name") : GCCoreUtil.translate("gui.button.liquefy_stop.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ":", 72, 45 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(displayText, 75, 45 + 33 + yOffset, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 23, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiMethaneSynthesizer.refineryTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int edgeLeft = (this.width - this.xSize) / 2; + int edgeTop = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(edgeLeft, edgeTop, 0, 0, this.xSize, this.ySize); + + this.mc.renderEngine.bindTexture(GuiMethaneSynthesizer.gasTextures); + int displayInt = this.tileEntity.getScaledGasLevel(38); + this.drawTexturedModalRect(edgeLeft + 7, edgeTop + 17 + 49 - displayInt, 1 + 17, 38 - displayInt, 16, displayInt); + displayInt = this.tileEntity.getScaledGasLevel2(20); + this.drawTexturedModalRect(edgeLeft + 28, edgeTop + 48 - displayInt, 1 + 2 * 17, 38 - displayInt, 16, displayInt); + displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect(edgeLeft + 153, edgeTop + 17 + 49 - displayInt, 1 + 2 * 17, 38 - displayInt, 16, displayInt); + + this.addToolTips(); + + this.mc.renderEngine.bindTexture(GuiMethaneSynthesizer.refineryTexture); + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(edgeLeft + 52, edgeTop + 16, 208, 0, 11, 10); + } + + this.drawTexturedModalRect(edgeLeft + 66, edgeTop + 17, 176, 38, Math.min(this.tileEntity.getScaledElecticalLevel(54), 54), 7); + } + + private void addToolTips() + { + List gasTankDesc = new ArrayList(); + gasTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + FluidStack gasTankContents = this.tileEntity.gasTank != null ? this.tileEntity.gasTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = FluidRegistry.getFluid("hydrogen").getUnlocalizedName(); + if (gasname == null || gasname.equals("fluid.hydrogen")) + { + gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + } + gasTankDesc.add("(" + gasname + ")"); + } else + { + gasTankDesc.add(" "); + } + int gasLevel = gasTankContents != null ? gasTankContents.amount : 0; + int gasCapacity = this.tileEntity.gasTank != null ? this.tileEntity.gasTank.getCapacity() : 0; + gasTankDesc.add(EnumColor.YELLOW + " " + gasLevel + " / " + gasCapacity); + this.gasTankRegion.tooltipStrings = gasTankDesc; + + gasTankDesc = new ArrayList(); + gasTankDesc.add(GCCoreUtil.translate("gas.carbondioxide.name")); + gasTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + gasTankContents = this.tileEntity.gasTank2 != null ? this.tileEntity.gasTank2.getFluid() : null; + if (gasTankContents != null) + { + String gasname = FluidRegistry.getFluid("carbondioxide").getUnlocalizedName(); + if (gasname == null || gasname.equals("fluid.carbondioxide")) + { + gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + } + gasTankDesc.add("(" + gasname + ")"); + } else + { + gasTankDesc.add(" "); + } + gasLevel = gasTankContents != null ? gasTankContents.amount : 0; + gasCapacity = this.tileEntity.gasTank2 != null ? this.tileEntity.gasTank2.getCapacity() : 0; + gasTankDesc.add(EnumColor.YELLOW + " " + gasLevel + " / " + gasCapacity); + this.gasTank2Region.tooltipStrings = gasTankDesc; + + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + gasTankContents = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = FluidRegistry.getFluid("methane").getUnlocalizedName(); + if (gasname == null || gasname.equals("fluid.methane")) + { + gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + } + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + int fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + int fuelCapacity = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + " " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicCargoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicCargoRocket.java new file mode 100644 index 00000000..defd87fe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicCargoRocket.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSchematicCargoRocket; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicCargoRocket extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation cargoRocketTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_cargo.png"); + + private int pageIndex; + + public GuiSchematicCargoRocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicCargoRocket(par1InventoryPlayer, pos), pos); + this.ySize = 220; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("item.rocket_t2.cargo_rocket.name"), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 220 - 104 + 2 + 9, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicCargoRocket.cargoRocketTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicTier2Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicTier2Rocket.java new file mode 100644 index 00000000..02cc74df --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicTier2Rocket.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSchematicTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicTier2Rocket extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation tier2SchematicTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_t2.png"); + + private int pageIndex; + + public GuiSchematicTier2Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicTier2Rocket(par1InventoryPlayer, pos), pos); + this.ySize = 238; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(MarsItems.rocketMars.getItemStackDisplayName(new ItemStack(MarsItems.rocketMars, 1, 0)), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 220 - 104 + 2 + 27, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicTier2Rocket.tier2SchematicTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimeling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimeling.java new file mode 100644 index 00000000..2ee568b5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimeling.java @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Keyboard; + +public class GuiSlimeling extends GuiScreen +{ + + private final int xSize; + private final int ySize; + private static final ResourceLocation slimelingPanelGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/slimeling_panel0.png"); + private final EntitySlimeling slimeling; + + public GuiTextField nameField; + public GuiButton stayButton; + + public static boolean renderingOnGui = false; + + private int invX; + private int invY; + private final int invWidth = 18; + private final int invHeight = 18; + + public GuiSlimeling(EntitySlimeling slimeling) + { + this.slimeling = slimeling; + this.xSize = 176; + this.ySize = 147; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.stayButton = new GuiButton(0, i + 120, j + 122, 50, 20, ""); + this.stayButton.enabled = this.slimeling.isOwner(this.mc.player); + this.stayButton.displayString = this.slimeling.isSitting() ? GCCoreUtil.translate("gui.slimeling.button.follow") : GCCoreUtil.translate("gui.slimeling.button.sit"); + this.buttonList.add(this.stayButton); + this.nameField = new GuiTextField(0, this.fontRenderer, i + 44, j + 59, 103, 12); + this.nameField.setText(this.slimeling.getName()); + this.nameField.setEnableBackgroundDrawing(false); + this.nameField.setMaxStringLength(30); + this.nameField.setFocused(this.slimeling.isOwner(this.mc.player)); + this.nameField.setCanLoseFocus(false); + this.invX = i + 151; + this.invY = j + 76; + } + + @Override + public void updateScreen() + { + if (this.slimeling.isOwner(this.mc.player)) + { + this.nameField.updateCursorCounter(); + } + this.stayButton.displayString = this.slimeling.isSitting() ? GCCoreUtil.translate("gui.slimeling.button.follow") : GCCoreUtil.translate("gui.slimeling.button.sit"); + } + + @Override + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (this.slimeling.isOwner(this.mc.player)) + { + if (this.nameField.textboxKeyTyped(typedChar, keyCode)) + { + this.slimeling.setName(this.nameField.getText()); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(this.slimeling.world), new Object[] + {this.slimeling.getEntityId(), 1, this.slimeling.getName()})); + } + } + super.keyTyped(typedChar, keyCode); + } + + @Override + protected void actionPerformed(GuiButton button) + { + if (button.enabled) + { + switch (button.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(this.slimeling.world), new Object[] + {this.slimeling.getEntityId(), 0, ""})); + break; + } + } + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (this.slimeling.isOwner(this.mc.player)) + { + this.nameField.mouseClicked(mouseX, mouseY, mouseButton); + } + if (mouseX >= this.invX && mouseX < this.invX + this.invWidth && mouseY >= this.invY && mouseY < this.invY + this.invHeight) + { + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(this.slimeling.world), new Object[] + {this.slimeling.getEntityId(), 6, ""})); + } + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + + GlStateManager.pushMatrix(); + GlStateManager.translate(0, 0, -70.0F); + Gui.drawRect(i, j, i + this.xSize, j + this.ySize - 20, 0xFF000000); + GlStateManager.popMatrix(); + + int yOffset = (int) Math.floor(30.0D * (1.0F - this.slimeling.getScale())); + + GuiSlimeling.drawSlimelingOnGui(this.slimeling, this.width / 2, j + 62 - yOffset, 70, i + 51 - mouseX, j + 75 - 50 - mouseY); + + GlStateManager.pushMatrix(); + GlStateManager.translate(0, 0, 150.0F); + this.mc.renderEngine.bindTexture(GuiSlimeling.slimelingPanelGui); + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + this.drawTexturedModalRect(i + this.xSize - 15, j + 9, 176, 0, 9, 9); + this.drawTexturedModalRect(i + this.xSize - 15, j + 22, 185, 0, 9, 9); + this.drawTexturedModalRect(i + this.xSize - 15, j + 35, 194, 0, 9, 9); + String str = "" + Math.round(this.slimeling.getColorRed() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, i + this.xSize - 15 - this.fontRenderer.getStringWidth(str), j + 10, ColorUtil.to32BitColor(255, 255, 0, 0)); + str = "" + Math.round(this.slimeling.getColorGreen() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, i + this.xSize - 15 - this.fontRenderer.getStringWidth(str), j + 23, ColorUtil.to32BitColor(255, 0, 255, 0)); + str = "" + Math.round(this.slimeling.getColorBlue() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, i + this.xSize - 15 - this.fontRenderer.getStringWidth(str), j + 36, ColorUtil.to32BitColor(255, 0, 0, 255)); + + this.mc.renderEngine.bindTexture(GuiSlimeling.slimelingPanelGui); + GlStateManager.color(1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(this.invX, this.invY, 176, 9, this.invWidth, this.invHeight); + + super.drawScreen(mouseX, mouseY, partialTicks); + + int dX = -45; + int dY = 65; + int startX = -20 + i + 60; + int startY = dY + j - 10; + int width = this.xSize - 60; + int height = 15; + Gui.drawRect(startX, startY, startX + width, startY + height, 0xffA0A0A0); + Gui.drawRect(startX + 1, startY + 1, startX + width - 1, startY + height - 1, 0xFF000000); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.slimeling.name") + ": ", dX + i + 55, dY + j - 6, 0x404040); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.slimeling.owner") + ": " + this.slimeling.getOwnerUsername(), dX + i + 55, dY + j + 7, 0x404040); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.slimeling.kills") + ": " + this.slimeling.getKillCount(), dX + i + 55, dY + j + 20, 0x404040); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.slimeling.scale") + ": " + Math.round(this.slimeling.getAge() / (float) this.slimeling.MAX_AGE * 1000.0F) / 10.0F + "%", dX + i + 55, + dY + j + 33, 0x404040); + str = "" + (this.slimeling.isSitting() ? GCCoreUtil.translate("gui.slimeling.sitting") : GCCoreUtil.translate("gui.slimeling.following")); + this.fontRenderer.drawString(str, i + 145 - this.fontRenderer.getStringWidth(str) / 2, j + 112, 0x404040); + str = GCCoreUtil.translate("gui.slimeling.damage") + ": " + Math.round(this.slimeling.getDamage() * 100.0F) / 100.0F; + this.fontRenderer.drawString(str, dX + i + 55, dY + j + 33 + 13, 0x404040); + str = GCCoreUtil.translate("gui.slimeling.food") + ": "; + this.fontRenderer.drawString(str, dX + i + 55, dY + j + 46 + 13, 0x404040); + + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.enableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableRescaleNormal(); + this.mc.getRenderItem().renderItemAndEffectIntoGUI(new ItemStack(this.slimeling.getFavoriteFood()), dX + i + 55 + this.fontRenderer.getStringWidth(str), dY + j + 41 + 14); + GlStateManager.disableLighting(); + GlStateManager.disableBlend(); + this.nameField.drawTextBox(); + GlStateManager.popMatrix(); + ItemStack foodStack = new ItemStack(this.slimeling.getFavoriteFood()); + + if (!foodStack.isEmpty() && mouseX >= this.invX - 66 && mouseX < this.invX + this.invWidth - 68 && mouseY >= this.invY + 44 && mouseY < this.invY + this.invHeight + 42) + { + this.renderToolTip(foodStack, mouseX, mouseY); + } + } + + public static void drawSlimelingOnGui(EntitySlimeling slimeling, int x, int y, int scale, float mouseX, float mouseY) + { + GuiSlimeling.renderingOnGui = true; + GlStateManager.enableColorMaterial(); + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, 50.0F); + GlStateManager.scale(-scale / 2.0F, scale / 2.0F, scale / 2.0F); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + float f2 = slimeling.renderYawOffset; + float f3 = slimeling.rotationYaw; + float f4 = slimeling.rotationPitch; + mouseX += 40; + mouseY -= 20; + GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-((float) Math.atan(mouseY / 40.0F)) * 20.0F, 1.0F, 0.0F, 0.0F); + slimeling.renderYawOffset = (float) Math.atan(mouseX / 40.0F) * 20.0F; + slimeling.rotationYaw = (float) Math.atan(mouseX / 40.0F) * 40.0F; + slimeling.rotationPitch = -((float) Math.atan(mouseY / 40.0F)) * 20.0F; + slimeling.rotationYawHead = slimeling.rotationYaw; + GlStateManager.translate(0.0F, (float) slimeling.getYOffset(), 0.0F); + FMLClientHandler.instance().getClient().getRenderManager().playerViewY = 180.0F; + FMLClientHandler.instance().getClient().getRenderManager().renderEntity(slimeling, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F, false); + slimeling.renderYawOffset = f2; + slimeling.rotationYaw = f3; + slimeling.rotationPitch = f4; + GlStateManager.popMatrix(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.color(1.0F, 1.0F, 1.0F); + GuiSlimeling.renderingOnGui = false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingFeed.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingFeed.java new file mode 100644 index 00000000..b973355c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingFeed.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class GuiSlimelingFeed extends GuiScreen +{ + + private final int xSize; + private final int ySize; + private static final ResourceLocation slimelingPanelGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/slimeling_panel1.png"); + private final EntitySlimeling slimeling; + + public long timeBackspacePressed; + public int cursorPulse; + public int backspacePressed; + public boolean isTextFocused = false; + + public GuiButton buttonGrowSlimeling; + public GuiButton buttonBreedSlimeling; + public GuiButton buttonStrengthenSlimeling; + public GuiButton buttonHealSlimeling; + + public GuiSlimelingFeed(EntitySlimeling slimeling) + { + this.slimeling = slimeling; + this.xSize = 138; + this.ySize = 51; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int var6 = (this.height - this.ySize) / 2; + this.buttonGrowSlimeling = new GuiButton(0, this.width / 2 - 65, var6 - 15, 64, 20, GCCoreUtil.translate("gui.message.grow.name")); + this.buttonList.add(this.buttonGrowSlimeling); + this.buttonBreedSlimeling = new GuiButton(1, this.width / 2 + 1, var6 - 15, 64, 20, GCCoreUtil.translate("gui.message.breed.name")); + this.buttonList.add(this.buttonBreedSlimeling); + this.buttonStrengthenSlimeling = new GuiButton(2, this.width / 2 - 65, var6 + 7, 64, 20, GCCoreUtil.translate("gui.message.strengthen.name")); + this.buttonList.add(this.buttonStrengthenSlimeling); + this.buttonHealSlimeling = new GuiButton(3, this.width / 2 + 1, var6 + 7, 64, 20, GCCoreUtil.translate("gui.message.heal.name")); + this.buttonList.add(this.buttonHealSlimeling); + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (!this.buttonGrowSlimeling.enabled && !this.buttonBreedSlimeling.enabled && !this.buttonStrengthenSlimeling.enabled && !this.buttonHealSlimeling.enabled) + { + super.keyTyped(keyChar, keyID); + } + return; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.slimeling.getEntityId(), 2, ""})); + break; + case 1: + if (!this.slimeling.isInLove() && this.slimeling.isOwner(this.mc.player) && this.slimeling.world.isRemote) + { + this.slimeling.setInLove(this.mc.player); + } + + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.slimeling.getEntityId(), 3, ""})); + break; + case 2: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.slimeling.getEntityId(), 4, ""})); + break; + case 3: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.slimeling.getEntityId(), 5, ""})); + break; + } + + FMLClientHandler.instance().getClient().displayGuiScreen(null); + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.mc.renderEngine.bindTexture(GuiSlimelingFeed.slimelingPanelGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 - 20, 0, 0, this.xSize, this.ySize); + + super.drawScreen(par1, par2, par3); + + this.buttonHealSlimeling.enabled = this.slimeling.getHealth() < Math.floor(this.slimeling.getMaxHealth()); + this.buttonGrowSlimeling.enabled = this.slimeling.getScale() < 1.0F; + this.buttonStrengthenSlimeling.enabled = this.slimeling.getAttackDamage() < 1.0; + this.buttonBreedSlimeling.enabled = !this.slimeling.isInLove() && !this.slimeling.isChild(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingInventory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingInventory.java new file mode 100644 index 00000000..19b43673 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingInventory.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class GuiSlimelingInventory extends GuiContainer +{ + + private static final ResourceLocation slimelingPanelGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/slimeling_panel2.png"); + private final EntitySlimeling slimeling; + + private int invX; + private int invY; + private final int invWidth = 18; + private final int invHeight = 18; + + public GuiSlimelingInventory(EntityPlayer player, EntitySlimeling slimeling) + { + super(new ContainerSlimeling(player.inventory, slimeling, FMLClientHandler.instance().getClient().player)); + this.slimeling = slimeling; + this.xSize = 176; + this.ySize = 210; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.invX = var5 + 151; + this.invY = var6 + 108; + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + break; + } + } + } + + @Override + protected void mouseClicked(int px, int py, int par3) throws IOException + { + if (px >= this.invX && px < this.invX + this.invWidth && py >= this.invY && py < this.invY + this.invHeight) + { + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + this.mc.displayGuiScreen(new GuiSlimeling(this.slimeling)); + } + + super.mouseClicked(px, py, par3); + } + + @Override + public void drawDefaultBackground() + { + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f, int i, int j) + { + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + + GlStateManager.pushMatrix(); + Gui.drawRect(var5, var6, var5 + this.xSize, var6 + this.ySize, 0xFF000000); + GlStateManager.popMatrix(); + + int yOffset = (int) Math.floor(30.0D * (1.0F - this.slimeling.getScale())); + + GuiSlimeling.drawSlimelingOnGui(this.slimeling, this.width / 2, var6 + 62 - yOffset, 70, var5 + 51 - i, var6 + 75 - 50 - j); + + GlStateManager.translate(0, 0, 100); + + GlStateManager.pushMatrix(); + this.mc.renderEngine.bindTexture(GuiSlimelingInventory.slimelingPanelGui); + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + this.drawTexturedModalRect(var5 + this.xSize - 15, var6 + 9, 176, 0, 9, 9); + this.drawTexturedModalRect(var5 + this.xSize - 15, var6 + 22, 185, 0, 9, 9); + this.drawTexturedModalRect(var5 + this.xSize - 15, var6 + 35, 194, 0, 9, 9); + String str = "" + Math.round(this.slimeling.getColorRed() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, var5 + this.xSize - 15 - this.fontRenderer.getStringWidth(str), var6 + 10, ColorUtil.to32BitColor(255, 255, 0, 0)); + str = "" + Math.round(this.slimeling.getColorGreen() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, var5 + this.xSize - 15 - this.fontRenderer.getStringWidth(str), var6 + 23, ColorUtil.to32BitColor(255, 0, 255, 0)); + str = "" + Math.round(this.slimeling.getColorBlue() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, var5 + this.xSize - 15 - this.fontRenderer.getStringWidth(str), var6 + 36, ColorUtil.to32BitColor(255, 0, 0, 255)); + + this.mc.renderEngine.bindTexture(GuiSlimelingInventory.slimelingPanelGui); + GlStateManager.color(1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(this.invX, this.invY, 176, 27, this.invWidth, this.invHeight); + this.drawTexturedModalRect(var5 + 8, var6 + 8, 176, 9, 18, 18); + this.drawTexturedModalRect(var5 + 8, var6 + 29, 176, 9, 18, 18); + + ItemStack stack = this.slimeling.slimelingInventory.getStackInSlot(1); + + if (stack != null && stack.getItem() == MarsItems.marsItemBasic && stack.getItemDamage() == 4) + { + int offsetX = 7; + int offsetY = 53; + + for (int y = 0; y < 3; ++y) + { + for (int x = 0; x < 9; ++x) + { + this.drawTexturedModalRect(var5 + offsetX + x * 18, var6 + offsetY + y * 18, 176, 9, 18, 18); + } + } + } + + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiTerraformer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiTerraformer.java new file mode 100644 index 00000000..64c27e38 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiTerraformer.java @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiTerraformer extends GuiContainerGC implements ICheckBoxCallback +{ + + private static final ResourceLocation terraformerGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/terraformer.png"); + private TileEntityTerraformer terraformer; + private GuiButton enableTreesButton; + private GuiButton enableGrassButton; + private GuiElementCheckbox checkboxRenderBubble; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 52, 9, null, 0, 0, this); + private GuiElementInfoRegion waterTankInfoRegion = new GuiElementInfoRegion(0, 0, 41, 28, null, 0, 0, this); + + public GuiTerraformer(InventoryPlayer par1InventoryPlayer, TileEntityTerraformer terraformer) + { + super(new ContainerTerraformer(par1InventoryPlayer, terraformer, FMLClientHandler.instance().getClient().player)); + this.ySize = 237; + this.terraformer = terraformer; + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + if (this.terraformer.disableCooldown > 0) + { + this.enableTreesButton.enabled = false; + this.enableGrassButton.enabled = false; + } else + { + this.enableTreesButton.enabled = true; + this.enableGrassButton.enabled = true; + } + + this.enableTreesButton.displayString = + GCCoreUtil.translate(this.terraformer.treesDisabled ? "gui.button.enable.name" : "gui.button.disable.name") + " " + GCCoreUtil.translate("gui.message.trees.name"); + this.enableGrassButton.displayString = + GCCoreUtil.translate(this.terraformer.grassDisabled ? "gui.button.enable.name" : "gui.button.disable.name") + " " + GCCoreUtil.translate("gui.message.grass.name"); + + super.drawScreen(par1, par2, par3); + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 44; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 47; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 24, (this.height - this.ySize) / 2 + 38, 18, 18, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.show_bubble.desc.0")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 85, (this.height - this.ySize) / 2 + 132, 85, 13, batterySlotDesc, this.width, this.height, this)); + this.waterTankInfoRegion.tooltipStrings = new ArrayList(); + this.waterTankInfoRegion.xPosition = (this.width - this.xSize) / 2 + 55; + this.waterTankInfoRegion.yPosition = (this.height - this.ySize) / 2 + 17; + this.waterTankInfoRegion.parentWidth = this.width; + this.waterTankInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.waterTankInfoRegion); + this.buttonList.clear(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.enableTreesButton = new GuiButton(0, var5 + 98, var6 + 85, 72, 20, GCCoreUtil.translate("gui.message.enable_trees.name")); + this.enableGrassButton = new GuiButton(1, var5 + 98, var6 + 109, 72, 20, GCCoreUtil.translate("gui.message.enable_grass.name")); + this.buttonList.add(this.enableTreesButton); + this.buttonList.add(this.enableGrassButton); + this.checkboxRenderBubble = new GuiElementCheckbox(2, this, var5 + 85, var6 + 132, GCCoreUtil.translate("gui.message.bubble_visible.name")); + this.buttonList.add(this.checkboxRenderBubble); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.terraformer.getPos(), 0})); + break; + case 1: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.terraformer.getPos(), 1})); + break; + case 2: + break; + default: + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = terraformer.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 144, 4210752); + this.fontRenderer.drawSplitString(this.getStatus(), 105, 24, this.xSize - 105, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.terraformer.ueWattsPerTick + // * 20, ElectricUnit.WATT), 105, 56, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.terraformer.getVoltage(), + // ElectricUnit.VOLTAGE), 105, 68, 4210752); + } + + private String getStatus() + { + if (RedstoneUtil.isBlockReceivingRedstone(this.terraformer.getWorld(), this.terraformer.getPos())) + { + return EnumColor.RED + GCCoreUtil.translate("gui.status.off.name"); + } + + if (this.terraformer.getEnergyStoredGC() <= 0.0F) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_energy.name"); + } + + if (this.terraformer.grassDisabled && this.terraformer.treesDisabled) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (this.terraformer.waterTank.getFluid() == null || this.terraformer.waterTank.getFluid().amount <= 0) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_water.name"); + } + + if (this.terraformer.getFirstBonemealStack().isEmpty()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_bonemeal.name"); + } + + if (!this.terraformer.grassDisabled && this.terraformer.getFirstSeedStack().isEmpty()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_seeds.name"); + } + + if (!this.terraformer.treesDisabled && this.terraformer.getFirstSaplingStack().isEmpty()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_saplings.name"); + } + + if (this.terraformer.getBubbleSize() < this.terraformer.MAX_SIZE - 0.5) + { + return EnumColor.YELLOW + GCCoreUtil.translate("gui.message.bubble_exp.name"); + } + + if (!this.terraformer.treesDisabled && this.terraformer.grassBlocksListSize <= 0) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.trees.name") + ": " + GCCoreUtil.translate("gui.message.no_valid_blocks.name"); + } else if (!this.terraformer.grassDisabled && this.terraformer.terraformableBlocksListSize <= 0) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.grass.name") + ": " + GCCoreUtil.translate("gui.message.no_valid_blocks.name"); + } + + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.message.terraforming.name"); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiTerraformer.terraformerGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int scale = this.terraformer.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 45, var6 + 48, 176, 26, Math.min(scale, 54), 7); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.terraformer.getEnergyStoredGC(), this.terraformer.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + int waterLevel = this.terraformer.getScaledWaterLevel(100); + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.terraformer.desc.0") + ": " + waterLevel + "%"); + this.waterTankInfoRegion.tooltipStrings = processDesc; + + waterLevel = this.terraformer.getScaledWaterLevel(26); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 56, (this.height - this.ySize) / 2 + 17 + 27 - waterLevel, 176, 26 - waterLevel, 39, waterLevel); + + this.checkboxRenderBubble.isSelected = this.terraformer.shouldRenderBubble; + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + this.terraformer.shouldRenderBubble = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {6, this.terraformer.getPos(), newSelected ? 1 : 0})); + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return this.terraformer.shouldRenderBubble; + } + + @Override + public void onIntruderInteraction() + { + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiWaterElectrolyzer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiWaterElectrolyzer.java new file mode 100644 index 00000000..5def9320 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiWaterElectrolyzer.java @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiWaterElectrolyzer extends GuiContainerGC +{ + + private static final ResourceLocation refineryTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gas_liquefier.png"); + + private static final ResourceLocation gasTextures = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + private final TileEntityElectrolyzer tileEntity; + + private GuiButton buttonDisable; + + private GuiElementInfoRegion fuelTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion fuelTank2Region = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion gasTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 62, (this.height - this.ySize) / 2 + 16, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiWaterElectrolyzer(InventoryPlayer par1InventoryPlayer, TileEntityElectrolyzer tileEntity) + { + super(new ContainerElectrolyzer(par1InventoryPlayer, tileEntity, FMLClientHandler.instance().getClient().player)); + this.tileEntity = tileEntity; + this.ySize = 168; + } + + @Override + public void initGui() + { + super.initGui(); + + this.gasTankRegion.xPosition = (this.width - this.xSize) / 2 + 7; + this.gasTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.gasTankRegion.parentWidth = this.width; + this.gasTankRegion.parentHeight = this.height; + this.infoRegions.add(this.gasTankRegion); + + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 33, (this.height - this.ySize) / 2 + 49, 18, 18, batterySlotDesc, this.width, this.height, this)); + + this.fuelTankRegion.xPosition = (this.width - this.xSize) / 2 + 132; + this.fuelTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.fuelTankRegion.parentWidth = this.width; + this.fuelTankRegion.parentHeight = this.height; + this.infoRegions.add(this.fuelTankRegion); + + this.fuelTank2Region.xPosition = (this.width - this.xSize) / 2 + 153; + this.fuelTank2Region.yPosition = (this.height - this.ySize) / 2 + 28; + this.fuelTank2Region.parentWidth = this.width; + this.fuelTank2Region.parentHeight = this.height; + this.infoRegions.add(this.fuelTank2Region); + + List fuelSlotDesc = new ArrayList(); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.water_bucket_slot.desc")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 6, (this.height - this.ySize) / 2 + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 42; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 16; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + + this.addToolTips(); + + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 49, this.height / 2 - 56, 76, 20, GCCoreUtil.translate("gui.button.liquefy.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.tileEntity.getWorld()), new Object[] + {this.tileEntity.getPos(), 0})); + break; + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 30, 5, 4210752); + String displayText = ""; + int yOffset = -18; + + if (RedstoneUtil.isBlockReceivingRedstone(this.tileEntity.getWorld(), this.tileEntity.getPos())) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.off.name"); + } else if (!this.tileEntity.hasEnoughEnergyToRun) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.message.low_energy.name"); + } else if (this.tileEntity.waterTank.getFluid() == null || this.tileEntity.waterTank.getFluidAmount() == 0) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.message.zero_water.name"); + } else if (this.tileEntity.waterTank.getFluidAmount() > 0 && this.tileEntity.disabled) + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } else if (this.tileEntity.canProcess()) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else if (this.tileEntity.liquidTank.getFluidAmount() == this.tileEntity.liquidTank.getCapacity() && this.tileEntity.liquidTank2.getFluidAmount() == this.tileEntity.liquidTank2.getCapacity()) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.tanksfull.name"); + } else + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.unknown.name"); + } + + this.buttonDisable.enabled = this.tileEntity.disableCooldown == 0; + this.buttonDisable.displayString = this.tileEntity.processTicks == 0 ? GCCoreUtil.translate("gui.button.liquefy.name") : GCCoreUtil.translate("gui.button.liquefy_stop.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ":", 56, 45 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(displayText, 62, 45 + 33 + yOffset, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.tileEntity.ueWattsPerTick + // * 20, ElectricUnit.WATT), 72, 56 + 23 + yOffset, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), + // ElectricUnit.VOLTAGE), 72, 68 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 23, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiWaterElectrolyzer.refineryTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int edgeLeft = (this.width - this.xSize) / 2; + int edgeTop = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(edgeLeft, edgeTop, 0, 0, this.xSize, this.ySize); + + int waterLevel = this.tileEntity.getScaledGasLevel(38); + // Water + this.mc.renderEngine.bindTexture(GuiWaterElectrolyzer.gasTextures); + this.drawTexturedModalRect(edgeLeft + 7, edgeTop + 17 + 49 - waterLevel, 1 + 4 * 17, 38 - waterLevel, 16, waterLevel); + // Oxygen + int displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect(edgeLeft + 132, edgeTop + 17 + 49 - displayInt, 34 + 1, 38 - displayInt, 16, displayInt); + // Hydrogen + displayInt = this.tileEntity.getScaledFuelLevel2(38); + this.drawTexturedModalRect(edgeLeft + 153, edgeTop + 17 + 49 - displayInt, 17 + 1, 38 - displayInt, 16, displayInt); + + this.addToolTips(); + + this.mc.renderEngine.bindTexture(GuiWaterElectrolyzer.refineryTexture); + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(edgeLeft + 28, edgeTop + 16, 208, 0, 11, 10); + } + + this.drawTexturedModalRect(edgeLeft + 42, edgeTop + 17, 176, 38, Math.min(this.tileEntity.getScaledElecticalLevel(54), 54), 7); + } + + private void addToolTips() + { + List gasTankDesc = new ArrayList(); + gasTankDesc.add(GCCoreUtil.translate("gui.terraformer.desc.0")); + this.gasTankRegion.tooltipStrings = gasTankDesc; + + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + FluidStack gasTankContents = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + int fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + int fuelCapacity = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + " " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + + fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + gasTankContents = this.tileEntity.liquidTank2 != null ? this.tileEntity.liquidTank2.getFluid() : null; + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + fuelCapacity = this.tileEntity.liquidTank2 != null ? this.tileEntity.liquidTank2.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + " " + fuelLevel + " / " + fuelCapacity); + this.fuelTank2Region.tooltipStrings = fuelTankDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/GalacticraftMarsJEI.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/GalacticraftMarsJEI.java new file mode 100644 index 00000000..a1cd1040 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/GalacticraftMarsJEI.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei; + +import javax.annotation.Nonnull; +import mezz.jei.api.BlankModPlugin; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.IModRegistry; +import mezz.jei.api.JEIPlugin; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket.CargoRocketRecipeCategory; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket.CargoRocketRecipeMaker; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket.CargoRocketRecipeWrapper; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier.GasLiquefierRecipeCategory; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier.GasLiquefierRecipeMaker; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier.GasLiquefierRecipeWrapper; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth.MethaneSynthRecipeCategory; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth.MethaneSynthRecipeMaker; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth.MethaneSynthRecipeWrapper; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket.Tier2RocketRecipeCategory; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket.Tier2RocketRecipeMaker; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket.Tier2RocketRecipeWrapper; +import net.minecraft.item.ItemStack; + +@JEIPlugin +public class GalacticraftMarsJEI extends BlankModPlugin +{ + + @Override + public void register(@Nonnull IModRegistry registry) + { + registry.handleRecipes(INasaWorkbenchRecipe.class, Tier2RocketRecipeWrapper::new, RecipeCategories.ROCKET_T2_ID); + registry.handleRecipes(GasLiquefierRecipeWrapper.class, recipe -> recipe, RecipeCategories.GAS_LIQUEFIER_ID); + registry.handleRecipes(INasaWorkbenchRecipe.class, CargoRocketRecipeWrapper::new, RecipeCategories.ROCKET_CARGO_ID); + registry.handleRecipes(MethaneSynthRecipeWrapper.class, recipe -> recipe, RecipeCategories.METHANE_SYNTHESIZER_ID); + + registry.addRecipes(Tier2RocketRecipeMaker.getRecipesList(), RecipeCategories.ROCKET_T2_ID); + registry.addRecipes(GasLiquefierRecipeMaker.getRecipesList(), RecipeCategories.GAS_LIQUEFIER_ID); + registry.addRecipes(CargoRocketRecipeMaker.getRecipesList(), RecipeCategories.ROCKET_CARGO_ID); + registry.addRecipes(MethaneSynthRecipeMaker.getRecipesList(), RecipeCategories.METHANE_SYNTHESIZER_ID); + + registry.addRecipeCatalyst(new ItemStack(GCBlocks.nasaWorkbench), RecipeCategories.ROCKET_T2_ID, RecipeCategories.ROCKET_CARGO_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.compactNasaWorkbench), RecipeCategories.ROCKET_T2_ID, RecipeCategories.ROCKET_CARGO_ID); + registry.addRecipeCatalyst(new ItemStack(MarsBlocks.machineT2), RecipeCategories.GAS_LIQUEFIER_ID); + registry.addRecipeCatalyst(new ItemStack(MarsBlocks.machineT2, 1, 4), RecipeCategories.METHANE_SYNTHESIZER_ID); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registry) + { + IGuiHelper guiHelper = registry.getJeiHelpers().getGuiHelper(); + registry.addRecipeCategories(new Tier2RocketRecipeCategory(guiHelper), new GasLiquefierRecipeCategory(guiHelper), new CargoRocketRecipeCategory(guiHelper), + new MethaneSynthRecipeCategory(guiHelper)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeCategory.java new file mode 100644 index 00000000..19ef66cf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeCategory.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.util.ResourceLocation; + +public class CargoRocketRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation rocketGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_cargo.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public CargoRocketRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(rocketGuiTexture, 3, 4, 168, 125); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ROCKET_CARGO_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 44, 13); + itemstacks.init(1, true, 44, 31); + itemstacks.init(2, true, 35, 49); + itemstacks.init(3, true, 35, 67); + itemstacks.init(4, true, 35, 85); + itemstacks.init(5, true, 53, 49); + itemstacks.init(6, true, 53, 67); + itemstacks.init(7, true, 53, 85); + itemstacks.init(8, true, 17, 85); + itemstacks.init(9, true, 71, 85); + itemstacks.init(10, true, 44, 103); + itemstacks.init(11, true, 17, 103); + itemstacks.init(12, true, 71, 103); + itemstacks.init(13, true, 89, 7); + itemstacks.init(14, true, 115, 7); + itemstacks.init(15, true, 141, 7); + itemstacks.init(16, false, 138, 91); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeMaker.java new file mode 100644 index 00000000..fc4cf3b4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeMaker.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeMaker; + +public class CargoRocketRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getCargoRocketRecipes()) + { + int chests = Tier1RocketRecipeMaker.countChests(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeWrapper.java new file mode 100644 index 00000000..f11002e8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class CargoRocketRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public CargoRocketRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(this.recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeCategory.java new file mode 100644 index 00000000..3e1a2071 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeCategory.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier; + +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.client.Minecraft; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class GasLiquefierRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation refineryGuiTex = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gas_liquefier_recipe.png"); + private static final ResourceLocation gasesTex = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated methaneBarInput; + @Nonnull private final IDrawableAnimated oxygenBarInput; + @Nonnull private final IDrawableAnimated nitrogenBarInput; + @Nonnull private final IDrawableAnimated fuelBarOutput; + @Nonnull private final IDrawableAnimated oxygenBarOutput; + @Nonnull private final IDrawableAnimated nitrogenBarOutput; + + private int inputGas = 2; + private int outputGas = 2; + + public GasLiquefierRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(refineryGuiTex, 3, 4, 168, 64); + this.localizedName = GCCoreUtil.translate("tile.mars_machine.4.name"); + + IDrawableStatic methaneBar = guiHelper.createDrawable(gasesTex, 1, 0, 16, 38); + this.methaneBarInput = guiHelper.createAnimatedDrawable(methaneBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic oxygenBar = guiHelper.createDrawable(gasesTex, 18, 0, 16, 38); + this.oxygenBarInput = guiHelper.createAnimatedDrawable(oxygenBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic atmosphereBar = guiHelper.createDrawable(gasesTex, 34, 0, 16, 38); + this.nitrogenBarInput = guiHelper.createAnimatedDrawable(atmosphereBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic fuelBar = guiHelper.createDrawable(refineryGuiTex, 176, 0, 16, 38); + this.fuelBarOutput = guiHelper.createAnimatedDrawable(fuelBar, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + this.oxygenBarOutput = guiHelper.createAnimatedDrawable(oxygenBar, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + IDrawableStatic nitrogenBar = guiHelper.createDrawable(gasesTex, 68, 0, 16, 38); + this.nitrogenBarOutput = guiHelper.createAnimatedDrawable(nitrogenBar, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.GAS_LIQUEFIER_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + IDrawableAnimated input; + IDrawableAnimated output; + + switch (this.inputGas) + { + case 0: + input = this.methaneBarInput; + break; + case 1: + input = this.oxygenBarInput; + break; + default: + input = this.nitrogenBarInput; + break; + } + + switch (this.outputGas) + { + case 0: + output = this.fuelBarOutput; + break; + case 3: + output = this.oxygenBarOutput; + break; + default: + output = this.nitrogenBarOutput; + break; + } + + input.draw(minecraft, 40, 24); + output.draw(minecraft, this.outputGas == 0 || this.outputGas == 3 ? 124 : 105, 24); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 39, 2); + itemstacks.init(1, false, 104, 2); + itemstacks.init(2, false, 123, 2); + + if (recipeWrapper instanceof GasLiquefierRecipeWrapper) + { + GasLiquefierRecipeWrapper gasLiquefierRecipeWrapper = (GasLiquefierRecipeWrapper) recipeWrapper; + List input = ingredients.getInputs(ItemStack.class).get(0); + List output = ingredients.getOutputs(ItemStack.class).get(0); + itemstacks.set(0, input); + + Item inputItem = input.get(0).getItem(); + if (inputItem == AsteroidsItems.methaneCanister) + { + this.inputGas = 0; + } else if (inputItem == AsteroidsItems.canisterLOX) + { + this.inputGas = 1; + } + + Item outputItem = output.get(0).getItem(); + if (outputItem == GCItems.fuelCanister) + { + this.outputGas = 0; + } else if (outputItem == AsteroidsItems.canisterLOX) + { + this.outputGas = 3; + } else + { + this.outputGas = 4; + } + + itemstacks.set(this.outputGas == 0 || this.outputGas == 3 ? 2 : 1, output); + } + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeMaker.java new file mode 100644 index 00000000..88c2911c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeMaker.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.item.ItemStack; + +public class GasLiquefierRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.methaneCanister, 1, 1), new ItemStack(GCItems.fuelCanister, 1, 1))); + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.atmosphericValve), new ItemStack(AsteroidsItems.canisterLN2, 1, 1))); + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.atmosphericValve), new ItemStack(AsteroidsItems.canisterLOX, 1, 1))); + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.canisterLN2, 1, 501), new ItemStack(AsteroidsItems.canisterLN2, 1, 1))); + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.canisterLOX, 1, 501), new ItemStack(AsteroidsItems.canisterLOX, 1, 1))); + + return recipes; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeWrapper.java new file mode 100644 index 00000000..b93c65a5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier; + +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class GasLiquefierRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ItemStack input; + @Nonnull private final ItemStack output; + + public GasLiquefierRecipeWrapper(@Nonnull ItemStack input, @Nonnull ItemStack output) + { + this.input = input; + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInput(ItemStack.class, this.input); + ingredients.setOutput(ItemStack.class, this.output); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeCategory.java new file mode 100644 index 00000000..69da0705 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeCategory.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth; + +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.client.Minecraft; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class MethaneSynthRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation refineryGuiTex = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/methane_synthesizer_recipe.png"); + private static final ResourceLocation gasesTex = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated hydrogenBarInput; + @Nonnull private final IDrawableAnimated carbonDioxideBarInput; + @Nonnull private final IDrawableAnimated methaneBarOutput; + + boolean fillAtmos = false; + + public MethaneSynthRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(refineryGuiTex, 3, 4, 168, 66); + this.localizedName = GCCoreUtil.translate("tile.mars_machine.5.name"); + + IDrawableStatic hydrogenBar = guiHelper.createDrawable(gasesTex, 35, 0, 16, 38); + this.hydrogenBarInput = guiHelper.createAnimatedDrawable(hydrogenBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic carbonDioxideBar = guiHelper.createDrawable(gasesTex, 35, 0, 16, 20); + this.carbonDioxideBarInput = guiHelper.createAnimatedDrawable(carbonDioxideBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic methaneBar = guiHelper.createDrawable(gasesTex, 1, 0, 16, 38); + this.methaneBarOutput = guiHelper.createAnimatedDrawable(methaneBar, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.METHANE_SYNTHESIZER_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + if (this.fillAtmos) + { + this.hydrogenBarInput.draw(minecraft, 29, 24); + this.carbonDioxideBarInput.draw(minecraft, 50, 24); + } else + { + this.hydrogenBarInput.draw(minecraft, 29, 24); + } + this.methaneBarOutput.draw(minecraft, 114, 24); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 28, 2); + itemstacks.init(1, true, 49, 2); + itemstacks.init(2, true, 49, 48); + itemstacks.init(3, false, 113, 2); + + if (recipeWrapper instanceof MethaneSynthRecipeWrapper) + { + MethaneSynthRecipeWrapper gasLiquefierRecipeWrapper = (MethaneSynthRecipeWrapper) recipeWrapper; + List input = ingredients.getInputs(ItemStack.class).get(0); + + Item inputItem = input.get(0).getItem(); + if (inputItem == AsteroidsItems.atmosphericValve) + { + this.fillAtmos = true; + itemstacks.set(1, input); + } else + { + this.fillAtmos = false; + itemstacks.set(2, input); + } + + itemstacks.set(3, ingredients.getOutputs(ItemStack.class).get(0)); + } + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeMaker.java new file mode 100644 index 00000000..14885241 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeMaker.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.item.ItemStack; + +public class MethaneSynthRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + recipes.add(new MethaneSynthRecipeWrapper(new ItemStack(AsteroidsItems.atmosphericValve), new ItemStack(AsteroidsItems.methaneCanister, 1, 1))); + recipes.add(new MethaneSynthRecipeWrapper(new ItemStack(MarsItems.carbonFragments, 25, 0), new ItemStack(AsteroidsItems.methaneCanister, 1, 1))); + + return recipes; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeWrapper.java new file mode 100644 index 00000000..ad578ce9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth; + +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class MethaneSynthRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ItemStack input; + @Nonnull private final ItemStack output; + + public MethaneSynthRecipeWrapper(@Nonnull ItemStack input, @Nonnull ItemStack output) + { + this.input = input; + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInput(ItemStack.class, this.input); + ingredients.setOutput(ItemStack.class, this.output); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeCategory.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeCategory.java new file mode 100644 index 00000000..e823f729 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeCategory.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.util.ResourceLocation; + +public class Tier2RocketRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation rocketGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_t2_recipe.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public Tier2RocketRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(rocketGuiTexture, 0, 0, 168, 126); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ROCKET_T2_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 44, 0); + itemstacks.init(1, true, 35, 18); + itemstacks.init(2, true, 35, 36); + itemstacks.init(3, true, 35, 54); + itemstacks.init(4, true, 35, 72); + itemstacks.init(5, true, 35, 90); + itemstacks.init(6, true, 53, 18); + itemstacks.init(7, true, 53, 36); + itemstacks.init(8, true, 53, 54); + itemstacks.init(9, true, 53, 72); + itemstacks.init(10, true, 53, 90); + itemstacks.init(11, true, 17, 72); // Booster left + itemstacks.init(12, true, 17, 90); + itemstacks.init(13, true, 71, 90); + itemstacks.init(14, true, 44, 108); // Rocket + itemstacks.init(15, true, 71, 72); // Booster right + itemstacks.init(16, true, 17, 108); + itemstacks.init(17, true, 71, 108); + itemstacks.init(18, true, 89, 7); + itemstacks.init(19, true, 115, 7); + itemstacks.init(20, true, 141, 7); + itemstacks.init(21, false, 138, 95); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeMaker.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeMaker.java new file mode 100644 index 00000000..6dab5a30 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeMaker.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeMaker; + +public class Tier2RocketRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT2Recipes()) + { + int chests = Tier1RocketRecipeMaker.countChests(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeWrapper.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeWrapper.java new file mode 100644 index 00000000..7d9534af --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class Tier2RocketRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public Tier2RocketRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(this.recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelBalloonParachute.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelBalloonParachute.java new file mode 100644 index 00000000..c5b770c9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelBalloonParachute.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class ModelBalloonParachute extends ModelBase +{ + + private static final ResourceLocation grayParachuteTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/gray.png"); + + public ModelRenderer[] parachute = new ModelRenderer[3]; + public ModelRenderer[] parachuteStrings = new ModelRenderer[4]; + + public ModelBalloonParachute() + { + this(0.0F); + } + + public ModelBalloonParachute(float par1) + { + super(); + + this.parachute[0] = new ModelRenderer(this, 0, 0).setTextureSize(512, 256); + this.parachute[0].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, par1); + this.parachute[0].setRotationPoint(15.0F, 4.0F, 0.0F); + this.parachute[1] = new ModelRenderer(this, 0, 42).setTextureSize(512, 256); + this.parachute[1].addBox(-20.0F, -45.0F, -20.0F, 40, 2, 40, par1); + this.parachute[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachute[2] = new ModelRenderer(this, 0, 0).setTextureSize(512, 256); + this.parachute[2].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, par1); + this.parachute[2].setRotationPoint(11F, -11, 0.0F); + + this.parachuteStrings[0] = new ModelRenderer(this, 100, 0).setTextureSize(512, 256); + this.parachuteStrings[0].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[0].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[1] = new ModelRenderer(this, 100, 0).setTextureSize(512, 256); + this.parachuteStrings[1].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[2] = new ModelRenderer(this, 100, 0).setTextureSize(512, 256); + this.parachuteStrings[2].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[2].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[3] = new ModelRenderer(this, 100, 0).setTextureSize(512, 256); + this.parachuteStrings[3].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[3].setRotationPoint(0.0F, 0.0F, 0.0F); + } + + public void renderAll() + { + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelBalloonParachute.grayParachuteTexture); + + int i; + + for (i = 0; i < this.parachute.length; i++) + { + this.parachute[i].render(0.0625F); + } + + for (i = 0; i < this.parachuteStrings.length; i++) + { + this.parachuteStrings[i].render(0.0625F); + } + + this.parachute[0].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + + this.parachute[0].setRotationPoint(-5.85F, -11.0F, 2.0F); + this.parachute[1].setRotationPoint(9F, -7F, 2.0F); + this.parachute[2].setRotationPoint(-2.15F, 4.0F, 2.0F); + this.parachute[0].rotateAngleZ = (float) (210F / Constants.RADIANS_TO_DEGREES); + this.parachute[1].rotateAngleZ = (float) (180F / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleZ = (float) -(210F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleZ = (float) ((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].setRotationPoint(9.0F, 3.0F, 2.0F); + this.parachuteStrings[1].rotateAngleZ = (float) ((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].setRotationPoint(9.0F, 3.0F, 2.0F); + + this.parachuteStrings[2].rotateAngleZ = (float) -((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].setRotationPoint(9.0F, 3.0F, 2.0F); + this.parachuteStrings[3].rotateAngleZ = (float) -((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].setRotationPoint(9.0F, 3.0F, 2.0F); + } + + public void renderParachute() + { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelCreeperBoss.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelCreeperBoss.java new file mode 100644 index 00000000..898a1cdc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelCreeperBoss.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelCreeperBoss extends ModelBase +{ + + ModelRenderer headMain; + ModelRenderer bodyMain; + ModelRenderer rightLegFront; + ModelRenderer leftLegFront; + ModelRenderer rightLeg; + ModelRenderer leftLeg; + ModelRenderer oxygenTank; + ModelRenderer headLeft; + ModelRenderer headRight; + ModelRenderer neckRight; + ModelRenderer neckLeft; + + public ModelCreeperBoss() + { + this(0.0F); + } + + public ModelCreeperBoss(float scale) + { + this.textureWidth = 128; + this.textureHeight = 64; + this.neckRight = new ModelRenderer(this, 16, 20); + this.neckRight.mirror = true; + this.neckRight.addBox(-2.5F, -9F, -1.5F, 5, 9, 3, scale); + this.neckRight.setRotationPoint(-3F, 10F, 0F); + this.neckRight.setTextureSize(128, 64); + this.neckRight.mirror = true; + this.setRotation(this.neckRight, 0F, 0F, -1.169371F); + this.neckRight.mirror = false; + this.neckLeft = new ModelRenderer(this, 16, 20); + this.neckLeft.addBox(-2.5F, -9F, -1.5F, 5, 9, 3, scale); + this.neckLeft.setRotationPoint(3F, 10F, 0F); + this.neckLeft.setTextureSize(128, 64); + this.neckLeft.mirror = true; + this.setRotation(this.neckLeft, 0F, 0F, 1.169371F); + this.headMain = new ModelRenderer(this, 0, 0); + this.headMain.addBox(-4F, -8F, -4F, 8, 8, 8, scale); + this.headMain.setRotationPoint(0F, 6F, 0F); + this.headMain.setTextureSize(128, 64); + this.headMain.mirror = true; + this.setRotation(this.headMain, 0F, 0F, 0F); + this.bodyMain = new ModelRenderer(this, 16, 16); + this.bodyMain.addBox(-4F, 0F, -2F, 8, 12, 4, scale); + this.bodyMain.setRotationPoint(0F, 6F, 0F); + this.bodyMain.setTextureSize(128, 64); + this.bodyMain.mirror = true; + this.setRotation(this.bodyMain, 0F, 0F, 0F); + this.rightLegFront = new ModelRenderer(this, 0, 16); + this.rightLegFront.addBox(-2F, 0F, -2F, 4, 6, 4, scale); + this.rightLegFront.setRotationPoint(-2F, 18F, -4F); + this.rightLegFront.setTextureSize(128, 64); + this.rightLegFront.mirror = true; + this.setRotation(this.rightLegFront, 0F, 0F, 0F); + this.leftLegFront = new ModelRenderer(this, 0, 16); + this.leftLegFront.addBox(-2F, 0F, -2F, 4, 6, 4, scale); + this.leftLegFront.setRotationPoint(2F, 18F, -4F); + this.leftLegFront.setTextureSize(128, 64); + this.leftLegFront.mirror = true; + this.setRotation(this.leftLegFront, 0F, 0F, 0F); + this.rightLeg = new ModelRenderer(this, 0, 16); + this.rightLeg.addBox(0F, 0F, -2F, 4, 6, 4, scale); + this.rightLeg.setRotationPoint(-4F, 18F, 4F); + this.rightLeg.setTextureSize(128, 64); + this.rightLeg.mirror = true; + this.setRotation(this.rightLeg, 0F, 0F, 0F); + this.leftLeg = new ModelRenderer(this, 0, 16); + this.leftLeg.addBox(-2F, 0F, -2F, 4, 6, 4, scale); + this.leftLeg.setRotationPoint(2F, 18F, 4F); + this.leftLeg.setTextureSize(128, 64); + this.leftLeg.mirror = true; + this.setRotation(this.leftLeg, 0F, 0F, 0F); + this.oxygenTank = new ModelRenderer(this, 40, 0); + this.oxygenTank.addBox(-5F, -9F, -5F, 10, 10, 10, scale); + this.oxygenTank.setRotationPoint(0F, 6F, 0F); + this.oxygenTank.setTextureSize(128, 64); + this.oxygenTank.mirror = true; + this.setRotation(this.oxygenTank, 0F, 0F, 0F); + this.headLeft = new ModelRenderer(this, 0, 0); + this.headLeft.addBox(1F, -9F, -4F, 8, 8, 8, scale); + this.headLeft.setRotationPoint(3F, 6F, 0.1F); + this.headLeft.setTextureSize(128, 64); + this.headLeft.mirror = true; + this.setRotation(this.headLeft, 0F, 0F, 0.7853982F); + this.headRight = new ModelRenderer(this, 0, 0); + this.headRight.addBox(-9F, -9F, -4F, 8, 8, 8, scale); + this.headRight.setRotationPoint(-3F, 6F, -0.1F); + this.headRight.setTextureSize(128, 64); + this.headRight.mirror = true; + this.setRotation(this.headRight, 0F, 0F, -0.7853982F); + + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + final EntityCreeperBoss creeper = (EntityCreeperBoss) entity; + + if (creeper.headsRemaining > 2) + { + this.headLeft.render(f5); + this.neckLeft.render(f5); + this.headRight.render(f5); + this.neckRight.render(f5); + this.headMain.render(f5); + this.oxygenTank.render(f5); + } else if (creeper.headsRemaining > 1) + { + this.headRight.render(f5); + this.neckRight.render(f5); + this.headMain.render(f5); + this.oxygenTank.render(f5); + } else if (creeper.headsRemaining > 0) + { + this.headMain.render(f5); + this.oxygenTank.render(f5); + } + + this.bodyMain.render(f5); + this.rightLegFront.render(f5); + this.leftLegFront.render(f5); + this.rightLeg.render(f5); + this.leftLeg.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.headMain.rotateAngleY = f3 / Constants.RADIANS_TO_DEGREES; + this.headMain.rotateAngleX = f4 / Constants.RADIANS_TO_DEGREES; + this.oxygenTank.rotateAngleY = f3 / Constants.RADIANS_TO_DEGREES; + this.oxygenTank.rotateAngleX = f4 / Constants.RADIANS_TO_DEGREES; + this.rightLegFront.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; + this.leftLegFront.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 2F * f1; + this.leftLeg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 2F * f1; + this.rightLeg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 2F * f1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSlimeling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSlimeling.java new file mode 100644 index 00000000..b1ee733c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSlimeling.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelSlimeling extends ModelBase +{ + + ModelRenderer tail3; + ModelRenderer tail2; + ModelRenderer tail1; + ModelRenderer bodyMain; + ModelRenderer neck; + ModelRenderer head; + + public ModelSlimeling(float scale) + { + this.textureWidth = 256; + this.textureHeight = 128; + + this.head = new ModelRenderer(this, 196, 25); + this.head.addBox(-4.5F, -15.7F, 0.5F, 9, 9, 9); + this.head.setRotationPoint(0F, 0F, 0F); + this.head.setTextureSize(256, 128); + this.head.mirror = true; + this.setRotation(this.head, 0F, 0F, 0F); + this.tail3 = new ModelRenderer(this, 0, 25); + this.tail3.addBox(-3.5F, 1F, -17F, 7, 5, 7); + this.tail3.setRotationPoint(0F, 0F, 0F); + this.tail3.setTextureSize(256, 128); + this.tail3.mirror = true; + this.setRotation(this.tail3, 0F, 0F, 0F); + this.tail2 = new ModelRenderer(this, 28, 25); + this.tail2.addBox(-4.5F, -1F, -15F, 9, 7, 9); + this.tail2.setRotationPoint(0F, 0F, 0F); + this.tail2.setTextureSize(256, 128); + this.tail2.mirror = true; + this.setRotation(this.tail2, 0F, 0F, 0F); + this.tail1 = new ModelRenderer(this, 64, 25); + this.tail1.addBox(-5.5F, -3F, -11F, 11, 9, 10); + this.tail1.setRotationPoint(0F, 0F, 0F); + this.tail1.setTextureSize(256, 128); + this.tail1.mirror = true; + this.setRotation(this.tail1, 0F, 0F, 0F); + this.bodyMain = new ModelRenderer(this, 106, 25); + this.bodyMain.addBox(-6F, -6F, -6F, 12, 12, 12); + this.bodyMain.setRotationPoint(0F, 0F, 0F); + this.bodyMain.setTextureSize(256, 128); + this.bodyMain.mirror = true; + this.setRotation(this.bodyMain, 0F, 0F, 0F); + this.neck = new ModelRenderer(this, 154, 25); + this.neck.addBox(-5.5F, -10.5F, -3F, 11, 11, 10); + this.neck.setRotationPoint(0F, 0F, 0F); + this.neck.setTextureSize(256, 128); + this.neck.mirror = true; + this.setRotation(this.neck, 0F, 0F, 0F); + + if (scale > 0) + { + this.head = new ModelRenderer(this, 156, 0); + this.head.addBox(-3.5F, -14.7F, 1.5F, 7, 7, 7); + this.head.setRotationPoint(0F, 0F, 0F); + this.head.setTextureSize(256, 128); + this.head.mirror = true; + this.setRotation(this.head, 0F, 0F, 0F); + this.neck = new ModelRenderer(this, 122, 0); + this.neck.addBox(-4.5F, -9.5F, -2F, 9, 9, 8); + this.neck.setRotationPoint(0F, 0F, 0F); + this.neck.setTextureSize(256, 128); + this.neck.mirror = true; + this.setRotation(this.neck, 0F, 0F, 0F); + this.bodyMain = new ModelRenderer(this, 82, 0); + this.bodyMain.addBox(-5F, -5F, -5F, 10, 10, 10); + this.bodyMain.setRotationPoint(0F, 0F, 0F); + this.bodyMain.setTextureSize(256, 128); + this.bodyMain.mirror = true; + this.setRotation(this.bodyMain, 0F, 0F, 0F); + this.tail1 = new ModelRenderer(this, 48, 0); + this.tail1.addBox(-4.5F, -2F, -10F, 9, 7, 8); + this.tail1.setRotationPoint(0F, 0F, 0F); + this.tail1.setTextureSize(256, 128); + this.tail1.mirror = true; + this.setRotation(this.tail1, 0F, 0F, 0F); + this.tail2 = new ModelRenderer(this, 20, 0); + this.tail2.addBox(-3.5F, 0F, -14F, 7, 5, 7); + this.tail2.setRotationPoint(0F, 0F, 0F); + this.tail2.setTextureSize(256, 128); + this.tail2.mirror = true; + this.setRotation(this.tail2, 0F, 0F, 0F); + this.tail3 = new ModelRenderer(this, 0, 0); + this.tail3.addBox(-2.5F, 2F, -16F, 5, 3, 5); + this.tail3.setRotationPoint(0F, 0F, 0F); + this.tail3.setTextureSize(256, 128); + this.tail3.mirror = true; + this.setRotation(this.tail3, 0F, 0F, 0F); + } + + this.bodyMain.addChild(this.tail1); + this.neck.addChild(this.head); + this.tail1.addChild(this.tail2); + this.tail2.addChild(this.tail3); + this.bodyMain.addChild(this.neck); + } + + @Override + public void render(Entity entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + super.render(entity, par2, par3, par4, par5, par6, par7); + this.setRotationAngles(par2, par3, par4, par5, par6, par7, entity); + this.bodyMain.render(par7); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity par7Entity) + { + this.tail1.rotateAngleY = MathHelper.cos(par1 * 0.6662F) * 0.2F * par2; + this.tail2.rotateAngleY = MathHelper.cos(par1 * 0.6662F) * 0.2F * par2; + this.tail3.rotateAngleY = MathHelper.cos(par1 * 0.6662F) * 0.2F * par2; + this.tail1.offsetZ = MathHelper.cos(0.5F * par1 * 0.6662F) * 0.2F * par2; + this.tail2.offsetZ = MathHelper.cos(0.5F * par1 * 0.6662F) * 0.2F * par2; + this.tail3.offsetZ = MathHelper.cos(0.5F * par1 * 0.6662F) * 0.2F * par2; + this.neck.offsetZ = -MathHelper.cos(0.5F * par1 * 0.6662F) * 0.1F * par2; + this.head.offsetZ = -MathHelper.cos(0.5F * par1 * 0.6662F) * 0.1F * par2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSludgeling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSludgeling.java new file mode 100644 index 00000000..ca585f1e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSludgeling.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelSludgeling extends ModelBase +{ + + ModelRenderer tail4; + ModelRenderer body; + ModelRenderer tail1; + ModelRenderer tail2; + ModelRenderer tail3; + + public ModelSludgeling() + { + this.textureWidth = 64; + this.textureHeight = 32; + + this.tail4 = new ModelRenderer(this, 0, 0); + this.tail4.addBox(-0.5F, 0.3F, 4.5F, 1, 1, 1); + this.tail4.setRotationPoint(0F, 23.5F, -2F); + this.tail4.setTextureSize(64, 32); + this.tail4.mirror = true; + this.setRotation(this.tail4, 0F, 0F, 0F); + this.body = new ModelRenderer(this, 4, 0); + this.body.addBox(-1F, -0.5F, -1.5F, 2, 1, 3); + this.body.setRotationPoint(0F, 23.5F, -2F); + this.body.setTextureSize(64, 32); + this.body.mirror = true; + this.setRotation(this.body, 0F, 0F, 0F); + this.tail1 = new ModelRenderer(this, 0, 0); + this.tail1.addBox(-0.5F, -0.3F, 1.5F, 1, 1, 1); + this.tail1.setRotationPoint(0F, 23.5F, -2F); + this.tail1.setTextureSize(64, 32); + this.tail1.mirror = true; + this.setRotation(this.tail1, 0F, 0F, 0F); + this.tail2 = new ModelRenderer(this, 0, 0); + this.tail2.addBox(-0.5F, -0.1F, 2.5F, 1, 1, 1); + this.tail2.setRotationPoint(0F, 23.5F, -2F); + this.tail2.setTextureSize(64, 32); + this.tail2.mirror = true; + this.setRotation(this.tail2, 0F, 0F, 0F); + this.tail3 = new ModelRenderer(this, 0, 0); + this.tail3.addBox(-0.5F, 0.1F, 3.5F, 1, 1, 1); + this.tail3.setRotationPoint(0F, 23.5F, -2F); + this.tail3.setTextureSize(64, 32); + this.tail3.mirror = true; + this.setRotation(this.tail3, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.body.render(f5); + this.tail1.render(f5); + this.tail2.render(f5); + this.tail3.render(f5); + this.tail4.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.tail1.rotateAngleY = MathHelper.cos(f2 * 0.3F + 0 * 0.15F * (float) Math.PI) * (float) Math.PI * 0.025F * (1 + Math.abs(0 - 2)); + this.tail2.rotateAngleY = MathHelper.cos(f2 * 0.3F + 1 * 0.15F * (float) Math.PI) * (float) Math.PI * 0.025F * (1 + Math.abs(1 - 2)); + this.tail3.rotateAngleY = MathHelper.cos(f2 * 0.3F + 2 * 0.15F * (float) Math.PI) * (float) Math.PI * 0.025F * (1 + Math.abs(1 - 2)); + this.tail4.rotateAngleY = MathHelper.cos(f2 * 0.3F + 3 * 0.15F * (float) Math.PI) * (float) Math.PI * 0.025F * (1 + Math.abs(1 - 2)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelTier2Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelTier2Rocket.java new file mode 100644 index 00000000..7208d62d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelTier2Rocket.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelTier2Rocket extends ModelBase +{ + + // Roof, Floor, Bottom + ModelRenderer[] inside = new ModelRenderer[3]; + // 4 sets of 5 fin parts + ModelRenderer[][] fins = new ModelRenderer[4][5]; + // 8 parts to the top of the rocket, last is the long center piece + ModelRenderer[] top = new ModelRenderer[8]; + // 4 sets of 3 booster parts (attachment, main, top) + ModelRenderer[][] boosters = new ModelRenderer[4][3]; + // 3 booster base parts, starting from bottom + ModelRenderer[] base = new ModelRenderer[3]; + // 7 side pars, first four are the front, then right, and so on + ModelRenderer[] sides = new ModelRenderer[7]; + + public ModelTier2Rocket() + { + this(0.0F); + } + + public ModelTier2Rocket(float var1) + { + this.textureWidth = 256; + this.textureHeight = 256; + + float halfPI = (float) (Math.PI / 2.0); + float fullPI = (float) (Math.PI); + + this.inside[0] = new ModelRenderer(this, 0, 59); + this.inside[0].addBox(-9F, -57F, -9F, 18, 1, 18, var1); + this.inside[0].setRotationPoint(0F, 23F, 0F); + this.inside[0].setTextureSize(256, 256); + this.inside[0].mirror = true; + this.setStartingAngles(this.inside[0], 0F, 0F, 0F); + this.inside[1] = new ModelRenderer(this, 0, 78); + this.inside[1].addBox(-8.5F, -16F, -8.5F, 17, 1, 17, var1); + this.inside[1].setRotationPoint(0F, 23F, 0F); + this.inside[1].setTextureSize(256, 256); + this.inside[1].mirror = true; + this.setStartingAngles(this.inside[1], 0F, 0F, 0F); + this.inside[2] = new ModelRenderer(this, 0, 40); + this.inside[2].addBox(-9F, -4F, -9F, 18, 1, 18, var1); + this.inside[2].setRotationPoint(0F, 23F, 0F); + this.inside[2].setTextureSize(256, 256); + this.inside[2].mirror = true; + this.setStartingAngles(this.inside[2], 0F, 0F, 0F); + + this.fins[0][1] = new ModelRenderer(this, 66, 0); + this.fins[0][1].addBox(-1F, -9F, -19.4F, 2, 8, 2, var1); + this.fins[0][1].setRotationPoint(0F, 24F, 0F); + this.fins[0][1].setTextureSize(256, 256); + this.fins[0][1].mirror = true; + this.setStartingAngles(this.fins[0][1], 0F, 0.7853982F, 0F); + this.fins[0][2] = new ModelRenderer(this, 66, 0); + this.fins[0][2].addBox(-1F, -12F, -17.4F, 2, 8, 2, var1); + this.fins[0][2].setRotationPoint(0F, 24F, 0F); + this.fins[0][2].setTextureSize(256, 256); + this.fins[0][2].mirror = true; + this.setStartingAngles(this.fins[0][2], 0F, 0.7853982F, 0F); + this.fins[0][3] = new ModelRenderer(this, 66, 0); + this.fins[0][3].addBox(-1F, -14F, -15.4F, 2, 8, 2, var1); + this.fins[0][3].setRotationPoint(0F, 24F, 0F); + this.fins[0][3].setTextureSize(256, 256); + this.fins[0][3].mirror = true; + this.setStartingAngles(this.fins[0][3], 0F, 0.7853982F, 0F); + this.fins[0][4] = new ModelRenderer(this, 66, 0); + this.fins[0][4].addBox(-1F, -15F, -13.5F, 2, 8, 2, var1); + this.fins[0][4].setRotationPoint(0F, 24F, 0F); + this.fins[0][4].setTextureSize(256, 256); + this.fins[0][4].mirror = true; + this.setStartingAngles(this.fins[0][4], 0F, 0.7853982F, 0F); + + this.fins[0][0] = new ModelRenderer(this, 60, 0); + this.fins[0][0].addBox(-1F, -14F, -20.4F, 2, 15, 1, var1); + this.fins[0][0].setRotationPoint(0F, 24F, 0F); + this.fins[0][0].setTextureSize(256, 256); + this.fins[0][0].mirror = true; + this.setStartingAngles(this.fins[0][0], 0F, 0.7853982F, 0F); + + this.fins[1][0] = new ModelRenderer(this, 74, 0); + this.fins[1][0].addBox(-20.4F, -14F, -1F, 1, 15, 2, var1); + this.fins[1][0].setRotationPoint(0F, 24F, 0F); + this.fins[1][0].setTextureSize(256, 256); + this.fins[1][0].mirror = true; + this.setStartingAngles(this.fins[1][0], 0F, 0.7853982F, 0F); + this.fins[1][1] = new ModelRenderer(this, 66, 0); + this.fins[1][1].addBox(-19.4F, -9F, -1F, 2, 8, 2, var1); + this.fins[1][1].setRotationPoint(0F, 24F, 0F); + this.fins[1][1].setTextureSize(256, 256); + this.fins[1][1].mirror = true; + this.setStartingAngles(this.fins[1][1], 0F, 0.7853982F, 0F); + this.fins[1][2] = new ModelRenderer(this, 66, 0); + this.fins[1][2].addBox(-17.4F, -12F, -1F, 2, 8, 2, var1); + this.fins[1][2].setRotationPoint(0F, 24F, 0F); + this.fins[1][2].setTextureSize(256, 256); + this.fins[1][2].mirror = true; + this.setStartingAngles(this.fins[1][2], 0F, 0.7853982F, 0F); + this.fins[1][3] = new ModelRenderer(this, 66, 0); + this.fins[1][3].addBox(-15.4F, -14F, -1F, 2, 8, 2, var1); + this.fins[1][3].setRotationPoint(0F, 24F, 0F); + this.fins[1][3].setTextureSize(256, 256); + this.fins[1][3].mirror = true; + this.setStartingAngles(this.fins[1][3], 0F, 0.7853982F, 0F); + this.fins[1][4] = new ModelRenderer(this, 66, 0); + this.fins[1][4].addBox(-13.5F, -15F, -1F, 2, 8, 2, var1); + this.fins[1][4].setRotationPoint(0F, 24F, 0F); + this.fins[1][4].setTextureSize(256, 256); + this.fins[1][4].mirror = true; + this.setStartingAngles(this.fins[1][4], 0F, 0.7853982F, 0F); + + this.fins[2][0] = new ModelRenderer(this, 60, 0); + this.fins[2][0].addBox(-1F, -14F, 19.5F, 2, 15, 1, var1); + this.fins[2][0].setRotationPoint(0F, 24F, 0F); + this.fins[2][0].setTextureSize(256, 256); + this.fins[2][0].mirror = true; + this.setStartingAngles(this.fins[2][0], 0F, 0.7853982F, 0F); + this.fins[2][1] = new ModelRenderer(this, 66, 0); + this.fins[2][1].addBox(-1F, -9F, 17.5F, 2, 8, 2, var1); + this.fins[2][1].setRotationPoint(0F, 24F, 0F); + this.fins[2][1].setTextureSize(256, 256); + this.fins[2][1].mirror = true; + this.setStartingAngles(this.fins[2][1], 0F, 0.7853982F, 0F); + this.fins[2][2] = new ModelRenderer(this, 66, 0); + this.fins[2][2].addBox(-1F, -12F, 15.5F, 2, 8, 2, var1); + this.fins[2][2].setRotationPoint(0F, 24F, 0F); + this.fins[2][2].setTextureSize(256, 256); + this.fins[2][2].mirror = true; + this.setStartingAngles(this.fins[2][2], 0F, 0.7853982F, 0F); + this.fins[2][3] = new ModelRenderer(this, 66, 0); + this.fins[2][3].addBox(-1F, -14F, 13.5F, 2, 8, 2, var1); + this.fins[2][3].setRotationPoint(0F, 24F, 0F); + this.fins[2][3].setTextureSize(256, 256); + this.fins[2][3].mirror = true; + this.setStartingAngles(this.fins[2][3], 0F, 0.7853982F, 0F); + this.fins[2][4] = new ModelRenderer(this, 66, 0); + this.fins[2][4].addBox(-1F, -15F, 11.6F, 2, 8, 2, var1); + this.fins[2][4].setRotationPoint(0F, 24F, 0F); + this.fins[2][4].setTextureSize(256, 256); + this.fins[2][4].mirror = true; + this.setStartingAngles(this.fins[2][4], 0F, 0.7853982F, 0F); + + this.fins[3][0] = new ModelRenderer(this, 74, 0); + this.fins[3][0].addBox(19.5F, -14F, -1F, 1, 15, 2, var1); + this.fins[3][0].setRotationPoint(0F, 24F, 0F); + this.fins[3][0].setTextureSize(256, 256); + this.fins[3][0].mirror = true; + this.setStartingAngles(this.fins[3][0], 0F, 0.7853982F, 0F); + this.fins[3][1] = new ModelRenderer(this, 66, 0); + this.fins[3][1].addBox(17.5F, -9F, -1F, 2, 8, 2, var1); + this.fins[3][1].setRotationPoint(0F, 24F, 0F); + this.fins[3][1].setTextureSize(256, 256); + this.fins[3][1].mirror = true; + this.setStartingAngles(this.fins[3][1], 0F, 0.7853982F, 0F); + this.fins[3][2] = new ModelRenderer(this, 66, 0); + this.fins[3][2].addBox(15.5F, -12F, -1F, 2, 8, 2, var1); + this.fins[3][2].setRotationPoint(0F, 24F, 0F); + this.fins[3][2].setTextureSize(256, 256); + this.fins[3][2].mirror = true; + this.setStartingAngles(this.fins[3][2], 0F, 0.7853982F, 0F); + this.fins[3][3] = new ModelRenderer(this, 66, 0); + this.fins[3][3].addBox(13.5F, -14F, -1F, 2, 8, 2, var1); + this.fins[3][3].setRotationPoint(0F, 24F, 0F); + this.fins[3][3].setTextureSize(256, 256); + this.fins[3][3].mirror = true; + this.setStartingAngles(this.fins[3][3], 0F, 0.7853982F, 0F); + this.fins[3][4] = new ModelRenderer(this, 66, 0); + this.fins[3][4].addBox(11.6F, -15F, -1F, 2, 8, 2, var1); + this.fins[3][4].setRotationPoint(0F, 24F, 0F); + this.fins[3][4].setTextureSize(256, 256); + this.fins[3][4].mirror = true; + this.setStartingAngles(this.fins[3][4], 0F, 0.7853982F, 0F); + + this.top[0] = new ModelRenderer(this, 192, 60); + this.top[0].addBox(-8F, -60F, -8F, 16, 2, 16, var1); + this.top[0].setRotationPoint(0F, 24F, 0F); + this.top[0].setTextureSize(256, 256); + this.top[0].mirror = true; + this.setStartingAngles(this.top[0], 0F, 0F, 0F); + this.top[1] = new ModelRenderer(this, 200, 78); + this.top[1].addBox(-7F, -62F, -7F, 14, 2, 14, var1); + this.top[1].setRotationPoint(0F, 24F, 0F); + this.top[1].setTextureSize(256, 256); + this.top[1].mirror = true; + this.setStartingAngles(this.top[1], 0F, 0F, 0F); + this.top[2] = new ModelRenderer(this, 208, 94); + this.top[2].addBox(-6F, -64F, -6F, 12, 2, 12, var1); + this.top[2].setRotationPoint(0F, 24F, 0F); + this.top[2].setTextureSize(256, 256); + this.top[2].mirror = true; + this.setStartingAngles(this.top[2], 0F, 0F, 0F); + this.top[3] = new ModelRenderer(this, 216, 108); + this.top[3].addBox(-5F, -66F, -5F, 10, 2, 10, var1); + this.top[3].setRotationPoint(0F, 24F, 0F); + this.top[3].setTextureSize(256, 256); + this.top[3].mirror = true; + this.setStartingAngles(this.top[3], 0F, 0F, 0F); + this.top[4] = new ModelRenderer(this, 224, 120); + this.top[4].addBox(-4F, -68F, -4F, 8, 2, 8, var1); + this.top[4].setRotationPoint(0F, 24F, 0F); + this.top[4].setTextureSize(256, 256); + this.top[4].mirror = true; + this.setStartingAngles(this.top[4], 0F, 0F, 0F); + this.top[5] = new ModelRenderer(this, 232, 130); + this.top[5].addBox(-3F, -70F, -3F, 6, 2, 6, var1); + this.top[5].setRotationPoint(0F, 24F, 0F); + this.top[5].setTextureSize(256, 256); + this.top[5].mirror = true; + this.setStartingAngles(this.top[5], 0F, 0F, 0F); + this.top[6] = new ModelRenderer(this, 240, 138); + this.top[6].addBox(-2F, -72F, -2F, 4, 2, 4, var1); + this.top[6].setRotationPoint(0F, 24F, 0F); + this.top[6].setTextureSize(256, 256); + this.top[6].mirror = true; + this.setStartingAngles(this.top[6], 0F, 0F, 0F); + this.top[7] = new ModelRenderer(this, 248, 144); + this.top[7].addBox(-1F, -88F, -1F, 2, 18, 2, var1); + this.top[7].setRotationPoint(0F, 24F, 0F); + this.top[7].setTextureSize(256, 256); + this.top[7].mirror = true; + this.setStartingAngles(this.top[7], 0F, 0F, 0F); + + this.base[0] = new ModelRenderer(this, 0, 0); + this.base[0].addBox(-7F, -1F, -7F, 14, 1, 14, var1); + this.base[0].setRotationPoint(0F, 24F, 0F); + this.base[0].setTextureSize(256, 256); + this.base[0].mirror = true; + this.setStartingAngles(this.base[0], 0F, 0F, 0F); + this.base[1] = new ModelRenderer(this, 0, 15); + this.base[1].addBox(-6F, -2F, -6F, 12, 1, 12, var1); + this.base[1].setRotationPoint(0F, 24F, 0F); + this.base[1].setTextureSize(256, 256); + this.base[1].mirror = true; + this.setStartingAngles(this.base[1], 0F, 0F, 0F); + this.base[2] = new ModelRenderer(this, 0, 28); + this.base[2].addBox(-5F, -4F, -5F, 10, 2, 10, var1); + this.base[2].setRotationPoint(0F, 24F, 0F); + this.base[2].setTextureSize(256, 256); + this.base[2].mirror = true; + this.setStartingAngles(this.base[2], 0F, 0F, 0F); + + this.sides[0] = new ModelRenderer(this, 85, 0); + this.sides[0].addBox(-3.9F, -58F, -8.9F, 8, 17, 1, var1); + this.sides[0].setRotationPoint(0F, 24F, 0F); + this.sides[0].setTextureSize(256, 256); + this.sides[0].mirror = true; + this.setStartingAngles(this.sides[0], 0F, 0F, 0F); + this.sides[1] = new ModelRenderer(this, 103, 0); + this.sides[1].addBox(3.9F, -58F, -8.9F, 5, 54, 1, var1); + this.sides[1].setRotationPoint(0F, 24F, 0F); + this.sides[1].setTextureSize(256, 256); + this.sides[1].mirror = true; + this.setStartingAngles(this.sides[1], 0F, 0F, 0F); + this.sides[2] = new ModelRenderer(this, 85, 18); + this.sides[2].addBox(-3.9F, -34F, -8.9F, 8, 30, 1, var1); + this.sides[2].setRotationPoint(0F, 24F, 0F); + this.sides[2].setTextureSize(256, 256); + this.sides[2].mirror = true; + this.setStartingAngles(this.sides[2], 0F, 0F, 0F); + this.sides[3] = new ModelRenderer(this, 103, 55); + this.sides[3].addBox(-8.9F, -58F, -8.9F, 5, 54, 1, var1); + this.sides[3].setRotationPoint(0F, 24F, 0F); + this.sides[3].setTextureSize(256, 256); + this.sides[3].mirror = true; + this.setStartingAngles(this.sides[3], 0F, 0F, 0F); + + this.sides[4] = new ModelRenderer(this, 120, 0); + this.sides[4].addBox(-8.9F, -58F, -7.9F, 1, 54, 16, var1); + this.sides[4].setRotationPoint(0F, 24F, 0F); + this.sides[4].setTextureSize(256, 256); + this.sides[4].mirror = true; + this.setStartingAngles(this.sides[4], 0F, 0F, 0F); + this.sides[5] = new ModelRenderer(this, 120, 141); + this.sides[5].addBox(-8.9F, -58F, 8.1F, 17, 54, 1, var1); + this.sides[5].setRotationPoint(0F, 24F, 0F); + this.sides[5].setTextureSize(256, 256); + this.sides[5].mirror = true; + this.setStartingAngles(this.sides[5], 0F, 0F, 0F); + this.sides[6] = new ModelRenderer(this, 119, 70); + this.sides[6].addBox(8.1F, -58F, -7.9F, 1, 54, 17, var1); + this.sides[6].setRotationPoint(0F, 24F, 0F); + this.sides[6].setTextureSize(256, 256); + this.sides[6].mirror = true; + this.setStartingAngles(this.sides[6], 0F, 0F, 0F); + + this.boosters[0][0] = new ModelRenderer(this, 154, 19); + this.boosters[0][0].addBox(-10.9F, -10F, -0.5F, 3, 5, 1, var1); + this.boosters[0][0].setRotationPoint(0F, 24F, 0F); + this.boosters[0][0].setTextureSize(256, 256); + this.boosters[0][0].mirror = true; + this.setStartingAngles(this.boosters[0][0], 0F, -halfPI, 0F); + this.boosters[0][1] = new ModelRenderer(this, 154, 6); + this.boosters[0][1].addBox(-14.9F, -11F, -2.5F, 5, 8, 5, var1); + this.boosters[0][1].setRotationPoint(0F, 24F, 0F); + this.boosters[0][1].setTextureSize(256, 256); + this.boosters[0][1].mirror = true; + this.setStartingAngles(this.boosters[0][1], 0F, -halfPI, 0F); + this.boosters[0][2] = new ModelRenderer(this, 154, 0); + this.boosters[0][2].addBox(-14.4F, -13F, -2F, 4, 2, 4, var1); + this.boosters[0][2].setRotationPoint(0F, 24F, 0F); + this.boosters[0][2].setTextureSize(256, 256); + this.boosters[0][2].mirror = true; + this.setStartingAngles(this.boosters[0][2], 0F, -halfPI, 0F); + + this.boosters[1][0] = new ModelRenderer(this, 154, 19); + this.boosters[1][0].addBox(-10.9F, -10F, -0.5F, 3, 5, 1, var1); + this.boosters[1][0].setRotationPoint(0F, 24F, 0F); + this.boosters[1][0].setTextureSize(256, 256); + this.boosters[1][0].mirror = true; + this.setStartingAngles(this.boosters[1][0], 0F, 0F, 0F); + this.boosters[1][1] = new ModelRenderer(this, 154, 6); + this.boosters[1][1].addBox(-14.9F, -11F, -2.5F, 5, 8, 5, var1); + this.boosters[1][1].setRotationPoint(0F, 24F, 0F); + this.boosters[1][1].setTextureSize(256, 256); + this.boosters[1][1].mirror = true; + this.setStartingAngles(this.boosters[1][1], 0F, 0F, 0F); + this.boosters[1][2] = new ModelRenderer(this, 154, 0); + this.boosters[1][2].addBox(-14.4F, -13F, -2F, 4, 2, 4, var1); + this.boosters[1][2].setRotationPoint(0F, 24F, 0F); + this.boosters[1][2].setTextureSize(256, 256); + this.boosters[1][2].mirror = true; + this.setStartingAngles(this.boosters[1][2], 0F, 0F, 0F); + + this.boosters[2][0] = new ModelRenderer(this, 154, 19); + this.boosters[2][0].addBox(-10.9F, -10F, -0.5F, 3, 5, 1, var1); + this.boosters[2][0].setRotationPoint(0F, 24F, 0F); + this.boosters[2][0].setTextureSize(256, 256); + this.boosters[2][0].mirror = true; + this.setStartingAngles(this.boosters[2][0], 0F, halfPI, 0F); + this.boosters[2][1] = new ModelRenderer(this, 154, 6); + this.boosters[2][1].addBox(-14.9F, -11F, -2.5F, 5, 8, 5, var1); + this.boosters[2][1].setRotationPoint(0F, 24F, 0F); + this.boosters[2][1].setTextureSize(256, 256); + this.boosters[2][1].mirror = true; + this.setStartingAngles(this.boosters[2][1], 0F, halfPI, 0F); + this.boosters[2][2] = new ModelRenderer(this, 154, 0); + this.boosters[2][2].addBox(-14.4F, -13F, -2F, 4, 2, 4, var1); + this.boosters[2][2].setRotationPoint(0F, 24F, 0F); + this.boosters[2][2].setTextureSize(256, 256); + this.boosters[2][2].mirror = true; + this.setStartingAngles(this.boosters[2][2], 0F, halfPI, 0F); + + this.boosters[3][0] = new ModelRenderer(this, 154, 19); + this.boosters[3][0].addBox(-10.9F, -10F, -0.5F, 3, 5, 1, var1); + this.boosters[3][0].setRotationPoint(0F, 24F, 0F); + this.boosters[3][0].setTextureSize(256, 256); + this.boosters[3][0].mirror = true; + this.setStartingAngles(this.boosters[3][0], 0F, fullPI, 0F); + this.boosters[3][1] = new ModelRenderer(this, 154, 6); + this.boosters[3][1].addBox(-14.9F, -11F, -2.5F, 5, 8, 5, var1); + this.boosters[3][1].setRotationPoint(0F, 24F, 0F); + this.boosters[3][1].setTextureSize(256, 256); + this.boosters[3][1].mirror = true; + this.setStartingAngles(this.boosters[3][1], 0F, fullPI, 0F); + this.boosters[3][2] = new ModelRenderer(this, 154, 0); + this.boosters[3][2].addBox(-14.4F, -13F, -2F, 4, 2, 4, var1); + this.boosters[3][2].setRotationPoint(0F, 24F, 0F); + this.boosters[3][2].setTextureSize(256, 256); + this.boosters[3][2].mirror = true; + this.setStartingAngles(this.boosters[3][2], 0F, fullPI, 0F); + } + + @Override + public void render(Entity entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + for (final ModelRenderer model : this.inside) + { + model.render(par7); + } + + for (final ModelRenderer model : this.top) + { + model.render(par7); + } + + for (final ModelRenderer model : this.base) + { + model.render(par7); + } + + for (final ModelRenderer model : this.sides) + { + model.render(par7); + } + + int var1 = 0; + int var2 = 0; + + for (var1 = 0; var1 < this.fins.length; var1++) + { + for (var2 = 0; var2 < this.fins[var1].length; var2++) + { + this.fins[var1][var2].render(par7); + } + } + + for (var1 = 0; var1 < this.boosters.length; var1++) + { + for (var2 = 0; var2 < this.boosters[var1].length; var2++) + { + this.boosters[var1][var2].render(par7); + } + } + } + + private void setStartingAngles(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity entity) + { + super.setRotationAngles(par1, par2, par3, par4, par5, par6, entity); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCargoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCargoRocket.java new file mode 100644 index 00000000..bef60b51 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCargoRocket.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderCargoRocket extends Render +{ + + private ItemModelCargoRocket rocketModel; + + public RenderCargoRocket(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 0.5F; + } + + private void updateModel() + { + if (this.rocketModel == null) + { + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "rocket_cargo", "inventory"); + this.rocketModel = (ItemModelCargoRocket) FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().getModelManager().getModel(modelResourceLocation); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityCargoRocket entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityCargoRocket entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y + entity.getRenderOffsetY(), (float) z); + GlStateManager.scale(0.4F, 0.4F, 0.4F); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-pitch, 0.0F, 0.0F, 1.0F); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + this.updateModel(); + ClientUtil.drawBakedModel(this.rocketModel); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityCargoRocket rocket, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = rocket.getEntityBoundingBox(); + return rocket.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCreeperBoss.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCreeperBoss.java new file mode 100644 index 00000000..1b3fd2db --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCreeperBoss.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelCreeperBoss; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class RenderCreeperBoss extends RenderLiving +{ + + private static final ResourceLocation creeperTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/creeper.png"); + private static final ResourceLocation powerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/power.png"); + private final ModelBase creeperModel = new ModelCreeperBoss(2.0F); + + public RenderCreeperBoss(RenderManager renderManager) + { + super(renderManager, new ModelCreeperBoss(), 1.0F); + } + + @Override + protected ResourceLocation getEntityTexture(EntityCreeperBoss entity) + { + return RenderCreeperBoss.creeperTexture; + } + +// protected int func_27006_a(EntityCreeperBoss par1EntityCreeper, int par2, float par3) +// { +// if (par1EntityCreeper.headsRemaining == 1) +// { +// if (par2 == 1) +// { +// final float var4 = par1EntityCreeper.ticksExisted + par3; +// this.bindTexture(RenderCreeperBoss.powerTexture); +// GL11.glMatrixMode(GL11.GL_TEXTURE); +// GL11.glLoadIdentity(); +// final float var5 = var4 * 0.01F; +// final float var6 = var4 * 0.01F; +// GL11.glTranslatef(var5, var6, 0.0F); +// this.setRenderPassModel(this.creeperModel); +// GL11.glMatrixMode(GL11.GL_MODELVIEW); +// GL11.glEnable(GL11.GL_BLEND); +// final float var7 = 0.5F; +// GL11.glColor4f(var7, var7, var7, 1.0F); +// GL11.glDisable(GL11.GL_LIGHTING); +// GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); +// return 1; +// } +// +// if (par2 == 2) +// { +// GL11.glMatrixMode(GL11.GL_TEXTURE); +// GL11.glLoadIdentity(); +// GL11.glMatrixMode(GL11.GL_MODELVIEW); +// GL11.glEnable(GL11.GL_LIGHTING); +// GL11.glDisable(GL11.GL_BLEND); +// } +// } +// +// return -1; +// } + + @Override + protected void preRenderCallback(EntityCreeperBoss par1EntityLiving, float par2) + { + GL11.glScalef(4.0F, 4.0F, 4.0F); + GL11.glRotatef((float) (Math.pow(par1EntityLiving.deathTicks, 2) / 5.0F + (Math.pow(par1EntityLiving.deathTicks, 2) / 5.0F - Math.pow(par1EntityLiving.deathTicks - 1, 2) / 5.0F) * par2), 0.0F, + 1.0F, 0.0F); + } + + @Override + protected int getColorMultiplier(EntityCreeperBoss par1EntityLivingBase, float par2, float par3) + { + return super.getColorMultiplier(par1EntityLivingBase, par2, par3); + } + +// @Override +// protected int shouldRenderPass(EntityLivingBase par1EntityLivingBase, int par2, float par3) +// { +// return this.func_27006_a((EntityCreeperBoss) par1EntityLivingBase, par2, par3); +// } +// +// @Override +// protected int inheritRenderPass(EntityLivingBase par1EntityLivingBase, int par2, float par3) +// { +// return -1; +// } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderLandingBalloons.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderLandingBalloons.java new file mode 100644 index 00000000..26e0adce --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderLandingBalloons.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelBalloonParachute; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderLandingBalloons extends Render +{ + + private IBakedModel balloonModel; + protected ModelBalloonParachute parachuteModel = new ModelBalloonParachute(); + + public RenderLandingBalloons(RenderManager manager) + { + super(manager); + this.shadowSize = 1.2F; + } + + private void updateModels() + { + if (this.balloonModel == null) + { + try + { + this.balloonModel = ClientUtil.modelFromOBJ(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "landing_balloon.obj"), ImmutableList.of("Sphere")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityLandingBalloons entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityLandingBalloons entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y + 0.8F, (float) z); + GlStateManager.rotate(entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(pitch, 0.0F, 0.0F, 1.0F); + + this.updateModels(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + ClientUtil.drawBakedModel(this.balloonModel); + GlStateManager.popMatrix(); + + if (entity.posY >= 500.0F) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x - 1.25F, (float) y - 0.93F, (float) z - 0.3F); + GlStateManager.scale(2.5F, 3.0F, 2.5F); + this.parachuteModel.renderAll(); + GlStateManager.popMatrix(); + } + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityLandingBalloons lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(2D, 1D, 2D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderProjectileTNT.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderProjectileTNT.java new file mode 100644 index 00000000..05ffaea4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderProjectileTNT.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityProjectileTNT; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderProjectileTNT extends Render +{ + + public RenderProjectileTNT(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 0.5F; + } + + @Override + public void doRender(EntityProjectileTNT entity, double x, double y, double z, float par8, float partialTicks) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y + 0.5F, (float) z); + + float f2 = (1.0F - ((float) entity.ticksExisted - partialTicks + 1.0F) / 100.0F) * 0.1F; + this.bindEntityTexture(entity); + GlStateManager.translate(-0.5F, -0.5F, 0.5F); + blockrendererdispatcher.renderBlockBrightness(Blocks.TNT.getDefaultState(), entity.getBrightness()); + GlStateManager.translate(0.0F, 0.0F, 1.0F); + + if (entity.ticksExisted % 2 == 0) + { + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(770, 772); + GlStateManager.color(1.0F, 1.0F, 1.0F, f2); + GlStateManager.doPolygonOffset(-3.0F, -3.0F); + GlStateManager.enablePolygonOffset(); + blockrendererdispatcher.renderBlockBrightness(Blocks.TNT.getDefaultState(), 0.2F); + GlStateManager.doPolygonOffset(0.0F, 0.0F); + GlStateManager.disablePolygonOffset(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + } + + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, par8, partialTicks); + } + + @Override + protected ResourceLocation getEntityTexture(EntityProjectileTNT entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSlimeling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSlimeling.java new file mode 100644 index 00000000..618942bd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSlimeling.java @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderSlimeling extends RenderLiving +{ + + private static final ResourceLocation landerTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/slimeling/green.png"); + private boolean texSwitch; + + public RenderSlimeling(RenderManager renderManager) + { + super(renderManager, new ModelSlimeling(16), 0.5F); + +// this.renderPassModel = new ModelSlimeling(0.0F); + } + + @Override + protected ResourceLocation getEntityTexture(EntitySlimeling par1EntityArrow) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderSlimeling.landerTexture; + } + + @Override + protected void preRenderCallback(EntitySlimeling slimeling, float par2) + { + super.preRenderCallback(slimeling, par2); + + GL11.glRotatef(180.0F, 0F, 1F, 0F); + + GL11.glColor3f(slimeling.getColorRed(), slimeling.getColorGreen(), slimeling.getColorBlue()); + GL11.glScalef(slimeling.getScale(), slimeling.getScale(), slimeling.getScale()); + GL11.glTranslatef(0.0F, 1.10F, 0.0F); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntitySlimeling entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void renderLayers(EntitySlimeling slimeling, float p_177093_2_, float p_177093_3_, float partialTicks, float p_177093_5_, float p_177093_6_, float p_177093_7_, float p_177093_8_) + { + super.renderLayers(slimeling, p_177093_2_, p_177093_3_, partialTicks, p_177093_5_, p_177093_6_, p_177093_7_, p_177093_8_); + + // After rendering the slimeling, reset the color tint to none + GL11.glColor3f(1F, 1F, 1F); + } + +// @Override +// protected int shouldRenderPass(EntityLivingBase par1EntityLivingBase, int par2, float par3) +// { +// if (par1EntityLivingBase.isInvisible()) +// { +// return 0; +// } +// else if (par2 == 0) +// { +// this.setRenderPassModel(this.renderPassModel); +// GL11.glEnable(GL11.GL_NORMALIZE); +// GL11.glEnable(GL11.GL_BLEND); +// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); +// return 1; +// } +// else +// { +// if (par2 == 1) +// { +// GL11.glDisable(GL11.GL_BLEND); +// GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); +// } +// +// return -1; +// } +// } +// +// @Override +// protected void passSpecialRender(EntityLivingBase par1EntityLivingBase, double par2, double par4, double par6) +// { +// Minecraft mc = FMLClientHandler.instance().getClient(); +// +// if (!mc.gameSettings.hideGUI && !par1EntityLivingBase.isInvisible() && (mc.currentScreen == null || !((mc.currentScreen instanceof GuiSlimeling || mc.currentScreen instanceof GuiSlimelingInventory) && GuiSlimeling.renderingOnGui))) +// { +// this.renderLivingLabelWithColor(par1EntityLivingBase, ((EntitySlimeling) par1EntityLivingBase).getName(), par2, par4 + 0.33, par6, 64, 0, 0, 0); +// int health = (int) Math.floor(((EntitySlimeling) par1EntityLivingBase).getHealth() + 0.6D); +// int maxHealth = (int) ((EntitySlimeling) par1EntityLivingBase).getMaxHealth(); +// if (health > maxHealth) +// { +// health = maxHealth; +// } +// float difference = health / (float)maxHealth; +// +// if (difference < 0.33333F) +// { +// this.renderLivingLabelWithColor(par1EntityLivingBase, "" + health + " / " + maxHealth, par2, par4, par6, 64, 1, 0, 0); +// } +// else if (difference < 0.66666F) +// { +// this.renderLivingLabelWithColor(par1EntityLivingBase, "" + health + " / " + maxHealth, par2, par4, par6, 64, 1, 1, 0); +// } +// else +// { +// this.renderLivingLabelWithColor(par1EntityLivingBase, "" + health + " / " + maxHealth, par2, par4, par6, 64, 0, 1, 0); +// } +// } +// +// super.passSpecialRender(par1EntityLivingBase, par2, par4, par6); +// GL11.glDisable(GL11.GL_NORMALIZE); +// GL11.glDisable(GL11.GL_BLEND); +// } +// +// protected void renderLivingLabelWithColor(EntityLivingBase par1EntityLivingBase, String par2Str, double par3, double par5, double par7, int par9, float cR, float cG, float cB) +// { +// double d3 = par1EntityLivingBase.getDistanceSq(this.renderManager.livingPlayer); +// +// if (d3 <= par9 * par9) +// { +// FontRenderer fontrenderer = this.getFontRendererFromRenderManager(); +// float f = 1.6F; +// float f1 = 0.016666668F * f; +// GL11.glPushMatrix(); +// GL11.glTranslatef((float) par3 + 0.0F, (float) par5 + par1EntityLivingBase.height + 0.55F, (float) par7); +// GL11.glNormal3f(0.0F, 1.0F, 0.0F); +// GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); +// GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); +// GL11.glScalef(-f1, -f1, f1); +// GL11.glDisable(GL11.GL_LIGHTING); +// GL11.glDepthMask(false); +// GL11.glDisable(GL11.GL_DEPTH_TEST); +// GL11.glEnable(GL11.GL_BLEND); +// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); +// Tessellator tessellator = Tessellator.instance; +// byte b0 = 0; +// +// if (par2Str.equals("deadmau5")) +// { +// b0 = -10; +// } +// +// GL11.glDisable(GL11.GL_TEXTURE_2D); +// tessellator.startDrawingQuads(); +// int j = fontrenderer.getStringWidth(par2Str) / 2; +// tessellator.setColorRGBA_F(cR, cG, cB, 0.25F); +// tessellator.addVertex(-j - 1, -1 + b0, 0.0D); +// tessellator.addVertex(-j - 1, 8 + b0, 0.0D); +// tessellator.addVertex(j + 1, 8 + b0, 0.0D); +// tessellator.addVertex(j + 1, -1 + b0, 0.0D); +// tessellator.draw(); +// GL11.glEnable(GL11.GL_TEXTURE_2D); +// fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, 553648127); +// GL11.glEnable(GL11.GL_DEPTH_TEST); +// GL11.glDepthMask(true); +// fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, -1); +// GL11.glEnable(GL11.GL_LIGHTING); +// GL11.glDisable(GL11.GL_BLEND); +// GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); +// GL11.glPopMatrix(); +// } +// } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSludgeling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSludgeling.java new file mode 100644 index 00000000..75e93aba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSludgeling.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelSludgeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySludgeling; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSludgeling extends RenderLiving +{ + + private static final ResourceLocation sludgelingTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/sludgeling.png"); + private boolean texSwitch; + + public RenderSludgeling(RenderManager renderManager) + { + super(renderManager, new ModelSludgeling(), 0.3F); + } + + @Override + protected float getDeathMaxRotation(EntitySludgeling par1EntityLiving) + { + return 180.0F; + } + + @Override + public void doRender(EntitySludgeling entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntitySludgeling entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : sludgelingTexture; + } + + @Override + protected void preRenderCallback(EntitySludgeling entity, float par2) + { + super.preRenderCallback(entity, par2); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderTier2Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderTier2Rocket.java new file mode 100644 index 00000000..062efffc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderTier2Rocket.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.render.item.ItemModelRocketT2; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityTier2Rocket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderTier2Rocket extends Render +{ + + private ItemModelRocketT2 rocketModel; + + public RenderTier2Rocket(RenderManager manager) + { + super(manager); + this.shadowSize = 2F; + } + + private void updateModel() + { + if (this.rocketModel == null) + { + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "rocket_t2", "inventory"); + this.rocketModel = (ItemModelRocketT2) FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().getModelManager().getModel(modelResourceLocation); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityTier2Rocket entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityTier2Rocket entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks + 180; + float rollAmplitude = entity.rollAmplitude / 3 - partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-pitch, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, entity.getRenderOffsetY(), 0.0F); + + if (rollAmplitude > 0.0F) + { + final float i = entity.getLaunched() ? (5 - MathHelper.floor(entity.timeUntilLaunch / 85)) / 10F : 0.3F; + GlStateManager.rotate(MathHelper.sin(rollAmplitude) * rollAmplitude * i * partialTicks, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(MathHelper.sin(rollAmplitude) * rollAmplitude * i * partialTicks, 1.0F, 0.0F, 1.0F); + } + + this.updateModel(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.8F, 0.8F, 0.8F); + ClientUtil.drawBakedModel(this.rocketModel); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityTier2Rocket rocket, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = rocket.getEntityBoundingBox().grow(0.6D, 1D, 0.6D); + return rocket.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/item/ItemModelRocketT2.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/item/ItemModelRocketT2.java new file mode 100644 index 00000000..a0bcd4c1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/item/ItemModelRocketT2.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelRocketT2 extends ModelTransformWrapper +{ + public ItemModelRocketT2(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.15F, 0.0F, -0.15F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.6F, -0.7F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + if(!ConfigManagerCore.disableRocketIconRotation) { + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + } + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, 4.2F, -3.6F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-0.65F + Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.0F, -3.9F, 1.45F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 15, 5)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(0.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -2.75F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/tile/TileEntityTreasureChestRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/tile/TileEntityTreasureChestRenderer.java new file mode 100644 index 00000000..bcb26fe2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/tile/TileEntityTreasureChestRenderer.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.tile; + +import micdoodle8.mods.galacticraft.core.client.model.block.ModelTreasureChest; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTreasureChestMars; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@SideOnly(Side.CLIENT) +public class TileEntityTreasureChestRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation treasureChestTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/treasure.png"); + + private final ModelTreasureChest chestModel = new ModelTreasureChest(); + + @Override + public void render(TileEntityTreasureChestMars chest, double x, double y, double z, float par7, int par8, float alpha) + { + int var9; + + if (!chest.hasWorld()) + { + var9 = 0; + } else + { + var9 = chest.getBlockMetadata(); + } + + this.bindTexture(TileEntityTreasureChestRenderer.treasureChestTexture); + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + short var11 = 0; + + if (var9 == 2) + { + var11 = 180; + } + + if (var9 == 3) + { + var11 = 0; + } + + if (var9 == 4) + { + var11 = 90; + } + + if (var9 == 5) + { + var11 = -90; + } + + GL11.glRotatef(var11, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float var12 = chest.prevLidAngle + (chest.lidAngle - chest.prevLidAngle) * par8; + + var12 = 1.0F - var12; + var12 = 1.0F - var12 * var12 * var12; + + this.chestModel.chestLid.rotateAngleX = -(var12 * (float) Math.PI / 4.0F); + this.chestModel.renderAll(!chest.locked); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/TeleportTypeMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/TeleportTypeMars.java new file mode 100644 index 00000000..fcf5018b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/TeleportTypeMars.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.dimension; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +public class TeleportTypeMars implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + double x = stats.getCoordsTeleportedFromX(); + double z = stats.getCoordsTeleportedFromZ(); + int limit = ConfigManagerCore.otherPlanetWorldBorders - 2; + if (limit > 20) + { + if (x > limit) + { + z *= limit / x; + x = limit; + } else if (x < -limit) + { + z *= -limit / x; + x = -limit; + } + if (z > limit) + { + x *= limit / z; + z = limit; + } else if (z < -limit) + { + x *= -limit / z; + z = -limit; + } + } + return new Vector3(x, ConfigManagerCore.disableLander ? 250.0 : 900.0, z); + } + + return null; + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, ConfigManagerCore.disableLander ? 250.0 : 900.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return null; + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + if (!ridingAutoRocket && player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + if (stats.getTeleportCooldown() <= 0) + { + if (player.capabilities.isFlying) + { + player.capabilities.isFlying = false; + } + + EntityLandingBalloons lander = new EntityLandingBalloons(player); + + if (!newWorld.isRemote) + { + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) newWorld); + lander.forceSpawn = true; + newWorld.spawnEntity(lander); + CompatibilityManager.forceLoadChunksEnd((WorldServer) newWorld, previous); + } + + stats.setTeleportCooldown(10); + } + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/WorldProviderMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/WorldProviderMars.java new file mode 100644 index 00000000..4f234017 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/WorldProviderMars.java @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.dimension; + +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.world.gen.ChunkProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.world.gen.RoomTreasureMars; +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class WorldProviderMars extends WorldProviderSpace implements IGalacticraftWorldProvider, ISolarLevel +{ + + private double solarMultiplier = -1D; + + @Override + public Vector3 getFogColor() + { + float f = 1.0F - this.getStarBrightness(1.0F); + return new Vector3(210F / 255F * f, 120F / 255F * f, 59F / 255F * f); + } + + @Override + public Vector3 getSkyColor() + { + float f = 1.0F - this.getStarBrightness(1.0F); + return new Vector3(154 / 255.0F * f, 114 / 255.0F * f, 66 / 255.0F * f); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 24660L; + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderMars.class; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + float f1 = this.world.getCelestialAngle(par1); + float f2 = 1.0F - (MathHelper.cos(f1 * Constants.twoPI) * 2.0F + 0.25F); + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + return f2 * f2 * 0.75F; + } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 76; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + + // Overriding so that beds do not explode on Mars + @Override + public boolean canRespawnHere() + { + if (EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = false; + return true; + } + return false; + } + + @Override + public float getGravity() + { + return 0.058F; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.9D; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier >= 2; + } + + @Override + public float getFallDamageModifier() + { + return 0.38F; + } + + @Override + public CelestialBody getCelestialBody() + { + return MarsModule.planetMars; + } + + @Override + public double getSolarEnergyMultiplier() + { + if (this.solarMultiplier < 0D) + { + double s = this.getSolarSize(); + this.solarMultiplier = s * s * s; + } + return this.solarMultiplier; + } + + @Override + public int getDungeonSpacing() + { + return 704; + } + + @Override + public DimensionType getDimensionType() + { + return GCPlanetDimensions.MARS; + } + + @Override + public float getArrowGravity() + { + return 0.015F; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasureMars.MARSCHEST; + } + + @Override + public List getSurfaceBlocks() + { + List list = new LinkedList<>(); + list.add(MarsBlocks.marsBlock); + return list; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCargoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCargoRocket.java new file mode 100644 index 00000000..4a2670be --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCargoRocket.java @@ -0,0 +1,411 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.entity.IWorldTransferCallback; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.util.MarsUtil; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; + +public class EntityCargoRocket extends EntityAutoRocket implements IRocketType, IInventory, IWorldTransferCallback +{ + + public EnumRocketType rocketType; + public float rumble; + + public EntityCargoRocket(World par1World) + { + super(par1World); + this.setSize(0.98F, 2F); + } + + public EntityCargoRocket(World par1World, double par2, double par4, double par6, EnumRocketType rocketType) + { + super(par1World, par2, par4, par6); + this.rocketType = rocketType; + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + this.setSize(0.98F, 2F); + } + + @Override + public int getFuelTankCapacity() + { + return 2000; + } + + public float getCargoFilledAmount() + { + float weight = 1; + + for (ItemStack stack : this.stacks) + { + if (stack != null && !stack.isEmpty()) + { + weight += 0.1D; + } + } + + return weight; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(MarsItems.rocketMars, 1, this.rocketType.getIndex() + 10); + } + + @Override + public void onUpdate() + { + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal() && this.hasValidFuel()) + { + double motionScalar = this.timeSinceLaunch / 250; + + motionScalar = Math.min(motionScalar, 1); + + double modifier = this.getCargoFilledAmount(); + motionScalar *= 5.0D / modifier; + + if (this.launchPhase != EnumLaunchPhase.LANDING.ordinal()) + { + if (motionScalar != 0.0) + { + this.motionY = -motionScalar * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + } + } + + double multiplier = 1.0D; + + if (this.world.provider instanceof IGalacticraftWorldProvider) + { + multiplier = ((IGalacticraftWorldProvider) this.world.provider).getFuelUsageMultiplier(); + + if (multiplier <= 0) + { + multiplier = 1; + } + } + + if (this.timeSinceLaunch % MathHelper.floor(3 * (1 / multiplier)) == 0) + { + this.removeFuel(1); + if (!this.hasValidFuel()) + { + this.stopRocketSound(); + } + } + } else if (!this.hasValidFuel() && this.getLaunched()) + { + if (Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 10 != 0.0) + { + this.motionY -= Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 20; + } + } + + super.onUpdate(); + + if (this.rumble > 0) + { + this.rumble--; + } + + if (this.rumble < 0) + { + this.rumble++; + } + + if (this.launchPhase >= EnumLaunchPhase.IGNITED.ordinal()) + { + this.performHurtAnimation(); + + this.rumble = (float) this.rand.nextInt(3) - 3; + } + + int i; + + if (this.timeUntilLaunch >= 100) + { + i = Math.abs(this.timeUntilLaunch / 100); + } else + { + i = 1; + } + + if ((this.getLaunched() || this.launchPhase == EnumLaunchPhase.IGNITED.ordinal() && this.rand.nextInt(i) == 0) && !ConfigManagerCore.disableSpaceshipParticles && this.hasValidFuel()) + { + if (this.world.isRemote) + { + this.spawnParticles(this.getLaunched()); + } + } + } + + @Override + protected boolean shouldMoveClientSide() + { + return true; + } + + protected void spawnParticles(boolean launched) + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double x1 = 2 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double z1 = 2 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double y1 = 2 * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null) + { + double modifier = this.posY - this.targetVec.getY(); + modifier = Math.max(modifier, 1.0); + x1 *= modifier / 60.0D; + y1 *= modifier / 60.0D; + z1 *= modifier / 60.0D; + } + + final double y = this.prevPosY + (this.posY - this.prevPosY) - 0.4; + + if (!this.isDead) + { + EntityLivingBase riddenByEntity = this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof EntityLivingBase) ? null : (EntityLivingBase) this.getPassengers().get(0); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", + new Vector3(this.posX + 0.2 - this.rand.nextDouble() / 10 + x1, y, this.posZ + 0.2 - this.rand.nextDouble() / 10 + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", + new Vector3(this.posX - 0.2 + this.rand.nextDouble() / 10 + x1, y, this.posZ + 0.2 - this.rand.nextDouble() / 10 + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", + new Vector3(this.posX - 0.2 + this.rand.nextDouble() / 10 + x1, y, this.posZ - 0.2 + this.rand.nextDouble() / 10 + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", + new Vector3(this.posX + 0.2 - this.rand.nextDouble() / 10 + x1, y, this.posZ - 0.2 + this.rand.nextDouble() / 10 + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX + x1, y, this.posZ + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX + 0.2 + x1, y, this.posZ + z1), new Vector3(x1, y1, z1), + new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX - 0.2 + x1, y, this.posZ + z1), new Vector3(x1, y1, z1), + new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX + x1, y, this.posZ + 0.2D + z1), new Vector3(x1, y1, z1), + new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX + x1, y, this.posZ - 0.2D + z1), new Vector3(x1, y1, z1), + new Object[] + {riddenByEntity}); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.rocketType = EnumRocketType.values()[buffer.readInt()]; + super.decodePacketdata(buffer); + this.posX = buffer.readDouble() / 8000.0D; + this.posY = buffer.readDouble() / 8000.0D; + this.posZ = buffer.readDouble() / 8000.0D; + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + return; + } + list.add(this.rocketType != null ? this.rocketType.getIndex() : 0); + super.getNetworkedData(list); + list.add(this.posX * 8000.0D); + list.add(this.posY * 8000.0D); + list.add(this.posZ * 8000.0D); + } + + @Override + public void onReachAtmosphere() + { + if (this.world.isRemote) + { + // stop the sounds on the client - but do not reset, the rocket may + // start again + this.stopRocketSound(); + return; + } + + GalacticraftPlanets.logger.debug("[Serverside] Cargo rocket reached space, heading to " + this.destinationFrequency); + this.setTarget(true, this.destinationFrequency); + + if (this.targetVec != null) + { + GalacticraftPlanets.logger.debug("Destination location = " + this.targetVec.toString()); + if (this.targetDimension != GCCoreUtil.getDimensionID(this.world)) + { + GalacticraftPlanets.logger.debug("Destination is in different dimension: " + this.targetDimension); + WorldProvider targetDim = WorldUtil.getProviderForDimensionServer(this.targetDimension); + if (targetDim != null && targetDim.world instanceof WorldServer) + { + GalacticraftPlanets.logger.debug("Loaded destination dimension " + this.targetDimension); + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + Entity e = WorldUtil.transferEntityToDimension(this, this.targetDimension, (WorldServer) targetDim.world, false, null); + + if (e instanceof EntityCargoRocket) + { + GalacticraftPlanets.logger.debug("Cargo rocket arrived at destination dimension, going into landing mode."); + e.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + ((EntityCargoRocket) e).setLaunchPhase(EnumLaunchPhase.LANDING); + // No setDead() following successful + // transferEntityToDimension() - see javadoc on that + } else + { + GalacticraftPlanets.logger.info("Error: failed to recreate the cargo rocket in landing mode on target planet."); + e.setDead(); + this.setDead(); + } + return; + } + GalacticraftPlanets.logger.info("Error: the server failed to load the dimension the cargo rocket is supposed to land in. Destroying rocket!"); + this.setDead(); + return; + } else + { + GalacticraftPlanets.logger.debug("Cargo rocket going into landing mode in same destination."); + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + this.setLaunchPhase(EnumLaunchPhase.LANDING); + return; + } + } else + { + GalacticraftPlanets.logger.info("Error: the cargo rocket failed to find a valid landing spot when it reached space."); + this.setDead(); + } + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (!this.world.isRemote && player instanceof EntityPlayerMP) + { + MarsUtil.openCargoRocketInventory((EntityPlayerMP) player, this); + } + + return false; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("Type", this.rocketType.getIndex()); + + super.writeEntityToNBT(nbt); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.rocketType = EnumRocketType.values()[nbt.getInteger("Type")]; + + super.readEntityFromNBT(nbt); + } + + @Override + public EnumRocketType getType() + { + return this.rocketType; + } + + @Override + public int getSizeInventory() + { + if (this.rocketType == null) + { + return 0; + } + return this.rocketType.getInventorySpace(); + } + + @Override + public void onWorldTransferred(World world) + { + if (this.targetVec != null) + { + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + this.setLaunchPhase(EnumLaunchPhase.LANDING); + } else + { + this.setDead(); + } + } + + @Override + public int getRocketTier() + { + return Integer.MAX_VALUE; + } + + @Override + public int getPreLaunchWait() + { + return 20; + } + + @Override + public List getItemsDropped(List droppedItemList) + { + super.getItemsDropped(droppedItemList); + ItemStack rocket = new ItemStack(MarsItems.rocketMars, 1, this.rocketType.getIndex() + 10); + rocket.setTagCompound(new NBTTagCompound()); + rocket.getTagCompound().setInteger("RocketFuel", this.fuelTank.getFluidAmount()); + droppedItemList.add(rocket); + return droppedItemList; + } + + @Override + public boolean isPlayerRocket() + { + return false; + } + + @Override + public double getOnPadYOffset() + { + return -0.05D; + } + + @Override + public float getRenderOffsetY() + { + return -0.1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCreeperBoss.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCreeperBoss.java new file mode 100644 index 00000000..c996c58f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCreeperBoss.java @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.entities.EntityAIArrowAttack; +import micdoodle8.mods.galacticraft.core.entities.EntityBossBase; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BossInfo; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; + +public class EntityCreeperBoss extends EntityBossBase implements IEntityBreathable, IRangedAttackMob +{ + + protected long ticks = 0; + public int headsRemaining = 3; + private Entity targetEntity; + + public EntityCreeperBoss(World par1World) + { + super(par1World); + this.setSize(2.0F, 7.0F); + this.isImmuneToFire = true; + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIArrowAttack(this, 1.0D, 25, 20.0F)); + this.tasks.addTask(2, new EntityAIWander(this, 1.0D)); + this.tasks.addTask(3, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(3, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, 0, true, false, null)); + } + + @Override + public boolean attackEntityFrom(DamageSource damageSource, float damage) + { + if (damageSource.getDamageType().equals("fireball")) + { + if (this.isEntityInvulnerable(damageSource)) + { + return false; + } else if (super.attackEntityFrom(damageSource, damage)) + { + Entity entity = damageSource.getTrueSource(); + + if (this.getPassengers().contains(entity) && this.getRidingEntity() != entity) + { + if (entity != this && entity instanceof EntityLivingBase) + { + this.setAttackTarget((EntityLivingBase) entity); + } + + return true; + } else + { + return true; + } + } else + { + return false; + } + } + + return false; + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(200.0F * ConfigManagerCore.dungeonBossHealthMod); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.05F); + } + + @Override + public void knockBack(Entity par1Entity, float par2, double par3, double par5) + { + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + protected SoundEvent getAmbientSound() + { + return null; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + this.playSound(GCSounds.bossOuch, this.getSoundVolume(), this.getSoundPitch() - 0.15F); + return null; + } + + @Override + protected SoundEvent getDeathSound() + { + return null; + } + + // @Override +// protected String getHurtSound() +// { +// this.playSound(Constants.TEXTURE_PREFIX + "entity.ouch", this.getSoundVolume(), this.getSoundPitch() - 0.15F); +// return null; +// } +// +// @Override +// protected String getDeathSound() +// { +// return null; +// } + + @Override + protected void onDeathUpdate() + { + super.onDeathUpdate(); + + if (!this.world.isRemote) + { + if (this.deathTicks == 1) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_PLAY_SOUND_BOSS_DEATH, GCCoreUtil.getDimensionID(this.world), new Object[] + {getSoundPitch() - 0.1F}), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + } + } + } + + @Override + public void onLivingUpdate() + { + this.ticks++; + + if (this.getHealth() <= 0) + { + this.headsRemaining = 0; + } else if (this.getHealth() <= this.getMaxHealth() / 3.0) + { + this.headsRemaining = 1; + } else if (this.getHealth() <= 2 * (this.getMaxHealth() / 3.0)) + { + this.headsRemaining = 2; + } + + final EntityPlayer player = this.world.getClosestPlayer(this.posX, this.posY, this.posZ, 20.0, false); + + if (player != null && !player.equals(this.targetEntity)) + { + if (this.getDistanceSq(player) < 400.0D) + { + this.getNavigator().getPathToEntityLiving(player); + this.targetEntity = player; + } + } else + { + this.targetEntity = null; + } + + super.onLivingUpdate(); + } + + @Override + protected Item getDropItem() + { + return Items.ARROW; + } + + @Override + public EntityItem entityDropItem(ItemStack par1ItemStack, float par2) + { + final EntityItem entityitem = new EntityItem(this.world, this.posX, this.posY + par2, this.posZ, par1ItemStack); + entityitem.motionY = -2.0D; + entityitem.setDefaultPickupDelay(); + if (this.captureDrops) + { + this.capturedDrops.add(entityitem); + } else + { + this.world.spawnEntity(entityitem); + } + return entityitem; + } + + @Override + protected void dropFewItems(boolean b, int i) + { + if (this.rand.nextInt(200) - i >= 5) + { + return; + } + + if (i > 0) + { + final ItemStack var2 = new ItemStack(Items.BOW); + EnchantmentHelper.addRandomEnchantment(this.rand, var2, 5, false); + this.entityDropItem(var2, 0.0F); + } else + { + this.dropItem(Items.BOW, 1); + } + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public ItemStack getGuaranteedLoot(Random rand) + { + List stackList = new LinkedList<>(); + stackList.addAll(GalacticraftRegistry.getDungeonLoot(2)); + boolean hasT3Rocket = false; + boolean hasAstroMiner = false; + // Check if player seems to have Tier 3 rocket or Astro Miner already - + // in that case we don't want more + // (we don't really want him giving powerful schematics to his friends + // who are still on Overworld) + final EntityPlayer player = this.world.getClosestPlayer(this.posX, this.posY, this.posZ, 20.0, false); + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + if (stats != null) + { + for (ISchematicPage page : stats.getUnlockedSchematics()) + { + if (page.getPageID() == ConfigManagerAsteroids.idSchematicRocketT3) + { + hasT3Rocket = true; + } else if (page.getPageID() == ConfigManagerAsteroids.idSchematicRocketT3 + 1) + { + hasAstroMiner = true; + } + } + } + } + // The following code assumes the list start is hard coded to: Cargo + // Rocket, T3 Rocket, Astro Miner in that order + // (see MarsModule.init()) + // + // Remove schematics which he already has + if (hasT3Rocket && hasAstroMiner) + { + // (but do not remove both, otherwise the list is too short) + if (stackList.size() == 3) + { + stackList.remove(1 + rand.nextInt(2)); + } else + { + stackList.remove(2); + stackList.remove(1); + } + } else if (hasT3Rocket) + { + stackList.remove(1); + } else if (hasAstroMiner) + { + stackList.remove(2); + } + // If he does not yet have the T3 rocket, limit the list size to 2 so + // 50% chance of getting it + // otherwise return the full list (note: addons could have added more + // schematics to the list) + int range = (!hasT3Rocket) ? 2 : stackList.size(); + return stackList.get(rand.nextInt(range)).copy(); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase entitylivingbase, float f) + { + this.world.playEvent(null, 1024, new BlockPos(this), 0); + double d3 = this.posX; + double d4 = this.posY + 5.5D; + double d5 = this.posZ; + double d6 = entitylivingbase.posX - d3; + double d7 = entitylivingbase.posY + entitylivingbase.getEyeHeight() * 0.5D - d4; + double d8 = entitylivingbase.posZ - d5; + EntityProjectileTNT projectileTNT = new EntityProjectileTNT(this.world, this, d6 * 0.5D, d7 * 0.5D, d8 * 0.5D); + + projectileTNT.posY = d4; + projectileTNT.posX = d3; + projectileTNT.posZ = d5; + this.world.spawnEntity(projectileTNT); + } + + @Override + public int getChestTier() + { + return 2; + } + + @Override + public void dropKey() + { + this.entityDropItem(new ItemStack(MarsItems.key, 1, 0), 0.5F); + } + + @Override + public BossInfo.Color getHealthBarColor() + { + return BossInfo.Color.YELLOW; + } + + @Override + public void setSwingingArms(boolean swingingArms) + { + } + + @Override + public void onKillCommand() + { + this.setHealth(0.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityLandingBalloons.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityLandingBalloons.java new file mode 100644 index 00000000..6310328f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityLandingBalloons.java @@ -0,0 +1,346 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.Map; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.util.MarsUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityLandingBalloons extends EntityLanderBase implements IIgnoreShift, ICameraZoomEntity +{ + + private int groundHitCount; + private float rotationPitchSpeed; + private float rotationYawSpeed; + + public EntityLandingBalloons(World world) + { + super(world); + this.setSize(2.0F, 2.0F); + this.rotationPitchSpeed = this.rand.nextFloat(); + this.rotationYawSpeed = this.rand.nextFloat(); + } + + public EntityLandingBalloons(EntityPlayerMP player) + { + super(player, 0F); + this.setSize(2.0F, 2.0F); + } + + @Override + public double getMountedYOffset() + { + return super.getMountedYOffset() - 0.9; + } + + @Override + public float getRotateOffset() + { + // Signal no rotate + return -20.0F; + } + + @Override + public void onUpdate() + { + if (!this.getPassengers().isEmpty()) + { + for (Entity entity : this.getPassengers()) + { + entity.onGround = false; + } + } + + super.onUpdate(); + + if (!this.getPassengers().isEmpty()) + { + for (Entity entity : this.getPassengers()) + { + entity.onGround = false; + } + } + + if (!this.onGround) + { + this.rotationPitch += this.rotationPitchSpeed; + this.rotationYaw += this.rotationYawSpeed; + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + this.groundHitCount = nbt.getInteger("GroundHitCount"); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + nbt.setInteger("GroundHitCount", this.groundHitCount); + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.mars_lander.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + + return true; + } else if (this.getPassengers().isEmpty() && this.groundHitCount >= 14 && player instanceof EntityPlayerMP) + { + MarsUtil.openParachestInventory((EntityPlayerMP) player, this); + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + return true; + } else + { + return true; + } + } + + @Override + public boolean pressKey(int key) + { + if (this.onGround) + { + return false; + } + +// switch (key) +// { +// case 0: // Accelerate +// { +// this.rotationPitchSpeed -= 0.5F * TURN_FACTOR; +// return true; +// } +// case 1: // Deccelerate +// { +// this.rotationPitchSpeed += 0.5F * TURN_FACTOR; +// return true; +// } +// case 2: // Left +// this.rotationYawSpeed -= 0.5F * TURN_FACTOR; +// return true; +// case 3: // Right +// this.rotationYawSpeed += 0.5F * TURN_FACTOR; +// return true; +// } + + return false; + } + + @Override + public boolean shouldMove() + { + if (this.ticks < 40 || !this.hasReceivedPacket) + { + return false; + } + + return ((!this.getPassengers().isEmpty() && this.groundHitCount < 14) || !this.onGround); + } + + @Override + public boolean shouldSpawnParticles() + { + return false; + } + + @Override + public Map getParticleMap() + { + return null; + } + + @SideOnly(Side.CLIENT) + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + return null; + } + + @Override + public void tickInAir() + { + if (this.world.isRemote) + { + if (this.groundHitCount == 0) + { + this.motionY = -this.posY / 50.0D; + } else if (this.groundHitCount < 14 || this.shouldMove()) + { + this.motionY *= 0.95D; + this.motionY -= 0.08D; + } else + { + if (!this.shouldMove()) + { + this.motionY = this.motionX = this.motionZ = this.rotationPitchSpeed = this.rotationYawSpeed = 0.0F; + } + } + } + } + + @Override + public void tickOnGround() + { + } + + @Override + public void onGroundHit() + { + } + + @Override + public Vector3 getMotionVec() + { + if (this.onGround) + { + if (this.groundHitCount < 14) + { + this.groundHitCount++; + double mag = (1.0D / this.groundHitCount) * 4.0D; + double mX = this.rand.nextDouble() - 0.5; + double mY = 1.0D; + double mZ = this.rand.nextDouble() - 0.5; + mX *= mag / 3.0D; + mY *= mag; + mZ *= mag / 3.0D; + return new Vector3(mX, mY, mZ); + } + } + + if (this.ticks >= 40 && this.ticks < 45) + { + this.motionY = this.getInitialMotionY(); + } + + if (!this.shouldMove()) + { + return new Vector3(0, 0, 0); + } + + return new Vector3(this.motionX, this.ticks < 40 ? 0 : this.motionY, this.motionZ); + } + + @Override + public ArrayList getNetworkedData() + { + ArrayList objList = new ArrayList(); + objList.addAll(super.getNetworkedData()); + if ((this.world.isRemote && this.hasReceivedPacket && this.groundHitCount <= 14) || (!this.world.isRemote && this.groundHitCount == 14)) + { + objList.add(this.groundHitCount); + } + return objList; + } + + @Override + public int getPacketTickSpacing() + { + return 5; + } + + @Override + public double getPacketSendDistance() + { + return 50.0D; + } + + @Override + public void readNetworkedData(ByteBuf buffer) + { + try + { + super.readNetworkedData(buffer); + + if (buffer.readableBytes() > 0) + { + this.groundHitCount = buffer.readInt(); + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + @Override + public boolean allowDamageSource(DamageSource damageSource) + { + return this.groundHitCount > 0 && super.allowDamageSource(damageSource); + } + + @Override + public double getInitialMotionY() + { + return 0; + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return this.groundHitCount < 14 || !this.onGround; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityProjectileTNT.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityProjectileTNT.java new file mode 100644 index 00000000..6ff9abf9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityProjectileTNT.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.projectile.EntityFireball; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityProjectileTNT extends EntityFireball +{ + + public EntityProjectileTNT(World par1World) + { + super(par1World); + this.setSize(1.0F, 1.0F); + } + + public EntityProjectileTNT(World par1World, EntityLivingBase par2EntityLivingBase, double par3, double par5, double par7) + { + super(par1World, par2EntityLivingBase, par3, par5, par7); + this.setSize(1.0F, 1.0F); + } + + @SideOnly(Side.CLIENT) + public EntityProjectileTNT(World par1World, double par2, double par4, double par6, double par8, double par10, double par12) + { + super(par1World, par2, par4, par6, par8, par10, par12); + this.setSize(0.3125F, 0.3125F); + } + + @Override + public boolean isBurning() + { + return false; + } + + @Override + protected void onImpact(RayTraceResult movingObjectPosition) + { + if (!this.world.isRemote) + { + if (movingObjectPosition.entityHit != null && !(movingObjectPosition.entityHit instanceof EntityCreeper)) + { + float difficulty = 0; + switch (this.world.getDifficulty()) + { + case HARD: + difficulty = 2F; + break; + case NORMAL: + difficulty = 1F; + break; + } + movingObjectPosition.entityHit.attackEntityFrom(DamageSource.causeFireballDamage(this, this.shootingEntity), 6.0F + 3.0F * difficulty); + } + + this.world.newExplosion((Entity) null, this.posX, this.posY, this.posZ, 1.0F, false, this.world.getGameRules().getBoolean("mobGriefing")); + this.setDead(); + } + } + + @Override + public boolean canBeCollidedWith() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySlimeling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySlimeling.java new file mode 100644 index 00000000..1e77da52 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySlimeling.java @@ -0,0 +1,801 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import java.util.UUID; +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.mars.MarsModuleClient; +import micdoodle8.mods.galacticraft.planets.mars.inventory.InventorySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIFollowOwner; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILeapAtTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; +import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; +import net.minecraft.entity.ai.EntityAISit; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITargetNonTamed; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; + +public class EntitySlimeling extends EntityTameable implements IEntityBreathable +{ + + public InventorySlimeling slimelingInventory = new InventorySlimeling(this); + + private static final DataParameter HEALTH = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter COLOR_RED = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter COLOR_GREEN = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter COLOR_BLUE = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter AGE = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.VARINT); + private static final DataParameter NAME = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.STRING); + private static final DataParameter FAV_FOOD_ID = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.VARINT); + private static final DataParameter ATTACK_DAMAGE = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter KILLS = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.VARINT); + private static final DataParameter OWNER_USERNAME = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.STRING); + + public float colorRed; + public float colorGreen; + public float colorBlue; + public long ticksAlive; + public int age = 0; + public final int MAX_AGE = 100000; + public String slimelingName = GCCoreUtil.translate("gui.message.unnamed.name"); + public int favFoodID = 1; + public float attackDamage = 0.05F; + public int kills; + + public EntitySlimeling(World par1World) + { + super(par1World); + this.setSize(0.45F, 0.7F); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.aiSit = new EntityAISitGC(this); + this.tasks.addTask(2, this.aiSit); + this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F)); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, true)); + this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); + this.tasks.addTask(6, new EntityAIMate(this, 1.0D)); + this.tasks.addTask(7, new EntityAIWander(this, 1.0D)); + this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(9, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); + this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); + this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); + this.targetTasks.addTask(4, new EntityAITargetNonTamed(this, EntitySludgeling.class, false, p_apply_1_ -> p_apply_1_ instanceof EntitySludgeling)); + this.setTamed(false); + + switch (this.rand.nextInt(3)) + { + case 0: + this.colorRed = 1.0F; + break; + case 1: + this.colorBlue = 1.0F; + break; + case 2: + this.colorRed = 1.0F; + this.colorGreen = 1.0F; + break; + } + + this.setRandomFavFood(); + } + + @Override + public EntityLivingBase getOwner() + { + EntityLivingBase owner = super.getOwner(); + if (owner == null) + { + String ownerName = getOwnerUsername(); + if (ownerName != null) + { + return this.world.getPlayerEntityByName(ownerName); + } + } + return owner; + } + + @Override + public boolean isOwner(EntityLivingBase entityLivingBase) + { + return entityLivingBase == this.getOwner(); + } + + @Override + public boolean canBreatheUnderwater() + { + return true; + } + + public float getSlimelingSize() + { + return this.getScale() * 2.0F; + } + + @Override + public void setScaleForAge(boolean par1) + { + this.setScale(this.getSlimelingSize()); + } + + @Override + public boolean isChild() + { + return this.getAge() / (float) this.MAX_AGE < 0.33F; + } + + private void setRandomFavFood() + { + switch (this.rand.nextInt(10)) + { + case 0: + this.favFoodID = Item.getIdFromItem(Items.GOLD_INGOT); + break; + case 1: + this.favFoodID = Item.getIdFromItem(Items.FLINT_AND_STEEL); + break; + case 2: + this.favFoodID = Item.getIdFromItem(Items.BAKED_POTATO); + break; + case 3: + this.favFoodID = Item.getIdFromItem(Items.STONE_SWORD); + break; + case 4: + this.favFoodID = Item.getIdFromItem(Items.GUNPOWDER); + break; + case 5: + this.favFoodID = Item.getIdFromItem(Items.WOODEN_HOE); + break; + case 6: + this.favFoodID = Item.getIdFromItem(Items.EMERALD); + break; + case 7: + this.favFoodID = Item.getIdFromItem(Items.FISH); + break; + case 8: + this.favFoodID = Item.getIdFromItem(Items.REPEATER); + break; + case 9: + this.favFoodID = Item.getIdFromItem(Items.BOAT); + break; + } + } + + public EntitySlimeling(World par1World, float red, float green, float blue) + { + this(par1World); + this.colorRed = red; + this.colorGreen = green; + this.colorBlue = blue; + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(this.getMaxHealthSlimeling()); + } + +// @Override +// public boolean isAIEnabled() +// { +// return true; +// } + + @Override + protected void updateAITasks() + { + this.dataManager.set(HEALTH, this.getHealth()); + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(HEALTH, this.getHealth()); + this.dataManager.register(COLOR_RED, this.colorRed); + this.dataManager.register(COLOR_GREEN, this.colorGreen); + this.dataManager.register(COLOR_BLUE, this.colorBlue); + this.dataManager.register(AGE, this.age); + this.dataManager.register(NAME, ""); + this.dataManager.register(FAV_FOOD_ID, this.favFoodID); + this.dataManager.register(ATTACK_DAMAGE, this.attackDamage); + this.dataManager.register(KILLS, this.kills); + this.dataManager.register(OWNER_USERNAME, ""); + this.setName(GCCoreUtil.translate("gui.message.unnamed.name")); + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + nbt.setTag("SlimelingInventory", this.slimelingInventory.writeToNBT(new NBTTagList())); + nbt.setFloat("SlimeRed", this.colorRed); + nbt.setFloat("SlimeGreen", this.colorGreen); + nbt.setFloat("SlimeBlue", this.colorBlue); + nbt.setInteger("SlimelingAge", this.age); + nbt.setString("SlimelingName", this.slimelingName); + nbt.setInteger("FavFoodID", this.favFoodID); + nbt.setFloat("SlimelingDamage", this.attackDamage); + nbt.setInteger("SlimelingKills", this.kills); + nbt.setString("OwnerUsername", this.getOwnerUsername()); + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + this.slimelingInventory.readFromNBT(nbt.getTagList("SlimelingInventory", 10)); + this.colorRed = nbt.getFloat("SlimeRed"); + this.colorGreen = nbt.getFloat("SlimeGreen"); + this.colorBlue = nbt.getFloat("SlimeBlue"); + this.age = nbt.getInteger("SlimelingAge"); + this.slimelingName = nbt.getString("SlimelingName"); + this.favFoodID = nbt.getInteger("FavFoodID"); + this.attackDamage = nbt.getFloat("SlimelingDamage"); + this.kills = nbt.getInteger("SlimelingKills"); + this.setOwnerUsername(nbt.getString("OwnerUsername")); + this.setColorRed(this.colorRed); + this.setColorGreen(this.colorGreen); + this.setColorBlue(this.colorBlue); + this.setAge(this.age); + this.setName(this.slimelingName); + this.setKillCount(this.kills); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + this.playSound(SoundEvents.BLOCK_SLIME_STEP, this.getSoundVolume(), 1.1F); + return null; + } + + @Override + protected SoundEvent getDeathSound() + { + this.playSound(GCSounds.slimeDeath, this.getSoundVolume(), 0.8F); + return null; + } + + @Override + protected Item getDropItem() + { + return Items.SLIME_BALL; + } + + @Override + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (!this.world.isRemote) + { + if (this.ticksAlive <= 0) + { + this.setColorRed(this.colorRed); + this.setColorGreen(this.colorGreen); + this.setColorBlue(this.colorBlue); + } + + this.ticksAlive++; + + if (this.ticksAlive % 2 == 0) + { + if (this.age < this.MAX_AGE) + { + this.age++; + } + + this.setAge(Math.min(this.age, this.MAX_AGE)); + } + + this.setFavoriteFood(this.favFoodID); + this.setAttackDamage(this.attackDamage); + this.setKillCount(this.kills); +// this.setCargoSlot(this.slimelingInventory.getStackInSlot(1)); + } + + if (!this.world.isRemote) + { + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(this.getMaxHealthSlimeling()); + + if (this.getOwnerUsername().isEmpty()) + { + Entity owner = this.getOwner(); + + if (owner != null) + { + this.setOwnerUsername(owner.getName()); + } + } + } + } + + private double getMaxHealthSlimeling() + { + if (this.isTamed()) + { + return 20.001D + 30.0 * ((double) this.age / (double) this.MAX_AGE); + } else + { + return 8.0D; + } + } + + @Override + public float getEyeHeight() + { + return this.height * 0.8F; + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + if (this.isEntityInvulnerable(par1DamageSource)) + { + return false; + } else + { + Entity entity = par1DamageSource.getTrueSource(); + this.setSittingAI(false); + + if (entity != null && !(entity instanceof EntityPlayer)) + { + par2 = (par2 + 1.0F) / 2.0F; + } + + return super.attackEntityFrom(par1DamageSource, par2); + } + } + + @Override + public boolean attackEntityAsMob(Entity par1Entity) + { + return par1Entity.attackEntityFrom(new EntityDamageSource("slimeling", this), this.getDamage()); + } + + public float getDamage() + { + int i = this.isTamed() ? 5 : 2; + return i * this.getAttackDamage(); + } + + @Override + public void setTamed(boolean par1) + { + super.setTamed(par1); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(this.getMaxHealthSlimeling()); + } + + @Override + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.inventory.getCurrentItem(); + + if (this.isTamed()) + { + if (!itemstack.isEmpty()) + { + if (itemstack.getItem() == this.getFavoriteFood()) + { + if (this.isOwner(player)) + { + itemstack.shrink(1); + + if (itemstack.isEmpty()) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + } + + if (this.world.isRemote) + { + MarsModuleClient.openSlimelingGui(this, 1); + } + + if (this.rand.nextInt(3) == 0) + { + this.setRandomFavFood(); + } + } else + { + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + if (stats.getChatCooldown() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.slimeling.chat.wrong_player"))); + stats.setChatCooldown(100); + } + } + } + } else + { + if (this.world.isRemote) + { + MarsModuleClient.openSlimelingGui(this, 0); + } + } + } else + { + if (this.world.isRemote) + { + MarsModuleClient.openSlimelingGui(this, 0); + } + } + + return true; + } else if (!itemstack.isEmpty() && itemstack.getItem() == Items.SLIME_BALL) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + if (itemstack.isEmpty()) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + } + + if (!this.world.isRemote) + { + if (this.rand.nextInt(3) == 0) + { + this.setTamed(true); + this.getNavigator().clearPath(); + this.setAttackTarget(null); + this.setSittingAI(true); + this.setHealth(20.0F); + this.setOwnerId(player.getUniqueID()); + this.setOwnerUsername(player.getName()); + this.playTameEffect(true); + this.world.setEntityState(this, (byte) 7); + } else + { + this.playTameEffect(false); + this.world.setEntityState(this, (byte) 6); + } + } + + return true; + } + + return super.processInteract(player, hand); + } + + public void setSittingAI(boolean sitting) + { + this.aiSit.setSitting(sitting); + } + + public String getOwnerUsername() + { + String s = this.dataManager.get(OWNER_USERNAME); + return s == null || s.length() == 0 ? "" : s; + } + + public void setOwnerUsername(String username) + { + this.dataManager.set(OWNER_USERNAME, username); + } + + @Override + public boolean isBreedingItem(ItemStack par1ItemStack) + { + return false; + } + + public EntitySlimeling spawnBabyAnimal(EntityAgeable par1EntityAgeable) + { + if (par1EntityAgeable instanceof EntitySlimeling) + { + EntitySlimeling otherSlimeling = (EntitySlimeling) par1EntityAgeable; + + Vector3 colorParentA = new Vector3(this.getColorRed(), this.getColorGreen(), this.getColorBlue()); + Vector3 colorParentB = new Vector3(otherSlimeling.getColorRed(), otherSlimeling.getColorGreen(), otherSlimeling.getColorBlue()); + Vector3 newColor = ColorUtil.addColorsRealistically(colorParentA, colorParentB); + newColor.x = Math.max(Math.min(newColor.x, 1.0F), 0); + newColor.y = Math.max(Math.min(newColor.y, 1.0F), 0); + newColor.z = Math.max(Math.min(newColor.z, 1.0F), 0); + EntitySlimeling newSlimeling = new EntitySlimeling(this.world, (float) newColor.x, (float) newColor.y, (float) newColor.z); + + UUID s = this.getOwnerId(); + + if (s != null) + { + newSlimeling.setOwnerId(s); + newSlimeling.setTamed(true); + } + + return newSlimeling; + } + + return null; + } + + @Override + public boolean canMateWith(EntityAnimal par1EntityAnimal) + { + if (par1EntityAnimal == this) + { + return false; + } else if (!this.isTamed()) + { + return false; + } else if (!(par1EntityAnimal instanceof EntitySlimeling)) + { + return false; + } else + { + EntitySlimeling slimeling = (EntitySlimeling) par1EntityAnimal; + return slimeling.isTamed() && !slimeling.isSitting() && this.isInLove() && slimeling.isInLove(); + } + } + + @Override + public boolean shouldAttackEntity(EntityLivingBase toAttack, EntityLivingBase owner) + { + if (!(toAttack instanceof EntityCreeper) && !(toAttack instanceof EntityGhast)) + { + if (toAttack instanceof EntitySlimeling) + { + EntitySlimeling slimeling = (EntitySlimeling) toAttack; + + if (slimeling.isTamed() && slimeling.getOwner() == owner) + { + return false; + } + } + + return !(toAttack instanceof EntityPlayer && owner instanceof EntityPlayer && !((EntityPlayer) owner).canAttackPlayer((EntityPlayer) toAttack)) + && (!(toAttack instanceof EntityHorse) || !((EntityHorse) toAttack).isTame()); + } else + { + return false; + } + } + + @Override + public EntityAgeable createChild(EntityAgeable par1EntityAgeable) + { + return this.spawnBabyAnimal(par1EntityAgeable); + } + + public float getColorRed() + { + return this.dataManager.get(COLOR_RED); + } + + public void setColorRed(float color) + { + this.dataManager.set(COLOR_RED, color); + } + + public float getColorGreen() + { + return this.dataManager.get(COLOR_GREEN); + } + + public void setColorGreen(float color) + { + this.dataManager.set(COLOR_GREEN, color); + } + + public float getColorBlue() + { + return this.dataManager.get(COLOR_BLUE); + } + + public void setColorBlue(float color) + { + this.dataManager.set(COLOR_BLUE, color); + } + + public int getAge() + { + return this.dataManager.get(AGE); + } + + public void setAge(int age) + { + this.dataManager.set(AGE, age); + } + + @Override + public String getName() + { + return this.dataManager.get(NAME); + } + + public void setName(String name) + { + this.dataManager.set(NAME, name); + } + + public Item getFavoriteFood() + { + return Item.getItemById(this.dataManager.get(FAV_FOOD_ID)); + } + + public void setFavoriteFood(int foodID) + { + this.dataManager.set(FAV_FOOD_ID, foodID); + } + + public float getAttackDamage() + { + return this.dataManager.get(ATTACK_DAMAGE); + } + + public void setAttackDamage(float damage) + { + this.dataManager.set(ATTACK_DAMAGE, damage); + } + + public int getKillCount() + { + return this.dataManager.get(KILLS); + } + + public void setKillCount(int damage) + { + this.dataManager.set(KILLS, damage); + } + + @Override + public boolean canBreath() + { + return true; + } + + public float getScale() + { + return this.getAge() / (float) this.MAX_AGE * 0.5F + 0.5F; + } + + public EntityAISit getAiSit() + { + return this.aiSit; + } + + @Override + public void onDeath(DamageSource p_70645_1_) + { + super.onDeath(p_70645_1_); + + if (!this.world.isRemote) + { + ItemStack bag = this.slimelingInventory.getStackInSlot(1); + if (bag != null && bag.getItem() == MarsItems.marsItemBasic && bag.getItemDamage() == 4) + { + this.slimelingInventory.decrStackSize(1, 64); + this.entityDropItem(bag, 0.5F); + } + } + } + + public static class EntityAISitGC extends EntityAISit + { + + private EntityTameable theEntity; + private boolean isSitting; + + public EntityAISitGC(EntityTameable theEntity) + { + super(theEntity); + this.theEntity = theEntity; + this.setMutexBits(5); + } + + @Override + public boolean shouldExecute() + { + if (!this.theEntity.isTamed()) + { + return false; + } else if (this.theEntity.isInWater()) + { + return false; + } else + { + Entity e = this.theEntity.getOwner(); + if (e instanceof EntityLivingBase) + { + EntityLivingBase living = (EntityLivingBase) e; + return living == null ? true : (this.theEntity.getDistanceSq(living) < 144.0D && living.getRevengeTarget() != null ? false : this.isSitting); + } + return false; + } + } + + @Override + public void startExecuting() + { + this.theEntity.getNavigator().clearPath(); + this.theEntity.setSitting(true); + } + + @Override + public void resetTask() + { + this.theEntity.setSitting(false); + } + + @Override + public void setSitting(boolean isSitting) + { + this.isSitting = isSitting; + } + } + + @Override + protected void jump() + { + this.motionY = 0.48D / WorldUtil.getGravityFactor(this); + if (this.motionY < 0.28D) + { + this.motionY = 0.28D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySludgeling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySludgeling.java new file mode 100644 index 00000000..eac1d6d6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySludgeling.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import net.minecraft.block.Block; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.util.DamageSource; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntitySludgeling extends EntityMob implements IEntityBreathable +{ + + public EntitySludgeling(World par1World) + { + super(par1World); + this.setSize(0.3F, 0.2F); + this.tasks.taskEntries.clear(); + this.targetTasks.taskEntries.clear(); + this.tasks.addTask(1, new EntityAIAttackMelee(this, 0.25F, true)); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, false)); + this.targetTasks.addTask(1, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, 0, false, true, null)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityEvolvedZombie.class, 0, false, true, null)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityEvolvedSkeleton.class, 0, false, true, null)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityEvolvedSpider.class, 0, false, true, null)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityEvolvedCreeper.class, 0, false, true, null)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget<>(this, EntitySlimeling.class, 200, false, true, null)); + } + + @Override + public boolean canBreatheUnderwater() + { + return true; + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(7.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(1.0F); + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SILVERFISH_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SILVERFISH_HURT; + } + + @Override + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SILVERFISH_DEATH; + } + + public EntityPlayer getClosestEntityToAttack(double par1, double par3, double par5, double par7) + { + double var9 = -1.0D; + EntityPlayer var11 = null; + + for (int var12 = 0; var12 < this.world.loadedEntityList.size(); ++var12) + { + EntityPlayer var13 = (EntityPlayer) this.world.loadedEntityList.get(var12); + double var14 = var13.getDistanceSq(par1, par3, par5); + + if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) + { + var9 = var14; + var11 = var13; + } + } + + return var11; + } + + @Override + protected void playStepSound(BlockPos pos, Block block) + { + this.playSound(SoundEvents.ENTITY_SILVERFISH_STEP, 0.15F, 1.0F); + } + + @Override + protected Item getDropItem() + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public void onUpdate() + { + this.renderYawOffset = this.rotationYaw; + super.onUpdate(); + } + + @Override + protected boolean isValidLightLevel() + { + return true; + } + + @Override + public boolean getCanSpawnHere() + { + if (super.getCanSpawnHere()) + { + EntityPlayer var1 = this.world.getClosestPlayerToEntity(this, 5.0D); + return var1 == null; + } else + { + return false; + } + } + + @Override + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ARTHROPOD; + } + + @Override + public boolean canBreath() + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityTier2Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityTier2Rocket.java new file mode 100644 index 00000000..e0eed43e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityTier2Rocket.java @@ -0,0 +1,350 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class EntityTier2Rocket extends EntityTieredRocket +{ + + public EntityTier2Rocket(World par1World) + { + super(par1World); + this.setSize(1.2F, 4.5F); + } + + public EntityTier2Rocket(World par1World, double par2, double par4, double par6, EnumRocketType rocketType) + { + super(par1World, par2, par4, par6); + this.rocketType = rocketType; + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + this.setSize(1.2F, 4.5F); + } + + public EntityTier2Rocket(World par1World, double par2, double par4, double par6, boolean reversed, EnumRocketType rocketType, NonNullList inv) + { + this(par1World, par2, par4, par6, rocketType); + this.stacks = inv; + } + + @Override + public double getYOffset() + { + return 1.5F; + } + + @Override + protected void entityInit() + { + super.entityInit(); + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(MarsItems.rocketMars, 1, this.rocketType.getIndex()); + } + + @Override + public double getMountedYOffset() + { + return 1.6D; + } + + @Override + public float getRotateOffset() + { + return 1.25F; + } + + @Override + public double getOnPadYOffset() + { + return -0.2D; + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + int i; + + if (this.timeUntilLaunch >= 100) + { + i = Math.abs(this.timeUntilLaunch / 100); + } else + { + i = 1; + } + + if ((this.getLaunched() || this.launchPhase == EnumLaunchPhase.IGNITED.ordinal() && this.rand.nextInt(i) == 0) && !ConfigManagerCore.disableSpaceshipParticles && this.hasValidFuel()) + { + if (this.world.isRemote) + { + this.spawnParticles(this.getLaunched()); + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal() && this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.LAUNCHED.ordinal()) + { + double d = this.timeSinceLaunch / 150; + + if (this.world.provider instanceof IGalacticraftWorldProvider && ((IGalacticraftWorldProvider) this.world.provider).hasNoAtmosphere()) + { + d = Math.min(d * 1.2, 1.8); + } else + { + d = Math.min(d, 1.2); + } + + if (d != 0.0) + { + this.motionY = -d * 2.0D * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + } + } else + { + this.motionY -= 0.008D; + } + + double multiplier = 1.0D; + + if (this.world.provider instanceof IGalacticraftWorldProvider) + { + multiplier = ((IGalacticraftWorldProvider) this.world.provider).getFuelUsageMultiplier(); + + if (multiplier <= 0) + { + multiplier = 1; + } + } + + if (this.timeSinceLaunch % MathHelper.floor(2 * (1 / multiplier)) == 0) + { + this.removeFuel(1); + if (!this.hasValidFuel()) + { + this.stopRocketSound(); + } + } + } else if (!this.hasValidFuel() && this.getLaunched() && !this.world.isRemote) + { + if (Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 10 != 0.0) + { + this.motionY -= Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 20; + } + } + } + + @Override + public void onTeleport(EntityPlayerMP player) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (this.stacks == null || this.stacks.size() == 0) + { + stats.setRocketStacks(NonNullList.withSize(2, ItemStack.EMPTY)); + } else + { + stats.setRocketStacks(this.stacks); + } + + stats.setRocketType(this.rocketType.getIndex()); + stats.setRocketItem(MarsItems.rocketMars); + stats.setFuelLevel(this.fuelTank.getFluidAmount()); + } + } + + protected void spawnParticles(boolean launched) + { + if (!this.isDead) + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double x1 = 2.9 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double z1 = 2.9 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double y1 = 2.9 * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null) + { + double modifier = this.posY - this.targetVec.getY(); + modifier = Math.min(Math.max(modifier, 80.0), 200.0); + x1 *= modifier / 100.0D; + y1 *= modifier / 100.0D; + z1 *= modifier / 100.0D; + } + + final double y = this.prevPosY + (this.posY - this.prevPosY) + y1 - this.motionY + (!this.getLaunched() ? 2.5D : 1D); + ; + + final double x2 = this.posX + x1 - this.motionX; + final double z2 = this.posZ + z1 - this.motionZ; + final double x3 = x2 + x1 / 2D; + final double y3 = y + y1 / 2D; + final double z3 = z2 + z1 / 2D; + Vector3 motionVec = new Vector3(x1, y1, z1); + + if (this.ticksExisted % 2 == 0 && !this.getLaunched()) + return; + + String flame = this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle"; + + EntityLivingBase riddenByEntity = this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof EntityLivingBase) ? null : (EntityLivingBase) this.getPassengers().get(0); + Object[] rider = new Object[] + {riddenByEntity}; + Object[] none = new Object[] + {}; + Random random = this.rand; + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 + 0.4 - random.nextDouble() / 10D, y, z2 + 0.4 - random.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 - 0.4 + random.nextDouble() / 10D, y, z2 + 0.4 - random.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 - 0.4 + random.nextDouble() / 10D, y, z2 - 0.4 + random.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 + 0.4 - random.nextDouble() / 10D, y, z2 - 0.4 + random.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 + 0.4, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 - 0.4, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2, y, z2 + 0.4D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2, y, z2 - 0.4D), motionVec, rider); + // Larger flameball for T2 - positioned behind the smaller one + double a = 4D; + double bx = motionVec.x + 0.5D / a; + double bz = motionVec.z + 0.5D / a; + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.2 - random.nextDouble() / 6D, y3 + 0.4, z3 + 0.2 - random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.2 + random.nextDouble() / 6D, y3 + 0.4, z3 + 0.2 - random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.2 + random.nextDouble() / 6D, y3 + 0.4, z3 - 0.2 + random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.2 - random.nextDouble() / 6D, y3 + 0.4, z3 - 0.2 + random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.2 - random.nextDouble() / 6D, y3 - 0.4, z3 + 0.2 - random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.2 + random.nextDouble() / 6D, y3 - 0.4, z3 + 0.2 - random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.2 + random.nextDouble() / 6D, y3 - 0.4, z3 - 0.2 + random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.2 - random.nextDouble() / 6D, y3 - 0.4, z3 - 0.2 + random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.7 - random.nextDouble() / 8D, y3, z3 + 0.7 - random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.7 + random.nextDouble() / 8D, y3, z3 + 0.7 - random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.7 + random.nextDouble() / 8D, y3, z3 - 0.7 + random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.7 - random.nextDouble() / 8D, y3, z3 - 0.7 + random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.7 - random.nextDouble() / 8D, y3, z3 - random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.7 + random.nextDouble() / 8D, y3, z3 - random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + random.nextDouble() / 8D, y3, z3 + 0.7 + random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - random.nextDouble() / 8D, y3, z3 - 0.7 + random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle("blueflame", new Vector3(x2 - 0.8, y, z2), motionVec, none); + GalacticraftCore.proxy.spawnParticle("blueflame", new Vector3(x2 + 0.8, y, z2), motionVec, none); + GalacticraftCore.proxy.spawnParticle("blueflame", new Vector3(x2, y, z2 - 0.8), motionVec, none); + GalacticraftCore.proxy.spawnParticle("blueflame", new Vector3(x2, y, z2 + 0.8), motionVec, none); + } + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return !this.isDead && entityPlayer.getDistanceSq(this) <= 64.0D; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeEntityToNBT(par1NBTTagCompound); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readEntityFromNBT(par1NBTTagCompound); + } + + @Override + public boolean isDockValid(IFuelDock dock) + { + return dock instanceof TileEntityLandingPad; + } + + @Override + public int getRocketTier() + { + return 2; + } + + @Override + public int getFuelTankCapacity() + { + return 1500; + } + + @Override + public int getPreLaunchWait() + { + return 400; + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public List getItemsDropped(List droppedItems) + { + super.getItemsDropped(droppedItems); + ItemStack rocket = new ItemStack(MarsItems.rocketMars, 1, this.rocketType.getIndex()); + rocket.setTagCompound(new NBTTagCompound()); + rocket.getTagCompound().setInteger("RocketFuel", this.fuelTank.getFluidAmount()); + droppedItems.add(rocket); + return droppedItems; + } + + @Override + public float getRenderOffsetY() + { + return -0.1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerElectrolyzer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerElectrolyzer.java new file mode 100644 index 00000000..6b48915a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerElectrolyzer.java @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerElectrolyzer extends Container +{ + + private final TileEntityElectrolyzer tileEntity; + + public ContainerElectrolyzer(InventoryPlayer par1InventoryPlayer, TileEntityElectrolyzer tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 34, 50, IItemElectric.class)); + + // Input slot + this.addSlotToContainer(new Slot(tileEntity, 1, 7, 7)); + + // 2 output slots + this.addSlotToContainer(new Slot(tileEntity, 2, 132, 7)); + this.addSlotToContainer(new Slot(tileEntity, 3, 153, 7)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 104 + var3 * 18 - 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 144)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < 4) + { + if (!this.mergeItemStack(var4, 4, 40, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 2) + { + slot.onSlotChange(var4, var2); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (FluidUtil.isWaterContainer(var4)) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (FluidUtil.isEmptyGasContainer(var4)) + { + if (!this.mergeItemStack(var4, 2, 4, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 31) + { + if (!this.mergeItemStack(var4, 31, 40, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 4, 31, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerGasLiquefier.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerGasLiquefier.java new file mode 100644 index 00000000..92c06f5c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerGasLiquefier.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerGasLiquefier extends Container +{ + + private final TileEntityGasLiquefier tileEntity; + + public ContainerGasLiquefier(InventoryPlayer par1InventoryPlayer, TileEntityGasLiquefier tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 34, 50, IItemElectric.class)); + + // Input slot + this.addSlotToContainer(new Slot(tileEntity, 1, 7, 7)); + + // 1 output slot + this.addSlotToContainer(new Slot(tileEntity, 2, 132, 7)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 104 + var3 * 18 - 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 144)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack itemStack1 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + itemStack1 = var4.copy(); + + if (par1 < this.tileEntity.getSizeInventory()) + { + + if (!this.mergeItemStack(var4, this.tileEntity.getSizeInventory(), this.tileEntity.getSizeInventory() + 36, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 2) + { + slot.onSlotChange(var4, itemStack1); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + boolean outputTankSlotsSuccess = false; + + if (!outputTankSlotsSuccess && FluidUtil.isEmptyContainerFor(var4, this.tileEntity.liquidTank.getFluid())) + { + if (this.mergeItemStack(var4, 2, 3, false)) + { + outputTankSlotsSuccess = true; + } + } + + if (!outputTankSlotsSuccess) + { + if (FluidUtil.isFilledContainer(var4) || var4.getItem() instanceof ItemAtmosphericValve) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 31) + { + + if (!this.mergeItemStack(var4, 31, 39, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 4, 31, false)) + { + return ItemStack.EMPTY; + } + } + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == itemStack1.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return itemStack1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchController.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchController.java new file mode 100644 index 00000000..c21f277b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchController.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerLaunchController extends Container +{ + + private final TileEntityLaunchController tileEntity; + + public ContainerLaunchController(InventoryPlayer par1InventoryPlayer, TileEntityLaunchController tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + tileEntity.checkDestFrequencyValid(); + + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 152, 105, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 127 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 185)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchControllerAdvanced.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchControllerAdvanced.java new file mode 100644 index 00000000..691f6d00 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchControllerAdvanced.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerLaunchControllerAdvanced extends Container +{ + + private final TileEntityLaunchController tileEntity; + + public ContainerLaunchControllerAdvanced(InventoryPlayer par1InventoryPlayer, TileEntityLaunchController tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + tileEntity.checkDestFrequencyValid(); + + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 152, 105, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 127 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 185)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerMethaneSynthesizer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerMethaneSynthesizer.java new file mode 100644 index 00000000..68348ea9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerMethaneSynthesizer.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMethaneSynthesizer extends Container +{ + + private final TileEntityMethaneSynthesizer tileEntity; + + public ContainerMethaneSynthesizer(InventoryPlayer par1InventoryPlayer, TileEntityMethaneSynthesizer tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 53, 53, IItemElectric.class)); + + // Input slot - hydrogen + this.addSlotToContainer(new Slot(tileEntity, 1, 7, 7)); + + // Input slot - CO2 + this.addSlotToContainer(new Slot(tileEntity, 2, 28, 7)); + + // Carbon slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 3, 28, 53, new ItemStack(MarsItems.carbonFragments, 1, 0))); + + // Output slot + this.addSlotToContainer(new Slot(tileEntity, 4, 153, 7)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 104 + var3 * 18 - 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 144)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < 5) + { + if (!this.mergeItemStack(var4, 5, 41, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 2) + { + slot.onSlotChange(var4, var2); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (var4.getItem() instanceof ItemAtmosphericValve) + { + if (!this.mergeItemStack(var4, 2, 3, false)) + { + return ItemStack.EMPTY; + } + } else if (var4.getItem() == MarsItems.carbonFragments) + { + if (!this.mergeItemStack(var4, 3, 4, false)) + { + return ItemStack.EMPTY; + } + } else if (FluidUtil.isPartialContainer(var4, AsteroidsItems.methaneCanister)) + { + if (!this.mergeItemStack(var4, 4, 5, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 32) + { + if (!this.mergeItemStack(var4, 32, 41, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 5, 32, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicCargoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicCargoRocket.java new file mode 100644 index 00000000..b0a958a3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicCargoRocket.java @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.core.inventory.SlotRocketBenchResult; +import micdoodle8.mods.galacticraft.planets.mars.util.RecipeUtilMars; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ContainerSchematicCargoRocket extends Container +{ + + public InventorySchematicCargoRocket craftMatrix = new InventorySchematicCargoRocket(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicCargoRocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 69 + change)); + int var6; + int var7; + + // Cone + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 1, 48, -9 + change, pos, par1InventoryPlayer.player)); + + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 2, 48, -9 + 18 + change, pos, par1InventoryPlayer.player)); + + // Body + for (var6 = 0; var6 < 3; ++var6) + { + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 3 + var6, 39, -7 + var6 * 18 + 16 + 18 + change, pos, par1InventoryPlayer.player)); + } + + // Body Right + for (var6 = 0; var6 < 3; ++var6) + { + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 6 + var6, 57, -7 + var6 * 18 + 16 + 18 + change, pos, par1InventoryPlayer.player)); + } + + // Left fins + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 9, 21, 63 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 10, 21, 81 + change, pos, par1InventoryPlayer.player)); + + // Engine + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 11, 48, 81 + change, pos, par1InventoryPlayer.player)); + + // Right fins + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 12, 75, 63 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 13, 75, 81 + change, pos, par1InventoryPlayer.player)); + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 14 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + change = 9; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 129 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 18 + 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtilMars.findMatchingCargoRocketRecipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + boolean done = false; + if (par1 <= 16) + { + if (!this.mergeItemStack(var4, 17, 53, false)) + { + return ItemStack.EMPTY; + } + + if (par1 == 0) + { + var3.onSlotChange(var4, var2); + } + } else + { + for (int i = 1; i < 14; i++) + { + Slot testSlot = this.inventorySlots.get(i); + if (!testSlot.getHasStack() && testSlot.isItemValid(var2)) + { + if (!this.mergeOneItem(var4, i, i + 1, false)) + { + return ItemStack.EMPTY; + } + done = true; + break; + } + } + + if (!done) + { + if (var2.getItem() == Item.getItemFromBlock(Blocks.CHEST) && !((Slot) this.inventorySlots.get(14)).getHasStack()) + { + if (!this.mergeOneItem(var4, 14, 15, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == Item.getItemFromBlock(Blocks.CHEST) && !((Slot) this.inventorySlots.get(15)).getHasStack()) + { + if (!this.mergeOneItem(var4, 15, 16, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == Item.getItemFromBlock(Blocks.CHEST) && !((Slot) this.inventorySlots.get(16)).getHasStack()) + { + if (!this.mergeOneItem(var4, 16, 17, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 17 && par1 < 44) + { + if (!this.mergeItemStack(var4, 44, 53, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 44 && par1 < 53) + { + if (!this.mergeItemStack(var4, 17, 44, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 17, 53, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (!par1ItemStack.isEmpty()) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicTier2Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicTier2Rocket.java new file mode 100644 index 00000000..78a2a73f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicTier2Rocket.java @@ -0,0 +1,258 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.core.inventory.SlotRocketBenchResult; +import micdoodle8.mods.galacticraft.planets.mars.util.RecipeUtilMars; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; + +public class ContainerSchematicTier2Rocket extends Container +{ + + public InventorySchematicTier2Rocket craftMatrix = new InventorySchematicTier2Rocket(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicTier2Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + final int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 18 + 69 + change)); + int var6; + int var7; + + // Cone + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 1, 48, -8 + change, pos, par1InventoryPlayer.player)); + + // Body + for (var6 = 0; var6 < 5; ++var6) + { + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 2 + var6, 39, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Body Right + for (var6 = 0; var6 < 5; ++var6) + { + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 7 + var6, 57, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Left fins + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 12, 21, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 13, 21, 82 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 14, 21, 100 + change, pos, par1InventoryPlayer.player)); + + // Engine + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 15, 48, 100 + change, pos, par1InventoryPlayer.player)); + + // Right fins + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 16, 75, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 17, 75, 82 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 18, 75, 100 + change, pos, par1InventoryPlayer.player)); + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 19 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 129 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 18 + 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtilMars.findMatchingSpaceshipT2Recipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + boolean done = false; + if (par1 <= 21) + { + if (!this.mergeItemStack(var4, 22, 58, false)) + { + return ItemStack.EMPTY; + } + + if (par1 == 0) + { + var3.onSlotChange(var4, var2); + } + } else + { + for (int i = 1; i < 19; i++) + { + Slot testSlot = (Slot) this.inventorySlots.get(i); + if (!testSlot.getHasStack() && testSlot.isItemValid(var2)) + { + if (!this.mergeOneItem(var4, i, i + 1, false)) + { + return ItemStack.EMPTY; + } + done = true; + break; + } + } + + if (!done) + { + boolean foundChest = false; + for (ItemStack woodChest : OreDictionary.getOres("chestWood")) + { + if (var2.getItem() == woodChest.getItem()) + { + foundChest = true; + break; + } + } + if (foundChest) + { + if (!((Slot) this.inventorySlots.get(19)).getHasStack()) + { + if (!this.mergeOneItem(var4, 19, 20, false)) + { + return ItemStack.EMPTY; + } + } else if (!((Slot) this.inventorySlots.get(20)).getHasStack()) + { + if (!this.mergeOneItem(var4, 20, 21, false)) + { + return ItemStack.EMPTY; + } + } else if (!((Slot) this.inventorySlots.get(21)).getHasStack()) + { + if (!this.mergeOneItem(var4, 21, 22, false)) + { + return ItemStack.EMPTY; + } + } + } else if (par1 >= 22 && par1 < 49) + { + if (!this.mergeItemStack(var4, 49, 58, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 49 && par1 < 58) + { + if (!this.mergeItemStack(var4, 22, 49, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 22, 58, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (!par1ItemStack.isEmpty()) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSlimeling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSlimeling.java new file mode 100644 index 00000000..b4f8a0e8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSlimeling.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import java.util.Collections; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerSlimeling extends Container +{ + + private final InventorySlimeling slimelingInventory; + + public ContainerSlimeling(InventoryPlayer playerInventory, EntitySlimeling slimeling, EntityPlayer player) + { + this.slimelingInventory = slimeling.slimelingInventory; + this.slimelingInventory.currentContainer = this; + + ContainerSlimeling.addSlots(this, playerInventory, slimeling); + ContainerSlimeling.addAdditionalSlots(this, slimeling, this.slimelingInventory.getStackInSlot(1)); + + this.slimelingInventory.openInventory(player); + } + + public static void addSlots(ContainerSlimeling container, InventoryPlayer playerInventory, EntitySlimeling slimeling) + { + Slot slot = new SlotSpecific(slimeling.slimelingInventory, 1, 9, 30, new ItemStack(MarsItems.marsItemBasic, 1, 4)); + container.addSlotToContainer(slot); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + slot = new Slot(playerInventory, var4 + var3 * 9 + 9, 8 + var4 * 18, 129 + var3 * 18); + container.addSlotToContainer(slot); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + slot = new Slot(playerInventory, var3, 8 + var3 * 18, 187); + container.addSlotToContainer(slot); + } + } + + public static void removeSlots(ContainerSlimeling container) + { + Collections.copy(container.inventoryItemStacks, container.inventoryItemStacks.subList(0, 37)); + container.inventorySlots = container.inventorySlots.subList(0, 37); + } + + public static void addAdditionalSlots(ContainerSlimeling container, EntitySlimeling slimeling, ItemStack stack) + { + if (!stack.isEmpty() && stack.getItem() == MarsItems.marsItemBasic && stack.getItemDamage() == 4) + { + // Note that if NEI is installed, this can be called by + // InventorySlimeling.setInventorySlotContents even if the container + // already has the slots + if (container.inventorySlots.size() < 63) + { + for (int var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + Slot slot = new Slot(slimeling.slimelingInventory, var4 + var3 * 9 + 2, 8 + var4 * 18, 54 + var3 * 18); + slot.slotNumber = container.inventorySlots.size(); + container.inventorySlots.add(slot); + container.inventoryItemStacks.add(ItemStack.EMPTY); + } + } + } + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + this.slimelingInventory.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.slimelingInventory.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = (Slot) this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (b < 39) + { + if (par1 < b - 36) + { + if (!this.mergeItemStack(var4, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (var4.getItem() == MarsItems.marsItemBasic && var4.getItemDamage() == 4) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < b - 9) + { + if (!this.mergeItemStack(var4, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } else + { + // With inventory bag, slot 0 is a bag slot + // Slots 1-36 are regular inventory (27 inventory, 9 hotbar) + // Slots 37-63 are the inventory bag slots + if (par1 == 0) + { + return ItemStack.EMPTY; + } + + if (par1 > 36) + { + if (!this.mergeItemStack(var4, 1, 37, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < 28) + { + if (!this.mergeItemStack(var4, 37, 64, false)) + { + if (!this.mergeItemStack(var4, 28, 37, false)) + { + return ItemStack.EMPTY; + } + } + } else if (!this.mergeItemStack(var4, 37, 64, false)) + { + if (!this.mergeItemStack(var4, 1, 28, false)) + { + return ItemStack.EMPTY; + } + } + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerTerraformer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerTerraformer.java new file mode 100644 index 00000000..35108fbf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerTerraformer.java @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBush; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.registry.ForgeRegistries; + +public class ContainerTerraformer extends Container +{ + + private final TileEntityTerraformer tileEntity; + private static LinkedList saplingList = null; + + public ContainerTerraformer(InventoryPlayer par1InventoryPlayer, TileEntityTerraformer tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 25, 19, new ItemStack(Items.WATER_BUCKET), new ItemStack(Items.BUCKET))); + + this.addSlotToContainer(new SlotSpecific(tileEntity, 1, 25, 39, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 3; ++var6) + { + List stacks = new ArrayList(); + + if (var6 == 0) + { + stacks.add(new ItemStack(Items.DYE, 1, 15)); + } else if (var6 == 1) + { + if (ContainerTerraformer.saplingList == null) + { + initSaplingList(); + } + + stacks.addAll(ContainerTerraformer.saplingList); + } else if (var6 == 2) + { + stacks.add(new ItemStack(Items.WHEAT_SEEDS)); + } + + for (var7 = 0; var7 < 4; ++var7) + { + this.addSlotToContainer(new SlotSpecific(tileEntity, var7 + var6 * 4 + 2, 25 + var7 * 18, 63 + var6 * 24, stacks.toArray(new ItemStack[stacks.size()]))); + } + } + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 155 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 213)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < b - 36) + { + if (!this.mergeItemStack(var4, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (var4.getItem() == Items.WATER_BUCKET) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (var4.getItem() == Items.DYE && var4.getItemDamage() == 15) + { + if (!this.mergeItemStack(var4, 2, 6, false)) + { + return ItemStack.EMPTY; + } + } else if (this.getSlot(6).isItemValid(var4)) + { + if (!this.mergeItemStack(var4, 6, 10, false)) + { + return ItemStack.EMPTY; + } + } else if (var4.getItem() == Items.WHEAT_SEEDS) + { + if (!this.mergeItemStack(var4, 10, 14, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < b - 9) + { + if (!this.mergeItemStack(var4, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } + + public static boolean isOnSaplingList(ItemStack stack) + { + if (saplingList == null) + { + initSaplingList(); + } + + for (ItemStack sapling : saplingList) + { + if (sapling.isItemEqual(stack)) + { + return true; + } + } + + return false; + } + + private static void initSaplingList() + { + ContainerTerraformer.saplingList = new LinkedList<>(); + + for (Block b : ForgeRegistries.BLOCKS) + { + if (b instanceof BlockBush) + { + try + { + Item item = Item.getItemFromBlock(b); + if (item != Items.AIR) + { + // item.getSubItems(item, null, subItemsList); - can't + // use because clientside only + ContainerTerraformer.saplingList.add(new ItemStack(item, 1, 0)); + String basicName = item.getTranslationKey(new ItemStack(item, 1, 0)); + for (int i = 1; i < 16; i++) + { + ItemStack testStack = new ItemStack(item, 1, i); + String testName = item.getTranslationKey(testStack); + if (testName.equals("") || testName.equals(basicName)) + { + break; + } + ContainerTerraformer.saplingList.add(testStack); + } + } + } catch (Exception e) + { + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicCargoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicCargoRocket.java new file mode 100644 index 00000000..251dfdae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicCargoRocket.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematicCargoRocket implements IInventory +{ + + private final NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventorySchematicCargoRocket(Container par1Container) + { + this.stacks = NonNullList.withSize(17, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicTier2Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicTier2Rocket.java new file mode 100644 index 00000000..65277c94 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicTier2Rocket.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematicTier2Rocket implements IInventory +{ + + private final NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventorySchematicTier2Rocket(Container par1Container) + { + this.stacks = NonNullList.withSize(22, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySlimeling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySlimeling.java new file mode 100644 index 00000000..09fdabba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySlimeling.java @@ -0,0 +1,264 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySlimeling implements IInventory +{ + + private NonNullList stacks = NonNullList.withSize(30, ItemStack.EMPTY); + private EntitySlimeling slimeling; + public Container currentContainer; + + public InventorySlimeling(EntitySlimeling slimeling) + { + this.slimeling = slimeling; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.slimeling_inventory.name"); + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (!this.stacks.get(par1).isEmpty()) + { + final ItemStack var2 = this.stacks.get(par1); + this.stacks.set(par1, ItemStack.EMPTY); + this.markDirty(); + return var2; + } else + { + return ItemStack.EMPTY; + } + } + + private void removeInventoryBagContents() + { + if (this.currentContainer instanceof ContainerSlimeling) + { + ContainerSlimeling.removeSlots((ContainerSlimeling) this.currentContainer); + } + + for (int i = 2; i < this.stacks.size(); i++) + { + if (!this.stacks.get(i).isEmpty()) + { + if (!this.slimeling.world.isRemote) + { + this.slimeling.entityDropItem(this.stacks.get(i), 0.5F); + } + + this.stacks.set(i, ItemStack.EMPTY); + } + } + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (!this.stacks.get(par1).isEmpty()) + { + ItemStack var3; + + // It's a removal of the Slimeling Inventory Bag + if (par1 == 1 && this.stacks.get(par1).getCount() <= par2) + { + this.removeInventoryBagContents(); + var3 = this.stacks.get(par1); + this.stacks.set(par1, ItemStack.EMPTY); + this.markDirty(); + return var3; + } else + // Normal case of decrStackSize for a slot + { + var3 = this.stacks.get(par1).splitStack(par2); + + if (this.stacks.get(par1).isEmpty()) + { + // Not sure if this is necessary again, given the above? + if (par1 == 1) + { + this.removeInventoryBagContents(); + } + + this.stacks.set(par1, ItemStack.EMPTY); + } + + this.markDirty(); + return var3; + } + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + if (par1 == 1 && (par2ItemStack.isEmpty() && !this.stacks.get(par1).isEmpty() || !ItemStack.areItemStacksEqual(par2ItemStack, this.stacks.get(par1)))) + { + ContainerSlimeling.addAdditionalSlots((ContainerSlimeling) this.currentContainer, this.slimeling, par2ItemStack); + } + + this.stacks.set(par1, par2ItemStack); + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + public void readFromNBT(NBTTagList tagList) + { + if (tagList == null || tagList.tagCount() <= 0) + { + return; + } + + this.stacks = NonNullList.withSize(this.stacks.size(), ItemStack.EMPTY); + + for (int i = 0; i < tagList.tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = tagList.getCompoundTagAt(i); + final int j = nbttagcompound.getByte("Slot") & 255; + final ItemStack itemstack = new ItemStack(nbttagcompound); + + if (!itemstack.isEmpty()) + { + this.stacks.set(j, itemstack); + } + } + } + + public NBTTagList writeToNBT(NBTTagList tagList) + { + NBTTagCompound nbttagcompound; + + for (int i = 0; i < this.stacks.size(); ++i) + { + if (!this.stacks.get(i).isEmpty()) + { + nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) i); + this.stacks.get(i).writeToNBT(nbttagcompound); + tagList.appendTag(nbttagcompound); + } + } + + return tagList; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return !this.slimeling.isDead && entityPlayer.getDistanceSq(this.slimeling) <= 64.0D; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicCargoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicCargoRocket.java new file mode 100644 index 00000000..71c0f9d4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicCargoRocket.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +public class SlotSchematicCargoRocket extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotSchematicCargoRocket(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getCargoRocketRecipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicTier2Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicTier2Rocket.java new file mode 100644 index 00000000..1fa2217b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicTier2Rocket.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +public class SlotSchematicTier2Rocket extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotSchematicTier2Rocket(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getRocketT2Recipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemArmorMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemArmorMars.java new file mode 100644 index 00000000..33612493 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemArmorMars.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemArmorMars extends ItemArmor implements ISortableItem, GCRarity +{ + + private final ArmorMaterial material; + + public ItemArmorMars(ArmorMaterial par2EnumArmorMaterial, int par3, EntityEquipmentSlot par4) + { + super(par2EnumArmorMaterial, par3, par4); + this.material = par2EnumArmorMaterial; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) + { + if (this.material == MarsItems.ARMORDESH) + { + if (stack.getItem() == MarsItems.deshHelmet) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/desh_1.png"; + } else if (stack.getItem() == MarsItems.deshChestplate || stack.getItem() == MarsItems.deshBoots) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/desh_2.png"; + } else if (stack.getItem() == MarsItems.deshLeggings) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/desh_3.png"; + } + } + + return null; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return repair.getItem() == MarsItems.marsItemBasic && repair.getItemDamage() == 2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemAxeMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemAxeMars.java new file mode 100644 index 00000000..7b7f7150 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemAxeMars.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import com.google.common.collect.Sets; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemAxeMars extends ItemTool implements ISortableItem, GCRarity +{ + + private static final Set EFFECTIVE_ON = Sets.newHashSet(new Block[] + {Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER, Blocks.WOODEN_BUTTON, + Blocks.WOODEN_PRESSURE_PLATE}); + + public ItemAxeMars(ToolMaterial material) + { + super(material, EFFECTIVE_ON); + this.attackDamage = 6.0F; + this.attackSpeed = -3.0F; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Material material = state.getMaterial(); + return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getDestroySpeed(stack, state) : this.efficiency; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBasicMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBasicMars.java new file mode 100644 index 00000000..bd1e6afb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBasicMars.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBasicMars extends Item implements ISortableItem, GCRarity +{ + + public static String[] names = + {"raw_desh", "desh_stick", "ingot_desh", "reinforced_plate_t2", "slimeling_cargo", "compressed_desh", "fluid_manip"}; + + public ItemBasicMars(String name) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(name); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemBasicMars.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemBasicMars.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack != null && par1ItemStack.getItemDamage() == 3) + { + tooltip.add(GCCoreUtil.translate("item.tier2.desc")); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 2: + return EnumSortCategoryItem.INGOT; + case 3: + case 5: + return EnumSortCategoryItem.PLATE; + } + return EnumSortCategoryItem.GENERAL; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + switch (item.getItemDamage()) + { + case 3: + return 1.5F; + case 5: + return 1F; + } + return -1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockEgg.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockEgg.java new file mode 100644 index 00000000..40575ff3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockEgg.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockSlimelingEgg; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +public class ItemBlockEgg extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockEgg(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockSlimelingEgg.EnumEggColor.values()[itemstack.getItemDamage() % 3].getName(); + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMachine.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMachine.java new file mode 100644 index 00000000..2698bc82 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMachine.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class ItemBlockMachine extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockMachine(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public boolean placeBlockAt(ItemStack itemStack, EntityPlayer player, World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, IBlockState state) + { + int metaAt = itemStack.getItemDamage(); + + // If it is a Cryogenic Chamber, check the space + if (metaAt == BlockMachineMars.CRYOGENIC_CHAMBER_METADATA) + { + for (int y = 0; y < 3; y++) + { + IBlockState stateAt = world.getBlockState(pos.add(0, y, 0)); + + if (this.getBlock() == MarsBlocks.machine) + { + if (!stateAt.getMaterial().isReplaceable()) + { + if (world.isRemote) + { + FMLClientHandler.instance().getClient().ingameGUI + .setOverlayMessage(new TextComponentString(GCCoreUtil.translate("gui.warning.noroom")).setStyle(new Style().setColor(TextFormatting.RED)).getFormattedText(), false); + } + return false; + } + } + } + } + return super.placeBlockAt(itemStack, player, world, pos, facing, hitX, hitY, hitZ, state); + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int index = 0; + int typenum = itemstack.getItemDamage() & 12; + + if (this.getBlock() == MarsBlocks.machine) + { + if (typenum == BlockMachineMars.LAUNCH_CONTROLLER_METADATA) + { + index = 2; + } else if (typenum == BlockMachineMars.CRYOGENIC_CHAMBER_METADATA) + { + index = 1; + } + } else if (this.getBlock() == MarsBlocks.machineT2) + { + return ((BlockMachineBase) MarsBlocks.machineT2).getTranslationKey(typenum); + } + + return this.getBlock().getTranslationKey() + "." + index; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMars.java new file mode 100644 index 00000000..c7b20a60 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMars.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockMars extends ItemBlock implements GCRarity +{ + + public ItemBlockMars(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = ""; + + switch (itemstack.getItemDamage()) + { + case 0: + { + name = "coppermars"; + break; + } + case 1: + { + name = "tinmars"; + break; + } + case 3: + { + name = "ironmars"; + break; + } + case 2: + { + name = "deshmars"; + break; + } + case 4: + { + name = "marscobblestone"; + break; + } + case 5: + { + name = "marsgrass"; + break; + } + case 6: + { + name = "marsdirt"; + break; + } + case 7: + { + name = "marsdungeon"; + break; + } + case 8: + { + name = "marsdeco"; + break; + } + case 9: + { + name = "marsstone"; + break; + } + default: + name = "null"; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockTintedGlassPane.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockTintedGlassPane.java new file mode 100644 index 00000000..78c1f4b1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockTintedGlassPane.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; + +public class ItemBlockTintedGlassPane extends ItemBlock implements GCRarity +{ + + public ItemBlockTintedGlassPane(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + return this.getBlock().getTranslationKey() + "." + ItemDye.DYE_COLORS[~itemstack.getItemDamage() & 15]; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemCarbonFragments.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemCarbonFragments.java new file mode 100644 index 00000000..6a108855 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemCarbonFragments.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCarbonFragments extends Item implements ISortableItem, GCRarity +{ + + public ItemCarbonFragments() + { + super(); + this.setMaxStackSize(64); + this.setMaxDamage(0); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } + + @Override + public int getItemBurnTime(ItemStack itemStack) + { + return 200; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemHoeMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemHoeMars.java new file mode 100644 index 00000000..a00653cb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemHoeMars.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemHoe; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemHoeMars extends ItemHoe implements ISortableItem, GCRarity +{ + + public ItemHoeMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemKeyMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemKeyMars.java new file mode 100644 index 00000000..d059d92b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemKeyMars.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IKeyItem; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemKeyMars extends Item implements IKeyItem, ISortableItem, GCRarity +{ + + public ItemKeyMars() + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return "item.key.t2"; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getTier(ItemStack keyStack) + { + return 2; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.KEYS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeMars.java new file mode 100644 index 00000000..19b59a29 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeMars.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemPickaxe; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemPickaxeMars extends ItemPickaxe implements ISortableItem, GCRarity +{ + + public ItemPickaxeMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeStickyMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeStickyMars.java new file mode 100644 index 00000000..ab6a2936 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeStickyMars.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemPickaxe; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemPickaxeStickyMars extends ItemPickaxe implements ISortableItem, GCRarity +{ + + public ItemPickaxeStickyMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSchematicTier2.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSchematicTier2.java new file mode 100644 index 00000000..cde9643f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSchematicTier2.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicItem; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemSchematic; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemSchematicTier2 extends ItemSchematic implements ISchematicItem, ISortableItem +{ + + private static int indexOffset = 0; + + public ItemSchematicTier2() + { + super("schematic"); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 3; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + switch (par1ItemStack.getItemDamage()) + { + case 0: + tooltip.add(GCCoreUtil.translate("schematic.rocket_t3.name")); + break; + case 1: + tooltip.add(GCCoreUtil.translate("schematic.cargo_rocket.name")); + break; + case 2: + tooltip.add(GCCoreUtil.translate("schematic.astro_miner.name")); + break; + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.SCHEMATIC; + } + + /** + * Higher tiers should use this form and make sure they have set up the + * indexOffset correctly in registerSchematicItems() + */ + @Override + protected int getIndex(int damage) + { + return damage + indexOffset; + } + + /** + * Make sure the number of these will match the index values + */ + public static void registerSchematicItems() + { + indexOffset = SchematicRegistry.registerSchematicItem(new ItemStack(MarsItems.schematic, 1, 0)); + SchematicRegistry.registerSchematicItem(new ItemStack(MarsItems.schematic, 1, 1)); + SchematicRegistry.registerSchematicItem(new ItemStack(MarsItems.schematic, 1, 2)); + } + + /** + * Make sure the order of these will match the index values + */ + @SideOnly(value = Side.CLIENT) + public static void registerTextures() + { + SchematicRegistry.registerTexture(new ResourceLocation("galacticraftplanets", "textures/items/schematic_rocket_t3.png")); + SchematicRegistry.registerTexture(new ResourceLocation("galacticraftplanets", "textures/items/schematic_rocket_cargo.png")); + SchematicRegistry.registerTexture(new ResourceLocation("galacticraftplanets", "textures/items/schematic_astro_miner.png")); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSpadeMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSpadeMars.java new file mode 100644 index 00000000..ea363f22 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSpadeMars.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemSpade; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemSpadeMars extends ItemSpade implements ISortableItem, GCRarity +{ + + public ItemSpadeMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSwordMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSwordMars.java new file mode 100644 index 00000000..82ec95b2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSwordMars.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemSwordMars extends ItemSword implements ISortableItem, GCRarity +{ + + public ItemSwordMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + if (state.getBlockHardness(worldIn, pos) > 0.2001F) + { + stack.damageItem(2, entityLiving); + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemTier2Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemTier2Rocket.java new file mode 100644 index 00000000..a056180a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemTier2Rocket.java @@ -0,0 +1,263 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityTier2Rocket; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemTier2Rocket extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemTier2Rocket() + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + { + ItemStack stack = player.getHeldItem(hand); + boolean padFound = false; + TileEntity tile = null; + + if (world.isRemote) + { + return EnumActionResult.PASS; + } else + { + float centerX = -1; + float centerY = -1; + float centerZ = -1; + + for (int i = -1; i < 2; i++) + { + for (int j = -1; j < 2; j++) + { + BlockPos pos1 = pos.add(i, 0, j); + IBlockState state = world.getBlockState(pos1); + final Block id = state.getBlock(); + int meta = id.getMetaFromState(state); + + if (id == GCBlocks.landingPadFull && meta == 0) + { + padFound = true; + tile = world.getTileEntity(pos1); + + centerX = pos.getX() + i + 0.5F; + centerY = pos.getY() + 0.4F; + centerZ = pos.getZ() + j + 0.5F; + + break; + } + } + + if (padFound) + { + break; + } + } + + if (padFound) + { + if (!placeRocketOnPad(stack, world, tile, centerX, centerY, centerZ)) + { + return EnumActionResult.FAIL; + } + + if (!player.capabilities.isCreativeMode) + { + stack.shrink(1); + } + return EnumActionResult.SUCCESS; + } else + { + return EnumActionResult.PASS; + } + } + } + + public static boolean placeRocketOnPad(ItemStack stack, World world, TileEntity tile, float centerX, float centerY, float centerZ) + { + // Check whether there is already a rocket on the pad + if (tile instanceof TileEntityLandingPad) + { + if (((TileEntityLandingPad) tile).getDockedEntity() != null) + { + return false; + } + } else + { + return false; + } + + EntityAutoRocket rocket; + + if (stack.getItemDamage() < 10) + { + rocket = new EntityTier2Rocket(world, centerX, centerY, centerZ, EnumRocketType.values()[stack.getItemDamage()]); + } else + { + rocket = new EntityCargoRocket(world, centerX, centerY, centerZ, EnumRocketType.values()[stack.getItemDamage() - 10]); + } + + rocket.setPosition(rocket.posX, rocket.posY + rocket.getOnPadYOffset(), rocket.posZ); + world.spawnEntity(rocket); + + if (((IRocketType) rocket).getType().getPreFueled()) + { + if (rocket instanceof EntityTieredRocket) + { + ((EntityTieredRocket) rocket).fuelTank.fill(new FluidStack(GCFluids.fluidFuel, rocket.getMaxFuel()), true); + } else + { + ((EntityCargoRocket) rocket).fuelTank.fill(new FluidStack(GCFluids.fluidFuel, rocket.getMaxFuel()), true); + } + } else if (stack.hasTagCompound() && stack.getTagCompound().hasKey("RocketFuel")) + { + rocket.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, stack.getTagCompound().getInteger("RocketFuel")), true); + } + + return true; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < EnumRocketType.values().length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + + for (int i = 11; i < 10 + EnumRocketType.values().length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + EnumRocketType type; + + if (par1ItemStack.getItemDamage() < 10) + { + type = EnumRocketType.values()[par1ItemStack.getItemDamage()]; + } else + { + type = EnumRocketType.values()[par1ItemStack.getItemDamage() - 10]; + } + + if (!type.getTooltip().isEmpty()) + { + tooltip.add(type.getTooltip()); + } + + if (type.getPreFueled()) + { + tooltip.add(EnumColor.RED + "\u00a7o" + GCCoreUtil.translate("gui.creative_only.desc")); + } + + if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("RocketFuel")) + { + EntityAutoRocket rocket; + + if (par1ItemStack.getItemDamage() < 10) + { + rocket = new EntityTier2Rocket(FMLClientHandler.instance().getWorldClient(), 0, 0, 0, EnumRocketType.values()[par1ItemStack.getItemDamage()]); + } else + { + rocket = new EntityCargoRocket(FMLClientHandler.instance().getWorldClient(), 0, 0, 0, EnumRocketType.values()[par1ItemStack.getItemDamage() - 10]); + } + + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + par1ItemStack.getTagCompound().getInteger("RocketFuel") + " / " + rocket.fuelTank.getCapacity()); + } + + if (par1ItemStack.getItemDamage() >= 10) + { + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate("gui.requires_controller.desc")); + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + return super.getTranslationKey(par1ItemStack) + (par1ItemStack.getItemDamage() < 10 ? ".t2Rocket" : ".cargo_rocket"); + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ROCKET; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/MarsItems.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/MarsItems.java new file mode 100644 index 00000000..eae7a8ed --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/MarsItems.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.Item.ToolMaterial; +import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraftforge.common.util.EnumHelper; + +public class MarsItems +{ + + public static Item marsItemBasic; + public static Item deshPickaxe; + public static Item deshPickSlime; + public static Item deshAxe; + public static Item deshHoe; + public static Item deshSpade; + public static Item deshSword; + public static Item deshHelmet; + public static Item deshChestplate; + public static Item deshLeggings; + public static Item deshBoots; + public static Item rocketMars; + public static Item key; + public static Item schematic; + public static Item carbonFragments; + public static Item bucketSludge; + + public static ArmorMaterial ARMORDESH = EnumHelper.addArmorMaterial("DESH", "", 42, new int[] + {4, 7, 9, 4}, 12, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 3.0F); + public static ToolMaterial TOOLDESH = EnumHelper.addToolMaterial("DESH", 3, 1024, 5.0F, 2.5F, 10); + + public static void initItems() + { + MarsItems.marsItemBasic = new ItemBasicMars("item_basic_mars"); + MarsItems.deshPickaxe = new ItemPickaxeMars(MarsItems.TOOLDESH).setTranslationKey("desh_pick"); + MarsItems.deshPickSlime = new ItemPickaxeStickyMars(MarsItems.TOOLDESH).setTranslationKey("desh_pick_slime"); + MarsItems.deshAxe = new ItemAxeMars(MarsItems.TOOLDESH).setTranslationKey("desh_axe"); + MarsItems.deshHoe = new ItemHoeMars(MarsItems.TOOLDESH).setTranslationKey("desh_hoe"); + MarsItems.deshSpade = new ItemSpadeMars(MarsItems.TOOLDESH).setTranslationKey("desh_spade"); + MarsItems.deshSword = new ItemSwordMars(MarsItems.TOOLDESH).setTranslationKey("desh_sword"); + MarsItems.deshHelmet = new ItemArmorMars(MarsItems.ARMORDESH, 7, EntityEquipmentSlot.HEAD).setTranslationKey("desh_helmet"); + MarsItems.deshChestplate = new ItemArmorMars(MarsItems.ARMORDESH, 7, EntityEquipmentSlot.CHEST).setTranslationKey("desh_chestplate"); + MarsItems.deshLeggings = new ItemArmorMars(MarsItems.ARMORDESH, 7, EntityEquipmentSlot.LEGS).setTranslationKey("desh_leggings"); + MarsItems.deshBoots = new ItemArmorMars(MarsItems.ARMORDESH, 7, EntityEquipmentSlot.FEET).setTranslationKey("desh_boots"); + MarsItems.rocketMars = new ItemTier2Rocket().setTranslationKey("rocket_t2"); + MarsItems.key = new ItemKeyMars().setTranslationKey("key"); + MarsItems.schematic = new ItemSchematicTier2().setTranslationKey("schematic"); + MarsItems.carbonFragments = new ItemCarbonFragments().setTranslationKey("carbon_fragments"); + + MarsItems.registerItems(); + MarsItems.registerHarvestLevels(); + } + + public static void registerHarvestLevels() + { + MarsItems.deshPickaxe.setHarvestLevel("pickaxe", 4); + MarsItems.deshPickSlime.setHarvestLevel("pickaxe", 4); + MarsItems.deshAxe.setHarvestLevel("axe", 4); + MarsItems.deshSpade.setHarvestLevel("shovel", 4); + } + + private static void registerItems() + { + MarsItems.registerItem(MarsItems.carbonFragments); + MarsItems.registerItem(MarsItems.marsItemBasic); + MarsItems.registerItem(MarsItems.deshPickaxe); + MarsItems.registerItem(MarsItems.deshPickSlime); + MarsItems.registerItem(MarsItems.deshAxe); + MarsItems.registerItem(MarsItems.deshHoe); + MarsItems.registerItem(MarsItems.deshSpade); + MarsItems.registerItem(MarsItems.deshSword); + MarsItems.registerItem(MarsItems.deshHelmet); + MarsItems.registerItem(MarsItems.deshChestplate); + MarsItems.registerItem(MarsItems.deshLeggings); + MarsItems.registerItem(MarsItems.deshBoots); + MarsItems.registerItem(MarsItems.rocketMars); + MarsItems.registerItem(MarsItems.key); + MarsItems.registerItem(MarsItems.schematic); + } + + public static void registerItem(Item item) + { + String name = item.getTranslationKey().substring(5); + GCCoreUtil.registerGalacticraftItem(name, item); + GalacticraftCore.itemListTrue.add(item); + item.setRegistryName(name); + GalacticraftPlanets.proxy.postRegisterItem(item); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/network/PacketSimpleMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/network/PacketSimpleMars.java new file mode 100644 index 00000000..af9b819e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/network/PacketSimpleMars.java @@ -0,0 +1,378 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.network; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.event.EventWakePlayer; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketBase; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiLaunchControllerAdvanced; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSlimelingInventory; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityCryogenicChamber; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.util.MarsUtil; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PacketSimpleMars extends PacketBase +{ + + public static enum EnumSimplePacketMars + { + + // SERVER + S_UPDATE_SLIMELING_DATA(Side.SERVER, Integer.class, Integer.class, String.class), + S_WAKE_PLAYER(Side.SERVER), + S_UPDATE_ADVANCED_GUI(Side.SERVER, Integer.class, BlockPos.class, Integer.class), + S_UPDATE_CARGO_ROCKET_STATUS(Side.SERVER, Integer.class, Integer.class), + S_SWITCH_LAUNCH_CONTROLLER_GUI(Side.SERVER, BlockPos.class, Integer.class), + // CLIENT + C_OPEN_CUSTOM_GUI(Side.CLIENT, Integer.class, Integer.class, Integer.class), + C_OPEN_CUSTOM_GUI_TILE(Side.CLIENT, Integer.class, Integer.class, BlockPos.class), + C_BEGIN_CRYOGENIC_SLEEP(Side.CLIENT, BlockPos.class); + + private Side targetSide; + private Class[] decodeAs; + + private EnumSimplePacketMars(Side targetSide, Class... decodeAs) + { + this.targetSide = targetSide; + this.decodeAs = decodeAs; + } + + public Side getTargetSide() + { + return this.targetSide; + } + + public Class[] getDecodeClasses() + { + return this.decodeAs; + } + } + + private EnumSimplePacketMars type; + private List data; + + public PacketSimpleMars() + { + super(); + } + + public PacketSimpleMars(EnumSimplePacketMars packetType, int dimID, Object[] data) + { + this(packetType, dimID, Arrays.asList(data)); + } + + public PacketSimpleMars(EnumSimplePacketMars packetType, int dimID, List data) + { + super(dimID); + + if (packetType.getDecodeClasses().length != data.size()) + { + GalacticraftPlanets.logger.info("Mars Simple Packet found data length different than packet type: " + packetType.name()); + } + + this.type = packetType; + this.data = data; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type.ordinal()); + + try + { + NetworkUtil.encodeData(buffer, this.data); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = EnumSimplePacketMars.values()[buffer.readInt()]; + + if (this.type.getDecodeClasses().length > 0) + { + this.data = NetworkUtil.decodeData(this.type.getDecodeClasses(), buffer); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void handleClientSide(EntityPlayer player) + { + EntityPlayerSP playerBaseClient = null; + + if (player instanceof EntityPlayerSP) + { + playerBaseClient = (EntityPlayerSP) player; + } + + switch (this.type) + { + case C_OPEN_CUSTOM_GUI: + int entityID = 0; + Entity entity = null; + + switch ((Integer) this.data.get(1)) + { + case 0: + entityID = (Integer) this.data.get(2); + entity = player.world.getEntityByID(entityID); + + if (entity != null && entity instanceof EntitySlimeling) + { + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiSlimelingInventory(player, (EntitySlimeling) entity)); + } + + player.openContainer.windowId = (Integer) this.data.get(0); + break; + case 1: + entityID = (Integer) this.data.get(2); + entity = player.world.getEntityByID(entityID); + + if (entity != null && entity instanceof EntityCargoRocket) + { + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiCargoRocket(player.inventory, (EntityCargoRocket) entity)); + } + + player.openContainer.windowId = (Integer) this.data.get(0); + break; + } + + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_CONTAINER_SLOT_REFRESH, GCCoreUtil.getDimensionID(player.world), new Object[] + {player.openContainer.windowId})); + break; + case C_OPEN_CUSTOM_GUI_TILE: + BlockPos pos; + TileEntity tile; + + switch ((Integer) this.data.get(1)) + { + case 0: + pos = (BlockPos) this.data.get(2); + tile = player.world.getTileEntity(pos); + + if (tile != null && tile instanceof TileEntityLaunchController) + { + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiLaunchControllerAdvanced(player.inventory, (TileEntityLaunchController) tile)); + } + + player.openContainer.windowId = (Integer) this.data.get(0); + break; + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_CONTAINER_SLOT_REFRESH, GCCoreUtil.getDimensionID(player.world), new Object[] + {player.openContainer.windowId})); + break; + case C_BEGIN_CRYOGENIC_SLEEP: + pos = (BlockPos) this.data.get(0); + tile = player.world.getTileEntity(pos); + + if (tile instanceof TileEntityCryogenicChamber) + { + ((TileEntityCryogenicChamber) tile).sleepInBedAt(player, pos.getX(), pos.getY(), pos.getZ()); + } + default: + break; + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + switch (this.type) + { + case S_UPDATE_SLIMELING_DATA: + Entity entity = player.world.getEntityByID((Integer) this.data.get(0)); + + if (entity instanceof EntitySlimeling) + { + EntitySlimeling slimeling = (EntitySlimeling) entity; + + int subType = (Integer) this.data.get(1); + + switch (subType) + { + case 0: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.setSittingAI(!slimeling.isSitting()); + slimeling.setJumping(false); + slimeling.getNavigator().clearPath(); + slimeling.setAttackTarget(null); + } + break; + case 1: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.slimelingName = (String) this.data.get(2); + slimeling.setName(slimeling.slimelingName); + } + break; + case 2: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.age += 5000; + } + break; + case 3: + if (!slimeling.isInLove() && player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.setInLove(playerBase); + } + break; + case 4: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.attackDamage = Math.min(slimeling.attackDamage + 0.1F, 1.0F); + } + break; + case 5: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.setHealth(slimeling.getHealth() + 5.0F); + } + break; + case 6: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + MarsUtil.openSlimelingInventory(playerBase, slimeling); + } + break; + } + } + break; + case S_WAKE_PLAYER: + BlockPos c = playerBase.bedLocation; + + if (c != null) + { + EventWakePlayer event = new EventWakePlayer(playerBase, c, true, true, false, true); + MinecraftForge.EVENT_BUS.post(event); + playerBase.wakeUpPlayer(true, true, false); + } + break; + case S_UPDATE_ADVANCED_GUI: + TileEntity tile = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.setFrequency((Integer) this.data.get(2)); + } + break; + case 1: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.setLaunchDropdownSelection((Integer) this.data.get(2)); + } + break; + case 2: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.setDestinationFrequency((Integer) this.data.get(2)); + } + break; + case 3: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.launchPadRemovalDisabled = (Integer) this.data.get(2) == 1; + } + break; + case 4: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.setLaunchSchedulingEnabled((Integer) this.data.get(2) == 1); + } + break; + case 5: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.requiresClientUpdate = true; + } + break; + default: + break; + } + break; + case S_UPDATE_CARGO_ROCKET_STATUS: + Entity entity2 = player.world.getEntityByID((Integer) this.data.get(0)); + + if (entity2 instanceof EntityCargoRocket) + { + EntityCargoRocket rocket = (EntityCargoRocket) entity2; + + int subType = (Integer) this.data.get(1); + + switch (subType) + { + default: + rocket.statusValid = rocket.checkLaunchValidity(); + break; + } + } + break; + case S_SWITCH_LAUNCH_CONTROLLER_GUI: + BlockPos pos = (BlockPos) this.data.get(0); + TileEntity tile1 = player.world.getTileEntity(pos); + if (tile1 instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile1; + switch ((Integer) this.data.get(1)) + { + case 0: + MarsUtil.openAdvancedLaunchController(playerBase, launchController); + break; + case 1: + player.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_MARS, player.world, pos.getX(), pos.getY(), pos.getZ()); + break; + } + } + break; + default: + break; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/recipe/RecipeManagerMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/recipe/RecipeManagerMars.java new file mode 100644 index 00000000..83ecd48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/recipe/RecipeManagerMars.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.recipe; + +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.util.MarsUtil; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.util.NonNullList; +import net.minecraftforge.oredict.OreDictionary; + +public class RecipeManagerMars +{ + + public static void loadCompatibilityRecipes() + { + } + + public static void addUniversalRecipes() + { + OreDictionary.registerOre("ingotDesh", new ItemStack(MarsItems.marsItemBasic, 1, 2)); + OreDictionary.registerOre("compressedDesh", new ItemStack(MarsItems.marsItemBasic, 1, 5)); + + CompressorRecipes.addShapelessRecipe(new ItemStack(MarsItems.marsItemBasic, 1, 3), new ItemStack(GCItems.heavyPlatingTier1), new ItemStack(GCItems.itemBasicMoon, 1, 1)); + CompressorRecipes.addShapelessRecipe(new ItemStack(MarsItems.marsItemBasic, 1, 5), new ItemStack(MarsItems.marsItemBasic, 1, 2)); + + // Smelting + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsItems.marsItemBasic, 1, 0), new ItemStack(MarsItems.marsItemBasic, 1, 2), 0.2F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 4), new ItemStack(MarsBlocks.marsBlock, 1, 9), 0.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 0), new ItemStack(GCItems.basicItem, 1, 3), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 1), new ItemStack(GCItems.basicItem, 1, 4), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 2), new ItemStack(MarsItems.marsItemBasic, 1, 2), 0.2F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 3), new ItemStack(Items.IRON_INGOT), 0.2F); + FurnaceRecipes.instance().addSmeltingRecipeForBlock(Blocks.PLANKS, new ItemStack(MarsItems.carbonFragments), 0.0F); + + // Schematic + HashMap input = new HashMap<>(); + input.put(1, new ItemStack(GCItems.partNoseCone)); + input.put(2, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(3, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(4, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(5, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(6, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(7, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(8, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(9, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(10, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(11, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(12, new ItemStack(GCItems.rocketEngine, 1, 1)); + input.put(13, new ItemStack(GCItems.partFins)); + input.put(14, new ItemStack(GCItems.partFins)); + input.put(15, new ItemStack(GCItems.rocketEngine)); + input.put(16, new ItemStack(GCItems.rocketEngine, 1, 1)); + input.put(17, new ItemStack(GCItems.partFins)); + input.put(18, new ItemStack(GCItems.partFins)); + input.put(19, ItemStack.EMPTY); + input.put(20, ItemStack.EMPTY); + input.put(21, ItemStack.EMPTY); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 0), input); + + NonNullList woodChests = OreDictionary.getOres("chestWood"); + HashMap input2; + + for (ItemStack woodChest : woodChests) + { + input2 = new HashMap<>(input); + input2.put(19, woodChest); + input2.put(20, ItemStack.EMPTY); + input2.put(21, ItemStack.EMPTY); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, woodChest); + input2.put(21, ItemStack.EMPTY); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, ItemStack.EMPTY); + input2.put(21, woodChest); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(19, woodChest); + input2.put(20, woodChest); + input2.put(21, ItemStack.EMPTY); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(19, woodChest); + input2.put(20, ItemStack.EMPTY); + input2.put(21, woodChest); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, woodChest); + input2.put(21, woodChest); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(19, woodChest); + input2.put(20, woodChest); + input2.put(21, woodChest); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 3), input2); + } + + // + + input = new HashMap<>(); + input.put(1, new ItemStack(GCItems.partNoseCone)); + input.put(2, new ItemStack(GCItems.basicItem, 1, 14)); + input.put(3, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(4, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(5, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(6, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(7, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(8, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(9, new ItemStack(GCItems.partFins)); + input.put(10, new ItemStack(GCItems.partFins)); + input.put(11, new ItemStack(GCItems.rocketEngine)); + input.put(12, new ItemStack(GCItems.partFins)); + input.put(13, new ItemStack(GCItems.partFins)); + + for (ItemStack woodChest : woodChests) + { + input2 = new HashMap<>(input); + input2.put(14, woodChest); + input2.put(15, ItemStack.EMPTY); + input2.put(16, ItemStack.EMPTY); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 11), input2); + + input2 = new HashMap<>(input); + input2.put(14, ItemStack.EMPTY); + input2.put(15, woodChest); + input2.put(16, ItemStack.EMPTY); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 11), input2); + + input2 = new HashMap<>(input); + input2.put(14, ItemStack.EMPTY); + input2.put(15, ItemStack.EMPTY); + input2.put(16, woodChest); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 11), input2); + + input2 = new HashMap<>(input); + input2.put(14, woodChest); + input2.put(15, woodChest); + input2.put(16, ItemStack.EMPTY); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 12), input2); + + input2 = new HashMap<>(input); + input2.put(14, woodChest); + input2.put(15, ItemStack.EMPTY); + input2.put(16, woodChest); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 12), input2); + + input2 = new HashMap<>(input); + input2.put(14, ItemStack.EMPTY); + input2.put(15, woodChest); + input2.put(16, woodChest); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 12), input2); + + input2 = new HashMap<>(input); + input2.put(14, woodChest); + input2.put(15, woodChest); + input2.put(16, woodChest); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 13), input2); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicCargoRocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicCargoRocket.java new file mode 100644 index 00000000..ed634dff --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicCargoRocket.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.schematic; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSchematicCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSchematicCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicCargoRocket implements ISchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerMars.idSchematicCargoRocket; + } + + @Override + public int getGuiID() + { + return GuiIdsPlanets.NASA_WORKBENCH_CARGO_ROCKET + Constants.MOD_ID_PLANETS.hashCode(); + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(MarsItems.schematic, 1, 1); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicCargoRocket(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicCargoRocket(player.inventory, pos); + } + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicTier2Rocket.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicTier2Rocket.java new file mode 100644 index 00000000..9614297c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicTier2Rocket.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.schematic; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSchematicTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSchematicTier2Rocket; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicTier2Rocket implements ISchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerMars.idSchematicRocketT2; + } + + @Override + public int getGuiID() + { + return GuiIdsPlanets.NASA_WORKBENCH_TIER_2_ROCKET + Constants.MOD_ID_PLANETS.hashCode(); + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(GCItems.schematic, 1, 1); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicTier2Rocket(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicTier2Rocket(player.inventory, pos); + } + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityCryogenicChamber.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityCryogenicChamber.java new file mode 100644 index 00000000..d51a4bc1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityCryogenicChamber.java @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Biomes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityCryogenicChamber extends TileEntityMulti implements IMultiBlock +{ + + public boolean isOccupied; + private boolean initialised; + + public TileEntityCryogenicChamber() + { + super(null); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(getPos().getX() - 1, getPos().getY(), getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 3, getPos().getZ() + 2); + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + if (this.world.isRemote) + { + return false; + } + + EntityPlayer.SleepResult enumstatus = this.sleepInBedAt(entityPlayer, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + + switch (enumstatus) + { + case OK: + ((EntityPlayerMP) entityPlayer).connection.setPlayerLocation(entityPlayer.posX, entityPlayer.posY, entityPlayer.posZ, entityPlayer.rotationYaw, entityPlayer.rotationPitch); + GalacticraftCore.packetPipeline.sendTo(new PacketSimpleMars(EnumSimplePacketMars.C_BEGIN_CRYOGENIC_SLEEP, GCCoreUtil.getDimensionID(entityPlayer.world), new Object[] + {this.getPos()}), (EntityPlayerMP) entityPlayer); + return true; + case NOT_POSSIBLE_NOW: + GCPlayerStats stats = GCPlayerStats.get(entityPlayer); + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.cryogenic.chat.cant_use", stats.getCryogenicChamberCooldown() / 20))); + return false; + default: + return false; + } + } + + public EntityPlayer.SleepResult sleepInBedAt(EntityPlayer entityPlayer, int par1, int par2, int par3) + { + if (!this.world.isRemote) + { + if (entityPlayer.isPlayerSleeping() || !entityPlayer.isEntityAlive()) + { + return EntityPlayer.SleepResult.OTHER_PROBLEM; + } + + if (this.world.getBiome(new BlockPos(par1, par2, par3)) == Biomes.HELL) + { + return EntityPlayer.SleepResult.NOT_POSSIBLE_HERE; + } + + GCPlayerStats stats = GCPlayerStats.get(entityPlayer); + if (stats.getCryogenicChamberCooldown() > 0) + { + return EntityPlayer.SleepResult.NOT_POSSIBLE_NOW; + } + } + + if (entityPlayer.isRiding()) + { + entityPlayer.dismountRidingEntity(); + } + + entityPlayer.setPosition(this.getPos().getX() + 0.5F, this.getPos().getY() + 1.9F, this.getPos().getZ() + 0.5F); + + entityPlayer.sleeping = true; + entityPlayer.sleepTimer = 0; + entityPlayer.bedLocation = new BlockPos(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + entityPlayer.motionX = entityPlayer.motionZ = entityPlayer.motionY = 0.0D; + + if (!this.world.isRemote) + { + this.world.updateAllPlayersSleepingFlag(); + } + + return EntityPlayer.SleepResult.OK; + } + +// @Override +// public boolean canUpdate() +// { +// return true; +// } + + @Override + public void update() + { + if (!this.initialised) + { + this.initialised = this.initialiseMultiTiles(this.getPos(), this.world); + } + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.CRYO_CHAMBER; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + + for (int y = 1; y < 3; y++) + { + if (placedPosition.getY() + y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), placedPosition.getY() + y, placedPosition.getZ())); + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new LinkedList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && (EnumBlockMultiType) stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.CRYO_CHAMBER) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.isOccupied = nbt.getBoolean("IsChamberOccupied"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("IsChamberOccupied", this.isOccupied); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityDungeonSpawnerMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityDungeonSpawnerMars.java new file mode 100644 index 00000000..ac490bc1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityDungeonSpawnerMars.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.SoundCategory; + +public class TileEntityDungeonSpawnerMars extends TileEntityDungeonSpawner +{ + + public TileEntityDungeonSpawnerMars() + { + super(EntityCreeperBoss.class); + } + + @Override + public List> getDisabledCreatures() + { + List> list = new ArrayList>(); + list.add(EntityEvolvedSkeleton.class); + list.add(EntityEvolvedZombie.class); + list.add(EntityEvolvedSpider.class); + return list; + } + + @Override + public void playSpawnSound(Entity entity) + { + this.world.playSound(null, entity.posX, entity.posY, entity.posZ, GCSounds.scaryScape, SoundCategory.AMBIENT, 9.0F, 1.4F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityElectrolyzer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityElectrolyzer.java new file mode 100644 index 00000000..bdb0e9d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityElectrolyzer.java @@ -0,0 +1,763 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenReceiver; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenStorage; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.NetworkHelper; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMarsT2; + +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.common.capabilities.Capabilities; + +@Interface(iface = "mekanism.api.gas.IGasHandler", modid = "mekanism") +public class TileEntityElectrolyzer extends TileBaseElectricBlockWithInventory implements ISidedInventory, IDisableableMachine, IFluidHandlerWrapper, IOxygenStorage, IOxygenReceiver, IGasHandler +{ + + private final int tankCapacity = 4000; + + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank waterTank = new FluidTank(this.tankCapacity); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank liquidTank = new FluidTank(this.tankCapacity); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank liquidTank2 = new FluidTank(this.tankCapacity); + + public int processTimeRequired = 3; + @NetworkedField(targetSide = Side.CLIENT) + public int processTicks = 0; + + public TileEntityElectrolyzer() + { + super("tile.mars_machine.6.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 150 : 120); + this.setTierGC(2); + this.inventory = NonNullList.withSize(4, ItemStack.EMPTY); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (EnergyUtil.checkMekGasHandler(capability)) + return true; + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (EnergyUtil.checkMekGasHandler(capability)) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + + return super.getCapability(capability, facing); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + final FluidStack liquid = FluidUtil.getFluidContained(this.getInventory().get(1)); + if (FluidUtil.isFluidStrict(liquid, FluidRegistry.WATER.getName())) + { + FluidUtil.loadFromContainer(waterTank, FluidRegistry.WATER, this.getInventory(), 1, liquid.amount); + } + + // Only drain with atmospheric valve + checkFluidTankTransfer(2, this.liquidTank); + checkFluidTankTransfer(3, this.liquidTank2); + + if (this.hasEnoughEnergyToRun && this.canProcess()) + { + // 50% extra speed boost for Tier 2 machine if powered by Tier 2 + // power + if (this.tierGC == 2) + { + this.processTimeRequired = Math.max(1, 4 - this.poweredByTierGC); + } + + if (this.processTicks == 0) + { + this.processTicks = this.processTimeRequired; + } + else + { + if (--this.processTicks <= 0) + { + this.doElectrolysis(); + this.processTicks = this.canProcess() ? this.processTimeRequired : 0; + } + } + } + else + { + this.processTicks = 0; + } + + this.produceOxygen(this.getOxygenOutputDirection()); + this.produceHydrogen(this.getHydrogenOutputDirection()); + } + } + + private void doElectrolysis() + { + // Can't be called if the gasTank fluid is null + final int waterAmount = this.waterTank.getFluid().amount; + if (waterAmount == 0) + { + return; + } + + this.placeIntoFluidTanks(2); + this.waterTank.drain(1, true); + } + + private int placeIntoFluidTanks(int amountToDrain) + { + final int fuelSpace = this.liquidTank.getCapacity() - this.liquidTank.getFluidAmount(); + final int fuelSpace2 = this.liquidTank2.getCapacity() - this.liquidTank2.getFluidAmount(); + int amountToDrain2 = amountToDrain * 2; + + if (amountToDrain > fuelSpace) + { + amountToDrain = fuelSpace; + } + this.liquidTank.fill(FluidRegistry.getFluidStack("oxygen", amountToDrain), true); + + if (amountToDrain2 > fuelSpace2) + { + amountToDrain2 = fuelSpace2; + } + this.liquidTank2.fill(FluidRegistry.getFluidStack("hydrogen", amountToDrain2), true); + + return amountToDrain; + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + if (!this.getInventory().get(slot).isEmpty() && this.getInventory().get(slot).getItem() instanceof ItemAtmosphericValve) + { + tank.drain(4, true); + } + } + + public int getScaledGasLevel(int i) + { + return this.waterTank.getFluid() != null ? this.waterTank.getFluid().amount * i / this.waterTank.getCapacity() : 0; + } + + public int getScaledFuelLevel(int i) + { + return this.liquidTank.getFluid() != null ? this.liquidTank.getFluid().amount * i / this.liquidTank.getCapacity() : 0; + } + + public int getScaledFuelLevel2(int i) + { + return this.liquidTank2.getFluid() != null ? this.liquidTank2.getFluid().amount * i / this.liquidTank2.getCapacity() : 0; + } + + public boolean canProcess() + { + if (this.waterTank.getFluid() == null || this.waterTank.getFluid().amount <= 0 || this.getDisabled(0)) + { + return false; + } + + boolean tank1HasSpace = this.liquidTank.getFluidAmount() < this.liquidTank.getCapacity(); + boolean tank2HasSpace = this.liquidTank2.getFluidAmount() < this.liquidTank2.getCapacity(); + + return tank1HasSpace || tank2HasSpace; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("processTicks"); + + if (nbt.hasKey("waterTank")) + { + this.waterTank.readFromNBT(nbt.getCompoundTag("waterTank")); + } + + if (nbt.hasKey("gasTank")) + { + this.liquidTank.readFromNBT(nbt.getCompoundTag("gasTank")); + } + if (nbt.hasKey("gasTank2")) + { + this.liquidTank2.readFromNBT(nbt.getCompoundTag("gasTank2")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("processTicks", this.processTicks); + + if (this.waterTank.getFluid() != null) + { + nbt.setTag("waterTank", this.waterTank.writeToNBT(new NBTTagCompound())); + } + + if (this.liquidTank.getFluid() != null) + { + nbt.setTag("gasTank", this.liquidTank.writeToNBT(new NBTTagCompound())); + } + if (this.liquidTank2.getFluid() != null) + { + nbt.setTag("gasTank2", this.liquidTank2.writeToNBT(new NBTTagCompound())); + } + + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return itemstack.getItem() == Items.WATER_BUCKET; + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 1: + return itemstack.getItem() == Items.BUCKET; + default: + return false; + } + } + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + Item item = itemstack.getItem(); + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItem(item); + case 1: + return item == Items.BUCKET || item == Items.WATER_BUCKET; + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public double getPacketRange() + { + return 320.0D; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.DOWN; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + if (from == this.getHydrogenOutputDirection()) + { + return this.liquidTank2.getFluid() != null && this.liquidTank2.getFluidAmount() > 0; + } + if (from == this.getOxygenOutputDirection()) + { + return this.liquidTank.getFluid() != null && this.liquidTank.getFluidAmount() > 0; + } + + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + if (from == this.getHydrogenOutputDirection()) + { + if (resource != null && resource.isFluidEqual(this.liquidTank2.getFluid())) + { + return this.liquidTank2.drain(resource.amount, doDrain); + } + } + + if (from == this.getOxygenOutputDirection()) + { + if (resource != null && resource.isFluidEqual(this.liquidTank.getFluid())) + { + return this.liquidTank.drain(resource.amount, doDrain); + } + } + + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + if (from == this.getHydrogenOutputDirection()) + { + return this.liquidTank2.drain(maxDrain, doDrain); + } + + if (from == this.getOxygenOutputDirection()) + { + return this.liquidTank.drain(maxDrain, doDrain); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (from == this.byIndex().rotateY()) + { + // Can fill with water + return fluid == null || fluid.getName().equals(FluidRegistry.WATER.getName()); + } + + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (resource != null && this.canFill(from, resource.getFluid())) + { + used = this.waterTank.fill(resource, doFill); + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTankInfo[] tankInfo = new FluidTankInfo[] {}; + + if (from == this.byIndex().rotateY()) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.waterTank)}; + } + else if (from == this.getHydrogenOutputDirection()) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.liquidTank2)}; + } + else if (from == this.getOxygenOutputDirection()) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.liquidTank)}; + } + + return tankInfo; + } + + @Override + public int getBlockMetadata() + { + return getBlockType().getMetaFromState(this.world.getBlockState(getPos())); + } + + @Override + @Optional.Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + return 0; + } + + @Optional.Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return 0; + } + + @Override + @Optional.Method(modid = "mekanism") + public GasStack drawGas(EnumFacing from, int amount, boolean doTransfer) + { + if (from == this.getHydrogenOutputDirection() && this.liquidTank2.getFluid() != null) + { + int amountH = Math.min(8, this.liquidTank2.getFluidAmount()); + amountH = this.liquidTank2.drain(amountH, doTransfer).amount; + return new GasStack((Gas) EnergyConfigHandler.gasHydrogen, amountH); + } + else if (from == this.getOxygenOutputDirection() && this.liquidTank.getFluid() != null) + { + int amountO = Math.min(8, this.liquidTank.getFluidAmount()); + amountO = this.liquidTank.drain(amountO, doTransfer).amount; + return new GasStack((Gas) EnergyConfigHandler.gasOxygen, amountO); + } + return null; + } + + @Optional.Method(modid = "mekanism") + public GasStack drawGas(EnumFacing from, int amount) + { + return this.drawGas(from, amount, true); + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return false; + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing from, Gas type) + { + if (from == this.getHydrogenOutputDirection()) + { + return type.getName().equals("hydrogen"); + } + else if (from == this.getOxygenOutputDirection()) + { + return type.getName().equals("oxygen"); + } + return false; + } + + @Optional.Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing from) + { + if (from == this.getHydrogenOutputDirection()) + { + return true; + } + else if (from == this.getOxygenOutputDirection()) + { + return true; + } + return false; + } + + @Override + public void setOxygenStored(int amount) + { + this.liquidTank.setFluid(new FluidStack(AsteroidsModule.fluidOxygenGas, amount)); + } + + @Override + public int getOxygenStored() + { + return this.liquidTank.getFluidAmount(); + } + + public int getHydrogenStored() + { + return this.liquidTank2.getFluidAmount(); + } + + @Override + public int getMaxOxygenStored() + { + return this.liquidTank.getCapacity(); + } + + private EnumFacing getOxygenOutputDirection() + { + return this.byIndex().getOpposite(); + } + + private EnumFacing getHydrogenOutputDirection() + { + return this.byIndex().rotateYCCW(); + } + + private boolean produceOxygen(EnumFacing outputDirection) + { + int provide = this.getOxygenProvide(outputDirection); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).modifyPositionFromSide(outputDirection).getTileEntity(this.world); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int gasRequested = outputNetwork.getRequest(); + + if (gasRequested > 0) + { + int usedGas = outputNetwork.emitToBuffer(new FluidStack(GCFluids.fluidOxygenGas, Math.min(gasRequested, provide)), true); + + this.drawOxygen(usedGas, true); + return true; + } + } + else if (outputTile instanceof IOxygenReceiver) + { + float requestedOxygen = ((IOxygenReceiver) outputTile).getOxygenRequest(outputDirection.getOpposite()); + + if (requestedOxygen > 0) + { + int toSend = Math.min(this.getOxygenStored(), provide); + int acceptedOxygen = ((IOxygenReceiver) outputTile).receiveOxygen(outputDirection.getOpposite(), toSend, true); + this.drawOxygen(acceptedOxygen, true); + return true; + } + } + } + + return false; + } + + private boolean produceHydrogen(EnumFacing outputDirection) + { + int provide = this.getHydrogenProvide(outputDirection); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).modifyPositionFromSide(outputDirection).getTileEntity(this.world); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int gasRequested = outputNetwork.getRequest(); + + if (gasRequested > 0) + { + int usedGas = outputNetwork.emitToBuffer(new FluidStack(FluidRegistry.getFluid("hydrogen"), Math.min(gasRequested, provide)), true); + + this.drawHydrogen(usedGas, true); + return true; + } + } + else if (outputTile instanceof TileEntityMethaneSynthesizer) + { + float requestedHydrogen = ((TileEntityMethaneSynthesizer) outputTile).getHydrogenRequest(outputDirection.getOpposite()); + + if (requestedHydrogen > 0) + { + int toSend = Math.min(this.getHydrogenStored(), provide); + int acceptedHydrogen = ((TileEntityMethaneSynthesizer) outputTile).receiveHydrogen(outputDirection.getOpposite(), toSend, true); + this.drawHydrogen(acceptedHydrogen, true); + return true; + } + } + } + + return false; + } + + @Override + public int provideOxygen(EnumFacing from, int request, boolean doProvide) + { + if (this.getOxygenOutputDirection() == from) + { + return this.drawOxygen(request, doProvide); + } + + return 0; + } + + public int drawOxygen(int request, boolean doProvide) + { + if (request > 0) + { + int requestedOxygen = Math.min(request, this.liquidTank.getFluidAmount()); + + if (doProvide) + { + this.setOxygenStored(this.liquidTank.getFluidAmount() - requestedOxygen); + } + + return requestedOxygen; + } + + return 0; + } + + public int drawHydrogen(int request, boolean doProvide) + { + if (request > 0) + { + int currentHydrogen = this.liquidTank2.getFluidAmount(); + int requestedHydrogen = Math.min(request, currentHydrogen); + + if (doProvide) + { + this.liquidTank2.setFluid(new FluidStack(FluidRegistry.getFluid("hydrogen"), currentHydrogen - requestedHydrogen)); + } + + return requestedHydrogen; + } + + return 0; + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return this.getOxygenOutputDirection() == direction ? Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.getOxygenStored()) : 0; + } + + public int getHydrogenProvide(EnumFacing direction) + { + return this.getHydrogenOutputDirection() == direction ? Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.getHydrogenStored()) : 0; + } + + @Override + public boolean shouldPullOxygen() + { + return false; + } + + @Override + public int receiveOxygen(EnumFacing from, int receive, boolean doReceive) + { + return 0; + } + + @Override + public int getOxygenRequest(EnumFacing direction) + { + return 0; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + + if (type == NetworkType.FLUID) + { + return this.getOxygenOutputDirection() == direction || this.getHydrogenOutputDirection() == direction || direction == this.byIndex().rotateY(); + } + + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + + return false; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMarsT2) + { + return state.getValue(BlockMachineMarsT2.FACING); + } + return EnumFacing.NORTH; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityGasLiquefier.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityGasLiquefier.java new file mode 100644 index 00000000..1f44d124 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityGasLiquefier.java @@ -0,0 +1,896 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.ArrayList; +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.common.capabilities.Capabilities; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenReceiver; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.NetworkHelper; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMarsT2; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; + +@Interface(modid = CompatibilityManager.modidMekanism, iface = "mekanism.api.gas.IGasHandler") +public class TileEntityGasLiquefier extends TileBaseElectricBlockWithInventory implements IDisableableMachine, IFluidHandlerWrapper, IOxygenReceiver, IGasHandler +{ + + private final int tankCapacity = 2000; + public static final int OUTPUT_PER_SECOND = 1; + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank gasTank = new FluidTank(this.tankCapacity * 2); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank liquidTank = new FluidTank(this.tankCapacity); + + public int processTimeRequired = 3; + @NetworkedField(targetSide = Side.CLIENT) + public int processTicks = -10; + private int airProducts = -1; + + @NetworkedField(targetSide = Side.CLIENT) + public int gasTankType = -1; + @NetworkedField(targetSide = Side.CLIENT) + public int fluidTankType = -1; + + public enum TankGases + { + + METHANE(0, "methane", ConfigManagerCore.useOldFuelFluidID ? "fuelgc" : "fuel"), OXYGEN(1, "oxygen", "liquidoxygen"), NITROGEN(2, "nitrogen", "liquidnitrogen"), ARGON(3, "argon", "liquidargon"), AIR(4, "atmosphericgases", "xxyyzz"); + + int index; + String gas; + String liquid; + + TankGases(int id, String fluidname, String outputname) + { + this.index = id; + this.gas = fluidname; + this.liquid = outputname; + } + } + + public TileEntityGasLiquefier() + { + super("tile.mars_machine.4.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 60); + this.setTierGC(2); + this.inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + return true; + } + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + } + + return super.getCapability(capability, facing); + } + + @Override + public void invalidate() + { + super.invalidate(); + } + + @Override + public void update() + { + super.update(); + + if (this.airProducts == -1) + { + this.airProducts = this.getAirProducts(); + } + + if (!this.world.isRemote) + { + FluidStack currentgas = this.gasTank.getFluid(); + if (currentgas == null || currentgas.amount <= 0) + { + this.gasTankType = -1; + } else + { + this.gasTankType = this.getIdFromName(currentgas.getFluid().getName()); + } + + // If somehow it has air in an airless dimension, flush it out + if (this.airProducts == 0 && this.gasTankType == TankGases.AIR.index) + { + this.gasTank.drain(this.gasTank.getFluidAmount(), true); + } + + FluidStack currentLiquid = this.liquidTank.getFluid(); + if (currentLiquid == null || currentLiquid.amount == 0) + { + this.fluidTankType = -1; + } else + { + this.fluidTankType = this.getProductIdFromName(currentLiquid.getFluid().getName()); + } + + // First, see if any gas needs to be put into the gas storage + ItemStack inputCanister = getInventory().get(1); + if (!inputCanister.isEmpty()) + { + if (inputCanister.getItem() instanceof ItemAtmosphericValve && this.airProducts > 0) + { + // Air -> Air tank + if (this.gasTankType == -1 || (this.gasTankType == TankGases.AIR.index && this.gasTank.getFluid().amount < this.gasTank.getCapacity())) + { + IBlockState stateAbove = this.world.getBlockState(getPos().up()); + if (stateAbove.getMaterial() == Material.AIR && stateAbove.getBlock() != GCBlocks.breatheableAir && stateAbove.getBlock() != GCBlocks.brightBreatheableAir) + { + FluidStack gcAtmosphere = FluidRegistry.getFluidStack(TankGases.AIR.gas, 4); + this.gasTank.fill(gcAtmosphere, true); + this.gasTankType = TankGases.AIR.index; + } + } + } else if (inputCanister.getItem() instanceof ItemCanisterGeneric) + { + int amount = ItemCanisterGeneric.EMPTY - inputCanister.getItemDamage(); + if (amount > 0) + { + Item canisterType = inputCanister.getItem(); + FluidStack canisterGas = null; + int factor = 1; + if (this.gasTankType <= 0 && canisterType == AsteroidsItems.methaneCanister) + { + this.gasTankType = TankGases.METHANE.index; + canisterGas = FluidRegistry.getFluidStack(TankGases.METHANE.gas, amount); + } + if ((this.gasTankType == TankGases.OXYGEN.index || this.gasTankType == -1) && canisterType == AsteroidsItems.canisterLOX) + { + this.gasTankType = TankGases.OXYGEN.index; + canisterGas = FluidRegistry.getFluidStack(TankGases.OXYGEN.gas, amount * 2); + factor = 2; + } + if ((this.gasTankType == TankGases.NITROGEN.index || this.gasTankType == -1) && canisterType == AsteroidsItems.canisterLN2) + { + this.gasTankType = TankGases.NITROGEN.index; + canisterGas = FluidRegistry.getFluidStack(TankGases.NITROGEN.gas, amount * 2); + factor = 2; + } + + if (canisterGas != null) + { + int used = this.gasTank.fill(canisterGas, true) / factor; + if (used == amount) + { + getInventory().set(1, new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY)); + } else + { + getInventory().set(1, new ItemStack(canisterType, 1, ItemCanisterGeneric.EMPTY - amount + used)); + } + } + } + } else + { + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(inputCanister); + if (liquid != null && liquid.amount > 0) + { + String inputName = FluidRegistry.getFluidName(liquid); + // Methane -> Methane tank + if (this.gasTankType <= 0 && inputName.contains("methane")) + { + if (currentgas == null || currentgas.amount + liquid.amount <= this.gasTank.getCapacity()) + { + FluidStack gcMethane = FluidRegistry.getFluidStack(TankGases.METHANE.gas, liquid.amount); + this.gasTank.fill(gcMethane, true); + this.gasTankType = 0; + ItemStack stack = FluidUtil.getUsedContainer(inputCanister); + getInventory().set(1, stack == null ? ItemStack.EMPTY : stack); + } + // Oxygen -> Oxygen tank + } else if ((this.gasTankType == TankGases.OXYGEN.index || this.gasTankType == -1) && inputName.contains("oxygen")) + { + int tankedAmount = liquid.amount * (inputName.contains("liquid") ? 2 : 1); + if (currentgas == null || currentgas.amount + tankedAmount <= this.gasTank.getCapacity()) + { + FluidStack gcgas = FluidRegistry.getFluidStack(TankGases.OXYGEN.gas, tankedAmount); + this.gasTank.fill(gcgas, true); + this.gasTankType = TankGases.OXYGEN.index; + ItemStack stack = FluidUtil.getUsedContainer(inputCanister); + getInventory().set(1, stack == null ? ItemStack.EMPTY : stack); + } + // Nitrogen -> Nitrogen tank + } else if ((this.gasTankType == TankGases.NITROGEN.index || this.gasTankType == -1) && inputName.contains("nitrogen")) + { + int tankedAmount = liquid.amount * (inputName.contains("liquid") ? 2 : 1); + if (currentgas == null || currentgas.amount + tankedAmount <= this.gasTank.getCapacity()) + { + FluidStack gcgas = FluidRegistry.getFluidStack(TankGases.NITROGEN.gas, tankedAmount); + this.gasTank.fill(gcgas, true); + this.gasTankType = TankGases.NITROGEN.index; + ItemStack stack = FluidUtil.getUsedContainer(inputCanister); + getInventory().set(1, stack == null ? ItemStack.EMPTY : stack); + } + } + } + } + } + + // Now see if any liquids from the output tanks need to be put into the output slot + checkFluidTankTransfer(2, this.liquidTank); + + if (this.hasEnoughEnergyToRun && this.canProcess()) + { + // 50% extra speed boost for Tier 2 machine if powered by Tier 2 power + if (this.tierGC == 2) + { + this.processTimeRequired = Math.max(1, 4 - this.poweredByTierGC); + } + + if (this.processTicks <= 0) + { + this.processTicks = this.processTimeRequired; + } else + { + if (--this.processTicks <= 0) + { + this.doLiquefaction(); + this.processTicks = this.canProcess() ? this.processTimeRequired : 0; + } + } + } else + { + if (this.processTicks > 0) + { + this.processTicks = 0; + } else if (--this.processTicks <= -10) + { + this.processTicks = -10; + } + } + this.produceOutput(this.getGasInputDirection().getOpposite()); + + } + + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + if (FluidUtil.isValidContainer(this.getInventory().get(slot))) + { + final FluidStack liquid = tank.getFluid(); + + if (liquid != null && liquid.amount > 0) + { + String liquidname = liquid.getFluid().getName(); + if (liquidname.startsWith("fuel")) + { + FluidUtil.tryFillContainerFuel(tank, this.getInventory(), slot); + } else if (liquidname.equals(TankGases.OXYGEN.liquid)) + { + FluidUtil.tryFillContainer(tank, liquid, this.getInventory(), slot, AsteroidsItems.canisterLOX); + } else if (liquidname.equals(TankGases.NITROGEN.liquid)) + { + FluidUtil.tryFillContainer(tank, liquid, this.getInventory(), slot, AsteroidsItems.canisterLN2); + } + } + } else if (!this.getInventory().get(slot).isEmpty() && this.getInventory().get(slot).getItem() instanceof ItemAtmosphericValve) + { + tank.drain(4, true); + } + } + + public int getIdFromName(String gasname) + { + for (TankGases type : TankGases.values()) + { + if (type.gas.equals(gasname)) + { + return type.index; + } + } + + return -1; + } + + public int getProductIdFromName(String gasname) + { + for (TankGases type : TankGases.values()) + { + if (type.liquid.equals(gasname)) + { + return type.index; + } + } + + return -1; + } + + public int getScaledGasLevel(int i) + { + return this.gasTank.getFluid() != null ? this.gasTank.getFluid().amount * i / this.gasTank.getCapacity() : 0; + } + + public int getScaledFuelLevel(int i) + { + return this.liquidTank.getFluid() != null ? this.liquidTank.getFluid().amount * i / this.liquidTank.getCapacity() : 0; + } + + public boolean canProcess() + { + if (this.gasTank.getFluid() == null || this.gasTank.getFluid().amount <= 0 || this.getDisabled(0)) + { + return false; + } + + if (this.fluidTankType == -1) + { + return true; + } + + boolean tank1HasSpace = this.liquidTank.getFluidAmount() < this.liquidTank.getCapacity(); + + if (this.gasTankType == TankGases.AIR.index) + { + int airProducts = this.airProducts; + do + { + int thisProduct = (airProducts & 15) - 1; + if (thisProduct == this.fluidTankType && tank1HasSpace) + { + return true; + } + airProducts = airProducts >> 4; + } while (airProducts > 0); + return false; + } + + return (this.gasTankType == this.fluidTankType && tank1HasSpace); + } + + public int getAirProducts() + { + WorldProvider WP = this.world.provider; + if (WP instanceof IGalacticraftWorldProvider) + { + int result = 0; + ArrayList atmos = ((IGalacticraftWorldProvider) WP).getCelestialBody().atmosphere.composition; + if (atmos.size() > 0) + { + result = this.getIdFromName(atmos.get(0).name().toLowerCase()) + 1; + } + if (atmos.size() > 1) + { + result += 16 * (this.getIdFromName(atmos.get(1).name().toLowerCase()) + 1); + } + if (atmos.size() > 2) + { + result += 256 * (this.getIdFromName(atmos.get(2).name().toLowerCase()) + 1); + } + + return result; + } + + return 35; + } + + public void doLiquefaction() + { + // Can't be called if the gasTank fluid is null + final int gasAmount = this.gasTank.getFluid().amount; + if (gasAmount == 0) + { + return; + } + + if (this.gasTankType == TankGases.AIR.index) + { + int airProducts = this.airProducts; + int amountToDrain = Math.min(gasAmount / 2, (airProducts > 15) ? 2 : 3); + if (amountToDrain == 0) + { + amountToDrain = 1; + } + + do + { + int thisProduct = (airProducts & 15) - 1; + // -1 indicates a gas which can't be liquefied (e.g. Carbon Dioxide) + if (thisProduct >= 0) + { + this.gasTank.drain(this.placeIntoFluidTanks(thisProduct, amountToDrain) * 2, true); + } + airProducts = airProducts >> 4; + amountToDrain = amountToDrain >> 1; + if (amountToDrain == 0) + { + amountToDrain = 1; + } + } while (airProducts > 0); + } else + { + if (gasAmount == 1) + { + this.gasTank.drain(this.placeIntoFluidTanks(this.gasTankType, 1), true); + } else + { + this.gasTank.drain(this.placeIntoFluidTanks(this.gasTankType, Math.min(gasAmount / 2, 3)) * 2, true); + } + } + } + + private int placeIntoFluidTanks(int thisProduct, int amountToDrain) + { + final int fuelSpace = this.liquidTank.getCapacity() - this.liquidTank.getFluidAmount(); + + if ((thisProduct == this.fluidTankType || this.fluidTankType == -1) && fuelSpace > 0) + { + if (amountToDrain > fuelSpace) + { + amountToDrain = fuelSpace; + } + this.liquidTank.fill(FluidRegistry.getFluidStack(TankGases.values()[thisProduct].liquid, amountToDrain), true); + this.fluidTankType = thisProduct; + } else + { + amountToDrain = 0; + } + return amountToDrain; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + + if (nbt.hasKey("gasTank")) + { + this.gasTank.readFromNBT(nbt.getCompoundTag("gasTank")); + } + + if (nbt.hasKey("liquidTank")) + { + this.liquidTank.readFromNBT(nbt.getCompoundTag("liquidTank")); + } + + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + if (this.gasTank.getFluid() != null) + { + nbt.setTag("gasTank", this.gasTank.writeToNBT(new NBTTagCompound())); + } + + if (this.liquidTank.getFluid() != null) + { + nbt.setTag("liquidTank", this.liquidTank.writeToNBT(new NBTTagCompound())); + } + + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + + + return side == EnumFacing.UP ? new int[] { 0 } : new int[] { 0, 1, 2 }; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return FluidUtil.isMethaneContainerAny(itemstack); + case 2: + return FluidUtil.isEmptyContainerFor(itemstack, this.liquidTank.getFluid()); + + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 1: + return FluidUtil.isEmptyContainer(itemstack); + case 2: + + return FluidUtil.isFullContainer(itemstack); + + default: + return false; + } + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + case 1: + case 2: + + return FluidUtil.isValidContainer(itemstack); + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public double getPacketRange() + { + return 320.0D; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.DOWN; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + + + if (from == getGasInputDirection().getOpposite()) + { + return this.liquidTank.getFluid() != null && this.liquidTank.getFluidAmount() > 0; + } + + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + + + if (from == getGasInputDirection().getOpposite()) + { + if (resource != null && resource.isFluidEqual(this.liquidTank.getFluid())) + { + return this.liquidTank.drain(resource.amount, doDrain); + } + } + + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + + + if (from == getGasInputDirection().getOpposite()) + { + return this.liquidTank.drain(maxDrain, doDrain); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (from.equals(this.getGasInputDirection())) + { + // Can fill with gases + return fluid == null || this.getIdFromName(fluid.getName()) > -1; + } + + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (resource != null && this.canFill(from, resource.getFluid())) + { + int type = this.getIdFromName(FluidRegistry.getFluidName(resource)); + + if (this.gasTankType == -1 || (this.gasTankType == type && this.gasTank.getFluidAmount() < this.gasTank.getCapacity())) + { + used = this.gasTank.fill(resource, doFill); + } + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTankInfo[] tankInfo = new FluidTankInfo[] {}; + + if (from == this.getGasInputDirection()) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.gasTank)}; + } + + if (getGasInputDirection().getOpposite() == from) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.liquidTank)}; + } + + return tankInfo; + } + + @Override + public int getBlockMetadata() + { + return getBlockType().getMetaFromState(this.world.getBlockState(getPos())) & 3; + } + + @Override + public boolean shouldPullOxygen() + { + return this.gasTankType == -1 || (this.gasTankType == 1 && this.gasTank.getFluidAmount() < this.gasTank.getCapacity()); + } + + @Override + public int receiveOxygen(EnumFacing from, int receive, boolean doReceive) + { + if (from == this.getGasInputDirection() && this.shouldPullOxygen()) + { + // Special conversion ratio for breathable air + float conversion = 2F * Constants.LOX_GAS_RATIO; + FluidStack fluidToFill = new FluidStack(AsteroidsModule.fluidOxygenGas, (int) (receive * conversion)); + int used = MathHelper.ceil(this.gasTank.fill(fluidToFill, doReceive) / conversion); + return used; + } + + return 0; + } + + @Override + public int provideOxygen(EnumFacing from, int request, boolean doProvide) + { + return 0; + } + + @Override + public int getOxygenRequest(EnumFacing direction) + { + return this.receiveOxygen(direction, 1000000, false); + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return 0; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + + if (type == NetworkType.FLUID) + { + return direction == getGasInputDirection() || direction == this.getGasInputDirection().getOpposite() || direction == this.getGasInputDirection().rotateY(); + } + + if (type == NetworkType.POWER) + { + return direction == EnumFacing.DOWN; + } + + return false; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMarsT2) + { + return state.getValue(BlockMachineMarsT2.FACING); + } + return EnumFacing.NORTH; + } + + public EnumFacing getGasInputDirection() + { + return this.byIndex().rotateY(); + } + + private boolean produceOutput(EnumFacing outputDirection) + { + // Used produceOutput() function from TileEntityMethaneSynthesizer as reference for this one + + int provide = Math.min(this.liquidTank.getFluidAmount(), TileEntityGasLiquefier.OUTPUT_PER_SECOND); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).getTileEntityOnSide(this.world, outputDirection); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int fuelRequested = outputNetwork.getRequest(); + + if (fuelRequested > 0) + { + int usedFuel = outputNetwork.emitToBuffer(new FluidStack(this.liquidTank.getFluid(), provide), true); + this.liquidTank.drain(usedFuel, true); + + return true; + } + } + } + + return false; + } + + @Override + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + if (!stack.getGas().getName().equals("oxygen") || !this.shouldPullOxygen()) + { + return 0; + } + int used = 0; + if (this.gasTank.getFluidAmount() < this.gasTank.getCapacity()) + { + used = this.gasTank.fill(FluidRegistry.getFluidStack("oxygen", stack.amount), doTransfer); + } + return used; + } + + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Override + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return null; + } + + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount) + { + return null; + } + + @Override + @Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return this.shouldPullOxygen() && type.getName().equals("oxygen") && side.equals(this.getGasInputDirection()); + } + + @Override + @Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing side, Gas type) + { + return false; + } + + @Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing side) + { + return side.equals(this.getGasInputDirection()); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityLaunchController.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityLaunchController.java new file mode 100644 index 00000000..9440a9a0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityLaunchController.java @@ -0,0 +1,503 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.ArrayList; +// import java.util.HashMap; +import java.util.List; +// import java.util.Map; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPadFull; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.world.ChunkLoadingCallback; +import micdoodle8.mods.galacticraft.core.world.IChunkLoader; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.ForgeChunkManager.Ticket; +import net.minecraftforge.fml.relauncher.Side; + +public class TileEntityLaunchController extends TileBaseElectricBlockWithInventory implements IChunkLoader, ISidedInventory, ILandingPadAttachable +{ + + public static final int WATTS_PER_TICK = 1; + @NetworkedField(targetSide = Side.CLIENT) + public boolean launchPadRemovalDisabled = true; + private Ticket chunkLoadTicket; + private List connectedPads = new ArrayList(); + @NetworkedField(targetSide = Side.CLIENT) + public int frequency = -1; + @NetworkedField(targetSide = Side.CLIENT) + public int destFrequency = -1; + @NetworkedField(targetSide = Side.CLIENT) + public String ownerName = ""; + @NetworkedField(targetSide = Side.CLIENT) + public boolean frequencyValid; + @NetworkedField(targetSide = Side.CLIENT) + public boolean destFrequencyValid; + @NetworkedField(targetSide = Side.CLIENT) + public int launchDropdownSelection; + @NetworkedField(targetSide = Side.CLIENT) + public boolean launchSchedulingEnabled; + @NetworkedField(targetSide = Side.CLIENT) + public boolean controlEnabled; + public boolean hideTargetDestination = true; + public boolean requiresClientUpdate; + public Object attachedDock = null; + private boolean frequencyCheckNeeded = false; + + public TileEntityLaunchController() + { + super("container.launchcontroller.name"); + this.storage.setMaxExtract(6); + this.noRedstoneControl = true; + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + this.controlEnabled = this.launchSchedulingEnabled && this.hasEnoughEnergyToRun && !this.getDisabled(0); + + if (this.frequencyCheckNeeded) + { + this.checkDestFrequencyValid(); + this.frequencyCheckNeeded = false; + } + + if (this.requiresClientUpdate) + { + // PacketDispatcher.sendPacketToAllPlayers(this.getPacket()); + // TODO + this.requiresClientUpdate = false; + } + + if (this.ticks % 40 == 0) + { + this.setFrequency(this.frequency); + this.setDestinationFrequency(this.destFrequency); + } + + if (this.ticks % 20 == 0) + { + if (this.chunkLoadTicket != null) + { + for (int i = 0; i < this.connectedPads.size(); i++) + { + BlockPos coords = this.connectedPads.get(i); + Block block = this.world.getBlockState(coords).getBlock(); + + if (block != GCBlocks.landingPadFull) + { + this.connectedPads.remove(i); + ForgeChunkManager.unforceChunk(this.chunkLoadTicket, new ChunkPos(coords.getX() >> 4, coords.getZ() >> 4)); + } + } + } + } + } + else + { + if (this.frequency == -1 && this.destFrequency == -1) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(this.world), new Object[] + {5, this.getPos(), 0})); + } + } + } + + @Override + public String getOwnerName() + { + return this.ownerName; + } + + @Override + public void setOwnerName(String ownerName) + { + this.ownerName = ownerName; + } + + @Override + public void invalidate() + { + super.invalidate(); + + if (this.chunkLoadTicket != null) + { + ForgeChunkManager.releaseTicket(this.chunkLoadTicket); + } + } + + @Override + public void onTicketLoaded(Ticket ticket, boolean placed) + { + if (!this.world.isRemote && ConfigManagerMars.launchControllerChunkLoad) + { + if (ticket == null) + { + return; + } + + if (this.chunkLoadTicket == null) + { + this.chunkLoadTicket = ticket; + } + + NBTTagCompound nbt = this.chunkLoadTicket.getModData(); + nbt.setInteger("ChunkLoaderTileX", this.getPos().getX()); + nbt.setInteger("ChunkLoaderTileY", this.getPos().getY()); + nbt.setInteger("ChunkLoaderTileZ", this.getPos().getZ()); + + for (int x = -2; x <= 2; x++) + { + for (int z = -2; z <= 2; z++) + { + Block blockID = this.world.getBlockState(this.getPos().add(x, 0, z)).getBlock(); + + if (blockID instanceof BlockLandingPadFull) + { + if (this.getPos().getX() + x >> 4 != this.getPos().getX() >> 4 || this.getPos().getZ() + z >> 4 != this.getPos().getZ() >> 4) + { + this.connectedPads.add(new BlockPos(this.getPos().getX() + x, this.getPos().getY(), this.getPos().getZ() + z)); + + if (placed) + { + ChunkLoadingCallback.forceChunk(this.chunkLoadTicket, this.world, this.getPos().getX() + x, this.getPos().getY(), this.getPos().getZ() + z, this.getOwnerName()); + } + else + { + ChunkLoadingCallback.addToList(this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getOwnerName()); + } + } + } + } + } + + ChunkLoadingCallback.forceChunk(this.chunkLoadTicket, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getOwnerName()); + } + } + + @Override + public Ticket getTicket() + { + return this.chunkLoadTicket; + } + + @Override + public BlockPos getCoords() + { + return new BlockPos(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.ownerName = nbt.getString("OwnerName"); + this.launchDropdownSelection = nbt.getInteger("LaunchSelection"); + this.frequency = nbt.getInteger("ControllerFrequency"); + this.destFrequency = nbt.getInteger("TargetFrequency"); + this.frequencyCheckNeeded = true; + this.launchPadRemovalDisabled = nbt.getBoolean("LaunchPadRemovalDisabled"); + this.launchSchedulingEnabled = nbt.getBoolean("LaunchPadSchedulingEnabled"); + this.hideTargetDestination = nbt.getBoolean("HideTargetDestination"); + this.requiresClientUpdate = GCCoreUtil.getEffectiveSide() == Side.SERVER; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setString("OwnerName", this.ownerName); + nbt.setInteger("LaunchSelection", this.launchDropdownSelection); + nbt.setInteger("ControllerFrequency", this.frequency); + nbt.setInteger("TargetFrequency", this.destFrequency); + nbt.setBoolean("LaunchPadRemovalDisabled", this.launchPadRemovalDisabled); + nbt.setBoolean("LaunchPadSchedulingEnabled", this.launchSchedulingEnabled); + nbt.setBoolean("HideTargetDestination", this.hideTargetDestination); + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 0; + } + + @Override + public boolean shouldUseEnergy() + { + return !this.getDisabled(0); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + switch (index) + { + case 0: + this.disabled = disabled; + this.disableCooldown = 10; + break; + case 1: + this.launchSchedulingEnabled = disabled; + break; + case 2: + this.hideTargetDestination = disabled; + this.disableCooldown = 10; + break; + } + } + } + + @Override + public boolean getDisabled(int index) + { + switch (index) + { + case 0: + return this.disabled; + case 1: + return this.launchSchedulingEnabled; + case 2: + return this.hideTargetDestination; + } + + return true; + } + + @Override + public boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + + return tile instanceof TileEntityLandingPad; + } + + public void setFrequency(int frequency) + { + this.frequency = frequency; + + if (this.frequency >= 0) + { + this.frequencyValid = true; + WorldServer[] servers = GCCoreUtil.getWorldServerList(this.world); + + worldLoop: for (int i = 0; i < servers.length; i++) + { + WorldServer world = servers[i]; + + for (TileEntity tile2 : new ArrayList(world.loadedTileEntityList)) + { + if (this != tile2) + { + tile2 = world.getTileEntity(tile2.getPos()); + if (tile2 == null) + { + continue; + } + + if (tile2 instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController2 = (TileEntityLaunchController) tile2; + + if (launchController2.frequency == this.frequency) + { + GalacticraftPlanets.logger.debug("Launch Controller frequency conflict at " + tile2.getPos() + " on dim: " + GCCoreUtil.getDimensionID(tile2)); + this.frequencyValid = false; + break worldLoop; + } + } + } + } + } + } + else + { + this.frequencyValid = false; + } + } + + public void setDestinationFrequency(int frequency) + { + if (frequency != this.destFrequency) + { + this.destFrequency = frequency; + this.checkDestFrequencyValid(); + this.updateRocketOnDockSettings(); + } + } + + public void checkDestFrequencyValid() + { + if (!this.world.isRemote) + { + this.destFrequencyValid = false; + if (this.destFrequency >= 0) + { + WorldServer[] servers = GCCoreUtil.getWorldServerList(this.world); + for (int i = 0; i < servers.length; i++) + { + WorldServer world = servers[i]; + + for (TileEntity tile2 : new ArrayList(world.loadedTileEntityList)) + { + if (this != tile2) + { + tile2 = world.getTileEntity(tile2.getPos()); + if (tile2 == null) + { + continue; + } + + if (tile2 instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController2 = (TileEntityLaunchController) tile2; + + if (launchController2.frequency == this.destFrequency) + { + this.destFrequencyValid = true; + return; + } + } + } + } + } + } + } + } + + public boolean validFrequency() + { + this.checkDestFrequencyValid(); + return !this.getDisabled(0) && this.hasEnoughEnergyToRun && this.frequencyValid && this.destFrequencyValid; + } + + public void setLaunchDropdownSelection(int newvalue) + { + if (newvalue != this.launchDropdownSelection) + { + this.launchDropdownSelection = newvalue; + this.checkDestFrequencyValid(); + this.updateRocketOnDockSettings(); + } + } + + public void setLaunchSchedulingEnabled(boolean newvalue) + { + if (newvalue != this.launchSchedulingEnabled) + { + this.launchSchedulingEnabled = newvalue; + this.checkDestFrequencyValid(); + this.updateRocketOnDockSettings(); + } + } + + public void updateRocketOnDockSettings() + { + if (this.attachedDock instanceof TileEntityLandingPad) + { + TileEntityLandingPad pad = ((TileEntityLandingPad) this.attachedDock); + IDockable rocket = pad.getDockedEntity(); + if (rocket instanceof EntityAutoRocket) + { + ((EntityAutoRocket) rocket).updateControllerSettings(pad); + } + } + } + + public void setAttachedPad(IFuelDock pad) + { + this.attachedDock = pad; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMars) + { + return state.getValue(BlockMachineMars.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityMethaneSynthesizer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityMethaneSynthesizer.java new file mode 100644 index 00000000..ce2f75f7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityMethaneSynthesizer.java @@ -0,0 +1,702 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.ArrayList; +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.common.capabilities.Capabilities; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.NetworkHelper; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMarsT2; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; + +@Interface(modid = CompatibilityManager.modidMekanism, iface = "mekanism.api.gas.IGasHandler") +public class TileEntityMethaneSynthesizer extends TileBaseElectricBlockWithInventory implements IDisableableMachine, IFluidHandlerWrapper, IGasHandler +{ + + private final int tankCapacity = 4000; + + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank gasTank = new FluidTank(this.tankCapacity); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank gasTank2 = new FluidTank(this.tankCapacity / 2); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank liquidTank = new FluidTank(this.tankCapacity / 2); + + public int processTimeRequired = 3; + @NetworkedField(targetSide = Side.CLIENT) + public int processTicks = -8; + private int hasCO2 = -1; + private boolean noCoal = true; + private int coalPartial = 0; + + public TileEntityMethaneSynthesizer() + { + super("tile.mars_machine.5.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 45); + this.setTierGC(2); + this.inventory = NonNullList.withSize(5, ItemStack.EMPTY); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (CompatibilityManager.isMekanismLoaded()) + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + return true; + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + } + + return super.getCapability(capability, facing); + } + + @Override + public void update() + { + super.update(); + + if (this.hasCO2 == -1) + { + this.hasCO2 = this.getAirProducts(); + } + + if (!this.world.isRemote) + { + // If somehow it has CO2 in a CO2-free dimension, flush it out + if (this.hasCO2 == 0 && this.gasTank2.getFluidAmount() > 0) + { + this.gasTank2.drain(this.gasTank2.getFluidAmount(), true); + } + + // Now check the CO2 storage + ItemStack inputCanister = this.getInventory().get(2); + if (!inputCanister.isEmpty()) + { + if (inputCanister.getItem() instanceof ItemAtmosphericValve && this.hasCO2 > 0) + { + // CO2 -> CO2 tank + if (this.gasTank2.getFluidAmount() < this.gasTank2.getCapacity()) + { + IBlockState stateAbove = this.world.getBlockState(this.getPos().up()); + Block blockAbove = stateAbove.getBlock(); + if (blockAbove.getMaterial(stateAbove) == Material.AIR && blockAbove != GCBlocks.breatheableAir && blockAbove != GCBlocks.brightBreatheableAir) + { + if (!OxygenUtil.inOxygenBubble(this.world, this.getPos().getX() + 0.5D, this.getPos().getY() + 1D, this.getPos().getZ() + 0.5D)) + { + FluidStack gcAtmosphere = FluidRegistry.getFluidStack("carbondioxide", 4); + this.gasTank2.fill(gcAtmosphere, true); + } + } + } + } + } + + // Now see if any methane from the methane tank needs to be put into + // the output slot + checkFluidTankTransfer(4, this.liquidTank); + + if (this.hasEnoughEnergyToRun && this.canProcess()) + { + // 50% extra speed boost for Tier 2 machine if powered by Tier 2 + // power + if (this.tierGC == 2) + { + this.processTimeRequired = Math.max(1, 4 - this.poweredByTierGC); + } + + if (this.processTicks <= 0) + { + this.processTicks = this.processTimeRequired; + } + else + { + if (--this.processTicks <= 0) + { + this.doLiquefaction(); + this.processTicks = this.canProcess() ? this.processTimeRequired : 0; + } + } + } + else + { + if (this.processTicks > 0) + { + this.processTicks = 0; + } + else if (--this.processTicks <= -8) + { + this.processTicks = -8; + } + } + + this.produceOutput(this.getHydrogenInputDirection().getOpposite()); + } + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + if (FluidUtil.isValidContainer(this.getInventory().get(slot))) + { + final FluidStack liquid = tank.getFluid(); + + if (liquid != null) + { + FluidUtil.tryFillContainer(tank, liquid, this.getInventory(), slot, AsteroidsItems.methaneCanister); + } + } + else if (!this.getInventory().get(slot).isEmpty() && this.getInventory().get(slot).getItem() instanceof ItemAtmosphericValve) + { + tank.drain(4, true); + } + } + + public int getScaledGasLevel(int i) + { + return this.gasTank.getFluid() != null ? this.gasTank.getFluid().amount * i / this.gasTank.getCapacity() : 0; + } + + public int getScaledGasLevel2(int i) + { + return this.gasTank2.getFluid() != null ? this.gasTank2.getFluid().amount * i / this.gasTank2.getCapacity() : 0; + } + + public int getScaledFuelLevel(int i) + { + return this.liquidTank.getFluid() != null ? this.liquidTank.getFluid().amount * i / this.liquidTank.getCapacity() : 0; + } + + public boolean canProcess() + { + if (this.gasTank.getFluid() == null || this.gasTank.getFluid().amount <= 0 || this.getDisabled(0)) + { + return false; + } + + this.noCoal = this.getInventory().get(3).isEmpty() || this.getInventory().get(3).getItem() != MarsItems.carbonFragments; + + if (this.noCoal && this.coalPartial == 0 && (this.gasTank2.getFluid() == null || this.gasTank2.getFluidAmount() <= 0)) + { + return false; + } + + return this.liquidTank.getFluidAmount() < this.liquidTank.getCapacity(); + } + + public int getAirProducts() + { + WorldProvider WP = this.world.provider; + if (WP instanceof IGalacticraftWorldProvider) + { + ArrayList atmos = ((IGalacticraftWorldProvider) WP).getCelestialBody().atmosphere.composition; + if (atmos.size() > 0) + { + if (atmos.get(0) == EnumAtmosphericGas.CO2) + { + return 1; + } + } + if (atmos.size() > 1) + { + if (atmos.get(1) == EnumAtmosphericGas.CO2) + { + return 1; + } + } + if (atmos.size() > 2) + { + if (atmos.get(2) == EnumAtmosphericGas.CO2) + { + return 1; + } + } + + return 0; + } + + return 0; + } + + public void doLiquefaction() + { + if (this.noCoal && this.coalPartial == 0) + { + if (this.gasTank2.getFluid() == null || this.gasTank2.drain(1, true).amount < 1) + { + return; + } + } + else + { + if (this.coalPartial == 0) + { + this.decrStackSize(3, 1); + } + this.coalPartial++; + if (this.coalPartial == 40) + { + this.coalPartial = 0; + } + } + this.gasTank.drain(this.placeIntoFluidTanks(2) * 8, true); + } + + private int placeIntoFluidTanks(int amountToDrain) + { + final int fuelSpace = this.liquidTank.getCapacity() - this.liquidTank.getFluidAmount(); + + if (fuelSpace > 0) + { + if (amountToDrain > fuelSpace) + { + amountToDrain = fuelSpace; + } + this.liquidTank.fill(FluidRegistry.getFluidStack("methane", amountToDrain), true); + } + else + { + amountToDrain = 0; + } + + return amountToDrain; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + + if (nbt.hasKey("gasTank")) + { + this.gasTank.readFromNBT(nbt.getCompoundTag("gasTank")); + } + + if (nbt.hasKey("gasTank2")) + { + this.gasTank2.readFromNBT(nbt.getCompoundTag("gasTank2")); + } + + if (nbt.hasKey("liquidTank")) + { + this.liquidTank.readFromNBT(nbt.getCompoundTag("liquidTank")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + if (this.gasTank.getFluid() != null) + { + nbt.setTag("gasTank", this.gasTank.writeToNBT(new NBTTagCompound())); + } + + if (this.gasTank2.getFluid() != null) + { + nbt.setTag("gasTank2", this.gasTank2.writeToNBT(new NBTTagCompound())); + } + + if (this.liquidTank.getFluid() != null) + { + nbt.setTag("liquidTank", this.liquidTank.writeToNBT(new NBTTagCompound())); + } + + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2, 3, 4}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 3: + return itemstack.getItem() == MarsItems.carbonFragments; + case 4: + return FluidUtil.isPartialContainer(itemstack, AsteroidsItems.methaneCanister); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack) || !this.shouldPullEnergy(); + case 4: + return FluidUtil.isFullContainer(itemstack); + default: + return false; + } + } + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + case 1: + return false; + case 2: + return itemstack.getItem() instanceof ItemAtmosphericValve; + case 3: + return itemstack.getItem() == MarsItems.carbonFragments; + case 4: + return FluidUtil.isValidContainer(itemstack); + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public double getPacketRange() + { + return 320.0D; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.DOWN; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + if (from == this.getHydrogenInputDirection().getOpposite()) + { + return this.liquidTank.getFluid() != null && this.liquidTank.getFluidAmount() > 0; + } + + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + if (from == this.getHydrogenInputDirection().getOpposite()) + { + if (resource != null && resource.isFluidEqual(this.liquidTank.getFluid())) + { + return this.liquidTank.drain(resource.amount, doDrain); + } + } + + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + if (from == getHydrogenInputDirection().getOpposite()) + { + return this.liquidTank.drain(maxDrain, doDrain); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (from == this.getHydrogenInputDirection()) + { + return fluid == null || "hydrogen".equals(fluid.getName()); + } + + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (resource != null && this.canFill(from, resource.getFluid())) + { + if (this.gasTank.getFluidAmount() < this.gasTank.getCapacity()) + { + used = this.gasTank.fill(resource, doFill); + } + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTankInfo[] tankInfo = new FluidTankInfo[] {}; + + if (from == this.getHydrogenInputDirection()) + { + tankInfo = new FluidTankInfo[] + {new FluidTankInfo(this.gasTank)}; + } + else if (from == this.getHydrogenInputDirection().getOpposite()) + { + tankInfo = new FluidTankInfo[] + {new FluidTankInfo(this.liquidTank)}; + } + + return tankInfo; + } + + @Override + public int getBlockMetadata() + { + return this.getBlockType().getMetaFromState(this.world.getBlockState(getPos())); + } + + @Override + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + if (!stack.getGas().getName().equals("hydrogen")) + { + return 0; + } + int used = 0; + if (this.gasTank.getFluidAmount() < this.gasTank.getCapacity()) + { + used = this.gasTank.fill(FluidRegistry.getFluidStack("hydrogen", stack.amount), doTransfer); + } + return used; + } + + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Override + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return null; + } + + @Override + @Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + // System.out.println("Testing receipt of gas "+type.getName()); + return type.getName().equals("hydrogen") && side.equals(this.getHydrogenInputDirection()); + } + + @Override + @Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing side, Gas type) + { + return gasTank.canDrain(); + } + + @Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing side) + { + return side.equals(this.getHydrogenInputDirection()); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + + // Hydrogen pipe + if (type == NetworkType.FLUID) + { + return direction == this.getHydrogenInputDirection() || direction == this.getHydrogenInputDirection().getOpposite(); + } + + return false; + } + + public int getHydrogenRequest(EnumFacing direction) + { + return this.receiveHydrogen(direction, 1000000F, false); + } + + public boolean shouldPullHydrogen() + { + return this.gasTank.getFluidAmount() < this.gasTank.getCapacity(); + } + + public int receiveHydrogen(EnumFacing from, float receive, boolean doReceive) + { + if (from == this.getHydrogenInputDirection() && this.shouldPullHydrogen()) + { + FluidStack fluidToFill = FluidRegistry.getFluidStack("hydrogen", (int) (receive)); + return this.gasTank.fill(fluidToFill, doReceive); + } + + return 0; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMarsT2) + { + return state.getValue(BlockMachineMarsT2.FACING); + } + return EnumFacing.NORTH; + } + + public EnumFacing getHydrogenInputDirection() + { + return this.byIndex().rotateY(); + } + + private boolean produceOutput(EnumFacing outputDirection) + { + int provide = this.getMethaneProvide(); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).getTileEntityOnSide(this.world, outputDirection); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int gasRequested = outputNetwork.getRequest(); + + if (gasRequested > 0) + { + int usedGas = outputNetwork.emitToBuffer(new FluidStack(AsteroidsModule.fluidMethaneGas, Math.min(gasRequested, provide)), true); + this.liquidTank.drain(usedGas, true); + return true; + } + } + } + + return false; + } + + private int getMethaneProvide() + { + return Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.liquidTank.getFluidAmount()); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntitySlimelingEgg.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntitySlimelingEgg.java new file mode 100644 index 00000000..8309cf8a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntitySlimelingEgg.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.UUID; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.management.PreYggdrasilConverter; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileEntitySlimelingEgg extends TileEntity implements ITickable +{ + + public int timeToHatch = -1; + public String lastTouchedPlayerUUID = ""; + public String lastTouchedPlayerName = ""; + + @Override + public void update() + { + if (!this.world.isRemote) + { + if (this.timeToHatch > 0) + { + this.timeToHatch--; + } else if (this.timeToHatch == 0 && lastTouchedPlayerUUID != null && lastTouchedPlayerUUID.length() > 0) + { + IBlockState state = this.world.getBlockState(this.getPos()); + int metadata = state.getBlock().getMetaFromState(state) % 3; + + float colorRed = 0.0F; + float colorGreen = 0.0F; + float colorBlue = 0.0F; + + switch (metadata) + { + case 0: + colorRed = 1.0F; + break; + case 1: + colorBlue = 1.0F; + break; + case 2: + colorRed = 1.0F; + colorGreen = 1.0F; + break; + } + + EntitySlimeling slimeling = new EntitySlimeling(this.world, colorRed, colorGreen, colorBlue); + + slimeling.setPosition(this.getPos().getX() + 0.5, this.getPos().getY() + 1.0, this.getPos().getZ() + 0.5); + slimeling.setOwnerId(UUID.fromString(this.lastTouchedPlayerUUID)); + slimeling.setOwnerUsername(this.lastTouchedPlayerName); + + if (!this.world.isRemote) + { + this.world.spawnEntity(slimeling); + } + + slimeling.setTamed(true); + slimeling.getNavigator().clearPath(); + slimeling.setAttackTarget((EntityLivingBase) null); + slimeling.setHealth(20.0F); + + this.world.setBlockToAir(this.getPos()); + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.timeToHatch = nbt.getInteger("TimeToHatch"); + + String uuid; + if (nbt.hasKey("OwnerUUID", 8)) + { + uuid = nbt.getString("OwnerUUID"); + } else + { + uuid = PreYggdrasilConverter.convertMobOwnerIfNeeded(this.world.getMinecraftServer(), nbt.getString("Owner")); + } + + if (uuid.length() > 0) + { + lastTouchedPlayerUUID = uuid; + } + + this.lastTouchedPlayerName = nbt.getString("OwnerUsername"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("TimeToHatch", this.timeToHatch); + nbt.setString("OwnerUUID", this.lastTouchedPlayerUUID); + nbt.setString("OwnerUsername", this.lastTouchedPlayerName); + return nbt; + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTerraformer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTerraformer.java new file mode 100644 index 00000000..57f668e7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTerraformer.java @@ -0,0 +1,732 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProviderColored; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerTerraformer; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBush; +import net.minecraft.block.BlockSapling; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityTerraformer extends TileBaseElectricBlockWithInventory implements ISidedInventory, IDisableableMachine, IBubbleProviderColored, IFluidHandlerWrapper +{ + + private final int tankCapacity = 2000; + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank waterTank = new FluidTank(this.tankCapacity); + public boolean active; + public boolean lastActive; + public static final int WATTS_PER_TICK = 1; + private ArrayList terraformableBlocksList = new ArrayList<>(); + private ArrayList grassBlockList = new ArrayList<>(); + private ArrayList grownTreesList = new ArrayList<>(); + @NetworkedField(targetSide = Side.CLIENT) + public int terraformableBlocksListSize = 0; + @NetworkedField(targetSide = Side.CLIENT) + public int grassBlocksListSize = 0; + @NetworkedField(targetSide = Side.CLIENT) + public boolean treesDisabled; + @NetworkedField(targetSide = Side.CLIENT) + public boolean grassDisabled; + public final double MAX_SIZE = 15.0D; + private int[] useCount = new int[2]; + private int saplingIndex = 6; + public float bubbleSize; + @NetworkedField(targetSide = Side.CLIENT) + public boolean shouldRenderBubble = true; + + public TileEntityTerraformer() + { + super("container.tile_terraformer.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 60 : 30); + this.inventory = NonNullList.withSize(14, ItemStack.EMPTY); + } + + public int getScaledWaterLevel(int i) + { + final double fuelLevel = this.waterTank.getFluid() == null ? 0 : this.waterTank.getFluid().amount; + + return (int) (fuelLevel * i / this.tankCapacity); + } + + @Override + public void invalidate() + { + super.invalidate(); + } + + public double getDistanceFromServer(double par1, double par3, double par5) + { + final double d3 = this.getPos().getX() + 0.5D - par1; + final double d4 = this.getPos().getY() + 0.5D - par3; + final double d5 = this.getPos().getZ() + 0.5D - par5; + return d3 * d3 + d4 * d4 + d5 * d5; + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + final FluidStack liquid = FluidUtil.getFluidContained(this.getInventory().get(0)); + if (FluidUtil.isFluidStrict(liquid, FluidRegistry.WATER.getName())) + { + FluidUtil.loadFromContainer(waterTank, FluidRegistry.WATER, this.getInventory(), 0, liquid.amount); + } + + this.active = this.bubbleSize == this.MAX_SIZE && this.hasEnoughEnergyToRun && !this.getFirstBonemealStack().isEmpty() && this.waterTank.getFluid() != null && this.waterTank.getFluid().amount > 0; + } + + if (!this.world.isRemote && (this.active != this.lastActive || this.ticks % 60 == 0)) + { + this.terraformableBlocksList.clear(); + this.grassBlockList.clear(); + + if (this.active) + { + int bubbleSize = (int) Math.ceil(this.bubbleSize); + double bubbleSizeSq = this.bubbleSize; + bubbleSizeSq *= bubbleSizeSq; + boolean doGrass = !this.grassDisabled && !this.getFirstSeedStack().isEmpty(); + boolean doTrees = !this.treesDisabled && !this.getFirstSaplingStack().isEmpty(); + for (int x = this.getPos().getX() - bubbleSize; x < this.getPos().getX() + bubbleSize; x++) + { + for (int y = this.getPos().getY() - bubbleSize; y < this.getPos().getY() + bubbleSize; y++) + { + for (int z = this.getPos().getZ() - bubbleSize; z < this.getPos().getZ() + bubbleSize; z++) + { + BlockPos pos = new BlockPos(x, y, z); + Block blockID = this.world.getBlockState(pos).getBlock(); + if (blockID == null) + { + continue; + } + + if (!(blockID.isAir(this.world.getBlockState(pos), this.world, pos)) && this.getDistanceFromServer(x, y, z) < bubbleSizeSq) + { + if (doGrass && blockID instanceof ITerraformableBlock && ((ITerraformableBlock) blockID).isTerraformable(this.world, pos)) + { + this.terraformableBlocksList.add(new BlockPos(x, y, z)); + } + else if (doTrees) + { + Block blockIDAbove = this.world.getBlockState(pos.up()).getBlock(); + if (blockID == Blocks.GRASS && blockIDAbove.isAir(this.world.getBlockState(pos.up()), this.world, pos.up())) + { + this.grassBlockList.add(new BlockPos(x, y, z)); + } + } + } + } + } + } + } + } + + if (!this.world.isRemote && this.terraformableBlocksList.size() > 0 && this.ticks % 15 == 0) + { + ArrayList terraformableBlocks2 = new ArrayList<>(this.terraformableBlocksList); + + int randomIndex = this.world.rand.nextInt(this.terraformableBlocksList.size()); + BlockPos vec = terraformableBlocks2.get(randomIndex); + + if (this.world.getBlockState(vec).getBlock() instanceof ITerraformableBlock) + { + Block id; + + switch (this.world.rand.nextInt(40)) + { + case 0: + if (this.world.isBlockFullCube(new BlockPos(vec.getX() - 1, vec.getY(), vec.getZ())) && this.world.isBlockFullCube(new BlockPos(vec.getX() + 1, vec.getY(), vec.getZ())) && this.world.isBlockFullCube(new BlockPos(vec.getX(), vec.getY(), vec.getZ() - 1)) + && this.world.isBlockFullCube(new BlockPos(vec.getX(), vec.getY(), vec.getZ() + 1))) + { + id = Blocks.FLOWING_WATER; + } + else + { + id = Blocks.GRASS; + } + break; + default: + id = Blocks.GRASS; + break; + } + + this.world.setBlockState(vec, id.getDefaultState()); + + if (id == Blocks.GRASS) + { + this.useCount[0]++; + this.waterTank.drain(1, true); + this.checkUsage(1); + } + else if (id == Blocks.FLOWING_WATER) + { + this.checkUsage(2); + } + } + + this.terraformableBlocksList.remove(randomIndex); + } + + if (!this.world.isRemote && !this.treesDisabled && this.grassBlockList.size() > 0 && this.ticks % 50 == 0) + { + int randomIndex = this.world.rand.nextInt(this.grassBlockList.size()); + BlockPos vecGrass = grassBlockList.get(randomIndex); + + if (this.world.getBlockState(vecGrass).getBlock() == Blocks.GRASS) + { + BlockPos vecSapling = vecGrass.add(0, 1, 0); + ItemStack sapling = this.getFirstSaplingStack(); + boolean flag = false; + + // Attempt to prevent placement too close to other trees + for (BlockPos testVec : this.grownTreesList) + { + if (testVec.distanceSq(vecSapling) < 9) + { + flag = true; + break; + } + } + + if (!flag && sapling != null) + { + Block b = Block.getBlockFromItem(sapling.getItem()); + this.world.setBlockState(vecSapling, b.getStateFromMeta(sapling.getItemDamage()), 3); + if (b instanceof BlockSapling) + { + if (this.world.getLightFromNeighbors(vecSapling) >= 9) + { + ((BlockSapling) b).grow(this.world, vecSapling, this.world.getBlockState(vecSapling), this.world.rand); + this.grownTreesList.add(new BlockPos(vecSapling.getX(), vecSapling.getY(), vecSapling.getZ())); + } + } + else if (b instanceof BlockBush) + { + if (this.world.getLightFromNeighbors(vecSapling) >= 5) + // Hammer the update tick a few times to try to get it + // to grow - it won't always + { + for (int j = 0; j < 12; j++) + { + if (this.world.getBlockState(vecSapling).getBlock() == b) + { + ((BlockBush) b).updateTick(this.world, vecSapling, this.world.getBlockState(vecSapling), this.world.rand); + } + else + { + this.grownTreesList.add(new BlockPos(vecSapling.getX(), vecSapling.getY(), vecSapling.getZ())); + break; + } + } + } + } + + this.useCount[1]++; + this.waterTank.drain(50, true); + this.checkUsage(0); + } + } + + this.grassBlockList.remove(randomIndex); + } + + if (!this.world.isRemote) + { + this.terraformableBlocksListSize = this.terraformableBlocksList.size(); + this.grassBlocksListSize = this.grassBlockList.size(); + } + + if (this.hasEnoughEnergyToRun && (!this.grassDisabled || !this.treesDisabled)) + { + this.bubbleSize = (float) Math.min(Math.max(0, this.bubbleSize + 0.1F), this.MAX_SIZE); + } + else + { + this.bubbleSize = (float) Math.min(Math.max(0, this.bubbleSize - 0.1F), this.MAX_SIZE); + } + + this.lastActive = this.active; + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + if (!this.world.isRemote) + { + networkedList.add(this.bubbleSize); + } + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + if (this.world.isRemote) + { + this.bubbleSize = dataStream.readFloat(); + } + } + + private void checkUsage(int type) + { + ItemStack stack = null; + + if ((this.useCount[0] + this.useCount[1]) % 4 == 0) + { + stack = this.getFirstBonemealStack(); + + if (!stack.isEmpty()) + { + stack.shrink(1); + } + } + + switch (type) + { + case 0: + stack = this.getInventory().get(this.saplingIndex); + + if (!stack.isEmpty()) + { + stack.shrink(1); + } + break; + case 1: + if (this.useCount[0] % 4 == 0) + { + stack = this.getFirstSeedStack(); + + if (!stack.isEmpty()) + { + stack.shrink(1); + } + } + break; + case 2: + this.waterTank.drain(50, true); + break; + } + } + + private int getSelectiveStack(int start, int end) + { + for (int i = start; i < end; i++) + { + ItemStack stack = this.getInventory().get(i); + + if (!stack.isEmpty()) + { + return i; + } + } + + return -1; + } + + private int getRandomStack(int start, int end) + { + int stackcount = 0; + for (int i = start; i < end; i++) + { + if (!this.getInventory().get(i).isEmpty()) + { + stackcount++; + } + } + + if (stackcount == 0) + { + return -1; + } + + int random = this.world.rand.nextInt(stackcount); + for (int i = start; i < end; i++) + { + if (!this.getInventory().get(i).isEmpty()) + { + if (random == 0) + { + return i; + } + random--; + } + } + + return -1; + } + + public ItemStack getFirstBonemealStack() + { + int index = this.getSelectiveStack(2, 6); + + if (index != -1) + { + return this.getInventory().get(index); + } + + return ItemStack.EMPTY; + } + + public ItemStack getFirstSaplingStack() + { + int index = this.getRandomStack(6, 10); + + if (index != -1) + { + this.saplingIndex = index; + return this.getInventory().get(index); + } + + return ItemStack.EMPTY; + } + + public ItemStack getFirstSeedStack() + { + int index = this.getSelectiveStack(10, 14); + + if (index != -1) + { + return this.getInventory().get(index); + } + + return ItemStack.EMPTY; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.bubbleSize = nbt.getFloat("BubbleSize"); + this.useCount = nbt.getIntArray("UseCountArray"); + + if (this.useCount.length == 0) + { + this.useCount = new int[2]; + } + + if (nbt.hasKey("waterTank")) + { + this.waterTank.readFromNBT(nbt.getCompoundTag("waterTank")); + } + + if (nbt.hasKey("bubbleVisible")) + { + this.setBubbleVisible(nbt.getBoolean("bubbleVisible")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setFloat("BubbleSize", this.bubbleSize); + nbt.setIntArray("UseCountArray", this.useCount); + + if (this.waterTank.getFluid() != null) + { + nbt.setTag("waterTank", this.waterTank.writeToNBT(new NBTTagCompound())); + } + + nbt.setBoolean("bubbleVisible", this.shouldRenderBubble); + return nbt; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return this.isItemValidForSlot(slotID, itemstack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (slotID == 0) + { + return FluidUtil.isEmptyContainer(itemstack); + } + if (slotID == 1) + { + return ItemElectricBase.isElectricItemEmpty(itemstack); + } + + return false; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + FluidStack stack = net.minecraftforge.fluids.FluidUtil.getFluidContained(itemstack); + return stack != null && stack.getFluid() == FluidRegistry.WATER; + case 1: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + case 2: + case 3: + case 4: + case 5: + return itemstack.getItem() == Items.DYE && itemstack.getItemDamage() == 15; + case 6: + case 7: + case 8: + case 9: + return ContainerTerraformer.isOnSaplingList(itemstack); + case 10: + case 11: + case 12: + case 13: + return itemstack.getItem() == Items.WHEAT_SEEDS; + } + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return !this.grassDisabled || !this.treesDisabled; + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(1); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown <= 0) + { + switch (index) + { + case 0: + this.treesDisabled = !this.treesDisabled; + break; + case 1: + this.grassDisabled = !this.grassDisabled; + break; + } + + this.disableCooldown = 10; + } + } + + @Override + public boolean getDisabled(int index) + { + switch (index) + { + case 0: + return this.treesDisabled; + case 1: + return this.grassDisabled; + } + + return false; + } + + @Override + public void setBubbleVisible(boolean shouldRender) + { + this.shouldRenderBubble = shouldRender; + } + + @Override + public double getPacketRange() + { + return 64.0F; + } + + // Pipe handling + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + return (fluid == null || "water".equals(fluid.getName())) && from != this.getElectricInputDirection(); + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (resource != null && this.canFill(from, resource.getFluid())) + { + used = this.waterTank.fill(resource, doFill); + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + return new FluidTankInfo[] + {new FluidTankInfo(this.waterTank)}; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(this.getPos().getX() - this.bubbleSize, this.getPos().getY() - this.bubbleSize, this.getPos().getZ() - this.bubbleSize, this.getPos().getX() + this.bubbleSize, this.getPos().getY() + this.bubbleSize, this.getPos().getZ() + this.bubbleSize); + } + + @Override + public float getBubbleSize() + { + return this.bubbleSize; + } + + @Override + public boolean getBubbleVisible() + { + return this.shouldRenderBubble; + } + + @Override + public Vector3 getColor() + { + return new Vector3(0.125F, 0.5F, 0.125F); + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMars) + { + return state.getValue(BlockMachineMars.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + if (type == NetworkType.FLUID) + { + return direction != this.getElectricInputDirection(); + } + return false; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTreasureChestMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTreasureChestMars.java new file mode 100644 index 00000000..e7737df9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTreasureChestMars.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; + +public class TileEntityTreasureChestMars extends TileEntityTreasureChest +{ + + public TileEntityTreasureChestMars() + { + super(2); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/MarsUtil.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/MarsUtil.java new file mode 100644 index 00000000..591528c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/MarsUtil.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.util; + +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRocketInventory; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.recipe.NasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerLaunchControllerAdvanced; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; + +public class MarsUtil +{ + + public static void addRocketBenchT2Recipe(ItemStack result, HashMap input) + { + GalacticraftRegistry.addT2RocketRecipe(new NasaWorkbenchRecipe(result, input)); + } + + public static void adCargoRocketRecipe(ItemStack result, HashMap input) + { + GalacticraftRegistry.addCargoRocketRecipe(new NasaWorkbenchRecipe(result, input)); + } + + public static void openParachestInventory(EntityPlayerMP player, EntityLandingBalloons landerInv) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_PARACHEST_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] + {windowId, 1, landerInv.getEntityId()}), player); + player.openContainer = new ContainerParaChest(player.inventory, landerInv, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } + + public static void openSlimelingInventory(EntityPlayerMP player, EntitySlimeling slimeling) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimpleMars(EnumSimplePacketMars.C_OPEN_CUSTOM_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] + {windowId, 0, slimeling.getEntityId()}), player); + player.openContainer = new ContainerSlimeling(player.inventory, slimeling, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } + + public static void openCargoRocketInventory(EntityPlayerMP player, EntityCargoRocket rocket) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimpleMars(EnumSimplePacketMars.C_OPEN_CUSTOM_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] + {windowId, 1, rocket.getEntityId()}), player); + player.openContainer = new ContainerRocketInventory(player.inventory, rocket, rocket.rocketType, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } + + public static void openAdvancedLaunchController(EntityPlayerMP player, TileEntityLaunchController launchController) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimpleMars(EnumSimplePacketMars.C_OPEN_CUSTOM_GUI_TILE, GCCoreUtil.getDimensionID(player.world), new Object[] + {windowId, 0, launchController.getPos()}), player); + player.openContainer = new ContainerLaunchControllerAdvanced(player.inventory, launchController, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/RecipeUtilMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/RecipeUtilMars.java new file mode 100644 index 00000000..81231b3a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/RecipeUtilMars.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.util; + +import javax.annotation.Nonnull; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.InventorySchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.InventorySchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.InventorySchematicCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.InventorySchematicTier2Rocket; +import net.minecraft.item.ItemStack; + +public class RecipeUtilMars +{ + + @Nonnull + public static ItemStack findMatchingSpaceshipT2Recipe(InventorySchematicTier2Rocket inventoryRocketBench) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT2Recipes()) + { + if (recipe.matches(inventoryRocketBench)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + @Nonnull + public static ItemStack findMatchingCargoRocketRecipe(InventorySchematicCargoRocket inventoryRocketBench) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getCargoRocketRecipes()) + { + if (recipe.matches(inventoryRocketBench)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + @Nonnull + public static ItemStack findMatchingSpaceshipT3Recipe(InventorySchematicTier3Rocket inventoryRocketBench) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT3Recipes()) + { + if (recipe.matches(inventoryRocketBench)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + @Nonnull + public static ItemStack findMatchingAstroMinerRecipe(InventorySchematicAstroMiner craftMatrix) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getAstroMinerRecipes()) + { + if (recipe.matches(craftMatrix)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeDecoratorMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeDecoratorMars.java new file mode 100644 index 00000000..b9d55561 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeDecoratorMars.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeDecoratorSpace; +import micdoodle8.mods.galacticraft.core.world.gen.WorldGenMinableMeta; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class BiomeDecoratorMars extends BiomeDecoratorSpace +{ + + private WorldGenerator dirtGen; + private WorldGenerator deshGen; + private WorldGenerator tinGen; + private WorldGenerator copperGen; + private WorldGenerator ironGen; + private WorldGenerator iceGen; + private World currentWorld; + + public BiomeDecoratorMars() + { + this.copperGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 4, 0, true, MarsBlocks.marsBlock, 9); + this.tinGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 4, 1, true, MarsBlocks.marsBlock, 9); + this.deshGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 6, 2, true, MarsBlocks.marsBlock, 9); + this.ironGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 8, 3, true, MarsBlocks.marsBlock, 9); + this.dirtGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 32, 6, true, MarsBlocks.marsBlock, 9); + this.iceGen = new WorldGenMinableMeta(Blocks.ICE, 18, 0, true, MarsBlocks.marsBlock, 6); + } + + @Override + protected void decorate() + { + this.generateOre(4, this.iceGen, 60, 120); + this.generateOre(20, this.dirtGen, 0, 200); + if (!ConfigManagerMars.disableDeshGen) + { + this.generateOre(15, this.deshGen, 20, 64); + } + if (!ConfigManagerMars.disableCopperGen) + { + this.generateOre(26, this.copperGen, 0, 60); + } + if (!ConfigManagerMars.disableTinGen) + { + this.generateOre(23, this.tinGen, 0, 60); + } + if (!ConfigManagerMars.disableIronGen) + { + this.generateOre(20, this.ironGen, 0, 64); + } + } + + @Override + protected void setCurrentWorld(World world) + { + this.currentWorld = world; + } + + @Override + protected World getCurrentWorld() + { + return this.currentWorld; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeGenFlatMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeGenFlatMars.java new file mode 100644 index 00000000..1db33e19 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeGenFlatMars.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeGenFlatMars extends BiomeMars +{ + + public BiomeGenFlatMars(BiomeData properties) + { + super(properties); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.COLD, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SANDY); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeMars.java new file mode 100644 index 00000000..dce63a70 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeMars.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.core.BlockMetaPair; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.ChunkPrimer; + +public class BiomeMars extends BiomeGenBaseGC +{ + + public static final Biome marsFlat = new BiomeGenFlatMars(BiomeData.builder().biomeName("Mars Flat").baseHeight(2.5F).heightVariation(0.4F).build()); + + public static final BlockMetaPair BLOCK_TOP = new BlockMetaPair(MarsBlocks.marsBlock, (byte) 5); + public static final BlockMetaPair BLOCK_FILL = new BlockMetaPair(MarsBlocks.marsBlock, (byte) 6); + public static final BlockMetaPair BLOCK_LOWER = new BlockMetaPair(MarsBlocks.marsBlock, (byte) 9); + + BiomeMars(BiomeData properties) + { + super(properties, true); + } + + @Override + public float getSpawningChance() + { + return 0.01F; + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal) + { + this.fillerBlock = BLOCK_LOWER.getBlockState(); + this.topBlock = BLOCK_TOP.getBlockState(); + super.genTerrainBlocks(worldIn, rand, chunkPrimerIn, x, z, noiseVal); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeProviderMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeProviderMars.java new file mode 100644 index 00000000..6f7300bc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeProviderMars.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeProviderSpace; +import net.minecraft.world.biome.Biome; + +public class BiomeProviderMars extends BiomeProviderSpace +{ + + @Override + public Biome getBiome() + { + return BiomeMars.marsFlat; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/ChunkProviderMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/ChunkProviderMars.java new file mode 100644 index 00000000..05b711a6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/ChunkProviderMars.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import com.google.common.collect.Lists; +import java.util.List; +import micdoodle8.mods.galacticraft.api.prefab.core.BlockMetaPair; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeDecoratorSpace; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.ChunkProviderSpace; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockBasicMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; + +public class ChunkProviderMars extends ChunkProviderSpace +{ + + private final BiomeDecoratorMars marsBiomeDecorator = new BiomeDecoratorMars(); + private final MapGenCavernMars caveGenerator = new MapGenCavernMars(); + private final MapGenCaveMars cavernGenerator = new MapGenCaveMars(); + + private final MapGenDungeon dungeonGenerator = + new MapGenDungeonMars(new DungeonConfiguration(MarsBlocks.marsBlock.getDefaultState().withProperty(BlockBasicMars.BASIC_TYPE, BlockBasicMars.EnumBlockBasic.DUNGEON_BRICK), 30, 8, 16, 7, 7, + RoomBossMars.class, RoomTreasureMars.class)); + + public ChunkProviderMars(World par1World, long seed, boolean mapFeaturesEnabled) + { + super(par1World, seed, mapFeaturesEnabled); + } + + @Override + protected BiomeDecoratorSpace getBiomeGenerator() + { + return this.marsBiomeDecorator; + } + + @Override + protected Biome[] getBiomesForGeneration() + { + return new Biome[] + {BiomeAdaptive.biomeDefault}; + } + + @Override + protected int getSeaLevel() + { + return 93; + } + + @Override + protected List getWorldGenerators() + { + List generators = Lists.newArrayList(); + generators.add(this.caveGenerator); + generators.add(this.cavernGenerator); + return generators; + } + + @Override + protected BlockMetaPair getGrassBlock() + { + return BiomeMars.BLOCK_TOP; + } + + @Override + protected BlockMetaPair getDirtBlock() + { + return BiomeMars.BLOCK_FILL; + } + + @Override + protected BlockMetaPair getStoneBlock() + { + return BiomeMars.BLOCK_LOWER; + } + + @Override + public double getHeightModifier() + { + return 12; + } + + @Override + public double getSmallFeatureHeightModifier() + { + return 26; + } + + @Override + public double getMountainHeightModifier() + { + return 95; + } + + @Override + public double getValleyHeightModifier() + { + return 50; + } + + @Override + public int getCraterProbability() + { + return 2000; + } + + @Override + public void onChunkProvide(int cX, int cZ, ChunkPrimer primer) + { + this.dungeonGenerator.generate(this.world, cX, cZ, primer); + } + + @Override + public void onPopulate(int cX, int cZ) + { + this.dungeonGenerator.generateStructure(this.world, this.rand, new ChunkPos(cX, cZ)); + } + + @Override + public void recreateStructures(Chunk chunk, int x, int z) + { + this.dungeonGenerator.generate(this.world, x, z, null); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCaveMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCaveMars.java new file mode 100644 index 00000000..a3384265 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCaveMars.java @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenCaveMars extends MapGenBaseMeta +{ + + public static final int BREAK_THROUGH_CHANCE = 25; // 1 in n chance + + protected void generateLargeCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10) + { + this.generateCaveNode(par1, par3, par4, primer, par6, par8, par10, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10, float par12, float par13, float par14, int par15, int par16, double par17) + { + final double d4 = par3 * 16 + 8; + final double d5 = par4 * 16 + 8; + float f3 = 0.0F; + float f4 = 0.0F; + final Random random = new Random(par1); + + if (par16 <= 0) + { + final int j1 = this.range * 16 - 16; + par16 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (par15 == -1) + { + par15 = par16 / 2; + flag = true; + } + + final int k1 = random.nextInt(par16 / 2) + par16 / 4; + + for (final boolean flag1 = random.nextInt(6) == 0; par15 < par16; ++par15) + { + final double d6 = 1.5D + MathHelper.sin(par15 * (float) Math.PI / par16) * par12 * 1.0F; + final double d7 = d6 * par17; + final float f5 = MathHelper.cos(par14); + final float f6 = MathHelper.sin(par14); + par6 += MathHelper.cos(par13) * f5; + par8 += f6; + par10 += MathHelper.sin(par13) * f5; + + if (flag1) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += f4 * 0.1F; + par13 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + + if (!flag && par15 == k1 && par12 > 1.0F && par16 > 0) + { + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 - Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 + Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) + { + final double d8 = par6 - d4; + final double d9 = par10 - d5; + final double d10 = par16 - par15; + final double d11 = par12 + 2.0F + 16.0F; + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) + { + return; + } + + if (par6 >= d4 - 16.0D - d6 * 2.0D && par10 >= d5 - 16.0D - d6 * 2.0D && par6 <= d4 + 16.0D + d6 * 2.0D && par10 <= d5 + 16.0D + d6 * 2.0D) + { + int l1 = MathHelper.floor(par6 - d6) - par3 * 16 - 1; + int i2 = MathHelper.floor(par6 + d6) - par3 * 16 + 1; + int j2 = MathHelper.floor(par8 - d7) - 1; + int k2 = MathHelper.floor(par8 + d7) + 1; + int l2 = MathHelper.floor(par10 - d6) - par4 * 16 - 1; + int i3 = MathHelper.floor(par10 + d6) - par4 * 16 + 1; + + if (l1 < 0) + { + l1 = 0; + } + + if (i2 > 16) + { + i2 = 16; + } + + if (j2 < 1) + { + j2 = 1; + } + + if (k2 > 120) + { + k2 = 120; + } + + if (l2 < 0) + { + l2 = 0; + } + + if (i3 > 16) + { + i3 = 16; + } + + final boolean flag2 = false; + int j3; + for (j3 = l1; j3 < i2; ++j3) + { + for (int l3 = l2; l3 < i3; ++l3) + { + for (int i4 = k2 + 1; i4 >= j2 - 1; --i4) + { + if (i4 >= 0 && i4 < 128) + { + if (i4 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && l3 != l2 && l3 != i3 - 1) + { + i4 = j2; + } + } + } + } + } + + if (true) + { + + for (int localY = j2; localY < k2; localY++) + { + final double yfactor = (localY + 0.5D - par8) / d7; + final double yfactorSq = yfactor * yfactor; + + for (int localX = l1; localX < i2; localX++) + { + final double zfactor = (localX + par3 * 16 + 0.5D - par6) / d6; + final double zfactorSq = zfactor * zfactor; + + for (int localZ = l2; localZ < i3; localZ++) + { + final double xfactor = (localZ + par4 * 16 + 0.5D - par10) / d6; + final double xfactorSq = xfactor * xfactor; + + if (xfactorSq + zfactorSq < 1.0D) + { + if (yfactor > -0.7D && xfactorSq + yfactorSq + zfactorSq < 1.0D) + { + IBlockState state = primer.getBlockState(localX, localY, localZ); + Block block = state.getBlock(); + int metadata = state.getBlock().getMetaFromState(state); + if (block == MarsBlocks.marsBlock) + { + if (metadata == 6 || metadata == 9) + { + primer.setBlockState(localX, localY, localZ, Blocks.AIR.getDefaultState()); +// blockIdArray[coords] = Blocks.AIR; + } else if (metadata == 5 && random.nextInt(MapGenCaveMars.BREAK_THROUGH_CHANCE) == 0) + { + primer.setBlockState(localX, localY, localZ, Blocks.AIR.getDefaultState()); +// blockIdArray[coords] = Blocks.AIR; + } + } + } + } + } + } + } + + if (flag) + { + break; + } + } + } + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int par2, int par3, int par4, int par5, ChunkPrimer primer) + { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + + if (this.rand.nextInt(15) != 0) + { + var7 = 0; + } + + for (int var8 = 0; var8 < var7; ++var8) + { + final double var9 = par2 * 16 + this.rand.nextInt(16); + final double var11 = this.rand.nextInt(this.rand.nextInt(120) + 8); + final double var13 = par3 * 16 + this.rand.nextInt(16); + int var15 = 1; + + if (this.rand.nextInt(4) == 0) + { + this.generateLargeCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for (int var16 = 0; var16 < var15; ++var16) + { + final float var17 = this.rand.nextFloat() * Constants.twoPI; + final float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + + if (this.rand.nextInt(10) == 0) + { + var19 *= this.rand.nextFloat() * this.rand.nextFloat() * 3.0F + 1.0F; + } + + this.generateCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCavernMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCavernMars.java new file mode 100644 index 00000000..b5e468e0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCavernMars.java @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenCavernMars extends MapGenBaseMeta +{ + + @Override + public void generate(World world, int chunkX, int chunkZ, ChunkPrimer primer) + { + final int var6 = this.range; + this.world = world; + this.rand.setSeed(world.getSeed()); + final long var7 = this.rand.nextLong(); + final long var9 = this.rand.nextLong(); + + for (int var11 = chunkX - var6; var11 <= chunkX + var6; ++var11) + { + for (int var12 = chunkZ - var6; var12 <= chunkZ + var6; ++var12) + { + final long var13 = var11 * var7; + final long var15 = var12 * var9; + this.rand.setSeed(var13 ^ var15 ^ world.getSeed()); + this.recursiveGenerate(world, var11, var12, chunkX, chunkZ, primer); + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int xChunkCoord, int zChunkCoord, int origXChunkCoord, int origZChunkCoord, ChunkPrimer primer) + { + if (this.rand.nextInt(100) == 0) + { + final double xPos = xChunkCoord * 16 + this.rand.nextInt(16); + final double yPos = 25; + final double zPos = zChunkCoord * 16 + this.rand.nextInt(16); + this.generateLargeCaveNode(this.rand.nextLong(), origXChunkCoord, origZChunkCoord, primer, xPos, yPos, zPos); + } + } + + protected void generateLargeCaveNode(long par1, int origXChunkCoord, int origZChunkCoord, ChunkPrimer primer, double xPos, double yPos, double zPos) + { + this.generateCaveNode(par1, origXChunkCoord, origZChunkCoord, primer, xPos, yPos, zPos, 1.0F + this.rand.nextFloat() * 6.0F, 10.0F, 10.0F, -1, -1, 0.2D); + } + + protected void generateCaveNode(long par1, int origXChunkCoord, int origZChunkCoord, ChunkPrimer primer, double xPos, double yPos, double zPos, float par12, float par13, float par14, int par15, int par16, double heightMultiplier) + { + final double var19 = origXChunkCoord * 16 + 8; + final double var21 = origZChunkCoord * 16 + 8; + float var23 = 0.0F; + float var24 = 0.0F; + final Random var25 = new Random(par1); + + if (par16 <= 0) + { + final int var26 = this.range * 16 - 16; + par16 = var26 - var25.nextInt(var26 / 4); + } + + boolean var54 = false; + + if (par15 == -1) + { + par15 = par16 / 2; + var54 = true; + } + + final int var27 = var25.nextInt(par16 / 2) + par16 / 4; + + for (final boolean var28 = var25.nextInt(6) == 0; par15 < par16; ++par15) + { + final double caveWidth = 40; + final double caveHeight = caveWidth * heightMultiplier; + + if (var28) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += var24 * 0.1F; + par13 += var23 * 0.1F; + var24 *= 0.9F; + var23 *= 0.75F; + var24 += (var25.nextFloat() - var25.nextFloat()) * var25.nextFloat() * 2.0F; + var23 += (var25.nextFloat() - var25.nextFloat()) * var25.nextFloat() * 4.0F; + + if (!var54 && par15 == var27 && par12 > 1.0F && par16 > 0) + { + return; + } + + if (var54 || var25.nextInt(4) != 0) + { + final double var35 = xPos - var19; + final double var37 = zPos - var21; + final double var39 = par16 - par15; + final double var41 = par12 + 2.0F + 16.0F; + + if (var35 * var35 + var37 * var37 - var39 * var39 > var41 * var41) + { + return; + } + + if (xPos >= var19 - 16.0D - caveWidth * 2.0D && zPos >= var21 - 16.0D - caveWidth * 2.0D && xPos <= var19 + 16.0D + caveWidth * 2.0D && zPos <= var21 + 16.0D + caveWidth * 2.0D) // CHECKED + { + int caveMinX = MathHelper.floor(xPos - caveWidth) - origXChunkCoord * 16 - 1; + int caveMaxX = MathHelper.floor(xPos + caveWidth) - origXChunkCoord * 16 + 1; + int caveMinY = MathHelper.floor(yPos - caveHeight) - 1; + int caveMaxY = MathHelper.floor(yPos + caveHeight) + 1; + int caveMinZ = MathHelper.floor(zPos - caveWidth) - origZChunkCoord * 16 - 1; + int caveMaxZ = MathHelper.floor(zPos + caveWidth) - origZChunkCoord * 16 + 1; + + if (caveMinX < 0) + { + caveMinX = 0; + } + + if (caveMaxX > 16) + { + caveMaxX = 16; + } + + if (caveMinY < 1) + { + caveMinY = 1; + } + + if (caveMaxY > 65) + { + caveMaxY = 65; + } + + if (caveMinZ < 0) + { + caveMinZ = 0; + } + + if (caveMaxZ > 16) + { + caveMaxZ = 16; + } + + boolean isBlockWater = false; + int var42; + int var45; + + for (var42 = caveMinX; !isBlockWater && var42 < caveMaxX; ++var42) + { + for (int var43 = caveMinZ; !isBlockWater && var43 < caveMaxZ; ++var43) + { + for (int var44 = caveMaxY + 1; !isBlockWater && var44 >= caveMinY - 1; --var44) + { + var45 = (var42 * 16 + var43) * 128 + var44; + + if (var44 >= 0 && var44 < 128) + { + if (var44 != caveMinY - 1 && var42 != caveMinX && var42 != caveMaxX - 1 && var43 != caveMinZ && var43 != caveMaxZ - 1) + { + var44 = caveMinY; + } + } + } + } + } + + for (var42 = caveMinX; var42 < caveMaxX; ++var42) + { + final double var59 = (var42 + origXChunkCoord * 16 + 0.5D - xPos) / caveWidth; + + for (var45 = caveMinZ; var45 < caveMaxZ; ++var45) + { + final double var46 = (var45 + origZChunkCoord * 16 + 0.5D - zPos) / caveWidth; + + if (var59 * var59 + var46 * var46 < 1.0D) + { + for (int var50 = caveMaxY - 1; var50 >= caveMinY; --var50) + { + final double var51 = (var50 + 0.5D - yPos) / caveHeight; + + if (var59 * var59 + var51 * var51 + var46 * var46 < 1.0D) + { + if (var51 > -0.7D) + { + Block block = primer.getBlockState(var42, var50, var45).getBlock(); + + if (block == MarsBlocks.marsBlock || block == MarsBlocks.blockSludge || block == MarsBlocks.vine) + { + primer.setBlockState(var42, var50, var45, Blocks.AIR.getDefaultState()); + } + } + } + } + } + } + } + + for (var42 = caveMinX; var42 < caveMaxX; ++var42) + { + final double var59 = (var42 + origXChunkCoord * 16 + 0.5D - xPos) / caveWidth; + + for (var45 = caveMinZ; var45 < caveMaxZ; ++var45) + { + final double var46 = (var45 + origZChunkCoord * 16 + 0.5D - zPos) / caveWidth; + + if (var59 * var59 + var46 * var46 < 1.0D) + { + for (int var50 = caveMaxY - 1; var50 >= caveMinY; --var50) + { + final double var51 = (var50 + 0.5D - yPos) / caveHeight; + + if (var59 * var59 + var51 * var51 + var46 * var46 < 1.0D) + { + if (var51 > -0.7D) + { + Block block = primer.getBlockState(var42, var50, var45).getBlock(); + Block blockAbove = primer.getBlockState(var42, var50 + 1, var45).getBlock(); + Block blockBelow = primer.getBlockState(var42, var50 - 1, var45).getBlock(); + + if (Blocks.AIR == block) + { + if (blockAbove == MarsBlocks.marsBlock && this.rand.nextInt(200) == 0) + { + int modifier = 0; + + while (Blocks.AIR == block && var50 + modifier > 0) + { + primer.setBlockState(var42, var50 + modifier, var45, MarsBlocks.vine.getStateFromMeta(Math.abs(modifier) % 3)); +// arrayOfIDs[coordsBelow] = MarsBlocks.vine; +// arrayOfMeta[coordsBelow] = (byte) (Math.abs(modifier) % 3); + modifier--; + block = primer.getBlockState(var42, var50 + modifier, var45).getBlock(); + } + } else if (blockBelow == MarsBlocks.marsBlock && this.rand.nextInt(200) == 0) + { + primer.setBlockState(var42, var50, var45, MarsBlocks.blockSludge.getStateFromMeta(0)); +// arrayOfIDs[coords] = MarsBlocks.blockSludge; +// arrayOfMeta[coords] = 0; + } + } + } + } + } + } + } + } + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenDungeonMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenDungeonMars.java new file mode 100644 index 00000000..538a5a69 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenDungeonMars.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import net.minecraft.world.gen.structure.MapGenStructureIO; + +public class MapGenDungeonMars extends MapGenDungeon +{ + + private static boolean initialized; + + static + { + try + { + MapGenDungeonMars.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public MapGenDungeonMars(DungeonConfiguration configuration) + { + super(configuration); + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenDungeonMars.initialized) + { + MapGenStructureIO.registerStructureComponent(RoomBossMars.class, "MarsDungeonBossRoom"); + MapGenStructureIO.registerStructureComponent(RoomTreasureMars.class, "MarsDungeonTreasureRoom"); + } + + MapGenDungeonMars.initialized = true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomBossMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomBossMars.java new file mode 100644 index 00000000..4c6ae0dd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomBossMars.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomBoss; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomBossMars extends RoomBoss +{ + + public RoomBossMars() + { + } + + public RoomBossMars(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + public RoomBossMars(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, 24, 11, 24, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } else if (j == this.sizeY) + { + if ((i <= 2 || k <= 2 || i >= this.sizeX - 2 || k >= this.sizeZ - 2) && random.nextInt(4) == 0) + { + this.setBlockState(worldIn, Blocks.GLOWSTONE.getDefaultState(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } + } else if (j == 1 && (i <= 2 || k <= 2 || i >= this.sizeX - 2 || k >= this.sizeZ - 2) && random.nextInt(6) == 0) + { + this.setBlockState(worldIn, MarsBlocks.creeperEgg.getDefaultState(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + + int spawnerX = this.sizeX / 2; + int spawnerY = 1; + int spawnerZ = this.sizeZ / 2; + BlockPos blockpos = new BlockPos(this.getXWithOffset(spawnerX, spawnerZ), this.getYWithOffset(spawnerY), this.getZWithOffset(spawnerX, spawnerZ)); + // Is this position inside the chunk currently being generated? + if (chunkBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, MarsBlocks.bossSpawner.getDefaultState(), 2); + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) worldIn.getTileEntity(blockpos); + if (spawner != null) + { + spawner.setRoom(new Vector3(this.boundingBox.minX + 1, this.boundingBox.minY + 1, this.boundingBox.minZ + 1), new Vector3(this.sizeX - 1, this.sizeY - 1, this.sizeZ - 1)); + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomTreasureMars.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomTreasureMars.java new file mode 100644 index 00000000..c902fc58 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomTreasureMars.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockTier2TreasureChest; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.storage.loot.LootTableList; + +public class RoomTreasureMars extends RoomTreasure +{ + + public static ResourceLocation MARSCHEST = new ResourceLocation(Constants.ASSET_PREFIX, "dungeon_tier_2"); + public static final ResourceLocation TABLE_TIER_2_DUNGEON = LootTableList.register(MARSCHEST); + + public RoomTreasureMars() + { + } + + public RoomTreasureMars(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, rand.nextInt(4) + 6, configuration.getRoomHeight(), rand.nextInt(4) + 6, entranceDir); + } + + public RoomTreasureMars(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } else if ((i == 1 && k == 1) || (i == 1 && k == this.sizeZ - 1) || (i == this.sizeX - 1 && k == 1) || (i == this.sizeX - 1 && k == this.sizeZ - 1)) + { + this.setBlockState(worldIn, Blocks.GLOWSTONE.getDefaultState(), i, j, k, boundingBox); + } else if (i == this.sizeX / 2 && j == 1 && k == this.sizeZ / 2) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i, k), this.getYWithOffset(j), this.getZWithOffset(i, k)); + if (boundingBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, MarsBlocks.treasureChestTier2.getDefaultState().withProperty(BlockTier2TreasureChest.FACING, this.getDirection().getOpposite()), 2); + TileEntityTreasureChest treasureChest = (TileEntityTreasureChest) worldIn.getTileEntity(blockpos); + if (treasureChest != null) + { + ResourceLocation chesttype = TABLE_TIER_2_DUNGEON; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + treasureChest.setLootTable(chesttype, random.nextLong()); + } + } + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenEggs.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenEggs.java new file mode 100644 index 00000000..3e3347bb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenEggs.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockBasicMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenEggs extends WorldGenerator +{ + + private Block eggBlock; + + public WorldGenEggs(Block egg) + { + this.eggBlock = egg; + } + + @Override + public boolean generate(World par1World, Random par2Random, BlockPos pos) + { + int i1 = pos.getX() + par2Random.nextInt(8) - par2Random.nextInt(8); + int j1 = pos.getY() + par2Random.nextInt(4) - par2Random.nextInt(4); + int k1 = pos.getZ() + par2Random.nextInt(8) - par2Random.nextInt(8); + BlockPos newPos = new BlockPos(i1, j1, k1); + + if (!par1World.isBlockLoaded(newPos.add(1, 0, 1))) + return false; + + if (par1World.isAirBlock(newPos) && (j1 < 127 || !par1World.provider.isNether())) + { + IBlockState below = par1World.getBlockState(newPos.down()); + if (below.getBlock() == MarsBlocks.marsBlock && below.getValue(BlockBasicMars.BASIC_TYPE) == BlockBasicMars.EnumBlockBasic.SURFACE) + { + par1World.setBlockState(newPos, this.eggBlock.getStateFromMeta(par2Random.nextInt(3)), 2); + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenTerraformTree.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenTerraformTree.java new file mode 100644 index 00000000..2c0459a6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenTerraformTree.java @@ -0,0 +1,280 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCocoa; +import net.minecraft.block.BlockVine; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenTerraformTree extends WorldGenerator +{ + + private final int minTreeHeight; + private final boolean vinesGrow; + private final int metaWood; + private final int metaLeaves; + + public WorldGenTerraformTree(boolean par1, ItemStack sapling) + { + this(par1, 4, 0, 0, false); + } + + public WorldGenTerraformTree(boolean par1, int par2, int par3, int par4, boolean vines) + { + super(par1); + this.minTreeHeight = par2; + this.metaWood = par3; + this.metaLeaves = par4; + this.vinesGrow = vines; + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + int i = rand.nextInt(3) + this.minTreeHeight; + boolean flag = true; + + if (position.getY() >= 1 && position.getY() + i + 1 <= 256) + { + byte b0; + int l; + + for (int j = position.getY(); j <= position.getY() + 1 + i; ++j) + { + b0 = 1; + + if (j == position.getY()) + { + b0 = 0; + } + + if (j >= position.getY() + 1 + i - 2) + { + b0 = 2; + } + + for (int k = position.getX() - b0; k <= position.getX() + b0 && flag; ++k) + { + for (l = position.getZ() - b0; l <= position.getZ() + b0 && flag; ++l) + { + if (j >= 0 && j < 256) + { + if (!this.isReplaceable(worldIn, new BlockPos(k, j, l))) + { + flag = false; + } + } else + { + flag = false; + } + } + } + } + + if (!flag) + { + return false; + } else + { + BlockPos down = position.down(); + Block block1 = worldIn.getBlockState(down).getBlock(); + boolean isSoil = block1.canSustainPlant(worldIn.getBlockState(down), worldIn, down, net.minecraft.util.EnumFacing.UP, (net.minecraft.block.BlockSapling) Blocks.SAPLING); + + if (isSoil && position.getY() < 256 - i - 1) + { + block1.onPlantGrow(worldIn.getBlockState(down), worldIn, down, position); + b0 = 3; + byte b1 = 0; + int i1; + int j1; + int k1; + int l1; + BlockPos blockpos1; + + for (l = position.getY() - b0 + i; l <= position.getY() + i; ++l) + { + i1 = l - (position.getY() + i); + j1 = b1 + 1 - i1 / 2; + + for (k1 = position.getX() - j1; k1 <= position.getX() + j1; ++k1) + { + l1 = k1 - position.getX(); + + for (int i2 = position.getZ() - j1; i2 <= position.getZ() + j1; ++i2) + { + int j2 = i2 - position.getZ(); + + if (Math.abs(l1) != j1 || Math.abs(j2) != j1 || rand.nextInt(2) != 0 && i1 != 0) + { + blockpos1 = new BlockPos(k1, l, i2); + IBlockState state = worldIn.getBlockState(blockpos1); + Block block = state.getBlock(); + + if (block.isAir(state, worldIn, blockpos1) || block.isLeaves(state, worldIn, blockpos1) || block.getMaterial(state) == Material.VINE) + { + this.setBlockAndNotifyAdequately(worldIn, blockpos1, Blocks.LEAVES.getStateFromMeta(this.metaLeaves)); + } + } + } + } + } + + for (l = 0; l < i; ++l) + { + BlockPos upN = position.up(l); + IBlockState state2 = worldIn.getBlockState(upN); + Block block2 = state2.getBlock(); + + if (block2.isAir(state2, worldIn, upN) || block2.isLeaves(state2, worldIn, upN) || block2.getMaterial(state2) == Material.VINE) + { + this.setBlockAndNotifyAdequately(worldIn, position.up(l), Blocks.LOG.getStateFromMeta(this.metaWood)); + + if (this.vinesGrow && l > 0) + { + if (rand.nextInt(3) > 0 && worldIn.isAirBlock(position.add(-1, l, 0))) + { + this.func_181647_a(worldIn, position.add(-1, l, 0), BlockVine.EAST); + } + + if (rand.nextInt(3) > 0 && worldIn.isAirBlock(position.add(1, l, 0))) + { + this.func_181647_a(worldIn, position.add(1, l, 0), BlockVine.WEST); + } + + if (rand.nextInt(3) > 0 && worldIn.isAirBlock(position.add(0, l, -1))) + { + this.func_181647_a(worldIn, position.add(0, l, -1), BlockVine.SOUTH); + } + + if (rand.nextInt(3) > 0 && worldIn.isAirBlock(position.add(0, l, 1))) + { + this.func_181647_a(worldIn, position.add(0, l, 1), BlockVine.NORTH); + } + } + } + } + + if (this.vinesGrow) + { + for (l = position.getY() - 3 + i; l <= position.getY() + i; ++l) + { + i1 = l - (position.getY() + i); + j1 = 2 - i1 / 2; + + for (k1 = position.getX() - j1; k1 <= position.getX() + j1; ++k1) + { + for (l1 = position.getZ() - j1; l1 <= position.getZ() + j1; ++l1) + { + BlockPos blockpos3 = new BlockPos(k1, l, l1); + + IBlockState state3 = worldIn.getBlockState(blockpos3); + if (state3.getBlock().isLeaves(state3, worldIn, blockpos3)) + { + BlockPos blockpos4 = blockpos3.west(); + blockpos1 = blockpos3.east(); + BlockPos blockpos5 = blockpos3.north(); + BlockPos blockpos2 = blockpos3.south(); + + IBlockState state4 = worldIn.getBlockState(blockpos4); + if (rand.nextInt(4) == 0 && state4.getBlock().isAir(state4, worldIn, blockpos4)) + { + this.func_181647_a(worldIn, blockpos4, BlockVine.EAST); + } + + IBlockState state1 = worldIn.getBlockState(blockpos1); + if (rand.nextInt(4) == 0 && state1.getBlock().isAir(state1, worldIn, blockpos1)) + { + this.func_181647_a(worldIn, blockpos1, BlockVine.WEST); + } + + IBlockState state5 = worldIn.getBlockState(blockpos5); + if (rand.nextInt(4) == 0 && state5.getBlock().isAir(state5, worldIn, blockpos5)) + { + this.func_181647_a(worldIn, blockpos5, BlockVine.SOUTH); + } + + IBlockState state2 = worldIn.getBlockState(blockpos2); + if (rand.nextInt(4) == 0 && state2.getBlock().isAir(state2, worldIn, blockpos2)) + { + this.func_181647_a(worldIn, blockpos2, BlockVine.NORTH); + } + } + } + } + } + + if (rand.nextInt(5) == 0 && i > 5) + { + for (l = 0; l < 2; ++l) + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (rand.nextInt(4 - l) == 0) + { + j1 = rand.nextInt(3); + this.func_181652_a(worldIn, rand.nextInt(3), position.add(enumfacing.getXOffset(), i - 5 + l, enumfacing.getZOffset()), enumfacing); + } + } + } + } + } + + return true; + } else + { + return false; + } + } + } else + { + return false; + } + } + + private void func_181647_a(World world, BlockPos pos, PropertyBool facing) + { + IBlockState iblockstate = Blocks.VINE.getDefaultState().withProperty(facing, Boolean.valueOf(true)); + this.setBlockAndNotifyAdequately(world, pos, iblockstate); + int i = 4; + + for (pos = pos.down(); world.getBlockState(pos).getBlock().isAir(world.getBlockState(pos), world, pos) && i > 0; --i) + { + this.setBlockAndNotifyAdequately(world, pos, iblockstate); + pos = pos.down(); + } + } + + private void func_181652_a(World p_181652_1_, int p_181652_2_, BlockPos p_181652_3_, EnumFacing p_181652_4_) + { + this.setBlockAndNotifyAdequately(p_181652_1_, p_181652_3_, + Blocks.COCOA.getDefaultState().withProperty(BlockCocoa.AGE, Integer.valueOf(p_181652_2_)).withProperty(BlockCocoa.FACING, p_181652_4_)); + } + + protected boolean func_150523_a(IBlockState state) + { + Block block = state.getBlock(); + return block.getMaterial(state) == Material.AIR || block.getMaterial(state) == Material.LEAVES || block == Blocks.GRASS || block == Blocks.DIRT || block == Blocks.LOG || block == Blocks.LOG2 + || block == Blocks.SAPLING || block == Blocks.VINE; + } + + public boolean isReplaceable(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + return state.getBlock().isAir(state, world, pos) || state.getBlock().isLeaves(state, world, pos) || state.getBlock().isWood(world, pos) || func_150523_a(state); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/ConfigManagerVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/ConfigManagerVenus.java new file mode 100644 index 00000000..2fc3e578 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/ConfigManagerVenus.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import java.io.File; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +public class ConfigManagerVenus +{ + + public static boolean loaded; + + static Configuration config; + + public ConfigManagerVenus(File file) + { + if (!ConfigManagerVenus.loaded) + { + if (file.exists()) + { + ConfigManagerVenus.config = new Configuration(file); + ConfigManagerVenus.syncConfig(true, true); + file.delete(); + config = ConfigManagerMars.config; + } else + { + config = ConfigManagerMars.config; + ConfigManagerVenus.syncConfig(true, false); + } + } + } + + // DIMENSIONS + public static int dimensionIDVenus; + + public static boolean disableAmbientLightning; + + public static boolean disableAluminumGen; + public static boolean disableCopperGen; + public static boolean disableGalenaGen; + public static boolean disableQuartzGen; + public static boolean disableSiliconGen; + public static boolean disableTinGen; + public static boolean disableSolarGen; + + public static void syncConfig(boolean load, boolean update) + { + try + { + Property prop; + Property propCopy; + + if (!config.isChild) + { + if (update) + { + config.load(); + } + } + + prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "dimensionIDVenus", -31); + prop.setComment("Dimension ID for Venus"); + prop.setLanguageKey("gc.configgui.dimension_id_venus").setRequiresMcRestart(true); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, prop.getName(), prop.getInt(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + propCopy.setRequiresMcRestart(prop.requiresMcRestart()); + } + dimensionIDVenus = prop.getInt(); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_DIMENSIONS); + + boolean oldLightning = false; + if (config.hasKey(Constants.CONFIG_CATEGORY_SCHEMATIC, "disableAmbientLightning")) + { + oldLightning = config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, "disableAmbientLightning", false).getBoolean(false); + } + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "disableAmbientLightning", oldLightning); + prop.setComment("Disables background thunder and lightning."); + prop.setLanguageKey("gc.configgui.disable_ambient_lightning"); + disableAmbientLightning = prop.getBoolean(oldLightning); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Aluminum Ore Gen on Venus", false); + prop.setComment("Disable Aluminum Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_aluminum_gen"); + disableAluminumGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Copper Ore Gen on Venus", false); + prop.setComment("Disable Copper Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_copper_gen"); + disableCopperGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Galena Ore Gen on Venus", false); + prop.setComment("Disable Galena Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_galena_gen"); + disableGalenaGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Quartz Ore Gen on Venus", false); + prop.setComment("Disable Quartz Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_quartz_gen"); + disableQuartzGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Silicon Ore Gen on Venus", false); + prop.setComment("Disable Silicon Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_silicon_gen"); + disableSiliconGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Tin Ore Gen on Venus", false); + prop.setComment("Disable Tin Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_tin_gen"); + disableTinGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Solar Ore Gen on Venus", false); + prop.setComment("Disable Solar Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_solar_gen"); + disableSolarGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + } catch (final Exception e) + { + GalacticraftPlanets.logger.error(e, "Galacticraft Venus (Planets) has a problem loading its config"); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusBlocks.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusBlocks.java new file mode 100644 index 00000000..f9c1521a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusBlocks.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGC; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemBlockLaser; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBossSpawnerVenus; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockGeothermalGenerator; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockScorchedRock; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSolarArrayModule; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSpout; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTier3TreasureChest; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTorchWeb; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemBlockBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemBlockTorchWeb; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraftforge.oredict.OreDictionary; + +public class VenusBlocks +{ + + public static Block venusBlock; + public static Block spout; + public static Block bossSpawner; + public static Block treasureChestTier3; + public static Block torchWeb; + public static Block sulphuricAcid; + public static Block geothermalGenerator; + public static Block crashedProbe; + public static Block scorchedRock; + public static Block solarArrayModule; + public static Block solarArrayController; + public static Block laserTurret; + + public static void initBlocks() + { + VenusBlocks.venusBlock = new BlockBasicVenus("venus"); + VenusBlocks.spout = new BlockSpout("spout"); + VenusBlocks.bossSpawner = new BlockBossSpawnerVenus("boss_spawner_venus"); + VenusBlocks.treasureChestTier3 = new BlockTier3TreasureChest("treasure_t3"); + VenusBlocks.torchWeb = new BlockTorchWeb("web_torch"); + VenusBlocks.geothermalGenerator = new BlockGeothermalGenerator("geothermal_generator"); + VenusBlocks.crashedProbe = new BlockCrashedProbe("crashed_probe"); + VenusBlocks.scorchedRock = new BlockScorchedRock("venus_rock_scorched"); + VenusBlocks.solarArrayModule = new BlockSolarArrayModule("solar_array_module"); + VenusBlocks.solarArrayController = new BlockSolarArrayController("solar_array_controller"); + VenusBlocks.laserTurret = new BlockLaserTurret("laser_turret"); + + GCBlocks.hiddenBlocks.add(VenusBlocks.bossSpawner); + + VenusBlocks.registerBlocks(); + VenusBlocks.setHarvestLevels(); + } + + private static void setHarvestLevel(Block block, String toolClass, int level, int meta) + { + block.setHarvestLevel(toolClass, level, block.getStateFromMeta(meta)); + } + + private static void setHarvestLevel(Block block, String toolClass, int level) + { + block.setHarvestLevel(toolClass, level); + } + + public static void setHarvestLevels() + { + setHarvestLevel(VenusBlocks.venusBlock, "pickaxe", 1, 0); + setHarvestLevel(VenusBlocks.venusBlock, "pickaxe", 1, 1); + setHarvestLevel(VenusBlocks.venusBlock, "pickaxe", 1, 2); + setHarvestLevel(VenusBlocks.venusBlock, "pickaxe", 1, 3); + setHarvestLevel(VenusBlocks.spout, "pickaxe", 1); + } + + public static void registerBlock(Block block, Class itemClass) + { + GCBlocks.register(Constants.MOD_ID_PLANETS, block, itemClass); + } + + public static void registerBlocks() + { + registerBlock(VenusBlocks.venusBlock, ItemBlockBasicVenus.class); + registerBlock(VenusBlocks.spout, ItemBlockGC.class); + registerBlock(VenusBlocks.bossSpawner, ItemBlockGC.class); + registerBlock(VenusBlocks.treasureChestTier3, ItemBlockDesc.class); + registerBlock(VenusBlocks.torchWeb, ItemBlockTorchWeb.class); + registerBlock(VenusBlocks.geothermalGenerator, ItemBlockDesc.class); + registerBlock(VenusBlocks.crashedProbe, ItemBlockDesc.class); + registerBlock(VenusBlocks.scorchedRock, ItemBlockGC.class); + registerBlock(VenusBlocks.solarArrayModule, ItemBlockDesc.class); + registerBlock(VenusBlocks.solarArrayController, ItemBlockDesc.class); + registerBlock(VenusBlocks.laserTurret, ItemBlockLaser.class); + } + + public static void oreDictRegistration() + { + OreDictionary.registerOre("oreCopper", BlockBasicVenus.EnumBlockBasicVenus.ORE_COPPER.getItemStack()); + OreDictionary.registerOre("oreTin", BlockBasicVenus.EnumBlockBasicVenus.ORE_TIN.getItemStack()); + OreDictionary.registerOre("oreAluminum", BlockBasicVenus.EnumBlockBasicVenus.ORE_ALUMINUM.getItemStack()); + OreDictionary.registerOre("oreAluminium", BlockBasicVenus.EnumBlockBasicVenus.ORE_ALUMINUM.getItemStack()); + OreDictionary.registerOre("oreNaturalAluminum", BlockBasicVenus.EnumBlockBasicVenus.ORE_ALUMINUM.getItemStack()); + OreDictionary.registerOre("oreQuartz", BlockBasicVenus.EnumBlockBasicVenus.ORE_QUARTZ.getItemStack()); + OreDictionary.registerOre("oreLead", BlockBasicVenus.EnumBlockBasicVenus.ORE_GALENA.getItemStack()); + OreDictionary.registerOre("oreSilicon", BlockBasicVenus.EnumBlockBasicVenus.ORE_SILICON.getItemStack()); + OreDictionary.registerOre("oreSolar", BlockBasicVenus.EnumBlockBasicVenus.ORE_SOLAR_DUST.getItemStack()); + + OreDictionary.registerOre("blockLead", BlockBasicVenus.EnumBlockBasicVenus.LEAD_BLOCK.getItemStack()); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusItems.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusItems.java new file mode 100644 index 00000000..525cb044 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusItems.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemBatteryAtomic; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemKeyVenus; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemThermalPaddingTier2; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemVolcanicPickaxe; +import net.minecraft.item.Item; +import net.minecraftforge.common.util.EnumHelper; + +public class VenusItems +{ + + public static Item thermalPaddingTier2; + public static Item basicItem; + public static Item volcanicPickaxe; + public static Item key; + public static Item bucketSulphuricAcid; + public static Item atomicBattery; + + public static Item.ToolMaterial TOOL_VOLCANIC = EnumHelper.addToolMaterial("volcanic", 3, 1561, 32.0F, 1.5F, 10); + + public static void initItems() + { + VenusItems.thermalPaddingTier2 = new ItemThermalPaddingTier2("thermal_padding_t2"); + VenusItems.basicItem = new ItemBasicVenus("basic_item_venus"); + VenusItems.volcanicPickaxe = new ItemVolcanicPickaxe("volcanic_pickaxe"); + VenusItems.key = new ItemKeyVenus("key_t3"); + VenusItems.atomicBattery = new ItemBatteryAtomic("atomic_battery"); + + VenusItems.registerItems(); + } + + private static void registerItems() + { + VenusItems.registerItem(VenusItems.thermalPaddingTier2); + VenusItems.registerItem(VenusItems.basicItem); + VenusItems.registerItem(VenusItems.volcanicPickaxe); + VenusItems.registerItem(VenusItems.key); + VenusItems.registerItem(VenusItems.atomicBattery); + } + + public static void registerItem(Item item) + { + String name = item.getTranslationKey().substring(5); + GCCoreUtil.registerGalacticraftItem(name, item); + GalacticraftCore.itemListTrue.add(item); + item.setRegistryName(name); + GalacticraftPlanets.proxy.postRegisterItem(item); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModule.java new file mode 100644 index 00000000..de1ce760 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModule.java @@ -0,0 +1,283 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBucketGC; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModule; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSulphuricAcid; +import micdoodle8.mods.galacticraft.planets.venus.dimension.TeleportTypeVenus; +import micdoodle8.mods.galacticraft.planets.venus.dimension.WorldProviderVenus; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityEntryPodVenus; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntitySpiderQueen; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityWebShot; +import micdoodle8.mods.galacticraft.planets.venus.event.EventHandlerVenus; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerGeothermal; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.network.PacketSimpleVenus; +import micdoodle8.mods.galacticraft.planets.venus.recipe.RecipeManagerVenus; +import micdoodle8.mods.galacticraft.planets.venus.tick.VenusTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityDungeonSpawnerVenus; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayModule; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySpout; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityTreasureChestVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.BiomeVenus; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialLiquid; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome.SpawnListEntry; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.registry.EntityRegistry; +import net.minecraftforge.fml.relauncher.Side; + +public class VenusModule implements IPlanetsModule +{ + + public static Planet planetVenus; + public static Fluid sulphuricAcid; + public static Fluid sulphuricAcidGC; + public static Material acidMaterial = new MaterialLiquid(MapColor.EMERALD); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + VenusModule.planetVenus = (Planet) new Planet("venus").setParentSolarSystem(GalacticraftCore.solarSystemSol).setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(2.0F) + .setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(0.75F, 0.75F)).setRelativeOrbitTime(0.61527929901423877327491785323111F); + MinecraftForge.EVENT_BUS.register(new EventHandlerVenus()); + + if (!FluidRegistry.isFluidRegistered("sulphuricacid")) + { + ResourceLocation stillIcon = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/sulphuric_acid_still"); + ResourceLocation flowingIcon = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/sulphuric_acid_flow"); + sulphuricAcidGC = new Fluid("sulphuricacid", stillIcon, flowingIcon).setDensity(6229).setViscosity(1400); + FluidRegistry.registerFluid(sulphuricAcidGC); + } else + { + GalacticraftPlanets.logger.info("Galacticraft sulphuric acid is not default, issues may occur."); + } + + sulphuricAcid = FluidRegistry.getFluid("sulphuricacid"); + + if (sulphuricAcid.getBlock() == null) + { + VenusBlocks.sulphuricAcid = new BlockSulphuricAcid("sulphuric_acid"); + ((BlockSulphuricAcid) VenusBlocks.sulphuricAcid).setQuantaPerBlock(5); + VenusBlocks.registerBlock(VenusBlocks.sulphuricAcid, ItemBlockDesc.class); + sulphuricAcid.setBlock(VenusBlocks.sulphuricAcid); + } else + { + VenusBlocks.sulphuricAcid = sulphuricAcid.getBlock(); + } + + if (VenusBlocks.sulphuricAcid != null) + { + FluidRegistry.addBucketForFluid(sulphuricAcid); + VenusItems.bucketSulphuricAcid = new ItemBucketGC(VenusBlocks.sulphuricAcid, VenusModule.sulphuricAcid).setTranslationKey("bucket_sulphuric_acid"); + VenusItems.registerItem(VenusItems.bucketSulphuricAcid); + EventHandlerGC.bucketList.put(VenusBlocks.sulphuricAcid, VenusItems.bucketSulphuricAcid); + } + + VenusBlocks.initBlocks(); + VenusItems.initItems(); + + VenusModule.planetVenus.setBiomeInfo(BiomeVenus.venusFlat, BiomeVenus.venusMountain, BiomeVenus.venusValley); + } + + @Override + public void init(FMLInitializationEvent event) + { + VenusBlocks.oreDictRegistration(); + this.registerMicroBlocks(); + + GalacticraftCore.packetPipeline.addDiscriminator(8, PacketSimpleVenus.class); + + this.registerTileEntities(); + this.registerCreatures(); + this.registerOtherEntities(); + + VenusModule.planetVenus.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/venus.png")); + VenusModule.planetVenus.setDimensionInfo(ConfigManagerVenus.dimensionIDVenus, WorldProviderVenus.class).setTierRequired(3); + VenusModule.planetVenus.setAtmosphere(new AtmosphereInfo(false, true, true, 5.0F, 0.3F, 54.0F)); + VenusModule.planetVenus.atmosphereComponent(EnumAtmosphericGas.CO2).atmosphereComponent(EnumAtmosphericGas.NITROGEN); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedZombie.class, 8, 2, 3)); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedSpider.class, 8, 2, 3)); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedSkeleton.class, 8, 2, 3)); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedCreeper.class, 8, 2, 3)); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedEnderman.class, 10, 1, 4)); + VenusModule.planetVenus.addChecklistKeys("equip_oxygen_suit", "equip_shield_controller", "thermal_padding_t2"); + + GalaxyRegistry.register(VenusModule.planetVenus); + GalacticraftRegistry.registerTeleportType(WorldProviderVenus.class, new TeleportTypeVenus()); + GalacticraftRegistry.registerRocketGui(WorldProviderVenus.class, new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/venus_rocket_gui.png")); + GalacticraftRegistry.addDungeonLoot(3, new ItemStack(VenusItems.volcanicPickaxe, 1, 0)); + GalacticraftRegistry.addDungeonLoot(3, new ItemStack(VenusItems.basicItem, 1, 0)); + + GalacticraftRegistry.registerGear(Constants.GEAR_ID_SHIELD_CONTROLLER, EnumExtendedInventorySlot.SHIELD_CONTROLLER, new ItemStack(VenusItems.basicItem, 1, 0)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T2_HELMET, EnumExtendedInventorySlot.THERMAL_HELMET, new ItemStack(VenusItems.thermalPaddingTier2, 1, 0)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T2_CHESTPLATE, EnumExtendedInventorySlot.THERMAL_CHESTPLATE, new ItemStack(VenusItems.thermalPaddingTier2, 1, 1)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T2_LEGGINGS, EnumExtendedInventorySlot.THERMAL_LEGGINGS, new ItemStack(VenusItems.thermalPaddingTier2, 1, 2)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T2_BOOTS, EnumExtendedInventorySlot.THERMAL_BOOTS, new ItemStack(VenusItems.thermalPaddingTier2, 1, 3)); + + GalacticraftCore.proxy.registerFluidTexture(VenusModule.sulphuricAcid, new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/misc/underacid.png")); + + MinecraftForge.EVENT_BUS.register(new VenusTickHandlerServer()); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + RecipeManagerVenus.loadCompatibilityRecipes(); + + GCPlanetDimensions.VENUS = WorldUtil.getDimensionTypeById(ConfigManagerVenus.dimensionIDVenus); + } + + @Override + public void serverStarting(FMLServerStartingEvent event) + { + } + + @Override + public void serverInit(FMLServerStartedEvent event) + { + + } + + private void registerMicroBlocks() + { + } + + public void registerTileEntities() + { + register(TileEntitySpout.class, "gc_venus_spout"); + register(TileEntityDungeonSpawnerVenus.class, "gc_venus_dungeon_spawner"); + register(TileEntityTreasureChestVenus.class, "gc_tier_3_treasure_chest"); + register(TileEntityGeothermalGenerator.class, "gc_geothermal_generator"); + register(TileEntityCrashedProbe.class, "gc_crashed_probe"); + register(TileEntitySolarArrayModule.class, "gc_solar_array_module"); + register(TileEntitySolarArrayController.class, "gc_solar_array_controller"); + register(TileEntityLaserTurret.class, "gc_laser_turret"); + } + + public void registerCreatures() + { + this.registerGalacticraftCreature(EntityJuicer.class, "juicer", ColorUtil.to32BitColor(180, 180, 50, 0), ColorUtil.to32BitColor(255, 0, 2, 0)); + this.registerGalacticraftCreature(EntitySpiderQueen.class, "spider_queen", ColorUtil.to32BitColor(180, 180, 50, 0), ColorUtil.to32BitColor(255, 0, 2, 0)); + } + + public void registerOtherEntities() + { + VenusModule.registerGalacticraftNonMobEntity(EntityEntryPodVenus.class, "entry_pod_venus", 150, 1, true); + VenusModule.registerGalacticraftNonMobEntity(EntityWebShot.class, "web_shot", 150, 1, true); + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_VENUS); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + BlockPos pos = new BlockPos(x, y, z); + TileEntity tile = world.getTileEntity(pos); + + if (ID == GuiIdsPlanets.MACHINE_VENUS) + { + if (tile instanceof TileEntityGeothermalGenerator) + { + return new ContainerGeothermal(player.inventory, (TileEntityGeothermalGenerator) tile); + } else if (tile instanceof TileEntityCrashedProbe) + { + return new ContainerCrashedProbe(player.inventory, (TileEntityCrashedProbe) tile); + } else if (tile instanceof TileEntitySolarArrayController) + { + return new ContainerSolarArrayController(player.inventory, (TileEntitySolarArrayController) tile); + } else if (tile instanceof TileEntityLaserTurret) + { + return new ContainerLaserTurret(player.inventory, (TileEntityLaserTurret) tile); + } + } + + return null; + } + + @Override + public Configuration getConfiguration() + { + return ConfigManagerVenus.config; + } + + @Override + public void syncConfig() + { + ConfigManagerVenus.syncConfig(false, false); + } + + public void registerGalacticraftCreature(Class clazz, String name, int back, int fore) + { + VenusModule.registerGalacticraftNonMobEntity(clazz, name, 80, 3, true); + int nextEggID = GCCoreUtil.getNextValidID(); + if (nextEggID < 65536) + { + ResourceLocation resourcelocation = new ResourceLocation(Constants.MOD_ID_PLANETS, name); + EntityList.ENTITY_EGGS.put(resourcelocation, new EntityList.EntityEggInfo(resourcelocation, back, fore)); + } + } + + public static void registerGalacticraftNonMobEntity(Class var0, String var1, int trackingDistance, int updateFreq, boolean sendVel) + { + ResourceLocation registryName = new ResourceLocation(Constants.MOD_ID_PLANETS, var1); + EntityRegistry.registerModEntity(registryName, var0, var1, GCCoreUtil.nextInternalID(), GalacticraftPlanets.instance, trackingDistance, updateFreq, sendVel); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModuleClient.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModuleClient.java new file mode 100644 index 00000000..ae088071 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModuleClient.java @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.client.IItemMeshDefinitionCustom; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModuleClient; +import micdoodle8.mods.galacticraft.planets.venus.client.TickHandlerClientVenus; +import micdoodle8.mods.galacticraft.planets.venus.client.fx.ParticleAcidExhaust; +import micdoodle8.mods.galacticraft.planets.venus.client.fx.ParticleAcidVapor; +import micdoodle8.mods.galacticraft.planets.venus.client.gui.GuiCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.client.gui.GuiGeothermal; +import micdoodle8.mods.galacticraft.planets.venus.client.gui.GuiLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.client.gui.GuiSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.client.render.entity.RenderEntryPodVenus; +import micdoodle8.mods.galacticraft.planets.venus.client.render.entity.RenderJuicer; +import micdoodle8.mods.galacticraft.planets.venus.client.render.entity.RenderSpiderQueen; +import micdoodle8.mods.galacticraft.planets.venus.client.render.entity.RenderWebShot; +import micdoodle8.mods.galacticraft.planets.venus.client.render.tile.TileEntityLaserTurretRenderer; +import micdoodle8.mods.galacticraft.planets.venus.client.render.tile.TileEntityTreasureChestRenderer; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityEntryPodVenus; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntitySpiderQueen; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityWebShot; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityTreasureChestVenus; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class VenusModuleClient implements IPlanetsModuleClient +{ + + private static ModelResourceLocation sulphuricAcidLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "sulphuric_acid", "fluid"); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + MinecraftForge.EVENT_BUS.register(this); + RenderingRegistry.registerEntityRenderingHandler(EntityJuicer.class, (RenderManager manager) -> new RenderJuicer(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEntryPodVenus.class, (RenderManager manager) -> new RenderEntryPodVenus(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntitySpiderQueen.class, (RenderManager manager) -> new RenderSpiderQueen(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityWebShot.class, (RenderManager manager) -> new RenderWebShot(manager)); + } + + private void addPlanetVariants(String name, String... variants) + { + Item itemBlockVariants = Item.REGISTRY.getObject(new ResourceLocation(Constants.MOD_ID_PLANETS, name)); + ResourceLocation[] variants0 = new ResourceLocation[variants.length]; + for (int i = 0; i < variants.length; ++i) + { + variants0[i] = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + variants[i]); + } + ModelBakery.registerItemVariants(itemBlockVariants, variants0); + } + + @Override + public void registerVariants() + { + addPlanetVariants("venus", "venus_rock_0", "venus_rock_1", "venus_rock_2", "venus_rock_3", "dungeon_brick_venus_1", "dungeon_brick_venus_2", "venus_ore_aluminum", "venus_ore_copper", + "venus_ore_galena", "venus_ore_quartz", "venus_ore_silicon", "venus_ore_tin", "lead_block", "venus_ore_solar"); + addPlanetVariants("thermal_padding_t2", "thermal_helm_t2", "thermal_chestplate_t2", "thermal_leggings_t2", "thermal_boots_t2"); + addPlanetVariants("basic_item_venus", "shield_controller", "ingot_lead", "radioisotope_core", "thermal_fabric", "solar_dust", "solar_module_2", "thin_solar_wafer"); + addPlanetVariants("web_torch", "web_torch_0", "web_torch_1"); + + Item sludge = Item.getItemFromBlock(VenusBlocks.sulphuricAcid); + ModelBakery.registerItemVariants(sludge, new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "sulphuric_acid")); + ModelLoader.setCustomMeshDefinition(sludge, IItemMeshDefinitionCustom.create((ItemStack stack) -> sulphuricAcidLocation)); + ModelLoader.setCustomStateMapper(VenusBlocks.sulphuricAcid, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return sulphuricAcidLocation; + } + }); + } + + @Override + public void init(FMLInitializationEvent event) + { + MinecraftForge.EVENT_BUS.register(new TickHandlerClientVenus()); + VenusModuleClient.registerBlockRenderers(); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void loadTextures(TextureStitchEvent.Pre event) + { + registerTexture(event, "pod_flame"); + registerTexture(event, "web"); + registerTexture(event, "laser"); + registerTexture(event, "laser_off"); + registerTexture(event, "orb"); + } + + private void registerTexture(TextureStitchEvent.Pre event, String texture) + { + event.getMap().registerSprite(new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/" + texture)); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onModelBakeEvent(ModelBakeEvent event) + { + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTreasureChestVenus.class, new TileEntityTreasureChestRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaserTurret.class, new TileEntityLaserTurretRenderer()); + } + + public static void registerBlockRenderers() + { + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 0, "venus_rock_0"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 1, "venus_rock_1"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 2, "venus_rock_2"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 3, "venus_rock_3"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 4, "dungeon_brick_venus_1"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 5, "dungeon_brick_venus_2"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 6, "venus_ore_aluminum"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 7, "venus_ore_copper"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 8, "venus_ore_galena"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 9, "venus_ore_quartz"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 10, "venus_ore_silicon"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 11, "venus_ore_tin"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 12, "lead_block"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 13, "venus_ore_solar"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.spout, 0, "spout"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.treasureChestTier3, 0, "treasure_t3"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.torchWeb, 0, "web_torch_0"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.torchWeb, 1, "web_torch_1"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.geothermalGenerator, 0, "geothermal_generator"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.crashedProbe); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.scorchedRock); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.bossSpawner); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.solarArrayModule); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.solarArrayController, 0, "solar_array_controller"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.laserTurret); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.thermalPaddingTier2, 0, "thermal_helm_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.thermalPaddingTier2, 1, "thermal_chestplate_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.thermalPaddingTier2, 2, "thermal_leggings_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.thermalPaddingTier2, 3, "thermal_boots_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 0, "shield_controller"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 1, "ingot_lead"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 2, "radioisotope_core"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 3, "thermal_fabric"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 4, "solar_dust"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 5, "solar_module_2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 6, "thin_solar_wafer"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.key, 0, "key_t3"); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (side == Side.CLIENT) + { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + + if (ID == GuiIdsPlanets.MACHINE_VENUS) + { + if (tile instanceof TileEntityGeothermalGenerator) + { + return new GuiGeothermal(player.inventory, (TileEntityGeothermalGenerator) tile); + } else if (tile instanceof TileEntityCrashedProbe) + { + return new GuiCrashedProbe(player.inventory, (TileEntityCrashedProbe) tile); + } else if (tile instanceof TileEntitySolarArrayController) + { + return new GuiSolarArrayController(player.inventory, (TileEntitySolarArrayController) tile); + } else if (tile instanceof TileEntityLaserTurret) + { + return new GuiLaserTurret(player.inventory, (TileEntityLaserTurret) tile); + } + } + } + + return null; + } + + @Override + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData) + { + Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + double dX = mc.getRenderViewEntity().posX - position.x; + double dY = mc.getRenderViewEntity().posY - position.y; + double dZ = mc.getRenderViewEntity().posZ - position.z; + Particle particle = null; + double viewDistance = 64.0D; + + if (particleID.equals("acidVapor")) + { + particle = new ParticleAcidVapor(mc.world, position.x, position.y, position.z, motion.x, motion.y, motion.z, 2.5F); + } + + if (dX * dX + dY * dY + dZ * dZ < viewDistance * viewDistance) + { + if (particleID.equals("acidExhaust")) + { + particle = new ParticleAcidExhaust(mc.world, position.x, position.y, position.z, motion.x, motion.y, motion.z, 0.5F); + } + } + + if (particle != null) + { + mc.effectRenderer.addEffect(particle); + } + } + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_VENUS); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBasicVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBasicVenus.java new file mode 100644 index 00000000..ff6f3f23 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBasicVenus.java @@ -0,0 +1,401 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import com.google.common.base.Predicate; +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.block.IPlantableBlock; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockBasicVenus extends Block implements IDetectableResource, IPlantableBlock, ITerraformableBlock, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE_VENUS = PropertyEnum.create("basictypevenus", EnumBlockBasicVenus.class); + + public enum EnumBlockBasicVenus implements IStringSerializable + { + + ROCK_SOFT(0, "venus_rock_0"), + ROCK_HARD(1, "venus_rock_1"), + ROCK_MAGMA(2, "venus_rock_2"), + ROCK_VOLCANIC_DEPOSIT(3, "venus_rock_3"), + DUNGEON_BRICK_1(4, "dungeon_brick_venus_1"), + DUNGEON_BRICK_2(5, "dungeon_brick_venus_2"), + ORE_ALUMINUM(6, "venus_ore_aluminum"), + ORE_COPPER(7, "venus_ore_copper"), + ORE_GALENA(8, "venus_ore_galena"), + ORE_QUARTZ(9, "venus_ore_quartz"), + ORE_SILICON(10, "venus_ore_silicon"), + ORE_TIN(11, "venus_ore_tin"), + LEAD_BLOCK(12, "lead_block"), + ORE_SOLAR_DUST(13, "venus_ore_solar"); + + private final int meta; + private final String name; + + EnumBlockBasicVenus(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockBasicVenus[] values = values(); + + public static EnumBlockBasicVenus byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + public ItemStack getItemStack() + { + return new ItemStack(VenusBlocks.venusBlock, 1, this.meta); + } + } + + public BlockBasicVenus(String assetName) + { + super(Material.ROCK); + this.blockHardness = 2.2F; + this.blockResistance = 2.5F; + this.setDefaultState(this.blockState.getBaseState().withProperty(BASIC_TYPE_VENUS, EnumBlockBasicVenus.ROCK_SOFT)); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te, ItemStack tool) + { + player.addStat(StatList.getBlockStats(this)); + player.addExhaustion(0.025F); + + if (this.canSilkHarvest(worldIn, pos, state, player) && EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) + { + ArrayList items = new ArrayList(); + items.add(this.getSilkTouchDrop(state)); + + net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player); + + for (ItemStack is : items) + { + spawnAsEntity(worldIn, pos, is); + } + } else + { + int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, tool); + harvesters.set(player); + this.dropBlockAsItem(worldIn, pos, state, i); + harvesters.set(null); + if ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS) == EnumBlockBasicVenus.ROCK_MAGMA) + { + worldIn.setBlockState(pos, Blocks.FLOWING_LAVA.getDefaultState()); + } + } + } + + @Override + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) + { + EnumBlockBasicVenus type = world.getBlockState(pos).getValue(BASIC_TYPE_VENUS); + + if (type == EnumBlockBasicVenus.ROCK_HARD) + { + return 6.0F; + } else if (type == EnumBlockBasicVenus.DUNGEON_BRICK_1 || type == EnumBlockBasicVenus.DUNGEON_BRICK_2) + { + return 40.0F; + } else if (type == EnumBlockBasicVenus.ORE_ALUMINUM || type == EnumBlockBasicVenus.ORE_COPPER || type == EnumBlockBasicVenus.ORE_GALENA || type == EnumBlockBasicVenus.ORE_QUARTZ + || type == EnumBlockBasicVenus.ORE_SILICON || type == EnumBlockBasicVenus.ORE_TIN || type == EnumBlockBasicVenus.ORE_SOLAR_DUST) + { + return 3.0F; + } + + return this.blockResistance / 5.0F; + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + EnumBlockBasicVenus type = blockState.getValue(BASIC_TYPE_VENUS); + + if (type == EnumBlockBasicVenus.ROCK_HARD) + { + return 1.5F; + } + + if (type == EnumBlockBasicVenus.ROCK_SOFT) + { + return 0.9F; + } + + if (type == EnumBlockBasicVenus.DUNGEON_BRICK_1 || type == EnumBlockBasicVenus.DUNGEON_BRICK_2) + { + return 4.0F; + } + + if (type == EnumBlockBasicVenus.ORE_ALUMINUM || type == EnumBlockBasicVenus.ORE_COPPER || type == EnumBlockBasicVenus.ORE_GALENA || type == EnumBlockBasicVenus.ORE_QUARTZ + || type == EnumBlockBasicVenus.ORE_SILICON || type == EnumBlockBasicVenus.ORE_TIN || type == EnumBlockBasicVenus.ORE_SOLAR_DUST) + { + return 5.0F; + } + + return this.blockHardness; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_SILICON: + return GCItems.basicItem; + case ORE_QUARTZ: + return Items.QUARTZ; + case ORE_SOLAR_DUST: + return VenusItems.basicItem; + default: + return Item.getItemFromBlock(this); + } + } + + @Override + public int damageDropped(IBlockState state) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_SILICON: + return 2; + case ORE_QUARTZ: + return 0; + case ORE_SOLAR_DUST: + return 4; + default: + return getMetaFromState(state); + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_SILICON: + if (fortune > 0) + { + int j = random.nextInt(fortune + 2) - 1; + + if (j < 0) + { + j = 0; + } + + return this.quantityDropped(random) * (j + 1); + } + default: + return this.quantityDropped(random); + } + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + Random rand = world instanceof World ? ((World) world).rand : new Random(); + if (this.getItemDropped(state, rand, fortune) != Item.getItemFromBlock(this)) + { + int i; + + switch (type) + { + case ORE_QUARTZ: + case ORE_SILICON: + i = MathHelper.getInt(rand, 2, 5); + break; + default: + i = 0; + break; + } + + return i; + } + return 0; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state)); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (EnumBlockBasicVenus type : EnumBlockBasicVenus.values()) + { + list.add(new ItemStack(this, 1, type.getMeta())); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_ALUMINUM: + case ORE_COPPER: + case ORE_GALENA: + case ORE_QUARTZ: + case ORE_SILICON: + case ORE_TIN: + case ORE_SOLAR_DUST: + return true; + default: + return false; + } + } + + @Override + public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) + { + return false; + } + + @Override + public int requiredLiquidBlocksNearby() + { + return 4; + } + + @Override + public boolean isPlantable(IBlockState state) + { + return false; + } + + @Override + public boolean isTerraformable(World world, BlockPos pos) + { + EnumBlockBasicVenus type = world.getBlockState(pos).getValue(BASIC_TYPE_VENUS); + + if (type == EnumBlockBasicVenus.ROCK_HARD || type == EnumBlockBasicVenus.ROCK_SOFT) + { + BlockPos above = pos.offset(EnumFacing.UP); + IBlockState stateAbove = world.getBlockState(above); + return stateAbove.getBlock().isAir(stateAbove, world, above); + } + + return false; + } + + @Override + public boolean isReplaceableOreGen(IBlockState state, IBlockAccess world, BlockPos pos, Predicate target) + { + EnumBlockBasicVenus type = state.getValue(BASIC_TYPE_VENUS); + return type == EnumBlockBasicVenus.ROCK_HARD; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE_VENUS, EnumBlockBasicVenus.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE_VENUS); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) getStateFromMeta(meta).getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_ALUMINUM: + case ORE_COPPER: + case ORE_GALENA: + case ORE_QUARTZ: + case ORE_SILICON: + case ORE_TIN: + case ORE_SOLAR_DUST: + return EnumSortCategoryBlock.ORE; + case DUNGEON_BRICK_1: + case DUNGEON_BRICK_2: + return EnumSortCategoryBlock.BRICKS; + case LEAD_BLOCK: + return EnumSortCategoryBlock.INGOT_BLOCK; + default: + return EnumSortCategoryBlock.GENERAL; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBossSpawnerVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBossSpawnerVenus.java new file mode 100644 index 00000000..0022b3c9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBossSpawnerVenus.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.core.blocks.BlockBossSpawner; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityDungeonSpawnerVenus; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockBossSpawnerVenus extends BlockBossSpawner +{ + + public BlockBossSpawnerVenus(String assetName) + { + super(assetName); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityDungeonSpawnerVenus(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockCrashedProbe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockCrashedProbe.java new file mode 100644 index 00000000..34776806 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockCrashedProbe.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCrashedProbe extends BlockTileGC implements ISortableBlock, ITileEntityProvider +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockCrashedProbe(String assetName) + { + super(Material.IRON); + this.blockHardness = 4.5F; + this.blockResistance = 2.5F; + this.setSoundType(SoundType.METAL); + this.setTickRandomly(true); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityCrashedProbe(); + } + + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 0.65, pos.getY() + 1.0, pos.getZ() + 0.9, 0.0, 0.0, 0.0); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 0.2, pos.getY() + 1.0, pos.getZ() + 0.2, 0.0, 0.0, 0.0); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 1.0, pos.getY() + 0.25, pos.getZ() + 0.5, 0.0, 0.0, 0.0); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityCrashedProbe && ((TileEntityCrashedProbe) tile).getDropCore()) + { + spawnItem(worldIn, pos); + } + + super.breakBlock(worldIn, pos, state); + } + + // Drops a Radioisotope Core as well as the Crashed Probe block + private void spawnItem(World worldIn, BlockPos pos) + { + final float f = 0.7F; + Random syncRandom = GCCoreUtil.getRandom(pos); + final double d0 = syncRandom.nextFloat() * f + (1.0F - f) * 0.5D; + final double d1 = syncRandom.nextFloat() * f + (1.0F - f) * 0.2D + 0.6D; + final double d2 = syncRandom.nextFloat() * f + (1.0F - f) * 0.5D; + final EntityItem entityitem = new EntityItem(worldIn, pos.getX() + d0, pos.getY() + d1, pos.getZ() + d2, new ItemStack(VenusItems.basicItem, 1, 2)); + entityitem.setDefaultPickupDelay(); + worldIn.spawnEntity(entityitem); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockGeothermalGenerator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockGeothermalGenerator.java new file mode 100644 index 00000000..475fa456 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockGeothermalGenerator.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockGeothermalGenerator extends BlockTileGC implements ITileEntityProvider, IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyBool ACTIVE = PropertyBool.create("active"); + + public BlockGeothermalGenerator(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + int change = world.getBlockState(pos).getValue(FACING).rotateY().getHorizontalIndex(); + world.setBlockState(pos, this.getStateFromMeta(change), 3); + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityGeothermalGenerator(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, ACTIVE); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (!(tile instanceof TileEntityGeothermalGenerator)) + { + return state; + } + TileEntityGeothermalGenerator generator = (TileEntityGeothermalGenerator) tile; + return state.withProperty(ACTIVE, generator.hasValidSpout() && !generator.getDisabled(0)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockLaserTurret.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockLaserTurret.java new file mode 100644 index 00000000..c91f0ad9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockLaserTurret.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class BlockLaserTurret extends BlockTileGC implements ITileEntityProvider, IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockLaserTurret(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile).setOwnerUUID(placer.getUniqueID()); + ((TileEntityLaserTurret) tile).addPlayer(placer.getName()); + } + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + BlockMulti.onPlacement(worldIn, pos, placer, this); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile).onDestroy(tile); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + int change = world.getBlockState(pos).getValue(FACING).rotateY().getHorizontalIndex(); + world.setBlockState(pos, this.getStateFromMeta(change), 3); + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityLaserTurret(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockScorchedRock.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockScorchedRock.java new file mode 100644 index 00000000..6331137f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockScorchedRock.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockScorchedRock extends Block implements ISortableBlock +{ + + public BlockScorchedRock(String assetName) + { + super(Material.ROCK); + this.blockHardness = 0.9F; + this.blockResistance = 2.5F; + this.setTickRandomly(true); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + rand.nextDouble(), pos.getY() + 1.0, pos.getZ() + rand.nextDouble(), 0.0, 0.0, 0.0); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayController.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayController.java new file mode 100644 index 00000000..a4762648 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayController.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockSolarArrayController extends BlockTileGC implements IShiftDescription, IPartialSealableBlock, ISortableBlock, ITileEntityProvider +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0, 0.25, 0.0, 1.0, 0.78125, 1.0); + + public BlockSolarArrayController(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntitySolarArrayController(); + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayModule.java new file mode 100644 index 00000000..b35bbf8a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayModule.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvanced; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayModule; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSolarArrayModule extends BlockAdvanced implements IShiftDescription, IPartialSealableBlock, ISortableBlock, ITileEntityProvider +{ + + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0, 0.375, 0.0, 1.0, 0.625, 1.0); + + public BlockSolarArrayModule(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof INetworkConnection) + { + ((INetworkConnection) tile).refresh(); + } + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntitySolarArrayModule(); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return direction.getAxis() == EnumFacing.Axis.Y; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSpout.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSpout.java new file mode 100644 index 00000000..2b8e4251 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSpout.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySpout; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSpout extends Block implements ISortableBlock, ITileEntityProvider +{ + + public BlockSpout(String assetName) + { + super(Material.ROCK); + this.blockHardness = 4.5F; + this.blockResistance = 2.5F; + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntitySpout(); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(VenusBlocks.venusBlock); + } + + @Override + public int damageDropped(IBlockState state) + { + return BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT.getMeta(); + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + return super.getDrops(world, pos, state, fortune); + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return (face == EnumFacing.UP) ? BlockFaceShape.BOWL : BlockFaceShape.SOLID; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSulphuricAcid.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSulphuricAcid.java new file mode 100644 index 00000000..7cffa061 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSulphuricAcid.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.Random; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSulphuricAcid extends BlockFluidClassic +{ + + public BlockSulphuricAcid(String assetName) + { + super(VenusModule.sulphuricAcid, VenusModule.acidMaterial); + this.setQuantaPerBlock(9); + this.setLightLevel(0.1F); + this.needsRandomTick = true; + this.setTranslationKey(assetName); + } + + @Override + @Nullable + public Boolean isEntityInsideMaterial(IBlockAccess world, BlockPos pos, IBlockState state, Entity entity, double yToTest, Material material, boolean testingHead) + { + return true; + } + + @Override + public boolean canDisplace(IBlockAccess world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + return super.canDisplace(world, pos); + } + + @Override + public boolean displaceIfPossible(World world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + return super.displaceIfPossible(world, pos); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + super.randomDisplayTick(stateIn, worldIn, pos, rand); + + if (rand.nextInt(1200) == 0) + { + worldIn.playSound(null, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, SoundEvents.BLOCK_LAVA_AMBIENT, SoundCategory.BLOCKS, rand.nextFloat() * 0.25F + 0.75F, + 0.00001F + rand.nextFloat() * 0.5F); + } + if (rand.nextInt(10) == 0) + { + BlockPos below = pos.down(); + IBlockState state = worldIn.getBlockState(below); + if (state.getBlock().isSideSolid(state, worldIn, below, EnumFacing.UP) && !worldIn.getBlockState(pos.down(2)).getMaterial().blocksMovement()) + { + GalacticraftPlanets.spawnParticle("bacterialDrip", new Vector3(pos.getX() + rand.nextFloat(), pos.getY() - 1.05D, pos.getZ() + rand.nextFloat()), new Vector3(0, 0, 0)); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTier3TreasureChest.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTier3TreasureChest.java new file mode 100644 index 00000000..67dd4c05 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTier3TreasureChest.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityTreasureChestVenus; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockTier3TreasureChest extends BlockTier1TreasureChest +{ + + public BlockTier3TreasureChest(String assetName) + { + super(assetName); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityTreasureChestVenus(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTorchWeb.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTorchWeb.java new file mode 100644 index 00000000..8253bf12 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTorchWeb.java @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IShearable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockTorchWeb extends Block implements IShearable, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum WEB_TYPE = PropertyEnum.create("webtype", EnumWebType.class); + protected static final AxisAlignedBB AABB_WEB = new AxisAlignedBB(0.35, 0.0, 0.35, 0.65, 1.0, 0.65); + protected static final AxisAlignedBB AABB_WEB_TORCH = new AxisAlignedBB(0.35, 0.25, 0.35, 0.65, 1.0, 0.65); + + public enum EnumWebType implements IStringSerializable + { + + WEB_0(0, "web_torch_0"), WEB_1(1, "web_torch_1"); + + private final int meta; + private final String name; + + EnumWebType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumWebType[] values = values(); + + public static EnumWebType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockTorchWeb(String assetName) + { + super(Material.CIRCUITS); + this.setLightLevel(1.0F); + this.setTranslationKey(assetName); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + if (state.getValue(WEB_TYPE) == EnumWebType.WEB_1) + { + return AABB_WEB_TORCH; + } + + return AABB_WEB; + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + if (state.getValue(WEB_TYPE) == EnumWebType.WEB_1) + { + return 15; + } + + return 0; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return null; + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + if (world.getBlockState(pos).getBlock().isReplaceable(world, pos) && this.canBlockStay(world, pos, this.getStateFromMeta(meta))) + { + return super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand); + } + return world.getBlockState(pos); + } + + private boolean canBlockStay(World world, BlockPos pos, IBlockState state) + { + IBlockState blockUp = world.getBlockState(pos.up()); + return blockUp.getMaterial().isSolid() || blockUp.getBlock() == this && blockUp.getValue(WEB_TYPE) == EnumWebType.WEB_0; + } + + @Override + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.checkAndDropBlock(world, pos, state); + } + + @Override + public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) + { + this.checkAndDropBlock(world, pos, state); + } + + protected void checkAndDropBlock(World world, BlockPos pos, IBlockState state) + { + if (!this.canBlockStay(world, pos, state)) + { + this.dropBlockAsItem(world, pos, state, 0); + world.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); + } + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public int quantityDropped(Random rand) + { + return 0; + } + + @Override + public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this, 1, this.getMetaFromState(world.getBlockState(pos)))); + return ret; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(WEB_TYPE, EnumWebType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumWebType) state.getValue(WEB_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, WEB_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/FakeLightningBoltRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/FakeLightningBoltRenderer.java new file mode 100644 index 00000000..b08d2d32 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/FakeLightningBoltRenderer.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client; + +import java.util.Random; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import org.lwjgl.opengl.GL11; + +public class FakeLightningBoltRenderer +{ + + public static void renderBolt(long boltVertex, double x, double y, double z) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + double[] adouble = new double[8]; + double[] adouble1 = new double[8]; + double d0 = 0.0D; + double d1 = 0.0D; + Random random = new Random(boltVertex); + + for (int i = 7; i >= 0; --i) + { + adouble[i] = d0; + adouble1[i] = d1; + d0 += (double) (random.nextInt(11) - 5); + d1 += (double) (random.nextInt(11) - 5); + } + + for (int k1 = 0; k1 < 4; ++k1) + { + Random random1 = new Random(boltVertex); + + for (int j = 0; j < 3; ++j) + { + int k = 7; + int l = 0; + + if (j > 0) + { + k = 7 - j; + } + + if (j > 0) + { + l = k - 2; + } + + double d2 = adouble[k] - d0; + double d3 = adouble1[k] - d1; + + for (int i1 = k; i1 >= l; --i1) + { + double d4 = d2; + double d5 = d3; + + if (j == 0) + { + d2 += (double) (random1.nextInt(11) - 5); + d3 += (double) (random1.nextInt(11) - 5); + } else + { + d2 += (double) (random1.nextInt(31) - 15); + d3 += (double) (random1.nextInt(31) - 15); + } + + worldrenderer.begin(5, DefaultVertexFormats.POSITION_COLOR); + double d6 = 0.1D + (double) k1 * 0.2D; + + if (j == 0) + { + d6 *= (double) i1 * 0.1D + 1.0D; + } + + double d7 = 0.1D + (double) k1 * 0.2D; + + if (j == 0) + { + d7 *= (double) (i1 - 1) * 0.1D + 1.0D; + } + + for (int j1 = 0; j1 < 5; ++j1) + { + double d8 = x + 0.5D - d6; + double d9 = z + 0.5D - d6; + + if (j1 == 1 || j1 == 2) + { + d8 += d6 * 2.0D; + } + + if (j1 == 2 || j1 == 3) + { + d9 += d6 * 2.0D; + } + + double d10 = x + 0.5D - d7; + double d11 = z + 0.5D - d7; + + if (j1 == 1 || j1 == 2) + { + d10 += d7 * 2.0D; + } + + if (j1 == 2 || j1 == 3) + { + d11 += d7 * 2.0D; + } + + worldrenderer.pos(d10 + d2, y + (double) (i1 * 16), d11 + d3).color(0.45F, 0.45F, 0.5F, 0.3F).endVertex(); + worldrenderer.pos(d8 + d4, y + (double) ((i1 + 1) * 16), d9 + d5).color(0.45F, 0.45F, 0.5F, 0.3F).endVertex(); + } + + tessellator.draw(); + } + } + } + + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/SkyProviderVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/SkyProviderVenus.java new file mode 100644 index 00000000..44b23d35 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/SkyProviderVenus.java @@ -0,0 +1,385 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class SkyProviderVenus extends IRenderHandler +{ + + private static final ResourceLocation overworldTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/atmosphericsun.png"); + + public int starList; + public int glSkyList; + public int glSkyList2; + private float sunSize; + + public SkyProviderVenus(IGalacticraftWorldProvider worldProvider) + { + this.sunSize = 30.0F * worldProvider.getSolarSize(); + + int displayLists = GLAllocation.generateDisplayLists(3); + this.starList = displayLists; + this.glSkyList = displayLists + 1; + this.glSkyList2 = displayLists + 2; + + // Bind stars to display list + GL11.glPushMatrix(); + GL11.glNewList(this.starList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j + 0, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j + 0, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + Vec3d vec3 = world.getSkyColor(mc.getRenderViewEntity(), partialTicks); + float f1 = (float) vec3.x; + float f2 = (float) vec3.y; + float f3 = (float) vec3.z; + float f6; + + if (mc.gameSettings.anaglyph) + { + float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F; + float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F; + f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F; + f1 = f4; + f2 = f5; + f3 = f6; + } + + GL11.glColor3f(f1, f2, f3); + Tessellator tessellator1 = Tessellator.getInstance(); + BufferBuilder worldRenderer1 = tessellator1.getBuffer(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(f1, f2, f3); + GL11.glCallList(this.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + RenderHelper.disableStandardItemLighting(); + float f7; + float f8; + float f9; + float f10; + + float f18 = world.getStarBrightness(partialTicks); + + if (f18 > 0.0F) + { + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-19.0F, 0, 1.0F, 0); + GL11.glColor4f(f18, f18, f18, f18); + GL11.glCallList(this.starList); + GL11.glPopMatrix(); + } + + float[] afloat = new float[4]; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + afloat[0] = 255 / 255.0F; + afloat[1] = 194 / 255.0F; + afloat[2] = 180 / 255.0F; + afloat[3] = 0.3F; + f6 = afloat[0]; + f7 = afloat[1]; + f8 = afloat[2]; + float f11; + + if (mc.gameSettings.anaglyph) + { + f9 = (f6 * 30.0F + f7 * 59.0F + f8 * 11.0F) / 100.0F; + f10 = (f6 * 30.0F + f7 * 70.0F) / 100.0F; + f11 = (f6 * 30.0F + f8 * 70.0F) / 100.0F; + f6 = f9; + f7 = f10; + f8 = f11; + } + + f18 = 1.0F - f18; + + worldRenderer1.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + float r = f6 * f18; + float g = f7 * f18; + float b = f8 * f18; + float a = afloat[3] * 2 / f18; + worldRenderer1.pos(0.0D, 100.0D, 0.0D).color(r, g, b, a).endVertex(); + r = afloat[0] * f18; + g = afloat[1] * f18; + b = afloat[2] * f18 / 20.0F; + a = 0.0F; + + // Render sun aura + f10 = 20.0F; + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) -f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) -f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + + tessellator1.draw(); + worldRenderer1.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + r = f6 * f18; + g = f7 * f18; + b = f8 * f18; + a = afloat[3] * f18; + worldRenderer1.pos(0.0D, 100.0D, 0.0D).color(r, g, b, a).endVertex(); + r = afloat[0] * f18; + g = afloat[1] * f18; + b = afloat[2] * f18; + a = 0.0F; + + // Render larger sun aura + f10 = 20.0F; + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) -f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) -f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + + tessellator1.draw(); + GL11.glPopMatrix(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE, GL11.GL_ZERO); + GL11.glPushMatrix(); + f7 = 0.0F; + f8 = 0.0F; + f9 = 0.0F; + GL11.glTranslatef(f7, f8, f9); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + // Render sun + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + // Some blanking to conceal the stars + f10 = this.sunSize / 3.5F; + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer1.pos(-f10, 99.9D, -f10).endVertex(); + worldRenderer1.pos(f10, 99.9D, -f10).endVertex(); + worldRenderer1.pos(f10, 99.9D, f10).endVertex(); + worldRenderer1.pos(-f10, 99.9D, f10).endVertex(); + tessellator1.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.1F); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + double d0 = mc.player.getPosition().getY() - world.getHorizon(); + + if (d0 < 0.0D) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 12.0F, 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + f8 = 1.0F; + f9 = -((float) (d0 + 65.0D)); + f10 = -f8; + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer1.pos(-f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + tessellator1.draw(); + } + + if (world.provider.isSkyColored()) + { + GL11.glColor3f(f1 * 0.2F + 0.04F, f2 * 0.2F + 0.04F, f3 * 0.6F + 0.1F); + } else + { + GL11.glColor3f(f1, f2, f3); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -((float) (d0 - 16.0D)), 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); + GL11.glDepthMask(true); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random rand = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var2.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int starIndex = 0; starIndex < (ConfigManagerCore.moreStars ? 35000 : 6000); ++starIndex) + { + double var4 = rand.nextFloat() * 2.0F - 1.0F; + double var6 = rand.nextFloat() * 2.0F - 1.0F; + double var8 = rand.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.15F + rand.nextFloat() * 0.1F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double var14 = var4 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var16 = var6 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var18 = var8 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = rand.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int var38 = 0; var38 < 4; ++var38) + { + final double var39 = 0.0D; + final double var41 = ((var38 & 2) - 1) * var10; + final double var43 = ((var38 + 1 & 2) - 1) * var10; + final double var47 = var41 * var36 - var43 * var34; + final double var49 = var43 * var36 + var41 * var34; + final double var53 = var47 * var28 + var39 * var30; + final double var55 = var39 * var28 - var47 * var30; + final double var57 = var55 * var22 - var49 * var24; + final double var61 = var49 * var22 + var55 * var24; + worldRenderer.pos(var14 + var57, var16 + var53, var18 + var61).endVertex(); + } + } + } + + var2.draw(); + } + + public float getSkyBrightness(float par1) + { + final float var2 = FMLClientHandler.instance().getClient().world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.sin(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 1F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/TickHandlerClientVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/TickHandlerClientVenus.java new file mode 100644 index 00000000..8f0d46fd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/TickHandlerClientVenus.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client; + +import java.util.Iterator; +import java.util.Map; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.planets.venus.ConfigManagerVenus; +import micdoodle8.mods.galacticraft.planets.venus.dimension.WorldProviderVenus; + +import com.google.common.collect.Maps; + +@SideOnly(Side.CLIENT) +public class TickHandlerClientVenus +{ + + private Map lightning = Maps.newHashMap(); + + @SubscribeEvent + public void renderLightning(ClientProxyCore.EventSpecialRender event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final EntityPlayerSP player = minecraft.player; + if (player != null && !ConfigManagerVenus.disableAmbientLightning) + { + Iterator> it = lightning.entrySet().iterator(); + while (it.hasNext()) + { + Map.Entry entry = it.next(); + long seed = entry.getValue() / 10 + entry.getKey().getX() + entry.getKey().getZ(); + FakeLightningBoltRenderer.renderBolt(seed, entry.getKey().getX() - ClientProxyCore.playerPosX, entry.getKey().getY() - ClientProxyCore.playerPosY, entry.getKey().getZ() - ClientProxyCore.playerPosZ); + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTick(TickEvent.ClientTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + + final WorldClient world = minecraft.world; + + if (world != null) + { + if (world.provider instanceof WorldProviderVenus) + { + if (world.provider.getSkyRenderer() == null) + { + world.provider.setSkyRenderer(new SkyProviderVenus((IGalacticraftWorldProvider) world.provider)); + } + + if (world.provider.getCloudRenderer() == null) + { + world.provider.setCloudRenderer(new CloudRenderer()); + } + + if (world.provider.getWeatherRenderer() == null) + { + world.provider.setWeatherRenderer(new WeatherRendererVenus()); + } + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerTick(TickEvent.PlayerTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final EntityPlayerSP player = minecraft.player; + + if (player == event.player) + { + // Maybe check for the right provider before we continue + if (player.world.provider instanceof WorldProviderVenus) + { + if (!ConfigManagerVenus.disableAmbientLightning) + { + Iterator> it = lightning.entrySet().iterator(); + while (it.hasNext()) + { + Map.Entry entry = it.next(); + int val = entry.getValue(); + if (val - 1 <= 0) + { + it.remove(); + } else + { + entry.setValue(val - 1); + } + } + if (player.getRNG().nextInt(300 + (int) (800F * minecraft.world.rainingStrength)) == 0) + { + double freq = player.getRNG().nextDouble() * Math.PI * 2.0F; + double dist = 180.0F; + double dX = dist * Math.cos(freq); + double dZ = dist * Math.sin(freq); + double posX = player.posX + dX; + double posY = 70; + double posZ = player.posZ + dZ; + minecraft.world.playSound(player, posX, posY, posZ, SoundEvents.ENTITY_LIGHTNING_THUNDER, SoundCategory.WEATHER, 500.0F + player.getRNG().nextFloat() * 500F, 1.0F + player.getRNG().nextFloat() * 0.2F); + lightning.put(new BlockPos(posX, posY, posZ), 20); + } + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/WeatherRendererVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/WeatherRendererVenus.java new file mode 100644 index 00000000..34cc6279 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/WeatherRendererVenus.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client; + +import java.lang.reflect.Field; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.client.IRenderHandler; +import org.lwjgl.opengl.GL11; + +public class WeatherRendererVenus extends IRenderHandler +{ + + private final Random random = new Random(); + private final float[] rainXCoords = new float[1024]; + private final float[] rainYCoords = new float[1024]; + private static final ResourceLocation RAIN_TEXTURES = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/misc/rain_venus.png"); + + public WeatherRendererVenus() + { + for (int i = 0; i < 32; ++i) + { + float f1 = (float) (i - 16); + for (int j = 0; j < 32; ++j) + { + float f = (float) (j - 16); + float f2 = MathHelper.sqrt(f * f + f1 * f1); + this.rainXCoords[i << 5 | j] = -f1 / f2; + this.rainYCoords[i << 5 | j] = f / f2; + } + } + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + float strength = world.getRainStrength(partialTicks); + + if (strength > 0.0F) + { + int rendererUpdateCount = 0; + try + { + Field fieldRUC = mc.entityRenderer.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "rendererUpdateCount" : "field_78529_t"); + fieldRUC.setAccessible(true); + rendererUpdateCount = fieldRUC.getInt(mc.entityRenderer); + } catch (Exception e) + { + } + mc.entityRenderer.enableLightmap(); + Entity entity = mc.getRenderViewEntity(); + + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + GlStateManager.disableCull(); + GL11.glNormal3f(0.0F, 1.0F, 0.0F); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GlStateManager.alphaFunc(516, 0.1F); + double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double) partialTicks; + double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double) partialTicks; + double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double) partialTicks; + int l = MathHelper.floor(d1); + + int r = 4; + if (mc.gameSettings.fancyGraphics) + { + r = 8; + } + + int drawFlag = -1; + worldrenderer.setTranslation(-d0, -d1, -d2); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); + int px = MathHelper.floor(entity.posX); + int py = MathHelper.floor(entity.posY); + int pz = MathHelper.floor(entity.posZ); + + for (int z = pz - r; z <= pz + r; ++z) + { + int indexZ = (z - pz + 16) * 32; + for (int x = px - r; x <= px + r; ++x) + { + mutablePos.setPos(x, 0, z); + int yHeight = world.getPrecipitationHeight(mutablePos).getY() + 4 - (int) (4.8F * strength); + int y = py - r; + int ymax = py + r; + + if (y < yHeight) + { + y = yHeight; + } + + if (ymax < yHeight) + { + ymax = yHeight; + } + + int yBase = yHeight; + + if (yHeight < l) + { + yBase = l; + } + + if (y != ymax) + { + this.random.setSeed((long) (x * x * 3121 + x * 45238971 ^ z * z * 418711 + z * 13761)); + + if (drawFlag != 0) + { + if (drawFlag >= 0) + { + tessellator.draw(); + } + + drawFlag = 0; + mc.getTextureManager().bindTexture(RAIN_TEXTURES); + worldrenderer.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP); + } + + int index = indexZ + x - px + 16; + double dx = (double) this.rainXCoords[index] * 0.5D; + double dz = (double) this.rainYCoords[index] * 0.5D; + double dy = + -((double) (rendererUpdateCount + x * x * 3121 + x * 45238971 + z * z * 418711 + z * 13761 & 31) + (double) partialTicks) / 80.0D * (3.0D + this.random.nextDouble()); + double yo = this.random.nextDouble() / 1.8D; + double xx = x + 0.5D - entity.posX; + double zz = z + 0.5D - entity.posZ; + float rr = MathHelper.sqrt(xx * xx + zz * zz) / r; + float alpha = ((1.0F - rr * rr) * 0.5F + 0.5F) * strength / 0.6F; // 0.6F + // is + // the + // max + // rainstrength + // on + // Venus + mutablePos.setPos(x, yBase, z); + int light = world.getCombinedLight(mutablePos, 0); + int lx = light >> 16 & 65535; + int ly = light & 65535; + double xc = x + 0.5D; + double zc = z + 0.5D; + worldrenderer.pos(xc - dx, (double) ymax - yo, zc - dz).tex(0.0D, (double) y * 0.25D + dy).color(1.0F, 1.0F, 1.0F, alpha).lightmap(lx, ly).endVertex(); + worldrenderer.pos(xc + dx, (double) ymax - yo, zc + dz).tex(1.0D, (double) y * 0.25D + dy).color(1.0F, 1.0F, 1.0F, alpha).lightmap(lx, ly).endVertex(); + worldrenderer.pos(xc + dx, (double) y - yo, zc + dz).tex(1.0D, (double) ymax * 0.25D + dy).color(1.0F, 1.0F, 1.0F, alpha).lightmap(lx, ly).endVertex(); + worldrenderer.pos(xc - dx, (double) y - yo, zc - dz).tex(0.0D, (double) ymax * 0.25D + dy).color(1.0F, 1.0F, 1.0F, alpha).lightmap(lx, ly).endVertex(); + } + } + } + + if (drawFlag >= 0) + { + tessellator.draw(); + } + + worldrenderer.setTranslation(0.0D, 0.0D, 0.0D); + GlStateManager.enableCull(); + GlStateManager.disableBlend(); + GlStateManager.alphaFunc(516, 0.1F); + mc.entityRenderer.disableLightmap(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidExhaust.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidExhaust.java new file mode 100644 index 00000000..b61751a5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidExhaust.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.fx; + +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleAcidExhaust extends Particle +{ + + float smokeParticleScale; + + public ParticleAcidExhaust(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double motionX, double motionY, double motionZ, float p_i46348_14_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += motionX / 10.0F; + this.motionY += motionY; + this.motionZ += motionZ / 10.0F; + this.particleRed = (float) (Math.random() * 0.10000001192092896D + 0.8); + this.particleGreen = particleRed; + this.particleBlue = (float) (Math.random() * 0.10000001192092896D); + this.particleAlpha = 1.0F; + this.particleScale *= p_i46348_14_; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) (8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int) ((float) this.particleMaxAge * p_i46348_14_ * 5.0F); + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float p_180434_4_, float p_180434_5_, float p_180434_6_, float p_180434_7_, float p_180434_8_) + { + GlStateManager.disableLighting(); + float f = ((float) this.particleAge + partialTicks) / (float) this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.smokeParticleScale * f; + super.renderParticle(worldRendererIn, entityIn, partialTicks, p_180434_4_, p_180434_5_, p_180434_6_, p_180434_7_, p_180434_8_); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.004D; + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidVapor.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidVapor.java new file mode 100644 index 00000000..fc018de3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidVapor.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.fx; + +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleAcidVapor extends Particle +{ + + float smokeParticleScale; + + public ParticleAcidVapor(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double motionX, double motionY, double motionZ, float p_i46348_14_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += motionX / 10.0F; + this.motionY += motionY; + this.motionZ += motionZ / 10.0F; + this.particleRed = (float) (Math.random() * 0.10000001192092896D + 0.8); + this.particleGreen = particleRed; + this.particleBlue = (float) (Math.random() * 0.10000001192092896D); + this.particleAlpha = 1.0F; +// this.particleScale *= 0.75F; + this.particleScale *= p_i46348_14_; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) (8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int) ((float) this.particleMaxAge * p_i46348_14_); + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float p_180434_4_, float p_180434_5_, float p_180434_6_, float p_180434_7_, float p_180434_8_) + { + GlStateManager.disableLighting(); + float f = (float) Math.pow(this.particleAge / 11.0, 2.0F); + f = Math.max(f, 0.1F); + this.particleAlpha = this.particleAlpha * 0.994F; + this.particleScale = this.smokeParticleScale * f; + super.renderParticle(worldRendererIn, entityIn, partialTicks, p_180434_4_, p_180434_5_, p_180434_6_, p_180434_7_, p_180434_8_); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.004D; + this.move(this.motionX, this.motionY, this.motionZ); + + this.motionY *= 0.9899999785423279D; + this.motionX *= 1.001D; + this.motionZ *= 1.001D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiCrashedProbe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiCrashedProbe.java new file mode 100644 index 00000000..6698278c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiCrashedProbe.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiCrashedProbe extends GuiContainerGC +{ + + private static final ResourceLocation guiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/crashed_probe.png"); + + private final TileEntityCrashedProbe geothermalGenerator; + + public GuiCrashedProbe(InventoryPlayer par1InventoryPlayer, TileEntityCrashedProbe geothermalGenerator) + { + super(new ContainerCrashedProbe(par1InventoryPlayer, geothermalGenerator)); + this.geothermalGenerator = geothermalGenerator; + this.ySize = 133; + this.xSize = 176; + } + + @Override + public void initGui() + { + super.initGui(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiCrashedProbe.guiTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = this.geothermalGenerator.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, 4210752); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiGeothermal.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiGeothermal.java new file mode 100644 index 00000000..0466e747 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiGeothermal.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerGeothermal; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiGeothermal extends GuiContainerGC +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/geothermal.png"); + + private final TileEntityGeothermalGenerator geothermalGenerator; + + private GuiButton buttonEnableSolar; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiGeothermal(InventoryPlayer par1InventoryPlayer, TileEntityGeothermalGenerator geothermalGenerator) + { + super(new ContainerGeothermal(par1InventoryPlayer, geothermalGenerator)); + this.geothermalGenerator = geothermalGenerator; + this.ySize = 201; + this.xSize = 176; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.geothermalGenerator.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.geothermalGenerator.getEnergyStoredGC()) + " / " + (int) Math.floor(this.geothermalGenerator.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 96; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 82, 18, 18, batterySlotDesc, this.width, this.height, this)); +// List sunGenDesc = new ArrayList(); +// float sunVisible = Math.round(this.geothermalGenerator.solarStrength / 9.0F * 1000) / 10.0F; +// sunGenDesc.add(this.geothermalGenerator.solarStrength > 0 ? GCCoreUtil.translate("gui.status.sun_visible.name") + ": " + sunVisible + "%" : GCCoreUtil.translate("gui.status.blockedfully.name")); +// this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 47, (this.height - this.ySize) / 2 + 20, 18, 18, sunGenDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonEnableSolar = new GuiButton(0, this.width / 2 - 36, this.height / 2 - 19, 72, 20, GCCoreUtil.translate("gui.button.enable.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetY = 35; + this.buttonEnableSolar.enabled = this.geothermalGenerator.disableCooldown == 0; + this.buttonEnableSolar.displayString = !this.geothermalGenerator.getDisabled(0) ? GCCoreUtil.translate("gui.button.disable.name") : GCCoreUtil.translate("gui.button.enable.name"); + String displayString = this.geothermalGenerator.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, 4210752); + displayString = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 45 + 23 - 46 + offsetY, 4210752); + displayString = this.getStatus2(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 56 + 23 - 46 + offsetY, 4210752); + displayString = GCCoreUtil.translate("gui.message.generating.name") + ": " + (this.geothermalGenerator.generateWatts > 0 + ? EnergyDisplayHelper.getEnergyDisplayS(this.geothermalGenerator.generateWatts) + "/t" : GCCoreUtil.translate("gui.status.not_generating.name")); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 34 + 23 - 46 + offsetY, 4210752); +// float boost = Math.round((this.geothermalGenerator.getSolarBoost() - 1) * 1000) / 10.0F; +// displayString = GCCoreUtil.translate("gui.message.environment.name") + ": " + boost + "%"; +// this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 56 + 23 - 46 + offsetY, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.geothermalGenerator.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(displayString, this.xSize / 2 - + // this.fontRenderer.getStringWidth(displayString) / 2, 68 + 23 - 46 + + // offsetY, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, 4210752); + } + + private String getStatus() + { + if (this.geothermalGenerator.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (this.geothermalGenerator.generateWatts > 0) + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.collectingenergy.name"); + } + + if (!this.geothermalGenerator.hasValidSpout()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.status.invalid_spout_1.name"); + } + + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.unknown.name"); + } + + private String getStatus2() + { + if (this.geothermalGenerator.getDisabled(0) || this.geothermalGenerator.generateWatts > 0) + { + return ""; + } + + if (!this.geothermalGenerator.hasValidSpout()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.status.invalid_spout_2.name"); + } + + return ""; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiGeothermal.backgroundTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.geothermalGenerator.getEnergyStoredGC(), this.geothermalGenerator.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.geothermalGenerator.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 83, var6 + 24, 176, 0, 11, 10); + } + + if (this.geothermalGenerator.hasValidSpout()) + { + int ySize = 16 * this.geothermalGenerator.generateWatts / (TileEntityGeothermalGenerator.MAX_GENERATE_GJ_PER_TICK - 1); + this.drawTexturedModalRect(var5 + 33, var6 + 21 + (16 - ySize), 176, (int) (10 + ((this.geothermalGenerator.ticks / 3) % 7) * 16) + (16 - ySize), 46, ySize); + } + + this.drawTexturedModalRect(var5 + 97, var6 + 25, 187, 0, Math.min(this.geothermalGenerator.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurret.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurret.java new file mode 100644 index 00000000..09dddc2c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurret.java @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.network.PacketSimpleVenus; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiLaserTurret extends GuiContainerGC implements GuiElementCheckbox.ICheckBoxCallback +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/laser_turret.png"); + + private final TileEntityLaserTurret laserTurret; + private GuiElementCheckbox blacklistMode; + private GuiElementCheckbox targetMeteors; + private GuiButton buttonEditList; + private GuiButton buttonEditPriority; + + private int cannotEditTimer; + + private GuiButton buttonEnable; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiLaserTurret(InventoryPlayer par1InventoryPlayer, TileEntityLaserTurret turret) + { + super(new ContainerLaserTurret(par1InventoryPlayer, turret)); + this.laserTurret = turret; + this.ySize = 219; + this.xSize = 176; + } + + @Override + protected void actionPerformed(GuiButton button) + { + if (!this.mc.player.getUniqueID().equals(this.laserTurret.getOwnerUUID())) + { + this.cannotEditTimer = 50; + return; + } + + switch (button.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.laserTurret.getPos(), 0})); + laserTurret.setDisabled(0, !laserTurret.getDisabled(0)); + initGui(); + break; + case 3: + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiLaserTurretEditList(laserTurret)); + break; + case 4: + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiLaserTurretEditPriority(laserTurret)); + break; + } + } + + @Override + public void initGui() + { + final int yTop = (this.height - this.ySize) / 2; + this.buttonList.clear(); + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.laserTurret.getEnergyStoredGC()) + " / " + (int) Math.floor(this.laserTurret.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 106; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 81, (this.height - this.ySize) / 2 + 92, 18, 18, batterySlotDesc, this.width, this.height, this)); + String enableString = !this.laserTurret.getDisabled(0) ? GCCoreUtil.translate("gui.button.disable.name") : GCCoreUtil.translate("gui.button.enable.name"); + this.buttonList.add(this.buttonEnable = new GuiButton(0, (this.width - this.xSize) / 2 + 7, this.height / 2 - 9, 72, 20, enableString)); + this.blacklistMode = new GuiElementCheckbox(1, this, this.width / 2 - 81, yTop + 26, GCCoreUtil.translate("gui.message.blacklist_mode.name"), ColorUtil.to32BitColor(255, 75, 75, 75)); + this.targetMeteors = new GuiElementCheckbox(2, this, this.width / 2 - 81, yTop + 40, GCCoreUtil.translate("gui.message.target_meteors.name"), ColorUtil.to32BitColor(255, 75, 75, 75)); + this.buttonList.add(this.buttonEditList = new GuiButton(3, (this.width - this.xSize) / 2 + this.xSize / 2 - 41, yTop + 55, 82, 20, + GCCoreUtil.translate("gui.button.edit_" + (laserTurret.blacklistMode ? "blacklist" : "whitelist") + ".name"))); + this.buttonList.add(this.buttonEditPriority = new GuiButton(4, (this.width - this.xSize) / 2 + this.xSize / 2 - 41, yTop + 78, 82, 20, GCCoreUtil.translate("gui.button.edit_priority.name"))); + this.buttonList.add(this.blacklistMode); + this.buttonList.add(this.targetMeteors); + this.buttonList.add(this.buttonEditList); + this.buttonList.add(this.buttonEditPriority); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.buttonEnable.enabled = this.laserTurret.disableCooldown == 0; + String displayString = this.laserTurret.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, ColorUtil.to32BitColor(255, 75, 75, 75)); + displayString = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 18, ColorUtil.to32BitColor(255, 75, 75, 75)); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, ColorUtil.to32BitColor(255, 75, 75, 75)); + } + + private String getStatus() + { + if (this.laserTurret.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (this.laserTurret.getEnergyStoredGC() < 1000) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + return this.laserTurret.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiLaserTurret.backgroundTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.laserTurret.getEnergyStoredGC(), this.laserTurret.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + this.drawTexturedModalRect(var5 + 101, var6 + 106, 176, 51, 67, 9); + this.drawTexturedModalRect(var5 + 113, var6 + 107, 176, 0, Math.min(this.laserTurret.getScaledElecticalLevel(54), 54), 7); + + this.drawTexturedModalRect(var5 + 81, var6 + 102, 176, 33, 18, 18); + if (this.laserTurret.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 107, 230, 0, 11, 8); + } + if (this.cannotEditTimer > 0) + { + this.cannotEditTimer--; + this.blacklistMode.enabled = false; + this.targetMeteors.enabled = false; + } else + { + this.blacklistMode.enabled = true; + this.targetMeteors.enabled = true; + } + + this.blacklistMode.isSelected = laserTurret.blacklistMode; + this.targetMeteors.isSelected = laserTurret.targetMeteors; + this.buttonEditList.displayString = GCCoreUtil.translate("gui.button.edit_" + (laserTurret.blacklistMode ? "blacklist" : "whitelist") + ".name"); + + if (!mc.player.getUniqueID().equals(this.laserTurret.getOwnerUUID())) + { + String displayString = this.laserTurret.getName(); + boolean off = false; + if (this.cannotEditTimer > 0) + { + off = this.cannotEditTimer % 30 < 15; + } + + this.drawTexturedModalRect(var5 + this.xSize / 2 + this.fontRenderer.getStringWidth(displayString) / 2 + (off ? -1 : 0) + 3, var6 + 5 + (off ? -1 : 0), 202 + (off ? 8 : 0), 7, + off ? 10 : 8, off ? 12 : 10); + } + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + this.cannotEditTimer = 40; + if (checkbox.equals(this.blacklistMode)) + { + this.laserTurret.blacklistMode = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {0, this.laserTurret.getPos(), this.laserTurret.blacklistMode ? 1 : 0})); + } else if (checkbox.equals(this.targetMeteors)) + { + this.laserTurret.targetMeteors = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {1, this.laserTurret.getPos(), this.laserTurret.targetMeteors ? 1 : 0})); + } + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return player.getUniqueID().equals(this.laserTurret.getOwnerUUID()) && this.cannotEditTimer <= 0; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + if (checkbox.equals(this.blacklistMode)) + { + return this.laserTurret.blacklistMode; + } else if (checkbox.equals(this.targetMeteors)) + { + return this.laserTurret.targetMeteors; + } + + return false; + } + + @Override + public void onIntruderInteraction() + { + this.cannotEditTimer = 50; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditList.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditList.java new file mode 100644 index 00000000..2a8d0d8b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditList.java @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientList; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.network.PacketSimpleVenus; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.translation.I18n; +import net.minecraftforge.fml.common.registry.EntityEntry; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiLaserTurretEditList extends GuiScreen implements GuiElementTextBox.ITextBoxCallback, GuiElementCheckbox.ICheckBoxCallback +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/laser_turret_edit.png"); + + private final TileEntityLaserTurret laserTurret; + private GuiElementGradientList entityListElement; + + private int ySize; + private int xSize; + private EnumMode mode = EnumMode.MAIN; + private GuiElementTextBox name; + private GuiElementCheckbox neverAttackSpaceRace; + + private enum EnumMode + { + MAIN, ADD_PLAYER, ADD_ENTITY + } + + public GuiLaserTurretEditList(TileEntityLaserTurret turret) + { + this.laserTurret = turret; + } + + @Override + protected void actionPerformed(GuiButton button) + { + switch (button.id) + { + case 0: + mode = EnumMode.ADD_PLAYER; + initGui(); + break; + case 1: + mode = EnumMode.ADD_ENTITY; + initGui(); + break; + case 2: + GuiElementGradientList.ListElement selected = entityListElement.getSelectedElement(); + if (selected != null) + { + boolean isPlayer = selected.value.contains(GCCoreUtil.translate("gui.message.player.name") + ": "); + String toSend = isPlayer ? selected.value.substring(8) : selected.value; + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_MODIFY_LASER_TARGET, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {isPlayer ? 2 : 3, laserTurret.getPos(), toSend})); + if (isPlayer) + { + laserTurret.removePlayer(toSend); + } else + { + laserTurret.removeEntity(new ResourceLocation(toSend)); + } + initGui(); + } + break; + case 4: + if (mode == EnumMode.ADD_ENTITY) + { + EntityEntry entry = getEntityEntry(); + if (entry != null) + { + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_MODIFY_LASER_TARGET, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {1, laserTurret.getPos(), entry.getRegistryName().toString()})); + laserTurret.addEntity(entry.getRegistryName()); + } + } else if (mode == EnumMode.ADD_PLAYER) + { + if (name.text != null && !name.text.isEmpty()) + { + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_MODIFY_LASER_TARGET, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {0, laserTurret.getPos(), name.text})); + laserTurret.addPlayer(name.text); + } + } + name.text = null; + mode = EnumMode.MAIN; + initGui(); + break; + } + } + + @Override + public void initGui() + { + int yTop; + this.buttonList.clear(); + super.initGui(); + switch (mode) + { + case MAIN: + this.ySize = 144; + this.xSize = 222; + yTop = (this.height - this.ySize) / 2; + this.buttonList.add(new GuiButton(0, (this.width - this.xSize) / 2 + 4, yTop + 5, 62, 20, GCCoreUtil.translate("gui.button.add_player.name"))); + this.buttonList.add(new GuiButton(1, (this.width - this.xSize) / 2 + 66, yTop + 5, 62, 20, GCCoreUtil.translate("gui.button.add_entity.name"))); + this.buttonList.add(new GuiButton(2, (this.width - this.xSize) / 2 + 128, yTop + 5, 90, 20, GCCoreUtil.translate("gui.button.remove_selected.name"))); + this.entityListElement = new GuiElementGradientList((this.width - this.xSize) / 2 + 4, yTop + 26, xSize - 8, ySize - 45); + List alphabeticalList = Lists.newArrayList(); + alphabeticalList.addAll(laserTurret.getPlayers()); + for (ResourceLocation res : laserTurret.getEntities()) + { + alphabeticalList.add(res.toString()); + } + Collections.sort(alphabeticalList); + for (int i = 0; i < alphabeticalList.size(); ++i) + { + if (laserTurret.getPlayers().contains(alphabeticalList.get(i))) + { + alphabeticalList.set(i, GCCoreUtil.translate("gui.message.player.name") + ": " + alphabeticalList.get(i)); + } + } + List list = Lists.newArrayList(); + for (String str : alphabeticalList) + { + list.add(new GuiElementGradientList.ListElement(str, ColorUtil.to32BitColor(255, 240, 240, 240))); + } + this.entityListElement.updateListContents(list); + this.neverAttackSpaceRace = new GuiElementCheckbox(5, this, this.width / 2 - 106, yTop + 126, GCCoreUtil.translate("gui.button.never_fire_team.name"), 4210752); + this.buttonList.add(this.neverAttackSpaceRace); + break; + case ADD_PLAYER: + case ADD_ENTITY: + this.ySize = 70; + this.xSize = 148; + yTop = (this.height - this.ySize) / 2; + this.name = new GuiElementTextBox(3, this, (this.width - this.xSize) / 2 + 4, yTop + 16, 140, 20, "", false, 64, false); + this.name.resetOnClick = false; + this.addButton(this.name); + this.buttonList.add(new GuiButton(4, (this.width - this.xSize) / 2 + this.xSize / 2 - 31, yTop + 40, 62, 20, + GCCoreUtil.translate(laserTurret.blacklistMode ? "gui.button.add_blacklist.name" : "gui.button.add_whitelist.name"))); + break; + } + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (this.mode != EnumMode.MAIN && keyID != Keyboard.KEY_ESCAPE) + { + if (this.name.keyTyped(keyChar, keyID)) + { + return; + } + } + + if (keyID == 1) + { + switch (mode) + { + case MAIN: + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_OPEN_LASER_TURRET_GUI, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {laserTurret.getPos()})); + break; + default: + mode = EnumMode.MAIN; + initGui(); + break; + } + } else + { + super.keyTyped(keyChar, keyID); + } + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + public void updateScreen() + { + if (this.mode == EnumMode.MAIN) + { + this.entityListElement.update(); + } + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiLaserTurretEditList.backgroundTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, mode == EnumMode.MAIN ? 0 : 144, this.xSize, this.ySize); + + super.drawScreen(mouseX, mouseY, partialTicks); + + if (this.mode == EnumMode.MAIN) + { + this.entityListElement.draw(mouseX, mouseY); + } else if (this.mode == EnumMode.ADD_PLAYER) + { + String displayString = GCCoreUtil.translate("gui.message.enter_player.name"); + this.fontRenderer.drawString(displayString, var5 + this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, var6 + 5, 4210752); + } else if (this.mode == EnumMode.ADD_ENTITY) + { + String displayString = GCCoreUtil.translate("gui.message.enter_entity.name"); + this.fontRenderer.drawString(displayString, var5 + this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, var6 + 5, 4210752); + } + } + + private EntityEntry getEntityEntry() + { + if (this.name.text != null) + { + // Check all full entity names first + for (ResourceLocation loc : ForgeRegistries.ENTITIES.getKeys()) + { + if (this.name.text.equalsIgnoreCase(loc.toString())) + { + return ForgeRegistries.ENTITIES.getValue(loc); + } + } + // Then check without domain + for (ResourceLocation loc : ForgeRegistries.ENTITIES.getKeys()) + { + if (this.name.text.equalsIgnoreCase(loc.getPath())) + { + return ForgeRegistries.ENTITIES.getValue(loc); + } + } + // Then check names + for (ResourceLocation loc : ForgeRegistries.ENTITIES.getKeys()) + { + EntityEntry entry = ForgeRegistries.ENTITIES.getValue(loc); + if (entry != null) + { + if (this.name.text.equalsIgnoreCase(entry.getName())) + { + return entry; + } + } + } + for (ResourceLocation loc : ForgeRegistries.ENTITIES.getKeys()) + { + EntityEntry entry = ForgeRegistries.ENTITIES.getValue(loc); + if (entry != null) + { + if (this.name.text.equalsIgnoreCase(I18n.translateToLocal("entity." + entry.getName() + ".name"))) + { + return entry; + } + } + } + } + + return null; + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return player.getUniqueID().equals(this.laserTurret.getOwnerUUID()); + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + if (this.mode == EnumMode.ADD_ENTITY) + { + if (getEntityEntry() != null) + { + return ColorUtil.to32BitColor(255, 80, 200, 80); + } else + { + return ColorUtil.to32BitColor(255, 200, 80, 80); + } + } + + return ColorUtil.to32BitColor(255, 200, 200, 200); + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + this.laserTurret.alwaysIgnoreSpaceRace = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {2, this.laserTurret.getPos(), this.laserTurret.alwaysIgnoreSpaceRace ? 1 : 0})); + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return player.getUniqueID().equals(this.laserTurret.getOwnerUUID()); + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return laserTurret.alwaysIgnoreSpaceRace; + } + + @Override + public void onIntruderInteraction() + { + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditPriority.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditPriority.java new file mode 100644 index 00000000..ef26f430 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditPriority.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementSpinner; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.network.PacketSimpleVenus; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiLaserTurretEditPriority extends GuiScreen implements GuiElementSpinner.ISpinnerCallback +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/laser_turret_edit.png"); + + private final TileEntityLaserTurret laserTurret; + + private int ySize; + private int xSize; + private GuiElementSpinner priorityClosest; + private GuiElementSpinner priorityLowestHealth; + private GuiElementSpinner priorityHighestHealth; + + public GuiLaserTurretEditPriority(TileEntityLaserTurret turret) + { + this.laserTurret = turret; + } + + @Override + protected void actionPerformed(GuiButton button) + { + switch (button.id) + { + case 0: + break; + } + } + + @Override + public void initGui() + { + this.buttonList.clear(); + super.initGui(); + this.ySize = 95; + this.xSize = 222; + int yTop = (this.height - this.ySize) / 2; + this.priorityClosest = new GuiElementSpinner(0, this, this.width / 2 - 95, yTop + 21, ColorUtil.to32BitColor(255, 220, 220, 220)); + this.buttonList.add(this.priorityClosest); + this.priorityLowestHealth = new GuiElementSpinner(1, this, this.width / 2 - 95, yTop + 43, ColorUtil.to32BitColor(255, 220, 220, 220)); + this.buttonList.add(this.priorityLowestHealth); + this.priorityHighestHealth = new GuiElementSpinner(2, this, this.width / 2 - 95, yTop + 65, ColorUtil.to32BitColor(255, 220, 220, 220)); + this.buttonList.add(this.priorityHighestHealth); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (keyID == 1) + { + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_OPEN_LASER_TURRET_GUI, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {laserTurret.getPos()})); + } else + { + super.keyTyped(keyChar, keyID); + } + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiLaserTurretEditPriority.backgroundTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize - 10); + this.drawTexturedModalRect(var5, var6 + this.ySize - 10, 0, 144 - 10, this.xSize, 10); + + super.drawScreen(mouseX, mouseY, partialTicks); + + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.priority_low.name"), var5 + 6, var6 + 8, ColorUtil.to32BitColor(255, 75, 75, 75)); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.priority_closest.name"), this.priorityClosest.x + 35, this.priorityClosest.y + 10 - mc.fontRenderer.FONT_HEIGHT / 2, + ColorUtil.to32BitColor(255, 75, 75, 75)); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.priority_health_low.name"), this.priorityLowestHealth.x + 35, this.priorityLowestHealth.y + 10 - mc.fontRenderer.FONT_HEIGHT / 2, + ColorUtil.to32BitColor(255, 75, 75, 75)); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.priority_health_high.name"), this.priorityHighestHealth.x + 35, + this.priorityHighestHealth.y + 10 - mc.fontRenderer.FONT_HEIGHT / 2, ColorUtil.to32BitColor(255, 75, 75, 75)); + } + + @Override + public void onIntruderInteraction() + { + + } + + @Override + public void onSelectionChanged(GuiElementSpinner spinner, int newVal) + { + for (GuiButton button : this.buttonList) + { + if (button instanceof GuiElementSpinner) + { + GuiElementSpinner spinner1 = (GuiElementSpinner) button; + if (spinner1.value == newVal) + { + spinner1.value = spinner.value; + } + } + } + + if (newVal < 0) + { + newVal++; + spinner.value++; + } + + this.laserTurret.priorityClosest = spinner == priorityClosest ? newVal : priorityClosest.value; + this.laserTurret.priorityLowestHealth = spinner == priorityLowestHealth ? newVal : priorityLowestHealth.value; + this.laserTurret.priorityHighestHealth = spinner == priorityHighestHealth ? newVal : priorityHighestHealth.value; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {3, this.laserTurret.getPos(), this.laserTurret.priorityClosest})); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {4, this.laserTurret.getPos(), this.laserTurret.priorityLowestHealth})); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {5, this.laserTurret.getPos(), this.laserTurret.priorityHighestHealth})); + } + + @Override + public boolean canPlayerEdit(GuiElementSpinner spinner, EntityPlayer player) + { + return player.getUniqueID().equals(this.laserTurret.getOwnerUUID()); + } + + @Override + public int getInitialValue(GuiElementSpinner spinner) + { + if (spinner == this.priorityClosest) + { + return laserTurret.priorityClosest; + } else if (spinner == this.priorityLowestHealth) + { + return laserTurret.priorityLowestHealth; + } else if (spinner == this.priorityHighestHealth) + { + return laserTurret.priorityHighestHealth; + } + return 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiSolarArrayController.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiSolarArrayController.java new file mode 100644 index 00000000..fcdfcaa9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiSolarArrayController.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiSolarArrayController extends GuiContainerGC +{ + + private static final ResourceLocation solarGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/solar_array_controller.png"); + + private final TileEntitySolarArrayController solarController; + + private GuiButton buttonEnableSolar; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiSolarArrayController(InventoryPlayer par1InventoryPlayer, TileEntitySolarArrayController solarController) + { + super(new ContainerSolarArrayController(par1InventoryPlayer, solarController)); + this.solarController = solarController; + this.ySize = 209; + this.xSize = 176; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.solarController.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.solarController.getEnergyStoredGC()) + " / " + (int) Math.floor(this.solarController.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 96; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 90, 18, 18, batterySlotDesc, this.width, this.height, this)); + List sunGenDesc = new ArrayList(); + float sunVisible = Math.round((this.solarController.getActualArraySize() / (float) this.solarController.getPossibleArraySize()) * 1000) / 10.0F; + sunGenDesc.add(sunVisible > 0 ? GCCoreUtil.translate("gui.status.sun_visible.name") + ": " + sunVisible + "%" : GCCoreUtil.translate("gui.status.blockedfully.name")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 47, (this.height - this.ySize) / 2 + 20, 18, 18, sunGenDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonEnableSolar = new GuiButton(0, this.width / 2 - 36, this.height / 2 - 11, 72, 20, GCCoreUtil.translate("gui.button.enable.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetY = 35; + this.buttonEnableSolar.enabled = this.solarController.disableCooldown == 0; + this.buttonEnableSolar.displayString = !this.solarController.getDisabled(0) ? GCCoreUtil.translate("gui.button.disable.name") : GCCoreUtil.translate("gui.button.enable.name"); + String displayString = this.solarController.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, 4210752); + displayString = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 45 + 23 - 46 + offsetY, 4210752); + displayString = GCCoreUtil.translate("gui.message.generating.name") + ": " + + (this.solarController.generateWatts > 0 ? EnergyDisplayHelper.getEnergyDisplayS(this.solarController.generateWatts) + "/t" : GCCoreUtil.translate("gui.status.not_generating.name")); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 34 + 23 - 46 + offsetY, 4210752); + float boost = Math.round((this.solarController.getSolarBoost() - 1) * 1000) / 10.0F; + displayString = GCCoreUtil.translate("gui.message.environment.name") + ": " + boost + "%"; + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 56 + 23 - 46 + offsetY, 4210752); + displayString = GCCoreUtil.translateWithFormat("gui.message.connected_solar_controller.name", this.solarController.getActualArraySize()); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 67 + 23 - 46 + offsetY, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.solarController.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(displayString, this.xSize / 2 - + // this.fontRenderer.getStringWidth(displayString) / 2, 68 + 23 - 46 + + // offsetY, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, 4210752); + } + + private String getStatus() + { + if (this.solarController.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (!this.solarController.getWorld().isDaytime()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedfully.name"); + } + + if (this.solarController.getWorld().isRaining() || this.solarController.getWorld().isThundering()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.raining.name"); + } + + float sunVisible = (float) Math.floor(this.solarController.getActualArraySize() / (float) this.solarController.getPossibleArraySize()); + + if (sunVisible == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedfully.name"); + } + + if (sunVisible < 1.0F) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedpartial.name"); + } + + if (this.solarController.generateWatts > 0) + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.collectingenergy.name"); + } + + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.unknown.name"); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiSolarArrayController.solarGuiTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.solarController.getEnergyStoredGC(), this.solarController.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.solarController.getEnergyStoredGC()) + " / " + (int) Math.floor(this.solarController.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.solarController.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 83, var6 + 24, 176, 0, 11, 10); + } + + float sunVisible = (float) Math.floor(this.solarController.getActualArraySize() / (float) this.solarController.getPossibleArraySize()); + + if (sunVisible > 0.0F) + { + this.drawTexturedModalRect(var5 + 48, var6 + 21, 176, 10, 16, 16); + } + + this.drawTexturedModalRect(var5 + 97, var6 + 25, 187, 0, Math.min(this.solarController.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelJuicer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelJuicer.java new file mode 100644 index 00000000..01ec2808 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelJuicer.java @@ -0,0 +1,341 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.model; + +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelJuicer extends ModelBase +{ + + private ModelRenderer body1; + private ModelRenderer body2; + private ModelRenderer head; + private ModelRenderer legRightFront1; + private ModelRenderer legRightFront2; + private ModelRenderer legLeftFront1; + private ModelRenderer legLeftFront2; + private ModelRenderer legRightMidFront1; + private ModelRenderer legRightMidFront2; + private ModelRenderer legLeftMidFront1; + private ModelRenderer legLeftMidFront2; + private ModelRenderer legRightMidBack1; + private ModelRenderer legRightMidBack2; + private ModelRenderer legLeftMidBack1; + private ModelRenderer legLeftMidBack2; + private ModelRenderer legRightBack1; + private ModelRenderer legRightBack2; + private ModelRenderer legLeftBack1; + private ModelRenderer legLeftBack2; + private ModelRenderer back; + private ModelRenderer tail0; + private ModelRenderer tail1; + private ModelRenderer stinger; + + private float legLength0; + + public ModelJuicer() + { + textureWidth = 64; + textureHeight = 32; + + body1 = new ModelRenderer(this, 24, 22); + body1.addBox(-3F, -1F, -4F, 6, 2, 8); + body1.setRotationPoint(0F, 0F, 0F); + body1.setTextureSize(64, 32); + body1.mirror = true; + setRotation(body1, 0F, 0F, 0F); + body2 = new ModelRenderer(this, 0, 22); + body2.addBox(-2.5F, -1.5F, -3.5F, 5, 3, 7); + body2.setRotationPoint(0F, 0F, 0F); + body2.setTextureSize(64, 32); + body2.mirror = true; + setRotation(body2, 0F, 0F, 0F); + + head = new ModelRenderer(this, 52, 0); + head.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); + head.setRotationPoint(0F, -1F, -4F); + head.setTextureSize(64, 32); + head.mirror = true; + setRotation(head, -0.3717861F, 0F, 0F); + + legRightFront1 = new ModelRenderer(this, 44, 0); + legRightFront1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legRightFront1.setRotationPoint(-2.5F, 0F, -3F); + legRightFront1.setTextureSize(64, 32); + legRightFront1.mirror = true; + setRotation(legRightFront1, 0F, 2.453788F, 1.115358F); + legRightFront2 = new ModelRenderer(this, 30, 0); + legRightFront2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legRightFront2.setRotationPoint(-3.5F, -3F, -4F); + legRightFront2.setTextureSize(64, 32); + legRightFront2.mirror = true; + setRotation(legRightFront2, 0F, 2.825574F, -0.8551081F); + + legLeftFront1 = new ModelRenderer(this, 44, 0); + legLeftFront1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legLeftFront1.setRotationPoint(2.5F, 0F, -3F); + legLeftFront1.setTextureSize(64, 32); + legLeftFront1.mirror = true; + setRotation(legLeftFront1, 0F, 0.7807508F, -1.115358F); + legLeftFront2 = new ModelRenderer(this, 30, 0); + legLeftFront2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legLeftFront2.setRotationPoint(3.5F, -3F, -4F); + legLeftFront2.setTextureSize(64, 32); + legLeftFront2.mirror = true; + setRotation(legLeftFront2, 0F, 0.7063936F, 0.8551081F); + + legRightMidFront1 = new ModelRenderer(this, 44, 0); + legRightMidFront1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legRightMidFront1.setRotationPoint(-2.5F, 0F, -1F); + legRightMidFront1.setTextureSize(64, 32); + legRightMidFront1.mirror = true; + setRotation(legRightMidFront1, 0F, 2.93711F, 1.115358F); + legRightMidFront2 = new ModelRenderer(this, 30, 0); + legRightMidFront2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legRightMidFront2.setRotationPoint(-3.5F, -3F, -1F); + legRightMidFront2.setTextureSize(64, 32); + legRightMidFront2.mirror = true; + setRotation(legRightMidFront2, 0F, 3.011467F, -0.8551081F); + + legLeftMidFront1 = new ModelRenderer(this, 44, 0); + legLeftMidFront1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legLeftMidFront1.setRotationPoint(2.5F, 0F, -1F); + legLeftMidFront1.setTextureSize(64, 32); + legLeftMidFront1.mirror = true; + setRotation(legLeftMidFront1, 0F, 0.1858931F, -1.115358F); + legLeftMidFront2 = new ModelRenderer(this, 30, 0); + legLeftMidFront2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legLeftMidFront2.setRotationPoint(3.5F, -3F, -1F); + legLeftMidFront2.setTextureSize(64, 32); + legLeftMidFront2.mirror = true; + setRotation(legLeftMidFront2, 0F, 0.3346075F, 0.8551081F); + + legRightMidBack1 = new ModelRenderer(this, 44, 0); + legRightMidBack1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legRightMidBack1.setRotationPoint(-2.5F, 0F, 1F); + legRightMidBack1.setTextureSize(64, 32); + legRightMidBack1.mirror = true; + setRotation(legRightMidBack1, 0F, -3.030057F, 1.115358F); + legRightMidBack2 = new ModelRenderer(this, 30, 0); + legRightMidBack2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legRightMidBack2.setRotationPoint(-3.5F, -3F, 1F); + legRightMidBack2.setTextureSize(64, 32); + legRightMidBack2.mirror = true; + setRotation(legRightMidBack2, 0F, -2.974289F, -0.8551081F); + + legLeftMidBack1 = new ModelRenderer(this, 44, 0); + legLeftMidBack1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legLeftMidBack1.setRotationPoint(2.5F, 0F, 1F); + legLeftMidBack1.setTextureSize(64, 32); + legLeftMidBack1.mirror = true; + setRotation(legLeftMidBack1, 0F, -0.0371786F, -1.115358F); + legLeftMidBack2 = new ModelRenderer(this, 30, 0); + legLeftMidBack2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legLeftMidBack2.setRotationPoint(3.5F, -3F, 1F); + legLeftMidBack2.setTextureSize(64, 32); + legLeftMidBack2.mirror = true; + setRotation(legLeftMidBack2, 0F, -0.1487144F, 0.8551081F); + + legRightBack1 = new ModelRenderer(this, 44, 0); + legRightBack1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legRightBack1.setRotationPoint(-2.5F, 0F, 3F); + legRightBack1.setTextureSize(64, 32); + legRightBack1.mirror = true; + setRotation(legRightBack1, 0F, -2.658271F, 1.115358F); + legRightBack2 = new ModelRenderer(this, 30, 0); + legRightBack2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legRightBack2.setRotationPoint(-3.5F, -3F, 4F); + legRightBack2.setTextureSize(64, 32); + legRightBack2.mirror = true; + setRotation(legRightBack2, 0F, -2.788396F, -0.8551081F); + + legLeftBack1 = new ModelRenderer(this, 44, 0); + legLeftBack1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legLeftBack1.setRotationPoint(2.5F, 0F, 3F); + legLeftBack1.setTextureSize(64, 32); + legLeftBack1.mirror = true; + setRotation(legLeftBack1, 0F, -0.3346075F, -1.115358F); + legLeftBack2 = new ModelRenderer(this, 30, 0); + legLeftBack2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legLeftBack2.setRotationPoint(3.5F, -3F, 3F); + legLeftBack2.setTextureSize(64, 32); + legLeftBack2.mirror = true; + setRotation(legLeftBack2, 0F, -0.5205006F, 0.8551081F); + + back = new ModelRenderer(this, 0, 16); + back.addBox(-1.5F, -0.5F, -2.5F, 3, 1, 5); + back.setRotationPoint(0F, -1.5F, 0F); + back.setTextureSize(64, 32); + back.mirror = true; + setRotation(back, 0F, 0F, 0F); + + tail0 = new ModelRenderer(this, 42, 17); + tail0.addBox(-0.5F, -0.5F, 0F, 1, 1, 4); + tail0.setRotationPoint(0F, -2F, 0F); + tail0.setTextureSize(64, 32); + tail0.mirror = true; + setRotation(tail0, 0.5205006F, 0F, 0F); + tail1 = new ModelRenderer(this, 42, 12); + tail1.addBox(-0.5F, 0F, 0F, 1, 1, 4); + tail1.setRotationPoint(0F, -3F, 3F); + tail1.setTextureSize(64, 32); + tail1.mirror = true; + setRotation(tail1, 2.659407F, 0F, 0F); + stinger = new ModelRenderer(this, 48, 9); + stinger.addBox(-0.5F, -1F, -0.5F, 1, 2, 1); + stinger.setRotationPoint(0F, -5.2F, -1.133333F); + stinger.setTextureSize(64, 32); + stinger.mirror = true; + setRotation(stinger, 1.487144F, 0F, 0F); + + convertToChild(legLeftFront1, legLeftFront2); + convertToChild(legLeftMidFront1, legLeftMidFront2); + convertToChild(legLeftMidBack1, legLeftMidBack2); + convertToChild(legLeftBack1, legLeftBack2); + convertToChild(legRightFront1, legRightFront2); + convertToChild(legRightMidFront1, legRightMidFront2); + convertToChild(legRightMidBack1, legRightMidBack2); + convertToChild(legRightBack1, legRightBack2); + + convertToChild(tail0, tail1); + convertToChild(tail1, stinger); + + this.legLength0 = this.legLeftFront1.cubeList.get(0).posX2 - this.legLeftFront1.cubeList.get(0).posX1; + } + + private void convertToChild(ModelRenderer parent, ModelRenderer child) + { + // move child rotation point to be relative to parent + child.rotationPointX -= parent.rotationPointX; + child.rotationPointY -= parent.rotationPointY; + child.rotationPointZ -= parent.rotationPointZ; + // make rotations relative to parent + child.rotateAngleX -= parent.rotateAngleX; + child.rotateAngleY -= parent.rotateAngleY; + child.rotateAngleZ -= parent.rotateAngleZ; + // create relationship + parent.addChild(child); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + body1.render(f5); + body2.render(f5); + head.render(f5); + legRightMidBack1.render(f5); + legRightFront1.render(f5); + legRightMidFront1.render(f5); + legRightBack1.render(f5); + legLeftBack1.render(f5); + legLeftMidBack1.render(f5); + legLeftMidFront1.render(f5); + legLeftFront1.render(f5); + back.render(f5); + tail0.render(f5); + } + + private void copyLegAngles(ModelRenderer parent, ModelRenderer child) + { + child.rotationPointX = this.legLength0 * (parent.rotationPointX < 0.0F ? -1.0F : 1.0F) * (MathHelper.sin(parent.rotateAngleX) + MathHelper.cos(parent.rotateAngleY)); + child.rotationPointY = 0.0F; + child.rotationPointZ = 0.0F; + } + + private void copyLeftToRight(ModelRenderer left, ModelRenderer right) + { + right.rotateAngleX = left.rotateAngleX; + right.rotateAngleY = -left.rotateAngleY; + right.rotateAngleZ = left.rotateAngleZ; + } + + private void copyLeg1LeftToRight(ModelRenderer left, ModelRenderer right) + { + right.rotateAngleX = left.rotateAngleX; + right.rotateAngleY = (float) (Math.PI - left.rotateAngleY); + right.rotateAngleZ = -left.rotateAngleZ; + } + + @Override + public void setRotationAngles(float f1, float f2, float f3, float f4, float f5, float f6, Entity entityIn) + { + EntityJuicer juicer = (EntityJuicer) entityIn; + super.setRotationAngles(f1, f2, f3, f4, f5, f6, entityIn); + float movement = f1; + float increment = -1.0F; + float offset = 0.5F; + this.legLeftFront1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.legLeftFront1.rotateAngleZ = (float) (-Math.PI / 3.0F); + this.legLeftFront2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; + this.legLeftFront2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); + offset = 0.05F; + movement += increment; + this.legLeftMidFront1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.legLeftMidFront1.rotateAngleZ = (float) (-Math.PI / 3.0F); + this.legLeftMidFront2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; + this.legLeftMidFront2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); + offset = -0.1F; + movement += increment; + this.legLeftMidBack1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.legLeftMidBack1.rotateAngleZ = (float) (-Math.PI / 3.0F); + this.legLeftMidBack2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; + this.legLeftMidBack2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); + offset = -0.5F; + movement += increment; + this.legLeftBack1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.legLeftBack1.rotateAngleZ = (float) (-Math.PI / 3.0F); + this.legLeftBack2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; + this.legLeftBack2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); + + this.copyLegAngles(legLeftFront1, legLeftFront2); + this.copyLegAngles(legLeftMidFront1, legLeftMidFront2); + this.copyLegAngles(legLeftMidBack1, legLeftMidBack2); + this.copyLegAngles(legLeftBack1, legLeftBack2); + this.copyLegAngles(legRightFront1, legRightFront2); + this.copyLegAngles(legRightMidFront1, legRightMidFront2); + this.copyLegAngles(legRightMidBack1, legRightMidBack2); + this.copyLegAngles(legRightBack1, legRightBack2); + + this.copyLeg1LeftToRight(legLeftFront1, legRightFront1); + this.copyLeg1LeftToRight(legLeftMidFront1, legRightMidFront1); + this.copyLeg1LeftToRight(legLeftMidBack1, legRightMidBack1); + this.copyLeg1LeftToRight(legLeftBack1, legRightBack1); + this.copyLeftToRight(legLeftFront2, legRightFront2); + this.copyLeftToRight(legLeftMidFront2, legRightMidFront2); + this.copyLeftToRight(legLeftMidBack2, legRightMidBack2); + this.copyLeftToRight(legLeftBack2, legRightBack2); + + this.tail0.rotationPointY = -1.5F; + this.tail0.offsetY = 0.0F; +// this.tail0.rotateAngleX = MathHelper.cos(movement) * 0.2F + 0.5205006F; + this.tail0.rotateAngleX = juicer.getAttackingEntity() != null ? 0.52F : 0.1F; + this.tail0.rotateAngleY = 0.0F; + this.tail0.rotateAngleZ = 0.0F; + this.tail1.rotateAngleX = juicer.getAttackingEntity() != null ? 2.659407F : 2.7F; + this.tail1.rotationPointZ = 4 * (MathHelper.sin(this.tail0.rotateAngleZ) + MathHelper.cos(this.tail0.rotateAngleY)); + this.tail1.rotationPointY = 0.5F; + this.tail1.rotationPointX = 0.0F; + this.stinger.rotateAngleX = -this.tail0.rotateAngleX - (this.tail0.rotateAngleX - 2.659407F) - 0.5205006F; + this.stinger.rotationPointZ = 4 * (MathHelper.sin(this.tail1.rotateAngleZ) + MathHelper.cos(this.tail1.rotateAngleY)); + this.stinger.rotationPointY = 0.5F; + this.stinger.rotationPointX = 0.0F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelSpiderQueen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelSpiderQueen.java new file mode 100644 index 00000000..c745c980 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelSpiderQueen.java @@ -0,0 +1,467 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.model; + +import micdoodle8.mods.galacticraft.core.client.model.ModelRendererGC; +import net.minecraft.client.model.ModelBase; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelSpiderQueen extends ModelBase +{ + + ModelRendererGC head; + ModelRendererGC body; + ModelRendererGC[] leg1 = new ModelRendererGC[3]; + ModelRendererGC[] leg2 = new ModelRendererGC[3]; + ModelRendererGC[] leg3 = new ModelRendererGC[3]; + ModelRendererGC[] leg4 = new ModelRendererGC[3]; + ModelRendererGC[] leg5 = new ModelRendererGC[3]; + ModelRendererGC[] leg6 = new ModelRendererGC[3]; + ModelRendererGC[] leg7 = new ModelRendererGC[3]; + ModelRendererGC[] leg8 = new ModelRendererGC[3]; + ModelRendererGC rearEnd; + ModelRendererGC rearBack; + ModelRendererGC rearLeft; + ModelRendererGC rearRight; + + private float legLength0; + + public ModelSpiderQueen() + { + textureWidth = 64; + textureHeight = 64; + + head = new ModelRendererGC(this, 32, 4); + head.addBox(-4F, -4F, -8F, 8, 8, 8); + head.setRotationPoint(0F, 20F, -3F); + head.setTextureSize(64, 64); + head.mirror = true; + setRotation(head, 0F, 0F, 0F); + body = new ModelRendererGC(this, 0, 0); + body.addBox(-3F, -3F, -3F, 6, 6, 10); + body.setRotationPoint(0F, 20F, 0F); + body.setTextureSize(64, 64); + body.mirror = true; + setRotation(body, 0F, 0F, 0F); + + leg1[0] = new ModelRendererGC(this, 28, 0); + leg1[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg1[0].setRotationPoint(-3F, 20F, 4F); + leg1[0].setTextureSize(64, 64); + leg1[0].mirror = true; + setRotation(leg1[0], 0F, 3.631943F, -0.7330383F); + leg1[0].mirror = true; + leg1[1] = new ModelRendererGC(this, 28, 0); + leg1[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg1[1].setRotationPoint(-9.7F, 13.2F, 7.6F); + leg1[1].setTextureSize(64, 64); + leg1[1].mirror = true; + setRotation(leg1[1], 0F, 3.631937F, 0.3823201F); + leg1[2] = new ModelRendererGC(this, 28, 0); + leg1[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg1[2].setRotationPoint(-16.4F, 16.2F, 11.1F); + leg1[2].setTextureSize(64, 64); + leg1[2].mirror = true; + setRotation(leg1[2], 0F, 3.631937F, 1.461656F); + + leg2[0] = new ModelRendererGC(this, 28, 0); + leg2[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg2[0].setRotationPoint(3F, 20F, 4F); + leg2[0].setTextureSize(64, 64); + leg2[0].mirror = true; + setRotation(leg2[0], 0F, -0.4903446F, -0.7330383F); + leg2[1] = new ModelRendererGC(this, 28, 0); + leg2[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg2[1].setRotationPoint(9.666667F, 13.2F, 7.6F); + leg2[1].setTextureSize(64, 64); + leg2[1].mirror = true; + setRotation(leg2[1], 0F, -0.4903503F, 0.3823201F); + leg2[2] = new ModelRendererGC(this, 28, 0); + leg2[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg2[2].setRotationPoint(16.4F, 16.2F, 11.1F); + leg2[2].setTextureSize(64, 64); + leg2[2].mirror = true; + setRotation(leg2[2], 0F, -0.4903503F, 1.461656F); + + leg3[0] = new ModelRendererGC(this, 28, 0); + leg3[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg3[0].setRotationPoint(-3F, 20F, 2F); + leg3[0].setTextureSize(64, 64); + leg3[0].mirror = true; + setRotation(leg3[0], 0F, 3.335237F, -0.7330383F); + leg3[1] = new ModelRendererGC(this, 28, 0); + leg3[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg3[1].setRotationPoint(-10.7F, 13.2F, 3.6F); + leg3[1].setTextureSize(64, 64); + leg3[1].mirror = true; + setRotation(leg3[1], 0F, 3.335231F, 0.3823201F); + leg3[1].mirror = false; + leg3[2] = new ModelRendererGC(this, 28, 0); + leg3[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg3[2].setRotationPoint(-17.6F, 16.2F, 4.9F); + leg3[2].setTextureSize(64, 64); + leg3[2].mirror = true; + setRotation(leg3[2], 0F, 3.335231F, 1.461656F); + + leg4[0] = new ModelRendererGC(this, 28, 0); + leg4[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg4[0].setRotationPoint(3F, 20F, 2F); + leg4[0].setTextureSize(64, 64); + leg4[0].mirror = true; + setRotation(leg4[0], 0F, -0.1936386F, -0.7330383F); + leg4[1] = new ModelRendererGC(this, 28, 0); + leg4[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg4[1].setRotationPoint(10.66667F, 13.2F, 3.6F); + leg4[1].setTextureSize(64, 64); + leg4[1].mirror = true; + setRotation(leg4[1], 0F, -0.1936443F, 0.3823201F); + leg4[2] = new ModelRendererGC(this, 28, 0); + leg4[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg4[2].setRotationPoint(17.6F, 16.2F, 4.9F); + leg4[2].setTextureSize(64, 64); + leg4[2].mirror = true; + setRotation(leg4[2], 0F, -0.1936443F, 1.461656F); + + leg5[0] = new ModelRendererGC(this, 28, 0); + leg5[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg5[0].setRotationPoint(-3F, 20F, 0.5F); + leg5[0].setTextureSize(64, 64); + leg5[0].mirror = true; + setRotation(leg5[0], 0F, 2.7838F, -0.7330383F); + leg5[1] = new ModelRendererGC(this, 28, 0); + leg5[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg5[1].setRotationPoint(-10F, 13.2F, -2.2F); + leg5[1].setTextureSize(64, 64); + leg5[1].mirror = true; + setRotation(leg5[1], 0F, 2.783794F, 0.3823201F); + leg5[1].mirror = false; + leg5[2] = new ModelRendererGC(this, 28, 0); + leg5[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg5[2].setRotationPoint(-16.5F, 16.2F, -4.7F); + leg5[2].setTextureSize(64, 64); + leg5[2].mirror = true; + setRotation(leg5[2], 0F, 2.783794F, 1.461656F); + + leg6[0] = new ModelRendererGC(this, 28, 0); + leg6[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg6[0].setRotationPoint(3F, 20F, 0.5F); + leg6[0].setTextureSize(64, 64); + leg6[0].mirror = true; + setRotation(leg6[0], 0F, 0.3648668F, -0.7330383F); + leg6[1] = new ModelRendererGC(this, 28, 0); + leg6[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg6[1].setRotationPoint(10F, 13.2F, -2.2F); + leg6[1].setTextureSize(64, 64); + leg6[1].mirror = true; + setRotation(leg6[1], 0F, 0.3648611F, 0.3823201F); + leg6[2] = new ModelRendererGC(this, 28, 0); + leg6[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg6[2].setRotationPoint(16.53333F, 16.2F, -4.7F); + leg6[2].setTextureSize(64, 64); + leg6[2].mirror = true; + setRotation(leg6[2], 0F, 0.3648611F, 1.461656F); + + leg7[0] = new ModelRendererGC(this, 28, 0); + leg7[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg7[0].setRotationPoint(-3F, 20F, -2F); + leg7[0].setTextureSize(64, 64); + leg7[0].mirror = true; + setRotation(leg7[0], 0F, 2.495821F, -0.7330383F); + leg7[1] = new ModelRendererGC(this, 28, 0); + leg7[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg7[1].setRotationPoint(-8.8F, 13.33333F, -6.466667F); + leg7[1].setTextureSize(64, 64); + leg7[1].mirror = true; + setRotation(leg7[1], 0F, 2.495821F, 0.4206553F); + leg7[2] = new ModelRendererGC(this, 28, 0); + leg7[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg7[2].setRotationPoint(-14.5F, 16.66667F, -10.9F); + leg7[2].setTextureSize(64, 64); + leg7[2].mirror = true; + setRotation(leg7[2], 0F, 2.495821F, 1.201406F); + + leg8[0] = new ModelRendererGC(this, 28, 0); + leg8[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg8[0].setRotationPoint(3F, 20F, -2F); + leg8[0].setTextureSize(64, 64); + leg8[0].mirror = true; + setRotation(leg8[0], 0F, 0.6615727F, -0.7330383F); + leg8[1] = new ModelRendererGC(this, 28, 0); + leg8[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg8[1].setRotationPoint(8.8F, 13.33333F, -6.466667F); + leg8[1].setTextureSize(64, 64); + leg8[1].mirror = true; + setRotation(leg8[1], 0F, 0.6368846F, 0.4206553F); + leg8[2] = new ModelRendererGC(this, 28, 0); + leg8[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg8[2].setRotationPoint(14.53333F, 16.66667F, -10.9F); + leg8[2].setTextureSize(64, 64); + leg8[2].mirror = true; + setRotation(leg8[2], 0F, 0.6615671F, 1.201406F); + + rearEnd = new ModelRendererGC(this, 0, 41); + rearEnd.addBox(-6F, -7F, -6F, 12, 11, 12); + rearEnd.setRotationPoint(0F, 20F, 13F); + rearEnd.setTextureSize(64, 64); + rearEnd.mirror = true; + setRotation(rearEnd, 0F, 0F, 0F); + rearBack = new ModelRendererGC(this, 26, 31); + rearBack.addBox(-5F, -6F, 6F, 10, 9, 1); + rearBack.setRotationPoint(0F, 20F, 13F); + rearBack.setTextureSize(64, 64); + rearBack.mirror = true; + setRotation(rearBack, 0F, 0F, 0F); + rearLeft = new ModelRendererGC(this, 0, 22); + rearLeft.addBox(6F, -6F, -5F, 1, 9, 10); + rearLeft.setRotationPoint(0F, 20F, 13F); + rearLeft.setTextureSize(64, 64); + rearLeft.mirror = true; + setRotation(rearLeft, 0F, 0F, 0F); + rearRight = new ModelRendererGC(this, 0, 22); + rearRight.addBox(-7F, -6F, -5F, 1, 9, 10); + rearRight.setRotationPoint(0F, 20F, 13F); + rearRight.setTextureSize(64, 64); + rearRight.mirror = true; + setRotation(rearRight, 0F, 0F, 0F); + + for (int i = 0; i < 2; ++i) + { + this.convertToChild(this.leg1[i], this.leg1[i + 1]); + this.convertToChild(this.leg2[i], this.leg2[i + 1]); + this.convertToChild(this.leg3[i], this.leg3[i + 1]); + this.convertToChild(this.leg4[i], this.leg4[i + 1]); + this.convertToChild(this.leg5[i], this.leg5[i + 1]); + this.convertToChild(this.leg6[i], this.leg6[i + 1]); + this.convertToChild(this.leg7[i], this.leg7[i + 1]); + this.convertToChild(this.leg8[i], this.leg8[i + 1]); + } + + this.legLength0 = this.leg1[0].cubeList.get(0).posX2 - this.leg1[0].cubeList.get(0).posX1; + } + + private void convertToChild(ModelRendererGC parent, ModelRendererGC child) + { +// // move child rotation point to be relative to parent +// child.rotationPointX -= parent.rotationPointX; +// child.rotationPointY -= parent.rotationPointY; +// child.rotationPointZ -= parent.rotationPointZ; +// // make rotations relative to parent +// child.rotateAngleX -= parent.rotateAngleX; +// child.rotateAngleY -= parent.rotateAngleY; +// child.rotateAngleZ -= parent.rotateAngleZ; +// // create relationship +// parent.addChild(child); + } + + private void setRotation(ModelRendererGC model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + head.render(f5); + body.render(f5); + for (int i = 0; i < 3; ++i) + { + this.leg1[i].render(f5); + this.leg2[i].render(f5); + this.leg3[i].render(f5); + this.leg4[i].render(f5); + this.leg5[i].render(f5); + this.leg6[i].render(f5); + this.leg7[i].render(f5); + this.leg8[i].render(f5); + } + rearEnd.render(f5); + rearBack.render(f5); + rearLeft.render(f5); + rearRight.render(f5); + } + + private void copyLegAngles(float length, ModelRendererGC parent, ModelRendererGC child) + { + child.rotationPointX = parent.rotationPointX + length * (MathHelper.cos(parent.rotateAngleZ) * MathHelper.cos(parent.rotateAngleY)); + child.rotationPointY = parent.rotationPointY + length * (MathHelper.sin(parent.rotateAngleZ)); + child.rotationPointZ = parent.rotationPointZ + (length) * (-MathHelper.sin(parent.rotateAngleY) * MathHelper.cos(parent.rotateAngleZ)); + } + + private void copyLeftToRight(ModelRendererGC left, ModelRendererGC right) + { + right.rotateAngleX = left.rotateAngleX; + right.rotateAngleY = -left.rotateAngleY; + right.rotateAngleZ = left.rotateAngleZ; + } + + private void copyLeg1LeftToRight(ModelRendererGC left, ModelRendererGC right) + { + right.rotateAngleX = left.rotateAngleX; + right.rotateAngleY = (float) (Math.PI - left.rotateAngleY); + right.rotateAngleZ = left.rotateAngleZ; + } + + @Override + public void setRotationAngles(float f1, float f2, float f3, float f4, float f5, float f6, Entity entityIn) + { + float movement = f1; + float increment = -1.0F; + float offset = -0.4903446F; + this.leg2[0].rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.leg2[0].rotateAngleZ = -0.7330383F; + offset = -0.1936386F; + movement += increment; + this.leg4[0].rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.leg4[0].rotateAngleZ = -0.7330383F; + offset = 0.3648668F; + movement += increment; + this.leg6[0].rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.leg6[0].rotateAngleZ = -0.7330383F; + offset = 0.6615727F; + movement += increment; + this.leg8[0].rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.leg8[0].rotateAngleZ = -0.7330383F; + + float updist = -0.5F; + + // Move legs up if they are being moved forward. dx/dy of cos(movement) + // is -sin(movement) + movement = f1; + if (-MathHelper.sin(movement) * 0.2 > 0.0F) + { + this.leg2[0].rotateAngleZ = -0.7330383F + -MathHelper.sin(movement) * updist; + } + movement += increment; + if (-MathHelper.sin(movement) * 0.2 > 0.0F) + { + this.leg4[0].rotateAngleZ = -0.7330383F + -MathHelper.sin(movement) * updist; + } + movement += increment; + if (-MathHelper.sin(movement) * 0.2 > 0.0F) + { + this.leg6[0].rotateAngleZ = -0.7330383F + -MathHelper.sin(movement) * updist; + } + movement += increment; + if (-MathHelper.sin(movement) * 0.2 > 0.0F) + { + this.leg8[0].rotateAngleZ = -0.7330383F + -MathHelper.sin(movement) * updist; + } + + for (int i = 1; i < 3; ++i) + { + this.leg1[i].rotateAngleY = this.leg1[0].rotateAngleY; + this.leg2[i].rotateAngleY = this.leg2[0].rotateAngleY; + this.leg3[i].rotateAngleY = this.leg3[0].rotateAngleY; + this.leg4[i].rotateAngleY = this.leg4[0].rotateAngleY; + this.leg5[i].rotateAngleY = this.leg5[0].rotateAngleY; + this.leg6[i].rotateAngleY = this.leg6[0].rotateAngleY; + this.leg7[i].rotateAngleY = this.leg7[0].rotateAngleY; + this.leg8[i].rotateAngleY = this.leg8[0].rotateAngleY; + + this.leg1[i].rotateAngleX = this.leg1[0].rotateAngleX; + this.leg2[i].rotateAngleX = this.leg2[0].rotateAngleX; + this.leg3[i].rotateAngleX = this.leg3[0].rotateAngleX; + this.leg4[i].rotateAngleX = this.leg4[0].rotateAngleX; + this.leg5[i].rotateAngleX = this.leg5[0].rotateAngleX; + this.leg6[i].rotateAngleX = this.leg6[0].rotateAngleX; + this.leg7[i].rotateAngleX = this.leg7[0].rotateAngleX; + this.leg8[i].rotateAngleX = this.leg8[0].rotateAngleX; + +// this.leg1[i].rotateAngleZ = this.leg1[0].rotateAngleZ; +// this.leg2[i].rotateAngleZ = this.leg2[0].rotateAngleZ; +// this.leg3[i].rotateAngleZ = this.leg3[0].rotateAngleZ; +// this.leg4[i].rotateAngleZ = this.leg4[0].rotateAngleZ; +// this.leg5[i].rotateAngleZ = this.leg5[0].rotateAngleZ; +// this.leg6[i].rotateAngleZ = this.leg6[0].rotateAngleZ; +// this.leg7[i].rotateAngleZ = this.leg7[0].rotateAngleZ; +// this.leg8[i].rotateAngleZ = this.leg8[0].rotateAngleZ; + } + + for (int i = 0; i < 1; ++i) + { + this.copyLeg1LeftToRight(this.leg2[i], this.leg1[i]); + this.copyLeg1LeftToRight(this.leg4[i], this.leg3[i]); + this.copyLeg1LeftToRight(this.leg6[i], this.leg5[i]); + this.copyLeg1LeftToRight(this.leg8[i], this.leg7[i]); + } + for (int i = 1; i < 2; ++i) + { + float length1a = 10.0F; + float length1b = 10.0F; + this.copyLegAngles(length1a, this.leg1[0], this.leg1[1]); + this.copyLegAngles(length1b, this.leg2[0], this.leg2[1]); + this.copyLegAngles(length1a, this.leg3[0], this.leg3[1]); + this.copyLegAngles(length1b, this.leg4[0], this.leg4[1]); + this.copyLegAngles(length1a, this.leg5[0], this.leg5[1]); + this.copyLegAngles(length1b, this.leg6[0], this.leg6[1]); + this.copyLegAngles(length1a, this.leg7[0], this.leg7[1]); + this.copyLegAngles(length1b, this.leg8[0], this.leg8[1]); + + float length2a = 8.0F; + float length2b = 8.0F; + this.copyLegAngles(length2a, this.leg1[1], this.leg1[2]); + this.copyLegAngles(length2b, this.leg2[1], this.leg2[2]); + this.copyLegAngles(length2a, this.leg3[1], this.leg3[2]); + this.copyLegAngles(length2b, this.leg4[1], this.leg4[2]); + this.copyLegAngles(length2a, this.leg5[1], this.leg5[2]); + this.copyLegAngles(length2b, this.leg6[1], this.leg6[2]); + this.copyLegAngles(length2a, this.leg7[1], this.leg7[2]); + this.copyLegAngles(length2b, this.leg8[1], this.leg8[2]); + } +// EntityJuicer juicer = (EntityJuicer) entityIn; +// super.setRotationAngles(f1, f2, f3, f4, f5, f6, entityIn); +// float movement = f1; +// float increment = -1.0F; +// float offset = 0.5F; +// this.legLeftFront1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; +// this.legLeftFront1.rotateAngleZ = (float) (-Math.PI / 3.0F); +// this.legLeftFront2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; +// this.legLeftFront2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); +// offset = 0.05F; +// movement += increment; +// this.legLeftMidFront1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; +// this.legLeftMidFront1.rotateAngleZ = (float) (-Math.PI / 3.0F); +// this.legLeftMidFront2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; +// this.legLeftMidFront2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); +// offset = -0.1F; +// movement += increment; +// this.legLeftMidBack1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; +// this.legLeftMidBack1.rotateAngleZ = (float) (-Math.PI / 3.0F); +// this.legLeftMidBack2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; +// this.legLeftMidBack2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); +// offset = -0.5F; +// movement += increment; +// this.legLeftBack1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; +// this.legLeftBack1.rotateAngleZ = (float) (-Math.PI / 3.0F); +// this.legLeftBack2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; +// this.legLeftBack2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); +// +// this.copyLegAngles(legLeftFront1, legLeftFront2); +// this.copyLegAngles(legLeftMidFront1, legLeftMidFront2); +// this.copyLegAngles(legLeftMidBack1, legLeftMidBack2); +// this.copyLegAngles(legLeftBack1, legLeftBack2); +// this.copyLegAngles(legRightFront1, legRightFront2); +// this.copyLegAngles(legRightMidFront1, legRightMidFront2); +// this.copyLegAngles(legRightMidBack1, legRightMidBack2); +// this.copyLegAngles(legRightBack1, legRightBack2); +// +// this.copyLeg1LeftToRight(legLeftFront1, legRightFront1); +// this.copyLeg1LeftToRight(legLeftMidFront1, legRightMidFront1); +// this.copyLeg1LeftToRight(legLeftMidBack1, legRightMidBack1); +// this.copyLeg1LeftToRight(legLeftBack1, legRightBack1); +// this.copyLeftToRight(legLeftFront2, legRightFront2); +// this.copyLeftToRight(legLeftMidFront2, legRightMidFront2); +// this.copyLeftToRight(legLeftMidBack2, legRightMidBack2); +// this.copyLeftToRight(legLeftBack2, legRightBack2); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderEntryPodVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderEntryPodVenus.java new file mode 100644 index 00000000..a1da7ca0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderEntryPodVenus.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.entity; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelBalloonParachute; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityEntryPodVenus; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import org.lwjgl.opengl.GL11; + +public class RenderEntryPodVenus extends Render +{ + + private OBJModel.OBJBakedModel modelEntryPod; + private OBJModel.OBJBakedModel modelFlame; + protected ModelBalloonParachute parachuteModel = new ModelBalloonParachute(); + + public RenderEntryPodVenus(RenderManager manager) + { + super(manager); + } + + private void updateModels() + { + if (modelEntryPod == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "pod_flame.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + modelEntryPod = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("PodBody"), false), DefaultVertexFormats.ITEM, spriteFunction); + modelFlame = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Flame_Sphere"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void doRender(EntityEntryPodVenus entityEntryPod, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + final float var24 = entityEntryPod.prevRotationPitch + (entityEntryPod.rotationPitch - entityEntryPod.prevRotationPitch) * partialTicks; + final float var25 = entityEntryPod.prevRotationYaw + (entityEntryPod.rotationYaw - entityEntryPod.prevRotationYaw) * partialTicks; + + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F - var24, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(-var25, 0.0F, 1.0F, 0.0F); + + this.updateModels(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.65F, 0.6F, 0.65F); + ClientUtil.drawBakedModel(modelEntryPod); + + if (entityEntryPod.posY > 382.0F) + { + RenderHelper.disableStandardItemLighting(); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GlStateManager.cullFace(GlStateManager.CullFace.FRONT); + + int color = ColorUtil.to32BitColor(entityEntryPod.posY >= 790.0F ? 255 : (int) Math.max(Math.min(255, -(entityEntryPod.motionY + 0.6F) * 100.0F), 0), 255, 255, 255); + + GlStateManager.pushMatrix(); + float val = (float) (Math.sin(entityEntryPod.ticksExisted) / 20.0F + 0.5F); + GlStateManager.scale(1.0F, 1.0F + val, 1.0F); + GlStateManager.rotate(entityEntryPod.ticksExisted * 20.0F, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModelColored(modelFlame, color); + GlStateManager.popMatrix(); + + GlStateManager.scale(1.0F, 1.0F + val / 6.0F, 1.0F); + GlStateManager.rotate(entityEntryPod.ticksExisted * 5.0F, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModelColored(modelFlame, color); + + GlStateManager.cullFace(GlStateManager.CullFace.BACK); + GlStateManager.enableCull(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.enableStandardItemLighting(); + } + + if (entityEntryPod.getGroundPosY() != null && entityEntryPod.posY - entityEntryPod.getGroundPosY() > 5.0F && entityEntryPod.posY <= 242.0F) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(-1.4F, 1.5F, -0.3F); + GlStateManager.scale(2.5F, 3.0F, 2.5F); + this.parachuteModel.renderAll(); + GlStateManager.popMatrix(); + } + GlStateManager.popMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEntryPodVenus entityEntryPod) + { + return new ResourceLocation("missing"); + } + + @Override + public boolean shouldRender(EntityEntryPodVenus lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(1D, 2D, 1D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderJuicer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderJuicer.java new file mode 100644 index 00000000..4c538741 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderJuicer.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.entity; + +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.client.model.ModelJuicer; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderJuicer extends RenderLiving +{ + + private static final ResourceLocation juicerTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/juicer.png"); + private boolean texSwitch; + + public RenderJuicer(RenderManager renderManager) + { + super(renderManager, new ModelJuicer(), 0.5F); + } + + @Override + protected void preRenderCallback(EntityJuicer entity, float partialTickTime) + { + GlStateManager.rotate(entity.isHanging() ? 180.0F : 0.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, entity.isHanging() ? 1.8F : 1.3F, 0.0F); + super.preRenderCallback(entity, partialTickTime); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntityJuicer entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityJuicer juicer) + { + return texSwitch ? OverlaySensorGlasses.altTexture : juicerTexture; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderSpiderQueen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderSpiderQueen.java new file mode 100644 index 00000000..1910fc59 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderSpiderQueen.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.entity; + +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.client.model.ModelSpiderQueen; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntitySpiderQueen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderSpiderQueen extends RenderLiving +{ + + private static final ResourceLocation spiderTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/spider_queen.png"); + public static IBakedModel webModel; + + public RenderSpiderQueen(RenderManager renderManager) + { + super(renderManager, new ModelSpiderQueen(), 1.0F); + } + + private void updateModels() + { + if (webModel == null) + { + try + { + webModel = ClientUtil.modelFromOBJ(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "web.obj"), ImmutableList.of("Sphere")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + protected void preRenderCallback(EntitySpiderQueen entity, float partialTickTime) + { + if (entity.getBurrowedCount() >= 0) + { + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, entity.height, 0.0F); + } + GL11.glScalef(1.5F, 1.5F, 1.5F); + GL11.glRotatef((float) (Math.pow(entity.deathTicks, 2) / 5.0F + (Math.pow(entity.deathTicks, 2) / 5.0F - Math.pow(entity.deathTicks - 1, 2) / 5.0F) * partialTickTime), 0.0F, 1.0F, 0.0F); + super.preRenderCallback(entity, partialTickTime); + } + + @Override + public void doRender(EntitySpiderQueen entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + + GL11.glPushMatrix(); + GL11.glTranslatef((float) x, (float) y + 0.8F, (float) z); + GL11.glScalef(1.4F, 1.5F, 1.4F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + this.updateModels(); + + RenderHelper.disableStandardItemLighting(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + if (entity.getBurrowedCount() >= 0) + { + GL11.glDisable(GL11.GL_CULL_FACE); + ClientUtil.drawBakedModel(webModel); + GL11.glScalef(1.05F, 1.1F, 1.05F); + GL11.glRotatef(192.5F, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModel(webModel); + GL11.glEnable(GL11.GL_CULL_FACE); + } + + RenderHelper.enableStandardItemLighting(); + + GL11.glPopMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(EntitySpiderQueen juicer) + { + return spiderTexture; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderWebShot.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderWebShot.java new file mode 100644 index 00000000..3c0a2495 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderWebShot.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.entity; + +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityWebShot; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderWebShot extends Render +{ + + public RenderWebShot(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 0.5F; + } + + @Override + public void doRender(EntityWebShot entity, double x, double y, double z, float par8, float partialTicks) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y + 0.5F, (float) z); + this.bindEntityTexture(entity); + GlStateManager.rotate((entity.ticksExisted + partialTicks) * 50.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(-0.5F, -1F, 0.5F); + blockrendererdispatcher.renderBlockBrightness(Blocks.WEB.getDefaultState(), 1.0F); + GlStateManager.translate(0.0F, 0.0F, 1.0F); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityWebShot entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityLaserTurretRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityLaserTurretRenderer.java new file mode 100644 index 00000000..6b09fd0c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityLaserTurretRenderer.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityLaserTurretRenderer extends TileEntitySpecialRenderer +{ + + public static OBJModel.OBJBakedModel laserBase; + public static OBJModel.OBJBakedModel laserPhalange; + public static OBJModel.OBJBakedModel laserPhalangeAxle; + public static OBJModel.OBJBakedModel laserTurrets; + public static OBJModel.OBJBakedModel laserTurretsOff; + public static OBJModel.OBJBakedModel orb1; + public static OBJModel.OBJBakedModel orb2; + + public IBakedModel updateModels() + { + if (laserBase == null) + { + try + { + IModel model0 = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "laser.obj")); + IModel model1 = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "orb.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + laserBase = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("baseConnector0", "baseConnector1"), false), DefaultVertexFormats.ITEM, spriteFunction); + laserPhalange = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("phalange"), false), DefaultVertexFormats.ITEM, spriteFunction); + laserPhalangeAxle = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("phalangeAxle"), false), DefaultVertexFormats.ITEM, spriteFunction); + laserTurrets = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("turretLeft", "turretRight"), false), DefaultVertexFormats.ITEM, spriteFunction); + laserTurretsOff = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("turretLeft_off", "turretRight_off"), false), DefaultVertexFormats.ITEM, spriteFunction); + orb1 = (OBJModel.OBJBakedModel) model1.bake(new OBJModel.OBJState(ImmutableList.of("inner_Icosphere"), false), DefaultVertexFormats.ITEM, spriteFunction); + orb2 = (OBJModel.OBJBakedModel) model1.bake(new OBJModel.OBJState(ImmutableList.of("outer_Icosphere.001"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + return laserBase; + } + + @Override + public void render(TileEntityLaserTurret tile, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); + GlStateManager.pushMatrix(); + RenderHelper.disableStandardItemLighting(); + + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + this.updateModels(); + + GlStateManager.scale(1 / 16.0F, 1 / 16.0F, 1 / 16.0F); + + GlStateManager.pushMatrix(); + GlStateManager.scale(0.9F, 1.0F, 0.9F); + ClientUtil.drawBakedModel(laserBase); + GlStateManager.popMatrix(); + + GlStateManager.rotate(tile.yaw, 0.0F, 1.0F, 0.0F); + + // Interpolate between yaw and targetYaw + + float partialRot = Math.signum(tile.pitch) * tile.pitch * (tile.pitch / 120.0F); + GlStateManager.rotate(partialRot, 0.0F, 0.0F, -1.0F); + + GlStateManager.pushMatrix(); + GlStateManager.scale(1.1F, 1.0F, 1.0F); + + ClientUtil.drawBakedModel(laserPhalange); + GlStateManager.popMatrix(); + + GlStateManager.rotate(tile.pitch - partialRot, 0.0F, 0.0F, -1.0F); + + ClientUtil.drawBakedModel(laserPhalangeAxle); + ClientUtil.drawBakedModel(tile.active ? laserTurrets : laserTurretsOff); + + GlStateManager.popMatrix(); + Tessellator tess = Tessellator.getInstance(); + + float inv = (float) (Math.pow(tile.chargeLevel / 5.0F + 1.0F, 2.5F) * 1.0F); + float invNext = (float) (Math.pow((tile.chargeLevel + 1) / 5.0F + 1.0F, 2.5F) * 1.0F); + float rotate = inv + (invNext - inv) * partialTicks; + + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + + if (tile.chargeLevel > 0) + { + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.rotate(tile.yaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(tile.pitch, 0.0F, 0.0F, -1.0F); + GlStateManager.translate(-0.6F, 0.28F, 0.0F); + + GlStateManager.disableTexture2D(); + + tess.getBuffer().begin(GL11.GL_LINE_LOOP, DefaultVertexFormats.POSITION_COLOR); + + tess.getBuffer().pos(0.09F, 0.0F, 0.275F).color(0.0F, 1.0F, 0.0F, 1.0F).endVertex(); + tess.getBuffer().pos(0.0F, 0.0F, 0.0F).color(0.0F, 1.0F, 0.0F, 1.0F).endVertex(); + tess.getBuffer().pos(0.09F, 0.0F, -0.275F).color(0.0F, 1.0F, 0.0F, 1.0F).endVertex(); + + tess.draw(); + GlStateManager.enableTexture2D(); + + float scale = tile.chargeLevel / 600.0F; + GlStateManager.scale(0.01F + scale, 0.01F + scale, 0.01F + scale); + GlStateManager.rotate(rotate, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModel(orb1); + GlStateManager.rotate(rotate, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModel(orb2); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + + if (tile.timeSinceShot > 0 && tile.timeSinceShot < 5) + { + Entity e = tile.getWorld().getEntityByID(tile.targettedEntity); + + if (e != null) + { + GlStateManager.disableTexture2D(); + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.disableCull(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.rotate(tile.yaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(tile.pitch, 0.0F, 0.0F, -1.0F); + GlStateManager.translate(-0.6F, 0.28F, 0.0F); + + BufferBuilder bb = tess.getBuffer(); + + bb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + + Vector3 vec = new Vector3(e.posX, e.posY + e.getEyeHeight(), e.posZ); + vec.translate(new Vector3(-(tile.getPos().getX() + 0.5F), -(tile.getPos().getY() + 1.78F), -(tile.getPos().getZ() + 0.5F))); + float dist = (float) vec.getMagnitude() - 0.8F; + float shotTimer = (float) (Math.pow((5.0F - tile.timeSinceShot) / 5.0F + 1.0F, 2.5F) * 0.5F); + float shotTimerNext = (float) (Math.pow((5.0F - (tile.timeSinceShot + 1)) / 5.0F + 1.0F, 2.5F) * 0.5F); + float fade = shotTimer + (shotTimerNext - shotTimer) * partialTicks; + float yMin = -0.101F * fade; + float yMax = 0.101F * fade; + float yMin1 = -0.15F * fade; + float yMax1 = 0.15F * fade; + + tess.getBuffer().pos(0.0F, yMax, yMax).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(0.0F, yMin, yMin).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMin * 0.4F, yMin * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMax * 0.4F, yMax * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + + tess.getBuffer().pos(0.0F, yMax, yMin).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(0.0F, yMin, yMax).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMin * 0.4F, yMax * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMax * 0.4F, yMin * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + + tess.getBuffer().pos(0.0F, yMax1, yMax1).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(0.0F, yMin1, yMin1).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMin1 * 0.4F, yMin1 * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMax1 * 0.4F, yMax1 * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + + tess.getBuffer().pos(0.0F, yMax1, yMin1).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(0.0F, yMin1, yMax1).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMin1 * 0.4F, yMax1 * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMax1 * 0.4F, yMin1 * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + + tess.draw(); + + GlStateManager.enableCull(); + GlStateManager.enableTexture2D(); + GlStateManager.popMatrix(); + } + } + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityTreasureChestRenderer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityTreasureChestRenderer.java new file mode 100644 index 00000000..d373ca79 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityTreasureChestRenderer.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.tile; + +import micdoodle8.mods.galacticraft.core.client.model.block.ModelTreasureChest; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityTreasureChestVenus; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@SideOnly(Side.CLIENT) +public class TileEntityTreasureChestRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation treasureChestTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/treasure_venus.png"); + + private final ModelTreasureChest chestModel = new ModelTreasureChest(); + + @Override + public void render(TileEntityTreasureChestVenus chest, double x, double y, double z, float par7, int par8, float alpha) + { + int var9; + + if (!chest.hasWorld()) + { + var9 = 0; + } else + { + var9 = chest.getBlockMetadata(); + } + + this.bindTexture(TileEntityTreasureChestRenderer.treasureChestTexture); + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + short var11 = 0; + + if (var9 == 2) + { + var11 = 180; + } + + if (var9 == 3) + { + var11 = 0; + } + + if (var9 == 4) + { + var11 = 90; + } + + if (var9 == 5) + { + var11 = -90; + } + + GL11.glRotatef(var11, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float var12 = chest.prevLidAngle + (chest.lidAngle - chest.prevLidAngle) * par8; + + var12 = 1.0F - var12; + var12 = 1.0F - var12 * var12 * var12; + + this.chestModel.chestLid.rotateAngleX = -(var12 * (float) Math.PI / 4.0F); + this.chestModel.renderAll(!chest.locked); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/TeleportTypeVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/TeleportTypeVenus.java new file mode 100644 index 00000000..599d12d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/TeleportTypeVenus.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.dimension; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityEntryPodVenus; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +public class TeleportTypeVenus implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + double x = stats.getCoordsTeleportedFromX(); + double z = stats.getCoordsTeleportedFromZ(); + int limit = ConfigManagerCore.otherPlanetWorldBorders - 2; + if (limit > 20) + { + if (x > limit) + { + z *= limit / x; + x = limit; + } else if (x < -limit) + { + z *= -limit / x; + x = -limit; + } + if (z > limit) + { + x *= limit / z; + z = limit; + } else if (z < -limit) + { + x *= -limit / z; + z = -limit; + } + } + return new Vector3(x, 900.0, z); + } + + return null; + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, 900.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return null; + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + if (!ridingAutoRocket && player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + if (stats.getTeleportCooldown() <= 0) + { + if (player.capabilities.isFlying) + { + player.capabilities.isFlying = false; + } + + if (!newWorld.isRemote) + { + EntityEntryPodVenus entryPod = new EntityEntryPodVenus(player); + + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) newWorld); + entryPod.forceSpawn = true; + newWorld.spawnEntity(entryPod); + CompatibilityManager.forceLoadChunksEnd((WorldServer) newWorld, previous); + } + + stats.setTeleportCooldown(10); + } + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/WorldProviderVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/WorldProviderVenus.java new file mode 100644 index 00000000..e9423676 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/WorldProviderVenus.java @@ -0,0 +1,305 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.dimension; + +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.api.world.IWeatherProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.galacticraft.planets.venus.client.fx.ParticleAcidVapor; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.BiomeProviderVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.ChunkProviderVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.RoomTreasureVenus; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.particle.Particle; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class WorldProviderVenus extends WorldProviderSpace implements IGalacticraftWorldProvider, ISolarLevel, IWeatherProvider +{ + + private double solarMultiplier = -0.36D; + private float prevRainingStrength; + private float rainingStrength; + private boolean raining = false; + private int rainTime = 100; + private int rainChange = 100; + private float targetRain = 0.0F; + + @Override + public Vector3 getFogColor() + { + float night = this.getStarBrightness(1.0F); + float day = 1.0F - this.getStarBrightness(1.0F); + float dayColR = 203.0F / 255.0F; + float dayColG = 147.0F / 255.0F; + float dayColB = 0.0F / 255.0F; + float nightColR = 131.0F / 255.0F; + float nightColG = 108.0F / 255.0F; + float nightColB = 46.0F / 255.0F; + return new Vector3(dayColR * day + nightColR * night, dayColG * day + nightColG * night, dayColB * day + nightColB * night); + } + + @Override + public Vector3 getSkyColor() + { + float night = this.getStarBrightness(1.0F); + float day = 1.0F - this.getStarBrightness(1.0F); + float dayColR = 255.0F / 255.0F; + float dayColG = 207.0F / 255.0F; + float dayColB = 81.0F / 255.0F; + float nightColR = 118.0F / 255.0F; + float nightColG = 89.0F / 255.0F; + float nightColB = 21.0F / 255.0F; + return new Vector3(dayColR * day + nightColR * night, dayColG * day + nightColG * night, dayColB * day + nightColB * night); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 720000L; // 30 times longer than earth + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderVenus.class; + } + + @Override + public Class getBiomeProviderClass() + { + BiomeAdaptive.setBodyMultiBiome(VenusModule.planetVenus); + return BiomeProviderVenus.class; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + float f1 = this.world.getCelestialAngle(par1); + float f2 = 1.0F - (MathHelper.cos(f1 * Constants.twoPI) * 2.0F + 0.25F); + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + return f2 * f2 * 0.75F; + } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 76; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + + // Overriding so that beds do not explode on Mars + @Override + public boolean canRespawnHere() + { + if (EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = false; + return true; + } + return false; + } + + @Override + public float getGravity() + { + return 0.0375F; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.9D; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier >= 3; + } + + @Override + public float getFallDamageModifier() + { + return 0.38F; + } + + @Override + public CelestialBody getCelestialBody() + { + return VenusModule.planetVenus; + } + + @Override + public double getSolarEnergyMultiplier() + { + if (this.solarMultiplier < 0D) + { + double s = this.getSolarSize(); + this.solarMultiplier = s * s * s; + } + return this.solarMultiplier; + } + + @Override + public boolean shouldDisablePrecipitation() + { + return false; + } + + @Override + public DimensionType getDimensionType() + { + return GCPlanetDimensions.VENUS; + } + + @Override + public int getDungeonSpacing() + { + return 704; + } + + @Override + public float getArrowGravity() + { + return 0.0275F; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasureVenus.VENUSCHEST; + } + + @Override + public List getSurfaceBlocks() + { + List list = new LinkedList<>(); + list.add(VenusBlocks.venusBlock); + return list; + } + + @Override + public boolean canDoRainSnowIce(net.minecraft.world.chunk.Chunk chunk) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public Particle getParticle(WorldClient world, double x, double y, double z) + { + return new ParticleAcidVapor(world, x, y, z, 0.0D, 0.0D, 0.0D, 0.95F); + } + + @Override + protected void updateWeatherOverride() + { + if (!this.world.isRemote) + { + if (--this.rainTime <= 0) + { + this.raining = !this.raining; + if (this.raining) + { + this.rainTime = (this.world.rand.nextInt(3600) + 1000); + } else + { + this.rainTime = (this.world.rand.nextInt(2000) + 1000); + } + } + + if (--this.rainChange <= 0) + { + this.targetRain = 0.15F + this.world.rand.nextFloat() * 0.45F; + this.rainChange = (this.world.rand.nextInt(200) + 100); + } + + float strength = this.world.rainingStrength; + this.world.prevRainingStrength = strength; + if (this.raining && strength < this.targetRain) + { + strength += 0.004F; + } else if (!this.raining || strength > this.targetRain) + { + strength -= 0.004F; + } + this.world.rainingStrength = MathHelper.clamp(strength, 0.0F, 0.6F); + } + } + + @Override + public void weatherSounds(int j, Minecraft mc, World world, BlockPos blockpos, double xx, double yy, double zz, Random random) + { + if ((int) yy >= blockpos.getY() + 1 && world.getPrecipitationHeight(blockpos).getY() > blockpos.getY()) + { + mc.world.playSound(xx, yy, zz, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.WEATHER, 0.025F, 0.6F + random.nextFloat() * 0.2F, false); + } else + { + mc.world.playSound(xx, yy, zz, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.WEATHER, 0.04F, 0.8F + random.nextFloat() * 0.06F + random.nextFloat() * 0.06F, false); + } + } + + @Override + public int getSoundInterval(float rainStrength) + { + int result = 80 - (int) (rainStrength * 88F); + return result > 0 ? result : 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityEntryPodVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityEntryPodVenus.java new file mode 100644 index 00000000..6b10ad92 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityEntryPodVenus.java @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities; + +import java.util.Map; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.entities.IScaleableFuelLevel; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityEntryPodVenus extends EntityLanderBase implements IScaleableFuelLevel, ICameraZoomEntity, IIgnoreShift +{ + + private Integer groundPosY = null; + + public EntityEntryPodVenus(World var1) + { + super(var1); + this.setSize(1.5F, 3.0F); + } + + public EntityEntryPodVenus(EntityPlayerMP player) + { + super(player, 0.0F); + this.setSize(1.5F, 3.0F); + } + + @Override + public double getInitialMotionY() + { + return -2.5F; + } + + @Override + public double getMountedYOffset() + { + return this.height - 2.0D; + } + + @Override + public float getRotateOffset() + { + // flag no rotate + return -20F; + } + + @Override + public boolean shouldSpawnParticles() + { + return false; + } + + @Override + public Map getParticleMap() + { + return null; + } + + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + return null; + } + + @Override + public void tickOnGround() + { + + } + + @Override + public void tickInAir() + { + super.tickInAir(); + + if (this.world.isRemote) + { + if (!this.onGround) + { + this.motionY -= 0.002D; + + if (this.motionY < -0.7F) + { + this.motionY *= 0.994F; + } + + if (this.posY <= 242.0F) + { + if (groundPosY == null) + { + this.groundPosY = this.world.getTopSolidOrLiquidBlock(new BlockPos(this.posX, this.posY, this.posZ)).getY(); + } + + if (this.posY - this.groundPosY > 5.0F) + { + this.motionY *= 0.995F; + } else + this.motionY *= 0.9995F; + } + } + } + } + + @Override + public void onGroundHit() + { + + } + + @Override + public Vector3 getMotionVec() + { + if (this.onGround) + { + return new Vector3(0, 0, 0); + } + + if (this.ticks >= 40 && this.ticks < 45) + { + this.motionY = this.getInitialMotionY(); + } + + if (!this.shouldMove()) + { + return new Vector3(0, 0, 0); + } + + return new Vector3(this.motionX, this.motionY, this.motionZ); + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public boolean pressKey(int key) + { + return false; + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.entry_pod.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return null; + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (!this.onGround) + { + return false; + } + + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + return true; + } + + if (this.getPassengers().isEmpty() && player instanceof EntityPlayerMP) + { + GCCoreUtil.openParachestInv((EntityPlayerMP) player, this); + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + return true; + } else + { + return true; + } + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return !this.onGround; + } + + public Integer getGroundPosY() + { + return groundPosY; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityJuicer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityJuicer.java new file mode 100644 index 00000000..68c1b8e7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityJuicer.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.entities.ai.EntityMoveHelperCeiling; +import micdoodle8.mods.galacticraft.planets.venus.entities.ai.PathNavigateCeiling; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class EntityJuicer extends EntityMob implements IEntityBreathable +{ + + private static final DataParameter IS_FALLING = EntityDataManager.createKey(EntityJuicer.class, DataSerializers.BOOLEAN); + private static final DataParameter IS_HANGING = EntityDataManager.createKey(EntityJuicer.class, DataSerializers.BOOLEAN); + private BlockPos jumpTarget; + private int timeSinceLastJump = 0; + + public EntityJuicer(World world) + { + super(world); + this.moveHelper = new EntityMoveHelperCeiling(this); + this.setSize(0.95F, 0.6F); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0, true)); + this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); + this.timeSinceLastJump = this.rand.nextInt(200) + 50; + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(IS_FALLING, false); + this.dataManager.register(IS_HANGING, false); + } + + public boolean isHanging() + { + return this.dataManager.get(IS_FALLING); + } + + public void setHanging(boolean hanging) + { + this.dataManager.set(IS_FALLING, hanging); + } + + public boolean isFalling() + { + return this.dataManager.get(IS_FALLING); + } + + public void setFalling(boolean falling) + { + this.dataManager.set(IS_FALLING, falling); + } + + @Override + public boolean canBreatheUnderwater() + { + return true; + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + } + + @Override + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SPIDER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SPIDER_HURT; + } + + @Override + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SPIDER_DEATH; + } + + @Override + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_SPIDER_STEP, 0.15F, 1.0F); + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + protected float getSoundPitch() + { + return super.getSoundPitch() + 0.4F; + } + + @Override + protected Item getDropItem() + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public void onLivingUpdate() + { + if (this.isHanging()) + { + this.onGround = true; + } + + super.onLivingUpdate(); + + if (!this.world.isRemote) + { + if (this.jumpTarget == null) + { + if (this.timeSinceLastJump <= 0) + { + BlockPos posAbove = new BlockPos(this.posX, this.posY + (this.isHanging() ? 1.0 : -0.5), this.posZ); + IBlockState blockAbove = this.world.getBlockState(posAbove); + + if (blockAbove.getBlock() == VenusBlocks.venusBlock && (blockAbove.getValue(BlockBasicVenus.BASIC_TYPE_VENUS) == BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_2 + || blockAbove.getValue(BlockBasicVenus.BASIC_TYPE_VENUS) == BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_1)) + { + RayTraceResult hit = + this.world.rayTraceBlocks(new Vec3d(this.posX, this.posY, this.posZ), new Vec3d(this.posX, this.posY + (this.isHanging() ? -10 : 10), this.posZ), false, true, false); + + if (hit != null && hit.typeOfHit == RayTraceResult.Type.BLOCK) + { + IBlockState blockBelow = this.world.getBlockState(hit.getBlockPos()); + if (blockBelow.getBlock() == VenusBlocks.venusBlock && (blockBelow.getValue(BlockBasicVenus.BASIC_TYPE_VENUS) == BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_2 + || blockBelow.getValue(BlockBasicVenus.BASIC_TYPE_VENUS) == BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_1)) + { + if (this.isHanging()) + { + this.jumpTarget = hit.getBlockPos(); + this.setFalling(this.jumpTarget != null); + } else + { + this.jumpTarget = hit.getBlockPos().offset(EnumFacing.DOWN); + this.setFalling(this.jumpTarget != null); + } + } + } + } + } else + { + this.timeSinceLastJump--; + } + } + } + + if (this.isHanging()) + { + this.motionY = 0.0F; + } + } + + @Override + public void move(MoverType type, double x, double y, double z) + { + super.move(type, x, y, z); + if (this.isHanging()) + { + this.onGround = true; + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (this.world.isRemote) + { + this.prevLimbSwingAmount = this.limbSwingAmount; + double d1 = this.posX - this.prevPosX; + double d0 = this.posZ - this.prevPosZ; + float f2 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F; + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + this.limbSwingAmount += (f2 - this.limbSwingAmount) * 0.4F; + this.limbSwing += this.limbSwingAmount; + } else + { + if (this.jumpTarget != null) + { + double diffX = this.jumpTarget.getX() - this.posX + 0.5; + double diffY = this.jumpTarget.getY() - this.posY + 0.6; + double diffZ = this.jumpTarget.getZ() - this.posZ + 0.5; + this.motionY = diffY > 0 ? Math.min(diffY / 2.0F, 0.2123F) : Math.max(diffY / 2.0F, -0.2123F); + this.motionX = diffX > 0 ? Math.min(diffX / 2.0F, 0.2123F) : Math.max(diffX / 2.0F, -0.2123F); + this.motionZ = diffZ > 0 ? Math.min(diffZ / 2.0F, 0.2123F) : Math.max(diffZ / 2.0F, -0.2123F); + if (diffY > 0.0F && Math.abs(this.jumpTarget.getY() - (this.posY + this.motionY)) < 0.4F) + { + this.setPosition(this.jumpTarget.getX() + 0.5, this.jumpTarget.getY() + 0.2, this.jumpTarget.getZ() + 0.5); + this.jumpTarget = null; + this.setFalling(false); + this.timeSinceLastJump = this.rand.nextInt(180) + 60; + this.setHanging(true); + } else if (diffY < 0.0F && Math.abs(this.jumpTarget.getY() - (this.posY + this.motionY)) < 0.8F) + { + this.setPosition(this.jumpTarget.getX() + 0.5, this.jumpTarget.getY() + 1.0, this.jumpTarget.getZ() + 0.5); + this.jumpTarget = null; + this.setFalling(false); + this.timeSinceLastJump = this.rand.nextInt(180) + 60; + this.setHanging(false); + } else + { + this.setHanging(false); + } + } + } + } + + @Override + protected boolean isValidLightLevel() + { + return true; + } + + @Override + public boolean getCanSpawnHere() + { + if (super.getCanSpawnHere()) + { + EntityPlayer var1 = this.world.getClosestPlayerToEntity(this, 5.0D); + return var1 == null; + } else + { + return false; + } + } + + @Override + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ARTHROPOD; + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + protected PathNavigate createNavigator(World worldIn) + { + return new PathNavigateCeiling(this, worldIn); + } + + @Override + public void setInWeb() + { + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + super.writeEntityToNBT(tagCompound); + + tagCompound.setInteger("timeSinceLastJump", this.timeSinceLastJump); + tagCompound.setBoolean("jumpTargetNull", this.jumpTarget == null); + if (this.jumpTarget != null) + { + tagCompound.setInteger("jumpTargetX", this.jumpTarget.getX()); + tagCompound.setInteger("jumpTargetY", this.jumpTarget.getY()); + tagCompound.setInteger("jumpTargetZ", this.jumpTarget.getZ()); + } + } + + @Override + public void readEntityFromNBT(NBTTagCompound tagCompund) + { + super.readEntityFromNBT(tagCompund); + + this.timeSinceLastJump = tagCompund.getInteger("timeSinceLastJump"); + if (tagCompund.getBoolean("jumpTargetNull")) + { + this.jumpTarget = null; + } else + { + this.jumpTarget = new BlockPos(tagCompund.getInteger("jumpTargetX"), tagCompund.getInteger("jumpTargetY"), tagCompund.getInteger("jumpTargetZ")); + } + + this.setFalling(this.jumpTarget != null); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntitySpiderQueen.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntitySpiderQueen.java new file mode 100644 index 00000000..87d1495e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntitySpiderQueen.java @@ -0,0 +1,467 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import java.util.UUID; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.entities.EntityBossBase; +import micdoodle8.mods.galacticraft.core.entities.IBoss; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagLong; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.BossInfo; +import net.minecraft.world.World; + +public class EntitySpiderQueen extends EntityBossBase implements IEntityBreathable, IBoss, IRangedAttackMob +{ + + private static final DataParameter BURROWED_COUNT = EntityDataManager.createKey(EntitySpiderQueen.class, DataSerializers.BYTE); + public boolean shouldEvade; + private List juicersSpawned = Lists.newArrayList(); + private List spawnedPreload; + + private int rangedAttackTime; + private int minRangedAttackTime; + private int maxRangedAttackTime; + + public EntitySpiderQueen(World worldIn) + { + super(worldIn); + this.setSize(1.4F, 0.9F); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0, true)); + this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); + this.maxRangedAttackTime = 60; + this.minRangedAttackTime = 20; + this.ignoreFrustumCheck = true; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public double getMountedYOffset() + { + return (double) (this.height * 0.5F); + } + + @Override + protected PathNavigate createNavigator(World worldIn) + { + return new PathNavigateGround(this, worldIn); + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(BURROWED_COUNT, (byte) -1); + } + + public byte getBurrowedCount() + { + return this.dataManager.get(BURROWED_COUNT); + } + + public void setBurrowedCount(byte count) + { + this.dataManager.set(BURROWED_COUNT, count); + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (!this.world.isRemote) + { + if (!this.shouldEvade && this.deathTicks <= 0) + { + EntityLivingBase attackTarget = this.getAttackTarget(); + + if (attackTarget != null) + { + double dX = attackTarget.posX - this.posX; + double dY = attackTarget.getEntityBoundingBox().minY + (double) (attackTarget.height / 3.0F) - this.posY; + double dZ = attackTarget.posZ - this.posZ; + + float distance = 5.0F; + double d0 = this.getDistanceSq(attackTarget.posX, attackTarget.getEntityBoundingBox().minY, attackTarget.posZ); + + this.getLookHelper().setLookPositionWithEntity(attackTarget, 30.0F, 30.0F); + + if (--this.rangedAttackTime == 0) + { + if (dX * dX + dY * dY + dZ * dZ > distance * distance) + { + float f = MathHelper.sqrt(d0) / distance; + this.attackEntityWithRangedAttack(attackTarget, 0.0F); + this.rangedAttackTime = MathHelper.floor(f * (float) (this.maxRangedAttackTime - this.minRangedAttackTime) + (float) this.minRangedAttackTime); + } + } else if (this.rangedAttackTime < 0) + { + float f2 = MathHelper.sqrt(d0) / distance; + this.rangedAttackTime = MathHelper.floor(f2 * (float) (this.maxRangedAttackTime - this.minRangedAttackTime) + (float) this.minRangedAttackTime); + } + } + } + } + + if (this.spawnedPreload != null) + { + for (UUID id : this.spawnedPreload) + { + Entity entity = null; + for (Entity e : this.world.getLoadedEntityList()) + { + if (e.getUniqueID().equals(id)) + { + entity = e; + break; + } + } + if (entity instanceof EntityJuicer) + { + this.juicersSpawned.add((EntityJuicer) entity); + } + } + if (this.juicersSpawned.size() == this.spawnedPreload.size()) + { + this.spawnedPreload.clear(); + this.spawnedPreload = null; + } + } + + if (!this.world.isRemote && this.shouldEvade) + { + if (this.spawner != null) + { + AxisAlignedBB roomBounds = this.spawner.getRangeBounds(); + double tarX = (roomBounds.minX + roomBounds.maxX) / 2.0; + double tarZ = (roomBounds.minZ + roomBounds.maxZ) / 2.0; + double dX = tarX - this.posX; + double dY = roomBounds.maxY - this.posY; + double dZ = tarZ - this.posZ; + + double movespeed = 1.0 * this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue(); + this.motionX = Math.min(Math.max(dX / 2.0F, -movespeed), movespeed); + this.motionZ = Math.min(Math.max(dZ / 2.0F, -movespeed), movespeed); + this.navigator.tryMoveToXYZ(tarX, this.posY, tarZ, movespeed); + + if (Math.abs(dX) < 0.1 && Math.abs(dZ) < 0.1) + { + this.motionY = Math.min(dY, 0.2); + + if (Math.abs(dY) - this.height < 1.1 && Math.abs(this.posY - this.lastTickPosY) < 0.05) + { + if (this.getBurrowedCount() >= 0) + { + if (this.ticksExisted % 20 == 0) + { + if (this.juicersSpawned.size() < 6) + { + EntityJuicer juicer = new EntityJuicer(this.world); + double angle = Math.random() * 2 * Math.PI; + double dist = 3.0F; + juicer.setPosition(this.posX + dist * Math.sin(angle), this.posY + 0.2F, this.posZ + dist * Math.cos(angle)); + juicer.setHanging(true); + this.world.spawnEntity(juicer); + this.juicersSpawned.add(juicer); + } + } + + if (this.getBurrowedCount() < 20) + { + this.setBurrowedCount((byte) (this.getBurrowedCount() + 1)); + } + } else + { + this.setBurrowedCount((byte) 0); + } + } + } + } + + if (!this.juicersSpawned.isEmpty()) + { + boolean allDead = true; + for (EntityJuicer juicer : this.juicersSpawned) + { + if (!juicer.isDead) + { + allDead = false; + } + } + if (allDead) + { + this.juicersSpawned.clear(); + this.shouldEvade = false; + this.setBurrowedCount((byte) -1); + } + } + } + } + + @Override + public ItemStack getGuaranteedLoot(Random rand) + { + List stackList = GalacticraftRegistry.getDungeonLoot(3); + return stackList.get(rand.nextInt(stackList.size())).copy(); + } + + @Override + public void knockBack(Entity entityIn, float par2, double par3, double par4) + { + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(150.0F * ConfigManagerCore.dungeonBossHealthMod); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.250000001192092896D); + } + + @Override + protected float getSoundPitch() + { + return (this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F + 0.4F; + } + + @Override + protected float getSoundVolume() + { + return 5.0F; + } + + @Override + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SPIDER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SPIDER_HURT; + } + + @Override + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SPIDER_DEATH; + } + + @Override + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_SPIDER_STEP, 0.5F, 0.5F); + } + + @Override + protected Item getDropItem() + { + return Items.STRING; + } + + @Override + protected void dropFewItems(boolean par1, int par2) + { + super.dropFewItems(par1, par2); + + if (par1 && (this.rand.nextInt(3) == 0 || this.rand.nextInt(1 + par2) > 0)) + { + this.dropItem(Items.SPIDER_EYE, 1); + } + } + + @Override + public void setInWeb() + { + } + + @Override + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ARTHROPOD; + } + + @Override + public boolean isPotionApplicable(PotionEffect potioneffectIn) + { + return potioneffectIn.getPotion() != MobEffects.POISON && super.isPotionApplicable(potioneffectIn); + } + + @Override + public float getEyeHeight() + { + return 0.65F; + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public boolean isEntityInvulnerable(DamageSource source) + { + if (this.getBurrowedCount() >= 0) + { + return true; + } + + return super.isEntityInvulnerable(source); + } + + @Override + protected void damageEntity(DamageSource damageSrc, float damageAmount) + { + float healthLast = this.getHealth(); + super.damageEntity(damageSrc, damageAmount); + float health = this.getHealth(); + + float thirdHealth = this.getMaxHealth() / 3.0F; + + if (health < thirdHealth && healthLast >= thirdHealth) + { + shouldEvade = true; + } else if (health < 2 * thirdHealth && healthLast >= 2 * thirdHealth) + { + shouldEvade = true; + } + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase target, float damage) + { + EntityWebShot entityarrow = new EntityWebShot(this.world, this, target, 0.8F, (float) (14 - this.world.getDifficulty().getId() * 4)); + this.playSound(SoundEvents.ENTITY_ARROW_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); + this.world.spawnEntity(entityarrow); + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + super.writeEntityToNBT(tagCompound); + + tagCompound.setBoolean("should_evade", this.shouldEvade); + + NBTTagList list = new NBTTagList(); + for (EntityJuicer juicer : this.juicersSpawned) + { + list.appendTag(new NBTTagLong(juicer.getPersistentID().getMostSignificantBits())); + list.appendTag(new NBTTagLong(juicer.getPersistentID().getLeastSignificantBits())); + } + tagCompound.setTag("spawned_children", list); + } + + @Override + public void readEntityFromNBT(NBTTagCompound tagCompound) + { + super.readEntityFromNBT(tagCompound); + + this.shouldEvade = tagCompound.getBoolean("should_evade"); + + if (tagCompound.hasKey("spawned_children")) + { + this.spawnedPreload = Lists.newArrayList(); + NBTTagList list = tagCompound.getTagList("spawned_children", 4); + for (int i = 0; i < list.tagCount(); i += 2) + { + NBTTagLong tagMost = (NBTTagLong) list.get(i); + NBTTagLong tagLeast = (NBTTagLong) list.get(i + 1); + this.spawnedPreload.add(new UUID(tagMost.getLong(), tagLeast.getLong())); + } + } + } + + @Override + public int getChestTier() + { + return 3; + } + + @Override + public EntityItem entityDropItem(ItemStack par1ItemStack, float par2) + { + final EntityItem entityitem = new EntityItem(this.world, this.posX, this.posY + par2, this.posZ, par1ItemStack); + entityitem.motionY = -2.0D; + entityitem.setDefaultPickupDelay(); + if (this.captureDrops) + { + this.capturedDrops.add(entityitem); + } else + { + this.world.spawnEntity(entityitem); + } + return entityitem; + } + + @Override + public void dropKey() + { + this.entityDropItem(new ItemStack(VenusItems.key, 1, 0), 0.5F); + } + + @Override + public BossInfo.Color getHealthBarColor() + { + return BossInfo.Color.PURPLE; + } + + @Override + public void setSwingingArms(boolean swingingArms) + { + // TODO Auto-generated method stub + // TODO for 1.12.2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityWebShot.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityWebShot.java new file mode 100644 index 00000000..22f3f1a1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityWebShot.java @@ -0,0 +1,359 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityWebShot extends Entity implements IProjectile +{ + + public int canBePickedUp; + public int arrowShake; + public Entity shootingEntity; + private int ticksInAir; + + public EntityWebShot(World worldIn) + { + super(worldIn); + this.setSize(0.5F, 0.5F); + } + + public EntityWebShot(World worldIn, double x, double y, double z) + { + super(worldIn); + this.setSize(0.5F, 0.5F); + this.setPosition(x, y, z); + } + + public EntityWebShot(World worldIn, EntityLivingBase shooter, EntityLivingBase target, float p_i1755_4_, float p_i1755_5_) + { + super(worldIn); + this.shootingEntity = shooter; + + if (shooter instanceof EntityPlayer) + { + this.canBePickedUp = 1; + } + + this.posY = shooter.posY + (double) shooter.getEyeHeight() - 0.10000000149011612D; + double d0 = target.posX - shooter.posX; + double d1 = target.getEntityBoundingBox().minY + (double) (target.height / 3.0F) - this.posY; + double d2 = target.posZ - shooter.posZ; + double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); + + if (d3 >= 1.0E-7D) + { + float f = (float) MathHelper.atan2(d2, d0) * Constants.RADIANS_TO_DEGREES - 90.0F; + float f1 = (float) MathHelper.atan2(d1, d3) * -Constants.RADIANS_TO_DEGREES; + double d4 = d0 / d3; + double d5 = d2 / d3; + this.setLocationAndAngles(shooter.posX + d4, this.posY, shooter.posZ + d5, f, f1); + float f2 = (float) (d3 * 0.20000000298023224D); + this.shoot(d0, d1 + (double) f2, d2, p_i1755_4_, p_i1755_5_); + } + } + + public EntityWebShot(World worldIn, EntityLivingBase shooter, float velocity) + { + super(worldIn); + this.shootingEntity = shooter; + + if (shooter instanceof EntityPlayer) + { + this.canBePickedUp = 1; + } + + this.setSize(0.5F, 0.5F); + this.setLocationAndAngles(shooter.posX, shooter.posY + (double) shooter.getEyeHeight(), shooter.posZ, shooter.rotationYaw, shooter.rotationPitch); + this.posX -= (double) (MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * 0.16F); + this.posY -= 0.10000000149011612D; + this.posZ -= (double) (MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.motionX = (double) (-MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES)); + this.motionZ = (double) (MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES)); + this.motionY = (double) (-MathHelper.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES)); + this.shoot(this.motionX, this.motionY, this.motionZ, velocity * 1.5F, 1.0F); + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 10.0; + return distance < d0 * d0; + } + + @Override + protected void entityInit() + { + } + + @Override + public void shoot(double x, double y, double z, float velocity, float inaccuracy) + { + float f = MathHelper.sqrt(x * x + y * y + z * z); + x = x / (double) f; + y = y / (double) f; + z = z / (double) f; + x = x + this.rand.nextGaussian() * (double) (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double) inaccuracy; + y = y + this.rand.nextGaussian() * (double) (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double) inaccuracy; + z = z + this.rand.nextGaussian() * (double) (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double) inaccuracy; + x = x * (double) velocity; + y = y * (double) velocity; + z = z * (double) velocity; + this.motionX = x; + this.motionY = y; + this.motionZ = z; + float f1 = MathHelper.sqrt(x * x + z * z); + this.prevRotationYaw = this.rotationYaw = (float) MathHelper.atan2(x, z) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) MathHelper.atan2(y, (double) f1) * Constants.RADIANS_TO_DEGREES; + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean p_180426_10_) + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + } + + @Override + @SideOnly(Side.CLIENT) + public void setVelocity(double x, double y, double z) + { + this.motionX = x; + this.motionY = y; + this.motionZ = z; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(x * x + z * z); + this.prevRotationYaw = this.rotationYaw = (float) MathHelper.atan2(x, z) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) MathHelper.atan2(y, (double) f) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float) MathHelper.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) MathHelper.atan2(this.motionY, (double) f) * Constants.RADIANS_TO_DEGREES; + } + + if (this.arrowShake > 0) + { + --this.arrowShake; + } + + if (this.ticksExisted > 1000) + { + this.setDead(); + } + + ++this.ticksInAir; + Vec3d vec31 = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec3 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult movingobjectposition = this.world.rayTraceBlocks(vec31, vec3, false, true, false); + vec31 = new Vec3d(this.posX, this.posY, this.posZ); + vec3 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (movingobjectposition != null) + { + vec3 = new Vec3d(movingobjectposition.hitVec.x, movingobjectposition.hitVec.y, movingobjectposition.hitVec.z); + } + + Entity entity = null; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D, 1.0D, 1.0D)); + double d0 = 0.0D; + final double border = 0.3D; + + for (int i = 0; i < list.size(); ++i) + { + Entity entity1 = (Entity) list.get(i); + + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) + { + AxisAlignedBB axisalignedbb1 = entity1.getEntityBoundingBox().grow(border, border, border); + RayTraceResult movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3); + + if (movingobjectposition1 != null) + { + double d1 = vec31.squareDistanceTo(movingobjectposition1.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) + { + movingobjectposition = new RayTraceResult(entity); + } + + if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer) movingobjectposition.entityHit; + + if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer) this.shootingEntity).canAttackPlayer(entityplayer)) + { + movingobjectposition = null; + } + } + + if (movingobjectposition != null) + { + if (movingobjectposition.entityHit != null) + { + if (movingobjectposition.entityHit != this.shootingEntity && !this.world.isRemote) + { + if (movingobjectposition.entityHit instanceof EntityLivingBase) + { + ((EntityLivingBase) movingobjectposition.entityHit).addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 180, 2, true, true)); + this.setDead(); + } else + { + this.motionX *= -0.10000000149011612D; + this.motionY *= -0.10000000149011612D; + this.motionZ *= -0.10000000149011612D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } + } else + { + this.motionX = (double) ((float) (movingobjectposition.hitVec.x - this.posX)); + this.motionY = (double) ((float) (movingobjectposition.hitVec.y - this.posY)); + this.motionZ = (double) ((float) (movingobjectposition.hitVec.z - this.posZ)); + float f5 = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double) f5 * 0.05000000074505806D; + this.posY -= this.motionY / (double) f5 * 0.05000000074505806D; + this.posZ -= this.motionZ / (double) f5 * 0.05000000074505806D; + this.arrowShake = 7; + this.setDead(); + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float f3 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float) MathHelper.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + + for (this.rotationPitch = (float) MathHelper.atan2(this.motionY, (double) f3) * Constants.RADIANS_TO_DEGREES; this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= + 360.0F) + { + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + + if (this.isInWater()) + { + for (int i1 = 0; i1 < 4; ++i1) + { + float f8 = 0.25F; + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * (double) f8, this.posY - this.motionY * (double) f8, this.posZ - this.motionZ * (double) f8, + this.motionX, this.motionY, this.motionZ); + } + } + + if (this.isWet()) + { + this.extinguish(); + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.doBlockCollisions(); + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + tagCompound.setByte("shake", (byte) this.arrowShake); + tagCompound.setByte("pickup", (byte) this.canBePickedUp); + } + + @Override + public void readEntityFromNBT(NBTTagCompound tagCompund) + { + this.arrowShake = tagCompund.getByte("shake") & 255; + + if (tagCompund.hasKey("pickup", 99)) + { + this.canBePickedUp = tagCompund.getByte("pickup"); + } + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public boolean canBeAttackedWithItem() + { + return false; + } + + @Override + public float getEyeHeight() + { + return 0.0F; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/EntityMoveHelperCeiling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/EntityMoveHelperCeiling.java new file mode 100644 index 00000000..204a4c40 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/EntityMoveHelperCeiling.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities.ai; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityMoveHelper; +import net.minecraft.util.math.MathHelper; + +public class EntityMoveHelperCeiling extends EntityMoveHelper +{ + + public EntityMoveHelperCeiling(EntityLiving entitylivingIn) + { + super(entitylivingIn); + } + + @Override + public void onUpdateMoveHelper() + { + this.entity.setMoveForward(0.0F); + + if (this.isUpdating()) + { + this.action = EntityMoveHelper.Action.WAIT; + int i = MathHelper.floor(this.entity.getEntityBoundingBox().minY + 0.5D); + double d0 = this.posX - this.entity.posX; + double d1 = this.posZ - this.entity.posZ; + double d2 = this.posY - (double) i; + double d3 = d0 * d0 + d1 * d1; + + if (d3 >= 2.500000277905201E-7D) + { + float f = (float) MathHelper.atan2(d1, d0) * Constants.RADIANS_TO_DEGREES - 90.0F; + this.entity.rotationYaw = f; + this.entity.setAIMoveSpeed((float) (this.speed * this.entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue())); + + if (d2 > 0.0D && d0 * d0 + d1 * d1 < 1.0D) + { + this.entity.getJumpHelper().setJumping(); + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/PathNavigateCeiling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/PathNavigateCeiling.java new file mode 100644 index 00000000..d3ac3961 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/PathNavigateCeiling.java @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities.ai; + +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.pathfinding.PathFinder; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class PathNavigateCeiling extends PathNavigate +{ + + protected WalkNodeProcessorCeiling nodeProcessor; + + public PathNavigateCeiling(EntityJuicer entity, World worldIn) + { + super(entity, worldIn); + } + + @Override + protected PathFinder getPathFinder() + { + this.nodeProcessor = new WalkNodeProcessorCeiling(); + return new PathFinder(this.nodeProcessor); + } + + @Override + protected boolean canNavigate() + { + return this.entity.onGround || this.entity.isRiding() && this.entity instanceof EntityZombie && this.entity.getRidingEntity() instanceof EntityChicken; + } + + @Override + protected Vec3d getEntityPosition() + { + return new Vec3d(this.entity.posX, (double) this.getPathablePosY(), this.entity.posZ); + } + + private int getPathablePosY() + { + return (int) (this.entity.getEntityBoundingBox().minY + 0.5D); + } + + @Override + protected boolean isDirectPathBetweenPoints(Vec3d current, Vec3d target, int sizeX, int sizeY, int sizeZ) + { + int i = MathHelper.floor(current.x); + int j = MathHelper.floor(current.z); + double d0 = target.x - current.x; + double d1 = target.z - current.z; + double d2 = d0 * d0 + d1 * d1; + + if (d2 < 1.0E-8D) + { + return false; + } else + { + double d3 = 1.0D / Math.sqrt(d2); + d0 = d0 * d3; + d1 = d1 * d3; + sizeX = sizeX + 2; + sizeZ = sizeZ + 2; + + if (!this.isSafeToStandAt(i, (int) current.y, j, sizeX, sizeY, sizeZ, current, d0, d1)) + { + return false; + } else + { + sizeX = sizeX - 2; + sizeZ = sizeZ - 2; + double d4 = 1.0D / Math.abs(d0); + double d5 = 1.0D / Math.abs(d1); + double d6 = (double) (i) - current.x; + double d7 = (double) (j) - current.z; + + if (d0 >= 0.0D) + { + ++d6; + } + + if (d1 >= 0.0D) + { + ++d7; + } + + d6 = d6 / d0; + d7 = d7 / d1; + int k = d0 < 0.0D ? -1 : 1; + int l = d1 < 0.0D ? -1 : 1; + int i1 = MathHelper.floor(target.x); + int j1 = MathHelper.floor(target.z); + int k1 = i1 - i; + int l1 = j1 - j; + + while (k1 * k > 0 || l1 * l > 0) + { + if (d6 < d7) + { + d6 += d4; + i += k; + k1 = i1 - i; + } else + { + d7 += d5; + j += l; + l1 = j1 - j; + } + + if (!this.isSafeToStandAt(i, (int) current.y, j, sizeX, sizeY, sizeZ, current, d0, d1)) + { + return false; + } + } + + return true; + } + } + } + + private boolean isSafeToStandAt(int x, int y, int z, int sizeX, int sizeY, int sizeZ, Vec3d currentPos, double distanceX, double distanceZ) + { + int i = x - sizeX / 2; + int j = z - sizeZ / 2; + + if (!this.isPositionClear(i, y, j, sizeX, sizeY, sizeZ, currentPos, distanceX, distanceZ)) + { + return false; + } else + { + for (int k = i; k < i + sizeX; ++k) + { + for (int l = j; l < j + sizeZ; ++l) + { + double d0 = (double) k + 0.5D - currentPos.x; + double d1 = (double) l + 0.5D - currentPos.z; + + if (d0 * distanceX + d1 * distanceZ >= 0.0D) + { + IBlockState state = this.world.getBlockState(new BlockPos(k, y + 1, l)); + Material material = state.getMaterial(); + + if (material == Material.AIR) + { + return false; + } + + if (material == Material.WATER && !this.entity.isInWater()) + { + return false; + } + + if (material == Material.LAVA) + { + return false; + } + } + } + } + + return true; + } + } + + private boolean isPositionClear(int minX, int minY, int minZ, int sizeX, int sizeY, int sizeZ, Vec3d currentPos, double distanceX, double distanceZ) + { + for (BlockPos blockpos : BlockPos.getAllInBox(new BlockPos(minX, minY, minZ), new BlockPos(minX + sizeX - 1, minY + sizeY - 1, minZ + sizeZ - 1))) + { + double d0 = (double) blockpos.getX() + 0.5D - currentPos.x; + double d1 = (double) blockpos.getZ() + 0.5D - currentPos.z; + + if (d0 * distanceX + d1 * distanceZ >= 0.0D) + { + Block block = this.world.getBlockState(blockpos).getBlock(); + + if (!block.isPassable(this.world, blockpos)) + { + return false; + } + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/WalkNodeProcessorCeiling.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/WalkNodeProcessorCeiling.java new file mode 100644 index 00000000..45760b36 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/WalkNodeProcessorCeiling.java @@ -0,0 +1,469 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities.ai; + +import com.google.common.collect.Sets; +import java.util.EnumSet; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.BlockFence; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.BlockWall; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLiving; +import net.minecraft.init.Blocks; +import net.minecraft.pathfinding.NodeProcessor; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; + +public class WalkNodeProcessorCeiling extends NodeProcessor +{ + + private float avoidsWater; + + @Override + public void init(IBlockAccess sourceIn, EntityLiving mob) + { + super.init(sourceIn, mob); + this.avoidsWater = mob.getPathPriority(PathNodeType.WATER); + } + + @Override + public void postProcess() + { + this.entity.setPathPriority(PathNodeType.WATER, this.avoidsWater); + super.postProcess(); + } + + @Override + public PathPoint getStart() + { + int i; + + if (this.getCanSwim() && this.entity.isInWater()) + { + i = (int) this.entity.getEntityBoundingBox().minY; + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ)); + + for (Block block = this.blockaccess.getBlockState(blockpos$mutableblockpos).getBlock(); block == Blocks.FLOWING_WATER || block == Blocks.WATER; block = + this.blockaccess.getBlockState(blockpos$mutableblockpos).getBlock()) + { + ++i; + blockpos$mutableblockpos.setPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ)); + } + } else if (this.entity.onGround) + { + i = MathHelper.floor(this.entity.getEntityBoundingBox().minY + 0.5D); + } else + { + BlockPos blockpos; + + for (blockpos = new BlockPos( + this.entity); (this.blockaccess.getBlockState(blockpos).getMaterial() == Material.AIR || this.blockaccess.getBlockState(blockpos).getBlock().isPassable(this.blockaccess, blockpos)) + && blockpos.getY() > 0; blockpos = blockpos.down()) + { + ; + } + + i = blockpos.up().getY(); + } + + BlockPos blockpos2 = new BlockPos(this.entity); + PathNodeType pathnodetype1 = this.getPathNodeType(this.entity, blockpos2.getX(), i, blockpos2.getZ()); + + if (this.entity.getPathPriority(pathnodetype1) < 0.0F) + { + Set set = Sets.newHashSet(); + set.add(new BlockPos(this.entity.getEntityBoundingBox().minX, (double) i, this.entity.getEntityBoundingBox().minZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().minX, (double) i, this.entity.getEntityBoundingBox().maxZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().maxX, (double) i, this.entity.getEntityBoundingBox().minZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().maxX, (double) i, this.entity.getEntityBoundingBox().maxZ)); + + for (BlockPos blockpos1 : set) + { + PathNodeType pathnodetype = this.getPathNodeType(this.entity, blockpos1); + + if (this.entity.getPathPriority(pathnodetype) >= 0.0F) + { + return this.openPoint(blockpos1.getX(), blockpos1.getY(), blockpos1.getZ()); + } + } + } + + return this.openPoint(blockpos2.getX(), i, blockpos2.getZ()); + } + + @Override + public PathPoint getPathPointToCoords(double x, double y, double z) + { + return this.openPoint(MathHelper.floor(x - (double) (this.entity.width / 2.0F)), MathHelper.floor(y), MathHelper.floor(z - (double) (this.entity.width / 2.0F))); + } + + @Override + public int findPathOptions(PathPoint[] pathOptions, PathPoint currentPoint, PathPoint targetPoint, float maxDistance) + { + int i = 0; + int j = 0; + PathNodeType pathnodetype = this.getPathNodeType(this.entity, currentPoint.x, currentPoint.y + 1, currentPoint.z); + + if (this.entity.getPathPriority(pathnodetype) >= 0.0F) + { + j = MathHelper.floor(Math.max(1.0F, this.entity.stepHeight)); + } + + BlockPos blockpos = (new BlockPos(currentPoint.x, currentPoint.y, currentPoint.z)).down(); + double d0 = (double) currentPoint.y - (1.0D - this.blockaccess.getBlockState(blockpos).getBoundingBox(this.blockaccess, blockpos).maxY); + PathPoint pathpoint = this.getSafePoint(currentPoint.x, currentPoint.y, currentPoint.z + 1, j, d0, EnumFacing.SOUTH); + PathPoint pathpoint1 = this.getSafePoint(currentPoint.x - 1, currentPoint.y, currentPoint.z, j, d0, EnumFacing.WEST); + PathPoint pathpoint2 = this.getSafePoint(currentPoint.x + 1, currentPoint.y, currentPoint.z, j, d0, EnumFacing.EAST); + PathPoint pathpoint3 = this.getSafePoint(currentPoint.x, currentPoint.y, currentPoint.z - 1, j, d0, EnumFacing.NORTH); + + if (pathpoint != null && !pathpoint.visited && pathpoint.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint; + } + + if (pathpoint1 != null && !pathpoint1.visited && pathpoint1.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint1; + } + + if (pathpoint2 != null && !pathpoint2.visited && pathpoint2.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint2; + } + + if (pathpoint3 != null && !pathpoint3.visited && pathpoint3.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint3; + } + + boolean flag = pathpoint3 == null || pathpoint3.nodeType == PathNodeType.OPEN || pathpoint3.costMalus != 0.0F; + boolean flag1 = pathpoint == null || pathpoint.nodeType == PathNodeType.OPEN || pathpoint.costMalus != 0.0F; + boolean flag2 = pathpoint2 == null || pathpoint2.nodeType == PathNodeType.OPEN || pathpoint2.costMalus != 0.0F; + boolean flag3 = pathpoint1 == null || pathpoint1.nodeType == PathNodeType.OPEN || pathpoint1.costMalus != 0.0F; + + if (flag && flag3) + { + PathPoint pathpoint4 = this.getSafePoint(currentPoint.x - 1, currentPoint.y, currentPoint.z - 1, j, d0, EnumFacing.NORTH); + + if (pathpoint4 != null && !pathpoint4.visited && pathpoint4.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint4; + } + } + + if (flag && flag2) + { + PathPoint pathpoint5 = this.getSafePoint(currentPoint.x + 1, currentPoint.y, currentPoint.z - 1, j, d0, EnumFacing.NORTH); + + if (pathpoint5 != null && !pathpoint5.visited && pathpoint5.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint5; + } + } + + if (flag1 && flag3) + { + PathPoint pathpoint6 = this.getSafePoint(currentPoint.x - 1, currentPoint.y, currentPoint.z + 1, j, d0, EnumFacing.SOUTH); + + if (pathpoint6 != null && !pathpoint6.visited && pathpoint6.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint6; + } + } + + if (flag1 && flag2) + { + PathPoint pathpoint7 = this.getSafePoint(currentPoint.x + 1, currentPoint.y, currentPoint.z + 1, j, d0, EnumFacing.SOUTH); + + if (pathpoint7 != null && !pathpoint7.visited && pathpoint7.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint7; + } + } + + return i; + } + + @Nullable + private PathPoint getSafePoint(int x, int y, int z, int p_186332_4_, double p_186332_5_, EnumFacing facing) + { + PathPoint pathpoint = null; + BlockPos blockpos = new BlockPos(x, y, z); + BlockPos blockpos1 = blockpos.down(); + double d0 = (double) y - (1.0D - this.blockaccess.getBlockState(blockpos1).getBoundingBox(this.blockaccess, blockpos1).maxY); + + if (d0 - p_186332_5_ > 1.125D) + { + return null; + } else + { + PathNodeType pathnodetype = this.getPathNodeType(this.entity, x, y, z); + float f = this.entity.getPathPriority(pathnodetype); + double d1 = (double) this.entity.width / 2.0D; + + if (f >= 0.0F) + { + pathpoint = this.openPoint(x, y, z); + pathpoint.nodeType = pathnodetype; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + } + + if (pathnodetype == PathNodeType.WALKABLE) + { + return pathpoint; + } else + { + if (pathpoint == null && p_186332_4_ > 0 && pathnodetype != PathNodeType.FENCE && pathnodetype != PathNodeType.TRAPDOOR) + { + pathpoint = this.getSafePoint(x, y + 1, z, p_186332_4_ - 1, p_186332_5_, facing); + + if (pathpoint != null && (pathpoint.nodeType == PathNodeType.OPEN || pathpoint.nodeType == PathNodeType.WALKABLE) && this.entity.width < 1.0F) + { + double d2 = (double) (x - facing.getXOffset()) + 0.5D; + double d3 = (double) (z - facing.getZOffset()) + 0.5D; + AxisAlignedBB axisalignedbb = new AxisAlignedBB(d2 - d1, (double) y + 0.001D, d3 - d1, d2 + d1, (double) ((float) y + this.entity.height), d3 + d1); + AxisAlignedBB axisalignedbb1 = this.blockaccess.getBlockState(blockpos).getBoundingBox(this.blockaccess, blockpos); + AxisAlignedBB axisalignedbb2 = axisalignedbb.expand(0.0D, axisalignedbb1.maxY - 0.002D, 0.0D); + + if (this.entity.world.collidesWithAnyBlock(axisalignedbb2)) + { + pathpoint = null; + } + } + } + + if (pathnodetype == PathNodeType.OPEN) + { + AxisAlignedBB axisalignedbb3 = new AxisAlignedBB((double) x - d1 + 0.5D, (double) y + 0.001D, (double) z - d1 + 0.5D, (double) x + d1 + 0.5D, + (double) ((float) y + this.entity.height), (double) z + d1 + 0.5D); + + if (this.entity.world.collidesWithAnyBlock(axisalignedbb3)) + { + return null; + } + + if (this.entity.width >= 1.0F) + { + PathNodeType pathnodetype1 = this.getPathNodeType(this.entity, x, y - 1, z); + + if (pathnodetype1 == PathNodeType.BLOCKED) + { + pathpoint = this.openPoint(x, y, z); + pathpoint.nodeType = PathNodeType.WALKABLE; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + return pathpoint; + } + } + + int i = 0; + + while (y > 0 && pathnodetype == PathNodeType.OPEN) + { + --y; + + if (i++ >= this.entity.getMaxFallHeight()) + { + return null; + } + + pathnodetype = this.getPathNodeType(this.entity, x, y, z); + f = this.entity.getPathPriority(pathnodetype); + + if (pathnodetype != PathNodeType.OPEN && f >= 0.0F) + { + pathpoint = this.openPoint(x, y, z); + pathpoint.nodeType = pathnodetype; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + break; + } + + if (f < 0.0F) + { + return null; + } + } + } + + return pathpoint; + } + } + } + + @Override + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z, EntityLiving entitylivingIn, int xSize, int ySize, int zSize, boolean canBreakDoorsIn, boolean canEnterDoorsIn) + { + EnumSet enumset = EnumSet.noneOf(PathNodeType.class); + PathNodeType pathnodetype = PathNodeType.BLOCKED; + double d0 = (double) entitylivingIn.width / 2.0D; + BlockPos blockpos = new BlockPos(entitylivingIn); + + for (int i = 0; i < xSize; ++i) + { + for (int j = 0; j < ySize; ++j) + { + for (int k = 0; k < zSize; ++k) + { + int l = i + x; + int i1 = j + y; + int j1 = k + z; + PathNodeType pathnodetype1 = this.getPathNodeType(blockaccessIn, l, i1, j1); + + if (pathnodetype1 == PathNodeType.DOOR_WOOD_CLOSED && canBreakDoorsIn && canEnterDoorsIn) + { + pathnodetype1 = PathNodeType.WALKABLE; + } + + if (pathnodetype1 == PathNodeType.DOOR_OPEN && !canEnterDoorsIn) + { + pathnodetype1 = PathNodeType.BLOCKED; + } + + if (pathnodetype1 == PathNodeType.RAIL && !(blockaccessIn.getBlockState(blockpos).getBlock() instanceof BlockRailBase) + && !(blockaccessIn.getBlockState(blockpos.down()).getBlock() instanceof BlockRailBase)) + { + pathnodetype1 = PathNodeType.FENCE; + } + + if (i == 0 && j == 0 && k == 0) + { + pathnodetype = pathnodetype1; + } + + enumset.add(pathnodetype1); + } + } + } + + if (enumset.contains(PathNodeType.FENCE)) + { + return PathNodeType.FENCE; + } else + { + PathNodeType pathnodetype2 = PathNodeType.BLOCKED; + + for (PathNodeType pathnodetype3 : enumset) + { + if (entitylivingIn.getPathPriority(pathnodetype3) < 0.0F) + { + return pathnodetype3; + } + + if (entitylivingIn.getPathPriority(pathnodetype3) >= entitylivingIn.getPathPriority(pathnodetype2)) + { + pathnodetype2 = pathnodetype3; + } + } + + if (pathnodetype == PathNodeType.OPEN && entitylivingIn.getPathPriority(pathnodetype2) == 0.0F) + { + return PathNodeType.OPEN; + } else + { + return pathnodetype2; + } + } + } + + private PathNodeType getPathNodeType(EntityLiving entitylivingIn, BlockPos pos) + { + return this.getPathNodeType(entitylivingIn, pos.getX(), pos.getY(), pos.getZ()); + } + + private PathNodeType getPathNodeType(EntityLiving entitylivingIn, int x, int y, int z) + { + return this.getPathNodeType(this.blockaccess, x, y, z, entitylivingIn, this.entitySizeX, this.entitySizeY, this.entitySizeZ, this.getCanOpenDoors(), this.getCanEnterDoors()); + } + + @Override + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z) + { + PathNodeType pathnodetype = this.getPathNodeTypeRaw(blockaccessIn, x, y, z); + + if (pathnodetype == PathNodeType.OPEN && y >= 1) + { + Block block = blockaccessIn.getBlockState(new BlockPos(x, y - 1, z)).getBlock(); + PathNodeType pathnodetype1 = this.getPathNodeTypeRaw(blockaccessIn, x, y - 1, z); + pathnodetype = pathnodetype1 != PathNodeType.WALKABLE && pathnodetype1 != PathNodeType.OPEN && pathnodetype1 != PathNodeType.WATER && pathnodetype1 != PathNodeType.LAVA + ? PathNodeType.WALKABLE : PathNodeType.OPEN; + + if (pathnodetype1 == PathNodeType.DAMAGE_FIRE || block == Blocks.MAGMA) + { + pathnodetype = PathNodeType.DAMAGE_FIRE; + } + + if (pathnodetype1 == PathNodeType.DAMAGE_CACTUS) + { + pathnodetype = PathNodeType.DAMAGE_CACTUS; + } + } + + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + if (pathnodetype == PathNodeType.WALKABLE) + { + for (int j = -1; j <= 1; ++j) + { + for (int i = -1; i <= 1; ++i) + { + if (j != 0 || i != 0) + { + Block block1 = blockaccessIn.getBlockState(blockpos$pooledmutableblockpos.setPos(j + x, y, i + z)).getBlock(); + + if (block1 == Blocks.CACTUS) + { + pathnodetype = PathNodeType.DANGER_CACTUS; + } else if (block1 == Blocks.FIRE) + { + pathnodetype = PathNodeType.DANGER_FIRE; + } + } + } + } + } + + blockpos$pooledmutableblockpos.release(); + return pathnodetype; + } + + private PathNodeType getPathNodeTypeRaw(IBlockAccess p_189553_1_, int p_189553_2_, int p_189553_3_, int p_189553_4_) + { + BlockPos blockpos = new BlockPos(p_189553_2_, p_189553_3_, p_189553_4_); + IBlockState iblockstate = p_189553_1_.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + Material material = iblockstate.getMaterial(); + return material == Material.AIR ? PathNodeType.OPEN + : (block != Blocks.TRAPDOOR && block != Blocks.IRON_TRAPDOOR + && block != Blocks.WATERLILY + ? (block == Blocks.FIRE ? PathNodeType.DAMAGE_FIRE + : (block == Blocks.CACTUS ? PathNodeType.DAMAGE_CACTUS + : (block instanceof BlockDoor && material == Material.WOOD + && !((Boolean) iblockstate.getValue(BlockDoor.OPEN)).booleanValue() + ? PathNodeType.DOOR_WOOD_CLOSED + : (block instanceof BlockDoor && material == Material.IRON + && !((Boolean) iblockstate.getValue(BlockDoor.OPEN)).booleanValue() + ? PathNodeType.DOOR_IRON_CLOSED + : (block instanceof BlockDoor && ((Boolean) iblockstate.getValue(BlockDoor.OPEN)).booleanValue() ? PathNodeType.DOOR_OPEN + : (block instanceof BlockRailBase ? PathNodeType.RAIL : (!(block instanceof BlockFence) && !(block instanceof BlockWall) + && (!(block instanceof BlockFenceGate) || ((Boolean) iblockstate.getValue(BlockFenceGate.OPEN)).booleanValue()) + ? (material == Material.WATER ? PathNodeType.WATER + : (material == Material.LAVA ? PathNodeType.LAVA : (block.isPassable(p_189553_1_, blockpos) ? PathNodeType.OPEN : PathNodeType.BLOCKED))) + : PathNodeType.FENCE))))))) + : PathNodeType.TRAPDOOR); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/event/EventHandlerVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/event/EventHandlerVenus.java new file mode 100644 index 00000000..5ba30c2a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/event/EventHandlerVenus.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.event; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.entity.ILaserTrackableFast; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.relauncher.Side; + +public class EventHandlerVenus +{ + + @SubscribeEvent + public void onWorldTick(TickEvent.WorldTickEvent event) + { + if (event.side == Side.SERVER && event.phase == Phase.START) + { + ArrayList list = new ArrayList<>(event.world.loadedEntityList); + for (Entity e : list) + { + if (e.ticksExisted % 20 == 1 && e instanceof EntityLivingBase) + { + if (event.world.isMaterialInBB(e.getEntityBoundingBox().grow(-0.1D, -0.4D, -0.1D), VenusModule.acidMaterial)) + { + e.attackEntityFrom(DamageSourceGC.acid, 3.0F); + } + } + } + } + } + + @SubscribeEvent + public void onThermalArmorEvent(GCPlayerHandler.ThermalArmorEvent event) + { + if (event.armorStack.isEmpty()) + { + event.setArmorAddResult(GCPlayerHandler.ThermalArmorEvent.ArmorAddResult.REMOVE); + } else if (event.armorStack.getItem() == VenusItems.thermalPaddingTier2 && event.armorStack.getItemDamage() == event.armorIndex) + { + event.setArmorAddResult(GCPlayerHandler.ThermalArmorEvent.ArmorAddResult.ADD); + } + } + + @SubscribeEvent + public void onEntitySpawned(EntityJoinWorldEvent event) + { + if (event.getEntity() instanceof ILaserTrackableFast) + { + for (TileEntity tile : event.getEntity().getEntityWorld().loadedTileEntityList) + { + if (tile instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile).trackEntity(event.getEntity()); + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerCrashedProbe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerCrashedProbe.java new file mode 100644 index 00000000..4d3a1369 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerCrashedProbe.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.inventory; + +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerCrashedProbe extends Container +{ + + private TileEntityCrashedProbe tileEntity; + + public ContainerCrashedProbe(InventoryPlayer par1InventoryPlayer, TileEntityCrashedProbe tileEntityCrashedProbe) + { + this.tileEntity = tileEntityCrashedProbe; + + for (int i = 0; i < 6; ++i) + { + this.addSlotToContainer(new Slot(tileEntityCrashedProbe, i, 35 + i * 18, 18)); + } + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 52 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 110)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerGeothermal.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerGeothermal.java new file mode 100644 index 00000000..b606383a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerGeothermal.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerGeothermal extends Container +{ + + private TileEntityGeothermalGenerator tileEntity; + + public ContainerGeothermal(InventoryPlayer par1InventoryPlayer, TileEntityGeothermalGenerator geothermalGenerator) + { + this.tileEntity = geothermalGenerator; + this.addSlotToContainer(new SlotSpecific(geothermalGenerator, 0, 152, 83, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 51 + 68 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 61 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerLaserTurret.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerLaserTurret.java new file mode 100644 index 00000000..804e9c0c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerLaserTurret.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerLaserTurret extends Container +{ + + private TileEntityLaserTurret tileEntity; + + public ContainerLaserTurret(InventoryPlayer par1InventoryPlayer, TileEntityLaserTurret laserTurret) + { + this.tileEntity = laserTurret; + this.addSlotToContainer(new SlotSpecific(laserTurret, 0, 82, 103, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 69 + 68 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 79 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerSolarArrayController.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerSolarArrayController.java new file mode 100644 index 00000000..83258b2f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerSolarArrayController.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerSolarArrayController extends Container +{ + + private TileEntitySolarArrayController tileEntity; + + public ContainerSolarArrayController(InventoryPlayer par1InventoryPlayer, TileEntitySolarArrayController solarGen) + { + this.tileEntity = solarGen; + this.addSlotToContainer(new SlotSpecific(solarGen, 0, 152, 91, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 59 + 68 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 69 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBasicVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBasicVenus.java new file mode 100644 index 00000000..83d39b3f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBasicVenus.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemDesc; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBasicVenus extends ItemDesc implements ISortableItem, GCRarity +{ + + public static String[] names = + {"shield_controller", "ingot_lead", "radioisotope_core", "thermal_fabric", "solar_dust", "solar_module_2", "thin_solar_wafer"}; + + public ItemBasicVenus(String name) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(name); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemBasicVenus.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemBasicVenus.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 0: + return EnumSortCategoryItem.GEAR; + case 1: + return EnumSortCategoryItem.INGOT; + default: + return EnumSortCategoryItem.GENERAL; + } + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP && itemStack.getItemDamage() == 0) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(10); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(10, itemStack.copy()); + itemStack.setCount(0); + } + } + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + + @Override + public String getShiftDescription(int meta) + { + if (meta == 0) + { + return GCCoreUtil.translate("item.shield_controller.description"); + } + + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return meta == 0; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBatteryAtomic.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBatteryAtomic.java new file mode 100644 index 00000000..af3c6aed --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBatteryAtomic.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class ItemBatteryAtomic extends ItemElectricBase implements ISortableItem, GCRarity +{ + + public ItemBatteryAtomic(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + protected void setMaxTransfer() + { + this.transferMax = 7; + } + + @Override + public int getTierGC(ItemStack itemStack) + { + return 2; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.infinite_item.desc")); + tooltip.add(EnumColor.ORANGE + GCCoreUtil.translate("gui.message.low_energy_output.name")); + } + + @Override + public float getElectricityStored(ItemStack itemStack) + { + return this.getMaxElectricityStored(itemStack); + } + + @Override + public void setElectricity(ItemStack itemStack, float joules) + { + } + + @Override + public float getMaxElectricityStored(ItemStack itemStack) + { + return Float.POSITIVE_INFINITY; + } + + @Override + public float getTransfer(ItemStack itemStack) + { + return 0.0F; + } + + @Override + public float recharge(ItemStack theItem, float energy, boolean doReceive) + { + return 0F; + } + + @Override + public float discharge(ItemStack theItem, float energy, boolean doTransfer) + { + return super.discharge(theItem, energy, doTransfer); + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList par3List) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + par3List.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockBasicVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockBasicVenus.java new file mode 100644 index 00000000..d24d7421 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockBasicVenus.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockBasicVenus extends ItemBlock implements GCRarity +{ + + public ItemBlockBasicVenus(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name; + + switch (itemstack.getItemDamage()) + { + default: + name = BlockBasicVenus.EnumBlockBasicVenus.values()[itemstack.getItemDamage()].getName(); + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockTorchWeb.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockTorchWeb.java new file mode 100644 index 00000000..56ff35a3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockTorchWeb.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTorchWeb; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemBlockTorchWeb extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockTorchWeb(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockTorchWeb.EnumWebType.values()[itemstack.getItemDamage()].getName(); + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (stack.getItemDamage() == 1) + { + tooltip.add(GCCoreUtil.translate("tile.web_torch.web_torch_1.description")); + } + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemKeyVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemKeyVenus.java new file mode 100644 index 00000000..3d018cd8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemKeyVenus.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IKeyItem; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemKeyVenus extends Item implements IKeyItem, ISortableItem, GCRarity +{ + + public ItemKeyVenus(String name) + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(name); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return "item.key.t3"; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getTier(ItemStack keyStack) + { + return 3; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.KEYS; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemThermalPaddingTier2.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemThermalPaddingTier2.java new file mode 100644 index 00000000..f106197b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemThermalPaddingTier2.java @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IItemThermal; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemThermalPaddingTier2 extends Item implements IItemThermal, ISortableItem, GCRarity +{ + + public static String[] names = + {"thermal_helm_t2", "thermal_chestplate_t2", "thermal_leggings_t2", "thermal_boots_t2"}; + + public ItemThermalPaddingTier2(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(GCCoreUtil.translate("item.tier2.desc")); + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList subItems) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemThermalPaddingTier2.names.length; i++) + { + subItems.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemThermalPaddingTier2.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getThermalStrength() + { + return 2; + } + + @Override + public boolean isValidForSlot(ItemStack stack, int armorSlot) + { + return stack.getItemDamage() == armorSlot; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(6); + ItemStack gear1 = stats.getExtendedInventory().getStackInSlot(7); + ItemStack gear2 = stats.getExtendedInventory().getStackInSlot(8); + ItemStack gear3 = stats.getExtendedInventory().getStackInSlot(9); + + if (itemStack.getItemDamage() == 0) + { + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(6, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 1) + { + if (gear1.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(7, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 2) + { + if (gear2.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(8, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 3) + { + if (gear3.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(9, itemStack.copy()); + itemStack.setCount(0); + } + } + } + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemVolcanicPickaxe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemVolcanicPickaxe.java new file mode 100644 index 00000000..ccecce77 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemVolcanicPickaxe.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCommandBlock; +import net.minecraft.block.BlockStructure; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemPickaxe; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemVolcanicPickaxe extends ItemPickaxe implements ISortableItem, IShiftDescription, GCRarity +{ + + public ItemVolcanicPickaxe(String assetName) + { + super(VenusItems.TOOL_VOLCANIC); + this.setTranslationKey(assetName); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List info, ITooltipFlag flagIn) + { + if (this.showDescription(stack.getItemDamage())) + { + if (ClientUtil.isKeyPressed(Minecraft.getMinecraft().gameSettings.keyBindSneak)) + { + info.addAll(FMLClientHandler.instance().getClient().fontRenderer.listFormattedStringToWidth(this.getShiftDescription(stack.getItemDamage()), 150)); + } else + { + info.add(GCCoreUtil.translateWithFormat("item_desc.shift.name", GameSettings.getKeyDisplayString(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode()))); + } + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + boolean ret = super.onBlockDestroyed(stack, worldIn, state, pos, entityLiving); + + if (!(entityLiving instanceof EntityPlayer) || worldIn.isRemote) + { + return ret; + } + + EntityPlayer player = (EntityPlayer) entityLiving; + EnumFacing facing = entityLiving.getHorizontalFacing(); + + if (entityLiving.rotationPitch < -45.0F) + { + facing = EnumFacing.UP; + } else if (entityLiving.rotationPitch > 45.0F) + { + facing = EnumFacing.DOWN; + } + + boolean yAxis = facing.getAxis() == EnumFacing.Axis.Y; + boolean xAxis = facing.getAxis() == EnumFacing.Axis.X; + + for (int i = -1; i <= 1; ++i) + { + for (int j = -1; j <= 1 && !stack.isEmpty(); ++j) + { + if (i == 0 && j == 0) + { + continue; + } + + BlockPos pos1; + if (yAxis) + { + pos1 = pos.add(i, 0, j); + } else if (xAxis) + { + pos1 = pos.add(0, i, j); + } else + { + pos1 = pos.add(i, j, 0); + } + + // :Replicate logic of + // PlayerInteractionManager.tryHarvestBlock(pos1) + IBlockState state1 = worldIn.getBlockState(pos1); + float f = state1.getBlockHardness(worldIn, pos1); + if (f >= 0F) + { + BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(worldIn, pos1, state1, player); + MinecraftForge.EVENT_BUS.post(event); + if (!event.isCanceled()) + { + Block block = state1.getBlock(); + if ((block instanceof BlockCommandBlock || block instanceof BlockStructure) && !player.canUseCommandBlock()) + { + worldIn.notifyBlockUpdate(pos1, state1, state1, 3); + continue; + } + TileEntity tileentity = worldIn.getTileEntity(pos1); + if (tileentity != null) + { + Packet pkt = tileentity.getUpdatePacket(); + if (pkt != null) + { + ((EntityPlayerMP) player).connection.sendPacket(pkt); + } + } + + boolean canHarvest = block.canHarvestBlock(worldIn, pos1, player); + boolean destroyed = block.removedByPlayer(state1, worldIn, pos1, player, canHarvest); + if (destroyed) + { + block.onPlayerDestroy(worldIn, pos1, state1); + } + if (canHarvest && destroyed) + { + block.harvestBlock(worldIn, player, pos1, state1, tileentity, stack); + stack.damageItem(1, player); + } + } + } + } + } + + return ret; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate("item.volcanic_pickaxe.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/network/PacketSimpleVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/network/PacketSimpleVenus.java new file mode 100644 index 00000000..5e644658 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/network/PacketSimpleVenus.java @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.network; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketBase; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PacketSimpleVenus extends PacketBase +{ + + public static enum EnumSimplePacketVenus + { + + // SERVER + S_UPDATE_ADVANCED_GUI(Side.SERVER, Integer.class, BlockPos.class, Integer.class), + S_OPEN_LASER_TURRET_GUI(Side.SERVER, BlockPos.class), + S_MODIFY_LASER_TARGET(Side.SERVER, Integer.class, BlockPos.class, String.class); + // CLIENT + + private Side targetSide; + private Class[] decodeAs; + + private EnumSimplePacketVenus(Side targetSide, Class... decodeAs) + { + this.targetSide = targetSide; + this.decodeAs = decodeAs; + } + + public Side getTargetSide() + { + return this.targetSide; + } + + public Class[] getDecodeClasses() + { + return this.decodeAs; + } + } + + private EnumSimplePacketVenus type; + private List data; + + public PacketSimpleVenus() + { + super(); + } + + public PacketSimpleVenus(EnumSimplePacketVenus packetType, int dimID, Object[] data) + { + this(packetType, dimID, Arrays.asList(data)); + } + + public PacketSimpleVenus(EnumSimplePacketVenus packetType, int dimID, List data) + { + super(dimID); + + if (packetType.getDecodeClasses().length != data.size()) + { + GalacticraftPlanets.logger.info("Venus Simple Packet found data length different than packet type: " + packetType.name()); + } + + this.type = packetType; + this.data = data; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type.ordinal()); + + try + { + NetworkUtil.encodeData(buffer, this.data); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = EnumSimplePacketVenus.values()[buffer.readInt()]; + + if (this.type.getDecodeClasses().length > 0) + { + this.data = NetworkUtil.decodeData(this.type.getDecodeClasses(), buffer); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void handleClientSide(EntityPlayer player) + { + + } + + @Override + public void handleServerSide(EntityPlayer player) + { + switch (this.type) + { + case S_UPDATE_ADVANCED_GUI: + TileEntity tile0 = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.blacklistMode = ((Integer) this.data.get(2)) != 0; + } + break; + case 1: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.targetMeteors = ((Integer) this.data.get(2)) != 0; + } + break; + case 2: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.alwaysIgnoreSpaceRace = ((Integer) this.data.get(2)) != 0; + } + break; + case 3: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.priorityClosest = ((Integer) this.data.get(2)); + } + break; + case 4: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.priorityLowestHealth = ((Integer) this.data.get(2)); + } + break; + case 5: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.priorityHighestHealth = ((Integer) this.data.get(2)); + } + break; + default: + break; + } + break; + case S_OPEN_LASER_TURRET_GUI: + BlockPos pos = (BlockPos) this.data.get(0); + player.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, player.world, pos.getX(), pos.getY(), pos.getZ()); + break; + case S_MODIFY_LASER_TARGET: + TileEntity tile1 = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile1 instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile1).addPlayer((String) this.data.get(2)); + } + break; + case 1: + if (tile1 instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile1).addEntity(new ResourceLocation((String) this.data.get(2))); + } + break; + case 2: + if (tile1 instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile1).removePlayer((String) this.data.get(2)); + } + break; + case 3: + if (tile1 instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile1).removeEntity(new ResourceLocation((String) this.data.get(2))); + } + break; + } + break; + default: + break; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/recipe/RecipeManagerVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/recipe/RecipeManagerVenus.java new file mode 100644 index 00000000..f66ac078 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/recipe/RecipeManagerVenus.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.recipe; + +import java.util.Arrays; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraftforge.oredict.OreDictionary; + +public class RecipeManagerVenus +{ + + public static void loadCompatibilityRecipes() + { + } + + public static void addUniversalRecipes() + { + OreDictionary.registerOre("ingotLead", new ItemStack(VenusItems.basicItem, 1, 1)); + OreDictionary.registerOre("waferSolarThin", new ItemStack(VenusItems.basicItem, 1, 6)); + + // Smelting + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 6), new ItemStack(GCItems.basicItem, 1, 5), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 7), new ItemStack(GCItems.basicItem, 1, 3), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 8), new ItemStack(VenusItems.basicItem, 1, 1), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 9), new ItemStack(Items.QUARTZ), 0.2F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 11), new ItemStack(GCItems.basicItem, 1, 4), 0.5F); + + ItemStack solarPanels = new ItemStack(VenusItems.basicItem, 3, 6); + ItemStack silicon = new ItemStack(GCItems.basicItem, 1, 2); + CircuitFabricatorRecipes.addRecipe(solarPanels, Arrays.asList(new ItemStack(Items.DIAMOND), silicon, silicon, new ItemStack(Items.REDSTONE), new ItemStack(VenusItems.basicItem, 1, 4))); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tick/VenusTickHandlerServer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tick/VenusTickHandlerServer.java new file mode 100644 index 00000000..58f1fa1a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tick/VenusTickHandlerServer.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tick; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.planets.venus.tile.SolarModuleNetwork; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarTransmitter; +import net.minecraft.server.MinecraftServer; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; + +public class VenusTickHandlerServer +{ + + private static List solarModuleNetworks = Lists.newArrayList(); + public static LinkedList solarTransmitterUpdates = new LinkedList<>(); + + public static void addSolarNetwork(SolarModuleNetwork network) + { + solarModuleNetworks.add(network); + } + + public static void removeSolarNetwork(SolarModuleNetwork network) + { + solarModuleNetworks.remove(network); + } + + @SubscribeEvent + public void onServerTick(TickEvent.ServerTickEvent event) + { + MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); + // Prevent issues when clients switch to LAN servers + if (server == null) + { + return; + } + + if (event.phase == Phase.END) + { + for (SolarModuleNetwork network : new ArrayList<>(solarModuleNetworks)) + { + if (network.getTransmitters().isEmpty()) + { + solarModuleNetworks.remove(network); + } + } + + int maxPasses = 10; + while (!solarTransmitterUpdates.isEmpty()) + { + LinkedList pass = new LinkedList<>(); + pass.addAll(solarTransmitterUpdates); + solarTransmitterUpdates.clear(); + for (TileEntitySolarTransmitter newTile : pass) + { + if (!newTile.isInvalid()) + { + newTile.refresh(); + } + } + + if (--maxPasses <= 0) + { + break; + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/NetworkFinderSolar.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/NetworkFinderSolar.java new file mode 100644 index 00000000..35243cda --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/NetworkFinderSolar.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class NetworkFinderSolar +{ + + public World worldObj; + public BlockVec3 start; + private BlockVec3 toIgnore; + + private Set iterated = new HashSet<>(); + public List found = new LinkedList<>(); + + public NetworkFinderSolar(World world, BlockVec3 location, BlockVec3 ignore) + { + worldObj = world; + start = location; + + toIgnore = ignore; + } + + private void loopAll(int x, int y, int z, int dirIn) + { + BlockVec3 obj = null; + for (int dir = 0; dir < 6; dir++) + { + if (dir == dirIn) + { + continue; + } + switch (dir) + { + case 0: + obj = new BlockVec3(x, y - 1, z); + break; + case 1: + obj = new BlockVec3(x, y + 1, z); + break; + case 2: + obj = new BlockVec3(x, y, z - 1); + break; + case 3: + obj = new BlockVec3(x, y, z + 1); + break; + case 4: + obj = new BlockVec3(x - 1, y, z); + break; + case 5: + obj = new BlockVec3(x + 1, y, z); + break; + } + + if (!iterated.contains(obj)) + { + iterated.add(obj); + + TileEntity tileEntity = worldObj.getTileEntity(new BlockPos(obj.x, obj.y, obj.z)); + + if (tileEntity instanceof ITransmitter && ((ITransmitter) tileEntity).getNetworkType() == NetworkType.SOLAR_MODULE) + { + found.add((ITransmitter) tileEntity); + loopAll(obj.x, obj.y, obj.z, dir ^ 1); + } + } + } + } + + public List exploreNetwork() + { + TileEntity tile = start.getTileEntity(worldObj); + if (tile instanceof ITransmitter && ((ITransmitter) tile).getNetworkType() == NetworkType.SOLAR_MODULE) + { + iterated.add(start); + iterated.add(toIgnore); + found.add((ITransmitter) tile); + loopAll(start.x, start.y, start.z, 6); + } + + return found; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/SolarModuleNetwork.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/SolarModuleNetwork.java new file mode 100644 index 00000000..30b82277 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/SolarModuleNetwork.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import com.google.common.collect.Lists; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +/** + * A universal network that works with multiple energy systems. + * + * @author radfast, micdoodle8, Calclavia, Aidancbrady + */ +public class SolarModuleNetwork implements IGridNetwork +{ + + private final Set transmitters = new HashSet<>(); + + public SolarModuleNetwork() + { + } + + public SolarModuleNetwork(Collection toMerge) + { + for (SolarModuleNetwork network : toMerge) + { + if (network != null) + { + for (ITransmitter transmitter : network.transmitters) + { + transmitter.setNetwork(this); + this.transmitters.add(transmitter); + } + network.unregister(); + } + } + + this.register(); + } + + /** + * Refresh validity of each conductor in the network + */ + public void refreshWithChecks() + { + Iterator it = this.transmitters.iterator(); + while (it.hasNext()) + { + ITransmitter transmitter = it.next(); + + if (transmitter == null) + { + it.remove(); + continue; + } + + TileEntity tile = (TileEntity) transmitter; + World world = tile.getWorld(); + // Remove any transmitters in unloaded chunks + if (tile.isInvalid() || world == null || !world.isBlockLoaded(tile.getPos())) + { + it.remove(); + continue; + } + + if (transmitter != world.getTileEntity(tile.getPos())) + { + it.remove(); + continue; + } + + if (transmitter.getNetwork() != this) + { + transmitter.setNetwork(this); + transmitter.onNetworkChanged(); + } + } + } + + @Override + public void refresh() + { + Iterator it = this.transmitters.iterator(); + while (it.hasNext()) + { + ITransmitter conductor = it.next(); + + if (conductor == null) + { + it.remove(); + continue; + } + + TileEntity tile = (TileEntity) conductor; + World world = tile.getWorld(); + // Remove any transmitters in unloaded chunks + if (tile.isInvalid() || world == null) + { + it.remove(); + continue; + } + + if (conductor.getNetwork() != this) + { + conductor.setNetwork(this); + conductor.onNetworkChanged(); + } + } + } + + @Override + public SolarModuleNetwork merge(SolarModuleNetwork network) + { + if (network != null && network != this) + { + SolarModuleNetwork newNetwork = new SolarModuleNetwork(Lists.newArrayList(this, network)); + newNetwork.refresh(); + return newNetwork; + } + + return this; + } + + private void destroy() + { + this.transmitters.clear(); + } + + @Override + public void split(ITransmitter splitPoint) + { + if (splitPoint instanceof TileEntity) + { + this.getTransmitters().remove(splitPoint); + splitPoint.setNetwork(null); + + // If the size of the residual network is 1, it should simply be + // preserved + if (this.getTransmitters().size() > 1) + { + World world = ((TileEntity) splitPoint).getWorld(); + + if (this.getTransmitters().size() > 0) + { + ITransmitter[] nextToSplit = new ITransmitter[6]; + boolean[] toDo = + {true, true, true, true, true, true}; + TileEntity tileEntity; + + for (int j = 0; j < 6; j++) + { + switch (j) + { + case 0: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().down()); + break; + case 1: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().up()); + break; + case 2: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().north()); + break; + case 3: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().south()); + break; + case 4: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().west()); + break; + case 5: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().east()); + break; + default: + // Not reachable, only to prevent uninitiated + // compile errors + tileEntity = null; + break; + } + + if (tileEntity instanceof ITransmitter) + { + nextToSplit[j] = (ITransmitter) tileEntity; + } else + { + toDo[j] = false; + } + } + + for (int i1 = 0; i1 < 6; i1++) + { + if (toDo[i1]) + { + ITransmitter connectedBlockA = nextToSplit[i1]; + NetworkFinderSolar finder = new NetworkFinderSolar(world, new BlockVec3((TileEntity) connectedBlockA), new BlockVec3((TileEntity) splitPoint)); + List partNetwork = finder.exploreNetwork(); + + // Mark any others still to do in the nextToSplit + // array which are connected to this, as dealt with + for (int i2 = i1 + 1; i2 < 6; i2++) + { + ITransmitter connectedBlockB = nextToSplit[i2]; + + if (toDo[i2]) + { + if (partNetwork.contains(connectedBlockB)) + { + toDo[i2] = false; + } + } + } + + // Now make the new network from partNetwork + SolarModuleNetwork newNetwork = new SolarModuleNetwork(); + newNetwork.getTransmitters().addAll(partNetwork); + newNetwork.refreshWithChecks(); + newNetwork.register(); + } + } + + this.destroy(); + } + } + // Splitting a 1-block network leaves nothing + else if (this.getTransmitters().size() == 0) + { + this.destroy(); + } + } + + if (this.transmitters.isEmpty()) + { + this.unregister(); + } + } + + public void register() + { + GalacticraftPlanets.proxy.registerNetwork(this); + } + + public void unregister() + { + GalacticraftPlanets.proxy.unregisterNetwork(this); + } + + public void addTransmitter(ITransmitter transmitter) + { + this.transmitters.add(transmitter); + this.refresh(); + } + + public void removeTransmitter(ITransmitter transmitter) + { + this.transmitters.remove(transmitter); + } + + @Override + public Set getTransmitters() + { + return transmitters; + } + + @Override + public String toString() + { + return "SolarModuleNetwork[" + this.hashCode() + "|Wires:" + this.getTransmitters().size() + "]"; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityCrashedProbe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityCrashedProbe.java new file mode 100644 index 00000000..7a2b392a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityCrashedProbe.java @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.tile.TileEntityInventory; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTable; + +public class TileEntityCrashedProbe extends TileEntityInventory +{ + + private boolean hasCoreToDrop; + protected ResourceLocation lootTable; + protected long lootTableSeed; + + public TileEntityCrashedProbe() + { + super("container.crashed_probe.name"); + inventory = NonNullList.withSize(6, ItemStack.EMPTY); + } + + protected void fillWithLoot(EntityPlayer player) + { + if (this.lootTable != null) + { + LootTable loottable = this.world.getLootTableManager().getLootTableFromLocation(this.lootTable); + this.lootTable = null; + Random random; + + if (this.lootTableSeed == 0L) + { + random = new Random(); + } else + { + random = new Random(this.lootTableSeed); + } + + LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer) this.world); + + if (player != null) + { + lootcontext$builder.withLuck(player.getLuck()); + } + + loottable.fillInventory(this, random, lootcontext$builder.build()); + } + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (nbt.hasKey("ctd")) + { + this.hasCoreToDrop = nbt.getBoolean("ctd"); + } else + { + this.hasCoreToDrop = true; // Legacy compatibility with worlds + // generated before this key used + } + + if (!this.checkLootAndRead(nbt)) + { + this.inventory = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.getInventory()); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("ctd", this.hasCoreToDrop); + + if (!this.checkLootAndWrite(nbt)) + { + ItemStackHelper.saveAllItems(nbt, this.getInventory()); + } + return nbt; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public ItemStack getStackInSlot(int slot) + { + this.fillWithLoot(null); + return super.getStackInSlot(slot); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + this.fillWithLoot(null); + return super.decrStackSize(index, count); + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + this.fillWithLoot(null); + return super.removeStackFromSlot(index); + } + + @Override + public boolean isEmpty() + { + this.fillWithLoot(null); + return super.isEmpty(); + } + + @Override + public void clear() + { + this.fillWithLoot(null); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } + + public void setDropCore() + { + this.hasCoreToDrop = true; + } + + public boolean getDropCore() + { + return this.hasCoreToDrop; + } + + protected boolean checkLootAndRead(NBTTagCompound compound) + { + if (compound.hasKey("LootTable", 8)) + { + this.lootTable = new ResourceLocation(compound.getString("LootTable")); + this.lootTableSeed = compound.getLong("LootTableSeed"); + return true; + } else + { + return false; + } + } + + protected boolean checkLootAndWrite(NBTTagCompound compound) + { + if (this.lootTable != null) + { + compound.setString("LootTable", this.lootTable.toString()); + + if (this.lootTableSeed != 0L) + { + compound.setLong("LootTableSeed", this.lootTableSeed); + } + + return true; + } else + { + return false; + } + } + + public void setLootTable(ResourceLocation lootTable, long lootTableSeed) + { + this.lootTable = lootTable; + this.lootTableSeed = lootTableSeed; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityDungeonSpawnerVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityDungeonSpawnerVenus.java new file mode 100644 index 00000000..af6c26cc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityDungeonSpawnerVenus.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntitySpiderQueen; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.SoundCategory; + +public class TileEntityDungeonSpawnerVenus extends TileEntityDungeonSpawner +{ + + public TileEntityDungeonSpawnerVenus() + { + super(EntitySpiderQueen.class); + } + + @Override + public List> getDisabledCreatures() + { + List> list = new ArrayList>(); + list.add(EntityEvolvedSkeleton.class); + list.add(EntityEvolvedZombie.class); + list.add(EntityEvolvedSpider.class); + return list; + } + + @Override + public void playSpawnSound(Entity entity) + { + this.world.playSound(null, entity.posX, entity.posY, entity.posZ, GCSounds.scaryScape, SoundCategory.AMBIENT, 9.0F, 1.4F); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityGeothermalGenerator.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityGeothermalGenerator.java new file mode 100644 index 00000000..9e611ff5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityGeothermalGenerator.java @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.EnumSet; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockGeothermalGenerator; +import micdoodle8.mods.miccore.Annotations; +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; + +public class TileEntityGeothermalGenerator extends TileBaseUniversalElectricalSource implements IInventoryDefaults, ISidedInventory, IConnector, IDisableableMachine +{ + + public static final int MAX_GENERATE_GJ_PER_TICK = 200; + public static final int MIN_GENERATE_GJ_PER_TICK = 30; + + private boolean validSpout; + + @Annotations.NetworkedField(targetSide = Side.CLIENT) public boolean disabled = false; + @Annotations.NetworkedField(targetSide = Side.CLIENT) public int disableCooldown = 0; + + @Annotations.NetworkedField(targetSide = Side.CLIENT) public int generateWatts = 0; + + public TileEntityGeothermalGenerator() + { + super("container.geothermal_generator.name"); + this.storage.setMaxExtract(TileEntitySolar.MAX_GENERATE_WATTS); + this.storage.setMaxReceive(TileEntitySolar.MAX_GENERATE_WATTS); + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + this.receiveEnergyGC(null, this.generateWatts, false); + } + + super.update(); + + if (this.ticks % 20 == 0) + { + BlockPos below = this.getPos().down(); + IBlockState stateBelow = this.world.getBlockState(below); + + boolean lastValidSpout = this.validSpout; + this.validSpout = false; + if (stateBelow.getBlock() == VenusBlocks.spout) + { + BlockPos pos1 = below.down(); + for (; this.getPos().getY() - pos1.getY() < 20; pos1 = pos1.down()) + { + IBlockState state = this.world.getBlockState(pos1); + if (state.getBlock() == VenusModule.sulphuricAcid.getBlock()) + { + this.validSpout = true; + break; + } else if (!state.getBlock().isAir(this.world.getBlockState(pos1), this.world, pos1)) + { + // Not valid + break; + } + } + } + + if (this.world.isRemote && this.validSpout != lastValidSpout) + { + // Update active texture + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + } + } + + if (!this.world.isRemote) + { + this.recharge(this.getInventory().get(0)); + + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + + this.generateWatts = Math.min(Math.max(this.getGenerate(), 0), TileEntityGeothermalGenerator.MAX_GENERATE_GJ_PER_TICK); + } else + { + if (this.generateWatts > 0 && this.ticks % ((int) ((float) MAX_GENERATE_GJ_PER_TICK / (this.generateWatts + 1)) * 5 + 1) == 0) + { + double posX = pos.getX() + 0.5; + double posY = pos.getY() + 1.0; + double posZ = pos.getZ() + 0.5; + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX - 0.25, posY, posZ - 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX - 0.25, posY, posZ), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX - 0.25, posY, posZ + 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX, posY, posZ - 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX, posY, posZ), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX, posY, posZ + 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX + 0.25, posY, posZ - 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX + 0.25, posY, posZ), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX + 0.25, posY, posZ + 0.25), new Vector3(0.0, 0.025, 0.0)); + } + } + + this.produce(); + } + + private int getGenerate() + { + if (this.getDisabled(0)) + { + return 0; + } + + if (!this.validSpout) + { + return 0; + } + + int diff = TileEntityGeothermalGenerator.MAX_GENERATE_GJ_PER_TICK - TileEntityGeothermalGenerator.MIN_GENERATE_GJ_PER_TICK; + return (int) Math.floor((Math.sin(this.ticks / 50.0F) * 0.5F + 0.5F) * diff + TileEntityGeothermalGenerator.MIN_GENERATE_GJ_PER_TICK); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + + return direction == this.getElectricOutputDirection(); + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockGeothermalGenerator) + { + return state.getValue(BlockGeothermalGenerator.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(byIndex().rotateY()); + } + + @Override + public EnumFacing getElectricOutputDirection() + { + return byIndex().rotateY(); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + if (this.disabled != disabled && this.world.isRemote) + { + // Update active texture + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + } + + this.disabled = disabled; + this.disableCooldown = 20; + } + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC() * i / this.getMaxEnergyStoredGC()); + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + public boolean hasValidSpout() + { + return validSpout; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityLaserTurret.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityLaserTurret.java new file mode 100644 index 00000000..ed728e37 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityLaserTurret.java @@ -0,0 +1,862 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Lists; +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.ILaserTrackableFast; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineTiered; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockLaserTurret; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityLaserTurret extends TileBaseElectricBlockWithInventory implements IMultiBlock, ISidedInventory, IMachineSides +{ + + private final float RANGE = 15.0F; + private final float METEOR_RANGE = 90.0F; + private List tracked = Lists.newArrayList(); + private List players = Lists.newArrayList(); // Can be whitelist or + // blacklist + private List entities = Lists.newArrayList(); // Can be + // whitelist + // or + // blacklist + private boolean initialisedMulti = false; + private AxisAlignedBB renderAABB; + + @NetworkedField(targetSide = Side.CLIENT) public boolean active = false; + @NetworkedField(targetSide = Side.CLIENT) public int targettedEntity = -1; + @NetworkedField(targetSide = Side.CLIENT) public int chargeLevel = 0; + @NetworkedField(targetSide = Side.CLIENT) public boolean blacklistMode = false; + @NetworkedField(targetSide = Side.CLIENT) public boolean targetMeteors = true; + @NetworkedField(targetSide = Side.CLIENT) public boolean alwaysIgnoreSpaceRace = true; + @NetworkedField(targetSide = Side.CLIENT) public int priorityClosest = 1; + @NetworkedField(targetSide = Side.CLIENT) public int priorityLowestHealth = 2; + @NetworkedField(targetSide = Side.CLIENT) public int priorityHighestHealth = 3; + + private UUID ownerUUID = null; + private String ownerName = null; + private SpaceRace ownerSpaceRace = null; + + @SideOnly(Side.CLIENT) public float pitch; + @SideOnly(Side.CLIENT) public float yaw; + @SideOnly(Side.CLIENT) public float targetPitch; + @SideOnly(Side.CLIENT) public float targetYaw; + public int timeSinceShot = -1; // Cannot initialise client-only fields + // (causes a server crash on constructing the + // object) + + public TileEntityLaserTurret() + { + super("tile.laser_turret.name"); + inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void validate() + { + super.validate(); + + this.setOwnerUUID(this.ownerUUID); + } + + public void setOwnerSpaceRace(SpaceRace spaceRace) + { + this.ownerSpaceRace = spaceRace; + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + if (!this.world.isRemote) + { + networkedList.add(players.size()); + networkedList.addAll(players); + networkedList.add(entities.size()); + for (ResourceLocation res : entities) + { + networkedList.add(res.toString()); + } + networkedList.add(ownerUUID != null); + if (ownerUUID != null) + { + networkedList.add(ownerUUID.getMostSignificantBits()); + networkedList.add(ownerUUID.getLeastSignificantBits()); + } + } + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + if (this.world.isRemote) + { + players.clear(); + int playerSize = dataStream.readInt(); + for (int i = 0; i < playerSize; ++i) + { + players.add(ByteBufUtils.readUTF8String(dataStream)); + } + entities.clear(); + int entitySize = dataStream.readInt(); + for (int i = 0; i < entitySize; ++i) + { + entities.add(new ResourceLocation(ByteBufUtils.readUTF8String(dataStream))); + } + if (dataStream.readBoolean()) + { + ownerUUID = new UUID(dataStream.readLong(), dataStream.readLong()); + } + } + } + + public void addPlayer(String player) + { + players.add(player); + } + + public void addEntity(ResourceLocation entity) + { + entities.add(entity); + } + + public void removePlayer(String player) + { + for (int i = 0; i < players.size(); ++i) + { + if (players.get(i).equals(player)) + { + players.remove(i--); + } + } + } + + public void removeEntity(ResourceLocation entity) + { + for (int i = 0; i < entities.size(); ++i) + { + if (entities.get(i).equals(entity)) + { + entities.remove(i--); + } + } + } + + public List getPlayers() + { + return players; + } + + public List getEntities() + { + return entities; + } + + @Override + public double getPacketRange() + { + return 25.0D; + } + + public void trackEntity(Entity entity) + { + if (!tracked.contains(entity)) + tracked.add(entity); + } + + private Entity updateTarget() + { + List list = Lists.newArrayList(); + if (storage.getEnergyStoredGC() > 1000 && !this.getDisabled(0) && !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + for (int i = 0; i < tracked.size(); ++i) + { + Entity e = tracked.get(i); + if (e.isDead) + { + tracked.remove(i--); + } else + { + boolean shouldTarget = !this.blacklistMode; + if (e instanceof EntityPlayer) + { + EntityPlayer toTargetPlayer = (EntityPlayer) e; + if (this.alwaysIgnoreSpaceRace + && (toTargetPlayer.getUniqueID().equals(this.ownerUUID) || this.ownerSpaceRace != null && this.ownerSpaceRace.getPlayerNames().contains(toTargetPlayer.getName()))) + { + shouldTarget = false; + } else + { + for (String player : players) + { + if (player.equalsIgnoreCase(e.getName())) + { + shouldTarget = !shouldTarget; + } + } + } + } else if (e instanceof EntityTameable && ((EntityTameable) e).getOwnerId() != null) + { + if ((((EntityTameable) e).getOwnerId().equals(this.ownerUUID)) || (this.alwaysIgnoreSpaceRace && this.ownerSpaceRace != null && ((EntityTameable) e).getOwner() != null + && this.ownerSpaceRace.getPlayerNames().contains(((EntityTameable) e).getOwner().getName()))) + { + shouldTarget = false; + } + } else + { + ResourceLocation location = EntityList.getKey(e.getClass()); + if (location != null) + { + for (ResourceLocation entity : entities) + { + if (location.equals(entity)) + { + shouldTarget = !shouldTarget; + } + } + } + } + if (shouldTarget) + { + Vector3 vec = new Vector3(e.posX, e.posY + e.getEyeHeight(), e.posZ); + vec.translate(new Vector3(-(pos.getX() + 0.5F), -(pos.getY() + 1.78F), -(pos.getZ() + 0.5F))); + Vector3 vecNoHeight = vec.clone(); + vecNoHeight.y = 0; + // Make sure target is within range and not directly + // below turret: + if ((vec.getMagnitudeSquared() < RANGE * RANGE || (targetMeteors && e instanceof EntityMeteor && vecNoHeight.getMagnitudeSquared() < METEOR_RANGE * METEOR_RANGE)) + && Math.asin(vec.clone().normalize().y) > -Math.PI / 3.0) + { + if (e instanceof EntityLivingBase) + { + list.add(new EntityEntrySortable((EntityLivingBase) e, vec.getMagnitude())); + } else if (targetMeteors && e instanceof EntityMeteor) + { + return e; + } + } + } + } + } + } + + list.sort((o1, o2) -> + { + if (priorityClosest < priorityHighestHealth && priorityClosest < priorityLowestHealth) + { + if (priorityLowestHealth < priorityHighestHealth) + { + return ComparisonChain.start().compare(o1.distance, o2.distance).compare(o1.entity.getHealth(), o2.entity.getHealth()).result(); + } else + { + return ComparisonChain.start().compare(o1.distance, o2.distance).compare(o2.entity.getHealth(), o1.entity.getHealth()).result(); + } + } else if (priorityHighestHealth < priorityLowestHealth && priorityHighestHealth < priorityClosest) + { + return ComparisonChain.start().compare(o2.entity.getHealth(), o1.entity.getHealth()).compare(o1.distance, o2.distance).result(); + } else if (priorityLowestHealth < priorityHighestHealth && priorityLowestHealth < priorityClosest) + { + return ComparisonChain.start().compare(o1.entity.getHealth(), o2.entity.getHealth()).compare(o1.distance, o2.distance).result(); + } + return 0; + }); + + for (EntityEntrySortable entry : list) + { + Entity entity = entry.entity; + Vec3d start = new Vec3d(pos.getX() + 0.5F, pos.getY() + 1.78F, pos.getZ() + 0.5F); + Vec3d end = new Vec3d(entity.posX, entity.posY + entity.getEyeHeight(), entity.posZ); + start = start.add(end.add(start.scale(-1)).normalize()); // Start at + // block in + // front of + // laser + // facing + // direction + + RayTraceResult res = this.world.rayTraceBlocks(start, end, false, true, true); + if (res == null || res.typeOfHit != RayTraceResult.Type.BLOCK) + { + return entity; + } + } + + return null; + } + + @Override + public void update() + { + super.update(); + + if (!this.initialisedMulti) + { + this.initialisedMulti = this.initialiseMultiTiles(this.getPos(), this.world); + } + + if (!world.isRemote) + { + if (storage.getEnergyStoredGC() > 1000 && !this.getDisabled(0) && !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + if (chargeLevel < 60) + { + chargeLevel++; + } + } else + { + this.chargeLevel = 0; + } + + if (ticks % 20 == 0) + { + if (storage.getEnergyStoredGC() > 1000 && !this.getDisabled(0) && !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + for (Entity e : world.loadedEntityList) + { + if (e instanceof EntityLivingBase || e instanceof ILaserTrackableFast) + { + this.trackEntity(e); + } + } + } else + { + this.tracked.clear(); + } + + Entity toTarget = updateTarget(); + + if (toTarget != null && this.chargeLevel > 0) + { + active = true; + targettedEntity = toTarget.getEntityId(); + } else + { + active = false; + targettedEntity = -1; + } + } + + if (chargeLevel >= 60 && targettedEntity != -1) + { + Entity toTarget = this.world.getEntityByID(this.targettedEntity); + if (toTarget != null) + { + if (toTarget instanceof EntityLivingBase) + { + EntityLivingBase entityLiving = (EntityLivingBase) toTarget; + entityLiving.attackEntityFrom(DamageSourceGC.laserTurret, 1.5F); + } else if (toTarget instanceof EntityMeteor) + { + toTarget.setDead(); + } + this.world.playSound(null, getPos().up(), GCSounds.laserShoot, SoundCategory.BLOCKS, 1.0F, 1.0F); + storage.setEnergyStored(storage.getEnergyStoredGC() - 1000); + chargeLevel = 0; + } + } else if (chargeLevel == 22) + { + this.world.playSound(null, getPos().up(), GCSounds.laserCharge, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + } else + { + // Client side only + if (chargeLevel > 0 && chargeLevel < 60) + { + chargeLevel++; + } + + if (chargeLevel < 5) + { + timeSinceShot = 0; + } + + timeSinceShot++; + + if (active && targettedEntity != -1) + { + Entity entity = world.getEntityByID(targettedEntity); + if (entity != null && !entity.isDead) + { + Vector3 vec = new Vector3(entity.posX, entity.posY + entity.getEyeHeight(), entity.posZ); + vec.translate(new Vector3(-(pos.getX() + 0.5F), -(pos.getY() + 1.78F), -(pos.getZ() + 0.5F))).normalize(); + targetPitch = (float) (Math.asin(vec.y) * (180.0F / Math.PI)); + targetYaw = (float) (Math.atan2(vec.x, vec.z) * (180.0F / Math.PI)) + 90.0F; + + while (targetYaw > 360.0F) + { + targetYaw -= 360.0F; + } + + while (targetYaw < 0.0F) + { + targetYaw += 360.0F; + } + + if (targetPitch > 90.0F) + { + targetPitch = 90.0F; + } else if (targetPitch < -60.0F) + { + targetPitch = -60.0F; + } + } + } else + { + targetPitch = -45.0F; + } + + float diffY = targetYaw - yaw; + if (targetYaw > 270.0F && yaw < 90.0F) + { + yaw = yaw + (targetYaw - (yaw + 360.0F)) / 3.0F; + } else if (targetYaw < 90.0F && yaw > 270.0F) + { + yaw = yaw + ((targetYaw + 360.0F) - yaw) / 3.0F; + } else + { + yaw = yaw + diffY / 10.0F; + } + + float diffP = targetPitch - pitch; + pitch += diffP / 3.0F; + + while (yaw > 360.0F) + { + yaw -= 360.0F; + } + + while (yaw < 0.0F) + { + yaw += 360.0F; + } + + if (pitch > 90.0F) + { + pitch = 90.0F; + } else if (pitch < -60.0F) + { + pitch = -60.0F; + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + + NBTTagList playersTag = nbt.getTagList("PlayerList", 10); + for (int i = 0; i < playersTag.tagCount(); i++) + { + NBTTagCompound tagAt = playersTag.getCompoundTagAt(i); + this.players.add(tagAt.getString("PlayerName")); + } + + NBTTagList entitiesTag = nbt.getTagList("EntitiesList", 10); + for (int i = 0; i < entitiesTag.tagCount(); i++) + { + NBTTagCompound tagAt = entitiesTag.getCompoundTagAt(i); + this.entities.add(new ResourceLocation(tagAt.getString("EntityRes"))); + } + + this.active = nbt.getBoolean("active"); + this.targettedEntity = nbt.getInteger("targettedEntity"); + this.chargeLevel = nbt.getInteger("chargeLevel"); + this.blacklistMode = nbt.getBoolean("blacklistMode"); + this.targetMeteors = nbt.getBoolean("targetMeteors"); + this.alwaysIgnoreSpaceRace = nbt.getBoolean("alwaysIgnoreSpaceRace"); + this.priorityClosest = nbt.getInteger("priorityClosest"); + this.priorityLowestHealth = nbt.getInteger("priorityLowestHealth"); + this.priorityHighestHealth = nbt.getInteger("priorityHighestHealth"); + + this.ownerName = nbt.hasKey("ownerName") ? nbt.getString("ownerName") : null; + this.ownerUUID = nbt.getUniqueId("ownerUUID"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + + NBTTagList playersTag = new NBTTagList(); + for (String player : this.players) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("PlayerName", player); + playersTag.appendTag(tagComp); + } + + nbt.setTag("PlayerList", playersTag); + + NBTTagList entitiesTag = new NBTTagList(); + for (ResourceLocation entity : this.entities) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("EntityRes", entity.toString()); + entitiesTag.appendTag(tagComp); + } + + nbt.setTag("EntitiesList", entitiesTag); + + nbt.setBoolean("active", this.active); + nbt.setInteger("targettedEntity", this.targettedEntity); + nbt.setInteger("chargeLevel", this.chargeLevel); + nbt.setBoolean("blacklistMode", this.blacklistMode); + nbt.setBoolean("targetMeteors", this.targetMeteors); + nbt.setBoolean("alwaysIgnoreSpaceRace", this.alwaysIgnoreSpaceRace); + nbt.setInteger("priorityClosest", this.priorityClosest); + nbt.setInteger("priorityLowestHealth", this.priorityLowestHealth); + nbt.setInteger("priorityHighestHealth", this.priorityHighestHealth); + + if (this.ownerName != null) + { + nbt.setString("ownerName", this.ownerName); + } + nbt.setUniqueId("ownerUUID", this.ownerUUID); + + return nbt; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(getPos().getX(), getPos().getY(), getPos().getZ(), getPos().getX() + 1, getPos().getY() + 2, getPos().getZ() + 1); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return false; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockLaserTurret) + { + return state.getValue(BlockLaserTurret.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + public void setOwnerUUID(UUID uniqueID) + { + this.ownerUUID = uniqueID; + if (uniqueID != null) + { + EntityPlayer player = this.world.getPlayerEntityByUUID(uniqueID); + if (player != null) + { + this.ownerName = player.getName(); + } + } + for (SpaceRace race : SpaceRaceManager.getSpaceRaces()) + { + if (this.ownerName != null && race.getPlayerNames().contains(this.ownerName)) + { + this.setOwnerSpaceRace(race); + } + } + } + + public UUID getOwnerUUID() + { + return this.ownerUUID; + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + entityPlayer.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock) + { + BlockMulti.EnumBlockMultiType type = stateAt.getValue(BlockMulti.MULTI_TYPE); + if (type == BlockMulti.EnumBlockMultiType.LASER_TURRET) + { + if (this.world.isRemote) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, VenusBlocks.laserTurret.getDefaultState()); + } + + this.world.setBlockToAir(pos); + } + } + } + + this.world.destroyBlock(getPos(), true); + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + int y = placedPosition.getY() + 1; + if (y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return BlockMulti.EnumBlockMultiType.LASER_TURRET; + } + + protected boolean initialiseMultiTiles(BlockPos pos, World world) + { + // Client can create its own fake blocks and tiles - no need for + // networking in 1.8+ + if (world.isRemote) + this.onCreate(world, pos); + + List positions = new ArrayList<>(); + this.getPositions(pos, positions); + boolean result = true; + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMulti) + { + ((TileEntityMulti) tile).mainBlockPosition = pos; + } else + { + result = false; + } + } + return result; + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (machineSides == null) + { + this.initialiseSides(); + } + + return machineSides; + } + + @Override + public void setupMachineSides(int length) + { + machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachineTiered.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + private class EntityEntrySortable + { + + private EntityLivingBase entity; + private double distance; + + public EntityEntrySortable(EntityLivingBase entity, double distance) + { + this.entity = entity; + this.distance = distance; + } + + public EntityLivingBase getEntity() + { + return entity; + } + + public void setEntity(EntityLivingBase entity) + { + this.entity = entity; + } + + public double getDistance() + { + return distance; + } + + public void setDistance(double distance) + { + this.distance = distance; + } + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayController.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayController.java new file mode 100644 index 00000000..375ef45a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayController.java @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.EnumSet; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.dimension.WorldProviderVenus; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.Vec3i; +import net.minecraftforge.fml.relauncher.Side; + +public class TileEntitySolarArrayController extends TileBaseUniversalElectricalSource implements IDisableableMachine, IInventoryDefaults, ISidedInventory, IConnector +{ + + private int solarStrength = 0; + @NetworkedField(targetSide = Side.CLIENT) public boolean disabled = false; + @NetworkedField(targetSide = Side.CLIENT) public int disableCooldown = 0; + public static final int MAX_GENERATE_WATTS = 1000; + @NetworkedField(targetSide = Side.CLIENT) public int generateWatts = 0; + private Set solarArray = Sets.newHashSet(); + @NetworkedField(targetSide = Side.CLIENT) public int connectedInfo = 0; + + private boolean initialised = false; + + public TileEntitySolarArrayController() + { + super("container.solar_array_controller.name"); + this.storage.setMaxExtract(TileEntitySolarArrayController.MAX_GENERATE_WATTS); + this.storage.setMaxReceive(TileEntitySolarArrayController.MAX_GENERATE_WATTS); + this.storage.setCapacity(50000); + this.initialised = true; + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.initialised) + { + this.storage.setCapacity(50000); + this.initialised = true; + } + + if (!this.world.isRemote) + { + this.receiveEnergyGC(null, this.generateWatts, false); + + EnumSet outputDirections = EnumSet.noneOf(EnumFacing.class); + outputDirections.addAll(Arrays.asList(EnumFacing.HORIZONTALS)); + outputDirections.removeAll(this.getElectricalOutputDirections()); + + BlockVec3 thisVec = new BlockVec3(this); + solarArray.clear(); + for (EnumFacing direction : outputDirections) + { + TileEntity tileAdj = thisVec.getTileEntityOnSide(this.world, direction); + + if (tileAdj != null) + { + if (tileAdj instanceof INetworkProvider) + { + if (tileAdj instanceof ITransmitter) + { + if (((ITransmitter) tileAdj).canConnect(direction.getOpposite(), NetworkType.SOLAR_MODULE)) + { + if (((INetworkProvider) tileAdj).getNetwork() instanceof SolarModuleNetwork) + { + solarArray.addAll(((SolarModuleNetwork) ((INetworkProvider) tileAdj).getNetwork()).getTransmitters()); + } + } + } else + { + if (((INetworkProvider) tileAdj).getNetwork() instanceof SolarModuleNetwork) + { + solarArray.addAll(((SolarModuleNetwork) ((INetworkProvider) tileAdj).getNetwork()).getTransmitters()); + } + } + } + } + } + } + + super.update(); + + if (!this.world.isRemote) + { + this.recharge(this.getInventory().get(0)); + + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + + if (!this.getDisabled(0) && this.ticks % 20 == 0) + { + this.solarStrength = 0; + int arraySizeWithinRange = 0; + if (this.world.isDaytime() && (this.world.provider instanceof IGalacticraftWorldProvider || !this.world.isRaining() && !this.world.isThundering())) + { + for (ITransmitter transmitter : solarArray) + { + TileEntity tile = (TileEntity) transmitter; + Vec3i diff = tile.getPos().subtract(this.getPos()); + if (Math.abs(diff.getX()) <= 16 && diff.getY() == 0 && Math.abs(diff.getZ()) <= 16) + { + arraySizeWithinRange++; + if (this.world.canBlockSeeSky(tile.getPos())) + { + boolean valid = true; + + for (int y = this.getPos().getY() + 1; y < 256; y++) + { + IBlockState state = this.world.getBlockState(this.getPos().add(0, y, 0)); + + if (state.getBlock().isOpaqueCube(state)) + { + valid = false; + break; + } + } + + if (valid) + { + this.solarStrength++; + } + } + } + } + } + + connectedInfo = solarStrength << 16 | arraySizeWithinRange; + } + } + + float angle = this.world.getCelestialAngle(1.0F) - 0.7845194F < 0 ? 1.0F - 0.7845194F : -0.7845194F; + float celestialAngle = (this.world.getCelestialAngle(1.0F) + angle) * 360.0F; + if (!(this.world.provider instanceof WorldProviderSpaceStation)) + celestialAngle += 12.5F; + if (this.world.provider instanceof WorldProviderVenus) + celestialAngle = 180F - celestialAngle; + celestialAngle %= 360; + boolean isDaytime = this.world.isDaytime() && (celestialAngle < 180.5F || celestialAngle > 359.5F) || this.world.provider instanceof WorldProviderSpaceStation; + + if (!this.world.isRemote) + { + int generated = this.getGenerate(); + if (generated > 0) + { + this.generateWatts = Math.min(Math.max(generated, 0), TileEntitySolarArrayController.MAX_GENERATE_WATTS); + } else + { + this.generateWatts = 0; + } + } + + this.produce(); + } + + public int getGenerate() + { + if (this.getDisabled(0)) + { + return 0; + } + + return (int) Math.floor(solarStrength * 6.3F * this.getSolarBoost()); + } + + public float getSolarBoost() + { + float result = (float) (this.world.provider instanceof ISolarLevel ? ((ISolarLevel) this.world.provider).getSolarEnergyMultiplier() : 1.0F); + if (this.world.provider instanceof WorldProviderSpaceStation) + { + // 10% boost for new solar on space stations + result *= 1.1F; + } + if (this.world.provider instanceof WorldProviderVenus) + { + if (this.pos.getY() > 90) + { + result += (this.pos.getY() - 90) / 1000F; // Small improvement + // on Venus at higher + // altitudes + } + } + return result; + } + + @Override + public double getPacketRange() + { + return 20.0D; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.storage.setCapacity(nbt.getFloat("maxEnergy")); + this.setDisabled(0, nbt.getBoolean("disabled")); + this.disableCooldown = nbt.getInteger("disabledCooldown"); + + this.initialised = false; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setFloat("maxEnergy", this.getMaxEnergyStoredGC()); + nbt.setInteger("disabledCooldown", this.disableCooldown); + nbt.setBoolean("disabled", this.getDisabled(0)); + + return nbt; + } + + /* + * @Override public float getRequest(EnumFacing direction) { return 0; } + */ + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockSolarArrayController) + { + return state.getValue(BlockSolarArrayController.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(byIndex()); + } + + @Override + public EnumFacing getElectricOutputDirection() + { + return this.byIndex(); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + this.disabled = disabled; + this.disableCooldown = 20; + } + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC() * i / this.getMaxEnergyStoredGC()); + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.POWER && direction == this.getElectricOutputDirection() + || type == NetworkType.SOLAR_MODULE && direction != this.getElectricOutputDirection() && direction.getAxis() != EnumFacing.Axis.Y; + } + + public int getPossibleArraySize() + { + return connectedInfo & 0xFFFF; + } + + public int getActualArraySize() + { + return (connectedInfo >> 16) & 0xFFFF; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayModule.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayModule.java new file mode 100644 index 00000000..1bdf4e8b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayModule.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public class TileEntitySolarArrayModule extends TileEntitySolarTransmitter +{ + + public TileEntitySolarArrayModule() + { + super("container.solar_array_module.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.SOLAR_MODULE && direction.getAxis() != EnumFacing.Axis.Y; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + return super.writeToNBT(compound); + } + + @Override + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + } + + @Override + public boolean canTransmit() + { + return true; + } + + protected boolean handleInventory() + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarTransmitter.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarTransmitter.java new file mode 100644 index 00000000..f6670fe1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarTransmitter.java @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced; +import micdoodle8.mods.galacticraft.planets.venus.tick.VenusTickHandlerServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; + +public abstract class TileEntitySolarTransmitter extends TileEntityAdvanced implements ITransmitter +{ + + private IGridNetwork network; + public TileEntity[] adjacentConnections = null; + private boolean validated = true; + + public TileEntitySolarTransmitter(String tileName) + { + super(tileName); + } + + @Override + public void validate() + { + this.validated = false; + super.validate(); + } + + @Override + public void invalidate() + { + { + this.getNetwork().split(this); + } + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + super.invalidate(); + super.onChunkUnload(); + } + + @Override + public IGridNetwork getNetwork() + { + if (this.network == null) + { + this.resetNetwork(); + } + + return this.network; + } + + @Override + public boolean hasNetwork() + { + return this.network != null; + } + + @Override + public void onNetworkChanged() + { + this.world.markBlockRangeForRenderUpdate(this.getPos(), this.getPos()); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + if (!this.validated) + { + VenusTickHandlerServer.solarTransmitterUpdates.add(this); + this.validated = true; + } + } + + super.update(); + } + + protected void resetNetwork() + { + SolarModuleNetwork network = new SolarModuleNetwork(); + this.setNetwork(network); + network.addTransmitter(this); + network.register(); + } + + @Override + public void setNetwork(IGridNetwork network) + { + if (this.network == network) + { + return; + } + + if (this.world.isRemote && this.network != null) + { + SolarModuleNetwork solarNetwork = (SolarModuleNetwork) this.network; + solarNetwork.removeTransmitter(this); + + if (solarNetwork.getTransmitters().isEmpty()) + { + solarNetwork.unregister(); + } + } + + this.network = network; + + if (this.world.isRemote && this.network != null) + { + ((SolarModuleNetwork) this.network).getTransmitters().add(this); + } + } + + @Override + public void refresh() + { + if (!this.world.isRemote) + { + this.adjacentConnections = null; + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity != null) + { + if (tileEntity.getClass() == this.getClass() && tileEntity instanceof INetworkProvider && ((INetworkProvider) tileEntity).hasNetwork()) + { + if (!(tileEntity instanceof ITransmitter) || (((ITransmitter) tileEntity).canConnect(side.getOpposite(), ((ITransmitter) tileEntity).getNetworkType()))) + { + if (!this.hasNetwork()) + { + this.setNetwork(((INetworkProvider) tileEntity).getNetwork()); + ((SolarModuleNetwork) this.getNetwork()).addTransmitter(this); + } else if (this.hasNetwork() && !this.getNetwork().equals(((INetworkProvider) tileEntity).getNetwork())) + { + this.setNetwork((IGridNetwork) this.getNetwork().merge(((INetworkProvider) tileEntity).getNetwork())); + } + } + } + } + } + + this.getNetwork().refresh(); + } + } + + @Override + public TileEntity[] getAdjacentConnections() + { + /** + * Cache the adjacentConnections. + */ + if (this.adjacentConnections == null) + { + this.adjacentConnections = new TileEntity[EnumFacing.VALUES.length]; + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing direction : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, direction); + + if (tileEntity instanceof TileEntitySolarArrayModule) + { + if (this.world.isRemote || ((TileEntitySolarArrayModule) tileEntity).canConnect(direction.getOpposite(), NetworkType.SOLAR_MODULE)) + { + this.adjacentConnections[direction.ordinal()] = tileEntity; + } + } + } + } + + return this.adjacentConnections; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.SOLAR_MODULE; + } + + @Override + public NetworkType getNetworkType() + { + return NetworkType.SOLAR_MODULE; + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySpout.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySpout.java new file mode 100644 index 00000000..438ee238 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySpout.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileEntitySpout extends TileEntity implements ITickable +{ + + private final Random rand = new Random(System.currentTimeMillis()); + + @Override + public void update() + { + if (this.world.isRemote) + { + if (rand.nextInt(400) == 0) + { + IBlockState stateAbove = this.world.getBlockState(this.getPos().up()); + if (stateAbove.getBlock().isAir(this.world.getBlockState(this.getPos().up()), this.world, this.getPos().up())) + { + double posX = (double) pos.getX() + 0.45 + rand.nextDouble() * 0.1; + double posY = (double) pos.getY() + 1.0; + double posZ = (double) pos.getZ() + 0.45 + rand.nextDouble() * 0.1; + for (int i = 0; i < 4 + rand.nextInt(4); ++i) + { + GalacticraftPlanets.spawnParticle("acidVapor", new Vector3(posX, posY, posZ), + new Vector3(rand.nextDouble() * 0.5 - 0.25, rand.nextDouble() * 0.5 + 0.5, rand.nextDouble() * 0.5 - 0.25)); + } + } + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityTreasureChestVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityTreasureChestVenus.java new file mode 100644 index 00000000..29743762 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityTreasureChestVenus.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; + +public class TileEntityTreasureChestVenus extends TileEntityTreasureChest +{ + + public TileEntityTreasureChestVenus() + { + super(3); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeDecoratorVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeDecoratorVenus.java new file mode 100644 index 00000000..4f550366 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeDecoratorVenus.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import micdoodle8.mods.galacticraft.core.world.gen.WorldGenMinableMeta; +import micdoodle8.mods.galacticraft.planets.venus.ConfigManagerVenus; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.MinecraftForge; + +public class BiomeDecoratorVenus extends BiomeDecorator +{ + + private WorldGenerator aluminumGen; + private WorldGenerator copperGen; + private WorldGenerator galenaGen; + private WorldGenerator quartzGen; + private WorldGenerator siliconGen; + private WorldGenerator tinGen; + private WorldGenerator solarGen; + private World world; + + public BiomeDecoratorVenus() + { + this.aluminumGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 6, true, VenusBlocks.venusBlock, 1); + this.copperGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 7, true, VenusBlocks.venusBlock, 1); + this.galenaGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 8, true, VenusBlocks.venusBlock, 1); + this.quartzGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 9, true, VenusBlocks.venusBlock, 1); + this.siliconGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 10, true, VenusBlocks.venusBlock, 1); + this.tinGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 11, true, VenusBlocks.venusBlock, 1); + this.solarGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 5, 13, true, VenusBlocks.venusBlock, 1); + } + + @Override + public void decorate(World worldIn, Random random, Biome biome, BlockPos blockPos) + { + if (this.world != null) + { + throw new RuntimeException("Already decorating!!"); + } else + { + this.world = worldIn; + this.chunkPos = blockPos; + this.generateVenus(random); + this.world = null; + } + } + + private void genStandardOre(int amountPerChunk, WorldGenerator worldGenerator, int minY, int maxY, Random random) + { + for (int var5 = 0; var5 < amountPerChunk; ++var5) + { + BlockPos blockpos = this.chunkPos.add(random.nextInt(16), random.nextInt(maxY - minY) + minY, random.nextInt(16)); + worldGenerator.generate(this.world, random, blockpos); + } + } + + private void generateVenus(Random random) + { + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Pre(this.world, random, chunkPos)); + if (!ConfigManagerVenus.disableAluminumGen) + this.genStandardOre(18, this.aluminumGen, 0, 60, random); + if (!ConfigManagerVenus.disableCopperGen) + this.genStandardOre(24, this.copperGen, 0, 60, random); + if (!ConfigManagerVenus.disableGalenaGen) + this.genStandardOre(18, this.galenaGen, 0, 60, random); + if (!ConfigManagerVenus.disableQuartzGen) + this.genStandardOre(26, this.quartzGen, 0, 60, random); + if (!ConfigManagerVenus.disableSiliconGen) + this.genStandardOre(4, this.siliconGen, 0, 60, random); + if (!ConfigManagerVenus.disableTinGen) + this.genStandardOre(22, this.tinGen, 0, 60, random); + if (!ConfigManagerVenus.disableSolarGen) + this.genStandardOre(6, this.solarGen, 0, 50, random); + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Post(this.world, random, chunkPos)); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenFlatVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenFlatVenus.java new file mode 100644 index 00000000..5f01e6c8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenFlatVenus.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeGenFlatVenus extends BiomeVenus +{ + + public BiomeGenFlatVenus(BiomeData properties) + { + super(properties); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.HOT, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SANDY); + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180622_4_, int p_180622_5_, double p_180622_6_) + { + this.topBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + this.fillerBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + super.generateBiomeTerrainVenus(worldIn, rand, chunkPrimerIn, p_180622_4_, p_180622_5_, p_180622_6_); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusMountain.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusMountain.java new file mode 100644 index 00000000..592887c8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusMountain.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeGenVenusMountain extends BiomeVenus +{ + + public BiomeGenVenusMountain(BiomeData properties) + { + super(properties); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.HOT, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SANDY); + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180622_4_, int p_180622_5_, double p_180622_6_) + { + this.topBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + this.fillerBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + super.generateBiomeTerrainVenus(worldIn, rand, chunkPrimerIn, p_180622_4_, p_180622_5_, p_180622_6_); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusValley.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusValley.java new file mode 100644 index 00000000..2a0fe6ae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusValley.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeGenVenusValley extends BiomeVenus +{ + + public BiomeGenVenusValley(BiomeData properties) + { + super(properties); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.HOT, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SANDY); + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180622_4_, int p_180622_5_, double p_180622_6_) + { + this.topBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + this.fillerBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + IBlockState stoneBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + IBlockState gravelBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_VOLCANIC_DEPOSIT); + + int i = worldIn.getSeaLevel(); + IBlockState topBlock = this.topBlock; + IBlockState fillerBlock = this.fillerBlock; + int j = -1; + int k = (int) (p_180622_6_ / 3.0D + 3.0D + rand.nextDouble() * 0.25D); + int l = p_180622_4_ & 15; + int i1 = p_180622_5_ & 15; + + for (int j1 = 255; j1 >= 0; --j1) + { + if (j1 <= rand.nextInt(5)) + { + chunkPrimerIn.setBlockState(i1, j1, l, Blocks.BEDROCK.getDefaultState()); + } else + { + IBlockState iblockstate2 = chunkPrimerIn.getBlockState(i1, j1, l); + + if (iblockstate2.getMaterial() == Material.AIR) + { + j = -1; + } else if (iblockstate2.getBlock() == VenusBlocks.venusBlock) + { + if (j == -1) + { + if (k <= 0) + { + topBlock = null; + fillerBlock = stoneBlock; + } else if (j1 >= i - 4 && j1 <= i + 1) + { + topBlock = this.topBlock; + fillerBlock = this.fillerBlock; + } + + j = k; + + if (j1 >= i - 1) + { + chunkPrimerIn.setBlockState(i1, j1, l, topBlock); + } else if (j1 < i - 7 - k) + { + topBlock = null; + fillerBlock = stoneBlock; + chunkPrimerIn.setBlockState(i1, j1, l, gravelBlock); + } else + { + chunkPrimerIn.setBlockState(i1, j1, l, fillerBlock); + } + } else if (j > 0) + { + --j; + chunkPrimerIn.setBlockState(i1, j1, l, fillerBlock); + } + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeProviderVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeProviderVenus.java new file mode 100644 index 00000000..5ab00951 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeProviderVenus.java @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.layer.GenLayerVenus; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeCache; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.layer.GenLayer; +import net.minecraft.world.gen.layer.IntCache; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BiomeProviderVenus extends BiomeProvider +{ + + private GenLayer unzoomedBiomes; + private GenLayer zoomedBiomes; + private BiomeCache biomeCache; + private List biomesToSpawnIn; + private CelestialBody body; + + protected BiomeProviderVenus() + { + body = VenusModule.planetVenus; + biomeCache = new BiomeCache(this); + biomesToSpawnIn = new ArrayList<>(); +// biomesToSpawnIn.add() + } + + public BiomeProviderVenus(long seed, WorldType type) + { + this(); + GenLayer[] genLayers = GenLayerVenus.createWorld(seed); + this.unzoomedBiomes = genLayers[0]; + this.zoomedBiomes = genLayers[1]; + } + + public BiomeProviderVenus(World world) + { + this(world.getSeed(), world.getWorldInfo().getTerrainType()); + } + + @Override + public List getBiomesToSpawnIn() + { + return this.biomesToSpawnIn; + } + + @Override + public Biome getBiome(BlockPos pos, Biome defaultBiome) + { + BiomeAdaptive.setBodyMultiBiome(body); + return this.biomeCache.getBiome(pos.getX(), pos.getZ(), BiomeAdaptive.biomeDefault); + } + + @Override + @SideOnly(Side.CLIENT) + public float getTemperatureAtHeight(float par1, int par2) + { + return par1; + } + + @Override + public Biome[] getBiomesForGeneration(Biome[] biomes, int x, int z, int length, int width) + { + IntCache.resetIntCache(); + BiomeAdaptive.setBodyMultiBiome(body); + + if (biomes == null || biomes.length < length * width) + { + biomes = new Biome[length * width]; + } + + int[] intArray = unzoomedBiomes.getInts(x, z, length, width); + + for (int i = 0; i < length * width; ++i) + { + if (intArray[i] >= 0) + { + biomes[i] = Biome.getBiome(intArray[i]); + } else + { + biomes[i] = BiomeAdaptive.biomeDefault; + } + } + + return biomes; + } + + @Override + public Biome[] getBiomes(@Nullable Biome[] oldBiomeList, int x, int z, int width, int depth) + { + return getBiomes(oldBiomeList, x, z, width, depth, true); + } + + @Override + public Biome[] getBiomes(@Nullable Biome[] listToReuse, int x, int z, int width, int length, boolean cacheFlag) + { + IntCache.resetIntCache(); + BiomeAdaptive.setBodyMultiBiome(body); + + if (listToReuse == null || listToReuse.length < length * width) + { + listToReuse = new Biome[width * length]; + } + + if (cacheFlag && width == 16 && length == 16 && (x & 15) == 0 && (z & 15) == 0) + { + Biome[] cached = this.biomeCache.getCachedBiomes(x, z); + System.arraycopy(cached, 0, listToReuse, 0, width * length); + return listToReuse; + } + + int[] zoomed = zoomedBiomes.getInts(x, z, width, length); + + for (int i = 0; i < width * length; ++i) + { + if (zoomed[i] >= 0) + { + listToReuse[i] = Biome.getBiome(zoomed[i]); + } else + { + listToReuse[i] = BiomeAdaptive.biomeDefault; + } + } + + return listToReuse; + } + + @Override + public boolean areBiomesViable(int x, int z, int range, List viables) + { + int i = x - range >> 2; + int j = z - range >> 2; + int k = x + range >> 2; + int l = z + range >> 2; + int diffX = (k - i) + 1; + int diffZ = (l - j) + 1; + int[] unzoomed = this.unzoomedBiomes.getInts(i, j, diffX, diffZ); + + for (int a = 0; a < diffX * diffZ; ++a) + { + Biome biome = Biome.getBiome(unzoomed[a]); + + if (!viables.contains(biome)) + { + return false; + } + } + + return true; + } + + @Override + public BlockPos findBiomePosition(int x, int z, int range, List biomes, Random random) + { + int i = x - range >> 2; + int j = z - range >> 2; + int k = x + range >> 2; + int l = z + range >> 2; + int diffX = (k - i) + 1; + int diffZ = (l - j) + 1; + int[] unzoomed = this.unzoomedBiomes.getInts(i, j, diffX, diffZ); + BlockPos blockPos = null; + int count = 0; + + for (int a = 0; a < unzoomed.length; ++a) + { + int x0 = i + a % diffX << 2; + int z0 = j + a / diffX << 2; + Biome biome = Biome.getBiome(unzoomed[a]); + + if (biomes.contains(biome) && (blockPos == null || random.nextInt(count + 1) == 0)) + { + blockPos = new BlockPos(x0, 0, z0); + count++; + } + } + + return blockPos; + } + + @Override + public void cleanupCache() + { + this.biomeCache.cleanupCache(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeVenus.java new file mode 100644 index 00000000..4d9e0824 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeVenus.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.chunk.ChunkPrimer; + +public class BiomeVenus extends BiomeGenBaseGC +{ + + public static final Biome venusFlat = new BiomeGenFlatVenus(BiomeData.builder().biomeName("Venus Flat").baseHeight(0.5F).heightVariation(0.4F).temperature(4.0F).build()); + public static final Biome venusMountain = new BiomeGenVenusMountain(BiomeData.builder().biomeName("Venus Mountain").baseHeight(2.0F).heightVariation(1.0F).temperature(4.0F).build()); + public static final Biome venusValley = new BiomeGenVenusValley(BiomeData.builder().biomeName("Venus Valley").baseHeight(-0.4F).heightVariation(0.2F).temperature(4.0F).build()); + + BiomeVenus(BiomeData properties) + { + super(properties, true); + } + + @Override + public BiomeDecorator createBiomeDecorator() + { + return new BiomeDecoratorVenus(); + } + + @Override + public float getSpawningChance() + { + return 0.01F; + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180622_4_, int p_180622_5_, double p_180622_6_) + { + } + + public final void generateBiomeTerrainVenus(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180628_4_, int p_180628_5_, double p_180628_6_) + { + int i = worldIn.getSeaLevel(); + IBlockState topBlock = this.topBlock; + IBlockState fillerBlock = this.fillerBlock; + IBlockState stoneBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + int j = -1; + int k = (int) (p_180628_6_ / 3.0D + 3.0D + rand.nextDouble() * 0.25D); + int l = p_180628_4_ & 15; + int i1 = p_180628_5_ & 15; + + for (int j1 = 255; j1 >= 0; --j1) + { + if (j1 <= rand.nextInt(5)) + { + chunkPrimerIn.setBlockState(i1, j1, l, Blocks.BEDROCK.getDefaultState()); + } else + { + IBlockState iblockstate2 = chunkPrimerIn.getBlockState(i1, j1, l); + + if (iblockstate2.getMaterial() == Material.AIR) + { + j = -1; + } else if (iblockstate2.getBlock() == VenusBlocks.venusBlock) + { + if (j == -1) + { + if (k <= 0) + { + topBlock = null; + fillerBlock = stoneBlock; + } else if (j1 >= i - 4 && j1 <= i + 1) + { + topBlock = this.topBlock; + fillerBlock = this.fillerBlock; + } + + j = k; + + if (j1 >= i - 1) + { + chunkPrimerIn.setBlockState(i1, j1, l, topBlock); + } else if (j1 < i - 7 - k) + { + topBlock = null; + fillerBlock = stoneBlock; + } else + { + chunkPrimerIn.setBlockState(i1, j1, l, fillerBlock); + } + } else if (j > 0) + { + --j; + chunkPrimerIn.setBlockState(i1, j1, l, fillerBlock); + } + } + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/ChunkProviderVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/ChunkProviderVenus.java new file mode 100644 index 00000000..5a7bd5f6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/ChunkProviderVenus.java @@ -0,0 +1,392 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.BlockFalling; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldEntitySpawner; +import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.gen.NoiseGenerator; +import net.minecraft.world.gen.NoiseGeneratorOctaves; +import net.minecraft.world.gen.NoiseGeneratorPerlin; + +import net.minecraftforge.event.ForgeEventFactory; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.perlin.generator.GradientNoise; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.DungeonConfigurationVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.MapGenDungeonVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.RoomBossVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.RoomTreasureVenus; + +public class ChunkProviderVenus extends ChunkProviderBase +{ + + public static final IBlockState BLOCK_FILL = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + + private Random rand; + private NoiseGeneratorOctaves noiseGen1; + private NoiseGeneratorOctaves noiseGen2; + private NoiseGeneratorOctaves noiseGen3; + private NoiseGeneratorPerlin noiseGen4; + private NoiseGeneratorOctaves noiseGen5; + private NoiseGeneratorOctaves noiseGen6; + private NoiseGeneratorOctaves mobSpawnerNoise; + private final GradientNoise noiseGenSmooth1; + private World world; + private WorldType worldType; + private final double[] terrainCalcs; + private final float[] parabolicField; + private double[] stoneNoise = new double[256]; + private MapGenBaseMeta caveGenerator = new MapGenCaveVenus(); + private MapGenBaseMeta lavaCaveGenerator = new MapGenLavaVenus(); + private Biome[] biomesForGeneration; + private double[] octaves1; + private double[] octaves2; + private double[] octaves3; + private double[] octaves4; + private final MapGenDungeonVenus dungeonGenerator = new MapGenDungeonVenus( + new DungeonConfigurationVenus(VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_1), + VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_2), 30, 8, 16, 7, 7, RoomBossVenus.class, + RoomTreasureVenus.class)); + + public ChunkProviderVenus(World worldIn, long seed, boolean mapFeaturesEnabled) + { + this.world = worldIn; + this.worldType = worldIn.getWorldInfo().getTerrainType(); + this.rand = new Random(seed); + this.noiseGen1 = new NoiseGeneratorOctaves(this.rand, 16); + this.noiseGen2 = new NoiseGeneratorOctaves(this.rand, 16); + this.noiseGen3 = new NoiseGeneratorOctaves(this.rand, 8); + this.noiseGen4 = new NoiseGeneratorPerlin(this.rand, 4); + this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10); + this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16); + this.mobSpawnerNoise = new NoiseGeneratorOctaves(this.rand, 8); + this.noiseGenSmooth1 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.terrainCalcs = new double[825]; + this.parabolicField = new float[25]; + + for (int i = -2; i <= 2; ++i) + { + for (int j = -2; j <= 2; ++j) + { + float f = 10.0F / MathHelper.sqrt(i * i + j * j + 0.2F); + this.parabolicField[i + 2 + (j + 2) * 5] = f; + } + } + + NoiseGenerator[] noiseGens = + {noiseGen1, noiseGen2, noiseGen3, noiseGen4, noiseGen5, noiseGen6, mobSpawnerNoise}; + this.noiseGen1 = (NoiseGeneratorOctaves) noiseGens[0]; + this.noiseGen2 = (NoiseGeneratorOctaves) noiseGens[1]; + this.noiseGen3 = (NoiseGeneratorOctaves) noiseGens[2]; + this.noiseGen4 = (NoiseGeneratorPerlin) noiseGens[3]; + this.noiseGen5 = (NoiseGeneratorOctaves) noiseGens[4]; + this.noiseGen6 = (NoiseGeneratorOctaves) noiseGens[5]; + this.mobSpawnerNoise = (NoiseGeneratorOctaves) noiseGens[6]; + } + + private void setBlocksInChunk(int chunkX, int chunkZ, ChunkPrimer primer) + { + this.noiseGenSmooth1.setFrequencyAll(0.014999999664723873D); + this.biomesForGeneration = this.world.getBiomeProvider().getBiomesForGeneration(this.biomesForGeneration, chunkX * 4 - 2, chunkZ * 4 - 2, 10, 10); + this.createLandPerBiome(chunkX * 4, chunkZ * 4); + + for (int i = 0; i < 4; ++i) + { + int j = i * 5; + int k = (i + 1) * 5; + + for (int l = 0; l < 4; ++l) + { + int i1 = (j + l) * 33; + int j1 = (j + l + 1) * 33; + int k1 = (k + l) * 33; + int l1 = (k + l + 1) * 33; + + for (int i2 = 0; i2 < 32; ++i2) + { + double d0 = 0.125D; + double d1 = this.terrainCalcs[i1 + i2]; + double d2 = this.terrainCalcs[j1 + i2]; + double d3 = this.terrainCalcs[k1 + i2]; + double d4 = this.terrainCalcs[l1 + i2]; + double d5 = (this.terrainCalcs[i1 + i2 + 1] - d1) * d0; + double d6 = (this.terrainCalcs[j1 + i2 + 1] - d2) * d0; + double d7 = (this.terrainCalcs[k1 + i2 + 1] - d3) * d0; + double d8 = (this.terrainCalcs[l1 + i2 + 1] - d4) * d0; + + for (int j2 = 0; j2 < 8; ++j2) + { + double d9 = 0.25D; + double d10 = d1; + double d11 = d2; + double d12 = (d3 - d1) * d9; + double d13 = (d4 - d2) * d9; + + for (int k2 = 0; k2 < 4; ++k2) + { + double d14 = 0.25D; + double d16 = (d11 - d10) * d14; + double lvt_45_1_ = d10 - d16; + + for (int l2 = 0; l2 < 4; ++l2) + { + if ((lvt_45_1_ += d16) > this.noiseGenSmooth1.evalNoise(chunkX * 16 + (i * 4 + k2), chunkZ * 16 + (l * 4 + l2)) * 20.0) + { + primer.setBlockState(i * 4 + k2, i2 * 8 + j2, l * 4 + l2, BLOCK_FILL); + } + } + + d10 += d12; + d11 += d13; + } + + d1 += d5; + d2 += d6; + d3 += d7; + d4 += d8; + } + } + } + } + } + + private void replaceBlocksForBiome(int x, int z, ChunkPrimer primer, Biome[] biomes) + { + double d0 = 0.03125D; + this.stoneNoise = this.noiseGen4.getRegion(this.stoneNoise, x * 16, z * 16, 16, 16, d0 * 2.0D, d0 * 2.0D, 1.0D); + + for (int i = 0; i < 16; ++i) + { + for (int j = 0; j < 16; ++j) + { + Biome biomegenbase = biomes[j + i * 16]; + biomegenbase.genTerrainBlocks(this.world, this.rand, primer, x * 16 + i, z * 16 + j, this.stoneNoise[j + i * 16]); + } + } + } + + @Override + public Chunk generateChunk(int x, int z) + { + this.rand.setSeed(x * 341873128712L + z * 132897987541L); + ChunkPrimer chunkprimer = new ChunkPrimer(); + this.setBlocksInChunk(x, z, chunkprimer); + this.biomesForGeneration = this.world.getBiomeProvider().getBiomes(this.biomesForGeneration, x * 16, z * 16, 16, 16); + + this.caveGenerator.generate(this.world, x, z, chunkprimer); + this.lavaCaveGenerator.generate(this.world, x, z, chunkprimer); + + this.replaceBlocksForBiome(x, z, chunkprimer, this.biomesForGeneration); + + this.dungeonGenerator.generate(this.world, x, z, chunkprimer); + + Chunk chunk = new Chunk(this.world, chunkprimer, x, z); + byte[] abyte = chunk.getBiomeArray(); + + for (int i = 0; i < abyte.length; ++i) + { + abyte[i] = (byte) Biome.getIdForBiome(this.biomesForGeneration[i]); + } + + chunk.generateSkylightMap(); + return chunk; + } + + private void createLandPerBiome(int x, int z) + { + this.octaves4 = this.noiseGen6.generateNoiseOctaves(this.octaves4, x, z, 5, 5, 2000.0, 2000.0, 0.5); + this.octaves1 = this.noiseGen3.generateNoiseOctaves(this.octaves1, x, 0, z, 5, 33, 5, 8.555150000000001D, 4.277575000000001D, 8.555150000000001D); + this.octaves2 = this.noiseGen1.generateNoiseOctaves(this.octaves2, x, 0, z, 5, 33, 5, 684.412D, 684.412D, 684.412D); + this.octaves3 = this.noiseGen2.generateNoiseOctaves(this.octaves3, x, 0, z, 5, 33, 5, 684.412D, 684.412D, 684.412D); + int i = 0; + int j = 0; + + for (int k = 0; k < 5; ++k) + { + for (int l = 0; l < 5; ++l) + { + float f2 = 0.0F; + float f3 = 0.0F; + float f4 = 0.0F; + int i1 = 2; + Biome biomegenbase = this.biomesForGeneration[k + 2 + (l + 2) * 10]; + + for (int j1 = -i1; j1 <= i1; ++j1) + { + for (int k1 = -i1; k1 <= i1; ++k1) + { + Biome biomegenbase1 = this.biomesForGeneration[k + j1 + 2 + (l + k1 + 2) * 10]; + float f5 = biomegenbase1.getBaseHeight(); + float f6 = biomegenbase1.getHeightVariation(); + + if (this.worldType == WorldType.AMPLIFIED && f5 > 0.0F) + { + f5 = 1.0F + f5 * 2.0F; + f6 = 1.0F + f6 * 4.0F; + } + + float f7 = this.parabolicField[j1 + 2 + (k1 + 2) * 5] / (f5 + 2.0F); + + if (biomegenbase1.getBaseHeight() > biomegenbase.getBaseHeight()) + { + f7 /= 2.0F; + } + + f2 += f6 * f7; + f3 += f5 * f7; + f4 += f7; + } + } + + f2 = f2 / f4; + f3 = f3 / f4; + f2 = f2 * 0.9F + 0.1F; + f3 = (f3 * 4.0F - 1.0F) / 8.0F; + double d7 = this.octaves4[j] / 4000.0D; + + if (d7 < 0.0D) + { + d7 = -d7 * 0.3D; + } + + d7 = d7 * 3.0D - 2.0D; + + if (d7 < 0.0D) + { + d7 = d7 / 2.0D; + + if (d7 < -1.0D) + { + d7 = -1.0D; + } + + d7 = d7 / 1.4D; + d7 = d7 / 2.0D; + } else + { + if (d7 > 1.0D) + { + d7 = 1.0D; + } + + d7 = d7 / 8.0D; + } + + ++j; + double d8 = f3; + double d9 = f2; + d8 = d8 + d7 * 0.2D; + d8 = d8 * 8.5 / 8.0D; + double d0 = 8.5 + d8 * 4.0D; + + for (int l1 = 0; l1 < 33; ++l1) + { + double d1 = (l1 - d0) * 12.0 * 128.0D / 256.0D / d9; + + if (d1 < 0.0D) + { + d1 *= 4.0D; + } + + double d3 = this.octaves3[i] / 1024.0; + double d5 = d3 - d1; + + if (l1 > 29) + { + double d6 = (l1 - 29) / 3.0F; + d5 = d5 * (1.0D - d6) + -10.0D * d6; + } + + this.terrainCalcs[i] = d5; + ++i; + } + } + } + } + + @Override + public void populate(int x, int z) + { + BlockFalling.fallInstantly = true; + int i = x * 16; + int j = z * 16; + BlockPos blockpos = new BlockPos(i, 0, j); + Biome biomegenbase = this.world.getBiome(blockpos.add(16, 0, 16)); + this.rand.setSeed(this.world.getSeed()); + long k = this.rand.nextLong() / 2L * 2L + 1L; + long l = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(x * k + z * l ^ this.world.getSeed()); + boolean isValley = biomegenbase instanceof BiomeAdaptive && ((BiomeAdaptive) biomegenbase).isInstance(BiomeGenVenusValley.class); + ForgeEventFactory.onChunkPopulate(true, this, this.world, this.rand, x, z, false); + if (this.rand.nextInt(isValley ? 3 : 10) == 0) + { + int i2 = this.rand.nextInt(16) + 8; + int l2 = this.rand.nextInt(this.rand.nextInt(248) + 8); + int k3 = this.rand.nextInt(16) + 8; + + (new WorldGenLakesVenus()).generate(this.world, this.rand, blockpos.add(i2, l2, k3)); + } + + if (isValley) + { + if (this.rand.nextInt(5) == 0) + { + int i2 = this.rand.nextInt(16) + 8; + int k3 = this.rand.nextInt(16) + 8; + int l2 = this.world.getTopSolidOrLiquidBlock(blockpos.add(i2, 0, k3)).getY() - 10 - this.rand.nextInt(5); + + (new WorldGenVaporPool()).generate(this.world, this.rand, blockpos.add(i2, l2, k3)); + } else if (this.rand.nextInt(190) == 0) + { + int i2 = this.rand.nextInt(16) + 8; + int k3 = this.rand.nextInt(16) + 8; + int l2 = this.world.getTopSolidOrLiquidBlock(blockpos.add(i2, 0, k3)).getY(); + + (new WorldGenCrashedProbe()).generate(this.world, this.rand, blockpos.add(i2, l2, k3)); + } + } + + this.dungeonGenerator.generateStructure(this.world, this.rand, new ChunkPos(x, z)); + + biomegenbase.decorate(this.world, this.rand, new BlockPos(i, 0, j)); + WorldEntitySpawner.performWorldGenSpawning(this.world, biomegenbase, i + 8, j + 8, 16, 16, this.rand); + ForgeEventFactory.onChunkPopulate(false, this, this.world, this.rand, x, z, false); + BlockFalling.fallInstantly = false; + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + Biome biomegenbase = this.world.getBiome(pos); + + return biomegenbase.getSpawnableList(creatureType); + } + + @Override + public void recreateStructures(Chunk chunk, int x, int z) + { + this.dungeonGenerator.generate(this.world, x, z, null); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenCaveVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenCaveVenus.java new file mode 100644 index 00000000..ac6d5bca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenCaveVenus.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenCaveVenus extends MapGenBaseMeta +{ + + public static final int BREAK_THROUGH_CHANCE = 25; // 1 in n chance + + protected void generateLargeCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10) + { + this.generateCaveNode(par1, par3, par4, primer, par6, par8, par10, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10, float par12, float par13, float par14, int par15, int par16, double par17) + { + final double d4 = par3 * 16 + 8; + final double d5 = par4 * 16 + 8; + float f3 = 0.0F; + float f4 = 0.0F; + final Random random = new Random(par1); + + if (par16 <= 0) + { + final int j1 = this.range * 16 - 16; + par16 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (par15 == -1) + { + par15 = par16 / 2; + flag = true; + } + + final int k1 = random.nextInt(par16 / 2) + par16 / 4; + + for (final boolean flag1 = random.nextInt(6) == 0; par15 < par16; ++par15) + { + final double d6 = 1.5D + MathHelper.sin(par15 * (float) Math.PI / par16) * par12 * 1.0F; + final double d7 = d6 * par17; + final float f5 = MathHelper.cos(par14); + final float f6 = MathHelper.sin(par14); + par6 += MathHelper.cos(par13) * f5; + par8 += f6; + par10 += MathHelper.sin(par13) * f5; + + if (flag1) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += f4 * 0.1F; + par13 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + + if (!flag && par15 == k1 && par12 > 1.0F && par16 > 0) + { + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 - Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 + Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) + { + final double d8 = par6 - d4; + final double d9 = par10 - d5; + final double d10 = par16 - par15; + final double d11 = par12 + 2.0F + 16.0F; + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) + { + return; + } + + if (par6 >= d4 - 16.0D - d6 * 2.0D && par10 >= d5 - 16.0D - d6 * 2.0D && par6 <= d4 + 16.0D + d6 * 2.0D && par10 <= d5 + 16.0D + d6 * 2.0D) + { + int l1 = MathHelper.floor(par6 - d6) - par3 * 16 - 1; + int i2 = MathHelper.floor(par6 + d6) - par3 * 16 + 1; + int j2 = MathHelper.floor(par8 - d7) - 1; + int k2 = MathHelper.floor(par8 + d7) + 1; + int l2 = MathHelper.floor(par10 - d6) - par4 * 16 - 1; + int i3 = MathHelper.floor(par10 + d6) - par4 * 16 + 1; + + if (l1 < 0) + { + l1 = 0; + } + + if (i2 > 16) + { + i2 = 16; + } + + if (j2 < 1) + { + j2 = 1; + } + + if (k2 > 120) + { + k2 = 120; + } + + if (l2 < 0) + { + l2 = 0; + } + + if (i3 > 16) + { + i3 = 16; + } + + int j3; + for (j3 = l1; j3 < i2; ++j3) + { + for (int l3 = l2; l3 < i3; ++l3) + { + for (int i4 = k2 + 1; i4 >= j2 - 1; --i4) + { + if (i4 >= 0 && i4 < 128) + { + if (i4 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && l3 != l2 && l3 != i3 - 1) + { + i4 = j2; + } + } + } + } + } + + if (true) + { + + for (int localY = j2; localY < k2; localY++) + { + final double yfactor = (localY + 0.5D - par8) / d7; + final double yfactorSq = yfactor * yfactor; + + for (int localX = l1; localX < i2; localX++) + { + final double zfactor = (localX + par3 * 16 + 0.5D - par6) / d6; + final double zfactorSq = zfactor * zfactor; + + for (int localZ = l2; localZ < i3; localZ++) + { + final double xfactor = (localZ + par4 * 16 + 0.5D - par10) / d6; + final double xfactorSq = xfactor * xfactor; + + if (xfactorSq + zfactorSq < 1.0D) + { + if (yfactor > -0.7D && xfactorSq + yfactorSq + zfactorSq < 1.0D) + { + IBlockState state = primer.getBlockState(localX, localY, localZ); + Block block = state.getBlock(); + int metadata = state.getBlock().getMetaFromState(state); + if (block == VenusBlocks.venusBlock) + { + if (metadata == 1) + { + primer.setBlockState(localX, localY, localZ, Blocks.AIR.getDefaultState()); + } + } + } + } + } + } + } + + if (flag) + { + break; + } + } + } + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int par2, int par3, int par4, int par5, ChunkPrimer primer) + { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + + if (this.rand.nextInt(15) != 0) + { + var7 = 0; + } + + for (int var8 = 0; var8 < var7; ++var8) + { + final double var9 = par2 * 16 + this.rand.nextInt(16); + final double var11 = this.rand.nextInt(this.rand.nextInt(120) + 8); + final double var13 = par3 * 16 + this.rand.nextInt(16); + int var15 = 1; + + if (this.rand.nextInt(4) == 0) + { + this.generateLargeCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for (int var16 = 0; var16 < var15; ++var16) + { + final float var17 = this.rand.nextFloat() * Constants.twoPI; + final float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + + if (this.rand.nextInt(10) == 0) + { + var19 *= this.rand.nextFloat() * this.rand.nextFloat() * 3.0F + 1.0F; + } + + this.generateCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenLavaVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenLavaVenus.java new file mode 100644 index 00000000..0b38b4b0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenLavaVenus.java @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenLavaVenus extends MapGenBaseMeta +{ + + protected void generateCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10, float par12, float par13, float par14, int par15, int par16, double par17) + { + final double d4 = par3 * 16 + 8; + final double d5 = par4 * 16 + 8; + float f3 = 0.0F; + float f4 = 0.0F; + final Random random = new Random(par1); + + if (par16 <= 0) + { + final int j1 = this.range * 16 - 16; + par16 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (par15 == -1) + { + par15 = par16 / 2; + flag = true; + } + + final int k1 = random.nextInt(par16 / 2) + par16 / 4; + + for (final boolean flag1 = random.nextInt(6) == 0; par15 < par16; ++par15) + { + final double d6 = 0.5D + MathHelper.sin(par15 * (float) Math.PI / par16) * par12 * 1.0F; + final double d7 = d6 * par17; + final float f5 = MathHelper.cos(par14); + final float f6 = MathHelper.sin(par14); + par6 += MathHelper.cos(par13) * f5; + par8 += f6; + par10 += MathHelper.sin(par13) * f5; + + if (flag1) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += f4 * 0.1F; + par13 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + + if (!flag && par15 == k1 && par12 > 1.0F && par16 > 0) + { + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 - Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 + Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) + { + final double d8 = par6 - d4; + final double d9 = par10 - d5; + final double d10 = par16 - par15; + final double d11 = par12 + 2.0F + 16.0F; + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) + { + return; + } + + if (par6 >= d4 - 16.0D - d6 * 2.0D && par10 >= d5 - 16.0D - d6 * 2.0D && par6 <= d4 + 16.0D + d6 * 2.0D && par10 <= d5 + 16.0D + d6 * 2.0D) + { + int l1 = MathHelper.floor(par6 - d6) - par3 * 16 - 1; + int i2 = MathHelper.floor(par6 + d6) - par3 * 16 + 1; + int j2 = MathHelper.floor(par8 - d7) - 1; + int k2 = MathHelper.floor(par8 + d7) + 1; + int l2 = MathHelper.floor(par10 - d6) - par4 * 16 - 1; + int i3 = MathHelper.floor(par10 + d6) - par4 * 16 + 1; + + if (l1 < 0) + { + l1 = 0; + } + + if (i2 > 16) + { + i2 = 16; + } + + if (j2 < 1) + { + j2 = 1; + } + +// if (k2 > 120) +// { +// k2 = 120; +// } + + if (l2 < 0) + { + l2 = 0; + } + + if (i3 > 16) + { + i3 = 16; + } + + int j3; + for (j3 = l1; j3 < i2; ++j3) + { + for (int l3 = l2; l3 < i3; ++l3) + { + for (int i4 = k2 + 1; i4 >= j2 - 1; --i4) + { + if (i4 >= 0 && i4 < 128) + { + if (i4 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && l3 != l2 && l3 != i3 - 1) + { + i4 = j2; + } + } + } + } + } + + if (true) + { + + for (int localY = j2; localY < k2; localY++) + { + final double yfactor = (localY + 0.5D - par8) / d7; + final double yfactorSq = yfactor * yfactor; + + for (int localX = l1; localX < i2; localX++) + { + final double zfactor = (localX + par3 * 16 + 0.5D - par6) / d6; + final double zfactorSq = zfactor * zfactor; + + for (int localZ = l2; localZ < i3; localZ++) + { + final double xfactor = (localZ + par4 * 16 + 0.5D - par10) / d6; + final double xfactorSq = xfactor * xfactor; + + if (xfactorSq + zfactorSq < 1.0D) + { + if (yfactor > -0.7D && xfactorSq + yfactorSq + zfactorSq < 1.0D) + { + IBlockState toReplace = primer.getBlockState(localX, localY, localZ); + if (toReplace.getBlock() == VenusBlocks.venusBlock) + { + BlockBasicVenus.EnumBlockBasicVenus type = (BlockBasicVenus.EnumBlockBasicVenus) toReplace.getValue(BlockBasicVenus.BASIC_TYPE_VENUS); + if (type == BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD || type == BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT) + { + IBlockState north = localZ == 0 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX, localY, localZ - 1); + IBlockState south = localZ == 15 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX, localY, localZ + 1); + IBlockState east = localX == 15 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX + 1, localY, localZ); + IBlockState west = localX == 0 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX - 1, localY, localZ); + IBlockState below = localY == 0 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX, localY - 1, localZ); + if (north.getBlock() == Blocks.AIR || south.getBlock() == Blocks.AIR || east.getBlock() == Blocks.AIR || west.getBlock() == Blocks.AIR + || below.getBlock() == Blocks.AIR) + { + primer.setBlockState(localX, localY, localZ, + VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_MAGMA)); + } else + { + primer.setBlockState(localX, localY, localZ, Blocks.LAVA.getDefaultState()); + } + } + } + } + } + } + } + } + + if (flag) + { + break; + } + } + } + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int par2, int par3, int par4, int par5, ChunkPrimer primer) + { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + + if (this.rand.nextInt(25) != 0) + { + var7 = 0; + } + + for (int var8 = 0; var8 < var7; ++var8) + { + final double var9 = par2 * 16 + this.rand.nextInt(16); + final double var11 = this.rand.nextInt(this.rand.nextInt(120) + 8); + final double var13 = par3 * 16 + this.rand.nextInt(16); + + for (int var16 = 0; var16 < 1; ++var16) + { + final float var17 = this.rand.nextFloat() * Constants.twoPI; + final float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + + this.generateCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13, 1.0F, var17, var18, 0, 0, 1.0D); + } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenCrashedProbe.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenCrashedProbe.java new file mode 100644 index 00000000..cb9e296e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenCrashedProbe.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.event.LootHandlerGC; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenCrashedProbe extends WorldGenerator +{ + + public WorldGenCrashedProbe() + { + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + for (position = position.add(-8, 0, -8); position.getY() > 5 && worldIn.isAirBlock(position); position = position.down()) + { + ; + } + + if (position.getY() <= 4) + { + return false; + } + + int radius = 5 + rand.nextInt(4); + int radiusSq = radius * radius; + + // Check this crater doesn't cut into a mountain + for (int poolX = -radius; poolX <= radius; poolX++) + { + for (int poolY = -radius; poolY <= Math.min(256 - position.getY(), 50); poolY++) + { + for (int poolZ = -radius; poolZ <= radius; poolZ++) + { + BlockPos pos = new BlockPos(poolX + position.getX(), poolY + position.getY(), poolZ + position.getZ()); + if (poolY > 15 && !worldIn.getBlockState(pos).getBlock().isAir(worldIn.getBlockState(pos), worldIn, pos)) + { + return false; + } + } + } + } + + for (int poolX = -radius - 1; poolX <= radius + 1; poolX++) + { + for (int poolY = -radius - 1; poolY <= 256 - position.getY(); poolY++) + { + for (int poolZ = -radius - 1; poolZ <= radius + 1; poolZ++) + { + int distance = poolX * poolX + Math.min(0, poolY) * Math.min(0, poolY) + poolZ * poolZ; + + BlockPos pos = new BlockPos(poolX + position.getX(), poolY + position.getY(), poolZ + position.getZ()); + if (distance <= radiusSq) + { + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState(), 2); + } else if (worldIn.getBlockState(pos).getBlock() == VenusBlocks.venusBlock && poolY < 0 && rand.nextInt(5) == 0) + { + worldIn.setBlockState(pos, VenusBlocks.scorchedRock.getDefaultState(), 2); + } + } + } + } + + BlockPos blockpos = position.add(0, -radius + 1, 0); + worldIn.setBlockState(blockpos, VenusBlocks.crashedProbe.getDefaultState(), 3); + TileEntityCrashedProbe probe = (TileEntityCrashedProbe) worldIn.getTileEntity(blockpos); + + if (probe != null) + { + for (int i = 0; i < probe.getSizeInventory(); ++i) + { + // Clear contents + probe.setInventorySlotContents(i, ItemStack.EMPTY); + } + + probe.setLootTable(LootHandlerGC.TABLE_CRASHED_PROBE, rand.nextLong()); + probe.setDropCore(); + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenLakesVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenLakesVenus.java new file mode 100644 index 00000000..d6472f44 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenLakesVenus.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenLakesVenus extends WorldGenerator +{ + + public WorldGenLakesVenus() + { + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + for (position = position.add(-8, 0, -8); position.getY() > 5 && worldIn.isAirBlock(position); position = position.down()) + { + ; + } + + if (position.getY() <= 4) + { + return false; + } else + { + position = position.down(4); + boolean[] aboolean = new boolean[2048]; + int i = rand.nextInt(4) + 4; + + for (int j = 0; j < i; ++j) + { + double d0 = rand.nextDouble() * 6.0D + 3.0D; + double d1 = rand.nextDouble() * 4.0D + 2.0D; + double d2 = rand.nextDouble() * 6.0D + 3.0D; + double d3 = rand.nextDouble() * (16.0D - d0 - 2.0D) + 1.0D + d0 / 2.0D; + double d4 = rand.nextDouble() * (8.0D - d1 - 4.0D) + 2.0D + d1 / 2.0D; + double d5 = rand.nextDouble() * (16.0D - d2 - 2.0D) + 1.0D + d2 / 2.0D; + + for (int l = 1; l < 15; ++l) + { + for (int i1 = 1; i1 < 15; ++i1) + { + for (int j1 = 1; j1 < 7; ++j1) + { + double d6 = ((double) l - d3) / (d0 / 2.0D); + double d7 = ((double) j1 - d4) / (d1 / 2.0D); + double d8 = ((double) i1 - d5) / (d2 / 2.0D); + double d9 = d6 * d6 + d7 * d7 + d8 * d8; + + if (d9 < 1.0D) + { + aboolean[(l * 16 + i1) * 8 + j1] = true; + } + } + } + } + } + + for (int k1 = 0; k1 < 16; ++k1) + { + for (int l2 = 0; l2 < 16; ++l2) + { + for (int k = 0; k < 8; ++k) + { + boolean flag = !aboolean[(k1 * 16 + l2) * 8 + k] + && (k1 < 15 && aboolean[((k1 + 1) * 16 + l2) * 8 + k] || k1 > 0 && aboolean[((k1 - 1) * 16 + l2) * 8 + k] || l2 < 15 && aboolean[(k1 * 16 + l2 + 1) * 8 + k] + || l2 > 0 && aboolean[(k1 * 16 + (l2 - 1)) * 8 + k] || k < 7 && aboolean[(k1 * 16 + l2) * 8 + k + 1] || k > 0 && aboolean[(k1 * 16 + l2) * 8 + (k - 1)]); + + if (flag) + { + IBlockState state = worldIn.getBlockState(position.add(k1, k, l2)); + Material material = state.getMaterial(); + + if (k >= 4 && material.isLiquid()) + { + return false; + } + + if (k < 4 && !material.isSolid() && worldIn.getBlockState(position.add(k1, k, l2)).getBlock() != Blocks.LAVA) + { + return false; + } + } + } + } + } + + for (int l1 = 0; l1 < 16; ++l1) + { + for (int i3 = 0; i3 < 16; ++i3) + { + for (int i4 = 0; i4 < 8; ++i4) + { + if (aboolean[(l1 * 16 + i3) * 8 + i4]) + { + worldIn.setBlockState(position.add(l1, i4, i3), i4 >= 4 ? Blocks.AIR.getDefaultState() : Blocks.LAVA.getDefaultState(), 2); + } + } + } + } + + for (int i2 = 0; i2 < 16; ++i2) + { + for (int j3 = 0; j3 < 16; ++j3) + { + for (int j4 = 4; j4 < 8; ++j4) + { + if (aboolean[(i2 * 16 + j3) * 8 + j4]) + { + BlockPos blockpos = position.add(i2, j4 - 1, j3); + + if (worldIn.getBlockState(blockpos).getBlock() == Blocks.DIRT && worldIn.getLightFor(EnumSkyBlock.SKY, position.add(i2, j4, j3)) > 0) + { + Biome biomegenbase = worldIn.getBiome(blockpos); + + if (biomegenbase.topBlock.getBlock() == Blocks.MYCELIUM) + { + worldIn.setBlockState(blockpos, Blocks.MYCELIUM.getDefaultState(), 2); + } else + { + worldIn.setBlockState(blockpos, Blocks.GRASS.getDefaultState(), 2); + } + } + } + } + } + } + + for (int j2 = 0; j2 < 16; ++j2) + { + for (int k3 = 0; k3 < 16; ++k3) + { + for (int k4 = 0; k4 < 8; ++k4) + { + boolean flag1 = !aboolean[(j2 * 16 + k3) * 8 + k4] + && (j2 < 15 && aboolean[((j2 + 1) * 16 + k3) * 8 + k4] || j2 > 0 && aboolean[((j2 - 1) * 16 + k3) * 8 + k4] || k3 < 15 && aboolean[(j2 * 16 + k3 + 1) * 8 + k4] + || k3 > 0 && aboolean[(j2 * 16 + (k3 - 1)) * 8 + k4] || k4 < 7 && aboolean[(j2 * 16 + k3) * 8 + k4 + 1] || k4 > 0 && aboolean[(j2 * 16 + k3) * 8 + (k4 - 1)]); + + IBlockState state = worldIn.getBlockState(position.add(j2, k4, k3)); + if (flag1 && (k4 < 4 || rand.nextInt(2) != 0) && state.getMaterial().isSolid()) + { + worldIn.setBlockState(position.add(j2, k4, k3), + VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_MAGMA), 2); + } + } + } + } + + return true; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenVaporPool.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenVaporPool.java new file mode 100644 index 00000000..b5536d06 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenVaporPool.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenVaporPool extends WorldGenerator +{ + + public WorldGenVaporPool() + { + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + if (position.getY() <= 4) + { + return false; + } + + IBlockState venusSoft = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + + int radius = 5 + rand.nextInt(4); + int radiusSq = radius * radius; + for (int poolX = -radius; poolX <= radius; poolX++) + { + for (int poolY = -radius; poolY <= radius; poolY++) + { + for (int poolZ = -radius; poolZ <= radius; poolZ++) + { + int distance = poolX * poolX + poolY * poolY + poolZ * poolZ; + + if (distance <= radiusSq) + { + BlockPos pos = new BlockPos(poolX + position.getX(), poolY + position.getY(), poolZ + position.getZ()); + worldIn.setBlockState(pos, distance >= radiusSq - 16 ? venusSoft : (poolY <= 0 ? VenusBlocks.sulphuricAcid.getDefaultState() : Blocks.AIR.getDefaultState()), + distance == radiusSq ? 3 : 2); + } + } + } + } + + boolean firstSet = false; + for (int i = 255; i >= position.getY() + 1; --i) + { + BlockPos pos = new BlockPos(position.getX(), i, position.getZ()); + if (worldIn.getBlockState(pos).getBlock() != Blocks.AIR) + { + if (!firstSet) + { + worldIn.setBlockState(pos, VenusBlocks.spout.getDefaultState(), 3); + firstSet = true; + } else + { + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState(), 2); + } + } + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/CorridorVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/CorridorVenus.java new file mode 100644 index 00000000..d660f799 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/CorridorVenus.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.lang.reflect.Constructor; +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class CorridorVenus extends SizedPieceVenus +{ + + public CorridorVenus() + { + } + + public CorridorVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, sizeX, sizeY, sizeZ, direction); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.boundingBox = new StructureBoundingBox(blockPosX, configuration.getYPosition(), blockPosZ, blockPosX + sizeX, configuration.getYPosition() + sizeY, blockPosZ + sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i < this.boundingBox.getXSize(); i++) + { + for (int j = 0; j < this.boundingBox.getYSize(); j++) + { + for (int k = 0; k < this.boundingBox.getZSize(); k++) + { + if (j == 2 && this.getDirection().getAxis() == EnumFacing.Axis.Z && (k + 1) % 4 == 0 && k != this.boundingBox.getZSize() - 1) + { + if (i == 0 || i == this.boundingBox.getXSize() - 1) + { + this.setBlockState(worldIn, Blocks.LAVA.getDefaultState(), i, j, k, this.boundingBox); + } else if (i == 1 || i == this.boundingBox.getXSize() - 2) + { + this.setBlockState(worldIn, Blocks.IRON_BARS.getDefaultState(), i, j, k, this.boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } else if (j == 2 && this.getDirection().getAxis() == EnumFacing.Axis.X && (i + 1) % 4 == 0 && i != this.boundingBox.getXSize() - 1) + { + if (k == 0 || k == this.boundingBox.getZSize() - 1) + { + this.setBlockState(worldIn, Blocks.LAVA.getDefaultState(), i, j, k, this.boundingBox); + } else if (k == 1 || k == this.boundingBox.getZSize() - 2) + { + this.setBlockState(worldIn, Blocks.IRON_BARS.getDefaultState(), i, j, k, this.boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } else if ((this.getDirection().getAxis() == EnumFacing.Axis.Z && (i == 1 || i == this.boundingBox.getXSize() - 2)) || j == 0 || j == this.boundingBox.getYSize() - 1 + || (this.getDirection().getAxis() == EnumFacing.Axis.X && (k == 1 || k == this.boundingBox.getZSize() - 2))) + { + DungeonConfigurationVenus venusConfig = (DungeonConfigurationVenus) this.configuration; + this.setBlockState(worldIn, j == 0 || j == this.boundingBox.getYSize() - 1 ? venusConfig.getBrickBlockFloor() : this.configuration.getBrickBlock(), i, j, k, this.boundingBox); + } else if ((this.getDirection().getAxis() == EnumFacing.Axis.Z && (i == 0 || i == this.boundingBox.getXSize() - 1)) + || (this.getDirection().getAxis() == EnumFacing.Axis.X && (k == 0 || k == this.boundingBox.getZSize() - 1))) + { + DungeonConfigurationVenus venusConfig = (DungeonConfigurationVenus) this.configuration; + this.setBlockState(worldIn, j == 0 || j == this.boundingBox.getYSize() - 1 ? venusConfig.getBrickBlockFloor() : this.configuration.getBrickBlock(), i, j, k, this.boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } + } + } + + return true; + } + + private T getRoom(Class clazz, DungeonStartVenus startPiece, Random rand) + { + try + { + Constructor c0 = clazz.getConstructor(DungeonConfigurationVenus.class, Random.class, Integer.TYPE, Integer.TYPE, EnumFacing.class); + T dummy = (T) c0.newInstance(this.configuration, rand, 0, 0, this.getDirection().getOpposite()); + StructureBoundingBox extension = getExtension(this.getDirection(), getDirection().getAxis() == EnumFacing.Axis.X ? dummy.getSizeX() : dummy.getSizeZ(), + getDirection().getAxis() == EnumFacing.Axis.X ? dummy.getSizeZ() : dummy.getSizeX()); + if (startPiece.checkIntersection(extension)) + { + return null; + } + int sizeX = extension.maxX - extension.minX; + int sizeZ = extension.maxZ - extension.minZ; + int sizeY = dummy.getSizeY(); + int blockX = extension.minX; + int blockZ = extension.minZ; + Constructor c1 = clazz.getConstructor(DungeonConfigurationVenus.class, Random.class, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, EnumFacing.class); + return (T) c1.newInstance(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + int pieceCount = startPiece.attachedComponents.size(); + if (pieceCount > 10 && startPiece.attachedComponents.get(pieceCount - 2) instanceof RoomBossVenus) + { + try + { + return getRoom(this.configuration.getTreasureRoom(), startPiece, rand); + } catch (Exception e) + { + e.printStackTrace(); + } + } else + { + int bossRoomChance = Math.max((int) (20.0 / (pieceCount - 10)), 1); + boolean bossRoom = pieceCount > 25 || (pieceCount > 10 && rand.nextInt(bossRoomChance) == 0); + if (bossRoom) + { + try + { + return getRoom(this.configuration.getBossRoom(), startPiece, rand); + } catch (Exception e) + { + e.printStackTrace(); + return null; + } + } else + { + StructureBoundingBox extension = getExtension(this.getDirection(), rand.nextInt(4) + 6, rand.nextInt(4) + 6); + + if (startPiece.checkIntersection(extension)) + { + return null; + } + + int sizeX = extension.maxX - extension.minX; + int sizeZ = extension.maxZ - extension.minZ; + int sizeY = configuration.getRoomHeight(); + int blockX = extension.minX; + int blockZ = extension.minZ; + + if (Math.abs(startPiece.getBoundingBox().maxZ - boundingBox.minZ) > 200) + { + return null; + } + + if (Math.abs(startPiece.getBoundingBox().maxX - boundingBox.minX) > 200) + { + return null; + } + + PieceVenus lastPiece = pieceCount <= 2 ? null : (PieceVenus) startPiece.attachedComponents.get(pieceCount - 2); + + if (!(lastPiece instanceof RoomSpawnerVenus)) + { + return new RoomSpawnerVenus(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } else + { + if (rand.nextInt(2) == 0) + { + return new RoomEmptyVenus(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } else + { + return new RoomChestVenus(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } + } + } + + } + + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DirectionalPieceVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DirectionalPieceVenus.java new file mode 100644 index 00000000..53212db9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DirectionalPieceVenus.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class DirectionalPieceVenus extends PieceVenus +{ + + private EnumFacing direction; + + public DirectionalPieceVenus() + { + } + + public DirectionalPieceVenus(DungeonConfigurationVenus configuration, EnumFacing direction) + { + super(configuration); + this.direction = direction; + } + + public EnumFacing getDirection() + { + return direction; + } + + public void setDirection(EnumFacing direction) + { + this.direction = direction; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("direction", this.direction.ordinal()); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + + if (tagCompound.hasKey("direction")) + { + this.direction = EnumFacing.byIndex(tagCompound.getInteger("direction")); + } else + { + this.direction = EnumFacing.NORTH; + } + } + + public PieceVenus getCorridor(Random rand, DungeonStartVenus startPiece, int maxAttempts, boolean small) + { + EnumFacing randomDir; + int blockX; + int blockZ; + int sizeX; + int sizeZ; + boolean valid; + int attempts = maxAttempts; + int randDir = rand.nextInt(3); + do + { + randomDir = EnumFacing.byHorizontalIndex((getDirection().getOpposite().getHorizontalIndex() + 1 + randDir) % 4); + StructureBoundingBox extension = + getExtension(randomDir, this.configuration.getHallwayLengthMin() + rand.nextInt(this.configuration.getHallwayLengthMax() - this.configuration.getHallwayLengthMin()), 5); + blockX = extension.minX; + blockZ = extension.minZ; + sizeX = extension.maxX - extension.minX; + sizeZ = extension.maxZ - extension.minZ; + valid = !startPiece.checkIntersection(extension); + attempts--; + randDir++; + } while (!valid && attempts > 0); + + if (!valid) + { + return null; + } + + return new CorridorVenus(this.configuration, rand, blockX, blockZ, sizeX, small ? 3 : this.configuration.getHallwayHeight(), sizeZ, randomDir); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonConfigurationVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonConfigurationVenus.java new file mode 100644 index 00000000..8c7d20ab --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonConfigurationVenus.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; + +public class DungeonConfigurationVenus extends DungeonConfiguration +{ + + private IBlockState brickBlockFloor; + + public DungeonConfigurationVenus() + { + } + + public DungeonConfigurationVenus(IBlockState brickBlock, IBlockState brickBlockFloor, int yPosition, int hallwayLengthMin, int hallwayLengthMax, int hallwayHeight, int roomHeight, Class bossRoom, Class treasureRoom) + { + super(brickBlock, yPosition, hallwayLengthMin, hallwayLengthMax, hallwayHeight, roomHeight, bossRoom, treasureRoom); + this.brickBlockFloor = brickBlockFloor; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) + { + tagCompound.setString("brickBlock", Block.REGISTRY.getNameForObject(this.brickBlockFloor.getBlock()).toString()); + + return super.writeToNBT(tagCompound); + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) + { + try + { + this.brickBlockFloor = Block.getBlockFromName(tagCompound.getString("brickBlock")).getStateFromMeta(tagCompound.getInteger("brickBlockMeta")); + } catch (Exception e) + { + System.err.println("Failed to read dungeon configuration from NBT"); + e.printStackTrace(); + } + + super.readFromNBT(tagCompound); + } + + public IBlockState getBrickBlockFloor() + { + return brickBlockFloor; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonStartVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonStartVenus.java new file mode 100644 index 00000000..45f9fb00 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonStartVenus.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public class DungeonStartVenus extends EntranceCraterVenus +{ + + public List attachedComponents = Lists.newArrayList(); + public List componentBounds = Lists.newArrayList(); + + public DungeonStartVenus() + { + } + + public DungeonStartVenus(World world, DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand, blockPosX, blockPosZ); + } + + @Override + public void buildComponent(StructureComponent componentIn, List listIn, Random rand) + { + boolean validAttempt = false; + final int maxAttempts = 10; + int attempts = 0; + while (!validAttempt && attempts < maxAttempts) + { + attachedComponents.clear(); + componentBounds.clear(); + componentBounds.add(this.boundingBox); + listIn.clear(); + listIn.add(this); + PieceVenus next = getNextPiece(this, rand); + while (next != null) + { + listIn.add(next); + attachedComponents.add(next); + componentBounds.add(next.getBoundingBox()); + + next = next.getNextPiece(this, rand); + } + if (attachedComponents.size() >= 3 && attachedComponents.get(attachedComponents.size() - 1) instanceof RoomTreasureVenus + && attachedComponents.get(attachedComponents.size() - 3) instanceof RoomBossVenus) + { + validAttempt = true; + } + attempts++; + } + + GalacticraftPlanets.logger.debug("Dungeon generation took " + attempts + " attempt(s)"); + + if (!validAttempt) + { + int xPos = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2; + int zPos = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2; + System.err.println("Could not find valid venus dungeon layout! This is a bug, please report it, including your world seed (/seed) and dungeon location (" + xPos + ", " + zPos + ")"); + } + } + + public boolean checkIntersection(int blockX, int blockZ, int sizeX, int sizeZ) + { + return this.checkIntersection(new StructureBoundingBox(blockX, blockZ, blockX + sizeX, blockZ + sizeZ)); + } + + public boolean checkIntersection(StructureBoundingBox bounds) + { + for (int i = 0; i < componentBounds.size() - 1; ++i) + { + StructureBoundingBox boundingBox = componentBounds.get(i); + if (boundingBox.intersectsWith(bounds)) + { + return true; + } + } + + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/EntranceCraterVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/EntranceCraterVenus.java new file mode 100644 index 00000000..9585955e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/EntranceCraterVenus.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class EntranceCraterVenus extends SizedPieceVenus +{ + + private final int range = 16; + + public EntranceCraterVenus() + { + } + + public EntranceCraterVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand.nextInt(4) + 6, 12, rand.nextInt(4) + 6, EnumFacing.Plane.HORIZONTAL.random(rand)); + this.setCoordBaseMode(EnumFacing.SOUTH); + + this.boundingBox = new StructureBoundingBox(blockPosX - range, configuration.getYPosition() + 11, blockPosZ - range, blockPosX + range, 150, blockPosZ + range); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + int maxLevel = 0; + + for (int i = -range; i <= range; i++) + { + for (int k = -range; k <= range; k++) + { + int j = 150; + int x = this.getXWithOffset(i + range, k + range); + int z = this.getZWithOffset(i + range, k + range); + + while (j >= 0) + { + j--; + + int y = this.getYWithOffset(j); + BlockPos blockpos = new BlockPos(x, y, z); + Block block = worldIn.getBlockState(blockpos).getBlock(); + + if (Blocks.AIR != block) + { + break; + } + } + + maxLevel = Math.max(maxLevel, j + 3); + } + } + + Mirror mirror = Mirror.NONE; + Rotation rotation = Rotation.NONE; + if (this.getCoordBaseMode() != null) + { + switch (this.getCoordBaseMode()) + { + case SOUTH: + mirror = Mirror.LEFT_RIGHT; + break; + case WEST: + mirror = Mirror.LEFT_RIGHT; + rotation = Rotation.CLOCKWISE_90; + break; + case EAST: + rotation = Rotation.CLOCKWISE_90; + break; + default: + break; + } + } + + for (int i = -range; i < range; i++) + { + for (int k = -range; k < range; k++) + { + final double xDev = i / 20D; + final double zDev = k / 20D; + final double distance = xDev * xDev + zDev * zDev; + final int depth = (int) Math.abs(0.5 / (distance + .00001D)); + int helper = 0; + for (int j = maxLevel; j > 1 && helper <= depth; j--) + //TODO verify this + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i + range, k + range), this.getYWithOffset(j), this.getZWithOffset(i + range, k + range)); + IBlockState state = Blocks.AIR.getDefaultState(); + + if (mirror != Mirror.NONE) + { + state = state.withMirror(mirror); + } + + if (rotation != Rotation.NONE) + { + state = state.withRotation(rotation); + } + + worldIn.setBlockState(blockpos, state, 2); + helper++; + } + } + } + + return true; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + return new RoomEntranceVenus(this.configuration, rand, this.boundingBox.minX + this.boundingBox.getXSize() / 2, this.boundingBox.minZ + this.boundingBox.getZSize() / 2); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/MapGenDungeonVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/MapGenDungeonVenus.java new file mode 100644 index 00000000..8b78ed94 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/MapGenDungeonVenus.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.MapGenStructure; +import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.StructureStart; + +public class MapGenDungeonVenus extends MapGenStructure +{ + + private static boolean initialized; + private DungeonConfigurationVenus configuration; + + static + { + try + { + MapGenDungeonVenus.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public MapGenDungeonVenus(DungeonConfigurationVenus configuration) + { + this.configuration = configuration; + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenDungeonVenus.initialized) + { + MapGenStructureIO.registerStructure(MapGenDungeonVenus.Start.class, "VenusDungeon"); + MapGenStructureIO.registerStructureComponent(DungeonStartVenus.class, "VenusDungeonStart"); + MapGenStructureIO.registerStructureComponent(CorridorVenus.class, "VenusDungeonCorridor"); + MapGenStructureIO.registerStructureComponent(RoomEmptyVenus.class, "VenusDungeonEmptyRoom"); + MapGenStructureIO.registerStructureComponent(RoomBossVenus.class, "VenusDungeonBossRoom"); + MapGenStructureIO.registerStructureComponent(RoomTreasureVenus.class, "VenusDungeonTreasureRoom"); + MapGenStructureIO.registerStructureComponent(RoomSpawnerVenus.class, "VenusDungeonSpawnerRoom"); + MapGenStructureIO.registerStructureComponent(RoomChestVenus.class, "VenusDungeonChestRoom"); + MapGenStructureIO.registerStructureComponent(RoomEntranceVenus.class, "VenusDungeonEntranceRoom"); + } + + MapGenDungeonVenus.initialized = true; + } + + @Override + public String getStructureName() + { + return "GC_Dungeon_Venus"; + } + + @Override + protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ) + { + long dungeonPos = MapGenDungeon.getDungeonPosForCoords(this.world, chunkX, chunkZ, ((IGalacticraftWorldProvider) this.world.provider).getDungeonSpacing()); + int i = (int) (dungeonPos >> 32); + int j = (int) dungeonPos; + return i == chunkX && j == chunkZ; + } + + @Override + protected StructureStart getStructureStart(int chunkX, int chunkZ) + { + return new MapGenDungeonVenus.Start(this.world, this.rand, chunkX, chunkZ, this.configuration); + } + + @Override + public BlockPos getNearestStructurePos(World worldIn, BlockPos pos, boolean p_180706_3_) + { + return null; + } + + public static class Start extends StructureStart + { + public Start() + { + } + + public Start(World worldIn, Random rand, int chunkX, int chunkZ, DungeonConfigurationVenus configuration) + { + super(chunkX, chunkZ); + DungeonStartVenus startPiece = new DungeonStartVenus(worldIn, configuration, rand, (chunkX << 4) + 2, (chunkZ << 4) + 2); + startPiece.buildComponent(startPiece, this.components, rand); + List list = startPiece.attachedComponents; + + while (!list.isEmpty()) + { + int i = rand.nextInt(list.size()); + StructureComponent structurecomponent = list.remove(i); + structurecomponent.buildComponent(startPiece, this.components, rand); + } + + this.updateBoundingBox(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/PieceVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/PieceVenus.java new file mode 100644 index 00000000..3f570769 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/PieceVenus.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class PieceVenus extends StructureComponent +{ + + protected DungeonConfigurationVenus configuration; + + public PieceVenus() + { + } + + public PieceVenus(DungeonConfigurationVenus configuration) + { + this.configuration = configuration; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + this.configuration.writeToNBT(tagCompound); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + this.configuration = new DungeonConfigurationVenus(); + this.configuration.readFromNBT(tagCompound); + } + + protected StructureBoundingBox getExtension(EnumFacing direction, int length, int width) + { + int blockX, blockZ, sizeX, sizeZ; + switch (direction) + { + case NORTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.minZ - sizeZ; + break; + case EAST: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.maxX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + case SOUTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.maxZ; + break; + case WEST: + default: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.minX - sizeX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + } + return new StructureBoundingBox(blockX, this.configuration.getYPosition(), blockZ, blockX + sizeX, this.configuration.getYPosition() + this.configuration.getHallwayHeight(), blockZ + sizeZ); + } + + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomBossVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomBossVenus.java new file mode 100644 index 00000000..411d50ea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomBossVenus.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTorchWeb; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class RoomBossVenus extends SizedPieceVenus +{ + + private EnumFacing exitDirection; + private BlockPos chestPos; + + public RoomBossVenus() + { + } + + public RoomBossVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + this(configuration, rand, blockPosX, blockPosZ, rand.nextInt(6) + 20, rand.nextInt(2) + 10, rand.nextInt(6) + 20, entranceDir); + } + + public RoomBossVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.sizeX = sizeX; + this.sizeZ = sizeZ; + this.sizeY = sizeY; + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos - 2, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + if (this.exitDirection != null) + { + tagCompound.setInteger("direction_exit", this.exitDirection.ordinal()); + } + + tagCompound.setBoolean("chestPosNull", this.chestPos == null); + if (this.chestPos != null) + { + tagCompound.setInteger("chestX", this.chestPos.getX()); + tagCompound.setInteger("chestY", this.chestPos.getY()); + tagCompound.setInteger("chestZ", this.chestPos.getZ()); + } + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + + if (tagCompound.hasKey("direction_exit")) + { + this.exitDirection = EnumFacing.byIndex(tagCompound.getInteger("direction_exit")); + } else + { + this.exitDirection = null; + } + + if (tagCompound.hasKey("chestPosNull") && !tagCompound.getBoolean("chestPosNull")) + { + this.chestPos = new BlockPos(tagCompound.getInteger("chestX"), tagCompound.getInteger("chestY"), tagCompound.getInteger("chestZ")); + } + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + StructureBoundingBox box = new StructureBoundingBox(new int[] + {Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE}); + + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + double dX = (i - this.sizeX / 2); + double dZ = (k - this.sizeZ / 2); + double dXZ = Math.sqrt(dX * dX + dZ * dZ); + + double f = -Math.pow((dXZ * 1.5) / (this.sizeX / 2 - 1), 6) + this.sizeY - 1; + + if (j == 0) + { + this.setBlockState(worldIn, this.configuration.getBrickBlockFloor(), i, j, k, chunkBox); + } else if (j < f) + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + + if (j + 1 >= f && (dXZ > 5) && random.nextInt(12) == 0) + { + int distFromFloor = random.nextInt(5) + 2; + for (int j0 = j; j0 >= distFromFloor + 1; --j0) + { + BlockTorchWeb.EnumWebType webType; + if (j0 == distFromFloor + 1) + { + webType = BlockTorchWeb.EnumWebType.WEB_1; + } else + { + webType = BlockTorchWeb.EnumWebType.WEB_0; + } + this.setBlockState(worldIn, VenusBlocks.torchWeb.getDefaultState().withProperty(BlockTorchWeb.WEB_TYPE, webType), i, j0, k, chunkBox); + } + } + + if (i < box.minX) + { + box.minX = i; + } + if (i > box.maxX) + { + box.maxX = i; + } + if (j < box.minY) + { + box.minY = j; + } + if (j > box.maxY) + { + box.maxY = j; + } + if (k < box.minZ) + { + box.minZ = k; + } + if (k > box.maxZ) + { + box.maxZ = k; + } + } else + { + boolean placeBlock = true; + + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 5 && j > 2) + { + if ((getDirection() == EnumFacing.SOUTH || (this.exitDirection != null && this.exitDirection == EnumFacing.SOUTH)) && k < 7) + { + placeBlock = false; + } + if ((getDirection() == EnumFacing.NORTH || (this.exitDirection != null && this.exitDirection == EnumFacing.NORTH)) && k > this.sizeZ - 7) + { + placeBlock = false; + } + } + + start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 5 && j > 2) + { + if ((getDirection() == EnumFacing.EAST || (this.exitDirection != null && this.exitDirection == EnumFacing.EAST)) && i < 7) + { + placeBlock = false; + } + if ((getDirection() == EnumFacing.WEST || (this.exitDirection != null && this.exitDirection == EnumFacing.WEST)) && i > this.sizeX - 7) + { + placeBlock = false; + } + } + + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + } + + int spawnerX = this.sizeX / 2; + int spawnerY = 1; + int spawnerZ = this.sizeZ / 2; + BlockPos blockpos = new BlockPos(this.getXWithOffset(spawnerX, spawnerZ), this.getYWithOffset(spawnerY), this.getZWithOffset(spawnerX, spawnerZ)); + // Is this position inside the chunk currently being generated? + if (chunkBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, VenusBlocks.bossSpawner.getDefaultState(), 2); + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) worldIn.getTileEntity(blockpos); + if (spawner != null) + { + if (box.getXSize() > 10000 || box.getYSize() > 10000 || box.getZSize() > 10000) + { + GalacticraftPlanets.logger.error("Failed to set correct boss room size. This is a bug!"); + } else + { + spawner.setRoom(new Vector3(box.minX + this.boundingBox.minX, box.minY + this.boundingBox.minY, box.minZ + this.boundingBox.minZ), + new Vector3(box.maxX - box.minX + 1, box.maxY - box.minY + 1, box.maxZ - box.minZ + 1)); + spawner.setChestPos(this.chestPos); + } + } + } + + return true; + } + + public BlockPos getChestPos() + { + return chestPos; + } + + public void setChestPos(BlockPos chestPos) + { + this.chestPos = chestPos; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + DirectionalPieceVenus corridor = (DirectionalPieceVenus) getCorridor(rand, startPiece, 10, true); + this.exitDirection = corridor == null ? null : corridor.getDirection().getOpposite(); + return corridor; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomChestVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomChestVenus.java new file mode 100644 index 00000000..52145a9d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomChestVenus.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomChestVenus extends RoomEmptyVenus +{ + + public RoomChestVenus() + { + } + + public RoomChestVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random rand, StructureBoundingBox boundingBox) + { + if (super.addComponentParts(worldIn, rand, boundingBox)) + { + int chestX = this.sizeX / 2; + int chestY = 1; + int chestZ = this.sizeZ / 2; + this.setBlockState(worldIn, Blocks.CHEST.getDefaultState().withProperty(BlockTier1TreasureChest.FACING, this.getDirection().getOpposite()), chestX, chestY, chestZ, boundingBox); + + BlockPos blockpos = new BlockPos(this.getXWithOffset(chestX, chestZ), this.getYWithOffset(chestY), this.getZWithOffset(chestX, chestZ)); + TileEntityChest chest = (TileEntityChest) worldIn.getTileEntity(blockpos); + + // TODO Verify this + if (chest != null) + { + ResourceLocation chesttype = RoomTreasureVenus.VENUSCHEST; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + chest.setLootTable(chesttype, rand.nextLong()); + } + + return true; + } + + return false; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEmptyVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEmptyVenus.java new file mode 100644 index 00000000..1ce9d188 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEmptyVenus.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomEmptyVenus extends SizedPieceVenus +{ + + public RoomEmptyVenus() + { + } + + public RoomEmptyVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < this.configuration.getHallwayHeight() && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < this.configuration.getHallwayHeight() && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + DungeonConfigurationVenus venusConfig = (DungeonConfigurationVenus) this.configuration; + this.setBlockState(worldIn, j == 0 || j == this.sizeY ? venusConfig.getBrickBlockFloor() : this.configuration.getBrickBlock(), i, j, k, boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + if (Math.abs(startPiece.getBoundingBox().maxZ - boundingBox.minZ) > 200) + { + return null; + } + + if (Math.abs(startPiece.getBoundingBox().maxX - boundingBox.minX) > 200) + { + return null; + } + + return getCorridor(rand, startPiece, 10, false); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEntranceVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEntranceVenus.java new file mode 100644 index 00000000..b6533636 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEntranceVenus.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomEntranceVenus extends SizedPieceVenus +{ + + public RoomEntranceVenus() + { + } + + public RoomEntranceVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand.nextInt(4) + 6, 12, rand.nextInt(4) + 6, EnumFacing.Plane.HORIZONTAL.random(rand)); + this.setCoordBaseMode(EnumFacing.SOUTH); + int sX = this.sizeX / 2; + int sZ = this.sizeZ / 2; + + this.boundingBox = + new StructureBoundingBox(blockPosX - sX, configuration.getYPosition(), blockPosZ - sZ, blockPosX - sX + this.sizeX, configuration.getYPosition() + this.sizeY, blockPosZ - sZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX + || j == 0 /* + * || j == this.sizeY + */ || k == 0 || k == this.sizeZ) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + return getCorridor(rand, startPiece, 10, false); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomSpawnerVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomSpawnerVenus.java new file mode 100644 index 00000000..b07c33f3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomSpawnerVenus.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomSpawnerVenus extends RoomEmptyVenus +{ + + public RoomSpawnerVenus() + { + } + + public RoomSpawnerVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + if (super.addComponentParts(worldIn, random, chunkBox)) + { + for (int i = 1; i <= this.sizeX - 1; ++i) + { + for (int j = 1; j <= this.sizeY - 1; ++j) + { + for (int k = 1; k <= this.sizeZ - 1; ++k) + { + if (random.nextFloat() < 0.05F) + { + this.setBlockState(worldIn, Blocks.WEB.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + + this.placeMobSpawner(worldIn, random, chunkBox, 1, 0, 1); + this.placeMobSpawner(worldIn, random, chunkBox, this.sizeX - 1, 0, this.sizeZ - 1); + + return true; + } + + return false; + } + + private void placeMobSpawner(World worldIn, Random random, StructureBoundingBox chunkBox, int x, int y, int z) + { + this.setBlockState(worldIn, Blocks.MOB_SPAWNER.getDefaultState(), 1, 0, 1, boundingBox); + BlockPos blockpos = new BlockPos(this.getXWithOffset(1, 1), this.getYWithOffset(0), this.getZWithOffset(1, 1)); + TileEntityMobSpawner spawner = (TileEntityMobSpawner) worldIn.getTileEntity(blockpos); + + if (spawner != null) + { + spawner.getSpawnerBaseLogic().setEntityId(getMob(random)); + } + } + + private static ResourceLocation getMob(Random rand) + { + switch (rand.nextInt(4)) + { + case 0: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_spider"); + case 1: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_creeper"); + case 2: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_skeleton"); + case 3: + default: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_zombie"); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomTreasureVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomTreasureVenus.java new file mode 100644 index 00000000..d878cffd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomTreasureVenus.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTier3TreasureChest; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.storage.loot.LootTableList; + +public class RoomTreasureVenus extends SizedPieceVenus +{ + + public static ResourceLocation VENUSCHEST = new ResourceLocation(Constants.ASSET_PREFIX, "dungeon_tier_3"); + public static final ResourceLocation TABLE_TIER_3_DUNGEON = LootTableList.register(VENUSCHEST); + + public RoomTreasureVenus() + { + } + + public RoomTreasureVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + this(configuration, rand, blockPosX, blockPosZ, rand.nextInt(4) + 6, configuration.getRoomHeight(), rand.nextInt(4) + 6, entranceDir); + } + + public RoomTreasureVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + DungeonConfigurationVenus venusConfig = (DungeonConfigurationVenus) this.configuration; + this.setBlockState(worldIn, j == 0 || j == this.sizeY ? venusConfig.getBrickBlockFloor() : this.configuration.getBrickBlock(), i, j, k, boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } else if ((i == 1 && k == 1) || (i == 1 && k == this.sizeZ - 1) || (i == this.sizeX - 1 && k == 1) || (i == this.sizeX - 1 && k == this.sizeZ - 1)) + { + this.setBlockState(worldIn, Blocks.GLOWSTONE.getDefaultState(), i, j, k, boundingBox); + } else if (i == this.sizeX / 2 && j == 1 && k == this.sizeZ / 2) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i, k), this.getYWithOffset(j), this.getZWithOffset(i, k)); + if (boundingBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, VenusBlocks.treasureChestTier3.getDefaultState().withProperty(BlockTier3TreasureChest.FACING, this.getDirection().getOpposite()), 2); + TileEntityTreasureChest treasureChest = (TileEntityTreasureChest) worldIn.getTileEntity(blockpos); + if (treasureChest != null) + { + ResourceLocation chesttype = TABLE_TIER_3_DUNGEON; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + treasureChest.setLootTable(chesttype, random.nextLong()); + } + } + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + if (startPiece.attachedComponents.size() > 2) + { + StructureComponent component = startPiece.attachedComponents.get(startPiece.attachedComponents.size() - 3); + if (component instanceof RoomBossVenus) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(this.sizeX / 2, this.sizeZ / 2), this.getYWithOffset(1), this.getZWithOffset(this.sizeX / 2, this.sizeZ / 2)); + ((RoomBossVenus) component).setChestPos(new BlockPos(blockpos)); + } + } + return null; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/SizedPieceVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/SizedPieceVenus.java new file mode 100644 index 00000000..c32b09e1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/SizedPieceVenus.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class SizedPieceVenus extends DirectionalPieceVenus +{ + + protected int sizeX; + protected int sizeY; + protected int sizeZ; + + public SizedPieceVenus() + { + } + + public SizedPieceVenus(DungeonConfigurationVenus configuration, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, direction); + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("sizeX", this.sizeX); + tagCompound.setInteger("sizeY", this.sizeY); + tagCompound.setInteger("sizeZ", this.sizeZ); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + + this.sizeX = tagCompound.getInteger("sizeX"); + this.sizeY = tagCompound.getInteger("sizeY"); + this.sizeZ = tagCompound.getInteger("sizeZ"); + } + + public int getSizeX() + { + return sizeX; + } + + public int getSizeY() + { + return sizeY; + } + + public int getSizeZ() + { + return sizeZ; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenus.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenus.java new file mode 100644 index 00000000..519936e3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenus.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.layer; + +import net.minecraft.world.gen.layer.GenLayer; +import net.minecraft.world.gen.layer.GenLayerVoronoiZoom; +import net.minecraft.world.gen.layer.GenLayerZoom; + +public abstract class GenLayerVenus extends GenLayer +{ + + public GenLayerVenus(long l) + { + super(l); + } + + public static GenLayer[] createWorld(long l) + { + GenLayer biomes = new GenLayerVenusBiomes(l); + biomes = new GenLayerZoom(1000L, biomes); +// biomes = new GenLayerVenusSurround(500L, biomes); + biomes = new GenLayerZoom(1001L, biomes); + biomes = new GenLayerZoom(1002L, biomes); + biomes = new GenLayerZoom(1003L, biomes); + GenLayer genLayerVeronoiZoom = new GenLayerVoronoiZoom(10L, biomes); + biomes.initWorldGenSeed(l); + genLayerVeronoiZoom.initWorldGenSeed(l); + + return new GenLayer[] + {biomes, genLayerVeronoiZoom}; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusBiomes.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusBiomes.java new file mode 100644 index 00000000..3ece97bf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusBiomes.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.layer; + +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.miccore.IntCache; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.layer.GenLayer; + +public class GenLayerVenusBiomes extends GenLayer +{ + + private static final Biome[] biomes = VenusModule.planetVenus.biomesToGenerate.toArray(new Biome[0]); + + public GenLayerVenusBiomes(long l, GenLayer parent) + { + super(l); + this.parent = parent; + } + + public GenLayerVenusBiomes(long l) + { + super(l); + } + + @Override + public int[] getInts(int x, int z, int width, int depth) + { + int[] dest = IntCache.getIntCache(width * depth); + + for (int k = 0; k < depth; ++k) + { + for (int i = 0; i < width; ++i) + { + initChunkSeed(x + i, z + k); + dest[i + k * width] = Biome.getIdForBiome(biomes[nextInt(biomes.length)]); + } + } + + return dest; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusSurround.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusSurround.java new file mode 100644 index 00000000..1413633a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusSurround.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.layer; + +import micdoodle8.mods.miccore.IntCache; +import net.minecraft.world.gen.layer.GenLayer; + +public class GenLayerVenusSurround extends GenLayer +{ + + public GenLayerVenusSurround(long l, GenLayer parent) + { + super(l); + this.parent = parent; + } + + public GenLayerVenusSurround(long l) + { + super(l); + } + + @Override + public int[] getInts(int x, int z, int width, int depth) + { + int nx = x - 1; + int nz = z - 1; + int nwidth = width + 2; + int ndepth = depth + 2; + int input[] = parent.getInts(nx, nz, nwidth, ndepth); + int output[] = IntCache.getIntCache(width * depth); + for (int dz = 0; dz < depth; dz++) + { + for (int dx = 0; dx < width; dx++) + { + output[dx + dz * width] = input[dx + 1 + (dz + 1) * nwidth]; + } + } + + return output; + } + + boolean surrounded(int biome, int center, int right, int left, int up, int down) + { + if (center != biome) + { + return false; + } + + if (right != biome) + { + return false; + } + if (left != biome) + { + return false; + } + if (up != biome) + { + return false; + } + if (down != biome) + { + return false; + } + + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/Annotations.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/Annotations.java new file mode 100644 index 00000000..028aabe8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/Annotations.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import net.minecraftforge.fml.relauncher.Side; + +public interface Annotations +{ + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface RuntimeInterface + { + + String clazz(); + + String modID(); + + String deobfName() default ""; + + String[] altClasses() default + {}; + } + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.FIELD) + public @interface NetworkedField + { + + Side targetSide(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/ConfigManagerMicCore.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/ConfigManagerMicCore.java new file mode 100644 index 00000000..d22a9f0b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/ConfigManagerMicCore.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.io.File; + +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +public class ConfigManagerMicCore +{ + + public static boolean loaded; + + static Configuration configuration; + + public static boolean enableDebug; + + public static void init() + { + File oldCoreConfig = new File(MicdoodlePlugin.canonicalConfigDir, "Galacticraft/miccore.conf"); + File coremodConfig = new File(MicdoodlePlugin.canonicalConfigDir, "Galacticraft/MicdoodleCore.cfg"); + + if (!ConfigManagerMicCore.loaded) + { + if (oldCoreConfig.exists()) + { + ConfigManagerMicCore.configuration = ConfigManagerMicCore.handleConfigFileMove(new Configuration(oldCoreConfig), coremodConfig); + oldCoreConfig.delete(); + } + else + { + ConfigManagerMicCore.configuration = new Configuration(coremodConfig); + } + } + + ConfigManagerMicCore.configuration.load(); + ConfigManagerMicCore.syncConfig(); + } + + private static Configuration handleConfigFileMove(Configuration oldConfig, File newFile) + { + Property logDebugOutput = oldConfig.get(Configuration.CATEGORY_GENERAL, "Enable Debug messages", false); + + Configuration newConfig = new Configuration(newFile); + newConfig.get(Configuration.CATEGORY_GENERAL, "logDebugOutput", logDebugOutput.getBoolean(), "If `true` Enable debug messages during Galacticraft bytecode injection at startup"); + newConfig.save(); + + return newConfig; + } + + public static void syncConfig() + { + try + { + ConfigManagerMicCore.enableDebug = ConfigManagerMicCore.configuration.get(Configuration.CATEGORY_GENERAL, "logDebugOutput", false, "If `true` Enable debug messages during Galacticraft bytecode injection at startup").getBoolean(false); + } catch (final Exception e) + { + MicdoodlePlugin.miccoreLogger.error("Problem loading core config (\"MicdoodleCore.conf\")"); + } finally + { + if (ConfigManagerMicCore.configuration.hasChanged()) + { + ConfigManagerMicCore.configuration.save(); + } + + ConfigManagerMicCore.loaded = true; + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IIntCache.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IIntCache.java new file mode 100644 index 00000000..0c3e633b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IIntCache.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + + +public interface IIntCache +{ + +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IntCache.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IntCache.java new file mode 100644 index 00000000..2c713d0b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IntCache.java @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import com.google.common.collect.Lists; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.MapUtil; + +public class IntCache +{ + private static int intCacheSize = 256; + private static List freeSmallArrays = Lists.newArrayList(); + private static List inUseSmallArrays = Lists.newArrayList(); + private static List freeLargeArrays = Lists.newArrayList(); + private static List inUseLargeArrays = Lists.newArrayList(); + private static int intCacheSize2 = 256; + private static List freeSmallArrays2 = Lists.newArrayList(); + private static List inUseSmallArrays2 = Lists.newArrayList(); + private static List freeLargeArrays2 = Lists.newArrayList(); + private static List inUseLargeArrays2 = Lists.newArrayList(); + + public static int[] getIntCache(int p_76445_0_) + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + return getIntCacheGC(p_76445_0_); + } + return getIntCacheVanilla(p_76445_0_); + } + + public static int[] func_76445_a(int p_76445_0_) + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + return getIntCacheGC(p_76445_0_); + } + return getIntCacheVanilla(p_76445_0_); + } + + // Obfuscated method name for use by vanilla, because this won't be + // processed by the deobfuscators + public static int[] a(int p_76445_0_) + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + return getIntCacheGC(p_76445_0_); + } + return getIntCacheVanilla(p_76445_0_); + } + + // Vanilla method needs to be synchronized + public synchronized static int[] getIntCacheVanilla(int p_76445_0_) + { + if (p_76445_0_ <= 256) + { + if (freeSmallArrays.isEmpty()) + { + int[] aint4 = new int[256]; + inUseSmallArrays.add(aint4); + return aint4; + } else + { + int[] aint3 = freeSmallArrays.remove(freeSmallArrays.size() - 1); + inUseSmallArrays.add(aint3); + return aint3; + } + } else if (p_76445_0_ > intCacheSize) + { + intCacheSize = p_76445_0_; + freeLargeArrays.clear(); + inUseLargeArrays.clear(); + int[] aint2 = new int[intCacheSize]; + inUseLargeArrays.add(aint2); + return aint2; + } else if (freeLargeArrays.isEmpty()) + { + int[] aint1 = new int[intCacheSize]; + inUseLargeArrays.add(aint1); + return aint1; + } else + { + int[] aint = freeLargeArrays.remove(freeLargeArrays.size() - 1); + inUseLargeArrays.add(aint); + return aint; + } + } + + // GC version does not need to be synchonised because we've already tested + // that it is called from + // our own background mapping thread, and those are tightly controlled so + // only one can be running + public static int[] getIntCacheGC(int size) + { + if (size <= 256) + { + if (freeSmallArrays2.isEmpty()) + { + int[] aint4 = new int[256]; + inUseSmallArrays2.add(aint4); + return aint4; + } else + { + int[] aint3 = freeSmallArrays2.remove(freeSmallArrays2.size() - 1); + inUseSmallArrays2.add(aint3); + return aint3; + } + } else if (size > intCacheSize2) + { + intCacheSize2 = size; + freeLargeArrays2.clear(); + inUseLargeArrays2.clear(); + int[] aint2 = new int[intCacheSize2]; + inUseLargeArrays2.add(aint2); + return aint2; + } else if (freeLargeArrays2.isEmpty()) + { + int[] aint1 = new int[intCacheSize2]; + inUseLargeArrays2.add(aint1); + return aint1; + } else + { + int[] aint = freeLargeArrays2.remove(freeLargeArrays2.size() - 1); + inUseLargeArrays2.add(aint); + return aint; + } + } + + public static void resetIntCache() + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + resetIntCacheGC(); + return; + } + resetIntCacheVanilla(); + } + + public static void func_76446_a() + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + resetIntCacheGC(); + return; + } + resetIntCacheVanilla(); + } + + // Obfuscated method name for use by vanilla, because this won't be + // processed by the deobfuscators + public static void a() + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + resetIntCacheGC(); + return; + } + resetIntCacheVanilla(); + } + + // Vanilla method needs to be synchronized + public synchronized static void resetIntCacheVanilla() + { + if (!freeLargeArrays.isEmpty()) + { + freeLargeArrays.remove(freeLargeArrays.size() - 1); + } + + if (!freeSmallArrays.isEmpty()) + { + freeSmallArrays.remove(freeSmallArrays.size() - 1); + } + + freeLargeArrays.addAll(inUseLargeArrays); + freeSmallArrays.addAll(inUseSmallArrays); + inUseLargeArrays.clear(); + inUseSmallArrays.clear(); + } + + // GC version does not need to be synchonised because we've already tested + // that it is called from + // our own background mapping thread, and those are tightly controlled so + // only one can be running + public static void resetIntCacheGC() + { + if (!freeLargeArrays2.isEmpty()) + { + freeLargeArrays2.remove(freeLargeArrays2.size() - 1); + } + + if (!freeSmallArrays2.isEmpty()) + { + freeSmallArrays2.remove(freeSmallArrays2.size() - 1); + } + + freeLargeArrays2.addAll(inUseLargeArrays2); + freeSmallArrays2.addAll(inUseSmallArrays2); + inUseLargeArrays2.clear(); + inUseSmallArrays2.clear(); + } + + public static String getCacheSizes() + { + return getCacheSizesVanilla(); + } + + public static String func_85144_b() + { + return getCacheSizesVanilla(); + } + + // Obfuscated method name for use by vanilla, because this won't be + // processed by the deobfuscators + public static String b() + { + return getCacheSizesVanilla(); + } + + // No GC version of this, because we don't call it - note that vanilla + // CrashReport calls this + public synchronized static String getCacheSizesVanilla() + { + return "cache: " + freeLargeArrays.size() + ", tcache: " + freeSmallArrays.size() + ", allocated: " + inUseLargeArrays.size() + ", tallocated: " + inUseSmallArrays.size(); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformer.java new file mode 100644 index 00000000..1468a1e1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformer.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.io.IOException; +import net.minecraftforge.fml.common.asm.transformers.AccessTransformer; + +public class MicdoodleAccessTransformer extends AccessTransformer +{ + + public MicdoodleAccessTransformer() throws IOException + { + super("META-INF/accesstransformer.cfg"); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformerDeObf.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformerDeObf.java new file mode 100644 index 00000000..e0ee201b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformerDeObf.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.io.IOException; +import net.minecraftforge.fml.common.asm.transformers.AccessTransformer; + +public class MicdoodleAccessTransformerDeObf extends AccessTransformer +{ + + public MicdoodleAccessTransformerDeObf() throws IOException + { + super("META-INF/accesstransformer_deobf.cfg"); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleModContainer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleModContainer.java new file mode 100644 index 00000000..1f2b0894 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleModContainer.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import com.google.common.eventbus.EventBus; +import java.util.Arrays; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraftforge.fml.common.DummyModContainer; +import net.minecraftforge.fml.common.LoadController; +import net.minecraftforge.fml.common.ModMetadata; + +public class MicdoodleModContainer extends DummyModContainer +{ + + public MicdoodleModContainer() + { + super(new ModMetadata()); + ModMetadata meta = this.getMetadata(); + meta.modId = "micdoodlecore"; + meta.version = Constants.VERSION; + meta.name = "Micdoodle8 Core"; + meta.description = "Provides core features of Micdoodle8's mods"; + meta.authorList = Arrays.asList("micdoodle8, radfast"); + meta.url = "https://www.micdoodle8.com/"; + meta.autogenerated = false; + } + + @Override + public boolean registerBus(EventBus bus, LoadController controller) + { + bus.register(this); + return true; + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodlePlugin.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodlePlugin.java new file mode 100644 index 00000000..4e2f8238 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodlePlugin.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import net.minecraft.launchwrapper.Launch; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.LoaderException; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.fml.relauncher.IFMLCallHook; +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.MCVersion; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@IFMLLoadingPlugin.TransformerExclusions(value = +{"micdoodle8.mods.miccore"}) +@MCVersion("1.12.2") +public class MicdoodlePlugin implements IFMLLoadingPlugin, IFMLCallHook +{ + + public static Logger miccoreLogger = LogManager.getLogger("MicdoodleCore"); + public static boolean hasRegistered = false; + public static final String mcVersion = MinecraftForge.MC_VERSION; + public static File mcDir; + public static File canonicalConfigDir; + + @Override + public String[] getASMTransformerClass() + { + final String[] asmStrings = + {"micdoodle8.mods.miccore.MicdoodleTransformer"}; + + if (!MicdoodlePlugin.hasRegistered) + { + final List asm = Arrays.asList(asmStrings); + + for (final String s : asm) + { + try + { + final Class c = Class.forName(s); + + if (c != null) + { + miccoreLogger.info("Successfully Registered Transformer"); + } + } + catch (final Exception ex) + { + miccoreLogger.error("Error while running transformer " + s); + return null; + } + } + + MicdoodlePlugin.hasRegistered = true; + } + + return asmStrings; + } + + @Override + public String getModContainerClass() + { + return "micdoodle8.mods.miccore.MicdoodleModContainer"; + } + + @Override + public String getSetupClass() + { + return "micdoodle8.mods.miccore.MicdoodlePlugin"; + } + + @Override + public Void call() throws Exception + { + return null; + } + + private static Constructor sleepCancelledConstructor; + private static Constructor orientCameraConstructor; + private static String eventContainerClass = "micdoodle8.mods.galacticraft.core.event.EventHandlerGC"; + + public static void onSleepCancelled() + { + try + { + if (MicdoodlePlugin.sleepCancelledConstructor == null) + { + MicdoodlePlugin.sleepCancelledConstructor = Class.forName(MicdoodlePlugin.eventContainerClass + "$SleepCancelledEvent").getConstructor(); + } + + MinecraftForge.EVENT_BUS.post((Event) MicdoodlePlugin.sleepCancelledConstructor.newInstance()); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + public static void orientCamera() + { + try + { + if (MicdoodlePlugin.orientCameraConstructor == null) + { + MicdoodlePlugin.orientCameraConstructor = Class.forName(MicdoodlePlugin.eventContainerClass + "$OrientCameraEvent").getConstructor(); + } + + MinecraftForge.EVENT_BUS.post((Event) MicdoodlePlugin.orientCameraConstructor.newInstance()); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + @Override + public String getAccessTransformerClass() + { + boolean deobfuscated = true; + + try + { + deobfuscated = Launch.classLoader.getClassBytes("net.minecraft.world.World") != null; + } + catch (final Exception e) + {} + + if (deobfuscated) + { + return "micdoodle8.mods.miccore.MicdoodleAccessTransformerDeObf"; + } + return "micdoodle8.mods.miccore.MicdoodleAccessTransformer"; + } + + @Override + public void injectData(Map data) + { + if (data.containsKey("mcLocation")) + { + MicdoodlePlugin.mcDir = (File) data.get("mcLocation"); + File configDir = new File(mcDir, "config"); + String canonicalConfigPath; + try + { + canonicalConfigPath = configDir.getCanonicalPath(); + canonicalConfigDir = configDir.getCanonicalFile(); + } + catch (IOException ioe) + { + throw new LoaderException(ioe); + } + if (!canonicalConfigDir.exists()) + { + miccoreLogger.debug("No config directory found, creating one: %s", canonicalConfigPath); + boolean dirMade = canonicalConfigDir.mkdir(); + + if (!dirMade) + { + miccoreLogger.error("Unable to create the config directory %s", canonicalConfigPath); + throw new LoaderException(); + } + + miccoreLogger.info("Config directory created successfully"); + } + + ConfigManagerMicCore.init(); + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleTransformer.java b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleTransformer.java new file mode 100644 index 00000000..277bb903 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleTransformer.java @@ -0,0 +1,1838 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import net.minecraft.launchwrapper.Launch; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; +import net.minecraftforge.fml.relauncher.FMLInjectionData; +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.AnnotationNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.InsnNode; +import org.objectweb.asm.tree.IntInsnNode; +import org.objectweb.asm.tree.LdcInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.tree.TypeInsnNode; +import org.objectweb.asm.tree.VarInsnNode; + +@IFMLLoadingPlugin.TransformerExclusions(value = +{"micdoodle8.mods.miccore"}) +public class MicdoodleTransformer implements net.minecraft.launchwrapper.IClassTransformer +{ + + HashMap nodemap = new HashMap<>(); + private boolean deobfuscated = true; + private boolean optifinePresent; + private boolean isServer; + private boolean playerApiActive; + private String mcVersion; + + private String nameForgeHooksClient; + private String namePlayerList; + private String namePlayerController; + private String nameEntityLiving; + private String nameEntityItem; + private String nameEntityRenderer; + private String nameItemRenderer; + private String nameGuiSleep; + private String nameParticleManager; + private String nameNetHandlerPlay; + private String nameRenderGlobal; + private String nameRenderManager; + private String nameEntity; + private String nameChunkGeneratorOverworld; + private String nameChunk; + private String nameEntityArrow; + private String nameEntityGolem; + private String nameWorld; + private String nameModelBiped; + private String nameRRCB; + private String nameRenderChunk; + + private static final String KEY_CLASS_PLAYER_MP = "PlayerMP"; + private static final String KEY_CLASS_WORLD = "worldClass"; + private static final String KEY_PLAYER_LIST = "confManagerClass"; + private static final String KEY_CLASS_GAME_PROFILE = "gameProfileClass"; + private static final String KEY_CLASS_INTERACTION_MANAGER = "interactionManagerClass"; + private static final String KEY_CLASS_PLAYER_CONTROLLER = "playerControllerClass"; + private static final String KEY_CLASS_PLAYER_SP = "playerClient"; + private static final String KEY_CLASS_STAT_FILE_WRITER = "statFileWriterClass"; + private static final String KEY_CLASS_RECIPE_BOOK = "recipeBookClass"; + private static final String KEY_CLASS_NET_HANDLER_PLAY = "netHandlerPlayClientClass"; + private static final String KEY_CLASS_ENTITY_LIVING = "entityLivingClass"; + private static final String KEY_CLASS_ENTITY_ITEM = "entityItemClass"; + private static final String KEY_CLASS_ENTITY_RENDERER = "entityRendererClass"; + private static final String KEY_CLASS_RENDER_GLOBAL = "renderGlobalClass"; + private static final String KEY_CLASS_RENDER_MANAGER = "renderManagerClass"; + private static final String KEY_CLASS_TESSELLATOR = "tessellatorClass"; + private static final String KEY_CLASS_CONTAINER_PLAYER = "containerPlayer"; + private static final String KEY_CLASS_MINECRAFT = "minecraft"; + private static final String KEY_CLASS_SESSION = "session"; + private static final String KEY_CLASS_GUI_SCREEN = "guiScreen"; + private static final String KEY_CLASS_ITEM_RENDERER = "itemRendererClass"; + private static final String KEY_CLASS_VEC3 = "vecClass"; + private static final String KEY_CLASS_ENTITY = "entityClass"; + private static final String KEY_CLASS_TILEENTITY = "tileEntityClass"; + private static final String KEY_CLASS_GUI_SLEEP = "guiSleepClass"; + private static final String KEY_CLASS_PARTICLE_MANAGER = "effectRendererClass"; + private static final String KEY_CLASS_FORGE_HOOKS_CLIENT = "forgeHooks"; + private static final String KEY_CLASS_CUSTOM_PLAYER_MP = "customPlayerMP"; + private static final String KEY_CLASS_CUSTOM_PLAYER_SP = "customPlayerSP"; + private static final String KEY_CLASS_CUSTOM_OTHER_PLAYER = "customEntityOtherPlayer"; + private static final String KEY_CLASS_PACKET_SPAWN_PLAYER = "packetSpawnPlayer"; + private static final String KEY_CLASS_ENTITY_OTHER_PLAYER = "entityOtherPlayer"; + private static final String KEY_CLASS_SERVER = "minecraftServer"; + private static final String KEY_CLASS_WORLD_SERVER = "worldServer"; + private static final String KEY_CLASS_WORLD_CLIENT = "worldClient"; + private static final String KEY_CLASS_CHUNK_PROVIDER_OVERWORLD = "chunkProviderServer"; + private static final String KEY_CLASS_ICHUNKPROVIDER = "IChunkProvider"; + private static final String KEY_CLASS_ICHUNKGENERATOR = "IChunkGenerator"; + private static final String KEY_CLASS_CHUNK = "chunkClass"; + private static final String KEY_NET_HANDLER_LOGIN_SERVER = "netHandlerLoginServer"; + private static final String KEY_CLASS_ENTITY_ARROW = "entityArrow"; + + private static final String KEY_CLASS_ENTITYGOLEM = "entityGolem"; + private static final String KEY_CLASS_IBLOCKACCESS = "iBlockAccess"; + private static final String KEY_CLASS_BLOCK = "blockClass"; + private static final String KEY_CLASS_BLOCKPOS = "blockPos"; + private static final String KEY_CLASS_IBLOCKSTATE = "blockState"; + private static final String KEY_CLASS_ICAMERA = "icameraClass"; + private static final String KEY_CLASS_INTCACHE = "intCache"; + private static final String KEY_CLASS_MODEL_BIPED = "modelBiped"; + private static final String KEY_CLASS_RRCB = "rrcb"; + private static final String KEY_CLASS_VERTEX_BUFFER = "vertexBuffer"; + private static final String KEY_CLASS_CCTG = "cctg"; + private static final String KEY_CLASS_RENDER_CHUNK = "renderChunk"; + private static final String KEY_CLASS_DAMAGE_SOURCE = "damageSource"; + + private static final String KEY_FIELD_CHUNK_XPOS = "chunkXPos"; + private static final String KEY_FIELD_CHUNK_ZPOS = "chunkZPos"; + private static final String KEY_FIELD_CHUNK_WORLD = "world"; + private static final String KEY_FIELD_ENTITY_RENDERER_RAINCOUNT = "entRenderRaincount"; + + private static final String KEY_METHOD_CREATE_PLAYER = "createPlayerMethod"; + private static final String KEY_METHOD_RESPAWN_PLAYER = "respawnPlayerMethod"; + private static final String KEY_METHOD_CREATE_CLIENT_PLAYER = "createClientPlayerMethod"; + private static final String KEY_METHOD_MOVE_ENTITY = "moveEntityMethod"; + private static final String KEY_METHOD_ON_UPDATE = "onUpdateMethod"; + private static final String KEY_METHOD_UPDATE_LIGHTMAP = "updateLightmapMethod"; + private static final String KEY_METHOD_RENDER_OVERLAYS = "renderOverlaysMethod"; + private static final String KEY_METHOD_UPDATE_FOG_COLOR = "updateFogColorMethod"; + private static final String KEY_METHOD_GET_FOG_COLOR = "getFogColorMethod"; + private static final String KEY_METHOD_GET_SKY_COLOR = "getSkyColorMethod"; + private static final String KEY_METHOD_WAKE_ENTITY = "wakeEntityMethod"; + private static final String KEY_METHOD_BED_ORIENT_CAMERA = "orientBedCamera"; + private static final String KEY_METHOD_RENDER_PARTICLES = "renderParticlesMethod"; + private static final String KEY_METHOD_CUSTOM_PLAYER_MP = "customPlayerMPConstructor"; + private static final String KEY_METHOD_CUSTOM_PLAYER_SP = "customPlayerSPConstructor"; + private static final String KEY_METHOD_HANDLE_SPAWN_PLAYER = "handleSpawnPlayerMethod"; + private static final String KEY_METHOD_ORIENT_CAMERA = "orientCamera"; + private static final String KEY_METHOD_ADD_RAIN = "addRainParticles"; + private static final String KEY_METHOD_CAN_RENDER_FIRE = "canRenderOnFire"; + private static final String KEY_METHOD_POPULATE_CHUNK = "populateChunk"; + private static final String KEY_METHOD_RENDER_MODEL = "renderModel"; + private static final String KEY_METHOD_RAIN_STRENGTH = "getRainStrength"; + private static final String KEY_METHOD_REGISTEROF = "registerOF"; + private static final String KEY_METHOD_SETUP_TERRAIN = "setupTerrain"; + private static final String KEY_METHOD_GET_EYE_HEIGHT = "getEyeHeight"; + private static final String KEY_METHOD_ENABLE_ALPHA = "enableAlphaMethod"; + private static final String KEY_METHOD_VALIDATE = "teValidate"; + private static final String KEY_METHOD_BIPED_SET_ROTATION = "bipedSetRotation"; + private static final String KEY_METHOD_RRCB_GET_WORLD_RENDERER = "getWorldRenderer"; + private static final String KEY_METHOD_REBUILD_CHUNK = "rebuildChunk"; + private static final String KEY_METHOD_ATTACK_ENTITY_FROM = "attackEntityFrom"; + + private static final String CLASS_RUNTIME_INTERFACE = "micdoodle8/mods/miccore/Annotations$RuntimeInterface"; + private static final String CLASS_MICDOODLE_PLUGIN = "micdoodle8/mods/miccore/MicdoodlePlugin"; + private static final String CLASS_TRANSFORMER_HOOKS = "micdoodle8/mods/galacticraft/core/TransformerHooks"; + private static final String CLASS_INTCACHE_VARIANT = "micdoodle8/mods/miccore/IntCache"; + private static final String CLASS_IENTITYBREATHABLE = "micdoodle8/mods/galacticraft/api/entity/IEntityBreathable"; + private static final String CLASS_SYNCMOD_CLONEPLAYER = "sync/common/tileentity/TileEntityDualVertical"; + private static final String CLASS_RENDERPLAYEROF = "RenderPlayerOF"; + private static final String CLASS_IFORGEARMOR = "net/minecraftforge/common/ISpecialArmor$ArmorProperties"; + private static final String CLASS_MODEL_BIPED_GC = "micdoodle8/mods/galacticraft/core/client/model/ModelBipedGC"; + + private static int operationCount = 0; + private static int injectionCount = 0; + + public MicdoodleTransformer() + { + this.mcVersion = (String) FMLInjectionData.data()[4]; + + try + { + deobfuscated = Launch.classLoader.getClassBytes("net.minecraft.world.World") != null; + optifinePresent = Launch.classLoader.getClassBytes("optifine.OptiFineClassTransformer") != null; + playerApiActive = Launch.classLoader.getClassBytes("api.player.forge.PlayerAPITransformer") != null && !deobfuscated; + } catch (final Exception e) + { + } + + Launch.classLoader.addTransformerExclusion(CLASS_IENTITYBREATHABLE.replace('/', '.')); + + if (this.mcVersionMatches("[1.12.2]")) + { + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PLAYER_MP, new ObfuscationEntry("net/minecraft/entity/player/EntityPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_WORLD, new ObfuscationEntry("net/minecraft/world/World")); + this.nodemap.put(MicdoodleTransformer.KEY_PLAYER_LIST, new ObfuscationEntry("net/minecraft/server/management/PlayerList")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_GAME_PROFILE, new ObfuscationEntry("com/mojang/authlib/GameProfile")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_INTERACTION_MANAGER, new ObfuscationEntry("net/minecraft/server/management/PlayerInteractionManager")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PLAYER_CONTROLLER, new ObfuscationEntry("net/minecraft/client/multiplayer/PlayerControllerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PLAYER_SP, new ObfuscationEntry("net/minecraft/client/entity/EntityPlayerSP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_STAT_FILE_WRITER, new ObfuscationEntry("net/minecraft/stats/StatisticsManager")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RECIPE_BOOK, new ObfuscationEntry("net/minecraft/stats/RecipeBook")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_NET_HANDLER_PLAY, new ObfuscationEntry("net/minecraft/client/network/NetHandlerPlayClient")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING, new ObfuscationEntry("net/minecraft/entity/EntityLivingBase")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_ITEM, new ObfuscationEntry("net/minecraft/entity/item/EntityItem")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_RENDERER, new ObfuscationEntry("net/minecraft/client/renderer/EntityRenderer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RENDER_GLOBAL, new ObfuscationEntry("net/minecraft/client/renderer/RenderGlobal")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_TESSELLATOR, new ObfuscationEntry("net/minecraft/client/renderer/Tessellator")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RENDER_MANAGER, new ObfuscationEntry("net/minecraft/client/renderer/entity/RenderManager")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CONTAINER_PLAYER, new ObfuscationEntry("net/minecraft/inventory/ContainerPlayer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_MINECRAFT, new ObfuscationEntry("net/minecraft/client/Minecraft")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_SESSION, new ObfuscationEntry("net/minecraft/util/Session")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_GUI_SCREEN, new ObfuscationEntry("net/minecraft/client/gui/GuiScreen")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ITEM_RENDERER, new ObfuscationEntry("net/minecraft/client/renderer/ItemRenderer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_VEC3, new ObfuscationEntry("net/minecraft/util/math/Vec3d")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY, new ObfuscationEntry("net/minecraft/entity/Entity")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_GUI_SLEEP, new ObfuscationEntry("net/minecraft/client/gui/GuiSleepMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PARTICLE_MANAGER, new ObfuscationEntry("net/minecraft/client/particle/ParticleManager")); + + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_FORGE_HOOKS_CLIENT, new ObfuscationEntry("net/minecraftforge/client/ForgeHooksClient")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP, new ObfuscationEntry("micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_SP, new ObfuscationEntry("micdoodle8/mods/galacticraft/core/entities/player/GCEntityClientPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CUSTOM_OTHER_PLAYER, new ObfuscationEntry("micdoodle8/mods/galacticraft/core/entities/player/GCEntityOtherPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PACKET_SPAWN_PLAYER, new ObfuscationEntry("net/minecraft/network/play/server/SPacketSpawnPlayer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_OTHER_PLAYER, new ObfuscationEntry("net/minecraft/client/entity/EntityOtherPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_SERVER, new ObfuscationEntry("net/minecraft/server/MinecraftServer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_WORLD_SERVER, new ObfuscationEntry("net/minecraft/world/WorldServer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_WORLD_CLIENT, new ObfuscationEntry("net/minecraft/client/multiplayer/WorldClient")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_TILEENTITY, new ObfuscationEntry("net/minecraft/tileentity/TileEntity")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CHUNK_PROVIDER_OVERWORLD, new ObfuscationEntry("net/minecraft/world/gen/ChunkGeneratorOverworld")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ICHUNKPROVIDER, new ObfuscationEntry("net/minecraft/world/chunk/IChunkProvider")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ICHUNKGENERATOR, new ObfuscationEntry("net/minecraft/world/gen/IChunkGenerator")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CHUNK, new ObfuscationEntry("net/minecraft/world/chunk/Chunk")); + this.nodemap.put(MicdoodleTransformer.KEY_NET_HANDLER_LOGIN_SERVER, new ObfuscationEntry("net/minecraft/server/network/NetHandlerLoginServer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_ARROW, new ObfuscationEntry("net/minecraft/entity/projectile/EntityArrow")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITYGOLEM, new ObfuscationEntry("net/minecraft/entity/monster/EntityGolem")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_IBLOCKACCESS, new ObfuscationEntry("net/minecraft/world/IBlockAccess")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_BLOCK, new ObfuscationEntry("net/minecraft/block/Block")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_BLOCKPOS, new ObfuscationEntry("net/minecraft/util/math/BlockPos")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_IBLOCKSTATE, new ObfuscationEntry("net/minecraft/block/state/IBlockState")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ICAMERA, new ObfuscationEntry("net/minecraft/client/renderer/culling/ICamera")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_INTCACHE, new ObfuscationEntry("net/minecraft/world/gen/layer/IntCache")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_MODEL_BIPED, new ObfuscationEntry("net/minecraft/client/model/ModelBiped")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RRCB, new ObfuscationEntry("net/minecraft/client/renderer/RegionRenderCacheBuilder")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_VERTEX_BUFFER, new ObfuscationEntry("net/minecraft/client/renderer/BufferBuilder")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CCTG, new ObfuscationEntry("net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RENDER_CHUNK, new ObfuscationEntry("net/minecraft/client/renderer/chunk/RenderChunk")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_DAMAGE_SOURCE, new ObfuscationEntry("net/minecraft/util/DamageSource", "ur")); + this.nodemap.put(MicdoodleTransformer.KEY_FIELD_CHUNK_XPOS, new FieldObfuscationEntry("x", "b")); + this.nodemap.put(MicdoodleTransformer.KEY_FIELD_CHUNK_ZPOS, new FieldObfuscationEntry("z", "c")); + this.nodemap.put(MicdoodleTransformer.KEY_FIELD_CHUNK_WORLD, new FieldObfuscationEntry("world", "k")); + this.nodemap.put(MicdoodleTransformer.KEY_FIELD_ENTITY_RENDERER_RAINCOUNT, new FieldObfuscationEntry("rendererUpdateCount", "m")); + + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CREATE_PLAYER, new MethodObfuscationEntry("createPlayerForUser", "g", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_GAME_PROFILE) + ";)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RESPAWN_PLAYER, new MethodObfuscationEntry("recreatePlayerEntity", "a", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP) + ";IZ)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CREATE_CLIENT_PLAYER, + new MethodObfuscationEntry("createPlayer", "a", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_STAT_FILE_WRITER) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_RECIPE_BOOK) + ";)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_SP) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_MOVE_ENTITY, new MethodObfuscationEntry("travel", "a", "(FFF)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ON_UPDATE, new MethodObfuscationEntry("onUpdate", "B_", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_UPDATE_LIGHTMAP, new MethodObfuscationEntry("updateLightmap", "g", "(F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RENDER_OVERLAYS, new MethodObfuscationEntry("renderOverlays", "b", "(F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_UPDATE_FOG_COLOR, new MethodObfuscationEntry("updateFogColor", "h", "(F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_GET_FOG_COLOR, new MethodObfuscationEntry("getFogColor", "f", "(F)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VEC3) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_GET_SKY_COLOR, new MethodObfuscationEntry("getSkyColor", "a", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";F)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VEC3) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_WAKE_ENTITY, new MethodObfuscationEntry("wakeFromSleep", "a", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_BED_ORIENT_CAMERA, + new MethodObfuscationEntry("orientBedCamera", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_IBLOCKACCESS) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_BLOCKPOS) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_IBLOCKSTATE) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RENDER_PARTICLES, + new MethodObfuscationEntry("renderParticles", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP, + new MethodObfuscationEntry("", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_SERVER) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD_SERVER) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_GAME_PROFILE) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_INTERACTION_MANAGER) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_SP, + new MethodObfuscationEntry("", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_MINECRAFT) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_NET_HANDLER_PLAY) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_STAT_FILE_WRITER) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_RECIPE_BOOK) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_HANDLE_SPAWN_PLAYER, + new MethodObfuscationEntry("handleSpawnPlayer", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PACKET_SPAWN_PLAYER) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ORIENT_CAMERA, new MethodObfuscationEntry("orientCamera", "f", "(F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ADD_RAIN, new MethodObfuscationEntry("addRainParticles", "q", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CAN_RENDER_FIRE, new MethodObfuscationEntry("canRenderOnFire", "bl", "()Z")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_POPULATE_CHUNK, + new MethodObfuscationEntry("populate", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ICHUNKGENERATOR) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RENDER_MODEL, + new MethodObfuscationEntry("renderModel", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";FFFFFF)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RAIN_STRENGTH, new MethodObfuscationEntry("getRainStrength", "j", "(F)F")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_REGISTEROF, new MethodObfuscationEntry("register", "register", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_SETUP_TERRAIN, new MethodObfuscationEntry("setupTerrain", "a", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";DL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ICAMERA) + ";IZ)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_GET_EYE_HEIGHT, new MethodObfuscationEntry("getEyeHeight", "by", "()F")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ENABLE_ALPHA, new MethodObfuscationEntry("enableAlpha", "e", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_VALIDATE, new MethodObfuscationEntry("validate", "func_145829_t", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_BIPED_SET_ROTATION, + new MethodObfuscationEntry("setRotationAngles", "a", "(FFFFFFL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RRCB_GET_WORLD_RENDERER, + new MethodObfuscationEntry("getWorldRendererByLayerId", "a", "(I)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VERTEX_BUFFER) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_REBUILD_CHUNK, + new MethodObfuscationEntry("rebuildChunk", "b", "(FFFL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_CCTG) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ATTACK_ENTITY_FROM, + new MethodObfuscationEntry("attackEntityFrom", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_DAMAGE_SOURCE) + ";F)Z")); + } + + try + { + isServer = Launch.classLoader.getClassBytes(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_RENDER_GLOBAL)) == null; + } catch (Exception e) + { + e.printStackTrace(); + } + } + + @Override + public byte[] transform(String name, String transformedName, byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (name.startsWith("micdoodle8")) + { + if (name.equals("micdoodle8.mods.galacticraft.core.energy.tile.TileCableIC2Sealed")) + { + bytes = this.transformTileCableIC2Sealed(bytes); + } + + return this.transformCustomAnnotations(bytes); + } else + { + if (this.nameForgeHooksClient == null) + { + this.nameForgeHooksClient = this.getName(MicdoodleTransformer.KEY_CLASS_FORGE_HOOKS_CLIENT); + if (this.deobfuscated) + { + this.populateNamesDeObf(); + } else + { + this.populateNamesObf(); + } + } + String testName = name.replace('.', '/'); + if (testName.equals(this.nameForgeHooksClient)) + { + return this.transformForgeHooks(bytes); + } + + if (testName.equals(MicdoodleTransformer.CLASS_IFORGEARMOR)) + { + return this.transformForgeArmor(bytes); + } + + if (testName.equals(MicdoodleTransformer.CLASS_SYNCMOD_CLONEPLAYER)) + { + return this.transformSyncMod(bytes); + } + + if (testName.equals(MicdoodleTransformer.CLASS_RENDERPLAYEROF)) + { + return this.transformOptifine(bytes); + } + + if (testName.equals("ic2/core/block/TileEntityBlock")) + { + ClassNode node = this.startInjection(bytes); + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_VALIDATE); + method.access &= ~Opcodes.ACC_FINAL; + return this.finishInjection(node); + } + + if (testName.equals("appeng/worldgen/MeteoritePlacer")) + { + return this.transformAEMeteorite(bytes); + } + + bytes = this.transformRefs(bytes); + + if (testName.length() <= 3 || this.deobfuscated) + { + return this.transformVanilla(testName, bytes); + } + } + + return bytes; + } + + private void populateNamesDeObf() + { + this.namePlayerList = this.getName(MicdoodleTransformer.KEY_PLAYER_LIST); + this.namePlayerController = this.getName(MicdoodleTransformer.KEY_CLASS_PLAYER_CONTROLLER); + this.nameEntityLiving = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING); + this.nameEntityItem = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY_ITEM); + this.nameEntityRenderer = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY_RENDERER); + this.nameItemRenderer = this.getName(MicdoodleTransformer.KEY_CLASS_ITEM_RENDERER); + this.nameGuiSleep = this.getName(MicdoodleTransformer.KEY_CLASS_GUI_SLEEP); + this.nameParticleManager = this.getName(MicdoodleTransformer.KEY_CLASS_PARTICLE_MANAGER); + this.nameNetHandlerPlay = this.getName(MicdoodleTransformer.KEY_CLASS_NET_HANDLER_PLAY); + this.nameRenderGlobal = this.getName(MicdoodleTransformer.KEY_CLASS_RENDER_GLOBAL); + this.nameRenderManager = this.getName(MicdoodleTransformer.KEY_CLASS_RENDER_MANAGER); + this.nameEntity = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY); + this.nameChunkGeneratorOverworld = this.getName(MicdoodleTransformer.KEY_CLASS_CHUNK_PROVIDER_OVERWORLD); + this.nameChunk = this.getName(MicdoodleTransformer.KEY_CLASS_CHUNK); + this.nameEntityArrow = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY_ARROW); + this.nameEntityGolem = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITYGOLEM); + this.nameWorld = this.getName(MicdoodleTransformer.KEY_CLASS_WORLD); + this.nameModelBiped = this.getName(MicdoodleTransformer.KEY_CLASS_MODEL_BIPED); + this.nameRRCB = this.getName(MicdoodleTransformer.KEY_CLASS_RRCB); + this.nameRenderChunk = this.getName(MicdoodleTransformer.KEY_CLASS_RENDER_CHUNK); + } + + private void populateNamesObf() + { + this.namePlayerList = this.nodemap.get(MicdoodleTransformer.KEY_PLAYER_LIST).obfuscatedName; + this.namePlayerController = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_PLAYER_CONTROLLER).obfuscatedName; + this.nameEntityLiving = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING).obfuscatedName; + this.nameEntityItem = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY_ITEM).obfuscatedName; + this.nameEntityRenderer = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY_RENDERER).obfuscatedName; + this.nameItemRenderer = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ITEM_RENDERER).obfuscatedName; + this.nameGuiSleep = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_GUI_SLEEP).obfuscatedName; + this.nameParticleManager = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_PARTICLE_MANAGER).obfuscatedName; + this.nameNetHandlerPlay = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_NET_HANDLER_PLAY).obfuscatedName; + this.nameRenderGlobal = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_RENDER_GLOBAL).obfuscatedName; + this.nameRenderManager = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_RENDER_MANAGER).obfuscatedName; + this.nameEntity = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY).obfuscatedName; + this.nameChunkGeneratorOverworld = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_CHUNK_PROVIDER_OVERWORLD).obfuscatedName; + this.nameChunk = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_CHUNK).obfuscatedName; + this.nameEntityArrow = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY_ARROW).obfuscatedName; + this.nameEntityGolem = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITYGOLEM).obfuscatedName; + this.nameWorld = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_WORLD).obfuscatedName; + this.nameModelBiped = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_MODEL_BIPED).obfuscatedName; + this.nameRRCB = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_RRCB).obfuscatedName; + this.nameRenderChunk = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_RENDER_CHUNK).obfuscatedName; + } + + private byte[] transformVanilla(String testName, byte[] bytes) + { + if (testName.equals(this.namePlayerList)) + { + return this.transformPlayerList(bytes); + } else if (testName.equals(this.namePlayerController)) + { + return this.transformPlayerController(bytes); + } else if (testName.equals(this.nameEntityLiving)) + { + return this.transformEntityLiving(bytes); + } else if (testName.equals(this.nameEntityItem)) + { + return this.transformEntityItem(bytes); + } else if (testName.equals(this.nameEntityRenderer)) + { + return this.transformEntityRenderer(bytes); + } else if (testName.equals(this.nameItemRenderer)) + { + return this.transformItemRenderer(bytes); + } else if (testName.equals(this.nameGuiSleep)) + { + return this.transformGuiSleep(bytes); + } else if (testName.equals(this.nameParticleManager)) + { + return this.transformParticleManager(bytes); + } else if (testName.equals(this.nameNetHandlerPlay)) + { + return this.transformNetHandlerPlay(bytes); + } else if (testName.equals(this.nameRenderGlobal)) + { + return this.transformRenderGlobal(bytes); + } else if (testName.equals(this.nameEntity)) + { + return this.transformEntityClass(bytes); + } else if (testName.equals(this.nameChunk)) + { + return this.transformChunkClass(bytes); + } else if (testName.equals(this.nameEntityArrow)) + { + return this.transformEntityArrow(bytes); + } else if (testName.equals(this.nameEntityGolem)) + { + return this.transformEntityGolem(bytes); + } else if (testName.equals(this.nameWorld)) + { + return this.transformWorld(bytes); + } else if (testName.equals(this.nameModelBiped)) + { + return this.transformModelBiped(bytes); + } else if (testName.equals(this.nameRRCB)) + { + return this.transformRRCB(bytes); + } else if (testName.equals(this.nameRenderChunk)) + { + return this.transformRenderChunk(bytes); + } + + return bytes; + } + + public byte[] transformChunkClass(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode populateMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_POPULATE_CHUNK); + + if (populateMethod != null) + { + for (int count = populateMethod.instructions.size() - 1; count > 0; count--) + { + final AbstractInsnNode list = populateMethod.instructions.get(count); + + if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.getOpcode() == Opcodes.INVOKESTATIC && nodeAt.owner.contains("GameRegistry")) + { + final MethodInsnNode hook = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "otherModGenerate", + "(IIL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ICHUNKGENERATOR) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ICHUNKPROVIDER) + ";)V", + false); + populateMethod.instructions.set(nodeAt, hook); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + } + return this.finishInjection(node); + } + + /** + * replaces EntityPlayerMP initialization with custom ones + */ + public byte[] transformPlayerList(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + boolean playerAPI = this.isPlayerApiActive(); + MicdoodleTransformer.operationCount = playerAPI ? 0 : 4; + + if (!playerAPI) + { + MethodNode createPlayerMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_CREATE_PLAYER); + MethodNode respawnPlayerMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RESPAWN_PLAYER); + + if (createPlayerMethod != null) + { + for (int count = 0; count < createPlayerMethod.instructions.size(); count++) + { + final AbstractInsnNode list = createPlayerMethod.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + if (nodeAt.getOpcode() != Opcodes.CHECKCAST && nodeAt.desc.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP)); + + createPlayerMethod.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.owner.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP)) && nodeAt.getOpcode() == Opcodes.INVOKESPECIAL) + { + createPlayerMethod.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP), + this.getName(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), this.getDescDynamic(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), false)); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + if (respawnPlayerMethod != null) + { + for (int count = 0; count < respawnPlayerMethod.instructions.size(); count++) + { + final AbstractInsnNode list = respawnPlayerMethod.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + if (nodeAt.getOpcode() != Opcodes.CHECKCAST && nodeAt.desc.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP)); + + respawnPlayerMethod.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.name.equals("") && nodeAt.owner.equals(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + respawnPlayerMethod.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP), + this.getName(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), this.getDescDynamic(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), false)); + + MicdoodleTransformer.injectionCount++; + } + } + } + } + } + + return this.finishInjection(node); + } + + /** + * replaces EntityPlayerMP initialization with custom one in Sync Mod + */ + public byte[] transformSyncMod(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + boolean playerAPI = this.isPlayerApiActive(); + MicdoodleTransformer.operationCount = playerAPI ? 0 : 2; + + if (!playerAPI) + { + MethodNode respawnPlayerMethod = this.getMethodNoDesc(node, "func_145845_h"); + + if (respawnPlayerMethod != null) + { + for (int count = 0; count < respawnPlayerMethod.instructions.size(); count++) + { + final AbstractInsnNode list = respawnPlayerMethod.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + // Deobfuscated name for EntityPlayerMP, because this is + // in a mod + if (nodeAt.getOpcode() == Opcodes.NEW && nodeAt.desc.contains(this.getName(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP)); + + respawnPlayerMethod.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + // Deobfuscated name for EntityPlayerMP, because this is + // in a mod + if (nodeAt.name.equals("") && nodeAt.owner.equals(this.getName(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + respawnPlayerMethod.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP), + this.getName(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), this.getDescDynamic(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), false)); + + MicdoodleTransformer.injectionCount++; + } + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformPlayerController(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + boolean playerAPI = this.isPlayerApiActive(); + MicdoodleTransformer.operationCount = playerAPI ? 0 : 2; + + if (!playerAPI) + { + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_CREATE_CLIENT_PLAYER); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + if (nodeAt.desc.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_SP))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_SP)); + + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.name.equals("") && nodeAt.owner.equals(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_SP))) + { + method.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_SP), + this.getName(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_SP), this.getDescDynamic(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_SP), false)); + MicdoodleTransformer.injectionCount++; + } + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityLiving(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_MOVE_ENTITY); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list instanceof LdcInsnNode) + { + final LdcInsnNode nodeAt = (LdcInsnNode) list; + + if (nodeAt.cst.equals(0.08D)) + { + final VarInsnNode beforeNode = new VarInsnNode(Opcodes.ALOAD, 0); + final MethodInsnNode overwriteNode = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getGravityForEntity", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)D", false); + + method.instructions.insertBefore(nodeAt, beforeNode); + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + method = this.getMethod(node, KEY_METHOD_ATTACK_ENTITY_FROM); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + AbstractInsnNode test = method.instructions.get(count); + + if (test.getOpcode() == Opcodes.FCONST_2) + { + test = method.instructions.get(count + 1); + if (test.getOpcode() == Opcodes.FMUL) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "armorDamageHookF", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";)F", false)); + toAdd.add(new InsnNode(Opcodes.FMUL)); + method.instructions.insertBefore(method.instructions.get(count + 2), toAdd); + MicdoodleTransformer.injectionCount++; + } + } + + if (test instanceof LdcInsnNode) + { + if (((LdcInsnNode) test).cst.equals(4.0F)) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "armorDamageHookF", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";)F", false)); + toAdd.add(new InsnNode(Opcodes.FMUL)); + method.instructions.insertBefore(method.instructions.get(count + 2), toAdd); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityItem(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_ON_UPDATE); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list instanceof LdcInsnNode) + { + final LdcInsnNode nodeAt = (LdcInsnNode) list; + + if (nodeAt.cst.equals(0.03999999910593033D)) + { + final VarInsnNode beforeNode = new VarInsnNode(Opcodes.ALOAD, 0); + final MethodInsnNode overwriteNode = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getItemGravity", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_ITEM) + ";)D", false); + + method.instructions.insertBefore(nodeAt, beforeNode); + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityRenderer(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = this.optifinePresent ? 6 : 7; + + MethodNode updateLightMapMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_UPDATE_LIGHTMAP); + MethodNode updateFogColorMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_UPDATE_FOG_COLOR); + MethodNode orientCameraMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_ORIENT_CAMERA); + MethodNode addRainMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_ADD_RAIN); + + if (orientCameraMethod != null) + { + final InsnList nodesToAdd = new InsnList(); + + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "orientCamera", "(F)V", false)); + orientCameraMethod.instructions.insertBefore(orientCameraMethod.instructions.get(orientCameraMethod.instructions.size() - 3), nodesToAdd); + MicdoodleTransformer.injectionCount++; + + for (int count = 0; count < orientCameraMethod.instructions.size(); count++) + { + final AbstractInsnNode list = orientCameraMethod.instructions.get(count); + + if (list instanceof VarInsnNode) + { + VarInsnNode varNode = (VarInsnNode) list; + + if (varNode.getOpcode() == Opcodes.DSTORE && varNode.var == 10) + { + nodesToAdd.clear(); + nodesToAdd.add(new VarInsnNode(Opcodes.DLOAD, 10)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getCameraZoom", "(D)D", false)); + nodesToAdd.add(new VarInsnNode(Opcodes.DSTORE, 10)); + orientCameraMethod.instructions.insert(list.getNext(), nodesToAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + } + + if (updateLightMapMethod != null) + { + boolean worldBrightnessInjection = false; + + for (int count = 0; count < updateLightMapMethod.instructions.size(); count++) + { + final AbstractInsnNode list = updateLightMapMethod.instructions.get(count); + + if (list instanceof MethodInsnNode) + { + MethodInsnNode nodeAt = (MethodInsnNode) list; + + // Original code: float f1 = + // worldclient.getSunBrightness(1.0F) * 0.95F + 0.05F; + if (!worldBrightnessInjection && nodeAt.owner.equals(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD))) + { + updateLightMapMethod.instructions.remove(updateLightMapMethod.instructions.get(count - 1)); + updateLightMapMethod.instructions.set(updateLightMapMethod.instructions.get(count - 1), new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, + "getWorldBrightness", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)F", false)); + MicdoodleTransformer.injectionCount++; + worldBrightnessInjection = true; + + continue; + } + } + + if (list instanceof IntInsnNode) + { + final IntInsnNode nodeAt = (IntInsnNode) list; + + if (nodeAt.operand == 255) + { + final InsnList nodesToAdd = new InsnList(); + + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 12)); + nodesToAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getColorRed", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)F", false)); + nodesToAdd.add(new InsnNode(Opcodes.FMUL)); + nodesToAdd.add(new VarInsnNode(Opcodes.FSTORE, 12)); + + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 13)); + nodesToAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getColorGreen", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)F", false)); + nodesToAdd.add(new InsnNode(Opcodes.FMUL)); + nodesToAdd.add(new VarInsnNode(Opcodes.FSTORE, 13)); + + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 14)); + nodesToAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getColorBlue", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)F", false)); + nodesToAdd.add(new InsnNode(Opcodes.FMUL)); + nodesToAdd.add(new VarInsnNode(Opcodes.FSTORE, 14)); + + updateLightMapMethod.instructions.insertBefore(nodeAt, nodesToAdd); + MicdoodleTransformer.injectionCount++; + + break; + } + } + } + } + + if (updateFogColorMethod != null) + { + for (int count = 0; count < updateFogColorMethod.instructions.size(); count++) + { + final AbstractInsnNode list = updateFogColorMethod.instructions.get(count); + + if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (!this.optifinePresent && this.methodMatches(MicdoodleTransformer.KEY_METHOD_GET_FOG_COLOR, nodeAt)) + { + InsnList toAdd = new InsnList(); + + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getFogColorHook", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VEC3) + ";", false)); + toAdd.add(new VarInsnNode(Opcodes.ASTORE, 9)); + + updateFogColorMethod.instructions.insertBefore(updateFogColorMethod.instructions.get(count + 2), toAdd); + MicdoodleTransformer.injectionCount++; + + this.printLog("bll.updateFogColor - getFogColor (no Optifine) done"); + } else if (this.methodMatches(MicdoodleTransformer.KEY_METHOD_GET_SKY_COLOR, nodeAt)) + { + InsnList toAdd = new InsnList(); + + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getSkyColorHook", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VEC3) + ";", false)); + toAdd.add(new VarInsnNode(Opcodes.ASTORE, 5)); + + updateFogColorMethod.instructions.insertBefore(updateFogColorMethod.instructions.get(count + 2), toAdd); + MicdoodleTransformer.injectionCount++; + + } + } + } + } + + if (addRainMethod != null) + { + for (int count = 0; count < addRainMethod.instructions.size(); count++) + { + final AbstractInsnNode listPos = addRainMethod.instructions.get(count); + + if (listPos.getOpcode() == Opcodes.FCMPL && listPos.getPrevious().getOpcode() == Opcodes.FCONST_0) + { + final InsnList nodesToAdd = new InsnList(); + nodesToAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + nodesToAdd.add(new FieldInsnNode(Opcodes.GETFIELD, this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_RENDERER), + this.getNameDynamic(MicdoodleTransformer.KEY_FIELD_ENTITY_RENDERER_RAINCOUNT), "I")); + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "addRainParticles", "(IIF)I", false)); + addRainMethod.instructions.insert(listPos, nodesToAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjectionWithFrames(node, true); + } + + private byte[] transformModelBiped(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_BIPED_SET_ROTATION); + + if (method != null) + { + // ModelBipedGC.setRotationAngles(this, par1, par2, par3, par4, + // par5, par6, par7Entity); + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 2)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 3)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 4)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 5)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 6)); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 7)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_MODEL_BIPED_GC, "setRotationAngles", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_MODEL_BIPED) + ";FFFFFFL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)V", false)); + method.instructions.insertBefore(method.instructions.get(method.instructions.size() - 2), toAdd); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjectionWithFrames(node, true); + } + + private byte[] transformRRCB(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RRCB_GET_WORLD_RENDERER); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode test = method.instructions.get(count); + if (test.getOpcode() == Opcodes.ARETURN) + { + InsnList toAdd = new InsnList(); + toAdd.add(new InsnNode(Opcodes.DUP)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "setCurrentBuffer", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VERTEX_BUFFER) + ";)V", false)); + method.instructions.insertBefore(test, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + private byte[] transformRenderChunk(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_REBUILD_CHUNK); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode test = method.instructions.get(count); + if (test.getOpcode() == Opcodes.IOR) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, optifinePresent ? 19 : 16)); + toAdd.add( + new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "isGrating", "(ZL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_BLOCK) + ";)Z", false)); + method.instructions.insertBefore(test, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + return this.finishInjection(node); + } + + public byte[] transformGuiSleep(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_WAKE_ENTITY); + + if (method != null) + { + method.instructions.insertBefore(method.instructions.get(method.instructions.size() - 3), + new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_MICDOODLE_PLUGIN, "onSleepCancelled", "()V", false)); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjection(node); + } + + public byte[] transformForgeHooks(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_BED_ORIENT_CAMERA); + + if (method != null) + { + method.instructions.insertBefore(method.instructions.get(0), new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_MICDOODLE_PLUGIN, "orientCamera", "()V", false)); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjection(node); + } + + public byte[] transformForgeArmor(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 2; + final Iterator methods = node.methods.iterator(); + while (methods.hasNext()) + { + MethodNode method = methods.next(); + if (method.name.equals("applyArmor")) + { + int count = 0; + for (int maxCount = method.instructions.size(); count < maxCount; count++) + { + final AbstractInsnNode test = method.instructions.get(count); + // Search for: double absorb = damage * prop.AbsorbRatio; + if (test.getOpcode() == Opcodes.GETFIELD && ((FieldInsnNode) test).name.equals("AbsorbRatio")) + { + final AbstractInsnNode target = method.instructions.get(count + 1); + if (target.getOpcode() == Opcodes.DMUL) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "armorDamageHook", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";)D", false)); + toAdd.add(new InsnNode(Opcodes.DMUL)); + method.instructions.insert(target, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + for (int maxCount = method.instructions.size(); count < maxCount; count++) + { + final AbstractInsnNode test = method.instructions.get(count); + // Search for: double armorDamage = Math.max(1.0F, damage / + // 4.0F); + if (test.getOpcode() == Opcodes.INVOKESTATIC && ((MethodInsnNode) test).name.equals("max")) // Math.max + { + final AbstractInsnNode target = method.instructions.get(count + 1); + if (target.getOpcode() == Opcodes.DSTORE && ((VarInsnNode) target).var == 10) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "armorDamageHook", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";)D", false)); + toAdd.add(new InsnNode(Opcodes.DMUL)); + method.instructions.insertBefore(target, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + break; + } + } + return this.finishInjection(node, true); + } + + public byte[] transformEntityGolem(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 0; + MicdoodleTransformer.injectionCount = 0; + String inter = CLASS_IENTITYBREATHABLE; + try + { + Class.forName(inter.replace("/", ".")); + if (!node.interfaces.contains(inter)) + { + node.interfaces.add(inter); + MicdoodleTransformer.injectionCount++; + } + MethodNode canBreathe = new MethodNode(Opcodes.ACC_PUBLIC, "canBreath", "()Z", null, null); + canBreathe.instructions.add(new InsnNode(Opcodes.ICONST_1)); + canBreathe.instructions.add(new InsnNode(Opcodes.IRETURN)); + node.methods.add(canBreathe); + } catch (Exception e) + { + } + + return this.finishInjection(node); + } + + public byte[] transformTileCableIC2Sealed(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 1; + MethodNode method = this.getMethodNoDesc(node, ""); + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode insn = method.instructions.get(count); + + if (insn instanceof MethodInsnNode) + { + ((MethodInsnNode) insn).owner = "ic2/core/block/wiring/TileEntityCable"; + MicdoodleTransformer.injectionCount++; + break; + } + + } + } + + return this.finishInjection(node); + } + + @SuppressWarnings("unchecked") + public byte[] transformCustomAnnotations(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 0; + MicdoodleTransformer.injectionCount = 0; + + final Iterator methods = node.methods.iterator(); + List ignoredMods = new ArrayList<>(); + + while (methods.hasNext()) + { + MethodNode methodnode = methods.next(); + + methodLabel: if (methodnode.visibleAnnotations != null && methodnode.visibleAnnotations.size() > 0) + { + for (AnnotationNode annotation : methodnode.visibleAnnotations) + { + if (annotation.desc.equals("L" + MicdoodleTransformer.CLASS_RUNTIME_INTERFACE + ";")) + { + List desiredInterfaces = new ArrayList<>(); + String modID = ""; + String deobfName = ""; + + for (int i = 0; i < annotation.values.size(); i += 2) + { + Object value = annotation.values.get(i); + + if (value.equals("clazz")) + { + desiredInterfaces.add(String.valueOf(annotation.values.get(i + 1))); + } else if (value.equals("modID")) + { + modID = String.valueOf(annotation.values.get(i + 1)); + } else if (value.equals("altClasses")) + { + desiredInterfaces.addAll((ArrayList) annotation.values.get(i + 1)); + } else if (value.equals("deobfName")) + { + deobfName = String.valueOf(annotation.values.get(i + 1)); + } + } + + if (modID.isEmpty() || !ignoredMods.contains(modID)) + { + boolean modFound = modID.isEmpty() || Loader.isModLoaded(modID); + + if (modFound) + { + for (String inter : desiredInterfaces) + { + try + { + Class.forName(inter); + } catch (ClassNotFoundException e) + { + + this.printLog("Galacticraft ignored missing interface \"" + inter + "\" from mod \"" + modID + "\"."); + continue; + } + + inter = inter.replace(".", "/"); + + if (deobfName.equals("EXTENDS")) + { + + this.printLog("Galacticraft added superclass \"" + inter + "\" dynamically from \"" + modID + "\" to class \"" + node.name + "\"."); + node.superName = inter; + MicdoodleTransformer.injectionCount++; + continue; + } + + if (!node.interfaces.contains(inter)) + { + + this.printLog("Galacticraft added interface \"" + inter + "\" dynamically from \"" + modID + "\" to class \"" + node.name + "\"."); + node.interfaces.add(inter); + MicdoodleTransformer.injectionCount++; + + if (!deobfName.isEmpty() && !deobfuscated) + { + String nameBefore = methodnode.name; + methodnode.name = deobfName; + + this.printLog("Galacticraft renamed method " + nameBefore + " to " + deobfName + " in class " + node.name); + } + } + + break; + } + } else + { + ignoredMods.add(modID); + + this.printLog("Galacticraft ignored dynamic interface insertion since \"" + modID + "\" was not found."); + } + } + + break methodLabel; + } + } + } + } + + if (MicdoodleTransformer.injectionCount > 0) + { + + this.printLog("Galacticraft successfully injected bytecode into: " + node.name + " (" + MicdoodleTransformer.injectionCount + ")"); + } + + return this.finishInjection(node, false); + } + + public byte[] transformParticleManager(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode renderParticlesMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RENDER_PARTICLES); + + if (renderParticlesMethod != null) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 2)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "renderFootprints", "(F)V", false)); + renderParticlesMethod.instructions.insert(renderParticlesMethod.instructions.get(0), toAdd); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjection(node); + } + + public byte[] transformItemRenderer(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode renderOverlaysMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RENDER_OVERLAYS); + + if (renderOverlaysMethod != null) + { + for (int count = 0; count < renderOverlaysMethod.instructions.size(); count++) + { + final AbstractInsnNode glEnable = renderOverlaysMethod.instructions.get(count); + + if (glEnable instanceof MethodInsnNode && ((MethodInsnNode) glEnable).name.equals(getNameDynamic(MicdoodleTransformer.KEY_METHOD_ENABLE_ALPHA))) + { + InsnList toAdd = new InsnList(); + + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "renderLiquidOverlays", "(F)V", false)); + + renderOverlaysMethod.instructions.insertBefore(glEnable, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformNetHandlerPlay(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 2; + + MethodNode handleNamedSpawnMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_HANDLE_SPAWN_PLAYER); + + if (handleNamedSpawnMethod != null) + { + for (int count = 0; count < handleNamedSpawnMethod.instructions.size(); count++) + { + final AbstractInsnNode list = handleNamedSpawnMethod.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + if (nodeAt.desc.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_OTHER_PLAYER))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_CUSTOM_OTHER_PLAYER)); + + handleNamedSpawnMethod.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.name.equals("") && nodeAt.owner.equals(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_OTHER_PLAYER))) + { + handleNamedSpawnMethod.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_CUSTOM_OTHER_PLAYER), "", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_GAME_PROFILE) + ";)V", false)); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformRenderGlobal(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode setupTerrainMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_SETUP_TERRAIN); + + if (setupTerrainMethod != null) + { + for (int count = 0; count < setupTerrainMethod.instructions.size(); count++) + { + final AbstractInsnNode nodeTest = setupTerrainMethod.instructions.get(count); + + if (nodeTest instanceof MethodInsnNode && ((MethodInsnNode) nodeTest).name.equals(this.getNameDynamic(MicdoodleTransformer.KEY_METHOD_GET_EYE_HEIGHT))) + { + /* + * The following (hacky) bytecode insertion will always let + * entities render above y=256 This is necessary for rockets + * since the 1.8 update changed directional frustum culling + * See WorldUtil.getRenderPosY + */ + InsnList list = new InsnList(); + list.add(new VarInsnNode(Opcodes.ALOAD, 1)); + list.add(new VarInsnNode(Opcodes.DLOAD, 15)); + list.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getRenderPosY", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";D)D", false)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.insertBefore(setupTerrainMethod.instructions.get(count - 2), list); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityClass(byte[] bytes) + { + if (isServer) + return bytes; + + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, KEY_METHOD_CAN_RENDER_FIRE); + + if (method != null) + { + for (int i = 0; i < method.instructions.size(); i++) + { + AbstractInsnNode nodeAt = method.instructions.get(i); + + if (nodeAt instanceof MethodInsnNode && nodeAt.getOpcode() == Opcodes.INVOKEVIRTUAL) + { + MethodInsnNode overwriteNode = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "shouldRenderFire", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)Z", false); + + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityArrow(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_ON_UPDATE); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list instanceof LdcInsnNode) + { + final LdcInsnNode nodeAt = (LdcInsnNode) list; + + if (nodeAt.cst.equals(0.05F)) + { + final VarInsnNode beforeNode = new VarInsnNode(Opcodes.ALOAD, 0); + final MethodInsnNode overwriteNode = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getArrowGravity", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_ARROW) + ";)F", false); + + method.instructions.insertBefore(nodeAt, beforeNode); + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformWorld(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RAIN_STRENGTH); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); ++count) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list.getOpcode() == Opcodes.ALOAD) + { + if (count + 10 >= method.instructions.size()) + { + // MicdoodlePlugin.showErrorDialog(new Object[]{"Exit", + // "Ignore"}, "Are there two copies of MicdoodleCore in + // your mods folder? Please remove one!"); + break; + } + // Remove ALOAD, GETFIELD, ALOAD, GETFIELD, ALOAD, GETFIELD, + // FSUB, FLOAD, FMUL, FADD but keep FRETURN + for (int i = 0; i < 10; ++i) + { + method.instructions.remove(method.instructions.get(count)); + } + + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getRainStrength", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";F)F", false)); + method.instructions.insertBefore(method.instructions.get(count), toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformOptifine(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_REGISTEROF); + + if (method != null) + { + AbstractInsnNode toAdd = new InsnNode(Opcodes.RETURN); + method.instructions.insertBefore(method.instructions.get(0), toAdd); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjection(node); + } + + public byte[] transformAEMeteorite(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MethodNode method = this.getMethodNoDesc(node, ""); + MicdoodleTransformer.operationCount = 1; + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); ++count) + { + final AbstractInsnNode list = method.instructions.get(count); + if (list.getOpcode() == Opcodes.GETFIELD && ((FieldInsnNode) list).name.equals("skyStoneDefinition")) + { + AbstractInsnNode toAdd = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "addAE2MeteorSpawn", + "(Ljava/lang/Object;L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_BLOCK) + ";)Z", false); + method.instructions.set(method.instructions.get(count - 5), toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformRefs(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + String intCache1 = this.getName(KEY_CLASS_INTCACHE); + String intCache2 = this.getObfName(KEY_CLASS_INTCACHE); + int invokeStatic = Opcodes.INVOKESTATIC; + + for (MethodNode m : node.methods) + { + int listsize = m.instructions.size(); + for (int count = 0; count < listsize; count++) + { + if (m.instructions.get(count).getOpcode() == invokeStatic) + { + MethodInsnNode mn = (MethodInsnNode) m.instructions.get(count); + if (mn.owner.equals(intCache1) || mn.owner.equals(intCache2)) + { + mn.owner = CLASS_INTCACHE_VARIANT; + } + } + } + } + + return this.finishInjection(node, false); + } + + public static class ObfuscationEntry + { + + public String name; + public String obfuscatedName; + + public ObfuscationEntry(String name, String obfuscatedName) + { + this.name = name; + this.obfuscatedName = obfuscatedName; + } + + public ObfuscationEntry(String name) + { + this(name, FMLDeobfuscatingRemapper.INSTANCE.unmap(name)); + } + } + + public static class MethodObfuscationEntry extends ObfuscationEntry + { + + public String methodDesc; + + public MethodObfuscationEntry(String name, String obfuscatedName, String methodDesc) + { + super(name, obfuscatedName); + this.methodDesc = methodDesc; + } + + public MethodObfuscationEntry(String commonName, String methodDesc) + { + this(commonName, commonName, methodDesc); + } + } + + public static class FieldObfuscationEntry extends ObfuscationEntry + { + + public FieldObfuscationEntry(String name, String obfuscatedName) + { + super(name, obfuscatedName); + } + } + + private void printResultsAndReset(String nodeName) + { + if (MicdoodleTransformer.operationCount > 0) + { + if (MicdoodleTransformer.injectionCount >= MicdoodleTransformer.operationCount) + { + + this.printLog("Galacticraft successfully injected bytecode into: " + nodeName + " (" + MicdoodleTransformer.injectionCount + " / " + MicdoodleTransformer.operationCount + ")"); + } else + { + MicdoodlePlugin.miccoreLogger.error("Potential problem: Galacticraft did not complete injection of bytecode into: " + nodeName + " (" + MicdoodleTransformer.injectionCount + " / " + + MicdoodleTransformer.operationCount + ")"); + } + } + } + + private MethodNode getMethod(ClassNode node, String keyName) + { + for (MethodNode methodNode : node.methods) + { + if (this.methodMatches(keyName, methodNode)) + { + return methodNode; + } + } + + return null; + } + + private MethodNode getMethodNoDesc(ClassNode node, String methodName) + { + for (MethodNode methodNode : node.methods) + { + if (methodNode.name.equals(methodName)) + { + return methodNode; + } + } + + return null; + } + + private boolean methodMatches(String keyName, MethodInsnNode node) + { + return node.name.equals(this.getNameDynamic(keyName)) && node.desc.equals(this.getDescDynamic(keyName)); + } + + private boolean methodMatches(String keyName, MethodNode node) + { + return node.name.equals(this.getNameDynamic(keyName)) && node.desc.equals(this.getDescDynamic(keyName)); + } + + public String getName(String keyName) + { + return this.nodemap.get(keyName).name; + } + + public String getObfName(String keyName) + { + return this.nodemap.get(keyName).obfuscatedName; + } + + public String getNameDynamic(String keyName) + { + try + { + if (this.deobfuscated) + { + return this.getName(keyName); + } else + { + return this.getObfName(keyName); + } + } catch (NullPointerException e) + { + this.printLog("Could not find key: " + keyName); + throw e; + } + } + + public String getDescDynamic(String keyName) + { + return ((MethodObfuscationEntry) this.nodemap.get(keyName)).methodDesc; + } + + private void printLog(String message) + { + if (ConfigManagerMicCore.enableDebug) + { + MicdoodlePlugin.miccoreLogger.info(message); + } + } + + private ClassNode startInjection(byte[] bytes) + { + final ClassNode node = new ClassNode(); + final ClassReader reader = new ClassReader(bytes); + reader.accept(node, 0); + MicdoodleTransformer.injectionCount = 0; + MicdoodleTransformer.operationCount = 0; + return node; + } + + private byte[] finishInjection(ClassNode node) + { + return this.finishInjection(node, true); + } + + private byte[] finishInjection(ClassNode node, boolean printToLog) + { + final ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); + node.accept(writer); + + if (printToLog) + { + this.printResultsAndReset(node.name); + } + + return writer.toByteArray(); + } + + private byte[] finishInjectionWithFrames(ClassNode node, boolean printToLog) + { + final ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + node.accept(writer); + + if (printToLog) + { + this.printResultsAndReset(node.name); + } + + return writer.toByteArray(); + } + + private boolean isPlayerApiActive() + { + return playerApiActive; + } + + private boolean mcVersionMatches(String testVersion) + { + return testVersion.contains(this.mcVersion); + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer.cfg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 00000000..80badb1f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1,41 @@ +public net.minecraft.client.renderer.EntityRenderer field_78503_V # cameraZoom +public net.minecraft.client.renderer.EntityRenderer field_78502_W # cameraYaw +public net.minecraft.client.renderer.EntityRenderer field_78509_X # cameraPitch +public net.minecraft.client.renderer.EntityRenderer func_78467_g(F)V # orientCamera + +public net.minecraft.client.gui.GuiIngame field_73838_g # overlayMessage + +public net.minecraft.client.audio.MusicTicker field_147678_c # currentMusic +public net.minecraft.client.audio.MusicTicker field_147677_b # mc +public net.minecraft.client.audio.MusicTicker field_147676_d # timeUntilNextMusic +public net.minecraft.client.audio.MusicTicker field_147679_a # rand + +public net.minecraft.network.EnumConnectionState field_150761_f # STATES_BY_CLASS +public net.minecraft.network.EnumConnectionState field_179247_h # directionMaps + +public net.minecraft.network.NetHandlerPlayServer field_147365_f # floatingTickCount + +public-f net.minecraft.world.biome.Biome func_180626_a(Lnet/minecraft/util/math/BlockPos;)F # getTemperature +public-f net.minecraft.world.biome.Biome func_185355_j()F # getBaseHeight +public-f net.minecraft.world.biome.Biome func_76727_i()F # getRainfall +public-f net.minecraft.world.biome.Biome func_185359_l()Ljava/lang/String; # getBiomeName +public-f net.minecraft.world.biome.Biome func_185360_m()F # getHeightVariation +public-f net.minecraft.world.biome.Biome func_185353_n()F # getDefaultTemperature +public-f net.minecraft.world.biome.Biome func_185361_o()I # getWaterColor +public-f net.minecraft.world.biome.Biome func_180628_b(Lnet/minecraft/world/World;Ljava/util/Random;Lnet/minecraft/world/chunk/ChunkPrimer;IID)V # generateBiomeTerrain +public-f net.minecraft.world.biome.Biome func_150559_j()Z # isSnowyBiome + +public net.minecraft.world.gen.structure.StructureComponent field_186168_b # mirror +public net.minecraft.world.gen.structure.StructureComponent field_186169_c # rotation + +public-f net.minecraft.world.chunk.Chunk field_76638_b # precipitationHeightMap +public net.minecraft.world.chunk.Chunk field_82912_p # heightMapMinimum +public net.minecraft.world.chunk.Chunk field_76634_f # heightMap + +public net.minecraft.world.WorldProvider field_76579_a # world + +public net.minecraft.entity.player.EntityPlayer field_71083_bS # sleeping +public net.minecraft.entity.player.EntityPlayer field_71076_b # sleepTimer + +## ONLY KEPT FOR BACKWARDS COMPAT WITH ASMODEUSCORE +public net.minecraft.world.biome.Biome$BiomeProperties field_185412_a # biomeName diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer_deobf.cfg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer_deobf.cfg new file mode 100644 index 00000000..78c4aa7c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer_deobf.cfg @@ -0,0 +1,38 @@ +# Micdoodle Core Access Transformer configuration file +# Fields +public net.minecraft.client.audio.MusicTicker rand +public net.minecraft.client.audio.MusicTicker mc +public net.minecraft.client.audio.MusicTicker currentMusic +public net.minecraft.client.audio.MusicTicker overlayMessage +public net.minecraft.client.gui.GuiIngame overlayMessage +public net.minecraft.client.gui.GuiScreen buttonList +public net.minecraft.client.gui.inventory.GuiContainer xSize +public net.minecraft.client.renderer.entity.RenderLivingBase mainModel +public net.minecraft.client.renderer.EntityRenderer cameraZoom +public net.minecraft.client.renderer.EntityRenderer cameraYaw +public net.minecraft.client.renderer.EntityRenderer cameraPitch +public net.minecraft.entity.EntityLivingBase attackingPlayer +public net.minecraft.entity.player.EntityPlayer sleeping +public net.minecraft.entity.player.EntityPlayer sleepTimer +public net.minecraft.inventory.InventoryCrafting eventHandler +public net.minecraft.network.EnumConnectionState directionMaps +public net.minecraft.network.EnumConnectionState STATES_BY_CLASS +public net.minecraft.network.NetHandlerPlayServer floatingTickCount +public net.minecraft.world.WorldProvider world +public net.minecraft.world.chunk.Chunk heightMapMinimum +public net.minecraft.world.chunk.Chunk precipitationHeightMap +public net.minecraft.world.chunk.Chunk heightMap +public net.minecraft.world.biome.Biome$BiomeProperties biomeName + +# Methods +public net.minecraft.client.renderer.EntityRenderer orientCamera(F)V + +public-f net.minecraft.world.biome.Biome getTemperature(Lnet/minecraft/util/math/BlockPos;)F +public-f net.minecraft.world.biome.Biome generateBiomeTerrain(Lnet/minecraft/world/World;Ljava/util/Random;Lnet/minecraft/world/chunk/ChunkPrimer;IID)V +public-f net.minecraft.world.biome.Biome getBaseHeight()F +public-f net.minecraft.world.biome.Biome getRainfall()F +public-f net.minecraft.world.biome.Biome getBiomeName()Ljava/lang/String; +public-f net.minecraft.world.biome.Biome getHeightVariation()F +public-f net.minecraft.world.biome.Biome getDefaultTemperature()F +public-f net.minecraft.world.biome.Biome getWaterColor()I +public-f net.minecraft.world.biome.Biome isSnowyBiome()Z \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_solar.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_solar.json new file mode 100644 index 00000000..ebcc6445 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_solar.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.advanced_solar.title" + }, + "description": { + "translate": "advancement.galacticraft.advanced_solar.description" + }, + "icon": { + "item": "galacticraftcore:solar", + "data": 4 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "advanced_solar": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:solar", + "data": 4 + } + ] + } + } + }, + "requirements": [ + [ + "advanced_solar" + ] + ], + "parent": "galacticraftcore:galacticraft/basic_solar" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_wafer.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_wafer.json new file mode 100644 index 00000000..d2681407 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_wafer.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.advanced_wafer.title" + }, + "description": { + "translate": "advancement.galacticraft.advanced_wafer.description" + }, + "icon": { + "item": "galacticraftcore:basic_item", + "data": 14 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:basic_item", + "data": 14 + } + ] + } + } + }, + "requirements": [ + [ + "compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/basic_wafer" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_solar.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_solar.json new file mode 100644 index 00000000..20432393 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_solar.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.solar.title" + }, + "description": { + "translate": "advancement.galacticraft.solar.description" + }, + "icon": { + "item": "galacticraftcore:solar", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "solar": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:solar", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "solar" + ] + ], + "parent": "galacticraftcore:galacticraft/basic_wafer" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_wafer.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_wafer.json new file mode 100644 index 00000000..d8a6547d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_wafer.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.basic_wafer.title" + }, + "description": { + "translate": "advancement.galacticraft.basic_wafer.description" + }, + "icon": { + "item": "galacticraftcore:basic_item", + "data": 13 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:basic_item", + "data": 13 + } + ] + } + } + }, + "requirements": [ + [ + "compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/circuit_fabricator" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/circuit_fabricator.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/circuit_fabricator.json new file mode 100644 index 00000000..37403bd6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/circuit_fabricator.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.circuit_fabricator.title" + }, + "description": { + "translate": "advancement.galacticraft.circuit_fabricator.description" + }, + "icon": { + "item": "galacticraftcore:machine2", + "data": 4 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "circuit_fabricator": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:machine2", + "data": 4 + } + ] + } + } + }, + "requirements": [ + [ + "circuit_fabricator" + ] + ], + "parent": "galacticraftcore:galacticraft/coal_generator" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/coal_generator.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/coal_generator.json new file mode 100644 index 00000000..d5dde35b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/coal_generator.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.coal_generator.title" + }, + "description": { + "translate": "advancement.galacticraft.coal_generator.description" + }, + "icon": { + "item": "galacticraftcore:machine", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "coal_generator": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:machine", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "coal_generator" + ] + ], + "parent": "galacticraftcore:galacticraft/root" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/compressor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/compressor.json new file mode 100644 index 00000000..5938f124 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/compressor.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.compressor.title" + }, + "description": { + "translate": "advancement.galacticraft.compressor.description" + }, + "icon": { + "item": "galacticraftcore:machine", + "data": 12 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:machine", + "data": 12 + } + ] + } + } + }, + "requirements": [ + [ + "compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/basic_wafer" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/create_space_station.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/create_space_station.json new file mode 100644 index 00000000..aaa50b20 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/create_space_station.json @@ -0,0 +1,29 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.create_space_station.title" + }, + "description": { + "translate": "advancement.galacticraft.create_space_station.description" + }, + "icon": { + "item": "galacticraftcore:basic_item", + "data": 1 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "create_space_station": { + "trigger": "galacticraftcore:create_space_station" + } + }, + "requirements": [ + [ + "create_space_station" + ] + ], + "parent": "galacticraftcore:galacticraft/moon" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/electric_compressor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/electric_compressor.json new file mode 100644 index 00000000..04e65b1c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/electric_compressor.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.electric_compressor.title" + }, + "description": { + "translate": "advancement.galacticraft.electric_compressor.description" + }, + "icon": { + "item": "galacticraftcore:machine2", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "electric_compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:machine2", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "electric_compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/compressor" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_all_tanks.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_all_tanks.json new file mode 100644 index 00000000..844fe370 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_all_tanks.json @@ -0,0 +1,65 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.fill_all_tanks.title" + }, + "description": { + "translate": "advancement.galacticraft.fill_all_tanks.description" + }, + "icon": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "small_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_light_full", + "data": 0 + } + ] + } + }, + "medium_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 0 + } + ] + } + }, + "heavy_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "small_tank" + ], + [ + "medium_tank" + ], + [ + "heavy_tank" + ] + ], + "parent": "galacticraftcore:galacticraft/fill_tank" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_tank.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_tank.json new file mode 100644 index 00000000..2bfbc1f4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_tank.json @@ -0,0 +1,61 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.fill_tank.title" + }, + "description": { + "translate": "advancement.galacticraft.fill_tank.description" + }, + "icon": { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "small_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_light_full", + "data": 0 + } + ] + } + }, + "medium_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 0 + } + ] + } + }, + "heavy_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "small_tank", + "medium_tank", + "heavy_tank" + ] + ], + "parent": "galacticraftcore:galacticraft/oxygen_compressor" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fuel_loader.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fuel_loader.json new file mode 100644 index 00000000..be08a16b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fuel_loader.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.fuel_loader.title" + }, + "description": { + "translate": "advancement.galacticraft.fuel_loader.description" + }, + "icon": { + "item": "galacticraftcore:fuel_loader", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "fuel_loader": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:fuel_loader", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "fuel_loader" + ] + ], + "parent": "galacticraftcore:galacticraft/rocket_t1" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/key_t1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/key_t1.json new file mode 100644 index 00000000..e34de109 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/key_t1.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.dungeon_key_moon.title" + }, + "description": { + "translate": "advancement.galacticraft.dungeon_key_moon.description" + }, + "icon": { + "item": "galacticraftcore:key", + "data": 0 + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "got_key":{ + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:key", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "got_key" + ] + ], + "parent": "galacticraftcore:galacticraft/moon_dungeon" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/launch_rocket.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/launch_rocket.json new file mode 100644 index 00000000..6dec880a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/launch_rocket.json @@ -0,0 +1,29 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.launch_rocket.title" + }, + "description": { + "translate": "advancement.galacticraft.launch_rocket.description" + }, + "icon": { + "item": "minecraft:flint_and_steel", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "launched_rocket": { + "trigger": "galacticraftcore:launch_rocket" + } + }, + "requirements": [ + [ + "launched_rocket" + ] + ], + "parent": "galacticraftcore:galacticraft/fuel_loader" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon.json new file mode 100644 index 00000000..fe0b75db --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon.json @@ -0,0 +1,32 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.moon.title" + }, + "description": { + "translate": "advancement.galacticraft.moon.description" + }, + "icon": { + "item": "galacticraftcore:basic_block_moon", + "data": 5 + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "traveled_to_moon":{ + "trigger":"minecraft:changed_dimension", + "conditions":{ + "to":"moon.moon" + } + } + }, + "requirements": [ + [ + "traveled_to_moon" + ] + ], + "parent": "galacticraftcore:galacticraft/launch_rocket" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy.json new file mode 100644 index 00000000..86854488 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.moon_buggy.title" + }, + "description": { + "translate": "advancement.galacticraft.moon_buggy.description" + }, + "icon": { + "item": "galacticraftcore:buggy", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "got_buggy":{ + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:buggy", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "got_buggy" + ] + ], + "parent": "galacticraftcore:galacticraft/moon_buggy_schematic" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy_schematic.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy_schematic.json new file mode 100644 index 00000000..0eb9ca78 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy_schematic.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.moon_buggy_schematic.title" + }, + "description": { + "translate": "advancement.galacticraft.moon_buggy_schematic.description" + }, + "icon": { + "item": "galacticraftcore:schematic", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "got_schematic":{ + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:schematic", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "got_schematic" + ] + ], + "parent": "galacticraftcore:galacticraft/key_t1" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_dungeon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_dungeon.json new file mode 100644 index 00000000..6103619a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_dungeon.json @@ -0,0 +1,29 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.moon_dungeon.title" + }, + "description": { + "translate": "advancement.galacticraft.moon_dungeon.description" + }, + "icon": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "found_boss":{ + "trigger":"galacticraftcore:boss_moon" + } + }, + "requirements": [ + [ + "found_boss" + ] + ], + "parent": "galacticraftcore:galacticraft/moon" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oil.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oil.json new file mode 100644 index 00000000..dec26227 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oil.json @@ -0,0 +1,32 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.oil.title" + }, + "description": { + "translate": "advancement.galacticraft.oil.description" + }, + "icon": { + "item": "galacticraftcore:bucket_oil", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "in_oil": { + "trigger": "minecraft:enter_block", + "conditions": { + "block": "galacticraftcore:crude_oil_still" + } + } + }, + "requirements": [ + [ + "in_oil" + ] + ], + "parent": "galacticraftcore:galacticraft/compressor" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_collector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_collector.json new file mode 100644 index 00000000..78639344 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_collector.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.oxygen_collector.title" + }, + "description": { + "translate": "advancement.galacticraft.oxygen_collector.description" + }, + "icon": { + "item": "galacticraftcore:collector", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "oxygen_collector": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:collector", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "oxygen_collector" + ] + ], + "parent": "galacticraftcore:galacticraft/compressor" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_compressor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_compressor.json new file mode 100644 index 00000000..664b6d5b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_compressor.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.oxygen_compressor.title" + }, + "description": { + "translate": "advancement.galacticraft.oxygen_compressor.description" + }, + "icon": { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "oxygen_compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "oxygen_compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/oxygen_collector" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_gear.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_gear.json new file mode 100644 index 00000000..b495d069 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_gear.json @@ -0,0 +1,87 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.all_oxygen_gear.title" + }, + "description": { + "translate": "advancement.galacticraft.all_oxygen_gear.description" + }, + "icon": { + "item": "galacticraftcore:oxygen_mask", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "small_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_light_full", + "data": 0 + } + ] + } + }, + "medium_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 0 + } + ] + } + }, + "heavy_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 0 + } + ] + } + }, + "oxygen_mask": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_mask" + } + ] + } + }, + "oxygen_gear": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_gear" + } + ] + } + } + }, + "requirements": [ + [ + "small_tank", + "medium_tank", + "heavy_tank" + ], + [ + "oxygen_mask" + ], + [ + "oxygen_gear" + ] + ], + "parent": "galacticraftcore:galacticraft/fill_tank" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/refinery.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/refinery.json new file mode 100644 index 00000000..473e467a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/refinery.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.refiery.title" + }, + "description": { + "translate": "advancement.galacticraft.refiery.description" + }, + "icon": { + "item": "galacticraftcore:refinery", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "refinery": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:refinery", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "refinery" + ] + ], + "parent": "galacticraftcore:galacticraft/oil" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_fuel.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_fuel.json new file mode 100644 index 00000000..33590cfb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_fuel.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.rocket_fuel.title" + }, + "description": { + "translate": "advancement.galacticraft.rocket_fuel.description" + }, + "icon": { + "item": "galacticraftcore:bucket_fuel", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "fuel_bucket": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:bucket_fuel", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "fuel_bucket" + ] + ], + "parent": "galacticraftcore:galacticraft/refinery" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_t1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_t1.json new file mode 100644 index 00000000..39c4ed0e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_t1.json @@ -0,0 +1,73 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.rocket_t1.title" + }, + "description": { + "translate": "advancement.galacticraft.rocket_t1.description" + }, + "icon": { + "item": "galacticraftcore:rocket_t1", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "rocket_crafted": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_t1", + "data": 0 + } + ] + } + }, + "rocket_crafted_18": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_t1", + "data": 1 + } + ] + } + }, + "rocket_crafted_36": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_t1", + "data": 2 + } + ] + } + }, + "rocket_crafted_56": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_t1", + "data": 3 + } + ] + } + } + }, + "requirements": [ + [ + "rocket_crafted", + "rocket_crafted_18", + "rocket_crafted_36", + "rocket_crafted_56" + ] + ], + "parent": "galacticraftcore:galacticraft/rocket_workbench" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_workbench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_workbench.json new file mode 100644 index 00000000..c086edd9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_workbench.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.rocket_workbench.title" + }, + "description": { + "translate": "advancement.galacticraft.rocket_workbench.description" + }, + "icon": { + "item": "galacticraftcore:rocket_workbench", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "rocket_workbench": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_workbench", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "rocket_workbench" + ] + ], + "parent": "galacticraftcore:galacticraft/compressor" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/root.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/root.json new file mode 100644 index 00000000..dd0d7700 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/root.json @@ -0,0 +1,31 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.root.title", + "bold": true, + "color": "gray" + }, + "description": { + "translate": "advancement.galacticraft.root.description" + }, + "icon": { + "item": "galacticraftcore:rocket_t1", + "data": 0 + }, + "frame": "task", + "show_toast": false, + "announce_to_chat": false, + "hidden": false, + "background": "galacticraftcore:textures/gui/galacticraft_background.png" + }, + "criteria": { + "tick": { + "trigger": "minecraft:tick" + } + }, + "requirements": [ + [ + "tick" + ] + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/spin_thruster.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/spin_thruster.json new file mode 100644 index 00000000..971e14b1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/spin_thruster.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.spin_thruster.title" + }, + "description": { + "translate": "advancement.galacticraft.spin_thruster.description" + }, + "icon": { + "item": "galacticraftcore:spin_thruster", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "spin_thruster":{ + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:spin_thruster", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "spin_thruster" + ] + ], + "parent": "galacticraftcore:galacticraft/create_space_station" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_frame.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_frame.json new file mode 100644 index 00000000..c9dfc119 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_frame.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:air_lock_frame_model" }, + "airlocktype=air_lock_frame": { "model": "galacticraftcore:air_lock_frame_model" }, + "airlocktype=air_lock_controller": { "model": "galacticraftcore:air_lock_controller_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_seal.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_seal.json new file mode 100644 index 00000000..e8eeb35d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_seal.json @@ -0,0 +1,22 @@ +{ + "variants": { + "connection=x": { + "model": "galacticraftcore:air_lock_seal_model", + "textures": { + "all": "galacticraftcore:blocks/air_lock_seal" + } + }, + "connection=z": { + "model": "galacticraftcore:air_lock_seal_model", "y": 90, + "textures": { + "all": "galacticraftcore:blocks/air_lock_seal" + } + }, + "connection=flat": { + "model": "galacticraftcore:air_lock_seal_flat_model", + "textures": { + "all": "galacticraftcore:blocks/air_lock_seal" + } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/aluminum_wire.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/aluminum_wire.json new file mode 100644 index 00000000..5ed37517 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/aluminum_wire.json @@ -0,0 +1,357 @@ +{ + "forge_marker": 1, + "variants": { + "down=false,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire" }, + + "down=false,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_n", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_n", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_n", "y": 180 }, + "down=false,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nd", "y": 270 }, + + "down=false,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nu", "y": 180 }, + "down=false,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nu", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nud", "y": 180 }, + "down=true,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nud", "y": 270 }, + + "down=false,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsd", "y": 90 }, + + "down=false,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsu", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsud", "y": 90 }, + + "down=false,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesu", "y": 90 }, + "down=false,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesu", "y": 180 }, + "down=false,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesu", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesud", "y": 90 }, + "down=true,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesud", "y": 180 }, + "down=true,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesud", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ned", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neu", "y": 180 }, + "down=false,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neu", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neud", "y": 180 }, + "down=true,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neud", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesw", "y": 0 }, + + "down=false,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_u", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_d", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ud", "y": 0 }, + + "down=false,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neswu", "y": 0 }, + "down=true,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neswd", "y": 0 }, + "down=true,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neswud", "y": 0 }, + + + + + "down=false,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire" }, + + "down=false,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 180 }, + "down=false,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 270 }, + + "down=false,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 180 }, + "down=false,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 180 }, + "down=true,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 270 }, + + "down=false,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsd", "y": 90 }, + + "down=false,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsu", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsud", "y": 90 }, + + "down=false,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 90 }, + "down=false,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 180 }, + "down=false,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 90 }, + "down=true,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 180 }, + "down=true,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 180 }, + "down=false,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 180 }, + "down=true,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesw", "y": 0 }, + + "down=false,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_u", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_d", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ud", "y": 0 }, + + "down=false,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswu", "y": 0 }, + "down=true,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswd", "y": 0 }, + "down=true,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswud", "y": 0 }, + + + + + "down=false,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire", "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_n", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_n", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_n", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_n", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nd", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nd", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ns", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ns", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nes", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nes", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nes", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nes", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesd", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesd", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ne", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ne", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ne", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ne", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ned", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ned", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ned", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ned", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesw", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_u", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_d", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neswu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neswd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neswud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + + + + "down=false,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire", "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ns", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ns", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesw", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_u", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_d", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/arclamp.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/arclamp.json new file mode 100644 index 00000000..4e5637f7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/arclamp.json @@ -0,0 +1,10 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:arclamp_base_side_model", "y": 90 }, + "facing=east": { "model": "galacticraftcore:arclamp_base_side_model", "y": 180 }, + "facing=west": { "model": "galacticraftcore:arclamp_base_side_model" }, + "facing=south": { "model": "galacticraftcore:arclamp_base_side_model", "y": 270 }, + "facing=up": { "model": "galacticraftcore:arclamp_base_model", "x": 180 }, + "facing=down": { "model": "galacticraftcore:arclamp_base_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_core.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_core.json new file mode 100644 index 00000000..85455dbf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_core.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_0_model" }], + "basictype=deco_block_0": { "model": "galacticraftcore:deco_block_0_model" }, + "basictype=deco_block_1": { "model": "galacticraftcore:deco_block_1_model" }, + "basictype=ore_copper_gc": { "model": "galacticraftcore:ore_copper_gc_model" }, + "basictype=ore_tin_gc": { "model": "galacticraftcore:ore_tin_gc_model" }, + "basictype=ore_aluminum_gc": { "model": "galacticraftcore:ore_aluminum_gc_model" }, + "basictype=ore_silicon": { "model": "galacticraftcore:ore_silicon_model" }, + "basictype=block_copper_gc": { "model": "galacticraftcore:block_copper_gc_model" }, + "basictype=block_tin_gc": { "model": "galacticraftcore:block_tin_gc_model" }, + "basictype=block_aluminum_gc": { "model": "galacticraftcore:block_aluminum_gc_model" }, + "basictype=block_meteoric_iron_gc": { "model": "galacticraftcore:block_meteoric_iron_gc_model" }, + "basictype=block_silicon_gc": { "model": "galacticraftcore:block_silicon_gc_model" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_moon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_moon.json new file mode 100644 index 00000000..d12c4ef7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_moon.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:basic_block_moon_model" }], + "basictypemoon=ore_copper_moon": { "model": "galacticraftcore:ore_copper_moon_model" }, + "basictypemoon=ore_tin_moon": { "model": "galacticraftcore:ore_tin_moon_model" }, + "basictypemoon=ore_cheese_moon": { "model": "galacticraftcore:ore_cheese_moon_model" }, + "basictypemoon=moon_dirt_moon": { "model": "galacticraftcore:moon_dirt_moon_model" }, + "basictypemoon=moon_stone": { "model": "galacticraftcore:moon_stone_model" }, + "basictypemoon=moon_turf": { "model": "galacticraftcore:moon_turf_model" }, + "basictypemoon=ore_sapphire_moon": { "model": "galacticraftcore:ore_sapphire_moon_model" }, + "basictypemoon=moon_dungeon_brick": { "model": "galacticraftcore:moon_dungeon_brick_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/block_multi.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/block_multi.json new file mode 100644 index 00000000..9abdf051 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/block_multi.json @@ -0,0 +1,32 @@ +{ + "forge_marker": 1, + "variants": { + "type": { + "solar": { "model": "galacticraftcore:block_multi_model" }, + "ss_base": { "model": "galacticraftcore:block_multi_model" }, + "rocket_pad": { "model": "galacticraftcore:landing_pad_model" }, + "nasa_workbench": { "model": "galacticraftcore:block_multi_model" }, + "solar_panel": { "model": "galacticraftcore:block_multi_model" }, + "buggy_pad": { "model": "galacticraftcore:buggy_pad_model" }, + "miner_base": { "model": "galacticraftcore:block_multi_model" }, + "dish_large": { "model": "galacticraftcore:block_multi_model" }, + "laser_turret": { "model": "galacticraftcore:block_multi_model" }, + + "cryo_chamber": { "model": "galacticraftcore:cryo_1" } + }, + + "rendertype": { + "0": { }, + "1": { "model": "galacticraftcore:cryo_1", "y": 90 }, + "2": { "model": "galacticraftcore:cryo_1", "y": 180 }, + "3": { "model": "galacticraftcore:cryo_1", "y": 270 }, + + "4": { "model": "galacticraftcore:cryo_2" }, + "5": { "model": "galacticraftcore:cryo_2", "y": 90 }, + "6": { "model": "galacticraftcore:cryo_2", "y": 180 }, + "7": { "model": "galacticraftcore:cryo_2", "y": 270 } + }, + + "inventory": [{ "model": "galacticraftcore:block_multi_model" }] + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/boss_spawner.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/boss_spawner.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/boss_spawner.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/breatheable_air.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/breatheable_air.json new file mode 100644 index 00000000..dd9a37eb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/breatheable_air.json @@ -0,0 +1,10 @@ +{ + "forge_marker": 1, + "defaults": { "model": "galacticraftcore:breatheable_air" }, + "variants": { + "normal": [{ }], + "inventory": [{ }], + + "thermal": { "true": { }, "false": { } } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_air.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_air.json new file mode 100644 index 00000000..cb0c61df --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_air.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:breatheable_air" }, + "inventory": { "model": "galacticraftcore:breatheable_air" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_breathable_air.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_breathable_air.json new file mode 100644 index 00000000..dd9a37eb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_breathable_air.json @@ -0,0 +1,10 @@ +{ + "forge_marker": 1, + "defaults": { "model": "galacticraftcore:breatheable_air" }, + "variants": { + "normal": [{ }], + "inventory": [{ }], + + "thermal": { "true": { }, "false": { } } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cargo.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cargo.json new file mode 100644 index 00000000..ebe9be80 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cargo.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:cargo_loader_model" }], + "facing=north,type=cargo_loader": { "model": "galacticraftcore:cargo_loader_model" }, + "facing=east,type=cargo_loader": { "model": "galacticraftcore:cargo_loader_model", "y": 90 }, + "facing=west,type=cargo_loader": { "model": "galacticraftcore:cargo_loader_model", "y": 270 }, + "facing=south,type=cargo_loader": { "model": "galacticraftcore:cargo_loader_model", "y": 180 }, + "facing=north,type=cargo_unloader": { "model": "galacticraftcore:cargo_unloader_model" }, + "facing=east,type=cargo_unloader": { "model": "galacticraftcore:cargo_unloader_model", "y": 90 }, + "facing=west,type=cargo_unloader": { "model": "galacticraftcore:cargo_unloader_model", "y": 270 }, + "facing=south,type=cargo_unloader": { "model": "galacticraftcore:cargo_unloader_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cheese.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cheese.json new file mode 100644 index 00000000..85582b71 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cheese.json @@ -0,0 +1,11 @@ +{ + "variants": { + "bites=0": { "model": "galacticraftcore:cheese_uneaten_model" }, + "bites=1": { "model": "galacticraftcore:cheese_slice1_model" }, + "bites=2": { "model": "galacticraftcore:cheese_slice2_model" }, + "bites=3": { "model": "galacticraftcore:cheese_slice3_model" }, + "bites=4": { "model": "galacticraftcore:cheese_slice4_model" }, + "bites=5": { "model": "galacticraftcore:cheese_slice5_model" }, + "bites=6": { "model": "galacticraftcore:cheese_slice6_model" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/collector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/collector.json new file mode 100644 index 00000000..ee3acf42 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/collector.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:collector_model" }, + "facing=east": { "model": "galacticraftcore:collector_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:collector_model", "y": 270 }, + "facing=south": { "model": "galacticraftcore:collector_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/compact_workbench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/compact_workbench.json new file mode 100644 index 00000000..d7602616 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/compact_workbench.json @@ -0,0 +1,9 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { "model": "galacticraftcore:compact_workbench" }, + "facing=east": { "model": "galacticraftcore:compact_workbench", "y": 90 }, + "facing=west": { "model": "galacticraftcore:compact_workbench", "y": 270 }, + "facing=south": { "model": "galacticraftcore:compact_workbench", "y": 180 } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_detector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_detector.json new file mode 100644 index 00000000..b19232f0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_detector.json @@ -0,0 +1,9 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_1_model" }], + "normal": { "model": "galacticraftcore:deco_block_1_model" }, + "var=0": { "model": "galacticraftcore:deco_block_1_model" }, + "var=1": { "model": "galacticraftcore:moon_stone_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_redstone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_redstone.json new file mode 100644 index 00000000..39cf9b31 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_redstone.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_1_model" }], + "normal": { "model": "galacticraftcore:deco_block_1_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater.json new file mode 100644 index 00000000..39cf9b31 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_1_model" }], + "normal": { "model": "galacticraftcore:deco_block_1_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater_pow.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater_pow.json new file mode 100644 index 00000000..39cf9b31 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater_pow.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_1_model" }], + "normal": { "model": "galacticraftcore:deco_block_1_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dishbase.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dishbase.json new file mode 100644 index 00000000..bc0777e0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dishbase.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:dishbase_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/distributor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/distributor.json new file mode 100644 index 00000000..92267f68 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/distributor.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:distributor_model" }, + "facing=east": { "model": "galacticraftcore:distributor_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:distributor_model", "y": 270 }, + "facing=south": { "model": "galacticraftcore:distributor_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dungeon_spawner.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dungeon_spawner.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dungeon_spawner.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/emergency_box.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/emergency_box.json new file mode 100644 index 00000000..fdfc94eb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/emergency_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:emergency_box" }, + "kit=true": { "model": "galacticraftcore:emergency_box" }, + "kit=false": { "model": "galacticraftcore:emergency_box" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/enclosed.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/enclosed.json new file mode 100644 index 00000000..f5986ef9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/enclosed.json @@ -0,0 +1,23 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:enclosed_aluminum_wire_model" }], + + "type=enclosed_hv_cable": { "model": "galacticraftcore:enclosed_hv_cable_model" }, + "type=enclosed_fluid_pipe": { "model": "galacticraftcore:enclosed_fluid_pipe_model" }, + "type=enclosed_copper_cable": { "model": "galacticraftcore:enclosed_copper_cable_model" }, + "type=enclosed_gold_cable": { "model": "galacticraftcore:enclosed_gold_cable_model" }, + "type=enclosed_te_conduit": { "model": "galacticraftcore:enclosed_te_conduit_model" }, + "type=enclosed_glass_fibre_cable": { "model": "galacticraftcore:enclosed_glass_fibre_cable_model" }, + "type=enclosed_lv_cable": { "model": "galacticraftcore:enclosed_lv_cable_model" }, + "type=enclosed_pipe_items_stone": { "model": "galacticraftcore:enclosed_pipe_items_stone_model" }, + "type=enclosed_pipe_items_cobblestone": { "model": "galacticraftcore:enclosed_pipe_items_cobblestone_model" }, + "type=enclosed_pipe_fluids_stone": { "model": "galacticraftcore:enclosed_pipe_fluids_stone_model" }, + "type=enclosed_pipe_fluids_cobblestone": { "model": "galacticraftcore:enclosed_pipe_fluids_cobblestone_model" }, + "type=enclosed_pipe_power_stone": { "model": "galacticraftcore:enclosed_pipe_power_stone_model" }, + "type=enclosed_pipe_power_gold": { "model": "galacticraftcore:enclosed_pipe_power_gold_model" }, + "type=enclosed_me_cable": { "model": "galacticraftcore:enclosed_me_cable_model" }, + "type=enclosed_aluminum_wire": { "model": "galacticraftcore:enclosed_aluminum_wire_model" }, + "type=enclosed_heavy_aluminum_wire": { "model": "galacticraftcore:enclosed_heavy_aluminum_wire_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fallen_meteor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fallen_meteor.json new file mode 100644 index 00000000..025bc2d5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fallen_meteor.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:fallen_meteor_model" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe.json new file mode 100644 index 00000000..3ad62862 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe.json @@ -0,0 +1,7528 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftcore:fluid_pipe_neswud", + "transform": "forge:default-block" + }, + "variants": { + "color=white,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=orange,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=magenta,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=light_blue,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=yellow,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=lime,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=pink,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=gray,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=silver,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=cyan,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=purple,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=blue,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=brown,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=green,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=red,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=black,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe_pull.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe_pull.json new file mode 100644 index 00000000..3ad62862 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe_pull.json @@ -0,0 +1,7528 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftcore:fluid_pipe_neswud", + "transform": "forge:default-block" + }, + "variants": { + "color=white,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=orange,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=magenta,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=light_blue,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=yellow,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=lime,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=pink,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=gray,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=silver,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=cyan,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=purple,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=blue,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=brown,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=green,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=red,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=black,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_tank.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_tank.json new file mode 100644 index 00000000..03295260 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_tank.json @@ -0,0 +1,8 @@ +{ + "variants": { + "down=false,up=false": { "model": "galacticraftcore:tank_ud" }, + "down=true,up=false": { "model": "galacticraftcore:tank_u" }, + "down=false,up=true": { "model": "galacticraftcore:tank_d" }, + "down=true,up=true": { "model": "galacticraftcore:tank" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel.json new file mode 100644 index 00000000..ae4a5da6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:fluid", + "custom": { "fluid": "fuel" } + }, + "variants": { + "fluid": [{ }], + "inventory": [{ }] + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel_loader.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel_loader.json new file mode 100644 index 00000000..7936085e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel_loader.json @@ -0,0 +1,33 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/machine_fuelloader", + "rear": "galacticraftcore:blocks/machine_fuelloader", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_oil_input", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:fuel_loader_model" }], + + "facing" : { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "msm" : { + "lr": { "model": "galacticraftcore:machine_tiered_lr" }, + "lb": { "model": "galacticraftcore:machine_tiered_lb" }, + "rl": { "model": "galacticraftcore:machine_tiered_rl" }, + "rb": { "model": "galacticraftcore:machine_tiered_rb" }, + "bl": { "model": "galacticraftcore:machine_tiered_bl" }, + "br": { "model": "galacticraftcore:machine_tiered_br" } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/glowstone_torch.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/glowstone_torch.json new file mode 100644 index 00000000..4c225e50 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/glowstone_torch.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:glowstone_torch_model" }, + "facing=east": { "model": "galacticraftcore:glowstone_torch_wall_model" }, + "facing=south": { "model": "galacticraftcore:glowstone_torch_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:glowstone_torch_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:glowstone_torch_wall_model", "y": 270 } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/grating.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/grating.json new file mode 100644 index 00000000..40e17a72 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/grating.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:grating" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad.json new file mode 100644 index 00000000..e02fc780 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:landing_pad_model" }, + "type=rocket": { "model": "galacticraftcore:landing_pad_model" }, + "type=buggy": { "model": "galacticraftcore:buggy_pad_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad_full.json new file mode 100644 index 00000000..ebf3ab7b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad_full.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:landing_pad_full_model" }, + "type=rocket": { "model": "galacticraftcore:landing_pad_full_model" }, + "type=buggy": { "model": "galacticraftcore:buggy_pad_full_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine.json new file mode 100644 index 00000000..092bc946 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine.json @@ -0,0 +1,15 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north,type=coal_generator": { "model": "galacticraftcore:coal_generator_model" }, + "facing=east,type=coal_generator": { "model": "galacticraftcore:coal_generator_model", "y": 90 }, + "facing=west,type=coal_generator": { "model": "galacticraftcore:coal_generator_model", "y": 270 }, + "facing=south,type=coal_generator": { "model": "galacticraftcore:coal_generator_model", "y": 180 }, + "facing=north,type=ingot_compressor": { "model": "galacticraftcore:ingot_compressor_model" }, + "facing=east,type=ingot_compressor": { "model": "galacticraftcore:ingot_compressor_model", "y": 90 }, + "facing=west,type=ingot_compressor": { "model": "galacticraftcore:ingot_compressor_model", "y": 270 }, + "facing=south,type=ingot_compressor": { "model": "galacticraftcore:ingot_compressor_model", "y": 180 }, + + "inventory": [{ "model": "galacticraftcore:coal_generator_model" }] + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine2.json new file mode 100644 index 00000000..c6ddc501 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine2.json @@ -0,0 +1,80 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/electric_compressor", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:electric_compressor_model" }], + + "facing" : { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "msm" : { + "lr": { "model": "galacticraftcore:machine_tiered_lr" }, + "lb": { "model": "galacticraftcore:machine_tiered_lb" }, + "rl": { "model": "galacticraftcore:machine_tiered_rl" }, + "rb": { "model": "galacticraftcore:machine_tiered_rb" }, + "bl": { "model": "galacticraftcore:machine_tiered_bl" }, + "br": { "model": "galacticraftcore:machine_tiered_br" } + }, + + "type" : { + "electric_compressor": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/electric_compressor", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "circuit_fabricator": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/circuit_fabricator", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "oxygen_storage": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/oxygen_storage_module_full", + "rear": "galacticraftcore:blocks/oxygen_storage_module_full", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_oxygen_input", + "el_out": "galacticraftcore:blocks/machine_oxygen_output", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "deconstructor": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/deconstructor", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine3.json new file mode 100644 index 00000000..f97bc94c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine3.json @@ -0,0 +1,21 @@ +{ + "forge_marker": 1, + "defaults": { + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:painter_model" }], + "facing": + { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "type": + { + "painter": { "model": "galacticraftcore:painter_model" + } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine4.json new file mode 100644 index 00000000..52d18e49 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine4.json @@ -0,0 +1,47 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "front": "galacticraftcore:blocks/advanced/electric_compressor", + "rear": "galacticraftcore:blocks/advanced/machine_side", + "side": "galacticraftcore:blocks/advanced/machine_side", + "el_in": "galacticraftcore:blocks/advanced/machine_input", + "el_out": "galacticraftcore:blocks/advanced/machine_side", + "top": "galacticraftcore:blocks/advanced/machine", + "base": "galacticraftcore:blocks/advanced/machine" } + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:electric_compressor_model" }], + + "facing" : { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "msm" : { + "lr": { "model": "galacticraftcore:machine_tiered_lr" }, + "lb": { "model": "galacticraftcore:machine_tiered_lb" }, + "rl": { "model": "galacticraftcore:machine_tiered_rl" }, + "rb": { "model": "galacticraftcore:machine_tiered_rb" }, + "bl": { "model": "galacticraftcore:machine_tiered_bl" }, + "br": { "model": "galacticraftcore:machine_tiered_br" } + }, + + "type" : { + "advanced_compressor": { + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "front": "galacticraftcore:blocks/advanced/electric_compressor", + "rear": "galacticraftcore:blocks/advanced/machine_side", + "side": "galacticraftcore:blocks/advanced/machine_side", + "el_in": "galacticraftcore:blocks/advanced/machine_input", + "el_out": "galacticraftcore:blocks/advanced/machine_side", + "top": "galacticraftcore:blocks/advanced/machine", + "base": "galacticraftcore:blocks/advanced/machine" } + } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine_tiered.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine_tiered.json new file mode 100644 index 00000000..013db1aa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine_tiered.json @@ -0,0 +1,118 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/electric_furnace", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:electric_furnace_model" }], + + "facing" : { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "msm" : { + "lr": { "model": "galacticraftcore:machine_tiered_lr" }, + "lb": { "model": "galacticraftcore:machine_tiered_lb" }, + "rl": { "model": "galacticraftcore:machine_tiered_rl" }, + "rb": { "model": "galacticraftcore:machine_tiered_rb" }, + "bl": { "model": "galacticraftcore:machine_tiered_bl" }, + "br": { "model": "galacticraftcore:machine_tiered_br" } + }, + + "type" : { + "electric_furnace": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/electric_furnace", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "arc_furnace": { + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "front": "galacticraftcore:blocks/advanced/electric_furnace", + "rear": "galacticraftcore:blocks/advanced/machine_side", + "side": "galacticraftcore:blocks/advanced/machine_side", + "el_in": "galacticraftcore:blocks/advanced/machine_input", + "el_out": "galacticraftcore:blocks/advanced/machine_side", + "top": "galacticraftcore:blocks/advanced/machine", + "base": "galacticraftcore:blocks/advanced/machine" } + }, + "energy_storage": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/energy_storage_module_0", + "rear": "galacticraftcore:blocks/energy_storage_module_0", + "side": "galacticraftcore:blocks/machine", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_output", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "cluster_storage": { + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "front": "galacticraftcore:blocks/advanced/energy_storage_module_0", + "rear": "galacticraftcore:blocks/advanced/energy_storage_module_0", + "side": "galacticraftcore:blocks/advanced/machine" , + "el_in": "galacticraftcore:blocks/advanced/machine_input" , + "el_out": "galacticraftcore:blocks/advanced/machine_output", + "top": "galacticraftcore:blocks/advanced/machine", + "base": "galacticraftcore:blocks/advanced/machine" } + } + }, + + "fill_value" : { + "0": { }, + "1": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_1", "rear": "galacticraftcore:blocks/energy_storage_module_1" }}, + "2": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_2", "rear": "galacticraftcore:blocks/energy_storage_module_2" }}, + "3": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_3", "rear": "galacticraftcore:blocks/energy_storage_module_3" }}, + "4": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_4", "rear": "galacticraftcore:blocks/energy_storage_module_4" }}, + "5": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_5", "rear": "galacticraftcore:blocks/energy_storage_module_5" }}, + "6": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_6", "rear": "galacticraftcore:blocks/energy_storage_module_6" }}, + "7": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_7", "rear": "galacticraftcore:blocks/energy_storage_module_7" }}, + "8": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_8", "rear": "galacticraftcore:blocks/energy_storage_module_8" }}, + "9": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_9", "rear": "galacticraftcore:blocks/energy_storage_module_9" }}, + "10": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_10", "rear": "galacticraftcore:blocks/energy_storage_module_10" }}, + "11": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_11", "rear": "galacticraftcore:blocks/energy_storage_module_11" }}, + "12": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_12", "rear": "galacticraftcore:blocks/energy_storage_module_12" }}, + "13": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_13", "rear": "galacticraftcore:blocks/energy_storage_module_13" }}, + "14": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_14", "rear": "galacticraftcore:blocks/energy_storage_module_14" }}, + "15": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_15", "rear": "galacticraftcore:blocks/energy_storage_module_15" }}, + "16": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_16", "rear": "galacticraftcore:blocks/energy_storage_module_16" }}, + + "17": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_0", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_0" }}, + "18": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_1", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_1" }}, + "19": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_2", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_2" }}, + "20": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_3", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_3" }}, + "21": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_4", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_4" }}, + "22": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_5", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_5" }}, + "23": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_6", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_6" }}, + "24": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_7", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_7" }}, + "25": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_8", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_8" }}, + "26": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_9", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_9" }}, + "27": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_10", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_10" }}, + "28": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_11", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_11" }}, + "29": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_12", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_12" }}, + "30": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_13", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_13" }}, + "31": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_14", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_14" }}, + "32": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_15", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_15" }}, + "33": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_16", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_16" }} + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/magnetic_table.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/magnetic_table.json new file mode 100644 index 00000000..4d7fa691 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/magnetic_table.json @@ -0,0 +1,12 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": { "model": "galacticraftcore:magnetic_table_model" }, + "facing=down": { "model": "galacticraftcore:magnetic_table_model", "x": 180 }, + "facing=up": { "model": "galacticraftcore:magnetic_table_model" }, + "facing=north": { "model": "galacticraftcore:magnetic_table_model", "x": 90 }, + "facing=south": { "model": "galacticraftcore:magnetic_table_model", "x": 90, "y": 180 }, + "facing=west": { "model": "galacticraftcore:magnetic_table_model", "x": 90, "y": 270 }, + "facing=east": { "model": "galacticraftcore:magnetic_table_model", "x": 90, "y": 90 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_brick.json new file mode 100644 index 00000000..61bc7756 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_brick.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftcore:moon_brick_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_stone.json new file mode 100644 index 00000000..2743fbf6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_stone.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftcore:moon_stone_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oil.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oil.json new file mode 100644 index 00000000..d4f42852 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oil.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:fluid", + "custom": { "fluid": "oil" } + }, + "variants": { + "fluid": [{ }], + "inventory": [{ }] + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_compressor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_compressor.json new file mode 100644 index 00000000..851c8e1d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_compressor.json @@ -0,0 +1,12 @@ +{ + "variants": { + "facing=north,type=compressor": { "model": "galacticraftcore:compressor_model" }, + "facing=east,type=compressor": { "model": "galacticraftcore:compressor_model", "y": 90 }, + "facing=west,type=compressor": { "model": "galacticraftcore:compressor_model", "y": 270 }, + "facing=south,type=compressor": { "model": "galacticraftcore:compressor_model", "y": 180 }, + "facing=north,type=decompressor": { "model": "galacticraftcore:decompressor_model" }, + "facing=east,type=decompressor": { "model": "galacticraftcore:decompressor_model", "y": 90 }, + "facing=west,type=decompressor": { "model": "galacticraftcore:decompressor_model", "y": 270 }, + "facing=south,type=decompressor": { "model": "galacticraftcore:decompressor_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_detector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_detector.json new file mode 100644 index 00000000..446d3d50 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_detector.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:detector_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/panel_lighting.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/panel_lighting.json new file mode 100644 index 00000000..34c17491 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/panel_lighting.json @@ -0,0 +1,15 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "lights": "galacticraftcore:blocks/panel_light_off", + "texture": "galacticraftcore:blocks/panel_light_off", + "particle": "blocks/glass" + }, + "model": "galacticraftcore:panel_lighting" + }, + "variants": { + "normal": [{ }], + "inventory": [{ }] + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/parachest.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/parachest.json new file mode 100644 index 00000000..2854b657 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/parachest.json @@ -0,0 +1,452 @@ +{ + "forge_marker": 1, + "variants": { + "color=white,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/plain" + } + }, + "color=white,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/plain" + } + }, + "color=white,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/plain" + } + }, + "color=white,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/plain" + } + }, + + "color=black,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/black" + } + }, + "color=black,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/black" + } + }, + "color=black,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/black" + } + }, + "color=black,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/black" + } + }, + + "color=light_blue,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/blue" + } + }, + "color=light_blue,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/blue" + } + }, + "color=light_blue,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/blue" + } + }, + "color=light_blue,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/blue" + } + }, + + "color=brown,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/brown" + } + }, + "color=brown,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/brown" + } + }, + "color=brown,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/brown" + } + }, + "color=brown,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/brown" + } + }, + + "color=blue,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/darkblue" + } + }, + "color=blue,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/darkblue" + } + }, + "color=blue,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/darkblue" + } + }, + "color=blue,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/darkblue" + } + }, + + "color=gray,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/darkgray" + } + }, + "color=gray,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgray" + } + }, + "color=gray,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgray" + } + }, + "color=gray,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgray" + } + }, + + "color=green,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/darkgreen" + } + }, + "color=green,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgreen" + } + }, + "color=green,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgreen" + } + }, + "color=green,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgreen" + } + }, + + "color=silver,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/gray" + } + }, + "color=silver,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/gray" + } + }, + "color=silver,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/gray" + } + }, + "color=silver,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/gray" + } + }, + + "color=lime,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/lime" + } + }, + "color=lime,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/lime" + } + }, + "color=lime,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/lime" + } + }, + "color=lime,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/lime" + } + }, + + "color=magenta,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/magenta" + } + }, + "color=magenta,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/magenta" + } + }, + "color=magenta,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/magenta" + } + }, + "color=magenta,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/magenta" + } + }, + + "color=orange,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/orange" + } + }, + "color=orange,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/orange" + } + }, + "color=orange,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/orange" + } + }, + "color=orange,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/orange" + } + }, + + "color=pink,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/pink" + } + }, + "color=pink,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/pink" + } + }, + "color=pink,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/pink" + } + }, + "color=pink,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/pink" + } + }, + + "color=purple,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/purple" + } + }, + "color=purple,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/purple" + } + }, + "color=purple,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/purple" + } + }, + "color=purple,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/purple" + } + }, + + "color=red,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/red" + } + }, + "color=red,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/red" + } + }, + "color=red,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/red" + } + }, + "color=red,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/red" + } + }, + + "color=cyan,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/teal" + } + }, + "color=cyan,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/teal" + } + }, + "color=cyan,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/teal" + } + }, + "color=cyan,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/teal" + } + }, + + "color=yellow,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/yellow" + } + }, + "color=yellow,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/yellow" + } + }, + "color=yellow,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/yellow" + } + }, + "color=yellow,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/yellow" + } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/platform.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/platform.json new file mode 100644 index 00000000..a9d7fcaa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/platform.json @@ -0,0 +1,10 @@ +{ + "forge_marker": 1, + "variants": { + "type=none": { "model": "galacticraftcore:platform_unset" }, + "type=nw": { "model": "galacticraftcore:platform", "y": 270 }, + "type=ne": { "model": "galacticraftcore:platform", "y": 180 }, + "type=se": { "model": "galacticraftcore:platform", "y": 90 }, + "type=sw": { "model": "galacticraftcore:platform" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/refinery.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/refinery.json new file mode 100644 index 00000000..25659afa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/refinery.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:refinery_model" }, + "facing=east": { "model": "galacticraftcore:refinery_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:refinery_model", "y": 270 }, + "facing=south": { "model": "galacticraftcore:refinery_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/rocket_workbench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/rocket_workbench.json new file mode 100644 index 00000000..3aec2c8c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/rocket_workbench.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "custom": { "flip-v": true }, + "model": "galacticraftcore:workbench.obj" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/sealer.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/sealer.json new file mode 100644 index 00000000..c60f49d4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/sealer.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:sealer_model" }, + "facing=east": { "model": "galacticraftcore:sealer_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:sealer_model", "y": 270 }, + "facing=south": { "model": "galacticraftcore:sealer_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_double.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_double.json new file mode 100644 index 00000000..8cc3bf47 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_double.json @@ -0,0 +1,13 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_0_model" }], + "variant=tin_slab_1": { "model": "galacticraftcore:deco_block_0_model" }, + "variant=tin_slab_2": { "model": "galacticraftcore:deco_block_1_model" }, + "variant=moon_slab": { "model": "galacticraftcore:moon_stone_model" }, + "variant=moon_bricks_slab": { "model": "galacticraftcore:moon_dungeon_brick_model" }, + "variant=mars_slab": { "model": "galacticraftplanets:cobblestone_model" }, + "variant=mars_bricks_slab": { "model": "galacticraftplanets:dungeon_brick_model" }, + "variant=asteroids_slab": { "model": "galacticraftplanets:asteroid_deco_model" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_half.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_half.json new file mode 100644 index 00000000..4c370ec6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_half.json @@ -0,0 +1,21 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:half_slab_tin_1" }], + "half=bottom,variant=tin_slab_1": { "model": "galacticraftcore:half_slab_tin_1" }, + "half=bottom,variant=tin_slab_2": { "model": "galacticraftcore:half_slab_tin_2" }, + "half=bottom,variant=moon_slab": { "model": "galacticraftcore:half_slab_moon_stone" }, + "half=bottom,variant=moon_bricks_slab": { "model": "galacticraftcore:half_slab_moon_dungeon_brick" }, + "half=bottom,variant=mars_slab": { "model": "galacticraftcore:half_slab_mars_cobblestone" }, + "half=bottom,variant=mars_bricks_slab": { "model": "galacticraftcore:half_slab_mars_dungeon_brick" }, + "half=bottom,variant=asteroids_slab": { "model": "galacticraftcore:half_slab_asteroid" }, + + "half=top,variant=tin_slab_1": { "model": "galacticraftcore:upper_slab_tin_1" }, + "half=top,variant=tin_slab_2": { "model": "galacticraftcore:upper_slab_tin_2" }, + "half=top,variant=moon_slab": { "model": "galacticraftcore:upper_slab_moon_stone" }, + "half=top,variant=moon_bricks_slab": { "model": "galacticraftcore:upper_slab_moon_dungeon_brick" }, + "half=top,variant=mars_slab": { "model": "galacticraftcore:upper_slab_mars_cobblestone" }, + "half=top,variant=mars_bricks_slab": { "model": "galacticraftcore:upper_slab_mars_dungeon_brick" }, + "half=top,variant=asteroids_slab": { "model": "galacticraftcore:upper_slab_asteroid" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/solar.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/solar.json new file mode 100644 index 00000000..bf475acb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/solar.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:basic_solar_model" }], + "facing=north,type=basic_solar": { "model": "galacticraftcore:basic_solar_model" }, + "facing=east,type=basic_solar": { "model": "galacticraftcore:basic_solar_model", "y": 90 }, + "facing=west,type=basic_solar": { "model": "galacticraftcore:basic_solar_model", "y": 270 }, + "facing=south,type=basic_solar": { "model": "galacticraftcore:basic_solar_model", "y": 180 }, + "facing=north,type=advanced_solar": { "model": "galacticraftcore:advanced_solar_model" }, + "facing=east,type=advanced_solar": { "model": "galacticraftcore:advanced_solar_model", "y": 90 }, + "facing=west,type=advanced_solar": { "model": "galacticraftcore:advanced_solar_model", "y": 270 }, + "facing=south,type=advanced_solar": { "model": "galacticraftcore:advanced_solar_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear.json new file mode 100644 index 00000000..3697a949 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_clear", + "1": "galacticraftcore:blocks/space_glass_frame_white" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#none", "Translucent": "galacticraftcore:space_glass_clear#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s1_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s2_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s3_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s4_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#none", "Translucent": "galacticraftcore:space_glass_clear#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#none", "Translucent": "galacticraftcore:space_glass_clear#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#none", "Translucent": "galacticraftcore:space_glass_clear#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ne_s1_s", "Translucent": "galacticraftcore:space_glass_clear#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ne_s2_s", "Translucent": "galacticraftcore:space_glass_clear#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#nse_s1_s", "Translucent": "galacticraftcore:space_glass_clear#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#nse_s2_s", "Translucent": "galacticraftcore:space_glass_clear#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_clear#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_clear#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear_tin.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear_tin.json new file mode 100644 index 00000000..fd249cb3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear_tin.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_clear", + "1": "galacticraftcore:blocks/space_glass_frame_tindeco" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#none", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s1_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s2_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s3_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s4_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#none", "Translucent": "galacticraftcore:space_glass_clear_tin#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#none", "Translucent": "galacticraftcore:space_glass_clear_tin#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#none", "Translucent": "galacticraftcore:space_glass_clear_tin#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ne_s1_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ne_s2_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#nse_s1_s", "Translucent": "galacticraftcore:space_glass_clear_tin#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#nse_s2_s", "Translucent": "galacticraftcore:space_glass_clear_tin#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_clear_tin#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_clear_tin#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong.json new file mode 100644 index 00000000..ae10f52f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_strong", + "1": "galacticraftcore:blocks/space_glass_frame_white" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#none", "Translucent": "galacticraftcore:space_glass_strong#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s1_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s2_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s3_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s4_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#none", "Translucent": "galacticraftcore:space_glass_strong#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#none", "Translucent": "galacticraftcore:space_glass_strong#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#none", "Translucent": "galacticraftcore:space_glass_strong#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ne_s1_s", "Translucent": "galacticraftcore:space_glass_strong#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ne_s2_s", "Translucent": "galacticraftcore:space_glass_strong#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#nse_s1_s", "Translucent": "galacticraftcore:space_glass_strong#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#nse_s2_s", "Translucent": "galacticraftcore:space_glass_strong#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_strong#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_strong#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong_tin.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong_tin.json new file mode 100644 index 00000000..be1980ec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong_tin.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_strong", + "1": "galacticraftcore:blocks/space_glass_frame_tindeco" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#none", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s1_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s2_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s3_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s4_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#none", "Translucent": "galacticraftcore:space_glass_strong_tin#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#none", "Translucent": "galacticraftcore:space_glass_strong_tin#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#none", "Translucent": "galacticraftcore:space_glass_strong_tin#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ne_s1_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ne_s2_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#nse_s1_s", "Translucent": "galacticraftcore:space_glass_strong_tin#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#nse_s2_s", "Translucent": "galacticraftcore:space_glass_strong_tin#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_strong_tin#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_strong_tin#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla.json new file mode 100644 index 00000000..bad1ecb1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla.json @@ -0,0 +1,107 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "0": "galacticraftcore:blocks/space_glass_vanilla", + "1": "galacticraftcore:blocks/space_glass_frame_white" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#none", "Translucent": "galacticraftcore:space_glass_vanilla#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s3_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s4_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#none", "Translucent": "galacticraftcore:space_glass_vanilla#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#none", "Translucent": "galacticraftcore:space_glass_vanilla#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#none", "Translucent": "galacticraftcore:space_glass_vanilla#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ne_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ne_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#nse_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#nse_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla_tin.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla_tin.json new file mode 100644 index 00000000..9693b895 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla_tin.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_vanilla", + "1": "galacticraftcore:blocks/space_glass_frame_tindeco" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#none", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s3_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s4_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#none", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#none", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#none", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ne_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ne_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#nse_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#nse_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_station_base.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_station_base.json new file mode 100644 index 00000000..0b16ecc0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_station_base.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:space_station_base_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/spin_thruster.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/spin_thruster.json new file mode 100644 index 00000000..91c80805 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/spin_thruster.json @@ -0,0 +1,12 @@ +{ + "variants": { + "facing=north,rev=false": { "model": "galacticraftcore:spin_thruster_model", "y": 180 }, + "facing=east,rev=false": { "model": "galacticraftcore:spin_thruster_model", "y": 270 }, + "facing=west,rev=false": { "model": "galacticraftcore:spin_thruster_model", "y": 90 }, + "facing=south,rev=false": { "model": "galacticraftcore:spin_thruster_model" }, + "facing=north,rev=true": { "model": "galacticraftcore:spin_thruster_model", "x": 180}, + "facing=east,rev=true": { "model": "galacticraftcore:spin_thruster_model", "x": 180, "y": 90}, + "facing=west,rev=true": { "model": "galacticraftcore:spin_thruster_model", "x": 180, "y": 270}, + "facing=south,rev=true": { "model": "galacticraftcore:spin_thruster_model", "x": 180, "y": 180} + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/telemetry.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/telemetry.json new file mode 100644 index 00000000..37fd7281 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/telemetry.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:telemetry_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_1.json new file mode 100644 index 00000000..99b260e3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_1.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftcore:tin_1_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_2.json new file mode 100644 index 00000000..57df833e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_2.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftcore:tin_2_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/treasure_chest.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/treasure_chest.json new file mode 100644 index 00000000..86d919ad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/treasure_chest.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { + "model": "galacticraftcore:treasure_chest" + }, + "facing=east": { + "model": "galacticraftcore:treasure_chest", + "y": 90 + }, + "facing=south": { + "model": "galacticraftcore:treasure_chest", + "y": 180 + }, + "facing=west": { + "model": "galacticraftcore:treasure_chest", + "y": 270 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch.json new file mode 100644 index 00000000..61ae1dd4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:unlit_torch_model" }, + "facing=east": { "model": "galacticraftcore:unlit_torch_wall_model" }, + "facing=south": { "model": "galacticraftcore:unlit_torch_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:unlit_torch_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:unlit_torch_wall_model", "y": 270 } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_lit.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_lit.json new file mode 100644 index 00000000..82d869f2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_lit.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:unlit_torch_lit_model" }, + "facing=east": { "model": "galacticraftcore:unlit_torch_lit_wall_model" }, + "facing=south": { "model": "galacticraftcore:unlit_torch_lit_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:unlit_torch_lit_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:unlit_torch_lit_wall_model", "y": 270 } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone.json new file mode 100644 index 00000000..88e1e393 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:unlit_torch_stone_model" }, + "facing=east": { "model": "galacticraftcore:unlit_torch_stone_wall_model" }, + "facing=south": { "model": "galacticraftcore:unlit_torch_stone_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:unlit_torch_stone_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:unlit_torch_stone_wall_model", "y": 270 } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone_lit.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone_lit.json new file mode 100644 index 00000000..dc536cb5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone_lit.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:unlit_torch_lit_stone_model" }, + "facing=east": { "model": "galacticraftcore:unlit_torch_lit_stone_wall_model" }, + "facing=south": { "model": "galacticraftcore:unlit_torch_lit_stone_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:unlit_torch_lit_stone_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:unlit_torch_lit_stone_wall_model", "y": 270 } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/view_screen.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/view_screen.json new file mode 100644 index 00000000..a42e2a8c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/view_screen.json @@ -0,0 +1,124 @@ +{ + "defaults": { "model": "galacticraftcore:screen" }, + "variants": { + "down=false,facing=south,left=false,right=false,up=false": { "model": "galacticraftcore:screen" }, + "down=true,facing=south,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr" }, + + "down=true,facing=south,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d" }, + "down=false,facing=south,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l" }, + "down=false,facing=south,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r" }, + "down=false,facing=south,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u" }, + + "down=false,facing=south,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur" }, + "down=true,facing=south,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr" }, + "down=false,facing=south,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul" }, + "down=true,facing=south,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl" }, + + "down=true,facing=south,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur" }, + "down=true,facing=south,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr" }, + "down=true,facing=south,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul" }, + "down=false,facing=south,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr" }, + + + "down=false,facing=west,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "y": 90 }, + "down=true,facing=west,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "y": 90 }, + + "down=true,facing=west,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "y": 90 }, + "down=false,facing=west,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "y": 90 }, + "down=false,facing=west,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "y": 90 }, + "down=false,facing=west,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "y": 90 }, + + "down=false,facing=west,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "y": 90 }, + "down=true,facing=west,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "y": 90 }, + "down=false,facing=west,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "y": 90 }, + "down=true,facing=west,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "y": 90 }, + + "down=true,facing=west,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "y": 90 }, + "down=true,facing=west,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "y": 90 }, + "down=true,facing=west,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "y": 90 }, + "down=false,facing=west,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "y": 90 }, + + + "down=false,facing=north,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "y": 180 }, + "down=true,facing=north,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "y": 180 }, + + "down=true,facing=north,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "y": 180 }, + "down=false,facing=north,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "y": 180 }, + "down=false,facing=north,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "y": 180 }, + "down=false,facing=north,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "y": 180 }, + + "down=false,facing=north,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "y": 180 }, + "down=true,facing=north,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "y": 180 }, + "down=false,facing=north,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "y": 180 }, + "down=true,facing=north,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "y": 180 }, + + "down=true,facing=north,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "y": 180 }, + "down=true,facing=north,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "y": 180 }, + "down=true,facing=north,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "y": 180 }, + "down=false,facing=north,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "y": 180 }, + + + "down=false,facing=east,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "y": 270 }, + "down=true,facing=east,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "y": 270 }, + + "down=true,facing=east,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "y": 270 }, + "down=false,facing=east,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "y": 270 }, + "down=false,facing=east,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "y": 270 }, + "down=false,facing=east,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "y": 270 }, + + "down=false,facing=east,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "y": 270 }, + "down=true,facing=east,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "y": 270 }, + "down=false,facing=east,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "y": 270 }, + "down=true,facing=east,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "y": 270 }, + + "down=true,facing=east,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "y": 270 }, + "down=true,facing=east,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "y": 270 }, + "down=true,facing=east,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "y": 270 }, + "down=false,facing=east,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "y": 270 }, + + + "down=false,facing=down,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "x": 90 }, + "down=true,facing=down,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "x": 90 }, + "down=true,facing=down,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "x": 90 }, + "down=false,facing=down,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "x": 90 }, + "down=false,facing=down,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "x": 90 }, + "down=false,facing=down,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "x": 90 }, + "down=false,facing=down,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "x": 90 }, + "down=true,facing=down,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "x": 90 }, + "down=false,facing=down,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "x": 90 }, + "down=true,facing=down,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "x": 90 }, + "down=true,facing=down,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "x": 90 }, + "down=true,facing=down,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "x": 90 }, + "down=true,facing=down,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "x": 90 }, + "down=false,facing=down,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "x": 90 }, + + "down=false,facing=up,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "x": 270 }, + "down=true,facing=up,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "x": 270 }, + "down=true,facing=up,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "x": 270 }, + "down=false,facing=up,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "x": 270 }, + "down=false,facing=up,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "x": 270 }, + "down=false,facing=up,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "x": 270 }, + "down=false,facing=up,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "x": 270 }, + "down=true,facing=up,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "x": 270 }, + "down=false,facing=up,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "x": 270 }, + "down=true,facing=up,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "x": 270 }, + "down=true,facing=up,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "x": 270 }, + "down=true,facing=up,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "x": 270 }, + "down=true,facing=up,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "x": 270 }, + "down=false,facing=up,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "x": 270 }, + + + "down=true,facing=south,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=west,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=north,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=east,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=up,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=down,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=false,facing=south,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=west,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=north,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=east,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=up,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=down,left=true,right=true,up=false": { "model": "galacticraftcore:screen" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/wall_gc.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/wall_gc.json new file mode 100644 index 00000000..acec4f78 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/wall_gc.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "wall": "galacticraftcore:blocks/deco_block_side", + "wall_bot": "galacticraftcore:blocks/deco_block_up", + "wall_top": "galacticraftcore:blocks/deco_block" + }, + "model": "galacticraftcore:wall_post", + "uvlock": true + }, + "variants": { + "inventory": [{ }], + "north": { + "true": { + "submodel": { + "north": { "model": "galacticraftcore:wall_side" } + } + }, + "false": { + + } + }, + "east": { + "true": { + "submodel": { + "east": { "model": "galacticraftcore:wall_side", "y": 90, "uvlock": true } + } + }, + "false": { + + } + }, + "south": { + "true": { + "submodel": { + "south": { "model": "galacticraftcore:wall_side", "y": 180, "uvlock": true } + } + }, + "false": { + + } + }, + "west": { + "true": { + "submodel": { + "west": { "model": "galacticraftcore:wall_side", "y": 270, "uvlock": true } + } + }, + "false": { + + } + }, + "up": { + "true": { + "submodel": { + "up": { "model": "galacticraftcore:wall_post" } + } + }, + "false": { + + } + }, + "variant": { + "tin_1_wall": { + "textures": { + "wall": "galacticraftcore:blocks/deco_block_side", + "wall_bot": "galacticraftcore:blocks/deco_block_up", + "wall_top": "galacticraftcore:blocks/deco_block" + } + }, + "tin_2_wall": { + "textures": { + "wall": "galacticraftcore:blocks/deco_block", + "wall_bot": "galacticraftcore:blocks/deco_block", + "wall_top": "galacticraftcore:blocks/deco_block" + } + }, + "moon_stone_wall": { + "textures": { + "wall": "galacticraftcore:blocks/bottom", + "wall_bot": "galacticraftcore:blocks/bottom", + "wall_top": "galacticraftcore:blocks/bottom" + } + }, + "moon_dungeon_brick_wall": { + "textures": { + "wall": "galacticraftcore:blocks/brick", + "wall_bot": "galacticraftcore:blocks/brick", + "wall_top": "galacticraftcore:blocks/brick" + } + }, + "mars_cobblestone_wall": { + "textures": { + "wall": "galacticraftplanets:blocks/cobblestone", + "wall_bot": "galacticraftplanets:blocks/cobblestone", + "wall_top": "galacticraftplanets:blocks/cobblestone" + } + }, + "mars_dungeon_brick_wall": { + "textures": { + "wall": "galacticraftplanets:blocks/brick", + "wall_bot": "galacticraftplanets:blocks/brick", + "wall_top": "galacticraftplanets:blocks/brick" + } + } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/core-logo.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/core-logo.png new file mode 100644 index 00000000..83d49f5c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/core-logo.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cs_cz.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cs_cz.lang new file mode 100644 index 00000000..aa02607a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cs_cz.lang @@ -0,0 +1,665 @@ +command.gcastrominer.count=Hráč %s má %s těžebních souprav. +commands.dimensionteleport=%s byl/a odeslán do atmosféry%s +commands.dimensiontp.too_many=Příliž mnoho argumentů! Použití: %s +commands.gcenergyunits.invalid_units=Neplatné jednotky v příkazu /GCEnergyUnits. Použití: %s +commands.gcenergyunits.no_units=Jablek? Je potřeba uvést jednotky! Použití: %s +commands.joinrace.no_team=Je potřeba uvést tým! Použití: %s +commands.ssinvite.not_found=Nemohu najít vesmírnou stanici s tvým jménem, musíš se tam nejdříve vypravit! +commands.ssinvite.wrong_usage=Příliž málo argumentů! Použití: %s +commands.ssnewowner.wrong_usage=Nemohu najít stanici ID# - existuje vůbec? Požití: %s +commands.ssuninvite.no_player=%s není na seznamu oprávněných uživatelů stanice! +container.cargoloader.name=Nakladač +container.cargounloader.name=Vykladač +container.fuelloader.name=Palivové čerpadlo +container.lander.name=Přistávací modul +container.oxygencollector.name=Kyslikový kolektor +container.oxygencompressor.name=Kyslíkový kompresor +container.oxygendecompressor.name=Kyslíkový dekompresor +container.oxygendistributor.name=Kyslíkový distributor +container.oxygensealer.name=Systém podpory života +container.parachest.name=Truhla na padáku +container.refinery.name=Refinérie +container.solaradvanced.name=Pokročilý solární panel +container.solarbasic.name=Základní solární panel +container.spaceship.name=Raketa typ 1 +container.treasurechest.name=Pokladnice +death.attack.oxygen_suffocation=%1$s zemřel/a na hypoxii. +death.attack.spaceship_crash=%1$s zemřel/a při pádu rakety. Sakra. +death.attack.thermal=%1$s zapoměl skafandr. +dimension.moon.name=Měsic +dimension.overworld.name=Zemský povrh +dimension.sun.name=Slunce +entity.alien_villager.name=Mimozemšťan +entity.buggy.name=Bugina +entity.celestial_screen.name=Obrazovka vesmírných těles +entity.evolved_creeper.name=Vyvinutý syčák +entity.evolved_skeleton.name=Vyvinutý kostlivec +entity.evolved_skeleton_boss.name=Vyvinutý kostlivec (Boss) +entity.evolved_spider.name=Vyvinutý pavouk +entity.evolved_zombie.name=Vyvinutý zombie +entity.flag.name=Vlajka +entity.gcflag.name=Vlajka +entity.gravity_arrow.name=Šíp +entity.lander.name=Přistávací modul +entity.meteor.name=Meteorit +entity.meteor_chunk.name=Úlomek meteoritu +entity.oxygen_bubble.name=Kyslíková bublina +entity.para_chest.name=Truhla na padáku +entity.rocket_t1.name=Raketa typ 1 +galaxy.milky_way=Mléčná dráha +gc.configgui.alternate_canister_recipe=Alternativní láhve +gc.configgui.asteroids_start=Režim výzvy (Asteroidy) +gc.configgui.biome_id_base=BiomeID Základny pro GC +gc.configgui.detectable_i_ds=Vypnutelná čísla +gc.configgui.disable_cheese_moon=Nevytvářet měsíční sýr +gc.configgui.disable_copper_moon=Nevytvářet měsíční měď +gc.configgui.disable_lander=Použít na měsíci padák místo přistávacího modulu +gc.configgui.disable_moon_village_gen=Nevytvářet mimozemšťany +gc.configgui.disable_space_station_creation=Zablokování vytváření vesmírných stanic +gc.configgui.disable_spaceship_grief=Vypnout exploze raket +gc.configgui.disable_spaceship_particles=Nezobrazovat částice z motoru rakety +gc.configgui.disable_tin_moon=Nevytvářet měsíční cín +gc.configgui.disable_update_check=Vypnout kontrolu aktualizací +gc.configgui.dungeon_boss_health_mod=Modifikátor života (boss) +gc.configgui.enable_aluminum_ore_gen=Četnost hliníku +gc.configgui.enable_copper_ore_gen=Četnost mědi +gc.configgui.enable_debug=Zobrazovat ladící výstup +gc.configgui.enable_other_mods_features=Povolit externí generátory terénu +gc.configgui.enable_retrogen_oil=Vytvářet na Zemi Retrogen Oil +gc.configgui.enable_sealer_edge_checks=Ověřování vzduchového uzávěru +gc.configgui.enable_silicon_ore_gen=Četnost silikonu +gc.configgui.enable_thaum_craft_nodes=Povolit ThaumCraft Nodes na planetách +gc.configgui.enable_tin_ore_gen=Četnost cínu +gc.configgui.external_oil_gen=Četnost externí ropy +gc.configgui.force_overworld_respawn=Oživení zpět na Zemi +gc.configgui.hard_mode=Vyšší obtížnost +gc.configgui.id_achiev_base=Číslo základního ocenění +gc.configgui.id_dimension_moon=Číslo měsíční dimenze +gc.configgui.id_dimension_overworld_orbit=Číslo dimenze stanice +gc.configgui.id_dimension_overworld_orbit_static=Statické číslo dimenze stanice +gc.configgui.id_schematic_add_schematic=Číslo nového schématu +gc.configgui.id_schematic_moon_buggy=Číslo schématu buginy +gc.configgui.id_schematic_rocket_t1=Číslo schématu rakety typu 1 +gc.configgui.key_override_fuel_level=Klávesa stavu paliva +gc.configgui.key_override_toggle_adv_goggles=Klávesa brýlí +gc.configgui.map_scroll_invert=Invertovat přibližování kolečkem na mapě +gc.configgui.map_scroll_sensitivity=Ciltivost kolečka na mapě +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Zobrazit více hvězd +gc.configgui.oil_gen_factor=Četnost ropy +gc.configgui.ore_dict_silicon=OreDict název silikonu v ostatních módech +gc.configgui.other_mod_ore_gen_i_ds=Generování surovin ostatních módů na planetách +gc.configgui.override_capes=Přepisování plášťů +gc.configgui.override_map=Klávesa mapy galaxie +gc.configgui.oxygen_indicator_bottom=Posunout indikátor kyslíku dolu +gc.configgui.oxygen_indicator_left=Posunout indikátor kyslíku vlevo +gc.configgui.quick_mode=Rychlá hra (snazší) +gc.configgui.rocket_disable_overworld_return=Vypnout navrácení rakety +gc.configgui.rocket_disabled_dimensions=Nastavení dosahu raket +gc.configgui.rocket_fuel_factor=Účinnost raketového paliva +gc.configgui.sealable_i_ds=Utěsnitelné bloky +gc.configgui.space_station_energy_scalar=Modifikátor energie na stanici +gc.configgui.space_stations_require_permission=Povolení ke vstupu na stanici +gc.configgui.static_loaded_dimensions=Staticky načtené dimenze +gc.configgui.suffocation_cooldown=Čas do udušení +gc.configgui.suffocation_damage=Poškození dušením +gc.configgui.title=Nastavení jádra Galacticraftu +gc.configgui.whitelist_co_f_h_core_gen=Povolené položky CoFHCore generátoru terénu +gui.battery_slot.desc.0=Slot na baterii, vložte ji +gui.battery_slot.desc.1=nebo připojte zdroj. +gui.bed_fail.message=Sakra, co by se stalo, pokud by mi ve spánku došel kyslík? Budu potřebovat kryogenní komoru abych mohl spát ve vesmíru! +gui.buggy.accel.name=Zrychlení +gui.buggy.decel.name=Zpomelení +gui.buggy.inv.name=Inventář / Palivo +gui.buggy.storage_space=Nákladový prostor +gui.buggy.turn.name=Zatáčení vlevo-vpravo +gui.button.back.name=Zpět +gui.button.disable.name=Vypnout +gui.button.disableseal.name=Vypnout uzávěr +gui.button.enable.name=Zapnout +gui.button.enableseal.name=Spustit uzávěr +gui.button.hide_dest.name=Skrýt +gui.button.loadfuel.name=Natankovat +gui.button.loaditems.name=Naložit +gui.button.next.name=Další +gui.button.refine.name=Zpracovat +gui.button.stoploading.name=Zastavit +gui.button.stoprefine.name=Zastavit +gui.button.stopunloading.name=Zastavit +gui.button.unhide_dest.name=Zobrazit +gui.button.unloaditems.name=Vyložit +gui.button.unlockschematic.name=Odemknout další +gui.checkbox.horizontal.name=Horizontální režim +gui.checkbox.invert.name=Opačné chování +gui.checkbox.player_name.name=Jméno hráče je +gui.checkbox.player_within.name=Hráč v okruhu +gui.checkbox.redstone_signal.name=Otevře při přivedení napětí +gui.chest.warning.wrongkey=Budu potřebovat klíč typu %s abych to odemknul! +gui.choose_planet.desc.moon=Obyvatelný#Žádný kyslík#Gravitace: 18% +gui.choose_planet.desc.overworld=Plná života#Obyvatelná#Gravitace: 100% +gui.chooseplanet.alreadycreated1.name=Vesmírná stanice +gui.chooseplanet.alreadycreated2.name=je již vytvořena! +gui.chooseplanet.cannotcreate1.name=Zde nelze vytvořit +gui.chooseplanet.cannotcreate2.name=vesmírnou stanici! +gui.creative_only.desc=Pouze v kreativním módu +gui.display.nolink=Odpojeno +gui.docking_rocket.current_vel.name=Aktualní rychlost +gui.docking_rocket.distance_from.name=Vzdálenost od cíle +gui.docking_rocket.target_vel.name=Rychlost cíle +gui.docking_rocket.warning.name.0=Pro zpomalení stiskni %s +gui.docking_rocket.warning.name.1=Pro zrychlení stiskni %s +gui.dropbox.player_distance.name.0=1 metr +gui.dropbox.player_distance.name.1=2 metry +gui.dropbox.player_distance.name.2=5 metrů +gui.dropbox.player_distance.name.3=10 metrů +gui.electric_compressor.desc.0=Postup +gui.energy_storage.desc.0=Zásobárna energie +gui.energy_storage.desc.1=Energie +gui.flag.already_placed=Vlajka již umístěna! +gui.frequency_module.desc.0=Umožńuje slyšet vzdálené +gui.frequency_module.desc.1=zvuky a signály +gui.frequencymodule.warning0=Nejspíš budu potřebovat +gui.frequencymodule.warning1=pokud tady budu chtít něco slyšet. +gui.fuel_output.desc.0=Vložte prázdnou plechovku +gui.fuel_output.desc.1=do tohoto slotu pro jejich +gui.fuel_output.desc.2=naplnění z nádrže +gui.fuel_tank.desc.0=Palivová nádrž. Vyžaduje +gui.fuel_tank.desc.1=palivové čerpadlo. +gui.fuel_tank.desc.2=Ale může být také naplněna +gui.fuel_tank.desc.3=pomocí plechovek. +gui.fuel_tank.desc.4=Palivová nádrž +gui.infinite_item.desc=Nekonečno +gui.lander.velocity=Vstupní rychlost +gui.lander.velocityu=m/s +gui.lander.warning2=Zastav " +gui.lander.warning3=" zpomal! +gui.max_output.desc=Max. výstup +gui.message.addnewsch.name=Nové schéma +gui.message.apply.name=Použít +gui.message.assign_name.name=Přidělit jméno +gui.message.atmosphere.name=Atmosféra +gui.message.back.name=Zpět +gui.message.breed.name=Rodit +gui.message.bubble_visible.name=Viditelné bubliny +gui.message.can_create_space_station.name=Vesmírná stanice zde může být postavena. +gui.message.cancel.name=Zrušit +gui.message.cannot_create_space_station.name=Vesmírná stanice zde nemůže být postavena. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Klikněte znovu pro přiblížení (měsíce a satelity) +gui.message.click_again.1.name=Klikněte znovu pro přiblížení (měsíce) +gui.message.click_again.2.name=Klikněte znovu pro přiblížení (satelity) +gui.message.click_again.3.name=Klikněte znovu pro přiblížení +gui.message.clicklink=Pro přístup na Galacticraft Wiki klikněte zde +gui.message.create_ss.name=Vytvořit +gui.message.daynightcycle.name=Délka dne +gui.message.energy=Energie +gui.message.environment.name=Akcelerátor prostředí +gui.message.exit.name=Ukončit +gui.message.fuel.name=Palivo +gui.message.full.name=plný +gui.message.generating.name=Vyrábí +gui.message.grow.name=Růst +gui.message.heal.name=Léčit +gui.message.help1=Nápověda Galacticraftu +gui.message.help1a=Pro opětovné zobrazení této zprávy napište +gui.message.help2=Pro rady ohledně vesmírného programu +gui.message.help3=Pro rady ohledně paliv +gui.message.in.name=Vstup +gui.message.launch.name=Start +gui.message.max_energy=Plná energie +gui.message.meansurfacetemp.name=Střední teplota na povrchu +gui.message.moon.atmosphere.0.name=Žádná +gui.message.moon.daynightcycle.0.name=29,5 Pozemského dne +gui.message.moon.meansurfacetemp.0.name=(Den) 253 °C +gui.message.moon.meansurfacetemp.1.name=(Noc) -153 °C +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and +gui.message.moon.surfacecomposition.1.name=Traces of Cheese +gui.message.moon.surfacegravity.0.name=0,1654g +gui.message.moon.surfacegravity.1.name=(18% Pozemské) +gui.message.of.name=z +gui.message.oil.name=Ropa +gui.message.out.name=Výstup +gui.message.overworld.atmosphere.0.name=Dusík 78 % a Kyslík 21 % +gui.message.overworld.atmosphere.1.name=Obyvatelná +gui.message.overworld.daynightcycle.0.name=1 Pozemský den +gui.message.overworld.meansurfacetemp.0.name=14 °C +gui.message.overworld.surfacecomposition.0.name=Kámen, hlína +gui.message.overworld.surfacecomposition.1.name=a štěrk +gui.message.overworld.surfacegravity.0.name=1,0g +gui.message.overworld.surfacegravity.1.name=(100% Pozemské) +gui.message.prelaunch=Seznam předstartovní přípravy +gui.message.rename.name=Přejmenovat +gui.message.select_ss.name=Vyberte vesmírnou stanici +gui.message.ss_owner.name=Vlastník: +gui.message.status.name=Stav +gui.message.strengthen.name=Posílit +gui.message.surfacecomposition.name=Složení povrchu +gui.message.surfacegravity.name=Gravitace na povrchu +gui.message.thermal_status.name=Teplotní regulátor +gui.message.tier.name=Typ %d +gui.message.unnamed.name=Nepojmenováno +gui.missing_core.name.0=MicdoodleCore nenalezeno ve složce módů. +gui.missing_core.name.1=Chyba při načítání Galacticraftu +gui.missing_core.name.2=Ukončete Minecraft a nainstalujte MicdoodleCore +gui.missing_core.name.3=Klikněte zde pro stažení +gui.new_schematic.slot.desc.0=Slot pro nová schémata. +gui.new_schematic.slot.desc.1=Můžete je nalézt +gui.new_schematic.slot.desc.2=v dungeonech na planetách +gui.new_schematic.slot.desc.3=a měsících +gui.oil_tank.desc.0=Nádrž na ropu, může být naplněna +gui.oil_tank.desc.1=pomocí plechovek. +gui.oxygen.warning=Chybné uspořádání kyslíku! +gui.oxygen_compressor.slot.desc.0=Vložte sem kyslíkovou láhev, aby došlo +gui.oxygen_compressor.slot.desc.1=k jejímu naplnění dýchatelným kyslíkem. +gui.oxygen_decompressor.slot.desc.0=Vložte sem kyslíkovou láhev, +gui.oxygen_decompressor.slot.desc.1=aby došlo k jejímu vyprázdnění. +gui.oxygen_slot.desc.0=Slot na kyslík, umístěte zde tlakovou láhev +gui.oxygen_slot.desc.1=nebo připojte kyslíkový rozvod. +gui.oxygen_storage.desc.0=Zásobárna kyslíku +gui.oxygen_storage.desc.1=Kyslík +gui.oxygen_use.desc=Využití kyslíku +gui.per_second=/s +gui.player.bpm=pulz +gui.player.food=Hlad +gui.player.health=Životy +gui.player.ouch=Sakra! +gui.receiver.cannot_attach=Nemohu sem umístit přijímač! +gui.requires_controller.desc=Vyžaduje odpalovač +gui.rocket.countdown=Odpočet +gui.rocket.height=Výška +gui.rocket.inv.name=Inventář / Palivo +gui.rocket.launch.name=Start +gui.rocket.launched=Odpálena +gui.rocket.on_launchpad=Na startovací rampě +gui.rocket.speed=Rychlost +gui.rocket.turn.name=Zatáčení vlevo-vpravo +gui.rocket.updown.name=Zatáčení nahoru-dolu +gui.rocket.warning.nofuel=Nejdříve potřebuji nějaké palivo! +gui.rocket.warning.nogyroscope=Záhadné síly si s tebou hrají a gyroskopy se prudce otáčí! +gui.rocket.warning.noparachute=Nemám padák! Pokud stisknu znovu start, tak není cesta zpět! +gui.rocket_type.0=Nákladní prostor: 18 +gui.rocket_type.1=Nákladní prostor: 36 +gui.rocket_type.2=Nákladní prostor: 56 +gui.rocket_type.3=Natankovaná +gui.seconds=s +gui.sensor.advanced=Pokročilý režim +gui.sensor.advancedoff=VYP +gui.sensor.advancedon=ZAP +gui.show_bubble.desc.0=Zobrazit bubliny +gui.skeleton_boss.message=Boss zmizel, neopouštějte místnost během boje! Vstupem do místnosti se boss znovu objeví. +gui.space_race.chat.add_success=%s se připojil(a) k vesmírnému závodu! +gui.space_race.chat.already_part=Už jsi součástí vesmírného závodu! +gui.space_race.chat.invite_received=Obdržel(a) si pozvánku k připojení k vesmírnému závodu od %s. +gui.space_race.chat.not_found=Hráč jménem: %s nenalezen. +gui.space_race.chat.remove_success=%s opustil(a) vesmírný závod. +gui.space_race.chat.to_join=Pro připojení k %s použíj příkaz %s +gui.space_race.coming_soon=Již brzy! +gui.space_race.create.add_players.name=Přidat hráče +gui.space_race.create.back.name=Zpět +gui.space_race.create.brush_radius.name=Poloměr štětce +gui.space_race.create.brush_size.name=Velikost štětce +gui.space_race.create.change_color.name.0=Změň +gui.space_race.create.change_color.name.1=Tým +gui.space_race.create.change_color.name.2=Barvu +gui.space_race.create.close.name=Zavřít +gui.space_race.create.customize.name=Změň vlajku +gui.space_race.create.eraser_radius.name=Poloměr gumy +gui.space_race.create.eraser_size.name=Velikost gumy +gui.space_race.create.global_stats.name=Zobrazit globální statistiky +gui.space_race.create.invite_player.name=Pozvat hráče +gui.space_race.create.player_radius.name=Poznámka: Hráči musí být v okruhu 25 bloků! +gui.space_race.create.rem_players.name=Odstranit hráče +gui.space_race.create.remove.name=Odebrat +gui.space_race.create.remove_player.name=Odstraň hráče +gui.space_race.create.rename.name=Přejmenovat tým +gui.space_race.create.send_invite.name=Poslat pozvánku +gui.space_race.create.server_stats.name=Zobrazit statistiku serveru +gui.space_race.create.title.name=Vesmírný závod +gui.space_race.create.title.name.0=Nastavení +gui.space_race.create.title.name.1=vesmírného závodu +gui.space_race.join.member_count.name=%d členů +gui.space_race.join.name=Připojit +gui.space_race.join.owner.name=Vlastník +gui.space_race.join.title.name=Přidat se do závodu +gui.space_race.unnamed=Nepojmenovaný tým +gui.spacestation.added=%s tě označil jako oprávněného uživatele jeho/její vesmírné stanice. +gui.spacestation.addsuccess=%s úspěšně přidán(a) do seznamu oprávněných uživatelů stanice. +gui.spacestation.allow_all_false=Vaše vesmírná stanice není nyní přístupná každému. +gui.spacestation.allow_all_true=Vaše vesmírná stanice je nyní přístupná každému (pokud si to rozmyslíte použíjte /ssinvite -all). +gui.spacestation.changesuccess=Vlastník vesmírné stanice změněn z hráče %s na hráče %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=%s úspěšně odebrán(a) ze seznamu oprávněných uživatelů stanice. +gui.spacestation.to_allow_entry=aby jste mu umožnil/a vstup na stanici. +gui.spacestation.type_command=Napište +gui.status.active.name=Aktivní +gui.status.air_lock_closed.name=Vzduchový uzávěr zavřen +gui.status.air_lock_open.name=Vzduchový uzávěr otevřen +gui.status.blockedfully.name=Slunce není vidět +gui.status.blockedpartial.name=Slunce částečně vyditelné +gui.status.check_pending.name=Probíhá kontrola +gui.status.check_starting.name=Kontrola zahájena +gui.status.checking_seal.name=Kontrola uzávěru +gui.status.collecting.name=Sbírá +gui.status.collectingenergy.name=Sbírám energii +gui.status.compressing.name=Lisuje +gui.status.disabled.name=Vypnuto +gui.status.fulltank.name=Láhev je plná +gui.status.generating.name=Vyrábí +gui.status.hull_heat.name=Teplota pláště +gui.status.idle.name=Zapnuto +gui.status.missingleaves.name=Nedostatek rostlin +gui.status.missingoxygen.name=Nedostatek kyslíku +gui.status.missingpower.name=Nedostatek energie +gui.status.missingtank.name=Nekompatibilní tl. láhev +gui.status.nofuel.name=Chybí palivo +gui.status.noinvtarget.name=Cíl nemá inventář! +gui.status.noitems.name=Není co naložit! +gui.status.nooil.name=Chybí ropa +gui.status.not_available.name=N/A +gui.status.not_generating.name=Nevyrábí +gui.status.notargetload.name=Není kam nakládat! +gui.status.notargetunload.name=Není od kud vykládat! +gui.status.off.name=Vypnuto +gui.status.on.name=Zapnuto +gui.status.raining.name=Prší +gui.status.ready.name=Připraven +gui.status.refining.name=Zpracovávám +gui.status.running.name=V provozu +gui.status.sealed.name=Utěsněno +gui.status.sealerblocked.name=Uzavřen výstupní ventil! +gui.status.sun_visible.name=Slunce vyditelné +gui.status.tank_empty.name=Prázný zásobník kyslíku +gui.status.targetempty.name=Cíl je vyložen! +gui.status.targetfull.name=Cíl je plně naložen! +gui.status.unknown.name=Neznámý +gui.status.unsealed.name=Neutěsněno +gui.tank.oxygen_remaining=Zásoba kyslíku +gui.telemetry_fail.message=Nejdříve je potřeba použít frekvenční modul na sledované entitě (nebo na sobě). +gui.telemetry_fail_no_frequency_module.message=Pro použití je potřeba frekvenční modul. +gui.telemetry_fail_wearing_it.message=Pro navazování telemetrického spojení je potřeba si sundat frekvenční modul. +gui.telemetry_succeed.message=Telemetrické spojení navázáno. +gui.thermal_slot.desc.0=Slot na teplotni regulator +gui.thermal_slot.desc.1=tepelný regulátor' zde (volitelně) +gui.thermal_slot.desc.2=Poznámka: Využívá hodně energie +gui.title.air_lock.name=%sův kontroler přechodové komory +gui.tracking.message=Navazuji spojení. Klikněte pravým tlačítkem na jednotku telemetrie pro navázání spojení. +gui.warning=Varování! +gui.warning.invalid_thermal=Nefunkční tepelná ochrana! +gui.warning.noroom=Nedostatek místa! +item.air_fan.name=Kyslíkový ventilátor +item.air_vent.name=Kyslíkový výdech +item.basic_item.ambient_thermal_controller.name=Teplotní regulátor +item.basic_item.canned_food.name=Jídlo v plechovce +item.basic_item.compressed_aluminum.name=Válcovaný hliník +item.basic_item.compressed_bronze.name=Válcovaný bronz +item.basic_item.compressed_copper.name=Válcovaná měď +item.basic_item.compressed_iron.name=Válcované železo +item.basic_item.compressed_steel.name=Válcovaná ocel +item.basic_item.compressed_tin.name=Válcovaný cín +item.basic_item.dehydrated_apple.name=Dehydrované jablko +item.basic_item.dehydrated_carrot.name=Dehydrovaná mrkev +item.basic_item.dehydrated_melon.name=Dehydrovaný meloun +item.basic_item.dehydrated_potato.name=Dehydrované rajče +item.basic_item.frequency_module.name=Frekvenční modul +item.basic_item.ingot_aluminum.name=Hliníkový ingot +item.basic_item.ingot_bronze.name=Bronzový ingot +item.basic_item.ingot_copper.name=Měděný ingot +item.basic_item.ingot_steel.name=Ocelový ingot +item.basic_item.ingot_tin.name=Cínový ingot +item.basic_item.raw_silicon.name=Nezpracovaný silikon +item.basic_item.solar_module_0.name=Solární článek +item.basic_item.solar_module_1.name=Solární panel +item.basic_item.wafer_advanced.name=Pokročilý Wafer +item.basic_item.wafer_basic.name=Základní wafer +item.basic_item.wafer_solar.name=Modrý solární wafer +item.battery.name=Baterie +item.bucket_fuel.name=Kbelík s palivem +item.bucket_oil.name=Kbelík s ropou +item.buggy.name=Bugina +item.buggymat.seat.name=Sedačka k bugině +item.buggymat.storage.name=Zavazadelník k bugině +item.buggymat.wheel.name=Kolo k bugině +item.canister.copper.name=Měděná plechovka +item.canister.tin.name=Cínová plechovka +item.canvas.name=Plátno +item.cheese_block.name=Sýr +item.cheese_curd.name=Kousek sýra +item.compressed_meteoric_iron.name=Stlačené meteorické železo +item.empty_liquid_canister.name=Prázdná plechovka +item.engine.tier1booster.name=Posilovač typ 1 +item.engine.tier1engine.name=Raketový motor typ 1 +item.flag.name=Vlajka +item.fuel.name=Raketové palivo +item.fuel_canister.name=Plechovka naplněná palivem +item.fuel_canister_partial.name=Plechovka částečně naplněná palivem +item.heavy_plating.name=Plech pro těžký provoz +item.hot_description.name=Horký +item.infinite_battery.name=Nevyčerpatelná Baterie +item.infinite_oxygen.name=Nevyčerpatelná láhev kyslíku +item.key.t1.name=Klíč typ 1 +item.meteor_chunk.name=Meteorický kámen +item.meteor_chunk_hot.name=Meteorický kámen +item.meteoric_iron_ingot.name=Ingot meteorického železa +item.meteoric_iron_raw.name=Nezpracované meteorické železo +item.nose_cone.name=Špička rakety +item.oil_canister.name=Plechovka naplněná ropou +item.oil_canister_partial.name=Plechovka částečně naplněná ropou +item.oil_extractor.name=Přenosná těžební souprava +item.oxygen_concentrator.name=Kyslíkový koncentrátor +item.oxygen_gear.name=Kyslíková výstroj +item.oxygen_mask.name=Kyslíková maska +item.oxygen_tank_heavy_empty.name=Prázdná velká kyslíková láhev +item.oxygen_tank_heavy_full.name=Velká kyslíková láhev +item.oxygen_tank_light_empty.name=Prázdná malá kyslíková láhev +item.oxygen_tank_light_full.name=Malá kyslíková láhev +item.oxygen_tank_med_empty.name=Prázdná střední kyslíková láhev +item.oxygen_tank_med_full.name=Střední kyslíková láhev +item.parachute_black.name=Černý padák +item.parachute_blue.name=Světle modrý padák +item.parachute_brown.name=Hnědý padák +item.parachute_darkblue.name=Modrý padák +item.parachute_darkgray.name=Šedý padák +item.parachute_darkgreen.name=Zelený padák +item.parachute_gray.name=Světle šedý padák +item.parachute_lime.name=Světle zelený padák +item.parachute_magenta.name=Tmavě purpurový padák +item.parachute_orange.name=Oranžový padák +item.parachute_pink.name=Růžový padák +item.parachute_plain.name=Padák +item.parachute_purple.name=Fialový padák +item.parachute_red.name=Červený padák +item.parachute_teal.name=Modrozelený padák +item.parachute_yellow.name=Žlutý padák +item.rocket_fins.name=Raketové Křidélko +item.rocket_t1.name=Raketa typ 1 +item.schematic.name=Schéma konstrukčního pracoviště +item.sensor_glasses.name=Senzorové brýle +item.sensor_lens.name=Senzorové čočky +item.standard_wrench.name=Standardní klíč +item.steel_axe.name=Ocelová sekera +item.steel_boots.name=Ocelové boty +item.steel_chestplate.name=Ocelový hrudní chránič +item.steel_helmet.name=Ocelová helma +item.steel_hoe.name=Ocelová motyka +item.steel_leggings.name=Ocelové kalhoty +item.steel_pickaxe.name=Ocelový krumpáč +item.steel_pole.name=Ocelový stožár +item.steel_shovel.name=Ocelová lopata +item.steel_sword.name=Ocelový meč +item.tier1.desc=Typ 1 +item_desc.powerdraw.name=Vyžadovaná energie: %s /s +item_desc.shift.name=Stiskni %s pro více informací +item_group.galacticraft_blocks=Galacticraft Bloky +item_group.galacticraft_items=Galacticraft Předměty +keybind.map.name=Mapa galaxie +keybind.sensortoggle.name=Přepnutí detekčního módu +keybind.spaceshipinv.name=Otevření inventáře +keybind.vehiclebackward.name=Jízda vzad +keybind.vehicledown.name=Jízda dolu +keybind.vehicleforward.name=Jízda vpřed +keybind.vehicleleft.name=Jízda vlevo +keybind.vehicleright.name=Jízda vpravo +keybind.vehicleup.name=Jízda nehoru +moon.moon=Měsic +newversion.failed.name=Pokus o zjištění nové verze Galacticraftu selhal! Další pokus za 15 sekund. +newversion.success.name=Nalezena verze Galacticraftu: +planet.jupiter=Jupiter +planet.mercury=Merkur +planet.neptune=Neptun +planet.overworld=Zemský povrh +planet.saturn=Saturn +planet.uranus=Uran +planet.venus=Venuše +satellite.spacestation.overworld=Vesmírná stanice kolem Země +schematic.moonbuggy.name=Bugina +schematic.rocket_t1.name=Raketa typ 1 +schematic.rocket_t2.name=Raketa typ 2 +solarsystem.sol=Solární soustava +star.sol=Slunce +tile.air_lock_controller.name=Ovládací terminál vzduchového uzávěru +tile.air_lock_frame.description=Ramy vzduchového uzávěru, pokud jsou postaveny v obdelníkové formaci, s jedním blokem nahrazeným ovládacím terminálem, vytvoří funkční vzduchový uzávěr. +tile.air_lock_frame.name=Rám vzduchového uzávěru +tile.air_lock_seal.name=Vzduchový uzávěr +tile.aluminum_wire.alu_wire.description=Hliníkový kabel se používá k propojení zdrojů el. energie a spotřebičů. +tile.aluminum_wire.alu_wire.name=Hliníkový kabel +tile.aluminum_wire.alu_wire_heavy.description=Zesílený hliníkový kabel se používá k propojení zdrojů el. energie a spotřebičů. Jeho větší průřez umožňuje využít vyšší výkon spotřebiču typu 2. +tile.aluminum_wire.alu_wire_heavy.name=Zesílený hliníkový kabel +tile.arclamp.description=Obloukové lampy jsou používány jako silný zdroj světla pro rozsáhlé oblasti, také nutí většinu zvířat utéct. +tile.arclamp.name=Oblouková lampa +tile.basic_block_core.block_aluminum_gc.name=Hliníkový blok +tile.basic_block_core.block_copper_gc.name=Měděný blok +tile.basic_block_core.block_meteoric_iron_gc.name=Blok meteorického železa +tile.basic_block_core.block_tin_gc.name=Cínový blok +tile.basic_block_core.block_silicon_gc.name=Křemíkový blok +tile.basic_block_core.deco_block_0.name=Cínový dekorační blok +tile.basic_block_core.deco_block_1.name=Cínový dekorační blok +tile.basic_block_core.ore_aluminum_gc.name=Hliníková ruda +tile.basic_block_core.ore_copper_gc.name=Měděná ruda +tile.basic_block_core.ore_silicon.name=Křemíková ruda +tile.basic_block_core.ore_tin_gc.name=Cínová ruda +tile.basic_block_moon.bricks.name=Cihly +tile.basic_block_moon.cheesestone.name=Sýrová ruda +tile.basic_block_moon.coppermoon.name=Měděná ruda +tile.basic_block_moon.moondirt.name=Hlína +tile.basic_block_moon.moongrass.name=Měsíční povrh +tile.basic_block_moon.moonstone.name=Kámen +tile.basic_block_moon.tinmoon.name=Cínová ruda +tile.buggy_pad.description=Čerpací stanice pro buginu umožňuje natankování buginy která je na ní umístěna. Musí k ní však být připojeno palivové čerpadlo a plošina musí být umístěna ve formaci 3x3. Nelze použít ke startu raket! +tile.cargo.loader.name=Nakladač +tile.cargo.unloader.name=Vykladač +tile.cargo_loader.description=Nakladače naloží náklad do raket nebo vozidel s nákladovým prostorem. Musí být připojeny ke startovací rampě nebo čerpací stanici. +tile.cargo_unloader.description=Vykladače vyloží náklad z raket nebo vozidel s nákladovým prostorem. Musí být připojeny ke startovací rampě nebo čerpací stanici. +tile.cheese.description=Bloky síra jsou vytvářeny z měsíčního síra. Lze je umístit a sníst. +tile.cheese.name=Blok sýra +tile.circuit_fabricator.description=Stroj na výrobu solárních waferů vyrábí ze základních materiálů křemíkové wafery, které jsou používany k výrobě pokročilých strojů. +tile.coal_generator.description=Tepelný generátor spaluje uhlí a vyrábí enektřinu. Nejjednodušší ale nejméně účinná metoda výroby elektřiny. +tile.collector.description=Kyslíkový kolektor sbírá kyslík z okolní zeleně. +tile.collector.name=Kyslikový kolektor +tile.compressor.description=Lis vytváří z ingotů jejich válcované ekvivalenty. +tile.compressor_electric.description=Electrický Lis vytváří z ingotů jejich válcované ekvivalenty. Tím, že válcuje dva ingoty zároveň, se stává efektivnějším než jeho předchůdce. +tile.crude_oil.name=Ropa +tile.crude_oil_moving.name=Surová ropa +tile.crude_oil_still.name=Surová ropa +tile.dishbase.description=Parabolická anténa umožňuje sledovat pohyb vesmírné stanice a komunikovat s ní. +tile.dishbase.name=Parabolická anténa +tile.distributor.description=Kyslíkový distributor vytvoří kyslíkovou bublinu pomocí rozvodů. Toto zajistí obyvatelné podmínky uvnitř bubliny. +tile.distributor.name=Bublinový distributor kyslíku +tile.dummyblock.cryogenic_chamber.name=Kryogenní komora +tile.dummyblock.launch_pad.name=Startovací rampa +tile.dummyblock.nasa_workbench.name=Raketové konstrukční pracoviště +tile.dummyblock.solar.name=Solární panel +tile.dummyblock.space_station_base.name=Vesmírná stanice +tile.electric_furnace_tier1.description=Electrická pec je rychlejší alternativa k běžné peci. +tile.electric_furnace_tier2.description=Oblouková pec je rychlejší alternativa k běžné i elektrické peci. +tile.enclosed.aluminum_wire.name=Utěsněný hliníkový kabel +tile.enclosed.heavy_aluminum_wire.name=Utěsněný zesílený Al kabel +tile.enclosed.copper_cable.name=Utěsněný měděný kabel +tile.enclosed.description=Utěsněné bloky by měly být použity v případech kdy potřebujete vytvořit utěsněný prostor, jako například stěny základny. +tile.enclosed.glass_fibre_cable.name=Utěsněný optický kabel +tile.enclosed.gold_cable.name=Utěsněný zlatý kabel +tile.enclosed.hv_cable.name=Utěsněný VN kabel +tile.enclosed.lv_cable.name=Utěsněný sdělovací kabel +tile.enclosed.me_cable.name=Utěsněný ME kabel +tile.enclosed.fluid_pipe.name=Utěsněná kyslíková trubka +tile.enclosed.pipe_fluids_cobblestone.name=Utěsněná vodovodní trubka z dlažebního kamene +tile.enclosed.pipe_fluids_stone.name=Utěsněná kamená vodovodní trubka +tile.enclosed.pipe_items_cobblestone.name=Utěsněná trubka z dlažebního kamene +tile.enclosed.pipe_items_stone.name=Utěsněná kamená trubka +tile.enclosed.pipe_power_gold.name=Utěsněná vodivá trubka ze zlata +tile.enclosed.pipe_power_stone.name=Utěsněná vodivá trubka z kamene +tile.energy_storage_module_tier1.description=Energetická zásobárna se používá k ukládání velkého množství energie k pozdějšímu využití. +tile.energy_storage_module_tier2.description=Energetický cluster se používá k ukládání velkého množství energie k pozdějšímu využití. Umožňuje skladovat a vydávat větší množství energie než jeho předchůdce. +tile.fallen_meteor.description=Meteority mohou být nalazeny na mnoha planetách a měsících které mají řídkou nebo žádnou atmosféru. Obsahují meteorické železo. +tile.fallen_meteor.name=Spadlý metorit +tile.fuel.name=Palivo +tile.fuel_block.name=Palivo +tile.fuel_loader.description=Po připojení ke startovací rampě nebo čerpací stanici pro buginu umožní natankování rakety nebo vozidla. +tile.fuel_loader.name=Palivové čerpadlo +tile.glowstone_torch.description=Světlitové pochodně je nejlépší využívat v oblastech bez kyslíku, kde běžné pochodně nesvítí. +tile.glowstone_torch.name=Světlitová pochodeň +tile.landing_pad.buggy_fueler.name=Čerpací stanice pro buginu +tile.landing_pad.cargo_pad.name=Nákladni odpalovací rampa +tile.landing_pad.description=Startovací rampa, pokud je postavena ve formaci 3x3, umožňuje start rakety, která je na ní umístěna. Mohou k ní být přidány palivová čerpadla, nakladače a odpalovače. +tile.landing_pad.landing_pad.name=Startovací rampa +tile.landing_pad_full.name=Startovací rampa +tile.machine.0.name=Tepelná elektrárna +tile.machine.1.name=Energetická zásobárna +tile.machine.2.name=Elektrická pec +tile.machine.3.name=Kompresor +tile.machine.7.name=Elektrická oblouková pec +tile.machine.8.name=Energetický Cluster +tile.machine2.4.name=Elektrický kompresor +tile.machine2.5.name=Stroj na výrobu solárních waferů +tile.machine2.6.name=Zásobárna kyslíku +tile.moon_stairs_brick.name=Schody z měsíčního kamene (dungeon) +tile.moon_stairs_stone.name=Schody z měsíčního kamene +tile.ore_copper.name=Měděná ruda +tile.ore_tin.name=Cínová ruda +tile.oxygen_compressor.0.name=Kyslíkový kompresor +tile.oxygen_compressor.1.name=Kyslíkový dekompresor +tile.oxygen_compressor.description=Kyslíkový kompresor stlačí kyslík z vnitřních zásob do tlakových lahví. +tile.oxygen_decompressor.description=Kyslíkový dekompresor pouští kyslík z tlakových lahví do kyslíkových rozvodů. +tile.oxygen_detector.description=Detektor kyslíku vyšle signál pokud je obklopen kyslíkem. +tile.oxygen_detector.name=Detektor kyslíku +tile.oxygen_pipe.description=Kyslíková trubka tvoří rozvody kterými je možné přesouvat kyslík mezi stroji. +tile.oxygen_pipe.name=Kyslíková trubka +tile.oxygen_storage_module.description=Kyslíková zásobárna se používá k ukládání velkého množství kyslíku k pozdějšímu využití. +tile.parachest.description=Truhla na padáku spadne z nebe na některých planetách nebo něsících, jako je Země. Obsahuje raketu, palivo a náklad z předchozího startu. +tile.parachest.name=Truhla na padáku +tile.refinery.description=Vytváří z ropy a energie palivo, které je možné použít pro rakety a buginy. +tile.refinery.name=Refinérie +tile.rocket_workbench.description=Raketové konstrukční pracoviště slouží k vytváření mnoha pokročilých součástek a zařízení. Nová schémata mohou být nalezena a přidána. +tile.rocket_workbench.name=Raketové konstrukční pracoviště +tile.sapling2.birch.name=Březové větve +tile.sapling2.jungle.name=Větve z džungle +tile.sapling2.oak.name=Dubové větve +tile.sapling2.spruce.name=Smrkové větve +tile.sealer.description=Systém podpory života zajistí atmosféru v utěsněných prostorech. +tile.sealer.name=Systém podpory života +tile.slab_gc_half.moon_bricks_slab.name=Podlaha z měsíčního kamene (dungeon) +tile.slab_gc_half.moon_slab.name=Podlaha z měsíčního kamene +tile.slab_gc_half.tin_slab_1.name=Ozdobná cínová podlaha +tile.slab_gc_half.tin_slab_2.name=Ozdobná cínová podlaha +tile.solar.advanced_solar.name=Pokročilý solární panel +tile.solar.basic_solar.name=Základní solární panel +tile.solar_adv.description=Pokročilé solární panely vytváří energii ze slunečního svitu a ukládají ji k budoucímu použití. Natáčí se automaticky pro maximální účinnost. +tile.solar_basic.description=Základní solární panely vytváří energii ze slunečního svitu a ukládají ji k budoucímu použití. Nejvíce jí vyrábí odpoledne (nenatáčí se). +tile.space_station_base.name=Příchozí blok vesmírné stanice +tile.spin_thruster.description=Manévrovací trysky lze použít pro rotaci vesmírné stanice. +tile.spin_thruster.name=Manévrovací tryska +tile.telemetry.description=Toto sbírá užitečná data z propojených raket, hráčů a zvířat. Nejlepší je umístit jednotku blízko obrazovky. Spojení se navazuje pomocí frekvenčního modulu. +tile.telemetry.name=Jednotka telemetrie +tile.tin_stairs_1.name=Ozdobné cínové schody +tile.tin_stairs_2.name=Ozdobné cínové schody +tile.treasure_chest.description=Pokladnice typu 1 lze objevit v měsíčních dungeonech. Lze je odemknout po zabití bosse. +tile.treasure_chest.name=Pokladnice +tile.unlit_torch.name=Pochodeň +tile.unlit_torch_stone.name=Kamenná pochodeň +tile.unlit_torch_lit.name=Pochodeň +tile.unlit_torch_stone_lit.name=Kamenná pochodeň +tile.view_screen.description=Dekorační obrazovky přidají vesmírné stanici ten správný vzhled. Pravým tlačítkem lze měnit zobrazované informace. +tile.view_screen.name=Obrazovka +tile.wall_gc.moon.name=Stěna z měsíčního kamene +tile.wall_gc.moon_bricks.name=Stěna z měsíčního kamene (dungeon) +tile.wall_gc.tin.name=Ozdobná cínová stěna diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cy_gb.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cy_gb.lang new file mode 100644 index 00000000..01f2a5fb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cy_gb.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport= % s fe'i anfonwyd i mewn i'r atmosffer % s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name= Cargo Loader +container.cargounloader.name= Cargo Unloader +container.fuelloader.name= Loader Tanwydd +container.lander.name= Gofod Lander +container.oxygencollector.name= Ocsigen Casglwr +container.oxygencompressor.name= Ocsigen Cywasgydd +container.oxygendecompressor.name= Ocsigen Decompressor +container.oxygendistributor.name= Ocsigen Ddosbarthu +container.oxygensealer.name= Ocsigen Sealer +container.parachest.name= Para - frest +container.refinery.name= Purfa +container.solaradvanced.name= Panel Solar Uwch +container.solarbasic.name= Panel Solar Sylfaenol +container.spaceship.name= Haen 1 Roced +container.treasurechest.name= Treasure Chest +death.attack.oxygen_suffocation= % 1 $ s rhedeg allan o ocsigen ! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. ##NEEDS TRANSLATE## +death.attack.thermal=%1$s forgot thermal protection ##NEEDS TRANSLATE## +dimension.moon.name= Moon +dimension.overworld.name= overworld +dimension.sun.name= Sun +entity.alien_villager.name= Pentrefwr Alien +entity.buggy.name= Buggy +entity.celestial_screen.name=Celestial Screen ##NEEDS TRANSLATE## +entity.evolved_creeper.name= esblygu Dringwr Bach +entity.evolved_skeleton.name= esblygu Sgerbwd +entity.evolved_skeleton_boss.name= esblygu Sgerbwd Boss +entity.evolved_spider.name= esblygu Spider +entity.evolved_zombie.name= esblygu Zombie +entity.flag.name= Flag +entity.gcflag.name=Flag ##NEEDS TRANSLATE## +entity.gravity_arrow.name= Arrow +entity.lander.name= Gofod Lander +entity.meteor.name= Meteor +entity.meteor_chunk.name=Meteor Chunk ##NEEDS TRANSLATE## +entity.oxygen_bubble.name= Ocsigen Bubble +entity.para_chest.name= Parachest +entity.rocket_t1.name= Haen 1 Roced +galaxy.milky_way=Milky Way ##NEEDS TRANSLATE## +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) ##NEEDS TRANSLATE## +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check ##NEEDS TRANSLATE## +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here ##NEEDS TRANSLATE## +gui.battery_slot.desc.1=or use a connected power source ##NEEDS TRANSLATE## +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name= Accelerate +gui.buggy.decel.name= arafu +gui.buggy.inv.name= Rhestr / Tanwydd +gui.buggy.storage_space=Storage Space ##NEEDS TRANSLATE## +gui.buggy.turn.name= Trowch i'r chwith - dde +gui.button.back.name= Yn ôl +gui.button.disable.name= Analluogi +gui.button.disableseal.name= Analluogi Seal +gui.button.enable.name= Galluogi +gui.button.enableseal.name= Galluogi Sêl +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name= Llwytho Tanwydd +gui.button.loaditems.name=Load Items ##NEEDS TRANSLATE## +gui.button.next.name= Nesaf +gui.button.refine.name= Mireinio +gui.button.stoploading.name= Stop Llwytho +gui.button.stoprefine.name= Stop Mireinio +gui.button.stopunloading.name= Stop Dadlwytho +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name= Dadlwytho Eitemau +gui.button.unlockschematic.name= Datglo Sgematig +gui.checkbox.horizontal.name=Horizontal Mode ##NEEDS TRANSLATE## +gui.checkbox.invert.name=Invert Selection ##NEEDS TRANSLATE## +gui.checkbox.player_name.name=Player name is ##NEEDS TRANSLATE## +gui.checkbox.player_within.name=Player is within ##NEEDS TRANSLATE## +gui.checkbox.redstone_signal.name=Opens on Redstone Signal ##NEEDS TRANSLATE## +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! ##NEEDS TRANSLATE## +gui.choose_planet.desc.moon=Habitable#No Oxygen#Gravity: 18% ##NEEDS TRANSLATE## +gui.choose_planet.desc.overworld= Llawn Bywyd # cyfanheddol # Disgyrchiant : 100 % +gui.chooseplanet.alreadycreated1.name= Orsaf Ofod Eisoes +gui.chooseplanet.alreadycreated2.name= Crëwyd ! +gui.chooseplanet.cannotcreate1.name= Methu creu Gofod +gui.chooseplanet.cannotcreate2.name= Orsaf yma! +gui.creative_only.desc=Creative Only ##NEEDS TRANSLATE## +gui.display.nolink=No link ##NEEDS TRANSLATE## +gui.docking_rocket.current_vel.name=Current Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.distance_from.name=Distance from Target ##NEEDS TRANSLATE## +gui.docking_rocket.target_vel.name=Target Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.0=Press %s to decelerate ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.1=Press %s to accelerate ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.0=1 Meter ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.1=2 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.2=5 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.3=10 Meters ##NEEDS TRANSLATE## +gui.electric_compressor.desc.0=Progress ##NEEDS TRANSLATE## +gui.energy_storage.desc.0=Energy Storage ##NEEDS TRANSLATE## +gui.energy_storage.desc.1=Energy ##NEEDS TRANSLATE## +gui.flag.already_placed=Flag already placed here! ##NEEDS TRANSLATE## +gui.frequency_module.desc.0=Can receive weak sound ##NEEDS TRANSLATE## +gui.frequency_module.desc.1=waves and distant signals ##NEEDS TRANSLATE## +gui.frequencymodule.warning0=I'll probably need a ##NEEDS TRANSLATE## +gui.frequencymodule.warning1=if I want to hear properly here. ##NEEDS TRANSLATE## +gui.fuel_output.desc.0=Place empty liquid canisters into ##NEEDS TRANSLATE## +gui.fuel_output.desc.1=this slot to fill them from the ##NEEDS TRANSLATE## +gui.fuel_output.desc.2=fuel tank ##NEEDS TRANSLATE## +gui.fuel_tank.desc.0=Fuel tank. Requires ##NEEDS TRANSLATE## +gui.fuel_tank.desc.1=fuel loader to fill ##NEEDS TRANSLATE## +gui.fuel_tank.desc.2=Fuel tank, can be filled ##NEEDS TRANSLATE## +gui.fuel_tank.desc.3=with fuel canisters ##NEEDS TRANSLATE## +gui.fuel_tank.desc.4=Fuel tank ##NEEDS TRANSLATE## +gui.infinite_item.desc=Infinite ##NEEDS TRANSLATE## +gui.lander.velocity= Cyflymder Mynediad +gui.lander.velocityu= m / s +gui.lander.warning2= Hold " +gui.lander.warning3= " i arafu i lawr ! +gui.max_output.desc=Max Output ##NEEDS TRANSLATE## +gui.message.addnewsch.name= Ychwanegu New Sgematig +gui.message.apply.name=Apply ##NEEDS TRANSLATE## +gui.message.assign_name.name=Assign Name ##NEEDS TRANSLATE## +gui.message.atmosphere.name=Atmosphere ##NEEDS TRANSLATE## +gui.message.back.name=Back ##NEEDS TRANSLATE## +gui.message.breed.name=Breed ##NEEDS TRANSLATE## +gui.message.bubble_visible.name=Bubble Visible ##NEEDS TRANSLATE## +gui.message.can_create_space_station.name=A Space Station can be created here! ##NEEDS TRANSLATE## +gui.message.cancel.name=Cancel ##NEEDS TRANSLATE## +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. ##NEEDS TRANSLATE## +gui.message.catalog.name=Catalog ##NEEDS TRANSLATE## +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) ##NEEDS TRANSLATE## +gui.message.click_again.1.name=Click again to zoom (view moons) ##NEEDS TRANSLATE## +gui.message.click_again.2.name=Click again to zoom (view satellites) ##NEEDS TRANSLATE## +gui.message.click_again.3.name=Click again to zoom ##NEEDS TRANSLATE## +gui.message.clicklink=Click for Galacticraft Wiki ##NEEDS TRANSLATE## +gui.message.create_ss.name=Create ##NEEDS TRANSLATE## +gui.message.daynightcycle.name=Day-night Cycle ##NEEDS TRANSLATE## +gui.message.energy=Energy ##NEEDS TRANSLATE## +gui.message.environment.name= Hwb Amgylcheddol +gui.message.exit.name=Exit ##NEEDS TRANSLATE## +gui.message.fuel.name= Tanwydd +gui.message.full.name= amser +gui.message.generating.name= Cynhyrchu +gui.message.grow.name=Grow ##NEEDS TRANSLATE## +gui.message.heal.name=Heal ##NEEDS TRANSLATE## +gui.message.help1=For Galacticraft help ##NEEDS TRANSLATE## +gui.message.help1a=To see this message again at any time, type ##NEEDS TRANSLATE## +gui.message.help2=For Space Program guidance ##NEEDS TRANSLATE## +gui.message.help3=For help with oil ##NEEDS TRANSLATE## +gui.message.in.name= Yn +gui.message.launch.name=Launch ##NEEDS TRANSLATE## +gui.message.max_energy=Max Energy ##NEEDS TRANSLATE## +gui.message.meansurfacetemp.name=Mean Surface Temp ##NEEDS TRANSLATE## +gui.message.moon.atmosphere.0.name=None ##NEEDS TRANSLATE## +gui.message.moon.daynightcycle.0.name=29.5 Earth Days ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.1.name=Traces of Cheese ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.0.name=0.1654g ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.1.name=(18% of Earth) ##NEEDS TRANSLATE## +gui.message.of.name=of ##NEEDS TRANSLATE## +gui.message.oil.name=Oil ##NEEDS TRANSLATE## +gui.message.out.name= Allan +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen ##NEEDS TRANSLATE## +gui.message.overworld.atmosphere.1.name=Supports life ##NEEDS TRANSLATE## +gui.message.overworld.daynightcycle.0.name=1 Earth Day ##NEEDS TRANSLATE## +gui.message.overworld.meansurfacetemp.0.name=14C ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.1.name=gravel ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.0.name=1.0g ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.1.name=(100% of Earth) ##NEEDS TRANSLATE## +gui.message.prelaunch=Pre-launch checklist ##NEEDS TRANSLATE## +gui.message.rename.name=Rename ##NEEDS TRANSLATE## +gui.message.select_ss.name=Select a Space Station ##NEEDS TRANSLATE## +gui.message.ss_owner.name=Owner: ##NEEDS TRANSLATE## +gui.message.status.name= Statws +gui.message.strengthen.name=Strengthen ##NEEDS TRANSLATE## +gui.message.surfacecomposition.name=Surface Composition ##NEEDS TRANSLATE## +gui.message.surfacegravity.name=Surface Gravity ##NEEDS TRANSLATE## +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=Tier %d ##NEEDS TRANSLATE## +gui.message.unnamed.name=Unnamed ##NEEDS TRANSLATE## +gui.missing_core.name.0=MicdoodleCore not found in mods folder ##NEEDS TRANSLATE## +gui.missing_core.name.1=Galacticraft failed to load ##NEEDS TRANSLATE## +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore ##NEEDS TRANSLATE## +gui.missing_core.name.3=Click here to open download page ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.0=New schematic slot. You ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.1=can find new schematics ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.2=by completing dungeons ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.3=on planets and moons ##NEEDS TRANSLATE## +gui.oil_tank.desc.0=Oil tank, can be filled ##NEEDS TRANSLATE## +gui.oil_tank.desc.1=with oil canisters ##NEEDS TRANSLATE## +gui.oxygen.warning=Oxygen Setup is Invalid! ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister or tank ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.0=Oxygen Storage ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.1=Oxygen ##NEEDS TRANSLATE## +gui.oxygen_use.desc=Oxygen Use ##NEEDS TRANSLATE## +gui.per_second=/s ##NEEDS TRANSLATE## +gui.player.bpm=bpm ##NEEDS TRANSLATE## +gui.player.food=Food ##NEEDS TRANSLATE## +gui.player.health=Health ##NEEDS TRANSLATE## +gui.player.ouch=ouch!!!! ##NEEDS TRANSLATE## +gui.receiver.cannot_attach=Cannot attach receiver here! ##NEEDS TRANSLATE## +gui.requires_controller.desc=Requires Launch Controller ##NEEDS TRANSLATE## +gui.rocket.countdown=Countdown ##NEEDS TRANSLATE## +gui.rocket.height=Height ##NEEDS TRANSLATE## +gui.rocket.inv.name=Inventory / Fuel ##NEEDS TRANSLATE## +gui.rocket.launch.name=Launch ##NEEDS TRANSLATE## +gui.rocket.launched=Launched ##NEEDS TRANSLATE## +gui.rocket.on_launchpad=On launchpad ##NEEDS TRANSLATE## +gui.rocket.speed=Speed ##NEEDS TRANSLATE## +gui.rocket.turn.name=Turn left-right ##NEEDS TRANSLATE## +gui.rocket.updown.name=Turn up-down ##NEEDS TRANSLATE## +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! ##NEEDS TRANSLATE## +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! ##NEEDS TRANSLATE## +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! ##NEEDS TRANSLATE## +gui.rocket_type.0=Storage Space: 18 ##NEEDS TRANSLATE## +gui.rocket_type.1=Storage Space: 36 ##NEEDS TRANSLATE## +gui.rocket_type.2=Storage Space: 56 ##NEEDS TRANSLATE## +gui.rocket_type.3=Pre-fueled ##NEEDS TRANSLATE## +gui.seconds=s +gui.sensor.advanced= Uwch Ddelw +gui.sensor.advancedoff= OFF +gui.sensor.advancedon= AR +gui.show_bubble.desc.0=Show Bubble ##NEEDS TRANSLATE## +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. ##NEEDS TRANSLATE## +gui.space_race.chat.add_success=%s has joined the Space Race! ##NEEDS TRANSLATE## +gui.space_race.chat.already_part=You are already a part of this space race! ##NEEDS TRANSLATE## +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. ##NEEDS TRANSLATE## +gui.space_race.chat.not_found=Could not find player with name: %s ##NEEDS TRANSLATE## +gui.space_race.chat.remove_success=%s has been removed from the Space Race. ##NEEDS TRANSLATE## +gui.space_race.chat.to_join=To join %s use command %s ##NEEDS TRANSLATE## +gui.space_race.coming_soon=Coming Soon ##NEEDS TRANSLATE## +gui.space_race.create.add_players.name=Add Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.back.name=Back ##NEEDS TRANSLATE## +gui.space_race.create.brush_radius.name=Brush Radius ##NEEDS TRANSLATE## +gui.space_race.create.brush_size.name=Brush Size ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.0=Change ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.1=Team ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.2=Color ##NEEDS TRANSLATE## +gui.space_race.create.close.name=Close ##NEEDS TRANSLATE## +gui.space_race.create.customize.name=Customize Flag ##NEEDS TRANSLATE## +gui.space_race.create.eraser_radius.name=Eraser Radius ##NEEDS TRANSLATE## +gui.space_race.create.eraser_size.name=Eraser Size ##NEEDS TRANSLATE## +gui.space_race.create.global_stats.name=View Global Stats ##NEEDS TRANSLATE## +gui.space_race.create.invite_player.name=Invite Player ##NEEDS TRANSLATE## +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) ##NEEDS TRANSLATE## +gui.space_race.create.rem_players.name=Remove Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.remove.name=Remove ##NEEDS TRANSLATE## +gui.space_race.create.remove_player.name=Remove Player ##NEEDS TRANSLATE## +gui.space_race.create.rename.name=Rename Team ##NEEDS TRANSLATE## +gui.space_race.create.send_invite.name=Send Invite ##NEEDS TRANSLATE## +gui.space_race.create.server_stats.name=View Server Stats ##NEEDS TRANSLATE## +gui.space_race.create.title.name=Space Race Manager ##NEEDS TRANSLATE## +gui.space_race.create.title.name.0=Space Race ##NEEDS TRANSLATE## +gui.space_race.create.title.name.1=Manager ##NEEDS TRANSLATE## +gui.space_race.join.member_count.name=%d members ##NEEDS TRANSLATE## +gui.space_race.join.name=Join ##NEEDS TRANSLATE## +gui.space_race.join.owner.name=Owner ##NEEDS TRANSLATE## +gui.space_race.join.title.name=Join Space Race ##NEEDS TRANSLATE## +gui.space_race.unnamed=Unnamed Team ##NEEDS TRANSLATE## +gui.spacestation.added=You've been added to %s's Space Station accepted players! ##NEEDS TRANSLATE## +gui.spacestation.addsuccess=Successfully added %s to Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= ##NEEDS TRANSLATE## +gui.spacestation.removesuccess=Successfully removed %s from Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.to_allow_entry=to allow another player to enter this space station! ##NEEDS TRANSLATE## +gui.spacestation.type_command=Type ##NEEDS TRANSLATE## +gui.status.active.name= Actif +gui.status.air_lock_closed.name=Air Lock Closed ##NEEDS TRANSLATE## +gui.status.air_lock_open.name=Air Lock Open ##NEEDS TRANSLATE## +gui.status.blockedfully.name= Haul Ddim yn Gweladwy +gui.status.blockedpartial.name= Sul Rhannol Gweladwy +gui.status.check_pending.name=Check Pending ##NEEDS TRANSLATE## +gui.status.check_starting.name=Check Starting ##NEEDS TRANSLATE## +gui.status.checking_seal.name=Checking Seal ##NEEDS TRANSLATE## +gui.status.collecting.name=Collecting ##NEEDS TRANSLATE## +gui.status.collectingenergy.name= Casglu Ynni +gui.status.compressing.name=Compressing ##NEEDS TRANSLATE## +gui.status.disabled.name= Anabl +gui.status.fulltank.name= Ocsigen Tank Llawn +gui.status.generating.name=Generating ##NEEDS TRANSLATE## +gui.status.hull_heat.name=Hull Heat ##NEEDS TRANSLATE## +gui.status.idle.name= Idle +gui.status.missingleaves.name= Dim digon Blociau Leaf +gui.status.missingoxygen.name= Dim digon Ocsigen +gui.status.missingpower.name= Dim digon Power +gui.status.missingtank.name= Naddo Tanc Ocsigen Dilys +gui.status.nofuel.name= Naddo Tanwydd i'w Lwytho ! +gui.status.noinvtarget.name= Naddo Rhestr ar Targed ! +gui.status.noitems.name= Dim eitemau i'w Lwytho ! +gui.status.nooil.name= Naddo Olew +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Not Generating ##NEEDS TRANSLATE## +gui.status.notargetload.name= Dim Targed i'w Lwytho Into ! +gui.status.notargetunload.name= Naddo targed ar Dadlwytho ! +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name= Raining +gui.status.ready.name= Barod +gui.status.refining.name= Mireinio +gui.status.running.name=Running ##NEEDS TRANSLATE## +gui.status.sealed.name= selio +gui.status.sealerblocked.name=Output Vent Blocked! ##NEEDS TRANSLATE## +gui.status.sun_visible.name=Sun Visible ##NEEDS TRANSLATE## +gui.status.tank_empty.name=Oxygen Tank Empty ##NEEDS TRANSLATE## +gui.status.targetempty.name= Cerbydau Targed yn Wag ! +gui.status.targetfull.name= Cerbyd Mae'r targed yn llawn ! +gui.status.unknown.name= Anhysbys +gui.status.unsealed.name= Heb ei selio +gui.tank.oxygen_remaining=Oxygen Remaining ##NEEDS TRANSLATE## +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) ##NEEDS TRANSLATE## +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! ##NEEDS TRANSLATE## +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! ##NEEDS TRANSLATE## +gui.telemetry_succeed.message=Telemetry link created. ##NEEDS TRANSLATE## +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s's Air Lock Controller ##NEEDS TRANSLATE## +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. ##NEEDS TRANSLATE## +gui.warning= RHYBUDD ! +gui.warning.invalid_thermal=Invalid Thermal Protection! ##NEEDS TRANSLATE## +gui.warning.noroom=Not enough room! ##NEEDS TRANSLATE## +item.air_fan.name=Fan ocsigen +item.air_vent.name=Vent ocsigen +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name= Can Bwyd +item.basic_item.compressed_aluminum.name=Alwminiwm cywasgedig +item.basic_item.compressed_bronze.name=Efydd cywasgedig +item.basic_item.compressed_copper.name=Copr cywasgedig +item.basic_item.compressed_iron.name=Haearn cywasgedig +item.basic_item.compressed_steel.name=Steel cywasgedig +item.basic_item.compressed_tin.name=Tun cywasgedig +item.basic_item.dehydrated_apple.name=Apple Dadhydradedig +item.basic_item.dehydrated_carrot.name= Dadhydradedig Moron +item.basic_item.dehydrated_melon.name= Melon Dadhydradedig +item.basic_item.dehydrated_potato.name= Dadhydradedig Tatws +item.basic_item.frequency_module.name= Modiwl Amlder +item.basic_item.ingot_aluminum.name=Alwminiwm Ingot +item.basic_item.ingot_bronze.name=Efydd Ingot +item.basic_item.ingot_copper.name=Copr Ingot +item.basic_item.ingot_steel.name=Steel Ingot +item.basic_item.ingot_tin.name=Tun Ingot +item.basic_item.raw_silicon.name=Raw Silicon +item.basic_item.solar_module_0.name=Modiwl Solar Sengl +item.basic_item.solar_module_1.name=Panel Solar llawn +item.basic_item.wafer_advanced.name=Advanced Wafer +item.basic_item.wafer_basic.name=Basic Wafer +item.basic_item.wafer_solar.name=Blue Solar Wafer +item.battery.name=Batri +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Bygi +item.buggymat.seat.name=Bygi Sedd +item.buggymat.storage.name=Bygi Blwch Storio +item.buggymat.wheel.name=bygi Olwyn +item.canister.copper.name=Copr gall +item.canister.tin.name=Tun gall +item.canvas.name=Gynfas +item.cheese_block.name=Block of Cheese ##NEEDS TRANSLATE## +item.cheese_curd.name=Cheese Curd ##NEEDS TRANSLATE## +item.compressed_meteoric_iron.name=Compressed Meteoric Iron ##NEEDS TRANSLATE## +item.empty_liquid_canister.name=Gwag Liquid canister +item.engine.tier1booster.name=Haen 1 Booster +item.engine.tier1engine.name=Haen 1 Rocket Engine +item.flag.name=Flag ##NEEDS TRANSLATE## +item.fuel.name=Tanwydd Rocket +item.fuel_canister.name=Canister Tanwydd Llenwi +item.fuel_canister_partial.name=Canister Tanwydd Llenwi Rhannol +item.heavy_plating.name=Plât trwm-Dyletswydd +item.hot_description.name=Poeth +item.infinite_battery.name=Batri ddiddiwedd +item.infinite_oxygen.name=Infinite Oxygen Supply ##NEEDS TRANSLATE## +item.key.t1.name=Haen 1 Dungeon Allweddol +item.meteor_chunk.name=Throwable Meteor Chunk +item.meteor_chunk_hot.name=Throwable Meteor Chunk +item.meteoric_iron_ingot.name=Meteoric Iron Ingot ##NEEDS TRANSLATE## +item.meteoric_iron_raw.name=Raw Meteoric Iron ##NEEDS TRANSLATE## +item.nose_cone.name=Cone trwyn +item.oil_canister.name=Llenwi Olew canister +item.oil_canister_partial.name=Llenwi Rhannol Canister Olew +item.oil_extractor.name=Symudol Olew Echdynnu +item.oxygen_concentrator.name=Crynodyddion ocsigen +item.oxygen_gear.name=Gear ocsigen +item.oxygen_mask.name=Mwgwd ocsigen +item.oxygen_tank_heavy_empty.name=Gwag Tanc Ocsigen trwm +item.oxygen_tank_heavy_full.name=Tank Ocsigen trwm +item.oxygen_tank_light_empty.name=Gwag Tanc Ocsigen Golau +item.oxygen_tank_light_full.name=Tank Ocsigen golau +item.oxygen_tank_med_empty.name=Gwag Tanc Ocsigen Canolig +item.oxygen_tank_med_full.name=Tank Ocsigen Canolig +item.parachute_black.name=Du Parasiwt +item.parachute_blue.name=Blue Light Parasiwt +item.parachute_brown.name=Brown Parasiwt +item.parachute_darkblue.name=Blue Parasiwt +item.parachute_darkgray.name=Gray Parasiwt +item.parachute_darkgreen.name=Green Parasiwt +item.parachute_gray.name=Light Gray Parasiwt +item.parachute_lime.name=Lime Parasiwt +item.parachute_magenta.name=Magenta Parasiwt +item.parachute_orange.name=Orange Parasiwt +item.parachute_pink.name=Pinc Parasiwt +item.parachute_plain.name=Parasiwt +item.parachute_purple.name=Porffor Parasiwt +item.parachute_red.name=Red Parasiwt +item.parachute_teal.name=Gwyrddlas Parasiwt +item.parachute_yellow.name=Parasiwt melyn +item.rocket_fins.name=Ffindir roced +item.rocket_t1.name=Haen 1 Rocket +item.schematic.name=NASA Fainc Sgematig +item.sensor_glasses.name=Glasses synhwyrydd +item.sensor_lens.name=synhwyrydd Lens +item.standard_wrench.name= Safon Wrench +item.steel_axe.name= Axe Dyletswydd trwm +item.steel_boots.name= Boots Dyletswydd trwm +item.steel_chestplate.name= Dyletswydd trwm Chestplate +item.steel_helmet.name= Dyletswydd trwm Helmed +item.steel_hoe.name= trwm Dyletswydd Hoe +item.steel_leggings.name= Leggings Dyletswydd trwm +item.steel_pickaxe.name= Dyletswydd trwm pickaxe +item.steel_pole.name=dur Pole +item.steel_shovel.name= Dyletswydd trwm Rhaw +item.steel_sword.name= Dyletswydd trwm Cleddyf +item.tier1.desc=Haen 1 +item_desc.powerdraw.name=Power required: %s /s ##NEEDS TRANSLATE## +item_desc.shift.name=Press %s for more info ##NEEDS TRANSLATE## +item_group.galacticraft_blocks=Galacticraft Blocks ##NEEDS TRANSLATE## +item_group.galacticraft_items=Galacticraft Items ##NEEDS TRANSLATE## +keybind.map.name= [ GC ] Galaxy Map +keybind.sensortoggle.name= [ GC ] Toggle Synhwyrydd Gogls Modd +keybind.spaceshipinv.name= [ GC ] Rhestr llong ofod Agored +keybind.vehiclebackward.name= [ GC ] Cerbyd YnÔl Allweddol +keybind.vehicledown.name= [ GC ] Cerbyd Down Allweddol +keybind.vehicleforward.name= [ GC ] Cerbyd Ymlaen Allweddol +keybind.vehicleleft.name= [ GC ] Cerbyd Chwith Allweddol +keybind.vehicleright.name= [ GC ] Cerbyd Hawl Allweddol +keybind.vehicleup.name= [ GC ] Cerbyd Up Allweddol +moon.moon=Moon ##NEEDS TRANSLATE## +newversion.failed.name= Galacticraft Wedi methu diweddaru'r siec ! Ceisio eto mewn 15 eiliad +newversion.success.name= Galacticraft fersiwn o bell o hyd : +planet.jupiter=Jupiter ##NEEDS TRANSLATE## +planet.mercury=Mercury ##NEEDS TRANSLATE## +planet.neptune=Neptune ##NEEDS TRANSLATE## +planet.overworld=Overworld ##NEEDS TRANSLATE## +planet.saturn=Saturn ##NEEDS TRANSLATE## +planet.uranus=Uranus ##NEEDS TRANSLATE## +planet.venus=Venus ##NEEDS TRANSLATE## +satellite.spacestation.overworld=Overworld Space Station ##NEEDS TRANSLATE## +schematic.moonbuggy.name= Moon Buggy +schematic.rocket_t1.name= Haen 1 Roced +schematic.rocket_t2.name= Haen 2 Roced +solarsystem.sol=Sol ##NEEDS TRANSLATE## +star.sol=Sol ##NEEDS TRANSLATE## +tile.air_lock_controller.name= Awyr Lock Rheolwr +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name= Awyr Lock Ffrâm +tile.air_lock_seal.name= Awyr Lock Seal +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name= Alwminiwm Wire +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Transfers at a faster rate than it's predecessor. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name= Wire Alwminiwm trwm +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Arc Lamp ##NEEDS TRANSLATE## +tile.basic_block_core.block_aluminum_gc.name= Alwminiwm Bloc +tile.basic_block_core.block_copper_gc.name= Bloc Copr +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron ##NEEDS TRANSLATE## +tile.basic_block_core.block_tin_gc.name= Bloc Tin +tile.basic_block_core.deco_block_0.name= Tin Addurno Bloc +tile.basic_block_core.deco_block_1.name= Tin Addurno Bloc +tile.basic_block_core.ore_aluminum_gc.name= Alwminiwm Mwyn +tile.basic_block_core.ore_copper_gc.name= Copr Mwyn +tile.basic_block_core.ore_silicon.name= Silicon Mwyn +tile.basic_block_core.ore_tin_gc.name= Mwyn Tun +tile.basic_block_moon.bricks.name=Bricks ##NEEDS TRANSLATE## +tile.basic_block_moon.cheesestone.name=Cheese Ore ##NEEDS TRANSLATE## +tile.basic_block_moon.coppermoon.name=Copper Ore ##NEEDS TRANSLATE## +tile.basic_block_moon.moondirt.name=Dirt ##NEEDS TRANSLATE## +tile.basic_block_moon.moongrass.name=Moon Turf ##NEEDS TRANSLATE## +tile.basic_block_moon.moonstone.name=Stone ##NEEDS TRANSLATE## +tile.basic_block_moon.tinmoon.name=Tin Ore ##NEEDS TRANSLATE## +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name= Cargo Loader +tile.cargo.unloader.name= Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Block of Cheese ##NEEDS TRANSLATE## +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name= Ocsigen Casglwr +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name= Olew crai +tile.crude_oil_still.name= Olew crai +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Communications Dish ##NEEDS TRANSLATE## +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name= Bubble Ocsigen Ddosbarthu +tile.dummyblock.cryogenic_chamber.name= cryogenig Siambr +tile.dummyblock.launch_pad.name= Roced Pad Lansio +tile.dummyblock.nasa_workbench.name= NASA Workbench +tile.dummyblock.solar.name= Panel Solar +tile.dummyblock.space_station_base.name= Gofod Gorsaf Sylfaen +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name= gellir eu selio Alwminiwm Wire +tile.enclosed.heavy_aluminum_wire.name= gellir eu selio trwm Alwminiwm Wire +tile.enclosed.copper_cable.name= gellir eu selio Copr Cable +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name= gellir eu selio Ffeibr Gwydr Cable +tile.enclosed.gold_cable.name= gellir eu selio Aur Cable +tile.enclosed.hv_cable.name= gellir eu selio HV Cable +tile.enclosed.lv_cable.name= gellir eu selio Cable Ultra - isel ar hyn o bryd +tile.enclosed.me_cable.name= gellir eu selio ME Cable +tile.enclosed.fluid_pipe.name= gellir eu selio Pipe Ocsigen +tile.enclosed.pipe_fluids_cobblestone.name= gellir eu selio Pipe Cobblestone dal dwr +tile.enclosed.pipe_fluids_stone.name= gellir eu selio Stone Pipe dal dwr +tile.enclosed.pipe_items_cobblestone.name= gellir eu selio Cobblestone Cludiant Pipe +tile.enclosed.pipe_items_stone.name= gellir eu selio Stone Cludiant Pipe +tile.enclosed.pipe_power_gold.name= gellir eu selio Golden ddargludol Pipe +tile.enclosed.pipe_power_stone.name= gellir eu selio Stone ddargludol Pipe +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name= Trig Meteor +tile.fuel.name= Tanwydd +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name= Tanwydd Loader +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name= Glowstone Torch +tile.landing_pad.buggy_fueler.name= Bygi Tanio Pad +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad ##NEEDS TRANSLATE## +tile.landing_pad.description=Landing Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name= Roced Pad Lansio +tile.landing_pad_full.name= Roced Pad Lansio +tile.machine.0.name= Glo Generator +tile.machine.1.name= Storio Modiwl Ynni +tile.machine.2.name= Electric Ffwrnais +tile.machine.3.name= Cywasgydd +tile.machine.7.name=Electric Arc Furnace ##NEEDS TRANSLATE## +tile.machine.8.name=Energy Storage Cluster ##NEEDS TRANSLATE## +tile.machine2.4.name= Electric Cywasgydd +tile.machine2.5.name= Cylchdaith Ffabrigeiddiwr +tile.machine2.6.name= Storio Ocsigen Modiwl +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.moon_stairs_stone.name=Moon Rock Stairs ##NEEDS TRANSLATE## +tile.ore_copper.name= Copr Mwyn +tile.ore_tin.name= Mwyn Tun +tile.oxygen_compressor.0.name= Ocsigen Cywasgydd +tile.oxygen_compressor.1.name= Ocsigen Decompressor +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name= Synhwyrydd Ocsigen +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name= Ocsigen Pipe +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name= Parachest +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name= Purfa +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name= NASA Workbench +tile.sapling2.birch.name= Birch Glasbren +tile.sapling2.jungle.name= Jungle Glasbren +tile.sapling2.oak.name= Oak Glasbren +tile.sapling2.spruce.name= sbriws Glasbren +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name= Ocsigen Sealer +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.moon_slab.name=Moon Rock Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.solar.advanced_solar.name= Panel Solar Uwch +tile.solar.basic_solar.name= Panel Solar Sylfaenol +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Space Station Arrival Block ##NEEDS TRANSLATE## +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Spin Thruster ##NEEDS TRANSLATE## +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Telemetry Unit ##NEEDS TRANSLATE## +tile.tin_stairs_1.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.tin_stairs_2.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name= Treasure Chest +tile.unlit_torch.name= Torch +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name= Torch +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Display Screen ##NEEDS TRANSLATE## +tile.wall_gc.moon.name=Moon Rock Wall ##NEEDS TRANSLATE## +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall ##NEEDS TRANSLATE## +tile.wall_gc.tin.name=Tin Decoration Wall ##NEEDS TRANSLATE## diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/de_de.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/de_de.lang new file mode 100644 index 00000000..fa838a70 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/de_de.lang @@ -0,0 +1,743 @@ +checklist.create_grapple.key=Greifhaken herstellen +checklist.equip_oxygen_suit.key=Sauerstoffanzug ausrüsten +checklist.equip_parachute.key=Fallschirm ausrüsten +commands.emergencykit=%s hat ein Notfallpaket erhalten! +command.gcastrominer.count=Die Astromineranzahl von Spieler %s ist %s +commands.dimensionteleport=%s wurde in die Atmosphäre geschickt%s +commands.dimensiontp.too_many=Dieser Befehl enthält zu viele Argumente! Handhabung: %s +commands.gcenergyunits.invalid_units=Ungültige Einheit im Befehl /GCEnergyUnits. Handhabung: %s +commands.gcenergyunits.no_units=Die Einheit muss festgelegt werden! Handhabung: %s +commands.gchouston.confirm.1=Hier ist Mission Control, bitte wiederholen? +commands.gchouston.confirm.2=(Gebe /gchouston noch einmal zur Bestätigung ein.) +commands.gchouston.fail=Dieser Befehl ist nur im Weltraum (oder im Kreativmodus) verfügbar. +commands.gchouston.help.1=Uh, Houston, we've had a problem.... +commands.gchouston.help.2=(/gchouston eingeben, um die Mission abzubrechen und nach Hause zurückzukehren.) +commands.gchouston.noop=Dieser Befehl kann nur von Operatoren auf andere Spieler angewendet werden. +commands.gchouston.success=Bitte warten, %s, du wirst zu deiner Heimatposition auf der Oberwelt teleportiert. +commands.joinrace.no_team=Das Team muss festgelegt werden! Handhabung: %s +commands.ssinvite.not_found=Konnte keine Raumstation für dich finden, du musst zuerst einmal dorthin reisen! +commands.ssinvite.wrong_usage=Dieser Befehl enthält nicht genügend Argumente! Handhabung: %s +commands.ssnewowner.wrong_usage=Die Raumstations-ID konnte nicht erkannt werden - existiert sie überhaupt? Handhabung: %s +commands.ssuninvite.no_player=Der Spieler mit dem Namen %s konnte auf deiner Raumstations-Liste nicht gefunden werden! +container.cargoloader.name=Frachtlader +container.cargounloader.name=Frachtentlader +container.fuelloader.name=Treibstofflader +container.lander.name=Weltraum-Lander +container.magneticcrafting.name=Handwerk +container.oxygencollector.name=Sauerstoffsammler +container.oxygencompressor.name=Sauerstoffkompressor +container.oxygendecompressor.name=Sauerstoffdekompressor +container.oxygendistributor.name=Sauerstoffverteiler +container.oxygensealer.name=Sauerstoffversiegeler +container.parachest.name=Paratruhe +container.refinery.name=Raffinerie +container.solaradvanced.name=Fortgeschrittenes Solarmodul +container.solarbasic.name=Basis-Solarmodul +container.spaceship.name=Rakete (Stufe 1) +container.treasurechest.name=Schatztruhe +death.attack.meteor_chunk=%1$s wurde von Meteortrümmern getroffen! +death.attack.oxygen_suffocation=%1$s ist der Sauerstoff ausgegangen! +death.attack.spaceship_crash=Die Rakete von %1$s hat sich selbst in den Boden gerammt. Ups. +death.attack.sulphuric_acid=%1$s wurde in Schwefelsäure zersetzt. +death.attack.thermal=%1$s hat vergessen, dass Temperaturen nicht überall gleich sind. +dimension.moon.name=Mond +dimension.overworld.name=Oberwelt +dimension.sun.name=Sonne +entity.alien_villager.name=Alien-Dorfbewohner +entity.buggy.name=Mondrover +entity.celestial_screen.name=Himmelsbildschirm +entity.evolved_creeper.name=Entwickelter Creeper +entity.evolved_skeleton.name=Entwickeltes Skelett +entity.evolved_skeleton_boss.name=Entwickelter Skelett-Boss +entity.evolved_spider.name=Entwickelte Spinne +entity.evolved_zombie.name=Entwickelter Zombie +entity.evolved_enderman.name=Entwickelter Enderman +entity.evolved_witch.name=Entwickelte Hexe +entity.flag.name=Flagge +entity.gcflag.name=Flagge +entity.gravity_arrow.name=Pfeil +entity.lander.name=Weltraum-Landekapsel +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteorbrocken +entity.oxygen_bubble.name=Sauerstoffblase +entity.para_chest.name=Paratruhe +entity.rocket_t1.name=Raumschiff +galaxy.milky_way=Milchstraße +gc.configgui.alternate_canister_recipe=Alternatives Kanister-Rezept +gc.configgui.asteroids_flags=Herausforderungsmodus-Flags +gc.configgui.asteroids_start=Herausforderungsmodus (Asteroiden-Start) +gc.configgui.biome_id_base=Basis-Biom-ID +gc.configgui.detectable_i_ds=Erkennbare IDs +gc.configgui.disable_biome_type_registrations=Biomtyp-Registrierung deaktivieren +gc.configgui.disable_cheese_moon=Mond - Käse-Generierung deaktivieren +gc.configgui.disable_copper_moon=Mond - Kupfer-Generierung deaktivieren +gc.configgui.disable_lander=Mond-Lander deaktivieren +gc.configgui.disable_moon_village_gen=Mond - Dorf-Generierung deaktivieren +gc.configgui.disable_ore_dict_space_metals=GC-Metalle müssen in Rezepten benutzt werden +gc.configgui.disable_sapphire_moon=Mond - Saphirerz-Generierung deaktivieren +gc.configgui.disable_space_station_creation=Erstellen von Raumstationen deaktivieren +gc.configgui.disable_spaceship_grief=Raketen-Explosionen deaktivieren +gc.configgui.disable_spaceship_particles=Raketen-Partikel deaktivieren +gc.configgui.disable_tin_moon=Mond - Zinn-Generierung deaktivieren +gc.configgui.disable_update_check=Überprüfen auf Updates deaktivieren +gc.configgui.disable_vehicle_camera_changes=Vivecraft - Third-Person und Zoom deaktivieren +gc.configgui.dungeon_boss_health_mod=Dungeon-Boss - Gesundheits-Modifikator +gc.configgui.enable_aluminum_ore_gen=Oberwelt - Aluminium-Generierung +gc.configgui.enable_copper_ore_gen=Oberwelt - Kupfer-Generierung +gc.configgui.enable_debug=Debug-Nachrichten in Konsole zeigen +gc.configgui.enable_other_mods_features=Generierung aller anderen Mods aktivieren +gc.configgui.enable_retrogen_oil=Oberwelt - Öl neu generieren +gc.configgui.enable_sealer_edge_checks=Versiegeler - Rand-Überprüfungen +gc.configgui.enable_silicon_ore_gen=Oberwelt - Silizium-Generierung +gc.configgui.enable_space_race_manager_popup=Wettrennen ins All-Manager-Popup aktivieren +gc.configgui.enable_thaum_craft_nodes=ThaumCraft-Nodien auf Planeten aktivieren +gc.configgui.enable_tin_ore_gen=Oberwelt - Zinn-Generierung +gc.configgui.external_oil_gen=Externe Ölgeneration +gc.configgui.force_overworld_respawn=Oberwelt-Respawn erzwingen +gc.configgui.hard_mode=Höhere Schwierigkeit +gc.configgui.id_achiev_base=Basis-Erfolgs-ID +gc.configgui.id_dimension_moon=Mond - Dimensionstyp-ID +gc.configgui.id_dimension_overworld=Dimension der Oberwelt +gc.configgui.id_dimension_overworld_orbit=Raumstation - Dimensionstyp-ID +gc.configgui.id_dimension_overworld_orbit_static=Statische Raumstation - Dimensionstyp-ID +gc.configgui.id_schematic_add_schematic="Bauplan hinzufügen" - Schematic-ID +gc.configgui.id_schematic_moon_buggy=Mondrover - Schematic-ID +gc.configgui.id_schematic_rocket_t1=Rakete (Stufe 1) - Schematic-ID +gc.configgui.key_override_fuel_level=Taste setzen: Raketentreibstoff-GUI +gc.configgui.key_override_toggle_adv_goggles=Taste setzen: Erweiterte Brillen +gc.configgui.map_scroll_invert=Map-Scrollen umkehren +gc.configgui.map_scroll_sensitivity=Map-Scrollen - Maus-Empfindlichkeit +gc.configgui.meteor_block_damage=Meteor-Schaden aktivieren +gc.configgui.meteor_spawn_mod=Meteor-Spawn-Modifikator +gc.configgui.more_stars=Mehr Sterne anzeigen +gc.configgui.oil_gen_factor=Ölgenerations-Faktor +gc.configgui.ore_dict_silicon=OreDict-Name von Silizium +gc.configgui.other_mod_ore_gen_i_ds=Benutzerdefinierte Erze auf Planeten generieren +gc.configgui.override_capes=Spender-Capes überschreiben +gc.configgui.override_map=Taste setzen: Galaxiekarte +gc.configgui.oxygen_indicator_bottom=Sauerstoff-Indikator nach unten verschieben +gc.configgui.oxygen_indicator_left=Sauerstoff-Indikator nach links verschieben +gc.configgui.planet_worldborders=Maximale x,z-Koordinaten für Mondlandung +gc.configgui.quick_mode=Schnelles Spiel (einfacher) +gc.configgui.rocket_disable_overworld_return=Rakete - Rückkehr auf die Oberwelt deaktivieren +gc.configgui.rocket_disabled_dimensions=Rakete - Deaktivierte Dimensionen +gc.configgui.rocket_fuel_factor=Raketentreibstoff-Faktor +gc.configgui.sealable_i_ds=Versiegelbare Blöcke +gc.configgui.space_station_energy_scalar=Raumstationen-Energie-Modifikator +gc.configgui.space_stations_require_permission=Raumstationen-Rechte +gc.configgui.static_loaded_dimensions=Statisch geladene Dimensionen +gc.configgui.staticLoadedNewSS=Neue Raumstationen statisch laden? +gc.configgui.suffocation_cooldown=Erstickungs-Abklingzeit +gc.configgui.suffocation_damage=Erstickungs-Schaden +gc.configgui.title=Galacticraft Core-Konfiguration +gc.configgui.use_old_fuel_fluid_i_d=Veraltete "fuelgc"-Registrierung verwenden +gc.configgui.use_old_oil_fluid_i_d=Veraltete "oilgc"-Registrierung verwenden +gc.configgui.whitelist_co_f_h_core_gen=Nur CoFHCore-Generierung +gui.battery_slot.desc.0=Batterieslot, platziere hier eine Batterie +gui.battery_slot.desc.1=oder schließe eine Energiequelle an. +gui.bed_fail.message=Ich brauche eine kryogene Kammer, wenn ich im Weltraum schlafen möchte! +gui.buggy.accel.name=Beschleunigen +gui.buggy.decel.name=Verlangsamen +gui.buggy.inv.name=Inventar / Treibstoff +gui.buggy.storage_space=Lagerraum +gui.buggy.turn.name=Links-rechts bewegen +gui.button.back.name=Zurück +gui.button.disable.name=Deaktivieren +gui.button.disableseal.name=Deaktivieren +gui.button.enable.name=Aktivieren +gui.button.enableseal.name=Aktivieren +gui.button.hide_dest.name=Verstecken +gui.button.loadfuel.name=Treibstoff laden +gui.button.loaditems.name=Gegenstände laden +gui.button.next.name=Weiter +gui.button.paintapply.name=Farbe anwenden +gui.button.paintmix.name=Farbe mischen +gui.button.paintreset.name=Farbe zurücksetzen +gui.button.refine.name=Raffinieren +gui.button.stoploading.name=Beladen stoppen +gui.button.stoprefine.name=Raffination stoppen +gui.button.stopunloading.name=Entladen stoppen +gui.button.unhide_dest.name=Einblenden +gui.button.unloaditems.name=Gegenstände entladen +gui.button.unlockschematic.name=Freischalten +gui.checkbox.horizontal.name=Horizontalmodus +gui.checkbox.invert.name=Auswahl umkehren +gui.checkbox.player_name.name=Spielername ist +gui.checkbox.player_within.name=Spieler innerhalb +gui.checkbox.redstone_signal.name=Öffne bei Redstone-Signal +gui.chest.warning.wrongkey=Ich brauche wohl einen Dungeonschlüssel der Stufe %s, um das zu entsperren! +gui.choose_planet.desc.moon=Bewohnbar#Kein Sauerstoff#Gravitation: 18% +gui.choose_planet.desc.overworld=Bewohnt#Bewohnbar#Gravitation: 100% +gui.chooseplanet.alreadycreated1.name=Raumstation bereits +gui.chooseplanet.alreadycreated2.name=erstellt! +gui.chooseplanet.cannotcreate1.name=Kann die Raumstation +gui.chooseplanet.cannotcreate2.name=hier nicht erstellen! +gui.creative_only.desc=Nur Kreativ-Modus +gui.display.nolink=Keine Verbindung! +gui.docking_rocket.current_vel.name=Aktuelle Geschw. +gui.docking_rocket.distance_from.name=Entfernung zum Ziel +gui.docking_rocket.target_vel.name=Zielgeschw. +gui.docking_rocket.warning.name.0=Drücke %s zum Bremsen +gui.docking_rocket.warning.name.1=Drücke %s zum Beschleunigen +gui.dropbox.player_distance.name.0=1 Meter +gui.dropbox.player_distance.name.1=2 Meter +gui.dropbox.player_distance.name.2=5 Meter +gui.dropbox.player_distance.name.3=10 Meter +gui.electric_compressor.desc.0=Fortschritt +gui.energy_storage.desc.0=Energiespeicher +gui.energy_storage.desc.1=Energie +gui.flag.already_placed=Hier ist bereits eine Flagge platziert! +gui.frequency_module.desc.0=Kann schwache Geräuschwellen +gui.frequency_module.desc.1=und entfernte Signale empfangen +gui.frequencymodule.warning0=Ich brauche wohl ein +gui.frequencymodule.warning1=, wenn ich hier vernünftig hören möchte. +gui.fuel_output.desc.0=Platziere leere Flüssigkeitskanister in +gui.fuel_output.desc.1=diesem Slot, um sie aus dem +gui.fuel_output.desc.2=Treibstofftank aufzufüllen +gui.fuel_tank.desc.0=Treibstofftank. Es benötigt einen +gui.fuel_tank.desc.1=Treibstofflader, um einen +gui.fuel_tank.desc.2=Treibstofftank zum Befüllen, kann +gui.fuel_tank.desc.3=mit Treibstoffkanistern befüllt werden +gui.fuel_tank.desc.4=Treibstofftank +gui.infinite_item.desc=Unendlich +gui.lander.velocity=Eintrittsgeschwindigkeit +gui.lander.velocityu=m/s +gui.lander.warning2=Halte " +gui.lander.warning3=", um zu verlangsamen! +gui.max_output.desc=Max. Output +gui.message.addnewsch.name=Neuen Bauplan hinzufügen +gui.message.apply.name=Anwenden +gui.message.assign_name.name=Namen vergeben +gui.message.atmosphere.name=Atmosphäre +gui.message.back.name=Zurück +gui.message.breed.name=Aufziehen +gui.message.bubble_visible.name=Blase Sichtbar +gui.message.can_create_space_station.name=Eine Raumstation kann hier erstellt werden! +gui.message.cancel.name=Abbrechen +gui.message.cannot_create_space_station.name=Eine Raumstation kann hier leider nicht erstellt werden. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Nochmal klicken zum Zoomen (zeigt Monde & Satelliten) +gui.message.click_again.1.name=Nochmal klicken zum Zoomen (zeigt Monde) +gui.message.click_again.2.name=Nochmal klicken zum Zoomen (zeigt Satelliten) +gui.message.click_again.3.name=Nochmal klicken zum Zoomen +gui.message.clicklink=Klicke, um zum Galacticraft Wiki zu gelangen +gui.message.create_ss.name=Erstellen +gui.message.daynightcycle.name=Tag-Nacht-Rhythmus +gui.message.energy=Energie +gui.message.environment.name=Ökologischer Boost +gui.message.exit.name=Schließen +gui.message.fuel.name=Treibstoff +gui.message.full.name=voll +gui.message.generating.name=Generieren +gui.message.grow.name=Wachsen +gui.message.heal.name=Heilen +gui.message.help1=Für die Galacticraft Hilfe +gui.message.help1a=Um diese Meldung erneut anzuzeigen, benutze: +gui.message.help2=Für die Weltraumprogrammanleitung +gui.message.help3=Für Hilfe bezüglich Öl +gui.message.in.name=In +gui.message.launch.name=Starten +gui.message.max_energy=Max. Energie +gui.message.meansurfacetemp.name=Oberflächen-Durchschnittstemp. +gui.message.moon.atmosphere.0.name=Keine +gui.message.moon.daynightcycle.0.name=29,5 Erdtage +gui.message.moon.meansurfacetemp.0.name=(Helle Seite) 253°C +gui.message.moon.meansurfacetemp.1.name=(Dunkle Seite) -153°C +gui.message.moon.surfacecomposition.0.name=Basaltgestein und +gui.message.moon.surfacecomposition.1.name=Spuren von Käse +gui.message.moon.surfacegravity.0.name=0,1654g +gui.message.moon.surfacegravity.1.name=(18% der Erde) +gui.message.of.name=von +gui.message.oil.name=Öl +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Stickstoff und Sauerstoff +gui.message.overworld.atmosphere.1.name=Ermöglicht Leben +gui.message.overworld.daynightcycle.0.name=1 Erdtag +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Stein, Erde und +gui.message.overworld.surfacecomposition.1.name=Kies +gui.message.overworld.surfacegravity.0.name=1,0g +gui.message.overworld.surfacegravity.1.name=(100% der Erde) +gui.message.prelaunch=Vor dem Start - Checkliste +gui.message.rename.name=Umbenennen +gui.message.select_ss.name=Wähle eine Raumstation +gui.message.ss_owner.name=Besitzer: +gui.message.status.name=Status +gui.message.strengthen.name=Stärken +gui.message.surfacecomposition.name=Oberflächenbeschaffenheit +gui.message.surfacegravity.name=Oberflächenanziehung +gui.message.thermal_status.name=Temperaturkontrolle +gui.message.tier.name=Stufe %d +gui.message.unnamed.name=Unbenannt +gui.missing_core.name.0=MicdoodleCore nicht gefunden im Mods-Ordner +gui.missing_core.name.1=Galacticraft konnte nicht geladen werden +gui.missing_core.name.2=Schließe Minecraft und installiere MicdoodleCore +gui.missing_core.name.3=Klicke hier, um die Download-Seite zu öffnen +gui.new_schematic.slot.desc.0=Bauplan-Slot. Du kannst +gui.new_schematic.slot.desc.1=neue Baupläne durch das +gui.new_schematic.slot.desc.2=Beenden von Dungeons auf +gui.new_schematic.slot.desc.3=Planeten und Monden finden. +gui.oil_tank.desc.0=Öltank, kann mit +gui.oil_tank.desc.1=Ölkanistern befüllt werden +gui.oxygen.warning=Achtung! Keine Sauerstoffversorgung! +gui.oxygen_compressor.slot.desc.0=Kompressortankslot, plaziere hier einen +gui.oxygen_compressor.slot.desc.1=Sauerstofftank um ihn mit Sauerstoff zu füllen. +gui.oxygen_decompressor.slot.desc.0=Dekompressortankslot, plaziere hier einen +gui.oxygen_decompressor.slot.desc.1=Sauerstofftank um ihn zu entleeren. +gui.oxygen_slot.desc.0=Sauerstoffslot, plaziere hier einen Sauerstoffkanister oder +gui.oxygen_slot.desc.1=Tank oder benutze eine angschlossene Sauerstoffversorgung. +gui.oxygen_storage.desc.0=Sauerstoffspeicher +gui.oxygen_storage.desc.1=Sauerstoff +gui.oxygen_use.desc=Sauerstoffverbrauch +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Hunger +gui.player.health=Gesundheit +gui.player.ouch=Aua!!!! +gui.receiver.cannot_attach=Hier kann kein Empfänger angebracht werden! +gui.requires_controller.desc=Benötigt Start-Controller +gui.rocket.countdown=Countdown +gui.rocket.height=Höhe +gui.rocket.inv.name=Inventar / Treibstoff +gui.rocket.launch.name=Starten +gui.rocket.launched=Gestartet +gui.rocket.on_launchpad=Auf Startrampe +gui.rocket.speed=Geschwindigkeit +gui.rocket.turn.name=Links-rechts bewegen +gui.rocket.updown.name=Hoch-runter bewegen +gui.rocket.warning.fuelinsufficient=Nicht genug Treibstoff für einen sicheren Start unter automatischer Kontrolle! +gui.rocket.warning.launchcontroller=Start abgebrochen. Start-Controller überprüfen! +gui.rocket.warning.nofuel=Ich brauche erst einmal etwas Raketentreibstoff! +gui.rocket.warning.nogyroscope=Mysteriöse Kräfte sind im Spiel, die Gyroskope spielen verrückt! +gui.rocket.warning.noparachute=Ich habe keinen Fallschirm! Wenn ich noch einmal Starten drücke, gibt es kein Zurück! +gui.rocket_type.0=Lagerraum: 18 +gui.rocket_type.1=Lagerraum: 36 +gui.rocket_type.2=Lagerraum: 56 +gui.rocket_type.3=Vorgetankt +gui.seconds=s +gui.sensor.advanced=Fortgeschrittener Modus +gui.sensor.advancedoff=AUS +gui.sensor.advancedon=AN +gui.show_bubble.desc.0=Zeige Blase +gui.skeleton_boss.message=Der Boss ist verschwunden, verlasse den Boss-Raum nicht, während du kämpfst! Betrete den Raum erneut, um von vorne zu beginnen. +gui.space_race.chat.add_success=%s nimmt an dem Wettrennen ins All teil! +gui.space_race.chat.already_part=Du nimmst bereits an diesem Wettrennen ins All teil! +gui.space_race.chat.invite_received=%s hat dich zum Wettrennen ins All eingeladen. +gui.space_race.chat.not_found=Konnte keinen Spieler mit dem Namen %s finden. +gui.space_race.chat.remove_success=%s wurde von dem Wettrennen ins All entfernt +gui.space_race.chat.to_join=Um %s beizutreten, benutze: %s +gui.space_race.coming_soon=Bald verfügbar +gui.space_race.create.add_players.name=Spieler hinzufügen +gui.space_race.create.back.name=Zurück +gui.space_race.create.brush_radius.name=Pinselradius +gui.space_race.create.brush_size.name=Pinselgröße +gui.space_race.create.change_color.name.0=Team +gui.space_race.create.change_color.name.1=Farbe +gui.space_race.create.change_color.name.2=ändern +gui.space_race.create.close.name=Schließen +gui.space_race.create.customize.name=Flagge bearbeiten +gui.space_race.create.eraser_radius.name=Radierradius +gui.space_race.create.eraser_size.name=Radiergröße +gui.space_race.create.global_stats.name=Globale Statistiken +gui.space_race.create.invite_player.name=Spieler einladen +gui.space_race.create.player_radius.name=Anmerkung: Spieler müssen in Reichweite (25 Blöcke) sein! +gui.space_race.create.rem_players.name=Spieler entfernen +gui.space_race.create.remove.name=Entfernen +gui.space_race.create.remove_player.name=Spieler entfernen +gui.space_race.create.rename.name=Team umbenennen +gui.space_race.create.send_invite.name=Einladen +gui.space_race.create.server_stats.name=Server-Statistiken +gui.space_race.create.title.name.0=Wettrennen ins All +gui.space_race.create.title.name.1=Manager +gui.space_race.create.title.name=Wettrennen ins All-Manager +gui.space_race.join.member_count.name=%d Teilnehmer +gui.space_race.join.name=Teilnehmen +gui.space_race.join.owner.name=Eigentümer +gui.space_race.join.title.name=Am Wettrennen ins All teilnehmen +gui.space_race.unnamed=Unbenanntes Team +gui.spacestation.added=Dir ist es nun erlaubt, die Raumstation von %s zu betreten! +gui.spacestation.addsuccess=%s wurde erfolgreich zur Raumstation-Liste hinzugefügt! +gui.spacestation.allow_all_false=Es dürfen nicht mehr alle Spieler deine Raumstationen betreten! +gui.spacestation.allow_all_true=Alle Spieler dürfen nun deine Raumstationen betreten! (Benutze /ssinvite -all um dies rückgängig zu machen) +gui.spacestation.changesuccess=Die Raumstation von %s gehört nun %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=%s wurde erfolgreich von der Raumstation-Liste entfernt +gui.spacestation.to_allow_entry=ein, um einem anderen Spieler zu ermöglichen, diese Raumstation zu betreten! +gui.spacestation.type_command=Gib +gui.status.active.name=Aktiv +gui.status.air_lock_closed.name=Luftschleuse geschlossen +gui.status.air_lock_open.name=Luftschleuse geöffnet +gui.status.blockedfully.name=Sonne ist nicht sichtbar +gui.status.blockedpartial.name=Sonne teilweise sichtbar +gui.status.check_pending.name=Check wird ausgeführt +gui.status.check_starting.name=Check startet +gui.status.checking_seal.name=Überprüfe Siegel +gui.status.collecting.name=Sammelt +gui.status.collectingenergy.name=Sammelt Energie +gui.status.compressing.name=Komprimiert +gui.status.disabled.name=Deaktiviert +gui.status.fulltank.name=Sauerstofftank voll +gui.status.generating.name=Generiert +gui.status.hull_heat.name=Hüllentemperatur +gui.status.idle.name=Untätig +gui.status.missingleaves.name=Nicht genug Blätter +gui.status.missingoxygen.name=Nicht genug Sauerstoff +gui.status.missingpower.name=Nicht genug Energie +gui.status.missingpower.short.name=Keine Energie +gui.status.missingtank.name=Kein Sauerstofftank +gui.status.nofuel.name=Kein Treibstoff zum Laden! +gui.status.noinvtarget.name=Kein Inventar im Ziel! +gui.status.noitems.name=Keine Gegenstände zum Laden! +gui.status.nooil.name=Kein Öl +gui.status.not_available.name=N/A +gui.status.not_generating.name=Generiert nicht +gui.status.notargetload.name=Kein Ziel zum Beladen! +gui.status.notargetunload.name=Kein Ziel zum Entladen! +gui.status.off.name=AUS +gui.status.on.name=AN +gui.status.raining.name=Regen +gui.status.ready.name=Bereit +gui.status.refining.name=Raffiniert +gui.status.running.name=Läuft +gui.status.sealed.name=Versiegelt +gui.status.sealerblocked.name=Ausgangsventil blockiert! +gui.status.sun_visible.name=Sonne sichtbar +gui.status.tank_empty.name=Sauerstofftank leer +gui.status.targetempty.name=Zielfahrzeug ist leer! +gui.status.targetfull.name=Zielfahrzeug ist voll! +gui.status.unknown.name=Unbekannt +gui.status.unsealed.name=Bereich zu groß / Unversiegelt +gui.tank.oxygen_remaining=Sauerstoff verbleibend +gui.telemetry_fail.message=Zuerst muss ich etwas (Spieler, Mob, Rakete) mit diesem Frequenzmodul messen! (oder ich versuche es anzuziehen) +gui.telemetry_fail_no_frequency_module.message=Ich brauche wohl ein Frequenzmodul in der Hand, um dies zu benutzen. +gui.telemetry_fail_wearing_it.message=Ich muss mein Frequenzmodul abnehmen, wenn ich es mit diesem Telemetrieempfänger verbinden möchte! +gui.telemetry_succeed.message=Telemetrieverbindung aufgebaut. +gui.thermal_slot.desc.0=Temperaturkontrolle-Slot, platziere hier einen +gui.thermal_slot.desc.1=Umgebungstemperatur-Controller (optional) +gui.thermal_slot.desc.2=Achtung: Verbraucht mehr Energie! +gui.title.air_lock.name=Luftschleusen-Controller von %s +gui.tracking.message=Verfolgung aktiviert. Um die Verbindung zu vervollständigen, muss ich hiermit einen Rechtsklick auf einen Telemetrieempfänger durchführen. +gui.village.warning.no_freq_mod=Ich brauche wohl ein Frequenzmodul, um mit ihnen zu kommunizieren. +gui.warning.invalid_thermal=Unzureichendes Wärmeschutzschild! +gui.warning.noroom=Nicht genug Platz! +gui.warning=WARNUNG! +item.air_fan.name=Ventilator +item.air_vent.name=Lüftungsventil +item.basic_item.ambient_thermal_controller.name=Umgebungstemperatur-Controller +item.basic_item.canned_food.name=Dose mit Nahrung +item.basic_item.compressed_aluminum.name=Gepresstes Aluminium +item.basic_item.compressed_bronze.name=Gepresste Bronze +item.basic_item.compressed_copper.name=Gepresstes Kupfer +item.basic_item.compressed_iron.name=Gepresstes Eisen +item.basic_item.compressed_steel.name=Gepresster Stahl +item.basic_item.compressed_tin.name=Gepresstes Zinn +item.basic_item.dehydrated_apple.name=Dehydrierte Äpfel +item.basic_item.dehydrated_carrot.name=Dehydrierte Karotten +item.basic_item.dehydrated_melon.name=Dehydrierte Melonen +item.basic_item.dehydrated_potato.name=Dehydrierte Kartoffeln +item.basic_item.frequency_module.name=Frequenzmodul +item.basic_item.ingot_aluminum.name=Aluminiumbarren +item.basic_item.ingot_bronze.name=Bronzebarren +item.basic_item.ingot_copper.name=Kupferbarren +item.basic_item.ingot_steel.name=Stahlbarren +item.basic_item.ingot_tin.name=Zinnbarren +item.basic_item.raw_silicon.name=Rohes Silizium +item.basic_item.solar_module_0.name=Einzelnes Solarmodul +item.basic_item.solar_module_1.name=Komplettes Solarmodul +item.basic_item.wafer_advanced.name=Fortgeschrittener Wafer +item.basic_item.wafer_basic.name=Basis-Wafer +item.basic_item.wafer_solar.name=Blauer Solar-Wafer +item.battery.name=Batterie +item.bucket_fuel.name=Treibstoffeimer +item.bucket_oil.name=Öleimer +item.buggy.name=Mondrover +item.buggymat.seat.name=Mondrover-Sitz +item.buggymat.storage.name=Mondrover-Lagerbox +item.buggymat.wheel.name=Mondrover-Rad +item.canister.copper.name=Kupferkanister +item.canister.tin.name=Zinnkanister +item.canvas.name=Segeltuch +item.cheese_block.name=Käseblock +item.cheese_curd.name=Quark +item.compressed_meteoric_iron.name=Gepresstes meteorisches Eisen +item.dungeonfinder.name=Verlies-Finder +item.empty_liquid_canister.name=Leerer Kanister +item.emergency_kit.description=Rechtsklick, um Sauerstoffausrüstung und andere wichtige Gegenstände auszurüsten. Achtung: kann nur ein Mal benutzt werden! +item.emergency_kit.name=Weltraum-Notfallpaket +item.engine.tier1booster.name=Hilfstriebwerk (Stufe 1) +item.engine.tier1engine.name=Raketentriebwerk (Stufe 1) +item.flag.name=Flagge +item.fuel.name=Raketentreibstoff +item.fuel_canister.name=Voller Ölkanister +item.fuel_canister_partial.name=Teilweise gefüllter Treibstoffkanister +item.heavy_plating.name=Robuste Platte +item.hot_description.name=Heiß +item.ic2compat.ore_crushed_alu.name=Zerstoßenes Aluminiumerz +item.ic2compat.ore_purified_alu.name=Gereinigtes zerstoßenes Aluminiumerz +item.ic2compat.dust_alu.name=Aluminumstaub +item.ic2compat.dust_small_titanium.name=Winziges Häufchen Titan-Staub +item.infinite_battery.name=Unendliche Batterie +item.infinite_oxygen.name=Unendlicher Sauerstoffvorrat +item.key.t1.name=Dungeonschlüssel (Stufe 1) +item.lunar_sapphire.description=Mond-Saphire sind die Währung im Handel mit Alien-Dorfbewohnern. +item.lunar_sapphire.name=Mond-Saphir +item.meteor_chunk.name=Werfbarer Meteorbrocken +item.meteor_chunk_hot.name=Werfbarer Meteorbrocken +item.meteoric_iron_ingot.name=Meteorischer Eisenbarren +item.meteoric_iron_raw.name=Rohes meteorisches Eisen +item.nose_cone.name=Raketennase +item.oil_canister.name=Voller Ölkanister +item.oil_canister_partial.name=Teilweise gefüllter Ölkanister +item.oil_extractor.name=Tragbarer Ölextraktor +item.oxygen_concentrator.name=Sauerstoffkonzentrator +item.oxygen_gear.name=Sauerstoffausrüstung +item.oxygen_mask.name=Sauerstoffmaske +item.oxygen_tank_heavy_empty.name=Leerer großer Sauerstofftank +item.oxygen_tank_heavy_full.name=Großer Sauerstofftank +item.oxygen_tank_light_empty.name=Leerer kleiner Sauerstofftank +item.oxygen_tank_light_full.name=Kleiner Sauerstofftank +item.oxygen_tank_med_empty.name=Leerer mittlerer Sauerstofftank +item.oxygen_tank_med_full.name=Mittlerer Sauerstofftank +item.parachute_black.name=Schwarzer Fallschirm +item.parachute_blue.name=Hellblauer Fallschirm +item.parachute_brown.name=Brauner Fallschirm +item.parachute_darkblue.name=Blauer Fallschirm +item.parachute_darkgray.name=Grauer Fallschirm +item.parachute_darkgreen.name=Grüner Fallschirm +item.parachute_gray.name=Hellgrauer Fallschirm +item.parachute_lime.name=Hellgrüner Fallschirm +item.parachute_magenta.name=Magentafarbener Fallschirm +item.parachute_orange.name=Oranger Fallschirm +item.parachute_pink.name=Pinker Fallschirm +item.parachute_plain.name=Fallschirm +item.parachute_purple.name=Violetter Fallschirm +item.parachute_red.name=Roter Fallschirm +item.parachute_teal.name=Türkiser Fallschirm +item.parachute_yellow.name=Gelber Fallschirm +item.rocket_fins.name=Raketenfinne +item.rocket_t1.name=Rakete (Stufe 1) +item.schematic.name=Raketenwerkbank-Bauplan +item.sensor_glasses.name=Sensorbrille +item.sensor_lens.name=Sensorlinse +item.standard_wrench.name=Standard-Schraubenschlüssel +item.steel_axe.name=Robuste Axt +item.steel_boots.name=Robuste Stiefel +item.steel_chestplate.name=Robuster Brustpanzer +item.steel_helmet.name=Robuster Helm +item.steel_hoe.name=Robuste Hacke +item.steel_leggings.name=Robuster Beinschutz +item.steel_pickaxe.name=Robuste Spitzhacke +item.steel_pole.name=Stahlmast +item.steel_shovel.name=Robuste Schaufel +item.steel_sword.name=Robustes Schwert +item.tier1.desc=Stufe 1 +item_desc.powerdraw.name=Benötigte Energie: %s /s +item_desc.shift.name=Drücke %s für mehr Info +item_group.galacticraft_blocks=Galacticraft: Blöcke +item_group.galacticraft_items=Galacticraft: Items +keybind.map.name=Galaxie-Karte +keybind.sensortoggle.name=Stelle Sensorbrillen-Modus +keybind.spaceshipinv.name=Öffne Raumschiff-Inventar +keybind.vehiclebackward.name=Fahrzeug-Rückwärts-Taste +keybind.vehicledown.name=Fahrzeug-Runter-Taste +keybind.vehicleforward.name=Fahrzeug-Vorwärts-Taste +keybind.vehicleleft.name=Fahrzeug-Links-Taste +keybind.vehicleright.name=Fahrzeug-Rechts-Taste +keybind.vehicleup.name=Fahrzeug-Hoch-Taste +moon.moon=Mond +newversion.failed.name=Galacticraft-Update-Check fehlgeschlagen! Neuer Versuch in 15 Sekunden ... +newversion.success.name=Neue Galacticraft-Version gefunden: +planet.jupiter=Jupiter +planet.mercury=Merkur +planet.neptune=Neptun +planet.overworld=Oberwelt +planet.saturn=Saturn +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Oberwelt-Raumstation +schematic.moonbuggy.name=Mondrover +schematic.rocket_t1.name=Rakete (Stufe 1) +schematic.rocket_t2.name=Rakete (Stufe 2) +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Luftschleusen-Controller +tile.air_lock_frame.description=Luftschleusenrahmen werden zum Bauen von Luftschleusen benutzt. Sie müssen in Portalform aufgebaut und ein Block durch einen Luftschleusen-Controller ersetzt werden. +tile.air_lock_frame.name=Luftschleusenrahmen +tile.air_lock_seal.name=Luftschleusensiegel +tile.aluminum_wire.alu_wire.description=Aluminiumkabel werden benutzt, um Energie zu transportieren. +tile.aluminum_wire.alu_wire.name=Aluminiumkabel +tile.aluminum_wire.alu_wire_heavy.description=Schwere Aluminumkabel werden benutzt, um Energie zu transportieren. Hat eine höhere Transferrate als sein Vorgänger. +tile.aluminum_wire.alu_wire_heavy.name=Schweres Aluminiumkabel +tile.aluminum_wire.alu_wire_switch.description=Ein Schaltbares Aluminiumkabel trennt die Verbindung bei Restoneeingang. +tile.aluminum_wire.alu_wire_switch.name=Schaltbares Aluminiumkabel +tile.aluminum_wire.alu_wire_switch_heavy.description=Ein Schaltbares Schweres Aluminiumkabel trennt die Verbindung bei Restoneeingang. +tile.aluminum_wire.alu_wire_switch_heavy.name=Schaltbares Schweres Aluminiumkabel +tile.arclamp.description=Bogenlampen erzeugen ein sehr starkes Licht, welches eine große Fläche ausleuchtet, aber auch Mobs zum Fliehen bringt. +tile.arclamp.name=Bogenlampe +tile.basic_block_core.block_aluminum_gc.name=Aluminiumblock +tile.basic_block_core.block_copper_gc.name=Kupferblock +tile.basic_block_core.block_meteoric_iron_gc.name=Solides Meteoreisen +tile.basic_block_core.block_tin_gc.name=Zinnblock +tile.basic_block_core.block_silicon_gc.name=Siliziumblock +tile.basic_block_core.deco_block_0.name=Zinndekorationsblock +tile.basic_block_core.deco_block_1.name=Zinndekorationsmauer +tile.basic_block_core.ore_aluminum_gc.name=Aluminiumerz +tile.basic_block_core.ore_copper_gc.name=Kupfererz +tile.basic_block_core.ore_silicon.name=Siliziumerz +tile.basic_block_core.ore_tin_gc.name=Zinnerz +tile.basic_block_moon.bricks.name=Monddungeonziegel +tile.basic_block_moon.cheesestone.name=Käseerz +tile.basic_block_moon.coppermoon.name=Kupfererz +tile.basic_block_moon.moondirt.name=Monderde +tile.basic_block_moon.moongrass.name=Mondrasen +tile.basic_block_moon.moonstone.name=Mondgestein +tile.basic_block_moon.sapphiremoon.name=Saphirerz +tile.basic_block_moon.tinmoon.name=Zinnerz +tile.buggy_pad.description=Wenn der Betankungsplatz in einer 3x3-Form gebaut wird und ein Treibstofflader angeschlossen wird, erlaubt dies dir, deinen Mondrover zu betanken. Kann nicht verwendet werden, um Raketen zu starten! +tile.cargo.loader.name=Frachtlader +tile.cargo.unloader.name=Frachtentlader +tile.cargo_loader.description=Der Frachtlader beläd Raketen und andere Fahrzeuge, welche einen Frachtraum besitzen. Muss an ein Lande- oder Tankpad angeschlossen werden. +tile.cargo_unloader.description=Der Frachtentlader entläd Raketen und andere Fahrzeuge, welche einen Frachtraum besitzen. Muss an ein Lande- oder Tankpad angeschlossen werden. +tile.cheese.description=Käseblöcke werden aus dem Käse des Monds erzeugt. Du kannst diese plazieren, aber auch essen. +tile.cheese.name=Käseblock +tile.circuit_fabricator.description=Der Schaltkreisfabrikator erzeugt aus Basismaterialien Siliziumwafer, welche für fortgeschrittene Maschinen benötigt werden. +tile.coal_generator.description=Der Kohlegenerator verbrennt Kohle (oder Kohleblöcke), um Energie zu erzeugen. Die einfachste, aber ineffizienteste Möglichkeit, Energie zu erzeugen. +tile.collector.description=Der Sauerstoffsammler speichert Sauerstoff, den er von Blättern in der Umgebung sammelt. +tile.collector.name=Sauerstoffsammler +tile.compressor.description=Der Kompressor presst Barren in ihre entsprechende Form. +tile.compressor_electric.description=Der elektrische Kompressor presst Barren in ihre entsprechende Form. Kann 2 Barren auf einmal verarbeiten. +tile.concealed_detector.name=Spieler-Detektor +tile.concealed_redstone.name=Verstecktes Redstone-Kabel +tile.concealed_repeater.name=Versteckter Redstone-Verstärker +tile.crude_oil.name=Öl +tile.crude_oil_moving.name=Rohöl +tile.crude_oil_still.name=Rohöl +tile.deconstructor.description=Der Dekonstruktor nimmt deine alten Raketen und andere Gegenstände auseinander und erzeugt dabei wiederverwertbare Materialien. +tile.dishbase.description=Die Kommunikationsschüssel kann die Position von Raumstationen verfolgen und kann Kommunikationen von deinen Remote-Raumstationen empfangen. +tile.dishbase.name=Kommunikationsschüssel +tile.distributor.description=Der Sauerstoffverteiler benutzt den Sauerstoff aus seinem internen Speicher, um eine Sauerstoffblase um ihn herum zu erzeugen. Dies erlaubt dir das Atmen in dieser Blase. +tile.distributor.name=Sauerstoffverteiler +tile.dummyblock.cryogenic_chamber.name=Kälteschlafkammer +tile.dummyblock.launch_pad.name=Raketenstartrampe +tile.dummyblock.nasa_workbench.name=Raketenwerkbank +tile.dummyblock.solar.name=Solarmodul +tile.dummyblock.space_station_base.name=Raumstationsbasis +tile.electric_furnace_tier1.description=Der elektrische Ofen ist eine schnellere Alternative zu dem Kohleofen. +tile.electric_furnace_tier2.description=Der elektrische Lichtbogenofen ist eine bessere und schnellere Alternative zu dem normalen und dem elektrischen Ofen: Verdoppelung von Erzen! +tile.emergency_box.description=Platziere einen Notfall-Behälter nahe deiner ersten Landestelle auf einem Planeten. Öffne ihn, um ein Notfallpaket darin zu finden. Der Behälter wehrt auch Mobs ab! +tile.emergency_box.filled.name=Notfall-Behälter (mit Paket) +tile.emergency_box.name=Notfall-Behälter +tile.enclosed.aluminum_wire.name=Versiegelbares Aluminiumkabel +tile.enclosed.heavy_aluminum_wire.name=Versiegelbares Schweres Aluminiumkabel +tile.enclosed.copper_cable.name=Versiegelbares Kupferkabel +tile.enclosed.description=Versiegelbare Blöcke sollten an Orten verwendet werden, wo Luft nicht ausdringen soll, zum Beispiel bei Wänden deiner Weltraumbasis. +tile.enclosed.fluid_pipe.name=Versiegelte Flüssigkeitsleitung +tile.enclosed.glass_fibre_cable.name=Versiegelbares Glasfaserkabel +tile.enclosed.gold_cable.name=Versiegelbares Goldkabel +tile.enclosed.hv_cable.name=Versiegelbares HS-Kabel +tile.enclosed.lv_cable.name=Versiegelbares Zinnkabel +tile.enclosed.me_cable.name=Versiegelbares ME-Kabel +tile.enclosed.pipe_fluids_cobblestone.name=Versiegelbares Bruchstein-Wasserrohr +tile.enclosed.pipe_fluids_stone.name=Versiegelbares Stein-Wasserrohr +tile.enclosed.pipe_items_cobblestone.name=Versiegelbares Bruchstein-Transportrohr +tile.enclosed.pipe_items_stone.name=Versiegelbares Stein-Transportrohr +tile.enclosed.pipe_power_gold.name=Versiegelbare Gold-Energieleitung +tile.enclosed.pipe_power_stone.name=Versiegelbare Stein-Energieleitung +tile.energy_storage_module_tier1.description=Die Batteriebox wird benutzt, um große Mengen Energie zu speichern. +tile.energy_storage_module_tier2.description=Der Energiespeicher-Cluster wird benutzt um große Mengen Energie zu speichern. Speichert mehr Energie als sein Vorgänger. +tile.fallen_meteor.description=Abgestürtzte Meteore können auf vielen Planeten/Monden gefunden werden, welche eine kleinere oder keine Atmosphäre besitzen. Abgebaut ergibt er Meteoreisen. +tile.fallen_meteor.name=Meteor +tile.fluid_pipe.description=Die Flüssigkeitsleitung kann Gase und Flüssigkeiten von Block zu Block übertragen. Benutze einen Schraubenschlüssel um die Modi zu wechseln. +tile.fluid_pipe.name=Flüssigkeitsleitung +tile.fluid_pipe_pull.description=Die Flüssigkeitsleitung kann Gase und Flüssigkeiten von Block zu Block übertragen. Benutze einen Schraubenschlüssel um die Modi zu wechseln. +tile.fluid_pipe_pull.name=Flüssigkeitsleitung +tile.fluid_tank.description=Flüssigkeitstanks speichern Gase oder Flüssigkeiten. +tile.fluid_tank.name=Flüssigkeitstank +tile.fuel.name=Treibstoff +tile.fuel_block.name=Treibstoff +tile.fuel_loader.description=Nachdem er mit einer Raketenstartrampe verbunden wurde, erlaubt dir der Treibstofflader Treibstoff in die Rakete oder ein anderes Fahrzeug zu pumpen. +tile.fuel_loader.name=Treibstofflader +tile.glowstone_torch.description=Glowstonefackeln sollten benutzt werden, wenn in der Umgebung kein Sauerstoff vorhanden ist und normale Fackeln nicht brennen. +tile.glowstone_torch.name=Glowstonefackel +tile.landing_pad.buggy_fueler.name=Mondrover-Betankungsplatz +tile.landing_pad.cargo_pad.name=Frachtraketenstartrampe +tile.landing_pad.description=Wenn die Raketenstartrampe in einer 3x3-Form gebaut wird, kannst du darauf Raketen platzieren. Es können Treibstofflader, Frachtlader und Start-Controller daran angeschlossen werden. +tile.landing_pad.landing_pad.name=Raketenstartrampe +tile.landing_pad_full.name=Raketenstartrampe +tile.machine.0.name=Kohlegenerator +tile.machine.1.name=Batteriebox +tile.machine.2.name=Elektrischer Ofen +tile.machine.3.name=Kompressor +tile.machine.7.name=Lichtbogenofen +tile.machine.8.name=Energiespeicher-Cluster +tile.machine2.4.name=Elektrischer Kompressor +tile.machine2.5.name=Schaltkreisfabrikator +tile.machine2.6.name=Sauerstoff-Speichermodul +tile.machine2.10.name=Dekonstruktor +tile.machine3.9.name=Färber +tile.magnetic_table.name=Magnetische Werkbank +tile.magnetic_table.description=Platzierte Items bleiben drauf - ...hält das Inventar! Shift-Klick Items möglich. Trichter können Items einführen oder entfernen, es wird dabei versucht das letzte Rezept herzustellen. +tile.moon_stairs_brick.name=Monddungeonziegeltreppe +tile.moon_stairs_stone.name=Mondsteintreppe +tile.ore_copper.name=Kupfererz +tile.ore_tin.name=Zinnerz +tile.oxygen_compressor.0.name=Sauerstoffkompressor +tile.oxygen_compressor.1.name=Sauerstoffdekompressor +tile.oxygen_compressor.description=Der Sauerstoffkompressor füllt Sauerstoff aus seinem internen Speicher in einen Sauerstofftank. +tile.oxygen_decompressor.description=Der Sauerstoffdekompressor entleert den Sauerstoff aus einem Sauerstofftank in seinen internen Speicher. +tile.oxygen_detector.description=Der Sauerstoffdetektor gibt ein Redstone-Signal aus, wenn er von Sauerstoff umgeben ist. +tile.oxygen_detector.name=Sauerstoffdetektor +tile.oxygen_storage_module.description=Das Sauerstoff-Speichermodul wird benutzt, um große Mengen Sauerstoff zu speichern. +tile.painter.description=Färbt Vakuum-Glas, Lichtpanele oder andere färbbare Objekte. Verwende einen beliebigen Block - oder Farbstoff - um eine neue Farbe zu erhalten! +tile.panel_lighting.description=Lichtpanel zur Verwendung im All! Mit Schraubenschlüssel rotierbar. Um das Aussehen zu ändern: halte dies in der Hand und SCHLEICHE + rechtsklicke auf einen normalen Block. +tile.panel_lighting_0.name=Lichtpanel (Viereck) +tile.panel_lighting_1.name=Lichtpanel (Spotlight) +tile.panel_lighting_2.name=Lichtpanel (Linear) +tile.panel_lighting_3.name=Lichtpanel (Dunkel) +tile.panel_lighting_4.name=Lichtpanel (Dunkel) +tile.parachest.description=Paratruhen fallen vom Himmel, wenn du auf einem Planeten/Mond gelandet bist, auch auf der Erde. Enthält Rakete, Treibstoff und Fracht vom letzten Start. +tile.parachest.name=Paratruhe +tile.platform.description=Platziere vier Blöcke, um eine Plattform zu bilden. Die Plattform transportiert den Spieler zur darüber- oder daruntergelegenen Plattform. SCHLEICHEN = nach unten : SPRINGEN = nach oben. +tile.platform.name=Hydraulische Plattform +tile.refinery.description=Die Raffinerie erzeugt aus Öl und Energie Treibstoff, der in Raketen und Fahrzeugen benötigt wird. +tile.refinery.name=Raffinerie +tile.rocket_workbench.description=Die Raketenwerkbank wird benutzt, um viele fortgeschrittene Teile und Fahrzeuge herzustellen. Neue Baupläne können hinzugefügt werden, wenn du sie gefunden hast. +tile.rocket_workbench.name=Raketenwerkbank +tile.sapling2.birch.name=Birkensetzling +tile.sapling2.jungle.name=Tropenbaumsetzling +tile.sapling2.oak.name=Eichensetzling +tile.sapling2.spruce.name=Fichtensetzling +tile.sealer.description=Der Sauerstofversiegeler überprüft, ob er sich in einem geschlossenem Raum befindet. Wenn ja, füllt er diesen Bereich mit atembarer Luft. +tile.sealer.name=Sauerstoffversiegeler +tile.slab_gc_half.moon_bricks_slab.name=Monddungeonziegelstufe +tile.slab_gc_half.moon_slab.name=Mondsteinstufe +tile.slab_gc_half.tin_slab_1.name=Zinndekorationsstufe +tile.slab_gc_half.tin_slab_2.name=Zinndekorationsstufe +tile.solar.advanced_solar.name=Fortgeschrittenes Solarmodul +tile.solar.basic_solar.name=Basis-Solarmodul +tile.solar_adv.description=Das fortgeschrittene Solarmodul sammelt Energie von der Sonne und speichert diese für eine spätere Verwendung. Richtet sich automatisch aus, um die optimale Energieerzeugung zu garantieren. +tile.solar_basic.description=Das Basis-Solarmodul sammelt Energie von der Sonne und speichert diese für eine spätere Verwendung. Ist mittags am effezientesten. (nicht ausrichtbar) +tile.space_glass.description=Vakuum versiegeltes Glas für Raumstationen. Mit dem Färber färbbar. +tile.space_glass.clear.description=Klars Glas für Weltraumaussicht, aber auch Unterwasser. +tile.space_glass.strong.description=Starkes und explosionsresistentes Glas. Hergestellt aus Transparentem Aluminium... +tile.space_glass_clear.name=Vakuum-Glas (Klar) +tile.space_glass_vanilla.name=Vakuum-Glas +tile.space_glass_strong.name=Vakuum-Glas (Stark) +tile.space_station_base.name=Raumstationsbasis +tile.spin_thruster.description=Drehtriebwerke werden benutzt, um deine Raumstation zu rotieren. +tile.spin_thruster.name=Drehtriebwerk +tile.telemetry.description=Der Telemetrieempfämger sammelt wertvolle Daten von verbundenen Raketen, Spielern und Monstern. Sollte am besten neben einem Bildschirm plaziert werden. Benutze ein Frequenzmodul um eine Datenverbindung aufzubauen. +tile.telemetry.name=Telemetrieempfänger +tile.tin_stairs_1.name=Zinndekorationstreppe +tile.tin_stairs_2.name=Zinndekorationstreppe +tile.treasure_chest.description=Schatztruhen der Stufe 1 sind in Monddungeons zu finden. Wenn du den Endboss besiegt hast, kannst du sie öffnen. +tile.treasure_chest.name=Schatztruhe +tile.unlit_torch.name=Fackel +tile.unlit_torch_stone.name=Steinfackel +tile.unlit_torch_lit.name=Fackel +tile.unlit_torch_stone_lit.name=Steinfackel +tile.view_screen.description=Mit diesem Bildschirm verpasst du deiner Basis den letzten Feinschliff. Ein Rechtsklick ändert die angezeigte Information. +tile.view_screen.name=Bildschirm +tile.wall_gc.moon.name=Mondsteinmauer +tile.wall_gc.moon_bricks.name=Monddungeonmauer +tile.wall_gc.tin.name=Zinndekorationsmauer diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_gb.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_gb.lang new file mode 100644 index 00000000..357a708a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_gb.lang @@ -0,0 +1,717 @@ +checklist.create_grapple.key=Create Grappling Hook +checklist.equip_oxygen_suit.key=Equip Oxygen Suit +checklist.equip_parachute.key=Equip Parachute +command.gcastrominer.count=The Astro Miner count for player %s is %s +commands.dimensionteleport=%s was sent into the atmosphere%s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s +commands.joinrace.no_team=The team needs to be specified! Usage: %s +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.magneticcrafting.name=Crafting +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel +container.solarbasic.name=Basic Solar Panel +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.meteor_chunk=%1$s was hit by meteor debris! +death.attack.oxygen_suffocation=%1$s ran out of oxygen! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. +death.attack.sulphuric_acid=%1$s dissolved in sulphuric acid! +death.attack.thermal=%1$s forgot thermal protection +dimension.moon.name=Moon +dimension.overworld.name=Overworld +dimension.sun.name=Sun +entity.alien_villager.name=Alien Villager +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evolved Creeper +entity.evolved_skeleton.name=Evolved Skeleton +entity.evolved_skeleton_boss.name=Evolved Skeleton Boss +entity.evolved_spider.name=Evolved Spider +entity.evolved_zombie.name=Evolved Zombie +entity.evolved_enderman.name=Evolved Enderman +entity.evolved_witch.name=Evolved Witch +entity.flag.name=Flag +entity.gcflag.name=Flag +entity.gravity_arrow.name=Arrow +entity.lander.name=Space Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Chunk +entity.oxygen_bubble.name=Oxygen Bubble +entity.para_chest.name=Parachest +entity.rocket_t1.name=Tier 1 Rocket +galaxy.milky_way=Milky Way +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminium Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on Planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension Type ID +gc.configgui.id_dimension_overworld=Dimension of the Overworld +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension Type ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension Type ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon +gc.configgui.other_mod_ore_gen_i_ds=Custom Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.planet_worldborders=Max x,z for Moon landing +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.static_loaded_new_ss=New Space Stations static loaded? +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here +gui.battery_slot.desc.1=or use a connected power source +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! +gui.buggy.accel.name=Accelerate +gui.buggy.decel.name=Decelerate +gui.buggy.inv.name=Inventory / Fuel +gui.buggy.storage_space=Storage Space +gui.buggy.turn.name=Turn left-right +gui.button.back.name=Back +gui.button.disable.name=Disable +gui.button.disableseal.name=Disable Seal +gui.button.enable.name=Enable +gui.button.enableseal.name=Enable Seal +gui.button.hide_dest.name=Hide +gui.button.loadfuel.name=Load Fuel +gui.button.loaditems.name=Load Items +gui.button.next.name=Next +gui.button.paintapply.name=Apply Paint +gui.button.paintmix.name=Mix Colour +gui.button.paintreset.name=Reset Colour +gui.button.refine.name=Refine +gui.button.stoploading.name=Stop Loading +gui.button.stoprefine.name=Stop Refining +gui.button.stopunloading.name=Stop Unloading +gui.button.unhide_dest.name=Unhide +gui.button.unloaditems.name=Unload Items +gui.button.unlockschematic.name=Unlock Schematic +gui.checkbox.horizontal.name=Horizontal Mode +gui.checkbox.invert.name=Invert Selection +gui.checkbox.player_name.name=Player name is +gui.checkbox.player_within.name=Player is within +gui.checkbox.redstone_signal.name=Opens on Redstone Signal +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! +gui.choose_planet.desc.moon=Habitable#No Oxygen#Gravity: 18% +gui.choose_planet.desc.overworld=Full of Life#Habitable#Gravity: 100% +gui.chooseplanet.alreadycreated1.name=Space Station Already +gui.chooseplanet.alreadycreated2.name=Created! +gui.chooseplanet.cannotcreate1.name=Cannot create Space +gui.chooseplanet.cannotcreate2.name=Station here! +gui.creative_only.desc=Creative Only +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Current Velocity +gui.docking_rocket.distance_from.name=Distance from Target +gui.docking_rocket.target_vel.name=Target Velocity +gui.docking_rocket.warning.name.0=Press %s to decelerate +gui.docking_rocket.warning.name.1=Press %s to accelerate +gui.dropbox.player_distance.name.0=1 Metre +gui.dropbox.player_distance.name.1=2 Metres +gui.dropbox.player_distance.name.2=5 Metres +gui.dropbox.player_distance.name.3=10 Metres +gui.electric_compressor.desc.0=Progress +gui.energy_storage.desc.0=Energy Storage +gui.energy_storage.desc.1=Energy +gui.flag.already_placed=Flag already placed here! +gui.frequency_module.desc.0=Can receive weak sound +gui.frequency_module.desc.1=waves and distant signals +gui.frequencymodule.warning0=I'll probably need a +gui.frequencymodule.warning1=if I want to hear properly here. +gui.fuel_output.desc.0=Place empty liquid canisters into +gui.fuel_output.desc.1=this slot to fill them from the +gui.fuel_output.desc.2=fuel tank +gui.fuel_tank.desc.0=Fuel tank. Requires +gui.fuel_tank.desc.1=fuel loader to fill +gui.fuel_tank.desc.2=Fuel tank, can be filled +gui.fuel_tank.desc.3=with fuel canisters +gui.fuel_tank.desc.4=Fuel tank +gui.infinite_item.desc=Infinite +gui.lander.velocity=Entry Velocity +gui.lander.velocityu=m/s +gui.lander.warning2=Hold " +gui.lander.warning3=" to slow down! +gui.max_output.desc=Max Output +gui.message.addnewsch.name=Add New Schematic +gui.message.apply.name=Apply +gui.message.assign_name.name=Assign Name +gui.message.atmosphere.name=Atmosphere +gui.message.back.name=Back +gui.message.breed.name=Breed +gui.message.bubble_visible.name=Bubble Visible +gui.message.can_create_space_station.name=A Space Station can be created here! +gui.message.cancel.name=Cancel +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. +gui.message.catalog.name=Catalog +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) +gui.message.click_again.1.name=Click again to zoom (view moons) +gui.message.click_again.2.name=Click again to zoom (view satellites) +gui.message.click_again.3.name=Click again to zoom +gui.message.clicklink=Click for Galacticraft Wiki +gui.message.create_ss.name=Create +gui.message.daynightcycle.name=Day-night Cycle +gui.message.energy=Energy +gui.message.environment.name=Environmental Boost +gui.message.exit.name=Exit +gui.message.fuel.name=Fuel +gui.message.full.name=full +gui.message.generating.name=Generating +gui.message.grow.name=Grow +gui.message.heal.name=Heal +gui.message.help1=For Galacticraft help +gui.message.help1a=To see this message again at any time, type +gui.message.help2=For Space Programme guidance +gui.message.help3=For help with oil +gui.message.in.name=In +gui.message.launch.name=Launch +gui.message.max_energy=Max Energy +gui.message.meansurfacetemp.name=Mean Surface Temp +gui.message.moon.atmosphere.0.name=None +gui.message.moon.daynightcycle.0.name=29.5 Earth Days +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and +gui.message.moon.surfacecomposition.1.name=Traces of Cheese +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% of Earth) +gui.message.of.name=of +gui.message.oil.name=Oil +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen +gui.message.overworld.atmosphere.1.name=Supports life +gui.message.overworld.daynightcycle.0.name=1 Earth Day +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Stone, earth, and +gui.message.overworld.surfacecomposition.1.name=gravel +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% of Earth) +gui.message.prelaunch=Pre-launch checklist +gui.message.rename.name=Rename +gui.message.select_ss.name=Select a Space Station +gui.message.ss_owner.name=Owner: +gui.message.status.name=Status +gui.message.strengthen.name=Strengthen +gui.message.surfacecomposition.name=Surface Composition +gui.message.surfacegravity.name=Surface Gravity +gui.message.thermal_status.name=Thermal Control +gui.message.tier.name=Tier %d +gui.message.unnamed.name=Unnamed +gui.missing_core.name.0=MicdoodleCore not found in mods folder +gui.missing_core.name.1=Galacticraft failed to load +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore +gui.missing_core.name.3=Click here to open download page +gui.new_schematic.slot.desc.0=New schematic slot. You +gui.new_schematic.slot.desc.1=can find new schematics +gui.new_schematic.slot.desc.2=by completing dungeons +gui.new_schematic.slot.desc.3=on planets and moons +gui.oil_tank.desc.0=Oil tank, can be filled +gui.oil_tank.desc.1=with oil canisters +gui.oxygen.warning=Oxygen Setup is Invalid! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply +gui.oxygen_storage.desc.0=Oxygen Storage +gui.oxygen_storage.desc.1=Oxygen +gui.oxygen_use.desc=Oxygen Use +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Food +gui.player.health=Health +gui.player.ouch=ouch!!!! +gui.receiver.cannot_attach=Cannot attach receiver here! +gui.requires_controller.desc=Requires Launch Controller +gui.rocket.countdown=Countdown +gui.rocket.height=Height +gui.rocket.inv.name=Inventory / Fuel +gui.rocket.launch.name=Launch +gui.rocket.launched=Launched +gui.rocket.on_launchpad=On launchpad +gui.rocket.speed=Speed +gui.rocket.turn.name=Turn left-right +gui.rocket.updown.name=Turn up-down +gui.rocket.warning.fuelinsufficient=Not enough fuel for a safe launch under automatic control! +gui.rocket.warning.launchcontroller=Pre-flight cancelling launch. Check the Launch Controller! +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! +gui.rocket_type.0=Storage Space: 18 +gui.rocket_type.1=Storage Space: 36 +gui.rocket_type.2=Storage Space: 56 +gui.rocket_type.3=Pre-fueled +gui.seconds=s +gui.sensor.advanced=Advanced Mode +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Show Bubble +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. +gui.space_race.chat.add_success=%s has joined the Space Race! +gui.space_race.chat.already_part=You are already a part of this space race! +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. +gui.space_race.chat.not_found=Could not find player with name: %s +gui.space_race.chat.remove_success=%s has been removed from the Space Race. +gui.space_race.chat.to_join=To join %s use command %s +gui.space_race.coming_soon=Coming Soon +gui.space_race.create.add_players.name=Add Player(s) +gui.space_race.create.back.name=Back +gui.space_race.create.brush_radius.name=Brush Radius +gui.space_race.create.brush_size.name=Brush Size +gui.space_race.create.change_color.name.0=Change +gui.space_race.create.change_color.name.1=Team +gui.space_race.create.change_color.name.2=Colour +gui.space_race.create.close.name=Close +gui.space_race.create.customize.name=Customize Flag +gui.space_race.create.eraser_radius.name=Eraser Radius +gui.space_race.create.eraser_size.name=Eraser Size +gui.space_race.create.global_stats.name=View Global Stats +gui.space_race.create.invite_player.name=Invite Player +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) +gui.space_race.create.rem_players.name=Remove Player(s) +gui.space_race.create.remove.name=Remove +gui.space_race.create.remove_player.name=Remove Player +gui.space_race.create.rename.name=Rename Team +gui.space_race.create.send_invite.name=Send Invite +gui.space_race.create.server_stats.name=View Server Stats +gui.space_race.create.title.name.0=Space Race +gui.space_race.create.title.name.1=Manager +gui.space_race.create.title.name=Space Race Manager +gui.space_race.join.member_count.name=%d members +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Owner +gui.space_race.join.title.name=Join Space Race +gui.space_race.unnamed=Unnamed Team +gui.spacestation.added=You've been added to %s's Space Station accepted players! +gui.spacestation.addsuccess=Successfully added %s to Space Station list! +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Successfully removed %s from Space Station list +gui.spacestation.to_allow_entry=to allow another player to enter this space station! +gui.spacestation.type_command=Type +gui.status.active.name=Active +gui.status.air_lock_closed.name=Air Lock Closed +gui.status.air_lock_open.name=Air Lock Open +gui.status.blockedfully.name=Sun is Not Visible +gui.status.blockedpartial.name=Sun Partially Visible +gui.status.check_pending.name=Check Pending +gui.status.check_starting.name=Check Starting +gui.status.checking_seal.name=Checking Seal +gui.status.collecting.name=Collecting +gui.status.collectingenergy.name=Collecting Energy +gui.status.compressing.name=Compressing +gui.status.disabled.name=Disabled +gui.status.fulltank.name=Oxygen Tank Full +gui.status.generating.name=Generating +gui.status.hull_heat.name=Hull Heat +gui.status.idle.name=Idle +gui.status.missingleaves.name=Not Enough Leaf Blocks +gui.status.missingoxygen.name=Not Enough Oxygen +gui.status.missingpower.name=Not Enough Power +gui.status.missingpower.short.name=No Power +gui.status.missingtank.name=No Valid Oxygen Tank +gui.status.nofuel.name=No Fuel to Load! +gui.status.noinvtarget.name=No Inventory on Target! +gui.status.noitems.name=No Items to Load! +gui.status.nooil.name=No Oil +gui.status.not_available.name=N/A +gui.status.not_generating.name=Not Generating +gui.status.notargetload.name=No Target to Load Into! +gui.status.notargetunload.name=No Target to Unload! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Raining +gui.status.ready.name=Ready +gui.status.refining.name=Refining +gui.status.running.name=Running +gui.status.sealed.name=Sealed +gui.status.sealerblocked.name=Output Vent Blocked! +gui.status.sun_visible.name=Sun Visible +gui.status.tank_empty.name=Oxygen Tank Empty +gui.status.targetempty.name=Target Vehicle is Empty! +gui.status.targetfull.name=Target Vehicle is Full! +gui.status.unknown.name=Unknown +gui.status.unsealed.name=Area Too Big / Unsealed +gui.tank.oxygen_remaining=Oxygen Remaining +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! +gui.telemetry_succeed.message=Telemetry link created. +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient +gui.thermal_slot.desc.1=Thermal Controller' here (optional) +gui.thermal_slot.desc.2=Note: Uses more energy! +gui.title.air_lock.name=%s's Air Lock Controller +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. +gui.village.warning.no_freq_mod=I'll need to equip a Frequency Module to communicate with them! +gui.warning.invalid_thermal=Invalid Thermal Protection! +gui.warning.noroom=Not enough room! +gui.warning=WARNING! +item.air_fan.name=Oxygen Fan +item.air_vent.name=Oxygen Vent +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller +item.basic_item.canned_food.name=Can of Food +item.basic_item.compressed_aluminum.name=Compressed Aluminium +item.basic_item.compressed_bronze.name=Compressed Bronze +item.basic_item.compressed_copper.name=Compressed Copper +item.basic_item.compressed_iron.name=Compressed Iron +item.basic_item.compressed_steel.name=Compressed Steel +item.basic_item.compressed_tin.name=Compressed Tin +item.basic_item.dehydrated_apple.name=Dehydrated Apple +item.basic_item.dehydrated_carrot.name=Dehydrated Carrot +item.basic_item.dehydrated_melon.name=Dehydrated Melon +item.basic_item.dehydrated_potato.name=Dehydrated Mashed Potato +item.basic_item.frequency_module.name=Frequency Module +item.basic_item.ingot_aluminum.name=Aluminium Ingot +item.basic_item.ingot_bronze.name=Bronze Ingot +item.basic_item.ingot_copper.name=Copper Ingot +item.basic_item.ingot_steel.name=Steel Ingot +item.basic_item.ingot_tin.name=Tin Ingot +item.basic_item.raw_silicon.name=Raw Silicon +item.basic_item.solar_module_0.name=Single Solar Module +item.basic_item.solar_module_1.name=Full Solar Panel +item.basic_item.wafer_advanced.name=Advanced Wafer +item.basic_item.wafer_basic.name=Basic Wafer +item.basic_item.wafer_solar.name=Blue Solar Wafer +item.battery.name=Battery +item.bucket_fuel.name=Fuel Bucket +item.bucket_oil.name=Oil Bucket +item.buggy.name=Buggy +item.buggymat.seat.name=Buggy Seat +item.buggymat.storage.name=Buggy Storage Box +item.buggymat.wheel.name=Buggy Wheel +item.canister.copper.name=Copper Canister +item.canister.tin.name=Tin Canister +item.canvas.name=Canvas +item.cheese_block.name=Block of Cheese +item.cheese_curd.name=Cheese Curd +item.compressed_meteoric_iron.name=Compressed Meteoric Iron +item.dungeonfinder.name=Dungeon Locator +item.empty_liquid_canister.name=Empty Canister +item.engine.tier1booster.name=Tier 1 Booster +item.engine.tier1engine.name=Tier 1 Rocket Engine +item.flag.name=Flag +item.food.canned_beef.name=Corned Beef +item.fuel.name=Rocket Fuel +item.fuel_canister.name=Filled Fuel Canister +item.fuel_canister_partial.name=Partially Filled Fuel Canister +item.heavy_plating.name=Heavy-Duty Plate +item.hot_description.name=Hot +item.infinite_battery.name=Infinite Battery +item.infinite_oxygen.name=Infinite Oxygen Supply +item.key.t1.name=Tier 1 Dungeon Key +item.lunar_sapphire.description=Lunar Sapphires are the unit of currency when trading with Alien Villagers +item.lunar_sapphire.name=Lunar Sapphire +item.meteor_chunk.name=Throwable Meteor Chunk +item.meteor_chunk_hot.name=Throwable Meteor Chunk +item.meteoric_iron_ingot.name=Meteoric Iron Ingot +item.meteoric_iron_raw.name=Raw Meteoric Iron +item.nose_cone.name=Nose Cone +item.oil_canister.name=Filled Oil Canister +item.oil_canister_partial.name=Partially Filled Oil Canister +item.oil_extractor.name=Portable Oil Extractor +item.oxygen_concentrator.name=Oxygen Concentrator +item.oxygen_gear.name=Oxygen Gear +item.oxygen_mask.name=Oxygen Mask +item.oxygen_tank_heavy_empty.name=Empty Heavy Oxygen Tank +item.oxygen_tank_heavy_full.name=Heavy Oxygen Tank +item.oxygen_tank_light_empty.name=Empty Light Oxygen Tank +item.oxygen_tank_light_full.name=Light Oxygen Tank +item.oxygen_tank_med_empty.name=Empty Medium Oxygen Tank +item.oxygen_tank_med_full.name=Medium Oxygen Tank +item.parachute_black.name=Black Parachute +item.parachute_blue.name=Light Blue Parachute +item.parachute_brown.name=Brown Parachute +item.parachute_darkblue.name=Blue Parachute +item.parachute_darkgray.name=Grey Parachute +item.parachute_darkgreen.name=Green Parachute +item.parachute_gray.name=Light Grey Parachute +item.parachute_lime.name=Lime Parachute +item.parachute_magenta.name=Magenta Parachute +item.parachute_orange.name=Orange Parachute +item.parachute_pink.name=Pink Parachute +item.parachute_plain.name=Parachute +item.parachute_purple.name=Purple Parachute +item.parachute_red.name=Red Parachute +item.parachute_teal.name=Cyan Parachute +item.parachute_yellow.name=Yellow Parachute +item.rocket_fins.name=Rocket Fins +item.rocket_t1.name=Tier 1 Rocket +item.schematic.name=NASA Workbench Schematic +item.sensor_glasses.name=Sensor Glasses +item.sensor_lens.name=Sensor Lens +item.standard_wrench.name=Standard Wrench +item.steel_axe.name=Heavy Duty Axe +item.steel_boots.name=Heavy Duty Boots +item.steel_chestplate.name=Heavy Duty Chestplate +item.steel_helmet.name=Heavy Duty Helmet +item.steel_hoe.name=Heavy Duty Hoe +item.steel_leggings.name=Heavy Duty Leggings +item.steel_pickaxe.name=Heavy Duty Pickaxe +item.steel_pole.name=Steel Pole +item.steel_shovel.name=Heavy Duty Shovel +item.steel_sword.name=Heavy Duty Sword +item.tier1.desc=Tier 1 +item_desc.powerdraw.name=Power required: %s /s +item_desc.shift.name=Press %s for more info +item_group.galacticraft_blocks=Galacticraft Blocks +item_group.galacticraft_items=Galacticraft Items +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Toggle Sensor Goggles Mode +keybind.spaceshipinv.name=Open Spaceship Inventory +keybind.vehiclebackward.name=Vehicle Backward Key +keybind.vehicledown.name=Vehicle Down Key +keybind.vehicleforward.name=Vehicle Forward Key +keybind.vehicleleft.name=Vehicle Left Key +keybind.vehicleright.name=Vehicle Right Key +keybind.vehicleup.name=Vehicle Up Key +moon.moon=Moon +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter +planet.mercury=Mercury +planet.neptune=Neptune +planet.overworld=Overworld +planet.saturn=Saturn +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Overworld Space Station +schematic.moonbuggy.name=Moon Buggy +schematic.rocket_t1.name=Tier 1 Rocket +schematic.rocket_t2.name=Tier 2 Rocket +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Air Lock Controller +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. +tile.air_lock_frame.name=Air Lock Frame +tile.air_lock_seal.name=Air Lock Seal +tile.aluminum_wire.alu_wire.description=Aluminium Wire is used to connect energy sources to energy consuming machines. +tile.aluminum_wire.alu_wire.name=Aluminium Wire +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminium Wire is used to connect energy sources to energy consuming machines. Its higher capacity boosts efficiency for Tier 2 machines. +tile.aluminum_wire.alu_wire_heavy.name=Heavy Aluminium Wire +tile.aluminum_wire.alu_wire_switch.description=Switchable Aluminium Wire connects like Aluminium Wire, unless switched OFF with a redstone signal. +tile.aluminum_wire.alu_wire_switch.name=Switchable Aluminium Wire +tile.aluminum_wire.alu_wire_switch_heavy.description=Switchable Heavy Aluminium Wire connects like Heavy Aluminium Wire, unless switched OFF with a redstone signal. +tile.aluminum_wire.alu_wire_switch_heavy.name=Switchable Heavy Aluminium Wire +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. +tile.arclamp.name=Arc Lamp +tile.basic_block_core.block_aluminum_gc.name=Aluminium Block +tile.basic_block_core.block_copper_gc.name=Copper Block +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron +tile.basic_block_core.block_tin_gc.name=Block of Tin +tile.basic_block_core.block_silicon_gc.name=Silicon Block +tile.basic_block_core.deco_block_0.name=Tin Decoration Block +tile.basic_block_core.deco_block_1.name=Tin Wall Block +tile.basic_block_core.ore_aluminum_gc.name=Aluminium Ore +tile.basic_block_core.ore_copper_gc.name=Copper Ore +tile.basic_block_core.ore_silicon.name=Silicon Ore +tile.basic_block_core.ore_tin_gc.name=Tin Ore +tile.basic_block_moon.bricks.name=Moon Dungeon Brick +tile.basic_block_moon.cheesestone.name=Cheese Ore +tile.basic_block_moon.coppermoon.name=Copper Ore +tile.basic_block_moon.moondirt.name=Moon Soil +tile.basic_block_moon.moongrass.name=Moon Turf +tile.basic_block_moon.moonstone.name=Moon Rock +tile.basic_block_moon.sapphiremoon.name=Sapphire Ore +tile.basic_block_moon.tinmoon.name=Tin Ore +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! +tile.cargo.loader.name=Cargo Loader +tile.cargo.unloader.name=Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. +tile.cheese.name=Block of Cheese +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. +tile.coal_generator.description=Coal Generator will burn coal (or a Block of Coal) for energy. The simplest but least efficient energy production method. +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. +tile.collector.name=Oxygen Collector +tile.compressor.description=Compressor will process ingots into their compressed equivalents. The most essential machine in Galacticraft! +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than its predecessor. +tile.concealed_detector.name=Player Detector +tile.concealed_redstone.name=Hidden Redstone Wire +tile.concealed_repeater.name=Hidden Redstone Repeater +tile.crude_oil.name=Oil +tile.crude_oil_moving.name=Crude Oil +tile.crude_oil_still.name=Crude Oil +tile.deconstructor.description=The Deconstructor will take apart your old rockets and other items, returning any salvageable materials. +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. +tile.dishbase.name=Communications Dish +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the centre block, using internal tank. This allows safe breathing inside the bubble. +tile.distributor.name=Oxygen Bubble Distributor +tile.dummyblock.cryogenic_chamber.name=Cryogenic Chamber +tile.dummyblock.launch_pad.name=Rocket Launch Pad +tile.dummyblock.nasa_workbench.name=NASA Workbench +tile.dummyblock.solar.name=Solar Panel +tile.dummyblock.space_station_base.name=Space Station Base +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. +tile.electric_furnace_tier2.description=Electric Arc Furnace is used as a better and faster alternative to both traditional coal and electric furnaces: double output from ores! +tile.enclosed.aluminum_wire.name=Sealable Aluminium Wire +tile.enclosed.copper_cable.name=Sealable Copper Cable +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. +tile.enclosed.fluid_pipe.name=Sealable Fluid Pipe +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fibre Cable +tile.enclosed.gold_cable.name=Sealable Gold Cable +tile.enclosed.heavy_aluminum_wire.name=Sealable Heavy Aluminium Wire +tile.enclosed.hv_cable.name=Sealable HV Cable +tile.enclosed.lv_cable.name=Sealable Tin Cable +tile.enclosed.me_cable.name=Sealable ME Cable +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Fluid Pipe +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Fluid Pipe +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe +tile.enclosed.pipe_power_gold.name=Sealable Golden Kinesis Pipe +tile.enclosed.pipe_power_stone.name=Sealable Stone Kinesis Pipe +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than its predecessor. +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. +tile.fallen_meteor.name=Fallen Meteor +tile.fluid_pipe.description=Fluid Pipe will transfer liquid and gas from source to destination block. Use a Standard Wrench to switch modes. +tile.fluid_pipe.name=Fluid Pipe +tile.fluid_pipe_pull.description=Fluid Pipe will transfer liquid and gas from source to destination block. Use a Standard Wrench to switch modes. +tile.fluid_pipe_pull.name=Fluid Pipe +tile.fluid_tank.description=Fluid Tanks will store liquids and gases for later use. +tile.fluid_tank.name=Fluid Tank +tile.fuel.name=Fuel +tile.fuel_block.name=Fuel +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. +tile.fuel_loader.name=Fuel Loader +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. +tile.glowstone_torch.name=Glowstone Torch +tile.landing_pad.buggy_fueler.name=Buggy Fueling Pad +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad +tile.landing_pad.description=Launch Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. +tile.landing_pad.landing_pad.name=Rocket Launch Pad +tile.landing_pad_full.name=Rocket Launch Pad +tile.machine.0.name=Coal Generator +tile.machine.1.name=Energy Storage Module +tile.machine.2.name=Electric Furnace +tile.machine.3.name=Compressor +tile.machine.7.name=Electric Arc Furnace +tile.machine.8.name=Energy Storage Cluster +tile.machine2.4.name=Electric Compressor +tile.machine2.5.name=Circuit Fabricator +tile.machine2.6.name=Oxygen Storage Module +tile.machine2.10.name=Deconstructor +tile.machine3.9.name=Chromatic Applicator +tile.magnetic_table.name=Magnetic Crafting Table +tile.magnetic_table.description=Items placed won't fall off - it holds its inventory! Can shift-click items in. Hoppers can insert and remove items, it will attempt to automatically create the last recipe crafted. +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs +tile.moon_stairs_stone.name=Moon Rock Stairs +tile.ore_copper.name=Copper Ore +tile.ore_tin.name=Tin Ore +tile.oxygen_compressor.0.name=Oxygen Compressor +tile.oxygen_compressor.1.name=Oxygen Decompressor +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. +tile.oxygen_detector.name=Oxygen Detector +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. +tile.painter.description=Applies colour to Vacuum Glass, Lighting Panels or other paintable objects. Use any block - or dye - to provide a fresh colour! +tile.panel_lighting.description=Lighting panel for use in space! Wrench rotates it. To change the look: hold this in hand and SNEAK + right-click a regular block. +tile.panel_lighting_0.name=Lighting Panel (Square) +tile.panel_lighting_1.name=Lighting Panel (Spotlight) +tile.panel_lighting_2.name=Lighting Panel (Linear) +tile.panel_lighting_3.name=Lighting Panel (Dark) +tile.panel_lighting_4.name=Lighting Panel (Dark) +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. +tile.parachest.name=Parachest +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. +tile.refinery.name=Refinery +tile.rocket_workbench.name=NASA Workbench +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. +tile.sapling2.birch.name=Birch Sapling +tile.sapling2.jungle.name=Jungle Sapling +tile.sapling2.oak.name=Oak Sapling +tile.sapling2.spruce.name=Spruce Sapling +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If the space is enclosed, it will fill with breathable air. +tile.sealer.name=Oxygen Sealer +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab +tile.slab_gc_half.moon_slab.name=Moon Rock Slab +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab +tile.solar.advanced_solar.name=Advanced Solar Panel +tile.solar.basic_solar.name=Basic Solar Panel +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at midday (non-adjustable). +tile.space_glass.description=Vacuum sealed glass for your space bases. Paint the surround any colour using a nearby Chromatic Applicator! +tile.space_glass.clear.description=Clear glass for nice views of space, can also provide a clear view underwater. +tile.space_glass.strong.description=Strong and explosion-resistant glass. Made from Transparent Aluminium... +tile.space_glass_clear.name=Vacuum Glass (Clear) +tile.space_glass_vanilla.name=Vacuum Glass +tile.space_glass_strong.name=Vacuum Glass (Strong) +tile.space_station_base.name=Space Station Arrival Block +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. +tile.spin_thruster.name=Spin Thruster +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. +tile.telemetry.name=Telemetry Unit +tile.tin_stairs_1.name=Tin Decoration Stairs +tile.tin_stairs_2.name=Tin Decoration Stairs +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. +tile.treasure_chest.name=Treasure Chest +tile.unlit_torch.name=Torch +tile.unlit_torch_stone.name=Stone Torch +tile.unlit_torch_lit.name=Torch +tile.unlit_torch_stone_lit.name=Stone Torch +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. +tile.view_screen.name=Display Screen +tile.wall_gc.moon.name=Moon Rock Wall +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall +tile.wall_gc.tin.name=Tin Decoration Wall diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_us.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_us.lang new file mode 100644 index 00000000..64abd2f9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_us.lang @@ -0,0 +1,826 @@ +checklist.create_grapple.key=Create Grapple Hook +checklist.equip_oxygen_suit.key=Equip Oxygen Suit +checklist.equip_parachute.key=Equip Parachute +command.gcastrominer.count=The Astro Miner count for player %s is %s +commands.emergencykit=%s was given an emergency kit! +commands.dimensionteleport=%s was sent into the atmosphere%s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s +commands.gchouston.confirm.1=This is Mission Control, say again please? +commands.gchouston.confirm.2=(To abandon mission, type /gchouston again to confirm.) +commands.gchouston.fail=Command /gchouston is only available from space (or Creative Mode). +commands.gchouston.help.1=Uh, Houston, we've had a problem.... +commands.gchouston.help.2=(Type /gchouston to abandon mission and return home.) +commands.gchouston.noop=Using command /gchouston on other players is only available to operators. +commands.gchouston.success=OK, stand by, %s, teleporting to Overworld home position. +commands.joinrace.no_team=The team needs to be specified! Usage: %s +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.magneticcrafting.name=Crafting +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel +container.solarbasic.name=Basic Solar Panel +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.meteor_chunk=%1$s was hit by meteor debris! +death.attack.oxygen_suffocation=%1$s ran out of oxygen! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. +death.attack.sulphuric_acid=%1$s dissolved in sulphuric acid! +death.attack.thermal=%1$s forgot thermal protection +dimension.moon.name=Moon +dimension.overworld.name=Overworld +dimension.sun.name=Sun +entity.alien_villager.name=Alien Villager +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evolved Creeper +entity.evolved_skeleton.name=Evolved Skeleton +entity.evolved_skeleton_boss.name=Evolved Skeleton Boss +entity.evolved_spider.name=Evolved Spider +entity.evolved_zombie.name=Evolved Zombie +entity.evolved_enderman.name=Evolved Enderman +entity.evolved_witch.name=Evolved Witch +entity.flag.name=Flag +entity.gcflag.name=Flag +entity.gravity_arrow.name=Arrow +entity.lander.name=Space Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Chunk +entity.oxygen_bubble.name=Oxygen Bubble +entity.para_chest.name=Parachest +entity.rocket_t1.name=Tier 1 Rocket +galaxy.milky_way=Milky Way +gc.configgui.allow_liquids_grating=Allow liquids to flow into Grating +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_flags=Challenge Mode Flags +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_biome_type_registrations=Disable Biome Type Registrations +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_ore_dict_space_metals=Must use GC's own space metals in recipes +gc.configgui.disable_sapphire_moon=Disable Sapphire Ore Gen on Moon +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.disable_vehicle_camera_changes=Vivecraft: Disable Third-Person and Zoom +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_space_race_manager_popup=Enable Space Race Manager Popup +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on Planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension Type ID +gc.configgui.id_dimension_overworld=Dimension of the Overworld +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension Type ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension Type ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon +gc.configgui.other_mod_ore_gen_i_ds=Custom Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.planet_worldborders=Max x,z for Moon landing +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.static_loaded_new_ss=New Space Stations static loaded? +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.use_old_fuel_fluid_i_d=Use legacy fuelgc fluid registration +gc.configgui.use_old_oil_fluid_i_d=Use legacy oilgc fluid registration +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here +gui.battery_slot.desc.1=or use a connected power source +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! +gui.buggy.accel.name=Accelerate +gui.buggy.decel.name=Decelerate +gui.buggy.inv.name=Inventory / Fuel +gui.buggy.storage_space=Storage Space +gui.buggy.turn.name=Turn left-right +gui.button.back.name=Back +gui.button.disable.name=Disable +gui.button.disableseal.name=Disable Seal +gui.button.enable.name=Enable +gui.button.enableseal.name=Enable Seal +gui.button.hide_dest.name=Hide +gui.button.loadfuel.name=Load Fuel +gui.button.loaditems.name=Load Items +gui.button.next.name=Next +gui.button.paintapply.name=Apply Paint +gui.button.paintmix.name=Mix Color +gui.button.paintreset.name=Reset Color +gui.button.refine.name=Refine +gui.button.stoploading.name=Stop Loading +gui.button.stoprefine.name=Stop Refining +gui.button.stopunloading.name=Stop Unloading +gui.button.unhide_dest.name=Unhide +gui.button.unloaditems.name=Unload Items +gui.button.unlockschematic.name=Unlock Schematic +gui.checkbox.horizontal.name=Horizontal Mode +gui.checkbox.invert.name=Invert Selection +gui.checkbox.player_name.name=Player name is +gui.checkbox.player_within.name=Player is within +gui.checkbox.redstone_signal.name=Opens on Redstone Signal +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! +gui.choose_planet.desc.moon=Habitable#No Oxygen#Gravity: 18% +gui.choose_planet.desc.overworld=Full of Life#Habitable#Gravity: 100% +gui.chooseplanet.alreadycreated1.name=Space Station Already +gui.chooseplanet.alreadycreated2.name=Created! +gui.chooseplanet.cannotcreate1.name=Cannot create Space +gui.chooseplanet.cannotcreate2.name=Station here! +gui.crafting_memory.desc.0=This Magnetic Crafting Table can craft more of this! +gui.crafting_memory.desc.1=To remember a recipe, craft one item. +gui.creative_only.desc=Creative Only +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Current Velocity +gui.docking_rocket.distance_from.name=Distance from Target +gui.docking_rocket.target_vel.name=Target Velocity +gui.docking_rocket.warning.name.0=Press %s to decelerate +gui.docking_rocket.warning.name.1=Press %s to accelerate +gui.dropbox.player_distance.name.0=1 Meter +gui.dropbox.player_distance.name.1=2 Meters +gui.dropbox.player_distance.name.2=5 Meters +gui.dropbox.player_distance.name.3=10 Meters +gui.electric_compressor.desc.0=Progress +gui.energy_storage.desc.0=Energy Storage +gui.energy_storage.desc.1=Energy +gui.flag.already_placed=Flag already placed here! +gui.frequency_module.desc.0=Can receive weak sound +gui.frequency_module.desc.1=waves and distant signals +gui.frequencymodule.warning0=I'll probably need a +gui.frequencymodule.warning1=if I want to hear properly here. +gui.fuel_output.desc.0=Place empty liquid canisters into +gui.fuel_output.desc.1=this slot to fill them from the +gui.fuel_output.desc.2=fuel tank +gui.fuel_tank.desc.0=Fuel tank. Requires +gui.fuel_tank.desc.1=fuel loader to fill +gui.fuel_tank.desc.2=Fuel tank, can be filled +gui.fuel_tank.desc.3=with fuel canisters +gui.fuel_tank.desc.4=Fuel tank +gui.infinite_item.desc=Infinite +gui.lander.velocity=Entry Velocity +gui.lander.velocityu=m/s +gui.lander.warning2=Hold " +gui.lander.warning3=" to slow down! +gui.max_output.desc=Max Output +gui.message.addnewsch.name=Add New Schematic +gui.message.apply.name=Apply +gui.message.assign_name.name=Assign Name +gui.message.atmosphere.name=Atmosphere +gui.message.back.name=Back +gui.message.breed.name=Breed +gui.message.bubble_visible.name=Bubble Visible +gui.message.can_create_space_station.name=A Space Station can be created here! +gui.message.cancel.name=Cancel +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. +gui.message.catalog.name=Catalog +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) +gui.message.click_again.1.name=Click again to zoom (view moons) +gui.message.click_again.2.name=Click again to zoom (view satellites) +gui.message.click_again.3.name=Click again to zoom +gui.message.clicklink=Click for Galacticraft Wiki +gui.message.create_ss.name=Create +gui.message.daynightcycle.name=Day-night Cycle +gui.message.energy=Energy +gui.message.environment.name=Environmental Boost +gui.message.exit.name=Exit +gui.message.fuel.name=Fuel +gui.message.full.name=full +gui.message.generating.name=Generating +gui.message.grow.name=Grow +gui.message.heal.name=Heal +gui.message.help1=For Galacticraft help +gui.message.help1a=To see this message again at any time, type +gui.message.help2=For Space Program guidance +gui.message.help3=For help with oil +gui.message.in.name=In +gui.message.launch.name=Launch +gui.message.max_energy=Max Energy +gui.message.meansurfacetemp.name=Mean Surface Temp +gui.message.moon.atmosphere.0.name=None +gui.message.moon.daynightcycle.0.name=29.5 Earth Days +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253°C +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153°C +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and +gui.message.moon.surfacecomposition.1.name=Traces of Cheese +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% of Earth) +gui.message.of.name=of +gui.message.oil.name=Oil +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen +gui.message.overworld.atmosphere.1.name=Supports life +gui.message.overworld.daynightcycle.0.name=1 Earth Day +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and +gui.message.overworld.surfacecomposition.1.name=gravel +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% of Earth) +gui.message.prelaunch=Pre-launch checklist +gui.message.rename.name=Rename +gui.message.select_ss.name=Select a Space Station +gui.message.ss_owner.name=Owner: +gui.message.status.name=Status +gui.message.strengthen.name=Strengthen +gui.message.surfacecomposition.name=Surface Composition +gui.message.surfacegravity.name=Surface Gravity +gui.message.thermal_status.name=Thermal Control +gui.message.tier.name=Tier %d +gui.message.unnamed.name=Unnamed +gui.missing_core.name.0=MicdoodleCore not found in mods folder +gui.missing_core.name.1=Galacticraft failed to load +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore +gui.missing_core.name.3=Click here to open download page +gui.new_schematic.slot.desc.0=New schematic slot. You +gui.new_schematic.slot.desc.1=can find new schematics +gui.new_schematic.slot.desc.2=by completing dungeons +gui.new_schematic.slot.desc.3=on planets and moons +gui.oil_tank.desc.0=Oil tank, can be filled +gui.oil_tank.desc.1=with oil canisters +gui.oxygen.warning=Oxygen Setup is Invalid! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply +gui.oxygen_storage.desc.0=Oxygen Storage +gui.oxygen_storage.desc.1=Oxygen +gui.oxygen_use.desc=Oxygen Use +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Food +gui.player.health=Health +gui.player.ouch=ouch!!!! +gui.receiver.cannot_attach=Cannot attach receiver here! +gui.requires_controller.desc=Requires Launch Controller +gui.rocket.countdown=Countdown +gui.rocket.height=Height +gui.rocket.inv.name=Inventory / Fuel +gui.rocket.launch.name=Launch +gui.rocket.launched=Launched +gui.rocket.on_launchpad=On launchpad +gui.rocket.speed=Speed +gui.rocket.turn.name=Turn left-right +gui.rocket.updown.name=Turn up-down +gui.rocket.warning.fuelinsufficient=Not enough fuel for a safe launch under automatic control! +gui.rocket.warning.launchcontroller=Pre-flight cancelling launch. Check the Launch Controller! +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! +gui.rocket_type.0=Storage Space: 18 +gui.rocket_type.1=Storage Space: 36 +gui.rocket_type.2=Storage Space: 54 +gui.rocket_type.3=Pre-fueled +gui.seconds=s +gui.sensor.advanced=Advanced Mode +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Show Bubble +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. +gui.space_race.chat.add_success=%s has joined the Space Race! +gui.space_race.chat.already_part=You are already a part of this space race! +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. +gui.space_race.chat.not_found=Could not find player with name: %s +gui.space_race.chat.remove_success=%s has been removed from the Space Race. +gui.space_race.chat.to_join=To join %s use command %s +gui.space_race.coming_soon=Coming Soon +gui.space_race.create.add_players.name=Add Player(s) +gui.space_race.create.back.name=Back +gui.space_race.create.brush_radius.name=Brush Radius +gui.space_race.create.brush_size.name=Brush Size +gui.space_race.create.change_color.name.0=Change +gui.space_race.create.change_color.name.1=Team +gui.space_race.create.change_color.name.2=Color +gui.space_race.create.close.name=Close +gui.space_race.create.customize.name=Customize Flag +gui.space_race.create.eraser_radius.name=Eraser Radius +gui.space_race.create.eraser_size.name=Eraser Size +gui.space_race.create.global_stats.name=View Global Stats +gui.space_race.create.invite_player.name=Invite Player +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) +gui.space_race.create.rem_players.name=Remove Player(s) +gui.space_race.create.remove.name=Remove +gui.space_race.create.remove_player.name=Remove Player +gui.space_race.create.rename.name=Rename Team +gui.space_race.create.send_invite.name=Send Invite +gui.space_race.create.server_stats.name=View Server Stats +gui.space_race.create.title.name.0=Space Race +gui.space_race.create.title.name.1=Manager +gui.space_race.create.title.name=Space Race Manager +gui.space_race.join.member_count.name=%d members +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Owner +gui.space_race.join.title.name=Join Space Race +gui.space_race.unnamed=Unnamed Team +gui.spacestation.added=You've been added to %s's Space Station accepted players! +gui.spacestation.addsuccess=Successfully added %s to Space Station list! +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Successfully removed %s from Space Station list +gui.spacestation.to_allow_entry=to allow another player to enter this space station! +gui.spacestation.type_command=Type +gui.status.active.name=Active +gui.status.air_lock_closed.name=Air Lock Closed +gui.status.air_lock_open.name=Air Lock Open +gui.status.blockedfully.name=Sun is Not Visible +gui.status.blockedpartial.name=Sun Partially Visible +gui.status.check_pending.name=Check Pending +gui.status.check_starting.name=Check Starting +gui.status.checking_seal.name=Checking Seal +gui.status.collecting.name=Collecting +gui.status.collectingenergy.name=Collecting Energy +gui.status.compressing.name=Compressing +gui.status.disabled.name=Disabled +gui.status.fulltank.name=Oxygen Tank Full +gui.status.generating.name=Generating +gui.status.hull_heat.name=Hull Heat +gui.status.idle.name=Idle +gui.status.missingleaves.name=Not Enough Leaf Blocks +gui.status.missingoxygen.name=Not Enough Oxygen +gui.status.missingpower.name=Not Enough Power +gui.status.missingpower.short.name=No Power +gui.status.missingtank.name=No Valid Oxygen Tank +gui.status.nofuel.name=No Fuel to Load! +gui.status.noinvtarget.name=No Inventory on Target! +gui.status.noitems.name=No Items to Load! +gui.status.nooil.name=No Oil +gui.status.not_available.name=N/A +gui.status.not_generating.name=Not Generating +gui.status.notargetload.name=No Target to Load Into! +gui.status.notargetunload.name=No Target to Unload! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Raining +gui.status.ready.name=Ready +gui.status.refining.name=Refining +gui.status.running.name=Running +gui.status.sealed.name=Sealed +gui.status.sealerblocked.name=Output Vent Blocked! +gui.status.sun_visible.name=Sun Visible +gui.status.tank_empty.name=Oxygen Tank Empty +gui.status.targetempty.name=Target Vehicle is Empty! +gui.status.targetfull.name=Target Vehicle is Full! +gui.status.unknown.name=Unknown +gui.status.unsealed.name=Area Too Big / Unsealed +gui.tank.oxygen_remaining=Oxygen Remaining +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! +gui.telemetry_succeed.message=Telemetry link created. +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient +gui.thermal_slot.desc.1=Thermal Controller' here (optional) +gui.thermal_slot.desc.2=Note: Uses more energy! +gui.title.air_lock.name=%s's Air Lock Controller +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. +gui.village.warning.no_freq_mod=I'll need to equip a Frequency Module to communicate with them! +gui.warning.invalid_thermal=Invalid Thermal Protection! +gui.warning.noroom=Not enough room! +gui.warning=WARNING! +item.air_fan.name=Oxygen Fan +item.air_vent.name=Oxygen Vent +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller +item.basic_item.canned_food.name=Can of Food +item.basic_item.compressed_aluminum.name=Compressed Aluminum +item.basic_item.compressed_bronze.name=Compressed Bronze +item.basic_item.compressed_copper.name=Compressed Copper +item.basic_item.compressed_iron.name=Compressed Iron +item.basic_item.compressed_steel.name=Compressed Steel +item.basic_item.compressed_tin.name=Compressed Tin +item.basic_item.dehydrated_apple.name=Dehydrated Apples +item.basic_item.dehydrated_carrot.name=Dehydrated Carrots +item.basic_item.dehydrated_melon.name=Dehydrated Melons +item.basic_item.dehydrated_potato.name=Dehydrated Potatoes +item.basic_item.frequency_module.name=Frequency Module +item.basic_item.ingot_aluminum.name=Aluminum Ingot +item.basic_item.ingot_bronze.name=Bronze Ingot +item.basic_item.ingot_copper.name=Copper Ingot +item.basic_item.ingot_steel.name=Steel Ingot +item.basic_item.ingot_tin.name=Tin Ingot +item.basic_item.raw_silicon.name=Raw Silicon +item.basic_item.solar_module_0.name=Single Solar Module +item.basic_item.solar_module_1.name=Full Solar Panel +item.basic_item.wafer_advanced.name=Advanced Wafer +item.basic_item.wafer_basic.name=Basic Wafer +item.basic_item.wafer_solar.name=Blue Solar Wafer +item.battery.name=Battery +item.bucket_fuel.name=Fuel Bucket +item.bucket_oil.name=Oil Bucket +item.buggy.name=Buggy +item.buggymat.seat.name=Buggy Seat +item.buggymat.storage.name=Buggy Storage Box +item.buggymat.wheel.name=Buggy Wheel +item.canister.copper.name=Copper Canister +item.canister.tin.name=Tin Canister +item.canvas.name=Canvas +item.cheese_block.name=Block of Cheese +item.cheese_curd.name=Cheese Curd +item.compressed_meteoric_iron.name=Compressed Meteoric Iron +item.dungeonfinder.name=Dungeon Locator +item.empty_liquid_canister.name=Empty Canister +item.emergency_kit.description=Right click to equip Oxygen Gear and other essential items. Warning: One time use! +item.emergency_kit.name=Space Emergency Kit +item.engine.tier1booster.name=Tier 1 Booster +item.engine.tier1engine.name=Tier 1 Rocket Engine +item.flag.name=Flag +item.food.cheese_slice.name=Cheese Slice +item.food.burger_bun.name=Burger Bun +item.food.beef_patty_raw.name=Ground Beef (Raw) +item.food.beef_patty_cooked.name=Beef Patty (Cooked) +item.food.cheeseburger.desc=Astronauts love cheeseburgers! A very satisfying food. +item.food.cheeseburger.name=Cheeseburger +item.food.canned_beef.name=Canned Beef +item.fuel.name=Rocket Fuel +item.fuel_canister.name=Filled Fuel Canister +item.fuel_canister_partial.name=Partially Filled Fuel Canister +item.heavy_plating.name=Heavy-Duty Plate +item.hot_description.name=Hot +item.ic2compat.ore_crushed_alu.name=Crushed Aluminum Ore +item.ic2compat.ore_purified_alu.name=Purified Crushed Aluminum Ore +item.ic2compat.dust_alu.name=Aluminum Dust +item.ic2compat.dust_small_titanium.name=Tiny Pile of Titanium Dust +item.infinite_battery.name=Infinite Battery +item.infinite_oxygen.name=Infinite Oxygen Supply +item.key.t1.name=Tier 1 Dungeon Key +item.lunar_sapphire.description=Lunar Sapphires are the unit of currency when trading with Alien Villagers +item.lunar_sapphire.name=Lunar Sapphire +item.meteor_chunk.name=Throwable Meteor Chunk +item.meteor_chunk_hot.name=Throwable Meteor Chunk +item.meteoric_iron_ingot.name=Meteoric Iron Ingot +item.meteoric_iron_raw.name=Raw Meteoric Iron +item.nose_cone.name=Nose Cone +item.oil_canister.name=Filled Oil Canister +item.oil_canister_partial.name=Partially Filled Oil Canister +item.oil_extractor.name=Portable Oil Extractor +item.oxygen_concentrator.name=Oxygen Concentrator +item.oxygen_gear.name=Oxygen Gear +item.oxygen_mask.name=Oxygen Mask +item.oxygen_tank_heavy_empty.name=Empty Heavy Oxygen Tank +item.oxygen_tank_heavy_full.name=Heavy Oxygen Tank +item.oxygen_tank_light_empty.name=Empty Light Oxygen Tank +item.oxygen_tank_light_full.name=Light Oxygen Tank +item.oxygen_tank_med_empty.name=Empty Medium Oxygen Tank +item.oxygen_tank_med_full.name=Medium Oxygen Tank +item.parachute_black.name=Black Parachute +item.parachute_blue.name=Light Blue Parachute +item.parachute_brown.name=Brown Parachute +item.parachute_darkblue.name=Blue Parachute +item.parachute_darkgray.name=Gray Parachute +item.parachute_darkgreen.name=Green Parachute +item.parachute_gray.name=Light Gray Parachute +item.parachute_lime.name=Lime Parachute +item.parachute_magenta.name=Magenta Parachute +item.parachute_orange.name=Orange Parachute +item.parachute_pink.name=Pink Parachute +item.parachute_plain.name=Parachute +item.parachute_purple.name=Purple Parachute +item.parachute_red.name=Red Parachute +item.parachute_teal.name=Cyan Parachute +item.parachute_yellow.name=Yellow Parachute +item.rocket_fins.name=Rocket Fins +item.rocket_t1.name=Tier 1 Rocket +item.schematic.name=NASA Workbench Schematic +item.sensor_glasses.name=Sensor Glasses +item.sensor_lens.name=Sensor Lens +item.standard_wrench.name=Standard Wrench +item.steel_axe.name=Heavy Duty Axe +item.steel_boots.name=Heavy Duty Boots +item.steel_chestplate.name=Heavy Duty Chestplate +item.steel_helmet.name=Heavy Duty Helmet +item.steel_hoe.name=Heavy Duty Hoe +item.steel_leggings.name=Heavy Duty Leggings +item.steel_pickaxe.name=Heavy Duty Pickaxe +item.steel_pole.name=Steel Pole +item.steel_shovel.name=Heavy Duty Shovel +item.steel_sword.name=Heavy Duty Sword +item.tier1.desc=Tier 1 +item_desc.powerdraw.name=Power required: %s /s +item_desc.shift.name=Press %s for more info +item_group.galacticraft_blocks=Galacticraft Blocks +item_group.galacticraft_items=Galacticraft Items +jei.arc_lamp.info=Very bright light in the facing direction. Place high up for best effect! Rotate using Standard Wrench. +jei.electric_compressor.info=Electric version of the Ingot Compressor, twice as fast! Even faster with Tier 2 power. A Hopper can fill or empty this machine. +jei.electric_compressor.appeng.info=For automation with AE2, set up your recipes with ingots from 2 different mods. See https:goo.gl/BwY15G for full info. +jei.fluid_pipe.info=Pipe for transporting any liquid or gas. To pump fluid out of a tank, click with a Standard Wrench to convert to 'pull mode'. \nPipe in pull mode cannot fill a tank or machine - so make your pipe runs at least 2 blocks long! +jei.fuel_loader.info=Place next to a Rocket Launch Pad. Refuels any rocket positioned on the pad. Essential for any journey into space - including your journey home again! +jei.magnetic_crafting.info=A Crafting Table which holds its items. Can accept items from a Hopper to auto-craft the last recipe successfully crafted. +jei.oxygen_collector.info=Collects breathable oxygen mixture from the Overworld or - in space - from nearby green leaves or growing crops. \nPipe the oxygen to Oxygen Compressor for oxygen tanks, or Oxygen Bubble Distributor or Oxygen Sealer. +jei.oxygen_distributor.info=Creates a bubble environment in space where players (and other creatures) can breath. Supply this with breathable oxygen mixture from Oxygen Collector or Oxygen Storage Module. +jei.oxygen_sealer.info=Fills 1 room in your space base with a breathable atmosphere. Supply this with breathable oxygen mixture from Oxygen Collector or Oxygen Storage Module. All walls of the room must be solid. \nFind leaks using Sensor Glasses! \nMaximum room size for 1 Oxygen Sealer is 10x10x8 blocks. Use multiple Oxygen Sealers for larger rooms! +jei.wrench.info=Most Galacticraft machines can be rotated by right-clicking with the Standard Wrench. \nMost electrical machines can change their power and other input and output sides using this and Shift-clicking. +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Toggle Sensor Goggles Mode +keybind.spaceshipinv.name=Open Spaceship Inventory +keybind.vehiclebackward.name=Vehicle Backward Key +keybind.vehicledown.name=Vehicle Down Key +keybind.vehicleforward.name=Vehicle Forward Key +keybind.vehicleleft.name=Vehicle Left Key +keybind.vehicleright.name=Vehicle Right Key +keybind.vehicleup.name=Vehicle Up Key +moon.moon=Moon +planet.curseforge=CurseForge +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter +planet.mercury=Mercury +planet.neptune=Neptune +planet.overworld=Overworld +planet.saturn=Saturn +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Overworld Space Station +schematic.moonbuggy.name=Moon Buggy +schematic.rocket_t1.name=Tier 1 Rocket +schematic.rocket_t2.name=Tier 2 Rocket +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Air Lock Controller +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. +tile.air_lock_frame.name=Air Lock Frame +tile.air_lock_seal.name=Air Lock Seal +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. +tile.aluminum_wire.alu_wire.name=Aluminum Wire +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Its higher capacity boosts efficiency for Tier 2 machines. +tile.aluminum_wire.alu_wire_heavy.name=Heavy Aluminum Wire +tile.aluminum_wire.alu_wire_switch.description=Switchable Aluminum Wire connects like Aluminum Wire, unless switched OFF with a redstone signal. +tile.aluminum_wire.alu_wire_switch.name=Switchable Aluminum Wire +tile.aluminum_wire.alu_wire_switch_heavy.description=Switchable Heavy Aluminum Wire connects like Heavy Aluminum Wire, unless switched OFF with a redstone signal. +tile.aluminum_wire.alu_wire_switch_heavy.name=Switchable Heavy Aluminum Wire +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. +tile.arclamp.name=Arc Lamp +tile.basic_block_core.block_aluminum_gc.name=Aluminum Block +tile.basic_block_core.block_copper_gc.name=Copper Block +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron +tile.basic_block_core.block_tin_gc.name=Block of Tin +tile.basic_block_core.block_silicon_gc.name=Silicon Block +tile.basic_block_core.deco_block_0.name=Tin Decoration Block +tile.basic_block_core.deco_block_1.name=Tin Wall Block +tile.basic_block_core.ore_aluminum_gc.name=Aluminum Ore +tile.basic_block_core.ore_copper_gc.name=Copper Ore +tile.basic_block_core.ore_silicon.name=Silicon Ore +tile.basic_block_core.ore_tin_gc.name=Tin Ore +tile.basic_block_moon.bricks.name=Moon Dungeon Brick +tile.basic_block_moon.cheesestone.name=Cheese Ore +tile.basic_block_moon.coppermoon.name=Copper Ore +tile.basic_block_moon.moondirt.name=Moon Dirt +tile.basic_block_moon.moongrass.name=Moon Turf +tile.basic_block_moon.moonstone.name=Moon Rock +tile.basic_block_moon.sapphiremoon.name=Sapphire Ore +tile.basic_block_moon.tinmoon.name=Tin Ore +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! +tile.cargo.loader.name=Cargo Loader +tile.cargo.unloader.name=Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. +tile.cheese.name=Block of Cheese +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. +tile.coal_generator.description=Coal Generator will burn coal (or a Block of Coal) for energy. The simplest but least efficient energy production method. +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. +tile.collector.name=Oxygen Collector +tile.compressor.description=Compressor will process ingots into their compressed equivalents. The most essential machine in Galacticraft! +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than its predecessor. +tile.compressor_advanced.description=A faster version of the Electric Compressor. Rapidly processes ingots into their compressed equivalents. +tile.concealed_detector.name=Player Detector +tile.concealed_redstone.name=Hidden Redstone Wire +tile.concealed_repeater.name=Hidden Redstone Repeater +tile.crude_oil.name=Oil +tile.crude_oil_moving.name=Crude Oil +tile.crude_oil_still.name=Crude Oil +tile.deconstructor.description=The Deconstructor will take apart your old rockets and other items, returning any salvageable materials. +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. +tile.dishbase.name=Communications Dish +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. +tile.distributor.name=Oxygen Bubble Distributor +tile.dummyblock.cryogenic_chamber.name=Cryogenic Chamber +tile.dummyblock.launch_pad.name=Rocket Launch Pad +tile.dummyblock.nasa_workbench.name=NASA Workbench +tile.dummyblock.solar.name=Solar Panel +tile.dummyblock.space_station_base.name=Space Station Base +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. +tile.electric_furnace_tier2.description=Electric Arc Furnace is used as a better and faster alternative to both traditional coal and electric furnaces: double output from ores! +tile.emergency_box.description=Place an Emergency Post close by your first landing place on a planet. Open to find Emergency Kit inside. Also repels mobs! +tile.emergency_box.filled.name=Emergency Post (with Kit) +tile.emergency_box.name=Emergency Post +tile.enclosed.aluminum_wire.name=Sealable Aluminum Wire +tile.enclosed.copper_cable.name=Sealable Copper Cable +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. +tile.enclosed.fluid_pipe.name=Sealable Fluid Pipe +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fiber Cable +tile.enclosed.gold_cable.name=Sealable Gold Cable +tile.enclosed.heavy_aluminum_wire.name=Sealable Heavy Aluminum Wire +tile.enclosed.hv_cable.name=Sealable HV Cable +tile.enclosed.lv_cable.name=Sealable Tin Cable +tile.enclosed.me_cable.name=Sealable ME Cable +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Fluid Pipe +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Fluid Pipe +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe +tile.enclosed.pipe_power_gold.name=Sealable Golden Kinesis Pipe +tile.enclosed.pipe_power_stone.name=Sealable Stone Kinesis Pipe +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than its predecessor. +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. +tile.fallen_meteor.name=Fallen Meteor +tile.fluid_pipe.description=Fluid Pipe will transfer liquid and gas from source to destination block. Use a Standard Wrench to switch modes. +tile.fluid_pipe.name=Fluid Pipe +tile.fluid_pipe_pull.description=Fluid Pipe will transfer liquid and gas from source to destination block. Use a Standard Wrench to switch modes. +tile.fluid_pipe_pull.name=Fluid Pipe +tile.fluid_tank.description=Fluid Tanks will store liquids and gases for later use. +tile.fluid_tank.name=Fluid Tank +tile.fuel.name=Fuel +tile.fuel_block.name=Fuel +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. +tile.fuel_loader.name=Fuel Loader +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. +tile.glowstone_torch.name=Glowstone Torch +tile.grating.name=Grating +tile.landing_pad.buggy_fueler.name=Buggy Fueling Pad +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad +tile.landing_pad.description=Launch Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. +tile.landing_pad.landing_pad.name=Rocket Launch Pad +tile.landing_pad_full.name=Rocket Launch Pad +tile.machine.0.name=Coal Generator +tile.machine.1.name=Energy Storage Module +tile.machine.2.name=Electric Furnace +tile.machine.3.name=Compressor +tile.machine.7.name=Electric Arc Furnace +tile.machine.8.name=Energy Storage Cluster +tile.machine2.4.name=Electric Compressor +tile.machine2.5.name=Circuit Fabricator +tile.machine2.6.name=Oxygen Storage Module +tile.machine2.10.name=Deconstructor +tile.machine3.9.name=Chromatic Applicator +tile.machine4.11.name=Advanced Compressor +tile.magnetic_table.name=Magnetic Crafting Table +tile.magnetic_table.description=Items placed won't fall off - it holds its inventory! Can shift-click items in. Hoppers can insert and remove items, it will attempt to automatically create the last recipe crafted. +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs +tile.moon_stairs_stone.name=Moon Rock Stairs +tile.ore_copper.name=Copper Ore +tile.ore_tin.name=Tin Ore +tile.oxygen_compressor.0.name=Oxygen Compressor +tile.oxygen_compressor.1.name=Oxygen Decompressor +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. +tile.oxygen_detector.name=Oxygen Detector +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. +tile.painter.description=Applies color to Vacuum Glass, Lighting Panels or other paintable objects. Use any block - or dye - to provide a fresh color! +tile.panel_lighting.description=Lighting panel for use in space! Wrench rotates it. To change the look: hold SNEAK while placing this against the chosen block. +tile.panel_lighting_0.name=Lighting Panel (Square) +tile.panel_lighting_1.name=Lighting Panel (Spotlight) +tile.panel_lighting_2.name=Lighting Panel (Linear) +tile.panel_lighting_3.name=Lighting Panel (Dark) +tile.panel_lighting_4.name=Lighting Panel (Dark) +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. +tile.parachest.name=Parachest +tile.platform.description=Place 4 to form a platform. The platform lifts players to the next platform above or below. SNEAK = down : JUMP = up. +tile.platform.name=Hydraulic Platform +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. +tile.refinery.name=Refinery +tile.compact_workbench.name=Compact NASA Workbench +tile.compact_workbench.description=Compact variant of the NASA Workbench. +tile.rocket_workbench.name=NASA Workbench +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. +tile.sapling2.birch.name=Birch Sapling +tile.sapling2.jungle.name=Jungle Sapling +tile.sapling2.oak.name=Oak Sapling +tile.sapling2.spruce.name=Spruce Sapling +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If the space is enclosed, it will fill with breathable air. +tile.sealer.name=Oxygen Sealer +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab +tile.slab_gc_half.moon_slab.name=Moon Rock Slab +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab +tile.solar.advanced_solar.name=Advanced Solar Panel +tile.solar.basic_solar.name=Basic Solar Panel +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). +tile.space_glass.description=Vacuum sealed glass for your space bases. Paint the surround any color using a nearby Chromatic Applicator! +tile.space_glass.clear.description=Clear glass for great views of space, can also provide a clear view underwater. +tile.space_glass.strong.description=Strong and explosion-resistant glass. Made from Transparent Aluminum... +tile.space_glass_clear.name=Vacuum Glass (Clear) +tile.space_glass_vanilla.name=Vacuum Glass +tile.space_glass_strong.name=Vacuum Glass (Strong) +tile.space_station_base.name=Space Station Arrival Block +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. +tile.spin_thruster.name=Spin Thruster +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. +tile.telemetry.name=Telemetry Unit +tile.tin_stairs_1.name=Tin Decoration Stairs +tile.tin_stairs_2.name=Tin Decoration Stairs +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. +tile.treasure_chest.name=Treasure Chest +tile.unlit_torch.name=Torch +tile.unlit_torch_stone.name=Stone Torch +tile.unlit_torch_lit.name=Torch +tile.unlit_torch_stone_lit.name=Stone Torch +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. +tile.view_screen.name=Display Screen +tile.wall_gc.moon.name=Moon Rock Wall +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall +tile.wall_gc.tin.name=Tin Decoration Wall + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=Explore the Moon... and beyond! +advancement.galacticraft.coal_generator.title=Coal Power +advancement.galacticraft.coal_generator.description=Craft a Coal Generator +advancement.galacticraft.circuit_fabricator.title=Fabricated +advancement.galacticraft.circuit_fabricator.description=Craft a circuit fabricator to make wafers +advancement.galacticraft.basic_wafer.title=Tasty wafers +advancement.galacticraft.basic_wafer.description=Craft a basic wafer. (It's silicon so please don't eat it!) +advancement.galacticraft.advanced_wafer.title=Golden wafers +advancement.galacticraft.advanced_wafer.description=Craft an advanced wafer. (You still can't eat it!) +advancement.galacticraft.compressor.title=Compressed +advancement.galacticraft.compressor.description=Craft a compressor +advancement.galacticraft.solar.title=Free Energy +advancement.galacticraft.solar.description=Craft a Basic Solar Panel +advancement.galacticraft.advanced_solar.title=Fast + Efficient +advancement.galacticraft.advanced_solar.description=Craft an Advanced Solar Panel +advancement.galacticraft.electric_compressor.title=Electrical Upgrade +advancement.galacticraft.electric_compressor.description=Craft an electric compressor +advancement.galacticraft.oil.title=Sticky stuff +advancement.galacticraft.oil.description=Fall into some oil +advancement.galacticraft.refiery.title=Time to Refine! +advancement.galacticraft.refiery.description=Craft a Refinery +advancement.galacticraft.rocket_fuel.title=Rocket Fuel +advancement.galacticraft.rocket_fuel.description=Refine oil in the refinery +advancement.galacticraft.oxygen_collector.title=Oxygen not included +advancement.galacticraft.oxygen_collector.description=Craft an Oxygen Collector +advancement.galacticraft.oxygen_compressor.title=Compress the air +advancement.galacticraft.oxygen_compressor.description=Craft an Oxygen Compressor +advancement.galacticraft.fill_tank.title=Air 2 Go +advancement.galacticraft.fill_tank.description=Fill up an oxygen tank +advancement.galacticraft.fill_all_tanks.title=Oxygen stockpile +advancement.galacticraft.fill_all_tanks.description=Fill up every kind of oxygen tank +advancement.galacticraft.all_oxygen_gear.title=All set +advancement.galacticraft.all_oxygen_gear.description=Create everything you need to breath in space +advancement.galacticraft.rocket_workbench.title=Space Engineer +advancement.galacticraft.rocket_workbench.description=Craft a NASA Workbench +advancement.galacticraft.rocket_t1.title=We have a Rocket! +advancement.galacticraft.rocket_t1.description=Weld a rocket together +advancement.galacticraft.fuel_loader.title=Fill her up! +advancement.galacticraft.fuel_loader.description=Craft a fuel loader +advancement.galacticraft.launch_rocket.title=We have liftoff! +advancement.galacticraft.launch_rocket.description=Launch your first rocket +advancement.galacticraft.moon.title=The Moon! +advancement.galacticraft.moon.description=Land on the moon +advancement.galacticraft.create_space_station.title=Space Station +advancement.galacticraft.create_space_station.description=Create your own space station! +advancement.galacticraft.spin_thruster.title=I'm getting dizzzyy +advancement.galacticraft.spin_thruster.description=Craft a spin thruster +advancement.galacticraft.moon_dungeon.title=Worse than a wither +advancement.galacticraft.moon_dungeon.description=Find an evolved skeleton boss in a dungeon +advancement.galacticraft.dungeon_key_moon.title=I has the key +advancement.galacticraft.dungeon_key_moon.description=Kill the boss hiding in the dungeon, and steal it's key +advancement.galacticraft.moon_buggy_schematic.title=Glitchy schematic +advancement.galacticraft.moon_buggy_schematic.description=Obtain a moon §obuggy schematic +advancement.galacticraft.moon_buggy.title=Buggy +advancement.galacticraft.moon_buggy.description=Weld a moon buggy together diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/es_es.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/es_es.lang new file mode 100644 index 00000000..ffea9af8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/es_es.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=El contador de astro miner para el jugador %s es %s +commands.dimensionteleport=%s fue enviado a la atmósfera%s +commands.dimensiontp.too_many=Demasiados argumentos de comando! Uso: %s +commands.gcenergyunits.invalid_units=Unidades inválidas en comando /GCEnergyUnits. Uso: %s +commands.gcenergyunits.no_units=Las unidades necesitan ser especificadas! Uso: %s +commands.joinrace.no_team=El equipo debe ser especificado! Uso: %s +commands.ssinvite.not_found=¡No se encuentran estaciones espaciales para tu nombre de usuario, necesitas viajar a ellas primero! +commands.ssinvite.wrong_usage=¡Argumentos de comando insuficientes! Uso: %s +commands.ssnewowner.wrong_usage=No se reconoce ID de estación espacial# -¿Realmente existe? Uso: %s +commands.ssuninvite.no_player=¡No se encuentra jugador con nombre %s en tu lista de estación espacial! +container.cargoloader.name=Plataforma de carga +container.cargounloader.name=Plataforma de descarga +container.fuelloader.name=Cargador de combustible +container.lander.name=Aterrizador +container.oxygencollector.name=Recolector de oxígeno +container.oxygencompressor.name=Compresor de oxígeno +container.oxygendecompressor.name=Descompresor de oxígeno +container.oxygendistributor.name=Distribuidor de oxígeno +container.oxygensealer.name=Sellador de oxígeno +container.parachest.name=Cofre-paraca +container.refinery.name=Refinería +container.solaradvanced.name=Panel solar avanzado +container.solarbasic.name=Panel solar básico +container.spaceship.name=Cohete nivel 1 +container.treasurechest.name=Cofre del tesoro +death.attack.oxygen_suffocation=¡%1$s se quedó sin oxígeno! +death.attack.spaceship_crash=El cohete de %1$s se estrelló contra el suelo. Oops. +death.attack.thermal=%1$s olvidó la protección térmica +dimension.moon.name=Luna +dimension.overworld.name=Mundo principal +dimension.sun.name=Sol +entity.alien_villager.name=Aldeano alien +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper evolucionado +entity.evolved_skeleton.name=Esqueleto evolucionado +entity.evolved_skeleton_boss.name=Jefe esqueleto evolucionado +entity.evolved_spider.name=Araña evolucionada +entity.evolved_zombie.name=Zombie evolucionado +entity.flag.name=Bandera +entity.gcflag.name=Bandera +entity.gravity_arrow.name=Flecha +entity.lander.name=Aterrizador +entity.meteor.name=Meteorito +entity.meteor_chunk.name=Trozo de meteorito +entity.oxygen_bubble.name=Burbuja de oxígeno +entity.para_chest.name=Cofre-paraca +entity.rocket_t1.name=Cohete nivel 1 +galaxy.milky_way=Vía Láctea +gc.configgui.alternate_canister_recipe=Alternar receta de bote +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=ID base para biomas de GC +gc.configgui.detectable_i_ds=IDs detectables +gc.configgui.disable_cheese_moon=Desactivar generación de queso en la Luna +gc.configgui.disable_copper_moon=Desactivar generación de cobre en la Luna +gc.configgui.disable_lander=Desactivar lander en la Luna, usar paracaídas en su lugar +gc.configgui.disable_moon_village_gen=Desactivar generación de poblados en la Luna +gc.configgui.disable_space_station_creation=Desactivar creación de estación espacial +gc.configgui.disable_spaceship_grief=Desactivar explosiones de cohetes +gc.configgui.disable_spaceship_particles=Desactivar partículas del cohete +gc.configgui.disable_tin_moon=Desactivar generación de estaño en la Luna +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Modificador de vida de jefe de mazmorra +gc.configgui.enable_aluminum_ore_gen=Generación de aluminio en el mundo principal +gc.configgui.enable_copper_ore_gen=Generación de cobre en el mundo principal +gc.configgui.enable_debug=Mostrar mensajes de depuración en consola +gc.configgui.enable_other_mods_features=Activar generador de mundo de otro mod +gc.configgui.enable_retrogen_oil=Retrogenerar petróleo en el mundo principal +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Generación de silicio en el mundo principal +gc.configgui.enable_thaum_craft_nodes=Activar nodos de ThaumCraft en planetas +gc.configgui.enable_tin_ore_gen=Generación de estaño en el mundo principal +gc.configgui.external_oil_gen=Generador externo de petróleo +gc.configgui.force_overworld_respawn=Forzar respawn en el mundo principal +gc.configgui.hard_mode=Mayor nivel de dificultad +gc.configgui.id_achiev_base=ID base de los logros +gc.configgui.id_dimension_moon=ID de dimensión de la Luna +gc.configgui.id_dimension_overworld_orbit=ID de dimensión de estación espacial +gc.configgui.id_dimension_overworld_orbit_static=ID de la dimensión de estación espacial estátitca +gc.configgui.id_schematic_add_schematic=ID de esquema "Añadir esquema" +gc.configgui.id_schematic_moon_buggy=ID de esquema de buggy +gc.configgui.id_schematic_rocket_t1=ID de esquema de cohete nivel 1 +gc.configgui.key_override_fuel_level=Establecer tecla: GUI de combustible de cohete +gc.configgui.key_override_toggle_adv_goggles=Establecer tecla: Gafas avanzadas +gc.configgui.map_scroll_invert=Invertir scroll de mapa +gc.configgui.map_scroll_sensitivity=Sensibilidad de ratón en scroll de mapa +gc.configgui.meteor_block_damage=Activado daño por caída de meteorito +gc.configgui.meteor_spawn_mod=Modificador de generación de meteoritos +gc.configgui.more_stars=Mostrar más estrellas +gc.configgui.oil_gen_factor=Factor de generación de petróleo +gc.configgui.ore_dict_silicon=Nombre en OreDict del silicio en otros mods +gc.configgui.other_mod_ore_gen_i_ds=Menas de otros mods para generar en planetas +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Establecer tecla: Mapa de galaxia +gc.configgui.oxygen_indicator_bottom=Mover indicador de oxígeno hacia abajo +gc.configgui.oxygen_indicator_left=Mover indicador de oxígeno hacia la izquierda +gc.configgui.quick_mode=Juego rápido (más fácil) +gc.configgui.rocket_disable_overworld_return=Desactivar cohete de retorno al overworld +gc.configgui.rocket_disabled_dimensions=Dimensiones desactivadas para el cohete +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Bloques precintables +gc.configgui.space_station_energy_scalar=Modificador de energía de estación espacial +gc.configgui.space_stations_require_permission=Permisos de estación espacial +gc.configgui.static_loaded_dimensions=Dimensiones estáticas cargadas +gc.configgui.suffocation_cooldown=Enfriamiento de asfixia +gc.configgui.suffocation_damage=Daño de asfixia +gc.configgui.title=Configuración de Galacticraft Core +gc.configgui.whitelist_co_f_h_core_gen=Lista blanca del generador de mundo de CoFHCore +gui.battery_slot.desc.0=Ranura de batería, inserta una batería aquí +gui.battery_slot.desc.1=o utiliza una fuente de alimentación +gui.bed_fail.message=Oh oh... ¿Y si el oxígeno se agota mientras estoy dormido? ¡Necesitaré una cámara criogénica para dormir en el espacio! +gui.buggy.accel.name=Acelerar +gui.buggy.decel.name=Frenar +gui.buggy.inv.name=Inventorio / Combustible +gui.buggy.storage_space=Espacio de almacenamiento +gui.buggy.turn.name=Girar izquierda-derecha +gui.button.back.name=Volver +gui.button.disable.name=Desactivar +gui.button.disableseal.name=Desactivar sellado +gui.button.enable.name=Activar +gui.button.enableseal.name=Activar sellado +gui.button.hide_dest.name=Ocultar +gui.button.loadfuel.name=Cargar combustible +gui.button.loaditems.name=Cargar objetos +gui.button.next.name=Siguiente +gui.button.refine.name=Refinar +gui.button.stoploading.name=Detener carga +gui.button.stoprefine.name=Parar de refinar +gui.button.stopunloading.name=Detener descarga +gui.button.unhide_dest.name=Mostrar +gui.button.unloaditems.name=Descargar objetos +gui.button.unlockschematic.name=Desbloquear plano +gui.checkbox.horizontal.name=Modo horizontal +gui.checkbox.invert.name=Invertir selección +gui.checkbox.player_name.name=Nombre del jugador +gui.checkbox.player_within.name=El jugador esta dentro de +gui.checkbox.redstone_signal.name=Abrir con señal de redstone +gui.chest.warning.wrongkey=Probablemente necesite una llave de mazmorra nivel %s para desbloquear esto +gui.choose_planet.desc.moon=Habitable#Sin oxígeno#Gravedad: 18% +gui.choose_planet.desc.overworld=Lleno de vida#Habitable#Gravedad: 100% +gui.chooseplanet.alreadycreated1.name=Ya existe una Estación Espacial +gui.chooseplanet.alreadycreated2.name=¡Creado! +gui.chooseplanet.cannotcreate1.name=No se puede crear espacio +gui.chooseplanet.cannotcreate2.name=¡Hay una estación aquí! +gui.creative_only.desc=Solo creativo +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Velocidad actual +gui.docking_rocket.distance_from.name=Distancia del objetivo +gui.docking_rocket.target_vel.name=Velocidad del objetivo +gui.docking_rocket.warning.name.0=Presiona %s para frenar +gui.docking_rocket.warning.name.1=Presiona %s para acelerar +gui.dropbox.player_distance.name.0=1 metro +gui.dropbox.player_distance.name.1=2 metros +gui.dropbox.player_distance.name.2=5 metros +gui.dropbox.player_distance.name.3=10 metros +gui.electric_compressor.desc.0=Progreso +gui.energy_storage.desc.0=Almacenamiento de energía +gui.energy_storage.desc.1=Energía +gui.flag.already_placed=¡La bandera ya se ha puesto aquí! +gui.frequency_module.desc.0=Puede recibir sonidos débiles +gui.frequency_module.desc.1=y señales distantes +gui.frequencymodule.warning0=Probablemente necesite un +gui.frequencymodule.warning1=si quiero escuchar algo aquí +gui.fuel_output.desc.0=Pon botes vacios +gui.fuel_output.desc.1=en esta ranura para llenarlos +gui.fuel_output.desc.2=del tanque de combustible +gui.fuel_tank.desc.0=Tanque de combustible. Requiere +gui.fuel_tank.desc.1=cargador de combustible para llenarlo +gui.fuel_tank.desc.2=Tanque de combustible, se puede llenar +gui.fuel_tank.desc.3=con botes de combustible +gui.fuel_tank.desc.4=Tanque de combustible +gui.infinite_item.desc=Infinito +gui.lander.velocity=Velocidad de Entrada +gui.lander.velocityu=m/s +gui.lander.warning2=¡Mantén " +gui.lander.warning3=" para desacelerar! +gui.max_output.desc=Salida máxima +gui.message.addnewsch.name=Añadir nuevo plano +gui.message.apply.name=Aplicar +gui.message.assign_name.name=Asignar nombre +gui.message.atmosphere.name=Atmósfera +gui.message.back.name=Volver +gui.message.breed.name=Criar +gui.message.bubble_visible.name=Burbuja visible +gui.message.can_create_space_station.name=La estación espacial se puede crear aquí +gui.message.cancel.name=Cancelar +gui.message.cannot_create_space_station.name=La estación espacial no se puede crear aquí +gui.message.catalog.name=Catálogo +gui.message.click_again.0.name=Click otra vez para hacer zoom (ver lunas y satélites) +gui.message.click_again.1.name=Click otra vez para hacer zoom (ver lunas) +gui.message.click_again.2.name=Click otra vez para hacer zoom (ver satélites) +gui.message.click_again.3.name=Click otra vez para hacer zoom +gui.message.clicklink=Click para ver wiki de Galacticraft +gui.message.create_ss.name=Crear +gui.message.daynightcycle.name=Ciclo día-noche +gui.message.energy=Energía +gui.message.environment.name=Impulso ambiental +gui.message.exit.name=Salir +gui.message.fuel.name=Combustible +gui.message.full.name=lleno +gui.message.generating.name=Generando +gui.message.grow.name=Crecer +gui.message.heal.name=Curar +gui.message.help1=Para ayuda de Galacticraft +gui.message.help1a=Para ver este mensaje de nuevo en cualquier momento, escribe +gui.message.help2=Para guía de programas espaciales +gui.message.help3=Para ayuda con el petróleo +gui.message.in.name=Dentro +gui.message.launch.name=Lanzar +gui.message.max_energy=Energía máxima +gui.message.meansurfacetemp.name=Temperatura media superficial +gui.message.moon.atmosphere.0.name=Ninguno +gui.message.moon.daynightcycle.0.name=29.5 días terrestres +gui.message.moon.meansurfacetemp.0.name=(Lado iluminado) 253C +gui.message.moon.meansurfacetemp.1.name=(Lado oscuro) -153C +gui.message.moon.surfacecomposition.0.name=Roca basáltica y +gui.message.moon.surfacecomposition.1.name=Huellas de queso +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% de la Tierra) +gui.message.of.name=de +gui.message.oil.name=Petróleo +gui.message.out.name=Fuera +gui.message.overworld.atmosphere.0.name=Nitrogeno y oxígeno +gui.message.overworld.atmosphere.1.name=Soporta la vida +gui.message.overworld.daynightcycle.0.name=1 Día terrestre +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Piedra, tierra, y +gui.message.overworld.surfacecomposition.1.name=grava +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% de la Tierra) +gui.message.prelaunch=Lista de pre-lanzamiento +gui.message.rename.name=Renombrar +gui.message.select_ss.name=Selecciona una estación espacial +gui.message.ss_owner.name=Propietario: +gui.message.status.name=Estado +gui.message.strengthen.name=Fortalecer +gui.message.surfacecomposition.name=Composición de la superficie +gui.message.surfacegravity.name=Gravedad de la superficie +gui.message.thermal_status.name=Control térmico +gui.message.tier.name=Nivel %d +gui.message.unnamed.name=Sin nombre +gui.missing_core.name.0=MicdoodleCore no se encuentra en la carpeta de mods +gui.missing_core.name.1=Galacticraft falló al cargar +gui.missing_core.name.2=Cierra Minecraft e instala MicdoodleCore +gui.missing_core.name.3=Click aqui para abrir la página de descarga +gui.new_schematic.slot.desc.0=Nueva ranura de planos. +gui.new_schematic.slot.desc.1=Puedes encontrar nuevos planos +gui.new_schematic.slot.desc.2=completando mazmorras +gui.new_schematic.slot.desc.3=en planetas y satélites +gui.oil_tank.desc.0=Tanque de petróleo, se puede llenar +gui.oil_tank.desc.1=con botes de petróleo +gui.oxygen.warning=¡La configuración de oxígeno es inválida! +gui.oxygen_compressor.slot.desc.0=Casilla de tanque compresor, emplaza un tanque de oxígeno +gui.oxygen_compressor.slot.desc.1=aquí para llenarlo de oxígeno respirable. +gui.oxygen_decompressor.slot.desc.0=Casilla de tanque descompresor, emplaza un tanque de oxígeno +gui.oxygen_decompressor.slot.desc.1=aquí para vaciar el oxígeno respirable. +gui.oxygen_slot.desc.0=Casilla de oxígeno, emplazar un bote o tanque de oxígeno +gui.oxygen_slot.desc.1=aquí, o usar un suministrador de oxígeno conectado +gui.oxygen_storage.desc.0=Almacenamiento de oxígeno +gui.oxygen_storage.desc.1=Oxígeno +gui.oxygen_use.desc=Uso de oxígeno +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Alimentos +gui.player.health=Salud +gui.player.ouch=¡¡¡Ouch!!! +gui.receiver.cannot_attach=¡No se puede colocar el receptor aqui! +gui.requires_controller.desc=Requiere controlador de lanzamiento +gui.rocket.countdown=Cuenta atrás +gui.rocket.height=Altura +gui.rocket.inv.name=Inventario / Combustible +gui.rocket.launch.name=Lanzar +gui.rocket.launched=Lanzado +gui.rocket.on_launchpad=En plataforma de lanzamiento +gui.rocket.speed=Velocidad +gui.rocket.turn.name=Girar izquierda-derecha +gui.rocket.updown.name=Girar arriba-abajo +gui.rocket.warning.nofuel=Primero necesitaré llenarlo con combustible +gui.rocket.warning.nogyroscope=¡Fuerzas misteriosas están en juego y los giroscopios estan girando salvajemente! +gui.rocket.warning.noparachute=¡No tengo paracaídas! Si presiono lanzar otra vez, no hay vuelta atrás +gui.rocket_type.0=Espacio de almacenamiento: 18 +gui.rocket_type.1=Espacio de almacenamiento: 36 +gui.rocket_type.2=Espacio de almacenamiento: 56 +gui.rocket_type.3=Pre-alimentado +gui.seconds=s +gui.sensor.advanced=Modo avanzado +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Mostrar burbuja +gui.skeleton_boss.message=Jefe despawneado, ¡no dejes la habitación del jefe mientras luchas! Vuelve a entrar para spawnear al jefe +gui.space_race.chat.add_success=¡%s ha entrado a la carrera espacial! +gui.space_race.chat.already_part=¡Ya eres parte de esta carrera espacial! +gui.space_race.chat.invite_received=Recibida invitación de %s para su equipo de carrera espacial. +gui.space_race.chat.not_found=No se encuentra jugador con nombre: %s +gui.space_race.chat.remove_success=%s ha sido eliminado de la carrera espacial. +gui.space_race.chat.to_join=Para unirte a %s usa el comando %s +gui.space_race.coming_soon=Próximamente +gui.space_race.create.add_players.name=Añadir jugador(es) +gui.space_race.create.back.name=Volver +gui.space_race.create.brush_radius.name=Radio del pincel +gui.space_race.create.brush_size.name=Tamaño del pincel +gui.space_race.create.change_color.name.0=Cambiar +gui.space_race.create.change_color.name.1=Equipo +gui.space_race.create.change_color.name.2=Color +gui.space_race.create.close.name=Cerrar +gui.space_race.create.customize.name=Personalizar bandera +gui.space_race.create.eraser_radius.name=Radio de la goma +gui.space_race.create.eraser_size.name=Tamaño del borrador +gui.space_race.create.global_stats.name=Ver estadísticas globales +gui.space_race.create.invite_player.name=Invitar jugador +gui.space_race.create.player_radius.name=Nota: los jugadores tienen que estar cerca (25 bloques) +gui.space_race.create.rem_players.name=Eliminar jugador(es) +gui.space_race.create.remove.name=Quitar +gui.space_race.create.remove_player.name=Quitar jugador +gui.space_race.create.rename.name=Renombrar equipo +gui.space_race.create.send_invite.name=Enviar invitación +gui.space_race.create.server_stats.name=Ver estadísticas del servidor +gui.space_race.create.title.name=Manager de la carrera espacial +gui.space_race.create.title.name.0=Manager de la +gui.space_race.create.title.name.1=carrera espacial +gui.space_race.join.member_count.name=%d miembros +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Dueño +gui.space_race.join.title.name=Unirse a la carrera espacial +gui.space_race.unnamed=Equipo sin nombre +gui.spacestation.added=¡Has sido añadido a los jugadores aceptados en la estación espacial %s! +gui.spacestation.addsuccess=¡Se ha añadido a %s a la lista de la estación espacial! +gui.spacestation.allow_all_false=¡Tu estación espacial ya no está abierta a todos los jugadores! +gui.spacestation.allow_all_true=¡Tu estación espacial está ahora abierta a todos los jugadores! (Usa /ssinvite -all para deshacer esto.) +gui.spacestation.changesuccess=Cambiado el propietario de la estación espacial de %s al nuevo propietario %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=¡Se ha eliminado %s de la lista de la estación espacial! +gui.spacestation.to_allow_entry=para permitir a otro jugador entrar en esta estación espacial +gui.spacestation.type_command=Tipo +gui.status.active.name=Activo +gui.status.air_lock_closed.name=Esclusa de aire cerrada +gui.status.air_lock_open.name=Esclusa de aire abierta +gui.status.blockedfully.name=El Sol no es visible +gui.status.blockedpartial.name=Sol parcialmente visible +gui.status.check_pending.name=Pendiente de comprobación +gui.status.check_starting.name=Empezando comprobación +gui.status.checking_seal.name=Comprobación de sellado +gui.status.collecting.name=Recolectando +gui.status.collectingenergy.name=Recolectando energía +gui.status.compressing.name=Comprimiendo +gui.status.disabled.name=Deshabilitado +gui.status.fulltank.name=Tanque de oxígeno lleno +gui.status.generating.name=Generando +gui.status.hull_heat.name=Calor del casco +gui.status.idle.name=Libre +gui.status.missingleaves.name=No hay suficientes hojas +gui.status.missingoxygen.name=No hay suficiente oxígeno +gui.status.missingpower.name=No hay suficiente energía +gui.status.missingtank.name=Sin bote de oxígeno válido +gui.status.nofuel.name=¡Sin combustible para cargar! +gui.status.noinvtarget.name=¡Sin inventario en el objetivo! +gui.status.noitems.name=¡Sin objetos para Cargar! +gui.status.nooil.name=Sin petróleo +gui.status.not_available.name=N/A +gui.status.not_generating.name=No generando +gui.status.notargetload.name=¡Sin objetivo donde cargar! +gui.status.notargetunload.name=¡Sin objetivo donde descargar! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Lloviendo +gui.status.ready.name=Preparado +gui.status.refining.name=Refinando +gui.status.running.name=Funcionando +gui.status.sealed.name=Sellado +gui.status.sealerblocked.name=¡Respiradero de salida bloqueado! +gui.status.sun_visible.name=Sol visible +gui.status.tank_empty.name=Tanque de oxígeno vacío +gui.status.targetempty.name=¡El vehículo destino esta vacío! +gui.status.targetfull.name=¡El vehículo destino esta lleno! +gui.status.unknown.name=Desconocido +gui.status.unsealed.name=Area demasiado grande / sin sellar +gui.tank.oxygen_remaining=Oxígeno restante +gui.telemetry_fail.message=¡Primero necesitarás hacer un seguimiento a una entidad con este módulo de frecuencia! (¡O intentar equipártelo!) +gui.telemetry_fail_no_frequency_module.message=¡Probablemente necesitaré un módulo de frencuencia en mis manos para hacer uso de esto! +gui.telemetry_fail_wearing_it.message=¡Necesitaré soltar mi módulo de frecuencia si quiero enlazar esto con la unidad de telemetría! +gui.telemetry_succeed.message=Enlace telemétrico creado. +gui.thermal_slot.desc.0=Casilla térmica, emplaza el 'controlador +gui.thermal_slot.desc.1=térmico ambiental' aquí (opcional) +gui.thermal_slot.desc.2=Nota: ¡Usa más energía! +gui.title.air_lock.name=%s Controlador de la esclusa de aire +gui.tracking.message=Seguimiento activado. Ahora necesirarás hacer click derecho sobre esto en una unidad de telemetría para completar el enlace. +gui.warning=¡ALERTA! +gui.warning.invalid_thermal=Protección térmica inválida +gui.warning.noroom=Espacio insuficiente +item.air_fan.name=Ventilador +item.air_vent.name=Respiradero +item.basic_item.ambient_thermal_controller.name=Controlador térmico ambiental +item.basic_item.canned_food.name=Lata de comida +item.basic_item.compressed_aluminum.name=Aluminio comprimido +item.basic_item.compressed_bronze.name=Bronce comprimido +item.basic_item.compressed_copper.name=Cobre comprimido +item.basic_item.compressed_iron.name=Hierro comprimido +item.basic_item.compressed_steel.name=Acero comprimido +item.basic_item.compressed_tin.name=Estaño comprimido +item.basic_item.dehydrated_apple.name=Manzanas deshidratadas +item.basic_item.dehydrated_carrot.name=Zanahorias deshidratadas +item.basic_item.dehydrated_melon.name=Melones deshidratados +item.basic_item.dehydrated_potato.name=Patatas deshidratadas +item.basic_item.frequency_module.name=Módulo de frecuencia +item.basic_item.ingot_aluminum.name=Lingote de aluminio +item.basic_item.ingot_bronze.name=Lingote de bronce +item.basic_item.ingot_copper.name=Lingote de cobre +item.basic_item.ingot_steel.name=Lingote de acero +item.basic_item.ingot_tin.name=Lingote de estaño +item.basic_item.raw_silicon.name=Silicio en bruto +item.basic_item.solar_module_0.name=Módulo del panel solar +item.basic_item.solar_module_1.name=Panel solar +item.basic_item.wafer_advanced.name=Oblea avanzada +item.basic_item.wafer_basic.name=Oblea básica +item.basic_item.wafer_solar.name=Oblea solar azul +item.battery.name=Batería +item.bucket_fuel.name=Cubo de combustible +item.bucket_oil.name=Cubo de petróleo +item.buggy.name=Buggy +item.buggymat.seat.name=Asiento de buggy +item.buggymat.storage.name=Cofre para buggy +item.buggymat.wheel.name=Rueda de buggy +item.canister.copper.name=Bote de cobre +item.canister.tin.name=Bote de estaño +item.canvas.name=Lienzo +item.cheese_block.name=Bloque de queso +item.cheese_curd.name=Queso en grano +item.compressed_meteoric_iron.name=Hierro meteórico comprimido +item.empty_liquid_canister.name=Bote de líquido vacío +item.engine.tier1booster.name=Acelerador nivel 1 +item.engine.tier1engine.name=Motor de cohete nivel 1 +item.flag.name=Bandera +item.fuel.name=Combustible del cohete +item.fuel_canister.name=Bote lleno de combustible +item.fuel_canister_partial.name=Bote con algo de combustible +item.heavy_plating.name=Placa de alta resistencia +item.hot_description.name=Caliente +item.infinite_battery.name=Batería infinita +item.infinite_oxygen.name=Suministrador de oxígeno infinito +item.key.t1.name=Llave de mazmorra nivel 1 +item.meteor_chunk.name=Trozo arrojadizo de meteorito +item.meteor_chunk_hot.name=Trozo arrojadizo de meteorito +item.meteoric_iron_ingot.name=Lingote de hierro meteórico +item.meteoric_iron_raw.name=Hierro meteórico en bruto +item.nose_cone.name=Ojiva +item.oil_canister.name=Bote lleno de petróleo +item.oil_canister_partial.name=Bote con algo de petróleo +item.oil_extractor.name=Extractor de petróleo pórtatil +item.oxygen_concentrator.name=Concentrador de oxígeno +item.oxygen_gear.name=Equipo de oxígeno +item.oxygen_mask.name=Máscara de oxígeno +item.oxygen_tank_heavy_empty.name=Tanque grande de oxígeno vacío +item.oxygen_tank_heavy_full.name=Tanque grande de oxígeno +item.oxygen_tank_light_empty.name=Tanque pequeño de oxígeno vacío +item.oxygen_tank_light_full.name=Tanque pequeño de oxígeno +item.oxygen_tank_med_empty.name=Tanque mediano de oxígeno vacío +item.oxygen_tank_med_full.name=Tanque mediano de oxígeno +item.parachute_black.name=Paracaídas negro +item.parachute_blue.name=Paracaídas azul claro +item.parachute_brown.name=Paracaídas marrón +item.parachute_darkblue.name=Paracaídas azul +item.parachute_darkgray.name=Paracaídas gris +item.parachute_darkgreen.name=Paracaídas verde +item.parachute_gray.name=Paracaídas Gris claro +item.parachute_lime.name=Paracaídas verde lima +item.parachute_magenta.name=Paracaídas magenta +item.parachute_orange.name=Paracaídas naranja +item.parachute_pink.name=Paracaídas rosa +item.parachute_plain.name=Paracaídas +item.parachute_purple.name=Paracaídas morado +item.parachute_red.name=Paracaídas rojo +item.parachute_teal.name=Paracaídas cian +item.parachute_yellow.name=Paracaídas amarillo +item.rocket_fins.name=Aletas de cohete +item.rocket_t1.name=Cohete nivel 1 +item.schematic.name=Planos +item.sensor_glasses.name=Gafas con sensores +item.sensor_lens.name=Lente con sensor +item.standard_wrench.name=Llave inglesa +item.steel_axe.name=Hacha de acero +item.steel_boots.name=Botas de acero +item.steel_chestplate.name=Peto de acero +item.steel_helmet.name=Casco de acero +item.steel_hoe.name=Azada de acero +item.steel_leggings.name=Grebas de acero +item.steel_pickaxe.name=Pico de acero +item.steel_pole.name=Mástil de acero +item.steel_shovel.name=Pala de acero +item.steel_sword.name=Espada de acero +item.tier1.desc=Nivel 1 +item_desc.powerdraw.name=Energía necesaria: %s /s +item_desc.shift.name=Pulsa %s para mas info +item_group.galacticraft_blocks=Bloques de Galacticraft +item_group.galacticraft_items=Objetos de Galacticraft +keybind.map.name=Mapa de la galaxia +keybind.sensortoggle.name=Modo gafas con sensores +keybind.spaceshipinv.name=Abrir inventario del cohete +keybind.vehiclebackward.name=Tecla marcha atrás del vehículo +keybind.vehicledown.name=Tecla abajo del vehículo +keybind.vehicleforward.name=Tecla acelerar vehículo +keybind.vehicleleft.name=Tecla izquierda del vehículo +keybind.vehicleright.name=Tecla derecha del vehículo +keybind.vehicleup.name=Tecla arriba del vehículo +moon.moon=Luna +newversion.failed.name=¡Fallo de comprobación de actualización para Galacticraft! Reintentando en 15 segundos +newversion.success.name=Galacticraft versión remota encontrada: +planet.jupiter=Jupiter +planet.mercury=Mercurio +planet.neptune=Neptuno +planet.overworld=Mundo principal +planet.saturn=Saturno +planet.uranus=Urano +planet.venus=Venus +satellite.spacestation.overworld=Estación espacial del mundo principal +schematic.moonbuggy.name=Buggy lunar +schematic.rocket_t1.name=Cohete nivel 1 +schematic.rocket_t2.name=Cohete nivel 2 +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Controlador de la esclusa de aire +tile.air_lock_frame.description=Los marcos de la esclusa cuando se juntan como si fueran un portal, y uno de esos bloques es un controlador de la esclusa, funcionarán como una esclusa, aislando el aire. +tile.air_lock_frame.name=Marco de la esclusa de aire +tile.air_lock_seal.name=Sellado de la esclusa de aire +tile.aluminum_wire.alu_wire.description=El cable de aluminio se usa para conectar fuentes de energía con máquinas que la consuman. +tile.aluminum_wire.alu_wire.name=Cable de aluminio +tile.aluminum_wire.alu_wire_heavy.description=El cable de aluminio grande se usa para conectar fuentes de energía con máquinas que la consuman. Transfiere más rapido que su predecesor. +tile.aluminum_wire.alu_wire_heavy.name=Cable de aluminio grande +tile.arclamp.description=Las lamparas de arco sirven para iluminar una gran zona a parte de espantar a los mobs. +tile.arclamp.name=Lámpara de arco +tile.basic_block_core.block_aluminum_gc.name=Bloque de aluminio +tile.basic_block_core.block_copper_gc.name=Bloque de cobre +tile.basic_block_core.block_meteoric_iron_gc.name=Hierro meteorítico sólido +tile.basic_block_core.block_tin_gc.name=Bloque de estaño +tile.basic_block_core.deco_block_0.name=Bloque decorativo de estaño +tile.basic_block_core.deco_block_1.name=Bloque decorativo de estaño +tile.basic_block_core.ore_aluminum_gc.name=Mena de aluminio +tile.basic_block_core.ore_copper_gc.name=Mena de cobre +tile.basic_block_core.ore_silicon.name=Mena de silicio +tile.basic_block_core.ore_tin_gc.name=Mena de estaño +tile.basic_block_moon.bricks.name=Ladrillos +tile.basic_block_moon.cheesestone.name=Mena de queso +tile.basic_block_moon.coppermoon.name=Mena de cobre +tile.basic_block_moon.moondirt.name=Tierra +tile.basic_block_moon.moongrass.name=Césped lunar +tile.basic_block_moon.moonstone.name=Piedra +tile.basic_block_moon.tinmoon.name=Mena de estaño +tile.buggy_pad.description=Las placas de reabastecimiento permitirán a un buggy en la placa ser reabastecido por cargadores de combustible conectados si son colocados en un cuadro 3x3. No puede ser usado para lanzar cohetes!. +tile.cargo.loader.name=Plataforma de carga +tile.cargo.unloader.name=Plataforma de descarga +tile.cargo_loader.description=Las plataformas de carga llenarán cohetes y otros vehículos con objetos y bloques. Se deben unir a una plataforma de lanzamiento o carga del buggy. +tile.cargo_unloader.description=Las plataformas de descarga vaciarán cohetes y otros vehículos de objetos y bloques. Se deben unir a una plataforma de lanzamiento o carga del buggy. +tile.cheese.description=Los bloques de queso se crean con queso de la Luna, se pueden colocar y comer. +tile.cheese.name=Bloque de queso +tile.circuit_fabricator.description=El fabricador de circuitos procesa materiales básicos en obleas de silicona, utilizada para fabricar máquinas. +tile.coal_generator.description=El generador a carbón quema carbón para generar energía. Es el método mas simple y menos eficiente de generar energía. +tile.collector.description=El recolector de oxígeno almacenará el oxígeno obtenido de las hojas del area cercana. +tile.collector.name=Recolector de oxígeno +tile.compressor.description=El compresor procesa lingotes y los comprime a sus equivalentes. +tile.compressor_electric.description=El compresor eléctrico procesa lingotes y los comprime a sus equivalentes. Comprime dos a la vez, haciéndolo mas eficiente que su predecesor. +tile.crude_oil.name=Petróleo +tile.crude_oil_moving.name=Petróleo crudo +tile.crude_oil_still.name=Petróleo crudo +tile.dishbase.description=La antena de comunicaciones puede rastrear la posición de estaciones espaciales y recibir comunicaciones de bases espaciales remotas. +tile.dishbase.name=Antena de comunicaciones +tile.distributor.description=El distribuidor de oxígeno emite una burbuja de oxígeno desde el bloque central, usando un almacenamiento interno. Esto permite respirar de forma segura dentro de la burbuja. +tile.distributor.name=Distribuidor de oxígeno +tile.dummyblock.cryogenic_chamber.name=Cámara criogénica +tile.dummyblock.launch_pad.name=Plataforma de lanzamiento del cohete +tile.dummyblock.nasa_workbench.name=Mesa de trabajo de la NASA +tile.dummyblock.solar.name=Panel solar +tile.dummyblock.space_station_base.name=Base de la estación espacial +tile.electric_furnace_tier1.description=El horno eléctrico es una alternativa mas rápida al horno convencional. +tile.electric_furnace_tier2.description=El horno de arco eléctrico es una alternativa mas rápida al horno eléctrico y al convencional. +tile.enclosed.aluminum_wire.name=Cable de aluminio precintable +tile.enclosed.heavy_aluminum_wire.name=Cable de aluminio grande precintable +tile.enclosed.copper_cable.name=Cable de cobre precintable +tile.enclosed.description=Los bloques precintables se usan en sitios donde no puede entrar aire. +tile.enclosed.glass_fibre_cable.name=Cable de fibra óptica precintable +tile.enclosed.gold_cable.name=Cable de oro precintable +tile.enclosed.hv_cable.name=Cable de alto voltaje precintable +tile.enclosed.lv_cable.name=Cable de muy bajo voltaje precintable +tile.enclosed.me_cable.name=Cable ME precintable +tile.enclosed.fluid_pipe.name=Tubo de oxígeno precintable +tile.enclosed.pipe_fluids_cobblestone.name=Tubería fluida de roca precintable +tile.enclosed.pipe_fluids_stone.name=Tubería fluida de piedra precintable +tile.enclosed.pipe_items_cobblestone.name=Tubería de transporte de roca precintable +tile.enclosed.pipe_items_stone.name=Tubería de transporte de piedra precintable +tile.enclosed.pipe_power_gold.name=Tubería kinesis de oro precintable +tile.enclosed.pipe_power_stone.name=Tubería kinesis de piedra precintable +tile.energy_storage_module_tier1.description=El módulo de almacenamiento de energía sirve para almacenar energia para un uso posterior. +tile.energy_storage_module_tier2.description=El clúster de almacenamiento de energía sirve para almacenar energia para un uso posterior. Almacena mas energía que su predecesor. +tile.fallen_meteor.description=Los meteoritos caídos se pueden encontrar en planetas y satélites. Dejaran hierro meteorico cuando se rompan. +tile.fallen_meteor.name=Meteorito caído +tile.fuel.name=Combustible +tile.fuel_block.name=Combustible +tile.fuel_loader.description=Después de ser conectado a una plataforma de lanzamiento, el cargador de combustible podrá rellenar de combustible un cohete o vehículo. +tile.fuel_loader.name=Cargador de combustible +tile.glowstone_torch.description=Las antorchas de redstone sirven para iluminar una zona sin oxígeno donde antorchas normales no funcionan. +tile.glowstone_torch.name=Antorcha de glowstone +tile.landing_pad.buggy_fueler.name=Plataforma de carga del buggy +tile.landing_pad.cargo_pad.name=Plataforma del cohete de carga +tile.landing_pad.description=Se podran poner cohetes en la plataforma de lanzamiento mientras forme un cuadrado de 3x3. Se puede unir con cargadores de combustible, plataformas de carga y controladores de lanzamiento. +tile.landing_pad.landing_pad.name=Plataforma de lanzamiento +tile.landing_pad_full.name=Plataforma de lanzamiento +tile.machine.0.name=Generador a carbón +tile.machine.1.name=Módulo de almacenamiento de energía +tile.machine.2.name=Horno eléctrico +tile.machine.3.name=Compresor +tile.machine.7.name=Horno de arco eléctrico +tile.machine.8.name=Cluster de almacenamiento de energía +tile.machine2.4.name=Compresor eléctrico +tile.machine2.5.name=Fabricador de circuito +tile.machine2.6.name=Módulo de almacenamiento de oxígeno +tile.moon_stairs_brick.name=Escaleras de ladrillos de mazmorra lunar +tile.moon_stairs_stone.name=Escaleras de roca lunar +tile.ore_copper.name=Mena de cobre +tile.ore_tin.name=Mena de estaño +tile.oxygen_compressor.0.name=Compresor de oxígeno +tile.oxygen_compressor.1.name=Descompresor de oxígeno +tile.oxygen_compressor.description=El compresor de oxígeno llena un bote con el oxigeno almacenado internamente. +tile.oxygen_decompressor.description=El descompresor de oxígeno vacía un bote de oxígeno en el almacenamiento interno. +tile.oxygen_detector.description=El detector de oxígeno emite una señal de redstone cuando está rodeado de oxígeno. +tile.oxygen_detector.name=Detector de oxígeno +tile.oxygen_pipe.description=El tubo de oxígeno transfiere oxígeno del almacenamiento interno de una máquina a otra. +tile.oxygen_pipe.name=Tubo de oxígeno +tile.oxygen_storage_module.description=El módulo de almacenamiento de oxígeno sirve para almacenar oxígeno para un uso posterior. +tile.parachest.description=Los cofres-paraca caerán del cielo tras aterrizar en ciertos planetas o satélites. Contienen el cohete, el combustible y el cargamento del lanzamiento anterior. +tile.parachest.name=Cofre-paraca +tile.refinery.description=La refinería consume petróleo y energía, y devuelve combustible para cohetes y vehículos. +tile.refinery.name=Refinería +tile.rocket_workbench.description=La mesa de trabajo de la NASA sirve para crear partes avanzadas y vehículos. Se le pueden añadir nuevos planos. +tile.rocket_workbench.name=Mesa de trabajo de la NASA +tile.sapling2.birch.name=Brote de abedul +tile.sapling2.jungle.name=Brote de árbol de jungla +tile.sapling2.oak.name=Brote de roble +tile.sapling2.spruce.name=Brote de abeto +tile.sealer.description=El sellador de oxígeno comprobará que haya un espacio cerrado. Si lo encuentra, el espacio se llenará con aire respirable. +tile.sealer.name=Sellador de oxígeno +tile.slab_gc_half.moon_bricks_slab.name=Losa de ladrillos de mazmorra lunar +tile.slab_gc_half.moon_slab.name=Losa de roca lunar +tile.slab_gc_half.tin_slab_1.name=Losa decorativa de estaño +tile.slab_gc_half.tin_slab_2.name=Losa decorativa de estaño +tile.solar.advanced_solar.name=Panel solar avanzado +tile.solar.basic_solar.name=Panel solar básico +tile.solar_adv.description=Los paneles solares avanzados recolectan energía del sol, almacenándola para ser usada. Ajustan el angulo del panel para recolectar energía de forma óptima. +tile.solar_basic.description=Los paneles solares recolectan energía del Sol, almacenándola para ser usada. Recolectan más energía a mediodía. +tile.space_station_base.name=Bloque de entrada de estación espacial +tile.spin_thruster.description=Los propulsores de giro sirven para girar las estaciones espaciales. +tile.spin_thruster.name=Propulsor de giro +tile.telemetry.description=Esto reune información útil de cohetes enlazados, jugadores y mobs. El mejor emplazamiento es cerca de un monitor de datos. Usa un módulo de frecuencia para establecer enlaces de datos. +tile.telemetry.name=Unidad de telemetría +tile.tin_stairs_1.name=Escaleras decorativas de estaño +tile.tin_stairs_2.name=Escaleras decorativas de estaño +tile.treasure_chest.description=Los cofres del tesoro nivel 1 se generarán en las mazmorras de la Luna. Se desbloquean despues de matar al jefe final. +tile.treasure_chest.name=Cofre del tesoro +tile.unlit_torch.name=Antorcha +tile.unlit_torch_stone.name=Antorcha de piedra +tile.unlit_torch_lit.name=Antorcha +tile.unlit_torch_stone_lit.name=Antorcha de piedra +tile.view_screen.description=Los monitores de datos le dan el toque final a tu base espacial. Click derecho cambia la información mostrada. +tile.view_screen.name=Monitor de datos +tile.wall_gc.moon.name=Muro de roca lunar +tile.wall_gc.moon_bricks.name=Muro de ladrillos de mazmorra lunar +tile.wall_gc.tin.name=Muro decorativo de estaño diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fi_fi.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fi_fi.lang new file mode 100644 index 00000000..48439d3a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fi_fi.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s was sent into the atmosphere%s ##NEEDS TRANSLATE## +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor ##NEEDS TRANSLATE## +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel ##NEEDS TRANSLATE## +container.solarbasic.name=Basic Solar Panel ##NEEDS TRANSLATE## +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.oxygen_suffocation=%1$slta loppui happi! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. ##NEEDS TRANSLATE## +death.attack.thermal=%1$s forgot thermal protection ##NEEDS TRANSLATE## +dimension.moon.name=Moon ##NEEDS TRANSLATE## +dimension.overworld.name=Overworld +dimension.sun.name=Sun +entity.alien_villager.name=Alien Villager +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evolved Creeper +entity.evolved_skeleton.name=Evolved Skeleton +entity.evolved_skeleton_boss.name=Evolved Skeleton Boss +entity.evolved_spider.name=Evolved Spider +entity.evolved_zombie.name=Evolved Zombie +entity.flag.name=Flag +entity.gcflag.name=Flag ##NEEDS TRANSLATE## +entity.gravity_arrow.name=Arrow +entity.lander.name=Space Lander +entity.meteor.name=Pudonnut meteoriitti +entity.meteor_chunk.name=Meteor Chunk ##NEEDS TRANSLATE## +entity.oxygen_bubble.name=Oxygen Bubble +entity.para_chest.name=Parachest +entity.rocket_t1.name=Tason 1 raketti +galaxy.milky_way=Milky Way ##NEEDS TRANSLATE## +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here ##NEEDS TRANSLATE## +gui.battery_slot.desc.1=or use a connected power source ##NEEDS TRANSLATE## +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Accelerate +gui.buggy.decel.name=Decelerate +gui.buggy.inv.name=Inventory / Fuel +gui.buggy.storage_space=Storage Space ##NEEDS TRANSLATE## +gui.buggy.turn.name=Turn left-right +gui.button.back.name=Back +gui.button.disable.name=Disable ##NEEDS TRANSLATE## +gui.button.disableseal.name=Disable Seal +gui.button.enable.name=Enable ##NEEDS TRANSLATE## +gui.button.enableseal.name=Enable Seal +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name=Load Fuel +gui.button.loaditems.name=Load Items +gui.button.next.name=Next +gui.button.refine.name=Refine +gui.button.stoploading.name=Stop Loading +gui.button.stoprefine.name=Stop Refining ##NEEDS TRANSLATE## +gui.button.stopunloading.name=Stop Unloading +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name=Unload Items +gui.button.unlockschematic.name=Unlock Schematic +gui.checkbox.horizontal.name=Horizontal Mode ##NEEDS TRANSLATE## +gui.checkbox.invert.name=Invert Selection ##NEEDS TRANSLATE## +gui.checkbox.player_name.name=Player name is ##NEEDS TRANSLATE## +gui.checkbox.player_within.name=Player is within ##NEEDS TRANSLATE## +gui.checkbox.redstone_signal.name=Opens on Redstone Signal ##NEEDS TRANSLATE## +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! ##NEEDS TRANSLATE## +gui.choose_planet.desc.moon=Asuttava#Ei happea#Painovoima: 18% +gui.choose_planet.desc.overworld=Täynnä elämää#Asuttava#Painovoima: 100% +gui.chooseplanet.alreadycreated1.name=Space Station Already +gui.chooseplanet.alreadycreated2.name=Created! +gui.chooseplanet.cannotcreate1.name=Cannot create Space +gui.chooseplanet.cannotcreate2.name=Station here! +gui.creative_only.desc=Creative Only ##NEEDS TRANSLATE## +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Current Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.distance_from.name=Distance from Target ##NEEDS TRANSLATE## +gui.docking_rocket.target_vel.name=Target Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.0=Press %s to decelerate ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.1=Press %s to accelerate ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.0=1 Meter ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.1=2 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.2=5 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.3=10 Meters ##NEEDS TRANSLATE## +gui.electric_compressor.desc.0=Progress ##NEEDS TRANSLATE## +gui.energy_storage.desc.0=Energy Storage ##NEEDS TRANSLATE## +gui.energy_storage.desc.1=Energy ##NEEDS TRANSLATE## +gui.flag.already_placed=Flag already placed here! ##NEEDS TRANSLATE## +gui.frequency_module.desc.0=Can receive weak sound ##NEEDS TRANSLATE## +gui.frequency_module.desc.1=waves and distant signals ##NEEDS TRANSLATE## +gui.frequencymodule.warning0=I'll probably need a ##NEEDS TRANSLATE## +gui.frequencymodule.warning1=if I want to hear properly here. ##NEEDS TRANSLATE## +gui.fuel_output.desc.0=Place empty liquid canisters into ##NEEDS TRANSLATE## +gui.fuel_output.desc.1=this slot to fill them from the ##NEEDS TRANSLATE## +gui.fuel_output.desc.2=fuel tank ##NEEDS TRANSLATE## +gui.fuel_tank.desc.0=Fuel tank. Requires ##NEEDS TRANSLATE## +gui.fuel_tank.desc.1=fuel loader to fill ##NEEDS TRANSLATE## +gui.fuel_tank.desc.2=Fuel tank, can be filled ##NEEDS TRANSLATE## +gui.fuel_tank.desc.3=with fuel canisters ##NEEDS TRANSLATE## +gui.fuel_tank.desc.4=Fuel tank ##NEEDS TRANSLATE## +gui.infinite_item.desc=Infinite ##NEEDS TRANSLATE## +gui.lander.velocity=Entry Velocity +gui.lander.velocityu=m/s +gui.lander.warning2=Paina " +gui.lander.warning3=" hidastaaksesi! +gui.max_output.desc=Max Output ##NEEDS TRANSLATE## +gui.message.addnewsch.name=Add New Schematic +gui.message.apply.name=Apply ##NEEDS TRANSLATE## +gui.message.assign_name.name=Assign Name ##NEEDS TRANSLATE## +gui.message.atmosphere.name=Atmosphere ##NEEDS TRANSLATE## +gui.message.back.name=Back ##NEEDS TRANSLATE## +gui.message.breed.name=Breed ##NEEDS TRANSLATE## +gui.message.bubble_visible.name=Bubble Visible ##NEEDS TRANSLATE## +gui.message.can_create_space_station.name=A Space Station can be created here! ##NEEDS TRANSLATE## +gui.message.cancel.name=Cancel ##NEEDS TRANSLATE## +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. ##NEEDS TRANSLATE## +gui.message.catalog.name=Catalog ##NEEDS TRANSLATE## +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) ##NEEDS TRANSLATE## +gui.message.click_again.1.name=Click again to zoom (view moons) ##NEEDS TRANSLATE## +gui.message.click_again.2.name=Click again to zoom (view satellites) ##NEEDS TRANSLATE## +gui.message.click_again.3.name=Click again to zoom ##NEEDS TRANSLATE## +gui.message.clicklink=Click for Galacticraft Wiki ##NEEDS TRANSLATE## +gui.message.create_ss.name=Create ##NEEDS TRANSLATE## +gui.message.daynightcycle.name=Day-night Cycle ##NEEDS TRANSLATE## +gui.message.energy=Energy ##NEEDS TRANSLATE## +gui.message.environment.name=Environmental Boost ##NEEDS TRANSLATE## +gui.message.exit.name=Exit ##NEEDS TRANSLATE## +gui.message.fuel.name=Fuel +gui.message.full.name=full +gui.message.generating.name=Generating ##NEEDS TRANSLATE## +gui.message.grow.name=Grow ##NEEDS TRANSLATE## +gui.message.heal.name=Heal ##NEEDS TRANSLATE## +gui.message.help1=For Galacticraft help ##NEEDS TRANSLATE## +gui.message.help1a=To see this message again at any time, type ##NEEDS TRANSLATE## +gui.message.help2=For Space Program guidance ##NEEDS TRANSLATE## +gui.message.help3=For help with oil ##NEEDS TRANSLATE## +gui.message.in.name=In +gui.message.launch.name=Launch ##NEEDS TRANSLATE## +gui.message.max_energy=Max Energy ##NEEDS TRANSLATE## +gui.message.meansurfacetemp.name=Mean Surface Temp ##NEEDS TRANSLATE## +gui.message.moon.atmosphere.0.name=None ##NEEDS TRANSLATE## +gui.message.moon.daynightcycle.0.name=29.5 Earth Days ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.1.name=Traces of Cheese ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.0.name=0.1654g ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.1.name=(18% of Earth) ##NEEDS TRANSLATE## +gui.message.of.name=of ##NEEDS TRANSLATE## +gui.message.oil.name=Oil ##NEEDS TRANSLATE## +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen ##NEEDS TRANSLATE## +gui.message.overworld.atmosphere.1.name=Supports life ##NEEDS TRANSLATE## +gui.message.overworld.daynightcycle.0.name=1 Earth Day ##NEEDS TRANSLATE## +gui.message.overworld.meansurfacetemp.0.name=14C ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.1.name=gravel ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.0.name=1.0g ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.1.name=(100% of Earth) ##NEEDS TRANSLATE## +gui.message.prelaunch=Pre-launch checklist ##NEEDS TRANSLATE## +gui.message.rename.name=Rename ##NEEDS TRANSLATE## +gui.message.select_ss.name=Select a Space Station ##NEEDS TRANSLATE## +gui.message.ss_owner.name=Owner: ##NEEDS TRANSLATE## +gui.message.status.name=Status +gui.message.strengthen.name=Strengthen ##NEEDS TRANSLATE## +gui.message.surfacecomposition.name=Surface Composition ##NEEDS TRANSLATE## +gui.message.surfacegravity.name=Surface Gravity ##NEEDS TRANSLATE## +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=Tier %d ##NEEDS TRANSLATE## +gui.message.unnamed.name=Unnamed ##NEEDS TRANSLATE## +gui.missing_core.name.0=MicdoodleCore not found in mods folder ##NEEDS TRANSLATE## +gui.missing_core.name.1=Galacticraft failed to load ##NEEDS TRANSLATE## +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore ##NEEDS TRANSLATE## +gui.missing_core.name.3=Click here to open download page ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.0=New schematic slot. You ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.1=can find new schematics ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.2=by completing dungeons ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.3=on planets and moons ##NEEDS TRANSLATE## +gui.oil_tank.desc.0=Oil tank, can be filled ##NEEDS TRANSLATE## +gui.oil_tank.desc.1=with oil canisters ##NEEDS TRANSLATE## +gui.oxygen.warning=Happijärjestelmäsi on kelpaamaton! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister or tank ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.0=Oxygen Storage ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.1=Oxygen ##NEEDS TRANSLATE## +gui.oxygen_use.desc=Oxygen Use ##NEEDS TRANSLATE## +gui.per_second=/s ##NEEDS TRANSLATE## +gui.player.bpm=bpm ##NEEDS TRANSLATE## +gui.player.food=Food ##NEEDS TRANSLATE## +gui.player.health=Health ##NEEDS TRANSLATE## +gui.player.ouch=ouch!!!! ##NEEDS TRANSLATE## +gui.receiver.cannot_attach=Cannot attach receiver here! ##NEEDS TRANSLATE## +gui.requires_controller.desc=Requires Launch Controller ##NEEDS TRANSLATE## +gui.rocket.countdown=Countdown ##NEEDS TRANSLATE## +gui.rocket.height=Height ##NEEDS TRANSLATE## +gui.rocket.inv.name=Inventory / Fuel ##NEEDS TRANSLATE## +gui.rocket.launch.name=Launch ##NEEDS TRANSLATE## +gui.rocket.launched=Launched ##NEEDS TRANSLATE## +gui.rocket.on_launchpad=On launchpad ##NEEDS TRANSLATE## +gui.rocket.speed=Speed ##NEEDS TRANSLATE## +gui.rocket.turn.name=Turn left-right ##NEEDS TRANSLATE## +gui.rocket.updown.name=Turn up-down ##NEEDS TRANSLATE## +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! ##NEEDS TRANSLATE## +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! ##NEEDS TRANSLATE## +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! ##NEEDS TRANSLATE## +gui.rocket_type.0=Storage Space: 18 ##NEEDS TRANSLATE## +gui.rocket_type.1=Storage Space: 36 ##NEEDS TRANSLATE## +gui.rocket_type.2=Storage Space: 56 ##NEEDS TRANSLATE## +gui.rocket_type.3=Pre-fueled ##NEEDS TRANSLATE## +gui.seconds=s +gui.sensor.advanced=Advanced Mode +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Show Bubble ##NEEDS TRANSLATE## +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. ##NEEDS TRANSLATE## +gui.space_race.chat.add_success=%s has joined the Space Race! ##NEEDS TRANSLATE## +gui.space_race.chat.already_part=You are already a part of this space race! ##NEEDS TRANSLATE## +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. ##NEEDS TRANSLATE## +gui.space_race.chat.not_found=Could not find player with name: %s ##NEEDS TRANSLATE## +gui.space_race.chat.remove_success=%s has been removed from the Space Race. ##NEEDS TRANSLATE## +gui.space_race.chat.to_join=To join %s use command %s ##NEEDS TRANSLATE## +gui.space_race.coming_soon=Coming Soon ##NEEDS TRANSLATE## +gui.space_race.create.add_players.name=Add Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.back.name=Back ##NEEDS TRANSLATE## +gui.space_race.create.brush_radius.name=Brush Radius ##NEEDS TRANSLATE## +gui.space_race.create.brush_size.name=Brush Size ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.0=Change ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.1=Team ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.2=Color ##NEEDS TRANSLATE## +gui.space_race.create.close.name=Close ##NEEDS TRANSLATE## +gui.space_race.create.customize.name=Customize Flag ##NEEDS TRANSLATE## +gui.space_race.create.eraser_radius.name=Eraser Radius ##NEEDS TRANSLATE## +gui.space_race.create.eraser_size.name=Eraser Size ##NEEDS TRANSLATE## +gui.space_race.create.global_stats.name=View Global Stats ##NEEDS TRANSLATE## +gui.space_race.create.invite_player.name=Invite Player ##NEEDS TRANSLATE## +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) ##NEEDS TRANSLATE## +gui.space_race.create.rem_players.name=Remove Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.remove.name=Remove ##NEEDS TRANSLATE## +gui.space_race.create.remove_player.name=Remove Player ##NEEDS TRANSLATE## +gui.space_race.create.rename.name=Rename Team ##NEEDS TRANSLATE## +gui.space_race.create.send_invite.name=Send Invite ##NEEDS TRANSLATE## +gui.space_race.create.server_stats.name=View Server Stats ##NEEDS TRANSLATE## +gui.space_race.create.title.name=Space Race Manager ##NEEDS TRANSLATE## +gui.space_race.create.title.name.0=Space Race ##NEEDS TRANSLATE## +gui.space_race.create.title.name.1=Manager ##NEEDS TRANSLATE## +gui.space_race.join.member_count.name=%d members ##NEEDS TRANSLATE## +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Owner ##NEEDS TRANSLATE## +gui.space_race.join.title.name=Join Space Race ##NEEDS TRANSLATE## +gui.space_race.unnamed=Unnamed Team ##NEEDS TRANSLATE## +gui.spacestation.added=You've been added to %s's Space Station accepted players! ##NEEDS TRANSLATE## +gui.spacestation.addsuccess=Successfully added %s to Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= ##NEEDS TRANSLATE## +gui.spacestation.removesuccess=Successfully removed %s from Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.to_allow_entry=to allow another player to enter this space station! ##NEEDS TRANSLATE## +gui.spacestation.type_command=Type ##NEEDS TRANSLATE## +gui.status.active.name=Active +gui.status.air_lock_closed.name=Air Lock Closed ##NEEDS TRANSLATE## +gui.status.air_lock_open.name=Air Lock Open ##NEEDS TRANSLATE## +gui.status.blockedfully.name=Sun is Not Visible ##NEEDS TRANSLATE## +gui.status.blockedpartial.name=Sun Partially Visible ##NEEDS TRANSLATE## +gui.status.check_pending.name=Check Pending ##NEEDS TRANSLATE## +gui.status.check_starting.name=Check Starting ##NEEDS TRANSLATE## +gui.status.checking_seal.name=Checking Seal ##NEEDS TRANSLATE## +gui.status.collecting.name=Collecting ##NEEDS TRANSLATE## +gui.status.collectingenergy.name=Collecting Energy ##NEEDS TRANSLATE## +gui.status.compressing.name=Compressing ##NEEDS TRANSLATE## +gui.status.disabled.name=Disabled +gui.status.fulltank.name=Oxygen Tank Full +gui.status.generating.name=Generating ##NEEDS TRANSLATE## +gui.status.hull_heat.name=Hull Heat ##NEEDS TRANSLATE## +gui.status.idle.name=Idle +gui.status.missingleaves.name=Not Enough Leaf Blocks +gui.status.missingoxygen.name=Not Enough Oxygen +gui.status.missingpower.name=Not Enough Power +gui.status.missingtank.name=No Valid Oxygen Tank +gui.status.nofuel.name=No Fuel to Load! +gui.status.noinvtarget.name=No Inventory on Target! +gui.status.noitems.name=No Items to Load! +gui.status.nooil.name=No Oil +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Not Generating ##NEEDS TRANSLATE## +gui.status.notargetload.name=No Target to Load Into! +gui.status.notargetunload.name=No Target to Unload! +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name=Raining ##NEEDS TRANSLATE## +gui.status.ready.name=Ready +gui.status.refining.name=Refining +gui.status.running.name=Running ##NEEDS TRANSLATE## +gui.status.sealed.name=Sealed +gui.status.sealerblocked.name=Output Vent Blocked! ##NEEDS TRANSLATE## +gui.status.sun_visible.name=Sun Visible ##NEEDS TRANSLATE## +gui.status.tank_empty.name=Oxygen Tank Empty ##NEEDS TRANSLATE## +gui.status.targetempty.name=Target Vehicle is Empty! +gui.status.targetfull.name=Target Vehicle is Full! +gui.status.unknown.name=Unknown +gui.status.unsealed.name=Unsealed +gui.tank.oxygen_remaining=Oxygen Remaining ##NEEDS TRANSLATE## +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) ##NEEDS TRANSLATE## +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! ##NEEDS TRANSLATE## +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! ##NEEDS TRANSLATE## +gui.telemetry_succeed.message=Telemetry link created. ##NEEDS TRANSLATE## +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s's Air Lock Controller ##NEEDS TRANSLATE## +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. ##NEEDS TRANSLATE## +gui.warning=VAROITUS! +gui.warning.invalid_thermal=Invalid Thermal Protection! ##NEEDS TRANSLATE## +gui.warning.noroom=Not enough room! ##NEEDS TRANSLATE## +item.air_fan.name=Happipuhallin +item.air_vent.name=Ilma-aukko +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Can of Food ##NEEDS TRANSLATE## +item.basic_item.compressed_aluminum.name=Compressed Aluminum ##NEEDS TRANSLATE## +item.basic_item.compressed_bronze.name=Compressed Bronze ##NEEDS TRANSLATE## +item.basic_item.compressed_copper.name=Compressed Copper ##NEEDS TRANSLATE## +item.basic_item.compressed_iron.name=Compressed Iron ##NEEDS TRANSLATE## +item.basic_item.compressed_steel.name=Compressed Steel ##NEEDS TRANSLATE## +item.basic_item.compressed_tin.name=Compressed Tin ##NEEDS TRANSLATE## +item.basic_item.dehydrated_apple.name=Dehydrated Apples ##NEEDS TRANSLATE## +item.basic_item.dehydrated_carrot.name=Dehydrated Carrots ##NEEDS TRANSLATE## +item.basic_item.dehydrated_melon.name=Dehydrated Melons ##NEEDS TRANSLATE## +item.basic_item.dehydrated_potato.name=Dehydrated Potatoes ##NEEDS TRANSLATE## +item.basic_item.frequency_module.name=Frequency Module ##NEEDS TRANSLATE## +item.basic_item.ingot_aluminum.name=Aluminum Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_bronze.name=Bronze Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_copper.name=Copper Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_steel.name=Steel Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_tin.name=Tin Ingot ##NEEDS TRANSLATE## +item.basic_item.raw_silicon.name=Raw Silicon ##NEEDS TRANSLATE## +item.basic_item.solar_module_0.name=Single Solar Module ##NEEDS TRANSLATE## +item.basic_item.solar_module_1.name=Full Solar Panel ##NEEDS TRANSLATE## +item.basic_item.wafer_advanced.name=Advanced Wafer ##NEEDS TRANSLATE## +item.basic_item.wafer_basic.name=Basic Wafer ##NEEDS TRANSLATE## +item.basic_item.wafer_solar.name=Blue Solar Wafer ##NEEDS TRANSLATE## +item.battery.name=Battery ##NEEDS TRANSLATE## +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Vaunu +item.buggymat.seat.name=Vaunun istuin +item.buggymat.storage.name=Vaunun säilytyslaatikko +item.buggymat.wheel.name=Vaunun pyörä +item.canister.copper.name=Kuparikanisteri +item.canister.tin.name=Tinakanisteri +item.canvas.name=Kangas +item.cheese_block.name=Juustokuutio +item.cheese_curd.name=Juustomassa +item.compressed_meteoric_iron.name=Compressed Meteoric Iron ##NEEDS TRANSLATE## +item.empty_liquid_canister.name=Tyhjä nestekanisteri +item.engine.tier1booster.name=Tier 1 Booster ##NEEDS TRANSLATE## +item.engine.tier1engine.name=Tier 1 Rocket Engine ##NEEDS TRANSLATE## +item.flag.name=Flag ##NEEDS TRANSLATE## +item.fuel.name=Rakettipolttoaine +item.fuel_canister.name=Täytetty polttoainekanisteri +item.fuel_canister_partial.name=Osittain täytetty polttoainekanisteri +item.heavy_plating.name=Järeä pinnoitus +item.hot_description.name=Hot ##NEEDS TRANSLATE## +item.infinite_battery.name=Infinite Battery ##NEEDS TRANSLATE## +item.infinite_oxygen.name=Infinite Oxygen Supply ##NEEDS TRANSLATE## +item.key.t1.name=Tason 1 tyrmän avain +item.meteor_chunk.name=Throwable Meteor Chunk ##NEEDS TRANSLATE## +item.meteor_chunk_hot.name=Throwable Meteor Chunk ##NEEDS TRANSLATE## +item.meteoric_iron_ingot.name=Meteorimainen rautaharkko +item.meteoric_iron_raw.name=Raaka meteorimainen rauta +item.nose_cone.name=Kärkikartio +item.oil_canister.name=Täytetty öljykanisteri +item.oil_canister_partial.name=Osittain täytetty öljykanisteri +item.oil_extractor.name=Kannettava öljypuristin +item.oxygen_concentrator.name=Happikonsentraattori +item.oxygen_gear.name=Happivarustus +item.oxygen_mask.name=Happinaamari +item.oxygen_tank_heavy_empty.name=Tyhjä raskas happitankki +item.oxygen_tank_heavy_full.name=Raskas happitankki +item.oxygen_tank_light_empty.name=Tyhjä kevyt happitankki +item.oxygen_tank_light_full.name=Kevyt happitankki +item.oxygen_tank_med_empty.name=Tyhjä keskikokoinen happitankki +item.oxygen_tank_med_full.name=Keskikokoinen happitankki +item.parachute_black.name=Musta laskuvarjo +item.parachute_blue.name=Vaaleansininen laskuvarjo +item.parachute_brown.name=Ruskea laskuvarjo +item.parachute_darkblue.name=Sininen laskuvarjo +item.parachute_darkgray.name=Harmaa laskuvarjo +item.parachute_darkgreen.name=Vihreä laskuvarjo +item.parachute_gray.name=Vaaleanharmaa laskuvarjo +item.parachute_lime.name=Limenvihreä laskuvarjo +item.parachute_magenta.name=Magenta laskuvarjo +item.parachute_orange.name=Oranssi laskuvarjo +item.parachute_pink.name=Vaaleanpunainen laskuvarjo +item.parachute_plain.name=Laskuvarjo +item.parachute_purple.name=Violetti laskuvarjo +item.parachute_red.name=Punainen laskuvarjo +item.parachute_teal.name=Syaani laskuvarjo +item.parachute_yellow.name=Keltainen laskuvarjo +item.rocket_fins.name=Rakettievät +item.rocket_t1.name=Tason 1 raketti +item.schematic.name=NASA -työpöydän kaavio +item.sensor_glasses.name=Sensorilasit +item.sensor_lens.name=Sensorilinssi +item.standard_wrench.name=Standard Wrench ##NEEDS TRANSLATE## +item.steel_axe.name=Järeä kirves +item.steel_boots.name=Järeät kengät +item.steel_chestplate.name=Järeä rintasuojus +item.steel_helmet.name=Järeä kypärä +item.steel_hoe.name=Järeä kuokka +item.steel_leggings.name=Järeät housut +item.steel_pickaxe.name=Järeä hakku +item.steel_pole.name=Steel Pole ##NEEDS TRANSLATE## +item.steel_shovel.name=Järeä lapio +item.steel_sword.name=Järeä miekka +item.tier1.desc=Tier 1 ##NEEDS TRANSLATE## +item_desc.powerdraw.name=Power required: %s /s ##NEEDS TRANSLATE## +item_desc.shift.name=Press %s for more info ##NEEDS TRANSLATE## +item_group.galacticraft_blocks=Galacticraft Blocks ##NEEDS TRANSLATE## +item_group.galacticraft_items=Galacticraft Items ##NEEDS TRANSLATE## +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Toggle Sensor Goggles Mode +keybind.spaceshipinv.name=Open Spaceship Inventory +keybind.vehiclebackward.name=Vehicle Backward Key +keybind.vehicledown.name=Vehicle Down Key +keybind.vehicleforward.name=Vehicle Forward Key +keybind.vehicleleft.name=Vehicle Left Key +keybind.vehicleright.name=Vehicle Right Key +keybind.vehicleup.name=Vehicle Up Key +moon.moon=Moon ##NEEDS TRANSLATE## +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter ##NEEDS TRANSLATE## +planet.mercury=Mercury ##NEEDS TRANSLATE## +planet.neptune=Neptune ##NEEDS TRANSLATE## +planet.overworld=Overworld ##NEEDS TRANSLATE## +planet.saturn=Saturn ##NEEDS TRANSLATE## +planet.uranus=Uranus ##NEEDS TRANSLATE## +planet.venus=Venus ##NEEDS TRANSLATE## +satellite.spacestation.overworld=Overworld Space Station ##NEEDS TRANSLATE## +schematic.moonbuggy.name=Kuuvaunu +schematic.rocket_t1.name=Tier 1 Rocket ##NEEDS TRANSLATE## +schematic.rocket_t2.name=Tason 2 raketti +solarsystem.sol=Sol ##NEEDS TRANSLATE## +star.sol=Sol ##NEEDS TRANSLATE## +tile.air_lock_controller.name=Air Lock Controller ##NEEDS TRANSLATE## +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Ilmalukon kehys +tile.air_lock_seal.name=Ilmalukon sinetti +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name=Aluminum Wire ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Transfers at a faster rate than it's predecessor. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name=Heavy Aluminum Wire ##NEEDS TRANSLATE## +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Arc Lamp ##NEEDS TRANSLATE## +tile.basic_block_core.block_aluminum_gc.name=Aluminum Block ##NEEDS TRANSLATE## +tile.basic_block_core.block_copper_gc.name=Copper Block ##NEEDS TRANSLATE## +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron ##NEEDS TRANSLATE## +tile.basic_block_core.block_tin_gc.name=Tin Block ##NEEDS TRANSLATE## +tile.basic_block_core.deco_block_0.name=Tin Decoration Block ##NEEDS TRANSLATE## +tile.basic_block_core.deco_block_1.name=Tin Decoration Block ##NEEDS TRANSLATE## +tile.basic_block_core.ore_aluminum_gc.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_copper_gc.name=Copper Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_silicon.name=Silicon Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_tin_gc.name=Tin Ore ##NEEDS TRANSLATE## +tile.basic_block_moon.bricks.name=Tiiliä +tile.basic_block_moon.cheesestone.name=Juustomalmi +tile.basic_block_moon.coppermoon.name=Kuparimalmi +tile.basic_block_moon.moondirt.name=Multa +tile.basic_block_moon.moongrass.name=Kuuturve +tile.basic_block_moon.moonstone.name=Kivi +tile.basic_block_moon.tinmoon.name=Tinamalmi +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Cargo Loader +tile.cargo.unloader.name=Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Juustokuutio +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name=Hapenkeräin +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name=Raakaöljy +tile.crude_oil_still.name=Raakaöljy +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Communications Dish ##NEEDS TRANSLATE## +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name=Happikuplanjakaja +tile.dummyblock.cryogenic_chamber.name=Cryogenic Chamber ##NEEDS TRANSLATE## +tile.dummyblock.launch_pad.name=Rocket Launch Pad ##NEEDS TRANSLATE## +tile.dummyblock.nasa_workbench.name=NASA Workbench ##NEEDS TRANSLATE## +tile.dummyblock.solar.name=Solar Panel ##NEEDS TRANSLATE## +tile.dummyblock.space_station_base.name=Space Station Base ##NEEDS TRANSLATE## +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Sealable Aluminum Wire ##NEEDS TRANSLATE## +tile.enclosed.heavy_aluminum_wire.name=Sealable Heavy Aluminum Wire ##NEEDS TRANSLATE## +tile.enclosed.copper_cable.name=Sealable Copper Cable ##NEEDS TRANSLATE## +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fiber Cable ##NEEDS TRANSLATE## +tile.enclosed.gold_cable.name=Sealable Gold Cable ##NEEDS TRANSLATE## +tile.enclosed.hv_cable.name=Sealable HV Cable ##NEEDS TRANSLATE## +tile.enclosed.lv_cable.name=Sealable Ultra-Low-Current Cable ##NEEDS TRANSLATE## +tile.enclosed.me_cable.name=Sealable ME Cable ##NEEDS TRANSLATE## +tile.enclosed.fluid_pipe.name=Sinetöitävä happiputki +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Waterproof Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Waterproof Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_power_gold.name=Sealable Golden Conductive Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_power_stone.name=Sealable Stone Conductive Pipe ##NEEDS TRANSLATE## +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Pudonnut meteoriitti +tile.fuel.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name=Polttoaineen lastaaja +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Glowstone Torch ##NEEDS TRANSLATE## +tile.landing_pad.buggy_fueler.name=Vaunun täyttöalusta +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad +tile.landing_pad.description=Landing Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name=Laukaisualusta +tile.landing_pad_full.name=Rocket Launch Pad ##NEEDS TRANSLATE## +tile.machine.0.name=Coal Generator ##NEEDS TRANSLATE## +tile.machine.1.name=Energy Storage Module ##NEEDS TRANSLATE## +tile.machine.2.name=Electric Furnace ##NEEDS TRANSLATE## +tile.machine.3.name=Compressor ##NEEDS TRANSLATE## +tile.machine.7.name=Electric Arc Furnace ##NEEDS TRANSLATE## +tile.machine.8.name=Energy Storage Cluster ##NEEDS TRANSLATE## +tile.machine2.4.name=Electric Compressor ##NEEDS TRANSLATE## +tile.machine2.5.name=Circuit Fabricator ##NEEDS TRANSLATE## +tile.machine2.6.name=Oxygen Storage Module ##NEEDS TRANSLATE## +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.moon_stairs_stone.name=Moon Rock Stairs ##NEEDS TRANSLATE## +tile.ore_copper.name=Copper Ore ##NEEDS TRANSLATE## +tile.ore_tin.name=Tin Ore ##NEEDS TRANSLATE## +tile.oxygen_compressor.0.name=Oxygen Compressor ##NEEDS TRANSLATE## +tile.oxygen_compressor.1.name=Oxygen Decompressor ##NEEDS TRANSLATE## +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name=Hapen havaitsija +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name=Happiputki +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Parachest ##NEEDS TRANSLATE## +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name=Jalostamo +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=NASA -työpöytä +tile.sapling2.birch.name=Koivuntaimi +tile.sapling2.jungle.name=Kaakaopuun taimi +tile.sapling2.oak.name=Tammentaimi +tile.sapling2.spruce.name=Kuusentaimi +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name=Hapen sinetöijä +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.moon_slab.name=Moon Rock Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.solar.advanced_solar.name=Advanced Solar Panel ##NEEDS TRANSLATE## +tile.solar.basic_solar.name=Basic Solar Panel ##NEEDS TRANSLATE## +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Space Station Arrival Block ##NEEDS TRANSLATE## +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Spin Thruster ##NEEDS TRANSLATE## +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Telemetry Unit ##NEEDS TRANSLATE## +tile.tin_stairs_1.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.tin_stairs_2.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Aarrearkku +tile.unlit_torch.name=Soihtu +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Soihtu +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Display Screen ##NEEDS TRANSLATE## +tile.wall_gc.moon.name=Moon Rock Wall ##NEEDS TRANSLATE## +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall ##NEEDS TRANSLATE## +tile.wall_gc.tin.name=Tin Decoration Wall ##NEEDS TRANSLATE## diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_ca.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_ca.lang new file mode 100644 index 00000000..ee520e18 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_ca.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s was sent into the atmosphere%s ##NEEDS TRANSLATE## +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor ##NEEDS TRANSLATE## +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel ##NEEDS TRANSLATE## +container.solarbasic.name=Basic Solar Panel ##NEEDS TRANSLATE## +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.oxygen_suffocation=%1$s a manqué d'oxygène! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. ##NEEDS TRANSLATE## +death.attack.thermal=%1$s forgot thermal protection ##NEEDS TRANSLATE## +dimension.moon.name=Moon ##NEEDS TRANSLATE## +dimension.overworld.name=Overworld +dimension.sun.name=Sun +entity.alien_villager.name=Alien Villager +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evolved Creeper +entity.evolved_skeleton.name=Evolved Skeleton +entity.evolved_skeleton_boss.name=Evolved Skeleton Boss +entity.evolved_spider.name=Evolved Spider +entity.evolved_zombie.name=Evolved Zombie +entity.flag.name=Flag +entity.gcflag.name=Flag ##NEEDS TRANSLATE## +entity.gravity_arrow.name=Arrow +entity.lander.name=Space Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Chunk ##NEEDS TRANSLATE## +entity.oxygen_bubble.name=Oxygen Bubble +entity.para_chest.name=Parachest +entity.rocket_t1.name=Tier 1 Rocket +galaxy.milky_way=Milky Way ##NEEDS TRANSLATE## +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here ##NEEDS TRANSLATE## +gui.battery_slot.desc.1=or use a connected power source ##NEEDS TRANSLATE## +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Accelerate +gui.buggy.decel.name=Decelerate +gui.buggy.inv.name=Inventory / Fuel +gui.buggy.storage_space=Storage Space ##NEEDS TRANSLATE## +gui.buggy.turn.name=Turn left-right +gui.button.back.name=Back +gui.button.disable.name=Disable ##NEEDS TRANSLATE## +gui.button.disableseal.name=Disable Seal +gui.button.enable.name=Enable ##NEEDS TRANSLATE## +gui.button.enableseal.name=Enable Seal +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name=Load Fuel +gui.button.loaditems.name=Load Items +gui.button.next.name=Next +gui.button.refine.name=Refine +gui.button.stoploading.name=Stop Loading +gui.button.stoprefine.name=Stop Refining ##NEEDS TRANSLATE## +gui.button.stopunloading.name=Stop Unloading +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name=Unload Items +gui.button.unlockschematic.name=Unlock Schematic +gui.checkbox.horizontal.name=Horizontal Mode ##NEEDS TRANSLATE## +gui.checkbox.invert.name=Invert Selection ##NEEDS TRANSLATE## +gui.checkbox.player_name.name=Player name is ##NEEDS TRANSLATE## +gui.checkbox.player_within.name=Player is within ##NEEDS TRANSLATE## +gui.checkbox.redstone_signal.name=Opens on Redstone Signal ##NEEDS TRANSLATE## +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! ##NEEDS TRANSLATE## +gui.choose_planet.desc.moon=Habitable#Pas d'oxygène#Gravité: 18% +gui.choose_planet.desc.overworld=Plein de vie#Habitable#Pesanteur: 100% +gui.chooseplanet.alreadycreated1.name=Space Station Already +gui.chooseplanet.alreadycreated2.name=Created! +gui.chooseplanet.cannotcreate1.name=Cannot create Space +gui.chooseplanet.cannotcreate2.name=Station here! +gui.creative_only.desc=Creative Only ##NEEDS TRANSLATE## +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Current Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.distance_from.name=Distance from Target ##NEEDS TRANSLATE## +gui.docking_rocket.target_vel.name=Target Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.0=Press %s to decelerate ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.1=Press %s to accelerate ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.0=1 Meter ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.1=2 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.2=5 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.3=10 Meters ##NEEDS TRANSLATE## +gui.electric_compressor.desc.0=Progress ##NEEDS TRANSLATE## +gui.energy_storage.desc.0=Energy Storage ##NEEDS TRANSLATE## +gui.energy_storage.desc.1=Energy ##NEEDS TRANSLATE## +gui.flag.already_placed=Flag already placed here! ##NEEDS TRANSLATE## +gui.frequency_module.desc.0=Can receive weak sound ##NEEDS TRANSLATE## +gui.frequency_module.desc.1=waves and distant signals ##NEEDS TRANSLATE## +gui.frequencymodule.warning0=I'll probably need a ##NEEDS TRANSLATE## +gui.frequencymodule.warning1=if I want to hear properly here. ##NEEDS TRANSLATE## +gui.fuel_output.desc.0=Place empty liquid canisters into ##NEEDS TRANSLATE## +gui.fuel_output.desc.1=this slot to fill them from the ##NEEDS TRANSLATE## +gui.fuel_output.desc.2=fuel tank ##NEEDS TRANSLATE## +gui.fuel_tank.desc.0=Fuel tank. Requires ##NEEDS TRANSLATE## +gui.fuel_tank.desc.1=fuel loader to fill ##NEEDS TRANSLATE## +gui.fuel_tank.desc.2=Fuel tank, can be filled ##NEEDS TRANSLATE## +gui.fuel_tank.desc.3=with fuel canisters ##NEEDS TRANSLATE## +gui.fuel_tank.desc.4=Fuel tank ##NEEDS TRANSLATE## +gui.infinite_item.desc=Infinite ##NEEDS TRANSLATE## +gui.lander.velocity=Entry Velocity +gui.lander.velocityu=m/s +gui.lander.warning2=Hold " +gui.lander.warning3=" to slow down! +gui.max_output.desc=Max Output ##NEEDS TRANSLATE## +gui.message.addnewsch.name=Add New Schematic +gui.message.apply.name=Apply ##NEEDS TRANSLATE## +gui.message.assign_name.name=Assign Name ##NEEDS TRANSLATE## +gui.message.atmosphere.name=Atmosphere ##NEEDS TRANSLATE## +gui.message.back.name=Back ##NEEDS TRANSLATE## +gui.message.breed.name=Breed ##NEEDS TRANSLATE## +gui.message.bubble_visible.name=Bubble Visible ##NEEDS TRANSLATE## +gui.message.can_create_space_station.name=A Space Station can be created here! ##NEEDS TRANSLATE## +gui.message.cancel.name=Cancel ##NEEDS TRANSLATE## +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. ##NEEDS TRANSLATE## +gui.message.catalog.name=Catalog ##NEEDS TRANSLATE## +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) ##NEEDS TRANSLATE## +gui.message.click_again.1.name=Click again to zoom (view moons) ##NEEDS TRANSLATE## +gui.message.click_again.2.name=Click again to zoom (view satellites) ##NEEDS TRANSLATE## +gui.message.click_again.3.name=Click again to zoom ##NEEDS TRANSLATE## +gui.message.clicklink=Click for Galacticraft Wiki ##NEEDS TRANSLATE## +gui.message.create_ss.name=Create ##NEEDS TRANSLATE## +gui.message.daynightcycle.name=Day-night Cycle ##NEEDS TRANSLATE## +gui.message.energy=Energy ##NEEDS TRANSLATE## +gui.message.environment.name=Environmental Boost ##NEEDS TRANSLATE## +gui.message.exit.name=Exit ##NEEDS TRANSLATE## +gui.message.fuel.name=Fuel +gui.message.full.name=full +gui.message.generating.name=Generating ##NEEDS TRANSLATE## +gui.message.grow.name=Grow ##NEEDS TRANSLATE## +gui.message.heal.name=Heal ##NEEDS TRANSLATE## +gui.message.help1=For Galacticraft help ##NEEDS TRANSLATE## +gui.message.help1a=To see this message again at any time, type ##NEEDS TRANSLATE## +gui.message.help2=For Space Program guidance ##NEEDS TRANSLATE## +gui.message.help3=For help with oil ##NEEDS TRANSLATE## +gui.message.in.name=In +gui.message.launch.name=Launch ##NEEDS TRANSLATE## +gui.message.max_energy=Max Energy ##NEEDS TRANSLATE## +gui.message.meansurfacetemp.name=Mean Surface Temp ##NEEDS TRANSLATE## +gui.message.moon.atmosphere.0.name=None ##NEEDS TRANSLATE## +gui.message.moon.daynightcycle.0.name=29.5 Earth Days ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.1.name=Traces of Cheese ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.0.name=0.1654g ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.1.name=(18% of Earth) ##NEEDS TRANSLATE## +gui.message.of.name=of ##NEEDS TRANSLATE## +gui.message.oil.name=Oil ##NEEDS TRANSLATE## +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen ##NEEDS TRANSLATE## +gui.message.overworld.atmosphere.1.name=Supports life ##NEEDS TRANSLATE## +gui.message.overworld.daynightcycle.0.name=1 Earth Day ##NEEDS TRANSLATE## +gui.message.overworld.meansurfacetemp.0.name=14C ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.1.name=gravel ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.0.name=1.0g ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.1.name=(100% of Earth) ##NEEDS TRANSLATE## +gui.message.prelaunch=Pre-launch checklist ##NEEDS TRANSLATE## +gui.message.rename.name=Rename ##NEEDS TRANSLATE## +gui.message.select_ss.name=Select a Space Station ##NEEDS TRANSLATE## +gui.message.ss_owner.name=Owner: ##NEEDS TRANSLATE## +gui.message.status.name=Status +gui.message.strengthen.name=Strengthen ##NEEDS TRANSLATE## +gui.message.surfacecomposition.name=Surface Composition ##NEEDS TRANSLATE## +gui.message.surfacegravity.name=Surface Gravity ##NEEDS TRANSLATE## +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=Tier %d ##NEEDS TRANSLATE## +gui.message.unnamed.name=Unnamed ##NEEDS TRANSLATE## +gui.missing_core.name.0=MicdoodleCore not found in mods folder ##NEEDS TRANSLATE## +gui.missing_core.name.1=Galacticraft failed to load ##NEEDS TRANSLATE## +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore ##NEEDS TRANSLATE## +gui.missing_core.name.3=Click here to open download page ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.0=New schematic slot. You ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.1=can find new schematics ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.2=by completing dungeons ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.3=on planets and moons ##NEEDS TRANSLATE## +gui.oil_tank.desc.0=Oil tank, can be filled ##NEEDS TRANSLATE## +gui.oil_tank.desc.1=with oil canisters ##NEEDS TRANSLATE## +gui.oxygen.warning=Oxygen Setup is Invalid! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister or tank ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.0=Oxygen Storage ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.1=Oxygen ##NEEDS TRANSLATE## +gui.oxygen_use.desc=Oxygen Use ##NEEDS TRANSLATE## +gui.per_second=/s ##NEEDS TRANSLATE## +gui.player.bpm=bpm ##NEEDS TRANSLATE## +gui.player.food=Food ##NEEDS TRANSLATE## +gui.player.health=Health ##NEEDS TRANSLATE## +gui.player.ouch=ouch!!!! ##NEEDS TRANSLATE## +gui.receiver.cannot_attach=Cannot attach receiver here! ##NEEDS TRANSLATE## +gui.requires_controller.desc=Requires Launch Controller ##NEEDS TRANSLATE## +gui.rocket.countdown=Countdown ##NEEDS TRANSLATE## +gui.rocket.height=Height ##NEEDS TRANSLATE## +gui.rocket.inv.name=Inventory / Fuel ##NEEDS TRANSLATE## +gui.rocket.launch.name=Launch ##NEEDS TRANSLATE## +gui.rocket.launched=Launched ##NEEDS TRANSLATE## +gui.rocket.on_launchpad=On launchpad ##NEEDS TRANSLATE## +gui.rocket.speed=Speed ##NEEDS TRANSLATE## +gui.rocket.turn.name=Turn left-right ##NEEDS TRANSLATE## +gui.rocket.updown.name=Turn up-down ##NEEDS TRANSLATE## +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! ##NEEDS TRANSLATE## +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! ##NEEDS TRANSLATE## +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! ##NEEDS TRANSLATE## +gui.rocket_type.0=Storage Space: 18 ##NEEDS TRANSLATE## +gui.rocket_type.1=Storage Space: 36 ##NEEDS TRANSLATE## +gui.rocket_type.2=Storage Space: 56 ##NEEDS TRANSLATE## +gui.rocket_type.3=Pre-fueled ##NEEDS TRANSLATE## +gui.seconds=s +gui.sensor.advanced=Advanced Mode +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Show Bubble ##NEEDS TRANSLATE## +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. ##NEEDS TRANSLATE## +gui.space_race.chat.add_success=%s has joined the Space Race! ##NEEDS TRANSLATE## +gui.space_race.chat.already_part=You are already a part of this space race! ##NEEDS TRANSLATE## +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. ##NEEDS TRANSLATE## +gui.space_race.chat.not_found=Could not find player with name: %s ##NEEDS TRANSLATE## +gui.space_race.chat.remove_success=%s has been removed from the Space Race. ##NEEDS TRANSLATE## +gui.space_race.chat.to_join=To join %s use command %s ##NEEDS TRANSLATE## +gui.space_race.coming_soon=Coming Soon ##NEEDS TRANSLATE## +gui.space_race.create.add_players.name=Add Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.back.name=Back ##NEEDS TRANSLATE## +gui.space_race.create.brush_radius.name=Brush Radius ##NEEDS TRANSLATE## +gui.space_race.create.brush_size.name=Brush Size ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.0=Change ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.1=Team ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.2=Color ##NEEDS TRANSLATE## +gui.space_race.create.close.name=Close ##NEEDS TRANSLATE## +gui.space_race.create.customize.name=Customize Flag ##NEEDS TRANSLATE## +gui.space_race.create.eraser_radius.name=Eraser Radius ##NEEDS TRANSLATE## +gui.space_race.create.eraser_size.name=Eraser Size ##NEEDS TRANSLATE## +gui.space_race.create.global_stats.name=View Global Stats ##NEEDS TRANSLATE## +gui.space_race.create.invite_player.name=Invite Player ##NEEDS TRANSLATE## +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) ##NEEDS TRANSLATE## +gui.space_race.create.rem_players.name=Remove Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.remove.name=Remove ##NEEDS TRANSLATE## +gui.space_race.create.remove_player.name=Remove Player ##NEEDS TRANSLATE## +gui.space_race.create.rename.name=Rename Team ##NEEDS TRANSLATE## +gui.space_race.create.send_invite.name=Send Invite ##NEEDS TRANSLATE## +gui.space_race.create.server_stats.name=View Server Stats ##NEEDS TRANSLATE## +gui.space_race.create.title.name=Space Race Manager ##NEEDS TRANSLATE## +gui.space_race.create.title.name.0=Space Race ##NEEDS TRANSLATE## +gui.space_race.create.title.name.1=Manager ##NEEDS TRANSLATE## +gui.space_race.join.member_count.name=%d members ##NEEDS TRANSLATE## +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Owner ##NEEDS TRANSLATE## +gui.space_race.join.title.name=Join Space Race ##NEEDS TRANSLATE## +gui.space_race.unnamed=Unnamed Team ##NEEDS TRANSLATE## +gui.spacestation.added=You've been added to %s's Space Station accepted players! ##NEEDS TRANSLATE## +gui.spacestation.addsuccess=Successfully added %s to Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= ##NEEDS TRANSLATE## +gui.spacestation.removesuccess=Successfully removed %s from Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.to_allow_entry=to allow another player to enter this space station! ##NEEDS TRANSLATE## +gui.spacestation.type_command=Type ##NEEDS TRANSLATE## +gui.status.active.name=Active +gui.status.air_lock_closed.name=Air Lock Closed ##NEEDS TRANSLATE## +gui.status.air_lock_open.name=Air Lock Open ##NEEDS TRANSLATE## +gui.status.blockedfully.name=Sun is Not Visible ##NEEDS TRANSLATE## +gui.status.blockedpartial.name=Sun Partially Visible ##NEEDS TRANSLATE## +gui.status.check_pending.name=Check Pending ##NEEDS TRANSLATE## +gui.status.check_starting.name=Check Starting ##NEEDS TRANSLATE## +gui.status.checking_seal.name=Checking Seal ##NEEDS TRANSLATE## +gui.status.collecting.name=Collecting ##NEEDS TRANSLATE## +gui.status.collectingenergy.name=Collecting Energy ##NEEDS TRANSLATE## +gui.status.compressing.name=Compressing ##NEEDS TRANSLATE## +gui.status.disabled.name=Disabled +gui.status.fulltank.name=Oxygen Tank Full +gui.status.generating.name=Generating ##NEEDS TRANSLATE## +gui.status.hull_heat.name=Hull Heat ##NEEDS TRANSLATE## +gui.status.idle.name=Idle +gui.status.missingleaves.name=Not Enough Leaf Blocks +gui.status.missingoxygen.name=Not Enough Oxygen +gui.status.missingpower.name=Not Enough Power +gui.status.missingtank.name=No Valid Oxygen Tank +gui.status.nofuel.name=No Fuel to Load! +gui.status.noinvtarget.name=No Inventory on Target! +gui.status.noitems.name=No Items to Load! +gui.status.nooil.name=No Oil +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Not Generating ##NEEDS TRANSLATE## +gui.status.notargetload.name=No Target to Load Into! +gui.status.notargetunload.name=No Target to Unload! +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name=Raining ##NEEDS TRANSLATE## +gui.status.ready.name=Ready +gui.status.refining.name=Refining +gui.status.running.name=Running ##NEEDS TRANSLATE## +gui.status.sealed.name=Sealed +gui.status.sealerblocked.name=Output Vent Blocked! ##NEEDS TRANSLATE## +gui.status.sun_visible.name=Sun Visible ##NEEDS TRANSLATE## +gui.status.tank_empty.name=Oxygen Tank Empty ##NEEDS TRANSLATE## +gui.status.targetempty.name=Target Vehicle is Empty! +gui.status.targetfull.name=Target Vehicle is Full! +gui.status.unknown.name=Unknown +gui.status.unsealed.name=Unsealed +gui.tank.oxygen_remaining=Oxygen Remaining ##NEEDS TRANSLATE## +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) ##NEEDS TRANSLATE## +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! ##NEEDS TRANSLATE## +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! ##NEEDS TRANSLATE## +gui.telemetry_succeed.message=Telemetry link created. ##NEEDS TRANSLATE## +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s's Air Lock Controller ##NEEDS TRANSLATE## +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. ##NEEDS TRANSLATE## +gui.warning=WARNING! +gui.warning.invalid_thermal=Invalid Thermal Protection! ##NEEDS TRANSLATE## +gui.warning.noroom=Not enough room! ##NEEDS TRANSLATE## +item.air_fan.name=Ventilateur d'air +item.air_vent.name=Conduit d'air +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Can of Food ##NEEDS TRANSLATE## +item.basic_item.compressed_aluminum.name=Compressed Aluminum ##NEEDS TRANSLATE## +item.basic_item.compressed_bronze.name=Compressed Bronze ##NEEDS TRANSLATE## +item.basic_item.compressed_copper.name=Compressed Copper ##NEEDS TRANSLATE## +item.basic_item.compressed_iron.name=Compressed Iron ##NEEDS TRANSLATE## +item.basic_item.compressed_steel.name=Compressed Steel ##NEEDS TRANSLATE## +item.basic_item.compressed_tin.name=Compressed Tin ##NEEDS TRANSLATE## +item.basic_item.dehydrated_apple.name=Dehydrated Apples ##NEEDS TRANSLATE## +item.basic_item.dehydrated_carrot.name=Dehydrated Carrots ##NEEDS TRANSLATE## +item.basic_item.dehydrated_melon.name=Dehydrated Melons ##NEEDS TRANSLATE## +item.basic_item.dehydrated_potato.name=Dehydrated Potatoes ##NEEDS TRANSLATE## +item.basic_item.frequency_module.name=Frequency Module ##NEEDS TRANSLATE## +item.basic_item.ingot_aluminum.name=Aluminum Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_bronze.name=Bronze Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_copper.name=Copper Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_steel.name=Steel Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_tin.name=Tin Ingot ##NEEDS TRANSLATE## +item.basic_item.raw_silicon.name=Raw Silicon ##NEEDS TRANSLATE## +item.basic_item.solar_module_0.name=Single Solar Module ##NEEDS TRANSLATE## +item.basic_item.solar_module_1.name=Full Solar Panel ##NEEDS TRANSLATE## +item.basic_item.wafer_advanced.name=Advanced Wafer ##NEEDS TRANSLATE## +item.basic_item.wafer_basic.name=Basic Wafer ##NEEDS TRANSLATE## +item.basic_item.wafer_solar.name=Blue Solar Wafer ##NEEDS TRANSLATE## +item.battery.name=Battery ##NEEDS TRANSLATE## +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Boghei +item.buggymat.seat.name=Buggy Seat +item.buggymat.storage.name=Buggy Storage Box +item.buggymat.wheel.name=Buggy Wheel +item.canister.copper.name=Canette de cuivre +item.canister.tin.name=Tin Canister ##NEEDS TRANSLATE## +item.canvas.name=Toile +item.cheese_block.name=Bloc de fromage +item.cheese_curd.name=Caillé +item.compressed_meteoric_iron.name=Fer météorique comprimé +item.empty_liquid_canister.name=Cannette vide +item.engine.tier1booster.name=Tier 1 Booster ##NEEDS TRANSLATE## +item.engine.tier1engine.name=Tier 1 Rocket Engine ##NEEDS TRANSLATE## +item.flag.name=Flag ##NEEDS TRANSLATE## +item.fuel.name=Rocket Fuel +item.fuel_canister.name=Cannette de carburant remplie +item.fuel_canister_partial.name=Cannette de carburant partiellement remplie +item.heavy_plating.name=Placage lourd +item.hot_description.name=Hot ##NEEDS TRANSLATE## +item.infinite_battery.name=Infinite Battery ##NEEDS TRANSLATE## +item.infinite_oxygen.name=Infinite Oxygen Supply ##NEEDS TRANSLATE## +item.key.t1.name=Tier 1 Dungeon Key +item.meteor_chunk.name=Throwable Meteor Chunk ##NEEDS TRANSLATE## +item.meteor_chunk_hot.name=Throwable Meteor Chunk ##NEEDS TRANSLATE## +item.meteoric_iron_ingot.name=Lingot de Fer météorique +item.meteoric_iron_raw.name=Fer météorique brut +item.nose_cone.name=Cône de nez +item.oil_canister.name=Cannette d'huile remplie +item.oil_canister_partial.name=Cannette d'huile partiellement remplie +item.oil_extractor.name=Extracteur d'huile portable +item.oxygen_concentrator.name=Concentrateur d'oxygène +item.oxygen_gear.name=Équipement à oxygène +item.oxygen_mask.name=Masque à oxygène +item.oxygen_tank_heavy_empty.name=Grosse bonbonne d'oxygène vide +item.oxygen_tank_heavy_full.name=Grosse bonbonne d'oxygène +item.oxygen_tank_light_empty.name=Petite bonbonne d'oxygène vide +item.oxygen_tank_light_full.name=Petite bonbonne d'oxygène +item.oxygen_tank_med_empty.name=Moyenne bonbonne d'oxygène vide +item.oxygen_tank_med_full.name=Moyenne bonbonne d'oxygène +item.parachute_black.name=Black Parachute ##NEEDS TRANSLATE## +item.parachute_blue.name=Light Blue Parachute ##NEEDS TRANSLATE## +item.parachute_brown.name=Brown Parachute ##NEEDS TRANSLATE## +item.parachute_darkblue.name=Blue Parachute ##NEEDS TRANSLATE## +item.parachute_darkgray.name=Gray Parachute ##NEEDS TRANSLATE## +item.parachute_darkgreen.name=Green Parachute ##NEEDS TRANSLATE## +item.parachute_gray.name=Light Gray Parachute ##NEEDS TRANSLATE## +item.parachute_lime.name=Lime Parachute ##NEEDS TRANSLATE## +item.parachute_magenta.name=Magenta Parachute ##NEEDS TRANSLATE## +item.parachute_orange.name=Orange Parachute ##NEEDS TRANSLATE## +item.parachute_pink.name=Pink Parachute ##NEEDS TRANSLATE## +item.parachute_plain.name=Parachute ##NEEDS TRANSLATE## +item.parachute_purple.name=Purple Parachute ##NEEDS TRANSLATE## +item.parachute_red.name=Red Parachute ##NEEDS TRANSLATE## +item.parachute_teal.name=Cyan Parachute ##NEEDS TRANSLATE## +item.parachute_yellow.name=Yellow Parachute ##NEEDS TRANSLATE## +item.rocket_fins.name=Ailerons de fusée +item.rocket_t1.name=Vaisseau spatiale +item.schematic.name=NASA Workbench Schematic +item.sensor_glasses.name=Lunettes sensorielles +item.sensor_lens.name=Lentille sensorielle +item.standard_wrench.name=Standard Wrench ##NEEDS TRANSLATE## +item.steel_axe.name=Heavy Duty Axe ##NEEDS TRANSLATE## +item.steel_boots.name=Heavy Duty Boots ##NEEDS TRANSLATE## +item.steel_chestplate.name=Heavy Duty Chestplate ##NEEDS TRANSLATE## +item.steel_helmet.name=Heavy Duty Helmet ##NEEDS TRANSLATE## +item.steel_hoe.name=Heavy Duty Hoe ##NEEDS TRANSLATE## +item.steel_leggings.name=Heavy Duty Leggings ##NEEDS TRANSLATE## +item.steel_pickaxe.name=Heavy Duty Pickaxe ##NEEDS TRANSLATE## +item.steel_pole.name=Steel Pole ##NEEDS TRANSLATE## +item.steel_shovel.name=Heavy Duty Shovel ##NEEDS TRANSLATE## +item.steel_sword.name=Heavy Duty Sword ##NEEDS TRANSLATE## +item.tier1.desc=Tier 1 ##NEEDS TRANSLATE## +item_desc.powerdraw.name=Power required: %s /s ##NEEDS TRANSLATE## +item_desc.shift.name=Press %s for more info ##NEEDS TRANSLATE## +item_group.galacticraft_blocks=Galacticraft Blocks ##NEEDS TRANSLATE## +item_group.galacticraft_items=Galacticraft Items ##NEEDS TRANSLATE## +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Toggle Sensor Goggles Mode +keybind.spaceshipinv.name=Open Spaceship Inventory +keybind.vehiclebackward.name=Vehicle Backward Key +keybind.vehicledown.name=Vehicle Down Key +keybind.vehicleforward.name=Vehicle Forward Key +keybind.vehicleleft.name=Vehicle Left Key +keybind.vehicleright.name=Vehicle Right Key +keybind.vehicleup.name=Vehicle Up Key +moon.moon=Moon ##NEEDS TRANSLATE## +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter ##NEEDS TRANSLATE## +planet.mercury=Mercury ##NEEDS TRANSLATE## +planet.neptune=Neptune ##NEEDS TRANSLATE## +planet.overworld=Overworld ##NEEDS TRANSLATE## +planet.saturn=Saturn ##NEEDS TRANSLATE## +planet.uranus=Uranus ##NEEDS TRANSLATE## +planet.venus=Venus ##NEEDS TRANSLATE## +satellite.spacestation.overworld=Overworld Space Station ##NEEDS TRANSLATE## +schematic.moonbuggy.name=Moon Buggy +schematic.rocket_t1.name=Tier 1 Rocket ##NEEDS TRANSLATE## +schematic.rocket_t2.name=Tier 2 Rocket +solarsystem.sol=Sol ##NEEDS TRANSLATE## +star.sol=Sol ##NEEDS TRANSLATE## +tile.air_lock_controller.name=Air Lock Controller ##NEEDS TRANSLATE## +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Cadre de sas +tile.air_lock_seal.name=Joint de sas +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name=Aluminum Wire ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Transfers at a faster rate than it's predecessor. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name=Heavy Aluminum Wire ##NEEDS TRANSLATE## +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Arc Lamp ##NEEDS TRANSLATE## +tile.basic_block_core.block_aluminum_gc.name=Aluminum Block ##NEEDS TRANSLATE## +tile.basic_block_core.block_copper_gc.name=Copper Block ##NEEDS TRANSLATE## +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron ##NEEDS TRANSLATE## +tile.basic_block_core.block_tin_gc.name=Tin Block ##NEEDS TRANSLATE## +tile.basic_block_core.deco_block_0.name=Tin Decoration Block ##NEEDS TRANSLATE## +tile.basic_block_core.deco_block_1.name=Tin Decoration Block ##NEEDS TRANSLATE## +tile.basic_block_core.ore_aluminum_gc.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_copper_gc.name=Copper Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_silicon.name=Silicon Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_tin_gc.name=Tin Ore ##NEEDS TRANSLATE## +tile.basic_block_moon.bricks.name=Brique +tile.basic_block_moon.cheesestone.name=Minerai de fromage +tile.basic_block_moon.coppermoon.name=Minerai de cuivre +tile.basic_block_moon.moondirt.name=Terre Lunaire +tile.basic_block_moon.moongrass.name=Herbe Lunaire +tile.basic_block_moon.moonstone.name=Roche Lunaire +tile.basic_block_moon.tinmoon.name=Minerai d'étain +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Cargo Loader +tile.cargo.unloader.name=Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Bloc de fromage +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name=Collecteur d'oxygène +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name=Huile brute +tile.crude_oil_still.name=Huile brute +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Communications Dish ##NEEDS TRANSLATE## +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name=Distributeur d'oxygène +tile.dummyblock.cryogenic_chamber.name=Cryogenic Chamber ##NEEDS TRANSLATE## +tile.dummyblock.launch_pad.name=Rocket Launch Pad ##NEEDS TRANSLATE## +tile.dummyblock.nasa_workbench.name=NASA Workbench ##NEEDS TRANSLATE## +tile.dummyblock.solar.name=Solar Panel ##NEEDS TRANSLATE## +tile.dummyblock.space_station_base.name=Space Station Base ##NEEDS TRANSLATE## +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Sealable Aluminum Wire ##NEEDS TRANSLATE## +tile.enclosed.heavy_aluminum_wire.name=Sealable Heavy Aluminum Wire ##NEEDS TRANSLATE## +tile.enclosed.copper_cable.name=Sealable Copper Cable ##NEEDS TRANSLATE## +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fiber Cable ##NEEDS TRANSLATE## +tile.enclosed.gold_cable.name=Sealable Gold Cable ##NEEDS TRANSLATE## +tile.enclosed.hv_cable.name=Sealable HV Cable ##NEEDS TRANSLATE## +tile.enclosed.lv_cable.name=Sealable Ultra-Low-Current Cable ##NEEDS TRANSLATE## +tile.enclosed.me_cable.name=Sealable ME Cable ##NEEDS TRANSLATE## +tile.enclosed.fluid_pipe.name=Sealable Oxygen Pipe +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Waterproof Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Waterproof Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_power_gold.name=Sealable Golden Conductive Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_power_stone.name=Sealable Stone Conductive Pipe ##NEEDS TRANSLATE## +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Météore tombé +tile.fuel.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name=Fuel Loader ##NEEDS TRANSLATE## +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Glowstone Torch ##NEEDS TRANSLATE## +tile.landing_pad.buggy_fueler.name=Buggy Fueling Pad +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad +tile.landing_pad.description=Landing Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name=Rampe de lancement de fusée +tile.landing_pad_full.name=Rocket Launch Pad ##NEEDS TRANSLATE## +tile.machine.0.name=Coal Generator ##NEEDS TRANSLATE## +tile.machine.1.name=Energy Storage Module ##NEEDS TRANSLATE## +tile.machine.2.name=Electric Furnace ##NEEDS TRANSLATE## +tile.machine.3.name=Compressor ##NEEDS TRANSLATE## +tile.machine.7.name=Electric Arc Furnace ##NEEDS TRANSLATE## +tile.machine.8.name=Energy Storage Cluster ##NEEDS TRANSLATE## +tile.machine2.4.name=Electric Compressor ##NEEDS TRANSLATE## +tile.machine2.5.name=Circuit Fabricator ##NEEDS TRANSLATE## +tile.machine2.6.name=Oxygen Storage Module ##NEEDS TRANSLATE## +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.moon_stairs_stone.name=Moon Rock Stairs ##NEEDS TRANSLATE## +tile.ore_copper.name=Copper Ore ##NEEDS TRANSLATE## +tile.ore_tin.name=Tin Ore ##NEEDS TRANSLATE## +tile.oxygen_compressor.0.name=Oxygen Compressor ##NEEDS TRANSLATE## +tile.oxygen_compressor.1.name=Oxygen Decompressor ##NEEDS TRANSLATE## +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name=Oxygen Detector +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name=Tuyau d'oxygène +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Parachest ##NEEDS TRANSLATE## +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name=Raffinerie +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=Table de travail de rocket +tile.sapling2.birch.name=Birch Sapling +tile.sapling2.jungle.name=Jungle Sapling +tile.sapling2.oak.name=Oak Sapling +tile.sapling2.spruce.name=Spruce Sapling +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name=Oxygen Sealer +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.moon_slab.name=Moon Rock Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.solar.advanced_solar.name=Advanced Solar Panel ##NEEDS TRANSLATE## +tile.solar.basic_solar.name=Basic Solar Panel ##NEEDS TRANSLATE## +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Space Station Arrival Block ##NEEDS TRANSLATE## +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Spin Thruster ##NEEDS TRANSLATE## +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Telemetry Unit ##NEEDS TRANSLATE## +tile.tin_stairs_1.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.tin_stairs_2.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Coffre au trésor +tile.unlit_torch.name=Torche +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Torche +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Display Screen ##NEEDS TRANSLATE## +tile.wall_gc.moon.name=Moon Rock Wall ##NEEDS TRANSLATE## +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall ##NEEDS TRANSLATE## +tile.wall_gc.tin.name=Tin Decoration Wall ##NEEDS TRANSLATE## diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_fr.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_fr.lang new file mode 100644 index 00000000..7705f31e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_fr.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s a été envoyé dans l'atmosphère%s +commands.dimensiontp.too_many=trop d'arguments dans cette commande ! Utilisez: +commands.gcenergyunits.invalid_units=Unitées fausses dans la commande /GCEnergyUnits. Utilisez: %s +commands.gcenergyunits.no_units=Les unitées doivent être spécifiées ! Utilisez: %s +commands.joinrace.no_team=Le groupe doit être spécifié! Utilisez: %s +commands.ssinvite.not_found=impossible de trouver une station spatiale pour votre nom, vous devez voyager là d'abord ! +commands.ssinvite.wrong_usage=pas assez d'arguments dans cette commande ! Utilisez: %s +commands.ssnewowner.wrong_usage=ID# de la station spatiale inconnu - est-ce qu'il existe ? Utilisez: %s +commands.ssuninvite.no_player=Impossible de trouver un joueur du nom %s dans la liste des stations spatiales ! +container.cargoloader.name=Chargeur de cargaison +container.cargounloader.name=Déchargeur de cargaison +container.fuelloader.name=Chargeur de carburant +container.lander.name=Atterrisseur spatial +container.oxygencollector.name=Collecteur d'oxygène +container.oxygencompressor.name=Compresseur d'oxygène +container.oxygendecompressor.name=Décompresseur d'oxygène +container.oxygendistributor.name=Distributeur d'oxygène +container.oxygensealer.name=Scellant d'oxygène +container.parachest.name=Coffre aéroporté +container.refinery.name=Raffinerie +container.solaradvanced.name=Panneau solaire avancé +container.solarbasic.name=Panneau solaire de base +container.spaceship.name=Fusée Niveau 1 +container.treasurechest.name=Coffre au trésor +death.attack.oxygen_suffocation=%1$s a manqué d'oxygène ! +death.attack.spaceship_crash=%1$s s'est écrasé au sol. Mince. +death.attack.thermal=%1$s a oublié sa protection thermique ! +dimension.moon.name=Lune +dimension.overworld.name=Terre +dimension.sun.name=Soleil +entity.alien_villager.name=Villageois alien +entity.buggy.name=Boghei +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper évolué +entity.evolved_skeleton.name=Squelette évolué +entity.evolved_skeleton_boss.name=Boss squelette évolué +entity.evolved_spider.name=Araignée évolué +entity.evolved_zombie.name=Zombie évolué +entity.flag.name=Drapeau +entity.gcflag.name=Drapeau +entity.gravity_arrow.name=Flèche +entity.lander.name=Atterrisseur spatial +entity.meteor.name=Météore +entity.meteor_chunk.name=Morceau de météore +entity.oxygen_bubble.name=Bulle d'oxygène +entity.para_chest.name=Coffre parachuté +entity.rocket_t1.name=Fusée Niveau 1 +galaxy.milky_way=Voie lactée +gc.configgui.alternate_canister_recipe=Recette alternative des bouteilles +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=Base de BiomeID pour GC +gc.configgui.detectable_i_ds=ID détectables +gc.configgui.disable_cheese_moon=Désactive la génération de fromage lunaire +gc.configgui.disable_copper_moon=Désactive la génération de cuivre lunaire +gc.configgui.disable_lander=Désactible les atterrisseurs sur la lune, utilisez les parachutes à la place +gc.configgui.disable_moon_village_gen=Désactive la génération de village lunaire +gc.configgui.disable_space_station_creation=Désactive le création de station spatiale +gc.configgui.disable_spaceship_grief=Désactive les explosions de fusée +gc.configgui.disable_spaceship_particles=Désactiver les particules des fusées +gc.configgui.disable_tin_moon=Désactive la génération d'étain lunaire +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Modificateur de santé du boss de donjon +gc.configgui.enable_aluminum_ore_gen=Génération d'aluminium du monde normal +gc.configgui.enable_copper_ore_gen=Génération de cuivre du monde normal +gc.configgui.enable_debug=Montre les message de débogue dans la console +gc.configgui.enable_other_mods_features=Active le mod externe de génération de monde +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Vérification des angles scélés +gc.configgui.enable_silicon_ore_gen=Génération de silicium du monde normal +gc.configgui.enable_thaum_craft_nodes=Active les nodes ThaumCraft sur les planètes +gc.configgui.enable_tin_ore_gen=Génération d'étain du monde normal +gc.configgui.external_oil_gen=Génération de pétrole externe +gc.configgui.force_overworld_respawn=Force la résurection dans le monde normal +gc.configgui.hard_mode=Difficulté plus dure +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=ID dimension lune +gc.configgui.id_dimension_overworld_orbit=ID dimension station spatiale +gc.configgui.id_dimension_overworld_orbit_static=ID dimension station spatiale statique +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Inservez le défilement de la carte +gc.configgui.map_scroll_sensitivity=Sensibilité de la souris pour le défilement de carte +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Montre plus d'étoiles +gc.configgui.oil_gen_factor=Facteur de génération de pétrole +gc.configgui.ore_dict_silicon=Nom OreDict du silicon dans les autres mods +gc.configgui.other_mod_ore_gen_i_ds=Les minerai d'autre mod seront généré sur les planètes +gc.configgui.override_capes=Dérogation des capes des donneurs +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Placer l'indicateur d'oxygène en bas +gc.configgui.oxygen_indicator_left=Placer l'indicateur d'oxygène à gauche +gc.configgui.quick_mode=Jeu rapide (plus facile) +gc.configgui.rocket_disable_overworld_return=Désactiver le retour de fusée en monde normal +gc.configgui.rocket_disabled_dimensions=Dimensions désactivé aux fusées +gc.configgui.rocket_fuel_factor=Facteur de carburant de la fusée +gc.configgui.sealable_i_ds=Blocs scélables +gc.configgui.space_station_energy_scalar=Modificateurs d'énergie de station spatiale +gc.configgui.space_stations_require_permission=Permissions de station spatiales +gc.configgui.static_loaded_dimensions=Dimensions statiques chargées +gc.configgui.suffocation_cooldown=Récupération de suffocation +gc.configgui.suffocation_damage=Dégâts de suffocation +gc.configgui.title=Configuration de Galacticraft Core +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Emplacement pour pile, placez une pile ici +gui.battery_slot.desc.1=ou utilisez une autre source d'énergie +gui.bed_fail.message=Euh, et s'il manque d'oxygène pendant que dors ? Il me faut une capsule cryogénique pour dormir dans l'espace ! +gui.buggy.accel.name=Accélérer +gui.buggy.decel.name=Ralentir +gui.buggy.inv.name=Inventaire / Carburant +gui.buggy.storage_space=Espace de stockage +gui.buggy.turn.name=Tournez à gauche-doite +gui.button.back.name=Retour +gui.button.disable.name=Désactiver +gui.button.disableseal.name=Désactiver le scellage +gui.button.enable.name=Activer +gui.button.enableseal.name=Activer le scellage +gui.button.hide_dest.name=Masquer +gui.button.loadfuel.name=Charger le carburant +gui.button.loaditems.name=Charger les articles +gui.button.next.name=Suivant +gui.button.refine.name=Affiner +gui.button.stoploading.name=Arrêtez le chargement en cours +gui.button.stoprefine.name=Arrêtez de raffinage +gui.button.stopunloading.name=Arrêtez le déchargement en cours +gui.button.unhide_dest.name=Révéler +gui.button.unloaditems.name=Décharger les articles +gui.button.unlockschematic.name=Débloquez schéma +gui.checkbox.horizontal.name=Mode horizontal +gui.checkbox.invert.name=Sélection inversée +gui.checkbox.player_name.name=Le nom du joueur est +gui.checkbox.player_within.name=Le joueur est dans +gui.checkbox.redstone_signal.name=S'ouvre avec un signal de redstone +gui.chest.warning.wrongkey=J'aurai besoin d'une clée de donjon de niveau %s pour débloquer ceci! +gui.choose_planet.desc.moon=Habitable#Pas d'oxygène#Gravité: 18% +gui.choose_planet.desc.overworld=Plein de vie#Habitable#Gravité: 100% +gui.chooseplanet.alreadycreated1.name=Station spatiale déjà +gui.chooseplanet.alreadycreated2.name=Crée! +gui.chooseplanet.cannotcreate1.name=Vous ne pouvez pas créer d'espace +gui.chooseplanet.cannotcreate2.name=Station spatiale ici! +gui.creative_only.desc=Creatif uniquement +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Vitesse actuelle +gui.docking_rocket.distance_from.name=Distance à la cible +gui.docking_rocket.target_vel.name=Vitesse de la cible +gui.docking_rocket.warning.name.0=Appuyez sur %s pour freiner +gui.docking_rocket.warning.name.1=Appuyez %s pour accélerer +gui.dropbox.player_distance.name.0=1 Mètres +gui.dropbox.player_distance.name.1=2 Mètres +gui.dropbox.player_distance.name.2=5 Mètres +gui.dropbox.player_distance.name.3=10 Mètres +gui.electric_compressor.desc.0=Progression +gui.energy_storage.desc.0=Stockage d'énergie +gui.energy_storage.desc.1=Energie +gui.flag.already_placed=Le drapeau est déjà placé ici +gui.frequency_module.desc.0=Peut recevoir de faibles ondes +gui.frequency_module.desc.1=sonores et d'autres signaux distants +gui.frequencymodule.warning0=J'aurai probablement besoin de +gui.frequencymodule.warning1=si je veut entendre correctement ici +gui.fuel_output.desc.0=Placez un réservoir vide dans +gui.fuel_output.desc.1=cet emplacement pour les remplir depuis +gui.fuel_output.desc.2=le reservoir de carburant +gui.fuel_tank.desc.0=Réservoir de carburant, requiert +gui.fuel_tank.desc.1=un chargeur à carburant +gui.fuel_tank.desc.2=Réservoir de carburant, peut être remplit +gui.fuel_tank.desc.3=avec du carburant +gui.fuel_tank.desc.4=Réservoir de carburant +gui.infinite_item.desc=Infinie +gui.lander.velocity=Vitesse d'entrée +gui.lander.velocityu=m/s +gui.lander.warning2=Tenir " +gui.lander.warning3=" ralentir! +gui.max_output.desc=Sortie Maxi +gui.message.addnewsch.name=Ajouter un nouveau Schéma +gui.message.apply.name=Appliquer +gui.message.assign_name.name=Assigner le nom +gui.message.atmosphere.name=Atmosphère +gui.message.back.name=Arrière +gui.message.breed.name=Nourir +gui.message.bubble_visible.name=Bulles visibles +gui.message.can_create_space_station.name=Une station spatiale peut être crée ici ! +gui.message.cancel.name=Annuler +gui.message.cannot_create_space_station.name=Une station spatiale ne peut pas être crée ici ! +gui.message.catalog.name=Catalogue +gui.message.click_again.0.name=Cliquez encore pour zoomer (pour voir les lunes et les satellites) +gui.message.click_again.1.name=Cliquez encore pour zoomer (pour voir les lunes) +gui.message.click_again.2.name=Cliquez encore pour zoomer (pour voir les satellites) +gui.message.click_again.3.name=Cliquez encore pour zoomer +gui.message.clicklink=Cliquez pour le Wiki de Galacticraft +gui.message.create_ss.name=Créer +gui.message.daynightcycle.name=Cycle jour-nuit +gui.message.energy=Energie +gui.message.environment.name=Amplificateur écologique +gui.message.exit.name=Sortie +gui.message.fuel.name=Carburant +gui.message.full.name=Plein +gui.message.generating.name=Génération +gui.message.grow.name=Grandir +gui.message.heal.name=Soigner +gui.message.help1=Pour l'aide de Galacticraft +gui.message.help1a=Pour revoir ce message une nouvelle fois, tapez +gui.message.help2=Pour le guide du programme spatial +gui.message.help3=Pour de l'aide sur les carburants +gui.message.in.name=Dedans +gui.message.launch.name=Lancement +gui.message.max_energy=Energie maximale +gui.message.meansurfacetemp.name=Température à la surface moyenne +gui.message.moon.atmosphere.0.name=non +gui.message.moon.daynightcycle.0.name=29.5 jours terrestres +gui.message.moon.meansurfacetemp.0.name=(Face éclairée) 253C +gui.message.moon.meansurfacetemp.1.name=(Nuit) -153C +gui.message.moon.surfacecomposition.0.name=Roche basaltique +gui.message.moon.surfacecomposition.1.name=Traces de fromage +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% de la gravité terrestre) +gui.message.of.name=de +gui.message.oil.name=Pétrole +gui.message.out.name=Dehors +gui.message.overworld.atmosphere.0.name=Azote et Oxygène +gui.message.overworld.atmosphere.1.name=Peut accueillir la vie +gui.message.overworld.daynightcycle.0.name=1 jour terrestre +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Pierre, terre, et +gui.message.overworld.surfacecomposition.1.name=gravier +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% de la gravité terrestre) +gui.message.prelaunch=Liste de vérification de pré-lancement +gui.message.rename.name=Renommer +gui.message.select_ss.name=Sélectionnez une station de l'espace +gui.message.ss_owner.name=Propriétaire : +gui.message.status.name=Statut +gui.message.strengthen.name=Renforcer +gui.message.surfacecomposition.name=Composition de la surface +gui.message.surfacegravity.name=Gravité à la surface +gui.message.thermal_status.name=Contrôle thermique +gui.message.tier.name=Niveau %d +gui.message.unnamed.name=sans-nom +gui.missing_core.name.0=MicdoodleCore n'as pas été trouvé dans le dossier mods +gui.missing_core.name.1=Galacticraft ne s'est pas chargé correctement +gui.missing_core.name.2=Fermez Minecraft et installez MicdoodleCore +gui.missing_core.name.3=Cliquez ici pour ouvrir la page de téléchargement +gui.new_schematic.slot.desc.0=Emplacement de nouveau plan. Vous +gui.new_schematic.slot.desc.1=pouvez trouver des plans +gui.new_schematic.slot.desc.2=en explorant des donjons +gui.new_schematic.slot.desc.3=sur les autres planètes ou lunes +gui.oil_tank.desc.0=Réservoir de pétrole, peut être remplit +gui.oil_tank.desc.1=avec du pétrole +gui.oxygen.warning=La configuration d'oxygène est invalide! +gui.oxygen_compressor.slot.desc.0=Emplacement réservoir, placez ici un réservoir +gui.oxygen_compressor.slot.desc.1=d'oxygène pour le remplir d'air respirable. +gui.oxygen_decompressor.slot.desc.0=Emplacement réservoir, placez ici un réservoir +gui.oxygen_decompressor.slot.desc.1=d'oxygène pour le vider de l'air respirable. +gui.oxygen_slot.desc.0=Emplacement oxygène, placez ici une boite ou un +gui.oxygen_slot.desc.1=réservoir ou une provision d'oxygène connectée +gui.oxygen_storage.desc.0=Stockage d'oxygène +gui.oxygen_storage.desc.1=Oxygène +gui.oxygen_use.desc=Utilise de l'oxygène +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Aliments +gui.player.health=Santé +gui.player.ouch=aïe !!!! +gui.receiver.cannot_attach=Impossible d'attacher le récepteur ici ! +gui.requires_controller.desc=Requiert un controlleur +gui.rocket.countdown=Compte à rebours +gui.rocket.height=Altitude +gui.rocket.inv.name=Inventaire / Carburant +gui.rocket.launch.name=Lancement +gui.rocket.launched=Lancé +gui.rocket.on_launchpad=Sur le pas de tir +gui.rocket.speed=Vitesse +gui.rocket.turn.name=Tourner (droite-gauche) +gui.rocket.updown.name=Tourner (haut-bas) +gui.rocket.warning.nofuel=Je doit d'abord remplir le réservoir de carburant! +gui.rocket.warning.nogyroscope=De mistérieuses forces sont en jeu et les gyroscopes sont devenu fou ! +gui.rocket.warning.noparachute=Je n'ai pas de parachute! Si j'appuie encore sur "lancement", je ne pourrait plus revenir! +gui.rocket_type.0=Espace de stockage : 18 +gui.rocket_type.1=Espace de stockage : 36 +gui.rocket_type.2=Espace de stockage : 56 +gui.rocket_type.3=Réservoir pré-remplis +gui.seconds=s +gui.sensor.advanced=Mode avancé +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Montrer la bulle +gui.skeleton_boss.message=Disparition du Boss, ne quittez pas la salle du boss durant le combat ! Ré-entrez dans la salle pour le faire apparaitre. +gui.space_race.chat.add_success=%s a rejoint le course de l'espace ! +gui.space_race.chat.already_part=Vous faites déjà partie de cette course de l'espace ! +gui.space_race.chat.invite_received=Vous avez reçu l'invitation de l'équipe de course de l'espace : %s +gui.space_race.chat.not_found=Impossible de trouver le joueur portant le nom : %s +gui.space_race.chat.remove_success=%s a été retiré de la course de l'espace. +gui.space_race.chat.to_join=Pour rejoindre %s utilisez la commande %s +gui.space_race.coming_soon=Arrive bientot +gui.space_race.create.add_players.name=Ajouter un joueur +gui.space_race.create.back.name=Arrière +gui.space_race.create.brush_radius.name=Rayon du pinceau +gui.space_race.create.brush_size.name=Taille du pinceau +gui.space_race.create.change_color.name.0=Changer la +gui.space_race.create.change_color.name.1=couleur de +gui.space_race.create.change_color.name.2=l'équipe +gui.space_race.create.close.name=Fermer +gui.space_race.create.customize.name=Personaliser le drapeau +gui.space_race.create.eraser_radius.name=Rayon de la gomme +gui.space_race.create.eraser_size.name=Taille de la gomme +gui.space_race.create.global_stats.name=Voir les statistiques globales +gui.space_race.create.invite_player.name=Inviter un joueur +gui.space_race.create.player_radius.name=Note: Les joueurs doivent être à portée! (25 blocs) +gui.space_race.create.rem_players.name=Enlever un joueur +gui.space_race.create.remove.name=Enlever +gui.space_race.create.remove_player.name=Enlever un joueur +gui.space_race.create.rename.name=Renommer les équipes +gui.space_race.create.send_invite.name=Envoyer une invitation +gui.space_race.create.server_stats.name=Voir les statistiques du serveur +gui.space_race.create.title.name=Gestionnaire de la course de l'espace +gui.space_race.create.title.name.0=Course de l'espace +gui.space_race.create.title.name.1=Directeur +gui.space_race.join.member_count.name=%d membres +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Propriétaire +gui.space_race.join.title.name=Rejoindre la course de l'espace +gui.space_race.unnamed=Equipe sans nom +gui.spacestation.added=Vous avez été ajouté aux joueurs acceptés dans la station spatiale de %s ! +gui.spacestation.addsuccess=%s a été ajouté à la liste de la station spatiale ! +gui.spacestation.allow_all_false=Votre station spatiale n'est plus accessible à tous les joueurs ! +gui.spacestation.allow_all_true=Votre station spatiale est maintenant accessible à tous les joueurs ! (Utiliser /ssinvite -all pour annuler.) +gui.spacestation.changesuccess=Le propriétaire de la station spatiale est passé de %s à %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=%s a été supprimé de la liste des stations spatiales avec succès ! +gui.spacestation.to_allow_entry=pour autoriser un autre joueur à entrer dans votre station! +gui.spacestation.type_command=Tappez +gui.status.active.name=Actif +gui.status.air_lock_closed.name=Sas d'air fermé +gui.status.air_lock_open.name=Sas d'air ouvert +gui.status.blockedfully.name=Le soleil n'est pas visible +gui.status.blockedpartial.name=Le soleil partiellement visible +gui.status.check_pending.name=Contrôle suspendu +gui.status.check_starting.name=Contrôle de départ +gui.status.checking_seal.name=Contrôle du cachet +gui.status.collecting.name=Récupération +gui.status.collectingenergy.name=collecte de l'énergie +gui.status.compressing.name=Compression +gui.status.disabled.name=Hors service +gui.status.fulltank.name=Réservoir d'oxygène plein +gui.status.generating.name=Production +gui.status.hull_heat.name=Bouclier thermique +gui.status.idle.name=Tourne au ralenti +gui.status.missingleaves.name=Pas assez de blocs de feuilles +gui.status.missingoxygen.name=Pas assez d'oxygène +gui.status.missingpower.name=Pas assez de puissance +gui.status.missingtank.name=Pas de réservoir d'oxygène Valide +gui.status.nofuel.name=Pas de carburant à charger! +gui.status.noinvtarget.name=Pas d'inventaire sur la cible! +gui.status.noitems.name=Pas d'éléments à charger! +gui.status.nooil.name=Pas d'huile +gui.status.not_available.name=N/D +gui.status.not_generating.name=pas de production +gui.status.notargetload.name=Aucune cible à charger dedans! +gui.status.notargetunload.name=Aucune cible à décharger! +gui.status.off.name=Désactivé +gui.status.on.name=Activé +gui.status.raining.name=Il pleut +gui.status.ready.name=Prêt +gui.status.refining.name=Raffinage +gui.status.running.name=Fonctionnant +gui.status.sealed.name=Scellé +gui.status.sealerblocked.name=Conduit de sortie bloqué! +gui.status.sun_visible.name=Soleil visible +gui.status.tank_empty.name=Réservoir d'oxygène vide +gui.status.targetempty.name=Le véhicule ciblé est vide! +gui.status.targetfull.name=Le véhicule ciblé est plein! +gui.status.unknown.name=Inconnu +gui.status.unsealed.name=Descellé +gui.tank.oxygen_remaining=Oxygène restant +gui.telemetry_fail.message=Avant tout, je devrai rechercher une entité avec ce module de fréquence ! (Ou essayer de le porter !) +gui.telemetry_fail_no_frequency_module.message=je devrai probablement avoir un module de fréquence dans ma main pour pouvoir utiliser ceci ! +gui.telemetry_fail_wearing_it.message=je devrai décoller mon module de fréquence si je veux le lier a cette unité de télémétrie ! +gui.telemetry_succeed.message=Lien télémétrique activé. +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Utilise plus d'énergie ! +gui.title.air_lock.name=%s's Controlleur du sas +gui.tracking.message=Dépistage activé. Maintenant, je devrai faire un clic droit de ceci sur une unité de télémétrie pour compléter le lien. +gui.warning=ALERTE! +gui.warning.invalid_thermal=Protection thermique invalides ! +gui.warning.noroom=Pas assez de place! +item.air_fan.name=Ventilateur +item.air_vent.name=Conduit d'air +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Boîte de nourriture +item.basic_item.compressed_aluminum.name=Aluminium comprimé +item.basic_item.compressed_bronze.name=Bronze comprimé +item.basic_item.compressed_copper.name=Cuivre comprimé +item.basic_item.compressed_iron.name=Fer comprimé +item.basic_item.compressed_steel.name=Acier comprimé +item.basic_item.compressed_tin.name=Étain comprimé +item.basic_item.dehydrated_apple.name=Pomme déshydratée +item.basic_item.dehydrated_carrot.name=Carotte déshydratée +item.basic_item.dehydrated_melon.name=Melon déshydraté +item.basic_item.dehydrated_potato.name=Pomme de terre déshydratée +item.basic_item.frequency_module.name=Module de fréquence +item.basic_item.ingot_aluminum.name=Lingot d'aluminum +item.basic_item.ingot_bronze.name=Lingot de bronze +item.basic_item.ingot_copper.name=Lingot de cuivre +item.basic_item.ingot_steel.name=Lingot d'acier +item.basic_item.ingot_tin.name=Lingot d'étain +item.basic_item.raw_silicon.name=Silicium brut +item.basic_item.solar_module_0.name=Partie de panneau solaire +item.basic_item.solar_module_1.name=Panneau solaire complet +item.basic_item.wafer_advanced.name=Galette avancée +item.basic_item.wafer_basic.name=Galette de base +item.basic_item.wafer_solar.name=Galette solaire bleu +item.battery.name=Batterie +item.bucket_fuel.name=Seau d'essence +item.bucket_oil.name=Seau de pétrole +item.buggy.name=Boghei +item.buggymat.seat.name=Siège de boghei +item.buggymat.storage.name=Boîte de rangement pour boghei +item.buggymat.wheel.name=Roue de boghei +item.canister.copper.name=Canette en cuivre +item.canister.tin.name=Canette en étain +item.canvas.name=Toile +item.cheese_block.name=Bloc de fromage +item.cheese_curd.name=Caillé +item.compressed_meteoric_iron.name=Fer météorique comprimé +item.empty_liquid_canister.name=Cannette vide +item.engine.tier1booster.name=Amplificateur Niveau 1 +item.engine.tier1engine.name=Moteur de fusée Niveau 1 +item.flag.name=Drapeau +item.fuel.name=Carburant pour fusée +item.fuel_canister.name=Cannette de carburant remplie +item.fuel_canister_partial.name=Cannette de carburant partiellement remplie +item.heavy_plating.name=Placage lourd +item.hot_description.name=Chaud +item.infinite_battery.name=Batterie infinie +item.infinite_oxygen.name=Provision d'oxygène infinie +item.key.t1.name=Clé du Donjon Niveau 1 +item.meteor_chunk.name=Gros morceau de météore tombée +item.meteor_chunk_hot.name=Gros morceau de météore tombée +item.meteoric_iron_ingot.name=Lingot de Fer météorique +item.meteoric_iron_raw.name=Fer météorique brut +item.nose_cone.name=Cône de nez +item.oil_canister.name=Cannette d'huile remplie +item.oil_canister_partial.name=Cannette d'huile partiellement remplie +item.oil_extractor.name=Extracteur de pétrole portable +item.oxygen_concentrator.name=Concentrateur d'oxygène +item.oxygen_gear.name=Équipement à oxygène +item.oxygen_mask.name=Masque à oxygène +item.oxygen_tank_heavy_empty.name=Grosse bonbonne d'oxygène vide +item.oxygen_tank_heavy_full.name=Grosse bonbonne d'oxygène +item.oxygen_tank_light_empty.name=Petite bonbonne d'oxygène vide +item.oxygen_tank_light_full.name=Petite bonbonne d'oxygène +item.oxygen_tank_med_empty.name=Moyenne bonbonne d'oxygène vide +item.oxygen_tank_med_full.name=Moyenne bonbonne d'oxygène +item.parachute_black.name=Parachute noir +item.parachute_blue.name=Parachute bleu pâle +item.parachute_brown.name=Parachute brun +item.parachute_darkblue.name=Parachute bleu foncé +item.parachute_darkgray.name=Parachute gris foncé +item.parachute_darkgreen.name=Parachute vert foncé +item.parachute_gray.name=Parachute gris pâle +item.parachute_lime.name=Parachute vert citron +item.parachute_magenta.name=Parachute magenta +item.parachute_orange.name=Parachute orange +item.parachute_pink.name=Parachute rose +item.parachute_plain.name=Parachute +item.parachute_purple.name=Parachute mauve +item.parachute_red.name=Parachute rouge +item.parachute_teal.name=Parachute cyan +item.parachute_yellow.name=Parachute jaune +item.rocket_fins.name=Ailerons de fusée +item.rocket_t1.name=Fusée +item.schematic.name=Plan pour atelier de la NASA +item.sensor_glasses.name=Lunettes sensorielles +item.sensor_lens.name=Lentille sensorielle +item.standard_wrench.name=Clé standard +item.steel_axe.name=Hache en acier lourd +item.steel_boots.name=Bottes en acier lourd +item.steel_chestplate.name=Plastron en acier lourd +item.steel_helmet.name=Casque en acier lourd +item.steel_hoe.name=Houe en acier lourd +item.steel_leggings.name=Jambières en acier lourd +item.steel_pickaxe.name=Pioche en acier lourd +item.steel_pole.name=Mât en acier +item.steel_shovel.name=Pelle en acier lourd +item.steel_sword.name=Épée en acier lourd +item.tier1.desc=Niveau 1 +item_desc.powerdraw.name=puissance demandée : %s /s +item_desc.shift.name=Appuyez %s pour plus d'info +item_group.galacticraft_blocks=Blocs de Galacticraft +item_group.galacticraft_items=Objets de Galacticraft +keybind.map.name=Carte de la galaxie +keybind.sensortoggle.name=Changer le mode des capteurs de lunette +keybind.spaceshipinv.name=Ouvrir l'inventaire du vaisseau spatial +keybind.vehiclebackward.name=Véhicule-Aller en arrière +keybind.vehicledown.name=Véhicule-Descendre +keybind.vehicleforward.name=Véhicule-Aller en avant +keybind.vehicleleft.name=Véhicule-Aller à gauche +keybind.vehicleright.name=Véhicule-Aller à droite +keybind.vehicleup.name=Véhicule-Monter +moon.moon=Lune +newversion.failed.name=La mise à jour de Galacticraft à échouée! Essayer à nouveau dans 15 secondes +newversion.success.name=Nouvelle version de Galacticraft trouvée: +planet.jupiter=Jupiter +planet.mercury=Mercure +planet.neptune=Neptune +planet.overworld=Terre +planet.saturn=Saturne +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Station spatiale de l'Overworld +schematic.moonbuggy.name=Boghei Lunaire +schematic.rocket_t1.name=Fusée Niveau 1 +schematic.rocket_t2.name=Fusée Niveau 2 +solarsystem.sol=Sol +star.sol=Soleil +tile.air_lock_controller.name=Contrôleur de sas +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Cadre de sas +tile.air_lock_seal.name=Joint de sas +tile.aluminum_wire.alu_wire.description=Le câble en aluminum est utilisé pour connecter des sources d'énergies à des machines qui en ont besoin. +tile.aluminum_wire.alu_wire.name=Câble en aluminium +tile.aluminum_wire.alu_wire_heavy.description=Le câble en aluminum lourd est utilisé pour connecter des sources d'énergies à des machines qui en ont besoin. Transfers à plus haut débit que son prédécesseur. +tile.aluminum_wire.alu_wire_heavy.name=Câble en aluminium lourd +tile.arclamp.description=Les lampes ARC sont utilisées pour éclairer fortement une large zone, provocant la fuite de la plupart des mobs. +tile.arclamp.name=Lampe ARC +tile.basic_block_core.block_aluminum_gc.name=Bloc d'aluminum +tile.basic_block_core.block_copper_gc.name=Bloc de cuivre +tile.basic_block_core.block_meteoric_iron_gc.name=Fer météorique solide +tile.basic_block_core.block_tin_gc.name=Bloc d'étain +tile.basic_block_core.deco_block_0.name=Bloc décoratif en étain +tile.basic_block_core.deco_block_1.name=Bloc décoratif en étain +tile.basic_block_core.ore_aluminum_gc.name=Minerai d'aluminium +tile.basic_block_core.ore_copper_gc.name=Minerai de cuivre +tile.basic_block_core.ore_silicon.name=Minerai de Silicium +tile.basic_block_core.ore_tin_gc.name=Minerai d'étain +tile.basic_block_moon.bricks.name=Brique +tile.basic_block_moon.cheesestone.name=Minerai de fromage +tile.basic_block_moon.coppermoon.name=Minerai de cuivre +tile.basic_block_moon.moondirt.name=Terre Lunaire +tile.basic_block_moon.moongrass.name=Herbe Lunaire +tile.basic_block_moon.moonstone.name=Roche Lunaire +tile.basic_block_moon.tinmoon.name=Minerai d'étain +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Chargeur de cargaison +tile.cargo.unloader.name=Déchargeur de cargaison +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Bloc de fromage +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Le collecteur d'oxygène stockera l'oxygène rassemblé des feuilles dans les environs. +tile.collector.name=Collecteur d'oxygène +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Pétrole +tile.crude_oil_moving.name=Pétrole brut +tile.crude_oil_still.name=Pétrole brut +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Disques de communication +tile.distributor.description=Le distributeur d'oxygène émettra une bulle d'oxygène à l'extérieur du bloc de centre en utilisant le réservoir interne. Ceci permet une respiration saine à l'intérieur de la bulle. +tile.distributor.name=Distributeur d'oxygène +tile.dummyblock.cryogenic_chamber.name=Chambre cryogénique +tile.dummyblock.launch_pad.name=Rampe de lancement de fusée +tile.dummyblock.nasa_workbench.name=Atelier de la NASA +tile.dummyblock.solar.name=Panneau solaire +tile.dummyblock.space_station_base.name=Base de la station spatiale +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Câble hermétique en aluminium +tile.enclosed.heavy_aluminum_wire.name=Câble hermétique en aluminium lourd +tile.enclosed.copper_cable.name=Câble hermétique en cuivre +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Câble hermétique en fibres de verre +tile.enclosed.gold_cable.name=Câble hermétique en or +tile.enclosed.hv_cable.name=Câble hermétique à haut voltage +tile.enclosed.lv_cable.name=Câble hermétique à courant ultra faible +tile.enclosed.me_cable.name=Câble ME hermétique +tile.enclosed.fluid_pipe.name=Tuyau d'oxygène hermétique +tile.enclosed.pipe_fluids_cobblestone.name=Tuyau hermétique étanche en pierre +tile.enclosed.pipe_fluids_stone.name=Tuyau hermétique étanche en roche +tile.enclosed.pipe_items_cobblestone.name=Tuyau hermétique de tranport en pierre +tile.enclosed.pipe_items_stone.name=Tuyau hermétique de tranport en roche +tile.enclosed.pipe_power_gold.name=Tuyau hermétique conducteur en or +tile.enclosed.pipe_power_stone.name=Tuyau hermétique conducteur en roche +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Météore tombé +tile.fuel.name=Carburant +tile.fuel_block.name=Essence +tile.fuel_loader.description=Après avoir été connecté à la rampe de lancement, le chargeur de carburant autorisera le carburant à passer dans les fusées ou les autre véhicules connectés. +tile.fuel_loader.name=Chargeur de carburant +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Torche de pierre lumineuse +tile.landing_pad.buggy_fueler.name=Sol de ravitaillement de boghei +tile.landing_pad.cargo_pad.name=Sol chargeur de fusée +tile.landing_pad.description=La rampe de lancement autorisera le placement de fusées si elle est configuré en carré de 3x3. Chargeur de carburant, chargeur de cargo et controleurs de lancement peuvent lui être attaché. +tile.landing_pad.landing_pad.name=Rampe de lancement de fusée +tile.landing_pad_full.name=Sol de fusée de lancement +tile.machine.0.name=Générateur à charbon +tile.machine.1.name=Module de stockage d'énergie +tile.machine.2.name=Four électrique +tile.machine.3.name=Compresseur +tile.machine.7.name=Four à arcs éléctrique +tile.machine.8.name=Groupement de stockage énergétique +tile.machine2.4.name=compresseur électrique +tile.machine2.5.name=Constructeur de circuit +tile.machine2.6.name=Module de stockage d'oxygène +tile.moon_stairs_brick.name=Escaliers en briques de donjon lunaire +tile.moon_stairs_stone.name=Escaliers en roche lunaire +tile.ore_copper.name=Minerai de cuivre +tile.ore_tin.name=Minerai d'étain +tile.oxygen_compressor.0.name=Compresseur d'oxygène +tile.oxygen_compressor.1.name=Décompresseur d'oxygène +tile.oxygen_compressor.description=Le compresseur d'oxygène chargera l'oxygène du stockage interne dans un réservoir d'oxygène. +tile.oxygen_decompressor.description=Le décompresseur d'oxygène déchargera l'oxygène dans le stockage interne d'un réservoir d'oxygène. +tile.oxygen_detector.description=Le détecteur d'oxygène émettra un signal redstone quand il sera entouré d'oxygène. +tile.oxygen_detector.name=Détecteur d'oxygène +tile.oxygen_pipe.description=Le tuyau d'oxygène transfèrera l'oxygene du réservoir à gaz interne d'une machine vers une autre. +tile.oxygen_pipe.name=Tuyau d'oxygène +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Coffre parachuté +tile.refinery.description=La rafinerie prendra en entrée du pétrole et de l'énergie et en sortie du carburant utilisé par les fusée et les véhicules. +tile.refinery.name=Raffinerie +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=Table de travail de rocket +tile.sapling2.birch.name=Jeune pousse de bouleau +tile.sapling2.jungle.name=Jeune pousse d'acajou +tile.sapling2.oak.name=Jeune pousse de chêne +tile.sapling2.spruce.name=Jeune pousse d'épicéa +tile.sealer.description=Le scellant d'oxygène vérifiera le confinement de l'espace. Si un est trouvé, la zone sera rempli d'air respirable. +tile.sealer.name=Scellant d'oxygène +tile.slab_gc_half.moon_bricks_slab.name=Dalle en briques de donjon lunaire +tile.slab_gc_half.moon_slab.name=Dalle en roche lunaire +tile.slab_gc_half.tin_slab_1.name=Dalle décorée à l'étain +tile.slab_gc_half.tin_slab_2.name=Dalle décorée à l'étain +tile.solar.advanced_solar.name=Panneau solaire avancé +tile.solar.basic_solar.name=Panneau solaire de base +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Bloc d'arrivée de station spatiale +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Petits réacteurs +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Unité de télémétrie +tile.tin_stairs_1.name=Escaliers décorés à l'étain +tile.tin_stairs_2.name=Escaliers décorés à l'étain +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Coffre au trésor +tile.unlit_torch.name=Torche +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Torche +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Ecran d'affichage +tile.wall_gc.moon.name=Mur en roche lunaire +tile.wall_gc.moon_bricks.name=Mur en briques de donjon lunaire +tile.wall_gc.tin.name=Mur décoré à l'étain diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hr_hr.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hr_hr.lang new file mode 100644 index 00000000..a94bb8cd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hr_hr.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=Broj Astro Rudara za igrača %s je %s +commands.dimensionteleport=%s je poslan u Atmosferu%s +commands.dimensiontp.too_many=Previše naredbenih argumenata! Upotreba: %s +commands.gcenergyunits.invalid_units=Nepoznate jedinice /GCEnergyUnits komanda. Koristi: %s +commands.gcenergyunits.no_units=Jedinice treba navesti! Upotreba: %s +commands.joinrace.no_team=Treba navesti tim! Upotreba: %s +commands.ssinvite.not_found=Ne mogu pronaći svemirsku postaju za svoje korisničko ime, morate putovati prije! +commands.ssinvite.wrong_usage=Nije dovoljno naredbenih argumenata! upotreba: %s +commands.ssnewowner.wrong_usage=Nemogu prepoznati ime svemirske postaje ID# - postoji li? Upotreba: %s +commands.ssuninvite.no_player=Ne mogu pronaći igrača s korisničkim imenom %s na popisu postaja! +container.cargoloader.name=Utovarivač Tereta +container.cargounloader.name=Istovarivač Tereta +container.fuelloader.name=Utovarivač Goriva +container.lander.name=Lander +container.oxygencollector.name=Kolektor Kisika +container.oxygencompressor.name=Kompresor Kisika +container.oxygendecompressor.name=Dekompresor Kisika +container.oxygendistributor.name=Distributer Kisika +container.oxygensealer.name=Raspoređivač Kisika +container.parachest.name=Pado-Škrinja +container.refinery.name=Rafinerija +container.solaradvanced.name=Napredni Solarni Panel +container.solarbasic.name=Solarni Panel +container.spaceship.name=Rang 1 Raketa +container.treasurechest.name=Škrinja sa Blagom +death.attack.oxygen_suffocation=%1$s je nestao bez kisika! +death.attack.spaceship_crash=%1$s's raketa se srušila. Ops. +death.attack.thermal=%1$s je zaboravio termalnu zaštitu! +dimension.moon.name=Mjesec +dimension.overworld.name=Minecraftia +dimension.sun.name=Sunce +entity.alien_villager.name=Vanzemaljac +entity.buggy.name=Rover +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evoulirani Kriper +entity.evolved_skeleton.name=Evoulirani Kostur +entity.evolved_skeleton_boss.name=Evoulirani Kralj Kostura +entity.evolved_spider.name=Evoulirani Pauk +entity.evolved_zombie.name=Evoulirani Zombi +entity.flag.name=Zastava +entity.gcflag.name=Zastava +entity.gravity_arrow.name=Strijela +entity.lander.name=Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Chunk +entity.oxygen_bubble.name=Zračni Balon +entity.para_chest.name=PadoŠkrinja +entity.rocket_t1.name=Raketa Ranga 1 +galaxy.milky_way=Mliječni Put +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Ostale Mod Rude generirati na planetima +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Jezgra Opcije +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Slot za bateriju, postavi ovdje +gui.battery_slot.desc.1=ili koristi spojenu struju +gui.bed_fail.message=Oh ne, što ako nestane kisika kada zaspim? Trebati ću kriogensku komoru da spavam u svemiru! +gui.buggy.accel.name=Ubrzanje +gui.buggy.decel.name=Usporavanje +gui.buggy.inv.name=Inventar / Gorivo +gui.buggy.storage_space=Mjesto +gui.buggy.turn.name=Skreni lijevo-desno +gui.button.back.name=Nazad +gui.button.disable.name=Isključi +gui.button.disableseal.name=Isključi dijeljenje kisika +gui.button.enable.name=Uključi +gui.button.enableseal.name=Uključi dijeljenje kisika +gui.button.hide_dest.name=Skrij +gui.button.loadfuel.name=Puni Gorivo +gui.button.loaditems.name=Stavi Stvari +gui.button.next.name=Naprijed +gui.button.refine.name=Rafiniraj +gui.button.stoploading.name=Zaustavi +gui.button.stoprefine.name=Prestani Rafinirati +gui.button.stopunloading.name=Zaustavi +gui.button.unhide_dest.name=Otkrij +gui.button.unloaditems.name=Utovari +gui.button.unlockschematic.name=Otključaj Šemu +gui.checkbox.horizontal.name=Horizontalni Način +gui.checkbox.invert.name=Izokreni +gui.checkbox.player_name.name=Ime igrača je +gui.checkbox.player_within.name=Igrač je unutar +gui.checkbox.redstone_signal.name=Signal crvenog kamena +gui.chest.warning.wrongkey=Trebaš rang %s tamničkog ključa za ovu škrinju! +gui.choose_planet.desc.moon=Pogodan za život#Nema Kisika#Gravitacija: 18% +gui.choose_planet.desc.overworld=Puno Života#Pogodno za život#Gravitacija: 100% +gui.chooseplanet.alreadycreated1.name=Svemirska postaja već je +gui.chooseplanet.alreadycreated2.name=stvorena! +gui.chooseplanet.cannotcreate1.name=Nemožeš stvoriti svemirsku +gui.chooseplanet.cannotcreate2.name=postaju ovdje! +gui.creative_only.desc=Samo kreativnost +gui.display.nolink=Nema spoja +gui.docking_rocket.current_vel.name=Trenutna brzina +gui.docking_rocket.distance_from.name=Daljina od mete +gui.docking_rocket.target_vel.name=Ciljna brzina +gui.docking_rocket.warning.name.0=Pritisni %s za Usporiti +gui.docking_rocket.warning.name.1=Pritisni %s za Ubrzanje +gui.dropbox.player_distance.name.0=1 Metar +gui.dropbox.player_distance.name.1=2 Metara +gui.dropbox.player_distance.name.2=5 Metara +gui.dropbox.player_distance.name.3=10 Metara +gui.electric_compressor.desc.0=Napredak +gui.energy_storage.desc.0=Pohrana Energije +gui.energy_storage.desc.1=Energija +gui.flag.already_placed=Zastava je već postavljena! +gui.frequency_module.desc.0=Čitanje jako tihih zvukova +gui.frequency_module.desc.1=valova i dalekih signala +gui.frequencymodule.warning0=Trebam +gui.frequencymodule.warning1=Ako želim čuti dobro ovdje. +gui.fuel_output.desc.0=Postavi praznu tekučinu kanistra u +gui.fuel_output.desc.1=ovaj slot da ih napuniš iz +gui.fuel_output.desc.2=spremnika goriva +gui.fuel_tank.desc.0=Spremnik Goriva. Treba +gui.fuel_tank.desc.1=Utovarivač goriva za punjenje +gui.fuel_tank.desc.2=Spremnik se može napuniti +gui.fuel_tank.desc.3=sa kanistrima goriva +gui.fuel_tank.desc.4=Spremnik Goriva +gui.infinite_item.desc=Beskonačno +gui.lander.velocity=Slijetanje +gui.lander.velocityu=m/s +gui.lander.warning2=Drži " +gui.lander.warning3=" da usporiš! +gui.max_output.desc=Maksimalni izlaz +gui.message.addnewsch.name=Dodaj novu shemu +gui.message.apply.name=Primijeni +gui.message.assign_name.name=Dodjela imena +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Nazad +gui.message.breed.name=Množi +gui.message.bubble_visible.name=Vidljivost balona +gui.message.can_create_space_station.name=Možeš napraviti Svemirsku Postaju! +gui.message.cancel.name=Odbij +gui.message.cannot_create_space_station.name=Svemirska postaja se ne može stvoriti. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Klikni opet za Zumiranje (Pogledaj Mjesece i Satelite) +gui.message.click_again.1.name=Klikni opet za Zumiranje (Pogledaj Mjesec) +gui.message.click_again.2.name=Klikni opet za Zumiranje (Pogledaj Satelit) +gui.message.click_again.3.name=Klikni opet za Zumiranje +gui.message.clicklink=Klinki za GalactiCraft Wikipediju +gui.message.create_ss.name=Stvori +gui.message.daynightcycle.name=Period dana-noći +gui.message.energy=Energija +gui.message.environment.name=Pojačanje okoliša +gui.message.exit.name=Izlaz +gui.message.fuel.name=Gorivo +gui.message.full.name=puno +gui.message.generating.name=Generira +gui.message.grow.name=Rasti +gui.message.heal.name=Izliječi +gui.message.help1=Za GalactiCraft pomoć +gui.message.help1a=Da vidiš poruku opet bilo koji put, upiši +gui.message.help2=Za rukovanje svemirskim programom +gui.message.help3=Za pomoć sa uljem +gui.message.in.name=U +gui.message.launch.name=Lansiraj +gui.message.max_energy=Maksimalna Energija +gui.message.meansurfacetemp.name=Temperatura Tla +gui.message.moon.atmosphere.0.name=Nema +gui.message.moon.daynightcycle.0.name=29.5 Zemljinih dana +gui.message.moon.meansurfacetemp.0.name=(Svijetla strana) 253C +gui.message.moon.meansurfacetemp.1.name=(Tamna strana) -153C +gui.message.moon.surfacecomposition.0.name=Bazaltnih stijena i +gui.message.moon.surfacecomposition.1.name=Tragova sira +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% od Zemlje) +gui.message.of.name=od +gui.message.oil.name=Ulje +gui.message.out.name=Van +gui.message.overworld.atmosphere.0.name=Dušik i Kisik +gui.message.overworld.atmosphere.1.name=Prihvača Život +gui.message.overworld.daynightcycle.0.name=1 Zemljin Dana +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Kamen, trava, i +gui.message.overworld.surfacecomposition.1.name=šljunak +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% od Zemlje) +gui.message.prelaunch=Popis prije-pokretanja +gui.message.rename.name=Preimenuj +gui.message.select_ss.name=Odaberi Svemirsku stanicu +gui.message.ss_owner.name=Vlasnik: +gui.message.status.name=Status +gui.message.strengthen.name=Ojačaj +gui.message.surfacecomposition.name=Kompozicija tla +gui.message.surfacegravity.name=Gravitacija tla +gui.message.thermal_status.name=Termalna kontrola +gui.message.tier.name=Rang %d +gui.message.unnamed.name=Neimenovan +gui.missing_core.name.0=MicdoodleCore nije pronađen u mods folderu +gui.missing_core.name.1=Galacticraft nije učitan +gui.missing_core.name.2=Ugasi Minecraft i instaliraj MicdoodleCore +gui.missing_core.name.3=Klikni ovdje da otvoriš download stranicu +gui.new_schematic.slot.desc.0=Nova shema. Možeš +gui.new_schematic.slot.desc.1=pronači nove sheme +gui.new_schematic.slot.desc.2=da otključaš tamnice +gui.new_schematic.slot.desc.3=na planetima i mjesecima +gui.oil_tank.desc.0=Spremnik nafte, može se napuniti +gui.oil_tank.desc.1=sa spremnicima nafte +gui.oxygen.warning=Postavljane kisika pogrešno! +gui.oxygen_compressor.slot.desc.0=Utor za spremnik, spremnik staviti +gui.oxygen_compressor.slot.desc.1=ovdje da se napuni sa kisikom. +gui.oxygen_decompressor.slot.desc.0=Utor za spremnik, postavi spremnik sa kisikom +gui.oxygen_decompressor.slot.desc.1=ovdje da se uzme sav kisik iz njega. +gui.oxygen_slot.desc.0=Utor za kisik, mjesto za kanistar kisika ili spremnik +gui.oxygen_slot.desc.1=Ovdje, ili koristite spojenu opskrbu kisikom +gui.oxygen_storage.desc.0=Pohrana Kisika +gui.oxygen_storage.desc.1=Kisik +gui.oxygen_use.desc=Kisik se koristi +gui.per_second=/s +gui.player.bpm=Puls +gui.player.food=Hrana +gui.player.health=Zdravlje +gui.player.ouch=jao!!!! +gui.receiver.cannot_attach=Nemožeš staviti stroj ovdje! +gui.requires_controller.desc=Trebaš Kontroler Lansiranja +gui.rocket.countdown=Odbrojavanje +gui.rocket.height=Visina +gui.rocket.inv.name=Inventar / Gorivo +gui.rocket.launch.name=Lansiranje +gui.rocket.launched=Lansirano +gui.rocket.on_launchpad=Na lansirnoj rampi +gui.rocket.speed=Brzina +gui.rocket.turn.name=Skreni lijevo-desno +gui.rocket.updown.name=Idi gore-dolje +gui.rocket.warning.nofuel=Trebaš još goriva! +gui.rocket.warning.nogyroscope=Tajanstvene snage su u igri, a žiroskopi se vrte divlje! +gui.rocket.warning.noparachute=Nemaš padobran! Ako stisnem lansiranje opet, nema povratka! +gui.rocket_type.0=Prostor: 18 +gui.rocket_type.1=Prostor: 36 +gui.rocket_type.2=Prostor: 56 +gui.rocket_type.3=Sa gorivom +gui.seconds=s +gui.sensor.advanced=Napredni Način +gui.sensor.advancedoff=Ugasi +gui.sensor.advancedon=Upali +gui.show_bubble.desc.0=Pokaži Balon +gui.skeleton_boss.message=Boss se opet stvorio, nemoj izaći iz sobe inače će nestati! Opet uđi da ga stvoriš. +gui.space_race.chat.add_success=%s je ušao u svemirsku utrku! +gui.space_race.chat.already_part=Već si u toj svemirskoj utrci! +gui.space_race.chat.invite_received=Dobio si poruku da uđeš u svemirsku utrku od %s. +gui.space_race.chat.not_found=Nemogu pronaći igrača s tim imenom: %s +gui.space_race.chat.remove_success=%s je obrisan iz svemirske utrke. +gui.space_race.chat.to_join=Da uđeš %s upiši %s +gui.space_race.coming_soon=Uskoro dolazi +gui.space_race.create.add_players.name=Dodaj igrače +gui.space_race.create.back.name=Nazad +gui.space_race.create.brush_radius.name=Promjer kista +gui.space_race.create.brush_size.name=Veličina kista +gui.space_race.create.change_color.name.0=Promjeni +gui.space_race.create.change_color.name.1=Boju +gui.space_race.create.change_color.name.2=Tima +gui.space_race.create.close.name=Zatvori +gui.space_race.create.customize.name=Uredi Zastavu +gui.space_race.create.eraser_radius.name=Radius Gumice +gui.space_race.create.eraser_size.name=Veličina Gumice +gui.space_race.create.global_stats.name=Pogledaj Globalnu Statistiku +gui.space_race.create.invite_player.name=Pozovi Igrača +gui.space_race.create.player_radius.name=Igrač mora biti u dometu! (25 blokova) +gui.space_race.create.rem_players.name=Obriši Igrače +gui.space_race.create.remove.name=Obriši +gui.space_race.create.remove_player.name=Obrisi Igrača +gui.space_race.create.rename.name=Preimenuj Tim +gui.space_race.create.send_invite.name=Pošalji Zahtjev +gui.space_race.create.server_stats.name=Pogledaj Status Servera +gui.space_race.create.title.name=Opcije Svemirske Utrke +gui.space_race.create.title.name.0=Menađer Svemirske +gui.space_race.create.title.name.1=Utrke +gui.space_race.join.member_count.name=%d igrača +gui.space_race.join.name=Pridruži se +gui.space_race.join.owner.name=Vlasnik +gui.space_race.join.title.name=Uđi u Svemirsku stanicu +gui.space_race.unnamed=Neimenovan Tim +gui.spacestation.added=Dodan si u %s Svemirsku stanicu! +gui.spacestation.addsuccess=Uspješno dodao %s na listu! +gui.spacestation.allow_all_false=Tvoje svemirske stanice više nisu otvorene za sve igrače! +gui.spacestation.allow_all_true=Tvoje svemirske stanice sada su otvorene za sve igrače(Upiši /ssinvite -all da isključiš.) +gui.spacestation.changesuccess=Vlasnik svemirske stanice promjenjen iz %s na novog vlasnika %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Uspješno obrisan %s iz liste! +gui.spacestation.to_allow_entry=Da drugi igrač uđe u svemirsku stanicu! +gui.spacestation.type_command=Upiši +gui.status.active.name=Aktivirano +gui.status.air_lock_closed.name=Zračna komora zatvorena +gui.status.air_lock_open.name=Zračna komora otvorena +gui.status.blockedfully.name=Sunce nije vidljivo +gui.status.blockedpartial.name=Sunce djelomično vidljivo +gui.status.check_pending.name=Provjeravam tijek +gui.status.check_starting.name=Pregledavam pokretač +gui.status.checking_seal.name=Provjeravam kisik +gui.status.collecting.name=Skupljam +gui.status.collectingenergy.name=Skupljam energiju +gui.status.compressing.name=Kompresiranje +gui.status.disabled.name=Isključeno +gui.status.fulltank.name=Spremnik kisika pun +gui.status.generating.name=Generiram +gui.status.hull_heat.name=Pregrijavanje +gui.status.idle.name=Ništa +gui.status.missingleaves.name=Nema dovoljno lišča +gui.status.missingoxygen.name=Nema dovoljno kisika +gui.status.missingpower.name=Nema dovoljno energije +gui.status.missingtank.name=Spremnik kisika nije pronađen +gui.status.nofuel.name=Nema goriva za utovar! +gui.status.noinvtarget.name=Meta nema inventar! +gui.status.noitems.name=Nema stvari za utovar! +gui.status.nooil.name=Nema nafte +gui.status.not_available.name=N/A +gui.status.not_generating.name=Ne generiram +gui.status.notargetload.name=Nema mete za utovar! +gui.status.notargetunload.name=Nema mete za istovar! +gui.status.off.name=Ugašeno +gui.status.on.name=Upaljeno +gui.status.raining.name=Kiši +gui.status.ready.name=Spreman +gui.status.refining.name=Rafiniram +gui.status.running.name=U tijeku +gui.status.sealed.name=Prozračeno +gui.status.sealerblocked.name=Blokiran vrh! +gui.status.sun_visible.name=Sunce vidljivo +gui.status.tank_empty.name=Spremnik kisika prazan +gui.status.targetempty.name=Vozilo je prazno! +gui.status.targetfull.name=Vozilo je puno! +gui.status.unknown.name=Nepoznato +gui.status.unsealed.name=Mjesto je previše veliko +gui.tank.oxygen_remaining=Kisika ostalo +gui.telemetry_fail.message=Prvo ću morati pratiti subjekt s tim frekvencijskim modulom! (Ili ga probaj obuči!) +gui.telemetry_fail_no_frequency_module.message=Vjerojatno ću trebati frekvencijski modul u ruci da mogu iskoristiti ovo! +gui.telemetry_fail_wearing_it.message=Ja ću morati da skinem frekvencijski modul, ako ga želim povezati s ovom telemetrijskom jedinicom! +gui.telemetry_succeed.message=Telemetrijska veza stvorena. +gui.thermal_slot.desc.0=Termalni Thermal utor, postavi 'Ambient +gui.thermal_slot.desc.1=Termalni kontroler' ovdje (neobavezno) +gui.thermal_slot.desc.2=Koristi više energije! +gui.title.air_lock.name=%s's Zračna Komora +gui.tracking.message=Praćenje aktivirano. Sada ću morati kliknuti na ovu telemetrijsku jedinici da završim vezu. +gui.warning=OPASNOST! +gui.warning.invalid_thermal=Nepoznata Termalna Zaštita! +gui.warning.noroom=Nema dovoljno prostora! +item.air_fan.name=Ventilator za kisik +item.air_vent.name=Otvor za kisik +item.basic_item.ambient_thermal_controller.name=Ambient Termalni Kontroler +item.basic_item.canned_food.name=Limenka sa Hranom +item.basic_item.compressed_aluminum.name=Prerađeni Aluminij +item.basic_item.compressed_bronze.name=Prerađena Bronca +item.basic_item.compressed_copper.name=Prerađeni Bakar +item.basic_item.compressed_iron.name=Prerađeno Zeljezo +item.basic_item.compressed_steel.name=Prerađeni Čelik +item.basic_item.compressed_tin.name=Prerađeni Lim +item.basic_item.dehydrated_apple.name=Dehidrirana Jabuka +item.basic_item.dehydrated_carrot.name=Dehidrirana Mrkva +item.basic_item.dehydrated_melon.name=Dehidrirana Lubenica +item.basic_item.dehydrated_potato.name=Dehidrirani Krumpiri +item.basic_item.frequency_module.name=Frekvencijski Modul +item.basic_item.ingot_aluminum.name=Poluga Aluminija +item.basic_item.ingot_bronze.name=Poluga Bronce +item.basic_item.ingot_copper.name=Poluga Bakra +item.basic_item.ingot_steel.name=Poluga Čelika +item.basic_item.ingot_tin.name=Poluga Lima +item.basic_item.raw_silicon.name=Korišteni Silicij +item.basic_item.solar_module_0.name=Jedan Solarni Modul +item.basic_item.solar_module_1.name=Cijeli Solarni Modul +item.basic_item.wafer_advanced.name=Napredna Ploča +item.basic_item.wafer_basic.name=Osnovna Ploča +item.basic_item.wafer_solar.name=Plava Solarna Ploča +item.battery.name=Baterija +item.bucket_fuel.name=Kanta s Gorivom +item.bucket_oil.name=Kanta s Uljem +item.buggy.name=Rover +item.buggymat.seat.name=Roverovo Sjedalo +item.buggymat.storage.name=Roverova Kutija za Pohranu +item.buggymat.wheel.name=Roverov Kotač +item.canister.copper.name=Broncin Spremnik +item.canister.tin.name=Limeni Spremnik +item.canvas.name=Platno +item.cheese_block.name=Sir +item.cheese_curd.name=Komad Sira +item.compressed_meteoric_iron.name=Kompresirano Meteorsko Željezo +item.empty_liquid_canister.name=Prazan Spremnik +item.engine.tier1booster.name=Ubrzivač Ranga 1 +item.engine.tier1engine.name=Raketski Motor Ranga 1 +item.flag.name=Zastava +item.fuel.name=Raketno Gorivo +item.fuel_canister.name=Pun Spremnik Ulja +item.fuel_canister_partial.name=Djelomično Pun Spremnik Goriva +item.heavy_plating.name=Snažna Ploča +item.hot_description.name=Vruč +item.infinite_battery.name=Beskonačna Baterija +item.infinite_oxygen.name=Beskonačni Kisik +item.key.t1.name=Tamnički Ključ Ranga 1 +item.meteor_chunk.name=Meteorski Komad +item.meteor_chunk_hot.name=Meteorski Komad +item.meteoric_iron_ingot.name=Meteorsko Željezo +item.meteoric_iron_raw.name=Ostečeno Meteorsko Željezo +item.nose_cone.name=Nos Rakete +item.oil_canister.name=Pun Karnister Nafte +item.oil_canister_partial.name=Djelomično Pun Spremnik Nafte +item.oil_extractor.name=Prijenosni Sakupljač Nafte +item.oxygen_concentrator.name=Koncetrator Kisika +item.oxygen_gear.name=Reduktor Kisika +item.oxygen_mask.name=Astronautska Maska +item.oxygen_tank_heavy_empty.name=Veliki Spremnik Kisika +item.oxygen_tank_heavy_full.name=Pun Veliki Spremnik Kisika +item.oxygen_tank_light_empty.name=Maleni Spremnik Kisika +item.oxygen_tank_light_full.name=Pun Maleni Spremnik Kisika +item.oxygen_tank_med_empty.name=Srednji Spremnik Kisika +item.oxygen_tank_med_full.name=Pun Srednji Spremnik Kisika +item.parachute_black.name=Crni Padobran +item.parachute_blue.name=Svijetlo Plavi Padobran +item.parachute_brown.name=Smeđi Padobran +item.parachute_darkblue.name=Plavi Padobran +item.parachute_darkgray.name=Sivi Padobran +item.parachute_darkgreen.name=Zeleni Padobran +item.parachute_gray.name=Svijetlo Sivi Padobran +item.parachute_lime.name=Zelenkasti Padobran +item.parachute_magenta.name=Purpurno Crveni Padobran +item.parachute_orange.name=Narančasti Padobran +item.parachute_pink.name=Ružičasti Padobran +item.parachute_plain.name=Padobran +item.parachute_purple.name=Ljubičasti Padobran +item.parachute_red.name=Crveni Padobran +item.parachute_teal.name=Zelenkasto-Plavi Padobran +item.parachute_yellow.name=Žuti Padobran +item.rocket_fins.name=Rep Rakete +item.rocket_t1.name=Raketa Ranga 1 +item.schematic.name=NASA-ina Shema +item.sensor_glasses.name=Naočale sa Senzorom +item.sensor_lens.name=Senzori +item.standard_wrench.name=Standardni Ključ +item.steel_axe.name=Sjekira od Snažne Ploče +item.steel_boots.name=Čizme od Snažne Ploče +item.steel_chestplate.name=Prsni Oklop od Snažne Ploče +item.steel_helmet.name=Šljem od Snažne Ploče +item.steel_hoe.name=Motika od Snažne Ploče +item.steel_leggings.name=Gamaše od Snažne Ploče +item.steel_pickaxe.name=Kramp od Snažne Ploče +item.steel_pole.name=Čelični Stup +item.steel_shovel.name=Lopata od Snažne Ploče +item.steel_sword.name=Mač od Snažne Ploče +item.tier1.desc=Rang 1 +item_desc.powerdraw.name=Energije potrebno: %s /s +item_desc.shift.name=Pritisni %s za više +item_group.galacticraft_blocks=Galacticraft Blokovi +item_group.galacticraft_items=Galacticraft Stvari +keybind.map.name=Mapa Galaksije +keybind.sensortoggle.name=Ugasi/Upali Senzor Naočale +keybind.spaceshipinv.name=Otvori Raketski Inventar +keybind.vehiclebackward.name=Vozilo Nazad +keybind.vehicledown.name=Vozilo Dolje +keybind.vehicleforward.name=Vozilo Naprijed +keybind.vehicleleft.name=Vozilo Lijevo +keybind.vehicleright.name=Vozilo Desno +keybind.vehicleup.name=Vozilo Gore +moon.moon=Mjesec +newversion.failed.name=Galacticraft update pregled greška! Probaj opet za 15 sekundi +newversion.success.name=Nova verzija Galacticrafta pronađena: +planet.jupiter=Jupiter +planet.mercury=Merkur +planet.neptune=Neptun +planet.overworld=Minecraftia +planet.saturn=Saturn +planet.uranus=Uran +planet.venus=Venera +satellite.spacestation.overworld=Zemljina svemirska stanica +schematic.moonbuggy.name=Mjesečev Rover +schematic.rocket_t1.name=Raketa Ranga 1 +schematic.rocket_t2.name=Raketa Ranga 2 +solarsystem.sol=Solarni Sistem +star.sol=Sunce +tile.air_lock_controller.name=Jedinica Zračne Komore +tile.air_lock_frame.description=Kada napravite okvir zračne komore uništite jedan blok u njemu i stavite jedinicu zračne komore, kada je konfigurirano zračna komora će raditi. +tile.air_lock_frame.name=Zračna Komora +tile.air_lock_seal.name=Jedinica Zračne Komore +tile.aluminum_wire.alu_wire.description=Aluminijska žica se koristi za spajanje izvora energije u stroj koji ju troši. +tile.aluminum_wire.alu_wire.name=Aluminijska Žica +tile.aluminum_wire.alu_wire_heavy.description=Jaka Aluminijska žica se koristi za spajanje izvora energije u stroj koji ju troši. +tile.aluminum_wire.alu_wire_heavy.name=Jaka Aluminijska Žica +tile.arclamp.description=Arc Lampe se koriste za velika mjesta i naprave da se čudovišta ne stvaraju. +tile.arclamp.name=Arc Lampa +tile.basic_block_core.block_aluminum_gc.name=Aluminijski Blok +tile.basic_block_core.block_copper_gc.name=Bakreni Blok +tile.basic_block_core.block_meteoric_iron_gc.name=Solidno Meteorsko Željezo +tile.basic_block_core.block_tin_gc.name=Limeni Blok +tile.basic_block_core.deco_block_0.name=Limeni Dekoracijski Blok +tile.basic_block_core.deco_block_1.name=Limeni Dekoracijski Blok +tile.basic_block_core.ore_aluminum_gc.name=Ruda Aluminija +tile.basic_block_core.ore_copper_gc.name=Ruda Bakra +tile.basic_block_core.ore_silicon.name=Ruda Silicija +tile.basic_block_core.ore_tin_gc.name=Ruda Lima +tile.basic_block_moon.bricks.name=Kamenje +tile.basic_block_moon.cheesestone.name=Ruda Sira +tile.basic_block_moon.coppermoon.name=Ruda Bakra +tile.basic_block_moon.moondirt.name=Mjesečeva Trava +tile.basic_block_moon.moongrass.name=Mjesečeva Površina +tile.basic_block_moon.moonstone.name=Mjesečev Kamen +tile.basic_block_moon.tinmoon.name=Ruda Lima +tile.buggy_pad.description=Rampa za gorivo će omogućiti roveru na rampi da se puni ako se postavi 3x3 i pokraj njega postavite utovarivače goriva. Ne radi sa raketama! +tile.cargo.loader.name=Utovarivač Tereta +tile.cargo.unloader.name=Istovarivač Tereta +tile.cargo_loader.description=Utovarivači stvari mogu staviti u raketu, ali mora biti povezan sa raketnom/roverovom rampom. +tile.cargo_unloader.description=Istovarivači stvari mogu istovariti stvari iz rakete, mora biti povezan sa raketnom/roverovom rampom. +tile.cheese.description=Blokovi sira su se stvaraju na Mjesecu, može se postaviti i jesti. +tile.cheese.name=Blok Sira +tile.circuit_fabricator.description=Kružni fabrikator će obraditi osnovne materijale sa silicijom, a koristi se i za napredne strojeve. +tile.coal_generator.description=Ugljeni generator generira struju tako da uzima ugljen. +tile.collector.description=Kolektor kisika će pospremiti kisika skupljen od lišća u blizini. +tile.collector.name=Kolektor Kisika +tile.compressor.description=Kompresor će kompresirati poluge u prerađenu. +tile.compressor_electric.description=Elektronički kompresor će kompresirati poluge kao normalni kompresor ali po dvije od jednom. +tile.crude_oil.name=Ulje +tile.crude_oil_moving.name=Neobrađeno Ulje +tile.crude_oil_still.name=Neobrađeno Ulje +tile.dishbase.description=Komunikacijska antena može pratiti položaj svemirske postaje i primati obavijesti od svojih udaljenih svemirskih baza. +tile.dishbase.name=Komunikacijska Antena +tile.distributor.description=Stvoriti će balon kisika oko sebe. +tile.distributor.name=Stvarač Zračnog Balona +tile.dummyblock.cryogenic_chamber.name=Kriogenska Komora +tile.dummyblock.launch_pad.name=Lansirna Rampa +tile.dummyblock.nasa_workbench.name=NASA-in Radni Stol +tile.dummyblock.solar.name=Solarni Panel +tile.dummyblock.space_station_base.name=Baza Svemirske Stanice +tile.electric_furnace_tier1.description=Električna peć koristi se kao brža alternativa tradicionalna peć sa ugljenom. +tile.electric_furnace_tier2.description=Arc Električka peć koristi se kao brža alternativa oba dvije elekrične i peći sa ugljenom. +tile.enclosed.aluminum_wire.name=Aluminijska Žica +tile.enclosed.heavy_aluminum_wire.name=Snažnija Aluminijska Žica +tile.enclosed.copper_cable.name=Kabel Bakra +tile.enclosed.description=Djeljivi blokovi se mogu koristiti da baza ne ima otvore. +tile.enclosed.glass_fibre_cable.name=Kabel Staklenog Platna +tile.enclosed.gold_cable.name=Zlatni Kabel +tile.enclosed.hv_cable.name=HV Kabel +tile.enclosed.lv_cable.name=IV Kabel +tile.enclosed.me_cable.name=ME Kabel +tile.enclosed.fluid_pipe.name=Blok Cijevi Kisika +tile.enclosed.pipe_fluids_cobblestone.name=Vodootporna Kamena Cijev +tile.enclosed.pipe_fluids_stone.name=Vodootporna Kamena Cijev +tile.enclosed.pipe_items_cobblestone.name=Kamena Cijev +tile.enclosed.pipe_items_stone.name=Kamena Cijev +tile.enclosed.pipe_power_gold.name=Zlatna Provodna Cijev +tile.enclosed.pipe_power_stone.name=Kamena Provodna Cijev +tile.energy_storage_module_tier1.description=Skladište Energije se koristi za pohranu velike količine energije za kasniju uporabu. +tile.energy_storage_module_tier2.description=Energija za pohranu Ranga 2 se koristi za pohranu velike količine energije za kasniju uporabu. Prima više energije od svog prethodnika. +tile.fallen_meteor.description=Meteori se mogu pronači na mnogim mjesecima ili planetima koji imaju malu ili nikakvu atmosferu, nakon što ga strgate dobit čete Meteorsko Željezo. +tile.fallen_meteor.name=Meteor +tile.fuel.name=Raketsko Gorivo +tile.fuel_block.name=Gorivo +tile.fuel_loader.description=Nakom što je spojen sa rampom, utovarivač goriva će prenijeti gorivo u raketu. +tile.fuel_loader.name=Utovarivač Goriva +tile.glowstone_torch.description=Baklja od Svjetlucave Prašine se koristi isto kao baklja ali na mjestima gdje nema kisika. +tile.glowstone_torch.name=Baklja Svjetljucavog Kamena +tile.landing_pad.buggy_fueler.name=Roverov Punjač +tile.landing_pad.cargo_pad.name=Teretska Lansirna Rampa +tile.landing_pad.description=Lansirna rampa će omogućiti postavljanje raketa, ako je postavljeno u 3x3. +tile.landing_pad.landing_pad.name=Lansirna Rampa +tile.landing_pad_full.name=Raketska Lansirna Rampa +tile.machine.0.name=Ugljenski Generator +tile.machine.1.name=Energetsko Skladište +tile.machine.2.name=Električna Peć +tile.machine.3.name=Kompresor +tile.machine.7.name=Električna Arc Peć +tile.machine.8.name=Energijsko Skladište +tile.machine2.4.name=Električni Kompresor +tile.machine2.5.name=Strujni Krug +tile.machine2.6.name=Zračno Skladište +tile.moon_stairs_brick.name=Mjesečeve Ciglene Stube +tile.moon_stairs_stone.name=Stube Mjesečevog Kamena +tile.ore_copper.name=Ruda Bakra +tile.ore_tin.name=Ruda Lima +tile.oxygen_compressor.0.name=Kompresor Kisika +tile.oxygen_compressor.1.name=Dekompresor Kisika +tile.oxygen_compressor.description=Kompresor kisika će skupiti kisik iz memorije u spremnik kisika. +tile.oxygen_decompressor.description=Dekompresor kisika će izbaciti kisik iz spremnika kisika u memoriju. +tile.oxygen_detector.description=Detektor kisika će emitirati signal crvenog kamena kada je kisik oko njega. +tile.oxygen_detector.name=Detektor Kisika +tile.oxygen_pipe.description=Cijev sa kisikom će prenjeti kisik iz jednog stroja u drugi. +tile.oxygen_pipe.name=Cijev za Kisik +tile.oxygen_storage_module.description=Skladište Kisika se koristi za pohranu velike količine kisika za kasniju uporabu. +tile.parachest.description=PadoŠkrinja pada s vama na neki planet ili svemirku stanicu, u sebi sadrži Raketne Rampe, Inventar, Gorivo i stvari s prošlog lansiranja. +tile.parachest.name=PadoŠkrinja +tile.refinery.description=Rafinerija treba ulje i energiju, a stvara gorivo za rakete i ostala vozila. +tile.refinery.name=Rafinerija +tile.rocket_workbench.description=NASA-in Radni stol se može koristiti za rađenje radnih vozila, ali ako ih želite više morate dobiti shemu iz tamnica. +tile.rocket_workbench.name=NASA-in Radni Stol +tile.sapling2.birch.name=Sjemenka Breze +tile.sapling2.jungle.name=Sjemenka Drveta Džungle +tile.sapling2.oak.name=Sjemenka Hrasta +tile.sapling2.spruce.name=Sjemenka Smreke +tile.sealer.description=Djelitelj kisika će provjeriti da li je prostor zatvoren i dovoljno velik za njega, te ga napuniti sa kisikom. +tile.sealer.name=Djelitelj Kisika +tile.slab_gc_half.moon_bricks_slab.name=Mjesečeva Ciglena Ploča +tile.slab_gc_half.moon_slab.name=Ploča Mjesečevog Kamena +tile.slab_gc_half.tin_slab_1.name=Limene Ploče +tile.slab_gc_half.tin_slab_2.name=Limene Ploče +tile.solar.advanced_solar.name=Napredni Solarni Panel +tile.solar.basic_solar.name=Osnovni Solarni Panel +tile.solar_adv.description=Napredni solarni panel uzima energiju iz sunca i sprema je za daljno korištenje, energiju uzima po cijelom danu zato što se pokreče. +tile.solar_basic.description=Solarni panel uzima energiju iz sunca i sprema je za daljno korištenje, najviše energije uzima u podne zato što se ne pokreče. +tile.space_station_base.name=Glavni Dio Svemirske Stanice +tile.spin_thruster.description=Ubrzivači okretanja se koriste da se svemirske stanice vrte. +tile.spin_thruster.name=Propeler Vrtnje +tile.telemetry.description=To okuplja korisne podatke iz povezanih raketa, igrača i rulja. Najbolji smješteni u blizini na ekran. Koristite frekvencijski modul za uspostavu podatkovne veze. +tile.telemetry.name=Telemetrijska Jedinica +tile.tin_stairs_1.name=Limene Stube +tile.tin_stairs_2.name=Limene Stube +tile.treasure_chest.description=Rang 1 škrinja s blagom će se generirati na mjesečevim tamnicama, mogu se otključati kada ubijete boss-a. +tile.treasure_chest.name=Škrinja sa Blagom +tile.unlit_torch.name=Baklja +tile.unlit_torch_stone.name=Kamena Baklja +tile.unlit_torch_lit.name=Baklja +tile.unlit_torch_stone_lit.name=Kamena Baklja +tile.view_screen.description=Zasloni dodaju konačni dodir u bazi. Desnom tipkom miša mijenja prikazane informacije. +tile.view_screen.name=Zaslon +tile.wall_gc.moon.name=Zid Mjesečevog Kamena +tile.wall_gc.moon_bricks.name=Mjesečev Cigleni Zid +tile.wall_gc.tin.name=Limeni Zid diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hu_hu.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hu_hu.lang new file mode 100644 index 00000000..b6e022a3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hu_hu.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s a %s légkörébe lett küldve. +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name=Teher-Berakodó +container.cargounloader.name=Teher-Kirakodó +container.fuelloader.name=Üzemanyag-Töltő +container.lander.name=Leszállóegység +container.oxygencollector.name=Légkiválasztó +container.oxygencompressor.name=Légsűrítő +container.oxygendecompressor.name=Légritkító +container.oxygendistributor.name=Légbuborék-Fújó +container.oxygensealer.name=Légnyomás-Fenntartó +container.parachest.name=Utánpótlásszállító-Láda +container.refinery.name=Finomító +container.solaradvanced.name=Fejlett Naperőmű +container.solarbasic.name=Kezdetleges Naperőmű +container.spaceship.name=1-Es Szintű rakéta +container.treasurechest.name=Kincsesláda +death.attack.oxygen_suffocation=%1$s -t széttépte a vákuum. Hoppá. +death.attack.spaceship_crash=%1$s rakétája a földbe vágódott. +death.attack.thermal=%1$s forgot thermal protection ##NEEDS TRANSLATE## +dimension.moon.name=Hold +dimension.overworld.name=Föld +dimension.sun.name=Nap +entity.alien_villager.name=Idegen Falusi +entity.buggy.name=Rover +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Fejlett Creeper +entity.evolved_skeleton.name=Fejlett Csontváz +entity.evolved_skeleton_boss.name=Fejlett Csontváz-Főgonosz +entity.evolved_spider.name=Fejlett Pók +entity.evolved_zombie.name=Fejlett Zombi +entity.flag.name=Zászló +entity.gcflag.name=Zászló +entity.gravity_arrow.name=Nyílvessző +entity.lander.name=Leszállóegység +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteordarab +entity.oxygen_bubble.name=Légbuborék +entity.para_chest.name=Utánpótlás-Szállító Láda +entity.rocket_t1.name=1-Es Szintű Rakéta +galaxy.milky_way=Tejútrendszer +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Akkumlátor helye, tegyen ide akkumlátort, +gui.battery_slot.desc.1=vagy kössön be vezetéken áramot. +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Gyorsítás +gui.buggy.decel.name=Lassítás +gui.buggy.inv.name=Eszköztár és üzemanyagszint +gui.buggy.storage_space=Teherkapacitás +gui.buggy.turn.name=Jobbra-Balra Fordulás +gui.button.back.name=Vissza +gui.button.disable.name=Leállítás +gui.button.disableseal.name=Légnyomásfenntartás Leállítása +gui.button.enable.name=Indítás +gui.button.enableseal.name=Légnyomásfenntartás Indítása +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name=Üzemanyag Betöltése +gui.button.loaditems.name=Eszközök Berakodása +gui.button.next.name=Következő +gui.button.refine.name=Finomítás +gui.button.stoploading.name=Berakodás Megszakítása +gui.button.stoprefine.name=Finomítás Megszakítása +gui.button.stopunloading.name=KIrakodás Megszakítása +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name=Kirakodás Megkezdése +gui.button.unlockschematic.name=Tervrajz Feloldása +gui.checkbox.horizontal.name=Vízszintes helyzet +gui.checkbox.invert.name=Fordított mód +gui.checkbox.player_name.name=Célpont játékos neve +gui.checkbox.player_within.name=Nyitás játékos közelségére +gui.checkbox.redstone_signal.name=Nyitás Vöröskő-jelre +gui.chest.warning.wrongkey=Szügsége lesz egy %s Es Szintű Dungeon-Kulcsra a láda kinyitásához. +gui.choose_planet.desc.moon=Lakható#Nincs légkör#Gravitáció: 18% +gui.choose_planet.desc.overworld=Tele Van Élettel#Lakható#Gravitáció: 100% +gui.chooseplanet.alreadycreated1.name=Egy Űrállomás Már +gui.chooseplanet.alreadycreated2.name=Létre Van Hozva Itt! +gui.chooseplanet.cannotcreate1.name=Nem Lehet Űrállomást +gui.chooseplanet.cannotcreate2.name=Létrehozni Itt. +gui.creative_only.desc=Csak Kreatív Módban! +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Jelenlegi Sebesség +gui.docking_rocket.distance_from.name=Távolság A Célponttól +gui.docking_rocket.target_vel.name=Célpont Sebessége +gui.docking_rocket.warning.name.0=Nyomja Meg a %s -t a lassításhoz +gui.docking_rocket.warning.name.1=Nyomja Meg a %s -t a gyorsításhoz +gui.dropbox.player_distance.name.0=1 Méter +gui.dropbox.player_distance.name.1=2 Méter +gui.dropbox.player_distance.name.2=5 Méter +gui.dropbox.player_distance.name.3=10 Méter +gui.electric_compressor.desc.0=Üzemel +gui.energy_storage.desc.0=Energia-Raktár +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Egy zászló már le van rakva itt. +gui.frequency_module.desc.0=Képes észlelni halk hanghullámokat +gui.frequency_module.desc.1=és távoli jeleket +gui.frequencymodule.warning0=Szügsége lesz egy +gui.frequencymodule.warning1=-re hogy megfelelően halljon itt. +gui.fuel_output.desc.0=Tegyen üres üzemanyagkannákat +gui.fuel_output.desc.1=erre a helyre hogy feltöltse +gui.fuel_output.desc.2=őket az üzemanyagtartályból. +gui.fuel_tank.desc.0=Üzemanyagtartály. Üzemanyag-Töltő +gui.fuel_tank.desc.1=szügséges a feltöltéséhez. +gui.fuel_tank.desc.2=Üzemanyagtartály, amit +gui.fuel_tank.desc.3=Üzemanyagkannákkal lehet feltölteni. +gui.fuel_tank.desc.4=Üzemanyagtartály +gui.infinite_item.desc=Csak Kreatív Módban! +gui.lander.velocity=Érkezési sebesség: +gui.lander.velocityu=m/s +gui.lander.warning2=Nyomja le " +gui.lander.warning3=" -t a lelassuláshoz. +gui.max_output.desc=Max Output ##NEEDS TRANSLATE## +gui.message.addnewsch.name=Új tervrajz +gui.message.apply.name=Apply ##NEEDS TRANSLATE## +gui.message.assign_name.name=Assign Name ##NEEDS TRANSLATE## +gui.message.atmosphere.name=Légkör +gui.message.back.name=Vissza +gui.message.breed.name=Breed ##NEEDS TRANSLATE## +gui.message.bubble_visible.name=A Buborék Láthatósága +gui.message.can_create_space_station.name=Itt lehet űrállomást létrehozni. +gui.message.cancel.name=Cancel ##NEEDS TRANSLATE## +gui.message.cannot_create_space_station.name=Itt nem lehet űrállomást létrehozni. +gui.message.catalog.name=Katalógus +gui.message.click_again.0.name=Kattintson még egyszer a nagyításhoz (holdak és műholdak megtekintése) +gui.message.click_again.1.name=Kattintson még egyszer a nagyításhoz (holdak megtekintése) +gui.message.click_again.2.name=Kattintson még egyszer a nagyításhoz (műholdak megtekintése) +gui.message.click_again.3.name=Kattintson még egyszer a nagyításhoz +gui.message.clicklink=Click for Galacticraft Wiki ##NEEDS TRANSLATE## +gui.message.create_ss.name=Létrehozás +gui.message.daynightcycle.name=Napkörforgás +gui.message.energy=Energia +gui.message.environment.name=Környezet hatása: +gui.message.exit.name=Kilépés +gui.message.fuel.name=Üzemanyag +gui.message.full.name=megtelve +gui.message.generating.name=Áramot Fejleszt +gui.message.grow.name=Grow ##NEEDS TRANSLATE## +gui.message.heal.name=Heal ##NEEDS TRANSLATE## +gui.message.help1=For Galacticraft help ##NEEDS TRANSLATE## +gui.message.help1a=To see this message again at any time, type ##NEEDS TRANSLATE## +gui.message.help2=For Space Program guidance ##NEEDS TRANSLATE## +gui.message.help3=For help with oil ##NEEDS TRANSLATE## +gui.message.in.name=Befele +gui.message.launch.name=Kilövés +gui.message.max_energy=Maximális Energia +gui.message.meansurfacetemp.name=Felszíni hőmérséklet +gui.message.moon.atmosphere.0.name=Nincs +gui.message.moon.daynightcycle.0.name=29.5 Földi nap +gui.message.moon.meansurfacetemp.0.name=(Világos oldal) 253C +gui.message.moon.meansurfacetemp.1.name=(Sötét oldal) -153C +gui.message.moon.surfacecomposition.0.name=Bazalti sziklák +gui.message.moon.surfacecomposition.1.name=és Sajtdarabok +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(a Földinek 18%-a) +gui.message.of.name=of ##NEEDS TRANSLATE## +gui.message.oil.name=Olaj +gui.message.out.name=Kifele +gui.message.overworld.atmosphere.0.name=Nitrogén és Oxigén +gui.message.overworld.atmosphere.1.name=Életnek ad otthont +gui.message.overworld.daynightcycle.0.name=1 Földi nap +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Kő, föld, +gui.message.overworld.surfacecomposition.1.name=és sóder +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(a Földinek 100% -a) +gui.message.prelaunch=Pre-launch checklist ##NEEDS TRANSLATE## +gui.message.rename.name=Rename ##NEEDS TRANSLATE## +gui.message.select_ss.name=Select a Space Station ##NEEDS TRANSLATE## +gui.message.ss_owner.name=Owner: ##NEEDS TRANSLATE## +gui.message.status.name=Állapot +gui.message.strengthen.name=Strengthen ##NEEDS TRANSLATE## +gui.message.surfacecomposition.name=Felszín összetétele +gui.message.surfacegravity.name=Felszíni gravitáció +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=%d -Es Szintű +gui.message.unnamed.name=Unnamed ##NEEDS TRANSLATE## +gui.missing_core.name.0=A 'MicdoodleCore' nem található a 'mods' mappában. +gui.missing_core.name.1=Galacticraft betöltése sikertelen. +gui.missing_core.name.2=Zárja be a Minecraftot és telepítse a 'MicdoodleCore'-t! +gui.missing_core.name.3=Kattintson ide a letöltési linkért. +gui.new_schematic.slot.desc.0=Ide tegye a feloldandó +gui.new_schematic.slot.desc.1=új tervrajzokat. (olyat +gui.new_schematic.slot.desc.2=bolygókon és holdakon +gui.new_schematic.slot.desc.3=levő Dungeonokban találni) +gui.oil_tank.desc.0=Olajtartály, Olajkannákkal +gui.oil_tank.desc.1=lehet feltölteni. +gui.oxygen.warning=Életfenntartó-Rendszer Hiányos! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister or tank ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.0=Levegő-Raktár +gui.oxygen_storage.desc.1=Levegő +gui.oxygen_use.desc=Elhasznált Levegő +gui.per_second=/s ##NEEDS TRANSLATE## +gui.player.bpm=bpm ##NEEDS TRANSLATE## +gui.player.food=Food ##NEEDS TRANSLATE## +gui.player.health=Health ##NEEDS TRANSLATE## +gui.player.ouch=ouch!!!! ##NEEDS TRANSLATE## +gui.receiver.cannot_attach=Ide nem lehet vevőt csatolni. +gui.requires_controller.desc=Távvezérlő Szügséges! +gui.rocket.countdown=Countdown ##NEEDS TRANSLATE## +gui.rocket.height=Height ##NEEDS TRANSLATE## +gui.rocket.inv.name=Eszköztár és üzemanyagszint +gui.rocket.launch.name=Kilövés +gui.rocket.launched=Launched ##NEEDS TRANSLATE## +gui.rocket.on_launchpad=On launchpad ##NEEDS TRANSLATE## +gui.rocket.speed=Speed ##NEEDS TRANSLATE## +gui.rocket.turn.name=Jobbra-Balra Fordulás +gui.rocket.updown.name=Föl-Le Bólintás +gui.rocket.warning.nofuel=Először töltsön be hajtóanyagot. +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! ##NEEDS TRANSLATE## +gui.rocket.warning.noparachute=Nincs Ejtőernyője! Ha megnyomja mégegyszer a kilövést, már nem biztos hogy élve visszatérhet. +gui.rocket_type.0=Raktárhely: 18 +gui.rocket_type.1=Raktárhely: 36 +gui.rocket_type.2=Raktárhely: 56 +gui.rocket_type.3=Előre feltöltve +gui.seconds=s ##NEEDS TRANSLATE## +gui.sensor.advanced=Érzékeny mód +gui.sensor.advancedoff=Kikapcsolva +gui.sensor.advancedon=Bekapcsolva +gui.show_bubble.desc.0=Buborék megmutatása +gui.skeleton_boss.message=A főgonosz elspawnolva, harc közben ne hagyja el a főgonosz termét! Újra lépjen be a terembe a főgonosz újraspawnolásához.. +gui.space_race.chat.add_success=%s has joined the Space Race! ##NEEDS TRANSLATE## +gui.space_race.chat.already_part=You are already a part of this space race! ##NEEDS TRANSLATE## +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. ##NEEDS TRANSLATE## +gui.space_race.chat.not_found=Could not find player with name: %s ##NEEDS TRANSLATE## +gui.space_race.chat.remove_success=%s has been removed from the Space Race. ##NEEDS TRANSLATE## +gui.space_race.chat.to_join=To join %s use command %s ##NEEDS TRANSLATE## +gui.space_race.coming_soon=Coming Soon ##NEEDS TRANSLATE## +gui.space_race.create.add_players.name=Játékos(ok) hozzáadása +gui.space_race.create.back.name=Vissza +gui.space_race.create.brush_radius.name=Ecset átmérője +gui.space_race.create.brush_size.name=Ecset mérete +gui.space_race.create.change_color.name.0=Csapat +gui.space_race.create.change_color.name.1=színének +gui.space_race.create.change_color.name.2=változtatása +gui.space_race.create.close.name=Bezárás +gui.space_race.create.customize.name=Zászló szerkesztése +gui.space_race.create.eraser_radius.name=Radít átmérője +gui.space_race.create.eraser_size.name=Radír mérete +gui.space_race.create.global_stats.name=Globális statisztikák +gui.space_race.create.invite_player.name=Játékos meghívása +gui.space_race.create.player_radius.name=Note:A játékosok 25m-en belül kell tartózkodjanak +gui.space_race.create.rem_players.name=Játékos(ok) eltávolítása +gui.space_race.create.remove.name=Eltávolítás +gui.space_race.create.remove_player.name=Játékos eltávolítása +gui.space_race.create.rename.name=Csapat átnevezése +gui.space_race.create.send_invite.name=Meghívó küldése +gui.space_race.create.server_stats.name=Szerveri statisztikák +gui.space_race.create.title.name=Űrverseny-Kezelő +gui.space_race.create.title.name.0=Space Race ##NEEDS TRANSLATE## +gui.space_race.create.title.name.1=Manager ##NEEDS TRANSLATE## +gui.space_race.join.member_count.name=%d tag +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Kapitány +gui.space_race.join.title.name=Csatlakozás az Űrversenyhez +gui.space_race.unnamed=Unnamed Team ##NEEDS TRANSLATE## +gui.spacestation.added=You've been added to %s's Space Station accepted players! ##NEEDS TRANSLATE## +gui.spacestation.addsuccess=Successfully added %s to Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= +gui.spacestation.removesuccess=Successfully removed %s from Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.to_allow_entry=hogy megengedje a másik játékosnak a belépést ebbe az űrállomásba +gui.spacestation.type_command=Írja be hogy +gui.status.active.name=Üzemel +gui.status.air_lock_closed.name=Légzsilip Bezárva +gui.status.air_lock_open.name=Légzsilip Kinyitva +gui.status.blockedfully.name=A Nap Nem Látható +gui.status.blockedpartial.name=A Nap Nem Teljesen Látható +gui.status.check_pending.name=Folytatás Ellenőrzése +gui.status.check_starting.name=Kezdés Ellenőrzése +gui.status.checking_seal.name=Légnyomás Ellenőrzése +gui.status.collecting.name=Kiválasztás Folyamatban +gui.status.collectingenergy.name=Energiát Fejleszt +gui.status.compressing.name=Préselés Folyamatban +gui.status.disabled.name=Leállítva +gui.status.fulltank.name=Oxigénpalack Feltöltve +gui.status.generating.name=Energiát Termel +gui.status.hull_heat.name=Kazán Befűtése: +gui.status.idle.name=Nem Üzemel +gui.status.missingleaves.name=Nincs Elég Falevél +gui.status.missingoxygen.name=Nincs Elég Levegő +gui.status.missingpower.name=Nincs Elég Energia +gui.status.missingtank.name=Nincs Érvényes Oxigigénpalack +gui.status.nofuel.name=Nincs Feltöltendő Üzemanyag +gui.status.noinvtarget.name=Nincs Eszköztár A Célponton +gui.status.noitems.name=Nincsenek Feltöltendő Eszközök +gui.status.nooil.name=Nincs Olaj +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Nem Üzemel +gui.status.notargetload.name=Nincs Feltölthető Célpont +gui.status.notargetunload.name=Nincs Kirakodható Célpont +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name=Esik Az Eső +gui.status.ready.name=Kész +gui.status.refining.name=Finomítás Folyamatban +gui.status.running.name=Üzemel +gui.status.sealed.name=Légnyomás Fenntartva +gui.status.sealerblocked.name=Kimeneti Nyílás Eltorlaszolva +gui.status.sun_visible.name=A Nap Látható +gui.status.tank_empty.name=Oxigénpalack Üres +gui.status.targetempty.name=A Célpont Üres +gui.status.targetfull.name=A Célpont Megtelt +gui.status.unknown.name=Ismeretlen +gui.status.unsealed.name=Túl Nagy A Terület/Nem Szivárgásmentes +gui.tank.oxygen_remaining=Levegő Mennyisége +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) ##NEEDS TRANSLATE## +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! ##NEEDS TRANSLATE## +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! ##NEEDS TRANSLATE## +gui.telemetry_succeed.message=Telemetry link created. ##NEEDS TRANSLATE## +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s Légzsilip-Kezelőpultja. +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. ##NEEDS TRANSLATE## +gui.warning=VIGYÁZAT! +gui.warning.invalid_thermal=Invalid Thermal Protection! ##NEEDS TRANSLATE## +gui.warning.noroom=Nincs elég hely. +item.air_fan.name=Légkeringető Propeller +item.air_vent.name=Légbeömlő Nyílás +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Ételkonzerv +item.basic_item.compressed_aluminum.name=Préselt Alumínium +item.basic_item.compressed_bronze.name=Préselt Bronz +item.basic_item.compressed_copper.name=Préselt Réz +item.basic_item.compressed_iron.name=Préselt Vas +item.basic_item.compressed_steel.name=Préselt Acél +item.basic_item.compressed_tin.name=Préselt Ón +item.basic_item.dehydrated_apple.name=Almakonzerv +item.basic_item.dehydrated_carrot.name=Répakonzerv +item.basic_item.dehydrated_melon.name=Dinnyekonzerv +item.basic_item.dehydrated_potato.name=Burgonyakonzerv +item.basic_item.frequency_module.name=Rádió-Vevő +item.basic_item.ingot_aluminum.name=Alumíniumrúd +item.basic_item.ingot_bronze.name=Bronzrúd +item.basic_item.ingot_copper.name=Rézrúd +item.basic_item.ingot_steel.name=Acélrúd +item.basic_item.ingot_tin.name=Ónrúd +item.basic_item.raw_silicon.name=Nyers Szilikon +item.basic_item.solar_module_0.name=Napelemcella +item.basic_item.solar_module_1.name=Napelem-Panel +item.basic_item.wafer_advanced.name=Fejlett Korong +item.basic_item.wafer_basic.name=Kezdetleges Korong +item.basic_item.wafer_solar.name=Napelem-Alapanyag +item.battery.name=Akkumlátor +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Rover +item.buggymat.seat.name=Rover-Ülés +item.buggymat.storage.name=Rover-Teherláda +item.buggymat.wheel.name=Rover-Kerék +item.canister.copper.name=Rézkanna +item.canister.tin.name=Ónkanna +item.canvas.name=Vászon +item.cheese_block.name=Sajtkorong +item.cheese_curd.name=Sajtdarab +item.compressed_meteoric_iron.name=Préselt Meteori Vas +item.empty_liquid_canister.name=Üres Folyadékkanna +item.engine.tier1booster.name=1-Es Szintű Gyorsítórakéta +item.engine.tier1engine.name=1-Es Szintű Rakétamotor +item.flag.name=Zászló +item.fuel.name=Rakéta-Hajtóanyag +item.fuel_canister.name=Telitöltött Üzemanyagkanna +item.fuel_canister_partial.name=Nem Teljesen Telitöltött Üzemanyagkanna +item.heavy_plating.name=Nehéz Borítólemez +item.hot_description.name=Égő! +item.infinite_battery.name=Kifogyhatatlan Akkumlátor +item.infinite_oxygen.name=Infinite Oxygen Supply ##NEEDS TRANSLATE## +item.key.t1.name=1-Es Szintű Dungeon-Kulcs +item.meteor_chunk.name=Elhajítható Meteordarab +item.meteor_chunk_hot.name=Égő Elhajítható meteordarab +item.meteoric_iron_ingot.name=Meteori Vasrúd +item.meteoric_iron_raw.name=Meteori Vas +item.nose_cone.name=Orrkúp +item.oil_canister.name=Telitöltött Olajkanna +item.oil_canister_partial.name=Nem Teljesen Telitöltött Olajkanna +item.oil_extractor.name=Hordozható Olajkifejtő +item.oxygen_concentrator.name=Légpumpa +item.oxygen_gear.name=Életfenntartórendszer +item.oxygen_mask.name=Oxigénmaszk +item.oxygen_tank_heavy_empty.name=Üres Nagy oxigénpalack +item.oxygen_tank_heavy_full.name=Nagy Oxigénpalack +item.oxygen_tank_light_empty.name=Üres Kis Oxigénpalack +item.oxygen_tank_light_full.name=Kis Oxigénpalack +item.oxygen_tank_med_empty.name=Üres Közepes Oxigénpalack +item.oxygen_tank_med_full.name=Közepes Oxigénpalack +item.parachute_black.name=Fekete Ejtőernyő +item.parachute_blue.name=Világoskék Ejtőernyő +item.parachute_brown.name=Barna Ejtőernyő +item.parachute_darkblue.name=Kék Ejtőernyő +item.parachute_darkgray.name=Szürke Ejtőernyő +item.parachute_darkgreen.name=Zöld Ejtőernyő +item.parachute_gray.name=Világosszürke Ejtőernyő +item.parachute_lime.name=Neonzöld Ejtőernyő +item.parachute_magenta.name=Bíborvörös +item.parachute_orange.name=Narancssárga Ejtőernyő +item.parachute_pink.name=Rózsaszín Ejtőernyő +item.parachute_plain.name=Ejtőernyő +item.parachute_purple.name=Lila Ejtőernyő +item.parachute_red.name=Vörös Ejtőernyő +item.parachute_teal.name=Türkizkék Ejtőernyő +item.parachute_yellow.name=Sárga Ejtőernyő +item.rocket_fins.name=Légterelő Szárny +item.rocket_t1.name=1-Es Szintű Rakéta +item.schematic.name=Űrjármű-Tervrajz +item.sensor_glasses.name=Szenzoros Szemüveg +item.sensor_lens.name=Szenzoros Lencse +item.standard_wrench.name=Csavarkulcs +item.steel_axe.name=Nehézacél-Balta +item.steel_boots.name=Nehézacél-Bakancs +item.steel_chestplate.name=Nehézacél-Mellvért +item.steel_helmet.name=Nehézacél-Sisak +item.steel_hoe.name=Nehézacél-Kapa +item.steel_leggings.name=Nehézacél-Lábszárvédő +item.steel_pickaxe.name=Nehézacél-Csákány +item.steel_pole.name=Acélrúd +item.steel_shovel.name=Nehézacél-Ásó +item.steel_sword.name=Nehézacél-Kard +item.tier1.desc=1-Es Szintű +item_desc.powerdraw.name=Power required: %s /s ##NEEDS TRANSLATE## +item_desc.shift.name=Press %s for more info ##NEEDS TRANSLATE## +item_group.galacticraft_blocks=Galacticraft Építőelemek +item_group.galacticraft_items=Galacticraft Eszközök +keybind.map.name=Naprendszer térképének megnyitása +keybind.sensortoggle.name=Szenzoros Szemüveg üzemmódjának váltása +keybind.spaceshipinv.name=Űrjármű felszerelésének megnyitása +keybind.vehiclebackward.name=Űrjármű mozgatása hátra +keybind.vehicledown.name=Űrjármű mozgatása lefelé +keybind.vehicleforward.name=Űrjármű mozgatása előre +keybind.vehicleleft.name=Űrjármű mozgatása balra +keybind.vehicleright.name=Űrjármű mozgatása jobbra +keybind.vehicleup.name=Űrjármű mozgatása felfelé +moon.moon=Hold +newversion.failed.name=Galacticraft frissítés ellenőrzése sikertelen. Próbálja úzra 15 másodperc múlva. +newversion.success.name=Galacticraft egyéb verzió észlelve: +planet.jupiter=Jupiter +planet.mercury=Merkúr +planet.neptune=Neptunusz +planet.overworld=Föld +planet.saturn=Szaturnusz +planet.uranus=Uránusz +planet.venus=Vénusz +satellite.spacestation.overworld=Overworld Space Station ##NEEDS TRANSLATE## +schematic.moonbuggy.name=Rover +schematic.rocket_t1.name=1-Es Szintű Rakéta +schematic.rocket_t2.name=2-Es Szintű Rakéta +solarsystem.sol=Naprendszer +star.sol=Sol ##NEEDS TRANSLATE## +tile.air_lock_controller.name=Légzsilip-Kezelőpult +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Légzsilip-Keret +tile.air_lock_seal.name=Légzsilip-Ajtó +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name=Alumíniumvezeték +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Its higher capacity boosts efficiency for Tier 2 machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name=Nehéz Alumíniumvezeték +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Reflektor +tile.basic_block_core.block_aluminum_gc.name=Alumíniumtömb +tile.basic_block_core.block_copper_gc.name=Réztömb +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron ##NEEDS TRANSLATE## +tile.basic_block_core.block_tin_gc.name=Óntömb +tile.basic_block_core.deco_block_0.name=Ón-Díszítőelem +tile.basic_block_core.deco_block_1.name=Ón-Díszítőelem +tile.basic_block_core.ore_aluminum_gc.name=Alumíniumérc +tile.basic_block_core.ore_copper_gc.name=Rézérc +tile.basic_block_core.ore_silicon.name=Szilikonérc +tile.basic_block_core.ore_tin_gc.name=Ónérc +tile.basic_block_moon.bricks.name=Holdi Dungeon-fal +tile.basic_block_moon.cheesestone.name=Holdi Sajtérc +tile.basic_block_moon.coppermoon.name=Holdi Rézérc +tile.basic_block_moon.moondirt.name=Holdsár +tile.basic_block_moon.moongrass.name=Holdpor +tile.basic_block_moon.moonstone.name=Holdkő +tile.basic_block_moon.tinmoon.name=Holdi Ónérc +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Teher-Berakodó +tile.cargo.unloader.name=Teher-Kirakodó +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Sajtkorong +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name=Légkiválasztó +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than its predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name=Kőolaj +tile.crude_oil_still.name=Kőolaj +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Communications Dish ##NEEDS TRANSLATE## +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name=Légbuborék-Fúlyó +tile.dummyblock.cryogenic_chamber.name=Hibernációs Kamra +tile.dummyblock.launch_pad.name=Rakéta-Kilövőállás +tile.dummyblock.nasa_workbench.name=Rakéta-Barkácsasztal +tile.dummyblock.solar.name=Napelem +tile.dummyblock.space_station_base.name=Űrállomás-Spawnhely +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Szivárgásmentes Alumíniumvezeték +tile.enclosed.heavy_aluminum_wire.name=zivárgásmentes Nehéz Alumíniumvezeték +tile.enclosed.copper_cable.name=Sealable Copper Cable +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fiber Cable +tile.enclosed.gold_cable.name=Sealable Gold Cable +tile.enclosed.hv_cable.name=Sealable HV Cable +tile.enclosed.lv_cable.name=Sealable Ultra-Low-Current Cable +tile.enclosed.me_cable.name=Sealable ME Cable +tile.enclosed.fluid_pipe.name=Szivárgásmentes Légcső +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Fluid Pipe +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Fluid Pipe +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe +tile.enclosed.pipe_power_gold.name=Sealable Golden Kinesis Pipe +tile.enclosed.pipe_power_stone.name=Sealable Stone Kinesis Pipe +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than its predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Fallen Meteor +tile.fuel.name=Üzemanyag +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name=Üzemanyag-Töltő +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Izzókö-Fáklya +tile.landing_pad.buggy_fueler.name=Rover-Üzemanyagtöltő Platform +tile.landing_pad.cargo_pad.name=Teherrakéta-Kilövőállás +tile.landing_pad.description=Launch Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name=Rakéta-Kilövőállás +tile.landing_pad_full.name=Kész Rakéta-Kilövőállás +tile.machine.0.name=Szénerőmű +tile.machine.1.name=Akkumlátor-Telep +tile.machine.2.name=Elektromos Kemence +tile.machine.3.name=Préselőgép +tile.machine.7.name=Elektromos Duplázó-Kemence +tile.machine.8.name=Nehéz Akkumlátortelep +tile.machine2.4.name=Elektromos Préselőgép +tile.machine2.5.name=Áramkör-Készítő +tile.machine2.6.name=Légraktár +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.moon_stairs_stone.name=Moon Rock Stairs ##NEEDS TRANSLATE## +tile.ore_copper.name=Rézérc +tile.ore_tin.name=Ónérc +tile.oxygen_compressor.0.name=Légsűrítő +tile.oxygen_compressor.1.name=Légritkító +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name=Légnyomás-Mérő +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name=Légcső +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Utánpótlásszállító-Láda +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name=Finomító +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=Rakéta-Barkácsasztal +tile.sapling2.birch.name=Nyírfacsemete +tile.sapling2.jungle.name=Trópusifa-Csemete +tile.sapling2.oak.name=Tölgycsemete +tile.sapling2.spruce.name=Fenyőcsemete +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name=Légnyomás-Fenntartó +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.moon_slab.name=Moon Rock Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.solar.advanced_solar.name=Fejlett Naperőmű +tile.solar.basic_solar.name=Kezdetleges Naperőmű +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Space Station Arrival Block ##NEEDS TRANSLATE## +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Forgató-Fúvóka +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Telemetry Unit ##NEEDS TRANSLATE## +tile.tin_stairs_1.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.tin_stairs_2.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Kincsesláda +tile.unlit_torch.name=Fáklya +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Fáklya +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Display Screen ##NEEDS TRANSLATE## +tile.wall_gc.moon.name=Moon Rock Wall ##NEEDS TRANSLATE## +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall ##NEEDS TRANSLATE## +tile.wall_gc.tin.name=Tin Decoration Wall ##NEEDS TRANSLATE## diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/it_it.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/it_it.lang new file mode 100644 index 00000000..41c1a3a7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/it_it.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s +commands.dimensionteleport=%s was sent into the atmosphere%s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s +commands.joinrace.no_team=The team needs to be specified! Usage: %s +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s +commands.ssnewowner.wrong_usage=Impossibile riconoscere la Stazione con ID: ID# - Esiste? Utilizzo: %s +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel +container.solarbasic.name=Basic Solar Panel +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.oxygen_suffocation=%1$ ha esaurito l'ossigeno. +death.attack.spaceship_crash=Il razzo di %1$ si è schiantato da solo a terra. Ops. +death.attack.thermal=%1$ ha dimenticato la protezione per le alte temperature. +dimension.moon.name=Luna +dimension.overworld.name=Terra +dimension.sun.name=Sole +entity.alien_villager.name=Paesano alieno +entity.buggy.name=Rover +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper evoluto +entity.evolved_skeleton.name=Scheletro evoluto +entity.evolved_skeleton_boss.name=Scheletro-boss evoluto +entity.evolved_spider.name=Ragno evoluto +entity.evolved_zombie.name=Zombie evoluto +entity.flag.name=Bandiera +entity.gcflag.name=Bandiera +entity.gravity_arrow.name=Freccia +entity.lander.name=Space Lander +entity.meteor.name=Meteora +entity.meteor_chunk.name=Pezzo di meteorite +entity.oxygen_bubble.name=Bolla di ossigeno +entity.para_chest.name=Cassa del razzo +entity.rocket_t1.name=Razzo di livello 1 +galaxy.milky_way=Via lattea +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on Planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Rover +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Set Custom Mod Ore IDs to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Slot della batteria, piazza la batteria qui +gui.battery_slot.desc.1=o usa dei cavi +gui.bed_fail.message=Ma se l'ossigeno finisse mentre dormo? Avrò bisogno di una camera criogenica per dormire nello spazio! +gui.buggy.accel.name=Accelera +gui.buggy.decel.name=Decelera +gui.buggy.inv.name=Inventario / Benzina +gui.buggy.storage_space=Spazio dell'inventario +gui.buggy.turn.name=Gira a destra-sinistra +gui.button.back.name=Indietro +gui.button.disable.name=Disattiva +gui.button.disableseal.name=Disattiva chiusura +gui.button.enable.name=Attiva +gui.button.enableseal.name=Attiva chiusira +gui.button.hide_dest.name=Nascondi +gui.button.loadfuel.name=Carica benzina +gui.button.loaditems.name=Carica oggetti +gui.button.next.name=Avanti +gui.button.refine.name=Raffina +gui.button.stoploading.name=Ferma caricamento +gui.button.stoprefine.name=Ferma in raffinamento +gui.button.stopunloading.name=Ferma scaricamento +gui.button.unhide_dest.name=Rivela +gui.button.unloaditems.name=Scarica oggetti +gui.button.unlockschematic.name=Sblocca progetto +gui.checkbox.horizontal.name=Modalità orizzontale +gui.checkbox.invert.name=Inverti selezione +gui.checkbox.player_name.name=Il giocatore è +gui.checkbox.player_within.name=Il giocatore è entro +gui.checkbox.redstone_signal.name=Si apre con un segnale di pietrarossa +gui.chest.warning.wrongkey=Ho bisogno di una chiave delle segrete livello %s per aprirla! +gui.choose_planet.desc.moon=Abitabile#Privo Di Ossigeno#Gravità: 18% +gui.choose_planet.desc.overworld=Pieno di vita#Abitabile#Gravità: 100% +gui.chooseplanet.alreadycreated1.name=Stazione spaziale già +gui.chooseplanet.alreadycreated2.name=creata! +gui.chooseplanet.cannotcreate1.name=Non posso creare una stazione +gui.chooseplanet.cannotcreate2.name=spaziale qui! +gui.creative_only.desc=Solo creativa +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Velocità corrente +gui.docking_rocket.distance_from.name=Distanza dall'obiettivo +gui.docking_rocket.target_vel.name=Velocità +gui.docking_rocket.warning.name.0=Premi %s per decelarare +gui.docking_rocket.warning.name.1=Premi %s per accelerare +gui.dropbox.player_distance.name.0=1 Metro +gui.dropbox.player_distance.name.1=2 Metri +gui.dropbox.player_distance.name.2=5 Metri +gui.dropbox.player_distance.name.3=10 Metri +gui.electric_compressor.desc.0=Progresso +gui.energy_storage.desc.0=Riserva di energia +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Bandiera già posizionata qui! +gui.frequency_module.desc.0=Può ricevere basse frequenze +gui.frequency_module.desc.1=onde e segnali distanti +gui.frequencymodule.warning0=Ho probabilmente bisogno di +gui.frequencymodule.warning1=se qui voglio sentire qualcosa! +gui.fuel_output.desc.0=Posiziona le taniche vuote in +gui.fuel_output.desc.1=questo slot per riempirle +gui.fuel_output.desc.2=dallo storage interno +gui.fuel_tank.desc.0=Tanica di benzina. Richiede +gui.fuel_tank.desc.1=il caricatore di benzina +gui.fuel_tank.desc.2=Tanica di benzina, può essere riempita +gui.fuel_tank.desc.3=con taniche di benzina +gui.fuel_tank.desc.4=Tanica di benzina +gui.infinite_item.desc=Infinito +gui.lander.velocity=Velocità +gui.lander.velocityu=m/s +gui.lander.warning2=Tieni premuto " +gui.lander.warning3=" per rallentare! +gui.max_output.desc=Output massimo +gui.message.addnewsch.name=Aggiungi nuovo progetto +gui.message.apply.name=Applica +gui.message.assign_name.name=Assegna nome +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Indietro +gui.message.breed.name=Incrocia +gui.message.bubble_visible.name=Bolla visibile +gui.message.can_create_space_station.name=Qui può essere creata una stazione spaziale! +gui.message.cancel.name=Annulla +gui.message.cannot_create_space_station.name=Qui non può essere creata una stazione spaziale. +gui.message.catalog.name=Catalogo +gui.message.click_again.0.name=Premi di nuovo per ingrandire (vedi luna e satelliti) +gui.message.click_again.1.name=Premi di nuovo per ingrandire (vedi luna) +gui.message.click_again.2.name=Premi di nuovo per ingrandire (vedi satelliti) +gui.message.click_again.3.name=Premi di nuovo per ingrandire +gui.message.clicklink=Premi per la Wiki della Galacticraft +gui.message.create_ss.name=Crea +gui.message.daynightcycle.name=Ciclo giorno-notte +gui.message.energy=Energia +gui.message.environment.name=Accelerazione ambientale +gui.message.exit.name=Esci +gui.message.fuel.name=Benzina +gui.message.full.name=pieno +gui.message.generating.name=Generando +gui.message.grow.name=Cresci +gui.message.heal.name=Curare +gui.message.help1=per l'aiuto della Galacticraft +gui.message.help1a=Per vedere questo messaggio in qualsiasi momento, premi +gui.message.help2=per guida al programma spaziale +gui.message.help3=per aiuto con il petrolio +gui.message.in.name=Dentro +gui.message.launch.name=Lancia +gui.message.max_energy=Energia massima +gui.message.meansurfacetemp.name=Mean Surface Temp +gui.message.moon.atmosphere.0.name=None +gui.message.moon.daynightcycle.0.name=29.5 Earth Days +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C +gui.message.moon.surfacecomposition.0.name=Basalto +gui.message.moon.surfacecomposition.1.name=Tracce di formaggio +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% of Earth) +gui.message.of.name=di +gui.message.oil.name=Petrolio +gui.message.out.name=Fuori +gui.message.overworld.atmosphere.0.name=Azoto e ossigeno +gui.message.overworld.atmosphere.1.name=Permette la vita +gui.message.overworld.daynightcycle.0.name=1 Earth Day +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and +gui.message.overworld.surfacecomposition.1.name=gravel +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% of Earth) +gui.message.prelaunch=Lista di partenza +gui.message.rename.name=Rinomina +gui.message.select_ss.name=Seleziona una stazione spaziale +gui.message.ss_owner.name=Proprietario: +gui.message.status.name=Stato +gui.message.strengthen.name=Rinforzato +gui.message.surfacecomposition.name=Composizione della superficie +gui.message.surfacegravity.name=Gravità sulla superficie +gui.message.thermal_status.name=Controllo termale +gui.message.tier.name=Livello %d +gui.message.unnamed.name=Anonima +gui.missing_core.name.0=MicdoodleCore non trovata! +gui.missing_core.name.1=Galacticraft non può caricarsi +gui.missing_core.name.2=Chiudi Minecraft e installa MicdoodleCore +gui.missing_core.name.3=Clicca qui per aprire la pagina di download +gui.new_schematic.slot.desc.0=Nuovo slot del progetto. Puoi +gui.new_schematic.slot.desc.1=trovare nuovi progetti +gui.new_schematic.slot.desc.2=sconfiggendo le segrete. +gui.new_schematic.slot.desc.3=sui pianeti e sulle lune +gui.oil_tank.desc.0=Tanica di petrolio, può essere riempita +gui.oil_tank.desc.1=con taniche di petrolio +gui.oxygen.warning=Sistema di ossigeno invalido! +gui.oxygen_compressor.slot.desc.0=Slot della tanica, posizionala +gui.oxygen_compressor.slot.desc.1=per riempirla di ossigeno +gui.oxygen_decompressor.slot.desc.0=Slot della tanica, posizionala +gui.oxygen_decompressor.slot.desc.1=per svuotarla dall'ossigeno. +gui.oxygen_slot.desc.0=Slot dell'ossigeno, piazza una tanica di ossigeno qui +gui.oxygen_slot.desc.1=o usa dei cavi +gui.oxygen_storage.desc.0=Riserva di ossigeno +gui.oxygen_storage.desc.1=Ossigeno +gui.oxygen_use.desc=Uso dell'ossigeno +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Cibo +gui.player.health=Vita +gui.player.ouch=ouch!!!! +gui.receiver.cannot_attach=Cannot attach receiver here! +gui.requires_controller.desc=Richiede il Controller del lancio +gui.rocket.countdown=Countdown +gui.rocket.height=Altezza +gui.rocket.inv.name=Inventario / Benzina +gui.rocket.launch.name=Lancia +gui.rocket.launched=Lanciato +gui.rocket.on_launchpad=Sul launchpad +gui.rocket.speed=Velocità +gui.rocket.turn.name=Gira a destra-sinistra +gui.rocket.updown.name=Ruota in alto-basso +gui.rocket.warning.nofuel=Dovrei caricare della benzina prima! +gui.rocket.warning.nogyroscope=Delle forze misteriose stanno agendo e i giroscopi girano all'impazzata! +gui.rocket.warning.noparachute=Non ho un paracadute! Se premo Lancia di nuovo, non c'è ritorno! +gui.rocket_type.0=Storage Space: 18 +gui.rocket_type.1=Storage Space: 36 +gui.rocket_type.2=Storage Space: 56 +gui.rocket_type.3=Pre-riempito +gui.seconds=s +gui.sensor.advanced=Modalità avanzata +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Mostra bolla +gui.skeleton_boss.message=Il boss è scomparso! Non abbandonare l'arena mentre combatti! Rientra per ricominciare! +gui.space_race.chat.add_success=%s has joined the Space Race! +gui.space_race.chat.already_part=You are already a part of this space race! +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. +gui.space_race.chat.not_found=Could not find player with name: %s +gui.space_race.chat.remove_success=%s has been removed from the Space Race. +gui.space_race.chat.to_join=To join %s use command %s +gui.space_race.coming_soon=Coming Soon +gui.space_race.create.add_players.name=Aggiungi giocatori +gui.space_race.create.back.name=Indietro +gui.space_race.create.brush_radius.name=Pennello +gui.space_race.create.brush_size.name=Dimensione pennello +gui.space_race.create.change_color.name.0=Cambia +gui.space_race.create.change_color.name.1=Squadra +gui.space_race.create.change_color.name.2=Colore +gui.space_race.create.close.name=Chiudi +gui.space_race.create.customize.name=Modifica Bandiera +gui.space_race.create.eraser_radius.name=Gomma +gui.space_race.create.eraser_size.name=Dimensione gomma +gui.space_race.create.global_stats.name=Vedi Statistiche Globali +gui.space_race.create.invite_player.name=Invita giocatore +gui.space_race.create.player_radius.name=NB: I player devono essere nel range di 25 blocchi +gui.space_race.create.rem_players.name=Rimuovi giocatori +gui.space_race.create.remove.name=Rimuovi +gui.space_race.create.remove_player.name=Remove Player +gui.space_race.create.rename.name=Rinomina squadra +gui.space_race.create.send_invite.name=Manda invito +gui.space_race.create.server_stats.name=Vedi Statistiche Locali +gui.space_race.create.title.name=Manager delle Gare Spaziali +gui.space_race.create.title.name.0=Gara Spaziale +gui.space_race.create.title.name.1=Manager +gui.space_race.join.member_count.name=%d members +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Proprietario +gui.space_race.join.title.name=Partecipa A Una Gara Spaziale +gui.space_race.unnamed=Unnamed Team +gui.spacestation.added=Sei stato aggiunto alla lista dei giocatori abilitati alla stazione spaziale di %s ! +gui.spacestation.addsuccess=Hai aggiunto %s alla lista! +gui.spacestation.allow_all_false=Le tue stazioni spaziali non sono più aperte agli altri giocatori! +gui.spacestation.allow_all_true=Le tue stazioni spaziali sono ora aperte a tutti i giocatori! (Usa /ssinvite -all per modificare) +gui.spacestation.changesuccess=Il proprietario della Stazione Spaziale è stato cambiato da %s ad %s . +gui.spacestation.playername= +gui.spacestation.removesuccess=Hai rimosso %s dalla lista! +gui.spacestation.to_allow_entry=per abilitare qualcuno a questa stazione spaziale +gui.spacestation.type_command=Tipo +gui.status.active.name=Attivo +gui.status.air_lock_closed.name=Chiusura ad aria attivata +gui.status.air_lock_open.name=Chiusura ad aria disattivata +gui.status.blockedfully.name=Il sole non è visibile +gui.status.blockedpartial.name=Sole parzialmente visibile +gui.status.check_pending.name=Controllo in coda +gui.status.check_starting.name=Il controllo sta partendo +gui.status.checking_seal.name=Controllando la chiusura +gui.status.collecting.name=Raccogliendo +gui.status.collectingenergy.name=Raccogliendo energia +gui.status.compressing.name=Compressando +gui.status.disabled.name=Disabilitato +gui.status.fulltank.name=Tanica di ossigeno piena +gui.status.generating.name=Generando +gui.status.hull_heat.name=Temperatura dello scafo +gui.status.idle.name=Riposo +gui.status.missingleaves.name=Non ci sono abbastanza foglie +gui.status.missingoxygen.name=Non c'è abbastanza ossigeno +gui.status.missingpower.name=Non c'è abbastanza corrente +gui.status.missingtank.name=Non c'è nessuna tanica di ossigeno valida! +gui.status.nofuel.name=Non c'è benzina da caricare! +gui.status.noinvtarget.name=Non c'è un inventario nel destinatario! +gui.status.noitems.name=Nessun oggetto da caricare +gui.status.nooil.name=Non c'è petrolio +gui.status.not_available.name=NON DISPONIBILE +gui.status.not_generating.name=Non generando +gui.status.notargetload.name=Nessuno destinatario! +gui.status.notargetunload.name=Nessun destinatario! +gui.status.off.name=SPENTO +gui.status.on.name=ACCESO +gui.status.raining.name=Piovendo +gui.status.ready.name=Pronto +gui.status.refining.name=Raffinando +gui.status.running.name=Lavorando +gui.status.sealed.name=Chiuso +gui.status.sealerblocked.name=Grata di uscita bloccata! +gui.status.sun_visible.name=Sole visibile +gui.status.tank_empty.name=Bombola di ossigeno vuota +gui.status.targetempty.name=L'inventario del veicolo è vuoto! +gui.status.targetfull.name=L'inventario del veicolo è pieno! +gui.status.unknown.name=Non conosciuto +gui.status.unsealed.name=Area troppo grande / Non chiuso +gui.tank.oxygen_remaining=Ossigeno rimanente +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) +gui.telemetry_fail_no_frequency_module.message=Ho bisogno di un modulo delle frequenze se voglio usarlo +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! +gui.telemetry_succeed.message=Telemetry link created. +gui.thermal_slot.desc.0=Aggiornamente termale, posiziona 'Ambiente +gui.thermal_slot.desc.1=Controllore termale' qui (opzionale) +gui.thermal_slot.desc.2=Nota: utilizza più energia! +gui.title.air_lock.name=Controller della chiusura ad aria di %s +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. +gui.warning=ATTENZIONE! +gui.warning.invalid_thermal=Protezione alle alte temperature invalida! +gui.warning.noroom=Non c'è abbastanza spazio +item.air_fan.name=Ventola per ossigeno +item.air_vent.name=Grata per ossigeno +item.basic_item.ambient_thermal_controller.name=Controllore di temperatura ambientale +item.basic_item.canned_food.name=Contenitore di cibo +item.basic_item.compressed_aluminum.name=Alluminio compresso +item.basic_item.compressed_bronze.name=Bronzo compresso +item.basic_item.compressed_copper.name=Rame compresso +item.basic_item.compressed_iron.name=Ferro compresso +item.basic_item.compressed_steel.name=Acciaio compresso +item.basic_item.compressed_tin.name=Stagno compresso +item.basic_item.dehydrated_apple.name=Mele deidratate +item.basic_item.dehydrated_carrot.name=Carote deidratate +item.basic_item.dehydrated_melon.name=Melone deidratato +item.basic_item.dehydrated_potato.name=Patate deidratate +item.basic_item.frequency_module.name=Rilevatore di frequenze +item.basic_item.ingot_aluminum.name=Lingotto di alluminio +item.basic_item.ingot_bronze.name=Lingotto di bronzo +item.basic_item.ingot_copper.name=Lingotto di rame +item.basic_item.ingot_steel.name=Lingotto di acciaio +item.basic_item.ingot_tin.name=Lingotto di stagno +item.basic_item.raw_silicon.name=Silicone grezzo +item.basic_item.solar_module_0.name=Modulo solare +item.basic_item.solar_module_1.name=Pannello solare completo +item.basic_item.wafer_advanced.name=Circuito avanzato +item.basic_item.wafer_basic.name=Circuito base +item.basic_item.wafer_solar.name=Circuito solare +item.battery.name=Batteria +item.bucket_fuel.name=Secchio di carburante +item.bucket_oil.name=Secchio di petrolio +item.buggy.name=Rover +item.buggymat.seat.name=Sedile del Rover +item.buggymat.storage.name=Cassa del Rover +item.buggymat.wheel.name=Ruota del Rover +item.canister.copper.name=Contenitore in rame +item.canister.tin.name=Contenitore in stagno +item.canvas.name=Tela +item.cheese_block.name=Blocco Di Formaggio +item.cheese_curd.name=Cagliata Di Formaggio +item.compressed_meteoric_iron.name=Ferro Meteorico Compresso +item.empty_liquid_canister.name=Contenitore vuoto +item.engine.tier1booster.name=Acceleratore livello 1 +item.engine.tier1engine.name=Motore livello 1 +item.flag.name=Bandiera +item.fuel.name=Benzina per il razzo +item.fuel_canister.name=Contenitore pieno di benzina +item.fuel_canister_partial.name=Contenitore parzialmente riempito di benzina +item.heavy_plating.name=Piastra rinforzata +item.hot_description.name=Caldo +item.infinite_battery.name=Batteria infinita +item.infinite_oxygen.name=Provvista di ossigeno infinita +item.key.t1.name=Chiave della prigione livello 1 +item.meteor_chunk.name=Pezzo di meteora lanciabile +item.meteor_chunk_hot.name=Pezzo di meteora lanciabile +item.meteoric_iron_ingot.name=Lingotto Di Ferro Meteorico +item.meteoric_iron_raw.name=Ferro Meteorico Grezzo +item.nose_cone.name=Punta razzo +item.oil_canister.name=Contenitore pieno di petrolio +item.oil_canister_partial.name=Contenitore parzialmente riempito di petrolio +item.oil_extractor.name=Estrattore di petrolio portatile +item.oxygen_concentrator.name=Accumulatore di ossigeno +item.oxygen_gear.name=Apparecchio per ossigeno +item.oxygen_mask.name=Maschera per Ossigeno +item.oxygen_tank_heavy_empty.name=Bombola Grande Vuota +item.oxygen_tank_heavy_full.name=Bombola Grande +item.oxygen_tank_light_empty.name=Bombola Piccola Vuota +item.oxygen_tank_light_full.name=Bombola Piccola +item.oxygen_tank_med_empty.name=Bombola Media Vuota +item.oxygen_tank_med_full.name=Bombola Media +item.parachute_black.name=Paracadute Nero +item.parachute_blue.name=Paracadute Azzurro +item.parachute_brown.name=Paracadute Marrone +item.parachute_darkblue.name=Paracadute Blu +item.parachute_darkgray.name=Paracadute Grigio +item.parachute_darkgreen.name=Paracadute Verde +item.parachute_gray.name=Paracadute Grigio Chiaro +item.parachute_lime.name=Paracadute Verde Chiaro +item.parachute_magenta.name=Paracadute Magenta +item.parachute_orange.name=Paracadute Arancione +item.parachute_pink.name=Paracadute Rosa +item.parachute_plain.name=Paracadute +item.parachute_purple.name=Paracadute Porpora +item.parachute_red.name=Paracadute Rosso +item.parachute_teal.name=Paracadute Ciano +item.parachute_yellow.name=Paracadute Giallo +item.rocket_fins.name=Alette razzo +item.rocket_t1.name=Razzo livello 1 +item.schematic.name=Progetto del tavolo di lavoro della NASA +item.sensor_glasses.name=Occhiali con sensori +item.sensor_lens.name=Lenti con sensore +item.standard_wrench.name=Chiave inglese standard +item.steel_axe.name=Accetta rinforzata +item.steel_boots.name=Stivali rinforzati +item.steel_chestplate.name=Corpetto rinforzato +item.steel_helmet.name=Elmetto rinforzato +item.steel_hoe.name=Zappa rinforzata +item.steel_leggings.name=Gambali rinforzati +item.steel_pickaxe.name=Piccone rinforzato +item.steel_pole.name=Asta di acciaio +item.steel_shovel.name=Pala rinforzata +item.steel_sword.name=Spada rinforzata +item.tier1.desc=Livello 1 +item_desc.powerdraw.name=Power required: %s /s +item_desc.shift.name=Press %s for more info +item_group.galacticraft_blocks=Blocchi della Galacticraft +item_group.galacticraft_items=Oggetti della Galacticraft +keybind.map.name=Mappa della galassia +keybind.sensortoggle.name=Attiva/Disattiva gli occhiali-sensore +keybind.spaceshipinv.name=Apri l'inventario del razzo +keybind.vehiclebackward.name=Indietro (veicolo) +keybind.vehicledown.name=Giù (veicolo) +keybind.vehicleforward.name=Avanti (veicolo) +keybind.vehicleleft.name=Sinistra (veicolo) +keybind.vehicleright.name=Destra (veicolo) +keybind.vehicleup.name=Su (veicolo) +moon.moon=Luna +newversion.failed.name=Fallito il controllo della versione della Galacticraft! Riprovando in 15 secondi... +newversion.success.name=Versione vecchia della Galacticraft trovata: +planet.jupiter=Giove +planet.mercury=Mercurio +planet.neptune=Nettuno +planet.overworld=Terra +planet.saturn=Saturno +planet.uranus=Urano +planet.venus=Venere +satellite.spacestation.overworld=Stazione Spaziale Terrestre +schematic.moonbuggy.name=Rover della luna +schematic.rocket_t1.name=Razzo di livello 1 +schematic.rocket_t2.name=Razzo di livello 2 +solarsystem.sol=Sole +star.sol=Sole +tile.air_lock_controller.name=Centralina della chiusura ad aria +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. +tile.air_lock_frame.name=Struttura della chiusura ad aria +tile.air_lock_seal.name=Chiusura ad aria +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. +tile.aluminum_wire.alu_wire.name=Cavo di alluminio +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Its higher capacity boosts efficiency for Tier 2 machines. +tile.aluminum_wire.alu_wire_heavy.name=Cavo di alluminio rinforzato +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. +tile.arclamp.name=Arc Lamp +tile.basic_block_core.block_aluminum_gc.name=Blocco di alluminio +tile.basic_block_core.block_copper_gc.name=Blocco di rame +tile.basic_block_core.block_meteoric_iron_gc.name=Ferro meteorico +tile.basic_block_core.block_tin_gc.name=Blocco di stagno +tile.basic_block_core.deco_block_0.name=Blocco di decorazione in stagno +tile.basic_block_core.deco_block_1.name=Blocco di decorazione in stagno +tile.basic_block_core.ore_aluminum_gc.name=Minerale di alluminio +tile.basic_block_core.ore_copper_gc.name=Minerale di rame +tile.basic_block_core.ore_silicon.name=Minerale di silicone +tile.basic_block_core.ore_tin_gc.name=Minerale di stagno +tile.basic_block_moon.bricks.name=Mattoni Delle Segrete Lunari +tile.basic_block_moon.cheesestone.name=Minerale Di Formaggio +tile.basic_block_moon.coppermoon.name=Minerale Di Rame +tile.basic_block_moon.moondirt.name=Terra Lunare +tile.basic_block_moon.moongrass.name=Torba Lunare +tile.basic_block_moon.moonstone.name=Roccia Lunare +tile.basic_block_moon.tinmoon.name=Minerale Di Stagno +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! +tile.cargo.loader.name=Caricatore del cargo +tile.cargo.unloader.name=Scaricatore del cargo +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. +tile.cheese.name=Blocco Di Formaggio +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. +tile.collector.description=Gli Accumulatori Di Ossigeno raccolgono Ossigeno dalle foglie che li circondano. +tile.collector.name=Assorbitore di ossigeno +tile.compressor.description=Compressor will process ingots into their compressed equivalents. The most essential machine in Galacticraft! +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than its predecessor. +tile.crude_oil.name=Petrolio +tile.crude_oil_moving.name=Petrolio grezzo +tile.crude_oil_still.name=Petrolio grezzo +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. +tile.dishbase.name=Disco per comunicazioni +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. +tile.distributor.name=Distributore di ossigeno +tile.dummyblock.cryogenic_chamber.name=Camera criogenica +tile.dummyblock.launch_pad.name=Piattaforma del razzo +tile.dummyblock.nasa_workbench.name=Tavolo di lavoro della NASA +tile.dummyblock.solar.name=Pannello solare +tile.dummyblock.space_station_base.name=Stazione Spaziale +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. +tile.enclosed.aluminum_wire.name=Cavo di alluminio sigillato +tile.enclosed.heavy_aluminum_wire.name=Cavo di alluminio rinforzato sigillato +tile.enclosed.copper_cable.name=Cavo di rame sigillato +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. +tile.enclosed.glass_fibre_cable.name=Cave in fibra di vetro sigillato +tile.enclosed.gold_cable.name=Cavo d'oro sigillato +tile.enclosed.hv_cable.name=Cavo ad alto voltaggio sigillato +tile.enclosed.lv_cable.name=Cavo di stagno sigillato +tile.enclosed.me_cable.name=Cavo ME sigillato +tile.enclosed.fluid_pipe.name=Tubo di ossigeno sigillato +tile.enclosed.pipe_fluids_cobblestone.name=Tubo in pietrisco per liquidi sigillato +tile.enclosed.pipe_fluids_stone.name=Tubo in pietra per liqudi sigillato +tile.enclosed.pipe_items_cobblestone.name=Tubo in pietrisco sigillato +tile.enclosed.pipe_items_stone.name=Tubo in pietra sigillato +tile.enclosed.pipe_power_gold.name=Tubo in oro per corrente sigillato +tile.enclosed.pipe_power_stone.name=Tubo in pietra per corrente sigillato +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than its predecessor. +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. +tile.fallen_meteor.name=Meteora caduta +tile.fuel.name=Benzina +tile.fuel_block.name=Carburante +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. +tile.fuel_loader.name=Caricatore di benzina +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. +tile.glowstone_torch.name=Torcia in glowstone +tile.landing_pad.buggy_fueler.name=Caricatore del Rover +tile.landing_pad.cargo_pad.name=Piattaforma di lancio del cargo +tile.landing_pad.description=Launch Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. +tile.landing_pad.landing_pad.name=Piattaforma di lancio del razzo +tile.landing_pad_full.name=Piattaforma di lancio del razzo +tile.machine.0.name=Generatore a Carbone +tile.machine.1.name=Stoccaggio di energia +tile.machine.2.name=Fornace elettrica +tile.machine.3.name=Compressore +tile.machine.7.name=Forno elettrico ad arco +tile.machine.8.name=Aggregato spaziale elettrico +tile.machine2.4.name=Compressore elettrico +tile.machine2.5.name=Fabbricatore di circuiti +tile.machine2.6.name=Stoccaggio di ossigeno +tile.moon_stairs_brick.name=Scale in roccia delle segrete lunari +tile.moon_stairs_stone.name=Scale in roccia lunare +tile.ore_copper.name=Minerale di rame +tile.ore_tin.name=Minerale di stagno +tile.oxygen_compressor.0.name=Compressore di ossigeno +tile.oxygen_compressor.1.name=Decompressore di ossigeno +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. +tile.oxygen_detector.description=I rilevatori di ossigeno emetteranno un segnale di pietrarossa al rilevare dell'ossigeno! +tile.oxygen_detector.name=Rilevatore di ossigeno +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. +tile.oxygen_pipe.name=Tubo per ossigeno +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. +tile.parachest.name=Cassa del razzo +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. +tile.refinery.name=Raffineria +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. +tile.rocket_workbench.name=Tavolo di lavoro della NASA +tile.sapling2.birch.name=Alberello di betulla +tile.sapling2.jungle.name=Alberello della giungla +tile.sapling2.oak.name=Alberello di quercia +tile.sapling2.spruce.name=Alberello di pino +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. +tile.sealer.name=Sigillatore di ossigeno +tile.slab_gc_half.moon_bricks_slab.name=Scalino in roccia delle segrete lunari +tile.slab_gc_half.moon_slab.name=Scalino in roccia lunare +tile.slab_gc_half.tin_slab_1.name=Scalino in stagno +tile.slab_gc_half.tin_slab_2.name=Scalino in stagno +tile.solar.advanced_solar.name=Pannello solare avanzato +tile.solar.basic_solar.name=Pannello solare semplice +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). +tile.space_station_base.name=Space Station Arrival Block +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. +tile.spin_thruster.name=Acceleratore di giri +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. +tile.telemetry.name=Telemetry Unit +tile.tin_stairs_1.name=Scale in stagno +tile.tin_stairs_2.name=Scale in stagno +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. +tile.treasure_chest.name=Cassa del tesoro +tile.unlit_torch.name=Torcia +tile.unlit_torch_stone.name=Torcia di pietra +tile.unlit_torch_lit.name=Torcia +tile.unlit_torch_stone_lit.name=Torcia di pietra +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. +tile.view_screen.name=Display +tile.wall_gc.moon.name=Muro in roccia lunare +tile.wall_gc.moon_bricks.name=Muro in raccia delle segrete lunari +tile.wall_gc.tin.name=Muro in stagno diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ja_jp.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ja_jp.lang new file mode 100644 index 00000000..4cf838bf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ja_jp.lang @@ -0,0 +1,815 @@ +checklist.create_grapple.key=グラップリングフック +checklist.equip_oxygen_suit.key=酸素装備一式を装備 +checklist.equip_parachute.key=パラシュートを装備 +command.gcastrominer.count=%s のアストロ採掘機の数は %s 個です +commands.emergencykit=%s は応急キットを渡された! +commands.dimensionteleport=%s が大気圏へ行った%s +commands.dimensiontp.too_many=コマンドの引数が多すぎます! 使用法: %s +commands.gcenergyunits.invalid_units=/GCEnergyUnits コマンドで使えない単位です。使用法: %s +commands.gcenergyunits.no_units=単位の指定が必要です! 使用法: %s +commands.gchouston.confirm.1=こちら宇宙管制センター、もう一度言ってください。 +commands.gchouston.confirm.2=(任務を放棄するなら、確認のために再度 /gchouston を入力する) +commands.gchouston.fail=/gchouston コマンドは宇宙空間orクリエイティブモードでのみ利用可能 +commands.gchouston.help.1=あー、ヒューストン、問題が発生した.... +commands.gchouston.help.2=(任務を放棄し帰還するには/gchouston と入力する) +commands.gchouston.noop=他プレイヤーに /gchouston コマンドを使用できるのはオペレータ(権限)のみです +commands.gchouston.success=OK、スタンバイ、 %s、 オーバーワールドのホーム地点にテレポートします。 +commands.joinrace.no_team=チームの指定が必要です! 使用法: %s +commands.ssinvite.not_found=あなたの宇宙ステーションが見つかりません。まずそこへ行く必要があります! +commands.ssinvite.wrong_usage=コマンドの引数が足りません! 使用法: %s +commands.ssnewowner.wrong_usage=宇宙ステーションIDを認識できません# - 存在するIDですか? 使用法: %s +commands.ssuninvite.no_player=あなたの宇宙ステーションへ入れるプレイヤーリストに %s が見つかりません! +container.cargoloader.name=貨物積み込み機 +container.cargounloader.name=貨物取り出し機 +container.fuelloader.name=燃料給油機 +container.lander.name=着陸船 +container.magneticcrafting.name=クラフト中 +container.oxygencollector.name=酸素収集機 +container.oxygencompressor.name=酸素圧縮機 +container.oxygendecompressor.name=酸素減圧装置 +container.oxygendistributor.name=酸素拡散機 +container.oxygensealer.name=酸素密封機 +container.parachest.name=パラシュートチェスト +container.refinery.name=石油精製機 +container.solaradvanced.name=高性能ソーラー発電機 +container.solarbasic.name=ソーラー発電機 +container.spaceship.name=レベル1 ロケット +container.treasurechest.name=宝箱 +death.attack.meteor_chunk=%1$sに隕石が命中した! +death.attack.oxygen_suffocation=%1$sが酸素不足で死んでしまった +death.attack.spaceship_crash=%1$sのロケットが地面に墜落した +death.attack.sulphuric_acid=%1$sは硫酸に溶けた! +death.attack.thermal=%1$は熱保護を忘れていた +dimension.moon.name=月 +dimension.overworld.name=地球 +dimension.sun.name=太陽 +entity.alien_villager.name=宇宙の村人 +entity.buggy.name=バギー +entity.celestial_screen.name=天体スクリーン +entity.evolved_creeper.name=宇宙のクリーパー +entity.evolved_skeleton.name=宇宙のスケルトン +entity.evolved_skeleton_boss.name=宇宙のスケルトンキング +entity.evolved_spider.name=宇宙のクモ +entity.evolved_zombie.name=宇宙のゾンビ +entity.evolved_enderman.name=宇宙のエンダーマン +entity.evolved_witch.name=宇宙のウィッチ +entity.flag.name=旗 +entity.gcflag.name=旗 +entity.gravity_arrow.name=矢 +entity.lander.name=着陸船 +entity.meteor.name=隕石 +entity.meteor_chunk.name=隕石チャンク +entity.oxygen_bubble.name=酸素バブル +entity.para_chest.name=パラシュートチェスト +entity.rocket_t1.name=レベル1 ロケット +galaxy.milky_way=天の川 +gc.configgui.allow_liquids_grating=Allow liquids to flow into Grating +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_flags=Challenge Mode Flags +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_biome_type_registrations=Disable Biome Type Registrations +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_ore_dict_space_metals=Must use GC's own space metals in recipes +gc.configgui.disable_sapphire_moon=Disable Sapphire Ore Gen on Moon +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.disable_vehicle_camera_changes=Vivecraft: Disable Third-Person and Zoom +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_space_race_manager_popup=Enable Space Race Manager Popup +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on Planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension Type ID +gc.configgui.id_dimension_overworld=Dimension of the Overworld +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension Type ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension Type ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket@[ +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon +gc.configgui.other_mod_ore_gen_i_ds=Custom Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.planet_worldborders=Max x,z for Moon landing +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.static_loaded_new_ss=New Space Stations static loaded? +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Coreのコンフィグ +gc.configgui.use_old_fuel_fluid_i_d=Use legacy fuelgc fluid registration +gc.configgui.use_old_oil_fluid_i_d=Use legacy oilgc fluid registration +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=電池スロット。ここに電池を置く。 +gui.battery_slot.desc.1=または接続したエネルギー源を使う。 +gui.bed_fail.message=おっと、もし眠っている時に酸素が切れたら? 宇宙で眠るためには低温室が必要だ! +gui.buggy.accel.name=加速する +gui.buggy.decel.name=減速する +gui.buggy.inv.name=インベントリー / 燃料 +gui.buggy.storage_space=ストレージ容量 +gui.buggy.turn.name=左折-右折 +gui.button.back.name=戻る +gui.button.disable.name=無効化 +gui.button.disableseal.name=密封を無効化 +gui.button.enable.name=有効化 +gui.button.enableseal.name=密封を有効化 +gui.button.hide_dest.name=隠す +gui.button.loadfuel.name=燃料を給油 +gui.button.loaditems.name=アイテムを積み込む +gui.button.next.name=次へ +gui.button.paintapply.name=塗料を適用 +gui.button.paintmix.name=色をミックス +gui.button.paintreset.name=色をリセット +gui.button.refine.name=精製を開始 +gui.button.stoploading.name=積み込みを停止 +gui.button.stoprefine.name=精製を停止 +gui.button.stopunloading.name=取り出しを停止 +gui.button.unhide_dest.name=公開する +gui.button.unloaditems.name=アイテムを取り出す +gui.button.unlockschematic.name=設計図をアンロック +gui.checkbox.horizontal.name=水平モード +gui.checkbox.invert.name=選択を反転 +gui.checkbox.player_name.name=プレイヤーの名前は +gui.checkbox.player_within.name=プレイヤーが入っている +gui.checkbox.redstone_signal.name=レッドストーン信号で開く +gui.chest.warning.wrongkey=このロックを解除するためには %s ダンジョンのカギが必要です! +gui.choose_planet.desc.moon=住みやすい#酸素がない#重力: 18% +gui.choose_planet.desc.overworld=生命がいっぱい#住みやすい#重力: 100% +gui.chooseplanet.alreadycreated1.name=宇宙ステーションは +gui.chooseplanet.alreadycreated2.name=作成済みです! +gui.chooseplanet.cannotcreate1.name=ここに宇宙ステーションを +gui.chooseplanet.cannotcreate2.name=作成できません! +gui.creative_only.desc=クリエイティブモード専用 +gui.display.nolink=リンクなし +gui.docking_rocket.current_vel.name=現在のターゲット +gui.docking_rocket.distance_from.name=ターゲットからの距離 +gui.docking_rocket.target_vel.name=ターゲットの速度 +gui.docking_rocket.warning.name.0=%s キーで減速 +gui.docking_rocket.warning.name.1=%s キーで加速 +gui.dropbox.player_distance.name.0=1m +gui.dropbox.player_distance.name.1=2m +gui.dropbox.player_distance.name.2=5m +gui.dropbox.player_distance.name.3=10m +gui.electric_compressor.desc.0=進捗 +gui.energy_storage.desc.0=エネストレージ +gui.energy_storage.desc.1=エネ +gui.flag.already_placed=旗が既に置いてある! +gui.frequency_module.desc.0=弱い音波と遠くの信号を +gui.frequency_module.desc.1=受信できる +gui.frequencymodule.warning0=音を聞くためには +gui.frequencymodule.warning1=が必要です +gui.fuel_output.desc.0=空の缶をここに置くと +gui.fuel_output.desc.1=タンクから充填する +gui.fuel_output.desc.2=燃料タンク +gui.fuel_tank.desc.0=燃料タンク。充填する +gui.fuel_tank.desc.1=には燃料給油機が必要 +gui.fuel_tank.desc.2=燃料タンク。燃料缶で +gui.fuel_tank.desc.3=充填できる +gui.fuel_tank.desc.4=燃料タンク +gui.infinite_item.desc=無限 +gui.lander.velocity=速度 +gui.lander.velocityu=m/s +gui.lander.warning2=" +gui.lander.warning3=" キーを長押しで減速 +gui.max_output.desc=最大出力 +gui.message.addnewsch.name=新しい設計図を追加する +gui.message.apply.name=適用 +gui.message.assign_name.name=名前の割り当て +gui.message.atmosphere.name=大気 +gui.message.back.name=戻る +gui.message.breed.name=繁殖 +gui.message.bubble_visible.name=バブルが見える +gui.message.can_create_space_station.name=ここに宇宙ステーションを作成できる +gui.message.cancel.name=キャンセル +gui.message.cannot_create_space_station.name=ここでは宇宙ステーションを作成できない +gui.message.catalog.name=カタログ +gui.message.click_again.0.name=もう一度クリックするとズームする (月と衛星) +gui.message.click_again.1.name=もう一度クリックするとズームする (月) +gui.message.click_again.2.name=もう一度クリックするとズームする (衛星) +gui.message.click_again.3.name=もう一度クリックするとズームする +gui.message.clicklink=クリックで Galacticraft Wiki を開く +gui.message.create_ss.name=作成 +gui.message.daynightcycle.name=昼-夜 サイクル +gui.message.energy=エネルギー +gui.message.environment.name=環境ブースト +gui.message.exit.name=退出 +gui.message.fuel.name=燃料 +gui.message.full.name=いっぱい +gui.message.generating.name=生成中 +gui.message.grow.name=成長 +gui.message.heal.name=回復 +gui.message.help1=Galacticraftのヘルプ +gui.message.help1a=再びこのメッセージを表示するには次を入力 +gui.message.help2=宇宙計画のガイダンス +gui.message.help3=原油のヘルプ +gui.message.in.name=入 +gui.message.launch.name=スタート +gui.message.max_energy=最大エネルギー +gui.message.meansurfacetemp.name=平均表面温度 +gui.message.moon.atmosphere.0.name=ない +gui.message.moon.daynightcycle.0.name=29.5 地球日 +gui.message.moon.meansurfacetemp.0.name=(明るい側面) 253C +gui.message.moon.meansurfacetemp.1.name=(暗い側面) -153C +gui.message.moon.surfacecomposition.0.name=玄武岩質岩 +gui.message.moon.surfacecomposition.1.name=チーズ +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(地球の18%) +gui.message.of.name=/ +gui.message.oil.name=原油 +gui.message.out.name=出 +gui.message.overworld.atmosphere.0.name=窒素、酸素 +gui.message.overworld.atmosphere.1.name=住みやすい +gui.message.overworld.daynightcycle.0.name=1 地球日 +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=石、土 +gui.message.overworld.surfacecomposition.1.name=砂利 +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(地球の100%) +gui.message.prelaunch=発射前チェックリスト +gui.message.rename.name=名前の変更 +gui.message.select_ss.name=宇宙ステーションを選択 +gui.message.ss_owner.name=オーナー: +gui.message.status.name=ステータス +gui.message.strengthen.name=増強 +gui.message.surfacecomposition.name=表面構成 +gui.message.surfacegravity.name=表面重力 +gui.message.thermal_status.name=温度コントロール +gui.message.tier.name=レベル%d +gui.message.unnamed.name=名無し +gui.missing_core.name.0=MicdoodleCoreがmodsフォルダにありません +gui.missing_core.name.1=Galacticraftの読み込みに失敗しました +gui.missing_core.name.2=Close Minecraft を閉じてMicdoodleCoreをインストールしてください +gui.missing_core.name.3=ここをクリックしてダウンロードページを開く +gui.new_schematic.slot.desc.0=新しい設計図スロット。 +gui.new_schematic.slot.desc.1=新しい設計図は惑星と +gui.new_schematic.slot.desc.2=衛星のダンジョンを攻略 +gui.new_schematic.slot.desc.3=すれば見つかる +gui.oil_tank.desc.0=原油タンク。 +gui.oil_tank.desc.1=原油缶で充填できる +gui.oxygen.warning=酸素がない +gui.oxygen_compressor.slot.desc.0=圧縮タンクスロット。ここに酸素タンク +gui.oxygen_compressor.slot.desc.1=を置き呼吸できる酸素で満たす +gui.oxygen_decompressor.slot.desc.0=減圧タンクスロット。ここに酸素タンク +gui.oxygen_decompressor.slot.desc.1=を置き酸素を空にする +gui.oxygen_slot.desc.0=酸素スロット。ここに液体酸素缶を置く。 +gui.oxygen_slot.desc.1=または接続した酸素供給源を使う。 +gui.oxygen_storage.desc.0=酸素ストレージ +gui.oxygen_storage.desc.1=酸素 +gui.oxygen_use.desc=酸素使用量 +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=食料 +gui.player.health=体力 +gui.player.ouch=うわ!!! +gui.receiver.cannot_attach=受信機をここに取り付けできません! +gui.requires_controller.desc=打ち上げコントローラが必要 +gui.rocket.countdown=カウントダウン +gui.rocket.height=高さ +gui.rocket.inv.name=インベントリ / 燃料 +gui.rocket.launch.name=打ち上げ +gui.rocket.launched=打ち上げ +gui.rocket.on_launchpad=発射台に置いてある +gui.rocket.speed=速度 +gui.rocket.turn.name=左右回転 +gui.rocket.updown.name=上下回転 +gui.rocket.warning.fuelinsufficient=自動制御下での安全な打ち上げには燃料が不十分です! +gui.rocket.warning.launchcontroller=フライト前のキャンセルを開始. 打ち上げコントローラを確認してください! +gui.rocket.warning.nofuel=燃料が入ってないのでロケットの打ち上げは出来ません +gui.rocket.warning.nogyroscope=謎の力によってジャイロスコープが暴走している! +gui.rocket.warning.noparachute=パラシュートを持っていません。 もう一度打ち上げを押すと、もう後戻りできません! +gui.rocket_type.0=ストレージ容量: 18 +gui.rocket_type.1=ストレージ容量: 36 +gui.rocket_type.2=ストレージ容量: 56 +gui.rocket_type.3=燃料入り +gui.seconds=s +gui.sensor.advanced=アドバンスモード +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=バブルを見せる +gui.skeleton_boss.message=ボスが消滅しました。戦闘中に部屋を出ないでください!もう一回入るとボスが再出現します。 +gui.space_race.chat.add_success=%sさんがスペースレースに参加しました! +gui.space_race.chat.already_part=このレースにもう入っています! +gui.space_race.chat.invite_received=%sさんからスペースレースに招待されました +gui.space_race.chat.not_found=%sさんが見つかりませんでした。 +gui.space_race.chat.remove_success=%sさんを除外しました +gui.space_race.chat.to_join=%sに参加し、%sを使ってください +gui.space_race.coming_soon=近日公開 +gui.space_race.create.add_players.name=プレイヤーを追加する +gui.space_race.create.back.name=戻る +gui.space_race.create.brush_radius.name=ブラシの半径 +gui.space_race.create.brush_size.name=ブラシの広さ +gui.space_race.create.change_color.name.0=チームの +gui.space_race.create.change_color.name.1=色を +gui.space_race.create.change_color.name.2=変える +gui.space_race.create.close.name=閉じる +gui.space_race.create.customize.name=旗をカスタマイズ +gui.space_race.create.eraser_radius.name=消しゴムの半径 +gui.space_race.create.eraser_size.name=消しゴムの広さ +gui.space_race.create.global_stats.name=グローバルの統計 +gui.space_race.create.invite_player.name=を招待する +gui.space_race.create.player_radius.name=注意:他のプレイヤーは25ブロック以内にいる必要があります! +gui.space_race.create.rem_players.name=プレイヤーを除外する +gui.space_race.create.remove.name=除外する +gui.space_race.create.remove_player.name=プレイヤーを除外する +gui.space_race.create.rename.name=チーム名を変更 +gui.space_race.create.send_invite.name=招待を送る +gui.space_race.create.server_stats.name=サーバーの統計 +gui.space_race.create.title.name.0=スペースレース +gui.space_race.create.title.name.1=の管理 +gui.space_race.create.title.name=スペースレースの管理 +gui.space_race.join.member_count.name=%d人 +gui.space_race.join.name=参加 +gui.space_race.join.owner.name=オーナー +gui.space_race.join.title.name=スペースレースを参加する +gui.space_race.unnamed=名無しのチーム +gui.spacestation.added=%sの宇宙ステーションに入れます! +gui.spacestation.addsuccess=%sさんが宇宙ステーションに入れます! +gui.spacestation.allow_all_false=あなたの宇宙ステーションには誰も入れません! +gui.spacestation.allow_all_true=あなたの宇宙ステーションには全員が入れます! ( /ssinvite -all で取り消します) +gui.spacestation.changesuccess=宇宙ステーションのオーナーを %s から %s に変更しました。 +gui.spacestation.playername=<プレイヤー名> +gui.spacestation.removesuccess=%sさんが宇宙ステーションに入れなくなりました +gui.spacestation.to_allow_entry=この宇宙ステーションに他プレイヤーのアクセスを許可する +gui.spacestation.type_command=タイプ +gui.status.active.name=アクティブ +gui.status.air_lock_closed.name=エアロックが閉じた +gui.status.air_lock_open.name=エアロックが開いた +gui.status.blockedfully.name=太陽が見えていない +gui.status.blockedpartial.name=太陽が部分的に見えている +gui.status.check_pending.name=チェックを保留 +gui.status.check_starting.name=チェックを開始 +gui.status.checking_seal.name=密封をチェック中 +gui.status.collecting.name=収集中 +gui.status.collectingenergy.name=エネを集めている +gui.status.compressing.name=圧縮中 +gui.status.disabled.name=使用停止 +gui.status.fulltank.name=酸素タンクがいっぱい +gui.status.generating.name=発電中 +gui.status.hull_heat.name=温度 +gui.status.idle.name=アイドル +gui.status.missingleaves.name=葉ブロックが不足している +gui.status.missingoxygen.name=酸素が不足している +gui.status.missingpower.name=エネが不足している +gui.status.missingpower.short.name=エネがない +gui.status.missingtank.name=無効な酸素タンク +gui.status.nofuel.name=燃料がない +gui.status.noinvtarget.name=ターゲットにインベントリがない +gui.status.noitems.name=アイテムがない +gui.status.nooil.name=原油がない +gui.status.not_available.name=利用不可 +gui.status.not_generating.name=発電していない +gui.status.notargetload.name=ターゲットがない +gui.status.notargetunload.name=ターゲットがない +gui.status.off.name=切 +gui.status.on.name=入 +gui.status.raining.name=雨 +gui.status.ready.name=準備完了 +gui.status.refining.name=精製中 +gui.status.running.name=実行中 +gui.status.sealed.name=密封されている +gui.status.sealerblocked.name=出力口が塞がっている +gui.status.sun_visible.name=太陽が見える +gui.status.tank_empty.name=酸素タンクが空 +gui.status.targetempty.name=ターゲットの機体が空 +gui.status.targetfull.name=ターゲットの機体がいっぱい +gui.status.unknown.name=不明 +gui.status.unsealed.name=空間が広すぎ/密封されてない +gui.tank.oxygen_remaining=酸素残量 +gui.telemetry_fail.message=最初にその周波数モジュールでエンティティを追跡(左クリック)する必要があります!(それか、身に着けてください) +gui.telemetry_fail_no_frequency_module.message=周波数モジュールを持ってください +gui.telemetry_fail_wearing_it.message=遠隔測定装置とリンクする場合は、周波数モジュールを取り外してください +gui.telemetry_succeed.message=遠隔測定リンクを作成 +gui.thermal_slot.desc.0=温度スロット。'周囲温度コントローラ' +gui.thermal_slot.desc.1=をここに置いてください。(オプション) +gui.thermal_slot.desc.2=注意: より多くのエネルギーを使う! +gui.title.air_lock.name=%sのエアロックコントローラ +gui.tracking.message=トラッキングが有効になりました。リンクするために、遠隔測定装置をこれで右クリックしてください +gui.village.warning.no_freq_mod=彼らと意思疎通するためには周波数モジュールの装備が必要です! +gui.warning.invalid_thermal=熱保護が無効です! +gui.warning.noroom=十分なスペースが無い! +gui.warning=警告! +item.air_fan.name=換気扇 +item.air_vent.name=換気口 +item.basic_item.ambient_thermal_controller.name=周囲温度コントローラ +item.basic_item.canned_food.name=缶詰食品 +item.basic_item.compressed_aluminum.name=圧縮されたアルミ +item.basic_item.compressed_bronze.name=圧縮されたブロンズ +item.basic_item.compressed_copper.name=圧縮された銅 +item.basic_item.compressed_iron.name=圧縮された鉄 +item.basic_item.compressed_steel.name=圧縮された鋼 +item.basic_item.compressed_tin.name=圧縮されたスズ +item.basic_item.dehydrated_apple.name=乾燥リンゴ +item.basic_item.dehydrated_carrot.name=乾燥ニンジン +item.basic_item.dehydrated_melon.name=乾燥スイカ +item.basic_item.dehydrated_potato.name=乾燥ジャガイモ +item.basic_item.frequency_module.name=周波数モジュール +item.basic_item.ingot_aluminum.name=アルミインゴット +item.basic_item.ingot_bronze.name=ブロンズインゴット +item.basic_item.ingot_copper.name=銅インゴット +item.basic_item.ingot_steel.name=鋼インゴット +item.basic_item.ingot_tin.name=スズインゴット +item.basic_item.raw_silicon.name=未製錬シリコン +item.basic_item.solar_module_0.name=ソーラーパネル +item.basic_item.solar_module_1.name=連結ソーラーパネル +item.basic_item.wafer_advanced.name=高性能ウェファー +item.basic_item.wafer_basic.name=基本ウェファー +item.basic_item.wafer_solar.name=ソーラーウェファー +item.battery.name=電池 +item.bucket_fuel.name=燃料入りバケツ +item.bucket_oil.name=原油入りバケツ +item.buggy.name=ムーンバギー +item.buggymat.seat.name=バギー座席 +item.buggymat.storage.name=バギー貯蔵容機 +item.buggymat.wheel.name=バギーホイール +item.canister.copper.name=銅缶 +item.canister.tin.name=スズ缶 +item.canvas.name=キャンバス +item.cheese_block.name=チーズブロック +item.cheese_curd.name=チーズカード +item.compressed_meteoric_iron.name=圧縮された流星鉄 +item.dungeonfinder.name=ダンジョン探知機 +item.empty_liquid_canister.name=空の缶 +item.emergency_kit.description=右クリックで酸素ギアとその他必須アイテムを装備する. 注意:1回だけ使用可能! +item.emergency_kit.name=宇宙応急キット +item.engine.tier1booster.name=レベル1 ブースター +item.engine.tier1engine.name=レベル1 ロケットエンジン +item.flag.name=旗 +item.food.cheese_slice.name=スライスチーズ +item.food.burger_bun.name=バーガーバンズ +item.food.beef_patty_raw.name=牛ひき肉(生) +item.food.beef_patty_cooked.name=ビーフパティ(調理済み) +item.food.cheeseburger.desc=宇宙飛行士はチーズバーガーが大好き! 大満足の一品. +item.food.cheeseburger.name=チーズバーガー +item.food.canned_beef.name=牛肉の缶詰 +item.fuel.name=ロケット燃料 +item.fuel_canister.name=満杯の燃料缶 +item.fuel_canister_partial.name=ある程度入った燃料缶 +item.heavy_plating.name=ヘビーデューティープレート +item.hot_description.name=熱い +item.infinite_battery.name=無限の電池 +item.infinite_oxygen.name=無限の酸素タンク +item.key.t1.name=レベル1 ダンジョン鍵 +item.lunar_sapphire.description=宇宙の村人と交易する際の通貨となる +item.lunar_sapphire.name=ルナサファイア +item.meteor_chunk.name=投擲用の隕石 +item.meteor_chunk_hot.name=投擲用の隕石 +item.meteoric_iron_ingot.name=流星鉄インゴット +item.meteoric_iron_raw.name=未製錬の流星鉄 +item.nose_cone.name=ノーズコーン +item.oil_canister.name=満杯の原油缶 +item.oil_canister_partial.name=ある程度入った原油缶 +item.oil_extractor.name=ポータブル原油抽出機 +item.oxygen_concentrator.name=酸素濃縮機 +item.oxygen_gear.name=酸素ギア +item.oxygen_mask.name=酸素マスク +item.oxygen_tank_heavy_empty.name=空の大型酸素タンク +item.oxygen_tank_heavy_full.name=大型酸素タンク +item.oxygen_tank_light_empty.name=空の小型酸素タンク +item.oxygen_tank_light_full.name=小型酸素タンク +item.oxygen_tank_med_empty.name=空の中型酸素タンク +item.oxygen_tank_med_full.name=中型酸素タンク +item.parachute_black.name=黒色のパラシュート +item.parachute_blue.name=空色のパラシュート +item.parachute_brown.name=茶色のパラシュート +item.parachute_darkblue.name=青色のパラシュート +item.parachute_darkgray.name=灰色のパラシュート +item.parachute_darkgreen.name=緑色のパラシュート +item.parachute_gray.name=薄灰色のパラシュート +item.parachute_lime.name=黄緑色のパラシュート +item.parachute_magenta.name=赤紫色のパラシュート +item.parachute_orange.name=橙色のパラシュート +item.parachute_pink.name=桃色のパラシュート +item.parachute_plain.name=パラシュート +item.parachute_purple.name=紫色のパラシュート +item.parachute_red.name=赤色のパラシュート +item.parachute_teal.name=水色のパラシュート +item.parachute_yellow.name=黄色のパラシュート +item.rocket_fins.name=ロケットフィン +item.rocket_t1.name=レベル1 ロケット +item.schematic.name=NASA作業台 設計図 +item.sensor_glasses.name=センサーゴーグル +item.sensor_lens.name=センサーレンズ +item.standard_wrench.name=レンチ +item.steel_axe.name=ヘビーデューティーの斧 +item.steel_boots.name=ヘビーデューティーのブーツ +item.steel_chestplate.name=ヘビーデューティーのチェストプレート +item.steel_helmet.name=ヘビーデューティーのヘルメット +item.steel_hoe.name=ヘビーデューティーのクワ +item.steel_leggings.name=ヘビーデューティーのレギンス +item.steel_pickaxe.name=ヘビーデューティーのツルハシ +item.steel_pole.name=鋼の棒 +item.steel_shovel.name=ヘビーデューティーのシャベル +item.steel_sword.name=ヘビーデューティーの剣 +item.tier1.desc=レベル1 +item_desc.powerdraw.name=要求エネルギー: %s /s +item_desc.shift.name=%s キーで詳細を表示 +item_group.galacticraft_blocks=Galacticraftのブロック +item_group.galacticraft_items=Galacticraftのアイテム +jei.arc_lamp.info=正面をとても明るく照らす. 高い場所に設置すると最高の効果を得られる! レンチを使用して回転できる. +jei.electric_compressor.info=圧縮機の電動版で、2倍速い! レベル2のパワーでさらに高速に. ホッパーでアイテムを補充/収集できる. +jei.electric_compressor.appeng.info=AE2で自動化するには、2つの異なるMODのインゴットでレシピをセットアップします. https://goo.gl/BwY15G にて全ての情報を閲覧できます. +jei.fluid_pipe.info=あらゆる液体/気体を輸送するためのパイプ.タンクから流体を放出するには、レンチでクリックして'プルモード'に変更する. \nプルモードのパイプはタンク/マシンに流体を供給できない - よって、パイプを最低2ブロック以上の長さにすること! +jei.fuel_loader.info=発射台の隣に設置する. 発射台の上にあるロケットに燃料を補給する. 宇宙への旅 -帰り道も含む- に欠かせない物! +jei.magnetic_crafting.info=アイテムを保持できる作業台. ホッパーからアイテムを受け取り、最後に成功したレシピのアイテムを自動作成できる. +jei.oxygen_collector.info=呼吸可能な酸素混合気体をオーバーワールド -または宇宙空間で- 近くの緑の葉や成長した作物から収集する. \n酸素タンク充填用の酸素圧縮機、酸素拡散機および酸素密封機にパイプを繋げて酸素を輸送できる. +jei.oxygen_distributor.info=宇宙空間にプレイヤー(および他のクリーチャー)が呼吸できるバブル環境を生成する. 酸素収集機や酸素蓄積モジュールから、呼吸可能な酸素混合気体をこのマシンに供給できる. +jei.oxygen_sealer.info=宇宙基地の1部屋を呼吸可能な空気で満たす. 酸素収集機や酸素蓄積モジュールから、呼吸可能な酸素混合気体をこのマシンに供給できる. 部屋の壁はすべて固体でなければならない. \nセンサーゴーグルで空気の漏れ口を見つけてください! \n酸素密封機1台の最大部屋サイズは10x10x8ブロック.大きな部屋には複数の酸素密封機を使用してください! +jei.wrench.info=ほとんどのGalacticraftマシンはレンチを持って右クリックすると回転する. \nほとんどの電動マシンはレンチを持ってShift+右クリックすると、電力やその他資源の入出力の位置を変更できる. +keybind.map.name=ギャラクシーマップ +keybind.sensortoggle.name=センサーグラスのモード切替 +keybind.spaceshipinv.name=スペースシップのインベントリの開閉 +keybind.vehiclebackward.name=機械 後方キー +keybind.vehicledown.name=機械 下キー +keybind.vehicleforward.name=機械 前方キー +keybind.vehicleleft.name=機械 左キー +keybind.vehicleright.name=機械 右キー +keybind.vehicleup.name=機械 上キー +moon.moon=月 +newversion.failed.name=GalacticraftのUpdate情報が確認出来ませんでした。 15秒後にもう一度確認してみます +newversion.success.name=Galacticraftの新しいバージョンがあります: +planet.jupiter=木星 +planet.mercury=水星 +planet.neptune=海王星 +planet.overworld=地球 +planet.saturn=土星 +planet.uranus=天王星 +planet.venus=金星 +satellite.spacestation.overworld=オーバーワールド宇宙ステーション +schematic.moonbuggy.name=ムーンバギー +schematic.rocket_t1.name=レベル1 ロケット +schematic.rocket_t2.name=レベル2 ロケット +solarsystem.sol=太陽 +star.sol=太陽 +tile.air_lock_controller.name=エアロックコントローラ +tile.air_lock_frame.description=エアロックフレームをポータル型に配置し、そのうち1ブロックをコントローラに置き換えれば、エアロックとして機能する。 +tile.air_lock_frame.name=エアロックフレーム +tile.air_lock_seal.name=エアロックシール +tile.aluminum_wire.alu_wire.description=エネルギー源を消費先の機械に接続するために使用する +tile.aluminum_wire.alu_wire.name=アルミワイヤー +tile.aluminum_wire.alu_wire_heavy.description=エネルギー源を消費先の機械に接続するために使用する。容量が大きいため、レベル2機械の効率が向上する。 +tile.aluminum_wire.alu_wire_heavy.name=大型アルミワイヤー +tile.aluminum_wire.alu_wire_switch.description=レッドストーン信号でオフに切り替えない限り、アルミワイヤーと同じように接続できる. +tile.aluminum_wire.alu_wire_switch.name=切り替え可能なアルミワイヤー +tile.aluminum_wire.alu_wire_switch_heavy.description=レッドストーン信号でオフに切り替えない限り、大型アルミワイヤーと同じように接続できる. +tile.aluminum_wire.alu_wire_switch_heavy.name=切り替え可能な大型アルミワイヤー +tile.arclamp.description=広範囲を強い光で照らすために使用する。ほとんどのMobは逃げる。 +tile.arclamp.name=アークランプ +tile.basic_block_core.block_aluminum_gc.name=アルミブロック +tile.basic_block_core.block_copper_gc.name=銅ブロック +tile.basic_block_core.block_meteoric_iron_gc.name=固体の流星鉄 +tile.basic_block_core.block_tin_gc.name=スズブロック +tile.basic_block_core.block_silicon_gc.name=シリコンブロック +tile.basic_block_core.deco_block_0.name=スズ装飾ブロック +tile.basic_block_core.deco_block_1.name=スズ装飾ブロック +tile.basic_block_core.ore_aluminum_gc.name=アルミ鉱石 +tile.basic_block_core.ore_copper_gc.name=銅鉱石 +tile.basic_block_core.ore_silicon.name=シリコン鉱石 +tile.basic_block_core.ore_tin_gc.name=スズ鉱石 +tile.basic_block_moon.bricks.name=レンガ +tile.basic_block_moon.cheesestone.name=チーズ鉱石 +tile.basic_block_moon.coppermoon.name=銅鉱石 +tile.basic_block_moon.moondirt.name=月の土 +tile.basic_block_moon.moongrass.name=月の草 +tile.basic_block_moon.moonstone.name=月の石 +tile.basic_block_moon.sapphiremoon.name=サファイア鉱石 +tile.basic_block_moon.tinmoon.name=スズ鉱石 +tile.buggy_pad.description=3x3の正方形に敷くと、燃料給油機を取り付けてパッド上のバギーに給油できる。ロケットの打ち上げには使えない! +tile.cargo.loader.name=貨物積み込み機 +tile.cargo.unloader.name=貨物取り出し機 +tile.cargo_loader.description=ブロックやアイテムを、ストレージ容量のあるロケットや車両へ積み込む。発射台/燃料パッドに取り付ける必要がある。 +tile.cargo_unloader.description=ブロックやアイテムを、ストレージ容量のあるロケットや車両から取り出す。発射台/燃料パッドに取り付ける必要がある。 +tile.cheese.description=月のチーズから作ることができ、設置して食べられる。 +tile.cheese.name=チーズブロック +tile.circuit_fabricator.description=基本的な材料を、高度な機械に使われるシリコンウェファーに加工する。 +tile.coal_generator.description=石炭や石炭ブロックを燃やして発電する。最も簡単だが効率も一番低いエネルギー収集方法。 +tile.collector.description=周囲の葉から収集した酸素を蓄積する。 +tile.collector.name=酸素収集機 +tile.compressor.description=インゴットを圧縮された等価物へと加工する。Galacticraftで最も重要な機械! +tile.compressor_electric.description=インゴットを圧縮された等価物へと加工する。1度に2つ圧縮するため、下位モデルよりも効率的。 +tile.concealed_detector.name=プレイヤー検知器 +tile.concealed_redstone.name=隠しレッドストーンワイヤー +tile.concealed_repeater.name=隠しレッドストーンリピーター +tile.crude_oil.name=原油 +tile.crude_oil_moving.name=原油 +tile.crude_oil_still.name=原油 +tile.deconstructor.description=使い古したロケットやアイテムを分解し、再利用できる材料を回収する. +tile.dishbase.description=宇宙ステーションの位置を追跡し、あなたの宇宙基地からの通信を受信できる。 +tile.dishbase.name=アンテナ +tile.distributor.description=内部タンクを使い、拡散機を中心に外側へ酸素バブルを放出する。バブルの中では安全な呼吸が可能になる。 +tile.distributor.name=酸素拡散機 +tile.dummyblock.cryogenic_chamber.name=低温室 +tile.dummyblock.launch_pad.name=発射台 +tile.dummyblock.nasa_workbench.name=NASA作業台 +tile.dummyblock.solar.name=ソーラー発電機 +tile.dummyblock.space_station_base.name=宇宙ステーション基地 +tile.electric_furnace_tier1.description=従来の石炭かまどより高速な代替手段として使用できる。 +tile.electric_furnace_tier2.description=従来の石炭かまどや電気炉よりも優れた高速な代替手段として使用できる。1つの鉱石から2つのインゴットを生産する! +tile.emergency_box.description=惑星の最初の着陸地点の近くに設置しよう.開けると中に応急キットがある. Mob除けにもなる! +tile.emergency_box.filled.name=応急ポスト(キット入り) +tile.emergency_box.name=応急ポスト +tile.enclosed.aluminum_wire.name=密封用 アルミワイヤー +tile.enclosed.copper_cable.name=密封用 銅ケーブル +tile.enclosed.description=宇宙基地の壁のように空気を通せない個所では、密封可能なブロックを使う必要がある。 +tile.enclosed.fluid_pipe.name=密封用 酸素パイプ +tile.enclosed.glass_fibre_cable.name=密封用 ガラス繊維ケーブル +tile.enclosed.gold_cable.name=密封用 金ケーブル +tile.enclosed.heavy_aluminum_wire.name=密封用 大型アルミワイヤー +tile.enclosed.hv_cable.name=密封用 HVケーブル +tile.enclosed.lv_cable.name=密封用 低電流ケーブル +tile.enclosed.me_cable.name=密封用 MEケーブル +tile.enclosed.pipe_fluids_cobblestone.name=密封用 丸石の防水パイプ +tile.enclosed.pipe_fluids_stone.name=密封用 石の防水パイプ +tile.enclosed.pipe_items_cobblestone.name=密封用 丸石の輸送パイプ +tile.enclosed.pipe_items_stone.name=密封用 石の輸送パイプ +tile.enclosed.pipe_power_gold.name=密封用 金の導電性パイプ +tile.enclosed.pipe_power_stone.name=密封用 石の導電性パイプ +tile.energy_storage_module_tier1.description=大量のエネルギーを蓄積し、後で使用できる。 +tile.energy_storage_module_tier2.description=大量のエネルギーを蓄積し、後で使用できる。 下位モデルより多く蓄積/出力できる。 +tile.fallen_meteor.description=ほとんど、あるいは全く大気のない惑星/衛星で見付けられる。壊すと流星鉄をドロップする。 +tile.fallen_meteor.name=隕石 +tile.fluid_pipe.description=液体と気体を供給源から目標ブロックへ輸送する。レンチでモードを切り替える。 +tile.fluid_pipe.name=流体パイプ +tile.fluid_pipe_pull.description=液体と気体を供給源から目標ブロックへ輸送する。レンチでモードを切り替える。 +tile.fluid_pipe_pull.name=流体パイプ +tile.fluid_tank.description=液体と気体を蓄積し、後で使用できる。 +tile.fluid_tank.name=流体タンク +tile.fuel.name=燃料 +tile.fuel_block.name=燃料 +tile.fuel_loader.description=発射台や燃料パッドに接続し、パッド上のロケットや車両に燃料を補給する。 +tile.fuel_loader.name=燃料給油機 +tile.glowstone_torch.description=木材の松明が燃えない酸素がない場所での照明に最適。 +tile.glowstone_torch.name=グロウストーン松明 +tile.grating.name=格子 +tile.landing_pad.buggy_fueler.name=バギー燃料パッド +tile.landing_pad.cargo_pad.name=荷物発射台 +tile.landing_pad.description=3x3の正方形に敷いてロケットを設置する。燃料給油機、貨物積み込み機、および打ち上げコントローラを取り付け可能。 +tile.landing_pad.landing_pad.name=発射台 +tile.landing_pad_full.name=発射台 +tile.machine.0.name=火力発電機 +tile.machine.1.name=エネルギー蓄積モジュール +tile.machine.2.name=電気炉 +tile.machine.3.name=圧縮機 +tile.machine.7.name=アーク炉 +tile.machine.8.name=エネルギー蓄積クラスター +tile.machine2.4.name=電気圧縮機 +tile.machine2.5.name=回路製作機 +tile.machine2.6.name=酸素蓄積モジュール +tile.machine2.10.name=解体機 +tile.machine3.9.name=染色機 +tile.magnetic_table.name=磁気作業台 +tile.magnetic_table.description=置かれたアイテムをインベントリに保持する!アイテムはShift+右クリックで取り出せる. ホッパーでアイテムの出し入れができ、最後に作成したレシピのアイテムを自動作成しようとする. +tile.moon_stairs_brick.name=月ダンジョンのレンガ階段 +tile.moon_stairs_stone.name=月の石の階段 +tile.ore_copper.name=銅鉱石 +tile.ore_tin.name=スズ鉱石 +tile.oxygen_compressor.0.name=酸素圧縮機 +tile.oxygen_compressor.1.name=酸素減圧装置 +tile.oxygen_compressor.description=内部ストレージから酸素タンクへ酸素を充填する。 +tile.oxygen_decompressor.description=酸素タンクから内部ストレージへ酸素を取り出す。 +tile.oxygen_detector.description=周囲に酸素がある場合にレッドストーン信号を出力する。 +tile.oxygen_detector.name=酸素センサー +tile.oxygen_storage_module.description=酸素を蓄積し、後で使用できる。 +tile.painter.description=真空ガラス、照明パネル、その他ペイント可能アイテムを染色する。 任意のブロック-または染料-で鮮やかな色を作ろう! +tile.panel_lighting.description=宇宙空間用の照明パネル!レンチで回転できる. 外観の変更方法:スニークキーを押しながら、目的のブロックに対してパネルを設置する. +tile.panel_lighting_0.name=照明パネル(正方形) +tile.panel_lighting_1.name=照明パネル(スポットライト) +tile.panel_lighting_2.name=照明パネル(直線) +tile.panel_lighting_3.name=照明パネル(暗め) +tile.panel_lighting_4.name=照明パネル(暗め) +tile.parachest.description=地球のような特定の惑星/衛星に着陸した後、空から落ちてくる。直前に打ち上げたロケット、燃料、貨物が入っている。 +tile.parachest.name=パラシュートチェスト +tile.platform.description=2x2に設置するとプラットフォームを形成し、上下にある次のプラットフォームへとプレイヤーを運ぶ. スニーク = 下降 : ジャンプ = 上昇. +tile.platform.name=プラットフォーム +tile.refinery.description=エネルギーを消費して原油を精製し、ロケットや車両の燃料を生産する。 +tile.refinery.name=石油精製機 +tile.rocket_workbench.name=NASA作業台 +tile.rocket_workbench.description=多くの高度な部品や車両を製造する。新しい設計図を見付けて追加できる。 +tile.sapling2.birch.name=シラカバの苗木 +tile.sapling2.jungle.name=ジャングルの苗木 +tile.sapling2.oak.name=オークの苗木 +tile.sapling2.spruce.name=マツの苗木 +tile.sealer.description=空間が密閉されていれば、呼吸可能な空気で空間を満たす。 +tile.sealer.name=酸素密封機 +tile.slab_gc_half.moon_bricks_slab.name=月ダンジョンのハーフブロックレンガ +tile.slab_gc_half.moon_slab.name=月の石のハーフブロック +tile.slab_gc_half.tin_slab_1.name=スズ装飾ハーフブロック +tile.slab_gc_half.tin_slab_2.name=スズ装飾ハーフブロック +tile.solar.advanced_solar.name=高性能ソーラー発電機 +tile.solar.basic_solar.name=ソーラー発電機 +tile.solar_adv.description=太陽から光エネルギーを集め蓄積/使用できる。最適なエネルギー収集のためにパネル角度を自動調整する。 +tile.solar_basic.description=太陽から光エネルギーを集め蓄積/使用できる。正午に最もエネルギーを収集する(調整不可能)。 +tile.space_glass.description=宇宙基地用の真空密封ガラス. お近くの染色機でガラス枠を好みの色にペイントできる! +tile.space_glass.clear.description=宇宙の素晴らしい景色を見渡せる透明なガラス.水中でもクリアに見える. +tile.space_glass.strong.description=丈夫な防爆ガラス.透明なアルミでできている... +tile.space_glass_clear.name=真空ガラス(透明) +tile.space_glass_vanilla.name=真空ガラス +tile.space_glass_strong.name=真空ガラス(強化) +tile.space_station_base.name=宇宙ステーションの到着ブロック +tile.spin_thruster.description=スピンスラスタは、宇宙ステーションを回転させるために使う。 +tile.spin_thruster.name=スピンスラスタ +tile.telemetry.description=リンクされたロケット、プレイヤー、Mobから有用なデータを収集する。モニターの近くに設置するとよい。周波数モジュールを使ってデータリンクを確立する。 +tile.telemetry.name=遠隔測定装置 +tile.tin_stairs_1.name=スズ装飾階段 +tile.tin_stairs_2.name=スズ装飾階段 +tile.treasure_chest.description=月のダンジョンに生成される。最終ボスを倒した後に解錠できる。 +tile.treasure_chest.name=宝箱 +tile.unlit_torch.name=松明 +tile.unlit_torch_stone.name=石の松明 +tile.unlit_torch_lit.name=松明 +tile.unlit_torch_stone_lit.name=石の松明 +tile.view_screen.description=宇宙基地の最後の仕上げ。右クリックすると表示されている情報が変わる。 +tile.view_screen.name=モニター +tile.wall_gc.moon.name=月の石の壁 +tile.wall_gc.moon_bricks.name=月ダンジョンのレンガ壁 +tile.wall_gc.tin.name=スズ装飾壁 + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=月と...他の星々を冒険しよう! +advancement.galacticraft.coal_generator.title=火力発電 +advancement.galacticraft.coal_generator.description=火力発電機を作る +advancement.galacticraft.circuit_fabricator.title=製造 +advancement.galacticraft.circuit_fabricator.description=ウェファー製造のために回路製作機を作る +advancement.galacticraft.basic_wafer.title=美味しいウェハース +advancement.galacticraft.basic_wafer.description=基本ウェファーを作る(食べちゃダメ) +advancement.galacticraft.advanced_wafer.title=黄金 +advancement.galacticraft.advanced_wafer.description=ウェファー製造のために回路製作機を作る +advancement.galacticraft.compressor.title=圧縮 +advancement.galacticraft.compressor.description=圧縮機を作る +advancement.galacticraft.solar.title=再生可能エネルギー +advancement.galacticraft.solar.description=ソーラー発電機を作る +advancement.galacticraft.advanced_solar.title=速い + 効率的 +advancement.galacticraft.advanced_solar.description=高性能ソーラー発電機を作る +advancement.galacticraft.electric_compressor.title=電気アップグレード +advancement.galacticraft.electric_compressor.description=電気圧縮機を作る +advancement.galacticraft.oil.title=粘着性物質 +advancement.galacticraft.oil.description=原油に落ちる +advancement.galacticraft.refiery.title=精製の時間! +advancement.galacticraft.refiery.description=石油精製機を作る +advancement.galacticraft.rocket_fuel.title=ロケット燃料 +advancement.galacticraft.rocket_fuel.description=石油精製機で原油を精製する +advancement.galacticraft.oxygen_collector.title=酸素は入っていません +advancement.galacticraft.oxygen_collector.description=酸素収集機を作る +advancement.galacticraft.oxygen_compressor.title=空気を圧縮 +advancement.galacticraft.oxygen_compressor.description=酸素圧縮機を作る +advancement.galacticraft.fill_tank.title=宇宙に行くための空気 +advancement.galacticraft.fill_tank.description=酸素タンクを満タンにする +advancement.galacticraft.fill_all_tanks.title=酸素備蓄 +advancement.galacticraft.fill_all_tanks.description=全種類の酸素タンクを満タンにする +advancement.galacticraft.all_oxygen_gear.title=準備完了 +advancement.galacticraft.all_oxygen_gear.description=宇宙空間での呼吸に必要な全アイテムを作る +advancement.galacticraft.rocket_workbench.title=スペースエンジニア +advancement.galacticraft.rocket_workbench.description=NASA作業台を作る +advancement.galacticraft.rocket_t1.title=ロケットを手に入れた! +advancement.galacticraft.rocket_t1.description=金属を溶接してロケットを作る +advancement.galacticraft.fuel_loader.title=満タンにして! +advancement.galacticraft.fuel_loader.description=燃料給油機を作る +advancement.galacticraft.launch_rocket.title=離陸! +advancement.galacticraft.launch_rocket.description=最初のロケットを打ち上げる +advancement.galacticraft.moon.title=月! +advancement.galacticraft.moon.description=月に着陸する +advancement.galacticraft.create_space_station.title=宇宙ステーション +advancement.galacticraft.create_space_station.description=君の宇宙ステーションを作る! +advancement.galacticraft.spin_thruster.title=眩暈がするううう +advancement.galacticraft.spin_thruster.description=スピンスラスタを作る +advancement.galacticraft.moon_dungeon.title=ウィザーより邪悪 +advancement.galacticraft.moon_dungeon.description=ダンジョンで宇宙のスケルトンキングを発見する +advancement.galacticraft.dungeon_key_moon.title=鍵を手に入れた +advancement.galacticraft.dungeon_key_moon.description=ダンジョンに隠れているボスを倒し、鍵を盗む +advancement.galacticraft.moon_buggy_schematic.title=欠陥のある設計図 +advancement.galacticraft.moon_buggy_schematic.description=ムーン§oバギー の設計図を手に入れる +advancement.galacticraft.moon_buggy.title=バギー +advancement.galacticraft.moon_buggy.description=金属を溶接してムーンバギーを作る \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ko_kr.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ko_kr.lang new file mode 100644 index 00000000..a2b22771 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ko_kr.lang @@ -0,0 +1,823 @@ +checklist.create_grapple.key=쇠갈고리 제작 +checklist.equip_oxygen_suit.key=산소 호흡기 장착 +checklist.equip_parachute.key=낙하산 장착 +command.gcastrominer.count=%s 의 천체 광업기계 수는 %s 입니다. +commands.emergencykit=%s가 응급상자를 받았습니다! +commands.dimensionteleport=%s 님이 해당 대기권으로 진입하였습니다:%s +commands.dimensiontp.too_many=명령어 인수가 너무 많습니다! 사용법: %s +commands.gcenergyunits.invalid_units=단위가 유효하지 않은 /GCEnergyUnits 명령어 입니다. 사용법: %s +commands.gcenergyunits.no_units=단위가 구체적으로 명시되어야 합니다! 사용법: %s +commands.gchouston.confirm.1=여기는 우주통제센터입니다, 다시 말해주세요? +commands.gchouston.confirm.2=(임무 포기를 하고 싶다면 /gchouston을 다시 한번 입력하여 확인하세요.) +commands.gchouston.fail=/gchouston 명령어는 오직 우주 또는 크리에이티브 모드에서만 가능합니다. +commands.gchouston.help.1=음, 나로, 우리 문제가 있어요. +commands.gchouston.help.2=(임무를 포기하고 홈으로 돌아가고 싶으면 /gchouston을 입력하세요.) +commands.gchouston.noop=다른 플레이어에게 /gchouston를 사용하는 것은 오직 운영자만 가능합니다. +commands.gchouston.success=OK, 준비됬죠?, %s, 오버월드 홈 위치로 순간이동합니다. +commands.joinrace.no_team=팀이 구체적으로 명시되어야 합니다! 사용법: %s +commands.ssinvite.not_found=당신의 플레이어 이름으로 정거장을 찾을 수 없습니다. 먼저 그곳에 직접 도착해야 합니다! +commands.ssinvite.wrong_usage=명령어 인수가 부족합니다! 사용법: %s +commands.ssnewowner.wrong_usage=우주정거장 ID#를 인식할 수 없습니다 - 그것은 존재합니까? 사용법: %s +commands.ssuninvite.no_player=%s를 우주정거장 리스트에서 찾을 수 없습니다! +container.cargoloader.name=화물 적재기 +container.cargounloader.name=화물 적하기 +container.fuelloader.name=연료 적재기 +container.lander.name=착륙기 +container.magneticcrafting.name=자석 조합대 +container.oxygencollector.name=산소 수집기 +container.oxygencompressor.name=산소 압축기 +container.oxygendecompressor.name=산소 감압기 +container.oxygendistributor.name=산소 배급기 +container.oxygensealer.name=산소 밀봉기 +container.parachest.name=낙하상자 +container.refinery.name=정제기 +container.solaradvanced.name=고급 태양광 전지판 +container.solarbasic.name=기초 태양광 전지판 +container.spaceship.name=1티어 로켓 +container.treasurechest.name=보물 상자 +death.attack.meteor_chunk=%1$s이(가) 운석 덩어리에 맞아 사망했습니다! +death.attack.oxygen_suffocation=%1$s이(가) 산소 부족으로 사망했습니다! +death.attack.spaceship_crash=%1$s의 로켓이 땅으로 추락했습니다! +death.attack.sulphuric_acid=%1$s이(가) 황산에 용해되었습니다! +death.attack.thermal=%1$s, 열보호 장비를 잊으셨군요. +dimension.moon.name=달 +dimension.overworld.name=오버월드 (지구) +dimension.sun.name=태양 +entity.alien_villager.name=외계주민 +entity.buggy.name=월면차 +entity.celestial_screen.name=천장 스크린 +entity.evolved_creeper.name=진화된 크리퍼 +entity.evolved_skeleton.name=진화된 스켈레톤 +entity.evolved_skeleton_boss.name=진화된 스켈레톤 보스 +entity.evolved_spider.name=진화된 거미 +entity.evolved_zombie.name=진화된 좀비 +entity.evolved_enderman.name=진화된 엔더맨 +entity.evolved_witch.name=진화된 마녀 +entity.flag.name=깃발 +entity.gcflag.name=우주 깃발 +entity.gravity_arrow.name=중력 화살 +entity.lander.name=착륙기 +entity.meteor.name=운석 +entity.meteor_chunk.name=운석 덩어리 +entity.oxygen_bubble.name=산소 기포 +entity.para_chest.name=낙하상자 +entity.rocket_t1.name=1티어 로켓 +galaxy.milky_way=은하수 (우리 은하) +gc.configgui.allow_liquids_grating=창살로 액체가 흐르게 합니다. +gc.configgui.alternate_canister_recipe=대체 깡통 조합법 +gc.configgui.asteroids_flags=도전 모드 깃발 +gc.configgui.asteroids_start=도전 모드(소행성에서 시작) +gc.configgui.biome_id_base=갤럭틱크래프트용 바이옴 ID기준 +gc.configgui.detectable_i_ds=감지가능 ID +gc.configgui.disable_biome_type_registrations=바이옴 유형 등록 없애기 +gc.configgui.disable_cheese_moon=달 치즈 없애기 +gc.configgui.disable_copper_moon=달 구리 없애기 +gc.configgui.disable_lander=착륙기 없애기 +gc.configgui.disable_moon_village_gen=달 마을 없애기 +gc.configgui.disable_ore_dict_space_metals=갤러틱크래프트 자체의 우주 금속을 조합법에 사용하기 +gc.configgui.disable_sapphire_moon=달에 있는 사파이어 광석 없애기 +gc.configgui.disable_space_station_creation=우주정거장 생성 없애기 +gc.configgui.disable_spaceship_grief=로켓 폭발 없애기 +gc.configgui.disable_spaceship_particles=로켓 입자 없애기 +gc.configgui.disable_tin_moon=달 주석 없애기 +gc.configgui.disable_update_check=업데이트 확인 없애기 +gc.configgui.disable_vehicle_camera_changes=바이브크래프트: 3인칭 및 확대/축소 없애기 +gc.configgui.dungeon_boss_health_mod=던전 보스 체력 변경 +gc.configgui.enable_aluminum_ore_gen=오버월드 알루미늄 정보 +gc.configgui.enable_copper_ore_gen=오버워드 구리 정보 +gc.configgui.enable_debug=콘솔에 디버깅 메시지 표시 +gc.configgui.enable_other_mods_features=다른 모드의 생성기 이용 +gc.configgui.enable_retrogen_oil=오버월드 레트로겐유 +gc.configgui.enable_sealer_edge_checks=밀봉기 모서리 확인 +gc.configgui.enable_silicon_ore_gen=오버월드 규소 정보 +gc.configgui.enable_space_race_manager_popup=우주 경주 관리자 팝업 사용 +gc.configgui.enable_thaum_craft_nodes=사움크래프트의 마디를 행성에 사용 +gc.configgui.enable_tin_ore_gen=오버월드 주석 정보 +gc.configgui.external_oil_gen=외부 기름 정보 +gc.configgui.force_overworld_respawn=오버월드 리스폰 강요 +gc.configgui.hard_mode=난이도를 어렵게 하기 +gc.configgui.id_achiev_base=기초 업적 ID +gc.configgui.id_dimension_moon=달 세계 ID +gc.configgui.id_dimension_overworld=오버월드의 차원 +gc.configgui.id_dimension_overworld_orbit=우주정거장 차원 ID +gc.configgui.id_dimension_overworld_orbit_static=우주정거장 고정 차원 ID +gc.configgui.id_schematic_add_schematic=설계도 ID "설계도 추가" +gc.configgui.id_schematic_moon_buggy=설계도 ID 월면차 +gc.configgui.id_schematic_rocket_t1=설계도 ID 1티어 로켓 +gc.configgui.key_override_fuel_level=설정: 로켓 연료 GUI +gc.configgui.key_override_toggle_adv_goggles=설정: 진화된 고글 +gc.configgui.map_scroll_invert=지도 스크롤 뒤집기 +gc.configgui.map_scroll_sensitivity=지도 스크롤 마우스 감도 +gc.configgui.meteor_block_damage=유성 블록 손상 활성화 +gc.configgui.meteor_spawn_mod=유성 스폰 수식 +gc.configgui.more_stars=더 많은 별 표시하기 +gc.configgui.oil_gen_factor=기름 정보 요인 +gc.configgui.ore_dict_silicon=OreDict에 규소 이름이 있습니다. +gc.configgui.other_mod_ore_gen_i_ds=행성에 다른 모드 광석 이용 +gc.configgui.override_capes=곡식 기증 기각 +gc.configgui.override_map=설정: 은하 지도 +gc.configgui.oxygen_indicator_bottom=산소 미터 아래로 +gc.configgui.oxygen_indicator_left=산소 미터 왼쪽으로 +gc.configgui.planet_worldborders=달 착륙을 위해 x, z를 최대화합니다. +gc.configgui.quick_mode=빠른 게임 (쉬움) +gc.configgui.rocket_disable_overworld_return=로켓 오버월드 복귀 금지 +gc.configgui.rocket_disabled_dimensions=로켓 차원 접금 불가 +gc.configgui.rocket_fuel_factor=로켓 연료 요인 +gc.configgui.sealable_i_ds=밀봉 블록 +gc.configgui.space_station_energy_scalar=우주정거장 에너지 변경 +gc.configgui.space_stations_require_permission=우주정거장 허가 +gc.configgui.static_loaded_dimensions=로딩된 차원 고정 +gc.configgui.static_loaded_new_ss=새 우주정거장 고정이 적재되었나요? +gc.configgui.suffocation_cooldown=질식 쿨다운 +gc.configgui.suffocation_damage=질식 데미지 +gc.configgui.title=갤럭티크래프트 코어 환경설정 +gc.configgui.use_old_fuel_fluid_i_d=연료유 등록 사용 +gc.configgui.use_old_oil_fluid_i_d=오일 등록 사용 +gc.configgui.whitelist_co_f_h_core_gen=CoFHCore 월드 화이트리스트 +gui.battery_slot.desc.0=배터리 슬롯, 배터리를 이곳에 장착하세요. +gui.battery_slot.desc.1=혹은 케이블을 이용해 전력공급을 하세요. +gui.bed_fail.message=오 이런, 내가 잠든 사이에 산소가 부족해지면? 우주에서 잘 때는 극저온실이 필요합니다! +gui.buggy.accel.name=가속 +gui.buggy.decel.name=감속 +gui.buggy.inv.name=인벤토리 / 연료 +gui.buggy.storage_space=저장 용량 +gui.buggy.turn.name=좌/우회전 +gui.button.back.name=뒤로 +gui.button.disable.name=멈추기 +gui.button.disableseal.name=밀봉 파기하기 +gui.button.enable.name=가동하기 +gui.button.enableseal.name=밀봉 가동하기 +gui.button.hide_dest.name=숨기기 +gui.button.loadfuel.name=연료 채우기 +gui.button.loaditems.name=아이템 적재하기 +gui.button.next.name=다음 +gui.button.paintapply.name=도색하기 +gui.button.paintmix.name=색 혼합하기 +gui.button.paintreset.name=색 되돌리기 +gui.button.refine.name=정제하기 +gui.button.stoploading.name=적재 멈추기 +gui.button.stoprefine.name=정제 멈추기 +gui.button.stopunloading.name=적하 멈추기 +gui.button.unhide_dest.name=보이기 +gui.button.unloaditems.name=아이템 적하하기 +gui.button.unlockschematic.name=설계도 잠금해제 +gui.checkbox.horizontal.name=경계 모드 +gui.checkbox.invert.name=선택 뒤집기 +gui.checkbox.player_name.name=플레이어 이름 +gui.checkbox.player_within.name=플레이어와의 거리 +gui.checkbox.redstone_signal.name=레드스톤 신호시 열림 +gui.chest.warning.wrongkey=이 상자를 열려면 아마 %s티어 던전 열쇠가 필요합니다! +gui.choose_planet.desc.moon=거주 가능#산소 부족#중력: 18% +gui.choose_planet.desc.overworld=생명으로 가득함#거주 가능#중력: 100% +gui.chooseplanet.alreadycreated1.name=우주정거장이 이미 +gui.chooseplanet.alreadycreated2.name=지어져 있습니다! +gui.chooseplanet.cannotcreate1.name=여기에 우주정거장을 +gui.chooseplanet.cannotcreate2.name=지을 수 없습니다! +gui.crafting_memory.desc.0=이 자석 조합대는 더 많은 크래프트를 할 수 있습니다! +gui.crafting_memory.desc.1=레시피를 기억하려면, 한 가지 아이템을 만드세요. +gui.creative_only.desc=크리에이티브 모드용 +gui.display.nolink=링크 없음 +gui.docking_rocket.current_vel.name=현재 속도 +gui.docking_rocket.distance_from.name=목표까지의 거리 +gui.docking_rocket.target_vel.name=목표 속도 +gui.docking_rocket.warning.name.0=%s을 눌러 감속하시오 +gui.docking_rocket.warning.name.1=%s을 눌러 가속하시오 +gui.dropbox.player_distance.name.0=1 미터 +gui.dropbox.player_distance.name.1=2 미터 +gui.dropbox.player_distance.name.2=5 미터 +gui.dropbox.player_distance.name.3=10 미터 +gui.electric_compressor.desc.0=진행도 +gui.energy_storage.desc.0=에너지 저장고 +gui.energy_storage.desc.1=에너지 +gui.flag.already_placed=깃발이 이미 꽂혀 있습니다! +gui.frequency_module.desc.0=약한 음파와 먼 신호를 +gui.frequency_module.desc.1=수신할 수 있습니다 +gui.frequencymodule.warning0=작동시: +gui.frequencymodule.warning1=이와 같은 요구조건을 필요로 합니다. +gui.fuel_output.desc.0=이 슬롯에 빈 깡통을 부착하여 +gui.fuel_output.desc.1=연료 탱크로 부터 연료를 +gui.fuel_output.desc.2=채우세요. +gui.fuel_tank.desc.0=연료 탱크. +gui.fuel_tank.desc.1=연료 탱크를 채우기 위해서 +gui.fuel_tank.desc.2=연료통을 연료 적재기에 +gui.fuel_tank.desc.3=연결해야 합니다. +gui.fuel_tank.desc.4=연료 탱크 +gui.infinite_item.desc=무한공급 +gui.lander.velocity=진입 속도 +gui.lander.velocityu=m/s +gui.lander.warning2=속도를 늦추려면 " +gui.lander.warning3=" 를(을) 누르고 계세요. +gui.max_output.desc=최대 출력 +gui.message.addnewsch.name=새로운 설계도 +gui.message.apply.name=적용 +gui.message.assign_name.name=이름을 정하세요. +gui.message.atmosphere.name=대기 +gui.message.back.name=뒤로 +gui.message.breed.name=교배 +gui.message.bubble_visible.name=기포 보임 +gui.message.can_create_space_station.name=이곳에 우주정거장 생성가능! +gui.message.cancel.name=취소 +gui.message.cannot_create_space_station.name=이곳에 우주정거장 생성불가능! +gui.message.catalog.name=목록 +gui.message.click_again.0.name=클릭하여 확대 (달 & 위성) +gui.message.click_again.1.name=클릭하여 확대 (달) +gui.message.click_again.2.name=클릭하여 확대 (위성) +gui.message.click_again.3.name=클릭하여 확대 +gui.message.clicklink=갤럭티크래프트 위키를 보시려면 클릭 (영문) +gui.message.create_ss.name=생성 +gui.message.daynightcycle.name=밤낮 길이 +gui.message.energy=에너지 +gui.message.environment.name=환경 부스터 +gui.message.exit.name=나가기 +gui.message.fuel.name=연료 +gui.message.full.name=가득참 +gui.message.generating.name=생성중 +gui.message.grow.name=성장 +gui.message.heal.name=치료 +gui.message.help1=갤럭티크래프트 도움말 +gui.message.help1a=이 메시지를 다시 보시려면, 다음 키워드를 치세요: +gui.message.help2=우주 여행에 대한 가이드 +gui.message.help3=기름에 대한 도움말 +gui.message.in.name=입력 +gui.message.launch.name=발사 +gui.message.max_energy=최대 에너지 +gui.message.meansurfacetemp.name=평균 표면 온도 +gui.message.moon.atmosphere.0.name=없음 +gui.message.moon.daynightcycle.0.name=29.5 지구 일 +gui.message.moon.meansurfacetemp.0.name=(볕) 섭씨 253도 +gui.message.moon.meansurfacetemp.1.name=(그늘) 섭씨 -153도 +gui.message.moon.surfacecomposition.0.name=현무암질과 +gui.message.moon.surfacecomposition.1.name=소량의 치즈 +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(지구의 18%) +gui.message.of.name=의 +gui.message.oil.name=기름 +gui.message.out.name=출력 +gui.message.overworld.atmosphere.0.name=질소와 산소 +gui.message.overworld.atmosphere.1.name=생명을 유지 +gui.message.overworld.daynightcycle.0.name=1 지구 일 +gui.message.overworld.meansurfacetemp.0.name=섭씨 14도 +gui.message.overworld.surfacecomposition.0.name=돌과 흙 그리고 +gui.message.overworld.surfacecomposition.1.name=자갈 +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(지구의 100%) +gui.message.prelaunch=발사전 체크리스트 +gui.message.rename.name=이름 바꾸기 +gui.message.select_ss.name=우주정거장을 선택하십시오 +gui.message.ss_owner.name=주인: +gui.message.status.name=상태 +gui.message.strengthen.name=강화 +gui.message.surfacecomposition.name=표면 구성요소 +gui.message.surfacegravity.name=표면 중력 +gui.message.thermal_status.name=열 제어 +gui.message.tier.name=%d티어 +gui.message.unnamed.name=이름 미정 +gui.missing_core.name.0=모드 폴더에 믹두들코어가 없습니다 +gui.missing_core.name.1=갤럭티크래프트 로딩 실패 +gui.missing_core.name.2=마인크래프트를 종료하고 믹두들코어를 준비하십시오 +gui.missing_core.name.3=이곳을 클릭하면 다운로드 링크로 이동합니다 (영문) +gui.new_schematic.slot.desc.0=새 설계도 슬롯. +gui.new_schematic.slot.desc.1=새 설계도는 행성이나 +gui.new_schematic.slot.desc.2=달에 있는 던전을 클리어하면 +gui.new_schematic.slot.desc.3=얻을 수 있습니다 +gui.oil_tank.desc.0=기름 탱크: 기름통을 이용해 +gui.oil_tank.desc.1=채울수 있습니다. +gui.oxygen.warning=산소 설정이 유효하지 않습니다! +gui.oxygen_compressor.slot.desc.0=압축기 탱크 슬롯: 이곳에서 산소 +gui.oxygen_compressor.slot.desc.1=탱크를 충전 시킬 수 있습니다. +gui.oxygen_decompressor.slot.desc.0=감압기 탱크 슬롯: 이곳에서 산소 +gui.oxygen_decompressor.slot.desc.1=탱크를 비울 수 있습니다. +gui.oxygen_slot.desc.0=산소 슬롯, 산소통 혹은 산소 탱크를 이곳에 부착, +gui.oxygen_slot.desc.1=혹은 산소를 유체 파이프를 이용해 공급하세요. +gui.oxygen_storage.desc.0=산소 저장고 +gui.oxygen_storage.desc.1=산소 +gui.oxygen_use.desc=산소 사용 +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=음식 +gui.player.health=체력 +gui.player.ouch=아야!!!! +gui.receiver.cannot_attach=수신기를 이곳에 부착할 수 없습니다! +gui.requires_controller.desc=발사 통제기를 필요로 합니다. +gui.rocket.countdown=카운트다운 +gui.rocket.height=높이 +gui.rocket.inv.name=인벤토리 / 연료 +gui.rocket.launch.name=발사 +gui.rocket.launched=발사 +gui.rocket.on_launchpad=발사 준비 +gui.rocket.speed=속도 +gui.rocket.turn.name=좌/우회전 +gui.rocket.updown.name=위/아래 회전 +gui.rocket.warning.fuelinsufficient=연료가 부족하여 자동 제어로 안전하게 발사할 수 없습니다! +gui.rocket.warning.launchcontroller=비행 전 취소합니다. 발사 제어기를 확인하세요! +gui.rocket.warning.nofuel=먼저 연료를 주입해야 합니다! +gui.rocket.warning.nogyroscope=수상한 힘이 감지되었습니다. 회전계가 미친듯이 돌아갑니다! +gui.rocket.warning.noparachute=낙하산이 없네요! 다시 한번 발사를 누를 경우, 다시 돌아올수 없는 길을 가게 됩니다! +gui.rocket_type.0=저장 용량: 18 +gui.rocket_type.1=저장 용량: 36 +gui.rocket_type.2=저장 용량: 56 +gui.rocket_type.3=이미 연료 공급됨 +gui.seconds=s +gui.sensor.advanced=고급 모드 +gui.sensor.advancedoff=꺼짐 +gui.sensor.advancedon=켜짐 +gui.show_bubble.desc.0=기포 보이기 +gui.skeleton_boss.message=보스 소멸: 전투중에 보스방을 나가지 마십시오! 보스를 소환하려면 다시 방에 들어가십시오. +gui.space_race.chat.add_success=%s (이)가 종족에 가입하였습니다! +gui.space_race.chat.already_part=당신은 이미 해당 종족 멤버 입니다! +gui.space_race.chat.invite_received=%s 종족에게서 초대를 받았습니다. +gui.space_race.chat.not_found=%s (이)라는 플레이어를 찾을 수 없습니다. +gui.space_race.chat.remove_success=%s (이)가 종족에서 퇴출되었습니다. +gui.space_race.chat.to_join=%s 에 합류하기 위해 %s 명령어를 사용하십시오. +gui.space_race.coming_soon=아직 개발중 +ui.space_race.create.add_players.name=플레이어 추가 +gui.space_race.create.back.name=뒤로 +gui.space_race.create.brush_radius.name=브러쉬 반경 +gui.space_race.create.brush_size.name=브러쉬 크기 +gui.space_race.create.change_color.name.0=팀 +gui.space_race.create.change_color.name.1=색깔 +gui.space_race.create.change_color.name.2=변경 +gui.space_race.create.close.name=닫기 +gui.space_race.create.customize.name=깃발 꾸미기 +gui.space_race.create.eraser_radius.name=지우개 반경 +gui.space_race.create.eraser_size.name=지우개 크기 +gui.space_race.create.global_stats.name=전체 통계 보기 +gui.space_race.create.invite_player.name=플레이어 초대 +gui.space_race.create.player_radius.name=주의: 플레이어가 특정 거리 안에 있어야 합니다! (25 블록) +gui.space_race.create.rem_players.name=플레이어 퇴출 +gui.space_race.create.remove.name=퇴출하기 +gui.space_race.create.remove_player.name=플레이어 퇴출 +gui.space_race.create.rename.name=팀 이름 바꾸기 +gui.space_race.create.send_invite.name=초대하기 +gui.space_race.create.server_stats.name=서버 통계 보기 +gui.space_race.create.title.name.0=우주 종족 +gui.space_race.create.title.name.1=관리자 +gui.space_race.create.title.name=우주 종족 관리자 +gui.space_race.join.member_count.name=%d 멤버 +gui.space_race.join.name=합류 +gui.space_race.join.owner.name=리더 +gui.space_race.join.title.name=우주 종족 가입 +gui.space_race.unnamed=무제 +gui.spacestation.added=당신은 %s의 우주 정거장에 입장할 수 있는 허가를 받았습니다! +gui.spacestation.addsuccess=%s 를(을) 우주정거장 리스트에 성공적으로 추가 하였습니다! +gui.spacestation.allow_all_false=당신의 우주정거장은 모든 플레이어들에게 개방되지 않았습니다. +gui.spacestation.allow_all_true=당신의 우주정거장은 모든 플레이어들에게 개방되었습니다! (사용법 /ssinvite -all로 취소할 수 있습니다.) +gui.spacestation.changesuccess=%s 의 우주정거장이 %s 의 우주정거장으로 주인이 변경되었습니다. +gui.spacestation.playername=<플레이어 이름> +gui.spacestation.removesuccess=%s 를(을) 우주정거장 리스트에서 성공적으로 제거 하였습니다! +gui.spacestation.to_allow_entry=을 입력하여 당신의 우주정거장에 입장 허가를 하십시오! +gui.spacestation.type_command=유형 +gui.status.active.name=활성 +gui.status.air_lock_closed.name=에어락 닫힘 +gui.status.air_lock_open.name=에어락 열림 +gui.status.blockedfully.name=흐림 +gui.status.blockedpartial.name=약간 흐림 +gui.status.check_pending.name=확인 보류 중 +gui.status.check_starting.name=확인 시작 중 +gui.status.checking_seal.name=밀봉 확인 중 +gui.status.collecting.name=충전 중 +gui.status.collectingenergy.name=에너지 충전 중 +gui.status.compressing.name=압축 중 +gui.status.disabled.name=비활성 +gui.status.fulltank.name=산소 탱크 꽉 참 +gui.status.generating.name=생산중 +gui.status.hull_heat.name=선체 온도 +gui.status.idle.name=유휴상태 +gui.status.missingleaves.name=나뭇잎 블록 부족 +gui.status.missingoxygen.name=산소 부족 +gui.status.missingpower.name=전력 부족 +gui.status.missingpower.short.name=전력 없음 +gui.status.missingtank.name=유효한 산소 탱크 없음 +gui.status.nofuel.name=연료 없음! +gui.status.noinvtarget.name=타깃에 인벤토리가 없음! +gui.status.noitems.name=아이템 없음! +gui.status.nooil.name=기름 없음 +gui.status.not_available.name=N/A +gui.status.not_generating.name=생산중이 아님 +gui.status.notargetload.name=적재 타깃 없음! +gui.status.notargetunload.name=적하 타깃 없음! +gui.status.off.name=꺼짐 +gui.status.on.name=켜짐 +gui.status.raining.name=우천상태 +gui.status.ready.name=준비완료 +gui.status.refining.name=정제 중 +gui.status.running.name=가동 중 +gui.status.sealed.name=밀봉 +gui.status.sealerblocked.name=출력구 막힘! +gui.status.sun_visible.name=맑음 +gui.status.tank_empty.name=산소 탱크 비었음 +gui.status.targetempty.name=타깃 차량 비었음! +gui.status.targetfull.name=타깃 차량 꽉 참! +gui.status.unknown.name=확인불가 +gui.status.unsealed.name=지역이 너무 넓거나 밀봉되어 있지 않음 +gui.tank.oxygen_remaining=남은 산소 +gui.telemetry_fail.message=우선 주파수 모듈을 이용해 엔티티를 추적해야 합니다. (아니면 어떻게든 가장해 보시던지) +gui.telemetry_fail_no_frequency_module.message=사용하려면 주파수 모듈을 손에 쥐고 있어야 합니다! +gui.telemetry_fail_wearing_it.message=원격측정 유닛에 주파수 모듈을 연결하려면 입고 있는 모듈을 벗어야 합니다! +gui.telemetry_succeed.message=원격측정 링크 활성 완료. +gui.thermal_slot.desc.0=열 제어 슬롯, 이곳에 +gui.thermal_slot.desc.1='주변 열 제어기'를 장착하세요. (선택적) +gui.thermal_slot.desc.2=메모: 더 많은 에너지를 사용합니다! +gui.title.air_lock.name=%s's 에어락 제어기 +gui.tracking.message=추적 활성화 완료. 링크를 활성하기 위해 원격측정 유닛을 우클릭해야 합니다. +gui.village.warning.no_freq_mod=그들과 통신할 수 있도록 주파수 모듈을 갖추어야 할 것 같아요! +gui.warning.invalid_thermal=열보호 장비가 유효하지 않습니다! +gui.warning.noroom=공간이 부족합니다! +gui.warning=위험! +item.air_fan.name=날개 +item.air_vent.name=통풍구 +item.basic_item.ambient_thermal_controller.name=주변 열 제어기 +item.basic_item.canned_food.name=통조림 +item.basic_item.compressed_aluminum.name=압축 알루미늄 +item.basic_item.compressed_bronze.name=압축 청동 +item.basic_item.compressed_copper.name=압축 구리 +item.basic_item.compressed_iron.name=압축 철 +item.basic_item.compressed_steel.name=압축 강철 +item.basic_item.compressed_tin.name=압축 주석 +item.basic_item.dehydrated_apple.name=건조 사과 +item.basic_item.dehydrated_carrot.name=건조 당근 +item.basic_item.dehydrated_melon.name=건조 수박 +item.basic_item.dehydrated_potato.name=건조 감자 +item.basic_item.frequency_module.name=주파수 모듈 +item.basic_item.ingot_aluminum.name=알루미늄괴 +item.basic_item.ingot_bronze.name=청동괴 +item.basic_item.ingot_copper.name=구리괴 +item.basic_item.ingot_steel.name=강철괴 +item.basic_item.ingot_tin.name=주석괴 +item.basic_item.raw_silicon.name=천연 규소 +item.basic_item.solar_module_0.name=태양광 모듈 +item.basic_item.solar_module_1.name=태양광 전지판 +item.basic_item.wafer_advanced.name=고급 웨이퍼 +item.basic_item.wafer_basic.name=기초 웨이퍼 +item.basic_item.wafer_solar.name=태양광 웨이퍼 +item.battery.name=배터리 +item.bucket_fuel.name=연료 양동이 +item.bucket_oil.name=기름 양동이 +item.buggy.name=월면차 +item.buggymat.seat.name=월면차 시트 +item.buggymat.storage.name=월면차 상자 +item.buggymat.wheel.name=월면차 바퀴 +item.canister.copper.name=구리깡통 +item.canister.tin.name=주석깡통 +item.canvas.name=캔버스 +item.cheese_block.name=치즈 덩어리 +item.cheese_curd.name=치즈 커드 +item.compressed_meteoric_iron.name=압축 운철 +item.dungeonfinder.name=던전 추적기 +item.empty_liquid_canister.name=빈 깡통 +item.emergency_kit.description=산소 기어 및 기타 필수 아이템을 장착하려면 우클릭하세요. 경고: 한번만 사용하세요! +item.emergency_kit.name=우주 응급상자 +item.engine.tier1booster.name=1티어 부스터 +item.engine.tier1engine.name=1티어 로켓 엔진 +item.flag.name=깃발 +item.food.cheese_slice.name=치즈 슬라이스 +item.food.burger_bun.name=버거빵 +item.food.beef_patty_raw.name=소고기 패티 +item.food.beef_patty_cooked.name=구운 소고기 패티 +item.food.cheeseburger.desc=우주인들은 치즈버거를 좋아합니다! +item.food.cheeseburger.name=치즈버거 +item.food.canned_beef.name=소고기 통조림 +item.fuel.name=로켓 연료 +item.fuel_canister.name=가득찬 연료통 +item.fuel_canister_partial.name=부분 연료통 +item.heavy_plating.name=강화 플레이트 +item.hot_description.name=고온성 +item.ic2compat.ore_crushed_alu.name=부서진 알루미늄 광석 +item.ic2compat.ore_purified_alu.name=정제된 알루미늄 광석 +item.ic2compat.dust_alu.name=알루미늄 가루 +item.ic2compat.dust_small_titanium.name=작은 티타늄 가루 +item.infinite_battery.name=무한 배터리 +item.infinite_oxygen.name=무한 산소공급기 +item.key.t1.name=1티어 던전 열쇠 +item.lunar_sapphire.description=달 사파이어는 외계주민과의 거래에서 쓰이는 화폐입니다. +item.lunar_sapphire.name=달 사파이어 +item.meteor_chunk.name=투척용 운석 덩어리 +item.meteor_chunk_hot.name=투척용 운석 덩어리 +item.meteoric_iron_ingot.name=운철 주괴 +item.meteoric_iron_raw.name=운철 원석 +item.nose_cone.name=머리원뿔 +item.oil_canister.name=가득찬 기름통 +item.oil_canister_partial.name=부분 기름통 +item.oil_extractor.name=휴대용 기름 추출기 +item.oxygen_concentrator.name=산소 농축기 +item.oxygen_gear.name=산소 기어 +item.oxygen_mask.name=산소 마스크 +item.oxygen_tank_heavy_empty.name=빈 대형 산소 탱크 +item.oxygen_tank_heavy_full.name=대형 산소 탱크 +item.oxygen_tank_light_empty.name=빈 소형 산소 탱크 +item.oxygen_tank_light_full.name=소형 산소 탱크 +item.oxygen_tank_med_empty.name=빈 중형 산소 탱크 +item.oxygen_tank_med_full.name=중형 산소 탱크 +item.parachute_black.name=검은색 낙하산 +item.parachute_blue.name=하늘색 낙하산 +item.parachute_brown.name=갈색 낙하산 +item.parachute_darkblue.name=파란색 낙하산 +item.parachute_darkgray.name=회색 낙하산 +item.parachute_darkgreen.name=초록색 낙하산 +item.parachute_gray.name=밝은 회색 낙하산 +item.parachute_lime.name=연두색 낙하산 +item.parachute_magenta.name=자홍색 낙하산 +item.parachute_orange.name=주황색 낙하산 +item.parachute_pink.name=분홍색 낙하산 +item.parachute_plain.name=흰색 낙하산 +item.parachute_purple.name=보라색 낙하산 +item.parachute_red.name=빨간색 낙하산 +item.parachute_teal.name=청록색 낙하산 +item.parachute_yellow.name=노란색 낙하산 +item.rocket_fins.name=로켓 날개핀 +item.rocket_t1.name=1티어 로켓 +item.schematic.name=KARI 작업대 설계도 +item.sensor_glasses.name=감지경 +item.sensor_lens.name=감지 렌즈 +item.standard_wrench.name=표준 렌치 +item.steel_axe.name=강화 도끼 +item.steel_boots.name=강화 부츠 +item.steel_chestplate.name=강화 흉갑 +item.steel_helmet.name=강화 투구 +item.steel_hoe.name=강화 괭이 +item.steel_leggings.name=강화 각반 +item.steel_pickaxe.name=강화 곡괭이 +item.steel_pole.name=강철 장대 +item.steel_shovel.name=강화 삽 +item.steel_sword.name=강화 검 +item.tier1.desc=1티어 +item_desc.powerdraw.name=필요 전력: 초당 %s +item_desc.shift.name=정보를 보려면 %s 을 누르세요. +item_group.galacticraft_blocks=갤럭티크래프트 블록 +item_group.galacticraft_items=갤럭티크래프트 아이템 +jei.arc_lamp.info=마주 보는 방향으로 매우 밝은 빛입니다. 최상의 효과를 위해 높은 곳에 두세요! 표준 렌치를 사용하여 회전합니다. +jei.electric_compressor.info=주괴 압축기의 전기 버전은 2배 빠릅니다! 2티어 전력으로 더욱 빨라진 속도이죠. 호퍼는 이 기계를 채우거나 비울 수 있습니다. +jei.electric_compressor.appeng.info=AE2를 사용한 자동화를 위해 두개의 다른 모드의 괴를 조합법에 설정하세요. 자세한 내용은 https:goo.gl/BwY15G을 참고하세요. +jei.fluid_pipe.info=액체 또는 가스 운반용 파이프 탱크에서 오일을 펌프 하려면 표준 렌치를 사용하여 '풀 모드'로 변환하세요. \n 당김 모드에서는 탱크나 기계를 채울 수 없으므로 파이프를 2블록 이상 가동하세요! +jei.fuel_loader.info=로켓 발사 패드 옆에 놓으세요. 패드에 배치된 로켓은 모두 격퇴합니다. 우주 여행에 있어서 필수적인 것이죠, 집으로 돌아가는 여행을 포함하면은! +jei.magnetic_crafting.info=아이템들을 담고 있는 조합법입니다. 호퍼는 마지막 조합법을 성공적으로 조작할 수 있는 아이템을 승인할 수 있습니다. +jei.oxygen_collector.info=오버월드 또는 우주로부터 호흡할 수 있는 산소 혼합물을 근처의 녹색 잎 또는 성장하는 농작물로부터 수집합니다. \3산소 탱크용 산소 압축기 또는 산소 기포 배급기 또는 산소 밀봉기로 산소를 공급합니다. +jei.oxygen_distributor.info=플레이어와 다른 생명체들이 숨을 쉴 수 있는 공간에 기포 환경을 만듭니다. 산소 수집기 또는 산소 저장 모듈에서 호흡 가능한 산소 혼합물을 공급하세요. +jei.oxygen_sealer.info=우주정거장 본부에 있는 방 하나를 숨 쉴 수 있는 분위기로 채웁니다. 산소 수집기 또는 산소 저장 모듈에서 호흡 가능한 산소 혼합물을 공급하세요. 방의 모든 벽은 고체여야 합니다. \n감지경을 사용하면 누출을 찾을 수 있습니다! \n산소 밀봉기의 실내 크기는 10x10x8블록입니다. 더 큰 방에는 여러개의 산소 밀봉기를 사용하세요! +jei.wrench.info=대부분의 갤럭티크래프트 기계는 표준 렌치를 우클릭하여 회전할 수 있습니다. \n클릭하면 전기 기계의 전원 및 기타 입력과 출력을 변경할 수 있습니다. +keybind.map.name=은하 지도 +keybind.sensortoggle.name=감지경 모드 활성화 +keybind.spaceshipinv.name=우주선 인벤토리 열기 +keybind.vehiclebackward.name=차량 후진 +keybind.vehicledown.name=차량 하강 +keybind.vehicleforward.name=차량 전진 +keybind.vehicleleft.name=차량 좌회전 +keybind.vehicleright.name=차량 우회전 +keybind.vehicleup.name=차량 상승 +moon.moon=달 +newversion.failed.name=갤럭티크래프트 업데이트 확인 불가능! 15초 후에 다시 확인합니다 +newversion.success.name=갤럭티크래프트 새로운 버전이 존재합니다. +planet.jupiter=목성 +planet.mercury=수성 +planet.neptune=해왕성 +planet.overworld=오버월드 (지구) +planet.saturn=토성 +planet.uranus=천왕성 +planet.venus=금성 +satellite.spacestation.overworld=오버월드 우주정거장 +schematic.moonbuggy.name=월면차 +schematic.rocket_t1.name=1티어 로켓 +schematic.rocket_t2.name=2티어 로켓 +solarsystem.sol=Sol (우리태양계) +star.sol=Sol (우리 해) +tile.air_lock_controller.name=에어락 제어기 +tile.air_lock_frame.description=에어락 기틀은 한개의 에어락 제어기와 함께 네더 포탈의 모양과 같이 지을 경우 제대로 된 밀폐 기능을 하게 됩니다. +tile.air_lock_frame.name=에어락 기틀 +tile.air_lock_seal.name=에어락 봉인 +tile.aluminum_wire.alu_wire.description=알루미늄 전선은 전원과 에너지를 쓰는 기계를 연결해줍니다. +tile.aluminum_wire.alu_wire.name=알루미늄 전선 +tile.aluminum_wire.alu_wire_heavy.description=중형 알루미늄 전선은 전원과 에너지를 쓰는 기계를 연결해줍니다. 2티어 기계들을 위한 더욱 더 많은 수용력을 자랑합니다. +tile.aluminum_wire.alu_wire_heavy.name=중형 알루미늄 전선 +tile.aluminum_wire.alu_wire_switch.description=레드스톤 신호로 끄지 않는 한 개폐식 알루미늄 전선은 알루미늄 전선처럼 연결됩니다. +tile.aluminum_wire.alu_wire_switch.name=개폐식 알루미늄 전선 +tile.aluminum_wire.alu_wire_switch_heavy.description=레드스톤 신호로 끄지 않는 한 개폐식 중형 알루미늄 전선이 중형 알루미늄 전선처럼 연결됩니다. +tile.aluminum_wire.alu_wire_switch_heavy.name=개폐식 중형 알루미늄 전선 +tile.arclamp.description=아크 램프는 주변지역에 굉장히 강력한 불빛을 제공함과 동시에 주변 몹을 쫒아냅니다. +tile.arclamp.name=아크 램프 +tile.basic_block_core.block_aluminum_gc.name=알루미늄 블록 +tile.basic_block_core.block_copper_gc.name=구리 블록 +tile.basic_block_core.block_meteoric_iron_gc.name=고체 운철 블록 +tile.basic_block_core.block_tin_gc.name=주석 블록 +tile.basic_block_core.block_silicon_gc.name=규소 블록 +tile.basic_block_core.deco_block_0.name=장식용 주석 블록 +tile.basic_block_core.deco_block_1.name=벽용 주석 블록 +tile.basic_block_core.ore_aluminum_gc.name=알루미늄 광석 +tile.basic_block_core.ore_copper_gc.name=구리 광석 +tile.basic_block_core.ore_silicon.name=실리콘 광석 +tile.basic_block_core.ore_tin_gc.name=주석 광석 +tile.basic_block_moon.bricks.name=달 던전 벽돌 +tile.basic_block_moon.cheesestone.name=치즈 원석 +tile.basic_block_moon.coppermoon.name=구리 원석 +tile.basic_block_moon.moondirt.name=월토 +tile.basic_block_moon.moongrass.name=달 잔디 +tile.basic_block_moon.moonstone.name=월석 +tile.basic_block_moon.sapphiremoon.name=사파이어 광석 +tile.basic_block_moon.tinmoon.name=달 주석 광석 +tile.buggy_pad.description=연료패드는 그 위에 배치된 월면차에 연료를 재충전을 할 수 있게 해줍니다. 연료 적재기와 함께 3x3으로 배치 해야 합니다. 로켓 발사에는 사용할 수 없습니다! +tile.cargo.loader.name=화물 적재기 +tile.cargo.unloader.name=화물 적하기 +tile.cargo_loader.description=화물 적재기는 블록이나 아이템을 화물칸이 설치된 로켓 혹은 다른 차량에 실어줍니다. 발사대 혹은 연료패드에 부착해야 합니다. +tile.cargo_unloader.description=화물 적하기는 블록이나 아이템을 화물칸이 설치된 로켓 혹은 다른 차량에서 내려줍니다. 발사대 혹은 연료패드에 부착해야 합니다. +tile.cheese.description=치즈 블록은 달에서 발견되는 치즈로 만들 수 있습니다 (배치 및 식용 가능). +tile.cheese.name=치즈 블록 +tile.circuit_fabricator.description=회로 조립기는 기본 재료를 가공하여 고급 제작에 쓰이는 규소 웨이퍼를 만듭니다. +tile.coal_generator.description=석탄 발전기는 석탄을 태워 얻는 열 에너지를 저장합니다. 가장 쉽지만 가장 효율이 떨어지는 방법입니다. +tile.collector.description=산소 수집기는 주변 나뭇잎에서 생산된 산소를 저장합니다. +tile.collector.name=산소 수집기 +tile.compressor.description=압축기는 광물 주괴를 압축시킵니다. 갤럭티크래프트의 가장 중요한 기계라고 볼 수 있죠! +tile.compressor_electric.description=전기 압축기는 광물 주괴를 압축시킵니다. 일반 압축기 보다 효율적으로 두개의 주괴를 한번에 가공합니다. +tile.compressor_advanced.description=전기 압축기의 더 빠른 버전입니다. 광물 주괴를 더욱 빠르게 압축합니다. +tile.concealed_detector.name=플레이어 탐지기 +tile.concealed_redstone.name=히든 레드스톤 전선 +tile.concealed_repeater.name=히든 레드스톤 중계기 +tile.crude_oil.name=석유 +tile.crude_oil_moving.name=원유 +tile.crude_oil_still.name=원유 +tile.deconstructor.description=해체기가 당신의 오래된 로켓과 다른 물건들을 분해해서, 모든 분해 가능한 재료들을 돌려줄 것입니다. +tile.dishbase.description=접시 안테나는 우주 정거장의 위치를 추적하고 원격으로 우주 기지에서 통신을 수신 할 수 있습니다. +tile.dishbase.name=접시 안테나 +tile.distributor.description=산소 배급기는 내부 산소탱크를 이용하여 기기 주변에 일정반경의 기포를 생성합니다. 기포 안에서는 안정적인 호흡이 가능합니다. +tile.distributor.name=산소 기포 배급기 +tile.dummyblock.cryogenic_chamber.name=극저온실 +tile.dummyblock.launch_pad.name=로켓 발사대 +tile.dummyblock.nasa_workbench.name=KARI 작업대 +tile.dummyblock.solar.name=태양광 발전기 +tile.dummyblock.space_station_base.name=우주정거장 본부 +tile.electric_furnace_tier1.description=전기 화로는 기존 석탄 화로보다 빠른 속도를 자랑합니다. +tile.electric_furnace_tier2.description=아크 화로는 기존 석탄 화로와 전기 화로 보다 빠른 속도를 자랑합니다. +tile.emergency_box.description=행성의 첫번째 착륙 지점 옆에 응급소포를 놓으세요. 내부에서 응급상자를 열어 찾으세요. 몹을 물리치는 것도 잊지마세요! +tile.emergency_box.filled.name=응급상자가 포함된 응급소포 +tile.emergency_box.name=응급 소포 +tile.enclosed.aluminum_wire.name=밀봉형 알루미늄 전선 +tile.enclosed.copper_cable.name=밀봉형 구리 전선 +tile.enclosed.description=밀봉 블록은 우주정거장과 같이 공기가 드나들면 안되는 곳에 배치되어야 합니다. +tile.enclosed.fluid_pipe.name=밀봉형 산소 파이프 +tile.enclosed.glass_fibre_cable.name=밀봉형 유리섬유 전선 +tile.enclosed.gold_cable.name=밀봉형 금 전선 +tile.enclosed.heavy_aluminum_wire.name=밀봉형 중형 알루미늄 전선 +tile.enclosed.hv_cable.name=밀봉형 고전압 전선 +tile.enclosed.lv_cable.name=밀봉형 주석 전선 +tile.enclosed.me_cable.name=밀봉형 ME 전선 +tile.enclosed.pipe_fluids_cobblestone.name=밀봉형 조약돌 유체이송 파이프 +tile.enclosed.pipe_fluids_stone.name=밀봉형 석재 유체이송 파이프 +tile.enclosed.pipe_items_cobblestone.name=밀봉형 조약돌 운송 파이프 +tile.enclosed.pipe_items_stone.name=밀봉형 석재 운송 파이프 +tile.enclosed.pipe_power_gold.name=밀봉형 금재 전력공급 파이프 +tile.enclosed.pipe_power_stone.name=밀봉형 석재 전력공급 파이프 +tile.energy_storage_module_tier1.description=에너지 저장 모듈은 나중에 쓰일 다량의 에너지를 저장합니다. +tile.energy_storage_module_tier2.description=에너지 저장 클러스터는 나중에 쓰일 다량의 에너지를 저장합니다. 모듈보다도 더 많은 양의 에너지를 입출력/저장합니다. +tile.fallen_meteor.description=운석은 대기가 부족하거나 없는 행성 혹은 달에서 발견됩니다. 부서지면 운철을 드랍합니다. +tile.fallen_meteor.name=운석 +tile.fluid_pipe.description=유체 파이프는 액체와 가스를 소스 블록에서 타깃 블록으로 전달합니다. 표준 렌치를 사용하여 모드를 전환합니다. +tile.fluid_pipe.name=유체 파이프 +tile.fluid_pipe_pull.description=유체 파이프는 액체와 가스를 소스 블록에서 타깃 블록으로 전달합니다. 표준 렌치를 사용하여 모드를 전환합니다. +tile.fluid_pipe_pull.name=유체 파이프 +tile.fluid_tank.description=유체 탱크는 나중에 사용하기 위해 액체와 가스를 저장할 것입니다. +tile.fluid_tank.name=유체 탱크 +tile.fuel.name=연료 +tile.fuel_block.name=연료 +tile.fuel_loader.description=발사대에 연결되면 연료 적재기는 연료를 발사대와 연결된 로켓이나 차량에 제공합니다. +tile.fuel_loader.name=연료 적재기 +tile.glowstone_torch.description=발광석 횃불은 일반 횃불이 밝히지 못하는 무산소 지역을 밝히기 용이합니다. +tile.glowstone_torch.name=발광석 횃불 +tile.grating.name=창살 +tile.landing_pad.buggy_fueler.name=월면차 연료패드 +tile.landing_pad.cargo_pad.name=화물 로켓 발사대 +tile.landing_pad.description=발사대는 로켓을 배치할 수 있게 도와줍니다. 3x3, 총 9개의 발사대를 배치해야합니다. 연료 적재기, 화물 적재기, 그리고 발사 통제기 부착이 가능 합니다. +tile.landing_pad.landing_pad.name=로켓 발사대 +tile.landing_pad_full.name=로켓 발사대 +tile.machine.0.name=석탄 발전기 +tile.machine.1.name=에너지 저장 모듈 +tile.machine.2.name=전기 화로 +tile.machine.3.name=압축기 +tile.machine.7.name=전기 아크 화로 +tile.machine.8.name=에너지 저장 클러스터 +tile.machine2.4.name=전기 압축기 +tile.machine2.5.name=회로 조립기 +tile.machine2.6.name=산소 저장 모듈 +tile.machine2.10.name=해체기 +tile.machine3.9.name=염색기 +tile.machine4.11.name=고급 압축기 +tile.magnetic_table.name=자석 조합대 +tile.magnetic_table.description=진열된 아이템들은 떨어지지 않을 것입니다-그것은 인벤토리를 보유하고 있습니다! 아이템을 클릭하여 넣을 수 있습니다. 후퍼들은 아이템들을 넣고 제거할 수 있고, 그것은 자동적으로 마지막으로 만들어진 조합법을 창조하려고 시도할 것입니다. +tile.moon_stairs_brick.name=달 던전 벽돌 계단 +tile.moon_stairs_stone.name=월석 계단 +tile.ore_copper.name=구리 광석 +tile.ore_tin.name=주석 광석 +tile.oxygen_compressor.0.name=산소 압축기 +tile.oxygen_compressor.1.name=산소 감압기 +tile.oxygen_compressor.description=산소 압축기는 내부에 저장되어 있는 산소를 이용해 산소 탱크를 충전합니다. +tile.oxygen_decompressor.description=산소 감압기는 산소 탱크에 저장되어 있는 산소를 빼내어 내부에 저장합니다. +tile.oxygen_detector.description=산소 감지기는 산소에 노출되었을시 레드스톤 신호를 보냅니다. +tile.oxygen_detector.name=산소 감지기 +tile.oxygen_storage_module.description=산소 저장 모듈은 나중에 쓰일 다량의 산소를 저장합니다. +tile.painter.description=진공 유리, 조명 패널 또는 기타 인쇄 가능한 아이템에 색상을 적용합니다. 블록 또는 염료를 사용하여 새 색상을 제공하세요! +tile.panel_lighting.description=우주에 사용할 조명 패널! 렌치가 그것을 회전시킵니다. 모양을 변경하려면 선택한 블록에 배치하는 동안 기습을 누릅니다. +tile.panel_lighting_0.name=정사각형 조명 패널 +tile.panel_lighting_1.name=스포트라이트 조명 패널 +tile.panel_lighting_2.name=직선 조명 패널 +tile.panel_lighting_3.name=어두운 조명 패널 +tile.panel_lighting_4.name=어두운 조명 패널 +tile.parachest.description=낙하상자는 지구와 같은 특정 행성이나 달에 착륙시 같이 떨어집니다. 발사 전의 로켓과 연료 그리고 화물을 포함합니다. +tile.parachest.name=낙하 상자 +tile.platform.description=4번을 놓고 플랫폼을 만드세요. 플랫폼은 선수들을 위 아래의 다음 플랫폼으로 들어올립니다. 기습=하강:뛰기=상승. +tile.platform.name=유압 플랫폼 +tile.refinery.description=정제기는 기름과 에너지를 이용하여 로켓과 차량에 필수 연료로 바꾸어 줍니다. +tile.refinery.name=정제기 +tile.rocket_workbench.name=KARI 작업대 +tile.rocket_workbench.description=KARI 작업대는 여러 고급 로켓 혹은 차량을 만드는데에 필요합니다. 야생에서 새 설계도를 찾아 사용할 수 있습니다. +tile.sapling2.birch.name=자작나무 묘목 +tile.sapling2.jungle.name=정글나무 묘목 +tile.sapling2.oak.name=참나무 묘목 +tile.sapling2.spruce.name=가문비나무 묘목 +tile.sealer.description=산소 밀봉기는 밀실 여부를 확인한 후 밀실이 확인 되면 그 내부를 호흡에 필요한 산소로 채워줍니다. +tile.sealer.name=산소 밀봉기 +tile.slab_gc_half.moon_bricks_slab.name=달 던전 벽돌 반 블록 +tile.slab_gc_half.moon_slab.name=월석 반 블록 +tile.slab_gc_half.tin_slab_1.name=장식형 주석 반 블록 +tile.slab_gc_half.tin_slab_2.name=장식형 주석 반 블록 +tile.solar.advanced_solar.name=고급 태양광 전지판 +tile.solar.basic_solar.name=기초 태양광 전지판 +tile.solar_adv.description=고급 태양광 전지판은 태양으로 부터 에너지를 저장합니다. 최적의 기능을 위해 각도가 자동으로 조절됩니다. +tile.solar_basic.description=기초 태양광 전지판은 태양으로 부터 에너지를 저장합니다. 대부분의 에너지는 낮에 충전됩니다 (조정 불가능). +tile.space_glass.description=진공 밀폐 유리를 사용하여 우주 본부를 청소합니다. 근처에 있는 염색기를 사용하여 주변을 어떤 색으로 칠하세요! +tile.space_glass.clear.description=넓은 우주를 볼 수 있는 투명한 유리, 물 속의 깨끗한 경치를 제공할 수도 있습니다. +tile.space_glass.strong.description=강하고 폭발에 강한 유리는 투명 알루미늄으로 제작되었습니다. +tile.space_glass_clear.name=깨끗한 진공 유리 +tile.space_glass_vanilla.name=진공 유리 +tile.space_glass_strong.name=강력한 진공 유리 +tile.space_station_base.name=우주정거장 도착 블록 +tile.spin_thruster.description=회전반동 추력기는 우주정거장을 회전시키는데에 사용됩니다. +tile.spin_thruster.name=회전반동 추력기 +tile.telemetry.description=링크된 로켓, 플레이어 혹은 다른 몬스터에게서 유용한 정보를 얻을 수 있습니다. 표시 화면 옆에 배치 하는게 좋습니다. 주파수 모듈을 이용해 링크를 활성화 하세요. +tile.telemetry.name=원격측정 유닛 +tile.tin_stairs_1.name=장식형 주석 계단 +tile.tin_stairs_2.name=장식형 주석 계단 +tile.treasure_chest.description=1티어 보물 상자는 달 던전에 생성됩니다. 최종 보스를 처치하면 열 수 있습니다. +tile.treasure_chest.name=보물상자 +tile.unlit_torch.name=횃불 +tile.unlit_torch_stone.name=돌 횃불 +tile.unlit_torch_lit.name=횃불 +tile.unlit_torch_stone_lit.name=돌 횃불 +tile.view_screen.description=표시 화면은 우주정거장의 가장 마지막을 "장식"합니다. 오른쪽 클릭으로 화면에 표시되는 정보를 바꿀 수 있습니다. +tile.view_screen.name=표시 화면 +tile.wall_gc.moon.name=월석 담장 +tile.wall_gc.moon_bricks.name=달 던전 벽돌 담장 +tile.wall_gc.tin.name=장식형 주석 담장 + +advancement.galacticraft.root.title=갤럭티크래프트 +advancement.galacticraft.root.description=달로 가자! +advancement.galacticraft.coal_generator.title=석탄 발전 +advancement.galacticraft.coal_generator.description=석탄 발전기 +advancement.galacticraft.circuit_fabricator.title=조립 준비 완료 +advancement.galacticraft.circuit_fabricator.description=웨이퍼를 만드는 회로 조립기 제작 +advancement.galacticraft.basic_wafer.title=육감적인 웨이퍼 +advancement.galacticraft.basic_wafer.description=기본 웨이퍼 제작 (규소니까 먹지 말아주세요!) +advancement.galacticraft.advanced_wafer.title=금빛 웨이퍼 +advancement.galacticraft.advanced_wafer.description=고급 웨이퍼 제작 (아직은 먹지 말아주세요!) +advancement.galacticraft.compressor.title=압축 준비 완료 +advancement.galacticraft.compressor.description=압축기 제작 +advancement.galacticraft.solar.title=자유 에너지 +advancement.galacticraft.solar.description=기초 태양광 전지판 제작 +advancement.galacticraft.advanced_solar.title=빠르고 효율적이다! +advancement.galacticraft.advanced_solar.description=고급 태양광 전지판 제작 +advancement.galacticraft.electric_compressor.title=전기로 업그레이드 +advancement.galacticraft.electric_compressor.description=전기 압축기 제작 +advancement.galacticraft.oil.title=끈적끈적한 물건 +advancement.galacticraft.oil.description=기름 입유 +advancement.galacticraft.refiery.title=정제할 시간입니다! +advancement.galacticraft.refiery.description=정제기 제작 +advancement.galacticraft.rocket_fuel.title=로켓 연료 +advancement.galacticraft.rocket_fuel.description=정제기에 기름 정제 +advancement.galacticraft.oxygen_collector.title=산소 미포함 +advancement.galacticraft.oxygen_collector.description=산소 수집기 제작 +advancement.galacticraft.oxygen_compressor.title=공기 압축 +advancement.galacticraft.oxygen_compressor.description=산소 압축기 제작 +advancement.galacticraft.fill_tank.title=공기 출발 +advancement.galacticraft.fill_tank.description=산소 탱크 충전 완료 +advancement.galacticraft.fill_all_tanks.title=산소 비축 +advancement.galacticraft.fill_all_tanks.description=모든 산소 탱크 충전 완료 +advancement.galacticraft.all_oxygen_gear.title=준비 완료 +advancement.galacticraft.all_oxygen_gear.description=우주 호흡 가능 +advancement.galacticraft.rocket_workbench.title=우주 공학자 +advancement.galacticraft.rocket_workbench.description=KARI 작업대 제작 +advancement.galacticraft.rocket_t1.title=로켓 보유 가능! +advancement.galacticraft.rocket_t1.description=로켓 용접 +advancement.galacticraft.fuel_loader.title=가득 채우자! +advancement.galacticraft.fuel_loader.description=연료 적재기 제작 +advancement.galacticraft.launch_rocket.title=발사! +advancement.galacticraft.launch_rocket.description=첫 로켓 발사 +advancement.galacticraft.moon.title=달이다! +advancement.galacticraft.moon.description=달 착륙 +advancement.galacticraft.create_space_station.title=우주 정거장 +advancement.galacticraft.create_space_station.description=우주 정거장 제작 +advancement.galacticraft.spin_thruster.title=초조해짐 +advancement.galacticraft.spin_thruster.description=회전반동 추력기 +advancement.galacticraft.moon_dungeon.title=위더보다 나쁨 +advancement.galacticraft.moon_dungeon.description=던전에서 진화된 스켈레톤 보스 발견 +advancement.galacticraft.dungeon_key_moon.title=열쇠있다 +advancement.galacticraft.dungeon_key_moon.description=던전에 숨어서 보스를 죽이고 열쇠 찾기 +advancement.galacticraft.moon_buggy_schematic.title=현란한 설계도 +advancement.galacticraft.moon_buggy_schematic.description=월면차 설계도 §o획득 +advancement.galacticraft.moon_buggy.title=월면차 +advancement.galacticraft.moon_buggy.description=월면차 용접 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/nl_nl.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/nl_nl.lang new file mode 100644 index 00000000..d68fae2d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/nl_nl.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=De hoeveelheid ruimtemijners voor speler %s is %s +commands.dimensionteleport=%s werd naar de atmosfeer gestuurd%s +commands.dimensiontp.too_many=Te veel argumenten! Gebruik: %s +commands.gcenergyunits.invalid_units=Ongeschikte eenheden in /GCEnergyUnits command. Gebruik: %s +commands.gcenergyunits.no_units=De eenheden moeten specifiek zijn! Gebruik: %s +commands.joinrace.no_team=Het team moet specifiek zijn! Gebruik: %s +commands.ssinvite.not_found=Kan geen ruimtestation vinden voor je gebruikersnaam. Je moet er eerst heen reizen! +commands.ssinvite.wrong_usage=Niet genoeg command argumenten! Gebruik: %s +commands.ssnewowner.wrong_usage=Kan ruimtestation ID# niet vinden - bestaat het wel? Gebruik: %s +commands.ssuninvite.no_player=Kon de speler met de gebruikersnaam %s niet vinden op je ruimte station lijst! +container.cargoloader.name=Lading inlader +container.cargounloader.name=Lading uitlader +container.fuelloader.name=Brandstof lader +container.lander.name=Space Lander +container.oxygencollector.name=Zuurstof Collector +container.oxygencompressor.name=Zuurstof Compressor +container.oxygendecompressor.name=Zuurstof Decompressor +container.oxygendistributor.name=Zuurstof Verdeler +container.oxygensealer.name=Zuurstof Afluiter +container.parachest.name=Parachute-kist +container.refinery.name=Raffinaderij +container.solaradvanced.name=Geavanceerde Zonnepaneel +container.solarbasic.name=Normale- Zonnepanneel +container.spaceship.name=Level 1 raket +container.treasurechest.name=Schatkist +death.attack.oxygen_suffocation=%1$s had geen zuurstof meer! +death.attack.spaceship_crash=%1$s's Raket sloeg zichzelf in de Grond. Oeps +death.attack.thermal=%1$s Vergat Thermische Bescherming +dimension.moon.name=Maan +dimension.overworld.name=Overwereld +dimension.sun.name=Zon +entity.alien_villager.name=Alien Dorpeling +entity.buggy.name=Maanwagen +entity.celestial_screen.name=Ruimtekaart +entity.evolved_creeper.name=Geëvolueerde Creeper +entity.evolved_skeleton.name=Geëvolueerde Skelet +entity.evolved_skeleton_boss.name=Geëvolueerde Skelet Baas +entity.evolved_spider.name=Geëvolueerde Spin +entity.evolved_zombie.name=Geëvolueerde Zombie +entity.flag.name=Vlag +entity.gcflag.name=Vlag +entity.gravity_arrow.name=Pijl +entity.lander.name=Ruimte Lander +entity.meteor.name=Meteoor +entity.meteor_chunk.name=Meteoor Brokstuk +entity.oxygen_bubble.name=Zuurstof Bel +entity.para_chest.name=Parachute-kist +entity.rocket_t1.name=Raket +galaxy.milky_way=Melkweg +gc.configgui.alternate_canister_recipe=Ander kan recept +gc.configgui.asteroids_start=Uitdagings modus! (asteroïden start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Zet kaaserts generatie op de maan uit +gc.configgui.disable_copper_moon=Zet kopererts generatie op de maan uit +gc.configgui.disable_lander=Zet de maanlander uit, gebruik een parachute +gc.configgui.disable_moon_village_gen=Zet maandorpen generatie op de maan uit +gc.configgui.disable_space_station_creation=Zet de mogelijkheid om een ruimtestation te maken uit +gc.configgui.disable_spaceship_grief=Zet raketexplosies uit +gc.configgui.disable_spaceship_particles=Zet raketrook en vlammen uit +gc.configgui.disable_tin_moon=Zet tinerts generatie op de maan uit +gc.configgui.disable_update_check=Zet de updatecheck uit +gc.configgui.dungeon_boss_health_mod=Kerker baas levens modifier +gc.configgui.enable_aluminum_ore_gen=Zet aluminiumerts generatie uit +gc.configgui.enable_copper_ore_gen=Zet kopererts generatie uit +gc.configgui.enable_debug=Laat debug berichten in de console zien +gc.configgui.enable_other_mods_features=Laat andere mods wereldgeneratie veranderen +gc.configgui.enable_retrogen_oil=Retrogen overwereld olie +gc.configgui.enable_sealer_edge_checks=Sealer randen chencks +gc.configgui.enable_silicon_ore_gen=Zet siliconerts generatie uit +gc.configgui.enable_thaum_craft_nodes=Zet thaumcraft nodes op planeten aan +gc.configgui.enable_tin_ore_gen=Zet tinerts generatie uit +gc.configgui.external_oil_gen=Externe olie generatie +gc.configgui.force_overworld_respawn=Overwereld respawn +gc.configgui.hard_mode=Moeilijker Niveau +gc.configgui.id_achiev_base=Basis Achievement ID +gc.configgui.id_dimension_moon=Maan dimensie ID +gc.configgui.id_dimension_overworld_orbit=Ruimtestation dimensie ID +gc.configgui.id_dimension_overworld_orbit_static=Ruimtestation statische dimensie ID +gc.configgui.id_schematic_add_schematic=Bouwtekening ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Bouwtekening ID maanwagen +gc.configgui.id_schematic_rocket_t1=Bouwtekening ID level 1 raket +gc.configgui.key_override_fuel_level=Toets om brandstofniveau in raket te zien +gc.configgui.key_override_toggle_adv_goggles=toets om geavanceerde bril te activeren +gc.configgui.map_scroll_invert=Maak scrollen in de ruimtekaart tegenovergekeerd +gc.configgui.map_scroll_sensitivity=Ruimtekaart muis gevoeligheid +gc.configgui.meteor_block_damage=Meteorietenschade +gc.configgui.meteor_spawn_mod=Hoeveel meteorieten spawnen +gc.configgui.more_stars=Laat meer sterren zien +gc.configgui.oil_gen_factor=Olie generatie factor +gc.configgui.ore_dict_silicon=OreDict naam van silicium in andere mods +gc.configgui.other_mod_ore_gen_i_ds=Ertsen van andere mods genereren op planeten +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Toets op ruimtekaart te openen +gc.configgui.oxygen_indicator_bottom=Verplaats de zuurstofindicator naar beneden +gc.configgui.oxygen_indicator_left=Verplaats de zuurstofindicator naar links +gc.configgui.quick_mode=Snel Spel (Makkelijker) +gc.configgui.rocket_disable_overworld_return=Zet overworld raketterugkeer uit +gc.configgui.rocket_disabled_dimensions=Dimensies waar je niet met raket kunt komen +gc.configgui.rocket_fuel_factor=Raketbrandstof factor +gc.configgui.sealable_i_ds=Luchtdichte blokken +gc.configgui.space_station_energy_scalar=Ruimtestation zonne energie vermeerdering +gc.configgui.space_stations_require_permission=Ruimte station bezoek toestemming +gc.configgui.static_loaded_dimensions=Statische geladen dimensies +gc.configgui.suffocation_cooldown=Tijd dat het duurt om te stikken +gc.configgui.suffocation_damage=schade dat stikken doet per keer +gc.configgui.title=Galacticraft Core configuratie +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore Wereld Generatie +gui.battery_slot.desc.0=Batterijsleuf, Plaats batterij Hier +gui.battery_slot.desc.1=Of gebruik een aangesloten Energie Bron +gui.bed_fail.message=ohoh, wat als de zuurstof opraakt terwijl ik slaap? in heb een cryokamer nodig om te slapen in de ruimte! +gui.buggy.accel.name=Acceleratie +gui.buggy.decel.name=Deceleratie +gui.buggy.inv.name=Inventaris / Brandstof +gui.buggy.storage_space=Opslag Capaciteit +gui.buggy.turn.name=Draai links-rechts +gui.button.back.name=Terug +gui.button.disable.name=Uitschakelen +gui.button.disableseal.name=zet zuurstofafsluiting uit +gui.button.enable.name=Inschakelen +gui.button.enableseal.name=zet zuurstofafsluiting aan +gui.button.hide_dest.name=Verbergen +gui.button.loadfuel.name=Laad Brandstof +gui.button.loaditems.name=Laad Items +gui.button.next.name=Volgende +gui.button.refine.name=Verfijn +gui.button.stoploading.name=Stop Inladen +gui.button.stoprefine.name=Stop Raffinage +gui.button.stopunloading.name=Stop Uitladen +gui.button.unhide_dest.name=Tonen +gui.button.unloaditems.name=Laad items uit +gui.button.unlockschematic.name=Programmeer bouwtekening in +gui.checkbox.horizontal.name=Horizontale Mode +gui.checkbox.invert.name=Selectie Omkeren +gui.checkbox.player_name.name=Spelers naam is +gui.checkbox.player_within.name=Speler is binnen +gui.checkbox.redstone_signal.name=Opent met Redstone Signaal +gui.chest.warning.wrongkey=Ik heb misschien een Tier %s Kerker sleutel nodig om dit te openen! +gui.choose_planet.desc.moon=Bewoonbaar#Geen zuurstof#Zwaartekracht: 18% +gui.choose_planet.desc.overworld=Vol met leven#Bewoonbaar#Zwaartekracht: 100% +gui.chooseplanet.alreadycreated1.name=Ruimte Station is al +gui.chooseplanet.alreadycreated2.name=gecreëerd! +gui.chooseplanet.cannotcreate1.name=Kan hier geen Ruimte +gui.chooseplanet.cannotcreate2.name=Station creëren! +gui.creative_only.desc=Alleen Creatief +gui.display.nolink=Geen verbinding +gui.docking_rocket.current_vel.name=Huidige Snelheid +gui.docking_rocket.distance_from.name=Afstand van Doelwit +gui.docking_rocket.target_vel.name=Doelwit Snelheid +gui.docking_rocket.warning.name.0=Druk %s om minder vaart te maken +gui.docking_rocket.warning.name.1=Druk %s om meer vaart te maken +gui.dropbox.player_distance.name.0=1 Meter +gui.dropbox.player_distance.name.1=2 Meter +gui.dropbox.player_distance.name.2=5 Meter +gui.dropbox.player_distance.name.3=10 Meter +gui.electric_compressor.desc.0=voortgang +gui.energy_storage.desc.0=Energie Opslag +gui.energy_storage.desc.1=Energie +gui.flag.already_placed=Vlag is hier al geplaatst! +gui.frequency_module.desc.0=Kan een zwak Signaal ontvangen +gui.frequency_module.desc.1=Golven en verre signalen +gui.frequencymodule.warning0=Ik heb misschien een Frequentie eenheid nodig +gui.frequencymodule.warning1=Als ik hier wil horen. +gui.fuel_output.desc.0=Plaats Lege vloeibare Bussen in +gui.fuel_output.desc.1=Brandstof Lader om te vullen +gui.fuel_output.desc.2=Brandstof Tank +gui.fuel_tank.desc.0=Brandstof Lader heeft nodig +gui.fuel_tank.desc.1=Brandstof Lader om te vullen +gui.fuel_tank.desc.2=Brandstof Tank, Kan worden Gevuld +gui.fuel_tank.desc.3=Met Brandstof Bussen +gui.fuel_tank.desc.4=Brandstof Tank +gui.infinite_item.desc=Oneindig +gui.lander.velocity=Binnenkomst Snelheid +gui.lander.velocityu=m/s +gui.lander.warning2=Houd " +gui.lander.warning3=" ingedrukt, om te remmen! +gui.max_output.desc=Maximale Uitgang +gui.message.addnewsch.name=Niew Schema Toevoegen +gui.message.apply.name=Toepassen +gui.message.assign_name.name=Naam Toewijzen +gui.message.atmosphere.name=Atmosfeer +gui.message.back.name=Terug +gui.message.breed.name=Paren +gui.message.bubble_visible.name=Bubbel Zichtbaar +gui.message.can_create_space_station.name=Een Ruimte Station Kan hier worden Gecreëerd +gui.message.cancel.name=Annuleren +gui.message.cannot_create_space_station.name=Een Ruimte Sation Kan hier niet worden Gecreëerd +gui.message.catalog.name=Catalogus +gui.message.click_again.0.name=Klik opnieuw Om te vergroten (Manen en Sattelieten) +gui.message.click_again.1.name=Klik opnieuw Om te vergroten (Manen) +gui.message.click_again.2.name=Klik opnieuw Om te vergroten (Sattelieten) +gui.message.click_again.3.name=Klik opnieuw Om te vergroten +gui.message.clicklink=Klik Voor Galacticraft Wiki +gui.message.create_ss.name=Creëren +gui.message.daynightcycle.name=Dag-Nacht Omloop +gui.message.energy=Energie +gui.message.environment.name=Milieu Boost +gui.message.exit.name=Sluiten +gui.message.fuel.name=Brandstof +gui.message.full.name=vol +gui.message.generating.name=Genereren +gui.message.grow.name=Groeien +gui.message.heal.name=Genezen +gui.message.help1=Voor Galacticraft Help +gui.message.help1a=Om dit bericht weer te zien, Typ +gui.message.help2=Voor Ruimte Programma Begeleiding +gui.message.help3=Voor Help Met olie +gui.message.in.name=In +gui.message.launch.name=Lanceren +gui.message.max_energy=Max Energie +gui.message.meansurfacetemp.name=Gemiddelde Oppervlakte Temperatuur +gui.message.moon.atmosphere.0.name=Geen +gui.message.moon.daynightcycle.0.name=29.5 Aarddagen +gui.message.moon.meansurfacetemp.0.name=(Lichte Kant) 253C +gui.message.moon.meansurfacetemp.1.name=(Donkere Kant) -153C +gui.message.moon.surfacecomposition.0.name=Basalt Steen En +gui.message.moon.surfacecomposition.1.name=Sporen van Kaas +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% van Aarde) +gui.message.of.name=van +gui.message.oil.name=Olie +gui.message.out.name=Uit +gui.message.overworld.atmosphere.0.name=Stikstof en Zuurstof +gui.message.overworld.atmosphere.1.name=Steunt Leven +gui.message.overworld.daynightcycle.0.name=1 Aarddag +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Steen, Aarde en +gui.message.overworld.surfacecomposition.1.name=Grind +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% van Aarde) +gui.message.prelaunch=Voor Lancering Checklist +gui.message.rename.name=Hernoemen +gui.message.select_ss.name=Selecteer een Ruimte Station +gui.message.ss_owner.name=Eigenaar: +gui.message.status.name=Status +gui.message.strengthen.name=Versterken +gui.message.surfacecomposition.name=Oppervlakte Samenstelling +gui.message.surfacegravity.name=Oppervlakte Zwaartekracht +gui.message.thermal_status.name=Temperatuur controle +gui.message.tier.name=Level %d +gui.message.unnamed.name=naamloos +gui.missing_core.name.0=MicdoodleCore is niet gevonden in het mods folder +gui.missing_core.name.1=Galacticraft Faalde te laden +gui.missing_core.name.2=Sluit Minecraft en installeer MicdoodleCore +gui.missing_core.name.3=Klik hier om de download pagina te openen +gui.new_schematic.slot.desc.0=Nieuw schematic slot. Je +gui.new_schematic.slot.desc.1=kan nieuwe schematics vinden +gui.new_schematic.slot.desc.2=Bij het voltooien van Kerkers +gui.new_schematic.slot.desc.3=Op planeten en manen. +gui.oil_tank.desc.0=Olie Tank, Kan worden Gevuld +gui.oil_tank.desc.1=Met Olie Bussen +gui.oxygen.warning=Zuustof setup is ongeldig! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, Plaats Zuurstof Tank +gui.oxygen_compressor.slot.desc.1=hier om het te vullen met adembare zuurstof. +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, Plaats Zuurstof Tank +gui.oxygen_decompressor.slot.desc.1=hier om de adembare Zuurstof eruit te halen. +gui.oxygen_slot.desc.0=Zuurstof sleuf, Plaats Zuurstof Bus of Tank +gui.oxygen_slot.desc.1=Hier, Of gebruik een aangesloten Zuurstof Voorziening +gui.oxygen_storage.desc.0=Zuurstof Opslag +gui.oxygen_storage.desc.1=Zuurstof +gui.oxygen_use.desc=Zuurstof Gebruik +gui.per_second=/s +gui.player.bpm=BPM +gui.player.food=Voedsel +gui.player.health=Gezondheid +gui.player.ouch=AU!!!! +gui.receiver.cannot_attach=Kan hier niet de ontvanger vast maken! +gui.requires_controller.desc=Heeft Lanceer Controleur Nodig +gui.rocket.countdown=Aftelling +gui.rocket.height=Hoogte +gui.rocket.inv.name=Inventaris / Brandstof +gui.rocket.launch.name=Lanceren +gui.rocket.launched=Gelanceerd +gui.rocket.on_launchpad=Op lanceerplatform +gui.rocket.speed=Snelheid +gui.rocket.turn.name=Draai link-rechts +gui.rocket.updown.name=Draai op-neer +gui.rocket.warning.nofuel=Ik moet eerst Raket brandstof laden! +gui.rocket.warning.nogyroscope=Mysterieuze krachten zijn aanwezig en de gyroscoop draait door! +gui.rocket.warning.noparachute=Ik heb geen Parachute! Als ik weer op Lanceren Druk, Dan kan ik niet meer terug! +gui.rocket_type.0=Opslag Capaciteit: 18 +gui.rocket_type.1=Opslag Capaciteit: 36 +gui.rocket_type.2=Opslag Capaciteit: 56 +gui.rocket_type.3=Alles van Brandstof Voorzien +gui.seconds=s +gui.sensor.advanced=Geavanceerd +gui.sensor.advancedoff=UIT +gui.sensor.advancedon=AAN +gui.show_bubble.desc.0=Toon Bel +gui.skeleton_boss.message=Baas despawned, Ga niet uit de baas kamer tijdens het vechten! Ga opnieuw in de kamer om de baas te laten respawnen. +gui.space_race.chat.add_success=%s Heeft deelgenomen aan de ruimte race +gui.space_race.chat.already_part=Je bent al onderdeel van de Ruimte Race! +gui.space_race.chat.invite_received=Ruimte Race Team uitnodiging van %s. +gui.space_race.chat.not_found=Kan geen speler vinden met de naam: %s +gui.space_race.chat.remove_success=%s Is verwijderd uit de ruimte race +gui.space_race.chat.to_join=Om met %s mee te doen gebruik deze Command : %s +gui.space_race.coming_soon=Komt Binnenkort +gui.space_race.create.add_players.name=Voeg Speler(s) Toe +gui.space_race.create.back.name=Terug +gui.space_race.create.brush_radius.name=Kwast Radius +gui.space_race.create.brush_size.name=Kwast Grootte +gui.space_race.create.change_color.name.0=Verander +gui.space_race.create.change_color.name.1=Team +gui.space_race.create.change_color.name.2=Kleur +gui.space_race.create.close.name=Sluiten +gui.space_race.create.customize.name=Personaliseer Vlag +gui.space_race.create.eraser_radius.name=Gum Radius +gui.space_race.create.eraser_size.name=Gum Grootte +gui.space_race.create.global_stats.name=Toon Globale Statussen +gui.space_race.create.invite_player.name=Nodig Speler Uit +gui.space_race.create.player_radius.name=Let op: Spelers moeten binnen bereik zijn! (25 Blokken) +gui.space_race.create.rem_players.name=Verwijder Speler(s) +gui.space_race.create.remove.name=Verwijder +gui.space_race.create.remove_player.name=Verwijder Speler +gui.space_race.create.rename.name=Hernoem Team +gui.space_race.create.send_invite.name=Stuur Uitnodiging +gui.space_race.create.server_stats.name=Toon Server Statussen +gui.space_race.create.title.name=Ruimte Race Manager +gui.space_race.create.title.name.0=Ruimte Race +gui.space_race.create.title.name.1=Manager +gui.space_race.join.member_count.name=%d Leden +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Eigenaar +gui.space_race.join.title.name=Meedoen Met ruimte race +gui.space_race.unnamed=Naamloos Team +gui.spacestation.added=Je bent Toegevoegd bij %s's geaccepteerde spelers van het ruimtestation! +gui.spacestation.addsuccess=%s is Succesvol toegevoegd bij de lijst van geaccepteerde Spelers! +gui.spacestation.allow_all_false=Jouw Ruimte Stations zijn niet meer open voor alle spelers! +gui.spacestation.allow_all_true=Jouw Ruimte Stations zijn nu open voor alle spelers! (Gebruik /ssinvite -all om het ongedaan te maken.) +gui.spacestation.changesuccess=Ruimte Station Eigenaar veranderd van %s naar %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=%s Is succesvol Verwijderd van de ruimtestation lijst! +gui.spacestation.to_allow_entry=Om een ander Speler Toe te laten in het ruimtestation! +gui.spacestation.type_command=Typ +gui.status.active.name=Actief +gui.status.air_lock_closed.name=Luchtsluis Gesloten +gui.status.air_lock_open.name=Luchtsluis Open +gui.status.blockedfully.name=Zon is niet zichtbaar +gui.status.blockedpartial.name=Zon Gedeeltelijk Zichtbaar +gui.status.check_pending.name=Controlatie Afwachting +gui.status.check_starting.name=Controlatie Starten +gui.status.checking_seal.name=Afsluiting Controleren +gui.status.collecting.name=Verzamelen +gui.status.collectingenergy.name=Energie aan het verzamelen +gui.status.compressing.name=Samenpersen +gui.status.disabled.name=Uitgeschakelt +gui.status.fulltank.name=Zuurstof tank vol +gui.status.generating.name=Genereren +gui.status.hull_heat.name=Romp Warmte +gui.status.idle.name=Ijdel +gui.status.missingleaves.name=Niet genoeg bladeren +gui.status.missingoxygen.name=Niet genoeg zuurstof +gui.status.missingpower.name=Niet genoeg stroom +gui.status.missingtank.name=Geen geldige zuurstof tank aanwezig +gui.status.nofuel.name=Geen brandstof om te laden! +gui.status.noinvtarget.name=Bestemming heeft geen inventaris! +gui.status.noitems.name=Geen items om te laden! +gui.status.nooil.name=Geen olie +gui.status.not_available.name=N/A +gui.status.not_generating.name=Niet Genereren +gui.status.notargetload.name=Geen bestemming om in te laden! +gui.status.notargetunload.name=Geen bestemming om uit te laden! +gui.status.off.name=Uit +gui.status.on.name=Aan +gui.status.raining.name=Aan het Regenen +gui.status.ready.name=Klaar +gui.status.refining.name=Verfijnen +gui.status.running.name=Lopend +gui.status.sealed.name=Afgesloten +gui.status.sealerblocked.name=Uitgang Luchter Geblokeerd +gui.status.sun_visible.name=Zon Zichtbaar +gui.status.tank_empty.name=Zuurstof Tank Leeg +gui.status.targetempty.name=Voertuig is leeg! +gui.status.targetfull.name=Voertuig is vol! +gui.status.unknown.name=Onbekend +gui.status.unsealed.name=Niet afgesloten +gui.tank.oxygen_remaining=Zuurstof Over +gui.telemetry_fail.message=Eerst moet ik een wezen Opsporen met die frequentie module! (Of probeer het te dragen!) +gui.telemetry_fail_no_frequency_module.message=Ik heb misschien een frequentie module in mijn hand nodig om er gebruik van te maken! +gui.telemetry_fail_wearing_it.message=Ik moet de frequentie module af doen om een link met de telemetrie eenheid te maken! +gui.telemetry_succeed.message=Telemetrie Link Gecreëerd +gui.thermal_slot.desc.0=Temperatuur apparaat verbindings plek, plaats een 'Omgevings +gui.thermal_slot.desc.1=temperatuur controle apparaat' hier (optioneel) +gui.thermal_slot.desc.2=Let op: Verbruikt meer energie! +gui.title.air_lock.name=%s's Luchtsluis Controleur +gui.tracking.message=Opsporing Geactiveerd. Nu moet ik Met de Rechter-muisknop op de telemetrie eenheid klikken om de link te Creëren. +gui.warning=WAARSCHUWING! +gui.warning.invalid_thermal=Onvoeldoende Thermische Bescherming! +gui.warning.noroom=Niet genoeg Ruimte! +item.air_fan.name=Ventilator +item.air_vent.name=Ontluchter +item.basic_item.ambient_thermal_controller.name=Omgevings temperatuur controle apparaat +item.basic_item.canned_food.name=Kan met voedsel +item.basic_item.compressed_aluminum.name=Samengeperst Aluminium +item.basic_item.compressed_bronze.name=Samengeperst Brons +item.basic_item.compressed_copper.name=Samengeperst Koper +item.basic_item.compressed_iron.name=Samengeperst Ijzer +item.basic_item.compressed_steel.name=Samengeperst Staal +item.basic_item.compressed_tin.name=Sampengeperst Tin +item.basic_item.dehydrated_apple.name=Uitgedroogde Appels +item.basic_item.dehydrated_carrot.name=Uitgedroogde Wortels +item.basic_item.dehydrated_melon.name=Uitgedroogde Meloenen +item.basic_item.dehydrated_potato.name=Uitgedroogde Aardappelen +item.basic_item.frequency_module.name=Frequentie Module +item.basic_item.ingot_aluminum.name=Aluminium Staaf +item.basic_item.ingot_bronze.name=Bronzen +item.basic_item.ingot_copper.name=Koperen Staaf +item.basic_item.ingot_steel.name=Stalen Staaf +item.basic_item.ingot_tin.name=Tinnen Staaf +item.basic_item.raw_silicon.name=Ruwe Silicium +item.basic_item.solar_module_0.name=Enkel Zonnepaneel +item.basic_item.solar_module_1.name=Volledig Zonnepaneel +item.basic_item.wafer_advanced.name=Geavenceerde Wafer +item.basic_item.wafer_basic.name=Normale Wafer +item.basic_item.wafer_solar.name=Blauwe Zonne Wafer +item.battery.name=Batterij +item.bucket_fuel.name=Emmer Brandstof +item.bucket_oil.name=Emmer Olie +item.buggy.name=Buggy +item.buggymat.seat.name=Buggy Seat +item.buggymat.storage.name=Buggy Storage Box +item.buggymat.wheel.name=Buggy Wheel +item.canister.copper.name=Koperen bus +item.canister.tin.name=Tin bus +item.canvas.name=Zeil +item.cheese_block.name=Kaas blok +item.cheese_curd.name=Kaaswrongel +item.compressed_meteoric_iron.name=Samengeperst Meteorisch IJzer +item.empty_liquid_canister.name=Leeg vloeistof bus +item.engine.tier1booster.name=Tier 1 Booster +item.engine.tier1engine.name=Tier 1 Rocket Motor +item.flag.name=Vlag +item.fuel.name=Raket Brandstof +item.fuel_canister.name=Gevulde brandstof bus +item.fuel_canister_partial.name=Gedeeltelijk gevulde brandstof bus +item.heavy_plating.name=Zware beplating +item.hot_description.name=Heet +item.infinite_battery.name=Oneindige Batterij +item.infinite_oxygen.name=Oneindige Zuurstof Voorziening +item.key.t1.name=Level 1 Kerker sleutel +item.meteor_chunk.name=Gooibaar Meteoor Brokstuk +item.meteor_chunk_hot.name=Gooibaar Meteoor Brokstuk +item.meteoric_iron_ingot.name=Meteoriet ijzer staaf +item.meteoric_iron_raw.name=Ruwe meteoriet staaf +item.nose_cone.name=Neuskegel +item.oil_canister.name=Gevulde olie bus +item.oil_canister_partial.name=Gedeeltelijk gevulde olie bus +item.oil_extractor.name=Verplaatsbare olie extractor +item.oxygen_concentrator.name=Zuurstof Concentrator +item.oxygen_gear.name=Zuurstof uitrusting +item.oxygen_mask.name=Zuurstof masker +item.oxygen_tank_heavy_empty.name=Lege grote zuurstof tank +item.oxygen_tank_heavy_full.name=Grote zuurstof tank +item.oxygen_tank_light_empty.name=Lege kleine zuurstof tank +item.oxygen_tank_light_full.name=Kleine zuurstof tank +item.oxygen_tank_med_empty.name=Kleine middelmatige zuurstof tank +item.oxygen_tank_med_full.name=Middelmatige zuurstof tank +item.parachute_black.name=Zwarte Parachute +item.parachute_blue.name=Licht Blauwe Parachute +item.parachute_brown.name=Bruine Parachute +item.parachute_darkblue.name=Blauwe Parachute +item.parachute_darkgray.name=Grijze Parachute +item.parachute_darkgreen.name=Groene Parachute +item.parachute_gray.name=Licht Grijze Parachute +item.parachute_lime.name=Groene Parachute +item.parachute_magenta.name=Roodpaarse Parachute +item.parachute_orange.name=Oranje Parachute +item.parachute_pink.name=Roze Parachute +item.parachute_plain.name=Parachute +item.parachute_purple.name=Paarse Parachute +item.parachute_red.name=Rode Parachute +item.parachute_teal.name=Cyaanen Parachute +item.parachute_yellow.name=Gele Parachute +item.rocket_fins.name=Raket vleugels +item.rocket_t1.name=Ruimteschip +item.schematic.name=NASA werkbank schema +item.sensor_glasses.name=Sensor bril +item.sensor_lens.name=Sensor lens +item.standard_wrench.name=Standaard Moersleutel +item.steel_axe.name=Stalen bijl +item.steel_boots.name=Stalen schoenen +item.steel_chestplate.name=Stalen borstplaat +item.steel_helmet.name=Stalen helm +item.steel_hoe.name=Stalen schoffel +item.steel_leggings.name=Stalen broek +item.steel_pickaxe.name=Stalen pikhouweel +item.steel_pole.name=Stalen Paal +item.steel_shovel.name=Stalen schep +item.steel_sword.name=Stalen zwaard +item.tier1.desc=Level 1 +item_desc.powerdraw.name=Energie Nodig: %s /s +item_desc.shift.name=Druk %s Voor meer info +item_group.galacticraft_blocks=Galacticraft Blokken +item_group.galacticraft_items=Galacticraft Items +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Verander sensorbril instelling +keybind.spaceshipinv.name=Open Raket Inventaris +keybind.vehiclebackward.name=Voertuig naar achteren +keybind.vehicledown.name=Voertuig omlaag +keybind.vehicleforward.name=Voertuig naar voren +keybind.vehicleleft.name=Voertuig naar links +keybind.vehicleright.name=Voertuig naar rechts +keybind.vehicleup.name=Voertuig omhoog +moon.moon=Maan +newversion.failed.name=Galacticraft update check gefaalt! Probeer het opnieuw in 15 seconden. +newversion.success.name=Galacticraft remote versie gevonden: +planet.jupiter=Jupiter +planet.mercury=Mercurius +planet.neptune=Neptunus +planet.overworld=Overwereld +planet.saturn=Saturnus +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Overwereld Ruimte Station +schematic.moonbuggy.name=Maan wagen +schematic.rocket_t1.name=Level 1 Raket +schematic.rocket_t2.name=Leven 2 Raket +solarsystem.sol=Zonnestelsel +star.sol=Zon +tile.air_lock_controller.name=Luchtsluis Controleur +tile.air_lock_frame.description=Luchtsluis geraamtes, in een portaalvorm gebouwd en verbonden met een luchtsluis controle apparaat, funtioneren als een werkende luchtsluis. +tile.air_lock_frame.name=Luchtsluis Geraamte +tile.air_lock_seal.name=Luchtsluis Slot +tile.aluminum_wire.alu_wire.description=Aluminium draad wordt gebruikt om elektriche energie te vervoeren tussen energie producerende en verbruikende machines. +tile.aluminum_wire.alu_wire.name=Aluminum Draad +tile.aluminum_wire.alu_wire_heavy.description=Zware aluminium draad wordt gebruikt om elektriche energie te vervoeren tussen energie producerende en verbruikende machines. Vervoert meer energie dan normale aluminium draad. +tile.aluminum_wire.alu_wire_heavy.name=Zware Aluminium Draad +tile.arclamp.description=Booglampen produceren een sterk licht, dat de meeste monsters wegjaagd +tile.arclamp.name=Booglamp +tile.basic_block_core.block_aluminum_gc.name=Aluminum Blok +tile.basic_block_core.block_copper_gc.name=Koperen Blok +tile.basic_block_core.block_meteoric_iron_gc.name=Vast Meteorisch Ijzer +tile.basic_block_core.block_tin_gc.name=Tinnen Blok +tile.basic_block_core.deco_block_0.name=Tin Decoratie Blok +tile.basic_block_core.deco_block_1.name=Tin Decoratie Blok +tile.basic_block_core.ore_aluminum_gc.name=Aluminium Erts +tile.basic_block_core.ore_copper_gc.name=Koper Erts +tile.basic_block_core.ore_silicon.name=Silicium Erts +tile.basic_block_core.ore_tin_gc.name=Tin Erts +tile.basic_block_moon.bricks.name=Bakstenen +tile.basic_block_moon.cheesestone.name=Kaas erts +tile.basic_block_moon.coppermoon.name=Koper erts +tile.basic_block_moon.moondirt.name=Aarde +tile.basic_block_moon.moongrass.name=Gras +tile.basic_block_moon.moonstone.name=Steen +tile.basic_block_moon.tinmoon.name=Tin erts +tile.buggy_pad.description=Tankform kan worden gebruikt om een maanwagen te tanken als het in een 3x3 vierkant is gebouwd en er een brandstoflader is aangesloten. Waarschuwing: is geen lanceerplatform en je kunt er geen raketten mee lanceren! +tile.cargo.loader.name=Lading inlader +tile.cargo.unloader.name=Lading uitlader +tile.cargo_loader.description=Lading inlanders worden gebruikt om lading in een voertuig te laden als het is verbonden met een lanceer/tank platform. +tile.cargo_unloader.description=Lading uitlanders worden gebruikt om lading uit een voertuig te laden als het is verbonden met een lanceer/tank platform. +tile.cheese.description=Kaas blokken zijn gemaakt van de Kasen op de maan, plaatsbaar en eetbaar. (iedereen weet dat de maan van kaas is) +tile.cheese.name=Kaas blok +tile.circuit_fabricator.description=Circuit fabricator produceert silicium circuits van basis grondstoffen om te gebruiken in geavanceerde machines +tile.coal_generator.description=Koolgenerator verbrandt kool voor energie. simpelste maar minst efficiente energieproductie methode. +tile.collector.description=Zuurstof Collector slaat zuurstof op van bladeren in de buurt. +tile.collector.name=Zuurstof verzamelaar +tile.compressor.description=De compressor bewerkt staven in hun gecomprimeerde vorm. +tile.compressor_electric.description=De elecktrische compressor bewerkt staven in hun gecomprimeerde vorm. Comprimeerd twee per keer, wat het beter maakt dan een normale compressor. +tile.crude_oil.name=Olie +tile.crude_oil_moving.name=Ruwe Olie +tile.crude_oil_still.name=Ruwe Olie +tile.dishbase.description=De communicatie schotel kan ruimtestations volgen in hun baan en signalen opvangen van afgelegen ruimtebasissen. +tile.dishbase.name=Communicatie Schotel +tile.distributor.description=Zuurstof Verdeler geeft zuurstof af vanuit het midden. Dit zorgt er voor dat je kan ademen in de bubbel. +tile.distributor.name=Zuurstof verdeler +tile.dummyblock.cryogenic_chamber.name=Cryogenische Kamer +tile.dummyblock.launch_pad.name=Raket Lanceer Platform +tile.dummyblock.nasa_workbench.name=NASA Werkbank +tile.dummyblock.solar.name=Zonne Panneel +tile.dummyblock.space_station_base.name=Ruimte Station Basisblok +tile.electric_furnace_tier1.description=Elektische oven is een beter alternatief voor traditionele koolovens. +tile.electric_furnace_tier2.description=Elektische boogoven is een beter alternatief voor traditionele koolovens en elektrische ovens. Verdubbelt ersen! +tile.enclosed.aluminum_wire.name=Afsluitbare Alumium Draad +tile.enclosed.heavy_aluminum_wire.name=Afsluitbare Zware Aluminium Draad +tile.enclosed.copper_cable.name=Afsluitbare Koperen Kabel +tile.enclosed.description=Afsluitbare Blokken zouden ergens moeten gebruikt worden waar lucht niet kan ontsnappen, Zoals de muren van een ruimtebasis. +tile.enclosed.glass_fibre_cable.name=Afsluitbare Glasvezel Kabel +tile.enclosed.gold_cable.name=Afsluitbare Gouden Kabel +tile.enclosed.hv_cable.name=Afsluitbare HS Kabel +tile.enclosed.lv_cable.name=Afsluitbare Ultra-Lage-Stroom Kabel +tile.enclosed.me_cable.name=Afsluitbare ME kabel +tile.enclosed.fluid_pipe.name=Afsluitbare zuurstof pipe +tile.enclosed.pipe_fluids_cobblestone.name=Afsluitbare Keistenen Waterbestendigde Pijp +tile.enclosed.pipe_fluids_stone.name=Afsluitbare Stenen Waterbestendigde Pijp +tile.enclosed.pipe_items_cobblestone.name=Afsluitbare Keistenen Tranport Pijp +tile.enclosed.pipe_items_stone.name=Afsluitbare Stenen Transport Pijp +tile.enclosed.pipe_power_gold.name=Afsluitbare Gouden Geleidende Pijp +tile.enclosed.pipe_power_stone.name=Afsluitbare Stenen Geleidende Pijp +tile.energy_storage_module_tier1.description=Energie opslag module wordt gebruikt om elektriciteit op te slaan om later te gebruiken. +tile.energy_storage_module_tier2.description=Energie opslag cluster wordt gebruikt om elektriciteit op te slaan om later te gebruiken. Slaat meer op dan een normale energie opslag module. +tile.fallen_meteor.description=Meteorieten kunnen worden gevonden op planeten en manen met weinig tot geen atmosfeer. geeft meteorietenijzer als het gebroken wordt. +tile.fallen_meteor.name=Meteoriet +tile.fuel.name=Brandstof +tile.fuel_block.name=Brandstof +tile.fuel_loader.description=Na het aansluiten bij een lanceerplatform, een brandstof lader zal brandstof toelaten in de aangesloten raket of een ander voertuig. +tile.fuel_loader.name=Brandstof Lader +tile.glowstone_torch.description=Gloeisteen fakkels zijn om te gebruiken als er geen zuurstof is voor houten fakkels om te branden. +tile.glowstone_torch.name=Gloeisteen Fakkel +tile.landing_pad.buggy_fueler.name=Maanwagen tank platform +tile.landing_pad.cargo_pad.name=Landingsraket landingsplatform +tile.landing_pad.description=Landingsplaatsen zorgen ervoor dat je raketten kun plaatsen, als je het in een 3x3 vierkant plaatst. Brandstof Laders, Vracht Laders en Lanceer Controleurs Kunnen worden verbonden. +tile.landing_pad.landing_pad.name=Raket Lanceerplatform +tile.landing_pad_full.name=Raket Lanceerplatform +tile.machine.0.name=Kool Generator +tile.machine.1.name=Energie Opslag Module +tile.machine.2.name=Elektrische Oven +tile.machine.3.name=Compressor +tile.machine.7.name=Elektrische Vlamboogoven +tile.machine.8.name=Energie Opslag Bundel +tile.machine2.4.name=Elektrische Compressor +tile.machine2.5.name=Omloop Fabricator +tile.machine2.6.name=Zuurstof Opslag Module +tile.moon_stairs_brick.name=Maan Kerker Bakstenen Treden +tile.moon_stairs_stone.name=Maan Stenen Treden +tile.ore_copper.name=Koper Erts +tile.ore_tin.name=Tin Erts +tile.oxygen_compressor.0.name=Zuurstof Compressor +tile.oxygen_compressor.1.name=Zuurstof Decompressor +tile.oxygen_compressor.description=Zuurstof Compressor slaat zuurstof op in tanks. +tile.oxygen_decompressor.description=Zuurstof Decompressor haalt de zuurstof uit zuurstof tanks. +tile.oxygen_detector.description=Zuustof Detector geeft een redstone signaal wanneer er zuurstof aanwezi is. +tile.oxygen_detector.name=Zuurstof Detector +tile.oxygen_pipe.description=Zuustof Pijp helpt met het vervoeren van zuurstof van de ene machine naar de andere. +tile.oxygen_pipe.name=Zuurstof pijp +tile.oxygen_storage_module.description=Zuurstof opslag modules slaan zuurstof op om later te gebruiken. +tile.parachest.description=Parachute-kisten vallen uit de lucht na het landen op bepaalde planeten of manen, zoals de aarde. Bevat raket, lading, en overgebleven brandstof van de vorige lancering. +tile.parachest.name=Parachute-kist +tile.refinery.description=De rafinaderij zal olie en energie invoeren, en zal brandstof uitvoeren voor raketten en voertuigen. +tile.refinery.name=Raffinaderij +tile.rocket_workbench.description=De NASA werkbank wordt gebruikt om raketten en andere voertuigen te maken. +tile.rocket_workbench.name=NASA werkbank +tile.sapling2.birch.name=Jonge Berk +tile.sapling2.jungle.name=Jonge Jungle Boom +tile.sapling2.oak.name=Jonge Eik +tile.sapling2.spruce.name=Jonge Spar +tile.sealer.description=Zuurstof Afsluiter kijkt voor afgesloten ruimtes. Als er een afgesloten ruimte is zal die het vullen met lucht. +tile.sealer.name=Luchtsluis +tile.slab_gc_half.moon_bricks_slab.name=Maan Kerker Bakstenen Plaat +tile.slab_gc_half.moon_slab.name=Maan Stenen Plaat +tile.slab_gc_half.tin_slab_1.name=Tinnen Decoratie Plaat +tile.slab_gc_half.tin_slab_2.name=Tinnen Decoratie Plaat +tile.solar.advanced_solar.name=Geavanceerde Zonnepaneel +tile.solar.basic_solar.name=Normale Zonnepaneel +tile.solar_adv.description=Geavanceerde zonnepanelen genereren energie van zonlicht. Past de hoek van het paneel automatich aan om de meeste energie te verzamelen. +tile.solar_basic.description=Normale zonnepanelen genereren energie van zonlicht. Genereert de meeste energie op het midden van de dag. +tile.space_station_base.name=Ruimte Station Arriveer Blok +tile.spin_thruster.description=Rotatie motoren worden gebruikt om ruimtestations te laten draaien. +tile.spin_thruster.name=Rotatie motor +tile.telemetry.description=Verzamelt nuttige informatie over verbonden raketten, spelers, en monsters. Plaats naast een beeldscherm. Gebruik een frequentie module om een data verbinding te maken. +tile.telemetry.name=telemetrie Eenheid +tile.tin_stairs_1.name=Tinnen Decoratie Treden +tile.tin_stairs_2.name=Tinnen Decoratie Treden +tile.treasure_chest.description=Level 1 schatkisten genereren in maankerkers. De baas dropt de sleutel om het te openen. +tile.treasure_chest.name=Schatkist +tile.unlit_torch.name=Fakkel +tile.unlit_torch_stone.name=Stenen Fakkel +tile.unlit_torch_lit.name=Fakkel +tile.unlit_torch_stone_lit.name=Stenen Fakkel +tile.view_screen.description=Beeldschermen maken je ruimtebasis helemaal af! Klik met de rechtermuisknop om de informatie te veranderen. Kan ook verbinden met andere beeldschermen om een groot beeldscherm te maken. +tile.view_screen.name=Beeldscherm +tile.wall_gc.moon.name=Maan Stenen Muur +tile.wall_gc.moon_bricks.name=Maan Kerker Bakstenen Muur +tile.wall_gc.tin.name=Tinnen Decoratie Muur diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pl_pl.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pl_pl.lang new file mode 100644 index 00000000..6147b650 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pl_pl.lang @@ -0,0 +1,823 @@ +checklist.create_grapple.key=Stwórz hak chwytak +checklist.equip_oxygen_suit.key=Wyekwipuj strój astronauty +checklist.equip_parachute.key=Wyekwipuj spadochron +command.gcastrominer.count=Liczba Astro Kopaczy dla gracza %s wynosi %s +commands.emergencykit=Graczowi %s został dany zestaw awaryjny! +commands.dimensionteleport=Gracz %s został wysłany do atmosfery gracza %s +commands.dimensiontp.too_many=Za dużo argumentów w komendzie! Wykorzystanie: %s +commands.gcenergyunits.invalid_units=Niepoprawne jednostki w komendzie /GCEnergyUnits. Wykorzystanie: %s +commands.gcenergyunits.no_units=Jednostki muszą być podane! Wykorzystanie: %s +commands.gchouston.confirm.1=Tutaj Kontrola Misji, możesz powtórzyć? +commands.gchouston.confirm.2=(Aby opuścić misję, wpisz /gchouston znowu aby potwierdzić.) +commands.gchouston.fail=Komenda /gchouston jest tylko dostępna z przestrzeni kosmicznej (lub Trybu Kreatywnego). +commands.gchouston.help.1=Uh, Houston, mamy problem.... +commands.gchouston.help.2=(Wpisz /gchouston aby opuścić misję i powrócić do domu.) +commands.gchouston.noop=Używanie komendy /gchouston na innych graczach jest wyłącznie dostępne dla operatorów. +commands.gchouston.success=OK, trzymaj się, %s, teleportowanie do pozycji domu w Świecie. +commands.joinrace.no_team=Drużyna musi być określona! Wykorzystanie: %s +commands.ssinvite.not_found=Nie znaleziono stacji kosmicznej z twoim imieniem, musisz się tam najpierw wybrać! +commands.ssinvite.wrong_usage=Za mało argumentów w komendzie! Wykorzystanie: %s +commands.ssnewowner.wrong_usage=Nie można rozpoznać ID# Stacji Kosmicznej - czy ona w ogóle istnieje? Wykorzystanie: %s +commands.ssuninvite.no_player=Nie znaleziono gracza o nazwie %s na twojej liście Stacji Kosmicznej! +container.cargoloader.name=Ładownik +container.cargounloader.name=Wyładownik +container.fuelloader.name=Ładownik paliwa +container.lander.name=Lądownik kosmiczny +container.magneticcrafting.name=Konstruowanie +container.oxygencollector.name=Zbieracz tlenu +container.oxygencompressor.name=Kompresor tlenu +container.oxygendecompressor.name=Dekompresor tlenu +container.oxygendistributor.name=Dystrybutor tlenu +container.oxygensealer.name=Uszczelniacz tlenu +container.parachest.name=Para-skrzynia +container.refinery.name=Rafineria +container.solaradvanced.name=Zaawansowany panel słoneczny +container.solarbasic.name=Standardowy panel słoneczny +container.spaceship.name=Rakieta poziomu 1 +container.treasurechest.name=Skrzynia skarbów +death.attack.meteor_chunk=%1$s został uderzony przez meteorytowy gruz! +death.attack.oxygen_suffocation=%1$s udusił się z braku tlenu! +death.attack.spaceship_crash=%1$s zginął rozbijając się rakietą o ziemię! Uups. +death.attack.sulphuric_acid=%1$s rozpuścił się w kwasie siarkowym! +death.attack.thermal=%1$s zapomniał ochrony termalnej! +dimension.moon.name=Księżyc +dimension.overworld.name=Świat +dimension.sun.name=Słońce +entity.alien_villager.name=Kosmita osadnik +entity.buggy.name=Buggy +entity.celestial_screen.name=Kosmiczny ekran +entity.evolved_creeper.name=Wyewoluowany creeper +entity.evolved_skeleton.name=Wyewoluowany szkielet +entity.evolved_skeleton_boss.name=Wyewoluowany Boss szkielet +entity.evolved_spider.name=Wyewoluowany pająk +entity.evolved_zombie.name=Wyewoluowany zombie +entity.evolved_enderman.name=Wyewoluowany enderman +entity.evolved_witch.name=Wyewoluowana wiedźma +entity.flag.name=Flaga +entity.gcflag.name=Flaga +entity.gravity_arrow.name=Strzała +entity.lander.name=Lądownik kosmiczny +entity.meteor.name=Meteor +entity.meteor_chunk.name=Kawałek meteorytu +entity.oxygen_bubble.name=Bańka tlenowa +entity.para_chest.name=Paraskrzynia +entity.rocket_t1.name=Rakieta poziomu 1 +galaxy.milky_way=Droga Mleczna +gc.configgui.allow_liquids_grating=Pozwól aby ciecze spływały w ruszt +gc.configgui.alternate_canister_recipe=Alternatywna receptura dla kanistra +gc.configgui.asteroids_flags=Flagi Trybu Wyzwania +gc.configgui.asteroids_start=Tryb wyzwania (start na Asteroidach) +gc.configgui.biome_id_base=BiomeID Stacji dla GC +gc.configgui.detectable_i_ds=Wykrywalne ID +gc.configgui.disable_biome_type_registrations=Wyłącz registracje Typu Biomu +gc.configgui.disable_cheese_moon=Wyłącz generowanie sera na Księżycu +gc.configgui.disable_copper_moon=Wyłącz generowanie miedzi na Księżycu +gc.configgui.disable_lander=Wyłącz lądownik na Księżycu. +gc.configgui.disable_moon_village_gen=Wyłącz generowanie wiosek na Księżycu +gc.configgui.disable_ore_dict_space_metals=Receptury muszą używać własnych metalów kosmicznych z GC +gc.configgui.disable_sapphire_moon=Wyłącz generowanie rudy szafiru na Księżycu +gc.configgui.disable_space_station_creation=Wyłącz tworzenie Stacji Kosmicznych +gc.configgui.disable_spaceship_grief=Wyłącz wybuch rakiet +gc.configgui.disable_spaceship_particles=Wyłącz cząsteczki rakiety +gc.configgui.disable_tin_moon=Wyłącz generowanie cyny na Księżycu +gc.configgui.disable_update_check=Wyłącz sprawdzanie aktualizacji +gc.configgui.disable_vehicle_camera_changes=Vivecraft: Wyłącz trzecią osobę i przybliżenie +gc.configgui.dungeon_boss_health_mod=Modyfikator życia Bossów +gc.configgui.enable_aluminum_ore_gen=Generowanie aluminium na Świecie +gc.configgui.enable_copper_ore_gen=Generowanie miedzi na Świecie +gc.configgui.enable_debug=Pokazuj wiadomości debugowania w konsoli +gc.configgui.enable_other_mods_features=Włącz generowanie świata zewnętrznych modyfikacji +gc.configgui.enable_retrogen_oil=Retrogenowa ropa na Świecie +gc.configgui.enable_sealer_edge_checks=Sprawdzenia krawędźi uszczelnienia +gc.configgui.enable_silicon_ore_gen=Generowanie sylikonu na Świecie +gc.configgui.enable_space_race_manager_popup=Włącz popup menedżera wyścigu kosmicznego +gc.configgui.enable_thaum_craft_nodes=Włącz węzły ThaumCraft na planetach +gc.configgui.enable_tin_ore_gen=Generowanie cyny na Świecie +gc.configgui.external_oil_gen=Zewnętrzna generacja ropy +gc.configgui.force_overworld_respawn=Wymuś odrodzenie na Świecie +gc.configgui.hard_mode=Zwiększenie trudności +gc.configgui.id_achiev_base=ID podstawowych osiągnięć +gc.configgui.id_dimension_moon=ID Typu wymiaru Księżyc +gc.configgui.id_dimension_overworld=Wymiar Świata +gc.configgui.id_dimension_overworld_orbit=ID Typu wymiaru Stacja Kosmiczna +gc.configgui.id_dimension_overworld_orbit_static=ID Typu wymiaru Statyczna Stacja Kosmiczna +gc.configgui.id_schematic_add_schematic=ID schematów "Dodaj schemat" +gc.configgui.id_schematic_moon_buggy=ID schematów księżycowego Buggy +gc.configgui.id_schematic_rocket_t1=ID schematów rakiety poziomu 1 +gc.configgui.key_override_fuel_level=Ustaw klawisz: GUI paliwa rakiety +gc.configgui.key_override_toggle_adv_goggles=Ustaw klawisz: Zaawansowane okulary +gc.configgui.map_scroll_invert=Odwróć przewijanie mapy +gc.configgui.map_scroll_sensitivity=Czułość myszy przewijania mapy +gc.configgui.meteor_block_damage=Włączenie obrażeń bloków od meteoru +gc.configgui.meteor_spawn_mod=Modyfikator spawnu meteorów +gc.configgui.more_stars=Pokazuj więcej gwiazd +gc.configgui.oil_gen_factor=Współczynnik generowania ropy +gc.configgui.ore_dict_silicon=nazwa OreDict sylikonu +gc.configgui.other_mod_ore_gen_i_ds=Generowanie rud z innych modów na planetach +gc.configgui.override_capes=Wymuś pokazywanie peleryn donatorów +gc.configgui.override_map=Ustaw klawisz: Mapa galaktyki +gc.configgui.oxygen_indicator_bottom=Przesuń wskaźnik tlenu w dół +gc.configgui.oxygen_indicator_left=Przesuń wskaźnik tlenu w lewo +gc.configgui.planet_worldborders=Maksymalne x,z dla lądowania na Księżycu +gc.configgui.quick_mode=Szybka gra (łatwiejsza) +gc.configgui.rocket_disable_overworld_return=Wyłącz powrót rakiety na Świat +gc.configgui.rocket_disabled_dimensions=Wyłączone wymiary dla rakiet +gc.configgui.rocket_fuel_factor=Współczynnik paliwa rakietowego +gc.configgui.sealable_i_ds=Bloki uszczelniające +gc.configgui.space_station_energy_scalar=Modyfikator energii Stacji Kosmicznej +gc.configgui.space_stations_require_permission=Zezwolenia Stacji Kosmicznej +gc.configgui.static_loaded_dimensions=Załadowane statycznie wymiary +gc.configgui.static_loaded_new_ss=Załadowany statyk nowych Stacji Kosmicznych? +gc.configgui.suffocation_cooldown=Odstęp czasu obrażeń od duszenia się +gc.configgui.suffocation_damage=Obrażenia od duszenia się +gc.configgui.title=Konfiguracja główna Galacticraft +gc.configgui.use_old_fuel_fluid_i_d=Używaj oryginalnej registracji ciecz fuelgc +gc.configgui.use_old_oil_fluid_i_d=Używaj oryginalnej registracji ciecz oilgc +gc.configgui.whitelist_co_f_h_core_gen=Biała Lista dla generacji świata CoFHCore +gui.battery_slot.desc.0=Slot na baterie, wstaw tutaj baterię +gui.battery_slot.desc.1=lub użyj podłączonego źródła mocy. +gui.bed_fail.message=O nie, a co jeśli skończy mi się tlen podczas snu? Potrzebuję komory kriogenicznej by móc spać w kosmosie! +gui.buggy.accel.name=Przyspiesz +gui.buggy.decel.name=Zwolnij +gui.buggy.inv.name=Ekwipunek / Paliwo +gui.buggy.storage_space=Magazyn +gui.buggy.turn.name=Skręć w lewo-prawo +gui.button.back.name=Poprzedni +gui.button.disable.name=Deaktywuj +gui.button.disableseal.name=Deaktywuj Uszczelnienie +gui.button.enable.name=Aktywuj +gui.button.enableseal.name=Aktywuj Uszczelnienie +gui.button.hide_dest.name=Schowaj +gui.button.loadfuel.name=Zatankuj +gui.button.loaditems.name=Załaduj +gui.button.next.name=Następny +gui.button.paintapply.name=Zaaplikuj farbę +gui.button.paintmix.name=Mieszaj kolor +gui.button.paintreset.name=Zresetuj kolor +gui.button.refine.name=Rafinuj +gui.button.stoploading.name=Zatrzymaj ładowanie +gui.button.stoprefine.name=Zatrzymaj rafinowanie +gui.button.stopunloading.name=Zatrzymaj wyładowywanie +gui.button.unhide_dest.name=Pokaż +gui.button.unloaditems.name=Wyładuj przedmioty +gui.button.unlockschematic.name=Odblokuj schemat +gui.checkbox.horizontal.name=Tryb horyzontalny +gui.checkbox.invert.name=Odwróć wybór +gui.checkbox.player_name.name=Gracz nazywa się +gui.checkbox.player_within.name=Gracz jest w +gui.checkbox.redstone_signal.name=Otwiera na sygnał czerwonego kamienia +gui.chest.warning.wrongkey=Zgaduje że potrzebuję klucz lochu poziomu %s by to otworzyć! +gui.choose_planet.desc.moon=Zdatny do zamieszkania#Brak tlenu#Grawitacja: 18% +gui.choose_planet.desc.overworld=Pełny życia#Zdatny do zamieszkania#Grawitacja: 100% +gui.chooseplanet.alreadycreated1.name=Stacja Kosmiczna +gui.chooseplanet.alreadycreated2.name=już istnieje! +gui.chooseplanet.cannotcreate1.name=Nie można tutaj stworzyć +gui.chooseplanet.cannotcreate2.name=Stacji Kosmicznej! +gui.crafting_memory.desc.0=Ten magnetyczny stół rzemieślniczy potrafi skonstruować więcej tego! +gui.crafting_memory.desc.1=Aby zapamiętać recepturę, skonstruuj jeden przedmiot. +gui.creative_only.desc=Tylko w kreatywnym +gui.display.nolink=Brak połączenia +gui.docking_rocket.current_vel.name=Aktualna prędkość +gui.docking_rocket.distance_from.name=Odległość od celu +gui.docking_rocket.target_vel.name=Prędkość celowa +gui.docking_rocket.warning.name.0=Wciśnij %s by zwolnić +gui.docking_rocket.warning.name.1=Wciśnij %s by przyspieszyć +gui.dropbox.player_distance.name.0=1 metr +gui.dropbox.player_distance.name.1=2 metry +gui.dropbox.player_distance.name.2=5 metrów +gui.dropbox.player_distance.name.3=10 metrów +gui.electric_compressor.desc.0=Pracuje +gui.energy_storage.desc.0=Magazyn energii +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Flaga jest już tutaj postawiona! +gui.frequency_module.desc.0=Odbiera słabe fale +gui.frequency_module.desc.1=dźwiękowe i odległe sygnały +gui.frequencymodule.warning0=Pewnie potrzebuje +gui.frequencymodule.warning1=żeby tu dobrze słyszeć. +gui.fuel_output.desc.0=Wstaw puste kanistry na płyny do +gui.fuel_output.desc.1=tego slotu by napełnić je paliwem +gui.fuel_output.desc.2=ze zbiornika. +gui.fuel_tank.desc.0=Zbiornik paliwa. Wymaga +gui.fuel_tank.desc.1=ładownika paliwa do zapełnienia +gui.fuel_tank.desc.2=zbiornika paliwa, może być zapełniony +gui.fuel_tank.desc.3=kanistrami paliwa +gui.fuel_tank.desc.4=Zbiornik paliwa +gui.infinite_item.desc=Nieskończony +gui.lander.velocity=Prędkość wejściowa +gui.lander.velocityu=m/s +gui.lander.warning2=Przytrzymaj " +gui.lander.warning3=" by zwolnić! +gui.max_output.desc=Maksymalne wyjście +gui.message.addnewsch.name=Dodaj nowy schemat +gui.message.apply.name=Zastosuj +gui.message.assign_name.name=Przypisz nazwę +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Wróć +gui.message.breed.name=Rozmnażanie +gui.message.bubble_visible.name=Bańka widoczna +gui.message.can_create_space_station.name=Można tu stworzyć Stację Kosmiczną! +gui.message.cancel.name=Anuluj +gui.message.cannot_create_space_station.name=Nie można tu stworzyć Stacji Kosmicznej. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Kliknij ponownie by przybliżyć (zobacz księżyce i satelity) +gui.message.click_again.1.name=Kliknij ponownie by przybliżyć (zobacz księżyce) +gui.message.click_again.2.name=Kliknij ponownie by przybliżyć (zobacz satelity) +gui.message.click_again.3.name=Kliknij ponownie by przybliżyć +gui.message.clicklink=Kliknij by zobaczyć na Galacticraft Wiki +gui.message.create_ss.name=Stwórz +gui.message.daynightcycle.name=Cykl dzień-noc +gui.message.energy=Energia +gui.message.environment.name=Bonus środowiska +gui.message.exit.name=Wyjdź +gui.message.fuel.name=Paliwo +gui.message.full.name=pełny +gui.message.generating.name=Generowanie +gui.message.grow.name=Rośnięcie +gui.message.heal.name=Leczenie +gui.message.help1=Pomoc z Galacticraft +gui.message.help1a=By znowu zobaczyć tą wiadomość w dowolnym momencie, wpisz +gui.message.help2=Przewodnik po programie kosmicznym +gui.message.help3=Pomoc z ropą +gui.message.in.name=Wejście +gui.message.launch.name=Start +gui.message.max_energy=Maksymalna energia +gui.message.meansurfacetemp.name=Przeciętna temperatura powierzchniowa +gui.message.moon.atmosphere.0.name=Brak +gui.message.moon.daynightcycle.0.name=29.5 dni ziemskich +gui.message.moon.meansurfacetemp.0.name=(Jasna strona) 253°C +gui.message.moon.meansurfacetemp.1.name=(Ciemna strona) -153°C +gui.message.moon.surfacecomposition.0.name=Bazaltowy kamień i +gui.message.moon.surfacecomposition.1.name=ślady sera +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% ziemskiej) +gui.message.of.name=z +gui.message.oil.name=Ropa +gui.message.out.name=Wyjście +gui.message.overworld.atmosphere.0.name=Azot i tlen +gui.message.overworld.atmosphere.1.name=Wspiera życie +gui.message.overworld.daynightcycle.0.name=1 dzień ziemski +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Kamień, ziemia i +gui.message.overworld.surfacecomposition.1.name=żwir +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% ziemskiej) +gui.message.prelaunch=Lista przedstartowa +gui.message.rename.name=Zmień Nazwę +gui.message.select_ss.name=Wybierz Stację Kosmiczną +gui.message.ss_owner.name=Właściciel: +gui.message.status.name=Status +gui.message.strengthen.name=Wzmocnienie +gui.message.surfacecomposition.name=Kompozycja powierzchni +gui.message.surfacegravity.name=Grawitacja powierzchniowa +gui.message.thermal_status.name=Kontrola termalna +gui.message.tier.name=Poziom %d +gui.message.unnamed.name=Bez nazwy +gui.missing_core.name.0=Nie znaleziono MicdoodleCore w folderze mods +gui.missing_core.name.1=Załadowanie Galacticraft nie powiodło się +gui.missing_core.name.2=Zamknij Minecrafta i zainstaluj MicdoodleCore +gui.missing_core.name.3=Kliknij tutaj by otworzyć stronę pobierania. +gui.new_schematic.slot.desc.0=Slot na nowe schematy. Możesz +gui.new_schematic.slot.desc.1=znaleźć nowe schematy +gui.new_schematic.slot.desc.2=eksplorując lochy na +gui.new_schematic.slot.desc.3=planetach i księżycach. +gui.oil_tank.desc.0=Zbiornik ropy, może być napełniony +gui.oil_tank.desc.1=kanistrami z ropą. +gui.oxygen.warning=Konfiguracja tlenowa jest nieprawidłowa! +gui.oxygen_compressor.slot.desc.0=Slot na zbiornik, wstaw tutaj zbiornik +gui.oxygen_compressor.slot.desc.1=na tlen aby go wypełnić oddychalnym tlenem. +gui.oxygen_decompressor.slot.desc.0=Slot na zbiornik, wstaw tutaj zbiornik +gui.oxygen_decompressor.slot.desc.1=z tlenem bo go opróżnić. +gui.oxygen_slot.desc.0=Slot na tlen, wstaw tutaj kanister +gui.oxygen_slot.desc.1=z tlenem lub użyj podłączonego źródła tlenu +gui.oxygen_storage.desc.0=Magazyn tlenu +gui.oxygen_storage.desc.1=Tlen +gui.oxygen_use.desc=Wykorzystanie tlenu +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Żywność +gui.player.health=Zdrowie +gui.player.ouch=ał!!!! +gui.receiver.cannot_attach=Nie można tutaj podłączyć odbiornika! +gui.requires_controller.desc=Wymaga kontrolera startu +gui.rocket.countdown=Odliczanie +gui.rocket.height=Wysokość +gui.rocket.inv.name=Ekwipunek / Paliwo +gui.rocket.launch.name=Start +gui.rocket.launched=Wystartowana +gui.rocket.on_launchpad=Na platformie startowej +gui.rocket.speed=Prędkość +gui.rocket.turn.name=Obrót w lewo-prawo +gui.rocket.updown.name=Ster w górę-dół +gui.rocket.warning.fuelinsufficient=Niewystarczająco paliwa na bezpieczny start podczas kontroli automatycznej! +gui.rocket.warning.launchcontroller=Przedstartowe anulowanie startu. Sprawdź kontroler startu! +gui.rocket.warning.nofuel=Muszę najpierw zatankować paliwo rakietowe! +gui.rocket.warning.nogyroscope=Tajemnicze siły działają a żyroskopy kręcą się jak szalone! +gui.rocket.warning.noparachute=Nie mam spadochronu! Jeśli znowu wcisnę start, nie będzie odwrotu! +gui.rocket_type.0=Wielkość magazynu: 18 +gui.rocket_type.1=Wielkość magazynu: 36 +gui.rocket_type.2=Wielkość magazynu: 54 +gui.rocket_type.3=Zatankowany +gui.seconds=s +gui.sensor.advanced=Tryb zaawansowany +gui.sensor.advancedoff=Wyłączony +gui.sensor.advancedon=Włączony +gui.show_bubble.desc.0=Pokaż bańkę +gui.skeleton_boss.message=Boss usunięty, nie opuszczaj pomieszczenia podczas walki! Wejdź do pomieszczenia by przyzwać Bossa. +gui.space_race.chat.add_success=Gracz %s dołączył do kosmicznego wyścigu! +gui.space_race.chat.already_part=Już bierzesz udział w tym kosmicznym wyścigu! +gui.space_race.chat.invite_received=Otrzymano zaproszenie do drużyny wosmicznego wyścigu od %s +gui.space_race.chat.not_found=Nie znaleziono gracza o nazwie: % +gui.space_race.chat.remove_success=Gracz %s został usunięty z kosmicznego wyścigu. +gui.space_race.chat.to_join=By dołączyć do %s użyj komendy %s +gui.space_race.coming_soon=Już niedługo +gui.space_race.create.add_players.name=Dodaj gracza(y) +gui.space_race.create.back.name=Wróć +gui.space_race.create.brush_radius.name=Promień pędzla +gui.space_race.create.brush_size.name=Wielkość pędzla +gui.space_race.create.change_color.name.0=Zmień +gui.space_race.create.change_color.name.1=Kolor +gui.space_race.create.change_color.name.2=Drużyny +gui.space_race.create.close.name=Zamknij +gui.space_race.create.customize.name=Dostosuj flagę +gui.space_race.create.eraser_radius.name=Promień gumki +gui.space_race.create.eraser_size.name=Wielkość gumki +gui.space_race.create.global_stats.name=Zobacz statystyki globalne +gui.space_race.create.invite_player.name=Zaproś gracza +gui.space_race.create.player_radius.name=Uwaga: Gracze muszą być w zasięgu! (25 bloków) +gui.space_race.create.rem_players.name=Usuń gracza(y) +gui.space_race.create.remove.name=Usuń +gui.space_race.create.remove_player.name=Usuń gracza +gui.space_race.create.rename.name=Zmień nazwę drużyny +gui.space_race.create.send_invite.name=Wyślij zaproszenie +gui.space_race.create.server_stats.name=Zobacz statystyki serwera +gui.space_race.create.title.name=Menedżer wyścigu kosmicznego +gui.space_race.create.title.name.0=Menedżer +gui.space_race.create.title.name.1=wyścigu kosmicznego +gui.space_race.join.member_count.name=%d członków +gui.space_race.join.name=Dołącz +gui.space_race.join.owner.name=Właściciel +gui.space_race.join.title.name=Dołącz do kosmicznego wyścigu +gui.space_race.unnamed=Nienazwana drużyna +gui.spacestation.added=Zostałeś dodany do zaakceptowanych graczy Stacji Kosmicznej %s! +gui.spacestation.addsuccess=Dodano gracza %s do listy twojej Stacji Kosmicznej! +gui.spacestation.allow_all_false=Twoje Stacje Kosmiczne nie są już dostępne publicznie! +gui.spacestation.allow_all_true=Twoje Stacje Kosmiczne są już dostępne publicznie! (Użyj /ssinvite -all aby to cofnąć.) +gui.spacestation.changesuccess=Przekazano Stację Kosmiczną gracza %s graczowi %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Z powodzeniem usunięto gracza %s z twojej Stacji Kosmicznej +gui.spacestation.to_allow_entry=by pozwolić innemu graczowi wejść na twoją stację kosmiczną! +gui.spacestation.type_command=Wpisz +gui.status.active.name=Aktywny +gui.status.air_lock_closed.name=Śluza zamknięta +gui.status.air_lock_open.name=Śluza otwarta +gui.status.blockedfully.name=Słońce niewidoczne +gui.status.blockedpartial.name=Słońce częściowo widoczne +gui.status.check_pending.name=Oczekiwanie na sprawdzenie +gui.status.check_starting.name=Rozpoczynanie sprawdzania +gui.status.checking_seal.name=Sprawdzanie uszczelnienia +gui.status.collecting.name=Zbieranie +gui.status.collectingenergy.name=Zbieranie energii +gui.status.compressing.name=Kompresowanie +gui.status.disabled.name=Nieaktywny +gui.status.fulltank.name=Zbiornik tlenu pełny +gui.status.generating.name=Generowanie +gui.status.hull_heat.name=Nagrzanie +gui.status.idle.name=Bezczynny +gui.status.missingleaves.name=Za mało bloków liści +gui.status.missingoxygen.name=Za mało tlenu +gui.status.missingpower.name=Za mało energii +gui.status.missingpower.short.name=Brak energii +gui.status.missingtank.name=Brak odpowiedniego zbiornika tlenu +gui.status.nofuel.name=Brak paliwa do załadowania! +gui.status.noinvtarget.name=Cel ma pusty ekwipunek! +gui.status.noitems.name=Brak przedmiotów do załadowania! +gui.status.nooil.name=Brak ropy +gui.status.not_available.name=N/A +gui.status.not_generating.name=Nie generuje +gui.status.notargetload.name=Brak celu do załadowania! +gui.status.notargetunload.name=Brak celu do wyładowania! +gui.status.off.name=WYŁ. +gui.status.on.name=WŁ. +gui.status.raining.name=Pada +gui.status.ready.name=Gotowy +gui.status.refining.name=Rafinuje +gui.status.running.name=Pracuje +gui.status.sealed.name=Uszczelniony +gui.status.sealerblocked.name=Wentylator wyjściowy zablokowany +gui.status.sun_visible.name=Słońce widoczne +gui.status.tank_empty.name=Zbiornik tlenu pusty +gui.status.targetempty.name=Pojazd celowy ma pusty ekwipunek! +gui.status.targetfull.name=Pojazd celowy ma pełny ekwipunek! +gui.status.unknown.name=Nieznany +gui.status.unsealed.name=Za duży obszar / Nieuszczelniony +gui.tank.oxygen_remaining=Pozostały tlen +gui.telemetry_fail.message=Najpierw muszę wyśledzić istote z modułem częstotliwości! (Lub spróbować go założyć!) +gui.telemetry_fail_no_frequency_module.message=Najpewniej muszę trzymać moduł częstotliwości w dłoni by zrobić z tego użytek! +gui.telemetry_fail_wearing_it.message=Muszę zdjąć moduł częstotliwości jeżeli mam połączyć go z tym urządzeniem telemetrycznym! +gui.telemetry_succeed.message=Stworzono połączenie telemetryczne. +gui.thermal_slot.desc.0=Slot dodatku termalnego, umieść 'regulator +gui.thermal_slot.desc.1=termiczny otoczenia' tutaj. (opcjonalne) +gui.thermal_slot.desc.2=Uwaga: Zużywa więcej energii! +gui.title.air_lock.name=Śluza powietrzna gracza %s +gui.tracking.message=Śledzenie aktywne. Teraz muszę kliknąć prawym przyciskiem myszy na urządzeniu telemetrycznym żeby zakończyć połączenie. +gui.village.warning.no_freq_mod=Będe musiał założyć moduł częstotliwości aby się z nimi komunikować! +gui.warning.invalid_thermal=Niewłaściwa ochrona termalna! +gui.warning.noroom=Za mało miejsca! +gui.warning=OSTRZEŻENIE! +item.air_fan.name=Wentylator +item.air_vent.name=Odpowietrznik +item.basic_item.ambient_thermal_controller.name=Regulator termiczny otoczenia +item.basic_item.canned_food.name=Puszka jedzenia +item.basic_item.compressed_aluminum.name=Skompresowane aluminium +item.basic_item.compressed_bronze.name=Skompresowany brąz +item.basic_item.compressed_copper.name=Skompresowana miedź +item.basic_item.compressed_iron.name=Skompresowane żelazo +item.basic_item.compressed_steel.name=Skompresowana stal +item.basic_item.compressed_tin.name=Skompresowana cyna +item.basic_item.dehydrated_apple.name=Odwodnione jabłka +item.basic_item.dehydrated_carrot.name=Odwodnione marchewki +item.basic_item.dehydrated_melon.name=Odwodnione arbuzy +item.basic_item.dehydrated_potato.name=Odwodnione ziemniaki +item.basic_item.frequency_module.name=Moduł częstotliwości +item.basic_item.ingot_aluminum.name=Sztabka aluminium +item.basic_item.ingot_bronze.name=Sztabka brązu +item.basic_item.ingot_copper.name=Sztabka miedzi +item.basic_item.ingot_steel.name=Sztabka stali +item.basic_item.ingot_tin.name=Sztabka cyny +item.basic_item.raw_silicon.name=Surowy sylikon +item.basic_item.solar_module_0.name=Pojedynczy panel słoneczny +item.basic_item.solar_module_1.name=Pełny panel słoneczny +item.basic_item.wafer_advanced.name=Zaawansowana płyta +item.basic_item.wafer_basic.name=Podstawowa płyta +item.basic_item.wafer_solar.name=Niebieska słoneczna płyta +item.battery.name=Bateria +item.bucket_fuel.name=Wiadro paliwa +item.bucket_oil.name=Wiadro ropy +item.buggy.name=Buggy +item.buggymat.seat.name=Fotel Buggy +item.buggymat.storage.name=Skrzynka Buggy +item.buggymat.wheel.name=Koło Buggy +item.canister.copper.name=Miedziany kanister +item.canister.tin.name=Cynowy kanister +item.canvas.name=Płótno +item.cheese_block.name=Blok sera +item.cheese_curd.name=Pajdka sera +item.compressed_meteoric_iron.name=Skompresowane meteorytowe żelazo +item.dungeonfinder.name=Lokator Lochów +item.empty_liquid_canister.name=Pusty kanister +item.emergency_kit.description=Kliknij prawy przycisk myszy by zekwipować przewody tlenowe i inne niezbędne przedmioty. Ostrzeżenie: Można użyć tylko raz! +item.emergency_kit.name=Kosmiczny zestaw awaryjny +item.engine.tier1booster.name=Dopalacz poziomu 1 +item.engine.tier1engine.name=Silnik rakietowy poziomu 1 +item.flag.name=Flaga +item.food.cheese_slice.name=Plaster sera +item.food.burger_bun.name=Bułka burgerowa +item.food.beef_patty_raw.name=Mielona wołowina (Surowa) +item.food.beef_patty_cooked.name=Wołowinowy hamburger (Pieczony) +item.food.cheeseburger.desc=Astronauci kochają cheeseburgery! Bardzo pożywne jedzenie. +item.food.cheeseburger.name=Cheeseburger +item.food.canned_beef.name=Wołowina w puszce +item.fuel.name=Paliwo rakietowe +item.fuel_canister.name=Wypełniony kanister paliwa +item.fuel_canister_partial.name=Częściowo wypełniony kanister paliwa +item.heavy_plating.name=Wzmocniona płyta pancerzowa +item.hot_description.name=Gorący +item.ic2compat.ore_crushed_alu.name=Crushed Aluminum Ore +item.ic2compat.ore_purified_alu.name=Purified Crushed Aluminum Ore +item.ic2compat.dust_alu.name=Aluminum Dust +item.ic2compat.dust_small_titanium.name=Tiny Pile of Titanium Dust +item.infinite_battery.name=Nieskończona bateria +item.infinite_oxygen.name=Nieskończony zasobnik tlenu +item.key.t1.name=Klucz Lochu poziomu 1 +item.lunar_sapphire.description=Księżycowe szafiry są jednostką waluty podczas handlu z kosmitami osadnikami +item.lunar_sapphire.name=Księżycowy szafir +item.meteor_chunk.name=Miotany kawałek meteoru +item.meteor_chunk_hot.name=Miotany kawałek meteoru +item.meteoric_iron_ingot.name=Sztabka meteorytowego żelaza +item.meteoric_iron_raw.name=Surowe meteorytowe żelazo +item.nose_cone.name=Głowica statku +item.oil_canister.name=Wypełniony kanister ropy +item.oil_canister_partial.name=Częściowo wypełniony kanister ropy +item.oil_extractor.name=Przenośny ekstraktor ropy +item.oxygen_concentrator.name=Sprężarka tlenowa +item.oxygen_gear.name=Przewody tlenowe +item.oxygen_mask.name=Hełm astronauty +item.oxygen_tank_heavy_empty.name=Pusty duży zbiornik tlenowy +item.oxygen_tank_heavy_full.name=Duży zbiornik tlenowy +item.oxygen_tank_light_empty.name=Pusty mały zbiornik tlenowy +item.oxygen_tank_light_full.name=Mały zbiornik tlenowy +item.oxygen_tank_med_empty.name=Pusty średni zbiornik tlenowy +item.oxygen_tank_med_full.name=Średni zbiornik tlenowy +item.parachute_black.name=Czarny spadochron +item.parachute_blue.name=Jasnoniebieski spadochron +item.parachute_brown.name=Brązowy spadochron +item.parachute_darkblue.name=Niebieski spadochron +item.parachute_darkgray.name=Szary spadochron +item.parachute_darkgreen.name=Zielony spadochron +item.parachute_gray.name=Jasnoszary spadochron +item.parachute_lime.name=Limonkowy spadochron +item.parachute_magenta.name=Karmazynowy spadochron +item.parachute_orange.name=Pomarańczowy spadochron +item.parachute_pink.name=Różowy spadochron +item.parachute_plain.name=Spadochron +item.parachute_purple.name=Fioletowy spadochron +item.parachute_red.name=Czerwony spadochron +item.parachute_teal.name=Błękitny spadochron +item.parachute_yellow.name=Żółty spadochron +item.rocket_fins.name=Stateczniki rakiety +item.rocket_t1.name=Rakieta poziomu 1 +item.schematic.name=Schemat stołu warsztatowego NASA +item.sensor_glasses.name=Okulary sensoryczne +item.sensor_lens.name=Soczewki sensoryczne +item.standard_wrench.name=Standardowy klucz +item.steel_axe.name=Siekiera wzmocnionej płyty +item.steel_boots.name=Buty wzmocnionej płyty +item.steel_chestplate.name=Napierśnik wzmocnionej płyty +item.steel_helmet.name=Hełm wzmocnionej płyty +item.steel_hoe.name=Motyka wzmocnionej płyty +item.steel_leggings.name=Nogawice wzmocnionej płyty +item.steel_pickaxe.name=Kilof wzmocnionej płyty +item.steel_pole.name=Stalowy słup +item.steel_shovel.name=Łopata wzmocnionej płyty +item.steel_sword.name=Miecz wzmocnionej płyty +item.tier1.desc=Poziom 1 +item_desc.powerdraw.name=Wymagana moc: %s /s +item_desc.shift.name=Wciśnij %s by dowiedzieć się więcej +item_group.galacticraft_blocks=Galacticraft (Bloki) +item_group.galacticraft_items=Galacticraft (Przedmioty) +jei.arc_lamp.info=Bardzo jasna lampa w stronę w którą kieruje. Postaw gdzieś wysoko na najlepszy efekt! Obróć używając standardowego klucza. +jei.electric_compressor.info=Elektryczna wersja kompresora sztabek, podwójnie szybki! Nawet szybszy z energią poziomu 2. Lej potrafi wypełnić lub opróżnić tą maszynę. +jei.electric_compressor.appeng.info=Dla automacji z AE2, ustaw swoje receptury ze sztabkami z 2 różnych modów. Zobacz https:goo.gl/BwY15G po więcej informacji. +jei.fluid_pipe.info=Rura na transportacje jakiejkolwiek cieczy lub gazu. Aby wypompować ciecz ze zbiornika, kliknij standardowym kluczem by zmienić w 'tryb wsysania'. \nRura w trybie wsysania nie może wypełniać zbiornika lub maszyny - więc zrób tak aby twoja rura działała na minimum 2 bloki wzdłuż! +jei.fuel_loader.info=Postaw obok platformy startowej. Tankuje każdą rakietę postawioną na platformie. Niezbędny do jakiejkolwiek podróży w kosmos - w tym twojej podróży powrotnej do domu! +jei.magnetic_crafting.info=Stół rzemieślniczy który trzyma swoje przedmioty. Umie akceptować przedmioty z leju do auto-konstrukcji ostatniej pomyślnie skonstruowanej receptury. +jei.oxygen_collector.info=Zbiera mieszankę oddychalnego tlenu ze Świata lub - z przestrzeni kosmicznej - z pobliskich zielonych liści lub rosnących roślin uprawnych. \nSkanalizuj tlen do kompresora tlenu na zbiorniki z tlenem, lub dystrybutora bańki tlenu lub uszczelniacza tlenu. +jei.oxygen_distributor.info=Tworzy środowisko bańkowe w kosmosie gdzie gracze (i inne kreatury) mogą oddychać. Zaopatrz go w mieszankę oddychalnego tlenu ze zbieracza tlenu lub modułu magazynu tlenu. +jei.oxygen_sealer.info=Wypełnia 1 pokój w twojej bazie kosmicznej oddychalną atmosferą. Zaopatrz go w mieszankę oddychalnego tlenu ze zbieracza tlenu lub modułu magazynu tlenu. Wszystkie ściany pokoju muszą być solidne. \nZnajdź przecieki używając okularów sensorycznych! \nMaksymalna wielkość pokoju dla 1 uszczelniacza tlenu to 10x10x8 bloków. Użyj pare uszczelniaczy tlenu na większe pokoje! +jei.wrench.info=Większość maszyn Galacticraft może zostać obrócona poprzez kliknięcie prawym przyciskiem myszy standardowym kluczem. \nWiększość maszyn elektrycznych może zmienić swoje strony wejścia i wyjścia energi i innych rzeczy robiąc to samo i klikając Shift. +keybind.map.name=Mapa galaktyki +keybind.sensortoggle.name=Zmień tryb okularów sensorycznych +keybind.spaceshipinv.name=Otwórz ekwipunek statku kosmicznego +keybind.vehiclebackward.name=Do tyłu (Pojazd) +keybind.vehicledown.name=W dół (Pojazd) +keybind.vehicleforward.name=Do przodu (Pojazd) +keybind.vehicleleft.name=W lewo (Pojazd) +keybind.vehicleright.name=W prawo (Pojazd) +keybind.vehicleup.name=W górę (Pojazd) +moon.moon=Księżyc +newversion.failed.name=Sprawdzenie aktualizacji Galacticraft nieudane! Spróbuj ponownie za 15 sekund. +newversion.success.name=Znaleziono zdalną wersję Galacticraft: +planet.jupiter=Jowisz +planet.mercury=Merkury +planet.neptune=Neptun +planet.overworld=Świat +planet.saturn=Saturn +planet.uranus=Uran +planet.venus=Wenus +satellite.spacestation.overworld=Stacja Kosmiczna na Świecie +schematic.moonbuggy.name=Księżycowe Buggy +schematic.rocket_t1.name=Rakieta poziomu 1 +schematic.rocket_t2.name=Rakieta poziomu 2 +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Kontroler śluzy powietrznej +tile.air_lock_frame.description=Śluzy powietrzne, będąc ułożone w portalopodobny sposób, z jednym blokiem zastąpionym kontrolerem, będą funkcjonować jako działająca śluza powietrzna. +tile.air_lock_frame.name=Śluza powietrzna +tile.air_lock_seal.name=Śluza powietrzna (Zamknięta) +tile.aluminum_wire.alu_wire.description=Kabel aluminiowy jest wykorzystywany do podłączania źródeł energii do urządzeń działających na prąd. +tile.aluminum_wire.alu_wire.name=Kabel aluminiowy +tile.aluminum_wire.alu_wire_heavy.description=Gruby kabel aluminiowy jest wykorzystywany do podłączania źródeł energii do urządzeń działających na prąd. Jego wyższa pojemność zwiększa wydajność dla maszyn poziomu 2. +tile.aluminum_wire.alu_wire_heavy.name=Gruby kabel aluminiowy +tile.aluminum_wire.alu_wire_switch.description=Przełączalny kabel aluminiowy podłącza się jak kabel aluminiowy, chyba że jest przełączony sygnałem czerwonego kamienia. +tile.aluminum_wire.alu_wire_switch.name=Przełączalny kabel aluminiowy +tile.aluminum_wire.alu_wire_switch_heavy.description=Przełączalny gruby kabel aluminiowy podłącza się jak gruby kabel aluminiowy, chyba że jest przełączony sygnałem czerwonego kamienia. +tile.aluminum_wire.alu_wire_switch_heavy.name=Przełączalny gruby kabel aluminiowy +tile.arclamp.description=Lampy łukowe zapewniają silne światło na duży obszar, odstrasza też większość potworów. +tile.arclamp.name=Lampa łukowa +tile.basic_block_core.block_aluminum_gc.name=Blok aluminium +tile.basic_block_core.block_copper_gc.name=Blok miedzi +tile.basic_block_core.block_meteoric_iron_gc.name=Solidne meteorytowe żelazo +tile.basic_block_core.block_tin_gc.name=Cynowy blok +tile.basic_block_core.block_silicon_gc.name=Blok silikonu +tile.basic_block_core.deco_block_0.name=Blok dekoracyjny cyny +tile.basic_block_core.deco_block_1.name=Blok ścianowy cyny +tile.basic_block_core.ore_aluminum_gc.name=Ruda aluminium +tile.basic_block_core.ore_copper_gc.name=Ruda miedzi +tile.basic_block_core.ore_silicon.name=Ruda sylikonu +tile.basic_block_core.ore_tin_gc.name=Ruda cyny +tile.basic_block_moon.bricks.name=Cegły księżycowego Lochu +tile.basic_block_moon.cheesestone.name=Ruda sera +tile.basic_block_moon.coppermoon.name=Ruda miedzi +tile.basic_block_moon.moondirt.name=Księżycowa ziemia +tile.basic_block_moon.moongrass.name=Księżycowa gleba +tile.basic_block_moon.moonstone.name=Księżycowy kamień +tile.basic_block_moon.sapphiremoon.name=Ruda szafiru +tile.basic_block_moon.tinmoon.name=Ruda cyny +tile.buggy_pad.description=Platformy tankujące Buggy pozwalają na zatankowanie stojącego na nich buggy za pomocą podczepionych ładowników paliwa gdy są postawione w kształcie kwadratu o wymiarach 3x3. Nie można ich używać do startu rakiet! +tile.cargo.loader.name=Ładownik +tile.cargo.unloader.name=Wyładownik +tile.cargo_loader.description=Ładowniki przenoszą bloki i przedmioty do rakiet i innych pojazdów z magazynem. Musi być połączony z platformą startową/tankującą. +tile.cargo_unloader.description=Wyładowniki pobierają bloki i przedmioty z rakiet i innych pojazdów z magazynem. Musi być połączony z platformą startową/tankującą. +tile.cheese.description=Bloki serowe są tworzone z księżycowego sera, postawialne i jadalne. +tile.cheese.name=Blok sera +tile.circuit_fabricator.description=Fabrykator obwodowy przerabia podstawowe materiały w sylikonowe płyty, używane w zaawansowanych urządzeniach. +tile.coal_generator.description=Generator węglowy spala węgiel (lub bloki węgla) do produkcji energii. Jest to najprostsza ale jednocześnie najmniej efektywna metoda produkcji energii. +tile.collector.description=Zbieracz tlenu pobiera tlen z bloków liści w jego otoczeniu. +tile.collector.name=Zbieracz tlenu +tile.compressor.description=Kompresor przetwarza sztabki w ich skompresowane odpowiedniki. Najważniejsza maszyna w Galacticraft! +tile.compressor_electric.description=Kompresor elektryczny przetwarza sztabki w ich skompresowane odpowiedniki. Kompresuje dwa na raz sprawiając że jest bardziej efektywny od swojego poprzednika. +tile.compressor_advanced.description=Szybsza wersja kompresora elektrycznego. Prędko przetwarza sztabki w ich skompresowane odpowiedniki. +tile.concealed_detector.name=Wykrywacz graczy +tile.concealed_redstone.name=Ukryty kabel czerwonego kamienia +tile.concealed_repeater.name=Ukryty przekaźnik +tile.crude_oil.name=Ropa +tile.crude_oil_moving.name=Ropa naftowa +tile.crude_oil_still.name=Ropa naftowa +tile.deconstructor.description=Dekonstruktor rozbierze na części twoje stare rakiety i inne przedmioty, zwracając jakiekolwiek materiały z odzysku. +tile.dishbase.description=Satelita komunikacyjny śledzi pozycję stacji kosmicznych i odbiera komunikaty z twoich zdalnych baz kosmicznych. +tile.dishbase.name=Satelita komunikacyjny +tile.distributor.description=Dystrybutor tlenu wytwarza bańkę tlenową emitowaną ze środka bloku, używając swojego zbiornika z tlenem. To pozwala na bezpieczne oddychanie w bańce. +tile.distributor.name=Dystrybutor bańki tlenu +tile.dummyblock.cryogenic_chamber.name=Komora kriogeniczna +tile.dummyblock.launch_pad.name=Platforma startowa +tile.dummyblock.nasa_workbench.name=Stół warsztatowy NASA +tile.dummyblock.solar.name=Panel słoneczny +tile.dummyblock.space_station_base.name=Baza stacji kosmicznej +tile.electric_furnace_tier1.description=Piec elektryczny jest wykorzystywany jako szybsza alternatywa do tradycyjnych pieców węglowych. +tile.electric_furnace_tier2.description=Piec łukowy jest wykorzystywany jako szybsza alternatywa do pieców węglowych i elektrycznych: podwójna produkcja z rud! +tile.emergency_box.description=Postaw stacyjkę awaryjną blisko twojego pierwszego miejsca lądowania na planecie. Otwórz by znaleść w środku zestaw awaryjny. Odstrasza również potwory! +tile.emergency_box.filled.name=Stacyjka awaryjna (z zestawem) +tile.emergency_box.name=Stacyjka awaryjna +tile.enclosed.aluminum_wire.name=Uszczelniony kabel aluminiowy +tile.enclosed.copper_cable.name=Uszczelniony miedziowy kabel +tile.enclosed.description=Bloki uszczelniające powinne być wykorzystywane w miejscach gdzie powietrze nie może przejść, np. w ścianach bazy kosmicznej. +tile.enclosed.fluid_pipe.name=Uszczelniona rura na ciecze +tile.enclosed.glass_fibre_cable.name=Uszczelniony kabel Z włókna szklanego +tile.enclosed.gold_cable.name=Uszczelniony złoty kabel +tile.enclosed.heavy_aluminum_wire.name=Uszczelniony gruby kabel aluminiowy +tile.enclosed.hv_cable.name=Uszczelniony kabel HV +tile.enclosed.lv_cable.name=Uszczelniony super-niskoprądowy kabel +tile.enclosed.me_cable.name=Uszczelniony kabel ME +tile.enclosed.pipe_fluids_cobblestone.name=Uszczelniona brukowa wodoszczelna rura +tile.enclosed.pipe_fluids_stone.name=Uszczelniona kamienna wodoszczelna rura +tile.enclosed.pipe_items_cobblestone.name=Uszczelniona brukowa rura transportowa +tile.enclosed.pipe_items_stone.name=Uszczelniona kamienna rura transportowa +tile.enclosed.pipe_power_gold.name=Uszczelniona złota rura przewodząca +tile.enclosed.pipe_power_stone.name=Uszczelniona kamienna rura przewodząca +tile.energy_storage_module_tier1.description=Moduł akumulatora jest wykorzystywany do przechowywania dużych ilości energii na późniejszy użytek. +tile.energy_storage_module_tier2.description=Akumulator klastrowy wykorzystywany jest do przechowywania dużych ilości energii na późniejszy użytek. Przechowuje i przesyła więcej energii od swojego poprzednika. +tile.fallen_meteor.description=Upadłe meteory można znaleźć na wielu planetach/księżycach które mają rzadką atmosfere lub jej brak. Upuszczają meteorytowe żelazo po wydobyciu. +tile.fallen_meteor.name=Upadły meteor +tile.fluid_pipe.description=Rura na ciecze będzie transportowała ciecz lub gaz ze źródła do bloku destynacji. Użyj standardowego klucza aby zmieniać tryby. +tile.fluid_pipe.name=Rura na ciecze +tile.fluid_pipe_pull.description=Rura na ciecze będzie transportowała ciecz lub gaz ze źródła do bloku destynacji. Użyj standardowego klucza aby zmieniać tryby. +tile.fluid_pipe_pull.name=Rura na ciecze +tile.fluid_tank.description=Zbiorniki na ciecze będą magazynowały ciecze i gazy na późniejszy użytek. +tile.fluid_tank.name=Zbiornik na ciecze +tile.fuel.name=Paliwo +tile.fuel_block.name=Paliwo +tile.fuel_loader.description=Będąc połączonym z platformą startową, ładownik paliwa pozwoli na zatankowanie połączonej rakiety lub innego pojazdu. +tile.fuel_loader.name=Ładownik Paliwa +tile.glowstone_torch.description=Pochodnie jasnogłazowe są najlepiej wykorzystywane by oświetlić obszary gdzie drewniane pochodnie nie mogą płonąć z braku tlenu. +tile.glowstone_torch.name=Pochodnia jasnogłazowa +tile.grating.name=Ruszt +tile.landing_pad.buggy_fueler.name=Platforma tankująca Buggy +tile.landing_pad.cargo_pad.name=Platforma ładunkowa +tile.landing_pad.description=Platformy startowe pozwalają na postawienie rakiety gdy są postawione w kształcie kwadratu o wymiarach 3x3. Mogą być do nich podłączone ładowniki paliwa, ładowniki, i kontrolery startu. +tile.landing_pad.landing_pad.name=Platforma startowa +tile.landing_pad_full.name=Platforma startowa +tile.machine.0.name=Generator węglowy +tile.machine.1.name=Moduł akumulatora +tile.machine.2.name=Piec elektryczny +tile.machine.3.name=Kompresor +tile.machine.7.name=Piec łukowy +tile.machine.8.name=Akumulator klastrowy +tile.machine2.4.name=Kompresor elektryczny +tile.machine2.5.name=Fabrykator obwodowy +tile.machine2.6.name=Moduł magazynu tlenu +tile.machine2.10.name=Dekonstruktor +tile.machine3.9.name=Aplikator chromatyczny +tile.machine4.11.name=Zaawansowany kompresor +tile.magnetic_table.name=Magnetyczny stół rzemieślniczy +tile.magnetic_table.description=Umieszczone przedmioty nie wypadną - trzyma swój ekwipunek! Można shift-kliknąć przedmioty do środka. Leje potrafią umieszczać i usuwać przedmioty, stół będzie próbować automatycznie tworzyć ostatnią skonstruowaną recepturę. +tile.moon_stairs_brick.name=Schody księżycowego Lochu +tile.moon_stairs_stone.name=Skaliste księżycowe schody +tile.ore_copper.name=Ruda miedzi +tile.ore_tin.name=Ruda cyny +tile.oxygen_compressor.0.name=Kompresor tlenu +tile.oxygen_compressor.1.name=Dekompresor tlenu +tile.oxygen_compressor.description=Kompresor tlenu wypełnia zbiorniki na tlen wykorzystując tlen ze swojego zbiornika. +tile.oxygen_decompressor.description=Dekompresor tlenu pobiera tlen ze zbiorników do swojego zbiornika. +tile.oxygen_detector.description=Detektor tlenu emituje sygnał czerwonego kamienia gdy jest otoczony przez tlen. +tile.oxygen_detector.name=Detektor tlenu +tile.oxygen_storage_module.description=Moduł magazynu tlenu jest wykorzystywany do przechowywania dużych ilości tlenu na późniejszy użytek. +tile.painter.description=Zastosowywuje kolor do szkła próżniowego, paneli świetlnych i innych objektów zdatnych do malowania. Użyj jakiegokolwiek bloku - lub barwnika - by nadać świeży kolor! +tile.panel_lighting.description=Panel świetlny do użytku w kosmosie! Klucz nim obraca. By zmienić wygląd: trzymaj przycisk skradania podczas stawiania panela naprzeciw wybranego bloku. +tile.panel_lighting_0.name=Panel świetlny (Kwadrat) +tile.panel_lighting_1.name=Panel świetlny (Reflektor) +tile.panel_lighting_2.name=Panel świetlny (Liniowy) +tile.panel_lighting_3.name=Panel świetlny (Ciemny) +tile.panel_lighting_4.name=Panel świetlny (Ciemny) +tile.parachest.description=Paraskrzynie spadają z nieba zaraz po lądowaniu na pewnych planetach/księżycach, jak np. Ziemia. Zawiera rakietę, paliwo i magazyn z poprzedniego startu. +tile.parachest.name=Paraskrzynia +tile.platform.description=Postaw 4 by uformować platformę. Platforma podnosi graczy do następnej platformy na górze lub dole. Przycisk skradania = dół : Skok = góra. +tile.platform.name=Platforma hydrauliczna +tile.refinery.description=Rafineria pobiera ropę, i z wykorzystaniem energii przerabia ją na paliwo wykorzystywane przez rakiety i pojazdy. +tile.refinery.name=Rafineria +tile.rocket_workbench.name=Stół warsztatowy NASA +tile.rocket_workbench.description=Stół warsztatowy NASA jest używany do tworzenia zaawansowanych części i pojazdów. Można dodać nowe schematy gdy zostaną odnalezione. +tile.sapling2.birch.name=Sadzonka (brzoza) +tile.sapling2.jungle.name=Sadzonka (dżungla) +tile.sapling2.oak.name=Sadzonka +tile.sapling2.spruce.name=Sadzonka (świerk) +tile.sealer.description=Uszczelniacz tlenu sprawdza czy jest w uszczelnionym pomieszczeniu. Jeżeli jest, wypełnia pomieszczenie oddychalnym tlenem. +tile.sealer.name=Uszczelniacz tlenu +tile.slab_gc_half.moon_bricks_slab.name=Ceglana płyta księżycowego Lochu +tile.slab_gc_half.moon_slab.name=Skalista księżycowa płyta +tile.slab_gc_half.tin_slab_1.name=Cynowa dekoracyjna płyta +tile.slab_gc_half.tin_slab_2.name=Cynowa dekoracyjna płyta +tile.solar.advanced_solar.name=Zaawansowany panel słoneczny +tile.solar.basic_solar.name=Standardowy panel słoneczny +tile.solar_adv.description=Zaawansowany panel słoneczny pobiera energię ze słońca, przechowując ją do dalszego użytku. Automatycznie reguluje kąt panelu dla optymalnego poboru energii. +tile.solar_basic.description=Standardowy panel słoneczny pobiera energię ze słońca, przechowując ją do dalszego użytku. Pobiera najwięcej energii w środku dnia (nie można regulować). +tile.space_glass.description=Uszczelnione szkło próżniowe do twoich baz kosmicznych. Pomaluj obramowanie w jakikolwiek kolor używając pobliskiego aplikatora chromatycznego! +tile.space_glass.clear.description=Przejrzyste szkło do wspaniałych widoków kosmosu, potrafi także dać czysty widok pod wodą. +tile.space_glass.strong.description=Mocne i eksplozjo-odporne szkło. Zrobione z przejrzystego aluminum... +tile.space_glass_clear.name=Szkło próżniowe (Przejrzyste) +tile.space_glass_vanilla.name=Szkło próżniowe +tile.space_glass_strong.name=Szkło próżniowe (Mocne) +tile.space_station_base.name=Główny blok stacji kosmicznej +tile.spin_thruster.description=Wirujące dopalacze pozwalają twojej stacji kosmicznej na wykonywanie obrotów. +tile.spin_thruster.name=Wirujący dopalacz +tile.telemetry.description=Zbiera użyteczne dane z połączonych rakiet, graczy i mobów. Najlepiej postawić go obok ekranu. Użyj modułu częstotliwości by ustabilizować połączenia danych. +tile.telemetry.name=Urządzenie telemetryczne +tile.tin_stairs_1.name=Cynowe dekoracyjne schody +tile.tin_stairs_2.name=Cynowe dekoracyjne schody +tile.treasure_chest.description=Skrzynie skarbów poziomu 1 są generowane w księżycowych Lochach. Można je otworzyć po pokonaniu finałowego Bossa. +tile.treasure_chest.name=Skrzynia skarbów +tile.unlit_torch.name=Pochodnia +tile.unlit_torch_stone.name=Kamienna pochodnia +tile.unlit_torch_lit.name=Pochodnia +tile.unlit_torch_stone_lit.name=Kamienna pochodnia +tile.view_screen.description=Ekrany dają ostateczny dodatek do twojej bazy kosmicznej. Kliknięcie prawym przyciskiem myszy zmienia pokazywaną informacje. +tile.view_screen.name=Ekran +tile.wall_gc.moon.name=Skalisty księżycowy murek +tile.wall_gc.moon_bricks.name=Murek z księżycowego Lochu +tile.wall_gc.tin.name=Cynowy dekoracyjny murek + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=Na Księżyc... i jeszcze dalej! +advancement.galacticraft.coal_generator.title=Węglowa moc +advancement.galacticraft.coal_generator.description=Skonstruuj generator węglowy +advancement.galacticraft.circuit_fabricator.title=Sfabrykowany +advancement.galacticraft.circuit_fabricator.description=Skonstruuj fabrykator obwodowy aby robić płyty +advancement.galacticraft.basic_wafer.title=Smaczne płyty +advancement.galacticraft.basic_wafer.description=Skonstruuj podstawową płytę. (Wiem że wygląda jak gofer, ale to silikon!) +advancement.galacticraft.advanced_wafer.title=Złote płyty +advancement.galacticraft.advanced_wafer.description=Skonstruuj zaawansowaną płytę. (Ona nadal jest niejadalna!) +advancement.galacticraft.compressor.title=Skompresowany +advancement.galacticraft.compressor.description=Skonstruuj kompresor +advancement.galacticraft.solar.title=Darmowa energia +advancement.galacticraft.solar.description=Skonstruuj standardowy panel słoneczny +advancement.galacticraft.advanced_solar.title=Szybki + efektywny +advancement.galacticraft.advanced_solar.description=Skonstruuj zaawansowany panel słoneczny +advancement.galacticraft.electric_compressor.title=Ulepszenie elektryczne +advancement.galacticraft.electric_compressor.description=Skonstruuj kompresor elektryczny +advancement.galacticraft.oil.title=Śliska rzecz +advancement.galacticraft.oil.description=Wpadnij w ropę +advancement.galacticraft.refiery.title=Pora na rafinerie! +advancement.galacticraft.refiery.description=Skonstruuj rafinerie +advancement.galacticraft.rocket_fuel.title=Paliwo rakietowe +advancement.galacticraft.rocket_fuel.description=Refinuj ropę w rafineri +advancement.galacticraft.oxygen_collector.title=Tlen nie w zestawie +advancement.galacticraft.oxygen_collector.description=Skonstruuj zbieracz tlenu +advancement.galacticraft.oxygen_compressor.title=Skompresuj powietrze +advancement.galacticraft.oxygen_compressor.description=Skonstruuj kompresor tlenu +advancement.galacticraft.fill_tank.title=Tlen dla cb +advancement.galacticraft.fill_tank.description=Wypełnij do pełna zbiornik tlenowy +advancement.galacticraft.fill_all_tanks.title=Tlenowy zapas +advancement.galacticraft.fill_all_tanks.description=Wypełnij do pełna każdy typ zbiornika tlenowego +advancement.galacticraft.all_oxygen_gear.title=Wszystko gotowe +advancement.galacticraft.all_oxygen_gear.description=Stwórz wszystko czego potrzebujesz aby oddychać w kosmosie +advancement.galacticraft.rocket_workbench.title=Kosmiczny inżynier +advancement.galacticraft.rocket_workbench.description=Skonstruuj stół warsztatowy NASA +advancement.galacticraft.rocket_t1.title=Mamy rakietę! +advancement.galacticraft.rocket_t1.description=Zespawaj razem rakietę +advancement.galacticraft.fuel_loader.title=Wypełnij ją! +advancement.galacticraft.fuel_loader.description=Skonstruuj ładownik paliwa +advancement.galacticraft.launch_rocket.title=Mamy zapłon! +advancement.galacticraft.launch_rocket.description=Startuj swoją pierwszą rakietę +advancement.galacticraft.moon.title=Księżyc! +advancement.galacticraft.moon.description=Wyląduj na księżycu +advancement.galacticraft.create_space_station.title=Stacja Kosmiczna +advancement.galacticraft.create_space_station.description=Stwórz swoją własną stację kosmiczną! +advancement.galacticraft.spin_thruster.title=Jest mi niedoobrrze +advancement.galacticraft.spin_thruster.description=Skonstruuj wirujący dopalacz +advancement.galacticraft.moon_dungeon.title=Gorszy od withera +advancement.galacticraft.moon_dungeon.description=Znajdź wyewoluowanego bossa szkieleta w lochu +advancement.galacticraft.dungeon_key_moon.title=Ja mieć klucz +advancement.galacticraft.dungeon_key_moon.description=Zabij bossa chowającego się w lochu, i skradnij jego klucz +advancement.galacticraft.moon_buggy_schematic.title=Zglitchowany schemat +advancement.galacticraft.moon_buggy_schematic.description=Zdobądź schemat księżycowe §obuggy +advancement.galacticraft.moon_buggy.title=Buggy +advancement.galacticraft.moon_buggy.description=Zespawaj razem księżycowe buggy diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_br.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_br.lang new file mode 100644 index 00000000..a9898be1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_br.lang @@ -0,0 +1,676 @@ +checklist.create_grapple.key=Criar Gancho +checklist.equip_oxygen_suit.key=Equipar-se de Aparelho de Respiração +checklist.equip_parachute.key=Equipar-se de Paraquedas +command.gcastrominer.count=O número de astromineradores do jogador %s é %s +commands.dimensionteleport=%s foi enviado para a atmosfera%s +commands.dimensiontp.too_many=Argumentos de comando demais! Uso: %s +commands.gcenergyunits.invalid_units=Unidades inválidas no comando /GCEnergyUnits. Uso: %s +commands.gcenergyunits.no_units=As unidades precisam ser especificadas! Uso: %s +commands.joinrace.no_team=O time precisa ser especificado! Uso: %s +commands.ssinvite.not_found=Não se pôde encontrar estação espacial para o seu nome de usuário, você precisa viajar lá primeiro! +commands.ssinvite.wrong_usage=Argumentos de comando insuficientes! Uso: %s +commands.ssnewowner.wrong_usage=Não se pôde reconhecer o ID da Estação Espacial - Ela existe mesmo? Uso: %s +commands.ssuninvite.no_player=Não se pôde encontrar jogador com nome de usuário %s na lista da sua Estação Espacial! +container.cargoloader.name=Carregador de Carga +container.cargounloader.name=Descarregador de Carga +container.fuelloader.name=Carregador de Combustível +container.lander.name=Módulo Espacial +container.oxygencollector.name=Coletor de Oxigênio +container.oxygencompressor.name=Compressor de Oxigênio +container.oxygendecompressor.name=Descompressor de Oxigênio +container.oxygendistributor.name=Distribuidor de Oxigênio +container.oxygensealer.name=Selador de Oxigênio +container.parachest.name=Para-baú +container.refinery.name=Refinaria +container.solaradvanced.name=Painel Solar Avançado +container.solarbasic.name=Painel Solar Básico +container.spaceship.name=Foguete Nível 1 +container.treasurechest.name=Baú de Tesouro +death.attack.oxygen_suffocation=%1$s ficou sem oxigênio! +death.attack.spaceship_crash=O foguete de %1$s se esborrachou no chão. Ups. +death.attack.sulphuric_acid=%1$s se dissolveu em ácido sulfúrico! +death.attack.thermal=%1$s se esqueceu da proteção térmica. +dimension.moon.name=Lua +dimension.overworld.name=Mundo Principal +dimension.sun.name=Sol +entity.alien_villager.name=Aldeão Alienígena +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper Evoluído +entity.evolved_skeleton.name=Esqueleto Evoluído +entity.evolved_skeleton_boss.name=Esqueleto-Chefe Evoluído +entity.evolved_spider.name=Aranha Evoluída +entity.evolved_zombie.name=Zumbi Evoluído +entity.flag.name=Bandeira +entity.gcflag.name=Bandeira +entity.gravity_arrow.name=Flecha +entity.lander.name=Módulo Espacial +entity.meteor.name=Meteoro +entity.meteor_chunk.name=Pedaço de Meteoro +entity.oxygen_bubble.name=Bolha de Oxigênio +entity.para_chest.name=Para-baú +entity.rocket_t1.name=Foguete Nível 1 +galaxy.milky_way=Via Láctea +gc.configgui.alternate_canister_recipe=Receita Alternativa para Lata +gc.configgui.asteroids_start=Modo Desafio (Asteróides começam) +gc.configgui.biome_id_base=Base BiomeID para GC +gc.configgui.detectable_i_ds=IDs Detectáveis +gc.configgui.disable_cheese_moon=Desativar Geração de Queijo na Lua +gc.configgui.disable_copper_moon=Desativar Geração de Cobre na Lua +gc.configgui.disable_lander=Desativar Módulo Lunar na lua, ao invés disso usar paraquedas +gc.configgui.disable_moon_village_gen=Desativar Geração de Aldeia na Lua +gc.configgui.disable_space_station_creation=Desativar Geração de Estação Espacial +gc.configgui.disable_spaceship_grief=Desativar Explosões de Foguetes +gc.configgui.disable_spaceship_particles=Desativar Partículas de Foguetes +gc.configgui.disable_tin_moon=Desativar Geração de Estanho na Lua +gc.configgui.disable_update_check=Desativar Verificação de Atualizações +gc.configgui.dungeon_boss_health_mod=Modificador de Vida de Boss de Masmorra +gc.configgui.enable_aluminum_ore_gen=Geração de Alumínio no Mundo Principal +gc.configgui.enable_copper_ore_gen=Geração de Cobre no Mundo Principal +gc.configgui.enable_debug=Mostrar Mensagens de Debugging no Console +gc.configgui.enable_other_mods_features=Ativar Geração de Mundo com outros Mods +gc.configgui.enable_retrogen_oil=Óleo Retrogen do Mundo Principal +gc.configgui.enable_sealer_edge_checks=Verificações da Borda de Selante +gc.configgui.enable_silicon_ore_gen=Geração de Silício no Mundo Principal +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Geração de Estanho no Mundo Principal +gc.configgui.external_oil_gen=Geração de Óleo External +gc.configgui.force_overworld_respawn=Forçar Respawn no Mundo Principal +gc.configgui.hard_mode=Maior Dificuldade +gc.configgui.id_achiev_base=ID Base de Conquista +gc.configgui.id_dimension_moon=ID Dimensional da Lua +gc.configgui.id_dimension_overworld_orbit=ID Dimensional da Estação Espacial +gc.configgui.id_dimension_overworld_orbit_static=ID Dimensional Estática da Estação Espacial +gc.configgui.id_schematic_add_schematic=ID Esquemática "Adicional Esquema" +gc.configgui.id_schematic_moon_buggy=ID Esquemática Buggy de Lua +gc.configgui.id_schematic_rocket_t1=ID Esquemática Foguete Nível 1 +gc.configgui.key_override_fuel_level=Selecionar chave: GUI de Combustível de Foguete +gc.configgui.key_override_toggle_adv_goggles=Selecionar chave: Óculos de Proteção Avançados +gc.configgui.map_scroll_invert=Inverter Rolagem de Mapa +gc.configgui.map_scroll_sensitivity=Sensitividade de Rolagem de Mapa +gc.configgui.meteor_block_damage=Dano de Meteoro a Blocos Ativado +gc.configgui.meteor_spawn_mod=Modificador de Geração de Meteoros +gc.configgui.more_stars=Mostrar Mais Estrelas +gc.configgui.oil_gen_factor=Fator de Geração de Óleo +gc.configgui.ore_dict_silicon=Nome de Silício (OreDict) em outros mods +gc.configgui.other_mod_ore_gen_i_ds=Geração de Minérios de Outros Mods em Planetas +gc.configgui.override_capes=Override de Capas Doadores +gc.configgui.override_map=Selecionar chave: Mapa de Galáxia +gc.configgui.oxygen_indicator_bottom=Mover Indicador de Oxigênio p/ Baixo +gc.configgui.oxygen_indicator_left=Mover Indicador de Oxigênio p/ Esquerda +gc.configgui.quick_mode=Jogo Rápido (mais fácil) +gc.configgui.rocket_disable_overworld_return=Desativar Volta de Foguete do Overworld +gc.configgui.rocket_disabled_dimensions=Dimensões Desativadas de Foguete +gc.configgui.rocket_fuel_factor=Fator de Combustível de Foguete +gc.configgui.sealable_i_ds=Blocos Seláveis +gc.configgui.space_station_energy_scalar=Modificador da Energia da Estação Espacial +gc.configgui.space_stations_require_permission=Permissões da Estação Espacial +gc.configgui.static_loaded_dimensions=Dimensões Estáticas Carregadas +gc.configgui.suffocation_cooldown=Cooldown de Sufocação +gc.configgui.suffocation_damage=Dano de Asfixia +gc.configgui.title=Config. de Galacticraft Core +gc.configgui.whitelist_co_f_h_core_gen=Whitelist de Geração do Mundo CoFHCore +gui.battery_slot.desc.0=Lugar da bateria, coloque uma bateria aqui +gui.battery_slot.desc.1=ou conecte uma fonte de energia. +gui.bed_fail.message=Opa, e se o oxigênio acabar durante o sono? Vou precisar de uma câmara criogênica para dormir no espaço! +gui.buggy.accel.name=Acelerar +gui.buggy.decel.name=Desacelerar +gui.buggy.inv.name=Inventário/Combustível +gui.buggy.storage_space=Espaço de armazenagem +gui.buggy.turn.name=Mover para os lados +gui.button.back.name=Volta +gui.button.disable.name=Desabilitar +gui.button.disableseal.name=Desabilitar +gui.button.enable.name=Habilitar +gui.button.enableseal.name=Habilitar +gui.button.hide_dest.name=Ocultar +gui.button.loadfuel.name=Carregar +gui.button.loaditems.name=Carregar +gui.button.next.name=Avança +gui.button.refine.name=Refinar +gui.button.stoploading.name=Parar +gui.button.stoprefine.name=Parar +gui.button.stopunloading.name=Parar +gui.button.unhide_dest.name=Mostrar +gui.button.unloaditems.name=Descarregar +gui.button.unlockschematic.name=Destravar +gui.checkbox.horizontal.name=Modo horizontal +gui.checkbox.invert.name=Inverte seleção +gui.checkbox.player_name.name=Nome do jogador é +gui.checkbox.player_within.name=Jogador está a +gui.checkbox.redstone_signal.name=Abre ao sinal de redstone +gui.chest.warning.wrongkey=Acho que vou precisar da Chave de Calabouço Nível %s para destracar isso! +gui.choose_planet.desc.moon=Habitável#Sem Oxigênio#Gravidade: 18% +gui.choose_planet.desc.overworld=Pleno de Vida#Habitável#Gravidade: 100% +gui.chooseplanet.alreadycreated1.name=Uma Estação Espacial +gui.chooseplanet.alreadycreated2.name=já foi criada aqui! +gui.chooseplanet.cannotcreate1.name=Não se pode criar uma +gui.chooseplanet.cannotcreate2.name=Estação Espacial aqui! +gui.creative_only.desc=Criativo somente +gui.display.nolink=Sem link +gui.docking_rocket.current_vel.name=Velocidade atual +gui.docking_rocket.distance_from.name=Distância do alvo +gui.docking_rocket.target_vel.name=Velocidade-alvo +gui.docking_rocket.warning.name.0=Pressione %s para desacelerar +gui.docking_rocket.warning.name.1=Pressione %s para acelerar +gui.dropbox.player_distance.name.0=1 metro +gui.dropbox.player_distance.name.1=2 metros +gui.dropbox.player_distance.name.2=5 metros +gui.dropbox.player_distance.name.3=10 metros +gui.electric_compressor.desc.0=Progresso +gui.energy_storage.desc.0=Armazenagem de Energia +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Já há uma bandeira aqui! +gui.frequency_module.desc.0=Capaz de receber ondas sonoras +gui.frequency_module.desc.1=fracas e sinais distantes +gui.frequencymodule.warning0=Acho que vou precisar do +gui.frequencymodule.warning1=se eu quiser ouvir direito aqui. +gui.fuel_output.desc.0=Coloque latas vazias para líquidos neste +gui.fuel_output.desc.1=lugar para que o tanque de combustível +gui.fuel_output.desc.2=possa enchê-las. +gui.fuel_tank.desc.0=Tanque de combustível. Requer +gui.fuel_tank.desc.1=Carregador de Combustível para encher +gui.fuel_tank.desc.2=Tanque de combustível, pode ser enchido +gui.fuel_tank.desc.3=com latas de combustível +gui.fuel_tank.desc.4=Tanque de combustível +gui.infinite_item.desc=Infinito +gui.lander.velocity=Velocidade de entrada +gui.lander.velocityu=m/s +gui.lander.warning2=Pressione " +gui.lander.warning3=" para desacelerar! +gui.max_output.desc=Saída máx. +gui.message.addnewsch.name=Adicionar novo esquemático +gui.message.apply.name=Aplicar +gui.message.assign_name.name=Atribuir nome +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Voltar +gui.message.breed.name=Procriar +gui.message.bubble_visible.name=Bolha visível +gui.message.can_create_space_station.name=Uma Estação Espacial pode ser criada aqui! +gui.message.cancel.name=Cancelar +gui.message.cannot_create_space_station.name=Uma Estação Espacial não pode ser criada aqui. +gui.message.catalog.name=Catálogo +gui.message.click_again.0.name=Clique de novo para aproximar (ver luas e satélites) +gui.message.click_again.1.name=Clique de novo para aproximar (ver luas) +gui.message.click_again.2.name=Clique de novo para aproximar (ver satélites) +gui.message.click_again.3.name=Clique de novo para aproximar +gui.message.clicklink=Clique para Galacticraft Wiki +gui.message.create_ss.name=Criar +gui.message.daynightcycle.name=Ciclo dia-e-noite +gui.message.energy=Energia +gui.message.environment.name=Bônus ambiental +gui.message.exit.name=Sair +gui.message.fuel.name=Combustível +gui.message.full.name=cheio +gui.message.generating.name=Gerando +gui.message.grow.name=Crescer +gui.message.heal.name=Curar +gui.message.help1=Para ajuda do Galacticraft +gui.message.help1a=Para ver esta mensagem de novo, digite +gui.message.help2=Para guia do Programa Espacial +gui.message.help3=Para ajuda com petróleo +gui.message.in.name=Ent. +gui.message.launch.name=Lançar +gui.message.max_energy=Energia máx. +gui.message.meansurfacetemp.name=Temp. superf. média +gui.message.moon.atmosphere.0.name=Inexistente +gui.message.moon.daynightcycle.0.name=8 dias terrestres +gui.message.moon.meansurfacetemp.0.name=253°C (lado claro) +gui.message.moon.meansurfacetemp.1.name=-153°C (lado escuro) +gui.message.moon.surfacecomposition.0.name=Rocha basáltica e +gui.message.moon.surfacecomposition.1.name=vestígios de queijo +gui.message.moon.surfacegravity.0.name=0,1654g +gui.message.moon.surfacegravity.1.name=(18% da Terra) +gui.message.of.name=de +gui.message.oil.name=Petróleo +gui.message.out.name=Sai +gui.message.overworld.atmosphere.0.name=Nitrogênio e Oxigênio +gui.message.overworld.atmosphere.1.name=Suporta vida +gui.message.overworld.daynightcycle.0.name=1 dia terrestre +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Pedra, terra e +gui.message.overworld.surfacecomposition.1.name=cascalho +gui.message.overworld.surfacegravity.0.name=1,0g +gui.message.overworld.surfacegravity.1.name=(100% da Terra) +gui.message.prelaunch=Checklist de Pré-Lançamento +gui.message.rename.name=Renomear +gui.message.select_ss.name=Selecionar uma Estação Espacial +gui.message.ss_owner.name=Dono: +gui.message.status.name=Status +gui.message.strengthen.name=Fortalecer +gui.message.surfacecomposition.name=Composição superficial +gui.message.surfacegravity.name=Gravidade superficial +gui.message.thermal_status.name=Controle térmico +gui.message.tier.name=Nível %d +gui.message.unnamed.name=Sem nome +gui.missing_core.name.0=MicdoodleCore não foi encontrado na pasta mods +gui.missing_core.name.1=Galacticraft falhou para carregar +gui.missing_core.name.2=Feche Minecraft e instale MicdoodleCore +gui.missing_core.name.3=Clique aqui para abrir a página de download +gui.new_schematic.slot.desc.0=Lugar para novo esquemático. Você +gui.new_schematic.slot.desc.1=pode encontrar novos esquemáticos +gui.new_schematic.slot.desc.2=completando calabouços +gui.new_schematic.slot.desc.3=em planetas e luas. +gui.oil_tank.desc.0=Tanque de óleo, pode ser enchido +gui.oil_tank.desc.1=com latas de óleo +gui.oxygen.warning=Sistema de oxigênio inválido! +gui.oxygen_compressor.slot.desc.0=Lugar do tanque do compressor, coloque um tanque +gui.oxygen_compressor.slot.desc.1=de oxigênio aqui para enchê-lo com oxigênio respirável. +gui.oxygen_decompressor.slot.desc.0=Lugar do tanque do descompressor, coloque um tanque +gui.oxygen_decompressor.slot.desc.1=de oxigênio aqui para remover oxigênio respirável. +gui.oxygen_slot.desc.0=Lugar de oxigênio, coloque uma lata ou tanque de +gui.oxygen_slot.desc.1=oxigênio aqui, ou conecte uma fonte de oxigênio. +gui.oxygen_storage.desc.0=Armazenagem de Oxigênio +gui.oxygen_storage.desc.1=Oxigênio +gui.oxygen_use.desc=Uso de Oxigênio +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Alimento +gui.player.health=Saúde +gui.player.ouch=Ai!!!! +gui.receiver.cannot_attach=Não dá para instalar um receptor aqui! +gui.requires_controller.desc=Requer Controle de Lançamento +gui.rocket.countdown=Contagem regressiva +gui.rocket.height=Altura +gui.rocket.inv.name=Inventário/Combustível +gui.rocket.launch.name=Lançar +gui.rocket.launched=Lançado +gui.rocket.on_launchpad=Na base +gui.rocket.speed=Velocidade +gui.rocket.turn.name=Mover para os lados +gui.rocket.updown.name=Mover para cima e para baixo +gui.rocket.warning.nofuel=Vou precisar de carregar algum combustível de foguete primeiro! +gui.rocket.warning.nogyroscope=Forças misteriosas estão no jogo e os giroscópios estão girando descontroladamente! +gui.rocket.warning.noparachute=Estou sem paraquedas! Se eu pressionar Lançar de novo, não há como voltar atrás! +gui.rocket_type.0=Espaço de Armazenagem: 18 +gui.rocket_type.1=Espaço de Armazenagem: 36 +gui.rocket_type.2=Espaço de Armazenagem: 56 +gui.rocket_type.3=Pré-abastecido +gui.seconds=s +gui.sensor.advanced=Modo Avançado +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Mostrar bolha +gui.skeleton_boss.message=Chefe removido, não saia da sala enquanto luta! Volte para regerar o chefe. +gui.space_race.chat.add_success=%s entrou na Corrida Espacial! +gui.space_race.chat.already_part=Você já é parte desta corrida espacial! +gui.space_race.chat.invite_received=Você recebeu um Convite de Time de Corrida Espacial de %s. +gui.space_race.chat.not_found=Não se pôde encontrar jogador com o nome de: %s +gui.space_race.chat.remove_success=%s foi removido da Corrida Espacial. +gui.space_race.chat.to_join=Para se juntar a %s use o comando %s +gui.space_race.coming_soon=Em breve +gui.space_race.create.add_players.name=Adicionar Jogador(es) +gui.space_race.create.back.name=Voltar +gui.space_race.create.brush_radius.name=Raio do Pincel +gui.space_race.create.brush_size.name=Tamanho do Pincel +gui.space_race.create.change_color.name.0=Mudar +gui.space_race.create.change_color.name.1=Time +gui.space_race.create.change_color.name.2=Cor +gui.space_race.create.close.name=Fechar +gui.space_race.create.customize.name=Personalizar Bandeira +gui.space_race.create.eraser_radius.name=Raio do Apagador +gui.space_race.create.eraser_size.name=Tamanho do Apagador +gui.space_race.create.global_stats.name=Ver Estatísticas Globais +gui.space_race.create.invite_player.name=Convidar Jogador +gui.space_race.create.player_radius.name=Note: Jogador tem que estar próximo! (25 blocos) +gui.space_race.create.rem_players.name=Remover Jogador(es) +gui.space_race.create.remove.name=Remover +gui.space_race.create.remove_player.name=Remover Jogador +gui.space_race.create.rename.name=Renomear Time +gui.space_race.create.send_invite.name=Enviar Convite +gui.space_race.create.server_stats.name=Ver Estatísticas do Servidor +gui.space_race.create.title.name.0=Gerenciador de +gui.space_race.create.title.name.1=Corrida Espacial +gui.space_race.create.title.name=Gerenciador de Corrida Espacial +gui.space_race.join.member_count.name=%d membros +gui.space_race.join.name=Entrar +gui.space_race.join.owner.name=Dono +gui.space_race.join.title.name=Juntar-se à Corrida Espacial +gui.space_race.unnamed=Time sem nome +gui.spacestation.added=Você foi adicionado à lista de jogadores aceitos da estação espacial de %s! +gui.spacestation.addsuccess=Adiciou-se %s com sucesso à lista da estação espacial! +gui.spacestation.allow_all_false=Suas Estações Espaciais não estão mais abertas a todos os jogadores! +gui.spacestation.allow_all_true=Suas Estações Espaciais agora estão abertas para todos os jogadores! (Use /ssinvite -all para defazer.) +gui.spacestation.changesuccess=Mudou-se a posse da Estação Espacial de %s para %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Removeu-se %s com sucesso lista da estação espacial! +gui.spacestation.to_allow_entry=para permitir outro jogador entrar nesta estação espacial! +gui.spacestation.type_command=Digite +gui.status.active.name=Ativo +gui.status.air_lock_closed.name=Porta pressurizada fechada +gui.status.air_lock_open.name=Porta pressurizada aberta +gui.status.blockedfully.name=Sol não está visível +gui.status.blockedpartial.name=Sol parcialmente visível +gui.status.check_pending.name=Verificação pendente +gui.status.check_starting.name=Verificação iniciando +gui.status.checking_seal.name=Verificando selagem +gui.status.collecting.name=Coletando +gui.status.collectingenergy.name=Coletando energia +gui.status.compressing.name=Prensando +gui.status.disabled.name=Desabilitado +gui.status.fulltank.name=Tanque oxigênio cheio +gui.status.generating.name=Gerando +gui.status.hull_heat.name=Aquecendo +gui.status.idle.name=Em espera +gui.status.missingleaves.name=Folhas insuficientes +gui.status.missingoxygen.name=Oxigênio insuficiente +gui.status.missingpower.name=Energia insuficiente +gui.status.missingtank.name=Sem tanque válido +gui.status.nofuel.name=Sem combustível! +gui.status.noinvtarget.name=Não há inventário no receptor! +gui.status.noitems.name=Sem itens a carregar! +gui.status.nooil.name=Sem óleo +gui.status.not_available.name=N/D +gui.status.not_generating.name=Não gerando +gui.status.notargetload.name=Sem receptor a carregar! +gui.status.notargetunload.name=Sem receptor a descarregar! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Chuva +gui.status.ready.name=Pronto +gui.status.refining.name=Refinando +gui.status.running.name=Funcionando +gui.status.sealed.name=Selado +gui.status.sealerblocked.name=Saída de ar bloqueada! +gui.status.sun_visible.name=Sol visível +gui.status.tank_empty.name=Tanque de oxigênio vazio +gui.status.targetempty.name=Veículo receptor está vazio! +gui.status.targetfull.name=Veículo receptor está cheio! +gui.status.unknown.name=Desconhecido +gui.status.unsealed.name=Não selado +gui.tank.oxygen_remaining=Oxigênio restante +gui.telemetry_fail.message=Primeiro vou precisar de rastrear uma entidade com o Módulo de Frequência! (Ou tente usá-lo na cabeça!) +gui.telemetry_fail_no_frequency_module.message=Acho que vou precisar do Módulo de Frequência em mãos para fazer uso disto! +gui.telemetry_fail_wearing_it.message=Vou precisar de tirar meu Módulo de Frequência se quiser ligar isso com esta Unidade de Telemetria! +gui.telemetry_succeed.message=Ligação de Telemetria criado. +gui.thermal_slot.desc.0=Lugar do acessório térmico, coloque +gui.thermal_slot.desc.1=o Controlador Térmico de Ambiente aqui +gui.thermal_slot.desc.2=(opcional). Nota: Gasta mais energia! +gui.title.air_lock.name=Controle da Porta de %s +gui.tracking.message=Rastreamento ativado. Agora tenho que clicar com o botão direito do mouse numa Unidade de Telemetria para completar a ligação. +gui.village.warning.no_freq_mod=Vou precisar de usar o Módulo de Frequência para me comunicar com eles! +gui.warning.invalid_thermal=Proteção térmica inválida +gui.warning.noroom=Pouco espaço! +gui.warning=ATENÇÃO! +item.air_fan.name=Ventilador +item.air_vent.name=Respirador +item.basic_item.ambient_thermal_controller.name=Controlador Térmico de Ambiente +item.basic_item.canned_food.name=Lata de Comida +item.basic_item.compressed_aluminum.name=Alumínio Prensado +item.basic_item.compressed_bronze.name=Bronze Prensado +item.basic_item.compressed_copper.name=Cobre Prensado +item.basic_item.compressed_iron.name=Ferro Prensado +item.basic_item.compressed_steel.name=Aço Prensado +item.basic_item.compressed_tin.name=Estanho Prensado +item.basic_item.dehydrated_apple.name=Maçã Desidratada +item.basic_item.dehydrated_carrot.name=Cenoura Desidratada +item.basic_item.dehydrated_melon.name=Melancia Desidratada +item.basic_item.dehydrated_potato.name=Batata Desidratada +item.basic_item.frequency_module.name=Módulo de Frequência +item.basic_item.ingot_aluminum.name=Barra de Alumínio +item.basic_item.ingot_bronze.name=Barra de Bronze +item.basic_item.ingot_copper.name=Barra de Cobre +item.basic_item.ingot_steel.name=Barra de Aço +item.basic_item.ingot_tin.name=Barra de Estanho +item.basic_item.raw_silicon.name=Silício Bruto +item.basic_item.solar_module_0.name=Módulo Solar +item.basic_item.solar_module_1.name=Painel Solar Completo +item.basic_item.wafer_advanced.name=Wafer Avançado +item.basic_item.wafer_basic.name=Wafer Básico +item.basic_item.wafer_solar.name=Wafer Solar Azul +item.battery.name=Bateria +item.bucket_fuel.name=Balde de Combustível +item.bucket_oil.name=Balde de Petróleo +item.buggy.name=Buggy +item.buggymat.seat.name=Assento de Buggy +item.buggymat.storage.name=Bagageiro para Buggy +item.buggymat.wheel.name=Roda de Buggy +item.canister.copper.name=Lata de Cobre +item.canister.tin.name=Lata de Estanho +item.canvas.name=Tecido +item.cheese_block.name=Bloco de Queijo +item.cheese_curd.name=Grão de Queijo +item.compressed_meteoric_iron.name=Ferro Meteórico Prensado +item.empty_liquid_canister.name=Lata Vazia +item.engine.tier1booster.name=Motor de Foguete Auxiliar Nível 1 +item.engine.tier1engine.name=Motor de Foguete Nível 1 +item.flag.name=Bandeira +item.fuel.name=Combustível de Foguete +item.fuel_canister.name=Lata de Combustível Cheia +item.fuel_canister_partial.name=Lata de Combustível Semi-Cheia +item.heavy_plating.name=Blindagem Pesada +item.hot_description.name=Quente +item.infinite_battery.name=Bateria Infinita +item.infinite_oxygen.name=Suprimento de Oxigênio Infinito +item.key.t1.name=Chave de Calabouço Nível 1 +item.lunar_sapphire.description=Safira Lunar é a moeda de troca para se negociar com Aldeões Alienígenas +item.lunar_sapphire.name=Safira Lunar +item.meteor_chunk.name=Pedaço de Meteoro Jogável +item.meteor_chunk_hot.name=Pedaço de Meteoro Jogável +item.meteoric_iron_ingot.name=Barra de Ferro Meteórico +item.meteoric_iron_raw.name=Minério de Ferro Meteórico +item.nose_cone.name=Nariz de Foguete +item.oil_canister.name=Lata de Óleo Cheia +item.oil_canister_partial.name=Lata de Óleo Semicheia +item.oil_extractor.name=Extrator Portátil de Petróleo +item.oxygen_concentrator.name=Concentrador de Oxigênio +item.oxygen_gear.name=Equipamento de Oxigênio +item.oxygen_mask.name=Máscara de Oxigênio +item.oxygen_tank_heavy_empty.name=Tanque de Oxigênio Pesado Vazio +item.oxygen_tank_heavy_full.name=Tanque de Oxigênio Pesado +item.oxygen_tank_light_empty.name=Tanque de Oxigênio Leve Vazio +item.oxygen_tank_light_full.name=Tanque de Oxigênio Leve +item.oxygen_tank_med_empty.name=Tanque de Oxigênio Médio Vazio +item.oxygen_tank_med_full.name=Tanque de Oxigênio Médio +item.parachute_black.name=Paraquedas Preto +item.parachute_blue.name=Paraquedas Azul-Claro +item.parachute_brown.name=Paraquedas Marrom +item.parachute_darkblue.name=Paraquedas Azul +item.parachute_darkgray.name=Paraquedas Cinza +item.parachute_darkgreen.name=Paraquedas Verde +item.parachute_gray.name=Paraquedas Cinza-Claro +item.parachute_lime.name=Paraquedas Verde-Limão +item.parachute_magenta.name=Paraquedas Magenta +item.parachute_orange.name=Paraquedas Laranja +item.parachute_pink.name=Paraquedas Rosa +item.parachute_plain.name=Paraquedas +item.parachute_purple.name=Paraquedas Púrpura +item.parachute_red.name=Paraquedas Vermelho +item.parachute_teal.name=Paraquedas Ciano +item.parachute_yellow.name=Paraquedas Amarelo +item.rocket_fins.name=Aleta de Foguete +item.rocket_t1.name=Foguete Nível 1 +item.schematic.name=Esquemático para Mesa de Trabalho NASA +item.sensor_glasses.name=Óculos Sensores +item.sensor_lens.name=Lentes Sensoras +item.standard_wrench.name=Chave Inglesa Padrão +item.steel_axe.name=Machado para Trabalho Pesado +item.steel_boots.name=Botas para Trabalho Pesado +item.steel_chestplate.name=Peitoral para Trabalho Pesado +item.steel_helmet.name=Elmo para Trabalho Pesado +item.steel_hoe.name=Enxada para Trabalho Pesado +item.steel_leggings.name=Perneiras para Trabalho Pesado +item.steel_pickaxe.name=Picareta para Trabalho Pesado +item.steel_pole.name=Mastro de Bandeira +item.steel_shovel.name=Pá para Trabalho Pesado +item.steel_sword.name=Espada para Trabalho Pesado +item.tier1.desc=Nível 1 +item_desc.powerdraw.name=Energia requerida: %s /s +item_desc.shift.name=Pressione %s para detalhes +item_group.galacticraft_blocks=Galacticraft Blocos +item_group.galacticraft_items=Galacticraft Itens +keybind.map.name=Mapa da Galáxia +keybind.sensortoggle.name=Alternar modos dos Óculos Sensores +keybind.spaceshipinv.name=Abrir Inventário da Nave +keybind.vehiclebackward.name=Mover veículo para trás +keybind.vehicledown.name=Mover veículo para baixo +keybind.vehicleforward.name=Mover veículo para frente +keybind.vehicleleft.name=Mover veículo para esquerda +keybind.vehicleright.name=Mover veículo para direita +keybind.vehicleup.name=Mover veículo para cima +moon.moon=Lua +newversion.failed.name=Verificação de atualização do Galacticraft falhou! Tentando de novo em 15 segundos +newversion.success.name=Versão on-line do Galacticraft encontrado: +planet.jupiter=Júpiter +planet.mercury=Mercúrio +planet.neptune=Netuno +planet.overworld=Mundo Principal +planet.saturn=Saturno +planet.uranus=Urano +planet.venus=Vênus +satellite.spacestation.overworld=Estação Espacial do Mundo Principal +schematic.moonbuggy.name=Buggy +schematic.rocket_t1.name=Foguete Nível 1 +schematic.rocket_t2.name=Foguete Nível 2 +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Controle de Porta Pressurizada +tile.air_lock_frame.description=Quadros de Porta Pressurizada vão funcionar como uma Porta Pressurizada quando dispostos na forma de uma porta e com um controlador no lugar de um dos blocos. +tile.air_lock_frame.name=Quadro de Porta Pressurizada +tile.air_lock_seal.name=Porta Pressurizada +tile.aluminum_wire.alu_wire.description=Cabo de Alumínio é utilizado para ligar fontes de energia a máquinas que consomem energia. +tile.aluminum_wire.alu_wire.name=Cabo de Alumínio +tile.aluminum_wire.alu_wire_heavy.description=Cabo de Alumínio Pesado é usado para ligar fontes de energia a máquinas que consomem energia. Sua capacidade maior aumenta a eficiência de máquinas de nível 2. +tile.aluminum_wire.alu_wire_heavy.name=Cabo de Alumínio Pesado +tile.arclamp.description=Lâmpadas a Arco Voltaico são usadas para fornecer a luz forte para uma grande área, além de afugentar a maioria dos mobs. +tile.arclamp.name=Lâmpada a Arco Voltaico +tile.basic_block_core.block_aluminum_gc.name=Bloco de Alumínio +tile.basic_block_core.block_copper_gc.name=Bloco de Cobre +tile.basic_block_core.block_meteoric_iron_gc.name=Ferro Meteórico Maciço +tile.basic_block_core.block_tin_gc.name=Bloco de Estanho +tile.basic_block_core.deco_block_0.name=Bloco Decorativo de Estanho +tile.basic_block_core.deco_block_1.name=Bloco Decorativo de Estanho +tile.basic_block_core.ore_aluminum_gc.name=Minério Alumínio +tile.basic_block_core.ore_copper_gc.name=Minério de Cobre +tile.basic_block_core.ore_silicon.name=Minério de Silício +tile.basic_block_core.ore_tin_gc.name=Minério de Estanho +tile.basic_block_moon.bricks.name=Tijolos Lunares +tile.basic_block_moon.cheesestone.name=Minério de Queijo +tile.basic_block_moon.coppermoon.name=Minério de Cobre +tile.basic_block_moon.moondirt.name=Terra Lunar +tile.basic_block_moon.moongrass.name=Turfa Lunar +tile.basic_block_moon.moonstone.name=Rocha Lunar +tile.basic_block_moon.sapphiremoon.name=Minério de Safira +tile.basic_block_moon.tinmoon.name=Minério de Estanho +tile.buggy_pad.description=Base de Abastecimento permitirá um Buggy na base ser reabastecido por um Carregador de Combustível colocado ao lado se construído num quadrado de 3x3. Não pode ser utilizado para lançar foguetes! +tile.cargo.loader.name=Carregador de Carga +tile.cargo.unloader.name=Descarregador de Carga +tile.cargo_loader.description=Carregadores de Carga transferirão blocos e itens para foguetes e outros veículos com espaço para carga. Devem ser colocados ao lado da Base de Lançamento ou de Abastecimento. +tile.cargo_unloader.description=Descarregadores de carga extrairão blocos e itens de foguetes e outros veículos com espaço para carga. Devem ser colocados ao lado da Base de Lançamento ou de Abastecimento. +tile.cheese.description=Blocos de Queijo são criados a partir dos queijos da Lua, colocáveis e comestíveis. +tile.cheese.name=Bloco de Queijo +tile.circuit_fabricator.description=Fabricador de Circuitos processará materiais básicos em wafers de silício, usado para máquinas avançadas. +tile.coal_generator.description=Gerador a Carvão queimará carvão (ou bloco de carvão) para gerar energia. É o mais simples, mas também o menos eficiente método de produzir energia. +tile.collector.description=Coletor de Oxigênio armazenará oxigênio coletado de folhas próximas. +tile.collector.name=Coletor de Oxigênio +tile.compressor.description=Prensa processará barras em seus equivalentes prensados. É a máquina mais essencial do Galacticraft! +tile.compressor_electric.description=Prensa Elétrica processará barras em seus equivalentes prensados. Comprime dois de cada vez, tornando-se mais eficaz do que sua antecessora. +tile.crude_oil.name=Petróleo +tile.crude_oil_moving.name=Óleo Cru +tile.crude_oil_still.name=Óleo Cru +tile.dishbase.description=A Antena de Comunicação pode acompanhar a posição de estações espaciais e receber comunicações de suas bases espaciais remotas. +tile.dishbase.name=Antena de Comunicação +tile.distributor.description=Distribuidor de oxigênio emitirá uma bolha de oxigênio a partir do bloco central, usando um tanque interno. Isso permite a respiração segura dentro da bolha. +tile.distributor.name=Distribuidor de Bolha de Oxigênio +tile.dummyblock.cryogenic_chamber.name=Câmara Criogênica +tile.dummyblock.launch_pad.name=Base de Lançamento de Foguetes +tile.dummyblock.nasa_workbench.name=Bancada de Trabalho NASA +tile.dummyblock.solar.name=Painel Solar +tile.dummyblock.space_station_base.name=Base da Estação Espacial +tile.electric_furnace_tier1.description=Fornalha elétrica é usada como uma alternativa mais rápida que fornalhas a carvão tradicionais. +tile.electric_furnace_tier2.description=Fornalha a Arco Voltaico é usada como uma alternativa melhor e mais rápida que ambas as fornalhas a carvão tradicional e elétricas: minérios rendem em dobro! +tile.enclosed.aluminum_wire.name=Cabo de Alumínio Selável +tile.enclosed.copper_cable.name=Cabo de Cobre Selável +tile.enclosed.description=Blocos Seláveis devem ser usados onde o ar não deve passar, como paredes de uma base espacial. +tile.enclosed.fluid_pipe.name=Cano de Oxigênio Selável +tile.enclosed.glass_fibre_cable.name=Cabo de Fibra Ótica Selável +tile.enclosed.gold_cable.name=Cabo de Ouro Selável +tile.enclosed.heavy_aluminum_wire.name=Cabo de Alumínio Pesado Selável +tile.enclosed.hv_cable.name=Cabo AV Selável +tile.enclosed.lv_cable.name=Cabo de Estanho Selável +tile.enclosed.me_cable.name=Cabo ME Selável +tile.enclosed.pipe_fluids_cobblestone.name=Cano Impermeável para Pedregulhos Selável +tile.enclosed.pipe_fluids_stone.name=Cano Impermeável para Pedra Selável +tile.enclosed.pipe_items_cobblestone.name=Cano de Transporte de Pedregulho Selável +tile.enclosed.pipe_items_stone.name=Cano de Transporte de Pedra Selável +tile.enclosed.pipe_power_gold.name=Cano Condutor de Ouro Selável +tile.enclosed.pipe_power_stone.name=Cano Condutor de Pedra Selável +tile.energy_storage_module_tier1.description=Módulo de Armazenagem de Energia é usado para armazenar grandes quantidades de energia para uso posterior. +tile.energy_storage_module_tier2.description=Grupo de Armazenagem de Energia é usado para armazenar grandes quantidades de energia para uso posterior. Armazena e fornece mais energia do que o seu antecessor. +tile.fallen_meteor.description=Meteoros caídos podem ser encontrados em muitos planetas e luas que têm pouca ou nenhuma atmosfera. Dão Ferro Meteórico quando quebrados. +tile.fallen_meteor.name=Meteorito +tile.fluid_pipe.description=Cano de Fluidos transferirá líquidos e gases de um bloco para outro. Use a Chave Inglesa Padrão para mudar os modos. +tile.fluid_pipe.name=Cano de Fluidos +tile.fluid_pipe_pull.description=Cano de Fluidos transferirá líquidos e gases de um bloco para outro. Use a Chave Inglesa Padrão para mudar os modos. +tile.fluid_pipe_pull.name=Cano de Fluidos +tile.fluid_tank.description=Tanque de Fluidos armazenará líquidos e gases para uso posterior. +tile.fluid_tank.name=Tanque de Fluidos +tile.fuel.name=Combustível +tile.fuel_block.name=Combustível +tile.fuel_loader.description=Após ser conectado a uma Base de Lançamento, um Carregador de Combustível permitirá que o combustível passe para o foguete ou outro veículo conectado. +tile.fuel_loader.name=Carregador de Combustível +tile.glowstone_torch.description=Tochas de Pedra Luminosa são melhor utilizadas para iluminar áreas quando não há oxigênio para tochas de madeira para queimarem. +tile.glowstone_torch.name=Tocha de Pedra Luminosa +tile.landing_pad.buggy_fueler.name=Base de Carregador de Combustível +tile.landing_pad.cargo_pad.name=Base de Foguete de Carga +tile.landing_pad.description=Base de Lançamento permitirá a colocação de Foguetes se construído num quadrado de 3x3. Carregador de Combustível, Carregador de Carga e Controle de Lançamento podem ser colocados ao lado. +tile.landing_pad.landing_pad.name=Base de Lançamento de Foguetes +tile.landing_pad_full.name=Base de Abastecimento de Buggy +tile.machine.0.name=Gerador a Carvão +tile.machine.1.name=Módulo de Armazenagem de Energia +tile.machine.2.name=Fornalha Elétrica +tile.machine.3.name=Prensa +tile.machine.7.name=Fornalha a Arco Voltaico +tile.machine.8.name=Grupo de Armazenagem de Energia +tile.machine2.4.name=Prensa Elétrica +tile.machine2.5.name=Fabricador de Circuitos +tile.machine2.6.name=Módulo de Armazenagem de Oxigênio +tile.moon_stairs_brick.name=Escadas de Tijolos de Calabouço Lunar +tile.moon_stairs_stone.name=Escadas de Rocha Lunar +tile.ore_copper.name=Minério de Cobre +tile.ore_tin.name=Minério de Estanho +tile.oxygen_compressor.0.name=Compressor de Oxigênio +tile.oxygen_compressor.1.name=Descompressor de Oxigênio +tile.oxygen_compressor.description=Compressor de Oxigênio carregará um tanque de oxigênio com o oxigênio vindo de seu armazenamento interno. +tile.oxygen_decompressor.description=Descompressor de Oxigênio descarregará oxigênio de um tanque de oxigênio para dentro de seu armazenamento interno. +tile.oxygen_detector.description=Detector de Oxigênio emitirá um sinal de redstone em contato com oxigênio. +tile.oxygen_detector.name=Detector de Oxigênio +tile.oxygen_storage_module.description=Módulo de Armazenagem de Oxigênio é usado para armazenar grandes quantidades de oxigênio para uso posterior. +tile.parachest.description=Para-baús cairão do céu após a aterrissagem em certos planetas e luas, como no Mundo Principal. Contém foguete, combustível e carga do lançamento anterior. +tile.parachest.name=Para-baú +tile.refinery.description=Refinaria usará petróleo e energia e fornecer combustível útil para foguetes e veículos. +tile.refinery.name=Refinaria +tile.rocket_workbench.name=Bancada de Trabalho NASA +tile.rocket_workbench.description=Mesa de Trabalho NASA é usada para criar muitos componentes avançados e veículos. Novos esquemáticos podem ser adicionados à medida que são encontrados. +tile.sapling2.birch.name=Muda de Eucalipto +tile.sapling2.jungle.name=Muda de Árvore da Selva +tile.sapling2.oak.name=Muda de Carvalho +tile.sapling2.spruce.name=Muda de Pinheiro +tile.sealer.description=Selador de Oxigênio verificará se há um espaço fechado. Se for encontrado, a área vai se encher de ar respirável. +tile.sealer.name=Selador de Oxigênio +tile.slab_gc_half.moon_bricks_slab.name=Laje de Tijolos de Calabouço Lunar +tile.slab_gc_half.moon_slab.name=Laje de Rocha Lunar +tile.slab_gc_half.tin_slab_1.name=Laje Decorativa de Estanho +tile.slab_gc_half.tin_slab_2.name=Laje Decorativa de Estanho +tile.solar.advanced_solar.name=Painel Solar Avançado +tile.solar.basic_solar.name=Painel Solar Básico +tile.solar_adv.description=Painéis Solares Avançados coletará energia do sol armazenando-a para uso posterior. Ajustam automaticamente o ângulo dos painéis para melhor captação de energia. +tile.solar_basic.description=Painéis Solares Básicos coletarão energia do sol armazenando-a para uso posterior. Coletam mais energia ao meio-dia (ângulo não ajustável). +tile.space_station_base.name=Bloco de Chegada da Estação Espacial +tile.spin_thruster.description=Propulsores Pivotantes são usados para fazer as estações espaciais girar. +tile.spin_thruster.name=Propulsor Pivotante +tile.telemetry.description=Coleta dados úteis de foguetes conectados, jogadores e mobs. Melhor colocada na proximidade de uma Tela de Exibição. Use um Módulo de Frequência para estabelecer conexões de dados. +tile.telemetry.name=Unidade de Telemetria +tile.tin_stairs_1.name=Escadas Decorativas de Estanho +tile.tin_stairs_2.name=Escadas Decorativas de Estanho +tile.treasure_chest.description=Baús de Tesouro Nível 1 são gerados nos Calabouços Lunares. Eles são desbloqueáveis depois de derrotar o chefe final. +tile.treasure_chest.name=Baú de Tesouro +tile.unlit_torch.name=Tocha +tile.unlit_torch_stone.name=Tocha de Pedra +tile.unlit_torch_lit.name=Tocha +tile.unlit_torch_stone_lit.name=Tocha de Pedra +tile.view_screen.description=Telas de Exibição adicionam um toque final a sua base espacial. Botão direito do mouse altera as informações mostradas. +tile.view_screen.name=Tela de Exibição +tile.wall_gc.moon.name=Parede de Rocha Lunar +tile.wall_gc.moon_bricks.name=Parede de Tijolos de Calabouço Lunar +tile.wall_gc.tin.name=Parede Decorativa de Estanho diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_pt.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_pt.lang new file mode 100644 index 00000000..6d24e8f9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_pt.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s foi enviado para a atmosfera%s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name=Carregador de Carga +container.cargounloader.name=Descarregador de Carga +container.fuelloader.name=Carregador de Combustível +container.lander.name=Módulo Espacial +container.oxygencollector.name=Coletor de Oxigénio +container.oxygencompressor.name=Compressor de Oxigénio +container.oxygendecompressor.name=Descompressor de Oxigénio +container.oxygendistributor.name=Distribuidor de Oxigénio +container.oxygensealer.name=Selador de Oxigénio +container.parachest.name=Para-baú +container.refinery.name=Refinaria +container.solaradvanced.name=Painel Solar Avançado +container.solarbasic.name=Painel Solar Básico +container.spaceship.name=Foguetão Nível 1 +container.treasurechest.name=Baú de Tesouro +death.attack.oxygen_suffocation=%1$s ficou sem oxigénio! +death.attack.spaceship_crash=O foguete de %1$s se esborrachou no chão. Ops. +death.attack.thermal=%1$s se esqueceu da proteção térmica. +dimension.moon.name=Lua +dimension.overworld.name=Mundo Principal +dimension.sun.name=Sol +entity.alien_villager.name=Aldeão Alienígena +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper Evoluído +entity.evolved_skeleton.name=Esqueleto Evoluído +entity.evolved_skeleton_boss.name=Esqueleto-Chefe Evoluído +entity.evolved_spider.name=Aranha Evoluída +entity.evolved_zombie.name=Zumbi Evoluído +entity.flag.name=Bandeira +entity.gcflag.name=Bandeira +entity.gravity_arrow.name=Flecha +entity.lander.name=Módulo Espacial +entity.meteor.name=Meteoro +entity.meteor_chunk.name=Pedaço de Meteoro +entity.oxygen_bubble.name=Bolha de Oxigénio +entity.para_chest.name=Para-baú +entity.rocket_t1.name=Foguetão Nível 1 +galaxy.milky_way=Via Láctea +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Entrada da bateria, coloca uma bateria aqui +gui.battery_slot.desc.1=ou conecta uma fonte de energia. +gui.bed_fail.message=Opa, e se o oxigénio acabar durante o sono? Vou precisar de uma câmara criogénica para dormir no espaço! +gui.buggy.accel.name=Acelerar +gui.buggy.decel.name=Desacelerar +gui.buggy.inv.name=Inventário / Combustível +gui.buggy.storage_space=Espaço de Armazenagem +gui.buggy.turn.name=Mover para os lados +gui.button.back.name=Volta +gui.button.disable.name=Desabilitar +gui.button.disableseal.name=Desabilitar +gui.button.enable.name=Habilitar +gui.button.enableseal.name=Habilitar +gui.button.hide_dest.name=Ocultar +gui.button.loadfuel.name=Carregar +gui.button.loaditems.name=Carregar +gui.button.next.name=Avança +gui.button.refine.name=Refinar +gui.button.stoploading.name=Parar +gui.button.stoprefine.name=Parar +gui.button.stopunloading.name=Parar +gui.button.unhide_dest.name=Mostrar +gui.button.unloaditems.name=Descarregar +gui.button.unlockschematic.name=Destravar +gui.checkbox.horizontal.name=Modo Horizontal +gui.checkbox.invert.name=Inverte Seleção +gui.checkbox.player_name.name=Nome do Jogador é +gui.checkbox.player_within.name=Jogador está a +gui.checkbox.redstone_signal.name=Abre ao sinal de Redstone +gui.chest.warning.wrongkey=Acho que vou precisar da Chave de Calabouço Nível %s para destracar isso! +gui.choose_planet.desc.moon=Habitável#Sem Oxigénio#Gravidade: 18% +gui.choose_planet.desc.overworld=Pleno de Vida#Habitável#Gravidade: 100% +gui.chooseplanet.alreadycreated1.name=Uma Estação Espacial +gui.chooseplanet.alreadycreated2.name=já foi criada aqui! +gui.chooseplanet.cannotcreate1.name=Não se pode criar uma +gui.chooseplanet.cannotcreate2.name=Estação Espacial aqui! +gui.creative_only.desc=Criativo somente +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Velocidade atual +gui.docking_rocket.distance_from.name=Distância do alvo +gui.docking_rocket.target_vel.name=Velocidade-alvo +gui.docking_rocket.warning.name.0=Prime %s para desacelerar +gui.docking_rocket.warning.name.1=Prime %s para acelerar +gui.dropbox.player_distance.name.0=1 Metro +gui.dropbox.player_distance.name.1=2 Metros +gui.dropbox.player_distance.name.2=5 Metros +gui.dropbox.player_distance.name.3=10 Metros +gui.electric_compressor.desc.0=Progresso +gui.energy_storage.desc.0=Armazenagem de Energia +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Já há uma bandeira aqui! +gui.frequency_module.desc.0=Capaz de receber ondas sonoras +gui.frequency_module.desc.1=fracas e sinais distantes +gui.frequencymodule.warning0=Acho que vou precisar do +gui.frequencymodule.warning1=se eu quiser ouvir direito aqui. +gui.fuel_output.desc.0=Coloca latas vazias para líquidos neste +gui.fuel_output.desc.1=entrada para que o tanque de combustível +gui.fuel_output.desc.2=possa enchê-las. +gui.fuel_tank.desc.0=Tanque de combustível. Requer +gui.fuel_tank.desc.1=Carregador de Combustível para encher +gui.fuel_tank.desc.2=Tanque de combustível, pode ser enchido +gui.fuel_tank.desc.3=com latas de combustível +gui.fuel_tank.desc.4=Tanque de combustível +gui.infinite_item.desc=Infinito +gui.lander.velocity=Velocidade de Entrada +gui.lander.velocityu=m/s +gui.lander.warning2=Prime " +gui.lander.warning3=" para desacelerar! +gui.max_output.desc=Saída Máx. +gui.message.addnewsch.name=Adicionar novo Esquemático +gui.message.apply.name=Aplicar +gui.message.assign_name.name=Atribuir Nome +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Voltar +gui.message.breed.name=Procriar +gui.message.bubble_visible.name=Bolha Visível +gui.message.can_create_space_station.name=Uma Estação Espacial pode ser criada aqui! +gui.message.cancel.name=Cancelar +gui.message.cannot_create_space_station.name=Uma Estação Espacial não pode ser criada aqui! +gui.message.catalog.name=Catálogo +gui.message.click_again.0.name=Clica de novo para aproximar (ver luas e satélites) +gui.message.click_again.1.name=Clica de novo para aproximar (ver luas) +gui.message.click_again.2.name=Clica de novo para aproximar (ver satélites) +gui.message.click_again.3.name=Clica de novo para aproximar +gui.message.clicklink=Clica para Galacticraft Wiki +gui.message.create_ss.name=Criar +gui.message.daynightcycle.name=Ciclo Dia-e-Noite +gui.message.energy=Energia +gui.message.environment.name=Bónus Ambiental +gui.message.exit.name=Sair +gui.message.fuel.name=Combustível +gui.message.full.name=cheio +gui.message.generating.name=Gerando +gui.message.grow.name=Crescer +gui.message.heal.name=Curar +gui.message.help1=Para ajuda do Galacticraft +gui.message.help1a=Para ver esta mensagem de novo, digite +gui.message.help2=Para guia do Programa Espacial +gui.message.help3=Para ajuda com petróleo +gui.message.in.name=-> +gui.message.launch.name=Lançar +gui.message.max_energy=Máx. Energia +gui.message.meansurfacetemp.name=Temp. Superf. Média +gui.message.moon.atmosphere.0.name=Não há +gui.message.moon.daynightcycle.0.name=8 dias terrestres +gui.message.moon.meansurfacetemp.0.name=(Lado Claro) 253°C +gui.message.moon.meansurfacetemp.1.name=(Lado Escuro) -153°C +gui.message.moon.surfacecomposition.0.name=Rocha Basáltica e +gui.message.moon.surfacecomposition.1.name=Vestígios de queijo +gui.message.moon.surfacegravity.0.name=0,1654g +gui.message.moon.surfacegravity.1.name=(18% da Terra) +gui.message.of.name=de +gui.message.oil.name=Petróleo +gui.message.out.name=<- +gui.message.overworld.atmosphere.0.name=Nitrogénio e Oxigénio +gui.message.overworld.atmosphere.1.name=Suporta vida +gui.message.overworld.daynightcycle.0.name=1 dia terrestre +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Pedra, terra e +gui.message.overworld.surfacecomposition.1.name=gravilha +gui.message.overworld.surfacegravity.0.name=1,0g +gui.message.overworld.surfacegravity.1.name=(100% da Terra) +gui.message.prelaunch=Checklist de Pré-Lançamento +gui.message.rename.name=Renomear +gui.message.select_ss.name=Selecionar uma Estação Espacial +gui.message.ss_owner.name=Dono: +gui.message.status.name=Status +gui.message.strengthen.name=Fortalecer +gui.message.surfacecomposition.name=Composição Superficial +gui.message.surfacegravity.name=Gravidade Superficial +gui.message.thermal_status.name=Controle Térmico +gui.message.tier.name=Nível %d +gui.message.unnamed.name=Sem-nome +gui.missing_core.name.0=MicdoodleCore não foi encontrado na pasta mods +gui.missing_core.name.1=Galacticraft falhou para carregar +gui.missing_core.name.2=Fecha Minecraft e instala MicdoodleCore +gui.missing_core.name.3=Clica aqui para abrir a página de download +gui.new_schematic.slot.desc.0=Entrada para novo esquemático. Você +gui.new_schematic.slot.desc.1=pode encontrar novos esquemáticos +gui.new_schematic.slot.desc.2=completando calabouços +gui.new_schematic.slot.desc.3=em planetas e luas. +gui.oil_tank.desc.0=Tanque de óleo, pode ser enchido +gui.oil_tank.desc.1=com latas de óleo +gui.oxygen.warning=Sistema de Oxigénio Inválido! +gui.oxygen_compressor.slot.desc.0=Entrada do tanque do compressor, coloca um tanque +gui.oxygen_compressor.slot.desc.1=de oxigénio aqui para enchê-lo com oxigénio respirável. +gui.oxygen_decompressor.slot.desc.0=Entrada do tanque do descompressor, coloca um tanque +gui.oxygen_decompressor.slot.desc.1=de oxigénio aqui para remover oxigénio respirável. +gui.oxygen_slot.desc.0=Entrada de oxigénio, coloca uma lata ou tanque de +gui.oxygen_slot.desc.1=oxigénio aqui, ou conecta uma fonte de oxigénio. +gui.oxygen_storage.desc.0=Armazenagem de Oxigénio +gui.oxygen_storage.desc.1=Oxigénio +gui.oxygen_use.desc=Uso de Oxigénio +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Alimento +gui.player.health=Saúde +gui.player.ouch=Ai!!!! +gui.receiver.cannot_attach=Não dá para instalar um Receptor aqui! +gui.requires_controller.desc=Requer Controlo de Lançamento +gui.rocket.countdown=Contagem regressiva +gui.rocket.height=Altura +gui.rocket.inv.name=Inventário / Combustível +gui.rocket.launch.name=Lançar +gui.rocket.launched=Lançado +gui.rocket.on_launchpad=Na Base +gui.rocket.speed=Velocidade +gui.rocket.turn.name=Mover para os lados +gui.rocket.updown.name=Mover para cima e para baixo +gui.rocket.warning.nofuel=Vou precisar de carregar algum combustível de foguetão primeiro! +gui.rocket.warning.nogyroscope=Forças misteriosas estão no jogo e os giroscópios estão girando descontroladamente! +gui.rocket.warning.noparachute=Estou sem paraquedas! Se eu premir Lançar de novo, não há como voltar atrás! +gui.rocket_type.0=Espaço de Armazenagem: 18 +gui.rocket_type.1=Espaço de Armazenagem: 36 +gui.rocket_type.2=Espaço de Armazenagem: 56 +gui.rocket_type.3=Pré-abastecido +gui.seconds=s +gui.sensor.advanced=Modo Avançado +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Mostrar Bolha +gui.skeleton_boss.message=Chefe removido, não saias da sala enquanto lutas! Volta para regerar o chefe. +gui.space_race.chat.add_success=%s juntou-se à Corrida Espacial! +gui.space_race.chat.already_part=Você já é parte desta corrida espacial! +gui.space_race.chat.invite_received=Você pecebeu um Convite de Time de Corrida Espacial de %s. +gui.space_race.chat.not_found=Não se pôde encontrar jogador com o nome de: %s +gui.space_race.chat.remove_success=%s foi removido da Corrida Espacial. +gui.space_race.chat.to_join=Para se juntar a %s use o comando %s +gui.space_race.coming_soon=Em breve +gui.space_race.create.add_players.name=Adicionar Jogador(es) +gui.space_race.create.back.name=Voltar +gui.space_race.create.brush_radius.name=Raio do Pincel +gui.space_race.create.brush_size.name=Tamanho do Pincel +gui.space_race.create.change_color.name.0=Mudar +gui.space_race.create.change_color.name.1=Time +gui.space_race.create.change_color.name.2=Cor +gui.space_race.create.close.name=Fechar +gui.space_race.create.customize.name=Personalizar Bandeira +gui.space_race.create.eraser_radius.name=Raio do Apagador +gui.space_race.create.eraser_size.name=Tamanho do Apagador +gui.space_race.create.global_stats.name=Ver Estatísticas Globais +gui.space_race.create.invite_player.name=Convidar Jogador +gui.space_race.create.player_radius.name=Note: Jogador tem que estar próximo! (25 blocos) +gui.space_race.create.rem_players.name=Remover Jogador(es) +gui.space_race.create.remove.name=Remover +gui.space_race.create.remove_player.name=Remover Jogador +gui.space_race.create.rename.name=Renomear Time +gui.space_race.create.send_invite.name=Enviar Convite +gui.space_race.create.server_stats.name=Ver Estatísticas do Servidor +gui.space_race.create.title.name=Gerenciador de Corrida Espacial +gui.space_race.create.title.name.0=Gerenciador de +gui.space_race.create.title.name.1=Corrida Espacial +gui.space_race.join.member_count.name=%d membros +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Dono +gui.space_race.join.title.name=Juntar-se à Corrida Espacial +gui.space_race.unnamed=Time sem nome +gui.spacestation.added=Você foi adicionado à lista de jogadores aceitos da estação espacial de %s! +gui.spacestation.addsuccess=Adiciou-se %s com sucesso à lista da estação espacial! +gui.spacestation.allow_all_false=Tuas Estações Espaciais não estão mais abertas a todos os jogadores! +gui.spacestation.allow_all_true=Tuas Estações Espaciais agora estão abertas para todos os jogadores! (Usa /ssinvite -all para defazer.) +gui.spacestation.changesuccess=Mudou-se a posse da Estação Espacial de %s para %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Removeu-se %s com sucesso lista da estação espacial! +gui.spacestation.to_allow_entry=para permitir outro jogador entrar nesta estação espacial! +gui.spacestation.type_command=Digite +gui.status.active.name=Ativo +gui.status.air_lock_closed.name=Porta Pressurizada Fechada +gui.status.air_lock_open.name=Porta Pressurizada Aberta +gui.status.blockedfully.name=Sol Não Está Visível +gui.status.blockedpartial.name=Sol Parcialmente Visível +gui.status.check_pending.name=Verificação Pendente +gui.status.check_starting.name=Verificação Iniciando +gui.status.checking_seal.name=Verificando Selagem +gui.status.collecting.name=Coletando +gui.status.collectingenergy.name=Coletando Energia +gui.status.compressing.name=Prensando +gui.status.disabled.name=Desabilitado +gui.status.fulltank.name=Tanque Oxigénio Cheio +gui.status.generating.name=Gerando +gui.status.hull_heat.name=Pré-Aquecimento +gui.status.idle.name=Em Espera +gui.status.missingleaves.name=Folhas Insuficientes +gui.status.missingoxygen.name=Oxigénio Insuficiente +gui.status.missingpower.name=Energia Insuficiente +gui.status.missingtank.name=Sem Tanque Válido +gui.status.nofuel.name=Sem Combustível! +gui.status.noinvtarget.name=Não Há Inventário no Receptor! +gui.status.noitems.name=Sem Itens a Carregar! +gui.status.nooil.name=Sem Óleo +gui.status.not_available.name=N/D +gui.status.not_generating.name=Não-Gerando +gui.status.notargetload.name=Sem Receptor a Carregar! +gui.status.notargetunload.name=Sem Receptor a Descarregar! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Chuva +gui.status.ready.name=Pronto +gui.status.refining.name=Refinando +gui.status.running.name=Funcionando +gui.status.sealed.name=Selado +gui.status.sealerblocked.name=Saída de Ar Bloqueada! +gui.status.sun_visible.name=Sol Visível +gui.status.tank_empty.name=Tanque de Oxigénio Vazio +gui.status.targetempty.name=Veículo Receptor Está Vazio! +gui.status.targetfull.name=Veículo Receptor Está Cheio! +gui.status.unknown.name=Desconhecido +gui.status.unsealed.name=Não-Selado +gui.tank.oxygen_remaining=Oxigénio restante +gui.telemetry_fail.message=Primeiro vou precisar de rastrear uma entidade com o Módulo de Frequência! (Ou tenta usá-lo na cabeça!) +gui.telemetry_fail_no_frequency_module.message=Acho que vou precisar do Módulo de Frequência em mãos para fazer uso disto! +gui.telemetry_fail_wearing_it.message=Vou precisar de tirar meu Módulo de Frequência se quiser ligar isso com esta Unidade de Telemetria! +gui.telemetry_succeed.message=Ligação de Telemetria criado. +gui.thermal_slot.desc.0=Entrada do acessório térmico, coloca +gui.thermal_slot.desc.1=o Controlador Térmico de Ambiente aqui +gui.thermal_slot.desc.2=(opcional). Nota: Gasta mais energia! +gui.title.air_lock.name=Controlo da Porta de %s +gui.tracking.message=Rastreio ativado. Agora tenho que clicar com o botão direito do rato numa Unidade de Telemetria para completar a ligação. +gui.warning=ATENÇÃO! +gui.warning.invalid_thermal=Proteção Térmica Inválida +gui.warning.noroom=Pouco espaço! +item.air_fan.name=Ventilador +item.air_vent.name=Respirador +item.basic_item.ambient_thermal_controller.name=Controlador Térmico de Ambiente +item.basic_item.canned_food.name=Lata de Comida +item.basic_item.compressed_aluminum.name=Alumínio Prensado +item.basic_item.compressed_bronze.name=Bronze Prensado +item.basic_item.compressed_copper.name=Cobre Prensado +item.basic_item.compressed_iron.name=Ferro Prensado +item.basic_item.compressed_steel.name=Aço Prensado +item.basic_item.compressed_tin.name=Estanho Prensado +item.basic_item.dehydrated_apple.name=Maçã Desidratada +item.basic_item.dehydrated_carrot.name=Cenoura Desidratada +item.basic_item.dehydrated_melon.name=Melancia Desidratada +item.basic_item.dehydrated_potato.name=Batata Desidratada +item.basic_item.frequency_module.name=Módulo de Frequência +item.basic_item.ingot_aluminum.name=Barra de Alumínio +item.basic_item.ingot_bronze.name=Barra de Bronze +item.basic_item.ingot_copper.name=Barra de Cobre +item.basic_item.ingot_steel.name=Barra de Aço +item.basic_item.ingot_tin.name=Barra de Estanho +item.basic_item.raw_silicon.name=Silício Bruto +item.basic_item.solar_module_0.name=Módulo Solar +item.basic_item.solar_module_1.name=Painel Solar Completo +item.basic_item.wafer_advanced.name=Wafer Avançado +item.basic_item.wafer_basic.name=Wafer Básico +item.basic_item.wafer_solar.name=Wafer Solar Azul +item.battery.name=Bateria +item.bucket_fuel.name=Balde de Combustível +item.bucket_oil.name=Balde de Petróleo +item.buggy.name=Buggy +item.buggymat.seat.name=Assento de Buggy +item.buggymat.storage.name=Bagageiro para Buggy +item.buggymat.wheel.name=Roda de Buggy +item.canister.copper.name=Lata de Cobre +item.canister.tin.name=Lata de Estanho +item.canvas.name=Tecido +item.cheese_block.name=Bloco de Queijo +item.cheese_curd.name=Grão de Queijo +item.compressed_meteoric_iron.name=Ferro Meteórico Prensado +item.empty_liquid_canister.name=Lata Vazia +item.engine.tier1booster.name=Motor de Foguetão Auxiliar Nível 1 +item.engine.tier1engine.name=Motor de Foguetão Nível 1 +item.flag.name=Bandeira +item.fuel.name=Combustível de Foguetão +item.fuel_canister.name=Lata de Combustível Cheia +item.fuel_canister_partial.name=Lata de Combustível Semi-Cheia +item.heavy_plating.name=Blindagem Pesada +item.hot_description.name=Quente +item.infinite_battery.name=Bateria Infinita +item.infinite_oxygen.name=Suprimento de Oxigénio Infinito +item.key.t1.name=Chave de Calabouço Nível 1 +item.meteor_chunk.name=Pedaço de Meteoro Jogável +item.meteor_chunk_hot.name=Pedaço de Meteoro Jogável +item.meteoric_iron_ingot.name=Barra de Ferro Meteórico +item.meteoric_iron_raw.name=Minério de Ferro Meteórico +item.nose_cone.name=Nariz de Foguetão +item.oil_canister.name=Lata de Óleo Cheia +item.oil_canister_partial.name=Lata de Óleo Semi-Cheia +item.oil_extractor.name=Extrator Portátil de Petróleo +item.oxygen_concentrator.name=Concentrador de Oxigénio +item.oxygen_gear.name=Equipamento de Oxigénio +item.oxygen_mask.name=Máscara de Oxigénio +item.oxygen_tank_heavy_empty.name=Tanque de Oxigénio Pesado Vazio +item.oxygen_tank_heavy_full.name=Tanque de Oxigénio Pesado +item.oxygen_tank_light_empty.name=Tanque de Oxigénio Leve Vazio +item.oxygen_tank_light_full.name=Tanque de Oxigénio Leve +item.oxygen_tank_med_empty.name=Tanque de Oxigénio Médio Vazio +item.oxygen_tank_med_full.name=Tanque de Oxigénio Médio +item.parachute_black.name=Paraquedas Preto +item.parachute_blue.name=Paraquedas Azul-Claro +item.parachute_brown.name=Paraquedas Marrom +item.parachute_darkblue.name=Paraquedas Azul +item.parachute_darkgray.name=Paraquedas Cinza +item.parachute_darkgreen.name=Paraquedas Verde +item.parachute_gray.name=Paraquedas Cinza-Claro +item.parachute_lime.name=Paraquedas Verde-Limão +item.parachute_magenta.name=Paraquedas Magenta +item.parachute_orange.name=Paraquedas Laranja +item.parachute_pink.name=Paraquedas Rosa +item.parachute_plain.name=Paraquedas +item.parachute_purple.name=Paraquedas Púrpura +item.parachute_red.name=Paraquedas Vermelho +item.parachute_teal.name=Paraquedas Ciano +item.parachute_yellow.name=Paraquedas Amarelo +item.rocket_fins.name=Aleta de Foguetão +item.rocket_t1.name=Foguetão Nível 1 +item.schematic.name=Esquemático para Mesa de Trabalho NASA +item.sensor_glasses.name=Óculos Sensores +item.sensor_lens.name=Lentes Sensoras +item.standard_wrench.name=Chave Inglesa Padrão +item.steel_axe.name=Machado para Trabalho Pesado +item.steel_boots.name=Botas para Trabalho Pesado +item.steel_chestplate.name=Peitoral para Trabalho Pesado +item.steel_helmet.name=Capacete para Trabalho Pesado +item.steel_hoe.name=Enxada para Trabalho Pesado +item.steel_leggings.name=Perneiras para Trabalho Pesado +item.steel_pickaxe.name=Picareta para Trabalho Pesado +item.steel_pole.name=Mastro de Bandeira +item.steel_shovel.name=Pá para Trabalho Pesado +item.steel_sword.name=Espada para Trabalho Pesado +item.tier1.desc=Nível 1 +item_desc.powerdraw.name=Energia requerida: %s /s +item_desc.shift.name=Prima %s para detalhes +item_group.galacticraft_blocks=Galacticraft Blocos +item_group.galacticraft_items=Galacticraft Itens +keybind.map.name=Mapa da Galáxia +keybind.sensortoggle.name=Alternar modos dos Óculos Sensores +keybind.spaceshipinv.name=Abrir Inventário da Nave +keybind.vehiclebackward.name=Mover veículo para trás +keybind.vehicledown.name=Mover veículo para baixo +keybind.vehicleforward.name=Mover veículo para frente +keybind.vehicleleft.name=Mover veículo para esquerda +keybind.vehicleright.name=Mover veículo para direita +keybind.vehicleup.name=Mover veículo para cima +moon.moon=Lua +newversion.failed.name=Verificação de atualização do Galacticraft falhou! A tentar novamente em 15 segundos +newversion.success.name=Versão on-line do Galacticraft encontrado: +planet.jupiter=Júpiter +planet.mercury=Mercúrio +planet.neptune=Neptuno +planet.overworld=Mundo Principal +planet.saturn=Saturno +planet.uranus=Urano +planet.venus=Vénus +satellite.spacestation.overworld=Estação Espacial do Mundo Principal +schematic.moonbuggy.name=Buggy +schematic.rocket_t1.name=Foguetão Nível 1 +schematic.rocket_t2.name=Foguetão Nível 2 +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Controle de Porta Pressurizada +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Quadro de Porta Pressurizada +tile.air_lock_seal.name=Porta Pressurizada +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name=Cabo de Alumínio +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Transfers at a faster rate than it's predecessor. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name=Cabo de Alumínio Pesado +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Lâmpada a Arco Voltaico +tile.basic_block_core.block_aluminum_gc.name=Bloco de Alumínio +tile.basic_block_core.block_copper_gc.name=Bloco de Cobre +tile.basic_block_core.block_meteoric_iron_gc.name=Ferro Meteórico Maciço +tile.basic_block_core.block_tin_gc.name=Bloco de Estanho +tile.basic_block_core.deco_block_0.name=Bloco Decorativo de Estanho +tile.basic_block_core.deco_block_1.name=Bloco Decorativo de Estanho +tile.basic_block_core.ore_aluminum_gc.name=Minério Alumínio +tile.basic_block_core.ore_copper_gc.name=Minério de Cobre +tile.basic_block_core.ore_silicon.name=Minério de Silício +tile.basic_block_core.ore_tin_gc.name=Minério de Estanho +tile.basic_block_moon.bricks.name=Tijolos Lunares +tile.basic_block_moon.cheesestone.name=Minério de Queijo +tile.basic_block_moon.coppermoon.name=Minério de Cobre +tile.basic_block_moon.moondirt.name=Terra Lunar +tile.basic_block_moon.moongrass.name=Turfa Lunar +tile.basic_block_moon.moonstone.name=Rocha Lunar +tile.basic_block_moon.tinmoon.name=Minério de Estanho +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Carregador de Carga +tile.cargo.unloader.name=Descarregador de Carga +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Bloco de Queijo +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name=Coletor de Oxigénio +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Petróleo +tile.crude_oil_moving.name=Óleo Cru +tile.crude_oil_still.name=Óleo Cru +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Antena de Comunicação +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name=Distribuidor de Bolha de Oxigénio +tile.dummyblock.cryogenic_chamber.name=Câmara Criogénica +tile.dummyblock.launch_pad.name=Base de Lançamento de Foguetões +tile.dummyblock.nasa_workbench.name=Bancada de Trabalho NASA +tile.dummyblock.solar.name=Painel Solar +tile.dummyblock.space_station_base.name=Base da Estação Espacial +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Cabo de Alumínio Selável +tile.enclosed.heavy_aluminum_wire.name=Cabo de Alumínio Pesado Selável +tile.enclosed.copper_cable.name=Cabo de Cobre Selável +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Cabo de Fibra Óptica Selável +tile.enclosed.gold_cable.name=Cabo de Ouro Selável +tile.enclosed.hv_cable.name=Cabo AV Selável +tile.enclosed.lv_cable.name=Cabo de Corrente Ultra-Baixa Selável +tile.enclosed.me_cable.name=Cabo ME Selável +tile.enclosed.fluid_pipe.name=Cano de Oxigénio Selável +tile.enclosed.pipe_fluids_cobblestone.name=Cano Impermeável para Empedrados Selável +tile.enclosed.pipe_fluids_stone.name=Cano Impermeável para Pedra Selável +tile.enclosed.pipe_items_cobblestone.name=Cano de Transporte de Empedrado Selável +tile.enclosed.pipe_items_stone.name=Cano de Transporte de Pedra Selável +tile.enclosed.pipe_power_gold.name=Cano Condutor de Ouro Selável +tile.enclosed.pipe_power_stone.name=Cano Condutor de Pedra Selável +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Meteorito +tile.fuel.name=Combustível +tile.fuel_block.name=Combustível +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name=Carregador de Combustível +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Tocha de Pedra Luminosa +tile.landing_pad.buggy_fueler.name=Base de Carregador de Combustível +tile.landing_pad.cargo_pad.name=Base de Foguetão de Carga +tile.landing_pad.description=Landing Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name=Base de Lançamento de Foguetões +tile.landing_pad_full.name=Base de Abastecimento de Buggy +tile.machine.0.name=Gerador a Carvão +tile.machine.1.name=Módulo de Armazenamento de Energia +tile.machine.2.name=Fornalha Elétrica +tile.machine.3.name=Compressor +tile.machine.7.name=Fornalha a Arco Voltaico +tile.machine.8.name=Grupo de Armazenamento de Energia +tile.machine2.4.name=Compressor Elétrico +tile.machine2.5.name=Fabricador de Circuitos +tile.machine2.6.name=Módulo de Armazenamento de Oxigénio +tile.moon_stairs_brick.name=Escadas de Tijolos de Calabouço Lunar +tile.moon_stairs_stone.name=Escadas de Rocha Lunar +tile.ore_copper.name=Minério de Cobre +tile.ore_tin.name=Minério de Estanho +tile.oxygen_compressor.0.name=Compressor de Oxigénio +tile.oxygen_compressor.1.name=Descompressor de Oxigénio +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name=Detector de Oxigénio +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name=Cano de Oxigénio +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Para-baú +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name=Refinaria +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=Bancada de Trabalho NASA +tile.sapling2.birch.name=Rebento de Eucalipto +tile.sapling2.jungle.name=Rebento de Árvore da Selva +tile.sapling2.oak.name=Rebento de Carvalho +tile.sapling2.spruce.name=Rebento de Pinheiro +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name=Selador de Oxigénio +tile.slab_gc_half.moon_bricks_slab.name=Laje de Tijolos de Calabouço Lunar +tile.slab_gc_half.moon_slab.name=Laje de Rocha Lunar +tile.slab_gc_half.tin_slab_1.name=Laje Decorativa de Estanho +tile.slab_gc_half.tin_slab_2.name=Laje Decorativa de Estanho +tile.solar.advanced_solar.name=Painel Solar Avançado +tile.solar.basic_solar.name=Painel Solar Básico +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Bloco de Chegada à Estação Espacial +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Propulsor Pivotante +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Unidade de Telemetria +tile.tin_stairs_1.name=Escadas Decorativas de Estanho +tile.tin_stairs_2.name=Escadas Decorativas de Estanho +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Baú de Tesouro +tile.unlit_torch.name=Tocha +tile.unlit_torch_stone.name=Tocha de Pedra +tile.unlit_torch_lit.name=Tocha +tile.unlit_torch_stone_lit.name=Tocha de Pedra +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Ecrã de Exibição +tile.wall_gc.moon.name=Parede de Rocha Lunar +tile.wall_gc.moon_bricks.name=Parede de Tijolos de Calabouço Lunar +tile.wall_gc.tin.name=Parede Decorativa de Estanho diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ru_ru.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ru_ru.lang new file mode 100644 index 00000000..a83af135 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ru_ru.lang @@ -0,0 +1,825 @@ +checklist.create_grapple.key=Создать крюк +checklist.equip_oxygen_suit.key=Надеть кислородное оборудование +checklist.equip_parachute.key=Надеть парашют +command.gcastrominer.count=Для игрока %s доступно %s астрошахтёров +commands.emergencykit=%s получил самоспасатель! +commands.dimensionteleport=%s был направлен в атмосферу%s +commands.dimensiontp.too_many=Слишком много аргументов команды! Использование: %s +commands.gcenergyunits.invalid_units=Неправильные единицы в команде /GCEnergyUnits. Использование: %s +commands.gcenergyunits.no_units=Необходимо указать единицы! Использование: %s +commands.gchouston.confirm.1=Это Центр управления полётами, повторите пожалуйста? +commands.gchouston.confirm.2=(Чтобы прервать миссию, наберите /gchouston ещё раз для подтверждения.) +commands.gchouston.fail=Команда /gchouston доступна только в космосе (или в Творческом режиме). +commands.gchouston.help.1=Эм, Хьюстон, у нас проблема.... +commands.gchouston.help.2=(Введите /gchouston, чтобы прервать миссию и вернуться домой.) +commands.gchouston.noop=Использование команды /gchouston на других игроках доступно только операторам. +commands.gchouston.success=Хорошо, оставайтесь на связи, %s, телепортируем вас в точку перевозрождения на Землю. +commands.joinrace.no_team=Необходимо указать команду! Использование: %s +commands.ssinvite.not_found=Не удалось найти космическую станцию на ваше имя, сначала вы должны слетать туда! +commands.ssinvite.wrong_usage=Недостаточно аргументов команды! Использование: %s +commands.ssnewowner.wrong_usage=ID космической станции не был распознан. Она вообще существует? Использование: %s +commands.ssuninvite.no_player=Не удалось найти игрока с именем %s в списке вашей космической станции! +container.cargoloader.name=Грузовой загрузчик +container.cargounloader.name=Грузовой разгрузчик +container.fuelloader.name=Загрузчик топлива +container.lander.name=Посадочный модуль +container.magneticcrafting.name=Создание +container.oxygencollector.name=Кислородный сборщик +container.oxygencompressor.name=Кислородный компрессор +container.oxygendecompressor.name=Кислородный декомпрессор +container.oxygendistributor.name=Распределитель кислорода +container.oxygensealer.name=Герметизатор кислорода +container.parachest.name=Сундук с парашютом +container.refinery.name=Очистительный завод +container.solaradvanced.name=Улучшенная солнечная панель +container.solarbasic.name=Основная солнечная панель +container.spaceship.name=Ракета 1-го уровня +container.treasurechest.name=Сундук с сокровищами +death.attack.meteor_chunk=%1$s был поражен метеорным мусором! +death.attack.oxygen_suffocation=%1$s задохнулся в космосе! +death.attack.spaceship_crash=Ракета %1$s разбилась о землю. Ой. +death.attack.sulphuric_acid=%1$s растворился в серной кислоте! +death.attack.thermal=%1$s забыл тепловую защиту +dimension.moon.name=Луна +dimension.overworld.name=Земля +dimension.sun.name=Солнце +entity.alien_villager.name=Инопланетный житель +entity.buggy.name=Багги +entity.celestial_screen.name=Астрономический экран +entity.evolved_creeper.name=Эволюционировавший крипер +entity.evolved_skeleton.name=Эволюционировавший скелет +entity.evolved_skeleton_boss.name=Эволюционировавший скелет-босс +entity.evolved_spider.name=Эволюционировавший паук +entity.evolved_zombie.name=Эволюционировавший зомби +entity.evolved_enderman.name=Эволюционировавший Странник Края +entity.evolved_witch.name=Эволюционировавшая ведьма +entity.flag.name=Флаг +entity.gcflag.name=Флаг +entity.gravity_arrow.name=Стрелка +entity.lander.name=Посадочный модуль +entity.meteor.name=Метеорит +entity.meteor_chunk.name=Кусок метеорита +entity.oxygen_bubble.name=Кислородный пузырь +entity.para_chest.name=Сундук с парашютом +entity.rocket_t1.name=Ракета 1-го уровня +galaxy.milky_way=Млечный Путь +gc.configgui.allow_liquids_grating=Разрешить жидкостям течь через решетки +gc.configgui.alternate_canister_recipe=Альтернативный рецепт канистры +gc.configgui.asteroids_flags=Флаги режима приключений на астероидах +gc.configgui.asteroids_start=Режим приключения (Старт на астероидах) +gc.configgui.biome_id_base=Базовый ID биома +gc.configgui.detectable_i_ds=Обнаруживаемые ID +gc.configgui.disable_biome_type_registrations=Отключить регистрацию типов биомов +gc.configgui.disable_cheese_moon=Отключить генерацию лунного сыра +gc.configgui.disable_copper_moon=Отключить генерацию лунной меди +gc.configgui.disable_lander=Отключить посадочный модуль +gc.configgui.disable_moon_village_gen=Отключить генерацию лунных деревень +gc.configgui.disable_ore_dict_space_metals=Использовать только свои космические металлы в рецептах +gc.configgui.disable_sapphire_moon=Отключить генерацию лунных сапфиров +gc.configgui.disable_space_station_creation=Отключить создание космической станции +gc.configgui.disable_spaceship_grief=Отключить взрыв ракеты +gc.configgui.disable_spaceship_particles=Отключить частицы ракеты +gc.configgui.disable_tin_moon=Отключить генерацию лунного олова +gc.configgui.disable_update_check=Отключить проверку обновлений +gc.configgui.disable_vehicle_camera_changes=Vivecraft: Отключить масштаб и вид от третьего лица +gc.configgui.dungeon_boss_health_mod=Модификатор здоровья босса +gc.configgui.enable_aluminum_ore_gen=Генерация алюминия в обычном мире +gc.configgui.enable_copper_ore_gen=Генерация меди в обычном мире +gc.configgui.enable_debug=Показывать отладочные сообщения в консоли +gc.configgui.enable_other_mods_features=Включить внешнюю генерацию других модов +gc.configgui.enable_retrogen_oil=Генерировать нефть в существующем мире +gc.configgui.enable_sealer_edge_checks=Полная проверка герметичности герметизатором +gc.configgui.enable_silicon_ore_gen=Генерация кремния в обычном мире +gc.configgui.enable_space_race_manager_popup=Включить всплывающее окно менеджера гонки +gc.configgui.enable_thaum_craft_nodes=Включить генерацию узлов Thaumcraft на планетах +gc.configgui.enable_tin_ore_gen=Генерация олова в обычном мире +gc.configgui.external_oil_gen=Внешняя генерация нефти +gc.configgui.force_overworld_respawn=Принудительное появление в обычном мире +gc.configgui.hard_mode=Повышенная сложность +gc.configgui.id_achiev_base=ID основного достижения +gc.configgui.id_dimension_moon=ID измерения: Луна +gc.configgui.id_dimension_overworld=ID измерения: Земля +gc.configgui.id_dimension_overworld_orbit=ID измерения: Космическая станция +gc.configgui.id_dimension_overworld_orbit_static=ID измерения: Статическая космическая станция +gc.configgui.id_schematic_add_schematic=ID схемы: "Добавить схему" +gc.configgui.id_schematic_moon_buggy=ID схемы: Лунный багги +gc.configgui.id_schematic_rocket_t1=ID схемы: Ракета 1-го уровня +gc.configgui.key_override_fuel_level=Назначить клавишу: Инвентарь ракеты +gc.configgui.key_override_toggle_adv_goggles=Назначить клавишу: Улучшенные очки +gc.configgui.map_scroll_invert=Инвертировать прокрутку карты +gc.configgui.map_scroll_sensitivity=Чувствительность прокрутки карты +gc.configgui.meteor_block_damage=Включить повреждение блоков от метеоров +gc.configgui.meteor_spawn_mod=Множитель генерации метеоров +gc.configgui.more_stars=Показывать больше звёзд +gc.configgui.oil_gen_factor=Множитель генерации нефти +gc.configgui.ore_dict_silicon=Обозначение кремния в словаре руд +gc.configgui.other_mod_ore_gen_i_ds=Генерация руд из других модов на планетах +gc.configgui.override_capes=Заменять плащи +gc.configgui.override_map=Назначить клавишу: Галактическая карта +gc.configgui.oxygen_indicator_bottom=Сместить индикатор кислорода вниз +gc.configgui.oxygen_indicator_left=Сместить индикатор кислорода влево +gc.configgui.planet_worldborders=Максимальные x,z для посадки на Луну +gc.configgui.quick_mode=Быстрая игра (легче) +gc.configgui.rocket_disable_overworld_return=Отключить возврат ракеты в обычный мир +gc.configgui.rocket_disabled_dimensions=Измерения, где ракеты отключены +gc.configgui.rocket_fuel_factor=Множитель ракетного топлива +gc.configgui.sealable_i_ds=Герметичные блоки +gc.configgui.space_station_energy_scalar=Множитель энергии космической станции +gc.configgui.space_stations_require_permission=Разрешения для космических станций +gc.configgui.static_loaded_dimensions=Статически загруженные измерения +gc.configgui.static_loaded_new_ss=Загружать статически новые космические станции? +gc.configgui.suffocation_cooldown=Задержка урона от удушья +gc.configgui.suffocation_damage=Урон от удушья +gc.configgui.title=Настройки Galacticraft Core +gc.configgui.use_old_oil_fluid_i_d=Использовать старый ID (oilgc) для нефти +gc.configgui.use_old_fuel_fluid_i_d=Использовать старый ID (fuelgc) для топлива +gc.configgui.whitelist_co_f_h_core_gen=Добавить генерацию CoFHCore в белый список +gui.battery_slot.desc.0=Слот для аккумулятора, поставьте аккумулятор сюда +gui.battery_slot.desc.1=или используйте подключенный источник энергии +gui.bed_fail.message=Ой вэй. Что произойдёт, если кислород иссякнет, пока вы спите? Вам понадобится Криогенная камера для сна в космосе. +gui.buggy.accel.name=Ускориться +gui.buggy.decel.name=Замедлиться +gui.buggy.inv.name=Инвентарь / Топливо +gui.buggy.storage_space=Размер хранилища +gui.buggy.turn.name=Поверните влево, вправо. +gui.button.back.name=Назад +gui.button.disable.name=Выключить +gui.button.disableseal.name=Отключить герметизатор +gui.button.enable.name=Включить +gui.button.enableseal.name=Запустить герметизатор +gui.button.hide_dest.name=Спрятать +gui.button.loadfuel.name=Загрузить топливо +gui.button.loaditems.name=Загрузить предметы +gui.button.next.name=Вперёд +gui.button.paintapply.name=Применить краску +gui.button.paintmix.name=Выбрать цвет +gui.button.paintreset.name=Сбросить цвет +gui.button.refine.name=Очистить +gui.button.stoploading.name=Остановить загрузку +gui.button.stoprefine.name=Остановить очистку +gui.button.stopunloading.name=Остановить разгрузку +gui.button.unhide_dest.name=Показать +gui.button.unloaditems.name=Разгрузить предметы +gui.button.unlockschematic.name=Разблокировать схему +gui.checkbox.horizontal.name=Горизонтальный режим +gui.checkbox.invert.name=Инвертированный выбор +gui.checkbox.player_name.name=Имя игрока: +gui.checkbox.player_within.name=Игрок в пределах +gui.checkbox.redstone_signal.name=Открывается по сигналу красного камня +gui.chest.warning.wrongkey=Вам нужен ключ от подземелья %s уровня, чтобы открыть это! +gui.choose_planet.desc.moon=Обитаема#Кислород отсутствует#Гравитация: 18% +gui.choose_planet.desc.overworld=Полна жизни#Обитаема#Гравитация: 100% +gui.chooseplanet.alreadycreated1.name=Космическая станция +gui.chooseplanet.alreadycreated2.name=уже создана! +gui.chooseplanet.cannotcreate1.name=Невозможно создать космическую +gui.chooseplanet.cannotcreate2.name=станцию здесь! +gui.crafting_memory.desc.0=Данный магнитный верстак может создать больше данных предметов! +gui.crafting_memory.desc.1=Чтобы запомнить рецепт, создайте один предмет. +gui.creative_only.desc=Только для Творческого режима +gui.display.nolink=Нет связи +gui.docking_rocket.current_vel.name=Текущая скорость +gui.docking_rocket.distance_from.name=Расстояние до цели +gui.docking_rocket.target_vel.name=Целевая скорость +gui.docking_rocket.warning.name.0=Нажмите %s, для замедления +gui.docking_rocket.warning.name.1=Нажмите %s, для ускорения +gui.dropbox.player_distance.name.0=1 метр +gui.dropbox.player_distance.name.1=2 метра +gui.dropbox.player_distance.name.2=5 метров +gui.dropbox.player_distance.name.3=10 метров +gui.electric_compressor.desc.0=Прогресс +gui.energy_storage.desc.0=Хранилище энергии +gui.energy_storage.desc.1=Энергия +gui.flag.already_placed=Флаг здесь уже стоит! +gui.frequency_module.desc.0=Может принимать слабые звуковые +gui.frequency_module.desc.1=волны и отдалённые сигналы +gui.frequencymodule.warning0=Мне нужен +gui.frequencymodule.warning1=если я хочу здесь нормально слышать. +gui.fuel_output.desc.0=Положите пустые жидкостные канистры в +gui.fuel_output.desc.1=этот слот, чтобы заполнить их из +gui.fuel_output.desc.2=топливного резервуара +gui.fuel_tank.desc.0=Топливный резервуар. Требуется +gui.fuel_tank.desc.1=загрузчик топлива для заполнения +gui.fuel_tank.desc.2=Топливный резервуар можно заполнить +gui.fuel_tank.desc.3=топливными канистрами +gui.fuel_tank.desc.4=Топливный резервуар +gui.infinite_item.desc=Бесконечный +gui.lander.velocity=Скорость вхождения +gui.lander.velocityu=м/cек +gui.lander.warning2=Зажмите " +gui.lander.warning3=", чтобы замедлить падение! +gui.max_output.desc=Макс. выход +gui.message.addnewsch.name=Добавить новую схему +gui.message.apply.name=Применить +gui.message.assign_name.name=Дать имя +gui.message.atmosphere.name=Атмосфера +gui.message.back.name=Назад +gui.message.breed.name=Размножать +gui.message.bubble_visible.name=Видимость пузырей +gui.message.can_create_space_station.name=Здесь можно построить станцию! +gui.message.cancel.name=Отмена +gui.message.cannot_create_space_station.name=Здесь нельзя построить космическую станцию. +gui.message.catalog.name=Каталог +gui.message.click_again.0.name=Нажмите ещё раз для увеличения (видно Луны и Спутники) +gui.message.click_again.1.name=Нажмите ещё раз для увеличения (видно Луны) +gui.message.click_again.2.name=Нажмите ещё раз для увеличения (видно Спутники) +gui.message.click_again.3.name=Нажмите ещё раз для увеличения +gui.message.clicklink=Нажмите, чтобы попасть на Galacticraft Wiki +gui.message.create_ss.name=Создать +gui.message.daynightcycle.name=Цикл дня и ночи +gui.message.energy=Энергия +gui.message.environment.name=Ускорение окружающей среды +gui.message.exit.name=Выход +gui.message.fuel.name=Топливо +gui.message.full.name=осталось +gui.message.generating.name=Создание +gui.message.grow.name=Расти +gui.message.heal.name=Лечить +gui.message.help1=Для помощи по Galacticraft, напечатайте +gui.message.help1a=Для того, чтобы увидеть это уведомлениe eщё раз, напечатайте +gui.message.help2=Для помощи по космической программе, напечатайте +gui.message.help3=Для помощи по добычи нефти, напечатайте +gui.message.in.name=Ввод +gui.message.launch.name=Запуск +gui.message.max_energy=Макс. энергия +gui.message.meansurfacetemp.name=Средняя температура на поверхности +gui.message.moon.atmosphere.0.name=Нет +gui.message.moon.daynightcycle.0.name=29.5 Земных дней +gui.message.moon.meansurfacetemp.0.name=(Светлая сторона) 253°C +gui.message.moon.meansurfacetemp.1.name=(Тёмная сторона) -153°C +gui.message.moon.surfacecomposition.0.name=Базальтовый камень и +gui.message.moon.surfacecomposition.1.name=следы сыра +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% Земного) +gui.message.of.name=из +gui.message.oil.name=Нефть +gui.message.out.name=Вывод +gui.message.overworld.atmosphere.0.name=Азот и кислород +gui.message.overworld.atmosphere.1.name=Поддерживает жизнь +gui.message.overworld.daynightcycle.0.name=1 Земной день +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Камень, земля, +gui.message.overworld.surfacecomposition.1.name=гравий +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% Земного) +gui.message.prelaunch=Контрольный список +gui.message.rename.name=Переименовать +gui.message.select_ss.name=Выбрать космическую станцию +gui.message.ss_owner.name=Владелец: +gui.message.status.name=Статус +gui.message.strengthen.name=Укреплять +gui.message.surfacecomposition.name=Состав поверхности +gui.message.surfacegravity.name=Гравитация на поверхности +gui.message.thermal_status.name=Тепловой контроль +gui.message.tier.name=Уровень %d +gui.message.unnamed.name=Без имени +gui.missing_core.name.0=MicdoodleCore не найден в папке модификаций +gui.missing_core.name.1=Galacticraft не смог загрузиться +gui.missing_core.name.2=Закройте Minecraft и установите MicdoodleCore +gui.missing_core.name.3=Нажмите здесь, чтобы открыть страницу загрузки +gui.new_schematic.slot.desc.0=Слот для новой схемы. Вы +gui.new_schematic.slot.desc.1=можете найти новые схемы +gui.new_schematic.slot.desc.2=в подземельях +gui.new_schematic.slot.desc.3=на планетах и лунах +gui.oil_tank.desc.0=Нефтяной резервуар, может быть заполнен +gui.oil_tank.desc.1=нефтяными канистрами +gui.oxygen.warning=Не настроено кислородное оборудование! +gui.oxygen_compressor.slot.desc.0=Слот компрессора для резервуара, положите резервуар +gui.oxygen_compressor.slot.desc.1=сюда, чтобы заполнить его кислородом. +gui.oxygen_decompressor.slot.desc.0=Слот декомпрессора для резервуара, положите резервуар +gui.oxygen_decompressor.slot.desc.1=с кислородом сюда, чтобы опустошить его. +gui.oxygen_slot.desc.0=Слот для кислорода, положите канистру с кислородом или резервуар +gui.oxygen_slot.desc.1=сюда или используйте присоединённый источник кислорода +gui.oxygen_storage.desc.0=Хранилище кислорода +gui.oxygen_storage.desc.1=Кислород +gui.oxygen_use.desc=Потребление кислорода +gui.per_second=/сек +gui.player.bpm=уд/мин +gui.player.food=Еда +gui.player.health=Здоровье +gui.player.ouch=ой!!!! +gui.receiver.cannot_attach=Нельзя подключить Приёмник сюда! +gui.requires_controller.desc=Требуется контроллер запуска +gui.rocket.countdown=Обратный отсчёт +gui.rocket.height=Высота +gui.rocket.inv.name=Инвентарь / Топливо +gui.rocket.launch.name=Запуск +gui.rocket.launched=Запущена +gui.rocket.on_launchpad=На взлётной площадке +gui.rocket.speed=Скорость +gui.rocket.turn.name=Повернуть влево-вправо +gui.rocket.updown.name=Повернуть вверх-вниз +gui.rocket.warning.fuelinsufficient=Недостаточно топлива для безопасного запуска под автоматическим управлением! +gui.rocket.warning.launchcontroller=Предполетная отмена запуска. Проверьте контроллер запуска! +gui.rocket.warning.nofuel=Сначала вам нужно залить немного топлива в ракету! +gui.rocket.warning.nogyroscope=В игре присутствуют таинственные силы и гироскопы дико вращаются! +gui.rocket.warning.noparachute=У вас нет парашюта! Если вы нажмёте "Запуск" снова, пути назад не будет! +gui.rocket_type.0=Размер хранилища: 18 +gui.rocket_type.1=Размер хранилища: 36 +gui.rocket_type.2=Размер хранилища: 54 +gui.rocket_type.3=Заправленная +gui.seconds=сек +gui.sensor.advanced=Улучшенный режим +gui.sensor.advancedoff=ВЫКЛ. +gui.sensor.advancedon=ВКЛ. +gui.show_bubble.desc.0=Показать пузырь +gui.skeleton_boss.message=Босс пропал, не покидайте комнату с боссом, когда сражаетесь с ним! Зайдите в комнату заново, чтобы босс снова появился. +gui.space_race.chat.add_success=%s присоединился к космической гонке! +gui.space_race.chat.already_part=Вы уже участвуете в этой космической гонке! +gui.space_race.chat.invite_received=Получено приглашение в команду космической гонки от %s. +gui.space_race.chat.not_found=Не удалось найти игрока с именем %s +gui.space_race.chat.remove_success=%s больше не участвует в космической гонке. +gui.space_race.chat.to_join=Чтобы присоединиться к %s, используйте команду %s +gui.space_race.coming_soon=Скоро +gui.space_race.create.add_players.name=Добавить игрока(ов) +gui.space_race.create.back.name=Назад +gui.space_race.create.brush_radius.name=Радиус кисти +gui.space_race.create.brush_size.name=Размер кисти +gui.space_race.create.change_color.name.0=Сменить +gui.space_race.create.change_color.name.1=цвет +gui.space_race.create.change_color.name.2=команды +gui.space_race.create.close.name=Закрыть +gui.space_race.create.customize.name=Настроить флаг +gui.space_race.create.eraser_radius.name=Радиус ластика +gui.space_race.create.eraser_size.name=Размер ластика +gui.space_race.create.global_stats.name=Посмотреть глобальную статистику +gui.space_race.create.invite_player.name=Пригласить игрока +gui.space_race.create.player_radius.name=Примечание: игроки должны быть в радиусе 25 блоков! +gui.space_race.create.rem_players.name=Убрать игрока(ов) +gui.space_race.create.remove.name=Убрать +gui.space_race.create.remove_player.name=Убрать игрока +gui.space_race.create.rename.name=Переименовать команду +gui.space_race.create.send_invite.name=Отправить приглашение +gui.space_race.create.server_stats.name=Посмотреть статистику сервера +gui.space_race.create.title.name.0=Настройка +gui.space_race.create.title.name.1=космической гонки +gui.space_race.create.title.name=Настройка космической гонки +gui.space_race.join.member_count.name=Участников: %d +gui.space_race.join.name=Присоединиться +gui.space_race.join.owner.name=Владелец +gui.space_race.join.title.name=Присоединиться к космической гонке +gui.space_race.unnamed=Безымянная команда +gui.spacestation.added=Вы получили доступ на космическую станцию игрока %s! +gui.spacestation.addsuccess=%s успешно добавлен в список космической станции! +gui.spacestation.allow_all_false=Ваши космические станции больше не открыты для всех игроков. +gui.spacestation.allow_all_true=Ваши космические станции теперь открыты для всех игроков! (Используйте /ssinvite -all, чтобы отменить это.) +gui.spacestation.changesuccess=Владелец космической станции был изменён с %s на %s. +gui.spacestation.playername=<имя игрока> +gui.spacestation.removesuccess=%s успешно убран из списка космической станции! +gui.spacestation.to_allow_entry=чтобы разрешить другому игроку заходить на эту космическую станцию! +gui.spacestation.type_command=Введите +gui.status.active.name=Активно +gui.status.air_lock_closed.name=Воздушный шлюз закрыт +gui.status.air_lock_open.name=Воздушный шлюз открыт +gui.status.blockedfully.name=Солнце невидимо +gui.status.blockedpartial.name=Солнце частично видимо +gui.status.check_pending.name=Ожидание проверки +gui.status.check_starting.name=Проверка начата +gui.status.checking_seal.name=Проверка герметичности +gui.status.collecting.name=Сбор +gui.status.collectingenergy.name=Сбор энергии +gui.status.compressing.name=Сжатие +gui.status.disabled.name=Отключено +gui.status.fulltank.name=Кислородный баллон заполнен +gui.status.generating.name=Создание +gui.status.hull_heat.name=Нагрев корпуса +gui.status.idle.name=Простой +gui.status.missingleaves.name=Отсутствуют блоки листвы +gui.status.missingoxygen.name=Отсутствует кислород +gui.status.missingpower.name=Отсутствует энергия +gui.status.missingpower.short.name=Нет питания +gui.status.missingtank.name=Отсутствует кислородный баллон +gui.status.nofuel.name=Нет топлива для загрузки! +gui.status.noinvtarget.name=Отсутствует инвентарь у цели! +gui.status.noitems.name=Нет предметов для загрузки! +gui.status.nooil.name=Нет нефти +gui.status.not_available.name=Н/Д +gui.status.not_generating.name=Не создаётся +gui.status.notargetload.name=Отсутствует цель для загрузки! +gui.status.notargetunload.name=Отсутствует цель для разгрузки! +gui.status.off.name=Выкл. +gui.status.on.name=Вкл. +gui.status.raining.name=Дождь +gui.status.ready.name=Готово +gui.status.refining.name=Очищение +gui.status.running.name=Работает +gui.status.sealed.name=Герметично +gui.status.sealerblocked.name=Выходное вентиляционное отверстие заблокировано! +gui.status.sun_visible.name=Видимость солнца +gui.status.tank_empty.name=Кислородный баллон пуст +gui.status.targetempty.name=Транспорт пуст! +gui.status.targetfull.name=Транспорт заполнен! +gui.status.unknown.name=Неизвестно +gui.status.unsealed.name=Зона слишком большая / Не герметичная +gui.tank.oxygen_remaining=Осталось кислорода +gui.telemetry_fail.message=Сначала вам нужно отследить сущность, используя этот частотный модуль! (Или надеть его!) +gui.telemetry_fail_no_frequency_module.message=Вам нужно взять частотный модуль в руки! +gui.telemetry_fail_wearing_it.message=Вам нужно снять частотный модуль, если вы хотите соединить его с телеметрическим блоком! +gui.telemetry_succeed.message=Телеметрическое соединение создано. +gui.thermal_slot.desc.0=Слот для Теплового контроллера. Положите +gui.thermal_slot.desc.1='Тепловой контроллер' сюда (необязательно). +gui.thermal_slot.desc.2=Примечание: Потребляет больше энергии. +gui.title.air_lock.name=Контроллер воздушного шлюза игрока %s +gui.tracking.message=Отслеживание активировано. Теперь вам нужно нажать ПКМ по телеметрическому блоку, чтобы завершить соединение. +gui.village.warning.no_freq_mod=Вам нужен частотный модуль, чтобы общаться с ними! +gui.warning.invalid_thermal=Неправильная тепловая защита! +gui.warning.noroom=Недостаточно места! +gui.warning=ОПАСНОСТЬ! +item.air_fan.name=Вентилятор +item.air_vent.name=Вентиляционный клапан +item.basic_item.ambient_thermal_controller.name=Тепловой контроллер +item.basic_item.canned_food.name=Консервированная еда +item.basic_item.compressed_aluminum.name=Сжатый алюминий +item.basic_item.compressed_bronze.name=Сжатая бронза +item.basic_item.compressed_copper.name=Сжатая медь +item.basic_item.compressed_iron.name=Сжатое железо +item.basic_item.compressed_steel.name=Сжатая сталь +item.basic_item.compressed_tin.name=Сжатое олово +item.basic_item.dehydrated_apple.name=Сублимированные яблоки +item.basic_item.dehydrated_carrot.name=Сублимированная морковь +item.basic_item.dehydrated_melon.name=Сублимированные арбузы +item.basic_item.dehydrated_potato.name=Сублимированный картофель +item.basic_item.frequency_module.name=Частотный модуль +item.basic_item.ingot_aluminum.name=Алюминиевый слиток +item.basic_item.ingot_bronze.name=Бронзовый слиток +item.basic_item.ingot_copper.name=Медный слиток +item.basic_item.ingot_steel.name=Стальной слиток +item.basic_item.ingot_tin.name=Оловянный слиток +item.basic_item.raw_silicon.name=Неочищенный кремний +item.basic_item.solar_module_0.name=Одиночный солнечный модуль +item.basic_item.solar_module_1.name=Целая солнечная панель +item.basic_item.wafer_advanced.name=Улучшенная полупроводниковая пластина +item.basic_item.wafer_basic.name=Основная полупроводниковая пластина +item.basic_item.wafer_solar.name=Синяя солнечная полупроводниковая пластина +item.battery.name=Аккумулятор +item.bucket_fuel.name=Ведро топлива +item.bucket_oil.name=Ведро нефти +item.buggy.name=Багги +item.buggymat.seat.name=Сиденье багги +item.buggymat.storage.name=Контейнер багги +item.buggymat.wheel.name=Колесо багги +item.canister.copper.name=Медная канистра +item.canister.tin.name=Оловянная канистра +item.canvas.name=Холст +item.cheese_block.name=Блок сыра +item.cheese_curd.name=Сырок +item.compressed_meteoric_iron.name=Сжатое метеоритное железо +item.dungeonfinder.name=Локатор сокровищниц +item.empty_liquid_canister.name=Пустая жидкостная канистра +item.emergency_kit.description=Используйте (по умолчанию ПКМ), чтобы надеть кислородное оборудование и получить другие необходимые вещи. Одноразовый! +item.emergency_kit.name=Космический самоспасатель +item.engine.tier1booster.name=Ускоритель 1-го уровня +item.engine.tier1engine.name=Ракетный двигатель 1-го уровня +item.flag.name=Флаг +item.food.cheese_slice.name=Ломтик сыра +item.food.burger_bun.name=Булочка для бургера +item.food.beef_patty_raw.name=Говяжий фарш +item.food.beef_patty_cooked.name=Говяжья котлета +item.food.cheeseburger.desc=Астронавты любят чизбургеры! Очень сытная еда. +item.food.cheeseburger.name=Чизбургер +item.food.canned_beef.name=Говяжья тушёнка +item.fuel.name=Ракетное топливо +item.fuel_canister.name=Полная канистра топлива +item.fuel_canister_partial.name=Неполная канистра топлива +item.heavy_plating.name=Сверхпрочная пластина +item.hot_description.name=Поджигает на +item.ic2compat.ore_crushed_alu.name=Измельчённая алюминиевая руда +item.ic2compat.ore_purified_alu.name=Очищенная измельчённая алюминиевая руда +item.ic2compat.dust_alu.name=Алюминиевая пыль +item.ic2compat.dust_small_titanium.name=Маленькая кучка титановой пыли +item.infinite_battery.name=Бесконечный аккумулятор +item.infinite_oxygen.name=Бесконечный кислородный баллон +item.key.t1.name=Ключ от подземелья 1-го уровня +item.lunar_sapphire.description=Лунный сапфир используется при торговле с Инопланетными жителями +item.lunar_sapphire.name=Лунный сапфир +item.meteor_chunk.name=Бросаемый метеоритный кусок +item.meteor_chunk_hot.name=Бросаемый метеоритный кусок +item.meteoric_iron_ingot.name=Слиток метеоритного железа +item.meteoric_iron_raw.name=Необработанное метеоритное железо +item.nose_cone.name=Головной обтекатель +item.oil_canister.name=Полная канистра нефти +item.oil_canister_partial.name=Неполная канистра нефти +item.oil_extractor.name=Портативный нефтяной экстрактор +item.oxygen_concentrator.name=Кислородный концентратор +item.oxygen_gear.name=Кислородное оборудование +item.oxygen_mask.name=Кислородная маска +item.oxygen_tank_heavy_empty.name=Пустой большой кислородный баллон +item.oxygen_tank_heavy_full.name=Большой кислородный баллон +item.oxygen_tank_light_empty.name=Пустой малый кислородный баллон +item.oxygen_tank_light_full.name=Малый кислородный баллон +item.oxygen_tank_med_empty.name=Пустой средний кислородный баллон +item.oxygen_tank_med_full.name=Средний кислородный баллон +item.parachute_black.name=Чёрный парашют +item.parachute_blue.name=Голубой парашют +item.parachute_brown.name=Коричневый парашют +item.parachute_darkblue.name=Синий парашют +item.parachute_darkgray.name=Серый парашют +item.parachute_darkgreen.name=Зелёный парашют +item.parachute_gray.name=Светло-серый парашют +item.parachute_lime.name=Лаймовый парашют +item.parachute_magenta.name=Пурпурный парашют +item.parachute_orange.name=Оранжевый парашют +item.parachute_pink.name=Розовый парашют +item.parachute_plain.name=Парашют +item.parachute_purple.name=Фиолетовый парашют +item.parachute_red.name=Красный парашют +item.parachute_teal.name=Бирюзовый парашют +item.parachute_yellow.name=Жёлтый парашют +item.rocket_fins.name=Ракетный стабилизатор +item.rocket_t1.name=Ракета 1-го уровня +item.schematic.name=Схема для верстака NASA +item.sensor_glasses.name=Очки с сенсорами +item.sensor_lens.name=Сенсорные линзы +item.standard_wrench.name=Обычный гаечный ключ +item.steel_axe.name=Стальной топор +item.steel_boots.name=Стальные ботинки +item.steel_chestplate.name=Стальной нагрудник +item.steel_helmet.name=Стальной шлем +item.steel_hoe.name=Стальная мотыга +item.steel_leggings.name=Стальные поножи +item.steel_pickaxe.name=Стальная кирка +item.steel_pole.name=Стальной шест +item.steel_shovel.name=Стальная лопата +item.steel_sword.name=Стальной меч +item.tier1.desc=1-ый уровень +item_desc.powerdraw.name=Требуется энергии: %s /сек +item_desc.shift.name=Нажмите %s для подробной информации +item_group.galacticraft_blocks=Galacticraft: Блоки +item_group.galacticraft_items=Galacticraft: Предметы +jei.arc_lamp.info=Очень яркий свет с лицевой стороны. Для лучшего эффекта размещайте на высоте! Вращается с помощью Гаечного ключа. +jei.electric_compressor.info=Электрическая версия угольного компрессора. Работает в 2 раза быстрее! Скорость сжатия увеличивается при подключении к энергосистеме 2-го уровня. Для загрузки или выгрузки предметов может быть использована воронка. +jei.electric_compressor.appeng.info=Для автоматизации с помощью Applied Energetics 2 используйте в рецептах слитки из двух разных модификаций. Посетите страницу https://goo.gl/BwY15G для более подробной информации. +jei.fluid_pipe.info=Труба для передачи любых жидкостей или газов. Для выкачивания жидкости из жидкостного резервуара используйте Гаечный ключ на трубе, чтобы перевести её в «выталкивающий режим». \nТруба в выталкивающем режиме не может заполнять жидкостный резервуар или устройство, поэтому трубы должны быть длиной как минимум в 2 блока. +jei.fuel_loader.info=Поставьте рядом со Взлётной площадкой. Заправляет любую ракету, стоящую на площадке. Необходим для любого полёта в космос - в том числе для полёта домой! +jei.magnetic_crafting.info=Верстак, сохраняющий положенные в него предметы. Может принимать предметы из воронки для автоматического создания по последнему успешно использованному рецепту. +jei.oxygen_collector.info=Собирает дыхательную кислородную смесь из воздуха в обычном мире или (в космосе) с близлежащих листвы или зелени на грядках. \nПерекачивайте кислород по трубам в Кислородный компрессор, чтобы заполнить баллоны, в Кислородный герметизатор или Распределитель кислородных пузырей. +jei.oxygen_distributor.info=Создаёт кислородный пузырь в космосе, где игроки (и другие существа) могут дышать. Снабжайте его кислородной дыхательной смесью из Кислородного сборщика или Кислородного хранилища. +jei.oxygen_sealer.info=Заполняет одну комнату на вашей космической базе пригодной для дыхания атмосферой. Снабжайте его кислородной дыхательной смесью из Кислородного сборщика или Кислородного хранилища. Все стены в комнате должны быть герметичными. \nИщите утечки с помощью Сенсорных очков! \nМаксимальный размер комнаты для одного герметизатора - 10x10x8 блоков. Используй несколько Герметизаторов для больших помещений. +jei.wrench.info=Большинство устройств в Galacticraft можно вращать, используя (по умолчанию ПКМ) на них Обычный гаечный ключ. \nПри удержании Shift во время использования ключа, для большей части электрических машин можно менять стороны, на которых находятся энергетические или иные входы и выходы. +keybind.map.name=Галактическая карта +keybind.sensortoggle.name=Переключить режим Очков с сенсорами +keybind.spaceshipinv.name=Открыть инвентарь космического корабля +keybind.vehiclebackward.name="Назад" для транспорта +keybind.vehicledown.name="Вниз" для транспорта +keybind.vehicleforward.name="Вперёд" для транспорта +keybind.vehicleleft.name="Влево" для транспорта +keybind.vehicleright.name="Вправо" для транспорта +keybind.vehicleup.name="Вверх" для транспорта +moon.moon=Луна +newversion.failed.name=Проверка обновлений для Galacticraft провалилась! Следующая попытка произойдёт через 15 секунд. +newversion.success.name=Найдена новая версия Galacticraft: +planet.jupiter=Юпитер +planet.mercury=Меркурий +planet.neptune=Нептун +planet.overworld=Земля +planet.saturn=Сатурн +planet.uranus=Уран +planet.venus=Венера +satellite.spacestation.overworld=Космическая станция Земли +schematic.moonbuggy.name=Лунный багги +schematic.rocket_t1.name=Ракета 1-го уровня +schematic.rocket_t2.name=Ракета 2-го уровня +solarsystem.sol=Солнце +star.sol=Солнце +tile.air_lock_controller.name=Контроллер воздушного шлюза +tile.air_lock_frame.description=Блоки каркаса воздушного шлюза, расположенные в форме портала, с одним заменённым на контроллер блоком, будут функционировать как Воздушный шлюз. +tile.air_lock_frame.name=Каркас воздушного шлюза +tile.air_lock_seal.name=Уплотнитель воздушного шлюза +tile.aluminum_wire.alu_wire.description=Алюминиевый провод используется для подключения источников энергии к механизмам, которые используют энергию. +tile.aluminum_wire.alu_wire.name=Алюминиевый провод +tile.aluminum_wire.alu_wire_heavy.description=Толстый алюминиевый провод используется для подключения источников энергии к механизмам, которые используют энергию. За счет большей проводимости ускоряет механизмы 2-го уровня. +tile.aluminum_wire.alu_wire_heavy.name=Толстый алюминиевый провод +tile.aluminum_wire.alu_wire_switch.description=Управляемый алюминиевый провод присоединяется как обычный Алюминиевый провод, если не выключен сигналом красного камня. +tile.aluminum_wire.alu_wire_switch.name=Управляемый алюминиевый провод +tile.aluminum_wire.alu_wire_switch_heavy.description=Управляемый толстый алюминиевый провод присоединяется как обычный Толстый алюминиевый провод, если не выключен сигналом красного камня. +tile.aluminum_wire.alu_wire_switch_heavy.name=Управляемый толстый алюминиевый провод +tile.arclamp.description=Дуговые лампы используются для освещения большой территории, также заставляют большинство монстров убегать. +tile.arclamp.name=Дуговая лампа +tile.basic_block_core.block_aluminum_gc.name=Алюминиевый блок +tile.basic_block_core.block_copper_gc.name=Медный блок +tile.basic_block_core.block_meteoric_iron_gc.name=Блок метеоритного железа +tile.basic_block_core.block_tin_gc.name=Оловянный блок +tile.basic_block_core.block_silicon_gc.name=Кремниевый блок +tile.basic_block_core.deco_block_0.name=Декоративный оловянный блок +tile.basic_block_core.deco_block_1.name=Декоративный оловянный блок +tile.basic_block_core.ore_aluminum_gc.name=Алюминиевая руда +tile.basic_block_core.ore_copper_gc.name=Медная руда +tile.basic_block_core.ore_silicon.name=Кремниевая руда +tile.basic_block_core.ore_tin_gc.name=Оловянная руда +tile.basic_block_moon.bricks.name=Кирпич лунной сокровищницы +tile.basic_block_moon.cheesestone.name=Сырная руда +tile.basic_block_moon.coppermoon.name=Медная руда +tile.basic_block_moon.moondirt.name=Лунный грунт +tile.basic_block_moon.moongrass.name=Лунный реголит +tile.basic_block_moon.moonstone.name=Лунный камень +tile.basic_block_moon.sapphiremoon.name=Сапфировая руда +tile.basic_block_moon.tinmoon.name=Оловянная руда +tile.buggy_pad.description=Заправочная платформа при размещении блоков квадратом 3x3 позволит багги на платформе заправиться с помощью Загрузчика топлива. Не может быть использована для запуска ракет! +tile.cargo.loader.name=Грузовой загрузчик +tile.cargo.unloader.name=Грузовой разгрузчик +tile.cargo_loader.description=Грузовой загрузчик будет передавать блоки и предметы в ракеты и другую технику с грузовым хранилищем. Должен быть подключён к Взлётной/Заправочной площадке. +tile.cargo_unloader.description=Грузовой разгрузчик будет забирать блоки и предметы из ракет и другой техники с грузовым хранилищем. Должен быть подключён к Взлётной/Заправочной площадке. +tile.cheese.description=Сырные блоки создаются из Лунного сыра, их можно поставить в мире или съесть. +tile.cheese.name=Блок сыра +tile.circuit_fabricator.description=Производитель микросхем будет перерабатывать основные материалы в кремниевые пластины, которые используются для улучшенных механизмов. +tile.coal_generator.description=Угольный генератор будет просто сжигать уголь для выработки энергии. Простейший, но наименее эффективный метод получения энергии. +tile.collector.description=Кислородный сборщик будет собирать кислород, получаемый из ближайшей листвы. +tile.collector.name=Кислородный сборщик +tile.compressor.description=Компрессор будет перерабатывать слитки в их сжатые эквиваленты. Самая необходимая машина в Galacticraft! +tile.compressor_electric.description=Электрический компрессор будет перерабатывать слитки в их сжатые эквиваленты. Сжимает сразу две пластины, что делает его более эффективным, чем предшественника. +tile.compressor_advanced.description=Более быстрая версия Электрического компрессора. Моментально перерабатывает слитки в их сжатые эквиваленты. +tile.concealed_detector.name=Детектор игроков +tile.concealed_redstone.name=Скрытый красный провод +tile.concealed_repeater.name=Скрытый повторитель красного камня +tile.crude_oil.name=Нефть +tile.crude_oil_moving.name=Неочищенная нефть +tile.crude_oil_still.name=Неочищенная нефть +tile.deconstructor.description=Деконструктор разберет ваши старые ракеты и другие предметы, возвращая любые первоначальные материалы. +tile.dishbase.description=Антенна связи может отслеживать положение космических станций и получать сообщения с удалённых космических баз. +tile.dishbase.name=Антенна связи +tile.distributor.description=Распределитель кислорода будет испускать наружу кислородный пузырь от центрального блока, используя внутреннее хранилище. Это позволит дышать внутри пузыря. +tile.distributor.name=Распределитель кислородного пузыря +tile.dummyblock.cryogenic_chamber.name=Криогенная камера +tile.dummyblock.launch_pad.name=Взлётная площадка +tile.dummyblock.nasa_workbench.name=Верстак NASA +tile.dummyblock.solar.name=Солнечная панель +tile.dummyblock.space_station_base.name=Основание космической станции +tile.electric_furnace_tier1.description=Электропечь используется как более быстрая альтернатива обычным угольным печам. +tile.electric_furnace_tier2.description=Дуговая печь используется как более быстрая альтернатива обычным угольным и электрическим печам. Удваивает выход слитков с руд! +tile.emergency_box.description=Разместите Спасательную станцию рядом с местом вашего первого приземления на планете. Откройте, чтобы найти Самоспасатель внутри. Также отпугивает монстров! +tile.emergency_box.filled.name=Спасательная станция (с Самоспасателем) +tile.emergency_box.name=Спасательная станция +tile.enclosed.aluminum_wire.name=Герметичный алюминиевый провод +tile.enclosed.copper_cable.name=Герметичный медный провод +tile.enclosed.description=Герметичные блоки следует использовать в местах, где не должен проходить воздух (например, в стенах космических баз). +tile.enclosed.fluid_pipe.name=Герметичная жидкостная труба +tile.enclosed.glass_fibre_cable.name=Герметичный стекловолоконный провод +tile.enclosed.gold_cable.name=Герметичный золотой провод +tile.enclosed.hv_cable.name=Герметичный высоковольтный провод +tile.enclosed.lv_cable.name=Герметичный оловянный провод +tile.enclosed.heavy_aluminum_wire.name=Герметичный толстый алюминиевый провод +tile.enclosed.me_cable.name=Герметичный МЭ провод +tile.enclosed.pipe_fluids_cobblestone.name=Герметичная булыжниковая жидкостная труба +tile.enclosed.pipe_fluids_stone.name=Герметичная каменная жидкостная труба +tile.enclosed.pipe_items_cobblestone.name=Герметичная булыжниковая транспортная труба +tile.enclosed.pipe_items_stone.name=Герметичная каменная транспортная труба +tile.enclosed.pipe_power_gold.name=Герметичная золотая энергетическая труба +tile.enclosed.pipe_power_stone.name=Герметичная каменная энергетическая труба +tile.energy_storage_module_tier1.description=Хранилище энергии используется для хранения большого кол-ва энергии. +tile.energy_storage_module_tier2.description=Энергетический массив используется для хранения огромного кол-ва энергии. Хранит и выводит больше энергии, чем его предшественник. +tile.fallen_meteor.description=Упавшие метеориты можно найти на многих планетах/лунах с разрежённой или отсутствующей атмосферой. Дают необработанное метеоритное железо. +tile.fallen_meteor.name=Упавший метеорит +tile.fluid_pipe.description=Жидкостная труба передает жидкости и газы от источника к месту назначения. Гаечный ключ используется для переключения режимов. +tile.fluid_pipe.name=Жидкостная труба +tile.fluid_pipe_pull.description=Жидкостная труба передает жидкости и газы от источника к месту назначения. Гаечный ключ используется для переключения режимов. +tile.fluid_pipe_pull.name=Жидкостная труба +tile.fluid_tank.description=Жидкостный резервуар хранит жидкости и газы для последующего использования. +tile.fluid_tank.name=Жидкостный резервуар +tile.fuel.name=Топливо +tile.fuel_block.name=Топливо +tile.fuel_loader.description=После подключения к Взлётной или Заправочной площадке Загрузчик топлива зальёт топливо в подключённую ракету или другую технику. +tile.fuel_loader.name=Загрузчик топлива +tile.glowstone_torch.description=Факел из светящегося камня лучше всего использовать для освещения областей, где нет кислорода для горения обычных факелов. +tile.glowstone_torch.name=Факел из светящегося камня +tile.grating.name=Решётка +tile.landing_pad.buggy_fueler.name=Заправочная платформа для багги +tile.landing_pad.cargo_pad.name=Платформа для Грузовой ракеты +tile.landing_pad.description=Блоки взлётной площадки, будучи расположены квадратом 3x3, позволяют разместить ракеты. Загрузчики топлива, Грузовые загрузчики и Контроллеры запуска могут быть присоединены. +tile.landing_pad.landing_pad.name=Взлётная площадка +tile.landing_pad_full.name=Взлётная площадка +tile.machine.0.name=Угольный генератор +tile.machine.1.name=Хранилище энергии +tile.machine.2.name=Электропечь +tile.machine.3.name=Компрессор +tile.machine.7.name=Электрическая дуговая печь +tile.machine.8.name=Энергетический массив +tile.machine2.4.name=Электрический компрессор +tile.machine2.5.name=Производитель микросхем +tile.machine2.6.name=Хранилище кислорода +tile.machine2.10.name=Деконструктор +tile.machine3.9.name=Художник +tile.machine4.11.name=Улучшенный компрессор +tile.magnetic_table.name=Магнитный верстак +tile.magnetic_table.description=При выходе из Магнитного верстака сохраняет предметы, положенные в него. Принимает предметы при нажатии Shift+ЛКМ. Для загрузки и извлечения предметов могут быть использованы воронки - верстак попытается задействовать последний запомненный рецепт. +tile.moon_stairs_brick.name=Ступеньки из кирпича лунной сокровищницы +tile.moon_stairs_stone.name=Ступеньки из лунного камня +tile.ore_copper.name=Медная руда +tile.ore_tin.name=Оловянная руда +tile.oxygen_compressor.0.name=Кислородный компрессор +tile.oxygen_compressor.1.name=Кислородный декомпрессор +tile.oxygen_compressor.description=Кислородный компрессор будет загружать кислород из внутреннего хранилища в Кислородный баллон. +tile.oxygen_decompressor.description=Кислородный декомпрессор будет разгружать кислород во внутреннее хранилище из Кислородного баллона. +tile.oxygen_detector.description=Кислородный датчик будет излучать сигнал красного камня, когда вокруг него будет кислород. +tile.oxygen_detector.name=Кислородный датчик +tile.oxygen_storage_module.description=Хранилище кислорода используется для хранения большого кол-ва кислорода. +tile.painter.description=Художник красит ваши Вакуумное стекло, Светящиеся панели и другие объекты. Используйте любой блок или краситель, чтобы задать новый цвет. +tile.panel_lighting.description=Светящаяся панель для использования в космосе! Ключ вращает её. Чтобы изменить внешний вид, присядьте и используйте панель на выбранном блоке. +tile.panel_lighting_0.name=Светящаяся панель (квадратная) +tile.panel_lighting_1.name=Светящаяся панель (точечная) +tile.panel_lighting_2.name=Светящаяся панель (линейная) +tile.panel_lighting_3.name=Светящаяся панель (тёмная) +tile.panel_lighting_4.name=Светящаяся панель (тёмная) +tile.parachest.description=Сундуки с парашютом будут падать с неба после посадки на некоторые планеты / луны, такие как Земля. Содержат ракету, топливо и груз, сохранённый с предыдущего запуска. +tile.parachest.name=Сундук с парашютом +tile.platform.description=Поставьте 4 блока для формирования платформы. Платформа перемещает игрока к следующей платформе вверху или внизу. Присядьте, чтобы спуститься, прыгните, чтобы подняться. +tile.platform.name=Гидравлическая платформа +tile.refinery.description=Очистительный завод будет принимать нефть и энергию, а потом выдавать топливо, используемое для ракет и транспорта. +tile.refinery.name=Очистительный завод +tile.compact_workbench.name=Компактный верстак NASA +tile.compact_workbench.description=Компактный вариант верстака NASA. +tile.rocket_workbench.name=Верстак NASA +tile.rocket_workbench.description=Верстак NASA используется для создания множества улучшенных деталей и техники. Новые схемы могут быть добавлены, как только они были найдены. +tile.sapling2.birch.name=Саженец берёзы +tile.sapling2.jungle.name=Саженец тропического дерева +tile.sapling2.oak.name=Саженец дуба +tile.sapling2.spruce.name=Саженец сосны +tile.sealer.description=Герметизатор кислорода будет искать замкнутое пространство. Если таковое найдено, оно заполнится воздухом. +tile.sealer.name=Герметизатор кислорода +tile.slab_gc_half.moon_bricks_slab.name=Плита из кирпича лунной сокровищницы +tile.slab_gc_half.moon_slab.name=Плита из лунного камня +tile.slab_gc_half.tin_slab_1.name=Декоративная оловянная плита +tile.slab_gc_half.tin_slab_2.name=Декоративная оловянная плита +tile.solar.advanced_solar.name=Улучшенная солнечная панель +tile.solar.basic_solar.name=Основная солнечная панель +tile.solar_adv.description=Улучшенные солнечные панели будут получать энергию из солнца, сохраняя её. Автоматически регулируют угол панели для оптимального получения энергии. +tile.solar_basic.description=Основные солнечные панели будут получать энергию из солнца, сохраняя её. Больше всего энергии получают в середине дня (нельзя настроить). +tile.space_glass.description=Вакуумное стекло для ваших космических баз! Красится в любой цвет с помощью ближайшего Художника. +tile.space_glass.clear.description=Прозрачное вакуумное стекло с великолепным видом из космоса! А также отличная видимость под водой. +tile.space_glass.strong.description=Прочное и ударостойкое вакуумное стекло. Изготовлено из прозрачного алюминия. +tile.space_glass_clear.name=Вакуумное стекло (прозрачное) +tile.space_glass_vanilla.name=Вакуумное стекло +tile.space_glass_strong.name=Вакуумное стекло (прочное) +tile.space_station_base.name=Основание космической станции +tile.spin_thruster.description=Вращающие двигатели используются для вращения космических станций. +tile.spin_thruster.name=Вращающий двигатель +tile.telemetry.description=Собирает полезные данные с присоединённых ракет, игроков и мобов. Лучше всего размещать рядом с экраном отображения. Используйте частотный модуль, чтобы установить передачу данных. +tile.telemetry.name=Телеметрический блок +tile.tin_stairs_1.name=Декоративные оловянные ступеньки +tile.tin_stairs_2.name=Декоративные оловянные ступеньки +tile.treasure_chest.description=Сундуки с сокровищами 1-го уровня будут генерироваться в сокровищницах Луны. Их можно открыть после победы над финальным боссом. +tile.treasure_chest.name=Сундук с сокровищами +tile.unlit_torch.name=Факел +tile.unlit_torch_stone.name=Каменный факел +tile.unlit_torch_lit.name=Факел +tile.unlit_torch_stone_lit.name=Каменный факел +tile.view_screen.description=Экраны отображения добавят последний штрих вашей космической базе. ПКМ изменяет отображаемую информацию. +tile.view_screen.name=Экран отображения +tile.wall_gc.moon.name=Стена из лунного камня +tile.wall_gc.moon_bricks.name=Стена из кирпича лунной сокровищницы +tile.wall_gc.tin.name=Декоративная оловянная стена + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=Исследуйте Луну... и не только! +advancement.galacticraft.coal_generator.title=Сила угля +advancement.galacticraft.coal_generator.description=Создайте Угольный генератор +advancement.galacticraft.circuit_fabricator.title=Произведено +advancement.galacticraft.circuit_fabricator.description=Создайте Производитель микросхем для изготовления полупроводниковых пластин +advancement.galacticraft.basic_wafer.title=Вкусные вафли +advancement.galacticraft.basic_wafer.description=Создайте Основную полупроводниковую пластину. (Пожалуйста, не ешьте её - она кремниевая) +advancement.galacticraft.advanced_wafer.title=Золотые вафли +advancement.galacticraft.advanced_wafer.description=Создайте Улучшенную полупроводниковую пластину (Вам всё ещё не стоит её есть!) +advancement.galacticraft.compressor.title=Сжато +advancement.galacticraft.compressor.description=Создайте Компрессор +advancement.galacticraft.solar.title=Бесплатная энергия +advancement.galacticraft.solar.description=Создайте Основную солнечную панель +advancement.galacticraft.advanced_solar.title=Быстро и Эффективно +advancement.galacticraft.advanced_solar.description=Создайте Улучшенную солнечную панель +advancement.galacticraft.electric_compressor.title=Электрическое улучшение +advancement.galacticraft.electric_compressor.description=Создайте Электрический компрессор +advancement.galacticraft.oil.title=Липкая субстанция +advancement.galacticraft.oil.description=Упадите в нефть +advancement.galacticraft.refiery.title=Время нефтепереработки! +advancement.galacticraft.refiery.description=Создайте Очистительный завод +advancement.galacticraft.rocket_fuel.title=Ракетное топливо +advancement.galacticraft.rocket_fuel.description=Переработайте нефть в Очистительном заводе +advancement.galacticraft.oxygen_collector.title=Кислород не прилагается +advancement.galacticraft.oxygen_collector.description=Создайте Кислородный сборщик +advancement.galacticraft.oxygen_compressor.title=Сжать воздух +advancement.galacticraft.oxygen_compressor.description=Создайте Кислородный компрессор +advancement.galacticraft.fill_tank.title=Есть воздух +advancement.galacticraft.fill_tank.description=Заполните Кислородный баллон +advancement.galacticraft.fill_all_tanks.title=Кислородный запас +advancement.galacticraft.fill_all_tanks.description=Заполните каждый тип кислородного баллона +advancement.galacticraft.all_oxygen_gear.title=Все готово +advancement.galacticraft.all_oxygen_gear.description=Создайте все, что вам нужно, чтобы дышать в космосе +advancement.galacticraft.rocket_workbench.title=Космический инженер +advancement.galacticraft.rocket_workbench.description=Создайте Верстак NASA +advancement.galacticraft.rocket_t1.title=У нас есть ракета! +advancement.galacticraft.rocket_t1.description=Собрать ракету +advancement.galacticraft.fuel_loader.title=Заправь её! +advancement.galacticraft.fuel_loader.description=Создайте Загрузчик топлива +advancement.galacticraft.launch_rocket.title=Прошёл контакт подъёма! +advancement.galacticraft.launch_rocket.description=Запустите свою первую ракету +advancement.galacticraft.moon.title=Луна! +advancement.galacticraft.moon.description=Прилунитесь +advancement.galacticraft.create_space_station.title=Космическая станция +advancement.galacticraft.create_space_station.description=Создайте свою космическую станцию! +advancement.galacticraft.spin_thruster.title=Круууужжжится голова +advancement.galacticraft.spin_thruster.description=Создайте Вращающий двигатель +advancement.galacticraft.moon_dungeon.title=Хуже иссушителя +advancement.galacticraft.moon_dungeon.description=Найдите Эволюционировавшего скелета-босса в сокровищнице +advancement.galacticraft.dungeon_key_moon.title=У меня есть ключ +advancement.galacticraft.dungeon_key_moon.description=Убейте босса, скрывающегося в сокровищнице, и украдите его ключ +advancement.galacticraft.moon_buggy_schematic.title=Глючная схема +advancement.galacticraft.moon_buggy_schematic.description=Получите схему §oлунного багги +advancement.galacticraft.moon_buggy.title=Багги +advancement.galacticraft.moon_buggy.description=Соберите лунный багги diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/sv_se.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/sv_se.lang new file mode 100644 index 00000000..353a6529 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/sv_se.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count= Antalet aktiva astrobrytare %s har är %s +commands.dimensionteleport=%s teleporterades till en annan himlakropp%s +commands.dimensiontp.too_many=För många argument! Användning: %s +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s +commands.joinrace.no_team=Okänt organisationsnamn. Användning: %s +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! +commands.ssinvite.wrong_usage=Argument saknas! Användning: %s +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Kan inte hitta spelare med användarnamn %s på din rymdstationslista! +container.cargoloader.name=Pålastare +container.cargounloader.name=Urlastare +container.fuelloader.name=Bränslepump +container.lander.name=Månlandare +container.oxygencollector.name=Syrgasutvinnare +container.oxygencompressor.name=Syrgastapp +container.oxygendecompressor.name=Syrgaskompressor +container.oxygendistributor.name=Luftbubbelmaskin +container.oxygensealer.name=Andningsklimatsystem +container.parachest.name=Fallskärmskista +container.refinery.name=Oljeraffinaderi +container.solaradvanced.name=Avancerad solpanel +container.solarbasic.name=Enkel solpanel +container.spaceship.name=N1-raket +container.treasurechest.name=Skattkista +death.attack.oxygen_suffocation=%1$s fick slut på syre! +death.attack.spaceship_crash=%1$s kan ha varit utslagen eller medvetet störtat rymdfarkosten. +death.attack.thermal=%1$s avsaknade temperaturkontroll. +dimension.moon.name=Månen +dimension.overworld.name=Midgård +dimension.sun.name=Solen +entity.alien_villager.name=Utomjordisk bybo +entity.buggy.name=Månbil +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Rymdsmygare +entity.evolved_skeleton.name=Rymdskelett +entity.evolved_skeleton_boss.name=Månhålehärskare +entity.evolved_spider.name=Rymdspindel +entity.evolved_zombie.name=Rymdzombie +entity.flag.name=Flagga +entity.gcflag.name=Flagga +entity.gravity_arrow.name=Pil +entity.lander.name=Månlandare +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteorsten +entity.oxygen_bubble.name=Luftbubbla +entity.para_chest.name=Fallskärmskista +entity.rocket_t1.name=Rymdskepp +galaxy.milky_way=Vintergatan +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Set Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Batterifack. Placera ett batteri här +gui.battery_slot.desc.1=eller koppla en extern strömkälla +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Gasa +gui.buggy.decel.name=Backa +gui.buggy.inv.name=Koffert +gui.buggy.storage_space=Lastutrymme +gui.buggy.turn.name=Styr höger-vänster +gui.button.back.name=Föreg. +gui.button.disable.name=Stäng av +gui.button.disableseal.name=Stäng av +gui.button.enable.name=Starta +gui.button.enableseal.name=Starta +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name=Tanka +gui.button.loaditems.name=Lasta +gui.button.next.name=Nästa +gui.button.refine.name=Arbetar +gui.button.stoploading.name=Stäng av +gui.button.stoprefine.name=Stäng av +gui.button.stopunloading.name=Stäng av +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name=Lasta ur +gui.button.unlockschematic.name=Läs in ritning +gui.checkbox.horizontal.name=Horisontellt läge +gui.checkbox.invert.name=Kasta om inställning +gui.checkbox.player_name.name=Spelarnamn +gui.checkbox.player_within.name=Spelare inom +gui.checkbox.redstone_signal.name=Öppna på rödstensignal +gui.chest.warning.wrongkey=En speciell nyckel (nivå %s) behövs. Den borde finnas här någonstans på samma himlakropp... +gui.choose_planet.desc.moon=Habitable#No Oxygen#Gravity: 18% +gui.choose_planet.desc.overworld=Full of Life#Habitable#Gravity: 100% +gui.chooseplanet.alreadycreated1.name=Rymdstation redan +gui.chooseplanet.alreadycreated2.name=skapad! +gui.chooseplanet.cannotcreate1.name=Kan inte skapa +gui.chooseplanet.cannotcreate2.name=rymdstation här! +gui.creative_only.desc=Avsett för kreativt spelläge +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Aktuell hastighet +gui.docking_rocket.distance_from.name=Avstånd från mål +gui.docking_rocket.target_vel.name=Målets hastighet +gui.docking_rocket.warning.name.0=Tryck %s för att bromsa +gui.docking_rocket.warning.name.1=Tryck %s för att accelerera +gui.dropbox.player_distance.name.0=1 Meter +gui.dropbox.player_distance.name.1=2 Meters +gui.dropbox.player_distance.name.2=5 Meters +gui.dropbox.player_distance.name.3=10 Meters +gui.electric_compressor.desc.0=Utfört arbete +gui.energy_storage.desc.0=Lagrad energi +gui.energy_storage.desc.1=Mängd +gui.flag.already_placed=En flagga har redan blivit satt här! +gui.frequency_module.desc.0=Känner av svaga ljudvågor +gui.frequency_module.desc.1=samt fjärrläser signaler. +gui.frequencymodule.warning0=Troligen behövs en +gui.frequencymodule.warning1=för att någonting ska kunna höras här. +gui.fuel_output.desc.0=Placera en tom tank här +gui.fuel_output.desc.1=för att tankad från +gui.fuel_output.desc.2=intern bränslebehållare. +gui.fuel_tank.desc.0=Bränsletank. Fylls +gui.fuel_tank.desc.1=med en bränslepump +gui.fuel_tank.desc.2=Intern bränslebehållare. +gui.fuel_tank.desc.3=Kan fyllas med bränsletankar. +gui.fuel_tank.desc.4=Intern bränslebehållare +gui.infinite_item.desc=Oändligt +gui.lander.velocity=Hastighet +gui.lander.velocityu=m/s +gui.lander.warning2=Håll in " +gui.lander.warning3=" för att sakta ner! +gui.max_output.desc=Max. uteffekt +gui.message.addnewsch.name=Läs in ny ritning +gui.message.apply.name=Verkställ +gui.message.assign_name.name=Ange namn +gui.message.atmosphere.name=Atmosphere +gui.message.back.name=Återgå +gui.message.breed.name=Avla +gui.message.bubble_visible.name=Synlig bubbla +gui.message.can_create_space_station.name=En rymdstation kan skapas här! +gui.message.cancel.name=Avbryt +gui.message.cannot_create_space_station.name=En rymdstation kan ej skapas här. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Klicka igen för zoom (granska månar och satelliter) +gui.message.click_again.1.name=Klicka igen för zoom (granska månar) +gui.message.click_again.2.name=Klicka igen för zoom (granska satelliter) +gui.message.click_again.3.name=Klicka igen för zoom +gui.message.clicklink=Klicka här för Galacticraft-wiki +gui.message.create_ss.name=Skapa +gui.message.daynightcycle.name=Day-night Cycle +gui.message.energy=Energi +gui.message.environment.name=Miljöbonus +gui.message.exit.name=Stäng +gui.message.fuel.name=Mängd +gui.message.full.name=full +gui.message.generating.name=Effekt +gui.message.grow.name=Väx +gui.message.heal.name=Hela +gui.message.help1=För allmän hjälp med Galacticraft +gui.message.help1a=För att se detta meddelande igen, skriv +gui.message.help2=För hjälp angående rymdorganisationer +gui.message.help3=För hjälp med olja +gui.message.in.name=In +gui.message.launch.name=Avgå +gui.message.max_energy=Kapacitet +gui.message.meansurfacetemp.name=Mean Surface Temp +gui.message.moon.atmosphere.0.name=None +gui.message.moon.daynightcycle.0.name=29.5 Earth Days +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and +gui.message.moon.surfacecomposition.1.name=Traces of Cheese +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% of Earth) +gui.message.of.name=av +gui.message.oil.name=Mängd +gui.message.out.name=Ut +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen +gui.message.overworld.atmosphere.1.name=Supports life +gui.message.overworld.daynightcycle.0.name=1 Earth Day +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and +gui.message.overworld.surfacecomposition.1.name=gravel +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% of Earth) +gui.message.prelaunch=Startchecklista +gui.message.rename.name=Byt namn +gui.message.select_ss.name=Välj en rymdstation +gui.message.ss_owner.name=Ägare: +gui.message.status.name=Läge +gui.message.strengthen.name=Stärk +gui.message.surfacecomposition.name=Surface Composition +gui.message.surfacegravity.name=Surface Gravity +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=Nivå %d +gui.message.unnamed.name=Odöpt +gui.missing_core.name.0=MicdoodleCore kunde inte hittas i ditt mod-fodral +gui.missing_core.name.1=Galacticraft kunde inte laddas +gui.missing_core.name.2=Avsluta Minecraft och installera MicdoodleCore +gui.missing_core.name.3=Klicka här för att öppna sida för nedladdning +gui.new_schematic.slot.desc.0=Fack för nya ritningar. +gui.new_schematic.slot.desc.1=De kan hittas i slutet +gui.new_schematic.slot.desc.2=av hålor funna på andra +gui.new_schematic.slot.desc.3=himlakroppar +gui.oil_tank.desc.0=Intern oljebehållare. +gui.oil_tank.desc.1=Kan fyllas med oljetankar. +gui.oxygen.warning=Ingen syretillförsel! +gui.oxygen_compressor.slot.desc.0=Syrgastapp. Placera en syrgastank här +gui.oxygen_compressor.slot.desc.1=för påfyllning av nytt andningssyre. +gui.oxygen_decompressor.slot.desc.0=Syrgastömning. Placera en syrgastank +gui.oxygen_decompressor.slot.desc.1=här för att tappa över till maskinen. +gui.oxygen_slot.desc.0=Syrgasfack. Placera en syrgastank här +gui.oxygen_slot.desc.1=eller koppla en extern syrgasledning +gui.oxygen_storage.desc.0=Lagrad syrgas +gui.oxygen_storage.desc.1=Mängd +gui.oxygen_use.desc=Syrgasåtgång +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Hunger +gui.player.health=Hälsa +gui.player.ouch=aj!!! +gui.receiver.cannot_attach=Motagare kan inte sättas här! +gui.requires_controller.desc=Behöver raketfjärrstyrare +gui.rocket.countdown=Nedräkning +gui.rocket.height=Höjd +gui.rocket.inv.name=Lastutrymme +gui.rocket.launch.name=Avfyra +gui.rocket.launched=Avfyrad +gui.rocket.on_launchpad=På raketramp +gui.rocket.speed=Rörelse +gui.rocket.turn.name=Styr höger-vänster +gui.rocket.updown.name=Styr upp-ner +gui.rocket.warning.nofuel=Raketen behöver tankas först! +gui.rocket.warning.nogyroscope=Av oförklarlig anledning har rymdskeppets styrsystem blivit nollställt! +gui.rocket.warning.noparachute=Påminelse: Fallskärm saknas +gui.rocket_type.0=Lastutrymme: 18 +gui.rocket_type.1=Lastutrymme: 36 +gui.rocket_type.2=Lastutrymme: 56 +gui.rocket_type.3=Fulltankad +gui.seconds=s +gui.sensor.advanced=Avancerat läge +gui.sensor.advancedoff=AV +gui.sensor.advancedon=PÅ +gui.show_bubble.desc.0=Visa bubbla +gui.skeleton_boss.message=Striden har upphört! Försök undvik lämna en pågående strid mot hålans härskare. Återvänd för att inleda ny kamp. +gui.space_race.chat.add_success=%s har gått med rymdkapplöpningen! +gui.space_race.chat.already_part=Du är redan med denna rymdorganisation! +gui.space_race.chat.invite_received=%s har bjudit in dig till sin rymdorganisation. +gui.space_race.chat.not_found=Kunde ej hitta spelare med namnet %s +gui.space_race.chat.remove_success=%s har plockats bort från rymdorganisationen +gui.space_race.chat.to_join=För att gå med %s använd kommando %s +gui.space_race.coming_soon=Kommer snart! +gui.space_race.create.add_players.name=Lägg till spelare +gui.space_race.create.back.name=Återgå +gui.space_race.create.brush_radius.name=Penselradie +gui.space_race.create.brush_size.name=Penselstorlek +gui.space_race.create.change_color.name.0=Ändra +gui.space_race.create.change_color.name.1=lagfärg +gui.space_race.create.change_color.name.2=цвет +gui.space_race.create.close.name=Stäng +gui.space_race.create.customize.name=Ändra flagga +gui.space_race.create.eraser_radius.name=Suddradie +gui.space_race.create.eraser_size.name=Suddstorlek +gui.space_race.create.global_stats.name=Global statistik +gui.space_race.create.invite_player.name=Bjud in spelare +gui.space_race.create.player_radius.name=Obs: Spelaren måste vara inom 25 blocks räckvidd! +gui.space_race.create.rem_players.name=Ta bort spelare +gui.space_race.create.remove.name=Ta bort +gui.space_race.create.remove_player.name=Ta bort spelare +gui.space_race.create.rename.name=Döp om lag +gui.space_race.create.send_invite.name=Skicka +gui.space_race.create.server_stats.name=Serverstatistik +gui.space_race.create.title.name=Rymdorganisationsmenu +gui.space_race.create.title.name.0=Rymdorganisations- +gui.space_race.create.title.name.1=meny +gui.space_race.join.member_count.name=%d medlem +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Ägare +gui.space_race.join.title.name=Gå med rymdorganisation +gui.space_race.unnamed=Odöpt lag +gui.spacestation.added=%s har beviljat dig tillgång till sin rymdstation! +gui.spacestation.addsuccess=%s har fått tillgång till denna rymdstation! +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= +gui.spacestation.removesuccess=%s har nekats tillgång till denna rymdstation. +gui.spacestation.to_allow_entry=för att ge tillgång till denna rymdstation. +gui.spacestation.type_command=Skriv +gui.status.active.name=Aktiv +gui.status.air_lock_closed.name=Luftsluss stängd +gui.status.air_lock_open.name=Luftsluss öppen +gui.status.blockedfully.name=Sol skymd +gui.status.blockedpartial.name=Delvist skymd sol +gui.status.check_pending.name=Kontroll pågår +gui.status.check_starting.name=Påbörjar kontroll +gui.status.checking_seal.name=Kontrollerar tätning +gui.status.collecting.name=Utvinner +gui.status.collectingenergy.name=Alstrar ström +gui.status.compressing.name=Smider +gui.status.disabled.name=Inaktiv +gui.status.fulltank.name=Syrgastank full +gui.status.generating.name=Alstrar +gui.status.hull_heat.name=Temperatur +gui.status.idle.name=Inaktiv +gui.status.missingleaves.name=Brist på vegetation +gui.status.missingoxygen.name=Syrgasbrist +gui.status.missingpower.name=Strömbrist +gui.status.missingtank.name=Inaktiv +gui.status.nofuel.name=Bränslebrist +gui.status.noinvtarget.name=Målet saknar lastutrymme +gui.status.noitems.name=Inga föremål att lasta +gui.status.nooil.name=Oljebrist +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Inaktiv +gui.status.notargetload.name=Inget mål att lasta på +gui.status.notargetunload.name=Inget mål att lasta ur +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name=Regnar +gui.status.ready.name=Redo +gui.status.refining.name=Raffinerar +gui.status.running.name=Igång +gui.status.sealed.name=Aktiv +gui.status.sealerblocked.name=Utblås blockerat! +gui.status.sun_visible.name=Direkt solljus +gui.status.tank_empty.name=Syrgastank tom +gui.status.targetempty.name=Målets lastutrymme tomt +gui.status.targetfull.name=Målets lastutrymme fullt +gui.status.unknown.name=Okänd +gui.status.unsealed.name=Område för stort / otätt +gui.tank.oxygen_remaining=Mängd +gui.telemetry_fail.message=Först måste ett objekt vänsterklickas med en frekvensmodul för att spåras. +gui.telemetry_fail_no_frequency_module.message=En frekvensmodul behövs. +gui.telemetry_fail_wearing_it.message=Denna frekvensmodul är i konflikt med den du är utrustad med. +gui.telemetry_succeed.message=Fjärrförbindning skapad. +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s's luftslusskontroll +gui.tracking.message=Spårning aktiverad. Högerklicka på fjärrmätaren för att fullborda förbindning. +gui.warning=FARA! +gui.warning.invalid_thermal=Undermåligt temperaturskydd! +gui.warning.noroom=Slut på utrymme! +item.air_fan.name=Fläkt +item.air_vent.name=Luftintag +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Matdosa +item.basic_item.compressed_aluminum.name=Aluminiumplåt +item.basic_item.compressed_bronze.name=Bronsplåt +item.basic_item.compressed_copper.name=Kopparplåt +item.basic_item.compressed_iron.name=Järnplåt +item.basic_item.compressed_steel.name=Stålplåt +item.basic_item.compressed_tin.name=Tennplåt +item.basic_item.dehydrated_apple.name=Torkade äpplen +item.basic_item.dehydrated_carrot.name=Torkade morötter +item.basic_item.dehydrated_melon.name=Torkade meloner +item.basic_item.dehydrated_potato.name=Torkade potatisar +item.basic_item.frequency_module.name=Frekvensmodul +item.basic_item.ingot_aluminum.name=Aluminiumtacka +item.basic_item.ingot_bronze.name=Bronstacka +item.basic_item.ingot_copper.name=Koppartacka +item.basic_item.ingot_steel.name=Ståltacka +item.basic_item.ingot_tin.name=Tenntacka +item.basic_item.raw_silicon.name=Kisel +item.basic_item.solar_module_0.name=Solcell +item.basic_item.solar_module_1.name=Solpanel +item.basic_item.wafer_advanced.name=Avancerad kiselplatta +item.basic_item.wafer_basic.name=Enkel kiselplatta +item.basic_item.wafer_solar.name=Fotovoltaisk kiselplatta +item.battery.name=Batteri +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Månbil +item.buggymat.seat.name=Månbilsäte +item.buggymat.storage.name=Månbilkoffert +item.buggymat.wheel.name=Månbilhjul +item.canister.copper.name=Kopparburk +item.canister.tin.name=Tennburk +item.canvas.name=Tygduk +item.cheese_block.name=Månostkaka +item.cheese_curd.name=Månkesella +item.compressed_meteoric_iron.name=Meteoritjärnplåt +item.empty_liquid_canister.name=Tom tank +item.engine.tier1booster.name=Hjälpraket +item.engine.tier1engine.name=Raketmotor +item.flag.name=Flagga +item.fuel.name=Raketbränsle +item.fuel_canister.name=Full bränsletank +item.fuel_canister_partial.name=Bränsletank +item.heavy_plating.name=Förstärkt plåt +item.hot_description.name=Het +item.infinite_battery.name=Evighetsbatteri +item.infinite_oxygen.name=Evighetsyretank +item.key.t1.name=Månskattkistnyckel +item.meteor_chunk.name=Kastmeteorit +item.meteor_chunk_hot.name=Glödande kastmeteorit +item.meteoric_iron_ingot.name=Meteoritjärntacka +item.meteoric_iron_raw.name=Meteoritmalm +item.nose_cone.name=Raketnos +item.oil_canister.name=Full oljetank +item.oil_canister_partial.name=Oljetank +item.oil_extractor.name=Oljesugare +item.oxygen_concentrator.name=Syrekoncentrator +item.oxygen_gear.name=Syrgaskoppling +item.oxygen_mask.name=Syrgasmask +item.oxygen_tank_heavy_empty.name=Tom stor syrgastank +item.oxygen_tank_heavy_full.name=Stor syrgastank +item.oxygen_tank_light_empty.name=Tom liten syrgastank +item.oxygen_tank_light_full.name=Liten syrgastank +item.oxygen_tank_med_empty.name=Tom medelstor syrgastank +item.oxygen_tank_med_full.name=Medelstor syrgastank +item.parachute_black.name=Svartfärgad fallskärm +item.parachute_blue.name=Ljusblåfärgad fallskärm +item.parachute_brown.name=Brunfärgad fallskärm +item.parachute_darkblue.name=Blåfärgad fallskärm +item.parachute_darkgray.name=Gråfärgad fallskärm +item.parachute_darkgreen.name=Grönfärgad fallskärm +item.parachute_gray.name=Ljusblåfärgad fallskärm +item.parachute_lime.name=Limegrönfärgad fallskärm +item.parachute_magenta.name=Magentafärgad fallskärm +item.parachute_orange.name=Orangefärgad fallskärm +item.parachute_pink.name=Rosafärgad fallskärm +item.parachute_plain.name=Fallskärm +item.parachute_purple.name=Lilafärgad fallskärm +item.parachute_red.name=Rödfärgad fallskärm +item.parachute_teal.name=Cyanfärgad fallskärm +item.parachute_yellow.name=Gulfärgad fallskärm +item.rocket_fins.name=Raketfena +item.rocket_t1.name=N1-raket +item.schematic.name=Rymdtekniksritning +item.sensor_glasses.name=Sensorglasögon +item.sensor_lens.name=Sensorlins +item.standard_wrench.name=Standardskiftnyckel +item.steel_axe.name=Förstärkt yxa +item.steel_boots.name=Förstärkta stövlar +item.steel_chestplate.name=Förstärkt harnesk +item.steel_helmet.name=Förstärkt hjälm +item.steel_hoe.name=Förstärkt flohacka +item.steel_leggings.name=Förstärkta benskydd +item.steel_pickaxe.name=Förstärkt hacka +item.steel_pole.name=Stålstång +item.steel_shovel.name=Förstärkt spade +item.steel_sword.name=Förstärkt svärd +item.tier1.desc=Nivå 1 +item_desc.powerdraw.name=Strömförbrukning: %s /s +item_desc.shift.name=Tryck %s för mer info +item_group.galacticraft_blocks=Galacticraft: Block +item_group.galacticraft_items=Galacticraft: Föremål +keybind.map.name=Rymdkarta +keybind.sensortoggle.name=Växla sensorglasögonläge +keybind.spaceshipinv.name=Öppna rymdskeppsbagage +keybind.vehiclebackward.name=Kör fordon bakåt +keybind.vehicledown.name=Styr fordon nedåt +keybind.vehicleforward.name=Kör fordon framåt +keybind.vehicleleft.name=Styr fordon vänter +keybind.vehicleright.name=Styr fordon höger +keybind.vehicleup.name=Styr fordon uppåt +moon.moon=Månen +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter +planet.mercury=Merkurius +planet.neptune=Neptunus +planet.overworld=Midgård +planet.saturn=Saturnus +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Terrestriell rymdstation +schematic.moonbuggy.name=Månbil +schematic.rocket_t1.name=N1-raket +schematic.rocket_t2.name=N2-raket +solarsystem.sol=Solen +star.sol=Solen +tile.air_lock_controller.name=Luftslusskontroll +tile.air_lock_frame.description=Luftslusstommar läggs ut till en portal-liknande ram. Kompletteras med en luftslusskontroll för att bilda en lufttät dörr. +tile.air_lock_frame.name=Luftslusstomme +tile.air_lock_seal.name=Lufttät dörr +tile.aluminum_wire.alu_wire.description=Aluminiumledningar ansluter strömkällor till elektriska apparater. +tile.aluminum_wire.alu_wire.name=Aluminiumledning +tile.aluminum_wire.alu_wire_heavy.description=Förstärkta aluminiumledningar ansluter strömkällor till elektriska apparater. Dess ökade kapacitet lämpar för maskiner av nivå 2. +tile.aluminum_wire.alu_wire_heavy.name=Förstärkt aluminiumledning +tile.arclamp.description=Båglampor lämpas för belysning av stora områden. Skrämmer dessutom bort varelser! +tile.arclamp.name=Båglampa +tile.basic_block_core.block_aluminum_gc.name=Aluminiumblock +tile.basic_block_core.block_copper_gc.name=Kopparblock +tile.basic_block_core.block_meteoric_iron_gc.name=Meteoritjärnblock +tile.basic_block_core.block_tin_gc.name=Tennblock +tile.basic_block_core.deco_block_0.name=Dekorerat tennblock +tile.basic_block_core.deco_block_1.name=Dekorerat tennblock +tile.basic_block_core.ore_aluminum_gc.name=Aluminiummalm +tile.basic_block_core.ore_copper_gc.name=Kopparmalm +tile.basic_block_core.ore_silicon.name=Kiselmalm +tile.basic_block_core.ore_tin_gc.name=Tennmalm +tile.basic_block_moon.bricks.name=Månhåletegel +tile.basic_block_moon.cheesestone.name=Ostmalm +tile.basic_block_moon.coppermoon.name=Kopparmalm +tile.basic_block_moon.moondirt.name=Månjord +tile.basic_block_moon.moongrass.name=Månmark +tile.basic_block_moon.moonstone.name=Månsten +tile.basic_block_moon.tinmoon.name=Tennmalm +tile.buggy_pad.description=Månbilstationplattor markmonterade i en 3x3-kvadrat bildar en komplett månbilstation. Placera en bränslepump intill. +tile.cargo.loader.name=Pålastare +tile.cargo.unloader.name=Urlastare +tile.cargo_loader.description=Pålastaren fyller en farkosts lastutrymme med block och föremål. Placeras intill en raketramp. +tile.cargo_unloader.description=Urlastaren tömmer en farkosts lastutrymme med block och föremål. Placeras intill en raketramp. +tile.cheese.description=Månostkaka är en delikatess från månen. Placeras innan konsumtion. +tile.cheese.name=Månostkaka +tile.circuit_fabricator.description=Kretskortstillverkaren bearbetar råkisel till kiselplattor som används till avancerade maskiner. +tile.coal_generator.description=Kolgeneratorn producerar electricitet genom kolförbränning. Enkel men också bland de minst effektivaste metoderna. +tile.collector.description=Syrgasutvinnaren erhåller syre utvunnet från närvarande växtlighet. +tile.collector.name=Syrgasutvinnare +tile.compressor.description=Plåtmaskinen bearbetar metalltackor till plåt. En av de viktigaste maskinerna i Galacticraft! +tile.compressor_electric.description=Elplåtmaskinen bearbetar metalltackor till plåt. Mer effektiv än sin företrädare då den smider två plåtar åt gången istället. +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name=Råolja +tile.crude_oil_still.name=Råolja +tile.dishbase.description=Parabolantennen spårar rymdstationers position och tar emot information från utomjordiska rymdbaser. +tile.dishbase.name=Parabolantenn +tile.distributor.description=Luftbubbelmaskinen bildar en andningsbar syrgasbubbla från ett inbyggt lagringskärl. +tile.distributor.name=Luftbubbelmaskin +tile.dummyblock.cryogenic_chamber.name=Kryogenisk kammare +tile.dummyblock.launch_pad.name=Raketramp +tile.dummyblock.nasa_workbench.name=Rymdteknikställ +tile.dummyblock.solar.name=Solpanel +tile.dummyblock.space_station_base.name=Rymdstationsmall +tile.electric_furnace_tier1.description=Elugnen används som ett snabbare alternativ till den vedeldade ugnen. +tile.electric_furnace_tier2.description=Ljusbågsugnen överträffar både den traditionella samt elektriska ugnen. +tile.enclosed.aluminum_wire.name=Lufttätande aluminiumledning +tile.enclosed.heavy_aluminum_wire.name=Förstärkt lufttätande aluminiumledning +tile.enclosed.copper_cable.name=Lufttätande kopparledning +tile.enclosed.description=Lufttäta block används huvudsakligen till byggnation av rymdbaser. +tile.enclosed.glass_fibre_cable.name=Lufttätande glasfiberledning +tile.enclosed.gold_cable.name=Lufttätande guldledning +tile.enclosed.hv_cable.name=Lufttätande högspänningsledning +tile.enclosed.lv_cable.name=Lufttätande tennledning +tile.enclosed.me_cable.name=Lufttätande ME-ledning +tile.enclosed.fluid_pipe.name=Lufttätande syrgasledning +tile.enclosed.pipe_fluids_cobblestone.name=Lufttätande kullerstenvätskeledning +tile.enclosed.pipe_fluids_stone.name=Lufttätande stenvätskeledning +tile.enclosed.pipe_items_cobblestone.name=Lufttätande kullerstentransportledning +tile.enclosed.pipe_items_stone.name=Lufttätande stentransportledning +tile.enclosed.pipe_power_gold.name=Lufttätande guldenergiledning +tile.enclosed.pipe_power_stone.name=Lufttätande stenenergiledning +tile.energy_storage_module_tier1.description=Energilagringsmodulen förvarar stora mängder energi för senare bruk. +tile.energy_storage_module_tier2.description=Energilagringsklustret förvarar större mängder energi för senare bruk. Maximal effekt och kapacitet överträffar sin enklare föregångare. +tile.fallen_meteor.description=Meteoriter hittas oftast på himlakroppar med obetydlig atmosfär. Kan brytas för meteoritjärn. +tile.fallen_meteor.name=Meteorit +tile.fuel.name=Bränsle +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=Bränslepumpen stationeras intill en raketramp eller annan fordonstation. +tile.fuel_loader.name=Bränslepump +tile.glowstone_torch.description=Glödstensfacklor används i syrefattiga miljöer där vanliga facklor inte brinner. +tile.glowstone_torch.name=Glödstensfackla +tile.landing_pad.buggy_fueler.name=Månbilstationplatta +tile.landing_pad.cargo_pad.name=Lastraketramp +tile.landing_pad.description=Raketrampsplattor markmonterade i en 3x3-kvadrat bildar en komplett raketramp. Bränslepump, lastare och raketfjärrstyrare placeras intill. +tile.landing_pad.landing_pad.name=Raketrampsplatta +tile.landing_pad_full.name=Raketramp +tile.machine.0.name=Kolgenerator +tile.machine.1.name=Energilagringsmodul +tile.machine.2.name=Elugn +tile.machine.3.name=Plåtmaskin +tile.machine.7.name=Ljusbågsugn +tile.machine.8.name=Energilagringskluster +tile.machine2.4.name=Elplåtmaskin +tile.machine2.5.name=Kretskortstillverkare +tile.machine2.6.name=Syrgaslagringsmodul +tile.moon_stairs_brick.name=Månhålestenstrappa +tile.moon_stairs_stone.name=Månstenstrappa +tile.ore_copper.name=Kopparmalm +tile.ore_tin.name=Tennmalm +tile.oxygen_compressor.0.name=Syrgastapp +tile.oxygen_compressor.1.name=Syrgaskompressor +tile.oxygen_compressor.description=Syrgastappen förser en syrgastank med påfyllning från ett inbyggt lagringskärl. +tile.oxygen_decompressor.description=Syrgaskompressorn länsar en syrgastank till ett inbyggt lagringskärl. +tile.oxygen_detector.description=Syredetektorn avger en rödstensignal när den omges av syre. +tile.oxygen_detector.name=Syredetektor +tile.oxygen_pipe.description=Syrgasledningar överför syrgas från en maskins lagringskärl till en annans. +tile.oxygen_pipe.name=Syrgasledning +tile.oxygen_storage_module.description=Syrgaslagringsmodulen förvarar stora mängder syrgas för senare bruk. +tile.parachest.description=Fallskärmskistor faller från himlen efter landning på planeter med tätare atmosfär. Inehåller raketdelar, bränsle samt nyttolast från den tidigare avfyrningen. +tile.parachest.name=Fallskärmskista +tile.refinery.description=Oljeraffinaderiet omvandlar elektricitet och råolja till bränsle för raketer och andra fordon. +tile.refinery.name=Oljeraffinaderi +tile.rocket_workbench.description=Rymdteknikstället ger möjlighet att tillverka många olika avancerade delar och fordon. Nya ritningar läggs till allteftersom. +tile.rocket_workbench.name=Rymdteknikställ +tile.sapling2.birch.name=Björkplanta +tile.sapling2.jungle.name=Djungelträdplanta +tile.sapling2.oak.name=Ekplanta +tile.sapling2.spruce.name=Granplanta +tile.sealer.description=Andningsklimatsystemet tillhandahåller ett luftätt utrymme med andningsbar atmosfär. +tile.sealer.name=Andningsklimatsystem +tile.slab_gc_half.moon_bricks_slab.name=Månhålestensplatta +tile.slab_gc_half.moon_slab.name=Månstensplatta +tile.slab_gc_half.tin_slab_1.name=Dekorerad tennplatta +tile.slab_gc_half.tin_slab_2.name=Dekorerad tennplatta +tile.solar.advanced_solar.name=Avancerad solpanel +tile.solar.basic_solar.name=Enkel solpanel +tile.solar_adv.description=En avancerad solpanel omvandlar solljus till electricitet som lagras för senare ändamål. Har en rörlig led för att aktivt förse panelen en optimal vinkel. +tile.solar_basic.description=En enkel solpanel omvandlar solljus till elecricitet som lagras för senare ändamål. Funkar bäst i dirket solljus. +tile.space_station_base.name=Rymdstationsmall +tile.spin_thruster.description=Styrraketer försätter en rymdstation i snurr. +tile.spin_thruster.name=Styrraket +tile.telemetry.description=Samlar in användbar fjärrdata från fordon, spelare och varelser. Placeras lämpligast nära en bildskärm. Använd frekvensmodul för att skapa fjärrbindning. +tile.telemetry.name=Fjärrmätare +tile.tin_stairs_1.name=Dekorerad tenntrappa +tile.tin_stairs_2.name=Dekorerad tenntrappa +tile.treasure_chest.description=Månskattkistor förekommer i slutet på månhålor. Den tillhörande nyckeln vaktas av månhålans härskare. +tile.treasure_chest.name=Månskattkista +tile.unlit_torch.name=Fackla +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Fackla +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Några bildskärmar till rymdbasen sätter pricken över i:et. Högerklicka för att ändra kanal. +tile.view_screen.name=Bildskärm +tile.wall_gc.moon.name=Månstensvägg +tile.wall_gc.moon_bricks.name=Månhålevägg +tile.wall_gc.tin.name=Dekorerad tennvägg diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/th_th.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/th_th.lang new file mode 100644 index 00000000..c55ec994 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/th_th.lang @@ -0,0 +1,762 @@ +checklist.create_grapple.key=สร้างตะขอเกี่ยว +checklist.equip_oxygen_suit.key=สวมชุดออกซิเจน +checklist.equip_parachute.key=ใส่ร่มชูชีพ +command.gcastrominer.count=จำนวนแอสโทรไมน์เนอร์ของผู้เล่น %s คือ %s +commands.emergencykit=%s ได้ให้ชุดอุปกรณ์ฉุกเฉิน! +commands.dimensionteleport=%s ถูกส่งไปยังชั้นบรรยากาศ %s +commands.dimensiontp.too_many=การใช้คำสั่งมากเกินไป! การใช้: %s +commands.gcenergyunits.invalid_units=ยูนิตไม่ถูกต้อง ในคำสั่ง /GCEnergyUnits การใช้: %s +commands.gcenergyunits.no_units=ต้องระบุยูนิต! การใช้: %s +commands.gchouston.confirm.1=นี่ศูนย์ควบคุมภารกิจ พูดอีกครั้งได้ไหม? +commands.gchouston.confirm.2=(เพื่อยกเลิกภารกิจ, พิมพ์คำสั่ง /gchouston อีกครั้งเพื่อยืนยัน) +commands.gchouston.fail=คำสั่ง /gchouston ใช้ได้ต่อเมื่ออยู่บนอวกาศ (หรือโหมดสร้างสรรค์) +commands.gchouston.help.1=เอ่อ ฮูสตัน เรามีปัญหา.... +commands.gchouston.help.2=(พิมพ์คำสั่ง /gchouston เพื่อยกเลิกภารกิจและกลับโลก) +commands.gchouston.noop=ใช้คำสั่ง /gchouston กับผู้เล่นคนอื่นใช้ได้เฉพาะโอเปอเรเตอร์เท่านั้น +commands.gchouston.success=โอเค สแตนบาย %s กำลังเทเลพอร์ตกลับไปยังโลก +commands.joinrace.no_team=ต้องการกำหนดรายละเอียดของทีม การใช้: %s +commands.ssinvite.not_found=ไม่สามารถหาสถานีอวกาศของเราได้ คุณต้องเดินทางไปหาก่อน! +commands.ssinvite.wrong_usage=การใช้คำสั่งไม่ถูกต้อง! การใช้: %s +commands.ssnewowner.wrong_usage=ไม่สามารถจำแนก ID# ของสถานีอวกาศได้ - มันมีอยู่หรือเปล่า? การใช้: %s +commands.ssuninvite.no_player=ไม่สามารถหาผู้เล่นของ %s บนสถานีอวกาศได้! +container.cargoloader.name=เครื่องขนส่งสินค้า +container.cargounloader.name=เครื่องขนถ่ายสินค้า +container.fuelloader.name=เครื่องเติมเชื้อเพลิง +container.lander.name=ยานลงจอด +container.magneticcrafting.name=โต๊ะเครื่องมือ +container.oxygencollector.name=เครื่องกักเก็บออกซิเจน +container.oxygencompressor.name=เครื่องบีบอัดออกซิเจน +container.oxygendecompressor.name=เครื่องลดความดันออกซิเจน +container.oxygendistributor.name=เครื่องกระจายฟองออกซิเจน +container.oxygensealer.name=เครื่องผนึกออกซิเจน +container.parachest.name=กล่องสัมภาระ +container.refinery.name=เครื่องกลั่นน้ำมัน +container.solaradvanced.name=แผงโซลาร์แอดวานซ์ +container.solarbasic.name=แผงโซลาร์ +container.spaceship.name=จรวด เทียร์ 1 +container.treasurechest.name=กล่องสมบัติ +death.attack.meteor_chunk=%1$s โดนอุกกาบาตชน! +death.attack.oxygen_suffocation=%1$s ขาดออกซิเจน! +death.attack.spaceship_crash=%1$s's จรวดตกบนพื้น โอ้ย! +death.attack.sulphuric_acid=%1$s ละลายในกรดกำมะถัน! +death.attack.thermal=%1$s ลืมใส่เกราะกันความร้อน +dimension.moon.name=ดวงจันทร์ +dimension.overworld.name=โลก +dimension.sun.name=ดวงอาทิตย์ +entity.alien_villager.name=ชาวบ้านอวกาศ +entity.buggy.name=บั๊กกี้ +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=คริปเปอร์กลายพันธุ์ +entity.evolved_skeleton.name=โครงกระดูกกลายพันธุ์ +entity.evolved_skeleton_boss.name=บอสโครงกระดูกกลายพันธุ์ +entity.evolved_spider.name=แมงมุมกลายพันธุ์ +entity.evolved_zombie.name=ผีดิบกลายพันธุ์ +entity.evolved_enderman.name=เอนเดอร์แมนกลายพันธุ์ +entity.evolved_witch.name=แม่มดกลายพันธุ์ +entity.flag.name=ธง +entity.gcflag.name=ธง +entity.gravity_arrow.name=ลูกธนู +entity.lander.name=ยานลงจอด +entity.meteor.name=อุกกาบาต +entity.meteor_chunk.name=เศษอุกกาบาต +entity.oxygen_bubble.name=ฟองออกซิเจน +entity.para_chest.name=กล่องสัมภาระ +entity.rocket_t1.name=จรวด เทียร์ 1 +galaxy.milky_way=กาแลคซีทางช้างเผือก +gc.configgui.allow_liquids_grating=ให้ของเหลวไหลผ่านตะแกรง +gc.configgui.alternate_canister_recipe=เปลี่ยนวิธีการคราฟกระป๋อง +gc.configgui.asteroids_flags=โหมดชาแลนจ์เก็บธง +gc.configgui.asteroids_start=โหมดชาแลนจ์ (เกิดบนดาวเคราะห์น้อย) +gc.configgui.biome_id_base=ID ไบโอมหลักของกาแลคติคคราฟต์ +gc.configgui.detectable_i_ds=ชื่อของบล็อกที่ตรวจพบได้โดยแว่นเซนเซอร์ +gc.configgui.disable_biome_type_registrations=ปิดใช้งานการเรจิสเตอร์ชนิดของ Biome +gc.configgui.disable_cheese_moon=ปิดใช้งานการเจนเนอเรทแร่ชีส +gc.configgui.disable_copper_moon=ปิดใช้งานการเจนเนอเรทแร่ทองแดง +gc.configgui.disable_lander=ปิดใช้งานยานลงจอดบนดวงจันทร์ +gc.configgui.disable_moon_village_gen=ปิดใช้งานการเจนเนอเรทหมู่บ้านบนดวงจันทร์ +gc.configgui.disable_ore_dict_space_metals=ใช้แท่งเหล็กของ GC ในวิธีการคราฟ +gc.configgui.disable_sapphire_moon=ปิดใช้งานการเจนเนอเรทแร่ไพลินดวงจันทร์ +gc.configgui.disable_space_station_creation=ปิดใช้งานการสร้างสถานีอวกาศ +gc.configgui.disable_spaceship_grief=ปิดใช้งานการระเบิดของจรวด +gc.configgui.disable_spaceship_particles=ปิดใช้งานควันจรวด +gc.configgui.disable_tin_moon=ปิดใช้งานการเจนเนอเรทแร่ดีบุก +gc.configgui.disable_update_check=ปิดการตรวจสอบเวอร์ชั่น +gc.configgui.disable_vehicle_camera_changes=Vivecraft: ปิดใช้งาน Third-Person และการซูม +gc.configgui.dungeon_boss_health_mod=พลังชีวิตของบอส +gc.configgui.enable_aluminum_ore_gen=เปิดใช้งานการเจนเนอเรทแร่อลูมิเนียม +gc.configgui.enable_copper_ore_gen=เปิดใช้งานการเจนเนอเรทแร่ทองแดง +gc.configgui.enable_debug=เปิดใช้งานการตรวจหาข้อบกพร่อง +gc.configgui.enable_other_mods_features=เปิดใช้งานการเจนเนอเรทของ Mod อื่น ๆ +gc.configgui.enable_retrogen_oil=เปิดใช้งานการเจนเนอเรทใหม่ของน้ำมันดิบบนโลก +gc.configgui.enable_sealer_edge_checks=ตรวจสอบการผนึกแบบละเอียด +gc.configgui.enable_silicon_ore_gen=เปิดใช้งานการเจนเนอเรทแร่ซิลิคอน +gc.configgui.enable_space_race_manager_popup=เปิดใช้งานป๊อปอัพของการแข่งขันอวกาศ +gc.configgui.enable_thaum_craft_nodes=เปิดใช้งาน Thaumcraft Nodes บนดาวเคราะห์ +gc.configgui.enable_tin_ore_gen=เปิดใช้งานการเจนเนอเรทแร่ดีบุก +gc.configgui.external_oil_gen=ID มิติของการเจนเนอเรทน้ำมัน +gc.configgui.force_overworld_respawn=เปิดใช้งานการเกิดบนโลกเมื่อตายบนดาวเคราะห์ +gc.configgui.hard_mode=ระดับความยากสูงสุด +gc.configgui.id_achiev_base=ID ความสำเร็จพื้นฐาน +gc.configgui.id_dimension_moon=ID มิติของดวงจันทร์ +gc.configgui.id_dimension_overworld=ID มิติของโลก +gc.configgui.id_dimension_overworld_orbit=ID มิติของสถานีอวกาศ +gc.configgui.id_dimension_overworld_orbit_static=ID มิติของสถานีอวกาศ (แบบ Static) +gc.configgui.id_schematic_add_schematic=ID "เพิ่มแผนผัง" +gc.configgui.id_schematic_moon_buggy=ID แผนผังรถบั๊กกี้ +gc.configgui.id_schematic_rocket_t1=ID แผนผังจรวด เทียร์ 1 +gc.configgui.key_override_fuel_level=ตั้งค่าปุ่ม: GUI เชื้อเพลิงจรวด +gc.configgui.key_override_toggle_adv_goggles=ตั้งค่าปุ่ม: เปิดใช้งานแว่นเซนเซอร์แบบแอดวานซ์ +gc.configgui.map_scroll_invert=สลับการเลื่อนแผนที่กาแลคซี +gc.configgui.map_scroll_sensitivity=ความไวของเม้าส์เมื่อเลื่อนแผนที่กาแลคซี +gc.configgui.meteor_block_damage=เปิดใช้งานการทำลายของอุกกาบาต +gc.configgui.meteor_spawn_mod=อัตราการเกิดของอุกกาบาต +gc.configgui.more_stars=เปิดใช้งานการแสดงผลดาวบนท้องฟ้า +gc.configgui.oil_gen_factor=อัตราการเจนเนอเรทของน้ำมัน +gc.configgui.ore_dict_silicon=ชื่อ Ore Dictionary ของซิลิคอน +gc.configgui.other_mod_ore_gen_i_ds=ID มิติให้ Mod อื่น ๆ เจนเนอเรทแร่บนดาวเคราะห์ +gc.configgui.override_capes=เปิดใช้งานผ้าคลุม (สำหรับ Donator เท่านั้น) +gc.configgui.override_map=ตั้งค่าปุ่ม: แผนที่กาแลคซี +gc.configgui.oxygen_indicator_bottom=ย้ายหลอดออกซิเจนไปด้านล่าง +gc.configgui.oxygen_indicator_left=ย้ายหลอดออกซิเจนไปด้านซ้าย +gc.configgui.planet_worldborders=ค่า x,z สูงสุดสำหรับดวงจันทร์ +gc.configgui.quick_mode=เปิดใช้งานโหมดเล่นเกมเร็ว (โหมดง่าย) +gc.configgui.rocket_disable_overworld_return=ปิดใช้งานจรวดไม่ให้กลับไปยังโลก +gc.configgui.rocket_disabled_dimensions=ปิดใช้งานไม่ให้จรวดโหลดมิติ +gc.configgui.rocket_fuel_factor=อัตราการใช้เชื้อเพลิงจรวด +gc.configgui.sealable_i_ds=ID บล็อกที่ผนึกได้ +gc.configgui.space_station_energy_scalar=ปรับแต่งพลังงานโซลาร์ของสถานีอวกาศ +gc.configgui.space_stations_require_permission=เปิดใช้งานการอนุญาตคำสั่งสถานีอวกาศ +gc.configgui.static_loaded_dimensions=เปิดใช้งานให้มิติโหลดตลอดเวลา +gc.configgui.static_loaded_new_ss=โหลดมิติสถานีอวกาศตลอดเวลา (แบบ Static) +gc.configgui.suffocation_cooldown=ระยะถอยหลังจากการหายใจไม่ออก +gc.configgui.suffocation_damage=ค่า Damage จากการหายใจไม่ออก +gc.configgui.title=ตั้งค่ากาแลคติคคราฟต์ +gc.configgui.use_old_fuel_fluid_i_d=ใช้การเรจิสเตอร์ของเหลว fuelgc แบบเก่า +gc.configgui.use_old_oil_fluid_i_d=ใช้การเรจิสเตอร์ของเหลว oilgc แบบเก่า +gc.configgui.whitelist_co_f_h_core_gen=เปิดใช้งานการเจนเนอเรทของ CoFHCore +gui.battery_slot.desc.0=ช่องแบตเตอรี่ วางแบตเตอรี่ที่นี่ +gui.battery_slot.desc.1=หรือเชื่อมต่อจากแหล่งพลังงานอื่น ๆ +gui.bed_fail.message=อ๊ะ! จะเป็นยังไงถ้าออกซิเจนหมดในขณะที่กำลังหลับ ต้องใช้ตู้ไครโอเจนิคเพื่อนอนบนอวกาศเท่านั้น! +gui.buggy.accel.name=เพิ่มความเร็ว +gui.buggy.decel.name=ลดความเร็ว +gui.buggy.inv.name=ช่องเก็บของ / เชื้อเพลิง +gui.buggy.storage_space=พื้นที่เก็บของ +gui.buggy.turn.name=ไปทางซ้าย-ขวา +gui.button.back.name=กลับ +gui.button.disable.name=ปิดใช้งาน +gui.button.disableseal.name=ปิดใช้งานการผนึก +gui.button.enable.name=เปิดใช้งาน +gui.button.enableseal.name=เปิดใช้งานการผนึก +gui.button.hide_dest.name=ซ่อน +gui.button.loadfuel.name=โหลดเชื้อเพลิง +gui.button.loaditems.name=ส่งไอเท็ม +gui.button.next.name=ต่อไป +gui.button.paintapply.name=ใช้สี +gui.button.paintmix.name=ผสมสี +gui.button.paintreset.name=รีเซ็ตสี +gui.button.refine.name=เริ่มกลั่น +gui.button.stoploading.name=หยุดเติม +gui.button.stoprefine.name=หยุดกลั่น +gui.button.stopunloading.name=หยุดถ่ายสินค้า +gui.button.unhide_dest.name=เลิกซ่อน +gui.button.unloaditems.name=ถ่ายสินค้า +gui.button.unlockschematic.name=ปลดล็อคแผนผัง +gui.checkbox.horizontal.name=โหมดแนวนอน +gui.checkbox.invert.name=สลับการทำงาน +gui.checkbox.player_name.name=ชื่อผู้เล่นคือ +gui.checkbox.player_within.name=ผู้เล่นอยู่ภายใน +gui.checkbox.redstone_signal.name=เปิดแอร์ล็อคโดยใช้สัญญาณเรดสโตน +gui.chest.warning.wrongkey=ฉันต้องการกุญแจดันเจี้ยน เทียร์ %s เพื่อปลดล็อคกล่องสมบัติ! +gui.choose_planet.desc.moon=อาศัยอยู่ได้#ไม่มีออกซิเจน#แรงโน้มถ่วง: 18% +gui.choose_planet.desc.overworld=เต็มไปด้วยสิ่งมีชีวิต#อาศัยอยู่ได้#แรงโน้มถ่วง: 100% +gui.chooseplanet.alreadycreated1.name=สถานีอวกาศได้ถูกสร้างแล้ว +gui.chooseplanet.alreadycreated2.name=สร้างแล้ว! +gui.chooseplanet.cannotcreate1.name=ไม่สามารถสร้าง +gui.chooseplanet.cannotcreate2.name=สถานีอวกาศได้ที่นี่! +gui.creative_only.desc=โหมดสร้างสรรค์เท่านั้น +gui.display.nolink=ไม่ได้เชื่อมต่อ +gui.docking_rocket.current_vel.name=ความเร็วของตอนนี้ +gui.docking_rocket.distance_from.name=ระยะทางจากจุดหมาย +gui.docking_rocket.target_vel.name=เป้าหมายของความเร็ว +gui.docking_rocket.warning.name.0=กด %s เพื่อลดความเร็ว +gui.docking_rocket.warning.name.1=กด %s เพื่อเพิ่มความเร็ว +gui.dropbox.player_distance.name.0=1 บล็อก +gui.dropbox.player_distance.name.1=2 บล็อก +gui.dropbox.player_distance.name.2=5 บล็อก +gui.dropbox.player_distance.name.3=10 บล็อก +gui.electric_compressor.desc.0=ดำเนินการ +gui.energy_storage.desc.0=พลังงานที่เก็บไว้ +gui.energy_storage.desc.1=พลังงาน +gui.flag.already_placed=ธงได้วางตรงนี้อยู่แล้ว! +gui.frequency_module.desc.0=สามารถรับเสียง คลื่น +gui.frequency_module.desc.1=และสัญญาณทางไกลได้ +gui.frequencymodule.warning0=ฉันต้องการ +gui.frequencymodule.warning1=ที่จะได้ยินแบบประสิทธิภาพ +gui.fuel_output.desc.0=วางกระป๋องเปล่าลงใน +gui.fuel_output.desc.1=ช่องนี้เพื่อเติมของเหลวจาก +gui.fuel_output.desc.2=ถังเชื้อเพลิง +gui.fuel_tank.desc.0=ถังเชื้อเพลิงต้องการ +gui.fuel_tank.desc.1=เครื่องเติมเชื้อเพลิง +gui.fuel_tank.desc.2=ถังเชื้อเพลิงสามารถเติมได้ +gui.fuel_tank.desc.3=โดยกระป๋องใส่เชื้อเพลิง +gui.fuel_tank.desc.4=ถังเชื้อเพลิง +gui.infinite_item.desc=ไม่จำกัด +gui.lander.velocity=กำลังเข้าสู่ความเร็ว +gui.lander.velocityu=เมตร/วินาที +gui.lander.warning2=กด " +gui.lander.warning3=" เพื่อทำให้ช้าลง! +gui.max_output.desc=ส่งออกสูงสุด +gui.message.addnewsch.name=เพิ่มแผนผังใหม่ +gui.message.apply.name=นำไปใช้ +gui.message.assign_name.name=กำหนดชื่อ +gui.message.atmosphere.name=ชั้นบรรยากาศ +gui.message.back.name=กลับ +gui.message.breed.name=ให้อาหาร +gui.message.bubble_visible.name=เห็นฟองอากาศ +gui.message.can_create_space_station.name=สามารถสร้างสถานีอวกาศได้! +gui.message.cancel.name=ยกเลิก +gui.message.cannot_create_space_station.name=ไม่สามารถสร้างสถานีอวกาศได้ +gui.message.catalog.name=แค็ตตาล็อก +gui.message.click_again.0.name=คลิกอีกครั้งเพื่อขยาย (ดูมุมมองของดวงจันทร์และดาวเทียม) +gui.message.click_again.1.name=คลิกอีกครั้งเพื่อขยาย (ดูมุมมองของดวงจันทร์) +gui.message.click_again.2.name=คลิกอีกครั้งเพื่อขยาย (ดูมุมมองของดาวเทียม) +gui.message.click_again.3.name=คลิกอีกครั้งเพื่อขยาย +gui.message.clicklink=คลิกเพื่อเข้า Galacticraft Wiki +gui.message.create_ss.name=สร้างสถานีอวกาศ +gui.message.daynightcycle.name=รอบกลางวัน - กลางคืน +gui.message.energy=พลังงาน +gui.message.environment.name=สภาวะแวดล้อมเอื้ออำนวย +gui.message.exit.name=ออก +gui.message.fuel.name=เชื้อเพลิง +gui.message.full.name=เต็ม +gui.message.generating.name=พลังงานที่ได้ +gui.message.grow.name=ทำให้โต +gui.message.heal.name=เพิ่มเลือด +gui.message.help1=สำหรับการช่วยเหลือของกาแลคติคคราฟต์ +gui.message.help1a=เพื่อดูข้อความนี้อีกครั้งได้ตลอดเวลา ใช้ +gui.message.help2=แนะนำรายการเกี่ยวกับอวกาศ +gui.message.help3=ช่วยเหลือเรื่องน้ำมัน +gui.message.in.name=เข้า +gui.message.launch.name=ไปยังเป้าหมาย +gui.message.max_energy=พลังงานสูงสุด +gui.message.meansurfacetemp.name=ค่าเฉลี่ยอุณหภูมิบนพื้นผิว +gui.message.moon.atmosphere.0.name=ไม่มี +gui.message.moon.daynightcycle.0.name=29.5 วันโลก +gui.message.moon.meansurfacetemp.0.name=(ด้านสว่าง) 253C +gui.message.moon.meansurfacetemp.1.name=(ด้านมืด) -153C +gui.message.moon.surfacecomposition.0.name=หินบะซอลต์และ +gui.message.moon.surfacecomposition.1.name=ร่องรอยของชีส +gui.message.moon.surfacegravity.0.name=แรงโน้มถ่วง 0.1654 +gui.message.moon.surfacegravity.1.name=(18% ของโลก) +gui.message.of.name=ของ +gui.message.oil.name=น้ำมัน +gui.message.out.name=ออก +gui.message.overworld.atmosphere.0.name=ไนโตรเจนและออกซิเจน +gui.message.overworld.atmosphere.1.name=เอื้อต่อสิ่งมีชีวิต +gui.message.overworld.daynightcycle.0.name=1 วันโลก +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=หิน ดิน และ +gui.message.overworld.surfacecomposition.1.name=กรวด +gui.message.overworld.surfacegravity.0.name=แรงโน้มถ่วง 1.0 +gui.message.overworld.surfacegravity.1.name=(100% ของโลก) +gui.message.prelaunch=ลิสรายการที่สำเร็จ +gui.message.rename.name=เปลี่ยนชื่อ +gui.message.select_ss.name=เลือกสถานีอวกาศ +gui.message.ss_owner.name=เจ้าของ: +gui.message.status.name=สถานะ +gui.message.strengthen.name=เพิ่มความแข็งแรง +gui.message.surfacecomposition.name=องค์ประกอบพื้นผิว +gui.message.surfacegravity.name=แรงโน้มถ่วงบนพื้นผิว +gui.message.thermal_status.name=สถานะเครื่องควบคุมอุณหภูมิ +gui.message.tier.name=เทียร์ %d +gui.message.unnamed.name=ไม่มีชื่อ +gui.missing_core.name.0=MicdoodleCore ไม่ได้อยู่ในโฟลเดอร์ mods +gui.missing_core.name.1=กาแลคติคคราฟต์ผิดพลาดในการโหลด +gui.missing_core.name.2=ปิดไมน์คราฟต์และติดตั้ง MicdoodleCore +gui.missing_core.name.3=คลิกที่นี่เพื่อเปิดเว็บดาวน์โหลด +gui.new_schematic.slot.desc.0=ช่องแผนผังใหม่ +gui.new_schematic.slot.desc.1=คุณสามารถหาแผนผังใหม่ +gui.new_schematic.slot.desc.2=จากการสู้บอสในดันเจี้ยน +gui.new_schematic.slot.desc.3=บนดาวเคราะห์หรือดวงจันทร์ +gui.oil_tank.desc.0=ถังน้ำมัน สามารถเติมได้ +gui.oil_tank.desc.1=โดยใช้กระป๋อง +gui.oxygen.warning=การติดตั้งออกซิเจนผิดพลาด! +gui.oxygen_compressor.slot.desc.0=ช่องบีบอัดถังออกซิเจน วางถังออกซิเจน +gui.oxygen_compressor.slot.desc.1=ตรงนี้เพื่อเติมออกซิเจน +gui.oxygen_decompressor.slot.desc.0=ช่องลดความดันถังออกซิเจน วางถังออกซิเจน +gui.oxygen_decompressor.slot.desc.1=ตรงนี้เพื่อนำออกซิเจนออก +gui.oxygen_slot.desc.0=ช่องของถังออกซิเจน วางกระป๋องออกซิเจน +gui.oxygen_slot.desc.1=ออกซิเจนตรงนี้หรือเชื่อมต่อกับแหล่งเก็บออกซิเจน +gui.oxygen_storage.desc.0=ออกซิเจนที่เก็บไว้ +gui.oxygen_storage.desc.1=ออกซิเจน +gui.oxygen_use.desc=ใช้ออกซิเจน +gui.per_second=/วินาที +gui.player.bpm=bpm +gui.player.food=อาหาร +gui.player.health=พลังชีวิต +gui.player.ouch=โอ้ย!!!! +gui.receiver.cannot_attach=ไม่สามารถวางเครื่องรับลำแสงตรงนี้ได้! +gui.requires_controller.desc=ต้องการเครื่องควบคุมการปล่อยจรวด +gui.rocket.countdown=นับถอยหลัง +gui.rocket.height=ความสูง +gui.rocket.inv.name=ช่องเก็บของ / เชื้อเพลิง +gui.rocket.launch.name=ปล่อยจรวด +gui.rocket.launched=ปล่อยจรวดแล้ว +gui.rocket.on_launchpad=อยู่บนฐานปล่อย +gui.rocket.speed=ความเร็ว +gui.rocket.turn.name=ไปทางซ้าย-ขวา +gui.rocket.updown.name=ขึ้นข้างบน-ลงข้างล่าง +gui.rocket.warning.fuelinsufficient=เชื้อเพลิงไม่เพียงพอสำหรับการปล่อยจรวดแบบอัตโนมัติ! +gui.rocket.warning.launchcontroller=การบินถูกยกเลิก ตรวจสอบที่เครื่องควบคุมการปล่อยจรวด! +gui.rocket.warning.nofuel=ต้องเติมเชื้อเพลิงก่อน เป็นอันดับแรก! +gui.rocket.warning.nogyroscope=คุณไม่สามารถใช้จรวดในมิตินี้ได้! +gui.rocket.warning.noparachute=ฉันไม่มีร่มชูชีพ! ถ้ากดปล่อยจรวดอีกครั้ง เราจะหยุดมันไม่ได้! +gui.rocket_type.0=พื้นที่เก็บของ: 18 +gui.rocket_type.1=พื้นที่เก็บของ: 36 +gui.rocket_type.2=พื้นที่เก็บของ: 56 +gui.rocket_type.3=เชื้อเพลิงเต็ม +gui.seconds=วินาที +gui.sensor.advanced=โหมดแอดวานซ์ +gui.sensor.advancedoff=ปิด +gui.sensor.advancedon=เปิด +gui.show_bubble.desc.0=แสดงฟองอากาศ +gui.skeleton_boss.message=บอสหายไปแล้ว อย่าออกจากห้องระหว่างต่อสู้! กลับเข้าห้องเพื่อให้บอสเกิดใหม่ +gui.space_race.chat.add_success=%s ได้เข้าร่วมการแข่งขันอวกาศ! +gui.space_race.chat.already_part=คุณได้เข้าร่วมการแข่งขันอยู่แล้ว! +gui.space_race.chat.invite_received=รับคำเชิญการแข่งขันของทีมจาก %s +gui.space_race.chat.not_found=ไม่สามารถหาผู้เล่นชื่อ %s ได้ +gui.space_race.chat.remove_success=%s ถูกลบออกจากการแข่งขันอวกาศ +gui.space_race.chat.to_join=เพื่อเข้าร่วม %s ใช้คำสั่ง %s +gui.space_race.coming_soon=กำลังดำเนินการ +gui.space_race.create.add_players.name=เพิ่มผู้เล่น +gui.space_race.create.back.name=กลับ +gui.space_race.create.brush_radius.name=รัศมีบรัช +gui.space_race.create.brush_size.name=ขนาดบรัช +gui.space_race.create.change_color.name.0=เปลี่ยน +gui.space_race.create.change_color.name.1=สี +gui.space_race.create.change_color.name.2=ทีม +gui.space_race.create.close.name=ปิด +gui.space_race.create.customize.name=ปรับแต่งธง +gui.space_race.create.eraser_radius.name=รัศมียางลบ +gui.space_race.create.eraser_size.name=ขนาดยางลบ +gui.space_race.create.global_stats.name=ดูสถานะโดยรวม +gui.space_race.create.invite_player.name=เชิญผู้เล่น +gui.space_race.create.player_radius.name=หมายเหตุ: ผู้เล่นต้องอยู่ภายในระยะ! (25 บล็อก) +gui.space_race.create.rem_players.name=ลบผู้เล่น +gui.space_race.create.remove.name=ลบออก +gui.space_race.create.remove_player.name=ลบผู้เล่น +gui.space_race.create.rename.name=เปลี่ยนชื่อทีม +gui.space_race.create.send_invite.name=ส่งคำขอ +gui.space_race.create.server_stats.name=ดูสถานะของเซิฟเวอร์ +gui.space_race.create.title.name.0=จัดการการแข่งขัน +gui.space_race.create.title.name.1=บนอวกาศ +gui.space_race.create.title.name=จัดการการแข่งขันบนอวกาศ +gui.space_race.join.member_count.name=%d สมาชิก +gui.space_race.join.name=เข้าร่วม +gui.space_race.join.owner.name=เจ้าของ +gui.space_race.join.title.name=เข้าร่วมการแข่งขันบนอวกาศ +gui.space_race.unnamed=ไม่มีชื่อทีม +gui.spacestation.added=คุณได้ทำการเพิ่ม %s's ไปยังสถานีอวกาศแล้ว! +gui.spacestation.addsuccess=เสร็จสิ้นการเพิ่ม %s ไปยังลิสบนสถานีอวกาศ! +gui.spacestation.allow_all_false=คุณได้ปิดไม่ให้ผู้เล่นทุกคนสามารถเข้าถึงสถานีอวกาศได้แล้ว! +gui.spacestation.allow_all_true=คุณได้เปิดให้ผู้เล่นทุกคนสามารถเข้าถึงสถานีอวกาศได้แล้ว! (ใช้ /ssinvite -all เพื่อยกเลิก) +gui.spacestation.changesuccess=เปลี่ยนเจ้าของสถานีอวกาศจาก %s เป็น %s +gui.spacestation.playername=<ชื่อผู้เล่น> +gui.spacestation.removesuccess=เสร็จสิ้นการลบ %s จากลิสสถานีอวกาศ! +gui.spacestation.to_allow_entry=เพื่ออนุญาตให้ผู้เล่นคนอื่น ๆ เข้าสถานีอวกาศนี้ได้! +gui.spacestation.type_command=ชนิด +gui.status.active.name=กำลังทำงาน +gui.status.air_lock_closed.name=แอร์ล็อคปิด +gui.status.air_lock_open.name=แอร์ล็อคเปิด +gui.status.blockedfully.name=ไม่เห็นดวงอาทิตย์ +gui.status.blockedpartial.name=เห็นดวงอาทิตย์บางส่วน +gui.status.check_pending.name=อยู่ในระหว่างการตรวจสอบ +gui.status.check_starting.name=เริ่มการตรวจสอบ +gui.status.checking_seal.name=ตรวจสอบการผนึก +gui.status.collecting.name=ออกซิเจนที่ได้ +gui.status.collectingenergy.name=เก็บพลังงาน +gui.status.compressing.name=กำลังบีบอัด +gui.status.disabled.name=ปิดใช้งาน +gui.status.fulltank.name=ถังออกซิเจนเต็ม +gui.status.generating.name=สถานะ +gui.status.hull_heat.name=ความร้อน +gui.status.idle.name=ไม่ทำงาน +gui.status.missingleaves.name=บล็อกใบไม้ไม่พอ +gui.status.missingoxygen.name=ออกซิเจนไม่พอ +gui.status.missingpower.name=ไฟฟ้าไม่พอ +gui.status.missingpower.short.name=ไม่มีไฟฟ้า +gui.status.missingtank.name=ไม่มีถังออกซิเจน +gui.status.nofuel.name=ไม่มีเชื้อเพลิง! +gui.status.noinvtarget.name=เป้าหมายไม่มีช่องเก็บของ! +gui.status.noitems.name=ไม่มีไอเท็ม! +gui.status.nooil.name=ไม่มีน้ำมัน +gui.status.not_available.name=ไม่สามารถใช้ได้ +gui.status.not_generating.name=ไม่ได้ทำงาน +gui.status.notargetload.name=ไม่มีเป้าหมายเพื่อส่ง! +gui.status.notargetunload.name=ไม่มีเป้าหมายเพื่อถ่ายสินค้า! +gui.status.off.name=ปิด +gui.status.on.name=เปิด +gui.status.raining.name=ฝนตก +gui.status.ready.name=พร้อม +gui.status.refining.name=กำลังกลั่น +gui.status.running.name=กำลังทำงาน +gui.status.sealed.name=กำลังผนึก +gui.status.sealerblocked.name=ทางออกของอากาศถูกบล็อก! +gui.status.sun_visible.name=มองเห็นพระอาทิตย์ +gui.status.tank_empty.name=ถังออกซิเจนว่างเปล่า +gui.status.targetempty.name=ยานพาหนะว่างเปล่า! +gui.status.targetfull.name=ยานพาหนะเต็ม! +gui.status.unknown.name=ไม่ทราบ +gui.status.unsealed.name=พื้นที่ใหญ่เกินไป ผนึกไม่ได้ +gui.tank.oxygen_remaining=ออกซิเจนที่เหลือ +gui.telemetry_fail.message=ขั้นแรก ฉันต้องการที่จะติดตามสิ่งมีชีวิตโดยใช้โมดูลวัดความถี่! +gui.telemetry_fail_no_frequency_module.message=ฉันต้องการโมดูลวัดความถี่เพื่อใช้งานกับสิ่งนี้! +gui.telemetry_fail_wearing_it.message=ฉันต้องเอาโมดูลวัดความถี่ออก ถ้าจะลิงค์กับเทเลเมตรี! +gui.telemetry_succeed.message=เทเลเมตรีได้สร้างลิงค์ข้อมูลแล้ว +gui.thermal_slot.desc.0=ช่องของเครื่องควบคุมอุณหภูมิ วางเครื่องควบคุม +gui.thermal_slot.desc.1=อุณหภูมิตรงนี้ (ไม่บังคับ) +gui.thermal_slot.desc.2=หมายเหตุ: ใช้พลังงานจำนวนมาก! +gui.title.air_lock.name=เครื่องควบคุมแอร์ล็อคของ %s's +gui.tracking.message=การติดตามทำงานแล้ว คลิกขวาที่เทเลเมตรี เพื่อเชื่อมต่อลิงค์ +gui.village.warning.no_freq_mod=ฉันต้องใส่โมดูลวัดความถี่เพื่อสื่อสารกับเขา! +gui.warning.invalid_thermal=ไม่มีเกราะกันความร้อน! +gui.warning.noroom=พื้นที่ไม่พอ! +gui.warning=คำเตือน! +item.air_fan.name=ใบพัดออกซิเจน +item.air_vent.name=ช่องระบายออกซิเจน +item.basic_item.ambient_thermal_controller.name=เครื่องควบคุมอุณหภูมิ +item.basic_item.canned_food.name=กระป๋องอาหาร +item.basic_item.compressed_aluminum.name=แผ่นอลูมิเนียม +item.basic_item.compressed_bronze.name=แผ่นบรอนซ์ +item.basic_item.compressed_copper.name=แผ่นทองแดง +item.basic_item.compressed_iron.name=แผ่นเหล็ก +item.basic_item.compressed_steel.name=แผ่นเหล็กกล้า +item.basic_item.compressed_tin.name=แผ่นดีบุก +item.basic_item.dehydrated_apple.name=แอปเปิ้ลแห้ง +item.basic_item.dehydrated_carrot.name=แครอทแห้ง +item.basic_item.dehydrated_melon.name=แตงโมแห้ง +item.basic_item.dehydrated_potato.name=มันฝรั่งแห้ง +item.basic_item.frequency_module.name=โมดูลวัดความถี่ +item.basic_item.ingot_aluminum.name=แท่งอลูมิเนียม +item.basic_item.ingot_bronze.name=แท่งบรอนซ์ +item.basic_item.ingot_copper.name=แท่งทองแดง +item.basic_item.ingot_steel.name=แท่งเหล็กกล้า +item.basic_item.ingot_tin.name=แท่งดีบุก +item.basic_item.raw_silicon.name=ซิลิคอนดิบ +item.basic_item.solar_module_0.name=โมดูลโซลาร์แบบเดี่ยว +item.basic_item.solar_module_1.name=แผงโซลาร์แบบเต็ม +item.basic_item.wafer_advanced.name=แผ่นวงจรขั้นสูง +item.basic_item.wafer_basic.name=แผ่นวงจรธรรมดา +item.basic_item.wafer_solar.name=แผ่นวงจรโซลาร์ +item.battery.name=แบตเตอรี่ +item.bucket_fuel.name=ถังเชื้อเพลิง +item.bucket_oil.name=ถังน้ำมัน +item.buggy.name=บั๊กกี้ +item.buggymat.seat.name=ที่นั่งบั๊กกี้ +item.buggymat.storage.name=กล่องเก็บของบั๊กกี้ +item.buggymat.wheel.name=ล้อบั๊กกี้ +item.canister.copper.name=กระป๋องทองแดง +item.canister.tin.name=กระป๋องดีบุก +item.canvas.name=ผ้าใบ +item.cheese_block.name=บล็อกชีส +item.cheese_curd.name=เศษชีส +item.compressed_meteoric_iron.name=แผ่นเหล็กอุกกาบาต +item.dungeonfinder.name=เครื่องหาดันเจี้ยน +item.empty_liquid_canister.name=กระป๋องเปล่า +item.emergency_kit.description=คลิกขวาเพื่อสวมใส่เกียร์ออกซิเจนและ ของสำคัญ คำเตือน: ใช้ครั้งเดียว! +item.emergency_kit.name=ชุดอุปกรณ์ฉุกเฉิน +item.engine.tier1booster.name=บูสเตอร์ เทียร์ 1 +item.engine.tier1engine.name=เครื่องยนต์จรวด เทียร์ 1 +item.flag.name=ธง +item.food.cheese_slice.name=ชีสแผ่น +item.food.burger_bun.name=ขนมปังเบอร์เกอร์ +item.food.beef_patty_raw.name=เนื้อบด (ดิบ) +item.food.beef_patty_cooked.name=เบอร์เกอร์เนื้อ (สุก) +item.food.cheeseburger.desc=นักบินอวกาศชอบชีสเบอร์เกอร์! เป็นอาหารที่กินแล้วจุใจ +item.food.cheeseburger.name=ชีสเบอร์เกอร์ +item.food.canned_beef.name=เนื้อกระป๋อง +item.fuel.name=เชื้อเพลิง +item.fuel_canister.name=กระป๋องเชื้อเพลิง +item.fuel_canister_partial.name=กระป๋องเชื้อเพลิง +item.heavy_plating.name=แผ่นโลหะทนทาน +item.hot_description.name=ร้อน +item.ic2compat.ore_crushed_alu.name=แร่อลูมิเนียมบด +item.ic2compat.ore_purified_alu.name=แร่อลูมิเนียมบดบริสุทธิ์ +item.ic2compat.dust_alu.name=ผงอลูมิเนียม +item.ic2compat.dust_small_titanium.name=ผงไทเทเนียมขนาดเล็ก +item.infinite_battery.name=แบตเตอรี่ไม่จำกัด +item.infinite_oxygen.name=กระป๋องออกซิเจนไม่จำกัด +item.key.t1.name=กุญแจดันเจี้ยน เทียร์ 1 +item.lunar_sapphire.description=ไพลินดวงจันทร์เป็นหน่วยสกุลเงินที่ใช้ แลกเปลี่ยนกับชาวบ้านอวกาศ +item.lunar_sapphire.name=ไพลินดวงจันทร์ +item.meteor_chunk.name=เศษอุกกาบาต +item.meteor_chunk_hot.name=เศษอุกกาบาต +item.meteoric_iron_ingot.name=แท่งเหล็กอุกกาบาต +item.meteoric_iron_raw.name=เหล็กอุกกาบาตดิบ +item.nose_cone.name=กรวยจรวด +item.oil_canister.name=กระป๋องน้ำมัน +item.oil_canister_partial.name=กระป๋องน้ำมัน +item.oil_extractor.name=เครื่องสกัดน้ำมัน +item.oxygen_concentrator.name=หัวเก็บออกซิเจน +item.oxygen_gear.name=เกียร์ออกซิเจน +item.oxygen_mask.name=หน้ากากออกซิเจน +item.oxygen_tank_heavy_empty.name=ถังออกซิเจนเปล่าขนาดใหญ่ +item.oxygen_tank_heavy_full.name=ถังออกซิเจนขนาดใหญ่ +item.oxygen_tank_light_empty.name=ถังออกซิเจนเปล่าขนาดเล็ก +item.oxygen_tank_light_full.name=ถังออกซิเจนขนาดเล็ก +item.oxygen_tank_med_empty.name=ถังออกซิเจนเปล่าขนาดปานกลาง +item.oxygen_tank_med_full.name=ถังออกซิเจนขนาดปานกลาง +item.parachute_black.name=ร่มชูชีพสีดำ +item.parachute_blue.name=ร่มชูชีพสีฟ้า +item.parachute_brown.name=ร่มชูชีพสีน้ำตาล +item.parachute_darkblue.name=ร่มชูชีพสีน้ำเงิน +item.parachute_darkgray.name=ร่มชูชีพสีเทา +item.parachute_darkgreen.name=ร่มชูชีพสีเขียว +item.parachute_gray.name=ร่มชูชีพสีเทาอ่อน +item.parachute_lime.name=ร่มชูชีพสีเขียวมะนาว +item.parachute_magenta.name=ร่มชูชีพสีม่วงแดง +item.parachute_orange.name=ร่มชูชีพสีส้ม +item.parachute_pink.name=ร่มชูชีพสีชมพู +item.parachute_plain.name=ร่มชูชีพ +item.parachute_purple.name=ร่มชูชีพสีม่วง +item.parachute_red.name=ร่มชูชีพสีแดง +item.parachute_teal.name=ร่มชูชีพสีฟ้าเขียว +item.parachute_yellow.name=ร่มชูชีพสีเหลือง +item.rocket_fins.name=ปีกจรวด +item.rocket_t1.name=จรวด เทียร์ 1 +item.schematic.name=แผนผังโต๊ะทำงานนาซ่า +item.sensor_glasses.name=แว่นเซนเซอร์ +item.sensor_lens.name=เลนส์เซนเซอร์ +item.standard_wrench.name=ประแจ +item.steel_axe.name=ขวานแบบทนทาน +item.steel_boots.name=รองเท้าแบบทนทาน +item.steel_chestplate.name=เสื้อเกราะแบบทนทาน +item.steel_helmet.name=หมวกแบบทนทาน +item.steel_hoe.name=จอบแบบทนทาน +item.steel_leggings.name=กางเกงแบบทนทาน +item.steel_pickaxe.name=อีเต้อแบบทนทาน +item.steel_pole.name=เสาเหล็กกล้า +item.steel_shovel.name=พลั่วแบบทนทาน +item.steel_sword.name=ดาบแบบทนทาน +item.tier1.desc=เทียร์ 1 +item_desc.powerdraw.name=พลังงานที่ต้องการ: %s /วินาที +item_desc.shift.name=กด %s สำหรับคำอธิบาย +item_group.galacticraft_blocks=บล็อกกาแลคติคคราฟต์ +item_group.galacticraft_items=ไอเท็มกาแลคติคคราฟต์ +jei.arc_lamp.info=แสงจะส่องสว่างไปยังทิศทางที่หันไป วางบนที่สูงเพื่อให้ได้ประสิทธิภาพ \nที่ดีเยี่ยม! หมุนได้โดยใช้ประแจ +jei.electric_compressor.info=เครื่องบีบอัดไฟฟ้า ประสิทธิภาพเพื่มขึ้นเมื่อเป็นเทียร์ 2 สามารถใช้ท่อดูดเพื่อเติมของหรือเอาของออกได้ +jei.electric_compressor.appeng.info=สำหรับการทำระบบอัตโนมัติด้วย AE2 ตั้งค่า Recipe ด้วยแท่งเหล็กจากม็อดอื่น ๆ ดูได้ที่ https://goo.gl/BwY15G สำหรับข้อมูลเพิ่มเติม +jei.fluid_pipe.info=ท่อสำหรับส่งของเหลวหรือก๊าซ ปั๊มของเหลวออกจากถังเก็บ โดยการใช้ประแจเพื่อเปลี่ยนเป็น 'โหมดดึง' \nท่อที่อยู่ในโหมดดึงจะไม่สามารถเติมของเหลวในถังหรือเครื่องมือได้ จำเป็นต้องทำท่อส่งให้ห่างจากตัวบล็อก 2 บล็อก! +jei.fuel_loader.info=วางไว้ใกล้กับฐานปล่อยจรวด เพื่อเติมเชื้อเพลิงให้กับจรวดที่อยู่บนฐาน เป็นหัวใจสำคัญของการท่องอวกาศ รวมไปถึงการกับมายังโลกด้วย! +jei.magnetic_crafting.info=สามารถใช้ท่อดูดเพื่อทำ Auto-craft ได้จากวิธีการคราฟอันล่าสุดที่คราฟออกมาแล้ว +jei.oxygen_collector.info=กักเก็บออกซิเจนจากโลกหรือใบไม้หรือ พืชที่อยู่ใกล้ ๆ ต่อท่อเพื่อส่งออกซิเจนไปยังเครื่องบีบอัดออกซิเจน เครื่องกระจายฟองออกซิเจนหรือเครื่องผนึก ออกซิเจน +jei.oxygen_distributor.info=สร้างฟองอากาศในอวกาศเพื่อให้ผู้เล่น (และสิ่งมีชีวิตอื่น ๆ) สามารถหายใจได้ เติมออกซิเจนได้จากเครื่องกักเก็บออกซิเจน หรือโมดูลเก็บออกซิเจน +jei.oxygen_sealer.info=วางเพื่อเติมอากาศในห้อง เติมออกซิเจนได้จากเครื่องกักเก็บออกซิเจน หรือโมดูลเก็บออกซิเจน ผนังในห้องจะต้องเป็นของแข็ง \nสามารถหารอยรั่วได้โดยใช้แว่นเซนเซอร์! \nขนาดห้องสูงสุดสำหรับเครื่องผนึกออกซิเจนคือ 10x10x8 \nห้องขนาดใหญ่ต้องใช้เครื่องผนึกออกซิเจน หลายเครื่อง! +jei.wrench.info=เครื่องมือในกาแลคติคคราฟต์ส่วนใหญ่สามารถสับเปลี่ยนทิศได้โดยคลิกขวาที่เครื่องมือ \nและเครื่องมือไฟฟ้าส่วนใหญ่สามารถเปลี่ยน ทิศทางการต่อพลังงานได้โดยกด Shift และคลิกขวา +keybind.map.name=แผนที่กาแลคซี +keybind.sensortoggle.name=สลับโหมดแว่นเซนเซอร์ +keybind.spaceshipinv.name=เปิดช่องเก็บของยานอวกาศ +keybind.vehiclebackward.name=ยานพาหนะถอยหลัง +keybind.vehicledown.name=ยานพาหนะลงข้างล่าง +keybind.vehicleforward.name=ยานพาหนะไปข้างหน้า +keybind.vehicleleft.name=ยานพาหนะไปทางซ้าย +keybind.vehicleright.name=ยานพาหนะไปทางขวา +keybind.vehicleup.name=ยานพาหนะขึ้นข้างบน +moon.moon=ดวงจันทร์ +newversion.failed.name=ตรวจสอบการอัพเดทกาแลคติคคราฟต์ล้มเหลว! ลองอีกครั้งใน 15 วินาที +newversion.success.name=พบกาแลคติคคราฟต์เวอร์ชั่นใหม่: +planet.jupiter=ดาวพฤหัส +planet.mercury=ดาวพุธ +planet.neptune=ดาวเนปจูน +planet.overworld=โลก +planet.saturn=ดาวเสาร์ +planet.uranus=ดาวยูเรนัส +planet.venus=ดาวศุกร์ +satellite.spacestation.overworld=สถานีอวกาศ +schematic.moonbuggy.name=บั๊กกี้ดวงจันทร์ +schematic.rocket_t1.name=จรวด เทียร์ 1 +schematic.rocket_t2.name=จรวด เทียร์ 2 +solarsystem.sol=ระบบสุริยะ +star.sol=ดวงอาทิตย์ +tile.air_lock_controller.name=เครื่องควบคุมแอร์ล็อค +tile.air_lock_frame.description=สามารถใช้วางในแนวนอนหรือแนวตั้งได้ และกั้นออกซิเจนไม่ให้ออกไป +tile.air_lock_frame.name=แอร์ล็อค +tile.air_lock_seal.name=กำแพงแอร์ล็อค +tile.aluminum_wire.alu_wire.description=ใช้เชื่อมต่อแหล่งพลังงานไฟฟ้าไปยัง เครื่องมือต่าง ๆ +tile.aluminum_wire.alu_wire.name=สายไฟอลูมิเนียม +tile.aluminum_wire.alu_wire_heavy.description=ใช้เชื่อมต่อแหล่งพลังงานไฟฟ้าไปยัง เครื่องมือต่าง ๆ และส่งพลังงานได้รวดเร็วกว่า +tile.aluminum_wire.alu_wire_heavy.name=สายไฟอลูมิเนียมแรงสูง +tile.aluminum_wire.alu_wire_switch.description=คุณสมบัติเหมือนกับสายไฟอลูมิเนียม สามารถปิดได้โดยใช้เรดสโตน +tile.aluminum_wire.alu_wire_switch.name=สายไฟอลูมิเนียมแบบสวิตซ์ +tile.aluminum_wire.alu_wire_switch_heavy.description=คุณสมบัติเหมือนกับสายไฟอลูมิเนียมแรงสูง สามารถปิดได้โดยใช้เรดสโตน +tile.aluminum_wire.alu_wire_switch_heavy.name=สายไฟอลูมิเนียมแรงสูงแบบสวิตซ์ +tile.arclamp.description=ใช้เพื่อให้แสงสว่างเป็นบริเวณกว้างและ ช่วยให้ม๊อบต่าง ๆ หนีออกไป +tile.arclamp.name=โคมไฟอาร์ค +tile.basic_block_core.block_aluminum_gc.name=บล็อกอลูมิเนียม +tile.basic_block_core.block_copper_gc.name=บล็อกทองแดง +tile.basic_block_core.block_meteoric_iron_gc.name=บล็อกเหล็กอุกกาบาต +tile.basic_block_core.block_tin_gc.name=บล็อกดีบุก +tile.basic_block_core.block_silicon_gc.name=บล็อกซิลิคอน +tile.basic_block_core.deco_block_0.name=บล็อกดีบุกตกแต่ง +tile.basic_block_core.deco_block_1.name=บล็อกกำแพงดีบุก +tile.basic_block_core.ore_aluminum_gc.name=แร่อลูมิเนียม +tile.basic_block_core.ore_copper_gc.name=แร่ทองแดง +tile.basic_block_core.ore_silicon.name=แร่ซิลิคอน +tile.basic_block_core.ore_tin_gc.name=แร่ดีบุก +tile.basic_block_moon.bricks.name=อิฐดันเจี้ยนดวงจันทร์ +tile.basic_block_moon.cheesestone.name=แร่ชีส +tile.basic_block_moon.coppermoon.name=แร่ทองแดง +tile.basic_block_moon.moondirt.name=ดินดวงจันทร์ +tile.basic_block_moon.moongrass.name=หินผิวดวงจันทร์ +tile.basic_block_moon.moonstone.name=หินดวงจันทร์ +tile.basic_block_moon.sapphiremoon.name=แร่ไพลิน +tile.basic_block_moon.tinmoon.name=แร่ดีบุก +tile.buggy_pad.description=ใช้สำหรับวางรถบั๊กกี้เพื่อเติมเชื้อเพลิง จากเครื่องเติมเชื้อเพลิง วางในพื้นที่ 3x3 และไม่สามารถใช้วางจรวดได้ +tile.cargo.loader.name=เครื่องขนส่งสินค้า +tile.cargo.unloader.name=เครื่องขนถ่ายสินค้า +tile.cargo_loader.description=ใช้ส่งของเข้าจรวดและ ยานพาหนะอื่น ๆ ที่มีช่องเก็บของ และจะต้องวางติดกับฐานปล่อยจรวดหรือ ฐานเติมเชื้อเพลิง +tile.cargo_unloader.description=ใช้นำของออกจากจรวดและ ยานพาหนะอื่น ๆ ที่มีช่องเก็บของ และจะต้องวางติดกับฐานปล่อยจรวดหรือฐาน เติมเชื้อเพลิง +tile.cheese.description=สร้างจากชีสบนดวงจันทร์ วางบนพื้นได้และกินได้ +tile.cheese.name=บล็อกชีส +tile.circuit_fabricator.description=ใช้แปลงวัตถุดิบต่าง ๆ ให้เป็นแผ่นซิลิคอนเพื่อใช้สำหรับ สร้างเครื่องมือขั้นสูงและอื่น ๆ +tile.coal_generator.description=ใช้ผลิตพลังงานจากถ่านหิน หรือบล็อกถ่านหิน แต่อาจจะด้อยประสิทธิภาพในการผลิตพลังงาน +tile.collector.description=ใช้เก็บออกซิเจนจากใบไม้ที่อยู่รอบ ๆ +tile.collector.name=เครื่องกักเก็บออกซิเจน +tile.compressor.description=ใช้สำหรับอัดแท่งเหล็กให้เป็นแผ่น และเป็นเครื่องมือที่จำเป็นที่สุด ในกาแลคติคคราฟต์ +tile.compressor_electric.description=ใช้สำหรับอัดแท่งเหล็กให้เป็นแผ่น อัดได้สองแท่งภายในครั้งเดียว และมีประสิทธิภาพกว่าเครื่องบีบอัดธรรมดา +tile.concealed_detector.name=เครื่องตรวจสอบผู้เล่น +tile.concealed_redstone.name=สายไฟเรดสโตนที่ถูกซ่อน +tile.concealed_repeater.name=เครื่องทวนสัญญาณที่ถูกซ่อน +tile.crude_oil.name=น้ำมัน +tile.crude_oil_moving.name=น้ำมันดิบ +tile.crude_oil_still.name=น้ำมันดิบ +tile.deconstructor.description=เครื่องแยกชิ้นส่วนจะแยกชื้นส่วนของจรวดและไอเท็มอื่น ๆ ออกมาเป็นวัสดุรีไซเคิล +tile.dishbase.description=ใช้ติดตามพิกัดของสถานีอวกาศและรับข้อมูลจากสถานีอวกาศที่ไกลโพ้นได้ +tile.dishbase.name=จานดาวเทียมสื่อสาร +tile.distributor.description=ใช้สำหรับผลิตฟองออกซิเจน สามารถใช้เครื่องเก็บออกซิเจนเชื่อมต่อ เครื่องนี้ได้ หายใจได้เมื่ออยู่ในฟองออกซิเจน +tile.distributor.name=เครื่องกระจายฟองออกซิเจน +tile.dummyblock.cryogenic_chamber.name=ตู้ไครโอเจนิค +tile.dummyblock.launch_pad.name=ฐานปล่อยจรวด +tile.dummyblock.nasa_workbench.name=โต๊ะทำงานนาซ่า +tile.dummyblock.solar.name=แผงโซลาร์ +tile.dummyblock.space_station_base.name=ฐานสถานีอวกาศ +tile.electric_furnace_tier1.description=เผาได้รวดเร็วกว่าเตาเผาธรรมดา +tile.electric_furnace_tier2.description=เผาได้รวดเร็วกว่าเตาเผาธรรมดาและเตาไฟฟ้า สามารถผลิตแร่ได้ 2 เท่า +tile.emergency_box.description=วางกล่องชุดอุปกรณ์ฉุกเฉินใกล้กับจุดลงจอดของจรวดที่แรก เปิดเพื่อใช้ชุดอุปกรณ์ฉุกเฉิน และสามารถไล่ mobs ได้! +tile.emergency_box.filled.name=กล่องชุดอุปกรณ์ฉุกเฉิน (พร้อมชุดเครื่องมือ) +tile.emergency_box.name=กล่องชุดอุปกรณ์ฉุกเฉิน +tile.enclosed.aluminum_wire.name=บล็อกที่ผนึกด้วยสายไฟอลูมิเนียม +tile.enclosed.copper_cable.name=บล็อกที่ผนึกด้วยสายเคเบิลทองแดง +tile.enclosed.description=บล็อกที่ผนึกจะใช้สำหรับห้องที่ อากาศไม่สามารถผ่านได้ +tile.enclosed.fluid_pipe.name=บล็อกที่ผนึกด้วยท่อของเหลว +tile.enclosed.glass_fibre_cable.name=บล็อกที่ผนึกด้วยเคเบิลใยแก้ว +tile.enclosed.gold_cable.name=บล็อกที่ผนึกด้วยเคเบิลทอง +tile.enclosed.heavy_aluminum_wire.name=บล็อกที่ผนึกด้วยสายไฟอลูมิเนียมแรงสูง +tile.enclosed.hv_cable.name=บล็อกที่ผนึกด้วยเคเบิลไฟฟ้าแรงสูง +tile.enclosed.lv_cable.name=บล็อกที่ผนึกด้วยเคเบิลแรงดันต่ำ +tile.enclosed.me_cable.name=บล็อกที่ผนึกด้วยเคเบิลโลหะ +tile.enclosed.pipe_fluids_cobblestone.name=บล็อกผนึกด้วยท่อขนส่งหินหยาบแบบกันน้ำ +tile.enclosed.pipe_fluids_stone.name=บล็อกผนึกด้วยท่อขนส่งหินแบบกันน้ำ +tile.enclosed.pipe_items_cobblestone.name=บล็อกผนึกด้วยท่อขนส่งหินหยาบ +tile.enclosed.pipe_items_stone.name=บล็อกผนึกด้วยท่อขนส่งหิน +tile.enclosed.pipe_power_gold.name=บล็อกผนึกด้วยท่อส่งไฟฟ้าด้วยทอง +tile.enclosed.pipe_power_stone.name=บล็อกผนึกด้วยท่อส่งไฟฟ้าด้วยหิน +tile.energy_storage_module_tier1.description=ใช้สำหรับเก็บพลังงานในปริมาณมาก ๆ เพื่อใช้ในภายหลัง +tile.energy_storage_module_tier2.description=ใช้สำหรับเก็บพลังงานในปริมาณมาก ๆ เพื่อใช้ในภายหลัง และส่งพลังงานได้มากกว่า +tile.fallen_meteor.description=พบได้บนดาวเคราะห์และดวงจันทร์ เมื่อขุดมันจะได้ก้อนเหล็กอุกกาบาตดิบ +tile.fallen_meteor.name=อุกกาบาต +tile.fluid_pipe.description=ท่อของเหลวจะส่งของเหลวและก๊าซจากต้นทาง ไปยังปลายทาง ใช้ประแจเพื่อเปลี่ยนโหมด +tile.fluid_pipe.name=ท่อของเหลว +tile.fluid_pipe_pull.description=ท่อของเหลวจะส่งของเหลวและก๊าซจากต้นทางไปยังปลายทาง ใช้ประแจเพื่อเปลี่ยนโหมด +tile.fluid_pipe_pull.name=ท่อของเหลว +tile.fluid_tank.description=ถังเก็บของเหลวใช้สำหรับเก็บของเหลวหรือก๊าซ ไว้ใช้ในภายหลัง +tile.fluid_tank.name=ถังเก็บของเหลว +tile.fuel.name=เชื้อเพลิง +tile.fuel_block.name=เชื้อเพลิง +tile.fuel_loader.description=เมื่อเชื่อมต่อกับฐานปล่อยจรวด เครื่องจะส่งเชื้อเพลิงไปยังจรวด และยานยนต์อื่น ๆ +tile.fuel_loader.name=เครื่องเติมเชื้อเพลิง +tile.glowstone_torch.description=สามารถใช้แทนคบเพลิงธรรมดาได้ เมื่ออยู่บนอวกาศ +tile.glowstone_torch.name=คบเพลิงหินเรืองแสง +tile.grating.name=ตะแกรง +tile.landing_pad.buggy_fueler.name=ฐานเติมเชื้อเพลิงรถบั๊กกี้ +tile.landing_pad.cargo_pad.name=ฐานปล่อยจรวดขนส่งสินค้า +tile.landing_pad.description=ใช้สำหรับวางจรวดเพื่อเติมเชื้อเพลิงจาก เครื่องเติมเชื้อเพลิง วางในพื้นที่ 3x3 เครื่องเติมเชื้อเพลิง เครื่องขนส่งสินค้าและเครื่องควบคุมการปล่อยจรวดจะเชื่อมต่อกับสิ่งนี้ +tile.landing_pad.landing_pad.name=ฐานปล่อยจรวด +tile.landing_pad_full.name=ฐานปล่อยจรวด +tile.machine.0.name=เครื่องกำเนิดไฟฟ้าถ่านหิน +tile.machine.1.name=โมดูลเก็บพลังงาน +tile.machine.2.name=เตาไฟฟ้า +tile.machine.3.name=เครื่องบีบอัด +tile.machine.7.name=เตาอาร์คไฟฟ้า +tile.machine.8.name=โมดูลเก็บพลังงานแบบคลัสเตอร์ +tile.machine2.4.name=เครื่องบีบอัดไฟฟ้า +tile.machine2.5.name=เครื่องประดิษฐ์แผงวงจร +tile.machine2.6.name=โมดูลเก็บออกซิเจน +tile.machine2.10.name=เครื่องแยกชื้นส่วน +tile.machine3.9.name=เครื่องทาสี +tile.magnetic_table.name=โต๊ะงานช่างแบบแม่เหล็ก +tile.magnetic_table.description=ไอเท็มที่วางอยู่จะไม่หล่นออก! ใช้ Shift-Click เพื่อให้ไอเท็มอยู่บนช่องได้ ใช้ท่อรับส่งใส่หรือเอาไอเท็มออกได้ และมันจะจำวิธีการคราฟล่าสุดที่ถูกคราฟ +tile.moon_stairs_brick.name=บันไดกำแพงดันเจี้ยนดวงจันทร์ +tile.moon_stairs_stone.name=บันไดหินดวงจันทร์ +tile.ore_copper.name=แร่ทองแดง +tile.ore_tin.name=แร่ดีบุก +tile.oxygen_compressor.0.name=เครื่องบีบอัดออกซิเจน +tile.oxygen_compressor.1.name=เครื่องลดความดันออกซิเจน +tile.oxygen_compressor.description=ใช้โหลดออกซิเจนจากเครื่องและ เติมออกซิเจนไปยังถังออกซิเจน +tile.oxygen_decompressor.description=ใช้สำหรับนำออกซิเจนออกจากถังออกซิเจน +tile.oxygen_detector.description=ใช้ตรวจสอบออกซิเจนเมื่อออกซิเจนอยู่รอบ ๆ และจะปล่อยสัญญาณเรดสโตนออกมา เมื่อมีออกซิเจน +tile.oxygen_detector.name=เครื่องตรวจจับออกซิเจน +tile.oxygen_storage_module.description=ใช้สำหรับเก็บออกซิเจนในปริมาณมาก ๆ เพื่อใช้ในภายหลัง +tile.painter.description=ทาสีให้กับกระจกสูญญากาศ แผงแสงไฟหรืออย่างอื่นที่ทาสีได้! +tile.panel_lighting.description=แผงแสงไฟใช้ในอวกาศ! ใช้ประแจเพื่อเปลี่ยนทิศ เพื่อเปลี่ยนลักษณะ: กด SNEAK จะเปลี่ยนไปกับบล็อกที่เลือกในขณะวาง +tile.panel_lighting_0.name=แผงแสงไฟ (สีเหลี่ยม) +tile.panel_lighting_1.name=แผงแสงไฟ (ไฟฉาย) +tile.panel_lighting_2.name=แผงแสงไฟ (เส้นตรง) +tile.panel_lighting_3.name=แผงแสงไฟ (สลัว) +tile.panel_lighting_4.name=แผงแสงไฟ (สลัว) +tile.parachest.description=กล่องจะตกลงมาจากฟ้าเมื่อยานลงจอดบน ดาวต่าง ๆ เช่น โลก ดาวอังคาร ฯลฯ สิ่งที่มีอยู่ข้างในเป็น จรวด เชื้อเพลิงและสัมภาระที่มาจากการ ปล่อยจรวดก่อนหน้านี้ +tile.parachest.name=กล่องสัมภาระ +tile.platform.description=วาง 2x2 เพื่อสร้างแพลตฟอร์ม แพลตฟอร์มจะยกผู้เล่นไปยังแพลตฟอร์มถัดไป (บนหรือล่าง) กด SNEAK เพื่อลง / JUMP เพื่อขึ้น +tile.platform.name=แพลตฟอร์มไฮดรอลิค +tile.refinery.description=ใช้กลั่นน้ำมันดิบให้เป็นเชื้อเพลิง เพื่อนำไปใช้งานกับจรวดและยานยนต์อื่น ๆ +tile.refinery.name=เครื่องกลั่นน้ำมัน +tile.rocket_workbench.description=ใช้สร้างจรวดและยานยนต์หรือพาหนะอื่น ๆ และสามารถเพิ่มแผนผังใหม่ได้เมื่อสู้บอสในดันเจี้ยนสำเร็จ +tile.rocket_workbench.name=โต๊ะทำงานนาซ่า +tile.sapling2.birch.name=ต้นกล้าเบิร์ช +tile.sapling2.jungle.name=ต้นกล้าไม้ป่าดงดิบ +tile.sapling2.oak.name=ต้นกล้าโอ๊ก +tile.sapling2.spruce.name=ต้นกล้าสปรูซ +tile.sealer.description=ใช้ตรวจสอบผนังที่ล้อมรอบหรือถูกปิดสนิท และในพื้นที่ก็จะถูกเติมด้วยออกซิเจน +tile.sealer.name=เครื่องผนึกออกซิเจน +tile.slab_gc_half.moon_bricks_slab.name=แผ่นอิฐดันเจี้ยนดวงจันทร์ +tile.slab_gc_half.moon_slab.name=แผ่นหินดวงจันทร์ +tile.slab_gc_half.tin_slab_1.name=แผ่นดีบุกตกแต่ง +tile.slab_gc_half.tin_slab_2.name=แผ่นดีบุกตกแต่ง +tile.solar.advanced_solar.name=แผงโซลาร์แอดวานซ์ +tile.solar.basic_solar.name=แผงโซลาร์ +tile.solar_adv.description=ใช้เก็บพลังงานจากแสงอาทิตย์ จะเก็บพลังงานได้เต็มที่เมื่อถึงเที่ยงวัน และแผงโซลาร์จะหันเข้าหาดวงอาทิตย์ โดยอัตโนมัติ +tile.solar_basic.description=ใช้เก็บพลังงานจากแสงอาทิตย์ และเก็บพลังงานได้เต็มที่เมื่อถึงเที่ยงวัน (ไม่สามารถหมุนตามทิศทางของดวงอาทิตย์ได้) +tile.space_glass.description=กระจกสูญญากาศสำหรับบนอวกาศ สามารถทาสีได้ด้วยเครื่องทาสี! +tile.space_glass.clear.description=กระจกสูญญากาศแบบใส สามารถให้มุมมองที่ชัดเจนในใต้น้ำได้ +tile.space_glass.strong.description=กระจกสูญญากาศแข็งแรงและกันแรงระเบิด ทำจากอลูมิเนียมโปร่งใส +tile.space_glass_clear.name=กระจกสูญญากาศ (ใส) +tile.space_glass_vanilla.name=กระจกสูญญากาศ +tile.space_glass_strong.name=กระจกสูญญากาศ (แข็งแรง) +tile.space_station_base.name=ฐานสถานีอวกาศ +tile.spin_thruster.description=ใช้สำหรับสถานีอวกาศ เพื่อทำให้สถานีอวกาศหมุน +tile.spin_thruster.name=สปินทรัสเตอร์ +tile.telemetry.description=สิ่งนี้จะมีประโยชน์สำหรับเก็บข้อมูล จากจรวด ผู้เล่นหรือสิ่งมีชีวิตอื่น ๆ ให้วางติดกับหน้าจอแสดงผล และใช้โมดูลวัดความถี่สร้างลิงค์ข้อมูล +tile.telemetry.name=เทเลเมตรี +tile.tin_stairs_1.name=บันไดดีบุกตกแต่ง +tile.tin_stairs_2.name=บันไดดีบุกตกแต่ง +tile.treasure_chest.description=พบได้ในดันเจี้ยนบนดวงจันทร์และกล่อง จะปลดล็อคได้ต่อเมื่อสู้กับบอสชนะ +tile.treasure_chest.name=กล่องสมบัติ +tile.unlit_torch.name=คบเพลิง +tile.unlit_torch_stone.name=คบเพลิงหิน +tile.unlit_torch_lit.name=คบเพลิง +tile.unlit_torch_stone_lit.name=คบเพลิงหิน +tile.view_screen.description=ใช้แสดงภาพระบบสุริยะ โลก เวลา และตรวจสอบสถานะของสิ่งมีชีวิต คลิกขวาที่บล็อกเพื่อเปลี่ยนการแสดงผล +tile.view_screen.name=หน้าจอแสดงผล +tile.wall_gc.moon.name=กำแพงหินดวงจันทร์ +tile.wall_gc.moon_bricks.name=กำแพงอิฐดันเจี้ยนดวงจันทร์ +tile.wall_gc.tin.name=กำแพงดีบุกตกแต่ง diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/tr_tr.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/tr_tr.lang new file mode 100644 index 00000000..4ba91c0d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/tr_tr.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=%s adlı kişinin Astro Madenci Makinesi adeti: %s +commands.dimensionteleport=%s şu atmosfere gönderildi%s +commands.dimensiontp.too_many=Çok fazla komut var! Kullanımı: %s +commands.gcenergyunits.invalid_units=Bu ünite için /GCEnergyUnits komutu yanlış. Kullanımı: %s +commands.gcenergyunits.no_units=Üniteyi belirtmeniz gerekir! Kullanımı: %s +commands.joinrace.no_team=Takımı belirtmeniz gerekir! Kullanımı: %s +commands.ssinvite.not_found=Adınıza ait Uzay İstasyonu bulunamadı, ilk önce seyahat et! +commands.ssinvite.wrong_usage=Çok az komut var! Kullanımı: %s +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=%s adlı kişi İstasyon listenizde bulunmuyor! +container.cargoloader.name=Kargo Yükleyici +container.cargounloader.name=Kargo Boşaltıcı +container.fuelloader.name=Yakıt Yükleyicisi +container.lander.name=Uzay Lander +container.oxygencollector.name=Oksijen Toplayıcısı +container.oxygencompressor.name=Oksijen Kompresör +container.oxygendecompressor.name=Oksijen Açıcı +container.oxygendistributor.name=Oksijen Distribütörü +container.oxygensealer.name=Oksijen Mühürleyen +container.parachest.name=Para-Sandık +container.refinery.name=Rafineri +container.solaradvanced.name=Gelişmiş Güneş Paneli +container.solarbasic.name=Basit Güneş Paneli +container.spaceship.name=Tier 1 Roket +container.treasurechest.name=Hazine Sandığı +death.attack.oxygen_suffocation=%1$s oksijen yetersizliğinden öldü! +death.attack.spaceship_crash=%1$s's roket sert bir kaza yaptı. +death.attack.thermal=%1$s termal koruması olmadığı için öldü. +dimension.moon.name=Ay +dimension.overworld.name=Dünya +dimension.sun.name=Güneş +entity.alien_villager.name=Uzaylı Köylü +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Gelişmiş Creeper +entity.evolved_skeleton.name=Gelişmiş İskelet +entity.evolved_skeleton_boss.name=Gelişmiş İskelet Patronu +entity.evolved_spider.name=Gelişmiş Örümcek +entity.evolved_zombie.name=Gelişmiş Zombi +entity.flag.name=Bayrak +entity.gcflag.name=Bayrak +entity.gravity_arrow.name=Ok +entity.lander.name=Uzay Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Parçası +entity.oxygen_bubble.name=Oksijen Kabarcığı +entity.para_chest.name=Para Sandık +entity.rocket_t1.name=Tier 1 Roket +galaxy.milky_way=Samanyolu +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=โหมดท้าทาย (เริ่มที่ดาวเคราะห์น้อย) +gc.configgui.biome_id_base=Biyom ID GC Modu İçin Başlangıçı +gc.configgui.detectable_i_ds=Algılanabilr ID'ler +gc.configgui.disable_cheese_moon=Ay Peynirini Yaratmasını Kapat +gc.configgui.disable_copper_moon=Ayda Bakır Yaratmasını Kapat +gc.configgui.disable_lander=Ay Lander'ını Kapat +gc.configgui.disable_moon_village_gen=Ayda Köy Yaratmasını Kapat +gc.configgui.disable_space_station_creation=Uzay İstasyonu Yaratmasını Kapat +gc.configgui.disable_spaceship_grief=Roket Patlamasını Kapat +gc.configgui.disable_spaceship_particles=Rokettin Partiküllerini Gizle +gc.configgui.disable_tin_moon=Ayda Kalay Yaratmasını Kapat +gc.configgui.disable_update_check=ปิดการตรวจสอบเวอร์ชั่น +gc.configgui.dungeon_boss_health_mod=Zindan Bosu Can Değiştirici +gc.configgui.enable_aluminum_ore_gen=Dünyada Alüminyum Yarat +gc.configgui.enable_copper_ore_gen=Dünyada Bakır Yarat +gc.configgui.enable_debug=Debug Mesajlarını Konsolda Göster +gc.configgui.enable_other_mods_features=Diğer Modların Madenlerini Yarat +gc.configgui.enable_retrogen_oil=Dünyadaki Her Yere Ham Petrol +gc.configgui.enable_sealer_edge_checks=Mühürlü Odayı Kontrol Et +gc.configgui.enable_silicon_ore_gen=Dünyada Silikon Yarat +gc.configgui.enable_thaum_craft_nodes=ThaumCraft, Bir Şeyler Yaratmasına İzin Ver +gc.configgui.enable_tin_ore_gen=Dünyada Kalay Yarat +gc.configgui.external_oil_gen=Harici Ham Petrol Yaratma +gc.configgui.force_overworld_respawn=Dünyayı Yeniden Yarat +gc.configgui.hard_mode=Zor Mod +gc.configgui.id_achiev_base=Başarı Başlangıç ID'si +gc.configgui.id_dimension_moon=Ay Boyut ID'si +gc.configgui.id_dimension_overworld_orbit=Uzay İstasyonu Boyut ID'si +gc.configgui.id_dimension_overworld_orbit_static=Uzay İstasyonu Sabit Boyut ID'si +gc.configgui.id_schematic_add_schematic=Şematik ID "Ekle Şematik" +gc.configgui.id_schematic_moon_buggy=Buggy Şematik ID'si +gc.configgui.id_schematic_rocket_t1=Tier 1 Roket Şematik ID'si +gc.configgui.key_override_fuel_level=Tuş Ayarla: Roket Yakıt Arayüzü +gc.configgui.key_override_toggle_adv_goggles=Tuş Ayarla: Advanced Goggles +gc.configgui.map_scroll_invert=Haritada Farenin Tekerleğini Ters Çevir +gc.configgui.map_scroll_sensitivity=Haritadaki Fare Tekerleğinin Hassasiyeti +gc.configgui.meteor_block_damage=Meteor Bloğunun Hasar Alması +gc.configgui.meteor_spawn_mod=Meteor Yaratma Derecesi +gc.configgui.more_stars=Daha Fazla Yıldız Göster +gc.configgui.oil_gen_factor=Ham Petrol Yaratma Değeri +gc.configgui.ore_dict_silicon=Silikonun Diğer Modlardaki Hali +gc.configgui.other_mod_ore_gen_i_ds=Diğer Modların Madenlerini Gezegenlerde Yarat +gc.configgui.override_capes=Bağışcı Pelerinlerini Göster +gc.configgui.override_map=Tuş Ayarla: Galaksi Haritası +gc.configgui.oxygen_indicator_bottom=Oksijen Göstergesini Aşağıda Göster +gc.configgui.oxygen_indicator_left=Oksijen Göstergesini Solda Göster +gc.configgui.quick_mode=Hızlı Oyun (daha kolay) +gc.configgui.rocket_disable_overworld_return=Roketin Dünyaya Dönmesini Engelle +gc.configgui.rocket_disabled_dimensions=Boyutlarda Roketi Engelle +gc.configgui.rocket_fuel_factor=Roket Yakıt Faktörü +gc.configgui.sealable_i_ds=Mühürlenebilir Bloklar +gc.configgui.space_station_energy_scalar=Uzay İstasyonu Eneji Değiştirici +gc.configgui.space_stations_require_permission=Uzay İstasyonu İzni +gc.configgui.static_loaded_dimensions=Sabit Olan Boyutlar Yüklensin +gc.configgui.suffocation_cooldown=Boğulma Beklemesi +gc.configgui.suffocation_damage=Boğulma Hasarı +gc.configgui.title=Galacticraft Core Ayarları +gc.configgui.whitelist_co_f_h_core_gen=CoFHCore Dünya Yaratmasında İzin Ver +gui.battery_slot.desc.0=Pil yuvası, pili buraya koyun +gui.battery_slot.desc.1=veya dışardan güç bağlayın. +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Hızlandırmak +gui.buggy.decel.name=Yavaşlatmak +gui.buggy.inv.name=Envanter / Yakıt Durumu +gui.buggy.storage_space=Depolama Alanı +gui.buggy.turn.name=Sol-Sağ +gui.button.back.name=Geri +gui.button.disable.name=Devre Dışı +gui.button.disableseal.name=Mührü Devre Dışı Bırak +gui.button.enable.name=Etkin +gui.button.enableseal.name=Mührü Etkinleştir +gui.button.hide_dest.name=Gizle +gui.button.loadfuel.name=Yakıtı Yükle +gui.button.loaditems.name=İtemları Yükle +gui.button.next.name=İleri +gui.button.refine.name=Rafine Et +gui.button.stoploading.name=Yüklenmeyi Durdur +gui.button.stoprefine.name=Rafine Etmeyi Durdur +gui.button.stopunloading.name=Boşaltmayı Durdur +gui.button.unhide_dest.name=Gizleme +gui.button.unloaditems.name=İtemları Boşalt +gui.button.unlockschematic.name=Şematik Kilidini Aç +gui.checkbox.horizontal.name=Yatay Modu +gui.checkbox.invert.name=Seçimin Tersine +gui.checkbox.player_name.name=Oyuncu adı +gui.checkbox.player_within.name=Oyuncu yakınlığı +gui.checkbox.redstone_signal.name=Kızıltaş Sinyalini Aç +gui.chest.warning.wrongkey=Tier %s için zindandan yeni bir şematik bulun! +gui.choose_planet.desc.moon=Yaşanabilir#Oksijen Bulunmuyor#Yerçekimi: %18 +gui.choose_planet.desc.overworld=Hayat Dolu#Yaşanabilir#Yerçekimi: %100 +gui.chooseplanet.alreadycreated1.name=Uzay istasyonu zaten var +gui.chooseplanet.alreadycreated2.name=Yaratıldı! +gui.chooseplanet.cannotcreate1.name=Uzaya yaratamazsınız +gui.chooseplanet.cannotcreate2.name=Burada İstasyon! +gui.creative_only.desc=Sadece Yaratıcı Modu +gui.display.nolink=ไม่ได้เชื่อมต่อ +gui.docking_rocket.current_vel.name=Şu Anki Hız +gui.docking_rocket.distance_from.name=Hedef Uzaklık +gui.docking_rocket.target_vel.name=Hedef Hız +gui.docking_rocket.warning.name.0=%s Tuşuna Basarak Yavaşlatın +gui.docking_rocket.warning.name.1=%s Tuşuna Basarak Hızlandırın +gui.dropbox.player_distance.name.0=1 Metre +gui.dropbox.player_distance.name.1=2 Metre +gui.dropbox.player_distance.name.2=5 Metre +gui.dropbox.player_distance.name.3=10 Metre +gui.electric_compressor.desc.0=İlerleme +gui.energy_storage.desc.0=Enerji Deposu +gui.energy_storage.desc.1=Enerji +gui.flag.already_placed=Zaten bayrak bulunuyor! +gui.frequency_module.desc.0=Zayıf sesleri alabilirsiniz +gui.frequency_module.desc.1=dalgaları ve uzak sinyalleride +gui.frequencymodule.warning0=Burada düzgün duymak için +gui.frequencymodule.warning1=gerekir. +gui.fuel_output.desc.0=Buraya boş sıvı bidonu koyun +gui.fuel_output.desc.1=koyduğunuz sıvı bidonu +gui.fuel_output.desc.2=yakıt tankını boşaltacak +gui.fuel_tank.desc.0=Yakıt Tankı. Yakıt +gui.fuel_tank.desc.1=yükleyicisi ile +gui.fuel_tank.desc.2=Yakıt tankına +gui.fuel_tank.desc.3=yakıt bidonu ile +gui.fuel_tank.desc.4=Yakıt Tankı +gui.infinite_item.desc=Sonsuz +gui.lander.velocity=Giriş Hızı +gui.lander.velocityu=m/s +gui.lander.warning2=Yavaşlamak için " +gui.lander.warning3=" tuşuna basılı tut! +gui.max_output.desc=Maksimum Çıkış +gui.message.addnewsch.name=Yeni Şematik Ekle +gui.message.apply.name=Onayla +gui.message.assign_name.name=Adı Onayla +gui.message.atmosphere.name=Atmosfer +gui.message.back.name=Geri +gui.message.breed.name=Yetiştir +gui.message.bubble_visible.name=Kabarcıklar Görünebilir +gui.message.can_create_space_station.name=Uzay istasyonunu buraya kurabilirsiniz! +gui.message.cancel.name=İptal +gui.message.cannot_create_space_station.name=Uzay istasyonu buraya kurulamaz. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Yakınlaştırmak için terkrar tıklayın (aylara ve uydulara bak) +gui.message.click_again.1.name=Yakınlaştırmak için terkrar tıklayın (aylara bak) +gui.message.click_again.2.name=Yakınlaştırmak için terkrar tıklayın (uydulara bak) +gui.message.click_again.3.name=Yakınlaştırmak için terkrar tıklayın +gui.message.clicklink=Galacticraft Wiki'si İçin Tıkla +gui.message.create_ss.name=Yarat +gui.message.daynightcycle.name=Gündüz-Gece Döngüsü +gui.message.energy=Enerji +gui.message.environment.name=Çevresel Kuvvetlendirme +gui.message.exit.name=Çıkış +gui.message.fuel.name=Yakıt +gui.message.full.name=Dolu +gui.message.generating.name=Durum +gui.message.grow.name=Büyüt +gui.message.heal.name=İyileştir +gui.message.help1=Galacticraft yardımı +gui.message.help1a=Bu mesajı her zaman görüyorsanız, komutu kullan: +gui.message.help2=1. Uzay programına katılın +gui.message.help3=2. Ham petrol ile yardım edin +gui.message.in.name=Giriş +gui.message.launch.name=Git +gui.message.max_energy=En Yüksek Enerji +gui.message.meansurfacetemp.name=Ortalama Yüzey Sıcaklığı +gui.message.moon.atmosphere.0.name=Bulunmuyor +gui.message.moon.daynightcycle.0.name=29.5 Dünya Günü +gui.message.moon.meansurfacetemp.0.name=(Aydınlık Taraf) 253C +gui.message.moon.meansurfacetemp.1.name=(Karanlık Taraf) -153C +gui.message.moon.surfacecomposition.0.name=Bazaltik Kaya ve +gui.message.moon.surfacecomposition.1.name=Peynir İzleri +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(%18 dünya) +gui.message.of.name=arasında +gui.message.oil.name=Yağ +gui.message.out.name=Çıkış +gui.message.overworld.atmosphere.0.name=Azot ve Oksijen +gui.message.overworld.atmosphere.1.name=Hayat Desteği +gui.message.overworld.daynightcycle.0.name=1 Dünya Günü +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Taş, toprak, ve +gui.message.overworld.surfacecomposition.1.name=çakıl +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(%100 dünya) +gui.message.prelaunch=Ön fırlatış kontrol listesi +gui.message.rename.name=Yeniden Adlandır +gui.message.select_ss.name=Uzay İstasyonunu Seç +gui.message.ss_owner.name=Sahibi: +gui.message.status.name=Durum +gui.message.strengthen.name=Güçlendir +gui.message.surfacecomposition.name=Yüzey Kompozisyon +gui.message.surfacegravity.name=Yerçekimi +gui.message.thermal_status.name=Sıcaklık Kontrolü +gui.message.tier.name=Tier %d +gui.message.unnamed.name=Adsız +gui.missing_core.name.0=MicdoodleCore mods klasöründe bulunamadı +gui.missing_core.name.1=Bu yüzden Galacticraft yüklenemedi +gui.missing_core.name.2=Minecraft'tı kapatın ve "MicdoodleCore" modunu kurun +gui.missing_core.name.3=Buraya tıklayarak indirme sayfasını açın +gui.new_schematic.slot.desc.0=Yeni şematik yuvası. +gui.new_schematic.slot.desc.1=Yeni şematikler +gui.new_schematic.slot.desc.2=gezegen ve aydaki +gui.new_schematic.slot.desc.3=zindanlarda bulunur. +gui.oil_tank.desc.0=Yağ tankını doldurmak için +gui.oil_tank.desc.1=yağ bidonlarını kullanın +gui.oxygen.warning=Oksijen Kurulumu Geçersiz! +gui.oxygen_compressor.slot.desc.0=Kompresör tank slotu, buraya oksijen +gui.oxygen_compressor.slot.desc.1=tankı koyarak doldurabilirsiniz. +gui.oxygen_decompressor.slot.desc.0=Oksijen Açıcı tank slotu, buraya oksijen +gui.oxygen_decompressor.slot.desc.1=tankı koyarak boşaltabilirsiniz. +gui.oxygen_slot.desc.0=Oksijen slotu, buraya oksijen tankı veya silindiri +gui.oxygen_slot.desc.1=koyun ya da bağlanmış oksijen kaynağı kullan +gui.oxygen_storage.desc.0=Oksijen deposu +gui.oxygen_storage.desc.1=Oksijen +gui.oxygen_use.desc=Oksijeni Kullan +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Yemek +gui.player.health=Sağlık +gui.player.ouch=ah!!!! +gui.receiver.cannot_attach=Buraya alıcı takamazsınız! +gui.requires_controller.desc=Fırlatma Kontrolörü Gerekiyor +gui.rocket.countdown=Geri Sayım +gui.rocket.height=Yükseklik +gui.rocket.inv.name=Envanter / Yakıt +gui.rocket.launch.name=Fırlat +gui.rocket.launched=Fırlatıldı +gui.rocket.on_launchpad=Fırlatma Pedinde +gui.rocket.speed=Hız +gui.rocket.turn.name=Sol-Sağ +gui.rocket.updown.name=Yukarı-Aşağı +gui.rocket.warning.nofuel=Yakıtınız bulunmuyor. En yakın zamanda yakıt doldurun. +gui.rocket.warning.nogyroscope=Jiroskop çılgınca dönerken gizemli güçler devreye altındadır! +gui.rocket.warning.noparachute=Paraşütünüz bulunmuyor. Fırlat tuşuna tekrar basarak uçabilirsiniz ama sorun olabilir! +gui.rocket_type.0=Depolama Alanı: 18 +gui.rocket_type.1=Depolama Alanı: 36 +gui.rocket_type.2=Depolama Alanı: 56 +gui.rocket_type.3=Sınırsız Yakıt +gui.seconds=s +gui.sensor.advanced=Gelişmiş Mod +gui.sensor.advancedoff=KAPALI +gui.sensor.advancedon=AÇIK +gui.show_bubble.desc.0=Kabarcıklar Gözükecek +gui.skeleton_boss.message=Yaratık yok oldu, yaratık ile savaşırken odadan ayrılmayın! Odaya tekrar girerek savaşa devam edebilirsiniz. +gui.space_race.chat.add_success=%s, Uzay Yarışna girdiniz. +gui.space_race.chat.already_part=Zaten Uzay Yarışındasınız! +gui.space_race.chat.invite_received=Uzay Yarışı takım davetiyesi %s adlı kişiye gönderildi. +gui.space_race.chat.not_found=Bu oyuncu bulunamıyor: %s +gui.space_race.chat.remove_success=%s, Uzay Yarışından silindiniz. +gui.space_race.chat.to_join=Katılmak için %s bu komutu kullanın %s +gui.space_race.coming_soon=Çok Yakında +gui.space_race.create.add_players.name=Oyuncu ekle +gui.space_race.create.back.name=Geri +gui.space_race.create.brush_radius.name=Fırça Çapı +gui.space_race.create.brush_size.name=Fırça Boyutu +gui.space_race.create.change_color.name.0=Değiştir +gui.space_race.create.change_color.name.1=Takım +gui.space_race.create.change_color.name.2=Renk +gui.space_race.create.close.name=Kapat +gui.space_race.create.customize.name=Bayrağı Düzenle +gui.space_race.create.eraser_radius.name=Silgi Çapı +gui.space_race.create.eraser_size.name=Silgi Boyutu +gui.space_race.create.global_stats.name=Global İstatistiklerine Bak +gui.space_race.create.invite_player.name=Oyuncu Daveti +gui.space_race.create.player_radius.name=Not: Davet edeceğiniz oyuncular yakında olmalı (25 blok) +gui.space_race.create.rem_players.name=Oyuncu sil +gui.space_race.create.remove.name=Sil +gui.space_race.create.remove_player.name=Oyuncu Silici +gui.space_race.create.rename.name=Takım Adını Değiştir +gui.space_race.create.send_invite.name=Davetiye Gönder +gui.space_race.create.server_stats.name=Sunucu İstatistiklerine Bak +gui.space_race.create.title.name=Uzay Yarışı Düzenliyicisi +gui.space_race.create.title.name.0=Uzay Yarışı +gui.space_race.create.title.name.1=düzenliyici +gui.space_race.join.member_count.name=%d oyuncular +gui.space_race.join.name=เข้าร่วม +gui.space_race.join.owner.name=Kurucu +gui.space_race.join.title.name=Uzay Yarışı Düzenliyicisi +gui.space_race.unnamed=Adsız Takım +gui.spacestation.added=İstasyonunuza %s adlı kişiyi eklediniz. +gui.spacestation.addsuccess=İstasyon listensine %s adlı kişi başarıyla eklendi. +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= +gui.spacestation.removesuccess=İstasyon listesinden %s adlı kişiyi sildiniz. +gui.spacestation.to_allow_entry=Başka bir oyuncu sizin uzay istasyonunuza giriyor! +gui.spacestation.type_command=Tür +gui.status.active.name=Aktif +gui.status.air_lock_closed.name=Hava Kilidi Kapalı +gui.status.air_lock_open.name=Hava Kilidi Açık +gui.status.blockedfully.name=Güneş Yok +gui.status.blockedpartial.name=Güneş Kısmen Gözüküyor +gui.status.check_pending.name=Bekleme Kontrol Ediliyor +gui.status.check_starting.name=Doğrulama Başlıyor +gui.status.checking_seal.name=Mühür Kontrol Ediliyor +gui.status.collecting.name=Toplanıyor +gui.status.collectingenergy.name=Enerji Toplanıyor +gui.status.compressing.name=Şıkıştırılıyor +gui.status.disabled.name=Kapalı +gui.status.fulltank.name=Oksijen Tankı Tam Dolu +gui.status.generating.name=Üretiliyor +gui.status.hull_heat.name=Yüksek Isı +gui.status.idle.name=Boş +gui.status.missingleaves.name=Yaprak Blokları Yetersiz +gui.status.missingoxygen.name=Yeterli Oksijen Yok +gui.status.missingpower.name=Yeterli Enerji Yok +gui.status.missingtank.name=Oksijen Tankı Doğrulanamadı +gui.status.nofuel.name=Yüklemek İçin Yakıt Yok! +gui.status.noinvtarget.name=Hedefin Envanteri Yok! +gui.status.noitems.name=Yüklemek İçin Item Yok! +gui.status.nooil.name=Petrol Yok +gui.status.not_available.name=N/A +gui.status.not_generating.name=Üretilmiyor +gui.status.notargetload.name=Yüklemek İçin Hedef Yok! +gui.status.notargetunload.name=Boşaltmak İçin Hedef Yok! +gui.status.off.name=Kapalı +gui.status.on.name=Açık +gui.status.raining.name=Yağmurlu +gui.status.ready.name=Hazır +gui.status.refining.name=Rafine Ediliyor +gui.status.running.name=Sürüyor +gui.status.sealed.name=Mühürlü +gui.status.sealerblocked.name=Havalandırma Çıkışı Tıkalı! +gui.status.sun_visible.name=Güneş Gözükmesi +gui.status.tank_empty.name=Oksijen tankı boş +gui.status.targetempty.name=Hedeflenen Araç Boş! +gui.status.targetfull.name=Hedeflenen Araç Dolu! +gui.status.unknown.name=Bilinmeyen +gui.status.unsealed.name=Mühürsüz +gui.tank.oxygen_remaining=Kalan Oksijen +gui.telemetry_fail.message=1. İlk önce Frekans Modülü ile bağlantı yapacağam entity'e bağlamam lazım! (yada giymeyi deniyebilirim!) +gui.telemetry_fail_no_frequency_module.message=Bunu kullanmak için elimde Frekans Modülü olması gerekiyor galiba! +gui.telemetry_fail_wearing_it.message=Frekans Modülünü çıkarmam gerek çünkü Telemetri Ünitesiyle bağlantıya geçmek istiyorum! +gui.telemetry_succeed.message=Telemetri bağlantısı kuruldu. +gui.thermal_slot.desc.0=Sıcaklık boş slota 'Çevre Sıcaklık +gui.thermal_slot.desc.1=Kontrolü' yerleştir (opsiyonel) +gui.thermal_slot.desc.2=Not: Fazla enerji kullanır! +gui.title.air_lock.name=%s Adlı Kişinin Hava Kilidi +gui.tracking.message=Bağlantı başladı. Şimdi, bağlantıyı tamamlamak için Telemetri Ünitesine sağ tıklamam lazım. +gui.warning=UYARI! +gui.warning.invalid_thermal=Termal korumanız geçersizdir! +gui.warning.noroom=Oda Yetersiz! +item.air_fan.name=Oksijen Fan +item.air_vent.name=Oksijen Havalandırması +item.basic_item.ambient_thermal_controller.name=Çevre Sıcaklık Kontrolü +item.basic_item.canned_food.name=Uzay Yiyecekleri +item.basic_item.compressed_aluminum.name=Sıkıştırılmış Alüminyum +item.basic_item.compressed_bronze.name=Sıkıştırılmış Bronz +item.basic_item.compressed_copper.name=Sıkıştırılmış Bakır +item.basic_item.compressed_iron.name=Sıkıştırılmış Demir +item.basic_item.compressed_steel.name=Sıkıştırılmış Çelik +item.basic_item.compressed_tin.name=Sıkıştırılmış Kalay +item.basic_item.dehydrated_apple.name=Susuz Elma +item.basic_item.dehydrated_carrot.name=Susuz Havuç +item.basic_item.dehydrated_melon.name=Susuz Karpuz +item.basic_item.dehydrated_potato.name=Susuz Patates +item.basic_item.frequency_module.name=Frekans Modülü +item.basic_item.ingot_aluminum.name=Alüminyum Külçesi +item.basic_item.ingot_bronze.name=Bronz Külçesi +item.basic_item.ingot_copper.name=Bakır Külçesi +item.basic_item.ingot_steel.name=Çelik Külçesi +item.basic_item.ingot_tin.name=Kalay Külçesi +item.basic_item.raw_silicon.name=Ham Silikon +item.basic_item.solar_module_0.name=Güneş Paneli +item.basic_item.solar_module_1.name=Çoklu Güneş Paneli +item.basic_item.wafer_advanced.name=Gelişmiş Wafer +item.basic_item.wafer_basic.name=Basit Wafer +item.basic_item.wafer_solar.name=Mavi Güneş Wafer'ı +item.battery.name=Pil +item.bucket_fuel.name=Benzin Kovası +item.bucket_oil.name=Ham Petrol Kovası +item.buggy.name=Buggy +item.buggymat.seat.name=Buggy Koltuğu +item.buggymat.storage.name=Buggy Depolama Kutusu +item.buggymat.wheel.name=Buggy Tekerleği +item.canister.copper.name=Bakır Teneke Kutusu +item.canister.tin.name=Kalay Teneke Kutusu +item.canvas.name=Parşomen +item.cheese_block.name=Peynir Bloğu +item.cheese_curd.name=Lor Peynir +item.compressed_meteoric_iron.name=Sıkıştırılmış Meteorik Demir +item.empty_liquid_canister.name=Boş Sıvı Silindiri +item.engine.tier1booster.name=Tier 1 Hızlandırı +item.engine.tier1engine.name=Tier 1 Roket Motoru +item.flag.name=Bayrak +item.fuel.name=Roket Yakıtı +item.fuel_canister.name=Dolu Yakıt Silindiri +item.fuel_canister_partial.name=Kısmen Dolu Yakıt Silindiri +item.heavy_plating.name=Ağır Plaka +item.hot_description.name=Sıcak +item.infinite_battery.name=Sonsuz Pil +item.infinite_oxygen.name=Sonsuz Oksijen Kaynağı +item.key.t1.name=Tier 1 Zindan Anahtarı +item.meteor_chunk.name=Throwable Meteor Chunk +item.meteor_chunk_hot.name=Throwable Meteor Chunk +item.meteoric_iron_ingot.name=Meteorik Demir Külçesi +item.meteoric_iron_raw.name=Ham Meteorik Demir +item.nose_cone.name=Roket Burnu +item.oil_canister.name=Dolu Petrol Silindiri +item.oil_canister_partial.name=Kısmen Dolu Petrol Silindiri +item.oil_extractor.name=Taşınabilir Petrol Çıkarıcı +item.oxygen_concentrator.name=Oksijen Konsantratörü +item.oxygen_gear.name=Oksijen Takımı +item.oxygen_mask.name=Oksijen Maskesi +item.oxygen_tank_heavy_empty.name=Boş Ağır Oksijen Tankı +item.oxygen_tank_heavy_full.name=Ağır Oksijen Tankı +item.oxygen_tank_light_empty.name=Boş Işıklı Oksijen Tankı +item.oxygen_tank_light_full.name=Işıklı Oksijen Tankı +item.oxygen_tank_med_empty.name=Boş Orta Büyüklükte Oksijen Tankı +item.oxygen_tank_med_full.name=Orta Büyüklükte Oksijen Tankı +item.parachute_black.name=Siyah Paraşüt +item.parachute_blue.name=Açık Mavi Paraşüt +item.parachute_brown.name=Kahverengi Paraşüt +item.parachute_darkblue.name=Mavi Paraşüt +item.parachute_darkgray.name=Gri Paraşüt +item.parachute_darkgreen.name=Yeşil Paraşüt +item.parachute_gray.name=Açık Gri Paraşüt +item.parachute_lime.name=Açık Yeşil Paraşüt +item.parachute_magenta.name=Eflatun Paraşüt +item.parachute_orange.name=Turuncu Paraşüt +item.parachute_pink.name=Pembe Paraşüt +item.parachute_plain.name=Paraşüt +item.parachute_purple.name=Mor Paraşüt +item.parachute_red.name=Kırmızı Paraşüt +item.parachute_teal.name=Turkuaz Paraşüt +item.parachute_yellow.name=Sarı Paraşüt +item.rocket_fins.name=Roket Kanatları +item.rocket_t1.name=Tier 1 Roket +item.schematic.name=NASA Çalışma Masası Şematiği +item.sensor_glasses.name=Sensörlü Gözlük +item.sensor_lens.name=Sensör Merceği +item.standard_wrench.name=Standart İngiliz anahtarı +item.steel_axe.name=Ağır Balta +item.steel_boots.name=Ağır Bot +item.steel_chestplate.name=Ağır Zırh +item.steel_helmet.name=Ağır Kask +item.steel_hoe.name=Ağır Çapa +item.steel_leggings.name=Ağır Pantalon +item.steel_pickaxe.name=Ağır Kazma +item.steel_pole.name=Çelik Direk +item.steel_shovel.name=Ağır Kürek +item.steel_sword.name=Ağır Kılıç +item.tier1.desc=Tier 1 +item_desc.powerdraw.name=Gereken enerji: %s /s +item_desc.shift.name=%s tuşuna basarak daha detaylı bilgi +item_group.galacticraft_blocks=Galacticraft Blokları +item_group.galacticraft_items=Galacticraft Itemları +keybind.map.name=Galaksi Haritası +keybind.sensortoggle.name=Sensörlü Gözlük Modunu Değiştirme Tuşu +keybind.spaceshipinv.name=Uzay Gemisinin Envanteri Açma Tuşu +keybind.vehiclebackward.name=Araç Geri Tuşu +keybind.vehicledown.name=Araç Aşağı Tuşu +keybind.vehicleforward.name=Araç İleri Tuşu +keybind.vehicleleft.name=Araç Sol Tuşu +keybind.vehicleright.name=Araç Sağ Tuşu +keybind.vehicleup.name=Araç Yukarı Tuşu +moon.moon=Ay +newversion.failed.name=Galacticraft güncellemesinde hata oluştu! 15 saniye sonra tekrar denenecek +newversion.success.name=Galacticraft yeni versiyon bulundu: +planet.jupiter=Jüpiter +planet.mercury=Merkür +planet.neptune=Neptün +planet.overworld=Dünya +planet.saturn=Satürn +planet.uranus=Uranüs +planet.venus=Venüs +satellite.spacestation.overworld=Dünya Uzay İstasyonu +schematic.moonbuggy.name=Buggy +schematic.rocket_t1.name=Tier 1 Roketi +schematic.rocket_t2.name=Tier 2 Roketi +solarsystem.sol=Güneş Sistemi +star.sol=Yıldız +tile.air_lock_controller.name=Hava Kilidi Kontrolörü +tile.air_lock_frame.description=Hava Kilidi Çerçevesi, Hava Kilidi Kontrollü ile uyumlu çalışır ve tam bir hava kilidi oluşturur. +tile.air_lock_frame.name=Hava Kilidi Çerçevesi +tile.air_lock_seal.name=Hava Kilidi Mühürü +tile.aluminum_wire.alu_wire.description=Alüminyum Tel, enerjiyi uzak mesafelere taşır. +tile.aluminum_wire.alu_wire.name=Alüminyum Tel +tile.aluminum_wire.alu_wire_heavy.description=Ağır Alüminyum Tel, normal Alüminyum Telden daha iyidir ve hızlıdır. +tile.aluminum_wire.alu_wire_heavy.name=Ağır Alüminyum Teli +tile.arclamp.description=Ark Lambası büyük alanları aydınlatmak için kullanılır. +tile.arclamp.name=Ark Lambası +tile.basic_block_core.block_aluminum_gc.name=Alüminyum Blok +tile.basic_block_core.block_copper_gc.name=Bakır Blok +tile.basic_block_core.block_meteoric_iron_gc.name=Katı Meteor Demiri +tile.basic_block_core.block_tin_gc.name=Kalay Blok +tile.basic_block_core.deco_block_0.name=Kalay Dekorasyon Bloğu +tile.basic_block_core.deco_block_1.name=Kalay Dekorasyon Bloğu +tile.basic_block_core.ore_aluminum_gc.name=Alüminyum Cevheri +tile.basic_block_core.ore_copper_gc.name=Bakır Cevheri +tile.basic_block_core.ore_silicon.name=Silikon Cevheri +tile.basic_block_core.ore_tin_gc.name=Kalay Cevheri +tile.basic_block_moon.bricks.name=Ay Zindan Tuğlası +tile.basic_block_moon.cheesestone.name=Peynir Cevheri +tile.basic_block_moon.coppermoon.name=Bakır Cevheri +tile.basic_block_moon.moondirt.name=Ay Toprağı +tile.basic_block_moon.moongrass.name=Ay Çimeni +tile.basic_block_moon.moonstone.name=Ay Taşı +tile.basic_block_moon.tinmoon.name=Kalay Cevheri +tile.buggy_pad.description=Buggy Akaryakıt Pedine yakıt doldurmak için Yakıt Yükleyicisi kullanın. Pedleri 3x3 şeklinde yerleştirin. Bununla roket uçuramazsınız. +tile.cargo.loader.name=Kargo Yükleyici +tile.cargo.unloader.name=Kargo Boşaltıcı +tile.cargo_loader.description=Kargo Yükleyicisi, pedlere bağlanarak roket veya araçlara kargo yükler. +tile.cargo_unloader.description=Kargo Boşaltıcı, pedlere bağlanarak roket veya araçlara kargo boşaltır. +tile.cheese.description=Peynir bloğu, yenilebilir. Peynir Ayda bulunur. +tile.cheese.name=Peynir Bloğu +tile.circuit_fabricator.description=Devre Fabrikatörü basit malzemeleri yapmak için Ham Silikon gereklidir. Gelişmiş makineler için gereklidir. +tile.coal_generator.description=Kömür Jeneratörü, en basit elektrik üretmenin yoludur. Kömür ile çalışır. +tile.collector.description=Oksijen Toplayıcısı, etrafta yaprak veya oksijen varsa oksijen toplar. +tile.collector.name=Oksijen Toplayıcısı +tile.compressor.description=Kompresör, külçeleri şıkıştır. +tile.compressor_electric.description=Elektrikli Kompresör, külçeleri şıkıştır. Normal Kompresörden daha hızlıdır. +tile.crude_oil.name=Ham Petrol +tile.crude_oil_moving.name=Ham Petrol +tile.crude_oil_still.name=Ham Petrol +tile.dishbase.description=İletişim Anteni ile uzay üssünüzün yerini öğrenebilir, uzay üssünüzü uzaktan kontrol edebilirsiniz. +tile.dishbase.name=İletişim Anteni +tile.distributor.description=Oksijen Kabarcık Distribütörünü ortaya koyarak oksijen dolu bir balon yapabilirsiniz. +tile.distributor.name=Oksijen Kabarcık Distribütörü +tile.dummyblock.cryogenic_chamber.name=Kriyojenik Odası +tile.dummyblock.launch_pad.name=Roket Fırlatma Pedi +tile.dummyblock.nasa_workbench.name=NASA Çalışma Masası +tile.dummyblock.solar.name=Güneş Paneli +tile.dummyblock.space_station_base.name=Uzay İstasyonu +tile.electric_furnace_tier1.description=Elektrikli Ocak, kömür ocağından daha hızlı ve daha iyidir. +tile.electric_furnace_tier2.description=Ark Ocağı, Elektrikli ve kömür ocaklarından daha hızlı ve iyidir. +tile.enclosed.aluminum_wire.name=Mühürlenebilir Alüminyum Teli +tile.enclosed.heavy_aluminum_wire.name=Mühürlenebilir Ağır Alüminyum Teli +tile.enclosed.copper_cable.name=Mühürlenebilir Bakır Kablosu +tile.enclosed.description=Mühürlenebilir bloklar hava geçirmezdir. Duvarlarda rahatlıkla kullanılabilir. +tile.enclosed.glass_fibre_cable.name=Mühürlenebilir Cam Fiber Kablosu +tile.enclosed.gold_cable.name=Mühürlenebilir Altın Kablosu +tile.enclosed.hv_cable.name=Mühürlenebilir HV Kablosu +tile.enclosed.lv_cable.name=Mühürlenebilir Ultra Düşük Akım Kablosu +tile.enclosed.me_cable.name=Mühürlenebilir ME Kablo +tile.enclosed.fluid_pipe.name=Mühürlenebilir Oksijen Borusu +tile.enclosed.pipe_fluids_cobblestone.name=Mühürlenebilir Kırıktaş Sıvı Borusu +tile.enclosed.pipe_fluids_stone.name=Mühürlenebilir Taş Sıvı Borusu +tile.enclosed.pipe_items_cobblestone.name=Mühürlenebilir Kırıktaş Taşıma Borusu +tile.enclosed.pipe_items_stone.name=Mühürlenebilir Taş Taşıma Boru +tile.enclosed.pipe_power_gold.name=Mühürlenebilir Altın İletken Borusu +tile.enclosed.pipe_power_stone.name=Mühürlenebilir Taş İletken Borusu +tile.energy_storage_module_tier1.description=Enerji Depolama Modülü, enerji depolar. +tile.energy_storage_module_tier2.description=Enerji Depolama Makinesi, büyük miktarda enerji depolar ve daha güçlü çıkışı vardır. +tile.fallen_meteor.description=Düşmüş Meteor bulmak için gezegenlere/aylara veya atmosferi olmayan yerlere bakın. Kırılınca Meteroik Demir verir. +tile.fallen_meteor.name=Düşmüş Meteor +tile.fuel.name=Yakıt +tile.fuel_block.name=Yakıt +tile.fuel_loader.description=Yakıt Yükleyicisi, fırlatma pedini veya akaryakıt pedini kullanarak araçlara ve roketlere yakıt yükler. +tile.fuel_loader.name=Yakıt Yükleyicisi +tile.glowstone_torch.description=Işık Taşı Meşale, oksijen bulunmayan ortamlarda yanar. +tile.glowstone_torch.name=Işık Taşı Meşale +tile.landing_pad.buggy_fueler.name=Buggy Akaryakıt Pedi +tile.landing_pad.cargo_pad.name=Kargo Roket Pedi +tile.landing_pad.description=Pedler roket için gereklidir. Pedleri 3x3 şeklinde yerleştirin. Yakıt Yükleyicisi, Kargo Yükleyicisi ve Fırlatma Kontrollü buna bağlanır. +tile.landing_pad.landing_pad.name=Roket Fırlatma Pedi +tile.landing_pad_full.name=Roket Fırlatma Pedi +tile.machine.0.name=Kömür Jeneratörü +tile.machine.1.name=Enerji Depolama Modülü +tile.machine.2.name=Elektrikli Ocak +tile.machine.3.name=Kompresör +tile.machine.7.name=Elektrik Ark Ocağı +tile.machine.8.name=Enerji Depolama Makinesi +tile.machine2.4.name=Elektrikli Kompresör +tile.machine2.5.name=Devre Fabrikatörü +tile.machine2.6.name=Oksijen Depolama Modülü +tile.moon_stairs_brick.name=Ay Zindan Tuğla Merdiveni +tile.moon_stairs_stone.name=Ay Taş Merdiveni +tile.ore_copper.name=Bakır Külçesi +tile.ore_tin.name=Kalay Külçesi +tile.oxygen_compressor.0.name=Oksijen Kompresör +tile.oxygen_compressor.1.name=Oksijen Açıcı +tile.oxygen_compressor.description=Oksijen Kompresörü oksijen tanklarına oksijen doldurur. +tile.oxygen_decompressor.description=Oksijen Açıcı oksijen tankındaki oksijeni alır. +tile.oxygen_detector.description=Oksijen Dedektörü, etrafta oksijen varsa kızıltaş sinyali yayar. +tile.oxygen_detector.name=Oksijen Dedektörü +tile.oxygen_pipe.description=Oksijen Borusu, oksijeni makinalara götürmek için kullanılır. +tile.oxygen_pipe.name=Oksijen Borusu +tile.oxygen_storage_module.description=Oksijen Depolama Modülü, büyük miktarlarda oksijen depolar. +tile.parachest.description=Para Sandık, gezegenden veya aydan gelirken roketin malzemelerini taşır. +tile.parachest.name=Para Sandık +tile.refinery.description=Rafineri, petrolü yakıta dönüştür. Araç ve roket için yakıt gereklidir. +tile.refinery.name=Rafineri +tile.rocket_workbench.description=NASA Çalışma Masası gelişmiş roket ve araçları yapmak içindir. Yeni şematikleri buldukça ekleyin. +tile.rocket_workbench.name=NASA Çalışma Masası +tile.sapling2.birch.name=Huş Ağacı Fidanı +tile.sapling2.jungle.name=Orman Ağacı Fidanı +tile.sapling2.oak.name=Meşe Fidanı +tile.sapling2.spruce.name=Ladin Ağacı Fidanı +tile.sealer.description=Oksijen Mühürleyen, bir odaya oksijen vermek amaçıyla kullanılır. +tile.sealer.name=Oksijen Mühürleyen +tile.slab_gc_half.moon_bricks_slab.name=Ay Zindan Tuğla Basamağı +tile.slab_gc_half.moon_slab.name=Ay Taş Basamağı +tile.slab_gc_half.tin_slab_1.name=Kalay Dekorasyon Basamağı +tile.slab_gc_half.tin_slab_2.name=Kalay Dekorasyon Basamağı +tile.solar.advanced_solar.name=Gelişmiş Güneş Paneli +tile.solar.basic_solar.name=Basit Güneş Paneli +tile.solar_adv.description=Gelişmiş Güneş Paneli, güneşin olduğu zamanlar enerji toplar. Basitine göre daha fazla toplar ve otomatiktir. +tile.solar_basic.description=Basit Güneş Paneli, güneşin olduğu zamanlar enerji toplar. +tile.space_station_base.name=Uzay İstasyonu Ana Komuta +tile.spin_thruster.description=Dönüş Pervanesi uzay istasyonu için kullanılır. +tile.spin_thruster.name=Dönüş Pervanesi +tile.telemetry.description=Roketlerin, oyuncuların ve canlıların bilgilerini almak için bağlantı kurar. Yanına Tüplü Ekran koymalısınız. Bağlantı için Frekans Modülünü kullanın. +tile.telemetry.name=Telemetri Ünitesi +tile.tin_stairs_1.name=Kalay Dekorasyon Merdiveni +tile.tin_stairs_2.name=Kalay Dekorasyon Merdiveni +tile.treasure_chest.description=Tier 1 Hazine Sandığı Ay zindanın da bulunuyor. Açılması için sondaki Patron canavarı öldürün. +tile.treasure_chest.name=Hazine Sandığı +tile.unlit_torch.name=Meşale +tile.unlit_torch_stone.name=Taş Meşale +tile.unlit_torch_lit.name=Meşale +tile.unlit_torch_stone_lit.name=Taş Meşale +tile.view_screen.description=Tüplü Ekran sizin uzay üssünüze son dokunuş olacaktır. Sağ tıklayarak gözüken bilgileri değiştirebilirsiniz. +tile.view_screen.name=Tüplü Ekran +tile.wall_gc.moon.name=Ay Taş Duvarı +tile.wall_gc.moon_bricks.name=Ay Zindan Tuğla Duvarı +tile.wall_gc.tin.name=Kalay Dekorasyon Duvarı diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/uk_ua.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/uk_ua.lang new file mode 100644 index 00000000..83a7d38a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/uk_ua.lang @@ -0,0 +1,825 @@ +checklist.create_grapple.key=Створити гак +checklist.equip_oxygen_suit.key=Одягти кисневе обладнання +checklist.equip_parachute.key=Одягти парашут +command.gcastrominer.count=Для гравця %s є %s астрошахтерів +commands.emergencykit=%s отримав саморятівник! +commands.dimensionteleport=%s був направлений в атмосферу %s +commands.dimensiontp.too_many=Занадто багато аргументів команди! Використання: %s +commands.gcenergyunits.invalid_units=Неправильні одиниці в команді / GCEnergyUnits. Використання: %s +commands.gcenergyunits.no_units=Необхідно вказати одиниці! Використання: %s +commands.gchouston.confirm.1=Це Центр управління польотами, повторіть будь ласка? +commands.gchouston.confirm.2=(Щоб перервати місію, наберіть /gchouston ще раз для підтвердження.) +commands.gchouston.fail=Команда /gchouston доступна тільки в космосі (або в Творчому режимі). +commands.gchouston.help.1=Ем, Х'юстон, у нас проблема .... +commands.gchouston.help.2=(Введіть / gchouston, щоб перервати місію і повернутися додому.) +commands.gchouston.noop=Використання команди / gchouston на інших гравців є тільки операторам. +commands.gchouston.success=Добре, залишайтеся на зв'язку, %s, телепортіруемся вас в точку перевозрожденія на Землю. +commands.joinrace.no_team=Необхідно вказати команду! Використання: %s +commands.ssinvite.not_found=Не вдалося знайти космічну станцію на ваше ім'я, спочатку ви повинні злітати туди! +commands.ssinvite.wrong_usage=Недостатньо аргументів команди! Використання: %s +commands.ssnewowner.wrong_usage=ID космічної станції не був розпізнаний. Вона взагалі існує? Використання: %s +commands.ssuninvite.no_player=Не вдалося знайти гравця з ім'ям %s в списку вашої космічної станції! +container.cargoloader.name=Вантажний завантажувач +container.cargounloader.name=Вантажний розвантажник +container.fuelloader.name=Завантажувач палива +container.lander.name=Посадковий модуль +container.magneticcrafting.name=Створення +container.oxygencollector.name=Кисневий складальник +container.oxygencompressor.name=Кисневий компресор +container.oxygendecompressor.name=Кисневий декомпресор +container.oxygendistributor.name=Розподільник кисню +container.oxygensealer.name=Герметизатор кисню +container.parachest.name=Скриня з парашутом +container.refinery.name=Очисний завод +container.solaradvanced.name=Покращена сонячна панель +container.solarbasic.name=Базова сонячна панель +container.spaceship.name=Ракета 1-го рівня +container.treasurechest.name=Скриня зі скарбом +death.attack.meteor_chunk=%1$s був вражений метеорних сміттям! +death.attack.oxygen_suffocation=%1$s задихнувся в космосі! +death.attack.spaceship_crash=Ракета %1$s розбилася об землю. Ой. +death.attack.sulphuric_acid=%1$s розчинився в сірчаної кислоти! +death.attack.thermal=%1$s забув тепловий захист +dimension.moon.name=Місяць +dimension.overworld.name=Земля +dimension.sun.name=Сонце +entity.alien_villager.name=Інопланетний житель +entity.buggy.name=Баггі +entity.celestial_screen.name=Астрономічний екран +entity.evolved_creeper.name=Еволюціонувавший кріпер +entity.evolved_skeleton.name=Еволюціонувавший скелет +entity.evolved_skeleton_boss.name=Еволюціонувавший скелет-бос +entity.evolved_spider.name=Еволюціонувавший павук +entity.evolved_zombie.name=Еволюціонувавший зомбі +entity.evolved_enderman.name=Еволюціонувавший Мандрівник Края +entity.evolved_witch.name=Еволюціонувавша відьма +entity.flag.name=Прапор +entity.gcflag.name=Прапор +entity.gravity_arrow.name=Стрілка +entity.lander.name=Посадковий модуль +entity.meteor.name=Метеорит +entity.meteor_chunk.name=Шматок метеорита +entity.oxygen_bubble.name=Кисневий міхур +entity.para_chest.name=Скриня з парашутом +entity.rocket_t1.name=Ракета 1-го рівня +galaxy.milky_way=Чумацький шлях +gc.configgui.allow_liquids_grating=Дозволити рідинам текти через решітки +gc.configgui.alternate_canister_recipe=Альтернативний рецепт каністри +gc.configgui.asteroids_flags=Прапори режиму пригод на астероїдах +gc.configgui.asteroids_start=Режим пригоди (Старт на астероїдах) +gc.configgui.biome_id_base=Базовий ID біома +gc.configgui.detectable_i_ds=Виявлені ID +gc.configgui.disable_biome_type_registrations=Відключити реєстрацію типів біомів +gc.configgui.disable_cheese_moon=Відключити генерацію місячного сиру +gc.configgui.disable_copper_moon=Відключити генерацію місячної міді +gc.configgui.disable_lander=Відключити посадковий модуль +gc.configgui.disable_moon_village_gen=Відключити генерацію місячних сел +gc.configgui.disable_ore_dict_space_metals=Використовувати тільки свої космічні метали в рецептах +gc.configgui.disable_sapphire_moon=Відключити генерацію місячних сапфірів +gc.configgui.disable_space_station_creation=Відключити створення космічної станції +gc.configgui.disable_spaceship_grief=Відключити вибух ракети +gc.configgui.disable_spaceship_particles=Відключити частки ракети +gc.configgui.disable_tin_moon=Відключити генерацію місячного олова +gc.configgui.disable_update_check=Вимкнути перевірку оновлень +gc.configgui.disable_vehicle_camera_changes=Відключити масштаб і вид від третьої особи в транспорті +gc.configgui.dungeon_boss_health_mod=Модифікатор здоров'я боса +gc.configgui.enable_aluminum_ore_gen=Генерація алюмінію в звичайному світі +gc.configgui.enable_copper_ore_gen=Генерація міді в звичайному світі +gc.configgui.enable_debug=Показувати налагоджувальні повідомлення в консолі +gc.configgui.enable_other_mods_features=Включити зовнішню генерацію інших модов +gc.configgui.enable_retrogen_oil=Генерувати нафту в існуючому світі +gc.configgui.enable_sealer_edge_checks=Повна перевірка герметичності герметизатором +gc.configgui.enable_silicon_ore_gen=Генерація кремнію в звичайному світі +gc.configgui.enable_space_race_manager_popup=Включити спливаюче вікно менеджера гонки +gc.configgui.enable_thaum_craft_nodes=Включити генерацію вузлів Thaumcraft на планетах +gc.configgui.enable_tin_ore_gen=Генерація олова в звичайному світі +gc.configgui.external_oil_gen=Зовнішня генерація нафти +gc.configgui.force_overworld_respawn=Примусове поява в звичайному світі +gc.configgui.hard_mode=хардкорний режим +gc.configgui.id_achiev_base=ID Основного досягнення +gc.configgui.id_dimension_moon=ID виміру: Місяць +gc.configgui.id_dimension_overworld=ID виміру: Земля +gc.configgui.id_dimension_overworld_orbit=ID виміру: Космічна станція +gc.configgui.id_dimension_overworld_orbit_static=ID виміру: Статична космічна станція +gc.configgui.id_schematic_add_schematic=ID схеми: "Додати схему" +gc.configgui.id_schematic_moon_buggy=ID схеми: Місячний баггі +gc.configgui.id_schematic_rocket_t1=ID схеми: Ракета 1-го рівня +gc.configgui.key_override_fuel_level=Призначити клавішу: Інвентар ракети +gc.configgui.key_override_toggle_adv_goggles=Призначити клавішу: Покращені окуляри +gc.configgui.map_scroll_invert=Інвертувати прокрутку карти +gc.configgui.map_scroll_sensitivity=Чутливість прокрутки карти +gc.configgui.meteor_block_damage=Пошкодження блоків від метеорів включено +gc.configgui.meteor_spawn_mod=Множник генерації метеорів +gc.configgui.more_stars=Показувати більше зірок +gc.configgui.oil_gen_factor=Множник генерації нафти +gc.configgui.ore_dict_silicon=Реєструвати кремній в словнику руд +gc.configgui.other_mod_ore_gen_i_ds=Генерація руд з інших модів на планетах +gc.configgui.override_capes=замінювати плащі +gc.configgui.override_map=Призначити клавішу: Галактична карта +gc.configgui.oxygen_indicator_bottom=Змістити індикатор кисню вниз +gc.configgui.oxygen_indicator_left=Змістити індикатор кисню вліво +gc.configgui.planet_worldborders=Максимальні x, z для посадки на Місяць +gc.configgui.quick_mode=Швидка гра (легше) +gc.configgui.rocket_disable_overworld_return=Відключити повернення ракети в звичайний світ +gc.configgui.rocket_disabled_dimensions=Вимірювання, де ракети відключені +gc.configgui.rocket_fuel_factor=Множник ракетного палива +gc.configgui.sealable_i_ds=Герметичні блоки +gc.configgui.space_station_energy_scalar=Модифікатор енергії космічної станції +gc.configgui.space_stations_require_permission=Дозволи для космічних станцій +gc.configgui.static_loaded_dimensions=Статично завантажені вимірювання +gc.configgui.static_loaded_new_ss=Завантажувати статично нові космічні станції? +gc.configgui.suffocation_cooldown=Затримка шкоди від задухи +gc.configgui.suffocation_damage=Втрати від задухи +gc.configgui.title=конфігурація ядра Galacticraft +gc.configgui.use_old_oil_fluid_i_d=Використовувати старий ID (oilgc) для нафти +gc.configgui.use_old_fuel_fluid_i_d=Використовувати старий ID (fuelgc) для палива +gc.configgui.whitelist_co_f_h_core_gen=Додати генерацію CoFHCore в білий список +gui.battery_slot.desc.0=Слот для акумулятора, поставте акумулятор сюди +gui.battery_slot.desc.1=або використовуй підключене джерело енергії +gui.bed_fail.message=Ой вей. Що станеться, якщо кисень вичерпається, поки я сплю? Мені знадобиться Криогенная камера для сну в космосі. +gui.buggy.accel.name=Прискоритися +gui.buggy.decel.name=Сповільнитися +gui.buggy.inv.name=Інвентар / Паливо +gui.buggy.storage_space=Розмір сховища +gui.buggy.turn.name=Поверніть вліво, вправо. +gui.button.back.name=Назад +gui.button.disable.name=Вимкнути +gui.button.disableseal.name=Відключити герметизатор +gui.button.enable.name=Увімкнути +gui.button.enableseal.name=Запустити герметизатор +gui.button.hide_dest.name=Сховати +gui.button.loadfuel.name=Завантажити паливо +gui.button.loaditems.name=Завантажити +gui.button.next.name=Вперед +gui.button.paintapply.name=Застосувати фарбу +gui.button.paintmix.name=Вибрати колір +gui.button.paintreset.name=Скинути колір +gui.button.refine.name=Очистити +gui.button.stoploading.name=Зупинити завантаження +gui.button.stoprefine.name=Зупинити очистку +gui.button.stopunloading.name=Зупинити розвантаження +gui.button.unhide_dest.name=Показати +gui.button.unloaditems.name=Розвантажити +gui.button.unlockschematic.name=Розблокувати схему +gui.checkbox.horizontal.name=Горизонтальний режим +gui.checkbox.invert.name=Інвертований вибір +gui.checkbox.player_name.name=Ім'я гравця: +gui.checkbox.player_within.name=Гравець в межах +gui.checkbox.redstone_signal.name=Відкривається за сигналом червоного каменю +gui.chest.warning.wrongkey=Мені потрібен ключ від підземелля %s рівня, щоб відкрити це! +gui.choose_planet.desc.moon=Населена # Кисень відсутня # Гравітація: 18% +gui.choose_planet.desc.overworld=Сповнена життя # населеності # Гравітація: 100% +gui.chooseplanet.alreadycreated1.name=Космічна станція +gui.chooseplanet.alreadycreated2.name=вже створена! +gui.chooseplanet.cannotcreate1.name=Неможливо створити космічну +gui.chooseplanet.cannotcreate2.name=станцію тут! +gui.crafting_memory.desc.0=Даний магнітний верстак може створити більше даних предметів! +gui.crafting_memory.desc.1=Щоб запам'ятати рецепт, створіть один предмет. +gui.creative_only.desc=Тільки для Творчого режиму +gui.display.nolink=Немає зв'язку +gui.docking_rocket.current_vel.name=Поточна швидкість +gui.docking_rocket.distance_from.name=Відстань до цілі +gui.docking_rocket.target_vel.name=Цільова швидкість +gui.docking_rocket.warning.name.0=Натисніть %s, для уповільнення +gui.docking_rocket.warning.name.1=Натисніть %s, для прискорення +gui.dropbox.player_distance.name.0=1 метр +gui.dropbox.player_distance.name.1=2 метра +gui.dropbox.player_distance.name.2=5 метрів +gui.dropbox.player_distance.name.3=10 метрів +gui.electric_compressor.desc.0=Прогрес +gui.energy_storage.desc.0=Сховище енергії +gui.energy_storage.desc.1=енергія +gui.flag.already_placed=Прапор тут уже варто! +gui.frequency_module.desc.0=Може приймати слабкі звукові +gui.frequency_module.desc.1=хвилі і віддалені сигнали +gui.frequencymodule.warning0=Мені потрібен +gui.frequencymodule.warning1=якщо я хочу тут нормально чути. +gui.fuel_output.desc.0=Покладіть порожні рідинні каністри в +gui.fuel_output.desc.1=цей слот, щоб заповнити їх з +gui.fuel_output.desc.2=паливного резервуара +gui.fuel_tank.desc.0=Паливний резервуар. потрібно +gui.fuel_tank.desc.1=Завантажувач палива для заповнення +gui.fuel_tank.desc.2=Паливний резервуар можна заповнити +gui.fuel_tank.desc.3=Паливними каністрами +gui.fuel_tank.desc.4=Паливний резервуар +gui.infinite_item.desc=Нескінченний +gui.lander.velocity=Швидкість входження +gui.lander.velocityu=м/cек +gui.lander.warning2=Затисніть " +gui.lander.warning3=", щоб уповільнити падіння! +gui.max_output.desc=Макс. вихід +gui.message.addnewsch.name=Додати нову схему +gui.message.apply.name=Застосувати +gui.message.assign_name.name=Дати ім'я +gui.message.atmosphere.name=Атмосфера +gui.message.back.name=Назад +gui.message.breed.name=Розмножувати +gui.message.bubble_visible.name=Видимість бульбашок +gui.message.can_create_space_station.name=Тут можна побудувати станцію! +gui.message.cancel.name=Відміна +gui.message.cannot_create_space_station.name=Тут не можна побудувати космічну станцію. +gui.message.catalog.name=Каталог +gui.message.click_again.0.name=Натисніть ще раз для збільшення (видно Місяця і Супутники) +gui.message.click_again.1.name=Натисніть ще раз для збільшення (видно Місяця) +gui.message.click_again.2.name=Натисніть ще раз для збільшення (видно Супутники) +gui.message.click_again.3.name=Натисніть ще раз для збільшення +gui.message.clicklink=Натисніть, щоб потрапити на Galacticraft Wiki +gui.message.create_ss.name=Створити +gui.message.daynightcycle.name=Цикл день-ніч +gui.message.energy=Енергія +gui.message.environment.name=Прискорення навколишнього середовища +gui.message.exit.name=вихід +gui.message.fuel.name=Паливо +gui.message.full.name=залишилося +gui.message.generating.name=Створення +gui.message.grow.name=Рости +gui.message.heal.name=лікувати +gui.message.help1=Для допомоги по Galacticraft, надрукуйте +gui.message.help1a=Для того, щоб побачити це уведомленіe іще раз, надрукуйте +gui.message.help2=Для допомоги по космічній програмі, надрукуйте +gui.message.help3=Для допомоги по видобутку нафти, надрукуйте +gui.message.in.name=Введення +gui.message.launch.name=Запуск +gui.message.max_energy=Макс. енергія +gui.message.meansurfacetemp.name=Середня температура на поверхні +gui.message.moon.atmosphere.0.name=Немає +gui.message.moon.daynightcycle.0.name=29.5 Земних днів +gui.message.moon.meansurfacetemp.0.name=(Світла сторона) 253°C +gui.message.moon.meansurfacetemp.1.name=(Темна сторона) -153°C +gui.message.moon.surfacecomposition.0.name=Базальтовий камінь і +gui.message.moon.surfacecomposition.1.name=сліди сиру +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% Земної) +gui.message.of.name=з +gui.message.oil.name=Нафта +gui.message.out.name=Висновок +gui.message.overworld.atmosphere.0.name=Азот і кисень +gui.message.overworld.atmosphere.1.name=підтримує життя +gui.message.overworld.daynightcycle.0.name=1 Земний день +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Камінь, земля, +gui.message.overworld.surfacecomposition.1.name=гравій +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% Земної) +gui.message.prelaunch=Контрольний список +gui.message.rename.name=перейменувати +gui.message.select_ss.name=Вибрати космічну станцію +gui.message.ss_owner.name=власник: +gui.message.status.name=Статус +gui.message.strengthen.name=зміцнювати +gui.message.surfacecomposition.name=Склад поверхні +gui.message.surfacegravity.name=Гравітація на поверхні +gui.message.thermal_status.name=Тепловий контроль +gui.message.tier.name=Рівень %d +gui.message.unnamed.name=Без імені +gui.missing_core.name.0=MicdoodleCore не знайдений в папці модифікацій +gui.missing_core.name.1=Galacticraft не завантажили +gui.missing_core.name.2=Закрийте Minecraft і встановіть MicdoodleCore +gui.missing_core.name.3=Натисніть тут, щоб відкрити сторінку завантаження +gui.new_schematic.slot.desc.0=Слот для нової схеми. ви +gui.new_schematic.slot.desc.1=можете знайти нові схеми +gui.new_schematic.slot.desc.2=в підземеллях +gui.new_schematic.slot.desc.3=на планетах і місяцях +gui.oil_tank.desc.0=Нафтовий резервуар, може бути заповнений +gui.oil_tank.desc.1=нафтовими каністрами +gui.oxygen.warning=Чи не налаштоване кисневе обладнання! +gui.oxygen_compressor.slot.desc.0=Слот компресора для резервуара, покладіть резервуар +gui.oxygen_compressor.slot.desc.1=сюди, щоб заповнити його киснем. +gui.oxygen_decompressor.slot.desc.0=Слот декомпресора для резервуара, покладіть резервуар +gui.oxygen_decompressor.slot.desc.1=з киснем сюди, щоб спустошити його. +gui.oxygen_slot.desc.0=Слот для кисню, покладіть каністру з киснем або резервуар +gui.oxygen_slot.desc.1=сюди або використовуйте приєднаний джерело кисню +gui.oxygen_storage.desc.0=Сховище кисню +gui.oxygen_storage.desc.1=Кисень +gui.oxygen_use.desc=Споживання кисню +gui.per_second=/сек +gui.player.bpm=уд/мин +gui.player.food=Їжа +gui.player.health=здоров'я +gui.player.ouch=ой!!!! +gui.receiver.cannot_attach=Не можна поставити Приймач тут! +gui.requires_controller.desc=Требуется контроллер запуска +gui.rocket.countdown=Зворотній відлік +gui.rocket.height=Висота +gui.rocket.inv.name=Інвентар / Паливо +gui.rocket.launch.name=Запуск +gui.rocket.launched=Запущена +gui.rocket.on_launchpad=На злітному майданчику +gui.rocket.speed=Швидкість +gui.rocket.turn.name=Повернути вліво-вправо +gui.rocket.updown.name=Повернути вгору-вниз +gui.rocket.warning.fuelinsufficient=Недостатньо палива для безпечного запуску під автоматичним управлінням! +gui.rocket.warning.launchcontroller=Передполітна скасування запуску. Перевірте контролер запуску! +gui.rocket.warning.nofuel=Спочатку мені потрібно залити трохи палива в ракету! +gui.rocket.warning.nogyroscope=У грі присутні таємничі сили і гіроскопи дико обертаються! +gui.rocket.warning.noparachute=У мене немає парашута! Якщо я натисну запуск знову, шляху назад не буде! +gui.rocket_type.0=Розмір сховища: 18 +gui.rocket_type.1=Розмір сховища: 36 +gui.rocket_type.2=Розмір сховища: 54 +gui.rocket_type.3=Заправлена +gui.seconds=сек +gui.sensor.advanced=Покращений режим +gui.sensor.advancedoff=ВИКЛ. +gui.sensor.advancedon=ВКЛ. +gui.show_bubble.desc.0=Показати міхур +gui.skeleton_boss.message=Бос пропав, не покидайте кімнату з босом, коли воюєте з ним! Зайдіть в кімнату заново, щоб бос знову з'явився. +gui.space_race.chat.add_success=%s приєднався до космічній гонці! +gui.space_race.chat.already_part=Ви вже берете участь у цій космічній гонці! +gui.space_race.chat.invite_received=Отримано запрошення в команду космічної гонки від %s. +gui.space_race.chat.not_found=Не вдалося знайти гравця з ім'ям %s +gui.space_race.chat.remove_success=%s Був прибраний з космічної гонки. +gui.space_race.chat.to_join=Щоб приєднатися до %s, використовуйте команду %s +gui.space_race.coming_soon=Скоро +gui.space_race.create.add_players.name=Додати гравця (ів) +gui.space_race.create.back.name=Назад +gui.space_race.create.brush_radius.name=радіус кисті +gui.space_race.create.brush_size.name=Розмір кисті +gui.space_race.create.change_color.name.0=Змінити +gui.space_race.create.change_color.name.1=команду +gui.space_race.create.change_color.name.2=колір +gui.space_race.create.close.name=Закрити +gui.space_race.create.customize.name=Налаштувати прапор +gui.space_race.create.eraser_radius.name=Радіус гумки +gui.space_race.create.eraser_size.name=Розмір гумки +gui.space_race.create.global_stats.name=Подивитися глобальну статистику +gui.space_race.create.invite_player.name=Запросити гравця +gui.space_race.create.player_radius.name=Примітка: гравці повинні бути в радіусі 25 блоків! +gui.space_race.create.rem_players.name=Прибрати гравця (ів) +gui.space_race.create.remove.name=Прибрати +gui.space_race.create.remove_player.name=Убрать игрока +gui.space_race.create.rename.name=Перейменувати команду +gui.space_race.create.send_invite.name=Відправити запрошення +gui.space_race.create.server_stats.name=Подивитися статистику сервера +gui.space_race.create.title.name.0=Налаштування +gui.space_race.create.title.name.1=космічної гонки +gui.space_race.create.title.name=Налаштування космічної гонки +gui.space_race.join.member_count.name=Учасників: %d +gui.space_race.join.name=приєднатися +gui.space_race.join.owner.name=Власник +gui.space_race.join.title.name=Приєднатися до космічній гонці +gui.space_race.unnamed=безіменна команда +gui.spacestation.added=Ви були додані на космічну станцію гравця %s! +gui.spacestation.addsuccess=%s успішно доданий в список космічної станції! +gui.spacestation.allow_all_false=Ваші космічні станції більше не відкриті для всіх гравців. +gui.spacestation.allow_all_true=Ваші космічні станції тепер відкриті для всіх гравців. (Використовуйте / ssinvite -all, щоб скасувати це.) +gui.spacestation.changesuccess=Власник космічної станції був змінений з %s на %s. +gui.spacestation.playername=<Ім'я гравця> +gui.spacestation.removesuccess=%s успішно прибраний зі списку космічної станції! +gui.spacestation.to_allow_entry=Щоб надати можливість іншому гравцеві заходити на цю космічну станцію! +gui.spacestation.type_command=Тип +gui.status.active.name=Активно +gui.status.air_lock_closed.name=Повітряний шлюз закритий +gui.status.air_lock_open.name=Повітряний шлюз відкритий +gui.status.blockedfully.name=сонце невидимо +gui.status.blockedpartial.name=Сонце частково видно +gui.status.check_pending.name=Очікування перевірки +gui.status.check_starting.name=Перевірка розпочата +gui.status.checking_seal.name=Перевірка герметичності +gui.status.collecting.name=Збір +gui.status.collectingenergy.name=Збір енергії +gui.status.compressing.name=Стиснення +gui.status.disabled.name=Відключено +gui.status.fulltank.name=Кисневий балон заповнений +gui.status.generating.name=Створення +gui.status.hull_heat.name=Нагрівання корпусу +gui.status.idle.name=Простий +gui.status.missingleaves.name=Відсутні блоки листя +gui.status.missingoxygen.name=відсутний кисень в балоні +gui.status.missingpower.name=Відсутня енергія +gui.status.missingpower.short.name=Немає живлення +gui.status.missingtank.name=Відсутній кисневий балон +gui.status.nofuel.name=Немає палива для завантаження! +gui.status.noinvtarget.name=Відсутній інвентар у мети! +gui.status.noitems.name=Немає предметів для завантаження! +gui.status.nooil.name=Немає палива +gui.status.not_available.name=Н/Д +gui.status.not_generating.name=Не створюється +gui.status.notargetload.name=Відсутня мета для завантаження! +gui.status.notargetunload.name=Відсутня мета для розвантаження! +gui.status.off.name=Викл. +gui.status.on.name=Вкл. +gui.status.raining.name=Дощ +gui.status.ready.name=Готово +gui.status.refining.name=Очищення +gui.status.running.name=Працює +gui.status.sealed.name=Герметично +gui.status.sealerblocked.name=Випускний вентиляційний отвір заблоковано! +gui.status.sun_visible.name=Видимість сонця +gui.status.tank_empty.name=Кисневий балон порожній +gui.status.targetempty.name=Техніка не заправлена! +gui.status.targetfull.name=Техніка заправлена! +gui.status.unknown.name=Невідомо +gui.status.unsealed.name=Зона занадто велика / не герметична +gui.tank.oxygen_remaining=Залишилося кисню +gui.telemetry_fail.message=Спочатку мені потрібно відстежити сутність з цим частотним модулем! (Або надіти його!) +gui.telemetry_fail_no_frequency_module.message=Мені потрібно взяти частотний модуль в руки! +gui.telemetry_fail_wearing_it.message=Мені потрібно зняти частотний модуль, якщо я хочу поєднати його з телеметричним блоком! +gui.telemetry_succeed.message=Телеметричні з'єднання створено. +gui.thermal_slot.desc.0=Слот для Теплового контролера. покладіть +gui.thermal_slot.desc.1='Тепловий контролер 'сюди (необов'язково). +gui.thermal_slot.desc.2=Примітка: Споживає більше енергії. +gui.title.air_lock.name=Контролер повітряного шлюзу гравця %s +gui.tracking.message=Відстеження активовано. Тепер мені потрібно натиснути ПКМ по телеметричному блоку, щоб завершити з'єднання. +gui.village.warning.no_freq_mod=Мені потрібен частотний модуль, щоб спілкуватися з ними! +gui.warning.invalid_thermal=Неправильна тепловий захист! +gui.warning.noroom=Недостатньо місця! +gui.warning=НЕБЕЗПЕКА! +item.air_fan.name=Вентилятор +item.air_vent.name=Вентиляційний клапан +item.basic_item.ambient_thermal_controller.name=Тепловий контролер +item.basic_item.canned_food.name=Консервована їжа +item.basic_item.compressed_aluminum.name=Стиснутий алюміній +item.basic_item.compressed_bronze.name=Стисла бронза +item.basic_item.compressed_copper.name=Стисла мідь +item.basic_item.compressed_iron.name=Стислий залізо +item.basic_item.compressed_steel.name=Стисла сталь +item.basic_item.compressed_tin.name=Стислий олово +item.basic_item.dehydrated_apple.name=Сублімоване яблуко +item.basic_item.dehydrated_carrot.name=Сублімована морква +item.basic_item.dehydrated_melon.name=Сублімований кавун +item.basic_item.dehydrated_potato.name=Сублімований картопля +item.basic_item.frequency_module.name=Частотний модуль +item.basic_item.ingot_aluminum.name=Алюмінієвий злиток +item.basic_item.ingot_bronze.name=Бронзовий злиток +item.basic_item.ingot_copper.name=Мідний злиток +item.basic_item.ingot_steel.name=Сталевий злиток +item.basic_item.ingot_tin.name=Олов'яний злиток +item.basic_item.raw_silicon.name=Неочищений кремній +item.basic_item.solar_module_0.name=Одиночний сонячний модуль +item.basic_item.solar_module_1.name=Ціла сонячна панель +item.basic_item.wafer_advanced.name=Покращена напівпровідникова пластина +item.basic_item.wafer_basic.name=Основна напівпровідникова пластина +item.basic_item.wafer_solar.name=Синя сонячна напівпровідникова пластина +item.battery.name=Акумулятор +item.bucket_fuel.name=Відро палива +item.bucket_oil.name=Відро нафти +item.buggy.name=Баггі +item.buggymat.seat.name=Сидіння баггі +item.buggymat.storage.name=Контейнер баггі +item.buggymat.wheel.name=Колесо баггі +item.canister.copper.name=Мідна каністра +item.canister.tin.name=Олов'яна каністра +item.canvas.name=Полотно +item.cheese_block.name=Блок сиру +item.cheese_curd.name=Сирок +item.compressed_meteoric_iron.name=Стислий метеоритне залізо +item.dungeonfinder.name=локатор скарбниць +item.empty_liquid_canister.name=Порожня рідинна каністра +item.emergency_kit.description=Використовуйте (за замовчуванням ПКМ), щоб надіти кисневе обладнання та отримати інші необхідні речі. Одноразовий! +item.emergency_kit.name=Космічний саморятівник +item.engine.tier1booster.name=Прискорювач 1-го рівня +item.engine.tier1engine.name=Ракетний двигун 1-го рівня +item.flag.name=Прапор +item.food.cheese_slice.name=Шматочок сиру +item.food.burger_bun.name=Булочка для бургера +item.food.beef_patty_raw.name=Фарш із яловичини +item.food.beef_patty_cooked.name=Котлета із яловичини +item.food.cheeseburger.desc=Астронавти люблять чізбургери! Дуже ситна їжа. +item.food.cheeseburger.name=Чізбургер +item.food.canned_beef.name=Тушонка із яловичини +item.fuel.name=Ракетне паливо +item.fuel_canister.name=Повна каністра палива +item.fuel_canister_partial.name=Неповна каністра палива +item.heavy_plating.name=Надміцна пластина +item.hot_description.name=Підпалює на +item.ic2compat.ore_crushed_alu.name=Подрібнена алюмінієва руда +item.ic2compat.ore_purified_alu.name=Очищена подрібнена алюмінієва руда +item.ic2compat.dust_alu.name=Алюмінієвий пил +item.ic2compat.dust_small_titanium.name=Маленька купка титанового пилу +item.infinite_battery.name=Нескінченний акумулятор +item.infinite_oxygen.name=Нескінченний кисневий балон +item.key.t1.name=Ключ від підземелля 1-го рівня +item.lunar_sapphire.description=Місячний сапфір використовується при торгівлі з інопланетними жителями +item.lunar_sapphire.name=Місячний сапфір +item.meteor_chunk.name=Кидаєм метеоритний шматок +item.meteor_chunk_hot.name=Кидаємий метеоритний шматок +item.meteoric_iron_ingot.name=Злиток метеоритного заліза +item.meteoric_iron_raw.name=Необроблене метеоритне залізо +item.nose_cone.name=Головний обтічник +item.oil_canister.name=Повна каністра нафти +item.oil_canister_partial.name=Неповна каністра нафти +item.oil_extractor.name=Портативний нафтової екстрактор +item.oxygen_concentrator.name=кисневий концентратор +item.oxygen_gear.name=Кисневе обладнання +item.oxygen_mask.name=Киснева маска +item.oxygen_tank_heavy_empty.name=Порожній великий кисневий балон +item.oxygen_tank_heavy_full.name=Великий кисневий балон +item.oxygen_tank_light_empty.name=Порожній малий кисневий балон +item.oxygen_tank_light_full.name=Малий кисневий балон +item.oxygen_tank_med_empty.name=Порожній середній кисневий балон +item.oxygen_tank_med_full.name=Середній кисневий балон +item.parachute_black.name=Чорний парашут +item.parachute_blue.name=Світло-синій парашут +item.parachute_brown.name=Коричневий парашут +item.parachute_darkblue.name=Синій парашут +item.parachute_darkgray.name=Сірий парашут +item.parachute_darkgreen.name=Зелений парашут +item.parachute_gray.name=Світло-сірий парашут +item.parachute_lime.name=Лаймовий парашут +item.parachute_magenta.name=Бузковий парашут +item.parachute_orange.name=Помаранчевий парашут +item.parachute_pink.name=Рожевий парашут +item.parachute_plain.name=Парашут +item.parachute_purple.name=Фіолетовий парашут +item.parachute_red.name=Червоний парашут +item.parachute_teal.name=Бірюзовий парашут +item.parachute_yellow.name=Жовтий парашут +item.rocket_fins.name=Ракетний стабілізатор +item.rocket_t1.name=Ракета 1-го рівня +item.schematic.name=Схема для верстака NASA +item.sensor_glasses.name=Окуляри з сенсорами +item.sensor_lens.name=Сенсорні лінзи +item.standard_wrench.name=Звичайний гайковий ключ +item.steel_axe.name=Сталева сокиру +item.steel_boots.name=Сталеві черевики +item.steel_chestplate.name=Сталевий нагрудник +item.steel_helmet.name=Сталевий шолом +item.steel_hoe.name=Сталева мотика +item.steel_leggings.name=Сталеві поножи +item.steel_pickaxe.name=Сталева кирка +item.steel_pole.name=Сталева жердина +item.steel_shovel.name=Сталева лопата +item.steel_sword.name=Сталевий меч +item.tier1.desc=1-ий рівень +item_desc.powerdraw.name=Потрібно енергії: %s /сек +item_desc.shift.name=Натисніть %s для докладної інформації +item_group.galacticraft_blocks=Galacticraft: Блоки +item_group.galacticraft_items=Galacticraft: Предмети +jei.arc_lamp.info=Дуже яскраве світло з лицьового боку. Для кращого ефекту розміщуйте на висоті! Обертається за допомогою гайкового ключа. +jei.electric_compressor.info=Електрична версія вугільного компресора. Працює в 2 рази швидше! Швидкість стиснення збільшується при підключенні до енергосистеми 2-го рівня. Для завантаження або вивантаження предметів може бути використана воронка. +jei.electric_compressor.appeng.info=Для автоматизації за допомогою Applied Energetics 2 використовуйте в рецептах злитки з двох різних модифікацій. Відвідайте сторінку https://goo.gl/BwY15G для більш докладної інформації. +jei.fluid_pipe.info=Труба для передачі будь-яких рідин або газів. Для викачування рідини з рідинного резервуара використовуйте Гучний ключ на трубі, щоб перевести її в «виштовхує режим». \nТруба в виштовхує режимі не може заповнювати рідинний резервуар або пристрій, тому труби повинні бути як мінімум довжиною в 2 блоки. +jei.fuel_loader.info=Поставте поруч зі злітним майданчиком. Заправляє будь-яку ракету, яка стоїть на майданчику. Необхідний для будь-якого польоту в космос - в тому числі для польоту додому! +jei.magnetic_crafting.info=Верстак, який зберігає покладені в нього предмети. Може приймати предмети з воронки для автоматичного створення за останнім успішно використаному рецептом. +jei.oxygen_collector.info=Збирає дихальну кисневу суміш з повітря в звичайному світі або (в космосі) з довколишніх листя або зелені на грядках. \nПерекачівайте кисень по трубах в Кисневий компресор, щоб заповнити балони, в Кисневий герметизатор або розпреділяє кисневі бульбашки. +jei.oxygen_distributor.info=Створює кисневий міхур в космосі, де гравці (і інші істоти) можуть дихати. Забезпечуйте його кисневої дихальної сумішшю з Кисневого збирача або Кисневого сховища. +jei.oxygen_sealer.info=Заповнює одну кімнату на вашій космічної базі придатною для дихання атмосферою. Забезпечуйте його кисневої дихальної сумішшю з Кисневого збирача або Кисневого сховища. Всі стіни в кімнаті повинні бути герметичними. \NІщіте витоку за допомогою Сенсорних очок! \NМаксімальний розмір кімнати для одного герметизатора - 10x10x8 блоків. Використовуй кілька герметизатор для великих приміщень. +jei.wrench.info=Більшість пристроїв в Galacticraft можна обертати, використовуючи (за замовчуванням ПКМ) на них Звичайний гайковий ключ. \NПрі утриманні Shift під час використання ключа, для більшої частини електричних машин можна міняти боку, на яких знаходяться енергетичні або інші входи і виходи. +keybind.map.name=Галактична карта +keybind.sensortoggle.name=Переключити режим Очок з сенсорами +keybind.spaceshipinv.name=Відкрити інвентар космічного корабля +keybind.vehiclebackward.name="Назад" для техніки +keybind.vehicledown.name="Вниз" для техніки +keybind.vehicleforward.name="Вперед" для техніки +keybind.vehicleleft.name="Ліворуч" для техніки +keybind.vehicleright.name="Вправо" для техніки +keybind.vehicleup.name="Вгору" для техніки +moon.moon=Місяць +newversion.failed.name=Перевірка оновлень для Galacticraft провалилася! Наступна спроба відбудеться через 15 секунд. +newversion.success.name=Знайдена нова версія Galacticraft: +planet.jupiter=Юпітер +planet.mercury=Меркурій +planet.neptune=Нептун +planet.overworld=Земля +planet.saturn=Сатурн +planet.uranus=Уран +planet.venus=Венера +satellite.spacestation.overworld=Космічна станція Землі +schematic.moonbuggy.name=Місячний баггі +schematic.rocket_t1.name=Ракета 1-го рівня +schematic.rocket_t2.name=Ракета 2-го рівня +solarsystem.sol=Сонце +star.sol=Сонце +tile.air_lock_controller.name=Контролер повітряного шлюзу +tile.air_lock_frame.description=Блоки каркаса повітряного шлюзу, розташовані у формі порталу, з одним заміненим на контролер блоком будуть функціонувати як Повітряний шлюз. +tile.air_lock_frame.name=Каркас повітряного шлюзу +tile.air_lock_seal.name=Ущільнювач повітряного шлюзу +tile.aluminum_wire.alu_wire.description=Алюмінієвий дріт використовується для підключення джерел енергії до механізмів, які використовують енергію. +tile.aluminum_wire.alu_wire.name=Алюмінієвий дріт +tile.aluminum_wire.alu_wire_heavy.description=Товстий алюмінієвий дріт використовується для підключення джерел енергії до механізмів, які використовують енергію. За рахунок більшої провідності прискорює механізми 2-го рівня. +tile.aluminum_wire.alu_wire_heavy.name=Товстий алюмінієвий дріт +tile.aluminum_wire.alu_wire_switch.description=Керований алюмінієвий дріт приєднується як звичайний Алюмінієвий дріт, якщо не вимкнений сигналом червоного каменю. +tile.aluminum_wire.alu_wire_switch.name=Керований алюмінієвий дріт +tile.aluminum_wire.alu_wire_switch_heavy.description=Керований товстий алюмінієвий дріт приєднується як звичайний Товстий алюмінієвий дріт, якщо не вимкнений сигналом червоного каменю. +tile.aluminum_wire.alu_wire_switch_heavy.name=Керований товстий алюмінієвий дріт +tile.arclamp.description=Дугові лампи використовуються для освітлення великої території, також змушують більшість монстрів тікати. +tile.arclamp.name=Дугова лампа +tile.basic_block_core.block_aluminum_gc.name=Алюмінієвий блок +tile.basic_block_core.block_copper_gc.name=Мідний блок +tile.basic_block_core.block_meteoric_iron_gc.name=Блок метеоритного заліза +tile.basic_block_core.block_tin_gc.name=Олов'яний блок +tile.basic_block_core.block_silicon_gc.name=кремнієвий блок +tile.basic_block_core.deco_block_0.name=Декоративний олов'яний блок +tile.basic_block_core.deco_block_1.name=Декоративний олов'яний блок +tile.basic_block_core.ore_aluminum_gc.name=Алюмінієва руда +tile.basic_block_core.ore_copper_gc.name=Мідна руда +tile.basic_block_core.ore_silicon.name=Кремнієва руда +tile.basic_block_core.ore_tin_gc.name=Олов'яна руда +tile.basic_block_moon.bricks.name=Цегла місячної скарбниці +tile.basic_block_moon.cheesestone.name=Сирна руда +tile.basic_block_moon.coppermoon.name=Мідна руда +tile.basic_block_moon.moondirt.name=Місячний грунт +tile.basic_block_moon.moongrass.name=Місячний дерен +tile.basic_block_moon.moonstone.name=Місячний камінь +tile.basic_block_moon.sapphiremoon.name=Сапфірове руда +tile.basic_block_moon.tinmoon.name=Олов'яна руда +tile.buggy_pad.description=Заправна платформа при розміщенні блоків квадратом 3x3 дозволить баггі на платформі заправитися за допомогою завантажувача палива. Не може бути використана для запуску ракет! +tile.cargo.loader.name=Вантажний завантажувач +tile.cargo.unloader.name=Вантажний розвантажник +tile.cargo_loader.description=Вантажний завантажувач буде передавати блоки і предмети в ракети та іншу техніку з вантажним сховищем. Повинен бути підключений до злітно / заправного майданчику. +tile.cargo_unloader.description=Вантажний розвантажник буде забирати блоки і предмети з ракет та іншої техніки з вантажним сховищем. Повинен бути підключений до злітно / заправниго майданчику. +tile.cheese.description=Сырные блоки создаются из Лунного сыра, их можно поставить в мире или съесть. +tile.cheese.name=Блок сиру +tile.circuit_fabricator.description=Виробник мікросхем перероблятиме основні матеріали в кремнієві пластини, які використовуються для поліпшених механізмів. +tile.coal_generator.description=Вугільний генератор буде просто спалювати вугілля для вироблення енергії. Найпростіший, але найменш ефективний метод отримання енергії. +tile.collector.description=Кисневий складальник збиратиме кисень, одержуваний з найближчого листя. +tile.collector.name=Кисневий складальник +tile.compressor.description=Компресор перероблятиме злитки в їх стислі еквіваленти. Найнеобхідніша машина в Galacticraft! +tile.compressor_electric.description=Електричний компресор буде переробляти злитки в їх стислі еквіваленти. Стискає відразу дві пластини, що робить його більш ефективним, ніж попередника. +tile.compressor_advanced.description=Швидша версія Електричного компресора. Миттєво переробляє зливки на їхні стислі еквіваленти. +tile.concealed_detector.name=Детектор гравців +tile.concealed_redstone.name=Прихований червоний дріт +tile.concealed_repeater.name=Прихований повторювач червоного каменю +tile.crude_oil.name=Нафта +tile.crude_oil_moving.name=Неочищена нафта +tile.crude_oil_still.name=Неочищена нафта +tile.deconstructor.description=Деконструктор розбере ваші старі ракети та інші предмети, повертаючи будь які початкові матеріали. +tile.dishbase.description=Антена зв'язку може відстежувати положення космічних станцій і отримувати повідомлення з віддалених космічних баз. +tile.dishbase.name=Антена зв'язку +tile.distributor.description=Розподільник кисню буде випускати назовні кисневий міхур від центрального блоку, використовуючи карту пам'яті. Це дозволить дихати всередині міхура. +tile.distributor.name=Розподільник кисневого міхура +tile.dummyblock.cryogenic_chamber.name=Кріогенна камера +tile.dummyblock.launch_pad.name=Злітний майданчик +tile.dummyblock.nasa_workbench.name=Верстак NASA +tile.dummyblock.solar.name=Сонячна панель +tile.dummyblock.space_station_base.name=Підстава космічної станції +tile.electric_furnace_tier1.description=Електропіч використовується як більш швидка альтернатива звичайним вугільним печкам +tile.electric_furnace_tier2.description=Дугова піч використовується як більш швидка альтернатива звичайним вугільним і електричним печкам. Подвоює вихід злитків з руд! +tile.emergency_box.description=Додайте Рятувальну станцію поруч з місцем вашого першого приземлення на планеті. Відкрийте, щоб знайти Саморятівник всередині. Також відлякує монстрів! +tile.emergency_box.filled.name=Рятувальна станція (з саморятівники) +tile.emergency_box.name=Рятувальна станція +tile.enclosed.aluminum_wire.name=Герметичний алюмінієвий дріт +tile.enclosed.copper_cable.name=Герметичний мідний дріт +tile.enclosed.description=Герметичні блоки слід використовувати в місцях, де не повине проходити повітря (наприклад, в стінах космічних баз). +tile.enclosed.fluid_pipe.name=Герметична рідинна труба +tile.enclosed.glass_fibre_cable.name=Герметичний скловолоконний дріт +tile.enclosed.gold_cable.name=Герметичний золотий дріт +tile.enclosed.hv_cable.name=Герметичний високовольтний провід +tile.enclosed.lv_cable.name=Герметичний олов'яний провід +tile.enclosed.heavy_aluminum_wire.name=Герметичний товстий алюмінієвий дріт +tile.enclosed.me_cable.name=Герметичний МЕ провід +tile.enclosed.pipe_fluids_cobblestone.name=Герметична булижніковая рідинна труба +tile.enclosed.pipe_fluids_stone.name=Герметична кам'яна рідинна труба +tile.enclosed.pipe_items_cobblestone.name=Герметична булижніковая транспортна труба +tile.enclosed.pipe_items_stone.name=Герметична кам'яна транспортна труба +tile.enclosed.pipe_power_gold.name=Герметична золота енергетична труба +tile.enclosed.pipe_power_stone.name=Герметична кам'яна енергетична труба +tile.energy_storage_module_tier1.description=Сховище енергії використовується для зберігання великої кількості енергії. +tile.energy_storage_module_tier2.description=Енергетичний масив використовується для зберігання великого кол-ва енергії. Зберігає і виводить більше енергії, ніж його попередник. +tile.fallen_meteor.description=Впавші метеорити можна знайти на багатьох планетах / місяцях, які мають розріджені або взагалі не мають атмосферу. Дають необроблене метеоритне залізо. +tile.fallen_meteor.name=Упавший метеорит +tile.fluid_pipe.description=Рідинна труба передає рідини і гази від джерела до місця призначення. Гайковий ключ використовується для перемикання режимів. +tile.fluid_pipe.name=Рідинна труба +tile.fluid_pipe_pull.description=Рідинна труба передає рідини і гази від джерела до місця призначення. Гайковий ключ використовується для перемикання режимів. +tile.fluid_pipe_pull.name=Рідинна труба +tile.fluid_tank.description=Рідинний резервуар зберігає рідини і гази для подальшого використання. +tile.fluid_tank.name=Рідинний резервуар +tile.fuel.name=Паливо +tile.fuel_block.name=Паливо +tile.fuel_loader.description=Після підключення до злітно або заправних майданчику Завантажувач палива заллє паливо в підключену ракету або іншу техніку. +tile.fuel_loader.name=Завантажувач палива +tile.glowstone_torch.description=Лучше всього використати для освітлення, де немає кисню. +tile.glowstone_torch.name=Смолоскип з світящогося каменю +tile.grating.name=Решітка +tile.landing_pad.buggy_fueler.name=Заправна платформа для баггі +tile.landing_pad.cargo_pad.name=Платформа для Вантажной ракети +tile.landing_pad.description=Блоки злітної площадки, будучи розташовані квадратом 3x3, дозволяють розмістить ракету. Завантажники палива, Вантажні завантажувачі і Контролери запуску можуть бути приєднані. +tile.landing_pad.landing_pad.name=Взлітний майданчик +tile.landing_pad_full.name=Взлітний майданчик +tile.machine.0.name=Вугільний генератор +tile.machine.1.name=Сховище енергії +tile.machine.2.name=Електропіч +tile.machine.3.name=Компресор +tile.machine.7.name=Електрична дугова піч +tile.machine.8.name=Енергетичний масив +tile.machine2.4.name=Електричний компресор +tile.machine2.5.name=Виробник мікросхем +tile.machine2.6.name=Сховище кисню +tile.machine2.10.name=Деконструктор +tile.machine3.9.name=Художник +tile.machine4.11.name=Покращений компресор +tile.magnetic_table.name=Магнітний верстак +tile.magnetic_table.description=При виході з магнітного верстака зберігає предмети, покладені в нього. Приймає предмети при натисканні Shift + ЛКМ. Для завантаження і вилучення предметів можуть бути використані воронки - верстак спробує задіяти останній запомненний рецепт. +tile.moon_stairs_brick.name=Сходинки з цегли місячної скарбниці +tile.moon_stairs_stone.name=Сходинки з місячного каменю +tile.ore_copper.name=Мідна руда +tile.ore_tin.name=Олов'яна руда +tile.oxygen_compressor.0.name=Кисневий компресор +tile.oxygen_compressor.1.name=Кисневий декомпресор +tile.oxygen_compressor.description=Кисневий компресор буде завантажувати кисень з внутрішнього сховища в кисневий резервуар. +tile.oxygen_decompressor.description=Кисневий декомпресор буде розвантажений киснем у внутрішньому сховище з Кисневого резервуара. +tile.oxygen_detector.description=Кисневий датчик буде випромінювати сигнал червоного каменю, коли навколо нього буде кисень. +tile.oxygen_detector.name=Кисневий датчик +tile.oxygen_storage_module.description=Сховище кисню використовується для зберігання великої кількості кисню. +tile.painter.description=Сяючі панелі і інші об'єкти. Щоб встановити новий колір. +tile.panel_lighting.description=Освітлена панель для використання в космосі! Ключ обертає її. Щоб змінити зовнішній вигляд, затисніть Shift і використовуйте панель на обраному блоці. +tile.panel_lighting_0.name=Освітлена панель (квадратна) +tile.panel_lighting_1.name=Освітлена панель (точкова) +tile.panel_lighting_2.name=Освітлена панель (лінійна) +tile.panel_lighting_3.name=Освітлена панель (темна) +tile.panel_lighting_4.name=Освітлена панель (темна) +tile.parachest.description=Скрині з парашутом будуть падати з неба після посадки на деякі планети / місяця, такі як Земля. Містять ракету, паливо і вантаж, збережений з попереднього запуску. +tile.parachest.name=Скриня з парашутом +tile.platform.description=Поставте 4 блоки для формування платформи. Платформа переміщує гравця до наступної платформі вгорі або внизу. Натисніть Shift, щоб спуститися, стрибніть, щоб піднятися. +tile.platform.name=Гідравлічна платформа +tile.refinery.description=Очисний завод буде приймати нафту і енергію, а потім виводити паливо, що використовується для ракет і транспорту. +tile.refinery.name=Очисний завод +tile.compact_workbench.name=Компактний верстак NASA +tile.compact_workbench.description=Компактний варіант верстака NASA. +tile.rocket_workbench.name=Верстак NASA +tile.rocket_workbench.description=Верстак NASA використовується для створення безлічі поліпшених деталей і техніки. Нові схеми можуть бути додані, як тільки вони були знайдені. +tile.sapling2.birch.name=Саджанець берези +tile.sapling2.jungle.name=Саджанець тропічного дерева +tile.sapling2.oak.name=Саджанець дуба +tile.sapling2.spruce.name=Саджанець сосни +tile.sealer.description=Герметизатор кисню буде шукати замкнутий простір. Якщо таке знайдено, воно заповниться повітрям. +tile.sealer.name=Герметизатор кисню +tile.slab_gc_half.moon_bricks_slab.name=Плита з цегли місячної скарбниці +tile.slab_gc_half.moon_slab.name=Плита з місячного каменю +tile.slab_gc_half.tin_slab_1.name=Декоративна олов'яна плита +tile.slab_gc_half.tin_slab_2.name=Декоративна олов'яна плита +tile.solar.advanced_solar.name=Покращена сонячна панель +tile.solar.basic_solar.name=Основна сонячна панель +tile.solar_adv.description=Покращені сонячні панелі будуть отримувати енергію з сонця, зберігаючи її. Автоматично регулюють кут панелі для оптимального отримання енергії. +tile.solar_basic.description=Основні сонячні панелі будуть отримувати енергію з сонця, зберігаючи її. Найбільше енергії отримують в середині дня (можна налаштувати). +tile.space_glass.description=Вакуумне скло для ваших космічних баз! Фарбується в будь-який колір за допомогою найближчій фарбувальної машини. +tile.space_glass.clear.description=Прозоре вакуумне скло з чудовим видом з космосу! А також відмінна видимість під водою. +tile.space_glass.strong.description=Міцне і ударостійке вакуумне скло. Виготовлено з алюмінію. +tile.space_glass_clear.name=Вакуумне скло (прозоре) +tile.space_glass_vanilla.name=Вакуумне скло +tile.space_glass_strong.name=Вакуумне скло (прозоре) +tile.space_station_base.name=Підстава космічної станції +tile.spin_thruster.description=Обертають двигуни використовуються для обертання космічних станцій. +tile.spin_thruster.name=Обертающийся двигун +tile.telemetry.description=Збирає корисні дані з приєднаних ракет, гравців і мобів. Найкраще розміщувати поруч з екраном відображення. Використовуйте частотний модуль, щоб налаштувати отримувану інформацію. +tile.telemetry.name=дистанційний блок +tile.tin_stairs_1.name=Декоративні олов'яні сходинки +tile.tin_stairs_2.name=Декоративні олов'яні сходинки +tile.treasure_chest.description=Скрині зі скарбами 1-го рівня будуть генеруватися в скарбницях Місяця. Їх можна відкрити після перемоги над фінальним босом. +tile.treasure_chest.name=Скриня зі скарбом +tile.unlit_torch.name=Смолоскип +tile.unlit_torch_stone.name=Кам'яний смолоскип +tile.unlit_torch_lit.name=Смолоскип +tile.unlit_torch_stone_lit.name=Кам'яний смолоскип +tile.view_screen.description=Екрани відображення додадуть останній штрих вашій космічній базі. ПКМ змінює наведену інформацію. +tile.view_screen.name=Екран відображення +tile.wall_gc.moon.name=Стіна з місячного каменю +tile.wall_gc.moon_bricks.name=Стіна з цегли місячної скарбниці +tile.wall_gc.tin.name=Декоративна олов'яна стіна + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=Досліджуйте Місяць ... і далі! +advancement.galacticraft.coal_generator.title=Вугільна потужність +advancement.galacticraft.coal_generator.description=Створіть вугільний генератор +advancement.galacticraft.circuit_fabricator.title=Виробник +advancement.galacticraft.circuit_fabricator.description=Створіть виробника мікросхем, щоб зробити напівпровідникову пластину +advancement.galacticraft.basic_wafer.title=Напівпровідникова пластина +advancement.galacticraft.basic_wafer.description=Створіть основну напівпровідникову пластину. (Будь ласка, не їжте це) +advancement.galacticraft.advanced_wafer.title=Покращена напівпровідникова пластина +advancement.galacticraft.advanced_wafer.description=Створіть виробника мікросхем, щоб зробити напівпровідникову пластину +advancement.galacticraft.compressor.title=Стиснутий +advancement.galacticraft.compressor.description=Створіть компресор +advancement.galacticraft.solar.title=Вільна енергія +advancement.galacticraft.solar.description=Створіть основну сонячну панель +advancement.galacticraft.advanced_solar.title=Швидко + Ефективно +advancement.galacticraft.advanced_solar.description=Створіть поліпшену сонячну панель +advancement.galacticraft.electric_compressor.title=Електричне оновлення +advancement.galacticraft.electric_compressor.description=Створіть електричний компресор +advancement.galacticraft.oil.title=Липка річ +advancement.galacticraft.oil.description=Впасти в нафту +advancement.galacticraft.refiery.title=Час нефтепереробкі! +advancement.galacticraft.refiery.description=Створіть очисний завод +advancement.galacticraft.rocket_fuel.title=Ракетне паливо +advancement.galacticraft.rocket_fuel.description=Переробіть нафту в очисному заводі +advancement.galacticraft.oxygen_collector.title=Кисень не вімкнений +advancement.galacticraft.oxygen_collector.description=Створіть кисневий складальник +advancement.galacticraft.oxygen_compressor.title=Стиснути повітря +advancement.galacticraft.oxygen_compressor.description=Створіть кисневий компресор +advancement.galacticraft.fill_tank.title=Повітря 2 йде +advancement.galacticraft.fill_tank.description=Заповніть кисневий балон +advancement.galacticraft.fill_all_tanks.title=Кисневий запас +advancement.galacticraft.fill_all_tanks.description=Заповніть кожен вид кисневого балона +advancement.galacticraft.all_oxygen_gear.title=Все готово +advancement.galacticraft.all_oxygen_gear.description=Створіть все, що вам потрібно, щоб дихати в космосі +advancement.galacticraft.rocket_workbench.title=Космічний інженер +advancement.galacticraft.rocket_workbench.description=Створіть верстак NASA +advancement.galacticraft.rocket_t1.title=У нас є ракета! +advancement.galacticraft.rocket_t1.description=Приварити ракету разом +advancement.galacticraft.fuel_loader.title=Наповни її! +advancement.galacticraft.fuel_loader.description=Створіть завантажувач палива +advancement.galacticraft.launch_rocket.title=У нас є старт! +advancement.galacticraft.launch_rocket.description=Запустіть свою першу ракету +advancement.galacticraft.moon.title=Місяць! +advancement.galacticraft.moon.description=Здійснив посадку +advancement.galacticraft.create_space_station.title=Космічна станція +advancement.galacticraft.create_space_station.description=Створіть свою космічну станцію! +advancement.galacticraft.spin_thruster.title=У мене паморочиться голова +advancement.galacticraft.spin_thruster.description=Створіть обертающийся двигун +advancement.galacticraft.moon_dungeon.title=Краще, ніж засохнути +advancement.galacticraft.moon_dungeon.description=Знайдіть еволюціонувавшого скелета-боса в скарбниці +advancement.galacticraft.dungeon_key_moon.title=У мене є ключ +advancement.galacticraft.dungeon_key_moon.description=Убийте боса, який переховується в скарбниці, і вкради його ключ +advancement.galacticraft.moon_buggy_schematic.title=Глючная схема +advancement.galacticraft.moon_buggy_schematic.description=Отримайте схему місячного §oбаггі +advancement.galacticraft.moon_buggy.title=Баггі +advancement.galacticraft.moon_buggy.description=Зваріть баггі разом diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_cn.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_cn.lang new file mode 100644 index 00000000..57feed28 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_cn.lang @@ -0,0 +1,826 @@ +checklist.create_grapple.key=制作攀援钩爪 +checklist.equip_oxygen_suit.key=装备氧气供给装置 +checklist.equip_parachute.key=装备降落伞 +command.gcastrominer.count=%s拥有%s个太空采矿机 +commands.emergencykit=已给予%s应急设备 +commands.dimensionteleport=%s被传送到%s附近 +commands.dimensiontp.too_many=命令参数过多!用法:%s +commands.gcenergyunits.invalid_units=/GCEnergyUnits 命令中的无效单位。用法:%s +commands.gcenergyunits.no_units=需指定单位!用法:%s +commands.gchouston.confirm.1=这可是航天任务,要不要再试试? +commands.gchouston.confirm.2=(若仍需放弃本次航天任务,请重新输入/gchouston以确认) +commands.gchouston.fail=/gchouston指令只在太空或创造模式下生效。 +commands.gchouston.help.1=呃,休斯顿,我们有麻烦了…… +commands.gchouston.help.2=(输入/gchouston指令可放弃当前航天任务返航回家) +commands.gchouston.noop=仅管理员有权对其他玩家使用/gchouston指令。 +commands.gchouston.success=好的,%s同志,请不要移动,马上将你传送回地球的家中。 +commands.joinrace.no_team=需指定队伍!用法:%s +commands.ssinvite.not_found=空间站里找不到你的名字,你得先上去一趟! +commands.ssinvite.wrong_usage=命令参数不足! 用法:%s +commands.ssnewowner.wrong_usage=无法识别此空间站 ID# -真的有这么个东西?用法:%s +commands.ssuninvite.no_player=你的空间站访客名单里没有玩家%s! +container.cargoloader.name=装货器 +container.cargounloader.name=卸货器 +container.fuelloader.name=燃料注入器 +container.lander.name=登陆舱 +container.magneticcrafting.name=磁力合成台 +container.oxygencollector.name=氧气收集机 +container.oxygencompressor.name=氧气压缩机 +container.oxygendecompressor.name=氧气解压机 +container.oxygendistributor.name=氧气释放机 +container.oxygensealer.name=气密设备 +container.parachest.name=伞降箱 +container.refinery.name=燃油精炼机 +container.solaradvanced.name=高级太阳能板 +container.solarbasic.name=基础太阳能板 +container.spaceship.name=一阶火箭 +container.treasurechest.name=一级珍宝箱 +death.attack.meteor_chunk=%1$s被陨石碎片击穿! +death.attack.oxygen_suffocation=%1$s耗尽氧气而亡! +death.attack.spaceship_crash=哦,不。%1$s的火箭坠毁了。 +death.attack.sulphuric_acid=%1$s被硫酸溶化! +death.attack.thermal=%1$s体温失控! +dimension.moon.name=月球 +dimension.overworld.name=地球 +dimension.sun.name=太阳 +entity.alien_villager.name=外星村民 +entity.buggy.name=星球车 +entity.celestial_screen.name=天体显示屏 +entity.evolved_creeper.name=爬行者(太空进化) +entity.evolved_skeleton.name=骷髅(太空进化) +entity.evolved_skeleton_boss.name=太空骷髅王 +entity.evolved_spider.name=蜘蛛(太空进化) +entity.evolved_zombie.name=僵尸(太空进化) +entity.evolved_enderman.name=末影人(太空进化) +entity.evolved_witch.name=女巫(太空进化) +entity.flag.name=旗帜 +entity.gcflag.name=旗帜 +entity.gravity_arrow.name=箭 +entity.lander.name=登陆舱 +entity.meteor.name=陨石 +entity.meteor_chunk.name=陨石块 +entity.oxygen_bubble.name=含氧气泡 +entity.para_chest.name=伞降箱 +entity.rocket_t1.name=一阶火箭 +galaxy.milky_way=银河系 +gc.configgui.allow_liquids_grating=允许流体从格栅中流过 +gc.configgui.alternate_canister_recipe=罐的其它合成配方 +gc.configgui.asteroids_flags=挑战模式旗帜 +gc.configgui.asteroids_start=挑战模式 (从小行星带启程) +gc.configgui.biome_id_base=GC生物群系ID基数 +gc.configgui.detectable_i_ds=可检测IDs +gc.configgui.disable_biome_type_registrations=关闭生物群系ID注册 +gc.configgui.disable_cheese_moon=关闭月球奶酪矿石生成 +gc.configgui.disable_copper_moon=关闭月球铜矿石生成 +gc.configgui.disable_lander=禁用月球登陆舱 +gc.configgui.disable_moon_village_gen=关闭月球村庄生成 +gc.configgui.disable_space_station_creation=禁止创建空间站 +gc.configgui.disable_ore_dict_space_metals=只使用星系自身的材料进行合成 +gc.configgui.disable_sapphire_moon=关闭蓝月宝石矿石生成 +gc.configgui.disable_spaceship_grief=关闭火箭爆炸 +gc.configgui.disable_spaceship_particles=关闭火箭粒子效果 +gc.configgui.disable_tin_moon=关闭月球锡矿石生成 +gc.configgui.disable_update_check=关闭更新检查 +gc.configgui.dungeon_boss_health_mod=调整地牢BOSS生命值 +gc.configgui.disable_vehicle_camera_changes=Vivecraft:关闭第三人称和放大功能 +gc.configgui.enable_aluminum_ore_gen=地球铝矿石生成 +gc.configgui.enable_copper_ore_gen=地球铜矿石生成 +gc.configgui.enable_debug=在控制台中显示调试信息 +gc.configgui.enable_other_mods_features=允许所有其它模组的世界生成 +gc.configgui.enable_retrogen_oil=地下石油生成 +gc.configgui.enable_sealer_edge_checks=密封边界检测 +gc.configgui.enable_silicon_ore_gen=地球硅矿石生成 +gc.configgui.enable_thaum_craft_nodes=外星球生成神秘时代灵气节点 +gc.configgui.enable_space_race_manager_popup=启用太空竞赛管理员弹窗 +gc.configgui.enable_tin_ore_gen=地球锡矿石生成 +gc.configgui.external_oil_gen=地表石油生成 +gc.configgui.force_overworld_respawn=强制重新生成主世界 +gc.configgui.hard_mode=困难科技模式 +gc.configgui.id_achiev_base=基础成就ID +gc.configgui.id_dimension_moon=月球维度ID +gc.configgui.id_dimension_overworld=地球维度ID +gc.configgui.id_dimension_overworld_orbit=空间站维度ID +gc.configgui.id_dimension_overworld_orbit_static=静态空间站维度ID +gc.configgui.id_schematic_add_schematic= “添加设计图”设计图ID +gc.configgui.id_schematic_moon_buggy=星球车设计图ID +gc.configgui.id_schematic_rocket_t1=一阶火箭设计图ID +gc.configgui.key_override_fuel_level=设置按键:火箭燃料表 +gc.configgui.key_override_toggle_adv_goggles=设置按键:高级目镜 +gc.configgui.map_scroll_invert=反向滚动地图 +gc.configgui.map_scroll_sensitivity=鼠标滚动地图信息显示 +gc.configgui.meteor_block_damage=陨石破坏地形 +gc.configgui.meteor_spawn_mod=陨石生成修改 +gc.configgui.more_stars=显示更多天体 +gc.configgui.oil_gen_factor=石油生成系数 +gc.configgui.ore_dict_silicon=其它模组硅矿辞名称 +gc.configgui.other_mod_ore_gen_i_ds=外星球允许其它模组矿石生成 +gc.configgui.override_capes=自动使用赞助披风 +gc.configgui.override_map=设置按键:星图 +gc.configgui.oxygen_indicator_bottom=下移氧气指示器 +gc.configgui.oxygen_indicator_left=左移氧气指示器 +gc.configgui.planet_worldborders=登月点最大X,Z值 +gc.configgui.quick_mode=低难度 +gc.configgui.rocket_disable_overworld_return=禁止主世界火箭返航 +gc.configgui.rocket_disabled_dimensions=禁用火箭维度 +gc.configgui.rocket_fuel_factor=火箭燃料系数 +gc.configgui.sealable_i_ds=可密封方块 +gc.configgui.space_station_energy_scalar=空间站能量调节器 +gc.configgui.space_stations_require_permission=空间站权限 +gc.configgui.static_loaded_dimensions=静态维度加载 +gc.configgui.static_loaded_new_ss=静态空间站创建加载 +gc.configgui.suffocation_cooldown=窒息间隔 +gc.configgui.suffocation_damage=窒息伤害 +gc.configgui.title=星系配置文件 +gc.configgui.whitelist_co_f_h_core_gen=CoFHCore世界生成白名单 +gc.configgui.use_old_fuel_fluid_i_d=使用旧方式注册星系燃油 +gc.configgui.use_old_oil_fluid_i_d=使用旧方式注册星系石油 +gui.battery_slot.desc.0=电池槽:放置电池 +gui.battery_slot.desc.1=或者连接能源 +gui.bed_fail.message=啊哦,要是我睡着的时候氧气耗尽就麻烦了,还是在冬眠舱里休息吧! +gui.buggy.accel.name=加速 +gui.buggy.decel.name=减速 +gui.buggy.inv.name=物品栏/燃料 +gui.buggy.storage_space=存储空间 +gui.buggy.turn.name=左转-右转 +gui.button.back.name=返回 +gui.button.disable.name=关闭 +gui.button.disableseal.name=关闭密闭 +gui.button.enable.name=开启 +gui.button.enableseal.name=启动密闭 +gui.button.hide_dest.name=隐藏 +gui.button.loadfuel.name=加载燃料 +gui.button.loaditems.name=装载物品 +gui.button.next.name=下一个 +gui.button.paintapply.name=启用涂层 +gui.button.paintmix.name=混合颜色 +gui.button.paintreset.name=重置颜色 +gui.button.refine.name=精炼 +gui.button.stoploading.name=停止装载 +gui.button.stoprefine.name=停止精炼 +gui.button.stopunloading.name=停止卸载 +gui.button.unhide_dest.name=显示 +gui.button.unloaditems.name=卸载物品 +gui.button.unlockschematic.name=解锁设计图 +gui.checkbox.horizontal.name=水平模式 +gui.checkbox.invert.name=反向选取 +gui.checkbox.player_name.name=玩家名为 +gui.checkbox.player_within.name=有玩家在内 +gui.checkbox.redstone_signal.name=红石信号开 +gui.chest.warning.wrongkey=我需要一个%s阶的地牢钥匙来打开这个珍宝箱! +gui.choose_planet.desc.moon=宜居#无氧气#重力18% +gui.choose_planet.desc.overworld=生机勃勃#宜居#重力100% +gui.chooseplanet.alreadycreated1.name=空间站已经 +gui.chooseplanet.alreadycreated2.name=创建! +gui.chooseplanet.cannotcreate1.name=无法在这里 +gui.chooseplanet.cannotcreate2.name=创建空间站! +gui.crafting_memory.desc.0=这台磁力合成台能合成更多物品! +gui.crafting_memory.desc.1=合成一个物品即可记忆该合成表。 +gui.creative_only.desc=创造专用 +gui.display.nolink=无连接 +gui.docking_rocket.current_vel.name=当前速度 +gui.docking_rocket.distance_from.name=剩余距离 +gui.docking_rocket.target_vel.name=目标速度 +gui.docking_rocket.warning.name.0=按下%s减速 +gui.docking_rocket.warning.name.1=按下 %s加速 +gui.dropbox.player_distance.name.0=1米 +gui.dropbox.player_distance.name.1=2米 +gui.dropbox.player_distance.name.2=5米 +gui.dropbox.player_distance.name.3=10米 +gui.electric_compressor.desc.0=进度 +gui.energy_storage.desc.0=能量存储 +gui.energy_storage.desc.1=能量 +gui.flag.already_placed=旗帜飘扬! +gui.frequency_module.desc.0=可以感知微弱的声波 +gui.frequency_module.desc.1=以及远距离传输信号 +gui.frequencymodule.warning0=我需要一个 +gui.frequencymodule.warning1=才能聆听这里的声音。 +gui.fuel_output.desc.0=在这里放置空燃料罐, +gui.fuel_output.desc.1=便可以从燃料箱里抽取燃料 +gui.fuel_output.desc.2=灌满它们 +gui.fuel_tank.desc.0=燃料箱: +gui.fuel_tank.desc.1=需要使用燃料装载机 +gui.fuel_tank.desc.2=装满燃料箱 +gui.fuel_tank.desc.3=使用燃油罐装填满 +gui.fuel_tank.desc.4=燃料箱 +gui.infinite_item.desc=无限 +gui.lander.velocity=登陆速度 +gui.lander.velocityu=米/秒 +gui.lander.warning2=按下“ +gui.lander.warning3=”减速! +gui.max_output.desc=满功率输出 +gui.message.addnewsch.name=新增设计图 +gui.message.apply.name=应用 +gui.message.assign_name.name=命名 +gui.message.atmosphere.name=大气层 +gui.message.back.name=后退 +gui.message.breed.name=繁殖 +gui.message.bubble_visible.name=气泡可视 +gui.message.can_create_space_station.name=可以在这里创建空间站! +gui.message.cancel.name=取消 +gui.message.cannot_create_space_station.name=无法在此创建空间站。 +gui.message.catalog.name=目录 +gui.message.click_again.0.name=再次点击放大 (赏月 & 观察卫星) +gui.message.click_again.1.name=再次点击放大 (赏月) +gui.message.click_again.2.name=再次点击放大 (观察卫星) +gui.message.click_again.3.name=再次点击放大 +gui.message.clicklink=点击查看星系模组Wiki +gui.message.create_ss.name=创建 +gui.message.daynightcycle.name=昼夜交替周期 +gui.message.energy=能量 +gui.message.environment.name=光照效率 +gui.message.exit.name=退出 +gui.message.fuel.name=燃料 +gui.message.full.name=满 +gui.message.generating.name=正在生成 +gui.message.grow.name=生长 +gui.message.heal.name=治疗 +gui.message.help1=寻找星系模组的帮助页面 +gui.message.help1a=无论何时,如果希望再次看见这条帮助信息,请输入 +gui.message.help2=寻找太空计划的指导 +gui.message.help3=寻找石油的资料 +gui.message.in.name=输入 +gui.message.launch.name=发射 +gui.message.max_energy=最大能量 +gui.message.meansurfacetemp.name=平均地表温度 +gui.message.moon.atmosphere.0.name=无 +gui.message.moon.daynightcycle.0.name=29.5地球日 +gui.message.moon.meansurfacetemp.0.name=(昼面) 253℃ +gui.message.moon.meansurfacetemp.1.name=(夜面) -153℃ +gui.message.moon.surfacecomposition.0.name=玄武岩和 +gui.message.moon.surfacecomposition.1.name=奶酪的痕迹 +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(地球的18% ) +gui.message.of.name=of +gui.message.oil.name=石油 +gui.message.out.name=输出 +gui.message.overworld.atmosphere.0.name=氮气和氧气 +gui.message.overworld.atmosphere.1.name=适合生物生存 +gui.message.overworld.daynightcycle.0.name=1地球日 +gui.message.overworld.meansurfacetemp.0.name=14℃ +gui.message.overworld.surfacecomposition.0.name=石头,泥土和 +gui.message.overworld.surfacecomposition.1.name=沙砾 +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(地球的100%) +gui.message.prelaunch=发射前检查列表 +gui.message.rename.name=重命名 +gui.message.select_ss.name=选定空间站 +gui.message.ss_owner.name=拥有者: +gui.message.status.name=状态 +gui.message.strengthen.name=强化 +gui.message.surfacecomposition.name=地表构成 +gui.message.surfacegravity.name=地表重力 +gui.message.thermal_status.name=温度控制器 +gui.message.tier.name= %d阶 +gui.message.unnamed.name=未命名 +gui.missing_core.name.0=未在mods文件夹中找到MicdoodleCore +gui.missing_core.name.1=星系模组载入失败 +gui.missing_core.name.2=关闭Minecraft并安装MicdoodleCore +gui.missing_core.name.3=点击下载 +gui.new_schematic.slot.desc.0=新工程设计图槽。你 +gui.new_schematic.slot.desc.1=可以通过 +gui.new_schematic.slot.desc.2=探索行星和卫星上的地牢 +gui.new_schematic.slot.desc.3=来获取新的工程设计图 +gui.oil_tank.desc.0=油箱,可以使用 +gui.oil_tank.desc.1=石油罐装填满 +gui.oxygen.warning=氧气装置失效! +gui.oxygen_compressor.slot.desc.0=氧气压缩装罐槽:装入氧气罐 +gui.oxygen_compressor.slot.desc.1=可以装罐氧气供给玩家呼吸。 +gui.oxygen_decompressor.slot.desc.0=氧气解压释放槽:装入氧气罐 +gui.oxygen_decompressor.slot.desc.1=能够清空罐中剩余的氧气。 +gui.oxygen_slot.desc.0=氧气槽:装入氧气罐, +gui.oxygen_slot.desc.1=或者连接供氧设备 +gui.oxygen_storage.desc.0=氧气存储 +gui.oxygen_storage.desc.1=氧气 +gui.oxygen_use.desc=氧气消耗 +gui.per_second=/秒 +gui.player.bpm=心率(次/分) +gui.player.food=饱食度 +gui.player.health=生命值 +gui.player.ouch=嗷!!!! +gui.receiver.cannot_attach=这里无法放置接收器! +gui.requires_controller.desc=需要发射控制器 +gui.rocket.countdown=倒计时 +gui.rocket.height=高度 +gui.rocket.inv.name=物品栏 / 燃料 +gui.rocket.launch.name=发射 +gui.rocket.launched=发射 +gui.rocket.on_launchpad=发射平台就绪 +gui.rocket.speed=速度 +gui.rocket.turn.name=左-右转 +gui.rocket.updown.name=上-下移 +gui.rocket.warning.fuelinsufficient=剩余燃料无法支持一次安全的常规发射! +gui.rocket.warning.launchcontroller=准备发射时发射取消。检查发射控制器! +gui.rocket.warning.nofuel=我得先在燃料舱里灌入足够的燃料! +gui.rocket.warning.nogyroscope=一股神秘的力量正令陀螺仪疯狂旋转! +gui.rocket.warning.noparachute=我没带降落伞!如果我就这么发射,我就难以安全返航! +gui.rocket_type.0=存储舱: 18 +gui.rocket_type.1=存储舱: 36 +gui.rocket_type.2=存储舱: 54 +gui.rocket_type.3=燃料已装填 +gui.seconds=秒 +gui.sensor.advanced=高级模式 +gui.sensor.advancedoff=关 +gui.sensor.advancedon=开 +gui.show_bubble.desc.0=显示气泡 +gui.skeleton_boss.message=由于全部玩家在战斗时离开房间,BOSS消失!重新进入房间,BOSS将再次现身! +gui.space_race.chat.add_success=%s已加入太空竞赛! +gui.space_race.chat.already_part=你早就加入太空竞赛了! +gui.space_race.chat.invite_received=已接受来自%s的太空竞赛组队邀请。 +gui.space_race.chat.not_found=并未找到名为%s的玩家。 +gui.space_race.chat.remove_success=%s已被踢出太空竞赛。 +gui.space_race.chat.to_join=请使用指令%s以加入%s +gui.space_race.coming_soon=即将到来! +gui.space_race.create.add_players.name=添加玩家 +gui.space_race.create.back.name=返回 +gui.space_race.create.brush_radius.name=画笔半径 +gui.space_race.create.brush_size.name=画笔大小 +gui.space_race.create.change_color.name.0=改变 +gui.space_race.create.change_color.name.1=队伍 +gui.space_race.create.change_color.name.2=颜色 +gui.space_race.create.close.name=关闭 +gui.space_race.create.customize.name=自定义旗帜 +gui.space_race.create.eraser_radius.name=橡皮半径 +gui.space_race.create.eraser_size.name=橡皮大小 +gui.space_race.create.global_stats.name=查阅全球数据 +gui.space_race.create.invite_player.name=邀请玩家 +gui.space_race.create.player_radius.name=注意: 玩家必须在25米范围内! +gui.space_race.create.rem_players.name=移除玩家 +gui.space_race.create.remove.name=移除 +gui.space_race.create.remove_player.name=移除玩家 +gui.space_race.create.rename.name=重命名队伍 +gui.space_race.create.send_invite.name=发送邀请 +gui.space_race.create.server_stats.name=查阅服务器数据 +gui.space_race.create.title.name.0=太空竞赛 +gui.space_race.create.title.name.1=管理器 +gui.space_race.create.title.name=太空竞赛管理器 +gui.space_race.join.member_count.name=成员%d +gui.space_race.join.name=加入 +gui.space_race.join.owner.name=拥有者 +gui.space_race.join.title.name=加入太空竞赛 +gui.space_race.unnamed=未命名团队 +gui.spacestation.added=你现在得到授权,可以自由进出%s的空间站。 +gui.spacestation.addsuccess=已将%s添加至空间站访客名单。 +gui.spacestation.allow_all_false=你的空间站现在不再对任何玩家开放。 +gui.spacestation.allow_all_true=你的空间站现在对所有玩家开放。(通过指令 /ssinvite -all 开启。) +gui.spacestation.changesuccess=空间站所有权从%s转移至%s。 +gui.spacestation.playername=<玩家名> +gui.spacestation.removesuccess=已将%s从空间站访客名单中移除。 +gui.spacestation.to_allow_entry=允许其他玩家进入该空间站。 +gui.spacestation.type_command=输入 +gui.status.active.name=运行的 +gui.status.air_lock_closed.name=气闸已关闭 +gui.status.air_lock_open.name=气闸已打开 +gui.status.blockedfully.name=阳光粒子特效关 +gui.status.blockedpartial.name=阳光粒子特效开 +gui.status.check_pending.name=检查待机中 +gui.status.check_starting.name=检查启动中 +gui.status.checking_seal.name=正在检查密封性 +gui.status.collecting.name=收集中 +gui.status.collectingenergy.name=收集能量 +gui.status.compressing.name=压缩中 +gui.status.disabled.name=禁用的 +gui.status.fulltank.name=氧气罐已满 +gui.status.generating.name=产生中 +gui.status.hull_heat.name=机壳热能 +gui.status.idle.name=空闲 +gui.status.missingleaves.name=树叶不足 +gui.status.missingoxygen.name=氧气不足 +gui.status.missingpower.name=能量不足 +gui.status.missingpower.short.name=无能量 +gui.status.missingtank.name=无可用氧气罐 +gui.status.nofuel.name=无可用燃料! +gui.status.noinvtarget.name=无装载空间! +gui.status.noitems.name=无货物供装载! +gui.status.nooil.name=无石油供应! +gui.status.not_available.name=无 +gui.status.not_generating.name=未产生 +gui.status.notargetload.name=装载目标无效! +gui.status.notargetunload.name=卸载目标无效! +gui.status.off.name=关闭 +gui.status.on.name=开启 +gui.status.raining.name=雨天 +gui.status.ready.name=就绪 +gui.status.refining.name=精炼中 +gui.status.running.name=运行中 +gui.status.sealed.name=密封的 +gui.status.sealerblocked.name=输出口堵塞! +gui.status.sun_visible.name=太阳可见 +gui.status.tank_empty.name=氧气罐已空 +gui.status.targetempty.name=目标载具空载! +gui.status.targetfull.name=目标载具满载! +gui.status.unknown.name=未知 +gui.status.unsealed.name=空间太大/未密封 +gui.tank.oxygen_remaining=氧气剩余 +gui.telemetry_fail.message=我得先手持或佩戴频率模块以追踪一个实体! +gui.telemetry_fail_no_frequency_module.message=我得手持一个频率模块才能使用它! +gui.telemetry_fail_wearing_it.message=想和遥感装置连接,我得先摘下频率模块! +gui.telemetry_succeed.message=遥感装置已连接。 +gui.thermal_slot.desc.0=温度附件插槽,作用于周围环境 +gui.thermal_slot.desc.1=温度控制器 (可选) +gui.thermal_slot.desc.2=注:会增大能量消耗! +gui.title.air_lock.name=%s的气闸控制器 +gui.tracking.message=追踪已激活.现需右击一个遥感装置来完成连接。 +gui.village.warning.no_freq_mod=我需要配备一个频率模块来和他们交流! +gui.warning.invalid_thermal=热保护无效! +gui.warning.noroom=空间不足! +gui.warning=警报! +item.air_fan.name=换气扇 +item.air_vent.name=通气孔 +item.basic_item.ambient_thermal_controller.name=环境温度控制器 +item.basic_item.canned_food.name=罐装食品 +item.basic_item.compressed_aluminum.name=致密铝板 +item.basic_item.compressed_bronze.name=致密青铜 +item.basic_item.compressed_copper.name=致密铜板 +item.basic_item.compressed_iron.name=致密铁板 +item.basic_item.compressed_steel.name=致密钢板 +item.basic_item.compressed_tin.name=致密锡板 +item.basic_item.dehydrated_apple.name=脱水苹果 +item.basic_item.dehydrated_carrot.name=脱水胡萝卜 +item.basic_item.dehydrated_melon.name=脱水西瓜 +item.basic_item.dehydrated_potato.name=脱水马铃薯 +item.basic_item.frequency_module.name=频率模块 +item.basic_item.ingot_aluminum.name=铝锭 +item.basic_item.ingot_bronze.name=青铜锭 +item.basic_item.ingot_copper.name=铜锭 +item.basic_item.ingot_steel.name=钢锭 +item.basic_item.ingot_tin.name=锡锭 +item.basic_item.raw_silicon.name=原生硅 +item.basic_item.solar_module_0.name=单体太阳能模块 +item.basic_item.solar_module_1.name=全载太阳能模块 +item.basic_item.wafer_advanced.name=高级晶圆 +item.basic_item.wafer_basic.name=基础晶圆 +item.basic_item.wafer_solar.name=蓝光太阳能晶圆 +item.battery.name=电池 +item.bucket_fuel.name=燃油桶 +item.bucket_oil.name=石油桶 +item.buggy.name=星球车 +item.buggymat.seat.name=星球车座椅 +item.buggymat.storage.name=星球车储物箱 +item.buggymat.wheel.name=星球车车轮 +item.canister.copper.name=铜罐 +item.canister.tin.name=锡罐 +item.canvas.name=帆布 +item.cheese_block.name=奶酪块 +item.cheese_curd.name=凝乳奶酪 +item.compressed_meteoric_iron.name=致密陨铁 +item.dungeonfinder.name=地牢定位仪 +item.empty_liquid_canister.name=空罐 +item.emergency_kit.description=右键可装备供氧设备等必须物品。注意:仅供一次性使用! +item.emergency_kit.name=太空应急设备 +item.engine.tier1booster.name=一阶助推器 +item.engine.tier1engine.name=一阶火箭引擎 +item.flag.name=旗帜 +item.food.cheese_slice.name=奶酪切片 +item.food.burger_bun.name=汉堡胚 +item.food.beef_patty_raw.name=生碎牛肉 +item.food.beef_patty_cooked.name=熟牛肉饼 +item.food.cheeseburger.desc=宇航员们最爱的美食——乳酪汉堡! +item.food.cheeseburger.name=乳酪汉堡 +item.food.canned_beef.name=牛肉罐头 +item.fuel.name=火箭燃油 +item.fuel_canister.name=燃油罐(满) +item.fuel_canister_partial.name=燃油罐(半满) +item.heavy_plating.name=重装防护板 +item.hot_description.name=高温 +item.ic2compat.ore_crushed_alu.name=粉碎铝矿石 +item.ic2compat.ore_purified_alu.name=纯净的粉碎铝矿石 +item.ic2compat.dust_alu.name=铝粉 +item.ic2compat.dust_small_titanium.name=小撮钛粉 +item.infinite_battery.name=无限电池 +item.infinite_oxygen.name=无限氧气罐 +item.key.t1.name=一阶地牢钥匙 +item.lunar_sapphire.description=蓝月宝石是和外星村民交易时使用的通货 +item.lunar_sapphire.name=蓝月宝石 +item.meteor_chunk.name=流星碎片(投射用) +item.meteor_chunk_hot.name=炙热流星碎片(投射用) +item.meteoric_iron_ingot.name=陨铁锭 +item.meteoric_iron_raw.name=原生陨铁 +item.nose_cone.name=鼻锥 +item.oil_canister.name=石油罐(满) +item.oil_canister_partial.name=石油罐(半满) +item.oil_extractor.name=便携抽油器 +item.oxygen_concentrator.name=氧气浓缩器 +item.oxygen_gear.name=供氧设备 +item.oxygen_mask.name=氧气面罩 +item.oxygen_tank_heavy_empty.name=重型氧气罐(空) +item.oxygen_tank_heavy_full.name=重型氧气罐 +item.oxygen_tank_light_empty.name=轻型氧气罐(空) +item.oxygen_tank_light_full.name=轻型氧气罐 +item.oxygen_tank_med_empty.name=中型氧气罐(空) +item.oxygen_tank_med_full.name=中型氧气罐 +item.parachute_black.name=黑色降落伞 +item.parachute_blue.name=浅蓝降落伞 +item.parachute_brown.name=棕色降落伞 +item.parachute_darkblue.name=蓝色降落伞 +item.parachute_darkgray.name=灰色降落伞 +item.parachute_darkgreen.name=绿色降落伞 +item.parachute_gray.name=灰白降落伞 +item.parachute_lime.name=黄绿降落伞 +item.parachute_magenta.name=品红降落伞 +item.parachute_orange.name=橙色降落伞 +item.parachute_pink.name=粉色降落伞 +item.parachute_plain.name=降落伞 +item.parachute_purple.name=紫色降落伞 +item.parachute_red.name=红色降落伞 +item.parachute_teal.name=青色降落伞 +item.parachute_yellow.name=黄色降落伞 +item.rocket_fins.name=火箭尾翼 +item.rocket_t1.name=一阶火箭 +item.schematic.name=CNSA工程设计图 +item.sensor_glasses.name=探测目镜 +item.sensor_lens.name=探测镜片 +item.standard_wrench.name=标准扳手 +item.steel_axe.name=重装斧 +item.steel_boots.name=重装靴子 +item.steel_chestplate.name=重装胸甲 +item.steel_helmet.name=重装头盔 +item.steel_hoe.name=重装锄 +item.steel_leggings.name=重装护腿 +item.steel_pickaxe.name=重装镐 +item.steel_pole.name=钢杆 +item.steel_shovel.name=重装锹 +item.steel_sword.name=重装剑 +item.tier1.desc=一阶 +item_desc.powerdraw.name=能量需求:%s/s +item_desc.shift.name=按下 %s 查看更多信息 +item_group.galacticraft_blocks=星系 | 方块 +item_group.galacticraft_items=星系 | 物品 +jei.arc_lamp.info=亮度极高的朝向性光源,装于高处效果更佳!可使用扳手转向。 +jei.electric_compressor.info=电动型的压缩机,不仅有双倍的效率,在供应二级电力时还能更快!支持漏斗输入输出。 +jei.electric_compressor.appeng.info=若希望使用AE2进行自动化,则需在合成表中设置2个模组的金属锭,详阅 https:goo.gl/BwY15G +jei.fluid_pipe.info=用于输送液体和气体的管道,使用扳手右击可打开液泵装置导出流体,但\n流体管道在液泵模式是不能直接输出液体的,所以务必使用两格以上的管道。 +jei.fuel_loader.info=装在火箭发射平台旁边,为上面的火箭填充燃料,为所有太空任务所必须——当然包括返航! +jei.magnetic_crafting.info=能保存物品的工作台,亦能使用漏斗输入的原料自动合成上次合成合成的物品。 +jei.oxygen_collector.info=从绿叶、作物乃至地球大气中收集富含氧气的混合气体以供呼吸,可用\n管道联通氧气压缩机以装填氧气罐,也可联通氧气供给机或是释放机直接供氧。 +jei.oxygen_distributor.info=在周围生成一个可供各类生物呼吸的气泡,氧气源可以是储氧模块,亦可以是氧气收集机。 +jei.oxygen_sealer.info=可在由氧气收集机或储氧模块供氧的条件下为完全密封的太空基地舱室营造可呼吸的气体环境,可利用探测目镜\n检查泄漏点!单个供给机只能为10×10×8方块大小的舱室供氧,故若试图供给更大空间,请安装多台供给机。 +jei.wrench.info=右击可为各类方块调整方向,潜行右击则可调整大部分星系\n电力机械的能量和物流接口。 +keybind.map.name=星图 +keybind.sensortoggle.name=切换传感器护目镜模式 +keybind.spaceshipinv.name=打开飞船舱 +keybind.vehiclebackward.name=载具后退 +keybind.vehicledown.name=载具下降 +keybind.vehicleforward.name=载具前进 +keybind.vehicleleft.name=载具左转 +keybind.vehicleright.name=载具右转 +keybind.vehicleup.name=载具上升 +moon.moon=月球 +planet.curseforge=CurseForge +newversion.failed.name=星系更新检查失败!15秒后重试 +newversion.success.name=发现星系模组版本: +planet.jupiter=木星 +planet.mercury=水星 +planet.neptune=海王星 +planet.overworld=地球 +planet.saturn=土星 +planet.uranus=天王星 +planet.venus=金星 +satellite.spacestation.overworld=环地空间站 +schematic.moonbuggy.name=星球车 +schematic.rocket_t1.name=一阶火箭 +schematic.rocket_t2.name=二阶火箭 +solarsystem.sol=太阳系 +star.sol=太阳系 +tile.air_lock_controller.name=气闸控制器 +tile.air_lock_frame.description=气密框架,需布置为传送门的形状,当其中一个方块被替换为控制器时,就会变为运行的气闸。 +tile.air_lock_frame.name=气密框架 +tile.air_lock_seal.name=气密闸 +tile.aluminum_wire.alu_wire.description=铝线用于从相连的能量源向耗电机器传导电力。 +tile.aluminum_wire.alu_wire.name=铝线 +tile.aluminum_wire.alu_wire_heavy.description=重质铝线用于从相连的能量源向耗电机器传导电力,且能以更高的速度为二级机器提供加成。 +tile.aluminum_wire.alu_wire_heavy.name=重质铝线 +tile.aluminum_wire.alu_wire_switch.description=分流铝线与普通的铝线类似,但可以输入红石信号开关。 +tile.aluminum_wire.alu_wire_switch.name=分流铝线 +tile.aluminum_wire.alu_wire_switch_heavy.description=分流重质铝线与普通的重质铝线类似,但可以输入红石信号开关。 +tile.aluminum_wire.alu_wire_switch_heavy.name=分流重质铝线 +tile.arclamp.description=弧光灯能够以强光照亮大片区域,并驱赶大部分怪物。 +tile.arclamp.name=弧光灯 +tile.basic_block_core.block_aluminum_gc.name=铝块 +tile.basic_block_core.block_copper_gc.name=铜块 +tile.basic_block_core.block_meteoric_iron_gc.name=陨铁块 +tile.basic_block_core.block_tin_gc.name=锡块 +tile.basic_block_core.block_silicon_gc.name=硅晶块 +tile.basic_block_core.deco_block_0.name=锡饰建材 +tile.basic_block_core.deco_block_1.name=锡饰墙砖 +tile.basic_block_core.ore_aluminum_gc.name=铝矿石 +tile.basic_block_core.ore_copper_gc.name=铜矿石 +tile.basic_block_core.ore_silicon.name=硅矿石 +tile.basic_block_core.ore_tin_gc.name=锡矿石 +tile.basic_block_moon.bricks.name=月球地牢砖 +tile.basic_block_moon.cheesestone.name=奶酪矿石 +tile.basic_block_moon.coppermoon.name=铜矿石 +tile.basic_block_moon.moondirt.name=月球土层 +tile.basic_block_moon.moongrass.name=月壤 +tile.basic_block_moon.moonstone.name=月岩 +tile.basic_block_moon.sapphiremoon.name=蓝月宝石矿 +tile.basic_block_moon.tinmoon.name=锡矿石 +tile.buggy_pad.description=将燃料补给台摆成3×3的形状,便可以摆上星球车,并通过所连接的燃料装载机补充燃料。千万别用来发射火箭! +tile.cargo.loader.name=装货器 +tile.cargo.unloader.name=卸货器 +tile.cargo_loader.description=装货器会将方块和物品装入拥有储货空间的火箭等载具.必须与发射平台或燃料补给台连接。 +tile.cargo_unloader.description=卸货器会从拥有储货空间的火箭等载具中取出所装物品和方块.必须与发射平台或燃料补给台连接。 +tile.cheese.description=奶酪块由月球的奶酪制成,可放置并食用。 +tile.cheese.name=奶酪块 +tile.circuit_fabricator.description=元件制造台会将基础材料加工为硅晶圆,用于制作先进机器。 +tile.coal_generator.description=燃煤发电机燃烧煤炭(块)来收集能量。这是最简单也是最低效的能量收集途径。 +tile.collector.description=氧气收集器会从周围的树叶中收集氧气并存储起来。 +tile.collector.name=氧气收集器 +tile.compressor.description=压缩机将锭压缩成对应的致密板.它是星系最重要的机器! +tile.compressor_electric.description=电动压缩机将锭压缩成对应的致密板,且每次可以生产两份成品,因而比前版要高效。 +tile.compressor_advanced.description=效率更高的电动压缩机,能快速地将金属锭压缩成对应的致密物品。 +tile.concealed_detector.name=玩家侦测仪 +tile.concealed_redstone.name=隐形红石线 +tile.concealed_repeater.name=隐形红石中继器 +tile.crude_oil.name=石油 +tile.crude_oil_moving.name=石油 +tile.crude_oil_still.name=石油 +tile.deconstructor.description=解构机能够拆卸废弃的火箭等物品并回收材料。 +tile.dishbase.description=通讯雷达可以追踪空间站位置并接收来自遥远空间站的信号。 +tile.dishbase.name=通讯雷达 +tile.distributor.description=氧气释放机利用内部的储气罐,以自身为中心释放一个氧气泡,气泡内可以自由呼吸。 +tile.distributor.name=氧气释放机 +tile.dummyblock.cryogenic_chamber.name=冬眠舱 +tile.dummyblock.launch_pad.name=火箭发射平台 +tile.dummyblock.nasa_workbench.name=CNSA工程台 +tile.dummyblock.solar.name=太阳能板 +tile.dummyblock.space_station_base.name=空间站基板 +tile.electric_furnace_tier1.description=电炉冶炼物品比熔炉更快。 +tile.electric_furnace_tier2.description=电弧炉不仅拥有更高的速度,还能增产各类矿物! +tile.emergency_box.description=安置于星球首次登陆点,内含一套太空应急设备,还能驱赶敌对生物。 +tile.emergency_box.filled.name=太空应急栓(满) +tile.emergency_box.name=太空应急栓 +tile.enclosed.aluminum_wire.name=气密铝线 +tile.enclosed.copper_cable.name=气密铜质导线 +tile.enclosed.description=空气无法通过气密方块,常用作空间站墙壁等。 +tile.enclosed.fluid_pipe.name=气密流体管道 +tile.enclosed.glass_fibre_cable.name=气密玻璃纤维线缆 +tile.enclosed.gold_cable.name=气密金质导线 +tile.enclosed.heavy_aluminum_wire.name=气密重质铝线 +tile.enclosed.hv_cable.name=气密高压导线 +tile.enclosed.lv_cable.name=气密锡质导线 +tile.enclosed.me_cable.name=气密ME线缆 +tile.enclosed.pipe_fluids_cobblestone.name=气密圆石流体管道 +tile.enclosed.pipe_fluids_stone.name=气密石头流体管道 +tile.enclosed.pipe_items_cobblestone.name=气密圆石物品管道 +tile.enclosed.pipe_items_stone.name=气密石质物品管道 +tile.enclosed.pipe_power_gold.name=气密金质能量管道 +tile.enclosed.pipe_power_stone.name=气密石质能量管道 +tile.energy_storage_module_tier1.description=储能模块能够存储大量电力以备使用。 +tile.energy_storage_module_tier2.description=储能簇能够存储大量电力以备使用,且储量更大、功率更高。 +tile.fallen_meteor.description=陨石在许多大气层稀薄的星球都能发现,破坏后掉落原生陨铁。 +tile.fallen_meteor.name=陨石 +tile.fluid_pipe.description=流体管道能够从源头将液体和气体传输至目标,使用标准扳手可以改变其模式。 +tile.fluid_pipe.name=流体管道 +tile.fluid_pipe_pull.description=流体管道能够从源头将液体和气体传输至目标,使用标准扳手可以改变其模式。 +tile.fluid_pipe_pull.name=流体管道接口 +tile.fluid_tank.description=流体罐能够存储液体和气体以备使用。 +tile.fluid_tank.name=流体罐 +tile.fuel.name=燃油 +tile.fuel_block.name=燃油 +tile.fuel_loader.description=燃料装载机可以将燃油注入相连平台上的火箭等载具中。 +tile.fuel_loader.name=燃料装载机 +tile.glowstone_torch.description=萤石火把可以在无氧条件下提供照明。 +tile.glowstone_torch.name=萤石火把 +tile.grating.name=格栅 +tile.landing_pad.buggy_fueler.name=星球车补给台 +tile.landing_pad.cargo_pad.name=货运火箭平台 +tile.landing_pad.description=将发射平台摆成3×3的形状,便可以摆上火箭,并连接燃料装载机,装货器,卸货器和发射控制器。 +tile.landing_pad.landing_pad.name=火箭发射平台 +tile.landing_pad_full.name=火箭发射平台 +tile.machine.0.name=燃煤发电机 +tile.machine.1.name=储能模块 +tile.machine.2.name=电炉 +tile.machine.3.name=压缩机 +tile.machine.7.name=电弧炉 +tile.machine.8.name=储能簇 +tile.machine2.4.name=电动压缩机 +tile.machine2.5.name=元件制造台 +tile.machine2.6.name=储氧模块 +tile.machine2.10.name=解构机 +tile.machine3.9.name=染色器 +tile.machine4.11.name=高级压缩机 +tile.magnetic_table.name=磁力合成台 +tile.magnetic_table.description=磁力合成台中的合成材料不会爆满地,它们会被保存起来! 点击shift可以快捷导入物品.利用漏斗输入输出物品, 它将尝试自动执行上一个合成。 +tile.moon_stairs_brick.name=月球地牢砖楼梯 +tile.moon_stairs_stone.name=月岩楼梯 +tile.ore_copper.name=铜矿石 +tile.ore_tin.name=锡矿石 +tile.oxygen_compressor.0.name=氧气压缩机 +tile.oxygen_compressor.1.name=氧气解压机 +tile.oxygen_compressor.description=氧气压缩机会将内存氧气充入氧气罐中。 +tile.oxygen_decompressor.description=氧气解压机会从氧气罐中提取氧气并存储。 +tile.oxygen_detector.description=氧气侦测仪会在侦测到氧气时发出红石信号。 +tile.oxygen_detector.name=氧气侦测仪 +tile.oxygen_storage_module.description=储氧模块储存大量氧气以备使用。 +tile.painter.description=利用任意有色方块或染料,便可以给真空玻璃、照明面板等可染色方块涂上鲜艳的色彩! +tile.panel_lighting.description=照明面板在太空中提供照明,可以使用扳手旋转,拿在手上潜行右击一般方块可以改变其外观。 +tile.panel_lighting_0.name=照明面板(方形) +tile.panel_lighting_1.name=照明面板(聚光) +tile.panel_lighting_2.name=照明面板(线性) +tile.panel_lighting_3.name=照明面板(暗色) +tile.panel_lighting_4.name=照明面板(阴暗) +tile.parachest.description=伞降箱会在登陆某行星(如地球)或卫星时从天而降。包含了之前发射的火箭、燃料和货物。 +tile.parachest.name=伞降箱 +tile.platform.description=完整的液压平台由4个该种方块组成,能将玩家抬升(跳跃键)或下降(潜行键)至相邻的平台。 +tile.platform.name=液压平台 +tile.refinery.description=燃油精炼机消耗能量将石油精炼成火箭等载具使用的燃油。 +tile.refinery.name=燃油精炼机 +tile.compact_workbench.name=紧凑型CNSA工程台 +tile.compact_workbench.description=CNSA工程台的紧凑型变体。 +tile.rocket_workbench.name=CNSA工程台 +tile.rocket_workbench.description=CNSA工程台用于制造高级部件和载具。可添加新发现的设计图。 +tile.sapling2.birch.name=白桦树苗 +tile.sapling2.jungle.name=丛林树苗 +tile.sapling2.oak.name=橡木树苗 +tile.sapling2.spruce.name=云杉树苗 +tile.sealer.description=氧气供给机会检测所处空间是否密封,并释放可呼吸空气充满密封空间。 +tile.sealer.name=氧气供给机 +tile.slab_gc_half.moon_bricks_slab.name=月球地牢砖台阶 +tile.slab_gc_half.moon_slab.name=月岩台阶 +tile.slab_gc_half.tin_slab_1.name=锡饰台阶 +tile.slab_gc_half.tin_slab_2.name=锡饰台阶 +tile.solar.advanced_solar.name=高级太阳能板 +tile.solar.basic_solar.name=基础太阳能板 +tile.solar_adv.description=高级太阳能板利用阳光产生电能以供使用。能够自动旋转以维持最高的产能效率。 +tile.solar_basic.description=基础太阳能板利用阳光产生电能以供使用。无法旋转,在正午产能效率最高。 +tile.space_glass.description=真空密封玻璃为太空基地而生。可以使用周围的染色器喷涂任意颜色的边框! +tile.space_glass.clear.description=澄澈玻璃可以用于欣赏太空美景,也可以提供清晰的水下视野。 +tile.space_glass.strong.description=由高透明度铝材制造的坚硬抗爆玻璃。 +tile.space_glass_clear.name=澄澈真空玻璃 +tile.space_glass_vanilla.name=真空玻璃 +tile.space_glass_strong.name=硬化真空玻璃 +tile.space_station_base.name=空间站登入点 +tile.spin_thruster.description=旋转推进器推动空间站旋转并产生类似重力的效果。 +tile.spin_thruster.name=旋转推进器 +tile.telemetry.description=遥感装置会从与其建立连接的火箭、玩家、怪物中收集数据。最好放置于显示屏附近.可使用频率模块来建立连接。 +tile.telemetry.name=遥感装置 +tile.tin_stairs_1.name=锡饰楼梯 +tile.tin_stairs_2.name=锡饰楼梯 +tile.treasure_chest.description=一阶珍宝箱在月球地牢生成,打败最终boss获取钥匙以打开。 +tile.treasure_chest.name=一阶珍宝箱 +tile.unlit_torch.name=阴燃火把 +tile.unlit_torch_stone.name=阴燃石火把 +tile.unlit_torch_lit.name=火把 +tile.unlit_torch_stone_lit.name=石火把 +tile.view_screen.description=显示屏是太空基地用触摸屏。右击改变其显示的信息。 +tile.view_screen.name=显示屏 +tile.wall_gc.moon.name=月岩墙 +tile.wall_gc.moon_bricks.name=月球地牢砖墙 +tile.wall_gc.tin.name=锡饰墙 + +advancement.galacticraft.root.title=星系 +advancement.galacticraft.root.description=探索月球……直到星河的彼方! +advancement.galacticraft.coal_generator.title=煤炭能源 +advancement.galacticraft.coal_generator.description=合成燃煤发电机。 +advancement.galacticraft.circuit_fabricator.title=精工制造 +advancement.galacticraft.circuit_fabricator.description=合成元件制造台以制造晶圆。 +advancement.galacticraft.basic_wafer.title=美味的威化饼 +advancement.galacticraft.basic_wafer.description=制造基础晶圆(请别把它当威化饼吃了)。 +advancement.galacticraft.advanced_wafer.title=表面金黄 +advancement.galacticraft.advanced_wafer.description=制造高级晶圆(说了不是烤焦的威化饼了)。 +advancement.galacticraft.compressor.title=压缩紧实 +advancement.galacticraft.compressor.description=合成压缩机。 +advancement.galacticraft.solar.title=免费能源 +advancement.galacticraft.solar.description=合成基础太阳能板。 +advancement.galacticraft.advanced_solar.title=又快又高效 +advancement.galacticraft.advanced_solar.description=合成高级太阳能板。 +advancement.galacticraft.electric_compressor.title=电气化升级 +advancement.galacticraft.electric_compressor.description=合成电动压缩机。 +advancement.galacticraft.oil.title=黏糊糊的玩意 +advancement.galacticraft.oil.description=掉进石油里。 +advancement.galacticraft.refiery.title=是时候精炼一下了! +advancement.galacticraft.refiery.description=合成燃油精炼机。 +advancement.galacticraft.rocket_fuel.title=火箭燃料 +advancement.galacticraft.rocket_fuel.description=启动燃油精炼机精炼石油。 +advancement.galacticraft.oxygen_collector.title=不含氧气 +advancement.galacticraft.oxygen_collector.description=合成氧气收集器。 +advancement.galacticraft.oxygen_compressor.title=连空气一起压缩 +advancement.galacticraft.oxygen_compressor.description=合成氧气压缩机。 +advancement.galacticraft.fill_tank.title=空转二连 +advancement.galacticraft.fill_tank.description=灌满一个氧气罐。 +advancement.galacticraft.fill_all_tanks.title=囤积氧气 +advancement.galacticraft.fill_all_tanks.description=灌满所有种类的氧气储罐。 +advancement.galacticraft.all_oxygen_gear.title=全副武装 +advancement.galacticraft.all_oxygen_gear.description=制作在太空中呼吸所需的全套装备。 +advancement.galacticraft.rocket_workbench.title=太空工程师 +advancement.galacticraft.rocket_workbench.description=制造CNSA工程台。 +advancement.galacticraft.rocket_t1.title=我们有火箭了! +advancement.galacticraft.rocket_t1.description=将准备好的材料组装成火箭。 +advancement.galacticraft.fuel_loader.title=把她填满! +advancement.galacticraft.fuel_loader.description=制造燃料装载机。 +advancement.galacticraft.launch_rocket.title=我们上天了! +advancement.galacticraft.launch_rocket.description=首次发射火箭。 +advancement.galacticraft.moon.title=月球! +advancement.galacticraft.moon.description=在月球上降落。 +advancement.galacticraft.create_space_station.title=空间站 +advancement.galacticraft.create_space_station.description=创建你自己的空间站!。 +advancement.galacticraft.spin_thruster.title=转得我头晕眼花 +advancement.galacticraft.spin_thruster.description=制造旋转推进器。 +advancement.galacticraft.moon_dungeon.title=比凋灵更坏 +advancement.galacticraft.moon_dungeon.description=在月球地牢中遭遇太空骷髅王。 +advancement.galacticraft.dungeon_key_moon.title=我有钥匙 +advancement.galacticraft.dungeon_key_moon.description=干掉地牢中的BOSS,拿走钥匙。 +advancement.galacticraft.moon_buggy_schematic.title=花里胡哨的设计图 +advancement.galacticraft.moon_buggy_schematic.description=获取§oCNSA工程设计图(星球车)。 +advancement.galacticraft.moon_buggy.title=星球车 +advancement.galacticraft.moon_buggy.description=把部件组装成星球车。 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_tw.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_tw.lang new file mode 100644 index 00000000..5b87cb93 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_tw.lang @@ -0,0 +1,762 @@ +checklist.create_grapple.key=製作抓鉤 +checklist.equip_oxygen_suit.key=裝備氧氣供給裝置 +checklist.equip_parachute.key=裝備降落傘 +command.gcastrominer.count=玩家%s的阿斯抽挖掘機數量有%s +commands.emergencykit=%s被給予一個應急工具包! +commands.dimensionteleport=%s被傳送到%s附近。 +commands.dimensiontp.too_many=太多指令參數!用法:%s +commands.gcenergyunits.invalid_units=有無效單元在/GCEnergyUnits指令內。用法:%s +commands.gcenergyunits.no_units=這個單元需要被指定!用法:%s +commands.gchouston.confirm.1=這是任務控制,請再說一次? +commands.gchouston.confirm.2=(再次輸入/gchouston確認以放棄任務。) +commands.gchouston.fail=指令/gchouston只能在太空(或創造模式)下使用。 +commands.gchouston.help.1=額,休斯頓,我們遇到了問題.... +commands.gchouston.help.2=(輸入/gchouston以放棄任務並回家。) +commands.gchouston.noop=對其他玩家使用指令/gchouston僅適用於操作員。 +commands.gchouston.success=好的,準備,%s,傳送到主世界家的位置。 +commands.joinrace.no_team=隊伍需要被指定!用法:%s +commands.ssinvite.not_found=無法於太空站裏找到你的名字,你要先去那裏一趟! +commands.ssinvite.wrong_usage=指令參數不足!用法:%s +commands.ssnewowner.wrong_usage=無法辨認太空站ID# - 它有存在過嗎?用法:%s +commands.ssuninvite.no_player=無法在你的太空站清單中找到叫做%s的玩家! +container.cargoloader.name=貨物裝載器 +container.cargounloader.name=貨物卸載器 +container.fuelloader.name=燃料注入器 +container.lander.name=登陸艙 +container.magneticcrafting.name=磁力合成臺 +container.oxygencollector.name=氧氣收集器 +container.oxygencompressor.name=氧氣壓縮機 +container.oxygendecompressor.name=氧氣解壓縮器 +container.oxygendistributor.name=氧氣分配器 +container.oxygensealer.name=氧氣密封器 +container.parachest.name=傘降箱 +container.refinery.name=精煉器 +container.solaradvanced.name=高級太陽能板 +container.solarbasic.name=基礎太陽能板 +container.spaceship.name=一階火箭 +container.treasurechest.name=珍品箱 +death.attack.meteor_chunk=%1$s被隕石碎片擊穿! +death.attack.oxygen_suffocation=%1$s因氧氣消耗殆盡而死! +death.attack.spaceship_crash=%1$s的火箭墜毀於地面。噢。 +death.attack.sulphuric_acid=%1$s被硫酸溶化! +death.attack.thermal=%1$s忘記了高溫保護 +dimension.moon.name=月球 +dimension.overworld.name=主世界(地球) +dimension.sun.name=太陽 +entity.alien_villager.name=外星村民 +entity.buggy.name=星球車 +entity.celestial_screen.name=天體屏幕 +entity.evolved_creeper.name=苦力怕(進化體) +entity.evolved_skeleton.name=骷髏(進化體) +entity.evolved_skeleton_boss.name=骷髏王(進化體) +entity.evolved_spider.name=蜘蛛(進化體) +entity.evolved_zombie.name=殭屍(進化體) +ntity.evolved_enderman.name=終界使者(進化體) +entity.evolved_witch.name=女巫(進化體) +entity.flag.name=旗幟 +entity.gcflag.name=旗幟 +entity.gravity_arrow.name=箭 +entity.lander.name=登陸艙 +entity.meteor.name=隕石 +entity.meteor_chunk.name=隕石塊 +entity.oxygen_bubble.name=氧氣泡沫 +entity.para_chest.name=傘降箱 +entity.rocket_t1.name=一階火箭 +galaxy.milky_way=銀河系 +gc.configgui.allow_liquids_grating=允許液體流入格柵 +gc.configgui.alternate_canister_recipe=儲氣罐的其它合成配方 +gc.configgui.asteroids_flags=挑戰模式旗幟 +gc.configgui.asteroids_start=挑戰模式(從小行星開始) +gc.configgui.biome_id_base=GC生物群系ID基數 +gc.configgui.detectable_i_ds=可檢測ID +gc.configgui.disable_biome_type_registrations=禁止生物群系種類註冊 +gc.configgui.disable_cheese_moon=禁止月球奶酪礦生成 +gc.configgui.disable_copper_moon=禁止月球銅礦生成 +gc.configgui.disable_lander=在月球上禁用登陸艙,改為使用降落傘 +gc.configgui.disable_moon_village_gen=禁止月球村莊生成 +gc.configgui.disable_ore_dict_space_metals=必須在合成表中使用GC自身的太空金屬 +gc.configgui.disable_sapphire_moon=禁止月球藍月寶石礦生成 +gc.configgui.disable_space_station_creation=禁止創建太空站 +gc.configgui.disable_spaceship_grief=禁止火箭爆炸 +gc.configgui.disable_spaceship_particles=關閉火箭粒子效果 +gc.configgui.disable_tin_moon=禁止月球錫礦生成 +gc.configgui.disable_update_check=禁用更新檢查 +gc.configgui.disable_vehicle_camera_changes=Vivecraft:禁用第三人稱和縮放 +gc.configgui.dungeon_boss_health_mod=調整地牢Boss血量 +gc.configgui.enable_aluminum_ore_gen=主世界鋁礦生成 +gc.configgui.enable_copper_ore_gen=主世界銅礦生成 +gc.configgui.enable_debug=在控制臺裏顯示除錯信息 +gc.configgui.enable_other_mods_features=允許所有其它模組的世界生成 +gc.configgui.enable_retrogen_oil=主世界地底石油生成 +gc.configgui.enable_sealer_edge_checks=密封邊緣檢測 +gc.configgui.enable_silicon_ore_gen=主世界矽礦生成 +gc.configgui.enable_space_race_manager_popup=太空競賽管理器彈出窗口 +gc.configgui.enable_thaum_craft_nodes=允許ThaumCraft靈氣節點生成與星球上 +gc.configgui.enable_tin_ore_gen=主世界錫礦生成 +gc.configgui.external_oil_gen=主世界地表石油生成 +gc.configgui.force_overworld_respawn=強制在主世界重生 +gc.configgui.hard_mode=困難科技模式 +gc.configgui.id_achiev_base=基礎成就ID +gc.configgui.id_dimension_moon=月球維度ID +gc.configgui.id_dimension_overworld=主世界維度 +gc.configgui.id_dimension_overworld_orbit=太空站維度ID +gc.configgui.id_dimension_overworld_orbit_static=太空站靜態維度ID +gc.configgui.id_schematic_add_schematic=“添加設計圖”設計圖ID +gc.configgui.id_schematic_moon_buggy=探月車設計圖ID +gc.configgui.id_schematic_rocket_t1=一階火箭設計圖ID +gc.configgui.key_override_fuel_level=設置快捷鍵:火箭燃料表 +gc.configgui.key_override_toggle_adv_goggles=設置快捷鍵:高級護目鏡 +gc.configgui.map_scroll_invert=反向滾動地圖 +gc.configgui.map_scroll_sensitivity=鼠標滾動地圖信息顯示 +gc.configgui.meteor_block_damage=隕石破壞地形啟用 +gc.configgui.meteor_spawn_mod=調整隕石生成 +gc.configgui.more_stars=顯示更多天體 +gc.configgui.oil_gen_factor=石油生成係數 +gc.configgui.ore_dict_silicon=在其它模組裏矽礦的礦物詞典名稱 +gc.configgui.other_mod_ore_gen_i_ds=允許生成其它模組的礦物在星球上 +gc.configgui.override_capes=自動使用贊助披風 +gc.configgui.override_map=設置快捷鍵:星系地圖 +gc.configgui.oxygen_indicator_bottom=下移氧氣指示器 +gc.configgui.oxygen_indicator_left=左移氧氣指示器 +gc.configgui.planet_worldborders=登月點最大x、z值 +gc.configgui.quick_mode=快速遊戲(更簡單) +gc.configgui.rocket_disable_overworld_return=禁止主世界火箭返航 +gc.configgui.rocket_disabled_dimensions=禁用火箭維度 +gc.configgui.rocket_fuel_factor=火箭燃料係數 +gc.configgui.sealable_i_ds=可密封方塊 +gc.configgui.space_station_energy_scalar=調整太空站能量 +gc.configgui.space_stations_require_permission=太空站權限 +gc.configgui.static_loaded_dimensions=靜態加載維度 +gc.configgui.static_loaded_new_ss=靜態加載新的太空站? +gc.configgui.suffocation_cooldown=窒息冷卻時間 +gc.configgui.suffocation_damage=窒息傷害 +gc.configgui.title=Galacticraft核心配置 +gc.configgui.use_old_fuel_fluid_i_d=使用傳統的燃油註冊 +gc.configgui.use_old_oil_fluid_i_d=使用傳統的石油註冊 +gc.configgui.whitelist_co_f_h_core_gen=CoFHCore世界生成白名單 +gui.battery_slot.desc.0=電池槽,將電池放置於此 +gui.battery_slot.desc.1=或者使用相連接的能量源 +gui.bed_fail.message=呃,喔,如果我在睡覺的時候氧氣都沒了怎麼辦?我需要低溫倉在太空裏睡覺! +gui.buggy.accel.name=加速 +gui.buggy.decel.name=減速 +gui.buggy.inv.name=物品欄/燃料 +gui.buggy.storage_space=存儲空間 +gui.buggy.turn.name=左轉-右轉 +gui.button.back.name=返回 +gui.button.disable.name=關閉 +gui.button.disableseal.name=禁用密閉 +gui.button.enable.name=開啟 +gui.button.enableseal.name=密閉啟動 +gui.button.hide_dest.name=隱藏 +gui.button.loadfuel.name=加載燃料 +gui.button.loaditems.name=載入物品 +gui.button.next.name=下一個 +gui.button.paintapply.name=啟用塗層 +gui.button.paintmix.name=混合顏色 +gui.button.paintreset.name=重置顏色 +gui.button.refine.name=精煉 +gui.button.stoploading.name=停止載入 +gui.button.stoprefine.name=停止精煉 +gui.button.stopunloading.name=停止卸載 +gui.button.unhide_dest.name=取消隱藏 +gui.button.unloaditems.name=卸載物品 +gui.button.unlockschematic.name=解鎖設計圖 +gui.checkbox.horizontal.name=水平模式 +gui.checkbox.invert.name=反向選取 +gui.checkbox.player_name.name=玩家名字是 +gui.checkbox.player_within.name=玩家在里面 +gui.checkbox.redstone_signal.name=紅石信號開啟 +gui.chest.warning.wrongkey=我可能需要一個%s階的地牢鑰匙來解鎖這個! +gui.choose_planet.desc.moon=宜居#無氧氣#重力:18% +gui.choose_planet.desc.overworld=生機勃勃#宜居#重力:100% +gui.chooseplanet.alreadycreated1.name=空間站已經 +gui.chooseplanet.alreadycreated2.name=建立! +gui.chooseplanet.cannotcreate1.name=無法建立空間 +gui.chooseplanet.cannotcreate2.name=空間站在此! +gui.creative_only.desc=只有創造模式可用 +gui.display.nolink=無連接 +gui.docking_rocket.current_vel.name=當前速度 +gui.docking_rocket.distance_from.name=離目標距離 +gui.docking_rocket.target_vel.name=目標速度 +gui.docking_rocket.warning.name.0=按%s減速 +gui.docking_rocket.warning.name.1=按%s加速 +gui.dropbox.player_distance.name.0=1米 +gui.dropbox.player_distance.name.1=2米 +gui.dropbox.player_distance.name.2=5米 +gui.dropbox.player_distance.name.3=10米 +gui.electric_compressor.desc.0=進度 +gui.energy_storage.desc.0=能量存儲 +gui.energy_storage.desc.1=能量 +gui.flag.already_placed=旗幟已經放置於此! +gui.frequency_module.desc.0=可以收到微弱的聲波 +gui.frequency_module.desc.1=與遠距離信號 +gui.frequencymodule.warning0=我可能需要一個 +gui.frequencymodule.warning1=如果我想在這清楚的聽到聲音。 +gui.fuel_output.desc.0=將空的液體罐放置於 +gui.fuel_output.desc.1=這個槽中,可以從燃料箱里 +gui.fuel_output.desc.2=抽取液體灌滿它們 +gui.fuel_tank.desc.0=燃料箱。需要 +gui.fuel_tank.desc.1=燃料裝載器將燃料 +gui.fuel_tank.desc.2=裝入燃料箱,需要用 +gui.fuel_tank.desc.3=燃料罐裝填滿 +gui.fuel_tank.desc.4=燃料箱 +gui.infinite_item.desc=無限 +gui.lander.velocity=登陸速度 +gui.lander.velocityu=米/秒 +gui.lander.warning2=按下“ +gui.lander.warning3=”以減速! +gui.max_output.desc=最大輸出 +gui.message.addnewsch.name=新增設計圖 +gui.message.apply.name=應用 +gui.message.assign_name.name=命名 +gui.message.atmosphere.name=大氣層 +gui.message.back.name=後退 +gui.message.breed.name=繁殖 +gui.message.bubble_visible.name=可看見氣泡 +gui.message.can_create_space_station.name=這裏可以創建一個太空站! +gui.message.cancel.name=取消 +gui.message.cannot_create_space_station.name=這裏不能創建太空站! +gui.message.catalog.name=目錄 +gui.message.click_again.0.name=再次點擊放大(賞月或是觀測衛星) +gui.message.click_again.1.name=再次點擊放大(賞月) +gui.message.click_again.2.name=再次點擊放大(觀測衛星) +gui.message.click_again.3.name=再次點擊放大 +gui.message.clicklink=點擊查看Galacticraft維基百科 +gui.message.create_ss.name=創建 +gui.message.daynightcycle.name=日夜循環周期 +gui.message.energy=能量 +gui.message.environment.name=環境促進 +gui.message.exit.name=離開 +gui.message.fuel.name=燃料 +gui.message.full.name=滿 +gui.message.generating.name=生成中 +gui.message.grow.name=生長 +gui.message.heal.name=治療 +gui.message.help1=尋找Galacticraft的幫助頁面 +gui.message.help1a=無論在什麼時候,如果希望再次看見這條信息,請輸入 +gui.message.help2=尋找太空計劃指導 +gui.message.help3=尋找石油的資料 +gui.message.in.name=輸入 +gui.message.launch.name=發射 +gui.message.max_energy=最大能量 +gui.message.meansurfacetemp.name=平均表面溫度 +gui.message.moon.atmosphere.0.name=無 +gui.message.moon.daynightcycle.0.name=29.5個地球日 +gui.message.moon.meansurfacetemp.0.name=(光亮面)253度 +gui.message.moon.meansurfacetemp.1.name=(黑暗面)-153度 +gui.message.moon.surfacecomposition.0.name=玄武巖與 +gui.message.moon.surfacecomposition.1.name=奶酪的痕跡 +gui.message.moon.surfacegravity.0.name=0.1654克 +gui.message.moon.surfacegravity.1.name=(地球的18%) +gui.message.of.name=of +gui.message.oil.name=石油 +gui.message.out.name=輸出 +gui.message.overworld.atmosphere.0.name=氮氣與氧氣 +gui.message.overworld.atmosphere.1.name=適合生物生存 +gui.message.overworld.daynightcycle.0.name=1個地球日 +gui.message.overworld.meansurfacetemp.0.name=14度 +gui.message.overworld.surfacecomposition.0.name=石頭,泥土,與 +gui.message.overworld.surfacecomposition.1.name=礫石 +gui.message.overworld.surfacegravity.0.name=1.0克 +gui.message.overworld.surfacegravity.1.name=(地球的100%) +gui.message.prelaunch=發射前檢查列表 +gui.message.rename.name=重新命名 +gui.message.select_ss.name=選擇一個太空站 +gui.message.ss_owner.name=擁有者: +gui.message.status.name=狀態 +gui.message.strengthen.name=強化 +gui.message.surfacecomposition.name=表面成分 +gui.message.surfacegravity.name=表面重力 +gui.message.thermal_status.name=温度控制器 +gui.message.tier.name=%d階 +gui.message.unnamed.name=未命名 +gui.missing_core.name.0=未在Mods文件夾內找到MicdoodleCore +gui.missing_core.name.1=星系模組載入失敗 +gui.missing_core.name.2=關閉Minecraft然後安裝MicdoodleCore +gui.missing_core.name.3=點擊這里打開下載頁面 +gui.new_schematic.slot.desc.0=新設計圖槽。你可以 +gui.new_schematic.slot.desc.1=通過探索行星和月球 +gui.new_schematic.slot.desc.2=的地牢來獲得新的設 +gui.new_schematic.slot.desc.3=計圖 +gui.oil_tank.desc.0=石油箱,需要用 +gui.oil_tank.desc.1=油罐裝填滿 +gui.oxygen.warning=氧氣裝置配置無效! +gui.oxygen_compressor.slot.desc.0=氧氣槽,在這裏放置氧氣罐或油箱 +gui.oxygen_compressor.slot.desc.1=或是直接連接供氧設備 +gui.oxygen_decompressor.slot.desc.0=壓縮機罐槽,放置氧氣罐 +gui.oxygen_decompressor.slot.desc.1=這裏填充可呼吸氣氧。 +gui.oxygen_slot.desc.0=氧氣槽,在這裏放置氧氣罐或油箱 +gui.oxygen_slot.desc.1=或是直接連接供氧設備 +gui.oxygen_storage.desc.0=氧氣存儲 +gui.oxygen_storage.desc.1=氧氣 +gui.oxygen_use.desc=氧氣使用 +gui.per_second=/秒 +gui.player.bpm=心跳率 +gui.player.food=食物 +gui.player.health=生命值 +gui.player.ouch=嗷!!!! +gui.receiver.cannot_attach=這里無法放置接收器! +gui.requires_controller.desc=需要發射控制器 +gui.rocket.countdown=倒計時 +gui.rocket.height=高度 +gui.rocket.inv.name=物品欄/燃料 +gui.rocket.launch.name=發射 +gui.rocket.launched=已發射 +gui.rocket.on_launchpad=發射平臺就绪 +gui.rocket.speed=速度 +gui.rocket.turn.name=左-右轉 +gui.rocket.updown.name=上-下轉 +gui.rocket.warning.fuelinsufficient=剩餘燃料無法支持一次安全的常規發射! +gui.rocket.warning.launchcontroller=準備發射時發射取消。檢查發射控制器! +gui.rocket.warning.nofuel=我需要先裝入一些火箭燃料! +gui.rocket.warning.nogyroscope=神秘的力量令陀螺儀瘋狂旋轉! +gui.rocket.warning.noparachute=我沒有降落傘!如果你再次按發射,就沒法回去了! +gui.rocket_type.0=存儲空間:18 +gui.rocket_type.1=存儲空間:36 +gui.rocket_type.2=存儲空間:56 +gui.rocket_type.3=裝入燃料前 +gui.seconds=秒 +gui.sensor.advanced=高級模式 +gui.sensor.advancedoff=關 +gui.sensor.advancedon=開 +gui.show_bubble.desc.0=顯示氣泡 +gui.skeleton_boss.message=Boss消失,戰鬥時不要離開這個Boss的房間!重新進入這個房間會重新生成Boss。 +gui.space_race.chat.add_success=%s已參加太空競賽! +gui.space_race.chat.already_part=你已經是這個太空競賽的一員! +gui.space_race.chat.invite_received=從%s收到太空競賽隊伍的邀請。 +gui.space_race.chat.not_found=未能找到叫做%s的玩家 +gui.space_race.chat.remove_success=%s已從太空競賽中移除。 +gui.space_race.chat.to_join=參加%s用指令%s +gui.space_race.coming_soon=即將到來 +gui.space_race.create.add_players.name=添加玩家 +gui.space_race.create.back.name=後退 +gui.space_race.create.brush_radius.name=畫筆半徑 +gui.space_race.create.brush_size.name=畫筆大小 +gui.space_race.create.change_color.name.0=改變 +gui.space_race.create.change_color.name.1=隊伍 +gui.space_race.create.change_color.name.2=顏色 +gui.space_race.create.close.name=關閉 +gui.space_race.create.customize.name=自定義旗幟 +gui.space_race.create.eraser_radius.name=橡皮半徑 +gui.space_race.create.eraser_size.name=橡皮大小 +gui.space_race.create.global_stats.name=查看全球資料 +gui.space_race.create.invite_player.name=邀請玩家 +gui.space_race.create.player_radius.name=注意:玩家必須在范圍內!(25格) +gui.space_race.create.rem_players.name=移除玩家 +gui.space_race.create.remove.name=移除 +gui.space_race.create.remove_player.name=移除玩家 +gui.space_race.create.rename.name=重命名隊伍 +gui.space_race.create.send_invite.name=發送邀請 +gui.space_race.create.server_stats.name=查看服務器資料 +gui.space_race.create.title.name=太空競賽管理器 +gui.space_race.create.title.name.0=太空競賽 +gui.space_race.create.title.name.1=管理器 +gui.space_race.join.member_count.name=%d成員 +gui.space_race.join.name=加入 +gui.space_race.join.owner.name=擁有者 +gui.space_race.join.title.name=加入太空競賽 +gui.space_race.unnamed=未命名隊伍 +gui.spacestation.added=你已經加入了%s的太空站授權玩家清單! +gui.spacestation.addsuccess=成功增加%s到太空站清單! +gui.spacestation.allow_all_false=你的太空站現在不再開放給所有玩家! +gui.spacestation.allow_all_true=你的太空站現在開放給所有玩家!(用/ssinvite -all以取消動作。) +gui.spacestation.changesuccess=已從舊擁有者%s改變至新擁有者%s。 +gui.spacestation.playername=<玩家名字> +gui.spacestation.removesuccess=成功從太空站清單移除%s +gui.spacestation.to_allow_entry=可運行其他玩家進入這個空間站! +gui.spacestation.type_command=輸入 +gui.status.active.name=運行的 +gui.status.air_lock_closed.name=氣閘已關閉 +gui.status.air_lock_open.name=氣閘開啟 +gui.status.blockedfully.name=陽光粒子效果不可視 +gui.status.blockedpartial.name=陽光粒子效果可視 +gui.status.check_pending.name=檢查待定中 +gui.status.check_starting.name=檢查開始中 +gui.status.checking_seal.name=正在檢查密封 +gui.status.collecting.name=正在收集 +gui.status.collectingenergy.name=收集能量 +gui.status.compressing.name=正在壓縮 +gui.status.disabled.name=禁用的 +gui.status.fulltank.name=氧氣罐滿 +gui.status.generating.name=正在產生 +gui.status.hull_heat.name=船體熱量 +gui.status.idle.name=空閒 +gui.status.missingleaves.name=樹葉不足 +gui.status.missingoxygen.name=氧氣不足 +gui.status.missingpower.name=能量不足 +gui.status.missingpower.short.name=無能量 +gui.status.missingtank.name=沒有可用的氧氣罐 +gui.status.nofuel.name=無燃料可用! +gui.status.noinvtarget.name=目標無物品欄! +gui.status.noitems.name=無物品可加載! +gui.status.nooil.name=無石油 +gui.status.not_available.name=不適用 +gui.status.not_generating.name=未產生 +gui.status.notargetload.name=無效加載目標! +gui.status.notargetunload.name=無效卸載目標! +gui.status.off.name=關閉 +gui.status.on.name=開啟 +gui.status.raining.name=下雨中 +gui.status.ready.name=準備就緒 +gui.status.refining.name=精煉中 +gui.status.running.name=啟用 +gui.status.sealed.name=密封的 +gui.status.sealerblocked.name=輸出口堵塞! +gui.status.sun_visible.name=可看見太陽 +gui.status.tank_empty.name=氧氣筒已空 +gui.status.targetempty.name=目標載具已空! +gui.status.targetfull.name=目標載具已滿! +gui.status.unknown.name=未知 +gui.status.unsealed.name=未密封的 +gui.tank.oxygen_remaining=氧氣剩餘 +gui.telemetry_fail.message=首先我需要用一個頻率模塊跟踪一個實物!(或者試試戴上它!) +gui.telemetry_fail_no_frequency_module.message=我大概需要一個頻率模塊在我的手中讓這起作用! +gui.telemetry_fail_wearing_it.message=我需要卸下我的頻率模塊如果我想鏈接這個遙測單元! +gui.telemetry_succeed.message=遙測鏈接完畢。 +gui.thermal_slot.desc.0=熱附件槽,這裏放置“環境 +gui.thermal_slot.desc.1=溫度控制器”(可選的) +gui.thermal_slot.desc.2=提示:用更多能量! +gui.title.air_lock.name=%s的氣閘控制器 +gui.tracking.message=已啟用跟踪。我現在只要右擊這個遙測單元就可以完成鏈接。 +gui.village.warning.no_freq_mod=我需要配備一个頻率模塊以與他們交流! +gui.warning=警告! +gui.warning.invalid_thermal=無效熱量保護! +gui.warning.noroom=空間不足! +item.air_fan.name=排氣扇 +item.air_vent.name=排氣孔 +item.basic_item.ambient_thermal_controller.name=環境溫度控制器 +item.basic_item.canned_food.name=罐裝食物 +item.basic_item.compressed_aluminum.name=緻密鋁 +item.basic_item.compressed_bronze.name=緻密青銅 +item.basic_item.compressed_copper.name=緻密銅 +item.basic_item.compressed_iron.name=緻密鐵 +item.basic_item.compressed_steel.name=緻密鋼 +item.basic_item.compressed_tin.name=緻密錫 +item.basic_item.dehydrated_apple.name=脫水蘋果 +item.basic_item.dehydrated_carrot.name=脫水胡蘿蔔 +item.basic_item.dehydrated_melon.name=脫水西瓜 +item.basic_item.dehydrated_potato.name=脫水馬鈴薯 +item.basic_item.frequency_module.name=頻率模塊 +item.basic_item.ingot_aluminum.name=鋁錠 +item.basic_item.ingot_bronze.name=青銅錠 +item.basic_item.ingot_copper.name=銅錠 +item.basic_item.ingot_steel.name=鋼錠 +item.basic_item.ingot_tin.name=錫錠 +item.basic_item.raw_silicon.name=生矽 +item.basic_item.solar_module_0.name=單體太陽能模塊 +item.basic_item.solar_module_1.name=全載太陽能模塊 +item.basic_item.wafer_advanced.name=高級晶圓 +item.basic_item.wafer_basic.name=基礎晶圓 +item.basic_item.wafer_solar.name=藍色太陽能晶圓 +item.battery.name=電池 +item.bucket_fuel.name=燃油桶 +item.bucket_oil.name=石油桶 +item.buggy.name=探月車 +item.buggymat.seat.name=探月車座椅 +item.buggymat.storage.name=探月車存儲箱 +item.buggymat.wheel.name=探月車車輪 +item.canister.copper.name=銅罐 +item.canister.tin.name=錫罐 +item.canvas.name=帆布 +item.cheese_block.name=奶酪塊 +item.cheese_curd.name=奶酪凝乳 +item.compressed_meteoric_iron.name=致密隕鐵 +item.dungeonfinder.name=地牢定位儀 +item.empty_liquid_canister.name=液體罐(空) +item.emergency_kit.description=右擊以裝備氧氣裝備和其他基本物品。警告:一次性! +item.emergency_kit.name=太空應急包 +item.engine.tier1booster.name=一階助推器 +item.engine.tier1engine.name=一階火箭引擎 +item.flag.name=旗幟 +item.food.cheese_slice.name=切片芝士 +item.food.burger_bun.name=漢堡麵包 +item.food.beef_patty_raw.name=碎牛肉(生) +item.food.beef_patty_cooked.name=牛肉餅(熟) +item.food.cheeseburger.desc=宇航員喜歡芝士漢堡!非常令人滿意的食物。 +item.food.cheeseburger.name=芝士漢堡 +item.food.canned_beef.name=罐裝牛肉 +item.fuel.name=火箭燃料 +item.fuel_canister.name=燃油罐(滿) +item.fuel_canister_partial.name=燃油罐(半滿) +item.heavy_plating.name=重型防護板 +item.hot_description.name=炙熱 +item.ic2compat.ore_crushed_alu.name=碎鋁礦 +item.ic2compat.ore_purified_alu.name=純淨的碎鋁礦 +item.ic2compat.dust_alu.name=鋁粉 +item.ic2compat.dust_small_titanium.name=細小的鈦粉堆 +item.infinite_battery.name=無限電池 +item.infinite_oxygen.name=無限供氧 +item.key.t1.name=一階地牢鑰匙 +item.lunar_sapphire.description=藍月寶石是和外星村民交易時使用的貨幣 +item.lunar_sapphire.name=藍月寶石 +item.meteor_chunk.name=可投擲流星碎片 +item.meteor_chunk_hot.name=可投擲流星碎片 +item.meteoric_iron_ingot.name=隕鐵錠 +item.meteoric_iron_raw.name=生隕鐵錠 +item.nose_cone.name=鼻錐 +item.oil_canister.name=石油罐(滿) +item.oil_canister_partial.name=石油罐(半滿) +item.oil_extractor.name=便攜取油器 +item.oxygen_concentrator.name=氧氣濃縮器 +item.oxygen_gear.name=供氧設備 +item.oxygen_mask.name=氧氣面罩 +item.oxygen_tank_heavy_empty.name=重型氧氣罐(空) +item.oxygen_tank_heavy_full.name=重型氧氣罐 +item.oxygen_tank_light_empty.name=輕型氧氣罐(空) +item.oxygen_tank_light_full.name=輕型氧氣罐 +item.oxygen_tank_med_empty.name=中型氧氣罐(空) +item.oxygen_tank_med_full.name=中型氧氣罐 +item.parachute_black.name=黑色降落傘 +item.parachute_blue.name=淺藍色降落傘 +item.parachute_brown.name=棕色降落傘 +item.parachute_darkblue.name=暗藍色降落傘 +item.parachute_darkgray.name=暗灰色降落傘 +item.parachute_darkgreen.name=暗綠色降落傘 +item.parachute_gray.name=淺灰色降落傘 +item.parachute_lime.name=黃綠色降落傘 +item.parachute_magenta.name=品紅色降落傘 +item.parachute_orange.name=橙色降落傘 +item.parachute_pink.name=粉色降落傘 +item.parachute_plain.name=降落傘 +item.parachute_purple.name=紫色降落傘 +item.parachute_red.name=紅色降落傘 +item.parachute_teal.name=青色降落傘 +item.parachute_yellow.name=黃色降落傘 +item.rocket_fins.name=火箭尾鰭 +item.rocket_t1.name=一階火箭 +item.schematic.name=NASA工程圖 +item.sensor_glasses.name=探測眼鏡 +item.sensor_lens.name=探測鏡片 +item.standard_wrench.name=標準扳手 +item.steel_axe.name=重型斧 +item.steel_boots.name=重型靴子 +item.steel_chestplate.name=重型胸甲 +item.steel_helmet.name=重型頭盔 +item.steel_hoe.name=重型鋤 +item.steel_leggings.name=重型護腿 +item.steel_pickaxe.name=重型鎬 +item.steel_pole.name=鋼管桿 +item.steel_shovel.name=重型鍬 +item.steel_sword.name=重型劍 +item.tier1.desc=一階 +item_desc.powerdraw.name=能量需求:%s/秒 +item_desc.shift.name=按住%s查看詳情 +item_group.galacticraft_blocks=星系——方塊 +item_group.galacticraft_items=星系——物品 +jei.arc_lamp.info=光線面對的方向非常明亮。為了達到最佳效果而放到高處!使用標準扳手旋轉。 +jei.electric_compressor.info=電動版的壓縮機,速度快兩倍!甚至使用二階能量功率會更快。漏斗可以填充或清空這台機器。 +jei.electric_compressor.appeng.info=對於使用AE2進行自動化,使用來自兩種不同模組的錠子來設置你的合成表。有關詳細資料,參見https://goo.gl/BwY15G。 +jei.fluid_pipe.info=運輸任何液體或氣體的管道。要將液體從儲罐中抽出,請用標準扳手點擊以轉換為“拉出模式”。\n管道在拉出模式時不能裝滿油箱或機器——因此,讓你的管道至少運行2格方塊長! +jei.fuel_loader.info=放置在火箭發射臺旁邊。給位於臺上的火箭加油。任何進入太空的旅程必不可少——包括你再次回家的旅程! +jei.magnetic_crafting.info=一個可以保存物品的合成台。可以接受漏斗中的物品來自動製作最後成功製作的合成表。 +jei.oxygen_collector.info=從世界空間或太空中收集可呼吸的氧氣混合物——從附近的綠葉或種植作物。\n將氧氣輸送到氧氣壓縮機的氧氣罐,或氧氣泡沫分配器、氧氣密封器。 +jei.oxygen_distributor.info=在空間創建玩家(和其他生物)可以呼吸的泡沫環境。用氧氣收集器或氧氣儲存模塊提供可呼吸的氧氣混合物。 +jei.oxygen_sealer.info=在你的空間基地用可呼吸的空氣填充一個房間。用氧氣收集器或氧氣儲存模塊提供可呼吸的氧氣混合物。房間的所有牆壁必須堅實。\n使用探測眼鏡查找洩漏點!\n一個氧氣封閉機的最大房間尺寸為10x10x8格方塊。為更大的房間使用多個氧氣封閉機! +jei.wrench.info=大多數Galacticraft機器都可以通過標準扳手右擊進行旋轉。\n大多數電機可以使用此按鈕和按住Shift單擊來更改其功率和其他輸入和輸出端。 +keybind.map.name=星系地圖 +keybind.sensortoggle.name=切換傳感器護目鏡模式 +keybind.spaceshipinv.name=打開飛船倉庫 +keybind.vehiclebackward.name=載具後退鍵 +keybind.vehicledown.name=載具下降鍵 +keybind.vehicleforward.name=載具前進鍵 +keybind.vehicleleft.name=載具左轉鍵 +keybind.vehicleright.name=載具右轉鍵 +keybind.vehicleup.name=載具上升鍵 +moon.moon=月球 +newversion.failed.name=Galacticraft新版本檢查失敗!15秒後重試 +newversion.success.name=發現Galacticraft遠端版本: +planet.jupiter=木星 +planet.mercury=水星 +planet.neptune=海王星 +planet.overworld=主世界 +planet.saturn=土星 +planet.uranus=天王星 +planet.venus=金星 +satellite.spacestation.overworld=主世界太空站 +schematic.moonbuggy.name=探月車 +schematic.rocket_t1.name=一階火箭 +schematic.rocket_t2.name=二階火箭 +solarsystem.sol=太陽系 +star.sol=太陽系 +tile.air_lock_controller.name=空氣鎖控制器 +tile.air_lock_frame.description=氣密框架,以近似傳送門的形式布置,且某個方塊被替換為控制器時,會作為運行的氣閘工作。 +tile.air_lock_frame.name=氣密框架 +tile.air_lock_seal.name=氣密閘 +tile.aluminum_wire.alu_wire.description=鋁線用於連接能量源和耗能的機器。 +tile.aluminum_wire.alu_wire.name=鋁質纜線 +tile.aluminum_wire.alu_wire_heavy.description=重質鋁線用於連接能量源和耗能的機器。擁有比前版更快的傳輸速度。 +tile.aluminum_wire.alu_wire_heavy.name=重型鋁質纜線 +tile.aluminum_wire.alu_wire_switch.description=分流鋁線與普通的鋁線類似,但可以輸入紅石信號開關。 +tile.aluminum_wire.alu_wire_switch.name=分流鋁線 +tile.aluminum_wire.alu_wire_switch_heavy.description=重型分流鋁線與普通的重質鋁線類似,但可以輸入紅石信號開關。 +tile.aluminum_wire.alu_wire_switch_heavy.name=重型分流鋁線 +tile.arclamp.description=弧光燈用於給大片區域提供強光,也會使大部分怪物逃離。 +tile.arclamp.name=弧光燈 +tile.basic_block_core.block_aluminum_gc.name=鋁磚 +tile.basic_block_core.block_copper_gc.name=銅磚 +tile.basic_block_core.block_meteoric_iron_gc.name=隕鐵磚 +tile.basic_block_core.block_tin_gc.name=錫磚 +tile.basic_block_core.block_silicon_gc.name=矽磚 +tile.basic_block_core.deco_block_0.name=裝飾錫塊 +tile.basic_block_core.deco_block_1.name=裝飾錫牆塊 +tile.basic_block_core.ore_aluminum_gc.name=鋁礦 +tile.basic_block_core.ore_copper_gc.name=銅礦 +tile.basic_block_core.ore_silicon.name=矽礦 +tile.basic_block_core.ore_tin_gc.name=錫礦 +tile.basic_block_moon.bricks.name=月球地牢磚 +tile.basic_block_moon.cheesestone.name=奶酪礦 +tile.basic_block_moon.coppermoon.name=銅礦 +tile.basic_block_moon.moondirt.name=月球泥土 +tile.basic_block_moon.moongrass.name=月球草地 +tile.basic_block_moon.moonstone.name=月球石頭 +tile.basic_block_moon.sapphiremoon.name=藍月寶石礦 +tile.basic_block_moon.tinmoon.name=錫礦 +tile.buggy_pad.description=加油墊平臺使用3x3布置並且連接燃料注入器時可替星球車加油,但是並不能用來發射火箭! +tile.cargo.loader.name=貨物加載器 +tile.cargo.unloader.name=貨物卸載器 +tile.cargo_loader.description=貨物加載器會將方塊和物品裝入擁有儲貨空間的火箭和其他載具。必須連接到發射平臺或燃料注入器。 +tile.cargo_unloader.description=貨物卸載器會將方塊和物品取出擁有儲貨空間的火箭和其他載具。必須連接到發射平臺或燃料注入器。 +tile.cheese.description=奶酪塊由月球的奶酪制成,可放置并且可食用。 +tile.cheese.name=奶酪塊 +tile.circuit_fabricator.description=元件制造臺會將基礎的材料加工為硅晶片,用於高級機器。 +tile.coal_generator.description=燃煤發電機燃燒煤炭來收集能量。這是最簡單也是最低效的能量收集途徑。 +tile.collector.description=氧氣收集器會儲存從附近的樹葉收集到的氧氣。 +tile.collector.name=氧氣收集器 +tile.compressor.description=壓縮機會將錠加工為它們對應的壓縮品。 +tile.compressor_electric.description=電動壓縮機會將錠加工為它們對應的壓縮品。一次兩個,因而比前版要高效。 +tile.concealed_detector.name=玩家偵測儀 +tile.concealed_redstone.name=隱形紅石線 +tile.concealed_repeater.name=隱形紅石中繼器 +tile.crude_oil.name=石油 +tile.crude_oil_moving.name=石油 +tile.crude_oil_still.name=石油 +tile.deconstructor.description=解構機能夠拆卸廢棄的火箭等物品並回收材料。 +tile.dishbase.description=通訊雷達可以追踪空間站位置並接收來自遙遠空間站的信號。 +tile.dishbase.name=通訊雷達 +tile.distributor.description=氧氣分配器使用內部儲氣罐會從中心方塊放出一個氧氣泡。在氣泡內呼吸是安全的。 +tile.distributor.name=氧氣分配器 +tile.dummyblock.cryogenic_chamber.name=低溫倉 +tile.dummyblock.launch_pad.name=火箭發射平臺 +tile.dummyblock.nasa_workbench.name=NASA工作臺 +tile.dummyblock.solar.name=太陽能板 +tile.dummyblock.space_station_base.name=空間站基板 +tile.electric_furnace_tier1.description=電爐以更快的速度而取代傳統的炭爐。 +tile.electric_furnace_tier2.description=電弧爐以更快的速度而取代傳統炭爐和電爐。 +tile.emergency_box.description=在你的第一個登陸地點附近放置一個應急崗位。打開在裏面查找應急包。亦擊退怪物! +tile.emergency_box.filled.name=應急崗位(含應急包) +tile.emergency_box.name=應急崗位 +tile.enclosed.aluminum_wire.name=可密封鋁質線纜 +tile.enclosed.copper_cable.name=可密封銅質線纜 +tile.enclosed.description=可密封方塊用與空氣無法通過的地方如空間基地的牆壁。 +tile.enclosed.fluid_pipe.name=可密封流體管道 +tile.enclosed.glass_fibre_cable.name=可密封玻璃纖維線纜 +tile.enclosed.gold_cable.name=可密封金質線纜 +tile.enclosed.heavy_aluminum_wire.name=可密封重型鋁質線纜 +tile.enclosed.hv_cable.name=可密封高壓線纜 +tile.enclosed.lv_cable.name=可密封超低壓線纜 +tile.enclosed.me_cable.name=可密封ME線纜 +tile.enclosed.pipe_fluids_cobblestone.name=可密封圓石防水管道 +tile.enclosed.pipe_fluids_stone.name=可密封石頭防水管道 +tile.enclosed.pipe_items_cobblestone.name=可密封圓石管道 +tile.enclosed.pipe_items_stone.name=可密封石頭管道 +tile.enclosed.pipe_power_gold.name=可密封金質能量管道 +tile.enclosed.pipe_power_stone.name=可密封石頭能量管道 +tile.energy_storage_module_tier1.description=儲能模塊用於為日後需要儲存大量能量。 +tile.energy_storage_module_tier2.description=儲能簇用於為日後需要儲存大量能量。比前版儲存和輸出更多的能量。 +tile.fallen_meteor.description=隕石可在許多擁有稀薄大氣層或無大氣層的行星或衛星發現。破壞後會掉落隕鐵。 +tile.fallen_meteor.name=隕石 +tile.fluid_pipe.description=流體管道能夠從源頭將液體和氣體傳輸至目標,使用標準扳手可以改變其模式。 +tile.fluid_pipe.name=流體管道 +tile.fluid_pipe_pull.description=流體管道能夠從源頭將液體和氣體傳輸至目標,使用標準扳手可以改變其模式。 +tile.fluid_pipe_pull.name=流體管道接口 +tile.fluid_tank.description=流體罐能夠存儲液體和氣體以備使用。 +tile.fluid_tank.name=流體罐 +tile.fuel.name=燃油 +tile.fuel_block.name=燃油 +tile.fuel_loader.description=連接到發射平臺後,燃料注入器可將燃油注入連接的火箭或其他載具中。 +tile.fuel_loader.name=燃料注入器 +tile.glowstone_torch.description=螢石火把最好用於在無氧使得火把無法燃燒的條件下照明區域。 +tile.glowstone_torch.name=螢石火把 +tile.grating.name=格柵 +tile.landing_pad.buggy_fueler.name=探月車燃料注入器 +tile.landing_pad.cargo_pad.name=貨物火箭平臺 +tile.landing_pad.description=發射平臺在3x3布置時可放置火箭。可連接燃料注入器,貨物加載器和發射控制器。 +tile.landing_pad.landing_pad.name=火箭發射平臺 +tile.landing_pad_full.name=火箭發射臺 +tile.machine.0.name=燃煤發電機 +tile.machine.1.name=能量存儲模組 +tile.machine.2.name=電爐 +tile.machine.3.name=壓縮機 +tile.machine.7.name=電弧爐 +tile.machine.8.name=儲能簇 +tile.machine2.4.name=電動壓縮機 +tile.machine2.5.name=元件製造臺 +tile.machine2.6.name=氧氣儲存模組 +tile.machine2.10.name=解構機 +tile.machine3.9.name=染色器 +tile.magnetic_table.name=磁力合成臺 +tile.magnetic_table.description=磁力合成臺中的合成材料不會爆滿地,它們會被保存起來!點擊shift可以快捷導入物品。利用漏斗輸入輸出物品,它將嘗試自動執行上一個合成。 +tile.moon_stairs_brick.name=月球地牢磚階梯 +tile.moon_stairs_stone.name=月球石頭階梯 +tile.ore_copper.name=銅礦 +tile.ore_tin.name=錫礦 +tile.oxygen_compressor.0.name=氧氣壓縮機 +tile.oxygen_compressor.1.name=氧氣解壓縮機 +tile.oxygen_compressor.description=氧氣壓縮機會從內部儲存將氧氣充入氧氣罐中。 +tile.oxygen_decompressor.description=氧氣解壓機會從氧氣罐中提取氧氣轉入內部儲存。 +tile.oxygen_detector.description=氧氣探測器會在被氧氣包圍時發出紅石信號。 +tile.oxygen_detector.name=氧氣探測器 +tile.oxygen_storage_module.description=儲氧模塊用於為日後需要儲存大量氧氣。 +tile.painter.description=利用任意有色方塊或染料,便可以給真空玻璃,照明面板等可染色方塊塗上鮮豔的色彩! +tile.panel_lighting.description=照明面板在太空中提供照明,可以使用扳手旋轉,拿在手上潛行右擊一般方塊可以改變其外觀。 +tile.panel_lighting_0.name=照明面板(方形) +tile.panel_lighting_1.name=照明面板(聚光) +tile.panel_lighting_2.name=照明面板(線性) +tile.panel_lighting_3.name=照明面板(暗色) +tile.panel_lighting_4.name=照明面板(陰暗) +tile.parachest.description=傘降箱會在登陸某行星(如地球)或衛星時從天而降。包含了之前發射的火箭,燃油和貨物。 +tile.parachest.name=傘降箱 +tile.platform.description=放置四個以形成平台。平台將玩家提升到上方或下方的下一個平台。潛行=下:跳=上。 +tile.platform.name=液壓平台 +tile.refinery.description=精煉器可輸入石油和能量輸出火箭與載具使用的燃油。 +tile.refinery.name=精煉機 +tile.rocket_workbench.description=NASA工作臺用於制作許多高級部件和載具。可添加新發現的設計圖。 +tile.rocket_workbench.name=NASA工作臺 +tile.sapling2.birch.name=樺木樹苗 +tile.sapling2.jungle.name=叢林樹苗 +tile.sapling2.oak.name=橡樹樹苗 +tile.sapling2.spruce.name=雲杉樹苗 +tile.sealer.description=氧氣密封器會檢測密閉空間。如果找到了的話區域內就會充滿可呼吸的空氣。 +tile.sealer.name=氧氣密封器 +tile.slab_gc_half.moon_bricks_slab.name=月球地牢磚半磚 +tile.slab_gc_half.moon_slab.name=月球石頭半磚 +tile.slab_gc_half.tin_slab_1.name=裝飾錫塊半磚 +tile.slab_gc_half.tin_slab_2.name=裝飾錫塊半磚 +tile.solar.advanced_solar.name=高級太陽能板 +tile.solar.basic_solar.name=基礎太陽能板 +tile.solar_adv.description=高級太陽能板會從太陽收集能量,為進一步使用而儲存。自動調節角度以保證最優的能量收集效果。 +tile.solar_basic.description=基礎太陽能板會從太陽收集能量,為進一步使用而儲存。在正午收集能量最多(不可調)。 +tile.space_glass.description=真空密封玻璃為太空基地而生。可以使用周圍的染色器噴塗任意顏色的邊框! +tile.space_glass.clear.description=澄澈玻璃可以用於欣賞太空美景,也可以提供清晰的水下視野。 +tile.space_glass.strong.description=由高透明度鋁材製造的堅硬抗爆玻璃。 +tile.space_glass_clear.name=澄澈真空玻璃 +tile.space_glass_vanilla.name=真空玻璃 +tile.space_glass_strong.name=硬化真空玻璃 +tile.space_station_base.name=太空站抵達方塊 +tile.spin_thruster.description=旋轉推進器用於使空間站旋轉. +tile.spin_thruster.name=旋轉推進器 +tile.telemetry.description=遙測單元會從與其建立連接的火箭、玩家、怪物中收集數據。最好放置於顯示屏附近。可使用頻率模塊來建立連接。 +tile.telemetry.name=遙測單元 +tile.tin_stairs_1.name=裝飾錫塊階梯 +tile.tin_stairs_2.name=裝飾錫塊階梯 +tile.treasure_chest.description=一階寶箱會在月球地牢生成。直到打敗了最終boss後才能解鎖。 +tile.treasure_chest.name=寶箱 +tile.unlit_torch.name=火把 +tile.unlit_torch_stone.name=石製火把 +tile.unlit_torch_lit.name=火把 +tile.unlit_torch_stone_lit.name=石製火把 +tile.view_screen.description=顯示屏是太空基地用觸摸屏。右擊改變其顯示的信息。 +tile.view_screen.name=顯示屏 +tile.wall_gc.moon.name=月球石頭牆 +tile.wall_gc.moon_bricks.name=月球地牢磚牆 +tile.wall_gc.tin.name=裝飾錫塊牆 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/crashed_probe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/crashed_probe.json new file mode 100644 index 00000000..e965900a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/crashed_probe.json @@ -0,0 +1,80 @@ +{ + "pools": [ + { + "name": "crashed_probe", + "rolls": { + "min": 4, + "max": 6 + }, + "entries": [ + { + "type": "item", + "name": "galacticraftplanets:item_basic_mars", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftcore:heavy_plating", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 5, + "max": 9 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftplanets:item_basic_asteroids", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_data", + "data": { + "min": 5, + "max": 6 + } + }, + { + "function": "minecraft:set_count", + "count": { + "min": 3, + "max": 6 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_1.json new file mode 100644 index 00000000..26a8d34f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_1.json @@ -0,0 +1,240 @@ +{ + "pools": [ + { + "name": "dungeon_tier_1", + "rolls": { + "min": 5, + "max": 8 + }, + "entries": [ + { + "type": "item", + "name": "galacticraftcore:cheese_curd", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_apple", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 0 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_carrot", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_melon", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 2 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_potato", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftcore:oil_canister_partial", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1001 + } + ] + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 15 + }, + { + "type": "item", + "entryName": "glowing_golden_apple", + "name": "minecraft:golden_apple", + "weight": 2, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + }, + { + "type": "item", + "name": "minecraft:redstone", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:record_blocks", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:record_far", + "weight": 4 + }, + { + "type": "item", + "name": "galacticraftcore:steel_shovel", + "weight": 10 + }, + { + "type": "item", + "name": "galacticraftcore:item_basic_moon", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_data", + "data": 2 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftcore:meteoric_iron_raw", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "item", + "entryName": "frequency_module", + "name": "galacticraftcore:basic_item", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 19 + } + ] + }, + { + "type": "item", + "entryName": "book1", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "type": "item", + "entryName": "book2", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_randomly" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_2.json new file mode 100644 index 00000000..d84b6409 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_2.json @@ -0,0 +1,211 @@ +{ + "pools": [ + { + "name": "dungeon_tier_2", + "rolls": { + "min": 6, + "max": 9 + }, + "entries": [ + { + "type": "item", + "name": "galacticraftplanets:carbon_fragments", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_apple", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 0 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_carrot", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_melon", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 2 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_potato", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftcore:oil_canister_partial", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1001 + } + ] + }, + { + "type": "item", + "name": "galacticraftplanets:desh_boots", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_chestplate", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_helmet", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_leggings", + "weight": 2 + }, + { + "type": "item", + "name": "minecraft:redstone", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:record_mall", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:record_mellohi", + "weight": 4 + }, + { + "type": "item", + "entryName": "raw_desh", + "name": "galacticraftplanets:item_basic_mars", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "desh_stick", + "name": "galacticraftplanets:item_basic_mars", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + } + ] + }, + { + "type": "item", + "entryName": "book22", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 22, + "treasure": true + } + ] + }, + { + "type": "item", + "entryName": "book24", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 24, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_3.json new file mode 100644 index 00000000..2055db0e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_3.json @@ -0,0 +1,242 @@ +{ + "pools": [ + { + "name": "dungeon_tier_3", + "rolls": { + "min": 6, + "max": 9 + }, + "entries": [ + { + "type": "item", + "entryName": "canned_apple", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 0 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_carrot", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_melon", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 2 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_potato", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftplanets:desh_boots", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_chestplate", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_helmet", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_leggings", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftcore:oil_canister_partial", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1001 + } + ] + }, + { + "type": "item", + "name": "galacticraftplanets:bucket_sulphuric_acid", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 10 + }, + { + "type": "item", + "entryName": "glowing_golden_apple", + "name": "minecraft:golden_apple", + "weight": 2, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + }, + { + "type": "item", + "name": "minecraft:redstone", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:record_chirp", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:record_wait", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:record_ward", + "weight": 4 + }, + { + "type": "item", + "name": "galacticraftplanets:basic_item_venus", + "weight": 10, + "functions": [ + { + "function": "set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gold_nugget", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 4 + } + } + ] + }, + { + "type": "item", + "entryName": "book18", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 18, + "treasure": true + } + ] + }, + { + "type": "item", + "entryName": "book27", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 27, + "treasure": true + } + ] + }, + { + "type": "item", + "entryName": "book30", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/manuals/gettingstarted.xml b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/manuals/gettingstarted.xml new file mode 100644 index 00000000..1a184863 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/manuals/gettingstarted.xml @@ -0,0 +1,1035 @@ + + + + +Getting started with Galacticraft + +Volume 1 +By Micdoodle8 + + + +Table of Contents + + Creating a Rocket + heavyplatingT1 + 2 + + + Preparing for Space + oxygenTankHeavy + 4 + + + Launching your Rocket + rocketT1 + 4 + + + + +Welcome to the first edition of Getting started with Galacticraft. New planets to explore can be daunting, but within these pages you will learn the basics of traversing the blocky universe with success. + +This book is a magic copy; it updates whenever the original has been modified. Check back occasionally for information on new things. + + + +Oil +The Pickaxe is a basic mining tool. It is the simplest method of chewing through rock and harvesting ores. +Class: Precision Tool +Effective on: Stone or rock, ores, and metal. +pickicon + + Pickaxe Head + pickhead + + + Tool Rod + toolrod + + + Tool Binding + binding + + + + +Shovel +The Shovel is a basic digging tool. It is the most common way of moving earth around. +Class: Precision Tool +Effective on: Dirt, sand, gravel, and snow. +shovelicon + + Shovel Head + shovelhead + + + Tool Rod + toolrod + + + + +Hatchet +The Hatchet is a basic chopping tool. It is the simplest way to shape lumber. +Class: Precision Tool +Effective on: Wood, Leaves, and Trees. +axeicon + + Hatchet Head + axehead + + + Tool Rod + toolrod + + + + +Mattock +The Cutter Mattock is a versatile farming tool. Its primary purpose is to till soil. It also works somewhat like an axe and a shovel, but is not a replacement for either. +Class: Multitool +Effective on: Wood, dirt, and plants. +mattockicon + + Axe Head + axehead + + + Tool Rod + toolrod + + + Shovel Head + shovelhead + + + + +Broadsword +The Broadsword is a defensive weapon. It is a favorite of many Tinkers and is useful in a wide variety of situations. +Right-click: Block +- Blocking cuts a wide variety of damage types in half. + +Class: Melee Weapon +Effective on webs. +swordicon + + Sword Blade + swordblade + + + Tool Rod + toolrod + + + Wide Guard + wideguard + + + + +Longsword +The Longsword is an offensive weapon. It is used for full-speed charges and plowing through enemy lines +Right-click: Lunge +- When released, it sends you careening forward at breakneck speed. + +Natural Abilities: +- Charge Boost, does 1.5x damage and knockback while sprinting + +Class: Melee Weapon +Effective on webs. +longswordicon + + Sword Blade + swordblade + + + Tool Rod + toolrod + + + Hand Guard + handguard + + + + +Rapier +The Rapier is a special weapon. The dancing swordplay lets you get in and out of battle quickly. While the Rapier's damage is low, it makes up for this with its other abilities. +Right-click: Backpedal +- Take a small hop backwards + +Natural Abilities: +- Charge Boost, does 1.5x damage and knockback while sprinting. +- Armor Pierce, ignores armor and blocking. +- Quick Strike, the enemy is stunned for less time. + +Class: Melee Weapon +rapiericon + + Sword Blade + swordblade + + + Tool Rod + toolrod + + + Crossbar + crossbar + + + + +Dagger +The Dagger is a short weapon. It is light and usable as both a striking and throwing weapon. +Right-click: Throw Dagger +- Toss the item for a ranged attack + +Class: Ranged/Melee Weapon +daggerIcon + + Knife Blade + knifeblade + + + Tool Rod + toolrod + + + Crossbar + crossbar + + + + +Frying Pan +The Frying is a heavy weapon that uses sheer weight to stun foes or a place to cook your food. It is common to hunt pigs and cook them with the same pan. +Right-click: Block +- Blocking cuts a wide variety of damage types in half. + +Shift+Right-click: Place Item +- The frying pan cooks a large amount of food at a time. + +Natural Abilities: +- Bash, does extra knockback and stuns the foe. +frypanicon + + Pan + pan + + + Tool Rod + toolrod + + + + +Battlesign +The Battlesign is an advance in weapon technology worthy of Zombie Pigmen everywhere. +Right-click: Block +- Blocking cuts a wide variety of damage types in half. + +Class: Lethal Joke Weapon +battlesignicon + + Board + board + + + Tool Rod + toolrod + + + + +Chisel +The Chisel is an advanced detailing tool for carving shapes into blocks. +Right-click: Chisel +- Transforms various blocks into bricks. +Crafting grid: Chisel +- Some items can only be chiseled in the crafting grid. + +Class: Utility Tool +chiselicon + + Chisel Head + chiselhead + + + Tool Rod + toolrod + + + + +Hammer +The Hammer is a heavy mining tool meant for digging out large areas. It is also effective on undead. +Natural Abilities: +- Area of Effect, Mines a 3x3 area. The direction depends on which face is pounded. +- Smite II, Does 2-4 extra hearts of damage against undead. +- Huge Durability, this tool has very high durability to make up for the constant beating it will recieve. + +Class: Broad Mining Tool +hammericon + + Hammer Head + hammerhead + + + Large Plate + largeplate + + + Tough Rod + toughrod + + + Large Plate + largeplate + + + + +Lumber Axe +The Lumber Axe is capable of bringing down whole trees or clearing large swaths of food in a single swing. +Natural Abilities: +Fell Trees +- Harvests entire trees. It has a max height of 30. Trees are defined as Leaves on top of Logs. +Area of Effect +- Mines a 3x3x3 area. This is a fallback if a tree is not found. + +Class: Broad Mining Tool +lumbericon + + Broad Axe Head + broadaxehead + + + Large Plate + largeplate + + + Tough Rod + toughrod + + + Tough Binding + toughbinding + + + + +Excavator +The Excavator is a large digging tool used for clearing out large swaths of land, gravel, or snow. +Natural Abilities: +Area of Effect +- Mines a 3x3 area. The direction depends on which face is scooped. + +Class: Broad Mining Tool +excavatoricon + + Excavator Head + excavatorhead + + + Large Plate + largeplate + + + Tough Rod + toughrod + + + Tough Binding + toughbinding + + + + +Scythe +The Scythe is well known for its large swinging area. It can be used to harvest crops, leaves, and is a decent weapon. +Natural Abilities: +Area of Effect +- Attacks mobs in a 3x3x3. +- Harvests a 3x3x3 area. + +Class: Broad Melee Weapon +scytheicon + + Scythe Head + excavatorhead + + + Tough Rod + toughrod + + + Tough Binding + toughbinding + + + Tough Rod + toughrod + + + + +Cleaver +The Cleaver is a heavy defensive weapon. The sword is unwieldly, but the sheer weight of the tool crushes foes. +Right-click: Block +- Blocking cuts a wide variety of damage types in half. + +Natural Abilities: +- Beheading II, Beheads mobs. Their head is dropped as loot. +- Heavy, Base attack is increased at the cost of swing time + +Class: Heavy Melee Weapon +cleavericon + + Large Sword Blade + largeswordblade + + + Large Plate + largeplate + + + Tough Rod + toughrod + + + Tough Rod + toughrod + + + + +Battleaxe +The battleaxe is an offensive melee weapon that can also bring down small trees. +Right-click: TBD +- This ability is incomplete + +Natural Abilities: +- Area of Effect, harvests wood blocks in a 1x9 tower. +- Bash, knocks the enemy further away than normal. + +Class: Heavy Melee Weapon +battleaxeicon + + Broad Axe Head + broadaxehead + + + Broad Axe Head + broadaxehead + + + Tough Rod + toughrod + + + Tough Binding + toughbinding + + + + +Shortbow +The Shortbow is a weapon used to fire arrows. It has a quick, short range. +Right-click: Draw bow +- The further a bow is drawn, the further an arrow flies and the more damage it does. + +Class: Ranged Projectile Launcher +shortbowIcon + + Tool Rod + toolrod + + + Bowstring + bowstring + + + Tool Rod + toolrod + + + + +Arrow +Arrows are fired from bows as projectiles. They can also be used as stabbing weapons in a pinch. +Class: Ammunition +arrowIcon + + Arrowhead + arrowhead + + + Tool Rod + toolrod + + + Fletching + fletching + + + + +Material Traits +Some materials have traits that augment their natural uses. + +- Reinforced: 10% chance per level of not using durability +- Stonebound: The tool mines faster as it wears out, but does less damage +- Jagged: The tool attacks with does more damage as it wears out, but mines slower +- Writable: One extra modifier per piece + + + +Wood +woodaxe +It seems to grow everywhere. + +
woodplanks
+
+
+ + +Stone +stonepick +One of the most common materials in the world. + +
stoneblock
+
+
+ + +Iron +ironpick +A staple for tools, it can be refined and processed. +- Requires the Smeltery + +
ironingot
+
+
+ + +Flint +flintshovel +More durable than stone. The material of choice for cavemen. + +
flint
+
+
+ + +Cactus +cactussword +A form of wood found only in the desert. + +
cactus
+
+
+ + +Bone +bonerapier +A material with many uses, dead or alive. + +
bone
+
+
+ + +Obsidian +bonefrypan +Tough as nails, but fragile when shaped. + +
obsidian
+
+
+ + +Alumite +alumitepick +An uncommon alloy. It seems to be quite durable. +- Requires the Smeltery + +
alumiteingot
+
+
+ + +Netherrack +netherrackmattock +This is made of what?! + +
netherrack
+
+
+ + +Blue Slime +blueslimebattlesign +Converting it from food has made it stronger. +BlueSlime + +
blueslimecrystal
+
+
+ + +Green Slime +slimebattlesign +Soft and springy, it seems to last forever. +Slime + +
slimecrystal
+
+
+ + +Slimy Mud + + slimymud + three + + + + +Slime Crystal +slimecrystal + + + +Paper +paperpick +It's very weak, but can take a lot of modification. + +
paperstack
+
+
+ + +Paper Stack + + paperstack + two + + + + +Cobalt +cobaltlongsword +One of the nether materials. It's bright blue. +- Requires the Smeltery + +
cobaltingot
+
+
+ + +Ardite +arditelongsword +One of the nether materials. It seems to mine faster as it wears out. +- Requires the Smeltery + +
arditeingot
+
+
+ + +Manyullyn +manyullynlongsword +The nether alloy. It's stronger than diamond. +- Requires the Smeltery + +
manyullyningot
+
+
+ + +Copper +copperaxe +A common metal found in the ground. +- Requires the Smeltery + +
copperingot
+
+
+ + +Bronze +bronzeaxe +A common alloy. It's a bit better than iron. +- Requires the Smeltery + +
bronzeingot
+
+
+ + +Steel +steelsword +An Iron alloy. The method for obtaining this is unknown. Enemy chainmail seems to be made of it. +- Requires the Smeltery + +
steelingot
+
+
+ + +Diamond +Adding a diamond to the edge of a tool seems to make it more resilient. + +Effects: +- 500 extra durability +- Mining level increased to level 3 + +Type: Single-use +Stackable: No + + + +tool +diamondmod + + + +Emerald +Affixing an emerald to a tool's weakest point appears to make it more resilient. + +Effects: +- 50% more durability +- Mining level increased to level 2 + +Type: Single-use +Stackable: No + + + +tool +emeraldmod + + + +Speed +Adding redstone to a tool seems to increase its mining speed. + +Effects: +- Each redstone dust increases mining speed by 0.08. +- At 50/50 the boost is 4.0, making a wood pickaxe equivalent in speed to iron. +- Not useful on weapons + +Type: Multi-use +Stackable: Yes + + + +tool +redstonemod + + + +Auto-Repair +Attaching moss to a tool infuses it with life. The tool appears to be capable of regenerating wear and tear. + +Effects: +- The tool slowly repairs itself +- Sunlight speeds up the process + +Type: Single-use +Stackable: Yes + + + +tool +mossmod + + + +Auto-Smelt +Melting a lava crystal onto the end of a tool gives it the power of a furnace. + +Effects: +- Smelts blocks as they're harvested +- Sets mobs on fire for 3 seconds +- Stacks with Luck +- Not compatible with Silky + +Type: Multi-use +Stackable: No + + + +tool +lavacrystalmod + + + +Ball of Moss + + mossball + three + + + + +Lava Crystal + + lavacrystal + three + + + + +Luck +Encrusting lapis on tools is a gift to the gods of luck. They will bless your tool with great fortune and loot. + +Effects: +- Adds fortune or looting, depends on tool type +- Increases level at a maximum threshold, but has a chance of increasing before +- Sometimes adds extra luck to the tool +- Not compatible with Silky + +Type: Single-use +Stackable: No + + + +tool +lapismod + + + +Sharpness +Adding quartz to the edge of a tool seems to make it sharper. + +Effects: +- Increases attack damage +- Has less of an effect on tools with piercing properties + +Type: Multi-use +Stackable: Yes + + + +weapon +quartzmod + + + +Fiery +Adding blaze powder to a tool gives it a fiery tinge. + +Effects: +- Sets enemies on fire +- Every 5 powder adds another second to the flame. + +Type: Multi-use +Stackable: Yes + + + +weapon +blazemod + + + +Necrotic +Placing the bone of a Wither Skelton on a tool gives it nefarious life-stealing powers. + +Effects: +- Heals the player every time a monster is attacked +- Heals one heart per bone + +Type: Single-use +Stackable: Yes + + + +weapon +necroticmod + + + +Silky +Adding a large glob of alunimum brass or gold and a bunch of string seems to give the tool silky-smooth properties. + +Effects: +- Allows blocks to be harvested directly +- Not compatible with Luck or Auto-Smelt + +Type: Single-use +Stackable: No + + + +tool +silkymod + + + +Silky Cloth + + silkycloth + three + + + + +Silky Jewel + + silkyjewel + three + + + + +Reinforced +Adding an obsidian plate to the tool seems to help with its durability. + +Effects: +- Adds the material trait Reinforced to the tool +- Stacks with previous levels of Reinforced + +Type: Single-use +Stackable: Yes + + + +tool +reinforcedmod + + + +Knockback +Attaching a piston to the tool and activating it at the right time seems to throw mobs further away. + +Effects: +- Adds extra knockback to the tool. + +Type: Multi-use +Stackable: Yes + + + +weapon +pistonmod + + + +Beheading +Working an ender pearl and some obsidian on a weapon has the curious effect of separating the target's head from its body. + +Effects: +- Beheads mobs. Enemies drop their heads as a result. + +Type: Single-use +Stackable: Yes + + + +weapon +beheadingmod + + + +Bane of Arthropods +Striking a spider with its own eyeball causes it to recoil in fear. + +Effects: +- Does extra damage to spiders. +- 1-2 hearts per level. + +Type: Multi-use +Stackable: Yes + + + +weapon +spidermod + + + +Smite +The raw power of consecrated soil empowers your weapon, smiting enemies from on high. + +Effects: +- Does extra damage to undead. +- 1-2 hearts per level. + +Type: Multi-use +Stackable: Yes + + + +weapon +smitemod + + + +Graveyard Soil + + graveyardsoil + two + + + + +Consecrated Soil +consecratedsoil + + + +Electric +Adding a battery and a circuit to a tool gives it an electric field. The tool still functions properly when the battery has no charge. + +Effects: +- Allows the tool to be charged with electricity +- Uses energy instead of durability while charged +- Available from IndustrialCraft 2 + +Type: Single-use +Stackable: No + + + +tool +electricmod + + + +Additional Modifiers +Working the tool with a block of gold and a diamond makes the tool more malleable, allowing for more modification. + +Effects: +- Adds an additional modifier slot to the tool + +Type: Single-use +Stackable: No + + + +tool +tier1free + + + +Additional Modifiers +Working the tool with a nether star gives it the ability to attach parts they would not otherwise stay. + +Effects: +- Adds an additional modifier slot to the tool + +Type: Single-use +Stackable: No + + + +tool +tier2free + + +
\ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_heavy_item.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_heavy_item.obj new file mode 100644 index 00000000..7ce75c59 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_heavy_item.obj @@ -0,0 +1,439 @@ +# Blender v2.68 (sub 0) OBJ File: 'aluminumWireThick.blend' +# www.blender.org +mtllib aluminumWireHeavy.mtl +o Middle +v -0.136299 -0.136299 0.136299 +v -0.136299 -0.136299 -0.136299 +v 0.136299 -0.136299 -0.136299 +v 0.136299 -0.136299 0.136299 +v -0.136299 0.136299 0.136299 +v -0.136299 0.136299 -0.136299 +v 0.136299 0.136299 -0.136299 +v 0.136299 0.136299 0.136299 +v -0.136299 -0.136299 0.136299 +v -0.136299 -0.136299 -0.136299 +v 0.136299 -0.136299 -0.136299 +v 0.136299 -0.136299 0.136299 +v -0.136299 0.136299 0.136299 +v -0.136299 0.136299 -0.136299 +v 0.136299 0.136299 -0.136299 +v 0.136299 0.136299 0.136299 +vt 0.726305 0.358354 +vt 0.898972 0.358354 +vt 0.898972 0.531020 +vt 0.726305 0.531020 +usemtl None +f 7/1 6/2 2/3 +f 8/1 7/2 3/3 +f 5/1 8/2 4/3 +f 2/1 1/2 4/3 +f 7/1 8/2 5/3 +f 9/1 13/2 14/3 +f 10/1 14/2 15/3 +f 11/1 15/2 16/3 +f 12/1 16/2 13/3 +f 12/1 9/2 10/3 +f 13/1 16/2 15/3 +f 6/1 5/2 1/3 +f 3/4 7/1 2/3 +f 4/4 8/1 3/3 +f 1/4 5/1 4/3 +f 3/4 2/1 4/3 +f 6/4 7/1 5/3 +f 10/4 9/1 14/3 +f 11/4 10/1 15/3 +f 12/4 11/1 16/3 +f 9/4 12/1 13/3 +f 11/4 12/1 10/3 +f 14/4 13/1 15/3 +f 2/4 6/1 1/3 +o Back +v 0.136000 -0.135968 -0.136662 +v -0.136000 -0.135968 -0.136662 +v 0.136000 0.136032 -0.136662 +v -0.136000 0.136032 -0.136662 +v 0.136000 -0.135968 -0.136662 +v -0.136000 -0.135968 -0.136662 +v 0.136000 0.136032 -0.136662 +v -0.136000 0.136032 -0.136662 +v 0.136000 0.136032 -0.136662 +v -0.136000 0.136032 -0.136662 +v 0.136000 0.136032 -0.136662 +v -0.136000 0.136032 -0.136662 +v -0.136000 -0.135968 -0.508254 +v 0.136000 -0.135968 -0.508254 +v -0.136000 0.136032 -0.508254 +v 0.136000 0.136032 -0.508254 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.001 +f 27/5 21/6 30/7 +f 21/8 23/9 24/10 +f 28/11 27/12 32/13 +f 24/14 23/14 26/14 +f 22/15 29/16 30/17 +f 26/14 25/14 28/14 +f 29/18 31/19 32/20 +f 29/21 22/22 28/23 +f 23/14 25/14 26/14 +f 25/14 27/14 28/14 +f 20/24 19/25 17/26 +f 32/27 27/5 30/7 +f 22/28 21/8 24/10 +f 31/29 28/11 32/13 +f 21/30 22/15 30/17 +f 30/31 29/18 32/20 +f 31/32 29/21 28/23 +f 18/33 20/24 17/26 +o Top +v 0.136000 0.136528 -0.135968 +v -0.136000 0.136528 -0.135968 +v 0.136000 0.136528 0.136032 +v -0.136000 0.136528 0.136032 +v 0.136000 0.136528 -0.135968 +v -0.136000 0.136528 -0.135968 +v 0.136000 0.136528 0.136032 +v -0.136000 0.136528 0.136032 +v 0.136000 0.136528 0.136032 +v -0.136000 0.136528 0.136032 +v 0.136000 0.136528 0.136032 +v -0.136000 0.136528 0.136032 +v -0.136000 0.508699 -0.135968 +v 0.136000 0.508699 -0.135968 +v -0.136000 0.508699 0.136032 +v 0.136000 0.508699 0.136032 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.012 +f 43/34 37/35 46/36 +f 37/37 39/38 40/39 +f 44/40 43/41 48/42 +f 40/43 39/43 42/43 +f 38/44 45/45 46/46 +f 42/43 41/43 44/43 +f 45/47 47/48 48/49 +f 45/50 38/51 44/52 +f 39/43 41/43 42/43 +f 41/43 43/43 44/43 +f 36/53 35/54 33/55 +f 48/56 43/34 46/36 +f 38/57 37/37 40/39 +f 47/58 44/40 48/42 +f 37/59 38/44 46/46 +f 46/60 45/47 48/49 +f 47/61 45/50 44/52 +f 34/62 36/53 33/55 +o Bottom +v 0.136000 -0.133554 0.135968 +v -0.136000 -0.133554 0.135968 +v 0.136000 -0.133554 -0.136032 +v -0.136000 -0.133554 -0.136032 +v 0.136000 -0.133554 0.135968 +v -0.136000 -0.133554 0.135968 +v 0.136000 -0.133554 -0.136032 +v -0.136000 -0.133554 -0.136032 +v 0.136000 -0.133554 -0.136032 +v -0.136000 -0.133554 -0.136032 +v 0.136000 -0.133554 -0.136032 +v -0.136000 -0.133554 -0.136032 +v -0.136000 -0.508226 0.135968 +v 0.136000 -0.508226 0.135968 +v -0.136000 -0.508226 -0.136032 +v 0.136000 -0.508226 -0.136032 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.013 +f 59/63 53/64 62/65 +f 53/66 55/67 56/68 +f 60/69 59/70 64/71 +f 56/72 55/72 58/72 +f 54/73 61/74 62/75 +f 58/72 57/72 60/72 +f 61/76 63/77 64/78 +f 61/79 54/80 60/81 +f 55/72 57/72 58/72 +f 57/72 59/72 60/72 +f 52/82 51/83 49/84 +f 64/85 59/63 62/65 +f 54/86 53/66 56/68 +f 63/87 60/69 64/71 +f 53/88 54/73 62/75 +f 62/89 61/76 64/78 +f 63/90 61/79 60/81 +f 50/91 52/82 49/84 +o Front +v 0.136000 0.135968 0.137488 +v -0.136000 0.135968 0.137488 +v 0.136000 -0.136032 0.137488 +v -0.136000 -0.136032 0.137488 +v 0.136000 0.135968 0.137488 +v -0.136000 0.135968 0.137488 +v 0.136000 -0.136032 0.137488 +v -0.136000 -0.136032 0.137488 +v 0.136000 -0.136032 0.137488 +v -0.136000 -0.136032 0.137488 +v 0.136000 -0.136032 0.137488 +v -0.136000 -0.136032 0.137488 +v -0.136000 0.135968 0.507738 +v 0.136000 0.135968 0.507738 +v -0.136000 -0.136032 0.507738 +v 0.136000 -0.136032 0.507738 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.014 +f 75/92 69/93 78/94 +f 69/95 71/96 72/97 +f 76/98 75/99 80/100 +f 72/101 71/101 74/101 +f 70/102 77/103 78/104 +f 74/101 73/101 76/101 +f 77/105 79/106 80/107 +f 77/108 70/109 76/110 +f 71/101 73/101 74/101 +f 73/101 75/101 76/101 +f 68/111 67/112 65/113 +f 80/114 75/92 78/94 +f 70/115 69/95 72/97 +f 79/116 76/98 80/100 +f 69/117 70/102 78/104 +f 78/118 77/105 80/107 +f 79/119 77/108 76/110 +f 66/120 68/111 65/113 +o Right +v -0.137514 -0.135968 -0.136000 +v -0.137514 -0.135968 0.136000 +v -0.137514 0.136032 -0.136000 +v -0.137514 0.136032 0.136000 +v -0.137514 -0.135968 -0.136000 +v -0.137514 -0.135968 0.136000 +v -0.137514 0.136032 -0.136000 +v -0.137514 0.136032 0.136000 +v -0.137514 0.136032 -0.136000 +v -0.137514 0.136032 0.136000 +v -0.137514 0.136032 -0.136000 +v -0.137514 0.136032 0.136000 +v -0.508489 -0.135968 0.136000 +v -0.508489 -0.135968 -0.136000 +v -0.508489 0.136032 0.136000 +v -0.508489 0.136032 -0.136000 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.015 +f 91/121 85/122 94/123 +f 85/124 87/125 88/126 +f 92/127 91/128 96/129 +f 88/130 87/130 90/130 +f 86/131 93/132 94/133 +f 90/130 89/130 92/130 +f 93/134 95/135 96/136 +f 93/137 86/138 92/139 +f 87/130 89/130 90/130 +f 89/130 91/130 92/130 +f 84/140 83/141 81/142 +f 96/143 91/121 94/123 +f 86/144 85/124 88/126 +f 95/145 92/127 96/129 +f 85/146 86/131 94/133 +f 94/147 93/134 96/136 +f 95/148 93/137 92/139 +f 82/149 84/140 81/142 +o Left +v 0.132904 -0.135968 0.136000 +v 0.132904 -0.135968 -0.136000 +v 0.132904 0.136032 0.136000 +v 0.132904 0.136032 -0.136000 +v 0.132904 -0.135968 0.136000 +v 0.132904 -0.135968 -0.136000 +v 0.132904 0.136032 0.136000 +v 0.132904 0.136032 -0.136000 +v 0.132904 0.136032 0.136000 +v 0.132904 0.136032 -0.136000 +v 0.132904 0.136032 0.136000 +v 0.132904 0.136032 -0.136000 +v 0.508009 -0.135968 -0.136000 +v 0.508009 -0.135968 0.136000 +v 0.508009 0.136032 -0.136000 +v 0.508009 0.136032 0.136000 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.016 +f 107/150 101/151 110/152 +f 101/153 103/154 104/155 +f 108/156 107/157 112/158 +f 104/159 103/159 106/159 +f 102/160 109/161 110/162 +f 106/159 105/159 108/159 +f 109/163 111/164 112/165 +f 109/166 102/167 108/168 +f 103/159 105/159 106/159 +f 105/159 107/159 108/159 +f 100/169 99/170 97/171 +f 112/172 107/150 110/152 +f 102/173 101/153 104/155 +f 111/174 108/156 112/158 +f 101/175 102/160 110/162 +f 110/176 109/163 112/165 +f 111/177 109/166 108/168 +f 98/178 100/169 97/171 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_item.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_item.obj new file mode 100644 index 00000000..64529aad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_item.obj @@ -0,0 +1,439 @@ +# Blender v2.68 (sub 0) OBJ File: 'aluminumWire.blend' +# www.blender.org +mtllib aluminumWire.mtl +o Middle +v -0.080000 -0.080000 0.080000 +v -0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 0.080000 +v -0.080000 0.080000 0.080000 +v -0.080000 0.080000 -0.080000 +v 0.080000 0.080000 -0.080000 +v 0.080000 0.080000 0.080000 +v -0.080000 -0.080000 0.080000 +v -0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 0.080000 +v -0.080000 0.080000 0.080000 +v -0.080000 0.080000 -0.080000 +v 0.080000 0.080000 -0.080000 +v 0.080000 0.080000 0.080000 +vt 0.726305 0.358354 +vt 0.898972 0.358354 +vt 0.898972 0.531020 +vt 0.726305 0.531020 +usemtl None +f 7/1 6/2 2/3 +f 8/1 7/2 3/3 +f 5/1 8/2 4/3 +f 2/1 1/2 4/3 +f 7/1 8/2 5/3 +f 9/1 13/2 14/3 +f 10/1 14/2 15/3 +f 11/1 15/2 16/3 +f 12/1 16/2 13/3 +f 12/1 9/2 10/3 +f 13/1 16/2 15/3 +f 6/1 5/2 1/3 +f 3/4 7/1 2/3 +f 4/4 8/1 3/3 +f 1/4 5/1 4/3 +f 3/4 2/1 4/3 +f 6/4 7/1 5/3 +f 10/4 9/1 14/3 +f 11/4 10/1 15/3 +f 12/4 11/1 16/3 +f 9/4 12/1 13/3 +f 11/4 12/1 10/3 +f 14/4 13/1 15/3 +f 2/4 6/1 1/3 +o Back +v 0.080000 -0.079981 -0.078600 +v -0.080000 -0.079981 -0.078600 +v 0.080000 0.080019 -0.078600 +v -0.080000 0.080019 -0.078600 +v 0.080000 -0.079981 -0.078600 +v -0.080000 -0.079981 -0.078600 +v 0.080000 0.080019 -0.078600 +v -0.080000 0.080019 -0.078600 +v 0.080000 0.080019 -0.078600 +v -0.080000 0.080019 -0.078600 +v 0.080000 0.080019 -0.078600 +v -0.080000 0.080019 -0.078600 +v -0.080000 -0.079981 -0.507728 +v 0.080000 -0.079981 -0.507728 +v -0.080000 0.080019 -0.507728 +v 0.080000 0.080019 -0.507728 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.001 +f 27/5 21/6 30/7 +f 21/8 23/9 24/10 +f 28/11 27/12 32/13 +f 24/14 23/14 26/14 +f 22/15 29/16 30/17 +f 26/14 25/14 28/14 +f 29/18 31/19 32/20 +f 29/21 22/22 28/23 +f 23/14 25/14 26/14 +f 25/14 27/14 28/14 +f 20/24 19/25 17/26 +f 32/27 27/5 30/7 +f 22/28 21/8 24/10 +f 31/29 28/11 32/13 +f 21/30 22/15 30/17 +f 30/31 29/18 32/20 +f 31/32 29/21 28/23 +f 18/33 20/24 17/26 +o Top +v 0.080000 0.078600 -0.079981 +v -0.080000 0.078600 -0.079981 +v 0.080000 0.078600 0.080019 +v -0.080000 0.078600 0.080019 +v 0.080000 0.078600 -0.079981 +v -0.080000 0.078600 -0.079981 +v 0.080000 0.078600 0.080019 +v -0.080000 0.078600 0.080019 +v 0.080000 0.078600 0.080019 +v -0.080000 0.078600 0.080019 +v 0.080000 0.078600 0.080019 +v -0.080000 0.078600 0.080019 +v -0.080000 0.507728 -0.079981 +v 0.080000 0.507728 -0.079981 +v -0.080000 0.507728 0.080019 +v 0.080000 0.507728 0.080019 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.012 +f 43/34 37/35 46/36 +f 37/37 39/38 40/39 +f 44/40 43/41 48/42 +f 40/43 39/43 42/43 +f 38/44 45/45 46/46 +f 42/43 41/43 44/43 +f 45/47 47/48 48/49 +f 45/50 38/51 44/52 +f 39/43 41/43 42/43 +f 41/43 43/43 44/43 +f 36/53 35/54 33/55 +f 48/56 43/34 46/36 +f 38/57 37/37 40/39 +f 47/58 44/40 48/42 +f 37/59 38/44 46/46 +f 46/60 45/47 48/49 +f 47/61 45/50 44/52 +f 34/62 36/53 33/55 +o Bottom +v 0.080000 -0.078600 0.079981 +v -0.080000 -0.078600 0.079981 +v 0.080000 -0.078600 -0.080019 +v -0.080000 -0.078600 -0.080019 +v 0.080000 -0.078600 0.079981 +v -0.080000 -0.078600 0.079981 +v 0.080000 -0.078600 -0.080019 +v -0.080000 -0.078600 -0.080019 +v 0.080000 -0.078600 -0.080019 +v -0.080000 -0.078600 -0.080019 +v 0.080000 -0.078600 -0.080019 +v -0.080000 -0.078600 -0.080019 +v -0.080000 -0.507728 0.079981 +v 0.080000 -0.507728 0.079981 +v -0.080000 -0.507728 -0.080019 +v 0.080000 -0.507728 -0.080019 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.013 +f 59/63 53/64 62/65 +f 53/66 55/67 56/68 +f 60/69 59/70 64/71 +f 56/72 55/72 58/72 +f 54/73 61/74 62/75 +f 58/72 57/72 60/72 +f 61/76 63/77 64/78 +f 61/79 54/80 60/81 +f 55/72 57/72 58/72 +f 57/72 59/72 60/72 +f 52/82 51/83 49/84 +f 64/85 59/63 62/65 +f 54/86 53/66 56/68 +f 63/87 60/69 64/71 +f 53/88 54/73 62/75 +f 62/89 61/76 64/78 +f 63/90 61/79 60/81 +f 50/91 52/82 49/84 +o Front +v 0.080000 0.079981 0.078600 +v -0.080000 0.079981 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 0.079981 0.078600 +v -0.080000 0.079981 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v -0.080000 0.079981 0.507728 +v 0.080000 0.079981 0.507728 +v -0.080000 -0.080019 0.507728 +v 0.080000 -0.080019 0.507728 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.014 +f 75/92 69/93 78/94 +f 69/95 71/96 72/97 +f 76/98 75/99 80/100 +f 72/101 71/101 74/101 +f 70/102 77/103 78/104 +f 74/101 73/101 76/101 +f 77/105 79/106 80/107 +f 77/108 70/109 76/110 +f 71/101 73/101 74/101 +f 73/101 75/101 76/101 +f 68/111 67/112 65/113 +f 80/114 75/92 78/94 +f 70/115 69/95 72/97 +f 79/116 76/98 80/100 +f 69/117 70/102 78/104 +f 78/118 77/105 80/107 +f 79/119 77/108 76/110 +f 66/120 68/111 65/113 +o Right +v -0.078600 -0.079981 -0.080000 +v -0.078600 -0.079981 0.080000 +v -0.078600 0.080019 -0.080000 +v -0.078600 0.080019 0.080000 +v -0.078600 -0.079981 -0.080000 +v -0.078600 -0.079981 0.080000 +v -0.078600 0.080019 -0.080000 +v -0.078600 0.080019 0.080000 +v -0.078600 0.080019 -0.080000 +v -0.078600 0.080019 0.080000 +v -0.078600 0.080019 -0.080000 +v -0.078600 0.080019 0.080000 +v -0.507728 -0.079981 0.080000 +v -0.507728 -0.079981 -0.080000 +v -0.507728 0.080019 0.080000 +v -0.507728 0.080019 -0.080000 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.015 +f 91/121 85/122 94/123 +f 85/124 87/125 88/126 +f 92/127 91/128 96/129 +f 88/130 87/130 90/130 +f 86/131 93/132 94/133 +f 90/130 89/130 92/130 +f 93/134 95/135 96/136 +f 93/137 86/138 92/139 +f 87/130 89/130 90/130 +f 89/130 91/130 92/130 +f 84/140 83/141 81/142 +f 96/143 91/121 94/123 +f 86/144 85/124 88/126 +f 95/145 92/127 96/129 +f 85/146 86/131 94/133 +f 94/147 93/134 96/136 +f 95/148 93/137 92/139 +f 82/149 84/140 81/142 +o Left +v 0.078600 -0.079981 0.080000 +v 0.078600 -0.079981 -0.080000 +v 0.078600 0.080019 0.080000 +v 0.078600 0.080019 -0.080000 +v 0.078600 -0.079981 0.080000 +v 0.078600 -0.079981 -0.080000 +v 0.078600 0.080019 0.080000 +v 0.078600 0.080019 -0.080000 +v 0.078600 0.080019 0.080000 +v 0.078600 0.080019 -0.080000 +v 0.078600 0.080019 0.080000 +v 0.078600 0.080019 -0.080000 +v 0.507728 -0.079981 -0.080000 +v 0.507728 -0.079981 0.080000 +v 0.507728 0.080019 -0.080000 +v 0.507728 0.080019 0.080000 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.016 +f 107/150 101/151 110/152 +f 101/153 103/154 104/155 +f 108/156 107/157 112/158 +f 104/159 103/159 106/159 +f 102/160 109/161 110/162 +f 106/159 105/159 108/159 +f 109/163 111/164 112/165 +f 109/166 102/167 108/168 +f 103/159 105/159 106/159 +f 105/159 107/159 108/159 +f 100/169 99/170 97/171 +f 112/172 107/150 110/152 +f 102/173 101/153 104/155 +f 111/174 108/156 112/158 +f 101/175 102/160 110/162 +f 110/176 109/163 112/165 +f 111/177 109/166 108/168 +f 98/178 100/169 97/171 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_base.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_base.obj new file mode 100644 index 00000000..afd169db --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_base.obj @@ -0,0 +1,28 @@ +# +# object arclampBase +# +o main +v -0.38 -0.323 0.38 +v 0.38 -0.323 0.38 +v 0.38 -0.323 -0.38 +v -0.38 -0.323 -0.38 +v -0.38 -0.25 0.38 +v 0.38 -0.25 0.38 +v 0.38 -0.25 -0.38 +v -0.38 -0.25 -0.38 +# 8 vertices +vn 0.57735 0.57735 0.57735 +# 1 vertex normals +vt 0.1400 0.7594 0.0000 +vt 0.2980 0.7594 0.0000 +vt 0.2980 0.9174 0.0000 +vt 0.1400 0.9174 0.0000 +# 4 texture coords +f 1/1/1 4/4/1 3/3/1 2/2/1 +f 5/1/1 6/2/1 7/3/1 8/4/1 +f 1/1/1 2/4/1 6/3/1 5/2/1 +f 2/1/1 3/4/1 7/3/1 6/2/1 +f 3/1/1 4/4/1 8/3/1 7/2/1 +f 4/1/1 1/4/1 5/3/1 8/2/1 +# 6 polygons + diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_metal.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_metal.obj new file mode 100644 index 00000000..732c4aba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_metal.obj @@ -0,0 +1,105 @@ +#usemtl none +o main +v -3.4331 2.3703 -3.4331 +v -3.4331 2.7308 -3.4331 +v -3.4331 2.7308 3.4331 +v -3.4331 2.3703 3.4331 +v 3.4331 2.7308 3.4331 +v 3.4331 2.3703 3.4331 +v 3.4331 2.7308 -3.4331 +v 3.4331 2.3703 -3.4331 +v 5.7199 2.7308 5.7199 +v -5.7199 2.7308 5.7199 +v -5.7199 1.3831 5.7199 +v 5.7199 1.3831 5.7199 +v 5.7199 2.7308 -5.7199 +v 5.7199 1.3831 -5.7199 +v -5.7199 2.7308 -5.7199 +v -5.7199 1.3831 -5.7199 +v 6.4507 1.3831 -6.4507 +v 6.4507 1.3831 6.4507 +v 6.4507 -1.3477 6.4507 +v 6.4507 -1.3477 -6.4507 +v -6.4507 1.3831 -6.4507 +v -6.4507 -1.3477 -6.4507 +v -6.4507 1.3831 6.4507 +v -6.4507 -1.3477 6.4507 +v 4.12 -1.3477 4.12 +v -4.12 -1.3477 4.12 +v -4.12 -4.3477 4.12 +v 4.12 -4.3477 4.12 +v 4.12 -1.3477 -4.12 +v 4.12 -4.3477 -4.12 +v -4.12 -1.3477 -4.12 +v -4.12 -4.3477 -4.12 +# 32 vertices + +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +# 6 vertex normals + +vt 0.5594 0.0283 0.0000 +vt 0.5594 0.0220 0.0000 +vt 0.9872 0.0220 0.0000 +vt 0.9872 0.0283 0.0000 +vt 0.6346 0.1561 0.0000 +vt 0.8961 0.1561 0.0000 +vt 0.8961 0.1647 0.0000 +vt 0.6346 0.1647 0.0000 +vt 0.6028 0.5282 0.0000 +vt 0.7920 0.5282 0.0000 +vt 0.7920 0.5394 0.0000 +vt 0.6028 0.5394 0.0000 +vt 0.5681 0.8749 0.0000 +vt 0.5681 0.6004 0.0000 +vt 0.8426 0.6004 0.0000 +vt 0.8426 0.8749 0.0000 +vt 0.7647 0.2693 0.0000 +vt 0.7647 0.0584 0.0000 +vt 0.8069 0.1005 0.0000 +vt 0.8069 0.2271 0.0000 +vt 0.9757 0.2693 0.0000 +vt 0.9335 0.2271 0.0000 +vt 0.9757 0.0584 0.0000 +vt 0.9335 0.1005 0.0000 +vt 0.8290 0.6182 0.0000 +vt 0.8290 0.8586 0.0000 +vt 0.8153 0.8450 0.0000 +vt 0.8153 0.6318 0.0000 +vt 0.5886 0.6182 0.0000 +vt 0.6022 0.6318 0.0000 +vt 0.5886 0.8586 0.0000 +vt 0.6022 0.8450 0.0000 +# 32 texture coords +#s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 4/1/2 3/2/2 5/3/2 6/4/2 +f 6/1/3 5/2/3 7/3/3 8/4/3 +f 8/1/4 7/2/4 2/3/4 1/4/4 +f 9/5/4 10/6/4 11/7/4 12/8/4 +f 13/5/1 9/6/1 12/7/1 14/8/1 +f 15/5/2 13/6/2 14/7/2 16/8/2 +f 10/5/3 15/6/3 16/7/3 11/8/3 +f 17/9/1 18/10/1 19/11/1 20/12/1 +f 21/9/2 17/10/2 20/11/2 22/12/2 +f 23/9/3 21/10/3 22/11/3 24/12/3 +f 24/13/5 22/14/5 20/15/5 19/16/5 +f 24/11/4 19/12/4 18/9/4 23/10/4 +f 15/17/6 10/18/6 3/19/6 2/20/6 +f 13/21/6 15/17/6 2/20/6 7/22/6 +f 9/23/6 13/21/6 7/22/6 5/24/6 +f 10/18/6 9/23/6 5/24/6 3/19/6 +f 18/25/6 17/26/6 14/27/6 12/28/6 +f 23/29/6 18/25/6 12/28/6 11/30/6 +f 21/31/6 23/29/6 11/30/6 16/32/6 +f 17/26/6 21/31/6 16/32/6 14/27/6 +f 25/5/4 26/6/4 27/7/4 28/8/4 +f 29/5/1 25/6/1 28/7/1 30/8/1 +f 31/5/2 29/6/2 30/7/2 32/8/2 +f 26/5/3 31/6/3 32/7/3 27/8/3 +f 27/5/6 32/5/6 30/5/6 28/5/6 +# 26 polygons diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/basic_block.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/basic_block.obj new file mode 100644 index 00000000..935ba410 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/basic_block.obj @@ -0,0 +1,74 @@ +# Blender v2.73 (sub 0) OBJ File: 'blockBasic.blend' +# www.blender.org +o Down +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +f 2/1/1 3/2/1 4/3/1 +f 1/4/1 2/1/1 4/3/1 +o North +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vn -0.000000 0.000000 1.000000 +f 7/5/2 8/6/2 6/7/2 +f 5/8/2 7/5/2 6/7/2 +o East +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +f 11/9/3 12/10/3 10/11/3 +f 9/12/3 11/9/3 10/11/3 +o South +v 0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 0.500000 -0.500000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +f 13/13/4 14/14/4 16/15/4 +f 15/16/4 13/13/4 16/15/4 +o Up +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +f 20/17/5 19/18/5 18/19/5 +f 17/20/5 20/17/5 18/19/5 +o West +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn -1.000000 -0.000000 -0.000000 +f 21/21/6 23/22/6 24/23/6 +f 22/24/6 21/21/6 24/23/6 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_compressor_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_compressor_model.json new file mode 100644 index 00000000..9514ac36 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftcore:blocks/advanced/electric_compressor", + "east": "galacticraftcore:blocks/advanced/machine_input", + "south": "galacticraftcore:blocks/advanced/machine_side", + "west": "galacticraftcore:blocks/advanced/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_solar_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_solar_model.json new file mode 100644 index 00000000..d9f9c5a9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_solar_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/solar_advanced_0", + "north": "galacticraftcore:blocks/machine_output", + "east": "galacticraftcore:blocks/solar_advanced_1", + "south": "galacticraftcore:blocks/solar_advanced_1", + "west": "galacticraftcore:blocks/solar_advanced_1" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_controller_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_controller_model.json new file mode 100644 index 00000000..cdc4b8fe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_controller_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube_all", + "textures": { + "down": "galacticraftcore:blocks/air_lock_frame", + "up": "galacticraftcore:blocks/air_lock_frame", + "north": "galacticraftcore:blocks/air_lock_controller", + "south": "galacticraftcore:blocks/air_lock_controller", + "west": "galacticraftcore:blocks/air_lock_controller", + "east": "galacticraftcore:blocks/air_lock_controller", + "particle": "galacticraftcore:blocks/air_lock_frame" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_frame_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_frame_model.json new file mode 100644 index 00000000..b3b09d9a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_frame_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/air_lock_frame" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_flat_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_flat_model.json new file mode 100644 index 00000000..d5615937 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_flat_model.json @@ -0,0 +1,56 @@ +{ + "elements": [ + { "from": [ 0, 4, 0 ], + "to": [ 16, 12, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/air_lock_seal", + "down": "galacticraftcore:blocks/air_lock_seal", + "up": "galacticraftcore:blocks/air_lock_seal", + "north": "galacticraftcore:blocks/air_lock_seal", + "east": "galacticraftcore:blocks/air_lock_seal", + "south": "galacticraftcore:blocks/air_lock_seal", + "west": "galacticraftcore:blocks/air_lock_seal" + }, + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_model.json new file mode 100644 index 00000000..7d31f957 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_model.json @@ -0,0 +1,56 @@ +{ + "elements": [ + { "from": [ 4, 0, 0 ], + "to": [ 12, 16, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/air_lock_seal", + "down": "galacticraftcore:blocks/air_lock_seal", + "up": "galacticraftcore:blocks/air_lock_seal", + "north": "galacticraftcore:blocks/air_lock_seal", + "east": "galacticraftcore:blocks/air_lock_seal", + "south": "galacticraftcore:blocks/air_lock_seal", + "west": "galacticraftcore:blocks/air_lock_seal" + }, + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire.json new file mode 100644 index 00000000..effef13e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire.json @@ -0,0 +1,21 @@ +{ +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_d.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_d.json new file mode 100644 index 00000000..27f41f93 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_d.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_n.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_n.json new file mode 100644 index 00000000..b4792457 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_n.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nd.json new file mode 100644 index 00000000..252c81a0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nd.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ne.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ne.json new file mode 100644 index 00000000..23c01554 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ne.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ned.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ned.json new file mode 100644 index 00000000..b81b87f3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ned.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nes.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nes.json new file mode 100644 index 00000000..ee3f3841 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nes.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesd.json new file mode 100644 index 00000000..15fdbacc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesd.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesu.json new file mode 100644 index 00000000..a7e01234 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesu.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesud.json new file mode 100644 index 00000000..d464d480 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesud.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesw.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesw.json new file mode 100644 index 00000000..5450564d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesw.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswd.json new file mode 100644 index 00000000..63e2346f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswd.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswu.json new file mode 100644 index 00000000..5b62216e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswu.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswud.json new file mode 100644 index 00000000..5809484d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswud.json @@ -0,0 +1,100 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neu.json new file mode 100644 index 00000000..2cc950cf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neud.json new file mode 100644 index 00000000..4a51dd05 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ns.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ns.json new file mode 100644 index 00000000..f6a61801 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ns.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsd.json new file mode 100644 index 00000000..57b66e96 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsd.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsu.json new file mode 100644 index 00000000..e91ea5d4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsud.json new file mode 100644 index 00000000..77ab3f43 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nu.json new file mode 100644 index 00000000..806e2cd8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nu.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nud.json new file mode 100644 index 00000000..fd96fab1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nud.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_u.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_u.json new file mode 100644 index 00000000..704eb3ed --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_u.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ud.json new file mode 100644 index 00000000..93fc94b6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ud.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arc_furnace_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arc_furnace_model.json new file mode 100644 index 00000000..91a1963c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arc_furnace_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftcore:blocks/advanced/electric_furnace", + "east": "galacticraftcore:blocks/advanced/machine_input", + "south": "galacticraftcore:blocks/advanced/machine_side", + "west": "galacticraftcore:blocks/advanced/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp.json new file mode 100644 index 00000000..343e4a93 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp.json @@ -0,0 +1,125 @@ +{ + "parent": "block/block", + "textures": { + "texture": "galacticraftcore:blocks/arc_lamp_on", + "particle": "galacticraftcore:blocks/arc_lamp_on" + }, + "elements": [ + { + "from": [ 2, 0, 2 ], + "to": [ 14, 1, 14 ], + "faces": { + "down": { "uv": [ 8, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" } + } + }, + { + "from": [ 3.5, -0.5, 3.9375 ], + "to": [ 11, 2, 12.4375 ], + "rotation": { "origin": [ 3.5, 2, 3.9375 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 0, 8, 8, 16 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7.5, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7.5, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 8, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 8, 10.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6, -0.5, 5.5 ], + "to": [ 11, 1.5, 11 ], + "rotation": { "origin": [ 6, 1.5, 5.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 13.5, 13.5, 8, 8 ], "texture": "#texture" }, + "up": { "uv": [ 8, 8, 13.5, 13.5 ], "texture": "#texture" }, + "north": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "south": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "west": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "east": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.3125, 1.1875, 3.875 ], + "to": [ 10.8125, 2.1875, 4.875 ], + "rotation": { "origin": [ 3.3125, 2.1875, 3.875 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.3125, 1.1875, 11.5 ], + "to": [ 10.8125, 2.1875, 12.5 ], + "rotation": { "origin": [ 3.3125, 2.1875, 11.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 7, 9, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 7.875, 5.8125, 4.5 ], + "to": [ 8.875, 6.8125, 12 ], + "rotation": { "origin": [ 7.875, 6.8125, 4.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 1, 16, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 8, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 8, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.25, 1.25, 4.5 ], + "to": [ 4.25, 2.25, 12 ], + "rotation": { "origin": [ 3.25, 2.25, 4.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 1, 14.5, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 6.5, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 6.5, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 10, 3.5, 10 ], + "to": [ 14.5, 4, 10.5 ], + "rotation": { "origin": [ 10, 4, 10 ], "axis": "z", "angle": -45 }, + "faces": { + "down": { "uv": [ 10, 10, 14.5, 10.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 10, 14.5, 10.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 12, 14.5, 12.5 ], "texture": "#texture" }, + "south": { "uv": [ 10, 12, 14.5, 12.5 ], "texture": "#texture" }, + "west": { "uv": [ 10, 12, 10.5, 12.5 ], "texture": "#texture" }, + "east": { "uv": [ 10, 12, 10.5, 12.5 ], "texture": "#texture" } + } + }, + { + "from": [ 10.25, 3.25, 6 ], + "to": [ 14.75, 3.75, 6.5 ], + "rotation": { "origin": [ 10.25, 3.75, 6 ], "axis": "z", "angle": -45 }, + "faces": { + "down": { "uv": [ 10, 10.5, 14.5, 11 ], "texture": "#texture" }, + "up": { "uv": [ 10, 11, 14.5, 11.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.25, 12.25, 14.75, 12.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.25, 12.25, 14.75, 12.75 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12.5, 13, 13 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 11, 13, 11.5 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_model.json new file mode 100644 index 00000000..f37ca591 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_model.json @@ -0,0 +1,20 @@ +{ + "textures": { + "texture": "galacticraftcore:blocks/arc_lamp_off", + "particle": "galacticraftcore:blocks/arc_lamp_off" + }, + "elements": [ + { + "from": [ 2, 0, 2 ], + "to": [ 14, 1, 14 ], + "faces": { + "down": { "uv": [ 8, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_side_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_side_model.json new file mode 100644 index 00000000..11fd5a05 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_side_model.json @@ -0,0 +1,20 @@ +{ + "textures": { + "texture": "galacticraftcore:blocks/arc_lamp_off", + "particle": "galacticraftcore:blocks/arc_lamp_off" + }, + "elements": [ +{ + "from": [ 0, 2, 2 ], + "to": [ 1, 14, 14 ], + "faces": { + "down": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_on_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_on_model.json new file mode 100644 index 00000000..b06e1b17 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_on_model.json @@ -0,0 +1,125 @@ +{ + "parent": "block/block", + "textures": { + "texture": "galacticraftcore:blocks/arc_lamp_on", + "particle": "galacticraftcore:blocks/arc_lamp_on" + }, + "elements": [ + { + "from": [ 2, 0, 2 ], + "to": [ 14, 1, 14 ], + "faces": { + "down": { "uv": [ 8, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" } + } + }, + { + "from": [ 3.5, -0.5, 3.9375 ], + "to": [ 11, 2, 12.4375 ], + "rotation": { "origin": [ 3.5, 2, 3.9375 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 0, 8, 8, 16 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7.5, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7.5, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 8, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 8, 10.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6, -0.5, 5.5 ], + "to": [ 11, 1.5, 11 ], + "rotation": { "origin": [ 6, 1.5, 5.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 13.5, 13.5, 8, 8 ], "texture": "#texture" }, + "up": { "uv": [ 8, 8, 13.5, 13.5 ], "texture": "#texture" }, + "north": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "south": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "west": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "east": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.3125, 1.1875, 3.875 ], + "to": [ 10.8125, 2.1875, 4.875 ], + "rotation": { "origin": [ 3.3125, 2.1875, 3.875 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.3125, 1.1875, 11.5 ], + "to": [ 10.8125, 2.1875, 12.5 ], + "rotation": { "origin": [ 3.3125, 2.1875, 11.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 7, 9, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 7.875, 5.8125, 4.5 ], + "to": [ 8.875, 6.8125, 12 ], + "rotation": { "origin": [ 7.875, 6.8125, 4.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 1, 16, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 8, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 8, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.25, 1.25, 4.5 ], + "to": [ 4.25, 2.25, 12 ], + "rotation": { "origin": [ 3.25, 2.25, 4.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 1, 14.5, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 6.5, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 6.5, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 10, 3.5, 10 ], + "to": [ 14.5, 4, 10.5 ], + "rotation": { "origin": [ 10, 4, 10 ], "axis": "z", "angle": -45 }, + "faces": { + "down": { "uv": [ 10, 10, 14.5, 10.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 10, 14.5, 10.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 12, 14.5, 12.5 ], "texture": "#texture" }, + "south": { "uv": [ 10, 12, 14.5, 12.5 ], "texture": "#texture" }, + "west": { "uv": [ 10, 12, 10.5, 12.5 ], "texture": "#texture" }, + "east": { "uv": [ 10, 12, 10.5, 12.5 ], "texture": "#texture" } + } + }, + { + "from": [ 10.25, 3.25, 6 ], + "to": [ 14.75, 3.75, 6.5 ], + "rotation": { "origin": [ 10.25, 3.75, 6 ], "axis": "z", "angle": -45 }, + "faces": { + "down": { "uv": [ 10, 10.5, 14.5, 11 ], "texture": "#texture" }, + "up": { "uv": [ 10, 11, 14.5, 11.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.25, 12.25, 14.75, 12.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.25, 12.25, 14.75, 12.75 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12.5, 13, 13 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 11, 13, 11.5 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/basic_solar_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/basic_solar_model.json new file mode 100644 index 00000000..18607f24 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/basic_solar_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/solar_basic_0", + "north": "galacticraftcore:blocks/machine_output", + "east": "galacticraftcore:blocks/solar_basic_1", + "south": "galacticraftcore:blocks/solar_basic_1", + "west": "galacticraftcore:blocks/solar_basic_1" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_aluminum_gc_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_aluminum_gc_model.json new file mode 100644 index 00000000..7df4d11a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_aluminum_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_aluminum" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_copper_gc_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_copper_gc_model.json new file mode 100644 index 00000000..48bbda37 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_copper_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_copper" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_meteoric_iron_gc_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_meteoric_iron_gc_model.json new file mode 100644 index 00000000..24e327c2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_meteoric_iron_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_meteoric_iron" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_multi_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_multi_model.json new file mode 100644 index 00000000..464995b7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_multi_model.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 0, 0, 0 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/buggy_pad_full", + "down": "galacticraftcore:blocks/buggy_pad_full", + "up": "galacticraftcore:blocks/buggy_pad_full", + "north": "galacticraftcore:blocks/buggy_pad_full", + "east": "galacticraftcore:blocks/buggy_pad_full", + "south": "galacticraftcore:blocks/buggy_pad_full", + "west": "galacticraftcore:blocks/buggy_pad_full" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_silicon_gc_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_silicon_gc_model.json new file mode 100644 index 00000000..ec1bdbfb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_silicon_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_silicon" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_tin_gc_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_tin_gc_model.json new file mode 100644 index 00000000..22c35258 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_tin_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_tin" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/breatheable_air.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/breatheable_air.json new file mode 100644 index 00000000..21465902 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/breatheable_air.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/breatheable_air" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_full_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_full_model.json new file mode 100644 index 00000000..3c6f06b6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_full_model.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 4, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/buggy_pad_full", + "down": "galacticraftcore:blocks/buggy_pad_full", + "up": "galacticraftcore:blocks/buggy_pad_full", + "north": "galacticraftcore:blocks/buggy_pad_full", + "east": "galacticraftcore:blocks/buggy_pad_full", + "south": "galacticraftcore:blocks/buggy_pad_full", + "west": "galacticraftcore:blocks/buggy_pad_full" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_model.json new file mode 100644 index 00000000..eb3c1bd9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_model.json @@ -0,0 +1,25 @@ +{ + "parent": "block/thin_block", + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 3, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/buggy_pad", + "down": "galacticraftcore:blocks/buggy_pad", + "up": "galacticraftcore:blocks/buggy_pad", + "north": "galacticraftcore:blocks/buggy_pad", + "east": "galacticraftcore:blocks/buggy_pad", + "south": "galacticraftcore:blocks/buggy_pad", + "west": "galacticraftcore:blocks/buggy_pad" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_loader_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_loader_model.json new file mode 100644 index 00000000..7c1101de --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_loader_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine_cargoloader", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_cargoloader", + "west": "galacticraftcore:blocks/machine_item_input" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_unloader_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_unloader_model.json new file mode 100644 index 00000000..df3dc2a3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_unloader_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine_cargounloader", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_cargounloader", + "west": "galacticraftcore:blocks/machine_item_output" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice1_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice1_model.json new file mode 100644 index 00000000..9cb4050c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice1_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 3, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice2_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice2_model.json new file mode 100644 index 00000000..d5d477e8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice2_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 5, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice3_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice3_model.json new file mode 100644 index 00000000..ea2cfaa6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice3_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 7, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice4_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice4_model.json new file mode 100644 index 00000000..ca25a9fd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice4_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 9, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice5_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice5_model.json new file mode 100644 index 00000000..b47b556f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice5_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 11, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice6_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice6_model.json new file mode 100644 index 00000000..1368cbe5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice6_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 13, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_uneaten_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_uneaten_model.json new file mode 100644 index 00000000..54709ac6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_uneaten_model.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/circuit_fabricator_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/circuit_fabricator_model.json new file mode 100644 index 00000000..f7731bd8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/circuit_fabricator_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/circuit_fabricator", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cluster_storage_16.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cluster_storage_16.json new file mode 100644 index 00000000..5655a05f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cluster_storage_16.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftcore:blocks/advanced/energy_storage_module_16", + "east": "galacticraftcore:blocks/advanced/machine_output", + "south": "galacticraftcore:blocks/advanced/energy_storage_module_16", + "west": "galacticraftcore:blocks/advanced/machine_input" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/coal_generator_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/coal_generator_model.json new file mode 100644 index 00000000..9155ec8b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/coal_generator_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/coal_generator", + "east": "galacticraftcore:blocks/machine_output", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/collector_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/collector_model.json new file mode 100644 index 00000000..655903ac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/collector_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/collector", + "down": "galacticraftcore:blocks/collector", + "up": "galacticraftcore:blocks/collector", + "north": "galacticraftcore:blocks/collector", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/collector", + "west": "galacticraftcore:blocks/machine_oxygen_output" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compact_workbench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compact_workbench.json new file mode 100644 index 00000000..77c28cac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compact_workbench.json @@ -0,0 +1,168 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "galacticraftcore:blocks/workbench/side", + "1": "galacticraftcore:blocks/workbench/blueprint", + "2": "galacticraftcore:blocks/workbench/top", + "3": "galacticraftcore:blocks/workbench/arm", + "particle": "galacticraftcore:blocks/workbench/side" + }, + "elements": [ + { + "name": "base", + "from": [0, 0, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "name": "wall_e", + "from": [0, 16, 1], + "to": [1, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0.5, 16.5, 8.5]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 15], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 15], "texture": "#0"} + } + }, + { + "name": "wall_w", + "from": [15, 16, 0], + "to": [16, 17, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [15.5, 16.5, 7.5]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 15], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 15], "texture": "#0"} + } + }, + { + "name": "wall_s", + "from": [1, 16, 15], + "to": [16, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 16.5, 15.5]}, + "faces": { + "north": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "up": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 15, 1], "texture": "#0"} + } + }, + { + "name": "wall_n", + "from": [0, 16, 0], + "to": [15, 17, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [7.5, 16.5, 0.5]}, + "faces": { + "north": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 15, 1], "texture": "#0"} + } + }, + { + "name": "blueprint", + "from": [4, 15.5, 4], + "to": [12, 16.5, 12], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#missing"} + } + }, + { + "name": "arm_1", + "from": [14.29289, 16, 2.45711], + "to": [15.29289, 21, 3.45711], + "rotation": {"angle": 45, "axis": "y", "origin": [13.04289, 19.5, 2.95711]}, + "faces": { + "north": {"uv": [0, 0, 1, 5], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 5], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 5], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 5], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "name": "arm_2", + "from": [8.29289, 20, 2.45711], + "to": [14.29289, 21, 3.45711], + "rotation": {"angle": 45, "axis": "y", "origin": [13.04289, 19.5, 2.95711]}, + "faces": { + "north": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 6, 1], "texture": "#3"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 90, 0], + "translation": [0, 14, 0], + "scale": [0.8, 0.8, 0.8] + } + }, + "groups": [ + 0, + 1, + 2, + 3, + 4, + 5, + { + "name": "arm", + "origin": [13.5, 19.5, 2.5], + "color": 0, + "children": [6, 7] + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compressor_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compressor_model.json new file mode 100644 index 00000000..c69d7868 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/oxygen_compressor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/oxygen_compressor_back", + "west": "galacticraftcore:blocks/machine_oxygen_input" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_1.json new file mode 100644 index 00000000..e0958d7e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_1.json @@ -0,0 +1,189 @@ +{ +"textures": { + "texture": "galacticraftcore:blocks/cryo_0", + "particle": "galacticraftcore:blocks/cryo_0", + "cryo_1": "galacticraftcore:blocks/cryo_1" +}, +"elements": [ +{ + "from": [ 0, 0, 0 ], + "to": [ 2, 16, 8 ], + "faces": { + "down": { "uv": [ 16, 8, 14, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 2, 8 ], "texture": "#texture" }, + "north": { "uv": [ 14, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 2, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 14, 0, 0 ], + "to": [ 16, 16, 8 ], + "faces": { + "down": { "uv": [ 2, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 14, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 2, 16 ], "texture": "#texture" }, + "south": { "uv": [ 14, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 0, 0 ], + "to": [ 14, 16, 1 ], + "faces": { + "down": { "uv": [ 14, 1, 2, 0 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 14, 1 ], "texture": "#texture" }, + "north": { "uv": [ 2, 0, 14, 14 ], "texture": "#texture" }, + "south": { "uv": [ 2, 0, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 14 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 0, 14 ], + "to": [ 13, 1, 15 ], + "faces": { + "down": { "uv": [ 13, 15, 3, 14 ], "texture": "#cryo_1" }, + "up": { "uv": [ 3, 14, 13, 15 ], "texture": "#cryo_1" }, + "north": { "uv": [ 3, 15, 13, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 3, 15, 13, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 14, 15, 15, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 1, 15, 2, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 0, 12 ], + "to": [ 3, 1, 14 ], + "faces": { + "down": { "uv": [ 14, 14, 13, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 2, 12, 3, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 13, 15, 14, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 2, 15, 3, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 15, 14, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 15, 4, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 13, 0, 12 ], + "to": [ 14, 1, 14 ], + "faces": { + "down": { "uv": [ 3, 14, 2, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 13, 12, 14, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 2, 15, 3, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 13, 15, 14, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 15, 14, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 15, 4, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 1, 0, 8 ], + "to": [ 2, 1, 12 ], + "faces": { + "down": { "uv": [ 15, 12, 14, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 1, 8, 2, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 14, 15, 15, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 1, 15, 2, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 15, 12, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 15, 8, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 14, 0, 8 ], + "to": [ 15, 1, 12 ], + "faces": { + "down": { "uv": [ 2, 12, 1, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 14, 8, 15, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 1, 15, 2, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 14, 15, 15, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 15, 12, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 15, 8, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 0, 1 ], + "to": [ 3, 16, 2 ], + "faces": { + "down": { "uv": [ 14, 2, 13, 1 ], "texture": "#texture" }, + "up": { "uv": [ 2, 1, 3, 2 ], "texture": "#texture" }, + "north": { "uv": [ 13, 0, 14, 14 ], "texture": "#texture" }, + "south": { "uv": [ 2, 0, 3, 14 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 2, 14 ], "texture": "#texture" }, + "east": { "uv": [ 14, 0, 15, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 13, 0, 1 ], + "to": [ 14, 16, 2 ], + "faces": { + "down": { "uv": [ 3, 2, 2, 1 ], "texture": "#texture" }, + "up": { "uv": [ 13, 1, 14, 2 ], "texture": "#texture" }, + "north": { "uv": [ 2, 0, 3, 14 ], "texture": "#texture" }, + "south": { "uv": [ 13, 0, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 2, 14 ], "texture": "#texture" }, + "east": { "uv": [ 14, 0, 15, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 13, 8 ], + "to": [ 2, 16, 12 ], + "faces": { + "down": { "uv": [ 15, 12, 14, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 1, 8, 2, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 14, 0, 15, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 1, 0, 2, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 0, 12, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 0, 8, 3 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 14, 13, 8 ], + "to": [ 15, 16, 12 ], + "faces": { + "down": { "uv": [ 2, 12, 1, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 14, 8, 15, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 1, 0, 2, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 14, 0, 15, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 0, 12, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 0, 8, 3 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 13, 12 ], + "to": [ 3, 16, 14 ], + "faces": { + "down": { "uv": [ 14, 14, 13, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 2, 12, 3, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 13, 0, 14, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 2, 0, 3, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 0, 14, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 0, 4, 3 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 13, 13, 12 ], + "to": [ 14, 16, 14 ], + "faces": { + "down": { "uv": [ 3, 14, 2, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 13, 12, 14, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 2, 0, 3, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 13, 0, 14, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 0, 14, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 0, 4, 3 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 3, 13, 14 ], + "to": [ 13, 16, 15 ], + "faces": { + "down": { "uv": [ 13, 15, 3, 14 ], "texture": "#cryo_1" }, + "up": { "uv": [ 3, 14, 13, 15 ], "texture": "#cryo_1" }, + "north": { "uv": [ 3, 0, 13, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 3, 0, 13, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 14, 0, 15, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 1, 0, 2, 3 ], "texture": "#cryo_1" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_2.json new file mode 100644 index 00000000..680b47f8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_2.json @@ -0,0 +1,93 @@ +{ +"textures": { + "texture": "galacticraftcore:blocks/cryo_0", + "particle": "galacticraftcore:blocks/cryo_0", + "cryo_1": "galacticraftcore:blocks/cryo_1" +}, +"elements": [ +{ + "from": [ 0, 0, 0 ], + "to": [ 2, 12, 8 ], + "faces": { + "down": { "uv": [ 16, 8, 14, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 2, 8 ], "texture": "#texture" }, + "north": { "uv": [ 14, 4, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 4, 2, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 4, 8, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 4, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 14, 0, 0 ], + "to": [ 16, 12, 8 ], + "faces": { + "down": { "uv": [ 2, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 14, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 4, 2, 16 ], "texture": "#texture" }, + "south": { "uv": [ 14, 4, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 4, 8, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 4, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 0, 0 ], + "to": [ 14, 12, 1 ], + "faces": { + "down": { "uv": [ 14, 1, 2, 0 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 14, 1 ], "texture": "#texture" }, + "north": { "uv": [ 2, 4, 14, 16 ], "texture": "#texture" }, + "south": { "uv": [ 2, 4, 14, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 4, 1, 16 ], "texture": "#texture" }, + "east": { "uv": [ 15, 4, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 0, 1 ], + "to": [ 3, 12, 2 ], + "faces": { + "down": { "uv": [ 14, 2, 13, 1 ], "texture": "#texture" }, + "up": { "uv": [ 2, 1, 3, 2 ], "texture": "#texture" }, + "north": { "uv": [ 13, 4, 14, 16 ], "texture": "#texture" }, + "south": { "uv": [ 2, 4, 3, 16 ], "texture": "#texture" }, + "west": { "uv": [ 1, 4, 2, 16 ], "texture": "#texture" }, + "east": { "uv": [ 14, 4, 15, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 13, 0, 1 ], + "to": [ 14, 12, 2 ], + "faces": { + "down": { "uv": [ 3, 2, 2, 1 ], "texture": "#texture" }, + "up": { "uv": [ 13, 1, 14, 2 ], "texture": "#texture" }, + "north": { "uv": [ 2, 4, 3, 16 ], "texture": "#texture" }, + "south": { "uv": [ 13, 4, 14, 16 ], "texture": "#texture" }, + "west": { "uv": [ 1, 4, 2, 16 ], "texture": "#texture" }, + "east": { "uv": [ 14, 4, 15, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 12, 0 ], + "to": [ 16, 16, 9 ], + "faces": { + "down": { "uv": [ 16, 9, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 4 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 4 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 9, 4 ], "texture": "#texture" }, + "east": { "uv": [ 7, 0, 16, 4 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 13, 9 ], + "to": [ 16, 16, 10 ], + "faces": { + "down": { "uv": [ 16, 10, 0, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 9, 16, 10 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture" }, + "west": { "uv": [ 9, 0, 10, 3 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 7, 3 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_0_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_0_model.json new file mode 100644 index 00000000..c7ae515b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_0_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube_all", + "textures": { + "down": "galacticraftcore:blocks/deco_block_up", + "up": "galacticraftcore:blocks/deco_block", + "north": "galacticraftcore:blocks/deco_block_side", + "south": "galacticraftcore:blocks/deco_block_side", + "west": "galacticraftcore:blocks/deco_block_side", + "east": "galacticraftcore:blocks/deco_block_side", + "particle": "galacticraftcore:blocks/deco_block" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_1_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_1_model.json new file mode 100644 index 00000000..9ac10291 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/deco_block" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/decompressor_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/decompressor_model.json new file mode 100644 index 00000000..82c0b8c5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/decompressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/oxygen_decompressor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/oxygen_compressor_back", + "west": "galacticraftcore:blocks/machine_oxygen_output" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deconstructor_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deconstructor_model.json new file mode 100644 index 00000000..a9a79c32 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deconstructor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/deconstructor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/detector_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/detector_model.json new file mode 100644 index 00000000..85c8821a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/detector_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/detector_side", + "east": "galacticraftcore:blocks/detector_side", + "south": "galacticraftcore:blocks/detector_side", + "west": "galacticraftcore:blocks/detector_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dishbase_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dishbase_model.json new file mode 100644 index 00000000..4777fe48 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dishbase_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/dishbase", + "down": "galacticraftcore:blocks/dishbase", + "up": "galacticraftcore:blocks/dishbase", + "north": "galacticraftcore:blocks/dishbase", + "east": "galacticraftcore:blocks/dishbase", + "south": "galacticraftcore:blocks/dishbase", + "west": "galacticraftcore:blocks/dishbase" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/distributor_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/distributor_model.json new file mode 100644 index 00000000..096c6691 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/distributor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/distributor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/distributor", + "west": "galacticraftcore:blocks/machine_oxygen_input" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dummy.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dummy.json new file mode 100644 index 00000000..84f195c4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dummy.json @@ -0,0 +1,11 @@ +{ + "elements": [ + { + "from": [0, 0, 0], + "to": [0, 0, 0], + "faces": { + "up": { "uv": [ 0, 0, 0, 0 ], "texture": "galacticraftcore:blocks/space_station_side" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_compressor_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_compressor_model.json new file mode 100644 index 00000000..b66de28c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/electric_compressor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_furnace_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_furnace_model.json new file mode 100644 index 00000000..7003fc60 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_furnace_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/electric_furnace", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_ingot_compressor_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_ingot_compressor_model.json new file mode 100644 index 00000000..b66de28c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_ingot_compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/electric_compressor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box.json new file mode 100644 index 00000000..e0ca153f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box.json @@ -0,0 +1,118 @@ +{ + "textures": { + "0": "galacticraftcore:blocks/emergency_box", + "particle": "galacticraftcore:blocks/emergency_box" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 2.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 2.0, 0.0 ], + "to": [ 1.0, 14.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 2.0, 16.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 15.0, 2.0, 0.0 ], + "to": [ 16.0, 14.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 15.0, 2.0, 14.0 ], + "to": [ 16.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 15.0, 2.0, 16.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 2.0, 14.0 ], + "to": [ 1.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 2.0, 0.0 ], + "to": [ 2.0, 14.0, 1.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 2.0, 0.0 ], + "to": [ 15.0, 14.0, 1.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 2.0, 15.0 ], + "to": [ 15.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 2.0, 15.0 ], + "to": [ 2.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 2.0, 5.0, 1.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box_filled.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box_filled.json new file mode 100644 index 00000000..b7a77b83 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box_filled.json @@ -0,0 +1,170 @@ +{ + "textures": { + "0": "galacticraftcore:blocks/emergency_box", + "1": "galacticraftcore:items/emergency_kit" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 2.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 2.0, 0.0 ], + "to": [ 1.0, 14.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 2.0, 16.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 15.0, 2.0, 0.0 ], + "to": [ 16.0, 14.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 15.0, 2.0, 14.0 ], + "to": [ 16.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 15.0, 2.0, 16.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 2.0, 14.0 ], + "to": [ 1.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 2.0, 0.0 ], + "to": [ 2.0, 14.0, 1.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 2.0, 0.0 ], + "to": [ 15.0, 14.0, 1.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 2.0, 15.0 ], + "to": [ 15.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 2.0, 15.0 ], + "to": [ 2.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 2.0, 5.0, 1.0 ] } + } + }, + { + "name": "Cube", + "from": [ 3.0, 3.0, 1.0 ], + "to": [ 13.0, 13.0, 2.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "east": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] }, + "south": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "west": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "up": { "texture": "#1", "uv": [ 3.0, 2.0, 13.0, 3.0 ] }, + "down": { "texture": "#1", "uv": [ 3.0, 13.0, 13.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 3.0, 3.0, 14.0 ], + "to": [ 13.0, 13.0, 15.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "east": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] }, + "south": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "west": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "up": { "texture": "#1", "uv": [ 3.0, 2.0, 13.0, 3.0 ] }, + "down": { "texture": "#1", "uv": [ 3.0, 13.0, 13.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 3.0, 3.0 ], + "to": [ 2.0, 13.0, 13.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "east": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "south": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] }, + "west": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "up": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "down": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 3.0, 3.0 ], + "to": [ 15.0, 13.0, 13.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "east": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "south": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] }, + "west": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "up": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "down": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_aluminum_wire_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_aluminum_wire_model.json new file mode 100644 index 00000000..9de99d1f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_aluminum_wire_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_aluminum_wire" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_copper_cable_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_copper_cable_model.json new file mode 100644 index 00000000..f90a0670 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_copper_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_copper_cable" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_fluid_pipe_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_fluid_pipe_model.json new file mode 100644 index 00000000..d9655757 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_fluid_pipe_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_fluid_pipe" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_glass_fibre_cable_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_glass_fibre_cable_model.json new file mode 100644 index 00000000..37a0beb8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_glass_fibre_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_glass_fibre_cable" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_gold_cable_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_gold_cable_model.json new file mode 100644 index 00000000..e151838c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_gold_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_gold_cable" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_heavy_aluminum_wire_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_heavy_aluminum_wire_model.json new file mode 100644 index 00000000..bf53c30a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_heavy_aluminum_wire_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_heavy_aluminum_wire" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_hv_cable_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_hv_cable_model.json new file mode 100644 index 00000000..c22f8bbd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_hv_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_hv_cable" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_lv_cable_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_lv_cable_model.json new file mode 100644 index 00000000..34f5314f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_lv_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_lv_cable" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_me_cable_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_me_cable_model.json new file mode 100644 index 00000000..8fa109cb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_me_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_me_cable" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_cobblestone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_cobblestone_model.json new file mode 100644 index 00000000..cd55135b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_cobblestone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_fluids_cobblestone" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_stone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_stone_model.json new file mode 100644 index 00000000..576b4a0c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_fluids_stone" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_cobblestone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_cobblestone_model.json new file mode 100644 index 00000000..9debc09c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_cobblestone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_items_cobblestone" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_stone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_stone_model.json new file mode 100644 index 00000000..77ba3aca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_items_stone" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_gold_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_gold_model.json new file mode 100644 index 00000000..c42ef114 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_gold_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_power_gold" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_stone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_stone_model.json new file mode 100644 index 00000000..1e205c78 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_power_stone" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_te_conduit_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_te_conduit_model.json new file mode 100644 index 00000000..222f6036 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_te_conduit_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_te_conduit" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/energy_storage_16.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/energy_storage_16.json new file mode 100644 index 00000000..4d81e411 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/energy_storage_16.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/energy_storage_module_16", + "east": "galacticraftcore:blocks/machine_output", + "south": "galacticraftcore:blocks/energy_storage_module_16", + "west": "galacticraftcore:blocks/machine_input" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fallen_meteor_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fallen_meteor_model.json new file mode 100644 index 00000000..1f446737 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fallen_meteor_model.json @@ -0,0 +1,117 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftcore:blocks/fallen_meteor", + "texture": "galacticraftcore:blocks/fallen_meteor" +}, +"elements": [ +{ + "from": [ 3, 1, 3 ], + "to": [ 13, 11, 13 ], + "faces": { + "down": { "uv": [ 13, 13, 3, 3 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 3, 5, 13, 15 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 3, 5, 13, 15 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 3, 5, 13, 15 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 3, 5, 13, 15 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 5.5, 11, 4 ], + "to": [ 12.5, 11.5, 9.5 ], + "faces": { + "down": { "uv": [ 10.5, 9.5, 3.5, 4 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 5.5, 4, 12.5, 9.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 3.5, 4.5, 10.5, 5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 5.5, 4.5, 12.5, 5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 4, 4.5, 9.5, 5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 6.5, 4.5, 12, 5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 2.5, 4, 5.5 ], + "to": [ 3, 9.5, 11.5 ], + "faces": { + "down": { "uv": [ 13.5, 11.5, 13, 5.5 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 2.5, 5.5, 3, 11.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 13, 6.5, 13.5, 12 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 2.5, 6.5, 3, 12 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 5.5, 6.5, 11.5, 12 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 4.5, 6.5, 10.5, 12 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 5, 2.5, 2.5 ], + "to": [ 10, 7, 3 ], + "faces": { + "down": { "uv": [ 11, 3, 6, 2.5 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 5, 2.5, 10, 3 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 6, 9, 11, 13.5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 5, 9, 10, 13.5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 2.5, 9, 3, 13.5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 13, 9, 13.5, 13.5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 13, 3, 4 ], + "to": [ 13.5, 9.5, 11.5 ], + "faces": { + "down": { "uv": [ 3, 11.5, 2.5, 4 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 13, 4, 13.5, 11.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 2.5, 6.5, 3, 13 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 13, 6.5, 13.5, 13 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 4, 6.5, 11.5, 13 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 4.5, 6.5, 12, 13 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 6, 3.5, 13 ], + "to": [ 11, 9, 13.5 ], + "faces": { + "down": { "uv": [ 10, 13.5, 5, 13 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 6, 13, 11, 13.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 5, 7, 10, 12.5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 6, 7, 11, 12.5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 13, 7, 13.5, 12.5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 2.5, 7, 3, 12.5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 5, 0.5, 5 ], + "to": [ 11, 1, 11.5 ], + "faces": { + "down": { "uv": [ 11, 11.5, 5, 5 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 5, 5, 11, 11.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 5, 15, 11, 15.5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 5, 15, 11, 15.5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 5, 15, 11.5, 15.5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 4.5, 15, 11, 15.5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 4, 11, 9 ], + "to": [ 9.5, 11.5, 12 ], + "faces": { + "down": { "uv": [ 12, 12, 6.5, 9 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 4, 9, 9.5, 12 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 6.5, 4.5, 12, 5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 4, 4.5, 9.5, 5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 9, 4.5, 12, 5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 4, 4.5, 7, 5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 6.5, 11.5, 6 ], + "to": [ 11, 12, 9 ], + "faces": { + "down": { "uv": [ 9.5, 9, 5, 6 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 6.5, 6, 11, 9 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 5, 4, 9.5, 4.5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 6.5, 4, 11, 4.5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 6, 4, 9, 4.5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 7, 4, 10, 4.5 ], "texture": "#texture", "tintindex": 0 } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe.json new file mode 100644 index 00000000..bd31ecc4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + }, + "elements": [ + { + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_d.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_d.json new file mode 100644 index 00000000..0a638e8e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_d.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_n.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_n.json new file mode 100644 index 00000000..7dd5cdf2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_n.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nd.json new file mode 100644 index 00000000..9742f4e7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nd.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ne.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ne.json new file mode 100644 index 00000000..89bc64d6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ne.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ned.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ned.json new file mode 100644 index 00000000..9c7bf462 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ned.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nes.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nes.json new file mode 100644 index 00000000..d51f49f5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nes.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesd.json new file mode 100644 index 00000000..7e5d371a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesd.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesu.json new file mode 100644 index 00000000..d9ecd48a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesu.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesud.json new file mode 100644 index 00000000..f8827fcf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesud.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesw.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesw.json new file mode 100644 index 00000000..ae179447 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesw.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswd.json new file mode 100644 index 00000000..fb02880e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswd.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswu.json new file mode 100644 index 00000000..ced802da --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswu.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswud.json new file mode 100644 index 00000000..c1df6bd8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswud.json @@ -0,0 +1,101 @@ +{ + "parent": "block/block", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" + }, + "elements": [ + { + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } + }, + { + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } + }, + { + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } + }, + { + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } + }, + { + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } + }, + { + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } + }, + { + "__comment": "Down", + "from": [ 6.5, 0.0625, 6.5 ], + "to": [ 9.5, 6.5625, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neu.json new file mode 100644 index 00000000..9e35437c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neud.json new file mode 100644 index 00000000..c7f1ac6e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ns.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ns.json new file mode 100644 index 00000000..b2f6fd3f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ns.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsd.json new file mode 100644 index 00000000..131f11c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsd.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsu.json new file mode 100644 index 00000000..2364c929 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsud.json new file mode 100644 index 00000000..b1f4d015 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nu.json new file mode 100644 index 00000000..c36a7fe0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nu.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nud.json new file mode 100644 index 00000000..457c7fe1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nud.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_d.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_d.json new file mode 100644 index 00000000..6f6b4570 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_d.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_Down", + "from": [ 6, 0.01, 6 ], + "to": [ 10, 4, 10 ], + "faces": { + "down": { "uv": [ 16, 4, 12, 0 ], "texture": "#pull_texture" }, + "up": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_e.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_e.json new file mode 100644 index 00000000..385ec7a8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_e.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_East", + "from": [ 12, 6, 6 ], + "to": [ 15.99, 10, 10 ], + "faces": { + "down": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "up": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_n.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_n.json new file mode 100644 index 00000000..752c22d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_n.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_North", + "from": [ 6, 6, 0.01 ], + "to": [ 10, 10, 4 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "up": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_s.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_s.json new file mode 100644 index 00000000..2d70c126 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_s.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_South", + "from": [ 6, 6, 12 ], + "to": [ 10, 10, 15.99 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "up": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_u.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_u.json new file mode 100644 index 00000000..6ae9c33d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_u.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_Up", + "from": [ 6, 12, 6 ], + "to": [ 10, 15.99, 10 ], + "faces": { + "down": { "uv": [ 4, 4, 0, 0 ], "texture": "#pull_texture" }, + "up": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_w.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_w.json new file mode 100644 index 00000000..90606c15 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_w.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_West", + "from": [ 0.01, 6, 6 ], + "to": [ 4, 10, 10 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "up": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_u.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_u.json new file mode 100644 index 00000000..1ebacc6c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_u.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ud.json new file mode 100644 index 00000000..c83acab8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ud.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fuel_loader_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fuel_loader_model.json new file mode 100644 index 00000000..202c12cd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fuel_loader_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine_fuelloader", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_fuelloader", + "west": "galacticraftcore:blocks/machine_fuel_input" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/gc_wall_inventory.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/gc_wall_inventory.json new file mode 100644 index 00000000..ecb7f803 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/gc_wall_inventory.json @@ -0,0 +1,45 @@ +{ + "parent": "block/block", + "ambientocclusion": false, + "display": { + "gui": { + "rotation": [ 30, 135, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "fixed": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + }, + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 4, 0, 4 ], + "to": [ 12, 16, 12 ], + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall_bot", "cullface": "down" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall_top" }, + "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, + "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, + "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, + "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } + }, + "__comment": "Center post" + }, + { "from": [ 5, 0, 0 ], + "to": [ 11, 13, 16 ], + "faces": { + "down": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall_bot", "cullface": "down" }, + "up": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall_top" }, + "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, + "south": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "south" }, + "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" }, + "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" } + }, + "__comment": "Full wall" + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s1.json new file mode 100644 index 00000000..6e9aa9a3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s1.json @@ -0,0 +1,64 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 14.0, 16.0 ], "rotation": 180 }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 4.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 0.0, 8.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 4.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ], "rotation": 180 }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 10.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 14.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 0.0, 13.0, 7.0 ], "rotation": 270 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 0.0, 14.0, 7.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 6.0, 16.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 8.0, 0.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 10.0, 4.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 10.0, 8.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 12.0, 3.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 9.0, 15.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 6.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 8.0, 13.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 9.0, 4.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 4.0, 12.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 12.0, 0.0, 2.0 ], + "to": [ 14.0, 3.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 4.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 12.0, 4.0, 15.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 4.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 4.0, 6.0, 6.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s2.json new file mode 100644 index 00000000..fd015b0b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s2.json @@ -0,0 +1,122 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 14.0, 16.0 ], "rotation": 180 }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 4.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 0.0, 8.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 4.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ], "rotation": 180 }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 10.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 14.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 0.0, 13.0, 7.0 ], "rotation": 270 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 0.0, 14.0, 7.0 ] } + } + }, + { + "name": "base2", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 6.0, 16.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 8.0, 0.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 10.0, 4.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 10.0, 8.0 ] } + } + }, + { + "name": "grout2", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 12.0, 3.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 9.0, 15.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 6.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 8.0, 13.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 9.0, 4.0 ] } + } + }, + { + "name": "infill", + "from": [ 12.0, 0.0, 2.0 ], + "to": [ 14.0, 3.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 4.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 4.0, 16.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 4.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 4.0, 6.0, 6.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 4.0 ], + "to": [ 16.0, 16.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 14.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 4.0, 2.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 16.0, 0.0, 14.0, 8.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 4.0 ], + "to": [ 16.0, 14.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 10.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 14.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 7.0, 0.0, 8.0, 7.0 ], "rotation": 270 }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 13.0, 7.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 6.0, 16.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 16.0, 8.0, 14.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 10.0, 4.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 10.0, 8.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 12.0, 14.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 9.0, 15.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 6.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 7.0, 8.0, 8.0, 12.0 ], "rotation": 270 }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 7.0, 9.0, 11.0 ] } + } + }, + { + "name": "Cube", + "from": [ 12.0, 13.0, 2.0 ], + "to": [ 14.0, 16.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 4.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 5.0, 4.0, 8.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 4.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 4.0, 6.0, 6.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1.json new file mode 100644 index 00000000..2c4d8574 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1.json @@ -0,0 +1,27 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1b.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1b.json new file mode 100644 index 00000000..03d3b466 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1b.json @@ -0,0 +1,52 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 14.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 13.0 ], + "to": [ 11.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] } + } + } + + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1bb.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1bb.json new file mode 100644 index 00000000..3eafdbf0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1bb.json @@ -0,0 +1,78 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 14.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 13.0 ], + "to": [ 11.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 11.0, 16.0, 3.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] } + } + } + + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2.json new file mode 100644 index 00000000..fe2ea185 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2.json @@ -0,0 +1,51 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 2.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 16.0 ] } + } + }, + { + "name": "base1", + "from": [ 4.0, 2.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 16.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "grout1", + "from": [ 5.0, 3.0, 2.0 ], + "to": [ 11.0, 16.0, 3.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 13.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 3.0, 13.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2a.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2a.json new file mode 100644 index 00000000..35bb65c8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2a.json @@ -0,0 +1,52 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout2", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 11.0, 14.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2b.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2b.json new file mode 100644 index 00000000..2df5f706 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2b.json @@ -0,0 +1,73 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 2.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 16.0 ] } + } + }, + { + "name": "base1", + "from": [ 4.0, 2.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ] } + } + }, + { + "name": "grout1", + "from": [ 5.0, 3.0, 2.0 ], + "to": [ 11.0, 16.0, 3.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 13.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 3.0, 13.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 14.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 13.0 ], + "to": [ 11.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s3.json new file mode 100644 index 00000000..81609109 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s3.json @@ -0,0 +1,73 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 2.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 16.0 ] } + } + }, + { + "name": "base1", + "from": [ 4.0, 2.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "grout1", + "from": [ 5.0, 3.0, 2.0 ], + "to": [ 11.0, 14.0, 3.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 13.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 2.0, 3.0, 13.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 2.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 2.0, 2.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] } + } + }, + { + "name": "grout2", + "from": [ 5.0, 13.0, 3.0 ], + "to": [ 11.0, 14.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 14.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 13.0, 11.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 13.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s4.json new file mode 100644 index 00000000..825fc6ac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s4.json @@ -0,0 +1,92 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "base1", + "from": [ 4.0, 2.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "grout1", + "from": [ 5.0, 3.0, 2.0 ], + "to": [ 11.0, 14.0, 3.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 13.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 2.0, 3.0, 13.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 2.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 2.0, 2.0, 16.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] } + } + }, + { + "name": "grout2", + "from": [ 5.0, 13.0, 3.0 ], + "to": [ 11.0, 14.0, 14.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 11.0 ] } + } + }, + { + "name": "grout3", + "from": [ 5.0, 3.0, 13.0 ], + "to": [ 11.0, 13.0, 14.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 3.0, 11.0, 13.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] } + } + }, + { + "name": "side2", + "from": [ 4.0, 2.0, 14.0 ], + "to": [ 12.0, 14.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 14.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s1.json new file mode 100644 index 00000000..816d33c4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s1.json @@ -0,0 +1,46 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "base2", + "from": [ 12.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "grout2", + "from": [ 11.0, 2.0, 5.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s2.json new file mode 100644 index 00000000..1f2d4da8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s2.json @@ -0,0 +1,99 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "base2", + "from": [ 12.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "grout2", + "from": [ 11.0, 2.0, 5.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grouttop", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 11.0, 14.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "top", + "from": [ 12.0, 14.0, 4.0 ], + "to": [ 16.0, 16.0, 12.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 14.0, 4.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 14.0, 4.0, 16.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 4.0, 4.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 4.0, 4.0, 12.0 ] } + } + }, + { + "name": "grouttop", + "from": [ 11.0, 13.0, 5.0 ], + "to": [ 16.0, 14.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + } + + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s1.json new file mode 100644 index 00000000..c93ffcbc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s1.json @@ -0,0 +1,68 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "base2", + "from": [ 12.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout2", + "from": [ 11.0, 2.0, 5.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + }, + { + "name": "base3", + "from": [ 0.0, 0.0, 4.0 ], + "to": [ 4.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout3", + "from": [ 0.0, 2.0, 5.0 ], + "to": [ 5.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + } + + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s2.json new file mode 100644 index 00000000..9b6d4fd6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s2.json @@ -0,0 +1,130 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "base2", + "from": [ 12.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout2", + "from": [ 11.0, 2.0, 5.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + }, + { + "name": "base3", + "from": [ 0.0, 0.0, 4.0 ], + "to": [ 4.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout3", + "from": [ 0.0, 2.0, 5.0 ], + "to": [ 5.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grouttop", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 11.0, 14.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "topbar", + "from": [ 12.0, 14.0, 4.0 ], + "to": [ 16.0, 16.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grouttopbar", + "from": [ 11.0, 13.0, 5.0 ], + "to": [ 16.0, 14.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "topbar2", + "from": [ 0.0, 14.0, 4.0 ], + "to": [ 4.0, 16.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grouttopbar2", + "from": [ 0.0, 13.0, 5.0 ], + "to": [ 5.0, 14.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne.json new file mode 100644 index 00000000..6cd02a43 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne.json @@ -0,0 +1,48 @@ +{ + "elements": [ + { + "name": "1b", + "from": [ 12.9497, 0.0, 1.6360 ], + "to": [ 12.9497, 16.0, 14.3640 ], + "shade": false, + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, + "up": { "texture": "#-1", "uv": [ 7.0, 0.0, 9.0, 9.0 ] } + } + }, + { + "name": "1a", + "from": [ 12.2426, 0.0, 0.9289 ], + "to": [ 12.2426, 16.0, 15.0711 ], + "shade": false, + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.0 ] }, + "up": { "texture": "#-1", "uv": [ 7.0, 0.0, 9.0, 9.0 ] } + } + }, + { + "name": "2b", + "from": [ 15.0711, 0.0, 3.7574 ], + "to": [ 15.0711, 16.0, 12.2426 ], + "shade": false, + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 4.0, 1.0, 12.0, 15.0 ] }, + "up": { "texture": "#-1", "uv": [ 7.0, 0.0, 9.0, 9.0 ] } + } + }, + { + "name": "2a", + "from": [ 14.3640, 0.0, 3.0503 ], + "to": [ 14.3640, 16.0, 12.9497 ], + "shade": false, + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 13.0, 1.0, 5.0, 15.0 ] }, + "up": { "texture": "#-1", "uv": [ 7.0, 0.0, 9.0, 9.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s1.json new file mode 100644 index 00000000..17164f69 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s1.json @@ -0,0 +1,40 @@ +{ + "elements": [ + { + "name": "1b", + "from": [ 12.9497, 3.0, 1.636 ], + "to": [ 12.9497, 16.0, 14.364 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 16.0 ] } + } + }, + { + "name": "1a", + "from": [ 12.2426, 3.0, 0.9289 ], + "to": [ 12.2426, 16.0, 15.0711 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 16.0 ] } + } + }, + { + "name": "2b", + "from": [ 15.0711, 3.0, 3.7574 ], + "to": [ 15.0711, 16.0, 12.2426 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 4.0, 1.0, 12.0, 16.0 ] } + } + }, + { + "name": "2a", + "from": [ 14.364, 3.0, 3.0503 ], + "to": [ 14.364, 16.0, 12.9497 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 13.0, 1.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s2.json new file mode 100644 index 00000000..17164f69 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s2.json @@ -0,0 +1,40 @@ +{ + "elements": [ + { + "name": "1b", + "from": [ 12.9497, 3.0, 1.636 ], + "to": [ 12.9497, 16.0, 14.364 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 16.0 ] } + } + }, + { + "name": "1a", + "from": [ 12.2426, 3.0, 0.9289 ], + "to": [ 12.2426, 16.0, 15.0711 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 16.0 ] } + } + }, + { + "name": "2b", + "from": [ 15.0711, 3.0, 3.7574 ], + "to": [ 15.0711, 16.0, 12.2426 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 4.0, 1.0, 12.0, 16.0 ] } + } + }, + { + "name": "2a", + "from": [ 14.364, 3.0, 3.0503 ], + "to": [ 14.364, 16.0, 12.9497 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 13.0, 1.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns.json new file mode 100644 index 00000000..e58cc39f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "Element", + "from": [ 6.0, 0.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Cube", + "from": [ 9.0, 0.0, 0.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1.json new file mode 100644 index 00000000..a48198f0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 1.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1b.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1b.json new file mode 100644 index 00000000..2c86d5fc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1b.json @@ -0,0 +1,64 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.8825 ] } + } + }, + { + "name": "pane1a", + "from": [ 6.0, 13.0, 0.0 ], + "to": [ 7.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 15.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane1b", + "from": [ 6.0, 3.0, 12.375 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.8825 ] } + } + }, + { + "name": "pane2a", + "from": [ 9.0, 13.0, 0.0 ], + "to": [ 10.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 15.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane2b", + "from": [ 9.0, 3.0, 12.375 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1bb.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1bb.json new file mode 100644 index 00000000..ced60258 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1bb.json @@ -0,0 +1,64 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.8825 ] } + } + }, + { + "name": "pane1a", + "from": [ 6.0, 13.0, 0.0 ], + "to": [ 7.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 16.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 4.0, 1.0, 9.0 ] } + } + }, + { + "name": "pane1b", + "from": [ 6.0, 3.0, 12.375 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 16.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.8825 ] } + } + }, + { + "name": "pane2a", + "from": [ 9.0, 13.0, 0.0 ], + "to": [ 10.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 16.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane2b", + "from": [ 9.0, 3.0, 12.375 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2.json new file mode 100644 index 00000000..3e721746 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 3.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 3.0, 3.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 3.0, 3.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 3.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 3.0, 3.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 3.0, 3.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2a.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2a.json new file mode 100644 index 00000000..6d9067ba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2a.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 1.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2b.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2b.json new file mode 100644 index 00000000..c8d1f19c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2b.json @@ -0,0 +1,64 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 3.0 ], + "to": [ 7.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 2.0, 1.0, 15.8825, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.8825, 1.0, 2.0, 15.8825 ] } + } + }, + { + "name": "pane1a", + "from": [ 6.0, 13.0, 3.0 ], + "to": [ 7.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 16.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane1b", + "from": [ 6.0, 3.0, 12.375 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 3.0 ], + "to": [ 10.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 2.0, 1.0, 15.8825, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.8825, 1.0, 2.0, 15.8825 ] } + } + }, + { + "name": "pane2a", + "from": [ 9.0, 13.0, 3.0 ], + "to": [ 10.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 16.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane2b", + "from": [ 9.0, 3.0, 12.375 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s3.json new file mode 100644 index 00000000..99235d31 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s3.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 3.0 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.7071, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.7071, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 3.0 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.7071, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.7071, 0.0, 1.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s4.json new file mode 100644 index 00000000..10415b2f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s4.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 3.0 ], + "to": [ 7.0, 13.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 0.0, 0.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 3.0 ], + "to": [ 10.0, 13.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 0.0, 0.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse.json new file mode 100644 index 00000000..46a03f5c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse.json @@ -0,0 +1,74 @@ +{ + "elements": [ + { + "name": "Element", + "from": [ 6.0, 0.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 0.0, 10.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Cube", + "from": [ 9.0, 0.0, 0.0 ], + "to": [ 10.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 0.0, 6.0 ], + "to": [ 16.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 0.0, 9.0 ], + "to": [ 16.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 0.0, 9.0 ], + "to": [ 10.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 1.0, 9.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 7.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 0.0, 6.0 ], + "to": [ 10.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s1.json new file mode 100644 index 00000000..1387bdb7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s1.json @@ -0,0 +1,74 @@ +{ + "elements": [ + { + "name": "Element", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 3.0, 10.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 3.0, 6.0 ], + "to": [ 16.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 3.0, 9.0 ], + "to": [ 16.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 9.0 ], + "to": [ 10.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 4.0, 9.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 6.0 ], + "to": [ 10.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s2.json new file mode 100644 index 00000000..5b58d7d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s2.json @@ -0,0 +1,74 @@ +{ + "elements": [ + { + "name": "Element", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 3.0, 10.0 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 13.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 3.0, 6.0 ], + "to": [ 16.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 3.0, 9.0 ], + "to": [ 16.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 9.0 ], + "to": [ 10.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 0.0, 9.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 6.0 ], + "to": [ 10.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew.json new file mode 100644 index 00000000..956ab53f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew.json @@ -0,0 +1,124 @@ +{ + "elements": [ + { + "name": "Branch", + "from": [ 9.0, 0.0, 10.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Branchb", + "from": [ 9.0, 0.0, 0.0 ], + "to": [ 10.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 0.0, 6.0 ], + "to": [ 16.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 0.0, 9.0 ], + "to": [ 16.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 0.0, 9.0 ], + "to": [ 10.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 1.0, 9.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 7.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 0.0, 6.0 ], + "to": [ 10.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] } + } + }, + { + "name": "Stalkc", + "from": [ 0.0, 0.0, 6.0 ], + "to": [ 6.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] } + } + }, + { + "name": "Stalkd", + "from": [ 0.0, 0.0, 9.0 ], + "to": [ 6.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] } + } + }, + { + "name": "Branchd", + "from": [ 6.0, 0.0, 10.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Branchc", + "from": [ 6.0, 0.0, 0.0 ], + "to": [ 7.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 0.0, 6.0 ], + "to": [ 7.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 6.0, 1.0, 7.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 0.0, 9.0 ], + "to": [ 7.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 7.0, 1.0, 6.0, 15.0 ] }, + "east": { "texture": "#0", "uv": [ 6.0, 1.0, 7.0, 15.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s1.json new file mode 100644 index 00000000..28269813 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s1.json @@ -0,0 +1,124 @@ +{ + "elements": [ + { + "name": "Branch", + "from": [ 9.0, 3.0, 10.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branchb", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 3.0, 6.0 ], + "to": [ 16.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 3.0, 9.0 ], + "to": [ 16.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 9.0 ], + "to": [ 10.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 4.0, 9.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 6.0 ], + "to": [ 10.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkc", + "from": [ 0.0, 3.0, 6.0 ], + "to": [ 6.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] } + } + }, + { + "name": "Stalkd", + "from": [ 0.0, 3.0, 9.0 ], + "to": [ 6.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] } + } + }, + { + "name": "Branchd", + "from": [ 6.0, 3.0, 10.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branchc", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 3.0, 6.0 ], + "to": [ 7.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 6.0, 4.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 3.0, 9.0 ], + "to": [ 7.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 7.0, 4.0, 6.0, 16.0 ] }, + "east": { "texture": "#0", "uv": [ 6.0, 4.0, 7.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s2.json new file mode 100644 index 00000000..2537f765 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s2.json @@ -0,0 +1,124 @@ +{ + "elements": [ + { + "name": "Branch", + "from": [ 9.0, 3.0, 10.0 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branchb", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 13.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 3.0, 6.0 ], + "to": [ 16.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 3.0, 9.0 ], + "to": [ 16.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 9.0 ], + "to": [ 10.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 0.0, 9.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 6.0 ], + "to": [ 10.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkc", + "from": [ 0.0, 3.0, 6.0 ], + "to": [ 6.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] } + } + }, + { + "name": "Stalkd", + "from": [ 0.0, 3.0, 9.0 ], + "to": [ 6.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] } + } + }, + { + "name": "Branchd", + "from": [ 6.0, 3.0, 10.0 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branchc", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 3.0, 6.0 ], + "to": [ 7.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 6.0, 0.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 3.0, 9.0 ], + "to": [ 7.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 7.0, 0.0, 6.0, 16.0 ] }, + "east": { "texture": "#0", "uv": [ 6.0, 0.0, 7.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/spaceglass_ns_inventory.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/spaceglass_ns_inventory.json new file mode 100644 index 00000000..6d24976f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/spaceglass_ns_inventory.json @@ -0,0 +1,25 @@ +{ + "parent": "block/block", + "elements": [ + { + "name": "Element", + "from": [ 6.0, 0.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 0.0, 0.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 9.0, 0.0, 0.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 0.0, 0.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_model.json new file mode 100644 index 00000000..c485d43b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/glowstone_torch", + "gstorch": "galacticraftcore:blocks/glowstone_torch" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#gstorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#gstorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_wall_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_wall_model.json new file mode 100644 index 00000000..4c52fcd8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/glowstone_torch", + "gstorch": "galacticraftcore:blocks/glowstone_torch" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#gstorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#gstorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/grating.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/grating.json new file mode 100644 index 00000000..91203849 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/grating.json @@ -0,0 +1,354 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/screen_side", + "0": "galacticraftcore:blocks/screen_side" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 14.0, 1.5 ], + "to": [ 16.0, 15.99, 2.5 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 1.0, 16.0, 3.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 13.0, 16.0, 15.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 5.5 ], + "to": [ 16.0, 15.99, 6.5 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 5.0, 16.0, 7.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 9.0, 16.0, 11.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 9.5 ], + "to": [ 16.0, 15.99, 10.5 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 9.0, 16.0, 11.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 5.0, 16.0, 7.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 13.5 ], + "to": [ 16.0, 15.99, 14.5 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 13.0, 16.0, 15.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 1.0, 16.0, 3.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 0.0 ], + "to": [ 2.5, 15.99, 1.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 1.5 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 1.5 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 2.5 ], + "to": [ 2.5, 15.99, 5.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 2.5, 2.5, 5.5 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 2.5, 14.5, 5.5 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 6.5 ], + "to": [ 2.5, 15.99, 9.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 6.5, 2.5, 9.5 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 6.5, 14.5, 9.5 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 10.5 ], + "to": [ 2.5, 15.99, 13.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 10.5, 2.5, 13.5 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 10.5, 14.5, 13.5 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 14.5 ], + "to": [ 2.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 14.5, 2.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 14.5, 14.5, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 14.5 ], + "to": [ 2.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 14.5, 2.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 14.5, 14.5, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 0.0 ], + "to": [ 6.5, 15.99, 1.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 1.5 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 1.5 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 2.5 ], + "to": [ 6.5, 15.99, 5.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 2.5, 6.5, 5.5 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 2.5, 10.5, 5.5 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 6.5 ], + "to": [ 6.5, 15.99, 9.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 6.5, 6.5, 9.5 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 6.5, 10.5, 9.5 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 10.5 ], + "to": [ 6.5, 15.99, 13.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 10.5, 6.5, 13.5 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 10.5, 10.5, 13.5 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 14.5 ], + "to": [ 6.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 14.5, 6.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 14.5, 10.5, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 0.0 ], + "to": [ 10.5, 15.99, 1.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 1.5 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 1.5 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 2.5 ], + "to": [ 10.5, 15.99, 5.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 2.5, 10.5, 5.5 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 2.5, 6.5, 5.5 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 6.5 ], + "to": [ 10.5, 15.99, 9.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 6.5, 10.5, 9.5 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 6.5, 6.5, 9.5 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 10.5 ], + "to": [ 10.5, 15.99, 13.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 10.5, 10.5, 13.5 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 10.5, 6.5, 13.5 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 14.5 ], + "to": [ 10.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 14.5, 10.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 14.5, 6.5, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 0.0 ], + "to": [ 14.5, 15.99, 1.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 1.5 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 1.5 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 2.5 ], + "to": [ 14.5, 15.99, 5.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 2.5, 14.5, 5.5 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 2.5, 2.5, 5.5 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 6.5 ], + "to": [ 14.5, 15.99, 9.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 6.5, 14.5, 9.5 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 6.5, 2.5, 9.5 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 10.5 ], + "to": [ 14.5, 15.99, 13.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 10.5, 14.5, 13.5 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 10.5, 2.5, 13.5 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 14.5 ], + "to": [ 14.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 14.5, 14.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 14.5, 2.5, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_asteroid.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_asteroid.json new file mode 100644 index 00000000..6faa3112 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_asteroid.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/screen_side", + "top": "galacticraftcore:blocks/screen_side", + "side": "galacticraftcore:blocks/screen_side" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_cobblestone.json new file mode 100644 index 00000000..13eb8b3b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_cobblestone.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_dungeon_brick.json new file mode 100644 index 00000000..9799e477 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_dungeon_brick.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_dungeon_brick.json new file mode 100644 index 00000000..c2470363 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_dungeon_brick.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_stone.json new file mode 100644 index 00000000..7b4c6058 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_stone.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_1.json new file mode 100644 index 00000000..9ee78163 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_1.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_2.json new file mode 100644 index 00000000..b0213cb0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_2.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire.json new file mode 100644 index 00000000..b4374a71 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire.json @@ -0,0 +1,22 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_d.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_d.json new file mode 100644 index 00000000..a6f874aa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_d.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_n.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_n.json new file mode 100644 index 00000000..502d7aad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_n.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nd.json new file mode 100644 index 00000000..96d602cd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nd.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ne.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ne.json new file mode 100644 index 00000000..eaadb0e4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ne.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ned.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ned.json new file mode 100644 index 00000000..1fec0a0c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ned.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nes.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nes.json new file mode 100644 index 00000000..d4c8962d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nes.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesd.json new file mode 100644 index 00000000..2ebae83b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesd.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesu.json new file mode 100644 index 00000000..4feafd36 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesu.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesud.json new file mode 100644 index 00000000..5baf4099 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesud.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesw.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesw.json new file mode 100644 index 00000000..791e358b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesw.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 5.6, 5.6 ], + "to": [ 5.6, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswd.json new file mode 100644 index 00000000..d67a8f2f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswd.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 5.6, 5.6 ], + "to": [ 5.6, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswu.json new file mode 100644 index 00000000..f9e29ba0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswu.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 5.6, 5.6 ], + "to": [ 5.6, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswud.json new file mode 100644 index 00000000..a2ac26ad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswud.json @@ -0,0 +1,100 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 5.6, 5.6 ], + "to": [ 5.6, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neu.json new file mode 100644 index 00000000..d6aa59e5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neud.json new file mode 100644 index 00000000..8ac0c3db --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ns.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ns.json new file mode 100644 index 00000000..a0922d1c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ns.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsd.json new file mode 100644 index 00000000..75160574 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsd.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsu.json new file mode 100644 index 00000000..0b5df7ef --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsud.json new file mode 100644 index 00000000..52dd7407 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nu.json new file mode 100644 index 00000000..9fb7c1e3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nu.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nud.json new file mode 100644 index 00000000..53cbdac5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nud.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_u.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_u.json new file mode 100644 index 00000000..3775862b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_u.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ud.json new file mode 100644 index 00000000..b695d4b7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ud.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ingot_compressor_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ingot_compressor_model.json new file mode 100644 index 00000000..74921f58 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ingot_compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/compressor", + "east": "galacticraftcore:blocks/machine_side", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_full_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_full_model.json new file mode 100644 index 00000000..c5b0647b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_full_model.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 4, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/landing_pad", + "down": "galacticraftcore:blocks/landing_pad", + "up": "galacticraftcore:blocks/landing_pad", + "north": "galacticraftcore:blocks/landing_pad", + "east": "galacticraftcore:blocks/landing_pad", + "south": "galacticraftcore:blocks/landing_pad", + "west": "galacticraftcore:blocks/landing_pad" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_model.json new file mode 100644 index 00000000..c90f05ec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_model.json @@ -0,0 +1,25 @@ +{ + "parent": "block/thin_block", + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 3, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/landing_pad", + "down": "galacticraftcore:blocks/landing_pad", + "up": "galacticraftcore:blocks/landing_pad", + "north": "galacticraftcore:blocks/landing_pad", + "east": "galacticraftcore:blocks/landing_pad", + "south": "galacticraftcore:blocks/landing_pad", + "west": "galacticraftcore:blocks/landing_pad" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_bl.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_bl.json new file mode 100644 index 00000000..0aa3c46b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_bl.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#side", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_br.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_br.json new file mode 100644 index 00000000..81c0e450 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_br.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#side", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lb.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lb.json new file mode 100644 index 00000000..12412b5b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lb.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#side", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lr.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lr.json new file mode 100644 index 00000000..884b884f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lr.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#rear", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rb.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rb.json new file mode 100644 index 00000000..a48a6452 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rb.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#side", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rl.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rl.json new file mode 100644 index 00000000..9d4faf95 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rl.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#rear", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/magnetic_table_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/magnetic_table_model.json new file mode 100644 index 00000000..c46c02f9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/magnetic_table_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/crafting_table_top", + "down": "galacticraftcore:blocks/crafting_table_base", + "up": "galacticraftcore:blocks/crafting_table_top", + "north": "galacticraftcore:blocks/crafting_table_side", + "east": "galacticraftcore:blocks/crafting_table_side", + "south": "galacticraftcore:blocks/crafting_table_side", + "west": "galacticraftcore:blocks/crafting_table_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_cobblestone_wall_inventory.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_cobblestone_wall_inventory.json new file mode 100644 index 00000000..8f56cf50 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_cobblestone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_dungeon_brick_wall_inventory.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_dungeon_brick_wall_inventory.json new file mode 100644 index 00000000..58484197 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_dungeon_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_inner_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_inner_stairs.json new file mode 100644 index 00000000..ecc3f86b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_outer_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_outer_stairs.json new file mode 100644 index 00000000..b0bb6ef2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_stairs.json new file mode 100644 index 00000000..5bce98c4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dirt_moon_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dirt_moon_model.json new file mode 100644 index 00000000..82da5942 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dirt_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/middle" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_model.json new file mode 100644 index 00000000..fbf221c1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/brick" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_wall_inventory.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_wall_inventory.json new file mode 100644 index 00000000..44627838 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_inner_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_inner_stairs.json new file mode 100644 index 00000000..06fdf743 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_model.json new file mode 100644 index 00000000..791875e4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/bottom" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_outer_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_outer_stairs.json new file mode 100644 index 00000000..def9dc0b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_stairs.json new file mode 100644 index 00000000..d2b77efb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_wall_inventory.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_wall_inventory.json new file mode 100644 index 00000000..8e95de60 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_turf_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_turf_model.json new file mode 100644 index 00000000..0bac4e51 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_turf_model.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up", "tintindex": 0 }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/top", + "bottom": "galacticraftcore:blocks/middle", + "top": "galacticraftcore:blocks/top", + "side": "galacticraftcore:blocks/top_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_aluminum_gc_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_aluminum_gc_model.json new file mode 100644 index 00000000..eb12f4ae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_aluminum_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_aluminum" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_cheese_moon_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_cheese_moon_model.json new file mode 100644 index 00000000..bfb2d044 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_cheese_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/moonore_cheese" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_gc_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_gc_model.json new file mode 100644 index 00000000..f9c36759 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_copper" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_moon_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_moon_model.json new file mode 100644 index 00000000..8d974fad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_copper_moon" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_sapphire_moon_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_sapphire_moon_model.json new file mode 100644 index 00000000..33666b8f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_sapphire_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/moonore_sapphire" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_silicon_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_silicon_model.json new file mode 100644 index 00000000..8e2fcb2e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_silicon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_silicon" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_gc_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_gc_model.json new file mode 100644 index 00000000..aa2a05bd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_tin" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_moon_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_moon_model.json new file mode 100644 index 00000000..e3886d1c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_tin_moon" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/oxygen_storage_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/oxygen_storage_model.json new file mode 100644 index 00000000..956fdb51 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/oxygen_storage_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/oxygen_storage_module_full", + "east": "galacticraftcore:blocks/machine_oxygen_input", + "south": "galacticraftcore:blocks/oxygen_storage_module_full", + "west": "galacticraftcore:blocks/machine_oxygen_output" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/painter_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/painter_model.json new file mode 100644 index 00000000..aacd94c5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/painter_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine_painter", + "up": "galacticraftcore:blocks/machine_painter", + "north": "galacticraftcore:blocks/machine_painter", + "east": "galacticraftcore:blocks/machine", + "south": "galacticraftcore:blocks/machine_painter", + "west": "galacticraftcore:blocks/machine" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/panel_lighting.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/panel_lighting.json new file mode 100644 index 00000000..28c99297 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/panel_lighting.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "#texture", + "down": "#texture", + "up": "#texture", + "north": "#texture", + "east": "#lights", + "south": "#texture", + "west": "#texture" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/parachest.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/parachest.json new file mode 100644 index 00000000..08a47c01 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/parachest.json @@ -0,0 +1,101 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftcore:blocks/parachest", + "texture": "galacticraftcore:blocks/parachest", + "chute": "galacticraftcore:model/parachute/red" +}, +"display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 9, 15 ], + "faces": { + "down": { "uv": [ 10.5, 8.25, 7, 4.75 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 8.5, 14, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8.5, 7, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.5, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 3.5, 10.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 10.5, 3.5, 7, 0 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 7, 15 ], + "to": [ 9.25, 11, 16 ], + "faces": { + "down": { "uv": [ 1.25, 0.25, 0.75, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0.25, 0, 0.75, 0.25 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0.25, 0.5, 1.5 ], "texture": "#texture" }, + "south": { "uv": [ 1.25, 0.25, 0.75, 1.5 ], "texture": "#texture" }, + "west": { "uv": [ 2, 0.5, 2.25, 1.5 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 0.5, 1.75, 1.5 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 14, 1 ], + "to": [ 13, 15, 12.5 ], + "faces": { + "down": { "uv": [ 2.875, 2.75, 4.125, 4 ], "texture": "#chute" }, + "up": { "uv": [ 2.875, 3, 4.375, 4.5 ], "texture": "#chute" }, + "north": { "uv": [ 2.75, 3.875, 3.875, 5 ], "texture": "#chute" }, + "south": { "uv": [ 2.875, 3.125, 4.125, 4.375 ], "texture": "#chute" }, + "west": { "uv": [ 2.5, 2.75, 4.25, 3.125 ], "texture": "#chute" }, + "east": { "uv": [ 2.75, 3.25, 4, 3.625 ], "texture": "#chute" } + } +}, +{ + "from": [ 0, 3.5, 1 ], + "to": [ 1, 14, 12.5 ], + "faces": { + "down": { "uv": [ 4.5, 5, 4.25, 3.25 ], "texture": "#chute" }, + "up": { "uv": [ 3.375, 2.625, 3.625, 4.5 ], "texture": "#chute" }, + "north": { "uv": [ 2.75, 3, 3.125, 4.625 ], "texture": "#chute" }, + "south": { "uv": [ 3.75, 3.25, 4, 4.75 ], "texture": "#chute" }, + "west": { "uv": [ 2.875, 3, 4.5, 4.75 ], "texture": "#chute" }, + "east": { "uv": [ 2.875, 3.25, 4.375, 5 ], "texture": "#chute" } + } +}, +{ + "from": [ 1, 3.5, 0 ], + "to": [ 13, 14, 1 ], + "faces": { + "down": { "uv": [ 3.875, 3.125, 2.625, 3 ], "texture": "#chute" }, + "up": { "uv": [ 2.625, 3, 4, 3.375 ], "texture": "#chute" }, + "north": { "uv": [ 2.625, 2.875, 3.75, 3.875 ], "texture": "#chute" }, + "south": { "uv": [ 2.75, 3.125, 4, 4.25 ], "texture": "#chute" }, + "west": { "uv": [ 3.125, 3.125, 3.375, 4.5 ], "texture": "#chute" }, + "east": { "uv": [ 3.125, 3.25, 3.375, 4.625 ], "texture": "#chute" } + } +}, +{ + "from": [ 3, 15, 3.5 ], + "to": [ 10.5, 16, 10.5 ], + "faces": { + "down": { "uv": [ 3.625, 3.875, 2.625, 3 ], "texture": "#chute" }, + "up": { "uv": [ 2.5, 2.75, 3.625, 3.75 ], "texture": "#chute" }, + "north": { "uv": [ 2.625, 3.5, 3.625, 3.875 ], "texture": "#chute" }, + "south": { "uv": [ 2.625, 3.25, 3.875, 3.625 ], "texture": "#chute" }, + "west": { "uv": [ 2.625, 3, 3.625, 3.375 ], "texture": "#chute" }, + "east": { "uv": [ 2.75, 3.75, 4, 4.125 ], "texture": "#chute" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform.json new file mode 100644 index 00000000..cf396007 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform.json @@ -0,0 +1,80 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/platform_base", + "0": "galacticraftcore:blocks/platform_side", + "1": "galacticraftcore:blocks/platform_light", + "2": "galacticraftcore:blocks/platform_haz", + "3": "galacticraftcore:blocks/platform_base" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 6.0, 0.0 ], + "to": [ 16.0, 14.0, 7.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.5, 16.0, 10.5 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.5, 7.0, 10.5 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.5, 16.0, 10.5 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.5, 7.0, 10.5 ] }, + "down": { "texture": "#3", "uv": [ 0.0, 9.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 0.0 ], + "to": [ 16.0, 15.0, 7.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 1.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 9.0, 1.0, 16.0, 2.0 ] }, + "south": { "texture": "#1", "uv": [ -2.0, 5.0, 14.0, 6.0 ] }, + "west": { "texture": "#0", "uv": [ 1.0, 2.0, 8.0, 1.0 ] }, + "up": { "texture": "#1", "uv": [ -2.0, -2.0, 14.0, 5.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 7.0 ], + "to": [ 7.0, 15.0, 16.0 ], + "faces": { + "east": { "texture": "#1", "uv": [ 5.0, 16.0, 6.0, 7.0 ], "rotation": 270 }, + "south": { "texture": "#0", "uv": [ 0.0, 1.0, 7.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 2.0, 11.5, 1.0 ] }, + "up": { "texture": "#1", "uv": [ -2.0, 7.0, 5.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 15.0, 2.0 ], + "to": [ 2.0, 16.0, 16.0 ], + "faces": { + "east": { "texture": "#2", "uv": [ 3.0, 15.5, 2.0, 1.5 ], "rotation": 270 }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, + "west": { "texture": "#0", "uv": [ 2.0, 2.0, 16.0, 1.0 ] }, + "up": { "texture": "#2", "uv": [ 0.0, 1.5, 2.0, 15.5 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 15.0, 0.0 ], + "to": [ 16.0, 16.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 0.0, 16.0, 1.0 ] }, + "south": { "texture": "#2", "uv": [ 0.0, 2.0, 16.0, 3.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 1.0 ] }, + "up": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 6.0, 7.0 ], + "to": [ 7.0, 14.0, 16.0 ], + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 2.5, 9.0, 10.5 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.5, 7.0, 10.5 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.5, 9.0, 10.5 ] }, + "down": { "texture": "#3", "uv": [ 0.0, 0.0, 7.0, 9.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform_unset.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform_unset.json new file mode 100644 index 00000000..d8da8a77 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform_unset.json @@ -0,0 +1,23 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/platform_base", + "bottom": "galacticraftcore:blocks/platform_base", + "top": "galacticraftcore:blocks/platform_top", + "side": "galacticraftcore:blocks/platform_side" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 6.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "east": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "south": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "west": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "up": { "texture": "top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "bottom", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/refinery_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/refinery_model.json new file mode 100644 index 00000000..165fa4b5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/refinery_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine_input", + "north": "galacticraftcore:blocks/refinery_front", + "east": "galacticraftcore:blocks/machine_oil_input", + "south": "galacticraftcore:blocks/refinery_side", + "west": "galacticraftcore:blocks/machine_fuel_input" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/rocket_workbench_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/rocket_workbench_model.json new file mode 100644 index 00000000..9837feca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/rocket_workbench_model.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/rocket_workbench", + "particle": "galacticraftcore:blocks/rocket_workbench" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen.json new file mode 100644 index 00000000..e298478c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen.json @@ -0,0 +1,74 @@ +{ +"parent": "block/block", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen0_quarters.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen0_quarters.obj new file mode 100644 index 00000000..f9781bb5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen0_quarters.obj @@ -0,0 +1,32 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.00000 0.90000 0.00000 +v 1.00000 0.90000 0.00000 +v 1.00000 0.90000 1.00000 +v 0.00000 0.90000 1.00000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2//3 1//3 9//3 10//3 +f 1//5 4//5 12//5 9//5 +f 4//4 3//4 11//4 12//4 +f 3//6 2//6 10//6 11//6 +f 10//2 9//2 12//2 11//2 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen1_quarters.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen1_quarters.obj new file mode 100644 index 00000000..b58ff95b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen1_quarters.obj @@ -0,0 +1,39 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.00000 0.97000 0.10000 +v 1.00000 0.97000 0.10000 +v 1.00000 0.97000 1.00000 +v 0.00000 0.97000 1.00000 +v 0.00000 0.90000 0.10000 +v 1.00000 0.90000 0.10000 +v 1.00000 0.90000 1.00000 +v 0.00000 0.90000 1.00000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 +vn 0.00000 0.10000 0.03000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/3 1/2/3 5/3/3 6/4/3 +f 1//5 4//5 16//5 13//5 +f 4//4 3//4 15//4 16//4 +f 3//6 2//6 14//6 15//6 +f 6//7 5//7 9//7 10//7 +f 10//4 9//4 13//4 14//4 +f 14//2 13//2 16//2 15//2 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen2_quarters.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen2_quarters.obj new file mode 100644 index 00000000..371a6a58 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen2_quarters.obj @@ -0,0 +1,42 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.00000 0.97000 0.10000 +v 0.90000 0.97000 0.10000 +v 0.90000 0.97000 1.00000 +v 0.00000 0.97000 1.00000 +v 0.00000 0.90000 0.10000 +v 0.90000 0.90000 0.10000 +v 0.90000 0.90000 1.00000 +v 0.00000 0.90000 1.00000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 +vn 0.00000 0.10000 0.03000 +vn -0.03000 0.10000 0.00000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/3 1/2/3 5/3/3 6/4/3 +f 1//5 4//5 16//5 13//5 +f 4//4 3//4 15//4 16//4 +f 3/1/6 2/2/6 6/3/6 7/4/6 +f 6//7 5//7 9//7 10//7 +f 7//8 6//8 10//8 11//8 +f 10//4 9//4 13//4 14//4 +f 14//2 13//2 16//2 15//2 +f 11//5 10//5 14//5 15//5 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen3_quarters.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen3_quarters.obj new file mode 100644 index 00000000..d6ad17a9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen3_quarters.obj @@ -0,0 +1,45 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.00000 0.97000 0.10000 +v 0.90000 0.97000 0.10000 +v 0.90000 0.97000 0.90000 +v 0.00000 0.97000 0.90000 +v 0.00000 0.90000 0.10000 +v 0.90000 0.90000 0.10000 +v 0.90000 0.90000 0.90000 +v 0.00000 0.90000 0.90000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 +vn 0.00000 0.10000 0.03000 +vn -0.03000 0.10000 0.00000 +vn 0.00000 0.10000 -0.03000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/3 1/2/3 5/3/3 6/4/3 +f 1//5 4//5 16//5 13//5 +f 4/1/4 3/2/4 7/3/4 8/4/4 +f 3/1/6 2/2/6 6/3/6 7/4/6 +f 6//7 5//7 9//7 10//7 +f 7//8 6//8 10//8 11//8 +f 8//9 7//9 11//9 12//9 +f 10//4 9//4 13//4 14//4 +f 14//2 13//2 16//2 15//2 +f 12//3 11//3 15//3 16//3 +f 11//5 10//5 14//5 15//5 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_d.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_d.json new file mode 100644 index 00000000..34b36988 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_d.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dl.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dl.json new file mode 100644 index 00000000..ea10e8a8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dl.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dlr.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dlr.json new file mode 100644 index 00000000..9a5fab29 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dlr.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dr.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dr.json new file mode 100644 index 00000000..107c7323 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dr.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dul.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dul.json new file mode 100644 index 00000000..525180ab --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dul.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dulr.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dulr.json new file mode 100644 index 00000000..062bb016 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dulr.json @@ -0,0 +1,22 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dur.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dur.json new file mode 100644 index 00000000..894b1a16 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dur.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_l.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_l.json new file mode 100644 index 00000000..636bc5f5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_l.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_r.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_r.json new file mode 100644 index 00000000..48208e94 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_r.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_u.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_u.json new file mode 100644 index 00000000..3850e734 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_u.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ul.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ul.json new file mode 100644 index 00000000..273ef69c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ul.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ulr.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ulr.json new file mode 100644 index 00000000..fa464f6c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ulr.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ur.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ur.json new file mode 100644 index 00000000..dd59fccc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ur.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_whole.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_whole.obj new file mode 100644 index 00000000..09e6c86f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_whole.obj @@ -0,0 +1,48 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.10000 0.97000 0.10000 +v 0.90000 0.97000 0.10000 +v 0.90000 0.97000 0.90000 +v 0.10000 0.97000 0.90000 +v 0.10000 0.90000 0.10000 +v 0.90000 0.90000 0.10000 +v 0.90000 0.90000 0.90000 +v 0.10000 0.90000 0.90000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 +vn 0.00000 0.10000 0.03000 +vn -0.03000 0.10000 0.00000 +vn 0.00000 0.10000 -0.03000 +vn 0.03000 0.10000 -0.00000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/3 1/2/3 5/3/3 6/4/3 +f 1/1/5 4/2/5 8/3/5 5/4/5 +f 4/1/4 3/2/4 7/3/4 8/4/4 +f 3/1/6 2/2/6 6/3/6 7/4/6 +f 6//7 5//7 9//7 10//7 +f 7//8 6//8 10//8 11//8 +f 8//9 7//9 11//9 12//9 +f 5//10 8//10 12//10 9//10 +f 10//4 9//4 13//4 14//4 +f 9//6 12//6 16//6 13//6 +f 14//2 13//2 16//2 15//2 +f 12//3 11//3 15//3 16//3 +f 11//5 10//5 14//5 15//5 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/sealer_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/sealer_model.json new file mode 100644 index 00000000..18379e28 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/sealer_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine_sealer", + "north": "galacticraftcore:blocks/machine", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine", + "west": "galacticraftcore:blocks/machine_oxygen_input" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/slimeling_egg.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/slimeling_egg.json new file mode 100644 index 00000000..d2a942df --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/slimeling_egg.json @@ -0,0 +1,92 @@ +{ + "textures": { + "texture": "#egg", + "particle": "#egg" + }, + "elements": [ + { + "from": [ 3.0, 0.0, 3.0 ], + "to": [ 13.0, 8.0, 13.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 4.0, 4.0, 13.0, 11.0 ] }, + "east": { "texture": "#egg", "uv": [ 4.0, 4.0, 13.0, 11.0 ] }, + "south": { "texture": "#egg", "uv": [ 4.0, 4.0, 13.0, 11.0 ] }, + "west": { "texture": "#egg", "uv": [ 4.0, 4.0, 13.0, 11.0 ] }, + "up": { "texture": "#egg", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "down": { "texture": "#egg", "uv": [ 3.0, 3.0, 13.0, 13.0 ] } + } + }, + { + "from": [ 4.0, 8.0, 4.0 ], + "to": [ 12.0, 10.5, 12.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 4.0, 7.0, 12.0, 9.5 ] }, + "east": { "texture": "#egg", "uv": [ 4.0, 6.0, 12.0, 8.5 ] }, + "south": { "texture": "#egg", "uv": [ 4.0, 6.0, 12.0, 8.5 ] }, + "west": { "texture": "#egg", "uv": [ 4.0, 6.0, 12.0, 8.5 ] }, + "up": { "texture": "#egg", "uv": [ 4.0, 3.0, 12.0, 11.0 ] }, + "down": { "texture": "#egg", "uv": [ 4.0, 4.0, 12.0, 12.0 ] } + } + }, + { + "from": [ 13.0, 0.0, 4.0 ], + "to": [ 14.5, 6.5, 12.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.5, 10.5 ] }, + "east": { "texture": "#egg", "uv": [ 4.0, 5.0, 12.0, 11.5 ] }, + "south": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.5, 10.5 ] }, + "west": { "texture": "#egg", "uv": [ 4.0, 5.0, 12.0, 11.5 ] }, + "up": { "texture": "#egg", "uv": [ 7.0, 4.0, 8.5, 13.0 ] }, + "down": { "texture": "#egg", "uv": [ 7.0, 4.0, 8.5, 13.0 ] } + } + }, + { + "from": [ 1.5, 0.0, 4.0 ], + "to": [ 3.0, 6.5, 12.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.5, 10.5 ] }, + "east": { "texture": "#egg", "uv": [ 4.0, 5.0, 12.0, 11.5 ] }, + "south": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.5, 10.5 ] }, + "west": { "texture": "#egg", "uv": [ 4.0, 5.0, 12.0, 11.5 ] }, + "up": { "texture": "#egg", "uv": [ 7.0, 4.0, 8.5, 13.0 ] }, + "down": { "texture": "#egg", "uv": [ 7.0, 4.0, 8.5, 13.0 ] } + } + }, + { + "from": [ 3.5, 0.0, 13.0 ], + "to": [ 12.5, 6.5, 14.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 3.0, 6.0, 12.0, 10.5 ] }, + "east": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.0, 10.5 ] }, + "south": { "texture": "#egg", "uv": [ 4.0, 5.0, 13.0, 10.5 ] }, + "west": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.0, 10.5 ] }, + "up": { "texture": "#egg", "uv": [ 4.0, 7.0, 13.0, 8.0 ] }, + "down": { "texture": "#egg", "uv": [ 4.0, 8.0, 13.0, 9.0 ] } + } + }, + { + "from": [ 3.5, 0.0, 2.0 ], + "to": [ 12.5, 6.5, 3.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 4.0, 5.0, 13.0, 9.5 ] }, + "east": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.0, 10.5 ] }, + "south": { "texture": "#egg", "uv": [ 4.0, 5.0, 13.0, 10.5 ] }, + "west": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.0, 10.5 ] }, + "up": { "texture": "#egg", "uv": [ 4.0, 7.0, 13.0, 8.0 ] }, + "down": { "texture": "#egg", "uv": [ 4.0, 7.0, 13.0, 8.0 ] } + } + }, + { + "from": [ 6.2, 10.5, 5.0 ], + "to": [ 9.7, 10.9, 7.5 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 6.0, 7.0, 9.5, 7.4 ] }, + "east": { "texture": "#egg", "uv": [ 7.0, 7.0, 9.5, 7.4 ] }, + "south": { "texture": "#egg", "uv": [ 7.0, 7.0, 10.5, 7.4 ] }, + "west": { "texture": "#egg", "uv": [ 7.0, 7.0, 9.5, 7.4 ] }, + "up": { "texture": "#egg", "uv": [ 6.0, 6.0, 9.5, 8.5 ] }, + "down": { "texture": "#egg", "uv": [ 6.0, 6.0, 9.5, 8.5 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/space_station_base_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/space_station_base_model.json new file mode 100644 index 00000000..ccee893a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/space_station_base_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/space_station_side", + "down": "galacticraftcore:blocks/space_station_side", + "up": "galacticraftcore:blocks/space_station_top", + "north": "galacticraftcore:blocks/space_station_side", + "east": "galacticraftcore:blocks/space_station_side", + "south": "galacticraftcore:blocks/space_station_side", + "west": "galacticraftcore:blocks/space_station_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/spin_thruster_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/spin_thruster_model.json new file mode 100644 index 00000000..dd2cdb34 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/spin_thruster_model.json @@ -0,0 +1,129 @@ +{ +"parent": "block/block", +"textures": { + "texture": "galacticraftcore:blocks/thruster", + "particle": "galacticraftcore:blocks/thruster" +}, +"elements": [ +{ + "from": [ 1, 1, 0 ], + "to": [ 15, 15, 1 ], + "faces": { + "down": { "uv": [ 0, 0, 8, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" } + } +}, +{ + "from": [ 11, 5, 2 ], + "to": [ 14, 11, 3 ], + "faces": { + "down": { "uv": [ 8, 8, 11, 9 ], "texture": "#texture" }, + "up": { "uv": [ 8, 8, 11, 9 ], "texture": "#texture" }, + "north": { "uv": [ 8, 8, 11, 14 ], "texture": "#texture" }, + "south": { "uv": [ 8, 8, 11, 14 ], "texture": "#texture" }, + "west": { "uv": [ 8, 8, 9, 14 ], "texture": "#texture" }, + "east": { "uv": [ 8, 8, 9, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 8.5, 3, 1 ], + "to": [ 14, 13, 2 ], + "faces": { + "down": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "up": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 8, 8, 13.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 8, 8, 13, 16 ], "texture": "#texture" }, + "west": { "uv": [ 8, 8, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 8, 9, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 9, 5, 3 ], + "to": [ 14, 11, 6 ], + "faces": { + "down": { "uv": [ 0, 8, 5, 11 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 5, 14 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 5, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 3, 14 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 3, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 7.5, 9, 6 ], + "to": [ 11.5, 12, 9 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "north": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "south": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "west": { "uv": [ 8, 0, 11, 3 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 11, 3 ], "texture": "#texture" } + } +}, +{ + "from": [ 7.5, 4, 6 ], + "to": [ 11.5, 7, 9 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "north": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "south": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "west": { "uv": [ 8, 0, 11, 3 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 11, 3 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 8.5, 5.5 ], + "to": [ 7.5, 13, 9.5 ], + "faces": { + "down": { "uv": [ 8, 0, 13.5, 4 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 13.5, 4 ], "texture": "#texture" }, + "north": { "uv": [ 8, 0, 13.5, 4.5 ], "texture": "#texture" }, + "south": { "uv": [ 8, 0, 13.5, 4.5 ], "texture": "#texture" }, + "west": { "uv": [ 8, 0, 12, 4.5 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 12, 4.5 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 3, 5.5 ], + "to": [ 7.5, 7.5, 9.5 ], + "faces": { + "down": { "uv": [ 8, 0, 13.5, 4 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 13.5, 4 ], "texture": "#texture" }, + "north": { "uv": [ 8, 0, 13.5, 4.5 ], "texture": "#texture" }, + "south": { "uv": [ 8, 0, 13.5, 4.5 ], "texture": "#texture" }, + "west": { "uv": [ 8, 0, 12, 4.5 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 12, 4.5 ], "texture": "#texture" } + } +}, +{ + "from": [ 10, 7, 6 ], + "to": [ 12.5, 9, 7 ], + "faces": { + "down": { "uv": [ 0, 8, 2.5, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 2.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 2.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 2.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 10 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 10 ], "texture": "#texture" } + } +}, +{ + "from": [ 1.5, 2.5, 5 ], + "to": [ 2.5, 13.5, 10 ], + "faces": { + "down": { "uv": [ 0, 8, 1, 13 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 13 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 3.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 3.5, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank.json new file mode 100644 index 00000000..36865ce8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank.json @@ -0,0 +1,68 @@ +{ +"parent": "block/block", +"textures": { + "tank": "galacticraftcore:blocks/tank", + "tank_top": "galacticraftcore:blocks/tank_top", + "particle": "galacticraftcore:blocks/tank_top" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 16, 15 ], + "faces": { + "north": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 1 ], + "to": [ 2, 15.75, 2 ], + "faces": { + "down": { "uv": [ 15, 2, 14, 1 ], "texture": "#tank" }, + "up": { "uv": [ 1, 1, 2, 2 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 1.0625 ], + "to": [ 15, 15.75, 2.0625 ], + "faces": { + "down": { "uv": [ 2, 2.0625, 1, 1.0625 ], "texture": "#tank" }, + "up": { "uv": [ 14, 1.0625, 15, 2.0625 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1.0625, 0.25, 2.0625, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 13.9375, 0.25, 14.9375, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 14 ], + "to": [ 2, 15.75, 15 ], + "faces": { + "down": { "uv": [ 15, 15, 14, 14 ], "texture": "#tank" }, + "up": { "uv": [ 1, 14, 2, 15 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 14 ], + "to": [ 15, 15.75, 15 ], + "faces": { + "down": { "uv": [ 2, 15, 1, 14 ], "texture": "#tank" }, + "up": { "uv": [ 14, 14, 15, 15 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_d.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_d.json new file mode 100644 index 00000000..87c60ca0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_d.json @@ -0,0 +1,68 @@ +{ +"textures": { + "tank": "galacticraftcore:blocks/tank", + "tank_top": "galacticraftcore:blocks/tank_top", + "particle": "galacticraftcore:blocks/tank_top" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 0 ], "texture": "#tank_top" }, + "north": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 1 ], + "to": [ 2, 15.75, 2 ], + "faces": { + "down": { "uv": [ 15, 2, 14, 1 ], "texture": "#tank" }, + "up": { "uv": [ 1, 1, 2, 2 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 1.0625 ], + "to": [ 15, 15.75, 2.0625 ], + "faces": { + "down": { "uv": [ 2, 2.0625, 1, 1.0625 ], "texture": "#tank" }, + "up": { "uv": [ 14, 1.0625, 15, 2.0625 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1.0625, 0.25, 2.0625, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 13.9375, 0.25, 14.9375, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 14 ], + "to": [ 2, 15.75, 15 ], + "faces": { + "down": { "uv": [ 15, 15, 14, 14 ], "texture": "#tank" }, + "up": { "uv": [ 1, 14, 2, 15 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 14 ], + "to": [ 15, 15.75, 15 ], + "faces": { + "down": { "uv": [ 2, 15, 1, 14 ], "texture": "#tank" }, + "up": { "uv": [ 14, 14, 15, 15 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_u.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_u.json new file mode 100644 index 00000000..b020fce2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_u.json @@ -0,0 +1,68 @@ +{ +"textures": { + "tank": "galacticraftcore:blocks/tank", + "tank_top": "galacticraftcore:blocks/tank_top", + "particle": "galacticraftcore:blocks/tank_top" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 16, 15 ], + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#tank_top" }, + "north": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 1 ], + "to": [ 2, 15.75, 2 ], + "faces": { + "down": { "uv": [ 15, 2, 14, 1 ], "texture": "#tank" }, + "up": { "uv": [ 1, 1, 2, 2 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 1.0625 ], + "to": [ 15, 15.75, 2.0625 ], + "faces": { + "down": { "uv": [ 2, 2.0625, 1, 1.0625 ], "texture": "#tank" }, + "up": { "uv": [ 14, 1.0625, 15, 2.0625 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1.0625, 0.25, 2.0625, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 13.9375, 0.25, 14.9375, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 14 ], + "to": [ 2, 15.75, 15 ], + "faces": { + "down": { "uv": [ 15, 15, 14, 14 ], "texture": "#tank" }, + "up": { "uv": [ 1, 14, 2, 15 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 14 ], + "to": [ 15, 15.75, 15 ], + "faces": { + "down": { "uv": [ 2, 15, 1, 14 ], "texture": "#tank" }, + "up": { "uv": [ 14, 14, 15, 15 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_ud.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_ud.json new file mode 100644 index 00000000..73686b86 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_ud.json @@ -0,0 +1,70 @@ +{ +"parent": "block/block", +"textures": { + "tank": "galacticraftcore:blocks/tank", + "tank_top": "galacticraftcore:blocks/tank_top", + "particle": "galacticraftcore:blocks/tank_top" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 0 ], "texture": "#tank_top" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#tank_top" }, + "north": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 1 ], + "to": [ 2, 15.75, 2 ], + "faces": { + "down": { "uv": [ 15, 2, 14, 1 ], "texture": "#tank" }, + "up": { "uv": [ 1, 1, 2, 2 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 1.0625 ], + "to": [ 15, 15.75, 2.0625 ], + "faces": { + "down": { "uv": [ 2, 2.0625, 1, 1.0625 ], "texture": "#tank" }, + "up": { "uv": [ 14, 1.0625, 15, 2.0625 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1.0625, 0.25, 2.0625, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 13.9375, 0.25, 14.9375, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 14 ], + "to": [ 2, 15.75, 15 ], + "faces": { + "down": { "uv": [ 15, 15, 14, 14 ], "texture": "#tank" }, + "up": { "uv": [ 1, 14, 2, 15 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 14 ], + "to": [ 15, 15.75, 15 ], + "faces": { + "down": { "uv": [ 2, 15, 1, 14 ], "texture": "#tank" }, + "up": { "uv": [ 14, 14, 15, 15 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/telemetry_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/telemetry_model.json new file mode 100644 index 00000000..2e05d962 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/telemetry_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/cargo_pad", + "down": "galacticraftcore:blocks/cargo_pad", + "up": "galacticraftcore:blocks/cargo_pad", + "north": "galacticraftcore:blocks/cargo_pad", + "east": "galacticraftcore:blocks/cargo_pad", + "south": "galacticraftcore:blocks/cargo_pad", + "west": "galacticraftcore:blocks/cargo_pad" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_inner_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_inner_stairs.json new file mode 100644 index 00000000..f1cfc4df --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_outer_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_outer_stairs.json new file mode 100644 index 00000000..ca6b786e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_stairs.json new file mode 100644 index 00000000..3c05ece6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_wall_inventory.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_wall_inventory.json new file mode 100644 index 00000000..20050e0b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_wall_inventory.json @@ -0,0 +1,8 @@ +{ + "parent": "galacticraftcore:block/gc_wall_inventory", + "textures": { + "wall": "galacticraftcore:blocks/deco_block_side", + "wall_bot": "galacticraftcore:blocks/deco_block_up", + "wall_top": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_inner_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_inner_stairs.json new file mode 100644 index 00000000..0837141c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_outer_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_outer_stairs.json new file mode 100644 index 00000000..71f599ce --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_stairs.json new file mode 100644 index 00000000..111973ed --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_wall_inventory.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_wall_inventory.json new file mode 100644 index 00000000..ac5268ee --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/treasure_chest.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/treasure_chest.json new file mode 100644 index 00000000..bef2470b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/treasure_chest.json @@ -0,0 +1,45 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftcore:blocks/treasure_chest", + "texture": "galacticraftcore:model/treasure" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 9, 15 ], + "faces": { + "down": { "uv": [ 10.5, 8.25, 7, 4.75 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 8.5, 14, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8.5, 7, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.5, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 3.5, 10.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 10.5, 3.5, 7, 0 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 7, 15 ], + "to": [ 9.25, 11, 16 ], + "faces": { + "down": { "uv": [ 1.25, 0.25, 0.75, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0.25, 0, 0.75, 0.25 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0.25, 0.5, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0.25, 1.25, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 1.25, 0.25, 1.5, 1.25 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_model.json new file mode 100644 index 00000000..44b5d548 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_lit", + "ultorch": "galacticraftcore:blocks/unlit_torch_lit" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_model.json new file mode 100644 index 00000000..adbedc9d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_lit_stone", + "ultorch": "galacticraftcore:blocks/unlit_torch_lit_stone" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_wall_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_wall_model.json new file mode 100644 index 00000000..872a6aca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_lit_stone", + "ultorch": "galacticraftcore:blocks/unlit_torch_lit_stone" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_wall_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_wall_model.json new file mode 100644 index 00000000..af3c7c18 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_lit", + "ultorch": "galacticraftcore:blocks/unlit_torch_lit" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_model.json new file mode 100644 index 00000000..d2220745 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch", + "ultorch": "galacticraftcore:blocks/unlit_torch" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_model.json new file mode 100644 index 00000000..fe31200a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_stone", + "ultorch": "galacticraftcore:blocks/unlit_torch_stone" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_wall_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_wall_model.json new file mode 100644 index 00000000..65451b1c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_stone", + "ultorch": "galacticraftcore:blocks/unlit_torch_stone" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_wall_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_wall_model.json new file mode 100644 index 00000000..5b515c69 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch", + "ultorch": "galacticraftcore:blocks/unlit_torch" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_asteroid.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_asteroid.json new file mode 100644 index 00000000..97818418 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_asteroid.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/screen_side", + "top": "galacticraftcore:blocks/screen_side", + "side": "galacticraftcore:blocks/screen_side" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_cobblestone.json new file mode 100644 index 00000000..468c06e6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_cobblestone.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_dungeon_brick.json new file mode 100644 index 00000000..ab4bf86b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_dungeon_brick.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_dungeon_brick.json new file mode 100644 index 00000000..8a1cd818 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_dungeon_brick.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_stone.json new file mode 100644 index 00000000..ab03ea47 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_stone.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_1.json new file mode 100644 index 00000000..c4c06040 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_1.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_2.json new file mode 100644 index 00000000..7a5aabf8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_2.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_post.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_post.json new file mode 100644 index 00000000..1fa78d4f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_post.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 4, 0, 4 ], + "to": [ 12, 16, 12 ], + "faces": { + "down": { "texture": "#wall_bot", "cullface": "down" }, + "up": { "texture": "#wall_top", "cullface": "up" }, + "north": { "texture": "#wall" }, + "south": { "texture": "#wall" }, + "west": { "texture": "#wall" }, + "east": { "texture": "#wall" } + }, + "__comment": "Center post" + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_side.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_side.json new file mode 100644 index 00000000..7da73fda --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_side.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 5, 0, 0 ], + "to": [ 11, 14, 8 ], + "faces": { + "down": { "texture": "#wall_bot", "cullface": "down" }, + "up": { "texture": "#wall_top" }, + "north": { "texture": "#wall", "cullface": "north" }, + "west": { "texture": "#wall" }, + "east": { "texture": "#wall" } + }, + "__comment": "wall" + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.mtl new file mode 100644 index 00000000..a8d03bad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:blocks/assembly \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.obj new file mode 100644 index 00000000..f7cbe45e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.obj @@ -0,0 +1,918 @@ +# Blender v2.76 (sub 0) OBJ File: 'workbench.blend' +# www.blender.org +mtllib workbench.mtl +o Cube +v 0.000000 0.000000 1.000000 +v 0.000000 1.000000 1.000000 +v 0.000000 0.000000 0.000000 +v 0.000000 1.000000 0.000000 +v 1.000000 0.000000 1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 0.000000 0.000000 +v 1.000000 1.000000 0.000000 +v 0.250000 1.081607 1.250000 +v 0.250000 1.281608 1.250000 +v 0.250000 1.081607 -0.250000 +v 0.250000 1.281608 -0.250000 +v 0.750000 1.081607 1.250000 +v 0.750000 1.281608 1.250000 +v 0.750000 1.081607 -0.250000 +v 0.750000 1.281608 -0.250000 +v 1.242462 1.068892 0.252513 +v 1.242462 1.350401 0.252513 +v 0.252513 1.068892 1.242462 +v 0.252513 1.350401 1.242462 +v 0.747487 1.068892 -0.242462 +v 0.747487 1.350401 -0.242462 +v -0.242462 1.068892 0.747487 +v -0.242462 1.350401 0.747487 +v 0.150000 1.337856 0.850000 +v 0.150000 1.437856 0.850000 +v 0.150000 1.337856 0.150000 +v 0.150000 1.437856 0.150000 +v 0.850000 1.337856 0.850000 +v 0.850000 1.437856 0.850000 +v 0.850000 1.337856 0.150000 +v 0.850000 1.437856 0.150000 +v -0.065686 0.986978 1.136396 +v -0.065686 1.386978 1.136396 +v -0.136396 0.986978 1.065686 +v -0.136396 1.386978 1.065686 +v 1.136396 0.986978 -0.065686 +v 1.136396 1.386978 -0.065686 +v 1.065686 0.986978 -0.136396 +v 1.065686 1.386978 -0.136396 +v 0.350000 1.013104 1.233450 +v 0.350000 1.255998 1.409524 +v 0.350000 1.189178 0.990555 +v 0.350000 1.432073 1.166630 +v 0.650000 1.013104 1.233450 +v 0.650000 1.255998 1.409524 +v 0.650000 1.189178 0.990555 +v 0.650000 1.432073 1.166630 +v 1.233450 1.013104 0.650000 +v 1.409524 1.255998 0.650000 +v 0.990555 1.189178 0.650000 +v 1.166630 1.432073 0.650000 +v 1.233450 1.013104 0.350000 +v 1.409524 1.255998 0.350000 +v 0.990555 1.189178 0.350000 +v 1.166630 1.432073 0.350000 +v 0.650000 1.013104 -0.233450 +v 0.650000 1.255998 -0.409524 +v 0.650000 1.189178 0.009445 +v 0.650000 1.432073 -0.166630 +v 0.350000 1.013104 -0.233450 +v 0.350000 1.255998 -0.409524 +v 0.350000 1.189178 0.009445 +v 0.350000 1.432073 -0.166630 +v -0.233450 1.013104 0.350000 +v -0.409524 1.255998 0.350000 +v 0.009445 1.189178 0.350000 +v -0.166629 1.432073 0.350000 +v -0.233450 1.013104 0.650000 +v -0.409524 1.255998 0.650000 +v 0.009445 1.189178 0.650000 +v -0.166629 1.432073 0.650000 +v 0.350000 2.334641 1.778483 +v 0.350000 2.634641 1.778483 +v 0.350000 2.334641 1.478483 +v 0.350000 2.634641 1.478483 +v 0.650000 2.334641 1.778483 +v 0.650000 2.634641 1.778483 +v 0.650000 2.334641 1.478483 +v 0.650000 2.634641 1.478483 +v 0.350000 3.242134 1.028300 +v 0.350000 3.542134 1.028300 +v 0.350000 3.242134 0.728300 +v 0.350000 3.542134 0.728300 +v 0.650000 3.242134 1.028300 +v 0.650000 3.542134 1.028300 +v 0.650000 3.242134 0.728300 +v 0.650000 3.542134 0.728300 +v 0.650000 1.843833 -0.581535 +v 0.650000 2.101906 -0.734501 +v 0.650000 1.996798 -0.323462 +v 0.650000 2.254871 -0.476428 +v 0.350000 1.843833 -0.581535 +v 0.350000 2.101906 -0.734501 +v 0.350000 1.996798 -0.323462 +v 0.350000 2.254871 -0.476428 +v 1.955269 1.582708 0.650000 +v 2.065425 1.861752 0.650000 +v 1.676225 1.692864 0.650000 +v 1.786381 1.971908 0.650000 +v 1.955269 1.582708 0.350000 +v 2.065425 1.861752 0.350000 +v 1.676225 1.692864 0.350000 +v 1.786381 1.971908 0.350000 +v -0.886777 2.122101 0.650000 +v -0.786616 2.404886 0.650000 +v -1.169563 2.222261 0.650000 +v -1.069402 2.505047 0.650000 +v -0.886777 2.122101 0.350000 +v -0.786616 2.404886 0.350000 +v -1.169563 2.222261 0.350000 +v -1.069402 2.505047 0.350000 +v 0.890210 3.251843 0.734295 +v 0.890210 3.551843 0.734295 +v 0.821067 3.251843 0.662051 +v 0.821067 3.551843 0.662051 +v 0.962454 3.251843 0.665152 +v 0.962454 3.551843 0.665152 +v 0.893312 3.251843 0.592908 +v 0.893312 3.551843 0.592908 +v 0.178933 3.251843 0.665152 +v 0.178933 3.551843 0.665152 +v 0.109790 3.251843 0.592908 +v 0.109790 3.551843 0.592908 +v 0.106688 3.251843 0.734295 +v 0.106688 3.551843 0.734295 +v 0.037545 3.251843 0.662051 +v 0.037545 3.551843 0.662051 +v 0.577795 3.290566 0.749125 +v 0.577795 3.490566 0.749125 +v 0.852713 3.290566 0.629040 +v 0.852713 3.490566 0.629040 +v 0.617824 3.290566 0.840764 +v 0.617824 3.490566 0.840764 +v 0.892741 3.290566 0.720680 +v 0.892741 3.490566 0.720680 +v 0.860116 3.290566 0.627558 +v 0.860116 3.490566 0.627558 +v 1.004750 3.290566 0.364726 +v 1.004750 3.490566 0.364726 +v 0.947727 3.290566 0.675770 +v 0.947727 3.490566 0.675770 +v 1.092361 3.290566 0.412937 +v 1.092361 3.490566 0.412937 +v 0.139017 3.290566 0.628488 +v 0.139017 3.490566 0.628488 +v -0.003499 3.290566 0.364501 +v -0.003499 3.490566 0.364501 +v 0.051022 3.290566 0.675994 +v 0.051022 3.490566 0.675994 +v -0.091495 3.290566 0.412007 +v -0.091495 3.490566 0.412007 +v 0.422198 3.290566 0.749202 +v 0.422198 3.490566 0.749202 +v 0.147339 3.290566 0.628983 +v 0.147339 3.490566 0.628983 +v 0.382125 3.290566 0.840822 +v 0.382125 3.490566 0.840822 +v 0.107266 3.290566 0.720603 +v 0.107266 3.490566 0.720603 +v 0.155502 2.006171 -0.787269 +v 0.155502 2.261113 -0.357147 +v 0.155502 2.092196 -0.838257 +v 0.155502 2.347138 -0.408135 +v 0.855502 2.006171 -0.787269 +v 0.855502 2.261113 -0.357147 +v 0.855502 2.092196 -0.838257 +v 0.855502 2.347138 -0.408135 +v 0.400000 1.253847 1.372771 +v 0.400000 2.388481 1.767893 +v 0.400000 1.325086 1.168201 +v 0.400000 2.459720 1.563322 +v 0.600000 1.253847 1.372771 +v 0.600000 2.388481 1.767893 +v 0.600000 1.325086 1.168201 +v 0.600000 2.459720 1.563322 +v 0.400000 2.531088 1.731811 +v 0.400000 3.501466 1.025859 +v 0.400000 2.413429 1.570082 +v 0.400000 3.383807 0.864130 +v 0.600000 2.531088 1.731811 +v 0.600000 3.501466 1.025859 +v 0.600000 2.413429 1.570082 +v 0.600000 3.383807 0.864130 +v -0.347331 1.248460 0.600000 +v -1.059282 2.214445 0.600000 +v -0.347331 1.248460 0.400000 +v -1.059282 2.214445 0.400000 +v -0.186333 1.367119 0.600000 +v -0.898285 2.333104 0.600000 +v -0.186333 1.367119 0.400000 +v -0.898285 2.333104 0.400000 +v 0.400000 1.293862 -0.190303 +v 0.400000 2.066922 -0.396161 +v 0.400000 1.242397 -0.383568 +v 0.400000 2.015458 -0.589426 +v 0.600000 1.293862 -0.190303 +v 0.600000 2.066922 -0.396161 +v 0.600000 1.242397 -0.383568 +v 0.600000 2.015458 -0.589426 +v 1.174452 1.397489 0.600000 +v 1.863521 1.803917 0.600000 +v 1.174452 1.397489 0.400000 +v 1.863521 1.803917 0.400000 +v 1.276059 1.225222 0.600000 +v 1.965128 1.631650 0.600000 +v 1.276059 1.225222 0.400000 +v 1.965128 1.631650 0.400000 +v 1.834362 1.720510 0.600000 +v 1.359728 2.364500 0.600000 +v 1.834362 1.720510 0.400000 +v 1.359728 2.364500 0.400000 +v 1.995360 1.839169 0.600000 +v 1.520725 2.483159 0.600000 +v 1.995360 1.839169 0.400000 +v 1.520725 2.483159 0.400000 +v -1.008356 2.457437 0.600000 +v -0.351381 2.913928 0.600000 +v -1.008356 2.457437 0.400000 +v -0.351381 2.913928 0.400000 +v -0.894234 2.293193 0.600000 +v -0.237259 2.749684 0.600000 +v -0.894234 2.293193 0.400000 +v -0.237259 2.749684 0.400000 +v 1.100417 2.179827 0.700000 +v 0.992393 2.564964 0.700000 +v 1.100418 2.179827 0.300000 +v 0.992393 2.564964 0.300000 +v 1.196702 2.206833 0.700000 +v 1.088677 2.591970 0.700000 +v 1.196702 2.206833 0.300000 +v 1.088677 2.591970 0.300000 +v 1.118177 2.288667 0.600000 +v 1.064165 2.481236 0.600000 +v 1.118177 2.288667 0.400000 +v 1.064165 2.481236 0.400000 +v 1.599599 2.423698 0.600000 +v 1.545586 2.616267 0.600000 +v 1.599599 2.423698 0.400000 +v 1.545586 2.616267 0.400000 +v -0.538611 3.022603 0.650000 +v -0.324627 3.232866 0.650000 +v -0.538611 3.022603 0.350000 +v -0.324627 3.232866 0.350000 +v -0.188173 2.665961 0.650000 +v 0.025812 2.876224 0.650000 +v -0.188173 2.665961 0.350000 +v 0.025812 2.876224 0.350000 +v -0.331720 2.966683 0.550000 +v -0.260392 3.036771 0.550000 +v -0.331720 2.966683 0.450000 +v -0.260392 3.036771 0.450000 +v 0.158893 2.467385 0.550000 +v 0.230222 2.537473 0.550000 +v 0.158893 2.467385 0.450000 +v 0.230222 2.537473 0.450000 +v 0.252512 1.058892 -0.242462 +v 0.252512 1.340401 -0.242462 +v 1.242462 1.058892 0.747487 +v 1.242462 1.340401 0.747487 +v -0.242462 1.058892 0.252513 +v -0.242462 1.340401 0.252513 +v 0.747488 1.058892 1.242462 +v 0.747488 1.340401 1.242462 +v 1.136396 0.986978 1.065686 +v 1.136396 1.386978 1.065686 +v 1.065686 0.986978 1.136396 +v 1.065686 1.386978 1.136396 +v -0.065686 0.986978 -0.136396 +v -0.065686 1.386978 -0.136396 +v -0.136396 0.986978 -0.065686 +v -0.136396 1.386978 -0.065686 +v 1.250000 1.081607 0.750000 +v 1.250000 1.281608 0.750000 +v -0.250000 1.081607 0.750000 +v -0.250000 1.281608 0.750000 +v 1.250000 1.081607 0.250000 +v 1.250000 1.281608 0.250000 +v -0.250000 1.081607 0.250000 +v -0.250000 1.281608 0.250000 +vt 0.999375 0.837056 +vt 0.999375 0.917416 +vt 0.919015 0.917416 +vt 0.999990 0.918877 +vt 0.999990 0.999237 +vt 0.919630 0.999237 +vt 0.538681 0.847671 +vt 0.538681 0.906048 +vt 0.500443 0.906048 +vt 0.390801 0.926947 +vt 0.390801 0.944995 +vt 0.336048 0.944995 +vt 0.335505 0.926814 +vt 0.335505 0.945042 +vt 0.309247 0.945042 +vt 0.308250 0.927112 +vt 0.308250 0.944830 +vt 0.254536 0.944830 +vt 0.335505 0.945516 +vt 0.335505 0.999587 +vt 0.309247 0.999587 +vt 0.218445 0.812759 +vt 0.218445 0.816209 +vt 0.191890 0.816209 +vt 0.218445 0.816832 +vt 0.218445 0.843386 +vt 0.191890 0.843386 +vt 0.331884 0.753881 +vt 0.331884 0.757699 +vt 0.274055 0.757699 +vt 0.331941 0.738734 +vt 0.273998 0.753856 +vt 0.011790 0.707246 +vt 0.023146 0.707246 +vt 0.023146 0.718602 +vt 0.035170 0.707246 +vt 0.035170 0.718602 +vt 0.023814 0.718602 +vt 0.011790 0.718602 +vt 0.023814 0.707246 +vt 0.011752 0.809115 +vt 0.011752 0.819977 +vt 0.003993 0.819977 +vt 0.003993 0.809115 +vt 0.046684 0.758136 +vt 0.046684 0.765539 +vt 0.039281 0.765539 +vt 0.039281 0.758136 +vt 0.043277 0.820339 +vt 0.070026 0.820339 +vt 0.070026 0.824117 +vt 0.069709 0.800918 +vt 0.069709 0.820223 +vt 0.042861 0.820223 +vt 0.043277 0.824117 +vt 0.097522 0.801109 +vt 0.097522 0.820247 +vt 0.070798 0.820247 +vt 0.187542 0.945668 +vt 0.202850 0.945668 +vt 0.202850 0.991775 +vt 0.187176 0.945668 +vt 0.187176 0.991775 +vt 0.180023 0.991775 +vt 0.187542 0.991775 +vt 0.180023 0.945668 +vt 0.281066 0.808910 +vt 0.281066 0.824174 +vt 0.265803 0.824174 +vt 0.281519 0.808910 +vt 0.288990 0.808910 +vt 0.288990 0.824174 +vt 0.281519 0.824174 +vt 0.268428 0.774081 +vt 0.268428 0.788762 +vt 0.242775 0.788762 +vt 0.242131 0.773662 +vt 0.242131 0.781151 +vt 0.234531 0.781151 +vt 0.242775 0.774081 +vt 0.078035 0.977167 +vt 0.078035 0.988191 +vt 0.066583 0.988191 +vt 0.078533 0.976894 +vt 0.093308 0.976894 +vt 0.093308 0.999846 +vt 0.066717 0.977208 +vt 0.077901 0.977208 +vt 0.077901 0.987997 +vt 0.078533 0.999846 +vt 0.093436 0.976760 +vt 0.093436 0.999922 +vt 0.078405 0.999922 +vt 0.027653 0.992372 +vt 0.027653 0.995993 +vt 0.000126 0.995993 +vt 0.003887 0.992372 +vt 0.031115 0.992372 +vt 0.031115 0.995993 +vt 0.003610 0.992372 +vt 0.003610 0.995993 +vt 0.000035 0.995993 +vt 0.003887 0.995993 +vt 0.309247 0.945516 +vt 0.274055 0.753881 +vt 0.919015 0.837056 +vt 0.919630 0.918877 +vt 0.500443 0.847671 +vt 0.336048 0.926947 +vt 0.309247 0.926814 +vt 0.254536 0.927112 +vt 0.191890 0.812759 +vt 0.191890 0.816832 +vt 0.273998 0.738734 +vt 0.042861 0.800918 +vt 0.070798 0.801109 +vt 0.265803 0.808910 +vt 0.234531 0.773662 +vt 0.066583 0.977167 +vt 0.066717 0.987997 +vt 0.078405 0.976760 +vt 0.000126 0.992372 +vt 0.000035 0.992372 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.707100 0.000000 0.707100 +vn -0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.000000 0.586900 -0.809600 +vn 0.000000 -0.586900 0.809600 +vn 0.000000 -0.809600 -0.586900 +vn 0.000000 0.809600 0.586900 +vn -0.809600 0.586900 0.000000 +vn 0.809600 -0.586900 0.000000 +vn -0.586900 -0.809600 0.000000 +vn 0.586900 0.809600 0.000000 +vn 0.000000 0.586900 0.809600 +vn 0.000000 -0.586900 -0.809600 +vn 0.000000 -0.809600 0.586900 +vn 0.000000 0.809600 -0.586900 +vn 0.809600 0.586900 0.000000 +vn -0.809600 -0.586900 0.000000 +vn 0.586900 -0.809600 0.000000 +vn -0.586900 0.809600 0.000000 +vn 0.000000 0.509900 0.860200 +vn 0.000000 -0.509900 -0.860200 +vn 0.000000 -0.860200 0.509900 +vn 0.000000 0.860200 -0.509900 +vn -0.930100 0.367200 0.000000 +vn 0.930100 -0.367200 0.000000 +vn -0.367200 -0.930100 0.000000 +vn 0.367200 0.930100 0.000000 +vn -0.942600 0.333900 0.000000 +vn 0.942600 -0.333900 0.000000 +vn -0.333900 -0.942600 0.000000 +vn 0.333900 0.942600 0.000000 +vn -0.722400 0.000000 0.691400 +vn -0.691400 0.000000 -0.722400 +vn 0.722400 0.000000 -0.691400 +vn 0.691400 0.000000 0.722400 +vn -0.400300 0.000000 -0.916400 +vn 0.916400 0.000000 -0.400300 +vn 0.400300 0.000000 0.916400 +vn -0.916400 0.000000 0.400300 +vn -0.876100 0.000000 -0.482100 +vn 0.482100 0.000000 -0.876100 +vn 0.876100 0.000000 0.482100 +vn -0.482100 0.000000 0.876100 +vn -0.880000 0.000000 0.475100 +vn 0.475100 0.000000 0.880000 +vn 0.880000 0.000000 -0.475100 +vn -0.475100 0.000000 -0.880000 +vn -0.400700 0.000000 0.916200 +vn 0.916200 0.000000 0.400700 +vn 0.400700 0.000000 -0.916200 +vn -0.916200 0.000000 -0.400700 +vn 0.000000 0.328900 -0.944400 +vn 0.000000 -0.328900 0.944400 +vn 0.000000 -0.944400 -0.328900 +vn 0.000000 0.944400 0.328900 +vn 0.000000 -0.588300 -0.808600 +vn 0.000000 0.588300 0.808600 +vn 0.000000 -0.808600 0.588300 +vn -0.000000 0.808600 -0.588300 +vn -0.805000 -0.593300 0.000000 +vn 0.805000 0.593300 0.000000 +vn 0.593300 -0.805000 0.000000 +vn -0.593300 0.805000 0.000000 +vn 0.000000 -0.257300 -0.966300 +vn 0.000000 0.257300 0.966300 +vn 0.000000 -0.966300 0.257300 +vn 0.000000 0.966300 -0.257300 +vn -0.508000 0.861300 0.000000 +vn 0.508000 -0.861300 0.000000 +vn -0.861300 -0.508000 0.000000 +vn 0.861300 0.508000 0.000000 +vn -0.570600 0.821200 0.000000 +vn 0.570600 -0.821200 0.000000 +vn -0.821200 -0.570600 0.000000 +vn 0.821200 0.570600 0.000000 +vn -0.962800 -0.270100 -0.000000 +vn 0.962800 0.270100 0.000000 +vn 0.270100 -0.962800 0.000000 +vn -0.270100 0.962800 0.000000 +vn -0.700900 0.713300 0.000000 +vn 0.700900 -0.713300 0.000000 +vn -0.713300 -0.700900 0.000000 +vn 0.713300 0.700900 0.000000 +usemtl None +f 4/1/1 3/2/1 1/3/1 +f 8/1/2 7/2/2 3/3/2 +f 6/1/3 5/2/3 7/3/3 +f 2/1/4 1/2/4 5/3/4 +f 3/1/5 7/2/5 5/3/5 +f 8/4/6 4/5/6 2/6/6 +f 12/7/1 11/8/1 9/9/1 +f 16/7/2 15/8/2 11/9/2 +f 14/7/3 13/8/3 15/9/3 +f 10/7/4 9/8/4 13/9/4 +f 11/7/5 15/8/5 13/9/5 +f 16/7/6 12/8/6 10/9/6 +f 20/10/7 19/11/7 17/12/7 +f 24/13/8 23/14/8 19/15/8 +f 22/16/9 21/17/9 23/18/9 +f 18/13/10 17/14/10 21/15/10 +f 19/19/5 23/20/5 21/21/5 +f 24/19/6 20/20/6 18/21/6 +f 28/22/1 27/23/1 25/24/1 +f 32/22/2 31/23/2 27/24/2 +f 30/22/3 29/23/3 31/24/3 +f 26/22/4 25/23/4 29/24/4 +f 27/25/5 31/26/5 29/27/5 +f 32/25/6 28/26/6 26/27/6 +f 36/28/8 35/29/8 33/30/8 +f 40/31/9 39/28/9 35/32/9 +f 38/28/10 37/29/10 39/30/10 +f 34/31/7 33/28/7 37/32/7 +f 35/28/5 39/29/5 37/30/5 +f 40/28/6 36/29/6 34/30/6 +f 42/33/1 44/34/1 43/35/1 +f 48/36/11 47/37/11 43/38/11 +f 46/34/3 45/35/3 47/39/3 +f 42/36/12 41/37/12 45/38/12 +f 43/36/13 47/37/13 45/38/13 +f 48/36/14 44/37/14 42/38/14 +f 50/33/4 52/34/4 51/35/4 +f 56/36/15 55/37/15 51/38/15 +f 54/34/2 53/35/2 55/39/2 +f 50/36/16 49/37/16 53/38/16 +f 51/36/17 55/37/17 53/38/17 +f 56/36/18 52/37/18 50/38/18 +f 58/33/3 60/34/3 59/35/3 +f 64/36/19 63/37/19 59/38/19 +f 62/34/1 61/35/1 63/39/1 +f 58/36/20 57/37/20 61/38/20 +f 59/36/21 63/37/21 61/38/21 +f 62/40/22 64/36/22 60/37/22 +f 66/33/2 68/34/2 67/35/2 +f 72/36/23 71/37/23 67/38/23 +f 70/34/4 69/35/4 71/39/4 +f 66/36/24 65/37/24 69/38/24 +f 67/36/25 71/37/25 69/38/25 +f 72/36/26 68/37/26 66/38/26 +f 76/34/1 75/35/1 73/39/1 +f 80/36/2 79/37/2 75/38/2 +f 78/34/3 77/35/3 79/39/3 +f 74/36/4 73/37/4 77/38/4 +f 75/36/5 79/37/5 77/38/5 +f 80/36/6 76/37/6 74/38/6 +f 84/34/1 83/35/1 81/39/1 +f 88/36/2 87/37/2 83/38/2 +f 86/34/3 85/35/3 87/39/3 +f 82/36/4 81/37/4 85/38/4 +f 83/36/5 87/37/5 85/38/5 +f 88/36/6 84/37/6 82/38/6 +f 92/34/3 91/35/3 89/39/3 +f 96/36/27 95/37/27 91/38/27 +f 94/34/1 93/35/1 95/39/1 +f 90/36/28 89/37/28 93/38/28 +f 91/36/29 95/37/29 93/38/29 +f 94/40/30 96/36/30 92/37/30 +f 98/33/4 100/34/4 99/35/4 +f 104/36/31 103/37/31 99/38/31 +f 102/34/2 101/35/2 103/39/2 +f 98/36/32 97/37/32 101/38/32 +f 97/40/33 99/36/33 103/37/33 +f 104/36/34 100/37/34 98/38/34 +f 108/34/4 107/35/4 105/39/4 +f 112/36/35 111/37/35 107/38/35 +f 110/34/2 109/35/2 111/39/2 +f 106/36/36 105/37/36 109/38/36 +f 107/36/37 111/37/37 109/38/37 +f 112/36/38 108/37/38 106/38/38 +f 116/41/39 115/42/39 113/43/39 +f 120/41/40 119/42/40 115/43/40 +f 118/41/41 117/42/41 119/43/41 +f 114/41/42 113/42/42 117/43/42 +f 115/41/5 119/42/5 117/43/5 +f 120/41/6 116/42/6 114/43/6 +f 122/44/39 124/41/39 123/42/39 +f 128/41/42 127/42/42 123/43/42 +f 126/41/41 125/42/41 127/43/41 +f 122/41/40 121/42/40 125/43/40 +f 123/41/6 127/42/6 125/43/6 +f 128/41/5 124/42/5 122/43/5 +f 132/45/43 131/46/43 129/47/43 +f 136/45/44 135/46/44 131/47/44 +f 134/45/45 133/46/45 135/47/45 +f 130/45/46 129/46/46 133/47/46 +f 129/48/5 131/45/5 135/46/5 +f 136/45/6 132/46/6 130/47/6 +f 140/45/47 139/46/47 137/47/47 +f 144/45/48 143/46/48 139/47/48 +f 142/45/49 141/46/49 143/47/49 +f 138/45/50 137/46/50 141/47/50 +f 139/45/5 143/46/5 141/47/5 +f 144/45/6 140/46/6 138/47/6 +f 148/45/51 147/46/51 145/47/51 +f 152/45/52 151/46/52 147/47/52 +f 150/45/53 149/46/53 151/47/53 +f 146/45/54 145/46/54 149/47/54 +f 145/48/6 147/45/6 151/46/6 +f 152/45/5 148/46/5 146/47/5 +f 156/45/55 155/46/55 153/47/55 +f 160/45/56 159/46/56 155/47/56 +f 158/45/57 157/46/57 159/47/57 +f 154/45/58 153/46/58 157/47/58 +f 155/45/6 159/46/6 157/47/6 +f 160/45/5 156/46/5 154/47/5 +f 162/49/1 164/50/1 163/51/1 +f 168/52/30 167/53/30 163/54/30 +f 166/50/3 165/51/3 167/55/3 +f 162/56/29 161/57/29 165/58/29 +f 163/50/28 167/51/28 165/55/28 +f 168/50/27 164/51/27 162/55/27 +f 170/59/1 172/60/1 171/61/1 +f 176/62/59 175/63/59 171/64/59 +f 174/60/3 173/61/3 175/65/3 +f 170/62/60 169/63/60 173/64/60 +f 171/60/61 175/61/61 173/65/61 +f 176/60/62 172/61/62 170/65/62 +f 180/60/1 179/61/1 177/65/1 +f 180/66/63 184/62/63 183/63/63 +f 184/59/3 182/60/3 181/61/3 +f 178/62/64 177/63/64 181/64/64 +f 179/60/65 183/61/65 181/65/65 +f 184/60/66 180/61/66 178/65/66 +f 188/62/67 187/63/67 185/64/67 +f 192/60/2 191/61/2 187/65/2 +f 190/62/68 189/63/68 191/64/68 +f 186/60/4 185/61/4 189/65/4 +f 187/60/69 191/61/69 189/65/69 +f 192/60/70 188/61/70 186/65/70 +f 196/60/1 195/61/1 193/65/1 +f 200/62/71 199/63/71 195/64/71 +f 200/59/3 198/60/3 197/61/3 +f 194/62/72 193/63/72 197/64/72 +f 195/60/73 199/61/73 197/65/73 +f 200/60/74 196/61/74 194/65/74 +f 204/62/75 203/63/75 201/64/75 +f 204/59/2 208/60/2 207/61/2 +f 206/62/76 205/63/76 207/64/76 +f 202/60/4 201/61/4 205/65/4 +f 203/60/77 207/61/77 205/65/77 +f 208/60/78 204/61/78 202/65/78 +f 212/62/67 211/63/67 209/64/67 +f 216/60/2 215/61/2 211/65/2 +f 214/62/68 213/63/68 215/64/68 +f 210/60/4 209/61/4 213/65/4 +f 211/60/69 215/61/69 213/65/69 +f 216/60/70 212/61/70 210/65/70 +f 220/62/79 219/63/79 217/64/79 +f 224/60/2 223/61/2 219/65/2 +f 222/62/80 221/63/80 223/64/80 +f 222/59/4 218/60/4 217/61/4 +f 219/60/81 223/61/81 221/65/81 +f 222/59/82 224/60/82 220/61/82 +f 228/67/83 227/68/83 225/69/83 +f 228/70/2 232/71/2 231/72/2 +f 230/67/84 229/68/84 231/69/84 +f 226/71/4 225/72/4 229/73/4 +f 227/71/85 231/72/85 229/73/85 +f 232/71/86 228/72/86 226/73/86 +f 236/74/83 235/75/83 233/76/83 +f 240/74/2 239/75/2 235/76/2 +f 238/77/84 237/78/84 239/79/84 +f 238/80/4 234/74/4 233/75/4 +f 235/74/85 239/75/85 237/76/85 +f 240/74/86 236/75/86 234/76/86 +f 244/81/87 243/82/87 241/83/87 +f 248/84/2 247/85/2 243/86/2 +f 248/87/88 246/88/88 245/89/88 +f 246/90/4 242/84/4 241/85/4 +f 243/91/89 247/92/89 245/93/89 +f 248/91/90 244/92/90 242/93/90 +f 252/94/87 251/95/87 249/96/87 +f 252/97/2 256/98/2 255/99/2 +f 254/100/88 253/101/88 255/102/88 +f 250/98/4 249/99/4 253/103/4 +f 251/98/89 255/99/89 253/103/89 +f 254/97/90 256/98/90 252/99/90 +f 260/10/10 259/11/10 257/12/10 +f 264/13/7 263/14/7 259/15/7 +f 262/16/8 261/17/8 263/18/8 +f 258/13/9 257/14/9 261/15/9 +f 257/104/5 259/19/5 263/20/5 +f 264/19/6 260/20/6 258/21/6 +f 268/28/7 267/29/7 265/30/7 +f 272/31/8 271/28/8 267/32/8 +f 270/28/9 269/29/9 271/30/9 +f 266/31/10 265/28/10 269/32/10 +f 265/105/5 267/28/5 271/29/5 +f 270/105/6 272/28/6 268/29/6 +f 276/7/4 275/8/4 273/9/4 +f 280/7/1 279/8/1 275/9/1 +f 278/7/2 277/8/2 279/9/2 +f 274/7/3 273/8/3 277/9/3 +f 275/7/5 279/8/5 277/9/5 +f 280/7/6 276/8/6 274/9/6 +f 2/106/1 4/1/1 1/3/1 +f 4/106/2 8/1/2 3/3/2 +f 8/106/3 6/1/3 7/3/3 +f 6/106/4 2/1/4 5/3/4 +f 1/106/5 3/1/5 5/3/5 +f 6/107/6 8/4/6 2/6/6 +f 10/108/1 12/7/1 9/9/1 +f 12/108/2 16/7/2 11/9/2 +f 16/108/3 14/7/3 15/9/3 +f 14/108/4 10/7/4 13/9/4 +f 9/108/5 11/7/5 13/9/5 +f 14/108/6 16/7/6 10/9/6 +f 18/109/7 20/10/7 17/12/7 +f 20/110/8 24/13/8 19/15/8 +f 24/111/9 22/16/9 23/18/9 +f 22/110/10 18/13/10 21/15/10 +f 17/104/5 19/19/5 21/21/5 +f 22/104/6 24/19/6 18/21/6 +f 26/112/1 28/22/1 25/24/1 +f 28/112/2 32/22/2 27/24/2 +f 32/112/3 30/22/3 31/24/3 +f 30/112/4 26/22/4 29/24/4 +f 25/113/5 27/25/5 29/27/5 +f 30/113/6 32/25/6 26/27/6 +f 34/105/8 36/28/8 33/30/8 +f 36/114/9 40/31/9 35/32/9 +f 40/105/10 38/28/10 39/30/10 +f 38/114/7 34/31/7 37/32/7 +f 33/105/5 35/28/5 37/30/5 +f 38/105/6 40/28/6 34/30/6 +f 41/39/1 42/33/1 43/35/1 +f 44/40/11 48/36/11 43/38/11 +f 48/33/3 46/34/3 47/39/3 +f 46/40/12 42/36/12 45/38/12 +f 41/40/13 43/36/13 45/38/13 +f 46/40/14 48/36/14 42/38/14 +f 49/39/4 50/33/4 51/35/4 +f 52/40/15 56/36/15 51/38/15 +f 56/33/2 54/34/2 55/39/2 +f 54/40/16 50/36/16 53/38/16 +f 49/40/17 51/36/17 53/38/17 +f 54/40/18 56/36/18 50/38/18 +f 57/39/3 58/33/3 59/35/3 +f 60/40/19 64/36/19 59/38/19 +f 64/33/1 62/34/1 63/39/1 +f 62/40/20 58/36/20 61/38/20 +f 57/40/21 59/36/21 61/38/21 +f 58/38/22 62/40/22 60/37/22 +f 65/39/2 66/33/2 67/35/2 +f 68/40/23 72/36/23 67/38/23 +f 72/33/4 70/34/4 71/39/4 +f 70/40/24 66/36/24 69/38/24 +f 65/40/25 67/36/25 69/38/25 +f 70/40/26 72/36/26 66/38/26 +f 74/33/1 76/34/1 73/39/1 +f 76/40/2 80/36/2 75/38/2 +f 80/33/3 78/34/3 79/39/3 +f 78/40/4 74/36/4 77/38/4 +f 73/40/5 75/36/5 77/38/5 +f 78/40/6 80/36/6 74/38/6 +f 82/33/1 84/34/1 81/39/1 +f 84/40/2 88/36/2 83/38/2 +f 88/33/3 86/34/3 87/39/3 +f 86/40/4 82/36/4 85/38/4 +f 81/40/5 83/36/5 85/38/5 +f 86/40/6 88/36/6 82/38/6 +f 90/33/3 92/34/3 89/39/3 +f 92/40/27 96/36/27 91/38/27 +f 96/33/1 94/34/1 95/39/1 +f 94/40/28 90/36/28 93/38/28 +f 89/40/29 91/36/29 93/38/29 +f 90/38/30 94/40/30 92/37/30 +f 97/39/4 98/33/4 99/35/4 +f 100/40/31 104/36/31 99/38/31 +f 104/33/2 102/34/2 103/39/2 +f 102/40/32 98/36/32 101/38/32 +f 101/38/33 97/40/33 103/37/33 +f 102/40/34 104/36/34 98/38/34 +f 106/33/4 108/34/4 105/39/4 +f 108/40/35 112/36/35 107/38/35 +f 112/33/2 110/34/2 111/39/2 +f 110/40/36 106/36/36 109/38/36 +f 105/40/37 107/36/37 109/38/37 +f 110/40/38 112/36/38 106/38/38 +f 114/44/39 116/41/39 113/43/39 +f 116/44/40 120/41/40 115/43/40 +f 120/44/41 118/41/41 119/43/41 +f 118/44/42 114/41/42 117/43/42 +f 113/44/5 115/41/5 117/43/5 +f 118/44/6 120/41/6 114/43/6 +f 121/43/39 122/44/39 123/42/39 +f 124/44/42 128/41/42 123/43/42 +f 128/44/41 126/41/41 127/43/41 +f 126/44/40 122/41/40 125/43/40 +f 121/44/6 123/41/6 125/43/6 +f 126/44/5 128/41/5 122/43/5 +f 130/48/43 132/45/43 129/47/43 +f 132/48/44 136/45/44 131/47/44 +f 136/48/45 134/45/45 135/47/45 +f 134/48/46 130/45/46 133/47/46 +f 133/47/5 129/48/5 135/46/5 +f 134/48/6 136/45/6 130/47/6 +f 138/48/47 140/45/47 137/47/47 +f 140/48/48 144/45/48 139/47/48 +f 144/48/49 142/45/49 143/47/49 +f 142/48/50 138/45/50 141/47/50 +f 137/48/5 139/45/5 141/47/5 +f 142/48/6 144/45/6 138/47/6 +f 146/48/51 148/45/51 145/47/51 +f 148/48/52 152/45/52 147/47/52 +f 152/48/53 150/45/53 151/47/53 +f 150/48/54 146/45/54 149/47/54 +f 149/47/6 145/48/6 151/46/6 +f 150/48/5 152/45/5 146/47/5 +f 154/48/55 156/45/55 153/47/55 +f 156/48/56 160/45/56 155/47/56 +f 160/48/57 158/45/57 159/47/57 +f 158/48/58 154/45/58 157/47/58 +f 153/48/6 155/45/6 157/47/6 +f 158/48/5 160/45/5 154/47/5 +f 161/55/1 162/49/1 163/51/1 +f 164/115/30 168/52/30 163/54/30 +f 168/49/3 166/50/3 167/55/3 +f 166/116/29 162/56/29 165/58/29 +f 161/49/28 163/50/28 165/55/28 +f 166/49/27 168/50/27 162/55/27 +f 169/65/1 170/59/1 171/61/1 +f 172/66/59 176/62/59 171/64/59 +f 176/59/3 174/60/3 175/65/3 +f 174/66/60 170/62/60 173/64/60 +f 169/59/61 171/60/61 173/65/61 +f 174/59/62 176/60/62 170/65/62 +f 178/59/1 180/60/1 177/65/1 +f 179/64/63 180/66/63 183/63/63 +f 183/65/3 184/59/3 181/61/3 +f 182/66/64 178/62/64 181/64/64 +f 177/59/65 179/60/65 181/65/65 +f 182/59/66 184/60/66 178/65/66 +f 186/66/67 188/62/67 185/64/67 +f 188/59/2 192/60/2 187/65/2 +f 192/66/68 190/62/68 191/64/68 +f 190/59/4 186/60/4 189/65/4 +f 185/59/69 187/60/69 189/65/69 +f 190/59/70 192/60/70 186/65/70 +f 194/59/1 196/60/1 193/65/1 +f 196/66/71 200/62/71 195/64/71 +f 199/65/3 200/59/3 197/61/3 +f 198/66/72 194/62/72 197/64/72 +f 193/59/73 195/60/73 197/65/73 +f 198/59/74 200/60/74 194/65/74 +f 202/66/75 204/62/75 201/64/75 +f 203/65/2 204/59/2 207/61/2 +f 208/66/76 206/62/76 207/64/76 +f 206/59/4 202/60/4 205/65/4 +f 201/59/77 203/60/77 205/65/77 +f 206/59/78 208/60/78 202/65/78 +f 210/66/67 212/62/67 209/64/67 +f 212/59/2 216/60/2 211/65/2 +f 216/66/68 214/62/68 215/64/68 +f 214/59/4 210/60/4 213/65/4 +f 209/59/69 211/60/69 213/65/69 +f 214/59/70 216/60/70 210/65/70 +f 218/66/79 220/62/79 217/64/79 +f 220/59/2 224/60/2 219/65/2 +f 224/66/80 222/62/80 223/64/80 +f 221/65/4 222/59/4 217/61/4 +f 217/59/81 219/60/81 221/65/81 +f 218/65/82 222/59/82 220/61/82 +f 226/117/83 228/67/83 225/69/83 +f 227/73/2 228/70/2 231/72/2 +f 232/117/84 230/67/84 231/69/84 +f 230/70/4 226/71/4 229/73/4 +f 225/70/85 227/71/85 229/73/85 +f 230/70/86 232/71/86 226/73/86 +f 234/80/83 236/74/83 233/76/83 +f 236/80/2 240/74/2 235/76/2 +f 240/118/84 238/77/84 239/79/84 +f 237/76/4 238/80/4 233/75/4 +f 233/80/85 235/74/85 237/76/85 +f 238/80/86 240/74/86 234/76/86 +f 242/119/87 244/81/87 241/83/87 +f 244/90/2 248/84/2 243/86/2 +f 247/120/88 248/87/88 245/89/88 +f 245/86/4 246/90/4 241/85/4 +f 241/121/89 243/91/89 245/93/89 +f 246/121/90 248/91/90 242/93/90 +f 250/122/87 252/94/87 249/96/87 +f 251/103/2 252/97/2 255/99/2 +f 256/123/88 254/100/88 255/102/88 +f 254/97/4 250/98/4 253/103/4 +f 249/97/89 251/98/89 253/103/89 +f 250/103/90 254/97/90 252/99/90 +f 258/109/10 260/10/10 257/12/10 +f 260/110/7 264/13/7 259/15/7 +f 264/111/8 262/16/8 263/18/8 +f 262/110/9 258/13/9 261/15/9 +f 261/21/5 257/104/5 263/20/5 +f 262/104/6 264/19/6 258/21/6 +f 266/105/7 268/28/7 265/30/7 +f 268/114/8 272/31/8 267/32/8 +f 272/105/9 270/28/9 271/30/9 +f 270/114/10 266/31/10 269/32/10 +f 269/30/5 265/105/5 271/29/5 +f 266/30/6 270/105/6 268/29/6 +f 274/108/4 276/7/4 273/9/4 +f 276/108/1 280/7/1 275/9/1 +f 280/108/2 278/7/2 279/9/2 +f 278/108/3 274/7/3 277/9/3 +f 273/108/5 275/7/5 277/9/5 +f 278/108/6 280/7/6 274/9/6 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.mtl new file mode 100644 index 00000000..2b07ba69 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.mtl @@ -0,0 +1,31 @@ +# Blender MTL File: 'buggyWhole.blend' +# Material Count: 5 + +newmtl None +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_main + +newmtl None.001 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.010 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.025 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 + +newmtl None_storage.png +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_storage diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.obj new file mode 100644 index 00000000..96a6c468 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.obj @@ -0,0 +1,4263 @@ +# Blender v2.76 (sub 0) OBJ File: 'buggyWhole.blend' +# www.blender.org +mtllib buggy.mtl +o Wheel_Right_Cover +v 0.923860 1.360271 0.355444 +v 0.923860 1.349508 -0.322901 +v 0.929918 1.323436 -0.295320 +v 0.635814 1.072476 -0.950726 +v 0.923860 1.031847 -0.904445 +v 0.635814 1.405730 -0.340635 +v 0.194501 0.928968 -0.787258 +v 0.347768 1.031847 -0.904445 +v 0.347768 1.349508 -0.322901 +v 0.923860 1.349508 -0.322901 +v 0.635814 1.417022 0.371009 +v 0.194501 1.207145 -0.277997 +v 0.347768 1.360271 0.355444 +v 0.923860 1.360271 0.355444 +v 0.923860 1.061254 0.948829 +v 0.194501 1.216571 0.316033 +v 0.194501 0.954720 0.835663 +v 0.347768 1.061254 0.948829 +v 0.635814 1.103327 0.993522 +v 0.923860 0.532578 1.298256 +v 0.194501 0.491756 1.141658 +v 0.347768 0.532577 1.298256 +v 0.635814 0.548699 1.360101 +v 0.923860 -0.084100 1.310096 +v 0.194502 -0.048272 1.152027 +v 0.347768 -0.084100 1.310096 +v 0.641871 1.046406 -0.896264 +v 0.641871 1.379660 -0.312294 +v 0.929917 1.005776 -0.851964 +v 0.200559 0.902897 -0.739795 +v 0.200559 1.181075 -0.252339 +v 0.353825 1.323436 -0.295320 +v 0.353825 1.005776 -0.851965 +v 0.641871 1.390952 0.368880 +v 0.929917 1.323436 -0.295320 +v 0.200559 1.190500 0.316258 +v 0.353825 1.334200 0.353982 +v 0.641871 1.077257 0.964740 +v 0.929917 1.035184 0.921961 +v 0.200559 0.928650 0.813639 +v 0.353825 1.035183 0.921960 +v 0.641871 0.522629 1.315624 +v 0.929918 0.506507 1.256426 +v 0.200559 0.465685 1.106533 +v 0.353825 0.506507 1.256426 +v 0.641871 -0.124320 1.327513 +v 0.929918 -0.110171 1.267760 +v 0.200559 -0.074342 1.116458 +v 0.353825 -0.110171 1.267760 +v 0.635814 -0.098250 1.372522 +v 0.929917 1.334200 0.353982 +v 0.929918 1.334200 0.353982 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.809306 0.257189 +vt 0.910683 0.300978 +vt 0.909096 0.189316 +vt 0.813439 0.213075 +vt 0.910412 0.212777 +vt 0.809743 0.623328 +vt 0.802385 0.525003 +vt 0.767033 0.617540 +vt 0.879881 0.601532 +vt 0.847297 0.523282 +vt 0.854311 0.617005 +vt 0.759950 0.422158 +vt 0.760018 0.523817 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.035491 0.837783 +vt 0.034640 0.930186 +vt 0.717705 0.625829 +vt 0.644609 0.664429 +vt 0.733319 0.644430 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.879881 0.623132 +vt 0.951706 0.579252 +vt 0.478460 0.803029 +vt 0.500209 0.712612 +vt 0.478430 0.717127 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.526132 0.633686 +vt 0.569142 0.723746 +vt 0.638417 0.647297 +vt 0.613524 0.724631 +vt 0.637757 0.727411 +vt 0.614279 0.633145 +vt 0.526305 0.822962 +vt 0.570116 0.826337 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.528666 0.900853 +vt 0.572592 0.908051 +vt 0.297174 0.516355 +vt 0.317310 0.526612 +vt 0.319506 0.435521 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.954393 0.894658 +vt 0.949424 0.850572 +vt 0.342811 0.434304 +vt 0.296963 0.355991 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.715956 0.387746 +vt 0.759950 0.463023 +vt 0.180286 0.719972 +vt 0.172762 0.815779 +vt 0.178395 0.816963 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.078713 0.832630 +vt 0.079592 0.837849 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.323102 0.798341 +vt 0.330475 0.803455 +vt 0.643343 0.684515 +vt 0.649849 0.688510 +vt 0.314149 0.815081 +vt 0.306193 0.772760 +vt 0.296963 0.773641 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.306170 0.727741 +vt 0.314792 0.700967 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vn 0.974900 0.222800 -0.003500 +vn 0.196900 0.860400 -0.470000 +vn -0.690900 0.634500 -0.346600 +vn -0.196900 0.860400 -0.470000 +vn 0.192500 0.981200 -0.015600 +vn -0.682300 0.730900 -0.011600 +vn -0.192500 0.981200 -0.015600 +vn 0.196400 0.875600 0.441200 +vn -0.689900 0.646500 0.325800 +vn -0.196400 0.875600 0.441200 +vn 0.205500 0.539600 0.816400 +vn -0.706800 0.390000 0.590100 +vn -0.205500 0.539600 0.816400 +vn 0.210900 0.018800 0.977300 +vn -0.716300 0.013400 0.697600 +vn -0.210900 0.018800 0.977300 +vn -0.194900 -0.851900 0.486100 +vn 0.687100 -0.631000 0.360100 +vn 0.194900 -0.851900 0.486100 +vn -0.192500 -0.981200 0.016300 +vn 0.682300 -0.730900 0.012100 +vn 0.192500 -0.981200 0.016300 +vn -0.194600 -0.867900 -0.456900 +vn 0.686600 -0.643400 -0.338700 +vn 0.194600 -0.867900 -0.456900 +vn -0.199500 -0.523900 -0.828100 +vn 0.695800 -0.384000 -0.606900 +vn 0.199500 -0.523900 -0.828100 +vn -0.202200 -0.018000 -0.979200 +vn 0.700900 -0.013100 -0.713100 +vn 0.202200 -0.018000 -0.979200 +vn -0.983300 -0.100300 -0.151700 +vn -0.974800 -0.223000 0.003500 +vn 0.986700 0.089600 0.135500 +vn -0.991300 -0.115500 0.063100 +vn -0.146700 -0.864400 0.480900 +vn 0.989900 0.002700 0.141700 +vn -0.967500 -0.225800 -0.113800 +vn 0.992100 0.109800 -0.060000 +vn -0.559600 -0.739100 0.375100 +vn 0.152200 -0.846200 0.510600 +vn -0.059000 -0.903000 -0.425700 +vn 0.985800 0.148500 0.078200 +vn 0.056600 -0.898100 -0.436200 +vn 0.230400 -0.860600 -0.454100 +vn -0.985800 -0.003200 -0.167600 +vn 0.974000 0.226500 -0.003800 +vn -0.990500 -0.073500 -0.116200 +vn -0.974000 -0.226300 0.003800 +vn 0.992500 0.065200 0.103100 +vn -0.985600 -0.146700 0.083700 +vn -0.146300 -0.851500 0.503500 +vn 0.990100 0.002600 0.140100 +vn -0.983900 -0.158200 -0.083300 +vn 0.986400 0.142900 -0.081500 +vn -0.576100 -0.702900 0.417100 +vn 0.151600 -0.831800 0.533900 +vn -0.059000 -0.896700 -0.438700 +vn 0.056600 -0.891500 -0.449400 +vn 0.208300 -0.845800 -0.491200 +vn -0.986200 -0.003000 -0.165700 +vn 0.969500 0.219000 0.110400 +usemtl None.001 +f 1/1/1 3/2/1 2/3/1 +f 4/4/2 6/5/2 5/6/2 +f 7/7/3 9/8/3 8/9/3 +f 8/9/4 6/5/4 4/4/4 +f 6/10/5 11/11/5 10/12/5 +f 12/13/6 13/14/6 9/15/6 +f 9/15/7 11/11/7 6/10/7 +f 11/11/8 15/16/8 14/17/8 +f 16/18/9 17/19/9 13/14/9 +f 13/14/10 18/20/10 11/11/10 +f 19/21/11 20/22/11 15/16/11 +f 17/19/12 21/23/12 18/20/12 +f 18/20/13 22/24/13 19/21/13 +f 23/25/14 24/26/14 20/27/14 +f 21/28/15 25/29/15 22/30/15 +f 22/31/16 26/32/16 23/25/16 +f 27/33/17 29/34/17 28/35/17 +f 30/36/18 32/37/18 31/38/18 +f 33/39/19 28/35/19 32/40/19 +f 28/41/20 35/42/20 34/43/20 +f 31/44/21 37/45/21 36/46/21 +f 32/47/22 34/43/22 37/45/22 +f 34/43/23 39/48/23 38/49/23 +f 36/46/24 37/45/24 40/50/24 +f 37/45/25 34/43/25 41/51/25 +f 38/49/26 43/52/26 42/53/26 +f 40/54/27 41/55/27 44/56/27 +f 41/51/28 38/49/28 45/57/28 +f 42/58/29 47/59/29 46/60/29 +f 44/56/30 45/61/30 48/62/30 +f 45/63/31 42/58/31 49/64/31 +f 17/65/32 40/66/32 21/28/32 +f 12/67/33 31/68/33 16/69/33 +f 20/70/34 39/71/34 15/72/34 +f 7/73/35 30/74/35 12/67/35 +f 26/32/36 46/75/36 50/76/36 +f 24/77/37 43/78/37 20/70/37 +f 16/69/38 36/79/38 17/65/38 +f 10/80/39 29/81/39 5/82/39 +f 25/29/40 49/83/40 26/84/40 +f 50/76/41 46/75/41 24/26/41 +f 5/85/42 27/86/42 4/87/42 +f 39/71/43 51/88/43 15/72/43 +f 4/87/44 27/86/44 8/89/44 +f 8/89/45 33/90/45 7/91/45 +f 21/28/46 44/92/46 25/29/46 +f 52/93/47 3/2/47 1/1/47 +f 5/6/2 6/5/2 10/94/2 +f 12/95/3 9/8/3 7/7/3 +f 9/8/4 6/5/4 8/9/4 +f 10/12/5 11/11/5 14/17/5 +f 16/18/6 13/14/6 12/13/6 +f 13/14/7 11/11/7 9/15/7 +f 19/21/8 15/16/8 11/11/8 +f 13/14/9 17/19/9 18/20/9 +f 11/11/10 18/20/10 19/21/10 +f 23/96/11 20/22/11 19/21/11 +f 18/20/12 21/23/12 22/24/12 +f 19/21/13 22/24/13 23/96/13 +f 50/76/14 24/26/14 23/25/14 +f 22/30/15 25/29/15 26/84/15 +f 23/25/16 26/32/16 50/76/16 +f 28/35/17 29/34/17 35/97/17 +f 33/98/18 32/37/18 30/36/18 +f 27/33/19 28/35/19 33/39/19 +f 34/43/20 35/42/20 51/99/20 +f 32/47/21 37/45/21 31/44/21 +f 28/41/22 34/43/22 32/47/22 +f 51/99/23 39/48/23 34/43/23 +f 40/50/24 37/45/24 41/51/24 +f 41/51/25 34/43/25 38/49/25 +f 39/48/26 43/52/26 38/49/26 +f 44/56/27 41/55/27 45/61/27 +f 45/57/28 38/49/28 42/53/28 +f 43/100/29 47/59/29 42/58/29 +f 48/62/30 45/61/30 49/101/30 +f 49/64/31 42/58/31 46/60/31 +f 21/28/48 40/66/48 44/92/48 +f 16/69/49 31/68/49 36/79/49 +f 43/78/50 39/71/50 20/70/50 +f 12/67/51 30/74/51 31/68/51 +f 49/102/52 46/75/52 26/32/52 +f 47/103/53 43/78/53 24/77/53 +f 17/65/54 36/79/54 40/66/54 +f 35/104/55 29/81/55 10/80/55 +f 48/105/56 49/83/56 25/29/56 +f 24/26/57 46/75/57 47/106/57 +f 29/107/58 27/86/58 5/85/58 +f 8/89/59 27/86/59 33/90/59 +f 7/91/60 33/90/60 30/108/60 +f 25/29/61 44/92/61 48/105/61 +f 15/72/62 51/88/62 14/109/62 +o Wheel_Left_Cover +v -0.923857 1.360270 0.355441 +v -0.923857 1.349506 -0.322904 +v -0.929915 1.323435 -0.295323 +v -0.635811 1.072474 -0.950729 +v -0.923857 1.031845 -0.904448 +v -0.635811 1.405729 -0.340638 +v -0.194498 0.928966 -0.787261 +v -0.347764 1.031845 -0.904448 +v -0.347765 1.349506 -0.322904 +v -0.923857 1.349506 -0.322904 +v -0.635811 1.417021 0.371006 +v -0.194498 1.207144 -0.278000 +v -0.347765 1.360270 0.355441 +v -0.923857 1.360270 0.355441 +v -0.923857 1.061253 0.948826 +v -0.194498 1.216570 0.316030 +v -0.194498 0.954719 0.835660 +v -0.347765 1.061253 0.948826 +v -0.635811 1.103326 0.993519 +v -0.923857 0.532577 1.298253 +v -0.194498 0.491755 1.141655 +v -0.347765 0.532576 1.298253 +v -0.635811 0.548698 1.360098 +v -0.923857 -0.084101 1.310093 +v -0.194499 -0.048273 1.152024 +v -0.347765 -0.084101 1.310093 +v -0.641868 1.046404 -0.896267 +v -0.641868 1.379658 -0.312297 +v -0.929914 1.005774 -0.851967 +v -0.200556 0.902896 -0.739798 +v -0.200556 1.181073 -0.252342 +v -0.353822 1.323435 -0.295323 +v -0.353822 1.005774 -0.851968 +v -0.641868 1.390951 0.368877 +v -0.929914 1.323435 -0.295323 +v -0.200556 1.190499 0.316255 +v -0.353822 1.334199 0.353979 +v -0.641868 1.077256 0.964737 +v -0.929914 1.035183 0.921958 +v -0.200556 0.928649 0.813636 +v -0.353822 1.035182 0.921957 +v -0.641868 0.522628 1.315621 +v -0.929916 0.506506 1.256423 +v -0.200556 0.465684 1.106530 +v -0.353822 0.506506 1.256423 +v -0.641868 -0.124321 1.327510 +v -0.929916 -0.110172 1.267756 +v -0.200556 -0.074343 1.116454 +v -0.353822 -0.110172 1.267757 +v -0.635811 -0.098251 1.372519 +v -0.929914 1.334199 0.353979 +v -0.929915 1.334199 0.353979 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.910683 0.300978 +vt 0.809306 0.257189 +vt 0.909096 0.189316 +vt 0.910412 0.212777 +vt 0.813439 0.213075 +vt 0.809743 0.623328 +vt 0.767033 0.617540 +vt 0.802385 0.525003 +vt 0.879881 0.601532 +vt 0.854311 0.617005 +vt 0.847297 0.523282 +vt 0.760018 0.523817 +vt 0.759950 0.422158 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.034640 0.930186 +vt 0.035491 0.837783 +vt 0.717705 0.625829 +vt 0.733319 0.644430 +vt 0.644609 0.664429 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.951706 0.579252 +vt 0.879881 0.623132 +vt 0.478460 0.803029 +vt 0.478430 0.717127 +vt 0.500209 0.712612 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.569142 0.723746 +vt 0.526132 0.633686 +vt 0.638417 0.647297 +vt 0.637757 0.727411 +vt 0.613524 0.724631 +vt 0.614279 0.633145 +vt 0.570116 0.826337 +vt 0.526305 0.822962 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.572592 0.908051 +vt 0.528666 0.900853 +vt 0.297174 0.516355 +vt 0.319506 0.435521 +vt 0.317310 0.526612 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.949424 0.850572 +vt 0.954393 0.894658 +vt 0.296963 0.355991 +vt 0.342811 0.434304 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.759950 0.463023 +vt 0.715956 0.387746 +vt 0.180286 0.719972 +vt 0.178395 0.816963 +vt 0.172762 0.815779 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.079592 0.837849 +vt 0.078713 0.832630 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.330475 0.803455 +vt 0.323102 0.798341 +vt 0.649849 0.688510 +vt 0.643343 0.684515 +vt 0.314149 0.815081 +vt 0.296963 0.773641 +vt 0.306193 0.772760 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.314792 0.700967 +vt 0.306170 0.727741 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vn 0.974900 -0.222800 0.003500 +vn -0.196900 0.860400 -0.470000 +vn 0.690900 0.634500 -0.346600 +vn 0.196900 0.860400 -0.470000 +vn -0.192500 0.981200 -0.015600 +vn 0.682300 0.730900 -0.011600 +vn 0.192500 0.981200 -0.015600 +vn -0.196400 0.875600 0.441200 +vn 0.689900 0.646500 0.325800 +vn 0.196400 0.875600 0.441200 +vn -0.205500 0.539600 0.816400 +vn 0.706800 0.390000 0.590100 +vn 0.205500 0.539600 0.816400 +vn -0.210900 0.018800 0.977300 +vn 0.716300 0.013400 0.697600 +vn 0.210900 0.018800 0.977300 +vn 0.194900 -0.851900 0.486100 +vn -0.687100 -0.631000 0.360100 +vn -0.194900 -0.851900 0.486100 +vn 0.192500 -0.981200 0.016300 +vn -0.682300 -0.730900 0.012100 +vn -0.192500 -0.981200 0.016300 +vn 0.194600 -0.867900 -0.456900 +vn -0.686600 -0.643400 -0.338700 +vn -0.194600 -0.867900 -0.456900 +vn 0.199500 -0.523900 -0.828100 +vn -0.695800 -0.384000 -0.606900 +vn -0.199500 -0.523900 -0.828100 +vn 0.202200 -0.018000 -0.979200 +vn -0.700900 -0.013100 -0.713100 +vn -0.202200 -0.018000 -0.979200 +vn 0.983300 -0.100300 -0.151700 +vn 0.974800 -0.223000 0.003500 +vn -0.986700 0.089600 0.135500 +vn 0.991300 -0.115500 0.063100 +vn 0.146700 -0.864400 0.480900 +vn -0.989900 0.002700 0.141700 +vn 0.967500 -0.225800 -0.113800 +vn -0.992100 0.109800 -0.060000 +vn 0.559600 -0.739100 0.375100 +vn -0.152200 -0.846200 0.510600 +vn 0.059000 -0.903000 -0.425700 +vn -0.985800 0.148500 0.078200 +vn -0.056600 -0.898100 -0.436200 +vn -0.230400 -0.860600 -0.454100 +vn 0.985800 -0.003200 -0.167600 +vn 0.974000 -0.226500 0.003800 +vn 0.990500 -0.073500 -0.116200 +vn 0.974000 -0.226300 0.003800 +vn -0.992500 0.065200 0.103100 +vn 0.985600 -0.146700 0.083700 +vn 0.146300 -0.851500 0.503500 +vn -0.990100 0.002600 0.140100 +vn 0.983900 -0.158200 -0.083300 +vn -0.986400 0.142900 -0.081500 +vn 0.576100 -0.702900 0.417100 +vn -0.151600 -0.831800 0.533900 +vn 0.059000 -0.896700 -0.438700 +vn -0.056600 -0.891500 -0.449400 +vn -0.208300 -0.845800 -0.491200 +vn 0.986200 -0.003000 -0.165700 +vn -0.969500 0.219000 0.110400 +usemtl None.010 +f 53/110/63 55/111/63 54/112/63 +f 56/113/64 57/114/64 58/115/64 +f 59/116/65 60/117/65 61/118/65 +f 60/117/66 56/113/66 58/115/66 +f 58/119/67 62/120/67 63/121/67 +f 64/122/68 61/123/68 65/124/68 +f 61/123/69 58/119/69 63/121/69 +f 63/121/70 66/125/70 67/126/70 +f 68/127/71 65/124/71 69/128/71 +f 65/124/72 63/121/72 70/129/72 +f 71/130/73 67/126/73 72/131/73 +f 69/128/74 70/129/74 73/132/74 +f 70/129/75 71/130/75 74/133/75 +f 75/134/76 72/135/76 76/136/76 +f 73/137/77 74/138/77 77/139/77 +f 74/140/78 75/134/78 78/141/78 +f 79/142/79 80/143/79 81/144/79 +f 82/145/80 83/146/80 84/147/80 +f 85/148/81 84/149/81 80/143/81 +f 80/150/82 86/151/82 87/152/82 +f 83/153/83 88/154/83 89/155/83 +f 84/156/84 89/155/84 86/151/84 +f 86/151/85 90/157/85 91/158/85 +f 88/154/86 92/159/86 89/155/86 +f 89/155/87 93/160/87 86/151/87 +f 90/157/88 94/161/88 95/162/88 +f 92/163/89 96/164/89 93/165/89 +f 93/160/90 97/166/90 90/157/90 +f 94/167/91 98/168/91 99/169/91 +f 96/164/92 100/170/92 97/171/92 +f 97/172/93 101/173/93 94/167/93 +f 69/174/94 73/137/94 92/175/94 +f 64/176/95 68/177/95 83/178/95 +f 72/179/96 67/180/96 91/181/96 +f 59/182/97 64/176/97 82/183/97 +f 78/141/98 102/184/98 98/185/98 +f 76/186/99 72/179/99 95/187/99 +f 68/177/100 69/174/100 88/188/100 +f 62/189/101 57/190/101 81/191/101 +f 77/139/102 78/192/102 101/193/102 +f 102/184/103 76/136/103 98/185/103 +f 57/194/104 56/195/104 79/196/104 +f 91/181/105 67/180/105 103/197/105 +f 56/195/106 60/198/106 79/196/106 +f 60/198/107 59/199/107 85/200/107 +f 73/137/108 77/139/108 96/201/108 +f 104/202/109 55/111/109 53/110/109 +f 57/114/64 62/203/64 58/115/64 +f 64/204/65 59/116/65 61/118/65 +f 61/118/66 60/117/66 58/115/66 +f 62/120/67 66/125/67 63/121/67 +f 68/127/68 64/122/68 65/124/68 +f 65/124/69 61/123/69 63/121/69 +f 71/130/70 63/121/70 67/126/70 +f 65/124/71 70/129/71 69/128/71 +f 63/121/72 71/130/72 70/129/72 +f 75/205/73 71/130/73 72/131/73 +f 70/129/74 74/133/74 73/132/74 +f 71/130/75 75/205/75 74/133/75 +f 102/184/76 75/134/76 76/136/76 +f 74/138/77 78/192/77 77/139/77 +f 75/134/78 102/184/78 78/141/78 +f 80/143/79 87/206/79 81/144/79 +f 85/207/80 82/145/80 84/147/80 +f 79/142/81 85/148/81 80/143/81 +f 86/151/82 103/208/82 87/152/82 +f 84/156/83 83/153/83 89/155/83 +f 80/150/84 84/156/84 86/151/84 +f 103/208/85 86/151/85 91/158/85 +f 92/159/86 93/160/86 89/155/86 +f 93/160/87 90/157/87 86/151/87 +f 91/158/88 90/157/88 95/162/88 +f 96/164/89 97/171/89 93/165/89 +f 97/166/90 94/161/90 90/157/90 +f 95/209/91 94/167/91 99/169/91 +f 100/170/92 101/210/92 97/171/92 +f 101/173/93 98/168/93 94/167/93 +f 73/137/110 96/201/110 92/175/110 +f 68/177/111 88/188/111 83/178/111 +f 95/187/112 72/179/112 91/181/112 +f 64/176/113 83/178/113 82/183/113 +f 101/211/114 78/141/114 98/185/114 +f 99/212/115 76/186/115 95/187/115 +f 69/174/116 92/175/116 88/188/116 +f 87/213/117 62/189/117 81/191/117 +f 100/214/118 77/139/118 101/193/118 +f 76/136/119 99/215/119 98/185/119 +f 81/216/120 57/194/120 79/196/120 +f 60/198/121 85/200/121 79/196/121 +f 59/199/122 82/217/122 85/200/122 +f 77/139/123 100/214/123 96/201/123 +f 67/180/124 66/218/124 103/197/124 +o RadarDish_Dish +v -0.046474 0.003334 -0.042163 +v 0.043038 0.003334 0.047349 +v -0.046474 0.003334 0.047349 +v 0.008856 0.015866 -0.005849 +v -0.243333 0.015866 -0.529526 +v 0.008856 0.015866 -0.587086 +v -0.445573 0.015866 -0.368244 +v -0.557808 0.015866 -0.135186 +v -0.557808 0.015866 0.123489 +v -0.445573 0.015866 0.356547 +v -0.243333 0.015866 0.517828 +v 0.008856 0.015866 0.575389 +v 0.261046 0.015866 0.517828 +v 0.463286 0.015866 0.356547 +v 0.575521 0.015866 0.123489 +v 0.575521 0.015866 -0.135186 +v 0.463286 0.015866 -0.368244 +v 0.261046 0.015866 -0.529526 +v -0.697838 0.123611 -0.569419 +v -1.097623 0.309456 -0.258395 +v -0.878471 0.309456 -0.713469 +v -0.697838 0.123611 0.557722 +v -0.483574 0.309457 1.016692 +v -0.878471 0.309457 0.701772 +v 0.401042 0.123611 0.808534 +v 0.715551 0.123611 0.557722 +v 0.501286 0.309457 1.016692 +v 0.890090 0.123611 -0.206985 +v 0.896184 0.309456 -0.713469 +v 1.115336 0.309456 -0.258395 +v -0.383330 0.123611 -0.820231 +v -0.483573 0.309456 -1.028389 +v -0.872377 0.123611 0.195287 +v -1.097623 0.309457 0.246698 +v 0.008856 0.123611 0.898048 +v 0.008856 0.309457 1.129086 +v 0.890090 0.123611 0.195287 +v 1.115336 0.309457 0.246698 +v 0.401042 0.123611 -0.820231 +v 0.008856 0.309456 -1.140783 +v 0.501286 0.309456 -1.028390 +v -0.872377 0.123611 -0.206984 +v -0.383330 0.123611 0.808534 +v 0.896184 0.309457 0.701772 +v 0.715551 0.123611 -0.569419 +v 0.008856 0.123611 -0.909745 +v 0.896184 0.309456 -0.713469 +v 0.008856 0.309456 -1.140783 +v -0.878471 0.309456 -0.713469 +v -0.878471 0.309457 0.701772 +v 0.501286 0.309457 1.016692 +v 1.115336 0.309456 -0.258395 +v -0.483573 0.309456 -1.028389 +v -1.097623 0.309457 0.246698 +v 0.008856 0.309457 1.129086 +v 1.115336 0.309457 0.246698 +v 0.501286 0.309456 -1.028390 +v -1.097623 0.309456 -0.258395 +v -0.483574 0.309457 1.016692 +v 0.896184 0.309457 0.701772 +v -0.562796 0.577838 -1.192896 +v -1.275634 0.577838 0.287328 +v 0.580508 0.577838 1.181199 +v 0.008856 0.577838 1.311675 +v 1.293347 0.577838 -0.299025 +v 1.293347 0.577838 0.287328 +v 0.008856 0.577838 -1.323372 +v 0.580508 0.577838 -1.192896 +v -1.275634 0.577838 -0.299025 +v -0.562796 0.577838 1.181199 +v 1.038938 0.577839 0.815614 +v 1.038938 0.577838 -0.827312 +v -1.021225 0.577838 -0.827311 +v -1.021225 0.577839 0.815614 +v 0.008856 0.051278 -0.005849 +v 0.261046 0.051278 -0.529526 +v 0.008856 0.051278 -0.587086 +v 0.463286 0.051278 -0.368244 +v 0.575521 0.051278 -0.135186 +v 0.575521 0.051278 0.123489 +v 0.463286 0.051278 0.356547 +v 0.261046 0.051278 0.517828 +v 0.008856 0.051278 0.575389 +v -0.243333 0.051278 0.517828 +v -0.445573 0.051278 0.356547 +v -0.557808 0.051278 0.123489 +v -0.557808 0.051278 -0.135186 +v -0.445573 0.051278 -0.368244 +v -0.243333 0.051278 -0.529526 +v 0.715551 0.159023 -0.569419 +v 1.115336 0.344869 -0.258395 +v 0.896184 0.344869 -0.713469 +v 0.715551 0.159024 0.557721 +v 0.501286 0.344869 1.016692 +v 0.896184 0.344869 0.701771 +v -0.383330 0.159024 0.808534 +v -0.878471 0.344869 0.701772 +v -0.483573 0.344869 1.016692 +v -0.872377 0.159023 -0.206985 +v -0.878471 0.344869 -0.713469 +v -1.097623 0.344869 -0.258395 +v 0.401042 0.159023 -0.820231 +v 0.501286 0.344869 -1.028390 +v 0.890090 0.159023 0.195287 +v 1.115336 0.344869 0.246698 +v 0.008856 0.159024 0.898048 +v 0.008856 0.344869 1.129086 +v -0.872377 0.159023 0.195287 +v -1.097623 0.344869 0.246698 +v -0.383329 0.159023 -0.820231 +v 0.008856 0.159023 -0.909745 +v -0.483573 0.344869 -1.028390 +v 0.890090 0.159023 -0.206984 +v 0.401042 0.159024 0.808534 +v -0.697838 0.159024 0.557722 +v -0.697838 0.159023 -0.569419 +v 0.008856 0.344868 -1.140783 +v -0.878471 0.344869 -0.713469 +v 0.008856 0.344868 -1.140783 +v 0.896184 0.344869 -0.713469 +v 0.896184 0.344869 0.701771 +v -0.483573 0.344869 1.016692 +v -1.097623 0.344869 -0.258395 +v 0.501286 0.344869 -1.028390 +v 1.115336 0.344869 0.246698 +v 0.008856 0.344869 1.129086 +v -1.097623 0.344869 0.246698 +v -0.483573 0.344869 -1.028390 +v 1.115336 0.344869 -0.258395 +v 0.501286 0.344869 1.016692 +v -0.878471 0.344869 0.701772 +v 0.580508 0.613250 -1.192896 +v 1.293347 0.613251 0.287328 +v 0.008856 0.613251 1.311675 +v -1.275634 0.613251 -0.299025 +v -1.275634 0.613251 0.287328 +v 0.008856 0.613250 -1.323372 +v -0.562795 0.613250 -1.192896 +v 1.293347 0.613251 -0.299025 +v 0.580508 0.613251 1.181199 +v -1.021225 0.613251 0.815614 +v -1.021225 0.613251 -0.827312 +v 1.038938 0.613251 -0.827311 +v 1.038938 0.613251 0.815614 +v -0.562796 0.613251 1.181199 +v 0.043038 0.003334 -0.042163 +vt 0.775111 0.244736 +vt 0.783916 0.253595 +vt 0.783943 0.244763 +vt 0.666182 0.335891 +vt 0.610276 0.323104 +vt 0.610265 0.348628 +vt 0.621360 0.300113 +vt 0.641321 0.284208 +vt 0.666207 0.278540 +vt 0.691087 0.284230 +vt 0.711035 0.300152 +vt 0.722099 0.323153 +vt 0.722089 0.348677 +vt 0.711005 0.371668 +vt 0.691044 0.387573 +vt 0.666158 0.393242 +vt 0.641278 0.387552 +vt 0.621330 0.371629 +vt 0.596374 0.280276 +vt 0.617355 0.235039 +vt 0.578378 0.266095 +vt 0.704809 0.255576 +vt 0.753480 0.266172 +vt 0.714529 0.235081 +vt 0.753020 0.355799 +vt 0.735783 0.391553 +vt 0.775063 0.360922 +vt 0.666041 0.425103 +vt 0.617270 0.436829 +vt 0.665852 0.447940 +vt 0.579137 0.316030 +vt 0.556736 0.310988 +vt 0.666116 0.246726 +vt 0.665947 0.223970 +vt 0.753036 0.316106 +vt 0.775084 0.311084 +vt 0.635772 0.848613 +vt 0.658354 0.893368 +vt 0.658505 0.843530 +vt 0.596327 0.391492 +vt 0.556715 0.360826 +vt 0.578319 0.405738 +vt 0.882742 0.409379 +vt 0.859827 0.364684 +vt 0.859980 0.414522 +vt 0.735830 0.280337 +vt 0.704741 0.416287 +vt 0.753421 0.405815 +vt 0.627348 0.416253 +vt 0.579121 0.355723 +vt 0.627416 0.255542 +vt 0.000000 0.000000 +vt 0.901619 0.073843 +vt 0.901617 0.034877 +vt 0.869343 0.065927 +vt 0.829113 0.790341 +vt 0.829335 0.745437 +vt 0.796449 0.786432 +vt 0.863999 0.122219 +vt 0.831441 0.065914 +vt 0.831559 0.122319 +vt 0.557300 0.790322 +vt 0.589743 0.844205 +vt 0.589917 0.786350 +vt 0.901321 0.171019 +vt 0.869221 0.122332 +vt 0.868997 0.178737 +vt 0.829266 0.840179 +vt 0.796626 0.844288 +vt 0.864195 0.170808 +vt 0.831787 0.178724 +vt 0.557136 0.745496 +vt 0.589727 0.734313 +vt 0.901080 0.209984 +vt 0.868717 0.223970 +vt 0.901514 0.122431 +vt 0.829763 0.885080 +vt 0.797203 0.896413 +vt 0.864446 0.209772 +vt 0.832078 0.223957 +vt 0.863897 0.073631 +vt 0.863909 0.034666 +vt 0.557150 0.840159 +vt 0.589237 0.896420 +vt 0.666157 0.112044 +vt 0.621304 0.076305 +vt 0.610239 0.099305 +vt 0.641252 0.060382 +vt 0.666133 0.054692 +vt 0.691019 0.060362 +vt 0.710980 0.076267 +vt 0.722063 0.099258 +vt 0.722074 0.124782 +vt 0.711009 0.147783 +vt 0.691061 0.163705 +vt 0.666180 0.169395 +vt 0.641294 0.163726 +vt 0.621333 0.147820 +vt 0.610250 0.124829 +vt 0.627333 0.031683 +vt 0.665854 0.000000 +vt 0.617271 0.011110 +vt 0.735768 0.056385 +vt 0.775064 0.087020 +vt 0.753422 0.042127 +vt 0.735813 0.167601 +vt 0.714528 0.212860 +vt 0.753479 0.181770 +vt 0.627399 0.192394 +vt 0.578377 0.181843 +vt 0.617353 0.212901 +vt 0.596311 0.056443 +vt 0.578320 0.042200 +vt 0.704726 0.031650 +vt 0.714446 0.011070 +vt 0.753020 0.131832 +vt 0.775084 0.136858 +vt 0.666099 0.201210 +vt 0.579120 0.131905 +vt 0.579104 0.092212 +vt 0.556735 0.136950 +vt 0.666026 0.022834 +vt 0.753004 0.092139 +vt 0.704791 0.192362 +vt 0.596356 0.167659 +vt 0.556715 0.087112 +vt 0.035410 0.745874 +vt 0.035159 0.706910 +vt 0.003091 0.738157 +vt 0.859827 0.414522 +vt 0.859330 0.369621 +vt 0.827747 0.410611 +vt 0.277928 0.794659 +vt 0.278121 0.746071 +vt 0.245493 0.794559 +vt 0.969850 0.302225 +vt 0.937564 0.248414 +vt 0.937744 0.306269 +vt 0.035708 0.843051 +vt 0.003318 0.794562 +vt 0.003437 0.850967 +vt 0.561420 0.840172 +vt 0.594187 0.786363 +vt 0.594013 0.844218 +vt 0.277822 0.843247 +vt 0.245371 0.850965 +vt 0.969691 0.347206 +vt 0.937559 0.358486 +vt 0.035697 0.882016 +vt 0.003423 0.896201 +vt 0.035606 0.794463 +vt 0.560985 0.885151 +vt 0.593507 0.896433 +vt 0.277825 0.882213 +vt 0.245374 0.896199 +vt 0.278362 0.707106 +vt 0.245717 0.738154 +vt 0.969694 0.252387 +vt 0.969255 0.207564 +vt 0.864950 0.122319 +vt 0.864727 0.178724 +vt 0.864446 0.223957 +vt 0.593997 0.734326 +vt 0.827184 0.020693 +vt 0.827170 0.065927 +vt 0.831454 0.020680 +vt 0.827289 0.122332 +vt 0.827516 0.178737 +vt 0.827808 0.223970 +vt 0.792436 0.734318 +vt 0.796706 0.734304 +vt 0.792179 0.786445 +vt 0.792356 0.844301 +vt 0.865070 0.020680 +vt 0.869340 0.020693 +vt 0.865073 0.065914 +vt 0.775084 0.253568 +vt 0.245997 0.692921 +vt 0.635652 0.888305 +vt 0.882621 0.369687 +vt 0.937054 0.196379 +vt 0.714444 0.436872 +vt 0.827170 0.358486 +vt 0.556715 0.885138 +vt 0.002800 0.692924 +vt 0.561570 0.790335 +vt 0.792934 0.896426 +vn 0.000000 -1.000000 -0.000000 +vn -0.573400 -0.771300 -0.276100 +vn -0.396800 -0.771300 0.497600 +vn 0.396800 -0.771300 0.497600 +vn 0.573400 -0.771300 -0.276100 +vn -0.396800 -0.771300 -0.497600 +vn -0.573400 -0.771300 0.276100 +vn 0.141600 -0.771300 0.620500 +vn 0.636400 -0.771300 0.000000 +vn 0.141600 -0.771300 -0.620500 +vn -0.636400 -0.771300 0.000000 +vn -0.141600 -0.771300 0.620500 +vn 0.573400 -0.771300 0.276100 +vn 0.396800 -0.771300 -0.497600 +vn -0.141600 -0.771300 -0.620500 +vn 0.072100 -0.946000 0.315900 +vn -0.291900 -0.946000 0.140600 +vn -0.202000 -0.946000 -0.253300 +vn 0.291900 -0.946000 -0.140600 +vn 0.202000 -0.946000 0.253300 +vn -0.202000 -0.946000 0.253300 +vn -0.291900 -0.946000 -0.140600 +vn -0.072100 -0.946000 -0.315900 +vn 0.202000 -0.946000 -0.253300 +vn 0.291900 -0.946000 0.140600 +vn -0.072100 -0.946000 0.315900 +vn -0.324000 -0.946000 -0.000000 +vn 0.072100 -0.946000 -0.315900 +vn 0.324000 -0.946000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn -0.519600 -0.552700 -0.651500 +vn -0.750800 -0.552700 0.361600 +vn 0.185400 -0.552700 0.812500 +vn 0.833400 -0.552700 -0.000000 +vn 0.185400 -0.552700 -0.812500 +vn -0.833400 -0.552700 0.000000 +vn -0.185400 -0.552700 0.812500 +vn 0.750800 -0.552700 0.361600 +vn 0.519600 -0.552700 -0.651500 +vn -0.185400 -0.552700 -0.812500 +vn -0.750800 -0.552700 -0.361600 +vn -0.519600 -0.552700 0.651500 +vn 0.519600 -0.552700 0.651500 +vn 0.750800 -0.552700 -0.361600 +vn 0.000000 1.000000 0.000000 +vn -0.573400 0.771300 0.276100 +vn -0.396800 0.771300 -0.497600 +vn 0.396800 0.771300 -0.497600 +vn 0.573400 0.771300 0.276100 +vn -0.396800 0.771300 0.497600 +vn -0.573400 0.771300 -0.276100 +vn 0.141600 0.771300 -0.620500 +vn 0.636400 0.771300 0.000000 +vn 0.141600 0.771300 0.620500 +vn -0.636400 0.771300 0.000000 +vn -0.141600 0.771300 -0.620500 +vn 0.573400 0.771300 -0.276100 +vn 0.396800 0.771300 0.497600 +vn -0.141600 0.771300 0.620500 +vn 0.072100 0.946000 -0.315900 +vn -0.291900 0.946000 -0.140600 +vn -0.202000 0.946000 0.253300 +vn 0.291900 0.946000 0.140600 +vn 0.202000 0.946000 -0.253300 +vn -0.202000 0.946000 -0.253300 +vn -0.291900 0.946000 0.140600 +vn -0.072100 0.946000 0.315900 +vn 0.202000 0.946000 0.253300 +vn 0.291900 0.946000 -0.140600 +vn -0.072100 0.946000 -0.315900 +vn -0.324000 0.946000 0.000000 +vn 0.072100 0.946000 0.315900 +vn 0.324000 0.946000 0.000000 +vn -0.519600 0.552700 0.651500 +vn -0.750800 0.552700 -0.361600 +vn 0.185400 0.552700 -0.812500 +vn 0.833400 0.552700 0.000000 +vn 0.185400 0.552700 0.812500 +vn -0.833400 0.552700 0.000000 +vn -0.185400 0.552700 -0.812500 +vn 0.750800 0.552700 -0.361600 +vn 0.519600 0.552700 0.651500 +vn -0.185400 0.552700 0.812500 +vn -0.750800 0.552700 0.361600 +vn -0.519600 0.552700 -0.651500 +vn 0.519600 0.552700 -0.651500 +vn 0.750800 0.552700 0.361600 +vn 0.222500 0.000000 -0.974900 +vn 0.623500 0.000000 -0.781800 +vn 0.901000 0.000000 -0.433900 +vn 1.000000 0.000000 0.000000 +vn 0.901000 0.000000 0.433900 +vn 0.623500 0.000000 0.781800 +vn 0.222500 0.000000 0.974900 +vn -0.222500 0.000000 0.974900 +vn -0.623500 0.000000 0.781800 +vn -0.901000 0.000000 0.433900 +vn -1.000000 0.000000 0.000000 +vn -0.901000 0.000000 -0.433900 +vn -0.623500 -0.000000 -0.781800 +vn -0.222500 0.000000 -0.974900 +usemtl None.025 +f 105/219/125 106/220/125 107/221/125 +f 108/222/125 109/223/125 110/224/125 +f 108/222/125 111/225/125 109/223/125 +f 108/222/125 112/226/125 111/225/125 +f 108/222/125 113/227/125 112/226/125 +f 108/222/125 114/228/125 113/227/125 +f 108/222/125 115/229/125 114/228/125 +f 108/222/125 116/230/125 115/229/125 +f 108/222/125 117/231/125 116/230/125 +f 108/222/125 118/232/125 117/231/125 +f 108/222/125 119/233/125 118/232/125 +f 108/222/125 120/234/125 119/233/125 +f 108/222/125 121/235/125 120/234/125 +f 108/222/125 122/236/125 121/235/125 +f 108/222/125 110/224/125 122/236/125 +f 123/237/126 124/238/126 125/239/126 +f 126/240/127 127/241/127 128/242/127 +f 129/243/128 130/244/128 131/245/128 +f 132/246/129 133/247/129 134/248/129 +f 135/249/130 123/237/130 136/250/130 +f 137/251/131 126/240/131 138/252/131 +f 139/253/132 129/243/132 140/254/132 +f 141/255/133 134/256/133 142/257/133 +f 143/258/134 144/259/134 145/260/134 +f 146/261/135 138/262/135 124/263/135 +f 147/264/136 139/253/136 127/241/136 +f 130/244/137 141/265/137 148/266/137 +f 149/267/138 143/258/138 133/247/138 +f 150/268/139 135/249/139 144/259/139 +f 116/230/140 117/231/140 139/253/140 +f 113/227/141 114/228/141 137/251/141 +f 109/223/142 111/225/142 135/249/142 +f 120/234/143 149/267/143 132/246/143 +f 117/231/144 118/232/144 129/243/144 +f 114/228/145 115/229/145 126/240/145 +f 111/225/146 112/226/146 123/237/146 +f 110/224/147 109/223/147 150/268/147 +f 121/235/148 143/258/148 149/267/148 +f 118/232/149 141/265/149 130/244/149 +f 115/229/150 116/230/150 147/264/150 +f 112/226/151 137/251/151 146/269/151 +f 122/236/152 110/224/152 143/258/152 +f 119/233/153 120/234/153 141/265/153 +f 133/270/154 151/270/154 145/270/154 +f 144/270/154 152/270/154 136/270/154 +f 125/270/154 153/270/154 124/270/154 +f 128/270/154 154/270/154 127/270/154 +f 131/270/154 155/270/154 148/270/154 +f 134/270/154 156/270/154 133/270/154 +f 136/270/154 157/270/154 125/270/154 +f 138/270/154 158/270/154 128/270/154 +f 140/270/154 159/270/154 131/270/154 +f 142/270/154 160/270/154 134/270/154 +f 145/270/154 161/270/154 144/270/154 +f 124/270/154 162/270/154 138/270/154 +f 127/270/154 163/270/154 140/270/154 +f 148/270/154 164/270/154 142/270/154 +f 157/271/155 153/272/155 165/273/155 +f 158/274/156 154/275/156 166/276/156 +f 159/277/157 167/278/157 168/279/157 +f 160/280/158 169/281/158 170/282/158 +f 161/283/159 171/284/159 172/285/159 +f 162/286/160 158/274/160 173/287/160 +f 163/288/161 159/277/161 174/289/161 +f 164/290/162 170/282/162 175/291/162 +f 151/292/163 172/285/163 176/293/163 +f 152/294/164 157/271/164 171/284/164 +f 153/295/165 173/287/165 177/296/165 +f 154/297/166 174/289/166 178/298/166 +f 155/299/167 164/300/167 167/278/167 +f 156/301/168 176/302/168 169/281/168 +f 179/303/169 180/304/169 181/305/169 +f 179/303/169 182/306/169 180/304/169 +f 179/303/169 183/307/169 182/306/169 +f 179/303/169 184/308/169 183/307/169 +f 179/303/169 185/309/169 184/308/169 +f 179/303/169 186/310/169 185/309/169 +f 179/303/169 187/311/169 186/310/169 +f 179/303/169 188/312/169 187/311/169 +f 179/303/169 189/313/169 188/312/169 +f 179/303/169 190/314/169 189/313/169 +f 179/303/169 191/315/169 190/314/169 +f 179/303/169 192/316/169 191/315/169 +f 179/303/169 193/317/169 192/316/169 +f 179/303/169 181/305/169 193/317/169 +f 194/318/170 195/319/170 196/320/170 +f 197/321/171 198/322/171 199/323/171 +f 200/324/172 201/325/172 202/326/172 +f 203/327/173 204/328/173 205/329/173 +f 206/330/174 196/320/174 207/331/174 +f 208/332/175 199/323/175 209/333/175 +f 210/334/176 202/326/176 211/335/176 +f 212/336/177 205/329/177 213/252/177 +f 214/337/178 215/338/178 216/339/178 +f 217/340/179 209/333/179 195/319/179 +f 218/341/180 210/334/180 198/322/180 +f 219/342/181 213/252/181 201/325/181 +f 220/343/182 216/339/182 204/328/182 +f 215/338/183 206/330/183 221/344/183 +f 187/311/184 188/312/184 210/334/184 +f 184/308/185 197/321/185 208/332/185 +f 180/304/186 182/306/186 206/330/186 +f 191/315/187 220/343/187 203/327/187 +f 188/312/188 189/313/188 200/324/188 +f 185/309/189 218/341/189 197/321/189 +f 182/306/190 183/307/190 194/318/190 +f 181/305/191 206/330/191 215/338/191 +f 192/316/192 214/337/192 220/343/192 +f 189/313/193 212/336/193 219/342/193 +f 186/310/194 187/311/194 218/341/194 +f 183/307/195 184/308/195 217/340/195 +f 193/317/196 215/338/196 214/337/196 +f 190/314/197 191/315/197 212/336/197 +f 204/270/154 216/270/154 222/270/154 +f 221/270/154 207/270/154 223/270/154 +f 196/270/154 195/270/154 224/270/154 +f 199/270/154 198/270/154 225/270/154 +f 202/270/154 201/270/154 226/270/154 +f 205/270/154 204/270/154 227/270/154 +f 207/270/154 196/270/154 228/270/154 +f 209/270/154 199/270/154 229/270/154 +f 211/270/154 202/270/154 230/270/154 +f 213/270/154 205/270/154 231/270/154 +f 216/270/154 221/270/154 232/270/154 +f 195/270/154 209/270/154 233/270/154 +f 198/270/154 211/270/154 234/270/154 +f 201/270/154 213/270/154 235/270/154 +f 228/345/198 224/346/198 236/347/198 +f 229/348/199 225/349/199 237/350/199 +f 230/351/200 226/352/200 238/353/200 +f 231/354/201 239/355/201 240/356/201 +f 232/357/202 241/358/202 242/359/202 +f 233/360/203 237/361/203 243/362/203 +f 234/363/204 238/353/204 244/364/204 +f 235/365/205 231/354/205 245/366/205 +f 222/367/206 242/359/206 246/368/206 +f 223/369/207 228/345/207 241/358/207 +f 224/370/208 243/362/208 247/371/208 +f 225/372/209 234/363/209 248/373/209 +f 226/352/210 235/374/210 249/375/210 +f 227/376/211 222/377/211 239/355/211 +f 241/378/212 172/285/212 171/284/212 +f 236/379/213 247/380/213 172/285/213 +f 247/371/214 169/281/214 176/302/214 +f 243/362/215 237/361/215 169/281/215 +f 237/361/216 248/381/216 170/282/216 +f 248/382/217 244/383/217 175/384/217 +f 244/383/218 238/385/218 167/278/218 +f 238/385/219 249/386/219 168/279/219 +f 249/386/220 245/387/220 174/289/220 +f 245/388/221 166/276/221 178/389/221 +f 240/390/222 173/287/222 166/276/222 +f 239/391/223 177/296/223 173/287/223 +f 246/392/224 165/273/224 177/393/224 +f 242/394/225 171/284/225 165/273/225 +f 139/253/140 117/231/140 129/243/140 +f 250/395/125 106/220/125 105/219/125 +f 238/353/200 226/352/200 249/375/200 +f 248/373/209 234/363/209 244/364/209 +f 140/254/132 129/243/132 131/245/132 +f 150/268/147 109/223/147 135/249/147 +f 138/252/131 126/240/131 128/242/131 +f 245/366/205 231/354/205 240/356/205 +f 249/375/210 235/374/210 245/396/210 +f 146/269/126 124/238/126 123/237/126 +f 147/264/127 127/241/127 126/240/127 +f 149/267/129 133/247/129 132/246/129 +f 129/243/144 118/232/144 130/244/144 +f 173/287/160 158/274/160 166/276/160 +f 132/397/133 134/256/133 141/255/133 +f 150/268/134 144/259/134 143/258/134 +f 137/398/135 138/262/135 146/261/135 +f 210/334/184 188/312/184 200/324/184 +f 217/340/195 184/308/195 208/332/195 +f 144/259/139 135/249/139 136/250/139 +f 174/289/220 245/387/220 178/298/220 +f 126/240/145 115/229/145 147/264/145 +f 137/251/141 114/228/141 126/240/141 +f 121/235/143 149/267/143 120/234/143 +f 147/264/150 116/230/150 139/253/150 +f 172/285/213 247/380/213 176/293/213 +f 239/355/211 222/377/211 246/399/211 +f 122/236/148 143/258/148 121/235/148 +f 119/233/149 141/265/149 118/232/149 +f 133/247/138 143/258/138 145/260/138 +f 113/227/151 137/251/151 112/226/151 +f 212/336/197 191/315/197 203/327/197 +f 145/270/154 151/270/154 161/270/154 +f 136/270/154 152/270/154 157/270/154 +f 124/270/154 153/270/154 162/270/154 +f 127/270/154 154/270/154 163/270/154 +f 148/270/154 155/270/154 164/270/154 +f 133/270/154 156/270/154 151/270/154 +f 125/270/154 157/270/154 153/270/154 +f 128/270/154 158/270/154 154/270/154 +f 131/270/154 159/270/154 155/270/154 +f 134/270/154 160/270/154 156/270/154 +f 144/270/154 161/270/154 152/270/154 +f 138/270/154 162/270/154 158/270/154 +f 140/270/154 163/270/154 159/270/154 +f 142/270/154 164/270/154 160/270/154 +f 165/273/155 153/272/155 177/393/155 +f 148/266/137 141/265/137 142/400/137 +f 155/299/157 167/278/157 159/277/157 +f 156/301/158 169/281/158 160/280/158 +f 152/294/159 171/284/159 161/283/159 +f 237/350/199 225/349/199 248/401/199 +f 198/322/180 210/334/180 211/335/180 +f 160/280/162 170/282/162 164/290/162 +f 161/283/163 172/285/163 151/292/163 +f 171/284/164 157/271/164 165/273/164 +f 162/286/165 173/287/165 153/295/165 +f 163/288/166 174/289/166 154/297/166 +f 167/278/167 164/300/167 175/384/167 +f 151/402/168 176/302/168 156/301/168 +f 217/340/170 195/319/170 194/318/170 +f 218/341/171 198/322/171 197/321/171 +f 219/342/172 201/325/172 200/324/172 +f 220/343/173 204/328/173 203/327/173 +f 194/318/174 196/320/174 206/330/174 +f 197/321/175 199/323/175 208/332/175 +f 200/324/176 202/326/176 210/334/176 +f 203/327/177 205/329/177 212/336/177 +f 208/332/179 209/333/179 217/340/179 +f 127/241/136 139/253/136 140/254/136 +f 212/336/181 213/252/181 219/342/181 +f 214/337/182 216/339/182 220/343/182 +f 221/344/183 206/330/183 207/331/183 +f 218/341/194 187/311/194 210/334/194 +f 185/309/185 197/321/185 184/308/185 +f 192/316/187 220/343/187 191/315/187 +f 200/324/188 189/313/188 219/342/188 +f 186/310/189 218/341/189 185/309/189 +f 135/249/142 111/225/142 123/237/142 +f 180/304/191 206/330/191 181/305/191 +f 193/317/192 214/337/192 192/316/192 +f 190/314/193 212/336/193 189/313/193 +f 194/318/190 183/307/190 217/340/190 +f 206/330/186 182/306/186 194/318/186 +f 181/305/196 215/338/196 193/317/196 +f 123/237/146 112/226/146 146/269/146 +f 222/270/154 216/270/154 232/270/154 +f 223/270/154 207/270/154 228/270/154 +f 224/270/154 195/270/154 233/270/154 +f 225/270/154 198/270/154 234/270/154 +f 226/270/154 201/270/154 235/270/154 +f 227/270/154 204/270/154 222/270/154 +f 228/270/154 196/270/154 224/270/154 +f 229/270/154 199/270/154 225/270/154 +f 230/270/154 202/270/154 226/270/154 +f 231/270/154 205/270/154 227/270/154 +f 232/270/154 221/270/154 223/270/154 +f 233/270/154 209/270/154 229/270/154 +f 234/270/154 211/270/154 230/270/154 +f 235/270/154 213/270/154 231/270/154 +f 236/347/198 224/346/198 247/403/198 +f 227/376/201 239/355/201 231/354/201 +f 223/369/202 241/358/202 232/357/202 +f 229/404/203 237/361/203 233/360/203 +f 230/351/204 238/353/204 234/363/204 +f 136/250/130 123/237/130 125/239/130 +f 232/357/206 242/359/206 222/367/206 +f 241/358/207 228/345/207 236/347/207 +f 233/360/208 243/362/208 224/370/208 +f 174/289/161 159/277/161 168/279/161 +f 236/379/212 172/285/212 241/378/212 +f 143/258/152 110/224/152 150/268/152 +f 243/362/214 169/281/214 247/371/214 +f 141/265/153 120/234/153 132/246/153 +f 170/282/216 248/381/216 175/291/216 +f 175/384/217 244/383/217 167/278/217 +f 167/278/218 238/385/218 168/279/218 +f 168/279/219 249/386/219 174/289/219 +f 166/276/156 154/275/156 178/389/156 +f 240/390/221 166/276/221 245/388/221 +f 239/391/222 173/287/222 240/390/222 +f 246/405/223 177/296/223 239/391/223 +f 242/394/224 165/273/224 246/392/224 +f 241/378/225 171/284/225 242/394/225 +f 169/281/215 237/361/215 170/282/215 +f 216/339/178 215/338/178 221/344/178 +f 131/245/128 130/244/128 148/266/128 +o Wheel_Right +v 0.615487 -0.030448 -0.998163 +v 0.665487 -0.030448 -0.998163 +v 0.665487 -0.530448 -0.864188 +v 0.615487 -0.530448 -0.864188 +v 0.665487 -0.896473 -0.498163 +v 0.615487 -0.896473 -0.498163 +v 0.665487 -1.030449 0.001837 +v 0.615487 -1.030449 0.001837 +v 0.615487 -0.896474 0.501837 +v 0.665487 -0.896474 0.501837 +v 0.665487 -0.530449 0.867862 +v 0.615487 -0.530449 0.867862 +v 0.615487 -0.030449 1.001837 +v 0.665487 -0.030449 1.001837 +v 0.665487 0.469551 0.867862 +v 0.615487 0.469551 0.867862 +v 0.665487 0.835577 0.501837 +v 0.615487 0.835577 0.501837 +v 0.665487 0.969552 0.001837 +v 0.615487 0.969552 0.001837 +v 0.665487 0.835578 -0.498163 +v 0.665487 0.469553 -0.864188 +v 0.615487 0.469553 -0.864188 +v 0.615487 0.835578 -0.498163 +v 0.635814 -1.170575 0.346383 +v 0.635814 -1.181867 -0.300565 +v 0.923860 -1.125115 -0.286416 +v 0.923861 -1.114352 0.330262 +v 1.077127 -0.971990 0.289440 +v 1.077127 -0.981416 -0.250587 +v 1.023898 -0.818007 -0.209845 +v 1.023898 -0.810102 0.243020 +v 0.789080 -0.711348 -0.275796 +v 0.482548 -0.704437 0.318163 +v 0.789080 -0.704437 0.318163 +v 0.554982 -0.304464 0.313508 +v 0.482548 -0.711348 -0.275796 +v 0.247731 -0.810102 0.243020 +v 0.247731 -0.818007 -0.209845 +v 0.194502 -0.981416 -0.250587 +v 0.194502 -0.971990 0.289440 +v 0.347768 -1.114352 0.330261 +v 0.347768 -1.125115 -0.286416 +v 0.635814 -0.868172 -0.866486 +v 0.923860 -0.826098 -0.825856 +v 1.077126 -0.719565 -0.722978 +v 1.023898 -0.598419 -0.605989 +v 0.789080 -0.519347 -0.529630 +v 0.482548 -0.519347 -0.529630 +v 0.247731 -0.598419 -0.605989 +v 0.194502 -0.719565 -0.722978 +v 0.347768 -0.826098 -0.825856 +v 0.635814 -0.313544 -1.199740 +v 0.923860 -0.297422 -1.143517 +v 1.077126 -0.256600 -1.001155 +v 1.023898 -0.210180 -0.839267 +v 0.789080 -0.285323 -0.733602 +v 0.482548 -0.285323 -0.733602 +v 0.247730 -0.210180 -0.839267 +v 0.194502 -0.256600 -1.001155 +v 0.347768 -0.297422 -1.143517 +v 0.635814 0.333405 -1.211033 +v 0.923860 0.319256 -1.154281 +v 1.077126 0.283427 -1.010581 +v 1.023898 0.242685 -0.847172 +v 0.789080 0.308636 -0.740514 +v 0.554982 -0.280668 -0.333629 +v 0.482548 0.308636 -0.740514 +v 0.247730 0.242685 -0.847172 +v 0.194502 0.283427 -1.010581 +v 0.347768 0.319256 -1.154281 +v 0.635814 0.899326 -0.897338 +v 0.923860 0.858696 -0.855265 +v 1.077126 0.755818 -0.748731 +v 1.023898 0.638829 -0.627586 +v 0.789080 0.562470 -0.548513 +v 0.482548 0.562470 -0.548513 +v 0.247730 0.638829 -0.627586 +v 0.194502 0.755818 -0.748731 +v 0.347768 0.858696 -0.855265 +v 0.635814 1.232579 -0.342710 +v 0.923860 1.176357 -0.326588 +v 1.077126 1.033994 -0.285766 +v 1.023897 0.872107 -0.239346 +v 0.789080 0.766442 -0.314489 +v 0.482548 0.766442 -0.314489 +v 0.247730 0.872107 -0.239346 +v 0.194502 1.033994 -0.285766 +v 0.347768 1.176357 -0.326588 +v 0.635814 1.243872 0.304239 +v 0.923860 1.187121 0.290089 +v 1.077126 1.043421 0.254261 +v 1.023897 0.880011 0.213518 +v 0.789080 0.773353 0.279470 +v 0.482548 0.773353 0.279470 +v 0.554982 0.366469 -0.309834 +v 0.247730 0.880011 0.213518 +v 0.194502 1.043421 0.254261 +v 0.347768 1.187121 0.290089 +v 0.635814 0.930177 0.870160 +v 0.923860 0.888104 0.829530 +v 1.077126 0.781570 0.726652 +v 1.023898 0.660424 0.609663 +v 0.789080 0.581352 0.533304 +v 0.482548 0.581352 0.533304 +v 0.247730 0.660424 0.609663 +v 0.194502 0.781570 0.726652 +v 0.347768 0.888104 0.829530 +v 0.635814 0.375549 1.203414 +v 0.923860 0.359427 1.147191 +v 1.077126 0.318606 1.004829 +v 1.023898 0.272185 0.842941 +v 0.789080 0.347328 0.737276 +v 0.482548 0.347328 0.737276 +v 0.247730 0.272185 0.842941 +v 0.194502 0.318606 1.004829 +v 0.347768 0.359427 1.147191 +v 0.635814 -0.271400 1.214706 +v 0.923860 -0.257250 1.157955 +v 1.077127 -0.221422 1.014255 +v 1.023898 -0.180679 0.850846 +v 0.789080 -0.246631 0.744188 +v 0.482548 -0.246631 0.744188 +v 0.554982 -0.251285 0.344215 +v 0.247731 -0.180679 0.850846 +v 0.194502 -0.221422 1.014255 +v 0.347768 -0.257250 1.157955 +v 0.635814 -0.837321 0.901012 +v 0.923860 -0.796691 0.858938 +v 1.077127 -0.693813 0.752405 +v 1.023898 -0.576824 0.631259 +v 0.789080 -0.500465 0.552187 +v 0.482548 -0.500465 0.552187 +v 0.247731 -0.576824 0.631259 +v 0.194502 -0.693813 0.752405 +v 0.347768 -0.796691 0.858937 +v 0.789080 -0.304464 0.313508 +v 0.789080 -0.311375 -0.280451 +v 0.554982 -0.311375 -0.280451 +v 0.789080 0.342673 0.337303 +v 0.789080 -0.251285 0.344215 +v 0.554982 0.342673 0.337303 +v 0.789080 -0.280668 -0.333629 +v 0.789080 0.313291 -0.340541 +v 0.554982 0.313291 -0.340541 +v 0.789080 0.366469 -0.309834 +v 0.789080 0.373380 0.284124 +v 0.554982 0.373380 0.284124 +v -0.005548 0.048233 0.047777 +v -0.005548 0.048234 -0.052223 +v -0.005548 -0.051767 -0.052223 +v 0.744452 0.048232 -0.052223 +v 0.744452 0.048233 0.047777 +v 0.744452 -0.051768 0.047777 +v -0.005548 -0.051768 0.047777 +v 0.744452 -0.051767 -0.052223 +vt 0.513624 0.783997 +vt 0.505969 0.783973 +vt 0.506188 0.712612 +vt 0.949158 0.484385 +vt 0.941584 0.484478 +vt 0.944659 0.410168 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.335156 0.743134 +vt 0.342603 0.674991 +vt 0.334948 0.675014 +vt 0.334704 0.595770 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.521494 0.627793 +vt 0.523482 0.675613 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.530171 0.331957 +vt 0.598820 0.371478 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.000848 0.531055 +vt 0.109074 0.639268 +vt 0.830015 0.623328 +vt 0.837273 0.712605 +vt 0.792389 0.714799 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.455687 0.331872 +vt 0.462495 0.306756 +vt 0.758447 0.693332 +vt 0.757332 0.757109 +vt 0.721737 0.772501 +vt 0.340460 0.815081 +vt 0.340316 0.862012 +vt 0.297072 0.826038 +vt 0.676280 0.688510 +vt 0.674834 0.772357 +vt 0.639684 0.692967 +vt 0.225458 0.066465 +vt 0.158175 0.049709 +vt 0.157773 0.024179 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.872743 0.628628 +vt 0.879661 0.713728 +vt 0.837383 0.811379 +vt 0.792493 0.808950 +vt 0.766009 0.719283 +vt 0.384108 0.290468 +vt 0.402470 0.272035 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.675115 0.819426 +vt 0.638639 0.825588 +vt 0.091518 0.068826 +vt 0.078288 0.046975 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.830315 0.893182 +vt 0.785756 0.886926 +vt 0.760201 0.870015 +vt 0.342811 0.218841 +vt 0.367839 0.211969 +vt 0.758639 0.881416 +vt 0.722613 0.861988 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.020847 0.106443 +vt 0.000874 0.094773 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.410612 0.724746 +vt 0.366797 0.631670 +vt 0.366513 0.724108 +vt 0.343300 0.641815 +vt 0.342862 0.136182 +vt 0.367882 0.142652 +vt 0.880326 0.806458 +vt 0.880176 0.757653 +vt 0.916070 0.738915 +vt 0.651005 0.881416 +vt 0.697339 0.884549 +vt 0.661972 0.937679 +vt 0.963197 0.803150 +vt 0.963001 0.738770 +vt 0.999158 0.806093 +vt 0.026573 0.185955 +vt 0.000842 0.186648 +vt 0.478430 0.642230 +vt 0.478182 0.723178 +vt 0.454713 0.724378 +vt 0.454997 0.631940 +vt 0.410323 0.818844 +vt 0.366238 0.813802 +vt 0.342811 0.801309 +vt 0.384247 0.064640 +vt 0.402587 0.082657 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.962852 0.690423 +vt 0.998802 0.690392 +vt 0.045687 0.252581 +vt 0.023635 0.266097 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.410121 0.884850 +vt 0.366045 0.876721 +vt 0.368574 0.047943 +vt 0.450371 0.000831 +vt 0.455878 0.023384 +vt 0.462656 0.048059 +vt 0.879766 0.623692 +vt 0.915776 0.643196 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.083117 0.323505 +vt 0.071984 0.342642 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.227051 0.730389 +vt 0.184003 0.645063 +vt 0.544788 0.000929 +vt 0.538560 0.023470 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.000842 0.766738 +vt 0.037804 0.750424 +vt 0.941584 0.331962 +vt 0.941398 0.422896 +vt 0.879881 0.422891 +vt 0.090587 0.832202 +vt 0.084243 0.749997 +vt 0.123318 0.828165 +vt 0.162852 0.317479 +vt 0.163350 0.343486 +vt 0.296292 0.658368 +vt 0.295662 0.734429 +vt 0.271432 0.731379 +vt 0.272151 0.644522 +vt 0.228056 0.828732 +vt 0.183284 0.731920 +vt 0.626527 0.048208 +vt 0.610139 0.064873 +vt 0.000978 0.697596 +vt 0.038890 0.702846 +vt 0.085329 0.702418 +vt 0.118564 0.696514 +vt 0.229508 0.298361 +vt 0.242837 0.320688 +vt 0.296500 0.816519 +vt 0.272390 0.825121 +vt 0.230552 0.907946 +vt 0.184242 0.825662 +vt 0.673686 0.130002 +vt 0.651436 0.136500 +vt 0.592019 0.082852 +vt 0.006100 0.640350 +vt 0.041316 0.659523 +vt 0.087755 0.659095 +vt 0.277678 0.248491 +vt 0.300278 0.261221 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.741202 0.192204 +vt 0.785112 0.254285 +vt 0.673628 0.224394 +vt 0.651385 0.219160 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.809649 0.113269 +vt 0.845561 0.100185 +vt 0.183284 0.908088 +vt 0.229724 0.907946 +vt 0.222683 0.963363 +vt 0.892764 0.189172 +vt 0.892491 0.100041 +vt 0.928690 0.180787 +vt 0.294454 0.181233 +vt 0.320282 0.181017 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.741495 0.096636 +vt 0.785595 0.096730 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.609999 0.290702 +vt 0.591902 0.272231 +vt 0.809448 0.047401 +vt 0.845426 0.056510 +vt 0.892357 0.056365 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.673931 0.096282 +vt 0.697396 0.096460 +vt 0.741789 0.000831 +vt 0.785876 0.005407 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.809306 0.001196 +vt 0.845312 0.019129 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.296963 0.616402 +vt 0.332779 0.615853 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.720616 0.271792 +vt 0.709710 0.331848 +vt 0.879860 0.985796 +vt 0.879766 0.894861 +vt 0.940684 0.894960 +vt 0.297236 0.615853 +vt 0.296963 0.526722 +vt 0.332803 0.526612 +vt 0.941258 0.444023 +vt 0.941321 0.534932 +vt 0.879881 0.443788 +vt 0.133383 0.904255 +vt 0.180286 0.904398 +vt 0.143492 0.960751 +vt 0.478430 0.884894 +vt 0.478402 0.975800 +vt 0.417169 0.975757 +vt 0.767744 0.331957 +vt 0.767547 0.267577 +vt 0.803584 0.331848 +vt 0.818505 0.984088 +vt 0.818532 0.893182 +vt 0.879766 0.893225 +vt 0.911101 0.280588 +vt 0.911038 0.189679 +vt 0.972132 0.189316 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.513843 0.712612 +vt 0.478457 0.710220 +vt 0.297106 0.908942 +vt 0.296963 0.862012 +vt 0.340350 0.872968 +vt 0.404092 0.884869 +vt 0.404028 0.975801 +vt 0.342811 0.975783 +vt 0.767547 0.331957 +vt 0.720616 0.331814 +vt 0.756641 0.271902 +vt 0.818894 0.331951 +vt 0.803585 0.331957 +vt 0.803584 0.316653 +vt 0.485203 0.925578 +vt 0.484851 0.810753 +vt 0.500243 0.925532 +vt 0.818889 0.301333 +vt 0.818888 0.316642 +vt 0.803584 0.316647 +vt 0.015117 0.947455 +vt 0.015470 0.832630 +vt 0.026433 0.832663 +vt 0.001191 0.833505 +vt 0.015117 0.832630 +vt 0.014769 0.946257 +vt 0.943226 0.115741 +vt 0.929041 0.115591 +vt 0.928690 0.000831 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.109050 0.343516 +vt 0.188269 0.343486 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn -0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn -1.000000 0.000000 -0.000000 +vn 0.192500 -0.981200 0.017100 +vn 0.682300 -0.730900 0.012800 +vn 0.950400 0.310900 -0.005400 +vn 0.417200 0.908700 -0.015900 +vn -0.000000 0.011600 0.999900 +vn -0.407500 0.913100 -0.010600 +vn -0.950400 0.310900 -0.005400 +vn -0.682300 -0.730900 0.012800 +vn -0.192500 -0.981200 0.017100 +vn 0.192500 -0.858300 -0.475700 +vn 0.682300 -0.639400 -0.354400 +vn 0.950400 0.272000 0.150800 +vn 0.252600 0.846200 0.469100 +vn -0.000000 0.797500 0.603300 +vn -0.421400 0.723300 0.547100 +vn -0.950400 0.272000 0.150800 +vn -0.682300 -0.639400 -0.354400 +vn -0.192500 -0.858300 -0.475700 +vn 0.192500 -0.505400 -0.841100 +vn 0.682300 -0.376500 -0.626600 +vn 0.950400 0.160200 0.266600 +vn 0.215700 0.502900 0.837000 +vn 0.000000 0.657000 0.753900 +vn -0.422700 0.595500 0.683200 +vn -0.950400 0.160200 0.266600 +vn -0.682300 -0.376500 -0.626600 +vn -0.192500 -0.505400 -0.841100 +vn 0.192500 -0.017100 -0.981200 +vn 0.682300 -0.012800 -0.730900 +vn 0.950400 0.005400 0.310900 +vn 0.417200 0.015900 0.908700 +vn 0.000000 -0.999900 0.011600 +vn -0.407500 0.010600 0.913100 +vn -0.950400 0.005400 0.310900 +vn -0.682300 -0.012800 -0.730900 +vn -0.192500 -0.017100 -0.981200 +vn 0.192500 0.475700 -0.858300 +vn 0.682300 0.354400 -0.639400 +vn 0.950400 -0.150800 0.272000 +vn 0.252600 -0.469100 0.846200 +vn 0.000000 -0.603300 0.797500 +vn -0.421400 -0.547100 0.723300 +vn -0.950400 -0.150800 0.272000 +vn -0.682300 0.354400 -0.639400 +vn -0.192500 0.475700 -0.858300 +vn 0.192500 0.841100 -0.505400 +vn 0.682300 0.626600 -0.376500 +vn 0.950400 -0.266600 0.160200 +vn 0.215700 -0.837000 0.502900 +vn 0.000000 -0.753900 0.657000 +vn -0.422700 -0.683200 0.595500 +vn -0.950400 -0.266600 0.160200 +vn -0.682300 0.626600 -0.376500 +vn -0.192500 0.841100 -0.505400 +vn 0.192500 0.981200 -0.017100 +vn 0.682300 0.730900 -0.012800 +vn 0.950400 -0.310900 0.005400 +vn 0.417200 -0.908700 0.015900 +vn -0.984000 -0.178200 0.002100 +vn -0.407500 -0.913100 0.010600 +vn -0.950400 -0.310900 0.005400 +vn -0.682300 0.730900 -0.012800 +vn -0.192500 0.981200 -0.017100 +vn 0.192500 0.858300 0.475700 +vn 0.682300 0.639400 0.354400 +vn 0.950400 -0.272000 -0.150800 +vn 0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn -0.421400 -0.723300 -0.547100 +vn -0.950400 -0.272000 -0.150800 +vn -0.682300 0.639400 0.354400 +vn -0.192500 0.858300 0.475700 +vn 0.192500 0.505400 0.841100 +vn 0.682300 0.376500 0.626600 +vn 0.950400 -0.160200 -0.266600 +vn 0.215700 -0.502900 -0.837000 +vn -0.000000 -0.657000 -0.753900 +vn -0.422700 -0.595500 -0.683200 +vn -0.950400 -0.160200 -0.266600 +vn -0.682300 0.376500 0.626600 +vn -0.192500 0.505400 0.841100 +vn 0.192500 0.017100 0.981200 +vn 0.682300 0.012800 0.730900 +vn 0.950400 -0.005400 -0.310900 +vn 0.417200 -0.015900 -0.908700 +vn -0.407500 -0.010600 -0.913100 +vn -0.950400 -0.005400 -0.310900 +vn -0.682300 0.012800 0.730900 +vn -0.192500 0.017100 0.981200 +vn 0.192500 -0.475700 0.858300 +vn 0.682300 -0.354400 0.639400 +vn 0.950400 0.150800 -0.272000 +vn 0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn -0.421400 0.547100 -0.723300 +vn -0.950400 0.150800 -0.272000 +vn -0.682300 -0.354400 0.639400 +vn -0.192500 -0.475700 0.858300 +vn 0.192500 -0.841100 0.505400 +vn 0.682300 -0.626600 0.376500 +vn 0.950400 0.266600 -0.160200 +vn 0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn -0.422700 0.683200 -0.595500 +vn -0.950400 0.266600 -0.160200 +vn -0.682300 -0.626600 0.376500 +vn -0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn -0.984000 0.178200 -0.002100 +vn -0.984000 -0.002100 -0.178200 +vn -0.984000 0.002100 0.178200 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 -0.000000 +vn 0.407500 0.913100 -0.010600 +vn -0.417200 0.908700 -0.015900 +vn 0.421400 0.723300 0.547100 +vn -0.252600 0.846200 0.469100 +vn 0.422700 0.595500 0.683200 +vn -0.215700 0.502900 0.837000 +vn 0.407500 0.010600 0.913100 +vn -0.417200 0.015900 0.908700 +vn 0.421400 -0.547100 0.723300 +vn -0.252600 -0.469100 0.846200 +vn 0.422700 -0.683200 0.595500 +vn -0.215700 -0.837000 0.502900 +vn 0.407500 -0.913100 0.010600 +vn -0.417200 -0.908700 0.015900 +vn 0.421400 -0.723300 -0.547100 +vn -0.252600 -0.846200 -0.469100 +vn 0.422700 -0.595500 -0.683200 +vn -0.215700 -0.502900 -0.837000 +vn 0.407500 -0.010600 -0.913100 +vn -0.417200 -0.015900 -0.908700 +vn 0.421400 0.547100 -0.723300 +vn -0.252600 0.469100 -0.846200 +vn 0.422700 0.683200 -0.595500 +vn -0.215700 0.837000 -0.502900 +usemtl None.001 +f 251/406/226 252/407/226 253/408/226 +f 254/409/227 253/410/227 255/411/227 +f 256/412/228 255/411/228 257/413/228 +f 258/414/229 257/415/229 259/416/229 +f 259/416/230 260/417/230 261/418/230 +f 262/419/231 261/418/231 263/420/231 +f 263/421/232 264/422/232 265/423/232 +f 266/424/233 265/423/233 267/425/233 +f 268/426/234 267/425/234 269/427/234 +f 270/428/235 269/427/235 271/429/235 +f 253/430/236 252/431/236 272/432/236 +f 273/433/237 272/434/237 251/406/237 +f 274/435/238 271/436/238 272/434/238 +f 251/437/239 254/438/239 273/439/239 +f 275/440/240 276/441/240 277/442/240 +f 278/443/241 277/442/241 279/444/241 +f 279/445/242 280/446/242 281/447/242 +f 282/448/243 281/449/243 283/450/243 +f 284/451/244 285/452/244 286/453/244 +f 284/454/245 287/455/245 288/456/245 +f 288/457/246 289/458/246 290/459/246 +f 291/460/247 290/459/247 292/461/247 +f 275/440/248 292/462/248 293/463/248 +f 276/441/249 294/464/249 295/465/249 +f 277/442/250 295/465/250 280/466/250 +f 280/446/251 296/467/251 297/468/251 +f 281/449/252 297/469/252 283/450/252 +f 283/450/253 298/470/253 287/455/253 +f 287/455/254 299/471/254 300/472/254 +f 289/458/255 300/473/255 301/474/255 +f 290/459/256 301/474/256 302/475/256 +f 293/463/257 302/476/257 276/441/257 +f 294/464/258 303/477/258 304/478/258 +f 295/465/259 304/478/259 305/479/259 +f 296/467/260 305/480/260 306/481/260 +f 297/469/261 306/482/261 307/483/261 +f 298/470/262 307/483/262 299/471/262 +f 299/471/263 308/484/263 300/472/263 +f 300/473/264 309/485/264 301/474/264 +f 301/474/265 310/486/265 311/487/265 +f 302/476/266 311/488/266 303/477/266 +f 303/489/267 312/490/267 304/491/267 +f 304/491/268 313/492/268 305/493/268 +f 305/480/269 314/494/269 315/495/269 +f 306/496/270 315/497/270 316/498/270 +f 308/499/271 307/500/271 317/501/271 +f 308/502/272 318/503/272 309/504/272 +f 309/485/273 319/505/273 320/506/273 +f 310/507/274 320/508/274 321/509/274 +f 311/510/275 321/509/275 312/490/275 +f 312/490/276 322/511/276 323/512/276 +f 313/492/277 323/512/277 324/513/277 +f 314/494/278 324/514/278 325/515/278 +f 315/497/279 325/516/279 316/498/279 +f 316/498/280 326/517/280 318/503/280 +f 318/503/281 327/518/281 328/519/281 +f 319/505/282 328/520/282 329/521/282 +f 320/508/283 329/522/283 321/509/283 +f 321/509/284 330/523/284 322/511/284 +f 322/511/285 331/524/285 332/525/285 +f 323/526/286 332/527/286 333/528/286 +f 324/514/287 333/528/287 334/529/287 +f 325/516/288 334/530/288 335/531/288 +f 326/517/289 335/531/289 327/518/289 +f 327/518/290 336/532/290 328/519/290 +f 328/520/291 337/533/291 329/521/291 +f 329/521/292 338/534/292 339/535/292 +f 330/523/293 339/536/293 322/511/293 +f 331/537/294 340/538/294 332/539/294 +f 332/527/295 341/540/295 342/541/295 +f 333/528/296 342/541/296 343/542/296 +f 334/543/297 343/544/297 344/545/297 +f 345/546/298 336/547/298 346/548/298 +f 336/549/299 345/550/299 337/551/299 +f 337/533/300 347/552/300 348/553/300 +f 338/554/301 348/555/301 349/556/301 +f 339/557/302 349/556/302 340/538/302 +f 340/538/303 350/558/303 341/559/303 +f 341/540/304 351/560/304 352/561/304 +f 342/541/305 352/561/305 343/542/305 +f 343/544/306 353/562/306 344/545/306 +f 344/545/307 354/563/307 355/564/307 +f 345/550/308 355/564/308 356/565/308 +f 347/552/309 356/566/309 357/567/309 +f 348/555/310 357/568/310 358/569/310 +f 349/556/311 358/569/311 350/558/311 +f 350/558/312 359/570/312 351/571/312 +f 351/560/313 360/572/313 352/561/313 +f 352/561/314 361/573/314 353/574/314 +f 353/562/315 362/575/315 363/576/315 +f 354/563/316 363/576/316 364/577/316 +f 355/564/317 364/577/317 356/565/317 +f 356/566/318 365/578/318 366/579/318 +f 357/567/319 366/579/319 367/580/319 +f 358/569/320 367/581/320 350/558/320 +f 359/582/321 368/583/321 360/584/321 +f 360/572/322 369/585/322 370/586/322 +f 361/573/323 370/586/323 371/587/323 +f 362/588/324 371/589/324 372/590/324 +f 372/591/271 373/592/271 374/593/271 +f 364/594/325 373/595/325 365/596/325 +f 365/578/326 375/597/326 376/598/326 +f 366/579/327 376/598/327 367/580/327 +f 367/599/328 377/600/328 368/583/328 +f 368/583/329 378/601/329 379/602/329 +f 369/603/330 379/602/330 380/604/330 +f 370/586/331 380/605/331 381/606/331 +f 371/589/332 381/607/332 372/590/332 +f 372/590/333 382/608/333 383/609/333 +f 373/595/334 383/609/334 384/610/334 +f 375/597/335 384/611/335 376/598/335 +f 376/612/336 385/613/336 386/614/336 +f 377/600/337 386/614/337 378/601/337 +f 378/601/338 275/615/338 278/616/338 +f 379/602/339 278/616/339 279/617/339 +f 380/605/340 279/445/340 282/618/340 +f 381/607/341 282/619/341 285/620/341 +f 382/608/342 285/620/342 284/621/342 +f 383/609/343 284/621/343 384/610/343 +f 384/611/344 288/457/344 291/460/344 +f 385/613/345 291/622/345 386/614/345 +f 386/614/346 292/623/346 275/615/346 +f 387/624/347 388/625/347 389/626/347 +f 285/627/236 283/628/236 388/482/236 +f 283/629/348 287/630/348 389/631/348 +f 287/632/349 284/633/349 286/634/349 +f 390/635/348 391/636/348 374/637/348 +f 373/638/350 364/639/350 374/640/350 +f 364/641/347 363/642/347 392/643/347 +f 363/644/236 372/645/236 391/646/236 +f 393/647/244 394/648/244 317/649/244 +f 307/650/236 316/651/236 394/652/236 +f 318/653/351 308/654/351 317/655/351 +f 316/656/347 318/651/347 395/657/347 +f 396/658/271 397/659/271 398/660/271 +f 344/661/244 345/662/244 398/663/244 +f 335/664/236 344/665/236 397/666/236 +f 336/667/348 335/668/348 346/669/348 +f 399/670/239 400/671/239 401/672/239 +f 400/673/352 402/674/352 401/675/352 +f 402/676/236 403/677/236 404/678/236 +f 403/679/353 399/680/353 405/681/353 +f 405/682/354 401/683/354 406/684/354 +f 403/685/355 402/686/355 400/687/355 +f 350/558/303 351/571/303 341/559/303 +f 254/659/226 251/406/226 253/408/226 +f 256/412/227 254/409/227 255/411/227 +f 258/688/228 256/412/228 257/413/228 +f 272/434/237 252/407/237 251/406/237 +f 262/419/230 259/416/230 261/418/230 +f 402/674/352 406/689/352 401/675/352 +f 266/424/232 263/421/232 265/423/232 +f 268/426/233 266/424/233 267/425/233 +f 270/428/234 268/426/234 269/427/234 +f 274/690/235 270/428/235 271/429/235 +f 253/430/236 272/432/236 271/691/236 +f 253/430/236 271/691/236 269/692/236 +f 255/693/236 253/430/236 269/692/236 +f 255/693/236 269/692/236 267/694/236 +f 257/695/236 255/693/236 260/696/236 +f 255/693/236 267/694/236 260/696/236 +f 260/696/236 267/694/236 261/697/236 +f 267/694/236 265/698/236 261/697/236 +f 298/470/253 299/471/253 287/455/253 +f 273/433/238 274/435/238 272/434/238 +f 274/699/239 273/439/239 270/700/239 +f 384/611/335 385/701/335 376/598/335 +f 254/438/239 256/702/239 270/700/239 +f 270/700/239 256/702/239 268/703/239 +f 256/702/239 258/704/239 268/703/239 +f 258/704/239 259/705/239 262/706/239 +f 268/703/239 258/704/239 262/706/239 +f 266/707/239 268/703/239 262/706/239 +f 263/708/239 266/707/239 262/706/239 +f 278/443/240 275/440/240 277/442/240 +f 312/490/267 313/492/267 304/491/267 +f 282/618/242 279/445/242 281/447/242 +f 285/709/356 282/448/356 283/450/356 +f 285/452/244 387/710/244 286/453/244 +f 287/455/357 289/711/357 288/456/357 +f 291/460/246 288/457/246 290/459/246 +f 309/485/264 310/486/264 301/474/264 +f 276/441/248 275/440/248 293/463/248 +f 277/442/249 276/441/249 295/465/249 +f 337/533/291 338/534/291 329/521/291 +f 281/447/251 280/446/251 297/468/251 +f 297/469/358 298/470/358 283/450/358 +f 340/538/294 341/559/294 332/539/294 +f 289/711/359 287/455/359 300/472/359 +f 290/459/255 289/458/255 301/474/255 +f 293/712/256 290/459/256 302/475/256 +f 359/570/312 360/713/312 351/571/312 +f 295/465/258 294/464/258 304/478/258 +f 296/714/259 295/465/259 305/479/259 +f 297/468/260 296/467/260 306/481/260 +f 298/470/360 297/469/360 307/483/360 +f 261/418/231 264/715/231 263/420/231 +f 308/484/361 309/716/361 300/472/361 +f 368/583/321 369/603/321 360/584/321 +f 302/475/265 301/474/265 311/487/265 +f 294/464/266 302/476/266 303/477/266 +f 302/476/257 294/464/257 276/441/257 +f 277/442/241 280/466/241 279/444/241 +f 306/481/269 305/480/269 315/495/269 +f 307/717/362 306/496/362 316/498/362 +f 307/500/271 393/718/271 317/501/271 +f 318/503/363 319/719/363 309/504/363 +f 310/486/273 309/485/273 320/506/273 +f 311/510/274 310/507/274 321/509/274 +f 303/489/275 311/510/275 312/490/275 +f 313/492/276 312/490/276 323/512/276 +f 314/720/277 313/492/277 324/513/277 +f 315/495/278 314/494/278 325/515/278 +f 325/516/364 326/517/364 316/498/364 +f 290/459/247 293/712/247 292/461/247 +f 319/719/365 318/503/365 328/519/365 +f 320/506/282 319/505/282 329/521/282 +f 265/698/236 264/721/236 261/697/236 +f 312/490/284 321/509/284 322/511/284 +f 323/512/285 322/511/285 332/525/285 +f 324/514/286 323/526/286 333/528/286 +f 325/515/287 324/514/287 334/529/287 +f 326/517/366 325/516/366 335/531/366 +f 291/622/345 292/623/345 386/614/345 +f 336/532/367 337/722/367 328/519/367 +f 364/639/350 392/723/350 374/640/350 +f 330/724/292 329/521/292 339/535/292 +f 367/581/320 359/570/320 350/558/320 +f 295/465/250 296/714/250 280/466/250 +f 333/528/295 332/527/295 342/541/295 +f 334/529/296 333/528/296 343/542/296 +f 335/725/368 334/543/368 344/545/368 +f 398/726/298 345/546/298 346/548/298 +f 345/550/369 347/727/369 337/551/369 +f 338/534/300 337/533/300 348/553/300 +f 339/557/301 338/554/301 349/556/301 +f 331/537/302 339/557/302 340/538/302 +f 329/522/283 330/523/283 321/509/283 +f 342/541/304 341/540/304 352/561/304 +f 352/561/305 353/574/305 343/542/305 +f 353/562/370 354/563/370 344/545/370 +f 345/550/307 344/545/307 355/564/307 +f 347/727/371 345/550/371 356/565/371 +f 348/553/309 347/552/309 357/567/309 +f 349/556/310 348/555/310 358/569/310 +f 340/538/311 349/556/311 350/558/311 +f 307/483/262 308/484/262 299/471/262 +f 313/492/268 314/720/268 305/493/268 +f 376/598/327 377/728/327 367/580/327 +f 354/563/372 353/562/372 363/576/372 +f 355/564/316 354/563/316 364/577/316 +f 364/577/373 365/729/373 356/565/373 +f 357/567/318 356/566/318 366/579/318 +f 358/730/319 357/567/319 367/580/319 +f 335/531/289 336/532/289 327/518/289 +f 360/572/313 361/573/313 352/561/313 +f 361/573/322 360/572/322 370/586/322 +f 362/731/323 361/573/323 371/587/323 +f 363/732/374 362/588/374 372/590/374 +f 391/733/271 372/591/271 374/593/271 +f 373/595/375 375/734/375 365/596/375 +f 366/579/326 365/578/326 376/598/326 +f 339/536/293 331/524/293 322/511/293 +f 359/582/328 367/599/328 368/583/328 +f 369/603/329 368/583/329 379/602/329 +f 370/735/330 369/603/330 380/604/330 +f 371/587/331 370/586/331 381/606/331 +f 381/607/376 382/608/376 372/590/376 +f 373/595/333 372/590/333 383/609/333 +f 375/734/377 373/595/377 384/610/377 +f 361/573/314 362/731/314 353/574/314 +f 377/600/336 376/612/336 386/614/336 +f 368/583/337 377/600/337 378/601/337 +f 379/602/338 378/601/338 278/616/338 +f 380/604/339 379/602/339 279/617/339 +f 381/606/340 380/605/340 282/618/340 +f 382/608/378 381/607/378 285/620/378 +f 383/609/342 382/608/342 284/621/342 +f 284/621/379 288/736/379 384/610/379 +f 385/701/344 384/611/344 291/460/344 +f 394/648/244 395/737/244 317/649/244 +f 378/601/346 386/614/346 275/615/346 +f 286/738/347 387/624/347 389/626/347 +f 387/739/236 285/627/236 388/482/236 +f 388/740/348 283/629/348 389/631/348 +f 389/741/349 287/632/349 286/634/349 +f 392/742/348 390/635/348 374/637/348 +f 273/439/239 254/438/239 270/700/239 +f 363/642/347 390/743/347 392/643/347 +f 390/744/236 363/644/236 391/646/236 +f 326/517/280 327/518/280 318/503/280 +f 393/745/236 307/650/236 394/652/236 +f 395/746/351 318/653/351 317/655/351 +f 394/747/347 316/656/347 395/657/347 +f 346/748/271 396/658/271 398/660/271 +f 397/749/244 344/661/244 398/663/244 +f 396/750/236 335/664/236 397/666/236 +f 335/668/348 396/751/348 346/669/348 +f 405/677/239 399/670/239 401/672/239 +f 257/415/229 260/417/229 259/416/229 +f 406/752/236 402/676/236 404/678/236 +f 404/753/353 403/679/353 405/681/353 +f 404/754/354 405/682/354 406/684/354 +f 399/755/355 403/685/355 400/687/355 +o CargoMid +v -0.602109 3.364694 3.769022 +v -0.602109 3.364695 2.453471 +v -0.602109 1.054079 2.453471 +v 0.602109 3.364695 2.453471 +v 0.602109 1.054079 2.453471 +v 0.602109 3.364694 3.769022 +v 0.602109 1.054078 3.769021 +v -0.602109 1.054078 3.769021 +vt 0.666123 0.332861 +vt 0.334894 0.333877 +vt 0.333877 0.002647 +vt 0.002648 0.333877 +vt 0.001632 0.002648 +vt 0.332861 0.001632 +vt 0.333877 0.665106 +vt 0.002647 0.666123 +vt 0.001632 0.334894 +vt 0.334894 0.666123 +vt 0.333877 0.334894 +vt 0.665106 0.333877 +vt 0.998368 0.332861 +vt 0.667139 0.333877 +vt 0.666123 0.002647 +vt 0.333877 0.667139 +vt 0.665106 0.666123 +vt 0.666123 0.997352 +vt 0.665106 0.001632 +vt 0.333877 0.332861 +vt 0.332861 0.333877 +vt 0.666123 0.665106 +vt 0.997352 0.001632 +vt 0.334894 0.998368 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 407/756/380 408/757/380 409/758/380 +f 408/759/381 410/760/381 411/761/381 +f 410/762/382 412/763/382 413/764/382 +f 412/765/383 407/766/383 414/767/383 +f 414/768/384 409/769/384 411/770/384 +f 412/771/385 410/772/385 408/773/385 +f 414/774/380 407/756/380 409/758/380 +f 409/775/381 408/759/381 411/761/381 +f 411/776/382 410/762/382 413/764/382 +f 413/777/383 412/765/383 414/767/383 +f 413/778/384 414/768/384 411/770/384 +f 407/779/385 412/771/385 408/773/385 +o MainBody +v 1.960505 0.121789 0.032559 +v 1.960505 0.121789 -0.032557 +v 1.960505 0.035004 -0.032557 +v 2.025620 0.035004 -0.032557 +v 2.025620 0.121789 -0.032557 +v 2.025620 0.035004 0.032559 +v 2.025620 0.121789 0.032559 +v 2.025620 0.121790 1.083552 +v 1.960505 0.035004 0.032559 +v 2.025620 0.902858 0.032558 +v 1.960505 0.902858 -0.032557 +v 2.025620 0.902858 -0.032557 +v 1.960505 0.121790 1.148667 +v 1.960505 0.121790 1.083552 +v 1.960505 0.035004 1.083552 +v 2.025620 0.035004 1.148667 +v 2.025620 0.121790 1.148667 +v 1.960505 0.035004 1.148667 +v 2.025620 0.035004 1.083552 +v 2.025620 0.902858 1.148667 +v 1.960505 0.902858 1.083552 +v 2.025620 0.902858 1.083552 +v 1.960505 0.496703 1.148667 +v 1.960505 0.496703 1.083552 +v 2.025620 0.496702 1.083552 +v 2.025620 0.496702 1.148667 +v 1.960505 0.496702 0.032559 +v 1.960505 0.496702 -0.032557 +v 2.025620 0.496702 -0.032557 +v 2.025620 0.496702 0.032559 +v 1.960505 0.902858 0.032558 +v 1.960505 0.590431 -0.032557 +v 2.025620 0.590431 -0.032557 +v 2.025620 0.590431 0.032558 +v 1.960505 0.590431 0.032558 +v 1.960505 0.902858 1.148667 +v 1.960505 0.590431 1.083552 +v 2.025620 0.590431 1.083552 +v 2.025620 0.590431 1.148667 +v 1.960505 0.590431 1.148667 +v -1.135648 4.236131 -2.439156 +v -1.135648 0.944072 -2.349645 +v -1.135648 0.944072 -2.439157 +v -1.135648 4.236131 -2.349644 +v -1.225160 0.944072 -2.349645 +v -1.225160 4.236131 -2.349644 +v -1.225160 0.944072 -2.439157 +v -1.225160 4.236131 -2.439156 +v -0.984018 1.417435 -1.140142 +v -0.984018 0.990447 -2.542124 +v -0.984018 0.990447 -1.140142 +v -0.984018 1.417435 -2.542124 +v 0.984019 0.990446 -2.542124 +v 0.984019 1.417434 -2.542124 +v 0.984019 0.990446 -1.140142 +v 0.984019 1.417434 -1.140142 +v -1.000000 1.444865 1.836146 +v -1.000000 1.054287 -0.163853 +v -1.000000 1.054287 1.836147 +v -1.000000 1.444865 -0.163853 +v 1.000000 1.444865 -0.163853 +v 1.000000 1.054287 1.836147 +v 1.000000 1.054287 -0.163853 +v 1.000000 1.444865 1.836147 +v -1.401982 1.100000 -1.534202 +v -1.401982 0.900000 -2.803965 +v -1.401982 0.900000 -1.534202 +v -1.401982 1.100001 -2.803965 +v 1.401982 1.099999 -2.803964 +v 2.000000 1.099999 -0.319406 +v 2.000000 0.899998 4.000001 +v 2.000000 0.899999 -0.319406 +v 2.000000 1.099998 4.000001 +v -2.000000 0.899999 4.000000 +v 1.401982 0.899999 -2.803964 +v 1.401982 0.899999 -1.534201 +v 1.401982 1.099999 -1.534201 +v -0.980572 3.493236 2.036421 +v -0.980572 1.122929 1.618471 +v -0.980572 3.424315 2.427284 +v 0.980572 1.122929 1.618472 +v -0.980572 1.054009 2.009334 +v 0.980572 3.424315 2.427284 +v 0.980572 1.054009 2.009335 +v 0.980572 3.493235 2.036421 +v -0.742343 4.377108 1.957737 +v -0.742343 3.422644 1.939661 +v -0.742343 4.367644 2.457409 +v 0.742344 3.422644 1.939662 +v -0.742343 3.413181 2.439332 +v 0.742344 4.367644 2.457409 +v 0.742344 3.413181 2.439332 +v 0.742344 4.377108 1.957738 +v -0.551987 1.338115 -2.478072 +v -0.551987 1.028879 -3.436547 +v -0.551987 1.028879 -2.478072 +v -0.551987 1.338116 -3.436547 +v 0.551987 1.338116 -3.436547 +v 0.551987 1.028878 -2.478072 +v 0.551987 1.028879 -3.436547 +v 0.551987 1.338115 -2.478072 +v -2.033444 0.121790 0.032558 +v -2.033444 0.121790 -0.032558 +v -2.033444 0.035005 -0.032558 +v -1.968328 0.035005 -0.032558 +v -1.968328 0.121790 -0.032558 +v -1.968328 0.035005 0.032558 +v -1.968328 0.121790 0.032558 +v -1.968328 0.121790 1.083551 +v -2.033444 0.035005 0.032558 +v -1.968328 0.902859 0.032558 +v -2.033444 0.902859 -0.032558 +v -1.968328 0.902859 -0.032558 +v -2.033444 0.121790 1.148666 +v -2.033444 0.121790 1.083551 +v -2.033444 0.035005 1.083551 +v -1.968328 0.035005 1.148666 +v -1.968328 0.121790 1.148666 +v -2.033444 0.035005 1.148666 +v -1.968328 0.035005 1.083551 +v -1.968328 0.902859 1.148666 +v -2.033444 0.902859 1.083551 +v -1.968328 0.902859 1.083551 +v -2.033444 0.496704 1.148666 +v -2.033444 0.496704 1.083551 +v -1.968328 0.496703 1.083551 +v -1.968328 0.496703 1.148666 +v -2.033444 0.496703 0.032558 +v -2.033444 0.496703 -0.032558 +v -1.968328 0.496703 -0.032558 +v -1.968328 0.496703 0.032558 +v -2.033444 0.902859 0.032558 +v -2.033444 0.590432 -0.032558 +v -1.968328 0.590432 -0.032558 +v -1.968328 0.590432 0.032558 +v -2.033444 0.590432 0.032558 +v -2.033444 0.902859 1.148666 +v -2.033444 0.590432 1.083551 +v -1.968328 0.590432 1.083551 +v -1.968328 0.590432 1.148666 +v -2.033444 0.590432 1.148666 +v -2.000000 1.099999 4.000000 +v -2.000000 0.900000 -0.319407 +v -2.000000 1.100000 -0.319407 +vt 0.831442 0.264770 +vt 0.826945 0.264756 +vt 0.826977 0.254323 +vt 0.735286 0.852961 +vt 0.730822 0.842513 +vt 0.730790 0.852947 +vt 0.474443 0.758477 +vt 0.469914 0.748058 +vt 0.469946 0.758491 +vt 0.896324 0.374080 +vt 0.891605 0.446544 +vt 0.896102 0.446558 +vt 0.882155 0.369590 +vt 0.886638 0.365085 +vt 0.882141 0.365099 +vt 0.779149 0.031014 +vt 0.774666 0.026509 +vt 0.774652 0.031000 +vt 0.908518 0.265003 +vt 0.904022 0.264989 +vt 0.904054 0.254556 +vt 0.831474 0.254337 +vt 0.397366 0.758713 +vt 0.392837 0.748294 +vt 0.392869 0.758727 +vt 0.750092 0.852961 +vt 0.745628 0.842513 +vt 0.745596 0.852947 +vt 0.882390 0.446558 +vt 0.886873 0.442053 +vt 0.882376 0.442067 +vt 0.779149 0.245490 +vt 0.774666 0.240986 +vt 0.774652 0.245476 +vt 0.908380 0.310076 +vt 0.903883 0.310062 +vt 0.745137 0.898039 +vt 0.745274 0.852961 +vt 0.740640 0.898025 +vt 0.397505 0.803785 +vt 0.393008 0.803798 +vt 0.749954 0.898039 +vt 0.745457 0.898025 +vt 0.831303 0.309844 +vt 0.826806 0.309830 +vt 0.735148 0.898039 +vt 0.730651 0.898025 +vt 0.474582 0.803549 +vt 0.470085 0.803563 +vt 0.739966 0.898038 +vt 0.735607 0.852947 +vt 0.735469 0.898025 +vt 0.886652 0.369576 +vt 0.740136 0.842526 +vt 0.735640 0.842513 +vt 0.740779 0.852947 +vt 0.745307 0.842527 +vt 0.740811 0.842513 +vt 0.831154 0.358673 +vt 0.826657 0.358660 +vt 0.826771 0.321099 +vt 0.734998 0.946873 +vt 0.730617 0.909294 +vt 0.730502 0.946859 +vt 0.474732 0.852376 +vt 0.470120 0.814830 +vt 0.470235 0.852389 +vt 0.739815 0.946873 +vt 0.735434 0.909294 +vt 0.735319 0.946859 +vt 0.908229 0.358905 +vt 0.903733 0.358892 +vt 0.903848 0.321331 +vt 0.432606 0.852639 +vt 0.437218 0.890190 +vt 0.437103 0.852625 +vt 0.397655 0.852612 +vt 0.393043 0.815067 +vt 0.393158 0.852625 +vt 0.749803 0.946873 +vt 0.745422 0.909294 +vt 0.745307 0.946859 +vt 0.908345 0.321344 +vt 0.397539 0.815053 +vt 0.749919 0.909308 +vt 0.831268 0.321112 +vt 0.735113 0.909308 +vt 0.474617 0.814816 +vt 0.905980 0.446558 +vt 0.910256 0.374066 +vt 0.905759 0.374079 +vt 0.739931 0.909308 +vt 0.903864 0.321393 +vt 0.831284 0.321175 +vt 0.831319 0.309906 +vt 0.905538 0.374066 +vt 0.905759 0.446544 +vt 0.901262 0.446558 +vt 0.999215 0.593042 +vt 0.989181 0.197303 +vt 0.997999 0.197276 +vt 0.977931 0.593121 +vt 0.970329 0.197276 +vt 0.979147 0.197303 +vt 0.999215 0.988904 +vt 0.989181 0.593148 +vt 0.997999 0.593121 +vt 0.980363 0.593121 +vt 0.774652 0.224813 +vt 0.783497 0.233592 +vt 0.774679 0.233619 +vt 0.191998 0.807591 +vt 0.140177 0.945358 +vt 0.140593 0.807433 +vt 0.775247 0.224786 +vt 0.826062 0.031014 +vt 0.826657 0.224628 +vt 0.881186 0.878121 +vt 0.932166 0.740036 +vt 0.932589 0.877964 +vt 0.774652 0.447938 +vt 0.826657 0.254481 +vt 0.826061 0.448095 +vt 0.417414 0.747622 +vt 0.278710 0.554426 +vt 0.416824 0.554006 +vt 0.556033 0.748044 +vt 0.417920 0.747622 +vt 0.556626 0.554429 +vt 0.980027 0.740181 +vt 0.933005 0.740036 +vt 0.092295 0.945506 +vt 0.091871 0.807579 +vt 0.139320 0.945361 +vt 0.036861 0.945506 +vt 0.083457 0.807435 +vt 0.083880 0.945361 +vt 0.195609 0.945359 +vt 0.243059 0.807577 +vt 0.242636 0.945504 +vt 0.278710 0.691935 +vt 0.140597 0.692354 +vt 0.278289 0.554008 +vt 0.138898 0.692357 +vt 0.001207 0.554008 +vt 0.139320 0.554430 +vt 0.879512 0.861947 +vt 0.855017 0.999799 +vt 0.855434 0.861873 +vt 0.934356 0.724023 +vt 0.933510 0.448169 +vt 0.958436 0.723949 +vt 0.830093 0.724023 +vt 0.853323 0.448095 +vt 0.854169 0.723949 +vt 0.908582 0.723949 +vt 0.932662 0.724023 +vt 0.279130 0.140238 +vt 0.554945 0.001476 +vt 0.555365 0.139399 +vt 0.277442 0.416086 +vt 0.277020 0.554008 +vt 0.001207 0.415242 +vt 0.880762 0.740036 +vt 0.880888 0.453616 +vt 0.908455 0.734517 +vt 0.936780 0.197276 +vt 0.936368 0.062029 +vt 0.963834 0.197194 +vt 0.936243 0.072496 +vt 0.908675 0.353386 +vt 0.908550 0.066977 +vt 0.360604 0.883289 +vt 0.388078 0.748124 +vt 0.387664 0.883372 +vt 0.692936 0.733201 +vt 0.829245 0.448510 +vt 0.828370 0.733615 +vt 0.692060 0.448095 +vt 0.557502 0.733624 +vt 0.556626 0.448510 +vt 0.658255 0.957992 +vt 0.658418 0.843236 +vt 0.692774 0.957276 +vt 0.326090 0.955118 +vt 0.325778 0.852728 +vt 0.360604 0.955013 +vt 0.632700 0.843234 +vt 0.598344 0.957271 +vt 0.598183 0.842519 +vt 0.278710 0.955013 +vt 0.313539 0.852729 +vt 0.313225 0.955118 +vt 0.036437 0.807121 +vt 0.036789 0.692357 +vt 0.138968 0.807435 +vt 0.242706 0.692354 +vt 0.140529 0.807433 +vt 0.140177 0.692668 +vt 0.474732 0.852740 +vt 0.437218 0.946920 +vt 0.437503 0.852625 +vt 0.750458 0.951236 +vt 0.750124 0.842627 +vt 0.787690 0.951122 +vt 0.430354 0.852740 +vt 0.392837 0.946921 +vt 0.393127 0.852625 +vt 0.692936 0.951122 +vt 0.730502 0.842627 +vt 0.730168 0.951236 +vt 0.692936 0.842233 +vt 0.598183 0.733911 +vt 0.692604 0.733624 +vt 0.787357 0.842513 +vt 0.787690 0.733904 +vt 0.479517 0.758491 +vt 0.475020 0.758477 +vt 0.475052 0.748044 +vt 0.901277 0.109992 +vt 0.905806 0.120412 +vt 0.905774 0.109978 +vt 0.360316 0.758475 +vt 0.355787 0.748055 +vt 0.355819 0.758488 +vt 0.891605 0.374080 +vt 0.886887 0.446544 +vt 0.891384 0.446558 +vt 0.388092 0.752545 +vt 0.392575 0.748042 +vt 0.779149 0.238123 +vt 0.774652 0.238109 +vt 0.556594 0.758723 +vt 0.552097 0.758709 +vt 0.552129 0.748276 +vt 0.479549 0.748058 +vt 0.283239 0.758710 +vt 0.278710 0.748291 +vt 0.278742 0.758724 +vt 0.088666 0.817883 +vt 0.084169 0.817869 +vt 0.084201 0.807435 +vt 0.388327 0.829514 +vt 0.388313 0.825023 +vt 0.392810 0.825010 +vt 0.779149 0.005980 +vt 0.774666 0.001476 +vt 0.774652 0.005967 +vt 0.556455 0.803797 +vt 0.551958 0.803783 +vt 0.321111 0.852638 +vt 0.321249 0.897714 +vt 0.325608 0.852623 +vt 0.283378 0.803782 +vt 0.278881 0.803796 +vt 0.088527 0.862961 +vt 0.084030 0.862947 +vt 0.479378 0.803565 +vt 0.474882 0.803551 +vt 0.901139 0.064914 +vt 0.905636 0.064900 +vt 0.360454 0.803546 +vt 0.355957 0.803560 +vt 0.905636 0.175952 +vt 0.901278 0.130860 +vt 0.901139 0.175938 +vt 0.392589 0.752531 +vt 0.901310 0.120426 +vt 0.325746 0.897700 +vt 0.321281 0.908149 +vt 0.325778 0.908135 +vt 0.479229 0.852394 +vt 0.474848 0.814819 +vt 0.900990 0.016081 +vt 0.905601 0.053632 +vt 0.905486 0.016067 +vt 0.360604 0.852373 +vt 0.355992 0.814827 +vt 0.356107 0.852387 +vt 0.905486 0.224786 +vt 0.901105 0.187208 +vt 0.900990 0.224772 +vt 0.556305 0.852627 +vt 0.551809 0.852613 +vt 0.551924 0.815052 +vt 0.313539 0.852638 +vt 0.318151 0.890187 +vt 0.318035 0.852623 +vt 0.283527 0.852610 +vt 0.278916 0.815064 +vt 0.279030 0.852623 +vt 0.088377 0.911795 +vt 0.083996 0.874217 +vt 0.083880 0.911781 +vt 0.556420 0.815065 +vt 0.283412 0.815050 +vt 0.088493 0.874231 +vt 0.479344 0.814832 +vt 0.901105 0.053646 +vt 0.360489 0.814814 +vt 0.896545 0.446558 +vt 0.900821 0.374065 +vt 0.905601 0.187222 +vt 0.479360 0.814895 +vt 0.392575 0.829514 +vt 0.392796 0.901992 +vt 0.388299 0.902005 +vt 0.880762 0.448169 +vt 0.855851 0.723947 +vt 0.856684 0.448095 +vt 0.830516 0.861950 +vt 0.854594 0.861876 +vt 0.280391 0.554006 +vt 0.555785 0.277321 +vt 0.556626 0.553167 +vt 0.278710 0.002320 +vt 0.277865 0.278164 +vt 0.002475 0.001476 +vt 0.879929 0.724021 +vt 0.279551 0.278161 +vt 0.001630 0.277320 +vt 0.830940 0.999876 +vt 0.735319 0.842526 +vt 0.474411 0.748044 +vt 0.891827 0.374066 +vt 0.779163 0.026523 +vt 0.908550 0.254569 +vt 0.397334 0.748280 +vt 0.750124 0.842526 +vt 0.779162 0.241000 +vt 0.740104 0.852961 +vt 0.432721 0.890204 +vt 0.910477 0.446544 +vt 0.901042 0.374079 +vt 0.990397 0.593069 +vt 0.969113 0.593094 +vt 0.990397 0.988932 +vt 0.987965 0.197276 +vt 0.783470 0.224786 +vt 0.191581 0.945516 +vt 0.774652 0.031171 +vt 0.880762 0.740194 +vt 0.775247 0.254323 +vt 0.279300 0.748042 +vt 0.979610 0.878107 +vt 0.036437 0.807579 +vt 0.196034 0.807433 +vt 0.000785 0.691935 +vt 0.879095 0.999873 +vt 0.829245 0.448169 +vt 0.909429 0.448095 +vt 0.908582 0.448095 +vt 0.936368 0.358905 +vt 0.361018 0.748042 +vt 0.693811 0.448095 +vt 0.692936 0.842519 +vt 0.632862 0.957986 +vt 0.243059 0.807119 +vt 0.474447 0.947033 +vt 0.138897 0.807435 +vt 0.430065 0.947034 +vt 0.693269 0.842513 +vt 0.598513 0.842519 +vt 0.360293 0.852623 +vt 0.000785 0.553164 +vt 0.963422 0.061947 +vt 0.957589 0.448095 +vt 0.693268 0.733615 +vt 0.283207 0.748277 +vt 0.140177 0.554428 +vt 0.139320 0.692671 +vt 0.418513 0.554006 +vt 0.360284 0.748042 +vt 0.887109 0.374066 +vt 0.779162 0.233632 +vt 0.556626 0.748290 +vt 0.088698 0.807449 +vt 0.392823 0.829500 +vt 0.779163 0.001490 +vt 0.905774 0.130874 +vt 0.313654 0.890201 +vt 0.901042 0.446544 +vt 0.388078 0.829528 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.984800 -0.173600 +vn -0.000000 0.984800 0.173600 +vn -0.000000 -0.173600 0.984800 +vn 0.000000 0.173600 -0.984800 +vn 0.000000 -0.999800 -0.018900 +vn 0.000000 0.999800 0.018900 +vn 0.000000 -0.018900 0.999800 +vn 0.000000 0.018900 -0.999800 +vn 0.897200 0.000000 -0.441700 +vn -0.897200 -0.000000 -0.441700 +vn 0.000000 0.984800 0.173700 +usemtl None +f 415/780/386 416/781/386 417/782/386 +f 416/783/387 418/784/387 419/785/387 +f 419/786/386 420/787/386 421/788/386 +f 422/789/388 415/790/388 421/791/388 +f 423/792/389 418/793/389 417/794/389 +f 424/795/388 425/796/388 426/797/388 +f 427/798/386 428/799/386 429/800/386 +f 428/799/386 415/780/386 423/801/386 +f 422/802/386 430/803/386 431/804/386 +f 431/805/390 432/806/390 427/807/390 +f 432/808/389 433/809/389 429/810/389 +f 434/811/388 435/812/388 436/813/388 +f 437/814/386 438/815/386 428/799/386 +f 438/816/387 428/817/387 439/818/387 +f 439/819/386 431/804/386 440/820/386 +f 440/821/390 427/807/390 437/822/390 +f 441/823/386 442/824/386 416/781/386 +f 442/825/387 419/785/387 443/826/387 +f 443/827/386 421/788/386 444/828/386 +f 444/829/390 415/830/390 441/831/390 +f 429/810/389 420/832/389 423/792/389 +f 421/788/386 420/787/386 422/802/386 +f 415/830/390 420/833/390 423/834/390 +f 422/835/387 429/836/387 433/837/387 +f 445/838/386 425/839/386 446/840/386 +f 425/841/387 447/842/387 426/843/387 +f 426/844/386 448/845/386 424/846/386 +f 424/847/390 449/848/390 445/849/390 +f 450/850/386 435/851/386 451/852/386 +f 435/853/387 452/854/387 436/855/387 +f 436/856/386 453/857/386 434/858/386 +f 434/859/390 454/860/390 450/861/390 +f 454/862/386 451/852/386 438/815/386 +f 452/863/386 440/820/386 453/857/386 +f 453/864/390 437/822/390 454/860/390 +f 449/865/386 446/840/386 442/824/386 +f 446/866/387 443/826/387 447/842/387 +f 447/867/386 444/828/386 448/845/386 +f 438/868/389 444/869/389 441/870/389 +f 444/829/390 449/848/390 448/871/390 +f 438/815/390 452/872/390 439/815/390 +f 452/872/386 448/873/386 444/874/386 +f 448/875/388 452/876/388 451/877/388 +f 455/878/391 456/879/391 457/880/391 +f 458/881/387 459/882/387 456/883/387 +f 460/884/386 461/885/386 459/886/386 +f 462/883/390 457/885/390 461/887/390 +f 457/888/388 459/889/388 461/890/388 +f 463/891/386 464/892/386 465/893/386 +f 466/894/390 467/895/390 464/896/390 +f 468/897/391 469/898/391 467/899/391 +f 470/900/387 465/901/387 469/902/387 +f 465/903/388 467/904/388 469/905/388 +f 470/906/389 468/907/389 463/908/389 +f 471/909/386 472/899/386 473/910/386 +f 474/911/390 475/912/390 472/913/390 +f 475/914/391 476/915/391 477/916/391 +f 478/917/387 473/918/387 476/919/387 +f 473/920/388 472/921/388 476/922/388 +f 478/923/389 474/924/389 471/925/389 +f 479/926/386 480/927/386 481/928/386 +f 482/929/390 483/930/390 480/931/390 +f 484/932/391 485/933/391 486/934/391 +f 487/935/387 488/930/387 485/936/387 +f 481/937/388 489/938/388 490/939/388 +f 491/940/389 483/941/389 479/942/389 +f 492/943/386 493/944/386 494/945/386 +f 493/946/392 495/947/392 496/948/392 +f 495/949/391 497/950/391 498/951/391 +f 499/952/393 494/953/393 497/954/393 +f 494/955/394 498/956/394 497/957/394 +f 499/958/395 493/959/395 492/960/395 +f 500/961/386 501/962/386 502/963/386 +f 501/964/396 503/965/396 504/966/396 +f 503/967/391 505/968/391 506/969/391 +f 507/970/397 502/971/397 505/972/397 +f 502/973/398 504/974/398 505/975/398 +f 507/976/399 501/977/399 500/978/399 +f 508/979/386 509/980/386 510/981/386 +f 511/982/390 512/983/390 509/984/390 +f 512/985/391 513/986/391 514/987/391 +f 515/988/387 510/989/387 513/990/387 +f 510/991/388 514/992/388 513/993/388 +f 515/994/389 512/991/389 508/995/389 +f 516/996/386 517/997/386 518/998/386 +f 517/999/387 519/1000/387 520/1001/387 +f 520/1002/386 521/1003/386 522/1004/386 +f 523/1005/388 516/1006/388 522/1007/388 +f 524/1008/388 518/953/388 519/1009/388 +f 525/1010/388 526/890/388 527/1011/388 +f 528/1012/386 529/1013/386 530/1014/386 +f 529/1013/386 516/996/386 524/1015/386 +f 523/1016/386 531/1017/386 532/1018/386 +f 532/1019/387 528/1020/387 533/1021/387 +f 533/1022/388 530/1023/388 534/1024/388 +f 535/1025/388 536/1026/388 537/1027/388 +f 538/1028/386 539/1029/386 529/1013/386 +f 539/1030/387 529/1031/387 540/1032/387 +f 540/1033/386 532/1018/386 541/1034/386 +f 541/1035/390 528/1020/390 538/1036/390 +f 542/1037/386 543/1038/386 517/997/386 +f 543/1039/387 520/1001/387 544/1040/387 +f 544/1041/386 522/1004/386 545/1042/386 +f 545/1043/390 516/1044/390 542/1045/390 +f 530/1023/388 524/1008/388 521/1046/388 +f 522/1004/386 521/1003/386 523/1016/386 +f 516/1044/390 521/1000/390 524/1047/390 +f 523/1048/387 530/1049/387 534/1050/387 +f 546/1051/386 526/844/386 547/1052/386 +f 526/1053/387 548/1054/387 527/1055/387 +f 527/1056/386 549/1057/386 525/1058/386 +f 525/1059/390 550/1060/390 546/1061/390 +f 551/1062/386 536/1063/386 552/1064/386 +f 536/1065/387 553/1066/387 537/1067/387 +f 537/1068/386 554/1069/386 535/1070/386 +f 535/1071/390 555/1072/390 551/1073/390 +f 555/1074/386 552/1064/386 539/1029/386 +f 553/1075/386 541/1034/386 554/1069/386 +f 554/1076/390 538/1036/390 555/1072/390 +f 550/1077/386 547/1052/386 543/1038/386 +f 547/1078/387 544/1040/387 548/1054/387 +f 548/1079/386 545/1042/386 549/1057/386 +f 539/1080/389 545/1081/389 542/789/389 +f 545/1043/390 550/1060/390 549/1082/390 +f 539/1029/390 553/1064/390 540/1029/390 +f 553/1064/391 545/1037/391 549/1083/391 +f 549/1084/388 553/1085/388 552/1086/388 +f 556/1087/386 557/1088/386 488/1089/386 +f 491/1090/400 486/934/400 490/1091/400 +f 488/1092/388 486/1093/388 485/1094/388 +f 487/1095/389 484/1096/389 556/1097/389 +f 558/1098/401 481/928/401 557/1088/401 +f 557/1099/388 490/939/388 486/1093/388 +f 484/1096/389 491/940/389 558/1100/389 +f 483/1101/391 490/1091/391 489/927/391 +f 423/801/386 415/780/386 417/782/386 +f 417/1102/387 418/784/387 416/783/387 +f 418/1103/386 420/787/386 419/786/386 +f 428/1104/388 415/790/388 422/789/388 +f 420/832/389 418/793/389 423/792/389 +f 445/1105/388 425/796/388 424/795/388 +f 432/1106/386 427/798/386 429/800/386 +f 429/800/386 428/799/386 423/801/386 +f 433/1107/386 430/803/386 422/802/386 +f 430/1108/390 432/806/390 431/805/390 +f 430/1006/389 433/809/389 432/808/389 +f 450/1109/388 435/812/388 434/811/388 +f 427/798/386 437/814/386 428/799/386 +f 439/818/387 428/817/387 422/835/387 +f 422/802/386 431/804/386 439/819/386 +f 431/805/390 427/807/390 440/821/390 +f 415/780/386 441/823/386 416/781/386 +f 416/783/387 419/785/387 442/825/387 +f 419/786/386 421/788/386 443/827/386 +f 421/1110/390 415/830/390 444/829/390 +f 433/809/389 420/832/389 429/810/389 +f 421/1110/390 420/833/390 415/830/390 +f 428/817/387 429/836/387 422/835/387 +f 449/865/386 445/838/386 446/840/386 +f 446/866/387 447/842/387 425/841/387 +f 447/867/386 448/845/386 426/844/386 +f 448/871/387 424/847/387 449/848/387 +f 454/862/386 450/850/386 451/852/386 +f 451/1111/387 452/854/387 435/853/387 +f 452/863/386 453/857/386 436/856/386 +f 453/864/390 454/860/390 434/859/390 +f 437/814/386 454/862/386 438/815/386 +f 439/819/386 440/820/386 452/863/386 +f 440/821/390 437/822/390 453/864/390 +f 441/823/386 449/865/386 442/824/386 +f 442/825/387 443/826/387 446/866/387 +f 443/827/386 444/828/386 447/867/386 +f 439/1112/388 438/868/388 444/869/388 +f 441/831/390 449/848/390 444/829/390 +f 438/815/390 451/852/390 452/872/390 +f 441/823/386 438/815/386 451/852/386 +f 449/865/386 441/823/386 451/852/386 +f 439/815/386 452/872/386 444/874/386 +f 449/1113/388 448/875/388 451/877/388 +f 458/1114/391 456/879/391 455/878/391 +f 460/1115/387 459/882/387 458/881/387 +f 462/1116/386 461/885/386 460/884/386 +f 455/1117/390 457/885/390 462/883/390 +f 456/1118/388 459/889/388 457/888/388 +f 466/1119/386 464/892/386 463/891/386 +f 468/1120/390 467/895/390 466/894/390 +f 470/1121/391 469/898/391 468/897/391 +f 463/1122/387 465/901/387 470/900/387 +f 464/1123/388 467/904/388 465/903/388 +f 558/1100/389 491/940/389 479/942/389 +f 474/1124/386 472/899/386 471/909/386 +f 478/1125/391 476/915/391 475/914/391 +f 471/1126/387 473/918/387 478/917/387 +f 475/1127/389 474/924/389 478/923/389 +f 482/1128/386 480/927/386 479/926/386 +f 487/1129/391 485/933/391 484/932/391 +f 556/1130/387 488/930/387 487/935/387 +f 480/1095/388 489/938/388 481/937/388 +f 494/945/386 493/944/386 496/1131/386 +f 499/1132/391 497/950/391 495/949/391 +f 492/1133/402 494/953/402 499/952/402 +f 496/1134/394 498/956/394 494/955/394 +f 495/955/395 493/959/395 499/958/395 +f 502/963/386 501/962/386 504/1135/386 +f 507/1136/391 505/968/391 503/967/391 +f 500/1070/397 502/971/397 507/970/397 +f 503/1137/399 501/977/399 507/976/399 +f 511/1138/386 509/980/386 508/979/386 +f 472/913/390 475/912/390 477/1139/390 +f 515/1140/391 513/986/391 512/985/391 +f 508/1141/387 510/989/387 515/988/387 +f 509/1142/388 514/992/388 510/991/388 +f 504/966/396 503/965/396 506/1143/396 +f 479/942/389 483/941/389 482/1144/389 +f 496/948/392 495/947/392 498/1145/392 +f 480/931/390 483/930/390 489/1146/390 +f 508/995/389 512/991/389 511/1147/389 +f 509/984/390 512/983/390 514/994/390 +f 422/802/386 420/787/386 433/1107/386 +f 523/1016/386 521/1003/386 534/1148/386 +f 476/922/388 472/921/388 477/1149/388 +f 505/975/398 504/974/398 506/1150/398 +f 463/908/389 468/907/389 466/1151/389 +f 524/1015/386 516/996/386 518/998/386 +f 518/1047/387 519/1000/387 517/999/387 +f 519/1152/386 521/1003/386 520/1002/386 +f 529/1153/388 516/1006/388 523/1005/388 +f 521/1046/388 524/1008/388 519/1009/388 +f 546/1154/388 526/890/388 525/1010/388 +f 533/1155/386 528/1012/386 530/1014/386 +f 530/1014/386 529/1013/386 524/1015/386 +f 534/1148/386 531/1017/386 523/1016/386 +f 531/1156/387 532/1019/387 533/1021/387 +f 531/1157/388 533/1022/388 534/1024/388 +f 551/1158/388 536/1026/388 535/1025/388 +f 528/1012/386 538/1028/386 529/1013/386 +f 540/1032/387 529/1031/387 523/1048/387 +f 523/1016/386 532/1018/386 540/1033/386 +f 532/1019/387 541/1035/387 528/1020/387 +f 516/996/386 542/1037/386 517/997/386 +f 517/999/387 520/1001/387 543/1039/387 +f 520/1002/386 522/1004/386 544/1041/386 +f 522/1159/387 545/1043/387 516/1044/387 +f 534/1024/388 530/1023/388 521/1046/388 +f 522/1159/390 521/1000/390 516/1044/390 +f 529/1031/387 530/1049/387 523/1048/387 +f 550/1077/386 546/1051/386 547/1052/386 +f 547/1078/387 548/1054/387 526/1053/387 +f 548/1079/386 549/1057/386 527/1056/386 +f 549/1082/390 550/1060/390 525/1059/390 +f 555/1074/386 551/1062/386 552/1064/386 +f 552/1160/387 553/1066/387 536/1065/387 +f 553/1075/386 554/1069/386 537/1068/386 +f 554/1076/390 555/1072/390 535/1071/390 +f 538/1028/386 555/1074/386 539/1029/386 +f 540/1033/386 541/1034/386 553/1075/386 +f 541/1035/390 538/1036/390 554/1076/390 +f 542/1037/386 550/1077/386 543/1038/386 +f 543/1039/387 544/1040/387 547/1078/387 +f 544/1041/386 545/1042/386 548/1079/386 +f 540/1161/389 545/1081/389 539/1080/389 +f 542/1045/390 550/1060/390 545/1043/390 +f 539/1029/390 552/1064/390 553/1064/390 +f 542/1037/386 539/1029/386 552/1064/386 +f 550/1077/386 542/1037/386 552/1064/386 +f 540/1029/391 545/1037/391 553/1064/391 +f 550/1162/388 549/1084/388 552/1086/388 +f 558/1098/386 557/1088/386 556/1087/386 +f 484/932/400 486/934/400 491/1090/400 +f 557/1099/388 486/1093/388 488/1092/388 +f 479/926/401 481/928/401 558/1098/401 +f 481/937/388 490/939/388 557/1099/388 +f 491/1090/391 490/1091/391 483/1101/391 +f 556/1097/389 484/1096/389 558/1100/389 +o CargoLeft +v -1.902109 3.364694 3.769022 +v -1.902109 3.364695 2.453471 +v -1.902109 1.054079 2.453471 +v -0.697891 3.364695 2.453471 +v -0.697891 1.054079 2.453471 +v -0.697891 3.364694 3.769022 +v -0.697891 1.054078 3.769021 +v -1.902109 1.054078 3.769021 +vt 0.665272 0.333718 +vt 0.335739 0.334728 +vt 0.334728 0.005195 +vt 0.005196 0.334728 +vt 0.004185 0.005196 +vt 0.333718 0.004185 +vt 0.334728 0.664261 +vt 0.005195 0.665272 +vt 0.004185 0.335739 +vt 0.335739 0.665272 +vt 0.334728 0.335739 +vt 0.664261 0.334728 +vt 0.995815 0.333718 +vt 0.666282 0.334728 +vt 0.665272 0.005195 +vt 0.334728 0.666282 +vt 0.664261 0.665272 +vt 0.665272 0.994804 +vt 0.664261 0.004185 +vt 0.334728 0.333718 +vt 0.333718 0.334728 +vt 0.665272 0.664261 +vt 0.994804 0.004185 +vt 0.335739 0.995815 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 559/1163/403 560/1164/403 561/1165/403 +f 560/1166/404 562/1167/404 563/1168/404 +f 562/1169/405 564/1170/405 565/1171/405 +f 564/1172/406 559/1173/406 566/1174/406 +f 566/1175/407 561/1176/407 563/1177/407 +f 564/1178/408 562/1179/408 560/1180/408 +f 566/1181/403 559/1163/403 561/1165/403 +f 561/1182/404 560/1166/404 563/1168/404 +f 563/1183/405 562/1169/405 565/1171/405 +f 565/1184/406 564/1172/406 566/1174/406 +f 565/1185/407 566/1175/407 563/1177/407 +f 559/1186/408 564/1178/408 560/1180/408 +o CargoRight +v 0.697891 3.364694 3.769022 +v 0.697891 3.364695 2.453471 +v 0.697891 1.054079 2.453471 +v 1.902109 3.364695 2.453471 +v 1.902109 1.054079 2.453471 +v 1.902109 3.364694 3.769022 +v 1.902109 1.054078 3.769021 +v 0.697891 1.054078 3.769021 +vt 0.665758 0.333229 +vt 0.335257 0.334242 +vt 0.334242 0.003741 +vt 0.003742 0.334242 +vt 0.002728 0.003742 +vt 0.333229 0.002728 +vt 0.334242 0.664743 +vt 0.003741 0.665758 +vt 0.002728 0.335257 +vt 0.335257 0.665758 +vt 0.334242 0.335257 +vt 0.664743 0.334242 +vt 0.997272 0.333229 +vt 0.666771 0.334242 +vt 0.665758 0.003741 +vt 0.334242 0.666771 +vt 0.664743 0.665758 +vt 0.665758 0.996258 +vt 0.664743 0.002728 +vt 0.334242 0.333229 +vt 0.333229 0.334242 +vt 0.665758 0.664743 +vt 0.996258 0.002728 +vt 0.335257 0.997272 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 567/1187/409 568/1188/409 569/1189/409 +f 568/1190/410 570/1191/410 571/1192/410 +f 570/1193/411 572/1194/411 573/1195/411 +f 572/1196/412 567/1197/412 574/1198/412 +f 574/1199/413 569/1200/413 571/1201/413 +f 572/1202/414 570/1203/414 568/1204/414 +f 574/1205/409 567/1187/409 569/1189/409 +f 569/1206/410 568/1190/410 571/1192/410 +f 571/1207/411 570/1193/411 573/1195/411 +f 573/1208/412 572/1196/412 574/1198/412 +f 573/1209/413 574/1199/413 571/1201/413 +f 567/1210/414 572/1202/414 568/1204/414 +o Wheel_Left +v -0.615484 -0.030450 -0.998166 +v -0.665484 -0.030450 -0.998166 +v -0.665484 -0.530450 -0.864191 +v -0.615484 -0.530450 -0.864191 +v -0.665484 -0.896475 -0.498167 +v -0.615484 -0.896475 -0.498167 +v -0.665484 -1.030450 0.001834 +v -0.615484 -1.030450 0.001834 +v -0.615484 -0.896475 0.501833 +v -0.665484 -0.896475 0.501833 +v -0.665484 -0.530450 0.867859 +v -0.615484 -0.530450 0.867859 +v -0.615484 -0.030450 1.001834 +v -0.665484 -0.030450 1.001834 +v -0.665484 0.469550 0.867859 +v -0.615484 0.469550 0.867859 +v -0.665484 0.835576 0.501834 +v -0.615484 0.835576 0.501834 +v -0.665484 0.969550 0.001834 +v -0.615484 0.969550 0.001834 +v -0.665484 0.835576 -0.498166 +v -0.665484 0.469551 -0.864191 +v -0.615484 0.469551 -0.864191 +v -0.615484 0.835576 -0.498166 +v -0.635811 -1.170576 0.346380 +v -0.635811 -1.181869 -0.300568 +v -0.923857 -1.125117 -0.286419 +v -0.923858 -1.114353 0.330258 +v -1.077124 -0.971991 0.289436 +v -1.077124 -0.981417 -0.250590 +v -1.023895 -0.818008 -0.209848 +v -1.023895 -0.810103 0.243017 +v -0.789077 -0.711350 -0.275799 +v -0.482545 -0.704438 0.318160 +v -0.789077 -0.704438 0.318160 +v -0.554979 -0.304465 0.313505 +v -0.482545 -0.711350 -0.275799 +v -0.247728 -0.810103 0.243017 +v -0.247728 -0.818008 -0.209848 +v -0.194499 -0.981417 -0.250590 +v -0.194499 -0.971991 0.289437 +v -0.347765 -1.114353 0.330258 +v -0.347765 -1.125117 -0.286419 +v -0.635811 -0.868174 -0.866489 +v -0.923857 -0.826100 -0.825860 +v -1.077123 -0.719567 -0.722982 +v -1.023895 -0.598421 -0.605992 +v -0.789077 -0.519349 -0.529634 +v -0.482545 -0.519349 -0.529633 +v -0.247728 -0.598421 -0.605992 +v -0.194499 -0.719567 -0.722981 +v -0.347765 -0.826100 -0.825859 +v -0.635811 -0.313546 -1.199743 +v -0.923857 -0.297424 -1.143520 +v -1.077123 -0.256602 -1.001158 +v -1.023895 -0.210182 -0.839270 +v -0.789077 -0.285325 -0.733605 +v -0.482545 -0.285325 -0.733605 +v -0.247727 -0.210182 -0.839270 +v -0.194499 -0.256602 -1.001158 +v -0.347765 -0.297424 -1.143520 +v -0.635811 0.333403 -1.211036 +v -0.923857 0.319254 -1.154284 +v -1.077123 0.283425 -1.010584 +v -1.023895 0.242683 -0.847175 +v -0.789077 0.308634 -0.740517 +v -0.554979 -0.280670 -0.333632 +v -0.482545 0.308634 -0.740517 +v -0.247727 0.242683 -0.847175 +v -0.194499 0.283425 -1.010584 +v -0.347765 0.319254 -1.154284 +v -0.635811 0.899324 -0.897341 +v -0.923857 0.858694 -0.855268 +v -1.077123 0.755816 -0.748734 +v -1.023895 0.638827 -0.627589 +v -0.789077 0.562468 -0.548516 +v -0.482545 0.562468 -0.548516 +v -0.247727 0.638827 -0.627589 +v -0.194499 0.755816 -0.748734 +v -0.347765 0.858694 -0.855268 +v -0.635811 1.232578 -0.342713 +v -0.923857 1.176355 -0.326591 +v -1.077123 1.033993 -0.285769 +v -1.023894 0.872105 -0.239349 +v -0.789077 0.766440 -0.314492 +v -0.482545 0.766440 -0.314492 +v -0.247727 0.872105 -0.239349 +v -0.194499 1.033993 -0.285769 +v -0.347765 1.176355 -0.326591 +v -0.635811 1.243871 0.304236 +v -0.923857 1.187120 0.290086 +v -1.077123 1.043420 0.254258 +v -1.023894 0.880010 0.213515 +v -0.789077 0.773352 0.279467 +v -0.482545 0.773352 0.279467 +v -0.554979 0.366467 -0.309837 +v -0.247727 0.880010 0.213515 +v -0.194499 1.043420 0.254258 +v -0.347765 1.187120 0.290086 +v -0.635811 0.930176 0.870157 +v -0.923857 0.888103 0.829527 +v -1.077123 0.781569 0.726649 +v -1.023895 0.660423 0.609660 +v -0.789077 0.581351 0.533301 +v -0.482545 0.581351 0.533301 +v -0.247727 0.660423 0.609660 +v -0.194499 0.781569 0.726649 +v -0.347765 0.888103 0.829527 +v -0.635812 0.375548 1.203411 +v -0.923857 0.359426 1.147187 +v -1.077123 0.318605 1.004825 +v -1.023895 0.272184 0.842938 +v -0.789077 0.347327 0.737273 +v -0.482545 0.347327 0.737273 +v -0.247727 0.272184 0.842938 +v -0.194499 0.318605 1.004826 +v -0.347765 0.359426 1.147188 +v -0.635812 -0.271401 1.214703 +v -0.923857 -0.257251 1.157952 +v -1.077124 -0.221423 1.014252 +v -1.023895 -0.180680 0.850842 +v -0.789077 -0.246632 0.744184 +v -0.482545 -0.246632 0.744185 +v -0.554979 -0.251286 0.344212 +v -0.247728 -0.180680 0.850843 +v -0.194499 -0.221423 1.014252 +v -0.347765 -0.257251 1.157952 +v -0.635811 -0.837322 0.901009 +v -0.923857 -0.796692 0.858934 +v -1.077124 -0.693814 0.752401 +v -1.023895 -0.576825 0.631256 +v -0.789077 -0.500466 0.552184 +v -0.482545 -0.500466 0.552184 +v -0.247728 -0.576825 0.631256 +v -0.194499 -0.693814 0.752402 +v -0.347765 -0.796692 0.858934 +v -0.789077 -0.304465 0.313505 +v -0.789077 -0.311377 -0.280454 +v -0.554979 -0.311377 -0.280454 +v -0.789077 0.342672 0.337300 +v -0.789077 -0.251286 0.344211 +v -0.554979 0.342672 0.337300 +v -0.789077 -0.280670 -0.333633 +v -0.789077 0.313289 -0.340544 +v -0.554979 0.313289 -0.340544 +v -0.789077 0.366467 -0.309837 +v -0.789077 0.373379 0.284121 +v -0.554979 0.373379 0.284121 +v 0.005551 0.048232 0.047774 +v 0.005551 0.048232 -0.052226 +v 0.005551 -0.051769 -0.052226 +v -0.744449 0.048231 -0.052226 +v -0.744449 0.048231 0.047774 +v -0.744449 -0.051769 0.047774 +v 0.005551 -0.051769 0.047774 +v -0.744449 -0.051769 -0.052226 +vt 0.513624 0.783997 +vt 0.506188 0.712612 +vt 0.505969 0.783973 +vt 0.949158 0.484385 +vt 0.944659 0.410168 +vt 0.941584 0.484478 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.342603 0.674991 +vt 0.335156 0.743134 +vt 0.334704 0.595770 +vt 0.334948 0.675014 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.523482 0.675613 +vt 0.521494 0.627793 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.598820 0.371478 +vt 0.530171 0.331957 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.109074 0.639268 +vt 0.000848 0.531055 +vt 0.830015 0.623328 +vt 0.792389 0.714799 +vt 0.837273 0.712605 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.462495 0.306756 +vt 0.455687 0.331872 +vt 0.758447 0.693332 +vt 0.721737 0.772501 +vt 0.757332 0.757109 +vt 0.340460 0.815081 +vt 0.297072 0.826038 +vt 0.340316 0.862012 +vt 0.676280 0.688510 +vt 0.639684 0.692967 +vt 0.674834 0.772357 +vt 0.225458 0.066465 +vt 0.157773 0.024179 +vt 0.158175 0.049709 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.879661 0.713728 +vt 0.872743 0.628628 +vt 0.792493 0.808950 +vt 0.837383 0.811379 +vt 0.766009 0.719283 +vt 0.402470 0.272035 +vt 0.384108 0.290468 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.638639 0.825588 +vt 0.675115 0.819426 +vt 0.078288 0.046975 +vt 0.091518 0.068826 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.785756 0.886926 +vt 0.830315 0.893182 +vt 0.760201 0.870015 +vt 0.367839 0.211969 +vt 0.342811 0.218841 +vt 0.722613 0.861988 +vt 0.758639 0.881416 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.000874 0.094773 +vt 0.020847 0.106443 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.366797 0.631670 +vt 0.410612 0.724746 +vt 0.343300 0.641815 +vt 0.366513 0.724108 +vt 0.367882 0.142652 +vt 0.342862 0.136182 +vt 0.880326 0.806458 +vt 0.916070 0.738915 +vt 0.880176 0.757653 +vt 0.651005 0.881416 +vt 0.661972 0.937679 +vt 0.697339 0.884549 +vt 0.963197 0.803150 +vt 0.999158 0.806093 +vt 0.963001 0.738770 +vt 0.000842 0.186648 +vt 0.026573 0.185955 +vt 0.478430 0.642230 +vt 0.454713 0.724378 +vt 0.478182 0.723178 +vt 0.454997 0.631940 +vt 0.366238 0.813802 +vt 0.410323 0.818844 +vt 0.342811 0.801309 +vt 0.402587 0.082657 +vt 0.384247 0.064640 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.998802 0.690392 +vt 0.962852 0.690423 +vt 0.023635 0.266097 +vt 0.045687 0.252581 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.366045 0.876721 +vt 0.410121 0.884850 +vt 0.368574 0.047943 +vt 0.455878 0.023384 +vt 0.450371 0.000831 +vt 0.462656 0.048059 +vt 0.915776 0.643196 +vt 0.879766 0.623692 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.071984 0.342642 +vt 0.083117 0.323505 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.184003 0.645063 +vt 0.227051 0.730389 +vt 0.538560 0.023470 +vt 0.544788 0.000929 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.037804 0.750424 +vt 0.000842 0.766738 +vt 0.941584 0.331962 +vt 0.879881 0.422891 +vt 0.941398 0.422896 +vt 0.090587 0.832202 +vt 0.123318 0.828165 +vt 0.084243 0.749997 +vt 0.163350 0.343486 +vt 0.162852 0.317479 +vt 0.296292 0.658368 +vt 0.271432 0.731379 +vt 0.295662 0.734429 +vt 0.272151 0.644522 +vt 0.183284 0.731920 +vt 0.228056 0.828732 +vt 0.610139 0.064873 +vt 0.626527 0.048208 +vt 0.000978 0.697596 +vt 0.085329 0.702418 +vt 0.038890 0.702846 +vt 0.118564 0.696514 +vt 0.242837 0.320688 +vt 0.229508 0.298361 +vt 0.272390 0.825121 +vt 0.296500 0.816519 +vt 0.184242 0.825662 +vt 0.230552 0.907946 +vt 0.673686 0.130002 +vt 0.592019 0.082852 +vt 0.651436 0.136500 +vt 0.041316 0.659523 +vt 0.006100 0.640350 +vt 0.087755 0.659095 +vt 0.300278 0.261221 +vt 0.277678 0.248491 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.785112 0.254285 +vt 0.741202 0.192204 +vt 0.651385 0.219160 +vt 0.673628 0.224394 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.845561 0.100185 +vt 0.809649 0.113269 +vt 0.183284 0.908088 +vt 0.222683 0.963363 +vt 0.229724 0.907946 +vt 0.892764 0.189172 +vt 0.928690 0.180787 +vt 0.892491 0.100041 +vt 0.320282 0.181017 +vt 0.294454 0.181233 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.785595 0.096730 +vt 0.741495 0.096636 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.591902 0.272231 +vt 0.609999 0.290702 +vt 0.809448 0.047401 +vt 0.892357 0.056365 +vt 0.845426 0.056510 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.697396 0.096460 +vt 0.673931 0.096282 +vt 0.785876 0.005407 +vt 0.741789 0.000831 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.845312 0.019129 +vt 0.809306 0.001196 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.332779 0.615853 +vt 0.296963 0.616402 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.709710 0.331848 +vt 0.720616 0.271792 +vt 0.879860 0.985796 +vt 0.940684 0.894960 +vt 0.879766 0.894861 +vt 0.297236 0.615853 +vt 0.332803 0.526612 +vt 0.296963 0.526722 +vt 0.941258 0.444023 +vt 0.879881 0.443788 +vt 0.941321 0.534932 +vt 0.133383 0.904255 +vt 0.143492 0.960751 +vt 0.180286 0.904398 +vt 0.478430 0.884894 +vt 0.417169 0.975757 +vt 0.478402 0.975800 +vt 0.767744 0.331957 +vt 0.803584 0.331848 +vt 0.767547 0.267577 +vt 0.818505 0.984088 +vt 0.879766 0.893225 +vt 0.818532 0.893182 +vt 0.911101 0.280588 +vt 0.972132 0.189316 +vt 0.911038 0.189679 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.478457 0.710220 +vt 0.513843 0.712612 +vt 0.297106 0.908942 +vt 0.340350 0.872968 +vt 0.296963 0.862012 +vt 0.404092 0.884869 +vt 0.342811 0.975783 +vt 0.404028 0.975801 +vt 0.767547 0.331957 +vt 0.756641 0.271902 +vt 0.720616 0.331814 +vt 0.818894 0.331951 +vt 0.803584 0.316653 +vt 0.803585 0.331957 +vt 0.485203 0.925578 +vt 0.500243 0.925532 +vt 0.484851 0.810753 +vt 0.818889 0.301333 +vt 0.803584 0.316647 +vt 0.818888 0.316642 +vt 0.015117 0.947455 +vt 0.026433 0.832663 +vt 0.015470 0.832630 +vt 0.001191 0.833505 +vt 0.014769 0.946257 +vt 0.015117 0.832630 +vt 0.943226 0.115741 +vt 0.928690 0.000831 +vt 0.929041 0.115591 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.188269 0.343486 +vt 0.109050 0.343516 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn 1.000000 0.000000 0.000000 +vn -0.192500 -0.981200 0.017100 +vn -0.682300 -0.730900 0.012800 +vn -0.950400 0.310900 -0.005400 +vn -0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn 0.407500 0.913100 -0.010600 +vn 0.950400 0.310900 -0.005400 +vn 0.682300 -0.730900 0.012800 +vn 0.192500 -0.981200 0.017100 +vn -0.192500 -0.858300 -0.475700 +vn -0.682300 -0.639400 -0.354400 +vn -0.950400 0.272000 0.150800 +vn -0.252600 0.846200 0.469100 +vn -0.000000 0.797500 0.603300 +vn 0.421400 0.723300 0.547100 +vn 0.950400 0.272000 0.150800 +vn 0.682300 -0.639400 -0.354400 +vn 0.192500 -0.858300 -0.475700 +vn -0.192500 -0.505400 -0.841100 +vn -0.682300 -0.376500 -0.626600 +vn -0.950400 0.160200 0.266600 +vn -0.215700 0.502900 0.837000 +vn -0.000000 0.657000 0.753900 +vn 0.422700 0.595500 0.683200 +vn 0.950400 0.160200 0.266600 +vn 0.682300 -0.376500 -0.626600 +vn 0.192500 -0.505400 -0.841100 +vn -0.192500 -0.017100 -0.981200 +vn -0.682300 -0.012800 -0.730900 +vn -0.950400 0.005400 0.310900 +vn -0.417200 0.015900 0.908700 +vn -0.000000 -0.999900 0.011600 +vn 0.407500 0.010600 0.913100 +vn 0.950400 0.005400 0.310900 +vn 0.682300 -0.012800 -0.730900 +vn 0.192500 -0.017100 -0.981200 +vn -0.192500 0.475700 -0.858300 +vn -0.682300 0.354400 -0.639400 +vn -0.950400 -0.150800 0.272000 +vn -0.252600 -0.469100 0.846200 +vn -0.000000 -0.603300 0.797500 +vn 0.421400 -0.547100 0.723300 +vn 0.950400 -0.150800 0.272000 +vn 0.682300 0.354400 -0.639400 +vn 0.192500 0.475700 -0.858300 +vn -0.192500 0.841100 -0.505400 +vn -0.682300 0.626600 -0.376500 +vn -0.950400 -0.266600 0.160200 +vn -0.215700 -0.837000 0.502900 +vn -0.000000 -0.753900 0.657000 +vn 0.422700 -0.683200 0.595500 +vn 0.950400 -0.266600 0.160200 +vn 0.682300 0.626600 -0.376500 +vn 0.192500 0.841100 -0.505400 +vn -0.192500 0.981200 -0.017100 +vn -0.682300 0.730900 -0.012800 +vn -0.950400 -0.310900 0.005400 +vn -0.417200 -0.908700 0.015900 +vn 0.984000 -0.178200 0.002100 +vn 0.407500 -0.913100 0.010600 +vn 0.950400 -0.310900 0.005400 +vn 0.682300 0.730900 -0.012800 +vn 0.192500 0.981200 -0.017100 +vn -0.192500 0.858300 0.475700 +vn -0.682300 0.639400 0.354400 +vn -0.950400 -0.272000 -0.150800 +vn -0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn 0.421400 -0.723300 -0.547100 +vn 0.950400 -0.272000 -0.150800 +vn 0.682300 0.639400 0.354400 +vn 0.192500 0.858300 0.475700 +vn -0.192500 0.505400 0.841100 +vn -0.682300 0.376500 0.626600 +vn -0.950400 -0.160200 -0.266600 +vn -0.215700 -0.502900 -0.837000 +vn 0.000000 -0.657000 -0.753900 +vn 0.422700 -0.595500 -0.683200 +vn 0.950400 -0.160200 -0.266600 +vn 0.682300 0.376500 0.626600 +vn 0.192500 0.505400 0.841100 +vn -0.192500 0.017100 0.981200 +vn -0.682300 0.012800 0.730900 +vn -0.950400 -0.005400 -0.310900 +vn -0.417200 -0.015900 -0.908700 +vn 0.407500 -0.010600 -0.913100 +vn 0.950400 -0.005400 -0.310900 +vn 0.682300 0.012800 0.730900 +vn 0.192500 0.017100 0.981200 +vn -0.192500 -0.475700 0.858300 +vn -0.682300 -0.354400 0.639400 +vn -0.950400 0.150800 -0.272000 +vn -0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn 0.421400 0.547100 -0.723300 +vn 0.950400 0.150800 -0.272000 +vn 0.682300 -0.354400 0.639400 +vn 0.192500 -0.475700 0.858300 +vn -0.192500 -0.841100 0.505400 +vn -0.682300 -0.626600 0.376500 +vn -0.950400 0.266600 -0.160200 +vn -0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn 0.422700 0.683200 -0.595500 +vn 0.950400 0.266600 -0.160200 +vn 0.682300 -0.626600 0.376500 +vn 0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn 0.984000 0.178200 -0.002100 +vn 0.984000 -0.002100 -0.178200 +vn 0.984000 0.002100 0.178200 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn -0.000000 1.000000 -0.000000 +vn -0.407500 0.913100 -0.010600 +vn 0.417200 0.908700 -0.015900 +vn -0.421400 0.723300 0.547100 +vn 0.252600 0.846200 0.469100 +vn -0.422700 0.595500 0.683200 +vn 0.215700 0.502900 0.837000 +vn -0.407500 0.010600 0.913100 +vn 0.417200 0.015900 0.908700 +vn -0.421400 -0.547100 0.723300 +vn 0.252600 -0.469100 0.846200 +vn -0.422700 -0.683200 0.595500 +vn 0.215700 -0.837000 0.502900 +vn -0.407500 -0.913100 0.010600 +vn 0.417200 -0.908700 0.015900 +vn -0.421400 -0.723300 -0.547100 +vn 0.252600 -0.846200 -0.469100 +vn -0.422700 -0.595500 -0.683200 +vn 0.215700 -0.502900 -0.837000 +vn -0.407500 -0.010600 -0.913100 +vn 0.417200 -0.015900 -0.908700 +vn -0.421400 0.547100 -0.723300 +vn 0.252600 0.469100 -0.846200 +vn -0.422700 0.683200 -0.595500 +vn 0.215700 0.837000 -0.502900 +usemtl None.010 +f 575/1211/415 577/1212/415 576/1213/415 +f 578/1214/416 579/1215/416 577/1216/416 +f 580/1217/417 581/1218/417 579/1215/417 +f 582/1219/418 583/1220/418 581/1221/418 +f 583/1220/419 585/1222/419 584/1223/419 +f 586/1224/420 587/1225/420 585/1222/420 +f 587/1226/421 589/1227/421 588/1228/421 +f 590/1229/422 591/1230/422 589/1227/422 +f 592/1231/423 593/1232/423 591/1230/423 +f 594/1233/424 595/1234/424 593/1232/424 +f 577/1235/425 596/1236/425 576/1237/425 +f 597/1238/426 575/1211/426 596/1239/426 +f 598/1240/427 596/1239/427 595/1241/427 +f 575/1242/428 597/1243/428 578/1244/428 +f 599/1245/429 601/1246/429 600/1247/429 +f 602/1248/430 603/1249/430 601/1246/430 +f 603/1250/431 605/1251/431 604/1252/431 +f 606/1253/432 607/1254/432 605/1255/432 +f 608/1256/433 610/1257/433 609/1258/433 +f 608/1259/434 612/1260/434 611/1261/434 +f 612/1262/435 614/1263/435 613/1264/435 +f 615/1265/436 616/1266/436 614/1263/436 +f 599/1245/437 617/1267/437 616/1268/437 +f 600/1247/438 619/1269/438 618/1270/438 +f 601/1246/439 604/1271/439 619/1269/439 +f 604/1252/440 621/1272/440 620/1273/440 +f 605/1255/441 607/1254/441 621/1274/441 +f 607/1254/442 611/1261/442 622/1275/442 +f 611/1261/443 624/1276/443 623/1277/443 +f 613/1264/444 625/1278/444 624/1279/444 +f 614/1263/445 626/1280/445 625/1278/445 +f 617/1267/446 600/1247/446 626/1281/446 +f 618/1270/447 628/1282/447 627/1283/447 +f 619/1269/448 629/1284/448 628/1282/448 +f 620/1273/449 630/1285/449 629/1286/449 +f 621/1274/450 631/1287/450 630/1288/450 +f 622/1275/451 623/1277/451 631/1287/451 +f 623/1277/452 624/1276/452 632/1289/452 +f 624/1279/453 625/1278/453 633/1290/453 +f 625/1278/454 635/1291/454 634/1292/454 +f 626/1281/455 627/1283/455 635/1293/455 +f 627/1294/456 628/1295/456 636/1296/456 +f 628/1295/457 629/1297/457 637/1298/457 +f 629/1286/458 639/1299/458 638/1300/458 +f 630/1301/459 640/1302/459 639/1303/459 +f 632/1304/460 641/1305/460 631/1306/460 +f 632/1307/461 633/1308/461 642/1309/461 +f 633/1290/462 644/1310/462 643/1311/462 +f 634/1312/463 645/1313/463 644/1314/463 +f 635/1315/464 636/1296/464 645/1313/464 +f 636/1296/465 647/1316/465 646/1317/465 +f 637/1298/466 648/1318/466 647/1316/466 +f 638/1300/467 649/1319/467 648/1320/467 +f 639/1303/468 640/1302/468 649/1321/468 +f 640/1302/469 642/1309/469 650/1322/469 +f 642/1309/470 652/1323/470 651/1324/470 +f 643/1311/471 653/1325/471 652/1326/471 +f 644/1314/472 645/1313/472 653/1327/472 +f 645/1313/473 646/1317/473 654/1328/473 +f 646/1317/474 656/1329/474 655/1330/474 +f 647/1331/475 657/1332/475 656/1333/475 +f 648/1320/476 658/1334/476 657/1332/476 +f 649/1321/477 659/1335/477 658/1336/477 +f 650/1322/478 651/1324/478 659/1335/478 +f 651/1324/479 652/1323/479 660/1337/479 +f 652/1326/480 653/1325/480 661/1338/480 +f 653/1325/481 663/1339/481 662/1340/481 +f 654/1328/482 646/1317/482 663/1341/482 +f 655/1342/483 656/1343/483 664/1344/483 +f 656/1333/484 666/1345/484 665/1346/484 +f 657/1332/485 667/1347/485 666/1345/485 +f 658/1348/486 668/1349/486 667/1350/486 +f 669/1351/487 670/1352/487 660/1353/487 +f 660/1354/488 661/1355/488 669/1356/488 +f 661/1338/489 672/1357/489 671/1358/489 +f 662/1359/490 673/1360/490 672/1361/490 +f 663/1362/491 664/1344/491 673/1360/491 +f 664/1344/492 665/1363/492 674/1364/492 +f 665/1346/493 676/1365/493 675/1366/493 +f 666/1345/494 667/1347/494 676/1365/494 +f 667/1350/495 668/1349/495 677/1367/495 +f 668/1349/496 679/1368/496 678/1369/496 +f 669/1356/497 680/1370/497 679/1368/497 +f 671/1358/498 681/1371/498 680/1372/498 +f 672/1361/499 682/1373/499 681/1374/499 +f 673/1360/500 674/1364/500 682/1373/500 +f 674/1364/501 675/1375/501 683/1376/501 +f 675/1366/502 676/1365/502 684/1377/502 +f 676/1365/503 677/1378/503 685/1379/503 +f 677/1367/504 687/1380/504 686/1381/504 +f 678/1369/505 688/1382/505 687/1380/505 +f 679/1368/506 680/1370/506 688/1382/506 +f 680/1372/507 690/1383/507 689/1384/507 +f 681/1371/508 691/1385/508 690/1383/508 +f 682/1373/509 674/1364/509 691/1386/509 +f 683/1387/510 684/1388/510 692/1389/510 +f 684/1377/511 694/1390/511 693/1391/511 +f 685/1379/512 695/1392/512 694/1390/512 +f 686/1393/513 696/1394/513 695/1395/513 +f 696/1396/460 698/1397/460 697/1398/460 +f 688/1399/514 689/1400/514 697/1401/514 +f 689/1384/515 700/1402/515 699/1403/515 +f 690/1383/516 691/1385/516 700/1402/516 +f 691/1404/517 692/1389/517 701/1405/517 +f 692/1389/518 703/1406/518 702/1407/518 +f 693/1408/519 704/1409/519 703/1406/519 +f 694/1390/520 705/1410/520 704/1411/520 +f 695/1395/521 696/1394/521 705/1412/521 +f 696/1394/522 707/1413/522 706/1414/522 +f 697/1401/523 708/1415/523 707/1413/523 +f 699/1403/524 700/1402/524 708/1416/524 +f 700/1417/525 710/1418/525 709/1419/525 +f 701/1405/526 702/1407/526 710/1418/526 +f 702/1407/527 602/1420/527 599/1421/527 +f 703/1406/528 603/1422/528 602/1420/528 +f 704/1411/529 606/1423/529 603/1250/529 +f 705/1412/530 609/1424/530 606/1425/530 +f 706/1414/531 608/1426/531 609/1424/531 +f 707/1413/532 708/1415/532 608/1426/532 +f 708/1416/533 615/1265/533 612/1262/533 +f 709/1419/534 710/1418/534 615/1427/534 +f 710/1418/535 599/1421/535 616/1428/535 +f 711/1429/536 713/1430/536 712/1431/536 +f 609/1432/425 712/1288/425 607/1433/425 +f 607/1434/537 713/1435/537 611/1436/537 +f 611/1437/538 610/1438/538 608/1439/538 +f 714/1440/537 698/1441/537 715/1442/537 +f 697/1443/539 698/1444/539 688/1445/539 +f 688/1446/536 716/1447/536 687/1448/536 +f 687/1449/425 715/1450/425 696/1451/425 +f 717/1452/433 641/1453/433 718/1454/433 +f 631/1455/425 718/1456/425 640/1457/425 +f 642/1458/540 641/1459/540 632/1460/540 +f 640/1461/536 719/1462/536 642/1457/536 +f 720/1463/460 722/1464/460 721/1465/460 +f 668/1466/433 722/1467/433 669/1468/433 +f 659/1469/425 721/1470/425 668/1471/425 +f 660/1472/537 670/1473/537 659/1474/537 +f 723/1475/428 725/1476/428 724/1477/428 +f 724/1478/541 725/1479/541 726/1480/541 +f 726/1481/425 728/1482/425 727/1483/425 +f 727/1484/542 729/1485/542 723/1486/542 +f 729/1487/543 730/1488/543 725/1489/543 +f 727/1490/544 724/1491/544 726/1492/544 +f 674/1364/492 665/1363/492 675/1375/492 +f 578/1465/415 577/1212/415 575/1211/415 +f 580/1217/416 579/1215/416 578/1214/416 +f 582/1493/417 581/1218/417 580/1217/417 +f 596/1239/426 575/1211/426 576/1213/426 +f 586/1224/419 585/1222/419 583/1220/419 +f 726/1480/541 725/1479/541 730/1494/541 +f 590/1229/421 589/1227/421 587/1226/421 +f 592/1231/422 591/1230/422 590/1229/422 +f 594/1233/423 593/1232/423 592/1231/423 +f 598/1495/424 595/1234/424 594/1233/424 +f 577/1235/425 595/1496/425 596/1236/425 +f 577/1235/425 593/1497/425 595/1496/425 +f 579/1498/425 593/1497/425 577/1235/425 +f 579/1498/425 591/1499/425 593/1497/425 +f 581/1500/425 584/1501/425 579/1498/425 +f 579/1498/425 584/1501/425 591/1499/425 +f 584/1501/425 585/1502/425 591/1499/425 +f 591/1499/425 585/1502/425 589/1503/425 +f 622/1275/442 611/1261/442 623/1277/442 +f 597/1238/427 596/1239/427 598/1240/427 +f 598/1504/428 594/1505/428 597/1243/428 +f 708/1416/524 700/1402/524 709/1506/524 +f 578/1244/428 594/1505/428 580/1507/428 +f 594/1505/428 592/1508/428 580/1507/428 +f 580/1507/428 592/1508/428 582/1509/428 +f 582/1509/428 586/1510/428 583/1511/428 +f 592/1508/428 586/1510/428 582/1509/428 +f 590/1512/428 586/1510/428 592/1508/428 +f 587/1513/428 586/1510/428 590/1512/428 +f 602/1248/429 601/1246/429 599/1245/429 +f 636/1296/456 628/1295/456 637/1298/456 +f 606/1423/431 605/1251/431 603/1250/431 +f 609/1514/545 607/1254/545 606/1253/545 +f 609/1258/433 610/1257/433 711/1515/433 +f 611/1261/546 612/1260/546 613/1516/546 +f 615/1265/435 614/1263/435 612/1262/435 +f 633/1290/453 625/1278/453 634/1292/453 +f 600/1247/437 617/1267/437 599/1245/437 +f 601/1246/438 619/1269/438 600/1247/438 +f 661/1338/480 653/1325/480 662/1340/480 +f 605/1251/440 621/1272/440 604/1252/440 +f 621/1274/547 607/1254/547 622/1275/547 +f 664/1344/483 656/1343/483 665/1363/483 +f 613/1516/548 624/1276/548 611/1261/548 +f 614/1263/444 625/1278/444 613/1264/444 +f 617/1517/445 626/1280/445 614/1263/445 +f 683/1376/501 675/1375/501 684/1518/501 +f 619/1269/447 628/1282/447 618/1270/447 +f 620/1519/448 629/1284/448 619/1269/448 +f 621/1272/449 630/1285/449 620/1273/449 +f 622/1275/549 631/1287/549 621/1274/549 +f 585/1222/420 587/1225/420 588/1520/420 +f 632/1289/550 624/1276/550 633/1521/550 +f 692/1389/510 684/1388/510 693/1408/510 +f 626/1280/454 635/1291/454 625/1278/454 +f 618/1270/455 627/1283/455 626/1281/455 +f 626/1281/446 600/1247/446 618/1270/446 +f 601/1246/430 603/1249/430 604/1271/430 +f 630/1285/458 639/1299/458 629/1286/458 +f 631/1522/551 640/1302/551 630/1301/551 +f 631/1306/460 641/1305/460 717/1523/460 +f 642/1309/552 633/1308/552 643/1524/552 +f 634/1292/462 644/1310/462 633/1290/462 +f 635/1315/463 645/1313/463 634/1312/463 +f 627/1294/464 636/1296/464 635/1315/464 +f 637/1298/465 647/1316/465 636/1296/465 +f 638/1525/466 648/1318/466 637/1298/466 +f 639/1299/467 649/1319/467 638/1300/467 +f 649/1321/553 640/1302/553 650/1322/553 +f 614/1263/436 616/1266/436 617/1517/436 +f 643/1524/554 652/1323/554 642/1309/554 +f 644/1310/471 653/1325/471 643/1311/471 +f 589/1503/425 585/1502/425 588/1526/425 +f 636/1296/473 646/1317/473 645/1313/473 +f 647/1316/474 656/1329/474 646/1317/474 +f 648/1320/475 657/1332/475 647/1331/475 +f 649/1319/476 658/1334/476 648/1320/476 +f 650/1322/555 659/1335/555 649/1321/555 +f 615/1427/534 710/1418/534 616/1428/534 +f 660/1337/556 652/1323/556 661/1527/556 +f 688/1445/539 698/1444/539 716/1528/539 +f 654/1529/481 663/1339/481 653/1325/481 +f 691/1386/509 674/1364/509 683/1376/509 +f 619/1269/439 604/1271/439 620/1519/439 +f 657/1332/484 666/1345/484 656/1333/484 +f 658/1334/485 667/1347/485 657/1332/485 +f 659/1530/557 668/1349/557 658/1348/557 +f 722/1531/487 670/1352/487 669/1351/487 +f 669/1356/558 661/1355/558 671/1532/558 +f 662/1340/489 672/1357/489 661/1338/489 +f 663/1362/490 673/1360/490 662/1359/490 +f 655/1342/491 664/1344/491 663/1362/491 +f 653/1327/472 645/1313/472 654/1328/472 +f 666/1345/493 676/1365/493 665/1346/493 +f 676/1365/494 667/1347/494 677/1378/494 +f 677/1367/559 668/1349/559 678/1369/559 +f 669/1356/496 679/1368/496 668/1349/496 +f 671/1532/560 680/1370/560 669/1356/560 +f 672/1357/498 681/1371/498 671/1358/498 +f 673/1360/499 682/1373/499 672/1361/499 +f 664/1344/500 674/1364/500 673/1360/500 +f 631/1287/451 623/1277/451 632/1289/451 +f 637/1298/457 629/1297/457 638/1525/457 +f 700/1402/516 691/1385/516 701/1533/516 +f 678/1369/561 687/1380/561 677/1367/561 +f 679/1368/505 688/1382/505 678/1369/505 +f 688/1382/562 680/1370/562 689/1534/562 +f 681/1371/507 690/1383/507 680/1372/507 +f 682/1535/508 691/1385/508 681/1371/508 +f 659/1335/478 651/1324/478 660/1337/478 +f 684/1377/502 676/1365/502 685/1379/502 +f 685/1379/511 694/1390/511 684/1377/511 +f 686/1536/512 695/1392/512 685/1379/512 +f 687/1537/563 696/1394/563 686/1393/563 +f 715/1538/460 698/1397/460 696/1396/460 +f 697/1401/564 689/1400/564 699/1539/564 +f 690/1383/515 700/1402/515 689/1384/515 +f 663/1341/482 646/1317/482 655/1330/482 +f 683/1387/517 692/1389/517 691/1404/517 +f 693/1408/518 703/1406/518 692/1389/518 +f 694/1540/519 704/1409/519 693/1408/519 +f 695/1392/520 705/1410/520 694/1390/520 +f 705/1412/565 696/1394/565 706/1414/565 +f 697/1401/522 707/1413/522 696/1394/522 +f 699/1539/566 708/1415/566 697/1401/566 +f 685/1379/503 677/1378/503 686/1536/503 +f 701/1405/525 710/1418/525 700/1417/525 +f 692/1389/526 702/1407/526 701/1405/526 +f 703/1406/527 602/1420/527 702/1407/527 +f 704/1409/528 603/1422/528 703/1406/528 +f 705/1410/529 606/1423/529 704/1411/529 +f 706/1414/567 609/1424/567 705/1412/567 +f 707/1413/531 608/1426/531 706/1414/531 +f 608/1426/568 708/1415/568 612/1541/568 +f 709/1506/533 615/1265/533 708/1416/533 +f 718/1454/433 641/1453/433 719/1542/433 +f 702/1407/535 599/1421/535 710/1418/535 +f 610/1543/536 713/1430/536 711/1429/536 +f 711/1544/425 712/1288/425 609/1432/425 +f 712/1545/537 713/1435/537 607/1434/537 +f 713/1546/538 610/1438/538 611/1437/538 +f 716/1547/537 698/1441/537 714/1440/537 +f 597/1243/428 594/1505/428 578/1244/428 +f 687/1448/536 716/1447/536 714/1548/536 +f 714/1549/425 715/1450/425 687/1449/425 +f 650/1322/469 642/1309/469 651/1324/469 +f 717/1550/425 718/1456/425 631/1455/425 +f 719/1551/540 641/1459/540 642/1458/540 +f 718/1552/536 719/1462/536 640/1461/536 +f 670/1553/460 722/1464/460 720/1463/460 +f 721/1554/433 722/1467/433 668/1466/433 +f 720/1555/425 721/1470/425 659/1469/425 +f 659/1474/537 670/1473/537 720/1556/537 +f 729/1483/428 725/1476/428 723/1475/428 +f 581/1221/418 583/1220/418 584/1223/418 +f 730/1557/425 728/1482/425 726/1481/425 +f 728/1558/542 729/1485/542 727/1484/542 +f 728/1559/543 730/1488/543 729/1487/543 +f 723/1560/544 724/1491/544 727/1490/544 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.mtl new file mode 100644 index 00000000..58127681 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.mtl @@ -0,0 +1,35 @@ +newmtl None +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_main + +newmtl None.001 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.010 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.014 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.022 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None_storage.png +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_storage diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.obj new file mode 100644 index 00000000..c1ffc687 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.obj @@ -0,0 +1,6826 @@ +# Blender v2.76 (sub 0) OBJ File: 'buggyWhole.blend' +# www.blender.org +mtllib buggy_inv.mtl +o Wheel_Front_Right +v 2.158458 2.342700 -2.371578 +v 2.158458 2.331936 -3.049923 +v 2.164516 2.305865 -3.022342 +v 1.870412 2.054904 -3.677748 +v 2.158458 2.014275 -3.631467 +v 1.870412 2.388159 -3.067657 +v 1.429099 1.911396 -3.514280 +v 1.582366 2.014275 -3.631467 +v 1.582366 2.331936 -3.049923 +v 2.158458 2.331936 -3.049923 +v 1.870412 2.399451 -2.356013 +v 1.429099 2.189574 -3.005019 +v 1.582366 2.342700 -2.371579 +v 2.158458 2.342700 -2.371578 +v 2.158458 2.043683 -1.778193 +v 1.429099 2.199000 -2.410989 +v 1.429099 1.937149 -1.891359 +v 1.582366 2.043683 -1.778193 +v 1.870412 2.085756 -1.733500 +v 2.158458 1.515007 -1.428766 +v 1.429099 1.474185 -1.585365 +v 1.582366 1.515006 -1.428766 +v 1.870412 1.531128 -1.366922 +v 2.158458 0.898329 -1.416926 +v 1.429100 0.934157 -1.574996 +v 1.582366 0.898329 -1.416927 +v 1.876469 2.028834 -3.623286 +v 1.876469 2.362088 -3.039316 +v 2.164515 1.988204 -3.578986 +v 1.435157 1.885326 -3.466817 +v 1.435157 2.163503 -2.979362 +v 1.588423 2.305865 -3.022342 +v 1.588423 1.988204 -3.578987 +v 1.876469 2.373381 -2.358142 +v 2.164515 2.305865 -3.022342 +v 1.435157 2.172929 -2.410764 +v 1.588423 2.316629 -2.373041 +v 1.876469 2.059686 -1.762283 +v 2.164515 2.017613 -1.805062 +v 1.435157 1.911079 -1.913383 +v 1.588423 2.017612 -1.805063 +v 1.876469 1.505058 -1.411399 +v 2.164516 1.488936 -1.470596 +v 1.435157 1.448114 -1.620489 +v 1.588423 1.488936 -1.470597 +v 1.876469 0.858109 -1.399510 +v 2.164516 0.872258 -1.459263 +v 1.435157 0.908087 -1.610565 +v 1.588423 0.872258 -1.459262 +v 1.870412 0.884179 -1.354500 +v 2.164515 2.316629 -2.373040 +v 2.164516 2.316629 -2.373040 +v 1.850085 0.951980 -3.725185 +v 1.900085 0.951980 -3.725185 +v 1.900085 0.451980 -3.591210 +v 1.850085 0.451980 -3.591210 +v 1.900085 0.085955 -3.225186 +v 1.850085 0.085955 -3.225186 +v 1.900085 -0.048020 -2.725186 +v 1.850085 -0.048020 -2.725186 +v 1.850085 0.085955 -2.225186 +v 1.900085 0.085955 -2.225186 +v 1.900085 0.451980 -1.859160 +v 1.850085 0.451980 -1.859160 +v 1.850085 0.951980 -1.725186 +v 1.900085 0.951980 -1.725186 +v 1.900085 1.451980 -1.859161 +v 1.850085 1.451980 -1.859161 +v 1.900085 1.818006 -2.225186 +v 1.850085 1.818006 -2.225186 +v 1.900085 1.951980 -2.725185 +v 1.850085 1.951980 -2.725185 +v 1.900085 1.818006 -3.225185 +v 1.900085 1.451981 -3.591211 +v 1.850085 1.451981 -3.591211 +v 1.850085 1.818006 -3.225185 +v 1.870412 -0.188146 -2.380639 +v 1.870412 -0.199439 -3.027588 +v 2.158458 -0.142687 -3.013439 +v 2.158459 -0.131923 -2.396761 +v 2.311725 0.010439 -2.437583 +v 2.311725 0.001013 -2.977610 +v 2.258496 0.164422 -2.936868 +v 2.258496 0.172327 -2.484003 +v 2.023678 0.271080 -3.002819 +v 1.717146 0.277992 -2.408860 +v 2.023678 0.277992 -2.408860 +v 1.789580 0.677965 -2.413515 +v 1.717146 0.271080 -3.002819 +v 1.482329 0.172327 -2.484003 +v 1.482329 0.164422 -2.936868 +v 1.429100 0.001013 -2.977610 +v 1.429100 0.010439 -2.437582 +v 1.582366 -0.131923 -2.396761 +v 1.582366 -0.142687 -3.013439 +v 1.870412 0.114256 -3.593509 +v 2.158458 0.156330 -3.552879 +v 2.311724 0.262863 -3.450001 +v 2.258496 0.384009 -3.333012 +v 2.023678 0.463081 -3.256653 +v 1.717146 0.463081 -3.256652 +v 1.482329 0.384009 -3.333012 +v 1.429100 0.262863 -3.450001 +v 1.582366 0.156330 -3.552878 +v 1.870412 0.668884 -3.926763 +v 2.158458 0.685006 -3.870540 +v 2.311724 0.725828 -3.728178 +v 2.258496 0.772248 -3.566289 +v 2.023678 0.697105 -3.460625 +v 1.717146 0.697105 -3.460624 +v 1.482328 0.772248 -3.566290 +v 1.429100 0.725828 -3.728178 +v 1.582366 0.685006 -3.870539 +v 1.870412 1.315833 -3.938055 +v 2.158458 1.301684 -3.881304 +v 2.311723 1.265855 -3.737603 +v 2.258496 1.225113 -3.574194 +v 2.023678 1.291064 -3.467537 +v 1.789580 0.701760 -3.060651 +v 1.717146 1.291064 -3.467536 +v 1.482328 1.225113 -3.574195 +v 1.429100 1.265855 -3.737603 +v 1.582366 1.301684 -3.881304 +v 1.870412 1.881754 -3.624360 +v 2.158458 1.841124 -3.582288 +v 2.311724 1.738246 -3.475754 +v 2.258496 1.621257 -3.354608 +v 2.023678 1.544898 -3.275535 +v 1.717146 1.544898 -3.275535 +v 1.482328 1.621257 -3.354608 +v 1.429100 1.738246 -3.475753 +v 1.582366 1.841124 -3.582287 +v 1.870412 2.215008 -3.069732 +v 2.158458 2.158785 -3.053610 +v 2.311724 2.016423 -3.012789 +v 2.258495 1.854535 -2.966368 +v 2.023678 1.748870 -3.041511 +v 1.717146 1.748870 -3.041511 +v 1.482328 1.854535 -2.966368 +v 1.429100 2.016423 -3.012788 +v 1.582366 2.158785 -3.053610 +v 1.870412 2.226301 -2.422783 +v 2.158458 2.169550 -2.436933 +v 2.311724 2.025850 -2.472761 +v 2.258495 1.862440 -2.513504 +v 2.023678 1.755782 -2.447552 +v 1.717146 1.755782 -2.447552 +v 1.789580 1.348897 -3.036856 +v 1.482328 1.862440 -2.513504 +v 1.429100 2.025850 -2.472761 +v 1.582366 2.169550 -2.436933 +v 1.870412 1.912606 -1.856862 +v 2.158458 1.870533 -1.897493 +v 2.311724 1.763999 -2.000371 +v 2.258496 1.642853 -2.117359 +v 2.023678 1.563781 -2.193719 +v 1.717146 1.563781 -2.193719 +v 1.482328 1.642853 -2.117359 +v 1.429100 1.763999 -2.000370 +v 1.582366 1.870533 -1.897492 +v 1.870412 1.357978 -1.523608 +v 2.158458 1.341856 -1.579832 +v 2.311724 1.301035 -1.722194 +v 2.258496 1.254614 -1.884081 +v 2.023678 1.329757 -1.989747 +v 1.717146 1.329757 -1.989746 +v 1.482328 1.254614 -1.884082 +v 1.429100 1.301035 -1.722193 +v 1.582366 1.341856 -1.579831 +v 1.870412 0.711029 -1.512317 +v 2.158458 0.725179 -1.569067 +v 2.311725 0.761007 -1.712768 +v 2.258496 0.801750 -1.876177 +v 2.023678 0.735798 -1.982835 +v 1.717146 0.735798 -1.982834 +v 1.789580 0.731144 -2.382808 +v 1.482329 0.801750 -1.876176 +v 1.429100 0.761007 -1.712768 +v 1.582366 0.725179 -1.569068 +v 1.870412 0.145108 -1.826011 +v 2.158458 0.185738 -1.868085 +v 2.311725 0.288616 -1.974618 +v 2.258496 0.405605 -2.095764 +v 2.023678 0.481964 -2.174836 +v 1.717146 0.481964 -2.174836 +v 1.482329 0.405605 -2.095764 +v 1.429100 0.288616 -1.974618 +v 1.582366 0.185738 -1.868085 +v 2.023678 0.677965 -2.413515 +v 2.023678 0.671053 -3.007473 +v 1.789580 0.671053 -3.007473 +v 2.023678 1.325102 -2.389720 +v 2.023678 0.731144 -2.382808 +v 1.789580 1.325102 -2.389720 +v 2.023678 0.701760 -3.060652 +v 2.023678 1.295719 -3.067564 +v 1.789580 1.295719 -3.067563 +v 2.023678 1.348897 -3.036856 +v 2.023678 1.355809 -2.442899 +v 1.789580 1.355809 -2.442899 +v 1.229050 1.030662 -2.679246 +v 1.229050 1.030662 -2.779246 +v 1.229050 0.930661 -2.779246 +v 1.979050 1.030661 -2.779245 +v 1.979050 1.030661 -2.679245 +v 1.979050 0.930661 -2.679245 +v 1.229050 0.930661 -2.679246 +v 1.979050 0.930661 -2.779245 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.809306 0.257189 +vt 0.910683 0.300978 +vt 0.909096 0.189316 +vt 0.813439 0.213075 +vt 0.910412 0.212777 +vt 0.809743 0.623328 +vt 0.802385 0.525003 +vt 0.767033 0.617540 +vt 0.879881 0.601532 +vt 0.847297 0.523282 +vt 0.854311 0.617005 +vt 0.759950 0.422158 +vt 0.760018 0.523817 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.035491 0.837783 +vt 0.034640 0.930186 +vt 0.717705 0.625829 +vt 0.644609 0.664429 +vt 0.733319 0.644430 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.879881 0.623132 +vt 0.951706 0.579252 +vt 0.478460 0.803029 +vt 0.500209 0.712612 +vt 0.478430 0.717127 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.526132 0.633686 +vt 0.569142 0.723746 +vt 0.638417 0.647297 +vt 0.613524 0.724631 +vt 0.637757 0.727411 +vt 0.614279 0.633145 +vt 0.526305 0.822962 +vt 0.570116 0.826337 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.528666 0.900853 +vt 0.572592 0.908051 +vt 0.297174 0.516355 +vt 0.317310 0.526612 +vt 0.319506 0.435521 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.954393 0.894658 +vt 0.949424 0.850572 +vt 0.342811 0.434304 +vt 0.296963 0.355991 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.715956 0.387746 +vt 0.759950 0.463023 +vt 0.180286 0.719972 +vt 0.172762 0.815779 +vt 0.178395 0.816963 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.078713 0.832630 +vt 0.079592 0.837849 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.323102 0.798341 +vt 0.330475 0.803455 +vt 0.643343 0.684515 +vt 0.649849 0.688510 +vt 0.314149 0.815081 +vt 0.306193 0.772760 +vt 0.296963 0.773641 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.306170 0.727741 +vt 0.314792 0.700967 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vt 0.513624 0.783997 +vt 0.505969 0.783973 +vt 0.506188 0.712612 +vt 0.949158 0.484385 +vt 0.941584 0.484478 +vt 0.944659 0.410168 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.335156 0.743134 +vt 0.342603 0.674991 +vt 0.334948 0.675014 +vt 0.334704 0.595770 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.521494 0.627793 +vt 0.523482 0.675613 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.530171 0.331957 +vt 0.598820 0.371478 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.000848 0.531055 +vt 0.109074 0.639268 +vt 0.830015 0.623328 +vt 0.837273 0.712605 +vt 0.792389 0.714799 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.455687 0.331872 +vt 0.462495 0.306756 +vt 0.758447 0.693332 +vt 0.757332 0.757109 +vt 0.721737 0.772501 +vt 0.340460 0.815081 +vt 0.340316 0.862012 +vt 0.297072 0.826038 +vt 0.676280 0.688510 +vt 0.674834 0.772357 +vt 0.639684 0.692967 +vt 0.225458 0.066465 +vt 0.158175 0.049709 +vt 0.157773 0.024179 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.872743 0.628628 +vt 0.879661 0.713728 +vt 0.837383 0.811379 +vt 0.792493 0.808950 +vt 0.766009 0.719283 +vt 0.384108 0.290468 +vt 0.402470 0.272035 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.675115 0.819426 +vt 0.638639 0.825588 +vt 0.091518 0.068826 +vt 0.078288 0.046975 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.830315 0.893182 +vt 0.785756 0.886926 +vt 0.760201 0.870015 +vt 0.342811 0.218841 +vt 0.367839 0.211969 +vt 0.758639 0.881416 +vt 0.722613 0.861988 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.020847 0.106443 +vt 0.000874 0.094773 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.410612 0.724746 +vt 0.366797 0.631670 +vt 0.366513 0.724108 +vt 0.343300 0.641815 +vt 0.342862 0.136182 +vt 0.367882 0.142652 +vt 0.880326 0.806458 +vt 0.880176 0.757653 +vt 0.916070 0.738915 +vt 0.651005 0.881416 +vt 0.697339 0.884549 +vt 0.661972 0.937679 +vt 0.963197 0.803150 +vt 0.963001 0.738770 +vt 0.999158 0.806093 +vt 0.026573 0.185955 +vt 0.000842 0.186648 +vt 0.478430 0.642230 +vt 0.478182 0.723178 +vt 0.454713 0.724378 +vt 0.454997 0.631940 +vt 0.410323 0.818844 +vt 0.366238 0.813802 +vt 0.342811 0.801309 +vt 0.384247 0.064640 +vt 0.402587 0.082657 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.962852 0.690423 +vt 0.998802 0.690392 +vt 0.045687 0.252581 +vt 0.023635 0.266097 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.410121 0.884850 +vt 0.366045 0.876721 +vt 0.368574 0.047943 +vt 0.450371 0.000831 +vt 0.455878 0.023384 +vt 0.462656 0.048059 +vt 0.879766 0.623692 +vt 0.915776 0.643196 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.083117 0.323505 +vt 0.071984 0.342642 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.227051 0.730389 +vt 0.184003 0.645063 +vt 0.544788 0.000929 +vt 0.538560 0.023470 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.000842 0.766738 +vt 0.037804 0.750424 +vt 0.941584 0.331962 +vt 0.941398 0.422896 +vt 0.879881 0.422891 +vt 0.090587 0.832202 +vt 0.084243 0.749997 +vt 0.123318 0.828165 +vt 0.162852 0.317479 +vt 0.163350 0.343486 +vt 0.296292 0.658368 +vt 0.295662 0.734429 +vt 0.271432 0.731379 +vt 0.272151 0.644522 +vt 0.228056 0.828732 +vt 0.183284 0.731920 +vt 0.626527 0.048208 +vt 0.610139 0.064873 +vt 0.000978 0.697596 +vt 0.038890 0.702846 +vt 0.085329 0.702418 +vt 0.118564 0.696514 +vt 0.229508 0.298361 +vt 0.242837 0.320688 +vt 0.296500 0.816519 +vt 0.272390 0.825121 +vt 0.230552 0.907946 +vt 0.184242 0.825662 +vt 0.673686 0.130002 +vt 0.651436 0.136500 +vt 0.592019 0.082852 +vt 0.006100 0.640350 +vt 0.041316 0.659523 +vt 0.087755 0.659095 +vt 0.277678 0.248491 +vt 0.300278 0.261221 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.741202 0.192204 +vt 0.785112 0.254285 +vt 0.673628 0.224394 +vt 0.651385 0.219160 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.809649 0.113269 +vt 0.845561 0.100185 +vt 0.183284 0.908088 +vt 0.229724 0.907946 +vt 0.222683 0.963363 +vt 0.892764 0.189172 +vt 0.892491 0.100041 +vt 0.928690 0.180787 +vt 0.294454 0.181233 +vt 0.320282 0.181017 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.741495 0.096636 +vt 0.785595 0.096730 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.609999 0.290702 +vt 0.591902 0.272231 +vt 0.809448 0.047401 +vt 0.845426 0.056510 +vt 0.892357 0.056365 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.673931 0.096282 +vt 0.697396 0.096460 +vt 0.741789 0.000831 +vt 0.785876 0.005407 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.809306 0.001196 +vt 0.845312 0.019129 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.296963 0.616402 +vt 0.332779 0.615853 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.720616 0.271792 +vt 0.709710 0.331848 +vt 0.879860 0.985796 +vt 0.879766 0.894861 +vt 0.940684 0.894960 +vt 0.297236 0.615853 +vt 0.296963 0.526722 +vt 0.332803 0.526612 +vt 0.941258 0.444023 +vt 0.941321 0.534932 +vt 0.879881 0.443788 +vt 0.133383 0.904255 +vt 0.180286 0.904398 +vt 0.143492 0.960751 +vt 0.478430 0.884894 +vt 0.478402 0.975800 +vt 0.417169 0.975757 +vt 0.767744 0.331957 +vt 0.767547 0.267577 +vt 0.803584 0.331848 +vt 0.818505 0.984088 +vt 0.818532 0.893182 +vt 0.879766 0.893225 +vt 0.911101 0.280588 +vt 0.911038 0.189679 +vt 0.972132 0.189316 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.513843 0.712612 +vt 0.478457 0.710220 +vt 0.297106 0.908942 +vt 0.296963 0.862012 +vt 0.340350 0.872968 +vt 0.404092 0.884869 +vt 0.404028 0.975801 +vt 0.342811 0.975783 +vt 0.767547 0.331957 +vt 0.720616 0.331814 +vt 0.756641 0.271902 +vt 0.818894 0.331951 +vt 0.803585 0.331957 +vt 0.803584 0.316653 +vt 0.485203 0.925578 +vt 0.484851 0.810753 +vt 0.500243 0.925532 +vt 0.818889 0.301333 +vt 0.818888 0.316642 +vt 0.803584 0.316647 +vt 0.015117 0.947455 +vt 0.015470 0.832630 +vt 0.026433 0.832663 +vt 0.001191 0.833505 +vt 0.015117 0.832630 +vt 0.014769 0.946257 +vt 0.943226 0.115741 +vt 0.929041 0.115591 +vt 0.928690 0.000831 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.109050 0.343516 +vt 0.188269 0.343486 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.974900 0.222800 -0.003500 +vn 0.196900 0.860400 -0.470000 +vn -0.690900 0.634500 -0.346600 +vn -0.196900 0.860400 -0.470000 +vn 0.192500 0.981200 -0.015600 +vn -0.682300 0.730900 -0.011600 +vn -0.192500 0.981200 -0.015600 +vn 0.196400 0.875600 0.441200 +vn -0.689900 0.646500 0.325800 +vn -0.196400 0.875600 0.441200 +vn 0.205500 0.539600 0.816400 +vn -0.706800 0.390000 0.590100 +vn -0.205500 0.539600 0.816400 +vn 0.210900 0.018800 0.977300 +vn -0.716300 0.013400 0.697600 +vn -0.210900 0.018800 0.977300 +vn -0.194900 -0.851900 0.486100 +vn 0.687100 -0.631000 0.360100 +vn 0.194900 -0.851900 0.486100 +vn -0.192500 -0.981200 0.016300 +vn 0.682300 -0.730900 0.012100 +vn 0.192500 -0.981200 0.016300 +vn -0.194600 -0.867900 -0.456900 +vn 0.686600 -0.643400 -0.338700 +vn 0.194600 -0.867900 -0.456900 +vn -0.199500 -0.523900 -0.828100 +vn 0.695800 -0.384000 -0.606900 +vn 0.199500 -0.523900 -0.828100 +vn -0.202200 -0.018000 -0.979200 +vn 0.700900 -0.013100 -0.713100 +vn 0.202200 -0.018000 -0.979200 +vn -0.983300 -0.100300 -0.151700 +vn -0.974800 -0.223000 0.003500 +vn 0.986700 0.089600 0.135500 +vn -0.991300 -0.115500 0.063100 +vn -0.146700 -0.864400 0.480900 +vn 0.989900 0.002700 0.141700 +vn -0.967500 -0.225800 -0.113800 +vn 0.992100 0.109800 -0.060000 +vn -0.559600 -0.739100 0.375100 +vn 0.152200 -0.846200 0.510600 +vn -0.059000 -0.903000 -0.425700 +vn 0.985800 0.148500 0.078200 +vn 0.056600 -0.898100 -0.436200 +vn 0.230400 -0.860600 -0.454100 +vn -0.985800 -0.003200 -0.167600 +vn 0.974000 0.226500 -0.003800 +vn -0.990500 -0.073500 -0.116200 +vn -0.974100 -0.226300 0.003800 +vn 0.992500 0.065200 0.103100 +vn -0.985600 -0.146700 0.083700 +vn -0.146300 -0.851500 0.503500 +vn 0.990100 0.002600 0.140100 +vn -0.983900 -0.158200 -0.083300 +vn 0.986400 0.142900 -0.081500 +vn -0.576100 -0.702900 0.417100 +vn 0.151600 -0.831800 0.533900 +vn -0.059000 -0.896700 -0.438700 +vn 0.056600 -0.891500 -0.449400 +vn 0.208300 -0.845800 -0.491200 +vn -0.986200 -0.003000 -0.165700 +vn 0.969500 0.219000 0.110400 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn -1.000000 0.000000 0.000000 +vn 0.192500 -0.981200 0.017100 +vn 0.682300 -0.730900 0.012800 +vn 0.950400 0.310900 -0.005400 +vn 0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn -0.407500 0.913100 -0.010600 +vn -0.950400 0.310900 -0.005400 +vn -0.682300 -0.730900 0.012800 +vn -0.192500 -0.981200 0.017100 +vn 0.192500 -0.858300 -0.475700 +vn 0.682300 -0.639400 -0.354400 +vn 0.950400 0.272000 0.150800 +vn 0.252600 0.846200 0.469100 +vn 0.000000 0.797500 0.603300 +vn -0.421400 0.723300 0.547100 +vn -0.950400 0.272000 0.150800 +vn -0.682300 -0.639400 -0.354400 +vn -0.192500 -0.858300 -0.475700 +vn 0.192500 -0.505400 -0.841100 +vn 0.682300 -0.376500 -0.626600 +vn 0.950400 0.160200 0.266600 +vn 0.215700 0.502900 0.837000 +vn 0.000000 0.657000 0.753900 +vn -0.422700 0.595500 0.683200 +vn -0.950400 0.160200 0.266600 +vn -0.682300 -0.376500 -0.626600 +vn -0.192500 -0.505400 -0.841100 +vn 0.192500 -0.017100 -0.981200 +vn 0.682300 -0.012800 -0.730900 +vn 0.950400 0.005400 0.310900 +vn 0.417200 0.015900 0.908700 +vn 0.000000 -0.999900 0.011600 +vn -0.407500 0.010600 0.913100 +vn -0.950400 0.005400 0.310900 +vn -0.682300 -0.012800 -0.730900 +vn -0.192500 -0.017100 -0.981200 +vn 0.192500 0.475700 -0.858300 +vn 0.682300 0.354400 -0.639400 +vn 0.950400 -0.150800 0.272000 +vn 0.252600 -0.469100 0.846200 +vn 0.000000 -0.603300 0.797500 +vn -0.421400 -0.547100 0.723300 +vn -0.950400 -0.150800 0.272000 +vn -0.682300 0.354400 -0.639400 +vn -0.192500 0.475700 -0.858300 +vn 0.192500 0.841100 -0.505400 +vn 0.682300 0.626600 -0.376500 +vn 0.950400 -0.266600 0.160200 +vn 0.215700 -0.837000 0.502900 +vn 0.000000 -0.753900 0.657000 +vn -0.422700 -0.683200 0.595500 +vn -0.950400 -0.266600 0.160200 +vn -0.682300 0.626600 -0.376500 +vn -0.192500 0.841100 -0.505400 +vn 0.192500 0.981200 -0.017100 +vn 0.682300 0.730900 -0.012800 +vn 0.950400 -0.310900 0.005400 +vn 0.417200 -0.908700 0.015900 +vn -0.984000 -0.178200 0.002100 +vn -0.407500 -0.913100 0.010600 +vn -0.950400 -0.310900 0.005400 +vn -0.682300 0.730900 -0.012800 +vn -0.192500 0.981200 -0.017100 +vn 0.192500 0.858300 0.475700 +vn 0.682300 0.639400 0.354400 +vn 0.950400 -0.272000 -0.150800 +vn 0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn -0.421400 -0.723300 -0.547100 +vn -0.950400 -0.272000 -0.150800 +vn -0.682300 0.639400 0.354400 +vn -0.192500 0.858300 0.475700 +vn 0.192500 0.505400 0.841100 +vn 0.682300 0.376500 0.626600 +vn 0.950400 -0.160200 -0.266600 +vn 0.215700 -0.502900 -0.837000 +vn -0.000000 -0.657000 -0.753900 +vn -0.422700 -0.595500 -0.683200 +vn -0.950400 -0.160200 -0.266600 +vn -0.682300 0.376500 0.626600 +vn -0.192500 0.505400 0.841100 +vn 0.192500 0.017100 0.981200 +vn 0.682300 0.012800 0.730900 +vn 0.950400 -0.005400 -0.310900 +vn 0.417200 -0.015900 -0.908700 +vn -0.407500 -0.010600 -0.913100 +vn -0.950400 -0.005400 -0.310900 +vn -0.682300 0.012800 0.730900 +vn -0.192500 0.017100 0.981200 +vn 0.192500 -0.475700 0.858300 +vn 0.682300 -0.354400 0.639400 +vn 0.950400 0.150800 -0.272000 +vn 0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn -0.421400 0.547100 -0.723300 +vn -0.950400 0.150800 -0.272000 +vn -0.682300 -0.354400 0.639400 +vn -0.192500 -0.475700 0.858300 +vn 0.192500 -0.841100 0.505400 +vn 0.682300 -0.626600 0.376500 +vn 0.950400 0.266600 -0.160200 +vn 0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn -0.422700 0.683200 -0.595500 +vn -0.950400 0.266600 -0.160200 +vn -0.682300 -0.626600 0.376500 +vn -0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn -0.984000 0.178200 -0.002100 +vn -0.984000 -0.002100 -0.178200 +vn -0.984000 0.002100 0.178200 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.407500 0.913100 -0.010600 +vn -0.417200 0.908700 -0.015900 +vn 0.421400 0.723300 0.547100 +vn -0.252600 0.846200 0.469100 +vn 0.422700 0.595500 0.683200 +vn -0.215700 0.502900 0.837000 +vn 0.407500 0.010600 0.913100 +vn -0.417200 0.015900 0.908700 +vn 0.421400 -0.547100 0.723300 +vn -0.252600 -0.469100 0.846200 +vn 0.422700 -0.683200 0.595500 +vn -0.215700 -0.837000 0.502900 +vn 0.407500 -0.913100 0.010600 +vn -0.417200 -0.908700 0.015900 +vn 0.421400 -0.723300 -0.547100 +vn -0.252600 -0.846200 -0.469100 +vn 0.422700 -0.595500 -0.683200 +vn -0.215700 -0.502900 -0.837000 +vn 0.407500 -0.010600 -0.913100 +vn -0.417200 -0.015900 -0.908700 +vn 0.421400 0.547100 -0.723300 +vn -0.252600 0.469100 -0.846200 +vn 0.422700 0.683200 -0.595500 +vn -0.215700 0.837000 -0.502900 +usemtl None.001 +f 1/1/1 3/2/1 2/3/1 +f 4/4/2 6/5/2 5/6/2 +f 7/7/3 9/8/3 8/9/3 +f 8/9/4 6/5/4 4/4/4 +f 6/10/5 11/11/5 10/12/5 +f 12/13/6 13/14/6 9/15/6 +f 9/15/7 11/11/7 6/10/7 +f 11/11/8 15/16/8 14/17/8 +f 16/18/9 17/19/9 13/14/9 +f 13/14/10 18/20/10 11/11/10 +f 19/21/11 20/22/11 15/16/11 +f 17/19/12 21/23/12 18/20/12 +f 18/20/13 22/24/13 19/21/13 +f 23/25/14 24/26/14 20/27/14 +f 21/28/15 25/29/15 22/30/15 +f 22/31/16 26/32/16 23/25/16 +f 27/33/17 29/34/17 28/35/17 +f 30/36/18 32/37/18 31/38/18 +f 33/39/19 28/35/19 32/40/19 +f 28/41/20 35/42/20 34/43/20 +f 31/44/21 37/45/21 36/46/21 +f 32/47/22 34/43/22 37/45/22 +f 34/43/23 39/48/23 38/49/23 +f 36/46/24 37/45/24 40/50/24 +f 37/45/25 34/43/25 41/51/25 +f 38/49/26 43/52/26 42/53/26 +f 40/54/27 41/55/27 44/56/27 +f 41/51/28 38/49/28 45/57/28 +f 42/58/29 47/59/29 46/60/29 +f 44/56/30 45/61/30 48/62/30 +f 45/63/31 42/58/31 49/64/31 +f 17/65/32 40/66/32 21/28/32 +f 12/67/33 31/68/33 16/69/33 +f 20/70/34 39/71/34 15/72/34 +f 7/73/35 30/74/35 12/67/35 +f 26/32/36 46/75/36 50/76/36 +f 24/77/37 43/78/37 20/70/37 +f 16/69/38 36/79/38 17/65/38 +f 10/80/39 29/81/39 5/82/39 +f 25/29/40 49/83/40 26/84/40 +f 50/76/41 46/75/41 24/26/41 +f 5/85/42 27/86/42 4/87/42 +f 39/71/43 51/88/43 15/72/43 +f 4/87/44 27/86/44 8/89/44 +f 8/89/45 33/90/45 7/91/45 +f 21/28/46 44/92/46 25/29/46 +f 52/93/47 3/2/47 1/1/47 +f 5/6/2 6/5/2 10/94/2 +f 12/95/3 9/8/3 7/7/3 +f 9/8/4 6/5/4 8/9/4 +f 10/12/5 11/11/5 14/17/5 +f 16/18/6 13/14/6 12/13/6 +f 13/14/7 11/11/7 9/15/7 +f 19/21/8 15/16/8 11/11/8 +f 13/14/9 17/19/9 18/20/9 +f 11/11/10 18/20/10 19/21/10 +f 23/96/11 20/22/11 19/21/11 +f 18/20/12 21/23/12 22/24/12 +f 19/21/13 22/24/13 23/96/13 +f 50/76/14 24/26/14 23/25/14 +f 22/30/15 25/29/15 26/84/15 +f 23/25/16 26/32/16 50/76/16 +f 28/35/17 29/34/17 35/97/17 +f 33/98/18 32/37/18 30/36/18 +f 27/33/19 28/35/19 33/39/19 +f 34/43/20 35/42/20 51/99/20 +f 32/47/21 37/45/21 31/44/21 +f 28/41/22 34/43/22 32/47/22 +f 51/99/23 39/48/23 34/43/23 +f 40/50/24 37/45/24 41/51/24 +f 41/51/25 34/43/25 38/49/25 +f 39/48/26 43/52/26 38/49/26 +f 44/56/27 41/55/27 45/61/27 +f 45/57/28 38/49/28 42/53/28 +f 43/100/29 47/59/29 42/58/29 +f 48/62/30 45/61/30 49/101/30 +f 49/64/31 42/58/31 46/60/31 +f 21/28/48 40/66/48 44/92/48 +f 16/69/49 31/68/49 36/79/49 +f 43/78/50 39/71/50 20/70/50 +f 12/67/51 30/74/51 31/68/51 +f 49/102/52 46/75/52 26/32/52 +f 47/103/53 43/78/53 24/77/53 +f 17/65/54 36/79/54 40/66/54 +f 35/104/55 29/81/55 10/80/55 +f 48/105/56 49/83/56 25/29/56 +f 24/26/57 46/75/57 47/106/57 +f 29/107/58 27/86/58 5/85/58 +f 8/89/59 27/86/59 33/90/59 +f 7/91/60 33/90/60 30/108/60 +f 25/29/61 44/92/61 48/105/61 +f 15/72/62 51/88/62 14/109/62 +f 53/110/63 54/111/63 55/112/63 +f 56/113/64 55/114/64 57/115/64 +f 58/116/65 57/115/65 59/117/65 +f 60/118/66 59/119/66 61/120/66 +f 61/120/67 62/121/67 63/122/67 +f 64/123/68 63/122/68 65/124/68 +f 65/125/69 66/126/69 67/127/69 +f 68/128/70 67/127/70 69/129/70 +f 70/130/71 69/129/71 71/131/71 +f 72/132/72 71/131/72 73/133/72 +f 55/134/73 54/135/73 74/136/73 +f 75/137/74 74/138/74 53/110/74 +f 76/139/75 73/140/75 74/138/75 +f 53/141/76 56/142/76 75/143/76 +f 77/144/77 78/145/77 79/146/77 +f 80/147/78 79/146/78 81/148/78 +f 81/149/79 82/150/79 83/151/79 +f 84/152/80 83/153/80 85/154/80 +f 86/155/81 87/156/81 88/157/81 +f 86/158/82 89/159/82 90/160/82 +f 90/161/83 91/162/83 92/163/83 +f 93/164/84 92/163/84 94/165/84 +f 77/144/85 94/166/85 95/167/85 +f 78/145/86 96/168/86 97/169/86 +f 79/146/87 97/169/87 82/170/87 +f 82/150/88 98/171/88 99/172/88 +f 83/153/89 99/173/89 85/154/89 +f 85/154/90 100/174/90 89/159/90 +f 89/159/91 101/175/91 102/176/91 +f 91/162/92 102/177/92 103/178/92 +f 92/163/93 103/178/93 104/179/93 +f 95/167/94 104/180/94 78/145/94 +f 96/168/95 105/181/95 106/182/95 +f 97/169/96 106/182/96 107/183/96 +f 98/171/97 107/184/97 108/185/97 +f 99/173/98 108/186/98 109/187/98 +f 100/174/99 109/187/99 101/175/99 +f 101/175/100 110/188/100 102/176/100 +f 102/177/101 111/189/101 103/178/101 +f 103/178/102 112/190/102 113/191/102 +f 104/180/103 113/192/103 105/181/103 +f 105/193/104 114/194/104 106/195/104 +f 106/195/105 115/196/105 107/197/105 +f 107/184/106 116/198/106 117/199/106 +f 108/200/107 117/201/107 118/202/107 +f 110/203/108 109/204/108 119/205/108 +f 110/206/109 120/207/109 111/208/109 +f 111/189/110 121/209/110 122/210/110 +f 112/211/111 122/212/111 123/213/111 +f 113/214/112 123/213/112 114/194/112 +f 114/194/113 124/215/113 125/216/113 +f 115/196/114 125/216/114 126/217/114 +f 116/198/115 126/218/115 127/219/115 +f 117/201/116 127/220/116 118/202/116 +f 118/202/117 128/221/117 120/207/117 +f 120/207/118 129/222/118 130/223/118 +f 121/209/119 130/224/119 131/225/119 +f 122/212/120 131/226/120 123/213/120 +f 123/213/121 132/227/121 124/215/121 +f 124/215/122 133/228/122 134/229/122 +f 125/230/123 134/231/123 135/232/123 +f 126/218/124 135/232/124 136/233/124 +f 127/220/125 136/234/125 137/235/125 +f 128/221/126 137/235/126 129/222/126 +f 129/222/127 138/236/127 130/223/127 +f 130/224/128 139/237/128 131/225/128 +f 131/225/129 140/238/129 141/239/129 +f 132/227/130 141/240/130 124/215/130 +f 133/241/131 142/242/131 134/243/131 +f 134/231/132 143/244/132 144/245/132 +f 135/232/133 144/245/133 145/246/133 +f 136/247/134 145/248/134 146/249/134 +f 147/250/135 138/251/135 148/252/135 +f 138/253/136 147/254/136 139/255/136 +f 139/237/137 149/256/137 150/257/137 +f 140/258/138 150/259/138 151/260/138 +f 141/261/139 151/260/139 142/242/139 +f 142/242/140 152/262/140 143/263/140 +f 143/244/141 153/264/141 154/265/141 +f 144/245/142 154/265/142 145/246/142 +f 145/248/143 155/266/143 146/249/143 +f 146/249/144 156/267/144 157/268/144 +f 147/254/145 157/268/145 158/269/145 +f 149/256/146 158/270/146 159/271/146 +f 150/259/147 159/272/147 160/273/147 +f 151/260/148 160/273/148 152/262/148 +f 152/262/149 161/274/149 153/275/149 +f 153/264/150 162/276/150 154/265/150 +f 154/265/151 163/277/151 155/278/151 +f 155/266/152 164/279/152 165/280/152 +f 156/267/153 165/280/153 166/281/153 +f 157/268/154 166/281/154 158/269/154 +f 158/270/155 167/282/155 168/283/155 +f 159/271/156 168/283/156 169/284/156 +f 160/273/157 169/285/157 152/262/157 +f 161/286/158 170/287/158 162/288/158 +f 162/276/159 171/289/159 172/290/159 +f 163/277/160 172/290/160 173/291/160 +f 164/292/161 173/293/161 174/294/161 +f 174/295/108 175/296/108 176/297/108 +f 166/298/162 175/299/162 167/300/162 +f 167/282/163 177/301/163 178/302/163 +f 168/283/164 178/302/164 169/284/164 +f 169/303/165 179/304/165 170/287/165 +f 170/287/166 180/305/166 181/306/166 +f 171/307/167 181/306/167 182/308/167 +f 172/290/168 182/309/168 183/310/168 +f 173/293/169 183/311/169 174/294/169 +f 174/294/170 184/312/170 185/313/170 +f 175/299/171 185/313/171 186/314/171 +f 177/301/172 186/315/172 178/302/172 +f 178/316/173 187/317/173 188/318/173 +f 179/304/174 188/318/174 180/305/174 +f 180/305/175 77/319/175 80/320/175 +f 181/306/176 80/320/176 81/321/176 +f 182/309/177 81/149/177 84/322/177 +f 183/311/178 84/323/178 87/324/178 +f 184/312/179 87/324/179 86/325/179 +f 185/313/180 86/325/180 186/314/180 +f 186/315/181 90/161/181 93/164/181 +f 187/317/182 93/326/182 188/318/182 +f 188/318/183 94/327/183 77/319/183 +f 189/328/184 190/329/184 191/330/184 +f 87/331/73 85/332/73 190/186/73 +f 85/333/185 89/334/185 191/335/185 +f 89/336/186 86/337/186 88/338/186 +f 192/339/185 193/340/185 176/341/185 +f 175/342/187 166/343/187 176/344/187 +f 166/345/184 165/346/184 194/347/184 +f 165/348/73 174/349/73 193/350/73 +f 195/351/81 196/352/81 119/353/81 +f 109/354/73 118/355/73 196/356/73 +f 120/357/188 110/358/188 119/359/188 +f 118/360/184 120/355/184 197/361/184 +f 198/362/108 199/363/108 200/364/108 +f 146/365/81 147/366/81 200/367/81 +f 137/368/73 146/369/73 199/370/73 +f 138/371/185 137/372/185 148/373/185 +f 201/374/76 202/375/76 203/376/76 +f 202/377/189 204/378/189 203/379/189 +f 204/380/73 205/381/73 206/382/73 +f 205/383/190 201/384/190 207/385/190 +f 207/386/191 203/387/191 208/388/191 +f 205/389/192 204/390/192 202/391/192 +f 152/262/140 153/275/140 143/263/140 +f 56/363/63 53/110/63 55/112/63 +f 58/116/64 56/113/64 57/115/64 +f 60/392/65 58/116/65 59/117/65 +f 74/138/74 54/111/74 53/110/74 +f 64/123/67 61/120/67 63/122/67 +f 204/378/189 208/393/189 203/379/189 +f 68/128/69 65/125/69 67/127/69 +f 70/130/70 68/128/70 69/129/70 +f 72/132/71 70/130/71 71/131/71 +f 76/394/72 72/132/72 73/133/72 +f 55/134/73 74/136/73 73/395/73 +f 55/134/73 73/395/73 71/396/73 +f 57/397/73 55/134/73 71/396/73 +f 57/397/73 71/396/73 69/398/73 +f 59/399/73 57/397/73 62/400/73 +f 57/397/73 69/398/73 62/400/73 +f 62/400/73 69/398/73 63/401/73 +f 69/398/73 67/402/73 63/401/73 +f 100/174/90 101/175/90 89/159/90 +f 75/137/75 76/139/75 74/138/75 +f 76/403/76 75/143/76 72/404/76 +f 186/315/172 187/405/172 178/302/172 +f 56/142/76 58/406/76 72/404/76 +f 72/404/76 58/406/76 70/407/76 +f 58/406/76 60/408/76 70/407/76 +f 60/408/76 61/409/76 64/410/76 +f 70/407/76 60/408/76 64/410/76 +f 68/411/76 70/407/76 64/410/76 +f 65/412/76 68/411/76 64/410/76 +f 80/147/77 77/144/77 79/146/77 +f 114/194/104 115/196/104 106/195/104 +f 84/322/79 81/149/79 83/151/79 +f 87/413/193 84/152/193 85/154/193 +f 87/156/81 189/414/81 88/157/81 +f 89/159/194 91/415/194 90/160/194 +f 93/164/83 90/161/83 92/163/83 +f 111/189/101 112/190/101 103/178/101 +f 78/145/85 77/144/85 95/167/85 +f 79/146/86 78/145/86 97/169/86 +f 139/237/128 140/238/128 131/225/128 +f 83/151/88 82/150/88 99/172/88 +f 99/173/195 100/174/195 85/154/195 +f 142/242/131 143/263/131 134/243/131 +f 91/415/196 89/159/196 102/176/196 +f 92/163/92 91/162/92 103/178/92 +f 95/416/93 92/163/93 104/179/93 +f 161/274/149 162/417/149 153/275/149 +f 97/169/95 96/168/95 106/182/95 +f 98/418/96 97/169/96 107/183/96 +f 99/172/97 98/171/97 108/185/97 +f 100/174/197 99/173/197 109/187/197 +f 63/122/68 66/419/68 65/124/68 +f 110/188/198 111/420/198 102/176/198 +f 170/287/158 171/307/158 162/288/158 +f 104/179/102 103/178/102 113/191/102 +f 96/168/103 104/180/103 105/181/103 +f 104/180/94 96/168/94 78/145/94 +f 79/146/78 82/170/78 81/148/78 +f 108/185/106 107/184/106 117/199/106 +f 109/421/199 108/200/199 118/202/199 +f 109/204/108 195/422/108 119/205/108 +f 120/207/200 121/423/200 111/208/200 +f 112/190/110 111/189/110 122/210/110 +f 113/214/111 112/211/111 123/213/111 +f 105/193/112 113/214/112 114/194/112 +f 115/196/113 114/194/113 125/216/113 +f 116/424/114 115/196/114 126/217/114 +f 117/199/115 116/198/115 127/219/115 +f 127/220/201 128/221/201 118/202/201 +f 92/163/84 95/416/84 94/165/84 +f 121/423/202 120/207/202 130/223/202 +f 122/210/119 121/209/119 131/225/119 +f 67/402/73 66/425/73 63/401/73 +f 114/194/121 123/213/121 124/215/121 +f 125/216/122 124/215/122 134/229/122 +f 126/218/123 125/230/123 135/232/123 +f 127/219/124 126/218/124 136/233/124 +f 128/221/203 127/220/203 137/235/203 +f 93/326/182 94/327/182 188/318/182 +f 138/236/204 139/426/204 130/223/204 +f 166/343/187 194/427/187 176/344/187 +f 132/428/129 131/225/129 141/239/129 +f 169/285/157 161/274/157 152/262/157 +f 97/169/87 98/418/87 82/170/87 +f 135/232/132 134/231/132 144/245/132 +f 136/233/133 135/232/133 145/246/133 +f 137/429/205 136/247/205 146/249/205 +f 200/430/135 147/250/135 148/252/135 +f 147/254/206 149/431/206 139/255/206 +f 140/238/137 139/237/137 150/257/137 +f 141/261/138 140/258/138 151/260/138 +f 133/241/139 141/261/139 142/242/139 +f 131/226/120 132/227/120 123/213/120 +f 144/245/141 143/244/141 154/265/141 +f 154/265/142 155/278/142 145/246/142 +f 155/266/207 156/267/207 146/249/207 +f 147/254/144 146/249/144 157/268/144 +f 149/431/208 147/254/208 158/269/208 +f 150/257/146 149/256/146 159/271/146 +f 151/260/147 150/259/147 160/273/147 +f 142/242/148 151/260/148 152/262/148 +f 109/187/99 110/188/99 101/175/99 +f 115/196/105 116/424/105 107/197/105 +f 178/302/164 179/432/164 169/284/164 +f 156/267/209 155/266/209 165/280/209 +f 157/268/153 156/267/153 166/281/153 +f 166/281/210 167/433/210 158/269/210 +f 159/271/155 158/270/155 168/283/155 +f 160/434/156 159/271/156 169/284/156 +f 137/235/126 138/236/126 129/222/126 +f 162/276/150 163/277/150 154/265/150 +f 163/277/159 162/276/159 172/290/159 +f 164/435/160 163/277/160 173/291/160 +f 165/436/211 164/292/211 174/294/211 +f 193/437/108 174/295/108 176/297/108 +f 175/299/212 177/438/212 167/300/212 +f 168/283/163 167/282/163 178/302/163 +f 141/240/130 133/228/130 124/215/130 +f 161/286/165 169/303/165 170/287/165 +f 171/307/166 170/287/166 181/306/166 +f 172/439/167 171/307/167 182/308/167 +f 173/291/168 172/290/168 183/310/168 +f 183/311/213 184/312/213 174/294/213 +f 175/299/170 174/294/170 185/313/170 +f 177/438/214 175/299/214 186/314/214 +f 163/277/151 164/435/151 155/278/151 +f 179/304/173 178/316/173 188/318/173 +f 170/287/174 179/304/174 180/305/174 +f 181/306/175 180/305/175 80/320/175 +f 182/308/176 181/306/176 81/321/176 +f 183/310/177 182/309/177 84/322/177 +f 184/312/215 183/311/215 87/324/215 +f 185/313/179 184/312/179 86/325/179 +f 86/325/216 90/440/216 186/314/216 +f 187/405/181 186/315/181 93/164/181 +f 196/352/81 197/441/81 119/353/81 +f 180/305/183 188/318/183 77/319/183 +f 88/442/184 189/328/184 191/330/184 +f 189/443/73 87/331/73 190/186/73 +f 190/444/185 85/333/185 191/335/185 +f 191/445/186 89/336/186 88/338/186 +f 194/446/185 192/339/185 176/341/185 +f 75/143/76 56/142/76 72/404/76 +f 165/346/184 192/447/184 194/347/184 +f 192/448/73 165/348/73 193/350/73 +f 128/221/117 129/222/117 120/207/117 +f 195/449/73 109/354/73 196/356/73 +f 197/450/188 120/357/188 119/359/188 +f 196/451/184 118/360/184 197/361/184 +f 148/452/108 198/362/108 200/364/108 +f 199/453/81 146/365/81 200/367/81 +f 198/454/73 137/368/73 199/370/73 +f 137/372/185 198/455/185 148/373/185 +f 207/381/76 201/374/76 203/376/76 +f 59/119/66 62/121/66 61/120/66 +f 208/456/73 204/380/73 206/382/73 +f 206/457/190 205/383/190 207/385/190 +f 206/458/191 207/386/191 208/388/191 +f 201/459/192 205/389/192 202/391/192 +o CargoMid +v -0.602109 3.364694 3.769022 +v -0.602109 3.364695 2.453471 +v -0.602109 1.054079 2.453471 +v 0.602109 3.364695 2.453471 +v 0.602109 1.054079 2.453471 +v 0.602109 3.364694 3.769022 +v 0.602109 1.054078 3.769021 +v -0.602109 1.054078 3.769021 +vt 0.666123 0.332861 +vt 0.334894 0.333877 +vt 0.333877 0.002647 +vt 0.002648 0.333877 +vt 0.001632 0.002648 +vt 0.332861 0.001632 +vt 0.333877 0.665106 +vt 0.002647 0.666123 +vt 0.001632 0.334894 +vt 0.334894 0.666123 +vt 0.333877 0.334894 +vt 0.665106 0.333877 +vt 0.998368 0.332861 +vt 0.667139 0.333877 +vt 0.666123 0.002647 +vt 0.333877 0.667139 +vt 0.665106 0.666123 +vt 0.666123 0.997352 +vt 0.665106 0.001632 +vt 0.333877 0.332861 +vt 0.332861 0.333877 +vt 0.666123 0.665106 +vt 0.997352 0.001632 +vt 0.334894 0.998368 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 209/460/217 210/461/217 211/462/217 +f 210/463/218 212/464/218 213/465/218 +f 212/466/219 214/467/219 215/468/219 +f 214/469/220 209/470/220 216/471/220 +f 216/472/221 211/473/221 213/474/221 +f 214/475/222 212/476/222 210/477/222 +f 216/478/217 209/460/217 211/462/217 +f 211/479/218 210/463/218 213/465/218 +f 213/480/219 212/466/219 215/468/219 +f 215/481/220 214/469/220 216/471/220 +f 215/482/221 216/472/221 213/474/221 +f 209/483/222 214/475/222 210/477/222 +o MainBody +v 1.960505 0.121789 0.032559 +v 1.960505 0.121789 -0.032557 +v 1.960505 0.035004 -0.032557 +v 2.025620 0.035004 -0.032557 +v 2.025620 0.121789 -0.032557 +v 2.025620 0.035004 0.032559 +v 2.025620 0.121789 0.032559 +v 2.025620 0.121790 1.083552 +v 1.960505 0.035004 0.032559 +v 2.025620 0.902858 0.032558 +v 1.960505 0.902858 -0.032557 +v 2.025620 0.902858 -0.032557 +v 1.960505 0.121790 1.148667 +v 1.960505 0.121790 1.083552 +v 1.960505 0.035004 1.083552 +v 2.025620 0.035004 1.148667 +v 2.025620 0.121790 1.148667 +v 1.960505 0.035004 1.148667 +v 2.025620 0.035004 1.083552 +v 2.025620 0.902858 1.148667 +v 1.960505 0.902858 1.083552 +v 2.025620 0.902858 1.083552 +v 1.960505 0.496703 1.148667 +v 1.960505 0.496703 1.083552 +v 2.025620 0.496702 1.083552 +v 2.025620 0.496702 1.148667 +v 1.960505 0.496702 0.032559 +v 1.960505 0.496702 -0.032557 +v 2.025620 0.496702 -0.032557 +v 2.025620 0.496702 0.032559 +v 1.960505 0.902858 0.032558 +v 1.960505 0.590431 -0.032557 +v 2.025620 0.590431 -0.032557 +v 2.025620 0.590431 0.032558 +v 1.960505 0.590431 0.032558 +v 1.960505 0.902858 1.148667 +v 1.960505 0.590431 1.083552 +v 2.025620 0.590431 1.083552 +v 2.025620 0.590431 1.148667 +v 1.960505 0.590431 1.148667 +v -1.135648 4.236131 -2.439156 +v -1.135648 0.944072 -2.349645 +v -1.135648 0.944072 -2.439157 +v -1.135648 4.236131 -2.349644 +v -1.225160 0.944072 -2.349645 +v -1.225160 4.236131 -2.349644 +v -1.225160 0.944072 -2.439157 +v -1.225160 4.236131 -2.439156 +v -0.984018 1.417435 -1.140142 +v -0.984018 0.990447 -2.542124 +v -0.984018 0.990447 -1.140142 +v -0.984018 1.417435 -2.542124 +v 0.984019 0.990446 -2.542124 +v 0.984019 1.417434 -2.542124 +v 0.984019 0.990446 -1.140142 +v 0.984019 1.417434 -1.140142 +v -1.000000 1.444865 1.836146 +v -1.000000 1.054287 -0.163853 +v -1.000000 1.054287 1.836147 +v -1.000000 1.444865 -0.163853 +v 1.000000 1.444865 -0.163853 +v 1.000000 1.054287 1.836147 +v 1.000000 1.054287 -0.163853 +v 1.000000 1.444865 1.836147 +v -1.401982 1.100000 -1.534202 +v -1.401982 0.900000 -2.803965 +v -1.401982 0.900000 -1.534202 +v -1.401982 1.100001 -2.803965 +v 1.401982 1.099999 -2.803964 +v 2.000000 1.099999 -0.319406 +v 2.000000 0.899998 4.000001 +v 2.000000 0.899999 -0.319406 +v 2.000000 1.099998 4.000001 +v -2.000000 0.899999 4.000000 +v 1.401982 0.899999 -2.803964 +v 1.401982 0.899999 -1.534201 +v 1.401982 1.099999 -1.534201 +v -0.980572 3.493236 2.036421 +v -0.980572 1.122929 1.618471 +v -0.980572 3.424315 2.427284 +v 0.980572 1.122929 1.618472 +v -0.980572 1.054009 2.009334 +v 0.980572 3.424315 2.427284 +v 0.980572 1.054009 2.009335 +v 0.980572 3.493235 2.036421 +v -0.742343 4.377108 1.957737 +v -0.742343 3.422644 1.939661 +v -0.742343 4.367644 2.457409 +v 0.742344 3.422644 1.939662 +v -0.742343 3.413181 2.439332 +v 0.742344 4.367644 2.457409 +v 0.742344 3.413181 2.439332 +v 0.742344 4.377108 1.957738 +v -0.551987 1.338115 -2.478072 +v -0.551987 1.028879 -3.436547 +v -0.551987 1.028879 -2.478072 +v -0.551987 1.338116 -3.436547 +v 0.551987 1.338116 -3.436547 +v 0.551987 1.028878 -2.478072 +v 0.551987 1.028879 -3.436547 +v 0.551987 1.338115 -2.478072 +v -2.033444 0.121790 0.032558 +v -2.033444 0.121790 -0.032558 +v -2.033444 0.035005 -0.032558 +v -1.968328 0.035005 -0.032558 +v -1.968328 0.121790 -0.032558 +v -1.968328 0.035005 0.032558 +v -1.968328 0.121790 0.032558 +v -1.968328 0.121790 1.083551 +v -2.033444 0.035005 0.032558 +v -1.968328 0.902859 0.032558 +v -2.033444 0.902859 -0.032558 +v -1.968328 0.902859 -0.032558 +v -2.033444 0.121790 1.148666 +v -2.033444 0.121790 1.083551 +v -2.033444 0.035005 1.083551 +v -1.968328 0.035005 1.148666 +v -1.968328 0.121790 1.148666 +v -2.033444 0.035005 1.148666 +v -1.968328 0.035005 1.083551 +v -1.968328 0.902859 1.148666 +v -2.033444 0.902859 1.083551 +v -1.968328 0.902859 1.083551 +v -2.033444 0.496704 1.148666 +v -2.033444 0.496704 1.083551 +v -1.968328 0.496703 1.083551 +v -1.968328 0.496703 1.148666 +v -2.033444 0.496703 0.032558 +v -2.033444 0.496703 -0.032558 +v -1.968328 0.496703 -0.032558 +v -1.968328 0.496703 0.032558 +v -2.033444 0.902859 0.032558 +v -2.033444 0.590432 -0.032558 +v -1.968328 0.590432 -0.032558 +v -1.968328 0.590432 0.032558 +v -2.033444 0.590432 0.032558 +v -2.033444 0.902859 1.148666 +v -2.033444 0.590432 1.083551 +v -1.968328 0.590432 1.083551 +v -1.968328 0.590432 1.148666 +v -2.033444 0.590432 1.148666 +v -2.000000 1.099999 4.000000 +v -2.000000 0.900000 -0.319407 +v -2.000000 1.100000 -0.319407 +vt 0.831442 0.264770 +vt 0.826945 0.264756 +vt 0.826977 0.254323 +vt 0.735286 0.852961 +vt 0.730822 0.842513 +vt 0.730790 0.852947 +vt 0.474443 0.758477 +vt 0.469914 0.748058 +vt 0.469946 0.758491 +vt 0.896324 0.374080 +vt 0.891605 0.446544 +vt 0.896102 0.446558 +vt 0.882155 0.369590 +vt 0.886638 0.365085 +vt 0.882141 0.365099 +vt 0.779149 0.031014 +vt 0.774666 0.026509 +vt 0.774652 0.031000 +vt 0.908518 0.265003 +vt 0.904022 0.264989 +vt 0.904054 0.254556 +vt 0.831474 0.254337 +vt 0.397366 0.758713 +vt 0.392837 0.748294 +vt 0.392869 0.758727 +vt 0.750092 0.852961 +vt 0.745628 0.842513 +vt 0.745596 0.852947 +vt 0.882390 0.446558 +vt 0.886873 0.442053 +vt 0.882376 0.442067 +vt 0.779149 0.245490 +vt 0.774666 0.240986 +vt 0.774652 0.245476 +vt 0.908380 0.310076 +vt 0.903883 0.310062 +vt 0.745137 0.898039 +vt 0.745274 0.852961 +vt 0.740640 0.898025 +vt 0.397505 0.803785 +vt 0.393008 0.803798 +vt 0.749954 0.898039 +vt 0.745457 0.898025 +vt 0.831303 0.309844 +vt 0.826806 0.309830 +vt 0.735148 0.898039 +vt 0.730651 0.898025 +vt 0.474582 0.803549 +vt 0.470085 0.803563 +vt 0.739966 0.898038 +vt 0.735607 0.852947 +vt 0.735469 0.898025 +vt 0.886652 0.369576 +vt 0.740136 0.842526 +vt 0.735640 0.842513 +vt 0.740779 0.852947 +vt 0.745307 0.842527 +vt 0.740811 0.842513 +vt 0.831154 0.358673 +vt 0.826657 0.358660 +vt 0.826771 0.321099 +vt 0.734998 0.946873 +vt 0.730617 0.909294 +vt 0.730502 0.946859 +vt 0.474732 0.852376 +vt 0.470120 0.814830 +vt 0.470235 0.852389 +vt 0.739815 0.946873 +vt 0.735434 0.909294 +vt 0.735319 0.946859 +vt 0.908229 0.358905 +vt 0.903733 0.358892 +vt 0.903848 0.321331 +vt 0.432606 0.852639 +vt 0.437218 0.890190 +vt 0.437103 0.852625 +vt 0.397655 0.852612 +vt 0.393043 0.815067 +vt 0.393158 0.852625 +vt 0.749803 0.946873 +vt 0.745422 0.909294 +vt 0.745307 0.946859 +vt 0.908345 0.321344 +vt 0.397539 0.815053 +vt 0.749919 0.909308 +vt 0.831268 0.321112 +vt 0.735113 0.909308 +vt 0.474617 0.814816 +vt 0.905980 0.446558 +vt 0.910256 0.374066 +vt 0.905759 0.374079 +vt 0.739931 0.909308 +vt 0.903864 0.321393 +vt 0.831284 0.321175 +vt 0.831319 0.309906 +vt 0.905538 0.374066 +vt 0.905759 0.446544 +vt 0.901262 0.446558 +vt 0.999215 0.593042 +vt 0.989181 0.197303 +vt 0.997999 0.197276 +vt 0.977931 0.593121 +vt 0.970329 0.197276 +vt 0.979147 0.197303 +vt 0.999215 0.988904 +vt 0.989181 0.593148 +vt 0.997999 0.593121 +vt 0.980363 0.593121 +vt 0.774652 0.224813 +vt 0.783497 0.233592 +vt 0.774679 0.233619 +vt 0.191998 0.807591 +vt 0.140177 0.945358 +vt 0.140593 0.807433 +vt 0.775247 0.224786 +vt 0.826062 0.031014 +vt 0.826657 0.224628 +vt 0.881186 0.878121 +vt 0.932166 0.740036 +vt 0.932589 0.877964 +vt 0.774652 0.447938 +vt 0.826657 0.254481 +vt 0.826061 0.448095 +vt 0.417414 0.747622 +vt 0.278710 0.554426 +vt 0.416824 0.554006 +vt 0.556033 0.748044 +vt 0.417920 0.747622 +vt 0.556626 0.554429 +vt 0.980027 0.740181 +vt 0.933005 0.740036 +vt 0.092295 0.945506 +vt 0.091871 0.807579 +vt 0.139320 0.945361 +vt 0.036861 0.945506 +vt 0.083457 0.807435 +vt 0.083880 0.945361 +vt 0.195609 0.945359 +vt 0.243059 0.807577 +vt 0.242636 0.945504 +vt 0.278710 0.691935 +vt 0.140597 0.692354 +vt 0.278289 0.554008 +vt 0.138898 0.692357 +vt 0.001207 0.554008 +vt 0.139320 0.554430 +vt 0.879512 0.861947 +vt 0.855017 0.999799 +vt 0.855434 0.861873 +vt 0.934356 0.724023 +vt 0.933510 0.448169 +vt 0.958436 0.723949 +vt 0.830093 0.724023 +vt 0.853323 0.448095 +vt 0.854169 0.723949 +vt 0.908582 0.723949 +vt 0.932662 0.724023 +vt 0.279130 0.140238 +vt 0.554945 0.001476 +vt 0.555365 0.139399 +vt 0.277442 0.416086 +vt 0.277020 0.554008 +vt 0.001207 0.415242 +vt 0.880762 0.740036 +vt 0.880888 0.453616 +vt 0.908455 0.734517 +vt 0.936780 0.197276 +vt 0.936368 0.062029 +vt 0.963834 0.197194 +vt 0.936243 0.072496 +vt 0.908675 0.353386 +vt 0.908550 0.066977 +vt 0.360604 0.883289 +vt 0.388078 0.748124 +vt 0.387664 0.883372 +vt 0.692936 0.733201 +vt 0.829245 0.448510 +vt 0.828370 0.733615 +vt 0.692060 0.448095 +vt 0.557502 0.733624 +vt 0.556626 0.448510 +vt 0.658255 0.957992 +vt 0.658418 0.843236 +vt 0.692774 0.957276 +vt 0.326090 0.955118 +vt 0.325778 0.852728 +vt 0.360604 0.955013 +vt 0.632700 0.843234 +vt 0.598344 0.957271 +vt 0.598183 0.842519 +vt 0.278710 0.955013 +vt 0.313539 0.852729 +vt 0.313225 0.955118 +vt 0.036437 0.807121 +vt 0.036789 0.692357 +vt 0.138968 0.807435 +vt 0.242706 0.692354 +vt 0.140529 0.807433 +vt 0.140177 0.692668 +vt 0.474732 0.852740 +vt 0.437218 0.946920 +vt 0.437503 0.852625 +vt 0.750458 0.951236 +vt 0.750124 0.842627 +vt 0.787690 0.951122 +vt 0.430354 0.852740 +vt 0.392837 0.946921 +vt 0.393127 0.852625 +vt 0.692936 0.951122 +vt 0.730502 0.842627 +vt 0.730168 0.951236 +vt 0.692936 0.842233 +vt 0.598183 0.733911 +vt 0.692604 0.733624 +vt 0.787357 0.842513 +vt 0.787690 0.733904 +vt 0.479517 0.758491 +vt 0.475020 0.758477 +vt 0.475052 0.748044 +vt 0.901277 0.109992 +vt 0.905806 0.120412 +vt 0.905774 0.109978 +vt 0.360316 0.758475 +vt 0.355787 0.748055 +vt 0.355819 0.758488 +vt 0.891605 0.374080 +vt 0.886887 0.446544 +vt 0.891384 0.446558 +vt 0.388092 0.752545 +vt 0.392575 0.748042 +vt 0.779149 0.238123 +vt 0.774652 0.238109 +vt 0.556594 0.758723 +vt 0.552097 0.758709 +vt 0.552129 0.748276 +vt 0.479549 0.748058 +vt 0.283239 0.758710 +vt 0.278710 0.748291 +vt 0.278742 0.758724 +vt 0.088666 0.817883 +vt 0.084169 0.817869 +vt 0.084201 0.807435 +vt 0.388327 0.829514 +vt 0.388313 0.825023 +vt 0.392810 0.825010 +vt 0.779149 0.005980 +vt 0.774666 0.001476 +vt 0.774652 0.005967 +vt 0.556455 0.803797 +vt 0.551958 0.803783 +vt 0.321111 0.852638 +vt 0.321249 0.897714 +vt 0.325608 0.852623 +vt 0.283378 0.803782 +vt 0.278881 0.803796 +vt 0.088527 0.862961 +vt 0.084030 0.862947 +vt 0.479378 0.803565 +vt 0.474882 0.803551 +vt 0.901139 0.064914 +vt 0.905636 0.064900 +vt 0.360454 0.803546 +vt 0.355957 0.803560 +vt 0.905636 0.175952 +vt 0.901278 0.130860 +vt 0.901139 0.175938 +vt 0.392589 0.752531 +vt 0.901310 0.120426 +vt 0.325746 0.897700 +vt 0.321281 0.908149 +vt 0.325778 0.908135 +vt 0.479229 0.852394 +vt 0.474848 0.814819 +vt 0.900990 0.016081 +vt 0.905601 0.053632 +vt 0.905486 0.016067 +vt 0.360604 0.852373 +vt 0.355992 0.814827 +vt 0.356107 0.852387 +vt 0.905486 0.224786 +vt 0.901105 0.187208 +vt 0.900990 0.224772 +vt 0.556305 0.852627 +vt 0.551809 0.852613 +vt 0.551924 0.815052 +vt 0.313539 0.852638 +vt 0.318151 0.890187 +vt 0.318035 0.852623 +vt 0.283527 0.852610 +vt 0.278916 0.815064 +vt 0.279030 0.852623 +vt 0.088377 0.911795 +vt 0.083996 0.874217 +vt 0.083880 0.911781 +vt 0.556420 0.815065 +vt 0.283412 0.815050 +vt 0.088493 0.874231 +vt 0.479344 0.814832 +vt 0.901105 0.053646 +vt 0.360489 0.814814 +vt 0.896545 0.446558 +vt 0.900821 0.374065 +vt 0.905601 0.187222 +vt 0.479360 0.814895 +vt 0.392575 0.829514 +vt 0.392796 0.901992 +vt 0.388299 0.902005 +vt 0.880762 0.448169 +vt 0.855851 0.723947 +vt 0.856684 0.448095 +vt 0.830516 0.861950 +vt 0.854594 0.861876 +vt 0.280391 0.554006 +vt 0.555785 0.277321 +vt 0.556626 0.553167 +vt 0.278710 0.002320 +vt 0.277865 0.278164 +vt 0.002475 0.001476 +vt 0.879929 0.724021 +vt 0.279551 0.278161 +vt 0.001630 0.277320 +vt 0.830940 0.999876 +vt 0.735319 0.842526 +vt 0.474411 0.748044 +vt 0.891827 0.374066 +vt 0.779163 0.026523 +vt 0.908550 0.254569 +vt 0.397334 0.748280 +vt 0.750124 0.842526 +vt 0.779162 0.241000 +vt 0.740104 0.852961 +vt 0.432721 0.890204 +vt 0.910477 0.446544 +vt 0.901042 0.374079 +vt 0.990397 0.593069 +vt 0.969113 0.593094 +vt 0.990397 0.988932 +vt 0.987965 0.197276 +vt 0.783470 0.224786 +vt 0.191581 0.945516 +vt 0.774652 0.031171 +vt 0.880762 0.740194 +vt 0.775247 0.254323 +vt 0.279300 0.748042 +vt 0.979610 0.878107 +vt 0.036437 0.807579 +vt 0.196034 0.807433 +vt 0.000785 0.691935 +vt 0.879095 0.999873 +vt 0.829245 0.448169 +vt 0.909429 0.448095 +vt 0.908582 0.448095 +vt 0.936368 0.358905 +vt 0.361018 0.748042 +vt 0.693811 0.448095 +vt 0.692936 0.842519 +vt 0.632862 0.957986 +vt 0.243059 0.807119 +vt 0.474447 0.947033 +vt 0.138897 0.807435 +vt 0.430065 0.947034 +vt 0.693269 0.842513 +vt 0.598513 0.842519 +vt 0.360293 0.852623 +vt 0.000785 0.553164 +vt 0.963422 0.061947 +vt 0.957589 0.448095 +vt 0.693268 0.733615 +vt 0.283207 0.748277 +vt 0.140177 0.554428 +vt 0.139320 0.692671 +vt 0.418513 0.554006 +vt 0.360284 0.748042 +vt 0.887109 0.374066 +vt 0.779162 0.233632 +vt 0.556626 0.748290 +vt 0.088698 0.807449 +vt 0.392823 0.829500 +vt 0.779163 0.001490 +vt 0.905774 0.130874 +vt 0.313654 0.890201 +vt 0.901042 0.446544 +vt 0.388078 0.829528 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.984800 -0.173600 +vn -0.000000 0.984800 0.173600 +vn -0.000000 -0.173600 0.984800 +vn 0.000000 0.173600 -0.984800 +vn 0.000000 -0.999800 -0.018900 +vn 0.000000 0.999800 0.018900 +vn 0.000000 -0.018900 0.999800 +vn 0.000000 0.018900 -0.999800 +vn 0.897200 0.000000 -0.441700 +vn -0.897200 -0.000000 -0.441700 +vn 0.000000 0.984800 0.173700 +usemtl None +f 217/484/223 218/485/223 219/486/223 +f 218/487/224 220/488/224 221/489/224 +f 221/490/223 222/491/223 223/492/223 +f 224/493/225 217/494/225 223/495/225 +f 225/496/226 220/497/226 219/498/226 +f 226/499/225 227/500/225 228/501/225 +f 229/502/223 230/503/223 231/504/223 +f 230/503/223 217/484/223 225/505/223 +f 224/506/223 232/507/223 233/508/223 +f 233/509/227 234/510/227 229/511/227 +f 234/512/226 235/513/226 231/514/226 +f 236/515/225 237/516/225 238/517/225 +f 239/518/223 240/519/223 230/503/223 +f 240/520/224 230/521/224 241/522/224 +f 241/523/223 233/508/223 242/524/223 +f 242/525/227 229/511/227 239/526/227 +f 243/527/223 244/528/223 218/485/223 +f 244/529/224 221/489/224 245/530/224 +f 245/531/223 223/492/223 246/532/223 +f 246/533/227 217/534/227 243/535/227 +f 231/514/226 222/536/226 225/496/226 +f 223/492/223 222/491/223 224/506/223 +f 217/534/227 222/537/227 225/538/227 +f 224/539/224 231/540/224 235/541/224 +f 247/542/223 227/543/223 248/544/223 +f 227/545/224 249/546/224 228/547/224 +f 228/548/223 250/549/223 226/550/223 +f 226/551/227 251/552/227 247/553/227 +f 252/554/223 237/555/223 253/556/223 +f 237/557/224 254/558/224 238/559/224 +f 238/560/223 255/561/223 236/562/223 +f 236/563/227 256/564/227 252/565/227 +f 256/566/223 253/556/223 240/519/223 +f 254/567/223 242/524/223 255/561/223 +f 255/568/227 239/526/227 256/564/227 +f 251/569/223 248/544/223 244/528/223 +f 248/570/224 245/530/224 249/546/224 +f 249/571/223 246/532/223 250/549/223 +f 240/572/226 246/573/226 243/574/226 +f 246/533/227 251/552/227 250/575/227 +f 240/519/227 254/576/227 241/519/227 +f 254/576/223 250/577/223 246/578/223 +f 250/579/225 254/580/225 253/581/225 +f 257/582/228 258/583/228 259/584/228 +f 260/585/224 261/586/224 258/587/224 +f 262/588/223 263/589/223 261/590/223 +f 264/587/227 259/589/227 263/591/227 +f 259/592/225 261/593/225 263/594/225 +f 265/595/223 266/596/223 267/597/223 +f 268/598/227 269/599/227 266/600/227 +f 270/601/228 271/602/228 269/603/228 +f 272/604/224 267/605/224 271/606/224 +f 267/607/225 269/608/225 271/609/225 +f 272/610/226 270/611/226 265/612/226 +f 273/613/223 274/603/223 275/614/223 +f 276/615/227 277/616/227 274/617/227 +f 277/618/228 278/619/228 279/620/228 +f 280/621/224 275/622/224 278/623/224 +f 275/624/225 274/625/225 278/626/225 +f 280/627/226 276/628/226 273/629/226 +f 281/630/223 282/631/223 283/632/223 +f 284/633/227 285/634/227 282/635/227 +f 286/636/228 287/637/228 288/638/228 +f 289/639/224 290/634/224 287/640/224 +f 283/641/225 291/642/225 292/643/225 +f 293/644/226 285/645/226 281/646/226 +f 294/647/223 295/648/223 296/649/223 +f 295/650/229 297/651/229 298/652/229 +f 297/653/228 299/654/228 300/655/228 +f 301/656/230 296/657/230 299/658/230 +f 296/659/231 300/660/231 299/661/231 +f 301/662/232 295/663/232 294/664/232 +f 302/665/223 303/666/223 304/667/223 +f 303/668/233 305/669/233 306/670/233 +f 305/671/228 307/672/228 308/673/228 +f 309/674/234 304/675/234 307/676/234 +f 304/677/235 306/678/235 307/679/235 +f 309/680/236 303/681/236 302/682/236 +f 310/683/223 311/684/223 312/685/223 +f 313/686/227 314/687/227 311/688/227 +f 314/689/228 315/690/228 316/691/228 +f 317/692/224 312/693/224 315/694/224 +f 312/695/225 316/696/225 315/697/225 +f 317/698/226 314/695/226 310/699/226 +f 318/700/223 319/701/223 320/702/223 +f 319/703/224 321/704/224 322/705/224 +f 322/706/223 323/707/223 324/708/223 +f 325/709/225 318/710/225 324/711/225 +f 326/712/225 320/657/225 321/713/225 +f 327/714/225 328/594/225 329/715/225 +f 330/716/223 331/717/223 332/718/223 +f 331/717/223 318/700/223 326/719/223 +f 325/720/223 333/721/223 334/722/223 +f 334/723/224 330/724/224 335/725/224 +f 335/726/225 332/727/225 336/728/225 +f 337/729/225 338/730/225 339/731/225 +f 340/732/223 341/733/223 331/717/223 +f 341/734/224 331/735/224 342/736/224 +f 342/737/223 334/722/223 343/738/223 +f 343/739/227 330/724/227 340/740/227 +f 344/741/223 345/742/223 319/701/223 +f 345/743/224 322/705/224 346/744/224 +f 346/745/223 324/708/223 347/746/223 +f 347/747/227 318/748/227 344/749/227 +f 332/727/225 326/712/225 323/750/225 +f 324/708/223 323/707/223 325/720/223 +f 318/748/227 323/704/227 326/751/227 +f 325/752/224 332/753/224 336/754/224 +f 348/755/223 328/548/223 349/756/223 +f 328/757/224 350/758/224 329/759/224 +f 329/760/223 351/761/223 327/762/223 +f 327/763/227 352/764/227 348/765/227 +f 353/766/223 338/767/223 354/768/223 +f 338/769/224 355/770/224 339/771/224 +f 339/772/223 356/773/223 337/774/223 +f 337/775/227 357/776/227 353/777/227 +f 357/778/223 354/768/223 341/733/223 +f 355/779/223 343/738/223 356/773/223 +f 356/780/227 340/740/227 357/776/227 +f 352/781/223 349/756/223 345/742/223 +f 349/782/224 346/744/224 350/758/224 +f 350/783/223 347/746/223 351/761/223 +f 341/784/226 347/785/226 344/493/226 +f 347/747/227 352/764/227 351/786/227 +f 341/733/227 355/768/227 342/733/227 +f 355/768/228 347/741/228 351/787/228 +f 351/788/225 355/789/225 354/790/225 +f 358/791/223 359/792/223 290/793/223 +f 293/794/237 288/638/237 292/795/237 +f 290/796/225 288/797/225 287/798/225 +f 289/799/226 286/800/226 358/801/226 +f 360/802/238 283/632/238 359/792/238 +f 359/803/225 292/643/225 288/797/225 +f 286/800/226 293/644/226 360/804/226 +f 285/805/228 292/795/228 291/631/228 +f 225/505/223 217/484/223 219/486/223 +f 219/806/224 220/488/224 218/487/224 +f 220/807/223 222/491/223 221/490/223 +f 230/808/225 217/494/225 224/493/225 +f 222/536/226 220/497/226 225/496/226 +f 247/809/225 227/500/225 226/499/225 +f 234/810/223 229/502/223 231/504/223 +f 231/504/223 230/503/223 225/505/223 +f 235/811/223 232/507/223 224/506/223 +f 232/812/227 234/510/227 233/509/227 +f 232/710/226 235/513/226 234/512/226 +f 252/813/225 237/516/225 236/515/225 +f 229/502/223 239/518/223 230/503/223 +f 241/522/224 230/521/224 224/539/224 +f 224/506/223 233/508/223 241/523/223 +f 233/509/227 229/511/227 242/525/227 +f 217/484/223 243/527/223 218/485/223 +f 218/487/224 221/489/224 244/529/224 +f 221/490/223 223/492/223 245/531/223 +f 223/814/227 217/534/227 246/533/227 +f 235/513/226 222/536/226 231/514/226 +f 223/814/227 222/537/227 217/534/227 +f 230/521/224 231/540/224 224/539/224 +f 251/569/223 247/542/223 248/544/223 +f 248/570/224 249/546/224 227/545/224 +f 249/571/223 250/549/223 228/548/223 +f 250/575/224 226/551/224 251/552/224 +f 256/566/223 252/554/223 253/556/223 +f 253/815/224 254/558/224 237/557/224 +f 254/567/223 255/561/223 238/560/223 +f 255/568/227 256/564/227 236/563/227 +f 239/518/223 256/566/223 240/519/223 +f 241/523/223 242/524/223 254/567/223 +f 242/525/227 239/526/227 255/568/227 +f 243/527/223 251/569/223 244/528/223 +f 244/529/224 245/530/224 248/570/224 +f 245/531/223 246/532/223 249/571/223 +f 241/816/225 240/572/225 246/573/225 +f 243/535/227 251/552/227 246/533/227 +f 240/519/227 253/556/227 254/576/227 +f 243/527/223 240/519/223 253/556/223 +f 251/569/223 243/527/223 253/556/223 +f 241/519/223 254/576/223 246/578/223 +f 251/817/225 250/579/225 253/581/225 +f 260/818/228 258/583/228 257/582/228 +f 262/819/224 261/586/224 260/585/224 +f 264/820/223 263/589/223 262/588/223 +f 257/821/227 259/589/227 264/587/227 +f 258/822/225 261/593/225 259/592/225 +f 268/823/223 266/596/223 265/595/223 +f 270/824/227 269/599/227 268/598/227 +f 272/825/228 271/602/228 270/601/228 +f 265/826/224 267/605/224 272/604/224 +f 266/827/225 269/608/225 267/607/225 +f 360/804/226 293/644/226 281/646/226 +f 276/828/223 274/603/223 273/613/223 +f 280/829/228 278/619/228 277/618/228 +f 273/830/224 275/622/224 280/621/224 +f 277/831/226 276/628/226 280/627/226 +f 284/832/223 282/631/223 281/630/223 +f 289/833/228 287/637/228 286/636/228 +f 358/834/224 290/634/224 289/639/224 +f 282/799/225 291/642/225 283/641/225 +f 296/649/223 295/648/223 298/835/223 +f 301/836/228 299/654/228 297/653/228 +f 294/837/239 296/657/239 301/656/239 +f 298/838/231 300/660/231 296/659/231 +f 297/659/232 295/663/232 301/662/232 +f 304/667/223 303/666/223 306/839/223 +f 309/840/228 307/672/228 305/671/228 +f 302/774/234 304/675/234 309/674/234 +f 305/841/236 303/681/236 309/680/236 +f 313/842/223 311/684/223 310/683/223 +f 274/617/227 277/616/227 279/843/227 +f 317/844/228 315/690/228 314/689/228 +f 310/845/224 312/693/224 317/692/224 +f 311/846/225 316/696/225 312/695/225 +f 306/670/233 305/669/233 308/847/233 +f 281/646/226 285/645/226 284/848/226 +f 298/652/229 297/651/229 300/849/229 +f 282/635/227 285/634/227 291/850/227 +f 310/699/226 314/695/226 313/851/226 +f 311/688/227 314/687/227 316/698/227 +f 224/506/223 222/491/223 235/811/223 +f 325/720/223 323/707/223 336/852/223 +f 278/626/225 274/625/225 279/853/225 +f 307/679/235 306/678/235 308/854/235 +f 265/612/226 270/611/226 268/855/226 +f 326/719/223 318/700/223 320/702/223 +f 320/751/224 321/704/224 319/703/224 +f 321/856/223 323/707/223 322/706/223 +f 331/857/225 318/710/225 325/709/225 +f 323/750/225 326/712/225 321/713/225 +f 348/858/225 328/594/225 327/714/225 +f 335/859/223 330/716/223 332/718/223 +f 332/718/223 331/717/223 326/719/223 +f 336/852/223 333/721/223 325/720/223 +f 333/860/224 334/723/224 335/725/224 +f 333/861/225 335/726/225 336/728/225 +f 353/862/225 338/730/225 337/729/225 +f 330/716/223 340/732/223 331/717/223 +f 342/736/224 331/735/224 325/752/224 +f 325/720/223 334/722/223 342/737/223 +f 334/723/224 343/739/224 330/724/224 +f 318/700/223 344/741/223 319/701/223 +f 319/703/224 322/705/224 345/743/224 +f 322/706/223 324/708/223 346/745/223 +f 324/863/224 347/747/224 318/748/224 +f 336/728/225 332/727/225 323/750/225 +f 324/863/227 323/704/227 318/748/227 +f 331/735/224 332/753/224 325/752/224 +f 352/781/223 348/755/223 349/756/223 +f 349/782/224 350/758/224 328/757/224 +f 350/783/223 351/761/223 329/760/223 +f 351/786/227 352/764/227 327/763/227 +f 357/778/223 353/766/223 354/768/223 +f 354/864/224 355/770/224 338/769/224 +f 355/779/223 356/773/223 339/772/223 +f 356/780/227 357/776/227 337/775/227 +f 340/732/223 357/778/223 341/733/223 +f 342/737/223 343/738/223 355/779/223 +f 343/739/227 340/740/227 356/780/227 +f 344/741/223 352/781/223 345/742/223 +f 345/743/224 346/744/224 349/782/224 +f 346/745/223 347/746/223 350/783/223 +f 342/865/226 347/785/226 341/784/226 +f 344/749/227 352/764/227 347/747/227 +f 341/733/227 354/768/227 355/768/227 +f 344/741/223 341/733/223 354/768/223 +f 352/781/223 344/741/223 354/768/223 +f 342/733/228 347/741/228 355/768/228 +f 352/866/225 351/788/225 354/790/225 +f 360/802/223 359/792/223 358/791/223 +f 286/636/237 288/638/237 293/794/237 +f 359/803/225 288/797/225 290/796/225 +f 281/630/238 283/632/238 360/802/238 +f 283/641/225 292/643/225 359/803/225 +f 293/794/228 292/795/228 285/805/228 +f 358/801/226 286/800/226 360/804/226 +o RadarDish_Dish +v -1.246696 4.173165 -2.423878 +v -1.157184 4.251359 -2.380311 +v -1.246696 4.251359 -2.380311 +v -1.191366 4.210987 -2.417151 +v -1.443555 3.753523 -2.672033 +v -1.191366 3.703241 -2.700048 +v -1.645795 3.894413 -2.593534 +v -1.758030 4.098003 -2.480101 +v -1.758030 4.323971 -2.354200 +v -1.645795 4.527562 -2.240767 +v -1.443555 4.668450 -2.162269 +v -1.191366 4.718733 -2.134254 +v -0.939176 4.668450 -2.162269 +v -0.736936 4.527562 -2.240767 +v -0.624701 4.323971 -2.354200 +v -0.624701 4.098003 -2.480101 +v -0.736936 3.894413 -2.593534 +v -0.939176 3.753523 -2.672033 +v -1.898060 3.771116 -2.785571 +v -2.297845 4.133267 -2.796538 +v -2.078693 3.735733 -3.018029 +v -1.898060 4.755742 -2.236974 +v -1.683796 5.247134 -2.175934 +v -2.078693 4.972032 -2.329211 +v -0.799180 4.974841 -2.114900 +v -0.484671 4.755742 -2.236974 +v -0.698936 5.247134 -2.175934 +v -0.310132 4.087723 -2.609169 +v -0.304038 3.735733 -3.018029 +v -0.084886 4.133267 -2.796538 +v -1.583552 3.552016 -2.907645 +v -1.683795 3.460631 -3.171306 +v -2.072599 4.439132 -2.413377 +v -2.297845 4.574497 -2.550702 +v -1.191366 5.053037 -2.071332 +v -1.191366 5.345316 -2.121230 +v -0.310132 4.439132 -2.413377 +v -0.084886 4.574497 -2.550702 +v -0.799180 3.552016 -2.907645 +v -1.191366 3.362448 -3.226010 +v -0.698936 3.460630 -3.171306 +v -2.072599 4.087724 -2.609169 +v -1.583552 4.974841 -2.114900 +v -0.304038 4.972032 -2.329211 +v -0.484671 3.771116 -2.785571 +v -1.191366 3.473820 -2.951213 +v -0.304038 3.735733 -3.018029 +v -1.191366 3.362448 -3.226010 +v -2.078693 3.735733 -3.018029 +v -2.078693 4.972032 -2.329211 +v -0.698936 5.247134 -2.175934 +v -0.084886 4.133267 -2.796538 +v -1.683795 3.460631 -3.171306 +v -2.297845 4.574497 -2.550702 +v -1.191366 5.345316 -2.121230 +v -0.084886 4.574497 -2.550702 +v -0.698936 3.460630 -3.171306 +v -2.297845 4.133267 -2.796538 +v -1.683796 5.247134 -2.175934 +v -0.304038 4.972032 -2.329211 +v -1.763018 3.447550 -3.485822 +v -2.475856 4.740615 -2.765374 +v -0.619714 5.521466 -2.330313 +v -1.191366 5.635444 -2.266809 +v 0.093125 4.228400 -3.050761 +v 0.093125 4.740615 -2.765374 +v -1.191366 3.333571 -3.549327 +v -0.619714 3.447550 -3.485822 +v -2.475856 4.228400 -3.050761 +v -1.763018 5.521466 -2.330313 +v -0.161284 5.202106 -2.508250 +v -0.161284 3.766910 -3.307887 +v -2.221447 3.766911 -3.307886 +v -2.221447 5.202106 -2.508250 +v -1.191366 4.228222 -2.448086 +v -0.939176 3.770759 -2.702968 +v -1.191366 3.720477 -2.730983 +v -0.736936 3.911649 -2.624469 +v -0.624701 4.115239 -2.511036 +v -0.624701 4.341207 -2.385135 +v -0.736936 4.544797 -2.271702 +v -0.939176 4.685686 -2.193204 +v -1.191366 4.735969 -2.165188 +v -1.443555 4.685686 -2.193204 +v -1.645795 4.544797 -2.271702 +v -1.758030 4.341207 -2.385135 +v -1.758030 4.115239 -2.511036 +v -1.645795 3.911649 -2.624469 +v -1.443555 3.770759 -2.702968 +v -0.484671 3.788351 -2.816506 +v -0.084886 4.150504 -2.827473 +v -0.304038 3.752969 -3.048965 +v -0.484671 4.772977 -2.267910 +v -0.698936 5.264369 -2.206869 +v -0.304038 4.989267 -2.360146 +v -1.583552 4.992077 -2.145836 +v -2.078693 4.989267 -2.360145 +v -1.683795 5.264369 -2.206869 +v -2.072599 4.104959 -2.640103 +v -2.078693 3.752969 -3.048965 +v -2.297845 4.150504 -2.827473 +v -0.799180 3.569252 -2.938580 +v -0.698936 3.477866 -3.202242 +v -0.310132 4.456368 -2.444311 +v -0.084886 4.591733 -2.581637 +v -1.191366 5.070273 -2.102268 +v -1.191366 5.362552 -2.152165 +v -2.072599 4.456368 -2.444311 +v -2.297845 4.591733 -2.581637 +v -1.583551 3.569252 -2.938580 +v -1.191366 3.491056 -2.982147 +v -1.683795 3.477866 -3.202242 +v -0.310132 4.104960 -2.640103 +v -0.799180 4.992077 -2.145836 +v -1.898060 4.772978 -2.267910 +v -1.898060 3.788351 -2.816506 +v -1.191366 3.379684 -3.256945 +v -2.078693 3.752969 -3.048965 +v -1.191366 3.379684 -3.256945 +v -0.304038 3.752969 -3.048965 +v -0.304038 4.989267 -2.360146 +v -1.683795 5.264369 -2.206869 +v -2.297845 4.150504 -2.827473 +v -0.698936 3.477866 -3.202242 +v -0.084886 4.591733 -2.581637 +v -1.191366 5.362552 -2.152165 +v -2.297845 4.591733 -2.581637 +v -1.683795 3.477866 -3.202242 +v -0.084886 4.150504 -2.827473 +v -0.698936 5.264369 -2.206869 +v -2.078693 4.989267 -2.360145 +v -0.619714 3.464786 -3.516757 +v 0.093125 4.757851 -2.796309 +v -1.191366 5.652680 -2.297744 +v -2.475856 4.245636 -3.081696 +v -2.475856 4.757851 -2.796309 +v -1.191366 3.350807 -3.580261 +v -1.763017 3.464786 -3.516757 +v 0.093125 4.245636 -3.081696 +v -0.619714 5.538702 -2.361248 +v -2.221447 5.219341 -2.539184 +v -2.221447 3.784146 -3.338822 +v -0.161284 3.784147 -3.338821 +v -0.161284 5.219341 -2.539184 +v -1.763018 5.538702 -2.361248 +v -1.157184 4.173165 -2.423878 +vt 0.775111 0.244736 +vt 0.783916 0.253595 +vt 0.783943 0.244763 +vt 0.666182 0.335891 +vt 0.610276 0.323104 +vt 0.610265 0.348628 +vt 0.621360 0.300113 +vt 0.641321 0.284208 +vt 0.666207 0.278540 +vt 0.691087 0.284230 +vt 0.711035 0.300152 +vt 0.722099 0.323153 +vt 0.722089 0.348677 +vt 0.711005 0.371668 +vt 0.691044 0.387573 +vt 0.666158 0.393242 +vt 0.641278 0.387552 +vt 0.621330 0.371629 +vt 0.596374 0.280276 +vt 0.617355 0.235039 +vt 0.578378 0.266095 +vt 0.704809 0.255576 +vt 0.753480 0.266172 +vt 0.714529 0.235081 +vt 0.753020 0.355799 +vt 0.735783 0.391553 +vt 0.775063 0.360922 +vt 0.666041 0.425103 +vt 0.617270 0.436829 +vt 0.665852 0.447940 +vt 0.579137 0.316030 +vt 0.556736 0.310988 +vt 0.666116 0.246726 +vt 0.665947 0.223970 +vt 0.753036 0.316106 +vt 0.775084 0.311084 +vt 0.635772 0.848613 +vt 0.658354 0.893368 +vt 0.658505 0.843530 +vt 0.596327 0.391492 +vt 0.556715 0.360826 +vt 0.578319 0.405738 +vt 0.882742 0.409379 +vt 0.859827 0.364684 +vt 0.859980 0.414522 +vt 0.735830 0.280337 +vt 0.704741 0.416287 +vt 0.753421 0.405815 +vt 0.627348 0.416253 +vt 0.579121 0.355723 +vt 0.627416 0.255542 +vt 0.000000 0.000000 +vt 0.901619 0.073843 +vt 0.901617 0.034877 +vt 0.869343 0.065927 +vt 0.829113 0.790341 +vt 0.829335 0.745437 +vt 0.796449 0.786432 +vt 0.863999 0.122219 +vt 0.831441 0.065914 +vt 0.831559 0.122319 +vt 0.557300 0.790322 +vt 0.589743 0.844205 +vt 0.589917 0.786350 +vt 0.901321 0.171019 +vt 0.869221 0.122332 +vt 0.868997 0.178737 +vt 0.829266 0.840179 +vt 0.796626 0.844288 +vt 0.864195 0.170808 +vt 0.831787 0.178724 +vt 0.557136 0.745496 +vt 0.589727 0.734313 +vt 0.901080 0.209984 +vt 0.868717 0.223970 +vt 0.901514 0.122431 +vt 0.829763 0.885080 +vt 0.797203 0.896413 +vt 0.864446 0.209772 +vt 0.832078 0.223957 +vt 0.863897 0.073631 +vt 0.863909 0.034666 +vt 0.557150 0.840159 +vt 0.589237 0.896420 +vt 0.666157 0.112044 +vt 0.621304 0.076305 +vt 0.610239 0.099305 +vt 0.641252 0.060382 +vt 0.666133 0.054692 +vt 0.691019 0.060362 +vt 0.710980 0.076267 +vt 0.722063 0.099258 +vt 0.722074 0.124782 +vt 0.711009 0.147783 +vt 0.691061 0.163705 +vt 0.666180 0.169395 +vt 0.641294 0.163726 +vt 0.621333 0.147820 +vt 0.610250 0.124829 +vt 0.627333 0.031683 +vt 0.665854 0.000000 +vt 0.617271 0.011110 +vt 0.735768 0.056385 +vt 0.775064 0.087020 +vt 0.753422 0.042127 +vt 0.735813 0.167601 +vt 0.714528 0.212860 +vt 0.753479 0.181770 +vt 0.627399 0.192394 +vt 0.578377 0.181843 +vt 0.617353 0.212901 +vt 0.596311 0.056443 +vt 0.578320 0.042200 +vt 0.704726 0.031650 +vt 0.714446 0.011070 +vt 0.753020 0.131832 +vt 0.775084 0.136858 +vt 0.666099 0.201210 +vt 0.579120 0.131905 +vt 0.579104 0.092212 +vt 0.556735 0.136950 +vt 0.666026 0.022834 +vt 0.753004 0.092139 +vt 0.704791 0.192362 +vt 0.596356 0.167659 +vt 0.556715 0.087112 +vt 0.035410 0.745874 +vt 0.035159 0.706910 +vt 0.003091 0.738157 +vt 0.859827 0.414522 +vt 0.859330 0.369621 +vt 0.827747 0.410611 +vt 0.277928 0.794659 +vt 0.278121 0.746071 +vt 0.245493 0.794559 +vt 0.969850 0.302225 +vt 0.937564 0.248414 +vt 0.937744 0.306269 +vt 0.035708 0.843051 +vt 0.003318 0.794562 +vt 0.003437 0.850967 +vt 0.561420 0.840172 +vt 0.594187 0.786363 +vt 0.594013 0.844218 +vt 0.277822 0.843247 +vt 0.245371 0.850965 +vt 0.969691 0.347206 +vt 0.937559 0.358486 +vt 0.035697 0.882016 +vt 0.003423 0.896201 +vt 0.035606 0.794463 +vt 0.560985 0.885151 +vt 0.593507 0.896433 +vt 0.277825 0.882213 +vt 0.245374 0.896199 +vt 0.278362 0.707106 +vt 0.245717 0.738154 +vt 0.969694 0.252387 +vt 0.969255 0.207564 +vt 0.864950 0.122319 +vt 0.864727 0.178724 +vt 0.864446 0.223957 +vt 0.593997 0.734326 +vt 0.827184 0.020693 +vt 0.827170 0.065927 +vt 0.831454 0.020680 +vt 0.827289 0.122332 +vt 0.827516 0.178737 +vt 0.827808 0.223970 +vt 0.792436 0.734318 +vt 0.796706 0.734304 +vt 0.792179 0.786445 +vt 0.792356 0.844301 +vt 0.865070 0.020680 +vt 0.869340 0.020693 +vt 0.865073 0.065914 +vt 0.775084 0.253568 +vt 0.245997 0.692921 +vt 0.635652 0.888305 +vt 0.882621 0.369687 +vt 0.937054 0.196379 +vt 0.714444 0.436872 +vt 0.827170 0.358486 +vt 0.556715 0.885138 +vt 0.002800 0.692924 +vt 0.561570 0.790335 +vt 0.792934 0.896426 +vn 0.000000 -0.486700 0.873600 +vn -0.573400 -0.616600 0.539400 +vn -0.396800 0.059200 0.916000 +vn 0.396800 0.059200 0.916000 +vn 0.573400 -0.616600 0.539400 +vn -0.396800 -0.810100 0.431600 +vn -0.573400 -0.134200 0.808200 +vn 0.141600 0.166600 0.975800 +vn 0.636400 -0.375400 0.673800 +vn 0.141600 -0.917400 0.371800 +vn -0.636400 -0.375400 0.673800 +vn -0.141600 0.166600 0.975800 +vn 0.573400 -0.134200 0.808200 +vn 0.396800 -0.810100 0.431600 +vn -0.141600 -0.917400 0.371800 +vn 0.072100 -0.184500 0.980200 +vn -0.291900 -0.337600 0.894900 +vn -0.202000 -0.681800 0.703100 +vn 0.291900 -0.583300 0.758000 +vn 0.202000 -0.239100 0.949700 +vn -0.202000 -0.239100 0.949700 +vn -0.291900 -0.583300 0.758000 +vn -0.072100 -0.736400 0.672700 +vn 0.202000 -0.681800 0.703100 +vn 0.291900 -0.337600 0.894900 +vn -0.072100 -0.184500 0.980200 +vn -0.324000 -0.460500 0.826400 +vn 0.072100 -0.736400 0.672700 +vn 0.324000 -0.460500 0.826400 +vn 0.000000 0.000000 1.000000 +vn -0.519600 -0.838200 0.165700 +vn -0.750800 0.046800 0.658800 +vn 0.185400 0.440700 0.878300 +vn 0.833400 -0.269000 0.482900 +vn 0.185400 -0.978800 0.087400 +vn -0.833400 -0.269000 0.482900 +vn -0.185400 0.440700 0.878300 +vn 0.750800 0.046800 0.658800 +vn 0.519600 -0.838200 0.165700 +vn -0.185400 -0.978800 0.087400 +vn -0.750800 -0.584900 0.306900 +vn -0.519600 0.300100 0.800000 +vn 0.519600 0.300100 0.800000 +vn 0.750800 -0.584900 0.306900 +vn 0.000000 0.486700 -0.873600 +vn -0.573400 0.616600 -0.539400 +vn -0.396800 -0.059200 -0.916000 +vn 0.396800 -0.059200 -0.916000 +vn 0.573400 0.616600 -0.539400 +vn -0.396800 0.810100 -0.431600 +vn -0.573400 0.134200 -0.808200 +vn 0.141600 -0.166600 -0.975800 +vn 0.636400 0.375400 -0.673800 +vn 0.141600 0.917400 -0.371800 +vn -0.636400 0.375400 -0.673800 +vn -0.141600 -0.166600 -0.975800 +vn 0.573400 0.134200 -0.808200 +vn 0.396800 0.810100 -0.431600 +vn -0.141600 0.917400 -0.371800 +vn 0.072100 0.184500 -0.980200 +vn -0.291900 0.337600 -0.894900 +vn -0.202000 0.681800 -0.703100 +vn 0.291900 0.583300 -0.758000 +vn 0.202000 0.239100 -0.949700 +vn -0.202000 0.239100 -0.949700 +vn -0.291900 0.583300 -0.758000 +vn -0.072100 0.736400 -0.672700 +vn 0.202000 0.681800 -0.703100 +vn 0.291900 0.337600 -0.894900 +vn -0.072100 0.184500 -0.980200 +vn -0.324000 0.460500 -0.826400 +vn 0.072100 0.736400 -0.672700 +vn 0.324000 0.460500 -0.826400 +vn -0.519600 0.838200 -0.165700 +vn -0.750800 -0.046800 -0.658800 +vn 0.185400 -0.440700 -0.878300 +vn 0.833400 0.269000 -0.482900 +vn 0.185400 0.978800 -0.087400 +vn -0.833400 0.269000 -0.482900 +vn -0.185400 -0.440700 -0.878300 +vn 0.750800 -0.046800 -0.658800 +vn 0.519600 0.838200 -0.165700 +vn -0.185400 0.978800 -0.087400 +vn -0.750800 0.584900 -0.306900 +vn -0.519600 -0.300100 -0.800000 +vn 0.519600 -0.300100 -0.800000 +vn 0.750800 0.584900 -0.306900 +vn 0.222500 -0.851700 -0.474500 +vn 0.623500 -0.683000 -0.380500 +vn 0.901000 -0.379000 -0.211200 +vn 1.000000 0.000000 0.000000 +vn 0.901000 0.379000 0.211200 +vn 0.623500 0.683000 0.380500 +vn 0.222500 0.851700 0.474500 +vn -0.222500 0.851700 0.474500 +vn -0.623500 0.683000 0.380500 +vn -0.901000 0.379000 0.211200 +vn -1.000000 0.000000 0.000000 +vn -0.901000 -0.379000 -0.211200 +vn -0.623500 -0.683000 -0.380500 +vn -0.222500 -0.851700 -0.474500 +vn 0.623500 -0.683000 -0.380600 +vn 0.222500 0.851600 0.474500 +usemtl None +f 361/867/240 362/868/240 363/869/240 +f 364/870/240 365/871/240 366/872/240 +f 364/870/240 367/873/240 365/871/240 +f 364/870/240 368/874/240 367/873/240 +f 364/870/240 369/875/240 368/874/240 +f 364/870/240 370/876/240 369/875/240 +f 364/870/240 371/877/240 370/876/240 +f 364/870/240 372/878/240 371/877/240 +f 364/870/240 373/879/240 372/878/240 +f 364/870/240 374/880/240 373/879/240 +f 364/870/240 375/881/240 374/880/240 +f 364/870/240 376/882/240 375/881/240 +f 364/870/240 377/883/240 376/882/240 +f 364/870/240 378/884/240 377/883/240 +f 364/870/240 366/872/240 378/884/240 +f 379/885/241 380/886/241 381/887/241 +f 382/888/242 383/889/242 384/890/242 +f 385/891/243 386/892/243 387/893/243 +f 388/894/244 389/895/244 390/896/244 +f 391/897/245 379/885/245 392/898/245 +f 393/899/246 382/888/246 394/900/246 +f 395/901/247 385/891/247 396/902/247 +f 397/903/248 390/904/248 398/905/248 +f 399/906/249 400/907/249 401/908/249 +f 402/909/250 394/910/250 380/911/250 +f 403/912/251 395/901/251 383/889/251 +f 386/892/252 397/913/252 404/914/252 +f 405/915/253 399/906/253 389/895/253 +f 406/916/254 391/897/254 400/907/254 +f 372/878/255 373/879/255 395/901/255 +f 369/875/256 370/876/256 393/899/256 +f 365/871/257 367/873/257 391/897/257 +f 376/882/258 405/915/258 388/894/258 +f 373/879/259 374/880/259 385/891/259 +f 370/876/260 371/877/260 382/888/260 +f 367/873/261 368/874/261 379/885/261 +f 366/872/262 365/871/262 406/916/262 +f 377/883/263 399/906/263 405/915/263 +f 374/880/264 397/913/264 386/892/264 +f 371/877/265 372/878/265 403/912/265 +f 368/874/266 393/899/266 402/917/266 +f 378/884/267 366/872/267 399/906/267 +f 375/881/268 376/882/268 397/913/268 +f 389/918/269 407/918/269 401/918/269 +f 400/918/269 408/918/269 392/918/269 +f 381/918/269 409/918/269 380/918/269 +f 384/918/269 410/918/269 383/918/269 +f 387/918/269 411/918/269 404/918/269 +f 390/918/269 412/918/269 389/918/269 +f 392/918/269 413/918/269 381/918/269 +f 394/918/269 414/918/269 384/918/269 +f 396/918/269 415/918/269 387/918/269 +f 398/918/269 416/918/269 390/918/269 +f 401/918/269 417/918/269 400/918/269 +f 380/918/269 418/918/269 394/918/269 +f 383/918/269 419/918/269 396/918/269 +f 404/918/269 420/918/269 398/918/269 +f 413/919/270 409/920/270 421/921/270 +f 414/922/271 410/923/271 422/924/271 +f 415/925/272 423/926/272 424/927/272 +f 416/928/273 425/929/273 426/930/273 +f 417/931/274 427/932/274 428/933/274 +f 418/934/275 414/922/275 429/935/275 +f 419/936/276 415/925/276 430/937/276 +f 420/938/277 426/930/277 431/939/277 +f 407/940/278 428/933/278 432/941/278 +f 408/942/279 413/919/279 427/932/279 +f 409/943/280 429/935/280 433/944/280 +f 410/945/281 430/937/281 434/946/281 +f 411/947/282 420/948/282 423/926/282 +f 412/949/283 432/950/283 425/929/283 +f 435/951/284 436/952/284 437/953/284 +f 435/951/284 438/954/284 436/952/284 +f 435/951/284 439/955/284 438/954/284 +f 435/951/284 440/956/284 439/955/284 +f 435/951/284 441/957/284 440/956/284 +f 435/951/284 442/958/284 441/957/284 +f 435/951/284 443/959/284 442/958/284 +f 435/951/284 444/960/284 443/959/284 +f 435/951/284 445/961/284 444/960/284 +f 435/951/284 446/962/284 445/961/284 +f 435/951/284 447/963/284 446/962/284 +f 435/951/284 448/964/284 447/963/284 +f 435/951/284 449/965/284 448/964/284 +f 435/951/284 437/953/284 449/965/284 +f 450/966/285 451/967/285 452/968/285 +f 453/969/286 454/970/286 455/971/286 +f 456/972/287 457/973/287 458/974/287 +f 459/975/288 460/976/288 461/977/288 +f 462/978/289 452/968/289 463/979/289 +f 464/980/290 455/971/290 465/981/290 +f 466/982/291 458/974/291 467/983/291 +f 468/984/292 461/977/292 469/900/292 +f 470/985/293 471/986/293 472/987/293 +f 473/988/294 465/981/294 451/967/294 +f 474/989/295 466/982/295 454/970/295 +f 475/990/296 469/900/296 457/973/296 +f 476/991/297 472/987/297 460/976/297 +f 471/986/298 462/978/298 477/992/298 +f 443/959/299 444/960/299 466/982/299 +f 440/956/300 453/969/300 464/980/300 +f 436/952/301 438/954/301 462/978/301 +f 447/963/302 476/991/302 459/975/302 +f 444/960/303 445/961/303 456/972/303 +f 441/957/304 474/989/304 453/969/304 +f 438/954/305 439/955/305 450/966/305 +f 437/953/306 462/978/306 471/986/306 +f 448/964/307 470/985/307 476/991/307 +f 445/961/308 468/984/308 475/990/308 +f 442/958/309 443/959/309 474/989/309 +f 439/955/310 440/956/310 473/988/310 +f 449/965/311 471/986/311 470/985/311 +f 446/962/312 447/963/312 468/984/312 +f 460/918/269 472/918/269 478/918/269 +f 477/918/269 463/918/269 479/918/269 +f 452/918/269 451/918/269 480/918/269 +f 455/918/269 454/918/269 481/918/269 +f 458/918/269 457/918/269 482/918/269 +f 461/918/269 460/918/269 483/918/269 +f 463/918/269 452/918/269 484/918/269 +f 465/918/269 455/918/269 485/918/269 +f 467/918/269 458/918/269 486/918/269 +f 469/918/269 461/918/269 487/918/269 +f 472/918/269 477/918/269 488/918/269 +f 451/918/269 465/918/269 489/918/269 +f 454/918/269 467/918/269 490/918/269 +f 457/918/269 469/918/269 491/918/269 +f 484/993/313 480/994/313 492/995/313 +f 485/996/314 481/997/314 493/998/314 +f 486/999/315 482/1000/315 494/1001/315 +f 487/1002/316 495/1003/316 496/1004/316 +f 488/1005/317 497/1006/317 498/1007/317 +f 489/1008/318 493/1009/318 499/1010/318 +f 490/1011/319 494/1001/319 500/1012/319 +f 491/1013/320 487/1002/320 501/1014/320 +f 478/1015/321 498/1007/321 502/1016/321 +f 479/1017/322 484/993/322 497/1006/322 +f 480/1018/323 499/1010/323 503/1019/323 +f 481/1020/324 490/1011/324 504/1021/324 +f 482/1000/325 491/1022/325 505/1023/325 +f 483/1024/326 478/1025/326 495/1003/326 +f 497/1026/327 428/933/327 427/932/327 +f 492/1027/328 503/1028/328 428/933/328 +f 503/1019/329 425/929/329 432/950/329 +f 499/1010/330 493/1009/330 425/929/330 +f 493/1009/331 504/1029/331 426/930/331 +f 504/1030/332 500/1031/332 431/1032/332 +f 500/1031/333 494/1033/333 423/926/333 +f 494/1033/334 505/1034/334 424/927/334 +f 505/1034/335 501/1035/335 430/937/335 +f 501/1036/336 422/924/336 434/1037/336 +f 496/1038/337 429/935/337 422/924/337 +f 495/1039/338 433/944/338 429/935/338 +f 502/1040/339 421/921/339 433/1041/339 +f 498/1042/340 427/932/340 421/921/340 +f 395/901/255 373/879/255 385/891/255 +f 506/1043/240 362/868/240 361/867/240 +f 494/1001/315 482/1000/315 505/1023/315 +f 504/1021/324 490/1011/324 500/1012/324 +f 396/902/247 385/891/247 387/893/247 +f 406/916/262 365/871/262 391/897/262 +f 394/900/246 382/888/246 384/890/246 +f 501/1014/320 487/1002/320 496/1004/320 +f 505/1023/325 491/1022/325 501/1044/325 +f 402/917/241 380/886/241 379/885/241 +f 403/912/242 383/889/242 382/888/242 +f 405/915/244 389/895/244 388/894/244 +f 385/891/259 374/880/259 386/892/259 +f 429/935/275 414/922/275 422/924/275 +f 388/1045/248 390/904/248 397/903/248 +f 406/916/249 400/907/249 399/906/249 +f 393/1046/250 394/910/250 402/909/250 +f 466/982/299 444/960/299 456/972/299 +f 473/988/310 440/956/310 464/980/310 +f 400/907/254 391/897/254 392/898/254 +f 430/937/335 501/1035/335 434/946/335 +f 382/888/260 371/877/260 403/912/260 +f 393/899/256 370/876/256 382/888/256 +f 377/883/258 405/915/258 376/882/258 +f 403/912/265 372/878/265 395/901/265 +f 428/933/341 503/1028/341 432/941/341 +f 495/1003/326 478/1025/326 502/1047/326 +f 378/884/263 399/906/263 377/883/263 +f 375/881/264 397/913/264 374/880/264 +f 389/895/253 399/906/253 401/908/253 +f 369/875/266 393/899/266 368/874/266 +f 468/984/312 447/963/312 459/975/312 +f 401/918/269 407/918/269 417/918/269 +f 392/918/269 408/918/269 413/918/269 +f 380/918/269 409/918/269 418/918/269 +f 383/918/269 410/918/269 419/918/269 +f 404/918/269 411/918/269 420/918/269 +f 389/918/269 412/918/269 407/918/269 +f 381/918/269 413/918/269 409/918/269 +f 384/918/269 414/918/269 410/918/269 +f 387/918/269 415/918/269 411/918/269 +f 390/918/269 416/918/269 412/918/269 +f 400/918/269 417/918/269 408/918/269 +f 394/918/269 418/918/269 414/918/269 +f 396/918/269 419/918/269 415/918/269 +f 398/918/269 420/918/269 416/918/269 +f 421/921/270 409/920/270 433/1041/270 +f 404/914/252 397/913/252 398/1048/252 +f 411/947/272 423/926/272 415/925/272 +f 412/949/273 425/929/273 416/928/273 +f 408/942/274 427/932/274 417/931/274 +f 493/998/314 481/997/314 504/1049/314 +f 454/970/295 466/982/295 467/983/295 +f 416/928/277 426/930/277 420/938/277 +f 417/931/278 428/933/278 407/940/278 +f 427/932/279 413/919/279 421/921/279 +f 418/934/280 429/935/280 409/943/280 +f 419/936/281 430/937/281 410/945/281 +f 423/926/282 420/948/282 431/1032/282 +f 407/1050/283 432/950/283 412/949/283 +f 473/988/285 451/967/285 450/966/285 +f 474/989/286 454/970/286 453/969/286 +f 475/990/287 457/973/287 456/972/287 +f 476/991/288 460/976/288 459/975/288 +f 450/966/289 452/968/289 462/978/289 +f 453/969/290 455/971/290 464/980/290 +f 456/972/291 458/974/291 466/982/291 +f 459/975/292 461/977/292 468/984/292 +f 464/980/294 465/981/294 473/988/294 +f 383/889/251 395/901/251 396/902/251 +f 468/984/296 469/900/296 475/990/296 +f 470/985/297 472/987/297 476/991/297 +f 477/992/298 462/978/298 463/979/298 +f 474/989/309 443/959/309 466/982/309 +f 441/957/300 453/969/300 440/956/300 +f 448/964/302 476/991/302 447/963/302 +f 456/972/303 445/961/303 475/990/303 +f 442/958/304 474/989/304 441/957/304 +f 391/897/257 367/873/257 379/885/257 +f 436/952/306 462/978/306 437/953/306 +f 449/965/307 470/985/307 448/964/307 +f 446/962/308 468/984/308 445/961/308 +f 450/966/305 439/955/305 473/988/305 +f 462/978/301 438/954/301 450/966/301 +f 437/953/311 471/986/311 449/965/311 +f 379/885/261 368/874/261 402/917/261 +f 478/918/269 472/918/269 488/918/269 +f 479/918/269 463/918/269 484/918/269 +f 480/918/269 451/918/269 489/918/269 +f 481/918/269 454/918/269 490/918/269 +f 482/918/269 457/918/269 491/918/269 +f 483/918/269 460/918/269 478/918/269 +f 484/918/269 452/918/269 480/918/269 +f 485/918/269 455/918/269 481/918/269 +f 486/918/269 458/918/269 482/918/269 +f 487/918/269 461/918/269 483/918/269 +f 488/918/269 477/918/269 479/918/269 +f 489/918/269 465/918/269 485/918/269 +f 490/918/269 467/918/269 486/918/269 +f 491/918/269 469/918/269 487/918/269 +f 492/995/313 480/994/313 503/1051/313 +f 483/1024/316 495/1003/316 487/1002/316 +f 479/1017/317 497/1006/317 488/1005/317 +f 485/1052/318 493/1009/318 489/1008/318 +f 486/999/319 494/1001/319 490/1011/319 +f 392/898/245 379/885/245 381/887/245 +f 488/1005/321 498/1007/321 478/1015/321 +f 497/1006/322 484/993/322 492/995/322 +f 489/1008/323 499/1010/323 480/1018/323 +f 430/937/276 415/925/276 424/927/276 +f 492/1027/327 428/933/327 497/1026/327 +f 399/906/267 366/872/267 406/916/267 +f 499/1010/329 425/929/329 503/1019/329 +f 397/913/268 376/882/268 388/894/268 +f 426/930/331 504/1029/331 431/939/331 +f 431/1032/332 500/1031/332 423/926/332 +f 423/926/342 494/1033/342 424/927/342 +f 424/927/334 505/1034/334 430/937/334 +f 422/924/271 410/923/271 434/1037/271 +f 496/1038/336 422/924/336 501/1036/336 +f 495/1039/337 429/935/337 496/1038/337 +f 502/1053/338 433/944/338 495/1039/338 +f 498/1042/339 421/921/339 502/1040/339 +f 497/1026/340 427/932/340 498/1042/340 +f 425/929/330 493/1009/330 426/930/330 +f 472/987/293 471/986/293 477/992/293 +f 387/893/243 386/892/243 404/914/243 +o CargoLeft +v -1.902109 3.364694 3.769022 +v -1.902109 3.364695 2.453471 +v -1.902109 1.054079 2.453471 +v -0.697891 3.364695 2.453471 +v -0.697891 1.054079 2.453471 +v -0.697891 3.364694 3.769022 +v -0.697891 1.054078 3.769021 +v -1.902109 1.054078 3.769021 +vt 0.665272 0.333718 +vt 0.335739 0.334728 +vt 0.334728 0.005195 +vt 0.005196 0.334728 +vt 0.004185 0.005196 +vt 0.333718 0.004185 +vt 0.334728 0.664261 +vt 0.005195 0.665272 +vt 0.004185 0.335739 +vt 0.335739 0.665272 +vt 0.334728 0.335739 +vt 0.664261 0.334728 +vt 0.995815 0.333718 +vt 0.666282 0.334728 +vt 0.665272 0.005195 +vt 0.334728 0.666282 +vt 0.664261 0.665272 +vt 0.665272 0.994804 +vt 0.664261 0.004185 +vt 0.334728 0.333718 +vt 0.333718 0.334728 +vt 0.665272 0.664261 +vt 0.994804 0.004185 +vt 0.335739 0.995815 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 507/1054/343 508/1055/343 509/1056/343 +f 508/1057/344 510/1058/344 511/1059/344 +f 510/1060/345 512/1061/345 513/1062/345 +f 512/1063/346 507/1064/346 514/1065/346 +f 514/1066/347 509/1067/347 511/1068/347 +f 512/1069/348 510/1070/348 508/1071/348 +f 514/1072/343 507/1054/343 509/1056/343 +f 509/1073/344 508/1057/344 511/1059/344 +f 511/1074/345 510/1060/345 513/1062/345 +f 513/1075/346 512/1063/346 514/1065/346 +f 513/1076/347 514/1066/347 511/1068/347 +f 507/1077/348 512/1069/348 508/1071/348 +o CargoRight +v 0.697891 3.364694 3.769022 +v 0.697891 3.364695 2.453471 +v 0.697891 1.054079 2.453471 +v 1.902109 3.364695 2.453471 +v 1.902109 1.054079 2.453471 +v 1.902109 3.364694 3.769022 +v 1.902109 1.054078 3.769021 +v 0.697891 1.054078 3.769021 +vt 0.665758 0.333229 +vt 0.335257 0.334242 +vt 0.334242 0.003741 +vt 0.003742 0.334242 +vt 0.002728 0.003742 +vt 0.333229 0.002728 +vt 0.334242 0.664743 +vt 0.003741 0.665758 +vt 0.002728 0.335257 +vt 0.335257 0.665758 +vt 0.334242 0.335257 +vt 0.664743 0.334242 +vt 0.997272 0.333229 +vt 0.666771 0.334242 +vt 0.665758 0.003741 +vt 0.334242 0.666771 +vt 0.664743 0.665758 +vt 0.665758 0.996258 +vt 0.664743 0.002728 +vt 0.334242 0.333229 +vt 0.333229 0.334242 +vt 0.665758 0.664743 +vt 0.996258 0.002728 +vt 0.335257 0.997272 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 515/1078/349 516/1079/349 517/1080/349 +f 516/1081/350 518/1082/350 519/1083/350 +f 518/1084/351 520/1085/351 521/1086/351 +f 520/1087/352 515/1088/352 522/1089/352 +f 522/1090/353 517/1091/353 519/1092/353 +f 520/1093/354 518/1094/354 516/1095/354 +f 522/1096/349 515/1078/349 517/1080/349 +f 517/1097/350 516/1081/350 519/1083/350 +f 519/1098/351 518/1084/351 521/1086/351 +f 521/1099/352 520/1087/352 522/1089/352 +f 521/1100/353 522/1090/353 519/1092/353 +f 515/1101/354 520/1093/354 516/1095/354 +o Wheel_Front_Left +v -2.158457 2.342700 -2.371579 +v -2.158457 2.331936 -3.049924 +v -2.164515 2.305865 -3.022343 +v -1.870411 2.054904 -3.677749 +v -2.158457 2.014275 -3.631468 +v -1.870411 2.388159 -3.067658 +v -1.429098 1.911396 -3.514281 +v -1.582364 2.014275 -3.631468 +v -1.582365 2.331936 -3.049924 +v -2.158457 2.331936 -3.049924 +v -1.870411 2.399451 -2.356014 +v -1.429098 2.189574 -3.005019 +v -1.582365 2.342700 -2.371579 +v -2.158457 2.342700 -2.371579 +v -2.158457 2.043683 -1.778194 +v -1.429098 2.199000 -2.410990 +v -1.429098 1.937149 -1.891360 +v -1.582365 2.043683 -1.778194 +v -1.870411 2.085756 -1.733501 +v -2.158457 1.515007 -1.428767 +v -1.429098 1.474185 -1.585365 +v -1.582365 1.515006 -1.428767 +v -1.870411 1.531128 -1.366922 +v -2.158457 0.898329 -1.416927 +v -1.429099 0.934157 -1.574996 +v -1.582365 0.898329 -1.416927 +v -1.876468 2.028834 -3.623287 +v -1.876468 2.362088 -3.039317 +v -2.164514 1.988204 -3.578987 +v -1.435156 1.885326 -3.466818 +v -1.435156 2.163503 -2.979362 +v -1.588422 2.305865 -3.022343 +v -1.588421 1.988204 -3.578988 +v -1.876468 2.373381 -2.358143 +v -2.164514 2.305865 -3.022343 +v -1.435156 2.172929 -2.410764 +v -1.588422 2.316629 -2.373041 +v -1.876468 2.059686 -1.762283 +v -2.164514 2.017613 -1.805062 +v -1.435156 1.911079 -1.913384 +v -1.588422 2.017612 -1.805063 +v -1.876468 1.505058 -1.411399 +v -2.164515 1.488936 -1.470597 +v -1.435156 1.448114 -1.620490 +v -1.588422 1.488936 -1.470597 +v -1.876468 0.858109 -1.399510 +v -2.164515 0.872258 -1.459264 +v -1.435156 0.908087 -1.610565 +v -1.588422 0.872258 -1.459263 +v -1.870411 0.884179 -1.354501 +v -2.164514 2.316629 -2.373041 +v -2.164515 2.316629 -2.373041 +v -1.850083 0.951980 -3.725186 +v -1.900084 0.951980 -3.725186 +v -1.900084 0.451980 -3.591211 +v -1.850083 0.451980 -3.591211 +v -1.900084 0.085955 -3.225186 +v -1.850084 0.085955 -3.225186 +v -1.900084 -0.048020 -2.725186 +v -1.850084 -0.048020 -2.725186 +v -1.850084 0.085955 -2.225186 +v -1.900084 0.085955 -2.225186 +v -1.900084 0.451980 -1.859161 +v -1.850084 0.451980 -1.859161 +v -1.850084 0.951980 -1.725186 +v -1.900084 0.951980 -1.725186 +v -1.900084 1.451980 -1.859161 +v -1.850084 1.451980 -1.859161 +v -1.900084 1.818006 -2.225186 +v -1.850084 1.818006 -2.225186 +v -1.900084 1.951980 -2.725186 +v -1.850084 1.951980 -2.725186 +v -1.900084 1.818006 -3.225186 +v -1.900084 1.451981 -3.591211 +v -1.850083 1.451981 -3.591211 +v -1.850084 1.818006 -3.225186 +v -1.870411 -0.188146 -2.380640 +v -1.870411 -0.199439 -3.027588 +v -2.158457 -0.142687 -3.013439 +v -2.158458 -0.131923 -2.396761 +v -2.311724 0.010439 -2.437583 +v -2.311724 0.001013 -2.977610 +v -2.258495 0.164422 -2.936868 +v -2.258495 0.172327 -2.484003 +v -2.023677 0.271080 -3.002819 +v -1.717145 0.277992 -2.408860 +v -2.023677 0.277992 -2.408860 +v -1.789579 0.677965 -2.413515 +v -1.717145 0.271080 -3.002819 +v -1.482328 0.172327 -2.484003 +v -1.482328 0.164422 -2.936868 +v -1.429099 0.001013 -2.977610 +v -1.429099 0.010439 -2.437583 +v -1.582365 -0.131923 -2.396761 +v -1.582365 -0.142687 -3.013439 +v -1.870411 0.114256 -3.593509 +v -2.158457 0.156330 -3.552879 +v -2.311723 0.262863 -3.450001 +v -2.258495 0.384009 -3.333012 +v -2.023677 0.463081 -3.256654 +v -1.717145 0.463081 -3.256653 +v -1.482328 0.384009 -3.333012 +v -1.429099 0.262863 -3.450001 +v -1.582364 0.156330 -3.552879 +v -1.870411 0.668884 -3.926763 +v -2.158457 0.685006 -3.870540 +v -2.311723 0.725828 -3.728178 +v -2.258495 0.772248 -3.566290 +v -2.023677 0.697105 -3.460625 +v -1.717145 0.697105 -3.460625 +v -1.482327 0.772248 -3.566290 +v -1.429098 0.725828 -3.728178 +v -1.582364 0.685006 -3.870540 +v -1.870411 1.315833 -3.938056 +v -2.158457 1.301684 -3.881304 +v -2.311723 1.265855 -3.737604 +v -2.258495 1.225113 -3.574195 +v -2.023677 1.291064 -3.467537 +v -1.789579 0.701760 -3.060652 +v -1.717145 1.291064 -3.467537 +v -1.482327 1.225113 -3.574195 +v -1.429098 1.265855 -3.737604 +v -1.582364 1.301684 -3.881304 +v -1.870411 1.881754 -3.624361 +v -2.158457 1.841124 -3.582288 +v -2.311723 1.738246 -3.475754 +v -2.258495 1.621257 -3.354609 +v -2.023677 1.544898 -3.275536 +v -1.717145 1.544898 -3.275536 +v -1.482327 1.621257 -3.354609 +v -1.429099 1.738246 -3.475754 +v -1.582364 1.841124 -3.582288 +v -1.870411 2.215008 -3.069733 +v -2.158457 2.158785 -3.053611 +v -2.311723 2.016423 -3.012789 +v -2.258494 1.854535 -2.966369 +v -2.023677 1.748870 -3.041512 +v -1.717145 1.748870 -3.041512 +v -1.482327 1.854535 -2.966369 +v -1.429099 2.016423 -3.012789 +v -1.582365 2.158785 -3.053611 +v -1.870411 2.226301 -2.422784 +v -2.158457 2.169550 -2.436934 +v -2.311723 2.025850 -2.472762 +v -2.258494 1.862440 -2.513505 +v -2.023677 1.755782 -2.447553 +v -1.717145 1.755782 -2.447553 +v -1.789579 1.348897 -3.036857 +v -1.482327 1.862440 -2.513505 +v -1.429099 2.025850 -2.472762 +v -1.582365 2.169550 -2.436934 +v -1.870411 1.912606 -1.856863 +v -2.158457 1.870533 -1.897493 +v -2.311723 1.763999 -2.000371 +v -2.258495 1.642853 -2.117360 +v -2.023677 1.563781 -2.193719 +v -1.717145 1.563781 -2.193719 +v -1.482327 1.642853 -2.117360 +v -1.429099 1.763999 -2.000371 +v -1.582365 1.870533 -1.897493 +v -1.870411 1.357978 -1.523609 +v -2.158457 1.341856 -1.579832 +v -2.311723 1.301035 -1.722195 +v -2.258495 1.254614 -1.884082 +v -2.023677 1.329757 -1.989747 +v -1.717145 1.329757 -1.989747 +v -1.482327 1.254614 -1.884082 +v -1.429099 1.301035 -1.722194 +v -1.582365 1.341856 -1.579832 +v -1.870411 0.711029 -1.512317 +v -2.158457 0.725179 -1.569068 +v -2.311724 0.761007 -1.712768 +v -2.258495 0.801750 -1.876178 +v -2.023677 0.735798 -1.982836 +v -1.717145 0.735798 -1.982835 +v -1.789579 0.731144 -2.382808 +v -1.482328 0.801750 -1.876177 +v -1.429099 0.761007 -1.712768 +v -1.582365 0.725179 -1.569068 +v -1.870411 0.145108 -1.826011 +v -2.158457 0.185738 -1.868086 +v -2.311724 0.288616 -1.974619 +v -2.258495 0.405605 -2.095764 +v -2.023677 0.481964 -2.174836 +v -1.717145 0.481964 -2.174836 +v -1.482328 0.405605 -2.095764 +v -1.429099 0.288616 -1.974618 +v -1.582365 0.185738 -1.868085 +v -2.023677 0.677965 -2.413515 +v -2.023677 0.671053 -3.007474 +v -1.789579 0.671053 -3.007474 +v -2.023677 1.325102 -2.389720 +v -2.023677 0.731144 -2.382808 +v -1.789579 1.325102 -2.389720 +v -2.023677 0.701760 -3.060652 +v -2.023677 1.295719 -3.067564 +v -1.789579 1.295719 -3.067564 +v -2.023677 1.348897 -3.036857 +v -2.023677 1.355809 -2.442899 +v -1.789579 1.355809 -2.442899 +v -1.229049 1.030662 -2.679246 +v -1.229049 1.030662 -2.779246 +v -1.229049 0.930661 -2.779246 +v -1.979049 1.030661 -2.779246 +v -1.979049 1.030661 -2.679246 +v -1.979049 0.930661 -2.679246 +v -1.229049 0.930661 -2.679246 +v -1.979049 0.930661 -2.779246 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.910683 0.300978 +vt 0.809306 0.257189 +vt 0.909096 0.189316 +vt 0.910412 0.212777 +vt 0.813439 0.213075 +vt 0.809743 0.623328 +vt 0.767033 0.617540 +vt 0.802385 0.525003 +vt 0.879881 0.601532 +vt 0.854311 0.617005 +vt 0.847297 0.523282 +vt 0.760018 0.523817 +vt 0.759950 0.422158 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.034640 0.930186 +vt 0.035491 0.837783 +vt 0.717705 0.625829 +vt 0.733319 0.644430 +vt 0.644609 0.664429 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.951706 0.579252 +vt 0.879881 0.623132 +vt 0.478460 0.803029 +vt 0.478430 0.717127 +vt 0.500209 0.712612 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.569142 0.723746 +vt 0.526132 0.633686 +vt 0.638417 0.647297 +vt 0.637757 0.727411 +vt 0.613524 0.724631 +vt 0.614279 0.633145 +vt 0.570116 0.826337 +vt 0.526305 0.822962 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.572592 0.908051 +vt 0.528666 0.900853 +vt 0.297174 0.516355 +vt 0.319506 0.435521 +vt 0.317310 0.526612 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.949424 0.850572 +vt 0.954393 0.894658 +vt 0.296963 0.355991 +vt 0.342811 0.434304 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.759950 0.463023 +vt 0.715956 0.387746 +vt 0.180286 0.719972 +vt 0.178395 0.816963 +vt 0.172762 0.815779 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.079592 0.837849 +vt 0.078713 0.832630 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.330475 0.803455 +vt 0.323102 0.798341 +vt 0.649849 0.688510 +vt 0.643343 0.684515 +vt 0.314149 0.815081 +vt 0.296963 0.773641 +vt 0.306193 0.772760 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.314792 0.700967 +vt 0.306170 0.727741 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vt 0.513624 0.783997 +vt 0.506188 0.712612 +vt 0.505969 0.783973 +vt 0.949158 0.484385 +vt 0.944659 0.410168 +vt 0.941584 0.484478 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.342603 0.674991 +vt 0.335156 0.743134 +vt 0.334704 0.595770 +vt 0.334948 0.675014 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.523482 0.675613 +vt 0.521494 0.627793 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.598820 0.371478 +vt 0.530171 0.331957 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.109074 0.639268 +vt 0.000848 0.531055 +vt 0.830015 0.623328 +vt 0.792389 0.714799 +vt 0.837273 0.712605 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.462495 0.306756 +vt 0.455687 0.331872 +vt 0.758447 0.693332 +vt 0.721737 0.772501 +vt 0.757332 0.757109 +vt 0.340460 0.815081 +vt 0.297072 0.826038 +vt 0.340316 0.862012 +vt 0.676280 0.688510 +vt 0.639684 0.692967 +vt 0.674834 0.772357 +vt 0.225458 0.066465 +vt 0.157773 0.024179 +vt 0.158175 0.049709 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.879661 0.713728 +vt 0.872743 0.628628 +vt 0.792493 0.808950 +vt 0.837383 0.811379 +vt 0.766009 0.719283 +vt 0.402470 0.272035 +vt 0.384108 0.290468 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.638639 0.825588 +vt 0.675115 0.819426 +vt 0.078288 0.046975 +vt 0.091518 0.068826 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.785756 0.886926 +vt 0.830315 0.893182 +vt 0.760201 0.870015 +vt 0.367839 0.211969 +vt 0.342811 0.218841 +vt 0.722613 0.861988 +vt 0.758639 0.881416 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.000874 0.094773 +vt 0.020847 0.106443 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.366797 0.631670 +vt 0.410612 0.724746 +vt 0.343300 0.641815 +vt 0.366513 0.724108 +vt 0.367882 0.142652 +vt 0.342862 0.136182 +vt 0.880326 0.806458 +vt 0.916070 0.738915 +vt 0.880176 0.757653 +vt 0.651005 0.881416 +vt 0.661972 0.937679 +vt 0.697339 0.884549 +vt 0.963197 0.803150 +vt 0.999158 0.806093 +vt 0.963001 0.738770 +vt 0.000842 0.186648 +vt 0.026573 0.185955 +vt 0.478430 0.642230 +vt 0.454713 0.724378 +vt 0.478182 0.723178 +vt 0.454997 0.631940 +vt 0.366238 0.813802 +vt 0.410323 0.818844 +vt 0.342811 0.801309 +vt 0.402587 0.082657 +vt 0.384247 0.064640 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.998802 0.690392 +vt 0.962852 0.690423 +vt 0.023635 0.266097 +vt 0.045687 0.252581 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.366045 0.876721 +vt 0.410121 0.884850 +vt 0.368574 0.047943 +vt 0.455878 0.023384 +vt 0.450371 0.000831 +vt 0.462656 0.048059 +vt 0.915776 0.643196 +vt 0.879766 0.623692 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.071984 0.342642 +vt 0.083117 0.323505 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.184003 0.645063 +vt 0.227051 0.730389 +vt 0.538560 0.023470 +vt 0.544788 0.000929 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.037804 0.750424 +vt 0.000842 0.766738 +vt 0.941584 0.331962 +vt 0.879881 0.422891 +vt 0.941398 0.422896 +vt 0.090587 0.832202 +vt 0.123318 0.828165 +vt 0.084243 0.749997 +vt 0.163350 0.343486 +vt 0.162852 0.317479 +vt 0.296292 0.658368 +vt 0.271432 0.731379 +vt 0.295662 0.734429 +vt 0.272151 0.644522 +vt 0.183284 0.731920 +vt 0.228056 0.828732 +vt 0.610139 0.064873 +vt 0.626527 0.048208 +vt 0.000978 0.697596 +vt 0.085329 0.702418 +vt 0.038890 0.702846 +vt 0.118564 0.696514 +vt 0.242837 0.320688 +vt 0.229508 0.298361 +vt 0.272390 0.825121 +vt 0.296500 0.816519 +vt 0.184242 0.825662 +vt 0.230552 0.907946 +vt 0.673686 0.130002 +vt 0.592019 0.082852 +vt 0.651436 0.136500 +vt 0.041316 0.659523 +vt 0.006100 0.640350 +vt 0.087755 0.659095 +vt 0.300278 0.261221 +vt 0.277678 0.248491 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.785112 0.254285 +vt 0.741202 0.192204 +vt 0.651385 0.219160 +vt 0.673628 0.224394 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.845561 0.100185 +vt 0.809649 0.113269 +vt 0.183284 0.908088 +vt 0.222683 0.963363 +vt 0.229724 0.907946 +vt 0.892764 0.189172 +vt 0.928690 0.180787 +vt 0.892491 0.100041 +vt 0.320282 0.181017 +vt 0.294454 0.181233 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.785595 0.096730 +vt 0.741495 0.096636 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.591902 0.272231 +vt 0.609999 0.290702 +vt 0.809448 0.047401 +vt 0.892357 0.056365 +vt 0.845426 0.056510 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.697396 0.096460 +vt 0.673931 0.096282 +vt 0.785876 0.005407 +vt 0.741789 0.000831 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.845312 0.019129 +vt 0.809306 0.001196 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.332779 0.615853 +vt 0.296963 0.616402 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.709710 0.331848 +vt 0.720616 0.271792 +vt 0.879860 0.985796 +vt 0.940684 0.894960 +vt 0.879766 0.894861 +vt 0.297236 0.615853 +vt 0.332803 0.526612 +vt 0.296963 0.526722 +vt 0.941258 0.444023 +vt 0.879881 0.443788 +vt 0.941321 0.534932 +vt 0.133383 0.904255 +vt 0.143492 0.960751 +vt 0.180286 0.904398 +vt 0.478430 0.884894 +vt 0.417169 0.975757 +vt 0.478402 0.975800 +vt 0.767744 0.331957 +vt 0.803584 0.331848 +vt 0.767547 0.267577 +vt 0.818505 0.984088 +vt 0.879766 0.893225 +vt 0.818532 0.893182 +vt 0.911101 0.280588 +vt 0.972132 0.189316 +vt 0.911038 0.189679 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.478457 0.710220 +vt 0.513843 0.712612 +vt 0.297106 0.908942 +vt 0.340350 0.872968 +vt 0.296963 0.862012 +vt 0.404092 0.884869 +vt 0.342811 0.975783 +vt 0.404028 0.975801 +vt 0.767547 0.331957 +vt 0.756641 0.271902 +vt 0.720616 0.331814 +vt 0.818894 0.331951 +vt 0.803584 0.316653 +vt 0.803585 0.331957 +vt 0.485203 0.925578 +vt 0.500243 0.925532 +vt 0.484851 0.810753 +vt 0.818889 0.301333 +vt 0.803584 0.316647 +vt 0.818888 0.316642 +vt 0.015117 0.947455 +vt 0.026433 0.832663 +vt 0.015470 0.832630 +vt 0.001191 0.833505 +vt 0.014769 0.946257 +vt 0.015117 0.832630 +vt 0.943226 0.115741 +vt 0.928690 0.000831 +vt 0.929041 0.115591 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.188269 0.343486 +vt 0.109050 0.343516 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.974900 -0.222800 0.003500 +vn -0.196900 0.860400 -0.470000 +vn 0.690900 0.634500 -0.346600 +vn 0.196900 0.860400 -0.470000 +vn -0.192500 0.981200 -0.015600 +vn 0.682300 0.730900 -0.011600 +vn 0.192500 0.981200 -0.015600 +vn -0.196400 0.875600 0.441200 +vn 0.689900 0.646500 0.325800 +vn 0.196400 0.875600 0.441200 +vn -0.205500 0.539600 0.816400 +vn 0.706800 0.390000 0.590100 +vn 0.205500 0.539600 0.816400 +vn -0.210900 0.018800 0.977300 +vn 0.716300 0.013400 0.697600 +vn 0.210900 0.018800 0.977300 +vn 0.194900 -0.851900 0.486100 +vn -0.687100 -0.631000 0.360100 +vn -0.194900 -0.851900 0.486100 +vn 0.192500 -0.981200 0.016300 +vn -0.682300 -0.730900 0.012100 +vn -0.192500 -0.981200 0.016300 +vn 0.194600 -0.867900 -0.456900 +vn -0.686600 -0.643400 -0.338700 +vn -0.194600 -0.867900 -0.456900 +vn 0.199500 -0.523900 -0.828100 +vn -0.695800 -0.384000 -0.606900 +vn -0.199500 -0.523900 -0.828100 +vn 0.202200 -0.018000 -0.979200 +vn -0.700900 -0.013100 -0.713100 +vn -0.202200 -0.018000 -0.979200 +vn 0.983300 -0.100300 -0.151700 +vn 0.974800 -0.223000 0.003500 +vn -0.986700 0.089600 0.135500 +vn 0.991300 -0.115500 0.063100 +vn 0.146700 -0.864400 0.480900 +vn -0.989900 0.002700 0.141700 +vn 0.967500 -0.225800 -0.113800 +vn -0.992100 0.109800 -0.060000 +vn 0.559600 -0.739100 0.375100 +vn -0.152200 -0.846200 0.510600 +vn 0.059000 -0.903000 -0.425700 +vn -0.985800 0.148500 0.078200 +vn -0.056600 -0.898100 -0.436200 +vn -0.230500 -0.860600 -0.454100 +vn 0.985800 -0.003200 -0.167600 +vn 0.974000 -0.226500 0.003800 +vn 0.990500 -0.073500 -0.116200 +vn 0.974000 -0.226300 0.003800 +vn -0.992500 0.065200 0.103100 +vn 0.985600 -0.146700 0.083700 +vn 0.146300 -0.851500 0.503500 +vn -0.990100 0.002600 0.140100 +vn 0.983900 -0.158300 -0.083300 +vn -0.986400 0.142900 -0.081500 +vn 0.576100 -0.702900 0.417100 +vn -0.151600 -0.831800 0.533900 +vn 0.059000 -0.896700 -0.438700 +vn -0.056600 -0.891500 -0.449400 +vn -0.208300 -0.845800 -0.491200 +vn 0.986200 -0.003000 -0.165700 +vn -0.969500 0.219000 0.110400 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn 1.000000 0.000000 0.000000 +vn -0.192500 -0.981200 0.017100 +vn -0.682300 -0.730900 0.012800 +vn -0.950400 0.310900 -0.005400 +vn -0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn 0.407500 0.913100 -0.010600 +vn 0.950400 0.310900 -0.005400 +vn 0.682300 -0.730900 0.012800 +vn 0.192500 -0.981200 0.017100 +vn -0.192500 -0.858300 -0.475700 +vn -0.682300 -0.639400 -0.354400 +vn -0.950400 0.272000 0.150800 +vn -0.252600 0.846200 0.469100 +vn 0.000000 0.797500 0.603300 +vn 0.421400 0.723300 0.547100 +vn 0.950400 0.272000 0.150800 +vn 0.682300 -0.639400 -0.354400 +vn 0.192500 -0.858300 -0.475700 +vn -0.192500 -0.505400 -0.841100 +vn -0.682300 -0.376500 -0.626600 +vn -0.950400 0.160200 0.266600 +vn -0.215700 0.502900 0.837000 +vn -0.000000 0.657000 0.753900 +vn 0.422700 0.595500 0.683200 +vn 0.950400 0.160200 0.266600 +vn 0.682300 -0.376500 -0.626600 +vn 0.192500 -0.505400 -0.841100 +vn -0.192500 -0.017100 -0.981200 +vn -0.682300 -0.012800 -0.730900 +vn -0.950400 0.005400 0.310900 +vn -0.417200 0.015900 0.908700 +vn -0.000000 -0.999900 0.011600 +vn 0.407500 0.010600 0.913100 +vn 0.950400 0.005400 0.310900 +vn 0.682300 -0.012800 -0.730900 +vn 0.192500 -0.017100 -0.981200 +vn -0.192500 0.475700 -0.858300 +vn -0.682300 0.354400 -0.639400 +vn -0.950400 -0.150800 0.272000 +vn -0.252600 -0.469100 0.846200 +vn -0.000000 -0.603300 0.797500 +vn 0.421400 -0.547100 0.723300 +vn 0.950400 -0.150800 0.272000 +vn 0.682300 0.354400 -0.639400 +vn 0.192500 0.475700 -0.858300 +vn -0.192500 0.841100 -0.505400 +vn -0.682300 0.626600 -0.376500 +vn -0.950400 -0.266600 0.160200 +vn -0.215700 -0.837000 0.502900 +vn 0.000000 -0.753900 0.657000 +vn 0.422700 -0.683200 0.595500 +vn 0.950400 -0.266600 0.160200 +vn 0.682300 0.626600 -0.376500 +vn 0.192500 0.841100 -0.505400 +vn -0.192500 0.981200 -0.017100 +vn -0.682300 0.730900 -0.012800 +vn -0.950400 -0.310900 0.005400 +vn -0.417200 -0.908700 0.015900 +vn 0.984000 -0.178200 0.002100 +vn 0.407500 -0.913100 0.010600 +vn 0.950400 -0.310900 0.005400 +vn 0.682300 0.730900 -0.012800 +vn 0.192500 0.981200 -0.017100 +vn -0.192500 0.858300 0.475700 +vn -0.682300 0.639400 0.354400 +vn -0.950400 -0.272000 -0.150800 +vn -0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn 0.421400 -0.723300 -0.547100 +vn 0.950400 -0.272000 -0.150800 +vn 0.682300 0.639400 0.354400 +vn 0.192500 0.858300 0.475700 +vn -0.192500 0.505400 0.841100 +vn -0.682300 0.376500 0.626600 +vn -0.950400 -0.160200 -0.266600 +vn -0.215700 -0.502900 -0.837000 +vn 0.000000 -0.657000 -0.753900 +vn 0.422700 -0.595500 -0.683200 +vn 0.950400 -0.160200 -0.266600 +vn 0.682300 0.376500 0.626600 +vn 0.192500 0.505400 0.841100 +vn -0.192500 0.017100 0.981200 +vn -0.682300 0.012800 0.730900 +vn -0.950400 -0.005400 -0.310900 +vn -0.417200 -0.015900 -0.908700 +vn 0.407500 -0.010600 -0.913100 +vn 0.950400 -0.005400 -0.310900 +vn 0.682300 0.012800 0.730900 +vn 0.192500 0.017100 0.981200 +vn -0.192500 -0.475700 0.858300 +vn -0.682300 -0.354400 0.639400 +vn -0.950400 0.150800 -0.272000 +vn -0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn 0.421400 0.547100 -0.723300 +vn 0.950400 0.150800 -0.272000 +vn 0.682300 -0.354400 0.639400 +vn 0.192500 -0.475700 0.858300 +vn -0.192500 -0.841100 0.505400 +vn -0.682300 -0.626600 0.376500 +vn -0.950400 0.266600 -0.160200 +vn -0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn 0.422700 0.683200 -0.595500 +vn 0.950400 0.266600 -0.160200 +vn 0.682300 -0.626600 0.376500 +vn 0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn 0.984000 0.178200 -0.002100 +vn 0.984000 -0.002100 -0.178200 +vn 0.984000 0.002100 0.178200 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.407500 0.913100 -0.010600 +vn 0.417200 0.908700 -0.015900 +vn -0.421400 0.723300 0.547100 +vn 0.252600 0.846200 0.469100 +vn -0.422700 0.595500 0.683200 +vn 0.215700 0.502900 0.837000 +vn -0.407500 0.010600 0.913100 +vn 0.417200 0.015900 0.908700 +vn -0.421400 -0.547100 0.723300 +vn 0.252600 -0.469100 0.846200 +vn -0.422700 -0.683200 0.595500 +vn 0.215700 -0.837000 0.502900 +vn -0.407500 -0.913100 0.010600 +vn 0.417200 -0.908700 0.015900 +vn -0.421400 -0.723300 -0.547100 +vn 0.252600 -0.846200 -0.469100 +vn -0.422700 -0.595500 -0.683200 +vn 0.215700 -0.502900 -0.837000 +vn -0.407500 -0.010600 -0.913100 +vn 0.417200 -0.015900 -0.908700 +vn -0.421400 0.547100 -0.723300 +vn 0.252600 0.469100 -0.846200 +vn -0.422700 0.683200 -0.595500 +vn 0.215700 0.837000 -0.502900 +usemtl None.010 +f 523/1102/355 525/1103/355 524/1104/355 +f 526/1105/356 527/1106/356 528/1107/356 +f 529/1108/357 530/1109/357 531/1110/357 +f 530/1109/358 526/1105/358 528/1107/358 +f 528/1111/359 532/1112/359 533/1113/359 +f 534/1114/360 531/1115/360 535/1116/360 +f 531/1115/361 528/1111/361 533/1113/361 +f 533/1113/362 536/1117/362 537/1118/362 +f 538/1119/363 535/1116/363 539/1120/363 +f 535/1116/364 533/1113/364 540/1121/364 +f 541/1122/365 537/1118/365 542/1123/365 +f 539/1120/366 540/1121/366 543/1124/366 +f 540/1121/367 541/1122/367 544/1125/367 +f 545/1126/368 542/1127/368 546/1128/368 +f 543/1129/369 544/1130/369 547/1131/369 +f 544/1132/370 545/1126/370 548/1133/370 +f 549/1134/371 550/1135/371 551/1136/371 +f 552/1137/372 553/1138/372 554/1139/372 +f 555/1140/373 554/1141/373 550/1135/373 +f 550/1142/374 556/1143/374 557/1144/374 +f 553/1145/375 558/1146/375 559/1147/375 +f 554/1148/376 559/1147/376 556/1143/376 +f 556/1143/377 560/1149/377 561/1150/377 +f 558/1146/378 562/1151/378 559/1147/378 +f 559/1147/379 563/1152/379 556/1143/379 +f 560/1149/380 564/1153/380 565/1154/380 +f 562/1155/381 566/1156/381 563/1157/381 +f 563/1152/382 567/1158/382 560/1149/382 +f 564/1159/383 568/1160/383 569/1161/383 +f 566/1156/384 570/1162/384 567/1163/384 +f 567/1164/385 571/1165/385 564/1159/385 +f 539/1166/386 543/1129/386 562/1167/386 +f 534/1168/387 538/1169/387 553/1170/387 +f 542/1171/388 537/1172/388 561/1173/388 +f 529/1174/389 534/1168/389 552/1175/389 +f 548/1133/390 572/1176/390 568/1177/390 +f 546/1178/391 542/1171/391 565/1179/391 +f 538/1169/392 539/1166/392 558/1180/392 +f 532/1181/393 527/1182/393 551/1183/393 +f 547/1131/394 548/1184/394 571/1185/394 +f 572/1176/395 546/1128/395 568/1177/395 +f 527/1186/396 526/1187/396 549/1188/396 +f 561/1173/397 537/1172/397 573/1189/397 +f 526/1187/398 530/1190/398 549/1188/398 +f 530/1190/399 529/1191/399 555/1192/399 +f 543/1129/400 547/1131/400 566/1193/400 +f 574/1194/401 525/1103/401 523/1102/401 +f 527/1106/356 532/1195/356 528/1107/356 +f 534/1196/357 529/1108/357 531/1110/357 +f 531/1110/358 530/1109/358 528/1107/358 +f 532/1112/359 536/1117/359 533/1113/359 +f 538/1119/360 534/1114/360 535/1116/360 +f 535/1116/361 531/1115/361 533/1113/361 +f 541/1122/362 533/1113/362 537/1118/362 +f 535/1116/363 540/1121/363 539/1120/363 +f 533/1113/364 541/1122/364 540/1121/364 +f 545/1197/365 541/1122/365 542/1123/365 +f 540/1121/366 544/1125/366 543/1124/366 +f 541/1122/367 545/1197/367 544/1125/367 +f 572/1176/368 545/1126/368 546/1128/368 +f 544/1130/369 548/1184/369 547/1131/369 +f 545/1126/370 572/1176/370 548/1133/370 +f 550/1135/371 557/1198/371 551/1136/371 +f 555/1199/372 552/1137/372 554/1139/372 +f 549/1134/373 555/1140/373 550/1135/373 +f 556/1143/374 573/1200/374 557/1144/374 +f 554/1148/375 553/1145/375 559/1147/375 +f 550/1142/376 554/1148/376 556/1143/376 +f 573/1200/377 556/1143/377 561/1150/377 +f 562/1151/378 563/1152/378 559/1147/378 +f 563/1152/379 560/1149/379 556/1143/379 +f 561/1150/380 560/1149/380 565/1154/380 +f 566/1156/381 567/1163/381 563/1157/381 +f 567/1158/382 564/1153/382 560/1149/382 +f 565/1201/383 564/1159/383 569/1161/383 +f 570/1162/384 571/1202/384 567/1163/384 +f 571/1165/385 568/1160/385 564/1159/385 +f 543/1129/402 566/1193/402 562/1167/402 +f 538/1169/403 558/1180/403 553/1170/403 +f 565/1179/404 542/1171/404 561/1173/404 +f 534/1168/405 553/1170/405 552/1175/405 +f 571/1203/406 548/1133/406 568/1177/406 +f 569/1204/407 546/1178/407 565/1179/407 +f 539/1166/408 562/1167/408 558/1180/408 +f 557/1205/409 532/1181/409 551/1183/409 +f 570/1206/410 547/1131/410 571/1185/410 +f 546/1128/411 569/1207/411 568/1177/411 +f 551/1208/412 527/1186/412 549/1188/412 +f 530/1190/413 555/1192/413 549/1188/413 +f 529/1191/414 552/1209/414 555/1192/414 +f 547/1131/415 570/1206/415 566/1193/415 +f 537/1172/416 536/1210/416 573/1189/416 +f 575/1211/417 577/1212/417 576/1213/417 +f 578/1214/418 579/1215/418 577/1216/418 +f 580/1217/419 581/1218/419 579/1215/419 +f 582/1219/420 583/1220/420 581/1221/420 +f 583/1220/421 585/1222/421 584/1223/421 +f 586/1224/422 587/1225/422 585/1222/422 +f 587/1226/423 589/1227/423 588/1228/423 +f 590/1229/424 591/1230/424 589/1227/424 +f 592/1231/425 593/1232/425 591/1230/425 +f 594/1233/426 595/1234/426 593/1232/426 +f 577/1235/427 596/1236/427 576/1237/427 +f 597/1238/428 575/1211/428 596/1239/428 +f 598/1240/429 596/1239/429 595/1241/429 +f 575/1242/430 597/1243/430 578/1244/430 +f 599/1245/431 601/1246/431 600/1247/431 +f 602/1248/432 603/1249/432 601/1246/432 +f 603/1250/433 605/1251/433 604/1252/433 +f 606/1253/434 607/1254/434 605/1255/434 +f 608/1256/435 610/1257/435 609/1258/435 +f 608/1259/436 612/1260/436 611/1261/436 +f 612/1262/437 614/1263/437 613/1264/437 +f 615/1265/438 616/1266/438 614/1263/438 +f 599/1245/439 617/1267/439 616/1268/439 +f 600/1247/440 619/1269/440 618/1270/440 +f 601/1246/441 604/1271/441 619/1269/441 +f 604/1252/442 621/1272/442 620/1273/442 +f 605/1255/443 607/1254/443 621/1274/443 +f 607/1254/444 611/1261/444 622/1275/444 +f 611/1261/445 624/1276/445 623/1277/445 +f 613/1264/446 625/1278/446 624/1279/446 +f 614/1263/447 626/1280/447 625/1278/447 +f 617/1267/448 600/1247/448 626/1281/448 +f 618/1270/449 628/1282/449 627/1283/449 +f 619/1269/450 629/1284/450 628/1282/450 +f 620/1273/451 630/1285/451 629/1286/451 +f 621/1274/452 631/1287/452 630/1288/452 +f 622/1275/453 623/1277/453 631/1287/453 +f 623/1277/454 624/1276/454 632/1289/454 +f 624/1279/455 625/1278/455 633/1290/455 +f 625/1278/456 635/1291/456 634/1292/456 +f 626/1281/457 627/1283/457 635/1293/457 +f 627/1294/458 628/1295/458 636/1296/458 +f 628/1295/459 629/1297/459 637/1298/459 +f 629/1286/460 639/1299/460 638/1300/460 +f 630/1301/461 640/1302/461 639/1303/461 +f 632/1304/462 641/1305/462 631/1306/462 +f 632/1307/463 633/1308/463 642/1309/463 +f 633/1290/464 644/1310/464 643/1311/464 +f 634/1312/465 645/1313/465 644/1314/465 +f 635/1315/466 636/1296/466 645/1313/466 +f 636/1296/467 647/1316/467 646/1317/467 +f 637/1298/468 648/1318/468 647/1316/468 +f 638/1300/469 649/1319/469 648/1320/469 +f 639/1303/470 640/1302/470 649/1321/470 +f 640/1302/471 642/1309/471 650/1322/471 +f 642/1309/472 652/1323/472 651/1324/472 +f 643/1311/473 653/1325/473 652/1326/473 +f 644/1314/474 645/1313/474 653/1327/474 +f 645/1313/475 646/1317/475 654/1328/475 +f 646/1317/476 656/1329/476 655/1330/476 +f 647/1331/477 657/1332/477 656/1333/477 +f 648/1320/478 658/1334/478 657/1332/478 +f 649/1321/479 659/1335/479 658/1336/479 +f 650/1322/480 651/1324/480 659/1335/480 +f 651/1324/481 652/1323/481 660/1337/481 +f 652/1326/482 653/1325/482 661/1338/482 +f 653/1325/483 663/1339/483 662/1340/483 +f 654/1328/484 646/1317/484 663/1341/484 +f 655/1342/485 656/1343/485 664/1344/485 +f 656/1333/486 666/1345/486 665/1346/486 +f 657/1332/487 667/1347/487 666/1345/487 +f 658/1348/488 668/1349/488 667/1350/488 +f 669/1351/489 670/1352/489 660/1353/489 +f 660/1354/490 661/1355/490 669/1356/490 +f 661/1338/491 672/1357/491 671/1358/491 +f 662/1359/492 673/1360/492 672/1361/492 +f 663/1362/493 664/1344/493 673/1360/493 +f 664/1344/494 665/1363/494 674/1364/494 +f 665/1346/495 676/1365/495 675/1366/495 +f 666/1345/496 667/1347/496 676/1365/496 +f 667/1350/497 668/1349/497 677/1367/497 +f 668/1349/498 679/1368/498 678/1369/498 +f 669/1356/499 680/1370/499 679/1368/499 +f 671/1358/500 681/1371/500 680/1372/500 +f 672/1361/501 682/1373/501 681/1374/501 +f 673/1360/502 674/1364/502 682/1373/502 +f 674/1364/503 675/1375/503 683/1376/503 +f 675/1366/504 676/1365/504 684/1377/504 +f 676/1365/505 677/1378/505 685/1379/505 +f 677/1367/506 687/1380/506 686/1381/506 +f 678/1369/507 688/1382/507 687/1380/507 +f 679/1368/508 680/1370/508 688/1382/508 +f 680/1372/509 690/1383/509 689/1384/509 +f 681/1371/510 691/1385/510 690/1383/510 +f 682/1373/511 674/1364/511 691/1386/511 +f 683/1387/512 684/1388/512 692/1389/512 +f 684/1377/513 694/1390/513 693/1391/513 +f 685/1379/514 695/1392/514 694/1390/514 +f 686/1393/515 696/1394/515 695/1395/515 +f 696/1396/462 698/1397/462 697/1398/462 +f 688/1399/516 689/1400/516 697/1401/516 +f 689/1384/517 700/1402/517 699/1403/517 +f 690/1383/518 691/1385/518 700/1402/518 +f 691/1404/519 692/1389/519 701/1405/519 +f 692/1389/520 703/1406/520 702/1407/520 +f 693/1408/521 704/1409/521 703/1406/521 +f 694/1390/522 705/1410/522 704/1411/522 +f 695/1395/523 696/1394/523 705/1412/523 +f 696/1394/524 707/1413/524 706/1414/524 +f 697/1401/525 708/1415/525 707/1413/525 +f 699/1403/526 700/1402/526 708/1416/526 +f 700/1417/527 710/1418/527 709/1419/527 +f 701/1405/528 702/1407/528 710/1418/528 +f 702/1407/529 602/1420/529 599/1421/529 +f 703/1406/530 603/1422/530 602/1420/530 +f 704/1411/531 606/1423/531 603/1250/531 +f 705/1412/532 609/1424/532 606/1425/532 +f 706/1414/533 608/1426/533 609/1424/533 +f 707/1413/534 708/1415/534 608/1426/534 +f 708/1416/535 615/1265/535 612/1262/535 +f 709/1419/536 710/1418/536 615/1427/536 +f 710/1418/537 599/1421/537 616/1428/537 +f 711/1429/538 713/1430/538 712/1431/538 +f 609/1432/427 712/1288/427 607/1433/427 +f 607/1434/539 713/1435/539 611/1436/539 +f 611/1437/540 610/1438/540 608/1439/540 +f 714/1440/539 698/1441/539 715/1442/539 +f 697/1443/541 698/1444/541 688/1445/541 +f 688/1446/538 716/1447/538 687/1448/538 +f 687/1449/427 715/1450/427 696/1451/427 +f 717/1452/435 641/1453/435 718/1454/435 +f 631/1455/427 718/1456/427 640/1457/427 +f 642/1458/542 641/1459/542 632/1460/542 +f 640/1461/538 719/1462/538 642/1457/538 +f 720/1463/462 722/1464/462 721/1465/462 +f 668/1466/435 722/1467/435 669/1468/435 +f 659/1469/427 721/1470/427 668/1471/427 +f 660/1472/539 670/1473/539 659/1474/539 +f 723/1475/430 725/1476/430 724/1477/430 +f 724/1478/543 725/1479/543 726/1480/543 +f 726/1481/427 728/1482/427 727/1483/427 +f 727/1484/544 729/1485/544 723/1486/544 +f 729/1487/545 730/1488/545 725/1489/545 +f 727/1490/546 724/1491/546 726/1492/546 +f 674/1364/494 665/1363/494 675/1375/494 +f 578/1465/417 577/1212/417 575/1211/417 +f 580/1217/418 579/1215/418 578/1214/418 +f 582/1493/419 581/1218/419 580/1217/419 +f 596/1239/428 575/1211/428 576/1213/428 +f 586/1224/421 585/1222/421 583/1220/421 +f 726/1480/543 725/1479/543 730/1494/543 +f 590/1229/423 589/1227/423 587/1226/423 +f 592/1231/424 591/1230/424 590/1229/424 +f 594/1233/425 593/1232/425 592/1231/425 +f 598/1495/426 595/1234/426 594/1233/426 +f 577/1235/427 595/1496/427 596/1236/427 +f 577/1235/427 593/1497/427 595/1496/427 +f 579/1498/427 593/1497/427 577/1235/427 +f 579/1498/427 591/1499/427 593/1497/427 +f 581/1500/427 584/1501/427 579/1498/427 +f 579/1498/427 584/1501/427 591/1499/427 +f 584/1501/427 585/1502/427 591/1499/427 +f 591/1499/427 585/1502/427 589/1503/427 +f 622/1275/444 611/1261/444 623/1277/444 +f 597/1238/429 596/1239/429 598/1240/429 +f 598/1504/430 594/1505/430 597/1243/430 +f 708/1416/526 700/1402/526 709/1506/526 +f 578/1244/430 594/1505/430 580/1507/430 +f 594/1505/430 592/1508/430 580/1507/430 +f 580/1507/430 592/1508/430 582/1509/430 +f 582/1509/430 586/1510/430 583/1511/430 +f 592/1508/430 586/1510/430 582/1509/430 +f 590/1512/430 586/1510/430 592/1508/430 +f 587/1513/430 586/1510/430 590/1512/430 +f 602/1248/431 601/1246/431 599/1245/431 +f 636/1296/458 628/1295/458 637/1298/458 +f 606/1423/433 605/1251/433 603/1250/433 +f 609/1514/547 607/1254/547 606/1253/547 +f 609/1258/435 610/1257/435 711/1515/435 +f 611/1261/548 612/1260/548 613/1516/548 +f 615/1265/437 614/1263/437 612/1262/437 +f 633/1290/455 625/1278/455 634/1292/455 +f 600/1247/439 617/1267/439 599/1245/439 +f 601/1246/440 619/1269/440 600/1247/440 +f 661/1338/482 653/1325/482 662/1340/482 +f 605/1251/442 621/1272/442 604/1252/442 +f 621/1274/549 607/1254/549 622/1275/549 +f 664/1344/485 656/1343/485 665/1363/485 +f 613/1516/550 624/1276/550 611/1261/550 +f 614/1263/446 625/1278/446 613/1264/446 +f 617/1517/447 626/1280/447 614/1263/447 +f 683/1376/503 675/1375/503 684/1518/503 +f 619/1269/449 628/1282/449 618/1270/449 +f 620/1519/450 629/1284/450 619/1269/450 +f 621/1272/451 630/1285/451 620/1273/451 +f 622/1275/551 631/1287/551 621/1274/551 +f 585/1222/422 587/1225/422 588/1520/422 +f 632/1289/552 624/1276/552 633/1521/552 +f 692/1389/512 684/1388/512 693/1408/512 +f 626/1280/456 635/1291/456 625/1278/456 +f 618/1270/457 627/1283/457 626/1281/457 +f 626/1281/448 600/1247/448 618/1270/448 +f 601/1246/432 603/1249/432 604/1271/432 +f 630/1285/460 639/1299/460 629/1286/460 +f 631/1522/553 640/1302/553 630/1301/553 +f 631/1306/462 641/1305/462 717/1523/462 +f 642/1309/554 633/1308/554 643/1524/554 +f 634/1292/464 644/1310/464 633/1290/464 +f 635/1315/465 645/1313/465 634/1312/465 +f 627/1294/466 636/1296/466 635/1315/466 +f 637/1298/467 647/1316/467 636/1296/467 +f 638/1525/468 648/1318/468 637/1298/468 +f 639/1299/469 649/1319/469 638/1300/469 +f 649/1321/555 640/1302/555 650/1322/555 +f 614/1263/438 616/1266/438 617/1517/438 +f 643/1524/556 652/1323/556 642/1309/556 +f 644/1310/473 653/1325/473 643/1311/473 +f 589/1503/427 585/1502/427 588/1526/427 +f 636/1296/475 646/1317/475 645/1313/475 +f 647/1316/476 656/1329/476 646/1317/476 +f 648/1320/477 657/1332/477 647/1331/477 +f 649/1319/478 658/1334/478 648/1320/478 +f 650/1322/557 659/1335/557 649/1321/557 +f 615/1427/536 710/1418/536 616/1428/536 +f 660/1337/558 652/1323/558 661/1527/558 +f 688/1445/541 698/1444/541 716/1528/541 +f 654/1529/483 663/1339/483 653/1325/483 +f 691/1386/511 674/1364/511 683/1376/511 +f 619/1269/441 604/1271/441 620/1519/441 +f 657/1332/486 666/1345/486 656/1333/486 +f 658/1334/487 667/1347/487 657/1332/487 +f 659/1530/559 668/1349/559 658/1348/559 +f 722/1531/489 670/1352/489 669/1351/489 +f 669/1356/560 661/1355/560 671/1532/560 +f 662/1340/491 672/1357/491 661/1338/491 +f 663/1362/492 673/1360/492 662/1359/492 +f 655/1342/493 664/1344/493 663/1362/493 +f 653/1327/474 645/1313/474 654/1328/474 +f 666/1345/495 676/1365/495 665/1346/495 +f 676/1365/496 667/1347/496 677/1378/496 +f 677/1367/561 668/1349/561 678/1369/561 +f 669/1356/498 679/1368/498 668/1349/498 +f 671/1532/562 680/1370/562 669/1356/562 +f 672/1357/500 681/1371/500 671/1358/500 +f 673/1360/501 682/1373/501 672/1361/501 +f 664/1344/502 674/1364/502 673/1360/502 +f 631/1287/453 623/1277/453 632/1289/453 +f 637/1298/459 629/1297/459 638/1525/459 +f 700/1402/518 691/1385/518 701/1533/518 +f 678/1369/563 687/1380/563 677/1367/563 +f 679/1368/507 688/1382/507 678/1369/507 +f 688/1382/564 680/1370/564 689/1534/564 +f 681/1371/509 690/1383/509 680/1372/509 +f 682/1535/510 691/1385/510 681/1371/510 +f 659/1335/480 651/1324/480 660/1337/480 +f 684/1377/504 676/1365/504 685/1379/504 +f 685/1379/513 694/1390/513 684/1377/513 +f 686/1536/514 695/1392/514 685/1379/514 +f 687/1537/565 696/1394/565 686/1393/565 +f 715/1538/462 698/1397/462 696/1396/462 +f 697/1401/566 689/1400/566 699/1539/566 +f 690/1383/517 700/1402/517 689/1384/517 +f 663/1341/484 646/1317/484 655/1330/484 +f 683/1387/519 692/1389/519 691/1404/519 +f 693/1408/520 703/1406/520 692/1389/520 +f 694/1540/521 704/1409/521 693/1408/521 +f 695/1392/522 705/1410/522 694/1390/522 +f 705/1412/567 696/1394/567 706/1414/567 +f 697/1401/524 707/1413/524 696/1394/524 +f 699/1539/568 708/1415/568 697/1401/568 +f 685/1379/505 677/1378/505 686/1536/505 +f 701/1405/527 710/1418/527 700/1417/527 +f 692/1389/528 702/1407/528 701/1405/528 +f 703/1406/529 602/1420/529 702/1407/529 +f 704/1409/530 603/1422/530 703/1406/530 +f 705/1410/531 606/1423/531 704/1411/531 +f 706/1414/569 609/1424/569 705/1412/569 +f 707/1413/533 608/1426/533 706/1414/533 +f 608/1426/570 708/1415/570 612/1541/570 +f 709/1506/535 615/1265/535 708/1416/535 +f 718/1454/435 641/1453/435 719/1542/435 +f 702/1407/537 599/1421/537 710/1418/537 +f 610/1543/538 713/1430/538 711/1429/538 +f 711/1544/427 712/1288/427 609/1432/427 +f 712/1545/539 713/1435/539 607/1434/539 +f 713/1546/540 610/1438/540 611/1437/540 +f 716/1547/539 698/1441/539 714/1440/539 +f 597/1243/430 594/1505/430 578/1244/430 +f 687/1448/538 716/1447/538 714/1548/538 +f 714/1549/427 715/1450/427 687/1449/427 +f 650/1322/471 642/1309/471 651/1324/471 +f 717/1550/427 718/1456/427 631/1455/427 +f 719/1551/542 641/1459/542 642/1458/542 +f 718/1552/538 719/1462/538 640/1461/538 +f 670/1553/462 722/1464/462 720/1463/462 +f 721/1554/435 722/1467/435 668/1466/435 +f 720/1555/427 721/1470/427 659/1469/427 +f 659/1474/539 670/1473/539 720/1556/539 +f 729/1483/430 725/1476/430 723/1475/430 +f 581/1221/420 583/1220/420 584/1223/420 +f 730/1557/427 728/1482/427 726/1481/427 +f 728/1558/544 729/1485/544 727/1484/544 +f 728/1559/545 730/1488/545 729/1487/545 +f 723/1560/546 724/1491/546 727/1490/546 +o Wheel_Back_Left +v -2.802364 2.342700 4.069841 +v -2.802364 2.331936 3.391497 +v -2.808421 2.305865 3.419077 +v -2.514317 2.054904 2.763671 +v -2.802363 2.014275 2.809953 +v -2.514317 2.388159 3.373763 +v -2.073004 1.911396 2.927140 +v -2.226271 2.014275 2.809953 +v -2.226271 2.331936 3.391497 +v -2.802364 2.331936 3.391497 +v -2.514318 2.399451 4.085406 +v -2.073004 2.189574 3.436401 +v -2.226272 2.342700 4.069841 +v -2.802364 2.342700 4.069841 +v -2.802364 2.043683 4.663226 +v -2.073005 2.199000 4.030431 +v -2.073005 1.937149 4.550061 +v -2.226272 2.043683 4.663227 +v -2.514318 2.085756 4.707919 +v -2.802364 1.515007 5.012654 +v -2.073005 1.474185 4.856056 +v -2.226272 1.515006 5.012654 +v -2.514318 1.531128 5.074499 +v -2.802364 0.898329 5.024494 +v -2.073006 0.934157 4.866424 +v -2.226272 0.898329 5.024494 +v -2.520375 2.028834 2.818133 +v -2.520375 2.362088 3.402103 +v -2.808420 1.988204 2.862433 +v -2.079062 1.885326 2.974603 +v -2.079062 2.163503 3.462059 +v -2.232329 2.305865 3.419078 +v -2.232328 1.988204 2.862432 +v -2.520375 2.373381 4.083278 +v -2.808420 2.305865 3.419077 +v -2.079063 2.172929 4.030656 +v -2.232329 2.316629 4.068380 +v -2.520375 2.059686 4.679137 +v -2.808421 2.017613 4.636358 +v -2.079063 1.911079 4.528037 +v -2.232329 2.017612 4.636358 +v -2.520375 1.505058 5.030021 +v -2.808422 1.488936 4.970824 +v -2.079063 1.448114 4.820931 +v -2.232329 1.488936 4.970824 +v -2.520375 0.858109 5.041911 +v -2.808422 0.872258 4.982157 +v -2.079063 0.908087 4.830855 +v -2.232329 0.872258 4.982157 +v -2.514318 0.884179 5.086920 +v -2.808421 2.316629 4.068379 +v -2.808422 2.316629 4.068379 +v -2.493990 0.951980 2.716234 +v -2.543990 0.951980 2.716234 +v -2.543990 0.451980 2.850209 +v -2.493990 0.451980 2.850209 +v -2.543990 0.085955 3.216234 +v -2.493990 0.085955 3.216234 +v -2.543990 -0.048020 3.716234 +v -2.493990 -0.048020 3.716234 +v -2.493991 0.085955 4.216234 +v -2.543991 0.085955 4.216234 +v -2.543991 0.451980 4.582260 +v -2.493991 0.451980 4.582260 +v -2.493991 0.951980 4.716235 +v -2.543991 0.951980 4.716235 +v -2.543991 1.451980 4.582260 +v -2.493991 1.451980 4.582260 +v -2.543991 1.818006 4.216235 +v -2.493991 1.818006 4.216235 +v -2.543990 1.951980 3.716235 +v -2.493990 1.951980 3.716235 +v -2.543990 1.818006 3.216235 +v -2.543990 1.451981 2.850209 +v -2.493990 1.451981 2.850209 +v -2.493990 1.818006 3.216235 +v -2.514318 -0.188146 4.060781 +v -2.514317 -0.199439 3.413832 +v -2.802364 -0.142687 3.427981 +v -2.802365 -0.131923 4.044659 +v -2.955631 0.010439 4.003837 +v -2.955631 0.001013 3.463810 +v -2.902401 0.164422 3.504552 +v -2.902401 0.172327 3.957417 +v -2.667584 0.271080 3.438601 +v -2.361052 0.277992 4.032560 +v -2.667584 0.277992 4.032560 +v -2.433486 0.677965 4.027905 +v -2.361051 0.271080 3.438601 +v -2.126235 0.172327 3.957417 +v -2.126234 0.164422 3.504552 +v -2.073005 0.001013 3.463810 +v -2.073006 0.010439 4.003837 +v -2.226272 -0.131923 4.044659 +v -2.226271 -0.142687 3.427981 +v -2.514317 0.114256 2.847911 +v -2.802363 0.156330 2.888541 +v -2.955630 0.262863 2.991419 +v -2.902401 0.384009 3.108408 +v -2.667583 0.463081 3.184767 +v -2.361051 0.463081 3.184767 +v -2.126234 0.384009 3.108408 +v -2.073005 0.262863 2.991419 +v -2.226271 0.156330 2.888541 +v -2.514317 0.668884 2.514657 +v -2.802363 0.685006 2.570880 +v -2.955630 0.725828 2.713242 +v -2.902401 0.772248 2.875130 +v -2.667583 0.697105 2.980795 +v -2.361051 0.697105 2.980796 +v -2.126233 0.772248 2.875130 +v -2.073005 0.725828 2.713242 +v -2.226271 0.685006 2.570881 +v -2.514317 1.315833 2.503365 +v -2.802363 1.301684 2.560116 +v -2.955629 1.265855 2.703816 +v -2.902401 1.225113 2.867225 +v -2.667583 1.291064 2.973883 +v -2.433485 0.701760 3.380769 +v -2.361051 1.291064 2.973884 +v -2.126233 1.225113 2.867225 +v -2.073005 1.265855 2.703817 +v -2.226271 1.301684 2.560117 +v -2.514317 1.881754 2.817060 +v -2.802363 1.841124 2.859132 +v -2.955630 1.738246 2.965666 +v -2.902401 1.621257 3.086812 +v -2.667583 1.544898 3.165884 +v -2.361051 1.544898 3.165884 +v -2.126233 1.621257 3.086812 +v -2.073005 1.738246 2.965667 +v -2.226271 1.841124 2.859133 +v -2.514317 2.215008 3.371687 +v -2.802364 2.158785 3.387810 +v -2.955630 2.016423 3.428631 +v -2.902400 1.854535 3.475051 +v -2.667584 1.748870 3.399909 +v -2.361051 1.748870 3.399909 +v -2.126233 1.854535 3.475051 +v -2.073005 2.016423 3.428632 +v -2.226271 2.158785 3.387810 +v -2.514318 2.226301 4.018637 +v -2.802364 2.169550 4.004486 +v -2.955630 2.025850 3.968658 +v -2.902400 1.862440 3.927916 +v -2.667584 1.755782 3.993867 +v -2.361052 1.755782 3.993867 +v -2.433485 1.348897 3.404564 +v -2.126233 1.862440 3.927916 +v -2.073006 2.025850 3.968658 +v -2.226272 2.169550 4.004487 +v -2.514318 1.912606 4.584558 +v -2.802364 1.870533 4.543927 +v -2.955630 1.763999 4.441049 +v -2.902402 1.642853 4.324061 +v -2.667584 1.563781 4.247701 +v -2.361052 1.563781 4.247701 +v -2.126234 1.642853 4.324061 +v -2.073006 1.763999 4.441050 +v -2.226272 1.870533 4.543928 +v -2.514318 1.357978 4.917812 +v -2.802364 1.341856 4.861588 +v -2.955630 1.301035 4.719226 +v -2.902402 1.254614 4.557338 +v -2.667584 1.329757 4.451673 +v -2.361052 1.329757 4.451674 +v -2.126234 1.254614 4.557338 +v -2.073006 1.301035 4.719226 +v -2.226272 1.341856 4.861589 +v -2.514318 0.711029 4.929103 +v -2.802364 0.725179 4.872352 +v -2.955631 0.761007 4.728652 +v -2.902402 0.801750 4.565243 +v -2.667584 0.735798 4.458585 +v -2.361052 0.735798 4.458585 +v -2.433486 0.731144 4.058612 +v -2.126235 0.801750 4.565243 +v -2.073006 0.761007 4.728652 +v -2.226272 0.725179 4.872352 +v -2.514318 0.145108 4.615409 +v -2.802364 0.185738 4.573335 +v -2.955631 0.288616 4.466802 +v -2.902402 0.405605 4.345656 +v -2.667584 0.481964 4.266584 +v -2.361052 0.481964 4.266584 +v -2.126235 0.405605 4.345656 +v -2.073006 0.288616 4.466802 +v -2.226272 0.185738 4.573335 +v -2.667584 0.677965 4.027905 +v -2.667584 0.671053 3.433946 +v -2.433485 0.671053 3.433946 +v -2.667584 1.325102 4.051700 +v -2.667584 0.731144 4.058612 +v -2.433486 1.325102 4.051700 +v -2.667584 0.701760 3.380768 +v -2.667584 1.295719 3.373856 +v -2.433485 1.295719 3.373857 +v -2.667584 1.348897 3.404563 +v -2.667584 1.355809 3.998521 +v -2.433486 1.355809 3.998522 +v -1.872956 1.030662 3.762174 +v -1.872956 1.030662 3.662174 +v -1.872956 0.930661 3.662174 +v -2.622956 1.030661 3.662174 +v -2.622956 1.030661 3.762174 +v -2.622956 0.930661 3.762174 +v -1.872956 0.930661 3.762174 +v -2.622956 0.930661 3.662174 +vt 0.505526 0.712612 +vt 0.505513 0.816472 +vt 0.501432 0.812324 +vt 0.911038 0.256876 +vt 0.910683 0.300978 +vt 0.809306 0.257189 +vt 0.909096 0.189316 +vt 0.910412 0.212777 +vt 0.813439 0.213075 +vt 0.809743 0.623328 +vt 0.767033 0.617540 +vt 0.802385 0.525003 +vt 0.879881 0.601532 +vt 0.854311 0.617005 +vt 0.847297 0.523282 +vt 0.760018 0.523817 +vt 0.759950 0.422158 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.034640 0.930186 +vt 0.035491 0.837783 +vt 0.717705 0.625829 +vt 0.733319 0.644430 +vt 0.644609 0.664429 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.951706 0.579252 +vt 0.879881 0.623132 +vt 0.478460 0.803029 +vt 0.478430 0.717127 +vt 0.500209 0.712612 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.569142 0.723746 +vt 0.526132 0.633686 +vt 0.638417 0.647297 +vt 0.637757 0.727411 +vt 0.613524 0.724631 +vt 0.614279 0.633145 +vt 0.570116 0.826337 +vt 0.526305 0.822962 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.572592 0.908051 +vt 0.528666 0.900853 +vt 0.297174 0.516355 +vt 0.319506 0.435521 +vt 0.317310 0.526612 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.949424 0.850572 +vt 0.954393 0.894658 +vt 0.296963 0.355991 +vt 0.342811 0.434304 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.759950 0.463023 +vt 0.715956 0.387746 +vt 0.180286 0.719972 +vt 0.178395 0.816963 +vt 0.172762 0.815779 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.079592 0.837849 +vt 0.078713 0.832630 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.330475 0.803455 +vt 0.323102 0.798341 +vt 0.649849 0.688510 +vt 0.643343 0.684515 +vt 0.314149 0.815081 +vt 0.296963 0.773641 +vt 0.306193 0.772760 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.314792 0.700967 +vt 0.306170 0.727741 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vt 0.513624 0.783997 +vt 0.506188 0.712612 +vt 0.505969 0.783973 +vt 0.949158 0.484385 +vt 0.944659 0.410168 +vt 0.941584 0.484478 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.342603 0.674991 +vt 0.335156 0.743134 +vt 0.334704 0.595770 +vt 0.334948 0.675014 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.523482 0.675613 +vt 0.521494 0.627793 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.598820 0.371478 +vt 0.530171 0.331957 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.109074 0.639268 +vt 0.000848 0.531055 +vt 0.830015 0.623328 +vt 0.792389 0.714799 +vt 0.837273 0.712605 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.462495 0.306756 +vt 0.455687 0.331872 +vt 0.758447 0.693332 +vt 0.721737 0.772501 +vt 0.757332 0.757109 +vt 0.340460 0.815081 +vt 0.297072 0.826038 +vt 0.340316 0.862012 +vt 0.676280 0.688510 +vt 0.639684 0.692967 +vt 0.674834 0.772357 +vt 0.225458 0.066465 +vt 0.157773 0.024179 +vt 0.158175 0.049709 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.879661 0.713728 +vt 0.872743 0.628628 +vt 0.792493 0.808950 +vt 0.837383 0.811379 +vt 0.766009 0.719283 +vt 0.402470 0.272035 +vt 0.384108 0.290468 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.638639 0.825588 +vt 0.675115 0.819426 +vt 0.078288 0.046975 +vt 0.091518 0.068826 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.785756 0.886926 +vt 0.830315 0.893182 +vt 0.760201 0.870015 +vt 0.367839 0.211969 +vt 0.342811 0.218841 +vt 0.722613 0.861988 +vt 0.758639 0.881416 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.000874 0.094773 +vt 0.020847 0.106443 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.366797 0.631670 +vt 0.410612 0.724746 +vt 0.343300 0.641815 +vt 0.366513 0.724108 +vt 0.367882 0.142652 +vt 0.342862 0.136182 +vt 0.880326 0.806458 +vt 0.916070 0.738915 +vt 0.880176 0.757653 +vt 0.651005 0.881416 +vt 0.661972 0.937679 +vt 0.697339 0.884549 +vt 0.963197 0.803150 +vt 0.999158 0.806093 +vt 0.963001 0.738770 +vt 0.000842 0.186648 +vt 0.026573 0.185955 +vt 0.478430 0.642230 +vt 0.454713 0.724378 +vt 0.478182 0.723178 +vt 0.454997 0.631940 +vt 0.366238 0.813802 +vt 0.410323 0.818844 +vt 0.342811 0.801309 +vt 0.402587 0.082657 +vt 0.384247 0.064640 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.998802 0.690392 +vt 0.962852 0.690423 +vt 0.023635 0.266097 +vt 0.045687 0.252581 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.366045 0.876721 +vt 0.410121 0.884850 +vt 0.368574 0.047943 +vt 0.455878 0.023384 +vt 0.450371 0.000831 +vt 0.462656 0.048059 +vt 0.915776 0.643196 +vt 0.879766 0.623692 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.071984 0.342642 +vt 0.083117 0.323505 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.184003 0.645063 +vt 0.227051 0.730389 +vt 0.538560 0.023470 +vt 0.544788 0.000929 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.037804 0.750424 +vt 0.000842 0.766738 +vt 0.941584 0.331962 +vt 0.879881 0.422891 +vt 0.941398 0.422896 +vt 0.090587 0.832202 +vt 0.123318 0.828165 +vt 0.084243 0.749997 +vt 0.163350 0.343486 +vt 0.162852 0.317479 +vt 0.296292 0.658368 +vt 0.271432 0.731379 +vt 0.295662 0.734429 +vt 0.272151 0.644522 +vt 0.183284 0.731920 +vt 0.228056 0.828732 +vt 0.610139 0.064873 +vt 0.626527 0.048208 +vt 0.000978 0.697596 +vt 0.085329 0.702418 +vt 0.038890 0.702846 +vt 0.118564 0.696514 +vt 0.242837 0.320688 +vt 0.229508 0.298361 +vt 0.272390 0.825121 +vt 0.296500 0.816519 +vt 0.184242 0.825662 +vt 0.230552 0.907946 +vt 0.673686 0.130002 +vt 0.592019 0.082852 +vt 0.651436 0.136500 +vt 0.041316 0.659523 +vt 0.006100 0.640350 +vt 0.087755 0.659095 +vt 0.300278 0.261221 +vt 0.277678 0.248491 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.785112 0.254285 +vt 0.741202 0.192204 +vt 0.651385 0.219160 +vt 0.673628 0.224394 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.845561 0.100185 +vt 0.809649 0.113269 +vt 0.183284 0.908088 +vt 0.222683 0.963363 +vt 0.229724 0.907946 +vt 0.892764 0.189172 +vt 0.928690 0.180787 +vt 0.892491 0.100041 +vt 0.320282 0.181017 +vt 0.294454 0.181233 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.785595 0.096730 +vt 0.741495 0.096636 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.591902 0.272231 +vt 0.609999 0.290702 +vt 0.809448 0.047401 +vt 0.892357 0.056365 +vt 0.845426 0.056510 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.697396 0.096460 +vt 0.673931 0.096282 +vt 0.785876 0.005407 +vt 0.741789 0.000831 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.845312 0.019129 +vt 0.809306 0.001196 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.332779 0.615853 +vt 0.296963 0.616402 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.709710 0.331848 +vt 0.720616 0.271792 +vt 0.879860 0.985796 +vt 0.940684 0.894960 +vt 0.879766 0.894861 +vt 0.297236 0.615853 +vt 0.332803 0.526612 +vt 0.296963 0.526722 +vt 0.941258 0.444023 +vt 0.879881 0.443788 +vt 0.941321 0.534932 +vt 0.133383 0.904255 +vt 0.143492 0.960751 +vt 0.180286 0.904398 +vt 0.478430 0.884894 +vt 0.417169 0.975757 +vt 0.478402 0.975800 +vt 0.767744 0.331957 +vt 0.803584 0.331848 +vt 0.767547 0.267577 +vt 0.818505 0.984088 +vt 0.879766 0.893225 +vt 0.818532 0.893182 +vt 0.911101 0.280588 +vt 0.972132 0.189316 +vt 0.911038 0.189679 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.478457 0.710220 +vt 0.513843 0.712612 +vt 0.297106 0.908942 +vt 0.340350 0.872968 +vt 0.296963 0.862012 +vt 0.404092 0.884869 +vt 0.342811 0.975783 +vt 0.404028 0.975801 +vt 0.767547 0.331957 +vt 0.756641 0.271902 +vt 0.720616 0.331814 +vt 0.818894 0.331951 +vt 0.803584 0.316653 +vt 0.803585 0.331957 +vt 0.485203 0.925578 +vt 0.500243 0.925532 +vt 0.484851 0.810753 +vt 0.818889 0.301333 +vt 0.803584 0.316647 +vt 0.818888 0.316642 +vt 0.015117 0.947455 +vt 0.026433 0.832663 +vt 0.015470 0.832630 +vt 0.001191 0.833505 +vt 0.014769 0.946257 +vt 0.015117 0.832630 +vt 0.943226 0.115741 +vt 0.928690 0.000831 +vt 0.929041 0.115591 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.188269 0.343486 +vt 0.109050 0.343516 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn -0.974900 0.222800 -0.003500 +vn -0.196900 0.860400 -0.470000 +vn 0.690900 0.634500 -0.346600 +vn 0.196900 0.860400 -0.470000 +vn -0.192500 0.981200 -0.015600 +vn 0.682300 0.730900 -0.011600 +vn 0.192500 0.981200 -0.015600 +vn -0.196400 0.875600 0.441200 +vn 0.689900 0.646500 0.325800 +vn 0.196400 0.875600 0.441200 +vn -0.205500 0.539600 0.816400 +vn 0.706800 0.390000 0.590100 +vn 0.205500 0.539600 0.816400 +vn -0.210900 0.018800 0.977300 +vn 0.716300 0.013400 0.697600 +vn 0.210900 0.018800 0.977300 +vn 0.194900 -0.851900 0.486100 +vn -0.687100 -0.631000 0.360100 +vn -0.194900 -0.851900 0.486100 +vn 0.192500 -0.981200 0.016300 +vn -0.682300 -0.730900 0.012100 +vn -0.192500 -0.981200 0.016300 +vn 0.194600 -0.867900 -0.456900 +vn -0.686600 -0.643400 -0.338700 +vn -0.194600 -0.867900 -0.456900 +vn 0.199500 -0.523900 -0.828100 +vn -0.695800 -0.384000 -0.606900 +vn -0.199500 -0.523900 -0.828100 +vn 0.202200 -0.018000 -0.979200 +vn -0.700900 -0.013100 -0.713100 +vn -0.202200 -0.018000 -0.979200 +vn 0.983300 -0.100300 -0.151800 +vn 0.974800 -0.223000 0.003500 +vn -0.986700 0.089600 0.135500 +vn 0.991300 -0.115500 0.063100 +vn 0.146700 -0.864400 0.480900 +vn -0.989900 0.002700 0.141700 +vn 0.967500 -0.225800 -0.113800 +vn -0.992100 0.109800 -0.060000 +vn 0.559600 -0.739100 0.375100 +vn -0.152200 -0.846200 0.510600 +vn 0.059000 -0.903000 -0.425700 +vn -0.985800 0.148500 0.078200 +vn -0.056600 -0.898100 -0.436200 +vn -0.230500 -0.860600 -0.454100 +vn 0.985800 -0.003200 -0.167600 +vn -0.974000 0.226500 -0.003800 +vn 0.990500 -0.073500 -0.116200 +vn 0.974100 -0.226300 0.003800 +vn -0.992500 0.065200 0.103100 +vn 0.985600 -0.146700 0.083700 +vn 0.146300 -0.851500 0.503500 +vn -0.990100 0.002600 0.140100 +vn 0.983900 -0.158300 -0.083300 +vn -0.986400 0.142900 -0.081500 +vn 0.576100 -0.702900 0.417100 +vn -0.151600 -0.831800 0.533900 +vn 0.059000 -0.896700 -0.438700 +vn -0.056600 -0.891500 -0.449400 +vn -0.208300 -0.845800 -0.491200 +vn 0.986200 -0.003000 -0.165700 +vn -0.969500 0.219000 0.110400 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn 1.000000 -0.000000 0.000000 +vn -0.192500 -0.981200 0.017100 +vn -0.682300 -0.730900 0.012800 +vn -0.950400 0.310900 -0.005400 +vn -0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn 0.407500 0.913100 -0.010600 +vn 0.950400 0.310900 -0.005400 +vn 0.682300 -0.730900 0.012800 +vn 0.192500 -0.981200 0.017100 +vn -0.192500 -0.858300 -0.475700 +vn -0.682300 -0.639400 -0.354400 +vn -0.950400 0.272000 0.150800 +vn -0.252600 0.846200 0.469100 +vn 0.000000 0.797500 0.603300 +vn 0.421400 0.723300 0.547100 +vn 0.950400 0.272000 0.150800 +vn 0.682300 -0.639400 -0.354400 +vn 0.192500 -0.858300 -0.475700 +vn -0.192500 -0.505400 -0.841100 +vn -0.682300 -0.376500 -0.626600 +vn -0.950400 0.160200 0.266600 +vn -0.215700 0.502900 0.837000 +vn -0.000000 0.657000 0.753900 +vn 0.422700 0.595500 0.683200 +vn 0.950400 0.160200 0.266600 +vn 0.682300 -0.376500 -0.626600 +vn 0.192500 -0.505400 -0.841100 +vn -0.192500 -0.017100 -0.981200 +vn -0.682300 -0.012800 -0.730900 +vn -0.950400 0.005400 0.310900 +vn -0.417200 0.015900 0.908700 +vn -0.000000 -0.999900 0.011600 +vn 0.407500 0.010600 0.913100 +vn 0.950400 0.005400 0.310900 +vn 0.682300 -0.012800 -0.730900 +vn 0.192500 -0.017100 -0.981200 +vn -0.192500 0.475700 -0.858300 +vn -0.682300 0.354400 -0.639400 +vn -0.950400 -0.150800 0.272000 +vn -0.252600 -0.469100 0.846200 +vn -0.000000 -0.603300 0.797500 +vn 0.421400 -0.547100 0.723300 +vn 0.950400 -0.150800 0.272000 +vn 0.682300 0.354400 -0.639400 +vn 0.192500 0.475700 -0.858300 +vn -0.192500 0.841100 -0.505400 +vn -0.682300 0.626600 -0.376500 +vn -0.950400 -0.266600 0.160200 +vn -0.215700 -0.837000 0.502900 +vn 0.000000 -0.753900 0.657000 +vn 0.422700 -0.683200 0.595500 +vn 0.950400 -0.266600 0.160200 +vn 0.682300 0.626600 -0.376500 +vn 0.192500 0.841100 -0.505400 +vn -0.192500 0.981200 -0.017100 +vn -0.682300 0.730900 -0.012800 +vn -0.950400 -0.310900 0.005400 +vn -0.417200 -0.908700 0.015900 +vn 0.984000 -0.178200 0.002100 +vn 0.407500 -0.913100 0.010600 +vn 0.950400 -0.310900 0.005400 +vn 0.682300 0.730900 -0.012800 +vn 0.192500 0.981200 -0.017100 +vn -0.192500 0.858300 0.475700 +vn -0.682300 0.639400 0.354400 +vn -0.950400 -0.272000 -0.150800 +vn -0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn 0.421400 -0.723300 -0.547100 +vn 0.950400 -0.272000 -0.150800 +vn 0.682300 0.639400 0.354400 +vn 0.192500 0.858300 0.475700 +vn -0.192500 0.505400 0.841100 +vn -0.682300 0.376500 0.626600 +vn -0.950400 -0.160200 -0.266600 +vn -0.215700 -0.502900 -0.837000 +vn 0.000000 -0.657000 -0.753900 +vn 0.422700 -0.595500 -0.683200 +vn 0.950400 -0.160200 -0.266600 +vn 0.682300 0.376500 0.626600 +vn 0.192500 0.505400 0.841100 +vn -0.192500 0.017100 0.981200 +vn -0.682300 0.012800 0.730900 +vn -0.950400 -0.005400 -0.310900 +vn -0.417200 -0.015900 -0.908700 +vn 0.407500 -0.010600 -0.913100 +vn 0.950400 -0.005400 -0.310900 +vn 0.682300 0.012800 0.730900 +vn 0.192500 0.017100 0.981200 +vn -0.192500 -0.475700 0.858300 +vn -0.682300 -0.354400 0.639400 +vn -0.950400 0.150800 -0.272000 +vn -0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn 0.421400 0.547100 -0.723300 +vn 0.950400 0.150800 -0.272000 +vn 0.682300 -0.354400 0.639400 +vn 0.192500 -0.475700 0.858300 +vn -0.192500 -0.841100 0.505400 +vn -0.682300 -0.626600 0.376500 +vn -0.950400 0.266600 -0.160200 +vn -0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn 0.422700 0.683200 -0.595500 +vn 0.950400 0.266600 -0.160200 +vn 0.682300 -0.626600 0.376500 +vn 0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn 0.984000 0.178200 -0.002100 +vn 0.984000 -0.002100 -0.178200 +vn 0.984000 0.002100 0.178200 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.407500 0.913100 -0.010600 +vn 0.417200 0.908700 -0.015900 +vn -0.421400 0.723300 0.547100 +vn 0.252600 0.846200 0.469100 +vn -0.422700 0.595500 0.683200 +vn 0.215700 0.502900 0.837000 +vn -0.407500 0.010600 0.913100 +vn 0.417200 0.015900 0.908700 +vn -0.421400 -0.547100 0.723300 +vn 0.252600 -0.469100 0.846200 +vn -0.422700 -0.683200 0.595500 +vn 0.215700 -0.837000 0.502900 +vn -0.407500 -0.913100 0.010600 +vn 0.417200 -0.908700 0.015900 +vn -0.421400 -0.723300 -0.547100 +vn 0.252600 -0.846200 -0.469100 +vn -0.422700 -0.595500 -0.683200 +vn 0.000000 -0.657000 -0.753800 +vn 0.215700 -0.502900 -0.837000 +vn -0.407500 -0.010600 -0.913100 +vn 0.417200 -0.015900 -0.908700 +vn -0.421400 0.547100 -0.723300 +vn 0.252600 0.469100 -0.846200 +vn -0.422700 0.683200 -0.595500 +vn 0.215700 0.837000 -0.502900 +usemtl None.014 +f 731/1561/571 732/1562/571 733/1563/571 +f 734/1564/572 735/1565/572 736/1566/572 +f 737/1567/573 738/1568/573 739/1569/573 +f 738/1568/574 734/1564/574 736/1566/574 +f 736/1570/575 740/1571/575 741/1572/575 +f 742/1573/576 739/1574/576 743/1575/576 +f 739/1574/577 736/1570/577 741/1572/577 +f 741/1572/578 744/1576/578 745/1577/578 +f 746/1578/579 743/1575/579 747/1579/579 +f 743/1575/580 741/1572/580 748/1580/580 +f 749/1581/581 745/1577/581 750/1582/581 +f 747/1579/582 748/1580/582 751/1583/582 +f 748/1580/583 749/1581/583 752/1584/583 +f 753/1585/584 750/1586/584 754/1587/584 +f 751/1588/585 752/1589/585 755/1590/585 +f 752/1591/586 753/1585/586 756/1592/586 +f 757/1593/587 758/1594/587 759/1595/587 +f 760/1596/588 761/1597/588 762/1598/588 +f 763/1599/589 762/1600/589 758/1594/589 +f 758/1601/590 764/1602/590 765/1603/590 +f 761/1604/591 766/1605/591 767/1606/591 +f 762/1607/592 767/1606/592 764/1602/592 +f 764/1602/593 768/1608/593 769/1609/593 +f 766/1605/594 770/1610/594 767/1606/594 +f 767/1606/595 771/1611/595 764/1602/595 +f 768/1608/596 772/1612/596 773/1613/596 +f 770/1614/597 774/1615/597 771/1616/597 +f 771/1611/598 775/1617/598 768/1608/598 +f 772/1618/599 776/1619/599 777/1620/599 +f 774/1615/600 778/1621/600 775/1622/600 +f 775/1623/601 779/1624/601 772/1618/601 +f 747/1625/602 751/1588/602 770/1626/602 +f 742/1627/603 746/1628/603 761/1629/603 +f 750/1630/604 745/1631/604 769/1632/604 +f 737/1633/605 742/1627/605 760/1634/605 +f 756/1592/606 780/1635/606 776/1636/606 +f 754/1637/607 750/1630/607 773/1638/607 +f 746/1628/608 747/1625/608 766/1639/608 +f 740/1640/609 735/1641/609 759/1642/609 +f 755/1590/610 756/1643/610 779/1644/610 +f 780/1635/611 754/1587/611 776/1636/611 +f 735/1645/612 734/1646/612 757/1647/612 +f 769/1632/613 745/1631/613 781/1648/613 +f 734/1646/614 738/1649/614 757/1647/614 +f 738/1649/615 737/1650/615 763/1651/615 +f 751/1588/616 755/1590/616 774/1652/616 +f 782/1653/617 731/1561/617 733/1563/617 +f 735/1565/572 740/1654/572 736/1566/572 +f 742/1655/573 737/1567/573 739/1569/573 +f 739/1569/574 738/1568/574 736/1566/574 +f 740/1571/575 744/1576/575 741/1572/575 +f 746/1578/576 742/1573/576 743/1575/576 +f 743/1575/577 739/1574/577 741/1572/577 +f 749/1581/578 741/1572/578 745/1577/578 +f 743/1575/579 748/1580/579 747/1579/579 +f 741/1572/580 749/1581/580 748/1580/580 +f 753/1656/581 749/1581/581 750/1582/581 +f 748/1580/582 752/1584/582 751/1583/582 +f 749/1581/583 753/1656/583 752/1584/583 +f 780/1635/584 753/1585/584 754/1587/584 +f 752/1589/585 756/1643/585 755/1590/585 +f 753/1585/586 780/1635/586 756/1592/586 +f 758/1594/587 765/1657/587 759/1595/587 +f 763/1658/588 760/1596/588 762/1598/588 +f 757/1593/589 763/1599/589 758/1594/589 +f 764/1602/590 781/1659/590 765/1603/590 +f 762/1607/591 761/1604/591 767/1606/591 +f 758/1601/592 762/1607/592 764/1602/592 +f 781/1659/593 764/1602/593 769/1609/593 +f 770/1610/594 771/1611/594 767/1606/594 +f 771/1611/595 768/1608/595 764/1602/595 +f 769/1609/596 768/1608/596 773/1613/596 +f 774/1615/597 775/1622/597 771/1616/597 +f 775/1617/598 772/1612/598 768/1608/598 +f 773/1660/599 772/1618/599 777/1620/599 +f 778/1621/600 779/1661/600 775/1622/600 +f 779/1624/601 776/1619/601 772/1618/601 +f 751/1588/618 774/1652/618 770/1626/618 +f 746/1628/619 766/1639/619 761/1629/619 +f 773/1638/620 750/1630/620 769/1632/620 +f 742/1627/621 761/1629/621 760/1634/621 +f 779/1662/622 756/1592/622 776/1636/622 +f 777/1663/623 754/1637/623 773/1638/623 +f 747/1625/624 770/1626/624 766/1639/624 +f 765/1664/625 740/1640/625 759/1642/625 +f 778/1665/626 755/1590/626 779/1644/626 +f 754/1587/627 777/1666/627 776/1636/627 +f 759/1667/628 735/1645/628 757/1647/628 +f 738/1649/629 763/1651/629 757/1647/629 +f 737/1650/630 760/1668/630 763/1651/630 +f 755/1590/631 778/1665/631 774/1652/631 +f 745/1631/632 744/1669/632 781/1648/632 +f 783/1670/633 785/1671/633 784/1672/633 +f 786/1673/634 787/1674/634 785/1675/634 +f 788/1676/635 789/1677/635 787/1674/635 +f 790/1678/636 791/1679/636 789/1680/636 +f 791/1679/637 793/1681/637 792/1682/637 +f 794/1683/638 795/1684/638 793/1681/638 +f 795/1685/639 797/1686/639 796/1687/639 +f 798/1688/640 799/1689/640 797/1686/640 +f 800/1690/641 801/1691/641 799/1689/641 +f 802/1692/642 803/1693/642 801/1691/642 +f 785/1694/643 804/1695/643 784/1696/643 +f 805/1697/644 783/1670/644 804/1698/644 +f 806/1699/645 804/1698/645 803/1700/645 +f 783/1701/646 805/1702/646 786/1703/646 +f 807/1704/647 809/1705/647 808/1706/647 +f 810/1707/648 811/1708/648 809/1705/648 +f 811/1709/649 813/1710/649 812/1711/649 +f 814/1712/650 815/1713/650 813/1714/650 +f 816/1715/651 818/1716/651 817/1717/651 +f 816/1718/652 820/1719/652 819/1720/652 +f 820/1721/653 822/1722/653 821/1723/653 +f 823/1724/654 824/1725/654 822/1722/654 +f 807/1704/655 825/1726/655 824/1727/655 +f 808/1706/656 827/1728/656 826/1729/656 +f 809/1705/657 812/1730/657 827/1728/657 +f 812/1711/658 829/1731/658 828/1732/658 +f 813/1714/659 815/1713/659 829/1733/659 +f 815/1713/660 819/1720/660 830/1734/660 +f 819/1720/661 832/1735/661 831/1736/661 +f 821/1723/662 833/1737/662 832/1738/662 +f 822/1722/663 834/1739/663 833/1737/663 +f 825/1726/664 808/1706/664 834/1740/664 +f 826/1729/665 836/1741/665 835/1742/665 +f 827/1728/666 837/1743/666 836/1741/666 +f 828/1732/667 838/1744/667 837/1745/667 +f 829/1733/668 839/1746/668 838/1747/668 +f 830/1734/669 831/1736/669 839/1746/669 +f 831/1736/670 832/1735/670 840/1748/670 +f 832/1738/671 833/1737/671 841/1749/671 +f 833/1737/672 843/1750/672 842/1751/672 +f 834/1740/673 835/1742/673 843/1752/673 +f 835/1753/674 836/1754/674 844/1755/674 +f 836/1754/675 837/1756/675 845/1757/675 +f 837/1745/676 847/1758/676 846/1759/676 +f 838/1760/677 848/1761/677 847/1762/677 +f 840/1763/678 849/1764/678 839/1765/678 +f 840/1766/679 841/1767/679 850/1768/679 +f 841/1749/680 852/1769/680 851/1770/680 +f 842/1771/681 853/1772/681 852/1773/681 +f 843/1774/682 844/1755/682 853/1772/682 +f 844/1755/683 855/1775/683 854/1776/683 +f 845/1757/684 856/1777/684 855/1775/684 +f 846/1759/685 857/1778/685 856/1779/685 +f 847/1762/686 848/1761/686 857/1780/686 +f 848/1761/687 850/1768/687 858/1781/687 +f 850/1768/688 860/1782/688 859/1783/688 +f 851/1770/689 861/1784/689 860/1785/689 +f 852/1773/690 853/1772/690 861/1786/690 +f 853/1772/691 854/1776/691 862/1787/691 +f 854/1776/692 864/1788/692 863/1789/692 +f 855/1790/693 865/1791/693 864/1792/693 +f 856/1779/694 866/1793/694 865/1791/694 +f 857/1780/695 867/1794/695 866/1795/695 +f 858/1781/696 859/1783/696 867/1794/696 +f 859/1783/697 860/1782/697 868/1796/697 +f 860/1785/698 861/1784/698 869/1797/698 +f 861/1784/699 871/1798/699 870/1799/699 +f 862/1787/700 854/1776/700 871/1800/700 +f 863/1801/701 864/1802/701 872/1803/701 +f 864/1792/702 874/1804/702 873/1805/702 +f 865/1791/703 875/1806/703 874/1804/703 +f 866/1807/704 876/1808/704 875/1809/704 +f 877/1810/705 878/1811/705 868/1812/705 +f 868/1813/706 869/1814/706 877/1815/706 +f 869/1797/707 880/1816/707 879/1817/707 +f 870/1818/708 881/1819/708 880/1820/708 +f 871/1821/709 872/1803/709 881/1819/709 +f 872/1803/710 873/1822/710 882/1823/710 +f 873/1805/711 884/1824/711 883/1825/711 +f 874/1804/712 875/1806/712 884/1824/712 +f 875/1809/713 876/1808/713 885/1826/713 +f 876/1808/714 887/1827/714 886/1828/714 +f 877/1815/715 888/1829/715 887/1827/715 +f 879/1817/716 889/1830/716 888/1831/716 +f 880/1820/717 890/1832/717 889/1833/717 +f 881/1819/718 882/1823/718 890/1832/718 +f 882/1823/719 883/1834/719 891/1835/719 +f 883/1825/720 884/1824/720 892/1836/720 +f 884/1824/721 885/1837/721 893/1838/721 +f 885/1826/722 895/1839/722 894/1840/722 +f 886/1828/723 896/1841/723 895/1839/723 +f 887/1827/724 888/1829/724 896/1841/724 +f 888/1831/725 898/1842/725 897/1843/725 +f 889/1830/726 899/1844/726 898/1842/726 +f 890/1832/727 882/1823/727 899/1845/727 +f 891/1846/728 892/1847/728 900/1848/728 +f 892/1836/729 902/1849/729 901/1850/729 +f 893/1838/730 903/1851/730 902/1849/730 +f 894/1852/731 904/1853/731 903/1854/731 +f 904/1855/678 906/1856/678 905/1857/678 +f 896/1858/732 897/1859/732 905/1860/732 +f 897/1843/733 908/1861/733 907/1862/733 +f 898/1842/734 899/1844/734 908/1861/734 +f 899/1863/735 900/1848/735 909/1864/735 +f 900/1848/736 911/1865/736 910/1866/736 +f 901/1867/737 912/1868/737 911/1865/737 +f 902/1849/738 913/1869/738 912/1870/738 +f 903/1854/739 904/1853/739 913/1871/739 +f 904/1853/740 915/1872/740 914/1873/740 +f 905/1860/741 916/1874/741 915/1872/741 +f 907/1862/742 908/1861/742 916/1875/742 +f 908/1876/743 918/1877/743 917/1878/743 +f 909/1864/744 910/1866/744 918/1877/744 +f 910/1866/745 810/1879/745 807/1880/745 +f 911/1865/746 811/1881/746 810/1879/746 +f 912/1870/747 814/1882/747 811/1709/747 +f 913/1871/748 817/1883/748 814/1884/748 +f 914/1873/749 816/1885/749 817/1883/749 +f 915/1872/750 916/1874/750 816/1885/750 +f 916/1875/751 823/1724/751 820/1721/751 +f 917/1878/752 918/1877/752 823/1886/752 +f 918/1877/753 807/1880/753 824/1887/753 +f 919/1888/754 921/1889/754 920/1890/754 +f 817/1891/643 920/1747/643 815/1892/643 +f 815/1893/755 921/1894/755 819/1895/755 +f 819/1896/756 818/1897/756 816/1898/756 +f 922/1899/755 906/1900/755 923/1901/755 +f 905/1902/757 906/1903/757 896/1904/757 +f 896/1905/754 924/1906/754 895/1907/754 +f 895/1908/643 923/1909/643 904/1910/643 +f 925/1911/651 849/1912/651 926/1913/651 +f 839/1914/643 926/1915/643 848/1916/643 +f 850/1917/758 849/1918/758 840/1919/758 +f 848/1920/754 927/1921/754 850/1916/754 +f 928/1922/678 930/1923/678 929/1924/678 +f 876/1925/651 930/1926/651 877/1927/651 +f 867/1928/643 929/1929/643 876/1930/643 +f 868/1931/755 878/1932/755 867/1933/755 +f 931/1934/646 933/1935/646 932/1936/646 +f 932/1937/759 933/1938/759 934/1939/759 +f 934/1940/643 936/1941/643 935/1942/643 +f 935/1943/760 937/1944/760 931/1945/760 +f 937/1946/761 938/1947/761 933/1948/761 +f 935/1949/762 932/1950/762 934/1951/762 +f 882/1823/710 873/1822/710 883/1834/710 +f 786/1924/633 785/1671/633 783/1670/633 +f 788/1676/634 787/1674/634 786/1673/634 +f 790/1952/635 789/1677/635 788/1676/635 +f 804/1698/644 783/1670/644 784/1672/644 +f 794/1683/637 793/1681/637 791/1679/637 +f 934/1939/759 933/1938/759 938/1953/759 +f 798/1688/639 797/1686/639 795/1685/639 +f 800/1690/640 799/1689/640 798/1688/640 +f 802/1692/641 801/1691/641 800/1690/641 +f 806/1954/642 803/1693/642 802/1692/642 +f 785/1694/643 803/1955/643 804/1695/643 +f 785/1694/643 801/1956/643 803/1955/643 +f 787/1957/643 801/1956/643 785/1694/643 +f 787/1957/643 799/1958/643 801/1956/643 +f 789/1959/643 792/1960/643 787/1957/643 +f 787/1957/643 792/1960/643 799/1958/643 +f 792/1960/643 793/1961/643 799/1958/643 +f 799/1958/643 793/1961/643 797/1962/643 +f 830/1734/660 819/1720/660 831/1736/660 +f 805/1697/645 804/1698/645 806/1699/645 +f 806/1963/646 802/1964/646 805/1702/646 +f 916/1875/742 908/1861/742 917/1965/742 +f 786/1703/646 802/1964/646 788/1966/646 +f 802/1964/646 800/1967/646 788/1966/646 +f 788/1966/646 800/1967/646 790/1968/646 +f 790/1968/646 794/1969/646 791/1970/646 +f 800/1967/646 794/1969/646 790/1968/646 +f 798/1971/646 794/1969/646 800/1967/646 +f 795/1972/646 794/1969/646 798/1971/646 +f 810/1707/647 809/1705/647 807/1704/647 +f 844/1755/674 836/1754/674 845/1757/674 +f 814/1882/649 813/1710/649 811/1709/649 +f 817/1973/763 815/1713/763 814/1712/763 +f 817/1717/651 818/1716/651 919/1974/651 +f 819/1720/764 820/1719/764 821/1975/764 +f 823/1724/653 822/1722/653 820/1721/653 +f 841/1749/671 833/1737/671 842/1751/671 +f 808/1706/655 825/1726/655 807/1704/655 +f 809/1705/656 827/1728/656 808/1706/656 +f 869/1797/698 861/1784/698 870/1799/698 +f 813/1710/658 829/1731/658 812/1711/658 +f 829/1733/765 815/1713/765 830/1734/765 +f 872/1803/701 864/1802/701 873/1822/701 +f 821/1975/766 832/1735/766 819/1720/766 +f 822/1722/662 833/1737/662 821/1723/662 +f 825/1976/663 834/1739/663 822/1722/663 +f 891/1835/719 883/1834/719 892/1977/719 +f 827/1728/665 836/1741/665 826/1729/665 +f 828/1978/666 837/1743/666 827/1728/666 +f 829/1731/667 838/1744/667 828/1732/667 +f 830/1734/767 839/1746/767 829/1733/767 +f 793/1681/638 795/1684/638 796/1979/638 +f 840/1748/768 832/1735/768 841/1980/768 +f 900/1848/728 892/1847/728 901/1867/728 +f 834/1739/672 843/1750/672 833/1737/672 +f 826/1729/673 835/1742/673 834/1740/673 +f 834/1740/664 808/1706/664 826/1729/664 +f 809/1705/648 811/1708/648 812/1730/648 +f 838/1744/676 847/1758/676 837/1745/676 +f 839/1981/769 848/1761/769 838/1760/769 +f 839/1765/678 849/1764/678 925/1982/678 +f 850/1768/770 841/1767/770 851/1983/770 +f 842/1751/680 852/1769/680 841/1749/680 +f 843/1774/681 853/1772/681 842/1771/681 +f 835/1753/682 844/1755/682 843/1774/682 +f 845/1757/683 855/1775/683 844/1755/683 +f 846/1984/684 856/1777/684 845/1757/684 +f 847/1758/685 857/1778/685 846/1759/685 +f 857/1780/771 848/1761/771 858/1781/771 +f 822/1722/654 824/1725/654 825/1976/654 +f 851/1983/772 860/1782/772 850/1768/772 +f 852/1769/689 861/1784/689 851/1770/689 +f 797/1962/643 793/1961/643 796/1985/643 +f 844/1755/691 854/1776/691 853/1772/691 +f 855/1775/692 864/1788/692 854/1776/692 +f 856/1779/693 865/1791/693 855/1790/693 +f 857/1778/694 866/1793/694 856/1779/694 +f 858/1781/773 867/1794/773 857/1780/773 +f 823/1886/752 918/1877/752 824/1887/752 +f 868/1796/774 860/1782/774 869/1986/774 +f 896/1904/757 906/1903/757 924/1987/757 +f 862/1988/699 871/1798/699 861/1784/699 +f 899/1845/727 882/1823/727 891/1835/727 +f 827/1728/657 812/1730/657 828/1978/657 +f 865/1791/702 874/1804/702 864/1792/702 +f 866/1793/703 875/1806/703 865/1791/703 +f 867/1989/775 876/1808/775 866/1807/775 +f 930/1990/705 878/1811/705 877/1810/705 +f 877/1815/776 869/1814/776 879/1991/776 +f 870/1799/707 880/1816/707 869/1797/707 +f 871/1821/708 881/1819/708 870/1818/708 +f 863/1801/709 872/1803/709 871/1821/709 +f 861/1786/690 853/1772/690 862/1787/690 +f 874/1804/711 884/1824/711 873/1805/711 +f 884/1824/712 875/1806/712 885/1837/712 +f 885/1826/777 876/1808/777 886/1828/777 +f 877/1815/714 887/1827/714 876/1808/714 +f 879/1991/778 888/1829/778 877/1815/778 +f 880/1816/716 889/1830/716 879/1817/716 +f 881/1819/717 890/1832/717 880/1820/717 +f 872/1803/718 882/1823/718 881/1819/718 +f 839/1746/669 831/1736/669 840/1748/669 +f 845/1757/675 837/1756/675 846/1984/675 +f 908/1861/734 899/1844/734 909/1992/734 +f 886/1828/779 895/1839/779 885/1826/779 +f 887/1827/780 896/1841/780 886/1828/780 +f 896/1841/781 888/1829/781 897/1993/781 +f 889/1830/725 898/1842/725 888/1831/725 +f 890/1994/726 899/1844/726 889/1830/726 +f 867/1794/696 859/1783/696 868/1796/696 +f 892/1836/720 884/1824/720 893/1838/720 +f 893/1838/729 902/1849/729 892/1836/729 +f 894/1995/730 903/1851/730 893/1838/730 +f 895/1996/782 904/1853/782 894/1852/782 +f 923/1997/678 906/1856/678 904/1855/678 +f 905/1860/783 897/1859/783 907/1998/783 +f 898/1842/733 908/1861/733 897/1843/733 +f 871/1800/700 854/1776/700 863/1789/700 +f 891/1846/735 900/1848/735 899/1863/735 +f 901/1867/736 911/1865/736 900/1848/736 +f 902/1999/737 912/1868/737 901/1867/737 +f 903/1851/738 913/1869/738 902/1849/738 +f 913/1871/784 904/1853/784 914/1873/784 +f 905/1860/740 915/1872/740 904/1853/740 +f 907/1998/785 916/1874/785 905/1860/785 +f 893/1838/721 885/1837/721 894/1995/721 +f 909/1864/743 918/1877/743 908/1876/743 +f 900/1848/744 910/1866/744 909/1864/744 +f 911/1865/745 810/1879/745 910/1866/745 +f 912/1868/746 811/1881/746 911/1865/746 +f 913/1869/747 814/1882/747 912/1870/747 +f 914/1873/786 817/1883/786 913/1871/786 +f 915/1872/749 816/1885/749 914/1873/749 +f 816/1885/787 916/1874/787 820/2000/787 +f 917/1965/751 823/1724/751 916/1875/751 +f 926/1913/651 849/1912/651 927/2001/651 +f 910/1866/753 807/1880/753 918/1877/753 +f 818/2002/754 921/1889/754 919/1888/754 +f 919/2003/643 920/1747/643 817/1891/643 +f 920/2004/755 921/1894/755 815/1893/755 +f 921/2005/756 818/1897/756 819/1896/756 +f 924/2006/755 906/1900/755 922/1899/755 +f 805/1702/646 802/1964/646 786/1703/646 +f 895/1907/754 924/1906/754 922/2007/754 +f 922/2008/643 923/1909/643 895/1908/643 +f 858/1781/687 850/1768/687 859/1783/687 +f 925/2009/643 926/1915/643 839/1914/643 +f 927/2010/758 849/1918/758 850/1917/758 +f 926/2011/754 927/1921/754 848/1920/754 +f 878/2012/678 930/1923/678 928/1922/678 +f 929/2013/651 930/1926/651 876/1925/651 +f 928/2014/643 929/1929/643 867/1928/643 +f 867/1933/755 878/1932/755 928/2015/755 +f 937/1942/646 933/1935/646 931/1934/646 +f 789/1680/636 791/1679/636 792/1682/636 +f 938/2016/643 936/1941/643 934/1940/643 +f 936/2017/760 937/1944/760 935/1943/760 +f 936/2018/761 938/1947/761 937/1946/761 +f 931/2019/762 932/1950/762 935/1949/762 +o Wheel_Back_Right +v 2.802362 2.342700 4.069842 +v 2.802363 2.331936 3.391497 +v 2.808420 2.305865 3.419078 +v 2.514316 2.054904 2.763672 +v 2.802362 2.014275 2.809953 +v 2.514316 2.388159 3.373763 +v 2.073003 1.911396 2.927140 +v 2.226270 2.014275 2.809953 +v 2.226270 2.331936 3.391497 +v 2.802363 2.331936 3.391497 +v 2.514317 2.399451 4.085407 +v 2.073003 2.189574 3.436402 +v 2.226270 2.342700 4.069842 +v 2.802362 2.342700 4.069842 +v 2.802362 2.043683 4.663227 +v 2.073003 2.199000 4.030432 +v 2.073003 1.937149 4.550061 +v 2.226271 2.043683 4.663227 +v 2.514317 2.085756 4.707920 +v 2.802362 1.515007 5.012654 +v 2.073003 1.474185 4.856056 +v 2.226271 1.515006 5.012654 +v 2.514317 1.531128 5.074499 +v 2.802362 0.898329 5.024495 +v 2.073005 0.934157 4.866425 +v 2.226271 0.898329 5.024494 +v 2.520374 2.028834 2.818134 +v 2.520374 2.362088 3.402104 +v 2.808419 1.988204 2.862434 +v 2.079061 1.885326 2.974603 +v 2.079061 2.163503 3.462059 +v 2.232328 2.305865 3.419079 +v 2.232327 1.988204 2.862433 +v 2.520373 2.373381 4.083279 +v 2.808419 2.305865 3.419078 +v 2.079062 2.172929 4.030657 +v 2.232327 2.316629 4.068380 +v 2.520373 2.059686 4.679138 +v 2.808419 2.017613 4.636359 +v 2.079062 1.911079 4.528037 +v 2.232327 2.017612 4.636358 +v 2.520373 1.505058 5.030022 +v 2.808421 1.488936 4.970824 +v 2.079062 1.448114 4.820931 +v 2.232327 1.488936 4.970824 +v 2.520373 0.858109 5.041912 +v 2.808421 0.872258 4.982158 +v 2.079062 0.908087 4.830855 +v 2.232327 0.872258 4.982158 +v 2.514317 0.884179 5.086921 +v 2.808419 2.316629 4.068380 +v 2.808420 2.316629 4.068380 +v 2.493989 0.951980 2.716235 +v 2.543989 0.951980 2.716235 +v 2.543989 0.451980 2.850210 +v 2.493989 0.451980 2.850210 +v 2.543989 0.085955 3.216235 +v 2.493989 0.085955 3.216235 +v 2.543989 -0.048020 3.716235 +v 2.493989 -0.048020 3.716235 +v 2.493989 0.085955 4.216235 +v 2.543989 0.085955 4.216235 +v 2.543989 0.451980 4.582261 +v 2.493989 0.451980 4.582261 +v 2.493989 0.951980 4.716235 +v 2.543989 0.951980 4.716235 +v 2.543989 1.451980 4.582260 +v 2.493989 1.451980 4.582260 +v 2.543989 1.818006 4.216235 +v 2.493989 1.818006 4.216235 +v 2.543989 1.951980 3.716235 +v 2.493989 1.951980 3.716235 +v 2.543989 1.818006 3.216235 +v 2.543989 1.451981 2.850210 +v 2.493989 1.451981 2.850210 +v 2.493989 1.818006 3.216235 +v 2.514317 -0.188146 4.060782 +v 2.514316 -0.199439 3.413833 +v 2.802363 -0.142687 3.427982 +v 2.802363 -0.131923 4.044660 +v 2.955629 0.010439 4.003838 +v 2.955630 0.001013 3.463811 +v 2.902400 0.164422 3.504553 +v 2.902400 0.172327 3.957418 +v 2.667583 0.271080 3.438602 +v 2.361051 0.277992 4.032561 +v 2.667583 0.277992 4.032561 +v 2.433484 0.677965 4.027906 +v 2.361050 0.271080 3.438602 +v 2.126233 0.172327 3.957418 +v 2.126233 0.164422 3.504553 +v 2.073004 0.001013 3.463811 +v 2.073004 0.010439 4.003838 +v 2.226270 -0.131923 4.044660 +v 2.226270 -0.142687 3.427982 +v 2.514316 0.114256 2.847912 +v 2.802362 0.156330 2.888542 +v 2.955629 0.262863 2.991420 +v 2.902400 0.384009 3.108409 +v 2.667582 0.463081 3.184768 +v 2.361050 0.463081 3.184768 +v 2.126233 0.384009 3.108409 +v 2.073004 0.262863 2.991420 +v 2.226270 0.156330 2.888542 +v 2.514316 0.668884 2.514658 +v 2.802362 0.685006 2.570881 +v 2.955629 0.725828 2.713243 +v 2.902400 0.772248 2.875131 +v 2.667582 0.697105 2.980796 +v 2.361050 0.697105 2.980796 +v 2.126232 0.772248 2.875131 +v 2.073004 0.725828 2.713243 +v 2.226270 0.685006 2.570881 +v 2.514316 1.315833 2.503366 +v 2.802362 1.301684 2.560117 +v 2.955628 1.265855 2.703817 +v 2.902400 1.225113 2.867226 +v 2.667582 1.291064 2.973884 +v 2.433484 0.701760 3.380769 +v 2.361050 1.291064 2.973885 +v 2.126232 1.225113 2.867226 +v 2.073004 1.265855 2.703817 +v 2.226270 1.301684 2.560117 +v 2.514316 1.881754 2.817060 +v 2.802362 1.841124 2.859133 +v 2.955629 1.738246 2.965667 +v 2.902400 1.621257 3.086812 +v 2.667582 1.544898 3.165885 +v 2.361050 1.544898 3.165885 +v 2.126232 1.621257 3.086812 +v 2.073004 1.738246 2.965667 +v 2.226270 1.841124 2.859133 +v 2.514316 2.215008 3.371688 +v 2.802363 2.158785 3.387810 +v 2.955629 2.016423 3.428632 +v 2.902399 1.854535 3.475052 +v 2.667583 1.748870 3.399909 +v 2.361050 1.748870 3.399909 +v 2.126232 1.854535 3.475052 +v 2.073004 2.016423 3.428632 +v 2.226270 2.158785 3.387810 +v 2.514317 2.226301 4.018638 +v 2.802362 2.169550 4.004487 +v 2.955628 2.025850 3.968659 +v 2.902399 1.862440 3.927917 +v 2.667583 1.755782 3.993868 +v 2.361051 1.755782 3.993868 +v 2.433484 1.348897 3.404564 +v 2.126232 1.862440 3.927916 +v 2.073004 2.025850 3.968659 +v 2.226270 2.169550 4.004487 +v 2.514317 1.912606 4.584558 +v 2.802362 1.870533 4.543928 +v 2.955628 1.763999 4.441050 +v 2.902400 1.642853 4.324061 +v 2.667583 1.563781 4.247702 +v 2.361051 1.563781 4.247702 +v 2.126232 1.642853 4.324061 +v 2.073004 1.763999 4.441051 +v 2.226271 1.870533 4.543928 +v 2.514317 1.357978 4.917812 +v 2.802362 1.341856 4.861588 +v 2.955628 1.301035 4.719227 +v 2.902400 1.254614 4.557339 +v 2.667583 1.329757 4.451674 +v 2.361051 1.329757 4.451674 +v 2.126232 1.254614 4.557339 +v 2.073004 1.301035 4.719227 +v 2.226271 1.341856 4.861589 +v 2.514317 0.711029 4.929104 +v 2.802362 0.725179 4.872353 +v 2.955629 0.761007 4.728653 +v 2.902400 0.801750 4.565244 +v 2.667583 0.735798 4.458586 +v 2.361051 0.735798 4.458586 +v 2.433484 0.731144 4.058613 +v 2.126233 0.801750 4.565244 +v 2.073004 0.761007 4.728653 +v 2.226271 0.725179 4.872353 +v 2.514317 0.145108 4.615410 +v 2.802362 0.185738 4.573336 +v 2.955629 0.288616 4.466803 +v 2.902400 0.405605 4.345657 +v 2.667583 0.481964 4.266585 +v 2.361051 0.481964 4.266585 +v 2.126233 0.405605 4.345657 +v 2.073004 0.288616 4.466803 +v 2.226271 0.185738 4.573336 +v 2.667583 0.677965 4.027906 +v 2.667583 0.671053 3.433947 +v 2.433484 0.671053 3.433947 +v 2.667583 1.325102 4.051701 +v 2.667583 0.731144 4.058613 +v 2.433484 1.325102 4.051701 +v 2.667583 0.701760 3.380769 +v 2.667583 1.295719 3.373857 +v 2.433484 1.295719 3.373857 +v 2.667583 1.348897 3.404564 +v 2.667583 1.355809 3.998522 +v 2.433484 1.355809 3.998522 +v 1.872954 1.030662 3.762175 +v 1.872954 1.030662 3.662175 +v 1.872954 0.930661 3.662175 +v 2.622955 1.030661 3.662175 +v 2.622955 1.030661 3.762175 +v 2.622955 0.930661 3.762175 +v 1.872954 0.930661 3.762175 +v 2.622955 0.930661 3.662175 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.809306 0.257189 +vt 0.910683 0.300978 +vt 0.909096 0.189316 +vt 0.813439 0.213075 +vt 0.910412 0.212777 +vt 0.809743 0.623328 +vt 0.802385 0.525003 +vt 0.767033 0.617540 +vt 0.879881 0.601532 +vt 0.847297 0.523282 +vt 0.854311 0.617005 +vt 0.759950 0.422158 +vt 0.760018 0.523817 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.035491 0.837783 +vt 0.034640 0.930186 +vt 0.717705 0.625829 +vt 0.644609 0.664429 +vt 0.733319 0.644430 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.879881 0.623132 +vt 0.951706 0.579252 +vt 0.478460 0.803029 +vt 0.500209 0.712612 +vt 0.478430 0.717127 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.526132 0.633686 +vt 0.569142 0.723746 +vt 0.638417 0.647297 +vt 0.613524 0.724631 +vt 0.637757 0.727411 +vt 0.614279 0.633145 +vt 0.526305 0.822962 +vt 0.570116 0.826337 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.528666 0.900853 +vt 0.572592 0.908051 +vt 0.297174 0.516355 +vt 0.317310 0.526612 +vt 0.319506 0.435521 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.954393 0.894658 +vt 0.949424 0.850572 +vt 0.342811 0.434304 +vt 0.296963 0.355991 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.715956 0.387746 +vt 0.759950 0.463023 +vt 0.180286 0.719972 +vt 0.172762 0.815779 +vt 0.178395 0.816963 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.078713 0.832630 +vt 0.079592 0.837849 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.323102 0.798341 +vt 0.330475 0.803455 +vt 0.643343 0.684515 +vt 0.649849 0.688510 +vt 0.314149 0.815081 +vt 0.306193 0.772760 +vt 0.296963 0.773641 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.306170 0.727741 +vt 0.314792 0.700967 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vt 0.513624 0.783997 +vt 0.505969 0.783973 +vt 0.506188 0.712612 +vt 0.949158 0.484385 +vt 0.941584 0.484478 +vt 0.944659 0.410168 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.335156 0.743134 +vt 0.342603 0.674991 +vt 0.334948 0.675014 +vt 0.334704 0.595770 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.521494 0.627793 +vt 0.523482 0.675613 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.530171 0.331957 +vt 0.598820 0.371478 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.000848 0.531055 +vt 0.109074 0.639268 +vt 0.830015 0.623328 +vt 0.837273 0.712605 +vt 0.792389 0.714799 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.455687 0.331872 +vt 0.462495 0.306756 +vt 0.758447 0.693332 +vt 0.757332 0.757109 +vt 0.721737 0.772501 +vt 0.340460 0.815081 +vt 0.340316 0.862012 +vt 0.297072 0.826038 +vt 0.676280 0.688510 +vt 0.674834 0.772357 +vt 0.639684 0.692967 +vt 0.225458 0.066465 +vt 0.158175 0.049709 +vt 0.157773 0.024179 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.872743 0.628628 +vt 0.879661 0.713728 +vt 0.837383 0.811379 +vt 0.792493 0.808950 +vt 0.766009 0.719283 +vt 0.384108 0.290468 +vt 0.402470 0.272035 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.675115 0.819426 +vt 0.638639 0.825588 +vt 0.091518 0.068826 +vt 0.078288 0.046975 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.830315 0.893182 +vt 0.785756 0.886926 +vt 0.760201 0.870015 +vt 0.342811 0.218841 +vt 0.367839 0.211969 +vt 0.758639 0.881416 +vt 0.722613 0.861988 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.020847 0.106443 +vt 0.000874 0.094773 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.410612 0.724746 +vt 0.366797 0.631670 +vt 0.366513 0.724108 +vt 0.343300 0.641815 +vt 0.342862 0.136182 +vt 0.367882 0.142652 +vt 0.880326 0.806458 +vt 0.880176 0.757653 +vt 0.916070 0.738915 +vt 0.651005 0.881416 +vt 0.697339 0.884549 +vt 0.661972 0.937679 +vt 0.963197 0.803150 +vt 0.963001 0.738770 +vt 0.999158 0.806093 +vt 0.026573 0.185955 +vt 0.000842 0.186648 +vt 0.478430 0.642230 +vt 0.478182 0.723178 +vt 0.454713 0.724378 +vt 0.454997 0.631940 +vt 0.410323 0.818844 +vt 0.366238 0.813802 +vt 0.342811 0.801309 +vt 0.384247 0.064640 +vt 0.402587 0.082657 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.962852 0.690423 +vt 0.998802 0.690392 +vt 0.045687 0.252581 +vt 0.023635 0.266097 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.410121 0.884850 +vt 0.366045 0.876721 +vt 0.368574 0.047943 +vt 0.450371 0.000831 +vt 0.455878 0.023384 +vt 0.462656 0.048059 +vt 0.879766 0.623692 +vt 0.915776 0.643196 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.083117 0.323505 +vt 0.071984 0.342642 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.227051 0.730389 +vt 0.184003 0.645063 +vt 0.544788 0.000929 +vt 0.538560 0.023470 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.000842 0.766738 +vt 0.037804 0.750424 +vt 0.941584 0.331962 +vt 0.941398 0.422896 +vt 0.879881 0.422891 +vt 0.090587 0.832202 +vt 0.084243 0.749997 +vt 0.123318 0.828165 +vt 0.162852 0.317479 +vt 0.163350 0.343486 +vt 0.296292 0.658368 +vt 0.295662 0.734429 +vt 0.271432 0.731379 +vt 0.272151 0.644522 +vt 0.228056 0.828732 +vt 0.183284 0.731920 +vt 0.626527 0.048208 +vt 0.610139 0.064873 +vt 0.000978 0.697596 +vt 0.038890 0.702846 +vt 0.085329 0.702418 +vt 0.118564 0.696514 +vt 0.229508 0.298361 +vt 0.242837 0.320688 +vt 0.296500 0.816519 +vt 0.272390 0.825121 +vt 0.230552 0.907946 +vt 0.184242 0.825662 +vt 0.673686 0.130002 +vt 0.651436 0.136500 +vt 0.592019 0.082852 +vt 0.006100 0.640350 +vt 0.041316 0.659523 +vt 0.087755 0.659095 +vt 0.277678 0.248491 +vt 0.300278 0.261221 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.741202 0.192204 +vt 0.785112 0.254285 +vt 0.673628 0.224394 +vt 0.651385 0.219160 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.809649 0.113269 +vt 0.845561 0.100185 +vt 0.183284 0.908088 +vt 0.229724 0.907946 +vt 0.222683 0.963363 +vt 0.892764 0.189172 +vt 0.892491 0.100041 +vt 0.928690 0.180787 +vt 0.294454 0.181233 +vt 0.320282 0.181017 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.741495 0.096636 +vt 0.785595 0.096730 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.609999 0.290702 +vt 0.591902 0.272231 +vt 0.809448 0.047401 +vt 0.845426 0.056510 +vt 0.892357 0.056365 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.673931 0.096282 +vt 0.697396 0.096460 +vt 0.741789 0.000831 +vt 0.785876 0.005407 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.809306 0.001196 +vt 0.845312 0.019129 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.296963 0.616402 +vt 0.332779 0.615853 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.720616 0.271792 +vt 0.709710 0.331848 +vt 0.879860 0.985796 +vt 0.879766 0.894861 +vt 0.940684 0.894960 +vt 0.297236 0.615853 +vt 0.296963 0.526722 +vt 0.332803 0.526612 +vt 0.941258 0.444023 +vt 0.941321 0.534932 +vt 0.879881 0.443788 +vt 0.133383 0.904255 +vt 0.180286 0.904398 +vt 0.143492 0.960751 +vt 0.478430 0.884894 +vt 0.478402 0.975800 +vt 0.417169 0.975757 +vt 0.767744 0.331957 +vt 0.767547 0.267577 +vt 0.803584 0.331848 +vt 0.818505 0.984088 +vt 0.818532 0.893182 +vt 0.879766 0.893225 +vt 0.911101 0.280588 +vt 0.911038 0.189679 +vt 0.972132 0.189316 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.513843 0.712612 +vt 0.478457 0.710220 +vt 0.297106 0.908942 +vt 0.296963 0.862012 +vt 0.340350 0.872968 +vt 0.404092 0.884869 +vt 0.404028 0.975801 +vt 0.342811 0.975783 +vt 0.767547 0.331957 +vt 0.720616 0.331814 +vt 0.756641 0.271902 +vt 0.818894 0.331951 +vt 0.803585 0.331957 +vt 0.803584 0.316653 +vt 0.485203 0.925578 +vt 0.484851 0.810753 +vt 0.500243 0.925532 +vt 0.818889 0.301333 +vt 0.818888 0.316642 +vt 0.803584 0.316647 +vt 0.015117 0.947455 +vt 0.015470 0.832630 +vt 0.026433 0.832663 +vt 0.001191 0.833505 +vt 0.015117 0.832630 +vt 0.014769 0.946257 +vt 0.943226 0.115741 +vt 0.929041 0.115591 +vt 0.928690 0.000831 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.109050 0.343516 +vt 0.188269 0.343486 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.974900 0.222800 -0.003500 +vn 0.196900 0.860400 -0.470000 +vn -0.690900 0.634500 -0.346600 +vn -0.196900 0.860400 -0.470000 +vn 0.192500 0.981200 -0.015600 +vn -0.682300 0.730900 -0.011600 +vn -0.192500 0.981200 -0.015600 +vn 0.196400 0.875600 0.441200 +vn -0.689900 0.646500 0.325800 +vn -0.196400 0.875600 0.441200 +vn 0.205500 0.539600 0.816400 +vn -0.706800 0.390000 0.590100 +vn -0.205500 0.539600 0.816400 +vn 0.210900 0.018800 0.977300 +vn -0.716300 0.013400 0.697600 +vn -0.210900 0.018800 0.977300 +vn -0.194900 -0.851900 0.486100 +vn 0.687100 -0.631000 0.360100 +vn 0.194900 -0.851900 0.486100 +vn -0.192500 -0.981200 0.016300 +vn 0.682300 -0.730900 0.012100 +vn 0.192500 -0.981200 0.016300 +vn -0.194600 -0.867900 -0.456900 +vn 0.686600 -0.643400 -0.338700 +vn 0.194600 -0.867900 -0.456900 +vn -0.199500 -0.523900 -0.828100 +vn 0.695800 -0.384000 -0.606900 +vn 0.199500 -0.523900 -0.828100 +vn -0.202200 -0.018000 -0.979200 +vn 0.700900 -0.013100 -0.713100 +vn 0.202200 -0.018000 -0.979200 +vn -0.983300 -0.100300 -0.151800 +vn -0.974800 -0.223000 0.003500 +vn 0.986700 0.089600 0.135500 +vn -0.991300 -0.115500 0.063100 +vn -0.146700 -0.864400 0.480900 +vn 0.989900 0.002700 0.141700 +vn -0.967500 -0.225800 -0.113800 +vn 0.992100 0.109800 -0.060000 +vn -0.559600 -0.739100 0.375100 +vn 0.152200 -0.846200 0.510600 +vn -0.059000 -0.903000 -0.425700 +vn 0.985800 0.148500 0.078200 +vn 0.056600 -0.898100 -0.436200 +vn 0.230400 -0.860600 -0.454100 +vn -0.985800 -0.003200 -0.167600 +vn 0.974000 0.226500 -0.003800 +vn -0.990500 -0.073500 -0.116200 +vn -0.974000 -0.226300 0.003800 +vn 0.992500 0.065200 0.103100 +vn -0.985600 -0.146700 0.083700 +vn -0.146300 -0.851500 0.503500 +vn 0.990100 0.002600 0.140100 +vn -0.983900 -0.158300 -0.083300 +vn 0.986400 0.142900 -0.081500 +vn -0.576100 -0.702900 0.417100 +vn 0.151600 -0.831800 0.533900 +vn -0.059000 -0.896700 -0.438700 +vn 0.056600 -0.891500 -0.449400 +vn 0.208300 -0.845800 -0.491200 +vn -0.986200 -0.003000 -0.165700 +vn 0.969500 0.219000 0.110400 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn -1.000000 0.000000 0.000000 +vn 0.192500 -0.981200 0.017100 +vn 0.682300 -0.730900 0.012800 +vn 0.950400 0.310900 -0.005400 +vn 0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn -0.407500 0.913100 -0.010600 +vn -0.950400 0.310900 -0.005400 +vn -0.682300 -0.730900 0.012800 +vn -0.192500 -0.981200 0.017100 +vn 0.192500 -0.858300 -0.475700 +vn 0.682300 -0.639400 -0.354400 +vn 0.950400 0.272000 0.150800 +vn 0.252600 0.846200 0.469100 +vn 0.000000 0.797500 0.603300 +vn -0.421400 0.723300 0.547100 +vn -0.950400 0.272000 0.150800 +vn -0.682300 -0.639400 -0.354400 +vn -0.192500 -0.858300 -0.475700 +vn 0.192500 -0.505400 -0.841100 +vn 0.682300 -0.376500 -0.626600 +vn 0.950400 0.160200 0.266600 +vn 0.215700 0.502900 0.837000 +vn 0.000000 0.657000 0.753900 +vn -0.422700 0.595500 0.683200 +vn -0.950400 0.160200 0.266600 +vn -0.682300 -0.376500 -0.626600 +vn -0.192500 -0.505400 -0.841100 +vn 0.192500 -0.017100 -0.981200 +vn 0.682300 -0.012800 -0.730900 +vn 0.950400 0.005400 0.310900 +vn 0.417200 0.015900 0.908700 +vn 0.000000 -0.999900 0.011600 +vn -0.407500 0.010600 0.913100 +vn -0.950400 0.005400 0.310900 +vn -0.682300 -0.012800 -0.730900 +vn -0.192500 -0.017100 -0.981200 +vn 0.192500 0.475700 -0.858300 +vn 0.682300 0.354400 -0.639400 +vn 0.950400 -0.150800 0.272000 +vn 0.252600 -0.469100 0.846200 +vn 0.000000 -0.603300 0.797500 +vn -0.421400 -0.547100 0.723300 +vn -0.950400 -0.150800 0.272000 +vn -0.682300 0.354400 -0.639400 +vn -0.192500 0.475700 -0.858300 +vn 0.192500 0.841100 -0.505400 +vn 0.682300 0.626600 -0.376500 +vn 0.950400 -0.266600 0.160200 +vn 0.215700 -0.837000 0.502900 +vn -0.000000 -0.753800 0.657000 +vn -0.422700 -0.683200 0.595500 +vn -0.950400 -0.266600 0.160200 +vn -0.682300 0.626600 -0.376500 +vn -0.192500 0.841100 -0.505400 +vn 0.192500 0.981200 -0.017100 +vn 0.682300 0.730900 -0.012800 +vn 0.950400 -0.310900 0.005400 +vn 0.417200 -0.908700 0.015900 +vn -0.984000 -0.178200 0.002100 +vn -0.407500 -0.913100 0.010600 +vn -0.950400 -0.310900 0.005400 +vn -0.682300 0.730900 -0.012800 +vn -0.192500 0.981200 -0.017100 +vn 0.192500 0.858300 0.475700 +vn 0.682300 0.639400 0.354400 +vn 0.950400 -0.272000 -0.150800 +vn 0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn -0.421400 -0.723300 -0.547100 +vn -0.950400 -0.272000 -0.150800 +vn -0.682300 0.639400 0.354400 +vn -0.192500 0.858300 0.475700 +vn 0.192500 0.505400 0.841100 +vn 0.682300 0.376500 0.626600 +vn 0.950400 -0.160200 -0.266600 +vn 0.215700 -0.502900 -0.837000 +vn -0.000000 -0.657000 -0.753900 +vn -0.422700 -0.595500 -0.683200 +vn -0.950400 -0.160200 -0.266600 +vn -0.682300 0.376500 0.626600 +vn -0.192500 0.505400 0.841100 +vn 0.192500 0.017100 0.981200 +vn 0.682300 0.012800 0.730900 +vn 0.950400 -0.005400 -0.310900 +vn 0.417200 -0.015900 -0.908700 +vn -0.407500 -0.010600 -0.913100 +vn -0.950400 -0.005400 -0.310900 +vn -0.682300 0.012800 0.730900 +vn -0.192500 0.017100 0.981200 +vn 0.192500 -0.475700 0.858300 +vn 0.682300 -0.354400 0.639400 +vn 0.950400 0.150800 -0.272000 +vn 0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn -0.421400 0.547100 -0.723300 +vn -0.950400 0.150800 -0.272000 +vn -0.682300 -0.354400 0.639400 +vn -0.192500 -0.475700 0.858300 +vn 0.192500 -0.841100 0.505400 +vn 0.682300 -0.626600 0.376500 +vn 0.950400 0.266600 -0.160200 +vn 0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn -0.422700 0.683200 -0.595500 +vn -0.950400 0.266600 -0.160200 +vn -0.682300 -0.626600 0.376500 +vn -0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn -0.984000 0.178200 -0.002100 +vn -0.984000 -0.002100 -0.178200 +vn -0.984000 0.002100 0.178200 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.407500 0.913100 -0.010600 +vn -0.417200 0.908700 -0.015900 +vn 0.421400 0.723300 0.547100 +vn -0.252600 0.846200 0.469100 +vn 0.422700 0.595500 0.683200 +vn -0.215700 0.502900 0.837000 +vn 0.407500 0.010600 0.913100 +vn -0.417200 0.015900 0.908700 +vn 0.421400 -0.547100 0.723300 +vn -0.252600 -0.469100 0.846200 +vn 0.422700 -0.683200 0.595500 +vn -0.215700 -0.837000 0.502900 +vn 0.407500 -0.913100 0.010600 +vn -0.417200 -0.908700 0.015900 +vn 0.421400 -0.723300 -0.547100 +vn -0.252600 -0.846200 -0.469100 +vn 0.422700 -0.595500 -0.683200 +vn 0.000000 -0.657000 -0.753800 +vn -0.215700 -0.502900 -0.837000 +vn 0.000000 -0.753900 0.657000 +vn 0.407500 -0.010600 -0.913100 +vn -0.417200 -0.015900 -0.908700 +vn 0.421400 0.547100 -0.723300 +vn -0.252600 0.469100 -0.846300 +vn 0.422700 0.683200 -0.595500 +vn -0.215700 0.837000 -0.502900 +usemtl None.022 +f 939/2020/788 941/2021/788 940/2022/788 +f 942/2023/789 944/2024/789 943/2025/789 +f 945/2026/790 947/2027/790 946/2028/790 +f 946/2028/791 944/2024/791 942/2023/791 +f 944/2029/792 949/2030/792 948/2031/792 +f 950/2032/793 951/2033/793 947/2034/793 +f 947/2034/794 949/2030/794 944/2029/794 +f 949/2030/795 953/2035/795 952/2036/795 +f 954/2037/796 955/2038/796 951/2033/796 +f 951/2033/797 956/2039/797 949/2030/797 +f 957/2040/798 958/2041/798 953/2035/798 +f 955/2038/799 959/2042/799 956/2039/799 +f 956/2039/800 960/2043/800 957/2040/800 +f 961/2044/801 962/2045/801 958/2046/801 +f 959/2047/802 963/2048/802 960/2049/802 +f 960/2050/803 964/2051/803 961/2044/803 +f 965/2052/804 967/2053/804 966/2054/804 +f 968/2055/805 970/2056/805 969/2057/805 +f 971/2058/806 966/2054/806 970/2059/806 +f 966/2060/807 973/2061/807 972/2062/807 +f 969/2063/808 975/2064/808 974/2065/808 +f 970/2066/809 972/2062/809 975/2064/809 +f 972/2062/810 977/2067/810 976/2068/810 +f 974/2065/811 975/2064/811 978/2069/811 +f 975/2064/812 972/2062/812 979/2070/812 +f 976/2068/813 981/2071/813 980/2072/813 +f 978/2073/814 979/2074/814 982/2075/814 +f 979/2070/815 976/2068/815 983/2076/815 +f 980/2077/816 985/2078/816 984/2079/816 +f 982/2075/817 983/2080/817 986/2081/817 +f 983/2082/818 980/2077/818 987/2083/818 +f 955/2084/819 978/2085/819 959/2047/819 +f 950/2086/820 969/2087/820 954/2088/820 +f 958/2089/821 977/2090/821 953/2091/821 +f 945/2092/822 968/2093/822 950/2086/822 +f 964/2051/823 984/2094/823 988/2095/823 +f 962/2096/824 981/2097/824 958/2089/824 +f 954/2088/825 974/2098/825 955/2084/825 +f 948/2099/826 967/2100/826 943/2101/826 +f 963/2048/827 987/2102/827 964/2103/827 +f 988/2095/828 984/2094/828 962/2045/828 +f 943/2104/829 965/2105/829 942/2106/829 +f 977/2090/830 989/2107/830 953/2091/830 +f 942/2106/831 965/2105/831 946/2108/831 +f 946/2108/832 971/2109/832 945/2110/832 +f 959/2047/833 982/2111/833 963/2048/833 +f 990/2112/834 941/2021/834 939/2020/834 +f 943/2025/789 944/2024/789 948/2113/789 +f 950/2114/790 947/2027/790 945/2026/790 +f 947/2027/791 944/2024/791 946/2028/791 +f 948/2031/792 949/2030/792 952/2036/792 +f 954/2037/793 951/2033/793 950/2032/793 +f 951/2033/794 949/2030/794 947/2034/794 +f 957/2040/795 953/2035/795 949/2030/795 +f 951/2033/796 955/2038/796 956/2039/796 +f 949/2030/797 956/2039/797 957/2040/797 +f 961/2115/798 958/2041/798 957/2040/798 +f 956/2039/799 959/2042/799 960/2043/799 +f 957/2040/800 960/2043/800 961/2115/800 +f 988/2095/801 962/2045/801 961/2044/801 +f 960/2049/802 963/2048/802 964/2103/802 +f 961/2044/803 964/2051/803 988/2095/803 +f 966/2054/804 967/2053/804 973/2116/804 +f 971/2117/805 970/2056/805 968/2055/805 +f 965/2052/806 966/2054/806 971/2058/806 +f 972/2062/807 973/2061/807 989/2118/807 +f 970/2066/808 975/2064/808 969/2063/808 +f 966/2060/809 972/2062/809 970/2066/809 +f 989/2118/810 977/2067/810 972/2062/810 +f 978/2069/811 975/2064/811 979/2070/811 +f 979/2070/812 972/2062/812 976/2068/812 +f 977/2067/813 981/2071/813 976/2068/813 +f 982/2075/814 979/2074/814 983/2080/814 +f 983/2076/815 976/2068/815 980/2072/815 +f 981/2119/816 985/2078/816 980/2077/816 +f 986/2081/817 983/2080/817 987/2120/817 +f 987/2083/818 980/2077/818 984/2079/818 +f 959/2047/835 978/2085/835 982/2111/835 +f 954/2088/836 969/2087/836 974/2098/836 +f 981/2097/837 977/2090/837 958/2089/837 +f 950/2086/838 968/2093/838 969/2087/838 +f 987/2121/839 984/2094/839 964/2051/839 +f 985/2122/840 981/2097/840 962/2096/840 +f 955/2084/841 974/2098/841 978/2085/841 +f 973/2123/842 967/2100/842 948/2099/842 +f 986/2124/843 987/2102/843 963/2048/843 +f 962/2045/844 984/2094/844 985/2125/844 +f 967/2126/845 965/2105/845 943/2104/845 +f 946/2108/846 965/2105/846 971/2109/846 +f 945/2110/847 971/2109/847 968/2127/847 +f 963/2048/848 982/2111/848 986/2124/848 +f 953/2091/849 989/2107/849 952/2128/849 +f 991/2129/850 992/2130/850 993/2131/850 +f 994/2132/851 993/2133/851 995/2134/851 +f 996/2135/852 995/2134/852 997/2136/852 +f 998/2137/853 997/2138/853 999/2139/853 +f 999/2139/854 1000/2140/854 1001/2141/854 +f 1002/2142/855 1001/2141/855 1003/2143/855 +f 1003/2144/856 1004/2145/856 1005/2146/856 +f 1006/2147/857 1005/2146/857 1007/2148/857 +f 1008/2149/858 1007/2148/858 1009/2150/858 +f 1010/2151/859 1009/2150/859 1011/2152/859 +f 993/2153/860 992/2154/860 1012/2155/860 +f 1013/2156/861 1012/2157/861 991/2129/861 +f 1014/2158/862 1011/2159/862 1012/2157/862 +f 991/2160/863 994/2161/863 1013/2162/863 +f 1015/2163/864 1016/2164/864 1017/2165/864 +f 1018/2166/865 1017/2165/865 1019/2167/865 +f 1019/2168/866 1020/2169/866 1021/2170/866 +f 1022/2171/867 1021/2172/867 1023/2173/867 +f 1024/2174/868 1025/2175/868 1026/2176/868 +f 1024/2177/869 1027/2178/869 1028/2179/869 +f 1028/2180/870 1029/2181/870 1030/2182/870 +f 1031/2183/871 1030/2182/871 1032/2184/871 +f 1015/2163/872 1032/2185/872 1033/2186/872 +f 1016/2164/873 1034/2187/873 1035/2188/873 +f 1017/2165/874 1035/2188/874 1020/2189/874 +f 1020/2169/875 1036/2190/875 1037/2191/875 +f 1021/2172/876 1037/2192/876 1023/2173/876 +f 1023/2173/877 1038/2193/877 1027/2178/877 +f 1027/2178/878 1039/2194/878 1040/2195/878 +f 1029/2181/879 1040/2196/879 1041/2197/879 +f 1030/2182/880 1041/2197/880 1042/2198/880 +f 1033/2186/881 1042/2199/881 1016/2164/881 +f 1034/2187/882 1043/2200/882 1044/2201/882 +f 1035/2188/883 1044/2201/883 1045/2202/883 +f 1036/2190/884 1045/2203/884 1046/2204/884 +f 1037/2192/885 1046/2205/885 1047/2206/885 +f 1038/2193/886 1047/2206/886 1039/2194/886 +f 1039/2194/887 1048/2207/887 1040/2195/887 +f 1040/2196/888 1049/2208/888 1041/2197/888 +f 1041/2197/889 1050/2209/889 1051/2210/889 +f 1042/2199/890 1051/2211/890 1043/2200/890 +f 1043/2212/891 1052/2213/891 1044/2214/891 +f 1044/2214/892 1053/2215/892 1045/2216/892 +f 1045/2203/893 1054/2217/893 1055/2218/893 +f 1046/2219/894 1055/2220/894 1056/2221/894 +f 1048/2222/895 1047/2223/895 1057/2224/895 +f 1048/2225/896 1058/2226/896 1049/2227/896 +f 1049/2208/897 1059/2228/897 1060/2229/897 +f 1050/2230/898 1060/2231/898 1061/2232/898 +f 1051/2233/899 1061/2232/899 1052/2213/899 +f 1052/2213/900 1062/2234/900 1063/2235/900 +f 1053/2215/901 1063/2235/901 1064/2236/901 +f 1054/2217/902 1064/2237/902 1065/2238/902 +f 1055/2220/903 1065/2239/903 1056/2221/903 +f 1056/2221/904 1066/2240/904 1058/2226/904 +f 1058/2226/905 1067/2241/905 1068/2242/905 +f 1059/2228/906 1068/2243/906 1069/2244/906 +f 1060/2231/907 1069/2245/907 1061/2232/907 +f 1061/2232/908 1070/2246/908 1062/2234/908 +f 1062/2234/909 1071/2247/909 1072/2248/909 +f 1063/2249/910 1072/2250/910 1073/2251/910 +f 1064/2237/911 1073/2251/911 1074/2252/911 +f 1065/2239/912 1074/2253/912 1075/2254/912 +f 1066/2240/913 1075/2254/913 1067/2241/913 +f 1067/2241/914 1076/2255/914 1068/2242/914 +f 1068/2243/915 1077/2256/915 1069/2244/915 +f 1069/2244/916 1078/2257/916 1079/2258/916 +f 1070/2246/917 1079/2259/917 1062/2234/917 +f 1071/2260/918 1080/2261/918 1072/2262/918 +f 1072/2250/919 1081/2263/919 1082/2264/919 +f 1073/2251/920 1082/2264/920 1083/2265/920 +f 1074/2266/921 1083/2267/921 1084/2268/921 +f 1085/2269/922 1076/2270/922 1086/2271/922 +f 1076/2272/923 1085/2273/923 1077/2274/923 +f 1077/2256/924 1087/2275/924 1088/2276/924 +f 1078/2277/925 1088/2278/925 1089/2279/925 +f 1079/2280/926 1089/2279/926 1080/2261/926 +f 1080/2261/927 1090/2281/927 1081/2282/927 +f 1081/2263/928 1091/2283/928 1092/2284/928 +f 1082/2264/929 1092/2284/929 1083/2265/929 +f 1083/2267/930 1093/2285/930 1084/2268/930 +f 1084/2268/931 1094/2286/931 1095/2287/931 +f 1085/2273/932 1095/2287/932 1096/2288/932 +f 1087/2275/933 1096/2289/933 1097/2290/933 +f 1088/2278/934 1097/2291/934 1098/2292/934 +f 1089/2279/935 1098/2292/935 1090/2281/935 +f 1090/2281/936 1099/2293/936 1091/2294/936 +f 1091/2283/937 1100/2295/937 1092/2284/937 +f 1092/2284/938 1101/2296/938 1093/2297/938 +f 1093/2285/939 1102/2298/939 1103/2299/939 +f 1094/2286/940 1103/2299/940 1104/2300/940 +f 1095/2287/941 1104/2300/941 1096/2288/941 +f 1096/2289/942 1105/2301/942 1106/2302/942 +f 1097/2290/943 1106/2302/943 1107/2303/943 +f 1098/2292/944 1107/2304/944 1090/2281/944 +f 1099/2305/945 1108/2306/945 1100/2307/945 +f 1100/2295/946 1109/2308/946 1110/2309/946 +f 1101/2296/947 1110/2309/947 1111/2310/947 +f 1102/2311/948 1111/2312/948 1112/2313/948 +f 1112/2314/895 1113/2315/895 1114/2316/895 +f 1104/2317/949 1113/2318/949 1105/2319/949 +f 1105/2301/950 1115/2320/950 1116/2321/950 +f 1106/2302/951 1116/2321/951 1107/2303/951 +f 1107/2322/952 1117/2323/952 1108/2306/952 +f 1108/2306/953 1118/2324/953 1119/2325/953 +f 1109/2326/954 1119/2325/954 1120/2327/954 +f 1110/2309/955 1120/2328/955 1121/2329/955 +f 1111/2312/956 1121/2330/956 1112/2313/956 +f 1112/2313/957 1122/2331/957 1123/2332/957 +f 1113/2318/958 1123/2332/958 1124/2333/958 +f 1115/2320/959 1124/2334/959 1116/2321/959 +f 1116/2335/960 1125/2336/960 1126/2337/960 +f 1117/2323/961 1126/2337/961 1118/2324/961 +f 1118/2324/962 1015/2338/962 1018/2339/962 +f 1119/2325/963 1018/2339/963 1019/2340/963 +f 1120/2328/964 1019/2168/964 1022/2341/964 +f 1121/2330/965 1022/2342/965 1025/2343/965 +f 1122/2331/966 1025/2343/966 1024/2344/966 +f 1123/2332/967 1024/2344/967 1124/2333/967 +f 1124/2334/968 1028/2180/968 1031/2183/968 +f 1125/2336/969 1031/2345/969 1126/2337/969 +f 1126/2337/970 1032/2346/970 1015/2338/970 +f 1127/2347/971 1128/2348/971 1129/2349/971 +f 1025/2350/860 1023/2351/860 1128/2205/860 +f 1023/2352/972 1027/2353/972 1129/2354/972 +f 1027/2355/973 1024/2356/973 1026/2357/973 +f 1130/2358/972 1131/2359/972 1114/2360/972 +f 1113/2361/974 1104/2362/974 1114/2363/974 +f 1104/2364/971 1103/2365/971 1132/2366/971 +f 1103/2367/860 1112/2368/860 1131/2369/860 +f 1133/2370/868 1134/2371/868 1057/2372/868 +f 1047/2373/860 1056/2374/860 1134/2375/860 +f 1058/2376/975 1048/2377/975 1057/2378/975 +f 1056/2379/971 1058/2374/971 1135/2380/971 +f 1136/2381/895 1137/2382/895 1138/2383/895 +f 1084/2384/868 1085/2385/868 1138/2386/868 +f 1075/2387/860 1084/2388/860 1137/2389/860 +f 1076/2390/972 1075/2391/972 1086/2392/972 +f 1139/2393/863 1140/2394/863 1141/2395/863 +f 1140/2396/976 1142/2397/976 1141/2398/976 +f 1142/2399/860 1143/2400/860 1144/2401/860 +f 1143/2402/977 1139/2403/977 1145/2404/977 +f 1145/2405/978 1141/2406/978 1146/2407/978 +f 1143/2408/979 1142/2409/979 1140/2410/979 +f 1090/2281/927 1091/2294/927 1081/2282/927 +f 994/2382/850 991/2129/850 993/2131/850 +f 996/2135/851 994/2132/851 995/2134/851 +f 998/2411/852 996/2135/852 997/2136/852 +f 1012/2157/861 992/2130/861 991/2129/861 +f 1002/2142/854 999/2139/854 1001/2141/854 +f 1142/2397/976 1146/2412/976 1141/2398/976 +f 1006/2147/856 1003/2144/856 1005/2146/856 +f 1008/2149/857 1006/2147/857 1007/2148/857 +f 1010/2151/858 1008/2149/858 1009/2150/858 +f 1014/2413/859 1010/2151/859 1011/2152/859 +f 993/2153/860 1012/2155/860 1011/2414/860 +f 993/2153/860 1011/2414/860 1009/2415/860 +f 995/2416/860 993/2153/860 1009/2415/860 +f 995/2416/860 1009/2415/860 1007/2417/860 +f 997/2418/860 995/2416/860 1000/2419/860 +f 995/2416/860 1007/2417/860 1000/2419/860 +f 1000/2419/860 1007/2417/860 1001/2420/860 +f 1007/2417/860 1005/2421/860 1001/2420/860 +f 1038/2193/877 1039/2194/877 1027/2178/877 +f 1013/2156/862 1014/2158/862 1012/2157/862 +f 1014/2422/863 1013/2162/863 1010/2423/863 +f 1124/2334/959 1125/2424/959 1116/2321/959 +f 994/2161/863 996/2425/863 1010/2423/863 +f 1010/2423/863 996/2425/863 1008/2426/863 +f 996/2425/863 998/2427/863 1008/2426/863 +f 998/2427/863 999/2428/863 1002/2429/863 +f 1008/2426/863 998/2427/863 1002/2429/863 +f 1006/2430/863 1008/2426/863 1002/2429/863 +f 1003/2431/863 1006/2430/863 1002/2429/863 +f 1018/2166/864 1015/2163/864 1017/2165/864 +f 1052/2213/891 1053/2215/891 1044/2214/891 +f 1022/2341/866 1019/2168/866 1021/2170/866 +f 1025/2432/980 1022/2171/980 1023/2173/980 +f 1025/2175/868 1127/2433/868 1026/2176/868 +f 1027/2178/981 1029/2434/981 1028/2179/981 +f 1031/2183/870 1028/2180/870 1030/2182/870 +f 1049/2208/888 1050/2209/888 1041/2197/888 +f 1016/2164/872 1015/2163/872 1033/2186/872 +f 1017/2165/873 1016/2164/873 1035/2188/873 +f 1077/2256/915 1078/2257/915 1069/2244/915 +f 1021/2170/875 1020/2169/875 1037/2191/875 +f 1037/2192/982 1038/2193/982 1023/2173/982 +f 1080/2261/918 1081/2282/918 1072/2262/918 +f 1029/2434/983 1027/2178/983 1040/2195/983 +f 1030/2182/879 1029/2181/879 1041/2197/879 +f 1033/2435/880 1030/2182/880 1042/2198/880 +f 1099/2293/936 1100/2436/936 1091/2294/936 +f 1035/2188/882 1034/2187/882 1044/2201/882 +f 1036/2437/883 1035/2188/883 1045/2202/883 +f 1037/2191/884 1036/2190/884 1046/2204/884 +f 1038/2193/984 1037/2192/984 1047/2206/984 +f 1001/2141/855 1004/2438/855 1003/2143/855 +f 1048/2207/985 1049/2439/985 1040/2195/985 +f 1108/2306/945 1109/2326/945 1100/2307/945 +f 1042/2198/889 1041/2197/889 1051/2210/889 +f 1034/2187/890 1042/2199/890 1043/2200/890 +f 1042/2199/881 1034/2187/881 1016/2164/881 +f 1017/2165/865 1020/2189/865 1019/2167/865 +f 1046/2204/893 1045/2203/893 1055/2218/893 +f 1047/2440/986 1046/2219/986 1056/2221/986 +f 1047/2223/895 1133/2441/895 1057/2224/895 +f 1058/2226/987 1059/2442/987 1049/2227/987 +f 1050/2209/897 1049/2208/897 1060/2229/897 +f 1051/2233/898 1050/2230/898 1061/2232/898 +f 1043/2212/899 1051/2233/899 1052/2213/899 +f 1053/2215/900 1052/2213/900 1063/2235/900 +f 1054/2443/901 1053/2215/901 1064/2236/901 +f 1055/2218/902 1054/2217/902 1065/2238/902 +f 1065/2239/988 1066/2240/988 1056/2221/988 +f 1030/2182/871 1033/2435/871 1032/2184/871 +f 1059/2442/989 1058/2226/989 1068/2242/989 +f 1060/2229/906 1059/2228/906 1069/2244/906 +f 1005/2421/860 1004/2444/860 1001/2420/860 +f 1052/2213/908 1061/2232/908 1062/2234/908 +f 1063/2235/909 1062/2234/909 1072/2248/909 +f 1064/2237/910 1063/2249/910 1073/2251/910 +f 1065/2238/911 1064/2237/911 1074/2252/911 +f 1066/2240/990 1065/2239/990 1075/2254/990 +f 1031/2345/969 1032/2346/969 1126/2337/969 +f 1076/2255/991 1077/2445/991 1068/2242/991 +f 1104/2362/974 1132/2446/974 1114/2363/974 +f 1070/2447/916 1069/2244/916 1079/2258/916 +f 1107/2304/944 1099/2293/944 1090/2281/944 +f 1035/2188/874 1036/2437/874 1020/2189/874 +f 1073/2251/919 1072/2250/919 1082/2264/919 +f 1074/2252/920 1073/2251/920 1083/2265/920 +f 1075/2448/992 1074/2266/992 1084/2268/992 +f 1138/2449/922 1085/2269/922 1086/2271/922 +f 1085/2273/993 1087/2450/993 1077/2274/993 +f 1078/2257/924 1077/2256/924 1088/2276/924 +f 1079/2280/925 1078/2277/925 1089/2279/925 +f 1071/2260/926 1079/2280/926 1080/2261/926 +f 1069/2245/907 1070/2246/907 1061/2232/907 +f 1082/2264/928 1081/2263/928 1092/2284/928 +f 1092/2284/929 1093/2297/929 1083/2265/929 +f 1093/2285/994 1094/2286/994 1084/2268/994 +f 1085/2273/931 1084/2268/931 1095/2287/931 +f 1087/2450/995 1085/2273/995 1096/2288/995 +f 1088/2276/933 1087/2275/933 1097/2290/933 +f 1089/2279/934 1088/2278/934 1098/2292/934 +f 1080/2261/935 1089/2279/935 1090/2281/935 +f 1047/2206/886 1048/2207/886 1039/2194/886 +f 1053/2215/892 1054/2443/892 1045/2216/892 +f 1116/2321/951 1117/2451/951 1107/2303/951 +f 1094/2286/996 1093/2285/996 1103/2299/996 +f 1095/2287/997 1094/2286/997 1104/2300/997 +f 1104/2300/998 1105/2452/998 1096/2288/998 +f 1097/2290/942 1096/2289/942 1106/2302/942 +f 1098/2453/943 1097/2290/943 1107/2303/943 +f 1075/2254/999 1076/2255/999 1067/2241/999 +f 1100/2295/937 1101/2296/937 1092/2284/937 +f 1101/2296/946 1100/2295/946 1110/2309/946 +f 1102/2454/947 1101/2296/947 1111/2310/947 +f 1103/2455/1000 1102/2311/1000 1112/2313/1000 +f 1131/2456/895 1112/2314/895 1114/2316/895 +f 1113/2318/1001 1115/2457/1001 1105/2319/1001 +f 1106/2302/950 1105/2301/950 1116/2321/950 +f 1079/2259/917 1071/2247/917 1062/2234/917 +f 1099/2305/952 1107/2322/952 1108/2306/952 +f 1109/2326/953 1108/2306/953 1119/2325/953 +f 1110/2458/954 1109/2326/954 1120/2327/954 +f 1111/2310/955 1110/2309/955 1121/2329/955 +f 1121/2330/1002 1122/2331/1002 1112/2313/1002 +f 1113/2318/957 1112/2313/957 1123/2332/957 +f 1115/2457/1003 1113/2318/1003 1124/2333/1003 +f 1101/2296/938 1102/2454/938 1093/2297/938 +f 1117/2323/960 1116/2335/960 1126/2337/960 +f 1108/2306/961 1117/2323/961 1118/2324/961 +f 1119/2325/962 1118/2324/962 1018/2339/962 +f 1120/2327/963 1119/2325/963 1019/2340/963 +f 1121/2329/964 1120/2328/964 1022/2341/964 +f 1122/2331/1004 1121/2330/1004 1025/2343/1004 +f 1123/2332/966 1122/2331/966 1024/2344/966 +f 1024/2344/1005 1028/2459/1005 1124/2333/1005 +f 1125/2424/968 1124/2334/968 1031/2183/968 +f 1134/2371/868 1135/2460/868 1057/2372/868 +f 1118/2324/970 1126/2337/970 1015/2338/970 +f 1026/2461/971 1127/2347/971 1129/2349/971 +f 1127/2462/860 1025/2350/860 1128/2205/860 +f 1128/2463/972 1023/2352/972 1129/2354/972 +f 1129/2464/973 1027/2355/973 1026/2357/973 +f 1132/2465/972 1130/2358/972 1114/2360/972 +f 1013/2162/863 994/2161/863 1010/2423/863 +f 1103/2365/971 1130/2466/971 1132/2366/971 +f 1130/2467/860 1103/2367/860 1131/2369/860 +f 1066/2240/904 1067/2241/904 1058/2226/904 +f 1133/2468/860 1047/2373/860 1134/2375/860 +f 1135/2469/975 1058/2376/975 1057/2378/975 +f 1134/2470/971 1056/2379/971 1135/2380/971 +f 1086/2471/895 1136/2381/895 1138/2383/895 +f 1137/2472/868 1084/2384/868 1138/2386/868 +f 1136/2473/860 1075/2387/860 1137/2389/860 +f 1075/2391/972 1136/2474/972 1086/2392/972 +f 1145/2400/863 1139/2393/863 1141/2395/863 +f 997/2138/853 1000/2140/853 999/2139/853 +f 1146/2475/860 1142/2399/860 1144/2401/860 +f 1144/2476/977 1143/2402/977 1145/2404/977 +f 1144/2477/978 1145/2405/978 1146/2407/978 +f 1139/2478/979 1143/2408/979 1140/2410/979 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_left.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_left.obj new file mode 100644 index 00000000..7e53ea30 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_left.obj @@ -0,0 +1,1074 @@ +# Blender v2.68 (sub 0) OBJ File: 'buggyWheelLeft.blend' +# www.blender.org +mtllib buggyWheelLeft.mtl +o WheelLeft_Wheel +v -0.621233 -0.029705 0.990662 +v -0.671233 -0.029705 0.990662 +v -0.621233 -0.529705 0.856687 +v -0.671233 -0.529705 0.856687 +v -0.621233 -0.895730 0.490662 +v -0.671233 -0.895730 0.490662 +v -0.621233 -1.029705 -0.009338 +v -0.671233 -1.029705 -0.009338 +v -0.621233 -0.895730 -0.509338 +v -0.671233 -0.895730 -0.509338 +v -0.621233 -0.529705 -0.875363 +v -0.671233 -0.529705 -0.875363 +v -0.621233 -0.029705 -1.009338 +v -0.671233 -0.029705 -1.009338 +v -0.621233 0.470295 -0.875363 +v -0.671233 0.470295 -0.875363 +v -0.621233 0.836321 -0.509338 +v -0.671233 0.836321 -0.509338 +v -0.621233 0.970295 -0.009338 +v -0.671233 0.970295 -0.009338 +v -0.621233 0.836321 0.490662 +v -0.671233 0.836321 0.490662 +v -0.621233 0.470296 0.856687 +v -0.671233 0.470296 0.856687 +v -0.641560 -1.169831 -0.353885 +v -0.929606 -1.113608 -0.337763 +v -1.082872 -0.971246 -0.296941 +v -1.029643 -0.809358 -0.250521 +v -0.794826 -0.703693 -0.325664 +v -0.488293 -0.703693 -0.325664 +v -0.253476 -0.809358 -0.250521 +v -0.200247 -0.971246 -0.296941 +v -0.353513 -1.113608 -0.337763 +v -0.641560 -1.181124 0.293064 +v -0.929606 -1.124372 0.278915 +v -1.082872 -0.980672 0.243086 +v -1.029643 -0.817263 0.202344 +v -0.794826 -0.710605 0.268295 +v -0.488293 -0.710605 0.268295 +v -0.253476 -0.817263 0.202344 +v -0.200247 -0.980672 0.243086 +v -0.353513 -1.124372 0.278915 +v -0.641560 -0.867429 0.858985 +v -0.929606 -0.825355 0.818355 +v -1.082872 -0.718822 0.715477 +v -1.029643 -0.597676 0.598488 +v -0.794826 -0.518604 0.522129 +v -0.488293 -0.518604 0.522129 +v -0.253476 -0.597676 0.598488 +v -0.200247 -0.718822 0.715477 +v -0.353513 -0.825355 0.818355 +v -0.641560 -0.312801 1.192239 +v -0.929606 -0.296679 1.136016 +v -1.082872 -0.255857 0.993654 +v -1.029643 -0.209437 0.831766 +v -0.794826 -0.284580 0.726101 +v -0.488293 -0.284579 0.726101 +v -0.253476 -0.209437 0.831766 +v -0.200247 -0.255857 0.993654 +v -0.353513 -0.296679 1.136016 +v -0.641560 0.334148 1.203532 +v -0.929606 0.319999 1.146780 +v -1.082872 0.284170 1.003080 +v -1.029643 0.243428 0.839671 +v -0.794826 0.309379 0.733013 +v -0.488293 0.309379 0.733013 +v -0.253476 0.243428 0.839671 +v -0.200247 0.284170 1.003080 +v -0.353513 0.319999 1.146780 +v -0.641560 0.900069 0.889837 +v -0.929606 0.859439 0.847764 +v -1.082872 0.756561 0.741230 +v -1.029643 0.639572 0.620084 +v -0.794826 0.563213 0.541012 +v -0.488293 0.563213 0.541012 +v -0.253476 0.639572 0.620085 +v -0.200247 0.756561 0.741230 +v -0.353513 0.859439 0.847764 +v -0.641560 1.233323 0.335209 +v -0.929606 1.177100 0.319087 +v -1.082872 1.034738 0.278265 +v -1.029643 0.872850 0.231845 +v -0.794826 0.767185 0.306988 +v -0.488293 0.767185 0.306988 +v -0.253476 0.872850 0.231845 +v -0.200247 1.034738 0.278266 +v -0.353513 1.177100 0.319087 +v -0.641560 1.244616 -0.311740 +v -0.929606 1.187865 -0.297590 +v -1.082872 1.044165 -0.261762 +v -1.029643 0.880755 -0.221019 +v -0.794826 0.774097 -0.286971 +v -0.488293 0.774097 -0.286971 +v -0.253476 0.880755 -0.221019 +v -0.200247 1.044165 -0.261762 +v -0.353513 1.187865 -0.297590 +v -0.641559 0.930921 -0.877661 +v -0.929606 0.888848 -0.837031 +v -1.082872 0.782314 -0.734153 +v -1.029643 0.661169 -0.617164 +v -0.794826 0.582096 -0.540805 +v -0.488293 0.582096 -0.540805 +v -0.253476 0.661169 -0.617164 +v -0.200247 0.782314 -0.734153 +v -0.353513 0.888848 -0.837031 +v -0.641559 0.376293 -1.210915 +v -0.929606 0.360171 -1.154692 +v -1.082872 0.319350 -1.012330 +v -1.029643 0.272929 -0.850442 +v -0.794826 0.348072 -0.744777 +v -0.488293 0.348072 -0.744777 +v -0.253476 0.272929 -0.850442 +v -0.200247 0.319350 -1.012330 +v -0.353513 0.360171 -1.154692 +v -0.641559 -0.270656 -1.222208 +v -0.929606 -0.256506 -1.165456 +v -1.082872 -0.220678 -1.021756 +v -1.029643 -0.179935 -0.858347 +v -0.794826 -0.245887 -0.751689 +v -0.488293 -0.245887 -0.751689 +v -0.253476 -0.179935 -0.858347 +v -0.200247 -0.220678 -1.021756 +v -0.353513 -0.256506 -1.165456 +v -0.641559 -0.836577 -0.908513 +v -0.929606 -0.795947 -0.866439 +v -1.082872 -0.693069 -0.759906 +v -1.029643 -0.576080 -0.638760 +v -0.794826 -0.499721 -0.559688 +v -0.488293 -0.499721 -0.559688 +v -0.253476 -0.576080 -0.638760 +v -0.200247 -0.693069 -0.759906 +v -0.353513 -0.795947 -0.866439 +v -0.794826 -0.303720 -0.321009 +v -0.560728 -0.303720 -0.321009 +v -0.794826 -0.310632 0.272950 +v -0.560728 -0.310632 0.272950 +v -0.794826 0.343418 -0.344804 +v -0.560728 0.343418 -0.344804 +v -0.794826 -0.250541 -0.351716 +v -0.560728 -0.250541 -0.351716 +v -0.794826 -0.279925 0.326128 +v -0.560728 -0.279925 0.326128 +v -0.794826 0.314034 0.333040 +v -0.560728 0.314034 0.333040 +v -0.794826 0.367212 0.302333 +v -0.560728 0.367212 0.302333 +v -0.794826 0.374124 -0.291625 +v -0.560728 0.374124 -0.291625 +v -0.000197 -0.051023 -0.055278 +v -0.000197 -0.051023 0.044722 +v -0.750197 -0.051024 0.044722 +v -0.750197 -0.051024 -0.055278 +v -0.000197 0.048977 -0.055278 +v -0.000197 0.048977 0.044722 +v -0.750197 0.048977 0.044722 +v -0.750197 0.048977 -0.055278 +vt 0.513647 0.784487 +vt 0.505979 0.784463 +vt 0.506198 0.712982 +vt 0.949916 0.484370 +vt 0.942329 0.484463 +vt 0.945409 0.410028 +vt 0.952996 0.409935 +vt 0.942546 0.331778 +vt 0.342546 0.743532 +vt 0.334878 0.743555 +vt 0.342337 0.675297 +vt 0.334669 0.675321 +vt 0.334425 0.595943 +vt 0.342093 0.595919 +vt 0.341881 0.526668 +vt 0.513866 0.627997 +vt 0.521530 0.628020 +vt 0.523522 0.675921 +vt 0.515859 0.675897 +vt 0.524342 0.749056 +vt 0.516678 0.749032 +vt 0.523768 0.827828 +vt 0.516105 0.827805 +vt 0.521955 0.891132 +vt 0.450859 0.331796 +vt 0.530222 0.331685 +vt 0.598987 0.371272 +vt 0.513404 0.863656 +vt 0.505736 0.863633 +vt 0.513203 0.929300 +vt 0.505535 0.929277 +vt 0.039689 0.599849 +vt 0.000006 0.531119 +vt 0.108414 0.639514 +vt 0.830572 0.623547 +vt 0.837842 0.712975 +vt 0.792882 0.715173 +vt 0.785952 0.629929 +vt 0.760389 0.645015 +vt 0.538434 0.331685 +vt 0.455612 0.331599 +vt 0.462432 0.306441 +vt 0.758883 0.693669 +vt 0.757766 0.757554 +vt 0.722111 0.772972 +vt 0.340191 0.815624 +vt 0.340047 0.862634 +vt 0.296730 0.826599 +vt 0.676578 0.688839 +vt 0.675129 0.772828 +vt 0.639920 0.693304 +vt 0.224995 0.065745 +vt 0.157598 0.048960 +vt 0.157196 0.023387 +vt 0.237565 0.043402 +vt 0.248435 0.022857 +vt 0.873372 0.628856 +vt 0.880302 0.714100 +vt 0.837952 0.811916 +vt 0.792987 0.809483 +vt 0.766458 0.719664 +vt 0.383912 0.290126 +vt 0.402305 0.271662 +vt 0.757836 0.826514 +vt 0.722394 0.820120 +vt 0.675411 0.819976 +vt 0.638873 0.826149 +vt 0.090829 0.068110 +vt 0.077576 0.046222 +vt 0.065737 0.026077 +vt 0.880407 0.808411 +vt 0.830872 0.893857 +vt 0.786238 0.887590 +vt 0.760640 0.870651 +vt 0.342546 0.218378 +vt 0.367616 0.211494 +vt 0.759075 0.882071 +vt 0.722989 0.862610 +vt 0.676007 0.862466 +vt 0.042578 0.118064 +vt 0.020038 0.105790 +vt 0.000032 0.094100 +vt 0.873658 0.886518 +vt 0.410759 0.627997 +vt 0.410461 0.725136 +vt 0.366572 0.631903 +vt 0.366288 0.724497 +vt 0.343036 0.642066 +vt 0.342597 0.135579 +vt 0.367659 0.142060 +vt 0.880968 0.806986 +vt 0.880818 0.758099 +vt 0.916772 0.739329 +vt 0.651260 0.882071 +vt 0.697672 0.885209 +vt 0.662245 0.938429 +vt 0.963979 0.803673 +vt 0.963782 0.739184 +vt 1.000000 0.806621 +vt 0.025774 0.185436 +vt 0.000000 0.186130 +vt 0.478394 0.642481 +vt 0.478145 0.723566 +vt 0.454637 0.724768 +vt 0.454921 0.632174 +vt 0.410172 0.819393 +vt 0.366012 0.814343 +vt 0.342546 0.801829 +vt 0.384052 0.063917 +vt 0.402423 0.081964 +vt 0.880613 0.691089 +vt 0.916624 0.690900 +vt 0.963633 0.690756 +vt 0.999644 0.690724 +vt 0.044920 0.252175 +vt 0.022831 0.265714 +vt 0.477904 0.802245 +vt 0.454361 0.814614 +vt 0.409969 0.885511 +vt 0.365819 0.877368 +vt 0.368352 0.047191 +vt 0.450287 0.000000 +vt 0.455804 0.022591 +vt 0.462593 0.047308 +vt 0.880407 0.623912 +vt 0.916478 0.643449 +vt 0.963487 0.643305 +vt 0.094886 0.300397 +vt 0.082414 0.323218 +vt 0.071262 0.342388 +vt 0.454168 0.877639 +vt 0.227346 0.639514 +vt 0.226590 0.730789 +vt 0.183470 0.645319 +vt 0.544864 0.000098 +vt 0.538625 0.022677 +vt 0.532047 0.047380 +vt 0.004897 0.829814 +vt 0.000000 0.767199 +vt 0.037024 0.750858 +vt 0.942329 0.331690 +vt 0.942143 0.422777 +vt 0.880522 0.422772 +vt 0.089896 0.832774 +vt 0.083541 0.750430 +vt 0.122682 0.828730 +vt 0.162283 0.317182 +vt 0.162782 0.343233 +vt 0.295948 0.658646 +vt 0.295317 0.734836 +vt 0.271046 0.731781 +vt 0.271767 0.644777 +vt 0.227597 0.829298 +vt 0.182750 0.732323 +vt 0.626741 0.047457 +vt 0.610325 0.064150 +vt 0.000136 0.697941 +vt 0.038112 0.703199 +vt 0.084629 0.702771 +vt 0.117920 0.696857 +vt 0.229052 0.298032 +vt 0.242403 0.320397 +vt 0.296157 0.817064 +vt 0.272006 0.825681 +vt 0.230097 0.908646 +vt 0.183709 0.826223 +vt 0.673979 0.129389 +vt 0.651692 0.135898 +vt 0.592174 0.082159 +vt 0.005267 0.640598 +vt 0.040542 0.659803 +vt 0.087059 0.659375 +vt 0.277303 0.248078 +vt 0.299941 0.260829 +vt 0.319664 0.271145 +vt 0.274389 0.901316 +vt 0.741395 0.261535 +vt 0.741609 0.191696 +vt 0.785593 0.253882 +vt 0.673921 0.223940 +vt 0.651640 0.218697 +vt 0.626821 0.211761 +vt 0.810381 0.180625 +vt 0.810172 0.112628 +vt 0.846144 0.099522 +vt 0.182750 0.908788 +vt 0.229268 0.908646 +vt 0.222215 0.964156 +vt 0.893427 0.188659 +vt 0.893153 0.099377 +vt 0.929413 0.180260 +vt 0.294107 0.180706 +vt 0.319979 0.180490 +vt 0.697244 0.253611 +vt 0.697449 0.187039 +vt 0.741903 0.095967 +vt 0.786077 0.096061 +vt 0.785797 0.187310 +vt 0.809582 0.096028 +vt 0.610185 0.290360 +vt 0.592057 0.271858 +vt 0.809970 0.046648 +vt 0.846009 0.055773 +vt 0.893019 0.055628 +vt 0.929002 0.046283 +vt 0.274961 0.113968 +vt 0.673979 0.175520 +vt 0.674224 0.095612 +vt 0.697729 0.095790 +vt 0.742197 0.000000 +vt 0.786358 0.004584 +vt 0.809828 0.015921 +vt 0.531886 0.306513 +vt 0.809828 0.000365 +vt 0.845895 0.018329 +vt 0.892904 0.018185 +vt 0.674470 0.015506 +vt 0.698009 0.004313 +vt 0.296717 0.700612 +vt 0.296620 0.616610 +vt 0.332497 0.616060 +vt 0.697691 0.973157 +vt 0.697755 0.882071 +vt 0.759075 0.882090 +vt 0.673979 0.271562 +vt 0.720988 0.271418 +vt 0.710064 0.331575 +vt 0.880501 0.986627 +vt 0.880407 0.895539 +vt 0.941428 0.895638 +vt 0.296894 0.616060 +vt 0.296620 0.526778 +vt 0.332521 0.526668 +vt 0.942003 0.443940 +vt 0.942066 0.535002 +vt 0.880522 0.443704 +vt 0.132764 0.904948 +vt 0.179746 0.905092 +vt 0.142890 0.961540 +vt 0.478394 0.885555 +vt 0.478366 0.976614 +vt 0.417029 0.976571 +vt 0.768196 0.331685 +vt 0.767998 0.267196 +vt 0.804096 0.331575 +vt 0.819042 0.984916 +vt 0.819070 0.893857 +vt 0.880407 0.893900 +vt 0.911795 0.280229 +vt 0.911732 0.189167 +vt 0.972929 0.188803 +vt 0.772063 0.894433 +vt 0.819042 0.893857 +vt 0.807833 0.950559 +vt 0.513839 0.630393 +vt 0.513866 0.712982 +vt 0.478421 0.710586 +vt 0.296764 0.909643 +vt 0.296620 0.862634 +vt 0.340081 0.873609 +vt 0.403930 0.885530 +vt 0.403866 0.976615 +vt 0.342546 0.976597 +vt 0.767998 0.331685 +vt 0.720988 0.331541 +vt 0.757074 0.271528 +vt 0.819432 0.331679 +vt 0.804097 0.331685 +vt 0.804096 0.316355 +vt 0.485178 0.926307 +vt 0.484825 0.811289 +vt 0.500243 0.926261 +vt 0.819427 0.301009 +vt 0.819426 0.316344 +vt 0.804096 0.316349 +vt 0.014299 0.948221 +vt 0.014652 0.833202 +vt 0.025634 0.833236 +vt 0.000349 0.834079 +vt 0.014299 0.833202 +vt 0.013950 0.947021 +vt 0.943974 0.115104 +vt 0.929765 0.114953 +vt 0.929413 0.000000 +vt 0.513866 0.713006 +vt 0.950133 0.331685 +vt 0.499890 0.811242 +vt 0.514292 0.891109 +vt 0.638731 0.439950 +vt 0.638802 0.519317 +vt 0.382165 0.371576 +vt 0.599183 0.588106 +vt 0.342546 0.440365 +vt 0.342618 0.519731 +vt 0.382361 0.588410 +vt 0.530489 0.627886 +vt 0.187768 0.639484 +vt 0.256486 0.599768 +vt 0.297148 0.100906 +vt 0.000000 0.451739 +vt 0.296157 0.531008 +vt 0.039671 0.382978 +vt 0.108390 0.343263 +vt 0.187743 0.343233 +vt 0.296151 0.451628 +vt 0.256469 0.382898 +vt 0.723561 0.688983 +vt 0.296620 0.862500 +vt 0.638802 0.757189 +vt 0.156659 0.000000 +vt 0.186092 0.901858 +vt 0.766550 0.802252 +vt 0.334213 0.526692 +vt 0.640111 0.881706 +vt 0.916970 0.803817 +vt 0.697691 0.940825 +vt 0.999850 0.757734 +vt 0.342787 0.723150 +vt 0.451127 0.627997 +vt 0.999438 0.623547 +vt 0.880585 0.534766 +vt 0.003222 0.276723 +vt 0.043380 0.833203 +vt 0.880707 0.331685 +vt 0.117785 0.766115 +vt 0.342546 0.179402 +vt 0.123052 0.639514 +vt 0.253959 0.339168 +vt 0.626864 0.142327 +vt 0.846418 0.188803 +vt 0.186689 0.964265 +vt 0.929204 0.112263 +vt 0.809337 0.175935 +vt 0.928860 0.000000 +vt 0.803899 0.267086 +vt 0.332593 0.700061 +vt 0.759010 0.973175 +vt 0.674164 0.331685 +vt 0.941522 0.986726 +vt 0.332795 0.615950 +vt 0.178770 0.961650 +vt 0.417057 0.885511 +vt 0.880379 0.984960 +vt 0.972992 0.279865 +vt 0.771955 0.951000 +vt 0.478394 0.627997 +vt 0.340191 0.909510 +vt 0.342611 0.885511 +vt 0.721173 0.271418 +vt 0.819431 0.316349 +vt 0.804097 0.301014 +vt 0.025281 0.948255 +vt 0.000000 0.947897 +vt 0.943621 0.000151 +usemtl None +f 1/1 2/2 4/3 +f 3/4 4/5 6/6 +f 5/7 6/6 8/8 +f 7/9 8/10 9/11 +f 9/11 10/12 12/13 +f 11/14 12/13 13/15 +f 13/16 14/17 16/18 +f 15/19 16/18 18/20 +f 17/21 18/20 20/22 +f 19/23 20/22 22/24 +f 4/25 2/26 24/27 +f 23/28 24/29 1/1 +f 21/30 22/31 24/29 +f 1/32 3/33 23/34 +f 25/35 34/36 35/37 +f 26/38 35/37 27/39 +f 27/40 36/41 37/42 +f 28/43 37/44 38/45 +f 30/46 29/47 134/48 +f 30/49 39/50 31/51 +f 31/52 40/53 41/54 +f 32/55 41/54 33/56 +f 25/35 33/57 42/58 +f 34/36 43/59 44/60 +f 35/37 44/60 36/61 +f 36/41 45/62 46/63 +f 37/44 46/64 38/45 +f 38/45 47/65 39/50 +f 39/50 48/66 49/67 +f 40/53 49/68 50/69 +f 41/54 50/69 51/70 +f 42/58 51/71 34/36 +f 43/59 52/72 53/73 +f 44/60 53/73 54/74 +f 45/62 54/75 55/76 +f 46/64 55/77 56/78 +f 47/65 56/78 48/66 +f 48/66 57/79 49/67 +f 49/68 58/80 50/69 +f 50/69 59/81 60/82 +f 51/71 60/83 52/72 +f 52/84 61/85 53/86 +f 53/86 62/87 54/88 +f 54/75 63/89 64/90 +f 55/91 64/92 65/93 +f 57/94 56/95 142/96 +f 57/97 66/98 58/99 +f 58/80 67/100 68/101 +f 59/102 68/103 69/104 +f 60/105 69/104 61/85 +f 61/85 70/106 71/107 +f 62/87 71/107 72/108 +f 63/89 72/109 73/110 +f 64/92 73/111 65/93 +f 65/93 74/112 66/98 +f 66/98 75/113 76/114 +f 67/100 76/115 77/116 +f 68/103 77/117 69/104 +f 69/104 78/118 70/106 +f 70/106 79/119 80/120 +f 71/121 80/122 81/123 +f 72/109 81/123 82/124 +f 73/111 82/125 83/126 +f 74/112 83/126 75/113 +f 75/113 84/127 76/114 +f 76/115 85/128 77/116 +f 77/116 86/129 87/130 +f 78/118 87/131 70/106 +f 79/132 88/133 80/134 +f 80/122 89/135 90/136 +f 81/123 90/136 91/137 +f 82/138 91/139 92/140 +f 93/141 84/142 146/143 +f 84/144 93/145 85/146 +f 85/128 94/147 95/148 +f 86/149 95/150 96/151 +f 87/152 96/151 88/133 +f 88/133 97/153 89/154 +f 89/135 98/155 99/156 +f 90/136 99/156 91/137 +f 91/139 100/157 92/140 +f 92/140 101/158 102/159 +f 93/145 102/159 103/160 +f 94/147 103/161 104/162 +f 95/150 104/163 105/164 +f 96/151 105/164 97/153 +f 97/153 106/165 98/166 +f 98/155 107/167 99/156 +f 99/156 108/168 100/169 +f 100/157 109/170 110/171 +f 101/158 110/171 111/172 +f 102/159 111/172 103/160 +f 103/161 112/173 113/174 +f 104/162 113/174 114/175 +f 105/164 114/176 97/153 +f 106/177 115/178 107/179 +f 107/167 116/180 117/181 +f 108/168 117/181 118/182 +f 109/183 118/184 119/185 +f 119/186 120/187 140/188 +f 111/189 120/190 112/191 +f 112/173 121/192 122/193 +f 113/174 122/193 114/175 +f 114/194 123/195 115/178 +f 115/178 124/196 125/197 +f 116/198 125/197 126/199 +f 117/181 126/200 127/201 +f 118/184 127/202 119/185 +f 119/185 128/203 129/204 +f 120/190 129/204 130/205 +f 121/192 130/206 122/193 +f 122/207 131/208 132/209 +f 123/195 132/209 124/196 +f 124/196 25/210 26/211 +f 125/197 26/211 27/212 +f 126/200 27/40 28/213 +f 127/202 28/214 29/215 +f 128/203 29/215 30/216 +f 129/204 30/216 130/205 +f 130/206 31/52 32/55 +f 131/208 32/217 132/209 +f 132/209 33/218 25/210 +f 133/219 135/220 136/221 +f 29/222 38/223 135/224 +f 38/225 39/226 136/227 +f 39/228 30/229 134/230 +f 137/231 139/232 140/233 +f 120/234 111/235 140/236 +f 111/237 110/238 138/239 +f 110/240 119/241 139/242 +f 141/243 143/244 142/245 +f 56/246 65/247 143/248 +f 66/249 57/250 142/251 +f 65/252 66/253 144/254 +f 145/255 147/256 148/257 +f 92/258 93/259 148/260 +f 83/261 92/262 147/263 +f 84/264 83/265 146/266 +f 153/267 154/268 150/269 +f 154/270 155/271 150/272 +f 155/273 156/274 152/275 +f 156/276 153/277 149/278 +f 149/279 150/280 151/281 +f 156/282 155/283 154/284 +f 97/153 98/166 89/154 +f 3/285 1/1 4/3 +f 5/7 3/4 6/6 +f 7/286 5/7 8/8 +f 24/29 2/2 1/1 +f 11/14 9/11 12/13 +f 155/271 151/287 150/272 +f 15/19 13/16 16/18 +f 17/21 15/19 18/20 +f 19/23 17/21 20/22 +f 21/288 19/23 22/24 +f 4/25 24/27 22/289 +f 4/25 22/289 20/290 +f 6/291 4/25 20/290 +f 6/291 20/290 18/292 +f 8/293 6/291 10/294 +f 6/291 18/292 10/294 +f 10/294 18/292 12/295 +f 18/292 16/296 12/295 +f 47/65 48/66 39/50 +f 23/28 21/30 24/29 +f 21/297 23/34 19/298 +f 130/206 131/299 122/193 +f 3/33 5/300 19/298 +f 19/298 5/300 17/301 +f 5/300 7/302 17/301 +f 7/302 9/303 11/304 +f 17/301 7/302 11/304 +f 15/305 17/301 11/304 +f 13/306 15/305 11/304 +f 26/38 25/35 35/37 +f 61/85 62/87 53/86 +f 28/213 27/40 37/42 +f 29/307 28/43 38/45 +f 29/47 133/308 134/48 +f 39/50 40/309 31/51 +f 32/55 31/52 41/54 +f 58/80 59/81 50/69 +f 34/36 25/35 42/58 +f 35/37 34/36 44/60 +f 85/128 86/129 77/116 +f 37/42 36/41 46/63 +f 46/64 47/65 38/45 +f 88/133 89/154 80/134 +f 40/309 39/50 49/67 +f 41/54 40/53 50/69 +f 42/310 41/54 51/70 +f 106/165 107/311 98/166 +f 44/60 43/59 53/73 +f 45/312 44/60 54/74 +f 46/63 45/62 55/76 +f 47/65 46/64 56/78 +f 12/13 14/313 13/15 +f 57/79 58/314 49/67 +f 115/178 116/198 107/179 +f 51/70 50/69 60/82 +f 43/59 51/71 52/72 +f 51/71 43/59 34/36 +f 35/37 36/61 27/39 +f 55/76 54/75 64/90 +f 56/315 55/91 65/93 +f 56/95 141/316 142/96 +f 66/98 67/317 58/99 +f 59/81 58/80 68/101 +f 60/105 59/102 69/104 +f 52/84 60/105 61/85 +f 62/87 61/85 71/107 +f 63/318 62/87 72/108 +f 64/90 63/89 73/110 +f 73/111 74/112 65/93 +f 41/54 42/310 33/56 +f 67/317 66/98 76/114 +f 68/101 67/100 77/116 +f 16/296 14/319 12/295 +f 61/85 69/104 70/106 +f 71/107 70/106 80/120 +f 72/109 71/121 81/123 +f 73/110 72/109 82/124 +f 74/112 73/111 83/126 +f 32/217 33/218 132/209 +f 84/127 85/320 76/114 +f 111/235 138/321 140/236 +f 78/322 77/116 87/130 +f 114/176 106/165 97/153 +f 44/60 45/312 36/61 +f 81/123 80/122 90/136 +f 82/124 81/123 91/137 +f 83/323 82/138 92/140 +f 148/324 93/141 146/143 +f 93/145 94/325 85/146 +f 86/129 85/128 95/148 +f 87/152 86/149 96/151 +f 79/132 87/152 88/133 +f 77/117 78/118 69/104 +f 90/136 89/135 99/156 +f 99/156 100/169 91/137 +f 100/157 101/158 92/140 +f 93/145 92/140 102/159 +f 94/325 93/145 103/160 +f 95/148 94/147 104/162 +f 96/151 95/150 105/164 +f 88/133 96/151 97/153 +f 56/78 57/79 48/66 +f 62/87 63/318 54/88 +f 122/193 123/326 114/175 +f 101/158 100/157 110/171 +f 102/159 101/158 111/172 +f 111/172 112/327 103/160 +f 104/162 103/161 113/174 +f 105/328 104/162 114/175 +f 83/126 84/127 75/113 +f 107/167 108/168 99/156 +f 108/168 107/167 117/181 +f 109/329 108/168 118/182 +f 110/330 109/183 119/185 +f 139/331 119/186 140/188 +f 120/190 121/332 112/191 +f 113/174 112/173 122/193 +f 87/131 79/119 70/106 +f 106/177 114/194 115/178 +f 116/198 115/178 125/197 +f 117/333 116/198 126/199 +f 118/182 117/181 127/201 +f 127/202 128/203 119/185 +f 120/190 119/185 129/204 +f 121/332 120/190 130/205 +f 108/168 109/329 100/169 +f 123/195 122/207 132/209 +f 115/178 123/195 124/196 +f 125/197 124/196 26/211 +f 126/199 125/197 27/212 +f 127/201 126/200 28/213 +f 128/203 127/202 29/215 +f 129/204 128/203 30/216 +f 30/216 31/334 130/205 +f 131/299 130/206 32/55 +f 143/244 144/335 142/245 +f 124/196 132/209 25/210 +f 134/336 133/219 136/221 +f 133/337 29/222 135/224 +f 135/338 38/225 136/227 +f 136/339 39/228 134/230 +f 138/340 137/231 140/233 +f 23/34 3/33 19/298 +f 110/238 137/341 138/239 +f 137/342 110/240 139/242 +f 74/112 75/113 66/98 +f 141/343 56/246 143/248 +f 144/344 66/249 142/251 +f 143/345 65/252 144/254 +f 146/346 145/255 148/257 +f 147/347 92/258 148/260 +f 145/348 83/261 147/263 +f 83/265 145/349 146/266 +f 149/350 153/267 150/269 +f 8/10 10/12 9/11 +f 151/351 155/273 152/275 +f 152/352 156/276 149/278 +f 152/353 149/279 151/281 +f 153/354 156/282 154/284 +o WheelLeftCover_Cover +v -0.925456 1.350251 -0.415400 +v -0.925456 1.361015 0.262945 +v -0.931513 1.324180 -0.387819 +v -0.931513 1.334944 0.261483 +v -0.637409 1.073219 -1.043225 +v -0.925455 1.032589 -0.996944 +v -0.196097 0.929711 -0.879757 +v -0.349363 1.032590 -0.996944 +v -0.637409 1.406474 -0.433134 +v -0.925455 1.350251 -0.415400 +v -0.196097 1.207889 -0.370496 +v -0.349363 1.350251 -0.415400 +v -0.637409 1.417766 0.278510 +v -0.925456 1.361015 0.262945 +v -0.196097 1.217315 0.223534 +v -0.349363 1.361015 0.262945 +v -0.637410 1.104071 0.901023 +v -0.925456 1.061998 0.856330 +v -0.196097 0.955465 0.743164 +v -0.349363 1.061998 0.856330 +v -0.637410 0.549443 1.267602 +v -0.925456 0.533322 1.205757 +v -0.196097 0.492500 1.049159 +v -0.349364 0.533322 1.205757 +v -0.637410 -0.097506 1.280024 +v -0.925456 -0.083356 1.217597 +v -0.196097 -0.047528 1.059528 +v -0.349364 -0.083356 1.217598 +v -0.643467 1.047149 -0.988763 +v -0.931513 1.006519 -0.944464 +v -0.202154 0.903641 -0.832294 +v -0.355420 1.006519 -0.944464 +v -0.643467 1.380403 -0.404793 +v -0.931513 1.324180 -0.387819 +v -0.202154 1.181818 -0.344837 +v -0.355421 1.324180 -0.387819 +v -0.643467 1.391696 0.276381 +v -0.931513 1.334944 0.261483 +v -0.202155 1.191244 0.223759 +v -0.355421 1.334944 0.261483 +v -0.643467 1.078001 0.872241 +v -0.931513 1.035927 0.829461 +v -0.202155 0.929394 0.721141 +v -0.355421 1.035927 0.829462 +v -0.643467 0.523373 1.223125 +v -0.931513 0.507251 1.163927 +v -0.202155 0.466429 1.014034 +v -0.355421 0.507251 1.163927 +v -0.643467 -0.123576 1.235015 +v -0.931514 -0.109427 1.175261 +v -0.202155 -0.073598 1.023959 +v -0.355421 -0.109427 1.175261 +vt 0.505535 0.712982 +vt 0.505522 0.817017 +vt 0.501434 0.812862 +vt 0.911732 0.256477 +vt 0.911376 0.300653 +vt 0.809828 0.256790 +vt 0.909786 0.188803 +vt 0.911105 0.212304 +vt 0.813968 0.212602 +vt 0.810266 0.623547 +vt 0.767484 0.617750 +vt 0.802895 0.525056 +vt 0.880522 0.601715 +vt 0.854909 0.617214 +vt 0.847883 0.523332 +vt 0.760457 0.523868 +vt 0.760389 0.422038 +vt 0.874369 0.519502 +vt 0.874310 0.430329 +vt 0.847815 0.421501 +vt 0.802824 0.418227 +vt 0.767298 0.339545 +vt 0.880360 0.358090 +vt 0.854723 0.339009 +vt 0.077989 0.935533 +vt 0.033855 0.930923 +vt 0.034707 0.838364 +vt 0.718072 0.626052 +vt 0.733713 0.644685 +vt 0.644853 0.664718 +vt 0.122200 0.931736 +vt 0.123052 0.839177 +vt 0.885507 0.579191 +vt 0.952468 0.579397 +vt 0.880522 0.623351 +vt 0.478424 0.803552 +vt 0.478394 0.717505 +vt 0.500209 0.712982 +vt 0.880793 0.535002 +vt 0.944621 0.535198 +vt 0.570052 0.627997 +vt 0.569259 0.724135 +vt 0.526176 0.633923 +vt 0.638651 0.647557 +vt 0.637989 0.727806 +vt 0.613716 0.725021 +vt 0.614472 0.633381 +vt 0.570234 0.826899 +vt 0.526349 0.823518 +vt 0.638802 0.813586 +vt 0.614645 0.822976 +vt 0.572715 0.908751 +vt 0.528714 0.901541 +vt 0.296832 0.516394 +vt 0.319201 0.435423 +vt 0.317002 0.526668 +vt 0.617010 0.900999 +vt 0.880407 0.851389 +vt 0.950182 0.851175 +vt 0.955160 0.895335 +vt 0.296620 0.355759 +vt 0.342546 0.434204 +vt 0.888378 0.807190 +vt 0.954889 0.806986 +vt 0.760361 0.552208 +vt 0.755244 0.550990 +vt 0.718149 0.382255 +vt 0.760389 0.462972 +vt 0.716320 0.387568 +vt 0.179746 0.720354 +vt 0.177852 0.817509 +vt 0.172210 0.816323 +vt 0.644959 0.331685 +vt 0.644632 0.339984 +vt 0.078883 0.838430 +vt 0.078002 0.833202 +vt 0.130698 0.639514 +vt 0.172167 0.720396 +vt 0.756806 0.464801 +vt 0.330131 0.702384 +vt 0.330189 0.803978 +vt 0.322803 0.798856 +vt 0.650102 0.688839 +vt 0.643585 0.684838 +vt 0.313835 0.815624 +vt 0.296620 0.774114 +vt 0.305866 0.773231 +vt 0.123170 0.901676 +vt 0.296875 0.728970 +vt 0.314479 0.701317 +vt 0.305843 0.728137 +vt 0.712052 0.623039 +vt 0.501517 0.713280 +vt 0.814240 0.300951 +vt 0.824724 0.189064 +vt 0.810072 0.331685 +vt 0.944350 0.623547 +vt 0.500243 0.811242 +vt 0.525420 0.725563 +vt 0.888649 0.895539 +vt 0.316761 0.343233 +vt 0.122171 0.834026 +vt 0.123052 0.639598 +vt 0.324578 0.700612 +vt 0.638802 0.661644 +vt 0.033825 0.833213 +vt 0.322803 0.814792 +vt 0.322746 0.700612 +vt 0.125521 0.904948 +usemtl None +f 158/355 157/356 159/357 +f 161/358 162/359 165/360 +f 163/361 164/362 168/363 +f 164/362 161/358 165/360 +f 165/364 166/365 169/366 +f 167/367 168/368 172/369 +f 168/368 165/364 169/366 +f 169/366 170/370 174/371 +f 171/372 172/369 175/373 +f 172/369 169/366 176/374 +f 173/375 174/371 178/376 +f 175/373 176/374 179/377 +f 176/374 173/375 180/378 +f 177/379 178/380 182/381 +f 179/382 180/383 183/384 +f 180/385 177/379 184/386 +f 185/387 189/388 186/389 +f 187/390 191/391 192/392 +f 188/393 192/394 189/388 +f 189/395 193/396 190/397 +f 191/398 195/399 196/400 +f 192/401 196/400 193/396 +f 193/396 197/402 198/403 +f 195/399 199/404 196/400 +f 196/400 200/405 193/396 +f 197/402 201/406 202/407 +f 199/408 203/409 200/410 +f 200/405 204/411 197/402 +f 201/412 205/413 206/414 +f 203/409 207/415 204/416 +f 204/417 208/418 201/412 +f 175/419 179/382 199/420 +f 167/421 171/422 191/423 +f 178/424 174/425 198/426 +f 163/427 167/421 187/428 +f 184/386 181/429 205/430 +f 182/431 178/424 202/432 +f 171/422 175/419 195/433 +f 166/434 162/435 186/436 +f 183/384 184/437 208/438 +f 181/429 182/381 205/430 +f 162/439 161/440 185/441 +f 198/426 174/425 194/442 +f 161/440 164/443 185/441 +f 164/443 163/444 188/445 +f 179/382 183/384 203/446 +f 160/447 158/355 159/357 +f 162/359 166/448 165/360 +f 167/449 163/361 168/363 +f 168/363 164/362 165/360 +f 166/365 170/370 169/366 +f 171/372 167/367 172/369 +f 172/369 168/368 169/366 +f 173/375 169/366 174/371 +f 172/369 176/374 175/373 +f 169/366 173/375 176/374 +f 177/450 173/375 178/376 +f 176/374 180/378 179/377 +f 173/375 177/450 180/378 +f 181/429 177/379 182/381 +f 180/383 184/437 183/384 +f 177/379 181/429 184/386 +f 189/388 190/451 186/389 +f 188/452 187/390 192/392 +f 185/387 188/393 189/388 +f 193/396 194/453 190/397 +f 192/401 191/398 196/400 +f 189/395 192/401 193/396 +f 194/453 193/396 198/403 +f 199/404 200/405 196/400 +f 200/405 197/402 193/396 +f 198/403 197/402 202/407 +f 203/409 204/416 200/410 +f 204/411 201/406 197/402 +f 202/454 201/412 206/414 +f 207/415 208/455 204/416 +f 208/418 205/413 201/412 +f 179/382 203/446 199/420 +f 171/422 195/433 191/423 +f 202/432 178/424 198/426 +f 167/421 191/423 187/428 +f 208/456 184/386 205/430 +f 206/457 182/431 202/432 +f 175/419 199/420 195/433 +f 190/458 166/434 186/436 +f 207/459 183/384 208/438 +f 182/381 206/460 205/430 +f 186/461 162/439 185/441 +f 164/443 188/445 185/441 +f 163/444 187/462 188/445 +f 183/384 207/459 203/446 +f 174/425 170/463 194/442 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_right.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_right.obj new file mode 100644 index 00000000..1bdc6495 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_right.obj @@ -0,0 +1,1074 @@ +# Blender v2.68 (sub 0) OBJ File: 'buggyWheel.blend' +# www.blender.org +mtllib buggyWheelRight.mtl +o WheelRight_Wheel +v 0.614587 -0.034939 -0.990662 +v 0.664587 -0.034939 -0.990662 +v 0.614587 -0.534939 -0.856687 +v 0.664587 -0.534939 -0.856687 +v 0.614587 -0.900964 -0.490662 +v 0.664587 -0.900964 -0.490662 +v 0.614587 -1.034939 0.009338 +v 0.664587 -1.034939 0.009338 +v 0.614587 -0.900964 0.509338 +v 0.664587 -0.900964 0.509338 +v 0.614587 -0.534939 0.875363 +v 0.664587 -0.534939 0.875363 +v 0.614587 -0.034939 1.009338 +v 0.664587 -0.034939 1.009338 +v 0.614587 0.465061 0.875363 +v 0.664587 0.465061 0.875363 +v 0.614587 0.831087 0.509338 +v 0.664587 0.831087 0.509338 +v 0.614587 0.965061 0.009338 +v 0.664587 0.965061 0.009338 +v 0.614587 0.831087 -0.490662 +v 0.664587 0.831087 -0.490662 +v 0.614587 0.465062 -0.856687 +v 0.664587 0.465062 -0.856687 +v 0.634914 -1.175065 0.353885 +v 0.922961 -1.118842 0.337763 +v 1.076227 -0.976480 0.296941 +v 1.022998 -0.814592 0.250521 +v 0.788180 -0.708927 0.325664 +v 0.481648 -0.708927 0.325664 +v 0.246831 -0.814592 0.250521 +v 0.193602 -0.976480 0.296941 +v 0.346868 -1.118842 0.337763 +v 0.634914 -1.186358 -0.293064 +v 0.922960 -1.129606 -0.278915 +v 1.076227 -0.985906 -0.243086 +v 1.022998 -0.822497 -0.202344 +v 0.788180 -0.715839 -0.268295 +v 0.481648 -0.715839 -0.268295 +v 0.246831 -0.822497 -0.202344 +v 0.193602 -0.985906 -0.243086 +v 0.346868 -1.129606 -0.278915 +v 0.634914 -0.872663 -0.858985 +v 0.922960 -0.830589 -0.818355 +v 1.076226 -0.724056 -0.715477 +v 1.022998 -0.602910 -0.598488 +v 0.788180 -0.523838 -0.522129 +v 0.481648 -0.523838 -0.522129 +v 0.246831 -0.602910 -0.598488 +v 0.193602 -0.724056 -0.715477 +v 0.346868 -0.830589 -0.818355 +v 0.634914 -0.318035 -1.192239 +v 0.922960 -0.301913 -1.136016 +v 1.076226 -0.261091 -0.993654 +v 1.022998 -0.214671 -0.831766 +v 0.788180 -0.289814 -0.726101 +v 0.481648 -0.289814 -0.726101 +v 0.246830 -0.214671 -0.831766 +v 0.193602 -0.261091 -0.993654 +v 0.346868 -0.301913 -1.136016 +v 0.634914 0.328914 -1.203532 +v 0.922960 0.314765 -1.146780 +v 1.076226 0.278936 -1.003080 +v 1.022998 0.238194 -0.839671 +v 0.788180 0.304145 -0.733013 +v 0.481648 0.304145 -0.733013 +v 0.246830 0.238194 -0.839671 +v 0.193602 0.278936 -1.003080 +v 0.346868 0.314765 -1.146780 +v 0.634914 0.894835 -0.889837 +v 0.922960 0.854205 -0.847764 +v 1.076226 0.751327 -0.741230 +v 1.022998 0.634338 -0.620085 +v 0.788180 0.557979 -0.541012 +v 0.481648 0.557979 -0.541012 +v 0.246830 0.634338 -0.620085 +v 0.193602 0.751327 -0.741230 +v 0.346868 0.854205 -0.847764 +v 0.634914 1.228089 -0.335209 +v 0.922960 1.171866 -0.319087 +v 1.076226 1.029504 -0.278265 +v 1.022997 0.867616 -0.231845 +v 0.788180 0.761951 -0.306988 +v 0.481648 0.761951 -0.306988 +v 0.246830 0.867616 -0.231845 +v 0.193602 1.029504 -0.278265 +v 0.346868 1.171866 -0.319087 +v 0.634914 1.239382 0.311740 +v 0.922960 1.182631 0.297590 +v 1.076226 1.038931 0.261762 +v 1.022997 0.875521 0.221019 +v 0.788180 0.768863 0.286971 +v 0.481648 0.768863 0.286971 +v 0.246830 0.875521 0.221019 +v 0.193602 1.038931 0.261762 +v 0.346868 1.182631 0.297590 +v 0.634914 0.925687 0.877661 +v 0.922960 0.883614 0.837031 +v 1.076226 0.777080 0.734153 +v 1.022998 0.655934 0.617164 +v 0.788180 0.576862 0.540805 +v 0.481648 0.576862 0.540805 +v 0.246830 0.655934 0.617164 +v 0.193602 0.777080 0.734153 +v 0.346868 0.883614 0.837031 +v 0.634914 0.371059 1.210915 +v 0.922960 0.354937 1.154692 +v 1.076226 0.314116 1.012330 +v 1.022998 0.267695 0.850442 +v 0.788180 0.342838 0.744777 +v 0.481648 0.342838 0.744777 +v 0.246830 0.267695 0.850442 +v 0.193602 0.314116 1.012330 +v 0.346868 0.354937 1.154692 +v 0.634914 -0.275890 1.222207 +v 0.922960 -0.261740 1.165456 +v 1.076227 -0.225912 1.021756 +v 1.022998 -0.185169 0.858347 +v 0.788180 -0.251121 0.751689 +v 0.481648 -0.251121 0.751689 +v 0.246831 -0.185169 0.858347 +v 0.193602 -0.225912 1.021756 +v 0.346868 -0.261740 1.165456 +v 0.634914 -0.841811 0.908513 +v 0.922960 -0.801181 0.866439 +v 1.076227 -0.698303 0.759906 +v 1.022998 -0.581314 0.638760 +v 0.788180 -0.504955 0.559688 +v 0.481648 -0.504955 0.559688 +v 0.246831 -0.581314 0.638760 +v 0.193602 -0.698303 0.759906 +v 0.346868 -0.801181 0.866439 +v 0.788180 -0.308954 0.321009 +v 0.554082 -0.308954 0.321009 +v 0.788180 -0.315866 -0.272950 +v 0.554082 -0.315866 -0.272950 +v 0.788180 0.338183 0.344804 +v 0.554082 0.338183 0.344804 +v 0.788180 -0.255775 0.351716 +v 0.554082 -0.255775 0.351716 +v 0.788180 -0.285159 -0.326128 +v 0.554082 -0.285159 -0.326128 +v 0.788180 0.308800 -0.333040 +v 0.554082 0.308800 -0.333040 +v 0.788180 0.361978 -0.302333 +v 0.554082 0.361978 -0.302333 +v 0.788180 0.368890 0.291625 +v 0.554082 0.368890 0.291625 +v -0.006448 -0.056258 0.055278 +v -0.006448 -0.056258 -0.044722 +v 0.743552 -0.056258 -0.044722 +v 0.743552 -0.056258 0.055278 +v -0.006448 0.043743 0.055278 +v -0.006448 0.043743 -0.044722 +v 0.743552 0.043742 -0.044722 +v 0.743552 0.043742 0.055278 +vt 0.513647 0.784487 +vt 0.505979 0.784463 +vt 0.506198 0.712982 +vt 0.949916 0.484370 +vt 0.942329 0.484463 +vt 0.945409 0.410028 +vt 0.952996 0.409935 +vt 0.942546 0.331778 +vt 0.342546 0.743532 +vt 0.334878 0.743555 +vt 0.342337 0.675297 +vt 0.334669 0.675321 +vt 0.334425 0.595943 +vt 0.342093 0.595919 +vt 0.341881 0.526668 +vt 0.513866 0.627997 +vt 0.521530 0.628020 +vt 0.523522 0.675921 +vt 0.515859 0.675897 +vt 0.524342 0.749056 +vt 0.516678 0.749032 +vt 0.523768 0.827828 +vt 0.516105 0.827805 +vt 0.521955 0.891132 +vt 0.450859 0.331796 +vt 0.530222 0.331685 +vt 0.598987 0.371272 +vt 0.513404 0.863656 +vt 0.505736 0.863633 +vt 0.513203 0.929300 +vt 0.505535 0.929277 +vt 0.039689 0.599849 +vt 0.000006 0.531119 +vt 0.108414 0.639514 +vt 0.830572 0.623547 +vt 0.837842 0.712975 +vt 0.792882 0.715173 +vt 0.785952 0.629929 +vt 0.760389 0.645015 +vt 0.538434 0.331685 +vt 0.455612 0.331599 +vt 0.462432 0.306441 +vt 0.758883 0.693669 +vt 0.757766 0.757554 +vt 0.722111 0.772972 +vt 0.340191 0.815624 +vt 0.340047 0.862634 +vt 0.296730 0.826599 +vt 0.676578 0.688839 +vt 0.675129 0.772828 +vt 0.639920 0.693304 +vt 0.224995 0.065745 +vt 0.157598 0.048960 +vt 0.157196 0.023387 +vt 0.237565 0.043402 +vt 0.248435 0.022857 +vt 0.873372 0.628856 +vt 0.880302 0.714100 +vt 0.837952 0.811916 +vt 0.792987 0.809483 +vt 0.766458 0.719664 +vt 0.383912 0.290126 +vt 0.402305 0.271662 +vt 0.757836 0.826514 +vt 0.722394 0.820120 +vt 0.675411 0.819976 +vt 0.638873 0.826149 +vt 0.090829 0.068110 +vt 0.077576 0.046222 +vt 0.065737 0.026077 +vt 0.880407 0.808411 +vt 0.830872 0.893857 +vt 0.786238 0.887590 +vt 0.760640 0.870651 +vt 0.342546 0.218378 +vt 0.367616 0.211494 +vt 0.759075 0.882071 +vt 0.722989 0.862610 +vt 0.676007 0.862466 +vt 0.042578 0.118064 +vt 0.020038 0.105790 +vt 0.000032 0.094100 +vt 0.873658 0.886518 +vt 0.410759 0.627997 +vt 0.410461 0.725136 +vt 0.366572 0.631903 +vt 0.366288 0.724497 +vt 0.343036 0.642066 +vt 0.342597 0.135579 +vt 0.367659 0.142060 +vt 0.880968 0.806986 +vt 0.880818 0.758099 +vt 0.916772 0.739329 +vt 0.651260 0.882071 +vt 0.697672 0.885209 +vt 0.662245 0.938429 +vt 0.963979 0.803673 +vt 0.963782 0.739184 +vt 1.000000 0.806621 +vt 0.025774 0.185436 +vt 0.000000 0.186130 +vt 0.478394 0.642481 +vt 0.478145 0.723566 +vt 0.454637 0.724768 +vt 0.454921 0.632174 +vt 0.410172 0.819393 +vt 0.366012 0.814343 +vt 0.342546 0.801829 +vt 0.384052 0.063917 +vt 0.402423 0.081964 +vt 0.880613 0.691089 +vt 0.916624 0.690900 +vt 0.963633 0.690756 +vt 0.999644 0.690724 +vt 0.044920 0.252175 +vt 0.022831 0.265714 +vt 0.477904 0.802245 +vt 0.454361 0.814614 +vt 0.409969 0.885511 +vt 0.365819 0.877368 +vt 0.368352 0.047191 +vt 0.450287 0.000000 +vt 0.455804 0.022591 +vt 0.462593 0.047308 +vt 0.880407 0.623912 +vt 0.916478 0.643449 +vt 0.963487 0.643305 +vt 0.094886 0.300397 +vt 0.082414 0.323218 +vt 0.071262 0.342388 +vt 0.454168 0.877639 +vt 0.227346 0.639514 +vt 0.226590 0.730789 +vt 0.183470 0.645319 +vt 0.544864 0.000098 +vt 0.538625 0.022677 +vt 0.532047 0.047380 +vt 0.004897 0.829814 +vt 0.000000 0.767199 +vt 0.037024 0.750858 +vt 0.942329 0.331690 +vt 0.942143 0.422777 +vt 0.880522 0.422772 +vt 0.089896 0.832774 +vt 0.083541 0.750430 +vt 0.122682 0.828730 +vt 0.162283 0.317182 +vt 0.162782 0.343233 +vt 0.295948 0.658646 +vt 0.295317 0.734836 +vt 0.271046 0.731781 +vt 0.271767 0.644777 +vt 0.227597 0.829298 +vt 0.182750 0.732323 +vt 0.626741 0.047457 +vt 0.610325 0.064150 +vt 0.000136 0.697941 +vt 0.038112 0.703199 +vt 0.084629 0.702771 +vt 0.117920 0.696857 +vt 0.229052 0.298032 +vt 0.242403 0.320397 +vt 0.296157 0.817064 +vt 0.272006 0.825681 +vt 0.230097 0.908646 +vt 0.183709 0.826223 +vt 0.673979 0.129389 +vt 0.651692 0.135898 +vt 0.592174 0.082159 +vt 0.005267 0.640598 +vt 0.040542 0.659803 +vt 0.087059 0.659375 +vt 0.277303 0.248078 +vt 0.299941 0.260829 +vt 0.319664 0.271145 +vt 0.274389 0.901316 +vt 0.741395 0.261535 +vt 0.741609 0.191696 +vt 0.785593 0.253882 +vt 0.673921 0.223940 +vt 0.651640 0.218697 +vt 0.626821 0.211761 +vt 0.810381 0.180625 +vt 0.810172 0.112628 +vt 0.846144 0.099522 +vt 0.182750 0.908788 +vt 0.229268 0.908646 +vt 0.222215 0.964156 +vt 0.893427 0.188659 +vt 0.893153 0.099377 +vt 0.929413 0.180260 +vt 0.294107 0.180706 +vt 0.319979 0.180490 +vt 0.697244 0.253611 +vt 0.697449 0.187039 +vt 0.741903 0.095967 +vt 0.786077 0.096061 +vt 0.785797 0.187310 +vt 0.809582 0.096028 +vt 0.610185 0.290360 +vt 0.592057 0.271858 +vt 0.809970 0.046648 +vt 0.846009 0.055773 +vt 0.893019 0.055628 +vt 0.929002 0.046283 +vt 0.274961 0.113968 +vt 0.673979 0.175520 +vt 0.674224 0.095612 +vt 0.697729 0.095790 +vt 0.742197 0.000000 +vt 0.786358 0.004584 +vt 0.809828 0.015921 +vt 0.531886 0.306513 +vt 0.809828 0.000365 +vt 0.845895 0.018329 +vt 0.892904 0.018185 +vt 0.674470 0.015506 +vt 0.698009 0.004313 +vt 0.296717 0.700612 +vt 0.296620 0.616610 +vt 0.332497 0.616060 +vt 0.697691 0.973157 +vt 0.697755 0.882071 +vt 0.759075 0.882090 +vt 0.673979 0.271562 +vt 0.720988 0.271418 +vt 0.710064 0.331575 +vt 0.880501 0.986627 +vt 0.880407 0.895539 +vt 0.941428 0.895638 +vt 0.296894 0.616060 +vt 0.296620 0.526778 +vt 0.332521 0.526668 +vt 0.942003 0.443940 +vt 0.942066 0.535002 +vt 0.880522 0.443704 +vt 0.132764 0.904948 +vt 0.179746 0.905092 +vt 0.142890 0.961540 +vt 0.478394 0.885555 +vt 0.478366 0.976614 +vt 0.417029 0.976571 +vt 0.768196 0.331685 +vt 0.767998 0.267196 +vt 0.804096 0.331575 +vt 0.819042 0.984916 +vt 0.819070 0.893857 +vt 0.880407 0.893900 +vt 0.911795 0.280229 +vt 0.911732 0.189167 +vt 0.972929 0.188803 +vt 0.772063 0.894433 +vt 0.819042 0.893857 +vt 0.807833 0.950559 +vt 0.513839 0.630393 +vt 0.513866 0.712982 +vt 0.478421 0.710586 +vt 0.296764 0.909643 +vt 0.296620 0.862634 +vt 0.340081 0.873609 +vt 0.403930 0.885530 +vt 0.403866 0.976615 +vt 0.342546 0.976597 +vt 0.767998 0.331685 +vt 0.720988 0.331541 +vt 0.757074 0.271528 +vt 0.819432 0.331679 +vt 0.804097 0.331685 +vt 0.804096 0.316355 +vt 0.485178 0.926307 +vt 0.484825 0.811289 +vt 0.500243 0.926261 +vt 0.819427 0.301009 +vt 0.819426 0.316344 +vt 0.804096 0.316349 +vt 0.014299 0.948221 +vt 0.014652 0.833202 +vt 0.025634 0.833236 +vt 0.000349 0.834079 +vt 0.014299 0.833202 +vt 0.013950 0.947021 +vt 0.943974 0.115104 +vt 0.929765 0.114953 +vt 0.929413 0.000000 +vt 0.513866 0.713006 +vt 0.950133 0.331685 +vt 0.499890 0.811242 +vt 0.514292 0.891109 +vt 0.638731 0.439950 +vt 0.638802 0.519317 +vt 0.382165 0.371576 +vt 0.599183 0.588106 +vt 0.342546 0.440365 +vt 0.342618 0.519731 +vt 0.382361 0.588410 +vt 0.530489 0.627886 +vt 0.187768 0.639484 +vt 0.256486 0.599768 +vt 0.297148 0.100906 +vt 0.000000 0.451739 +vt 0.296157 0.531008 +vt 0.039671 0.382978 +vt 0.108390 0.343263 +vt 0.187743 0.343233 +vt 0.296151 0.451628 +vt 0.256469 0.382898 +vt 0.723561 0.688983 +vt 0.296620 0.862500 +vt 0.638802 0.757189 +vt 0.156659 0.000000 +vt 0.186092 0.901858 +vt 0.766550 0.802252 +vt 0.334213 0.526692 +vt 0.640111 0.881706 +vt 0.916970 0.803817 +vt 0.697691 0.940825 +vt 0.999850 0.757734 +vt 0.342787 0.723150 +vt 0.451127 0.627997 +vt 0.999438 0.623547 +vt 0.880585 0.534766 +vt 0.003222 0.276723 +vt 0.043380 0.833203 +vt 0.880707 0.331685 +vt 0.117785 0.766115 +vt 0.342546 0.179402 +vt 0.123052 0.639514 +vt 0.253959 0.339168 +vt 0.626864 0.142327 +vt 0.846418 0.188803 +vt 0.186689 0.964265 +vt 0.929204 0.112263 +vt 0.809337 0.175935 +vt 0.928860 0.000000 +vt 0.803899 0.267086 +vt 0.332593 0.700061 +vt 0.759010 0.973175 +vt 0.674164 0.331685 +vt 0.941522 0.986726 +vt 0.332795 0.615950 +vt 0.178770 0.961650 +vt 0.417057 0.885511 +vt 0.880379 0.984960 +vt 0.972992 0.279865 +vt 0.771955 0.951000 +vt 0.478394 0.627997 +vt 0.340191 0.909510 +vt 0.342611 0.885511 +vt 0.721173 0.271418 +vt 0.819431 0.316349 +vt 0.804097 0.301014 +vt 0.025281 0.948255 +vt 0.000000 0.947897 +vt 0.943621 0.000151 +usemtl None +f 1/1 2/2 4/3 +f 3/4 4/5 6/6 +f 5/7 6/6 8/8 +f 7/9 8/10 9/11 +f 9/11 10/12 12/13 +f 11/14 12/13 13/15 +f 13/16 14/17 16/18 +f 15/19 16/18 18/20 +f 17/21 18/20 20/22 +f 19/23 20/22 22/24 +f 4/25 2/26 24/27 +f 23/28 24/29 1/1 +f 21/30 22/31 24/29 +f 1/32 3/33 23/34 +f 25/35 34/36 35/37 +f 26/38 35/37 27/39 +f 27/40 36/41 37/42 +f 28/43 37/44 38/45 +f 30/46 29/47 134/48 +f 30/49 39/50 31/51 +f 31/52 40/53 41/54 +f 32/55 41/54 33/56 +f 25/35 33/57 42/58 +f 34/36 43/59 44/60 +f 35/37 44/60 36/61 +f 36/41 45/62 46/63 +f 37/44 46/64 38/45 +f 38/45 47/65 39/50 +f 39/50 48/66 49/67 +f 40/53 49/68 50/69 +f 41/54 50/69 51/70 +f 42/58 51/71 34/36 +f 43/59 52/72 53/73 +f 44/60 53/73 54/74 +f 45/62 54/75 55/76 +f 46/64 55/77 56/78 +f 47/65 56/78 48/66 +f 48/66 57/79 49/67 +f 49/68 58/80 50/69 +f 50/69 59/81 60/82 +f 51/71 60/83 52/72 +f 52/84 61/85 53/86 +f 53/86 62/87 54/88 +f 54/75 63/89 64/90 +f 55/91 64/92 65/93 +f 57/94 56/95 142/96 +f 57/97 66/98 58/99 +f 58/80 67/100 68/101 +f 59/102 68/103 69/104 +f 60/105 69/104 61/85 +f 61/85 70/106 71/107 +f 62/87 71/107 72/108 +f 63/89 72/109 73/110 +f 64/92 73/111 65/93 +f 65/93 74/112 66/98 +f 66/98 75/113 76/114 +f 67/100 76/115 77/116 +f 68/103 77/117 69/104 +f 69/104 78/118 70/106 +f 70/106 79/119 80/120 +f 71/121 80/122 81/123 +f 72/109 81/123 82/124 +f 73/111 82/125 83/126 +f 74/112 83/126 75/113 +f 75/113 84/127 76/114 +f 76/115 85/128 77/116 +f 77/116 86/129 87/130 +f 78/118 87/131 70/106 +f 79/132 88/133 80/134 +f 80/122 89/135 90/136 +f 81/123 90/136 91/137 +f 82/138 91/139 92/140 +f 93/141 84/142 146/143 +f 84/144 93/145 85/146 +f 85/128 94/147 95/148 +f 86/149 95/150 96/151 +f 87/152 96/151 88/133 +f 88/133 97/153 89/154 +f 89/135 98/155 99/156 +f 90/136 99/156 91/137 +f 91/139 100/157 92/140 +f 92/140 101/158 102/159 +f 93/145 102/159 103/160 +f 94/147 103/161 104/162 +f 95/150 104/163 105/164 +f 96/151 105/164 97/153 +f 97/153 106/165 98/166 +f 98/155 107/167 99/156 +f 99/156 108/168 100/169 +f 100/157 109/170 110/171 +f 101/158 110/171 111/172 +f 102/159 111/172 103/160 +f 103/161 112/173 113/174 +f 104/162 113/174 114/175 +f 105/164 114/176 97/153 +f 106/177 115/178 107/179 +f 107/167 116/180 117/181 +f 108/168 117/181 118/182 +f 109/183 118/184 119/185 +f 119/186 120/187 140/188 +f 111/189 120/190 112/191 +f 112/173 121/192 122/193 +f 113/174 122/193 114/175 +f 114/194 123/195 115/178 +f 115/178 124/196 125/197 +f 116/198 125/197 126/199 +f 117/181 126/200 127/201 +f 118/184 127/202 119/185 +f 119/185 128/203 129/204 +f 120/190 129/204 130/205 +f 121/192 130/206 122/193 +f 122/207 131/208 132/209 +f 123/195 132/209 124/196 +f 124/196 25/210 26/211 +f 125/197 26/211 27/212 +f 126/200 27/40 28/213 +f 127/202 28/214 29/215 +f 128/203 29/215 30/216 +f 129/204 30/216 130/205 +f 130/206 31/52 32/55 +f 131/208 32/217 132/209 +f 132/209 33/218 25/210 +f 133/219 135/220 136/221 +f 29/222 38/223 135/224 +f 38/225 39/226 136/227 +f 39/228 30/229 134/230 +f 137/231 139/232 140/233 +f 120/234 111/235 140/236 +f 111/237 110/238 138/239 +f 110/240 119/241 139/242 +f 141/243 143/244 142/245 +f 56/246 65/247 143/248 +f 66/249 57/250 142/251 +f 65/252 66/253 144/254 +f 145/255 147/256 148/257 +f 92/258 93/259 148/260 +f 83/261 92/262 147/263 +f 84/264 83/265 146/266 +f 153/267 154/268 150/269 +f 154/270 155/271 150/272 +f 155/273 156/274 152/275 +f 156/276 153/277 149/278 +f 149/279 150/280 151/281 +f 156/282 155/283 154/284 +f 97/153 98/166 89/154 +f 3/285 1/1 4/3 +f 5/7 3/4 6/6 +f 7/286 5/7 8/8 +f 24/29 2/2 1/1 +f 11/14 9/11 12/13 +f 155/271 151/287 150/272 +f 15/19 13/16 16/18 +f 17/21 15/19 18/20 +f 19/23 17/21 20/22 +f 21/288 19/23 22/24 +f 4/25 24/27 22/289 +f 4/25 22/289 20/290 +f 6/291 4/25 20/290 +f 6/291 20/290 18/292 +f 8/293 6/291 10/294 +f 6/291 18/292 10/294 +f 10/294 18/292 12/295 +f 18/292 16/296 12/295 +f 47/65 48/66 39/50 +f 23/28 21/30 24/29 +f 21/297 23/34 19/298 +f 130/206 131/299 122/193 +f 3/33 5/300 19/298 +f 19/298 5/300 17/301 +f 5/300 7/302 17/301 +f 7/302 9/303 11/304 +f 17/301 7/302 11/304 +f 15/305 17/301 11/304 +f 13/306 15/305 11/304 +f 26/38 25/35 35/37 +f 61/85 62/87 53/86 +f 28/213 27/40 37/42 +f 29/307 28/43 38/45 +f 29/47 133/308 134/48 +f 39/50 40/309 31/51 +f 32/55 31/52 41/54 +f 58/80 59/81 50/69 +f 34/36 25/35 42/58 +f 35/37 34/36 44/60 +f 85/128 86/129 77/116 +f 37/42 36/41 46/63 +f 46/64 47/65 38/45 +f 88/133 89/154 80/134 +f 40/309 39/50 49/67 +f 41/54 40/53 50/69 +f 42/310 41/54 51/70 +f 106/165 107/311 98/166 +f 44/60 43/59 53/73 +f 45/312 44/60 54/74 +f 46/63 45/62 55/76 +f 47/65 46/64 56/78 +f 12/13 14/313 13/15 +f 57/79 58/314 49/67 +f 115/178 116/198 107/179 +f 51/70 50/69 60/82 +f 43/59 51/71 52/72 +f 51/71 43/59 34/36 +f 35/37 36/61 27/39 +f 55/76 54/75 64/90 +f 56/315 55/91 65/93 +f 56/95 141/316 142/96 +f 66/98 67/317 58/99 +f 59/81 58/80 68/101 +f 60/105 59/102 69/104 +f 52/84 60/105 61/85 +f 62/87 61/85 71/107 +f 63/318 62/87 72/108 +f 64/90 63/89 73/110 +f 73/111 74/112 65/93 +f 41/54 42/310 33/56 +f 67/317 66/98 76/114 +f 68/101 67/100 77/116 +f 16/296 14/319 12/295 +f 61/85 69/104 70/106 +f 71/107 70/106 80/120 +f 72/109 71/121 81/123 +f 73/110 72/109 82/124 +f 74/112 73/111 83/126 +f 32/217 33/218 132/209 +f 84/127 85/320 76/114 +f 111/235 138/321 140/236 +f 78/322 77/116 87/130 +f 114/176 106/165 97/153 +f 44/60 45/312 36/61 +f 81/123 80/122 90/136 +f 82/124 81/123 91/137 +f 83/323 82/138 92/140 +f 148/324 93/141 146/143 +f 93/145 94/325 85/146 +f 86/129 85/128 95/148 +f 87/152 86/149 96/151 +f 79/132 87/152 88/133 +f 77/117 78/118 69/104 +f 90/136 89/135 99/156 +f 99/156 100/169 91/137 +f 100/157 101/158 92/140 +f 93/145 92/140 102/159 +f 94/325 93/145 103/160 +f 95/148 94/147 104/162 +f 96/151 95/150 105/164 +f 88/133 96/151 97/153 +f 56/78 57/79 48/66 +f 62/87 63/318 54/88 +f 122/193 123/326 114/175 +f 101/158 100/157 110/171 +f 102/159 101/158 111/172 +f 111/172 112/327 103/160 +f 104/162 103/161 113/174 +f 105/328 104/162 114/175 +f 83/126 84/127 75/113 +f 107/167 108/168 99/156 +f 108/168 107/167 117/181 +f 109/329 108/168 118/182 +f 110/330 109/183 119/185 +f 139/331 119/186 140/188 +f 120/190 121/332 112/191 +f 113/174 112/173 122/193 +f 87/131 79/119 70/106 +f 106/177 114/194 115/178 +f 116/198 115/178 125/197 +f 117/333 116/198 126/199 +f 118/182 117/181 127/201 +f 127/202 128/203 119/185 +f 120/190 119/185 129/204 +f 121/332 120/190 130/205 +f 108/168 109/329 100/169 +f 123/195 122/207 132/209 +f 115/178 123/195 124/196 +f 125/197 124/196 26/211 +f 126/199 125/197 27/212 +f 127/201 126/200 28/213 +f 128/203 127/202 29/215 +f 129/204 128/203 30/216 +f 30/216 31/334 130/205 +f 131/299 130/206 32/55 +f 143/244 144/335 142/245 +f 124/196 132/209 25/210 +f 134/336 133/219 136/221 +f 133/337 29/222 135/224 +f 135/338 38/225 136/227 +f 136/339 39/228 134/230 +f 138/340 137/231 140/233 +f 23/34 3/33 19/298 +f 110/238 137/341 138/239 +f 137/342 110/240 139/242 +f 74/112 75/113 66/98 +f 141/343 56/246 143/248 +f 144/344 66/249 142/251 +f 143/345 65/252 144/254 +f 146/346 145/255 148/257 +f 147/347 92/258 148/260 +f 145/348 83/261 147/263 +f 83/265 145/349 146/266 +f 149/350 153/267 150/269 +f 8/10 10/12 9/11 +f 151/351 155/273 152/275 +f 152/352 156/276 149/278 +f 152/353 149/279 151/281 +f 153/354 156/282 154/284 +o WheelRightCover_Cover +v 0.922960 1.345017 -0.315400 +v 0.922960 1.355781 0.362945 +v 0.929018 1.318946 -0.287819 +v 0.929018 1.329710 0.361483 +v 0.634914 1.067985 -0.943225 +v 0.922960 1.027356 -0.896944 +v 0.193601 0.924477 -0.779757 +v 0.346868 1.027356 -0.896944 +v 0.634914 1.401240 -0.333134 +v 0.922960 1.345017 -0.315400 +v 0.193601 1.202655 -0.270496 +v 0.346868 1.345017 -0.315400 +v 0.634914 1.412532 0.378510 +v 0.922960 1.355781 0.362945 +v 0.193601 1.212081 0.323534 +v 0.346868 1.355781 0.362945 +v 0.634914 1.098837 1.001023 +v 0.922960 1.056764 0.956330 +v 0.193601 0.950230 0.843164 +v 0.346868 1.056764 0.956330 +v 0.634914 0.544209 1.367602 +v 0.922960 0.528088 1.305757 +v 0.193601 0.487266 1.149159 +v 0.346868 0.528087 1.305757 +v 0.634914 -0.102740 1.380024 +v 0.922960 -0.088590 1.317597 +v 0.193602 -0.052762 1.159528 +v 0.346868 -0.088590 1.317597 +v 0.640971 1.041915 -0.888763 +v 0.929017 1.001285 -0.844463 +v 0.199659 0.898407 -0.732294 +v 0.352925 1.001285 -0.844464 +v 0.640971 1.375169 -0.304793 +v 0.929017 1.318946 -0.287819 +v 0.199659 1.176584 -0.244838 +v 0.352925 1.318946 -0.287819 +v 0.640971 1.386462 0.376381 +v 0.929017 1.329710 0.361483 +v 0.199659 1.186010 0.323759 +v 0.352925 1.329710 0.361483 +v 0.640971 1.072767 0.972241 +v 0.929017 1.030694 0.929462 +v 0.199659 0.924160 0.821140 +v 0.352925 1.030693 0.929461 +v 0.640971 0.518139 1.323125 +v 0.929018 0.502017 1.263927 +v 0.199659 0.461195 1.114034 +v 0.352925 0.502017 1.263927 +v 0.640971 -0.128810 1.335014 +v 0.929018 -0.114661 1.275261 +v 0.199659 -0.078832 1.123959 +v 0.352925 -0.114661 1.275261 +vt 0.505535 0.712982 +vt 0.505522 0.817017 +vt 0.501434 0.812862 +vt 0.911732 0.256477 +vt 0.911376 0.300653 +vt 0.809828 0.256790 +vt 0.909786 0.188803 +vt 0.911105 0.212304 +vt 0.813968 0.212602 +vt 0.810266 0.623547 +vt 0.767484 0.617750 +vt 0.802895 0.525056 +vt 0.880522 0.601715 +vt 0.854909 0.617214 +vt 0.847883 0.523332 +vt 0.760457 0.523868 +vt 0.760389 0.422038 +vt 0.874369 0.519502 +vt 0.874310 0.430329 +vt 0.847815 0.421501 +vt 0.802824 0.418227 +vt 0.767298 0.339545 +vt 0.880360 0.358090 +vt 0.854723 0.339009 +vt 0.077989 0.935533 +vt 0.033855 0.930923 +vt 0.034707 0.838364 +vt 0.718072 0.626052 +vt 0.733713 0.644685 +vt 0.644853 0.664718 +vt 0.122200 0.931736 +vt 0.123052 0.839177 +vt 0.885507 0.579191 +vt 0.952468 0.579397 +vt 0.880522 0.623351 +vt 0.478424 0.803552 +vt 0.478394 0.717505 +vt 0.500209 0.712982 +vt 0.880793 0.535002 +vt 0.944621 0.535198 +vt 0.570052 0.627997 +vt 0.569259 0.724135 +vt 0.526176 0.633923 +vt 0.638651 0.647557 +vt 0.637989 0.727806 +vt 0.613716 0.725021 +vt 0.614472 0.633381 +vt 0.570234 0.826899 +vt 0.526349 0.823518 +vt 0.638802 0.813586 +vt 0.614645 0.822976 +vt 0.572715 0.908751 +vt 0.528714 0.901541 +vt 0.296832 0.516394 +vt 0.319201 0.435423 +vt 0.317002 0.526668 +vt 0.617010 0.900999 +vt 0.880407 0.851389 +vt 0.950182 0.851175 +vt 0.955160 0.895335 +vt 0.296620 0.355759 +vt 0.342546 0.434204 +vt 0.888378 0.807190 +vt 0.954889 0.806986 +vt 0.760361 0.552208 +vt 0.755244 0.550990 +vt 0.718149 0.382255 +vt 0.760389 0.462972 +vt 0.716320 0.387568 +vt 0.179746 0.720354 +vt 0.177852 0.817509 +vt 0.172210 0.816323 +vt 0.644959 0.331685 +vt 0.644632 0.339984 +vt 0.078883 0.838430 +vt 0.078002 0.833202 +vt 0.130698 0.639514 +vt 0.172167 0.720396 +vt 0.756806 0.464801 +vt 0.330131 0.702384 +vt 0.330189 0.803978 +vt 0.322803 0.798856 +vt 0.650102 0.688839 +vt 0.643585 0.684838 +vt 0.313835 0.815624 +vt 0.296620 0.774114 +vt 0.305866 0.773231 +vt 0.123170 0.901676 +vt 0.296875 0.728970 +vt 0.314479 0.701317 +vt 0.305843 0.728137 +vt 0.712052 0.623039 +vt 0.501517 0.713280 +vt 0.814240 0.300951 +vt 0.824724 0.189064 +vt 0.810072 0.331685 +vt 0.944350 0.623547 +vt 0.500243 0.811242 +vt 0.525420 0.725563 +vt 0.888649 0.895539 +vt 0.316761 0.343233 +vt 0.122171 0.834026 +vt 0.123052 0.639598 +vt 0.324578 0.700612 +vt 0.638802 0.661644 +vt 0.033825 0.833213 +vt 0.322803 0.814792 +vt 0.322746 0.700612 +vt 0.125521 0.904948 +usemtl None +f 158/355 157/356 159/357 +f 161/358 162/359 165/360 +f 163/361 164/362 168/363 +f 164/362 161/358 165/360 +f 165/364 166/365 169/366 +f 167/367 168/368 172/369 +f 168/368 165/364 169/366 +f 169/366 170/370 174/371 +f 171/372 172/369 175/373 +f 172/369 169/366 176/374 +f 173/375 174/371 178/376 +f 175/373 176/374 179/377 +f 176/374 173/375 180/378 +f 177/379 178/380 182/381 +f 179/382 180/383 183/384 +f 180/385 177/379 184/386 +f 185/387 189/388 186/389 +f 187/390 191/391 192/392 +f 188/393 192/394 189/388 +f 189/395 193/396 190/397 +f 191/398 195/399 196/400 +f 192/401 196/400 193/396 +f 193/396 197/402 198/403 +f 195/399 199/404 196/400 +f 196/400 200/405 193/396 +f 197/402 201/406 202/407 +f 199/408 203/409 200/410 +f 200/405 204/411 197/402 +f 201/412 205/413 206/414 +f 203/409 207/415 204/416 +f 204/417 208/418 201/412 +f 175/419 179/382 199/420 +f 167/421 171/422 191/423 +f 178/424 174/425 198/426 +f 163/427 167/421 187/428 +f 184/386 181/429 205/430 +f 182/431 178/424 202/432 +f 171/422 175/419 195/433 +f 166/434 162/435 186/436 +f 183/384 184/437 208/438 +f 181/429 182/381 205/430 +f 162/439 161/440 185/441 +f 198/426 174/425 194/442 +f 161/440 164/443 185/441 +f 164/443 163/444 188/445 +f 179/382 183/384 203/446 +f 160/447 158/355 159/357 +f 162/359 166/448 165/360 +f 167/449 163/361 168/363 +f 168/363 164/362 165/360 +f 166/365 170/370 169/366 +f 171/372 167/367 172/369 +f 172/369 168/368 169/366 +f 173/375 169/366 174/371 +f 172/369 176/374 175/373 +f 169/366 173/375 176/374 +f 177/450 173/375 178/376 +f 176/374 180/378 179/377 +f 173/375 177/450 180/378 +f 181/429 177/379 182/381 +f 180/383 184/437 183/384 +f 177/379 181/429 184/386 +f 189/388 190/451 186/389 +f 188/452 187/390 192/392 +f 185/387 188/393 189/388 +f 193/396 194/453 190/397 +f 192/401 191/398 196/400 +f 189/395 192/401 193/396 +f 194/453 193/396 198/403 +f 199/404 200/405 196/400 +f 200/405 197/402 193/396 +f 198/403 197/402 202/407 +f 203/409 204/416 200/410 +f 204/411 201/406 197/402 +f 202/454 201/412 206/414 +f 207/415 208/455 204/416 +f 208/418 205/413 201/412 +f 179/382 203/446 199/420 +f 171/422 195/433 191/423 +f 202/432 178/424 198/426 +f 167/421 191/423 187/428 +f 208/456 184/386 205/430 +f 206/457 182/431 202/432 +f 175/419 199/420 195/433 +f 190/458 166/434 186/436 +f 207/459 183/384 208/438 +f 182/381 206/460 205/430 +f 186/461 162/439 185/441 +f 164/443 188/445 185/441 +f 163/444 187/462 188/445 +f 183/384 207/459 203/446 +f 174/425 170/463 194/442 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc.bdc3D new file mode 100644 index 00000000..7e76ecc0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc_side.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc_side.bdc3D new file mode 100644 index 00000000..b3713821 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc_side.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_0.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_0.bdc3D new file mode 100644 index 00000000..a4bfe9e6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_0.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_1.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_1.bdc3D new file mode 100644 index 00000000..44e9a7b1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_1.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_2.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_2.bdc3D new file mode 100644 index 00000000..ad396376 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_2.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/fluid_tank.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/fluid_tank.bdc3D new file mode 100644 index 00000000..2cc4934a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/fluid_tank.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/meteor_chunk.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/meteor_chunk.bdc3D new file mode 100644 index 00000000..6ef6bb35 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/meteor_chunk.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/oxygen_pipe.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/oxygen_pipe.bdc3D new file mode 100644 index 00000000..94c68372 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/oxygen_pipe.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/parachest.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/parachest.bdc3D new file mode 100644 index 00000000..350e5111 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/parachest.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/slimelingEgg.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/slimelingEgg.bdc3D new file mode 100644 index 00000000..177a4b2f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/slimelingEgg.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/spin_thruster.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/spin_thruster.bdc3D new file mode 100644 index 00000000..26dd6dc0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/spin_thruster.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/treasure_chest.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/treasure_chest.bdc3D new file mode 100644 index 00000000..a44fb47a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/treasure_chest.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/vscreen.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/vscreen.bdc3D new file mode 100644 index 00000000..c497f04f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/vscreen.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway.bdc3D new file mode 100644 index 00000000..bb96ad45 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_oxygen.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_oxygen.bdc3D new file mode 100644 index 00000000..53e3ec7f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_oxygen.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_wire.bdc3D b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_wire.bdc3D new file mode 100644 index 00000000..1b6b6d5f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_wire.bdc3D differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.mtl new file mode 100644 index 00000000..66290680 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:model/flag0 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.obj new file mode 100644 index 00000000..7ad82d97 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.obj @@ -0,0 +1,71 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib flag.mtl +o Flag +v 0.028002 2.746445 0.000000 +v 2.028002 2.746445 0.000000 +v 0.028002 4.079778 -0.000000 +v 2.028002 4.079778 -0.000000 +vt 0.565500 0.566515 +vt 0.997430 0.566515 +vt 0.997430 0.998446 +vt 0.565500 0.998446 +vn 0.000000 0.000000 1.000000 +usemtl None +f 1/1/1 2/2/1 4/3/1 3/4/1 +o Pole +v -0.050000 0.099999 0.050000 +v -0.050000 4.100000 0.050000 +v -0.050000 0.099999 -0.050000 +v -0.050000 4.100000 -0.050000 +v 0.050000 0.099999 0.050000 +v 0.050000 4.100000 0.050000 +v 0.050000 0.099999 -0.050000 +v 0.050000 4.100000 -0.050000 +v -0.150000 -0.000000 0.150000 +v -0.150000 0.100000 0.150000 +v -0.150000 -0.000000 -0.150000 +v -0.150000 0.100000 -0.150000 +v 0.150000 -0.000000 0.150000 +v 0.150000 0.100000 0.150000 +v 0.150000 -0.000000 -0.150000 +v 0.150000 0.100000 -0.150000 +vt 0.016810 0.369784 +vt 0.030926 0.369784 +vt 0.030926 0.980653 +vt 0.016810 0.980653 +vt 0.016422 0.985438 +vt 0.030538 0.985438 +vt 0.030538 0.999339 +vt 0.016422 0.999339 +vt 0.109322 0.938177 +vt 0.161729 0.938177 +vt 0.161729 0.952402 +vt 0.109322 0.952402 +vt 0.110678 0.955884 +vt 0.152796 0.955884 +vt 0.152796 0.998002 +vt 0.110678 0.998002 +vt 0.109504 0.954710 +vt 0.153970 0.954710 +vt 0.153970 0.999176 +vt 0.109504 0.999176 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +f 6/5/2 8/6/2 7/7/2 5/8/2 +f 8/5/3 12/6/3 11/7/3 7/8/3 +f 12/5/4 10/6/4 9/7/4 11/8/4 +f 10/5/5 6/6/5 5/7/5 9/8/5 +f 5/5/6 7/6/6 11/7/6 9/8/6 +f 10/9/7 12/10/7 8/11/7 6/12/7 +f 14/13/2 16/14/2 15/15/2 13/16/2 +f 16/13/3 20/14/3 19/15/3 15/16/3 +f 20/13/4 18/14/4 17/15/4 19/16/4 +f 18/13/5 14/14/5 13/15/5 17/16/5 +f 13/17/6 15/18/6 19/19/6 17/20/6 +f 18/21/7 20/22/7 16/23/7 14/24/7 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.mtl new file mode 100644 index 00000000..9c773051 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/frequency_module diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.obj new file mode 100644 index 00000000..97cc89dd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.obj @@ -0,0 +1,628 @@ +mtllib frequency_module.mtl +o Main +v -0.026662 1.289106 0.026662 +v -0.026662 1.289106 -0.026662 +v -0.026662 0.725576 -0.026662 +v -0.026662 0.725576 0.026662 +v 0.026662 1.289106 -0.026662 +v 0.026662 0.725576 -0.026662 +v 0.026662 1.289106 0.026662 +v 0.026662 0.725576 0.026662 +v -0.098023 0.739949 0.525366 +v -0.098023 0.739949 -0.525366 +v -0.098023 -0.310782 -0.525366 +v -0.098023 -0.310782 0.525366 +v 0.098023 0.739949 -0.525366 +v 0.098023 -0.310782 -0.525366 +v 0.098023 0.739949 0.525366 +v 0.098023 -0.310782 0.525366 +v -0.128950 0.479051 0.246125 +v -0.128950 0.479051 -0.246125 +v -0.128950 -0.013198 -0.246125 +v -0.128950 -0.013198 0.246125 +v -0.063869 0.479051 -0.246125 +v -0.063869 -0.013198 -0.246125 +v -0.063869 0.479051 0.246125 +v -0.063869 -0.013198 0.246125 +vt 0.370131 0.008273 +vt 0.370131 0.365759 +vt 0.359770 0.365759 +vt 0.002487 0.002098 +vt 0.353830 0.395883 +vt 0.353830 0.728636 +vt 0.021077 0.728636 +vt 0.008705 0.006696 +vt 0.369398 0.006696 +vt 0.369398 0.367389 +vt 0.016728 0.006184 +vt 0.016728 0.367900 +vt 0.000965 0.367900 +vt 0.341363 0.034730 +vt 0.341363 0.339354 +vt 0.036740 0.339354 +vt 0.742240 0.003883 +vt 0.742240 0.332565 +vt 0.381416 0.332565 +vt 0.402686 0.006553 +vt 0.402686 0.333991 +vt 0.381002 0.333991 +vt 0.359770 0.008273 +vt 0.021077 0.395883 +vt 0.008705 0.367389 +vt 0.000965 0.006184 +vt 0.036740 0.034730 +vt 0.381416 0.003883 +vt 0.381002 0.006553 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +f 2/1/1 3/2/1 4/3/1 +f 5/1/2 6/2/2 3/3/2 +f 7/1/3 8/2/3 6/3/3 +f 1/1/4 4/2/4 8/3/4 +f 3/4/5 6/4/5 8/4/5 +f 5/5/6 2/6/6 1/7/6 +f 9/8/1 10/9/1 11/10/1 +f 13/11/2 14/12/2 11/13/2 +f 15/14/3 16/15/3 14/16/3 +f 9/11/4 12/12/4 16/13/4 +f 11/11/5 14/12/5 16/13/5 +f 13/11/6 10/12/6 9/13/6 +f 18/17/1 19/18/1 20/19/1 +f 21/20/2 22/21/2 19/22/2 +f 23/17/3 24/18/3 22/19/3 +f 17/20/4 20/21/4 24/22/4 +f 19/20/5 22/21/5 24/22/5 +f 21/20/6 18/21/6 17/22/6 +f 1/23/1 2/1/1 4/3/1 +f 2/23/2 5/1/2 3/3/2 +f 5/23/3 7/1/3 6/3/3 +f 7/23/4 1/1/4 8/3/4 +f 4/4/5 3/4/5 8/4/5 +f 7/24/6 5/5/6 1/7/6 +f 12/25/1 9/8/1 11/10/1 +f 10/26/2 13/11/2 11/13/2 +f 13/27/3 15/14/3 14/16/3 +f 15/26/4 9/11/4 16/13/4 +f 12/26/5 11/11/5 16/13/5 +f 15/26/6 13/11/6 9/13/6 +f 17/28/1 18/17/1 20/19/1 +f 18/29/2 21/20/2 19/22/2 +f 21/28/3 23/17/3 22/19/3 +f 23/29/4 17/20/4 24/22/4 +f 20/29/5 19/20/5 24/22/5 +f 23/29/6 21/20/6 17/22/6 +o Radar +v -0.000819 -0.003430 -0.002291 +v -0.080981 -0.061191 -0.207461 +v -0.000819 -0.003430 -0.230013 +v -0.145267 -0.107511 -0.144273 +v -0.180942 -0.133218 -0.052964 +v -0.180942 -0.133218 0.048381 +v -0.145267 -0.107511 0.139691 +v -0.080981 -0.061191 0.202879 +v -0.000819 -0.003430 0.225430 +v 0.079344 0.054331 0.202879 +v 0.143629 0.100652 0.139691 +v 0.179305 0.126358 0.048381 +v 0.179305 0.126358 -0.052964 +v 0.143629 0.100652 -0.144273 +v 0.079344 0.054331 -0.207461 +v -0.250131 -0.131041 -0.223091 +v -0.419775 -0.163533 -0.101236 +v -0.350114 -0.113339 -0.279528 +v -0.250131 -0.131041 0.218508 +v -0.224589 -0.022892 0.398327 +v -0.350114 -0.113339 0.274945 +v 0.099166 0.120644 0.316773 +v 0.199138 0.192679 0.218508 +v 0.088464 0.202678 0.398327 +v 0.254618 0.232655 -0.081094 +v 0.213989 0.293125 -0.279528 +v 0.283650 0.343319 -0.101236 +v -0.150159 -0.059007 -0.321356 +v -0.224589 -0.022892 -0.402910 +v -0.305611 -0.171017 0.076511 +v -0.419775 -0.163533 0.096653 +v -0.025497 0.030819 0.351844 +v -0.068062 0.089893 0.442362 +v 0.254618 0.232655 0.076511 +v 0.283650 0.343319 0.096653 +v 0.099166 0.120644 -0.321356 +v -0.068062 0.089893 -0.446944 +v 0.088464 0.202678 -0.402910 +v -0.305611 -0.171017 -0.081094 +v -0.150159 -0.059007 0.316773 +v 0.213989 0.293125 0.274945 +v 0.199138 0.192679 -0.223091 +v -0.025496 0.030819 -0.356427 +v 0.213989 0.293125 -0.279528 +v -0.068062 0.089893 -0.446944 +v -0.350114 -0.113339 -0.279528 +v -0.350114 -0.113339 0.274945 +v 0.088464 0.202678 0.398327 +v 0.283650 0.343319 -0.101236 +v -0.224589 -0.022892 -0.402910 +v -0.419775 -0.163533 0.096653 +v -0.068062 0.089893 0.442362 +v 0.283650 0.343319 0.096653 +v 0.088464 0.202678 -0.402910 +v -0.419775 -0.163533 -0.101236 +v -0.224589 -0.022892 0.398327 +v 0.213989 0.293125 0.274945 +v -0.311241 0.044272 -0.467362 +v -0.537828 -0.118995 0.112572 +v 0.052177 0.306132 0.462779 +v -0.129532 0.175202 0.513898 +v 0.278764 0.469400 -0.117154 +v 0.278764 0.469400 0.112572 +v -0.129532 0.175202 -0.518481 +v 0.052177 0.306132 -0.467362 +v -0.537828 -0.118995 -0.117154 +v -0.311241 0.044272 0.462779 +v 0.197896 0.411130 0.319547 +v 0.197896 0.411130 -0.324130 +v -0.456960 -0.060726 -0.324130 +v -0.456960 -0.060726 0.319547 +v -0.008930 0.007827 -0.002291 +v 0.071233 0.065588 -0.207461 +v -0.008930 0.007827 -0.230013 +v 0.135518 0.111909 -0.144273 +v 0.171194 0.137615 -0.052964 +v 0.171194 0.137615 0.048381 +v 0.135518 0.111909 0.139691 +v 0.071233 0.065588 0.202879 +v -0.008930 0.007827 0.225430 +v -0.089092 -0.049934 0.202879 +v -0.153377 -0.096255 0.139691 +v -0.189053 -0.121961 0.048381 +v -0.189053 -0.121961 -0.052964 +v -0.153377 -0.096255 -0.144273 +v -0.089092 -0.049934 -0.207461 +v 0.191027 0.203935 -0.223091 +v 0.275539 0.354576 -0.101236 +v 0.205878 0.304381 -0.279528 +v 0.191027 0.203935 0.218508 +v 0.080354 0.213935 0.398327 +v 0.205878 0.304381 0.274945 +v -0.158270 -0.047750 0.316773 +v -0.358224 -0.102083 0.274945 +v -0.232700 -0.011636 0.398327 +v -0.313722 -0.159761 -0.081094 +v -0.358224 -0.102083 -0.279528 +v -0.427885 -0.152277 -0.101236 +v 0.091055 0.131901 -0.321356 +v 0.080354 0.213934 -0.402910 +v 0.246507 0.243911 0.076511 +v 0.275539 0.354576 0.096653 +v -0.033607 0.042075 0.351844 +v -0.076173 0.101149 0.442362 +v -0.313722 -0.159761 0.076511 +v -0.427885 -0.152277 0.096653 +v -0.158270 -0.047750 -0.321356 +v -0.033607 0.042075 -0.356427 +v -0.232700 -0.011636 -0.402910 +v 0.246507 0.243911 -0.081094 +v 0.091055 0.131901 0.316773 +v -0.258242 -0.119785 0.218508 +v -0.258242 -0.119785 -0.223091 +v -0.076173 0.101149 -0.446945 +v -0.358224 -0.102083 -0.279528 +v -0.076173 0.101149 -0.446945 +v 0.205878 0.304381 -0.279528 +v 0.205878 0.304381 0.274945 +v -0.232700 -0.011636 0.398327 +v -0.427885 -0.152277 -0.101236 +v 0.080354 0.213934 -0.402910 +v 0.275539 0.354576 0.096653 +v -0.076173 0.101149 0.442362 +v -0.427885 -0.152277 0.096653 +v -0.232700 -0.011636 -0.402910 +v 0.275539 0.354576 -0.101236 +v 0.080354 0.213935 0.398327 +v -0.358224 -0.102083 0.274945 +v 0.044066 0.317389 -0.467362 +v 0.270653 0.480656 0.112571 +v -0.137643 0.186459 0.513898 +v -0.545939 -0.107739 -0.117154 +v -0.545939 -0.107739 0.112572 +v -0.137643 0.186459 -0.518481 +v -0.319351 0.055529 -0.467362 +v 0.270653 0.480656 -0.117154 +v 0.044066 0.317389 0.462779 +v -0.465071 -0.049469 0.319547 +v -0.465071 -0.049469 -0.324130 +v 0.189785 0.422387 -0.324130 +v 0.189785 0.422387 0.319547 +v -0.319352 0.055529 0.462779 +vt 0.020689 0.395883 +vt 0.353442 0.395883 +vt 0.353442 0.728636 +vn 0.584600 -0.811300 -0.000000 +vn -0.014300 -0.961000 -0.276100 +vn 0.129000 -0.857800 0.497600 +vn 0.772900 -0.393800 0.497600 +vn 0.916100 -0.290600 -0.276100 +vn 0.129000 -0.857800 -0.497600 +vn -0.014300 -0.961000 0.276100 +vn 0.565800 -0.543000 0.620500 +vn 0.967300 -0.253800 0.000000 +vn 0.565800 -0.543000 -0.620500 +vn -0.065400 -0.997900 -0.000000 +vn 0.336000 -0.708600 0.620500 +vn 0.916100 -0.290600 0.276100 +vn 0.772900 -0.393800 -0.497600 +vn 0.336000 -0.708600 -0.620500 +vn 0.611600 -0.725400 0.315900 +vn 0.316200 -0.938200 0.140600 +vn 0.389100 -0.885700 -0.253300 +vn 0.789900 -0.596900 -0.140600 +vn 0.717000 -0.649400 0.253300 +vn 0.389100 -0.885700 0.253300 +vn 0.316200 -0.938200 -0.140600 +vn 0.494600 -0.809700 -0.315900 +vn 0.717000 -0.649400 -0.253300 +vn 0.789900 -0.596900 0.140600 +vn 0.494600 -0.809700 0.315900 +vn 0.290200 -0.957000 -0.000000 +vn 0.611600 -0.725400 -0.315900 +vn 0.816000 -0.578100 -0.000000 +vn 0.000000 0.000000 1.000000 +vn -0.098400 -0.752200 -0.651500 +vn -0.286000 -0.887400 0.361600 +vn 0.473600 -0.340000 0.812500 +vn 0.999200 0.038700 0.000000 +vn 0.473600 -0.340000 -0.812500 +vn -0.353000 -0.935600 -0.000000 +vn 0.172700 -0.556900 0.812500 +vn 0.932300 -0.009500 0.361600 +vn 0.744700 -0.144700 -0.651500 +vn 0.172700 -0.556900 -0.812500 +vn -0.286000 -0.887400 -0.361600 +vn -0.098400 -0.752200 0.651500 +vn 0.744700 -0.144700 0.651500 +vn 0.932300 -0.009500 -0.361600 +vn -0.584600 0.811300 0.000000 +vn -0.916100 0.290600 0.276100 +vn -0.772900 0.393800 -0.497600 +vn -0.129000 0.857800 -0.497600 +vn 0.014300 0.961000 0.276100 +vn -0.772900 0.393800 0.497600 +vn -0.916100 0.290600 -0.276100 +vn -0.336000 0.708600 -0.620500 +vn 0.065400 0.997900 0.000000 +vn -0.336000 0.708600 0.620500 +vn -0.967300 0.253800 0.000000 +vn -0.565800 0.543000 -0.620500 +vn 0.014300 0.961000 -0.276100 +vn -0.129000 0.857800 0.497600 +vn -0.565800 0.543000 0.620500 +vn -0.494600 0.809700 -0.315900 +vn -0.789900 0.596900 -0.140600 +vn -0.717000 0.649400 0.253300 +vn -0.316200 0.938200 0.140600 +vn -0.389100 0.885700 -0.253300 +vn -0.717000 0.649400 -0.253300 +vn -0.789900 0.596900 0.140600 +vn -0.611600 0.725400 0.315900 +vn -0.389100 0.885700 0.253300 +vn -0.316200 0.938200 -0.140600 +vn -0.611600 0.725400 -0.315900 +vn -0.816000 0.578100 0.000000 +vn -0.494600 0.809700 0.315900 +vn -0.290200 0.957000 0.000000 +vn -0.744700 0.144700 0.651500 +vn -0.932300 0.009500 -0.361600 +vn -0.172700 0.556900 -0.812500 +vn 0.353000 0.935600 0.000000 +vn -0.172700 0.556900 0.812500 +vn -0.999200 -0.038700 -0.000000 +vn -0.473600 0.340000 -0.812500 +vn 0.286000 0.887400 -0.361600 +vn 0.098400 0.752200 0.651500 +vn -0.473600 0.340000 0.812500 +vn -0.932300 0.009500 0.361600 +vn -0.744700 0.144700 -0.651500 +vn 0.098400 0.752200 -0.651500 +vn 0.286000 0.887400 0.361600 +vn 0.180500 0.130100 -0.974900 +vn 0.505900 0.364500 -0.781800 +vn 0.731000 0.526700 -0.433900 +vn 0.811300 0.584600 0.000000 +vn 0.730900 0.526800 0.433900 +vn 0.505900 0.364500 0.781800 +vn 0.180500 0.130100 0.974900 +vn -0.180500 -0.130100 0.974900 +vn -0.505900 -0.364500 0.781800 +vn -0.731000 -0.526700 0.433900 +vn -0.811300 -0.584600 -0.000000 +vn -0.731000 -0.526700 -0.433900 +vn -0.505900 -0.364500 -0.781800 +vn -0.180500 -0.130100 -0.974900 +vn 0.473600 -0.340100 -0.812500 +vn 0.731000 0.526700 0.433900 +usemtl None +f 25/30/7 26/31/7 27/32/7 +f 25/30/7 28/31/7 26/32/7 +f 25/30/7 29/31/7 28/32/7 +f 25/30/7 30/31/7 29/32/7 +f 25/30/7 31/31/7 30/32/7 +f 25/30/7 32/31/7 31/32/7 +f 25/30/7 33/31/7 32/32/7 +f 25/30/7 34/31/7 33/32/7 +f 25/30/7 35/31/7 34/32/7 +f 25/30/7 36/31/7 35/32/7 +f 25/30/7 37/31/7 36/32/7 +f 25/30/7 38/31/7 37/32/7 +f 25/30/7 39/31/7 38/32/7 +f 25/30/7 27/31/7 39/32/7 +f 40/30/8 41/31/8 42/32/8 +f 43/30/9 44/31/9 45/32/9 +f 46/30/10 47/31/10 48/32/10 +f 49/30/11 50/31/11 51/32/11 +f 52/30/12 40/31/12 53/32/12 +f 54/30/13 43/31/13 55/32/13 +f 56/30/14 46/31/14 57/32/14 +f 58/30/15 51/31/15 59/32/15 +f 60/30/16 61/31/16 62/32/16 +f 63/30/17 55/31/17 41/32/17 +f 64/30/18 56/31/18 44/32/18 +f 47/30/19 58/31/19 65/32/19 +f 66/30/20 60/31/20 50/32/20 +f 67/30/21 52/31/21 61/32/21 +f 33/30/22 34/31/22 56/32/22 +f 30/30/23 31/31/23 54/32/23 +f 26/30/24 28/31/24 52/32/24 +f 37/30/25 66/31/25 49/32/25 +f 34/30/26 35/31/26 46/32/26 +f 31/30/27 32/31/27 43/32/27 +f 28/30/28 29/31/28 40/32/28 +f 27/30/29 26/31/29 67/32/29 +f 38/30/30 60/31/30 66/32/30 +f 35/30/31 58/31/31 47/32/31 +f 32/30/32 33/31/32 64/32/32 +f 29/30/33 54/31/33 63/32/33 +f 39/30/34 27/31/34 60/32/34 +f 36/30/35 37/31/35 58/32/35 +f 50/30/36 68/31/36 62/32/36 +f 61/30/36 69/31/36 53/32/36 +f 42/30/36 70/31/36 41/32/36 +f 45/30/36 71/31/36 44/32/36 +f 48/30/36 72/31/36 65/32/36 +f 51/30/36 73/31/36 50/32/36 +f 53/30/36 74/31/36 42/32/36 +f 55/30/36 75/31/36 45/32/36 +f 57/30/36 76/31/36 48/32/36 +f 59/30/36 77/31/36 51/32/36 +f 62/30/36 78/31/36 61/32/36 +f 41/30/36 79/31/36 55/32/36 +f 44/30/36 80/31/36 57/32/36 +f 65/30/36 81/31/36 59/32/36 +f 74/30/37 70/31/37 82/32/37 +f 75/30/38 71/31/38 83/32/38 +f 76/30/39 84/31/39 85/32/39 +f 77/30/40 86/31/40 87/32/40 +f 78/30/41 88/31/41 89/32/41 +f 79/30/42 75/31/42 90/32/42 +f 80/30/43 76/31/43 91/32/43 +f 81/30/44 87/31/44 92/32/44 +f 68/30/45 89/31/45 93/32/45 +f 69/30/46 74/31/46 88/32/46 +f 70/30/47 90/31/47 94/32/47 +f 71/30/48 91/31/48 95/32/48 +f 72/30/49 81/31/49 84/32/49 +f 73/30/50 93/31/50 86/32/50 +f 96/30/51 97/31/51 98/32/51 +f 96/30/51 99/31/51 97/32/51 +f 96/30/51 100/31/51 99/32/51 +f 96/30/51 101/31/51 100/32/51 +f 96/30/51 102/31/51 101/32/51 +f 96/30/51 103/31/51 102/32/51 +f 96/30/51 104/31/51 103/32/51 +f 96/30/51 105/31/51 104/32/51 +f 96/30/51 106/31/51 105/32/51 +f 96/30/51 107/31/51 106/32/51 +f 96/30/51 108/31/51 107/32/51 +f 96/30/51 109/31/51 108/32/51 +f 96/30/51 110/31/51 109/32/51 +f 96/30/51 98/31/51 110/32/51 +f 111/30/52 112/31/52 113/32/52 +f 114/30/53 115/31/53 116/32/53 +f 117/30/54 118/31/54 119/32/54 +f 120/30/55 121/31/55 122/32/55 +f 123/30/56 113/31/56 124/32/56 +f 125/30/57 116/31/57 126/32/57 +f 127/30/58 119/31/58 128/32/58 +f 129/30/59 122/31/59 130/32/59 +f 131/30/60 132/31/60 133/32/60 +f 134/30/61 126/31/61 112/32/61 +f 135/30/62 127/31/62 115/32/62 +f 136/30/63 130/31/63 118/32/63 +f 137/30/64 133/31/64 121/32/64 +f 132/30/65 123/31/65 138/32/65 +f 104/30/66 105/31/66 127/32/66 +f 101/30/67 114/31/67 125/32/67 +f 97/30/68 99/31/68 123/32/68 +f 108/30/69 137/31/69 120/32/69 +f 105/30/70 106/31/70 117/32/70 +f 102/30/71 135/31/71 114/32/71 +f 99/30/72 100/31/72 111/32/72 +f 98/30/73 123/31/73 132/32/73 +f 109/30/74 131/31/74 137/32/74 +f 106/30/75 129/31/75 136/32/75 +f 103/30/76 104/31/76 135/32/76 +f 100/30/77 101/31/77 134/32/77 +f 110/30/78 132/31/78 131/32/78 +f 107/30/79 108/31/79 129/32/79 +f 121/30/36 133/31/36 139/32/36 +f 138/30/36 124/31/36 140/32/36 +f 113/30/36 112/31/36 141/32/36 +f 116/30/36 115/31/36 142/32/36 +f 119/30/36 118/31/36 143/32/36 +f 122/30/36 121/31/36 144/32/36 +f 124/30/36 113/31/36 145/32/36 +f 126/30/36 116/31/36 146/32/36 +f 128/30/36 119/31/36 147/32/36 +f 130/30/36 122/31/36 148/32/36 +f 133/30/36 138/31/36 149/32/36 +f 112/30/36 126/31/36 150/32/36 +f 115/30/36 128/31/36 151/32/36 +f 118/30/36 130/31/36 152/32/36 +f 145/30/80 141/31/80 153/32/80 +f 146/30/81 142/31/81 154/32/81 +f 147/30/82 143/31/82 155/32/82 +f 148/30/83 156/31/83 157/32/83 +f 149/30/84 158/31/84 159/32/84 +f 150/30/85 154/31/85 160/32/85 +f 151/30/86 155/31/86 161/32/86 +f 152/30/87 148/31/87 162/32/87 +f 139/30/88 159/31/88 163/32/88 +f 140/30/89 145/31/89 158/32/89 +f 141/30/90 160/31/90 164/32/90 +f 142/30/91 151/31/91 165/32/91 +f 143/30/92 152/31/92 166/32/92 +f 144/30/93 139/31/93 156/32/93 +f 158/30/94 89/31/94 88/32/94 +f 153/30/95 164/31/95 89/32/95 +f 164/30/96 86/31/96 93/32/96 +f 160/30/97 154/31/97 86/32/97 +f 154/30/98 165/31/98 87/32/98 +f 165/30/99 161/31/99 92/32/99 +f 161/30/100 155/31/100 84/32/100 +f 155/30/101 166/31/101 85/32/101 +f 166/30/102 162/31/102 91/32/102 +f 162/30/103 83/31/103 95/32/103 +f 157/30/104 90/31/104 83/32/104 +f 156/30/105 94/31/105 90/32/105 +f 163/30/106 82/31/106 94/32/106 +f 159/30/107 88/31/107 82/32/107 +f 56/30/22 34/31/22 46/32/22 +f 155/30/82 143/31/82 166/32/82 +f 165/30/91 151/31/91 161/32/91 +f 57/30/14 46/31/14 48/32/14 +f 67/30/29 26/31/29 52/32/29 +f 55/30/13 43/31/13 45/32/13 +f 162/30/87 148/31/87 157/32/87 +f 166/30/92 152/31/92 162/32/92 +f 63/30/8 41/31/8 40/32/8 +f 64/30/9 44/31/9 43/32/9 +f 66/30/11 50/31/11 49/32/11 +f 46/30/26 35/31/26 47/32/26 +f 90/30/42 75/31/42 83/32/42 +f 49/30/15 51/31/15 58/32/15 +f 67/30/16 61/31/16 60/32/16 +f 54/30/17 55/31/17 63/32/17 +f 127/30/66 105/31/66 117/32/66 +f 134/30/77 101/31/77 125/32/77 +f 61/30/21 52/31/21 53/32/21 +f 91/30/102 162/31/102 95/32/102 +f 43/30/27 32/31/27 64/32/27 +f 54/30/23 31/31/23 43/32/23 +f 38/30/25 66/31/25 37/32/25 +f 64/30/32 33/31/32 56/32/32 +f 89/30/95 164/31/95 93/32/95 +f 156/30/93 139/31/93 163/32/93 +f 39/30/30 60/31/30 38/32/30 +f 36/30/31 58/31/31 35/32/31 +f 50/30/20 60/31/20 62/32/20 +f 30/30/33 54/31/33 29/32/33 +f 129/30/79 108/31/79 120/32/79 +f 62/30/36 68/31/36 78/32/36 +f 53/30/36 69/31/36 74/32/36 +f 41/30/36 70/31/36 79/32/36 +f 44/30/36 71/31/36 80/32/36 +f 65/30/36 72/31/36 81/32/36 +f 50/30/36 73/31/36 68/32/36 +f 42/30/36 74/31/36 70/32/36 +f 45/30/36 75/31/36 71/32/36 +f 48/30/36 76/31/36 72/32/36 +f 51/30/36 77/31/36 73/32/36 +f 61/30/36 78/31/36 69/32/36 +f 55/30/36 79/31/36 75/32/36 +f 57/30/36 80/31/36 76/32/36 +f 59/30/36 81/31/36 77/32/36 +f 82/30/37 70/31/37 94/32/37 +f 65/30/19 58/31/19 59/32/19 +f 72/30/39 84/31/39 76/32/39 +f 73/30/40 86/31/40 77/32/40 +f 69/30/108 88/31/108 78/32/108 +f 154/30/81 142/31/81 165/32/81 +f 115/30/62 127/31/62 128/32/62 +f 77/30/44 87/31/44 81/32/44 +f 78/30/45 89/31/45 68/32/45 +f 88/30/46 74/31/46 82/32/46 +f 79/30/47 90/31/47 70/32/47 +f 80/30/48 91/31/48 71/32/48 +f 84/30/49 81/31/49 92/32/49 +f 68/30/50 93/31/50 73/32/50 +f 134/30/52 112/31/52 111/32/52 +f 135/30/53 115/31/53 114/32/53 +f 136/30/54 118/31/54 117/32/54 +f 137/30/55 121/31/55 120/32/55 +f 111/30/56 113/31/56 123/32/56 +f 114/30/57 116/31/57 125/32/57 +f 117/30/58 119/31/58 127/32/58 +f 120/30/59 122/31/59 129/32/59 +f 125/30/61 126/31/61 134/32/61 +f 44/30/18 56/31/18 57/32/18 +f 129/30/63 130/31/63 136/32/63 +f 131/30/64 133/31/64 137/32/64 +f 138/30/65 123/31/65 124/32/65 +f 135/30/76 104/31/76 127/32/76 +f 102/30/67 114/31/67 101/32/67 +f 109/30/69 137/31/69 108/32/69 +f 117/30/70 106/31/70 136/32/70 +f 103/30/71 135/31/71 102/32/71 +f 52/30/24 28/31/24 40/32/24 +f 97/30/73 123/31/73 98/32/73 +f 110/30/74 131/31/74 109/32/74 +f 107/30/75 129/31/75 106/32/75 +f 111/30/72 100/31/72 134/32/72 +f 123/30/68 99/31/68 111/32/68 +f 98/30/78 132/31/78 110/32/78 +f 40/30/28 29/31/28 63/32/28 +f 139/30/36 133/31/36 149/32/36 +f 140/30/36 124/31/36 145/32/36 +f 141/30/36 112/31/36 150/32/36 +f 142/30/36 115/31/36 151/32/36 +f 143/30/36 118/31/36 152/32/36 +f 144/30/36 121/31/36 139/32/36 +f 145/30/36 113/31/36 141/32/36 +f 146/30/36 116/31/36 142/32/36 +f 147/30/36 119/31/36 143/32/36 +f 148/30/36 122/31/36 144/32/36 +f 149/30/36 138/31/36 140/32/36 +f 150/30/36 126/31/36 146/32/36 +f 151/30/36 128/31/36 147/32/36 +f 152/30/36 130/31/36 148/32/36 +f 153/30/80 141/31/80 164/32/80 +f 144/30/83 156/31/83 148/32/83 +f 140/30/84 158/31/84 149/32/84 +f 146/30/85 154/31/85 150/32/85 +f 147/30/86 155/31/86 151/32/86 +f 53/30/12 40/31/12 42/32/12 +f 149/30/88 159/31/88 139/32/88 +f 158/30/89 145/31/89 153/32/89 +f 150/30/90 160/31/90 141/32/90 +f 91/30/43 76/31/43 85/32/43 +f 153/30/94 89/31/94 158/32/94 +f 60/30/34 27/31/34 67/32/34 +f 160/30/96 86/31/96 164/32/96 +f 58/30/35 37/31/35 49/32/35 +f 87/30/109 165/31/109 92/32/109 +f 92/30/99 161/31/99 84/32/99 +f 84/30/100 155/31/100 85/32/100 +f 85/30/101 166/31/101 91/32/101 +f 83/30/38 71/31/38 95/32/38 +f 157/30/103 83/31/103 162/32/103 +f 156/30/104 90/31/104 157/32/104 +f 163/30/105 94/31/105 156/32/105 +f 159/30/106 82/31/106 163/32/106 +f 158/30/107 88/31/107 159/32/107 +f 86/30/97 154/31/97 87/32/97 +f 133/30/60 132/31/60 138/32/60 +f 48/30/10 47/31/10 65/32/10 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_compressor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_compressor.json new file mode 100644 index 00000000..311f195e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_compressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/advanced_compressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_solar.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_solar.json new file mode 100644 index 00000000..0bdd646b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_solar.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/advanced_solar_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_fan.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_fan.json new file mode 100644 index 00000000..c370b34a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_fan.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/air_fan" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_controller.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_controller.json new file mode 100644 index 00000000..5374c35a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_controller.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/air_lock_controller_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_frame.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_frame.json new file mode 100644 index 00000000..79b91362 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_frame.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/air_lock_frame_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_seal.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_seal.json new file mode 100644 index 00000000..203f214f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_seal.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/air_lock_seal_model" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_vent.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_vent.json new file mode 100644 index 00000000..2f2eeb6f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_vent.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/air_vent" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire.json new file mode 100644 index 00000000..3400849b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/aluminum_wire_item" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, -45, 0 ], + "translation": [ 0.5, -1, -0.3 ], + "scale": [ 0.55, 0.55, 0.55 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_heavy.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_heavy.json new file mode 100644 index 00000000..f712829d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_heavy.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/aluminum_wire_heavy_item" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, -45, 0 ], + "translation": [ 0.5, -1, -0.3 ], + "scale": [ 0.55, 0.55, 0.55 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch.json new file mode 100644 index 00000000..e13f8cf3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/aluminum_wire_switch_item" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, -45, 0 ], + "translation": [ 0.5, -1, -0.3 ], + "scale": [ 0.55, 0.55, 0.55 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch_heavy.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch_heavy.json new file mode 100644 index 00000000..7cde319b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch_heavy.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/aluminum_wire_heavy_switch_item" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, -45, 0 ], + "translation": [ 0.5, -1, -0.3 ], + "scale": [ 0.55, 0.55, 0.55 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ambient_thermal_controller.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ambient_thermal_controller.json new file mode 100644 index 00000000..46a6563f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ambient_thermal_controller.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.ambient_thermal_controller" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arc_furnace.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arc_furnace.json new file mode 100644 index 00000000..c5928af0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arc_furnace.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/arc_furnace_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arclamp.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arclamp.json new file mode 100644 index 00000000..2ffd054c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arclamp.json @@ -0,0 +1,30 @@ +{ + "parent":"galacticraftcore:block/arclamp_on_model", + "display": { + "gui": { + "rotation": [ 30, 135, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, -45, 0 ], + "translation": [ 0, 2.5, 2.25 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -225, 0 ], + "translation": [ 0, 2.5, 2.25 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 4, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 4, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_block_moon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_block_moon.json new file mode 100644 index 00000000..0520ad8e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_block_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_item.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_item.json new file mode 100644 index 00000000..60247cd7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_item.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.solar_module_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/battery.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/battery.json new file mode 100644 index 00000000..190f6f70 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/battery.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/battery" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_cooked.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_cooked.json new file mode 100644 index 00000000..de97d6b3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_cooked.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/beef_patty_cooked" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_raw.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_raw.json new file mode 100644 index 00000000..4eedfea3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_raw.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/beef_patty_raw" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_aluminum_gc.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_aluminum_gc.json new file mode 100644 index 00000000..6cdd21b6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_aluminum_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_aluminum_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_copper_gc.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_copper_gc.json new file mode 100644 index 00000000..a6354363 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_copper_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_copper_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_meteoric_iron_gc.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_meteoric_iron_gc.json new file mode 100644 index 00000000..85d21fb2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_meteoric_iron_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_meteoric_iron_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_silicon_gc.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_silicon_gc.json new file mode 100644 index 00000000..171317f5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_silicon_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_silicon_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_tin_gc.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_tin_gc.json new file mode 100644 index 00000000..f7d1741e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_tin_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_tin_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/boss_spawner.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/boss_spawner.json new file mode 100644 index 00000000..39f0252e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/boss_spawner.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_dungeon_brick_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_fuel.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_fuel.json new file mode 100644 index 00000000..9bf1df21 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_fuel.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/bucket_fuel" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_oil.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_oil.json new file mode 100644 index 00000000..1287d535 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_oil.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/bucket_oil" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_1.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_2.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_3.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_3.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_pad.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_pad.json new file mode 100644 index 00000000..836b4046 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_pad.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggymat.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggymat.json new file mode 100644 index 00000000..81333557 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggymat.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/buggymat.wheel" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/burger_bun.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/burger_bun.json new file mode 100644 index 00000000..2fd61c2b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/burger_bun.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/burger_bun" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister.json new file mode 100644 index 00000000..cba23dc1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/canister.tin" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister_copper.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister_copper.json new file mode 100644 index 00000000..f283fe3f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister_copper.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/canister.copper" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canned_beef.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canned_beef.json new file mode 100644 index 00000000..84d9b0fb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canned_beef.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/canned_beef" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canvas.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canvas.json new file mode 100644 index 00000000..266d3113 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canvas.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/canvas" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo.json new file mode 100644 index 00000000..d43362a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/cargo_loader_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo_unloader.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo_unloader.json new file mode 100644 index 00000000..4e91dfee --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo_unloader.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/cargo_unloader_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese.json new file mode 100644 index 00000000..5e62128b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese.json @@ -0,0 +1,15 @@ +{ + "parent":"galacticraftcore:block/cheese_uneaten_model", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_curd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_curd.json new file mode 100644 index 00000000..23870c2a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_curd.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/cheese_curd" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_slice.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_slice.json new file mode 100644 index 00000000..e955d0de --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/cheese_slice" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheeseburger.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheeseburger.json new file mode 100644 index 00000000..771473b3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheeseburger.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/cheeseburger" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/circuit_fabricator.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/circuit_fabricator.json new file mode 100644 index 00000000..68748001 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/circuit_fabricator.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/circuit_fabricator_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cluster_storage.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cluster_storage.json new file mode 100644 index 00000000..94dab6a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cluster_storage.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/cluster_storage_16", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/coal_generator.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/coal_generator.json new file mode 100644 index 00000000..d60b19fb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/coal_generator.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/coal_generator_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/collector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/collector.json new file mode 100644 index 00000000..f0c4e309 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/collector.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/collector_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compact_workbench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compact_workbench.json new file mode 100644 index 00000000..84763a81 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compact_workbench.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/compact_workbench", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_aluminum.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_aluminum.json new file mode 100644 index 00000000..117d70be --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_aluminum.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_aluminum" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_bronze.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_bronze.json new file mode 100644 index 00000000..0517ceb1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_bronze.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_bronze" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_copper.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_copper.json new file mode 100644 index 00000000..cb1ec23f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_copper.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_copper" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_iron.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_iron.json new file mode 100644 index 00000000..56cec170 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_iron.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_iron" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_meteoric_iron.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_meteoric_iron.json new file mode 100644 index 00000000..b795989c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_meteoric_iron.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/compressed_meteoric_iron" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_steel.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_steel.json new file mode 100644 index 00000000..05693131 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_steel.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_steel" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_tin.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_tin.json new file mode 100644 index 00000000..58232569 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_tin.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_tin" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_detector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_detector.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_detector.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_redstone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_redstone.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_redstone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater_pow.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater_pow.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater_pow.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_0.json new file mode 100644 index 00000000..d77184fc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_0.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_0_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_1.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deconstructor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deconstructor.json new file mode 100644 index 00000000..e7b708ea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deconstructor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deconstructor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_carrot.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_carrot.json new file mode 100644 index 00000000..1c4059df --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_carrot.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.dehydrated_carrot" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_melon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_melon.json new file mode 100644 index 00000000..688a951d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_melon.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.dehydrated_melon" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_potato.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_potato.json new file mode 100644 index 00000000..84455ac8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_potato.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.dehydrated_potato" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dishbase.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dishbase.json new file mode 100644 index 00000000..ac83a09e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dishbase.json @@ -0,0 +1,14 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "galacticraftcore:items/dishicon" + }, + "display": { + "thirdperson_righthand": { + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson_righthand": { + "scale": [ 0.6, 0.6, 0.6 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/distributor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/distributor.json new file mode 100644 index 00000000..26e06a6c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/distributor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/distributor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeon_key.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeon_key.json new file mode 100644 index 00000000..1fe323c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeon_key.json @@ -0,0 +1,81 @@ +{ + "elements": [ + { + "from": [ 0.0, 6.0, 7.5 ], + "to": [ 3.0, 9.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "west": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 2.0, 3.0, 3.0 ] } + } + }, + { + "from": [ 3.0, 6.5, 7.5 ], + "to": [ 4.0, 8.5, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "east": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "south": { "texture": "#key", "uv": [ 4.0, 6.0, 5.0, 8.0 ] }, + "west": { "texture": "#key", "uv": [ 9.0, 8.0, 8.0, 6.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] } + } + }, + { + "from": [ 4.0, 7.0, 7.5 ], + "to": [ 15.0, 8.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] }, + "down": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] } + } + }, + { + "from": [ 10.5, 6.0, 7.5 ], + "to": [ 14.5, 7.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] } + } + }, + { + "from": [ 11.5, 5.0, 7.5 ], + "to": [ 14.5, 6.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] } + } + } + ], + "display": { + "thirdperson": { + "rotation": [ 0, -90, 180 ], + "translation": [ 0, 0.25, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ -180, -125, 180 ], + "translation": [ 0, 4, -2 ], + "scale": [ 1.5, 1.5, 1.5 ] + }, + "gui": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 1, 0 ], + "scale": [ 1.5, 1.5, 1.5 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeonfinder.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeonfinder.json new file mode 100644 index 00000000..f44a1066 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeonfinder.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/dungeonfinder" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_furnace.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_furnace.json new file mode 100644 index 00000000..a43affa6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_furnace.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/electric_furnace_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_ingot_compressor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_ingot_compressor.json new file mode 100644 index 00000000..c3e5386a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_ingot_compressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/electric_ingot_compressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box.json new file mode 100644 index 00000000..e42a90e1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box.json @@ -0,0 +1,35 @@ +{ + "parent":"galacticraftcore:block/emergency_box", + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box_full.json new file mode 100644 index 00000000..a054418e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box_full.json @@ -0,0 +1,35 @@ +{ + "parent":"galacticraftcore:block/emergency_box_filled", + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_kit.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_kit.json new file mode 100644 index 00000000..7a744a1f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_kit.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/emergency_kit" + }, + "display": { + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed.json new file mode 100644 index 00000000..30e4aef3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_aluminum_wire_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_copper_cable.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_copper_cable.json new file mode 100644 index 00000000..ac7ec339 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_copper_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_copper_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_fluid_pipe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_fluid_pipe.json new file mode 100644 index 00000000..edb4e5fe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_fluid_pipe.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_fluid_pipe_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_glass_fibre_cable.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_glass_fibre_cable.json new file mode 100644 index 00000000..f114d484 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_glass_fibre_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_glass_fibre_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_gold_cable.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_gold_cable.json new file mode 100644 index 00000000..dc8c6246 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_gold_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_gold_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_heavy_aluminum_wire.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_heavy_aluminum_wire.json new file mode 100644 index 00000000..2e4f76c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_heavy_aluminum_wire.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_heavy_aluminum_wire_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_hv_cable.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_hv_cable.json new file mode 100644 index 00000000..9a1b73e1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_hv_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_hv_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_lv_cable.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_lv_cable.json new file mode 100644 index 00000000..718c1a6a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_lv_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_lv_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_me_cable.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_me_cable.json new file mode 100644 index 00000000..35389c50 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_me_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_me_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_cobblestone.json new file mode 100644 index 00000000..02c55695 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_cobblestone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_fluids_cobblestone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_stone.json new file mode 100644 index 00000000..cfea77d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_stone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_fluids_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_cobblestone.json new file mode 100644 index 00000000..64bac382 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_cobblestone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_items_cobblestone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_stone.json new file mode 100644 index 00000000..1f155551 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_stone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_items_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_gold.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_gold.json new file mode 100644 index 00000000..d7fbc6ed --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_gold.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_power_gold_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_stone.json new file mode 100644 index 00000000..fe9ba0d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_stone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_power_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_te_conduit.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_te_conduit.json new file mode 100644 index 00000000..3b454942 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_te_conduit.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_te_conduit_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/energy_storage.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/energy_storage.json new file mode 100644 index 00000000..9107c2bb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/energy_storage.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/energy_storage_16", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/engine.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/engine.json new file mode 100644 index 00000000..22474456 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/engine.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/engine.tier1engine" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fallen_meteor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fallen_meteor.json new file mode 100644 index 00000000..5f267a2b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fallen_meteor.json @@ -0,0 +1,15 @@ +{ + "parent":"galacticraftcore:block/fallen_meteor_model", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/flag.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/flag.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/flag.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe.json new file mode 100644 index 00000000..43897a6a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/fluid_pipe_neswud", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe_pull.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe_pull.json new file mode 100644 index 00000000..43897a6a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe_pull.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/fluid_pipe_neswud", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_tank.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_tank.json new file mode 100644 index 00000000..c51eb282 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_tank.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/tank_ud", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/food.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/food.json new file mode 100644 index 00000000..90df48c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/food.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.dehydrated_apple" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/frequency_module.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/frequency_module.json new file mode 100644 index 00000000..821657e5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/frequency_module.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.frequency_module" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial.json new file mode 100644 index 00000000..dbd71f34 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_1.json new file mode 100644 index 00000000..f8bf4238 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_2.json new file mode 100644 index 00000000..5ae292bd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_3.json new file mode 100644 index 00000000..dfa80aa9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_4.json new file mode 100644 index 00000000..9e05c46f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_5.json new file mode 100644 index 00000000..8d7958f3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_6.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_6.json new file mode 100644 index 00000000..c1a9725d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_loader.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_loader.json new file mode 100644 index 00000000..961b3bb0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_loader.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/fuel_loader_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/glowstone_torch.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/glowstone_torch.json new file mode 100644 index 00000000..b7f0bba8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/glowstone_torch.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/glowstone_torch" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/grating.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/grating.json new file mode 100644 index 00000000..9f4dc8a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/grating.json @@ -0,0 +1,40 @@ +{ + "parent":"galacticraftcore:block/grating", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, -3], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -225, 0 ], + "translation": [ 0, 2.5, -0.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, -2], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "gui": { + "rotation": [ 75, 225, 0 ], + "translation": [ 0, -0.3, -8 ], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, -2], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "firstperson_righthand": { + "rotation": [ 15, 45, 0 ], + "translation": [ 0, 0, -2 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 15, 225, 0 ], + "translation": [ 0, 0, -2 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/heavy_plating.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/heavy_plating.json new file mode 100644 index 00000000..ca05cae6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/heavy_plating.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/heavy_plating" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_dust_small_titanium.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_dust_small_titanium.json new file mode 100644 index 00000000..0ce0a912 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_dust_small_titanium.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/ic2/dust_small_titanium" + }, + "display": { } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_crushed_alu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_crushed_alu.json new file mode 100644 index 00000000..1c33ee63 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_crushed_alu.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/ic2/ore_crushed_alu" + }, + "display": { } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_purified_alu.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_purified_alu.json new file mode 100644 index 00000000..334ede90 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_purified_alu.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/ic2/ore_purified_alu" + }, + "display": { } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2compat.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2compat.json new file mode 100644 index 00000000..51f36b61 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2compat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/ic2/dust_alu" + }, + "display": { } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_battery.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_battery.json new file mode 100644 index 00000000..190f6f70 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_battery.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/battery" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_oxygen.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_oxygen.json new file mode 100644 index 00000000..37c4aa50 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_oxygen.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_tank_heavy_full" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_aluminum.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_aluminum.json new file mode 100644 index 00000000..f58de59a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_aluminum.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.ingot_aluminum" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_compressor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_compressor.json new file mode 100644 index 00000000..9db8c05c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_compressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ingot_compressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_copper.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_copper.json new file mode 100644 index 00000000..e7a3e1e8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_copper.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.ingot_copper" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_tin.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_tin.json new file mode 100644 index 00000000..22374aca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_tin.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.ingot_tin" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/item_basic_moon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/item_basic_moon.json new file mode 100644 index 00000000..c9679db2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/item_basic_moon.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/meteoric_iron_ingot" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/key.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/key.json new file mode 100644 index 00000000..66b3b202 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/key.json @@ -0,0 +1,104 @@ +{ + "textures": { + "key": "galacticraftcore:items/dungeon_key_t1" + }, + "elements": [ + { + "from": [ 0.0, 6.0, 7.5 ], + "to": [ 3.0, 9.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "west": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 2.0, 3.0, 3.0 ] } + } + }, + { + "from": [ 3.0, 6.5, 7.5 ], + "to": [ 4.0, 8.5, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "east": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "south": { "texture": "#key", "uv": [ 4.0, 6.0, 5.0, 8.0 ] }, + "west": { "texture": "#key", "uv": [ 9.0, 8.0, 8.0, 6.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] } + } + }, + { + "from": [ 4.0, 7.0, 7.5 ], + "to": [ 15.0, 8.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] }, + "down": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] } + } + }, + { + "from": [ 10.5, 6.0, 7.5 ], + "to": [ 14.5, 7.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] } + } + }, + { + "from": [ 11.5, 5.0, 7.5 ], + "to": [ 14.5, 6.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 1.0, 1.0, 1.0 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 0.75, 0.75, 0.75 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, -90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad.json new file mode 100644 index 00000000..948d0d74 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/landing_pad_model" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad_full.json new file mode 100644 index 00000000..836b3e32 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad_full.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/landing_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/lunar_sapphire.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/lunar_sapphire.json new file mode 100644 index 00000000..c2baa874 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/lunar_sapphire.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/lunar_sapphire" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/magnetic_table.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/magnetic_table.json new file mode 100644 index 00000000..456024e6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/magnetic_table.json @@ -0,0 +1,10 @@ +{ + "parent": "galacticraftcore:block/magnetic_table_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk.json new file mode 100644 index 00000000..26e6e88d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk.json @@ -0,0 +1,122 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/meteor_chunk", + "texture": "galacticraftcore:blocks/meteor_chunk" + }, + "elements": [ + { + "from": [ 5.5, 4, 5 ], + "to": [ 10, 10, 9.5 ], + "faces": { + "down": { "uv": [ 10.5, 9.5, 6, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5.5, 5, 10, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6, 10.5, 12 ], "texture": "#texture" }, + "south": { "uv": [ 5.5, 6, 10, 12 ], "texture": "#texture" }, + "west": { "uv": [ 5, 6, 9.5, 12 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 6, 11, 12 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 5, 9.5 ], + "to": [ 9, 9, 10 ], + "faces": { + "down": { "uv": [ 9.5, 10, 7, 9.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 9.5, 9, 10 ], "texture": "#texture" }, + "north": { "uv": [ 7, 7, 9.5, 11 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7, 9, 11 ], "texture": "#texture" }, + "west": { "uv": [ 9.5, 7, 10, 11 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 6.5, 11 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 10, 6 ], + "to": [ 9.5, 10.5, 8.5 ], + "faces": { + "down": { "uv": [ 9.5, 8.5, 6.5, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 6, 9.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 5.5, 9.5, 6 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 5.5, 9.5, 6 ], "texture": "#texture" }, + "west": { "uv": [ 6, 5.5, 8.5, 6 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 5.5, 10, 6 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 5.5, 5.5 ], + "to": [ 5.5, 9.5, 8.5 ], + "faces": { + "down": { "uv": [ 11, 8.5, 10.5, 5.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5.5, 5.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 6.5, 11, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 5, 6.5, 5.5, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 6.5, 8.5, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 6.5, 10.5, 10.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 4.5, 4.5 ], + "to": [ 9, 8.5, 5 ], + "faces": { + "down": { "uv": [ 9.5, 5, 7, 4.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 4.5, 9, 5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 7.5, 9.5, 11.5 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 4.5, 7.5, 5, 11.5 ], "texture": "#texture" }, + "east": { "uv": [ 11, 7.5, 11.5, 11.5 ], "texture": "#texture" } + } + }, + { + "from": [ 10, 5, 5.5 ], + "to": [ 10.5, 9, 8.5 ], + "faces": { + "down": { "uv": [ 6, 8.5, 5.5, 5.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 5.5, 10.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 5.5, 7, 6, 11 ], "texture": "#texture" }, + "south": { "uv": [ 10, 7, 10.5, 11 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 7, 8.5, 11 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 7, 10.5, 11 ], "texture": "#texture" } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 325, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.18, 1.18, 1.18 ] + }, + "head": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.00, 1.00, 1.00 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.00, 1.00, 1.00 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2, 0.5], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -45, 0 ], + "translation": [ 0, 2, 0.5], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk_hot.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk_hot.json new file mode 100644 index 00000000..aef75aaf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk_hot.json @@ -0,0 +1,122 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/meteor_chunk_hot", + "texture": "galacticraftcore:blocks/meteor_chunk_hot" + }, + "elements": [ + { + "from": [ 5.5, 4, 5 ], + "to": [ 10, 10, 9.5 ], + "faces": { + "down": { "uv": [ 10.5, 9.5, 6, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5.5, 5, 10, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6, 10.5, 12 ], "texture": "#texture" }, + "south": { "uv": [ 5.5, 6, 10, 12 ], "texture": "#texture" }, + "west": { "uv": [ 5, 6, 9.5, 12 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 6, 11, 12 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 5, 9.5 ], + "to": [ 9, 9, 10 ], + "faces": { + "down": { "uv": [ 9.5, 10, 7, 9.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 9.5, 9, 10 ], "texture": "#texture" }, + "north": { "uv": [ 7, 7, 9.5, 11 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7, 9, 11 ], "texture": "#texture" }, + "west": { "uv": [ 9.5, 7, 10, 11 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 6.5, 11 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 10, 6 ], + "to": [ 9.5, 10.5, 8.5 ], + "faces": { + "down": { "uv": [ 9.5, 8.5, 6.5, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 6, 9.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 5.5, 9.5, 6 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 5.5, 9.5, 6 ], "texture": "#texture" }, + "west": { "uv": [ 6, 5.5, 8.5, 6 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 5.5, 10, 6 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 5.5, 5.5 ], + "to": [ 5.5, 9.5, 8.5 ], + "faces": { + "down": { "uv": [ 11, 8.5, 10.5, 5.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5.5, 5.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 6.5, 11, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 5, 6.5, 5.5, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 6.5, 8.5, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 6.5, 10.5, 10.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 4.5, 4.5 ], + "to": [ 9, 8.5, 5 ], + "faces": { + "down": { "uv": [ 9.5, 5, 7, 4.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 4.5, 9, 5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 7.5, 9.5, 11.5 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 4.5, 7.5, 5, 11.5 ], "texture": "#texture" }, + "east": { "uv": [ 11, 7.5, 11.5, 11.5 ], "texture": "#texture" } + } + }, + { + "from": [ 10, 5, 5.5 ], + "to": [ 10.5, 9, 8.5 ], + "faces": { + "down": { "uv": [ 6, 8.5, 5.5, 5.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 5.5, 10.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 5.5, 7, 6, 11 ], "texture": "#texture" }, + "south": { "uv": [ 10, 7, 10.5, 11 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 7, 8.5, 11 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 7, 10.5, 11 ], "texture": "#texture" } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 325, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.18, 1.18, 1.18 ] + }, + "head": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.00, 1.00, 1.00 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.00, 1.00, 1.00 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2, 0.5], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -45, 0 ], + "translation": [ 0, 2, 0.5], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteoric_iron_raw.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteoric_iron_raw.json new file mode 100644 index 00000000..93cceb1f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteoric_iron_raw.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/meteoric_iron_raw" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dirt_moon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dirt_moon.json new file mode 100644 index 00000000..0b4075e8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dirt_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_dirt_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dungeon_brick.json new file mode 100644 index 00000000..39f0252e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dungeon_brick.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_dungeon_brick_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_brick.json new file mode 100644 index 00000000..9f96a060 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/moon_brick_stairs" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_stone.json new file mode 100644 index 00000000..461efd90 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_stone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/moon_stone_stairs" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_turf.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_turf.json new file mode 100644 index 00000000..b3a60bd8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_turf.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_turf_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/nose_cone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/nose_cone.json new file mode 100644 index 00000000..0ad9c46b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/nose_cone.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/nose_cone" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial.json new file mode 100644 index 00000000..ac52636f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_1.json new file mode 100644 index 00000000..fa2a8b5b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_2.json new file mode 100644 index 00000000..a7c5513e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_3.json new file mode 100644 index 00000000..191ad3fe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_4.json new file mode 100644 index 00000000..74d30b34 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_5.json new file mode 100644 index 00000000..bc49f1ef --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_6.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_6.json new file mode 100644 index 00000000..12f1d1d8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_aluminum_gc.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_aluminum_gc.json new file mode 100644 index 00000000..b6fd7a82 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_aluminum_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_aluminum_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_cheese_moon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_cheese_moon.json new file mode 100644 index 00000000..a6b65f50 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_cheese_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_cheese_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_gc.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_gc.json new file mode 100644 index 00000000..6987915b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_copper_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_moon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_moon.json new file mode 100644 index 00000000..4b6bf869 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_copper_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_sapphire_moon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_sapphire_moon.json new file mode 100644 index 00000000..80fb7c76 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_sapphire_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_sapphire_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_silicon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_silicon.json new file mode 100644 index 00000000..794434a5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_silicon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_silicon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_gc.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_gc.json new file mode 100644 index 00000000..c3a39bdf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_tin_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_moon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_moon.json new file mode 100644 index 00000000..9820a858 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_tin_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_compressor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_compressor.json new file mode 100644 index 00000000..eb9eb317 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_compressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/compressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_concentrator.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_concentrator.json new file mode 100644 index 00000000..84d45908 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_concentrator.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_concentrator" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_decompressor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_decompressor.json new file mode 100644 index 00000000..dde2b33c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_decompressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/decompressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_detector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_detector.json new file mode 100644 index 00000000..6bec1023 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_detector.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/detector_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_gear.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_gear.json new file mode 100644 index 00000000..2a1b73ca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_gear.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_gear" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_mask.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_mask.json new file mode 100644 index 00000000..64238b27 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_mask.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_mask" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_storage_module.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_storage_module.json new file mode 100644 index 00000000..498bfbe8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_storage_module.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/oxygen_storage_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_heavy_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_heavy_full.json new file mode 100644 index 00000000..37c4aa50 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_heavy_full.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_tank_heavy_full" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_light_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_light_full.json new file mode 100644 index 00000000..069b649d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_light_full.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_tank_light_full" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_med_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_med_full.json new file mode 100644 index 00000000..d44fb323 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_med_full.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_tank_med_full" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/painter.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/painter.json new file mode 100644 index 00000000..4533fb55 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/painter.json @@ -0,0 +1,19 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine_painter", + "east": "galacticraftcore:blocks/machine", + "south": "galacticraftcore:blocks/machine", + "west": "galacticraftcore:blocks/machine" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting.json new file mode 100644 index 00000000..41c3278c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_square", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_1.json new file mode 100644 index 00000000..78d50b76 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_1.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_spots", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_2.json new file mode 100644 index 00000000..05a785d5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_2.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_linear", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_3.json new file mode 100644 index 00000000..9b22fb7e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_3.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_sf", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_4.json new file mode 100644 index 00000000..321e8563 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_4.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_sfdiag", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachest.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachest.json new file mode 100644 index 00000000..f1e950b7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachest.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/parachest", + "display": { + "thirdperson": { + "rotation": [ 10, 45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute.json new file mode 100644 index 00000000..814683ec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_plain" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_black.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_black.json new file mode 100644 index 00000000..382929ae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_black.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_black" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_blue.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_blue.json new file mode 100644 index 00000000..0b172b14 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_blue.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_blue" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_brown.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_brown.json new file mode 100644 index 00000000..1133118a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_brown.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_brown" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkblue.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkblue.json new file mode 100644 index 00000000..7b63600b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkblue.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_darkblue" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgray.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgray.json new file mode 100644 index 00000000..e09ea61c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgray.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_darkgray" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgreen.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgreen.json new file mode 100644 index 00000000..574b1ebb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgreen.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_darkgreen" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_gray.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_gray.json new file mode 100644 index 00000000..da0dc5f6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_gray.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_gray" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_lime.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_lime.json new file mode 100644 index 00000000..5e78ac91 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_lime.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_lime" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_magenta.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_magenta.json new file mode 100644 index 00000000..83ba3e35 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_magenta.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_magenta" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_orange.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_orange.json new file mode 100644 index 00000000..42fde8e6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_orange.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_orange" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_pink.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_pink.json new file mode 100644 index 00000000..07a97553 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_pink.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_pink" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_purple.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_purple.json new file mode 100644 index 00000000..9f23a8de --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_purple.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_purple" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_red.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_red.json new file mode 100644 index 00000000..d24916dc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_red.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_red" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_teal.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_teal.json new file mode 100644 index 00000000..b527e8df --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_teal.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_teal" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_yellow.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_yellow.json new file mode 100644 index 00000000..d5ce068e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_yellow.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_yellow" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/platform.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/platform.json new file mode 100644 index 00000000..beb9c0c3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/platform.json @@ -0,0 +1,59 @@ +{ + "textures": { + "bottom": "galacticraftcore:blocks/platform_base", + "top": "galacticraftcore:blocks/platform_top", + "side": "galacticraftcore:blocks/platform_side" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 6.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "east": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "south": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "west": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "up": { "texture": "top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "bottom", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -225, 0 ], + "translation": [ 0, 2.5, 2.25 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, -2.0, 0 ], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/prelaunch_checklist.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/prelaunch_checklist.json new file mode 100644 index 00000000..20e41c21 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/prelaunch_checklist.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/prelaunch_checklist" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/raw_silicon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/raw_silicon.json new file mode 100644 index 00000000..1aa3b0de --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/raw_silicon.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.raw_silicon" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/refinery.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/refinery.json new file mode 100644 index 00000000..1c4060af --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/refinery.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/refinery_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_fins.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_fins.json new file mode 100644 index 00000000..0c8f95e7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_fins.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/rocket_fins" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_t1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_t1.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_t1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_workbench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_workbench.json new file mode 100644 index 00000000..aea68f98 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_workbench.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/rocket_workbench_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic.json new file mode 100644 index 00000000..8067181e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/schematic_buggy" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic_rocket_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic_rocket_t2.json new file mode 100644 index 00000000..0a45f2c3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic_rocket_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/schematic_rocket_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sealer.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sealer.json new file mode 100644 index 00000000..0876740a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sealer.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/sealer_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/seat.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/seat.json new file mode 100644 index 00000000..e6ed2fd2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/seat.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/buggymat.seat" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_glasses.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_glasses.json new file mode 100644 index 00000000..15f725c5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_glasses.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/sensor_glasses" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_lens.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_lens.json new file mode 100644 index 00000000..98f7a150 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_lens.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/sensor_lens" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_asteroid.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_asteroid.json new file mode 100644 index 00000000..691a5421 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_asteroid.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_asteroid" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_cobblestone.json new file mode 100644 index 00000000..e90acb8f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_mars_cobblestone" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_dungeon_brick.json new file mode 100644 index 00000000..fa158c42 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_dungeon_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_mars_dungeon_brick" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_dungeon_brick.json new file mode 100644 index 00000000..9cef9b47 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_dungeon_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_moon_dungeon_brick" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_stone.json new file mode 100644 index 00000000..8fc2c4a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_stone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_moon_stone" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_1.json new file mode 100644 index 00000000..322e6421 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_1.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_tin_1" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_2.json new file mode 100644 index 00000000..fe671a51 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_2.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_tin_2" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar.json new file mode 100644 index 00000000..7cdade58 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/basic_solar_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar_module_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar_module_1.json new file mode 100644 index 00000000..f96e9221 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar_module_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.solar_module_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_clear.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_clear.json new file mode 100644 index 00000000..21eb7477 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_clear.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_clear_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_strong.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_strong.json new file mode 100644 index 00000000..7a669f8d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_strong.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_clear.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_clear.json new file mode 100644 index 00000000..21eb7477 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_clear.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_clear_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_strong.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_strong.json new file mode 100644 index 00000000..7a669f8d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_strong.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_vanilla.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_vanilla.json new file mode 100644 index 00000000..de382d05 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_vanilla.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_vanilla_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_vanilla.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_vanilla.json new file mode 100644 index 00000000..de382d05 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_vanilla.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_vanilla_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_station_base.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_station_base.json new file mode 100644 index 00000000..93d1b585 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_station_base.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/space_station_base_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/spin_thruster.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/spin_thruster.json new file mode 100644 index 00000000..0985913e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/spin_thruster.json @@ -0,0 +1,30 @@ +{ + "parent":"galacticraftcore:block/spin_thruster_model", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 1.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 1.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -45, 0 ], + "translation": [ 0, 2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, -45, 0 ], + "translation": [ 0, 2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 2.25, -1.25, 0.0 ], + "scale": [ 0.75, 0.75, 0.75 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/standard_wrench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/standard_wrench.json new file mode 100644 index 00000000..de820d0a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/standard_wrench.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/standard_wrench" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_axe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_axe.json new file mode 100644 index 00000000..528ee405 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_axe" + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_boots.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_boots.json new file mode 100644 index 00000000..4b8d4367 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_boots.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_chestplate.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_chestplate.json new file mode 100644 index 00000000..221c5296 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_chestplate.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_chestplate" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_helmet.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_helmet.json new file mode 100644 index 00000000..977358cb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_helmet.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_helmet" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_hoe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_hoe.json new file mode 100644 index 00000000..02da61d1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_hoe" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_leggings.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_leggings.json new file mode 100644 index 00000000..c671f1b9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_leggings.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_leggings" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pickaxe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pickaxe.json new file mode 100644 index 00000000..5b716358 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_pickaxe" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pole.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pole.json new file mode 100644 index 00000000..3802fc08 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pole.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_pole" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_shovel.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_shovel.json new file mode 100644 index 00000000..50e76638 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_shovel" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_sword.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_sword.json new file mode 100644 index 00000000..fb163e82 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_sword" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/storage.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/storage.json new file mode 100644 index 00000000..21ba086a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/storage.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/buggymat.storage" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/telemetry.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/telemetry.json new file mode 100644 index 00000000..f72dee1b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/telemetry.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/telemetry_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tier1booster.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tier1booster.json new file mode 100644 index 00000000..47f326fe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tier1booster.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/engine.tier1booster" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_1.json new file mode 100644 index 00000000..86166d62 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_1.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/tin_1_stairs" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_2.json new file mode 100644 index 00000000..d67b08c8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_2.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/tin_2_stairs" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/treasure_chest.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/treasure_chest.json new file mode 100644 index 00000000..73f88973 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/treasure_chest.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/treasure_chest", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch.json new file mode 100644 index 00000000..8bc1a2c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "minecraft:blocks/torch_on" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_lit.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_lit.json new file mode 100644 index 00000000..8bc1a2c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_lit.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "minecraft:blocks/torch_on" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone.json new file mode 100644 index 00000000..3d1c2fb5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/unlit_torch_lit_stone" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone_lit.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone_lit.json new file mode 100644 index 00000000..3d1c2fb5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone_lit.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/unlit_torch_lit_stone" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/view_screen.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/view_screen.json new file mode 100644 index 00000000..565bf21e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/view_screen.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/screen", + "display": { + "thirdperson": { + "rotation": [ 10, 225, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_advanced.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_advanced.json new file mode 100644 index 00000000..b724d0b9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_advanced.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.wafer_advanced" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_basic.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_basic.json new file mode 100644 index 00000000..fc542db9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_basic.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.wafer_basic" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_solar.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_solar.json new file mode 100644 index 00000000..53791710 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_solar.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.wafer_solar" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_cobblestone.json new file mode 100644 index 00000000..db81d342 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/mars_cobblestone_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_dungeon_brick.json new file mode 100644 index 00000000..2c4ac755 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_dungeon_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/mars_dungeon_brick_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_dungeon_brick.json new file mode 100644 index 00000000..f4f9177f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_dungeon_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/moon_dungeon_brick_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_stone.json new file mode 100644 index 00000000..315c340a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_stone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/moon_stone_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_1.json new file mode 100644 index 00000000..74c291be --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_1.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/tin_1_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_2.json new file mode 100644 index 00000000..97d561b0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_2.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/tin_2_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/meteor_chunk.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/meteor_chunk.obj new file mode 100644 index 00000000..24022954 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/meteor_chunk.obj @@ -0,0 +1,61 @@ +# Blender v2.68 (sub 0) OBJ File: 'meteorChunk.blend' +# www.blender.org +mtllib meteorChunk.mtl +o Icosphere +v 0.000000 -0.990000 0.000000 +v 0.544018 -0.193648 0.382001 +v -0.145435 -0.261116 0.951837 +v -0.885481 -0.442743 0.000000 +v -0.273621 -0.442743 -0.842134 +v 0.544018 -0.193648 -0.278598 +v 0.165584 0.242140 0.951837 +v -0.466234 0.297542 0.669589 +v -0.838071 0.540223 -0.695412 +v 0.273621 0.442743 -0.842134 +v 0.651344 0.368305 0.051701 +v -0.121707 1.087480 -0.174949 +vt 0.507730 0.101310 +vt 0.253902 0.126184 +vt 0.214594 0.015903 +vt 0.352989 0.267471 +vt 0.545746 0.540363 +vt 0.785453 0.497317 +vt 0.783061 0.667876 +vt 0.544683 0.809762 +vt 0.528693 0.375416 +vt 0.177450 0.280898 +vt 0.091900 0.084303 +vt 0.544683 0.164821 +vt 0.829988 0.015903 +vt 0.830235 0.184999 +vt 0.785487 0.979608 +vt 0.312811 0.495768 +vt 0.952900 0.108412 +vt 0.595040 0.481311 +vt 0.343472 0.843271 +vt 0.091900 0.789165 +vt 0.338809 0.618836 +vt 0.091965 0.466147 +vt 0.865153 0.481327 +vt 0.092293 0.511757 +usemtl None +f 1/1 2/2 3/3 +f 2/2 1/1 6/4 +f 1/5 3/6 4/7 +f 1/5 4/7 5/8 +f 1/1 5/9 6/4 +f 2/2 6/4 11/10 +f 3/3 2/2 7/11 +f 4/12 3/13 8/14 +f 5/8 4/7 9/15 +f 6/4 5/9 10/16 +f 2/2 11/10 7/11 +f 3/13 7/17 8/14 +f 4/12 8/14 9/18 +f 5/19 9/20 10/21 +f 6/4 10/16 11/10 +f 7/11 11/10 12/22 +f 8/14 7/17 12/23 +f 9/18 8/14 12/23 +f 10/21 9/20 12/24 +f 11/10 10/16 12/22 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/oxygen_pipe.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/oxygen_pipe.obj new file mode 100644 index 00000000..d75f5c89 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/oxygen_pipe.obj @@ -0,0 +1,371 @@ +# Blender v2.73 (sub 0) OBJ File: 'aluminumWire.blend' +# www.blender.org +o Middle +v -0.080000 -0.080000 0.080000 +v -0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 0.080000 +v -0.080000 0.080000 0.080000 +v -0.080000 0.080000 -0.080000 +v 0.080000 0.080000 -0.080000 +v 0.080000 0.080000 0.080000 +v -0.080000 -0.080000 0.080000 +v -0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 0.080000 +v -0.080000 0.080000 0.080000 +v -0.080000 0.080000 -0.080000 +v 0.080000 0.080000 -0.080000 +v 0.080000 0.080000 0.080000 +vt 0.622884 0.377116 +vt 0.622884 0.622884 +vt 0.377116 0.622884 +vt 0.377116 0.377116 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +f 5/1/1 1/2/1 2/3/1 +f 14/1/2 15/2/2 11/3/2 +f 1/1/3 4/2/3 3/3/3 +f 7/1/4 3/2/4 4/3/4 +f 6/1/5 2/2/5 3/3/5 +f 8/1/6 5/2/6 6/3/6 +f 15/1/1 16/2/1 12/3/1 +f 16/1/3 15/2/3 14/3/3 +f 16/1/5 13/2/5 9/3/5 +f 9/1/6 10/2/6 11/3/6 +f 8/1/2 4/2/2 1/3/2 +f 13/1/4 14/2/4 10/3/4 +f 6/4/1 5/1/1 2/3/1 +f 10/4/2 14/1/2 11/3/2 +f 2/4/3 1/1/3 3/3/3 +f 8/4/4 7/1/4 4/3/4 +f 7/4/5 6/1/5 3/3/5 +f 7/4/6 8/1/6 6/3/6 +f 11/4/1 15/1/1 12/3/1 +f 13/4/3 16/1/3 14/3/3 +f 12/4/5 16/1/5 9/3/5 +f 12/4/6 9/1/6 11/3/6 +f 5/4/2 8/1/2 1/3/2 +f 9/4/4 13/1/4 10/3/4 +o Front +v 0.080000 0.079981 0.078600 +v -0.080000 0.079981 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 0.079981 0.078600 +v -0.080000 0.079981 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v -0.080000 0.079981 0.507728 +v 0.080000 0.079981 0.507728 +v -0.080000 -0.080019 0.507728 +v 0.080000 -0.080019 0.507728 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 0.000000 -0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 1.000000 -0.000000 -0.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 -0.000000 +vn -0.000000 -1.000000 0.000000 +f 19/5/7 17/6/7 18/7/7 +f 22/8/8 28/9/8 31/10/8 +f 21/11/9 30/12/9 32/13/9 +f 24/14/7 23/8/7 26/9/7 +f 23/5/10 24/6/10 22/7/10 +f 26/14/7 25/8/7 28/9/7 +f 29/8/11 30/9/11 21/10/11 +f 27/11/12 32/12/12 31/13/12 +f 23/14/7 25/8/7 26/9/7 +f 25/14/7 27/8/7 28/9/7 +f 29/15/7 31/5/7 32/6/7 +f 20/15/7 19/5/7 18/7/7 +f 29/14/8 22/8/8 31/10/8 +f 27/16/9 21/11/9 32/13/9 +f 21/15/10 23/5/10 22/7/10 +f 22/14/11 29/8/11 21/10/11 +f 28/16/12 27/11/12 31/13/12 +f 30/7/7 29/15/7 32/6/7 +o Back +v 0.080000 0.079981 -0.508323 +v -0.080000 0.079981 -0.508323 +v 0.080000 -0.080019 -0.508323 +v -0.080000 -0.080019 -0.508323 +v 0.080000 0.079981 -0.508323 +v -0.080000 0.079981 -0.508323 +v 0.080000 -0.080019 -0.508323 +v -0.080000 -0.080019 -0.508323 +v 0.080000 -0.080019 -0.508323 +v -0.080000 -0.080019 -0.508323 +v 0.080000 -0.080019 -0.508323 +v -0.080000 -0.080019 -0.508323 +v -0.080000 0.079981 -0.079195 +v 0.080000 0.079981 -0.079195 +v -0.080000 -0.080019 -0.079195 +v 0.080000 -0.080019 -0.079195 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 1.000000 -0.000000 -0.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 -0.000000 +vn -0.000000 -1.000000 0.000000 +f 35/17/13 33/18/13 34/19/13 +f 38/20/14 44/21/14 47/22/14 +f 37/23/15 46/24/15 48/25/15 +f 40/26/13 39/20/13 42/21/13 +f 37/27/16 39/17/16 40/18/16 +f 42/26/13 41/20/13 44/21/13 +f 45/20/17 46/21/17 37/22/17 +f 43/23/18 48/24/18 47/25/18 +f 39/26/13 41/20/13 42/21/13 +f 41/26/13 43/20/13 44/21/13 +f 45/27/13 47/17/13 48/18/13 +f 36/27/13 35/17/13 34/19/13 +f 45/26/14 38/20/14 47/22/14 +f 43/28/15 37/23/15 48/25/15 +f 38/19/16 37/27/16 40/18/16 +f 38/26/17 45/20/17 37/22/17 +f 44/28/18 43/23/18 47/25/18 +f 46/19/13 45/27/13 48/18/13 +o Left +v 0.508323 0.079981 0.080000 +v 0.508323 0.079981 -0.080000 +v 0.508323 -0.080019 0.080000 +v 0.508323 -0.080019 -0.080000 +v 0.508323 0.079981 0.080000 +v 0.508323 0.079981 -0.080000 +v 0.508323 -0.080019 0.080000 +v 0.508323 -0.080019 -0.080000 +v 0.508323 -0.080019 0.080000 +v 0.508323 -0.080019 -0.080000 +v 0.508323 -0.080019 0.080000 +v 0.508323 -0.080019 -0.080000 +v 0.079195 0.079981 -0.080000 +v 0.079195 0.079981 0.080000 +v 0.079195 -0.080019 -0.080000 +v 0.079195 -0.080019 0.080000 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn -1.000000 0.000000 0.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 1.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.000000 -1.000000 -0.000000 +f 51/29/19 49/30/19 50/31/19 +f 54/32/20 60/33/20 63/34/20 +f 53/35/21 62/36/21 64/37/21 +f 56/38/21 55/32/21 58/33/21 +f 55/29/22 56/30/22 54/31/22 +f 58/38/21 57/32/21 60/33/21 +f 61/32/23 62/33/23 53/34/23 +f 59/35/24 64/36/24 63/37/24 +f 55/38/21 57/32/21 58/33/21 +f 57/38/21 59/32/21 60/33/21 +f 63/29/19 64/30/19 62/31/19 +f 52/39/19 51/29/19 50/31/19 +f 61/38/20 54/32/20 63/34/20 +f 59/40/21 53/35/21 64/37/21 +f 53/39/22 55/29/22 54/31/22 +f 54/38/23 61/32/23 53/34/23 +f 60/40/24 59/35/24 63/37/24 +f 61/39/19 63/29/19 62/31/19 +o Right +v -0.508323 0.079981 -0.080000 +v -0.508323 0.079981 0.080000 +v -0.508323 -0.080019 -0.080000 +v -0.508323 -0.080019 0.080000 +v -0.508323 0.079981 -0.080000 +v -0.508323 0.079981 0.080000 +v -0.508323 -0.080019 -0.080000 +v -0.508323 -0.080019 0.080000 +v -0.508323 -0.080019 -0.080000 +v -0.508323 -0.080019 0.080000 +v -0.508323 -0.080019 -0.080000 +v -0.508323 -0.080019 0.080000 +v -0.079195 0.079981 0.080000 +v -0.079195 0.079981 -0.080000 +v -0.079195 -0.080019 0.080000 +v -0.079195 -0.080019 -0.080000 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -1.000000 -0.000000 0.000000 +vn -0.000000 1.000000 -0.000000 +vn 0.000000 -1.000000 0.000000 +f 67/41/25 65/42/25 66/43/25 +f 70/44/26 76/45/26 79/46/26 +f 69/47/27 78/48/27 80/49/27 +f 72/50/26 71/44/26 74/45/26 +f 69/51/28 71/41/28 72/42/28 +f 74/50/26 73/44/26 76/45/26 +f 77/44/29 78/45/29 69/46/29 +f 75/47/30 80/48/30 79/49/30 +f 71/50/26 73/44/26 74/45/26 +f 73/50/26 75/44/26 76/45/26 +f 77/51/25 79/41/25 80/42/25 +f 68/51/25 67/41/25 66/43/25 +f 77/50/26 70/44/26 79/46/26 +f 75/52/27 69/47/27 80/49/27 +f 70/43/28 69/51/28 72/42/28 +f 70/50/29 77/44/29 69/46/29 +f 76/52/30 75/47/30 79/49/30 +f 78/43/25 77/51/25 80/42/25 +o Top +v 0.080000 0.508323 0.079981 +v -0.080000 0.508323 0.079981 +v 0.080000 0.508323 -0.080019 +v -0.080000 0.508323 -0.080019 +v 0.080000 0.508323 0.079981 +v -0.080000 0.508323 0.079981 +v 0.080000 0.508323 -0.080019 +v -0.080000 0.508323 -0.080019 +v 0.080000 0.508323 -0.080019 +v -0.080000 0.508323 -0.080019 +v 0.080000 0.508323 -0.080019 +v -0.080000 0.508323 -0.080019 +v -0.080000 0.079195 0.079981 +v 0.080000 0.079195 0.079981 +v -0.080000 0.079195 -0.080019 +v 0.080000 0.079195 -0.080019 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 0.000000 -1.000000 -0.000000 +vn -1.000000 -0.000000 0.000000 +vn 1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 -0.000000 +vn -0.000000 -0.000000 -1.000000 +f 83/53/31 81/54/31 82/55/31 +f 86/56/32 92/57/32 95/58/32 +f 85/59/33 94/60/33 96/61/33 +f 88/62/34 87/56/34 90/57/34 +f 85/63/35 87/53/35 88/54/35 +f 90/62/34 89/56/34 92/57/34 +f 93/56/34 94/57/34 85/58/34 +f 91/59/36 96/60/36 95/61/36 +f 87/62/34 89/56/34 90/57/34 +f 89/62/34 91/56/34 92/57/34 +f 93/63/31 95/53/31 96/54/31 +f 84/63/31 83/53/31 82/55/31 +f 93/62/32 86/56/32 95/58/32 +f 91/64/33 85/59/33 96/61/33 +f 86/55/35 85/63/35 88/54/35 +f 86/62/34 93/56/34 85/58/34 +f 92/64/36 91/59/36 95/61/36 +f 94/55/31 93/63/31 96/54/31 +o Bottom +v 0.080000 -0.508323 -0.079981 +v -0.080000 -0.508323 -0.079981 +v 0.080000 -0.508323 0.080019 +v -0.080000 -0.508323 0.080019 +v 0.080000 -0.508323 -0.079981 +v -0.080000 -0.508323 -0.079981 +v 0.080000 -0.508323 0.080019 +v -0.080000 -0.508323 0.080019 +v 0.080000 -0.508323 0.080019 +v -0.080000 -0.508323 0.080019 +v 0.080000 -0.508323 0.080019 +v -0.080000 -0.508323 0.080019 +v -0.080000 -0.079195 -0.079981 +v 0.080000 -0.079195 -0.079981 +v -0.080000 -0.079195 0.080019 +v 0.080000 -0.079195 0.080019 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 0.000000 1.000000 0.000000 +vn -1.000000 0.000000 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.000000 -1.000000 +f 99/65/37 97/66/37 98/67/37 +f 102/68/38 108/69/38 111/70/38 +f 101/71/39 110/72/39 112/73/39 +f 104/74/40 103/68/40 106/69/40 +f 101/75/41 103/65/41 104/66/41 +f 106/74/40 105/68/40 108/69/40 +f 109/68/42 110/69/42 101/70/42 +f 107/71/40 112/72/40 111/73/40 +f 103/74/40 105/68/40 106/69/40 +f 105/74/40 107/68/40 108/69/40 +f 109/75/37 111/65/37 112/66/37 +f 100/75/37 99/65/37 98/67/37 +f 109/74/38 102/68/38 111/70/38 +f 107/76/39 101/71/39 112/73/39 +f 102/67/41 101/75/41 104/66/41 +f 102/74/42 109/68/42 101/70/42 +f 108/76/40 107/71/40 111/73/40 +f 110/67/37 109/75/37 112/66/37 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/receiver.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/receiver.obj new file mode 100644 index 00000000..6815e875 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/receiver.obj @@ -0,0 +1,937 @@ +# Blender v2.69 (sub 0) OBJ File: 'receiver.blend' +# www.blender.org +o Receiver +v 0.467651 0.862413 -0.046456 +v 0.467651 0.836098 -0.085839 +v 0.467651 0.796715 -0.112154 +v 0.467651 0.750259 -0.121394 +v 0.467651 0.703804 -0.112154 +v 0.467651 0.664421 -0.085839 +v 0.467651 0.638106 -0.046456 +v 0.467651 0.871654 0.000000 +v 0.500500 0.862413 -0.032849 +v 0.528348 0.836098 -0.060697 +v 0.546956 0.796715 -0.079305 +v 0.553490 0.750259 -0.085839 +v 0.546956 0.703804 -0.079305 +v 0.528348 0.664421 -0.060697 +v 0.500500 0.638106 -0.032849 +v 0.514107 0.862413 0.000000 +v 0.553490 0.836098 0.000000 +v 0.579805 0.796715 0.000000 +v 0.589046 0.750259 0.000000 +v 0.579805 0.703804 0.000000 +v 0.553490 0.664421 0.000000 +v 0.514107 0.638106 0.000000 +v 0.500500 0.862413 0.032849 +v 0.528348 0.836098 0.060697 +v 0.546956 0.796715 0.079305 +v 0.553490 0.750259 0.085839 +v 0.546956 0.703804 0.079305 +v 0.528348 0.664421 0.060697 +v 0.500500 0.638106 0.032849 +v 0.467651 0.862413 0.046456 +v 0.467651 0.836098 0.085839 +v 0.467651 0.796715 0.112154 +v 0.467651 0.750259 0.121394 +v 0.467651 0.703804 0.112154 +v 0.467651 0.664421 0.085839 +v 0.467651 0.638106 0.046456 +v 0.467651 0.628865 0.000000 +v 0.537055 0.862413 -0.046456 +v 0.537055 0.836098 -0.085839 +v 0.537055 0.796715 -0.112154 +v 0.537055 0.750259 -0.121394 +v 0.537055 0.703804 -0.112154 +v 0.537055 0.664421 -0.085839 +v 0.537055 0.638106 -0.046456 +v 0.537054 0.871654 0.000000 +v 0.569904 0.862413 -0.032849 +v 0.597752 0.836098 -0.060697 +v 0.616359 0.796715 -0.079305 +v 0.622893 0.750259 -0.085839 +v 0.616359 0.703804 -0.079305 +v 0.597752 0.664421 -0.060697 +v 0.569904 0.638106 -0.032849 +v 0.583510 0.862413 0.000000 +v 0.622893 0.836098 0.000000 +v 0.649208 0.796715 0.000000 +v 0.658449 0.750259 0.000000 +v 0.649208 0.703804 0.000000 +v 0.622893 0.664421 0.000000 +v 0.583510 0.638106 0.000000 +v 0.569904 0.862413 0.032849 +v 0.597752 0.836098 0.060697 +v 0.616359 0.796715 0.079305 +v 0.622893 0.750259 0.085839 +v 0.616359 0.703804 0.079305 +v 0.597752 0.664421 0.060697 +v 0.569904 0.638106 0.032849 +v 0.537054 0.862413 0.046456 +v 0.537054 0.836098 0.085839 +v 0.537054 0.796715 0.112154 +v 0.537054 0.750259 0.121394 +v 0.537054 0.703804 0.112154 +v 0.537054 0.664421 0.085839 +v 0.537054 0.638106 0.046456 +v 0.537055 0.628865 0.000000 +vt 0.835682 0.527008 +vt 0.772800 0.552824 +vt 0.835682 0.445599 +vt 0.719491 0.493300 +vt 0.835682 0.385664 +vt 0.990770 0.979079 +vt 0.853651 0.966694 +vt 0.984098 0.895354 +vt 0.835682 0.881950 +vt 0.984098 0.804684 +vt 0.846979 0.792300 +vt 0.990770 0.720871 +vt 1.000000 0.711392 +vt 0.883810 0.663690 +vt 0.937118 0.617540 +vt 0.746753 0.615149 +vt 0.349218 0.675540 +vt 0.339700 0.550137 +vt 0.416074 0.689798 +vt 0.403637 0.525951 +vt 0.500772 0.690158 +vt 0.487311 0.512811 +vt 0.590418 0.676564 +vt 0.577981 0.512717 +vt 0.671363 0.651088 +vt 0.835682 0.548528 +vt 0.772800 0.677475 +vt 0.671363 0.608463 +vt 0.000000 0.909167 +vt 0.017459 0.838487 +vt 0.077707 0.955635 +vt 0.416074 0.408482 +vt 0.500772 0.385664 +vt 0.590418 0.395249 +vt 0.661845 0.525684 +vt 0.883809 0.433365 +vt 0.911072 0.555214 +vt 0.835682 0.703291 +vt 0.719491 0.723625 +vt 0.017459 0.715028 +vt 0.100518 0.863287 +vt 0.100518 0.701980 +vt 0.190924 0.869659 +vt 0.190924 0.695062 +vt 0.274913 0.856632 +vt 0.274914 0.695326 +vt 0.339700 0.826191 +vt 1.000000 0.385664 +vt 0.937118 0.492889 +vt 0.835682 0.617497 +vt 1.000000 0.643356 +vt 1.000000 0.557562 +vt 1.000000 0.467073 +vt 0.504018 0.244320 +vt 0.504018 0.325729 +vt 0.441136 0.218504 +vt 0.504018 0.385664 +vt 0.387828 0.278027 +vt 0.904534 0.155113 +vt 0.820811 0.148419 +vt 0.892185 0.017991 +vt 0.730141 0.148396 +vt 0.807445 0.000000 +vt 0.646326 0.155047 +vt 0.717792 0.011275 +vt 0.339700 0.823014 +vt 0.407736 0.823014 +vt 0.433552 0.885896 +vt 0.415090 0.156178 +vt 0.009519 0.405186 +vt 0.076374 0.390928 +vt 0.000000 0.530589 +vt 0.161072 0.390568 +vt 0.063938 0.554775 +vt 0.250718 0.404161 +vt 0.147611 0.567914 +vt 0.331663 0.429638 +vt 0.238281 0.568008 +vt 0.387402 0.939205 +vt 0.502564 0.987332 +vt 0.339700 0.162864 +vt 0.441136 0.093853 +vt 0.000000 0.046468 +vt 0.077707 0.000000 +vt 0.017459 0.117148 +vt 0.076374 0.672243 +vt 0.161072 0.695062 +vt 0.322145 0.555041 +vt 0.250718 0.685477 +vt 0.495878 0.911942 +vt 0.617727 0.939205 +vt 0.387827 0.047702 +vt 0.504018 0.068037 +vt 0.100518 0.092348 +vt 0.017459 0.240607 +vt 0.190924 0.085976 +vt 0.100518 0.253655 +vt 0.274914 0.099003 +vt 0.190924 0.260573 +vt 0.339700 0.129444 +vt 0.274914 0.260309 +vt 0.558203 0.885896 +vt 0.665429 0.823014 +vt 0.504018 0.153830 +vt 0.493530 0.823014 +vt 0.584019 0.823014 +vt 0.730141 0.278773 +vt 0.646326 0.285424 +vt 0.493530 0.690158 +vt 0.584019 0.690158 +vt 0.636874 0.068036 +vt 0.636874 0.153830 +vt 0.090537 0.383649 +vt 0.007477 0.370602 +vt 0.636874 0.244320 +vt 0.968563 0.297834 +vt 0.904534 0.285490 +vt 0.968563 0.167457 +vt 0.264932 0.390304 +vt 0.180943 0.390568 +vt 0.820811 0.278797 +vt 0.665429 0.690158 +vt 0.339700 0.690158 +vt 0.407736 0.690158 +vt 0.636874 0.000000 +vt 0.504018 0.000000 +vt 0.636874 0.325729 +vt 0.329718 0.382898 +vt 0.339700 0.252903 +vt 0.683871 0.447989 +vt 0.885824 0.711392 +vt 0.671363 0.435778 +vt 0.835682 0.771327 +vt 0.339700 0.702732 +vt 0.352208 0.323338 +vt 0.636874 0.050099 +vt 0.331663 0.644948 +f 7/1 15/2 6/3 +f 6/3 14/4 5/5 +f 5/6 13/7 4/8 +f 4/8 12/9 3/10 +f 3/10 11/11 2/12 +f 2/13 10/14 9/15 +f 15/2 22/16 14/4 +f 14/17 21/18 13/19 +f 13/19 20/20 12/21 +f 12/21 19/22 11/23 +f 11/23 18/24 10/25 +f 10/14 17/26 9/15 +f 22/16 29/27 21/28 +f 21/29 28/30 20/31 +f 20/20 27/32 19/22 +f 19/22 26/33 18/24 +f 18/24 25/34 17/35 +f 17/26 24/36 16/37 +f 29/27 36/38 28/39 +f 28/30 35/40 27/41 +f 27/41 34/42 26/43 +f 26/43 33/44 25/45 +f 25/45 32/46 24/47 +f 24/36 31/48 23/49 +f 37/50 15/2 7/1 +f 1/51 9/15 8/52 +f 37/50 22/16 15/2 +f 9/15 16/37 8/52 +f 37/50 29/27 22/16 +f 16/37 23/49 8/52 +f 37/50 36/38 29/27 +f 23/49 30/53 8/52 +f 44/54 43/55 52/56 +f 43/55 42/57 51/58 +f 42/59 41/60 50/61 +f 41/60 40/62 49/63 +f 40/62 39/64 48/65 +f 39/66 38/67 46/68 +f 52/56 51/58 59/69 +f 51/70 50/71 58/72 +f 50/71 49/73 57/74 +f 49/73 48/75 56/76 +f 48/75 47/77 55/78 +f 47/79 46/68 54/80 +f 59/69 58/81 66/82 +f 58/83 57/84 65/85 +f 57/74 56/76 64/86 +f 56/76 55/78 63/87 +f 55/78 54/88 62/89 +f 54/80 53/90 61/91 +f 66/82 65/92 73/93 +f 65/85 64/94 72/95 +f 64/94 63/96 71/97 +f 63/96 62/98 70/99 +f 62/98 61/100 69/101 +f 61/91 60/102 68/103 +f 74/104 44/54 52/56 +f 38/67 45/105 46/68 +f 74/104 52/56 59/69 +f 46/68 45/105 53/90 +f 74/104 59/69 66/82 +f 53/90 45/105 60/102 +f 74/104 66/82 73/93 +f 60/102 45/105 67/106 +f 3/107 2/108 40/62 +f 8/109 30/110 45/105 +f 36/111 37/112 74/104 +f 34/113 35/114 71/97 +f 37/112 7/115 74/104 +f 6/116 5/117 43/118 +f 32/119 33/120 69/101 +f 4/121 3/107 41/60 +f 30/110 31/122 67/106 +f 2/123 1/124 39/66 +f 35/125 36/111 72/126 +f 7/115 6/127 44/54 +f 33/120 34/113 70/99 +f 1/124 8/109 38/67 +f 5/117 4/121 42/59 +f 31/128 32/119 68/129 +f 15/2 14/4 6/3 +f 14/4 13/130 5/5 +f 13/7 12/9 4/8 +f 12/9 11/11 3/10 +f 11/11 10/131 2/12 +f 1/51 2/13 9/15 +f 22/16 21/28 14/4 +f 21/18 20/20 13/19 +f 20/20 19/22 12/21 +f 19/22 18/24 11/23 +f 18/24 17/35 10/25 +f 17/26 16/37 9/15 +f 29/27 28/39 21/28 +f 28/30 27/41 20/31 +f 27/32 26/33 19/22 +f 26/33 25/34 18/24 +f 25/34 24/132 17/35 +f 24/36 23/49 16/37 +f 36/38 35/133 28/39 +f 35/40 34/42 27/41 +f 34/42 33/44 26/43 +f 33/44 32/46 25/45 +f 32/46 31/134 24/47 +f 31/48 30/53 23/49 +f 43/55 51/58 52/56 +f 42/57 50/135 51/58 +f 41/60 49/63 50/61 +f 40/62 48/65 49/63 +f 39/64 47/136 48/65 +f 47/79 39/66 46/68 +f 51/58 58/81 59/69 +f 50/71 57/74 58/72 +f 49/73 56/76 57/74 +f 48/75 55/78 56/76 +f 47/77 54/88 55/78 +f 46/68 53/90 54/80 +f 58/81 65/92 66/82 +f 57/84 64/94 65/85 +f 56/76 63/87 64/86 +f 55/78 62/89 63/87 +f 54/88 61/137 62/89 +f 53/90 60/102 61/91 +f 65/92 72/126 73/93 +f 64/94 71/97 72/95 +f 63/96 70/99 71/97 +f 62/98 69/101 70/99 +f 61/100 68/129 69/101 +f 60/102 67/106 68/103 +f 2/108 39/64 40/62 +f 30/110 67/106 45/105 +f 73/93 36/111 74/104 +f 35/114 72/95 71/97 +f 7/115 44/54 74/104 +f 5/117 42/59 43/118 +f 33/120 70/99 69/101 +f 3/107 40/62 41/60 +f 31/122 68/103 67/106 +f 1/124 38/67 39/66 +f 36/111 73/93 72/126 +f 6/127 43/55 44/54 +f 34/113 71/97 70/99 +f 8/109 45/105 38/67 +f 4/121 41/60 42/59 +f 32/119 69/101 68/129 +o Ring +v 0.347722 0.343926 0.000000 +v 0.400050 0.362972 0.000000 +v 0.427894 0.411199 0.000000 +v 0.418224 0.466040 0.000000 +v 0.375565 0.501834 0.000000 +v 0.319878 0.501834 0.000000 +v 0.277220 0.466040 0.000000 +v 0.267550 0.411199 0.000000 +v 0.295393 0.362972 0.000000 +v 0.347722 0.439157 -0.261643 +v 0.400050 0.453747 -0.249400 +v 0.427894 0.490690 -0.218401 +v 0.418224 0.532701 -0.183150 +v 0.375565 0.560121 -0.160141 +v 0.319878 0.560121 -0.160141 +v 0.277220 0.532701 -0.183150 +v 0.267550 0.490690 -0.218401 +v 0.295393 0.453747 -0.249400 +v 0.347722 0.680288 -0.400860 +v 0.400050 0.683595 -0.382103 +v 0.427894 0.691970 -0.334610 +v 0.418224 0.701493 -0.280602 +v 0.375565 0.707708 -0.245351 +v 0.319878 0.707708 -0.245351 +v 0.277220 0.701493 -0.280602 +v 0.267550 0.691970 -0.334610 +v 0.295393 0.683595 -0.382103 +v 0.347722 0.954492 -0.352510 +v 0.400050 0.944969 -0.336016 +v 0.427894 0.920856 -0.294251 +v 0.418224 0.893436 -0.246757 +v 0.375565 0.875538 -0.215758 +v 0.319878 0.875538 -0.215758 +v 0.277220 0.893436 -0.246757 +v 0.267550 0.920856 -0.294251 +v 0.295393 0.944969 -0.336016 +v 0.347722 1.133466 -0.139217 +v 0.400050 1.115569 -0.132703 +v 0.427894 1.070251 -0.116209 +v 0.418224 1.018717 -0.097452 +v 0.375565 0.985081 -0.085210 +v 0.319878 0.985081 -0.085210 +v 0.277220 1.018717 -0.097452 +v 0.267550 1.070251 -0.116209 +v 0.295393 1.115569 -0.132703 +v 0.347722 1.133466 0.139217 +v 0.400050 1.115569 0.132703 +v 0.427894 1.070251 0.116209 +v 0.418224 1.018718 0.097452 +v 0.375565 0.985081 0.085209 +v 0.319878 0.985081 0.085209 +v 0.277220 1.018718 0.097452 +v 0.267550 1.070251 0.116209 +v 0.295393 1.115569 0.132703 +v 0.347722 0.954492 0.352510 +v 0.400050 0.944969 0.336016 +v 0.427894 0.920856 0.294251 +v 0.418224 0.893436 0.246757 +v 0.375565 0.875538 0.215758 +v 0.319878 0.875538 0.215758 +v 0.277220 0.893436 0.246757 +v 0.267550 0.920856 0.294251 +v 0.295393 0.944969 0.336016 +v 0.347722 0.680288 0.400860 +v 0.400050 0.683595 0.382103 +v 0.427894 0.691970 0.334610 +v 0.418224 0.701493 0.280602 +v 0.375565 0.707708 0.245351 +v 0.319878 0.707708 0.245351 +v 0.277220 0.701493 0.280602 +v 0.267550 0.691970 0.334610 +v 0.295393 0.683595 0.382103 +v 0.347722 0.439157 0.261643 +v 0.400050 0.453747 0.249400 +v 0.427894 0.490690 0.218401 +v 0.418224 0.532701 0.183150 +v 0.375565 0.560121 0.160141 +v 0.319878 0.560121 0.160141 +v 0.277220 0.532701 0.183150 +v 0.267550 0.490690 0.218401 +v 0.295393 0.453747 0.249400 +vt 0.479666 0.359820 +vt 0.366238 0.507036 +vt 0.454018 0.355324 +vt 0.345898 0.495652 +vt 0.417686 0.343939 +vt 0.323004 0.466825 +vt 0.387669 0.330993 +vt 0.393699 0.721135 +vt 0.409403 0.594724 +vt 0.429807 0.721135 +vt 0.443538 0.610604 +vt 0.465934 0.721135 +vt 0.834581 0.115064 +vt 0.726946 0.070383 +vt 0.857125 0.089151 +vt 0.734026 0.038051 +vt 0.881674 0.060936 +vt 0.551875 0.737851 +vt 0.588259 0.888593 +vt 0.515417 0.737851 +vt 0.479666 0.737851 +vt 0.523254 0.918439 +vt 0.071896 0.527462 +vt 0.029732 0.674678 +vt 0.040191 0.538846 +vt 0.180247 0.527462 +vt 0.177943 0.494681 +vt 0.308269 0.434045 +vt 0.449168 0.527462 +vt 1.000000 0.490001 +vt 0.986269 0.600532 +vt 0.963873 0.490001 +vt 0.950141 0.600532 +vt 0.929738 0.474120 +vt 0.613065 0.074607 +vt 0.734881 0.000000 +vt 0.680386 0.968801 +vt 0.556965 0.909989 +vt 0.108088 0.538846 +vt 0.067897 0.679174 +vt 0.029732 0.866856 +vt 0.000000 0.679174 +vt 0.034577 0.435869 +vt 0.050379 0.414473 +vt 0.186622 0.457405 +vt 0.079647 0.390142 +vt 0.202223 0.433074 +vt 1.000000 0.711063 +vt 0.963873 0.711063 +vt 0.914033 0.600532 +vt 0.550842 0.181715 +vt 0.590639 0.043592 +vt 0.516440 0.171315 +vt 0.564396 0.023814 +vt 0.067897 0.862360 +vt 0.743907 0.960008 +vt 0.709830 0.810712 +vt 0.780666 0.950613 +vt 0.748183 0.808303 +vt 0.805946 0.923123 +vt 0.000000 0.263731 +vt 0.037400 0.263731 +vt 0.108687 0.374262 +vt 0.224429 0.548858 +vt 0.174290 0.638963 +vt 0.195660 0.548858 +vt 0.145521 0.638963 +vt 0.165431 0.527462 +vt 0.576472 0.309257 +vt 0.547003 0.323405 +vt 0.479666 0.169665 +vt 0.108088 1.002688 +vt 0.720304 0.618820 +vt 0.758167 0.625390 +vt 0.777500 0.798502 +vt 0.050379 0.112989 +vt 0.079647 0.137319 +vt 0.071747 0.263731 +vt 0.174290 0.756588 +vt 0.145521 0.756588 +vt 0.108088 0.630513 +vt 0.677962 0.397556 +vt 0.668026 0.428699 +vt 0.514566 0.343343 +vt 0.680387 0.804602 +vt 0.690370 0.621689 +vt 0.770428 0.474120 +vt 0.034577 0.091593 +vt 0.180247 0.000000 +vt 0.177943 0.032780 +vt 0.186622 0.070057 +vt 0.108687 0.153200 +vt 0.224429 0.846693 +vt 0.195660 0.846693 +vt 0.108088 0.765038 +vt 0.807823 0.405295 +vt 0.822883 0.437927 +vt 0.652767 0.463582 +vt 0.914033 0.485505 +vt 0.873843 0.625833 +vt 0.877841 0.474120 +vt 0.835678 0.621337 +vt 0.835678 0.813515 +vt 0.805946 0.625833 +vt 0.345898 0.031810 +vt 0.323004 0.060637 +vt 0.308269 0.093417 +vt 0.202223 0.094388 +vt 0.310395 0.543342 +vt 0.296664 0.653873 +vt 0.274268 0.543342 +vt 0.260537 0.653873 +vt 0.240133 0.527462 +vt 0.905293 0.328853 +vt 0.939112 0.346773 +vt 0.829604 0.474120 +vt 0.873843 0.809018 +vt 0.366238 0.020425 +vt 0.479666 0.167642 +vt 0.454018 0.172138 +vt 0.417686 0.183523 +vt 0.449168 0.914809 +vt 0.409403 0.847547 +vt 0.478307 0.890479 +vt 0.310395 0.764404 +vt 0.274268 0.764404 +vt 0.224429 0.653873 +vt 0.924764 0.203998 +vt 0.680386 0.506901 +vt 0.588259 0.587109 +vt 0.662169 0.474120 +vt 0.914033 0.949347 +vt 0.387669 0.196469 +vt 0.443538 0.831666 +vt 0.479666 0.831666 +vt 0.893722 0.215483 +vt 0.962331 0.197887 +vt 0.556965 0.565713 +vt 0.523253 0.557263 +vt 0.479666 0.610604 +vt 0.478307 0.551792 +vt 0.662169 1.001582 +vt 0.000000 0.862360 +vt 0.929738 0.726943 +vt 0.071896 1.014073 +vt 0.786243 0.638324 +vt 0.805946 0.487460 +vt 0.165431 0.868089 +vt 0.805946 0.809018 +vt 0.308588 0.114813 +vt 0.962331 0.370027 +vt 0.240133 0.780285 +vt 0.877841 0.960731 +f 75/138 84/139 76/140 +f 76/140 85/141 77/142 +f 77/142 86/143 78/144 +f 78/145 87/146 79/147 +f 79/147 88/148 80/149 +f 80/150 89/151 81/152 +f 81/152 90/153 82/154 +f 82/155 91/156 83/157 +f 75/158 83/157 84/159 +f 84/160 93/161 85/162 +f 85/141 94/163 86/143 +f 86/143 95/164 87/165 +f 87/146 96/166 88/148 +f 88/167 97/168 89/169 +f 89/169 98/170 90/171 +f 90/153 99/172 91/173 +f 91/156 100/174 92/175 +f 92/176 101/177 84/160 +f 93/161 102/178 94/179 +f 94/163 103/180 95/164 +f 95/164 104/181 96/182 +f 96/182 105/183 97/184 +f 97/168 106/185 98/170 +f 98/170 107/186 99/187 +f 99/172 108/188 100/189 +f 100/189 109/190 101/191 +f 101/177 110/192 93/161 +f 102/193 111/194 103/195 +f 103/195 112/196 104/197 +f 104/181 113/198 105/183 +f 105/183 114/199 106/200 +f 106/201 115/202 107/203 +f 107/203 116/204 108/205 +f 108/188 117/206 109/190 +f 109/190 118/207 110/208 +f 110/192 119/209 102/178 +f 111/194 120/210 112/196 +f 112/196 121/211 113/212 +f 113/198 122/213 114/199 +f 114/199 123/214 115/215 +f 115/202 124/216 116/204 +f 116/204 125/217 117/218 +f 117/206 126/219 118/207 +f 118/207 127/220 119/221 +f 119/222 128/223 111/194 +f 120/210 129/224 121/211 +f 121/225 130/226 122/213 +f 122/213 131/227 123/214 +f 123/214 132/228 124/229 +f 124/216 133/230 125/217 +f 125/217 134/231 126/232 +f 126/219 135/233 127/220 +f 127/220 136/234 128/235 +f 128/236 137/237 120/238 +f 129/239 138/240 130/241 +f 130/226 139/242 131/227 +f 131/227 140/243 132/228 +f 132/228 141/244 133/245 +f 133/246 142/247 134/248 +f 134/248 143/249 135/250 +f 135/233 144/251 136/234 +f 136/234 145/252 137/253 +f 137/237 146/254 129/239 +f 138/255 147/256 139/242 +f 139/242 148/257 140/243 +f 140/243 149/258 141/244 +f 141/259 150/260 142/261 +f 142/247 151/262 143/249 +f 143/249 152/263 144/264 +f 144/251 153/265 145/252 +f 145/266 154/267 146/268 +f 146/254 155/269 138/240 +f 147/256 75/138 148/257 +f 148/257 76/140 149/258 +f 149/258 77/142 150/270 +f 150/260 78/145 151/271 +f 151/271 79/147 152/272 +f 152/273 80/150 153/265 +f 153/265 81/152 154/274 +f 154/267 82/155 155/275 +f 155/275 83/157 147/276 +f 84/139 85/141 76/140 +f 85/141 86/143 77/142 +f 86/143 87/165 78/144 +f 87/146 88/148 79/147 +f 88/148 89/277 80/149 +f 89/151 90/153 81/152 +f 90/153 91/173 82/154 +f 91/156 92/175 83/157 +f 83/157 92/175 84/159 +f 93/161 94/179 85/162 +f 94/163 95/164 86/143 +f 95/164 96/182 87/165 +f 96/166 97/278 88/148 +f 97/168 98/170 89/169 +f 98/170 99/187 90/171 +f 99/172 100/189 91/173 +f 100/174 101/279 92/175 +f 101/177 93/161 84/160 +f 102/178 103/280 94/179 +f 103/180 104/181 95/164 +f 104/181 105/183 96/182 +f 105/183 106/200 97/184 +f 106/185 107/186 98/170 +f 107/186 108/281 99/187 +f 108/188 109/190 100/189 +f 109/190 110/208 101/191 +f 110/192 102/178 93/161 +f 111/194 112/196 103/195 +f 112/196 113/212 104/197 +f 113/198 114/199 105/183 +f 114/199 115/215 106/200 +f 115/202 116/204 107/203 +f 116/204 117/218 108/205 +f 117/206 118/207 109/190 +f 118/207 119/221 110/208 +f 119/209 111/282 102/178 +f 120/210 121/211 112/196 +f 121/211 122/283 113/212 +f 122/213 123/214 114/199 +f 123/214 124/229 115/215 +f 124/216 125/217 116/204 +f 125/217 126/232 117/218 +f 126/219 127/220 118/207 +f 127/220 128/235 119/221 +f 128/223 120/210 111/194 +f 129/224 130/284 121/211 +f 130/226 131/227 122/213 +f 131/227 132/228 123/214 +f 132/228 133/245 124/229 +f 133/230 134/231 125/217 +f 134/231 135/285 126/232 +f 135/233 136/234 127/220 +f 136/234 137/253 128/235 +f 137/237 129/239 120/238 +f 138/240 139/286 130/241 +f 139/242 140/243 131/227 +f 140/243 141/244 132/228 +f 141/244 142/287 133/245 +f 142/247 143/249 134/248 +f 143/249 144/264 135/250 +f 144/251 145/252 136/234 +f 145/252 146/288 137/253 +f 146/254 138/240 129/239 +f 147/256 148/257 139/242 +f 148/257 149/258 140/243 +f 149/258 150/270 141/244 +f 150/260 151/271 142/261 +f 151/262 152/263 143/249 +f 152/263 153/289 144/264 +f 153/265 154/274 145/252 +f 154/267 155/275 146/268 +f 155/269 147/290 138/240 +f 75/138 76/140 148/257 +f 76/140 77/142 149/258 +f 77/142 78/144 150/270 +f 78/145 79/147 151/271 +f 79/147 80/149 152/272 +f 80/150 81/152 153/265 +f 81/152 82/154 154/274 +f 82/155 83/157 155/275 +f 83/157 75/158 147/276 +o Main +v 0.442187 0.934133 -0.076163 +v 0.442187 0.890990 -0.140731 +v 0.442187 0.826422 -0.183874 +v 0.442187 0.750259 -0.199024 +v 0.442187 0.674096 -0.183874 +v 0.442187 0.609528 -0.140731 +v 0.442187 0.566385 -0.076163 +v 0.442187 0.949283 0.000000 +v 0.442187 0.934133 0.076163 +v 0.442187 0.890990 0.140731 +v 0.442187 0.826422 0.183874 +v 0.442187 0.750259 0.199024 +v 0.442187 0.674096 0.183874 +v 0.442187 0.609528 0.140731 +v 0.442187 0.566385 0.076163 +v 0.442187 0.551236 0.000000 +v -0.030531 0.934133 -0.076163 +v -0.030531 0.890990 -0.140731 +v -0.030531 0.826422 -0.183874 +v -0.030531 0.750259 -0.199024 +v -0.030531 0.674096 -0.183874 +v -0.030531 0.609528 -0.140731 +v -0.030531 0.566385 -0.076163 +v -0.030531 0.949283 0.000000 +v -0.030531 0.934133 0.076163 +v -0.030531 0.890990 0.140731 +v -0.030531 0.826422 0.183874 +v -0.030531 0.750259 0.199024 +v -0.030531 0.674096 0.183874 +v -0.030531 0.609528 0.140731 +v -0.030531 0.566385 0.076163 +v -0.030531 0.551236 0.000000 +v 0.467651 0.862413 -0.046456 +v 0.467651 0.836098 -0.085839 +v 0.467651 0.796715 -0.112154 +v 0.467651 0.750259 -0.121394 +v 0.467651 0.703804 -0.112154 +v 0.467651 0.664421 -0.085839 +v 0.467651 0.638106 -0.046456 +v 0.467651 0.871654 0.000000 +v 0.467651 0.862413 0.046456 +v 0.467651 0.836098 0.085839 +v 0.467651 0.796715 0.112154 +v 0.467651 0.750259 0.121394 +v 0.467651 0.703804 0.112154 +v 0.467651 0.664421 0.085839 +v 0.467651 0.638106 0.046456 +v 0.467651 0.628865 0.000000 +vt 0.184819 0.623911 +vt 0.136047 0.575543 +vt 0.223127 0.564149 +vt 0.381242 0.623911 +vt 0.317518 0.650088 +vt 0.342935 0.564149 +vt 0.109652 0.512348 +vt 0.109652 0.443945 +vt 0.177278 0.496101 +vt 0.456410 0.512347 +vt 0.430015 0.575543 +vt 0.388783 0.496101 +vt 0.248544 0.650088 +vt 0.261995 0.580115 +vt 0.136047 0.380749 +vt 0.184819 0.332381 +vt 0.193378 0.415832 +vt 0.430015 0.380749 +vt 0.456410 0.443945 +vt 0.372683 0.415832 +vt 0.248544 0.306205 +vt 0.317518 0.306205 +vt 0.261995 0.370364 +vt 0.304066 0.580115 +vt 0.193378 0.534647 +vt 0.372683 0.534647 +vt 0.177278 0.454378 +vt 0.388783 0.454378 +vt 0.381242 0.332381 +vt 0.342935 0.386330 +vt 0.223127 0.386330 +vt 0.304066 0.370364 +vt 0.765330 0.551400 +vt 0.834304 0.551400 +vt 0.765330 0.971275 +vt 0.529527 0.061009 +vt 0.529527 0.124733 +vt 0.109652 0.061009 +vt 0.505183 0.971275 +vt 0.456410 0.971275 +vt 0.505183 0.551400 +vt 0.529527 0.193708 +vt 0.529527 0.257432 +vt 0.109652 0.193708 +vt 0.637881 0.971275 +vt 0.568907 0.971275 +vt 0.637881 0.551400 +vt 0.876285 0.418701 +vt 0.876285 0.487676 +vt 0.456410 0.418701 +vt 0.898028 0.551400 +vt 0.834304 0.971275 +vt 0.529527 0.012237 +vt 0.109652 0.012237 +vt 0.701605 0.971275 +vt 0.701605 0.551400 +vt 0.109652 0.124733 +vt 0.568907 0.551400 +vt 0.529527 0.306205 +vt 0.109652 0.257432 +vt 0.876285 0.354977 +vt 0.456410 0.354977 +vt 0.876285 0.551400 +vt 0.456410 0.487676 +vt 0.876285 0.306205 +vt 0.456410 0.306205 +vt 0.456410 0.551400 +vt 0.898028 0.971275 +vt 0.109652 0.306205 +f 163/291 164/292 195/293 +f 158/294 157/295 190/296 +f 165/297 166/298 197/299 +f 160/300 159/301 192/302 +f 156/303 163/291 188/304 +f 167/305 168/306 199/307 +f 162/308 161/309 194/310 +f 169/311 170/312 201/313 +f 157/295 156/303 189/314 +f 164/292 165/297 196/315 +f 159/301 158/294 191/316 +f 166/298 167/305 198/317 +f 161/309 160/300 193/318 +f 171/319 162/308 203/320 +f 168/306 169/311 200/321 +f 170/312 171/319 202/322 +f 160/323 161/324 176/325 +f 167/326 166/327 183/328 +f 158/329 159/330 174/331 +f 165/332 164/333 181/334 +f 156/335 157/336 172/337 +f 170/338 169/339 186/340 +f 161/324 162/341 177/342 +f 168/343 167/326 184/344 +f 163/345 156/335 179/346 +f 159/346 160/323 175/345 +f 166/327 165/332 182/347 +f 157/336 158/329 173/348 +f 164/333 163/349 180/350 +f 171/351 170/338 187/352 +f 169/339 168/353 185/354 +f 162/355 171/351 178/356 +f 164/292 196/315 195/293 +f 157/295 189/314 190/296 +f 166/298 198/317 197/299 +f 159/301 191/316 192/302 +f 163/291 195/293 188/304 +f 168/306 200/321 199/307 +f 161/309 193/318 194/310 +f 170/312 202/322 201/313 +f 156/303 188/304 189/314 +f 165/297 197/299 196/315 +f 158/294 190/296 191/316 +f 167/305 199/307 198/317 +f 160/300 192/302 193/318 +f 162/308 194/310 203/320 +f 169/311 201/313 200/321 +f 171/319 203/320 202/322 +f 161/324 177/342 176/325 +f 166/327 182/347 183/328 +f 159/330 175/357 174/331 +f 164/333 180/350 181/334 +f 157/336 173/348 172/337 +f 169/339 185/354 186/340 +f 162/341 178/358 177/342 +f 167/326 183/328 184/344 +f 156/335 172/337 179/346 +f 160/323 176/325 175/345 +f 165/332 181/334 182/347 +f 158/329 174/331 173/348 +f 163/349 179/359 180/350 +f 170/338 186/340 187/352 +f 168/353 184/357 185/354 +f 171/351 187/352 178/356 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/redirector.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/redirector.obj new file mode 100644 index 00000000..a48ebb09 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/redirector.obj @@ -0,0 +1,568 @@ +# Blender v2.69 (sub 0) OBJ File: 'energyBlaster.blend' +# www.blender.org +o Ring +v 0.200623 1.163777 -0.132192 +v 0.180561 1.160594 -0.097008 +v 0.140436 1.154227 -0.097008 +v 0.120374 1.151044 -0.132192 +v 0.140436 1.154227 -0.167376 +v 0.180561 1.160594 -0.167376 +v 0.133225 1.285288 -0.132192 +v 0.119903 1.269953 -0.097008 +v 0.093258 1.239285 -0.097008 +v 0.079935 1.223951 -0.132192 +v 0.093258 1.239285 -0.167376 +v 0.119903 1.269953 -0.167376 +v 0.003490 1.335048 -0.132192 +v 0.003141 1.314737 -0.097008 +v 0.002443 1.274117 -0.097008 +v 0.002094 1.253807 -0.132192 +v 0.002443 1.274117 -0.167376 +v 0.003141 1.314737 -0.167376 +v -0.127879 1.289774 -0.132192 +v -0.115091 1.273991 -0.097008 +v -0.089515 1.242425 -0.097008 +v -0.076727 1.226642 -0.132192 +v -0.089515 1.242425 -0.167376 +v -0.115091 1.273991 -0.167376 +v -0.199411 1.170650 -0.132192 +v -0.179470 1.166780 -0.097008 +v -0.139588 1.159039 -0.097008 +v -0.119647 1.155168 -0.132192 +v -0.139588 1.159039 -0.167376 +v -0.179470 1.166780 -0.167376 +v -0.177637 1.033416 -0.132192 +v -0.159873 1.043269 -0.097008 +v -0.124346 1.062975 -0.097008 +v -0.106582 1.072828 -0.132192 +v -0.124346 1.062975 -0.167376 +v -0.159873 1.043269 -0.167376 +v -0.072744 0.942285 -0.132192 +v -0.065470 0.961251 -0.097008 +v -0.050921 0.999183 -0.097008 +v -0.043646 1.018149 -0.132192 +v -0.050921 0.999183 -0.167376 +v -0.065470 0.961251 -0.167376 +v 0.066186 0.939898 -0.132192 +v 0.059568 0.959102 -0.097008 +v 0.046330 0.997512 -0.097008 +v 0.039712 1.016717 -0.132192 +v 0.046330 0.997512 -0.167376 +v 0.059568 0.959102 -0.167376 +v 0.174147 1.027372 -0.132192 +v 0.156733 1.037829 -0.097008 +v 0.121903 1.058744 -0.097008 +v 0.104488 1.069201 -0.132192 +v 0.121903 1.058744 -0.167376 +v 0.156733 1.037829 -0.167376 +vt 0.731665 0.480971 +vt 0.731287 0.399837 +vt 0.773974 0.456852 +vt 0.809859 0.432874 +vt 0.784134 0.359856 +vt 0.811535 0.384637 +vt 0.858464 0.769554 +vt 0.858280 0.712751 +vt 0.900772 0.745435 +vt 0.900614 0.696748 +vt 0.943064 0.769553 +vt 0.811535 0.481111 +vt 0.791527 0.537903 +vt 0.809860 0.432874 +vt 0.689378 0.456852 +vt 0.731138 0.243813 +vt 0.773634 0.383832 +vt 0.773974 0.219435 +vt 0.783624 0.218629 +vt 0.858208 0.603532 +vt 0.900552 0.603131 +vt 0.942880 0.712751 +vt 0.783624 0.647118 +vt 0.784134 0.505892 +vt 0.689038 0.383832 +vt 0.688903 0.243411 +vt 0.731287 0.085906 +vt 0.773500 0.243411 +vt 0.784134 0.077317 +vt 0.858280 0.493000 +vt 0.900614 0.508389 +vt 0.942808 0.603531 +vt 0.791526 0.757655 +vt 0.784134 0.788430 +vt 0.689038 0.101294 +vt 0.731665 0.000000 +vt 0.773974 0.023979 +vt 0.809860 0.000000 +vt 0.791527 0.108093 +vt 0.858464 0.432874 +vt 0.900772 0.456853 +vt 0.942880 0.492999 +vt 0.811535 0.817790 +vt 0.689378 0.023979 +vt 0.731205 0.936280 +vt 0.731205 0.903929 +vt 0.773507 0.906466 +vt 0.839114 0.023661 +vt 0.811535 0.047957 +vt 0.773507 0.936280 +vt 0.773507 0.959263 +vt 0.731205 0.937420 +vt 0.731205 0.957120 +vt 0.688903 0.936280 +vt 0.834288 0.799387 +vt 0.839113 0.842086 +vt 0.688903 0.935582 +vt 0.688903 0.906466 +vt 0.731357 0.903929 +vt 0.731162 0.777731 +vt 0.773679 0.882581 +vt 0.858208 0.137229 +vt 0.834288 0.066360 +vt 0.858404 0.432874 +vt 0.858208 0.344542 +vt 0.900566 0.335811 +vt 0.900734 0.411524 +vt 0.943000 0.432874 +vt 0.849139 0.711056 +vt 0.858208 0.728518 +vt 0.689079 0.882581 +vt 0.688903 0.769003 +vt 0.731162 0.610692 +vt 0.773504 0.769003 +vt 0.858208 0.287565 +vt 0.849139 0.154691 +vt 0.858208 0.227614 +vt 0.900566 0.235587 +vt 0.942804 0.344541 +vt 0.849139 0.594129 +vt 0.688903 0.618668 +vt 0.731357 0.480971 +vt 0.773504 0.618667 +vt 0.839113 0.404324 +vt 0.849139 0.271618 +vt 0.858404 0.136803 +vt 0.900734 0.157749 +vt 0.942804 0.227614 +vt 0.834288 0.503316 +vt 0.858208 0.578183 +vt 0.689079 0.501918 +vt 0.900510 0.136803 +vt 0.900510 0.104701 +vt 0.942811 0.134126 +vt 0.834288 0.362431 +vt 0.919199 0.016562 +vt 0.942081 0.016562 +vt 0.921490 0.058864 +vt 0.941103 0.058864 +vt 0.919199 0.101166 +vt 0.839114 0.461424 +vt 0.858208 0.134126 +vt 0.858208 0.105234 +vt 0.791526 0.327845 +vt 0.773974 0.646312 +vt 0.773634 0.101294 +vt 0.943064 0.432874 +vt 0.809859 0.865747 +vt 0.773507 0.935582 +vt 0.688903 0.959263 +vt 0.773679 0.501918 +vt 0.943000 0.136803 +vt 0.942811 0.105234 +vt 0.942081 0.101166 +f 1/1 7/2 2/3 +f 2/4 8/5 3/6 +f 3/7 9/8 4/9 +f 4/9 10/10 5/11 +f 5/12 11/13 6/14 +f 1/1 6/15 7/2 +f 7/2 13/16 8/17 +f 8/5 14/18 15/19 +f 9/8 15/20 10/10 +f 10/10 16/21 11/22 +f 11/13 17/23 12/24 +f 12/25 18/26 7/2 +f 13/16 19/27 14/28 +f 14/18 20/29 15/19 +f 15/20 21/30 16/21 +f 16/21 22/31 17/32 +f 17/23 23/33 24/34 +f 18/26 24/35 13/16 +f 19/27 25/36 26/37 +f 20/29 26/38 21/39 +f 21/30 27/40 28/41 +f 22/31 28/41 23/42 +f 23/33 29/43 24/34 +f 24/35 30/44 19/27 +f 25/45 31/46 32/47 +f 26/38 32/48 27/49 +f 27/50 33/51 28/52 +f 28/52 34/53 29/54 +f 29/43 35/55 36/56 +f 30/57 36/58 25/45 +f 31/59 37/60 32/61 +f 32/48 38/62 33/63 +f 33/64 39/65 40/66 +f 34/67 40/66 35/68 +f 35/55 41/69 42/70 +f 36/71 42/72 31/59 +f 37/60 43/73 38/74 +f 38/62 44/75 39/76 +f 39/65 45/77 40/66 +f 40/66 46/78 41/79 +f 41/69 47/80 42/70 +f 42/72 48/81 37/60 +f 43/73 49/82 44/83 +f 44/75 50/84 45/85 +f 45/77 51/86 46/78 +f 46/78 52/87 47/88 +f 47/80 53/89 48/90 +f 48/81 54/91 49/82 +f 49/92 1/93 50/94 +f 50/84 2/4 51/95 +f 51/96 3/97 52/98 +f 52/98 4/99 53/100 +f 53/89 5/12 54/101 +f 54/102 6/103 1/93 +f 7/2 8/17 2/3 +f 8/5 9/104 3/6 +f 9/8 10/10 4/9 +f 10/10 11/22 5/11 +f 11/13 12/24 6/14 +f 6/15 12/25 7/2 +f 13/16 14/28 8/17 +f 9/104 8/5 15/19 +f 15/20 16/21 10/10 +f 16/21 17/32 11/22 +f 17/23 18/105 12/24 +f 18/26 13/16 7/2 +f 19/27 20/106 14/28 +f 20/29 21/39 15/19 +f 21/30 22/31 16/21 +f 22/31 23/42 17/32 +f 18/105 17/23 24/34 +f 24/35 19/27 13/16 +f 20/106 19/27 26/37 +f 26/38 27/49 21/39 +f 22/31 21/30 28/41 +f 28/41 29/107 23/42 +f 29/43 30/108 24/34 +f 30/44 25/36 19/27 +f 26/109 25/45 32/47 +f 32/48 33/63 27/49 +f 33/51 34/53 28/52 +f 34/53 35/110 29/54 +f 30/108 29/43 36/56 +f 36/58 31/46 25/45 +f 37/60 38/74 32/61 +f 38/62 39/76 33/63 +f 34/67 33/64 40/66 +f 40/66 41/79 35/68 +f 36/56 35/55 42/70 +f 42/72 37/60 31/59 +f 43/73 44/83 38/74 +f 44/75 45/85 39/76 +f 45/77 46/78 40/66 +f 46/78 47/88 41/79 +f 47/80 48/90 42/70 +f 48/81 43/73 37/60 +f 49/82 50/111 44/83 +f 50/84 51/95 45/85 +f 51/86 52/87 46/78 +f 52/87 53/112 47/88 +f 53/89 54/101 48/90 +f 43/73 48/81 49/82 +f 1/93 2/113 50/94 +f 2/4 3/6 51/95 +f 3/97 4/99 52/98 +f 4/99 5/114 53/100 +f 5/12 6/14 54/101 +f 49/92 54/102 1/93 +o Axle +v -0.041604 1.129241 0.041604 +v -0.041604 1.129241 -0.041604 +v 0.041604 1.129241 -0.041604 +v 0.041604 1.129241 0.041604 +v -0.042071 0.805585 0.042071 +v -0.042071 0.805585 -0.042071 +v 0.042071 0.805585 -0.042071 +v 0.042071 0.805585 0.042071 +vt 0.919199 0.000562 +vt 0.919199 0.100604 +vt 0.858208 0.000000 +vt 0.960148 0.871281 +vt 0.960148 0.971324 +vt 0.899158 0.870720 +vt 0.960150 0.770115 +vt 0.960150 0.870158 +vt 0.899158 0.769554 +vt 0.797218 0.966352 +vt 0.797218 0.866309 +vt 0.858208 0.966913 +vt 0.858208 0.101166 +vt 0.899158 0.971886 +vt 0.858208 0.865747 +f 55/115 56/116 59/117 +f 56/118 57/119 60/120 +f 57/121 58/122 61/123 +f 58/124 55/125 62/126 +f 56/116 60/127 59/117 +f 57/119 61/128 60/120 +f 58/122 62/120 61/123 +f 55/125 59/129 62/126 +o EnergyBlaster +v -0.000000 1.242149 -0.083616 +v -0.000000 1.334889 0.187788 +v 0.070871 1.216354 -0.083616 +v 0.130483 1.287397 0.187788 +v 0.108581 1.151039 -0.083616 +v 0.199912 1.167143 0.187788 +v 0.095484 1.076765 -0.083616 +v 0.175800 1.030395 0.187788 +v 0.037710 1.028286 -0.083616 +v 0.069429 0.941139 0.187788 +v -0.037710 1.028286 -0.083616 +v -0.069429 0.941139 0.187788 +v -0.095485 1.076765 -0.083616 +v -0.175800 1.030395 0.187788 +v -0.108581 1.151039 -0.083616 +v -0.199912 1.167143 0.187788 +v -0.070871 1.216354 -0.083616 +v -0.130483 1.287397 0.187788 +v -0.000000 1.220784 -0.282212 +v 0.057138 1.199988 -0.282212 +v 0.087541 1.147329 -0.282212 +v 0.076982 1.087447 -0.282212 +v 0.030402 1.048363 -0.282212 +v -0.030403 1.048363 -0.282212 +v -0.076982 1.087447 -0.282212 +v -0.087541 1.147329 -0.282212 +v -0.057138 1.199988 -0.282212 +v -0.000000 1.255622 0.290641 +v 0.079531 1.226675 0.290641 +v 0.121849 1.153378 0.290641 +v 0.107152 1.070029 0.290641 +v 0.042318 1.015626 0.290641 +v -0.042318 1.015626 0.290641 +v -0.107152 1.070029 0.290641 +v -0.121849 1.153378 0.290641 +v -0.079531 1.226675 0.290641 +vt 0.238688 0.240310 +vt 0.564682 0.240218 +vt 0.238769 0.325540 +vt 0.564832 0.397139 +vt 0.238974 0.370933 +vt 0.238776 0.906257 +vt 0.565090 0.903444 +vt 0.238776 0.923752 +vt 0.238828 0.577331 +vt 0.565027 0.480713 +vt 0.238722 0.646749 +vt 0.564832 0.608521 +vt 0.238722 0.737427 +vt 0.564832 0.775471 +vt 0.238828 0.806935 +vt 0.238776 0.947556 +vt 0.565090 0.935654 +vt 0.238776 0.965050 +vt 0.564832 0.083375 +vt 0.688582 0.240277 +vt 0.238769 0.155122 +vt 0.238974 0.109837 +vt 0.565209 0.000000 +vt 0.000065 0.171658 +vt 0.858208 0.874805 +vt 0.863147 0.806107 +vt 0.863147 0.943504 +vt 0.000231 0.135148 +vt 0.000000 0.950298 +vt 0.000000 0.728669 +vt 0.000000 0.655562 +vt 0.000085 0.599595 +vt 0.000000 0.906905 +vt 0.000065 0.309053 +vt 0.000000 0.240338 +vt 0.987079 0.412135 +vt 1.000000 0.232424 +vt 1.000000 0.334183 +vt 0.688673 0.144680 +vt 0.565090 0.967863 +vt 0.688752 0.965459 +vt 0.565027 0.903444 +vt 0.688770 0.820941 +vt 0.688651 0.742939 +vt 0.688651 0.641181 +vt 0.688752 0.925481 +vt 0.565209 0.480713 +vt 0.688903 0.386862 +vt 0.688673 0.335923 +vt 0.875654 0.769554 +vt 0.889875 0.782248 +vt 0.899158 0.838252 +vt 0.899158 0.911359 +vt 0.889875 0.967362 +vt 0.875654 0.980057 +vt 0.000000 0.964402 +vt 0.000085 0.784708 +vt 0.000000 0.921010 +vt 0.000231 0.345650 +vt 0.987079 0.154473 +vt 0.943000 0.283304 +vt 0.949875 0.187682 +vt 0.967283 0.136803 +vt 0.949875 0.378926 +vt 0.967283 0.429805 +vt 0.688903 0.093862 +vt 0.688752 0.945827 +vt 0.688770 0.563281 +vt 0.688752 0.905849 +f 63/130 64/131 65/132 +f 65/132 66/133 67/134 +f 67/135 68/136 69/137 +f 69/138 70/139 71/140 +f 71/140 72/141 73/142 +f 73/142 74/143 75/144 +f 75/145 76/146 77/147 +f 64/131 80/148 90/149 +f 79/150 80/148 63/130 +f 77/151 78/152 79/150 +f 79/150 63/130 89/153 +f 81/154 82/155 89/156 +f 77/151 79/150 88/157 +f 75/145 77/147 87/158 +f 73/142 75/144 86/159 +f 71/140 73/142 85/160 +f 69/138 71/140 84/161 +f 67/135 69/137 83/162 +f 65/132 67/134 82/163 +f 63/130 65/132 81/164 +f 93/165 95/166 94/167 +f 80/148 78/152 98/168 +f 78/169 76/146 97/170 +f 76/171 74/143 96/172 +f 74/143 72/141 95/173 +f 72/141 70/139 94/174 +f 70/146 68/136 93/175 +f 68/176 66/133 92/177 +f 66/133 64/131 91/178 +f 64/131 66/133 65/132 +f 66/133 68/176 67/134 +f 68/136 70/146 69/137 +f 70/139 72/141 71/140 +f 72/141 74/143 73/142 +f 74/143 76/171 75/144 +f 76/146 78/169 77/147 +f 80/148 98/168 90/149 +f 80/148 64/131 63/130 +f 78/152 80/148 79/150 +f 63/130 81/164 89/153 +f 83/179 84/180 85/181 +f 83/179 85/181 86/182 +f 82/155 83/179 89/156 +f 83/179 86/182 89/156 +f 86/182 87/183 89/156 +f 87/183 88/184 89/156 +f 79/150 89/153 88/157 +f 77/147 88/185 87/158 +f 75/144 87/186 86/159 +f 73/142 86/159 85/160 +f 71/140 85/160 84/161 +f 69/137 84/187 83/162 +f 67/134 83/188 82/163 +f 65/132 82/163 81/164 +f 93/165 96/189 95/166 +f 90/190 98/191 97/192 +f 91/193 90/190 97/192 +f 91/193 97/192 96/189 +f 92/194 91/193 96/189 +f 93/165 92/194 96/189 +f 78/152 97/195 98/168 +f 76/146 96/196 97/170 +f 74/143 95/173 96/172 +f 72/141 94/174 95/173 +f 70/139 93/197 94/174 +f 68/136 92/198 93/175 +f 66/133 91/178 92/177 +f 64/131 90/149 91/178 +o Base +v -0.146304 0.140310 0.146304 +v -0.146304 0.140310 -0.146304 +v 0.146304 0.140310 -0.146304 +v 0.146304 0.140310 0.146304 +v -0.146304 0.140310 0.146304 +v -0.146304 0.140310 -0.146304 +v 0.146304 0.140310 -0.146304 +v 0.146304 0.140310 0.146304 +v -0.089808 0.814962 0.089808 +v -0.089808 0.814962 -0.089808 +v 0.089808 0.814962 -0.089808 +v 0.089808 0.814962 0.089808 +v -0.370646 0.059008 0.370646 +v -0.370646 0.059008 -0.370646 +v 0.370646 0.059008 -0.370646 +v 0.370646 0.059008 0.370646 +v -0.370646 0.223467 0.370646 +v -0.370646 0.223467 -0.370646 +v 0.370646 0.223467 -0.370646 +v 0.370646 0.223467 0.370646 +vt 0.790255 0.628573 +vt 0.790255 0.687631 +vt 0.731198 0.628573 +vt 0.000000 0.173843 +vt 0.000000 0.114785 +vt 1.000000 0.192419 +vt 0.000000 0.270052 +vt 0.000000 0.210995 +vt 1.000000 0.288628 +vt 0.000000 0.366262 +vt 0.000000 0.307204 +vt 1.000000 0.384837 +vt 0.000000 0.077633 +vt 0.000000 0.018576 +vt 1.000000 0.096209 +vt 0.000000 0.000000 +vt 0.487472 0.872299 +vt 0.243736 0.872299 +vt 0.487472 0.628573 +vt 0.731198 0.872309 +vt 0.487472 0.384837 +vt 0.000000 0.872309 +vt 0.000000 0.628573 +vt 0.243726 0.872309 +vt 0.243736 0.628573 +vt 0.000000 0.384837 +vt 0.243736 0.384837 +vt 0.731198 0.687631 +vt 1.000000 0.000000 +vt 0.487472 0.872309 +vt 0.731198 0.384837 +vt 0.243726 0.628573 +f 109/199 108/200 110/201 +f 107/202 108/203 103/204 +f 108/205 109/206 104/207 +f 109/208 110/209 105/210 +f 110/211 107/212 106/213 +f 99/214 102/214 103/214 +f 102/214 101/214 106/214 +f 101/214 100/214 105/214 +f 100/214 99/214 104/214 +f 115/215 116/216 111/217 +f 116/201 117/218 112/217 +f 117/217 118/219 113/201 +f 118/220 115/221 114/222 +f 111/217 112/223 114/219 +f 118/224 117/225 115/221 +f 108/200 107/226 110/201 +f 108/203 104/213 103/204 +f 109/206 105/204 104/207 +f 110/209 106/207 105/210 +f 107/212 103/227 106/213 +f 102/214 106/214 103/214 +f 101/214 105/214 106/214 +f 100/214 104/214 105/214 +f 99/214 103/214 104/214 +f 116/216 112/223 111/217 +f 117/218 113/228 112/217 +f 118/219 114/229 113/201 +f 115/221 111/230 114/222 +f 112/223 113/225 114/219 +f 117/225 116/223 115/221 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.mtl new file mode 100644 index 00000000..0345f655 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.mtl @@ -0,0 +1,11 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:model/rocket_t1 + +newmtl None_rocketT1.png.001 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:model/rocket_t1 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.obj new file mode 100644 index 00000000..02c93203 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.obj @@ -0,0 +1,930 @@ +# Blender v2.76 (sub 0) OBJ File: 'rocket.blend' +# www.blender.org +mtllib rocket_t1.mtl +o Rocket +v -0.867203 4.457249 0.867203 +v -0.867203 4.557249 0.867203 +v -0.867203 4.457249 -0.867203 +v -0.867203 4.557249 -0.867203 +v 0.867203 4.457249 0.867203 +v 0.867203 4.557249 0.867203 +v 0.867203 4.457249 -0.867203 +v 0.867203 4.557249 -0.867203 +v -0.700000 -0.025000 0.700000 +v -0.700000 0.075000 0.700000 +v -0.700000 -0.025000 -0.700000 +v -0.700000 0.075000 -0.700000 +v 0.700000 -0.025000 0.700000 +v 0.700000 0.075000 0.700000 +v 0.700000 -0.025000 -0.700000 +v 0.700000 0.075000 -0.700000 +v -0.600000 0.075000 0.600000 +v -0.600000 0.175000 0.600000 +v -0.600000 0.075000 -0.600000 +v -0.600000 0.175000 -0.600000 +v 0.600000 0.075000 0.600000 +v 0.600000 0.175000 0.600000 +v 0.600000 0.075000 -0.600000 +v 0.600000 0.175000 -0.600000 +v -0.100000 5.956773 0.100000 +v -0.100000 7.756774 0.100000 +v -0.100000 5.956773 -0.100000 +v -0.100000 7.756774 -0.100000 +v 0.100000 5.956773 0.100000 +v 0.100000 7.756774 0.100000 +v 0.100000 5.956773 -0.100000 +v 0.100000 7.756774 -0.100000 +v -0.500000 0.175000 0.500000 +v -0.500000 0.375000 0.500000 +v -0.500000 0.175000 -0.500000 +v -0.500000 0.375000 -0.500000 +v 0.500000 0.175000 0.500000 +v 0.500000 0.375000 0.500000 +v 0.500000 0.175000 -0.500000 +v 0.500000 0.375000 -0.500000 +v -0.900000 0.375000 0.900000 +v -0.900000 0.475000 0.900000 +v -0.900000 0.375000 -0.900000 +v -0.900000 0.475000 -0.900000 +v 0.900000 0.375000 0.900000 +v 0.900000 0.475000 0.900000 +v 0.900000 0.375000 -0.900000 +v 0.900000 0.475000 -0.900000 +v -0.802256 0.453440 0.897637 +v -0.802256 4.553441 0.897637 +v -0.802256 0.453440 0.797637 +v -0.802256 4.553441 0.797637 +v 0.897744 0.453440 0.897637 +v 0.897744 4.553441 0.897637 +v 0.897744 0.453440 0.797637 +v 0.897744 4.553441 0.797637 +v 0.798310 0.471661 0.800000 +v 0.798310 4.571662 0.800000 +v 0.798310 0.471661 -0.800000 +v 0.798310 4.571662 -0.800000 +v 0.898310 0.471661 0.800000 +v 0.898310 4.571662 0.800000 +v 0.898310 0.471661 -0.800000 +v 0.898310 4.571662 -0.800000 +v -0.898721 0.478043 0.895898 +v -0.898721 4.578044 0.895898 +v -0.898721 0.478044 -0.804103 +v -0.898721 4.578044 -0.804103 +v -0.798721 0.478043 0.895898 +v -0.798721 4.578044 0.895898 +v -0.798721 0.478044 -0.804103 +v -0.798721 4.578044 -0.804103 +v -0.898111 0.475278 -0.796410 +v -0.898111 4.575279 -0.796410 +v -0.898111 0.475278 -0.896410 +v -0.898111 4.575279 -0.896410 +v -0.398111 0.475278 -0.796410 +v -0.398111 4.575279 -0.796410 +v -0.398111 0.475278 -0.896410 +v -0.398111 4.575279 -0.896410 +v -0.400000 2.874092 -0.796410 +v -0.400000 4.574092 -0.796410 +v -0.400000 2.874092 -0.896410 +v -0.400000 4.574092 -0.896410 +v 0.400000 2.874092 -0.796410 +v 0.400000 4.574092 -0.796410 +v 0.400000 2.874092 -0.896410 +v 0.400000 4.574092 -0.896410 +v -0.400000 0.473625 -0.796410 +v -0.400000 2.173626 -0.796410 +v -0.400000 0.473625 -0.896410 +v -0.400000 2.173626 -0.896410 +v 0.400000 0.473625 -0.796410 +v 0.400000 2.173626 -0.796410 +v 0.400000 0.473625 -0.896410 +v 0.400000 2.173626 -0.896410 +v -0.200000 5.759671 0.200000 +v -0.200000 5.959671 0.200000 +v -0.200000 5.759671 -0.200000 +v -0.200000 5.959671 -0.200000 +v 0.200000 5.759671 0.200000 +v 0.200000 5.959671 0.200000 +v 0.200000 5.759671 -0.200000 +v 0.200000 5.959671 -0.200000 +v -0.800000 4.574526 0.800000 +v -0.800000 4.774527 0.800000 +v -0.800000 4.574527 -0.800000 +v -0.800000 4.774527 -0.800000 +v 0.800000 4.574526 0.800000 +v 0.800000 4.774527 0.800000 +v 0.800000 4.574527 -0.800000 +v 0.800000 4.774527 -0.800000 +v -0.700000 4.773145 0.700000 +v -0.700000 4.973145 0.700000 +v -0.700000 4.773145 -0.700000 +v -0.700000 4.973145 -0.700000 +v 0.700000 4.773145 0.700000 +v 0.700000 4.973145 0.700000 +v 0.700000 4.773145 -0.700000 +v 0.700000 4.973145 -0.700000 +v -0.600000 4.973635 0.600000 +v -0.600000 5.173635 0.600000 +v -0.600000 4.973635 -0.600000 +v -0.600000 5.173635 -0.600000 +v 0.600000 4.973635 0.600000 +v 0.600000 5.173635 0.600000 +v 0.600000 4.973635 -0.600000 +v 0.600000 5.173635 -0.600000 +v -0.500000 5.174124 0.500000 +v -0.500000 5.374124 0.500000 +v -0.500000 5.174124 -0.500000 +v -0.500000 5.374124 -0.500000 +v 0.500000 5.174124 0.500000 +v 0.500000 5.374124 0.500000 +v 0.500000 5.174124 -0.500000 +v 0.500000 5.374124 -0.500000 +v -0.400000 5.370128 0.400000 +v -0.400000 5.570128 0.400000 +v -0.400000 5.370129 -0.400000 +v -0.400000 5.570129 -0.400000 +v 0.400000 5.370128 0.400000 +v 0.400000 5.570128 0.400000 +v 0.400000 5.370129 -0.400000 +v 0.400000 5.570129 -0.400000 +v -0.300000 5.565318 0.300000 +v -0.300000 5.765317 0.300000 +v -0.300000 5.565318 -0.300000 +v -0.300000 5.765317 -0.300000 +v 0.300000 5.565318 0.300000 +v 0.300000 5.765317 0.300000 +v 0.300000 5.565318 -0.300000 +v 0.300000 5.765317 -0.300000 +v -0.100000 0.007384 -1.694776 +v -0.100000 1.507384 -1.694776 +v -0.100000 0.007384 -1.794776 +v -0.100000 1.507384 -1.794776 +v 0.100000 0.007384 -1.694776 +v 0.100000 1.507384 -1.694776 +v 0.100000 0.007384 -1.794776 +v 0.100000 1.507384 -1.794776 +v -0.100000 0.879847 -0.894345 +v -0.100000 1.679847 -0.894345 +v -0.100000 0.879847 -1.094345 +v -0.100000 1.679847 -1.094345 +v 0.100000 0.879847 -0.894345 +v 0.100000 1.679847 -0.894345 +v 0.100000 0.879847 -1.094345 +v 0.100000 1.679847 -1.094345 +v -0.100000 0.779847 -1.094345 +v -0.100000 1.579847 -1.094345 +v -0.100000 0.779847 -1.294345 +v -0.100000 1.579847 -1.294345 +v 0.100000 0.779847 -1.094345 +v 0.100000 1.579847 -1.094345 +v 0.100000 0.779847 -1.294345 +v 0.100000 1.579847 -1.294345 +v -0.100000 0.579847 -1.294345 +v -0.100000 1.379847 -1.294345 +v -0.100000 0.579847 -1.494345 +v -0.100000 1.379847 -1.494345 +v 0.100000 0.579847 -1.294345 +v 0.100000 1.379847 -1.294345 +v 0.100000 0.579847 -1.494345 +v 0.100000 1.379847 -1.494345 +v -0.100000 0.179847 -1.494345 +v -0.100000 0.979847 -1.494345 +v -0.100000 0.179847 -1.694345 +v -0.100000 0.979847 -1.694345 +v 0.100000 0.179847 -1.494345 +v 0.100000 0.979847 -1.494345 +v 0.100000 0.179847 -1.694345 +v 0.100000 0.979847 -1.694345 +v -1.694776 0.007383 0.100000 +v -1.694776 1.507384 0.100000 +v -1.794776 0.007383 0.100000 +v -1.794776 1.507384 0.100000 +v -1.694776 0.007383 -0.100000 +v -1.694776 1.507384 -0.100000 +v -1.794776 0.007383 -0.100000 +v -1.794776 1.507384 -0.100000 +v -1.094345 0.779847 0.100000 +v -1.094345 1.579847 0.100000 +v -1.294345 0.779847 0.100000 +v -1.294345 1.579847 0.100000 +v -1.094345 0.779847 -0.100000 +v -1.094345 1.579847 -0.100000 +v -1.294345 0.779847 -0.100000 +v -1.294345 1.579847 -0.100000 +v -1.294345 0.579847 0.100000 +v -1.294345 1.379847 0.100000 +v -1.494345 0.579847 0.100000 +v -1.494345 1.379847 0.100000 +v -1.294345 0.579847 -0.100000 +v -1.294345 1.379847 -0.100000 +v -1.494345 0.579847 -0.100000 +v -1.494345 1.379847 -0.100000 +v -1.494345 0.179847 0.100000 +v -1.494345 0.979847 0.100000 +v -1.694345 0.179847 0.100000 +v -1.694345 0.979847 0.100000 +v -1.494345 0.179847 -0.100000 +v -1.494345 0.979847 -0.100000 +v -1.694345 0.179847 -0.100000 +v -1.694345 0.979847 -0.100000 +v -0.894345 0.879847 0.100000 +v -0.894345 1.679847 0.100000 +v -1.094345 0.879847 0.100000 +v -1.094345 1.679847 0.100000 +v -0.894345 0.879847 -0.100000 +v -0.894345 1.679847 -0.100000 +v -1.094345 0.879847 -0.100000 +v -1.094345 1.679847 -0.100000 +v 0.100000 0.007383 1.694776 +v 0.100000 1.507383 1.694776 +v 0.100000 0.007383 1.794776 +v 0.100000 1.507383 1.794776 +v -0.100000 0.007383 1.694776 +v -0.100000 1.507383 1.694776 +v -0.100000 0.007383 1.794776 +v -0.100000 1.507383 1.794776 +v 0.100000 0.779847 1.094345 +v 0.100000 1.579847 1.094345 +v 0.100000 0.779846 1.294345 +v 0.100000 1.579847 1.294345 +v -0.100000 0.779847 1.094345 +v -0.100000 1.579847 1.094345 +v -0.100000 0.779846 1.294345 +v -0.100000 1.579847 1.294345 +v 0.100000 0.579846 1.294345 +v 0.100000 1.379847 1.294345 +v 0.100000 0.579846 1.494345 +v 0.100000 1.379847 1.494345 +v -0.100000 0.579846 1.294345 +v -0.100000 1.379847 1.294345 +v -0.100000 0.579846 1.494345 +v -0.100000 1.379847 1.494345 +v 0.100000 0.179846 1.494345 +v 0.100000 0.979847 1.494345 +v 0.100000 0.179846 1.694345 +v 0.100000 0.979847 1.694345 +v -0.100000 0.179846 1.494345 +v -0.100000 0.979847 1.494345 +v -0.100000 0.179846 1.694345 +v -0.100000 0.979847 1.694345 +v 0.100000 0.879847 0.894345 +v 0.100000 1.679847 0.894345 +v 0.100000 0.879847 1.094345 +v 0.100000 1.679847 1.094345 +v -0.100000 0.879847 0.894345 +v -0.100000 1.679847 0.894345 +v -0.100000 0.879847 1.094345 +v -0.100000 1.679847 1.094345 +v 1.694776 0.007383 -0.100000 +v 1.694776 1.507384 -0.100000 +v 1.794776 0.007383 -0.100000 +v 1.794776 1.507384 -0.100000 +v 1.694776 0.007383 0.100000 +v 1.694776 1.507384 0.100000 +v 1.794776 0.007383 0.100000 +v 1.794776 1.507384 0.100000 +v 1.094345 0.779847 -0.100000 +v 1.094345 1.579847 -0.100000 +v 1.294345 0.779847 -0.100000 +v 1.294345 1.579847 -0.100000 +v 1.094345 0.779847 0.100000 +v 1.094345 1.579847 0.100000 +v 1.294345 0.779847 0.100000 +v 1.294345 1.579847 0.100000 +v 1.294345 0.579847 -0.100000 +v 1.294345 1.379847 -0.100000 +v 1.494345 0.579847 -0.100000 +v 1.494345 1.379847 -0.100000 +v 1.294345 0.579847 0.100000 +v 1.294345 1.379847 0.100000 +v 1.494345 0.579847 0.100000 +v 1.494345 1.379847 0.100000 +v 1.494345 0.179847 -0.100000 +v 1.494345 0.979847 -0.100000 +v 1.694345 0.179847 -0.100000 +v 1.694345 0.979847 -0.100000 +v 1.494345 0.179847 0.100000 +v 1.494345 0.979847 0.100000 +v 1.694345 0.179847 0.100000 +v 1.694345 0.979847 0.100000 +v 0.894345 0.879847 -0.100000 +v 0.894345 1.679847 -0.100000 +v 1.094345 0.879847 -0.100000 +v 1.094345 1.679847 -0.100000 +v 0.894345 0.879847 0.100000 +v 0.894345 1.679847 0.100000 +v 1.094345 0.879847 0.100000 +v 1.094345 1.679847 0.100000 +v 0.395899 0.475278 -0.796410 +v 0.395899 4.575279 -0.796410 +v 0.395899 0.475278 -0.896410 +v 0.395899 4.575279 -0.896410 +v 0.895899 0.475278 -0.796410 +v 0.895899 4.575279 -0.796410 +v 0.895899 0.475278 -0.896410 +v 0.895899 4.575279 -0.896410 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.245889 0.937792 +vt 0.245889 0.995739 +vt 0.238606 0.995739 +vt 0.000000 0.000000 +vt 0.110552 0.944961 +vt 0.110552 0.999682 +vt 0.055831 0.999682 +vt 0.163310 0.946323 +vt 0.163310 0.999358 +vt 0.110275 0.999358 +vt 0.110441 0.944690 +vt 0.110441 0.998396 +vt 0.056735 0.998396 +vt 0.056735 0.944690 +vt 0.984200 0.429486 +vt 0.984200 0.360492 +vt 0.977420 0.360492 +vt 0.976892 0.430600 +vt 0.983500 0.430600 +vt 0.983500 0.437208 +vt 0.605835 0.707529 +vt 0.605835 0.714124 +vt 0.535233 0.714124 +vt 0.108793 0.946228 +vt 0.108793 0.999548 +vt 0.055473 0.999548 +vt 0.595117 0.784586 +vt 0.595117 0.932285 +vt 0.540032 0.932285 +vt 0.597104 0.783240 +vt 0.597104 0.936269 +vt 0.535578 0.936269 +vt 0.608592 0.561765 +vt 0.608592 0.711892 +vt 0.603734 0.711892 +vt 0.535220 0.709899 +vt 0.535220 0.555184 +vt 0.601026 0.555184 +vt 0.606045 0.707644 +vt 0.606045 0.714665 +vt 0.534092 0.714665 +vt 0.535578 0.783240 +vt 0.539294 0.550932 +vt 0.539294 0.390957 +vt 0.605626 0.390957 +vt 0.535242 0.706958 +vt 0.535242 0.555769 +vt 0.601779 0.555769 +vt 0.429636 0.835789 +vt 0.429636 0.995989 +vt 0.426017 0.995989 +vt 0.406315 0.995989 +vt 0.406315 0.835789 +vt 0.425623 0.835789 +vt 0.429789 0.835789 +vt 0.429789 0.995989 +vt 0.402443 0.995989 +vt 0.429639 0.996133 +vt 0.429639 0.999967 +vt 0.406275 0.999967 +vt 0.606369 0.707656 +vt 0.606369 0.714525 +vt 0.534491 0.714525 +vt 0.332293 0.925686 +vt 0.332293 0.859480 +vt 0.370850 0.859480 +vt 0.937689 0.695620 +vt 0.937689 0.702715 +vt 0.874947 0.702715 +vt 0.874008 0.704156 +vt 0.874008 0.765363 +vt 0.812800 0.765363 +vt 0.812800 0.704156 +vt 0.874947 0.695620 +vt 0.238606 0.937792 +vt 0.055831 0.944961 +vt 0.110275 0.946323 +vt 0.977420 0.429486 +vt 0.976892 0.437208 +vt 0.535233 0.707529 +vt 0.055473 0.946228 +vt 0.540032 0.784586 +vt 0.603734 0.561765 +vt 0.601026 0.709899 +vt 0.534092 0.707644 +vt 0.605626 0.550932 +vt 0.601779 0.706958 +vt 0.426017 0.835789 +vt 0.425623 0.995989 +vt 0.402443 0.835789 +vt 0.406275 0.996133 +vt 0.534491 0.707656 +vt 0.370850 0.925686 +vt 0.332199 0.996143 +vt 0.332199 0.930074 +vt 0.371084 0.930074 +vt 0.406315 0.831739 +vt 0.406315 0.671952 +vt 0.425623 0.671952 +vt 0.405676 0.671952 +vt 0.405676 0.831739 +vt 0.402679 0.831739 +vt 0.448953 0.671952 +vt 0.448953 0.831739 +vt 0.429785 0.831739 +vt 0.429789 0.671952 +vt 0.402443 0.831739 +vt 0.429639 0.831882 +vt 0.429639 0.835706 +vt 0.406275 0.835706 +vt 0.371084 0.996143 +vt 0.425623 0.831739 +vt 0.402679 0.671952 +vt 0.402443 0.671952 +vt 0.406275 0.831882 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 -0.000000 +usemtl None +f 4/1/1 3/2/1 1/3/1 +f 8/1/2 7/2/2 3/3/2 +f 6/1/3 5/2/3 7/3/3 +f 2/1/4 1/2/4 5/3/4 +f 3/4/5 7/5/5 5/6/5 +f 6/7/6 8/1/6 4/2/6 +f 12/8/1 11/9/1 9/10/1 +f 16/8/2 15/9/2 11/10/2 +f 14/8/3 13/9/3 15/10/3 +f 10/8/4 9/9/4 13/10/4 +f 11/11/5 15/12/5 13/13/5 +f 16/14/6 12/15/6 10/16/6 +f 20/8/1 19/9/1 17/10/1 +f 24/8/2 23/9/2 19/10/2 +f 22/8/3 21/9/3 23/10/3 +f 18/8/4 17/9/4 21/10/4 +f 19/1/5 23/2/5 21/3/5 +f 22/17/6 24/14/6 20/15/6 +f 28/18/1 27/19/1 25/20/1 +f 32/18/2 31/19/2 27/20/2 +f 30/18/3 29/19/3 31/20/3 +f 26/18/4 25/19/4 29/20/4 +f 27/1/5 31/2/5 29/3/5 +f 30/21/6 32/22/6 28/23/6 +f 36/8/1 35/9/1 33/10/1 +f 40/8/2 39/9/2 35/10/2 +f 38/8/3 37/9/3 39/10/3 +f 34/8/4 33/9/4 37/10/4 +f 35/1/5 39/2/5 37/3/5 +f 40/1/6 36/2/6 34/3/6 +f 44/24/1 43/25/1 41/26/1 +f 48/24/2 47/25/2 43/26/2 +f 46/24/3 45/25/3 47/26/3 +f 42/24/4 41/25/4 45/26/4 +f 43/27/5 47/28/5 45/29/5 +f 48/30/6 44/31/6 42/32/6 +f 52/1/1 51/2/1 49/3/1 +f 56/33/2 55/34/2 51/35/2 +f 54/36/3 53/37/3 55/38/3 +f 50/39/4 49/40/4 53/41/4 +f 51/1/5 55/2/5 53/3/5 +f 56/42/6 52/43/6 50/44/6 +f 58/45/1 60/33/1 59/34/1 +f 64/1/2 63/2/2 59/3/2 +f 62/46/3 61/47/3 63/48/3 +f 58/1/4 57/2/4 61/3/4 +f 59/1/5 63/2/5 61/3/5 +f 64/42/6 60/43/6 58/44/6 +f 68/49/1 67/50/1 65/51/1 +f 72/1/2 71/2/2 67/3/2 +f 70/33/3 69/34/3 71/35/3 +f 66/36/4 65/37/4 69/38/4 +f 67/1/5 71/2/5 69/3/5 +f 72/42/6 68/43/6 66/44/6 +f 76/52/1 75/53/1 73/54/1 +f 80/55/2 79/56/2 75/57/2 +f 78/33/3 77/34/3 79/35/3 +f 74/33/4 73/34/4 77/35/4 +f 75/58/5 79/59/5 77/60/5 +f 80/61/6 76/62/6 74/63/6 +f 84/1/1 83/2/1 81/3/1 +f 86/1/3 85/2/3 87/3/3 +f 82/33/4 81/34/4 85/35/4 +f 83/33/5 87/34/5 85/35/5 +f 88/64/6 84/65/6 82/66/6 +f 92/1/1 91/2/1 89/3/1 +f 96/67/2 95/68/2 91/69/2 +f 94/1/3 93/2/3 95/3/3 +f 90/33/4 89/34/4 93/35/4 +f 91/1/5 95/2/5 93/3/5 +f 96/33/6 92/34/6 90/35/6 +f 100/70/1 99/71/1 97/72/1 +f 104/70/2 103/71/2 99/72/2 +f 102/70/3 101/71/3 103/72/3 +f 98/70/4 97/71/4 101/72/4 +f 99/1/5 103/2/5 101/3/5 +f 104/73/6 100/74/6 98/75/6 +f 108/70/1 107/71/1 105/72/1 +f 112/70/2 111/71/2 107/72/2 +f 110/70/3 109/71/3 111/72/3 +f 106/70/4 105/71/4 109/72/4 +f 107/1/5 111/2/5 109/3/5 +f 110/76/6 112/73/6 108/74/6 +f 116/70/1 115/71/1 113/72/1 +f 120/70/2 119/71/2 115/72/2 +f 118/70/3 117/71/3 119/72/3 +f 114/70/4 113/71/4 117/72/4 +f 115/1/5 119/2/5 117/3/5 +f 120/73/6 116/74/6 114/75/6 +f 124/70/1 123/71/1 121/72/1 +f 128/70/2 127/71/2 123/72/2 +f 126/70/3 125/71/3 127/72/3 +f 122/70/4 121/71/4 125/72/4 +f 123/1/5 127/2/5 125/3/5 +f 126/76/6 128/73/6 124/74/6 +f 132/70/1 131/71/1 129/72/1 +f 136/70/2 135/71/2 131/72/2 +f 134/70/3 133/71/3 135/72/3 +f 130/70/4 129/71/4 133/72/4 +f 131/1/5 135/2/5 133/3/5 +f 136/73/6 132/74/6 130/75/6 +f 138/77/1 140/70/1 139/71/1 +f 144/70/2 143/71/2 139/72/2 +f 142/70/3 141/71/3 143/72/3 +f 138/70/4 137/71/4 141/72/4 +f 139/1/5 143/2/5 141/3/5 +f 144/73/6 140/74/6 138/75/6 +f 148/70/1 147/71/1 145/72/1 +f 152/70/2 151/71/2 147/72/2 +f 150/70/3 149/71/3 151/72/3 +f 146/70/4 145/71/4 149/72/4 +f 147/1/5 151/2/5 149/3/5 +f 150/76/6 152/73/6 148/74/6 +f 156/4/1 155/5/1 153/6/1 +f 160/4/2 159/5/2 155/6/2 +f 158/4/3 157/5/3 159/6/3 +f 154/4/4 153/5/4 157/6/4 +f 155/4/5 159/5/5 157/6/5 +f 160/4/6 156/5/6 154/6/6 +f 164/4/1 163/5/1 161/6/1 +f 168/4/2 167/5/2 163/6/2 +f 166/4/3 165/5/3 167/6/3 +f 162/1/4 161/2/4 165/3/4 +f 163/4/5 167/5/5 165/6/5 +f 166/78/6 168/4/6 164/5/6 +f 170/78/1 172/4/1 171/5/1 +f 176/4/2 175/5/2 171/6/2 +f 174/4/3 173/5/3 175/6/3 +f 170/4/4 169/5/4 173/6/4 +f 171/4/5 175/5/5 173/6/5 +f 174/78/6 176/4/6 172/5/6 +f 178/78/1 180/4/1 179/5/1 +f 184/4/2 183/5/2 179/6/2 +f 182/4/3 181/5/3 183/6/3 +f 178/4/4 177/5/4 181/6/4 +f 179/4/5 183/5/5 181/6/5 +f 182/78/6 184/4/6 180/5/6 +f 188/4/1 187/5/1 185/6/1 +f 192/4/2 191/5/2 187/6/2 +f 190/4/3 189/5/3 191/6/3 +f 186/4/4 185/5/4 189/6/4 +f 187/4/5 191/5/5 189/6/5 +f 190/78/6 192/4/6 188/5/6 +f 196/4/4 195/5/4 193/6/4 +f 200/4/1 199/5/1 195/6/1 +f 198/4/2 197/5/2 199/6/2 +f 194/4/3 193/5/3 197/6/3 +f 195/4/5 199/5/5 197/6/5 +f 200/4/6 196/5/6 194/6/6 +f 204/4/4 203/5/4 201/6/4 +f 204/78/1 208/4/1 207/5/1 +f 206/4/2 205/5/2 207/6/2 +f 202/4/3 201/5/3 205/6/3 +f 203/4/5 207/5/5 205/6/5 +f 208/4/6 204/5/6 202/6/6 +f 212/4/4 211/5/4 209/6/4 +f 212/78/1 216/4/1 215/5/1 +f 214/4/2 213/5/2 215/6/2 +f 210/4/3 209/5/3 213/6/3 +f 211/4/5 215/5/5 213/6/5 +f 216/4/6 212/5/6 210/6/6 +f 220/4/4 219/5/4 217/6/4 +f 224/4/1 223/5/1 219/6/1 +f 222/4/2 221/5/2 223/6/2 +f 218/4/3 217/5/3 221/6/3 +f 219/4/5 223/5/5 221/6/5 +f 224/4/6 220/5/6 218/6/6 +f 228/4/4 227/5/4 225/6/4 +f 232/4/1 231/5/1 227/6/1 +f 230/4/2 229/5/2 231/6/2 +f 226/1/3 225/2/3 229/3/3 +f 227/4/5 231/5/5 229/6/5 +f 232/4/6 228/5/6 226/6/6 +f 236/4/3 235/5/3 233/6/3 +f 240/4/4 239/5/4 235/6/4 +f 238/4/1 237/5/1 239/6/1 +f 234/4/2 233/5/2 237/6/2 +f 235/4/5 239/5/5 237/6/5 +f 238/78/6 240/4/6 236/5/6 +f 244/4/3 243/5/3 241/6/3 +f 248/4/4 247/5/4 243/6/4 +f 248/78/1 246/4/1 245/5/1 +f 242/4/2 241/5/2 245/6/2 +f 243/4/5 247/5/5 245/6/5 +f 246/78/6 248/4/6 244/5/6 +f 252/4/3 251/5/3 249/6/3 +f 256/4/4 255/5/4 251/6/4 +f 256/78/1 254/4/1 253/5/1 +f 250/4/2 249/5/2 253/6/2 +f 251/4/5 255/5/5 253/6/5 +f 254/78/6 256/4/6 252/5/6 +f 260/4/3 259/5/3 257/6/3 +f 264/4/4 263/5/4 259/6/4 +f 262/4/1 261/5/1 263/6/1 +f 258/4/2 257/5/2 261/6/2 +f 259/4/5 263/5/5 261/6/5 +f 262/78/6 264/4/6 260/5/6 +f 268/4/3 267/5/3 265/6/3 +f 272/4/4 271/5/4 267/6/4 +f 270/4/1 269/5/1 271/6/1 +f 266/1/2 265/2/2 269/3/2 +f 267/4/5 271/5/5 269/6/5 +f 270/78/6 272/4/6 268/5/6 +f 276/4/2 275/5/2 273/6/2 +f 280/4/3 279/5/3 275/6/3 +f 278/4/4 277/5/4 279/6/4 +f 274/4/1 273/5/1 277/6/1 +f 275/4/5 279/5/5 277/6/5 +f 280/4/6 276/5/6 274/6/6 +f 284/4/2 283/5/2 281/6/2 +f 288/4/3 287/5/3 283/6/3 +f 286/4/4 285/5/4 287/6/4 +f 286/78/1 282/4/1 281/5/1 +f 283/4/5 287/5/5 285/6/5 +f 288/4/6 284/5/6 282/6/6 +f 292/4/2 291/5/2 289/6/2 +f 296/4/3 295/5/3 291/6/3 +f 294/4/4 293/5/4 295/6/4 +f 294/78/1 290/4/1 289/5/1 +f 291/4/5 295/5/5 293/6/5 +f 296/4/6 292/5/6 290/6/6 +f 300/4/2 299/5/2 297/6/2 +f 304/4/3 303/5/3 299/6/3 +f 302/4/4 301/5/4 303/6/4 +f 298/4/1 297/5/1 301/6/1 +f 299/4/5 303/5/5 301/6/5 +f 304/4/6 300/5/6 298/6/6 +f 308/4/2 307/5/2 305/6/2 +f 312/4/3 311/5/3 307/6/3 +f 310/4/4 309/5/4 311/6/4 +f 306/1/1 305/2/1 309/3/1 +f 307/4/5 311/5/5 309/6/5 +f 312/4/6 308/5/6 306/6/6 +f 2/7/1 4/1/1 1/3/1 +f 4/7/2 8/1/2 3/3/2 +f 8/7/3 6/1/3 7/3/3 +f 6/7/4 2/1/4 5/3/4 +f 1/78/5 3/4/5 5/6/5 +f 2/3/6 6/7/6 4/2/6 +f 10/79/1 12/8/1 9/10/1 +f 12/79/2 16/8/2 11/10/2 +f 16/79/3 14/8/3 15/10/3 +f 14/79/4 10/8/4 13/10/4 +f 9/80/5 11/11/5 13/13/5 +f 14/17/6 16/14/6 10/16/6 +f 18/79/1 20/8/1 17/10/1 +f 20/79/2 24/8/2 19/10/2 +f 24/79/3 22/8/3 23/10/3 +f 22/79/4 18/8/4 21/10/4 +f 17/7/5 19/1/5 21/3/5 +f 18/16/6 22/17/6 20/15/6 +f 26/81/1 28/18/1 25/20/1 +f 28/81/2 32/18/2 27/20/2 +f 32/81/3 30/18/3 31/20/3 +f 30/81/4 26/18/4 29/20/4 +f 25/7/5 27/1/5 29/3/5 +f 26/82/6 30/21/6 28/23/6 +f 34/79/1 36/8/1 33/10/1 +f 36/79/2 40/8/2 35/10/2 +f 40/79/3 38/8/3 39/10/3 +f 38/79/4 34/8/4 37/10/4 +f 33/7/5 35/1/5 37/3/5 +f 38/7/6 40/1/6 34/3/6 +f 42/83/1 44/24/1 41/26/1 +f 44/83/2 48/24/2 43/26/2 +f 48/83/3 46/24/3 47/26/3 +f 46/83/4 42/24/4 45/26/4 +f 41/84/5 43/27/5 45/29/5 +f 46/85/6 48/30/6 42/32/6 +f 50/7/1 52/1/1 49/3/1 +f 52/45/2 56/33/2 51/35/2 +f 56/86/3 54/36/3 55/38/3 +f 54/87/4 50/39/4 53/41/4 +f 49/7/5 51/1/5 53/3/5 +f 54/88/6 56/42/6 50/44/6 +f 57/35/1 58/45/1 59/34/1 +f 60/7/2 64/1/2 59/3/2 +f 64/89/3 62/46/3 63/48/3 +f 62/7/4 58/1/4 61/3/4 +f 57/7/5 59/1/5 61/3/5 +f 62/88/6 64/42/6 58/44/6 +f 66/90/1 68/49/1 65/51/1 +f 68/7/2 72/1/2 67/3/2 +f 72/45/3 70/33/3 71/35/3 +f 70/86/4 66/36/4 69/38/4 +f 65/7/5 67/1/5 69/3/5 +f 70/88/6 72/42/6 66/44/6 +f 74/91/1 76/52/1 73/54/1 +f 76/92/2 80/55/2 75/57/2 +f 80/45/3 78/33/3 79/35/3 +f 78/45/4 74/33/4 77/35/4 +f 73/93/5 75/58/5 77/60/5 +f 78/94/6 80/61/6 74/63/6 +f 82/7/1 84/1/1 81/3/1 +f 88/7/3 86/1/3 87/3/3 +f 86/45/4 82/33/4 85/35/4 +f 81/45/5 83/33/5 85/35/5 +f 86/95/6 88/64/6 82/66/6 +f 90/7/1 92/1/1 89/3/1 +f 92/96/2 96/67/2 91/69/2 +f 96/7/3 94/1/3 95/3/3 +f 94/45/4 90/33/4 93/35/4 +f 89/7/5 91/1/5 93/3/5 +f 94/45/6 96/33/6 90/35/6 +f 98/77/1 100/70/1 97/72/1 +f 100/77/2 104/70/2 99/72/2 +f 104/77/3 102/70/3 103/72/3 +f 102/77/4 98/70/4 101/72/4 +f 97/7/5 99/1/5 101/3/5 +f 102/76/6 104/73/6 98/75/6 +f 106/77/1 108/70/1 105/72/1 +f 108/77/2 112/70/2 107/72/2 +f 112/77/3 110/70/3 111/72/3 +f 110/77/4 106/70/4 109/72/4 +f 105/7/5 107/1/5 109/3/5 +f 106/75/6 110/76/6 108/74/6 +f 114/77/1 116/70/1 113/72/1 +f 116/77/2 120/70/2 115/72/2 +f 120/77/3 118/70/3 119/72/3 +f 118/77/4 114/70/4 117/72/4 +f 113/7/5 115/1/5 117/3/5 +f 118/76/6 120/73/6 114/75/6 +f 122/77/1 124/70/1 121/72/1 +f 124/77/2 128/70/2 123/72/2 +f 128/77/3 126/70/3 127/72/3 +f 126/77/4 122/70/4 125/72/4 +f 121/7/5 123/1/5 125/3/5 +f 122/75/6 126/76/6 124/74/6 +f 130/77/1 132/70/1 129/72/1 +f 132/77/2 136/70/2 131/72/2 +f 136/77/3 134/70/3 135/72/3 +f 134/77/4 130/70/4 133/72/4 +f 129/7/5 131/1/5 133/3/5 +f 134/76/6 136/73/6 130/75/6 +f 137/72/1 138/77/1 139/71/1 +f 140/77/2 144/70/2 139/72/2 +f 144/77/3 142/70/3 143/72/3 +f 142/77/4 138/70/4 141/72/4 +f 137/7/5 139/1/5 141/3/5 +f 142/76/6 144/73/6 138/75/6 +f 146/77/1 148/70/1 145/72/1 +f 148/77/2 152/70/2 147/72/2 +f 152/77/3 150/70/3 151/72/3 +f 150/77/4 146/70/4 149/72/4 +f 145/7/5 147/1/5 149/3/5 +f 146/75/6 150/76/6 148/74/6 +f 154/78/1 156/4/1 153/6/1 +f 156/78/2 160/4/2 155/6/2 +f 160/78/3 158/4/3 159/6/3 +f 158/78/4 154/4/4 157/6/4 +f 153/78/5 155/4/5 157/6/5 +f 158/78/6 160/4/6 154/6/6 +f 162/78/1 164/4/1 161/6/1 +f 164/78/2 168/4/2 163/6/2 +f 168/78/3 166/4/3 167/6/3 +f 166/7/4 162/1/4 165/3/4 +f 161/78/5 163/4/5 165/6/5 +f 162/6/6 166/78/6 164/5/6 +f 169/6/1 170/78/1 171/5/1 +f 172/78/2 176/4/2 171/6/2 +f 176/78/3 174/4/3 175/6/3 +f 174/78/4 170/4/4 173/6/4 +f 169/78/5 171/4/5 173/6/5 +f 170/6/6 174/78/6 172/5/6 +f 177/6/1 178/78/1 179/5/1 +f 180/78/2 184/4/2 179/6/2 +f 184/78/3 182/4/3 183/6/3 +f 182/78/4 178/4/4 181/6/4 +f 177/78/5 179/4/5 181/6/5 +f 178/6/6 182/78/6 180/5/6 +f 186/78/1 188/4/1 185/6/1 +f 188/78/2 192/4/2 187/6/2 +f 192/78/3 190/4/3 191/6/3 +f 190/78/4 186/4/4 189/6/4 +f 185/78/5 187/4/5 189/6/5 +f 186/6/6 190/78/6 188/5/6 +f 194/78/4 196/4/4 193/6/4 +f 196/78/1 200/4/1 195/6/1 +f 200/78/2 198/4/2 199/6/2 +f 198/78/3 194/4/3 197/6/3 +f 193/78/5 195/4/5 197/6/5 +f 198/78/6 200/4/6 194/6/6 +f 202/78/4 204/4/4 201/6/4 +f 203/6/1 204/78/1 207/5/1 +f 208/78/2 206/4/2 207/6/2 +f 206/78/3 202/4/3 205/6/3 +f 201/78/5 203/4/5 205/6/5 +f 206/78/6 208/4/6 202/6/6 +f 210/78/4 212/4/4 209/6/4 +f 211/6/1 212/78/1 215/5/1 +f 216/78/2 214/4/2 215/6/2 +f 214/78/3 210/4/3 213/6/3 +f 209/78/5 211/4/5 213/6/5 +f 214/78/6 216/4/6 210/6/6 +f 218/78/4 220/4/4 217/6/4 +f 220/78/1 224/4/1 219/6/1 +f 224/78/2 222/4/2 223/6/2 +f 222/78/3 218/4/3 221/6/3 +f 217/78/5 219/4/5 221/6/5 +f 222/78/6 224/4/6 218/6/6 +f 226/78/4 228/4/4 225/6/4 +f 228/78/1 232/4/1 227/6/1 +f 232/78/2 230/4/2 231/6/2 +f 230/7/3 226/1/3 229/3/3 +f 225/78/5 227/4/5 229/6/5 +f 230/78/6 232/4/6 226/6/6 +f 234/78/3 236/4/3 233/6/3 +f 236/78/4 240/4/4 235/6/4 +f 240/78/1 238/4/1 239/6/1 +f 238/78/2 234/4/2 237/6/2 +f 233/78/5 235/4/5 237/6/5 +f 234/6/6 238/78/6 236/5/6 +f 242/78/3 244/4/3 241/6/3 +f 244/78/4 248/4/4 243/6/4 +f 247/6/1 248/78/1 245/5/1 +f 246/78/2 242/4/2 245/6/2 +f 241/78/5 243/4/5 245/6/5 +f 242/6/6 246/78/6 244/5/6 +f 250/78/3 252/4/3 249/6/3 +f 252/78/4 256/4/4 251/6/4 +f 255/6/1 256/78/1 253/5/1 +f 254/78/2 250/4/2 253/6/2 +f 249/78/5 251/4/5 253/6/5 +f 250/6/6 254/78/6 252/5/6 +f 258/78/3 260/4/3 257/6/3 +f 260/78/4 264/4/4 259/6/4 +f 264/78/1 262/4/1 263/6/1 +f 262/78/2 258/4/2 261/6/2 +f 257/78/5 259/4/5 261/6/5 +f 258/6/6 262/78/6 260/5/6 +f 266/78/3 268/4/3 265/6/3 +f 268/78/4 272/4/4 267/6/4 +f 272/78/1 270/4/1 271/6/1 +f 270/7/2 266/1/2 269/3/2 +f 265/78/5 267/4/5 269/6/5 +f 266/6/6 270/78/6 268/5/6 +f 274/78/2 276/4/2 273/6/2 +f 276/78/3 280/4/3 275/6/3 +f 280/78/4 278/4/4 279/6/4 +f 278/78/1 274/4/1 277/6/1 +f 273/78/5 275/4/5 277/6/5 +f 278/78/6 280/4/6 274/6/6 +f 282/78/2 284/4/2 281/6/2 +f 284/78/3 288/4/3 283/6/3 +f 288/78/4 286/4/4 287/6/4 +f 285/6/1 286/78/1 281/5/1 +f 281/78/5 283/4/5 285/6/5 +f 286/78/6 288/4/6 282/6/6 +f 290/78/2 292/4/2 289/6/2 +f 292/78/3 296/4/3 291/6/3 +f 296/78/4 294/4/4 295/6/4 +f 293/6/1 294/78/1 289/5/1 +f 289/78/5 291/4/5 293/6/5 +f 294/78/6 296/4/6 290/6/6 +f 298/78/2 300/4/2 297/6/2 +f 300/78/3 304/4/3 299/6/3 +f 304/78/4 302/4/4 303/6/4 +f 302/78/1 298/4/1 301/6/1 +f 297/78/5 299/4/5 301/6/5 +f 302/78/6 304/4/6 298/6/6 +f 306/78/2 308/4/2 305/6/2 +f 308/78/3 312/4/3 307/6/3 +f 312/78/4 310/4/4 311/6/4 +f 310/7/1 306/1/1 309/3/1 +f 305/78/5 307/4/5 309/6/5 +f 310/78/6 312/4/6 306/6/6 +usemtl None_rocketT1.png.001 +f 88/97/2 87/98/2 83/99/2 +f 316/33/1 315/34/1 313/35/1 +f 320/100/2 319/101/2 315/102/2 +f 318/103/3 317/104/3 319/105/3 +f 314/106/4 313/107/4 317/108/4 +f 315/109/5 319/108/5 317/110/5 +f 320/111/6 316/112/6 314/113/6 +f 84/114/2 88/97/2 83/99/2 +f 314/45/1 316/33/1 313/35/1 +f 316/115/2 320/100/2 315/102/2 +f 320/116/3 318/103/3 319/105/3 +f 318/109/4 314/106/4 317/108/4 +f 313/117/5 315/109/5 317/110/5 +f 318/118/6 320/111/6 314/113/6 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.mtl new file mode 100644 index 00000000..96fbad2a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.mtl @@ -0,0 +1,10 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 + +newmtl None_bubble.png +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:blocks/bubble diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.obj new file mode 100644 index 00000000..e78bfe28 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.obj @@ -0,0 +1,1055 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib sphere.mtl +o Sphere +v -0.809017 0.587785 0.000000 +v -0.587785 0.809017 0.000000 +v -0.529576 0.809017 -0.255031 +v -0.951057 0.309017 0.000000 +v -0.728899 0.587785 -0.351019 +v -1.000000 0.000000 0.000000 +v -0.856872 0.309017 -0.412648 +v -0.951056 -0.309017 -0.000000 +v -0.900969 0.000000 -0.433884 +v -0.809017 -0.587785 -0.000000 +v -0.728899 -0.587785 -0.351019 +v -0.309017 0.951057 0.000000 +v -0.278415 0.951056 -0.134078 +v -0.623490 0.000000 -0.781832 +v -0.856872 -0.309017 -0.412648 +v -0.592974 -0.309017 -0.743566 +v -0.529576 -0.809017 -0.255031 +v -0.366478 -0.809017 -0.459549 +v -0.192669 0.951056 -0.241599 +v -0.278414 -0.951057 -0.134078 +v -0.504414 0.587785 -0.632515 +v -0.192669 -0.951057 -0.241599 +v -0.130794 -0.809017 -0.573048 +v -0.366478 0.809017 -0.459549 +v -0.130794 0.809017 -0.573048 +v -0.592974 0.309017 -0.743566 +v -0.180023 0.587785 -0.788734 +v -0.211630 0.309017 -0.927212 +v -0.211630 -0.309017 -0.927212 +v -0.504414 -0.587785 -0.632515 +v -0.180023 -0.587785 -0.788734 +v -0.068762 0.951056 -0.301270 +v 0.211630 -0.309017 -0.927212 +v 0.180024 -0.587785 -0.788733 +v 0.130795 0.809017 -0.573048 +v -0.068762 -0.951057 -0.301269 +v 0.130795 -0.809017 -0.573048 +v 0.211630 0.309017 -0.927212 +v -0.222521 0.000000 -0.974928 +v 0.180024 0.587785 -0.788733 +v 0.592974 0.309017 -0.743566 +v 0.222521 0.000000 -0.974928 +v 0.623490 0.000000 -0.781832 +v 0.592974 -0.309017 -0.743566 +v 0.366479 -0.809017 -0.459549 +v 0.068763 0.951056 -0.301270 +v 0.192669 0.951056 -0.241599 +v 0.068763 -0.951057 -0.301269 +v 0.366479 0.809017 -0.459549 +v 0.504414 -0.587785 -0.632515 +v 0.529577 -0.809017 -0.255031 +v 0.278415 0.951056 -0.134078 +v 0.192669 -0.951057 -0.241599 +v 0.504414 0.587785 -0.632515 +v 0.529577 0.809017 -0.255031 +v 0.856873 0.309017 -0.412648 +v 0.900969 0.000000 -0.433884 +v 0.856873 -0.309017 -0.412648 +v 0.951057 0.309017 0.000000 +v 0.951057 -0.309017 -0.000000 +v 0.728900 -0.587785 -0.351019 +v 0.809017 -0.587785 -0.000000 +v 0.309018 0.951056 0.000000 +v 0.278415 -0.951057 -0.134077 +v 0.587786 -0.809017 -0.000000 +v 0.728900 0.587785 -0.351019 +v 0.587786 0.809017 0.000000 +v 0.309017 -0.951057 -0.000000 +v 0.529577 -0.809017 0.255031 +v 0.809017 0.587785 0.000000 +v 0.529577 0.809017 0.255031 +v 0.856873 0.309017 0.412648 +v 1.000001 0.000000 0.000000 +v 0.856873 -0.309017 0.412648 +v 0.728900 -0.587785 0.351019 +v 0.278415 0.951056 0.134078 +v 0.900969 -0.000000 0.433884 +v 0.623490 -0.000000 0.781832 +v 0.592974 -0.309017 0.743566 +v 0.504414 -0.587785 0.632515 +v 0.192669 0.951056 0.241599 +v 0.278415 -0.951057 0.134077 +v 0.366479 -0.809017 0.459549 +v 0.728900 0.587785 0.351019 +v 0.366479 0.809017 0.459549 +v 0.504414 0.587785 0.632515 +v 0.592974 0.309017 0.743566 +v 0.180024 0.587785 0.788733 +v 0.211630 0.309017 0.927212 +v 0.211630 -0.309017 0.927212 +v 0.130795 -0.809017 0.573048 +v 0.130795 0.809017 0.573048 +v 0.192669 -0.951057 0.241599 +v 0.068763 -0.951057 0.301269 +v 0.180024 -0.587785 0.788733 +v -0.130794 -0.809017 0.573048 +v 0.068763 0.951056 0.301270 +v -0.068762 0.951056 0.301270 +v -0.130794 0.809017 0.573048 +v -0.211630 0.309017 0.927212 +v 0.222521 -0.000000 0.974928 +v -0.222521 -0.000000 0.974928 +v -0.211630 -0.309017 0.927212 +v -0.623490 -0.000000 0.781832 +v -0.180023 -0.587785 0.788733 +v -0.592974 -0.309017 0.743566 +v -0.504414 -0.587785 0.632515 +v -0.192669 0.951056 0.241599 +v -0.068762 -0.951057 0.301269 +v -0.366478 -0.809017 0.459549 +v -0.180023 0.587785 0.788733 +v -0.366478 0.809017 0.459549 +v -0.504414 0.587785 0.632515 +v -0.192669 -0.951057 0.241599 +v -0.278414 -0.951057 0.134077 +v -0.529576 0.809017 0.255031 +v -0.592974 0.309017 0.743566 +v -0.728899 0.587785 0.351019 +v -0.900969 -0.000000 0.433884 +v -0.856872 -0.309017 0.412648 +v -0.529576 -0.809017 0.255031 +v -0.278415 0.951056 0.134078 +v -0.309017 -0.951057 -0.000000 +v -0.587785 -0.809017 -0.000000 +v 0.000000 -1.000000 -0.000000 +v 0.000000 1.000000 0.000000 +v -0.728899 -0.587785 0.351019 +v -0.856872 0.309017 0.412648 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.698100 0.698100 -0.159300 +vn -0.873100 0.444900 -0.199300 +vn -0.963500 0.152600 -0.219900 +vn -0.963500 -0.152600 -0.219900 +vn -0.873100 -0.444900 -0.199300 +vn -0.451600 0.886300 -0.103100 +vn -0.772700 0.152600 -0.616200 +vn -0.772700 -0.152600 -0.616200 +vn -0.700200 -0.444900 -0.558400 +vn -0.559800 -0.698100 -0.446400 +vn -0.362100 0.886300 -0.288800 +vn -0.362100 -0.886300 -0.288800 +vn -0.559800 0.698100 -0.446400 +vn -0.700200 0.444900 -0.558400 +vn -0.201000 -0.886300 -0.417300 +vn -0.310700 0.698100 -0.645100 +vn -0.388600 0.444900 -0.806900 +vn -0.428800 0.152600 -0.890400 +vn -0.428800 -0.152600 -0.890400 +vn -0.388600 -0.444900 -0.806900 +vn -0.310700 -0.698100 -0.645100 +vn -0.201000 0.886300 -0.417300 +vn 0.000000 -0.444900 -0.895600 +vn 0.000000 -0.698100 -0.716000 +vn 0.000000 0.886300 -0.463200 +vn 0.000000 -0.886300 -0.463200 +vn 0.000000 0.698100 -0.716000 +vn 0.000000 0.444900 -0.895600 +vn 0.000000 0.152600 -0.988300 +vn 0.000000 -0.152600 -0.988300 +vn 0.388600 0.444900 -0.806900 +vn 0.428800 0.152600 -0.890400 +vn 0.428800 -0.152600 -0.890400 +vn 0.388600 -0.444900 -0.806900 +vn 0.310700 -0.698100 -0.645100 +vn 0.201000 0.886300 -0.417300 +vn 0.201000 -0.886300 -0.417300 +vn 0.310700 0.698100 -0.645100 +vn 0.559800 -0.698100 -0.446400 +vn 0.362100 0.886300 -0.288800 +vn 0.362100 -0.886300 -0.288800 +vn 0.559800 0.698100 -0.446400 +vn 0.700200 0.444900 -0.558400 +vn 0.772700 0.152600 -0.616200 +vn 0.772700 -0.152600 -0.616200 +vn 0.700200 -0.444900 -0.558400 +vn 0.963500 0.152600 -0.219900 +vn 0.963500 -0.152600 -0.219900 +vn 0.873100 -0.444900 -0.199300 +vn 0.698100 -0.698100 -0.159300 +vn 0.451600 0.886300 -0.103100 +vn 0.451600 -0.886300 -0.103100 +vn 0.698100 0.698100 -0.159300 +vn 0.873100 0.444900 -0.199300 +vn 0.451600 -0.886300 0.103100 +vn 0.698100 0.698100 0.159300 +vn 0.873100 0.444900 0.199300 +vn 0.963500 0.152600 0.219900 +vn 0.963500 -0.152600 0.219900 +vn 0.873100 -0.444900 0.199300 +vn 0.698100 -0.698100 0.159300 +vn 0.451600 0.886300 0.103100 +vn 0.772700 -0.152600 0.616200 +vn 0.700200 -0.444900 0.558400 +vn 0.559800 -0.698100 0.446400 +vn 0.362100 0.886300 0.288800 +vn 0.362100 -0.886300 0.288800 +vn 0.559800 0.698100 0.446400 +vn 0.700200 0.444900 0.558400 +vn 0.772700 0.152600 0.616200 +vn 0.388600 0.444900 0.806900 +vn 0.428800 0.152600 0.890400 +vn 0.428800 -0.152600 0.890400 +vn 0.388600 -0.444900 0.806900 +vn 0.310700 -0.698100 0.645100 +vn 0.201000 0.886300 0.417300 +vn 0.201000 -0.886300 0.417300 +vn 0.310700 0.698100 0.645100 +vn 0.000000 -0.698100 0.716000 +vn 0.000000 0.886300 0.463200 +vn 0.000000 -0.886300 0.463200 +vn 0.000000 0.698100 0.716000 +vn 0.000000 0.444900 0.895600 +vn 0.000000 0.152600 0.988300 +vn 0.000000 -0.152600 0.988300 +vn 0.000000 -0.444900 0.895600 +vn -0.428800 0.152600 0.890400 +vn -0.428800 -0.152600 0.890400 +vn -0.388600 -0.444900 0.806900 +vn -0.310700 -0.698100 0.645100 +vn -0.201000 0.886300 0.417300 +vn -0.201000 -0.886300 0.417300 +vn -0.310700 0.698100 0.645100 +vn -0.388600 0.444900 0.806900 +vn -0.362100 -0.886300 0.288800 +vn -0.559800 0.698100 0.446400 +vn -0.700200 0.444900 0.558400 +vn -0.772700 0.152600 0.616200 +vn -0.772700 -0.152600 0.616200 +vn -0.700200 -0.444900 0.558400 +vn -0.559800 -0.698100 0.446400 +vn -0.362100 0.886300 0.288800 +vn -0.451600 -0.886300 -0.103100 +vn -0.156300 -0.987100 -0.035700 +vn -0.156300 0.987100 -0.035700 +vn -0.698100 -0.698100 -0.159300 +vn -0.125400 0.987100 -0.100000 +vn -0.125400 -0.987100 -0.100000 +vn -0.069600 -0.987100 -0.144500 +vn -0.069600 0.987100 -0.144500 +vn 0.000000 0.987100 -0.160400 +vn 0.000000 -0.987100 -0.160400 +vn 0.069600 -0.987100 -0.144500 +vn 0.069600 0.987100 -0.144500 +vn 0.125400 -0.987100 -0.100000 +vn 0.125400 0.987100 -0.100000 +vn 0.156300 0.987100 -0.035700 +vn 0.156300 -0.987100 -0.035700 +vn 0.156300 -0.987100 0.035700 +vn 0.156300 0.987100 0.035700 +vn 0.125400 0.987100 0.100000 +vn 0.125400 -0.987100 0.100000 +vn 0.069600 -0.987100 0.144500 +vn 0.069600 0.987100 0.144500 +vn 0.000000 0.987100 0.160400 +vn 0.000000 -0.987100 0.160400 +vn -0.069600 0.987100 0.144500 +vn -0.069600 -0.987100 0.144500 +vn -0.125400 -0.987100 0.100000 +vn -0.125400 0.987100 0.100000 +vn -0.963500 -0.152600 0.219900 +vn -0.873100 -0.444900 0.199300 +vn -0.156300 0.987100 0.035700 +vn -0.698100 -0.698100 0.159300 +vn -0.451600 0.886300 0.103100 +vn -0.451600 -0.886300 0.103100 +vn -0.698100 0.698100 0.159300 +vn -0.156300 -0.987100 0.035700 +vn -0.873100 0.444900 0.199300 +vn -0.963500 0.152600 0.219900 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 4/1/2 1/2/2 5/3/2 +f 6/1/3 4/2/3 7/3/3 +f 8/1/4 6/2/4 9/3/4 +f 10/1/5 8/2/5 11/4/5 +f 2/1/6 12/2/6 13/3/6 +f 9/1/7 7/2/7 14/4/7 +f 15/1/8 9/2/8 14/3/8 +f 11/1/9 15/2/9 16/3/9 +f 17/1/10 11/2/10 18/4/10 +f 3/1/11 13/2/11 19/3/11 +f 20/1/12 17/2/12 18/3/12 +f 5/1/13 3/2/13 21/4/13 +f 7/1/14 5/2/14 21/3/14 +f 22/1/15 18/2/15 23/3/15 +f 21/1/16 24/2/16 25/3/16 +f 26/1/17 21/2/17 27/3/17 +f 14/1/18 26/2/18 28/3/18 +f 16/1/19 14/2/19 29/4/19 +f 30/1/20 16/2/20 29/3/20 +f 18/1/21 30/2/21 31/3/21 +f 24/1/22 19/2/22 32/3/22 +f 31/1/23 29/2/23 33/3/23 +f 23/1/24 31/2/24 34/3/24 +f 25/1/25 32/2/25 35/4/25 +f 36/1/26 23/2/26 37/3/26 +f 27/1/27 25/2/27 35/3/27 +f 28/1/28 27/2/28 38/4/28 +f 39/1/29 28/2/29 38/3/29 +f 29/1/30 39/2/30 33/4/30 +f 38/1/31 40/2/31 41/4/31 +f 42/1/32 38/2/32 41/3/32 +f 33/1/33 42/2/33 43/3/33 +f 34/1/34 33/2/34 44/3/34 +f 37/1/35 34/2/35 45/4/35 +f 35/1/36 46/2/36 47/3/36 +f 48/1/37 37/2/37 45/3/37 +f 40/1/38 35/2/38 49/3/38 +f 45/1/39 50/2/39 51/4/39 +f 49/1/40 47/2/40 52/3/40 +f 53/1/41 45/2/41 51/3/41 +f 54/1/42 49/2/42 55/3/42 +f 41/1/43 54/2/43 56/4/43 +f 43/1/44 41/2/44 56/3/44 +f 44/1/45 43/2/45 57/3/45 +f 50/1/46 44/2/46 58/3/46 +f 57/1/47 56/2/47 59/3/47 +f 58/1/48 57/2/48 60/4/48 +f 61/1/49 58/2/49 60/3/49 +f 51/1/50 61/2/50 62/3/50 +f 55/1/51 52/2/51 63/3/51 +f 64/1/52 51/2/52 65/3/52 +f 66/1/53 55/2/53 67/3/53 +f 56/1/54 66/2/54 59/4/54 +f 68/1/55 65/2/55 69/3/55 +f 70/1/56 67/2/56 71/3/56 +f 59/1/57 70/2/57 72/4/57 +f 73/1/58 59/2/58 72/3/58 +f 60/1/59 73/2/59 74/4/59 +f 62/1/60 60/2/60 74/3/60 +f 65/1/61 62/2/61 75/3/61 +f 67/1/62 63/2/62 76/3/62 +f 74/1/63 77/2/63 78/3/63 +f 75/1/64 74/2/64 79/3/64 +f 69/1/65 75/2/65 80/3/65 +f 71/1/66 76/2/66 81/3/66 +f 82/1/67 69/2/67 83/3/67 +f 84/1/68 71/2/68 85/3/68 +f 72/1/69 84/2/69 86/3/69 +f 77/1/70 72/2/70 87/3/70 +f 87/1/71 86/2/71 88/3/71 +f 78/1/72 87/2/72 89/3/72 +f 79/1/73 78/2/73 90/4/73 +f 80/1/74 79/2/74 90/3/74 +f 83/1/75 80/2/75 91/4/75 +f 85/1/76 81/2/76 92/4/76 +f 93/1/77 83/2/77 94/4/77 +f 86/1/78 85/2/78 88/4/78 +f 91/1/79 95/2/79 96/4/79 +f 92/1/80 97/2/80 98/3/80 +f 94/1/81 91/2/81 96/3/81 +f 88/1/82 92/2/82 99/3/82 +f 89/1/83 88/2/83 100/4/83 +f 101/1/84 89/2/84 102/4/84 +f 90/1/85 101/2/85 102/3/85 +f 95/1/86 90/2/86 103/3/86 +f 102/1/87 100/2/87 104/4/87 +f 103/1/88 102/2/88 104/3/88 +f 105/1/89 103/2/89 106/3/89 +f 96/1/90 105/2/90 107/3/90 +f 99/1/91 98/2/91 108/3/91 +f 109/1/92 96/2/92 110/3/92 +f 111/1/93 99/2/93 112/3/93 +f 100/1/94 111/2/94 113/3/94 +f 114/1/95 110/2/95 115/4/95 +f 113/1/96 112/2/96 116/3/96 +f 117/1/97 113/2/97 118/3/97 +f 104/1/98 117/2/98 119/4/98 +f 106/1/99 104/2/99 120/4/99 +f 107/1/100 106/2/100 120/3/100 +f 110/1/101 107/2/101 121/4/101 +f 112/1/102 108/2/102 122/3/102 +f 123/1/103 124/2/103 17/3/103 +f 125/1/104 123/2/104 20/3/104 +f 12/1/105 126/2/105 13/3/105 +f 124/1/106 10/2/106 11/3/106 +f 13/1/107 126/2/107 19/3/107 +f 125/1/108 20/2/108 22/3/108 +f 125/1/109 22/2/109 36/3/109 +f 19/1/110 126/2/110 32/3/110 +f 32/1/111 126/2/111 46/3/111 +f 125/1/112 36/2/112 48/3/112 +f 125/1/113 48/2/113 53/3/113 +f 46/1/114 126/2/114 47/3/114 +f 125/1/115 53/2/115 64/3/115 +f 47/1/116 126/2/116 52/3/116 +f 52/1/117 126/2/117 63/3/117 +f 125/1/118 64/2/118 68/3/118 +f 125/1/119 68/2/119 82/3/119 +f 63/1/120 126/2/120 76/3/120 +f 76/1/121 126/2/121 81/3/121 +f 125/1/122 82/2/122 93/3/122 +f 125/1/123 93/2/123 94/3/123 +f 81/1/124 126/2/124 97/3/124 +f 97/1/125 126/2/125 98/3/125 +f 125/1/126 94/2/126 109/3/126 +f 98/1/127 126/2/127 108/3/127 +f 125/1/128 109/2/128 114/3/128 +f 125/1/129 114/2/129 115/3/129 +f 108/1/130 126/2/130 122/3/130 +f 120/1/131 119/2/131 8/4/131 +f 127/1/132 120/2/132 8/3/132 +f 122/1/133 126/2/133 12/3/133 +f 121/1/134 127/2/134 10/3/134 +f 116/1/135 122/2/135 12/3/135 +f 115/1/136 121/2/136 123/4/136 +f 118/1/137 116/2/137 1/4/137 +f 125/1/138 115/2/138 123/3/138 +f 128/1/139 118/2/139 1/3/139 +f 119/1/140 128/2/140 4/3/140 +f 5/4/1 1/1/1 3/3/1 +f 7/4/2 4/1/2 5/3/2 +f 9/4/3 6/1/3 7/3/3 +f 15/4/4 8/1/4 9/3/4 +f 117/2/98 128/3/98 119/4/98 +f 3/4/6 2/1/6 13/3/6 +f 81/2/76 97/3/76 92/4/76 +f 16/4/8 15/1/8 14/3/8 +f 30/4/9 11/1/9 16/3/9 +f 80/2/75 95/3/75 91/4/75 +f 24/4/11 3/1/11 19/3/11 +f 22/4/12 20/1/12 18/3/12 +f 50/2/39 61/3/39 51/4/39 +f 26/4/14 7/1/14 21/3/14 +f 36/4/15 22/1/15 23/3/15 +f 27/4/16 21/1/16 25/3/16 +f 28/4/17 26/1/17 27/3/17 +f 39/4/18 14/1/18 28/3/18 +f 119/2/131 6/3/131 8/4/131 +f 31/4/20 30/1/20 29/3/20 +f 23/4/21 18/1/21 31/3/21 +f 25/4/22 24/1/22 32/3/22 +f 34/4/23 31/1/23 33/3/23 +f 37/4/24 23/1/24 34/3/24 +f 89/2/84 100/3/84 102/4/84 +f 48/4/26 36/1/26 37/3/26 +f 40/4/27 27/1/27 35/3/27 +f 88/2/83 111/3/83 100/4/83 +f 42/4/29 39/1/29 38/3/29 +f 85/2/78 92/3/78 88/4/78 +f 66/2/54 70/3/54 59/4/54 +f 43/4/32 42/1/32 41/3/32 +f 44/4/33 33/1/33 43/3/33 +f 50/4/34 34/1/34 44/3/34 +f 32/2/25 46/3/25 35/4/25 +f 49/4/36 35/1/36 47/3/36 +f 53/4/37 48/1/37 45/3/37 +f 54/4/38 40/1/38 49/3/38 +f 121/2/136 124/3/136 123/4/136 +f 55/4/40 49/1/40 52/3/40 +f 64/4/41 53/1/41 51/3/41 +f 66/4/42 54/1/42 55/3/42 +f 73/2/59 77/3/59 74/4/59 +f 57/4/44 43/1/44 56/3/44 +f 58/4/45 44/1/45 57/3/45 +f 61/4/46 50/1/46 58/3/46 +f 73/4/47 57/1/47 59/3/47 +f 14/2/19 39/3/19 29/4/19 +f 62/4/49 61/1/49 60/3/49 +f 65/4/50 51/1/50 62/3/50 +f 67/4/51 55/1/51 63/3/51 +f 68/4/52 64/1/52 65/3/52 +f 70/4/53 66/1/53 67/3/53 +f 70/2/57 84/3/57 72/4/57 +f 82/4/55 68/1/55 69/3/55 +f 84/4/56 70/1/56 71/3/56 +f 7/2/7 26/3/7 14/4/7 +f 77/4/58 73/1/58 72/3/58 +f 40/2/31 54/3/31 41/4/31 +f 75/4/60 62/1/60 74/3/60 +f 69/4/61 65/1/61 75/3/61 +f 71/4/62 67/1/62 76/3/62 +f 79/4/63 74/1/63 78/3/63 +f 80/4/64 75/1/64 79/3/64 +f 83/4/65 69/1/65 80/3/65 +f 85/4/66 71/1/66 81/3/66 +f 93/4/67 82/1/67 83/3/67 +f 86/4/68 84/1/68 85/3/68 +f 87/4/69 72/1/69 86/3/69 +f 78/4/70 77/1/70 87/3/70 +f 89/4/71 87/1/71 88/3/71 +f 101/4/72 78/1/72 89/3/72 +f 116/2/137 2/3/137 1/4/137 +f 95/4/74 80/1/74 90/3/74 +f 27/2/28 40/3/28 38/4/28 +f 11/2/10 30/3/10 18/4/10 +f 110/2/95 121/3/95 115/4/95 +f 83/2/77 91/3/77 94/4/77 +f 99/4/80 92/1/80 98/3/80 +f 109/4/81 94/1/81 96/3/81 +f 111/4/82 88/1/82 99/3/82 +f 57/2/48 73/3/48 60/4/48 +f 39/2/30 42/3/30 33/4/30 +f 103/4/85 90/1/85 102/3/85 +f 105/4/86 95/1/86 103/3/86 +f 95/2/79 105/3/79 96/4/79 +f 106/4/88 103/1/88 104/3/88 +f 107/4/89 105/1/89 106/3/89 +f 110/4/90 96/1/90 107/3/90 +f 112/4/91 99/1/91 108/3/91 +f 114/4/92 109/1/92 110/3/92 +f 113/4/93 111/1/93 112/3/93 +f 117/4/94 100/1/94 113/3/94 +f 8/2/5 15/3/5 11/4/5 +f 118/4/96 113/1/96 116/3/96 +f 128/4/97 117/1/97 118/3/97 +f 34/2/35 50/3/35 45/4/35 +f 107/2/101 127/3/101 121/4/101 +f 127/4/100 107/1/100 120/3/100 +f 78/2/73 101/3/73 90/4/73 +f 116/4/102 112/1/102 122/3/102 +f 20/4/103 123/1/103 17/3/103 +f 17/4/106 124/1/106 11/3/106 +f 104/2/99 119/3/99 120/4/99 +f 10/4/132 127/1/132 8/3/132 +f 124/4/134 121/1/134 10/3/134 +f 2/4/135 116/1/135 12/3/135 +f 100/2/87 117/3/87 104/4/87 +f 3/2/13 24/3/13 21/4/13 +f 4/4/139 128/1/139 1/3/139 +f 6/4/140 119/1/140 4/3/140 +f 54/2/43 66/3/43 56/4/43 +o SphereInner +v -0.809025 0.587791 0.000000 +v -0.529581 0.809025 -0.255033 +v -0.587791 0.809025 0.000000 +v -0.951066 0.309020 0.000000 +v -0.728906 0.587791 -0.351023 +v -1.000010 0.000000 0.000000 +v -0.856881 0.309020 -0.412652 +v -0.951066 -0.309020 -0.000000 +v -0.900978 0.000000 -0.433888 +v -0.809025 -0.587791 -0.000000 +v -0.728906 -0.587791 -0.351023 +v -0.278417 0.951066 -0.134079 +v -0.309020 0.951066 0.000000 +v -0.623496 0.000000 -0.781840 +v -0.856881 -0.309020 -0.412652 +v -0.592980 -0.309020 -0.743574 +v -0.529581 -0.809025 -0.255033 +v -0.366482 -0.809025 -0.459554 +v -0.192671 0.951066 -0.241602 +v -0.278417 -0.951066 -0.134079 +v -0.504419 0.587791 -0.632522 +v -0.192671 -0.951066 -0.241602 +v -0.130796 -0.809025 -0.573054 +v -0.130796 0.809025 -0.573054 +v -0.366482 0.809025 -0.459554 +v -0.592980 0.309020 -0.743574 +v -0.180025 0.587791 -0.788741 +v -0.211632 0.309020 -0.927221 +v -0.211632 -0.309020 -0.927221 +v -0.504419 -0.587791 -0.632522 +v -0.180025 -0.587791 -0.788741 +v -0.068763 0.951066 -0.301273 +v 0.211632 -0.309020 -0.927221 +v 0.180025 -0.587791 -0.788741 +v 0.130796 0.809025 -0.573054 +v -0.068763 -0.951066 -0.301272 +v 0.130796 -0.809025 -0.573054 +v 0.211632 0.309020 -0.927221 +v -0.222523 0.000000 -0.974938 +v 0.592980 0.309020 -0.743574 +v 0.180025 0.587791 -0.788741 +v 0.222524 0.000000 -0.974938 +v 0.623497 0.000000 -0.781839 +v 0.592980 -0.309020 -0.743574 +v 0.366482 -0.809025 -0.459554 +v 0.192671 0.951066 -0.241602 +v 0.068764 0.951066 -0.301273 +v 0.068764 -0.951066 -0.301272 +v 0.366482 0.809025 -0.459554 +v 0.529582 -0.809025 -0.255033 +v 0.504419 -0.587791 -0.632521 +v 0.278418 0.951066 -0.134079 +v 0.192671 -0.951066 -0.241602 +v 0.504419 0.587791 -0.632521 +v 0.529582 0.809025 -0.255033 +v 0.856881 0.309020 -0.412652 +v 0.900978 0.000000 -0.433888 +v 0.856881 -0.309020 -0.412652 +v 0.951066 0.309020 0.000000 +v 0.951066 -0.309020 -0.000000 +v 0.728907 -0.587791 -0.351023 +v 0.809026 -0.587791 -0.000000 +v 0.309021 0.951066 0.000000 +v 0.278418 -0.951066 -0.134079 +v 0.587792 -0.809025 -0.000000 +v 0.728907 0.587791 -0.351023 +v 0.587792 0.809025 0.000000 +v 0.309020 -0.951066 -0.000000 +v 0.529582 -0.809025 0.255033 +v 0.809026 0.587791 0.000000 +v 0.529582 0.809025 0.255033 +v 0.856881 0.309020 0.412652 +v 1.000011 0.000000 0.000000 +v 0.856881 -0.309020 0.412652 +v 0.728907 -0.587791 0.351023 +v 0.278418 0.951066 0.134079 +v 0.623497 -0.000000 0.781839 +v 0.900978 -0.000000 0.433888 +v 0.592980 -0.309020 0.743573 +v 0.504419 -0.587791 0.632521 +v 0.192671 0.951066 0.241602 +v 0.278418 -0.951066 0.134079 +v 0.366482 -0.809025 0.459554 +v 0.728907 0.587791 0.351023 +v 0.366482 0.809025 0.459554 +v 0.504419 0.587791 0.632521 +v 0.592980 0.309020 0.743573 +v 0.180025 0.587791 0.788741 +v 0.211632 0.309020 0.927221 +v 0.211633 -0.309020 0.927221 +v 0.130796 -0.809025 0.573054 +v 0.130796 0.809025 0.573054 +v 0.192671 -0.951066 0.241602 +v 0.068764 -0.951066 0.301272 +v -0.130796 -0.809025 0.573054 +v 0.180025 -0.587791 0.788741 +v -0.068763 0.951066 0.301273 +v 0.068764 0.951066 0.301273 +v -0.130796 0.809025 0.573054 +v -0.211632 0.309020 0.927221 +v 0.222524 -0.000000 0.974938 +v -0.222523 -0.000000 0.974938 +v -0.211632 -0.309020 0.927221 +v -0.623496 -0.000000 0.781839 +v -0.180025 -0.587791 0.788741 +v -0.592980 -0.309020 0.743573 +v -0.504419 -0.587791 0.632521 +v -0.192671 0.951066 0.241602 +v -0.068763 -0.951066 0.301272 +v -0.366482 -0.809025 0.459554 +v -0.180025 0.587791 0.788741 +v -0.366482 0.809025 0.459554 +v -0.504419 0.587791 0.632521 +v -0.192671 -0.951066 0.241602 +v -0.278417 -0.951066 0.134079 +v -0.529581 0.809025 0.255033 +v -0.592980 0.309020 0.743573 +v -0.728906 0.587791 0.351023 +v -0.900978 -0.000000 0.433888 +v -0.856880 -0.309020 0.412652 +v -0.529581 -0.809025 0.255033 +v -0.278417 0.951066 0.134079 +v -0.309020 -0.951066 -0.000000 +v -0.587791 -0.809025 -0.000000 +v 0.000000 -1.000010 -0.000000 +v 0.000000 1.000010 0.000000 +v -0.728906 -0.587791 0.351023 +v -0.856881 0.309020 0.412652 +vt 0.000000 0.000000 +vt 1.000000 1.000000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vn 0.698100 -0.698100 0.159300 +vn 0.873100 -0.444900 0.199300 +vn 0.963500 -0.152600 0.219900 +vn 0.963500 0.152600 0.219900 +vn 0.873100 0.444900 0.199300 +vn 0.451600 -0.886300 0.103100 +vn 0.772700 -0.152600 0.616200 +vn 0.772700 0.152600 0.616200 +vn 0.700200 0.444900 0.558400 +vn 0.559800 0.698100 0.446400 +vn 0.362100 -0.886300 0.288800 +vn 0.362100 0.886300 0.288800 +vn 0.559800 -0.698100 0.446400 +vn 0.700200 -0.444900 0.558400 +vn 0.201000 0.886300 0.417300 +vn 0.310700 -0.698100 0.645100 +vn 0.388600 -0.444900 0.806900 +vn 0.428800 -0.152600 0.890400 +vn 0.428800 0.152600 0.890400 +vn 0.388600 0.444900 0.806900 +vn 0.310700 0.698100 0.645100 +vn 0.201000 -0.886300 0.417300 +vn 0.000000 0.444900 0.895600 +vn 0.000000 0.698100 0.716000 +vn 0.000000 -0.886300 0.463200 +vn 0.000000 0.886300 0.463200 +vn 0.000000 -0.698100 0.716000 +vn 0.000000 -0.444900 0.895600 +vn 0.000000 -0.152600 0.988300 +vn 0.000000 0.152600 0.988300 +vn -0.388600 -0.444900 0.806900 +vn -0.428800 -0.152600 0.890400 +vn -0.428800 0.152600 0.890400 +vn -0.388600 0.444900 0.806900 +vn -0.310700 0.698100 0.645100 +vn -0.201000 -0.886300 0.417300 +vn -0.201000 0.886300 0.417300 +vn -0.310700 -0.698100 0.645100 +vn -0.559800 0.698100 0.446400 +vn -0.362100 -0.886300 0.288800 +vn -0.362100 0.886300 0.288800 +vn -0.559800 -0.698100 0.446400 +vn -0.700200 -0.444900 0.558400 +vn -0.772700 -0.152600 0.616200 +vn -0.772700 0.152600 0.616200 +vn -0.700200 0.444900 0.558400 +vn -0.963500 -0.152600 0.219900 +vn -0.963500 0.152600 0.219900 +vn -0.873100 0.444900 0.199300 +vn -0.698100 0.698100 0.159300 +vn -0.451600 -0.886300 0.103100 +vn -0.451600 0.886300 0.103100 +vn -0.698100 -0.698100 0.159300 +vn -0.873100 -0.444900 0.199300 +vn -0.451600 0.886300 -0.103100 +vn -0.698100 -0.698100 -0.159300 +vn -0.873100 -0.444900 -0.199300 +vn -0.963500 -0.152600 -0.219900 +vn -0.963500 0.152600 -0.219900 +vn -0.873100 0.444900 -0.199300 +vn -0.698100 0.698100 -0.159300 +vn -0.451600 -0.886300 -0.103100 +vn -0.772700 0.152600 -0.616200 +vn -0.700200 0.444900 -0.558400 +vn -0.559800 0.698100 -0.446400 +vn -0.362100 -0.886300 -0.288800 +vn -0.362100 0.886300 -0.288800 +vn -0.559800 -0.698100 -0.446400 +vn -0.700200 -0.444900 -0.558400 +vn -0.772700 -0.152600 -0.616200 +vn -0.388600 -0.444900 -0.806900 +vn -0.428800 -0.152600 -0.890400 +vn -0.428800 0.152600 -0.890400 +vn -0.388600 0.444900 -0.806900 +vn -0.310700 0.698100 -0.645100 +vn -0.201000 -0.886300 -0.417300 +vn -0.201000 0.886300 -0.417300 +vn -0.310700 -0.698100 -0.645100 +vn 0.000000 0.698100 -0.716000 +vn 0.000000 -0.886300 -0.463200 +vn 0.000000 0.886300 -0.463200 +vn 0.000000 -0.698100 -0.716000 +vn 0.000000 -0.444900 -0.895600 +vn 0.000000 -0.152600 -0.988300 +vn 0.000000 0.152600 -0.988300 +vn 0.000000 0.444900 -0.895600 +vn 0.428800 -0.152600 -0.890400 +vn 0.428800 0.152600 -0.890400 +vn 0.388600 0.444900 -0.806900 +vn 0.310700 0.698100 -0.645100 +vn 0.201000 -0.886300 -0.417300 +vn 0.201000 0.886300 -0.417300 +vn 0.310700 -0.698100 -0.645100 +vn 0.388600 -0.444900 -0.806900 +vn 0.362100 0.886300 -0.288800 +vn 0.559800 -0.698100 -0.446400 +vn 0.700200 -0.444900 -0.558400 +vn 0.772700 -0.152600 -0.616200 +vn 0.772700 0.152600 -0.616200 +vn 0.700200 0.444900 -0.558400 +vn 0.559800 0.698100 -0.446400 +vn 0.362100 -0.886300 -0.288800 +vn 0.451600 0.886300 0.103100 +vn 0.156300 0.987100 0.035700 +vn 0.156300 -0.987100 0.035700 +vn 0.698100 0.698100 0.159300 +vn 0.125400 -0.987100 0.100000 +vn 0.125400 0.987100 0.100000 +vn 0.069600 0.987100 0.144500 +vn 0.069600 -0.987100 0.144500 +vn 0.000000 -0.987100 0.160400 +vn 0.000000 0.987100 0.160400 +vn -0.069600 0.987100 0.144500 +vn -0.069600 -0.987100 0.144500 +vn -0.125400 0.987100 0.100000 +vn -0.125400 -0.987100 0.100000 +vn -0.156300 -0.987100 0.035700 +vn -0.156300 0.987100 0.035700 +vn -0.156300 0.987100 -0.035700 +vn -0.156300 -0.987100 -0.035700 +vn -0.125400 -0.987100 -0.100000 +vn -0.125400 0.987100 -0.100000 +vn -0.069600 0.987100 -0.144500 +vn -0.069600 -0.987100 -0.144500 +vn 0.000000 -0.987100 -0.160400 +vn 0.000000 0.987100 -0.160400 +vn 0.069600 -0.987100 -0.144500 +vn 0.069600 0.987100 -0.144500 +vn 0.125400 0.987100 -0.100000 +vn 0.125400 -0.987100 -0.100000 +vn 0.963500 0.152600 -0.219900 +vn 0.873100 0.444900 -0.199300 +vn 0.156300 -0.987100 -0.035700 +vn 0.698100 0.698100 -0.159300 +vn 0.451600 -0.886300 -0.103100 +vn 0.451600 0.886300 -0.103100 +vn 0.698100 -0.698100 -0.159300 +vn 0.156300 0.987100 -0.035700 +vn 0.873100 -0.444900 -0.199300 +vn 0.963500 -0.152600 -0.219900 +usemtl None_bubble.png +f 129/5/141 130/6/141 131/7/141 +f 132/5/142 133/6/142 129/7/142 +f 134/5/143 135/6/143 132/7/143 +f 136/5/144 137/6/144 134/7/144 +f 138/5/145 139/8/145 136/7/145 +f 131/5/146 140/6/146 141/7/146 +f 137/5/147 142/8/147 135/7/147 +f 143/5/148 142/6/148 137/7/148 +f 139/5/149 144/6/149 143/7/149 +f 145/5/150 146/8/150 139/7/150 +f 130/5/151 147/6/151 140/7/151 +f 148/5/152 146/6/152 145/7/152 +f 133/5/153 149/8/153 130/7/153 +f 135/5/154 149/6/154 133/7/154 +f 150/5/155 151/6/155 146/7/155 +f 149/5/156 152/6/156 153/7/156 +f 154/5/157 155/6/157 149/7/157 +f 142/5/158 156/6/158 154/7/158 +f 144/5/159 157/8/159 142/7/159 +f 158/5/160 157/6/160 144/7/160 +f 146/5/161 159/6/161 158/7/161 +f 153/5/162 160/6/162 147/7/162 +f 159/5/163 161/6/163 157/7/163 +f 151/5/164 162/6/164 159/7/164 +f 152/5/165 163/8/165 160/7/165 +f 164/5/166 165/6/166 151/7/166 +f 155/5/167 163/6/167 152/7/167 +f 156/5/168 166/8/168 155/7/168 +f 167/5/169 166/6/169 156/7/169 +f 157/5/170 161/8/170 167/7/170 +f 166/5/171 168/8/171 169/7/171 +f 170/5/172 168/6/172 166/7/172 +f 161/5/173 171/6/173 170/7/173 +f 162/5/174 172/6/174 161/7/174 +f 165/5/175 173/8/175 162/7/175 +f 163/5/176 174/6/176 175/7/176 +f 176/5/177 173/6/177 165/7/177 +f 169/5/178 177/6/178 163/7/178 +f 173/5/179 178/8/179 179/7/179 +f 177/5/180 180/6/180 174/7/180 +f 181/5/181 178/6/181 173/7/181 +f 182/5/182 183/6/182 177/7/182 +f 168/5/183 184/8/183 182/7/183 +f 171/5/184 184/6/184 168/7/184 +f 172/5/185 185/6/185 171/7/185 +f 179/5/186 186/6/186 172/7/186 +f 185/5/187 187/6/187 184/7/187 +f 186/5/188 188/8/188 185/7/188 +f 189/5/189 188/6/189 186/7/189 +f 178/5/190 190/6/190 189/7/190 +f 183/5/191 191/6/191 180/7/191 +f 192/5/192 193/6/192 178/7/192 +f 194/5/193 195/6/193 183/7/193 +f 184/5/194 187/8/194 194/7/194 +f 196/5/195 197/6/195 193/7/195 +f 198/5/196 199/6/196 195/7/196 +f 187/5/197 200/8/197 198/7/197 +f 201/5/198 200/6/198 187/7/198 +f 188/5/199 202/8/199 201/7/199 +f 190/5/200 202/6/200 188/7/200 +f 193/5/201 203/6/201 190/7/201 +f 195/5/202 204/6/202 191/7/202 +f 202/5/203 205/6/203 206/7/203 +f 203/5/204 207/6/204 202/7/204 +f 197/5/205 208/6/205 203/7/205 +f 199/5/206 209/6/206 204/7/206 +f 210/5/207 211/6/207 197/7/207 +f 212/5/208 213/6/208 199/7/208 +f 200/5/209 214/6/209 212/7/209 +f 206/5/210 215/6/210 200/7/210 +f 215/5/211 216/6/211 214/7/211 +f 205/5/212 217/6/212 215/7/212 +f 207/5/213 218/8/213 205/7/213 +f 208/5/214 218/6/214 207/7/214 +f 211/5/215 219/8/215 208/7/215 +f 213/5/216 220/8/216 209/7/216 +f 221/5/217 222/8/217 211/7/217 +f 214/5/218 216/8/218 213/7/218 +f 219/5/219 223/8/219 224/7/219 +f 220/5/220 225/6/220 226/7/220 +f 222/5/221 223/6/221 219/7/221 +f 216/5/222 227/6/222 220/7/222 +f 217/5/223 228/8/223 216/7/223 +f 229/5/224 230/8/224 217/7/224 +f 218/5/225 230/6/225 229/7/225 +f 224/5/226 231/6/226 218/7/226 +f 230/5/227 232/8/227 228/7/227 +f 231/5/228 232/6/228 230/7/228 +f 233/5/229 234/6/229 231/7/229 +f 223/5/230 235/6/230 233/7/230 +f 227/5/231 236/6/231 225/7/231 +f 237/5/232 238/6/232 223/7/232 +f 239/5/233 240/6/233 227/7/233 +f 228/5/234 241/6/234 239/7/234 +f 242/5/235 243/8/235 238/7/235 +f 241/5/236 244/6/236 240/7/236 +f 245/5/237 246/6/237 241/7/237 +f 232/5/238 247/8/238 245/7/238 +f 234/5/239 248/8/239 232/7/239 +f 235/5/240 248/6/240 234/7/240 +f 238/5/241 249/8/241 235/7/241 +f 240/5/242 250/6/242 236/7/242 +f 251/5/243 145/6/243 252/7/243 +f 253/5/244 148/6/244 251/7/244 +f 141/5/245 140/6/245 254/7/245 +f 252/5/246 139/6/246 138/7/246 +f 140/5/247 147/6/247 254/7/247 +f 253/5/248 150/6/248 148/7/248 +f 253/5/249 164/6/249 150/7/249 +f 147/5/250 160/6/250 254/7/250 +f 160/5/251 175/6/251 254/7/251 +f 253/5/252 176/6/252 164/7/252 +f 253/5/253 181/6/253 176/7/253 +f 175/5/254 174/6/254 254/7/254 +f 253/5/255 192/6/255 181/7/255 +f 174/5/256 180/6/256 254/7/256 +f 180/5/257 191/6/257 254/7/257 +f 253/5/258 196/6/258 192/7/258 +f 253/5/259 210/6/259 196/7/259 +f 191/5/260 204/6/260 254/7/260 +f 204/5/261 209/6/261 254/7/261 +f 253/5/262 221/6/262 210/7/262 +f 253/5/263 222/6/263 221/7/263 +f 209/5/264 226/6/264 254/7/264 +f 226/5/265 225/6/265 254/7/265 +f 253/5/266 237/6/266 222/7/266 +f 225/5/267 236/6/267 254/7/267 +f 253/5/268 242/6/268 237/7/268 +f 253/5/269 243/6/269 242/7/269 +f 236/5/270 250/6/270 254/7/270 +f 248/5/271 136/8/271 247/7/271 +f 255/5/272 136/6/272 248/7/272 +f 250/5/273 141/6/273 254/7/273 +f 249/5/274 138/6/274 255/7/274 +f 244/5/275 141/6/275 250/7/275 +f 243/5/276 251/8/276 249/7/276 +f 246/5/277 129/8/277 244/7/277 +f 253/5/278 251/6/278 243/7/278 +f 256/5/279 129/6/279 246/7/279 +f 247/5/280 132/6/280 256/7/280 +f 133/8/141 130/6/141 129/5/141 +f 135/8/142 133/6/142 132/5/142 +f 137/8/143 135/6/143 134/5/143 +f 143/8/144 137/6/144 136/5/144 +f 245/7/238 247/8/238 256/6/238 +f 130/8/146 140/6/146 131/5/146 +f 209/7/216 220/8/216 226/6/216 +f 144/8/148 142/6/148 143/5/148 +f 158/8/149 144/6/149 139/5/149 +f 208/7/215 219/8/215 224/6/215 +f 153/8/151 147/6/151 130/5/151 +f 150/8/152 146/6/152 148/5/152 +f 179/7/179 178/8/179 189/6/179 +f 154/8/154 149/6/154 135/5/154 +f 164/8/155 151/6/155 150/5/155 +f 155/8/156 152/6/156 149/5/156 +f 156/8/157 155/6/157 154/5/157 +f 167/8/158 156/6/158 142/5/158 +f 247/7/271 136/8/271 134/6/271 +f 159/8/160 157/6/160 158/5/160 +f 151/8/161 159/6/161 146/5/161 +f 152/8/162 160/6/162 153/5/162 +f 162/8/163 161/6/163 159/5/163 +f 165/8/164 162/6/164 151/5/164 +f 217/7/224 230/8/224 228/6/224 +f 176/8/166 165/6/166 164/5/166 +f 169/8/167 163/6/167 155/5/167 +f 216/7/223 228/8/223 239/6/223 +f 170/8/169 166/6/169 167/5/169 +f 213/7/218 216/8/218 220/6/218 +f 194/7/194 187/8/194 198/6/194 +f 171/8/172 168/6/172 170/5/172 +f 172/8/173 171/6/173 161/5/173 +f 179/8/174 172/6/174 162/5/174 +f 160/7/165 163/8/165 175/6/165 +f 177/8/176 174/6/176 163/5/176 +f 181/8/177 173/6/177 176/5/177 +f 182/8/178 177/6/178 169/5/178 +f 249/7/276 251/8/276 252/6/276 +f 183/8/180 180/6/180 177/5/180 +f 192/8/181 178/6/181 181/5/181 +f 194/8/182 183/6/182 182/5/182 +f 201/7/199 202/8/199 206/6/199 +f 185/8/184 184/6/184 171/5/184 +f 186/8/185 185/6/185 172/5/185 +f 189/8/186 186/6/186 179/5/186 +f 201/8/187 187/6/187 185/5/187 +f 142/7/159 157/8/159 167/6/159 +f 190/8/189 188/6/189 189/5/189 +f 193/8/190 190/6/190 178/5/190 +f 195/8/191 191/6/191 183/5/191 +f 196/8/192 193/6/192 192/5/192 +f 198/8/193 195/6/193 194/5/193 +f 198/7/197 200/8/197 212/6/197 +f 210/8/195 197/6/195 196/5/195 +f 212/8/196 199/6/196 198/5/196 +f 135/7/147 142/8/147 154/6/147 +f 206/8/198 200/6/198 201/5/198 +f 169/7/171 168/8/171 182/6/171 +f 203/8/200 202/6/200 190/5/200 +f 197/8/201 203/6/201 193/5/201 +f 199/8/202 204/6/202 195/5/202 +f 207/8/203 205/6/203 202/5/203 +f 208/8/204 207/6/204 203/5/204 +f 211/8/205 208/6/205 197/5/205 +f 213/8/206 209/6/206 199/5/206 +f 221/8/207 211/6/207 210/5/207 +f 214/8/208 213/6/208 212/5/208 +f 215/8/209 214/6/209 200/5/209 +f 205/8/210 215/6/210 206/5/210 +f 217/8/211 216/6/211 215/5/211 +f 229/8/212 217/6/212 205/5/212 +f 244/7/277 129/8/277 131/6/277 +f 224/8/214 218/6/214 208/5/214 +f 155/7/168 166/8/168 169/6/168 +f 139/7/150 146/8/150 158/6/150 +f 238/7/235 243/8/235 249/6/235 +f 211/7/217 222/8/217 219/6/217 +f 227/8/220 225/6/220 220/5/220 +f 237/8/221 223/6/221 222/5/221 +f 239/8/222 227/6/222 216/5/222 +f 185/7/188 188/8/188 201/6/188 +f 167/7/170 161/8/170 170/6/170 +f 231/8/225 230/6/225 218/5/225 +f 233/8/226 231/6/226 224/5/226 +f 224/7/219 223/8/219 233/6/219 +f 234/8/228 232/6/228 231/5/228 +f 235/8/229 234/6/229 233/5/229 +f 238/8/230 235/6/230 223/5/230 +f 240/8/231 236/6/231 227/5/231 +f 242/8/232 238/6/232 237/5/232 +f 241/8/233 240/6/233 239/5/233 +f 245/8/234 241/6/234 228/5/234 +f 136/7/145 139/8/145 143/6/145 +f 246/8/236 244/6/236 241/5/236 +f 256/8/237 246/6/237 245/5/237 +f 162/7/175 173/8/175 179/6/175 +f 235/7/241 249/8/241 255/6/241 +f 255/8/240 248/6/240 235/5/240 +f 205/7/213 218/8/213 229/6/213 +f 244/8/242 250/6/242 240/5/242 +f 148/8/243 145/6/243 251/5/243 +f 145/8/246 139/6/246 252/5/246 +f 232/7/239 248/8/239 247/6/239 +f 138/8/272 136/6/272 255/5/272 +f 252/8/274 138/6/274 249/5/274 +f 131/8/275 141/6/275 244/5/275 +f 228/7/227 232/8/227 245/6/227 +f 130/7/153 149/8/153 153/6/153 +f 132/8/279 129/6/279 256/5/279 +f 134/8/280 132/6/280 247/5/280 +f 182/7/183 184/8/183 194/6/183 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/teledish.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/teledish.obj new file mode 100644 index 00000000..efe118c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/teledish.obj @@ -0,0 +1,851 @@ +# Blender v2.73 (sub 0) OBJ File: 'teledish.blend' +# www.blender.org +o main +v -0.400000 2.200000 0.050000 +v -0.400000 2.200000 -0.050000 +v 0.400000 2.200000 0.050000 +v 0.400000 2.200000 -0.050000 +v -0.400000 2.500000 -0.650000 +v -0.400000 2.500000 0.650000 +v 0.400000 2.500000 -0.650000 +v 0.400000 2.500000 0.650000 +v 0.360000 4.540001 0.000000 +v 0.000000 4.540001 0.360000 +v -0.360000 4.540001 0.000000 +v 0.000000 4.540001 -0.360000 +v 0.000000 4.300000 -0.360000 +v -0.360000 4.300000 -0.000000 +v 0.000000 4.300000 0.360000 +v 0.360000 4.300000 -0.000000 +v 0.045000 2.863667 -1.845236 +v 0.045000 2.842454 -1.739170 +v -0.045000 4.497083 -0.211819 +v 1.739170 2.842454 -0.045000 +v 1.845236 2.863667 0.045000 +v 1.739170 2.842454 0.045000 +v 0.211819 4.497083 0.045000 +v 0.045000 2.863667 1.845236 +v 0.045000 2.842454 1.739170 +v -0.045000 2.863667 1.845236 +v -0.045000 2.842454 1.739170 +v 0.045000 4.433444 0.148180 +v -1.845236 2.863667 0.045000 +v -1.845236 2.863667 -0.045000 +v -0.211819 4.497083 0.045000 +v -0.211819 4.497083 -0.045000 +v -0.278121 2.700000 0.671443 +v -0.403769 2.700000 0.604283 +v -0.513900 2.700000 0.513900 +v -0.604283 2.700000 0.403769 +v -0.671443 2.700000 0.278121 +v -0.712800 2.700000 -0.141785 +v -0.671443 2.700000 -0.278121 +v -0.513900 2.700000 -0.513900 +v 0.141785 2.700000 -0.712800 +v 0.513901 2.700000 -0.513900 +v 0.604283 2.700000 -0.403769 +v 0.604282 2.700000 0.403769 +v 0.513900 2.700000 0.513901 +v 0.141784 2.700000 0.712800 +v -0.000000 2.780115 1.369238 +v -0.267125 2.780115 1.342928 +v -0.523985 2.780115 1.265011 +v -0.760708 2.780115 1.138480 +v -0.968198 2.780115 0.968197 +v -1.138480 2.780115 0.760708 +v -1.265011 2.780115 0.523985 +v -1.342929 2.780115 0.267125 +v -1.369238 2.780115 -0.000000 +v -1.342929 2.780115 -0.267125 +v -1.265012 2.780115 -0.523985 +v -1.138480 2.780115 -0.760709 +v -0.968198 2.780115 -0.968198 +v -0.760708 2.780115 -1.138481 +v -0.523985 2.780115 -1.265012 +v -0.267125 2.780115 -1.342930 +v 0.000000 2.780115 -1.369239 +v 0.267126 2.780115 -1.342929 +v 0.523986 2.780115 -1.265012 +v 0.760709 2.780115 -1.138480 +v 0.968199 2.780115 -0.968198 +v 1.138481 2.780115 -0.760708 +v 1.265012 2.780115 -0.523984 +v 1.342929 2.780115 -0.267124 +v 1.369239 2.780115 0.000001 +v 1.342929 2.780115 0.267126 +v 1.265011 2.780115 0.523986 +v 1.138479 2.780115 0.760709 +v 0.968197 2.780115 0.968199 +v 0.760707 2.780115 1.138481 +v 0.523983 2.780115 1.265012 +v 0.267123 2.780115 1.342929 +v 0.000000 2.892507 1.922190 +v -0.375000 2.892507 1.885255 +v -0.735590 2.892507 1.775872 +v -1.067911 2.892506 1.598242 +v -1.359194 2.892506 1.359193 +v -1.598242 2.892506 1.067911 +v -1.775872 2.892506 0.735590 +v -1.885256 2.892506 0.375000 +v -1.922190 2.892506 -0.000000 +v -1.885256 2.892506 -0.375001 +v -1.775872 2.892506 -0.735591 +v -1.598242 2.892506 -1.067912 +v -1.359194 2.892506 -1.359194 +v -1.067911 2.892506 -1.598243 +v -0.735590 2.892506 -1.775873 +v -0.375000 2.892506 -1.885256 +v 0.000001 2.892506 -1.922191 +v 0.375002 2.892506 -1.885256 +v 0.735592 2.892506 -1.775872 +v 1.067913 2.892506 -1.598243 +v 1.359195 2.892506 -1.359194 +v 1.598244 2.892506 -1.067911 +v 1.775873 2.892506 -0.735589 +v 1.885256 2.892506 -0.375000 +v 1.922190 2.892506 0.000001 +v 1.885256 2.892506 0.375002 +v 1.775871 2.892506 0.735592 +v 1.598242 2.892506 1.067913 +v 1.359192 2.892506 1.359195 +v 0.735588 2.892507 1.775873 +v 0.374998 2.892507 1.885256 +v 0.000000 3.065863 2.319456 +v -0.452503 3.065863 2.274888 +v -0.887617 3.065863 2.142898 +v -1.288621 3.065863 1.928557 +v -1.640103 3.065863 1.640103 +v -1.928557 3.065863 1.288620 +v -2.142898 3.065863 0.887617 +v -2.274889 3.065863 0.452503 +v -2.319457 3.065863 -0.000000 +v -2.274889 3.065863 -0.452504 +v -2.142899 3.065863 -0.887618 +v -1.928557 3.065863 -1.288622 +v -1.640103 3.065863 -1.640104 +v -1.288621 3.065863 -1.928558 +v -0.887617 3.065863 -2.142899 +v -0.452503 3.065863 -2.274890 +v 0.000001 3.065863 -2.319457 +v 0.452505 3.065863 -2.274889 +v 0.887619 3.065863 -2.142899 +v 1.288622 3.065863 -1.928558 +v 1.640105 3.065863 -1.640103 +v 1.928559 3.065863 -1.288620 +v 2.142900 3.065863 -0.887617 +v 2.274889 3.065863 -0.452502 +v 2.319457 3.065863 0.000002 +v 2.274889 3.065863 0.452505 +v 2.142898 3.065863 0.887619 +v 1.928556 3.065863 1.288623 +v 1.640102 3.065863 1.640105 +v 1.288619 3.065863 1.928559 +v 0.887615 3.065863 2.142899 +v 0.452500 3.065863 2.274889 +v -0.000000 2.500000 0.872117 +v -0.170142 2.500000 0.855360 +v -0.333745 2.500000 0.805731 +v -0.484523 2.500000 0.725139 +v -0.616680 2.500000 0.616680 +v -0.725139 2.500000 0.484522 +v -0.805731 2.500000 0.333745 +v -0.855360 2.500000 0.170142 +v -0.872117 2.500000 -0.000000 +v -0.855360 2.500000 -0.170142 +v -0.805732 2.500000 -0.333745 +v -0.725139 2.500000 -0.484523 +v -0.616680 2.500000 -0.616680 +v -0.484522 2.500000 -0.725140 +v -0.333745 2.500000 -0.805732 +v -0.170142 2.500000 -0.855361 +v 0.000000 2.500000 -0.872118 +v 0.170142 2.500000 -0.855360 +v 0.333745 2.500000 -0.805732 +v 0.484523 2.500000 -0.725139 +v 0.616681 2.500000 -0.616680 +v 0.725140 2.500000 -0.484522 +v 0.805732 2.500000 -0.333745 +v 0.855361 2.500000 -0.170141 +v 0.872118 2.500000 0.000001 +v 0.855360 2.500000 0.170142 +v 0.805731 2.500000 0.333746 +v 0.725139 2.500000 0.484523 +v 0.616680 2.500000 0.616681 +v 0.484522 2.500000 0.725140 +v 0.333744 2.500000 0.805732 +v 0.170140 2.500000 0.855360 +v 0.000000 3.005863 2.319456 +v -0.452503 3.005863 2.274888 +v -0.887617 3.005863 2.142898 +v -1.288621 3.005863 1.928557 +v -1.640103 3.005863 1.640103 +v -1.928557 3.005863 1.288620 +v -2.142898 3.005863 0.887617 +v -2.274889 3.005863 0.452503 +v -2.319457 3.005863 -0.000000 +v -2.274889 3.005863 -0.452504 +v -2.142899 3.005863 -0.887618 +v -1.928557 3.005863 -1.288622 +v -1.640103 3.005863 -1.640104 +v -1.288621 3.005863 -1.928558 +v -0.887617 3.005863 -2.142899 +v -0.452503 3.005863 -2.274890 +v 0.000001 3.005863 -2.319457 +v 0.452505 3.005863 -2.274889 +v 0.887619 3.005863 -2.142899 +v 1.288622 3.005863 -1.928558 +v 1.640105 3.005863 -1.640103 +v 1.928559 3.005863 -1.288620 +v 2.142900 3.005863 -0.887617 +v 2.274889 3.005863 -0.452502 +v 2.319457 3.005863 0.000002 +v 2.274889 3.005863 0.452505 +v 2.142898 3.005863 0.887619 +v 1.928556 3.005863 1.288623 +v 1.640102 3.005863 1.640105 +v 1.288619 3.005863 1.928559 +v 0.887615 3.005863 2.142899 +v 0.452500 3.005863 2.274889 +v 0.180000 4.540001 0.000000 +v 0.000000 4.540001 0.180000 +v -0.180000 4.540001 0.000000 +v 0.000000 4.540001 -0.180000 +v 0.180000 4.600000 0.000000 +v 0.000000 4.600000 0.180000 +v -0.180000 4.600000 0.000000 +v 0.000000 4.600000 -0.180000 +v 0.000000 4.300000 -0.180000 +v -0.180000 4.300000 -0.000000 +v 0.000000 4.300000 0.180000 +v 0.180000 4.300000 -0.000000 +v 0.000000 4.240000 -0.180000 +v -0.180000 4.240000 -0.000000 +v 0.000000 4.240000 0.180000 +v 0.180000 4.240000 -0.000000 +v -0.045000 2.863667 -1.845236 +v -0.045000 2.842454 -1.739170 +v -0.045000 4.433444 -0.148180 +v 0.045000 4.497083 -0.211819 +v 0.045000 4.433444 -0.148180 +v 1.845236 2.863667 -0.045000 +v 0.211819 4.497083 -0.045000 +v 0.148180 4.433444 -0.045000 +v 0.148180 4.433444 0.045000 +v 0.045000 4.497083 0.211819 +v -0.045000 4.497083 0.211819 +v -0.045000 4.433444 0.148180 +v -1.739170 2.842454 0.045000 +v -1.739170 2.842454 -0.045000 +v -0.148180 4.433444 0.045000 +v -0.148180 4.433444 -0.045000 +v -0.000000 2.700000 0.726764 +v -0.141785 2.700000 0.712800 +v -0.712800 2.700000 0.141785 +v -0.726764 2.700000 -0.000000 +v -0.604283 2.700000 -0.403769 +v -0.403769 2.700000 -0.604283 +v -0.278121 2.700000 -0.671443 +v -0.141785 2.700000 -0.712800 +v 0.000000 2.700000 -0.726765 +v 0.278121 2.700000 -0.671443 +v 0.403769 2.700000 -0.604283 +v 0.671443 2.700000 -0.278120 +v 0.712800 2.700000 -0.141784 +v 0.726765 2.700000 0.000001 +v 0.712800 2.700000 0.141785 +v 0.671443 2.700000 0.278121 +v 0.403768 2.700000 0.604283 +v 0.278120 2.700000 0.671443 +v 1.067910 2.892506 1.598244 +v 0.000000 2.700000 0.000000 +v 0.000000 2.500000 0.000000 +vt 0.086937 0.673258 +vt 0.086937 0.660595 +vt 0.119538 0.584615 +vt 0.119538 0.749239 +vt 0.086937 0.664500 +vt 0.000000 0.664500 +vt 0.000000 0.584615 +vt 0.086937 0.584615 +vt 0.119538 0.660595 +vt 0.152140 0.584615 +vt 0.152140 0.749239 +vt 0.119538 0.673258 +vt 0.366905 0.630203 +vt 0.392986 0.630203 +vt 0.392986 0.675791 +vt 0.366905 0.675791 +vt 0.366905 0.584615 +vt 0.392986 0.584615 +vt 0.262603 0.649306 +vt 0.248819 0.633133 +vt 0.248819 0.601006 +vt 0.262603 0.585053 +vt 0.152140 0.649086 +vt 0.165971 0.632968 +vt 0.193634 0.632968 +vt 0.207466 0.649086 +vt 0.432107 0.791460 +vt 0.422327 0.791460 +vt 0.422327 0.584615 +vt 0.432107 0.584615 +vt 0.213614 0.373473 +vt 0.227918 0.380377 +vt 0.207651 0.458233 +vt 0.180702 0.445225 +vt 0.243103 0.383897 +vt 0.236260 0.464864 +vt 0.200741 0.363450 +vt 0.156449 0.426341 +vt 0.273771 0.204237 +vt 0.258586 0.200718 +vt 0.265429 0.119750 +vt 0.294038 0.126382 +vt 0.300948 0.363450 +vt 0.311896 0.350693 +vt 0.365866 0.402306 +vt 0.345240 0.426341 +vt 0.181192 0.248923 +vt 0.175267 0.265592 +vt 0.108455 0.241974 +vt 0.119617 0.210571 +vt 0.258586 0.383897 +vt 0.265429 0.464864 +vt 0.135823 0.182309 +vt 0.066623 0.177563 +vt 0.089373 0.137887 +vt 0.230370 0.534550 +vt 0.190208 0.525240 +vt 0.393234 0.241974 +vt 0.382071 0.210571 +vt 0.435066 0.177563 +vt 0.450737 0.221648 +vt 0.180702 0.139389 +vt 0.156449 0.158274 +vt 0.118328 0.104146 +vt 0.152376 0.077635 +vt 0.152376 0.506980 +vt 0.118328 0.480469 +vt 0.398925 0.309303 +vt 0.398925 0.275312 +vt 0.458725 0.268449 +vt 0.458725 0.316166 +vt 0.236260 0.119750 +vt 0.207651 0.126382 +vt 0.190208 0.059374 +vt 0.230370 0.050065 +vt 0.119617 0.374044 +vt 0.135823 0.402306 +vt 0.089373 0.446728 +vt 0.066623 0.407052 +vt 0.382071 0.374044 +vt 0.393234 0.342640 +vt 0.450737 0.362967 +vt 0.435066 0.407052 +vt 0.108455 0.342641 +vt 0.050952 0.362967 +vt 0.271319 0.050065 +vt 0.311481 0.059374 +vt 0.412316 0.446728 +vt 0.383361 0.480469 +vt 0.345240 0.158274 +vt 0.320987 0.139389 +vt 0.349313 0.077635 +vt 0.383361 0.104146 +vt 0.294038 0.458233 +vt 0.320987 0.445225 +vt 0.349313 0.506980 +vt 0.311481 0.525240 +vt 0.050952 0.221648 +vt 0.365866 0.182309 +vt 0.412316 0.137887 +vt 0.271319 0.534550 +vt 0.102764 0.309303 +vt 0.042964 0.316166 +vt 0.410748 0.065257 +vt 0.445688 0.105972 +vt 0.324013 0.573382 +vt 0.275550 0.584615 +vt 0.028549 0.153848 +vt 0.056001 0.105972 +vt 0.226138 0.584615 +vt 0.177676 0.573381 +vt 0.473140 0.153848 +vt 0.492049 0.207044 +vt 0.090940 0.065258 +vt 0.132025 0.033268 +vt 0.132025 0.551347 +vt 0.090940 0.519357 +vt 0.501689 0.263518 +vt 0.501689 0.321097 +vt 0.177676 0.011233 +vt 0.226138 0.000000 +vt 0.056001 0.478642 +vt 0.028549 0.430767 +vt 0.492049 0.377570 +vt 0.473140 0.430767 +vt 0.009640 0.377571 +vt 0.275550 0.000000 +vt 0.324013 0.011233 +vt 0.445688 0.478643 +vt 0.410748 0.519357 +vt 0.369664 0.033268 +vt 0.369664 0.551347 +vt 0.009640 0.207045 +vt 0.000000 0.321097 +vt 0.497310 0.633252 +vt 0.471229 0.633252 +vt 0.471229 0.584615 +vt 0.497310 0.584615 +vt 0.729886 0.397235 +vt 0.678168 0.573269 +vt 0.632825 0.551166 +vt 0.712837 0.388924 +vt 0.684444 0.221430 +vt 0.557313 0.105703 +vt 0.592017 0.065045 +vt 0.697493 0.206142 +vt 0.847295 0.259683 +vt 0.990425 0.207440 +vt 1.000000 0.263925 +vt 0.850895 0.280921 +vt 0.766439 0.401515 +vt 0.775384 0.584653 +vt 0.726305 0.584576 +vt 0.747985 0.401487 +vt 0.667130 0.259404 +vt 0.511264 0.206698 +vt 0.530046 0.153534 +vt 0.674192 0.239414 +vt 0.829981 0.221656 +vt 0.944376 0.106303 +vt 0.971643 0.154218 +vt 0.840233 0.239672 +vt 0.801588 0.389062 +vt 0.868864 0.551532 +vt 0.823520 0.573495 +vt 0.784539 0.397320 +vt 0.801588 0.194277 +vt 0.868864 0.033487 +vt 0.909672 0.065537 +vt 0.816932 0.206328 +vt 0.667130 0.323517 +vt 0.511264 0.377212 +vt 0.501689 0.320728 +vt 0.663530 0.302279 +vt 0.829981 0.361771 +vt 0.944376 0.478949 +vt 0.909672 0.519608 +vt 0.816932 0.377058 +vt 0.766439 0.181714 +vt 0.775384 0.000076 +vt 0.823520 0.011383 +vt 0.784539 0.185966 +vt 0.684444 0.361545 +vt 0.557312 0.478349 +vt 0.530045 0.430434 +vt 0.674192 0.343529 +vt 0.847295 0.323797 +vt 0.990425 0.377955 +vt 0.971643 0.431119 +vt 0.840233 0.343787 +vt 0.729886 0.185881 +vt 0.678168 0.011158 +vt 0.726305 0.000000 +vt 0.747986 0.181685 +vt 0.592017 0.519115 +vt 0.697493 0.376873 +vt 0.632825 0.033121 +vt 0.712837 0.194139 +vt 1.000000 0.321501 +vt 0.850895 0.302570 +vt 0.663530 0.280631 +vt 0.501689 0.263152 +vt 0.353864 0.955490 +vt 0.353864 1.000000 +vt 0.347344 1.000000 +vt 0.347344 0.955490 +vt 0.360384 0.792307 +vt 0.360384 0.849610 +vt 0.353864 0.849610 +vt 0.353864 0.792307 +vt 0.347344 0.629124 +vt 0.347344 0.679905 +vt 0.340823 0.679905 +vt 0.340823 0.629124 +vt 0.353864 0.904710 +vt 0.347344 0.904710 +vt 0.347344 0.849610 +vt 0.366905 0.957130 +vt 0.366905 0.999001 +vt 0.360384 0.999001 +vt 0.360384 0.957130 +vt 0.360384 0.679905 +vt 0.360384 0.735005 +vt 0.353864 0.735005 +vt 0.353864 0.679905 +vt 0.347344 0.792307 +vt 0.347344 0.735005 +vt 0.366905 0.854543 +vt 0.366905 0.908352 +vt 0.360384 0.908352 +vt 0.360384 0.854543 +vt 0.360384 0.584615 +vt 0.360384 0.629124 +vt 0.353864 0.629124 +vt 0.353864 0.584615 +vt 0.340823 0.955490 +vt 0.340823 0.904710 +vt 0.366905 0.684088 +vt 0.366905 0.740214 +vt 0.360384 0.740214 +vt 0.360384 0.684088 +vt 0.360384 0.955490 +vt 0.360384 1.000000 +vt 0.340823 0.849609 +vt 0.340823 0.792307 +vt 0.366905 0.631549 +vt 0.360384 0.631549 +vt 0.360384 0.904710 +vt 0.340823 0.735005 +vt 0.347344 0.584615 +vt 0.340823 0.584615 +vt 0.366905 0.797769 +vt 0.360384 0.797769 +vt 0.340823 1.000000 +vt 0.165971 0.600732 +vt 0.207466 0.584615 +vt 0.193634 0.600733 +vt 0.561953 0.607447 +vt 0.555433 0.607447 +vt 0.555433 0.584653 +vt 0.561953 0.584653 +vt 0.555433 0.616888 +vt 0.527770 0.616888 +vt 0.527770 0.584653 +vt 0.561953 0.630241 +vt 0.555433 0.630241 +vt 0.501689 0.630241 +vt 0.508209 0.630241 +vt 0.508209 0.654560 +vt 0.501689 0.654560 +vt 0.521250 0.630241 +vt 0.527770 0.630241 +vt 0.527770 0.653035 +vt 0.521250 0.653035 +vt 0.207466 0.648867 +vt 0.221250 0.632914 +vt 0.221250 0.600787 +vt 0.514729 0.630241 +vt 0.514729 0.653035 +vt 0.514729 0.654560 +vt 0.568474 0.607447 +vt 0.568474 0.630241 +vt 0.568474 0.584653 +vt 0.527770 0.649234 +vt 0.527770 0.617108 +vt 0.555339 0.616888 +vt 0.555339 0.649015 +vt 0.086937 0.677078 +vt 0.000000 0.677078 +vt 0.086937 0.748120 +vt 0.000000 0.748120 +vt 0.461449 0.584615 +vt 0.471229 0.786088 +vt 0.461449 0.786088 +vt 0.272384 0.592213 +vt 0.282164 0.584615 +vt 0.282164 0.877139 +vt 0.272384 0.877139 +vt 0.402766 0.808169 +vt 0.392986 0.808169 +vt 0.402766 0.584615 +vt 0.291945 0.584615 +vt 0.301725 0.592213 +vt 0.301725 0.877139 +vt 0.291945 0.877139 +vt 0.412547 0.791461 +vt 0.412547 0.584615 +vt 0.331055 0.592176 +vt 0.340823 0.876787 +vt 0.331055 0.876760 +vt 0.441888 0.584615 +vt 0.451668 0.584615 +vt 0.451668 0.786088 +vt 0.441888 0.786088 +vt 0.311506 0.584615 +vt 0.321286 0.592213 +vt 0.321286 0.877139 +vt 0.311506 0.877139 +vt 0.402766 0.791460 +vt 0.311506 0.869541 +vt 0.301725 0.584615 +vt 0.291945 0.592213 +vt 0.441888 0.791460 +vt 0.262603 0.592213 +vt 0.272384 0.584615 +vt 0.262604 0.877139 +vt 0.321286 0.584615 +vt 0.321286 0.876787 +vt 0.200741 0.221165 +vt 0.189793 0.233922 +vt 0.329443 0.283287 +vt 0.326422 0.265592 +vt 0.227918 0.204237 +vt 0.213614 0.211142 +vt 0.189793 0.350692 +vt 0.326422 0.319023 +vt 0.329443 0.301328 +vt 0.243103 0.200718 +vt 0.320497 0.335691 +vt 0.172246 0.301328 +vt 0.175267 0.319023 +vt 0.288075 0.211141 +vt 0.288075 0.373473 +vt 0.172246 0.283287 +vt 0.102764 0.275312 +vt 0.311896 0.233922 +vt 0.300948 0.221165 +vt 0.273771 0.380377 +vt 0.320497 0.248923 +vt 0.181192 0.335691 +vt 0.042964 0.268449 +vt 0.000000 0.263518 +vt 0.250844 0.292307 +vt 0.757212 0.291600 +vt 0.501689 0.584653 +f 3/1 4/2 7/3 8/4 +f 1/5 3/6 8/7 6/8 +f 1/9 6/10 5/11 2/12 +f 14/13 11/14 12/15 13/16 +f 15/17 10/18 11/14 14/13 +f 16/19 217/20 214/21 13/22 +f 11/23 208/24 209/25 12/26 +f 30/27 29/28 31/29 32/30 +f 34/31 35/32 51/33 50/34 +f 35/32 36/35 52/36 51/33 +f 33/37 34/31 50/34 49/38 +f 42/39 43/40 68/41 67/42 +f 38/43 39/44 57/45 56/46 +f 44/47 45/48 75/49 74/50 +f 36/35 37/51 53/52 52/36 +f 73/53 74/50 106/54 105/55 +f 51/33 52/36 84/56 83/57 +f 62/58 63/59 95/60 94/61 +f 71/62 72/63 104/64 103/65 +f 49/38 50/34 82/66 81/67 +f 60/68 61/69 93/70 92/71 +f 69/72 70/73 102/74 101/75 +f 47/76 48/77 80/78 79/79 +f 58/80 59/81 91/82 90/83 +f 78/84 47/76 79/79 109/85 +f 67/42 68/41 100/86 99/87 +f 56/46 57/45 89/88 88/89 +f 65/90 66/91 98/92 97/93 +f 54/94 55/95 87/96 86/97 +f 74/50 75/49 107/98 106/54 +f 63/59 64/99 96/100 95/60 +f 52/36 53/52 85/101 84/56 +f 72/63 73/53 105/55 104/64 +f 50/34 51/33 83/57 82/66 +f 61/69 62/58 94/61 93/70 +f 70/73 71/62 103/65 102/74 +f 48/77 49/38 81/67 80/78 +f 59/81 60/68 92/71 91/82 +f 68/41 69/72 101/75 100/86 +f 57/45 58/80 90/83 89/88 +f 77/102 78/84 109/85 108/103 +f 66/91 67/42 99/87 98/92 +f 55/95 56/46 88/89 87/96 +f 64/99 65/90 97/93 96/100 +f 53/52 54/94 86/97 85/101 +f 96/100 97/93 128/104 127/105 +f 85/101 86/97 117/106 116/107 +f 105/55 106/54 137/108 136/109 +f 83/57 84/56 115/110 114/111 +f 94/61 95/60 126/112 125/113 +f 103/65 104/64 135/114 134/115 +f 81/67 82/66 113/116 112/117 +f 92/71 93/70 124/118 123/119 +f 101/75 102/74 133/120 132/121 +f 79/79 80/78 111/122 110/123 +f 90/83 91/82 122/124 121/125 +f 109/85 79/79 110/123 141/126 +f 99/87 100/86 131/127 130/128 +f 88/89 89/88 120/129 119/130 +f 97/93 98/92 129/131 128/104 +f 86/97 87/96 118/132 117/106 +f 106/54 107/98 138/133 137/108 +f 95/60 96/100 127/105 126/112 +f 84/56 85/101 116/107 115/110 +f 104/64 105/55 136/109 135/114 +f 82/66 83/57 114/111 113/116 +f 93/70 94/61 125/113 124/118 +f 102/74 103/65 134/115 133/120 +f 80/78 81/67 112/117 111/122 +f 91/82 92/71 123/119 122/124 +f 100/86 101/75 132/121 131/127 +f 89/88 90/83 121/125 120/129 +f 108/103 109/85 141/126 140/134 +f 98/92 99/87 130/128 129/131 +f 87/96 88/89 119/130 118/132 +f 16/135 9/136 10/137 15/138 +f 168/139 200/140 201/141 169/142 +f 146/143 178/144 179/145 147/146 +f 157/147 189/148 190/149 158/150 +f 166/151 198/152 199/153 167/154 +f 144/155 176/156 177/157 145/158 +f 155/159 187/160 188/161 156/162 +f 164/163 196/164 197/165 165/166 +f 153/167 185/168 186/169 154/170 +f 173/171 205/172 174/173 142/174 +f 162/175 194/176 195/177 163/178 +f 151/179 183/180 184/181 152/182 +f 171/183 203/184 204/185 172/186 +f 160/187 192/188 193/189 161/190 +f 149/191 181/192 182/193 150/194 +f 169/142 201/141 202/195 170/196 +f 147/146 179/145 180/197 148/198 +f 158/150 190/149 191/199 159/200 +f 167/154 199/153 200/140 168/139 +f 145/158 177/157 178/144 146/143 +f 156/162 188/161 189/148 157/147 +f 165/166 197/165 198/152 166/151 +f 143/201 175/202 176/156 144/155 +f 154/170 186/169 187/160 155/159 +f 163/178 195/177 196/164 164/163 +f 152/182 184/181 185/168 153/167 +f 172/186 204/185 205/172 173/171 +f 161/190 193/189 194/176 162/175 +f 150/194 182/193 183/180 151/179 +f 170/196 202/195 203/184 171/183 +f 159/200 191/199 192/188 160/187 +f 148/198 180/197 181/192 149/191 +f 142/174 174/173 175/202 143/201 +f 137/203 138/204 202/205 201/206 +f 126/207 127/208 191/209 190/210 +f 115/211 116/212 180/213 179/214 +f 135/209 136/215 200/216 199/217 +f 113/218 114/219 178/220 177/221 +f 124/222 125/223 189/224 188/225 +f 133/224 134/210 198/226 197/227 +f 111/228 112/229 176/230 175/231 +f 122/232 123/233 187/234 186/235 +f 131/234 132/225 196/212 195/211 +f 120/216 121/206 185/236 184/237 +f 140/238 141/239 205/240 204/241 +f 129/242 130/243 194/204 193/203 +f 118/226 119/217 183/244 182/245 +f 138/17 139/246 203/247 202/232 +f 127/208 128/248 192/215 191/209 +f 116/212 117/227 181/249 180/213 +f 136/215 137/203 201/206 200/216 +f 114/250 115/211 179/214 178/251 +f 125/223 126/207 190/210 189/224 +f 134/210 135/209 199/217 198/226 +f 112/229 113/218 177/221 176/230 +f 123/233 124/222 188/225 187/234 +f 132/225 133/224 197/227 196/212 +f 110/252 111/228 175/231 174/253 +f 121/206 122/205 186/254 185/236 +f 141/239 110/252 174/253 205/240 +f 130/235 131/234 195/211 194/250 +f 119/217 120/216 184/237 183/244 +f 139/246 140/238 204/241 203/247 +f 128/248 129/242 193/203 192/215 +f 117/227 118/226 182/245 181/249 +f 10/10 207/255 208/24 11/23 +f 9/256 206/257 207/255 10/10 +f 12/26 209/25 206/257 9/256 +f 208/258 212/259 213/260 209/261 +f 213/262 212/263 211/264 210/260 +f 207/265 211/266 212/259 208/258 +f 206/267 210/268 211/269 207/270 +f 209/271 213/272 210/273 206/274 +f 15/275 216/276 217/20 16/19 +f 14/256 215/277 216/276 15/275 +f 13/22 214/21 215/277 14/256 +f 217/278 221/271 218/274 214/279 +f 216/280 220/269 221/268 217/278 +f 215/258 219/281 220/282 216/265 +f 214/261 218/283 219/281 215/258 +f 219/284 218/285 221/286 220/287 +f 1/5 2/288 4/289 3/6 +f 2/288 5/290 7/291 4/289 +f 234/292 235/137 237/293 236/294 +f 18/295 17/296 225/297 226/298 +f 223/299 18/300 226/18 224/301 +f 222/302 223/303 224/304 19/305 +f 17/28 222/306 19/307 225/29 +f 22/308 21/251 23/309 230/310 +f 20/311 22/312 230/313 229/314 +f 227/315 20/316 229/317 228/318 +f 21/301 227/307 228/306 23/319 +f 27/320 26/304 232/321 233/315 +f 25/294 27/313 233/312 28/292 +f 24/296 25/322 28/305 231/297 +f 26/323 24/27 231/30 232/311 +f 235/324 30/325 32/298 237/326 +f 29/327 234/308 236/310 31/328 +f 252/329 253/330 73/53 72/63 +f 244/331 245/332 62/58 61/69 +f 250/333 251/334 71/62 70/73 +f 239/335 33/37 49/38 48/77 +f 40/336 243/337 60/68 59/81 +f 43/40 249/338 69/72 68/41 +f 39/44 242/339 58/80 57/45 +f 255/340 46/341 78/84 77/102 +f 248/342 42/39 67/42 66/91 +f 241/343 38/43 56/46 55/95 +f 45/48 254/344 76/345 75/49 +f 41/346 247/347 65/90 64/99 +f 37/51 240/348 54/94 53/52 +f 253/330 44/47 74/50 73/53 +f 245/332 246/349 63/59 62/58 +f 251/334 252/329 72/63 71/62 +f 243/337 244/331 61/69 60/68 +f 249/338 250/333 70/73 69/72 +f 238/350 239/335 48/77 47/76 +f 242/339 40/336 59/81 58/80 +f 46/341 238/350 47/76 78/84 +f 254/344 255/340 77/102 76/345 +f 247/347 248/342 66/91 65/90 +f 240/348 241/343 55/95 54/94 +f 246/349 41/346 64/99 63/59 +f 75/49 76/345 256/351 107/98 +f 107/98 256/351 139/352 138/133 +f 256/351 108/103 140/134 139/352 +f 76/345 77/102 108/103 256/351 +f 45/48 44/47 253/330 257/353 +f 246/349 245/332 244/331 257/353 +f 241/343 240/348 37/51 257/353 +f 238/350 46/341 255/340 257/353 +f 42/39 248/342 247/347 257/353 +f 34/31 33/37 257/353 35/32 +f 40/336 242/339 39/44 257/353 +f 250/333 249/338 257/353 251/334 +f 36/35 35/32 257/353 37/51 +f 41/346 246/349 257/353 247/347 +f 43/40 42/39 257/353 249/338 +f 243/337 40/336 257/353 244/331 +f 252/329 251/334 257/353 253/330 +f 255/340 254/344 45/48 257/353 +f 239/335 238/350 257/353 33/37 +f 38/43 241/343 257/353 39/44 +f 158/150 159/200 160/187 258/354 +f 149/191 150/194 258/354 148/198 +f 169/142 170/196 258/354 168/139 +f 147/146 148/198 258/354 146/143 +f 156/162 157/147 158/150 258/354 +f 167/154 168/139 258/354 166/151 +f 145/158 146/143 258/354 144/155 +f 154/170 155/159 156/162 258/354 +f 165/166 166/151 258/354 164/163 +f 143/201 144/155 258/354 142/174 +f 152/182 153/167 154/170 258/354 +f 163/178 164/163 258/354 162/175 +f 171/183 172/186 258/354 170/196 +f 150/194 151/179 152/182 258/354 +f 161/190 162/175 258/354 160/187 +f 172/186 173/171 142/174 258/354 +f 13/355 12/264 9/272 16/267 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telefork.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telefork.obj new file mode 100644 index 00000000..6924aae3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telefork.obj @@ -0,0 +1,99 @@ +# Blender v2.73 (sub 0) OBJ File: 'telescope.blend' +# www.blender.org +o main +v -0.400000 1.800000 0.200000 +v 0.400000 1.800000 0.200000 +v -0.400000 1.800000 -0.200000 +v 0.400000 1.800000 -0.200000 +v 0.600000 1.800000 0.200000 +v 0.600000 1.800000 -0.200000 +v -0.600000 1.800000 0.200000 +v -0.600000 1.800000 -0.200000 +v -0.400000 2.050000 0.200000 +v 0.400000 2.050000 0.200000 +v -0.400000 2.050000 -0.200000 +v 0.400000 2.050000 -0.200000 +v 0.600000 2.050000 0.200000 +v 0.600000 2.050000 -0.200000 +v -0.600000 2.050000 0.200000 +v -0.600000 2.050000 -0.200000 +v -0.400000 2.400000 0.075000 +v 0.400000 2.400000 0.075000 +v -0.400000 2.400000 -0.075000 +v 0.400000 2.400000 -0.075000 +v 0.500000 2.400000 0.075000 +v 0.500000 2.400000 -0.075000 +v -0.500000 2.400000 0.075000 +v -0.500000 2.400000 -0.075000 +vt 0.855500 0.500000 +vt 0.644641 0.500000 +vt 0.644642 0.100000 +vt 0.855500 0.100000 +vt 0.644642 0.000000 +vt 0.855500 0.000000 +vt 0.855500 0.600000 +vt 0.644641 0.600000 +vt 0.000000 1.000000 +vt 0.000000 0.600000 +vt 0.210858 0.600000 +vt 0.210858 1.000000 +vt 0.130554 0.600000 +vt 0.130554 0.500000 +vt 0.322321 0.500000 +vt 0.322321 0.550000 +vt 0.514088 0.500000 +vt 0.514088 0.600000 +vt 0.000000 0.500000 +vt 0.421717 0.903336 +vt 0.210858 0.903336 +vt 0.210858 0.778870 +vt 0.421717 0.778870 +vt 0.000000 0.100000 +vt 0.000000 0.000000 +vt 0.130554 0.000000 +vt 0.130554 0.100000 +vt 0.514088 0.100000 +vt 0.514088 0.000000 +vt 0.632575 0.903336 +vt 0.632575 0.778870 +vt 0.855500 0.075000 +vt 0.908215 0.000000 +vt 0.908215 0.075000 +vt 0.908215 0.150000 +vt 0.855500 0.150000 +vt 0.276752 0.600000 +vt 0.355824 0.600000 +vt 0.322321 0.050000 +vt 0.322321 0.100000 +vt 0.487610 0.600000 +vt 0.566682 0.600000 +vt 1.000000 0.600000 +vt 1.000000 0.800000 +vt 0.816288 0.737500 +vt 0.816288 0.662500 +vt 0.816287 0.600000 +vt 0.816288 0.800000 +vt 0.632575 0.737500 +vt 0.632575 0.662500 +f 1/1 3/2 4/3 2/4 +f 4/3 6/5 5/6 2/4 +f 1/1 7/7 8/8 3/2 +f 9/9 10/10 12/11 11/12 +f 15/13 9/14 17/15 23/16 +f 11/17 16/18 24/16 19/15 +f 3/2 8/8 16/18 11/17 +f 7/10 1/19 9/14 15/13 +f 8/20 7/21 15/22 16/23 +f 2/24 5/25 13/26 10/27 +f 6/5 4/3 12/28 14/29 +f 5/30 6/20 14/23 13/31 +f 4/3 3/2 11/17 12/28 +f 1/19 2/24 10/27 9/14 +f 20/32 18/6 21/33 22/34 +f 17/34 19/35 24/36 23/32 +f 16/23 15/22 23/37 24/38 +f 10/27 13/26 21/39 18/40 +f 14/29 12/28 20/40 22/39 +f 13/31 14/23 22/41 21/42 +f 12/43 10/44 18/45 20/46 +f 9/47 11/48 19/49 17/50 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telesupport.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telesupport.obj new file mode 100644 index 00000000..41e255cc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telesupport.obj @@ -0,0 +1,85 @@ +# Blender v2.73 (sub 0) OBJ File: 'telescope.blend' +# www.blender.org +o main +v -0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 -0.500000 +v -0.500000 1.000000 0.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v 0.125000 2.880000 -0.125000 +v -0.125000 2.880000 -0.125000 +v 0.125000 2.880000 0.125000 +v -0.125000 2.880000 0.125000 +v -0.125000 2.430000 0.125000 +v 0.125000 2.430000 0.125000 +v -0.125000 2.430000 -0.125000 +v 0.125000 2.430000 -0.125000 +v 0.375000 2.13000 -0.375000 +v -0.375000 2.13000 -0.375000 +v 0.375000 2.13000 0.375000 +v -0.375000 2.13000 0.375000 +v -0.375000 1.000000 0.375000 +v 0.375000 1.000000 0.375000 +v -0.375000 1.000000 -0.375000 +v 0.375000 1.000000 -0.375000 +vt 0.333333 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.666667 +vt 0.333333 0.666667 +vt 0.333333 0.333333 +vt 0.666667 0.333333 +vt 0.666667 0.666667 +vt 0.000000 0.333333 +vt 0.000000 0.000000 +vt 0.333333 0.000000 +vt 0.666667 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.333333 +vt 0.666667 0.900000 +vt 0.583333 0.900000 +vt 0.583333 0.783333 +vt 0.666667 0.783333 +vt 0.916667 0.566667 +vt 0.833334 0.566667 +vt 0.833333 0.450000 +vt 0.916667 0.450000 +vt 0.583333 0.666667 +vt 0.833334 0.650000 +vt 0.916667 0.650000 +vt 0.583333 0.916667 +vt 0.500000 0.833333 +vt 0.500000 0.750000 +vt 0.416667 0.750000 +vt 0.333333 0.916667 +vt 0.416667 0.833333 +vt 0.833334 0.333333 +vt 0.916667 0.333333 +vt 0.666667 0.583333 +vt 0.750000 0.333333 +vt 0.750000 0.583333 +vt 0.833333 0.583333 +vt 0.833333 0.833333 +vt 0.750000 0.833333 +vt 0.666667 0.833333 +f 1/1 3/2 4/3 2/4 +f 5/4 6/5 8/6 7/7 +f 3/8 7/9 8/10 4/5 +f 4/5 8/4 6/3 2/8 +f 2/6 6/11 5/12 1/13 +f 1/6 5/5 7/10 3/11 +f 15/14 13/15 12/16 10/17 +f 13/18 14/19 11/20 12/21 +f 14/22 16/7 9/17 11/16 +f 12/23 11/19 9/18 10/24 +f 17/22 18/25 15/26 16/27 +f 19/4 17/22 16/27 14/28 +f 20/29 19/4 14/28 13/30 +f 16/21 15/20 10/31 9/32 +f 21/33 22/6 19/34 20/35 +f 22/36 24/37 17/38 19/35 +f 24/39 23/33 18/35 17/38 +f 18/25 20/29 13/30 15/26 +f 20/35 18/34 23/31 21/36 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/thruster.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/thruster.obj new file mode 100644 index 00000000..3d04d711 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/thruster.obj @@ -0,0 +1,456 @@ +# Blender v2.69 (sub 0) OBJ File: 'thruster.blend' +# www.blender.org +o Main +v -0.124558 -0.878859 0.878859 +v -0.124558 -0.878859 -0.878859 +v 0.124558 -0.878859 -0.878859 +v 0.124558 -0.878859 0.878859 +v -0.124558 0.878859 0.878859 +v -0.124558 0.878859 -0.878859 +v 0.124558 0.878859 -0.878859 +v 0.124558 0.878859 0.878859 +v 0.950521 -0.401125 0.508652 +v 0.731779 -0.401125 0.468334 +v 0.707717 -0.460691 0.332908 +v 1.009741 -0.460691 0.332908 +v 0.950521 -0.217566 0.508652 +v 0.731779 -0.217566 0.468334 +v 0.707717 -0.158667 0.332908 +v 1.009741 -0.158667 0.332908 +v 0.731779 -0.238798 0.468334 +v 0.998012 -0.167390 -0.162018 +v 0.719568 -0.167390 -0.162018 +v 0.731779 -0.377759 0.468334 +v 0.998012 -0.448604 -0.162018 +v 0.719568 -0.448604 -0.162018 +v 0.914262 -0.252598 0.478164 +v 0.803270 -0.252598 0.478164 +v 0.914262 -0.364694 0.478164 +v 0.803270 -0.364694 0.478164 +v 0.620544 -0.548352 -0.038430 +v 1.096878 -0.548352 -0.038430 +v 0.620544 -0.072018 -0.038430 +v 1.096878 -0.072018 -0.038430 +v 1.078385 -0.085617 -0.293149 +v 0.639240 -0.085617 -0.293149 +v 1.078385 -0.529130 -0.293149 +v 0.639240 -0.529130 -0.293149 +v 0.572556 -0.596610 -0.439430 +v 1.144846 -0.596610 -0.439430 +v 0.572556 -0.024319 -0.439430 +v 1.144846 -0.024319 -0.439430 +v 1.122629 -0.040602 -0.439430 +v 0.595020 -0.040602 -0.439430 +v 1.122629 -0.573460 -0.439430 +v 0.595020 -0.573460 -0.439430 +v 0.565091 -0.604116 -0.560299 +v 1.152308 -0.604116 -0.560299 +v 0.565091 -0.016899 -0.560299 +v 1.152308 -0.016899 -0.560299 +v 1.129525 -0.016899 -0.560299 +v 1.129525 -0.604116 -0.560299 +v 0.588119 -0.604116 -0.560299 +v 0.588119 -0.016899 -0.560299 +v 1.129512 -0.033600 -0.560299 +v 0.588141 -0.033600 -0.560299 +v 1.129512 -0.580355 -0.560299 +v 0.588141 -0.580355 -0.560299 +v 0.878910 -0.401125 0.613541 +v 0.766962 -0.401125 0.656220 +v 0.878910 -0.217566 0.613541 +v 0.766962 -0.217566 0.656220 +v 0.611368 -0.401125 0.668000 +v 0.611368 -0.401125 0.459767 +v 0.611368 -0.217566 0.668000 +v 0.611368 -0.217566 0.459767 +v 0.330999 -0.441340 0.833784 +v 0.330999 -0.441340 0.293945 +v 0.330999 0.442717 0.833784 +v 0.330999 0.442717 0.293945 +v 0.104206 -0.441340 0.833784 +v 0.104206 -0.441340 0.293945 +v 0.104206 0.442717 0.833784 +v 0.104206 0.442717 0.293945 +v 0.950521 0.210995 0.508652 +v 0.731779 0.210995 0.468334 +v 0.707717 0.151429 0.332908 +v 1.009742 0.151429 0.332908 +v 0.950521 0.394554 0.508652 +v 0.731779 0.394554 0.468334 +v 0.707717 0.453453 0.332908 +v 1.009742 0.453453 0.332908 +v 0.731779 0.373322 0.468334 +v 0.998012 0.444730 -0.162018 +v 0.719568 0.444730 -0.162018 +v 0.731779 0.234361 0.468334 +v 0.998012 0.163517 -0.162018 +v 0.719568 0.163517 -0.162018 +v 0.914263 0.359522 0.478164 +v 0.803271 0.359522 0.478164 +v 0.914263 0.247426 0.478164 +v 0.803271 0.247426 0.478164 +v 0.620544 0.063768 -0.038430 +v 1.096878 0.063768 -0.038430 +v 0.620544 0.540102 -0.038430 +v 1.096878 0.540102 -0.038430 +v 1.078385 0.526503 -0.293149 +v 0.639240 0.526503 -0.293149 +v 1.078385 0.082990 -0.293149 +v 0.639240 0.082990 -0.293149 +v 0.572556 0.015510 -0.439430 +v 1.144847 0.015510 -0.439430 +v 0.572556 0.587801 -0.439430 +v 1.144847 0.587801 -0.439430 +v 1.122629 0.571518 -0.439430 +v 0.595020 0.571518 -0.439430 +v 1.122629 0.038660 -0.439430 +v 0.595020 0.038660 -0.439430 +v 0.565091 0.008004 -0.560299 +v 1.152308 0.008004 -0.560299 +v 0.565091 0.595221 -0.560299 +v 1.152308 0.595221 -0.560299 +v 1.129525 0.595221 -0.560299 +v 1.129525 0.008004 -0.560299 +v 0.588120 0.008004 -0.560299 +v 0.588120 0.595221 -0.560299 +v 1.129512 0.578520 -0.560299 +v 0.588141 0.578520 -0.560299 +v 1.129512 0.031765 -0.560299 +v 0.588141 0.031765 -0.560299 +v 0.878910 0.210995 0.613541 +v 0.766962 0.210995 0.656220 +v 0.878910 0.394554 0.613541 +v 0.766962 0.394554 0.656220 +v 0.611368 0.210995 0.668000 +v 0.611368 0.210995 0.459767 +v 0.611368 0.394554 0.668000 +v 0.611368 0.394554 0.459767 +v 0.520600 -0.003953 0.722954 +v 0.520600 -0.003953 0.406063 +vt 0.513501 0.517501 +vt 0.990499 0.517501 +vt 0.513501 0.994500 +vt 0.514419 0.510419 +vt 0.981581 0.510419 +vt 0.514419 0.977581 +vt 0.522419 0.014419 +vt 0.989581 0.014419 +vt 0.522419 0.481581 +vt 0.981581 0.977581 +vt 0.989581 0.481581 +vt 0.522099 0.013779 +vt 0.989261 0.013779 +vt 0.522099 0.480941 +vt 0.989261 0.480941 +vt 0.013766 0.517766 +vt 0.482234 0.517766 +vt 0.013766 0.986234 +vt 0.482234 0.986234 +vt 0.990499 0.994500 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.998077 0.061985 +vn 0.000000 -0.848532 -0.529144 +vn 0.957220 0.000000 -0.289363 +vn 0.852723 0.000000 -0.522363 +vn -0.055379 0.952186 0.300456 +vn 0.000000 -0.915369 0.402616 +vn 0.947644 0.000000 0.319329 +vn -0.852593 0.000000 -0.522575 +vn 0.000000 0.991519 -0.129960 +vn 0.000000 0.852147 -0.523302 +vn 0.991561 0.000000 -0.129644 +vn -0.991551 0.000000 -0.129716 +vn 0.000000 -0.991258 -0.131936 +vn 0.000000 0.973840 0.227236 +vn 0.000000 0.992999 0.118119 +vn 0.000000 0.998377 -0.056957 +vn 0.973556 0.000000 0.228451 +vn 0.000000 -0.955768 -0.294120 +vn 0.000000 0.957021 -0.290019 +vn 0.000000 0.998121 0.061271 +vn -0.957175 0.000000 -0.289510 +vn -0.000000 -0.973249 0.229754 +vn -0.000000 -0.992837 0.119480 +vn -0.998383 0.000000 -0.056849 +vn 0.992921 0.000000 0.118775 +vn 0.998100 0.000000 0.061616 +vn 0.998385 0.000000 -0.056817 +vn -0.992915 0.000000 0.118824 +vn 0.000000 -0.998326 -0.057836 +vn -0.998098 0.000000 0.061641 +vn 0.356233 0.000000 0.934397 +vn 0.825877 0.000000 0.563850 +vn 0.075488 0.000000 0.997147 +vn 0.070967 0.000000 -0.997479 +vn 0.921231 -0.389017 0.000000 +vn 0.517911 0.000000 0.855434 +vn 0.509213 0.000000 -0.860641 +vn 0.141982 -0.989869 0.000000 +vn 0.000000 -0.915368 0.402617 +vn 0.957219 0.000000 -0.289363 +vn 0.000000 0.852148 -0.523302 +vn 0.991561 0.000000 -0.129645 +vn 0.973556 0.000000 0.228450 +vn 0.000000 0.957021 -0.290018 +vn -0.957175 0.000000 -0.289511 +vn -0.998383 0.000000 -0.056847 +vn 0.998100 0.000000 0.061615 +vn -0.973534 0.000000 0.228541 +vn 0.000000 -0.998326 -0.057835 +vn -0.984580 0.000000 0.174936 +vn 0.356232 0.000000 0.934397 +vn 0.000000 1.000000 -0.000002 +vn -0.000001 1.000000 0.000000 +vn 0.075489 0.000000 0.997147 +vn 0.169303 0.985564 0.000000 +vn 0.509075 0.000042 -0.860722 +vn 0.509322 0.002665 0.860572 +vn 0.920358 0.391077 0.000000 +vn -0.055379 0.952187 0.300456 +vn 0.504652 0.000000 0.863323 +vn 0.509002 0.000000 -0.860766 +vn 0.000000 -0.998077 0.061986 +vn 0.000000 0.917025 0.398830 +vn -0.055946 -0.951176 0.303536 +vn 0.000000 0.852148 -0.523301 +vn 0.000000 0.998377 -0.056956 +vn 0.973555 0.000000 0.228451 +vn -0.000000 -0.992837 0.119481 +vn 0.356234 0.000000 0.934397 +vn 0.075490 0.000000 0.997147 +vn 0.921231 -0.389016 0.000000 +vn 0.509269 -0.002691 0.860603 +vn 0.509075 -0.000043 -0.860722 +vn -0.055947 -0.951176 0.303536 +vn 0.000000 0.993000 0.118119 +vn -0.000000 0.998121 0.061272 +vn 0.070966 0.000000 -0.997479 +vn 0.509214 0.000000 -0.860640 +vn 0.517914 0.000000 0.855433 +vn -0.984580 0.000000 0.174935 +vn 0.000000 0.917025 0.398829 +f 5/1/1 6/2/1 1/3/1 +f 6/1/2 7/2/2 2/3/2 +f 7/1/3 8/2/3 3/3/3 +f 8/1/4 5/2/4 4/3/4 +f 1/1/5 2/2/5 4/3/5 +f 8/1/6 7/2/6 5/3/6 +f 44/4/7 36/5/7 43/6/7 +f 18/7/8 19/8/8 31/9/8 +f 32/7/9 34/8/9 40/9/9 +f 19/7/10 22/8/10 32/9/10 +f 14/4/11 13/5/11 16/10/11 +f 11/4/12 12/5/12 10/6/12 +f 16/4/13 13/5/13 12/6/13 +f 21/7/14 18/8/14 31/11/14 +f 21/7/15 22/8/15 26/11/15 +f 22/7/16 21/8/16 33/11/16 +f 22/7/17 19/8/17 26/9/17 +f 18/7/18 21/8/18 25/11/18 +f 19/7/19 18/8/19 24/9/19 +f 15/4/20 16/5/20 29/6/20 +f 30/4/21 38/5/21 37/10/21 +f 42/7/22 41/8/22 53/11/22 +f 12/4/23 28/5/23 16/6/23 +f 31/7/24 32/8/24 39/9/24 +f 34/7/25 33/8/25 41/11/25 +f 38/4/26 46/5/26 45/10/26 +f 33/7/27 31/8/27 39/11/27 +f 27/4/28 28/5/28 12/10/28 +f 28/4/29 27/5/29 35/10/29 +f 50/4/2 47/5/2 51/10/2 +f 41/7/30 39/8/30 51/11/30 +f 38/4/31 30/5/31 36/6/31 +f 46/4/32 38/5/32 44/6/32 +f 40/7/33 42/8/33 52/9/33 +f 91/4/34 99/5/34 97/10/34 +f 39/7/35 40/8/35 51/9/35 +f 99/4/36 107/5/36 105/10/36 +f 58/12/37 56/13/37 57/14/37 +f 10/12/5 56/14/5 60/13/5 +f 55/12/5 56/14/5 9/13/5 +f 55/12/38 9/14/38 57/13/38 +f 57/12/6 13/14/6 58/13/6 +f 62/12/6 61/14/6 58/15/6 +f 58/12/39 61/13/39 56/14/39 +f 60/12/40 62/14/40 10/13/40 +f 48/4/2 49/5/2 53/6/2 +f 66/16/2 64/17/2 70/18/2 +f 125/16/41 126/17/41 122/19/41 +f 70/16/6 69/17/6 66/18/6 +f 69/16/4 67/17/4 65/18/4 +f 61/16/42 125/17/42 59/18/42 +f 64/16/5 63/17/5 68/18/5 +f 62/16/43 60/18/43 126/17/43 +f 59/16/44 63/18/44 64/19/44 +f 35/4/36 37/5/36 43/6/36 +f 73/4/45 74/5/45 72/6/45 +f 80/7/8 81/8/8 93/9/8 +f 94/7/46 96/8/46 102/9/46 +f 81/7/10 84/8/10 94/9/10 +f 74/4/28 73/5/28 89/10/28 +f 78/4/13 75/5/13 74/6/13 +f 83/7/14 80/8/14 93/11/14 +f 83/7/15 84/8/15 88/11/15 +f 84/7/47 83/8/47 95/11/47 +f 84/7/48 81/8/48 88/9/48 +f 80/7/18 83/8/18 87/11/18 +f 81/7/19 80/8/19 86/9/19 +f 92/4/21 100/5/21 99/10/21 +f 104/7/22 103/8/22 115/11/22 +f 74/4/49 90/5/49 78/6/49 +f 93/7/24 94/8/24 101/9/24 +f 96/7/50 95/8/50 103/11/50 +f 100/4/26 108/5/26 107/10/26 +f 95/7/51 93/8/51 101/11/51 +f 90/4/29 89/5/29 97/10/29 +f 98/4/7 97/5/7 105/10/7 +f 112/4/2 109/5/2 113/10/2 +f 103/7/52 101/8/52 113/11/52 +f 100/4/31 92/5/31 98/6/31 +f 108/4/53 100/5/53 106/6/53 +f 102/7/33 104/8/33 114/9/33 +f 27/4/34 29/5/34 35/6/34 +f 29/4/54 27/5/54 15/6/54 +f 101/7/55 102/8/55 113/9/55 +f 14/4/56 15/5/56 11/10/56 +f 120/12/57 118/13/57 119/14/57 +f 72/12/5 118/14/5 122/13/5 +f 117/12/5 118/14/5 71/13/5 +f 117/12/38 71/14/38 119/13/38 +f 119/12/58 75/14/58 120/13/58 +f 124/12/59 123/14/59 120/15/59 +f 120/12/60 123/13/60 118/14/60 +f 122/12/40 124/14/40 72/13/40 +f 110/4/2 111/5/2 115/6/2 +f 123/16/61 124/18/61 66/19/61 +f 126/16/62 66/17/62 124/19/62 +f 123/16/63 65/17/63 125/19/63 +f 61/16/64 62/17/64 125/18/64 +f 76/4/56 77/5/56 73/10/56 +f 89/4/54 73/5/54 77/10/54 +f 105/4/2 107/5/2 111/6/2 +f 108/4/2 106/5/2 109/6/2 +f 46/4/2 44/5/2 47/6/2 +f 45/4/2 50/5/2 43/6/2 +f 77/4/20 78/5/20 91/6/20 +f 76/4/65 75/5/65 78/10/65 +f 65/16/66 63/17/66 125/19/66 +f 66/16/67 126/17/67 64/19/67 +f 6/2/1 2/20/1 1/3/1 +f 7/2/2 3/20/2 2/3/2 +f 8/2/3 4/20/3 3/3/3 +f 5/2/4 1/20/4 4/3/4 +f 2/2/5 3/20/5 4/3/5 +f 7/2/6 6/20/6 5/3/6 +f 36/5/68 35/10/68 43/6/68 +f 19/8/8 32/11/8 31/9/8 +f 34/8/9 42/11/9 40/9/9 +f 22/8/10 34/11/10 32/9/10 +f 15/6/69 14/4/69 16/10/69 +f 12/5/70 9/10/70 10/6/70 +f 13/5/13 9/10/13 12/6/13 +f 33/9/14 21/7/14 31/11/14 +f 25/9/15 21/7/15 26/11/15 +f 34/9/71 22/7/71 33/11/71 +f 19/8/17 24/11/17 26/9/17 +f 23/9/18 18/7/18 25/11/18 +f 18/8/19 23/11/19 24/9/19 +f 16/5/20 30/10/20 29/6/20 +f 29/6/21 30/4/21 37/10/21 +f 54/9/72 42/7/72 53/11/72 +f 28/5/73 30/10/73 16/6/73 +f 32/8/24 40/11/24 39/9/24 +f 42/9/50 34/7/50 41/11/50 +f 37/6/26 38/4/26 45/10/26 +f 41/9/27 33/7/27 39/11/27 +f 11/6/28 27/4/28 12/10/28 +f 36/6/74 28/4/74 35/10/74 +f 52/6/2 50/4/2 51/10/2 +f 53/9/30 41/7/30 51/11/30 +f 30/5/31 28/10/31 36/6/31 +f 38/5/32 36/10/32 44/6/32 +f 42/8/33 54/11/33 52/9/33 +f 89/6/34 91/4/34 97/10/34 +f 40/8/35 52/11/35 51/9/35 +f 97/6/36 99/4/36 105/10/36 +f 56/13/75 55/15/75 57/14/75 +f 56/14/5 59/15/5 60/13/5 +f 56/14/5 10/15/5 9/13/5 +f 9/14/38 13/15/38 57/13/38 +f 13/14/6 14/15/6 58/13/6 +f 14/13/6 62/12/6 58/15/6 +f 61/13/76 59/15/76 56/14/76 +f 62/14/40 14/15/40 10/13/40 +f 49/5/2 54/10/2 53/6/2 +f 64/17/2 68/19/2 70/18/2 +f 121/18/77 125/16/77 122/19/77 +f 69/17/6 65/19/6 66/18/6 +f 67/17/4 63/19/4 65/18/4 +f 125/17/78 63/19/78 59/18/78 +f 63/17/5 67/19/5 68/18/5 +f 60/18/79 64/19/79 126/17/79 +f 60/17/44 59/16/44 64/19/44 +f 37/5/36 45/10/36 43/6/36 +f 74/5/80 71/10/80 72/6/80 +f 81/8/8 94/11/8 93/9/8 +f 96/8/46 104/11/46 102/9/46 +f 84/8/10 96/11/10 94/9/10 +f 90/6/28 74/4/28 89/10/28 +f 75/5/13 71/10/13 74/6/13 +f 95/9/14 83/7/14 93/11/14 +f 87/9/15 83/7/15 88/11/15 +f 96/9/47 84/7/47 95/11/47 +f 81/8/48 86/11/48 88/9/48 +f 85/9/18 80/7/18 87/11/18 +f 80/8/19 85/11/19 86/9/19 +f 91/6/81 92/4/81 99/10/81 +f 116/9/22 104/7/22 115/11/22 +f 90/5/49 92/10/49 78/6/49 +f 94/8/24 102/11/24 101/9/24 +f 104/9/50 96/7/50 103/11/50 +f 99/6/82 100/4/82 107/10/82 +f 103/9/51 95/7/51 101/11/51 +f 98/6/29 90/4/29 97/10/29 +f 106/6/7 98/4/7 105/10/7 +f 114/6/2 112/4/2 113/10/2 +f 115/9/52 103/7/52 113/11/52 +f 92/5/31 90/10/31 98/6/31 +f 100/5/53 98/10/53 106/6/53 +f 104/8/33 116/11/33 114/9/33 +f 29/5/34 37/10/34 35/6/34 +f 27/5/54 11/10/54 15/6/54 +f 102/8/55 114/11/55 113/9/55 +f 10/6/56 14/4/56 11/10/56 +f 118/13/75 117/15/75 119/14/75 +f 118/14/5 121/15/5 122/13/5 +f 118/14/5 72/15/5 71/13/5 +f 71/14/38 75/15/38 119/13/38 +f 75/14/6 76/15/6 120/13/6 +f 76/13/59 124/12/59 120/15/59 +f 123/13/60 121/15/60 118/14/60 +f 124/14/83 76/15/83 72/13/83 +f 111/5/2 116/10/2 115/6/2 +f 65/17/61 123/16/61 66/19/61 +f 122/18/84 126/16/84 124/19/84 +f 121/18/85 123/16/85 125/19/85 +f 62/17/64 126/19/64 125/18/64 +f 72/6/86 76/4/86 73/10/86 +f 91/6/54 89/4/54 77/10/54 +f 107/5/2 112/10/2 111/6/2 +f 106/5/2 110/10/2 109/6/2 +f 44/5/2 48/10/2 47/6/2 +f 50/5/2 49/10/2 43/6/2 +f 78/5/20 92/10/20 91/6/20 +f 77/6/87 76/4/87 78/10/87 +l 20 10 +l 17 14 +l 20 17 +l 82 72 +l 79 76 +l 82 79 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/_factories.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/_factories.json new file mode 100644 index 00000000..1ff12e46 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/_factories.json @@ -0,0 +1,12 @@ +{ + "recipes": { + "replacable": "micdoodle8.mods.galacticraft.core.recipe.OreRecipeUpdatable$RecipeFactory" + }, + "ingredients": { + "advanced_metal": "micdoodle8.mods.galacticraft.core.recipe.IngredientAdvancedMetal", + "item_silicon": "micdoodle8.mods.galacticraft.core.recipe.IngredientSilicon" + }, + "conditions": { + "condition": "micdoodle8.mods.galacticraft.core.recipe.ConditionEnabled" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_fan.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_fan.json new file mode 100644 index 00000000..dcedfb2d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_fan.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:air_fan" + }, + "pattern": [ + "Z Z", + " Y ", + "ZXZ" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_0.json new file mode 100644 index 00000000..e294530e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_0.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:air_lock_frame", + "data": 0, + "count": 4 + }, + "pattern": [ + "XXX", + "YZY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "item": "galacticraftcore:oxygen_concentrator" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_1.json new file mode 100644 index 00000000..0339e951 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_1.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:air_lock_frame", + "data": 1 + }, + "pattern": [ + "YYY", + "WZW", + "YYY" + ], + "type": "galacticraftcore:replacable", + "key": { + "W": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_plate" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "item": "galacticraftcore:basic_item", + "data": 13 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_vent.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_vent.json new file mode 100644 index 00000000..3b8f602c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_vent.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:air_vent" + }, + "ingredients": [ + { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_0.json new file mode 100644 index 00000000..dc170bf2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_0.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 0, + "count": 6 + }, + "pattern": [ + "WWW", + "CCC", + "WWW" + ], + "type": "galacticraftcore:replacable", + "key": { + "C": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + }, + "W": { + "item": "minecraft:wool", + "data": 32767 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1.json new file mode 100644 index 00000000..b6cb5e7f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "pattern": [ + "X", + "Y", + "Z" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:wool", + "data": 32767 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1_alt.json new file mode 100644 index 00000000..c14c4eee --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1_alt.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "pattern": [ + "Z", + "Y", + "X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:wool", + "data": 32767 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_2.json new file mode 100644 index 00000000..b81244bf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_2.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 2 + }, + "ingredients": [ + { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + { + "item": "minecraft:repeater" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_3.json new file mode 100644 index 00000000..e33e02a3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_3.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 3 + }, + "ingredients": [ + { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + { + "item": "minecraft:repeater" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/arclamp.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/arclamp.json new file mode 100644 index 00000000..3594fa62 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/arclamp.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:arclamp" + }, + "pattern": [ + "XYX", + "YZY", + "XYX" + ], + "type": "galacticraftcore:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "minecraft:glowstone_dust" + }, + "Z": { + "item": "galacticraftcore:battery" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_10.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_10.json new file mode 100644 index 00000000..4affe35f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_10.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 10 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_item", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_11.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_11.json new file mode 100644 index 00000000..a5a7bb78 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_11.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 11 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_item", + "data": 5 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_12.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_12.json new file mode 100644 index 00000000..b6d258ae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_12.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 12 + }, + "pattern": [ + "YYY", + "YYY", + "YYY" + ], + "type": "galacticraftcore:replacable", + "key": { + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_13.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_13.json new file mode 100644 index 00000000..da213a42 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_13.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 13 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "type": "galacticraftcore:item_silicon" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_3.json new file mode 100644 index 00000000..92c00d41 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_3.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 3, + "count": 4 + }, + "pattern": [ + "XX ", + "XXY", + " " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stone" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedTin" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_4.json new file mode 100644 index 00000000..9b089668 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_4.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 4, + "count": 4 + }, + "pattern": [ + "XX ", + "XX ", + " Y " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stone" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedTin" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_9.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_9.json new file mode 100644 index 00000000..d97ebd89 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_9.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 9 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_item", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_0.json new file mode 100644 index 00000000..1cbf7f2a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_0.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 0, + "count": 2 + }, + "pattern": [ + "XXX", + "YYY", + "ZZZ" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferSolar" + }, + "Z": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_1.json new file mode 100644 index 00000000..f5db7a17 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_1.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 1 + }, + "pattern": [ + "XXX", + "YYY", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_item", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_15.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_15.json new file mode 100644 index 00000000..6d7c507b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_15.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 15 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:apple" + }, + { + "item": "minecraft:apple" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_16.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_16.json new file mode 100644 index 00000000..81b7bacd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_16.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 16 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:carrot" + }, + { + "item": "minecraft:carrot" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_17.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_17.json new file mode 100644 index 00000000..3d4940ad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_17.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 17 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:melon" + }, + { + "item": "minecraft:melon" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_18.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_18.json new file mode 100644 index 00000000..8cbe68c2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_18.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 18 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:potato" + }, + { + "item": "minecraft:potato" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_19.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_19.json new file mode 100644 index 00000000..09ebc0e3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_19.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 19 + }, + "pattern": [ + " X ", + "YUY", + "ZWZ" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "item": "minecraft:repeater" + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedIron" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_2.json new file mode 100644 index 00000000..9c9bf2b6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_2.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 2, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 13 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_20.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_20.json new file mode 100644 index 00000000..09aba1a6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_20.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 20 + }, + "pattern": [ + "WVW", + "YXY", + "YZY" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:air_vent" + }, + "W": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferBasic" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_3.json new file mode 100644 index 00000000..a9f2799b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 3, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 9 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_4.json new file mode 100644 index 00000000..4f6120e5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_4.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 4, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 10 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_5.json new file mode 100644 index 00000000..3a871e2d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_5.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 5, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 11 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/battery.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/battery.json new file mode 100644 index 00000000..429793d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/battery.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftcore:battery", + "data": 100, + "count": 2 + }, + "pattern": [ + " T ", + "TRT", + "TCT" + ], + "type": "galacticraftcore:replacable", + "key": { + "R": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "C": { + "item": "minecraft:coal", + "data": 0 + }, + "T": { + "type": "forge:ore_dict", + "ore": "compressedTin" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_0.json new file mode 100644 index 00000000..e9f4ceeb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:buggymat", + "data": 0 + }, + "pattern": [ + " W ", + "WXW", + " W " + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "leather" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_1.json new file mode 100644 index 00000000..931f7e9e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_1.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:buggymat", + "data": 1 + }, + "pattern": [ + " Y", + " ZY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedIron" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_2.json new file mode 100644 index 00000000..d1a8d61c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_2.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:buggymat", + "data": 2 + }, + "pattern": [ + "XXX", + "YZY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedIron" + }, + "Z": { + "item": "minecraft:chest" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0.json new file mode 100644 index 00000000..99aaebc7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:canister", + "data": 0, + "count": 2 + }, + "pattern": [ + "X X", + "X X", + "XXX" + ], + "type": "forge:ore_shaped", + "conditions": [ + { + "type": "galacticraftcore:condition", + "data": "can_default" + } + ], + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "ingotTin" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0_alt.json new file mode 100644 index 00000000..088a3b79 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0_alt.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:canister", + "data": 0, + "count": 2 + }, + "pattern": [ + "XXX", + "X ", + "XXX" + ], + "type": "forge:ore_shaped", + "conditions": [ + { + "type": "galacticraftcore:condition", + "data": "can_alt" + } + ], + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "ingotTin" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1.json new file mode 100644 index 00000000..062915ed --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:canister", + "data": 1, + "count": 2 + }, + "pattern": [ + "X X", + "X X", + "XXX" + ], + "type": "forge:ore_shaped", + "conditions": [ + { + "type": "galacticraftcore:condition", + "data": "can_default" + } + ], + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "ingotCopper" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1_alt.json new file mode 100644 index 00000000..de2cbd64 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1_alt.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:canister", + "data": 1, + "count": 2 + }, + "pattern": [ + "XXX", + "X ", + "XXX" + ], + "type": "forge:ore_shaped", + "conditions": [ + { + "type": "galacticraftcore:condition", + "data": "can_alt" + } + ], + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "ingotCopper" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canvas.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canvas.json new file mode 100644 index 00000000..36ae7b4a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canvas.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:canvas" + }, + "pattern": [ + " XY", + "XXX", + "YX " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "string" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "stickWood" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_0.json new file mode 100644 index 00000000..d58bc432 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_0.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:cargo", + "data": 0 + }, + "pattern": [ + "XWX", + "YZY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "item": "minecraft:hopper" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Z": { + "item": "minecraft:chest" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_4.json new file mode 100644 index 00000000..c0d07499 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_4.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:cargo", + "data": 4 + }, + "pattern": [ + "XXX", + "YZY", + "XWX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "item": "minecraft:hopper" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Z": { + "item": "minecraft:chest" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cheese.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cheese.json new file mode 100644 index 00000000..2b0bf325 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cheese.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:cheese" + }, + "pattern": [ + "YYY", + "YXY", + "YYY" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:milk_bucket" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "foodCheese" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone.json new file mode 100644 index 00000000..6fd9a20c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "minecraft:cobblestone", + "count": 2 + }, + "ingredients": [ + { + "item": "galacticraftplanets:asteroids_block", + "data": 0 + }, + { + "item": "galacticraftplanets:asteroids_block", + "data": 1 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt.json new file mode 100644 index 00000000..297981f9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "minecraft:cobblestone", + "count": 2 + }, + "ingredients": [ + { + "item": "galacticraftplanets:asteroids_block", + "data": 0 + }, + { + "item": "galacticraftplanets:asteroids_block", + "data": 2 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt_alt.json new file mode 100644 index 00000000..37f3a66f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt_alt.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "minecraft:cobblestone", + "count": 2 + }, + "ingredients": [ + { + "item": "galacticraftplanets:asteroids_block", + "data": 1 + }, + { + "item": "galacticraftplanets:asteroids_block", + "data": 2 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/collector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/collector.json new file mode 100644 index 00000000..51196580 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/collector.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:collector" + }, + "pattern": [ + "WWW", + "YXZ", + "UVU" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "V": { + "item": "galacticraftcore:oxygen_concentrator" + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:air_fan" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/compact_workbench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/compact_workbench.json new file mode 100644 index 00000000..ae57617a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/compact_workbench.json @@ -0,0 +1,12 @@ +{ + "result": { + "item": "galacticraftcore:compact_workbench" + }, + "ingredients": [ + { + "item": "galacticraftcore:rocket_workbench", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_redstone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_redstone.json new file mode 100644 index 00000000..5681d752 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_redstone.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:concealed_redstone", + "count": 4 + }, + "pattern": [ + " X ", + "XYX", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_repeater.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_repeater.json new file mode 100644 index 00000000..22d3da09 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_repeater.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:concealed_repeater" + }, + "pattern": [ + " ", + "XYX", + " " + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "item": "minecraft:repeater" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dishbase.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dishbase.json new file mode 100644 index 00000000..6cc3990c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dishbase.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:dishbase" + }, + "pattern": [ + "XFX", + " X ", + "WYW" + ], + "type": "forge:ore_shaped", + "key": { + "F": { + "item": "galacticraftcore:basic_item", + "data": 19 + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "blockIron" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/distributor.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/distributor.json new file mode 100644 index 00000000..39c298cb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/distributor.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftcore:distributor" + }, + "pattern": [ + "WXW", + "YZY", + "WXW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "item": "galacticraftcore:air_fan" + }, + "Y": { + "item": "galacticraftcore:air_vent" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dye_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dye_2.json new file mode 100644 index 00000000..28f6aac0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dye_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "minecraft:dye", + "data": 2, + "count": 2 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 11 + }, + { + "item": "minecraft:dye", + "data": 4 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_0.json new file mode 100644 index 00000000..dde457d8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_0.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:emergency_box", + "data": 0 + }, + "pattern": [ + "XYX", + "Y Y", + "XYX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:glowstone_torch" + }, + "Y": { + "item": "galacticraftcore:basic_item", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_1.json new file mode 100644 index 00000000..ec2f0ccb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_1.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:emergency_box", + "data": 1 + }, + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "galacticraftcore:emergency_box", + "data": 0 + }, + { + "item": "galacticraftcore:emergency_kit" + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_1.json new file mode 100644 index 00000000..2e5e7b60 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_1.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:enclosed", + "data": 1 + }, + "pattern": [ + "XYX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "item": "galacticraftcore:fluid_pipe" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_14.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_14.json new file mode 100644 index 00000000..d7414b93 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_14.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:enclosed", + "data": 14 + }, + "pattern": [ + "XYX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_15.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_15.json new file mode 100644 index 00000000..d4fcb405 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_15.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:enclosed", + "data": 15 + }, + "pattern": [ + "XYX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0.json new file mode 100644 index 00000000..e7585a0e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "galacticraftcore:engine", + "data": 0 + }, + "pattern": [ + " YV", + "XWX", + "XZX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "V": { + "item": "minecraft:stone_button" + }, + "W": { + "item": "galacticraftcore:canister", + "data": 32767 + }, + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "item": "minecraft:flint_and_steel" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0_alt.json new file mode 100644 index 00000000..529b3305 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0_alt.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "galacticraftcore:engine", + "data": 0 + }, + "pattern": [ + "VY ", + "XWX", + "XZX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "V": { + "item": "minecraft:stone_button" + }, + "W": { + "item": "galacticraftcore:canister", + "data": 32767 + }, + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "item": "minecraft:flint_and_steel" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_1.json new file mode 100644 index 00000000..25796c10 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_1.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "galacticraftcore:engine", + "data": 1 + }, + "pattern": [ + "ZYZ", + "ZWZ", + "XVX" + ], + "type": "galacticraftcore:replacable", + "key": { + "V": { + "item": "galacticraftcore:air_vent" + }, + "W": { + "item": "galacticraftcore:fuel_canister_partial", + "data": 1 + }, + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "item": "minecraft:wool", + "data": 4 + }, + "Z": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/flag.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/flag.json new file mode 100644 index 00000000..ff8c91a0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/flag.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:flag" + }, + "pattern": [ + "XYY", + "XYY", + "X " + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:steel_pole" + }, + "Y": { + "item": "galacticraftcore:canvas" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_pipe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_pipe.json new file mode 100644 index 00000000..eeeb7e49 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_pipe.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:fluid_pipe", + "count": 6 + }, + "pattern": [ + "XXX", + " ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_tank.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_tank.json new file mode 100644 index 00000000..63afff70 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_tank.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:fluid_tank" + }, + "pattern": [ + " X ", + "X X", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_0.json new file mode 100644 index 00000000..607dba3e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_0.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 0 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:apple" + }, + { + "item": "minecraft:apple" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_1.json new file mode 100644 index 00000000..9a68b1c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_1.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 1 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:carrot" + }, + { + "item": "minecraft:carrot" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_2.json new file mode 100644 index 00000000..9652fb6a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_2.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 2 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:melon" + }, + { + "item": "minecraft:melon" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_3.json new file mode 100644 index 00000000..ec8497bb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_3.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 3 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:potato" + }, + { + "item": "minecraft:potato" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_4.json new file mode 100644 index 00000000..3a1ac966 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_4.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 4, + "count": 6 + }, + "ingredients": [ + { + "item": "galacticraftcore:cheese" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_5.json new file mode 100644 index 00000000..ba0b92e6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_5.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 5, + "count": 2 + }, + "ingredients": [ + { + "item": "minecraft:wheat" + }, + { + "item": "minecraft:wheat" + }, + { + "item": "minecraft:egg" + }, + { + "item": "minecraft:milk_bucket" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_6.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_6.json new file mode 100644 index 00000000..d4038eea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_6.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 6, + "count": 2 + }, + "ingredients": [ + { + "item": "minecraft:beef" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_8.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_8.json new file mode 100644 index 00000000..35efe5ee --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_8.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 8 + }, + "ingredients": [ + { + "item": "galacticraftcore:food", + "data": 4 + }, + { + "item": "galacticraftcore:food", + "data": 7 + }, + { + "item": "galacticraftcore:food", + "data": 5 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_9.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_9.json new file mode 100644 index 00000000..84b9f43c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_9.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 9 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "galacticraftcore:food", + "data": 6 + }, + { + "item": "galacticraftcore:food", + "data": 6 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fuel_loader.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fuel_loader.json new file mode 100644 index 00000000..9e90e7f6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fuel_loader.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:fuel_loader" + }, + "pattern": [ + "XXX", + "XZX", + "WYW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedCopper" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "Z": { + "item": "galacticraftcore:canister", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/furnace.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/furnace.json new file mode 100644 index 00000000..e3ab2457 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/furnace.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "minecraft:furnace" + }, + "pattern": [ + "XXX", + "X X", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/glowstone_torch.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/glowstone_torch.json new file mode 100644 index 00000000..e8bcc7ea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/glowstone_torch.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:glowstone_torch", + "count": 4 + }, + "pattern": [ + "Y", + "X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "dustGlowstone" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/grating.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/grating.json new file mode 100644 index 00000000..413cf65d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/grating.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:grating", + "count": 4 + }, + "ingredients": [ + { + "item": "minecraft:iron_bars" + }, + { + "item": "minecraft:iron_bars" + }, + { + "item": "minecraft:iron_bars" + }, + { + "item": "minecraft:iron_bars" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/item_basic_moon_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/item_basic_moon_0.json new file mode 100644 index 00000000..6af7523b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/item_basic_moon_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:item_basic_moon", + "data": 0, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 12 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_0.json new file mode 100644 index 00000000..27934fd7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:landing_pad", + "data": 0, + "count": 9 + }, + "pattern": [ + "YYY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "blockIron" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedIron" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_1.json new file mode 100644 index 00000000..9c656f46 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_1.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:landing_pad", + "data": 1, + "count": 9 + }, + "pattern": [ + "YYY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "blockIron" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/lit_pumpkin.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/lit_pumpkin.json new file mode 100644 index 00000000..d86d5c3d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/lit_pumpkin.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "minecraft:lit_pumpkin" + }, + "pattern": [ + "P ", + "T ", + " " + ], + "type": "minecraft:crafting_shaped", + "key": { + "P": { + "item": "minecraft:pumpkin" + }, + "T": { + "item": "galacticraftcore:unlit_torch" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0.json new file mode 100644 index 00000000..effa5ca4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 0 + }, + "pattern": [ + "WXW", + "WYW", + "VZV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "item": "minecraft:anvil", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0_alt.json new file mode 100644 index 00000000..2ed1fd8b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0_alt.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 0 + }, + "pattern": [ + "WXW", + "WYW", + "VZV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "Y": { + "item": "galacticraftcore:machine", + "data": 12 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_12.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_12.json new file mode 100644 index 00000000..969ae5ba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_12.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 12 + }, + "pattern": [ + "WCW", + "VAV", + "WBW" + ], + "type": "forge:ore_shaped", + "key": { + "A": { + "item": "minecraft:anvil", + "data": 0 + }, + "B": { + "item": "minecraft:furnace" + }, + "C": { + "item": "minecraft:shears" + }, + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_4.json new file mode 100644 index 00000000..78d605a6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_4.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 4 + }, + "pattern": [ + "WXW", + "UYU", + "VZV" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "item": "minecraft:stone_button" + }, + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + }, + "X": { + "item": "minecraft:lever" + }, + "Y": { + "item": "minecraft:furnace" + }, + "Z": { + "item": "minecraft:redstone_torch" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_8.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_8.json new file mode 100644 index 00000000..31020fcc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_8.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 8 + }, + "pattern": [ + "SSS", + "BBB", + "SSS" + ], + "type": "forge:ore_shaped", + "key": { + "B": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "S": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine3_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine3_0.json new file mode 100644 index 00000000..7167ea99 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine3_0.json @@ -0,0 +1,50 @@ +{ + "result": { + "item": "galacticraftcore:machine3", + "data": 0 + }, + "pattern": [ + "ABC", + "DEF", + "GHI" + ], + "type": "forge:ore_shaped", + "key": { + "A": { + "type": "forge:ore_dict", + "ore": "dyeRed" + }, + "B": { + "type": "forge:ore_dict", + "ore": "dyeMagenta" + }, + "C": { + "type": "forge:ore_dict", + "ore": "dyeBlue" + }, + "D": { + "type": "forge:ore_dict", + "ore": "dyeOrange" + }, + "E": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "F": { + "type": "forge:ore_dict", + "ore": "dyeCyan" + }, + "G": { + "type": "forge:ore_dict", + "ore": "dyeYellow" + }, + "H": { + "type": "forge:ore_dict", + "ore": "dyeLime" + }, + "I": { + "type": "forge:ore_dict", + "ore": "dyeGreen" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine4_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine4_0.json new file mode 100644 index 00000000..e7451459 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine4_0.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:machine4", + "data": 0 + }, + "pattern": [ + "WXW", + "WYW", + "VZV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "item": "minecraft:anvil", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedMeteoricIron" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_0.json new file mode 100644 index 00000000..f4e06f08 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_0.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:machine", + "data": 0 + }, + "pattern": [ + "WWW", + "XZX", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "ingotCopper" + }, + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "Z": { + "item": "minecraft:furnace" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_12.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_12.json new file mode 100644 index 00000000..b4b95f4f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_12.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "galacticraftcore:machine", + "data": 12 + }, + "pattern": [ + "WXW", + "WYW", + "WZW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + }, + "X": { + "item": "minecraft:anvil", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "ingotCopper" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferBasic" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_0.json new file mode 100644 index 00000000..cdf1b28d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:machine_tiered", + "data": 0 + }, + "pattern": [ + "SSS", + "BBB", + "SSS" + ], + "type": "forge:ore_shaped", + "key": { + "B": { + "item": "galacticraftcore:battery", + "data": 100 + }, + "S": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_12.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_12.json new file mode 100644 index 00000000..82431c39 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_12.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:machine_tiered", + "data": 12 + }, + "pattern": [ + "XXX", + "XZX", + "WYW" + ], + "type": "galacticraftcore:replacable", + "key": { + "W": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + }, + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "Z": { + "item": "galacticraftcore:machine_tiered", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_4.json new file mode 100644 index 00000000..83c161b1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_4.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:machine_tiered", + "data": 4 + }, + "pattern": [ + "XXX", + "XZX", + "WYW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "Z": { + "item": "minecraft:furnace" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_8.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_8.json new file mode 100644 index 00000000..cab29b26 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_8.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:machine_tiered", + "data": 8 + }, + "pattern": [ + "BSB", + "SWS", + "BSB" + ], + "type": "forge:ore_shaped", + "key": { + "B": { + "item": "galacticraftcore:machine_tiered", + "data": 0 + }, + "S": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/magnetic_table.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/magnetic_table.json new file mode 100644 index 00000000..faa7429c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/magnetic_table.json @@ -0,0 +1,15 @@ +{ + "result": { + "item": "galacticraftcore:magnetic_table" + }, + "ingredients": [ + { + "item": "minecraft:crafting_table" + }, + { + "type": "forge:ore_dict", + "ore": "compressedIron" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/meteor_chunk_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/meteor_chunk_0.json new file mode 100644 index 00000000..28d445d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/meteor_chunk_0.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "galacticraftcore:meteor_chunk", + "data": 0, + "count": 3 + }, + "ingredients": [ + { + "item": "galacticraftcore:meteoric_iron_raw" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick.json new file mode 100644 index 00000000..70a90de0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:moon_stairs_brick", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick_alt.json new file mode 100644 index 00000000..1f34e6d4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:moon_stairs_brick", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone.json new file mode 100644 index 00000000..cdc6a429 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:moon_stairs_stone", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone_alt.json new file mode 100644 index 00000000..621b93c4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:moon_stairs_stone", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/nose_cone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/nose_cone.json new file mode 100644 index 00000000..c3222214 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/nose_cone.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:nose_cone" + }, + "pattern": [ + " Y ", + " X ", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "item": "minecraft:redstone_torch" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oil_canister_partial_1001.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oil_canister_partial_1001.json new file mode 100644 index 00000000..dbb91cae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oil_canister_partial_1001.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:oil_canister_partial", + "data": 1001 + }, + "pattern": [ + "WXW", + "WYW", + "WZW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "minecraft:glass" + }, + "Z": { + "item": "galacticraftcore:canister", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_0.json new file mode 100644 index 00000000..cc4a0c7f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_0.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + }, + "pattern": [ + "XWX", + "WZW", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Z": { + "item": "galacticraftcore:oxygen_concentrator" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_4.json new file mode 100644 index 00000000..ad675109 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_4.json @@ -0,0 +1,31 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_compressor", + "data": 4 + }, + "pattern": [ + "XVX", + "WZW", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:air_fan" + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "minecraft:redstone_torch" + }, + "Z": { + "item": "galacticraftcore:oxygen_concentrator" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_concentrator.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_concentrator.json new file mode 100644 index 00000000..07936728 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_concentrator.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_concentrator" + }, + "pattern": [ + "ZWZ", + "WYW", + "ZXZ" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "X": { + "item": "galacticraftcore:air_vent" + }, + "Y": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_detector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_detector.json new file mode 100644 index 00000000..e12e226d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_detector.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_detector" + }, + "pattern": [ + "WWW", + "YVY", + "ZUZ" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "V": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "galacticraftcore:air_vent" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_gear.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_gear.json new file mode 100644 index 00000000..4471d09a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_gear.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_gear" + }, + "pattern": [ + " Y ", + "YXY", + "Y Y" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:oxygen_concentrator" + }, + "Y": { + "item": "galacticraftcore:fluid_pipe" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_mask.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_mask.json new file mode 100644 index 00000000..e386c63b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_mask.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_mask" + }, + "pattern": [ + "XXX", + "XYX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "minecraft:iron_helmet" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_heavy_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_heavy_full.json new file mode 100644 index 00000000..4b75ea3b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_heavy_full.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "pattern": [ + "ZZZ", + "XXX", + "YYY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "item": "minecraft:wool", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_light_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_light_full.json new file mode 100644 index 00000000..3fb4a158 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_light_full.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_tank_light_full", + "data": 900 + }, + "pattern": [ + "Z", + "X", + "Y" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedCopper" + }, + "Z": { + "item": "minecraft:wool", + "data": 5 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_med_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_med_full.json new file mode 100644 index 00000000..1938c07e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_med_full.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 1800 + }, + "pattern": [ + "ZZ", + "XX", + "YY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "Z": { + "item": "minecraft:wool", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_0.json new file mode 100644 index 00000000..20575951 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_0.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 0 + }, + "pattern": [ + "XXX", + "XYX", + "XZX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_1.json new file mode 100644 index 00000000..bb352cb8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_1.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 1 + }, + "pattern": [ + "X X", + " Y ", + "XZX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_2.json new file mode 100644 index 00000000..8ca784d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_2.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 2 + }, + "pattern": [ + "X X", + "XYX", + "XZX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_3.json new file mode 100644 index 00000000..2c3752d5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_3.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 3 + }, + "pattern": [ + " ", + "XYX", + " Z " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_4.json new file mode 100644 index 00000000..ff9601d3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_4.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 4 + }, + "pattern": [ + " X ", + "XY ", + " Z " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0.json new file mode 100644 index 00000000..90685d1e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 0 + }, + "pattern": [ + "XXX", + "Y Y", + " Y " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:canvas" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "string" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0_alt.json new file mode 100644 index 00000000..e4f91aa4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0_alt.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 0 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 15 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_1.json new file mode 100644 index 00000000..31fe60a5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_1.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 1 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 0 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_10.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_10.json new file mode 100644 index 00000000..9ca982b2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_10.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 10 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 14 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_11.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_11.json new file mode 100644 index 00000000..d7ea1d03 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_11.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 11 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 9 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_12.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_12.json new file mode 100644 index 00000000..5d6bcd95 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_12.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 12 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 5 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_13.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_13.json new file mode 100644 index 00000000..072379c1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_13.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 13 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 1 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_14.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_14.json new file mode 100644 index 00000000..79de4d0a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_14.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 14 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 6 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_15.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_15.json new file mode 100644 index 00000000..24aa7122 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_15.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 15 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 11 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_2.json new file mode 100644 index 00000000..2be5c784 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_2.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 2 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 12 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_3.json new file mode 100644 index 00000000..7c225e0f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 3 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 10 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_4.json new file mode 100644 index 00000000..1701a342 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_4.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 4 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 3 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_5.json new file mode 100644 index 00000000..404ab9b7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_5.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 5 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 4 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_6.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_6.json new file mode 100644 index 00000000..626bc51f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_6.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 6 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 8 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_7.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_7.json new file mode 100644 index 00000000..b7fe4b0a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_7.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 7 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 2 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_8.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_8.json new file mode 100644 index 00000000..576830ca --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_8.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 8 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 7 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_9.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_9.json new file mode 100644 index 00000000..5148db4b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_9.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 9 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 13 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/platform.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/platform.json new file mode 100644 index 00000000..d768e04c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/platform.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "galacticraftcore:platform", + "data": 0, + "count": 4 + }, + "pattern": [ + "PAP", + "BXB", + "PAP" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "A": { + "type": "forge:ore_dict", + "ore": "dustGlowstone" + }, + "B": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "P": { + "item": "minecraft:piston" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/prelaunch_checklist.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/prelaunch_checklist.json new file mode 100644 index 00000000..1f9acd6f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/prelaunch_checklist.json @@ -0,0 +1,15 @@ +{ + "result": { + "item": "galacticraftcore:prelaunch_checklist" + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 1 + }, + { + "item": "galacticraftcore:canvas" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/refinery.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/refinery.json new file mode 100644 index 00000000..d10acadd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/refinery.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:refinery" + }, + "pattern": [ + " Z ", + "WZW", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "stone" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "minecraft:furnace" + }, + "Z": { + "item": "galacticraftcore:canister", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_fins.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_fins.json new file mode 100644 index 00000000..facb5f27 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_fins.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:rocket_fins" + }, + "pattern": [ + " Y ", + "XYX", + "X X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench.json new file mode 100644 index 00000000..a6e833bf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:rocket_workbench" + }, + "pattern": [ + "XZX", + "UWU", + "YVY" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "item": "minecraft:lever" + }, + "V": { + "item": "minecraft:redstone_torch" + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "item": "minecraft:crafting_table" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench_convert.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench_convert.json new file mode 100644 index 00000000..ffc776a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench_convert.json @@ -0,0 +1,12 @@ +{ + "result": { + "item": "galacticraftcore:rocket_workbench" + }, + "ingredients": [ + { + "item": "galacticraftcore:compact_workbench", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sealer.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sealer.json new file mode 100644 index 00000000..b8f4119a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sealer.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftcore:sealer" + }, + "pattern": [ + "UZU", + "YXY", + "UZU" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "X": { + "item": "galacticraftcore:air_fan" + }, + "Y": { + "item": "galacticraftcore:air_vent" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_glasses.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_glasses.json new file mode 100644 index 00000000..2b6fd11d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_glasses.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:sensor_glasses" + }, + "pattern": [ + "ZWZ", + "Z Z", + "XYX" + ], + "type": "galacticraftcore:replacable", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "gemDiamond" + }, + "X": { + "item": "galacticraftcore:sensor_lens" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "string" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_lens.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_lens.json new file mode 100644 index 00000000..4b00dd64 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_lens.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:sensor_lens" + }, + "pattern": [ + "ZXZ", + "XYX", + "ZXZ" + ], + "type": "galacticraftcore:replacable", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_plate" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_0.json new file mode 100644 index 00000000..1534652f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 0, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_1.json new file mode 100644 index 00000000..0d7f314e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_1.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 1, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_2.json new file mode 100644 index 00000000..b1ecf0de --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_2.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 2, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_3.json new file mode 100644 index 00000000..6bbd5c7f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 3, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_4.json new file mode 100644 index 00000000..f6576626 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_4.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 4, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_5.json new file mode 100644 index 00000000..ef35ca1b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_5.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 5, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slime_ball.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slime_ball.json new file mode 100644 index 00000000..c0d7fd63 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slime_ball.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "minecraft:slime_ball" + }, + "pattern": [ + "XFX", + "FEF", + "XFX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "E": { + "item": "galacticraftcore:cheese_curd" + }, + "F": { + "item": "minecraft:sugar" + }, + "X": { + "item": "minecraft:dye", + "data": 2 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_0.json new file mode 100644 index 00000000..2f4e8ace --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_0.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:solar", + "data": 0 + }, + "pattern": [ + "XYX", + "XZX", + "VWV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "galacticraftcore:basic_item", + "data": 1 + }, + "Z": { + "item": "galacticraftcore:steel_pole" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_4.json new file mode 100644 index 00000000..ef5055f8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_4.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:solar", + "data": 4 + }, + "pattern": [ + "XYX", + "XZX", + "VWV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "galacticraftcore:basic_item", + "data": 1 + }, + "Z": { + "item": "galacticraftcore:steel_pole" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_0.json new file mode 100644 index 00000000..90fdd158 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_clear", + "data": 0, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_1.json new file mode 100644 index 00000000..af69b1ff --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_1.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_clear", + "data": 1, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:space_glass_clear", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_0.json new file mode 100644 index 00000000..e29d0e47 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_strong", + "data": 0, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_1.json new file mode 100644 index 00000000..93f916bc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_1.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_strong", + "data": 1, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:space_glass_strong", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_0.json new file mode 100644 index 00000000..7049249f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_vanilla", + "data": 0, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "ingotTin" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_1.json new file mode 100644 index 00000000..5dcc83bc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_1.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_vanilla", + "data": 1, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:space_glass_vanilla", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/spin_thruster.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/spin_thruster.json new file mode 100644 index 00000000..f2489c16 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/spin_thruster.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:spin_thruster" + }, + "pattern": [ + " ", + "YWZ", + "PXP" + ], + "type": "galacticraftcore:replacable", + "key": { + "P": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + }, + "Y": { + "item": "galacticraftcore:fuel_canister_partial", + "data": 1 + }, + "Z": { + "item": "galacticraftcore:engine", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/standard_wrench.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/standard_wrench.json new file mode 100644 index 00000000..7cc38173 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/standard_wrench.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:standard_wrench" + }, + "pattern": [ + " Y", + " X ", + "X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe.json new file mode 100644 index 00000000..575cadeb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_axe" + }, + "pattern": [ + "YY ", + "YX ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe_alt.json new file mode 100644 index 00000000..2a5567fd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe_alt.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_axe" + }, + "pattern": [ + " YY", + " XY", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_boots.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_boots.json new file mode 100644 index 00000000..367b8c91 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_boots.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:steel_boots" + }, + "pattern": [ + "X X", + "X X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_chestplate.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_chestplate.json new file mode 100644 index 00000000..baeaabc4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_chestplate.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:steel_chestplate" + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_helmet.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_helmet.json new file mode 100644 index 00000000..f0b884c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_helmet.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:steel_helmet" + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe.json new file mode 100644 index 00000000..b55c4259 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_hoe" + }, + "pattern": [ + " YY", + " X ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe_alt.json new file mode 100644 index 00000000..bd105d06 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe_alt.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_hoe" + }, + "pattern": [ + "YY ", + " X ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_leggings.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_leggings.json new file mode 100644 index 00000000..2ee27302 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_leggings.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:steel_leggings" + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pickaxe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pickaxe.json new file mode 100644 index 00000000..03df424e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pickaxe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_pickaxe" + }, + "pattern": [ + "YYY", + " X ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pole.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pole.json new file mode 100644 index 00000000..446fdee3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pole.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:steel_pole", + "count": 2 + }, + "pattern": [ + "X", + "X", + "X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_shovel.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_shovel.json new file mode 100644 index 00000000..2146ee20 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_shovel.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_shovel" + }, + "pattern": [ + " Y ", + " X ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_sword.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_sword.json new file mode 100644 index 00000000..a2c166a8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_sword.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_sword" + }, + "pattern": [ + " Y ", + " Y ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/telemetry.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/telemetry.json new file mode 100644 index 00000000..514848c3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/telemetry.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:telemetry" + }, + "pattern": [ + "XFX", + "XWX", + "YYY" + ], + "type": "forge:ore_shaped", + "key": { + "F": { + "item": "galacticraftcore:basic_item", + "data": 19 + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedCopper" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1.json new file mode 100644 index 00000000..8e564ebd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:tin_stairs_1", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1_alt.json new file mode 100644 index 00000000..6717b39f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:tin_stairs_1", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2.json new file mode 100644 index 00000000..287cb493 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:tin_stairs_2", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2_alt.json new file mode 100644 index 00000000..9fedcf86 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:tin_stairs_2", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/view_screen.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/view_screen.json new file mode 100644 index 00000000..9e97c1e9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/view_screen.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:view_screen" + }, + "pattern": [ + "XYX", + "YGY", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "G": { + "item": "minecraft:glass" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferBasic" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_0.json new file mode 100644 index 00000000..51472426 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_0.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 0, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_1.json new file mode 100644 index 00000000..6f584d4a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_1.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 1, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_2.json new file mode 100644 index 00000000..36d626dc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 2, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_3.json new file mode 100644 index 00000000..37362fcb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_3.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 3, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_4.json new file mode 100644 index 00000000..3790e358 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_4.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 4, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_5.json new file mode 100644 index 00000000..b3faabf4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_5.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 5, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds.json new file mode 100644 index 00000000..fd2c1bfa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds.json @@ -0,0 +1,43 @@ +{ + "galacticraft.music_space": { + "category": "music", + "sounds": [ + { + "name": "galacticraftcore:music/mars_jc", + "stream": true + }, + { + "name": "galacticraftcore:music/mimas_jc", + "stream": true + }, + { + "name": "galacticraftcore:music/orbit_jc", + "stream": true + }, + { + "name": "galacticraftcore:music/scary_ambience", + "stream": true + }, + { + "name": "galacticraftcore:music/spacerace_jc", + "stream": true + } + ] + }, + "player.unlockchest": { "category":"master", "sounds":[{"name": "galacticraftcore:player/unlockchest", "stream": false }]}, + "player.parachute": { "category":"master", "sounds":[{"name": "galacticraftcore:player/parachute", "stream": false }]}, + "player.openairlock": { "category":"master", "sounds":[{"name": "galacticraftcore:player/openairlock", "stream": false }]}, + "player.closeairlock": { "category":"master", "sounds":[{"name": "galacticraftcore:player/closeairlock", "stream": false }]}, + "entity.slime_death": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/slime_death", "stream": false }]}, + "entity.ooh": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/ooh", "stream": false }]}, + "entity.ouch": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/ouch", "stream": false }]}, + "entity.bosslaugh": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/bosslaugh", "stream": false }]}, + "entity.bossdeath": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/bossdeath", "stream": false }]}, + "entity.astrominer": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/astrominer", "stream": false }]}, + "ambience.singledrip": { "category":"master", "sounds":[ "galacticraftcore:ambience/singledrip1", "galacticraftcore:ambience/singledrip2", "galacticraftcore:ambience/singledrip3", "galacticraftcore:ambience/singledrip4", "galacticraftcore:ambience/singledrip5", "galacticraftcore:ambience/singledrip6", "galacticraftcore:ambience/singledrip7", "galacticraftcore:ambience/singledrip8" ]}, + "ambience.scaryscape": { "category":"master", "sounds":[{"name": "galacticraftcore:ambience/scaryscape", "stream": false }]}, + "shuttle.shuttle": { "category":"master", "sounds":[{"name": "galacticraftcore:shuttle/shuttle", "stream": false }]}, + "block.deconstructor": { "category":"master", "sounds":[{"name": "galacticraftcore:deconstructor", "stream": false }]}, + "laser.charge": { "category":"master", "sounds":[{"name": "galacticraftcore:laser/charge", "stream": false }]}, + "laser.shoot": { "category":"master", "sounds":[{"name": "galacticraftcore:laser/shoot", "stream": false }]} +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/scaryscape.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/scaryscape.ogg new file mode 100644 index 00000000..f9ec2ed8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/scaryscape.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip1.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip1.ogg new file mode 100644 index 00000000..29f533b6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip1.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip2.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip2.ogg new file mode 100644 index 00000000..d2f65e55 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip2.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip3.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip3.ogg new file mode 100644 index 00000000..735da0db Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip3.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip4.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip4.ogg new file mode 100644 index 00000000..ec2f0744 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip4.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip5.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip5.ogg new file mode 100644 index 00000000..b1fb4a4f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip5.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip6.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip6.ogg new file mode 100644 index 00000000..9143ecab Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip6.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip7.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip7.ogg new file mode 100644 index 00000000..ac802a74 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip7.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip8.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip8.ogg new file mode 100644 index 00000000..046b5ee7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip8.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/deconstructor.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/deconstructor.ogg new file mode 100644 index 00000000..b64a8417 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/deconstructor.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/astrominer.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/astrominer.ogg new file mode 100644 index 00000000..f19c9e6d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/astrominer.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossdeath.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossdeath.ogg new file mode 100644 index 00000000..b9658f37 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossdeath.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bosslaugh.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bosslaugh.ogg new file mode 100644 index 00000000..55f2d795 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bosslaugh.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossliving.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossliving.ogg new file mode 100644 index 00000000..44e59e73 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossliving.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ooh.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ooh.ogg new file mode 100644 index 00000000..af82b251 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ooh.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ouch.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ouch.ogg new file mode 100644 index 00000000..57936fd0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ouch.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/slime_death.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/slime_death.ogg new file mode 100644 index 00000000..21a69236 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/slime_death.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/charge.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/charge.ogg new file mode 100644 index 00000000..47d0ba3f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/charge.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/shoot.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/shoot.ogg new file mode 100644 index 00000000..906c28b2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/shoot.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mars_jc.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mars_jc.ogg new file mode 100644 index 00000000..dea29370 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mars_jc.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mimas_jc.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mimas_jc.ogg new file mode 100644 index 00000000..b0ea3a54 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mimas_jc.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/orbit_jc.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/orbit_jc.ogg new file mode 100644 index 00000000..d4b0b220 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/orbit_jc.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/scary_ambience.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/scary_ambience.ogg new file mode 100644 index 00000000..f9352f06 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/scary_ambience.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/spacerace_jc.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/spacerace_jc.ogg new file mode 100644 index 00000000..72038549 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/spacerace_jc.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/closeairlock.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/closeairlock.ogg new file mode 100644 index 00000000..9ef4848f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/closeairlock.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/openairlock.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/openairlock.ogg new file mode 100644 index 00000000..68c2c2d9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/openairlock.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/parachute.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/parachute.ogg new file mode 100644 index 00000000..a7fc35ce Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/parachute.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/unlockchest.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/unlockchest.ogg new file mode 100644 index 00000000..2bd8db4d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/unlockchest.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/shuttle/shuttle.ogg b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/shuttle/shuttle.ogg new file mode 100644 index 00000000..d30eb380 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/shuttle/shuttle.ogg differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_compressor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_compressor.png new file mode 100644 index 00000000..69ce08c9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_compressor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_furnace.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_furnace.png new file mode 100644 index 00000000..a0575cb7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_furnace.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_0.png new file mode 100644 index 00000000..dc60b5f1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_1.png new file mode 100644 index 00000000..4edd79f6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_10.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_10.png new file mode 100644 index 00000000..ffd364a4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_10.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_11.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_11.png new file mode 100644 index 00000000..890fd547 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_11.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_12.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_12.png new file mode 100644 index 00000000..d4f14c43 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_12.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_13.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_13.png new file mode 100644 index 00000000..530bc979 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_13.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_14.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_14.png new file mode 100644 index 00000000..54bc9a7e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_14.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_15.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_15.png new file mode 100644 index 00000000..aad63f7f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_15.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_16.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_16.png new file mode 100644 index 00000000..e03c13fe Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_16.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_2.png new file mode 100644 index 00000000..0e3d8af3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_3.png new file mode 100644 index 00000000..d900d623 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_4.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_4.png new file mode 100644 index 00000000..b1e90c08 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_4.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_5.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_5.png new file mode 100644 index 00000000..2c27c3b3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_5.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_6.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_6.png new file mode 100644 index 00000000..a1f02e42 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_6.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_7.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_7.png new file mode 100644 index 00000000..c81f2fb1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_7.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_8.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_8.png new file mode 100644 index 00000000..9d383a5a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_8.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_9.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_9.png new file mode 100644 index 00000000..05774fd2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_9.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine.png new file mode 100644 index 00000000..fdd8d4df Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_input.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_input.png new file mode 100644 index 00000000..ee0e7018 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_input.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_output.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_output.png new file mode 100644 index 00000000..31a6c9ef Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_output.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_side.png new file mode 100644 index 00000000..9398e1c7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_controller.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_controller.png new file mode 100644 index 00000000..7b760160 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_controller.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_frame.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_frame.png new file mode 100644 index 00000000..8242c06e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_frame.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_seal.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_seal.png new file mode 100644 index 00000000..404832f5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_seal.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_control_off.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_control_off.png new file mode 100644 index 00000000..a6aab747 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_control_off.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_1.png new file mode 100644 index 00000000..71805263 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_2.png new file mode 100644 index 00000000..0791fcc8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_3.png new file mode 100644 index 00000000..66982caa Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_4.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_4.png new file mode 100644 index 00000000..76d3d761 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_4.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_5.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_5.png new file mode 100644 index 00000000..685b1b79 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_5.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire.png new file mode 100644 index 00000000..5914c95f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_item.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_item.png new file mode 100644 index 00000000..75fc9606 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_item.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_switch_item.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_switch_item.png new file mode 100644 index 00000000..6304640d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_switch_item.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_item.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_item.png new file mode 100644 index 00000000..cc03cf81 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_item.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch.png new file mode 100644 index 00000000..5b2f795b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch_item.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch_item.png new file mode 100644 index 00000000..fcb0bd63 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch_item.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_off.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_off.png new file mode 100644 index 00000000..b616e6f5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_off.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_on.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_on.png new file mode 100644 index 00000000..3879dba3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_on.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/assembly.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/assembly.png new file mode 100644 index 00000000..a27bc51f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/assembly.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/blank.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/blank.png new file mode 100644 index 00000000..86e8064b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/blank.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_aluminum.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_aluminum.png new file mode 100644 index 00000000..4906a64d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_aluminum.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_copper.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_copper.png new file mode 100644 index 00000000..e04d4a87 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_copper.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_meteoric_iron.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_meteoric_iron.png new file mode 100644 index 00000000..09ce42b3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_meteoric_iron.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_silicon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_silicon.png new file mode 100644 index 00000000..a7f3fdac Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_silicon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_tin.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_tin.png new file mode 100644 index 00000000..17286ffd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_tin.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bottom.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bottom.png new file mode 100644 index 00000000..9feb9580 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bottom.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/breatheable_air.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/breatheable_air.png new file mode 100644 index 00000000..1be0e96f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/breatheable_air.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/brick.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/brick.png new file mode 100644 index 00000000..f0629925 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/brick.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bubble.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bubble.png new file mode 100644 index 00000000..d90f1c2c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bubble.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad.png new file mode 100644 index 00000000..053936d6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad_full.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad_full.png new file mode 100644 index 00000000..f58361e2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad_full.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cargo_pad.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cargo_pad.png new file mode 100644 index 00000000..c017dc06 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cargo_pad.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_1.png new file mode 100644 index 00000000..d0f005a2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_2.png new file mode 100644 index 00000000..6bcb173c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_3.png new file mode 100644 index 00000000..2b490a18 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_block.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_block.png new file mode 100644 index 00000000..ef882504 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_block.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/circuit_fabricator.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/circuit_fabricator.png new file mode 100644 index 00000000..31d4a742 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/circuit_fabricator.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/coal_generator.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/coal_generator.png new file mode 100644 index 00000000..05556586 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/coal_generator.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/collector.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/collector.png new file mode 100644 index 00000000..2a147d21 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/collector.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/compressor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/compressor.png new file mode 100644 index 00000000..7ced0122 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/compressor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_base.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_base.png new file mode 100644 index 00000000..2d963b58 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_base.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_side.png new file mode 100644 index 00000000..383d7c9e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_top.png new file mode 100644 index 00000000..998a49e8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_0.png new file mode 100644 index 00000000..0867c666 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_1.png new file mode 100644 index 00000000..792ea001 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block.png new file mode 100644 index 00000000..86fd2584 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_side.png new file mode 100644 index 00000000..202956b8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_up.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_up.png new file mode 100644 index 00000000..4cc51ccf Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_up.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deconstructor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deconstructor.png new file mode 100644 index 00000000..f20ff8ec Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deconstructor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/detector_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/detector_side.png new file mode 100644 index 00000000..a4be806e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/detector_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/dishbase.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/dishbase.png new file mode 100644 index 00000000..df729120 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/dishbase.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor.png new file mode 100644 index 00000000..e4df548f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor_side.png new file mode 100644 index 00000000..f3e3d6a9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_compressor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_compressor.png new file mode 100644 index 00000000..7cc20638 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_compressor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_furnace.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_furnace.png new file mode 100644 index 00000000..55e3cc93 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_furnace.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box.png new file mode 100644 index 00000000..2d57190e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box_flap.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box_flap.png new file mode 100644 index 00000000..23167e79 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box_flap.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_aluminum_wire.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_aluminum_wire.png new file mode 100644 index 00000000..09ae00bb Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_aluminum_wire.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_copper_cable.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_copper_cable.png new file mode 100644 index 00000000..7a87d641 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_copper_cable.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_fluid_pipe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_fluid_pipe.png new file mode 100644 index 00000000..fa6ca74d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_fluid_pipe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_glass_fibre_cable.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_glass_fibre_cable.png new file mode 100644 index 00000000..5ba5a371 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_glass_fibre_cable.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_gold_cable.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_gold_cable.png new file mode 100644 index 00000000..cf63b0d3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_gold_cable.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_heavy_aluminum_wire.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_heavy_aluminum_wire.png new file mode 100644 index 00000000..3aeb5bf3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_heavy_aluminum_wire.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_hv_cable.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_hv_cable.png new file mode 100644 index 00000000..87dab6be Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_hv_cable.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_lv_cable.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_lv_cable.png new file mode 100644 index 00000000..a04122a2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_lv_cable.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_me_cable.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_me_cable.png new file mode 100644 index 00000000..a9f8d572 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_me_cable.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_cobblestone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_cobblestone.png new file mode 100644 index 00000000..ee88e550 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_cobblestone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_stone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_stone.png new file mode 100644 index 00000000..cece1ab6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_stone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_cobblestone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_cobblestone.png new file mode 100644 index 00000000..6da9f65d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_cobblestone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_stone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_stone.png new file mode 100644 index 00000000..8fbf51b3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_stone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_gold.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_gold.png new file mode 100644 index 00000000..a60e6703 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_gold.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_stone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_stone.png new file mode 100644 index 00000000..44b350db Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_stone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_te_conduit.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_te_conduit.png new file mode 100644 index 00000000..4884a0d6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_te_conduit.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_0.png new file mode 100644 index 00000000..4a830751 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_1.png new file mode 100644 index 00000000..f23b0cfe Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_10.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_10.png new file mode 100644 index 00000000..860ea811 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_10.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_11.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_11.png new file mode 100644 index 00000000..e9463117 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_11.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_12.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_12.png new file mode 100644 index 00000000..fc0e87ab Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_12.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_13.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_13.png new file mode 100644 index 00000000..f2f7dc69 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_13.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_14.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_14.png new file mode 100644 index 00000000..ca962699 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_14.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_15.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_15.png new file mode 100644 index 00000000..105ca168 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_15.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_16.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_16.png new file mode 100644 index 00000000..6fc1fbf3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_16.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_2.png new file mode 100644 index 00000000..88ea6459 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_3.png new file mode 100644 index 00000000..8a2e5486 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_4.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_4.png new file mode 100644 index 00000000..2480ac33 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_4.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_5.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_5.png new file mode 100644 index 00000000..cdcb14db Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_5.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_6.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_6.png new file mode 100644 index 00000000..272932e2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_6.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_7.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_7.png new file mode 100644 index 00000000..86b39245 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_7.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_8.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_8.png new file mode 100644 index 00000000..eb493461 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_8.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_9.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_9.png new file mode 100644 index 00000000..d7c6a096 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_9.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fallen_meteor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fallen_meteor.png new file mode 100644 index 00000000..6b3d7545 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fallen_meteor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png new file mode 100644 index 00000000..ddba8f0a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png.mcmeta new file mode 100644 index 00000000..7e77c648 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png new file mode 100644 index 00000000..cd4beae0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png.mcmeta new file mode 100644 index 00000000..4fadce8a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png.mcmeta @@ -0,0 +1,45 @@ +{ + "animation": { + "frametime": 4, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png new file mode 100644 index 00000000..e27baec3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png new file mode 100644 index 00000000..fd2398e1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png.mcmeta new file mode 100644 index 00000000..7e77c648 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png new file mode 100644 index 00000000..c4ff0008 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png.mcmeta new file mode 100644 index 00000000..4fadce8a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png.mcmeta @@ -0,0 +1,45 @@ +{ + "animation": { + "frametime": 4, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png new file mode 100644 index 00000000..b34c9a5a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/glowstone_torch.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/glowstone_torch.png new file mode 100644 index 00000000..f3517690 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/glowstone_torch.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/landing_pad.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/landing_pad.png new file mode 100644 index 00000000..a09f46b8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/landing_pad.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine.png new file mode 100644 index 00000000..28e43c0f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_blank.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_blank.png new file mode 100644 index 00000000..3cea440a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_blank.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargoloader.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargoloader.png new file mode 100644 index 00000000..996810ce Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargoloader.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargounloader.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargounloader.png new file mode 100644 index 00000000..3b9863c1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargounloader.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuel_input.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuel_input.png new file mode 100644 index 00000000..e7f57f01 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuel_input.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuelloader.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuelloader.png new file mode 100644 index 00000000..bc5c5361 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuelloader.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_input.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_input.png new file mode 100644 index 00000000..c778bab9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_input.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_input.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_input.png new file mode 100644 index 00000000..d3cbe1bc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_input.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_output.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_output.png new file mode 100644 index 00000000..70a9f046 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_output.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oil_input.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oil_input.png new file mode 100644 index 00000000..4b618d39 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oil_input.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_output.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_output.png new file mode 100644 index 00000000..9834e131 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_output.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_input.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_input.png new file mode 100644 index 00000000..37eab3fa Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_input.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_output.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_output.png new file mode 100644 index 00000000..ecddfebe Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_output.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_painter.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_painter.png new file mode 100644 index 00000000..e3ba4122 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_painter.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_sealer.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_sealer.png new file mode 100644 index 00000000..26914b01 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_sealer.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_side.png new file mode 100644 index 00000000..ed5713e1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk.png new file mode 100644 index 00000000..c598f4f5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk_hot.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk_hot.png new file mode 100644 index 00000000..6195b644 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk_hot.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/middle.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/middle.png new file mode 100644 index 00000000..74ebd354 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/middle.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_cheese.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_cheese.png new file mode 100644 index 00000000..e871e36e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_cheese.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_sapphire.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_sapphire.png new file mode 100644 index 00000000..bc2343ed Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_sapphire.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_aluminum.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_aluminum.png new file mode 100644 index 00000000..0931109d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_aluminum.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper.png new file mode 100644 index 00000000..492aaa6d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper_moon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper_moon.png new file mode 100644 index 00000000..b944b48c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper_moon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_silicon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_silicon.png new file mode 100644 index 00000000..cb59bd47 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_silicon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin.png new file mode 100644 index 00000000..26a8e010 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin_moon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin_moon.png new file mode 100644 index 00000000..19c0bdbd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin_moon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor.png new file mode 100644 index 00000000..643b024e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor_back.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor_back.png new file mode 100644 index 00000000..1cd415d0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor_back.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_decompressor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_decompressor.png new file mode 100644 index 00000000..af9b15f4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_decompressor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module.png new file mode 100644 index 00000000..4a830751 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module_full.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module_full.png new file mode 100644 index 00000000..3c4430f9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module_full.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_1.png new file mode 100644 index 00000000..0b9c9358 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_2.png new file mode 100644 index 00000000..517baecd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_3.png new file mode 100644 index 00000000..f3a1ee69 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_4.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_4.png new file mode 100644 index 00000000..6d150832 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_4.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_5.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_5.png new file mode 100644 index 00000000..b90ada2b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_5.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_6.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_6.png new file mode 100644 index 00000000..f3e5143f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_6.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_linear.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_linear.png new file mode 100644 index 00000000..07d2c04d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_linear.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_off.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_off.png new file mode 100644 index 00000000..e237934c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_off.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sf.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sf.png new file mode 100644 index 00000000..731ce531 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sf.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sfdiag.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sfdiag.png new file mode 100644 index 00000000..aa8c3e6b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sfdiag.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_spots.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_spots.png new file mode 100644 index 00000000..977bdbb3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_spots.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_square.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_square.png new file mode 100644 index 00000000..66ca1ff2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_square.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/parachest.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/parachest.png new file mode 100644 index 00000000..19ceec0a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/parachest.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_black.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_black.png new file mode 100644 index 00000000..04405a67 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_black.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_blue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_blue.png new file mode 100644 index 00000000..286f4bf8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_blue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_brown.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_brown.png new file mode 100644 index 00000000..1d0f8286 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_brown.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_cyan.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_cyan.png new file mode 100644 index 00000000..78bd5381 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_cyan.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_gray.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_gray.png new file mode 100644 index 00000000..55519a79 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_gray.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_green.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_green.png new file mode 100644 index 00000000..1c5739dd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_green.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_light_blue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_light_blue.png new file mode 100644 index 00000000..a337a6dd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_light_blue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_lime.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_lime.png new file mode 100644 index 00000000..0ba07789 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_lime.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_magenta.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_magenta.png new file mode 100644 index 00000000..53db3861 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_magenta.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_orange.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_orange.png new file mode 100644 index 00000000..4667a64c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_orange.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_pink.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_pink.png new file mode 100644 index 00000000..02ff22f3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_pink.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_purple.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_purple.png new file mode 100644 index 00000000..4c838aee Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_purple.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_red.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_red.png new file mode 100644 index 00000000..0a3e6751 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_red.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_silver.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_silver.png new file mode 100644 index 00000000..14f603bc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_silver.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_white.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_white.png new file mode 100644 index 00000000..96bf964c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_white.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_yellow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_yellow.png new file mode 100644 index 00000000..f0eed4d4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_yellow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_pull.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_pull.png new file mode 100644 index 00000000..af543bdf Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_pull.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_base.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_base.png new file mode 100644 index 00000000..db01b060 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_base.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_haz.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_haz.png new file mode 100644 index 00000000..a2007657 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_haz.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_light.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_light.png new file mode 100644 index 00000000..2af71af0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_light.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_side.png new file mode 100644 index 00000000..ed2fc8bf Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_top.png new file mode 100644 index 00000000..0a5c52cd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_front.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_front.png new file mode 100644 index 00000000..701fca95 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_front.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_side.png new file mode 100644 index 00000000..f27570f4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_top.png new file mode 100644 index 00000000..cc648a7b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/rocket_workbench.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/rocket_workbench.png new file mode 100644 index 00000000..dc3cb110 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/rocket_workbench.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_front.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_front.png new file mode 100644 index 00000000..3349351b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_front.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_side.png new file mode 100644 index 00000000..ddeee85e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/sensor_mobs.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/sensor_mobs.png new file mode 100644 index 00000000..c93d0d6f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/sensor_mobs.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_0.png new file mode 100644 index 00000000..b4e7bc4b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_1.png new file mode 100644 index 00000000..ec1f9216 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_0.png new file mode 100644 index 00000000..63bfa523 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_1.png new file mode 100644 index 00000000..be91c4d2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear.png new file mode 100644 index 00000000..abaef943 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear_inventory.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear_inventory.png new file mode 100644 index 00000000..0b0890d7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear_inventory.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_tindeco.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_tindeco.png new file mode 100644 index 00000000..07cd08cd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_tindeco.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_white.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_white.png new file mode 100644 index 00000000..a5d35d0e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_white.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_inventory.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_inventory.png new file mode 100644 index 00000000..ac3b5153 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_inventory.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_strong.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_strong.png new file mode 100644 index 00000000..187ed1cc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_strong.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla.png new file mode 100644 index 00000000..e7b39106 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla_inventory.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla_inventory.png new file mode 100644 index 00000000..5b2522bc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla_inventory.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_side.png new file mode 100644 index 00000000..8ca93a4d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_top.png new file mode 100644 index 00000000..2f770d58 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank.png new file mode 100644 index 00000000..fd2e9896 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank_top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank_top.png new file mode 100644 index 00000000..3054c75c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank_top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/thruster.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/thruster.png new file mode 100644 index 00000000..352ebdd5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/thruster.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top.png new file mode 100644 index 00000000..5140b8ca Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top_side.png new file mode 100644 index 00000000..73dfaa37 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/treasure_chest.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/treasure_chest.png new file mode 100644 index 00000000..0ac0fc40 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/treasure_chest.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch.png new file mode 100644 index 00000000..930c009e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit.png new file mode 100644 index 00000000..fc699249 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit_stone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit_stone.png new file mode 100644 index 00000000..67624ca9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit_stone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_stone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_stone.png new file mode 100644 index 00000000..731bc22b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_stone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/arm.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/arm.png new file mode 100644 index 00000000..1be265bd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/arm.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/blueprint.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/blueprint.png new file mode 100644 index 00000000..ee5640bd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/blueprint.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/side.png new file mode 100644 index 00000000..ddb115e5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/top.png new file mode 100644 index 00000000..af8c1396 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench_nasa_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench_nasa_side.png new file mode 100644 index 00000000..bf0c5ec6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench_nasa_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/air_lock_controller.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/air_lock_controller.png new file mode 100644 index 00000000..d097db60 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/air_lock_controller.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_0.png new file mode 100644 index 00000000..8604b161 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_18.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_18.png new file mode 100644 index 00000000..57b34358 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_18.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_36.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_36.png new file mode 100644 index 00000000..380c4870 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_36.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_54.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_54.png new file mode 100644 index 00000000..52295932 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_54.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggybench.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggybench.png new file mode 100644 index 00000000..efc77f47 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggybench.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/cargo_loader.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/cargo_loader.png new file mode 100644 index 00000000..91dc15b3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/cargo_loader.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/asteroid.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/asteroid.png new file mode 100644 index 00000000..dd64ad6d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/asteroid.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/callisto.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/callisto.png new file mode 100644 index 00000000..72f041d8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/callisto.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/curseforge.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/curseforge.png new file mode 100644 index 00000000..78d7f59a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/curseforge.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/earth.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/earth.png new file mode 100644 index 00000000..1d433d89 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/earth.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/europa.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/europa.png new file mode 100644 index 00000000..e87cdce2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/europa.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/ganymede.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/ganymede.png new file mode 100644 index 00000000..bc0413dc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/ganymede.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/io.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/io.png new file mode 100644 index 00000000..3384e9e5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/io.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/jupiter.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/jupiter.png new file mode 100644 index 00000000..af27aef8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/jupiter.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mars.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mars.png new file mode 100644 index 00000000..df88722f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mars.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mercury.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mercury.png new file mode 100644 index 00000000..a31d7d33 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mercury.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/moon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/moon.png new file mode 100644 index 00000000..b5546701 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/moon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/neptune.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/neptune.png new file mode 100644 index 00000000..eb3f9e3d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/neptune.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn.png new file mode 100644 index 00000000..150d673d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn_rings.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn_rings.png new file mode 100644 index 00000000..4ae04079 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn_rings.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/space_station.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/space_station.png new file mode 100644 index 00000000..96d52ecd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/space_station.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/sun.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/sun.png new file mode 100644 index 00000000..e35b4ebc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/sun.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus.png new file mode 100644 index 00000000..41c0b587 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus_rings.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus_rings.png new file mode 100644 index 00000000..e45ffb3b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus_rings.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/venus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/venus.png new file mode 100644 index 00000000..64354d64 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/venus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection.png new file mode 100644 index 00000000..072361f4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection1.png new file mode 100644 index 00000000..ec89ed5a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/checklist_book.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/checklist_book.png new file mode 100644 index 00000000..ad900666 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/checklist_book.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_0.png new file mode 100644 index 00000000..3f22947b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_18.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_18.png new file mode 100644 index 00000000..36847f82 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_18.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_36.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_36.png new file mode 100644 index 00000000..520d83ae Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_36.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_54.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_54.png new file mode 100644 index 00000000..970a2df6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_54.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/circuit_fabricator.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/circuit_fabricator.png new file mode 100644 index 00000000..591d9722 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/circuit_fabricator.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/coal_generator.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/coal_generator.png new file mode 100644 index 00000000..aaa65afb Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/coal_generator.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/compressor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/compressor.png new file mode 100644 index 00000000..c14bb559 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/compressor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/crafting_table.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/crafting_table.png new file mode 100644 index 00000000..bbd6feca Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/crafting_table.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/decompressor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/decompressor.png new file mode 100644 index 00000000..b019bf4d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/decompressor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/deconstructor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/deconstructor.png new file mode 100644 index 00000000..85547716 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/deconstructor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_arc_furnace.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_arc_furnace.png new file mode 100644 index 00000000..e4c4b77d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_arc_furnace.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_furnace.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_furnace.png new file mode 100644 index 00000000..fc36e06c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_furnace.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_ingot_compressor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_ingot_compressor.png new file mode 100644 index 00000000..50bb8ef4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_ingot_compressor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/energy_storage_module.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/energy_storage_module.png new file mode 100644 index 00000000..6b3c8880 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/energy_storage_module.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/fuel_loader.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/fuel_loader.png new file mode 100644 index 00000000..330be091 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/fuel_loader.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/galacticraft_background.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/galacticraft_background.png new file mode 100644 index 00000000..5140b8ca Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/galacticraft_background.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/gui.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/gui.png new file mode 100644 index 00000000..bdcf09ac Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/gui.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hud.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hud.png new file mode 100644 index 00000000..d2c9644c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hud.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hudpointer.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hudpointer.png new file mode 100644 index 00000000..0866f465 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hudpointer.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/indicator.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/indicator.png new file mode 100644 index 00000000..038985b2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/indicator.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor.png new file mode 100644 index 00000000..898728e1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor_blank.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor_blank.png new file mode 100644 index 00000000..29bdf0eb Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor_blank.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/inventory.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/inventory.png new file mode 100644 index 00000000..8c68b7cb Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/inventory.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/landing.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/landing.png new file mode 100644 index 00000000..f72d51aa Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/landing.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/moon_rocket_gui.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/moon_rocket_gui.png new file mode 100644 index 00000000..1fddf405 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/moon_rocket_gui.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/overworld_rocket_gui.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/overworld_rocket_gui.png new file mode 100644 index 00000000..86b13efa Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/overworld_rocket_gui.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen.png new file mode 100644 index 00000000..9c3c07ba Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_distributor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_distributor.png new file mode 100644 index 00000000..7b16ea6d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_distributor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_large.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_large.png new file mode 100644 index 00000000..850bbc7b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_large.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_sealer.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_sealer.png new file mode 100644 index 00000000..977ab512 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_sealer.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_storage_module.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_storage_module.png new file mode 100644 index 00000000..daa7fd58 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_storage_module.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/painter.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/painter.png new file mode 100644 index 00000000..3cb75c96 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/painter.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/atmosphericsun.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/atmosphericsun.png new file mode 100644 index 00000000..08de644b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/atmosphericsun.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/moon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/moon.png new file mode 100644 index 00000000..b5546701 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/moon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/orbitalsun.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/orbitalsun.png new file mode 100644 index 00000000..a4f9deda Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/orbitalsun.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/sun.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/sun.png new file mode 100644 index 00000000..b8c15990 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/sun.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery.png new file mode 100644 index 00000000..bdb0eb37 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery_recipe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery_recipe.png new file mode 100644 index 00000000..b1e2461d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery_recipe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_0.png new file mode 100644 index 00000000..5b177831 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_18.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_18.png new file mode 100644 index 00000000..57b34358 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_18.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_36.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_36.png new file mode 100644 index 00000000..380c4870 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_36.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_54.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_54.png new file mode 100644 index 00000000..52295932 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_54.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocketbench.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocketbench.png new file mode 100644 index 00000000..7807853e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocketbench.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/schematicpage.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/schematicpage.png new file mode 100644 index 00000000..6b2286e3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/schematicpage.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/solar.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/solar.png new file mode 100644 index 00000000..258ce08c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/solar.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_fan.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_fan.png new file mode 100644 index 00000000..b66aa9f8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_fan.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_vent.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_vent.png new file mode 100644 index 00000000..ea107825 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_vent.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ambient_thermal_controller.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ambient_thermal_controller.png new file mode 100644 index 00000000..6a814828 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ambient_thermal_controller.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_aluminum.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_aluminum.png new file mode 100644 index 00000000..1bccd772 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_aluminum.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_bronze.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_bronze.png new file mode 100644 index 00000000..2bc83c55 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_bronze.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_copper.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_copper.png new file mode 100644 index 00000000..e548cd44 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_copper.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_iron.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_iron.png new file mode 100644 index 00000000..c053a5da Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_iron.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_steel.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_steel.png new file mode 100644 index 00000000..ecae7cc3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_steel.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_tin.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_tin.png new file mode 100644 index 00000000..bd6c3502 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_tin.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_apple.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_apple.png new file mode 100644 index 00000000..c9df0297 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_apple.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_carrot.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_carrot.png new file mode 100644 index 00000000..12299d94 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_carrot.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_melon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_melon.png new file mode 100644 index 00000000..4ad74b81 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_melon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_potato.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_potato.png new file mode 100644 index 00000000..503db6df Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_potato.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.frequency_module.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.frequency_module.png new file mode 100644 index 00000000..d0b041a1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.frequency_module.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_aluminum.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_aluminum.png new file mode 100644 index 00000000..d96cde80 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_aluminum.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_copper.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_copper.png new file mode 100644 index 00000000..aabf7592 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_copper.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_tin.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_tin.png new file mode 100644 index 00000000..2792982d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_tin.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.raw_silicon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.raw_silicon.png new file mode 100644 index 00000000..2d91df2f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.raw_silicon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_0.png new file mode 100644 index 00000000..6d85e7d9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_1.png new file mode 100644 index 00000000..96be6b8d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_advanced.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_advanced.png new file mode 100644 index 00000000..0580621a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_advanced.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_basic.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_basic.png new file mode 100644 index 00000000..d93ec1a1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_basic.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_solar.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_solar.png new file mode 100644 index 00000000..ad46a6a8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_solar.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/battery.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/battery.png new file mode 100644 index 00000000..8429f374 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/battery.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_cooked.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_cooked.png new file mode 100644 index 00000000..49bbf8e7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_cooked.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_raw.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_raw.png new file mode 100644 index 00000000..a02c559c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_raw.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_fuel.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_fuel.png new file mode 100644 index 00000000..a6582d30 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_fuel.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_oil.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_oil.png new file mode 100644 index 00000000..4da59181 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_oil.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.seat.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.seat.png new file mode 100644 index 00000000..3cabd90a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.seat.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.storage.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.storage.png new file mode 100644 index 00000000..257540ee Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.storage.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.wheel.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.wheel.png new file mode 100644 index 00000000..d3549d8e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.wheel.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/burger_bun.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/burger_bun.png new file mode 100644 index 00000000..1f947b71 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/burger_bun.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.copper.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.copper.png new file mode 100644 index 00000000..76bb1df3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.copper.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.tin.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.tin.png new file mode 100644 index 00000000..04482507 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.tin.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canned_beef.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canned_beef.png new file mode 100644 index 00000000..0152403b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canned_beef.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canvas.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canvas.png new file mode 100644 index 00000000..a965efb0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canvas.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_curd.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_curd.png new file mode 100644 index 00000000..3d81aac1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_curd.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_slice.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_slice.png new file mode 100644 index 00000000..1605c62a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_slice.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheeseburger.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheeseburger.png new file mode 100644 index 00000000..0ad4c507 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheeseburger.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/compressed_meteoric_iron.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/compressed_meteoric_iron.png new file mode 100644 index 00000000..87dff0e9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/compressed_meteoric_iron.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dishicon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dishicon.png new file mode 100644 index 00000000..79c191c1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dishicon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeon_key_t1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeon_key_t1.png new file mode 100644 index 00000000..b08db11b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeon_key_t1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png new file mode 100644 index 00000000..9548c0ff Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/emergency_kit.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/emergency_kit.png new file mode 100644 index 00000000..3158a47e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/emergency_kit.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/empty_liquid_canister.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/empty_liquid_canister.png new file mode 100644 index 00000000..9565d989 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/empty_liquid_canister.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1booster.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1booster.png new file mode 100644 index 00000000..cc188506 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1booster.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1engine.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1engine.png new file mode 100644 index 00000000..44de2d80 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1engine.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.png new file mode 100644 index 00000000..37f0070c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.txt b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.txt new file mode 100644 index 00000000..d8fe765a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.txt @@ -0,0 +1,32 @@ +0*2 +1*2 +2*2 +3*2 +4*2 +5*2 +6*2 +7*2 +8*2 +9*2 +10*2 +11*2 +12*2 +13*2 +14*2 +15*2 +16*2 +17*2 +18*2 +19*2 +20*2 +21*2 +22*2 +23*2 +24*2 +25*2 +26*2 +27*2 +28*2 +29*2 +30*2 +31*2 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_0.png new file mode 100644 index 00000000..9565d989 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_1.png new file mode 100644 index 00000000..3259893d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_2.png new file mode 100644 index 00000000..08ddc254 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_3.png new file mode 100644 index 00000000..34c0a6de Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_4.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_4.png new file mode 100644 index 00000000..153dae1b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_4.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_5.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_5.png new file mode 100644 index 00000000..049707bc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_5.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_6.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_6.png new file mode 100644 index 00000000..95b95b6e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_6.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.png new file mode 100644 index 00000000..4b1a870b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.txt b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.txt new file mode 100644 index 00000000..e69de29b diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/heavy_plating.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/heavy_plating.png new file mode 100644 index 00000000..68c0a1c3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/heavy_plating.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_alu.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_alu.png new file mode 100644 index 00000000..ce3126f5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_alu.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_small_titanium.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_small_titanium.png new file mode 100644 index 00000000..dd7e1d5d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_small_titanium.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_crushed_alu.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_crushed_alu.png new file mode 100644 index 00000000..d4bb14ec Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_crushed_alu.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_purified_alu.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_purified_alu.png new file mode 100644 index 00000000..d84c1554 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_purified_alu.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/lunar_sapphire.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/lunar_sapphire.png new file mode 100644 index 00000000..9d2f506e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/lunar_sapphire.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_ingot.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_ingot.png new file mode 100644 index 00000000..8a187e1b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_ingot.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_raw.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_raw.png new file mode 100644 index 00000000..28cc8250 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_raw.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/nose_cone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/nose_cone.png new file mode 100644 index 00000000..fc2cb0dd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/nose_cone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_0.png new file mode 100644 index 00000000..9565d989 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_1.png new file mode 100644 index 00000000..4f3c0dcc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_2.png new file mode 100644 index 00000000..74cb1bcd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_3.png new file mode 100644 index 00000000..8cf9a924 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_4.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_4.png new file mode 100644 index 00000000..4c7d6c89 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_4.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_5.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_5.png new file mode 100644 index 00000000..c006fb14 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_5.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_6.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_6.png new file mode 100644 index 00000000..c6178675 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_6.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_canister_infinite.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_canister_infinite.png new file mode 100644 index 00000000..5128d418 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_canister_infinite.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_concentrator.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_concentrator.png new file mode 100644 index 00000000..69ca5a06 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_concentrator.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_gear.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_gear.png new file mode 100644 index 00000000..b7ae3f9f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_gear.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_mask.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_mask.png new file mode 100644 index 00000000..f2001e2b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_mask.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_heavy_full.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_heavy_full.png new file mode 100644 index 00000000..59b26372 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_heavy_full.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_light_full.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_light_full.png new file mode 100644 index 00000000..4cde44ee Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_light_full.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_med_full.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_med_full.png new file mode 100644 index 00000000..6a1e8434 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_med_full.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_black.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_black.png new file mode 100644 index 00000000..913f7c1c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_black.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_blue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_blue.png new file mode 100644 index 00000000..5a93d3c4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_blue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_brown.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_brown.png new file mode 100644 index 00000000..f4bc9c08 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_brown.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkblue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkblue.png new file mode 100644 index 00000000..2473cb5d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkblue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgray.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgray.png new file mode 100644 index 00000000..19fa1e71 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgray.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgreen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgreen.png new file mode 100644 index 00000000..14952f5c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgreen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_gray.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_gray.png new file mode 100644 index 00000000..b53540d5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_gray.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_lime.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_lime.png new file mode 100644 index 00000000..320b0a39 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_lime.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_magenta.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_magenta.png new file mode 100644 index 00000000..33ddb4c4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_magenta.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_orange.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_orange.png new file mode 100644 index 00000000..c0e55e86 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_orange.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_pink.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_pink.png new file mode 100644 index 00000000..9b978191 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_pink.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_plain.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_plain.png new file mode 100644 index 00000000..3336bf25 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_plain.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_purple.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_purple.png new file mode 100644 index 00000000..250408f1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_purple.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_red.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_red.png new file mode 100644 index 00000000..7ab29908 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_red.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_teal.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_teal.png new file mode 100644 index 00000000..b8edd6c5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_teal.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_yellow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_yellow.png new file mode 100644 index 00000000..92f833b7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_yellow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/prelaunch_checklist.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/prelaunch_checklist.png new file mode 100644 index 00000000..fd7c0b54 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/prelaunch_checklist.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/rocket_fins.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/rocket_fins.png new file mode 100644 index 00000000..1a7684c7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/rocket_fins.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_buggy.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_buggy.png new file mode 100644 index 00000000..cd1c9144 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_buggy.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_rocket_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_rocket_t2.png new file mode 100644 index 00000000..6e4b6a3b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_rocket_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_glasses.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_glasses.png new file mode 100644 index 00000000..5d64e2f2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_glasses.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_lens.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_lens.png new file mode 100644 index 00000000..b5c9c4b9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_lens.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/standard_wrench.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/standard_wrench.png new file mode 100644 index 00000000..90385159 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/standard_wrench.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_axe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_axe.png new file mode 100644 index 00000000..cc1fea0b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_axe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_boots.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_boots.png new file mode 100644 index 00000000..20f5bdd8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_boots.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_chestplate.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_chestplate.png new file mode 100644 index 00000000..e9f4b8bf Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_chestplate.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_helmet.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_helmet.png new file mode 100644 index 00000000..51516912 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_helmet.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_hoe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_hoe.png new file mode 100644 index 00000000..721f61ed Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_hoe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_leggings.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_leggings.png new file mode 100644 index 00000000..a4a31e61 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_leggings.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pickaxe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pickaxe.png new file mode 100644 index 00000000..9d102b15 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pickaxe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pole.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pole.png new file mode 100644 index 00000000..950fb64e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pole.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_shovel.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_shovel.png new file mode 100644 index 00000000..740b43b4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_shovel.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_sword.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_sword.png new file mode 100644 index 00000000..c621d385 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_sword.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape-template.psd b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape-template.psd new file mode 100644 index 00000000..363f58f4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape-template.psd differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_blue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_blue.png new file mode 100644 index 00000000..2b041061 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_blue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_brown.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_brown.png new file mode 100644 index 00000000..1b6c6b11 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_brown.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_cyan.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_cyan.png new file mode 100644 index 00000000..0e3ab563 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_cyan.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_gray.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_gray.png new file mode 100644 index 00000000..1ac57753 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_gray.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_green.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_green.png new file mode 100644 index 00000000..989c35f2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_green.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_blue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_blue.png new file mode 100644 index 00000000..be4d6815 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_blue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_gray.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_gray.png new file mode 100644 index 00000000..3296a372 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_gray.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_lime.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_lime.png new file mode 100644 index 00000000..f7a233be Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_lime.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_magenta.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_magenta.png new file mode 100644 index 00000000..a8a2dce4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_magenta.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_orange.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_orange.png new file mode 100644 index 00000000..66a77083 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_orange.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_pink.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_pink.png new file mode 100644 index 00000000..d5b3e731 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_pink.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_purple.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_purple.png new file mode 100644 index 00000000..9ccb6a81 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_purple.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_rainbow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_rainbow.png new file mode 100644 index 00000000..2d732d59 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_rainbow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_red.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_red.png new file mode 100644 index 00000000..f4c2d874 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_red.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_yellow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_yellow.png new file mode 100644 index 00000000..2d884fc5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_yellow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/footprint.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/footprint.png new file mode 100644 index 00000000..79e83c40 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/footprint.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/light.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/light.png new file mode 100644 index 00000000..0cd6d861 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/light.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/europa.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/europa.png new file mode 100644 index 00000000..d523555b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/europa.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/ganymede.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/ganymede.png new file mode 100644 index 00000000..921f66a9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/ganymede.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/io.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/io.png new file mode 100644 index 00000000..458cb340 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/io.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_inner.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_inner.png new file mode 100644 index 00000000..9cc58140 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_inner.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_upper.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_upper.png new file mode 100644 index 00000000..4b786279 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_upper.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/saturn.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/saturn.png new file mode 100644 index 00000000..32c7c859 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/saturn.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underfuel.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underfuel.png new file mode 100644 index 00000000..f1a14d8d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underfuel.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underoil.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underoil.png new file mode 100644 index 00000000..2215c3cf Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underoil.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/sensor_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/sensor_1.png new file mode 100644 index 00000000..e9307e11 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/sensor_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_1.png new file mode 100644 index 00000000..167f4f9e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_2.png new file mode 100644 index 00000000..7ce901e7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_3.png new file mode 100644 index 00000000..8391dda3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/assembly.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/assembly.png new file mode 100644 index 00000000..6c0a8e3a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/assembly.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/book.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/book.png new file mode 100644 index 00000000..dc2cc97f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/book.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy.png new file mode 100644 index 00000000..403320fc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_main.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_main.png new file mode 100644 index 00000000..bc0ebf57 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_main.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_storage.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_storage.png new file mode 100644 index 00000000..4551057d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_storage.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_wheels.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_wheels.png new file mode 100644 index 00000000..5c63fcb7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_wheels.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/creeper.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/creeper.png new file mode 100644 index 00000000..96e3406f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/creeper.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman.png new file mode 100644 index 00000000..a12f4cef Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman_eyes.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman_eyes.png new file mode 100644 index 00000000..5c6a31d8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman_eyes.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_witch.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_witch.png new file mode 100644 index 00000000..428e5932 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_witch.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag.png new file mode 100644 index 00000000..82bf1971 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag0.png new file mode 100644 index 00000000..737c8fc0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/frequency_module.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/frequency_module.png new file mode 100644 index 00000000..35c90c1f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/frequency_module.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/lander.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/lander.png new file mode 100644 index 00000000..42a134ae Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/lander.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor.png new file mode 100644 index 00000000..8ef6d11f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk.png new file mode 100644 index 00000000..585a9182 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk_hot.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk_hot.png new file mode 100644 index 00000000..129540c3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk_hot.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen.png new file mode 100644 index 00000000..b1d2d6e0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen_block.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen_block.png new file mode 100644 index 00000000..f21424ae Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen_block.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachest.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachest.png new file mode 100644 index 00000000..19ceec0a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachest.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/black.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/black.png new file mode 100644 index 00000000..6f0dbf8d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/black.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/blue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/blue.png new file mode 100644 index 00000000..2e89c86d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/blue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/brown.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/brown.png new file mode 100644 index 00000000..fb62ce52 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/brown.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkblue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkblue.png new file mode 100644 index 00000000..bced7a3d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkblue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgray.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgray.png new file mode 100644 index 00000000..c1064e26 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgray.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgreen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgreen.png new file mode 100644 index 00000000..551bd54a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgreen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/gray.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/gray.png new file mode 100644 index 00000000..a0cdf43d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/gray.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/lime.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/lime.png new file mode 100644 index 00000000..1c59334b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/lime.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/magenta.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/magenta.png new file mode 100644 index 00000000..5ed79270 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/magenta.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/orange.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/orange.png new file mode 100644 index 00000000..83f364df Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/orange.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/pink.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/pink.png new file mode 100644 index 00000000..383a93e0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/pink.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/plain.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/plain.png new file mode 100644 index 00000000..76325479 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/plain.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/purple.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/purple.png new file mode 100644 index 00000000..4457dd20 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/purple.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/red.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/red.png new file mode 100644 index 00000000..6cea6ba3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/red.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/teal.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/teal.png new file mode 100644 index 00000000..97a5953a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/teal.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/yellow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/yellow.png new file mode 100644 index 00000000..98bbc940 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/yellow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/platform_moving.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/platform_moving.png new file mode 100644 index 00000000..bc34a678 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/platform_moving.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/player.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/player.png new file mode 100644 index 00000000..822d934e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/player.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/power.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/power.png new file mode 100644 index 00000000..3b6c1a14 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/power.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/rocket_t1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/rocket_t1.png new file mode 100644 index 00000000..6e1c9092 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/rocket_t1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeleton.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeleton.png new file mode 100644 index 00000000..2d40db32 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeleton.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeletonboss.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeletonboss.png new file mode 100644 index 00000000..67c36cc6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeletonboss.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_advanced.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_advanced.png new file mode 100644 index 00000000..c1f06fe2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_advanced.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_basic.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_basic.png new file mode 100644 index 00000000..7f64b3ac Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_basic.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider.png new file mode 100644 index 00000000..b3abd937 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider_eyes.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider_eyes.png new file mode 100644 index 00000000..ef08d27c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider_eyes.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/teledish.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/teledish.png new file mode 100644 index 00000000..6dae6c79 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/teledish.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telefork.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telefork.png new file mode 100644 index 00000000..a85e8fc5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telefork.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telesupport.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telesupport.png new file mode 100644 index 00000000..124b8d8e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telesupport.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/thruster.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/thruster.png new file mode 100644 index 00000000..4616cd01 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/thruster.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/treasure.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/treasure.png new file mode 100644 index 00000000..5634cf8b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/treasure.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/villager.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/villager.png new file mode 100644 index 00000000..3922b164 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/villager.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/zombie.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/zombie.png new file mode 100644 index 00000000..c2d23fb4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/zombie.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/asteroids_block.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/asteroids_block.json new file mode 100644 index 00000000..3d568226 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/asteroids_block.json @@ -0,0 +1,29 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftplanets:asteroid_rock_0_model" }], + "basictypeasteroids=asteroid_rock_0": [ + { "model": "galacticraftplanets:asteroid_rock_0_model" }, + { "model": "galacticraftplanets:asteroid_rock_0_model", "y": 90 }, + { "model": "galacticraftplanets:asteroid_rock_0_model", "y": 180 }, + { "model": "galacticraftplanets:asteroid_rock_0_model", "y": 270 } + ], + "basictypeasteroids=asteroid_rock_1": [ + { "model": "galacticraftplanets:asteroid_rock_1_model" }, + { "model": "galacticraftplanets:asteroid_rock_1_model", "y": 90 }, + { "model": "galacticraftplanets:asteroid_rock_1_model", "y": 180 }, + { "model": "galacticraftplanets:asteroid_rock_1_model", "y": 270 } + ], + "basictypeasteroids=asteroid_rock_2": [ + { "model": "galacticraftplanets:asteroid_rock_2_model" }, + { "model": "galacticraftplanets:asteroid_rock_2_model", "y": 90 }, + { "model": "galacticraftplanets:asteroid_rock_2_model", "y": 180 }, + { "model": "galacticraftplanets:asteroid_rock_2_model", "y": 270 } + ], + "basictypeasteroids=ore_aluminum_asteroids": { "model": "galacticraftplanets:ore_aluminum_asteroids_model" }, + "basictypeasteroids=ore_ilmenite_asteroids": { "model": "galacticraftplanets:ore_ilmenite_asteroids_model" }, + "basictypeasteroids=ore_iron_asteroids": { "model": "galacticraftplanets:ore_iron_asteroids_model" }, + "basictypeasteroids=asteroid_deco": { "model": "galacticraftplanets:asteroid_deco_model" }, + "basictypeasteroids=titanium_block": { "model": "galacticraftplanets:titanium_block_model" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_receiver.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_receiver.json new file mode 100644 index 00000000..48427c69 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_receiver.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:receiver.obj", + "textures": { "particle": "galacticraftcore:blocks/buggy_pad_full" }, + "custom": { + "flip-v": true + } + }, + "variants": { + "normal": [{}], + "facing": { + "up":{}, "down":{}, "east":{}, "west":{}, "north":{}, "south": {} + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_reflector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_reflector.json new file mode 100644 index 00000000..9a95665d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_reflector.json @@ -0,0 +1,13 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:reflector.obj", + "textures": { "particle": "galacticraftcore:blocks/buggy_pad_full" }, + "custom": { + "flip-v": true + } + }, + "variants": { + "normal" : [{}] + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_mars.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_mars.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_mars.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_venus.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_venus.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_venus.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/cavern_vines.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/cavern_vines.json new file mode 100644 index 00000000..da220632 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/cavern_vines.json @@ -0,0 +1,7 @@ +{ + "variants": { + "vinetype=vine_0": { "model": "galacticraftplanets:vine_0_model" }, + "vinetype=vine_1": { "model": "galacticraftplanets:vine_1_model" }, + "vinetype=vine_2": { "model": "galacticraftplanets:vine_2_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/crashed_probe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/crashed_probe.json new file mode 100644 index 00000000..922b38ec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/crashed_probe.json @@ -0,0 +1,9 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { "model": "galacticraftplanets:crashed_probe" }, + "facing=east": { "model": "galacticraftplanets:crashed_probe", "y": 90 }, + "facing=west": { "model": "galacticraftplanets:crashed_probe", "y": 270 }, + "facing=south": { "model": "galacticraftplanets:crashed_probe", "y": 180 } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/creeper_egg.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/creeper_egg.json new file mode 100644 index 00000000..e8591c33 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/creeper_egg.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:creeper_egg" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dense_ice.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dense_ice.json new file mode 100644 index 00000000..23991ef9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dense_ice.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:dense_ice" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dungeon_spawner.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dungeon_spawner.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dungeon_spawner.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/geothermal_generator.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/geothermal_generator.json new file mode 100644 index 00000000..e11dc093 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/geothermal_generator.json @@ -0,0 +1,13 @@ +{ + "forge_marker": 1, + "variants": { + "active=true,facing=north": { "model": "galacticraftplanets:geothermal_model" }, + "active=true,facing=east": { "model": "galacticraftplanets:geothermal_model", "y": 90 }, + "active=true,facing=west": { "model": "galacticraftplanets:geothermal_model", "y": 270 }, + "active=true,facing=south": { "model": "galacticraftplanets:geothermal_model", "y": 180 }, + "active=false,facing=north": { "model": "galacticraftplanets:geothermal_inactive_model" }, + "active=false,facing=east": { "model": "galacticraftplanets:geothermal_inactive_model", "y": 90 }, + "active=false,facing=west": { "model": "galacticraftplanets:geothermal_inactive_model", "y": 270 }, + "active=false,facing=south": { "model": "galacticraftplanets:geothermal_inactive_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/hydrogen_pipe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/hydrogen_pipe.json new file mode 100644 index 00000000..3b315bfc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/hydrogen_pipe.json @@ -0,0 +1,89 @@ +{ + "variants": { + "down=false,east=false,north=false,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe" }, + + "down=false,east=false,north=true,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_n", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_n", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_n", "y": 180 }, + "down=false,east=false,north=false,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nd", "y": 270 }, + + "down=false,east=false,north=true,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nu", "y": 180 }, + "down=false,east=false,north=false,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nu", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nud", "y": 180 }, + "down=true,east=false,north=false,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nud", "y": 270 }, + + "down=false,east=false,north=true,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nsd", "y": 90 }, + + "down=false,east=false,north=true,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nsu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nsu", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nsud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nsud", "y": 90 }, + + "down=false,east=true,north=true,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nesu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesu", "y": 90 }, + "down=false,east=false,north=true,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesu", "y": 180 }, + "down=false,east=true,north=true,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesu", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nesud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesud", "y": 90 }, + "down=true,east=false,north=true,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesud", "y": 180 }, + "down=true,east=true,north=true,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesud", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ned", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_neu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_neu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neu", "y": 180 }, + "down=false,east=false,north=true,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neu", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_neud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_neud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neud", "y": 180 }, + "down=true,east=false,north=true,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neud", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesw", "y": 0 }, + + "down=false,east=false,north=false,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_u", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_d", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ud", "y": 0 }, + + "down=false,east=true,north=true,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neswu", "y": 0 }, + "down=true,east=true,north=true,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neswd", "y": 0 }, + "down=true,east=true,north=true,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neswud", "y": 0 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/laser_turret.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/laser_turret.json new file mode 100644 index 00000000..513322fd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/laser_turret.json @@ -0,0 +1,9 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { "model": "galacticraftplanets:laser_turret" }, + "facing=east": { "model": "galacticraftplanets:laser_turret", "y": 90 }, + "facing=west": { "model": "galacticraftplanets:laser_turret", "y": 270 }, + "facing=south": { "model": "galacticraftplanets:laser_turret", "y": 180 } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars.json new file mode 100644 index 00000000..ba1bb848 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars.json @@ -0,0 +1,14 @@ +{ + "variants": { + "basictypemars=ore_copper_mars": { "model": "galacticraftplanets:ore_copper_mars_model" }, + "basictypemars=ore_tin_mars": { "model": "galacticraftplanets:ore_tin_mars_model" }, + "basictypemars=ore_desh_mars": { "model": "galacticraftplanets:ore_desh_mars_model" }, + "basictypemars=ore_iron_mars": { "model": "galacticraftplanets:ore_iron_mars_model" }, + "basictypemars=cobblestone": { "model": "galacticraftplanets:cobblestone_model" }, + "basictypemars=mars_surface": { "model": "galacticraftplanets:mars_surface_model" }, + "basictypemars=mars_middle": { "model": "galacticraftplanets:mars_middle_model" }, + "basictypemars=dungeon_brick": { "model": "galacticraftplanets:dungeon_brick_model" }, + "basictypemars=desh_block": { "model": "galacticraftplanets:desh_block_model" }, + "basictypemars=mars_stone": { "model": "galacticraftplanets:mars_stone_model" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine.json new file mode 100644 index 00000000..e4a8b37b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine.json @@ -0,0 +1,16 @@ +{ + "variants": { + "facing=north,type=terraformer": { "model": "galacticraftplanets:terraformer_model" }, + "facing=east,type=terraformer": { "model": "galacticraftplanets:terraformer_model", "y": 90 }, + "facing=west,type=terraformer": { "model": "galacticraftplanets:terraformer_model", "y": 270 }, + "facing=south,type=terraformer": { "model": "galacticraftplanets:terraformer_model", "y": 180 }, + "facing=north,type=cryogenic_chamber": { "model": "galacticraftplanets:cryo_0", "y": 180 }, + "facing=east,type=cryogenic_chamber": { "model": "galacticraftplanets:cryo_0", "y": 270 }, + "facing=west,type=cryogenic_chamber": { "model": "galacticraftplanets:cryo_0", "y": 90 }, + "facing=south,type=cryogenic_chamber": { "model": "galacticraftplanets:cryo_0", "y": 0 }, + "facing=north,type=launch_controller": { "model": "galacticraftplanets:launch_controller_model" }, + "facing=east,type=launch_controller": { "model": "galacticraftplanets:launch_controller_model", "y": 90 }, + "facing=west,type=launch_controller": { "model": "galacticraftplanets:launch_controller_model", "y": 270 }, + "facing=south,type=launch_controller": { "model": "galacticraftplanets:launch_controller_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine_t2.json new file mode 100644 index 00000000..7da51be6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine_t2.json @@ -0,0 +1,16 @@ +{ + "variants": { + "facing=north,type=gas_liquefier": { "model": "galacticraftplanets:gas_liquefier_model" }, + "facing=east,type=gas_liquefier": { "model": "galacticraftplanets:gas_liquefier_model", "y": 90 }, + "facing=west,type=gas_liquefier": { "model": "galacticraftplanets:gas_liquefier_model", "y": 270 }, + "facing=south,type=gas_liquefier": { "model": "galacticraftplanets:gas_liquefier_model", "y": 180 }, + "facing=north,type=methane_synthesizer": { "model": "galacticraftplanets:methane_synthesizer_model" }, + "facing=east,type=methane_synthesizer": { "model": "galacticraftplanets:methane_synthesizer_model", "y": 90 }, + "facing=west,type=methane_synthesizer": { "model": "galacticraftplanets:methane_synthesizer_model", "y": 270 }, + "facing=south,type=methane_synthesizer": { "model": "galacticraftplanets:methane_synthesizer_model", "y": 180 }, + "facing=north,type=electrolyzer": { "model": "galacticraftplanets:electrolyzer_model" }, + "facing=east,type=electrolyzer": { "model": "galacticraftplanets:electrolyzer_model", "y": 90 }, + "facing=west,type=electrolyzer": { "model": "galacticraftplanets:electrolyzer_model", "y": 270 }, + "facing=south,type=electrolyzer": { "model": "galacticraftplanets:electrolyzer_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_brick.json new file mode 100644 index 00000000..6adaa29a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_brick.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_cobblestone.json new file mode 100644 index 00000000..73896878 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_cobblestone.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base.json new file mode 100644 index 00000000..08e792a8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:miner_base" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base_full.json new file mode 100644 index 00000000..eac18295 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base_full.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:miner_base", + "custom": { "flip-v": true }, + "textures": { + "particle": "galacticraftplanets:blocks/machineframe" + } + }, + "variants": { + "normal" : [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/slimeling_egg.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/slimeling_egg.json new file mode 100644 index 00000000..fbd3825e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/slimeling_egg.json @@ -0,0 +1,39 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:slimeling_egg_red", + "transform": "forge:default-block" + }, + "variants": { + "broken=false,eggcolor=red": { + "model": "galacticraftplanets:slimeling_egg_red" + }, + "broken=true,eggcolor=red": { + "model": "galacticraftplanets:slimeling_egg_red", + "textures": { + "particle": "galacticraftplanets:blocks/red_egg_1", + "texture": "galacticraftplanets:blocks/red_egg_1" + } + }, + "broken=false,eggcolor=blue": { + "model": "galacticraftplanets:slimeling_egg_blue" + }, + "broken=true,eggcolor=blue": { + "model": "galacticraftplanets:slimeling_egg_blue", + "textures": { + "particle": "galacticraftplanets:blocks/blue_egg_1", + "texture": "galacticraftplanets:blocks/blue_egg_1" + } + }, + "broken=false,eggcolor=yellow": { + "model": "galacticraftplanets:slimeling_egg_yellow" + }, + "broken=true,eggcolor=yellow": { + "model": "galacticraftplanets:slimeling_egg_yellow", + "textures": { + "particle": "galacticraftplanets:blocks/yellow_egg_1", + "texture": "galacticraftplanets:blocks/yellow_egg_1" + } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sludge.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sludge.json new file mode 100644 index 00000000..c30b4b2d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sludge.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:fluid", + "custom": { "fluid": "bacterialsludge" } + }, + "variants": { + "fluid": [{ }], + "inventory": [{ }] + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_controller.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_controller.json new file mode 100644 index 00000000..8e469b30 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_controller.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "galacticraftplanets:solar_array_controller" }, + "facing=west": { "model": "galacticraftplanets:solar_array_controller", "y": 180, "uvlock": true }, + "facing=south": { "model": "galacticraftplanets:solar_array_controller", "y": 90, "uvlock": true }, + "facing=north": { "model": "galacticraftplanets:solar_array_controller", "y": 270, "uvlock": true } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_module.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_module.json new file mode 100644 index 00000000..c6389e31 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_module.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:solar_array_module" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spacewart.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spacewart.json new file mode 100644 index 00000000..64c5d34c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spacewart.json @@ -0,0 +1,8 @@ +{ + "variants": { + "age=0": { "model": "nether_wart_stage0" }, + "age=1": { "model": "nether_wart_stage1" }, + "age=2": { "model": "nether_wart_stage1" }, + "age=3": { "model": "nether_wart_stage2" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spout.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spout.json new file mode 100644 index 00000000..140c592d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spout.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:spout" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sulphuric_acid.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sulphuric_acid.json new file mode 100644 index 00000000..bbe50c35 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sulphuric_acid.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:fluid", + "custom": { "fluid": "sulphuricacid" } + }, + "variants": { + "fluid": [{ }], + "inventory": [{ }] + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_fake.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_fake.json new file mode 100644 index 00000000..e0bf0d36 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_fake.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { "model": "galacticraftcore:block_multi_model" }, + "variants": { + "normal": [{ }], + "inventory": [{ }], + "connectable": { + "true": { }, + "false": { } + }, + "top": { + "true": { }, + "false": { } + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_short.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_short.json new file mode 100644 index 00000000..a84014d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_short.json @@ -0,0 +1,10 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { + "model": "galacticraftplanets:telepad_short.obj", + "textures": { "particle": "galacticraftcore:blocks/buggy_pad_full" }, + "custom": { "flip-v": true } + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t2.json new file mode 100644 index 00000000..06cf11bc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t2.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { + "model": "galacticraftplanets:treasure_t2" + }, + "facing=east": { + "model": "galacticraftplanets:treasure_t2", + "y": 90 + }, + "facing=south": { + "model": "galacticraftplanets:treasure_t2", + "y": 180 + }, + "facing=west": { + "model": "galacticraftplanets:treasure_t2", + "y": 270 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t3.json new file mode 100644 index 00000000..b71d5ffa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t3.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { + "model": "galacticraftplanets:treasure_t3" + }, + "facing=east": { + "model": "galacticraftplanets:treasure_t3", + "y": 90 + }, + "facing=south": { + "model": "galacticraftplanets:treasure_t3", + "y": 180 + }, + "facing=west": { + "model": "galacticraftplanets:treasure_t3", + "y": 270 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus.json new file mode 100644 index 00000000..bde03160 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus.json @@ -0,0 +1,33 @@ +{ + "variants": { + "basictypevenus=venus_rock_0": [ + { "model": "galacticraftplanets:venus_rock_0_model" }, + { "model": "galacticraftplanets:venus_rock_0_model", "y": 90 }, + { "model": "galacticraftplanets:venus_rock_0_model", "y": 180 }, + { "model": "galacticraftplanets:venus_rock_0_model", "y": 270 } + ], + "basictypevenus=venus_rock_1": [ + { "model": "galacticraftplanets:venus_rock_1_model" }, + { "model": "galacticraftplanets:venus_rock_1_model", "y": 90 }, + { "model": "galacticraftplanets:venus_rock_1_model", "y": 180 }, + { "model": "galacticraftplanets:venus_rock_1_model", "y": 270 } + ], + "basictypevenus=venus_rock_2": { "model": "galacticraftplanets:venus_rock_2_model" }, + "basictypevenus=venus_rock_3": [ + { "model": "galacticraftplanets:venus_rock_3_model" }, + { "model": "galacticraftplanets:venus_rock_3_model", "y": 90 }, + { "model": "galacticraftplanets:venus_rock_3_model", "y": 180 }, + { "model": "galacticraftplanets:venus_rock_3_model", "y": 270 } + ], + "basictypevenus=dungeon_brick_venus_1": { "model": "galacticraftplanets:dungeon_brick_venus_1_model" }, + "basictypevenus=dungeon_brick_venus_2": { "model": "galacticraftplanets:dungeon_brick_venus_2_model" }, + "basictypevenus=venus_ore_aluminum": { "model": "galacticraftplanets:venus_ore_aluminum" }, + "basictypevenus=venus_ore_copper": { "model": "galacticraftplanets:venus_ore_copper" }, + "basictypevenus=venus_ore_galena": { "model": "galacticraftplanets:venus_ore_galena" }, + "basictypevenus=venus_ore_quartz": { "model": "galacticraftplanets:venus_ore_quartz" }, + "basictypevenus=venus_ore_silicon": { "model": "galacticraftplanets:venus_ore_silicon" }, + "basictypevenus=venus_ore_tin": { "model": "galacticraftplanets:venus_ore_tin" }, + "basictypevenus=lead_block": { "model": "galacticraftplanets:lead_block" }, + "basictypevenus=venus_ore_solar": { "model": "galacticraftplanets:venus_ore_solar" } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus_rock_scorched.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus_rock_scorched.json new file mode 100644 index 00000000..f45d8c67 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus_rock_scorched.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:venus_rock_scorched" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/walkway.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/walkway.json new file mode 100644 index 00000000..6b6cb294 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/walkway.json @@ -0,0 +1,139 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:walkway", + "transform": "forge:default-block" + }, + "variants": { + "down=false,east=false,north=false,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + + "down=false,east=false,north=true,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway_n", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway_n", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway_n", "y": 180 }, + "down=false,east=false,north=false,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway_n", "y": 270 }, + + "down=false,east=false,north=true,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway_ns", "y": 90 }, + + "down=false,east=true,north=true,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway_nes", "y": 270 }, + + "down=false,east=true,north=true,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway_ne", "y": 270 }, + + "down=false,east=true,north=true,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway_nesw", "y": 0 }, + + + "down=false,east=false,north=false,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen" }, + + "down=false,east=false,north=true,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_n", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_n", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_n", "y": 180 }, + "down=false,east=false,north=false,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nd", "y": 270 }, + + "down=false,east=false,north=true,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nsd", "y": 90 }, + + "down=false,east=true,north=true,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ned", "y": 270 }, + + "down=false,east=true,north=true,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nesw", "y": 0 }, + + "down=true,east=false,north=false,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_d", "y": 0 }, + + "down=true,east=true,north=true,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_neswd", "y": 0 }, + + + "down=false,east=false,north=false,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire" }, + + "down=false,east=false,north=true,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_n", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_n", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_n", "y": 180 }, + "down=false,east=false,north=false,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nd", "y": 270 }, + + "down=false,east=false,north=true,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nsd", "y": 90 }, + + "down=false,east=true,north=true,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ned", "y": 270 }, + + "down=false,east=true,north=true,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nesw", "y": 0 }, + + "down=true,east=false,north=false,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_d", "y": 0 }, + + "down=true,east=true,north=true,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_neswd", "y": 0 }, + + + + "down=true,east=false,north=false,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=true,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=false,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=false,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=false,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=true,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=false,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=true,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=false,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=true,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=true,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=true,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=false,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=false,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=true,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=true,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/web_torch.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/web_torch.json new file mode 100644 index 00000000..6e077339 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/web_torch.json @@ -0,0 +1,6 @@ +{ + "variants": { + "webtype=web_torch_0": { "model": "galacticraftplanets:web_torch_0" }, + "webtype=web_torch_1": { "model": "galacticraftplanets:web_torch_1" } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cs_cz.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cs_cz.lang new file mode 100644 index 00000000..84fb892d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cs_cz.lang @@ -0,0 +1,303 @@ +container.entry_pod.name=Přistávací modul +container.launchcontroller.name=Odpalovací zarízení +container.mars_lander.name=Přistávací balóny +container.short_range_telepad.name=Transportér krátkého dosahu +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Těžební souprava +entity.creeper_boss.name=Vyvinutý creeper - Boss +entity.entry_pod.name=Přistávací modul +entity.grapple_hook.name=Hák +entity.landing_balloons.name=Přistávací balóny +entity.projectile_tnt.name=TNT projektil +entity.rocket_cargo.name=Nákladní raketa +entity.rocket_t2.name=Raketa typ 2 +entity.rocket_t3.name=Raketa typ 3 +entity.slimeling.name=Slizoun +entity.sludgeling.name=Bahenní vcela +entity.small_asteroid.name=Malý asteroid +fluid.argon=Plynný argon +fluid.atmosphericgases=Atmosferické plyny +fluid.bacterialsludge=Infikované bláto +fluid.carbondioxide=Plynný oxid uhličitý +fluid.fuel=Palivo +fluid.helium=Plynné helium +fluid.hydrogen=Plynný vodík +fluid.liquidargon=Kapalný Argon +fluid.liquidmethane=Kapalný metan +fluid.liquidnitrogen=Kapalný dusík +fluid.liquidoxygen=Kapalný kyslík +fluid.methane=Plynný metan +fluid.nitrogen=Plynný dusík +fluid.oxygen=Plynný kyslík +gas.carbondioxide.name=Oxid uhlicitý +gas.nitrogen.name=Dusík +gas.oxygen.name=Kyslík +gc.configgui.astro_miners_max=Maximální počet těžebních souprav na hráče +gc.configgui.dimension_id_asteroids=Číslo dimenze asteroidů +gc.configgui.dimension_id_mars=Císlo dimenze Marsu +gc.configgui.disable_galacticraft_helium=Vypnout registraci plynného Helia +gc.configgui.id_schematic_cargo_rocket=Císlo schématu nákladní rakety +gc.configgui.id_schematic_rocket_t2=Císlo schématu rakety typu 2 +gc.configgui.id_schematic_rocket_t3=Číslo schématu rakety typu 3 +gc.configgui.launch_controller_all_dims=Odpalovace ve všech dimenzích +gc.configgui.launch_controller_chunk_load=Nacítání oblasti odpalovace +gc.configgui.planets.title=Nastavení planet Galacticraftu +gui.button.liquefy.name=Proces +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Přivolat +gui.carbon_slot.desc.0=Patří sem drcený uhlík +gui.cargorocket.status.launched.0=Již +gui.cargorocket.status.launched.1=odpáleno. +gui.cargorocket.status.waiting.0=Cekám na odpalovací +gui.cargorocket.status.waiting.1=sekvenci. +gui.choose_planet.desc.mars=Obyvatelný#Žádný kyslík#Gravitace: 38% +gui.cryogenic.chat.cant_use=Nemohu to použít dalších %d vterin. +gui.gas_input.desc.0=Zkuste sem vložit$lahev s plynem +gui.gas_input.desc.1=(poprípadne,$atmosferický ventil) +gui.gas_tank.desc.0=Plynová nádrž +gui.gas_tank_compressed.desc.0=Zásobárna stlačeného plynu +gui.hydrogen_input.desc.0=Toto vyžaduje lahev vodíku +gui.hydrogen_input.desc.1=nebo atmosferický ventil +gui.launch_controller.desc.0=Unikátní frekvence$tohoto odpalovace +gui.launch_controller.desc.1=Frekvence pro vypuštení rakety na +gui.launch_controller.desc.2=Má býd odstranen$po odpálení rakety +gui.launch_controller.desc.3=Po splnení kritérií$bude vypuštena raketa +gui.launch_controller.desc.4=Skrýt cílové frekvence$ostatních hráčů +gui.liquid_output.desc.2=nádoba se zkapalneným plynem +gui.liquid_tank.desc.0=Nádrž na kapaliny +gui.message.address.name=Adresa +gui.message.astro_miner.fail=Tato základna již obsahuje těžební soupravu! +gui.message.astro_miner1.fail=Přistávací port je obsazen hráčem: +gui.message.astro_miner1_a.fail=Cesta těžební soupravy je blokována: +gui.message.astro_miner2.fail=Již jsi postavil příliž mnoho těžebních souprav! +gui.message.astro_miner3.fail=Základna těžební soupravy byla zničena. +gui.message.astro_miner4.fail=Těžební soupravě došla energie, nemůže se tedy dostat zpět na základnu. +gui.message.astro_miner5.fail=Cesta těžební soupravy se zdá být blokována. +gui.message.astro_miner6.fail=Těžební souprava dokončila těžbu v oblasti. Nyní vyčkává další rozkazy. +gui.message.astro_miner7.fail=Na vesmírné stanici není nic, co by mohla těžební souprava těžit! +gui.message.astro_miner8.fail=K základně byla přiřazena další těžební souprava. Původní se nyní zastavý. +gui.message.bubble_exp.name=Bublina se zvetšuje +gui.message.cargo_full.name=Plne naloženo +gui.message.cargo_unloaded.name=Náklad vyložen +gui.message.dest_address.name=Cílová adresa +gui.message.dest_frequency.name=Cílová frekvence +gui.message.enable_grass.name=Povolit trávu +gui.message.enable_trees.name=Povolit stromy +gui.message.frequency.name=Frekvence +gui.message.fully_fueled.name=Plná nádrž +gui.message.grapple.fail=Pro použití háku je potřeba také lano! +gui.message.grass.name=Tráva +gui.message.instant.name=Okamžite +gui.message.invalid_address.name=Neplatná adresa +gui.message.invalid_freq.name=Neplatná frekvence +gui.message.invalid_target_address.name=Neplatná cílová adresa +gui.message.launch_when.name=Odstartovat když +gui.message.low_energy.name=Málo energie +gui.message.no_bonemeal.name=Nedostatek kostní drene +gui.message.no_energy.name=Nedostatek energie +gui.message.no_saplings.name=Nedostatek rostlin +gui.message.no_seeds.name=Nedostatek obylí +gui.message.no_valid_blocks.name=Špatné bloky v bubline +gui.message.no_water.name=Nedostatek vody +gui.message.not_enough.name=Nedostatek +gui.message.not_enough_energy.name=Nedostatek energie! +gui.message.not_set.name=Nenastaveno +gui.message.one_min.name=1 minuta +gui.message.receiving_active.name=Na příjmu +gui.message.redstone_sig.name=Signál +gui.message.remove_pad.name=Odstranit +gui.message.sending_active.name=Vysílá! +gui.message.success.name=Úspech +gui.message.target_no_energy.name=Cíl nemá dostatek energie! +gui.message.telepad_not_found.name=Transportér nenalezen! +gui.message.telepad_too_far.name=Cíl je příliž daleko! (Max %d) +gui.message.telepad_wrong_dim.name=Cíl není ve stejné oblasti! +gui.message.ten_sec.name=10 sekund +gui.message.terraforming.name=Terraformuje +gui.message.thirty_sec.name=30 sekund +gui.message.trees.name=Stromy +gui.message.with_atmosphere0.name=na planete s velkým obsahem metanu +gui.message.with_atmosphere1.name=v atmosfére +gui.message.zero_water.name=Chybí voda! +gui.methane_output.desc.2=nádoba na metan +gui.miner.docked=Připojena +gui.miner.docking=Připojuje se +gui.miner.mined=Vytěženo +gui.miner.mining=Těží +gui.miner.offline=Vypnuto +gui.miner.out_of_range=Mimo dosah +gui.miner.returning=Vrací se +gui.miner.stuck=Uvízla na: +gui.miner.travelling=Cestuje +gui.slimeling.button.follow=Následuj me! +gui.slimeling.button.sit=Sedni! +gui.slimeling.chat.wrong_player=Tohle není muj slizoun! +gui.slimeling.damage=Poškození +gui.slimeling.following=Sleduje +gui.slimeling.food=Oblíbené jídlo +gui.slimeling.kills=Zabil +gui.slimeling.name=Jméno +gui.slimeling.owner=Vlastník +gui.slimeling.scale=Merítko +gui.slimeling.sitting=Sedí +gui.status.liquefying.name=Zkapalnuje +gui.status.needs_carbon.name=Potrebuje uhlík +gui.status.nogas.name=Žádný plyn +gui.status.processing.name=Syntetizuje +gui.status.tankfull.name=Lahev plná +gui.status.tanksfull.name=Lahve plné +gui.telepad.desc.0=Toto je unikátní adresa$tohoto transportéru +gui.telepad.desc.1=Cílová adresa$Tam budou objekty odeslány. +gui.terraformer.desc.0=Nadrž na vodu +gui.water_bucket_slot.desc=Vložte sem kbelíky vody +item.astro_miner.name=Těžební souprava +item.atmospheric_valve.name=Atmosferický uzávěr +item.beam_core.name=Paprskové jádro +item.bucket_sludge.name=Kyblík infikovaného bláta +item.canister.gas.name=Plyn +item.canister.liquid_argon.full.name=Plná lahev kapalného argonu +item.canister.liquid_argon.name=LAr#Kapalný argon +item.canister.liquid_argon.partial.name=Lahev na kapalný argon +item.canister.liquid_nitrogen.full.name=Plná lahev kapalného dusíku +item.canister.liquid_nitrogen.name=Kapalina +item.canister.liquid_nitrogen.partial.name=Lahev na kapalný dusík +item.canister.lox.full.name=Plná lahev kapalného kyslíku +item.canister.lox.name=LOX #Kapalný kyslík +item.canister.lox.partial.name=Lahev na kapalný kyslík +item.carbon_fragments.name=Drcený uhlík +item.compressed_desh.name=Válcovaný frikcní kov +item.compressed_titanium.name=Válcovaný titan +item.desh_axe.name=Sekera z frikcního kovu +item.desh_boots.name=Boty z frikcního kovu +item.desh_chestplate.name=Hrudní chránic z frikcního kovu +item.desh_helmet.name=Helma z frikcního kovu +item.desh_hoe.name=Motyka z frikcního kovu +item.desh_leggings.name=Kalhoty z frikcního kovu +item.desh_pick.name=Krumpác z frikcního kovu +item.desh_pick_slime.description.name=Muže sbírat vejce slizouna +item.desh_pick_slime.name=Lepivý krumpác z frikcního kovu +item.desh_spade.name=Lopata z frikcního kovu +item.desh_stick.name=Tycka z frikcního kovu +item.desh_sword.name=Mec z frikcního kovu +item.empty_gas_canister.name=Prázdná tlaková lahev +item.engine_t2.name=Vylepšený raketový motor +item.fluid_manip.name=Kapalinový manipulator +item.grapple.name=Hák +item.heavy_nose_cone.name=Vylepšená špička rakety +item.ingot_desh.name=Ingot frikcního kovu +item.ingot_titanium.name=Titanový ingot +item.key.t2.name=Klíc typ 2 +item.methane_canister.name=Plná lahev metanu +item.methane_canister_partial.name=Lahev na metan +item.orion_drive.name=Iontový motor +item.raw_desh.name=Nezpracovaný frikcní kov +item.reinforced_plate_t2.name=Plech pro težký provoz +item.reinforced_plate_t3.name=Zesílený plech +item.rocket_fins_t2.name=Vylepšené křidélko +item.rocket_t2.cargo_rocket.name=Nákladní raketa +item.rocket_t2.t2Rocket.name=Raketa typ 2 +item.rocket_t3.t3Rocket.name=Raketa typ 3 +item.shard_iron.name=Železný úlomek +item.shard_titanium.name=Titanový úlomek +item.slimeling_cargo.name=Batoh pro slizouna +item.thermal_boots.name=Tepelně izolované boty +item.thermal_chestplate.name=Tepelně izolovaný hrudní chránič +item.thermal_cloth.name=Tepelně izolační tkanina +item.thermal_helm.name=Tepelně izolovaná helma +item.thermal_leggings.name=Tepelně izolované kalhoty +item.tier2.desc=Typ 2 +item.tier3.desc=Typ 3 +item.titanium_axe.name=Titanová sekera +item.titanium_boots.name=Titanové boty +item.titanium_chestplate.name=Titanový hrudní chránič +item.titanium_helmet.name=Titanová helma +item.titanium_hoe.name=Titanová motyka +item.titanium_leggings.name=Titanové kalhoty +item.titanium_pickaxe.name=Titanový krumpáč +item.titanium_shovel.name=Titanová lopata +item.titanium_sword.name=Titanový meč +planet.asteroids=Asteroidy +planet.mars=Mars +schematic.astro_miner.name=Těžební souprava +schematic.cargo_rocket.name=Automatická nákladní raketa +schematic.rocket_t3.name=Raketa typ 3 +tile.asteroids_block.asteroid_rock_0.name=Kus asteroidu +tile.asteroids_block.asteroid_rock_1.name=Kus asteroidu +tile.asteroids_block.asteroid_rock_2.name=Kus asteroidu +tile.asteroids_block.ore_aluminum_asteroids.name=Hliníková ruda +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenitová ruda +tile.asteroids_block.ore_iron_asteroids.name=Železná ruda +tile.asteroids_block.titanium_block.name=Titanový blok +tile.beam_receiver.description=Zdroje paprsku jsou připojeny ke strojům jako přívody nebo vývody pro přenos energie pomocí paprsku. +tile.beam_receiver.name=Zdroj paprsku +tile.beam_reflector.description=Směrovače paprsku slouží ke směrování paprsků za zdroje do cíle. Po kliknutí pravým tlačítkem lze vybírat cíle. +tile.beam_reflector.name=Směrovač paprsku +tile.cavern_vines.description=Jeskyní réva je nebezpecný živý organismus, který omotá hráce a táhne ho nahoru. +tile.cavern_vines.name=Jeskyní réva +tile.creeper_egg.description=Vejce creepera je k nalezení v dungeonech na Marsu, vylíhne se z nej predátor pripravený explodovat. +tile.creeper_egg.name=Vejce creepra +tile.cryo_chamber.description=Kryogenická komora dovolí hráci spát pres den, uzdravovat se ze zranení, ale vyžaduje cas pro znovu nabití. +tile.dense_ice.name=Zhuštěný led +tile.electrolyzer.description=Vyrábí z vody kyslík a vodík (používá se v syntetizéru metanu). +tile.gas_liquefier.description=Zkapalnené plyny, budto z atmosféry nebo tlakových lahví. Kapalný metan je dobré raketové palivo! +tile.hydrogen_pipe.description=Vodíková trubka dopravuje vodík mezi stroji. +tile.hydrogen_pipe.name=Vodíková trubka +tile.launch_controller.description=Odpalovace se využívají pro úpravu chování startu, tím, že umožnují nastavení kritérií pro odpálení a cíl, tak se nabízí možnost využití pro automatické starty. +tile.mars.coppermars.name=Medená ruda +tile.mars.deshmars.name=Ruda frikcního kovu +tile.mars.ironmars.name=Železná ruda +tile.mars.marscobblestone.name=Dlažební kámen +tile.mars.marsdeco.name=Blok z frikcního kovu +tile.mars.marsdirt.name=Podpovrchový kámen +tile.mars.marsdungeon.name=Zed dungeonu +tile.mars.marsgrass.name=Povrchový kámen +tile.mars.marsstone.name=Kámen +tile.mars.tinmars.name=Cínová ruda +tile.mars_stairs_cobblestone.name=Schody z dlažebního kamene +tile.mars_stairs_brick.name=Zděné schody (dungeon) +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Stázová komora +tile.mars_machine.2.name=Odpalovac +tile.mars_machine.4.name=Zkapalnovac +tile.mars_machine.5.name=Syntetizér metanu +tile.mars_machine.6.name=Vodní electrolyzér +tile.methane_synthesizer.description=Se zdrojem vodíku a uhlíku vyrábí Metan pro další zpracování ve zkapalnovaci. +tile.miner_base.description=Základna těžební soupravy slouží jako dokovací port pro těžební stanici. Postavte jej jako krychly o straně 2 m. +tile.miner_base.name=Základna pro těžební soupravu +tile.slab_gc_half.mars_bricks_slab.name=Zděná podlaha (dungeon) +tile.slab_gc_half.mars_slab.name=Podlaha z dlažebního kamene +tile.slimeling_egg.blue.name=Vejce modrého slizouna +tile.slimeling_egg.description=Vejce slizouna, pokud jsou rozbita hrácovou rukou, tak se z nich vylíhne brzy mazlícek. +tile.slimeling_egg.red.name=Vejce červeného slizouna +tile.slimeling_egg.yellow.name=Vejce žlutého slizouna +tile.sludge.name=Infikované bláto +tile.telepad_short.description=Transportéry krátkého dosahu slouží k přepravě hráčů a dalších živých bytostí na krátké vzdálenosti (250 m) po spárování s dalším transportérem. +tile.telepad_short.name=Telepad krátkého dosahu +tile.terraformer.description=Terraformery umožnují premenit cásti cizích planet na prostredí podobné zemi. Vytvárí trávu, stromy a vodu pokud dostane správné suroviny. +tile.treasure_t2.description=Pokladnice typu 2 jsou k nalezení v dungeonech na Marsu. Lze je odemknout po zabití bosse. +tile.treasure_t2.name=Pokladnice typ 2 +tile.treasure_t3.description=Pokladnice typu 3 zatím nejsou využity. +tile.treasure_t3.name=Pokladnice typ 3 +tile.venus.lead_block.name=Olověný blok +tile.venus.dungeon_brick_venus_1.name=Zeď Venušina dungeonu I +tile.venus.dungeon_brick_venus_2.name=Zeď Venušina dungeonu II +tile.venus.venus_ore_aluminum.name=Hliníková ruda +tile.venus.venus_ore_copper.name=Měděná ruda +tile.venus.venus_ore_galena.name=Galenitová ruda +tile.venus.venus_ore_quartz.name=Křemen +tile.venus.venus_ore_silicon.name=Křemíková ruda +tile.venus.venus_ore_solar.name=Sluneční ruda +tile.venus.venus_ore_tin.name=Cínová ruda +tile.venus.venus_rock_0.name=Venušin měkký kámen +tile.venus.venus_rock_1.name=Venušin tvrdý kámen +tile.venus.venus_rock_2.name=Venušin vulkanický kámen +tile.venus.venus_rock_3.name=Pemza +tile.walkway.walkway.description=Lávky slouží k dekorativním účelům, propojují bloky při zachování patřičného vzhledu +tile.walkway.walkway.name=Lávka +tile.walkway.walkway_pipe.description=Lávka s trubkou slouží k transportu kapalin pod lávkou +tile.walkway.walkway_pipe.name=Lávka s trubkou +tile.walkway.walkway_wire.description=Lávka s kabelem slouží k přenosu energie pod lávkou +tile.walkway.walkway_wire.name=Lávka s kabelem +tile.wall_gc.mars.name=Stěna z dlažebního kamene +tile.wall_gc.mars_bricks.name=Zděná stěna (dungeon) diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cy_gb.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cy_gb.lang new file mode 100644 index 00000000..9fca67a8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cy_gb.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +container.launchcontroller.name=Launch Controller ##NEEDS TRANSLATE## +container.mars_lander.name=Landing Balloons ##NEEDS TRANSLATE## +container.short_range_telepad.name=Short Range Telepad ##NEEDS TRANSLATE## +container.tile_terraformer.name=Terraformer ##NEEDS TRANSLATE## +dimension.mars.name=Mars ##NEEDS TRANSLATE## +entity.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +entity.creeper_boss.name=Evolved Creeper Boss ##NEEDS TRANSLATE## +entity.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +entity.grapple_hook.name=Grapple Hook ##NEEDS TRANSLATE## +entity.landing_balloons.name=Landing Balloons ##NEEDS TRANSLATE## +entity.projectile_tnt.name=Projectile TNT ##NEEDS TRANSLATE## +entity.rocket_cargo.name=Cargo Rocket ##NEEDS TRANSLATE## +entity.rocket_t2.name=Tier 2 Rocket ##NEEDS TRANSLATE## +entity.rocket_t3.name=Tier 3 Rocket ##NEEDS TRANSLATE## +entity.slimeling.name=Slimeling ##NEEDS TRANSLATE## +entity.sludgeling.name=Sludgeling ##NEEDS TRANSLATE## +entity.small_asteroid.name=Small Asteroid ##NEEDS TRANSLATE## +fluid.argon=Argon Gas ##NEEDS TRANSLATE## +fluid.atmosphericgases=Atmospheric Gases ##NEEDS TRANSLATE## +fluid.bacterialsludge=Bacterial Sludge ##NEEDS TRANSLATE## +fluid.carbondioxide=CO2 Gas ##NEEDS TRANSLATE## +fluid.fuel=Fuel ##NEEDS TRANSLATE## +fluid.helium=Helium Gas ##NEEDS TRANSLATE## +fluid.hydrogen=Hydrogen Gas ##NEEDS TRANSLATE## +fluid.liquidargon=Liquid Argon ##NEEDS TRANSLATE## +fluid.liquidmethane=Liquid Methane ##NEEDS TRANSLATE## +fluid.liquidnitrogen=Liquid Nitrogen ##NEEDS TRANSLATE## +fluid.liquidoxygen=Liquid Oxygen ##NEEDS TRANSLATE## +fluid.methane=Methane Gas ##NEEDS TRANSLATE## +fluid.nitrogen=Nitrogen Gas ##NEEDS TRANSLATE## +fluid.oxygen=Oxygen Gas ##NEEDS TRANSLATE## +gas.carbondioxide.name=Carbon Dioxide ##NEEDS TRANSLATE## +gas.nitrogen.name=Nitrogen ##NEEDS TRANSLATE## +gas.oxygen.name=Oxygen ##NEEDS TRANSLATE## +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Process ##NEEDS TRANSLATE## +gui.button.liquefy_stop.name=Stop ##NEEDS TRANSLATE## +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fragmented Carbon can go here ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.0=Already ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.1=Launched ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.0=Waiting for ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.1=ignition ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Habitable#No Oxygen#Gravity: 38% ##NEEDS TRANSLATE## +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds ##NEEDS TRANSLATE## +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here ##NEEDS TRANSLATE## +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) ##NEEDS TRANSLATE## +gui.gas_tank.desc.0=Gas storage ##NEEDS TRANSLATE## +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.0=This takes a hydrogen tank ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.1=or an Atmospheric Valve ##NEEDS TRANSLATE## +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency ##NEEDS TRANSLATE## +gui.launch_controller.desc.1=Frequency to launch rockets towards ##NEEDS TRANSLATE## +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=liquefied gas tank ##NEEDS TRANSLATE## +gui.liquid_tank.desc.0=Liquid Tank ##NEEDS TRANSLATE## +gui.message.address.name=Address ##NEEDS TRANSLATE## +gui.message.astro_miner.fail=This base already has an Astro Miner! ##NEEDS TRANSLATE## +gui.message.astro_miner1.fail=The docking area is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=That would be one Astro Miner too many! ##NEEDS TRANSLATE## +gui.message.astro_miner3.fail=The Astro Miner's base was removed! ##NEEDS TRANSLATE## +gui.message.astro_miner4.fail=The Astro Miner ran out of energy and cannot get back to base! ##NEEDS TRANSLATE## +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! ##NEEDS TRANSLATE## +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! ##NEEDS TRANSLATE## +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=BubbleExpanding ##NEEDS TRANSLATE## +gui.message.cargo_full.name=Cargo is Full ##NEEDS TRANSLATE## +gui.message.cargo_unloaded.name=Cargo is Unloaded ##NEEDS TRANSLATE## +gui.message.dest_address.name=Target Address ##NEEDS TRANSLATE## +gui.message.dest_frequency.name=Target ##NEEDS TRANSLATE## +gui.message.enable_grass.name=Enable Grass ##NEEDS TRANSLATE## +gui.message.enable_trees.name=Enable Trees ##NEEDS TRANSLATE## +gui.message.frequency.name=Frequency ##NEEDS TRANSLATE## +gui.message.fully_fueled.name=Fully Fueled ##NEEDS TRANSLATE## +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! ##NEEDS TRANSLATE## +gui.message.grass.name=Grass ##NEEDS TRANSLATE## +gui.message.instant.name=Instantly ##NEEDS TRANSLATE## +gui.message.invalid_address.name=Invalid Unique Address ##NEEDS TRANSLATE## +gui.message.invalid_freq.name=Invalid Frequency ##NEEDS TRANSLATE## +gui.message.invalid_target_address.name=Invalid Target Address ##NEEDS TRANSLATE## +gui.message.launch_when.name=Launch When ##NEEDS TRANSLATE## +gui.message.low_energy.name=Low energy ##NEEDS TRANSLATE## +gui.message.no_bonemeal.name=Not Enough Bonemeal ##NEEDS TRANSLATE## +gui.message.no_energy.name=Not Enough Energy ##NEEDS TRANSLATE## +gui.message.no_saplings.name=Not Enough Saplings ##NEEDS TRANSLATE## +gui.message.no_seeds.name=Not Enough Seeds ##NEEDS TRANSLATE## +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble ##NEEDS TRANSLATE## +gui.message.no_water.name=Not Enough Water ##NEEDS TRANSLATE## +gui.message.not_enough.name=Not Enough ##NEEDS TRANSLATE## +gui.message.not_enough_energy.name=Not Enough Energy! ##NEEDS TRANSLATE## +gui.message.not_set.name=Not Set ##NEEDS TRANSLATE## +gui.message.one_min.name=1 Minute ##NEEDS TRANSLATE## +gui.message.receiving_active.name=Receiving Active ##NEEDS TRANSLATE## +gui.message.redstone_sig.name=Redstone Signal ##NEEDS TRANSLATE## +gui.message.remove_pad.name=Remove Pad On Launch ##NEEDS TRANSLATE## +gui.message.sending_active.name=Sending Active ##NEEDS TRANSLATE## +gui.message.success.name=Success ##NEEDS TRANSLATE## +gui.message.target_no_energy.name=Target doesn't have enough Energy! ##NEEDS TRANSLATE## +gui.message.telepad_not_found.name=Telepad Not Found! ##NEEDS TRANSLATE## +gui.message.telepad_too_far.name=Target too far! (Max %d) ##NEEDS TRANSLATE## +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! ##NEEDS TRANSLATE## +gui.message.ten_sec.name=10 Seconds ##NEEDS TRANSLATE## +gui.message.terraforming.name=Terraforming ##NEEDS TRANSLATE## +gui.message.thirty_sec.name=30 Seconds ##NEEDS TRANSLATE## +gui.message.trees.name=Trees ##NEEDS TRANSLATE## +gui.message.with_atmosphere0.name=on a planet with plenty of ##NEEDS TRANSLATE## +gui.message.with_atmosphere1.name=in the atmosphere ##NEEDS TRANSLATE## +gui.message.zero_water.name=No water! ##NEEDS TRANSLATE## +gui.methane_output.desc.2=methane tank ##NEEDS TRANSLATE## +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Follow ##NEEDS TRANSLATE## +gui.slimeling.button.sit=Sit ##NEEDS TRANSLATE## +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Attack Damage ##NEEDS TRANSLATE## +gui.slimeling.following=Following ##NEEDS TRANSLATE## +gui.slimeling.food=Favorite food ##NEEDS TRANSLATE## +gui.slimeling.kills=Kills ##NEEDS TRANSLATE## +gui.slimeling.name=Name ##NEEDS TRANSLATE## +gui.slimeling.owner=Owner ##NEEDS TRANSLATE## +gui.slimeling.scale=Scale ##NEEDS TRANSLATE## +gui.slimeling.sitting=Sitting ##NEEDS TRANSLATE## +gui.status.liquefying.name=Liquefying ##NEEDS TRANSLATE## +gui.status.needs_carbon.name=Needs carbon ##NEEDS TRANSLATE## +gui.status.nogas.name=No gas ##NEEDS TRANSLATE## +gui.status.processing.name=Synthesizing ##NEEDS TRANSLATE## +gui.status.tankfull.name=Tank full ##NEEDS TRANSLATE## +gui.status.tanksfull.name=Tanks full ##NEEDS TRANSLATE## +gui.telepad.desc.0=This is the Telepad's$unique address ##NEEDS TRANSLATE## +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. ##NEEDS TRANSLATE## +gui.terraformer.desc.0=Water Tank ##NEEDS TRANSLATE## +gui.water_bucket_slot.desc=Place water buckets here ##NEEDS TRANSLATE## +item.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +item.atmospheric_valve.name=Atmospheric Valve ##NEEDS TRANSLATE## +item.beam_core.name=Beam Core ##NEEDS TRANSLATE## +item.bucket_sludge.name=Bacterial Sludge Bucket ##NEEDS TRANSLATE## +item.canister.gas.name=Gas ##NEEDS TRANSLATE## +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level ##NEEDS TRANSLATE## +item.canister.liquid_argon.partial.name=Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.name=Liquid ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.lox.full.name=Filled Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.canister.lox.name=LOX ##NEEDS TRANSLATE## +item.canister.lox.partial.name=Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.carbon_fragments.name=Fragmented Carbon ##NEEDS TRANSLATE## +item.compressed_desh.name=Compressed Desh ##NEEDS TRANSLATE## +item.compressed_titanium.name=Compressed Titanium ##NEEDS TRANSLATE## +item.desh_axe.name=Desh Axe ##NEEDS TRANSLATE## +item.desh_boots.name=Desh Boots ##NEEDS TRANSLATE## +item.desh_chestplate.name=Desh Chestplate ##NEEDS TRANSLATE## +item.desh_helmet.name=Desh Helmet ##NEEDS TRANSLATE## +item.desh_hoe.name=Desh Hoe ##NEEDS TRANSLATE## +item.desh_leggings.name=Desh Leggings ##NEEDS TRANSLATE## +item.desh_pick.name=Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_pick_slime.description.name=Can harvest Slimeling eggs ##NEEDS TRANSLATE## +item.desh_pick_slime.name=Sticky Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_spade.name=Desh Shovel ##NEEDS TRANSLATE## +item.desh_stick.name=Desh Stick ##NEEDS TRANSLATE## +item.desh_sword.name=Desh Sword ##NEEDS TRANSLATE## +item.empty_gas_canister.name=Empty Gas Canister ##NEEDS TRANSLATE## +item.engine_t2.name=Heavy Rocket Engine ##NEEDS TRANSLATE## +item.fluid_manip.name=Fluid Manipulator ##NEEDS TRANSLATE## +item.grapple.name=Grapple ##NEEDS TRANSLATE## +item.heavy_nose_cone.name=Heavy Nose Cone ##NEEDS TRANSLATE## +item.ingot_desh.name=Desh Ingot ##NEEDS TRANSLATE## +item.ingot_titanium.name=Titanium Ingot ##NEEDS TRANSLATE## +item.key.t2.name=Tier 2 Dungeon Key ##NEEDS TRANSLATE## +item.methane_canister.name=Filled Methane Gas Canister ##NEEDS TRANSLATE## +item.methane_canister_partial.name=Methane Gas Canister ##NEEDS TRANSLATE## +item.orion_drive.name=Orion Drive ##NEEDS TRANSLATE## +item.raw_desh.name=Unrefined Desh ##NEEDS TRANSLATE## +item.reinforced_plate_t2.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.reinforced_plate_t3.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.rocket_fins_t2.name=Heavy Rocket Fins ##NEEDS TRANSLATE## +item.rocket_t2.cargo_rocket.name=Cargo Rocket ##NEEDS TRANSLATE## +item.rocket_t2.t2Rocket.name=Tier 2 Rocket ##NEEDS TRANSLATE## +item.rocket_t3.t3Rocket.name=Tier 3 Rocket ##NEEDS TRANSLATE## +item.shard_iron.name=Iron Shard ##NEEDS TRANSLATE## +item.shard_titanium.name=Titanium Shard ##NEEDS TRANSLATE## +item.slimeling_cargo.name=Slimeling Inventory Bag ##NEEDS TRANSLATE## +item.thermal_boots.name=Thermal Padding Boots ##NEEDS TRANSLATE## +item.thermal_chestplate.name=Thermal Padding Chestpiece ##NEEDS TRANSLATE## +item.thermal_cloth.name=Thermal Cloth ##NEEDS TRANSLATE## +item.thermal_helm.name=Thermal Padding Helm ##NEEDS TRANSLATE## +item.thermal_leggings.name=Thermal Padding Leggings ##NEEDS TRANSLATE## +item.tier2.desc=Tier 2 ##NEEDS TRANSLATE## +item.tier3.desc=Tier 3 ##NEEDS TRANSLATE## +item.titanium_axe.name=Titanium Axe ##NEEDS TRANSLATE## +item.titanium_boots.name=Titanium Boots ##NEEDS TRANSLATE## +item.titanium_chestplate.name=Titanium Chestplate ##NEEDS TRANSLATE## +item.titanium_helmet.name=Titanium Helmet ##NEEDS TRANSLATE## +item.titanium_hoe.name=Titanium Hoe ##NEEDS TRANSLATE## +item.titanium_leggings.name=Titanium Leggings ##NEEDS TRANSLATE## +item.titanium_pickaxe.name=Titanium Pickaxe ##NEEDS TRANSLATE## +item.titanium_shovel.name=Titanium Shovel ##NEEDS TRANSLATE## +item.titanium_sword.name=Titanium Sword ##NEEDS TRANSLATE## +planet.asteroids=Asteroids ##NEEDS TRANSLATE## +planet.mars=Mars ##NEEDS TRANSLATE## +schematic.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +schematic.cargo_rocket.name=Automatic Cargo Rocket ##NEEDS TRANSLATE## +schematic.rocket_t3.name=Tier 3 Rocket ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore ##NEEDS TRANSLATE## +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. ##NEEDS TRANSLATE## +tile.beam_receiver.name=Beam Receiver ##NEEDS TRANSLATE## +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. ##NEEDS TRANSLATE## +tile.beam_reflector.name=Beam Reflector ##NEEDS TRANSLATE## +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. ##NEEDS TRANSLATE## +tile.cavern_vines.name=Cavernous Vines ##NEEDS TRANSLATE## +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=Creeper Egg ##NEEDS TRANSLATE## +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Dense Ice ##NEEDS TRANSLATE## +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Hydrogen Pipe ##NEEDS TRANSLATE## +tile.launch_controller.description=Launch Controllers are used to customize launch behaviour, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Copper Ore ##NEEDS TRANSLATE## +tile.mars.deshmars.name=Desh Ore ##NEEDS TRANSLATE## +tile.mars.ironmars.name=Iron Ore ##NEEDS TRANSLATE## +tile.mars.marscobblestone.name=Cobblestone ##NEEDS TRANSLATE## +tile.mars.marsdeco.name=Block of Desh ##NEEDS TRANSLATE## +tile.mars.marsdirt.name=Mars Sub-Surface Rock ##NEEDS TRANSLATE## +tile.mars.marsdungeon.name=Dungeon Wall ##NEEDS TRANSLATE## +tile.mars.marsgrass.name=Mars Surface Rock ##NEEDS TRANSLATE## +tile.mars.marsstone.name=Mars Stone ##NEEDS TRANSLATE## +tile.mars.tinmars.name=Tin Ore ##NEEDS TRANSLATE## +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs ##NEEDS TRANSLATE## +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.mars_machine.0.name=Terraformer ##NEEDS TRANSLATE## +tile.mars_machine.1.name=Cryogenic Chamber ##NEEDS TRANSLATE## +tile.mars_machine.2.name=Launch Controller ##NEEDS TRANSLATE## +tile.mars_machine.4.name=Gas Liquefier ##NEEDS TRANSLATE## +tile.mars_machine.5.name=Methane Synthesizer ##NEEDS TRANSLATE## +tile.mars_machine.6.name=Water Electrolyzer ##NEEDS TRANSLATE## +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. ##NEEDS TRANSLATE## +tile.miner_base.name=Astro Miner Base ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab ##NEEDS TRANSLATE## +tile.slimeling_egg.blue.name=Blue Slimeling Egg ##NEEDS TRANSLATE## +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=Red Slimeling Egg ##NEEDS TRANSLATE## +tile.slimeling_egg.yellow.name=Yellow Slimeling Egg ##NEEDS TRANSLATE## +tile.sludge.name=Bacterial Sludge ##NEEDS TRANSLATE## +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Short Range Telepad ##NEEDS TRANSLATE## +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_t2.name=Tier 2 Treasure Chest ##NEEDS TRANSLATE## +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. ##NEEDS TRANSLATE## +tile.treasure_t3.name=Tier 3 Treasure Chest ##NEEDS TRANSLATE## +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. ##NEEDS TRANSLATE## +tile.walkway.walkway.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.name=Walkway ##NEEDS TRANSLATE## +tile.wall_gc.mars.name=Mars Cobblestone Wall ##NEEDS TRANSLATE## +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall ##NEEDS TRANSLATE## diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/de_de.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/de_de.lang new file mode 100644 index 00000000..d51e70e2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/de_de.lang @@ -0,0 +1,358 @@ +checklist.craft_grapple_hook.key=Greifhaken herstellen +checklist.equip_shield_controller.key=Schild Controller ausrüsten +checklist.thermal_padding.key=Thermalanzug ausrüsten +checklist.thermal_padding_t2.key=Stufe 2 Thermalanzug ausrüsten +container.crashed_probe.name=Abgestürzte Probe +container.entry_pod.name=Eintrittskapsel +container.geothermal_generator.name=Geothermal Generator +container.launchcontroller.name=Start-Controller +container.mars_lander.name=Landeballons +container.short_range_telepad.name=Kurzreichweiten-Telepad +container.slimeling_inventory.name=Schleimling Inventar +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astrominer +entity.creeper_boss.name=Entwickelter Creeper-Boss +entity.entry_pod.name=Eintrittskapsel +entity.entry_pod_venus.name=Venus Eintrittskapsel +entity.grapple_hook.name=Greifhaken +entity.juicer.name=Juicer +entity.landing_balloons.name=Landeballons +entity.projectile_tnt.name=Projektil TNT +entity.rocket_cargo.name=Automatische Güterrakete +entity.rocket_t2.name=Rakete (Stufe 2) +entity.rocket_t3.name=Rakete (Stufe 3) +entity.slimeling.name=Schleimling +entity.sludgeling.name=Schlammling +entity.small_asteroid.name=Kleiner Asteroid +entity.spider_queen.name=Spinnenkönigin +entity.web_shot.name=Spinnennetzschuss +fluid.argon=Argon +fluid.atmosphericgases=Atmosphärische Gase +fluid.bacterialsludge=Bakterieller Schlamm +fluid.carbondioxide=CO2 +fluid.fuel=Treibstoff +fluid.helium=Helium +fluid.hydrogen=Wasserstoff +fluid.liquidargon=Flüssiges Argon +fluid.liquidmethane=Flüssiges Methan +fluid.liquidnitrogen=Flüssiger Stickstoff +fluid.liquidoxygen=Flüssiger Sauerstoff +fluid.methane=Methan +fluid.nitrogen=Stickstoff +fluid.oil=Öl +fluid.oxygen=Sauerstoff +fluid.sulphuricacid=Schwefelsäure +gas.carbondioxide.name=Kohlenstoffdioxid +gas.nitrogen.name=Stickstoff +gas.oxygen.name=Sauerstoff +gc.configgui.astro_miners_max=Maximale Anzahl an Astrominern pro Spieler +gc.configgui.dimension_id_asteroids=Asteroiden - Dimensions-ID +gc.configgui.dimension_id_mars=Mars - Dimensions-ID +gc.configgui.dimension_id_venus=Venus - Dimensions-ID +gc.configgui.disable_aluminum_gen_asteroids=Asteroiden - Aluminiumerz-Generierung deaktivieren +gc.configgui.disable_ambient_lightning=Venus - Blitze deaktivieren +gc.configgui.disable_copper_gen_mars=Mars - Kupfererz-Generierung deaktivieren +gc.configgui.disable_desh_gen_mars=Mars - Desh-Erz-Generierung deaktivieren +gc.configgui.disable_galacticraft_helium=Helium-Registrierung deaktivieren +gc.configgui.disable_ilmenite_gen_asteroids=Asteroiden - Ilmeniterz-Generierung deaktivieren +gc.configgui.disable_iron_gen_asteroids=Asteroiden - Eisenerz-Generierung deaktivieren +gc.configgui.disable_iron_gen_mars=Mars - Eisenerz-Generierung deaktivieren +gc.configgui.disable_tin_gen_mars=Mars - Zinnerz-Generierung deaktivieren +gc.configgui.id_schematic_cargo_rocket=Güterrakete - Schematic-ID +gc.configgui.id_schematic_rocket_t2=Rakete (Stufe 2) - Schematic-ID +gc.configgui.id_schematic_rocket_t3=Rakete (Stufe 3) - Schematic-ID +gc.configgui.launch_controller_all_dims=Start-Controller - Alle Dimensionen +gc.configgui.launch_controller_chunk_load=Start-Controller - Chunkloading +gc.configgui.planets.title=Galacticraft Planets-Konfiguration +gui.button.liquefy.name=Prozess +gui.button.liquefy_stop.name=Stopp +gui.button.recall.name=Zurückrufen +gui.carbon_slot.desc.0=Fragmentierter Kohlenstoff kann hier hin +gui.cargorocket.status.launched.0=Bereits +gui.cargorocket.status.launched.1=gestartet +gui.cargorocket.status.waiting.0=Warte auf +gui.cargorocket.status.waiting.1=Zündung +gui.choose_planet.desc.mars=Bewohnbar#Kein Sauerstoff#Gravitation: 38% +gui.cryogenic.chat.cant_use=Ich kann das nicht für weitere %d Sekunden benutzen +gui.gas_input.desc.0=Versuche, einen Methankanister$hier zu platzieren +gui.gas_input.desc.1=(Vielleicht alternativ$ein Luftventil) +gui.gas_tank.desc.0=Gasspeicher +gui.gas_tank_compressed.desc.0=Gasspeicher (Unter Druck) +gui.hydrogen_input.desc.0=Dies nimmt einen Wasserstofftank +gui.hydrogen_input.desc.1=oder ein Atmosphärenventil auf +gui.launch_controller.advanced=Erweitert +gui.launch_controller.desc.0=Dies ist die spezifische Frequenz$des Start-Controllers +gui.launch_controller.desc.1=Frequenz, zu welcher die Raketen fliegen +gui.launch_controller.desc.2=Ob die Rampe beim Start$enfernt werden soll +gui.launch_controller.desc.3=Wenn die Kriterien erfüllt sind,$wird die Rakete starten +gui.launch_controller.desc.4=Ziele von anderen$Spielern verstecken +gui.launch_controller.owner=Besitzer +gui.liquid_output.desc.2=Flüssiggastank +gui.liquid_tank.desc.0=Flüssigkeitstank +gui.message.address.name=Adresse +gui.message.astro_miner.fail=Diese Basis hat schon einen Astrominer! +gui.message.astro_miner1.fail=Der Andockbereich ist versperrt durch: +gui.message.astro_miner1_a.fail=Die Route des Astrominers wird blockiert durch: +gui.message.astro_miner2.fail=Das wäre ein Astrominer zu viel! +gui.message.astro_miner3.fail=Die Astrominer-Basis wurde entfernt! +gui.message.astro_miner4.fail=Der Astrominer hat keine Energie mehr und kann nicht zur Basis zurückkehren! +gui.message.astro_miner5.fail=Die Route des Astrominers zurück zur Basis ist versperrt! +gui.message.astro_miner6.fail=Der Astrominer ist mit dem Abbauen fertig und wird jetzt aufhören! +gui.message.astro_miner7.fail=Auf einer Raumstation gibt es für den Astrominer nichts zum Abbauen! +gui.message.astro_miner8.fail=Ein zweiter Astrominer wurde auf der selben Basis erkannt, der erste wird nun einfrieren. +gui.message.bubble_exp.name=Blasenerweiterung +gui.message.cargo_full.name=wenn Frachtraum voll ist +gui.message.cargo_unloaded.name=wenn Fracht entladen wurde +gui.message.dest_address.name=Zieladresse +gui.message.dest_frequency.name=Ziel +gui.message.enable_grass.name=Gras aktivieren +gui.message.enable_trees.name=Bäume aktivieren +gui.message.frequency.name=Frequenz +gui.message.fully_fueled.name=wenn vollgetankt wurde +gui.message.grapple.fail=Ich brauche einen Faden, wenn ich den Greifhaken werfen will! +gui.message.grass.name=Gras +gui.message.instant.name=sofort +gui.message.invalid_address.name=Ungültige einzigartige Adresse +gui.message.invalid_freq.name=Ungültige Frequenz +gui.message.invalid_target_address.name=Ungültige Zieladresse +gui.message.launch_when.name=Starte +gui.message.low_energy.name=Zu wenig Energie +gui.message.low_energy_output.name=Geringer Energie Ausgang +gui.message.no_bonemeal.name=Nicht genügend Knochenmehl +gui.message.no_energy.name=Keine Energie! +gui.message.no_saplings.name=Nicht genügend Setzlinge +gui.message.no_seeds.name=Nicht genügend Samen +gui.message.no_valid_blocks.name=Keine gültigen Blöcke in Blase +gui.message.no_water.name=Nicht genügend Wasser +gui.message.not_enough.name=Nicht genug +gui.message.not_enough_energy.name=Nicht genug Energie! +gui.message.not_set.name=Nicht eingestellt +gui.message.one_min.name=1 Minute +gui.message.receiving_active.name=Empfangen aktiviert +gui.message.redstone_sig.name=Redstone-Signal +gui.message.remove_pad.name=Rampe entfernen +gui.message.sending_active.name=Senden aktiviert +gui.message.success.name=Erfolg +gui.message.target_no_energy.name=Ziel hat nicht genügend Energie! +gui.message.telepad_not_found.name=Telepad nicht gefunden! +gui.message.telepad_too_far.name=Ziel zu weit weg! (Max %d) +gui.message.telepad_wrong_dim.name=Ziel ist in der falschen Dimension! +gui.message.ten_sec.name=10 Sekunden +gui.message.terraforming.name=Terraforming +gui.message.thirty_sec.name=30 Sekunden +gui.message.trees.name=Bäume +gui.message.with_atmosphere0.name=auf einem Planeten mit reichlich +gui.message.with_atmosphere1.name=in der Atmosphäre +gui.message.zero_water.name=Kein Wasser! +gui.methane_output.desc.2=Methantank +gui.miner.docked=Angedockt +gui.miner.docking=Dockt an +gui.miner.mined=Abgebaut +gui.miner.mining=Baut ab +gui.miner.offline=Offline +gui.miner.out_of_range=Außer Reichweite +gui.miner.returning=Kehrt zurück +gui.miner.stuck=Steckt fest an: +gui.miner.travelling=Reist +gui.slimeling.button.follow=Folgen +gui.slimeling.button.sit=Sitzen +gui.slimeling.chat.wrong_player=Das ist nicht mein Schleimling! +gui.slimeling.damage=Angriffsschaden +gui.slimeling.following=Folgend +gui.slimeling.food=Lieblingsessen +gui.slimeling.kills=Kills +gui.slimeling.name=Name +gui.slimeling.owner=Besitzer +gui.slimeling.scale=Größe +gui.slimeling.sitting=Sitzend +gui.status.invalid_spout_1.name=Muss auf einer Schwefel-Fontäne +gui.status.invalid_spout_2.name=platziert werden. +gui.status.liquefying.name=Verflüssigen +gui.status.needs_carbon.name=Benötigt Kohlenstoff +gui.status.nogas.name=Kein Gas +gui.status.processing.name=Synthetisieren +gui.status.tankfull.name=Tank voll +gui.status.tanksfull.name=Tanks voll +gui.telepad.desc.0=Dies ist die einzigartige$Adresse des Telepads +gui.telepad.desc.1=Adresse eines anderen Telepads.$Lebewesen werden dort hin gesendet. +gui.terraformer.desc.0=Wassertank +gui.water_bucket_slot.desc=Platziere Wassereimer hier +item.astro_miner.name=Astrominer +item.atmospheric_valve.name=Atmosphärenventil +item.atomic_battery.name=Atombatterie +item.beam_core.name=Strahlenkern +item.bucket_sludge.name=Eimer mit bakteriellem Schlamm +item.bucket_sulphuric_acid.name=Schwefelsäureeimer +item.canister.gas.name=Gas #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Gefüllter Kanister mit Flüssigem Argon +item.canister.liquid_argon.name=Flüssigk. #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Kanister mit Flüssigem Argon +item.canister.liquid_nitrogen.full.name=Gefüllter Kanister mit Flüssigem Stickstoff +item.canister.liquid_nitrogen.name=Flüssigk. #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Kanister mit Flüssigem Stickstoff +item.canister.lox.full.name=Gefüllter Kanister mit Flüssigem Sauerstoff +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Kanister mit Flüssigem Sauerstoff +item.carbon_fragments.name=Fragmentierter Kohlenstoff +item.compressed_desh.name=Gepresstes Desh +item.compressed_titanium.name=Gepresstes Titan +item.desh_axe.name=Desh-Axt +item.desh_boots.name=Desh-Stiefel +item.desh_chestplate.name=Desh-Brustpanzer +item.desh_helmet.name=Desh-Helm +item.desh_hoe.name=Desh-Hacke +item.desh_leggings.name=Desh-Beinschutz +item.desh_pick.name=Desh-Spitzhacke +item.desh_pick_slime.description.name=Kann Creeper-Eier ernten +item.desh_pick_slime.name=Klebrige Desh-Spitzhacke +item.desh_spade.name=Desh-Schaufel +item.desh_stick.name=Desh-Stock +item.desh_sword.name=Desh-Schwert +item.dust_titanium.name=Titan-Staub +item.empty_gas_canister.name=Leerer Gaskanister +item.engine_t2.name=Schwerer Raketenmotor +item.fluid_manip.name=Flüssigkeitsmanipulator +item.grapple.name=Greifhaken +item.heavy_nose_cone.name=Schwere Raketennase +item.ingot_desh.name=Desh-Barren +item.ingot_lead.name=Blei-Barren +item.ingot_titanium.name=Titanbarren +item.key.t2.name=Dungeonschlüssel (Stufe 2) +item.key.t3.name=Dungeonschlüssel (Stufe 3) +item.methane_canister.name=Gefüllter Methangaskanister +item.methane_canister_partial.name=Methangaskanister +item.orion_drive.name=Ionenantrieb +item.prelaunch_checklist.name=Abflug-Checkliste +item.radioisotope_core.name=Radioisotopkern +item.raw_desh.name=Unraffiniertes Desh +item.reinforced_plate_t2.name=Robuste Platte +item.reinforced_plate_t3.name=Robuste Platte +item.rocket_fins_t2.name=Schwere Raketenfinnen +item.rocket_t2.cargo_rocket.name=Güterrakete +item.rocket_t2.t2Rocket.name=Rakete (Stufe 2) +item.rocket_t3.t3Rocket.name=Rakete (Stufe 3) +item.shard_iron.name=Eisenscherbe +item.shard_titanium.name=Titanscherbe +item.shield_controller.description=Der Schild-Controller schützt die Rüstung vor ALLEN Arten von Schaden - auch vor Korrosion an der Atmosphäre! +item.shield_controller.name=Schild-Controller +item.slimeling_cargo.name=Schleimling-Inventarbeutel +item.strange_seed.name=Seltsamer Samen +item.thermal_boots.name=Thermalpolsterstiefel +item.thermal_boots_t2.name=Thermalpolsterstiefel +item.thermal_chestplate.name=Thermalpolsterbrustpanzer +item.thermal_chestplate_t2.name=Thermalpolsterbrustpanzer +item.thermal_cloth.name=Thermalstoff +item.thermal_fabric.name=Isothermes Gewebe +item.thermal_helm.name=Thermalpolsterhelm +item.thermal_helm_t2.name=Thermalpolsterhelm +item.thermal_leggings.name=Thermalpolsterbeinschutz +item.thermal_leggings_t2.name=Thermalpolsterbeinschutz +item.tier2.desc=Stufe 2 +item.tier3.desc=Stufe 3 +item.titanium_axe.name=Titanaxt +item.titanium_boots.name=Titanstiefel +item.titanium_chestplate.name=Titanbrustpanzer +item.titanium_helmet.name=Titanhelm +item.titanium_hoe.name=Titanhacke +item.titanium_leggings.name=Titanbeinschutz +item.titanium_pickaxe.name=Titanspitzhacke +item.titanium_shovel.name=Titanschaufel +item.titanium_sword.name=Titanschwert +item.volcanic_pickaxe.description=Baut einen Bereich von 3x3 in Blickrichtung ab. +item.volcanic_pickaxe.name=Vulkanische Spitzhacke +planet.asteroids=Asteroiden +planet.mars=Mars +schematic.astro_miner.name=Astrominer +schematic.cargo_rocket.name=Automatische Güterrakete +schematic.rocket_t3.name=Rakete (Stufe 3) +tile.asteroids_block.asteroid_rock_0.name=Asteroidengestein +tile.asteroids_block.asteroid_rock_1.name=Asteroidengestein +tile.asteroids_block.asteroid_rock_2.name=Asteroidengestein +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminiumerz +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmeniterz +tile.asteroids_block.ore_iron_asteroids.name=Eisenerz +tile.asteroids_block.asteroid_deco.name=Dunkler Dekorationsblock +tile.asteroids_block.titanium_block.name=Titan-Block +tile.beam_receiver.description=Strahlenempfänger werden mit den Energieein- und ausgängen von Maschinen verbunden, um Energie über Strahlen zu übertragen. +tile.beam_receiver.name=Strahlenempfänger +tile.beam_reflector.description=Strahlenreflektoren werden benutzt, um Energiestrahlen von der Quelle zum Ziel weiterzuleiten. Rechtsklick um das Ziel umzuschalten. +tile.beam_reflector.name=Strahlenreflektor +tile.cavern_vines.description=Kavernöse Weinranken sind für Lebewesen gefährlich. Sie verfangen sich und werden nach oben gezogen. +tile.cavern_vines.name=Kavernöse Weinranken +tile.crashed_probe.name=Abgestürzte Probe +tile.creeper_egg.description=Creeper-Eier können nur in Marsdungeons gefunden werden. Wird eins gesprengt, schlüpft ein kleiner hinterhältiger Creeper aus ihm. +tile.creeper_egg.name=Creeper-Ei +tile.cryo_chamber.description=Kryogene Kammern ermöglichen dem Spieler am Tag zu schlafen und heilen ihn dabei. Sie haben allerdings eine Abklingzeit. +tile.dense_ice.name=Dichtes Eis +tile.electrolyzer.description=Wandelt Wasser in Wasserstoff (für das Methansynthesegerät) und Sauerstoff um. +tile.gas_liquefier.description=Verflüssigt Gase, entweder aus der Atmosphäre oder aus Kanistern. Flüssiges Methan ist ein guter Raketentreibstoff! +tile.geothermal_generator.description=Generiert Energie (mit Schwankungen), wenn auf einer Schwefel-Fontäne platziert. +tile.geothermal_generator.name=Geothermal Generator +tile.hydrogen_pipe.description=Wasserstoffrohre transportieren Wasserstoff von einer Maschine zur anderen. +tile.hydrogen_pipe.name=Wasserstoffrohr +tile.launch_controller.description=Start-Controller können benutzt werden, um das Startverhalten anzupassen, einschließlich Startbedingungen und Ziel für automatische Starts. +tile.mars.coppermars.name=Kupfererz +tile.mars.deshmars.name=Desh-Erz +tile.mars.ironmars.name=Eisenerz +tile.mars.marscobblestone.name=Marsbruchstein +tile.mars.marsdeco.name=Desh-Block +tile.mars.marsdirt.name=Marsunteroberflächengestein +tile.mars.marsdungeon.name=Marsdungeonziegel +tile.mars.marsgrass.name=Marsoberflächengestein +tile.mars.marsstone.name=Marsgestein +tile.mars.tinmars.name=Zinnerz +tile.mars_stairs_cobblestone.name=Marsbruchsteintreppe +tile.mars_stairs_brick.name=Marsdungeonziegeltreppe +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Kryogene Kammer +tile.mars_machine.2.name=Start-Controller +tile.mars_machine.4.name=Gasverflüssiger +tile.mars_machine.5.name=Methansynthesegerät +tile.mars_machine.6.name=Wasser-Elektolysegerät +tile.methane_synthesizer.description=Stellt aus Wasserstoff und Kohlenstoff Methan her, das im Gasverflüssiger weiterverarbeitet werden kann. +tile.miner_base.description=Die Astrominer-Basis ist die Andockstelle für einen Astrominer. Sie ist groß ... versuche, einen 2 x 2 x 2-Würfel mit den Blöcken zu bauen. +tile.miner_base.name=Astrominer-Basis +tile.miner_base_full.name=Astrominer-Basis +tile.slab_gc_half.mars_bricks_slab.name=Marsdungeonziegelstufe +tile.slab_gc_half.mars_slab.name=Marsbruchsteinstufe +tile.slab_gc_half.asteroids_slab.name=Dunkle Dekorationsstufe +tile.slimeling_egg.blue.name=Blaues Schleimling-Ei +tile.slimeling_egg.description=Einmal vom Spieler zerbrochen, werden aus Schleimling-Eiern Haustiere schlüpfen. +tile.slimeling_egg.red.name=Rotes Schleimling-Ei +tile.slimeling_egg.yellow.name=Gelbes Schleimling-Ei +tile.sludge.name=Bakterieller Schlamm +tile.spout.name=Dampffontäne +tile.sulphuric_acid.name=Schwefelsäure +tile.telepad_short.description=Kurzreichweiten-Telepads werden benutzt, um Spieler und andere Lebewesen über kurze Distanzen (250 Blöcke) zu teleportieren, wenn sie mit anderen Telepads verbunden sind. +tile.telepad_short.name=Kurzreichweiten-Telepad +tile.terraformer.description=Terraformer werden benutzt, um etwas Grün auf entfernte Planeten zu bringen. Sie pflanzen Gras und Bäume, wenn sie die richtigen Materialien bekommen. +tile.treasure_t2.description=Schatztruhen der Stufe 2 werden in Marsdungeons erzeugt. Sie sind erst entsperrbar, nachdem der finale Boss besiegt wurde. +tile.treasure_t2.name=Schatztruhe (Stufe 2) +tile.treasure_t3.description=Schatztruhen der Stufe 3 werden zur Zeit nicht benutzt. +tile.treasure_t3.name=Schatztruhe (Stufe 3) +tile.venus.dungeon_brick_venus_1.name=Venus Dungeonziegel I +tile.venus.dungeon_brick_venus_2.name=Venus Dungeonziegel II +tile.venus.venus_ore_aluminum.name=Aluminiumerz +tile.venus.venus_ore_copper.name=Kupfererz +tile.venus.venus_ore_galena.name=Galena-Erz (Blei) +tile.venus.venus_ore_quartz.name=Quartzerz +tile.venus.venus_ore_silicon.name=Siliziumerz +tile.venus.venus_ore_tin.name=Zinnerz +tile.venus.venus_rock_0.name=Weiches Venusgestein +tile.venus.venus_rock_1.name=Hartes Venusgestein +tile.venus.venus_rock_2.name=Venus-Vulkangestein +tile.venus.venus_rock_3.name=Bimsstein +tile.venus.lead_block.name=Blei-Block +tile.venus_rock_scorched.name=Gebranntes Venusgestein +tile.walkway.walkway.description=Gehwege können für Dekorationszwecke benutzt werden und um Blöcke zu verbinden. +tile.walkway.walkway.name=Gehweg +tile.walkway.walkway_pipe.description=Sauerstoffleitungsgehwege werden benutzt, um Sauerstoffleitungen unter einer vollständig begehbaren Oberfläche zu verlegen. +tile.walkway.walkway_pipe.name=Gehweg +tile.walkway.walkway_wire.description=Aluminumkabelgehwege werden benutzt, um Kabel unter einer vollständig begehbaren Oberfläche zu verlegen. +tile.walkway.walkway_wire.name=Gehweg +tile.wall_gc.mars.name=Marsbruchsteinmauer +tile.wall_gc.mars_bricks.name=Marsdungeonziegelmauer +tile.web_torch.web_torch_0.name=Spinnweben-Faden +tile.web_torch.web_torch_1.description=Glowstone-Fackel +tile.web_torch.web_torch_1.name=Spinnweben-Faden diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_gb.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_gb.lang new file mode 100644 index 00000000..07c2f39f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_gb.lang @@ -0,0 +1,354 @@ +checklist.craft_grapple_hook.key=Craft Grappling Hook +checklist.equip_shield_controller.key=Equip Shield Controller +checklist.thermal_padding.key=Equip Thermal Suit +checklist.thermal_padding_t2.key=Equip Tier 2 Thermal Suit +container.crashed_probe.name=Crashed Probe +container.entry_pod.name=Entry Pod +container.geothermal_generator.name=Geothermal Generator +container.launchcontroller.name=Launch Controller +container.mars_lander.name=Landing Balloons +container.short_range_telepad.name=Short Range Telepad +container.slimeling_inventory.name=Slimeling Inventory +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astro Miner +entity.creeper_boss.name=Evolved Creeper Boss +entity.entry_pod.name=Entry Pod +entity.entry_pod_venus.name=Venus Entry Pod +entity.grapple_hook.name=Grappling Hook +entity.juicer.name=Juicer +entity.landing_balloons.name=Landing Balloons +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Cargo Rocket +entity.rocket_t2.name=Tier 2 Rocket +entity.rocket_t3.name=Tier 3 Rocket +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Small Asteroid +entity.spider_queen.name=Spider Queen +entity.web_shot.name=Web Shot +fluid.argon=Argon Gas +fluid.atmosphericgases=Atmospheric Gases +fluid.bacterialsludge=Bacterial Sludge +fluid.carbondioxide=CO2 Gas +fluid.fuel=Fuel +fluid.helium=Helium Gas +fluid.hydrogen=Hydrogen Gas +fluid.liquidargon=Liquid Argon +fluid.liquidmethane=Liquid Methane +fluid.liquidnitrogen=Liquid Nitrogen +fluid.liquidoxygen=Liquid Oxygen +fluid.methane=Methane Gas +fluid.nitrogen=Nitrogen Gas +fluid.oxygen=Oxygen Gas +gas.carbondioxide.name=Carbon Dioxide +gas.nitrogen.name=Nitrogen +gas.oxygen.name=Oxygen +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_aluminum_gen_asteroids=Disable Aluminium Ore Gen (Asteroids) +gc.configgui.disable_ambient_lightning=Disable Lightning (Venus) +gc.configgui.disable_copper_gen_mars=Disable Copper Ore Gen (Mars) +gc.configgui.disable_desh_gen_mars=Disable Desh Ore Gen (Mars) +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.disable_ilmenite_gen_asteroids=Disable Ilmenite Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_asteroids=Disable Iron Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_mars=Disable Iron Ore Gen (Mars) +gc.configgui.disable_tin_gen_mars=Disable Tin Ore Gen (Mars) +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Process +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Recall +gui.carbon_slot.desc.0=Fragmented Carbon can go here +gui.cargorocket.status.launched.0=Already +gui.cargorocket.status.launched.1=Launched +gui.cargorocket.status.waiting.0=Waiting for +gui.cargorocket.status.waiting.1=ignition +gui.choose_planet.desc.mars=Habitable#No Oxygen#Gravity: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) +gui.gas_tank.desc.0=Gas Storage +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) +gui.hydrogen_input.desc.0=This takes a hydrogen tank +gui.hydrogen_input.desc.1=or an Atmospheric Valve +gui.launch_controller.advanced=Advanced +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency +gui.launch_controller.desc.1=Frequency to launch rockets towards +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch +gui.launch_controller.desc.4=Hide destination frequency$from other players +gui.launch_controller.owner=Owner +gui.liquid_output.desc.2=liquefied gas tank +gui.liquid_tank.desc.0=Liquid Tank +gui.message.address.name=Address +gui.message.astro_miner.fail=This base already has an Astro Miner! +gui.message.astro_miner1.fail=The docking area is blocked by: +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: +gui.message.astro_miner2.fail=That would be one Astro Miner too many! +gui.message.astro_miner3.fail=The Astro Miner's base was removed! +gui.message.astro_miner4.fail=The Astro Miner is low on energy and cannot get back to base! +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. +gui.message.bubble_exp.name=Bubble Expanding +gui.message.cargo_full.name=Cargo is Full +gui.message.cargo_unloaded.name=Cargo is Unloaded +gui.message.dest_address.name=Target Address +gui.message.dest_frequency.name=Target +gui.message.enable_grass.name=Enable Grass +gui.message.enable_trees.name=Enable Trees +gui.message.frequency.name=Frequency +gui.message.fully_fueled.name=Fully Fueled +gui.message.grapple.fail=I'll need some string if I want to throw that Grappling Hook! +gui.message.grass.name=Grass +gui.message.instant.name=Instantly +gui.message.invalid_address.name=Invalid Unique Address +gui.message.invalid_freq.name=Invalid Frequency +gui.message.invalid_target_address.name=Invalid Target Address +gui.message.launch_when.name=Auto Launch When +gui.message.low_energy.name=Low energy +gui.message.low_energy_output.name=Low Energy Output +gui.message.no_bonemeal.name=Not Enough Bonemeal +gui.message.no_energy.name=No Energy! +gui.message.no_saplings.name=Not Enough Saplings +gui.message.no_seeds.name=Not Enough Seeds +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble +gui.message.no_water.name=Not Enough Water +gui.message.not_enough.name=Not Enough +gui.message.not_enough_energy.name=Not Enough Energy! +gui.message.not_set.name=Not Set +gui.message.one_min.name=1 Minute +gui.message.receiving_active.name=Receiving Active +gui.message.redstone_sig.name=Redstone Signal +gui.message.remove_pad.name=Remove Pad On Launch +gui.message.sending_active.name=Sending Active +gui.message.success.name=Success +gui.message.target_no_energy.name=Target doesn't have enough Energy! +gui.message.telepad_not_found.name=Telepad Not Found! +gui.message.telepad_too_far.name=Target too far! (Max %d) +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! +gui.message.ten_sec.name=10 Seconds +gui.message.terraforming.name=Terraforming +gui.message.thirty_sec.name=30 Seconds +gui.message.trees.name=Trees +gui.message.with_atmosphere0.name=on a planet with plenty of +gui.message.with_atmosphere1.name=in the atmosphere +gui.message.zero_water.name=No water! +gui.methane_output.desc.2=methane tank +gui.miner.docked=Docked +gui.miner.docking=Docking +gui.miner.mined=Mined +gui.miner.mining=Mining +gui.miner.offline=Offline +gui.miner.out_of_range=Out of range +gui.miner.returning=Returning +gui.miner.stuck=Stuck at: +gui.miner.travelling=Travelling +gui.slimeling.button.follow=Follow +gui.slimeling.button.sit=Sit +gui.slimeling.chat.wrong_player=This isn't my Slimeling! +gui.slimeling.damage=Attack Damage +gui.slimeling.following=Following +gui.slimeling.food=Favourite food +gui.slimeling.kills=Kills +gui.slimeling.name=Name +gui.slimeling.owner=Owner +gui.slimeling.scale=Scale +gui.slimeling.sitting=Sitting +gui.status.invalid_spout_1.name=Must be placed on +gui.status.invalid_spout_2.name=valid sulphur spout +gui.status.liquefying.name=Liquefying +gui.status.needs_carbon.name=Needs carbon +gui.status.nogas.name=No gas +gui.status.processing.name=Synthesizing +gui.status.tankfull.name=Tank full +gui.status.tanksfull.name=Tanks full +gui.telepad.desc.0=This is the Telepad's$unique address +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. +gui.terraformer.desc.0=Water Tank +gui.water_bucket_slot.desc=Place water buckets here +item.astro_miner.name=Astro Miner +item.atmospheric_valve.name=Atmospheric Valve +item.atomic_battery.name=Atomic Battery +item.beam_core.name=Beam Core +item.bucket_sludge.name=Bacterial Sludge Bucket +item.bucket_sulphuric_acid.name=Sulphuric Acid Bucket +item.canister.gas.name=Gas #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Canister of Liquid Argon +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen +item.canister.liquid_nitrogen.name=Liquid #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen +item.canister.lox.full.name=Filled Canister of Liquid Oxygen +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Canister of Liquid Oxygen +item.carbon_fragments.name=Fragmented Carbon +item.compressed_desh.name=Compressed Desh +item.compressed_titanium.name=Compressed Titanium +item.desh_axe.name=Desh Axe +item.desh_boots.name=Desh Boots +item.desh_chestplate.name=Desh Chestplate +item.desh_helmet.name=Desh Helmet +item.desh_hoe.name=Desh Hoe +item.desh_leggings.name=Desh Leggings +item.desh_pick.name=Desh Pickaxe +item.desh_pick_slime.description.name=Can harvest Creeper eggs +item.desh_pick_slime.name=Sticky Desh Pickaxe +item.desh_spade.name=Desh Shovel +item.desh_stick.name=Desh Stick +item.desh_sword.name=Desh Sword +item.empty_gas_canister.name=Empty Gas Canister +item.engine_t2.name=Heavy Rocket Engine +item.fluid_manip.name=Fluid Manipulator +item.grapple.name=Grappling Hook +item.heavy_nose_cone.name=Heavy Nose Cone +item.ingot_desh.name=Desh Ingot +item.ingot_lead.name=Lead Ingot +item.ingot_titanium.name=Titanium Ingot +item.key.t2.name=Tier 2 Dungeon Key +item.key.t3.name=Tier 3 Dungeon Key +item.methane_canister.name=Filled Methane Gas Canister +item.methane_canister_partial.name=Methane Gas Canister +item.orion_drive.name=Orion Drive +item.prelaunch_checklist.name=Pre-Launch Checklist +item.radioisotope_core.name=Radioisotope Core +item.raw_desh.name=Unrefined Desh +item.reinforced_plate_t2.name=Heavy-Duty Plate +item.reinforced_plate_t3.name=Heavy-Duty Plate +item.rocket_fins_t2.name=Heavy Rocket Fins +item.rocket_t2.cargo_rocket.name=Cargo Rocket +item.rocket_t2.t2Rocket.name=Tier 2 Rocket +item.rocket_t3.t3Rocket.name=Tier 3 Rocket +item.shard_iron.name=Iron Shard +item.shard_titanium.name=Titanium Shard +item.shield_controller.description=Shield Controller protects armor from ALL forms of damage - including atmospheric corrosion! +item.shield_controller.name=Shield Controller +item.slimeling_cargo.name=Slimeling Inventory Bag +item.strange_seed.name=Strange Seed +item.thermal_boots.name=Cosy Socks +item.thermal_boots_t2.name=Isothermal Socks +item.thermal_chestplate.name=Thermal Chestpiece +item.thermal_chestplate_t2.name=Isothermal Chestpiece +item.thermal_cloth.name=Thermal Cloth +item.thermal_fabric.name=Isothermal Fabric +item.thermal_helm.name=Thermal Cap +item.thermal_helm_t2.name=Isothermal Cap +item.thermal_leggings.name=Thermal Leggings +item.thermal_leggings_t2.name=Isothermal Leggings +item.tier2.desc=Tier 2 +item.tier3.desc=Tier 3 +item.titanium_axe.name=Titanium Axe +item.titanium_boots.name=Titanium Boots +item.titanium_chestplate.name=Titanium Chestplate +item.titanium_helmet.name=Titanium Helmet +item.titanium_hoe.name=Titanium Hoe +item.titanium_leggings.name=Titanium Leggings +item.titanium_pickaxe.name=Titanium Pickaxe +item.titanium_shovel.name=Titanium Shovel +item.titanium_sword.name=Titanium Sword +item.volcanic_pickaxe.description=Mines a 3x3 area depending on which direction you are facing +item.volcanic_pickaxe.name=Volcanic Pickaxe +planet.asteroids=Asteroids +planet.mars=Mars +schematic.astro_miner.name=Astro Miner +schematic.cargo_rocket.name=Automatic Cargo Rocket +schematic.rocket_t3.name=Tier 3 Rocket +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminium Ore +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore +tile.asteroids_block.asteroid_deco.name=Dark Decoration Block +tile.asteroids_block.titanium_block.name=Titanium Block +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. +tile.beam_receiver.name=Energy Beam Receiver +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. +tile.beam_reflector.name=Energy Beam Reflector +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. +tile.cavern_vines.name=Cavernous Vines +tile.crashed_probe.name=Crashed Probe +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. +tile.creeper_egg.name=Creeper Egg +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. +tile.dense_ice.name=Dense Ice +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! +tile.geothermal_generator.description=When placed on a valid sulphur vapour spout, generates energy at an oscillating rate +tile.geothermal_generator.name=Geothermal Generator +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. +tile.hydrogen_pipe.name=Hydrogen Pipe +tile.launch_controller.description=Launch Controllers are used to customise launch behaviour, including launch criteria and destination launch pad for auto launches. +tile.mars.coppermars.name=Copper Ore +tile.mars.deshmars.name=Desh Ore +tile.mars.ironmars.name=Iron Ore +tile.mars.marscobblestone.name=Mars Cobblestone +tile.mars.marsdeco.name=Block of Desh +tile.mars.marsdirt.name=Mars Regolith +tile.mars.marsdungeon.name=Mars Dungeon Brick +tile.mars.marsgrass.name=Mars Fine Regolith +tile.mars.marsstone.name=Mars Stone +tile.mars.tinmars.name=Tin Ore +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Cryogenic Chamber +tile.mars_machine.2.name=Launch Controller +tile.mars_machine.4.name=Gas Liquefier +tile.mars_machine.5.name=Methane Synthesizer +tile.mars_machine.6.name=Water Electrolyzer +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. +tile.miner_base.name=Astro Miner Base +tile.miner_base_full.name=Astro Miner Base +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab +tile.slab_gc_half.asteroids_slab.name=Dark Decoration Slab +tile.slimeling_egg.blue.name=Blue Slimeling Egg +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. +tile.slimeling_egg.red.name=Red Slimeling Egg +tile.slimeling_egg.yellow.name=Yellow Slimeling Egg +tile.sludge.name=Bacterial Sludge +tile.spout.name=Vapour Spout +tile.sulphuric_acid.name=Sulphuric Acid +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. +tile.telepad_short.name=Short Range Telepad +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. +tile.treasure_t2.name=Tier 2 Treasure Chest +tile.treasure_t3.description=Tier 3 Treasure Chests will generate in Venus Dungeons. They are unlockable after defeating the final boss. +tile.treasure_t3.name=Tier 3 Treasure Chest +tile.venus.dungeon_brick_venus_1.name=Venus Dungeon Brick I +tile.venus.dungeon_brick_venus_2.name=Venus Dungeon Brick II +tile.venus.venus_ore_aluminum.name=Aluminium Ore +tile.venus.venus_ore_copper.name=Copper Ore +tile.venus.venus_ore_galena.name=Galena Ore +tile.venus.venus_ore_quartz.name=Quartz Ore +tile.venus.venus_ore_silicon.name=Silicon Ore +tile.venus.venus_ore_tin.name=Tin Ore +tile.venus.venus_rock_0.name=Venus Soft Rock +tile.venus.venus_rock_1.name=Venus Hard Rock +tile.venus.venus_rock_2.name=Venus Volcanic Rock +tile.venus.venus_rock_3.name=Pumice +tile.venus.lead_block.name=Lead Block +tile.venus_rock_scorched.name=Scorched Venus Rock +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. +tile.walkway.walkway.name=Walkway +tile.walkway.walkway_pipe.description=Fluid Pipe Walkways are used for running pipes underneath a fully walkable surface. +tile.walkway.walkway_pipe.name=Walkway +tile.walkway.walkway_wire.description=Aluminium Wire Walkways are used for running wire underneath a fully walkable surface. +tile.walkway.walkway_wire.name=Walkway +tile.wall_gc.mars.name=Mars Cobblestone Wall +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall +tile.web_torch.web_torch_0.name=Web String +tile.web_torch.web_torch_1.description=Glowstone Torch +tile.web_torch.web_torch_1.name=Web String \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_us.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_us.lang new file mode 100644 index 00000000..a0411607 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_us.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=Craft Grapple Hook +checklist.equip_shield_controller.key=Equip Shield Controller +checklist.thermal_padding.key=Equip Thermal Suit +checklist.thermal_padding_t2.key=Equip Tier 2 Thermal Suit +container.crashed_probe.name=Crashed Probe +container.entry_pod.name=Entry Pod +container.geothermal_generator.name=Geothermal Generator +container.launchcontroller.name=Launch Controller +container.mars_lander.name=Landing Balloons +container.solar_array_controller.name=Solar Array Controller +container.short_range_telepad.name=Short Range Telepad +container.slimeling_inventory.name=Slimeling Inventory +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astro Miner +entity.creeper_boss.name=Evolved Creeper Boss +entity.entry_pod.name=Entry Pod +entity.entry_pod_venus.name=Venus Entry Pod +entity.grapple_hook.name=Grapple Hook +entity.juicer.name=Juicer +entity.landing_balloons.name=Landing Balloons +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Cargo Rocket +entity.rocket_t2.name=Tier 2 Rocket +entity.rocket_t3.name=Tier 3 Rocket +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Small Asteroid +entity.spider_queen.name=Spider Queen +entity.web_shot.name=Web Shot +fluid.argon=Argon Gas +fluid.atmosphericgases=Atmospheric Gases +fluid.bacterialsludge=Bacterial Sludge +fluid.carbondioxide=CO2 Gas +fluid.fuel=Fuel +fluid.helium=Helium Gas +fluid.hydrogen=Hydrogen Gas +fluid.liquidargon=Liquid Argon +fluid.liquidmethane=Liquid Methane +fluid.liquidnitrogen=Liquid Nitrogen +fluid.liquidoxygen=Liquid Oxygen +fluid.methane=Methane Gas +fluid.nitrogen=Nitrogen Gas +fluid.oil=Oil +fluid.oxygen=Oxygen Gas +fluid.sulphuricacid=Sulphuric Acid +gas.carbondioxide.name=Carbon Dioxide +gas.nitrogen.name=Nitrogen +gas.oxygen.name=Oxygen +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.dimension_id_venus=Venus Dimension ID +gc.configgui.disable_aluminum_gen_asteroids=Disable Aluminum Ore Gen (Asteroids) +gc.configgui.disable_ambient_lightning=Disable Lightning (Venus) +gc.configgui.disable_copper_gen_mars=Disable Copper Ore Gen (Mars) +gc.configgui.disable_desh_gen_mars=Disable Desh Ore Gen (Mars) +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.disable_small_asteroids=Disable Small Asteroid spawning (Asteroids) +gc.configgui.disable_ilmenite_gen_asteroids=Disable Ilmenite Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_asteroids=Disable Iron Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_mars=Disable Iron Ore Gen (Mars) +gc.configgui.disable_tin_gen_mars=Disable Tin Ore Gen (Mars) +gc.configgui.disable_venus_aluminum_gen=Disable Aluminum Ore Gen (Venus) +gc.configgui.disable_venus_copper_gen=Disable Copper Ore Gen (Venus) +gc.configgui.disable_venus_galena_gen=Disable Galena Ore Gen (Venus) +gc.configgui.disable_venus_quartz_gen=Disable Quartz Ore Gen (Venus) +gc.configgui.disable_venus_silicon_gen=Disable Silicon Ore Gen (Venus) +gc.configgui.disable_venus_solar_gen=Disable Solar Ore Gen (Venus) +gc.configgui.disable_venus_tin_gen=Disable Tin Ore Gen (Venus) +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.add_blacklist.name=Blacklist +gui.button.add_entity.name=Add Entity +gui.button.add_player.name=Add Player +gui.button.add_whitelist.name=Whitelist +gui.button.edit_blacklist.name=Edit Blacklist +gui.button.edit_priority.name=Edit Priority +gui.button.edit_whitelist.name=Edit Whitelist +gui.button.liquefy.name=Process +gui.button.liquefy_stop.name=Stop +gui.button.never_fire_team.name=Never fire at space race team +gui.button.recall.name=Recall +gui.button.remove_selected.name=Remove Selected +gui.carbon_slot.desc.0=Fragmented Carbon can go here +gui.cargorocket.status.launched.0=Already +gui.cargorocket.status.launched.1=Launched +gui.cargorocket.status.waiting.0=Waiting for +gui.cargorocket.status.waiting.1=ignition +gui.choose_planet.desc.mars=Habitable#No Oxygen#Gravity: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) +gui.gas_tank.desc.0=Gas Storage +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) +gui.hydrogen_input.desc.0=This takes a hydrogen tank +gui.hydrogen_input.desc.1=or an Atmospheric Valve +gui.launch_controller.advanced=Advanced +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency +gui.launch_controller.desc.1=Frequency to launch rockets towards +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch +gui.launch_controller.desc.4=Hide destination frequency$from other players +gui.launch_controller.owner=Owner +gui.liquid_output.desc.2=liquefied gas tank +gui.liquid_tank.desc.0=Liquid Tank +gui.message.address.name=Address +gui.message.astro_miner.fail=This base already has an Astro Miner! +gui.message.astro_miner1.fail=The docking area is blocked by: +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: +gui.message.astro_miner1_b.fail=Protected Area! +gui.message.astro_miner2.fail=That would be one Astro Miner too many! +gui.message.astro_miner3.fail=The Astro Miner's base was removed! +gui.message.astro_miner4.fail=The Astro Miner is low on energy and cannot get back to base! +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. +gui.message.blacklist_mode.name=Blacklist Mode +gui.message.bubble_exp.name=Bubble Expanding +gui.message.cargo_full.name=Cargo is Full +gui.message.cargo_unloaded.name=Cargo is Unloaded +gui.message.connected_solar_controller.name=%d attached (16 block range) +gui.message.dest_address.name=Target Address +gui.message.dest_frequency.name=Target +gui.message.enable_grass.name=Enable Grass +gui.message.enable_trees.name=Enable Trees +gui.message.enter_entity.name=Enter entity name/id +gui.message.enter_player.name=Enter player name +gui.message.frequency.name=Frequency +gui.message.fully_fueled.name=Fully Fueled +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! +gui.message.grass.name=Grass +gui.message.instant.name=Instantly +gui.message.invalid_address.name=Invalid Unique Address +gui.message.invalid_freq.name=Invalid Frequency +gui.message.invalid_target_address.name=Invalid Target Address +gui.message.launch_when.name=Auto Launch When +gui.message.low_energy.name=Low energy +gui.message.low_energy_output.name=Low Energy Output +gui.message.no_bonemeal.name=Not Enough Bonemeal +gui.message.no_energy.name=No Energy! +gui.message.no_saplings.name=Not Enough Saplings +gui.message.no_seeds.name=Not Enough Seeds +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble +gui.message.no_water.name=Not Enough Water +gui.message.not_enough.name=Not Enough +gui.message.not_enough_energy.name=Not Enough Energy! +gui.message.not_set.name=Not Set +gui.message.one_min.name=1 Minute +gui.message.player.name=Player +gui.message.priority_closest.name=Closest +gui.message.priority_health_high.name=Highest Health +gui.message.priority_health_low.name=Lowest Health +gui.message.priority_low.name=Priority (Lowest first) +gui.message.receiving_active.name=Receiving Active +gui.message.redstone_sig.name=Redstone Signal +gui.message.remove_pad.name=Remove Pad On Launch +gui.message.sending_active.name=Sending Active +gui.message.success.name=Success +gui.message.target_meteors.name=Target Meteors +gui.message.target_no_energy.name=Target doesn't have enough Energy! +gui.message.telepad_not_found.name=Telepad Not Found! +gui.message.telepad_too_far.name=Target too far! (Max %d) +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! +gui.message.telepad_target_disabled.name=Target is disabled +gui.message.ten_sec.name=10 Seconds +gui.message.terraforming.name=Terraforming +gui.message.thirty_sec.name=30 Seconds +gui.message.trees.name=Trees +gui.message.with_atmosphere0.name=on a planet with plenty of +gui.message.with_atmosphere1.name=in the atmosphere +gui.message.zero_water.name=No water! +gui.methane_output.desc.2=methane tank +gui.miner.docked=Docked +gui.miner.docking=Docking +gui.miner.mined=Mined +gui.miner.mining=Mining +gui.miner.offline=Offline +gui.miner.out_of_range=Out of range +gui.miner.returning=Returning +gui.miner.stuck=Stuck at: +gui.miner.travelling=Traveling +gui.slimeling.button.follow=Follow +gui.slimeling.button.sit=Sit +gui.slimeling.chat.wrong_player=This isn't my Slimeling! +gui.slimeling.damage=Attack Damage +gui.slimeling.following=Following +gui.slimeling.food=Favorite food +gui.slimeling.kills=Kills +gui.slimeling.name=Name +gui.slimeling.owner=Owner +gui.slimeling.scale=Scale +gui.slimeling.sitting=Sitting +gui.status.invalid_spout_1.name=Must be placed on +gui.status.invalid_spout_2.name=valid sulfur spout +gui.status.liquefying.name=Liquefying +gui.status.needs_carbon.name=Needs carbon +gui.status.nogas.name=No gas +gui.status.processing.name=Synthesizing +gui.status.tankfull.name=Tank full +gui.status.tanksfull.name=Tanks full +gui.telepad.desc.0=This is the Telepad's$unique address +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. +gui.terraformer.desc.0=Water Tank +gui.water_bucket_slot.desc=Place water buckets here +item.astro_miner.name=Astro Miner +item.atmospheric_valve.name=Atmospheric Valve +item.atomic_battery.name=Atomic Battery +item.beam_core.name=Beam Core +item.bucket_sludge.name=Bacterial Sludge Bucket +item.bucket_sulphuric_acid.name=Sulfuric Acid Bucket +item.canister.gas.name=Gas #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Canister of Liquid Argon +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen +item.canister.liquid_nitrogen.name=Liquid #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen +item.canister.lox.full.name=Filled Canister of Liquid Oxygen +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Canister of Liquid Oxygen +item.carbon_fragments.name=Fragmented Carbon +item.compressed_desh.name=Compressed Desh +item.compressed_titanium.name=Compressed Titanium +item.desh_axe.name=Desh Axe +item.desh_boots.name=Desh Boots +item.desh_chestplate.name=Desh Chestplate +item.desh_helmet.name=Desh Helmet +item.desh_hoe.name=Desh Hoe +item.desh_leggings.name=Desh Leggings +item.desh_pick.name=Desh Pickaxe +item.desh_pick_slime.description.name=Can harvest Creeper eggs +item.desh_pick_slime.name=Sticky Desh Pickaxe +item.desh_spade.name=Desh Shovel +item.desh_stick.name=Desh Stick +item.desh_sword.name=Desh Sword +item.dust_titanium.name=Titanium Dust +item.empty_gas_canister.name=Empty Gas Canister +item.engine_t2.name=Heavy Rocket Engine +item.fluid_manip.name=Fluid Manipulator +item.grapple.name=Grapple +item.heavy_nose_cone.name=Heavy Nose Cone +item.ingot_desh.name=Desh Ingot +item.ingot_lead.name=Lead Ingot +item.ingot_titanium.name=Titanium Ingot +item.key.t2.name=Tier 2 Dungeon Key +item.key.t3.name=Tier 3 Dungeon Key +item.methane_canister.name=Filled Methane Gas Canister +item.methane_canister_partial.name=Methane Gas Canister +item.orion_drive.name=Orion Drive +item.prelaunch_checklist.name=Pre-Launch Checklist +item.radioisotope_core.name=Radioisotope Core +item.raw_desh.name=Unrefined Desh +item.reinforced_plate_t2.name=Heavy-Duty Plate +item.reinforced_plate_t3.name=Heavy-Duty Plate +item.rocket_fins_t2.name=Heavy Rocket Fins +item.rocket_t2.cargo_rocket.name=Cargo Rocket +item.rocket_t2.t2Rocket.name=Tier 2 Rocket +item.rocket_t3.t3Rocket.name=Tier 3 Rocket +item.shard_iron.name=Iron Shard +item.shard_titanium.name=Titanium Shard +item.shield_controller.description=Shield Controller protects armor from ALL forms of damage - including atmospheric corrosion! +item.shield_controller.name=Shield Controller +item.slimeling_cargo.name=Slimeling Inventory Bag +item.solar_dust.name=Solar Dust +item.solar_module_2.name=Solar Array Panel +item.strange_seed.name=Strange Seed +item.thermal_boots.name=Thermal Padding Boots +item.thermal_boots_t2.name=Isothermal Boots +item.thermal_chestplate.name=Thermal Padding Chestpiece +item.thermal_chestplate_t2.name=Isothermal Chestpiece +item.thermal_cloth.name=Thermal Cloth +item.thermal_fabric.name=Isothermal Fabric +item.thermal_helm.name=Thermal Padding Helm +item.thermal_helm_t2.name=Isothermal Helm +item.thermal_leggings.name=Thermal Padding Leggings +item.thermal_leggings_t2.name=Isothermal Leggings +item.thin_solar_wafer.name=Solar Array Wafer +item.tier2.desc=Tier 2 +item.tier3.desc=Tier 3 +item.titanium_axe.name=Titanium Axe +item.titanium_boots.name=Titanium Boots +item.titanium_chestplate.name=Titanium Chestplate +item.titanium_helmet.name=Titanium Helmet +item.titanium_hoe.name=Titanium Hoe +item.titanium_leggings.name=Titanium Leggings +item.titanium_pickaxe.name=Titanium Pickaxe +item.titanium_shovel.name=Titanium Shovel +item.titanium_sword.name=Titanium Sword +item.volcanic_pickaxe.description=Mines a 3x3 area depending on which direction you are facing +item.volcanic_pickaxe.name=Volcanic Pickaxe +planet.asteroids=Asteroids +planet.mars=Mars +schematic.astro_miner.name=Astro Miner +schematic.cargo_rocket.name=Automatic Cargo Rocket +schematic.rocket_t3.name=Tier 3 Rocket +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminum Ore +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore +tile.asteroids_block.asteroid_deco.name=Dark Decoration Block +tile.asteroids_block.titanium_block.name=Titanium Block +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. +tile.beam_receiver.name=Energy Beam Receiver +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. +tile.beam_reflector.name=Energy Beam Reflector +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. +tile.cavern_vines.name=Cavernous Vines +tile.crashed_probe.name=Crashed Probe +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. +tile.creeper_egg.name=Creeper Egg +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. +tile.dense_ice.name=Dense Ice +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! +tile.geothermal_generator.description=When placed on a valid sulfur vapor spout, generates energy at an oscillating rate +tile.geothermal_generator.name=Geothermal Generator +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. +tile.hydrogen_pipe.name=Hydrogen Pipe +tile.launch_controller.description=Launch Controllers are used to customize launch behavior, including launch criteria and destination launch pad for auto launches. +tile.laser_turret.name=Laser Turret +tile.laser_turret.description=Can target meteors, players, and mobs +tile.mars.coppermars.name=Copper Ore +tile.mars.deshmars.name=Desh Ore +tile.mars.ironmars.name=Iron Ore +tile.mars.marscobblestone.name=Mars Cobblestone +tile.mars.marsdeco.name=Block of Desh +tile.mars.marsdirt.name=Mars Regolith +tile.mars.marsdungeon.name=Mars Dungeon Brick +tile.mars.marsgrass.name=Mars Fine Regolith +tile.mars.marsstone.name=Mars Stone +tile.mars.tinmars.name=Tin Ore +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Cryogenic Chamber +tile.mars_machine.2.name=Launch Controller +tile.mars_machine.4.name=Gas Liquefier +tile.mars_machine.5.name=Methane Synthesizer +tile.mars_machine.6.name=Water Electrolyzer +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. +tile.miner_base.name=Astro Miner Base +tile.miner_base_full.name=Astro Miner Base +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab +tile.slab_gc_half.asteroids_slab.name=Dark Decoration Slab +tile.slimeling_egg.blue.name=Blue Slimeling Egg +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. +tile.slimeling_egg.red.name=Red Slimeling Egg +tile.slimeling_egg.yellow.name=Yellow Slimeling Egg +tile.sludge.name=Bacterial Sludge +tile.solar_array_controller.name=Solar Array Controller +tile.solar_array_controller.description=Connect Solar Array Modules to this block to provide power. Most effective on space stations. +tile.solar_array_module.name=Solar Array Module +tile.solar_array_module.description=Connect several of these blocks to a Solar Array Controller to provide power. Most effective on space stations. +tile.spout.name=Vapor Spout +tile.sulphuric_acid.name=Sulfuric Acid +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. +tile.telepad_short.name=Short Range Telepad +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. +tile.treasure_t2.name=Tier 2 Treasure Chest +tile.treasure_t3.description=Tier 3 Treasure Chests will generate in Venus Dungeons. They are unlockable after defeating the final boss. +tile.treasure_t3.name=Tier 3 Treasure Chest +tile.venus.dungeon_brick_venus_1.name=Venus Dungeon Brick I +tile.venus.dungeon_brick_venus_2.name=Venus Dungeon Brick II +tile.venus.venus_ore_aluminum.name=Aluminum Ore +tile.venus.venus_ore_copper.name=Copper Ore +tile.venus.venus_ore_galena.name=Galena Ore +tile.venus.venus_ore_quartz.name=Quartz Ore +tile.venus.venus_ore_silicon.name=Silicon Ore +tile.venus.venus_ore_solar.name=Solar Ore +tile.venus.venus_ore_tin.name=Tin Ore +tile.venus.venus_rock_0.name=Venus Soft Rock +tile.venus.venus_rock_1.name=Venus Hard Rock +tile.venus.venus_rock_2.name=Venus Volcanic Rock +tile.venus.venus_rock_3.name=Pumice +tile.venus.lead_block.name=Lead Block +tile.venus_rock_scorched.name=Scorched Venus Rock +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. +tile.walkway.walkway.name=Walkway +tile.walkway.walkway_pipe.description=Fluid Pipe Walkways are used for running pipes underneath a fully walkable surface. +tile.walkway.walkway_pipe.name=Walkway +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully walkable surface. +tile.walkway.walkway_wire.name=Walkway +tile.wall_gc.mars.name=Mars Cobblestone Wall +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall +tile.web_torch.web_torch_0.name=Web String +tile.web_torch.web_torch_1.description=Glowstone Torch +tile.web_torch.web_torch_1.name=Web String +achievement.mars=To Mars! +achievement.mars.desc=Take a Tier 2 Rocket to Mars! +achievement.asteroids=To The Asteroid Belt +achievement.asteroids.desc=Take a Tier 3 Rocket to The Asteroid Belt! +achievement.venus=To Venus! +achievement.venus.desc=Take a Tier 3 Rocket to Venus! diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/es_es.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/es_es.lang new file mode 100644 index 00000000..f0751ddd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/es_es.lang @@ -0,0 +1,326 @@ +container.entry_pod.name=Cápsula de entrada +container.launchcontroller.name=Controlador de lanzamiento +container.mars_lander.name=Globos de aterrizaje +container.short_range_telepad.name=Teletransportador de corto alcance +container.tile_terraformer.name=Terraformador +dimension.mars.name=Marte +entity.astro_miner.name=AstroMinador +entity.creeper_boss.name=Jefe creeper evolucionado +entity.entry_pod.name=Cápsula de entrada +entity.grapple_hook.name=Gancho +entity.landing_balloons.name=Globos de aterrizaje +entity.projectile_tnt.name=Proyectil TNT +entity.rocket_cargo.name=Cohete de Carga +entity.rocket_t2.name=Cohete de Nivel 2 +entity.rocket_t3.name=Cohete de Nivel 3 +entity.slimeling.name=Slimeling +entity.sludgeling.name=Gusano de lodo +entity.small_asteroid.name=Asteroide pequeño +fluid.argon=Argón +fluid.atmosphericgases=Gases atmosféricos +fluid.bacterialsludge=Lodo bacteriano +fluid.carbondioxide=Dióxido de carbono +fluid.fuel=Combustible +fluid.helium=Helio +fluid.hydrogen=Hidrógeno +fluid.liquidargon=Argón líquido +fluid.liquidmethane=Metano líquido +fluid.liquidnitrogen=Nítrogeno líquido +fluid.liquidoxygen=Oxígeno líquido +fluid.methane=Metano +fluid.nitrogen=Nítrogeno +fluid.oxygen=Oxígeno +gas.carbondioxide.name=Dióxido de carbono +gas.nitrogen.name=Nitrógeno +gas.oxygen.name=Oxígeno +gc.configgui.astro_miners_max=Número máximo de AstoMinadores por jugador +gc.configgui.dimension_id_asteroids=ID de la dimensión Asteroides +gc.configgui.dimension_id_mars=ID de la dimensión de Marte +gc.configgui.disable_galacticraft_helium=Desactivar el registro del gas helio +gc.configgui.id_schematic_cargo_rocket=ID del plano del cohete de carga +gc.configgui.id_schematic_rocket_t2=ID del plano del cohete nivel 2 +gc.configgui.id_schematic_rocket_t3=ID del plano del cohete nivel 3 +gc.configgui.launch_controller_all_dims=Controlador de lanzamiento en todas las dimensiones +gc.configgui.launch_controller_chunk_load=Controlador de lanzamiento mantiene los chunks cargados +gc.configgui.planets.title=Configuración de Galacticraft Planets +gui.button.liquefy.name=Procesar +gui.button.liquefy_stop.name=Parar +gui.button.recall.name=LLamar +gui.carbon_slot.desc.0=Aquí puede ir el carbón fragmentado +gui.cargorocket.status.launched.0=Preparado +gui.cargorocket.status.launched.1=Despegado +gui.cargorocket.status.waiting.0=Esperando por +gui.cargorocket.status.waiting.1=Ignición +gui.choose_planet.desc.mars=Habitable#Sin oxígeno#Gravedad: 38% +gui.cryogenic.chat.cant_use=No puedo usar esto hasta dentro de %d segundos +gui.gas_input.desc.0=Trata de colocar un$bote de metano aquí +gui.gas_input.desc.1=(Como alternativa,$una válvula atmosférica) +gui.gas_tank.desc.0=Depósito de gas +gui.gas_tank_compressed.desc.0=Depósito de gas (comprimido) +gui.hydrogen_input.desc.0=Esto consume un bote de hidrógeno +gui.hydrogen_input.desc.1=o una válvula atmosférica +gui.launch_controller.desc.0=Ésta es la frecuencia única del$controlador de lanzamiento +gui.launch_controller.desc.1=Frecuencia donde lanzar el cohete +gui.launch_controller.desc.2=Si la plataforma de lanzamiento debe$ser eliminada o lanzada +gui.launch_controller.desc.3=Cuando esto se cumpla,$se lanzará el cohete +gui.launch_controller.desc.4=Oculta el destino de la frecuencia$a otros jugadores +gui.liquid_output.desc.2=bote de gas licuado +gui.liquid_tank.desc.0=Tanque de líquido +gui.message.address.name=Dirección +gui.message.astro_miner.fail=¡Esta base ya cuenta con un AstroMinador! +gui.message.astro_miner1.fail=El area de embarque está bloqueada por: +gui.message.astro_miner1_a.fail=La ruta del AstroMinador está bloqueada por: +gui.message.astro_miner2.fail=¡Eso sería demasiado para un AstroMinador! +gui.message.astro_miner3.fail=¡La base del AstroMinador ha sido eliminada! +gui.message.astro_miner4.fail=¡El Astro Minador ha agotado su energía y no puede volver a la base! +gui.message.astro_miner5.fail=La ruta del AstroMinador de esta base parece estar bloqueada +gui.message.astro_miner6.fail=¡El AstroMinador ha finalizado de minar el area, y ahora se detendrá! +gui.message.astro_miner7.fail=¡No hay nada que minar en una estación espacial para un AstroMinador! +gui.message.astro_miner8.fail=Un segundo AstroMinador fue detectado en la misma base, el primero se detendrá +gui.message.bubble_exp.name=Burbuja expandiéndose +gui.message.cargo_full.name=Carga llena +gui.message.cargo_unloaded.name=Carga vacía +gui.message.dest_address.name=Dirección de destino +gui.message.dest_frequency.name=Frecuencia de destino +gui.message.enable_grass.name=Habilitar hierba +gui.message.enable_trees.name=Habilitar árboles +gui.message.frequency.name=Frecuencia +gui.message.fully_fueled.name=Lleno de combustible +gui.message.grapple.fail=¡Necesitaré algo de cuerda si quiero lanzar ese gancho de amarre! +gui.message.grass.name=Hierba +gui.message.instant.name=Instantáneamente +gui.message.invalid_address.name=Frecuencia única inválida +gui.message.invalid_freq.name=Frecuencia inválida +gui.message.invalid_target_address.name=Frecuencia de destino inválida +gui.message.launch_when.name=Lanzar cuando +gui.message.low_energy.name=Energía baja +gui.message.no_bonemeal.name=Polvo de hueso insuficiente +gui.message.no_energy.name=¡Sin energía! +gui.message.no_saplings.name=Brotes insuficientes +gui.message.no_seeds.name=Semillas insuficientes +gui.message.no_valid_blocks.name=Bloques no válidos en la burbuja +gui.message.no_water.name=Agua insuficiente +gui.message.not_enough.name=Insuficiente +gui.message.not_enough_energy.name=Energía insuficiente +gui.message.not_set.name=No establecido +gui.message.one_min.name=1 minuto +gui.message.receiving_active.name=Recepción activa +gui.message.redstone_sig.name=Señal de redstone +gui.message.remove_pad.name=Quitar plataforma +gui.message.sending_active.name=Envío activo +gui.message.success.name=Éxito +gui.message.target_no_energy.name=El objetivo no tiene suficiente energía +gui.message.telepad_not_found.name=Teletransportador no encontrado +gui.message.telepad_too_far.name=¡Objetivo muy lejos! (Máximo %d) +gui.message.telepad_wrong_dim.name=Destino en otra dimensión +gui.message.ten_sec.name=10 segundos +gui.message.terraforming.name=Terraformando +gui.message.thirty_sec.name=30 segundos +gui.message.trees.name=Árboles +gui.message.with_atmosphere0.name=en un planeta lleno de +gui.message.with_atmosphere1.name=en la atmósfera +gui.message.zero_water.name=¡Sin agua! +gui.methane_output.desc.2=bote de metano +gui.miner.docked=Aparcado +gui.miner.docking=Aparcando +gui.miner.mined=Minado +gui.miner.mining=Minando +gui.miner.offline=Apagado +gui.miner.out_of_range=Fuera de rango +gui.miner.returning=Volviendo +gui.miner.stuck=Atascado en: +gui.miner.travelling=Viajando +gui.slimeling.button.follow=Seguir +gui.slimeling.button.sit=Sentar +gui.slimeling.chat.wrong_player=¡Este es mi slimeling! +gui.slimeling.damage=Daño de ataque +gui.slimeling.following=Siguiendo +gui.slimeling.food=Comida favorita +gui.slimeling.kills=Asesinatos +gui.slimeling.name=Nombre +gui.slimeling.owner=Dueño +gui.slimeling.scale=Tamaño +gui.slimeling.sitting=Sentando +gui.status.liquefying.name=Licuando +gui.status.needs_carbon.name=Necesita carbón +gui.status.nogas.name=Sin gas +gui.status.processing.name=Sintetizando +gui.status.tankfull.name=Tanque lleno +gui.status.tanksfull.name=Tanques llenos +gui.telepad.desc.0=Esta es la dirección única$del teletransportador +gui.telepad.desc.1=Dirección de otro teletransportador.$Las entidades se enviarán allí. +gui.terraformer.desc.0=Tanque de aqua +gui.water_bucket_slot.desc=Coloca cubos de agua aquí +item.astro_miner.name=Astro Miner +item.atmospheric_valve.name=Válvula atmosférica +item.beam_core.name=Núcleo del haz +item.bucket_sludge.name=Cubo de lodo bacteriano +item.canister.gas.name=Gas #nombre corto para el nivel de gas +item.canister.liquid_argon.full.name=Bote de Argón Líquido Lleno +item.canister.liquid_argon.name=LAR #nombre corto para el nivel de argón líquido +item.canister.liquid_argon.partial.name=Bote de argón líquido +item.canister.liquid_nitrogen.full.name=Bote de nitrógeno líquido lleno +item.canister.liquid_nitrogen.name=LIN #nombre corto para el nivel de nitrógeno líquido +item.canister.liquid_nitrogen.partial.name=Bote de nitrógeno líquido +item.canister.lox.full.name=Filled Canister of Liquid Oxygen +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Bote de oxígeno líquido +item.carbon_fragments.name=Carbón fragmentado +item.compressed_desh.name=Desh comprimido +item.compressed_titanium.name=Titanio comprimido +item.desh_axe.name=Hacha de desh +item.desh_boots.name=Botas de desh +item.desh_chestplate.name=Peto de desh +item.desh_helmet.name=Casco de desh +item.desh_hoe.name=Azada de desh +item.desh_leggings.name=Grebas de desh +item.desh_pick.name=Pico de desh +item.desh_pick_slime.description.name=Puedes recoger huevos de slimeling +item.desh_pick_slime.name=Pico de desh pegajoso +item.desh_spade.name=Pala de desh +item.desh_stick.name=Palo de desh +item.desh_sword.name=Espada de desh +item.empty_gas_canister.name=Bote de gas vacío +item.engine_t2.name=Motor de cohete grande +item.fluid_manip.name=Manipulador de fluidos +item.grapple.name=Gancho +item.heavy_nose_cone.name=Ojiva grande +item.ingot_desh.name=Lingote de desh +item.ingot_titanium.name=Lingote de titanio +item.key.t2.name=Llave de mazmorra de Nivel 2 +item.methane_canister.name=Bote de metano lleno +item.methane_canister_partial.name=Bote de metano +item.orion_drive.name=Propulsor menaiónico +item.raw_desh.name=Desh en bruto +item.reinforced_plate_t2.name=Placa de alta resistencia +item.reinforced_plate_t3.name=Placa de alta resistencia +item.rocket_fins_t2.name=Aleta de cohete grande +item.rocket_t2.cargo_rocket.name=Cohete de Carga +item.rocket_t2.t2Rocket.name=Cohete de Nivel 2 +item.rocket_t3.t3Rocket.name=Cohete de Nivel 3 +item.shard_iron.name=Fragmento de hierro +item.shard_titanium.name=Fragmento de titanio +item.slimeling_cargo.name=Bolsa para slimeling +item.thermal_boots.name=Calcetines térmicos +item.thermal_chestplate.name=Suéter térmico +item.thermal_cloth.name=Tela térmica +item.thermal_helm.name=Gorro térmico +item.thermal_leggings.name=Leggings térmicos +item.tier2.desc=Nivel 2 +item.tier3.desc=Nivel 3 +item.titanium_axe.name=Hacha de titanio +item.titanium_boots.name=Botas de titanio +item.titanium_chestplate.name=Peto de titanio +item.titanium_helmet.name=Casco de titanio +item.titanium_hoe.name=Azada de titanio +item.titanium_leggings.name=Grebas de titanio +item.titanium_pickaxe.name=Pico de titanio +item.titanium_shovel.name=Pala de titanio +item.titanium_sword.name=Espada de titanio +planet.asteroids=Asteroides +planet.mars=Marte +schematic.astro_miner.name=AstroMinador +schematic.cargo_rocket.name=Cohete de carga automático +schematic.rocket_t3.name=Cohete de Nivel 3 +tile.asteroids_block.asteroid_rock_0.name=Roca de Asteroide +tile.asteroids_block.asteroid_rock_1.name=Roca de Asteroide +tile.asteroids_block.asteroid_rock_2.name=Roca de Asteroide +tile.asteroids_block.ore_aluminum_asteroids.name=Mena de Aluminio +tile.asteroids_block.ore_ilmenite_asteroids.name=Mena de Ilmenita +tile.asteroids_block.ore_iron_asteroids.name=Mena de Hierro +tile.beam_receiver.description=Los receptores se conectan en la entrada o salida de energía de una máquina, para transferir energía por medio del rayo. +tile.beam_receiver.name=Receptor láser +tile.beam_reflector.description=Los refletores se usan para redirigir rayos de energía del emisor al receptor. Se puede hacer click derecho para elegir entre varios objetivos. +tile.beam_reflector.name=Reflector láser +tile.cavern_vines.description=Las lianas cavernosas son peligrosas para los seres vivos, enredandoles y arrastándoles hacia arriba. +tile.cavern_vines.name=Lianas cavernosas +tile.creeper_egg.description=Los huevos de creeper harán spawn en las mazmorras de Marte, spawneando a un astuto depredador después de una explosión. +tile.creeper_egg.name=Huevo de creeper +tile.cryo_chamber.description=Las cámaras criogénicas permiten al jugador dormir durante el día, curando un pequeña porción de vida, teniendo luego que esperar para reutilizarlas. +tile.dense_ice.name=Hielo denso +tile.electrolyzer.description=Transforma agua en hidrógeno (muy útil para el sintetizador de metano) y oxígeno. +tile.gas_liquefier.description=Licua los gases, ya sean de la atmósfera o de los botes. ¡El metano líquido hace un buen combustible! +tile.hydrogen_pipe.description=La tubería de hidrógeno puede transportar hidrógeno desde el almacén interno de gas de una máquina a otra. +tile.hydrogen_pipe.name=Tubería de hidrógeno +tile.launch_controller.description=El controlador de lanzamiento personaliza el lanzamiento, tanto el destino, como las condiciones para un lanzamiento automático. +tile.mars.coppermars.name=Mena de Cobre +tile.mars.deshmars.name=Mena de Desh +tile.mars.ironmars.name=Mena de Hierro +tile.mars.marscobblestone.name=Roca Marciana +tile.mars.marsdeco.name=Bloque de Desh +tile.mars.marsdirt.name=Roca Marciana Subterránea +tile.mars.marsdungeon.name=Pared de Mazmorra Marciana +tile.mars.marsgrass.name=Roca de la superfície Marciana +tile.mars.marsstone.name=Piedra marciana +tile.mars.tinmars.name=Mena de Estaño +tile.mars_stairs_cobblestone.name=Escaleras de Roca Marciana +tile.mars_stairs_brick.name=Escaleras de Mazmorra Marciana +tile.mars_machine.0.name=Terraformador +tile.mars_machine.1.name=Cámara Criogénica +tile.mars_machine.2.name=Controlador de Lanzamiento +tile.mars_machine.4.name=Condensador de Gas +tile.mars_machine.5.name=Sintetizador de Metano +tile.mars_machine.6.name=Electrolizador de Agua +tile.methane_synthesizer.description=Con una fuente de hidrógeno y de carbono fabrica metano para un posterior procesamiento en el condesador de gas. +tile.miner_base.description=La base del AstroMinador es dónde aparcará un AstroMinador. Es grande... intenta crear un cubo de 2 x 2 x 2 para ello. +tile.miner_base.name=Base del AstroMinador +tile.slab_gc_half.mars_bricks_slab.name=Losa de Mazmorra Marciana +tile.slab_gc_half.mars_slab.name=Losa de Roca Marciana +tile.slimeling_egg.blue.name=Huevo de Slimeling Azul +tile.slimeling_egg.description=Los huevos de Slimeling, una vez agrietados por las manos del jugador, eclosionarán en una mascota. +tile.slimeling_egg.red.name=Huevo de Slimeling Rojo +tile.slimeling_egg.yellow.name=Huevo de Slimeling Amarillo +tile.sludge.name=Lodo bacteriano +tile.telepad_short.description=Los teletransportadores se usan para enviar a jugadores y otras criaturas a cortas distancias (hasta 250 bloques) cuando está conectado a otro teletransportador. +tile.telepad_short.name=Teletransportador de corto alcance +tile.terraformer.description=Los terraformadores añaden hierba, árboles y agua en planetas distantes, cuando se le da los materiales correctos. +tile.treasure_t2.description=La llaves del tesoro nivel 2 se generarán en las Mazmorras de Marte. Se pueden desbloquear tras matar al jefe final. +tile.treasure_t2.name=Cofre del Tesoro Nivel 2 +tile.treasure_t3.description=Los Cofres del Tesoro Nivel 3 se generarán en las Mazmorras de Venus. Se pueden desbloquear tras matar al jefe final. +tile.treasure_t3.name=Cofre del tesoro nivel 3 +tile.walkway.walkway.description=Las Pasarelas se usan con fines decorativos, usadas para conectar bloques mientras se mantiene un tema espacial. +tile.walkway.walkway.name=Pasarela +tile.walkway.walkway_pipe.description=Las Pasarelas con Tubo de Fluidos se usan para hacer pasar tubos de fluidos bajo una superfície sobre la que andar. +tile.walkway.walkway_pipe.name=Pasarela +tile.walkway.walkway_wire.description=Las Pasarelas con Cable de Aluminio se usan para pasar cable bajo una superfície sobre la que andar. +tile.walkway.walkway_wire.name=Pasarela +tile.wall_gc.mars.name=Muro de Roca Marciana +tile.wall_gc.mars_bricks.name=Muro de Mazmorra Marciana + +tile.venus.dungeon_brick_venus_1.name=Ladrillo de la Mazmorra de Venus I +tile.venus.dungeon_brick_venus_2.name=Ladrillo de la Mazmorra de Venus II +tile.venus.venus_ore_aluminum.name=Mena de Aluminio +tile.venus.venus_ore_copper.name=Mena de Cobre +tile.venus.venus_ore_galena.name=Mena de Galena +tile.venus.venus_ore_quartz.name=Mena de Cuarzo +tile.venus.venus_ore_silicon.name=Mena de Silicio +tile.venus.venus_ore_tin.name=Mena de Estaño +tile.venus.venus_rock_0.name=Roca de Venus Suave +tile.venus.venus_rock_1.name=Roca de Venus Dura +tile.venus.venus_rock_2.name=Roca Volcánica de Venus +tile.venus.venus_rock_3.name=Piedra Pómez +tile.venus.lead_block.name=Bloque de Plomo +tile.venus_rock_scorched.name=Roca de Venus Chamuscada +entity.entry_pod_venus.name=Cápsula de Entrada a Venus +item.shield_controller.description=El Controlador de Escudo protege la armadura de CUALQUIER tipo de daño - ¡incluyendo la corrosión atmosférica! +item.shield_controller.name=Controlador de Escudo +item.strange_seed.name=Semilla Rara +item.thermal_boots_t2.name=Calcetines Isotérmicos +item.thermal_chestplate_t2.name=Suéter Isotérmico +item.thermal_fabric.name=Tela Isotérmica +item.thermal_helm_t2.name=Gorro Isotérmico +item.thermal_leggings_t2.name=Leggings Isotérmicos +tile.geothermal_generator.description=Cuando se coloca sobre una salida de vapor de sulfuro válida, genera energia a una velocidad oscilante +tile.geothermal_generator.name=Generador Geotérmico +item.prelaunch_checklist.name=Lista de Comprobación para Antes del Lanzamiento +item.radioisotope_core.name=Núcleo Radioisótopo +item.volcanic_pickaxe.description=Mina un área de 3x3 en la dirección a la que apuntes +item.volcanic_pickaxe.name=Pico Volcánico +tile.web_torch.web_torch_1.description=Antorcha de Piedra Luminosa +tile.spout.name=Salida de Vapor +tile.sulphuric_acid.name=Ácido Sulfúrico + +checklist.craft_grapple_hook.key=Fabricar Gancho +checklist.equip_shield_controller.key=Equipar Controlador de Escudo +checklist.thermal_padding.key=Equipar Ropa Térmica +checklist.thermal_padding_t2.key=Equipar Ropa Térmica de Nivel 2 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fi_fi.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fi_fi.lang new file mode 100644 index 00000000..8305975f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fi_fi.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +container.launchcontroller.name=Launch Controller ##NEEDS TRANSLATE## +container.mars_lander.name=Landing Balloons ##NEEDS TRANSLATE## +container.short_range_telepad.name=Short Range Telepad ##NEEDS TRANSLATE## +container.tile_terraformer.name=Terraformer ##NEEDS TRANSLATE## +dimension.mars.name=Mars ##NEEDS TRANSLATE## +entity.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +entity.creeper_boss.name=Evolved Creeper Boss ##NEEDS TRANSLATE## +entity.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +entity.grapple_hook.name=Grapple Hook ##NEEDS TRANSLATE## +entity.landing_balloons.name=Landing Balloons ##NEEDS TRANSLATE## +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Cargo Rocket ##NEEDS TRANSLATE## +entity.rocket_t2.name=Tier 2 Rocket ##NEEDS TRANSLATE## +entity.rocket_t3.name=Tier 3 Rocket ##NEEDS TRANSLATE## +entity.slimeling.name=Slimeling ##NEEDS TRANSLATE## +entity.sludgeling.name=Sludgeling ##NEEDS TRANSLATE## +entity.small_asteroid.name=Small Asteroid ##NEEDS TRANSLATE## +fluid.argon=Argon Gas ##NEEDS TRANSLATE## +fluid.atmosphericgases=Atmospheric Gases ##NEEDS TRANSLATE## +fluid.bacterialsludge=Bacterial Sludge ##NEEDS TRANSLATE## +fluid.carbondioxide=CO2 Gas ##NEEDS TRANSLATE## +fluid.fuel=Fuel ##NEEDS TRANSLATE## +fluid.helium=Helium Gas ##NEEDS TRANSLATE## +fluid.hydrogen=Hydrogen Gas ##NEEDS TRANSLATE## +fluid.liquidargon=Liquid Argon ##NEEDS TRANSLATE## +fluid.liquidmethane=Liquid Methane ##NEEDS TRANSLATE## +fluid.liquidnitrogen=Liquid Nitrogen ##NEEDS TRANSLATE## +fluid.liquidoxygen=Liquid Oxygen ##NEEDS TRANSLATE## +fluid.methane=Methane Gas ##NEEDS TRANSLATE## +fluid.nitrogen=Nitrogen Gas ##NEEDS TRANSLATE## +fluid.oxygen=Oxygen Gas ##NEEDS TRANSLATE## +gas.carbondioxide.name=Carbon Dioxide ##NEEDS TRANSLATE## +gas.nitrogen.name=Nitrogen ##NEEDS TRANSLATE## +gas.oxygen.name=Oxygen ##NEEDS TRANSLATE## +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Process ##NEEDS TRANSLATE## +gui.button.liquefy_stop.name=Stop ##NEEDS TRANSLATE## +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fragmented Carbon can go here ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.0=Already ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.1=Launched ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.0=Waiting for ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.1=ignition ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Asuttava#Ei happea#Painovoima: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds ##NEEDS TRANSLATE## +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here ##NEEDS TRANSLATE## +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) ##NEEDS TRANSLATE## +gui.gas_tank.desc.0=Gas storage ##NEEDS TRANSLATE## +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.0=This takes a hydrogen tank ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.1=or an Atmospheric Valve ##NEEDS TRANSLATE## +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency ##NEEDS TRANSLATE## +gui.launch_controller.desc.1=Frequency to launch rockets towards ##NEEDS TRANSLATE## +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=liquefied gas tank ##NEEDS TRANSLATE## +gui.liquid_tank.desc.0=Liquid Tank ##NEEDS TRANSLATE## +gui.message.address.name=Address ##NEEDS TRANSLATE## +gui.message.astro_miner.fail=This base already has an Astro Miner! ##NEEDS TRANSLATE## +gui.message.astro_miner1.fail=The docking area is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=That would be one Astro Miner too many! ##NEEDS TRANSLATE## +gui.message.astro_miner3.fail=The Astro Miner's base was removed! ##NEEDS TRANSLATE## +gui.message.astro_miner4.fail=The Astro Miner ran out of energy and cannot get back to base! ##NEEDS TRANSLATE## +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! ##NEEDS TRANSLATE## +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! ##NEEDS TRANSLATE## +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=BubbleExpanding ##NEEDS TRANSLATE## +gui.message.cargo_full.name=Cargo is Full ##NEEDS TRANSLATE## +gui.message.cargo_unloaded.name=Cargo is Unloaded ##NEEDS TRANSLATE## +gui.message.dest_address.name=Target Address ##NEEDS TRANSLATE## +gui.message.dest_frequency.name=Target ##NEEDS TRANSLATE## +gui.message.enable_grass.name=Enable Grass ##NEEDS TRANSLATE## +gui.message.enable_trees.name=Enable Trees ##NEEDS TRANSLATE## +gui.message.frequency.name=Frequency ##NEEDS TRANSLATE## +gui.message.fully_fueled.name=Fully Fueled ##NEEDS TRANSLATE## +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! ##NEEDS TRANSLATE## +gui.message.grass.name=Grass ##NEEDS TRANSLATE## +gui.message.instant.name=Instantly ##NEEDS TRANSLATE## +gui.message.invalid_address.name=Invalid Unique Address ##NEEDS TRANSLATE## +gui.message.invalid_freq.name=Invalid Frequency ##NEEDS TRANSLATE## +gui.message.invalid_target_address.name=Invalid Target Address ##NEEDS TRANSLATE## +gui.message.launch_when.name=Launch When ##NEEDS TRANSLATE## +gui.message.low_energy.name=Low energy ##NEEDS TRANSLATE## +gui.message.no_bonemeal.name=Not Enough Bonemeal ##NEEDS TRANSLATE## +gui.message.no_energy.name=Not Enough Energy ##NEEDS TRANSLATE## +gui.message.no_saplings.name=Not Enough Saplings ##NEEDS TRANSLATE## +gui.message.no_seeds.name=Not Enough Seeds ##NEEDS TRANSLATE## +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble ##NEEDS TRANSLATE## +gui.message.no_water.name=Not Enough Water ##NEEDS TRANSLATE## +gui.message.not_enough.name=Not Enough ##NEEDS TRANSLATE## +gui.message.not_enough_energy.name=Not Enough Energy! ##NEEDS TRANSLATE## +gui.message.not_set.name=Not Set ##NEEDS TRANSLATE## +gui.message.one_min.name=1 Minute ##NEEDS TRANSLATE## +gui.message.receiving_active.name=Receiving Active ##NEEDS TRANSLATE## +gui.message.redstone_sig.name=Redstone Signal ##NEEDS TRANSLATE## +gui.message.remove_pad.name=Remove Pad On Launch ##NEEDS TRANSLATE## +gui.message.sending_active.name=Sending Active ##NEEDS TRANSLATE## +gui.message.success.name=Success ##NEEDS TRANSLATE## +gui.message.target_no_energy.name=Target doesn't have enough Energy! ##NEEDS TRANSLATE## +gui.message.telepad_not_found.name=Telepad Not Found! ##NEEDS TRANSLATE## +gui.message.telepad_too_far.name=Target too far! (Max %d) ##NEEDS TRANSLATE## +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! ##NEEDS TRANSLATE## +gui.message.ten_sec.name=10 Seconds ##NEEDS TRANSLATE## +gui.message.terraforming.name=Terraforming ##NEEDS TRANSLATE## +gui.message.thirty_sec.name=30 Seconds ##NEEDS TRANSLATE## +gui.message.trees.name=Trees ##NEEDS TRANSLATE## +gui.message.with_atmosphere0.name=on a planet with plenty of ##NEEDS TRANSLATE## +gui.message.with_atmosphere1.name=in the atmosphere ##NEEDS TRANSLATE## +gui.message.zero_water.name=No water! ##NEEDS TRANSLATE## +gui.methane_output.desc.2=methane tank ##NEEDS TRANSLATE## +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Follow ##NEEDS TRANSLATE## +gui.slimeling.button.sit=Sit ##NEEDS TRANSLATE## +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Attack Damage ##NEEDS TRANSLATE## +gui.slimeling.following=Following ##NEEDS TRANSLATE## +gui.slimeling.food=Favorite food ##NEEDS TRANSLATE## +gui.slimeling.kills=Kills ##NEEDS TRANSLATE## +gui.slimeling.name=Name ##NEEDS TRANSLATE## +gui.slimeling.owner=Owner ##NEEDS TRANSLATE## +gui.slimeling.scale=Scale ##NEEDS TRANSLATE## +gui.slimeling.sitting=Sitting ##NEEDS TRANSLATE## +gui.status.liquefying.name=Liquefying ##NEEDS TRANSLATE## +gui.status.needs_carbon.name=Needs carbon ##NEEDS TRANSLATE## +gui.status.nogas.name=No gas ##NEEDS TRANSLATE## +gui.status.processing.name=Synthesizing ##NEEDS TRANSLATE## +gui.status.tankfull.name=Tank full ##NEEDS TRANSLATE## +gui.status.tanksfull.name=Tanks full ##NEEDS TRANSLATE## +gui.telepad.desc.0=This is the Telepad's$unique address ##NEEDS TRANSLATE## +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. ##NEEDS TRANSLATE## +gui.terraformer.desc.0=Water Tank ##NEEDS TRANSLATE## +gui.water_bucket_slot.desc=Place water buckets here ##NEEDS TRANSLATE## +item.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +item.atmospheric_valve.name=Atmospheric Valve ##NEEDS TRANSLATE## +item.beam_core.name=Beam Core ##NEEDS TRANSLATE## +item.bucket_sludge.name=Bacterial Sludge Bucket ##NEEDS TRANSLATE## +item.canister.gas.name=Gas ##NEEDS TRANSLATE## +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level ##NEEDS TRANSLATE## +item.canister.liquid_argon.partial.name=Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.name=Liquid ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.lox.full.name=Filled Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.canister.lox.name=LOX ##NEEDS TRANSLATE## +item.canister.lox.partial.name=Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.carbon_fragments.name=Fragmented Carbon ##NEEDS TRANSLATE## +item.compressed_desh.name=Compressed Desh ##NEEDS TRANSLATE## +item.compressed_titanium.name=Compressed Titanium ##NEEDS TRANSLATE## +item.desh_axe.name=Desh-kirves +item.desh_boots.name=Desh-kengät +item.desh_chestplate.name=Desh-haarniska +item.desh_helmet.name=Desh-kypärä +item.desh_hoe.name=Desh-kuokka +item.desh_leggings.name=Desh-housut +item.desh_pick.name=Desh-hakku +item.desh_pick_slime.description.name=Can harvest Slimeling eggs ##NEEDS TRANSLATE## +item.desh_pick_slime.name=Sticky Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_spade.name=Desh-lapio +item.desh_stick.name=Desh-tikku +item.desh_sword.name=Desh-miekka +item.empty_gas_canister.name=Empty Gas Canister ##NEEDS TRANSLATE## +item.engine_t2.name=Heavy Rocket Engine ##NEEDS TRANSLATE## +item.fluid_manip.name=Fluid Manipulator ##NEEDS TRANSLATE## +item.grapple.name=Grapple ##NEEDS TRANSLATE## +item.heavy_nose_cone.name=Heavy Nose Cone ##NEEDS TRANSLATE## +item.ingot_desh.name=Desh-harkko +item.ingot_titanium.name=Titanium Ingot ##NEEDS TRANSLATE## +item.key.t2.name=Tier 2 Dungeon Key ##NEEDS TRANSLATE## +item.methane_canister.name=Filled Methane Gas Canister ##NEEDS TRANSLATE## +item.methane_canister_partial.name=Methane Gas Canister ##NEEDS TRANSLATE## +item.orion_drive.name=Orion Drive ##NEEDS TRANSLATE## +item.raw_desh.name=Puhdistamaton desh +item.reinforced_plate_t2.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.reinforced_plate_t3.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.rocket_fins_t2.name=Heavy Rocket Fins ##NEEDS TRANSLATE## +item.rocket_t2.cargo_rocket.name=Cargo Rocket ##NEEDS TRANSLATE## +item.rocket_t2.t2Rocket.name=Tier 2 Rocket ##NEEDS TRANSLATE## +item.rocket_t3.t3Rocket.name=Tier 3 Rocket ##NEEDS TRANSLATE## +item.shard_iron.name=Iron Shard ##NEEDS TRANSLATE## +item.shard_titanium.name=Titanium Shard ##NEEDS TRANSLATE## +item.slimeling_cargo.name=Slimeling Inventory Bag ##NEEDS TRANSLATE## +item.thermal_boots.name=Thermal Padding Boots ##NEEDS TRANSLATE## +item.thermal_chestplate.name=Thermal Padding Chestpiece ##NEEDS TRANSLATE## +item.thermal_cloth.name=Thermal Cloth ##NEEDS TRANSLATE## +item.thermal_helm.name=Thermal Padding Helm ##NEEDS TRANSLATE## +item.thermal_leggings.name=Thermal Padding Leggings ##NEEDS TRANSLATE## +item.tier2.desc=Tier 2 ##NEEDS TRANSLATE## +item.tier3.desc=Tier 3 ##NEEDS TRANSLATE## +item.titanium_axe.name=Titanium Axe ##NEEDS TRANSLATE## +item.titanium_boots.name=Titanium Boots ##NEEDS TRANSLATE## +item.titanium_chestplate.name=Titanium Chestplate ##NEEDS TRANSLATE## +item.titanium_helmet.name=Titanium Helmet ##NEEDS TRANSLATE## +item.titanium_hoe.name=Titanium Hoe ##NEEDS TRANSLATE## +item.titanium_leggings.name=Titanium Leggings ##NEEDS TRANSLATE## +item.titanium_pickaxe.name=Titanium Pickaxe ##NEEDS TRANSLATE## +item.titanium_shovel.name=Titanium Shovel ##NEEDS TRANSLATE## +item.titanium_sword.name=Titanium Sword ##NEEDS TRANSLATE## +planet.asteroids=Asteroids ##NEEDS TRANSLATE## +planet.mars=Mars ##NEEDS TRANSLATE## +schematic.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +schematic.cargo_rocket.name=Automatic Cargo Rocket ##NEEDS TRANSLATE## +schematic.rocket_t3.name=Tier 3 Rocket ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore ##NEEDS TRANSLATE## +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. ##NEEDS TRANSLATE## +tile.beam_receiver.name=Beam Receiver ##NEEDS TRANSLATE## +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. ##NEEDS TRANSLATE## +tile.beam_reflector.name=Beam Reflector ##NEEDS TRANSLATE## +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. ##NEEDS TRANSLATE## +tile.cavern_vines.name=Cavernous Vines ##NEEDS TRANSLATE## +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=Creeper Egg ##NEEDS TRANSLATE## +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Dense Ice ##NEEDS TRANSLATE## +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Hydrogen Pipe ##NEEDS TRANSLATE## +tile.launch_controller.description=Launch Controllers are used to customize launch behaviour, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Kuparimalmi +tile.mars.deshmars.name=Desh-malmi +tile.mars.ironmars.name=Iron Ore ##NEEDS TRANSLATE## +tile.mars.marscobblestone.name=Mukulakivi +tile.mars.marsdeco.name=Sisustuskuutio +tile.mars.marsdirt.name=Multa +tile.mars.marsdungeon.name=Vankityrmän seinä +tile.mars.marsgrass.name=Ruoho +tile.mars.marsstone.name=Kivi +tile.mars.tinmars.name=Tinamalmi +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs ##NEEDS TRANSLATE## +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.mars_machine.0.name=Terraformer ##NEEDS TRANSLATE## +tile.mars_machine.1.name=Cryogenic Chamber ##NEEDS TRANSLATE## +tile.mars_machine.2.name=Launch Controller ##NEEDS TRANSLATE## +tile.mars_machine.4.name=Gas Liquefier ##NEEDS TRANSLATE## +tile.mars_machine.5.name=Methane Synthesizer ##NEEDS TRANSLATE## +tile.mars_machine.6.name=Water Electrolyzer ##NEEDS TRANSLATE## +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. ##NEEDS TRANSLATE## +tile.miner_base.name=Astro Miner Base ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab ##NEEDS TRANSLATE## +tile.slimeling_egg.blue.name=Blue Slimeling Egg ##NEEDS TRANSLATE## +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=Red Slimeling Egg ##NEEDS TRANSLATE## +tile.slimeling_egg.yellow.name=Yellow Slimeling Egg ##NEEDS TRANSLATE## +tile.sludge.name=Bacterial Sludge ##NEEDS TRANSLATE## +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Short Range Telepad ##NEEDS TRANSLATE## +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_t2.name=Tier 2 Treasure Chest ##NEEDS TRANSLATE## +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. ##NEEDS TRANSLATE## +tile.treasure_t3.name=Tier 3 Treasure Chest ##NEEDS TRANSLATE## +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. ##NEEDS TRANSLATE## +tile.walkway.walkway.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.name=Walkway ##NEEDS TRANSLATE## +tile.wall_gc.mars.name=Mars Cobblestone Wall ##NEEDS TRANSLATE## +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall ##NEEDS TRANSLATE## diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_ca.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_ca.lang new file mode 100644 index 00000000..57049b07 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_ca.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +container.launchcontroller.name=Contrôleur de lancement +container.mars_lander.name=Landing Balloons ##NEEDS TRANSLATE## +container.short_range_telepad.name=Short Range Telepad ##NEEDS TRANSLATE## +container.tile_terraformer.name=Terraformer ##NEEDS TRANSLATE## +dimension.mars.name=Mars ##NEEDS TRANSLATE## +entity.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +entity.creeper_boss.name=Boss Creeper évolué +entity.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +entity.grapple_hook.name=Grappin crochet +entity.landing_balloons.name=Landing Balloons ##NEEDS TRANSLATE## +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Cargo Rocket ##NEEDS TRANSLATE## +entity.rocket_t2.name=Tier 2 Rocket ##NEEDS TRANSLATE## +entity.rocket_t3.name=Fusée Niveau 3 +entity.slimeling.name=Vaseux +entity.sludgeling.name=Boueux +entity.small_asteroid.name=Petit astéroïde +fluid.argon=Argon Gas ##NEEDS TRANSLATE## +fluid.atmosphericgases=Atmospheric Gases ##NEEDS TRANSLATE## +fluid.bacterialsludge=Bacterial Sludge ##NEEDS TRANSLATE## +fluid.carbondioxide=CO2 Gas ##NEEDS TRANSLATE## +fluid.fuel=Fuel ##NEEDS TRANSLATE## +fluid.helium=Helium Gas ##NEEDS TRANSLATE## +fluid.hydrogen=Hydrogen Gas ##NEEDS TRANSLATE## +fluid.liquidargon=Liquid Argon ##NEEDS TRANSLATE## +fluid.liquidmethane=Liquid Methane ##NEEDS TRANSLATE## +fluid.liquidnitrogen=Liquid Nitrogen ##NEEDS TRANSLATE## +fluid.liquidoxygen=Liquid Oxygen ##NEEDS TRANSLATE## +fluid.methane=Methane Gas ##NEEDS TRANSLATE## +fluid.nitrogen=Nitrogen Gas ##NEEDS TRANSLATE## +fluid.oxygen=Oxygen Gas ##NEEDS TRANSLATE## +gas.carbondioxide.name=Carbon Dioxide ##NEEDS TRANSLATE## +gas.nitrogen.name=Nitrogen ##NEEDS TRANSLATE## +gas.oxygen.name=Oxygen ##NEEDS TRANSLATE## +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Process ##NEEDS TRANSLATE## +gui.button.liquefy_stop.name=Stop ##NEEDS TRANSLATE## +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fragmented Carbon can go here ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.0=Already ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.1=Launched ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.0=Waiting for ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.1=ignition ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Habitable#Pas d'oxygène#Gravité: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds ##NEEDS TRANSLATE## +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here ##NEEDS TRANSLATE## +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) ##NEEDS TRANSLATE## +gui.gas_tank.desc.0=Gas storage ##NEEDS TRANSLATE## +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.0=This takes a hydrogen tank ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.1=or an Atmospheric Valve ##NEEDS TRANSLATE## +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency ##NEEDS TRANSLATE## +gui.launch_controller.desc.1=Frequency to launch rockets towards ##NEEDS TRANSLATE## +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=liquefied gas tank ##NEEDS TRANSLATE## +gui.liquid_tank.desc.0=Liquid Tank ##NEEDS TRANSLATE## +gui.message.address.name=Address ##NEEDS TRANSLATE## +gui.message.astro_miner.fail=This base already has an Astro Miner! ##NEEDS TRANSLATE## +gui.message.astro_miner1.fail=The docking area is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=That would be one Astro Miner too many! ##NEEDS TRANSLATE## +gui.message.astro_miner3.fail=The Astro Miner's base was removed! ##NEEDS TRANSLATE## +gui.message.astro_miner4.fail=The Astro Miner ran out of energy and cannot get back to base! ##NEEDS TRANSLATE## +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! ##NEEDS TRANSLATE## +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! ##NEEDS TRANSLATE## +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=BubbleExpanding ##NEEDS TRANSLATE## +gui.message.cargo_full.name=Cargo is Full ##NEEDS TRANSLATE## +gui.message.cargo_unloaded.name=Cargo is Unloaded ##NEEDS TRANSLATE## +gui.message.dest_address.name=Target Address ##NEEDS TRANSLATE## +gui.message.dest_frequency.name=Target ##NEEDS TRANSLATE## +gui.message.enable_grass.name=Enable Grass ##NEEDS TRANSLATE## +gui.message.enable_trees.name=Enable Trees ##NEEDS TRANSLATE## +gui.message.frequency.name=Frequency ##NEEDS TRANSLATE## +gui.message.fully_fueled.name=Fully Fueled ##NEEDS TRANSLATE## +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! ##NEEDS TRANSLATE## +gui.message.grass.name=Grass ##NEEDS TRANSLATE## +gui.message.instant.name=Instantly ##NEEDS TRANSLATE## +gui.message.invalid_address.name=Invalid Unique Address ##NEEDS TRANSLATE## +gui.message.invalid_freq.name=Invalid Frequency ##NEEDS TRANSLATE## +gui.message.invalid_target_address.name=Invalid Target Address ##NEEDS TRANSLATE## +gui.message.launch_when.name=Launch When ##NEEDS TRANSLATE## +gui.message.low_energy.name=Low energy ##NEEDS TRANSLATE## +gui.message.no_bonemeal.name=Not Enough Bonemeal ##NEEDS TRANSLATE## +gui.message.no_energy.name=Not Enough Energy ##NEEDS TRANSLATE## +gui.message.no_saplings.name=Not Enough Saplings ##NEEDS TRANSLATE## +gui.message.no_seeds.name=Not Enough Seeds ##NEEDS TRANSLATE## +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble ##NEEDS TRANSLATE## +gui.message.no_water.name=Not Enough Water ##NEEDS TRANSLATE## +gui.message.not_enough.name=Not Enough ##NEEDS TRANSLATE## +gui.message.not_enough_energy.name=Not Enough Energy! ##NEEDS TRANSLATE## +gui.message.not_set.name=Not Set ##NEEDS TRANSLATE## +gui.message.one_min.name=1 Minute ##NEEDS TRANSLATE## +gui.message.receiving_active.name=Receiving Active ##NEEDS TRANSLATE## +gui.message.redstone_sig.name=Redstone Signal ##NEEDS TRANSLATE## +gui.message.remove_pad.name=Remove Pad On Launch ##NEEDS TRANSLATE## +gui.message.sending_active.name=Sending Active ##NEEDS TRANSLATE## +gui.message.success.name=Success ##NEEDS TRANSLATE## +gui.message.target_no_energy.name=Target doesn't have enough Energy! ##NEEDS TRANSLATE## +gui.message.telepad_not_found.name=Telepad Not Found! ##NEEDS TRANSLATE## +gui.message.telepad_too_far.name=Target too far! (Max %d) ##NEEDS TRANSLATE## +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! ##NEEDS TRANSLATE## +gui.message.ten_sec.name=10 Seconds ##NEEDS TRANSLATE## +gui.message.terraforming.name=Terraforming ##NEEDS TRANSLATE## +gui.message.thirty_sec.name=30 Seconds ##NEEDS TRANSLATE## +gui.message.trees.name=Trees ##NEEDS TRANSLATE## +gui.message.with_atmosphere0.name=on a planet with plenty of ##NEEDS TRANSLATE## +gui.message.with_atmosphere1.name=in the atmosphere ##NEEDS TRANSLATE## +gui.message.zero_water.name=No water! ##NEEDS TRANSLATE## +gui.methane_output.desc.2=methane tank ##NEEDS TRANSLATE## +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Follow ##NEEDS TRANSLATE## +gui.slimeling.button.sit=Sit ##NEEDS TRANSLATE## +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Attack Damage ##NEEDS TRANSLATE## +gui.slimeling.following=Following ##NEEDS TRANSLATE## +gui.slimeling.food=Favorite food ##NEEDS TRANSLATE## +gui.slimeling.kills=Kills ##NEEDS TRANSLATE## +gui.slimeling.name=Name ##NEEDS TRANSLATE## +gui.slimeling.owner=Owner ##NEEDS TRANSLATE## +gui.slimeling.scale=Scale ##NEEDS TRANSLATE## +gui.slimeling.sitting=Sitting ##NEEDS TRANSLATE## +gui.status.liquefying.name=Liquefying ##NEEDS TRANSLATE## +gui.status.needs_carbon.name=Needs carbon ##NEEDS TRANSLATE## +gui.status.nogas.name=No gas ##NEEDS TRANSLATE## +gui.status.processing.name=Synthesizing ##NEEDS TRANSLATE## +gui.status.tankfull.name=Tank full ##NEEDS TRANSLATE## +gui.status.tanksfull.name=Tanks full ##NEEDS TRANSLATE## +gui.telepad.desc.0=This is the Telepad's$unique address ##NEEDS TRANSLATE## +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. ##NEEDS TRANSLATE## +gui.terraformer.desc.0=Water Tank ##NEEDS TRANSLATE## +gui.water_bucket_slot.desc=Place water buckets here ##NEEDS TRANSLATE## +item.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +item.atmospheric_valve.name=Atmospheric Valve ##NEEDS TRANSLATE## +item.beam_core.name=Beam Core ##NEEDS TRANSLATE## +item.bucket_sludge.name=Bacterial Sludge Bucket ##NEEDS TRANSLATE## +item.canister.gas.name=Gas ##NEEDS TRANSLATE## +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level ##NEEDS TRANSLATE## +item.canister.liquid_argon.partial.name=Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.name=Liquid ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.lox.full.name=Filled Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.canister.lox.name=LOX ##NEEDS TRANSLATE## +item.canister.lox.partial.name=Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.carbon_fragments.name=Fragmented Carbon ##NEEDS TRANSLATE## +item.compressed_desh.name=Silicium comprimé +item.compressed_titanium.name=Compressed Titanium ##NEEDS TRANSLATE## +item.desh_axe.name=Hache en silicium +item.desh_boots.name=Bottes en silicium +item.desh_chestplate.name=Plastron en silicium +item.desh_helmet.name=Casque en silicium +item.desh_hoe.name=Houe en silicium +item.desh_leggings.name=Jambières en silicium +item.desh_pick.name=Pioche en silicium +item.desh_pick_slime.description.name=Peut récolter les œufs de vase +item.desh_pick_slime.name=Sticky Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_spade.name=Pelle en silicium +item.desh_stick.name=Bâton de silicium +item.desh_sword.name=Épée en silicium +item.empty_gas_canister.name=Empty Gas Canister ##NEEDS TRANSLATE## +item.engine_t2.name=Heavy Rocket Engine ##NEEDS TRANSLATE## +item.fluid_manip.name=Fluid Manipulator ##NEEDS TRANSLATE## +item.grapple.name=Grapple ##NEEDS TRANSLATE## +item.heavy_nose_cone.name=Heavy Nose Cone ##NEEDS TRANSLATE## +item.ingot_desh.name=Lingot de silicium +item.ingot_titanium.name=Titanium Ingot ##NEEDS TRANSLATE## +item.key.t2.name=Clé de Donjon Niveau 2 +item.methane_canister.name=Filled Methane Gas Canister ##NEEDS TRANSLATE## +item.methane_canister_partial.name=Methane Gas Canister ##NEEDS TRANSLATE## +item.orion_drive.name=Orion Drive ##NEEDS TRANSLATE## +item.raw_desh.name=Silicium brut +item.reinforced_plate_t2.name=plaque renforcée +item.reinforced_plate_t3.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.rocket_fins_t2.name=Heavy Rocket Fins ##NEEDS TRANSLATE## +item.rocket_t2.cargo_rocket.name=Cargaison de fusée +item.rocket_t2.t2Rocket.name=Fusée niveau 2 +item.rocket_t3.t3Rocket.name=Fusée Niveau 3 +item.shard_iron.name=Iron Shard ##NEEDS TRANSLATE## +item.shard_titanium.name=Titanium Shard ##NEEDS TRANSLATE## +item.slimeling_cargo.name=Sac à vase +item.thermal_boots.name=Thermal Padding Boots ##NEEDS TRANSLATE## +item.thermal_chestplate.name=Thermal Padding Chestpiece ##NEEDS TRANSLATE## +item.thermal_cloth.name=Thermal Cloth ##NEEDS TRANSLATE## +item.thermal_helm.name=Thermal Padding Helm ##NEEDS TRANSLATE## +item.thermal_leggings.name=Thermal Padding Leggings ##NEEDS TRANSLATE## +item.tier2.desc=Niveau 2 +item.tier3.desc=Tier 3 ##NEEDS TRANSLATE## +item.titanium_axe.name=Titanium Axe ##NEEDS TRANSLATE## +item.titanium_boots.name=Titanium Boots ##NEEDS TRANSLATE## +item.titanium_chestplate.name=Titanium Chestplate ##NEEDS TRANSLATE## +item.titanium_helmet.name=Titanium Helmet ##NEEDS TRANSLATE## +item.titanium_hoe.name=Titanium Hoe ##NEEDS TRANSLATE## +item.titanium_leggings.name=Titanium Leggings ##NEEDS TRANSLATE## +item.titanium_pickaxe.name=Titanium Pickaxe ##NEEDS TRANSLATE## +item.titanium_shovel.name=Titanium Shovel ##NEEDS TRANSLATE## +item.titanium_sword.name=Titanium Sword ##NEEDS TRANSLATE## +planet.asteroids=Astéroïdes +planet.mars=Mars ##NEEDS TRANSLATE## +schematic.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +schematic.cargo_rocket.name=Cargaison automatique de fusée +schematic.rocket_t3.name=Fusée Niveau 3 +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore ##NEEDS TRANSLATE## +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. ##NEEDS TRANSLATE## +tile.beam_receiver.name=Récepteur de faisceau +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. ##NEEDS TRANSLATE## +tile.beam_reflector.name=Réflecteur de faisceau +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. ##NEEDS TRANSLATE## +tile.cavern_vines.name=Vignes caverneux +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=œuf de Creeper +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Dense Ice ##NEEDS TRANSLATE## +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Hydrogen Pipe ##NEEDS TRANSLATE## +tile.launch_controller.description=Launch Controllers are used to customize launch behaviour, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Minerai de cuivre +tile.mars.deshmars.name=Minerai de silicium +tile.mars.ironmars.name=Minerai de fer +tile.mars.marscobblestone.name=Pierre +tile.mars.marsdeco.name=Bloc de silicium +tile.mars.marsdirt.name=Roche Martienne souterraine +tile.mars.marsdungeon.name=Mur de Donjon +tile.mars.marsgrass.name=Roche Martienne de surface +tile.mars.marsstone.name=Roche Martienne +tile.mars.tinmars.name=Minerai d'étain +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs ##NEEDS TRANSLATE## +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Chambre cryogénique +tile.mars_machine.2.name=Contrôleur de lancement +tile.mars_machine.4.name=Gas Liquefier ##NEEDS TRANSLATE## +tile.mars_machine.5.name=Methane Synthesizer ##NEEDS TRANSLATE## +tile.mars_machine.6.name=Water Electrolyzer ##NEEDS TRANSLATE## +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. ##NEEDS TRANSLATE## +tile.miner_base.name=Astro Miner Base ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab ##NEEDS TRANSLATE## +tile.slimeling_egg.blue.name=œuf de vase bleu +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=œuf de vase rouge +tile.slimeling_egg.yellow.name=œuf de vase jaune +tile.sludge.name=Boues bactérienne +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Système de téléportation à courte portée +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_t2.name=Coffre au trésor Niveau 2 +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. ##NEEDS TRANSLATE## +tile.treasure_t3.name=Tier 3 Treasure Chest ##NEEDS TRANSLATE## +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. ##NEEDS TRANSLATE## +tile.walkway.walkway.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.name=Walkway ##NEEDS TRANSLATE## +tile.wall_gc.mars.name=Mars Cobblestone Wall ##NEEDS TRANSLATE## +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall ##NEEDS TRANSLATE## diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_fr.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_fr.lang new file mode 100644 index 00000000..8feff727 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_fr.lang @@ -0,0 +1,336 @@ +checklist.craft_grapple_hook.key=Craft un Grappin +checklist.equip_shield_controller.key=Equiper Protection +checklist.thermal_padding.key=Equiper Combinaison Thermique +checklist.thermal_padding_t2.key=Equiper Combinaison Thermique de Niveau 2 +container.crashed_probe.name=Sonde Coupée +container.entry_pod.name=Point d'entrée +container.geothermal_generator.name=Générateur Géothermique +container.launchcontroller.name=Contrôleur de lancement +container.mars_lander.name=Ballons d'atterissage +container.short_range_telepad.name=Téléporteur à courte portée +container.tile_terraformer.name=Terraformeur +dimension.mars.name=Mars +entity.astro_miner.name=Astro-mineur +entity.creeper_boss.name=Boss Creeper évolué +entity.entry_pod.name=Sas d'entrée +entity.entry_pod_venus.name=Sas d'entrée de Vénus +entity.grapple_hook.name=Grappin +entity.juicer.name=Juicer +entity.landing_balloons.name=Ballons d'atterissage +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Fusée de transport de marchandise +entity.rocket_t2.name=Fusée de niveau 2 +entity.rocket_t3.name=Fusée de Niveau 3 +entity.slimeling.name=Vaseux +entity.sludgeling.name=Boueux +entity.small_asteroid.name=Petit astéroïde +entity.spider_queen.name=Reine Araignée +entity.web_shot.name=Tirage Web +fluid.argon=Argon +fluid.atmosphericgases=Gas atmosphériques +fluid.bacterialsludge=Bourbe bactérienne +fluid.carbondioxide=CO2 +fluid.fuel=Carburant +fluid.helium=Hélium +fluid.hydrogen=Hydrogène +fluid.liquidargon=Argon liquide +fluid.liquidmethane=Méthane liquide +fluid.liquidnitrogen=Azote liquide +fluid.liquidoxygen=Oxygène liquide +fluid.methane=Méthane +fluid.nitrogen=Azote +fluid.oxygen=Oxygène +gas.carbondioxide.name=CO2 +gas.nitrogen.name=Azote +gas.oxygen.name=Oxygène +gc.configgui.astro_miners_max=Monbre maxi d'astro-mineur par joueur +gc.configgui.dimension_id_asteroids=ID de la dimension d'astéroide +gc.configgui.dimension_id_mars=ID dimension Mars +gc.configgui.disable_galacticraft_helium=Désactiver l'enregistrement du gaz hélium +gc.configgui.id_schematic_cargo_rocket=ID schéma fusée cargo +gc.configgui.id_schematic_rocket_t2=ID schéma fusée niveau 2 +gc.configgui.id_schematic_rocket_t3=ID du schéma de la fusée niveau 3 +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Configuration des planètes Galacticraft +gui.button.liquefy.name=Traitement +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Rappel +gui.carbon_slot.desc.0=Le carbone fragmenté peut venir ici +gui.cargorocket.status.launched.0=Prêt +gui.cargorocket.status.launched.1=Lancé +gui.cargorocket.status.waiting.0=En attente de +gui.cargorocket.status.waiting.1=chauffage +gui.choose_planet.desc.mars=Habitable#Pas d'oxygène#Gravité: 38% +gui.cryogenic.chat.cant_use=Je ne peux pas utiliser cela pendant %d secondes +gui.gas_input.desc.0=Essayez de placer un réservoir de Méthane ici +gui.gas_input.desc.1=(ou alors,un valve atmosphérique) +gui.gas_tank.desc.0=Réservoir à gaz +gui.gas_tank_compressed.desc.0=Réservoir à gaz (Comprimé) +gui.hydrogen_input.desc.0=Requiert un réservoir d'hydrogène +gui.hydrogen_input.desc.1=ou une valve atmosphérique +gui.launch_controller.desc.0=Ceci est la fréquence unique du controlleur +gui.launch_controller.desc.1=Fréquence du controlleur vers lequel les fusée seront envoyées +gui.launch_controller.desc.2=Si la rampe de lancement doit être enlevée ou non +gui.launch_controller.desc.3=Quand ces critères seront remplis,la fusée sera lancée +gui.launch_controller.desc.4=Masquer la fréquence de destination & des autres joueurs +gui.liquid_output.desc.2=Réservoir du liquéfieur +gui.liquid_tank.desc.0=Réservoir à liquide +gui.message.address.name=Adresse +gui.message.astro_miner.fail=Cette base a déjà un Astro-mineur ! +gui.message.astro_miner1.fail=La zone d'accueil est bloquée par: +gui.message.astro_miner1_a.fail=La route de l'astro-mineur est bloquée par : +gui.message.astro_miner2.fail=Ce sera l'astro-mineur de trop ! +gui.message.astro_miner3.fail=La base de l'astro-mineur à été supprimée ! +gui.message.astro_miner4.fail=L'astro-mineur est tombé en panne d'énergie et ne peut pas revenir à sa base ! +gui.message.astro_miner5.fail=La route de l'astro-mineur dans sa base semble être bloquée ! +gui.message.astro_miner6.fail=L'astro-mineur a fini le minage de la zone, et s'arrête maintenant ! +gui.message.astro_miner7.fail=Il y a rien pour un astro-mineur à miner dans une station spacial ! +gui.message.astro_miner8.fail=Un second astro-mineur a été détecté sur la même base, le premier sera gelé à présent. +gui.message.bubble_exp.name=Expansion de bulle +gui.message.cargo_full.name=Cargaison chargée +gui.message.cargo_unloaded.name=Cargaison déchargée +gui.message.dest_address.name=Adresse de la cible +gui.message.dest_frequency.name=Fréquence de déstination +gui.message.enable_grass.name=Activer l'herbe +gui.message.enable_trees.name=Activer les arbres +gui.message.frequency.name=Fréquence +gui.message.fully_fueled.name=Réservoir plein +gui.message.grapple.fail=J'aurai besoin d'une chaîne si je veux lancer ce grappin! +gui.message.grass.name=Herbe +gui.message.instant.name=Instantanément +gui.message.invalid_address.name=Adresse unique invalide +gui.message.invalid_freq.name=Fréquence non valide +gui.message.invalid_target_address.name=Adresse de la cible invalide +gui.message.launch_when.name=Lancer quand +gui.message.low_energy.name=Niveau d'énergie bas +gui.message.low_energy_output.name=Faible émission d'énergie +gui.message.no_bonemeal.name=Pas assez de poudre d'os +gui.message.no_energy.name=Pas assez d'énergie +gui.message.no_saplings.name=Pas assez de pousses d'arbre +gui.message.no_seeds.name=Pas assez de graines +gui.message.no_valid_blocks.name=Pas de blocs valides dans la bulle +gui.message.no_water.name=Pas assez d'eau +gui.message.not_enough.name=Pas assez +gui.message.not_enough_energy.name=Pas assez d'énergie +gui.message.not_set.name=Non défini +gui.message.one_min.name=1 Minute +gui.message.receiving_active.name=Réception active +gui.message.redstone_sig.name=Signal de redstone +gui.message.remove_pad.name=Enlever la rampe de lancement +gui.message.sending_active.name=Envoi actif +gui.message.success.name=Succès +gui.message.target_no_energy.name=La cible ne possède pas assez d'énergie +gui.message.telepad_not_found.name=Téléporteur non trouvé +gui.message.telepad_too_far.name=Cible trop éloignée! (Max %d) +gui.message.telepad_wrong_dim.name=Cible dans la mauvaise dimenssion! +gui.message.ten_sec.name=10 Secondes +gui.message.terraforming.name=Terraformation +gui.message.thirty_sec.name=30 Secondes +gui.message.trees.name=Arbres +gui.message.with_atmosphere0.name=Une planète avec beaucoup de +gui.message.with_atmosphere1.name=dans l'atmosphère +gui.message.zero_water.name=aucune eau ! +gui.methane_output.desc.2=Réservoir de méthane +gui.miner.docked=Chargé +gui.miner.docking=En chargement +gui.miner.mined=Miné +gui.miner.mining=Minant +gui.miner.offline=Hors ligne +gui.miner.out_of_range=Hors de portée +gui.miner.returning=En retour +gui.miner.stuck=Coincé à : +gui.miner.travelling=Voyageant +gui.slimeling.button.follow=Suivre +gui.slimeling.button.sit=S'assoir +gui.slimeling.chat.wrong_player=Ce n'est pas mon Slimeling ! +gui.slimeling.damage=Domage d'attaque +gui.slimeling.following=Suit +gui.slimeling.food=Nourriture favorite +gui.slimeling.kills=Meurtres +gui.slimeling.name=Nom +gui.slimeling.owner=Propriétaire +gui.slimeling.scale=Echelle +gui.slimeling.sitting=Est assis +gui.status.invalid_spout_1.name=Doit être placé sur +gui.status.invalid_spout_2.name=Bec de soufre valable +gui.status.liquefying.name=Liquéfaction +gui.status.needs_carbon.name=Requiert du carbone +gui.status.nogas.name=Pas de gaz +gui.status.processing.name=Synthétisation +gui.status.tankfull.name=Réservoir plein +gui.status.tanksfull.name=Réservoirs pleins +gui.telepad.desc.0=Ceci est l'addresse unique du téléporteur +gui.telepad.desc.1=Addresse d'un autre téléporteur. Les entités y seront envoyées. +gui.terraformer.desc.0=Réservoir d'eau +gui.water_bucket_slot.desc=Placez les sceaux d'eau ici +item.astro_miner.name=Astro-mineur +item.atmospheric_valve.name=Valve atmosphérique +item.atomic_battery.name=Batterie atomique +item.beam_core.name=Rayon énergétique +item.bucket_sludge.name=Seau de bourbe bactérienne +item.bucket_sulphuric_acid.name=Seau à acide sulfurique +item.canister.gas.name=Gas +item.canister.liquid_argon.full.name=Réservoir d'argon liquide plein +item.canister.liquid_argon.name=Liquide +item.canister.liquid_argon.partial.name=Réservoir d'argon liquide +item.canister.liquid_nitrogen.full.name=Réservoir d'azote liquide plein +item.canister.liquid_nitrogen.name=Liquide +item.canister.liquid_nitrogen.partial.name=Réservoir d'azote liquide +item.canister.lox.full.name=Réservoir d'oxygène liquide plein +item.canister.lox.name=OL +item.canister.lox.partial.name=Réservoir d'oxygène liquide +item.carbon_fragments.name=Carbone fragmenté +item.compressed_desh.name=Silicium comprimé +item.compressed_titanium.name=Titane compressé +item.desh_axe.name=Hache en silicium +item.desh_boots.name=Bottes en silicium +item.desh_chestplate.name=Plastron en silicium +item.desh_helmet.name=Casque en silicium +item.desh_hoe.name=Houe en silicium +item.desh_leggings.name=Jambières en silicium +item.desh_pick.name=Pioche en silicium +item.desh_pick_slime.description.name=Peut récolter les œufs de vase +item.desh_pick_slime.name=Pioche attachante +item.desh_spade.name=Pelle en silicium +item.desh_stick.name=Bâton de silicium +item.desh_sword.name=Épée en silicium +item.empty_gas_canister.name=Réservoir vide +item.engine_t2.name=Réacteur lourd +item.fluid_manip.name=Manipulateur de fluides +item.grapple.name=Grappin +item.heavy_nose_cone.name=Coiffe de fusée lourde +item.ingot_desh.name=Lingot de silicium +item.ingot_lead.name=Lingot de plomb +item.ingot_titanium.name=Lingot de titane +item.key.t2.name=Clé de Donjon Niveau 2 +item.key.t3.name=Clé de Donjon Niveau 3 +item.methane_canister.name=Réservoir de méthane plein +item.methane_canister_partial.name=Réservoir de méthane +item.orion_drive.name=Pilote Orion +item.prelaunch_checklist.name=Liste de contrôle avant le lancement +item.raw_desh.name=Silicium brut +item.reinforced_plate_t2.name=plaque renforcée +item.reinforced_plate_t3.name=Plaquage lourd +item.rocket_fins_t2.name=Aileron de fusée lourd +item.rocket_t2.cargo_rocket.name=Cargaison de fusée +item.rocket_t2.t2Rocket.name=Fusée niveau 2 +item.rocket_t3.t3Rocket.name=Fusée Niveau 3 +item.shard_iron.name=Pointe de fer +item.shard_titanium.name=Pointe de titane +item.shield_controller.description=Le contrôleur de bouclier protège l'armure des dommages causés par la corrosion atmosphérique +item.shield_controller.name=Contrôleur de bouclier +item.slimeling_cargo.name=Sac à vase +item.thermal_boots.name=Bouclier thermique (bottes) +item.thermal_boots_t2.name=Bouclier thermique (bottes) +item.thermal_chestplate.name=Bouclier thermique (plastron) +item.thermal_chestplate_t2.name=Bouclier thermique (plastron) +item.thermal_cloth.name=Bouclier thermique +item.thermal_helm.name=Bouclier thermique (casque) +item.thermal_helm_t2.name=Bouclier thermique (casque) +item.thermal_leggings.name=Bouclier thermique (pantalon) +item.thermal_leggings_t2.name=Bouclier thermique (pantalon) +item.tier2.desc=Niveau 2 +item.tier3.desc=Niveau 3 +item.titanium_axe.name=Hache en titane +item.titanium_boots.name=Bottes en titane +item.titanium_chestplate.name=Plastron en titane +item.titanium_helmet.name=Casque en titane +item.titanium_hoe.name=Houe en titane +item.titanium_leggings.name=Pantalon en titane +item.titanium_pickaxe.name=Pioche en titane +item.titanium_shovel.name=Pelle en titane +item.titanium_sword.name=Epée en titane +item.volcanic_pickaxe.description=Mines une zone 3x3 en fonction de la direction vers laquelle vous faites face +item.volcanic_pickaxe.name=Pioche volcanique +planet.asteroids=Astéroïdes +planet.mars=Mars +schematic.astro_miner.name=Astro-mineur +schematic.cargo_rocket.name=Cargaison automatique de fusée +schematic.rocket_t3.name=Fusée Niveau 3 +tile.asteroids_block.asteroid_rock_0.name=Roche d'astéroïde +tile.asteroids_block.asteroid_rock_1.name=Roche d'astéroïde +tile.asteroids_block.asteroid_rock_2.name=Roche d'astéroïde +tile.asteroids_block.ore_aluminum_asteroids.name=Minerais d'aluminium +tile.asteroids_block.ore_ilmenite_asteroids.name=Minerais d'ilmenite +tile.asteroids_block.ore_iron_asteroids.name=Minerais de fer +tile.beam_receiver.description=Les récepteurs de faisceau sont connectés à l'entrée et à la sortie de la machine à énergie, pour transférer de l'énergie à l'aide de faisceaux. +tile.beam_receiver.name=Récepteur de faisceau +tile.beam_reflector.description=Les réflecteurs de faisceau sont utilisés pour réorienter les faisceaux d'énergie de source en destination. Clic droit pour parcourir les cibles. +tile.beam_reflector.name=Réflecteur de faisceau +tile.cavern_vines.description=Les vignes caverneuses sont dangereuses pour les êtres vivants: elles les enroulent et les traînent vers le haut. +tile.cavern_vines.name=Vignes caverneux +tile.crashed_probe.name=Sonde coupé +tile.creeper_egg.description=Les oeufs de Creeper spawn dans des donjons de Mars: c'est un prédateur furieux lors d'explosions. +tile.creeper_egg.name=œuf de Creeper +tile.cryo_chamber.description=Les chambres cryogéniques permettent au joueur de dormir pendant la journée, guérissant une petite quantité de santé, mais a un temps de recharge. +tile.dense_ice.name=Glace dense +tile.electrolyzer.description=Transforme l'eau en hydrogène (utile pour le synthétiseur de méthane) et l'oxygène. +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.geothermal_generator.description=Lorsqu'il est placé sur un bec de vapeur de soufre valide, génère de l'énergie à un débit oscillant +tile.geothermal_generator.name=Générateur géothermique +tile.hydrogen_pipe.description=Tuyau d'hydrogène transférera l'hydrogène du réservoir d'essence interne d'une machine vers un autre. +tile.hydrogen_pipe.name=Tuyau d'hydrogène +tile.launch_controller.description=Launch Controllers are used to customize launch behaviour, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Minerai de cuivre +tile.mars.deshmars.name=Minerai de silicium +tile.mars.ironmars.name=Minerai de fer +tile.mars.marscobblestone.name=Pierre +tile.mars.marsdeco.name=Bloc de silicium +tile.mars.marsdirt.name=Roche Martienne souterraine +tile.mars.marsdungeon.name=Mur de Donjon +tile.mars.marsgrass.name=Roche Martienne de surface +tile.mars.marsstone.name=Roche Martienne +tile.mars.tinmars.name=Minerai d'étain +tile.mars_machine.0.name=Terraformeur +tile.mars_machine.1.name=Chambre cryogénique +tile.mars_machine.2.name=Contrôleur de lancement +tile.mars_machine.4.name=Liquéfieur de gas +tile.mars_machine.5.name=Synthétiseur de méthane +tile.mars_machine.6.name=Electrolyseur d'eau +tile.mars_stairs_brick.name=Escalier de briques de donjon Marsien +tile.mars_stairs_cobblestone.name=Escalier de pavés Marsien +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=La base de l'astro-mineur est le point de chargement d'un astro-mineur. C'est gros ... essayez de faire un cube de 2 x 2 x 2 avec ceux-là +tile.miner_base.name=Base d'astro-mineur +tile.miner_base_full.name=Base d'astro-mineur +tile.slab_gc_half.mars_bricks_slab.name=Dalle de briques de donjon Marsien +tile.slab_gc_half.mars_slab.name=Dalle de pavés Marsien +tile.slimeling_egg.blue.name=œuf de vase bleu +tile.slimeling_egg.description=Oeuf de Vase, une fois craqué à mains nues d'un joueur, se transforme en un animal de compagnie. +tile.slimeling_egg.red.name=œuf de vase rouge +tile.slimeling_egg.yellow.name=œuf de vase jaune +tile.sludge.name=Boues bactérienne +tile.spout.name=Bec de vapeur +tile.sulphuric_acid.name=Acide sulfurique +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Système de téléportation à courte portée +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Les coffre au trésor de niveau 2 seront généré dans les donjons de Mars. ils se débloquent après la défaite du boss final. +tile.treasure_t2.name=Coffre au trésor Niveau 2 +tile.treasure_t3.description=Les coffre au trésors niveau 3 ne sont pas utilisé actuellement. +tile.treasure_t3.name=Coffre de niveau 3 +tile.venus.dungeon_brick_venus_1.name=Venus Dungeon Brick I +tile.venus.dungeon_brick_venus_2.name=Venus Dungeon Brick II +tile.venus.venus_ore_aluminum.name=Minerai d'aluminium +tile.venus.venus_ore_copper.name=Minerai de cuivre +tile.venus.venus_ore_galena.name=Minerai de Galena +tile.venus.venus_ore_quartz.name=Minerai de Quartz +tile.venus.venus_ore_silicon.name=Minerais de silicium +tile.venus.venus_ore_tin.name=Minerai d'étain +tile.venus.venus_rock_0.name=Roche Molle Vénus +tile.venus.venus_rock_1.name=Roche Dure Vénus +tile.venus.venus_rock_2.name=Roche Volcanique Vénus +tile.venus.venus_rock_3.name=Pierre ponce +tile.venus_rock_scorched.name=Roche Roussie Vénus +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. ##NEEDS TRANSLATE## +tile.walkway.walkway.name=Passerelle +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.name=Passerelle +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.name=Passerelle +tile.wall_gc.mars.name=Mur de pavés Marsien +tile.wall_gc.mars_bricks.name=Mur de briques de donjon Marsien +tile.web_torch.web_torch_0.name=Chaîne Web +tile.web_torch.web_torch_1.description=Torche de Glowstone +tile.web_torch.web_torch_1.name=Chaîne Web diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hr_hr.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hr_hr.lang new file mode 100644 index 00000000..a52c2ecf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hr_hr.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Ulazna Kapsula +container.launchcontroller.name=Kontroler Lansiranja +container.mars_lander.name=Baloni za slijetanje +container.short_range_telepad.name=Teleporter s Malom Daljinom +container.tile_terraformer.name=Teraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astro Rudar +entity.creeper_boss.name=Evoulirani Boss Kripera +entity.entry_pod.name=Kapsula za ulaz +entity.grapple_hook.name=Kuka +entity.landing_balloons.name=Baloni za sletanje +entity.projectile_tnt.name=Projektilni TNT +entity.rocket_cargo.name=Teretna Raketa +entity.rocket_t2.name=Raketa Ranga 2 +entity.rocket_t3.name=Rang 3 Raketa +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Mali Asteroid +fluid.argon=Argon +fluid.atmosphericgases=Atmosferni Plinovi +fluid.bacterialsludge=Bakterijska Sluz +fluid.carbondioxide=CO2 +fluid.fuel=Gorivo +fluid.helium=Helij +fluid.hydrogen=Vodik +fluid.liquidargon=Tekuči Argon +fluid.liquidmethane=Tekuči Metan +fluid.liquidnitrogen=Tekuči Dušik +fluid.liquidoxygen=Tekuči Kisik +fluid.methane=Metan +fluid.nitrogen=Dušik +fluid.oxygen=Kisik +gas.carbondioxide.name=Ugljični Dioksid +gas.nitrogen.name=Dušik +gas.oxygen.name=Kisik +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planeti Opcije +gui.button.liquefy.name=Procesiram +gui.button.liquefy_stop.name=Stani +gui.button.recall.name=Opoziv +gui.carbon_slot.desc.0=Fragmentirani Ugljik može ići ovdje +gui.cargorocket.status.launched.0=Več +gui.cargorocket.status.launched.1=lansirano +gui.cargorocket.status.waiting.0=Čekam +gui.cargorocket.status.waiting.1=paljenje +gui.choose_planet.desc.mars=Pogodno za Život#Nema Kisika#Gravitacija: 38% +gui.cryogenic.chat.cant_use=Nemogu koristiti ovo još %d sekundi +gui.gas_input.desc.0=Probaj Postaviti Methan$Gas Karnister tamo +gui.gas_input.desc.1=(Možda Altrenativno,$jedan Atmosferni Ventil) +gui.gas_tank.desc.0=Gas Skladište +gui.gas_tank_compressed.desc.0=Skladište plina (komprimiranog) +gui.hydrogen_input.desc.0=To Uzima spremnik vodika +gui.hydrogen_input.desc.1=ili jedan atmosferni ventil +gui.launch_controller.desc.0=Ovo je Frekvencija ovog$kontrolera +gui.launch_controller.desc.1=Frekvencija odredišta +gui.launch_controller.desc.2=Ukloniti lansirnu rampu +gui.launch_controller.desc.3=Kada su te kriterije ispunjene,$raketa će se lansirati +gui.launch_controller.desc.4=Skrij frekvenciju odredišta$od drugih igrača +gui.liquid_output.desc.2=Spremnik Ukapljenog Plina +gui.liquid_tank.desc.0=Spremnik za Tekučine +gui.message.address.name=Adresa +gui.message.astro_miner.fail=Ova baza već ima Astro Rudara! +gui.message.astro_miner1.fail=Mjesto za parkiranje je zauzeto: +gui.message.astro_miner1_a.fail=Astro Rudareva ruta je blokirana: +gui.message.astro_miner2.fail=To bi bio jedan Astro Rudar previše! +gui.message.astro_miner3.fail=Astro Rudareva baza je obrisana! +gui.message.astro_miner4.fail=Astro Rudar nema više energije i nemože se vratiti u bazu! +gui.message.astro_miner5.fail=Astro Rudareva ruta do baze je blokirana! +gui.message.astro_miner6.fail=Astro Rudar je gotov sa kopanjem, i sada će stati! +gui.message.astro_miner7.fail=Nema ničega da Astro Rudar kopa u svemirskoj stanici! +gui.message.astro_miner8.fail=Drugi Astro Rudar detektiran je u bazi, prvi će se sada ugasiti. +gui.message.bubble_exp.name=Balon se Raširuje +gui.message.cargo_full.name=Teret utovaren +gui.message.cargo_unloaded.name=Teret izvađen +gui.message.dest_address.name=Meta adrese +gui.message.dest_frequency.name=Odredišna frekvencija +gui.message.enable_grass.name=Dozvoli travu +gui.message.enable_trees.name=Dozvoli drva +gui.message.frequency.name=Frekvencija +gui.message.fully_fueled.name=Pun goriva +gui.message.grapple.fail=Trebam niti da mogu baciti! +gui.message.grass.name=Trava +gui.message.instant.name=Odmah +gui.message.invalid_address.name=Netočna Adresa +gui.message.invalid_freq.name=Nepoznata Frekvencija +gui.message.invalid_target_address.name=Netočna adresa mete +gui.message.launch_when.name=Lansiraj Kada +gui.message.low_energy.name=Malo energije +gui.message.no_bonemeal.name=Nema dovoljno usitnjenih kosti +gui.message.no_energy.name=Nema energije +gui.message.no_saplings.name=Nema dovoljno sjemenki drveta +gui.message.no_seeds.name=Nema dovoljno sjemenki +gui.message.no_valid_blocks.name=Nema blokova u balonu +gui.message.no_water.name=Nema dovoljno vode +gui.message.not_enough.name=Nema dovoljno +gui.message.not_enough_energy.name=Nema dovoljno energije! +gui.message.not_set.name=Nije postavljeno +gui.message.one_min.name=1 Minuta +gui.message.receiving_active.name=Čekam aktiviranje +gui.message.redstone_sig.name=Signal crvenog kamena +gui.message.remove_pad.name=Obriši Pad +gui.message.sending_active.name=Šaljem aktivaciju +gui.message.success.name=Uspješno +gui.message.target_no_energy.name=Meta nema Energije! +gui.message.telepad_not_found.name=Teleporter nije pronađen! +gui.message.telepad_too_far.name=Meta je previše daleko! (Max %d) +gui.message.telepad_wrong_dim.name=Meta je u krivoj dimenziji! +gui.message.ten_sec.name=10 Sekundi +gui.message.terraforming.name=Teraformiram +gui.message.thirty_sec.name=30 Sekundi +gui.message.trees.name=Drva +gui.message.with_atmosphere0.name=Na planetu s puno +gui.message.with_atmosphere1.name=u Atmosferi +gui.message.zero_water.name=Nema Vode! +gui.methane_output.desc.2=Spremnik Metana +gui.miner.docked=Parkiran +gui.miner.docking=Parkira +gui.miner.mined=Iskopano +gui.miner.mining=Kopa +gui.miner.offline=Ugašen +gui.miner.out_of_range=Izvan dometa +gui.miner.returning=Dolazi +gui.miner.stuck=Zapeo: +gui.miner.travelling=Putuj +gui.slimeling.button.follow=Prati +gui.slimeling.button.sit=Sjedi +gui.slimeling.chat.wrong_player=Ovo nije moj Sludeling! +gui.slimeling.damage=Oštečenje +gui.slimeling.following=Prati +gui.slimeling.food=Najdraža Hrana +gui.slimeling.kills=Ubojstva +gui.slimeling.name=Ime +gui.slimeling.owner=Vlasnik +gui.slimeling.scale=Veličina +gui.slimeling.sitting=Sjedi +gui.status.liquefying.name=Punim +gui.status.needs_carbon.name=Treba Carbona +gui.status.nogas.name=Nema Gasa +gui.status.processing.name=Sintiziram +gui.status.tankfull.name=Tank Pun +gui.status.tanksfull.name=Tankovi Puni +gui.telepad.desc.0=Ovo je teleporterova$Adresa +gui.telepad.desc.1=Adresiraj na drugi teleporter.$Bića će biti poslana ondje. +gui.terraformer.desc.0=Vodeni Tank +gui.water_bucket_slot.desc=Stavi vodu ovdje +item.astro_miner.name=Astro Rudar +item.atmospheric_valve.name=Atmosferski Ventil +item.beam_core.name=Jezgra +item.bucket_sludge.name=Bakterijska Sluz +item.canister.gas.name=Plin +item.canister.liquid_argon.full.name=Pun Karnister Tekučeg Argona +item.canister.liquid_argon.name=Argon +item.canister.liquid_argon.partial.name=Karnister Tekučeg Argona +item.canister.liquid_nitrogen.full.name=Pun Karnister Tekučeg Nitrogena +item.canister.liquid_nitrogen.name=Nitrogen +item.canister.liquid_nitrogen.partial.name=Karnister Tekučeg Nitrogena +item.canister.lox.full.name=Pun Karnister Tekučeg Kisika +item.canister.lox.name=TK +item.canister.lox.partial.name=Karnister Tekučeg Kisika +item.carbon_fragments.name=Fragmirani Carbon +item.compressed_desh.name=Prerađeni Desh +item.compressed_titanium.name=Prerađeni Titanium +item.desh_axe.name=Desh Sjekira +item.desh_boots.name=Desh Čizme +item.desh_chestplate.name=Desh Prsni Oklop +item.desh_helmet.name=Desh Šljem +item.desh_hoe.name=Desh Motika +item.desh_leggings.name=Desh Gamaše +item.desh_pick.name=Desh Kramp +item.desh_pick_slime.description.name=Može Uzeti Slimeling Jaja +item.desh_pick_slime.name=Ljeplivi Desh Kramp +item.desh_spade.name=Desh Lopata +item.desh_stick.name=Štapić od Desha +item.desh_sword.name=Desh Mac +item.empty_gas_canister.name=Prazni Karnister +item.engine_t2.name=Snažni Motor Rakete +item.fluid_manip.name=Manipulator Tekučinom +item.grapple.name=Kuka +item.heavy_nose_cone.name=Snažni Nos Rakete +item.ingot_desh.name=Desh Poluga +item.ingot_titanium.name=Poluga Titanuma +item.key.t2.name=Tamnički Ključ Ranga 2 +item.methane_canister.name=Pun Karnister Metana +item.methane_canister_partial.name=Karnister Metana +item.orion_drive.name=Orion Disk +item.raw_desh.name=Nerefinirani Desh +item.reinforced_plate_t2.name=Snažna Ploča Ranga 2 +item.reinforced_plate_t3.name=Snažna Ploča Ranga 3 +item.rocket_fins_t2.name=Snažni Rep Rakete +item.rocket_t2.cargo_rocket.name=Raketa s Teretom +item.rocket_t2.t2Rocket.name=Raketa Ranga 2 +item.rocket_t3.t3Rocket.name=Raketa Ranga 3 +item.shard_iron.name=Krhotina Željeza +item.shard_titanium.name=Krhotina Titaniuma +item.slimeling_cargo.name=Slimelingova Inventory Torba +item.thermal_boots.name=Termalne Čizme +item.thermal_chestplate.name=Termali Prsni Oklop +item.thermal_cloth.name=Termalna Odječa +item.thermal_helm.name=Termalni Šljem +item.thermal_leggings.name=Termalne Gamaše +item.tier2.desc=Rang 2 +item.tier3.desc=Rang 3 +item.titanium_axe.name=Titanium Sjekira +item.titanium_boots.name=Titanium Čizme +item.titanium_chestplate.name=Titanium Prsni Oklop +item.titanium_helmet.name=Titanium Šljem +item.titanium_hoe.name=Titanium Motika +item.titanium_leggings.name=Titanium Gamaše +item.titanium_pickaxe.name=Titanium Kramp +item.titanium_shovel.name=Titanium Lopata +item.titanium_sword.name=Titanium Mač +planet.asteroids=Asteroidi +planet.mars=Mars +schematic.astro_miner.name=Astro Rudar +schematic.cargo_rocket.name=Automatska Teret Raketa +schematic.rocket_t3.name=Raketa Ranga 3 +tile.asteroids_block.asteroid_rock_0.name=Asteroidski Kamen +tile.asteroids_block.asteroid_rock_1.name=Asteroidski Kamen +tile.asteroids_block.asteroid_rock_2.name=Asteroidski Kamen +tile.asteroids_block.ore_aluminum_asteroids.name=Ruda Aluminija +tile.asteroids_block.ore_ilmenite_asteroids.name= Ruda Ilmenita +tile.asteroids_block.ore_iron_asteroids.name=Ruda Željeza +tile.beam_receiver.description=Prijemnici su povezani s ulazom stroja, za prijenos energije pomoću zrake. +tile.beam_receiver.name=Energetski Zračni Odašiljac +tile.beam_reflector.description=Reflektori se koriste za preusmjeravanje energije zrake od izvora do odredišta. Može se kliknuti na njega da ode na drugi cilj. +tile.beam_reflector.name=Energetski Zračni Reflektor +tile.cavern_vines.description=Kavernozirane Lijane su opasne za živa biča, mogu te ubiti. +tile.cavern_vines.name=Kavernozni Vine +tile.creeper_egg.description=Kriperska jaja će se stvarati u Marsovskim tamnicama, stvarajuči predatora koji eksplodira. +tile.creeper_egg.name=Jaje Kripera +tile.cryo_chamber.description=Kriogenska Kapsula će omogućiti igraču da spava tijekom dana, liječeći malu količinu zdravlja, ali ima čekanje. +tile.dense_ice.name=Gusti Led +tile.electrolyzer.description=Pretvara vodu u vodik (korisno za metan sintisajzer) i kisik. +tile.gas_liquefier.description=Ukapljeni plinovi, bilo od atmosfere ili iz spremnika. Ukapljeni metan čini dobro raketno gorivo! +tile.hydrogen_pipe.description=Cijev za hidrogen če prenesti gorivo iz jedne mašine u drugu. +tile.hydrogen_pipe.name=Hidrogenska Cijev +tile.launch_controller.description=Kontroleri Lansiranja se koriste za prilagodbu ponašanja pri pokretanju, uključujući kriterije za lansiranje i odredište za pokretanje na automatsku raketsku rampu. +tile.mars.coppermars.name=Ruda Bakra +tile.mars.deshmars.name=Desh Ruda +tile.mars.ironmars.name=Željezna Ruda +tile.mars.marscobblestone.name=Prerađeni Kamen +tile.mars.marsdeco.name=Blok od Desha +tile.mars.marsdirt.name=Marsovska Trava +tile.mars.marsdungeon.name=Zid od Tamnice +tile.mars.marsgrass.name=Marsovska Površina +tile.mars.marsstone.name=Marsovski Kamen +tile.mars.tinmars.name=Limena Ruda +tile.mars_stairs_cobblestone.name=Marsovske Kamene Stube +tile.mars_stairs_brick.name=Marskovse Ciglene Stube +tile.mars_machine.0.name=Teraformer +tile.mars_machine.1.name=Komora Za Spavanje +tile.mars_machine.2.name=Kontrola Leta +tile.mars_machine.4.name=Plinski Liqufier +tile.mars_machine.5.name=Metan Sintisajzer +tile.mars_machine.6.name=Vodeni Elektrizer +tile.methane_synthesizer.description=S izvorom vodika i izvora ugljika, to proizvodi metan za daljnju obradu u ukapljenom plinu. +tile.miner_base.description=Astro Rudareva baza je mjesto gdje če se on parkirati. Veliko je ...probaj 2 x 2 x 2 blokove s njima. +tile.miner_base.name=Astro Rudarska Baza +tile.slab_gc_half.mars_bricks_slab.name=Marskovska Ciglena Ploča +tile.slab_gc_half.mars_slab.name=Marsovska Kamena Ploča +tile.slimeling_egg.blue.name=Plavo Slimeling Jaje +tile.slimeling_egg.description=Slimeling Jaja, nakon što su strgane s rukama nekoliko puta onda če stvoriti ljubimca. +tile.slimeling_egg.red.name=Crveno Slimeling Jaje +tile.slimeling_egg.yellow.name=Žuto Slimeling Jaje +tile.sludge.name=Bakterijska Sluz +tile.telepad_short.description=Teleporter s malom daljinom se koristi za prijenos igrača i bića na male daljine (250 blokova) kada je povezan s drugim teleporterom. +tile.telepad_short.name=Teleporter s Malom Daljinom +tile.terraformer.description=Teraformeri se koriste da dodaju malo zelenila na planet kao što je trava, voda i drveče. +tile.treasure_t2.description=Rang 2 Tamnički Ključ se može pronači u tamnicama na Marsu, ali prvo moraš pobijediti šefa. +tile.treasure_t2.name=Tier 2 Škrinja sa Blagom +tile.treasure_t3.description=Rang 3 Škrinja s blagom se mogu pronači u asteroidskoj dimenziji u tamnicama. +tile.treasure_t3.name=Rang 3 Škrinje s Blagom +tile.walkway.walkway.description=Staze se koriste za dekorativne svrhe te za pokretanje energije/zraka ispod igrača. +tile.walkway.walkway.name=Staza +tile.walkway.walkway_pipe.description=Staze s cijevima za kisik se koriste za pokretanje kisika ispod potpuno čvrste prohodne površine. +tile.walkway.walkway_pipe.name=Staza s Cijevima za Zrakom +tile.walkway.walkway_wire.description=Staze s cijevima za struju se koriste za pokretanje struje ispod potpuno čvrste prohodne površine. +tile.walkway.walkway_wire.name=Staza s Cijevima za Strujom +tile.wall_gc.mars.name=Marskovski Kameni Zid +tile.wall_gc.mars_bricks.name=Marskovki Cigleni Zid diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hu_hu.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hu_hu.lang new file mode 100644 index 00000000..23d303cc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hu_hu.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Érkezőkapszula +container.launchcontroller.name=Távvezérlo +container.mars_lander.name=Landing Balloons ##NEEDS TRANSLATE## +container.short_range_telepad.name=Rövidtávú Teleporter +container.tile_terraformer.name=Növényülteto +dimension.mars.name=Mars +entity.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +entity.creeper_boss.name=Vejlett Creeper-Fogonosz +entity.entry_pod.name=Kapsula za ulaz +entity.grapple_hook.name=Kuka +entity.landing_balloons.name=Landing Balloons ##NEEDS TRANSLATE## +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Teretna Raketa +entity.rocket_t2.name=Raketa Ranga 2 +entity.rocket_t3.name=Rang 3 Raketa +entity.slimeling.name=Nyálkahernyó +entity.sludgeling.name=Iszaphernyó +entity.small_asteroid.name=Mali Asteroid +fluid.argon=Argongáz +fluid.atmosphericgases=Légköri Gázok +fluid.bacterialsludge=Bacterial Sludge ##NEEDS TRANSLATE## +fluid.carbondioxide=Széndioxid-Gáz +fluid.fuel=Üzemanyag +fluid.helium=Héliumgáz +fluid.hydrogen=Hidrogéngáz +fluid.liquidargon=Folyékony Argon +fluid.liquidmethane=Folyékony Metán +fluid.liquidnitrogen=Folyékony Nitrogén +fluid.liquidoxygen=Folyékony Oxigén +fluid.methane=Metángáz +fluid.nitrogen=Nitrogéngáz +fluid.oxygen=Oxigéngáz +gas.carbondioxide.name=Szén-Dioxid +gas.nitrogen.name=Nitrogén +gas.oxygen.name=Oxigén +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Folyósítás Indítása +gui.button.liquefy_stop.name=Folyósítás Leállítása +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fragmented Carbon can go here ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.0=Already ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.1=Launched ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.0=Waiting for ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.1=ignition ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Lakható#Nincs Lélegezheto légkör#Gravitáció: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds ##NEEDS TRANSLATE## +gui.gas_input.desc.0=Ide Tegyen Egy $ Töltött Metán-Kannát, $ Vagy Egy Légköri Szelepet +gui.gas_input.desc.1=(Egy Bolygón Ahol Sok $ Metángáz $ -Van A Légkörben) +gui.gas_tank.desc.0=Gázraktár +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.0=Ide Tegyen Egy +gui.hydrogen_input.desc.1=Töltött Hidrogén-Kannát, $ Vagy Egy Légköri Szelepet +gui.launch_controller.desc.0=Ez A Távvezérlo Saját $ Frekvenziája +gui.launch_controller.desc.1=A Célpontnak A Frekvenciája, $ Ahova A Rakéta Küldve Lesz. +gui.launch_controller.desc.2=Magával Vigye-e A Rakéta $ A Kilövoállást +gui.launch_controller.desc.3=Amikor Ez Teljesül, $ A Kilövés Megkezdodik +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=Folyósított Gáz-Tartály +gui.liquid_tank.desc.0=Folyadéktartály +gui.message.address.name=Saját Frekvencia +gui.message.astro_miner.fail=This base already has an Astro Miner! ##NEEDS TRANSLATE## +gui.message.astro_miner1.fail=The docking area is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=That would be one Astro Miner too many! ##NEEDS TRANSLATE## +gui.message.astro_miner3.fail=The Astro Miner's base was removed! ##NEEDS TRANSLATE## +gui.message.astro_miner4.fail=The Astro Miner ran out of energy and cannot get back to base! ##NEEDS TRANSLATE## +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! ##NEEDS TRANSLATE## +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! ##NEEDS TRANSLATE## +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=A Buborék Terjszkedik... +gui.message.cargo_full.name=Ha A Teher Be Van Rakodva +gui.message.cargo_unloaded.name=Ha A Teher Ki Van Rakodva +gui.message.dest_address.name=Célpont Frekvenciája +gui.message.dest_frequency.name=Célpont Frekvenciája +gui.message.enable_grass.name=Fu Bekapcsolása +gui.message.enable_trees.name=Fák Bekapcsolása +gui.message.frequency.name=Frekvencia +gui.message.fully_fueled.name=Ha Teljesen Fel Van Töltve Üzemanyaggal +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! ##NEEDS TRANSLATE## +gui.message.grass.name=Fu +gui.message.instant.name=Azonnal +gui.message.invalid_address.name=Érvénytelen Saját Frekvencia +gui.message.invalid_freq.name=Érvénytelen Saját Frekvencia +gui.message.invalid_target_address.name=Érvénytelen A Célpont Frekvenciája +gui.message.launch_when.name=Kilövés indítása: +gui.message.low_energy.name=Nincs Elég Energia +gui.message.no_bonemeal.name=Nincs Elég Csontliszt +gui.message.no_energy.name=Nincs Energia +gui.message.no_saplings.name=Nincs Elég Facsemete +gui.message.no_seeds.name=Nincsen Elég Vetomag +gui.message.no_valid_blocks.name=Nincsenek Érvényes Blockok A Buborékban +gui.message.no_water.name=Nincs Elég Víz +gui.message.not_enough.name=Nem Elég +gui.message.not_enough_energy.name=Nincs Elég Energia +gui.message.not_set.name=Nincs Beállítva +gui.message.one_min.name=1 Másodperc Késleltetéssel +gui.message.receiving_active.name=Fogadás Elérhető +gui.message.redstone_sig.name=Vörösko-Jelre +gui.message.remove_pad.name=Kilövoállás Elszállítása +gui.message.sending_active.name=Küldés Elérhető +gui.message.success.name=Sikeres +gui.message.target_no_energy.name=A Célpontnak Nincs Elég Energiája +gui.message.telepad_not_found.name=Teleporter Nem Találva +gui.message.telepad_too_far.name=Célpont Túl Messze Van (Hatósugár: %d) +gui.message.telepad_wrong_dim.name=A Célpont Érvénytelen Dimenzióban Van +gui.message.ten_sec.name=10 Másodperc Késleltetéssel +gui.message.terraforming.name=Növényültetés Folyamatban +gui.message.thirty_sec.name=30 Másodperc Késleltetéssel +gui.message.trees.name=Fák +gui.message.with_atmosphere0.name=Egy Bolygón Ahol Sok +gui.message.with_atmosphere1.name=-Van A Légkörben +gui.message.zero_water.name=No water! ##NEEDS TRANSLATE## +gui.methane_output.desc.2=Metán-Tartály +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Follow ##NEEDS TRANSLATE## +gui.slimeling.button.sit=Sit ##NEEDS TRANSLATE## +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Attack Damage ##NEEDS TRANSLATE## +gui.slimeling.following=Following ##NEEDS TRANSLATE## +gui.slimeling.food=Favorite food ##NEEDS TRANSLATE## +gui.slimeling.kills=Kills ##NEEDS TRANSLATE## +gui.slimeling.name=Name ##NEEDS TRANSLATE## +gui.slimeling.owner=Owner ##NEEDS TRANSLATE## +gui.slimeling.scale=Scale ##NEEDS TRANSLATE## +gui.slimeling.sitting=Sitting ##NEEDS TRANSLATE## +gui.status.liquefying.name=Folyósítás Folyamatban +gui.status.needs_carbon.name=Szénpor Szügséges +gui.status.nogas.name=Nincs Elég Gáz +gui.status.processing.name=Metánfejlesztés Folyamatban +gui.status.tankfull.name=A Tartály Megtelt +gui.status.tanksfull.name=A Tartályok Megteltek +gui.telepad.desc.0=Ez A Telepoerer $ Saját Frekvenciája +gui.telepad.desc.1=A Célpont Teleporter $ Frekvenciája. +gui.terraformer.desc.0=Víztartály +gui.water_bucket_slot.desc=Place water buckets here ##NEEDS TRANSLATE## +item.astro_miner.name=Astro Rudar +item.atmospheric_valve.name=Légköri Szelep +item.beam_core.name=Sugárgerjesztő +item.bucket_sludge.name=Bacterial Sludge Bucket ##NEEDS TRANSLATE## +item.canister.gas.name=Gáz #Metángáz Töltöttségi-Szintje Röviden +item.canister.liquid_argon.full.name=Teletöltött Folyékony Argon-Kanna +item.canister.liquid_argon.name=Folyadék #Folyékony Argon Töltöttségi Szintje Röviden +item.canister.liquid_argon.partial.name=Nem Teljesen Teletöltött Folyékony Argon-Kanna +item.canister.liquid_nitrogen.full.name=Teletöltött Folyékony Nitrogén-Kanna +item.canister.liquid_nitrogen.name=Folyadék #Folyékony Nitrogén Töltöttségi Szintje Röviden +item.canister.liquid_nitrogen.partial.name=Nem Teljesen Teletöltött Folyékony Nitrogén-Kanna +item.canister.lox.full.name=Pun Karnister Tekučeg Kisika +item.canister.lox.name=TK +item.canister.lox.partial.name=Karnister Tekučeg Kisika +item.carbon_fragments.name=Szénpor +item.compressed_desh.name=Préselt Desh +item.compressed_titanium.name=Préselt Titánium +item.desh_axe.name=Desh Balta +item.desh_boots.name=Desh Bakancs +item.desh_chestplate.name=Desh Mellvért +item.desh_helmet.name=Desh Sisak +item.desh_hoe.name=Desh Kapa +item.desh_leggings.name=Desh Lábszárvédo +item.desh_pick.name=Desh Csákány +item.desh_pick_slime.description.name=Be lehet vele takarítani a Nyálkahernyó-Tojásokat +item.desh_pick_slime.name=Sticky Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_spade.name=Desh Ásó +item.desh_stick.name=Deshbot +item.desh_sword.name=Desh Kard +item.empty_gas_canister.name=Üres Gáz-Kanna +item.engine_t2.name=Nehéz Rakétamotor +item.fluid_manip.name=Folyadék-Átalakító +item.grapple.name=Fogó +item.heavy_nose_cone.name=Nehéz Orrkúp +item.ingot_desh.name=Deshrúd +item.ingot_titanium.name=Titániumrúd +item.key.t2.name=2-Es Szintu Dungeon-Kulcs +item.methane_canister.name=Teletöltött Metán-Kanna +item.methane_canister_partial.name=Metán-Kanna +item.orion_drive.name=Orion Drive ##NEEDS TRANSLATE## +item.raw_desh.name=Deshpor +item.reinforced_plate_t2.name=Nehéz Borítólemez +item.reinforced_plate_t3.name=Nehéz Borítólemez +item.rocket_fins_t2.name=Nehéz Légterelő Szárny +item.rocket_t2.cargo_rocket.name=Raketa s Teretom +item.rocket_t2.t2Rocket.name=Raketa Ranga 2 +item.rocket_t3.t3Rocket.name=Raketa Ranga 3 +item.shard_iron.name=Vasszilánk +item.shard_titanium.name=Titániumszilánk +item.slimeling_cargo.name=Nyálkahernyó Eszköztár-Hátizsák +item.thermal_boots.name=Hővédő Bakancs-Bélés +item.thermal_chestplate.name=Hővédő Mellvért-Bélés +item.thermal_cloth.name=Hővégő Anyag +item.thermal_helm.name=Hővédő Sisak-Bélés +item.thermal_leggings.name=Hővédő Lábszárvégő-Bélés +item.tier2.desc=2-Es Szintu +item.tier3.desc=3-As Szintű +item.titanium_axe.name=Titánium Balta +item.titanium_boots.name=Titánium Bakancs +item.titanium_chestplate.name=Titánium Mellvért +item.titanium_helmet.name=Titánium Sisak +item.titanium_hoe.name=Titánium Kapa +item.titanium_leggings.name=Titánium Lábszárvédő +item.titanium_pickaxe.name=Titánium Csákány +item.titanium_shovel.name=Titánium Ásó +item.titanium_sword.name=Titánium Kard +planet.asteroids=Aszteroidák +planet.mars=Mars +schematic.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +schematic.cargo_rocket.name=Távvezérlésu Teherrakéta +schematic.rocket_t3.name=3-As Szintu Rakéta +tile.asteroids_block.asteroid_rock_0.name=Aszteroida-Szikla +tile.asteroids_block.asteroid_rock_1.name=Aszteroida-Szikla +tile.asteroids_block.asteroid_rock_2.name=Aszteroida-Szikla +tile.asteroids_block.ore_aluminum_asteroids.name=Aszteroidai Alumíniumérc +tile.asteroids_block.ore_ilmenite_asteroids.name=Aszteroidai-Ilmenitérc +tile.asteroids_block.ore_iron_asteroids.name=Aszteroidai-Vasérc +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. ##NEEDS TRANSLATE## +tile.beam_receiver.name=Lézersugár-Vevő +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. ##NEEDS TRANSLATE## +tile.beam_reflector.name=Lézersugár-Kibocsájtó +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. ##NEEDS TRANSLATE## +tile.cavern_vines.name=Mérgezo Inda +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=Creepertojás +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Tömör Jég +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Hydrogen Pipe ##NEEDS TRANSLATE## +tile.launch_controller.description=Launch Controllers are used to customize launch behavior, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Marsi Rézérc +tile.mars.deshmars.name=Marsi Deshérc +tile.mars.ironmars.name=Marsi Vasérc +tile.mars.marscobblestone.name=Marsi Zúzottko +tile.mars.marsdeco.name=Deshtömb +tile.mars.marsdirt.name=Marsi Felszín-Allatti Kozet +tile.mars.marsdungeon.name=Marsi Dungeon-Fal +tile.mars.marsgrass.name=Marsi Felszíni-Kozet +tile.mars.marsstone.name=Marsi ko +tile.mars.tinmars.name=Marsi Ónérc +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs ##NEEDS TRANSLATE## +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.mars_machine.0.name=Növényülteto +tile.mars_machine.1.name=Hibernációs Kamra +tile.mars_machine.2.name=Távvezérlo +tile.mars_machine.4.name=Gázfolyósító +tile.mars_machine.5.name=Metánfejleszto +tile.mars_machine.6.name=Víz-Elektrolizáló +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. ##NEEDS TRANSLATE## +tile.miner_base.name=Astro Miner Base ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab ##NEEDS TRANSLATE## +tile.slimeling_egg.blue.name=Plavo Slimeling Jaje +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=Crveno Slimeling Jaje +tile.slimeling_egg.yellow.name=Žuto Slimeling Jaje +tile.sludge.name=Bakteriális Iszap +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Rövidtávú Teleporter +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_t2.name=2-Es Szintu Kincsesláda +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. ##NEEDS TRANSLATE## +tile.treasure_t3.name=3-As Szintű Kincsesláda +tile.walkway.walkway.description=Staze se koriste za dekorativne svrhe te za pokretanje energije/zraka ispod igrača. +tile.walkway.walkway.name=Staza +tile.walkway.walkway_pipe.description=Staze s cijevima za kisik se koriste za pokretanje kisika ispod potpuno čvrste prohodne površine. +tile.walkway.walkway_pipe.name=Staza s Cijevima za Zrakom +tile.walkway.walkway_wire.description=Staze s cijevima za struju se koriste za pokretanje struje ispod potpuno čvrste prohodne površine. +tile.walkway.walkway_wire.name=Staza s Cijevima za Strujom +tile.wall_gc.mars.name=Mars Cobblestone Wall ##NEEDS TRANSLATE## +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall ##NEEDS TRANSLATE## diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/it_it.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/it_it.lang new file mode 100644 index 00000000..b3fc957d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/it_it.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Entry Pod +container.launchcontroller.name=Controllore del lancio +container.mars_lander.name=Palloni da Atterraggio +container.short_range_telepad.name=Teletrasportatore a corto raggio +container.tile_terraformer.name=Terraformer +dimension.mars.name=Marte +entity.astro_miner.name=Astro Miner +entity.creeper_boss.name=Creeper Boss Evoluto +entity.entry_pod.name=Entry Pod +entity.grapple_hook.name=Uncino del Rampino +entity.landing_balloons.name=Palloni da Atterraggio +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Razzo-Cargo +entity.rocket_t2.name=Razzo di Livello 2 +entity.rocket_t3.name=Razzo di Livello 3 +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Asteroide Piccolo +fluid.argon=Argon +fluid.atmosphericgases=Gas Atmosferici +fluid.bacterialsludge=Fango Batterico +fluid.carbondioxide=Anidride Carbonica +fluid.fuel=Carburante +fluid.helium=Elio +fluid.hydrogen=Idrogeno +fluid.liquidargon=Argon Liquido +fluid.liquidmethane=Metano Liquido +fluid.liquidnitrogen=Azoto Liquido +fluid.liquidoxygen=Ossigeno Liquido +fluid.methane=Metano +fluid.nitrogen=Azoto +fluid.oxygen=Ossigeno +gas.carbondioxide.name=Anidride Carbone +gas.nitrogen.name=Azoto +gas.oxygen.name=Ossigeno +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Lavorare +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Recall +gui.carbon_slot.desc.0=Il carbone frammentato va qui +gui.cargorocket.status.launched.0=Già +gui.cargorocket.status.launched.1=Lanciato +gui.cargorocket.status.waiting.0=Aspettando +gui.cargorocket.status.waiting.1=Accensone +gui.choose_planet.desc.mars=Abitabile#Privo Di Ossigen#Gravità: 38% +gui.cryogenic.chat.cant_use=Non posso usarlo per altri %d secondi +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) +gui.gas_tank.desc.0=Deposito Di Gas +gui.gas_tank_compressed.desc.0=Deposito Di Gas (Compresso) +gui.hydrogen_input.desc.0=Ha bisogno di una tanica di idrogeno +gui.hydrogen_input.desc.1=o una valvola atmosferica +gui.launch_controller.desc.0=Questa è l'unica frequenza$del Launch Controller +gui.launch_controller.desc.1=Frequenza per lanciare il razzo verso +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch +gui.launch_controller.desc.4=Nascondi la frequenza della destinazione$da altri giocatori +gui.liquid_output.desc.2=tanica di gas liquefatto +gui.liquid_tank.desc.0=Tanica Di Liquidi +gui.message.address.name=Indirizzo +gui.message.astro_miner.fail=This base already has an Astro Miner! +gui.message.astro_miner1.fail=L'area di atterraggio è bloccata da: +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: +gui.message.astro_miner2.fail=That would be one Astro Miner too many! +gui.message.astro_miner3.fail=The Astro Miner's base was removed! +gui.message.astro_miner4.fail=The Astro Miner is low on energy and cannot get back to base! +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. +gui.message.bubble_exp.name=Espansione della bolla +gui.message.cargo_full.name=Il cargo è pieno +gui.message.cargo_unloaded.name=Il cargo è scarico +gui.message.dest_address.name=Indirizzo del Destinatario +gui.message.dest_frequency.name=Frequenza di Destinazione +gui.message.enable_grass.name=Abilita erba +gui.message.enable_trees.name=Abilita alberi +gui.message.frequency.name=Frequenza +gui.message.fully_fueled.name=Serbatoio Pieno +gui.message.grapple.fail=Ho bisogno di corda se voglio usare questo rampino! +gui.message.grass.name=Erba +gui.message.instant.name=Instantaneamente +gui.message.invalid_address.name=Indirizzo non valido +gui.message.invalid_freq.name=Frequenza Invalida +gui.message.invalid_target_address.name=Indirizzo del destinatario non valido +gui.message.launch_when.name=Lancia Quando +gui.message.low_energy.name=Energia bassa +gui.message.no_bonemeal.name=Non c'è abbastanza farina di ossa! +gui.message.no_energy.name=Non c'è più energia! +gui.message.no_saplings.name=Non ci sono abbastanza alberelli! +gui.message.no_seeds.name=Non ci sono abbastanza semi! +gui.message.no_valid_blocks.name=Non ci sono blocchi validi nella bolla +gui.message.no_water.name=Non c'è abbastanza acqua! +gui.message.not_enough.name=Non abbastanza +gui.message.not_enough_energy.name=Non c'è abbastanza energia +gui.message.not_set.name=Non Configurato +gui.message.one_min.name=1 Minuto +gui.message.receiving_active.name=Receiving Active +gui.message.redstone_sig.name=Segnale Di Pietrarossa +gui.message.remove_pad.name=Rimuovi la Piattaforma +gui.message.sending_active.name=Sending Active +gui.message.success.name=Successo +gui.message.target_no_energy.name=Il ricevente non ha abbastanza energia! +gui.message.telepad_not_found.name=Telepad non trovato! +gui.message.telepad_too_far.name=Bersaglio troppo lontano(Massimo %d) +gui.message.telepad_wrong_dim.name=Il target non è in questa dimensione! +gui.message.ten_sec.name=10 Secondi +gui.message.terraforming.name=Terraforming +gui.message.thirty_sec.name=30 Secondi +gui.message.trees.name=Alberi +gui.message.with_atmosphere0.name=on a planet with plenty of +gui.message.with_atmosphere1.name=in the atmosphere +gui.message.zero_water.name=Non c'è Acqua! +gui.methane_output.desc.2=tanica di metano +gui.miner.docked=Atterrato +gui.miner.docking=Atterrando +gui.miner.mined=Minato +gui.miner.mining=Minando +gui.miner.offline=Offline +gui.miner.out_of_range=Fuori range +gui.miner.returning=Ritornando +gui.miner.stuck=Fermo a: +gui.miner.travelling=Viaggiando +gui.slimeling.button.follow=Segui +gui.slimeling.button.sit=Siedi +gui.slimeling.chat.wrong_player=Questo non è il mio Slimeling. +gui.slimeling.damage=Danno da Attacco +gui.slimeling.following=Seguendo +gui.slimeling.food=Cibo Preferito +gui.slimeling.kills=Uccisioni +gui.slimeling.name=Nome +gui.slimeling.owner=Proprietario +gui.slimeling.scale=Ingrandimento +gui.slimeling.sitting=Sedendo +gui.status.liquefying.name=Liquidificando +gui.status.needs_carbon.name=C'è bisogno di carbone +gui.status.nogas.name=Non c'è gas +gui.status.processing.name=Sintetizzando +gui.status.tankfull.name=Tanica piena +gui.status.tanksfull.name=Tanica piena +gui.telepad.desc.0=Questo è l'unico indirizzo$del telepad +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. +gui.terraformer.desc.0=Tanica di Acqua +gui.water_bucket_slot.desc=Posiziona secchi d'acqua in questo slot +item.astro_miner.name=Astro Miner +item.atmospheric_valve.name=Valvola atmosferica +item.beam_core.name=Reattore del fascio +item.bucket_sludge.name=Secchio di Fango Batterico +item.canister.gas.name=Metano #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Capsula di Argon Liquido piena +item.canister.liquid_argon.name=Argon Liquido #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Capsula di Argon Liquido +item.canister.liquid_nitrogen.full.name=Capsula di Azoto Liquido piena +item.canister.liquid_nitrogen.name=Azoto Liquido #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Capsula di Azoto Liquido +item.canister.lox.full.name=Capsula di Ossigeno piena +item.canister.lox.name=Ossigeno Liquido #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Capsula di Ossigeno Liquido +item.carbon_fragments.name=Carbone frammentato +item.compressed_desh.name=Desh Compresso +item.compressed_titanium.name=Titanio Compresso +item.desh_axe.name=Ascia Di Desh +item.desh_boots.name=Stivali Di Desh +item.desh_chestplate.name=Corazza di Desh +item.desh_helmet.name=Elmetto di Desh +item.desh_hoe.name=Zappa di Desh +item.desh_leggings.name=Gambali Di Desh +item.desh_pick.name=Piccone Di Desh +item.desh_pick_slime.description.name=Può distruggere le uova di creeper +item.desh_pick_slime.name=Piccone Di Desh Appiccicoso +item.desh_spade.name=Pala Di Desh +item.desh_stick.name=Bastoncino di Desh +item.desh_sword.name=Spada Di Desh +item.empty_gas_canister.name=Capsula per gas vuota +item.engine_t2.name=Motore Rinforzato del Razzo +item.fluid_manip.name=Manipolatore di Fluidi +item.grapple.name=Rampino +item.heavy_nose_cone.name=Punta del Razzo Rinforzata +item.ingot_desh.name=Lingotto Di Desh +item.ingot_titanium.name=Lingotto di Titanio +item.key.t2.name=Chiave Delle Segrete Livello 2 +item.methane_canister.name=Capsula di Metano piena +item.methane_canister_partial.name=Capsula di Metano +item.orion_drive.name=Orion Drive +item.raw_desh.name=Desh Non Lavorato +item.reinforced_plate_t2.name=Piastra Rinforzata +item.reinforced_plate_t3.name=Piastre Rinforzate +item.rocket_fins_t2.name=Ali rinforzate del razzo +item.rocket_t2.cargo_rocket.name=Razzo-Cargo +item.rocket_t2.t2Rocket.name=Razzo di Livello 2 +item.rocket_t3.t3Rocket.name=Razzo Livello 3 +item.shard_iron.name=Frammento di Ferro +item.shard_titanium.name=Frammento di Titanio +item.slimeling_cargo.name=Zaino per Slimeling +item.thermal_boots.name=Scarpe Termiche +item.thermal_chestplate.name=Armatura Termica +item.thermal_cloth.name=Abiti termali +item.thermal_helm.name=Elmetto Termico +item.thermal_leggings.name=Pantaloni Termici +item.tier2.desc=Livello 2 +item.tier3.desc=Livello 3 +item.titanium_axe.name=Ascia di Titanio +item.titanium_boots.name=Stivali in Titanio +item.titanium_chestplate.name=Armatura di Titanio +item.titanium_helmet.name=Elmo di Titanio +item.titanium_hoe.name=Zappa di Titanio +item.titanium_leggings.name=Gambali in Titanio +item.titanium_pickaxe.name=Piccone di Titanio +item.titanium_shovel.name=Pala di Titanio +item.titanium_sword.name=Spada di Titanio +planet.asteroids=Asteroids +planet.mars=Marte +schematic.astro_miner.name=Astro Miner +schematic.cargo_rocket.name=Razzo-Cargo automatico +schematic.rocket_t3.name=Razzo di Livello 3 +tile.asteroids_block.asteroid_rock_0.name=Roccia Di Asteroide +tile.asteroids_block.asteroid_rock_1.name=Roccia Di Asteroide +tile.asteroids_block.asteroid_rock_2.name=Roccia Di Asteroide +tile.asteroids_block.ore_aluminum_asteroids.name=Minerale di Alluminio +tile.asteroids_block.ore_ilmenite_asteroids.name=Minerale di Ilmenite +tile.asteroids_block.ore_iron_asteroids.name=Minerale di Ferro +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. +tile.beam_receiver.name=Ricevitore del Fascio Di Energia +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. +tile.beam_reflector.name=Riflettore del Fascio Di Energia +tile.cavern_vines.description=Le Liane delle Caverne sono pericolose per le creature, impigliandole e trascinandole verso l'alto. +tile.cavern_vines.name=Liane Delle Caverne +tile.creeper_egg.description=Le uova di creeper si trovano nelle segrete di Marte, spawnando una creatura che esploderà. +tile.creeper_egg.name=Uovo Di Creeper +tile.cryo_chamber.description=Le Camere Criogeniche permettono al player di dormire durante il giorno, curandoli, ma ha un tempo di ricarica. +tile.dense_ice.name=Ghiaccio denso +tile.electrolyzer.description=Trasforma l'acqua in idrogeno(utile per il Sintetizzatore di Metano) e ossigeno. +tile.gas_liquefier.description=Gas liquefatti, provenienti dall'atmosfera o dalle capsule. Il metano liquido è un buon carburante per il razzo! +tile.hydrogen_pipe.description=I tubi di idrogeno trasferiscono idrogeno da una macchina all'altra. +tile.hydrogen_pipe.name=Tubo Per L'Idrogeno +tile.launch_controller.description=I controllori del lancio sono utilizzati per personalizzare il comportamente del lancio, compresi i criteri di lancio e piattaforme-destinatarie di lancio per lanci automatici. +tile.mars.coppermars.name=Minerale Di Rame +tile.mars.deshmars.name=Minerale Di Desh +tile.mars.ironmars.name=Minerale Di Ferro +tile.mars.marscobblestone.name=Pietrisco Di Marte +tile.mars.marsdeco.name=Blocco Di Desh +tile.mars.marsdirt.name=Roccia Sotterranea Di Marte +tile.mars.marsdungeon.name=Mattoni Delle Segrete Di Marte +tile.mars.marsgrass.name=Roccia Di Marte +tile.mars.marsstone.name=Pietra Di Marte +tile.mars.tinmars.name=Minerale Di Stagno +tile.mars_stairs_cobblestone.name=Scale In Pietrisco Di Marte +tile.mars_stairs_brick.name=Scale In Mattoni Delle Segrete Di Marte +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Camera Criogenica +tile.mars_machine.2.name=Launch Controller +tile.mars_machine.4.name=Liquidificatore Di Gas +tile.mars_machine.5.name=Sintetizzatore di Metano +tile.mars_machine.6.name=Elettrizzatore Di Acqua +tile.methane_synthesizer.description=Con una sorgente di idrogeno e una sorgente di carbonio, produce metano per essere lavorato in un Liquidificatore di Gas. +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. +tile.miner_base.name=Astro Miner Base +tile.slab_gc_half.mars_bricks_slab.name=Scalino In Mattoni Delle Segrete Di Marte +tile.slab_gc_half.mars_slab.name=Scalino In Pietrisco Di Marte +tile.slimeling_egg.blue.name=Uovo Di Slimeling Blu +tile.slimeling_egg.description=Uova di Slimeling, una volta rotte con le mani nude, libereranno un animale. +tile.slimeling_egg.red.name=Uovo Di Slimeling Rosso +tile.slimeling_egg.yellow.name=Uovo Di Slimeling Giallo +tile.sludge.name=Fango Batterico +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. +tile.telepad_short.name=Teletrasportatore a corto raggio +tile.terraformer.description=I terraformers vengono utilizzati per aggiungere un po' di verde a pianeti lontani , l'aggiunta di erba, alberi e acqua se vengono somministrati i materiali corretti. +tile.treasure_t2.description=Le Casse Del Tesoro Di Livello 2 spawneranno nelle Segrete Di Marte. Sono sbloccabili dopo aver sconfitto in boss finale. +tile.treasure_t2.name=Cassa Del Tesoro Di Livello 2 +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. +tile.treasure_t3.name=Cassa Del Tesoro di Livello 3 +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. +tile.walkway.walkway.name=Strada +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully walkable surface. +tile.walkway.walkway_pipe.name=Strada +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully walkable surface. +tile.walkway.walkway_wire.name=Strada +tile.wall_gc.mars.name=Muro In Pietrisco Di Marte +tile.wall_gc.mars_bricks.name=Muro In Mattone Delle Segrete Di Marte diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ja_jp.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ja_jp.lang new file mode 100644 index 00000000..27ccfdb7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ja_jp.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=グラップリングフック +checklist.equip_shield_controller.key=シールドコントローラー +checklist.thermal_padding.key=熱保護服一式を装備 +checklist.thermal_padding_t2.key=レベル2の熱保護服 +container.crashed_probe.name=墜落した宇宙探査機 +container.entry_pod.name=突入ポッド +container.geothermal_generator.name=地熱発電機 +container.launchcontroller.name=打ち上げコントローラー +container.mars_lander.name=着陸バルーン +container.solar_array_controller.name=ソーラーアレイコントローラー +container.short_range_telepad.name=短距離テレポートパッド +container.slimeling_inventory.name=スライムリングのインベントリ +container.tile_terraformer.name=テラフォーマー +dimension.mars.name=火星 +entity.astro_miner.name=アストロマイナー +entity.creeper_boss.name=進化型クリーパーのボス +entity.entry_pod.name=突入ポッド +entity.entry_pod_venus.name=金星突入ポッド +entity.grapple_hook.name=グラップリングフック +entity.juicer.name=ジューサー +entity.landing_balloons.name=着陸バルーン +entity.projectile_tnt.name=TNT弾 +entity.rocket_cargo.name=貨物ロケット +entity.rocket_t2.name=レベル2 ロケット +entity.rocket_t3.name=レベル3 ロケット +entity.slimeling.name=スライムリング +entity.sludgeling.name=スラッジリング +entity.small_asteroid.name=小型小惑星 +entity.spider_queen.name=スパイダークイーン +entity.web_shot.name=ウェブショット +fluid.argon=アルゴンガス +fluid.atmosphericgases=大気ガス +fluid.bacterialsludge=細菌まみれのスラッジ +fluid.carbondioxide=二酸化炭素ガス +fluid.fuel=燃料 +fluid.helium=ヘリウムガス +fluid.hydrogen=水素ガス +fluid.liquidargon=液体アルゴン +fluid.liquidmethane=液体メタン +fluid.liquidnitrogen=液体窒素 +fluid.liquidoxygen=液体酸素 +fluid.methane=メタンガス +fluid.nitrogen=窒素ガス +fluid.oil=原油 +fluid.oxygen=酸素ガス +fluid.sulphuricacid=硫酸 +gas.carbondioxide.name=二酸化炭素 +gas.nitrogen.name=窒素 +gas.oxygen.name=酸素 +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.dimension_id_venus=Venus Dimension ID +gc.configgui.disable_aluminum_gen_asteroids=Disable Aluminum Ore Gen (Asteroids) +gc.configgui.disable_ambient_lightning=Disable Lightning (Venus) +gc.configgui.disable_copper_gen_mars=Disable Copper Ore Gen (Mars) +gc.configgui.disable_desh_gen_mars=Disable Desh Ore Gen (Mars) +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.disable_small_asteroids=Disable Small Asteroid spawning (Asteroids) +gc.configgui.disable_ilmenite_gen_asteroids=Disable Ilmenite Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_asteroids=Disable Iron Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_mars=Disable Iron Ore Gen (Mars) +gc.configgui.disable_tin_gen_mars=Disable Tin Ore Gen (Mars) +gc.configgui.disable_venus_aluminum_gen=Disable Aluminum Ore Gen (Venus) +gc.configgui.disable_venus_copper_gen=Disable Copper Ore Gen (Venus) +gc.configgui.disable_venus_galena_gen=Disable Galena Ore Gen (Venus) +gc.configgui.disable_venus_quartz_gen=Disable Quartz Ore Gen (Venus) +gc.configgui.disable_venus_silicon_gen=Disable Silicon Ore Gen (Venus) +gc.configgui.disable_venus_solar_gen=Disable Solar Ore Gen (Venus) +gc.configgui.disable_venus_tin_gen=Disable Tin Ore Gen (Venus) +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.add_blacklist.name=ブラックリスト +gui.button.add_entity.name=エンティティ追加 +gui.button.add_player.name=プレイヤー追加 +gui.button.add_whitelist.name=ホワイトリスト +gui.button.edit_blacklist.name=ブラックリストを編集 +gui.button.edit_priority.name=優先順位を編集 +gui.button.edit_whitelist.name=ホワイトリストを編集 +gui.button.liquefy.name=開始 +gui.button.liquefy_stop.name=止まる +gui.button.never_fire_team.name=スペースレースのチームは撃たない +gui.button.recall.name=呼び戻す +gui.button.remove_selected.name=選択削除 +gui.carbon_slot.desc.0=炭素の破片をここに置ける +gui.cargorocket.status.launched.0=発射 +gui.cargorocket.status.launched.1=済み +gui.cargorocket.status.waiting.0=点火 +gui.cargorocket.status.waiting.1=待ち +gui.choose_planet.desc.mars=住みやすい#酸素がない#重力: 38% +gui.cryogenic.chat.cant_use=あと %d 秒間使えません +gui.gas_input.desc.0=メタンのガス缶を$ここに入れる +gui.gas_input.desc.1=(あるいは代わりに$大気弁) +gui.gas_tank.desc.0=気体ストレージ +gui.gas_tank_compressed.desc.0=気体ストレージ (圧縮) +gui.hydrogen_input.desc.0=水素タンクか +gui.hydrogen_input.desc.1=大気弁 +gui.launch_controller.advanced=高度な設定 +gui.launch_controller.desc.0=打ち上げコントローラの$固有周波数 +gui.launch_controller.desc.1=打ち上げたロケットが$向かう先の周波数 +gui.launch_controller.desc.2=打ち上げ時に発射台を$取り除くかどうか +gui.launch_controller.desc.3=この条件を満たせば、$ロケットが打ち上がる +gui.launch_controller.desc.4=目的の周波数を$他のプレイヤーから隠す +gui.launch_controller.owner=オーナー +gui.liquid_output.desc.2=液化ガスタンク +gui.liquid_tank.desc.0=液体のタンク +gui.message.address.name=アドレス +gui.message.astro_miner.fail=この基地は既にアストロ採掘機を持っています! +gui.message.astro_miner1.fail=ドッキングエリアが塞がれています: +gui.message.astro_miner1_a.fail=アストロ採掘機の移動経路が塞がれています: +gui.message.astro_miner1_b.fail=保護エリアです! +gui.message.astro_miner2.fail=アストロマイナーが多すぎます! +gui.message.astro_miner3.fail=アストロマイナー基地が撤去されました! +gui.message.astro_miner4.fail=アストロマイナーがエネルギー不足で基地へ戻れません! +gui.message.astro_miner5.fail=アストロマイナーの基地への移動経路が塞がれているようです! +gui.message.astro_miner6.fail=アストロマイナーはこのエリアの採掘を完了し、停止します! +gui.message.astro_miner7.fail=宇宙ステーションでアストロマイナーが採掘するものはありません! +gui.message.astro_miner8.fail=同じ基地に2台のアストロマイナーが検出されたため、1台目は稼働中止します。 +gui.message.blacklist_mode.name=ブラックリスト モード +gui.message.bubble_exp.name=バブルが拡大している +gui.message.cargo_full.name=貨物がいっぱい +gui.message.cargo_unloaded.name=貨物が空 +gui.message.connected_solar_controller.name=%d 取り付け済み(最大距離16ブロック) +gui.message.dest_address.name=目的のアドレス +gui.message.dest_frequency.name=目的の周波数 +gui.message.enable_grass.name=草を有効にする +gui.message.enable_trees.name=木を有効にする +gui.message.enter_entity.name=エンティティの name/id を入力 +gui.message.enter_player.name=プレイヤー名を入力 +gui.message.frequency.name=周波数 +gui.message.fully_fueled.name=燃料がいっぱい +gui.message.grapple.fail=グラップリングフックを投げるには糸が必要だ! +gui.message.grass.name=草 +gui.message.instant.name=すぐに +gui.message.invalid_address.name=無効な固有アドレス +gui.message.invalid_freq.name=無効な周波数 +gui.message.invalid_target_address.name=無効な目的アドレス +gui.message.launch_when.name=打ち上げの時間 +gui.message.low_energy.name=エネルギーが低い +gui.message.low_energy_output.name=低エネルギー出力 +gui.message.no_bonemeal.name=骨粉が足りない +gui.message.no_energy.name=エネルギーが足りない +gui.message.no_saplings.name=苗木が足りない +gui.message.no_seeds.name=種が足りない +gui.message.no_valid_blocks.name=有効なブロックがバブルにない +gui.message.no_water.name=水が足りない +gui.message.not_enough.name=足りない +gui.message.not_enough_energy.name=エネルギーが足りない! +gui.message.not_set.name=設定がない +gui.message.one_min.name=1分 +gui.message.player.name=プレイヤー +gui.message.priority_closest.name=一番近い +gui.message.priority_health_high.name=体力が一番多い +gui.message.priority_health_low.name=体力が一番少ない +gui.message.priority_low.name=優先順位 (低い数字ほど優先) +gui.message.receiving_active.name=受信可能 +gui.message.redstone_sig.name=レッドストーン信号 +gui.message.remove_pad.name=パッドを取り除く +gui.message.sending_active.name=送信可能 +gui.message.success.name=完成 +gui.message.target_meteors.name=隕石を標的にする +gui.message.target_no_energy.name=ターゲット側のエネルギーが足りない! +gui.message.telepad_not_found.name=テレポートパッドが見つかりません! +gui.message.telepad_too_far.name=ターゲットが遠すぎます! (最大 %d) +gui.message.telepad_wrong_dim.name=ターゲットは違うディメンションにあります! +gui.message.telepad_target_disabled.name=ターゲットが無効です +gui.message.ten_sec.name=10秒 +gui.message.terraforming.name=テラフォーミング +gui.message.thirty_sec.name=30秒 +gui.message.trees.name=木 +gui.message.with_atmosphere0.name=大気中に豊富な +gui.message.with_atmosphere1.name=が存在する惑星で +gui.message.zero_water.name=水がない! +gui.methane_output.desc.2=メタンのタンク +gui.miner.docked=待機 +gui.miner.docking=ドッキング中 +gui.miner.mined=採掘済み +gui.miner.mining=採掘中 +gui.miner.offline=オフライン +gui.miner.out_of_range=範囲外 +gui.miner.returning=帰還中 +gui.miner.stuck=立ち往生: +gui.miner.travelling=移動中 +gui.slimeling.button.follow=追従 +gui.slimeling.button.sit=座る +gui.slimeling.chat.wrong_player=私のスライムリングじゃない! +gui.slimeling.damage=攻撃力 +gui.slimeling.following=追従している +gui.slimeling.food=好きな食べ物 +gui.slimeling.kills=倒したMobの数 +gui.slimeling.name=名前 +gui.slimeling.owner=オーナー +gui.slimeling.scale=サイズ +gui.slimeling.sitting=座っている +gui.status.invalid_spout_1.name=活性な蒸気噴出口の +gui.status.invalid_spout_2.name=上に設置してください +gui.status.liquefying.name=液化中 +gui.status.needs_carbon.name=炭素が必要 +gui.status.nogas.name=ガスがない +gui.status.processing.name=合成中 +gui.status.tankfull.name=タンクが満杯 +gui.status.tanksfull.name=タンクが満杯 +gui.telepad.desc.0=テレポートパッドの$固有アドレス +gui.telepad.desc.1=別のテレポートパッドのアドレス。$エンティティはそこへ送られる。 +gui.terraformer.desc.0=水タンク +gui.water_bucket_slot.desc=水バケツをここに置く +item.astro_miner.name=アストロマイナー +item.atmospheric_valve.name=大気弁 +item.atomic_battery.name=原子力電池 +item.beam_core.name=ビームコア +item.bucket_sludge.name=細菌まみれのスラッジ入りバケツ +item.bucket_sulphuric_acid.name=硫酸入りバケツ +item.canister.gas.name=ガス +item.canister.liquid_argon.full.name=満杯の液体アルゴン缶 +item.canister.liquid_argon.name=液体 +item.canister.liquid_argon.partial.name=ある程度入った液体アルゴン缶 +item.canister.liquid_nitrogen.full.name=満杯の液体窒素缶 +item.canister.liquid_nitrogen.name=液体 +item.canister.liquid_nitrogen.partial.name=液体窒素缶 +item.canister.lox.full.name=満杯の液体酸素缶 +item.canister.lox.name=液体酸素 +item.canister.lox.partial.name=ある程度入った液体酸素缶 +item.carbon_fragments.name=炭素の破片 +item.compressed_desh.name=圧縮されたデッシュ +item.compressed_titanium.name=圧縮されたチタン +item.desh_axe.name=デッシュの斧 +item.desh_boots.name=デッシュのブーツ +item.desh_chestplate.name=デッシュのチェストプレート +item.desh_helmet.name=デッシュのヘルメット +item.desh_hoe.name=デッシュのクワ +item.desh_leggings.name=デッシュのレギンス +item.desh_pick.name=デッシュのツルハシ +item.desh_pick_slime.description.name=スライムリングの卵が集められる +item.desh_pick_slime.name=粘着デッシュのツルハシ +item.desh_spade.name=デッシュのシャベル +item.desh_stick.name=デッシュの棒 +item.desh_sword.name=デッシュの剣 +item.dust_titanium.name=チタンの粉末 +item.empty_gas_canister.name=空のガス缶 +item.engine_t2.name=重ロケットエンジン +item.fluid_manip.name=流体の操作器 +item.grapple.name=グラップリングフック +item.heavy_nose_cone.name=重ノーズコーン +item.ingot_desh.name=デッシュインゴット +item.ingot_lead.name=鉛インゴット +item.ingot_titanium.name=チタンインゴット +item.key.t2.name=レベル2 ダンジョンの鍵 +item.key.t3.name=レベル3 ダンジョンの鍵 +item.methane_canister.name=満杯のメタンガス缶 +item.methane_canister_partial.name=メタンガス缶 +item.orion_drive.name=オリオンドライブ +item.prelaunch_checklist.name=発射前チェックリスト +item.radioisotope_core.name=放射性同位体コア +item.raw_desh.name=未精錬デッシュ +item.reinforced_plate_t2.name=頑丈なプレート +item.reinforced_plate_t3.name=頑丈なプレート +item.rocket_fins_t2.name=重ロケットフィン +item.rocket_t2.cargo_rocket.name=貨物ロケット +item.rocket_t2.t2Rocket.name=レベル2 ロケット +item.rocket_t3.t3Rocket.name=レベル3 ロケット +item.shard_iron.name=鉄の破片 +item.shard_titanium.name=チタンの破片 +item.shield_controller.description=あらゆるダメージから防具を保護する -大気腐食も含めて! +item.shield_controller.name=シールドコントローラ +item.slimeling_cargo.name=スライムリングバッグ +item.solar_dust.name=ソーラーダスト +item.solar_module_2.name=ソーラーアレイパネル +item.strange_seed.name=奇妙な種 +item.thermal_boots.name=熱保護のブーツ +item.thermal_boots_t2.name=恒温ブーツ +item.thermal_chestplate.name=熱保護のチェストプレート +item.thermal_chestplate_t2.name=恒温チェストプレート +item.thermal_cloth.name=熱保護の布 +item.thermal_fabric.name=恒温性の繊維 +item.thermal_helm.name=熱保護のヘルメット +item.thermal_helm_t2.name=恒温ヘルメット +item.thermal_leggings.name=熱保護のレギンス +item.thermal_leggings_t2.name=恒温レギンス +item.thin_solar_wafer.name=ソーラーアレイウェファー +item.tier2.desc=レベル2 +item.tier3.desc=レベル3 +item.titanium_axe.name=チタンの斧 +item.titanium_boots.name=チタンのブーツ +item.titanium_chestplate.name=チタンのチェストプレート +item.titanium_helmet.name=チタンのヘルメット +item.titanium_hoe.name=チタンのクワ +item.titanium_leggings.name=チタンのレギンス +item.titanium_pickaxe.name=チタンのツルハシ +item.titanium_shovel.name=チタンのシャベル +item.titanium_sword.name=チタンの剣 +item.volcanic_pickaxe.description=プレイヤーの向きに応じて3x3のエリアを採掘する +item.volcanic_pickaxe.name=火山のツルハシ +planet.asteroids=小惑星 +planet.mars=火星 +schematic.astro_miner.name=アストロマイナー +schematic.cargo_rocket.name=自動貨物ロケット +schematic.rocket_t3.name=レベル3 ロケット +tile.asteroids_block.asteroid_rock_0.name=小惑星の岩 +tile.asteroids_block.asteroid_rock_1.name=小惑星の岩 +tile.asteroids_block.asteroid_rock_2.name=小惑星の岩 +tile.asteroids_block.ore_aluminum_asteroids.name=アルミ鉱石 +tile.asteroids_block.ore_ilmenite_asteroids.name=イルメナイト鉱石 +tile.asteroids_block.ore_iron_asteroids.name=鉄鉱石 +tile.asteroids_block.asteroid_deco.name=ダーク装飾ブロック +tile.asteroids_block.titanium_block.name=チタンブロック +tile.beam_receiver.description=エネルギー機械の入出力に接続し、ビームを使ってエネルギーを輸送する. +tile.beam_receiver.name=ビーム受信機 +tile.beam_reflector.description=ビーム源から目標へのビームの向きを変えるために使用する。右クリックで送信先を順番に変更できる。 +tile.beam_reflector.name=ビーム反射器 +tile.cavern_vines.description=生物にとって危険であり、絡めて上へと引きずり上げる。 +tile.cavern_vines.name=洞窟のツタ +tile.crashed_probe.name=墜落した宇宙探査機 +tile.creeper_egg.description=火星のダンジョンにスポーンし、爆発すると卑劣な捕食者が生まれる。 +tile.creeper_egg.name=クリーパーの卵 +tile.cryo_chamber.description=プレイヤーが昼間に眠ることを可能にし、体力を少し回復する。使用後にクールダウンが必要。 +tile.dense_ice.name=高密度の氷 +tile.electrolyzer.description=水を水素と酸素に分解する。水素はメタン合成に有用である。 +tile.gas_liquefier.description=大気中や缶にある気体を液化する。液体メタンはロケット燃料として優れている! +tile.geothermal_generator.description=活性な蒸気噴出口の上に設置すると、振動の速さでエネルギーを生成する. +tile.geothermal_generator.name=地熱発電機 +tile.hydrogen_pipe.description=機械の内部ガスタンクから他の機械へ水素を輸送する。 +tile.hydrogen_pipe.name=水素のパイプ +tile.launch_controller.description=打ち上げ条件や、自動打ち上げ時の目標発射台の設定などの打ち上げ動作をカスタマイズできる。 +tile.laser_turret.name=レーザータレット +tile.laser_turret.description=隕石/プレイヤー/Mobを標的にできる +tile.mars.coppermars.name=銅鉱石 +tile.mars.deshmars.name=デッシュ鉱石 +tile.mars.ironmars.name=鉄鉱石 +tile.mars.marscobblestone.name=火星の丸石 +tile.mars.marsdeco.name=デッシュのブロック +tile.mars.marsdirt.name=火星のレゴリス +tile.mars.marsdungeon.name=火星ダンジョンのレンガ +tile.mars.marsgrass.name=火星の細かいレゴリス +tile.mars.marsstone.name=火星の石 +tile.mars.tinmars.name=スズ鉱石 +tile.mars_machine.0.name=テラフォーマー +tile.mars_machine.1.name=低温室 +tile.mars_machine.2.name=打ち上げコントローラ +tile.mars_machine.4.name=ガス液化装置 +tile.mars_machine.5.name=メタン合成器 +tile.mars_machine.6.name=水電気分解装置 +tile.mars_stairs_brick.name=火星ダンジョンのレンガ階段 +tile.mars_stairs_cobblestone.name=火星の丸石階段 +tile.methane_synthesizer.description=水素源と炭素源を使いメタンガスを製造する。メタンガスはガス液化装置でさらに処理できる。 +tile.miner_base.description=アストロマイナーのドッキングポイント。これは大きい... このブロックで2x2x2の立方体を作ろう。 +tile.miner_base.name=アストロマイナーベース +tile.miner_base_full.name=アストロマイナーベース +tile.slab_gc_half.mars_bricks_slab.name=火星ダンジョンのレンガのハーフブロック +tile.slab_gc_half.mars_slab.name=火星の丸石のハーフブロック +tile.slab_gc_half.asteroids_slab.name=ダーク装飾ハーフブロック +tile.slimeling_egg.blue.name=青いスライムリングの卵 +tile.slimeling_egg.description=スライムリングの卵は、プレイヤーの素手で割るとすぐ孵化してペットになる。 +tile.slimeling_egg.red.name=赤いスライムリングの卵 +tile.slimeling_egg.yellow.name=黄色いスライムリングの卵 +tile.sludge.name=細菌まみれのスラッジ +tile.solar_array_controller.name=ソーラーアレイコントローラ +tile.solar_array_controller.description=ソーラーアレイモジュールを接続すると発電する. 宇宙ステーションで最も効果を発揮する. +tile.solar_array_module.name=ソーラーアレイモジュール +tile.solar_array_module.description=ソーラーアレイコントローラに接続すると発電する. 宇宙ステーションで最も効果を発揮する. +tile.spout.name=蒸気噴出口 +tile.sulphuric_acid.name=硫酸 +tile.telepad_short.description=他のテレポートパッドとリンクすると、プレイヤーや他の生物を短距離(250ブロック)転送できる。 +tile.telepad_short.name=短距離テレポートパッド +tile.terraformer.description=地球から遠く離れた惑星を緑化するために使用する. 正しい材料を投入すると草・木・水を生成する。 +tile.treasure_t2.description=火星のダンジョンに生成される。最終ボスを倒した後に解錠できる。 +tile.treasure_t2.name=レベル2 宝箱 +tile.treasure_t3.description=レベル3宝箱は現在使われていない。 +tile.treasure_t3.name=レベル3 宝箱 +tile.venus.dungeon_brick_venus_1.name=金星ダンジョンのレンガI +tile.venus.dungeon_brick_venus_2.name=金星ダンジョンのレンガII +tile.venus.venus_ore_aluminum.name=アルミ鉱石 +tile.venus.venus_ore_copper.name=銅鉱石 +tile.venus.venus_ore_galena.name=方鉛鉱 +tile.venus.venus_ore_quartz.name=クォーツ鉱石 +tile.venus.venus_ore_silicon.name=シリコン鉱石 +tile.venus.venus_ore_solar.name=ソーラー鉱石 +tile.venus.venus_ore_tin.name=スズ鉱石 +tile.venus.venus_rock_0.name=金星の柔らかい岩 +tile.venus.venus_rock_1.name=金星の硬い岩 +tile.venus.venus_rock_2.name=金星の火山岩 +tile.venus.venus_rock_3.name=軽石 +tile.venus.lead_block.name=鉛ブロック +tile.venus_rock_scorched.name=焦げた金星の岩 +tile.walkway.walkway.description=装飾目的で使われる. 宇宙のテーマを維持しながらブロックを接続するために使う。 +tile.walkway.walkway.name=通路 +tile.walkway.walkway_pipe.description=歩行可能な面の下にパイプを走らせるために使う。 +tile.walkway.walkway_pipe.name=通路 +tile.walkway.walkway_wire.description=歩行可能な面の下にワイヤーを走らせるために使う。 +tile.walkway.walkway_wire.name=通路 +tile.wall_gc.mars.name=火星の丸石の塀 +tile.wall_gc.mars_bricks.name=火星ダンジョンのレンガの塀 +tile.web_torch.web_torch_0.name=クモの糸 +tile.web_torch.web_torch_1.description=グロウストーン松明 +tile.web_torch.web_torch_1.name=クモの糸 +achievement.mars=火星へ! +achievement.mars.desc=レベル2ロケットで火星に行く! +achievement.asteroids=小惑星帯へ! +achievement.asteroids.desc=レベル3ロケットで小惑星帯に行く! +achievement.venus=金星へ! +achievement.venus.desc=レベル3ロケットで金星に行く! diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ko_kr.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ko_kr.lang new file mode 100644 index 00000000..ce574705 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ko_kr.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=쇠갈고리 제작 +checklist.equip_shield_controller.key=방패 조종 장치 장착 +checklist.thermal_padding.key=1티어 보온복 장착 +checklist.thermal_padding_t2.key=2티어 보온복 장착 +container.crashed_probe.name=부서진 탐사선 +container.entry_pod.name=진입 캡슐 +container.geothermal_generator.name=지열 발전기 +container.launchcontroller.name=발사 통제기 +container.mars_lander.name=착륙 기구 +container.solar_array_controller.name=태양광 발전기 +container.short_range_telepad.name=단거리 텔레패드 +container.slimeling_inventory.name=슬라임링 인벤토리 +container.tile_terraformer.name=테라포머 +dimension.mars.name=화성 +entity.astro_miner.name=천체 광업기계 +entity.creeper_boss.name=진화된 크리퍼 보스 +entity.entry_pod.name=진입 캡슐 +entity.entry_pod_venus.name=금성 진입 캡슐 +entity.grapple_hook.name=쇠갈고리 +entity.juicer.name=과즙기 +entity.landing_balloons.name=착륙 기구 +entity.projectile_tnt.name=발사 TNT +entity.rocket_cargo.name=화물 로켓 +entity.rocket_t2.name=2티어 로켓 +entity.rocket_t3.name=3티어 로켓 +entity.slimeling.name=슬라임링 +entity.sludgeling.name=슬러지링 +entity.small_asteroid.name=작은 소행성 +entity.spider_queen.name=여왕 거미 +entity.web_shot.name=거미줄 공격 +fluid.argon=아르곤 가스 +fluid.atmosphericgases=대기 가스 +fluid.bacterialsludge=세균 슬러지 +fluid.carbondioxide=이산화탄소 가스 +fluid.fuel=연료 +fluid.helium=헬륨 가스 +fluid.hydrogen=수소 가스 +fluid.liquidargon=액체 아르곤 +fluid.liquidmethane=액체 메테인 +fluid.liquidnitrogen=액체 질소 +fluid.liquidoxygen=액체 산소 +fluid.methane=메탄 가스 +fluid.nitrogen=질소 가스 +fluid.oil=석유 +fluid.oxygen=산소 가스 +fluid.sulphuricacid=황산 +gas.carbondioxide.name=이산화탄소 +gas.nitrogen.name=질소 +gas.oxygen.name=산소 +gc.configgui.astro_miners_max=플레이어 당 최대 우주 채굴인수 +gc.configgui.dimension_id_asteroids=소행성대 세계 ID +gc.configgui.dimension_id_mars=화성 세계 ID +gc.configgui.dimension_id_venus=금성 세계 ID +gc.configgui.disable_aluminum_gen_asteroids=알루미늄 광석 생성 미사용 (소행성대) +gc.configgui.disable_ambient_lightning=번개 미사용 (금성) +gc.configgui.disable_copper_gen_mars=구리 광석 생성 미사용 (화성) +gc.configgui.disable_desh_gen_mars=데시 광석 생성 미사용 (화성) +gc.configgui.disable_galacticraft_helium=헬륨 가스 생성 미사용 +gc.configgui.disable_small_asteroids=작은 소행성 스폰 미사용 (소행성대) +gc.configgui.disable_ilmenite_gen_asteroids=일메네이트 광석 생성 미사용 (소행성대) +gc.configgui.disable_iron_gen_asteroids=철광석 생성 미사용 (소행성대) +gc.configgui.disable_iron_gen_mars=철광석 생성 미사용 (화성) +gc.configgui.disable_tin_gen_mars=주석 광석 생성 미사용 (화성) +gc.configgui.disable_venus_aluminum_gen=알루미늄 광석 생성 미사용 (금성) +gc.configgui.disable_venus_copper_gen=구리 광석 생성 미사용 (금성) +gc.configgui.disable_venus_galena_gen=방연석 광석 생성 미사용 (금성) +gc.configgui.disable_venus_quartz_gen=석영 광석 생성 미사용 (금성) +gc.configgui.disable_venus_silicon_gen=규소 광석 생성 미사용 (금성) +gc.configgui.disable_venus_solar_gen=태양 광석 생성 미사용 (금성) +gc.configgui.disable_venus_tin_gen=주석 광석 생성 미사용 (금성) +gc.configgui.id_schematic_cargo_rocket=화물 로켓 설계도 ID +gc.configgui.id_schematic_rocket_t2=2티어 로켓 설계도 ID +gc.configgui.id_schematic_rocket_t3=3티어 로켓 설계도 ID +gc.configgui.launch_controller_all_dims=모든 차원에서 조절기 가동 +gc.configgui.launch_controller_chunk_load=청크로딩하는 동안 조절기 가동 +gc.configgui.planets.title=갤럭티크래프트 행성 환경설정 +gui.button.add_blacklist.name=블랙리스트 +gui.button.add_entity.name=엔티티 추가 +gui.button.add_player.name=플레이어 추가 +gui.button.add_whitelist.name=화이트리스트 +gui.button.edit_blacklist.name=블랙리스트 수정 +gui.button.edit_priority.name=우선순위 수정 +gui.button.edit_whitelist.name=화이트리스트 수정 +gui.button.liquefy.name=가공 +gui.button.liquefy_stop.name=중단 +gui.button.never_fire_team.name=우주 경주 팀에서 절대 발사하지 않기 +gui.button.recall.name=재개 +gui.button.remove_selected.name=선택 제거 +gui.carbon_slot.desc.0=탄소 파편을 여기로 갈 수 있습니다. +gui.cargorocket.status.launched.0=준비 +gui.cargorocket.status.launched.1=발사됨 +gui.cargorocket.status.waiting.0=대기 +gui.cargorocket.status.waiting.1=발화 +gui.choose_planet.desc.mars=거주 가능#산소 부족#중력: 38% +gui.cryogenic.chat.cant_use=%d 초 뒤에 다시 사용할 수 있습니다. +gui.gas_input.desc.0=메테인 가스통을 이곳에 배치하세요. +gui.gas_input.desc.1=(또는, 대기밸브를 대신 배치가능합니다.) +gui.gas_tank.desc.0=가스 저장고 +gui.gas_tank_compressed.desc.0=가스 저장고(압축됨) +gui.hydrogen_input.desc.0=수소 탱크를 이곳에 배치하세요. +gui.hydrogen_input.desc.1=혹은 대기밸브 또한 가능합니다. +gui.launch_controller.advanced=고급 +gui.launch_controller.desc.0=발사 통제기의$고유 주파수 +gui.launch_controller.desc.1=로켓 발사 방향 (목적지) 주파수 +gui.launch_controller.desc.2=로켓 발사시$발사대 제거 여부 +gui.launch_controller.desc.3=현재 조건이 만족될 경우$로켓이 발사됩니다. +gui.launch_controller.desc.4=다른 플레이어들로부터$목적지 주파수를 숨깁니다. +gui.launch_controller.owner=소유자 +gui.liquid_output.desc.2=액체화된 가스 탱크 +gui.liquid_tank.desc.0=액체 탱크 +gui.message.address.name=고유번호 +gui.message.astro_miner.fail=이 근거지에는 이미 천체 광업기계가 있습니다! +gui.message.astro_miner1.fail=도킹 영역이 막혔습니다: +gui.message.astro_miner1_a.fail=천체 광업기계의 경로가 막혔습니다. 막힌 블록: +gui.message.astro_miner1_b.fail=보호된 구역입니다! +gui.message.astro_miner2.fail=그것은 하나의 천체 광업기계에게 너무 많을 것입니다! +gui.message.astro_miner3.fail=천체 광업기계의 근거지가 파괴되었습니다! +gui.message.astro_miner4.fail=천체 광업기계의 에너지가 부족합니다 근거지로 돌아갈 수 없습니다! +gui.message.astro_miner5.fail=천체 광업기계의 근거지 경로가 막혔습니다! +gui.message.astro_miner6.fail=천체 광업기계는 그 지역 채굴을 끝냈습니다, 작동이 중지됩니다! +gui.message.astro_miner7.fail=우주정거장에서는 천체 광업기계가 아무것도 할 수 없습니다! +gui.message.astro_miner8.fail=두 번째 천체 광업기계가 같은 근거지에서 발견될때, 첫 번째는 동결됩니다! +gui.message.blacklist_mode.name=블랙리스트 모드 +gui.message.bubble_exp.name=기포 팽창 중 +gui.message.cargo_full.name=화물이 꽉 찼습니다. +gui.message.cargo_unloaded.name=화물이 적재되지 않았습니다. +gui.message.connected_solar_controller.name=%d개가 장착되었습니다. (16블록 범위) +gui.message.dest_address.name=목적지 주소 +gui.message.dest_frequency.name=목적지 +gui.message.enable_grass.name=잔디 활성화 +gui.message.enable_trees.name=나무 활성화 +gui.message.enter_entity.name=엔티티 이름/ID 입력 +gui.message.enter_player.name=플레이어 이름 입력 +gui.message.frequency.name=주파수 +gui.message.fully_fueled.name=연료 최대공급시 +gui.message.grapple.fail=그래플을 작동시키려면 줄이 필요합니다! +gui.message.grass.name=잔디 +gui.message.instant.name=즉시 +gui.message.invalid_address.name=유효하지 않은 고유번호 +gui.message.invalid_freq.name=잘못된 주파수 +gui.message.invalid_target_address.name=유효하지 않은 타깃 고유번호 +gui.message.launch_when.name=발사 조건: +gui.message.low_energy.name=에너지 적음 +gui.message.low_energy_output.name=에너지 출력 적음 +gui.message.no_bonemeal.name=뼛가루가 부족합니다 +gui.message.no_energy.name=에너지가 부족합니다! +gui.message.no_saplings.name=묘목이 부족합니다 +gui.message.no_seeds.name=씨앗이 부족합니다 +gui.message.no_valid_blocks.name=기포 내부에 유효한 블록이 없습니다 +gui.message.no_water.name=물이 부족합니다 +gui.message.not_enough.name=부족합니다 +gui.message.not_enough_energy.name=에너지 부족! +gui.message.not_set.name=설정 안 됨 +gui.message.one_min.name=1분 +gui.message.player.name=플레이어 +gui.message.priority_closest.name=Closest +gui.message.priority_health_high.name=최고 건강 +gui.message.priority_health_low.name=최저 건강 +gui.message.priority_low.name=우선순위 (낮은 순서) +gui.message.receiving_active.name=수신 활성 +gui.message.redstone_sig.name=레드스톤 신호 +gui.message.remove_pad.name=발사대 제거 +gui.message.sending_active.name=송신 +gui.message.success.name=성공 +gui.message.target_meteors.name=목표 유성 +gui.message.target_no_energy.name=타깃 에너지 부족! +gui.message.telepad_not_found.name=텔레포터가 존재하지 않음! +gui.message.telepad_too_far.name=타깃이 너무 멀음! (최대 %d) +gui.message.telepad_wrong_dim.name=타깃이 다른 세계에 있음! +gui.message.telepad_target_disabled.name=타깃이 없음! +gui.message.ten_sec.name=10초 +gui.message.terraforming.name=테라포밍 중 +gui.message.thirty_sec.name=30초 +gui.message.trees.name=나무 +gui.message.with_atmosphere0.name=현 행성의 대기에 +gui.message.with_atmosphere1.name=(이)가 풍부합니다. +gui.message.zero_water.name=물이 부족합니다! +gui.methane_output.desc.2=메탄 탱크 +gui.miner.docked=도킹됨 +gui.miner.docking=도킹 중 +gui.miner.mined=채굴됨 +gui.miner.mining=채굴 중 +gui.miner.offline=오프라인 +gui.miner.out_of_range=범위를 벗어남 +gui.miner.returning=돌아오는 중 +gui.miner.stuck=막힌 곳: +gui.miner.travelling=이동 중 +gui.slimeling.button.follow=따라가기 +gui.slimeling.button.sit=앉기 +gui.slimeling.chat.wrong_player=내 슬라임링이 아닙니다! +gui.slimeling.damage=공격 데미지 +gui.slimeling.following=따라오는 중 +gui.slimeling.food=기호 음식 +gui.slimeling.kills=킬 수 +gui.slimeling.name=이름 +gui.slimeling.owner=주인 +gui.slimeling.scale=크기 +gui.slimeling.sitting=앉은 상태 +gui.status.invalid_spout_1.name=배치되어야 합니다. +gui.status.invalid_spout_2.name=유황이 분출합니다. +gui.status.liquefying.name=액화 중 +gui.status.needs_carbon.name=탄소 필요 +gui.status.nogas.name=가스 없음 +gui.status.processing.name=합성 중 +gui.status.tankfull.name=탱크 꽉참 +gui.status.tanksfull.name=탱크 전체 꽉참 +gui.telepad.desc.0=텔레포터 고유번호 +gui.telepad.desc.1=타깃 텔레포터 고유번호 +gui.terraformer.desc.0=물 탱크 +gui.water_bucket_slot.desc=물양동이를 이곳에 배치하세요. +item.astro_miner.name=천체 광업기계 +item.atmospheric_valve.name=대기 밸브 +item.atomic_battery.name=천체 배터리 +item.beam_core.name=광선 코어 +item.bucket_sludge.name=세균 슬러지 양동이 +item.bucket_sulphuric_acid.name=황산 양동이 +item.canister.gas.name=가스 #메테인 가스의 줄임말 +item.canister.liquid_argon.full.name=가득찬 액체 아르곤 통 +item.canister.liquid_argon.name=액아 #액체 아르곤의 줄임말 +item.canister.liquid_argon.partial.name=액체 아르곤 통 +item.canister.liquid_nitrogen.full.name=가득찬 액체 질소통 +item.canister.liquid_nitrogen.name=액질 #액체 질소의 줄임말 +item.canister.liquid_nitrogen.partial.name=액체 질소통 +item.canister.lox.full.name=가득찬 액체 산소통 +item.canister.lox.name=액산 #액체 산소의 줄임말 +item.canister.lox.partial.name=액체 산소통 +item.carbon_fragments.name=탄소 파편 +item.compressed_desh.name=압축된 데쉬 +item.compressed_titanium.name=압축된 티타늄 +item.desh_axe.name=데쉬 도끼 +item.desh_boots.name=데쉬 부츠 +item.desh_chestplate.name=데쉬 흉갑 +item.desh_helmet.name=데쉬 투구 +item.desh_hoe.name=데쉬 괭이 +item.desh_leggings.name=데쉬 각반 +item.desh_pick.name=데쉬 곡괭이 +item.desh_pick_slime.description.name=크리퍼 알 채취가능 +item.desh_pick_slime.name=접착 데쉬 곡괭이 +item.desh_spade.name=데쉬 삽 +item.desh_stick.name=데쉬 막대기 +item.desh_sword.name=데쉬 검 +item.dust_titanium.name=티타늄 가루 +item.empty_gas_canister.name=빈 가스통 +item.engine_t2.name=중형 로켓 엔진 +item.fluid_manip.name=유체 조정기 +item.grapple.name=그래플 +item.heavy_nose_cone.name=중형 노즈콘 +item.ingot_desh.name=데쉬 주괴 +item.ingot_lead.name=납 주괴 +item.ingot_titanium.name=티타늄 주괴 +item.key.t2.name=2티어 던전 열쇠 +item.key.t3.name=3티어 던전 열쇠 +item.methane_canister.name=충전된 메탄 가스통 +item.methane_canister_partial.name=메탄 가스통 +item.orion_drive.name=오리온 드라이브 +item.prelaunch_checklist.name=발사전 체크리스트 +item.radioisotope_core.name=방사성 동위 원소 코어 +item.raw_desh.name=가공되지 않은 데쉬 +item.reinforced_plate_t2.name=2티어 강화 플레이트 +item.reinforced_plate_t3.name=3티어 강화 플레이트 +item.rocket_fins_t2.name=중형 로켓 날개 +item.rocket_t2.cargo_rocket.name=화물 로켓 +item.rocket_t2.t2Rocket.name=2티어 로켓 +item.rocket_t3.t3Rocket.name=3티어 로켓 +item.shard_iron.name=철 조각 +item.shard_titanium.name=티타늄 조각 +item.shield_controller.description=방패 통제기는 대기 부식을 포함한 모든 형태의 손상으로부터 장갑을 보호합니다! +item.shield_controller.name=방패 조절기 +item.slimeling_cargo.name=슬라임링 인벤토리 가방 +item.solar_dust.name=태양 먼지 +item.solar_module_2.name=태양열 패널 +item.strange_seed.name=이상한 씨앗 +item.thermal_boots.name=단열 부츠 +item.thermal_boots_t2.name=등온 부츠 +item.thermal_chestplate.name=단열 흉갑 +item.thermal_chestplate_t2.name=등온 흉갑 +item.thermal_cloth.name=단열복 +item.thermal_fabric.name=등온천 +item.thermal_helm.name=단열 투구 +item.thermal_helm_t2.name=등온 투구 +item.thermal_leggings.name=단열 각반 +item.thermal_leggings_t2.name=등온 각반 +item.thin_solar_wafer.name=태양열 웨이퍼 +item.tier2.desc=2티어 +item.tier3.desc=3티어 +item.titanium_axe.name=티타늄 도끼 +item.titanium_boots.name=티타늄 부츠 +item.titanium_chestplate.name=티타늄 흉갑 +item.titanium_helmet.name=티타늄 투구 +item.titanium_hoe.name=티타늄 괭이 +item.titanium_leggings.name=티타늄 각반 +item.titanium_pickaxe.name=티타늄 곡괭이 +item.titanium_shovel.name=티타늄 삽 +item.titanium_sword.name=티타늄 검 +item.volcanic_pickaxe.description=어느 방향을 향하고 있느냐에 따라 3x3구역을 채굴합니다. +item.volcanic_pickaxe.name=화산 곡괭이 +planet.asteroids=소행성대 +planet.mars=화성 +schematic.astro_miner.name=천체 광업기계 +schematic.cargo_rocket.name=자동 화물 로켓 +schematic.rocket_t3.name=3티어 로켓 +tile.asteroids_block.asteroid_rock_0.name=소행성 암석 +tile.asteroids_block.asteroid_rock_1.name=소행성 암석 +tile.asteroids_block.asteroid_rock_2.name=소행성 암석 +tile.asteroids_block.ore_aluminum_asteroids.name=알루미늄 광석 +tile.asteroids_block.ore_ilmenite_asteroids.name=일메네이트 광석 +tile.asteroids_block.ore_iron_asteroids.name=철광석 +tile.asteroids_block.asteroid_deco.name=어두운 장식 블록 +tile.asteroids_block.titanium_block.name=티타늄 블록 +tile.beam_receiver.description=에너지빔 수신기는 기계의 전력/에너지 입출력을 도와 에너지를 송수신 할 수 있게 해주는 기기입니다. +tile.beam_receiver.name=에너지빔 수신기 +tile.beam_reflector.description=에너지빔 반사장치는 에너지 광선(빔)의 방향을 바꾸어 목적지에 도달할 수 있게 해주는 기기입니다. 오른쪽 클릭을 통해 목표 타켓을 변경할 수 있습니다. +tile.beam_reflector.name=에너지빔 반사장치 +tile.cavern_vines.description=동굴 넝굴은 움직이는 동물에게 치명적입니다. 동물을 휘감아 들어올립니다. +tile.cavern_vines.name=동굴 넝굴 +tile.crashed_probe.name=부서진 탐사선 +tile.creeper_egg.description=폭발하며 크리퍼를 부화시키는 크리퍼 알은 화성 던전에 생성됩니다. +tile.creeper_egg.name=크리퍼 알 +tile.cryo_chamber.description=극저온실은 플레이어가 낮에 잠을 잘 수 있도록 도와줍니다. 쿨다운 시간이 존재하지만 소량의 체력을 회복시킵니다. +tile.dense_ice.name=두꺼운 얼음 +tile.electrolyzer.description=(메탄 합성기에 유용한) 수소와 산소를 물에서 부터 전기분해합니다. +tile.gas_liquefier.description=대기 혹은 플레이어에 의해 주어진 기체를 액체화 시킵니다. (팁: 액체메탄 로켓 연료) +tile.geothermal_generator.description=유황 증기 덩어리 위에 올려 놓으면, 진동 속도로 에너지를 발생시킵니다. +tile.geothermal_generator.name=지열 발전기 +tile.hydrogen_pipe.description=수소 파이프는 수소를 한 기기에서 다른 기기로 수송 할 시 필요합니다. +tile.hydrogen_pipe.name=수소 파이프 +tile.launch_controller.description=발사 통제기를 통해 로켓 발사 패턴을 커스터마이징 할 수 있습니다. +tile.laser_turret.name=레이저 소탑 +tile.laser_turret.description=유성, 플레이어 몹을 타깃할 수 있습니다 +tile.mars.coppermars.name=구리 광석 +tile.mars.deshmars.name=데쉬 광석 +tile.mars.ironmars.name=철광석 +tile.mars.marscobblestone.name=화성 조약돌 +tile.mars.marsdeco.name=데쉬 블록 +tile.mars.marsdirt.name=화성 흙 +tile.mars.marsdungeon.name=화성 던전 벽돌 +tile.mars.marsgrass.name=화성 잔디 +tile.mars.marsstone.name=화성석 +tile.mars.tinmars.name=주석 광석 +tile.mars_machine.0.name=테라포머 +tile.mars_machine.1.name=극저온실 +tile.mars_machine.2.name=발사 통제기 +tile.mars_machine.4.name=가스 액화기 +tile.mars_machine.5.name=메탄 합성기 +tile.mars_machine.6.name=전기 분해기 +tile.mars_stairs_brick.name=화정 던전 벽돌 계단 +tile.mars_stairs_cobblestone.name=화성 조약돌 계단 +tile.methane_synthesizer.description=수소와 탄소를 이용해 가스 액화기에서 가공 가능한 메테인을 합성합니다. +tile.miner_base.description=천체 광업소는 천체 광업기계를 위한 도킹 지점입니다. 그것은 큽니다. 2 x 2 x 2 크기의 큐브를 만들어야합니다. +tile.miner_base.name=천체 광업소 +tile.miner_base_full.name=천체 광업소 +tile.slab_gc_half.mars_bricks_slab.name=화성 던전 벽돌 반 블록 +tile.slab_gc_half.mars_slab.name=화성 조약돌 반 블록 +tile.slab_gc_half.asteroids_slab.name=다크 장식 반 블록 +tile.slimeling_egg.blue.name=푸른 슬라임링 알 +tile.slimeling_egg.description=슬라임링 알을 플레이어가 손에서 부화시켰을경우, 슬라임링을 펫으로 키울 수 있습니다. +tile.slimeling_egg.red.name=붉은 슬라임링 알 +tile.slimeling_egg.yellow.name=노란 슬라임링 알 +tile.sludge.name=세균 슬러지 +tile.solar_array_controller.name=태양광 발전기 +tile.solar_array_controller.description=이 블록에 태양광 모듈을 연결하여 전력을 공급합니다. 우주 정거장에서 가장 효율적입니다. +tile.solar_array_module.name=태양광 모듈 +tile.solar_array_module.description=이 블록들 중 몇 개를 태양광 발전기에 연결하여 전력을 공급합니다. 우주 정거장에서 가장 효율적입니다. +tile.spout.name=증기 분출기 +tile.sulphuric_acid.name=황산 +tile.telepad_short.description=단거리 텔레포터는 플레이어와 다른 생명체의 빠른 단거리 이동을 도와주는 기기입니다 (250 블럭). 최소한 두개의 기기가 서로 연결되어야 합니다. +tile.telepad_short.name=단거리 텔레포터 +tile.terraformer.description=테라포머는 특정 재료가 주어지면 잔디, 나무, 물과 같이 식물을 다른 행성에 키울 수 있는 환경을 만들어 줍니다. +tile.treasure_t2.description=화성 던전안에 2티어 보물 상자가 생성됩니다. 최종보스를 처치했을시 열 수 있습니다. +tile.treasure_t2.name=2티어 보물 상자 +tile.treasure_t3.description=금성 던전안에 3티어 보물 상자가 생성됩니다. 최종보스를 처치했을시 열 수 있습니다. +tile.treasure_t3.name=3티어 보물 상자 +tile.venus.dungeon_brick_venus_1.name=금성 던전 블록 I +tile.venus.dungeon_brick_venus_2.name=금성 던전 블록 II +tile.venus.venus_ore_aluminum.name=알루미늄 광석 +tile.venus.venus_ore_copper.name=구리 광석 +tile.venus.venus_ore_galena.name=방연석 광석 +tile.venus.venus_ore_quartz.name=석영 광석 +tile.venus.venus_ore_silicon.name=규소 광석 +tile.venus.venus_ore_solar.name=태양 광석 +tile.venus.venus_ore_tin.name=주석 광석 +tile.venus.venus_rock_0.name=부드러운 금성석 +tile.venus.venus_rock_1.name=단단한 금성석 +tile.venus.venus_rock_2.name=금성 화산석 +tile.venus.venus_rock_3.name=부석 +tile.venus.lead_block.name=납 블록 +tile.venus_rock_scorched.name=그을린 금성석 +tile.walkway.walkway.description=통로는 장식용으로 사용되며, 공간 테마를 유지하면서 블록을 연결하는 데 사용됩니다. +tile.walkway.walkway.name=통로 +tile.walkway.walkway_pipe.description=산소 파이프 통로는 기체 운반 기능을 하는 동시에 위로 걷는 통로를 제공하는 다중 기능성 블록입니다. +tile.walkway.walkway_pipe.name=통로 +tile.walkway.walkway_wire.description=알루미늄 전선 통로는 전선 기능을 하는 동시에 위로 걷는 통로를 제공하는 다중 기능성 블록입니다. +tile.walkway.walkway_wire.name=통로 +tile.wall_gc.mars.name=화성 조양돌 담장 +tile.wall_gc.mars_bricks.name=화성 던전 벽돌 담장 +tile.web_torch.web_torch_0.name=거미줄 +tile.web_torch.web_torch_1.description=발광석 횃불 +tile.web_torch.web_torch_1.name=거미줄 +achievement.mars=화성으로 가자! +achievement.mars.desc=화성으로 가는 2티어 로켓 챙기기 +achievement.asteroids=소행성대로 가자! +achievement.asteroids.desc=소행성대로 가는 3티어 로켓 챙기기 +achievement.venus=금성으로 가자! +achievement.venus.desc=금성으로 가는 3티어 로켓 챙기기 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/nl_nl.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/nl_nl.lang new file mode 100644 index 00000000..69b8df19 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/nl_nl.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Astroïde Lander +container.launchcontroller.name=Lanceer Controleur +container.mars_lander.name=Landing Balonnen +container.short_range_telepad.name=Klein Bereik Teleporter +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astroïde Mijner +entity.creeper_boss.name=Geëvolueerde Creeper Baas +entity.entry_pod.name=Astroïde Lander +entity.grapple_hook.name=Werpanker +entity.landing_balloons.name=Landing Balonnen +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Vracht Raket +entity.rocket_t2.name=Tier 2 Raket +entity.rocket_t3.name=Tier 3 Raket +entity.slimeling.name=Slimeling ##NEEDS TRANSLATE## +entity.sludgeling.name=Sludgeling ##NEEDS TRANSLATE## +entity.small_asteroid.name=Kleine Asteroïde +fluid.argon=Argon Gas +fluid.atmosphericgases=Atmosferische gassen +fluid.bacterialsludge=Bacteriele Modder +fluid.carbondioxide=CO2 Gas +fluid.fuel=Brandstof +fluid.helium=Helium Gas +fluid.hydrogen=Waterstof Gas +fluid.liquidargon=Vloeibaar Argon +fluid.liquidmethane=Vloeibaar Methaan +fluid.liquidnitrogen=Vloeibaar Stikstof +fluid.liquidoxygen=Vloeibaar Zuurstof +fluid.methane=Methaan Gas +fluid.nitrogen=Stikstof Gas +fluid.oxygen=Zuurstof Gas +gas.carbondioxide.name=Koolstof Dioxide +gas.nitrogen.name=Stikstof +gas.oxygen.name=Zuurstof +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimensie ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Vracht Raket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Raket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Lanceer Controleur alle Dimensies +gc.configgui.launch_controller_chunk_load=Lanceer Controleur Chunkloading +gc.configgui.planets.title=Galacticraft Planeten Configuratie +gui.button.liquefy.name=Process ##NEEDS TRANSLATE## +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Terugroepen +gui.carbon_slot.desc.0=Gefragmenteerde Koolstof kan hiernaar toe +gui.cargorocket.status.launched.0=Al +gui.cargorocket.status.launched.1=Gelanceerd +gui.cargorocket.status.waiting.0=Wachten Voor +gui.cargorocket.status.waiting.1=Ontsteking ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Bewoonbaar#Geen Zuurstof#Zwaartekracht: 38% +gui.cryogenic.chat.cant_use=Ik kan dit niet gebruiken voor %d Seconden +gui.gas_input.desc.0=Probeer een Methaan$Gas bus hier te plaatsen +gui.gas_input.desc.1=(Misschien als alternatief,$een Atmosferische Sluis) +gui.gas_tank.desc.0=Gas Opslag +gui.gas_tank_compressed.desc.0=Gas Opslag (Samengeperst) +gui.hydrogen_input.desc.0=Dit Neemt een Waterstof Tank +gui.hydrogen_input.desc.1=Of een Atmosferische Sluis +gui.launch_controller.desc.0=Dit is de lanceer controleur's$unieke frequentie +gui.launch_controller.desc.1=Frequentie om de raket te lanceren naar +gui.launch_controller.desc.2=Of zou het lanceerplatform$Moeten worden verwijderd tijdens de lancering +gui.launch_controller.desc.3=Wanneer deze criteria er is,$Zak de raket lanceren +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=Vloeibare Gas Tank +gui.liquid_tank.desc.0=Vloeibare Tank +gui.message.address.name=Adres +gui.message.astro_miner.fail=Deze basis heeft al een astroïde mijner! +gui.message.astro_miner1.fail=de aanmerings plaats is geblokeerd door: +gui.message.astro_miner1_a.fail=de astroïde mijner's route is geblokeerd door: +gui.message.astro_miner2.fail=dat is een astroïde mijner te veel! +gui.message.astro_miner3.fail=de astroïde mijner's basis is verwijderd! +gui.message.astro_miner4.fail=de astroïde mijner heeft geen energie en kan niet terug naar de basis! +gui.message.astro_miner5.fail=de astroïde mijner's route naar zijn basis lijkt geblokeerd! +gui.message.astro_miner6.fail=de astroïde mijner is klaar met het mijnen van het gebied, en zal nu stoppen! +gui.message.astro_miner7.fail=er is niets om te mijnen voor een astroïde mijner op een ruimte station! +gui.message.astro_miner8.fail=een tweede astroïde mijner is gedetecteerd op de zelfde basis, de eerste zal nu stoppen. +gui.message.bubble_exp.name=Bubbel Uitbreiding +gui.message.cargo_full.name=Lading is Vol +gui.message.cargo_unloaded.name=Lading is Gelost +gui.message.dest_address.name=Doel Adres +gui.message.dest_frequency.name=Bestemmings Frequentie +gui.message.enable_grass.name=Enable Gras +gui.message.enable_trees.name=Enable Bomen +gui.message.frequency.name=Frequentie +gui.message.fully_fueled.name=Volgetankt +gui.message.grapple.fail=ik heb draden nodig als ik een enterhaak wil gooien! +gui.message.grass.name=Gras +gui.message.instant.name=Onmiddelijk +gui.message.invalid_address.name=Ongeldig Uniek Adres +gui.message.invalid_freq.name=Ongeldige Frequentie +gui.message.invalid_target_address.name=Ongeldig Doel Adres +gui.message.launch_when.name=Lanceer Als +gui.message.low_energy.name=Lage Energie +gui.message.no_bonemeal.name=Niet Genoeg Beendermeel +gui.message.no_energy.name=Niet Genoeg Energie +gui.message.no_saplings.name=Niet Genoeg Kiemplantjes +gui.message.no_seeds.name=Niet Genoeg Zaden +gui.message.no_valid_blocks.name=Geen Geldige Blokken in de bubbel +gui.message.no_water.name=Niet Genoeg Water +gui.message.not_enough.name=Niet Genoeg +gui.message.not_enough_energy.name=Niet Genoeg Energie! +gui.message.not_set.name=Niet Ingesteld +gui.message.one_min.name=1 Minuut +gui.message.receiving_active.name=Ontvanning Actief +gui.message.redstone_sig.name=Redstone Signaal +gui.message.remove_pad.name=Verwijder Platform +gui.message.sending_active.name=Verzending Actief +gui.message.success.name=Succes +gui.message.target_no_energy.name=Doel Heeft niet genoeg Energie! +gui.message.telepad_not_found.name=Teleporter Niet Gevonden! +gui.message.telepad_too_far.name=Doel Te Ver! (Maximaal %d) +gui.message.telepad_wrong_dim.name=Doel is in de verkeerde Dimensie! +gui.message.ten_sec.name=10 Seconden +gui.message.terraforming.name=Terravorming +gui.message.thirty_sec.name=30 Seconden +gui.message.trees.name=Bomen +gui.message.with_atmosphere0.name=Op een Planeet met genoeg on a planet with plenty of ##NEEDS TRANSLATE## +gui.message.with_atmosphere1.name=in de Atmosfeer +gui.message.zero_water.name=Geen Water! +gui.methane_output.desc.2=Methaan Tank +gui.miner.docked=Aangemeerd +gui.miner.docking=Aanmeren +gui.miner.mined=Gemijnd +gui.miner.mining=Aan Het Minen +gui.miner.offline=Offline +gui.miner.out_of_range=Uit Bereik +gui.miner.returning=Teruggaan +gui.miner.stuck=Vast op: +gui.miner.travelling=Reizen +gui.slimeling.button.follow=Volg +gui.slimeling.button.sit=Zit +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Aanval Schade +gui.slimeling.following=Volgen +gui.slimeling.food=Favoriete Voedsel +gui.slimeling.kills=Kills +gui.slimeling.name=Naam +gui.slimeling.owner=Eigenaar +gui.slimeling.scale=Schaal +gui.slimeling.sitting=Zitten +gui.status.liquefying.name=Vloeibaar Maken +gui.status.needs_carbon.name=Heeft Koolstof Nodig +gui.status.nogas.name=Geen Gas +gui.status.processing.name=Synthesizing ##NEEDS TRANSLATE## +gui.status.tankfull.name=Tank Vol +gui.status.tanksfull.name=Tanks vol +gui.telepad.desc.0=dit is de teleporter zijn$unieke Adres +gui.telepad.desc.1=adres van een andere teleporter.$wezens zullen er nartoe worden gestuurd. +gui.terraformer.desc.0=Water Tank +gui.water_bucket_slot.desc=Plaats water emmers hier +item.astro_miner.name=Astroïde Mijner +item.atmospheric_valve.name=atmosferische Klep +item.beam_core.name=Straal Kern +item.bucket_sludge.name=Bacteriele Modder Emmer +item.canister.gas.name=Gas +item.canister.liquid_argon.full.name=Gevulde Bus van Vloeibaar Argon +item.canister.liquid_argon.name=Vloeibaar #Korte Naam voor vloeibaar Argon Inhoud level +item.canister.liquid_argon.partial.name=Bus van Vloeibaar Argon +item.canister.liquid_nitrogen.full.name=Gevulde Bus van Vloeibaar Stikstof +item.canister.liquid_nitrogen.name=Vloeibaar +item.canister.liquid_nitrogen.partial.name=Bus van Vloeibaar Stikstof +item.canister.lox.full.name=Gevulde Bus van Vloeibaar Zuurstof +item.canister.lox.name=Vloeibaar Zuurstof +item.canister.lox.partial.name=Bus van Vloeibaar Zuurstof +item.carbon_fragments.name=Gefragmenteerde Koolstof +item.compressed_desh.name=Samengeperst Desh +item.compressed_titanium.name=Samengeperst Titanium +item.desh_axe.name=Desh Bijl +item.desh_boots.name=Desh Laarzen +item.desh_chestplate.name=Desh Kuras +item.desh_helmet.name=Desh Helm +item.desh_hoe.name=Desh Schoffel +item.desh_leggings.name=Desh Beenstukken +item.desh_pick.name=Desh Houweel +item.desh_pick_slime.description.name=Kan slijmeling eieren oogsten +item.desh_pick_slime.name=Kleverige Desh Houweel +item.desh_spade.name=Desh Schep +item.desh_stick.name=Desh Stok +item.desh_sword.name=Desh Zwaard +item.empty_gas_canister.name=Lege Gas Bus +item.engine_t2.name=Zware Raket Motor +item.fluid_manip.name=Vloeistof Manipulator +item.grapple.name=Werpanker +item.heavy_nose_cone.name=Zware Neuskegel +item.ingot_desh.name=Desh Staaf +item.ingot_titanium.name=Titanium Staaf +item.key.t2.name=Tier 2 Kerker Sleutel +item.methane_canister.name=Gevulde Methaan Gas Bus +item.methane_canister_partial.name=Methaan Gas Bus +item.orion_drive.name=Orion Aandrijving +item.raw_desh.name=Ongeraffineerde Desh +item.reinforced_plate_t2.name=Zware Beplating +item.reinforced_plate_t3.name=Zware Plaat +item.rocket_fins_t2.name=Zware Raket Vinnen +item.rocket_t2.cargo_rocket.name=Vracht Raket +item.rocket_t2.t2Rocket.name=Tier 2 Raket +item.rocket_t3.t3Rocket.name=Tier 3 Raket +item.shard_iron.name=Ijzeren Scherf +item.shard_titanium.name=Titanium Scherf +item.slimeling_cargo.name=Slimeling Inventaris Zak +item.thermal_boots.name=Thermische Aanpassing schoenen +item.thermal_chestplate.name=Thermische Aanpassing Kuras +item.thermal_cloth.name=Thermisch Doek +item.thermal_helm.name=Thermische Aanpassing Helm +item.thermal_leggings.name=Thermische Aanpassing Broek +item.tier2.desc=Tier 2 +item.tier3.desc=Tier 3 +item.titanium_axe.name=Titanium Bijl +item.titanium_boots.name=Titanium Schoenen +item.titanium_chestplate.name=Titanium Kuras +item.titanium_helmet.name=Titanium Helm +item.titanium_hoe.name=Titanium Schoffel +item.titanium_leggings.name=Titanium Broek +item.titanium_pickaxe.name=Titanium Houweel +item.titanium_shovel.name=Titanium Schep +item.titanium_sword.name=Titanium Zwaard +planet.asteroids=Asteroïden +planet.mars=Mars +schematic.astro_miner.name=Astroïde Mijner +schematic.cargo_rocket.name=Automatische Vracht Raket +schematic.rocket_t3.name=Tier 3 Raket +tile.asteroids_block.asteroid_rock_0.name=Asteroïde Steen +tile.asteroids_block.asteroid_rock_1.name=Asteroïde Steen +tile.asteroids_block.asteroid_rock_2.name=Asteroïde Steen +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminumerts +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmeniet Erts +tile.asteroids_block.ore_iron_asteroids.name=Ijzererts +tile.beam_receiver.description=Straal Ontvangers kan op een machine zijn invoer of uitvoer worden geplaats, om energie te vervoeren met stralen. +tile.beam_receiver.name=Straal Ontvangen +tile.beam_reflector.description=Straal Reflectors worden gebruikt om energie stralen van bron naar doel te sturen. Kan met de rechter-muisknop op worden geklikt om van doel te wisselen. +tile.beam_reflector.name=Straal Reflector +tile.cavern_vines.description=Grotten Lianen zijn Gevaarlijk Voor levende Wezens, je Word Verwikkeld en Omhoog Geslepen. +tile.cavern_vines.name=Grot Lianen +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=Creeper Ei +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Dicht Ijs +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Waterstof Pijp +tile.launch_controller.description=Lanceer Controleurs Worden Gebruikt om het aanpassen van lanceer Gebruik, waaronder de lanceer criteria en de bestemming van Automatische Lanceringen +tile.mars.coppermars.name=Koper Erts +tile.mars.deshmars.name=Desh Erts +tile.mars.ironmars.name=Ijzererts +tile.mars.marscobblestone.name=Keisteen +tile.mars.marsdeco.name=Blok Van Desh +tile.mars.marsdirt.name=Mars Ondergrond Steen +tile.mars.marsdungeon.name=Kerker Muur +tile.mars.marsgrass.name=Mars Oppervlakte Steen +tile.mars.marsstone.name=Mars Steen +tile.mars.tinmars.name=Tin Erts +tile.mars_stairs_cobblestone.name=Mars Keistenen Treden +tile.mars_stairs_brick.name=Mars Kerker Steen Treden +tile.mars_machine.0.name=Terravormer +tile.mars_machine.1.name=Cryogene Kamer +tile.mars_machine.2.name=Lanceer Controleur +tile.mars_machine.4.name=Gas Condensor +tile.mars_machine.5.name=Methaan Synthesizer +tile.mars_machine.6.name=Water Electrolyzer ##NEEDS TRANSLATE## +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=De astroïde Mijner Basis is de aanmeringsplaats voor een astroïde Mijner. het is groot ... probeer een 2 x 2 x 2 Kubus te maken met deze blokken. +tile.miner_base.name=Astroïde Mijner Basis +tile.slab_gc_half.mars_bricks_slab.name=Mars Kerker Steen Plaat +tile.slab_gc_half.mars_slab.name=Mars Keistenen Plaat +tile.slimeling_egg.blue.name=Blauw Slimeling Ei +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=Rood Slimeling Ei +tile.slimeling_egg.yellow.name=Geel Slimeling Ei +tile.sludge.name=Bacteriele Modder +tile.telepad_short.description=Kleine Bereik Teleporters worden gebruikt om spelers en andere levende wezens kleine afstanden (250 Blokken) naar gelinkte teleporters te teleporteren. +tile.telepad_short.name=Klein Bereik Teleporter +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Schatkist Zullen Genereren in Mars Kerkers. Je kunt ze openen als je de Eindbaas heb Verslagen. +tile.treasure_t2.name=Tier 2 Schatkist +tile.treasure_t3.description=Tier 3 Schatkisten zijn op dit moment ongebruikt. +tile.treasure_t3.name=Tier 3 Schatkist +tile.walkway.walkway.description=Loopbruggen worden gebruikt voor decoratieve doeleinden, je kan het gebruiken om blokken te verbinden. +tile.walkway.walkway.name=Passage +tile.walkway.walkway_pipe.description=Zuurstof bepijpte loopbruggen worden gebruikt om pijpen onder een volledig solide oppervlakte te hebben. +tile.walkway.walkway_pipe.name=Passage +tile.walkway.walkway_wire.description=Aluminium bedrade Loopbruggen worden gebruikt om draden onder een volledig solide oppervlakte te hebben. +tile.walkway.walkway_wire.name=Passage +tile.wall_gc.mars.name=Mars Keistenen Muur +tile.wall_gc.mars_bricks.name=Mars Kerker Steen diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pl_pl.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pl_pl.lang new file mode 100644 index 00000000..01452737 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pl_pl.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=Skonstruuj hak chwytak +checklist.equip_shield_controller.key=Wyekwipuj kontroler tarczy +checklist.thermal_padding.key=Wyekwipuj strój termalny +checklist.thermal_padding_t2.key=Wyekwipuj strój termalny poziomu 2 +container.crashed_probe.name=Rozbita sąda +container.entry_pod.name=Lądownik +container.geothermal_generator.name=Generator geotermalny +container.launchcontroller.name=Kontroler startu +container.mars_lander.name=Balony lądownicze +container.solar_array_controller.name=Kontroler szeregu słonecznego +container.short_range_telepad.name=Krótko-dystansowy teleporter +container.slimeling_inventory.name=Ekwipunek szlamelinga +container.tile_terraformer.name=Terraformator +dimension.mars.name=Mars +entity.astro_miner.name=Astro Kopacz +entity.creeper_boss.name=Wyewoluowany Boss creeper +entity.entry_pod.name=Lądownik +entity.entry_pod_venus.name=Lądownik na Wenus +entity.grapple_hook.name=Hak chwytak +entity.juicer.name=Moczek +entity.landing_balloons.name=Balony lądownicze +entity.projectile_tnt.name=Pocisk TNT +entity.rocket_cargo.name=Rakieta transportowa +entity.rocket_t2.name=Rakieta poziomu 2 +entity.rocket_t3.name=Rakieta poziomu 3 +entity.slimeling.name=Szlameling +entity.sludgeling.name=Osadeling +entity.small_asteroid.name=Mała asteroida +entity.spider_queen.name=Królowa pająków +entity.web_shot.name=Strzał sieci +fluid.argon=Argon (Gaz) +fluid.atmosphericgases=Gazy atmosferyczne +fluid.bacterialsludge=Osad bakteryjny +fluid.carbondioxide=CO2 (Gaz) +fluid.fuel=Paliwo +fluid.helium=Hel (Gaz) +fluid.hydrogen=Wodór (Gaz) +fluid.liquidargon=Płynny Argon +fluid.liquidmethane=Płynny Metan +fluid.liquidnitrogen=Płynny Azot +fluid.liquidoxygen=Płynny Tlen +fluid.methane=Metan (Gaz) +fluid.nitrogen=Azot (Gaz) +fluid.oil=Ropa +fluid.oxygen=Tlen (Gaz) +fluid.sulphuricacid=Kwas siarkowy +gas.carbondioxide.name=Dwutlenek węgla +gas.nitrogen.name=Azot +gas.oxygen.name=Tlen +gc.configgui.astro_miners_max=Maksymalna liczba Astro Kopaczy na gracza +gc.configgui.dimension_id_asteroids=ID wymiaru Asteroidy +gc.configgui.dimension_id_mars=ID wymiaru Mars +gc.configgui.dimension_id_venus=ID wymiaru Wenus +gc.configgui.disable_aluminum_gen_asteroids=Wyłącz generowanie rudy aluminium (Asteroidy) +gc.configgui.disable_ambient_lightning=Wyłącz pioruny (Wenus) +gc.configgui.disable_copper_gen_mars=Wyłącz generowanie rudy miedzi (Mars) +gc.configgui.disable_desh_gen_mars=Wyłącz generowanie rudy deszu (Mars) +gc.configgui.disable_galacticraft_helium=Wyłącz rejestracje gazu Helu +gc.configgui.disable_small_asteroids=Wyłącz spawnowanie małych asteroidów (Asteroidy) +gc.configgui.disable_ilmenite_gen_asteroids=Wyłącz generowanie rudy ilmenitu (Asteroidy) +gc.configgui.disable_iron_gen_asteroids=Wyłącz generowanie rudy żelaza (Asteroidy) +gc.configgui.disable_iron_gen_mars=Wyłącz generowanie rudy żelaza (Mars) +gc.configgui.disable_tin_gen_mars=Wyłącz generowanie rudy cyny (Mars) +gc.configgui.disable_venus_aluminum_gen=Wyłącz generowanie rudy aluminium (Wenus) +gc.configgui.disable_venus_copper_gen=Wyłącz generowanie rudy miedzi (Wenus) +gc.configgui.disable_venus_galena_gen=Wyłącz generowanie rudy galeny (Wenus) +gc.configgui.disable_venus_quartz_gen=Wyłącz generowanie rudy kwarcu (Wenus) +gc.configgui.disable_venus_silicon_gen=Wyłącz generowanie rudy silikonu (Wenus) +gc.configgui.disable_venus_solar_gen=Wyłącz generowanie rudy słonecznej (Wenus) +gc.configgui.disable_venus_tin_gen=Wyłącz generowanie rudy cyny (Wenus) +gc.configgui.id_schematic_cargo_rocket=ID schematu rakiety transportowej +gc.configgui.id_schematic_rocket_t2=ID schematu rakiety poziomu 2 +gc.configgui.id_schematic_rocket_t3=ID schematu rakiety poziomu 3 +gc.configgui.launch_controller_all_dims=Kontroler startu we wszystkich wymiarach +gc.configgui.launch_controller_chunk_load=Ładowanie chunków kontrolera startu +gc.configgui.planets.title=Konfiguracja planet Galacticraft +gui.button.add_blacklist.name=Czarna lista +gui.button.add_entity.name=Dodaj byt +gui.button.add_player.name=Dodaj gracza +gui.button.add_whitelist.name=Biała lista +gui.button.edit_blacklist.name=Edytuj czarną listę +gui.button.edit_priority.name=Edytuj priorytet +gui.button.edit_whitelist.name=Edytuj białą listę +gui.button.liquefy.name=Aktywuj +gui.button.liquefy_stop.name=Zatrzymaj +gui.button.never_fire_team.name=Nigdy nie strzelaj w drużynę wyścigu kosmicznego +gui.button.recall.name=Przyzwij +gui.button.remove_selected.name=Usuń Wybrane +gui.carbon_slot.desc.0=Można tu wstawić sfragmentowany węgiel +gui.cargorocket.status.launched.0=Rakieta już +gui.cargorocket.status.launched.1=wystartowała +gui.cargorocket.status.waiting.0=Czekanie na +gui.cargorocket.status.waiting.1=zapłon +gui.choose_planet.desc.mars=Zdatny do zamieszkania#Brak Tlenu#Grawitacja: 38% +gui.cryogenic.chat.cant_use=Nie mogę tego użyć przez następne %d sekundy +gui.gas_input.desc.0=Spróbuj wstawić tutaj$kanister metanu. +gui.gas_input.desc.1=(Alternatywnie możesz użyć,$zaworu atmosferycznego) +gui.gas_tank.desc.0=Zbiornik gazu +gui.gas_tank_compressed.desc.0=Zbiornik gazu (Skompresowany) +gui.hydrogen_input.desc.0=Slot na zbiornik wodoru +gui.hydrogen_input.desc.1=lub zawór atmosferyczny +gui.launch_controller.advanced=Zaawansowane +gui.launch_controller.desc.0=To jest unikalna częstotliwość$kontrolera startu +gui.launch_controller.desc.1=Częstotliwość do której mają lecieć rakiety +gui.launch_controller.desc.2=Czy platforma startowa ma zostać$usunięta przy starcie +gui.launch_controller.desc.3=Gdy podane kryteria zostaną spełnione,$rakieta wystartuje +gui.launch_controller.desc.4=Ukryj częstotliwość docelową$przed innymi graczami +gui.launch_controller.owner=Właściciel +gui.liquid_output.desc.2=lub zbiornikiem ze skroplonym gazem +gui.liquid_tank.desc.0=Zbiornik cieczy +gui.message.address.name=Adres +gui.message.astro_miner.fail=Ta stacja ma już Astro Kopacza! +gui.message.astro_miner1.fail=Miejsce dokujące jest blokowane przez: +gui.message.astro_miner1_a.fail=Trasa Astro Kopacza jest blokowana przez: +gui.message.astro_miner1_b.fail=Strefa chroniona! +gui.message.astro_miner2.fail=To o jednego Astro Kopacza za wiele! +gui.message.astro_miner3.fail=Stacja Astro Kopacza została usunięta! +gui.message.astro_miner4.fail=Astro Kopaczowi skończyła się energia i nie może wrócić do stacji! +gui.message.astro_miner5.fail=Trasa Astro Kopacza do stacji wygląda na zblokowaną! +gui.message.astro_miner6.fail=Astro Kopacz ukończył wydobywanie obszaru, i teraz zakończy swą pracę! +gui.message.astro_miner7.fail=Astro Kopacz nie ma czego wydobywać na stacji kosmicznej! +gui.message.astro_miner8.fail=Wykryto drugiego Astro Kopacza w tej samej stacji, wstrzymano pierwszego Kopacza. +gui.message.blacklist_mode.name=Tryb czarnej listy +gui.message.bubble_exp.name=Rozszerzanie bańki +gui.message.cargo_full.name=Magazyn jest pełny +gui.message.cargo_unloaded.name=Magazyn jest pusty +gui.message.connected_solar_controller.name=%d przymocowanych (zasięg 16 bloków) +gui.message.dest_address.name=Adres docelowy +gui.message.dest_frequency.name=Częstotliwość docelowa +gui.message.enable_grass.name=Aktywuj trawę +gui.message.enable_trees.name=Aktywuj drzewa +gui.message.enter_entity.name=Podaj nazwę/id bytu +gui.message.enter_player.name=Podaj nazwę gracza +gui.message.frequency.name=Częstotliwość +gui.message.fully_fueled.name=W pełni zatankowany +gui.message.grapple.fail=Potrzebuję trochę nici żeby wystrzelić chwytak! +gui.message.grass.name=Trawę +gui.message.instant.name=Natychmiast +gui.message.invalid_address.name=Niewłaściwy unikalny adres +gui.message.invalid_freq.name=Nieodpowiednia częstotliwość +gui.message.invalid_target_address.name=Niewłaściwy adres docelowy +gui.message.launch_when.name=Wystartuj gdy +gui.message.low_energy.name=Mało energii +gui.message.low_energy_output.name=Mało produkcji energii +gui.message.no_bonemeal.name=Za mało mączki kostnej +gui.message.no_energy.name=Brak energii! +gui.message.no_saplings.name=Za mało sadzonek +gui.message.no_seeds.name=Za mało nasion +gui.message.no_valid_blocks.name=Brak odpowiednich bloków w bańce +gui.message.no_water.name=Za mało wody +gui.message.not_enough.name=Nie wystarczające +gui.message.not_enough_energy.name=Za mało energii! +gui.message.not_set.name=Nie ustawione +gui.message.one_min.name=1 minuta +gui.message.player.name=Gracz +gui.message.priority_closest.name=Najbliższy +gui.message.priority_health_high.name=Najwięcej zdrowia +gui.message.priority_health_low.name=Najmniej zdrowia +gui.message.priority_low.name=Priorytet (Najniższy wpierw) +gui.message.receiving_active.name=Odbiór aktywny +gui.message.redstone_sig.name=Sygnał czerwonego kamienia +gui.message.remove_pad.name=Usuń platforme przy starcie +gui.message.sending_active.name=Wysyłanie aktywne +gui.message.success.name=Sukces +gui.message.target_meteors.name=Celuj w meteory +gui.message.target_no_energy.name=Cal ma za mało energii! +gui.message.telepad_not_found.name=Nie znaleziono teleportera! +gui.message.telepad_too_far.name=Cel jest za daleko! (Maksymalnie %d) +gui.message.telepad_wrong_dim.name=Cel jest w niewłaściwym wymiarze! +gui.message.telepad_target_disabled.name=Cel jest wyłączony +gui.message.ten_sec.name=10 sekund +gui.message.terraforming.name=Terraformowanie +gui.message.thirty_sec.name=30 sekund +gui.message.trees.name=Drzewa +gui.message.with_atmosphere0.name=na planecie bogatą w +gui.message.with_atmosphere1.name=w atmosferze +gui.message.zero_water.name=Brak wody! +gui.methane_output.desc.2=ze zbiornika z metanem +gui.miner.docked=W doku +gui.miner.docking=Dokuje +gui.miner.mined=Wydobyty +gui.miner.mining=Wydobywa +gui.miner.offline=Nieaktywny +gui.miner.out_of_range=Za daleko +gui.miner.returning=Powraca +gui.miner.stuck=Zatrzymany na: +gui.miner.travelling=Podróżuje +gui.slimeling.button.follow=Podążaj +gui.slimeling.button.sit=Siedź +gui.slimeling.chat.wrong_player=To nie jest mój szlameling! +gui.slimeling.damage=Obrażenia +gui.slimeling.following=Podąża +gui.slimeling.food=Ulubione jedzenie +gui.slimeling.kills=Zabójstwa +gui.slimeling.name=Nazwa +gui.slimeling.owner=Właściciel +gui.slimeling.scale=Wielkość +gui.slimeling.sitting=Siedzi +gui.status.invalid_spout_1.name=Musi zostać postawiony na +gui.status.invalid_spout_2.name=odpowiednim gejzerze siarkowym +gui.status.liquefying.name=Skraplanie +gui.status.needs_carbon.name=Potrzeba węgla +gui.status.nogas.name=Brak gazu +gui.status.processing.name=Syntezowanie +gui.status.tankfull.name=Zbiornik pełny +gui.status.tanksfull.name=Zbiorniki pełne +gui.telepad.desc.0=To jest unikalny adres$teleportera. +gui.telepad.desc.1=Adres innego teleportera.$Istoty będą tam wysyłane. +gui.terraformer.desc.0=Zbiornik wody +gui.water_bucket_slot.desc=Wstaw tutaj wiadra wody +item.astro_miner.name=Astro Kopacz +item.atmospheric_valve.name=Zawór atmosferyczny +item.atomic_battery.name=Bateria jądrowa +item.beam_core.name=Rdzeń promienia +item.bucket_sludge.name=Wiadro osadu bakteryjnego +item.bucket_sulphuric_acid.name=Wiadro kwasu siarkowego +item.canister.gas.name=Gaz #skrót dla poziomu zawartości gazu metanu +item.canister.liquid_argon.full.name=Pełny kanister płynnego argonu +item.canister.liquid_argon.name=Płyn #skrót dla poziomu zawartości płynnego azotu +item.canister.liquid_argon.partial.name=Kanister płynnego argonu +item.canister.liquid_nitrogen.full.name=Pełny kanister płynnego azotu +item.canister.liquid_nitrogen.name=Płyn #skrót dla poziomu zawartości płynnego azotu +item.canister.liquid_nitrogen.partial.name=Kanister płynnego azotu +item.canister.lox.full.name=Pełny kanister płynnego tlenu +item.canister.lox.name=PŁT #skrót dla poziomu zawartości płynnego tlenu +item.canister.lox.partial.name=Kanister płynnego tlenu +item.carbon_fragments.name=Sfragmentowany węgiel +item.compressed_desh.name=Skompresowany desz +item.compressed_titanium.name=Skompresowany tytan +item.desh_axe.name=Deszowa siekiera +item.desh_boots.name=Deszowe buty +item.desh_chestplate.name=Deszowy napierśnik +item.desh_helmet.name=Deszowy hełm +item.desh_hoe.name=Deszowa motyka +item.desh_leggings.name=Deszowe nogawice +item.desh_pick.name=Deszowy kilof +item.desh_pick_slime.description.name=Może zbierać jaja creeperów +item.desh_pick_slime.name=Lepki deszowy kilof +item.desh_spade.name=Deszowa łopata +item.desh_stick.name=Deszowy patyk +item.desh_sword.name=Deszowy miecz +item.dust_titanium.name=Titanium Dust +item.empty_gas_canister.name=Pusty kanister na gaz +item.engine_t2.name=Ciężki silnik rakietowy +item.fluid_manip.name=Manipulator płynów +item.grapple.name=Hak chwytak +item.heavy_nose_cone.name=Ciężka głowica statku +item.ingot_desh.name=Sztabka deszu +item.ingot_titanium.name=Sztabka tytanu +item.ingot_lead.name=Sztabka ołowiu +item.key.t2.name=Klucz Lochu poziomu 2 +item.key.t3.name=Klucz Lochu poziomu 3 +item.methane_canister.name=Pełny kanister metanu (Gaz) +item.methane_canister_partial.name=Kanister metanu (Gaz) +item.orion_drive.name=Silnik rudojonowy +item.prelaunch_checklist.name=Lista przedstartowa +item.radioisotope_core.name=Rdzeń radioizotopowy +item.raw_desh.name=Nieprzetworzony desz +item.reinforced_plate_t2.name=Wzmocniona płyta pancerzowa +item.reinforced_plate_t3.name=Wzmocniona płyta pancerzowa +item.rocket_fins_t2.name=Ciężkie stateczniki rakiety +item.rocket_t2.cargo_rocket.name=Rakieta transportowa +item.rocket_t2.t2Rocket.name=Rakieta poziomu 2 +item.rocket_t3.t3Rocket.name=Rakieta poziomu 3 +item.shard_iron.name=Odłamek żelaza +item.shard_titanium.name=Odłamek tytanu +item.shield_controller.description=Kontroler tarczy ochrania zbroję przed WSZELKĄ formą obrażeń - razem z korozją atmosferyczną! +item.shield_controller.name=Kontroler tarczy +item.slimeling_cargo.name=Torba ekwipunkowa szlamelinga +item.solar_dust.name=Pył słoneczny +item.solar_module_2.name=Panel szeregu słonecznego +item.strange_seed.name=Dziwaczne nasiono +item.thermal_boots.name=Wyściółka termalna butów +item.thermal_boots_t2.name=Izotermiczne buty +item.thermal_chestplate.name=Wyściółka termalna napierśnika +item.thermal_chestplate_t2.name=Izotermalny napierśnik +item.thermal_cloth.name=Tkanina termalna +item.thermal_fabric.name=Materiał izotermiczny +item.thermal_helm.name=Wyściółka termalna hełmu +item.thermal_helm_t2.name=Hełm izotermiczny +item.thermal_leggings.name=Wyściółka termalna nogawic +item.thermal_leggings_t2.name=Nogawice izotermiczne +item.thin_solar_wafer.name=Płyta szeregu słonecznego +item.tier2.desc=Poziom 2 +item.tier3.desc=Poziom 3 +item.titanium_axe.name=Tytanowa siekiera +item.titanium_boots.name=Tytanowe buty +item.titanium_chestplate.name=Tytanowy napierśnik +item.titanium_helmet.name=Tytanowy hełm +item.titanium_hoe.name=Tytanowa motyka +item.titanium_leggings.name=Tytanowe nogawice +item.titanium_pickaxe.name=Tytanowy kilof +item.titanium_shovel.name=Tytanowa łopata +item.titanium_sword.name=Tytanowy miecz +item.volcanic_pickaxe.description=Wykopuje obszar 3x3 zależnie w jaki spoglądasz kierunek +item.volcanic_pickaxe.name=Wulkaniczny kilof +planet.asteroids=Asteroidy +planet.mars=Mars +schematic.astro_miner.name=Astro Kopacz +schematic.cargo_rocket.name=Automatyczna rakieta transportowa +schematic.rocket_t3.name=Rakieta poziomu 3 +tile.asteroids_block.asteroid_rock_0.name=Kamień meteorytowy +tile.asteroids_block.asteroid_rock_1.name=Kamień meteorytowy +tile.asteroids_block.asteroid_rock_2.name=Kamień meteorytowy +tile.asteroids_block.ore_aluminum_asteroids.name=Ruda aluminium +tile.asteroids_block.ore_ilmenite_asteroids.name=Ruda ilmenitu +tile.asteroids_block.ore_iron_asteroids.name=Ruda żelaza +tile.asteroids_block.asteroid_deco.name=Ciemny dekoracyjny blok +tile.asteroids_block.titanium_block.name=Blok tytanu +tile.beam_receiver.description=Odbiorniki promienia są wykorzystywane jako wejście i wyjście dla maszyn, by przenieść energię używając promienia. +tile.beam_receiver.name=Odbiornik energii promienia +tile.beam_reflector.description=Reflektory promienia są wykorzystywane do przekierowywania promieni energii z źródła do celu. Wciśnij prawy przycisk myszy by zmienić cel. +tile.beam_reflector.name=Reflektor energii promienia +tile.cavern_vines.description=Trujące pnącza są niebiezpieczne dla żywych istot, oplatają ofiarę i wciągają ją w górę. +tile.cavern_vines.name=Trujące pnącza +tile.crashed_probe.name=Rozbita sąda +tile.creeper_egg.description=Jaja creepera powstają w marsowych Lochach, tworzą cichego wroga w przypadku eksplozji. +tile.creeper_egg.name=Jajo creepera +tile.cryo_chamber.description=Komora kriogeniczna pozwala graczowi spać podczas dnia, lecząc przy okazji trochę zdrowia, ale trzeba poczekać przed następnym użyciem. +tile.dense_ice.name=Zbity lód +tile.electrolyzer.description=Przemienia wodę na wodór (przydatne w syntezatorze metanu) i tlen. +tile.gas_liquefier.description=Skrapla gazy, zarówno z atmosfery jak i z kanistrów. Skroplony metan jest świetnym paliwem rakietowym! +tile.geothermal_generator.description=Przy postawieniu na odpowiednim gejzerze pary siarkowej, generuje energię w oscylującym tempie +tile.geothermal_generator.name=Generator geotermalny +tile.hydrogen_pipe.description=Rura wodorowa przenosi wodór ze zbiornika jednej maszyny do drugiej. +tile.hydrogen_pipe.name=Rura wodorowa +tile.launch_controller.description=Kontrolery startu są wykorzystywane do dostosowywania warunków startu, wliczając kryteria wymagane do startu i wybór celu lądowania (Platformy startowe). +tile.laser_turret.name=Działko laserowe +tile.laser_turret.description=Może wycelowywać w meteory, graczy, i potwory +tile.mars.coppermars.name=Ruda miedzi +tile.mars.deshmars.name=Ruda deszu +tile.mars.ironmars.name=Ruda żelaza +tile.mars.marscobblestone.name=Marsowy bruk +tile.mars.marsdeco.name=Blok deszu +tile.mars.marsdirt.name=Marsowy podpowierzchniowy kamień +tile.mars.marsdungeon.name=Cegły marsowego Lochu +tile.mars.marsgrass.name=Marsowy wygładzony podpowierzchniowy kamień +tile.mars.marsstone.name=Marsowy kamień +tile.mars.tinmars.name=Ruda cyny +tile.mars_machine.0.name=Terraformator +tile.mars_machine.1.name=Komora kriogeniczna +tile.mars_machine.2.name=Kontroler startu +tile.mars_machine.4.name=Skraplacz gazu +tile.mars_machine.5.name=Syntezator metanu +tile.mars_machine.6.name=Elektrolizer wody +tile.mars_stairs_brick.name=Schody marsowego Lochu +tile.mars_stairs_cobblestone.name=Marsowe brukowe schody +tile.methane_synthesizer.description=Ze źródłem wodoru i węgla, syntezator metanu łączy oba pierwiastki tworząc metan przeznaczony do dalszej obróbki w skraplaczu gazu. +tile.miner_base.description=Stacja Astro Kopacza jest miejscem dokowania dla Astro Kopacza. Jest duża ... Ustaw bloki do wymiarów 2 x 2 x 2 aby ją stworzyć. +tile.miner_base.name=Stacja Astro Kopacza +tile.miner_base_full.name=Stacja Astro Kopacza +tile.slab_gc_half.mars_bricks_slab.name=Ceglana płyta marsowego Lochu +tile.slab_gc_half.mars_slab.name=Marsowa brukowa płyta +tile.slab_gc_half.asteroids_slab.name=Ciemna dekoracyjna płyta +tile.slimeling_egg.blue.name=Jajo niebieskiego szlamelinga +tile.slimeling_egg.description=Jaja szlamelingów, uderzone raz przez pięść gracza, wyklują się w zwierzaka. +tile.slimeling_egg.red.name=Jajo czerwonego szlemelinga +tile.slimeling_egg.yellow.name=Jajo żółtego szlamelinga +tile.sludge.name=Osad bakteryjny +tile.solar_array_controller.name=Kontroler szeregu słonecznego +tile.solar_array_controller.description=Podłącz moduły szeregu słonecznego do tego bloku by przekazać energię. Najbardziej efektywny na stacjach kosmicznych. +tile.solar_array_module.name=Moduł szeregu słonecznego +tile.solar_array_module.description=Podłącz pare bloków tego typu do kontrolera szeregu słonecznego by przekazać energię. Najbardziej efektywny na stacjach kosmicznych. +tile.spout.name=Gejzer pary +tile.sulphuric_acid.name=Kwas siarkowy +tile.telepad_short.description=Krótko-dystansowe teleportery są wykorzystywane do teleportacji gracza i innych żyjących istnień na krótki dystans (250 bloków) gdy są połączone z innym teleporterem. +tile.telepad_short.name=Krótko-dystansowy teleporter +tile.terraformer.description=Terraformatory wykorzystywane są by dodać trochę zieleni na odległych planetach, dodając trawę, drzewa i wodę gdy dostarczone im są odpowiednie materiały. +tile.treasure_t2.description=Skrzynie skarbów poziomu 2 są generowane w marsowych Lochach. Można je otworzyć po pokonaniu finałowego Bossa. +tile.treasure_t2.name=Skrzynia skarbów poziomu 2 +tile.treasure_t3.description=Skrzynie skarbów poziomu 3 są generowane w wenusowych Lochach. Można je otworzyć po pokonaniu finałowego Bossa. +tile.treasure_t3.name=Skrzynia skarbów poziomu 3 +tile.venus.dungeon_brick_venus_1.name=Cegły wenusowego Lochu I +tile.venus.dungeon_brick_venus_2.name=Cegły wenusowego Lochu II +tile.venus.venus_ore_aluminum.name=Ruda aluminium +tile.venus.venus_ore_copper.name=Ruda miedzi +tile.venus.venus_ore_galena.name=Ruda galeny +tile.venus.venus_ore_quartz.name=Ruda kwarcu +tile.venus.venus_ore_silicon.name=Ruda silikonu +tile.venus.venus_ore_solar.name=Ruda słoneczna +tile.venus.venus_ore_tin.name=Ruda cyny +tile.venus.venus_rock_0.name=Miękki wenusowy kamień +tile.venus.venus_rock_1.name=Twardy wenusowy kamień +tile.venus.venus_rock_2.name=Wulkaniczny wenusowy kamień +tile.venus.venus_rock_3.name=Pumeks +tile.venus.lead_block.name=Blok ołowiu +tile.venus_rock_scorched.name=Przypalony wenusowy kamień +tile.walkway.walkway.description=Chodniki są używane do dekoracji, oraz do łączenia bloków zachowując miejsce oraz motyw kosmiczny. +tile.walkway.walkway.name=Chodnik +tile.walkway.walkway_pipe.description=Chodniki z rurą na ciecze są używane do prowadzenia rur pod powierzchnią do chodzenia. +tile.walkway.walkway_pipe.name=Chodnik +tile.walkway.walkway_wire.description=Chodniki z kablem aluminiowym są używane do prowadzenia kabli pod powierzchnią do chodzenia. +tile.walkway.walkway_wire.name=Chodnik +tile.wall_gc.mars.name=Marsowy brukowy murek +tile.wall_gc.mars_bricks.name=Murek z marsowego Lochu +tile.web_torch.web_torch_0.name=Pajęczynowa sieć +tile.web_torch.web_torch_1.description=Pochodnia jasnogłazowa +tile.web_torch.web_torch_1.name=Pajęczynowa sieć +achievement.mars=Na Marsa! +achievement.mars.desc=Zabierz rakietę poziomu 2 na Marsa! +achievement.asteroids=Na Pas Asteroid +achievement.asteroids.desc=Zabierz rakietę poziomu 3 na Pas Asteroid! +achievement.venus=Na Wenus! +achievement.venus.desc=Zabierz rakietę poziomu 3 na Wenus! diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_br.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_br.lang new file mode 100644 index 00000000..8ee51aeb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_br.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Cápsula de Entrada +container.launchcontroller.name=Controle de Lançamento +container.mars_lander.name=Balões de Aterrissagem +container.short_range_telepad.name=Telebase de Curto Alcance +container.tile_terraformer.name=Terraformador +dimension.mars.name=Marte +entity.astro_miner.name=Astrominerador +entity.creeper_boss.name=Creeper-Chefe Evoluído +entity.entry_pod.name=Cápsula de Entrada +entity.grapple_hook.name=Gancho +entity.landing_balloons.name=Balões de Aterrissagem +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Foguete de Carga +entity.rocket_t2.name=Foguete Nível 2 +entity.rocket_t3.name=Foguete Nível 3 +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Asteroides Menores +fluid.argon=Gás Argônio +fluid.atmosphericgases=Gases Atmosféricos +fluid.bacterialsludge=Lodo Bacterial +fluid.carbondioxide=Gás Carbónico +fluid.fuel=Combustível +fluid.helium=Gás Hélio +fluid.hydrogen=Gás Hidrogênio +fluid.liquidargon=Argônio Líquido +fluid.liquidmethane=Metano Líquido +fluid.liquidnitrogen=Nitrogênio Líquido +fluid.liquidoxygen=Oxigênio Líquido +fluid.methane=Gás Metano +fluid.nitrogen=Gás Nitrogênio +fluid.oxygen=Gás Oxigênio +gas.carbondioxide.name=Gás Carbônico +gas.nitrogen.name=Nitrogênio +gas.oxygen.name=Oxigônio +gc.configgui.astro_miners_max=No. máximo de Astromineradores por jogador +gc.configgui.dimension_id_asteroids=ID da dimensão Asteroides +gc.configgui.dimension_id_mars=ID da dimensão Marte +gc.configgui.disable_galacticraft_helium=Desabilitar registro de gás hélio +gc.configgui.id_schematic_cargo_rocket=ID do Esquemático do Foguete de Carga +gc.configgui.id_schematic_rocket_t2=ID do Esquemático do Foguete Nível 2 +gc.configgui.id_schematic_rocket_t3=ID do Esquemático do Foguete Nível 3 +gc.configgui.launch_controller_all_dims=Controle de Lançamento para todas as dimensões +gc.configgui.launch_controller_chunk_load=Chunkloading do Controle de Lançamento +gc.configgui.planets.title=Configuração Galacticraft Planets +gui.button.liquefy.name=Processar +gui.button.liquefy_stop.name=Parar +gui.button.recall.name=Retornar +gui.carbon_slot.desc.0=Carbono Fragmentado pode ir aqui +gui.cargorocket.status.launched.0=Pronto +gui.cargorocket.status.launched.1=Lançado +gui.cargorocket.status.waiting.0=Esperando por +gui.cargorocket.status.waiting.1=ignição +gui.choose_planet.desc.mars=Habitável#Sem Oxigênio#Gravidade: 38% +gui.cryogenic.chat.cant_use=Não posso usar isso pelos próximos %d segundos +gui.gas_input.desc.0=Experimente colocar uma$Lata de Gás Metano aqui +gui.gas_input.desc.1=(Ou talvez, uma Válvula$Atmosférica) +gui.gas_tank.desc.0=Armazenamento de Gás +gui.gas_tank_compressed.desc.0=Armazenamento de Gás (Comprimido) +gui.hydrogen_input.desc.0=Aqui vai um tanque de hidrogênio +gui.hydrogen_input.desc.1=ou uma Válvula Atmosférica +gui.launch_controller.desc.0=Este é a frequência única do$Controle de Lançamento +gui.launch_controller.desc.1=Frequência para qual foguetes serão lançados +gui.launch_controller.desc.2=Se a base de lançamento deve ser$removida no lançamento +gui.launch_controller.desc.3=Quando esse critério for cumprido,$lançar foguete +gui.launch_controller.desc.4=Esconder frequência de destino$de outros jogadores +gui.liquid_output.desc.2=tanque de gás liquefeito +gui.liquid_tank.desc.0=Tanque de líquidos +gui.message.address.name=Endereço +gui.message.astro_miner.fail=Esta base já tem um Astrominerador! +gui.message.astro_miner1.fail=A área de acoplamento está bloqueada por: +gui.message.astro_miner1_a.fail=A rota Astrominerador está bloqueada por: +gui.message.astro_miner2.fail=Já há Astromineradores demais! +gui.message.astro_miner3.fail=A base do Astrominerador foi removido! +gui.message.astro_miner4.fail=O Astrominerador ficou sem energia e não pode voltar à base! +gui.message.astro_miner5.fail=A rota do Astrominerador para sua base parece estar bloqueada! +gui.message.astro_miner6.fail=O Astrominerador terminou a mineração na área, e agora vai parar! +gui.message.astro_miner7.fail=Não há nada para um Astrominerador minerar em uma estação espacial! +gui.message.astro_miner8.fail=Um segundo Astrominerador foi detectado na mesma base, o primeiro então irá ser paralizado. +gui.message.bubble_exp.name=Bolha expandindo +gui.message.cargo_full.name=Carga Cheia +gui.message.cargo_unloaded.name=Carga Vazia +gui.message.dest_address.name=Endereço-Destino +gui.message.dest_frequency.name=Destino +gui.message.enable_grass.name=Habilitar Grama +gui.message.enable_trees.name=Habilitar Árvores +gui.message.frequency.name=Frequência +gui.message.fully_fueled.name=100% Abastecido +gui.message.grapple.fail=Vou precisar de alguma linha se eu quero jogar esse Gancho! +gui.message.grass.name=Grama +gui.message.instant.name=Imediatamente +gui.message.invalid_address.name=Endereço Único Inválido +gui.message.invalid_freq.name=Frequência Inválida +gui.message.invalid_target_address.name=Endereço-Destino Inválido +gui.message.launch_when.name=Lançar qdo. +gui.message.low_energy.name=Pouca energia +gui.message.no_bonemeal.name=Farinha de Osso Insuficiente +gui.message.no_energy.name=Energia Insuficiente +gui.message.no_saplings.name=Mudas Insuficientes +gui.message.no_seeds.name=Sementes Insuficientes +gui.message.no_valid_blocks.name=Sem blocos válidos na bolha +gui.message.no_water.name=Água Insuficiente +gui.message.not_enough.name=Insuficiente +gui.message.not_enough_energy.name=Energia Insuficiente! +gui.message.not_set.name=Não Definido +gui.message.one_min.name=1 Minuto +gui.message.receiving_active.name=Recebimento Ativo +gui.message.redstone_sig.name=Sinal de Redstone +gui.message.remove_pad.name=Remover Base +gui.message.sending_active.name=Envio Ativo +gui.message.success.name=Sucesso +gui.message.target_no_energy.name=Destino não tem energia suficiente! +gui.message.telepad_not_found.name=Telebase Não Encontrada! +gui.message.telepad_too_far.name=Destino longe demais! (Máx %d) +gui.message.telepad_wrong_dim.name=Destino está numa dimensão errada! +gui.message.ten_sec.name=10 Segundos +gui.message.terraforming.name=Terraformando +gui.message.thirty_sec.name=30 Segundos +gui.message.trees.name=Árvores +gui.message.with_atmosphere0.name=em um planeta abundante em +gui.message.with_atmosphere1.name=na atmosfera +gui.message.zero_water.name=Sem água! +gui.methane_output.desc.2=tanque de metano +gui.miner.docked=Estacionado +gui.miner.docking=Estacionando +gui.miner.mined=Minerado +gui.miner.mining=Minerar +gui.miner.offline=Desconectado +gui.miner.out_of_range=Fora de alcance +gui.miner.returning=Retornando +gui.miner.stuck=Preso em: +gui.miner.travelling=Viajando +gui.slimeling.button.follow=Seguir +gui.slimeling.button.sit=Sentar +gui.slimeling.chat.wrong_player=Este não é meu Slimeling! +gui.slimeling.damage=Força de ataque +gui.slimeling.following=Seguindo +gui.slimeling.food=Comida favorita +gui.slimeling.kills=Vítimas +gui.slimeling.name=Nome +gui.slimeling.owner=Dono +gui.slimeling.scale=Tamanho +gui.slimeling.sitting=Sentado +gui.status.liquefying.name=Condensando +gui.status.needs_carbon.name=Falta carbono +gui.status.nogas.name=Sem gás +gui.status.processing.name=Sintetizando +gui.status.tankfull.name=Tanque cheio +gui.status.tanksfull.name=Tanques cheios +gui.telepad.desc.0=Este é o endereço$único desta Telebase +gui.telepad.desc.1=Endereço de outra Telebase.$Entidades serão enviadas para lá. +gui.terraformer.desc.0=Tanque de Água +gui.water_bucket_slot.desc=Coloque baldes de água aqui +item.astro_miner.name=Astrominerador +item.atmospheric_valve.name=Válvula Atmosférica +item.beam_core.name=Núcleo de Feixe +item.bucket_sludge.name=Balde de Lodo Bacterial +item.canister.gas.name=Gás #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Lata de Argônio Líquido Cheia +item.canister.liquid_argon.name=Líquido #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Lata de Argônio Líquido +item.canister.liquid_nitrogen.full.name=Lata de Nitrogênio Líquido Cheia +item.canister.liquid_nitrogen.name=Líquido #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Lata de Nitrogênio Líquido +item.canister.lox.full.name=Lata de Oxigênio Líquido Cheia +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Lata de Oxigênio Líquido +item.carbon_fragments.name=Carbono Fragmentado +item.compressed_desh.name=Desh Prensado +item.compressed_titanium.name=Titânio Prensado +item.desh_axe.name=Machado de Desh +item.desh_boots.name=Botas de Desh +item.desh_chestplate.name=Peitoral de Desh +item.desh_helmet.name=Elmo de Desh +item.desh_hoe.name=Enxada de Desh +item.desh_leggings.name=Perneiras de Desh +item.desh_pick.name=Picareta de Desh +item.desh_pick_slime.description.name=Pode-se colher ovos de Slimeling +item.desh_pick_slime.name=Picareta de Desh Pegajosa +item.desh_spade.name=Pá de Desh +item.desh_stick.name=Graveto de Desh +item.desh_sword.name=Espada de Desh +item.empty_gas_canister.name=Lata de Gás Vazia +item.engine_t2.name=Motor de Foguete Pesado +item.fluid_manip.name=Manipulador de Fluidos +item.grapple.name=Gancho +item.heavy_nose_cone.name=Nariz de Foguete Pesado +item.ingot_desh.name=Barra de Desh +item.ingot_titanium.name=Barra de Titânio +item.key.t2.name=Chave de Calabouço Nível 2 +item.methane_canister.name=Lata de Gás Metano Cheia +item.methane_canister_partial.name=Lata de Gás Metano +item.orion_drive.name=Unidade Orion +item.raw_desh.name=Desh Bruto +item.reinforced_plate_t2.name=Blindagem Pesada +item.reinforced_plate_t3.name=Blindagem Pesada +item.rocket_fins_t2.name=Aleta de Foguete Pesado +item.rocket_t2.cargo_rocket.name=Foguete de Carga +item.rocket_t2.t2Rocket.name=Foguete Nível 2 +item.rocket_t3.t3Rocket.name=Foguete Nível 3 +item.shard_iron.name=Estilhaço de Ferro +item.shard_titanium.name=Estilhaço de Titânio +item.slimeling_cargo.name=Mochila-Inventário para Slimeling +item.thermal_boots.name=Botas do Traje Térmico +item.thermal_chestplate.name=Peitoral do Traje Térmico +item.thermal_cloth.name=Tecido Térmico +item.thermal_helm.name=Elmo do Traje Térmico +item.thermal_leggings.name=Perneiras do Traje Térmico +item.tier2.desc=Nível 2 +item.tier3.desc=Nível 3 +item.titanium_axe.name=Machado de Titânio +item.titanium_boots.name=Botas de Titânio +item.titanium_chestplate.name=Peitoral de Titânio +item.titanium_helmet.name=Elmo de Titânio +item.titanium_hoe.name=Enxada de Titânio +item.titanium_leggings.name=Perneiras de Titânio +item.titanium_pickaxe.name=Picareta de Titânio +item.titanium_shovel.name=Pá de Titânio +item.titanium_sword.name=Espada de Titânio +planet.asteroids=Asteroides +planet.mars=Marte +schematic.astro_miner.name=Astrominerador +schematic.cargo_rocket.name=Foguete de Carga Automático +schematic.rocket_t3.name=Foguete Nível 3 +tile.asteroids_block.asteroid_rock_0.name=Rocha de Asteroide +tile.asteroids_block.asteroid_rock_1.name=Rocha de Asteroide +tile.asteroids_block.asteroid_rock_2.name=Rocha de Asteroide +tile.asteroids_block.ore_aluminum_asteroids.name=Minério de Alumínio +tile.asteroids_block.ore_ilmenite_asteroids.name=Minério de Ilmenita +tile.asteroids_block.ore_iron_asteroids.name=Minério de Ferro +tile.beam_receiver.description=Receptores de Feixe são colocados nas entradas e saídas de energia de máquinas, para transferir energia utilizando feixes. +tile.beam_receiver.name=Receptor de Feixe +tile.beam_reflector.description=Refletores de Feixe são usados para redirecionar feixes de energia da fonte ao destino. Podem ser clicados com o botão direto do mouse para apontar para outros alvos. +tile.beam_reflector.name=Refletor de Feixe +tile.cavern_vines.description=Vinhas de Caverna são perigosas para os seres vivos, podendo se prender neles e arrastá-los para cima. +tile.cavern_vines.name=Vinhas de Caverna +tile.creeper_egg.description=Ovos de Creeper vão aparecer em Calabouços Marcianos, gerando um predador furtivo ao quebrar por explosão. +tile.creeper_egg.name=Ovo de Creeper +tile.cryo_chamber.description=Câmara Criogênicas irão permitir que um jogador durma durante o dia, restaurando uma pequena quantidade de saúde, mas têm um tempo de recarga. +tile.dense_ice.name=Gelo Denso +tile.electrolyzer.description=Transforma água em hidrogênio (útil para o Sintetizador de Metano) e oxigênio. +tile.gas_liquefier.description=Converte gases em líquidos, seja gases da atmosfera ou de latas. Metano liquefeito faz bom combustível de foguete! +tile.hydrogen_pipe.description=Cano de Hidrogênio irá transferir hidrogênio do tanque de gás interno de uma máquina para outra. +tile.hydrogen_pipe.name=Cano de Hidrogênio +tile.launch_controller.description=Controles de Lançamento são utilizados para personalizar o comportamento do lançamento, incluindo critérios de lançamento e a base de lançamento de destino para lançamentos de automáticos. +tile.mars.coppermars.name=Minério de Cobre +tile.mars.deshmars.name=Minério de Desh +tile.mars.ironmars.name=Minério de Ferro +tile.mars.marscobblestone.name=Pedregulho +tile.mars.marsdeco.name=Bloco de Desh +tile.mars.marsdirt.name=Rocha Subsuperficial Marciana +tile.mars.marsdungeon.name=Parede de Calabouço Marciano +tile.mars.marsgrass.name=Rocha Superficial Marciana +tile.mars.marsstone.name=Pedra Marciana +tile.mars.tinmars.name=Minério de Estanho +tile.mars_stairs_cobblestone.name=Escadas de Pedregulho Marciano +tile.mars_stairs_brick.name=Escadas de Tijolos de Calabouço Marciano +tile.mars_machine.0.name=Terraformador +tile.mars_machine.1.name=Câmara Criogênica +tile.mars_machine.2.name=Controle de Lançamento +tile.mars_machine.4.name=Condensador +tile.mars_machine.5.name=Sintetizador de Metano +tile.mars_machine.6.name=Eletrolisador de Água +tile.methane_synthesizer.description=Com uma fonte de hidrogênio e uma fonte de carbono, este produz Metano para processamento posterior no Condensador para gases. +tile.miner_base.description=A Base do Astrominerador é o ponto de ancoragem para um Astrominerador. É grande ... tente fazer um cubo de 2 x 2 x 2 com estes blocos. +tile.miner_base.name=Base do Astrominerador +tile.slab_gc_half.mars_bricks_slab.name=Laje de Tijolos de Calabouço Marciano +tile.slab_gc_half.mars_slab.name=Laje de Pedregulho Marciano +tile.slimeling_egg.blue.name=Ovo de Slimeling Azul +tile.slimeling_egg.description=Ovos de Slimeling, uma vez quabrados com as mãos, geram um animal de estimação em pouco tempo. +tile.slimeling_egg.red.name=Ovo de Slimeling Vermelho +tile.slimeling_egg.yellow.name=Ovo de Slimeling Amarelo +tile.sludge.name=Lodo Bacterial +tile.telepad_short.description=Telebases de Curto Alcance são usados para transferir jogadores e outras criaturas vivas a distâncias curtas (250 blocos) quando ligadas a outras telebases. +tile.telepad_short.name=Telebase de Curto Alcance +tile.terraformer.description=Terraformadores são usados para adicionar alguma vegetação em planetas distantes, gerando grama, árvores e água quando dados os materiais corretos. +tile.treasure_t2.description=Baús de Tesouro Nível 2 são gerados nos Calabouços Marcianos. Eles são desbloqueáveis depois de derrotar o chefe final. +tile.treasure_t2.name=Baú de Tesouro Nível 2 +tile.treasure_t3.description=Baú de Tesouro Nível 3 não são utilizados no momento. +tile.treasure_t3.name=Baú de Tesouro Nível 3 +tile.walkway.walkway.description=Passadiços são utilizados para fins decorativos, utilizados para conectar blocos, mantendo um estilo espacial. +tile.walkway.walkway.name=Passadiço +tile.walkway.walkway_pipe.description=Passadiços com Cano de Oxigênio são utilizados para passar canos por debaixo de um piso caminhável. +tile.walkway.walkway_pipe.name=Passadiço +tile.walkway.walkway_wire.description=Passadiços com Cabo de Alumínio são utilizados para passar cabos por debaixo de um piso caminhável. +tile.walkway.walkway_wire.name=Passadiço +tile.wall_gc.mars.name= Parede de Pedregulho Marciano +tile.wall_gc.mars_bricks.name=Parede de Tijolos de Calabouço Marciano diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_pt.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_pt.lang new file mode 100644 index 00000000..90e87e30 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_pt.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Cápsula de Entrada +container.launchcontroller.name=Controlo de Lançamento +container.mars_lander.name=Almofada de Aterragem +container.short_range_telepad.name=Telebase de Curto Alcance +container.tile_terraformer.name=Terraformador +dimension.mars.name=Marte +entity.astro_miner.name=Astrominerador +entity.creeper_boss.name=Creeper-Chefe Evoluído +entity.entry_pod.name=Cápsula de Entrada +entity.grapple_hook.name=Gancho +entity.landing_balloons.name=Almofada de Aterragem +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Foguetão de Carga +entity.rocket_t2.name=Foguetão Nível 2 +entity.rocket_t3.name=Foguetão Nível 3 +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Asteroides Menores +fluid.argon=Gás Árgon +fluid.atmosphericgases=Gases Atmosféricos +fluid.bacterialsludge=Lodo Bacterial +fluid.carbondioxide=Gás Carbónico +fluid.fuel=Combustível +fluid.helium=Gás Hélio +fluid.hydrogen=Gás Hidrogénio +fluid.liquidargon=Árgon Líquido +fluid.liquidmethane=Metano Líquido +fluid.liquidnitrogen=Nitrogénio Líquido +fluid.liquidoxygen=Oxigénio Líquido +fluid.methane=Gás Metano +fluid.nitrogen=Gás Nitrogénio +fluid.oxygen=Gás Oxigénio +gas.carbondioxide.name=Gás Carbónico +gas.nitrogen.name=Nitrogénio +gas.oxygen.name=Oxigénio +gc.configgui.astro_miners_max=No. máximo de Astromineradores por jogador +gc.configgui.dimension_id_asteroids=ID da dimensão Asteroides +gc.configgui.dimension_id_mars=ID da dimensão Marte +gc.configgui.disable_galacticraft_helium=Desabilitar registro de gás hélio +gc.configgui.id_schematic_cargo_rocket=ID do Esquemático do Foguetão de Carga +gc.configgui.id_schematic_rocket_t2=ID do Esquemático do Foguetão Nível 2 +gc.configgui.id_schematic_rocket_t3=ID do Esquemático do Foguete Nível 3 +gc.configgui.launch_controller_all_dims=Controlo de Lançamento para todas as dimensões +gc.configgui.launch_controller_chunk_load=Chunkloading do Controlo de Lançamento +gc.configgui.planets.title=Configuração Galacticraft Planets +gui.button.liquefy.name=Processar +gui.button.liquefy_stop.name=Parar +gui.button.recall.name=Retornar +gui.carbon_slot.desc.0=Carbono Fragmentado pode ir aqui +gui.cargorocket.status.launched.0=Pronto +gui.cargorocket.status.launched.1=Lançado +gui.cargorocket.status.waiting.0=Esperando por +gui.cargorocket.status.waiting.1=ignição +gui.choose_planet.desc.mars=Habitável#Sem Oxigénio#Gravidade: 38% +gui.cryogenic.chat.cant_use=Não posso usar isso pelos próximos %d segundos +gui.gas_input.desc.0=Experimenta colocar uma$Lata de Gás Metano aqui +gui.gas_input.desc.1=(Ou talvez, uma Válvula$Atmosférica) +gui.gas_tank.desc.0=Armazenamento de Gás +gui.gas_tank_compressed.desc.0=Armazenamento de Gás (Comprimido) +gui.hydrogen_input.desc.0=Aqui vai um tanque de hidrogénio +gui.hydrogen_input.desc.1=ou uma Válvula Atmosférica +gui.launch_controller.desc.0=Este é a frequência única do$Controlo de Lançamento +gui.launch_controller.desc.1=Frequência para qual foguetões serão lançados +gui.launch_controller.desc.2=Se a base de lançamento deve ser$removida no lançamento +gui.launch_controller.desc.3=Quando esse critério for cumprido,$lançar foguetão +gui.launch_controller.desc.4=Esconder frequência de destino$de outros jogadores +gui.liquid_output.desc.2=tanque de gás liquefeito +gui.liquid_tank.desc.0=Tanque de líquidos +gui.message.address.name=Endereço +gui.message.astro_miner.fail=Esta base já tem um Astrominerador! +gui.message.astro_miner1.fail=A área de acoplamento está bloqueada por: +gui.message.astro_miner1_a.fail=A rota Astrominerador está bloqueada por: +gui.message.astro_miner2.fail=Já há Astromineradores demais! +gui.message.astro_miner3.fail=A base do Astrominerador foi removido! +gui.message.astro_miner4.fail=O Astrominerador ficou sem energia e não pode voltar à base! +gui.message.astro_miner5.fail=A rota do Astrominerador para sua base parece estar bloqueada! +gui.message.astro_miner6.fail=O Astrominerador terminou a mineração na área, e agora vai parar! +gui.message.astro_miner7.fail=Não há nada para um Astrominerador minerar em uma estação espacial! +gui.message.astro_miner8.fail=Um segundo Astrominerador foi detectado na mesma base, o primeiro então irá ser paralizado. +gui.message.bubble_exp.name=Bolha expandindo +gui.message.cargo_full.name=Carga Cheia +gui.message.cargo_unloaded.name=Carga Vazia +gui.message.dest_address.name=Endereço-Destino +gui.message.dest_frequency.name=Destino +gui.message.enable_grass.name=Habilitar Grama +gui.message.enable_trees.name=Habilitar Árvores +gui.message.frequency.name=Frequência +gui.message.fully_fueled.name=100% Abastecido +gui.message.grapple.fail=Vou precisar de algum fio se eu quero jogar esse Gancho! +gui.message.grass.name=Grama +gui.message.instant.name=Imediatamente +gui.message.invalid_address.name=Endereço Único Inválido +gui.message.invalid_freq.name=Frequência Inválida +gui.message.invalid_target_address.name=Endereço-Destino Inválido +gui.message.launch_when.name=Lançar qdo. +gui.message.low_energy.name=Pouca energia +gui.message.no_bonemeal.name=Farinha de Osso Insuficiente +gui.message.no_energy.name=Energia Insuficiente +gui.message.no_saplings.name=Rebentos Insuficientes +gui.message.no_seeds.name=Sementes Insuficientes +gui.message.no_valid_blocks.name=Sem blocos válidos na bolha +gui.message.no_water.name=Água Insuficiente +gui.message.not_enough.name=Insuficiente +gui.message.not_enough_energy.name=Energia Insuficiente! +gui.message.not_set.name=Não Definido +gui.message.one_min.name=1 Minuto +gui.message.receiving_active.name=Recebimento Ativo +gui.message.redstone_sig.name=Sinal de Redstone +gui.message.remove_pad.name=Remover Base +gui.message.sending_active.name=Envio Ativo +gui.message.success.name=Sucesso +gui.message.target_no_energy.name=Destino não tem energia suficiente! +gui.message.telepad_not_found.name=Telebase Não Encontrada! +gui.message.telepad_too_far.name=Destino longe demais! (Máx %d) +gui.message.telepad_wrong_dim.name=Destino está numa dimensão errada! +gui.message.ten_sec.name=10 Segundos +gui.message.terraforming.name=Terraformando +gui.message.thirty_sec.name=30 Segundos +gui.message.trees.name=Árvores +gui.message.with_atmosphere0.name=em um planeta abundante em +gui.message.with_atmosphere1.name=na atmosfera +gui.message.zero_water.name=Sem água! +gui.methane_output.desc.2=tanque de metano +gui.miner.docked=Estacionado +gui.miner.docking=Estacionando +gui.miner.mined=Minerado +gui.miner.mining=Minerar +gui.miner.offline=Desconectado +gui.miner.out_of_range=Fora de alcance +gui.miner.returning=Retornando +gui.miner.stuck=Preso em: +gui.miner.travelling=Viajando +gui.slimeling.button.follow=Seguir +gui.slimeling.button.sit=Sentar +gui.slimeling.chat.wrong_player=Este não é meu Slimeling! +gui.slimeling.damage=Força de ataque +gui.slimeling.following=Seguindo +gui.slimeling.food=Comida favorita +gui.slimeling.kills=Vítimas +gui.slimeling.name=Nome +gui.slimeling.owner=Dono +gui.slimeling.scale=Tamanho +gui.slimeling.sitting=Sentado +gui.status.liquefying.name=Condensando +gui.status.needs_carbon.name=Falta carbono +gui.status.nogas.name=Sem gás +gui.status.processing.name=Sintetizando +gui.status.tankfull.name=Tanque cheio +gui.status.tanksfull.name=Tanques cheios +gui.telepad.desc.0=Este é o endereço$único desta Telebase +gui.telepad.desc.1=Endereço de outra Telebase.$Entidades serão enviadas para lá. +gui.terraformer.desc.0=Tanque de Água +gui.water_bucket_slot.desc=Coloca baldes de água aqui +item.astro_miner.name=Astrominerador +item.atmospheric_valve.name=Válvula Atmosférica +item.beam_core.name=Núcleo de Feixe +item.bucket_sludge.name=Balde de Lodo Bacterial +item.canister.gas.name=Gás #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Lata de Árgon Líquido Cheia +item.canister.liquid_argon.name=Líquido #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Lata de Árgon Líquido +item.canister.liquid_nitrogen.full.name=Lata de Nitrogénio Líquido Cheia +item.canister.liquid_nitrogen.name=Líquido #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Lata de Nitrogénio Líquido +item.canister.lox.full.name=Lata de Oxigénio Líquido Cheia +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Lata de Oxigénio Líquido +item.carbon_fragments.name=Carbono Fragmentado +item.compressed_desh.name=Desh Prensado +item.compressed_titanium.name=Titânio Prensado +item.desh_axe.name=Machado de Desh +item.desh_boots.name=Botas de Desh +item.desh_chestplate.name=Peitoral de Desh +item.desh_helmet.name=Capacete de Desh +item.desh_hoe.name=Enxada de Desh +item.desh_leggings.name=Perneiras de Desh +item.desh_pick.name=Picareta de Desh +item.desh_pick_slime.description.name=Pode-se colher ovos de Slimeling +item.desh_pick_slime.name=Picareta de Desh Pegajosa +item.desh_spade.name=Pá de Desh +item.desh_stick.name=Graveto de Desh +item.desh_sword.name=Espada de Desh +item.empty_gas_canister.name=Lata de Gás Vazia +item.engine_t2.name=Motor de Foguetão Pesado +item.fluid_manip.name=Manipulador de Fluidos +item.grapple.name=Gancho +item.heavy_nose_cone.name=Nariz de Foguetão Pesado +item.ingot_desh.name=Barra de Desh +item.ingot_titanium.name=Barra de Titânio +item.key.t2.name=Chave de Calabouço Nível 2 +item.methane_canister.name=Lata de Gás Metano Cheia +item.methane_canister_partial.name=Lata de Gás Metano +item.orion_drive.name=Unidade Orion +item.raw_desh.name=Desh Bruto +item.reinforced_plate_t2.name=Blindagem Pesada +item.reinforced_plate_t3.name=Blindagem Pesada +item.rocket_fins_t2.name=Aleta de Foguetão Pesado +item.rocket_t2.cargo_rocket.name=Foguetão de Carga +item.rocket_t2.t2Rocket.name=Foguetão Nível 2 +item.rocket_t3.t3Rocket.name=Foguetão Nível 3 +item.shard_iron.name=Estilhaço de Ferro +item.shard_titanium.name=Estilhaço de Titânio +item.slimeling_cargo.name=Mochila-Inventário para Slimeling +item.thermal_boots.name=Botas do Traje Térmico +item.thermal_chestplate.name=Peitoral do Traje Térmico +item.thermal_cloth.name=Tecido Térmico +item.thermal_helm.name=Capacete do Traje Térmico +item.thermal_leggings.name=Perneiras do Traje Térmico +item.tier2.desc=Nível 2 +item.tier3.desc=Nível 3 +item.titanium_axe.name=Machado de Titânio +item.titanium_boots.name=Botas de Titânio +item.titanium_chestplate.name=Peitoral de Titânio +item.titanium_helmet.name=Capacete de Titânio +item.titanium_hoe.name=Enxada de Titânio +item.titanium_leggings.name=Perneiras de Titânio +item.titanium_pickaxe.name=Picareta de Titânio +item.titanium_shovel.name=Pá de Titânio +item.titanium_sword.name=Espada de Titânio +planet.asteroids=Asteroides +planet.mars=Marte +schematic.astro_miner.name=Astrominerador +schematic.cargo_rocket.name=Foguetão de Carga Automático +schematic.rocket_t3.name=Foguetão Nível 3 +tile.asteroids_block.asteroid_rock_0.name=Rocha de Asteroide +tile.asteroids_block.asteroid_rock_1.name=Rocha de Asteroide +tile.asteroids_block.asteroid_rock_2.name=Rocha de Asteroide +tile.asteroids_block.ore_aluminum_asteroids.name=Minério de Alumínio +tile.asteroids_block.ore_ilmenite_asteroids.name=Minério de Ilmenita +tile.asteroids_block.ore_iron_asteroids.name=Minério de Ferro +tile.beam_receiver.description=Receptores de Feixe são colocados nas entradas e saídas de energia de máquinas, para transferir energia utilizando feixes. +tile.beam_receiver.name=Receptor de Feixe +tile.beam_reflector.description=Refletores de Feixe são usados para redirecionar feixes de energia da fonte ao destino. Podem ser clicados com o botão direto do rato para apontar para outros alvos. +tile.beam_reflector.name=Refletor de Feixe +tile.cavern_vines.description=Vinhas de Caverna são perigosas para os seres vivos, podendo se prender neles e arrastá-los para cima. +tile.cavern_vines.name=Vinhas de Caverna +tile.creeper_egg.description=Ovos de Creeper vão aparecer em Calabouços Marcianos, gerando um predador furtivo ao quebrar por explosão. +tile.creeper_egg.name=Ovo de Creeper +tile.cryo_chamber.description=Câmara Criogénicas irão permitir que um jogador durma durante o dia, restaurando uma pequena quantidade de saúde, mas têm um tempo de recarga. +tile.dense_ice.name=Gelo Denso +tile.electrolyzer.description=Transforma água em hidrogénio (útil para o Sintetizador de Metano) e oxigênio. +tile.gas_liquefier.description=Converte gases em líquidos, seja gases da atmosfera ou de latas. Metano liquefeito faz bom combustível de foguetão! +tile.hydrogen_pipe.description=Cano de Hidrogénio irá transferir hidrogénio do tanque de gás interno de uma máquina para outra. +tile.hydrogen_pipe.name=Cano de Hidrogénio +tile.launch_controller.description=Controlos de Lançamento são utilizados para personalizar o comportamento do lançamento, incluindo critérios de lançamento e a base de lançamento de destino para lançamentos de automáticos. +tile.mars.coppermars.name=Minério de Cobre +tile.mars.deshmars.name=Minério de Desh +tile.mars.ironmars.name=Minério de Ferro +tile.mars.marscobblestone.name=Empedrado +tile.mars.marsdeco.name=Bloco de Desh +tile.mars.marsdirt.name=Rocha Subsuperficial Marciana +tile.mars.marsdungeon.name=Parede de Calabouço Marciano +tile.mars.marsgrass.name=Rocha Superficial Marciana +tile.mars.marsstone.name=Pedra Marciana +tile.mars.tinmars.name=Minério de Estanho +tile.mars_stairs_cobblestone.name=Escadas de Empedrado Marciano +tile.mars_stairs_brick.name=Escadas de Tijolos de Calabouço Marciano +tile.mars_machine.0.name=Terraformador +tile.mars_machine.1.name=Câmara Criogénica +tile.mars_machine.2.name=Controlo de Lançamento +tile.mars_machine.4.name=Condensador +tile.mars_machine.5.name=Sintetizador de Metano +tile.mars_machine.6.name=Eletrolisador de Água +tile.methane_synthesizer.description=Com uma fonte de hidrogénio e uma fonte de carbono, este produz Metano para processamento posterior no Condensador para gases. +tile.miner_base.description=A Base do Astrominerador é o ponto de ancoragem para um Astrominerador. É grande ... tente fazer um cubo de 2 x 2 x 2 com estes blocos. +tile.miner_base.name=Base do Astrominerador +tile.slab_gc_half.mars_bricks_slab.name=Laje de Tijolos de Calabouço Marciano +tile.slab_gc_half.mars_slab.name=Laje de Empedrado Marciano +tile.slimeling_egg.blue.name=Ovo de Slimeling Azul +tile.slimeling_egg.description=Ovos de Slimeling, uma vez quabrados com as mãos, geram um bixo de estimação em pouco tempo. +tile.slimeling_egg.red.name=Ovo de Slimeling Vermelho +tile.slimeling_egg.yellow.name=Ovo de Slimeling Amarelo +tile.sludge.name=Lodo Bacterial +tile.telepad_short.description=Telebases de Curto Alcance são usados para transferir jogadores e outras criaturas vivas a distâncias curtas (250 blocos) quando ligadas a outras telebases. +tile.telepad_short.name=Telebase de Curto Alcance +tile.terraformer.description=Terraformadores são usados para adicionar alguma vegetação em planetas distantes, gerando grama, árvores e água quando dados os materiais corretos. +tile.treasure_t2.description=Baús de Tesouro Nível 2 são gerados nos Calabouços Marcianos. Eles são desbloqueáveis depois de derrotar o chefe final. +tile.treasure_t2.name=Baú de Tesouro Nível 2 +tile.treasure_t3.description=Baú de Tesouro Nível 3 não são utilizados no momento. +tile.treasure_t3.name=Baú de Tesouro Nível 3 +tile.walkway.walkway.description=Passadiços são utilizados para fins decorativos, utilizados para conectar blocos, mantendo um estilo espacial. +tile.walkway.walkway.name=Passadiço +tile.walkway.walkway_pipe.description=Passadiços com Cano de Oxigénio são utilizados para passar canos por debaixo de um piso caminhável. +tile.walkway.walkway_pipe.name=Passadiço +tile.walkway.walkway_wire.description=Passadiços com Cabo de Alumínio são utilizados para passar cabos por debaixo de um piso caminhável. +tile.walkway.walkway_wire.name=Passadiço +tile.wall_gc.mars.name= Parede de Empedrado Marciano +tile.wall_gc.mars_bricks.name=Parede de Tijolos de Calabouço Marciano diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ru_ru.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ru_ru.lang new file mode 100644 index 00000000..7c74a998 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ru_ru.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=Создать крюк +checklist.equip_shield_controller.key=Установить контроллер щита +checklist.thermal_padding.key=Надеть тепловую защиту +checklist.thermal_padding_t2.key=Надеть тепловую защиту 2-го уровня +container.crashed_probe.name=Разбившийся зонд +container.entry_pod.name=Посадочная капсула +container.geothermal_generator.name=Геотермальный генератор +container.launchcontroller.name=Контроллер запуска +container.mars_lander.name=Посадочные баллоны +container.solar_array_controller.name=Контроллер солнечной батареи +container.short_range_telepad.name=Короткодистанционный телепорт +container.slimeling_inventory.name=Инвентарь слаймлинга +container.tile_terraformer.name=Терраформер +dimension.mars.name=Марс +entity.astro_miner.name=Астрономический шахтёр +entity.creeper_boss.name=Эволюционировавший крипер-босс +entity.entry_pod.name=Посадочная капсула +entity.entry_pod_venus.name=Венерианская посадочная капсула +entity.grapple_hook.name=Крюк +entity.juicer.name=Маленький паук +entity.landing_balloons.name=Посадочные баллоны +entity.projectile_tnt.name=Снаряд TNT +entity.rocket_cargo.name=Грузовая ракета +entity.rocket_t2.name=Ракета 2-го уровня +entity.rocket_t3.name=Ракета 3-го уровня +entity.slimeling.name=Слаймлинг +entity.sludgeling.name=Сладжлинг +entity.small_asteroid.name=Маленький астероид +entity.spider_queen.name=Королева пауков +entity.web_shot.name=Паутина +fluid.argon=Аргон +fluid.atmosphericgases=Атмосферные газы +fluid.bacterialsludge=Бактериальный осадок +fluid.carbondioxide=Углекислый газ +fluid.fuel=Топливо +fluid.helium=Гелий +fluid.hydrogen=Водород +fluid.liquidargon=Жидкий аргон +fluid.liquidmethane=Жидкий метан +fluid.liquidnitrogen=Жидкий азот +fluid.liquidoxygen=Жидкий кислород +fluid.methane=Метан +fluid.nitrogen=Азот +fluid.oil=Нефть +fluid.oxygen=Кислород +fluid.sulphuricacid=Серная кислота +gas.carbondioxide.name=Углекислый газ +gas.nitrogen.name=Азот +gas.oxygen.name=Кислород +gc.configgui.astro_miners_max=Максимальное количество астрошахтёров на игрока +gc.configgui.dimension_id_asteroids=ID измерения: Астероиды +gc.configgui.dimension_id_mars=ID измерения: Марс +gc.configgui.dimension_id_venus=ID измерения: Венера +gc.configgui.disable_aluminum_gen_asteroids=Отключить генерацию алюминиевой руды на Астероидах +gc.configgui.disable_ambient_lightning=Отключить молнии на Венере +gc.configgui.disable_copper_gen_mars=Отключить генерацию медной руды на Марсе +gc.configgui.disable_desh_gen_mars=Отключить генерацию руды деш на Марсе +gc.configgui.disable_galacticraft_helium=Отключение регистрации гелия +gc.configgui.disable_small_asteroids=Отключить спаун малых астероидов (Астероиды) +gc.configgui.disable_ilmenite_gen_asteroids=Отключить генерацию ильменитовой руды на Астероидах +gc.configgui.disable_iron_gen_asteroids=Отключить генерацию железной руды на Астероидах +gc.configgui.disable_iron_gen_mars=Отключить генерацию железной руды на Марсе +gc.configgui.disable_tin_gen_mars=Отключить генерацию оловянной руды на Марсе +gc.configgui.disable_venus_aluminum_gen=Отключить генерацию алюминиевой руды на Венере +gc.configgui.disable_venus_copper_gen=Отключить генерацию медной руды на Венере +gc.configgui.disable_venus_galena_gen=Отключить генерацию галенитовой руды на Венере +gc.configgui.disable_venus_quartz_gen=Отключить генерацию кварцевой руды на Венере +gc.configgui.disable_venus_silicon_gen=Отключить генерацию кремниевой руды на Венере +gc.configgui.disable_venus_solar_gen=Отключить генерацию солнечной руды на Венере +gc.configgui.disable_venus_tin_gen=Отключить генерацию оловянной руды на Венере +gc.configgui.id_schematic_cargo_rocket=ID схемы: Грузовая ракета +gc.configgui.id_schematic_rocket_t2=ID схемы: Ракета 2-го уровня +gc.configgui.id_schematic_rocket_t3=ID схемы: Ракета 3-го уровня +gc.configgui.launch_controller_all_dims=Загрузка всех измерений контроллером запуска +gc.configgui.launch_controller_chunk_load=Загрузка чанков контроллером запуска +gc.configgui.planets.title=Настройки Galacticraft Planets +gui.button.add_blacklist.name=Черный список +gui.button.add_entity.name=Добавить объект +gui.button.add_player.name=Добавить игрока +gui.button.add_whitelist.name=Белый список +gui.button.edit_blacklist.name=Редактировать черный список +gui.button.edit_priority.name=Изменить приоритет +gui.button.edit_whitelist.name=Редактировать белый список +gui.button.liquefy.name=Запуск +gui.button.liquefy_stop.name=Стоп +gui.button.never_fire_team.name=Никогда не стрелять в членов команды космической гонки +gui.button.recall.name=Отозвать +gui.button.remove_selected.name=Убрать выбранное +gui.carbon_slot.desc.0=Место для раздробленного угля +gui.cargorocket.status.launched.0=Запущена +gui.cargorocket.status.launched.1=в полет +gui.cargorocket.status.waiting.0=Ожидание +gui.cargorocket.status.waiting.1=зажигания +gui.choose_planet.desc.mars=Обитаем#Кислород отсутствует#Гравитация: 38% +gui.cryogenic.chat.cant_use=Вы не можете использовать её в течение %d секунд(-ы) +gui.gas_input.desc.0=Попробуйте поместить сюда$канистру с метаном +gui.gas_input.desc.1=(Или в качестве альтернативы,$атмосферный клапан) +gui.gas_tank.desc.0=Хранилище газа +gui.gas_tank_compressed.desc.0=Хранилище газа (Сжатого) +gui.hydrogen_input.desc.0=Сюда помещается резервуар с водородом +gui.hydrogen_input.desc.1=или Атмосферный клапан +gui.launch_controller.advanced=Дополнительно +gui.launch_controller.desc.0=Это уникальная частота$контроллера запуска +gui.launch_controller.desc.1=Частота пункта назначения для ракеты +gui.launch_controller.desc.2=Должна ли взлётная площадка$быть удалена при запуске +gui.launch_controller.desc.3=Когда это условие выполняется,$ракета запускается +gui.launch_controller.desc.4=Скрыть частоту пункта$назначения от других игроков +gui.launch_controller.owner=Владелец +gui.liquid_output.desc.2=резервуар сжиженного газа +gui.liquid_tank.desc.0=Жидкостный резервуар +gui.message.address.name=Адрес +gui.message.astro_miner.fail=У этой базы уже есть астрошахтёр! +gui.message.astro_miner1.fail=Область стыковки заблокирована: +gui.message.astro_miner1_a.fail=Путь астрошахтёра преграждён: +gui.message.astro_miner1_b.fail=Защищенная зона! +gui.message.astro_miner2.fail=Достигнут лимит астрошахтёров! +gui.message.astro_miner3.fail=Основание астрошахтёра было демонтировано! +gui.message.astro_miner4.fail=У астрошахтёра кончилась энергия и он не может вернуться на базу! +gui.message.astro_miner5.fail=Путь астрошахтёра до базы, кажется, преграждён! +gui.message.astro_miner6.fail=Астрошахтёр закончил добычу и остановился! +gui.message.astro_miner7.fail=Астрошахтёру нечего добывать на космической станции! +gui.message.astro_miner8.fail=Второй астрошахтёр был обнаружен на той же базе, теперь первый остановится. +gui.message.blacklist_mode.name=Режим черного списка +gui.message.bubble_exp.name=Расширение пузыря +gui.message.cargo_full.name=Груз загружен +gui.message.cargo_unloaded.name=Груз разгружен +gui.message.connected_solar_controller.name=%d подсоединено (радиус 16 блоков) +gui.message.dest_address.name=Адрес цели +gui.message.dest_frequency.name=Цель +gui.message.enable_grass.name=Включить траву +gui.message.enable_trees.name=Включить деревья +gui.message.enter_entity.name=Введите имя объекта/id +gui.message.enter_player.name=Введите имя игрока +gui.message.frequency.name=Частота +gui.message.fully_fueled.name=Полностью заправлен +gui.message.grapple.fail=Вам нужно немного ниток, если вы хотите кинуть этот крюк! +gui.message.grass.name=Трава +gui.message.instant.name=Немедленно +gui.message.invalid_address.name=Неверный уникальный адрес +gui.message.invalid_freq.name=Неверная частота +gui.message.invalid_target_address.name=Неверный адрес цели +gui.message.launch_when.name=Запустить, когда: +gui.message.low_energy.name=Мало энергии +gui.message.low_energy_output.name=Малый выход энергии +gui.message.no_bonemeal.name=Недостаточно костной муки +gui.message.no_energy.name=Нет энергии! +gui.message.no_saplings.name=Недостаточно саженцев +gui.message.no_seeds.name=Недостаточно семян +gui.message.no_valid_blocks.name=Нет доступных блоков в пузыре +gui.message.no_water.name=Недостаточно воды +gui.message.not_enough.name=Недостаточно +gui.message.not_enough_energy.name=Недостаточно энергии! +gui.message.not_set.name=Не указано +gui.message.one_min.name=1 минута +gui.message.player.name=Игрок +gui.message.priority_closest.name=Ближайший +gui.message.priority_health_high.name=Наибольшее здоровье +gui.message.priority_health_low.name=Наименьшее здоровье +gui.message.priority_low.name=Приоритет (Наинизший в первую очередь) +gui.message.receiving_active.name=Приём начат +gui.message.redstone_sig.name=Сигнал красного камня +gui.message.remove_pad.name=Убрать платформу при запуске +gui.message.sending_active.name=Отправка начата +gui.message.success.name=Успех +gui.message.target_meteors.name=Стрелять по метеорам +gui.message.target_no_energy.name=У цели не хватает энергии! +gui.message.telepad_not_found.name=Телепорт не найден! +gui.message.telepad_too_far.name=Цель слишком далеко! (Макс.: %d) +gui.message.telepad_wrong_dim.name=Цель в другом измерении! +gui.message.telepad_target_disabled.name=Цель отключена +gui.message.ten_sec.name=10 секунд +gui.message.terraforming.name=Терраформирование +gui.message.thirty_sec.name=30 секунд +gui.message.trees.name=Деревья +gui.message.with_atmosphere0.name=на планете с большим количеством +gui.message.with_atmosphere1.name=в атмосфере +gui.message.zero_water.name=Нет воды! +gui.methane_output.desc.2=резервуар метана +gui.miner.docked=Пристыкован +gui.miner.docking=Стыковка +gui.miner.mined=Добыто +gui.miner.mining=Добыча +gui.miner.offline=Вне сети +gui.miner.out_of_range=Вне зоны действия +gui.miner.returning=Возвращение +gui.miner.stuck=Застрял на: +gui.miner.travelling=Перемещение +gui.slimeling.button.follow=Следовать +gui.slimeling.button.sit=Сидеть +gui.slimeling.chat.wrong_player=Это не мой слаймлинг! +gui.slimeling.damage=Урон +gui.slimeling.following=Следует +gui.slimeling.food=Любимая еда +gui.slimeling.kills=Убийств +gui.slimeling.name=Имя +gui.slimeling.owner=Владелец +gui.slimeling.scale=Размер +gui.slimeling.sitting=Сидит +gui.status.invalid_spout_1.name=Должен быть поставлен на +gui.status.invalid_spout_2.name=доступный серный гейзер +gui.status.liquefying.name=Сжижение +gui.status.needs_carbon.name=Нужен уголь +gui.status.nogas.name=Нет газа +gui.status.processing.name=Синтез +gui.status.tankfull.name=Резервуар полон +gui.status.tanksfull.name=Резервуары полны +gui.telepad.desc.0=Это уникальный адрес$телепорта +gui.telepad.desc.1=Адрес другого телепорта.$Сущности будут отправляться туда. +gui.terraformer.desc.0=Водный резервуар +gui.water_bucket_slot.desc=Положите вёдра с водой сюда +item.astro_miner.name=Астрономический шахтёр +item.atmospheric_valve.name=Атмосферный клапан +item.atomic_battery.name=Атомная батарея +item.beam_core.name=Лучевое ядро +item.bucket_sludge.name=Ведро бактериального осадка +item.bucket_sulphuric_acid.name=Ведро серной кислоты +item.canister.gas.name=Газ +item.canister.liquid_argon.full.name=Полная канистра жидкого аргона +item.canister.liquid_argon.name=Жидкость +item.canister.liquid_argon.partial.name=Канистра жидкого аргона +item.canister.liquid_nitrogen.full.name=Полная канистра жидкого азота +item.canister.liquid_nitrogen.name=Жидкость +item.canister.liquid_nitrogen.partial.name=Канистра жидкого азота +item.canister.lox.full.name=Полная канистра жидкого кислорода +item.canister.lox.name=ЖК +item.canister.lox.partial.name=Канистра жидкого кислорода +item.carbon_fragments.name=Раздробленный уголь +item.compressed_desh.name=Сжатая деш +item.compressed_titanium.name=Сжатый титан +item.desh_axe.name=Топор из деш +item.desh_boots.name=Ботинки из деш +item.desh_chestplate.name=Кираса из деш +item.desh_helmet.name=Шлем из деш +item.desh_hoe.name=Мотыга из деш +item.desh_leggings.name=Поножи из деш +item.desh_pick.name=Кирка из деш +item.desh_pick_slime.description.name=Может добывать яйца крипера +item.desh_pick_slime.name=Липкая кирка из деш +item.desh_spade.name=Лопата из деш +item.desh_stick.name=Палка из деш +item.desh_sword.name=Меч из деш +item.dust_titanium.name=Титановая пыль +item.empty_gas_canister.name=Пустая газовая канистра +item.engine_t2.name=Прочный ракетный двигатель +item.fluid_manip.name=Жидкостный манипулятор +item.grapple.name=Крюк +item.heavy_nose_cone.name=Прочный головной обтекатель +item.ingot_desh.name=Слиток деш +item.ingot_lead.name=Свинцовый слиток +item.ingot_titanium.name=Титановый слиток +item.key.t2.name=Ключ от подземелья 2-го уровня +item.key.t3.name=Ключ от подземелья 3-го уровня +item.methane_canister.name=Полная канистра метана +item.methane_canister_partial.name=Канистра метана +item.orion_drive.name=Привод Ориона +item.prelaunch_checklist.name=Предполётная подготовка +item.radioisotope_core.name=Радиоизотопное ядро +item.raw_desh.name=Необработанная деш +item.reinforced_plate_t2.name=Сверхпрочная пластина +item.reinforced_plate_t3.name=Сверхпрочная пластина +item.rocket_fins_t2.name=Прочный ракетный стабилизатор +item.rocket_t2.cargo_rocket.name=Грузовая ракета +item.rocket_t2.t2Rocket.name=Ракета 2-го уровня +item.rocket_t3.t3Rocket.name=Ракета 3-го уровня +item.shard_iron.name=Железный осколок +item.shard_titanium.name=Титановый осколок +item.shield_controller.description=Контроллер щита защищает вашу броню от ВСЕХ видов урона - в том числе от атмосферной коррозии +item.shield_controller.name=Контроллер щита +item.slimeling_cargo.name=Сумка слаймлинга +item.solar_dust.name=Солнечная пыль +item.solar_module_2.name=Панель солнечной батареи +item.strange_seed.name=Странное семя +item.thermal_boots.name=Теплоизолирующие ботинки +item.thermal_boots_t2.name=Теплоустойчивые ботинки +item.thermal_chestplate.name=Теплоизолирующая кираса +item.thermal_chestplate_t2.name=Теплоустойчивая кираса +item.thermal_cloth.name=Теплоизолирующая ткань +item.thermal_fabric.name=Теплоустойчивая ткань +item.thermal_helm.name=Теплоизолирующий шлем +item.thermal_helm_t2.name=Теплоустойчивый шлем +item.thermal_leggings.name=Теплоизолирующие поножи +item.thermal_leggings_t2.name=Теплоустойчивые поножи +item.thin_solar_wafer.name=Полупроводниковая пластина солнечной батареи +item.tier2.desc=2-ой уровень +item.tier3.desc=3-ий уровень +item.titanium_axe.name=Титановый топор +item.titanium_boots.name=Титановые ботинки +item.titanium_chestplate.name=Титановая кираса +item.titanium_helmet.name=Титановый шлем +item.titanium_hoe.name=Титановая мотыга +item.titanium_leggings.name=Титановые поножи +item.titanium_pickaxe.name=Титановая кирка +item.titanium_shovel.name=Титановая лопата +item.titanium_sword.name=Титановый меч +item.volcanic_pickaxe.description=Копает зону 3x3 блока в зависимости от того, в каком направлении вы смотрите +item.volcanic_pickaxe.name=Вулканическая кирка +planet.asteroids=Астероиды +planet.mars=Марс +schematic.astro_miner.name=Астрономический шахтёр +schematic.cargo_rocket.name=Автоматическая грузовая ракета +schematic.rocket_t3.name=Ракета 3-го уровня +tile.asteroids_block.asteroid_rock_0.name=Астероидный камень +tile.asteroids_block.asteroid_rock_1.name=Астероидный камень +tile.asteroids_block.asteroid_rock_2.name=Астероидный камень +tile.asteroids_block.ore_aluminum_asteroids.name=Алюминиевая руда +tile.asteroids_block.ore_ilmenite_asteroids.name=Ильменитовая руда +tile.asteroids_block.ore_iron_asteroids.name=Железная руда +tile.asteroids_block.asteroid_deco.name=Тёмный декоративный блок +tile.asteroids_block.titanium_block.name=Титановый блок +tile.beam_receiver.description=Лучевые приёмники присоединяются к входу и выходу энергии механизма, чтобы передавать энергию с помощью лучей. +tile.beam_receiver.name=Лучевой приёмник энергии +tile.beam_reflector.description=Лучевые отражатели используются для перенаправления энергетических лучей от источника к месту назначения. ПКМ по отражателю, чтобы менять цели. +tile.beam_reflector.name=Лучевой отражатель энергии +tile.cavern_vines.description=Пещерные лианы опасны для живых существ тем, что они опутывают их и тащат вверх. +tile.cavern_vines.name=Пещерные лианы +tile.crashed_probe.name=Разбившийся зонд +tile.creeper_egg.description=Яйца крипера появляются в сокровищницах Марса, из них при взрыве вылупляется скрытный хищник. +tile.creeper_egg.name=Яйцо крипера +tile.cryo_chamber.description=Криогенные камеры позволят игроку спать днём, восстанавливая тем самым небольшое количество здоровья, но имеют задержку в использовании. +tile.dense_ice.name=Плотный лёд +tile.electrolyzer.description=Преобразует воду в водород (нужен для Синтезатора метана) и кислород. +tile.gas_liquefier.description=Сжижает газы из атмосферы или из канистры. Сжиженный метан отлично подходит в качестве ракетного топлива! +tile.geothermal_generator.description=Генерирует энергию при размещении на серный гейзер. Уровень производимой энергии колеблется. +tile.geothermal_generator.name=Геотермальный генератор +tile.hydrogen_pipe.description=Труба для водорода будет передавать водород из внутреннего резервуара одного механизма к другому. +tile.hydrogen_pipe.name=Водородная труба +tile.launch_controller.description=Контроллеры запуска используются для настройки параметров автоматического запуска, включая условия старта и пункт назначения. +tile.laser_turret.name=Лазерная турель +tile.laser_turret.description=Может стрелять по метеорам, игрокам и мобам +tile.mars.coppermars.name=Медная руда +tile.mars.deshmars.name=Руда деш +tile.mars.ironmars.name=Железная руда +tile.mars.marscobblestone.name=Марсианский булыжник +tile.mars.marsdeco.name=Блок деш +tile.mars.marsdirt.name=Марсианский реголит +tile.mars.marsdungeon.name=Кирпич марсианской сокровищницы +tile.mars.marsgrass.name=Марсианский мелкодисперсный реголит +tile.mars.marsstone.name=Марсианский камень +tile.mars.tinmars.name=Оловянная руда +tile.mars_machine.0.name=Терраформер +tile.mars_machine.1.name=Криогенная камера +tile.mars_machine.2.name=Контроллер запуска +tile.mars_machine.4.name=Сжижитель газа +tile.mars_machine.5.name=Синтезатор метана +tile.mars_machine.6.name=Электролизёр воды +tile.mars_stairs_brick.name=Ступеньки из кирпича марсианской сокровищницы +tile.mars_stairs_cobblestone.name=Ступеньки из марсианского булыжника +tile.methane_synthesizer.description=При наличии источников водорода и углерода он производит метан для дальнейшей обработки в Сжижителе газа. +tile.miner_base.description=Основание астрономического шахтёра - это точка стыковки для астрономического шахтёра. Оно большое... попробуйте сделать куб 2x2x2 из блоков основания. +tile.miner_base.name=Основание астрономического шахтёра +tile.miner_base_full.name=Основание астрономического шахтёра +tile.slab_gc_half.mars_bricks_slab.name=Плита из кирпича марсианской сокровищницы +tile.slab_gc_half.mars_slab.name=Плита из марсианского булыжника +tile.slab_gc_half.asteroids_slab.name=Тёмная декоративная плита +tile.slimeling_egg.blue.name=Синее яйцо Слаймлинга +tile.slimeling_egg.description=Яйца Слаймлингов: если разбить их голыми руками, то скоро из них вылупится питомец. +tile.slimeling_egg.red.name=Красное яйцо Слаймлинга +tile.slimeling_egg.yellow.name=Желтое яйцо Слаймлинга +tile.sludge.name=Бактериальный осадок +tile.solar_array_controller.name=Контроллер солнечной батареи +tile.solar_array_controller.description=Подключите Модули солнечной батареи к этому блоку для подачи питания. Наиболее эффективен на космических станциях. +tile.solar_array_module.name=Модуль солнечной батареи +tile.solar_array_module.description=Подключите несколько таких блоков к Контроллеру солнечной батареи, чтобы обеспечить питание. Наиболее эффективны на космических станциях. +tile.spout.name=Серный гейзер +tile.sulphuric_acid.name=Серная кислота +tile.telepad_short.description=Короткодистанционные телепорты используются для перемещения игроков и других живых существ на короткие дистанции (250 блоков), если они присоединены к другим телепортам. +tile.telepad_short.name=Короткодистанционный телепорт +tile.terraformer.description=Терраформеры используются для добавления зелени дальним планетам: добавляют траву, деревья и воду, если имеются нужные материалы. +tile.treasure_t2.description=Сундуки с сокровищами 2-го уровня генерируются в сокровищницах Марса. Их можно открыть после победы над финальным боссом. +tile.treasure_t2.name=Сундук с сокровищами 2-го уровня +tile.treasure_t3.description=Сундуки с сокровищами 3-го уровня генерируются в сокровищницах Венеры. Их можно открыть после победы над финальным боссом. +tile.treasure_t3.name=Сундук с сокровищами 3-го уровня +tile.venus.dungeon_brick_venus_1.name=Кирпичи сокровищницы Венеры I +tile.venus.dungeon_brick_venus_2.name=Кирпичи сокровищницы Венеры II +tile.venus.venus_ore_aluminum.name=Алюминивая руда +tile.venus.venus_ore_copper.name=Медная руда +tile.venus.venus_ore_galena.name=Галенитовая руда +tile.venus.venus_ore_quartz.name=Кварцевая руда +tile.venus.venus_ore_silicon.name=Кремниевая руда +tile.venus.venus_ore_solar.name=Солнечная руда +tile.venus.venus_ore_tin.name=Оловянная руда +tile.venus.venus_rock_0.name=Мягкий Венерианский камень +tile.venus.venus_rock_1.name=Твердый Венерианский камень +tile.venus.venus_rock_2.name=Вулканический Венерианский камень +tile.venus.venus_rock_3.name=Пемза +tile.venus.lead_block.name=Свинцовый блок +tile.venus_rock_scorched.name=Обожжённый Венерианский камень +tile.walkway.walkway.description=Дорожки используются в декоративных целях и для соединения блоков в космическом стиле. +tile.walkway.walkway.name=Дорожка +tile.walkway.walkway_pipe.description=Дорожки для жидкостных труб используются для прокладывания труб под полностью твёрдой поверхностью. +tile.walkway.walkway_pipe.name=Дорожка +tile.walkway.walkway_wire.description=Дорожки для алюминиевых проводов используются для прокладывания проводов под полностью твёрдой поверхностью. +tile.walkway.walkway_wire.name=Дорожка +tile.wall_gc.mars.name=Стена из марсианского булыжника +tile.wall_gc.mars_bricks.name=Стена из кирпича марсианской сокровищницы +tile.web_torch.web_torch_0.name=Свисающая паутина +tile.web_torch.web_torch_1.description=Факел из светящегося камня +tile.web_torch.web_torch_1.name=Свисающая паутина +achievement.mars=На Марс! +achievement.mars.desc=Отправьте ракету 2-го уровня на Марс! +achievement.asteroids=В Пояс астероидов! +achievement.asteroids.desc=Отправьте ракету 3-го уровня в Пояс астероидов! +achievement.venus=На Венеру! +achievement.venus.desc=Отправьте ракету 3-го уровня на Венеру! diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/sv_se.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/sv_se.lang new file mode 100644 index 00000000..c253c30c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/sv_se.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Inträdeskapsel +container.launchcontroller.name=Raketfjärrstyrare +container.mars_lander.name=Landningskudde +container.short_range_telepad.name=Kortdistansteleporterare +container.tile_terraformer.name=Terraformare +dimension.mars.name=Mars +entity.astro_miner.name=Astrobrytare +entity.creeper_boss.name=Marshålehärskare +entity.entry_pod.name=Inträdeskapsel +entity.grapple_hook.name=Änterhake +entity.landing_balloons.name=Landningskudde +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Fraktraket +entity.rocket_t2.name=N2-raket +entity.rocket_t3.name=N3-raket +entity.slimeling.name=Slemvarelse +entity.sludgeling.name=Sörjigel +entity.small_asteroid.name=Liten asteroid +fluid.argon=Argon +fluid.atmosphericgases=Atmosfärsgaser +fluid.bacterialsludge=Bakteriell sörja +fluid.carbondioxide=Koldioxid +fluid.fuel=Bränsle +fluid.helium=Helium +fluid.hydrogen=Vätgas +fluid.liquidargon=Flytande argon +fluid.liquidmethane=Flytande metan +fluid.liquidnitrogen=Flytande kväve +fluid.liquidoxygen=Flytande syre +fluid.methane=Metangas +fluid.nitrogen=Kvävgas +fluid.oxygen=Syrgas +gas.carbondioxide.name=Koldioxid +gas.nitrogen.name=Kväve +gas.oxygen.name=Syre +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Starta +gui.button.liquefy_stop.name=Stäng av +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fack för kolflis +gui.cargorocket.status.launched.0=Redan +gui.cargorocket.status.launched.1=avfyrad +gui.cargorocket.status.waiting.0=Inväntar +gui.cargorocket.status.waiting.1=avfyrning +gui.choose_planet.desc.mars=Habitable#No Oxygen#Gravity: 38% +gui.cryogenic.chat.cant_use=Kan inte användas förrän %d sekunder har gått! +gui.gas_input.desc.0=Fack för gastank +gui.gas_input.desc.1=eller atmosfärsventil +gui.gas_tank.desc.0=Gaskärl +gui.gas_tank_compressed.desc.0=Gaskärl +gui.hydrogen_input.desc.0=Fack för vätgastank +gui.hydrogen_input.desc.1=eller atmosfärsventil +gui.launch_controller.desc.0=Fjärrstyrarens inställda frekvens +gui.launch_controller.desc.1=Koordinatfrekvens raketen ska$avfyras till +gui.launch_controller.desc.2=Om raketrampen ska tas$bortvid uppskjutning +gui.launch_controller.desc.3=När detta vilkor uppnås$avfyras raketen +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=kondenskärl +gui.liquid_tank.desc.0=Liquid Tank +gui.message.address.name=Adress +gui.message.astro_miner.fail=Denna station har redan en annan astrobrytare! +gui.message.astro_miner1.fail=Stationens ingång blockeras av: +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=Det skulle bli en astrobrytare för mycket! +gui.message.astro_miner3.fail=Astrobrytarens station har tagits bort! +gui.message.astro_miner4.fail=Astrobrytaren har slut på ström! +gui.message.astro_miner5.fail=Astrobrytarens väg till stationen kan vara blockerad! +gui.message.astro_miner6.fail=Astrobrytaren har slutfört brytning av detta områded och kommer nu sluta! +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=Bubbelexpansion +gui.message.cargo_full.name=Fullastad +gui.message.cargo_unloaded.name=Urlastad +gui.message.dest_address.name=Måladress +gui.message.dest_frequency.name=Målfrekvens +gui.message.enable_grass.name=Gräs: på +gui.message.enable_trees.name=Träd: på +gui.message.frequency.name=Frekvens +gui.message.fully_fueled.name=Fulltankad +gui.message.grapple.fail=Tråd behövs till änterhaken! +gui.message.grass.name=Gräs +gui.message.instant.name=Omedelbart +gui.message.invalid_address.name=Ogiltig adress +gui.message.invalid_freq.name=Ogiltig frekvens +gui.message.invalid_target_address.name=Ogiltig måladress +gui.message.launch_when.name=Avfyra när +gui.message.low_energy.name=Strömbrist +gui.message.no_bonemeal.name=Benmjöl saknas +gui.message.no_energy.name=Strömbrist +gui.message.no_saplings.name=Träplantor saknas +gui.message.no_seeds.name=Frön saknas +gui.message.no_valid_blocks.name=Saknar block att terraforma +gui.message.no_water.name=Vattenbrist +gui.message.not_enough.name=Saknar +gui.message.not_enough_energy.name=Strömbrist! +gui.message.not_set.name=Ej inställd +gui.message.one_min.name=1 minut +gui.message.receiving_active.name=Mottagning aktiv +gui.message.redstone_sig.name=Rödstensignal +gui.message.remove_pad.name=Ta bort ramp +gui.message.sending_active.name=Sändning aktiv +gui.message.success.name=Success +gui.message.target_no_energy.name=Målet har brist på ström! +gui.message.telepad_not_found.name=Teleporterare ej funnen! +gui.message.telepad_too_far.name=För avlägset! (Max. %d) +gui.message.telepad_wrong_dim.name=Otillgänglig dimension! +gui.message.ten_sec.name=10 sekunder +gui.message.terraforming.name=Terraformar +gui.message.thirty_sec.name=30 sekunder +gui.message.trees.name=Träd +gui.message.with_atmosphere0.name=на планете с большим количеством +gui.message.with_atmosphere1.name=в атмосфере +gui.message.zero_water.name=Vattenbrist! +gui.methane_output.desc.2=metankärl +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Följ +gui.slimeling.button.sit=Sitt +gui.slimeling.chat.wrong_player=Detta är inte min slemvarelse! +gui.slimeling.damage=Attackskada +gui.slimeling.following=Följer +gui.slimeling.food=Favoritmat +gui.slimeling.kills=Dräpta +gui.slimeling.name=Namn +gui.slimeling.owner=Ägare +gui.slimeling.scale=Storlek +gui.slimeling.sitting=Sitter +gui.status.liquefying.name=Kondenserar +gui.status.needs_carbon.name=Kol saknas +gui.status.nogas.name=Ingen gas +gui.status.processing.name=Framställer +gui.status.tankfull.name=Tank full +gui.status.tanksfull.name=Tankar fulla +gui.telepad.desc.0=Teleporterarens$intällda adress +gui.telepad.desc.1=Ange annan teleporterares adress$för att dirigera objekt dit. +gui.terraformer.desc.0=Vattenkärl +gui.water_bucket_slot.desc=Fack för vattenhinkning +item.astro_miner.name=Astrobrytare +item.atmospheric_valve.name=Atmosfärsventil +item.beam_core.name=Strålnav +item.bucket_sludge.name=Bakteriell sörjhink +item.canister.gas.name=Mängd #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Full tank (flytande argon) +item.canister.liquid_argon.name=Mängd #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Tank (flytande argon) +item.canister.liquid_nitrogen.full.name=Full tank (flytande kväve) +item.canister.liquid_nitrogen.name=Mängd #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Tank (flytande kväve) +item.canister.lox.full.name=Full tank (flytande syre) +item.canister.lox.name=Mängd #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Tank (flytande syre) +item.carbon_fragments.name=Kolflis +item.compressed_desh.name=Deshplåt +item.compressed_titanium.name=Titanplåt +item.desh_axe.name=Deshyxa +item.desh_boots.name=Deshstövlar +item.desh_chestplate.name=Deshharnesk +item.desh_helmet.name=Deshhjälm +item.desh_hoe.name=Deshflohacka +item.desh_leggings.name=Deshbyxor +item.desh_pick.name=Deshhacka +item.desh_pick_slime.description.name=Kan skörda smygarägg +item.desh_pick_slime.name=Klibbig deshhacka +item.desh_spade.name=Deshspade +item.desh_stick.name=Deshpinne +item.desh_sword.name=Deshsvärd +item.empty_gas_canister.name=Tom gastank +item.engine_t2.name=Förstärkt raketmotor +item.fluid_manip.name=Flödeshanterare +item.grapple.name=Änterhake +item.heavy_nose_cone.name=Förstärkt raketnos +item.ingot_desh.name=Deshtacka +item.ingot_titanium.name=Titantacka +item.key.t2.name=Marsiansk skattkistnyckel +item.methane_canister.name=Full metangastank +item.methane_canister_partial.name=Metangastank +item.orion_drive.name=Orionmotor +item.raw_desh.name=Deshflis +item.reinforced_plate_t2.name=Förstärkt plåt +item.reinforced_plate_t3.name=Förstärkt plåt +item.rocket_fins_t2.name=Förstärkt raketfena +item.rocket_t2.cargo_rocket.name=Fraktraket +item.rocket_t2.t2Rocket.name=N2-raket +item.rocket_t3.t3Rocket.name=N3-raket +item.shard_iron.name=Järnflis +item.shard_titanium.name=Titanflis +item.slimeling_cargo.name=Last +item.thermal_boots.name=Termosunderställstrumpor +item.thermal_chestplate.name=Termosunderställströja +item.thermal_cloth.name=Värmereglerande tyg +item.thermal_helm.name=Termosunderställshuva +item.thermal_leggings.name=Termosunderställsbyxor +item.tier2.desc=Nivå 2 +item.tier3.desc=Nivå 3 +item.titanium_axe.name=Titanyxa +item.titanium_boots.name=Titanstövlar +item.titanium_chestplate.name=Titanharnesk +item.titanium_helmet.name=Titanhjälm +item.titanium_hoe.name=Titanflohacka +item.titanium_leggings.name=Titanbyxor +item.titanium_pickaxe.name=Titanhacka +item.titanium_shovel.name=Titanspade +item.titanium_sword.name=Titansvärd +planet.asteroids=Huvudbältet +planet.mars=Mars +schematic.astro_miner.name=Astrobrytare +schematic.cargo_rocket.name=Automatisk fraktraket +schematic.rocket_t3.name=N3-raket +tile.asteroids_block.asteroid_rock_0.name=Asteroidmineral +tile.asteroids_block.asteroid_rock_1.name=Asteroidmineral +tile.asteroids_block.asteroid_rock_2.name=Asteroidmineral +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminiummalm +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenitmalm +tile.asteroids_block.ore_iron_asteroids.name=Järnmalm +tile.beam_receiver.description=Strålmotagaren ansluts intill en eldriven maskin för at föra in/ut ström. +tile.beam_receiver.name=Energistrålmotagare +tile.beam_reflector.description=Strålreflektorn utökar en energistråles räckvidd samt kan avleda den åt valfri riktning. Högerklicka för att ändra. +tile.beam_reflector.name=Energistrålreflektor +tile.cavern_vines.description=Grottnässlor skjuter ut ett kraftfullt gift vid beröring. Offer som blivit insnärjda hängs uppochner. +tile.cavern_vines.name=Grottnässlor +tile.creeper_egg.description=Smygarägg förekommer i marsianska hålor. Kläckningen sker explosionsartat. +tile.creeper_egg.name=Smygarägg +tile.cryo_chamber.description=Den kryogeniska kammaren tillåter spelaren att sova närsomhelst på dygnet med något läkande effekt. Kräver återhämtningstid efter användning. +tile.dense_ice.name=Kompakt is +tile.electrolyzer.description=Delar vattenmolekyler till vätgas (används för metanframställning) och syrgas. +tile.gas_liquefier.description=Kondenserar gas utvunnen från atmosfären (kräver atmosfärsventil) eller en gasledning. Flytande metan är ett utmärkt raketbränsle! +tile.hydrogen_pipe.description=Vätgasledningar överför vätgas från en maskins lagringskärl till en annans. +tile.hydrogen_pipe.name=Väteledning +tile.launch_controller.description=Raketfjärrstyraren kan ställas in med automatiska avfyrningsinstruktioner. T.ex. vilkor för avfyrning och målkoordinater. +tile.mars.coppermars.name=Kopparmalm +tile.mars.deshmars.name=Deshmalm +tile.mars.ironmars.name=Järnmalm +tile.mars.marscobblestone.name=Marsiansk kullersten +tile.mars.marsdeco.name=Deshblock +tile.mars.marsdirt.name=Marianskt ytberg +tile.mars.marsdungeon.name=Marsianskt håletegel +tile.mars.marsgrass.name=Marsianskt sedimentberg +tile.mars.marsstone.name=Marsianskt djupberg +tile.mars.tinmars.name=Tennmalm +tile.mars_stairs_cobblestone.name=Marsstentrappa +tile.mars_stairs_brick.name=Marsiansk hålestentrappa +tile.mars_machine.0.name=Terraformare +tile.mars_machine.1.name=Kryogenisk kammare +tile.mars_machine.2.name=Raketfjärrstyrare +tile.mars_machine.4.name=Gaskyl +tile.mars_machine.5.name=Metanframställare +tile.mars_machine.6.name=Vattenelektrolys +tile.methane_synthesizer.description=Med en tillförsel på vätgas och kol tillverkar denna metangas för vidare bearbetning med gaskylen. +tile.miner_base.description=Astrobrytarstationen agerar som dockningsstation till astrobrytaren. I.o.m. sin storlek måste 8 av dessa block läggas i en 2x2x2-kub. +tile.miner_base.name=Astrobrytarstation +tile.slab_gc_half.mars_bricks_slab.name=Marsiansk hålestenplatta +tile.slab_gc_half.mars_slab.name=Marsstenplatta +tile.slimeling_egg.blue.name=Blått slemvarelseägg +tile.slimeling_egg.description=När slemvarelseägg knäcks med spelarens bara händer kläcks det snart till ett husdjur. +tile.slimeling_egg.red.name=Rött slemvarelseägg +tile.slimeling_egg.yellow.name=Gult slemvarelseägg +tile.sludge.name=Bakteriell sörja +tile.telepad_short.description=Kortdistansteleporteraren överför spelare och andra levande varelser (250 Blocks) adresserad till en annan teleporterare. +tile.telepad_short.name=Kortdistansteleporterare +tile.terraformer.description=Terraformaren sprider grönska på avlägsna himlakroppar. Matas in med vatten, benmjöl, träplantor och frön. +tile.treasure_t2.description=Marsianska skattkistor förekommer i slutet på marshålor. Den tillhörande nyckeln vaktas av marshålans härskare. +tile.treasure_t2.name=Marsiansk skattkista +tile.treasure_t3.description=Asteroidskattkistor har inte riktigt intförts än. +tile.treasure_t3.name=Asteroidskattkista +tile.walkway.walkway.description=Gångbroar är dekorativa block som anluter till andra intilliggande block. +tile.walkway.walkway.name=Gångbro +tile.walkway.walkway_pipe.description=Syrgasledning inbyggd i en gångbro bildar en promenadvänlig yta. +tile.walkway.walkway_pipe.name=Gångbro (syrgasledning) +tile.walkway.walkway_wire.description=Aluminiumledning inbyggd i en gångbro bildar en promenadvänlig yta. +tile.walkway.walkway_wire.name=Gångbro (elledning) +tile.wall_gc.mars.name=Marsstenvägg +tile.wall_gc.mars_bricks.name=Marsiansk hålevägg diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/th_th.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/th_th.lang new file mode 100644 index 00000000..9cdb9608 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/th_th.lang @@ -0,0 +1,365 @@ +checklist.craft_grapple_hook.key=สร้างตะขอเกี่ยว +checklist.equip_shield_controller.key=ใส่เครื่องสร้างเกราะพลัง +checklist.thermal_padding.key=ใส่เกราะกันความร้อน +checklist.thermal_padding_t2.key=ใส่เกราะกันความร้อน เทียร์ 2 +container.crashed_probe.name=โพรบที่พัง +container.entry_pod.name=ยานลงจอด +container.geothermal_generator.name=เครื่องผลิตความร้อนใต้พิภพ +container.launchcontroller.name=เครื่องควบคุมการปล่อยจรวด +container.mars_lander.name=ยานบอลลูน +container.short_range_telepad.name=เครื่องเทเลพอร์ตระยะใกล้ +container.slimeling_inventory.name=ช่องเก็บของสไลม์ลิ่ง +container.tile_terraformer.name=เทอราฟอร์เมอร์ +dimension.mars.name=ดาวอังคาร +entity.astro_miner.name=แอสโทรไมเนอร์ +entity.creeper_boss.name=บอสคริปเปอร์กลายพันธุ์ +entity.entry_pod.name=ยานลงจอด +entity.entry_pod_venus.name=ยานลงจอดดาวศุกร์ +entity.grapple_hook.name=ตะขอ +entity.juicer.name=จุยเซอร์ +entity.landing_balloons.name=ยานลงจอดบอลลูน +entity.projectile_tnt.name=โพรเจกไทล์ TNT +entity.rocket_cargo.name=จรวดขนส่ง +entity.rocket_t2.name=จรวด เทียร์ 2 +entity.rocket_t3.name=จรวด เทียร์ 3 +entity.slimeling.name=สไลม์ลิ่ง +entity.sludgeling.name=หนอนแบคทีเรีย +entity.small_asteroid.name=ดาวเคราะห์น้อยขนาดเล็ก +entity.spider_queen.name=ราชินีแมงมุม +entity.web_shot.name=ลูกกระสุนใยแมงมุม +fluid.argon=ก๊าซอาร์กอน +fluid.atmosphericgases=ก๊าซชั้นบรรยากาศ +fluid.bacterialsludge=ตะกอนแบคทีเรีย +fluid.carbondioxide=ก๊าซคาร์บอนไดออกไซด์ +fluid.fuel=เชื้อเพลิง +fluid.helium=ก๊าซฮีเลียม +fluid.hydrogen=ก๊าซไฮโดรเจน +fluid.liquidargon=อาร์กอนเหลว +fluid.liquidmethane=มีเทนเหลว +fluid.liquidnitrogen=ไนโตรเจนเหลว +fluid.liquidoxygen=ออกซิเจนเหลว +fluid.methane=ก๊าซมีเทน +fluid.nitrogen=ก๊าซไนโตรเจน +fluid.oil=น้ำมัน +fluid.oxygen=ก๊าซออกซิเจน +fluid.sulphuricacid=กรดกำมะถัน +gas.carbondioxide.name=คาร์บอนไดออกไซด์ +gas.nitrogen.name=ไนโตรเจน +gas.oxygen.name=ออกซิเจน +gc.configgui.astro_miners_max=จำนวนสูงสุดของแอสโทรไมเนอร์ต่อผู้เล่น +gc.configgui.dimension_id_asteroids=ID มิติดาวเคราะห์น้อย +gc.configgui.dimension_id_mars=ID มิติดาวอังคาร +gc.configgui.dimension_id_venus=ID มิติดาวศุกร์ +gc.configgui.disable_aluminum_gen_asteroids=ปิดใช้งานการเจนเนอเรทแร่อลูมิเนียม (ดาวเคราะห์น้อย) +gc.configgui.disable_ambient_lightning=ปิดใช้งานฟ้าแลบบนดาวศุกร์ +gc.configgui.disable_copper_gen_mars=ปิดใช้งานการเจนเนอเรทแร่ทองแดง (ดาวอังคาร) +gc.configgui.disable_desh_gen_mars=ปิดใช้งานการเจนเนอเรทแร่เดรช (ดาวอังคาร) +gc.configgui.disable_galacticraft_helium=ปิดใช้งานก๊าซฮีเลียมบนดาวเคราะห์ +gc.configgui.disable_ilmenite_gen_asteroids=ปิดใช้งานการเจนเนอเรทแร่อิลเมไนท์ (ดาวเคราะห์น้อย) +gc.configgui.disable_iron_gen_asteroids=ปิดใช้งานการเจนเนอเรทแร่เหล็ก (ดาวเคราะห์น้อย) +gc.configgui.disable_iron_gen_mars=ปิดใช้งานการเจนเนอเรทแร่เหล็ก (ดาวอังคาร) +gc.configgui.disable_tin_gen_mars=ปิดใช้งานการเจนเนอเรทแร่ดีบุก (ดาวอังคาร) +gc.configgui.disable_venus_aluminum_gen=ปิดใช้งานการเจนเนอเรทแร่อลูมิเนียม (ดาวศุกร์) +gc.configgui.disable_venus_copper_gen=ปิดใช้งานการเจนเนอเรทแร่ทองแดง (ดาวศุกร์) +gc.configgui.disable_venus_galena_gen=ปิดใช้งานการเจนเนอเรทแร่ตะกั่ว (ดาวศุกร์) +gc.configgui.disable_venus_quartz_gen=ปิดใช้งานการเจนเนอเรทแร่ควอตซ์ (ดาวศุกร์) +gc.configgui.disable_venus_silicon_gen=ปิดใช้งานการเจนเนอเรทแร่ซิลิคอน (ดาวศุกร์) +gc.configgui.disable_venus_tin_gen=ปิดใช้งานการเจนเนอเรทแร่ดีบุก (ดาวศุกร์) +gc.configgui.id_schematic_cargo_rocket=ID แผนผังจรวดขนส่ง +gc.configgui.id_schematic_rocket_t2=ID แผนผังจรวด เทียร์ 2 +gc.configgui.id_schematic_rocket_t3=ID แผนผังจรวด เทียร์ 3 +gc.configgui.launch_controller_all_dims=เปิดใช้งานเครื่องควบคุมการปล่อยจรวดให้โหลดทุกมิติ +gc.configgui.launch_controller_chunk_load=เปิดใช้งานเครื่องควบคุมการปล่อยจรวดให้โหลด Chunk +gc.configgui.planets.title=การตั้งค่ากาแลคติคคราฟต์ - ดาวเคราะห์ +gui.button.liquefy.name=เริ่มทำงาน +gui.button.liquefy_stop.name=หยุดทำงาน +gui.button.recall.name=เรียกกลับ +gui.carbon_slot.desc.0=ใส่สะเก็ดคาร์บอนตรงนี้ +gui.cargorocket.status.launched.0=จรวดถูก +gui.cargorocket.status.launched.1=ปล่อยแล้ว +gui.cargorocket.status.waiting.0=รอการ +gui.cargorocket.status.waiting.1=จุดระเบิด +gui.choose_planet.desc.mars=อาศัยอยู่ได้#ไม่มีออกซิเจน#แรงโน้มถ่วง: 38% +gui.cryogenic.chat.cant_use=ฉันไม่สามารถใช้ตู้นี้ได้เป็นเวลา %d วินาที +gui.gas_input.desc.0=วางกระป๋องที่บรรจุมีเทนหรือ +gui.gas_input.desc.1=วาล์วเก็บก๊าซตรงนี้ +gui.gas_tank.desc.0=ก๊าซที่เก็บไว้ +gui.gas_tank_compressed.desc.0=ก๊าซที่บีบอัดไว้ +gui.hydrogen_input.desc.0=วางถังไฮโดรเจน +gui.hydrogen_input.desc.1=หรือวาล์วเก็บก๊าซ +gui.launch_controller.advanced=ขั้นสูง +gui.launch_controller.desc.0=นี่คือเครื่องควบคุมการปล่อยจรวด$ความถี่เฉพาะ +gui.launch_controller.desc.1=ความถี่ที่ใกล้จะปล่อยจรวด +gui.launch_controller.desc.2=ถ้าจรวดถูกปล่อย ฐานปล่อย$จรวดจะถูกลบออก +gui.launch_controller.desc.3=เมื่อตัวเลือกตรงกับที่ตั้งไว้$จรวดจะถูกปล่อย +gui.launch_controller.desc.4=ซ่อนเป้าหมายความถี่$จากผู้เล่นคนอื่น ๆ +gui.launch_controller.owner=เจ้าของ +gui.liquid_output.desc.2=ถังก๊าซเหลว +gui.liquid_tank.desc.0=ถังของเหลว +gui.message.address.name=ที่อยู่ +gui.message.astro_miner.fail=ฐานนี้มีแอสโทรไมเนอร์แล้ว! +gui.message.astro_miner1.fail=พื้นที่โรงจอดถูกปิดกั้นโดย: +gui.message.astro_miner1_a.fail=เส้นทางของแอสโทรไมเนอร์ถูกบล็อกโดย: +gui.message.astro_miner1_b.fail=พื้นที่มีการป้องกัน! +gui.message.astro_miner2.fail=มีแอสโทรไมเนอร์มากเกินไป! +gui.message.astro_miner3.fail=ฐานแอสโทรไมเนอร์ถูกลบออกไป! +gui.message.astro_miner4.fail=แอสโทรไมเนอร์พลังงานหมดและไม่สามารถกลับไปยังฐานได้! +gui.message.astro_miner5.fail=เส้นทางของแอสโทรไมเนอร์ที่กลับไปยังฐาน ดูเหมือนว่าจะถูกปิดกั้น! +gui.message.astro_miner6.fail=แอสโทรไมเนอร์ทำเหมืองเสร็จเรียบร้อย และจะหยุดทำงาน! +gui.message.astro_miner7.fail=แอสโทรไมเนอร์ไม่สามารถทำงานได้บนสถานีอวกาศ! +gui.message.astro_miner8.fail=แอสโทรไมเนอร์คันที่สองถูกตรวจพบในฐานแรก, แอสโทรไมเนอร์คันแรกจะหยุดทำงาน +gui.message.bubble_exp.name=ขยายฟองอากาศ +gui.message.cargo_full.name=จรวดขนส่งเต็ม +gui.message.cargo_unloaded.name=จรวดขนส่งถ่ายสินค้าแล้ว +gui.message.dest_address.name=เป้าหมายของที่อยู่ +gui.message.dest_frequency.name=เป้าหมายความถี่ +gui.message.enable_grass.name=เปิดใช้งานหญ้า +gui.message.enable_trees.name=เปิดใช้งานต้นไม้ +gui.message.frequency.name=ความถี่ +gui.message.fully_fueled.name=เชื้อเพลิงเต็ม +gui.message.grapple.fail=ฉันต้องการเส้นใยจำนวนเล็กน้อย ถ้าจะใช้ตะขอ! +gui.message.grass.name=หญ้า +gui.message.instant.name=โดยตรง +gui.message.invalid_address.name=ที่อยู่ผิดพลาด +gui.message.invalid_freq.name=ความถี่ไม่ถูกต้อง +gui.message.invalid_target_address.name=ที่อยู่ของเป้าหมายผิดพลาด +gui.message.launch_when.name=ปล่อยเมื่อ +gui.message.low_energy.name=พลังงานต่ำ +gui.message.low_energy_output.name=ส่งออกพลังงานต่ำ +gui.message.no_bonemeal.name=ผงกระดูกไม่พอ +gui.message.no_energy.name=พลังงานไฟฟ้าไม่พอ +gui.message.no_saplings.name=ต้นกล้าไม่พอ +gui.message.no_seeds.name=เมล็ดไม่พอ +gui.message.no_valid_blocks.name=ไม่มีบล็อกที่ตรงกันในฟองอากาศ +gui.message.no_water.name=น้ำไม่พอ +gui.message.not_enough.name=ไม่พอ +gui.message.not_enough_energy.name=พลังงานไม่พอ! +gui.message.not_set.name=ไมได้ตั้งไว้ +gui.message.one_min.name=1 นาที +gui.message.receiving_active.name=รับข้อมูลการทำงาน +gui.message.redstone_sig.name=สัญญาณเรดสโตน +gui.message.remove_pad.name=ลบฐานปล่อยจรวด +gui.message.sending_active.name=กำลังส่งการทำงาน +gui.message.success.name=เสร็จสิ้น +gui.message.target_no_energy.name=เป้าหมายพลังงานไม่พอ! +gui.message.telepad_not_found.name=ไม่เจอเครื่องเทเลพอร์ต! +gui.message.telepad_too_far.name=เป้าหมายไกลเกินไป! (สูงสุด %d) +gui.message.telepad_wrong_dim.name=เป้าหมายผิดมิติ! +gui.message.ten_sec.name=10 วินาที +gui.message.terraforming.name=กำลังปรับสภาพ +gui.message.thirty_sec.name=30 วินาที +gui.message.trees.name=ต้นไม้ +gui.message.with_atmosphere0.name=ถ้าบนดาวเคราะห์เต็มไปด้วย +gui.message.with_atmosphere1.name=ในชั้นบรรยากาศ +gui.message.zero_water.name=ไม่มีน้ำ! +gui.methane_output.desc.2=ถังมีเทน +gui.miner.docked=จอดแล้ว +gui.miner.docking=กำลังจอด +gui.miner.mined=ขุดแล้ว +gui.miner.mining=กำลังขุด +gui.miner.offline=ออฟไลน์ +gui.miner.out_of_range=ออกจากระยะที่กำหนด +gui.miner.returning=กำลังกลับ +gui.miner.stuck=ติดอยู่ที่: +gui.miner.travelling=กำลังเดินทาง +gui.slimeling.button.follow=ตามเจ้าของ +gui.slimeling.button.sit=นั่ง +gui.slimeling.chat.wrong_player=นี่ไม่ใช่สไลม์ลิ่งของฉัน! +gui.slimeling.damage=แรงโจมตี +gui.slimeling.following=ตามเจ้าของ +gui.slimeling.food=อาหารที่ชอบ +gui.slimeling.kills=ฆ่าได้ +gui.slimeling.name=ชื่อ +gui.slimeling.owner=เจ้าของ +gui.slimeling.scale=ขนาด +gui.slimeling.sitting=นั่ง +gui.status.invalid_spout_1.name=ต้องวางบน +gui.status.invalid_spout_2.name=พวยกำมะถัน +gui.status.liquefying.name=ทำให้เป็นของเหลว +gui.status.needs_carbon.name=ต้องการคาร์บอน +gui.status.nogas.name=ไม่มีก๊าซ +gui.status.processing.name=กำลังสังเคราะห์ +gui.status.tankfull.name=ถังเก็บเต็ม +gui.status.tanksfull.name=ถังเก็บเต็ม +gui.telepad.desc.0=นี่คือที่อยู่ของเครื่องเทเลพอร์ต +gui.telepad.desc.1=ที่อยู่ของเครื่องเทเลพอร์ตอื่น ๆ $สิ่งมีชีวิตจะถูกส่งไปยังเป้าหมาย +gui.terraformer.desc.0=ถังเก็บน้ำ +gui.water_bucket_slot.desc=วางถังน้ำตรงนี้ +item.astro_miner.name=แอสโทรไมเนอร์ +item.atmospheric_valve.name=วาล์วเก็บก๊าซ +item.atomic_battery.name=แบตเตอรี่อะตอม +item.beam_core.name=แกนลำแสง +item.bucket_sludge.name=ถังตะกอนแบคทีเรีย +item.bucket_sulphuric_acid.name=ถังกรดกำมะถัน +item.canister.gas.name=ก๊าซ +item.canister.liquid_argon.full.name=กระป๋องอาร์กอนเหลว +item.canister.liquid_argon.name=อาร์กอนเหลว +item.canister.liquid_argon.partial.name=กระป๋องอาร์กอนเหลว +item.canister.liquid_nitrogen.full.name=กระป๋องไนโตรเจนเหลว +item.canister.liquid_nitrogen.name=ไนโตรเจนเหลว +item.canister.liquid_nitrogen.partial.name=กระป๋องไนโตรเจนเหลว +item.canister.lox.full.name=กระป๋องออกซิเจนเหลว +item.canister.lox.name=ออกซิเจนเหลว +item.canister.lox.partial.name=กระป๋องออกซิเจนเหลว +item.carbon_fragments.name=สะเก็ดคาร์บอน +item.compressed_desh.name=แผ่นเดรช +item.compressed_titanium.name=แผ่นไทเทเนียม +item.desh_axe.name=ขวานเดรช +item.desh_boots.name=รองเท้าเดรช +item.desh_chestplate.name=เสื้อเกราะเดรช +item.desh_helmet.name=หมวกเดรช +item.desh_hoe.name=จอบเดรช +item.desh_leggings.name=กางเกงเดรช +item.desh_pick.name=อีเต้อเดรช +item.desh_pick_slime.description.name=สามารถขุดไข่คริปเปอร์ได้ +item.desh_pick_slime.name=อีเต้อเดรชเหนียว +item.desh_spade.name=พลั่วเดรช +item.desh_stick.name=แท่งเดรช +item.desh_sword.name=ดาบเดรช +item.dust_titanium.name=ผงไทเนียม +item.empty_gas_canister.name=กระป๋องก๊าซเปล่า +item.engine_t2.name=เครื่องยนต์จรวดแบบทนทาน +item.fluid_manip.name=ตัวจัดการของเหลว +item.grapple.name=ตะขอ +item.heavy_nose_cone.name=กรวยจรวดแบบทนทาน +item.ingot_desh.name=แท่งเดรช +item.ingot_lead.name=แท่งตะกั่ว +item.ingot_titanium.name=แท่งไทเทเนียม +item.key.t2.name=กุญแจดันเจี้ยน เทียร์ 2 +item.key.t3.name=กุญแจดันเจี้ยน เทียร์ 3 +item.methane_canister.name=กระป๋องมีเทน +item.methane_canister_partial.name=กระป๋องมีเทน +item.orion_drive.name=เครื่องยนต์ตรวจสอบแร่ +item.prelaunch_checklist.name=รายการตรวจสอบก่อนบิน +item.radioisotope_core.name=แกนเรดิโอไอโซโทป +item.raw_desh.name=เดรชหยาบ +item.reinforced_plate_t2.name=แผ่นโลหะทนทาน +item.reinforced_plate_t3.name=แผ่นโลหะทนทาน +item.rocket_fins_t2.name=ปีกจรวดแบบทนทาน +item.rocket_t2.cargo_rocket.name=จรวดขนส่ง +item.rocket_t2.t2Rocket.name=จรวด เทียร์ 2 +item.rocket_t3.t3Rocket.name=จรวด เทียร์ 3 +item.shard_iron.name=สะเก็ดเหล็ก +item.shard_titanium.name=สะเก็ดไทเทเนียม +item.shield_controller.description=เครื่องสร้างเกราะพลังจะป้องกันการกันกร่อน ในบรรยากาศ +item.shield_controller.name=เครื่องสร้างเกราะพลัง +item.slimeling_cargo.name=กระเป๋าเก็บของสไลม์ลิ่ง +item.strange_seed.name=เมล็ดพันธุ์ประหลาด +item.thermal_boots.name=รองเท้ากันความร้อน +item.thermal_boots_t2.name=รองเท้ากันความร้อน +item.thermal_chestplate.name=เสื้อเกราะกันความร้อน +item.thermal_chestplate_t2.name=เสื้อเกราะกันความร้อน +item.thermal_cloth.name=ผ้ากันความร้อน +item.thermal_fabric.name=เนื้อผ้ากันความร้อน +item.thermal_helm.name=หมวกกันความร้อน +item.thermal_helm_t2.name=หมวกกันความร้อน +item.thermal_leggings.name=กางเกงกันความร้อน +item.thermal_leggings_t2.name=กางเกงกันความร้อน +item.tier2.desc=เทียร์ 2 +item.tier3.desc=เทียร์ 3 +item.titanium_axe.name=ขวานไทเทเนียม +item.titanium_boots.name=รองเท้าไทเทเนียม +item.titanium_chestplate.name=เสื้อเกราะไทเทเนียม +item.titanium_helmet.name=หมวกไทเทเนียม +item.titanium_hoe.name=จอบไทเทเนียม +item.titanium_leggings.name=กางเกงไทเทเนียม +item.titanium_pickaxe.name=อีเต้อไทเทเนียม +item.titanium_shovel.name=พลั่วไทเทเนียม +item.titanium_sword.name=ดาบไทเทเนียม +item.volcanic_pickaxe.description=ขุดในระยะ 3x3 ในทิศทางที่หันหน้าไป +item.volcanic_pickaxe.name=อีเต้อภูเขาไฟ +planet.asteroids=ดาวเคราะห์น้อย +planet.mars=ดาวอังคาร +schematic.astro_miner.name=แอสโทรไมเนอร์ +schematic.cargo_rocket.name=จรวดขนส่งอัตโนมัติ +schematic.rocket_t3.name=จรวด เทียร์ 3 +tile.asteroids_block.asteroid_rock_0.name=หินดาวเคราะห์น้อย +tile.asteroids_block.asteroid_rock_1.name=หินดาวเคราะห์น้อย +tile.asteroids_block.asteroid_rock_2.name=หินดาวเคราะห์น้อย +tile.asteroids_block.ore_aluminum_asteroids.name=แร่อลูมิเนียม +tile.asteroids_block.ore_ilmenite_asteroids.name=แร่อิลเมไนท์ +tile.asteroids_block.ore_iron_asteroids.name=แร่เหล็ก +tile.asteroids_block.asteroid_deco.name=บล็อกตกแต่งมืด +tile.asteroids_block.titanium_block.name=บล็อกไทเทเนียม +tile.beam_receiver.description=ใช้เชื่อมต่อไปยังเครื่องมือต่าง ๆ ทั้งส่งเข้าและส่งออก พลังงานจะถูกส่งโดยใช้ลำแสง +tile.beam_receiver.name=เครื่องรับลำแสง +tile.beam_reflector.description=ใช้สำหรับเปลี่ยนทิศทางของลำแสง จากเป้าหมายไปยังทิศทางอื่น ๆ คลิกขวาเพื่อเปลี่ยนทิศทางการสะท้อน ไปยังเป้าหมายอื่น ๆ +tile.beam_reflector.name=เครื่องสะท้อนลำแสง +tile.cavern_vines.description=สิ่งนี้อันตรายสำหรับสิ่งมีชีวิต มันจะเกี่ยวพันและดึงขึ้นสู่ข้างบน +tile.cavern_vines.name=เถาวัลย์ถ้ำ +tile.crashed_probe.name=โพรบที่พัง +tile.creeper_egg.description=พบได้ในดันเจี้ยนดาวอังคาร และเมื่อไข่ถูกแรงระเบิดจะสปอนคริปเปอร์กลายพันธุ์ออกมา +tile.creeper_egg.name=ไข่คริปเปอร์ +tile.cryo_chamber.description=ผู้เล่นสามารถนอนได้ระหว่างวันโดยใช้ สิ่งนี้ เพิ่มเลือดได้จำนวนเล็กน้อย แต่มีการจำกัดการใช้งาน +tile.dense_ice.name=ก้อนน้ำแข็งหนาทึบ +tile.electrolyzer.description=ใช้เปลี่ยนน้ำให้เป็นไฮโดรเจนกับออกซิเจน และจะมีประโยชน์กับเครื่องสังเคราะห์มีเทน +tile.gas_liquefier.description=ใช้เก็บก๊าซจากชั้นบรรยากาศหรือจาก กระป๋องของเหลว ส่วนมีเทนเหลวสามารถกลั่นและใช้เป็น เชื้อเพลิงจรวดได้เมื่อเสร็จสิ้นการกลั่น +tile.geothermal_generator.description=เมื่อวางเครื่องบนพวยไอกำมะถัน เครื่องจะผลิตพลังงานด้วยอัตราการสั่น ของพวย +tile.geothermal_generator.name=เครื่องผลิตความร้อนใต้พิภพ +tile.hydrogen_pipe.description=ใช้ส่งไฮโดรเจนไปยังเครื่องมืออื่น ๆ ที่ใช้งานไฮโดรเจน +tile.hydrogen_pipe.name=ท่อไฮโดรเจน +tile.launch_controller.description=ใช้สำหรับการปล่อยจรวดในรูปแบบต่าง ๆ รวมถึงการปล่อยจรวดไปยังจุดหมาย สำหรับการปล่อยจรวดอัตโนมัติ +tile.mars.coppermars.name=แร่ทองแดง +tile.mars.deshmars.name=แร่เดรช +tile.mars.ironmars.name=แร่เหล็ก +tile.mars.marscobblestone.name=หินหยาบดาวอังคาร +tile.mars.marsdeco.name=บล็อกเดรช +tile.mars.marsdirt.name=เรโกลิธดาวอังคาร +tile.mars.marsdungeon.name=อิฐดันเจี้ยนดาวอังคาร +tile.mars.marsgrass.name=เรโกลิธดาวอังคารละเอียด +tile.mars.marsstone.name=หินดาวอังคาร +tile.mars.tinmars.name=แร่ดีบุก +tile.mars_machine.0.name=เทอราฟอร์เมอร์ +tile.mars_machine.1.name=ตู้ไครโอเจนิค +tile.mars_machine.2.name=เครื่องควบคุมการปล่อยจรวด +tile.mars_machine.4.name=เครื่องเปลี่ยนสถานะก๊าซ +tile.mars_machine.5.name=เครื่องสังเคราะห์มีเทน +tile.mars_machine.6.name=เครื่องเปลี่ยนน้ำเป็นก๊าซ +tile.mars_stairs_brick.name=บันไดอิฐดันเจี้ยนดาวอังคาร +tile.mars_stairs_cobblestone.name=บันไดหินหยาบดาวอังคาร +tile.methane_synthesizer.description=ใช้ผลิตมีเทนสำหรับใช้ใน เครื่องเปลี่ยนสถานะก๊าซ +tile.miner_base.description=ใช้สำหรับเป็นฐานจอดของแอสโทรไมเนอร์ วางฐานเป็น 2x2x2 เพื่อทำให้ฐานสมบูรณ์ +tile.miner_base.name=ฐานแอสโทรไมเนอร์ +tile.miner_base_full.name=ฐานแอสโทรไมเนอร์ +tile.slab_gc_half.mars_bricks_slab.name=แผ่นอิฐดันเจี้ยนดาวอังคาร +tile.slab_gc_half.mars_slab.name=แผ่นหินหยาบดาวอังคาร +tile.slab_gc_half.asteroids_slab.name=แผ่นบล็อกตกแต่งมืด +tile.slimeling_egg.blue.name=ไข่สไลม์ลิ่งสีน้ำเงิน +tile.slimeling_egg.description=ทุบหนึ่งครั้งโดยการใช้มือของผู้เล่น จะทำให้ออกมาเป็นสัตว์เลี้ยงของเรา +tile.slimeling_egg.red.name=ไข่สไลม์ลิ่งสีแดง +tile.slimeling_egg.yellow.name=ไข่สไลม์ลิ่งสีเหลือง +tile.sludge.name=ตะกอนแบคทีเรีย +tile.spout.name=พวยกำมะถัน +tile.sulphuric_acid.name=กรดกำมะถัน +tile.telepad_short.description=ใช้สำหรับเทเลพอร์ทผู้เล่นหรือสิ่งมีชีวิต อื่น ๆ ในระยะ 256 บล็อก และต้องเชื่อมต่อกับเครื่องเทเลพอร์ตอื่น ๆ ด้วย +tile.telepad_short.name=เครื่องเทเลพอร์ตระยะใกล้ +tile.terraformer.description=ใช้สำหรับเพิ่มพื้นที่สีเขียวในดาวเคราะห์ ที่ห่างไกล เพิ่มหญ้า ต้นไม้ น้ำ เมื่อใส่วัสดุที่ถูกต้อง +tile.treasure_t2.description=พบได้ในดันเจี้ยนดาวอังคารและกล่อง จะปลดล็อคได้ต่อเมื่อสู้กับบอสชนะ +tile.treasure_t2.name=กล่องสมบัติ เทียร์ 2 +tile.treasure_t3.description=พบได้ในดันเจี้ยนดาวศุกร์และกล่อง จะปลดล็อคได้ต่อเมื่อสู้กับบอสชนะ +tile.treasure_t3.name=กล่องสมบัติ เทียร์ 3 +tile.venus.dungeon_brick_venus_1.name=กำแพงอิฐดันเจี้ยนดาวศุกร์ I +tile.venus.dungeon_brick_venus_2.name=กำแพงอิฐดันเจี้ยนดาวศุกร์ II +tile.venus.venus_ore_aluminum.name=แร่อลูมิเนียม +tile.venus.venus_ore_copper.name=แร่ทองแดง +tile.venus.venus_ore_galena.name=แร่กาลีนา +tile.venus.venus_ore_quartz.name=แร่ควอตซ์ +tile.venus.venus_ore_silicon.name=แร่ซิลิคอน +tile.venus.venus_ore_tin.name=แร่ดีบุก +tile.venus.venus_rock_0.name=หินอ่อนดาวศุกร์ +tile.venus.venus_rock_1.name=หินแข็งดาวศุกร์ +tile.venus.venus_rock_2.name=หินภูเขาไฟดาวศุกร์ +tile.venus.venus_rock_3.name=หินภูเขาไฟ +tile.venus.lead_block.name=บล็อกตะกั่ว +tile.venus_rock_scorched.name=หินไหม้เกรียมดาวศุกร์ +tile.walkway.walkway.description=ใช้สำหรับการตกแต่งที่คล้ายกับสภาพภายใน ยานอวกาศ +tile.walkway.walkway.name=ทางเดิน +tile.walkway.walkway_pipe.description=ใช้สำหรับเป็นทางเดินและใช้เชื่อมต่อ กับแหล่งเก็บของเหลวได้ ด้วยท่อที่อยู่ข้างใต้ +tile.walkway.walkway_pipe.name=ทางเดิน +tile.walkway.walkway_wire.description=ใช้สำหรับเป็นทางเดินและใช้เชื่อมต่อ กับแหล่งเก็บพลังงานได้ ด้วยสายไฟอลูมิเนียมที่อยู่ข้างใต้ +tile.walkway.walkway_wire.name=ทางเดิน +tile.wall_gc.mars.name=กำแพงหินหยาบดาวอังคาร +tile.wall_gc.mars_bricks.name=กำแพงอิฐดันเจี้ยนดาวอังคาร +tile.web_torch.web_torch_0.name=เชือกใยแมงมุม +tile.web_torch.web_torch_1.description=คบเพลิงหินเรืองแสง +tile.web_torch.web_torch_1.name=เชือกใยแมงมุม diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/tr_tr.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/tr_tr.lang new file mode 100644 index 00000000..6802c462 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/tr_tr.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Giriş Bölmesi +container.launchcontroller.name=Fırlatma Kontrollü +container.mars_lander.name=Landing Balonları +container.short_range_telepad.name=Kısa Menzilli Telepad +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astro Maden Makinesi +entity.creeper_boss.name=Evrimleşmiş Creeper Patronu +entity.entry_pod.name=Giriş Bölmesi +entity.grapple_hook.name=Çeneli Kanca +entity.landing_balloons.name=Landing Balonları +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Kargo Roketi +entity.rocket_t2.name=Tier 2 Roketi +entity.rocket_t3.name=Tier 3 Roket +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Küçük Asteroit +fluid.argon=Argon Gazı +fluid.atmosphericgases=Atmosferik Gazlar +fluid.bacterialsludge=Bakteriyel Çamur +fluid.carbondioxide=CO2 Gazı +fluid.fuel=Yakıt +fluid.helium=Helyum Gazı +fluid.hydrogen=Hidrojen Gazı +fluid.liquidargon=Sıvı Argon +fluid.liquidmethane=Sıvı Metan +fluid.liquidnitrogen=Sıvı Nitrojen +fluid.liquidoxygen=Sıvı Oksijen +fluid.methane=Metan Gazı +fluid.nitrogen=Nitrojen Gazı +fluid.oxygen=Oksijen Gazı +gas.carbondioxide.name=Karbondioksit +gas.nitrogen.name=Nitrojen +gas.oxygen.name=Oksijen +gc.configgui.astro_miners_max=Oyuncu Başına Düşen Maksimum Astro Maden Makinesi +gc.configgui.dimension_id_asteroids=Asteroit Boyut ID'si +gc.configgui.dimension_id_mars=Mars Boyut ID'si +gc.configgui.disable_galacticraft_helium=Helyum Gaz Kaydını Kapat +gc.configgui.id_schematic_cargo_rocket=Kargo Roketi Şematiği ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Roketi Şematiği ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Roket Şematik ID'si +gc.configgui.launch_controller_all_dims=Fırlatma Kontrolü Tüm Boyutlar İçin +gc.configgui.launch_controller_chunk_load=Fırlatma Kontrolü Chunk Yükleme +gc.configgui.planets.title=Galacticraft Planets Ayarları +gui.button.liquefy.name=Başlat +gui.button.liquefy_stop.name=Dur +gui.button.recall.name=Geri Çağır +gui.carbon_slot.desc.0=Parçalanmış Karbonu buraya koyun +gui.cargorocket.status.launched.0=Zaten +gui.cargorocket.status.launched.1=Fırlatıldı +gui.cargorocket.status.waiting.0=Ateşleme için +gui.cargorocket.status.waiting.1=bekleniyor +gui.choose_planet.desc.mars=Yaşanabilir#Oksijen Bulunmuyor#Yerçekimi: %38 +gui.cryogenic.chat.cant_use=Bunu %d saniye boyunca kullanamam +gui.gas_input.desc.0=Buraya Metan Gazı Bidonu$Koyun +gui.gas_input.desc.1=(Alternatif olarak Atmosferik $Valf kullanabilirsiniz) +gui.gas_tank.desc.0=Gaz Deposu +gui.gas_tank_compressed.desc.0=Gaz Deposu (Sıkıştırılmış) +gui.hydrogen_input.desc.0=Hidrojen Tankı veya +gui.hydrogen_input.desc.1=Atmosferik Valf gerekir +gui.launch_controller.desc.0=Fırlatıcı kontrollünün frekansı +gui.launch_controller.desc.1=Fırlatılacak roketin karşı frekansı +gui.launch_controller.desc.2=Roket fırlatma pedi$kalkışta silinecek. +gui.launch_controller.desc.3=Roket fırlatmak için,$ayarlar +gui.launch_controller.desc.4=Hedef Frekansı diğer$oyunculardan sakla +gui.liquid_output.desc.2=sıvılaştırılmış gaz tankı +gui.liquid_tank.desc.0=Sıvı Tankı +gui.message.address.name=Adres Numarası +gui.message.astro_miner.fail=Bu üs Astro Maden Makinesine sahip! +gui.message.astro_miner1.fail=Kazma alanı şu maddeden dolayı tıkalı: +gui.message.astro_miner1_a.fail=Astro Maden Makinesinin rotası şu maddeden dolayı tıkalı: +gui.message.astro_miner2.fail=Astro Maden Makinesinden daha fazla sahip olamazsınız! +gui.message.astro_miner3.fail=Astro Maden Makinesinin üssü yok edildi! +gui.message.astro_miner4.fail=Astro Maden Makinesinin gücü az ve üsse geri dönemiyor! +gui.message.astro_miner5.fail=Astro Maden Makinesinin üs yolunda bir yere sıkıştı! +gui.message.astro_miner6.fail=Astro Maden Makinesi kazma alanını bitirdiği için çalışmayı bırakıcak! +gui.message.astro_miner7.fail=Uzay İstasyonunda maden bulumadığı için Astro Maden Makinesi bir şey yapmayacaktır! +gui.message.astro_miner8.fail=Aynı üste iki adet Astro Maden Makinesi tespit edildi, birinci makine donduruluyor. +gui.message.bubble_exp.name=Genişleyen Kabarcık +gui.message.cargo_full.name=Kargo Dolunca +gui.message.cargo_unloaded.name=Kargo Boşalınca +gui.message.dest_address.name=Hedefin Adres Numarası +gui.message.dest_frequency.name=Fre.Hedefi +gui.message.enable_grass.name=Çimleri Etkinleştir +gui.message.enable_trees.name=Ağaçları Etkinleştir +gui.message.frequency.name=Frekans +gui.message.fully_fueled.name=Yakıt Dolunca +gui.message.grapple.fail=Kancayı kullanmak istiyorsam biraz ipe ihtiyacım var! +gui.message.grass.name=Çimler +gui.message.instant.name=Anında +gui.message.invalid_address.name=Lütfen Farklı Adres Numarası Girin +gui.message.invalid_freq.name=Yanlış Frekans +gui.message.invalid_target_address.name=Hedef Adres Numarası Yanlış +gui.message.launch_when.name=Fırlatmak için +gui.message.low_energy.name=Düşük Enerji +gui.message.no_bonemeal.name=Yeterli Kemik Tozu Yok +gui.message.no_energy.name=Yeterli Enerji Yok +gui.message.no_saplings.name=Yeterli Fidan Yok +gui.message.no_seeds.name=Yeterli Tohum Yok +gui.message.no_valid_blocks.name=Kabarcık İçindeki Blok Doğrulanamadı +gui.message.no_water.name=Yeterli Su Yok +gui.message.not_enough.name=Yeterli Değil +gui.message.not_enough_energy.name=Enerji Yetersiz! +gui.message.not_set.name=Belirtilmemiş +gui.message.one_min.name=1 Dakikada +gui.message.receiving_active.name=Alma Aktif +gui.message.redstone_sig.name=Kızıltaş Sinyali +gui.message.remove_pad.name=Pedi Sil +gui.message.sending_active.name=Gönderme Aktif +gui.message.success.name=Başarılı +gui.message.target_no_energy.name=Hedefin Enerjisi Yetersiz! +gui.message.telepad_not_found.name=Telepad Bulunamadı! +gui.message.telepad_too_far.name=Hedef çok uzak! (En fazla %d) +gui.message.telepad_wrong_dim.name=Hedef farklı dünyada. +gui.message.ten_sec.name=10 Saniyede +gui.message.terraforming.name=Dünyalaştırıcı +gui.message.thirty_sec.name=30 Saniyede +gui.message.trees.name=Ağaçlar +gui.message.with_atmosphere0.name=gezegenin atmosferinde +gui.message.with_atmosphere1.name=bulunabilir +gui.message.zero_water.name=Su yok! +gui.methane_output.desc.2=metan gazı tankı +gui.miner.docked=Kenetlendi +gui.miner.docking=Kenetleniyor +gui.miner.mined=Kazılan +gui.miner.mining=Kazıyor +gui.miner.offline=Kapalı +gui.miner.out_of_range=Kapsama Dışı +gui.miner.returning=Dönüyor +gui.miner.stuck=Sıkıştı: +gui.miner.travelling=Geziyor +gui.slimeling.button.follow=Takip Ettir +gui.slimeling.button.sit=Oturt +gui.slimeling.chat.wrong_player=Bu benim Slimeling'im değil! +gui.slimeling.damage=Saldırı Hasarı +gui.slimeling.following=Takip Ediyor +gui.slimeling.food=Favori Besini +gui.slimeling.kills=Öldürülen +gui.slimeling.name=Adı +gui.slimeling.owner=Sahibi +gui.slimeling.scale=Seviye +gui.slimeling.sitting=Oturuyor +gui.status.liquefying.name=Sıvılaştırılıyor +gui.status.needs_carbon.name=Karbon Gerekiyor +gui.status.nogas.name=Gaz Yok +gui.status.processing.name=Sentezleme +gui.status.tankfull.name=Tank Dolu +gui.status.tanksfull.name=Tanklar Dolu +gui.telepad.desc.0=Telepadın adres numarası$farklı olması gerekir. +gui.telepad.desc.1=Başka bir Telepadın adres numarası.$250m içinde olmalı. +gui.terraformer.desc.0=Su Tankı +gui.water_bucket_slot.desc=Su kovalarını buraya koyun +item.astro_miner.name=Astro Maden Makinesi +item.atmospheric_valve.name=Atmosferik Valf +item.beam_core.name=Işın Çekirdeği +item.bucket_sludge.name=Bakteriyel Çamur Kovası +item.canister.gas.name=Gaz +item.canister.liquid_argon.full.name=Dolu Sıvı Argon Bidonu +item.canister.liquid_argon.name=Sıvı +item.canister.liquid_argon.partial.name=Sıvı Argon Bidonu +item.canister.liquid_nitrogen.full.name=Dolu Sıvı Nitrojen Bidonu +item.canister.liquid_nitrogen.name=Sıvı +item.canister.liquid_nitrogen.partial.name=Sıvı Nitrojen Bidonu +item.canister.lox.full.name=Dolu Sıvı Oksijen Bidonu +item.canister.lox.name=LOX +item.canister.lox.partial.name=Sıvı Oksijen Bidonu +item.carbon_fragments.name=Parçalanmış Karbon +item.compressed_desh.name=Sıkıştırılmış Desh +item.compressed_titanium.name=Sıkıştırılmış Titanyum +item.desh_axe.name=Desh Balta +item.desh_boots.name=Desh Bot +item.desh_chestplate.name=Desh Zırh +item.desh_helmet.name=Desh Kask +item.desh_hoe.name=Desh Çapa +item.desh_leggings.name=Desh Pantolon +item.desh_pick.name=Desh Kazma +item.desh_pick_slime.description.name=Slimeling yumurtası hasat edebilirsiniz. +item.desh_pick_slime.name=Yapışkan Desh Kazma +item.desh_spade.name=Desh Kürek +item.desh_stick.name=Desh Çubuğu +item.desh_sword.name=Desh Kılıç +item.empty_gas_canister.name=Boş Gaz Bidonu +item.engine_t2.name=Ağır Roket Motoru +item.fluid_manip.name=Sıvı Manipülatör +item.grapple.name=Kanca +item.heavy_nose_cone.name=Ağır Roket Burnu +item.ingot_desh.name=Desh Cevheri +item.ingot_titanium.name=Titanyum Külçesi +item.key.t2.name=Tier 2 Zindan Anahtarı +item.methane_canister.name=Dolu Metan Gazı Bidonu +item.methane_canister_partial.name=Metan Gazı Bidonu +item.orion_drive.name=Orion Sürücüsü +item.raw_desh.name=Arıtılmamış Desh +item.reinforced_plate_t2.name=Ağır Plaka +item.reinforced_plate_t3.name=Daha Ağır Plaka +item.rocket_fins_t2.name=Ağır Roket Kanatları +item.rocket_t2.cargo_rocket.name=Kargo Roketi +item.rocket_t2.t2Rocket.name=Tier 2 Roketi +item.rocket_t3.t3Rocket.name=Tier 3 Roket +item.shard_iron.name=Demir Parçası +item.shard_titanium.name=Titanyum Parçası +item.slimeling_cargo.name=Slimeling Envanter Çantası +item.thermal_boots.name=Termal Dolgulu Bot +item.thermal_chestplate.name=Termal Dolgulu Zırh +item.thermal_cloth.name=Termal Kumaş +item.thermal_helm.name=Termal Dolgulu Kask +item.thermal_leggings.name=Termal Dolgulu Pantolon +item.tier2.desc=Tier 2 +item.tier3.desc=Tier 3 +item.titanium_axe.name=Titanyum Balta +item.titanium_boots.name=Titanyum Bot +item.titanium_chestplate.name=Titanyum Zırh +item.titanium_helmet.name=Titanyum Kask +item.titanium_hoe.name=Titanyum Çapa +item.titanium_leggings.name=Titanyum Pantolon +item.titanium_pickaxe.name=Titanyum Kazma +item.titanium_shovel.name=Titanyum Kürek +item.titanium_sword.name=Titanyum Kılıç +planet.asteroids=Asteroit +planet.mars=Mars +schematic.astro_miner.name=Astro Maden Makinesi +schematic.cargo_rocket.name=Otomatik Kargo Roketi +schematic.rocket_t3.name=Tier 3 Roketi +tile.asteroids_block.asteroid_rock_0.name=Asteroit Kayası +tile.asteroids_block.asteroid_rock_1.name=Asteroit Kayası +tile.asteroids_block.asteroid_rock_2.name=Asteroit Kayası +tile.asteroids_block.ore_aluminum_asteroids.name=Alüminyum Cevheri +tile.asteroids_block.ore_ilmenite_asteroids.name=İlmenit Cevheri +tile.asteroids_block.ore_iron_asteroids.name=Demir Cevheri +tile.beam_receiver.description=Işın alıcısı enerji makinelerin giriş ve çıkışına bağlanarak enerjiyi transfer etmekte kullanılır. +tile.beam_receiver.name=Işın Alıcısı +tile.beam_reflector.description=Işın Reflektörü ışın enerjisini kaynaktan gönderir. Sağ tıklayarak hedefi değiştirebilirsiniz. +tile.beam_reflector.name=Işın Reflektörü +tile.cavern_vines.description=Cavernous Vines canlılar için tehlikelidir, bunu kırarak hediyenizi alın. +tile.cavern_vines.name=Cavernous Vines +tile.creeper_egg.description=Creeper Yumurtası Mars zindanlarında bulunur, spawnlanınca büyük bir patlama oluşur. +tile.creeper_egg.name=Creeper Yumurtası +tile.cryo_chamber.description=Kriyojenik Odası oyuncunun uyumasını sağlar, ufak bir can verir, fakat bekleme süresi vardır. +tile.dense_ice.name=Yoğun Buz +tile.electrolyzer.description=Suyu hidrojen (metan sentezinde de kullanılabilir) ve oksijene çevirir. +tile.gas_liquefier.description=Gaz Sıvılaştırıcı, metan gazını atmosferden veya teneke kutudan alarak iyi bir roket yakıtı yapın. +tile.hydrogen_pipe.description=Hidrojen borusu makinelere hidrojen taşır. +tile.hydrogen_pipe.name=Hidrojen Borusu +tile.launch_controller.description=Fırlatma Kontrollü kullanarak fırlatmaları özelleştirebilirsiniz, otomatik olarak başka yere roket gidebilir. +tile.mars.coppermars.name=Bakır Cevheri +tile.mars.deshmars.name=Desh Cevheri +tile.mars.ironmars.name=Demir Cevheri +tile.mars.marscobblestone.name=Mars Kırık Taşı +tile.mars.marsdeco.name=Desh Bloğu +tile.mars.marsdirt.name=Mars Yeraltı Kayası +tile.mars.marsdungeon.name=Mars Zindan Tuğlası +tile.mars.marsgrass.name=Mars Yüzey Kayası +tile.mars.marsstone.name=Mars Taşı +tile.mars.tinmars.name=Kalay Cevheri +tile.mars_stairs_cobblestone.name=Mars Kırık Taş Merdiveni +tile.mars_stairs_brick.name=Mars Zindan Tuğla Merdiveni +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Kriyojenik Odası +tile.mars_machine.2.name=Fırlatma Kontrollü +tile.mars_machine.4.name=Gaz Sıvılaştırıcı +tile.mars_machine.5.name=Metan Birleştirici +tile.mars_machine.6.name=Su Elektroliz Cihazı +tile.methane_synthesizer.description=Karbon ve hidrojenin ana kaynağı. Gaz sıvılaştırıcı için metan gazı sağlar. +tile.miner_base.description=Astro Maden Makinesinin üssü ve yerleşme yeridir. Bu üs aşırı büyüktür ... 2 x 2 x 2 küp yapın. +tile.miner_base.name=Astro Maden Makinesi Üssü +tile.slab_gc_half.mars_bricks_slab.name=Mars Zindan Tuğla Basamağı +tile.slab_gc_half.mars_slab.name=Mars Kırık Taş Basamağı +tile.slimeling_egg.blue.name=Mavi Slimeling Yumurtası +tile.slimeling_egg.description=Slimeling Yumurtasını elle kırarak bir evcil hayvana sahip olabilirsiniz. +tile.slimeling_egg.red.name=Kırmızı Slimeling Yumurtası +tile.slimeling_egg.yellow.name=Sarı Slimeling Yumurtası +tile.sludge.name=Bakteriyelli Çamur +tile.telepad_short.description=Kısa Menzilli Telepad oyuncuları ışınlamaya ve kısa mesafe (250 blok) gitmeye yarar. +tile.telepad_short.name=Kısa Menzilli Telepad +tile.terraformer.description=Terraformer gezegenlere yeşillik katar, çim, ağaç ve su ile basit bir alan oluşturur. +tile.treasure_t2.description=Tier 2 Hazine Sandığı Mars zindanın da bulunur. Açılması için sondaki Patron canavarı öldürün. +tile.treasure_t2.name=Tier 2 Hazine Sandığı +tile.treasure_t3.description=Tier 3 Hazine Sandığı şu anlık kullanılmıyor. +tile.treasure_t3.name=Tier 3 Hazine Sandığı +tile.walkway.walkway.description=Yürüme Bloğu dekoratif amaçlıdır, diğer bloklara bağlanarak uzay teması oluşur. +tile.walkway.walkway.name=Yürüme Bloğu +tile.walkway.walkway_pipe.description=Oksijen Borusu Yürüme Bloğu boruların altan geçerek, güvenli bir yürüyüş sağlar. +tile.walkway.walkway_pipe.name=Yürüme Bloğu +tile.walkway.walkway_wire.description=Alüminyum Tel Yürüme Bloğu kabloların altan geçerek, güvenli bir yürüyüş sağlar. +tile.walkway.walkway_wire.name=Yürüme Bloğu +tile.wall_gc.mars.name=Mars Kırık Taş Duvarı +tile.wall_gc.mars_bricks.name=Mars Zindan Tuğla Duvarı diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/uk_ua.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/uk_ua.lang new file mode 100644 index 00000000..5fc3c332 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/uk_ua.lang @@ -0,0 +1,405 @@ +checklist.craft_grapple_hook.key=Cтворити гак +checklist.equip_shield_controller.key=Встановити контролер щита +checklist.thermal_padding.key=Одягти тепловий захист +checklist.thermal_padding_t2.key=Одягти тепловий захист 2-го рівня +container.crashed_probe.name=Розбився зонд +container.entry_pod.name=Посадкова капсула +container.geothermal_generator.name=Геотермальний генератор +container.launchcontroller.name=Контролер запуску +container.mars_lander.name=Посадочні балони +container.solar_array_controller.name=Контролер сонячної батареї +container.short_range_telepad.name=Короткодистанціонний телепорт +container.slimeling_inventory.name=Інвентар слаймлінга +container.tile_terraformer.name=Терраформер +dimension.mars.name=Марс +entity.astro_miner.name=астрономічний шахтар +entity.creeper_boss.name=Еволюціонувавший кріпер-бос +entity.entry_pod.name=Посадкова капсула +entity.entry_pod_venus.name=Венеріанска посадкова капсула +entity.grapple_hook.name=Гак +entity.juicer.name=Маленький павук +entity.landing_balloons.name=Посадочні балони +entity.projectile_tnt.name=Снаряд TNT +entity.rocket_cargo.name=Вантажна ракета +entity.rocket_t2.name=Ракета 2-го рівня +entity.rocket_t3.name=Ракета 3-го рівня +entity.slimeling.name=Слаймлінг +entity.sludgeling.name=Сладжлінг +entity.small_asteroid.name=Маленький астероїд +entity.spider_queen.name=Королева павуків +entity.web_shot.name=Павутина +fluid.argon=Аргон +fluid.atmosphericgases=Атмосферні гази +fluid.bacterialsludge=Бактеріальний осад +fluid.carbondioxide=Вуглекислий газ +fluid.fuel=Паливо +fluid.helium=Гелій +fluid.hydrogen=Водень +fluid.liquidargon=Рідкий аргон +fluid.liquidmethane=Рідкий метан +fluid.liquidnitrogen=Рідкий азот +fluid.liquidoxygen=Рідкий кисень +fluid.methane=Метан +fluid.nitrogen=Азот +fluid.oil=Нафта +fluid.oxygen=Кисень +fluid.sulphuricacid=Сірчана кислота +gas.carbondioxide.name=Вуглекислий газ +gas.nitrogen.name=Азот +gas.oxygen.name=Кисень +gc.configgui.astro_miners_max=Максимальна кількість астрошахтерів на гравця +gc.configgui.dimension_id_asteroids=ID виміру: Астероїди +gc.configgui.dimension_id_mars=ID виміру: Марс +gc.configgui.dimension_id_venus=ID виміру: Венера +gc.configgui.disable_aluminum_gen_asteroids=Відключити генерацію алюмінієвої руди на астероїд +gc.configgui.disable_ambient_lightning=Відключити блискавки на Венері +gc.configgui.disable_copper_gen_mars=Відключити генерацію мідної руди на Марсі +gc.configgui.disable_desh_gen_mars=Відключити генерацію руди деш на Марсі +gc.configgui.disable_galacticraft_helium=Відключення реєстрації гелію +gc.configgui.disable_small_asteroids=Відключити спавн малих астероїдів (Астероїди) +gc.configgui.disable_ilmenite_gen_asteroids=Відключити генерацію ільменітової руди на астероїд +gc.configgui.disable_iron_gen_asteroids=Відключити генерацію залізної руди на астероїд +gc.configgui.disable_iron_gen_mars=Відключити генерацію залізної руди на Марсі +gc.configgui.disable_tin_gen_mars=Відключити генерацію олов'яної руди на Марсі +gc.configgui.disable_venus_aluminum_gen=Відключити генерацію алюмінієвої руди на Венері +gc.configgui.disable_venus_copper_gen=Відключити генерацію мідної руди на Венері +gc.configgui.disable_venus_galena_gen=Відключити генерацію галенітовой руди на Венері +gc.configgui.disable_venus_quartz_gen=Відключити генерацію кварцовою руди на Венері +gc.configgui.disable_venus_silicon_gen=Відключити генерацію кремнієвої руди на Венері +gc.configgui.disable_venus_solar_gen=Відключити генерацію сонячної руди на Венері +gc.configgui.disable_venus_tin_gen=Відключити генерацію олов'яної руди на Венері +gc.configgui.id_schematic_cargo_rocket=ID схеми: Вантажна ракета +gc.configgui.id_schematic_rocket_t2=ID схеми: Ракета 2-го рівня +gc.configgui.id_schematic_rocket_t3=ID схеми: Ракета 3-го рівня +gc.configgui.launch_controller_all_dims=Завантаження всіх вимірювань контролером запуску +gc.configgui.launch_controller_chunk_load=Завантаження чанкі контролером запуску +gc.configgui.planets.title=Конфігурація планет Galacticraft +gui.button.add_blacklist.name=Чорний список +gui.button.add_entity.name=Додати об'єкт +gui.button.add_player.name=Додати гравця +gui.button.add_whitelist.name=Білий список +gui.button.edit_blacklist.name=Редагувати чорний список +gui.button.edit_priority.name=Змінити пріоритет +gui.button.edit_whitelist.name=Редагувати білий список +gui.button.liquefy.name=Запуск +gui.button.liquefy_stop.name=Стоп +gui.button.never_fire_team.name=Ніколи не стріляти в команду космічної гонки +gui.button.recall.name=Відкликати +gui.button.remove_selected.name=Прибрати вбрання +gui.carbon_slot.desc.0=Місце для роздробленого вугілля +gui.cargorocket.status.launched.0=Запущена +gui.cargorocket.status.launched.1=в політ +gui.cargorocket.status.waiting.0=Очікування +gui.cargorocket.status.waiting.1=Запалювання +gui.choose_planet.desc.mars=Живемо #Кисень відсутня #Гравітація: 38% +gui.cryogenic.chat.cant_use=Я не можу використовувати її протягом %d секунд (-и) +gui.gas_input.desc.0=Спробуйте помістити сюди $каністру з метаном +gui.gas_input.desc.1=(Або як альтернатива, $атмосферне клапан) +gui.gas_tank.desc.0=Сховище газу +gui.gas_tank_compressed.desc.0=Сховище газу (Стисненого) +gui.hydrogen_input.desc.0=Сюди поміщається резервуар з воднем +gui.hydrogen_input.desc.1=або атмосферний клапан +gui.launch_controller.advanced=Додатково +gui.launch_controller.desc.0=Це унікальна частота $контролера запуску +gui.launch_controller.desc.1=Частота пункту призначення для ракети +gui.launch_controller.desc.2=Чи повиннна злітний майданчик $бути видалений при запуску +gui.launch_controller.desc.3=Коли ця умова виконується,$ракета запускається +gui.launch_controller.desc.4=Приховати частоту пункту $призначення від інших гравців +gui.launch_controller.owner=Власник +gui.liquid_output.desc.2=резервуар скрапленого газу +gui.liquid_tank.desc.0=Рідинний резервуар +gui.message.address.name=Адреса +gui.message.astro_miner.fail=У цій бази вже є астрошахтер! +gui.message.astro_miner1.fail=Область стикування заблокована: +gui.message.astro_miner1_a.fail=Шлях астрошахтера перегороджений: +gui.message.astro_miner1_b.fail=Захищена зона! +gui.message.astro_miner2.fail=Досягнуто ліміт астрошахтеров! +gui.message.astro_miner3.fail=Підстава астрошахтера було демонтовано! +gui.message.astro_miner4.fail=У астрошахтера скінчилася енергія і він не може повернутися на базу! +gui.message.astro_miner5.fail=Шлях астрошахтера до бази, здається, перегороджений! +gui.message.astro_miner6.fail=Астрошахтер закінчив видобуток і зупинився! +gui.message.astro_miner7.fail=Астрошахтеру нічого добувати на космічній станції! +gui.message.astro_miner8.fail=Другий астрошахтер був виявлений на тій же базі, тепер перший зупиниться. +gui.message.blacklist_mode.name=Режим чорного списку +gui.message.bubble_exp.name=Розширення міхура +gui.message.cargo_full.name=Вантаж завантажений +gui.message.cargo_unloaded.name=Вантаж розвантажений +gui.message.connected_solar_controller.name=%d додається (діапазон 16 блоків) +gui.message.dest_address.name=Адреса мети +gui.message.dest_frequency.name=Мета +gui.message.enable_grass.name=Включити траву +gui.message.enable_trees.name=Включити дерева +gui.message.enter_entity.name=Введіть ім'я об'єкта/id +gui.message.enter_player.name=Введіть ім'я гравця +gui.message.frequency.name=Частота +gui.message.fully_fueled.name=Повністю заправлений +gui.message.grapple.fail=Мені потрібно трохи ниток, якщо я хочу кинути цей гак! +gui.message.grass.name=Трава +gui.message.instant.name=Негайно +gui.message.invalid_address.name=Невірний унікальний адрес +gui.message.invalid_freq.name=Невірна частота +gui.message.invalid_target_address.name=Невірна цільова адреса +gui.message.launch_when.name=Запустити, коли: +gui.message.low_energy.name=Мало енергії +gui.message.low_energy_output.name=Малий вихід енергії +gui.message.no_bonemeal.name=Недостатньо кісткового борошна +gui.message.no_energy.name=Недостатньо енергії +gui.message.no_saplings.name=Недостатньо саджанців +gui.message.no_seeds.name=Недостатньо насіння +gui.message.no_valid_blocks.name=Немає доступних блоків в міхурі +gui.message.no_water.name=Недостатньо води +gui.message.not_enough.name=Недостатньо +gui.message.not_enough_energy.name=Недостатньо енергії! +gui.message.not_set.name=Не вказано +gui.message.one_min.name=1 хвилина +gui.message.player.name=Гравець +gui.message.priority_closest.name=Найближчий +gui.message.priority_health_high.name=Високий рівень здоров'я +gui.message.priority_health_low.name=Низький рівень здоров'я +gui.message.priority_low.name=Пріоритет (Найнижчий спочатку) +gui.message.receiving_active.name=Прийом розпочато +gui.message.redstone_sig.name=Сигнал червоного каменю +gui.message.remove_pad.name=Прибрати платформу при запуску +gui.message.sending_active.name=Відправка розпочато +gui.message.success.name=Успіх +gui.message.target_meteors.name=Мета - Метеори +gui.message.target_no_energy.name=У мети не вистачає енергії! +gui.message.telepad_not_found.name=Телепорт не знайден! +gui.message.telepad_too_far.name=Мета занадто далеко! (Макс .: %d) +gui.message.telepad_wrong_dim.name=Мета в іншому вимірі! +gui.message.telepad_target_disabled.name=Мета відключена +gui.message.ten_sec.name=10 секунд +gui.message.terraforming.name=Терраформірованіє +gui.message.thirty_sec.name=30 секунд +gui.message.trees.name=Дерева +gui.message.with_atmosphere0.name=На планеті з великою кількістю +gui.message.with_atmosphere1.name=в атмосфері +gui.message.zero_water.name=Немає води! +gui.methane_output.desc.2=Резервуар метану +gui.miner.docked=Пристикований +gui.miner.docking=Стиковка +gui.miner.mined=Видобуто +gui.miner.mining=Здобич +gui.miner.offline=Поза мережою +gui.miner.out_of_range=Поза зоною дії +gui.miner.returning=Повернення +gui.miner.stuck=Застряг на: +gui.miner.travelling=Переміщення +gui.slimeling.button.follow=Йди +gui.slimeling.button.sit=Сиди +gui.slimeling.chat.wrong_player=Це не мій слаймлінг ! +gui.slimeling.damage=Втрати +gui.slimeling.following=Слідує +gui.slimeling.food=Улюблена їжа +gui.slimeling.kills=Вбивств +gui.slimeling.name=Ім'я +gui.slimeling.owner=Власник +gui.slimeling.scale=Розмір +gui.slimeling.sitting=Сидить +gui.status.invalid_spout_1.name=Повинен бути поставлений на +gui.status.invalid_spout_2.name=Доступний сірчаний гейзер +gui.status.liquefying.name=Скраплення +gui.status.needs_carbon.name=Потрібне вугілля +gui.status.nogas.name=Немає газу +gui.status.processing.name=Синтез +gui.status.tankfull.name=Резервуар сповнений +gui.status.tanksfull.name=Резервуари повні +gui.telepad.desc.0=Це унікальна адреса$телепорту +gui.telepad.desc.1=Адреса іншого телепорту.$Сутності будуть відправлятися туди. +gui.terraformer.desc.0=Водний резервуар +gui.water_bucket_slot.desc=Покладіть відра з водою сюди +item.astro_miner.name=Астрономіческий шахтер +item.atmospheric_valve.name=Атмосферний клапан +item.atomic_battery.name=Атомна батарея +item.beam_core.name=Променеве ядро +item.bucket_sludge.name=Відро бактеріального осаду +item.bucket_sulphuric_acid.name=Відро сірчаної кислоти +item.canister.gas.name=Газ +item.canister.liquid_argon.full.name=Заповнена каністра рідкого аргону +item.canister.liquid_argon.name=Рідина +item.canister.liquid_argon.partial.name=Каністра рідкого аргону +item.canister.liquid_nitrogen.full.name=Заповнена каністра рідкого азоту +item.canister.liquid_nitrogen.name=Рідина +item.canister.liquid_nitrogen.partial.name=Каністра рідкого азоту +item.canister.lox.full.name=Заповнена каністра рідкого кисню +item.canister.lox.name=РК +item.canister.lox.partial.name=Каністра рідкого кисню +item.carbon_fragments.name=Роздроблене вугілля +item.compressed_desh.name=Стисла деш +item.compressed_titanium.name=Стиснутий титан +item.desh_axe.name=Сокира з деш +item.desh_boots.name=Черевики з деш +item.desh_chestplate.name=Кіраса з деш +item.desh_helmet.name=Шолом з деш +item.desh_hoe.name=Мотига з деш +item.desh_leggings.name=Поножі з деш +item.desh_pick.name=Кірка з деш +item.desh_pick_slime.description.name=Може добувати яйця кріпера +item.desh_pick_slime.name=Липка кірка з деш +item.desh_spade.name=Лопата з деш +item.desh_stick.name=Палка з деш +item.desh_sword.name=Меч з деш +item.dust_titanium.name=титанова пиль +item.empty_gas_canister.name=Порожня каністра для газу +item.engine_t2.name=Міцний ракетний двигун +item.fluid_manip.name=Маніпулятор рідини +item.grapple.name=Гак +item.heavy_nose_cone.name=Міцний головний обтічник +item.ingot_desh.name=Злиток деш +item.ingot_lead.name=Свинцевий злиток +item.ingot_titanium.name=Титановий злиток +item.key.t2.name=Ключ від підземелля 2-го рівня +item.key.t3.name=Ключ від підземелля 3-го рівня +item.methane_canister.name=Заповнена каністра метану +item.methane_canister_partial.name=Каністра метану +item.orion_drive.name=Привід Оріона +item.prelaunch_checklist.name=Передпольотна підготовка +item.radioisotope_core.name=Радіоізотопне ядро +item.raw_desh.name=Необроблена деш +item.reinforced_plate_t2.name=Надміцна пластина +item.reinforced_plate_t3.name=Надміцна пластина +item.rocket_fins_t2.name=Міцний ракетний стабілізатор +item.rocket_t2.cargo_rocket.name=Вантажна ракета +item.rocket_t2.t2Rocket.name=Ракета 2-го рівня +item.rocket_t3.t3Rocket.name=Ракета 3-го рівня +item.shard_iron.name=Залізний осколок +item.shard_titanium.name=Титановий осколок +item.shield_controller.description=Контролер щита захищає вашу броню від ВСІХ видів шкоди - в тому числі від атмосферної корозії +item.shield_controller.name=Контролер щита +item.slimeling_cargo.name=Сумка слаймлінга +item.solar_dust.name=Сонячний пил +item.solar_module_2.name=Панель сонячних батарей +item.strange_seed.name=Дивне насіння +item.thermal_boots.name=Теплоізолюючі черевики +item.thermal_boots_t2.name=Теплотривкі черевики +item.thermal_chestplate.name=Теплоізолююча кіраса +item.thermal_chestplate_t2.name=Теплотривка кіраса +item.thermal_cloth.name=Теплоізолююча тканина +item.thermal_fabric.name=Теплотривка тканЬ +item.thermal_helm.name=Теплоізолірующий шолом +item.thermal_helm_t2.name=Теплотривкий шолом +item.thermal_leggings.name=Теплоізолюючі поножи +item.thermal_leggings_t2.name=Теплотривкі поножи +item.thin_solar_wafer.name=Сонячна напівпровідникова пластина +item.tier2.desc=2-ий рівень +item.tier3.desc=3-й рівень +item.titanium_axe.name=Титанова сокира +item.titanium_boots.name=Титанові черевики +item.titanium_chestplate.name=Титанова кіраса +item.titanium_helmet.name=Титановий шолом +item.titanium_hoe.name=Титанова мотика +item.titanium_leggings.name=Титанові поножи +item.titanium_pickaxe.name=Титанова кірка +item.titanium_shovel.name=Титанова лопата +item.titanium_sword.name=Титановий меч +item.volcanic_pickaxe.description=Копає зону 3x3 блоку в залежності від того, в якому напрямку ви дивитесь +item.volcanic_pickaxe.name=Вулканічна кирка +planet.asteroids=Астероїди +planet.mars=Марс +schematic.astro_miner.name=Астрономіческий шахтер +schematic.cargo_rocket.name=Автоматична вантажна ракета +schematic.rocket_t3.name=Ракета 3-го рівня +tile.asteroids_block.asteroid_rock_0.name=Астероїдний камінь +tile.asteroids_block.asteroid_rock_1.name=Астероїдний камінь +tile.asteroids_block.asteroid_rock_2.name=Астероїдний камінь +tile.asteroids_block.ore_aluminum_asteroids.name=Алюмінієва руда +tile.asteroids_block.ore_ilmenite_asteroids.name=Ільменітова руда +tile.asteroids_block.ore_iron_asteroids.name=Залізна руда +tile.asteroids_block.asteroid_deco.name=Темний декоративний блок +tile.asteroids_block.titanium_block.name=Титановый блок +tile.beam_receiver.description=Променеві приймачі приєднуються до входу і виходу енергії механізму, щоб передавати енергію, використовуючи промені. +tile.beam_receiver.name=Променевий приймач енергії +tile.beam_reflector.description=Променеві відбивачі використовуються для перенаправлення енергетичних променів від джерела до місця призначення. ПКМ по відбивачу, щоб міняти цілі. +tile.beam_reflector.name=Променевий відбивач енергії +tile.cavern_vines.description=Печерні ліани небезпечні для живих істот тим, що вони обплутують їх і тягнуть вгору. +tile.cavern_vines.name=Печерні ліани +tile.crashed_probe.name=Розбився зонд +tile.creeper_egg.description=Яйця кріпера з'являються в скарбницях Марса, з них під час вибуху вилуплюється потайний хижак. +tile.creeper_egg.name=Яйце кріпера +tile.cryo_chamber.description=Кріогенні камери дозволять гравцеві спати вдень, відновлюючи тим самим невелику кількість здоров'я, але мають затримку у використанні. +tile.dense_ice.name=Щільний лід +tile.electrolyzer.description=Перетворює воду на водень (потрібен для синтезатора метану) і кисень. +tile.gas_liquefier.description=Зріджують гази з атмосфери або з каністри. Зріджений метан відмінно підходить в якості ракетного палива! +tile.geothermal_generator.description=Генерує енергію при розміщенні на сірчаний гейзер. Рівень виробленої енергії коливається. +tile.geothermal_generator.name=Геотермальний генератор +tile.hydrogen_pipe.description=Труба для водню буде передавати водень з внутрішнього резервуара одного механізму до іншого. +tile.hydrogen_pipe.name=Труба для водню +tile.launch_controller.description=Контролери запуску використовуються для настройки параметрів автоматичного запуску, включаючи умову і пункт призначення. +tile.laser_turret.name=Лазерна турель +tile.laser_turret.description=Може призначатися для метеорів, гравців і мобів +tile.mars.coppermars.name=Мідна руда +tile.mars.deshmars.name=Руда деш +tile.mars.ironmars.name=Залізна руда +tile.mars.marscobblestone.name=Марсіанський кругляк +tile.mars.marsdeco.name=Блок деш +tile.mars.marsdirt.name=Марсіанський реголіт +tile.mars.marsdungeon.name=Цегла марсіанської скарбниці +tile.mars.marsgrass.name=Марсіанський дрібнодисперсний реголіт +tile.mars.marsstone.name=Марсіанський камінь +tile.mars.tinmars.name=Олов'яна руда +tile.mars_machine.0.name=Терраформер +tile.mars_machine.1.name=Криогенна камера +tile.mars_machine.2.name=Контролер запуску +tile.mars_machine.4.name=Сжіжітель газу +tile.mars_machine.5.name=Синтезатор метану +tile.mars_machine.6.name=Електролізер води +tile.mars_stairs_cobblestone.name=Сходинки з марсіанського кругляка +tile.mars_stairs_brick.name=Сходинки з цегли марсіанської скарбниці +tile.methane_synthesizer.description=При наявності джерел водню і вуглецю він виробляє метан для подальшої обробки в сжіжітеле газу. +tile.miner_base.description=Підстава астрономічного шахтаря - це точка стикування для астрономічного шахтаря. Він великий ... спробуйте зробити куб 2x2x2 з блоків підстави. +tile.miner_base.name=Підстава астрономічного шахтаря +tile.miner_base_full.name=Підстава астрономічного шахтаря +tile.slab_gc_half.mars_bricks_slab.name=Плита з цегли марсіанської скарбниці +tile.slab_gc_half.mars_slab.name=Плита з марсіанського кругляка +tile.slab_gc_half.asteroids_slab.name=Темна декоративна плита +tile.slimeling_egg.blue.name=Синє яйце Слаймлінга +tile.slimeling_egg.description= +Яйця Слаймлінгов: якщо розбити їх голими руками, то скоро з них вилупиться вихованець. +tile.slimeling_egg.red.name=Червоне яйце Слаймлінга +tile.slimeling_egg.yellow.name=Жовте яйце Слаймлінга +tile.sludge.name=Бактеріальний осад +tile.solar_array_controller.name=ККонтролер сонячної батареї +tile.solar_array_controller.description=Підключіть модулі сонячної батареї до цього блоку для подачі живлення. Найбільш ефективний на космічних станціях. +tile.solar_array_module.name=Модуль сонячної батареї +tile.solar_array_module.description=Підключіть кілька з цих блоків до контролера сонячної батареї, щоб забезпечити подачу енергії. Найбільш ефективний на космічних станціях. +tile.spout.name=Сірчаний гейзер +tile.sulphuric_acid.name=Сірчана кислота +tile.telepad_short.description=Короткодістанціонний Телепорт використовується для переміщення гравців і інших живих істот на короткі дистанції (250 блоків), якщо вони приєднані до інших телепорт. +tile.telepad_short.name=Короткодістанціонний Телепорт +tile.terraformer.description=Терраформер використовуються для додавання зелені далеким планетам: додають траву, дерева та воду, якщо є необхідні матеріали. +tile.treasure_t2.description=Скрині зі скарбами 2-го рівня генеруються в скарбницях Марса. Їх можна відкрити після перемоги над фінальним босом. +tile.treasure_t2.name=Скриня зі скарбами 2-го рівня +tile.treasure_t3.description=Скрині зі скарбами 3-го рівня генеруються в скарбницях Венери. Їх можна відкрити після перемоги над фінальним босом. +tile.treasure_t3.name=Скриня зі скарбами 3-го рівня +tile.venus.dungeon_brick_venus_1.name=Цегла скарбниці Венери I +tile.venus.dungeon_brick_venus_2.name=Цегла скарбниці Венери II +tile.venus.venus_ore_aluminum.name=Алюмінієва руда +tile.venus.venus_ore_copper.name=Мідна руда +tile.venus.venus_ore_galena.name=Галенітова руда +tile.venus.venus_ore_quartz.name=Кварцова руда +tile.venus.venus_ore_silicon.name=Кремнієва руда +tile.venus.venus_ore_solar.name=Сонячна руда +tile.venus.venus_ore_tin.name=Олов'яна руда +tile.venus.venus_rock_0.name=М'який Венеріанський камінь +tile.venus.venus_rock_1.name=Твердий Венеріанський камінь +tile.venus.venus_rock_2.name=Вулканічний Венеріанський камінь +tile.venus.venus_rock_3.name=Пемза +tile.venus.lead_block.name=Свинцевий блок +tile.venus_rock_scorched.name=Випалений Венеріанський камінь +tile.walkway.walkway.description=Доріжки використовуються в декоративних цілях і для з'єднання блоків в космічному стилі. +tile.walkway.walkway.name=Доріжка +tile.walkway.walkway_pipe.description=Доріжки для рідинних труб використовуються для прокладання труб під повністю твердою поверхнею. +tile.walkway.walkway_pipe.name=доріжка +tile.walkway.walkway_wire.description=Доріжки для алюмінієвих проводів використовуються для прокладання проводів під повністю твердою поверхнею. +tile.walkway.walkway_wire.name=Доріжка +tile.wall_gc.mars.name=Стіна з марсіанського кругляка +tile.wall_gc.mars_bricks.name=Стіна з цегли марсіанської скарбниці +tile.web_torch.web_torch_0.name=Звисаюча павутина +tile.web_torch.web_torch_1.description=Факел з світящогося каменю +tile.web_torch.web_torch_1.name=Звисаюча павутина +achievement.mars=На Марс! +achievement.mars.desc=Надішліть ракету 2-го рівня на Марс! +achievement.asteroids=У Пояс астероїдів! +achievement.asteroids.desc=Надішліть ракету 3-го рівня в Пояс астероїдів! +achievement.venus=На Венеру! +achievement.venus.desc=Надішліть ракету 3-го рівня на Венеру! diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_cn.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_cn.lang new file mode 100644 index 00000000..b469163b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_cn.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=制作攀援钩爪 +checklist.equip_shield_controller.key=佩戴防护控制器 +checklist.thermal_padding.key=穿戴热防护服 +checklist.thermal_padding_t2.key=穿戴等温防护服 +container.crashed_probe.name=坠毁探测器 +container.entry_pod.name=登陆平台 +container.geothermal_generator.name=地热发电机 +container.launchcontroller.name=发射控制器 +container.mars_lander.name=着陆气球 +container.solar_array_controller.name=太阳能阵列 +container.short_range_telepad.name=短程传送台 +container.slimeling_inventory.name=黏滑兽背包 +container.tile_terraformer.name=环境改造机 +dimension.mars.name=火星 +entity.astro_miner.name=太空采矿机 +entity.creeper_boss.name=太空爬行者王 +entity.entry_pod.name=登陆平台 +entity.entry_pod_venus.name=金星登陆平台 +entity.grapple_hook.name=攀援钩爪 +entity.juicer.name=丝蛛 +entity.landing_balloons.name=着陆气球 +entity.projectile_tnt.name=TNT弹 +entity.rocket_cargo.name=货运火箭 +entity.rocket_t2.name=二阶火箭 +entity.rocket_t3.name=三阶火箭 +entity.slimeling.name=黏滑兽 +entity.sludgeling.name=菌泥虫 +entity.small_asteroid.name=小行星 +entity.spider_queen.name=蜘蛛女王 +entity.web_shot.name=蛛丝 +fluid.argon=氩气 +fluid.atmosphericgases=大气 +fluid.bacterialsludge=菌泥 +fluid.carbondioxide=二氧化碳 +fluid.fuel=燃油 +fluid.helium=氦气 +fluid.hydrogen=氢气 +fluid.liquidargon=液氩 +fluid.liquidmethane=液态甲烷 +fluid.liquidnitrogen=液氮 +fluid.liquidoxygen=液氧 +fluid.methane=甲烷 +fluid.nitrogen=氮气 +fluid.oil=石油 +fluid.oxygen=氧气 +fluid.sulphuricacid=硫酸 +gas.carbondioxide.name=二氧化碳 +gas.nitrogen.name=氮气 +gas.oxygen.name=氧气 +gc.configgui.astro_miners_max=玩家太空采矿机数量上限 +gc.configgui.dimension_id_asteroids=小行星带维度ID +gc.configgui.dimension_id_mars=火星维度ID +gc.configgui.dimension_id_venus=金星维度ID +gc.configgui.disable_aluminum_gen_asteroids=禁止小行星带铝矿生成 +gc.configgui.disable_ambient_lightning=关闭金星雷暴 +gc.configgui.disable_copper_gen_mars=禁止火星铜矿石生成 +gc.configgui.disable_desh_gen_mars=禁止火星戴斯矿石生成 +gc.configgui.disable_galacticraft_helium=禁用氦气 +gc.configgui.disable_small_asteroids=禁止小行星带陨星生成 +gc.configgui.disable_ilmenite_gen_asteroids=禁止小行星带钛铁矿石生成 +gc.configgui.disable_iron_gen_asteroids=禁止小行星带铁矿石生成 +gc.configgui.disable_iron_gen_mars=禁止火星铁矿石生成 +gc.configgui.disable_tin_gen_mars=禁止火星锡矿石生成 +gc.configgui.disable_venus_aluminum_gen=禁止金星铝矿石生成 +gc.configgui.disable_venus_copper_gen=禁止金星铜矿石生成 +gc.configgui.disable_venus_galena_gen=禁止金星方铅矿石生成 +gc.configgui.disable_venus_quartz_gen=禁止金星石英矿石生成 +gc.configgui.disable_venus_silicon_gen=禁止金星硅矿石生成 +gc.configgui.disable_venus_solar_gen=禁止金星太阳能矿石生成 +gc.configgui.disable_venus_tin_gen=禁止金星锡矿石生成 +gc.configgui.id_schematic_cargo_rocket=货运火箭设计图ID +gc.configgui.id_schematic_rocket_t2=二阶火箭设计图ID +gc.configgui.id_schematic_rocket_t3=三阶火箭设计图ID +gc.configgui.launch_controller_all_dims=发射控制器所有维度 +gc.configgui.launch_controller_chunk_load=发射控制器区块加载 +gc.configgui.planets.title=Galacticraft Planets配置文件 +gui.button.add_blacklist.name=黑名单 +gui.button.add_entity.name=添加实体 +gui.button.add_player.name=添加玩家 +gui.button.add_whitelist.name=白名单 +gui.button.edit_blacklist.name=编辑黑名单 +gui.button.edit_priority.name=调整优先级 +gui.button.edit_whitelist.name=编辑白名单 +gui.button.liquefy.name=进行 +gui.button.liquefy_stop.name=终止 +gui.button.never_fire_team.name=不向太空竞赛队友射击 +gui.button.recall.name=返回 +gui.button.remove_selected.name=取消选定 +gui.carbon_slot.desc.0=碳片槽 +gui.cargorocket.status.launched.0=已经 +gui.cargorocket.status.launched.1=发射 +gui.cargorocket.status.waiting.0=等待 +gui.cargorocket.status.waiting.1=点火 +gui.choose_planet.desc.mars=宜居#无氧气#重力:38% +gui.cryogenic.chat.cant_use=在%d秒内我不能再使用它 +gui.gas_input.desc.0=放置甲烷罐 +gui.gas_input.desc.1=(或者其它的什么,$例如气闸) +gui.gas_tank.desc.0=气体存储 +gui.gas_tank_compressed.desc.0=压缩气体存储 +gui.hydrogen_input.desc.0=需要氢气罐 +gui.hydrogen_input.desc.1=或者气闸 +gui.launch_controller.advanced=先进 +gui.launch_controller.desc.0=这是发射控制器$唯一频率 +gui.launch_controller.desc.1=火箭发射频率与目的地 +gui.launch_controller.desc.2=发射时是否拆除$火箭发射平台 +gui.launch_controller.desc.3=满足条件$时火箭发射 +gui.launch_controller.desc.4=对其他玩家隐藏发射频率$ +gui.launch_controller.owner=拥有者 +gui.liquid_output.desc.2=液化气储罐 +gui.liquid_tank.desc.0=流体储罐 +gui.message.address.name=坐标 +gui.message.astro_miner.fail=此基站已绑定太空采矿机! +gui.message.astro_miner1.fail=停泊区被占用: +gui.message.astro_miner1_a.fail=太空采矿机被以下方块阻挡: +gui.message.astro_miner1_b.fail=区域受保护! +gui.message.astro_miner2.fail=有多余的太空采矿机! +gui.message.astro_miner3.fail=太空采矿机基站被拆除! +gui.message.astro_miner4.fail=太空采矿机剩余能量不足以返航! +gui.message.astro_miner5.fail=太空采矿机返航路线受阻! +gui.message.astro_miner6.fail=太空采矿机完成此区域任务进入待机! +gui.message.astro_miner7.fail=空间站可没啥好挖的! +gui.message.astro_miner8.fail=在同一基站中出现新的太空采矿机,前一台将被封存. +gui.message.blacklist_mode.name=黑名单模式 +gui.message.bubble_exp.name=气泡扩大中 +gui.message.cargo_full.name=货舱满载 +gui.message.cargo_unloaded.name=货物未卸载 +gui.message.connected_solar_controller.name=连接%d个(最大范围16米远) +gui.message.dest_address.name=目标坐标 +gui.message.dest_frequency.name=目标频率 +gui.message.enable_grass.name=种草 +gui.message.enable_trees.name=植树 +gui.message.frequency.name=频率 +gui.message.enter_entity.name=输入实体名称/id +gui.message.enter_player.name=输入玩家名称 +gui.message.fully_fueled.name=满燃料 +gui.message.grapple.fail=我得为钩爪准备点线! +gui.message.grass.name=草 +gui.message.instant.name=立即 +gui.message.invalid_address.name=无效唯一坐标 +gui.message.invalid_freq.name=无效频率 +gui.message.invalid_target_address.name=无效目标坐标 +gui.message.launch_when.name=发射前提 +gui.message.low_energy.name=低能耗 +gui.message.low_energy_output.name=低输出功率 +gui.message.no_bonemeal.name=骨粉不足 +gui.message.no_energy.name=能量不足! +gui.message.no_saplings.name=树苗不足 +gui.message.no_seeds.name=种子不足 +gui.message.no_valid_blocks.name=范围内无有效方块 +gui.message.no_water.name=缺水 +gui.message.not_enough.name=缺少 +gui.message.not_enough_energy.name=能量不足! +gui.message.not_set.name=未设置 +gui.message.one_min.name=1分钟 +gui.message.player.name=玩家 +gui.message.priority_closest.name=最近目标 +gui.message.priority_health_high.name=最高生命值目标 +gui.message.priority_health_low.name=最低生命值目标 +gui.message.priority_low.name=优先级(最低者优先) +gui.message.receiving_active.name=接受激活 +gui.message.redstone_sig.name=红石信号 +gui.message.remove_pad.name=发射时拆除发射平台 +gui.message.sending_active.name=激活发送 +gui.message.success.name=成功 +gui.message.target_meteors.name=目标小行星 +gui.message.target_no_energy.name=目标能量不足! +gui.message.telepad_not_found.name=未找到传送台! +gui.message.telepad_too_far.name=目标距离过远! (上限%d) +gui.message.telepad_wrong_dim.name=目标维度有误! +gui.message.telepad_target_disabled.name=目标无效! +gui.message.ten_sec.name=10秒 +gui.message.terraforming.name=环境改造中 +gui.message.thirty_sec.name=30秒 +gui.message.trees.name=树 +gui.message.with_atmosphere0.name=星球的大气中 +gui.message.with_atmosphere1.name=含有大量的 +gui.message.zero_water.name=缺水! +gui.methane_output.desc.2=甲烷罐 +gui.miner.docked=已停泊 +gui.miner.docking=停泊中 +gui.miner.mined=采掘完毕 +gui.miner.mining=正在采掘 +gui.miner.offline=待机 +gui.miner.out_of_range=超出范围 +gui.miner.returning=返航中 +gui.miner.stuck=受阻: +gui.miner.travelling=运行中 +gui.slimeling.button.follow=跟随 +gui.slimeling.button.sit=坐 +gui.slimeling.chat.wrong_player=这不是我的黏滑兽! +gui.slimeling.damage=攻击伤害 +gui.slimeling.following=跟随模式 +gui.slimeling.food=最爱的食品 +gui.slimeling.kills=击杀 +gui.slimeling.name=名字 +gui.slimeling.owner=主人 +gui.slimeling.scale=比例 +gui.slimeling.sitting=坐着 +gui.status.invalid_spout_1.name=必须放置在 +gui.status.invalid_spout_2.name=活动的硫酸泉上 +gui.status.liquefying.name=液化中 +gui.status.needs_carbon.name=需要碳 +gui.status.nogas.name=无气体 +gui.status.processing.name=合成中 +gui.status.tankfull.name=储罐满 +gui.status.tanksfull.name=储罐满 +gui.telepad.desc.0=这是本传送台$唯一坐标 +gui.telepad.desc.1=另一传送台坐标.$实体将会被传送过去. +gui.terraformer.desc.0=水箱 +gui.water_bucket_slot.desc=放置水桶 +item.astro_miner.name=太空采矿机 +item.atmospheric_valve.name=气闸 +item.atomic_battery.name=原子能电池 +item.beam_core.name=光束核心 +item.bucket_sludge.name=菌泥桶 +item.bucket_sulphuric_acid.name=硫酸桶 +item.canister.gas.name=甲烷 #对甲烷存储状态的缩写 +item.canister.liquid_argon.full.name=液氩罐(满) +item.canister.liquid_argon.name=液氩 #对液态氩气存储状态的缩写 +item.canister.liquid_argon.partial.name=液氩罐 +item.canister.liquid_nitrogen.full.name=液氮罐(满) +item.canister.liquid_nitrogen.name=液氮 #对液态氮气存储状态的缩写 +item.canister.liquid_nitrogen.partial.name=液氮罐 +item.canister.lox.full.name=液氧罐(满) +item.canister.lox.name=液氧 #对液态氧气存储状态的缩写 +item.canister.lox.partial.name=液氧罐 +item.carbon_fragments.name=碳片 +item.compressed_desh.name=致密戴斯 +item.compressed_titanium.name=致密钛板 +item.desh_axe.name=戴斯斧 +item.desh_boots.name=戴斯战靴 +item.desh_chestplate.name=戴斯胸甲 +item.desh_helmet.name=戴斯头盔 +item.desh_hoe.name=戴斯锄 +item.desh_leggings.name=戴斯护腿 +item.desh_pick.name=戴斯镐 +item.desh_pick_slime.description.name=可以采集爬行者蛋 +item.desh_pick_slime.name=黏滑戴斯镐 +item.desh_spade.name=戴斯锹 +item.desh_stick.name=戴斯棒 +item.desh_sword.name=戴斯剑 +item.dust_titanium.name=钛粉 +item.empty_gas_canister.name=气罐(空) +item.engine_t2.name=重装火箭引擎 +item.fluid_manip.name=流体控制仪 +item.grapple.name=攀援钩爪 +item.heavy_nose_cone.name=重装鼻锥 +item.ingot_desh.name=戴斯锭 +item.ingot_lead.name=铅锭 +item.ingot_titanium.name=钛锭 +item.key.t2.name=二阶地牢钥匙 +item.key.t3.name=三阶地牢钥匙 +item.methane_canister.name=甲烷罐(满) +item.methane_canister_partial.name=甲烷罐 +item.orion_drive.name=离子推进器 +item.prelaunch_checklist.name=发射检查表 +item.radioisotope_core.name=放射能核心 +item.raw_desh.name=原生戴斯 +item.reinforced_plate_t2.name=二阶重装防护板 +item.reinforced_plate_t3.name=三阶重装防护板 +item.rocket_fins_t2.name=重装火箭尾翼 +item.rocket_t2.cargo_rocket.name=自动货运火箭 +item.rocket_t2.t2Rocket.name=二阶火箭 +item.rocket_t3.t3Rocket.name=三阶火箭 +item.shard_iron.name=铁矿片 +item.shard_titanium.name=钛矿片 +item.shield_controller.description=防护力场控制器能使护甲免遭气体腐蚀等任何破坏! +item.shield_controller.name=防护力场控制器 +item.slimeling_cargo.name=黏滑兽背包 +item.solar_dust.name=太阳能粉尘 +item.solar_module_2.name=阵列太阳能板 +item.strange_seed.name=奇异种子 +item.thermal_boots.name=热防护靴 +item.thermal_boots_t2.name=等温防护靴 +item.thermal_chestplate.name=热防护背心 +item.thermal_chestplate_t2.name=等温防护背心 +item.thermal_cloth.name=热防护布料 +item.thermal_fabric.name=等温防护织物 +item.thermal_helm.name=热防护帽 +item.thermal_helm_t2.name=等温防护帽 +item.thermal_leggings.name=热防护裤 +item.thermal_leggings_t2.name=等温防护裤 +item.thin_solar_wafer.name=阵列太阳能晶圆 +item.tier2.desc=二阶 +item.tier3.desc=三阶 +item.titanium_axe.name=钛斧 +item.titanium_boots.name=钛战靴 +item.titanium_chestplate.name=钛胸甲 +item.titanium_helmet.name=钛头盔 +item.titanium_hoe.name=钛锄 +item.titanium_leggings.name=钛护腿 +item.titanium_pickaxe.name=钛镐 +item.titanium_shovel.name=钛锹 +item.titanium_sword.name=钛剑 +item.volcanic_pickaxe.description=能够依据玩家所对的方向挖掘3×3范围的方块. +item.volcanic_pickaxe.name=火山破坏镐 +planet.asteroids=小行星带 +planet.mars=火星 +schematic.astro_miner.name=太空采矿机 +schematic.cargo_rocket.name=自动货运火箭 +schematic.rocket_t3.name=三阶火箭 +tile.asteroids_block.asteroid_rock_0.name=行星岩 +tile.asteroids_block.asteroid_rock_1.name=浅行星岩 +tile.asteroids_block.asteroid_rock_2.name=亮行星岩 +tile.asteroids_block.ore_aluminum_asteroids.name=铝矿石 +tile.asteroids_block.ore_ilmenite_asteroids.name=钛铁矿石 +tile.asteroids_block.ore_iron_asteroids.name=铁矿石 +tile.asteroids_block.asteroid_deco.name=暗行星岩 +tile.asteroids_block.titanium_block.name=钛块 +tile.beam_receiver.description=能量射束收发仪使用激光束为相连机器传输能量. +tile.beam_receiver.name=能量射束收发仪 +tile.beam_reflector.description=能量射束反射仪能折射能量光束.右击以在不同目标间循环切换. +tile.beam_reflector.name=能量射束反射仪 +tile.cavern_vines.description=岩穴藤蔓是危险的杀手,会卷住生物并拖向空中. +tile.cavern_vines.name=岩穴藤蔓 +tile.crashed_probe.name=坠毁探测器 +tile.creeper_egg.description=爬行者蛋会在火星地牢生成,引爆有惊喜. +tile.creeper_egg.name=爬行者蛋 +tile.cryo_chamber.description=白天玩家也能在冬眠舱中睡觉并回复少量生命,但需要时间冷却. +tile.dense_ice.name=坚冰 +tile.electrolyzer.description=将水电解成氧气和氢气(可合成甲烷). +tile.gas_liquefier.description=来自大气或容器的液化气体,液态甲烷是不错的火箭燃料! +tile.geothermal_generator.description=通过其下方的活动硫酸泉,以起伏不定的效率产生电力. +tile.geothermal_generator.name=地热发电机 +tile.hydrogen_pipe.description=氢气管道用于在不同的机器和储罐间输送氢气. +tile.hydrogen_pipe.name=氢气管道 +tile.launch_controller.description=发射控制器与火箭发射平台连接后,能够设置发射数据并自动发射火箭. +tile.laser_turret.name=激光塔 +tile.laser_turret.description=可以打击小行星、生物或玩家。 +tile.mars.coppermars.name=铜矿石 +tile.mars.deshmars.name=戴斯矿石 +tile.mars.ironmars.name=铁矿石 +tile.mars.marscobblestone.name=火星圆石 +tile.mars.marsdeco.name=戴斯块 +tile.mars.marsdirt.name=火星浅层岩 +tile.mars.marsdungeon.name=火星地牢砖 +tile.mars.marsgrass.name=火星表层岩 +tile.mars.marsstone.name=火星石头 +tile.mars.tinmars.name=锡矿石 +tile.mars_machine.0.name=环境改造机 +tile.mars_machine.1.name=冬眠舱 +tile.mars_machine.2.name=发射控制器 +tile.mars_machine.4.name=气体液化机 +tile.mars_machine.5.name=甲烷合成机 +tile.mars_machine.6.name=水电解机 +tile.mars_stairs_brick.name=火星地牢砖楼梯 +tile.mars_stairs_cobblestone.name=火星圆石楼梯 +tile.methane_synthesizer.description=利用氢气和碳制造甲烷,需要气体液化机进一步加工成品. +tile.miner_base.description=太空采矿机基站为绑定的太空采矿机提供有关的辅助工作.基站体积不小,需要用这些方块搭建边长为2的立方体. +tile.miner_base.name=太空采矿机基站 +tile.miner_base_full.name=太空采矿机基站 +tile.slab_gc_half.mars_bricks_slab.name=火星地牢砖台阶 +tile.slab_gc_half.mars_slab.name=火星圆石台阶 +tile.slab_gc_half.asteroids_slab.name=暗色行星岩台阶 +tile.slimeling_egg.blue.name=蓝色黏滑蛋 +tile.slimeling_egg.description=黏滑蛋,玩家空手打碎后就会立即孵出一只宠物黏滑兽. +tile.slimeling_egg.red.name=红色黏滑蛋 +tile.slimeling_egg.yellow.name=黄色黏滑蛋 +tile.sludge.name=菌泥 +tile.solar_array_controller.name=太阳能阵列控制器 +tile.solar_array_controller.description=将阵列太阳能单体模块连接到控制器上即可产生能量。在空间站效率更高,效果更好。 +tile.solar_array_module.name=阵列太阳能单体模块 +tile.solar_array_module.description=将一些阵列太阳能单体模块连接到控制器上即可产生能量。在空间站效率更高,效果更好。 +tile.spout.name=硫蒸汽泉 +tile.sulphuric_acid.name=硫酸 +tile.telepad_short.description=短程传送台可将玩家和生物传送到短程(250m)范围内与之连接的其它传送台处. +tile.telepad_short.name=短程传送台 +tile.terraformer.description=环境改造机在荒凉的星球表面改变环境,在有适合材料时种植植物,涵养水源. +tile.treasure_t2.description=二阶珍宝箱在火星地牢生成,打败最终boss获取钥匙以打开. +tile.treasure_t2.name=二阶珍宝箱 +tile.treasure_t3.description=三阶珍宝箱在金星地牢生成,打败最终boss获取钥匙以打开. +tile.treasure_t3.name=三阶珍宝箱 +tile.venus.dungeon_brick_venus_1.name=红金星地牢砖 +tile.venus.dungeon_brick_venus_2.name=橙金星地牢砖 +tile.venus.venus_ore_aluminum.name=铝矿石 +tile.venus.venus_ore_copper.name=铜矿石 +tile.venus.venus_ore_galena.name=方铅矿石 +tile.venus.venus_ore_quartz.name=石英矿石 +tile.venus.venus_ore_silicon.name=硅矿石 +tile.venus.venus_ore_solar.name=太阳能矿石 +tile.venus.venus_ore_tin.name=锡矿石 +tile.venus.venus_rock_0.name=软质金星岩 +tile.venus.venus_rock_1.name=硬质金星岩 +tile.venus.venus_rock_2.name=金星火山岩 +tile.venus.venus_rock_3.name=浮石 +tile.venus.lead_block.name=铅块 +tile.venus_rock_scorched.name=焦糊金星岩 +tile.walkway.walkway.description=通道是用于方块连接的太空风格建材,用于方块连接. +tile.walkway.walkway.name=通道 +tile.walkway.walkway_pipe.description=管道通道的可行走表面下装有流体管道. +tile.walkway.walkway_pipe.name=管道通道 +tile.walkway.walkway_wire.description=线缆通道的可行走表面下装有线缆. +tile.walkway.walkway_wire.name=线缆通道 +tile.wall_gc.mars.name=火星圆石墙 +tile.wall_gc.mars_bricks.name=火星地牢砖墙 +tile.web_torch.web_torch_0.name=悬垂蛛丝 +tile.web_torch.web_torch_1.description=萤石火把 +tile.web_torch.web_torch_1.name=萤石蛛丝 +achievement.mars=前往火星! +achievement.mars.desc=乘坐二阶火箭到达火星! +achievement.asteroids=小行星带的征途! +achievement.asteroids.desc=乘坐三阶火箭到达小行星带! +achievement.venus=金星探秘! +achievement.venus.desc=乘坐三阶火箭到达金星! diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_tw.lang b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_tw.lang new file mode 100644 index 00000000..92954c67 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_tw.lang @@ -0,0 +1,364 @@ +checklist.craft_grapple_hook.key=合成抓鉤 +checklist.equip_shield_controller.key=裝備護罩控制器 +checklist.thermal_padding.key=裝備熱力充能套裝 +checklist.thermal_padding_t2.key=裝備二級熱力充能套裝 +container.crashed_probe.name=墜毀的探測器 +container.entry_pod.name=太空艙 +container.geothermal_generator.name=地熱發電機 +container.launchcontroller.name=發射控制器 +container.mars_lander.name=著陸氣球 +container.short_range_telepad.name=短距離傳送臺 +container.slimeling_inventory.name=黏滑怪物品欄 +container.tile_terraformer.name=地形改造機 +dimension.mars.name=火星 +entity.astro_miner.name=阿斯抽挖掘機 +entity.creeper_boss.name=進化苦力怕王 +entity.entry_pod.name=太空艙 +entity.entry_pod_venus.name=金星太空艙 +entity.grapple_hook.name=抓鉤 +entity.juicer.name=榨汁機 +entity.landing_balloons.name=著陸氣球 +entity.projectile_tnt.name=發射的TNT +entity.rocket_cargo.name=貨運火箭 +entity.rocket_t2.name=二階火箭 +entity.rocket_t3.name=三階火箭 +entity.slimeling.name=黏滑怪 +entity.sludgeling.name=泥漿怪 +entity.small_asteroid.name=小行星 +entity.spider_queen.name=蜘蛛女王 +entity.web_shot.name=蛛網射擊 +fluid.argon=氬氣 +fluid.atmosphericgases=空氣 +fluid.bacterialsludge=菌泥 +fluid.carbondioxide=二氧化碳 +fluid.fuel=燃油 +fluid.helium=氦氣 +fluid.hydrogen=氫氣 +fluid.liquidargon=液態氬 +fluid.liquidmethane=液態甲烷 +fluid.liquidnitrogen=液態氮 +fluid.liquidoxygen=液態氧 +fluid.methane=甲烷 +fluid.nitrogen=氮氣 +fluid.oil=石油 +fluid.oxygen=氧氣 +fluid.sulphuricacid=硫酸 +gas.carbondioxide.name=二氧化碳 +gas.nitrogen.name=氮氣 +gas.oxygen.name=氧氣 +gc.configgui.astro_miners_max=每位玩家的最大數量的阿斯抽挖掘機 +gc.configgui.dimension_id_asteroids=小行星維度ID +gc.configgui.dimension_id_mars=火星維度ID +gc.configgui.dimension_id_venus=金星維度ID +gc.configgui.disable_aluminum_gen_asteroids=禁止鋁礦生成(小行星) +gc.configgui.disable_ambient_lightning=禁止打雷(金星) +gc.configgui.disable_copper_gen_mars=禁止銅礦生成(火星) +gc.configgui.disable_desh_gen_mars=禁止達斯礦生成(火星) +gc.configgui.disable_galacticraft_helium=禁止氦氣定位 +gc.configgui.disable_ilmenite_gen_asteroids=禁止鈦鐵礦生成(小行星) +gc.configgui.disable_iron_gen_asteroids=禁止鐵礦生成(小行星) +gc.configgui.disable_iron_gen_mars=禁止鐵礦生成(火星) +gc.configgui.disable_tin_gen_mars=禁止錫礦生成(火星) +gc.configgui.disable_venus_aluminum_gen=禁止鋁礦生成(金星) +gc.configgui.disable_venus_copper_gen=禁止銅礦生成(金星) +gc.configgui.disable_venus_galena_gen=禁止方鉛礦生成(金星) +gc.configgui.disable_venus_quartz_gen=禁止石英礦生成(金星) +gc.configgui.disable_venus_silicon_gen=禁止矽礦生成(金星) +gc.configgui.disable_venus_tin_gen=禁止錫礦生成(金星) +gc.configgui.id_schematic_cargo_rocket=自動貨運火箭設計圖ID +gc.configgui.id_schematic_rocket_t2=二階火箭設計圖ID +gc.configgui.id_schematic_rocket_t3=三階火箭設計圖ID +gc.configgui.launch_controller_all_dims=發射控制器所有維度 +gc.configgui.launch_controller_chunk_load=發射控制器區塊加載 +gc.configgui.planets.title=Galacticraft Planets配置 +gui.button.liquefy.name=進行 +gui.button.liquefy_stop.name=中止 +gui.button.recall.name=重新呼喚 +gui.carbon_slot.desc.0=碳片可以來這裡 +gui.cargorocket.status.launched.0=準備完畢 +gui.cargorocket.status.launched.1=發射完畢 +gui.cargorocket.status.waiting.0=正在等待 +gui.cargorocket.status.waiting.1=點火裝置 +gui.choose_planet.desc.mars=宜居#無氧氣#重力:38% +gui.cryogenic.chat.cant_use=我不能在%d秒內使用這個! +gui.gas_input.desc.0=嘗試把甲烷儲氣罐放置在這 +gui.gas_input.desc.1=(也許有另外的東西,$比如一個氣閘) +gui.gas_tank.desc.0=儲氣罐 +gui.gas_tank_compressed.desc.0=儲氣罐(已壓縮) +gui.hydrogen_input.desc.0=這里需要一個氫氣儲罐 +gui.hydrogen_input.desc.1=或者一個氣閘 +gui.launch_controller.advanced=高級 +gui.launch_controller.desc.0=這是發射控制器的$唯一頻率 +gui.launch_controller.desc.1=火箭發射頻率,火箭前往 +gui.launch_controller.desc.2=發射臺是否$在發射時移除 +gui.launch_controller.desc.3=當這個條件達到時,$火箭就會發射 +gui.launch_controller.desc.4=從其他玩家$隱藏目標頻率 +gui.launch_controller.owner=擁有者 +gui.liquid_output.desc.2=液化儲氣罐 +gui.liquid_tank.desc.0=液罐 +gui.message.address.name=坐標 +gui.message.astro_miner.fail=這個基座已經有一個阿斯抽挖掘機! +gui.message.astro_miner1.fail=對接區域被東西阻塞: +gui.message.astro_miner1_a.fail=阿斯抽挖掘機的路線被東西阻塞: +gui.message.astro_miner2.fail=那只有一個阿斯抽挖掘機,太多了! +gui.message.astro_miner3.fail=阿斯抽挖掘機已經被移除! +gui.message.astro_miner4.fail=阿斯抽挖掘機耗盡能量以及不能回到基座! +gui.message.astro_miner5.fail=阿斯抽挖掘機的路線進入它的基座,似乎是被阻塞! +gui.message.astro_miner6.fail=阿斯抽挖掘機已經完成挖掘工作,現在將會停止! +gui.message.astro_miner7.fail=空間站沒有東西可以讓阿斯抽挖掘機去挖掘! +gui.message.astro_miner8.fail=另一個阿斯抽挖掘機被偵測到在同一個基座,原先的現在將會凍結。 +gui.message.bubble_exp.name=氣泡擴大 +gui.message.cargo_full.name=貨物已滿 +gui.message.cargo_unloaded.name=貨物未卸載時 +gui.message.dest_address.name=目標坐標 +gui.message.dest_frequency.name=目標頻率 +gui.message.enable_grass.name=啟用種草 +gui.message.enable_trees.name=啟用植樹 +gui.message.frequency.name=頻率 +gui.message.fully_fueled.name=燃料已裝滿 +gui.message.grapple.fail=如果我想拋那個抓鉤我就需要一些線! +gui.message.grass.name=草 +gui.message.instant.name=立即 +gui.message.invalid_address.name=無效的唯一坐標 +gui.message.invalid_freq.name=無效頻率 +gui.message.invalid_target_address.name=無效的目標坐標 +gui.message.launch_when.name=發射當 +gui.message.low_energy.name=低電力 +gui.message.low_energy_output.name=低電力輸出 +gui.message.no_bonemeal.name=骨粉不足 +gui.message.no_energy.name=電力不足 +gui.message.no_saplings.name=樹苗不足 +gui.message.no_seeds.name=種子不足 +gui.message.no_valid_blocks.name=氣泡內無有效方塊 +gui.message.no_water.name=水量不足 +gui.message.not_enough.name=缺少 +gui.message.not_enough_energy.name=能量不足 +gui.message.not_set.name=未設置 +gui.message.one_min.name=1分鐘 +gui.message.receiving_active.name=啟動接受 +gui.message.redstone_sig.name=紅石信號 +gui.message.remove_pad.name=移除平板 +gui.message.sending_active.name=啟動發送 +gui.message.success.name=成功 +gui.message.target_no_energy.name=目標沒有足夠的能量 +gui.message.telepad_not_found.name=未找到目標! +gui.message.telepad_too_far.name=目標太遠!(最遠 %d) +gui.message.telepad_wrong_dim.name=目標正在錯誤的維度! +gui.message.ten_sec.name=10秒 +gui.message.terraforming.name=正在進行環境改造 +gui.message.thirty_sec.name=30秒 +gui.message.trees.name=樹 +gui.message.with_atmosphere0.name=一個星球上有很多 +gui.message.with_atmosphere1.name=在大氣中 +gui.message.zero_water.name=沒有水! +gui.methane_output.desc.2=沼氣池 +gui.miner.docked=已停靠 +gui.miner.docking=停靠中 +gui.miner.mined=挖掘完畢 +gui.miner.mining=挖掘中 +gui.miner.offline=離線 +gui.miner.out_of_range=超出範圍 +gui.miner.returning=返回中 +gui.miner.stuck=卡在: +gui.miner.travelling=運行中 +gui.slimeling.button.follow=跟隨 +gui.slimeling.button.sit=坐下 +gui.slimeling.chat.wrong_player=這不是我的黏滑怪! +gui.slimeling.damage=攻擊傷害 +gui.slimeling.following=跟隨中 +gui.slimeling.food=喜歡的食物 +gui.slimeling.kills=殺敵數 +gui.slimeling.name=名字 +gui.slimeling.owner=主人 +gui.slimeling.scale=尺寸 +gui.slimeling.sitting=坐着 +gui.status.invalid_spout_1.name=必須放在有效的 +gui.status.invalid_spout_2.name=硫磺噴口上 +gui.status.liquefying.name=液化中 +gui.status.needs_carbon.name=需要碳 +gui.status.nogas.name=沒有氣體 +gui.status.processing.name=合成中 +gui.status.tankfull.name=罐子滿了 +gui.status.tanksfull.name=罐子都滿了 +gui.telepad.desc.0=這是傳送臺的的$唯一坐標 +gui.telepad.desc.1=另一個傳送臺的坐標。$實體會被傳送到那里。 +gui.terraformer.desc.0=水箱 +gui.water_bucket_slot.desc=在這裡放置水桶 +item.astro_miner.name=阿斯抽挖掘者 +item.atmospheric_valve.name=氣閘 +item.atomic_battery.name=原子電池 +item.beam_core.name=光束核心 +item.bucket_sludge.name=菌泥桶 +item.bucket_sulphuric_acid.name=硫酸桶 +item.canister.gas.name=氣體 +item.canister.liquid_argon.full.name=裝滿的灌裝液態氬 +item.canister.liquid_argon.name=液態氬 +item.canister.liquid_argon.partial.name=灌裝液態氬 +item.canister.liquid_nitrogen.full.name=裝滿的灌裝液態氮 +item.canister.liquid_nitrogen.name=液態氮 +item.canister.liquid_nitrogen.partial.name=灌裝液態氮 +item.canister.lox.full.name=裝滿的罐裝液態氧 +item.canister.lox.name=液態氧 +item.canister.lox.partial.name=罐裝液態氧 +item.carbon_fragments.name=碳片 +item.compressed_desh.name=致密戴斯 +item.compressed_titanium.name=致密鈦 +item.desh_axe.name=戴斯斧 +item.desh_boots.name=戴斯靴子 +item.desh_chestplate.name=戴斯胸甲 +item.desh_helmet.name=戴斯頭盔 +item.desh_hoe.name=戴斯鋤 +item.desh_leggings.name=戴斯護腿 +item.desh_pick.name=戴斯鎬 +item.desh_pick_slime.description.name=可用於回收苦力怕蛋 +item.desh_pick_slime.name=黏黏的戴斯鎬 +item.desh_spade.name=戴斯鏟 +item.desh_stick.name=戴斯棒 +item.desh_sword.name=戴斯劍 +item.dust_titanium.name=鈦粉 +item.empty_gas_canister.name=空的儲氣罐 +item.engine_t2.name=重型火箭引擎 +item.fluid_manip.name=流體機械手 +item.grapple.name=吊鉤 +item.heavy_nose_cone.name=重型前錐體 +item.ingot_desh.name=戴斯錠 +item.ingot_lead.name=鉛錠 +item.ingot_titanium.name=鈦錠 +item.key.t2.name=二階地牢鑰匙 +item.key.t3.name=三階地牢鑰匙 +item.methane_canister.name=裝滿的甲烷儲氣罐 +item.methane_canister_partial.name=甲烷儲氣罐 +item.orion_drive.name=礦物離子驅動器 +item.prelaunch_checklist.name=發行前清單 +item.radioisotope_core.name=放射性同位素核心 +item.raw_desh.name=未精煉戴斯礦 +item.reinforced_plate_t2.name=重裝板 +item.reinforced_plate_t3.name=重型板 +item.rocket_fins_t2.name=重型火箭鰭 +item.rocket_t2.cargo_rocket.name=貨運火箭 +item.rocket_t2.t2Rocket.name=二階火箭 +item.rocket_t3.t3Rocket.name=三階火箭 +item.shard_iron.name=鐵碎片 +item.shard_titanium.name=鈦碎片 +item.shield_controller.description=護罩控制器保護裝甲免受各種形式的損害——包括大氣腐蝕! +item.shield_controller.name=護罩控制器 +item.slimeling_cargo.name=黏滑物品背包 +item.strange_seed.name=奇怪的種子 +item.thermal_boots.name=熱力充能靴子 +item.thermal_boots_t2.name=等溫靴子 +item.thermal_chestplate.name=熱力充能胸甲 +item.thermal_chestplate_t2.name=等溫胸甲 +item.thermal_cloth.name=熱力布料 +item.thermal_fabric.name=等溫布料 +item.thermal_helm.name=熱力充能頭盔 +item.thermal_helm_t2.name=等溫頭盔 +item.thermal_leggings.name=熱力充能護腿 +item.thermal_leggings_t2.name=等溫護腿 +item.tier2.desc=二階 +item.tier3.desc=三階 +item.titanium_axe.name=鈦斧 +item.titanium_boots.name=鈦製靴子 +item.titanium_chestplate.name=鈦製胸甲 +item.titanium_helmet.name=鈦製頭盔 +item.titanium_hoe.name=鈦鋤 +item.titanium_leggings.name=鈦製護腿 +item.titanium_pickaxe.name=鈦鎬 +item.titanium_shovel.name=鈦鏟 +item.titanium_sword.name=鈦劍 +item.volcanic_pickaxe.description=根據你面對的方向開採3x3區域 +item.volcanic_pickaxe.name=火山鎬 +planet.asteroids=小行星 +planet.mars=火星 +schematic.astro_miner.name=阿斯抽挖掘者 +schematic.cargo_rocket.name=自動貨運火箭 +schematic.rocket_t3.name=三階火箭 +tile.asteroids_block.asteroid_rock_0.name=行星巖 +tile.asteroids_block.asteroid_rock_1.name=行星巖 +tile.asteroids_block.asteroid_rock_2.name=行星巖 +tile.asteroids_block.ore_aluminum_asteroids.name=鋁礦 +tile.asteroids_block.ore_ilmenite_asteroids.name=鈦鐵礦 +tile.asteroids_block.ore_iron_asteroids.name=鐵礦 +tile.asteroids_block.asteroid_deco.name=暗色裝飾方塊 +tile.asteroids_block.titanium_block.name=鈦磚 +tile.beam_receiver.description=能量射束接收器用作鏈接機器的輸入和輸出,用射束傳送能量。 +tile.beam_receiver.name=能量射束接收器 +tile.beam_reflector.description=能量射束反射器用作從改變能量射束來源的方向至目標的方向。點擊滑鼠右鍵可以改變目標方向。 +tile.beam_reflector.name=能量射束反射器 +tile.cavern_vines.description=巖穴藤蔓對生物有危險,纏繞它們再將它們向上拖動。 +tile.cavern_vines.name=巖穴藤蔓 +tile.crashed_probe.name=墜毀的探測器 +tile.creeper_egg.description=苦力怕蛋會生成於火星地牢裡,爆炸時會生出一個鬼鬼祟祟的捕食者。 +tile.creeper_egg.name=苦力怕蛋 +tile.cryo_chamber.description=低溫倉允許玩家在日間睡覺,恢復少量生命值,但有個冷卻。 +tile.dense_ice.name=濃密的冰 +tile.electrolyzer.description=把水分解為氫氣(對甲烷合成器有用)和氧氣。 +tile.gas_liquefier.description=可以從大氣層或者罐液化氣體,液化甲烷做一個好的火箭燃料! +tile.geothermal_generator.description=當放置在有效的硫磺蒸汽噴口時,以振盪速率產生能量 +tile.geothermal_generator.name=地熱發電機 +tile.hydrogen_pipe.description=氫氣管道會輸送氫氣從一個機器內部氣體罐到另一個。 +tile.hydrogen_pipe.name=氫氣管道 +tile.launch_controller.description=發射控制器用作定制發射的行為,包括發射標準以及為主動發射的發射墊。 +tile.mars.coppermars.name=銅礦 +tile.mars.deshmars.name=戴斯礦 +tile.mars.ironmars.name=鐵礦 +tile.mars.marscobblestone.name=火星鵝卵石 +tile.mars.marsdeco.name=戴斯磚 +tile.mars.marsdirt.name=火星地底巖石 +tile.mars.marsdungeon.name=火星地牢磚 +tile.mars.marsgrass.name=火星地表巖石 +tile.mars.marsstone.name=火星石頭 +tile.mars.tinmars.name=錫礦 +tile.mars_machine.0.name=地形改造機 +tile.mars_machine.1.name=低溫倉 +tile.mars_machine.2.name=發射控制器 +tile.mars_machine.4.name=氣體液化器 +tile.mars_machine.5.name=甲烷合成器 +tile.mars_machine.6.name=水電解器 +tile.mars_stairs_brick.name=火星地牢磚階梯 +tile.mars_stairs_cobblestone.name=火星鵝卵石階梯 +tile.methane_synthesizer.description=隨著氫氣來源和碳來源,這製造甲烷在氣體液化器進一步處理。 +tile.miner_base.description=阿斯抽挖掘機的基座是其停靠點。這很大……試試做個2x2x2的空間。 +tile.miner_base.name=阿斯抽挖掘機基座 +tile.miner_base_full.name=阿斯抽挖掘機基座 +tile.slab_gc_half.mars_bricks_slab.name=火星地牢磚半磚 +tile.slab_gc_half.mars_slab.name=火星鵝卵石半磚 +tile.slab_gc_half.asteroids_slab.name=暗色裝飾半磚 +tile.slimeling_egg.blue.name=藍色黏滑怪蛋 +tile.slimeling_egg.description=黏滑怪蛋,當玩家空手打碎它時,會很快孵化成一個寵物。 +tile.slimeling_egg.red.name=紅色黏滑怪蛋 +tile.slimeling_egg.yellow.name=黃色黏滑怪蛋 +tile.sludge.name=菌泥 +tile.spout.name=蒸氣噴口 +tile.sulphuric_acid.name=硫酸 +tile.telepad_short.description=當短距離傳送臺與另一個傳送臺鏈接,可以傳送玩家和其他生物到一小段距離(250格方塊)。 +tile.telepad_short.name=短距離傳送臺 +tile.terraformer.description=地形改造機用作綠化遙遠的星球,增加草、樹和水當給予正確的材料。 +tile.treasure_t2.description=二階寶箱會生成於火星地牢裡。它們會在擊敗最終Boss後解鎖 +tile.treasure_t2.name=二階寶箱 +tile.treasure_t3.description=三階寶箱會生成於金星地牢裡。它們會在擊敗最終Boss後解鎖 +tile.treasure_t3.name=三階寶箱 +tile.venus.dungeon_brick_venus_1.name=金星地牢磚I +tile.venus.dungeon_brick_venus_2.name=金星地牢磚II +tile.venus.venus_ore_aluminum.name=鋁礦 +tile.venus.venus_ore_copper.name=銅礦 +tile.venus.venus_ore_galena.name=方鉛礦 +tile.venus.venus_ore_quartz.name=石英礦 +tile.venus.venus_ore_silicon.name=矽礦 +tile.venus.venus_ore_tin.name=錫礦 +tile.venus.venus_rock_0.name=金星軟石頭 +tile.venus.venus_rock_1.name=金星硬石頭 +tile.venus.venus_rock_2.name=金星火山岩 +tile.venus.venus_rock_3.name=浮石 +tile.venus.lead_block.name=鉛磚 +tile.venus_rock_scorched.name=焦燒金星石頭 +tile.walkway.walkway.description=通道是裝飾用途,用來鏈接方塊而維護一個空間主題。 +tile.walkway.walkway.name=通道 +tile.walkway.walkway_pipe.description=氧氣通道用於在完全實心的可行走表面下方運行通道。 +tile.walkway.walkway_pipe.name=通道 +tile.walkway.walkway_wire.description=鋁線通道用於在完全實心的可行走表面下方運行電線。 +tile.walkway.walkway_wire.name=通道 +tile.wall_gc.mars.name=火星鵝卵石牆 +tile.wall_gc.mars_bricks.name=火星地牢磚牆 +tile.web_torch.web_torch_0.name=蛛網線 +tile.web_torch.web_torch_1.description=螢石火把 +tile.web_torch.web_torch_1.name=蛛網線 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner.obj new file mode 100644 index 00000000..125dd7d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner.obj @@ -0,0 +1,1829 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:08:39 + +mtllib astroMiner.mtl + +# +# object Hoverpad_Heavy_Left +# + +v -10.3242 -15.0898 -1.9011 +v -13.6856 -10.3617 -3.4329 +v -11.1974 -10.3617 -8.8927 +v -7.8360 -15.0898 -7.3608 +v -8.8901 -13.8585 -1.2475 +v -12.2515 -9.1304 -2.7794 +v -9.7633 -9.1304 -8.2391 +v -6.4019 -13.8585 -6.7073 +# 8 vertices + +vn -0.7171 -0.6157 -0.3268 +vn -0.4147 0.0000 0.9100 +vn -0.5602 0.7880 -0.2553 +vn 0.4147 -0.0000 -0.9100 +vn 0.5602 -0.7880 0.2553 +# 5 vertex normals + +vt 0.5313 0.4297 0.5156 +vt 0.5781 0.4297 0.5156 +vt 0.5781 0.5234 0.5156 +vt 0.5313 0.5234 0.5156 +vt 0.5156 0.5234 0.4531 +vt 0.5156 0.4297 0.4531 +vt 0.5313 0.4297 0.4531 +vt 0.5313 0.5234 0.4531 +vt 0.5156 0.5234 0.5469 +vt 0.5156 0.4297 0.5469 +vt 0.5313 0.4297 0.5469 +vt 0.5313 0.5234 0.5469 +# 12 texture coords + +g Hoverpad_Heavy_Left +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +s 2 +f 5/5/2 6/6/2 2/7/2 1/8/2 +s 4 +f 6/9/3 7/10/3 3/11/3 2/12/3 +s 2 +f 7/9/4 8/10/4 4/11/4 3/12/4 +s 4 +f 8/5/5 5/6/5 1/7/5 4/8/5 +# 5 polygons + +# +# object Hoverpad_Heavy___Glow001 +# + +v -7.7071 -15.7916 -7.8516 +v -10.6100 -15.7916 -1.4818 +v -14.5316 -10.2755 -3.2690 +v -11.6287 -10.2755 -9.6387 +v -5.9145 -14.2525 -7.0346 +v -8.8173 -14.2525 -0.6649 +v -12.7389 -8.7364 -2.4520 +v -9.8361 -8.7364 -8.8218 +# 8 vertices + +vn -0.7171 -0.6157 -0.3268 +vn 0.5602 -0.7880 0.2553 +vn -0.4147 -0.0000 0.9100 +vn -0.5602 0.7880 -0.2553 +vn 0.4147 0.0000 -0.9100 +# 5 vertex normals + +vt 0.5352 0.3047 0.5195 +vt 0.5898 0.3047 0.5195 +vt 0.5898 0.4141 0.5195 +vt 0.5352 0.4141 0.5195 +vt 0.5156 0.4141 0.4453 +vt 0.5156 0.3047 0.4453 +vt 0.5352 0.3047 0.4453 +vt 0.5352 0.4141 0.4453 +vt 0.5156 0.4141 0.5547 +vt 0.5156 0.3047 0.5547 +vt 0.5352 0.3047 0.5547 +vt 0.5352 0.4141 0.5547 +# 12 texture coords + +g Hoverpad_Heavy___Glow001 +usemtl Material__2 +s 1 +f 9/13/6 10/14/6 11/15/6 12/16/6 +s 2 +f 13/17/7 14/18/7 10/19/7 9/20/7 +s 4 +f 14/21/8 15/22/8 11/23/8 10/24/8 +s 2 +f 15/21/9 16/22/9 12/23/9 11/24/9 +s 4 +f 16/17/10 13/18/10 9/19/10 12/20/10 +# 5 polygons + +# +# object Hoverpad_Heavy_Right +# + +v 13.6798 -10.3468 -3.4303 +v 10.3185 -15.0749 -1.8985 +v 7.8303 -15.0749 -7.3582 +v 11.1917 -10.3468 -8.8901 +v 12.2457 -9.1155 -2.7768 +v 8.8844 -13.8435 -1.2449 +v 6.3962 -13.8435 -6.7047 +v 9.7576 -9.1155 -8.2365 +# 8 vertices + +vn 0.7171 -0.6157 -0.3268 +vn 0.4147 0.0000 0.9100 +vn -0.5602 -0.7880 0.2553 +vn -0.4147 -0.0000 -0.9100 +vn 0.5602 0.7880 -0.2553 +# 5 vertex normals + +vt 0.5313 0.4297 0.5156 +vt 0.5781 0.4297 0.5156 +vt 0.5781 0.5234 0.5156 +vt 0.5313 0.5234 0.5156 +vt 0.5156 0.5234 0.4531 +vt 0.5156 0.4297 0.4531 +vt 0.5313 0.4297 0.4531 +vt 0.5313 0.5234 0.4531 +vt 0.5156 0.5234 0.5469 +vt 0.5156 0.4297 0.5469 +vt 0.5313 0.4297 0.5469 +vt 0.5313 0.5234 0.5469 +# 12 texture coords + +g Hoverpad_Heavy_Right +usemtl 05___Default +s 1 +f 17/25/11 18/26/11 19/27/11 20/28/11 +s 2 +f 21/29/12 22/30/12 18/31/12 17/32/12 +s 4 +f 22/33/13 23/34/13 19/35/13 18/36/13 +s 2 +f 23/33/14 24/34/14 20/35/14 19/36/14 +s 4 +f 24/29/15 21/30/15 17/31/15 20/32/15 +# 5 polygons + +# +# object Hoverpad_Heavy___Glow002 +# + +v 11.6230 -10.2606 -9.6361 +v 14.5258 -10.2606 -3.2664 +v 10.6042 -15.7767 -1.4792 +v 7.7014 -15.7767 -7.8490 +v 9.8303 -8.7215 -8.8192 +v 12.7332 -8.7215 -2.4494 +v 8.8116 -14.2375 -0.6623 +v 5.9087 -14.2375 -7.0320 +# 8 vertices + +vn 0.7171 -0.6157 -0.3268 +vn 0.5602 0.7880 -0.2553 +vn 0.4147 -0.0000 0.9100 +vn -0.5602 -0.7880 0.2553 +vn -0.4147 0.0000 -0.9100 +# 5 vertex normals + +vt 0.5352 0.3047 0.5195 +vt 0.5898 0.3047 0.5195 +vt 0.5898 0.4141 0.5195 +vt 0.5352 0.4141 0.5195 +vt 0.5156 0.4141 0.4453 +vt 0.5156 0.3047 0.4453 +vt 0.5352 0.3047 0.4453 +vt 0.5352 0.4141 0.4453 +vt 0.5156 0.4141 0.5547 +vt 0.5156 0.3047 0.5547 +vt 0.5352 0.3047 0.5547 +vt 0.5352 0.4141 0.5547 +# 12 texture coords + +g Hoverpad_Heavy___Glow002 +usemtl Material__2 +s 1 +f 25/37/16 26/38/16 27/39/16 28/40/16 +s 2 +f 29/41/17 30/42/17 26/43/17 25/44/17 +s 4 +f 30/45/18 31/46/18 27/47/18 26/48/18 +s 2 +f 31/45/19 32/46/19 28/47/19 27/48/19 +s 4 +f 32/41/20 29/42/20 25/43/20 28/44/20 +# 5 polygons + +# +# object Hoverpad_Heavy_Rear +# + +v -3.0000 -11.1654 14.8987 +v 3.0000 -11.1654 14.8987 +v 3.0000 -8.3761 20.2109 +v -3.0000 -8.3761 20.2109 +v -3.0000 -9.3947 13.9689 +v 3.0000 -9.3947 13.9689 +v 3.0000 -6.6053 19.2811 +v -3.0000 -6.6053 19.2811 +# 8 vertices + +vn -0.0000 -0.8854 0.4649 +vn -0.0000 -0.4649 -0.8854 +vn 1.0000 -0.0000 -0.0000 +vn 0.0000 0.4649 0.8854 +vn -1.0000 0.0000 0.0000 +# 5 vertex normals + +vt 0.5313 0.4297 0.5156 +vt 0.5781 0.4297 0.5156 +vt 0.5781 0.5234 0.5156 +vt 0.5313 0.5234 0.5156 +vt 0.5156 0.5234 0.4531 +vt 0.5156 0.4297 0.4531 +vt 0.5313 0.4297 0.4531 +vt 0.5313 0.5234 0.4531 +vt 0.5156 0.5234 0.5469 +vt 0.5156 0.4297 0.5469 +vt 0.5313 0.4297 0.5469 +vt 0.5313 0.5234 0.5469 +# 12 texture coords + +g Hoverpad_Heavy_Rear +usemtl 05___Default +s 1 +f 33/49/21 34/50/21 35/51/21 36/52/21 +s 2 +f 37/53/22 38/54/22 34/55/22 33/56/22 +s 4 +f 38/57/23 39/58/23 35/59/23 34/60/23 +s 2 +f 39/57/24 40/58/24 36/59/24 35/60/24 +s 4 +f 40/53/25 37/54/25 33/55/25 36/56/25 +# 5 polygons + +# +# object Hoverpad_Heavy___Glow003 +# + +v -3.5000 -11.8405 14.6884 +v 3.5000 -11.8405 14.6884 +v 3.5000 -8.5863 20.8860 +v -3.5000 -8.5863 20.8860 +v -3.5000 -9.6271 13.5262 +v 3.5000 -9.6271 13.5262 +v 3.5000 -6.3729 19.7238 +v -3.5000 -6.3729 19.7238 +# 8 vertices + +vn -0.0000 -0.8854 0.4649 +vn -0.0000 -0.4649 -0.8854 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 0.4649 0.8854 +vn -1.0000 0.0000 -0.0000 +# 5 vertex normals + +vt 0.5352 0.3047 0.5195 +vt 0.5898 0.3047 0.5195 +vt 0.5898 0.4141 0.5195 +vt 0.5352 0.4141 0.5195 +vt 0.5156 0.4141 0.4453 +vt 0.5156 0.3047 0.4453 +vt 0.5352 0.3047 0.4453 +vt 0.5352 0.4141 0.4453 +vt 0.5156 0.4141 0.5547 +vt 0.5156 0.3047 0.5547 +vt 0.5352 0.3047 0.5547 +vt 0.5352 0.4141 0.5547 +# 12 texture coords + +g Hoverpad_Heavy___Glow003 +usemtl Material__2 +s 1 +f 41/61/26 42/62/26 43/63/26 44/64/26 +s 2 +f 45/65/27 46/66/27 42/67/27 41/68/27 +s 4 +f 46/69/28 47/70/28 43/71/28 42/72/28 +s 2 +f 47/69/29 48/70/29 44/71/29 43/72/29 +s 4 +f 48/65/30 45/66/30 41/67/30 44/68/30 +# 5 polygons + +# +# object Hoverpad_Front_Left_Bottom +# + +v -7.5858 -10.8284 -15.0392 +v -6.5858 -9.4142 -14.0392 +v -9.4142 -9.4142 -11.2108 +v -10.4142 -10.8284 -12.2108 +v -9.5858 -8.0000 -17.0392 +v -12.4142 -8.0000 -14.2108 +v -11.4142 -6.5858 -13.2108 +v -8.5858 -6.5858 -16.0392 +# 8 vertices + +vn 0.5000 -0.7071 0.5000 +vn -0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 -0.5000 +vn -0.7071 -0.0000 0.7071 +vn 0.5000 0.7071 0.5000 +vn 0.7071 0.0000 -0.7071 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Front_Left_Bottom +usemtl 05___Default +s 1 +f 49/73/31 50/74/31 51/75/31 52/76/31 +f 53/77/32 54/78/32 55/79/32 56/80/32 +s 2 +f 49/81/33 52/82/33 54/83/33 53/84/33 +s 4 +f 52/78/34 51/79/34 55/80/34 54/77/34 +s 2 +f 51/85/35 50/86/35 56/87/35 55/88/35 +s 4 +f 50/75/36 49/76/36 53/73/36 56/74/36 +# 6 polygons + +# +# object Hoverpad_Front_Left_Bottom_Glow +# + +v -7.2322 -11.5355 -15.3928 +v -5.9822 -9.7678 -14.1428 +v -9.5178 -9.7678 -10.6072 +v -10.7678 -11.5355 -11.8572 +v -9.7322 -8.0000 -17.8928 +v -13.2678 -8.0000 -14.3572 +v -12.0178 -6.2322 -13.1072 +v -8.4822 -6.2322 -16.6428 +# 8 vertices + +vn 0.5000 -0.7071 0.5000 +vn -0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 -0.5000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Front_Left_Bottom_Glow +usemtl Material__2 +s 1 +f 57/89/37 58/90/37 59/91/37 60/92/37 +f 61/93/38 62/94/38 63/95/38 64/96/38 +s 2 +f 57/97/39 60/98/39 62/99/39 61/100/39 +s 4 +f 60/93/40 59/96/40 63/95/40 62/94/40 +f 58/91/41 57/92/41 61/89/41 64/90/41 +# 5 polygons + +# +# object Hoverpad_Front_Right_Bottom_Glow +# + +v 9.7322 -8.0000 -17.8928 +v 8.4822 -6.2322 -16.6428 +v 12.0178 -6.2322 -13.1072 +v 13.2678 -8.0000 -14.3572 +v 7.2322 -11.5355 -15.3928 +v 10.7678 -11.5355 -11.8572 +v 9.5178 -9.7678 -10.6072 +v 5.9822 -9.7678 -14.1428 +# 8 vertices + +vn 0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 0.5000 +vn 0.5000 -0.7071 -0.5000 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Front_Right_Bottom_Glow +usemtl Material__2 +s 1 +f 65/101/42 66/102/42 67/103/42 68/104/42 +f 69/105/43 70/106/43 71/107/43 72/108/43 +s 2 +f 65/109/44 68/110/44 70/111/44 69/112/44 +s 4 +f 68/105/45 67/108/45 71/107/45 70/106/45 +f 66/103/46 65/104/46 69/101/46 72/102/46 +# 5 polygons + +# +# object Hoverpad_Front_Right_Bottom +# + +v 9.5858 -8.0000 -17.0392 +v 8.5858 -6.5858 -16.0392 +v 11.4142 -6.5858 -13.2108 +v 12.4142 -8.0000 -14.2108 +v 7.5858 -10.8284 -15.0392 +v 10.4142 -10.8284 -12.2108 +v 9.4142 -9.4142 -11.2108 +v 6.5858 -9.4142 -14.0392 +# 8 vertices + +vn 0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 0.5000 +vn 0.5000 -0.7071 -0.5000 +vn 0.7071 -0.0000 0.7071 +vn -0.5000 0.7071 0.5000 +vn -0.7071 0.0000 -0.7071 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Front_Right_Bottom +usemtl 05___Default +s 1 +f 73/113/47 74/114/47 75/115/47 76/116/47 +f 77/117/48 78/118/48 79/119/48 80/120/48 +s 2 +f 73/121/49 76/122/49 78/123/49 77/124/49 +s 4 +f 76/118/50 75/119/50 79/120/50 78/117/50 +s 2 +f 75/125/51 74/126/51 80/127/51 79/128/51 +s 4 +f 74/115/52 73/116/52 77/113/52 80/114/52 +# 6 polygons + +# +# object Hoverpad_Front_Left_Top_Glow +# + +v -8.2322 9.5355 -15.3928 +v -6.9822 7.7678 -14.1428 +v -9.4822 4.2322 -16.6428 +v -10.7322 6.0000 -17.8928 +v -11.7678 9.5355 -11.8572 +v -14.2678 6.0000 -14.3572 +v -13.0178 4.2322 -13.1072 +v -10.5178 7.7678 -10.6072 +# 8 vertices + +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 -0.5000 +vn 0.5000 0.7071 0.5000 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Front_Left_Top_Glow +usemtl Material__2 +s 1 +f 81/129/53 82/130/53 83/131/53 84/132/53 +f 85/133/54 86/134/54 87/135/54 88/136/54 +s 2 +f 81/137/55 84/138/55 86/139/55 85/140/55 +s 4 +f 84/133/56 83/136/56 87/135/56 86/134/56 +f 82/131/57 81/132/57 85/129/57 88/130/57 +# 5 polygons + +# +# object Hoverpad_Front_Left_Bottom +# + +v -8.5858 8.8284 -15.0392 +v -7.5858 7.4142 -14.0392 +v -9.5858 4.5858 -16.0392 +v -10.5858 6.0000 -17.0392 +v -11.4142 8.8284 -12.2108 +v -13.4142 6.0000 -14.2108 +v -12.4142 4.5858 -13.2108 +v -10.4142 7.4142 -11.2108 +# 8 vertices + +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 -0.5000 +vn 0.5000 -0.7071 0.5000 +vn 0.5000 0.7071 0.5000 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Front_Left_Bottom +usemtl 05___Default +s 1 +f 89/141/58 90/142/58 91/143/58 92/144/58 +f 93/145/59 94/146/59 95/147/59 96/148/59 +s 2 +f 89/149/60 92/150/60 94/151/60 93/152/60 +s 4 +f 92/146/61 91/147/61 95/148/61 94/145/61 +s 2 +f 91/153/62 90/154/62 96/155/62 95/156/62 +s 4 +f 90/143/63 89/144/63 93/141/63 96/142/63 +# 6 polygons + +# +# object Hoverpad_Front_Right_Top_Glow +# + +v 11.7678 9.5355 -11.8572 +v 10.5178 7.7678 -10.6072 +v 13.0178 4.2322 -13.1072 +v 14.2678 6.0000 -14.3572 +v 8.2322 9.5355 -15.3928 +v 10.7322 6.0000 -17.8928 +v 9.4822 4.2322 -16.6428 +v 6.9822 7.7678 -14.1428 +# 8 vertices + +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.5000 0.7071 -0.5000 +vn 0.5000 -0.7071 -0.5000 +vn -0.5000 0.7071 0.5000 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Front_Right_Top_Glow +usemtl Material__2 +s 1 +f 97/157/64 98/158/64 99/159/64 100/160/64 +f 101/161/65 102/162/65 103/163/65 104/164/65 +s 2 +f 97/165/66 100/166/66 102/167/66 101/168/66 +s 4 +f 100/161/67 99/164/67 103/163/67 102/162/67 +f 98/159/68 97/160/68 101/157/68 104/158/68 +# 5 polygons + +# +# object Hoverpad_Front_Right_Top +# + +v 11.4142 8.8284 -12.2108 +v 10.4142 7.4142 -11.2108 +v 12.4142 4.5858 -13.2108 +v 13.4142 6.0000 -14.2108 +v 8.5858 8.8284 -15.0392 +v 10.5858 6.0000 -17.0392 +v 9.5858 4.5858 -16.0392 +v 7.5858 7.4142 -14.0392 +# 8 vertices + +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.5000 0.7071 -0.5000 +vn 0.5000 -0.7071 -0.5000 +vn -0.5000 -0.7071 0.5000 +vn -0.5000 0.7071 0.5000 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Front_Right_Top +usemtl 05___Default +s 1 +f 105/169/69 106/170/69 107/171/69 108/172/69 +f 109/173/70 110/174/70 111/175/70 112/176/70 +s 2 +f 105/177/71 108/178/71 110/179/71 109/180/71 +s 4 +f 108/174/72 107/175/72 111/176/72 110/173/72 +s 2 +f 107/181/73 106/182/73 112/183/73 111/184/73 +s 4 +f 106/171/74 105/172/74 109/169/74 112/170/74 +# 6 polygons + +# +# object Hoverpad_Rear_Right_Glow +# + +v 10.6250 3.9528 8.7500 +v 10.6250 3.9528 6.2500 +v 10.6250 -1.0472 6.2500 +v 10.6250 -1.0472 8.7500 +v 15.6250 3.9528 8.7500 +v 15.6250 -1.0472 8.7500 +v 15.6250 -1.0472 6.2500 +v 15.6250 3.9528 6.2500 +# 8 vertices + +vn -1.0000 -0.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Rear_Right_Glow +usemtl Material__2 +s 1 +f 113/185/75 114/186/75 115/187/75 116/188/75 +f 117/189/76 118/190/76 119/191/76 120/192/76 +s 2 +f 113/193/77 116/194/77 118/195/77 117/196/77 +s 4 +f 116/189/78 115/192/78 119/191/78 118/190/78 +f 114/187/79 113/188/79 117/185/79 120/186/79 +# 5 polygons + +# +# object Hoverpad_Rear_Right +# + +v 11.1250 3.4528 8.2500 +v 11.1250 3.4528 6.2500 +v 11.1250 -0.5472 6.2500 +v 11.1250 -0.5472 8.2500 +v 15.1250 3.4528 8.2500 +v 15.1250 -0.5472 8.2500 +v 15.1250 -0.5472 6.2500 +v 15.1250 3.4528 6.2500 +# 8 vertices + +vn -1.0000 -0.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 -1.0000 +vn -0.0000 1.0000 -0.0000 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Rear_Right +usemtl 05___Default +s 1 +f 121/197/80 122/198/80 123/199/80 124/200/80 +f 125/201/81 126/202/81 127/203/81 128/204/81 +s 2 +f 121/205/82 124/206/82 126/207/82 125/208/82 +s 4 +f 124/202/83 123/203/83 127/204/83 126/201/83 +s 2 +f 123/209/84 122/210/84 128/211/84 127/212/84 +s 4 +f 122/199/85 121/200/85 125/197/85 128/198/85 +# 6 polygons + +# +# object Hoverpad_Rear_Left +# + +v -15.1250 3.4528 8.2500 +v -15.1250 3.4528 6.2500 +v -15.1250 -0.5472 6.2500 +v -15.1250 -0.5472 8.2500 +v -11.1250 3.4528 8.2500 +v -11.1250 -0.5472 8.2500 +v -11.1250 -0.5472 6.2500 +v -11.1250 3.4528 6.2500 +# 8 vertices + +vn -1.0000 -0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 1.0000 -0.0000 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Rear_Left +usemtl 05___Default +s 1 +f 129/213/86 130/214/86 131/215/86 132/216/86 +f 133/217/87 134/218/87 135/219/87 136/220/87 +s 2 +f 129/221/88 132/222/88 134/223/88 133/224/88 +s 4 +f 132/218/89 131/219/89 135/220/89 134/217/89 +s 2 +f 131/225/90 130/226/90 136/227/90 135/228/90 +s 4 +f 130/215/91 129/216/91 133/213/91 136/214/91 +# 6 polygons + +# +# object Hoverpad_Rear_Left_Glow +# + +v -15.6250 3.9528 8.7500 +v -15.6250 3.9528 6.2500 +v -15.6250 -1.0472 6.2500 +v -15.6250 -1.0472 8.7500 +v -10.6250 3.9528 8.7500 +v -10.6250 -1.0472 8.7500 +v -10.6250 -1.0472 6.2500 +v -10.6250 3.9528 6.2500 +# 8 vertices + +vn -1.0000 -0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Rear_Left_Glow +usemtl Material__2 +s 1 +f 137/229/92 138/230/92 139/231/92 140/232/92 +f 141/233/93 142/234/93 143/235/93 144/236/93 +s 2 +f 137/237/94 140/238/94 142/239/94 141/240/94 +s 4 +f 140/233/95 139/236/95 143/235/95 142/234/95 +f 138/231/96 137/232/96 141/229/96 144/230/96 +# 5 polygons + +# +# object Hoverpad_Attachment +# + +v -8.7500 -2.9167 3.1250 +v -15.0000 3.3333 3.1250 +v -15.0000 3.3333 6.2500 +v -11.2500 -0.4167 6.2500 +v -11.2500 3.3333 3.1250 +v -17.5000 -2.9167 3.1250 +v -15.0000 -0.4167 6.2500 +v -11.2500 3.3333 6.2500 +v -11.2424 4.3750 -15.0000 +v -6.8674 4.3750 -15.0000 +v -6.8674 7.1875 -13.1250 +v -9.3674 7.1875 -13.1250 +v -9.3674 7.1875 -9.1303 +v -11.2424 4.3750 -9.6597 +v -6.8674 7.1875 -9.1303 +v -6.8674 -6.2500 -15.3125 +v -10.6250 -6.2500 -15.3125 +v -8.7500 -9.0625 -13.4375 +v -6.8674 -9.0625 -13.4375 +v -10.6250 -6.2500 -11.1597 +v -8.7500 -9.0625 -10.0347 +v -6.8674 -9.0625 -10.0347 +v -6.8674 -6.2500 -11.1597 +v 15.0000 3.3333 3.1250 +v 8.7500 -2.9167 3.1250 +v 11.2500 -0.4167 6.2500 +v 15.0000 3.3333 6.2500 +v 17.5000 -2.9167 3.1250 +v 11.2500 3.3333 3.1250 +v 11.2500 3.3333 6.2500 +v 15.0000 -0.4167 6.2500 +v 6.8674 4.3750 -15.0000 +v 11.2424 4.3750 -15.0000 +v 9.3674 7.1875 -13.1250 +v 6.8674 7.1875 -13.1250 +v 11.2424 4.3750 -9.6597 +v 9.3674 7.1875 -9.1303 +v 6.8674 7.1875 -9.1303 +v 10.6250 -6.2500 -15.3125 +v 6.8674 -6.2500 -15.3125 +v 6.8674 -9.0625 -13.4375 +v 8.7500 -9.0625 -13.4375 +v 8.7500 -9.0625 -10.0347 +v 10.6250 -6.2500 -11.1597 +v 6.8674 -9.0625 -10.0347 +v 6.8674 -6.2500 -11.1597 +# 46 vertices + +vn 0.7071 0.7071 0.0000 +vn 0.7071 0.7071 -0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.0000 -0.5547 0.8321 +vn 0.8321 -0.5547 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 0.5547 0.8321 +vn 0.8321 0.5547 0.0000 +vn -0.0000 1.0000 -0.0000 +vn -1.0000 0.0000 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.0000 0.5547 -0.8321 +vn -0.8321 0.5547 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.5547 -0.8321 +vn -0.8321 -0.5547 -0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 -0.5547 0.8321 +vn 0.0000 0.5547 0.8321 +vn 1.0000 0.0000 0.0000 +vn -0.0000 0.5547 -0.8321 +vn -0.0000 -0.5547 -0.8321 +vn -1.0000 -0.0000 -0.0000 +# 28 vertex normals + +vt 0.3711 0.3750 0.6174 +vt 0.3203 0.3750 0.0302 +vt 0.3203 0.4297 0.0302 +vt 0.3516 0.4297 0.3826 +vt 0.2695 0.4531 0.0009 +vt 0.2695 0.3750 0.0009 +vt 0.2891 0.3750 -0.2634 +vt 0.2891 0.4141 -0.2634 +vt 0.3203 0.4141 -0.2634 +vt 0.3164 0.4531 0.0009 +vt 0.3203 0.3750 -0.2634 +vt 0.2695 0.3828 0.9991 +vt 0.2695 0.4531 0.9991 +vt 0.2891 0.4141 1.2634 +vt 0.2891 0.3828 1.2634 +vt 0.3047 0.4531 0.9991 +vt 0.3047 0.4141 1.2634 +vt 0.3047 0.3828 1.2634 +vt 0.3047 0.3828 0.9991 +vt 0.3086 0.3828 0.0000 +vt 0.3203 0.4453 0.0000 +vt 0.2813 0.4453 0.0000 +vt 0.2617 0.3828 0.0000 +# 23 texture coords + +g Hoverpad_Attachment +usemtl 05___Default +s 1 +f 145/241/97 146/242/97 147/243/97 148/244/98 +f 149/242/99 150/241/99 151/244/99 152/243/99 +f 153/245/100 154/246/100 155/247/100 156/248/100 +s 2 +f 157/249/101 158/250/101 153/245/101 156/248/101 +s 4 +f 159/251/102 157/249/103 156/248/104 155/247/103 +s 1 +f 160/252/105 161/253/105 162/254/105 163/255/105 +s 2 +f 164/256/106 165/257/106 162/254/106 161/253/106 +s 4 +f 165/257/107 166/258/107 163/255/107 162/254/107 +s 2 +f 166/258/108 167/259/108 160/252/108 163/255/108 +s 1 +f 146/242/109 145/241/109 148/244/110 147/243/109 +f 150/241/111 149/242/111 152/243/111 151/244/111 +f 154/246/112 153/245/112 156/248/112 155/247/112 +s 2 +f 158/250/113 157/249/113 156/248/113 153/245/113 +s 4 +f 157/249/114 159/251/107 155/247/114 156/248/115 +s 1 +f 161/253/116 160/252/116 163/255/116 162/254/116 +s 2 +f 165/257/117 164/256/117 161/253/117 162/254/117 +s 4 +f 166/258/102 165/257/102 162/254/102 163/255/102 +s 2 +f 167/260/118 166/261/118 163/262/118 160/263/118 +s 1 +f 168/242/99 169/241/99 170/244/99 171/243/99 +f 172/241/97 173/242/97 174/243/97 175/244/97 +f 176/246/119 177/245/100 178/248/119 179/247/119 +s 2 +f 180/250/117 181/249/117 178/248/117 177/245/117 +s 4 +f 181/249/102 182/251/102 179/247/102 178/248/102 +s 1 +f 183/253/105 184/252/105 185/255/120 186/254/120 +s 2 +f 187/257/113 188/256/113 183/253/113 186/254/113 +s 4 +f 189/258/107 187/257/107 186/254/107 185/255/107 +s 2 +f 190/259/121 189/258/121 185/255/121 184/252/121 +s 1 +f 169/241/111 168/242/111 171/243/111 170/244/111 +f 173/242/109 172/241/109 175/244/109 174/243/109 +f 177/245/112 176/246/122 179/247/122 178/248/122 +s 2 +f 181/249/106 180/250/106 177/245/106 178/248/106 +s 4 +f 182/251/107 181/249/107 178/248/107 179/247/107 +s 1 +f 184/252/116 183/253/116 186/254/123 185/255/123 +s 2 +f 188/256/101 187/257/101 186/254/101 183/253/101 +s 4 +f 187/257/102 189/258/102 185/255/102 186/254/102 +s 2 +f 189/258/124 190/259/124 184/252/124 185/255/124 +# 36 polygons + +# +# object Left_Laser +# + +v -16.2500 -1.8750 -20.0000 +v -18.1250 0.0000 -20.0000 +v -18.1250 0.0000 -10.0000 +v -16.2500 -1.8750 -10.0000 +v -16.2500 0.0000 -20.0000 +v -16.2500 -0.0000 -10.0000 +v -18.1250 -1.8750 -10.0000 +v -18.1250 -1.8750 -20.0000 +v -17.1875 -0.9375 -20.0000 +v -17.1875 -0.9375 -10.0000 +v -13.4375 -0.9375 -10.0000 +v -13.4375 -0.9375 -20.0000 +# 12 vertices + +vn 0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 -0.0000 +vn -0.0000 1.0000 -0.0000 +# 3 vertex normals + +vt 0.2383 0.9141 0.9531 +vt 0.2656 0.9141 0.7656 +vt 0.2656 0.7031 0.7656 +vt 0.2383 0.7031 0.9219 +vt 0.2383 0.9141 0.0005 +vt 0.2383 0.7031 0.0005 +vt 0.1914 0.7031 0.0005 +vt 0.1914 0.9141 0.0005 +# 8 texture coords + +g Left_Laser +usemtl 05___Default +s 1 +f 191/264/125 192/265/125 193/266/125 194/267/125 +f 195/264/126 196/267/126 197/266/126 198/265/126 +f 199/268/127 200/269/127 201/270/127 202/271/127 +# 3 polygons + +# +# object Left_Laser_Invert +# + +v -18.1250 0.0000 -20.0000 +v -16.2500 -1.8750 -20.0000 +v -16.2500 -1.8750 -10.0000 +v -18.1250 0.0000 -10.0000 +v -16.2500 -0.0000 -10.0000 +v -16.2500 0.0000 -20.0000 +v -18.1250 -1.8750 -20.0000 +v -18.1250 -1.8750 -10.0000 +v -17.1875 -0.9375 -10.0000 +v -17.1875 -0.9375 -20.0000 +v -13.4375 -0.9375 -20.0000 +v -13.4375 -0.9375 -10.0000 +# 12 vertices + +vn -0.7071 -0.7071 -0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +# 3 vertex normals + +vt 0.2656 0.9141 0.7656 +vt 0.2383 0.9141 0.9531 +vt 0.2383 0.7031 0.9219 +vt 0.2656 0.7031 0.7656 +vt 0.2383 0.7031 0.0005 +vt 0.2383 0.9141 0.0005 +vt 0.1914 0.9141 0.0005 +vt 0.1914 0.7031 0.0005 +# 8 texture coords + +g Left_Laser_Invert +usemtl 05___Default +s 1 +f 203/272/128 204/273/128 205/274/128 206/275/128 +f 207/274/129 208/273/129 209/272/129 210/275/129 +f 211/276/130 212/277/130 213/278/130 214/279/130 +# 3 polygons + +# +# object Hull_Rear +# + +v 9.0000 -15.0000 3.3403 +v 9.0000 -4.5000 23.3403 +v -9.0000 -4.5000 23.3403 +v -9.0000 -15.0000 3.3403 +v 7.0000 4.1250 24.8403 +v -7.0000 4.1250 24.8403 +v -9.0000 4.5000 2.3403 +v -9.0000 -6.0000 -3.6597 +v -7.0000 13.0000 3.8403 +v 7.0000 13.0000 3.8403 +v 9.0000 4.5000 2.3403 +v 9.0000 -6.0000 -3.6597 +# 12 vertices + +vn -0.0000 -0.8854 0.4648 +vn 0.0000 -0.8854 0.4648 +vn 0.0000 -0.1713 0.9852 +vn -1.0000 0.0000 -0.0000 +vn -0.9903 0.1278 0.0542 +vn -0.9927 0.1105 0.0474 +vn -0.9736 0.2103 0.0889 +vn -0.9730 0.2122 0.0906 +vn 0.0000 0.9211 0.3893 +vn -0.0000 0.9211 0.3893 +vn 0.9734 0.2107 0.0900 +vn 0.9904 0.1273 0.0546 +vn 0.9928 0.1103 0.0468 +vn 0.9729 0.2130 0.0900 +vn 1.0000 -0.0000 0.0000 +# 15 vertex normals + +vt 0.4961 0.2813 0.2656 +vt 0.6523 0.2813 0.4297 +vt 0.6523 0.0000 0.4297 +vt 0.4961 0.0000 0.2656 +vt 0.6523 0.2813 0.1211 +vt 0.7227 0.2500 0.0977 +vt 0.7227 0.0313 0.0977 +vt 0.6523 0.0000 0.1211 +vt 0.5703 0.5938 0.3594 +vt 0.6523 0.2813 0.3594 +vt 0.7227 0.6094 0.3594 +vt 0.6406 0.7031 0.3594 +vt 0.7227 0.2578 0.3906 +vt 0.7891 0.5859 0.3906 +vt 0.7227 0.0313 0.5645 +vt 0.7227 0.2500 0.5645 +vt 0.8867 0.2500 0.7031 +vt 0.8867 0.0313 0.7031 +vt 0.7227 0.2578 0.6094 +vt 0.6523 0.2813 0.6406 +vt 0.7227 0.6094 0.6406 +vt 0.7891 0.5859 0.6094 +vt 0.5703 0.5938 0.6406 +vt 0.6406 0.7031 0.6406 +# 24 texture coords + +g Hull_Rear +usemtl 05___Default +s 1 +f 215/280/131 216/281/132 217/282/131 218/283/131 +s 2 +f 216/284/133 219/285/133 220/286/133 217/287/133 +s 4 +f 218/288/134 217/289/135 221/290/136 222/291/134 +f 217/289/135 220/292/137 223/293/138 221/290/136 +s 1 +f 220/294/139 219/295/139 224/296/140 223/297/140 +s 4 +f 219/298/141 216/299/142 225/300/143 224/301/144 +f 216/299/142 215/302/145 226/303/145 225/300/143 +# 7 polygons + +# +# object Hull_Center +# + +v -18.1250 -6.2500 8.3403 +v -18.1250 -6.2500 -0.1597 +v -6.8750 -6.2500 -2.9097 +v -9.0000 -6.2500 6.3403 +v 9.0000 -6.2500 6.3403 +v 6.8750 -6.2500 -2.9097 +v 18.1250 -6.2500 -0.1597 +v 18.1250 -6.2500 8.3403 +v -9.3750 -6.2500 -22.6597 +v -6.8750 -6.2500 -22.6597 +v 6.8750 -6.2500 -22.6597 +v 9.3750 -6.2500 -22.6597 +v -18.1250 4.3750 4.3403 +v -9.0000 4.3750 2.3403 +v -6.8750 4.3750 -6.9097 +v -18.1250 4.3750 -4.1597 +v 9.0000 4.3750 2.3403 +v 18.1250 4.3750 4.3403 +v 18.1250 4.3750 -4.1597 +v 6.8750 4.3750 -6.9097 +v -6.8750 4.3750 -26.6597 +v -9.3750 4.3750 -26.6597 +v 9.3750 4.3750 -26.6597 +v 6.8750 4.3750 -26.6597 +# 24 vertices + +vn 0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.0000 1.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.2009 0.3451 0.9168 +vn -0.2009 0.3451 0.9168 +vn 1.0000 0.0000 -0.0000 +vn 0.9883 -0.0538 -0.1428 +vn 0.9710 -0.0842 -0.2237 +vn 1.0000 0.0000 0.0000 +vn 0.9234 -0.1352 -0.3591 +vn -0.0000 -0.3523 -0.9359 +vn 0.0000 -0.3523 -0.9359 +vn -0.9234 -0.1352 -0.3591 +vn -0.9883 -0.0538 -0.1428 +vn -0.9710 -0.0842 -0.2237 +vn -1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +# 20 vertex normals + +vt 0.0000 0.8240 0.4063 +vt 0.0665 0.8240 0.4063 +vt 0.0881 1.0000 0.4063 +vt 0.0157 0.9668 0.4063 +vt 0.0157 0.9668 0.0000 +vt 0.0881 1.0000 0.0000 +vt 0.0665 0.8240 0.0000 +vt 0.0000 0.8240 0.0000 +vt 0.2426 0.9608 0.4063 +vt 0.2426 0.9999 0.4063 +vt 0.2426 0.9999 0.0000 +vt 0.2426 0.9608 0.0000 +vt 0.5615 0.8248 0.5625 +vt 0.5459 0.9668 0.5625 +vt 0.4740 0.9999 0.5625 +vt 0.4954 0.8248 0.5625 +vt 0.5459 0.9668 0.0000 +vt 0.5615 0.8248 0.0000 +vt 0.4954 0.8248 0.0000 +vt 0.4740 0.9999 0.0000 +vt 0.3203 1.0000 0.5625 +vt 0.3203 0.9611 0.5625 +vt 0.3203 0.9611 0.0000 +vt 0.3203 1.0000 0.0000 +vt 0.3438 0.6328 0.3555 +vt 0.2734 0.6328 0.3867 +vt 0.2734 0.7891 0.4492 +vt 0.3438 0.7891 0.4180 +vt 0.2734 0.6328 0.2578 +vt 0.3438 0.6328 0.2266 +vt 0.3438 0.7891 0.2891 +vt 0.2734 0.7891 0.3203 +vt 0.3438 0.6328 0.5869 +vt 0.4102 0.6328 0.5869 +vt 0.4414 0.7891 0.5869 +vt 0.3750 0.7891 0.5869 +vt 0.5859 0.6328 0.4502 +vt 0.6172 0.7891 0.4502 +vt 0.2422 0.9609 0.0000 +vt 0.2422 1.0000 0.0000 +vt 0.3203 0.9609 0.0000 +vt 0.2422 1.0000 0.8398 +vt 0.2422 0.9609 0.8398 +vt 0.3203 0.9609 0.9023 +vt 0.3203 1.0000 0.9023 +vt 0.5859 0.6328 0.3594 +vt 0.4102 0.6328 0.2188 +vt 0.4414 0.7891 0.2188 +vt 0.6172 0.7891 0.3594 +vt 0.3438 0.6328 0.2187 +vt 0.3750 0.7891 0.2188 +# 51 texture coords + +g Hull_Center +usemtl 05___Default +s 1 +f 227/304/146 228/305/146 229/306/146 230/307/146 +f 231/308/147 232/309/147 233/310/147 234/311/147 +f 228/305/146 235/312/146 236/313/146 229/306/146 +f 232/309/147 237/314/147 238/315/147 233/310/147 +f 239/316/148 240/317/148 241/318/148 242/319/148 +f 243/320/149 244/321/148 245/322/149 246/323/149 +f 242/319/148 241/318/148 247/324/150 248/325/151 +f 246/323/149 245/322/149 249/326/151 250/327/151 +s 2 +f 227/328/152 230/329/152 240/330/152 239/331/152 +f 231/332/153 234/333/153 244/334/153 243/335/153 +s 4 +f 234/336/154 233/337/155 245/338/156 244/339/157 +f 233/337/155 238/340/158 249/341/158 245/338/156 +s 2 +f 238/342/159 237/343/159 250/327/159 249/344/160 +f 236/345/160 235/346/160 248/347/160 247/348/160 +s 4 +f 235/349/161 228/350/162 242/351/163 248/352/161 +f 228/350/162 227/353/164 239/354/165 242/351/163 +# 16 polygons + +# +# object Hull_Top +# + +v 13.1250 4.3750 -9.6597 +v 11.2500 15.0000 -7.6597 +v 11.2500 15.0000 4.3403 +v 13.1250 4.3750 2.3403 +v -13.1250 4.3750 -9.6597 +v -13.1250 4.3750 2.3403 +v -11.2500 15.0000 4.3403 +v -11.2500 15.0000 -7.6597 +# 8 vertices + +vn 0.9848 0.1738 0.0000 +vn -0.9848 0.1738 -0.0000 +vn -0.0000 -0.1850 0.9827 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 0.1850 -0.9827 +# 5 vertex normals + +vt 0.0664 0.8203 0.7188 +vt 0.0820 0.6484 0.6719 +vt 0.1758 0.6484 0.6719 +vt 0.1602 0.8203 0.7188 +vt 0.0664 0.8203 0.2813 +vt 0.1602 0.8203 0.2813 +vt 0.1758 0.6484 0.3281 +vt 0.0820 0.6484 0.3281 +vt 0.2578 0.6797 0.4492 +vt 0.1758 0.6484 0.4180 +vt 0.1758 0.2969 0.4180 +vt 0.2578 0.2656 0.4492 +vt 0.1758 0.6484 0.7344 +vt 0.0820 0.6484 0.7344 +vt 0.0820 0.2969 0.7344 +vt 0.1758 0.2969 0.7344 +vt 0.0820 0.6484 0.6055 +vt 0.0000 0.6797 0.6367 +vt -0.0000 0.2656 0.6367 +vt 0.0820 0.2969 0.6055 +# 20 texture coords + +g Hull_Top +usemtl 05___Default +s 1 +f 251/355/166 252/356/166 253/357/166 254/358/166 +f 255/359/167 256/360/167 257/361/167 258/362/167 +s 2 +f 254/363/168 253/364/168 257/365/168 256/366/168 +s 4 +f 253/367/169 252/368/169 258/369/169 257/370/169 +s 2 +f 252/371/170 251/372/170 255/373/170 258/374/170 +# 5 polygons + +# +# object Main_Laser_Base +# + +v 1.8750 -14.0625 -17.8125 +v 1.8750 -9.0625 -12.8125 +v 1.8750 -9.0625 -7.6597 +v 1.8750 -14.0625 -7.6597 +v -1.8750 -14.0625 -17.8125 +v -1.8750 -14.0625 -7.6597 +v -1.8750 -9.0625 -7.6597 +v -1.8750 -9.0625 -12.8125 +# 8 vertices + +vn 1.0000 0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 0.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +# 7 vertex normals + +vt 0.9688 0.1953 0.5313 +vt 0.9336 0.2656 0.5313 +vt 0.8984 0.2656 0.5312 +vt 0.8984 0.1953 0.5312 +vt 0.9688 0.1953 0.4688 +vt 0.8984 0.1953 0.4687 +vt 0.8984 0.2656 0.4687 +vt 0.9336 0.2656 0.4687 +vt 0.9688 0.1328 0.0625 +vt 0.8984 0.1328 0.0625 +vt 0.8984 0.1953 0.0625 +vt 0.9688 0.1953 0.0625 +vt 0.8984 0.2656 0.1406 +vt 0.9336 0.2656 0.1406 +vt 0.9336 0.3281 0.1406 +vt 0.8984 0.3281 0.1406 +vt 0.9688 0.2656 0.0625 +vt 0.9688 0.3281 0.0625 +# 18 texture coords + +g Main_Laser_Base +usemtl 05___Default +s 1 +f 259/375/171 260/376/172 261/377/171 262/378/171 +f 263/379/173 264/380/173 265/381/173 266/382/174 +s 2 +f 259/383/175 262/384/175 264/385/175 263/386/175 +f 261/387/176 260/388/176 266/389/176 265/390/176 +s 4 +f 260/388/177 259/391/177 263/392/177 266/389/177 +# 5 polygons + +# +# object Left_Laser_Attachment +# + +v -18.1250 -2.5000 -1.5715 +v -18.1250 -2.5000 -10.0000 +v -14.6875 -2.5000 -10.0000 +v -14.6875 -2.5000 -1.5715 +v -18.1250 0.6250 -2.7480 +v -14.6875 0.6250 -2.7480 +v -14.6875 0.6250 -10.0000 +v -18.1250 0.6250 -10.0000 +# 8 vertices + +vn 0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 -0.0000 +# 6 vertex normals + +vt 0.2813 0.8437 0.4609 +vt 0.3438 0.8437 0.4609 +vt 0.3438 0.7969 0.4609 +vt 0.2813 0.7969 0.4609 +vt 0.2900 0.8906 0.5078 +vt 0.2900 0.9375 0.5078 +vt 0.3438 0.9375 0.5078 +vt 0.3438 0.8906 0.5078 +vt 0.3672 0.8441 0.6211 +vt 0.3438 0.8441 0.6211 +vt 0.3438 0.8902 0.6211 +vt 0.3672 0.8902 0.6211 +vt 0.3438 0.8441 0.2188 +vt 0.2813 0.8441 0.2188 +vt 0.2900 0.8902 0.2188 +vt 0.3438 0.8902 0.2188 +# 16 texture coords + +g Left_Laser_Attachment +usemtl 05___Default +s 1 +f 267/393/178 268/394/179 269/395/178 270/396/178 +f 271/397/180 272/398/181 273/399/180 274/400/180 +s 2 +f 269/401/182 268/402/182 274/403/182 273/404/182 +s 4 +f 268/405/183 267/406/183 271/407/183 274/408/183 +# 4 polygons + +# +# object Right_Laser_Attachment +# + +v 18.1250 -2.5000 -1.5715 +v 18.1250 -2.5000 -10.0000 +v 14.6875 -2.5000 -10.0000 +v 14.6875 -2.5000 -1.5715 +v 18.1250 0.6250 -2.7480 +v 14.6875 0.6250 -2.7480 +v 14.6875 0.6250 -10.0000 +v 18.1250 0.6250 -10.0000 +# 8 vertices + +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 -0.0000 -1.0000 +vn 1.0000 0.0000 -0.0000 +# 4 vertex normals + +vt 0.2813 0.8437 0.4609 +vt 0.3438 0.8437 0.4609 +vt 0.3438 0.7969 0.4609 +vt 0.2813 0.7969 0.4609 +vt 0.2900 0.8906 0.5078 +vt 0.2900 0.9375 0.5078 +vt 0.3438 0.9375 0.5078 +vt 0.3438 0.8906 0.5078 +vt 0.3672 0.8441 0.6211 +vt 0.3438 0.8441 0.6211 +vt 0.3438 0.8902 0.6211 +vt 0.3672 0.8902 0.6211 +vt 0.3438 0.8441 0.0000 +vt 0.2813 0.8441 0.0000 +vt 0.2900 0.8902 0.0000 +vt 0.3438 0.8902 0.0000 +# 16 texture coords + +g Right_Laser_Attachment +usemtl 05___Default +s 1 +f 278/412/184 277/411/184 276/410/184 275/409/184 +f 282/416/185 281/415/185 280/414/185 279/413/185 +s 2 +f 281/420/186 282/419/186 276/418/186 277/417/186 +s 4 +f 282/424/187 279/423/187 275/422/187 276/421/187 +# 4 polygons + +# +# object Hull_Front +# + +v 6.8750 -8.0000 -26.6597 +v 6.8750 5.1667 -31.6597 +v 6.8750 13.0000 -7.6597 +v 6.8750 -8.0000 -7.6597 +v -6.8750 -8.0000 -26.6597 +v -6.8750 -8.0000 -7.6597 +v -6.8750 13.0000 -7.6597 +v -6.8750 5.1667 -31.6597 +# 8 vertices + +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 0.9506 -0.3103 +vn 0.0000 -0.3550 -0.9349 +# 6 vertex normals + +vt 0.8516 0.7969 0.0781 +vt 0.8128 0.5913 0.0781 +vt 1.0000 0.4691 0.0781 +vt 1.0000 0.7969 0.0781 +vt 0.8516 0.7969 0.0000 +vt 1.0000 0.7969 0.0000 +vt 1.0000 0.4691 0.0000 +vt 0.8128 0.5913 0.0000 +vt 0.8516 0.7969 0.3125 +vt 1.0000 0.7969 0.3125 +vt 1.0000 1.0000 0.3125 +vt 0.8516 1.0000 0.3125 +vt 0.5625 0.7969 0.6406 +vt 0.7500 0.7969 0.5182 +vt 0.7500 1.0000 0.5182 +vt 0.5625 1.0000 0.6406 +vt 0.7500 0.7969 0.2500 +vt 0.8516 0.7969 0.3281 +vt 0.8516 1.0000 0.3281 +vt 0.7500 1.0000 0.2500 +# 20 texture coords + +g Hull_Front +usemtl 05___Default +s 1 +f 283/425/188 284/426/188 285/427/188 286/428/188 +f 287/429/189 288/430/189 289/431/189 290/432/189 +s 2 +f 283/433/190 286/434/191 288/435/191 287/436/190 +f 285/437/192 284/438/192 290/439/192 289/440/192 +s 4 +f 284/441/193 283/442/193 287/443/193 290/444/193 +# 5 polygons + +# +# object Hull_Bottom +# + +v -10.0000 -15.0000 3.3403 +v -5.0000 -15.0000 -7.6597 +v 5.0000 -15.0000 -7.6597 +v 10.0000 -15.0000 3.3403 +v 11.2500 -6.2500 -11.1597 +v 16.2500 -6.2500 -0.1597 +v -11.2500 -6.2500 -11.1597 +v -16.2500 -6.2500 -0.1597 +v -14.1667 -9.1667 14.3403 +v -16.2500 -6.2500 11.3403 +v -9.0000 -15.0000 3.3403 +v -9.0000 -9.1667 14.3403 +v -9.0000 -6.2500 11.3403 +v -9.0000 -6.2500 -0.1597 +v 16.2500 -6.2500 11.3403 +v 14.1667 -9.1667 14.3403 +v 9.0000 -15.0000 3.3403 +v 9.0000 -9.1667 14.3403 +v 9.0000 -6.2500 11.3403 +v 9.0000 -6.2500 -0.1597 +# 20 vertices + +vn 0.0000 -1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.7054 -0.6321 -0.3206 +vn -0.0000 -0.3714 -0.9285 +vn -0.7054 -0.6321 -0.3206 +vn -0.8137 -0.5812 0.0000 +vn -0.0000 -0.8835 0.4685 +vn 0.0000 -0.8835 0.4685 +vn -0.0000 0.7170 0.6971 +vn 0.0000 0.7170 0.6971 +vn -0.0000 1.0000 -0.0000 +vn 0.8137 -0.5812 -0.0000 +# 12 vertex normals + +vt 0.4887 0.0039 0.0000 +vt 0.4481 0.1797 0.0000 +vt 0.3681 0.1797 0.0000 +vt 0.3276 0.0039 0.0000 +vt 0.2383 -0.0000 0.6562 +vt 0.3242 -0.0000 0.5781 +vt 0.3516 0.1406 0.6719 +vt 0.2656 0.1406 0.7500 +vt 0.4982 0.3198 0.0000 +vt 0.3181 0.3198 0.0000 +vt 0.3242 -0.0000 0.4219 +vt 0.2383 -0.0000 0.3438 +vt 0.2656 0.1406 0.2500 +vt 0.3516 0.1406 0.3281 +vt 0.1523 0.0938 0.2812 +vt 0.1758 0.1406 0.2500 +vt 0.0664 0.2500 0.2656 +vt 0.1523 0.2500 0.3594 +vt 0.1523 0.1719 0.3594 +vt 0.0664 0.2344 0.2656 +vt 0.1523 0.2500 0.2617 +vt 0.1758 0.2500 0.3086 +vt 0.1758 0.1406 0.3086 +vt 0.1523 0.1721 0.2617 +vt 0.1758 0.2500 0.4063 +vt 0.2656 0.2500 0.4063 +vt 0.2656 0.1406 0.4062 +vt 0.1758 0.1406 0.4062 +vt 0.1758 0.1406 0.7500 +vt 0.1523 0.0938 0.7187 +vt 0.1523 0.1719 0.2617 +vt 0.1758 0.1406 0.4063 +vt 0.2656 0.1406 0.4063 +# 33 texture coords + +g Hull_Bottom +usemtl 05___Default +s 1 +f 291/445/194 292/446/195 293/447/194 294/448/194 +s 2 +f 294/449/196 293/450/196 295/451/196 296/452/196 +s 4 +f 293/447/197 292/446/197 297/453/197 295/454/197 +s 2 +f 292/455/198 291/456/198 298/457/198 297/458/198 +s 1 +f 291/456/199 299/459/199 300/460/199 298/457/199 +s 2 +f 301/461/200 302/462/201 299/463/201 291/464/200 +s 4 +f 302/465/202 303/466/202 300/467/202 299/468/203 +s 2 +f 303/469/204 304/470/204 298/471/204 300/472/204 +s 1 +f 294/449/205 296/452/205 305/473/205 306/474/205 +s 2 +f 307/461/201 294/464/201 306/463/201 308/462/201 +s 4 +f 308/465/203 306/475/203 305/467/203 309/466/203 +s 2 +f 309/469/204 305/476/204 296/477/204 310/470/204 +# 12 polygons + +# +# object Right_Laser_Invert +# + +v 18.1250 0.0000 -20.0000 +v 16.2500 -1.8750 -20.0000 +v 16.2500 -1.8750 -10.0000 +v 18.1250 0.0000 -10.0000 +v 16.2500 -0.0000 -10.0000 +v 16.2500 -0.0000 -20.0000 +v 18.1250 -1.8750 -20.0000 +v 18.1250 -1.8750 -10.0000 +v 17.1875 -0.9375 -10.0000 +v 17.1875 -0.9375 -20.0000 +v 13.4375 -0.9375 -20.0000 +v 13.4375 -0.9375 -10.0000 +# 12 vertices + +vn 0.7071 -0.7071 0.0000 +vn 0.7071 0.7071 -0.0000 +vn -0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 -0.0000 +# 4 vertex normals + +vt 0.2656 0.9141 0.7656 +vt 0.2383 0.9141 0.9531 +vt 0.2383 0.7031 0.9219 +vt 0.2656 0.7031 0.7656 +vt 0.2383 0.7031 0.0005 +vt 0.2383 0.9141 0.0005 +vt 0.1914 0.9141 0.0005 +vt 0.1914 0.7031 0.0005 +# 8 texture coords + +g Right_Laser_Invert +usemtl 05___Default +s 1 +f 314/481/206 313/480/206 312/479/206 311/478/206 +f 318/481/207 317/478/207 316/479/207 315/480/207 +f 322/485/209 321/484/208 320/483/208 319/482/208 +# 3 polygons + +# +# object Right_Laser +# + +v 16.2500 -1.8750 -20.0000 +v 18.1250 0.0000 -20.0000 +v 18.1250 0.0000 -10.0000 +v 16.2500 -1.8750 -10.0000 +v 16.2500 -0.0000 -20.0000 +v 16.2500 -0.0000 -10.0000 +v 18.1250 -1.8750 -10.0000 +v 18.1250 -1.8750 -20.0000 +v 17.1875 -0.9375 -20.0000 +v 17.1875 -0.9375 -10.0000 +v 13.4375 -0.9375 -10.0000 +v 13.4375 -0.9375 -20.0000 +# 12 vertices + +vn -0.7071 0.7071 -0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 1.0000 0.0000 +# 4 vertex normals + +vt 0.2383 0.9141 0.9531 +vt 0.2656 0.9141 0.7656 +vt 0.2656 0.7031 0.7656 +vt 0.2383 0.7031 0.9219 +vt 0.2383 0.9141 0.0005 +vt 0.2383 0.7031 0.0005 +vt 0.1914 0.7031 0.0005 +vt 0.1914 0.9141 0.0005 +# 8 texture coords + +g Right_Laser +usemtl 05___Default +s 1 +f 326/489/210 325/488/210 324/487/210 323/486/210 +f 330/487/211 329/488/211 328/489/211 327/486/211 +f 334/493/212 333/492/213 332/491/212 331/490/212 +# 3 polygons + diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.mtl new file mode 100644 index 00000000..f5570de2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.mtl @@ -0,0 +1,44 @@ +# Blender MTL File: 'astroMinerOriginal.blend' +# Material Count: 7 + +newmtl 05___Default +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.004 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.005 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.006 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.007 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.008 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl Material__2 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_fx diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.obj new file mode 100644 index 00000000..5f6e7ab3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.obj @@ -0,0 +1,1149 @@ +# Blender v2.76 (sub 0) OBJ File: 'astroMinerOriginal.blend' +# www.blender.org +mtllib astro_miner_full.mtl +o Main_Laser_Left_Guard +v -3.750000 -14.374997 -19.375002 +v -3.750000 -8.749996 -25.000002 +v -3.750000 -8.749999 -7.500001 +v -3.750000 -14.374999 -7.500002 +v -5.000000 -14.374997 -19.375002 +v -5.000000 -14.374999 -7.500002 +v -5.000000 -8.749999 -7.500001 +v -5.000000 -8.749996 -25.000002 +vt 0.398400 0.792946 +vt 0.351600 0.746096 +vt 0.500000 0.746096 +vt 0.398400 0.687496 +vt 0.500000 0.687496 +vt 0.500000 0.734396 +vt 0.500000 0.675796 +vt 0.351600 0.734396 +vt 0.398400 0.675796 +vt 0.293000 0.687496 +vt 0.500000 0.792946 +vt 0.293000 0.675796 +vn 1.000000 -0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.707100 -0.707100 +usemtl 05___Default.008 +f 1/1/1 2/2/1 3/3/1 +f 5/4/2 6/5/2 7/6/2 +f 4/7/3 6/5/3 5/4/3 +f 2/2/4 8/8/4 7/6/4 +f 1/9/5 5/4/5 8/10/5 +f 4/11/1 1/1/1 3/3/1 +f 8/8/2 5/4/2 7/6/2 +f 1/9/3 4/7/3 5/4/3 +f 3/3/4 2/2/4 7/6/4 +f 2/12/5 1/9/5 8/10/5 +o Main_Laser_Front +v 0.000000 -9.999993 -40.000000 +v 0.000000 -10.937493 -40.000000 +v 0.000000 -10.937495 -31.875002 +v 0.000000 -9.999995 -31.875002 +v -0.937500 -12.812493 -40.000004 +v -0.937500 -13.749993 -40.000004 +v -0.937500 -13.749995 -31.875002 +v -0.937500 -12.812495 -31.875002 +v 0.937500 -12.812495 -31.875002 +v 0.937500 -12.812493 -40.000004 +v 0.937500 -13.749993 -40.000004 +v 0.937500 -13.749995 -31.875002 +v 0.937500 -10.937493 -40.000000 +v 0.937500 -10.937497 -17.500002 +v 0.937500 -12.812497 -17.500002 +v -0.937500 -12.812497 -17.500002 +v -0.937500 -10.937497 -17.500002 +v -0.937500 -10.937493 -40.000000 +v -0.937500 -14.999995 -31.875002 +v -0.937500 -15.937495 -30.937502 +v -0.937500 -15.937497 -19.687502 +v -0.937500 -14.999997 -18.750002 +v 0.937500 -15.937497 -19.687502 +v 0.937500 -15.937495 -30.937502 +v 0.937500 -14.999995 -31.875002 +v 0.937500 -14.999997 -18.750002 +vt 0.808600 0.851546 +vt 0.808600 0.843746 +vt 0.746100 0.843746 +vt 0.808600 0.867196 +vt 0.636700 0.867196 +vt 0.636700 0.851546 +vt 0.636700 0.882796 +vt 0.808600 0.882796 +vt 0.824200 0.867196 +vt 0.808600 0.890646 +vt 0.746100 0.890646 +vt 0.746100 0.882796 +vt 0.746100 0.851546 +vt 0.824200 0.882796 +vt 0.949200 0.683596 +vt 0.855500 0.683596 +vt 0.847700 0.691396 +vt 0.957000 0.691396 +vt 0.949200 0.667946 +vt 0.855500 0.667946 +vt 0.847700 0.707046 +vt 0.839800 0.691396 +vt 0.957000 0.707046 +vt 0.964800 0.707046 +vt 0.839800 0.707046 +vt 0.964800 0.691396 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.707100 -0.707100 +usemtl 05___Default.007 +f 18/13/6 19/14/6 20/15/6 +f 21/16/7 22/17/7 23/18/7 +f 24/18/6 25/17/6 26/16/6 +f 23/19/8 24/17/8 13/16/8 +f 21/16/9 26/20/9 25/19/9 +f 18/21/10 13/16/10 26/20/10 +f 9/22/7 12/23/7 11/24/7 +f 13/13/7 16/25/7 15/15/7 +f 17/25/6 18/13/6 20/15/6 +f 18/13/7 21/16/7 23/18/7 +f 13/13/6 24/18/6 26/16/6 +f 18/20/8 23/19/8 13/16/8 +f 22/17/9 21/16/9 25/19/9 +f 21/26/10 18/21/10 26/20/10 +f 10/20/7 9/22/7 11/24/7 +f 14/14/7 13/13/7 15/15/7 +usemtl 05___Default.004 +f 28/27/6 29/28/6 30/29/6 +f 32/28/7 33/29/7 34/30/7 +f 28/27/8 32/31/8 31/32/8 +f 29/33/11 31/29/11 34/34/11 +f 30/29/9 34/33/9 33/35/9 +f 27/30/12 33/35/12 32/36/12 +f 27/30/6 28/27/6 30/29/6 +f 31/27/7 32/28/7 34/30/7 +f 29/28/8 28/27/8 31/32/8 +f 30/37/11 29/33/11 34/34/11 +f 27/30/9 30/29/9 33/35/9 +f 28/38/12 27/30/12 32/36/12 +o Main_Laser_Center +v 1.875000 -14.999997 -18.750002 +v 1.875000 -14.999996 -22.812502 +v 1.875000 -9.999997 -17.812502 +v 1.875000 -9.999998 -13.750002 +v -1.875000 -14.999997 -18.750002 +v -1.875000 -9.999998 -13.750002 +v -1.875000 -9.999997 -17.812502 +v -1.875000 -14.999996 -22.812502 +vt 0.789100 0.707046 +vt 0.824200 0.707046 +vt 0.781300 0.664046 +vt 0.746100 0.664046 +vt 0.886700 0.632796 +vt 0.886700 0.664046 +vt 0.851600 0.664046 +vt 0.781300 0.632796 +vt 0.746100 0.632796 +vt 0.816400 0.664046 +vt 0.816400 0.632796 +vt 0.851600 0.632796 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +vn 0.000000 -1.000000 -0.000000 +usemtl 05___Default.006 +f 35/39/13 36/40/13 37/41/13 +f 39/39/14 40/42/14 41/41/14 +f 38/43/15 40/44/15 39/45/15 +f 37/46/16 41/47/16 40/42/16 +f 36/48/17 42/49/17 41/46/17 +f 35/49/18 39/48/18 42/45/18 +f 38/42/13 35/39/13 37/41/13 +f 42/40/14 39/39/14 41/41/14 +f 35/50/15 38/43/15 39/45/15 +f 38/41/16 37/46/16 40/42/16 +f 37/41/17 36/48/17 41/46/17 +f 36/50/18 35/49/18 42/45/18 +o Lasers_Main_Laser_Base +v -18.125000 -2.500000 -1.571500 +v -18.125000 -2.499998 -10.000000 +v -14.687500 -2.499998 -10.000000 +v -14.687500 -2.500000 -1.571500 +v -18.125000 0.625000 -2.748000 +v -14.687500 0.625000 -2.748000 +v -14.687500 0.625002 -10.000000 +v -18.125000 0.625002 -10.000000 +v -18.125000 0.000003 -20.000000 +v -16.250000 -1.874997 -20.000000 +v -16.250000 -1.874998 -10.000000 +v -18.125000 0.000002 -10.000000 +v -16.250000 0.000002 -10.000000 +v -16.250000 0.000003 -20.000000 +v -18.125000 -1.874997 -20.000000 +v -18.125000 -1.874998 -10.000000 +v -17.187500 -0.937498 -10.000000 +v -17.187500 -0.937497 -20.000000 +v -13.437500 -0.937497 -20.000000 +v -13.437500 -0.937498 -10.000000 +v -16.250000 -1.874997 -20.000000 +v -18.125000 0.000003 -20.000000 +v -18.125000 0.000002 -10.000000 +v -16.250000 -1.874998 -10.000000 +v -16.250000 0.000003 -20.000000 +v -16.250000 0.000002 -10.000000 +v -18.125000 -1.874998 -10.000000 +v -18.125000 -1.874997 -20.000000 +v -17.187500 -0.937497 -20.000000 +v -17.187500 -0.937498 -10.000000 +v -13.437500 -0.937498 -10.000000 +v -13.437500 -0.937497 -20.000000 +v 1.875000 -14.062497 -17.812502 +v 1.875000 -9.062498 -12.812502 +v 1.875000 -9.062499 -7.659701 +v 1.875000 -14.062499 -7.659702 +v -1.875000 -14.062497 -17.812502 +v -1.875000 -14.062499 -7.659702 +v -1.875000 -9.062499 -7.659701 +v -1.875000 -9.062498 -12.812502 +v 18.125000 0.000002 -10.000000 +v 16.250000 -1.874998 -10.000000 +v 16.250000 -1.874997 -20.000000 +v 18.125000 0.000003 -20.000000 +v 18.125000 -1.874998 -10.000000 +v 18.125000 -1.874997 -20.000000 +v 16.250000 0.000003 -20.000000 +v 16.250000 0.000002 -10.000000 +v 13.437500 -0.937498 -10.000000 +v 13.437500 -0.937497 -20.000000 +v 17.187500 -0.937497 -20.000000 +v 17.187500 -0.937498 -10.000000 +v 14.687500 -2.500000 -1.571500 +v 14.687500 -2.499998 -10.000000 +v 18.125000 -2.499998 -10.000000 +v 18.125000 -2.500000 -1.571500 +v 18.125000 0.625002 -10.000000 +v 14.687500 0.625002 -10.000000 +v 14.687500 0.625000 -2.748000 +v 18.125000 0.625000 -2.748000 +v 16.250000 -1.874998 -10.000000 +v 18.125000 0.000002 -10.000000 +v 18.125000 0.000003 -20.000000 +v 16.250000 -1.874997 -20.000000 +v 18.125000 -1.874997 -20.000000 +v 18.125000 -1.874998 -10.000000 +v 16.250000 0.000002 -10.000000 +v 16.250000 0.000003 -20.000000 +v 13.437500 -0.937497 -20.000000 +v 13.437500 -0.937498 -10.000000 +v 17.187500 -0.937498 -10.000000 +v 17.187500 -0.937497 -20.000000 +vt 0.343800 0.921846 +vt 0.343800 0.898446 +vt 0.281300 0.898446 +vt 0.290000 0.968746 +vt 0.343800 0.968746 +vt 0.343800 0.945296 +vt 0.343800 0.922046 +vt 0.343800 0.945096 +vt 0.367200 0.945096 +vt 0.281300 0.922046 +vt 0.290000 0.945096 +vt 0.238300 0.957046 +vt 0.238300 0.851546 +vt 0.265600 0.851546 +vt 0.265600 0.957046 +vt 0.191400 0.957046 +vt 0.191400 0.851546 +vt 0.933600 0.632796 +vt 0.898400 0.632796 +vt 0.898400 0.597646 +vt 0.898400 0.566396 +vt 0.968800 0.597646 +vt 0.933600 0.664046 +vt 0.898400 0.664046 +vt 0.968800 0.632796 +vt 0.968800 0.664046 +vt 0.281300 0.921846 +vt 0.290000 0.945296 +vt 0.367200 0.922046 +vt 0.968800 0.566396 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 -0.000000 0.000000 +vn -0.707100 -0.707100 -0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.707100 0.707100 0.000000 +vn 0.707100 -0.707100 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +usemtl 05___Default.005 +f 44/51/19 45/52/19 46/53/19 +f 48/54/20 49/55/20 50/56/20 +f 44/57/21 50/58/21 49/59/21 +f 44/57/22 43/60/22 47/61/22 +f 52/62/23 53/63/23 54/64/23 +f 56/62/24 57/65/24 58/64/24 +f 60/62/19 61/66/19 62/67/19 +f 64/65/25 65/64/25 66/63/25 +f 68/63/26 69/64/26 70/65/26 +f 72/63/20 73/67/20 74/66/20 +f 76/68/27 77/69/27 78/70/27 +f 80/70/22 81/69/22 82/68/22 +f 78/71/19 80/70/19 79/72/19 +f 76/68/20 82/73/20 81/74/20 +f 75/75/28 79/76/28 82/73/28 +f 84/63/26 85/62/26 86/65/26 +f 88/65/25 89/62/25 90/63/25 +f 92/66/19 93/62/19 94/63/19 +f 96/52/19 97/51/19 98/77/19 +f 100/55/20 101/54/20 102/78/20 +f 99/58/21 97/57/21 96/79/21 +f 102/61/27 98/60/27 97/57/27 +f 104/64/24 105/65/24 106/62/24 +f 108/64/23 109/63/23 110/62/23 +f 112/67/20 113/63/20 114/62/20 +f 43/77/19 44/51/19 46/53/19 +f 47/78/20 48/54/20 50/56/20 +f 45/79/21 44/57/21 49/59/21 +f 50/58/22 44/57/22 47/61/22 +f 51/65/23 52/62/23 54/64/23 +f 55/63/24 56/62/24 58/64/24 +f 59/63/19 60/62/19 62/67/19 +f 63/62/25 64/65/25 66/63/25 +f 67/62/26 68/63/26 70/65/26 +f 71/62/20 72/63/20 74/66/20 +f 75/72/27 76/68/27 78/70/27 +f 79/72/22 80/70/22 82/68/22 +f 75/80/19 78/71/19 79/72/19 +f 77/69/20 76/68/20 81/74/20 +f 76/68/28 75/75/28 82/73/28 +f 83/64/26 84/63/26 86/65/26 +f 87/64/25 88/65/25 90/63/25 +f 91/67/19 92/66/19 94/63/19 +f 95/53/19 96/52/19 98/77/19 +f 99/56/20 100/55/20 102/78/20 +f 100/59/21 99/58/21 96/79/21 +f 99/58/27 102/61/27 97/57/27 +f 103/63/24 104/64/24 106/62/24 +f 107/65/23 108/64/23 110/62/23 +f 111/66/20 112/67/20 114/62/20 +o Hull +v 13.125000 4.375001 -9.659699 +v 11.250000 15.000001 -7.659698 +v 11.250000 14.999999 4.340302 +v 13.125000 4.375000 2.340301 +v -13.125000 4.375001 -9.659699 +v -13.125000 4.375000 2.340301 +v -11.250000 14.999999 4.340302 +v -11.250000 15.000001 -7.659698 +v -10.000000 -15.000001 3.340298 +v -5.000000 -14.999999 -7.659702 +v 5.000000 -14.999999 -7.659702 +v 10.000000 -15.000001 3.340298 +v 11.250000 -6.249998 -11.159701 +v 16.250000 -6.250000 -0.159701 +v -11.250000 -6.249998 -11.159701 +v -16.250000 -6.250000 -0.159701 +v -14.166700 -9.166702 14.340298 +v -16.250000 -6.250002 11.340299 +v -9.000000 -15.000001 3.340298 +v -9.000000 -9.166702 14.340298 +v -9.000000 -6.250002 11.340299 +v -9.000000 -6.250000 -0.159701 +v 16.250000 -6.250002 11.340299 +v 14.166700 -9.166702 14.340298 +v 9.000000 -15.000001 3.340298 +v 9.000000 -9.166702 14.340298 +v 9.000000 -6.250002 11.340299 +v 9.000000 -6.250000 -0.159701 +v -18.125000 -6.250001 8.340299 +v -18.125000 -6.250000 -0.159701 +v -6.875000 -6.250000 -2.909701 +v -9.000000 -6.250001 6.340299 +v 9.000000 -6.250001 6.340299 +v 6.875000 -6.250000 -2.909701 +v 18.125000 -6.250000 -0.159701 +v 18.125000 -6.250001 8.340299 +v -9.375000 -6.249996 -22.659702 +v -6.875000 -6.249996 -22.659702 +v 6.875000 -6.249996 -22.659702 +v 9.375000 -6.249996 -22.659702 +v -18.125000 4.375000 4.340301 +v -9.000000 4.375000 2.340301 +v -6.875000 4.375001 -6.909699 +v -18.125000 4.375000 -4.159699 +v 9.000000 4.375000 2.340301 +v 18.125000 4.375000 4.340301 +v 18.125000 4.375000 -4.159699 +v 6.875000 4.375001 -6.909699 +v -6.875000 4.375004 -26.659700 +v -9.375000 4.375004 -26.659700 +v 9.375000 4.375004 -26.659700 +v 6.875000 4.375004 -26.659700 +v 9.000000 -15.000001 3.340298 +v 9.000000 -4.500004 23.340300 +v -9.000000 -4.500004 23.340300 +v -9.000000 -15.000001 3.340298 +v 7.000000 4.124996 24.840300 +v -7.000000 4.124996 24.840300 +v -9.000000 4.500000 2.340301 +v -9.000000 -6.000000 -3.659701 +v -7.000000 12.999999 3.840302 +v 7.000000 12.999999 3.840302 +v 9.000000 4.500000 2.340301 +v 9.000000 -6.000000 -3.659701 +v 6.875000 -7.999996 -26.659702 +v 6.875000 5.166705 -31.659700 +v 6.875000 13.000001 -7.659698 +v 6.875000 -7.999999 -7.659701 +v -6.875000 -7.999996 -26.659702 +v -6.875000 -7.999999 -7.659701 +v -6.875000 13.000001 -7.659698 +v -6.875000 5.166705 -31.659700 +vt 0.082000 0.824196 +vt 0.175800 0.824196 +vt 0.160200 0.910146 +vt 0.175800 0.648446 +vt 0.257800 0.632796 +vt 0.082000 0.648446 +vt 0.000000 0.839846 +vt 0.000000 0.632796 +vt 0.448100 0.589846 +vt 0.368100 0.589846 +vt 0.327600 0.501946 +vt 0.324200 0.499996 +vt 0.351600 0.570296 +vt 0.265600 0.570296 +vt 0.498200 0.659896 +vt 0.318100 0.659896 +vt 0.238300 0.499996 +vt 0.152300 0.546896 +vt 0.175800 0.570296 +vt 0.152300 0.624996 +vt 0.152300 0.585946 +vt 0.066400 0.617196 +vt 0.175800 0.624996 +vt 0.152300 0.586046 +vt 0.265600 0.624996 +vt 0.066500 0.911996 +vt 0.088100 0.999996 +vt 0.015700 0.983396 +vt 0.242600 0.980396 +vt 0.242600 0.999946 +vt 0.545900 0.983396 +vt 0.474000 0.999946 +vt 0.495400 0.912396 +vt 0.561500 0.912396 +vt 0.320300 0.999996 +vt 0.320300 0.980546 +vt 0.273400 0.816396 +vt 0.273400 0.894546 +vt 0.343800 0.894546 +vt 0.343800 0.816396 +vt 0.410200 0.816396 +vt 0.441400 0.894546 +vt 0.375000 0.894546 +vt 0.585900 0.816396 +vt 0.617200 0.894546 +vt 0.242200 0.999996 +vt 0.320300 0.980446 +vt 0.242200 0.980446 +vt 0.652300 0.640646 +vt 0.652300 0.499996 +vt 0.496100 0.499996 +vt 0.722700 0.624996 +vt 0.722700 0.515646 +vt 0.570300 0.796896 +vt 0.722700 0.804696 +vt 0.722700 0.628896 +vt 0.789100 0.792946 +vt 0.886700 0.624996 +vt 0.886700 0.515646 +vt 0.640600 0.851546 +vt 0.851600 0.898446 +vt 0.812800 0.795646 +vt 1.000000 0.734546 +vt 1.000000 0.898446 +vt 1.000000 0.999996 +vt 0.851600 0.999996 +vt 0.750000 0.898446 +vt 0.750000 0.999996 +vt 0.562500 0.999996 +vt 0.066400 0.910146 +vt 0.257800 0.839846 +vt 0.488700 0.501946 +vt 0.066400 0.624996 +vt 0.000000 0.911996 +vt 0.496100 0.640646 +vt 0.562500 0.898446 +vn 0.984800 0.173800 0.000000 +vn -0.984800 0.173800 0.000000 +vn 0.000000 -0.185000 0.982700 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.185000 -0.982700 +vn 0.000000 -1.000000 -0.000000 +vn 0.705400 -0.632100 -0.320600 +vn 0.000000 -0.371400 -0.928500 +vn -0.705400 -0.632100 -0.320600 +vn -0.813700 -0.581200 -0.000000 +vn 0.000000 -0.883500 0.468500 +vn 0.000000 0.717000 0.697100 +vn 0.813700 -0.581200 -0.000000 +vn 0.200900 0.345100 0.916800 +vn -0.200900 0.345100 0.916800 +vn 0.988300 -0.053800 -0.142800 +vn 0.971000 -0.084200 -0.223700 +vn 1.000000 0.000000 0.000000 +vn 0.923400 -0.135200 -0.359100 +vn 0.000000 -0.352300 -0.935900 +vn -0.923400 -0.135200 -0.359100 +vn -0.988300 -0.053800 -0.142800 +vn -0.971000 -0.084200 -0.223700 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.885400 0.464800 +vn 0.000000 -0.171300 0.985200 +vn -0.990400 0.126900 0.054200 +vn -0.992700 0.110900 0.047400 +vn -0.973800 0.209500 0.088900 +vn -0.972700 0.213700 0.090600 +vn 0.000000 0.921100 0.389300 +vn 0.973600 0.209900 0.090000 +vn 0.990500 0.126400 0.054600 +vn 0.992700 0.110800 0.046800 +vn 0.000000 0.950600 -0.310300 +vn 0.000000 -0.355000 -0.934900 +vn 0.972600 0.214500 0.090000 +usemtl 05___Default +f 116/81/29 117/82/29 118/83/29 +f 120/83/30 121/82/30 122/81/30 +f 117/82/31 121/84/31 120/85/31 +f 116/81/32 122/86/32 121/84/32 +f 115/87/33 119/88/33 122/86/33 +f 124/89/34 125/90/34 126/91/34 +f 125/92/35 127/93/35 128/94/35 +f 124/89/36 129/95/36 127/96/36 +f 124/92/37 123/97/37 130/94/37 +f 123/97/38 131/98/38 132/99/38 +f 134/100/39 131/101/39 123/102/39 +f 135/103/40 132/99/40 131/104/40 +f 136/105/32 130/94/32 132/99/32 +f 126/97/41 128/94/41 137/99/41 +f 126/102/39 138/101/39 140/100/39 +f 138/101/40 137/99/40 141/103/40 +f 137/99/32 128/94/32 142/105/32 +f 144/106/34 145/107/34 146/108/34 +f 147/108/34 148/107/34 149/106/34 +f 151/109/34 152/110/34 145/107/34 +f 148/107/34 153/110/34 154/109/34 +f 156/111/32 157/112/32 158/113/32 +f 159/111/32 160/114/32 161/113/32 +f 157/112/32 163/115/32 164/116/32 +f 162/112/32 161/113/32 165/116/32 +f 146/117/42 156/118/42 155/119/42 +f 147/117/43 150/120/43 160/119/43 +f 149/121/44 161/122/45 160/123/46 +f 154/124/47 165/125/47 161/122/45 +f 153/126/48 166/115/48 165/127/48 +f 151/128/48 164/127/48 163/115/48 +f 151/124/49 144/121/50 158/122/51 +f 144/121/50 143/120/52 155/123/52 +f 168/129/53 169/130/53 170/131/53 +f 171/132/54 172/133/54 169/130/54 +f 170/134/52 169/129/55 173/135/56 +f 172/136/57 175/137/58 173/135/56 +f 171/132/59 176/138/59 175/139/59 +f 171/136/60 168/129/61 177/135/62 +f 167/134/46 178/140/46 177/135/62 +f 179/141/46 180/142/46 181/143/46 +f 183/141/52 184/144/52 185/143/52 +f 182/144/34 184/145/34 183/146/34 +f 180/147/63 186/148/63 185/149/63 +f 179/141/64 183/146/64 186/148/64 +f 115/150/29 116/81/29 118/83/29 +f 119/150/30 120/83/30 122/81/30 +f 118/151/31 117/82/31 120/85/31 +f 117/82/32 116/81/32 121/84/32 +f 116/81/33 115/87/33 122/86/33 +f 123/152/34 124/89/34 126/91/34 +f 126/97/35 125/92/35 128/94/35 +f 125/90/36 124/89/36 127/96/36 +f 129/93/37 124/92/37 130/94/37 +f 130/94/38 123/97/38 132/99/38 +f 133/153/39 134/100/39 123/102/39 +f 134/100/40 135/103/40 131/104/40 +f 135/103/32 136/105/32 132/99/32 +f 138/98/41 126/97/41 137/99/41 +f 139/153/39 126/102/39 140/100/39 +f 140/100/40 138/101/40 141/103/40 +f 141/103/32 137/99/32 142/105/32 +f 143/154/34 144/106/34 146/108/34 +f 150/154/34 147/108/34 149/106/34 +f 144/106/34 151/109/34 145/107/34 +f 149/106/34 148/107/34 154/109/34 +f 155/114/32 156/111/32 158/113/32 +f 162/112/32 159/111/32 161/113/32 +f 158/113/32 157/112/32 164/116/32 +f 166/115/32 162/112/32 165/116/32 +f 143/120/42 146/117/42 155/119/42 +f 159/118/43 147/117/43 160/119/43 +f 150/120/46 149/121/44 160/123/46 +f 149/121/44 154/124/47 161/122/45 +f 154/128/48 153/126/48 165/127/48 +f 152/126/48 151/128/48 163/115/48 +f 164/125/49 151/124/49 158/122/51 +f 158/122/51 144/121/50 155/123/52 +f 167/155/53 168/129/53 170/131/53 +f 168/129/54 171/132/54 169/130/54 +f 174/140/52 170/134/52 173/135/56 +f 169/129/55 172/136/57 173/135/56 +f 172/133/59 171/132/59 175/139/59 +f 176/137/65 171/136/60 177/135/62 +f 168/129/61 167/134/46 177/135/62 +f 182/144/46 179/141/46 181/143/46 +f 186/142/52 183/141/52 185/143/52 +f 179/141/34 182/144/34 183/146/34 +f 181/156/63 180/147/63 185/149/63 +f 180/147/64 179/141/64 186/148/64 +o HoverPad +v 11.125000 3.452799 8.250001 +v 11.125000 3.452799 6.250000 +v 11.125000 -0.547201 6.250000 +v 11.125000 -0.547201 8.250000 +v 15.125000 3.452799 8.250001 +v 15.125000 -0.547201 8.250000 +v 15.125000 -0.547201 6.250000 +v 15.125000 3.452799 6.250000 +v -10.324200 -15.089800 -1.901103 +v -13.685600 -10.361699 -3.432902 +v -11.197400 -10.361698 -8.892702 +v -7.836000 -15.089799 -7.360802 +v -8.890100 -13.858500 -1.247502 +v -12.251500 -9.130400 -2.779402 +v -9.763300 -9.130399 -8.239102 +v -6.401900 -13.858499 -6.707303 +v -8.750000 -2.916700 3.125000 +v -15.000000 3.333300 3.125000 +v -15.000000 3.333299 6.250000 +v -11.250000 -0.416701 6.250000 +v -11.250000 3.333300 3.125000 +v -17.500000 -2.916700 3.125000 +v -15.000000 -0.416701 6.250000 +v -11.250000 3.333299 6.250000 +v -11.242400 4.375002 -14.999999 +v -6.867400 4.375002 -14.999999 +v -6.867400 7.187502 -13.124999 +v -9.367400 7.187502 -13.124999 +v -9.367400 7.187501 -9.130299 +v -11.242400 4.375001 -9.659699 +v -6.867400 7.187501 -9.130299 +v -6.867400 -6.249998 -15.312501 +v -10.625000 -6.249998 -15.312501 +v -8.750000 -9.062498 -13.437502 +v -6.867400 -9.062498 -13.437502 +v -10.625000 -6.249998 -11.159701 +v -8.750000 -9.062498 -10.034702 +v -6.867400 -9.062498 -10.034702 +v -6.867400 -6.249998 -11.159701 +v 15.000000 3.333300 3.125000 +v 8.750000 -2.916700 3.125000 +v 11.250000 -0.416701 6.250000 +v 15.000000 3.333299 6.250000 +v 17.500000 -2.916700 3.125000 +v 11.250000 3.333300 3.125000 +v 11.250000 3.333299 6.250000 +v 15.000000 -0.416701 6.250000 +v 6.867400 4.375002 -14.999999 +v 11.242400 4.375002 -14.999999 +v 9.367400 7.187502 -13.124999 +v 6.867400 7.187502 -13.124999 +v 11.242400 4.375001 -9.659699 +v 9.367400 7.187501 -9.130299 +v 6.867400 7.187501 -9.130299 +v 10.625000 -6.249998 -15.312501 +v 6.867400 -6.249998 -15.312501 +v 6.867400 -9.062498 -13.437502 +v 8.750000 -9.062498 -13.437502 +v 8.750000 -9.062498 -10.034702 +v 10.625000 -6.249998 -11.159701 +v 6.867400 -9.062498 -10.034702 +v 6.867400 -6.249998 -11.159701 +v 9.585800 -7.999997 -17.039202 +v 8.585800 -6.585798 -16.039202 +v 11.414200 -6.585798 -13.210801 +v 12.414200 -7.999998 -14.210801 +v 7.585800 -10.828397 -15.039202 +v 10.414200 -10.828398 -12.210802 +v 9.414200 -9.414198 -11.210802 +v 6.585800 -9.414198 -14.039202 +v -7.585800 -10.828397 -15.039202 +v -6.585800 -9.414198 -14.039202 +v -9.414200 -9.414198 -11.210802 +v -10.414200 -10.828398 -12.210802 +v -9.585800 -7.999997 -17.039202 +v -12.414200 -7.999998 -14.210801 +v -11.414200 -6.585798 -13.210801 +v -8.585800 -6.585798 -16.039202 +v -8.585800 8.828403 -15.039198 +v -7.585800 7.414202 -14.039199 +v -9.585800 4.585803 -16.039200 +v -10.585800 6.000003 -17.039198 +v -11.414200 8.828402 -12.210798 +v -13.414200 6.000002 -14.210799 +v -12.414200 4.585803 -13.210799 +v -10.414200 7.414202 -11.210799 +v 11.414200 8.828402 -12.210798 +v 10.414200 7.414202 -11.210799 +v 12.414200 4.585803 -13.210799 +v 13.414200 6.000002 -14.210799 +v 8.585800 8.828403 -15.039198 +v 10.585800 6.000003 -17.039198 +v 9.585800 4.585803 -16.039200 +v 7.585800 7.414202 -14.039199 +v -3.000000 -11.165402 14.898698 +v 3.000000 -11.165402 14.898698 +v 3.000000 -8.376102 20.210897 +v -3.000000 -8.376102 20.210897 +v -3.000000 -9.394702 13.968898 +v 3.000000 -9.394702 13.968898 +v 3.000000 -6.605303 19.281097 +v -3.000000 -6.605303 19.281097 +v 13.679800 -10.346799 -3.430302 +v 10.318500 -15.074900 -1.898502 +v 7.830300 -15.074899 -7.358202 +v 11.191700 -10.346798 -8.890101 +v 12.245700 -9.115500 -2.776801 +v 8.884400 -13.843500 -1.244902 +v 6.396200 -13.843499 -6.704702 +v 9.757600 -9.115499 -8.236502 +v -15.125000 3.452799 8.250001 +v -15.125000 3.452799 6.250000 +v -15.125000 -0.547201 6.250000 +v -15.125000 -0.547201 8.250000 +v -11.125000 3.452799 8.250001 +v -11.125000 -0.547201 8.250000 +v -11.125000 -0.547201 6.250000 +v -11.125000 3.452799 6.250000 +vt 0.308600 0.808596 +vt 0.308600 0.777346 +vt 0.324200 0.777346 +vt 0.324200 0.808596 +vt 0.355500 0.808596 +vt 0.277300 0.777346 +vt 0.277300 0.808596 +vt 0.531300 0.714846 +vt 0.578100 0.714846 +vt 0.578100 0.761696 +vt 0.515600 0.714846 +vt 0.531300 0.761696 +vt 0.515600 0.761696 +vt 0.320300 0.687496 +vt 0.320300 0.714846 +vt 0.351600 0.714846 +vt 0.371100 0.687496 +vt 0.269500 0.687496 +vt 0.289100 0.687496 +vt 0.289100 0.707046 +vt 0.316400 0.726546 +vt 0.269500 0.726546 +vt 0.320300 0.707046 +vt 0.269500 0.691396 +vt 0.304700 0.726546 +vt 0.304700 0.707046 +vt 0.289100 0.691396 +vt 0.308600 0.691396 +vt 0.320300 0.722646 +vt 0.281300 0.722646 +vt 0.304700 0.691396 +vt 0.355500 0.777346 +vt 0.261700 0.691396 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn -0.717100 -0.615700 -0.326800 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.560200 -0.788000 0.255300 +vn 0.707100 0.707100 0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 -0.554700 0.832100 +vn 0.832100 -0.554700 -0.000000 +vn 0.000000 0.554700 0.832100 +vn -0.832100 -0.554700 0.000000 +vn -0.832100 0.554700 0.000000 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 -0.000000 0.707100 +vn -0.500000 0.707100 0.500000 +vn -0.707100 0.000000 -0.707100 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 -0.000000 0.707100 +vn 0.500000 0.707100 0.500000 +vn 0.707100 0.000000 -0.707100 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 0.000000 0.464900 0.885400 +vn 0.717100 -0.615700 -0.326800 +vn 0.414700 -0.000000 0.910000 +vn -0.560200 -0.788000 0.255300 +vn -0.560300 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +vn 0.560200 0.788000 -0.255300 +vn 0.717100 -0.615600 -0.326800 +usemtl 05___Default +f 188/157/66 189/158/66 190/159/66 +f 192/159/67 193/158/67 194/157/67 +f 190/159/68 192/160/68 191/161/68 +f 189/158/69 193/157/69 192/160/69 +f 188/162/70 194/163/70 193/157/70 +f 187/159/71 191/160/71 194/157/71 +f 195/164/72 196/165/72 197/166/72 +f 200/167/73 196/164/73 195/168/73 +f 200/169/74 201/167/74 197/164/74 +f 201/169/75 202/167/75 198/164/75 +f 199/167/76 195/164/76 198/168/76 +f 204/170/77 205/171/77 206/172/77 +f 207/170/78 208/173/78 209/172/78 +f 212/174/79 213/175/79 214/176/79 +f 216/177/80 211/178/80 214/176/80 +f 215/179/69 214/176/69 213/175/69 +f 218/180/81 219/178/81 220/176/81 +f 222/181/82 219/178/82 220/176/82 +f 223/182/69 220/176/69 221/183/69 +f 225/184/67 224/185/67 221/186/67 +f 226/170/78 227/173/78 228/172/78 +f 231/170/77 232/171/77 233/172/77 +f 234/174/79 235/178/79 236/176/79 +f 238/177/82 239/179/82 236/176/82 +f 240/170/69 237/175/69 236/176/69 +f 242/180/81 243/183/81 244/176/81 +f 246/181/83 241/178/83 244/176/83 +f 247/187/69 243/183/69 244/176/69 +f 248/187/66 242/180/66 243/183/66 +f 250/157/84 251/158/84 252/159/84 +f 254/159/85 255/158/85 256/157/85 +f 252/159/86 254/160/86 253/161/86 +f 251/158/87 255/157/87 254/160/87 +f 250/162/88 256/163/88 255/157/88 +f 250/158/89 249/159/89 253/160/89 +f 257/160/90 258/157/90 259/158/90 +f 262/159/91 263/158/91 264/157/91 +f 260/159/92 262/160/92 261/161/92 +f 260/159/93 259/158/93 263/157/93 +f 259/158/94 258/162/94 264/163/94 +f 257/159/95 261/160/95 264/157/95 +f 265/160/95 266/157/95 267/158/95 +f 269/160/93 270/159/93 271/158/93 +f 268/159/91 270/160/91 269/161/91 +f 268/159/92 267/158/92 271/157/92 +f 266/162/90 272/163/90 271/157/90 +f 265/159/94 269/160/94 272/157/94 +f 273/160/87 274/157/87 275/158/87 +f 277/160/89 278/159/89 279/158/89 +f 273/188/84 276/159/84 278/160/84 +f 275/158/86 279/157/86 278/160/86 +f 274/162/85 280/163/85 279/157/85 +f 274/158/88 273/159/88 277/160/88 +f 282/165/96 283/166/96 284/168/96 +f 286/167/97 282/164/97 281/168/97 +f 287/167/67 283/164/67 282/168/67 +f 288/167/98 284/164/98 283/168/98 +f 288/169/66 285/167/66 281/164/66 +f 290/165/99 291/166/99 292/168/99 +f 294/167/100 290/164/100 289/168/100 +f 294/169/101 295/167/102 291/164/102 +f 295/169/103 296/167/103 292/164/103 +f 296/169/104 293/167/104 289/164/104 +f 298/157/66 299/158/66 300/159/66 +f 302/159/67 303/158/67 304/157/67 +f 300/159/68 302/160/68 301/161/68 +f 299/158/69 303/157/69 302/160/69 +f 298/162/70 304/163/70 303/157/70 +f 297/159/71 301/160/71 304/157/71 +f 187/160/66 188/157/66 190/159/66 +f 191/160/67 192/159/67 194/157/67 +f 187/188/68 190/159/68 191/161/68 +f 190/159/69 189/158/69 192/160/69 +f 189/158/70 188/162/70 193/157/70 +f 188/158/71 187/159/71 194/157/71 +f 198/168/72 195/164/72 197/166/72 +f 199/169/73 200/167/73 195/168/73 +f 196/168/74 200/169/74 197/164/74 +f 197/168/75 201/169/75 198/164/75 +f 202/169/76 199/167/76 198/168/76 +f 203/173/77 204/170/77 206/172/77 +f 210/171/78 207/170/78 209/172/78 +f 211/178/79 212/174/79 214/176/79 +f 215/179/80 216/177/80 214/176/80 +f 217/170/69 215/179/69 213/175/69 +f 221/183/81 218/180/81 220/176/81 +f 223/182/82 222/181/82 220/176/82 +f 224/187/69 223/182/69 221/183/69 +f 218/189/67 225/184/67 221/186/67 +f 229/171/78 226/170/78 228/172/78 +f 230/173/77 231/170/77 233/172/77 +f 237/175/79 234/174/79 236/176/79 +f 235/178/82 238/177/82 236/176/82 +f 239/179/69 240/170/69 236/176/69 +f 241/178/81 242/180/81 244/176/81 +f 245/182/83 246/181/83 244/176/83 +f 245/182/69 247/187/69 244/176/69 +f 247/187/66 248/187/66 243/183/66 +f 249/160/84 250/157/84 252/159/84 +f 253/160/85 254/159/85 256/157/85 +f 249/188/86 252/159/86 253/161/86 +f 252/159/87 251/158/87 254/160/87 +f 251/158/88 250/162/88 255/157/88 +f 256/157/89 250/158/89 253/160/89 +f 260/159/90 257/160/90 259/158/90 +f 261/160/91 262/159/91 264/157/91 +f 257/188/92 260/159/92 261/161/92 +f 262/160/93 260/159/93 263/157/93 +f 263/157/94 259/158/94 264/163/94 +f 258/158/95 257/159/95 264/157/95 +f 268/159/95 265/160/95 267/158/95 +f 272/157/93 269/160/93 271/158/93 +f 265/188/91 268/159/91 269/161/91 +f 270/160/92 268/159/92 271/157/92 +f 267/158/90 266/162/90 271/157/90 +f 266/158/94 265/159/94 272/157/94 +f 276/159/87 273/160/87 275/158/87 +f 280/157/89 277/160/89 279/158/89 +f 277/161/84 273/188/84 278/160/84 +f 276/159/86 275/158/86 278/160/86 +f 275/158/85 274/162/85 279/157/85 +f 280/157/88 274/158/88 277/160/88 +f 281/164/96 282/165/96 284/168/96 +f 285/169/97 286/167/97 281/168/97 +f 286/169/67 287/167/67 282/168/67 +f 287/169/98 288/167/98 283/168/98 +f 284/168/66 288/169/66 281/164/66 +f 289/164/105 290/165/99 292/168/99 +f 293/169/100 294/167/100 289/168/100 +f 290/168/101 294/169/101 291/164/102 +f 291/168/103 295/169/103 292/164/103 +f 292/168/104 296/169/104 289/164/104 +f 297/160/66 298/157/66 300/159/66 +f 301/160/67 302/159/67 304/157/67 +f 297/188/68 300/159/68 301/161/68 +f 300/159/69 299/158/69 302/160/69 +f 299/158/70 298/162/70 303/157/70 +f 298/158/71 297/159/71 304/157/71 +o Glow +v 11.623000 -10.260598 -9.636102 +v 14.525800 -10.260599 -3.266402 +v 10.604200 -15.776700 -1.479203 +v 7.701400 -15.776699 -7.849002 +v 9.830300 -8.721498 -8.819201 +v 12.733200 -8.721500 -2.449401 +v 8.811600 -14.237500 -0.662302 +v 5.908700 -14.237499 -7.032002 +v -7.707100 -15.791599 -7.851603 +v -10.610000 -15.791600 -1.481803 +v -14.531600 -10.275499 -3.269002 +v -11.628700 -10.275498 -9.638701 +v -5.914500 -14.252499 -7.034602 +v -8.817300 -14.252500 -0.664902 +v -12.738900 -8.736400 -2.452001 +v -9.836100 -8.736398 -8.821801 +v -7.232200 -11.535497 -15.392802 +v -5.982200 -9.767798 -14.142802 +v -9.517800 -9.767798 -10.607202 +v -10.767800 -11.535498 -11.857202 +v -9.732200 -7.999997 -17.892801 +v -13.267800 -7.999998 -14.357201 +v -12.017800 -6.232198 -13.107201 +v -8.482200 -6.232197 -16.642801 +v 11.767800 9.535501 -11.857198 +v 10.517800 7.767802 -10.607199 +v 13.017800 4.232202 -13.107199 +v 14.267800 6.000002 -14.357199 +v 8.232200 9.535502 -15.392798 +v 10.732200 6.000003 -17.892797 +v 9.482200 4.232203 -16.642799 +v 6.982200 7.767802 -14.142799 +v 10.625000 3.952799 8.750001 +v 10.625000 3.952799 6.250000 +v 10.625000 -1.047201 6.250000 +v 10.625000 -1.047201 8.750000 +v 15.625000 3.952799 8.750001 +v 15.625000 -1.047201 8.750000 +v 15.625000 -1.047201 6.250000 +v 15.625000 3.952799 6.250000 +v -3.500000 -11.840503 14.688398 +v 3.500000 -11.840503 14.688398 +v 3.500000 -8.586304 20.885998 +v -3.500000 -8.586304 20.885998 +v -3.500000 -9.627102 13.526198 +v 3.500000 -9.627102 13.526198 +v 3.500000 -6.372903 19.723799 +v -3.500000 -6.372903 19.723799 +v -8.232200 9.535502 -15.392798 +v -6.982200 7.767802 -14.142799 +v -9.482200 4.232203 -16.642799 +v -10.732200 6.000003 -17.892797 +v -11.767800 9.535501 -11.857198 +v -14.267800 6.000002 -14.357199 +v -13.017800 4.232202 -13.107199 +v -10.517800 7.767802 -10.607199 +v 9.732200 -7.999997 -17.892801 +v 8.482200 -6.232197 -16.642801 +v 12.017800 -6.232198 -13.107201 +v 13.267800 -7.999998 -14.357201 +v 7.232200 -11.535497 -15.392802 +v 10.767800 -11.535498 -11.857202 +v 9.517800 -9.767798 -10.607202 +v 5.982200 -9.767798 -14.142802 +v -15.625000 3.952799 8.750001 +v -15.625000 3.952799 6.250000 +v -15.625000 -1.047201 6.250000 +v -15.625000 -1.047201 8.750000 +v -10.625000 3.952799 8.750001 +v -10.625000 -1.047201 8.750000 +v -10.625000 -1.047201 6.250000 +v -10.625000 3.952799 6.250000 +vt 0.589800 0.652346 +vt 0.589800 0.707046 +vt 0.535200 0.707046 +vt 0.515600 0.652346 +vt 0.535200 0.652346 +vt 0.515600 0.707046 +vt 0.293000 0.769546 +vt 0.277300 0.769546 +vt 0.277300 0.730446 +vt 0.293000 0.730446 +vt 0.332000 0.730446 +vt 0.332000 0.769546 +vn 0.717100 -0.615700 -0.326800 +vn 0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 0.910000 +vn -0.560200 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +vn -0.717100 -0.615700 -0.326800 +vn 0.560200 -0.788000 0.255300 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 -0.000000 0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.707100 -0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.500000 0.707100 -0.500000 +vn 0.500000 -0.707100 -0.500000 +vn -0.500000 0.707100 0.500000 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 0.000000 0.464900 0.885400 +vn 0.500000 0.707100 0.500000 +vn -0.500000 -0.707100 0.500000 +vn -0.560300 -0.788000 0.255300 +usemtl Material__2 +f 306/190/106 307/191/106 308/192/106 +f 310/193/107 306/194/107 305/192/107 +f 311/193/108 307/194/108 306/192/108 +f 311/195/109 312/193/109 308/194/109 +f 309/193/110 305/194/110 308/192/110 +f 314/190/111 315/191/111 316/192/111 +f 318/193/112 314/194/112 313/192/112 +f 319/193/113 315/194/113 314/192/113 +f 319/195/114 320/193/114 316/194/114 +f 320/195/115 317/193/115 313/194/115 +f 321/196/116 322/197/116 323/198/116 +f 326/199/117 327/198/117 328/197/117 +f 324/200/118 326/201/118 325/196/118 +f 324/196/119 323/197/119 327/198/119 +f 321/199/120 325/196/120 328/197/120 +f 329/196/121 330/197/121 331/198/121 +f 333/196/122 334/199/122 335/198/122 +f 329/199/123 332/200/123 334/201/123 +f 331/197/124 335/198/124 334/199/124 +f 329/199/125 333/196/125 336/197/125 +f 338/197/126 339/198/126 340/199/126 +f 342/199/127 343/198/127 344/197/127 +f 340/200/128 342/201/128 341/196/128 +f 339/197/129 343/198/129 342/199/129 +f 337/199/130 341/196/130 344/197/130 +f 346/190/131 347/191/131 348/192/131 +f 350/193/132 346/194/132 345/192/132 +f 351/193/127 347/194/127 346/192/127 +f 352/193/133 348/194/133 347/192/133 +f 352/195/126 349/193/126 345/194/126 +f 353/196/120 354/197/120 355/198/120 +f 357/196/119 358/199/119 359/198/119 +f 356/200/117 358/201/117 357/196/117 +f 356/196/118 355/197/118 359/198/118 +f 353/199/134 357/196/134 360/197/134 +f 361/196/123 362/197/123 363/198/123 +f 366/199/135 367/198/135 368/197/135 +f 361/199/124 364/200/124 366/201/124 +f 363/197/121 367/198/121 366/199/121 +f 362/198/122 361/199/122 365/196/122 +f 370/197/126 371/198/126 372/199/126 +f 374/199/127 375/198/127 376/197/127 +f 372/200/128 374/201/128 373/196/128 +f 371/197/129 375/198/129 374/199/129 +f 369/199/130 373/196/130 376/197/130 +f 305/194/106 306/190/106 308/192/106 +f 309/195/107 310/193/107 305/192/107 +f 310/195/108 311/193/108 306/192/108 +f 307/192/136 311/195/109 308/194/109 +f 312/195/110 309/193/110 308/192/110 +f 313/194/111 314/190/111 316/192/111 +f 317/195/112 318/193/112 313/192/112 +f 318/195/113 319/193/113 314/192/113 +f 315/192/114 319/195/114 316/194/114 +f 316/192/115 320/195/115 313/194/115 +f 324/199/116 321/196/116 323/198/116 +f 325/196/117 326/199/117 328/197/117 +f 321/199/118 324/200/118 325/196/118 +f 326/199/119 324/196/119 327/198/119 +f 322/198/120 321/199/120 328/197/120 +f 332/199/121 329/196/121 331/198/121 +f 336/197/122 333/196/122 335/198/122 +f 333/196/123 329/199/123 334/201/123 +f 332/196/124 331/197/124 334/199/124 +f 330/198/125 329/199/125 336/197/125 +f 337/196/126 338/197/126 340/199/126 +f 341/196/127 342/199/127 344/197/127 +f 337/199/128 340/200/128 341/196/128 +f 340/196/129 339/197/129 342/199/129 +f 338/198/130 337/199/130 344/197/130 +f 345/194/131 346/190/131 348/192/131 +f 349/195/132 350/193/132 345/192/132 +f 350/195/127 351/193/127 346/192/127 +f 351/195/133 352/193/133 347/192/133 +f 348/192/126 352/195/126 345/194/126 +f 356/199/120 353/196/120 355/198/120 +f 360/197/119 357/196/119 359/198/119 +f 353/199/117 356/200/117 357/196/117 +f 358/199/118 356/196/118 359/198/118 +f 354/198/134 353/199/134 360/197/134 +f 364/199/123 361/196/123 363/198/123 +f 365/196/135 366/199/135 368/197/135 +f 365/196/124 361/199/124 366/201/124 +f 364/196/121 363/197/121 366/199/121 +f 368/197/122 362/198/122 365/196/122 +f 369/196/126 370/197/126 372/199/126 +f 373/196/127 374/199/127 376/197/127 +f 369/199/128 372/200/128 373/196/128 +f 372/196/129 371/197/129 374/199/129 +f 370/198/130 369/199/130 376/197/130 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.mtl new file mode 100644 index 00000000..604f718d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.mtl @@ -0,0 +1,38 @@ +# Blender MTL File: 'astroMiner_OFF.blend' +# Material Count: 6 + +newmtl 05___Default +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.004 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.005 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.006 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.007 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.008 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.obj new file mode 100644 index 00000000..1360f913 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.obj @@ -0,0 +1,942 @@ +# Blender v2.76 (sub 0) OBJ File: 'astroMiner_OFF.blend' +# www.blender.org +mtllib astro_miner_full_off.mtl +o Main_Laser_Left_Guard +v -3.750000 -14.374997 -19.375002 +v -3.750000 -8.749996 -25.000002 +v -3.750000 -8.749999 -7.500001 +v -3.750000 -14.374999 -7.500002 +v -5.000000 -14.374997 -19.375002 +v -5.000000 -14.374999 -7.500002 +v -5.000000 -8.749999 -7.500001 +v -5.000000 -8.749996 -25.000002 +vt 0.398400 0.792946 +vt 0.351600 0.746096 +vt 0.500000 0.746096 +vt 0.398400 0.687496 +vt 0.500000 0.687496 +vt 0.500000 0.734396 +vt 0.500000 0.675796 +vt 0.351600 0.734396 +vt 0.398400 0.675796 +vt 0.293000 0.687496 +vt 0.500000 0.792946 +vt 0.293000 0.675796 +vn 1.000000 -0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.707100 -0.707100 +usemtl 05___Default.008 +f 1/1/1 2/2/1 3/3/1 +f 5/4/2 6/5/2 7/6/2 +f 4/7/3 6/5/3 5/4/3 +f 2/2/4 8/8/4 7/6/4 +f 1/9/5 5/4/5 8/10/5 +f 4/11/1 1/1/1 3/3/1 +f 8/8/2 5/4/2 7/6/2 +f 1/9/3 4/7/3 5/4/3 +f 3/3/4 2/2/4 7/6/4 +f 2/12/5 1/9/5 8/10/5 +o Main_Laser_Front +v 0.000000 -9.999993 -40.000000 +v 0.000000 -10.937493 -40.000000 +v 0.000000 -10.937495 -31.875002 +v 0.000000 -9.999995 -31.875002 +v -0.937500 -12.812493 -40.000004 +v -0.937500 -13.749993 -40.000004 +v -0.937500 -13.749995 -31.875002 +v -0.937500 -12.812495 -31.875002 +v 0.937500 -12.812495 -31.875002 +v 0.937500 -12.812493 -40.000004 +v 0.937500 -13.749993 -40.000004 +v 0.937500 -13.749995 -31.875002 +v 0.937500 -10.937493 -40.000000 +v 0.937500 -10.937497 -17.500002 +v 0.937500 -12.812497 -17.500002 +v -0.937500 -12.812497 -17.500002 +v -0.937500 -10.937497 -17.500002 +v -0.937500 -10.937493 -40.000000 +v -0.937500 -14.999995 -31.875002 +v -0.937500 -15.937495 -30.937502 +v -0.937500 -15.937497 -19.687502 +v -0.937500 -14.999997 -18.750002 +v 0.937500 -15.937497 -19.687502 +v 0.937500 -15.937495 -30.937502 +v 0.937500 -14.999995 -31.875002 +v 0.937500 -14.999997 -18.750002 +vt 0.808600 0.851546 +vt 0.808600 0.843746 +vt 0.746100 0.843746 +vt 0.808600 0.867196 +vt 0.636700 0.867196 +vt 0.636700 0.851546 +vt 0.636700 0.882796 +vt 0.808600 0.882796 +vt 0.824200 0.867196 +vt 0.808600 0.890646 +vt 0.746100 0.890646 +vt 0.746100 0.882796 +vt 0.746100 0.851546 +vt 0.824200 0.882796 +vt 0.949200 0.683596 +vt 0.855500 0.683596 +vt 0.847700 0.691396 +vt 0.957000 0.691396 +vt 0.949200 0.667946 +vt 0.855500 0.667946 +vt 0.847700 0.707046 +vt 0.839800 0.691396 +vt 0.957000 0.707046 +vt 0.964800 0.707046 +vt 0.839800 0.707046 +vt 0.964800 0.691396 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.707100 -0.707100 +usemtl 05___Default.007 +f 18/13/6 19/14/6 20/15/6 +f 21/16/7 22/17/7 23/18/7 +f 24/18/6 25/17/6 26/16/6 +f 23/19/8 24/17/8 13/16/8 +f 21/16/9 26/20/9 25/19/9 +f 18/21/10 13/16/10 26/20/10 +f 9/22/7 12/23/7 11/24/7 +f 13/13/7 16/25/7 15/15/7 +f 17/25/6 18/13/6 20/15/6 +f 18/13/7 21/16/7 23/18/7 +f 13/13/6 24/18/6 26/16/6 +f 18/20/8 23/19/8 13/16/8 +f 22/17/9 21/16/9 25/19/9 +f 21/26/10 18/21/10 26/20/10 +f 10/20/7 9/22/7 11/24/7 +f 14/14/7 13/13/7 15/15/7 +usemtl 05___Default.004 +f 28/27/6 29/28/6 30/29/6 +f 32/28/7 33/29/7 34/30/7 +f 28/27/8 32/31/8 31/32/8 +f 29/33/11 31/29/11 34/34/11 +f 30/29/9 34/33/9 33/35/9 +f 27/30/12 33/35/12 32/36/12 +f 27/30/6 28/27/6 30/29/6 +f 31/27/7 32/28/7 34/30/7 +f 29/28/8 28/27/8 31/32/8 +f 30/37/11 29/33/11 34/34/11 +f 27/30/9 30/29/9 33/35/9 +f 28/38/12 27/30/12 32/36/12 +o Main_Laser_Center +v 1.875000 -14.999997 -18.750002 +v 1.875000 -14.999996 -22.812502 +v 1.875000 -9.999997 -17.812502 +v 1.875000 -9.999998 -13.750002 +v -1.875000 -14.999997 -18.750002 +v -1.875000 -9.999998 -13.750002 +v -1.875000 -9.999997 -17.812502 +v -1.875000 -14.999996 -22.812502 +vt 0.789100 0.707046 +vt 0.824200 0.707046 +vt 0.781300 0.664046 +vt 0.746100 0.664046 +vt 0.886700 0.632796 +vt 0.886700 0.664046 +vt 0.851600 0.664046 +vt 0.781300 0.632796 +vt 0.746100 0.632796 +vt 0.816400 0.664046 +vt 0.816400 0.632796 +vt 0.851600 0.632796 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +vn 0.000000 -1.000000 -0.000000 +usemtl 05___Default.006 +f 35/39/13 36/40/13 37/41/13 +f 39/39/14 40/42/14 41/41/14 +f 38/43/15 40/44/15 39/45/15 +f 37/46/16 41/47/16 40/42/16 +f 36/48/17 42/49/17 41/46/17 +f 35/49/18 39/48/18 42/45/18 +f 38/42/13 35/39/13 37/41/13 +f 42/40/14 39/39/14 41/41/14 +f 35/50/15 38/43/15 39/45/15 +f 38/41/16 37/46/16 40/42/16 +f 37/41/17 36/48/17 41/46/17 +f 36/50/18 35/49/18 42/45/18 +o Lasers_Main_Laser_Base +v -18.125000 -2.500000 -1.571500 +v -18.125000 -2.499998 -10.000000 +v -14.687500 -2.499998 -10.000000 +v -14.687500 -2.500000 -1.571500 +v -18.125000 0.625000 -2.748000 +v -14.687500 0.625000 -2.748000 +v -14.687500 0.625002 -10.000000 +v -18.125000 0.625002 -10.000000 +v -18.125000 0.000003 -20.000000 +v -16.250000 -1.874997 -20.000000 +v -16.250000 -1.874998 -10.000000 +v -18.125000 0.000002 -10.000000 +v -16.250000 0.000002 -10.000000 +v -16.250000 0.000003 -20.000000 +v -18.125000 -1.874997 -20.000000 +v -18.125000 -1.874998 -10.000000 +v -17.187500 -0.937498 -10.000000 +v -17.187500 -0.937497 -20.000000 +v -13.437500 -0.937497 -20.000000 +v -13.437500 -0.937498 -10.000000 +v -16.250000 -1.874997 -20.000000 +v -18.125000 0.000003 -20.000000 +v -18.125000 0.000002 -10.000000 +v -16.250000 -1.874998 -10.000000 +v -16.250000 0.000003 -20.000000 +v -16.250000 0.000002 -10.000000 +v -18.125000 -1.874998 -10.000000 +v -18.125000 -1.874997 -20.000000 +v -17.187500 -0.937497 -20.000000 +v -17.187500 -0.937498 -10.000000 +v -13.437500 -0.937498 -10.000000 +v -13.437500 -0.937497 -20.000000 +v 1.875000 -14.062497 -17.812502 +v 1.875000 -9.062498 -12.812502 +v 1.875000 -9.062499 -7.659701 +v 1.875000 -14.062499 -7.659702 +v -1.875000 -14.062497 -17.812502 +v -1.875000 -14.062499 -7.659702 +v -1.875000 -9.062499 -7.659701 +v -1.875000 -9.062498 -12.812502 +v 18.125000 0.000002 -10.000000 +v 16.250000 -1.874998 -10.000000 +v 16.250000 -1.874997 -20.000000 +v 18.125000 0.000003 -20.000000 +v 18.125000 -1.874998 -10.000000 +v 18.125000 -1.874997 -20.000000 +v 16.250000 0.000003 -20.000000 +v 16.250000 0.000002 -10.000000 +v 13.437500 -0.937498 -10.000000 +v 13.437500 -0.937497 -20.000000 +v 17.187500 -0.937497 -20.000000 +v 17.187500 -0.937498 -10.000000 +v 14.687500 -2.500000 -1.571500 +v 14.687500 -2.499998 -10.000000 +v 18.125000 -2.499998 -10.000000 +v 18.125000 -2.500000 -1.571500 +v 18.125000 0.625002 -10.000000 +v 14.687500 0.625002 -10.000000 +v 14.687500 0.625000 -2.748000 +v 18.125000 0.625000 -2.748000 +v 16.250000 -1.874998 -10.000000 +v 18.125000 0.000002 -10.000000 +v 18.125000 0.000003 -20.000000 +v 16.250000 -1.874997 -20.000000 +v 18.125000 -1.874997 -20.000000 +v 18.125000 -1.874998 -10.000000 +v 16.250000 0.000002 -10.000000 +v 16.250000 0.000003 -20.000000 +v 13.437500 -0.937497 -20.000000 +v 13.437500 -0.937498 -10.000000 +v 17.187500 -0.937498 -10.000000 +v 17.187500 -0.937497 -20.000000 +vt 0.343800 0.921846 +vt 0.343800 0.898446 +vt 0.281300 0.898446 +vt 0.290000 0.968746 +vt 0.343800 0.968746 +vt 0.343800 0.945296 +vt 0.343800 0.922046 +vt 0.343800 0.945096 +vt 0.367200 0.945096 +vt 0.281300 0.922046 +vt 0.290000 0.945096 +vt 0.238300 0.957046 +vt 0.238300 0.851546 +vt 0.265600 0.851546 +vt 0.265600 0.957046 +vt 0.191400 0.957046 +vt 0.191400 0.851546 +vt 0.933600 0.632796 +vt 0.898400 0.632796 +vt 0.898400 0.597646 +vt 0.898400 0.566396 +vt 0.968800 0.597646 +vt 0.933600 0.664046 +vt 0.898400 0.664046 +vt 0.968800 0.632796 +vt 0.968800 0.664046 +vt 0.281300 0.921846 +vt 0.290000 0.945296 +vt 0.367200 0.922046 +vt 0.968800 0.566396 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 -0.000000 0.000000 +vn -0.707100 -0.707100 -0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.707100 0.707100 0.000000 +vn 0.707100 -0.707100 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +usemtl 05___Default.005 +f 44/51/19 45/52/19 46/53/19 +f 48/54/20 49/55/20 50/56/20 +f 44/57/21 50/58/21 49/59/21 +f 44/57/22 43/60/22 47/61/22 +f 52/62/23 53/63/23 54/64/23 +f 56/62/24 57/65/24 58/64/24 +f 60/62/19 61/66/19 62/67/19 +f 64/65/25 65/64/25 66/63/25 +f 68/63/26 69/64/26 70/65/26 +f 72/63/20 73/67/20 74/66/20 +f 76/68/27 77/69/27 78/70/27 +f 80/70/22 81/69/22 82/68/22 +f 78/71/19 80/70/19 79/72/19 +f 76/68/20 82/73/20 81/74/20 +f 75/75/28 79/76/28 82/73/28 +f 84/63/26 85/62/26 86/65/26 +f 88/65/25 89/62/25 90/63/25 +f 92/66/19 93/62/19 94/63/19 +f 96/52/19 97/51/19 98/77/19 +f 100/55/20 101/54/20 102/78/20 +f 99/58/21 97/57/21 96/79/21 +f 102/61/27 98/60/27 97/57/27 +f 104/64/24 105/65/24 106/62/24 +f 108/64/23 109/63/23 110/62/23 +f 112/67/20 113/63/20 114/62/20 +f 43/77/19 44/51/19 46/53/19 +f 47/78/20 48/54/20 50/56/20 +f 45/79/21 44/57/21 49/59/21 +f 50/58/22 44/57/22 47/61/22 +f 51/65/23 52/62/23 54/64/23 +f 55/63/24 56/62/24 58/64/24 +f 59/63/19 60/62/19 62/67/19 +f 63/62/25 64/65/25 66/63/25 +f 67/62/26 68/63/26 70/65/26 +f 71/62/20 72/63/20 74/66/20 +f 75/72/27 76/68/27 78/70/27 +f 79/72/22 80/70/22 82/68/22 +f 75/80/19 78/71/19 79/72/19 +f 77/69/20 76/68/20 81/74/20 +f 76/68/28 75/75/28 82/73/28 +f 83/64/26 84/63/26 86/65/26 +f 87/64/25 88/65/25 90/63/25 +f 91/67/19 92/66/19 94/63/19 +f 95/53/19 96/52/19 98/77/19 +f 99/56/20 100/55/20 102/78/20 +f 100/59/21 99/58/21 96/79/21 +f 99/58/27 102/61/27 97/57/27 +f 103/63/24 104/64/24 106/62/24 +f 107/65/23 108/64/23 110/62/23 +f 111/66/20 112/67/20 114/62/20 +o Hull +v 13.125000 4.375001 -9.659699 +v 11.250000 15.000001 -7.659698 +v 11.250000 14.999999 4.340302 +v 13.125000 4.375000 2.340301 +v -13.125000 4.375001 -9.659699 +v -13.125000 4.375000 2.340301 +v -11.250000 14.999999 4.340302 +v -11.250000 15.000001 -7.659698 +v -10.000000 -15.000001 3.340298 +v -5.000000 -14.999999 -7.659702 +v 5.000000 -14.999999 -7.659702 +v 10.000000 -15.000001 3.340298 +v 11.250000 -6.249998 -11.159701 +v 16.250000 -6.250000 -0.159701 +v -11.250000 -6.249998 -11.159701 +v -16.250000 -6.250000 -0.159701 +v -14.166700 -9.166702 14.340298 +v -16.250000 -6.250002 11.340299 +v -9.000000 -15.000001 3.340298 +v -9.000000 -9.166702 14.340298 +v -9.000000 -6.250002 11.340299 +v -9.000000 -6.250000 -0.159701 +v 16.250000 -6.250002 11.340299 +v 14.166700 -9.166702 14.340298 +v 9.000000 -15.000001 3.340298 +v 9.000000 -9.166702 14.340298 +v 9.000000 -6.250002 11.340299 +v 9.000000 -6.250000 -0.159701 +v -18.125000 -6.250001 8.340299 +v -18.125000 -6.250000 -0.159701 +v -6.875000 -6.250000 -2.909701 +v -9.000000 -6.250001 6.340299 +v 9.000000 -6.250001 6.340299 +v 6.875000 -6.250000 -2.909701 +v 18.125000 -6.250000 -0.159701 +v 18.125000 -6.250001 8.340299 +v -9.375000 -6.249996 -22.659702 +v -6.875000 -6.249996 -22.659702 +v 6.875000 -6.249996 -22.659702 +v 9.375000 -6.249996 -22.659702 +v -18.125000 4.375000 4.340301 +v -9.000000 4.375000 2.340301 +v -6.875000 4.375001 -6.909699 +v -18.125000 4.375000 -4.159699 +v 9.000000 4.375000 2.340301 +v 18.125000 4.375000 4.340301 +v 18.125000 4.375000 -4.159699 +v 6.875000 4.375001 -6.909699 +v -6.875000 4.375004 -26.659700 +v -9.375000 4.375004 -26.659700 +v 9.375000 4.375004 -26.659700 +v 6.875000 4.375004 -26.659700 +v 9.000000 -15.000001 3.340298 +v 9.000000 -4.500004 23.340300 +v -9.000000 -4.500004 23.340300 +v -9.000000 -15.000001 3.340298 +v 7.000000 4.124996 24.840300 +v -7.000000 4.124996 24.840300 +v -9.000000 4.500000 2.340301 +v -9.000000 -6.000000 -3.659701 +v -7.000000 12.999999 3.840302 +v 7.000000 12.999999 3.840302 +v 9.000000 4.500000 2.340301 +v 9.000000 -6.000000 -3.659701 +v 6.875000 -7.999996 -26.659702 +v 6.875000 5.166705 -31.659700 +v 6.875000 13.000001 -7.659698 +v 6.875000 -7.999999 -7.659701 +v -6.875000 -7.999996 -26.659702 +v -6.875000 -7.999999 -7.659701 +v -6.875000 13.000001 -7.659698 +v -6.875000 5.166705 -31.659700 +vt 0.082000 0.824196 +vt 0.175800 0.824196 +vt 0.160200 0.910146 +vt 0.175800 0.648446 +vt 0.257800 0.632796 +vt 0.082000 0.648446 +vt 0.000000 0.839846 +vt 0.000000 0.632796 +vt 0.448100 0.589846 +vt 0.368100 0.589846 +vt 0.327600 0.501946 +vt 0.324200 0.499996 +vt 0.351600 0.570296 +vt 0.265600 0.570296 +vt 0.498200 0.659896 +vt 0.318100 0.659896 +vt 0.238300 0.499996 +vt 0.152300 0.546896 +vt 0.175800 0.570296 +vt 0.152300 0.624996 +vt 0.152300 0.585946 +vt 0.066400 0.617196 +vt 0.175800 0.624996 +vt 0.152300 0.586046 +vt 0.265600 0.624996 +vt 0.066500 0.911996 +vt 0.088100 0.999996 +vt 0.015700 0.983396 +vt 0.242600 0.980396 +vt 0.242600 0.999946 +vt 0.545900 0.983396 +vt 0.474000 0.999946 +vt 0.495400 0.912396 +vt 0.561500 0.912396 +vt 0.320300 0.999996 +vt 0.320300 0.980546 +vt 0.273400 0.816396 +vt 0.273400 0.894546 +vt 0.343800 0.894546 +vt 0.343800 0.816396 +vt 0.410200 0.816396 +vt 0.441400 0.894546 +vt 0.375000 0.894546 +vt 0.585900 0.816396 +vt 0.617200 0.894546 +vt 0.242200 0.999996 +vt 0.320300 0.980446 +vt 0.242200 0.980446 +vt 0.652300 0.640646 +vt 0.652300 0.499996 +vt 0.496100 0.499996 +vt 0.722700 0.624996 +vt 0.722700 0.515646 +vt 0.570300 0.796896 +vt 0.722700 0.804696 +vt 0.722700 0.628896 +vt 0.789100 0.792946 +vt 0.886700 0.624996 +vt 0.886700 0.515646 +vt 0.640600 0.851546 +vt 0.851600 0.898446 +vt 0.812800 0.795646 +vt 1.000000 0.734546 +vt 1.000000 0.898446 +vt 1.000000 0.999996 +vt 0.851600 0.999996 +vt 0.750000 0.898446 +vt 0.750000 0.999996 +vt 0.562500 0.999996 +vt 0.066400 0.910146 +vt 0.257800 0.839846 +vt 0.488700 0.501946 +vt 0.066400 0.624996 +vt 0.000000 0.911996 +vt 0.496100 0.640646 +vt 0.562500 0.898446 +vn 0.984800 0.173800 0.000000 +vn -0.984800 0.173800 0.000000 +vn 0.000000 -0.185000 0.982700 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.185000 -0.982700 +vn 0.000000 -1.000000 -0.000000 +vn 0.705400 -0.632100 -0.320600 +vn 0.000000 -0.371400 -0.928500 +vn -0.705400 -0.632100 -0.320600 +vn -0.813700 -0.581200 -0.000000 +vn 0.000000 -0.883500 0.468500 +vn 0.000000 0.717000 0.697100 +vn 0.813700 -0.581200 -0.000000 +vn 0.200900 0.345100 0.916800 +vn -0.200900 0.345100 0.916800 +vn 0.988300 -0.053800 -0.142800 +vn 0.971000 -0.084200 -0.223700 +vn 1.000000 0.000000 0.000000 +vn 0.923400 -0.135200 -0.359100 +vn 0.000000 -0.352300 -0.935900 +vn -0.923400 -0.135200 -0.359100 +vn -0.988300 -0.053800 -0.142800 +vn -0.971000 -0.084200 -0.223700 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.885400 0.464800 +vn 0.000000 -0.171300 0.985200 +vn -0.990400 0.126900 0.054200 +vn -0.992700 0.110900 0.047400 +vn -0.973800 0.209500 0.088900 +vn -0.972700 0.213700 0.090600 +vn 0.000000 0.921100 0.389300 +vn 0.973600 0.209900 0.090000 +vn 0.990500 0.126400 0.054600 +vn 0.992700 0.110800 0.046800 +vn 0.000000 0.950600 -0.310300 +vn 0.000000 -0.355000 -0.934900 +vn 0.972600 0.214500 0.090000 +usemtl 05___Default +f 116/81/29 117/82/29 118/83/29 +f 120/83/30 121/82/30 122/81/30 +f 117/82/31 121/84/31 120/85/31 +f 116/81/32 122/86/32 121/84/32 +f 115/87/33 119/88/33 122/86/33 +f 124/89/34 125/90/34 126/91/34 +f 125/92/35 127/93/35 128/94/35 +f 124/89/36 129/95/36 127/96/36 +f 124/92/37 123/97/37 130/94/37 +f 123/97/38 131/98/38 132/99/38 +f 134/100/39 131/101/39 123/102/39 +f 135/103/40 132/99/40 131/104/40 +f 136/105/32 130/94/32 132/99/32 +f 126/97/41 128/94/41 137/99/41 +f 126/102/39 138/101/39 140/100/39 +f 138/101/40 137/99/40 141/103/40 +f 137/99/32 128/94/32 142/105/32 +f 144/106/34 145/107/34 146/108/34 +f 147/108/34 148/107/34 149/106/34 +f 151/109/34 152/110/34 145/107/34 +f 148/107/34 153/110/34 154/109/34 +f 156/111/32 157/112/32 158/113/32 +f 159/111/32 160/114/32 161/113/32 +f 157/112/32 163/115/32 164/116/32 +f 162/112/32 161/113/32 165/116/32 +f 146/117/42 156/118/42 155/119/42 +f 147/117/43 150/120/43 160/119/43 +f 149/121/44 161/122/45 160/123/46 +f 154/124/47 165/125/47 161/122/45 +f 153/126/48 166/115/48 165/127/48 +f 151/128/48 164/127/48 163/115/48 +f 151/124/49 144/121/50 158/122/51 +f 144/121/50 143/120/52 155/123/52 +f 168/129/53 169/130/53 170/131/53 +f 171/132/54 172/133/54 169/130/54 +f 170/134/52 169/129/55 173/135/56 +f 172/136/57 175/137/58 173/135/56 +f 171/132/59 176/138/59 175/139/59 +f 171/136/60 168/129/61 177/135/62 +f 167/134/46 178/140/46 177/135/62 +f 179/141/46 180/142/46 181/143/46 +f 183/141/52 184/144/52 185/143/52 +f 182/144/34 184/145/34 183/146/34 +f 180/147/63 186/148/63 185/149/63 +f 179/141/64 183/146/64 186/148/64 +f 115/150/29 116/81/29 118/83/29 +f 119/150/30 120/83/30 122/81/30 +f 118/151/31 117/82/31 120/85/31 +f 117/82/32 116/81/32 121/84/32 +f 116/81/33 115/87/33 122/86/33 +f 123/152/34 124/89/34 126/91/34 +f 126/97/35 125/92/35 128/94/35 +f 125/90/36 124/89/36 127/96/36 +f 129/93/37 124/92/37 130/94/37 +f 130/94/38 123/97/38 132/99/38 +f 133/153/39 134/100/39 123/102/39 +f 134/100/40 135/103/40 131/104/40 +f 135/103/32 136/105/32 132/99/32 +f 138/98/41 126/97/41 137/99/41 +f 139/153/39 126/102/39 140/100/39 +f 140/100/40 138/101/40 141/103/40 +f 141/103/32 137/99/32 142/105/32 +f 143/154/34 144/106/34 146/108/34 +f 150/154/34 147/108/34 149/106/34 +f 144/106/34 151/109/34 145/107/34 +f 149/106/34 148/107/34 154/109/34 +f 155/114/32 156/111/32 158/113/32 +f 162/112/32 159/111/32 161/113/32 +f 158/113/32 157/112/32 164/116/32 +f 166/115/32 162/112/32 165/116/32 +f 143/120/42 146/117/42 155/119/42 +f 159/118/43 147/117/43 160/119/43 +f 150/120/46 149/121/44 160/123/46 +f 149/121/44 154/124/47 161/122/45 +f 154/128/48 153/126/48 165/127/48 +f 152/126/48 151/128/48 163/115/48 +f 164/125/49 151/124/49 158/122/51 +f 158/122/51 144/121/50 155/123/52 +f 167/155/53 168/129/53 170/131/53 +f 168/129/54 171/132/54 169/130/54 +f 174/140/52 170/134/52 173/135/56 +f 169/129/55 172/136/57 173/135/56 +f 172/133/59 171/132/59 175/139/59 +f 176/137/65 171/136/60 177/135/62 +f 168/129/61 167/134/46 177/135/62 +f 182/144/46 179/141/46 181/143/46 +f 186/142/52 183/141/52 185/143/52 +f 179/141/34 182/144/34 183/146/34 +f 181/156/63 180/147/63 185/149/63 +f 180/147/64 179/141/64 186/148/64 +o HoverPad +v 11.125000 3.452799 8.250001 +v 11.125000 3.452799 6.250000 +v 11.125000 -0.547201 6.250000 +v 11.125000 -0.547201 8.250000 +v 15.125000 3.452799 8.250001 +v 15.125000 -0.547201 8.250000 +v 15.125000 -0.547201 6.250000 +v 15.125000 3.452799 6.250000 +v -10.324200 -15.089800 -1.901103 +v -13.685600 -10.361699 -3.432902 +v -11.197400 -10.361698 -8.892702 +v -7.836000 -15.089799 -7.360802 +v -8.890100 -13.858500 -1.247502 +v -12.251500 -9.130400 -2.779402 +v -9.763300 -9.130399 -8.239102 +v -6.401900 -13.858499 -6.707303 +v -8.750000 -2.916700 3.125000 +v -15.000000 3.333300 3.125000 +v -15.000000 3.333299 6.250000 +v -11.250000 -0.416701 6.250000 +v -11.250000 3.333300 3.125000 +v -17.500000 -2.916700 3.125000 +v -15.000000 -0.416701 6.250000 +v -11.250000 3.333299 6.250000 +v -11.242400 4.375002 -14.999999 +v -6.867400 4.375002 -14.999999 +v -6.867400 7.187502 -13.124999 +v -9.367400 7.187502 -13.124999 +v -9.367400 7.187501 -9.130299 +v -11.242400 4.375001 -9.659699 +v -6.867400 7.187501 -9.130299 +v -6.867400 -6.249998 -15.312501 +v -10.625000 -6.249998 -15.312501 +v -8.750000 -9.062498 -13.437502 +v -6.867400 -9.062498 -13.437502 +v -10.625000 -6.249998 -11.159701 +v -8.750000 -9.062498 -10.034702 +v -6.867400 -9.062498 -10.034702 +v -6.867400 -6.249998 -11.159701 +v 15.000000 3.333300 3.125000 +v 8.750000 -2.916700 3.125000 +v 11.250000 -0.416701 6.250000 +v 15.000000 3.333299 6.250000 +v 17.500000 -2.916700 3.125000 +v 11.250000 3.333300 3.125000 +v 11.250000 3.333299 6.250000 +v 15.000000 -0.416701 6.250000 +v 6.867400 4.375002 -14.999999 +v 11.242400 4.375002 -14.999999 +v 9.367400 7.187502 -13.124999 +v 6.867400 7.187502 -13.124999 +v 11.242400 4.375001 -9.659699 +v 9.367400 7.187501 -9.130299 +v 6.867400 7.187501 -9.130299 +v 10.625000 -6.249998 -15.312501 +v 6.867400 -6.249998 -15.312501 +v 6.867400 -9.062498 -13.437502 +v 8.750000 -9.062498 -13.437502 +v 8.750000 -9.062498 -10.034702 +v 10.625000 -6.249998 -11.159701 +v 6.867400 -9.062498 -10.034702 +v 6.867400 -6.249998 -11.159701 +v 9.585800 -7.999997 -17.039202 +v 8.585800 -6.585798 -16.039202 +v 11.414200 -6.585798 -13.210801 +v 12.414200 -7.999998 -14.210801 +v 7.585800 -10.828397 -15.039202 +v 10.414200 -10.828398 -12.210802 +v 9.414200 -9.414198 -11.210802 +v 6.585800 -9.414198 -14.039202 +v -7.585800 -10.828397 -15.039202 +v -6.585800 -9.414198 -14.039202 +v -9.414200 -9.414198 -11.210802 +v -10.414200 -10.828398 -12.210802 +v -9.585800 -7.999997 -17.039202 +v -12.414200 -7.999998 -14.210801 +v -11.414200 -6.585798 -13.210801 +v -8.585800 -6.585798 -16.039202 +v -8.585800 8.828403 -15.039198 +v -7.585800 7.414202 -14.039199 +v -9.585800 4.585803 -16.039200 +v -10.585800 6.000003 -17.039198 +v -11.414200 8.828402 -12.210798 +v -13.414200 6.000002 -14.210799 +v -12.414200 4.585803 -13.210799 +v -10.414200 7.414202 -11.210799 +v 11.414200 8.828402 -12.210798 +v 10.414200 7.414202 -11.210799 +v 12.414200 4.585803 -13.210799 +v 13.414200 6.000002 -14.210799 +v 8.585800 8.828403 -15.039198 +v 10.585800 6.000003 -17.039198 +v 9.585800 4.585803 -16.039200 +v 7.585800 7.414202 -14.039199 +v -3.000000 -11.165402 14.898698 +v 3.000000 -11.165402 14.898698 +v 3.000000 -8.376102 20.210897 +v -3.000000 -8.376102 20.210897 +v -3.000000 -9.394702 13.968898 +v 3.000000 -9.394702 13.968898 +v 3.000000 -6.605303 19.281097 +v -3.000000 -6.605303 19.281097 +v 13.679800 -10.346799 -3.430302 +v 10.318500 -15.074900 -1.898502 +v 7.830300 -15.074899 -7.358202 +v 11.191700 -10.346798 -8.890101 +v 12.245700 -9.115500 -2.776801 +v 8.884400 -13.843500 -1.244902 +v 6.396200 -13.843499 -6.704702 +v 9.757600 -9.115499 -8.236502 +v -15.125000 3.452799 8.250001 +v -15.125000 3.452799 6.250000 +v -15.125000 -0.547201 6.250000 +v -15.125000 -0.547201 8.250000 +v -11.125000 3.452799 8.250001 +v -11.125000 -0.547201 8.250000 +v -11.125000 -0.547201 6.250000 +v -11.125000 3.452799 6.250000 +vt 0.308600 0.808596 +vt 0.308600 0.777346 +vt 0.324200 0.777346 +vt 0.324200 0.808596 +vt 0.355500 0.808596 +vt 0.277300 0.777346 +vt 0.277300 0.808596 +vt 0.531300 0.714846 +vt 0.578100 0.714846 +vt 0.578100 0.761696 +vt 0.515600 0.714846 +vt 0.531300 0.761696 +vt 0.515600 0.761696 +vt 0.320300 0.687496 +vt 0.320300 0.714846 +vt 0.351600 0.714846 +vt 0.371100 0.687496 +vt 0.269500 0.687496 +vt 0.289100 0.687496 +vt 0.289100 0.707046 +vt 0.316400 0.726546 +vt 0.269500 0.726546 +vt 0.320300 0.707046 +vt 0.269500 0.691396 +vt 0.304700 0.726546 +vt 0.304700 0.707046 +vt 0.289100 0.691396 +vt 0.308600 0.691396 +vt 0.320300 0.722646 +vt 0.281300 0.722646 +vt 0.304700 0.691396 +vt 0.355500 0.777346 +vt 0.261700 0.691396 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn -0.717100 -0.615700 -0.326800 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.560200 -0.788000 0.255300 +vn 0.707100 0.707100 0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 -0.554700 0.832100 +vn 0.832100 -0.554700 -0.000000 +vn 0.000000 0.554700 0.832100 +vn -0.832100 -0.554700 0.000000 +vn -0.832100 0.554700 0.000000 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 -0.000000 0.707100 +vn -0.500000 0.707100 0.500000 +vn -0.707100 0.000000 -0.707100 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 -0.000000 0.707100 +vn 0.500000 0.707100 0.500000 +vn 0.707100 0.000000 -0.707100 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 0.000000 0.464900 0.885400 +vn 0.717100 -0.615700 -0.326800 +vn 0.414700 -0.000000 0.910000 +vn -0.560200 -0.788000 0.255300 +vn -0.560300 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +vn 0.560200 0.788000 -0.255300 +vn 0.717100 -0.615600 -0.326800 +usemtl 05___Default +f 188/157/66 189/158/66 190/159/66 +f 192/159/67 193/158/67 194/157/67 +f 190/159/68 192/160/68 191/161/68 +f 189/158/69 193/157/69 192/160/69 +f 188/162/70 194/163/70 193/157/70 +f 187/159/71 191/160/71 194/157/71 +f 195/164/72 196/165/72 197/166/72 +f 200/167/73 196/164/73 195/168/73 +f 200/169/74 201/167/74 197/164/74 +f 201/169/75 202/167/75 198/164/75 +f 199/167/76 195/164/76 198/168/76 +f 204/170/77 205/171/77 206/172/77 +f 207/170/78 208/173/78 209/172/78 +f 212/174/79 213/175/79 214/176/79 +f 216/177/80 211/178/80 214/176/80 +f 215/179/69 214/176/69 213/175/69 +f 218/180/81 219/178/81 220/176/81 +f 222/181/82 219/178/82 220/176/82 +f 223/182/69 220/176/69 221/183/69 +f 225/184/67 224/185/67 221/186/67 +f 226/170/78 227/173/78 228/172/78 +f 231/170/77 232/171/77 233/172/77 +f 234/174/79 235/178/79 236/176/79 +f 238/177/82 239/179/82 236/176/82 +f 240/170/69 237/175/69 236/176/69 +f 242/180/81 243/183/81 244/176/81 +f 246/181/83 241/178/83 244/176/83 +f 247/187/69 243/183/69 244/176/69 +f 248/187/66 242/180/66 243/183/66 +f 250/157/84 251/158/84 252/159/84 +f 254/159/85 255/158/85 256/157/85 +f 252/159/86 254/160/86 253/161/86 +f 251/158/87 255/157/87 254/160/87 +f 250/162/88 256/163/88 255/157/88 +f 250/158/89 249/159/89 253/160/89 +f 257/160/90 258/157/90 259/158/90 +f 262/159/91 263/158/91 264/157/91 +f 260/159/92 262/160/92 261/161/92 +f 260/159/93 259/158/93 263/157/93 +f 259/158/94 258/162/94 264/163/94 +f 257/159/95 261/160/95 264/157/95 +f 265/160/95 266/157/95 267/158/95 +f 269/160/93 270/159/93 271/158/93 +f 268/159/91 270/160/91 269/161/91 +f 268/159/92 267/158/92 271/157/92 +f 266/162/90 272/163/90 271/157/90 +f 265/159/94 269/160/94 272/157/94 +f 273/160/87 274/157/87 275/158/87 +f 277/160/89 278/159/89 279/158/89 +f 273/188/84 276/159/84 278/160/84 +f 275/158/86 279/157/86 278/160/86 +f 274/162/85 280/163/85 279/157/85 +f 274/158/88 273/159/88 277/160/88 +f 282/165/96 283/166/96 284/168/96 +f 286/167/97 282/164/97 281/168/97 +f 287/167/67 283/164/67 282/168/67 +f 288/167/98 284/164/98 283/168/98 +f 288/169/66 285/167/66 281/164/66 +f 290/165/99 291/166/99 292/168/99 +f 294/167/100 290/164/100 289/168/100 +f 294/169/101 295/167/102 291/164/102 +f 295/169/103 296/167/103 292/164/103 +f 296/169/104 293/167/104 289/164/104 +f 298/157/66 299/158/66 300/159/66 +f 302/159/67 303/158/67 304/157/67 +f 300/159/68 302/160/68 301/161/68 +f 299/158/69 303/157/69 302/160/69 +f 298/162/70 304/163/70 303/157/70 +f 297/159/71 301/160/71 304/157/71 +f 187/160/66 188/157/66 190/159/66 +f 191/160/67 192/159/67 194/157/67 +f 187/188/68 190/159/68 191/161/68 +f 190/159/69 189/158/69 192/160/69 +f 189/158/70 188/162/70 193/157/70 +f 188/158/71 187/159/71 194/157/71 +f 198/168/72 195/164/72 197/166/72 +f 199/169/73 200/167/73 195/168/73 +f 196/168/74 200/169/74 197/164/74 +f 197/168/75 201/169/75 198/164/75 +f 202/169/76 199/167/76 198/168/76 +f 203/173/77 204/170/77 206/172/77 +f 210/171/78 207/170/78 209/172/78 +f 211/178/79 212/174/79 214/176/79 +f 215/179/80 216/177/80 214/176/80 +f 217/170/69 215/179/69 213/175/69 +f 221/183/81 218/180/81 220/176/81 +f 223/182/82 222/181/82 220/176/82 +f 224/187/69 223/182/69 221/183/69 +f 218/189/67 225/184/67 221/186/67 +f 229/171/78 226/170/78 228/172/78 +f 230/173/77 231/170/77 233/172/77 +f 237/175/79 234/174/79 236/176/79 +f 235/178/82 238/177/82 236/176/82 +f 239/179/69 240/170/69 236/176/69 +f 241/178/81 242/180/81 244/176/81 +f 245/182/83 246/181/83 244/176/83 +f 245/182/69 247/187/69 244/176/69 +f 247/187/66 248/187/66 243/183/66 +f 249/160/84 250/157/84 252/159/84 +f 253/160/85 254/159/85 256/157/85 +f 249/188/86 252/159/86 253/161/86 +f 252/159/87 251/158/87 254/160/87 +f 251/158/88 250/162/88 255/157/88 +f 256/157/89 250/158/89 253/160/89 +f 260/159/90 257/160/90 259/158/90 +f 261/160/91 262/159/91 264/157/91 +f 257/188/92 260/159/92 261/161/92 +f 262/160/93 260/159/93 263/157/93 +f 263/157/94 259/158/94 264/163/94 +f 258/158/95 257/159/95 264/157/95 +f 268/159/95 265/160/95 267/158/95 +f 272/157/93 269/160/93 271/158/93 +f 265/188/91 268/159/91 269/161/91 +f 270/160/92 268/159/92 271/157/92 +f 267/158/90 266/162/90 271/157/90 +f 266/158/94 265/159/94 272/157/94 +f 276/159/87 273/160/87 275/158/87 +f 280/157/89 277/160/89 279/158/89 +f 277/161/84 273/188/84 278/160/84 +f 276/159/86 275/158/86 278/160/86 +f 275/158/85 274/162/85 279/157/85 +f 280/157/88 274/158/88 277/160/88 +f 281/164/96 282/165/96 284/168/96 +f 285/169/97 286/167/97 281/168/97 +f 286/169/67 287/167/67 282/168/67 +f 287/169/98 288/167/98 283/168/98 +f 284/168/66 288/169/66 281/164/66 +f 289/164/105 290/165/99 292/168/99 +f 293/169/100 294/167/100 289/168/100 +f 290/168/101 294/169/101 291/164/102 +f 291/168/103 295/169/103 292/164/103 +f 292/168/104 296/169/104 289/164/104 +f 297/160/66 298/157/66 300/159/66 +f 301/160/67 302/159/67 304/157/67 +f 297/188/68 300/159/68 301/161/68 +f 300/159/69 299/158/69 302/160/69 +f 299/158/70 298/162/70 303/157/70 +f 298/158/71 297/159/71 304/157/71 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.mtl new file mode 100644 index 00000000..a4b68b03 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.mtl @@ -0,0 +1,14 @@ +# Blender MTL File: 'None' +# Material Count: 2 + +newmtl 05___Default +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl Material__2 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.obj new file mode 100644 index 00000000..0580c4c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.obj @@ -0,0 +1,933 @@ +mtllib astro_miner_inv.mtl +o Hull_Center +v -0.455148 -0.649704 -0.902352 +v -0.395148 -0.564852 -0.842352 +v -0.564852 -0.564852 -0.672648 +v -0.624852 -0.649704 -0.732648 +v -0.575148 -0.480000 -1.022352 +v -0.744852 -0.480000 -0.852648 +v -0.684852 -0.395148 -0.792648 +v -0.515148 -0.395148 -0.962352 +v -0.515148 0.529704 -0.902352 +v -0.455148 0.444852 -0.842352 +v -0.575148 0.275148 -0.962352 +v -0.635148 0.360000 -1.022352 +v -0.684852 0.529704 -0.732648 +v -0.804852 0.360000 -0.852648 +v -0.744852 0.275148 -0.792648 +v -0.624852 0.444852 -0.672648 +v 0.575148 -0.480000 -1.022352 +v 0.515148 -0.395148 -0.962352 +v 0.684852 -0.395148 -0.792648 +v 0.744852 -0.480000 -0.852648 +v 0.455148 -0.649704 -0.902352 +v 0.624852 -0.649704 -0.732648 +v 0.564852 -0.564852 -0.672648 +v 0.395148 -0.564852 -0.842352 +v 0.684852 0.529704 -0.732648 +v 0.624852 0.444852 -0.672648 +v 0.744852 0.275148 -0.792648 +v 0.804852 0.360000 -0.852648 +v 0.515148 0.529704 -0.902352 +v 0.635148 0.360000 -1.022352 +v 0.575148 0.275148 -0.962352 +v 0.455148 0.444852 -0.842352 +v -1.087500 0.000000 -1.200000 +v -0.975000 -0.112500 -1.200000 +v -0.975000 -0.112500 -0.600000 +v -1.087500 0.000000 -0.600000 +v -0.975000 0.000000 -0.600000 +v -0.975000 0.000000 -1.200000 +v -1.087500 -0.112500 -1.200000 +v -1.087500 -0.112500 -0.600000 +v -1.031250 -0.056250 -0.600000 +v -1.031250 -0.056250 -1.200000 +v -0.806250 -0.056250 -1.200000 +v -0.806250 -0.056250 -0.600000 +v 0.881250 -0.150000 -0.094290 +v 0.881250 -0.150000 -0.600000 +v 1.087500 -0.150000 -0.600000 +v 1.087500 -0.150000 -0.094290 +v 1.087500 0.037500 -0.600000 +v 0.881250 0.037500 -0.600000 +v 0.881250 0.037500 -0.164880 +v 1.087500 0.037500 -0.164880 +v 0.412500 -0.480000 -1.599582 +v 0.412500 0.310002 -1.899582 +v 0.412500 0.780000 -0.459582 +v 0.412500 -0.480000 -0.459582 +v -0.412500 -0.480000 -1.599582 +v -0.412500 -0.480000 -0.459582 +v -0.412500 0.780000 -0.459582 +v -0.412500 0.310002 -1.899582 +v 0.706068 0.572130 -0.711432 +v 0.631068 0.466068 -0.636432 +v 0.781068 0.253932 -0.786432 +v 0.856068 0.360000 -0.861432 +v 0.493932 0.572130 -0.923568 +v 0.643932 0.360000 -1.073568 +v 0.568932 0.253932 -0.998568 +v 0.418932 0.466068 -0.848568 +v -0.600000 -0.900000 0.200418 +v -0.300000 -0.900000 -0.459582 +v 0.300000 -0.900000 -0.459582 +v 0.600000 -0.900000 0.200418 +v 0.675000 -0.375000 -0.669582 +v 0.975000 -0.375000 -0.009582 +v -0.675000 -0.375000 -0.669582 +v -0.975000 -0.375000 -0.009582 +v -0.850002 -0.550002 0.860418 +v -0.975000 -0.375000 0.680418 +v -0.540000 -0.900000 0.200418 +v -0.540000 -0.550002 0.860418 +v -0.540000 -0.375000 0.680418 +v -0.540000 -0.375000 -0.009582 +v 0.975000 -0.375000 0.680418 +v 0.850002 -0.550002 0.860418 +v 0.540000 -0.900000 0.200418 +v 0.540000 -0.550002 0.860418 +v 0.540000 -0.375000 0.680418 +v 0.540000 -0.375000 -0.009582 +v -0.907500 0.207168 0.495000 +v -0.907500 0.207168 0.375000 +v -0.907500 -0.032832 0.375000 +v -0.907500 -0.032832 0.495000 +v -0.667500 0.207168 0.495000 +v -0.667500 -0.032832 0.495000 +v -0.667500 -0.032832 0.375000 +v -0.667500 0.207168 0.375000 +v -0.937500 0.237168 0.525000 +v -0.937500 0.237168 0.375000 +v -0.937500 -0.062832 0.375000 +v -0.937500 -0.062832 0.525000 +v -0.637500 0.237168 0.525000 +v -0.637500 -0.062832 0.525000 +v -0.637500 -0.062832 0.375000 +v -0.637500 0.237168 0.375000 +v -0.525000 -0.175002 0.187500 +v -0.900000 0.199998 0.187500 +v -0.900000 0.199998 0.375000 +v -0.675000 -0.025002 0.375000 +v -0.675000 0.199998 0.187500 +v -1.050000 -0.175002 0.187500 +v -0.900000 -0.025002 0.375000 +v -0.675000 0.199998 0.375000 +v -0.674544 0.262500 -0.900000 +v -0.412044 0.262500 -0.900000 +v -0.412044 0.431250 -0.787500 +v -0.562044 0.431250 -0.787500 +v -0.562044 0.431250 -0.547818 +v -0.674544 0.262500 -0.579582 +v -0.412044 0.431250 -0.547818 +v -0.412044 -0.375000 -0.918750 +v -0.637500 -0.375000 -0.918750 +v -0.525000 -0.543750 -0.806250 +v -0.412044 -0.543750 -0.806250 +v -0.637500 -0.375000 -0.669582 +v -0.525000 -0.543750 -0.602082 +v -0.412044 -0.543750 -0.602082 +v -0.412044 -0.375000 -0.669582 +v 0.900000 0.199998 0.187500 +v 0.525000 -0.175002 0.187500 +v 0.675000 -0.025002 0.375000 +v 0.900000 0.199998 0.375000 +v 1.050000 -0.175002 0.187500 +v 0.675000 0.199998 0.187500 +v 0.675000 0.199998 0.375000 +v 0.900000 -0.025002 0.375000 +v 0.412044 0.262500 -0.900000 +v 0.674544 0.262500 -0.900000 +v 0.562044 0.431250 -0.787500 +v 0.412044 0.431250 -0.787500 +v 0.674544 0.262500 -0.579582 +v 0.562044 0.431250 -0.547818 +v 0.412044 0.431250 -0.547818 +v 0.637500 -0.375000 -0.918750 +v 0.412044 -0.375000 -0.918750 +v 0.412044 -0.543750 -0.806250 +v 0.525000 -0.543750 -0.806250 +v 0.525000 -0.543750 -0.602082 +v 0.637500 -0.375000 -0.669582 +v 0.412044 -0.543750 -0.602082 +v 0.412044 -0.375000 -0.669582 +v -0.975000 -0.112500 -1.200000 +v -1.087500 0.000000 -1.200000 +v -1.087500 0.000000 -0.600000 +v -0.975000 -0.112500 -0.600000 +v -0.975000 0.000000 -1.200000 +v -0.975000 0.000000 -0.600000 +v -1.087500 -0.112500 -0.600000 +v -1.087500 -0.112500 -1.200000 +v -1.031250 -0.056250 -1.200000 +v -1.031250 -0.056250 -0.600000 +v -0.806250 -0.056250 -0.600000 +v -0.806250 -0.056250 -1.200000 +v 0.540000 -0.900000 0.200418 +v 0.540000 -0.270000 1.400418 +v -0.540000 -0.270000 1.400418 +v -0.540000 -0.900000 0.200418 +v 0.420000 0.247500 1.490418 +v -0.420000 0.247500 1.490418 +v -0.540000 0.270000 0.140418 +v -0.540000 -0.360000 -0.219582 +v -0.420000 0.780000 0.230418 +v 0.420000 0.780000 0.230418 +v 0.540000 0.270000 0.140418 +v 0.540000 -0.360000 -0.219582 +v 1.087500 0.000000 -0.600000 +v 0.975000 -0.112500 -0.600000 +v 0.975000 -0.112500 -1.200000 +v 1.087500 0.000000 -1.200000 +v 1.087500 -0.112500 -0.600000 +v 1.087500 -0.112500 -1.200000 +v 0.975000 0.000000 -1.200000 +v 0.975000 0.000000 -0.600000 +v 0.806250 -0.056250 -0.600000 +v 0.806250 -0.056250 -1.200000 +v 1.031250 -0.056250 -1.200000 +v 1.031250 -0.056250 -0.600000 +v 0.697380 -0.615636 -0.578166 +v 0.871548 -0.615636 -0.195984 +v 0.636252 -0.946602 -0.088752 +v 0.462084 -0.946602 -0.470940 +v 0.589818 -0.523290 -0.529152 +v 0.763992 -0.523290 -0.146964 +v 0.528696 -0.854250 -0.039738 +v 0.354522 -0.854250 -0.421920 +v -1.087500 -0.150000 -0.094290 +v -1.087500 -0.150000 -0.600000 +v -0.881250 -0.150000 -0.600000 +v -0.881250 -0.150000 -0.094290 +v -1.087500 0.037500 -0.164880 +v -0.881250 0.037500 -0.164880 +v -0.881250 0.037500 -0.600000 +v -1.087500 0.037500 -0.600000 +v 0.583932 -0.480000 -1.073568 +v 0.508932 -0.373932 -0.998568 +v 0.721068 -0.373932 -0.786432 +v 0.796068 -0.480000 -0.861432 +v 0.433932 -0.692130 -0.923568 +v 0.646068 -0.692130 -0.711432 +v 0.571068 -0.586068 -0.636432 +v 0.358932 -0.586068 -0.848568 +v -0.210000 -0.710430 0.881304 +v 0.210000 -0.710430 0.881304 +v 0.210000 -0.515178 1.253160 +v -0.210000 -0.515178 1.253160 +v -0.210000 -0.577626 0.811572 +v 0.210000 -0.577626 0.811572 +v 0.210000 -0.382374 1.183428 +v -0.210000 -0.382374 1.183428 +v -1.087500 -0.375000 0.500418 +v -1.087500 -0.375000 -0.009582 +v -0.412500 -0.375000 -0.174582 +v -0.540000 -0.375000 0.380418 +v 0.540000 -0.375000 0.380418 +v 0.412500 -0.375000 -0.174582 +v 1.087500 -0.375000 -0.009582 +v 1.087500 -0.375000 0.500418 +v -0.562500 -0.375000 -1.359582 +v -0.412500 -0.375000 -1.359582 +v 0.412500 -0.375000 -1.359582 +v 0.562500 -0.375000 -1.359582 +v -1.087500 0.262500 0.260418 +v -0.540000 0.262500 0.140418 +v -0.412500 0.262500 -0.414582 +v -1.087500 0.262500 -0.249582 +v 0.540000 0.262500 0.140418 +v 1.087500 0.262500 0.260418 +v 1.087500 0.262500 -0.249582 +v 0.412500 0.262500 -0.414582 +v -0.412500 0.262500 -1.599582 +v -0.562500 0.262500 -1.599582 +v 0.562500 0.262500 -1.599582 +v 0.412500 0.262500 -1.599582 +v -0.462426 -0.947496 -0.471096 +v -0.636600 -0.947496 -0.088908 +v -0.871896 -0.616530 -0.196140 +v -0.697722 -0.616530 -0.578322 +v -0.354870 -0.855150 -0.422076 +v -0.529038 -0.855150 -0.039894 +v -0.764334 -0.524184 -0.147120 +v -0.590166 -0.524184 -0.529308 +v -0.180000 -0.669924 0.893922 +v 0.180000 -0.669924 0.893922 +v 0.180000 -0.502566 1.212654 +v -0.180000 -0.502566 1.212654 +v -0.180000 -0.563682 0.838134 +v 0.180000 -0.563682 0.838134 +v 0.180000 -0.396318 1.156866 +v -0.180000 -0.396318 1.156866 +v 0.787500 0.262500 -0.579582 +v 0.675000 0.900000 -0.459582 +v 0.675000 0.900000 0.260418 +v 0.787500 0.262500 0.140418 +v -0.787500 0.262500 -0.579582 +v -0.787500 0.262500 0.140418 +v -0.675000 0.900000 0.260418 +v -0.675000 0.900000 -0.459582 +v -0.493932 0.572130 -0.923568 +v -0.418932 0.466068 -0.848568 +v -0.568932 0.253932 -0.998568 +v -0.643932 0.360000 -1.073568 +v -0.706068 0.572130 -0.711432 +v -0.856068 0.360000 -0.861432 +v -0.781068 0.253932 -0.786432 +v -0.631068 0.466068 -0.636432 +v 0.667500 0.207168 0.495000 +v 0.667500 0.207168 0.375000 +v 0.667500 -0.032832 0.375000 +v 0.667500 -0.032832 0.495000 +v 0.907500 0.207168 0.495000 +v 0.907500 -0.032832 0.495000 +v 0.907500 -0.032832 0.375000 +v 0.907500 0.207168 0.375000 +v -0.619452 -0.905388 -0.114066 +v -0.821136 -0.621702 -0.205974 +v -0.671844 -0.621702 -0.533562 +v -0.470160 -0.905388 -0.441648 +v -0.533406 -0.831510 -0.074850 +v -0.735090 -0.547824 -0.166764 +v -0.585798 -0.547824 -0.494346 +v -0.384114 -0.831510 -0.402438 +v 0.820788 -0.620808 -0.205818 +v 0.619110 -0.904494 -0.113910 +v 0.469818 -0.904494 -0.441492 +v 0.671502 -0.620808 -0.533406 +v 0.734742 -0.546930 -0.166608 +v 0.533064 -0.830610 -0.074694 +v 0.383772 -0.830610 -0.402282 +v 0.585456 -0.546930 -0.494190 +v 0.637500 0.237168 0.525000 +v 0.637500 0.237168 0.375000 +v 0.637500 -0.062832 0.375000 +v 0.637500 -0.062832 0.525000 +v 0.937500 0.237168 0.525000 +v 0.937500 -0.062832 0.525000 +v 0.937500 -0.062832 0.375000 +v 0.937500 0.237168 0.375000 +v 0.112500 -0.843750 -1.068750 +v 0.112500 -0.543750 -0.768750 +v 0.112500 -0.543750 -0.459582 +v 0.112500 -0.843750 -0.459582 +v -0.112500 -0.843750 -1.068750 +v -0.112500 -0.843750 -0.459582 +v -0.112500 -0.543750 -0.459582 +v -0.112500 -0.543750 -0.768750 +v 0.975000 -0.112500 -0.600000 +v 1.087500 0.000000 -0.600000 +v 1.087500 0.000000 -1.200000 +v 0.975000 -0.112500 -1.200000 +v 1.087500 -0.112500 -1.200000 +v 1.087500 -0.112500 -0.600000 +v 0.975000 0.000000 -0.600000 +v 0.975000 0.000000 -1.200000 +v 0.806250 -0.056250 -1.200000 +v 0.806250 -0.056250 -0.600000 +v 1.031250 -0.056250 -0.600000 +v 1.031250 -0.056250 -1.200000 +v -0.433932 -0.692130 -0.923568 +v -0.358932 -0.586068 -0.848568 +v -0.571068 -0.586068 -0.636432 +v -0.646068 -0.692130 -0.711432 +v -0.583932 -0.480000 -1.073568 +v -0.796068 -0.480000 -0.861432 +v -0.721068 -0.373932 -0.786432 +v -0.508932 -0.373932 -0.998568 +vt 0.308600 0.808377 +vt 0.308600 0.777127 +vt 0.324200 0.777127 +vt 0.324200 0.808377 +vt 0.355500 0.808377 +vt 0.277300 0.777127 +vt 0.277300 0.808377 +vt 0.355500 0.777127 +vt 0.238300 0.956827 +vt 0.238300 0.851327 +vt 0.265600 0.851327 +vt 0.265600 0.956827 +vt 0.191400 0.956827 +vt 0.191400 0.851327 +vt 0.343800 0.898227 +vt 0.343800 0.921627 +vt 0.281300 0.921627 +vt 0.343800 0.968527 +vt 0.290000 0.968527 +vt 0.290000 0.945077 +vt 0.343800 0.944877 +vt 0.343800 0.921827 +vt 0.367200 0.921827 +vt 0.290000 0.944877 +vt 0.281300 0.921827 +vt 0.851600 0.898227 +vt 0.812800 0.795427 +vt 1.000000 0.734327 +vt 1.000000 0.898227 +vt 1.000000 0.999777 +vt 0.851600 0.999777 +vt 0.750000 0.898227 +vt 0.750000 0.999777 +vt 0.562500 0.999777 +vt 0.448100 0.589627 +vt 0.368100 0.589627 +vt 0.327600 0.501727 +vt 0.324200 0.499777 +vt 0.351600 0.570077 +vt 0.265600 0.570077 +vt 0.498200 0.659677 +vt 0.318100 0.659677 +vt 0.238300 0.499777 +vt 0.152300 0.546677 +vt 0.175800 0.570077 +vt 0.152300 0.624777 +vt 0.152300 0.585727 +vt 0.066400 0.616977 +vt 0.175800 0.624777 +vt 0.152300 0.585827 +vt 0.265600 0.624777 +vt 0.320300 0.687277 +vt 0.320300 0.714627 +vt 0.351600 0.714627 +vt 0.371100 0.687277 +vt 0.269500 0.687277 +vt 0.289100 0.687277 +vt 0.289100 0.706827 +vt 0.316400 0.726327 +vt 0.269500 0.726327 +vt 0.320300 0.706827 +vt 0.269500 0.691177 +vt 0.304700 0.726327 +vt 0.304700 0.706827 +vt 0.289100 0.691177 +vt 0.308600 0.691177 +vt 0.320300 0.722427 +vt 0.281300 0.722427 +vt 0.304700 0.691177 +vt 0.652300 0.640427 +vt 0.652300 0.499777 +vt 0.496100 0.499777 +vt 0.722700 0.624777 +vt 0.722700 0.515427 +vt 0.570300 0.796677 +vt 0.722700 0.804477 +vt 0.722700 0.628677 +vt 0.789100 0.792727 +vt 0.886700 0.624777 +vt 0.886700 0.515427 +vt 0.640600 0.851327 +vt 0.281300 0.898227 +vt 0.343800 0.945077 +vt 0.367200 0.944877 +vt 0.066500 0.911777 +vt 0.088100 0.999777 +vt 0.015700 0.983177 +vt 0.242600 0.980177 +vt 0.242600 0.999727 +vt 0.545900 0.983177 +vt 0.474000 0.999727 +vt 0.495400 0.912177 +vt 0.561500 0.912177 +vt 0.320300 0.999777 +vt 0.320300 0.980327 +vt 0.273400 0.816177 +vt 0.273400 0.894327 +vt 0.343800 0.894327 +vt 0.343800 0.816177 +vt 0.410200 0.816177 +vt 0.441400 0.894327 +vt 0.375000 0.894327 +vt 0.585900 0.816177 +vt 0.617200 0.894327 +vt 0.242200 0.999777 +vt 0.320300 0.980227 +vt 0.242200 0.980227 +vt 0.578100 0.714627 +vt 0.578100 0.761477 +vt 0.531300 0.761477 +vt 0.515600 0.714627 +vt 0.531300 0.714627 +vt 0.515600 0.761477 +vt 0.082000 0.823977 +vt 0.175800 0.823977 +vt 0.160200 0.909927 +vt 0.175800 0.648227 +vt 0.257800 0.632577 +vt 0.082000 0.648227 +vt 0.000000 0.839627 +vt 0.000000 0.632577 +vt 0.933600 0.632577 +vt 0.898400 0.632577 +vt 0.898400 0.597427 +vt 0.898400 0.566177 +vt 0.968800 0.597427 +vt 0.933600 0.663827 +vt 0.898400 0.663827 +vt 0.968800 0.632577 +vt 0.968800 0.663827 +vt 0.562500 0.898227 +vt 0.488700 0.501727 +vt 0.066400 0.624777 +vt 0.261700 0.691177 +vt 0.496100 0.640427 +vt 0.000000 0.911777 +vt 0.066400 0.909927 +vt 0.257800 0.839627 +vt 0.968800 0.566177 +vt 0.293000 0.769327 +vt 0.277300 0.769327 +vt 0.277300 0.730227 +vt 0.293000 0.730227 +vt 0.332000 0.730227 +vt 0.332000 0.769327 +vt 0.589800 0.652127 +vt 0.589800 0.706827 +vt 0.535200 0.706827 +vt 0.515600 0.652127 +vt 0.535200 0.652127 +vt 0.515600 0.706827 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 0.000000 0.707100 +vn 0.500000 0.707100 0.500000 +vn 0.707100 0.000000 -0.707100 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 0.000000 0.707100 +vn -0.500000 0.707100 0.500000 +vn -0.707100 0.000000 -0.707100 +vn -0.707100 -0.707100 -0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.950600 -0.310300 +vn 0.000000 -0.355000 -0.934900 +vn 0.705400 -0.632100 -0.320600 +vn 0.000000 -0.371400 -0.928500 +vn -0.705400 -0.632100 -0.320600 +vn -0.813700 -0.581200 -0.000000 +vn 0.000000 -0.883500 0.468500 +vn 0.000000 0.717000 0.697100 +vn 0.813700 -0.581200 -0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.707100 0.707100 0.000000 +vn 0.000000 -0.554700 0.832100 +vn 0.832100 -0.554700 -0.000000 +vn 0.000000 0.554700 0.832100 +vn -0.832100 -0.554700 0.000000 +vn -0.832100 0.554700 0.000000 +vn 0.707100 -0.707100 -0.000000 +vn 0.000000 -0.885400 0.464800 +vn 0.000000 -0.171300 0.985200 +vn -0.990400 0.126900 0.054200 +vn -0.992700 0.110900 0.047400 +vn -0.973800 0.209500 0.088900 +vn -0.972700 0.213700 0.090600 +vn 0.000000 0.921100 0.389300 +vn 0.973600 0.209900 0.090000 +vn 0.990500 0.126400 0.054600 +vn 0.992700 0.110800 0.046800 +vn 0.200900 0.345100 0.916800 +vn -0.200900 0.345100 0.916800 +vn 0.988300 -0.053800 -0.142800 +vn 0.971000 -0.084200 -0.223700 +vn 0.923400 -0.135200 -0.359100 +vn 0.000000 -0.352300 -0.935900 +vn -0.923400 -0.135200 -0.359100 +vn -0.988300 -0.053800 -0.142800 +vn -0.971000 -0.084200 -0.223700 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 0.000000 0.464900 0.885400 +vn 0.984800 0.173800 0.000000 +vn -0.984800 0.173800 0.000000 +vn 0.000000 -0.185000 0.982700 +vn 0.000000 0.185000 -0.982700 +vn -0.717100 -0.615700 -0.326800 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.560200 -0.788000 0.255300 +vn 0.717100 -0.615700 -0.326800 +vn 0.414700 -0.000000 0.910000 +vn -0.560300 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +vn 0.560200 0.788000 -0.255300 +vn 0.000000 0.707100 -0.707100 +vn 0.972600 0.214500 0.090000 +vn 0.717100 -0.615600 -0.326800 +vn -0.560200 -0.788000 0.255300 +usemtl 05___Default +f 2/1/1 3/2/1 4/3/1 +f 5/4/2 6/3/2 7/2/2 +f 4/3/3 6/4/3 5/5/3 +f 4/3/4 3/2/4 7/1/4 +f 2/6/5 8/7/5 7/1/5 +f 1/3/6 5/4/6 8/1/6 +f 9/4/6 10/1/6 11/2/6 +f 13/4/4 14/3/4 15/2/4 +f 12/3/2 14/4/2 13/5/2 +f 11/2/3 15/1/3 14/4/3 +f 10/6/1 16/7/1 15/1/1 +f 9/3/5 13/4/5 16/1/5 +f 17/4/7 18/1/7 19/2/7 +f 22/3/8 23/2/8 24/1/8 +f 17/8/9 20/3/9 22/4/9 +f 19/2/10 23/1/10 22/4/10 +f 19/2/11 18/6/11 24/7/11 +f 18/2/12 17/3/12 21/4/12 +f 25/4/10 26/1/10 27/2/10 +f 29/4/12 30/3/12 31/2/12 +f 28/3/7 30/4/7 29/5/7 +f 27/2/9 31/1/9 30/4/9 +f 26/6/8 32/7/8 31/1/8 +f 26/2/11 25/3/11 29/4/11 +f 34/9/13 35/10/13 36/11/13 +f 37/10/14 38/9/14 39/12/14 +f 42/9/15 43/13/15 44/14/15 +f 46/15/15 47/16/15 48/17/15 +f 50/18/16 51/19/16 52/20/16 +f 49/21/17 47/22/17 46/23/17 +f 52/24/18 48/25/18 47/22/18 +f 53/26/18 54/27/18 55/28/18 +f 57/26/19 58/29/19 59/28/19 +f 56/29/15 58/30/15 57/31/15 +f 54/32/20 60/33/20 59/34/20 +f 53/26/21 57/31/21 60/33/21 +f 70/35/15 71/36/15 72/37/15 +f 71/38/22 73/39/22 74/40/22 +f 70/35/23 75/41/23 73/42/23 +f 70/38/24 69/43/24 76/40/24 +f 69/43/25 77/44/25 78/45/25 +f 80/46/26 77/47/26 69/48/26 +f 81/49/27 78/45/27 77/50/27 +f 82/51/16 76/40/16 78/45/16 +f 72/43/28 74/40/28 83/45/28 +f 72/48/26 84/47/26 86/46/26 +f 84/47/27 83/45/27 87/49/27 +f 83/45/16 74/40/16 88/51/16 +f 90/1/19 91/2/19 92/3/19 +f 94/3/18 95/2/18 96/1/18 +f 92/3/29 94/4/29 93/5/29 +f 91/2/15 95/1/15 94/4/15 +f 90/6/17 96/7/17 95/1/17 +f 89/3/16 93/4/16 96/1/16 +f 106/52/30 107/53/30 108/54/30 +f 109/52/14 110/55/14 111/54/14 +f 114/56/31 115/57/31 116/58/31 +f 118/59/32 113/60/32 116/58/32 +f 117/61/15 116/58/15 115/57/15 +f 120/62/33 121/60/33 122/58/33 +f 124/63/34 121/60/34 122/58/34 +f 125/64/15 122/58/15 123/65/15 +f 127/66/18 126/67/18 123/68/18 +f 128/52/14 129/55/14 130/54/14 +f 133/52/30 134/53/30 135/54/30 +f 136/56/31 137/60/31 138/58/31 +f 140/59/34 141/61/34 138/58/34 +f 142/52/15 139/57/15 138/58/15 +f 144/62/33 145/65/33 146/58/33 +f 148/63/35 143/60/35 146/58/35 +f 149/69/15 145/65/15 146/58/15 +f 150/69/19 144/62/19 145/65/19 +f 152/12/30 153/11/30 154/10/30 +f 156/10/36 157/11/36 158/12/36 +f 160/10/16 161/14/16 162/13/16 +f 164/70/37 165/71/37 166/72/37 +f 167/73/38 168/74/38 165/71/38 +f 166/75/19 165/70/39 169/76/40 +f 168/77/41 171/78/42 169/76/40 +f 167/73/43 172/79/43 171/80/43 +f 167/77/44 164/70/45 173/76/46 +f 163/75/18 174/81/18 173/76/46 +f 176/10/36 177/9/36 178/12/36 +f 180/12/30 181/9/30 182/10/30 +f 184/13/15 185/9/15 186/10/15 +f 196/16/15 197/15/15 198/82/15 +f 200/19/16 201/18/16 202/83/16 +f 196/22/17 202/21/17 201/84/17 +f 196/22/19 195/25/19 199/24/19 +f 220/85/15 221/86/15 222/87/15 +f 223/87/15 224/86/15 225/85/15 +f 227/88/15 228/89/15 221/86/15 +f 224/86/15 229/89/15 230/88/15 +f 232/90/16 233/91/16 234/92/16 +f 235/90/16 236/93/16 237/92/16 +f 233/91/16 239/94/16 240/95/16 +f 238/91/16 237/92/16 241/95/16 +f 222/96/47 232/97/47 231/98/47 +f 223/96/48 226/99/48 236/98/48 +f 225/100/49 237/101/50 236/102/18 +f 230/103/51 241/104/51 237/101/50 +f 229/105/52 242/94/52 241/106/52 +f 227/107/52 240/106/52 239/94/52 +f 227/103/53 220/100/54 234/101/55 +f 220/100/54 219/99/19 231/102/19 +f 252/108/56 253/109/56 254/110/56 +f 256/111/57 252/112/57 251/110/57 +f 257/111/18 253/112/18 252/110/18 +f 258/111/58 254/112/58 253/110/58 +f 258/113/19 255/111/19 251/112/19 +f 260/114/59 261/115/59 262/116/59 +f 264/116/60 265/115/60 266/114/60 +f 261/115/61 265/117/61 264/118/61 +f 260/114/16 266/119/16 265/117/16 +f 259/120/62 263/121/62 266/119/62 +f 276/1/19 277/2/19 278/3/19 +f 280/3/18 281/2/18 282/1/18 +f 278/3/29 280/4/29 279/5/29 +f 277/2/15 281/1/15 280/4/15 +f 276/6/17 282/7/17 281/1/17 +f 275/3/16 279/4/16 282/1/16 +f 283/112/63 284/108/63 285/109/63 +f 288/111/64 284/112/64 283/110/64 +f 288/113/65 289/111/65 285/112/65 +f 289/113/66 290/111/66 286/112/66 +f 287/111/67 283/112/67 286/110/67 +f 292/108/68 293/109/68 294/110/68 +f 296/111/69 292/112/69 291/110/69 +f 296/113/70 297/111/70 293/112/70 +f 297/113/71 298/111/71 294/112/71 +f 298/113/72 295/111/72 291/112/72 +f 308/122/18 309/123/18 310/124/18 +f 312/124/19 313/123/19 314/122/19 +f 310/125/15 312/124/15 311/126/15 +f 308/122/16 314/127/16 313/128/16 +f 307/129/73 311/130/73 314/127/73 +f 316/11/14 317/12/14 318/9/14 +f 319/12/13 320/11/13 321/10/13 +f 324/14/16 325/10/16 326/9/16 +f 1/4/1 2/1/1 4/3/1 +f 8/1/2 5/4/2 7/2/2 +f 1/8/3 4/3/3 5/5/3 +f 6/4/4 4/3/4 7/1/4 +f 3/2/5 2/6/5 7/1/5 +f 2/2/6 1/3/6 8/1/6 +f 12/3/6 9/4/6 11/2/6 +f 16/1/4 13/4/4 15/2/4 +f 9/8/2 12/3/2 13/5/2 +f 12/3/3 11/2/3 14/4/3 +f 11/2/1 10/6/1 15/1/1 +f 10/2/5 9/3/5 16/1/5 +f 20/3/7 17/4/7 19/2/7 +f 21/4/8 22/3/8 24/1/8 +f 21/5/9 17/8/9 22/4/9 +f 20/3/10 19/2/10 22/4/10 +f 23/1/11 19/2/11 24/7/11 +f 24/1/12 18/2/12 21/4/12 +f 28/3/10 25/4/10 27/2/10 +f 32/1/12 29/4/12 31/2/12 +f 25/8/7 28/3/7 29/5/7 +f 28/3/9 27/2/9 30/4/9 +f 27/2/8 26/6/8 31/1/8 +f 32/1/11 26/2/11 29/4/11 +f 33/12/13 34/9/13 36/11/13 +f 40/11/14 37/10/14 39/12/14 +f 41/10/15 42/9/15 44/14/15 +f 45/82/15 46/15/15 48/17/15 +f 49/83/16 50/18/16 52/20/16 +f 50/84/17 49/21/17 46/23/17 +f 49/21/18 52/24/18 47/22/18 +f 56/29/18 53/26/18 55/28/18 +f 60/27/19 57/26/19 59/28/19 +f 53/26/15 56/29/15 57/31/15 +f 55/131/20 54/32/20 59/34/20 +f 54/32/21 53/26/21 60/33/21 +f 69/132/15 70/35/15 72/37/15 +f 72/43/22 71/38/22 74/40/22 +f 71/36/23 70/35/23 73/42/23 +f 75/39/24 70/38/24 76/40/24 +f 76/40/25 69/43/25 78/45/25 +f 79/133/26 80/46/26 69/48/26 +f 80/46/27 81/49/27 77/50/27 +f 81/49/16 82/51/16 78/45/16 +f 84/44/28 72/43/28 83/45/28 +f 85/133/26 72/48/26 86/46/26 +f 86/46/27 84/47/27 87/49/27 +f 87/49/16 83/45/16 88/51/16 +f 89/4/19 90/1/19 92/3/19 +f 93/4/18 94/3/18 96/1/18 +f 89/8/29 92/3/29 93/5/29 +f 92/3/15 91/2/15 94/4/15 +f 91/2/17 90/6/17 95/1/17 +f 90/2/16 89/3/16 96/1/16 +f 105/55/30 106/52/30 108/54/30 +f 112/53/14 109/52/14 111/54/14 +f 113/60/31 114/56/31 116/58/31 +f 117/61/32 118/59/32 116/58/32 +f 119/52/15 117/61/15 115/57/15 +f 123/65/33 120/62/33 122/58/33 +f 125/64/34 124/63/34 122/58/34 +f 126/69/15 125/64/15 123/65/15 +f 120/134/18 127/66/18 123/68/18 +f 131/53/14 128/52/14 130/54/14 +f 132/55/30 133/52/30 135/54/30 +f 139/57/31 136/56/31 138/58/31 +f 137/60/34 140/59/34 138/58/34 +f 141/61/15 142/52/15 138/58/15 +f 143/60/33 144/62/33 146/58/33 +f 147/64/35 148/63/35 146/58/35 +f 147/64/15 149/69/15 146/58/15 +f 149/69/19 150/69/19 145/65/19 +f 151/9/30 152/12/30 154/10/30 +f 155/9/36 156/10/36 158/12/36 +f 159/9/16 160/10/16 162/13/16 +f 163/135/37 164/70/37 166/72/37 +f 164/70/38 167/73/38 165/71/38 +f 170/81/19 166/75/19 169/76/40 +f 165/70/39 168/77/41 169/76/40 +f 168/74/43 167/73/43 171/80/43 +f 172/78/74 167/77/44 173/76/46 +f 164/70/45 163/75/18 173/76/46 +f 175/11/36 176/10/36 178/12/36 +f 179/11/30 180/12/30 182/10/30 +f 183/14/15 184/13/15 186/10/15 +f 195/17/15 196/16/15 198/82/15 +f 199/20/16 200/19/16 202/83/16 +f 197/23/17 196/22/17 201/84/17 +f 202/21/19 196/22/19 199/24/19 +f 219/136/15 220/85/15 222/87/15 +f 226/136/15 223/87/15 225/85/15 +f 220/85/15 227/88/15 221/86/15 +f 225/85/15 224/86/15 230/88/15 +f 231/93/16 232/90/16 234/92/16 +f 238/91/16 235/90/16 237/92/16 +f 234/92/16 233/91/16 240/95/16 +f 242/94/16 238/91/16 241/95/16 +f 219/99/47 222/96/47 231/98/47 +f 235/97/48 223/96/48 236/98/48 +f 226/99/18 225/100/49 236/102/18 +f 225/100/49 230/103/51 237/101/50 +f 230/107/52 229/105/52 241/106/52 +f 228/105/52 227/107/52 239/94/52 +f 240/104/53 227/103/53 234/101/55 +f 234/101/55 220/100/54 231/102/19 +f 251/112/56 252/108/56 254/110/56 +f 255/113/57 256/111/57 251/110/57 +f 256/113/18 257/111/18 252/110/18 +f 257/113/58 258/111/58 253/110/58 +f 254/110/19 258/113/19 251/112/19 +f 259/137/59 260/114/59 262/116/59 +f 263/137/60 264/116/60 266/114/60 +f 262/138/61 261/115/61 264/118/61 +f 261/115/16 260/114/16 265/117/16 +f 260/114/62 259/120/62 266/119/62 +f 275/4/19 276/1/19 278/3/19 +f 279/4/18 280/3/18 282/1/18 +f 275/8/29 278/3/29 279/5/29 +f 278/3/15 277/2/15 280/4/15 +f 277/2/17 276/6/17 281/1/17 +f 276/2/16 275/3/16 282/1/16 +f 286/110/63 283/112/63 285/109/63 +f 287/113/64 288/111/64 283/110/64 +f 284/110/65 288/113/65 285/112/65 +f 285/110/66 289/113/66 286/112/66 +f 290/113/67 287/111/67 286/110/67 +f 291/112/75 292/108/68 294/110/68 +f 295/113/69 296/111/69 291/110/69 +f 292/110/76 296/113/70 293/112/70 +f 293/110/71 297/113/71 294/112/71 +f 294/110/72 298/113/72 291/112/72 +f 307/126/18 308/122/18 310/124/18 +f 311/126/19 312/124/19 314/122/19 +f 307/139/15 310/125/15 311/126/15 +f 309/123/16 308/122/16 313/128/16 +f 308/122/73 307/129/73 314/127/73 +f 315/10/14 316/11/14 318/9/14 +f 322/9/13 319/12/13 321/10/13 +f 323/13/16 324/14/16 326/9/16 +usemtl Material__2 +f 61/140/10 62/141/10 63/142/10 +f 65/140/12 66/143/12 67/142/12 +f 64/144/7 66/145/7 65/140/7 +f 63/141/9 67/142/9 66/143/9 +f 61/143/11 65/140/11 68/141/11 +f 98/141/19 99/142/19 100/143/19 +f 102/143/18 103/142/18 104/141/18 +f 100/144/29 102/145/29 101/140/29 +f 99/141/15 103/142/15 102/143/15 +f 97/143/16 101/140/16 104/141/16 +f 188/146/68 189/147/68 190/148/68 +f 192/149/72 188/150/72 187/148/72 +f 193/149/69 189/150/69 188/148/69 +f 193/151/76 194/149/76 190/150/76 +f 191/149/71 187/150/71 190/148/71 +f 203/140/7 204/141/7 205/142/7 +f 207/140/8 208/143/8 209/142/8 +f 206/144/9 208/145/9 207/140/9 +f 205/141/10 209/142/10 208/143/10 +f 204/142/12 203/143/12 207/140/12 +f 212/146/56 213/147/56 214/148/56 +f 216/149/57 212/150/57 211/148/57 +f 217/149/18 213/150/18 212/148/18 +f 218/149/58 214/150/58 213/148/58 +f 215/149/19 211/150/19 214/148/19 +f 244/146/63 245/147/63 246/148/63 +f 248/149/67 244/150/67 243/148/67 +f 249/149/64 245/150/64 244/148/64 +f 249/151/65 250/149/65 246/150/65 +f 250/151/66 247/149/66 243/150/66 +f 267/140/6 268/141/6 269/142/6 +f 271/140/4 272/143/4 273/142/4 +f 267/143/2 270/144/2 272/145/2 +f 269/141/3 273/142/3 272/143/3 +f 268/142/5 267/143/5 271/140/5 +f 300/141/19 301/142/19 302/143/19 +f 304/143/18 305/142/18 306/141/18 +f 302/144/29 304/145/29 303/140/29 +f 301/141/15 305/142/15 304/143/15 +f 299/143/16 303/140/16 306/141/16 +f 327/140/1 328/141/1 329/142/1 +f 331/140/2 332/143/2 333/142/2 +f 330/144/3 332/145/3 331/140/3 +f 330/140/4 329/141/4 333/142/4 +f 327/143/6 331/140/6 334/141/6 +f 64/143/10 61/140/10 63/142/10 +f 68/141/12 65/140/12 67/142/12 +f 61/143/7 64/144/7 65/140/7 +f 64/140/9 63/141/9 66/143/9 +f 62/142/11 61/143/11 68/141/11 +f 97/140/19 98/141/19 100/143/19 +f 101/140/18 102/143/18 104/141/18 +f 97/143/29 100/144/29 101/140/29 +f 100/140/15 99/141/15 102/143/15 +f 98/142/16 97/143/16 104/141/16 +f 187/150/68 188/146/68 190/148/68 +f 191/151/72 192/149/72 187/148/72 +f 192/151/69 193/149/69 188/148/69 +f 189/148/70 193/151/76 190/150/76 +f 194/151/71 191/149/71 190/148/71 +f 206/143/7 203/140/7 205/142/7 +f 210/141/8 207/140/8 209/142/8 +f 203/143/9 206/144/9 207/140/9 +f 206/140/10 205/141/10 208/143/10 +f 210/141/12 204/142/12 207/140/12 +f 211/150/56 212/146/56 214/148/56 +f 215/151/57 216/149/57 211/148/57 +f 216/151/18 217/149/18 212/148/18 +f 217/151/58 218/149/58 213/148/58 +f 218/151/19 215/149/19 214/148/19 +f 243/150/63 244/146/63 246/148/63 +f 247/151/67 248/149/67 243/148/67 +f 248/151/64 249/149/64 244/148/64 +f 245/148/65 249/151/65 246/150/65 +f 246/148/66 250/151/66 243/150/66 +f 270/143/6 267/140/6 269/142/6 +f 274/141/4 271/140/4 273/142/4 +f 271/140/2 267/143/2 272/145/2 +f 270/140/3 269/141/3 272/143/3 +f 274/141/5 268/142/5 271/140/5 +f 299/140/19 300/141/19 302/143/19 +f 303/140/18 304/143/18 306/141/18 +f 299/143/29 302/144/29 303/140/29 +f 302/140/15 301/141/15 304/143/15 +f 300/142/16 299/143/16 306/141/16 +f 330/143/1 327/140/1 329/142/1 +f 334/141/2 331/140/2 333/142/2 +f 327/143/3 330/144/3 331/140/3 +f 332/143/4 330/140/4 333/142/4 +f 328/142/6 327/143/6 334/141/6 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_bottom.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_bottom.obj new file mode 100644 index 00000000..45d245f5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_bottom.obj @@ -0,0 +1,70 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:10:25 + +mtllib astroMinerLaserBottom.mtl + +# +# object Main_Laser_Bottom +# + +v -0.9375 -15.0000 -31.8750 +v -0.9375 -15.9375 -30.9375 +v -0.9375 -15.9375 -19.6875 +v -0.9375 -15.0000 -18.7500 +v 0.9375 -15.9375 -19.6875 +v 0.9375 -15.9375 -30.9375 +v 0.9375 -15.0000 -31.8750 +v 0.9375 -15.0000 -18.7500 +# 8 vertices + +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 0.0000 -0.0000 +vn 1.0000 -0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.7071 0.7071 +vn -0.0000 1.0000 0.0000 +vn 0.0000 -0.7071 -0.7071 +# 8 vertex normals + +vt 0.9570 0.3828 0.4844 +vt 0.9492 0.3672 0.4844 +vt 0.8555 0.3672 0.4844 +vt 0.8477 0.3828 0.4844 +vt 0.9492 0.3672 0.5156 +vt 0.8555 0.3672 0.5156 +vt 0.8477 0.3828 0.5156 +vt 0.9570 0.3828 0.5156 +vt 0.8555 0.3672 0.0313 +vt 0.9492 0.3672 0.0313 +vt 0.9492 0.3359 0.0313 +vt 0.8555 0.3359 0.0313 +vt 0.8398 0.4141 0.0469 +vt 0.8477 0.4141 0.0313 +vt 0.8477 0.3828 0.0313 +vt 0.8398 0.3828 0.0469 +vt 0.9570 0.3828 0.0469 +vt 0.8477 0.3828 0.0469 +vt 0.8477 0.4141 0.0469 +vt 0.9570 0.4141 0.0469 +vt 0.9648 0.3828 0.6719 +vt 0.9570 0.3828 0.6875 +vt 0.9570 0.4141 0.6875 +vt 0.9648 0.4141 0.6719 +# 24 texture coords + +g Main_Laser_Bottom +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/2 4/4/2 +f 5/5/3 6/6/4 7/7/4 8/8/3 +s 2 +f 3/9/5 2/10/5 6/11/5 5/12/5 +s 4 +f 4/13/6 3/14/6 5/15/6 8/16/6 +s 2 +f 1/17/7 4/18/7 8/19/7 7/20/7 +s 4 +f 2/21/8 1/22/8 7/23/8 6/24/8 +# 6 polygons + diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_center.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_center.obj new file mode 100644 index 00000000..47c2ede6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_center.obj @@ -0,0 +1,67 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:10:13 + +mtllib astroMinerLaserCenter.mtl + +# +# object Main_Laser_Center +# + +v 1.8750 -15.0000 -18.7500 +v 1.8750 -15.0000 -22.8125 +v 1.8750 -10.0000 -17.8125 +v 1.8750 -10.0000 -13.7500 +v -1.8750 -15.0000 -18.7500 +v -1.8750 -10.0000 -13.7500 +v -1.8750 -10.0000 -17.8125 +v -1.8750 -15.0000 -22.8125 +# 8 vertices + +vn 1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn -1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.7071 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn -0.0000 1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -1.0000 -0.0000 +# 11 vertex normals + +vt 0.7891 0.4141 0.5313 +vt 0.8242 0.4141 0.5313 +vt 0.7813 0.3281 0.5313 +vt 0.7461 0.3281 0.5312 +vt 0.7891 0.4141 0.4688 +vt 0.7461 0.3281 0.4687 +vt 0.7813 0.3281 0.4687 +vt 0.8242 0.4141 0.4688 +vt 0.8516 0.2656 0.0469 +vt 0.8867 0.2656 0.1250 +vt 0.8867 0.3281 0.1250 +vt 0.8516 0.3281 0.0469 +vt 0.7813 0.3281 0.1250 +vt 0.7813 0.2656 0.1250 +vt 0.7461 0.2656 0.1250 +vt 0.7461 0.3281 0.1250 +vt 0.8164 0.3281 0.0469 +vt 0.8164 0.2656 0.0469 +# 18 texture coords + +g Main_Laser_Center +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/2 4/4/2 +f 5/5/3 6/6/4 7/7/4 8/8/3 +s 2 +f 1/9/5 4/10/5 6/11/5 5/12/6 +s 4 +f 4/13/7 3/14/8 7/15/7 6/16/9 +s 2 +f 3/13/10 2/17/10 8/18/10 7/14/10 +s 4 +f 2/9/11 1/18/11 5/17/11 8/12/11 +# 6 polygons + diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_front.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_front.obj new file mode 100644 index 00000000..23a2e442 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_front.obj @@ -0,0 +1,90 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:10:36 + +mtllib astroMinerLaserFront.mtl + +# +# object Main_Laser_Front +# + +v 0.0000 -10.0000 -40.0000 +v 0.0000 -10.9375 -40.0000 +v 0.0000 -10.9375 -31.8750 +v 0.0000 -10.0000 -31.8750 +v -0.9375 -12.8125 -40.0000 +v -0.9375 -13.7500 -40.0000 +v -0.9375 -13.7500 -31.8750 +v -0.9375 -12.8125 -31.8750 +v 0.9375 -12.8125 -31.8750 +v 0.9375 -12.8125 -40.0000 +v 0.9375 -13.7500 -40.0000 +v 0.9375 -13.7500 -31.8750 +v 0.9375 -10.9375 -40.0000 +v 0.9375 -10.9375 -17.5000 +v 0.9375 -12.8125 -17.5000 +v -0.9375 -12.8125 -17.5000 +v -0.9375 -10.9375 -17.5000 +v -0.9375 -10.9375 -40.0000 +# 18 vertices + +vn -1.0000 0.0000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 -0.0000 0.0000 +# 8 vertex normals + +vt 0.8086 0.7813 0.5000 +vt 0.8086 0.7656 0.5000 +vt 0.7461 0.7656 0.5000 +vt 0.7461 0.7813 0.5000 +vt 0.8086 0.7031 0.4844 +vt 0.8086 0.6875 0.4844 +vt 0.7461 0.6875 0.4844 +vt 0.7461 0.7031 0.4844 +vt 0.7461 0.7031 0.5156 +vt 0.8086 0.7031 0.5156 +vt 0.8086 0.6875 0.5156 +vt 0.7461 0.6875 0.5156 +vt 0.8086 0.7344 0.5156 +vt 0.6367 0.7344 0.5156 +vt 0.6367 0.7031 0.5156 +vt 0.6367 0.7031 0.4844 +vt 0.6367 0.7344 0.4844 +vt 0.8086 0.7344 0.4844 +vt 0.8086 0.7656 0.0781 +vt 0.6367 0.7656 0.0781 +vt 0.6367 0.7344 0.0781 +vt 0.8086 0.7344 0.0781 +vt 0.6367 0.7344 0.1094 +vt 0.8086 0.7344 0.1094 +vt 0.8086 0.7656 0.1094 +vt 0.6367 0.7656 0.1094 +vt 0.8242 0.7656 0.7969 +vt 0.8242 0.7344 0.7969 +vt 0.8086 0.7344 0.7969 +vt 0.8086 0.7656 0.7969 +# 30 texture coords + +g Main_Laser_Front +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 +f 10/10/3 13/13/3 14/14/3 15/15/3 +f 5/5/2 16/16/2 17/17/2 18/18/2 +s 2 +f 10/19/4 15/20/4 16/21/4 5/22/5 +f 14/23/6 13/24/6 18/25/6 17/26/6 +s 4 +f 13/27/7 10/28/7 5/29/7 18/30/7 +s 1 +f 2/2/8 1/1/8 4/4/8 3/3/8 +f 6/6/3 5/5/3 8/8/8 7/7/8 +f 10/10/3 9/9/3 12/12/3 11/11/3 +# 11 polygons + diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_left_guard.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_left_guard.obj new file mode 100644 index 00000000..540c443c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_left_guard.obj @@ -0,0 +1,60 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:09:04 + +mtllib astroMinerLeftGuard.mtl + +# +# object Main_Laser_Left_Guard +# + +v -3.7500 -14.3750 -19.3750 +v -3.7500 -8.7500 -25.0000 +v -3.7500 -8.7500 -7.5000 +v -3.7500 -14.3750 -7.5000 +v -5.0000 -14.3750 -19.3750 +v -5.0000 -14.3750 -7.5000 +v -5.0000 -8.7500 -7.5000 +v -5.0000 -8.7500 -25.0000 +# 8 vertices + +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 -0.7071 -0.7071 +# 5 vertex normals + +vt 0.3984 0.5859 0.6172 +vt 0.3516 0.4922 0.6172 +vt 0.5000 0.4922 0.6172 +vt 0.5000 0.5859 0.6172 +vt 0.3984 0.3750 0.0000 +vt 0.5000 0.3750 0.0000 +vt 0.5000 0.4688 0.0000 +vt 0.3516 0.4688 0.0000 +vt 0.3984 0.3516 0.0078 +vt 0.5000 0.3516 0.0078 +vt 0.5000 0.3750 0.0078 +vt 0.3984 0.3750 0.0078 +vt 0.5000 0.4922 0.0859 +vt 0.3516 0.4922 0.0859 +vt 0.3516 0.4688 0.0859 +vt 0.5000 0.4688 0.0859 +vt 0.2930 0.3516 0.7266 +vt 0.3984 0.3516 0.8047 +vt 0.3984 0.3750 0.8047 +vt 0.2930 0.3750 0.7266 +# 20 texture coords + +g Main_Laser_Left_Guard +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +s 2 +f 1/9/3 4/10/3 6/11/3 5/12/3 +f 3/13/4 2/14/4 8/15/4 7/16/4 +s 4 +f 2/17/5 1/18/5 5/19/5 8/20/5 +# 5 polygons + diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.mtl new file mode 100644 index 00000000..7db3adff --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.mtl @@ -0,0 +1,12 @@ +# Blender MTL File: 'None' +# Material Count: 2 + +newmtl 05___Default +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 + +newmtl Material__2 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.obj new file mode 100644 index 00000000..0b40253e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.obj @@ -0,0 +1,1021 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib astroMinerRightGuard.mtl +o Hoverpad_Front_Left_Bottom +v 1.544852 -0.649704 -0.902352 +v 1.604852 -0.564852 -0.842352 +v 1.435148 -0.564852 -0.672648 +v 1.375148 -0.649704 -0.732648 +v 1.424852 -0.480000 -1.022352 +v 1.255148 -0.480000 -0.852648 +v 1.315148 -0.395148 -0.792648 +v 1.484852 -0.395148 -0.962352 +v 1.484852 0.529704 -0.902352 +v 1.544852 0.444852 -0.842352 +v 1.424852 0.275148 -0.962352 +v 1.364852 0.360000 -1.022352 +v 1.315148 0.529704 -0.732648 +v 1.195148 0.360000 -0.852648 +v 1.255148 0.275148 -0.792648 +v 1.375148 0.444852 -0.672648 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 -0.000000 0.707100 +vn 0.500000 0.707100 0.500000 +vn 0.707100 0.000000 -0.707100 +usemtl 05___Default +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/1/2 6/4/2 7/3/2 8/2/2 +f 1/5/3 4/4/3 6/1/3 5/6/3 +f 4/4/4 3/3/4 7/2/4 6/1/4 +f 3/3/5 2/7/5 8/8/5 7/2/5 +f 2/3/6 1/4/6 5/1/6 8/2/6 +f 9/1/6 10/2/6 11/3/6 12/4/6 +f 13/1/4 14/4/4 15/3/4 16/2/4 +f 9/5/2 12/4/2 14/1/2 13/6/2 +f 12/4/3 11/3/3 15/2/3 14/1/3 +f 11/3/1 10/7/1 16/8/1 15/2/1 +f 10/3/5 9/4/5 13/1/5 16/2/5 +o Hoverpad_Front_Right_Bottom +v 2.575148 -0.480000 -1.022352 +v 2.515148 -0.395148 -0.962352 +v 2.684852 -0.395148 -0.792648 +v 2.744852 -0.480000 -0.852648 +v 2.455148 -0.649704 -0.902352 +v 2.624852 -0.649704 -0.732648 +v 2.564852 -0.564852 -0.672648 +v 2.395148 -0.564852 -0.842352 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 -0.000000 0.707100 +vn -0.500000 0.707100 0.500000 +vn -0.707100 0.000000 -0.707100 +usemtl 05___Default +f 17/9/7 18/10/7 19/11/7 20/12/7 +f 21/9/8 22/12/8 23/11/8 24/10/8 +f 17/13/9 20/12/9 22/9/9 21/14/9 +f 20/12/10 19/11/10 23/10/10 22/9/10 +f 19/11/11 18/15/11 24/16/11 23/10/11 +f 18/11/12 17/12/12 21/9/12 24/10/12 +o Hoverpad_Front_Right_Top +v 2.684852 0.529704 -0.732648 +v 2.624852 0.444852 -0.672648 +v 2.744852 0.275148 -0.792648 +v 2.804852 0.360000 -0.852648 +v 2.515148 0.529704 -0.902352 +v 2.635148 0.360000 -1.022352 +v 2.575148 0.275148 -0.962352 +v 2.455148 0.444852 -0.842352 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn 0.707100 0.000000 0.707100 +vn -0.707100 -0.000000 -0.707100 +vn 0.500000 0.707100 -0.500000 +vn 0.500000 -0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 0.500000 +usemtl 05___Default +f 25/17/13 26/18/13 27/19/13 28/20/13 +f 29/17/14 30/20/14 31/19/14 32/18/14 +f 25/21/15 28/20/15 30/17/15 29/22/15 +f 28/20/16 27/19/16 31/18/16 30/17/16 +f 27/19/17 26/23/17 32/24/17 31/18/17 +f 26/19/18 25/20/18 29/17/18 32/18/18 +o Left_Laser_Invert +v 0.912500 0.000000 -1.200000 +v 1.025000 -0.112500 -1.200000 +v 1.025000 -0.112500 -0.600000 +v 0.912500 0.000000 -0.600000 +v 1.025000 0.000000 -0.600000 +v 1.025000 0.000000 -1.200000 +v 0.912500 -0.112500 -1.200000 +v 0.912500 -0.112500 -0.600000 +v 0.968750 -0.056250 -0.600000 +v 0.968750 -0.056250 -1.200000 +v 1.193750 -0.056250 -1.200000 +v 1.193750 -0.056250 -0.600000 +vt 0.265600 0.914100 +vt 0.238300 0.914100 +vt 0.238300 0.703100 +vt 0.265600 0.703100 +vt 0.191400 0.914100 +vt 0.191400 0.703100 +vn -0.707100 -0.707100 -0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 -1.000000 -0.000000 +usemtl 05___Default +f 33/25/19 34/26/19 35/27/19 36/28/19 +f 37/27/20 38/26/20 39/25/20 40/28/20 +f 41/27/21 42/26/21 43/29/21 44/30/21 +o Right_Laser_Attachment +v 2.881250 -0.150000 -0.094290 +v 2.881250 -0.150000 -0.600000 +v 3.087500 -0.150000 -0.600000 +v 3.087500 -0.150000 -0.094290 +v 3.087500 0.037500 -0.600000 +v 2.881250 0.037500 -0.600000 +v 2.881250 0.037500 -0.164880 +v 3.087500 0.037500 -0.164880 +vt 0.281300 0.796900 +vt 0.343800 0.796900 +vt 0.343800 0.843700 +vt 0.281300 0.843700 +vt 0.343800 0.890600 +vt 0.343800 0.937500 +vt 0.290000 0.937500 +vt 0.290000 0.890600 +vt 0.367200 0.890200 +vt 0.343800 0.890200 +vt 0.343800 0.844100 +vt 0.367200 0.844100 +vt 0.290000 0.890200 +vt 0.281300 0.844100 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +usemtl 05___Default +f 45/31/22 46/32/22 47/33/22 48/34/22 +f 49/35/23 50/36/23 51/37/23 52/38/23 +f 50/39/24 49/40/24 47/41/24 46/42/24 +f 49/40/25 52/43/25 48/44/25 47/41/25 +o Hull_Front +v 2.412500 -0.480000 -1.599582 +v 2.412500 0.310002 -1.899582 +v 2.412500 0.780000 -0.459582 +v 2.412500 -0.480000 -0.459582 +v 1.587500 -0.480000 -1.599582 +v 1.587500 -0.480000 -0.459582 +v 1.587500 0.780000 -0.459582 +v 1.587500 0.310002 -1.899582 +vt 0.851600 0.796900 +vt 0.812800 0.591300 +vt 1.000000 0.469100 +vt 1.000000 0.796900 +vt 1.000000 1.000000 +vt 0.851600 1.000000 +vt 0.562500 0.796900 +vt 0.750000 0.796900 +vt 0.750000 1.000000 +vt 0.562500 1.000000 +vn 1.000000 -0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.950600 -0.310300 +vn 0.000000 -0.355000 -0.934900 +usemtl 05___Default +f 53/45/26 54/46/26 55/47/26 56/48/26 +f 57/45/27 58/48/27 59/47/27 60/46/27 +f 53/45/28 56/48/28 58/49/28 57/50/28 +f 55/51/29 54/52/29 60/53/29 59/54/29 +f 54/52/30 53/45/30 57/50/30 60/53/30 +o Hoverpad_Front_Right_Top_Glow +v 2.706068 0.572130 -0.711432 +v 2.631068 0.466068 -0.636432 +v 2.781068 0.253932 -0.786432 +v 2.856068 0.360000 -0.861432 +v 2.493932 0.572130 -0.923568 +v 2.643932 0.360000 -1.073568 +v 2.568932 0.253932 -0.998568 +v 2.418932 0.466068 -0.848568 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn 0.707100 0.000000 0.707100 +vn -0.707100 -0.000000 -0.707100 +vn 0.500000 0.707100 -0.500000 +vn 0.500000 -0.707100 -0.500000 +vn -0.500000 0.707100 0.500000 +usemtl Material__2 +f 61/55/31 62/56/31 63/57/31 64/58/31 +f 65/55/32 66/58/32 67/57/32 68/56/32 +f 61/58/33 64/59/33 66/60/33 65/55/33 +f 64/55/34 63/56/34 67/57/34 66/58/34 +f 62/57/35 61/58/35 65/55/35 68/56/35 +o Hull_Bottom +v 1.400000 -0.900000 0.200418 +v 1.700000 -0.900000 -0.459582 +v 2.300000 -0.900000 -0.459582 +v 2.600000 -0.900000 0.200418 +v 2.675000 -0.375000 -0.669582 +v 2.975000 -0.375000 -0.009582 +v 1.325000 -0.375000 -0.669582 +v 1.025000 -0.375000 -0.009582 +v 1.149998 -0.550002 0.860418 +v 1.025000 -0.375000 0.680418 +v 1.460000 -0.900000 0.200418 +v 1.460000 -0.550002 0.860418 +v 1.460000 -0.375000 0.680418 +v 1.460000 -0.375000 -0.009582 +v 2.975000 -0.375000 0.680418 +v 2.850002 -0.550002 0.860418 +v 2.540000 -0.900000 0.200418 +v 2.540000 -0.550002 0.860418 +v 2.540000 -0.375000 0.680418 +v 2.540000 -0.375000 -0.009582 +vt 0.488700 0.003900 +vt 0.448100 0.179700 +vt 0.368100 0.179700 +vt 0.327600 0.003900 +vt 0.238300 -0.000000 +vt 0.324200 -0.000000 +vt 0.351600 0.140600 +vt 0.265600 0.140600 +vt 0.498200 0.319800 +vt 0.318100 0.319800 +vt 0.152300 0.093800 +vt 0.175800 0.140600 +vt 0.066400 0.250000 +vt 0.152300 0.250000 +vt 0.152300 0.171900 +vt 0.066400 0.234400 +vt 0.175800 0.250000 +vt 0.152300 0.172100 +vt 0.265600 0.250000 +vn 0.000000 -1.000000 -0.000000 +vn 0.705400 -0.632100 -0.320600 +vn 0.000000 -0.371400 -0.928500 +vn -0.705400 -0.632100 -0.320600 +vn -0.813700 -0.581200 -0.000000 +vn 0.000000 -0.883500 0.468500 +vn 0.000000 0.717000 0.697100 +vn 0.000000 1.000000 0.000000 +vn 0.813700 -0.581200 -0.000000 +usemtl 05___Default +f 69/61/36 70/62/36 71/63/36 72/64/36 +f 72/65/37 71/66/37 73/67/37 74/68/37 +f 71/63/38 70/62/38 75/69/38 73/70/38 +f 70/66/39 69/65/39 76/68/39 75/67/39 +f 69/65/40 77/71/40 78/72/40 76/68/40 +f 79/73/41 80/74/41 77/75/41 69/76/41 +f 80/74/42 81/77/42 78/72/42 77/78/42 +f 81/77/43 82/79/43 76/68/43 78/72/43 +f 72/65/44 74/68/44 83/72/44 84/71/44 +f 85/73/41 72/76/41 84/75/41 86/74/41 +f 86/74/42 84/75/42 83/72/42 87/77/42 +f 87/77/43 83/72/43 74/68/43 88/79/43 +o Hoverpad_Rear_Left +v 1.092500 0.207168 0.495000 +v 1.092500 0.207168 0.375000 +v 1.092500 -0.032832 0.375000 +v 1.092500 -0.032832 0.495000 +v 1.332500 0.207168 0.495000 +v 1.332500 -0.032832 0.495000 +v 1.332500 -0.032832 0.375000 +v 1.332500 0.207168 0.375000 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +usemtl 05___Default +f 89/80/45 90/81/45 91/82/45 92/83/45 +f 93/80/46 94/83/46 95/82/46 96/81/46 +f 89/84/47 92/83/47 94/80/47 93/85/47 +f 92/83/48 91/82/48 95/81/48 94/80/48 +f 91/82/49 90/86/49 96/87/49 95/81/49 +f 90/82/50 89/83/50 93/80/50 96/81/50 +o Hoverpad_Rear_Left_Glow +v 1.062500 0.237168 0.525000 +v 1.062500 0.237168 0.375000 +v 1.062500 -0.062832 0.375000 +v 1.062500 -0.062832 0.525000 +v 1.362500 0.237168 0.525000 +v 1.362500 -0.062832 0.525000 +v 1.362500 -0.062832 0.375000 +v 1.362500 0.237168 0.375000 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn -1.000000 0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl Material__2 +f 97/88/51 98/89/51 99/90/51 100/91/51 +f 101/88/52 102/91/52 103/90/52 104/89/52 +f 97/91/53 100/92/53 102/93/53 101/88/53 +f 100/88/54 99/89/54 103/90/54 102/91/54 +f 98/90/55 97/91/55 101/88/55 104/89/55 +o Hoverpad_Attachment +v 1.475000 -0.175002 0.187500 +v 1.100000 0.199998 0.187500 +v 1.100000 0.199998 0.375000 +v 1.325000 -0.025002 0.375000 +v 1.325000 0.199998 0.187500 +v 0.950000 -0.175002 0.187500 +v 1.100000 -0.025002 0.375000 +v 1.325000 0.199998 0.375000 +v 1.325456 0.262500 -0.900000 +v 1.587956 0.262500 -0.900000 +v 1.587956 0.431250 -0.787500 +v 1.437956 0.431250 -0.787500 +v 1.437956 0.431250 -0.547818 +v 1.325456 0.262500 -0.579582 +v 1.587956 0.431250 -0.547818 +v 1.587956 -0.375000 -0.918750 +v 1.362500 -0.375000 -0.918750 +v 1.475000 -0.543750 -0.806250 +v 1.587956 -0.543750 -0.806250 +v 1.362500 -0.375000 -0.669582 +v 1.475000 -0.543750 -0.602082 +v 1.587956 -0.543750 -0.602082 +v 1.587956 -0.375000 -0.669582 +v 2.900000 0.199998 0.187500 +v 2.525000 -0.175002 0.187500 +v 2.675000 -0.025002 0.375000 +v 2.900000 0.199998 0.375000 +v 3.050000 -0.175002 0.187500 +v 2.675000 0.199998 0.187500 +v 2.675000 0.199998 0.375000 +v 2.900000 -0.025002 0.375000 +v 2.412044 0.262500 -0.900000 +v 2.674544 0.262500 -0.900000 +v 2.562044 0.431250 -0.787500 +v 2.412044 0.431250 -0.787500 +v 2.674544 0.262500 -0.579582 +v 2.562044 0.431250 -0.547818 +v 2.412044 0.431250 -0.547818 +v 2.637500 -0.375000 -0.918750 +v 2.412044 -0.375000 -0.918750 +v 2.412044 -0.543750 -0.806250 +v 2.525000 -0.543750 -0.806250 +v 2.525000 -0.543750 -0.602082 +v 2.637500 -0.375000 -0.669582 +v 2.412044 -0.543750 -0.602082 +v 2.412044 -0.375000 -0.669582 +vt 0.371100 0.375000 +vt 0.320300 0.375000 +vt 0.320300 0.429700 +vt 0.351600 0.429700 +vt 0.269500 0.453100 +vt 0.269500 0.375000 +vt 0.289100 0.375000 +vt 0.289100 0.414100 +vt 0.320300 0.414100 +vt 0.316400 0.453100 +vt 0.269500 0.382800 +vt 0.289100 0.382800 +vt 0.304700 0.414100 +vt 0.304700 0.453100 +vt 0.304700 0.382800 +vt 0.308600 0.382800 +vt 0.320300 0.445300 +vt 0.281300 0.445300 +vt 0.261700 0.382800 +vn 0.707100 0.707100 -0.000000 +vn -0.707100 0.707100 -0.000000 +vn 0.000000 -0.554700 0.832100 +vn 0.832000 -0.554700 -0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 0.554700 0.832100 +vn -0.832100 -0.554700 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.554700 0.832000 +vn -0.832100 0.554700 0.000000 +vn -1.000000 0.000000 0.000000 +usemtl 05___Default +f 105/94/56 106/95/56 107/96/56 108/97/56 +f 109/95/57 110/94/57 111/97/57 112/96/57 +f 113/98/58 114/99/58 115/100/58 116/101/58 +f 117/102/59 118/103/59 113/98/59 116/101/59 +f 119/95/60 117/102/60 116/101/60 115/100/60 +f 120/104/61 121/98/61 122/101/61 123/105/61 +f 125/106/62 124/107/62 121/98/62 122/101/62 +f 126/108/60 125/106/60 122/101/60 123/105/60 +f 127/109/63 126/110/63 123/111/63 120/112/63 +f 128/95/57 129/94/57 130/97/57 131/96/57 +f 132/94/56 133/95/56 134/96/56 135/97/56 +f 136/99/64 137/98/64 138/101/64 139/100/64 +f 140/103/62 141/102/62 138/101/62 137/98/62 +f 141/102/60 142/95/60 139/100/60 138/101/60 +f 143/98/61 144/104/61 145/105/61 146/101/61 +f 147/106/65 148/107/65 143/98/65 146/101/65 +f 147/106/60 149/108/60 145/105/60 146/101/60 +f 149/108/66 150/108/66 144/104/66 145/105/66 +o Left_Laser +v 1.025000 -0.112500 -1.200000 +v 0.912500 0.000000 -1.200000 +v 0.912500 0.000000 -0.600000 +v 1.025000 -0.112500 -0.600000 +v 1.025000 0.000000 -1.200000 +v 1.025000 0.000000 -0.600000 +v 0.912500 -0.112500 -0.600000 +v 0.912500 -0.112500 -1.200000 +v 0.968750 -0.056250 -1.200000 +v 0.968750 -0.056250 -0.600000 +v 1.193750 -0.056250 -0.600000 +v 1.193750 -0.056250 -1.200000 +vt 0.238300 0.914100 +vt 0.265600 0.914100 +vt 0.265600 0.703100 +vt 0.238300 0.703100 +vt 0.191400 0.703100 +vt 0.191400 0.914100 +vn 0.707100 0.707100 0.000000 +vn 0.707100 -0.707100 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl 05___Default +f 151/113/67 152/114/67 153/115/67 154/116/67 +f 155/113/68 156/116/68 157/115/68 158/114/68 +f 159/113/69 160/116/69 161/117/69 162/118/69 +o Hull_Rear +v 2.540000 -0.900000 0.200418 +v 2.540000 -0.270000 1.400418 +v 1.460000 -0.270000 1.400418 +v 1.460000 -0.900000 0.200418 +v 2.420000 0.247500 1.490418 +v 1.580000 0.247500 1.490418 +v 1.460000 0.270000 0.140418 +v 1.460000 -0.360000 -0.219582 +v 1.580000 0.780000 0.230418 +v 2.420000 0.780000 0.230418 +v 2.540000 0.270000 0.140418 +v 2.540000 -0.360000 -0.219582 +vt 0.496100 0.281300 +vt 0.652300 0.281300 +vt 0.652300 0.000000 +vt 0.496100 0.000000 +vt 0.722700 0.250000 +vt 0.722700 0.031300 +vt 0.570300 0.593800 +vt 0.722700 0.609400 +vt 0.640600 0.703100 +vt 0.722700 0.257800 +vt 0.789100 0.585900 +vt 0.886700 0.250000 +vt 0.886700 0.031300 +vn 0.000000 -0.885400 0.464800 +vn 0.000000 -0.171300 0.985200 +vn -1.000000 0.000000 0.000000 +vn -0.990300 0.127800 0.054200 +vn -0.992800 0.110500 0.047400 +vn -0.973600 0.210300 0.088900 +vn -0.973000 0.212200 0.090600 +vn 0.000000 0.921100 0.389300 +vn 0.973400 0.210700 0.090000 +vn 0.990400 0.127300 0.054600 +vn 0.992800 0.110300 0.046800 +vn 0.972900 0.213000 0.090000 +vn 1.000000 -0.000000 0.000000 +usemtl 05___Default +f 163/119/70 164/120/70 165/121/70 166/122/70 +f 164/120/71 167/123/71 168/124/71 165/121/71 +f 166/125/72 165/120/73 169/126/74 170/127/72 +f 165/120/73 168/128/75 171/129/76 169/126/74 +f 168/124/77 167/123/77 172/130/77 171/131/77 +f 167/128/78 164/120/79 173/126/80 172/129/81 +f 164/120/79 163/125/82 174/127/82 173/126/80 +o Right_Laser_Invert +v 3.087500 0.000000 -0.600000 +v 2.975000 -0.112500 -0.600000 +v 2.975000 -0.112500 -1.200000 +v 3.087500 0.000000 -1.200000 +v 3.087500 -0.112500 -0.600000 +v 3.087500 -0.112500 -1.200000 +v 2.975000 0.000000 -1.200000 +v 2.975000 0.000000 -0.600000 +v 2.806250 -0.056250 -0.600000 +v 2.806250 -0.056250 -1.200000 +v 3.031250 -0.056250 -1.200000 +v 3.031250 -0.056250 -0.600000 +vt 0.265600 0.703100 +vt 0.238300 0.703100 +vt 0.238300 0.914100 +vt 0.265600 0.914100 +vt 0.191400 0.703100 +vt 0.191400 0.914100 +vn 0.707100 -0.707100 -0.000000 +vn 0.707100 0.707100 0.000000 +vn 0.000000 -1.000000 -0.000000 +usemtl 05___Default +f 175/132/83 176/133/83 177/134/83 178/135/83 +f 179/132/84 180/135/84 181/134/84 182/133/84 +f 183/136/85 184/137/85 185/134/85 186/133/85 +o Hoverpad_Heavy___Glow002 +v 2.697380 -0.615636 -0.578166 +v 2.871548 -0.615636 -0.195984 +v 2.636252 -0.946602 -0.088752 +v 2.462084 -0.946602 -0.470940 +v 2.589818 -0.523290 -0.529152 +v 2.763992 -0.523290 -0.146964 +v 2.528696 -0.854250 -0.039738 +v 2.354522 -0.854250 -0.421920 +vt 0.535200 0.304700 +vt 0.589800 0.304700 +vt 0.589800 0.414100 +vt 0.535200 0.414100 +vt 0.515600 0.414100 +vt 0.515600 0.304700 +vn 0.717100 -0.615700 -0.326800 +vn 0.560200 0.788000 -0.255300 +vn 0.414700 -0.000000 0.910000 +vn -0.560200 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +usemtl Material__2 +f 187/138/86 188/139/86 189/140/86 190/141/86 +f 191/142/87 192/143/87 188/138/87 187/141/87 +f 192/142/88 193/143/88 189/138/88 188/141/88 +f 193/142/89 194/143/89 190/138/89 189/141/89 +f 194/142/90 191/143/90 187/138/90 190/141/90 +o Left_Laser_Attachment +v 0.912500 -0.150000 -0.094290 +v 0.912500 -0.150000 -0.600000 +v 1.118750 -0.150000 -0.600000 +v 1.118750 -0.150000 -0.094290 +v 0.912500 0.037500 -0.164880 +v 1.118750 0.037500 -0.164880 +v 1.118750 0.037500 -0.600000 +v 0.912500 0.037500 -0.600000 +vt 0.281300 0.843700 +vt 0.343800 0.843700 +vt 0.343800 0.796900 +vt 0.281300 0.796900 +vt 0.290000 0.890600 +vt 0.290000 0.937500 +vt 0.343800 0.937500 +vt 0.343800 0.890600 +vt 0.367200 0.844100 +vt 0.343800 0.844100 +vt 0.343800 0.890200 +vt 0.367200 0.890200 +vt 0.281300 0.844100 +vt 0.290000 0.890200 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 0.000000 0.000000 +usemtl 05___Default +f 195/144/91 196/145/91 197/146/91 198/147/91 +f 199/148/92 200/149/92 201/150/92 202/151/92 +f 197/152/93 196/153/93 202/154/93 201/155/93 +f 196/153/94 195/156/94 199/157/94 202/154/94 +o Hoverpad_Front_Right_Bottom_Glow +v 2.583932 -0.480000 -1.073568 +v 2.508932 -0.373932 -0.998568 +v 2.721068 -0.373932 -0.786432 +v 2.796068 -0.480000 -0.861432 +v 2.433932 -0.692130 -0.923568 +v 2.646068 -0.692130 -0.711432 +v 2.571068 -0.586068 -0.636432 +v 2.358932 -0.586068 -0.848568 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +usemtl Material__2 +f 203/158/95 204/159/95 205/160/95 206/161/95 +f 207/158/96 208/161/96 209/160/96 210/159/96 +f 203/161/97 206/162/97 208/163/97 207/158/97 +f 206/158/98 205/159/98 209/160/98 208/161/98 +f 204/160/99 203/161/99 207/158/99 210/159/99 +o Hoverpad_Heavy___Glow003 +v 1.790000 -0.710430 0.881304 +v 2.210000 -0.710430 0.881304 +v 2.210000 -0.515178 1.253160 +v 1.790000 -0.515178 1.253160 +v 1.790000 -0.577626 0.811572 +v 2.210000 -0.577626 0.811572 +v 2.210000 -0.382374 1.183428 +v 1.790000 -0.382374 1.183428 +vt 0.535200 0.304700 +vt 0.589800 0.304700 +vt 0.589800 0.414100 +vt 0.535200 0.414100 +vt 0.515600 0.414100 +vt 0.515600 0.304700 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.464900 0.885400 +vn -1.000000 0.000000 0.000000 +usemtl Material__2 +f 211/164/100 212/165/100 213/166/100 214/167/100 +f 215/168/101 216/169/101 212/164/101 211/167/101 +f 216/168/102 217/169/102 213/164/102 212/167/102 +f 217/168/103 218/169/103 214/164/103 213/167/103 +f 218/168/104 215/169/104 211/164/104 214/167/104 +o Hull_Center +v 0.912500 -0.375000 0.500418 +v 0.912500 -0.375000 -0.009582 +v 1.587500 -0.375000 -0.174582 +v 1.460000 -0.375000 0.380418 +v 2.540000 -0.375000 0.380418 +v 2.412500 -0.375000 -0.174582 +v 3.087500 -0.375000 -0.009582 +v 3.087500 -0.375000 0.500418 +v 1.437500 -0.375000 -1.359582 +v 1.587500 -0.375000 -1.359582 +v 2.412500 -0.375000 -1.359582 +v 2.562500 -0.375000 -1.359582 +v 0.912500 0.262500 0.260418 +v 1.460000 0.262500 0.140418 +v 1.587500 0.262500 -0.414582 +v 0.912500 0.262500 -0.249582 +v 2.540000 0.262500 0.140418 +v 3.087500 0.262500 0.260418 +v 3.087500 0.262500 -0.249582 +v 2.412500 0.262500 -0.414582 +v 1.587500 0.262500 -1.599582 +v 1.437500 0.262500 -1.599582 +v 2.562500 0.262500 -1.599582 +v 2.412500 0.262500 -1.599582 +vt 0.000000 0.824000 +vt 0.066500 0.824000 +vt 0.088100 1.000000 +vt 0.015700 0.966800 +vt 0.242600 0.960800 +vt 0.242600 0.999900 +vt 0.561500 0.824800 +vt 0.545900 0.966800 +vt 0.474000 0.999900 +vt 0.495400 0.824800 +vt 0.320300 1.000000 +vt 0.320300 0.961100 +vt 0.343800 0.632800 +vt 0.273400 0.632800 +vt 0.273400 0.789100 +vt 0.343800 0.789100 +vt 0.410200 0.632800 +vt 0.441400 0.789100 +vt 0.375000 0.789100 +vt 0.585900 0.632800 +vt 0.617200 0.789100 +vt 0.242200 0.960900 +vt 0.242200 1.000000 +vt 0.320300 0.960900 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.200900 0.345100 0.916800 +vn -0.200900 0.345100 0.916800 +vn 1.000000 0.000000 0.000000 +vn 0.988300 -0.053800 -0.142800 +vn 0.971000 -0.084200 -0.223700 +vn 0.923400 -0.135200 -0.359100 +vn 0.000000 -0.352300 -0.935900 +vn -0.923400 -0.135200 -0.359100 +vn -0.988300 -0.053800 -0.142800 +vn -0.971000 -0.084200 -0.223700 +vn -1.000000 0.000000 0.000000 +usemtl 05___Default +f 219/170/105 220/171/105 221/172/105 222/173/105 +f 223/173/105 224/172/105 225/171/105 226/170/105 +f 220/171/105 227/174/105 228/175/105 221/172/105 +f 224/172/105 229/175/105 230/174/105 225/171/105 +f 231/176/106 232/177/106 233/178/106 234/179/106 +f 235/177/106 236/176/106 237/179/106 238/178/106 +f 234/179/106 233/178/106 239/180/106 240/181/106 +f 238/178/106 237/179/106 241/181/106 242/180/106 +f 219/182/107 222/183/107 232/184/107 231/185/107 +f 223/183/108 226/182/108 236/185/108 235/184/108 +f 226/182/109 225/186/110 237/187/111 236/188/109 +f 225/186/110 230/189/112 241/190/112 237/187/111 +f 230/191/113 229/192/113 242/180/113 241/193/113 +f 228/192/113 227/191/113 240/193/113 239/180/113 +f 227/189/114 220/186/115 234/187/116 240/190/114 +f 220/186/115 219/182/117 231/188/117 234/187/116 +o Hoverpad_Heavy___Glow001 +v 1.537574 -0.947496 -0.471096 +v 1.363400 -0.947496 -0.088908 +v 1.128104 -0.616530 -0.196140 +v 1.302278 -0.616530 -0.578322 +v 1.645130 -0.855150 -0.422076 +v 1.470962 -0.855150 -0.039894 +v 1.235666 -0.524184 -0.147120 +v 1.409834 -0.524184 -0.529308 +vt 0.535200 0.304700 +vt 0.589800 0.304700 +vt 0.589800 0.414100 +vt 0.535200 0.414100 +vt 0.515600 0.414100 +vt 0.515600 0.304700 +vn -0.717100 -0.615700 -0.326800 +vn 0.560200 -0.788000 0.255300 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +usemtl Material__2 +f 243/194/118 244/195/118 245/196/118 246/197/118 +f 247/198/119 248/199/119 244/194/119 243/197/119 +f 248/198/120 249/199/120 245/194/120 244/197/120 +f 249/198/121 250/199/121 246/194/121 245/197/121 +f 250/198/122 247/199/122 243/194/122 246/197/122 +o Hoverpad_Heavy_Rear +v 1.820000 -0.669924 0.893922 +v 2.180000 -0.669924 0.893922 +v 2.180000 -0.502566 1.212654 +v 1.820000 -0.502566 1.212654 +v 1.820000 -0.563682 0.838134 +v 2.180000 -0.563682 0.838134 +v 2.180000 -0.396318 1.156866 +v 1.820000 -0.396318 1.156866 +vt 0.531300 0.429700 +vt 0.578100 0.429700 +vt 0.578100 0.523400 +vt 0.531300 0.523400 +vt 0.515600 0.523400 +vt 0.515600 0.429700 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.464900 0.885400 +vn -1.000000 0.000000 0.000000 +usemtl 05___Default +f 251/200/123 252/201/123 253/202/123 254/203/123 +f 255/204/124 256/205/124 252/200/124 251/203/124 +f 256/204/125 257/205/125 253/200/125 252/203/125 +f 257/204/126 258/205/126 254/200/126 253/203/126 +f 258/204/127 255/205/127 251/200/127 254/203/127 +o Hull_Top +v 2.787500 0.262500 -0.579582 +v 2.675000 0.900000 -0.459582 +v 2.675000 0.900000 0.260418 +v 2.787500 0.262500 0.140418 +v 1.212500 0.262500 -0.579582 +v 1.212500 0.262500 0.140418 +v 1.325000 0.900000 0.260418 +v 1.325000 0.900000 -0.459582 +vt 0.066400 0.820300 +vt 0.082000 0.648400 +vt 0.175800 0.648400 +vt 0.160200 0.820300 +vt 0.257800 0.679700 +vt 0.175800 0.296900 +vt 0.257800 0.265600 +vt 0.082000 0.296900 +vt 0.000000 0.679700 +vt -0.000000 0.265600 +vn 0.984800 0.173800 0.000000 +vn -0.984800 0.173800 0.000000 +vn 0.000000 -0.185000 0.982700 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.185000 -0.982700 +usemtl 05___Default +f 259/206/128 260/207/128 261/208/128 262/209/128 +f 263/206/129 264/209/129 265/208/129 266/207/129 +f 262/210/130 261/208/130 265/211/130 264/212/130 +f 261/208/131 260/207/131 266/213/131 265/211/131 +f 260/207/132 259/214/132 263/215/132 266/213/132 +o Hoverpad_Front_Left_Top_Glow +v 1.506068 0.572130 -0.923568 +v 1.581068 0.466068 -0.848568 +v 1.431068 0.253932 -0.998568 +v 1.356068 0.360000 -1.073568 +v 1.293932 0.572130 -0.711432 +v 1.143932 0.360000 -0.861432 +v 1.218932 0.253932 -0.786432 +v 1.368932 0.466068 -0.636432 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn 0.707100 0.000000 -0.707100 +vn -0.707100 -0.000000 0.707100 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn 0.500000 0.707100 0.500000 +usemtl Material__2 +f 267/216/133 268/217/133 269/218/133 270/219/133 +f 271/216/134 272/219/134 273/218/134 274/217/134 +f 267/219/135 270/220/135 272/221/135 271/216/135 +f 270/216/136 269/217/136 273/218/136 272/219/136 +f 268/218/137 267/219/137 271/216/137 274/217/137 +o Hoverpad_Rear_Right +v 2.667500 0.207168 0.495000 +v 2.667500 0.207168 0.375000 +v 2.667500 -0.032832 0.375000 +v 2.667500 -0.032832 0.495000 +v 2.907500 0.207168 0.495000 +v 2.907500 -0.032832 0.495000 +v 2.907500 -0.032832 0.375000 +v 2.907500 0.207168 0.375000 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +usemtl 05___Default +f 275/222/138 276/223/138 277/224/138 278/225/138 +f 279/222/139 280/225/139 281/224/139 282/223/139 +f 275/226/140 278/225/140 280/222/140 279/227/140 +f 278/225/141 277/224/141 281/223/141 280/222/141 +f 277/224/142 276/228/142 282/229/142 281/223/142 +f 276/224/143 275/225/143 279/222/143 282/223/143 +o Hoverpad_Heavy_Left +v 1.380548 -0.905388 -0.114066 +v 1.178864 -0.621702 -0.205974 +v 1.328156 -0.621702 -0.533562 +v 1.529840 -0.905388 -0.441648 +v 1.466594 -0.831510 -0.074850 +v 1.264910 -0.547824 -0.166764 +v 1.414202 -0.547824 -0.494346 +v 1.615886 -0.831510 -0.402438 +vt 0.531300 0.429700 +vt 0.578100 0.429700 +vt 0.578100 0.523400 +vt 0.531300 0.523400 +vt 0.515600 0.523400 +vt 0.515600 0.429700 +vn -0.717100 -0.615700 -0.326800 +vn -0.414700 -0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.560200 -0.788000 0.255300 +usemtl 05___Default +f 283/230/144 284/231/144 285/232/144 286/233/144 +f 287/234/145 288/235/145 284/230/145 283/233/145 +f 288/234/146 289/235/146 285/230/146 284/233/146 +f 289/234/147 290/235/147 286/230/147 285/233/147 +f 290/234/148 287/235/148 283/230/148 286/233/148 +o Hoverpad_Heavy_Right +v 2.820788 -0.620808 -0.205818 +v 2.619110 -0.904494 -0.113910 +v 2.469818 -0.904494 -0.441492 +v 2.671502 -0.620808 -0.533406 +v 2.734742 -0.546930 -0.166608 +v 2.533064 -0.830610 -0.074694 +v 2.383772 -0.830610 -0.402282 +v 2.585456 -0.546930 -0.494190 +vt 0.531300 0.429700 +vt 0.578100 0.429700 +vt 0.578100 0.523400 +vt 0.531300 0.523400 +vt 0.515600 0.523400 +vt 0.515600 0.429700 +vn 0.717100 -0.615700 -0.326800 +vn 0.414700 0.000000 0.910000 +vn -0.560300 -0.788000 0.255300 +vn -0.414700 0.000000 -0.910000 +vn 0.560200 0.788000 -0.255300 +usemtl 05___Default +f 291/236/149 292/237/149 293/238/149 294/239/149 +f 295/240/150 296/241/150 292/236/150 291/239/150 +f 296/240/151 297/241/151 293/236/151 292/239/151 +f 297/240/152 298/241/152 294/236/152 293/239/152 +f 298/240/153 295/241/153 291/236/153 294/239/153 +o Hoverpad_Rear_Right_Glow +v 2.637500 0.237168 0.525000 +v 2.637500 0.237168 0.375000 +v 2.637500 -0.062832 0.375000 +v 2.637500 -0.062832 0.525000 +v 2.937500 0.237168 0.525000 +v 2.937500 -0.062832 0.525000 +v 2.937500 -0.062832 0.375000 +v 2.937500 0.237168 0.375000 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl Material__2 +f 299/242/154 300/243/154 301/244/154 302/245/154 +f 303/242/155 304/245/155 305/244/155 306/243/155 +f 299/245/156 302/246/156 304/247/156 303/242/156 +f 302/242/157 301/243/157 305/244/157 304/245/157 +f 300/244/158 299/245/158 303/242/158 306/243/158 +o Main_Laser_Base +v 2.112500 -0.843750 -1.068750 +v 2.112500 -0.543750 -0.768750 +v 2.112500 -0.543750 -0.459582 +v 2.112500 -0.843750 -0.459582 +v 1.887500 -0.843750 -1.068750 +v 1.887500 -0.843750 -0.459582 +v 1.887500 -0.543750 -0.459582 +v 1.887500 -0.543750 -0.768750 +vt 0.968800 0.195300 +vt 0.933600 0.265600 +vt 0.898400 0.265600 +vt 0.898400 0.195300 +vt 0.968800 0.132800 +vt 0.898400 0.132800 +vt 0.933600 0.328100 +vt 0.898400 0.328100 +vt 0.968800 0.265600 +vt 0.968800 0.328100 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +usemtl 05___Default +f 307/248/159 308/249/159 309/250/159 310/251/159 +f 311/248/160 312/251/160 313/250/160 314/249/160 +f 307/252/161 310/253/161 312/251/161 311/248/161 +f 309/250/162 308/249/162 314/254/162 313/255/162 +f 308/249/163 307/256/163 311/257/163 314/254/163 +o Right_Laser +v 2.975000 -0.112500 -0.600000 +v 3.087500 0.000000 -0.600000 +v 3.087500 0.000000 -1.200000 +v 2.975000 -0.112500 -1.200000 +v 3.087500 -0.112500 -1.200000 +v 3.087500 -0.112500 -0.600000 +v 2.975000 0.000000 -0.600000 +v 2.975000 0.000000 -1.200000 +v 2.806250 -0.056250 -1.200000 +v 2.806250 -0.056250 -0.600000 +v 3.031250 -0.056250 -0.600000 +v 3.031250 -0.056250 -1.200000 +vt 0.238300 0.703100 +vt 0.265600 0.703100 +vt 0.265600 0.914100 +vt 0.238300 0.914100 +vt 0.191400 0.914100 +vt 0.191400 0.703100 +vn -0.707100 0.707100 0.000000 +vn -0.707100 -0.707100 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl 05___Default +f 315/258/164 316/259/164 317/260/164 318/261/164 +f 319/260/165 320/259/165 321/258/165 322/261/165 +f 323/262/166 324/263/166 325/258/166 326/261/166 +o Hoverpad_Front_Left_Bottom_Glow +v 1.566068 -0.692130 -0.923568 +v 1.641068 -0.586068 -0.848568 +v 1.428932 -0.586068 -0.636432 +v 1.353932 -0.692130 -0.711432 +v 1.416068 -0.480000 -1.073568 +v 1.203932 -0.480000 -0.861432 +v 1.278932 -0.373932 -0.786432 +v 1.491068 -0.373932 -0.998568 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 0.000000 0.707100 +vn 0.707100 0.000000 -0.707100 +usemtl Material__2 +f 327/264/167 328/265/167 329/266/167 330/267/167 +f 331/264/168 332/267/168 333/266/168 334/265/168 +f 327/267/169 330/268/169 332/269/169 331/264/169 +f 330/264/170 329/265/170 333/266/170 332/267/170 +f 328/266/171 327/267/171 331/264/171 334/265/171 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_deco_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_deco_model.json new file mode 100644 index 00000000..ca9d8300 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_deco_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/screen_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_0_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_0_model.json new file mode 100644 index 00000000..f624f378 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_0_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/asteroid0" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_1_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_1_model.json new file mode 100644 index 00000000..b1a6d4ac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/asteroid1" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_2_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_2_model.json new file mode 100644 index 00000000..d6d3bf86 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_2_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/asteroid2" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cobblestone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cobblestone_model.json new file mode 100644 index 00000000..b752904e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cobblestone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/cobblestone" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/crashed_probe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/crashed_probe.json new file mode 100644 index 00000000..02bfe347 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/crashed_probe.json @@ -0,0 +1,477 @@ +{ + "credit": "Created by: 0.2 (Minecraft Username: IO2I", + "texture_size": [32, 32], + "textures": { + "0": "galacticraftplanets:blocks/probe", + "1": "galacticraftplanets:blocks/venus_rock_1", + "particle": "galacticraftplanets:blocks/probe" + }, + "elements": [ + { + "name": "core", + "from": [4, -1, 4], + "to": [12, 7, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#0"} + } + }, + { + "name": "east", + "from": [12, -1, 4], + "to": [13, 7, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [15.5, 0, 16, 4], "texture": "#0"}, + "east": {"uv": [0, 8, 4, 12], "rotation": 270, "texture": "#0"}, + "south": {"uv": [15.5, 0, 16, 4], "rotation": 180, "texture": "#0"}, + "up": {"uv": [12, 4, 16, 4.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [12, 4, 16, 4.5], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "west", + "from": [3, -1, 4], + "to": [4, 7, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [15.5, 0, 16, 4], "texture": "#0"}, + "south": {"uv": [15.5, 0, 16, 4], "rotation": 180, "texture": "#0"}, + "west": {"uv": [8, 8, 12, 12], "rotation": 180, "texture": "#0"}, + "up": {"uv": [12, 4, 16, 4.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [12, 4, 16, 4.5], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "south", + "from": [4, -1, 12], + "to": [12, 7, 13], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "east": {"uv": [15.5, 0, 16, 4], "rotation": 180, "texture": "#0"}, + "south": {"uv": [12, 8, 16, 12], "rotation": 90, "texture": "#0"}, + "west": {"uv": [15.5, 0, 16, 4], "rotation": 90, "texture": "#0"}, + "up": {"uv": [12, 4, 16, 4.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [12, 4, 16, 4.5], "texture": "#0"} + } + }, + { + "name": "north", + "from": [4, -1, 3], + "to": [12, 7, 4], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [4, 8, 8, 12], "texture": "#0"}, + "east": {"uv": [15.5, 0, 16, 4], "rotation": 180, "texture": "#0"}, + "west": {"uv": [15.5, 0, 16, 4], "texture": "#0"}, + "up": {"uv": [12, 4, 16, 4.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [12, 4, 16, 4.5], "texture": "#0"} + } + }, + { + "name": "top", + "from": [4, 7, 4], + "to": [12, 8, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [12, 4, 16, 4.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [12, 4, 16, 4.25], "rotation": 180, "texture": "#0"}, + "south": {"uv": [12, 4, 16, 4.5], "texture": "#0"}, + "west": {"uv": [12, 4, 16, 4.25], "texture": "#0"}, + "up": {"uv": [4, 4, 8, 8], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [4, -2, 4], + "to": [12, -1, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [12, 4, 16, 4.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [12, 4, 16, 4.25], "rotation": 180, "texture": "#0"}, + "south": {"uv": [12, 4, 16, 4.5], "texture": "#0"}, + "west": {"uv": [12, 4, 16, 4.25], "texture": "#0"}, + "down": {"uv": [8, 4, 12, 8], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "1", + "from": [0, 7, 3], + "to": [8, 8, 4], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [9, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [8.5, 4.5, 9, 5], "texture": "#0"}, + "south": {"uv": [9, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [9, 5.5, 11, 6], "texture": "#0"}, + "down": {"uv": [8.5, 7, 10.5, 7.5], "texture": "#0"} + } + }, + { + "name": "2", + "from": [0, -2, 3], + "to": [8, -1, 4], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [9, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [8.5, 4.5, 9, 5], "texture": "#0"}, + "south": {"uv": [9, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [9, 5.5, 11, 6], "texture": "#0"}, + "down": {"uv": [8.5, 7, 10.5, 7.5], "texture": "#0"} + } + }, + { + "name": "3", + "from": [0, -2, 12], + "to": [8, -1, 13], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [9, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [8.5, 4.5, 9, 5], "texture": "#0"}, + "south": {"uv": [9, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [9, 5.5, 11, 6], "texture": "#0"}, + "down": {"uv": [8.5, 7, 10.5, 7.5], "texture": "#0"} + } + }, + { + "name": "4", + "from": [0, 7, 12], + "to": [8, 8, 13], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [9, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [8.5, 4.5, 9, 5], "texture": "#0"}, + "south": {"uv": [9, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [9, 5.5, 11, 6], "texture": "#0"}, + "down": {"uv": [8.5, 7, 10.5, 7.5], "texture": "#0"} + } + }, + { + "name": "1", + "from": [15, -2, 0], + "to": [16, 0, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 0.5, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 0.5, 8], "texture": "#1"} + } + }, + { + "name": "2", + "from": [7, 4, 0], + "to": [11, 5, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 1.5], "texture": "#1"}, + "up": {"uv": [0, 0, 4, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + }, + { + "name": "3", + "from": [11, 4, 2], + "to": [12, 5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 12, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 6, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 12], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 6], "texture": "#1"} + } + }, + { + "name": "19", + "from": [6, 4, 2], + "to": [7, 5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 12, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 6, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 12], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 6], "texture": "#1"} + } + }, + { + "name": "4", + "from": [5, 3, 3], + "to": [14, 4, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 9, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 10, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 9, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 5, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 9, 10], "texture": "#1"}, + "down": {"uv": [0, 0, 5, 5], "texture": "#1"} + } + }, + { + "name": "5", + "from": [3, 2, 4], + "to": [16, 3, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 4, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 13, 8], "texture": "#1"}, + "down": {"uv": [0, 0, 7, 4], "texture": "#1"} + } + }, + { + "name": "6", + "from": [10, 1, 2], + "to": [16, 2, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 12, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 6, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 6, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 6, 12], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 6], "texture": "#1"} + } + }, + { + "name": "7", + "from": [10, 2, 1], + "to": [14, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 14, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 4, 14], "rotation": 180, "texture": "#1"}, + "down": {"uv": [0, 0, 2, 7], "texture": "#1"} + } + }, + { + "name": "8", + "from": [7, -2, 0], + "to": [12, 4, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 6], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 3], "texture": "#1"}, + "south": {"uv": [0, 0, 5, 6], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 3], "texture": "#1"}, + "up": {"uv": [2, 0, 7, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 2.5, 8], "texture": "#1"} + } + }, + { + "name": "9", + "from": [12, -2, 0], + "to": [15, 1, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1.5], "texture": "#1"}, + "south": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 3, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1.5, 8], "texture": "#1"} + } + }, + { + "name": "10", + "from": [5, -2, 0], + "to": [7, 3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 2.5], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 5], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 2.5], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + }, + { + "name": "11", + "from": [5, 3, 0], + "to": [7, 4, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 7.5, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 7.5, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 7.5], "texture": "#1"} + } + }, + { + "name": "12", + "from": [3, -2, 0], + "to": [5, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 4], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + }, + { + "name": "13", + "from": [3, 2, 1], + "to": [5, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 7.5, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 7.5, 0.5], "texture": "#1"}, + "up": {"uv": [2, 2, 4, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 7.5], "texture": "#1"} + } + }, + { + "name": "14", + "from": [1, -2, 0], + "to": [3, 1, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 3], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 1.5], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 3], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + }, + { + "name": "15", + "from": [0, -2, 0], + "to": [1, 0, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 0.5, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [2, 0, 2.5, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 0.5, 8], "texture": "#1"} + } + }, + { + "name": "16", + "from": [15, 0, 1], + "to": [16, 1, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 14, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 7], "texture": "#1"}, + "down": {"uv": [0, 0, 0.5, 7], "texture": "#1"} + } + }, + { + "name": "17", + "from": [2, 1, 1], + "to": [3, 2, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 14, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 14], "texture": "#1"}, + "down": {"uv": [0, 0, 0.5, 7], "texture": "#1"} + } + }, + { + "name": "18", + "from": [12, 1, 0], + "to": [14, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 0.5], "texture": "#1"}, + "up": {"uv": [1, 0, 3, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 90, 0], + "translation": [0, 14, 0], + "scale": [0.8, 0.8, 0.8] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "core", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, + { + "name": "antenna", + "origin": [8, 8, 8], + "children": [7, 8, 9, 10] + } + ] + }, + { + "name": "ground", + "origin": [8, 8, 8], + "children": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/creeper_egg.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/creeper_egg.json new file mode 100644 index 00000000..d68b7c05 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/creeper_egg.json @@ -0,0 +1,98 @@ +{ + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "galacticraftplanets:blocks/creeper_egg", + "all": "galacticraftplanets:blocks/creeper_egg" + }, + "elements": [ + { "from": [ 6, 15, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#all" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#all" }, + "north": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, + "south": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, + "west": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, + "east": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" } + } + }, + { "from": [ 5, 14, 5 ], + "to": [ 11, 15, 11 ], + "faces": { + "down": { "uv": [ 5, 5, 11, 11 ], "texture": "#all" }, + "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#all" }, + "north": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, + "south": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, + "west": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, + "east": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" } + } + }, + { "from": [ 5, 13, 5 ], + "to": [ 11, 14, 11 ], + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#all" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#all" }, + "north": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, + "south": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, + "west": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, + "east": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" } + } + }, + { "from": [ 3, 11, 3 ], + "to": [ 13, 13, 13 ], + "faces": { + "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "north": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, + "south": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, + "west": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, + "east": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" } + } + }, + { "from": [ 2, 8, 2 ], + "to": [ 14, 11, 14 ], + "faces": { + "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "north": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, + "south": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, + "west": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, + "east": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" } + } + }, + { "from": [ 1, 3, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#all" }, + "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#all" }, + "north": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, + "south": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, + "west": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, + "east": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" } + } + }, + { "from": [ 2, 1, 2 ], + "to": [ 14, 3, 14 ], + "faces": { + "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "north": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, + "south": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, + "west": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, + "east": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" } + } + }, + { "from": [ 3, 0, 3 ], + "to": [ 13, 1, 13 ], + "faces": { + "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "north": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, + "south": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, + "west": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, + "east": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cryo_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cryo_0.json new file mode 100644 index 00000000..00f637f2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cryo_0.json @@ -0,0 +1,185 @@ +{ +"parent": "block/block", +"textures": { + "texture": "galacticraftcore:blocks/cryo_0", + "particle": "galacticraftcore:blocks/cryo_0", + "cryo_1": "galacticraftcore:blocks/cryo_1" +}, +"display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } +}, +"elements": [ +{ + "from": [ 0, 0, 0 ], + "to": [ 16, 2, 13 ], + "faces": { + "down": { "uv": [ 16, 13, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 13 ], "texture": "#texture" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 14, 13, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3, 14, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 0, 13 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 13 ], "texture": "#texture" }, + "up": { "uv": [ 0, 13, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 13, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 3, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 2, 0 ], + "to": [ 2, 16, 8 ], + "faces": { + "down": { "uv": [ 16, 8, 14, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 2, 8 ], "texture": "#texture" }, + "north": { "uv": [ 14, 0, 16, 14 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 2, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 14 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 16, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 14, 2, 0 ], + "to": [ 16, 16, 8 ], + "faces": { + "down": { "uv": [ 2, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 14, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 2, 14 ], "texture": "#texture" }, + "south": { "uv": [ 14, 0, 16, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 14 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 16, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 2, 0 ], + "to": [ 14, 16, 1 ], + "faces": { + "down": { "uv": [ 14, 1, 2, 0 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 14, 1 ], "texture": "#texture" }, + "north": { "uv": [ 2, 0, 14, 14 ], "texture": "#texture" }, + "south": { "uv": [ 2, 0, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 14 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 2, 8 ], + "to": [ 2, 4, 10 ], + "faces": { + "down": { "uv": [ 16, 10, 14, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 2, 10 ], "texture": "#texture" }, + "north": { "uv": [ 14, 12, 16, 14 ], "texture": "#texture" }, + "south": { "uv": [ 0, 12, 2, 14 ], "texture": "#texture" }, + "west": { "uv": [ 8, 12, 10, 14 ], "texture": "#texture" }, + "east": { "uv": [ 6, 12, 8, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 14, 2, 8 ], + "to": [ 16, 4, 10 ], + "faces": { + "down": { "uv": [ 2, 10, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 14, 8, 16, 10 ], "texture": "#texture" }, + "north": { "uv": [ 0, 12, 2, 14 ], "texture": "#texture" }, + "south": { "uv": [ 14, 12, 16, 14 ], "texture": "#texture" }, + "west": { "uv": [ 8, 12, 10, 14 ], "texture": "#texture" }, + "east": { "uv": [ 6, 12, 8, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 14, 14 ], + "to": [ 13, 16, 15 ], + "faces": { + "down": { "uv": [ 13, 15, 3, 14 ], "texture": "#cryo_1" }, + "up": { "uv": [ 3, 14, 13, 15 ], "texture": "#cryo_1" }, + "north": { "uv": [ 3, 0, 13, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 3, 0, 13, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 14, 0, 15, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 1, 0, 2, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 14, 12 ], + "to": [ 3, 16, 14 ], + "faces": { + "down": { "uv": [ 14, 14, 13, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 2, 12, 3, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 13, 0, 14, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 2, 0, 3, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 0, 14, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 0, 4, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 13, 14, 12 ], + "to": [ 14, 16, 14 ], + "faces": { + "down": { "uv": [ 3, 14, 2, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 13, 12, 14, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 2, 0, 3, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 13, 0, 14, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 0, 14, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 0, 4, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 1, 14, 8 ], + "to": [ 2, 16, 12 ], + "faces": { + "down": { "uv": [ 15, 12, 14, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 1, 8, 2, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 14, 0, 15, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 1, 0, 2, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 0, 12, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 0, 8, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 14, 14, 8 ], + "to": [ 15, 16, 12 ], + "faces": { + "down": { "uv": [ 2, 12, 1, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 14, 8, 15, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 1, 0, 2, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 14, 0, 15, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 0, 12, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 0, 8, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 2, 1 ], + "to": [ 3, 16, 2 ], + "faces": { + "down": { "uv": [ 14, 2, 13, 1 ], "texture": "#texture" }, + "up": { "uv": [ 2, 1, 3, 2 ], "texture": "#texture" }, + "north": { "uv": [ 13, 0, 14, 14 ], "texture": "#texture" }, + "south": { "uv": [ 2, 0, 3, 14 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 2, 14 ], "texture": "#texture" }, + "east": { "uv": [ 14, 0, 15, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 13, 2, 1 ], + "to": [ 14, 16, 2 ], + "faces": { + "down": { "uv": [ 3, 2, 2, 1 ], "texture": "#texture" }, + "up": { "uv": [ 13, 1, 14, 2 ], "texture": "#texture" }, + "north": { "uv": [ 2, 0, 3, 14 ], "texture": "#texture" }, + "south": { "uv": [ 13, 0, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 2, 14 ], "texture": "#texture" }, + "east": { "uv": [ 14, 0, 15, 14 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dense_ice.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dense_ice.json new file mode 100644 index 00000000..39bcf237 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dense_ice.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/dense_ice" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/desh_block_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/desh_block_model.json new file mode 100644 index 00000000..146b3349 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/desh_block_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/decoration_desh" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_model.json new file mode 100644 index 00000000..aafe3cd8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/brick" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_1_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_1_model.json new file mode 100644 index 00000000..13e21662 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/dungeon_brick_venus_1" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_2_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_2_model.json new file mode 100644 index 00000000..7c614f3a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_2_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/dungeon_brick_venus_2" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/electrolyzer_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/electrolyzer_model.json new file mode 100644 index 00000000..26ef60ec --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/electrolyzer_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine_input", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftplanets:blocks/electrolyzer", + "east": "galacticraftplanets:blocks/machine_water_input_warning", + "south": "galacticraftplanets:blocks/machine_oxygen_output_warning", + "west": "galacticraftplanets:blocks/machine_oxygen_output_warning" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/gas_liquefier_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/gas_liquefier_model.json new file mode 100644 index 00000000..8a8d1d75 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/gas_liquefier_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine_input", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftplanets:blocks/gas_liquefier", + "east": "galacticraftplanets:blocks/machine_oxygen_input_warning", + "south": "galacticraftplanets:blocks/machine_side_warning", + "west": "galacticraftplanets:blocks/machine_oxygen_output_warning" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_inactive_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_inactive_model.json new file mode 100644 index 00000000..a1515377 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_inactive_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftplanets:blocks/geothermal_vent", + "north": "galacticraftplanets:blocks/geothermal_inactive", + "east": "galacticraftcore:blocks/machine_output", + "south": "galacticraftplanets:blocks/geothermal_inactive", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_model.json new file mode 100644 index 00000000..ac8b6eb3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftplanets:blocks/geothermal_vent", + "north": "galacticraftplanets:blocks/geothermal", + "east": "galacticraftcore:blocks/machine_output", + "south": "galacticraftplanets:blocks/geothermal", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/laser_turret.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/laser_turret.json new file mode 100644 index 00000000..94218685 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/laser_turret.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine", + "west": "galacticraftcore:blocks/machine" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/launch_controller_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/launch_controller_model.json new file mode 100644 index 00000000..a3a2316b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/launch_controller_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftplanets:blocks/launch_controller", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftplanets:blocks/launch_controller", + "west": "galacticraftcore:blocks/machine" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/lead_block.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/lead_block.json new file mode 100644 index 00000000..08875de0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/lead_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/block_lead" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_inner_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_inner_stairs.json new file mode 100644 index 00000000..5f543bfe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_outer_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_outer_stairs.json new file mode 100644 index 00000000..1be72bc5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_stairs.json new file mode 100644 index 00000000..4dd117ac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_inner_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_inner_stairs.json new file mode 100644 index 00000000..58091fe7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_outer_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_outer_stairs.json new file mode 100644 index 00000000..d52dca9b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_stairs.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_stairs.json new file mode 100644 index 00000000..23c848d0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_middle_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_middle_model.json new file mode 100644 index 00000000..428169c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_middle_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/middle" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_stone_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_stone_model.json new file mode 100644 index 00000000..656d7994 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/bottom" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_surface_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_surface_model.json new file mode 100644 index 00000000..af2df1a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_surface_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/top" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/methane_synthesizer_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/methane_synthesizer_model.json new file mode 100644 index 00000000..abc15bf5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/methane_synthesizer_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine_input", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftplanets:blocks/methane_synthesizer", + "east": "galacticraftplanets:blocks/machine_oxygen_input_warning", + "south": "galacticraftplanets:blocks/machine_side_warning", + "west": "galacticraftplanets:blocks/machine_oxygen_output_warning" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base.json new file mode 100644 index 00000000..0e590c87 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/machineframe", + "particle": "galacticraftplanets:blocks/machineframe" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base_full.json new file mode 100644 index 00000000..0e590c87 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base_full.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/machineframe", + "particle": "galacticraftplanets:blocks/machineframe" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_aluminum_asteroids_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_aluminum_asteroids_model.json new file mode 100644 index 00000000..8587b5f3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_aluminum_asteroids_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_aluminum_asteroids" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_copper_mars_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_copper_mars_model.json new file mode 100644 index 00000000..0b34d450 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_copper_mars_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_copper_mars" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_desh_mars_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_desh_mars_model.json new file mode 100644 index 00000000..58e5d891 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_desh_mars_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/desh" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_ilmenite_asteroids_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_ilmenite_asteroids_model.json new file mode 100644 index 00000000..bcbf3e31 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_ilmenite_asteroids_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_ilmenite" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_asteroids_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_asteroids_model.json new file mode 100644 index 00000000..d80a8fd9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_asteroids_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_iron_asteroids" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_mars_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_mars_model.json new file mode 100644 index 00000000..efaaeca4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_mars_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_iron_mars" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_tin_mars_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_tin_mars_model.json new file mode 100644 index 00000000..98a64d6f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_tin_mars_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_tin_mars" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.mtl new file mode 100644 index 00000000..a57b3168 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.mtl @@ -0,0 +1,6 @@ +newmtl None +Ks 0.8 0.8 0.8 +d 1 + +newmtl Receiver +map_Kd galacticraftplanets:blocks/beam_receiver diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.obj new file mode 100644 index 00000000..37b2a60e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.obj @@ -0,0 +1,938 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib receiver.mtl +o Receiver +v 0.467651 0.638106 -0.046456 +v 0.500500 0.638106 -0.032849 +v 0.467651 0.664421 -0.085839 +v 0.528348 0.664421 -0.060697 +v 0.467651 0.703804 -0.112154 +v 0.546956 0.703804 -0.079305 +v 0.467651 0.750259 -0.121394 +v 0.553490 0.750259 -0.085839 +v 0.467651 0.796715 -0.112154 +v 0.546956 0.796715 -0.079305 +v 0.467651 0.836098 -0.085839 +v 0.528348 0.836098 -0.060697 +v 0.500500 0.862413 -0.032849 +v 0.514107 0.638106 0.000000 +v 0.553490 0.664421 0.000000 +v 0.579805 0.703804 0.000000 +v 0.589046 0.750259 0.000000 +v 0.579805 0.796715 0.000000 +v 0.553490 0.836098 0.000000 +v 0.500500 0.638106 0.032849 +v 0.528348 0.664421 0.060697 +v 0.546956 0.703804 0.079305 +v 0.553490 0.750259 0.085839 +v 0.546956 0.796715 0.079305 +v 0.528348 0.836098 0.060697 +v 0.514107 0.862413 0.000000 +v 0.467651 0.638106 0.046456 +v 0.467651 0.664421 0.085839 +v 0.467651 0.703804 0.112154 +v 0.467651 0.750259 0.121394 +v 0.467651 0.796715 0.112154 +v 0.467651 0.836098 0.085839 +v 0.500500 0.862413 0.032849 +v 0.467651 0.628865 0.000000 +v 0.467651 0.862413 -0.046456 +v 0.467651 0.871654 0.000000 +v 0.467651 0.862413 0.046456 +v 0.537055 0.638106 -0.046456 +v 0.537055 0.664421 -0.085839 +v 0.569904 0.638106 -0.032849 +v 0.537055 0.703804 -0.112154 +v 0.597752 0.664421 -0.060697 +v 0.537055 0.750259 -0.121394 +v 0.616359 0.703804 -0.079305 +v 0.537055 0.796715 -0.112154 +v 0.622893 0.750259 -0.085839 +v 0.537055 0.836098 -0.085839 +v 0.616359 0.796715 -0.079305 +v 0.537055 0.862413 -0.046456 +v 0.569904 0.862413 -0.032849 +v 0.583510 0.638106 0.000000 +v 0.622893 0.664421 0.000000 +v 0.649208 0.703804 0.000000 +v 0.658449 0.750259 0.000000 +v 0.597752 0.836098 -0.060697 +v 0.649208 0.796715 0.000000 +v 0.622893 0.836098 0.000000 +v 0.569904 0.638106 0.032849 +v 0.597752 0.664421 0.060697 +v 0.616359 0.703804 0.079305 +v 0.622893 0.750259 0.085839 +v 0.616359 0.796715 0.079305 +v 0.583510 0.862413 0.000000 +v 0.597752 0.836098 0.060697 +v 0.537054 0.638106 0.046456 +v 0.537054 0.664421 0.085839 +v 0.537054 0.703804 0.112154 +v 0.537054 0.750259 0.121394 +v 0.537054 0.796715 0.112154 +v 0.569904 0.862413 0.032849 +v 0.537054 0.836098 0.085839 +v 0.537055 0.628865 0.000000 +v 0.537054 0.871654 0.000000 +v 0.537054 0.862413 0.046456 +vt 0.835682 0.527008 +vt 0.772800 0.552824 +vt 0.835682 0.445599 +vt 0.719491 0.493300 +vt 0.835682 0.385664 +vt 0.990770 0.979079 +vt 0.853651 0.966694 +vt 0.984098 0.895354 +vt 0.835682 0.881950 +vt 0.984098 0.804684 +vt 0.846979 0.792300 +vt 0.990770 0.720871 +vt 1.000000 0.711392 +vt 0.883810 0.663690 +vt 0.937118 0.617540 +vt 0.746753 0.615149 +vt 0.349218 0.675540 +vt 0.339700 0.550137 +vt 0.416074 0.689798 +vt 0.403637 0.525951 +vt 0.500772 0.690158 +vt 0.487311 0.512811 +vt 0.590418 0.676564 +vt 0.577981 0.512717 +vt 0.671363 0.651088 +vt 0.835682 0.548528 +vt 0.772800 0.677475 +vt 0.671363 0.608463 +vt 0.000000 0.909167 +vt 0.017459 0.838487 +vt 0.077707 0.955635 +vt 0.416074 0.408482 +vt 0.500772 0.385664 +vt 0.590418 0.395249 +vt 0.661845 0.525684 +vt 0.883809 0.433365 +vt 0.911072 0.555214 +vt 0.835682 0.703291 +vt 0.719491 0.723625 +vt 0.017459 0.715028 +vt 0.100518 0.863287 +vt 0.100518 0.701980 +vt 0.190924 0.869659 +vt 0.190924 0.695062 +vt 0.274913 0.856632 +vt 0.274914 0.695326 +vt 0.339700 0.826191 +vt 1.000000 0.385664 +vt 0.937118 0.492889 +vt 0.835682 0.617497 +vt 1.000000 0.643356 +vt 1.000000 0.557562 +vt 1.000000 0.467073 +vt 0.504018 0.244320 +vt 0.504018 0.325729 +vt 0.441136 0.218504 +vt 0.504018 0.385664 +vt 0.387828 0.278027 +vt 0.904534 0.155113 +vt 0.820811 0.148419 +vt 0.892185 0.017991 +vt 0.730141 0.148396 +vt 0.807445 0.000000 +vt 0.646326 0.155047 +vt 0.717792 0.011275 +vt 0.339700 0.823014 +vt 0.407736 0.823014 +vt 0.433552 0.885896 +vt 0.415090 0.156178 +vt 0.009519 0.405186 +vt 0.076374 0.390928 +vt 0.000000 0.530589 +vt 0.161072 0.390568 +vt 0.063938 0.554775 +vt 0.250718 0.404161 +vt 0.147611 0.567914 +vt 0.331663 0.429638 +vt 0.238281 0.568008 +vt 0.387402 0.939205 +vt 0.502564 0.987332 +vt 0.339700 0.162864 +vt 0.441136 0.093853 +vt 0.000000 0.046468 +vt 0.077707 0.000000 +vt 0.017459 0.117148 +vt 0.076374 0.672243 +vt 0.161072 0.695062 +vt 0.322145 0.555041 +vt 0.250718 0.685477 +vt 0.495878 0.911942 +vt 0.617727 0.939205 +vt 0.387827 0.047702 +vt 0.504018 0.068037 +vt 0.100518 0.092348 +vt 0.017459 0.240607 +vt 0.190924 0.085976 +vt 0.100518 0.253655 +vt 0.274914 0.099003 +vt 0.190924 0.260573 +vt 0.339700 0.129444 +vt 0.274914 0.260309 +vt 0.558203 0.885896 +vt 0.665429 0.823014 +vt 0.504018 0.153830 +vt 0.493530 0.823014 +vt 0.584019 0.823014 +vt 0.730141 0.278773 +vt 0.646326 0.285424 +vt 0.493530 0.690158 +vt 0.584019 0.690158 +vt 0.636874 0.068036 +vt 0.636874 0.153830 +vt 0.090537 0.383649 +vt 0.007477 0.370602 +vt 0.636874 0.244320 +vt 0.968563 0.297834 +vt 0.904534 0.285490 +vt 0.968563 0.167457 +vt 0.264932 0.390304 +vt 0.180943 0.390568 +vt 0.820811 0.278797 +vt 0.665429 0.690158 +vt 0.339700 0.690158 +vt 0.407736 0.690158 +vt 0.636874 0.000000 +vt 0.504018 0.000000 +vt 0.636874 0.325729 +vt 0.329718 0.382898 +vt 0.339700 0.252903 +vt 0.683871 0.447989 +vt 0.885824 0.711392 +vt 0.671363 0.435778 +vt 0.835682 0.771327 +vt 0.339700 0.702732 +vt 0.352208 0.323338 +vt 0.636874 0.050099 +vt 0.331663 0.644948 +vn -0.224300 0.810300 0.541400 +vn -0.325600 0.525300 0.786100 +vn -0.376400 0.180700 0.908700 +vn -0.376400 -0.180700 0.908700 +vn -0.325600 -0.525300 0.786200 +vn -0.325600 -0.525300 0.786100 +vn -0.224300 -0.810300 0.541400 +vn -0.541400 0.810300 0.224300 +vn -0.786100 0.525300 0.325600 +vn -0.908700 0.180700 0.376400 +vn -0.908700 0.180800 0.376400 +vn -0.908700 -0.180700 0.376400 +vn -0.786100 -0.525300 0.325600 +vn -0.541400 -0.810300 0.224300 +vn -0.541400 0.810300 -0.224300 +vn -0.786100 0.525300 -0.325600 +vn -0.908700 0.180800 -0.376400 +vn -0.908700 0.180700 -0.376400 +vn -0.908700 -0.180700 -0.376400 +vn -0.786200 -0.525300 -0.325600 +vn -0.786100 -0.525300 -0.325600 +vn -0.541400 -0.810300 -0.224300 +vn -0.224300 0.810300 -0.541400 +vn -0.325600 0.525300 -0.786100 +vn -0.376400 0.180700 -0.908700 +vn -0.376400 -0.180700 -0.908700 +vn -0.325600 -0.525300 -0.786100 +vn -0.224300 -0.810300 -0.541400 +vn -0.080600 0.977600 0.194500 +vn -0.080600 -0.977600 0.194500 +vn -0.194500 0.977600 0.080500 +vn -0.194500 -0.977600 0.080600 +vn -0.194500 0.977600 -0.080500 +vn -0.194500 -0.977600 -0.080600 +vn -0.080600 0.977600 -0.194500 +vn -0.080600 -0.977600 -0.194500 +vn 0.224300 -0.810300 -0.541400 +vn 0.325600 -0.525300 -0.786100 +vn 0.376400 -0.180700 -0.908700 +vn 0.376400 0.180700 -0.908700 +vn 0.325600 0.525300 -0.786100 +vn 0.224300 0.810300 -0.541400 +vn 0.541400 -0.810300 -0.224300 +vn 0.786200 -0.525300 -0.325600 +vn 0.908700 -0.180700 -0.376400 +vn 0.908700 -0.180800 -0.376400 +vn 0.908700 0.180700 -0.376400 +vn 0.786200 0.525300 -0.325600 +vn 0.541400 0.810300 -0.224300 +vn 0.541400 -0.810300 0.224300 +vn 0.786200 -0.525300 0.325600 +vn 0.908700 -0.180800 0.376400 +vn 0.908700 -0.180700 0.376400 +vn 0.908700 0.180800 0.376400 +vn 0.908700 0.180700 0.376400 +vn 0.786200 0.525300 0.325600 +vn 0.541400 0.810300 0.224300 +vn 0.224300 -0.810300 0.541400 +vn 0.325600 -0.525300 0.786100 +vn 0.376400 -0.180700 0.908700 +vn 0.376400 0.180700 0.908700 +vn 0.325600 0.525300 0.786100 +vn 0.224300 0.810300 0.541400 +vn 0.080600 -0.977600 -0.194500 +vn 0.080600 0.977600 -0.194500 +vn 0.194500 -0.977600 -0.080500 +vn 0.194500 0.977600 -0.080500 +vn 0.194500 -0.977600 0.080500 +vn 0.194500 0.977600 0.080500 +vn 0.080600 -0.977600 0.194500 +vn 0.080500 0.977600 0.194500 +vn 0.000000 0.555600 -0.831500 +vn 0.000000 0.980800 0.195100 +vn 0.000000 -0.980800 0.195100 +vn 0.000000 -0.555600 0.831500 +vn 0.000000 -0.980800 -0.195100 +vn 0.000000 -0.555600 -0.831500 +vn 0.000000 0.195100 0.980800 +vn 0.000000 0.195100 -0.980800 +vn 0.000000 0.831500 0.555600 +vn 0.000000 0.831500 -0.555600 +vn 0.000000 -0.831500 0.555600 +vn 0.000000 -0.831500 -0.555600 +vn 0.000000 -0.195100 0.980800 +vn 0.000000 0.980800 -0.195100 +vn 0.000000 -0.195100 -0.980800 +vn 0.000000 0.555600 0.831500 +vn -0.786200 0.525300 0.325600 +vn -0.908700 -0.180800 0.376400 +vn 0.325600 0.525300 0.786200 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 3/3/2 4/4/2 5/5/2 +f 5/6/3 6/7/3 7/8/3 +f 7/8/4 8/9/4 9/10/4 +f 9/10/5 10/11/6 11/12/6 +f 11/13/7 12/14/7 13/15/7 +f 2/2/8 14/16/8 4/4/8 +f 4/17/9 15/18/9 6/19/9 +f 6/19/10 16/20/11 8/21/10 +f 8/21/12 17/22/12 10/23/12 +f 10/23/13 18/24/13 12/25/13 +f 12/14/14 19/26/14 13/15/14 +f 14/16/15 20/27/15 15/28/15 +f 15/29/16 21/30/16 16/31/16 +f 16/20/17 22/32/18 17/22/17 +f 17/22/19 23/33/19 18/24/19 +f 18/24/20 24/34/21 19/35/21 +f 19/26/22 25/36/22 26/37/22 +f 20/27/23 27/38/23 21/39/23 +f 21/30/24 28/40/24 22/41/24 +f 22/41/25 29/42/25 23/43/25 +f 23/43/26 30/44/26 24/45/26 +f 24/45/27 31/46/27 25/47/27 +f 25/36/28 32/48/28 33/49/28 +f 34/50/29 2/2/29 1/1/29 +f 35/51/30 13/15/30 36/52/30 +f 34/50/31 14/16/31 2/2/31 +f 13/15/32 26/37/32 36/52/32 +f 34/50/33 20/27/33 14/16/33 +f 26/37/34 33/49/34 36/52/34 +f 34/50/35 27/38/35 20/27/35 +f 33/49/36 37/53/36 36/52/36 +f 38/54/37 39/55/37 40/56/37 +f 39/55/38 41/57/38 42/58/38 +f 41/59/39 43/60/39 44/61/39 +f 43/60/40 45/62/40 46/63/40 +f 45/62/41 47/64/41 48/65/41 +f 47/66/42 49/67/42 50/68/42 +f 40/56/43 42/58/43 51/69/43 +f 42/70/44 44/71/44 52/72/44 +f 44/71/45 46/73/45 53/74/46 +f 46/73/47 48/75/47 54/76/47 +f 48/75/48 55/77/48 56/78/48 +f 55/79/49 50/68/49 57/80/49 +f 51/69/50 52/81/50 58/82/50 +f 52/83/51 53/84/51 59/85/51 +f 53/74/52 54/76/52 60/86/53 +f 54/76/54 56/78/55 61/87/55 +f 56/78/56 57/88/56 62/89/56 +f 57/80/57 63/90/57 64/91/57 +f 58/82/58 59/92/58 65/93/58 +f 59/85/59 60/94/59 66/95/59 +f 60/94/60 61/96/60 67/97/60 +f 61/96/61 62/98/61 68/99/61 +f 62/98/62 64/100/62 69/101/62 +f 64/91/63 70/102/63 71/103/63 +f 72/104/64 38/54/64 40/56/64 +f 49/67/65 73/105/65 50/68/65 +f 72/104/66 40/56/66 51/69/66 +f 50/68/67 73/105/67 63/90/67 +f 72/104/68 51/69/68 58/82/68 +f 63/90/69 73/105/69 70/102/69 +f 72/104/70 58/82/70 65/93/70 +f 70/102/71 73/105/71 74/106/71 +f 9/107/72 11/108/72 45/62/72 +f 36/109/73 37/110/73 73/105/73 +f 27/111/74 34/112/74 72/104/74 +f 29/113/75 28/114/75 67/97/75 +f 34/112/76 1/115/76 72/104/76 +f 3/116/77 5/117/77 39/118/77 +f 31/119/78 30/120/78 69/101/78 +f 7/121/79 9/107/79 43/60/79 +f 37/110/80 32/122/80 74/106/80 +f 11/123/81 35/124/81 47/66/81 +f 28/125/82 27/111/82 66/126/82 +f 1/115/83 3/127/83 38/54/83 +f 30/120/84 29/113/84 68/99/84 +f 35/124/85 36/109/85 49/67/85 +f 5/117/86 7/121/86 41/59/86 +f 32/128/87 31/119/87 71/129/87 +f 2/2/1 4/4/1 3/3/1 +f 4/4/2 6/130/2 5/5/2 +f 6/7/3 8/9/3 7/8/3 +f 8/9/4 10/11/4 9/10/4 +f 10/11/6 12/131/6 11/12/6 +f 35/51/7 11/13/7 13/15/7 +f 14/16/8 15/28/8 4/4/8 +f 15/18/9 16/20/88 6/19/9 +f 16/20/11 17/22/11 8/21/10 +f 17/22/12 18/24/89 10/23/12 +f 18/24/13 19/35/13 12/25/13 +f 19/26/14 26/37/14 13/15/14 +f 20/27/15 21/39/15 15/28/15 +f 21/30/16 22/41/16 16/31/16 +f 22/32/18 23/33/18 17/22/17 +f 23/33/19 24/34/19 18/24/19 +f 24/34/21 25/132/21 19/35/21 +f 25/36/22 33/49/22 26/37/22 +f 27/38/23 28/133/23 21/39/23 +f 28/40/24 29/42/24 22/41/24 +f 29/42/25 30/44/25 23/43/25 +f 30/44/26 31/46/26 24/45/26 +f 31/46/27 32/134/27 25/47/27 +f 32/48/28 37/53/28 33/49/28 +f 39/55/37 42/58/37 40/56/37 +f 41/57/38 44/135/38 42/58/38 +f 43/60/39 46/63/39 44/61/39 +f 45/62/40 48/65/40 46/63/40 +f 47/64/41 55/136/41 48/65/41 +f 55/79/42 47/66/42 50/68/42 +f 42/58/43 52/81/43 51/69/43 +f 44/71/44 53/74/44 52/72/44 +f 46/73/45 54/76/46 53/74/46 +f 48/75/47 56/78/47 54/76/47 +f 55/77/48 57/88/48 56/78/48 +f 50/68/49 63/90/49 57/80/49 +f 52/81/50 59/92/50 58/82/50 +f 53/84/51 60/94/51 59/85/51 +f 54/76/52 61/87/53 60/86/53 +f 56/78/55 62/89/55 61/87/55 +f 57/88/56 64/137/56 62/89/56 +f 63/90/57 70/102/57 64/91/57 +f 59/92/58 66/126/58 65/93/58 +f 60/94/59 67/97/59 66/95/59 +f 61/96/60 68/99/60 67/97/60 +f 62/98/61 69/101/61 68/99/61 +f 64/100/62 71/129/90 69/101/62 +f 70/102/63 74/106/63 71/103/63 +f 11/108/72 47/64/72 45/62/72 +f 37/110/73 74/106/73 73/105/73 +f 65/93/74 27/111/74 72/104/74 +f 28/114/75 66/95/75 67/97/75 +f 1/115/76 38/54/76 72/104/76 +f 5/117/77 41/59/77 39/118/77 +f 30/120/78 68/99/78 69/101/78 +f 9/107/79 45/62/79 43/60/79 +f 32/122/80 71/103/80 74/106/80 +f 35/124/81 49/67/81 47/66/81 +f 27/111/82 65/93/82 66/126/82 +f 3/127/83 39/55/83 38/54/83 +f 29/113/84 67/97/84 68/99/84 +f 36/109/85 73/105/85 49/67/85 +f 7/121/86 43/60/86 41/59/86 +f 31/119/87 69/101/87 71/129/87 +o Ring +v 0.347722 0.343926 0.000000 +v 0.347722 0.439157 -0.261643 +v 0.400050 0.362972 0.000000 +v 0.400050 0.453747 -0.249400 +v 0.427894 0.411199 0.000000 +v 0.427894 0.490690 -0.218401 +v 0.418224 0.466040 0.000000 +v 0.418224 0.532701 -0.183150 +v 0.375565 0.501834 0.000000 +v 0.375565 0.560121 -0.160141 +v 0.319878 0.501834 0.000000 +v 0.319878 0.560121 -0.160141 +v 0.277220 0.466040 0.000000 +v 0.277220 0.532701 -0.183150 +v 0.267550 0.411199 0.000000 +v 0.267550 0.490690 -0.218401 +v 0.295393 0.362972 0.000000 +v 0.347722 0.680288 -0.400860 +v 0.400050 0.683595 -0.382103 +v 0.427894 0.691970 -0.334610 +v 0.418224 0.701493 -0.280602 +v 0.375565 0.707708 -0.245351 +v 0.319878 0.707708 -0.245351 +v 0.277220 0.701493 -0.280602 +v 0.267550 0.691970 -0.334610 +v 0.295393 0.453747 -0.249400 +v 0.295393 0.683595 -0.382103 +v 0.347722 0.954492 -0.352510 +v 0.400050 0.944969 -0.336016 +v 0.427894 0.920856 -0.294251 +v 0.418224 0.893436 -0.246757 +v 0.375565 0.875538 -0.215758 +v 0.319878 0.875538 -0.215758 +v 0.277220 0.893436 -0.246757 +v 0.267550 0.920856 -0.294251 +v 0.295393 0.944969 -0.336016 +v 0.347722 1.133466 -0.139217 +v 0.400050 1.115569 -0.132703 +v 0.427894 1.070251 -0.116209 +v 0.418224 1.018717 -0.097452 +v 0.375565 0.985081 -0.085210 +v 0.319878 0.985081 -0.085210 +v 0.277220 1.018717 -0.097452 +v 0.267550 1.070251 -0.116209 +v 0.295393 1.115569 -0.132703 +v 0.347722 1.133466 0.139217 +v 0.400050 1.115569 0.132703 +v 0.427894 1.070251 0.116209 +v 0.418224 1.018718 0.097452 +v 0.375565 0.985081 0.085209 +v 0.319878 0.985081 0.085209 +v 0.277220 1.018718 0.097452 +v 0.267550 1.070251 0.116209 +v 0.295393 1.115569 0.132703 +v 0.347722 0.954492 0.352510 +v 0.400050 0.944969 0.336016 +v 0.427894 0.920856 0.294251 +v 0.418224 0.893436 0.246757 +v 0.375565 0.875538 0.215758 +v 0.319878 0.875538 0.215758 +v 0.277220 0.893436 0.246757 +v 0.267550 0.920856 0.294251 +v 0.295393 0.944969 0.336016 +v 0.347722 0.680288 0.400860 +v 0.400050 0.683595 0.382103 +v 0.427894 0.691970 0.334610 +v 0.418224 0.701493 0.280602 +v 0.375565 0.707708 0.245351 +v 0.319878 0.707708 0.245351 +v 0.277220 0.701493 0.280602 +v 0.267550 0.691970 0.334610 +v 0.295393 0.683595 0.382103 +v 0.347722 0.439157 0.261643 +v 0.400050 0.453747 0.249400 +v 0.427894 0.490690 0.218401 +v 0.418224 0.532701 0.183150 +v 0.375565 0.560121 0.160141 +v 0.319878 0.560121 0.160141 +v 0.277220 0.532701 0.183150 +v 0.267550 0.490690 0.218401 +v 0.295393 0.453747 0.249400 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vn 0.323600 -0.889100 -0.323600 +vn 0.852000 -0.491900 -0.179000 +vn 0.982800 0.173300 0.063100 +vn 0.619200 0.737900 0.268600 +vn 0.000000 0.939700 0.342000 +vn -0.619200 0.737900 0.268600 +vn -0.982800 0.173300 0.063100 +vn -0.852000 -0.491900 -0.179000 +vn -0.323600 -0.889100 -0.323600 +vn 0.323600 -0.473100 -0.819400 +vn 0.852000 -0.261800 -0.453400 +vn 0.852000 -0.261700 -0.453400 +vn 0.982800 0.092200 0.159700 +vn 0.619200 0.392600 0.680100 +vn 0.000000 0.500000 0.866000 +vn -0.619200 0.392600 0.680000 +vn -0.619200 0.392600 0.680100 +vn -0.982800 0.092200 0.159700 +vn -0.852000 -0.261700 -0.453400 +vn -0.323600 -0.473100 -0.819400 +vn 0.323600 0.164300 -0.931800 +vn 0.852000 0.090900 -0.515600 +vn 0.852000 0.090900 -0.515500 +vn 0.982800 -0.032000 0.181600 +vn 0.619200 -0.136400 0.773300 +vn 0.000000 -0.173600 0.984800 +vn -0.619200 -0.136400 0.773300 +vn -0.982800 -0.032000 0.181600 +vn -0.852000 0.090900 -0.515500 +vn -0.323600 0.164300 -0.931800 +vn 0.323600 0.724800 -0.608200 +vn 0.852000 0.401000 -0.336500 +vn 0.982800 -0.141300 0.118500 +vn 0.619200 -0.601500 0.504800 +vn 0.000000 -0.766000 0.642800 +vn -0.619200 -0.601500 0.504700 +vn -0.982800 -0.141300 0.118500 +vn -0.852000 0.401000 -0.336500 +vn -0.323600 0.724800 -0.608200 +vn 0.323600 0.946200 0.000000 +vn 0.852000 0.523500 0.000000 +vn 0.982800 -0.184400 0.000000 +vn 0.619200 -0.785300 0.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.619200 -0.785300 0.000000 +vn -0.619200 -0.785200 0.000000 +vn -0.982800 -0.184400 0.000000 +vn -0.852000 0.523500 0.000000 +vn -0.323600 0.946200 0.000000 +vn 0.323600 0.724800 0.608200 +vn 0.852000 0.401000 0.336500 +vn 0.982800 -0.141300 -0.118500 +vn 0.619200 -0.601500 -0.504800 +vn 0.000000 -0.766000 -0.642800 +vn -0.619200 -0.601500 -0.504700 +vn -0.982800 -0.141300 -0.118500 +vn -0.852000 0.401000 0.336500 +vn -0.323600 0.724800 0.608200 +vn 0.323600 0.164300 0.931800 +vn 0.852000 0.090900 0.515500 +vn 0.852000 0.090900 0.515600 +vn 0.982800 -0.032000 -0.181600 +vn 0.619200 -0.136400 -0.773300 +vn 0.000000 -0.173600 -0.984800 +vn -0.619200 -0.136400 -0.773300 +vn -0.982800 -0.032000 -0.181600 +vn -0.852000 0.090900 0.515500 +vn -0.323600 0.164300 0.931800 +vn 0.323600 -0.473100 0.819400 +vn 0.852000 -0.261800 0.453400 +vn 0.982800 0.092200 -0.159700 +vn 0.619200 0.392600 -0.680100 +vn 0.000000 0.500000 -0.866000 +vn -0.619200 0.392600 -0.680000 +vn -0.982800 0.092200 -0.159700 +vn -0.852000 -0.261700 0.453400 +vn -0.323600 -0.473100 0.819400 +vn 0.323600 -0.889100 0.323600 +vn 0.852000 -0.491900 0.179000 +vn 0.982800 0.173300 -0.063100 +vn 0.619200 0.737900 -0.268600 +vn 0.000000 0.939700 -0.342000 +vn -0.619200 0.737900 -0.268600 +vn -0.982800 0.173300 -0.063100 +vn -0.852000 -0.491900 0.179000 +vn -0.323600 -0.889100 0.323600 +vn -0.619200 -0.601500 0.504800 +usemtl Receiver +f 75/138/91 76/139/91 77/140/91 +f 77/138/92 78/139/92 79/140/92 +f 79/138/93 80/139/93 81/140/93 +f 81/138/94 82/139/94 83/140/94 +f 83/138/95 84/139/95 85/140/95 +f 85/138/96 86/139/96 87/140/96 +f 87/138/97 88/139/97 89/140/97 +f 89/138/98 90/139/98 91/140/98 +f 75/138/99 91/139/99 76/140/99 +f 76/138/100 92/139/100 78/140/100 +f 78/138/101 93/139/102 80/140/101 +f 80/138/103 94/139/103 82/140/103 +f 82/138/104 95/139/104 84/140/104 +f 84/138/105 96/139/105 86/140/105 +f 86/138/106 97/139/107 88/140/106 +f 88/138/108 98/139/108 90/140/108 +f 90/138/109 99/139/109 100/140/109 +f 100/138/110 101/139/110 76/140/110 +f 92/138/111 102/139/111 93/140/111 +f 93/138/112 103/139/113 94/140/113 +f 94/138/114 104/139/114 95/140/114 +f 95/138/115 105/139/115 96/140/115 +f 96/138/116 106/139/116 97/140/116 +f 97/138/117 107/139/117 98/140/117 +f 98/138/118 108/139/118 99/140/118 +f 99/138/119 109/139/119 101/140/119 +f 101/138/120 110/139/120 92/140/120 +f 102/138/121 111/139/121 103/140/121 +f 103/138/122 112/139/122 104/140/122 +f 104/138/123 113/139/123 105/140/123 +f 105/138/124 114/139/124 106/140/124 +f 106/138/125 115/139/125 107/140/125 +f 107/138/126 116/139/126 108/140/126 +f 108/138/127 117/139/127 109/140/127 +f 109/138/128 118/139/128 110/140/128 +f 110/138/129 119/139/129 102/140/129 +f 111/138/130 120/139/130 112/140/130 +f 112/138/131 121/139/131 113/140/131 +f 113/138/132 122/139/132 114/140/132 +f 114/138/133 123/139/133 115/140/133 +f 115/138/134 124/139/134 116/140/134 +f 116/138/135 125/139/136 117/140/135 +f 117/138/137 126/139/137 118/140/137 +f 118/138/138 127/139/138 119/140/138 +f 119/138/139 128/139/139 111/140/139 +f 120/138/140 129/139/140 121/140/140 +f 121/138/141 130/139/141 122/140/141 +f 122/138/142 131/139/142 123/140/142 +f 123/138/143 132/139/143 124/140/143 +f 124/138/144 133/139/144 125/140/144 +f 125/138/145 134/139/145 126/140/145 +f 126/138/146 135/139/146 127/140/146 +f 127/138/147 136/139/147 128/140/147 +f 128/138/148 137/139/148 120/140/148 +f 129/138/149 138/139/149 130/140/149 +f 130/138/150 139/139/151 131/140/150 +f 131/138/152 140/139/152 132/140/152 +f 132/138/153 141/139/153 133/140/153 +f 133/138/154 142/139/154 134/140/154 +f 134/138/155 143/139/155 135/140/155 +f 135/138/156 144/139/156 136/140/156 +f 136/138/157 145/139/157 137/140/157 +f 137/138/158 146/139/158 129/140/158 +f 138/138/159 147/139/159 139/140/159 +f 139/138/160 148/139/160 140/140/160 +f 140/138/161 149/139/161 141/140/161 +f 141/138/162 150/139/162 142/140/162 +f 142/138/163 151/139/163 143/140/163 +f 143/138/164 152/139/164 144/140/164 +f 144/138/165 153/139/165 145/140/165 +f 145/138/166 154/139/166 146/140/166 +f 146/138/167 155/139/167 138/140/167 +f 147/138/168 75/139/168 148/140/168 +f 148/138/169 77/139/169 149/140/169 +f 149/138/170 79/139/170 150/140/170 +f 150/138/171 81/139/171 151/140/171 +f 151/138/172 83/139/172 152/140/172 +f 152/138/173 85/139/173 153/140/173 +f 153/138/174 87/139/174 154/140/174 +f 154/138/175 89/139/175 155/140/175 +f 155/138/176 91/139/176 147/140/176 +f 76/139/91 78/141/91 77/140/91 +f 78/139/92 80/141/92 79/140/92 +f 80/139/93 82/141/93 81/140/93 +f 82/139/94 84/141/94 83/140/94 +f 84/139/95 86/141/95 85/140/95 +f 86/139/96 88/141/96 87/140/96 +f 88/139/97 90/141/97 89/140/97 +f 90/139/98 100/141/98 91/140/98 +f 91/139/99 100/141/99 76/140/99 +f 92/139/100 93/141/100 78/140/100 +f 93/139/102 94/141/102 80/140/101 +f 94/139/103 95/141/103 82/140/103 +f 95/139/104 96/141/104 84/140/104 +f 96/139/105 97/141/105 86/140/105 +f 97/139/107 98/141/107 88/140/106 +f 98/139/108 99/141/108 90/140/108 +f 99/139/109 101/141/109 100/140/109 +f 101/139/110 92/141/110 76/140/110 +f 102/139/111 103/141/111 93/140/111 +f 103/139/113 104/141/113 94/140/113 +f 104/139/114 105/141/114 95/140/114 +f 105/139/115 106/141/115 96/140/115 +f 106/139/116 107/141/116 97/140/116 +f 107/139/117 108/141/117 98/140/117 +f 108/139/118 109/141/118 99/140/118 +f 109/139/119 110/141/119 101/140/119 +f 110/139/120 102/141/120 92/140/120 +f 111/139/121 112/141/121 103/140/121 +f 112/139/122 113/141/122 104/140/122 +f 113/139/123 114/141/123 105/140/123 +f 114/139/124 115/141/124 106/140/124 +f 115/139/125 116/141/125 107/140/125 +f 116/139/126 117/141/177 108/140/126 +f 117/139/127 118/141/127 109/140/127 +f 118/139/128 119/141/128 110/140/128 +f 119/139/129 111/141/129 102/140/129 +f 120/139/130 121/141/130 112/140/130 +f 121/139/131 122/141/131 113/140/131 +f 122/139/132 123/141/132 114/140/132 +f 123/139/133 124/141/133 115/140/133 +f 124/139/134 125/141/134 116/140/134 +f 125/139/136 126/141/136 117/140/135 +f 126/139/137 127/141/137 118/140/137 +f 127/139/138 128/141/138 119/140/138 +f 128/139/139 120/141/139 111/140/139 +f 129/139/140 130/141/140 121/140/140 +f 130/139/141 131/141/141 122/140/141 +f 131/139/142 132/141/142 123/140/142 +f 132/139/143 133/141/143 124/140/143 +f 133/139/144 134/141/144 125/140/144 +f 134/139/145 135/141/145 126/140/145 +f 135/139/146 136/141/146 127/140/146 +f 136/139/147 137/141/147 128/140/147 +f 137/139/148 129/141/148 120/140/148 +f 138/139/149 139/141/149 130/140/149 +f 139/139/151 140/141/151 131/140/150 +f 140/139/152 141/141/152 132/140/152 +f 141/139/153 142/141/153 133/140/153 +f 142/139/154 143/141/154 134/140/154 +f 143/139/155 144/141/155 135/140/155 +f 144/139/156 145/141/156 136/140/156 +f 145/139/157 146/141/157 137/140/157 +f 146/139/158 138/141/158 129/140/158 +f 147/139/159 148/141/159 139/140/159 +f 148/139/160 149/141/160 140/140/160 +f 149/139/161 150/141/161 141/140/161 +f 150/139/162 151/141/162 142/140/162 +f 151/139/163 152/141/163 143/140/163 +f 152/139/164 153/141/164 144/140/164 +f 153/139/165 154/141/165 145/140/165 +f 154/139/166 155/141/166 146/140/166 +f 155/139/167 147/141/167 138/140/167 +f 75/139/168 77/141/168 148/140/168 +f 77/139/169 79/141/169 149/140/169 +f 79/139/170 81/141/170 150/140/170 +f 81/139/171 83/141/171 151/140/171 +f 83/139/172 85/141/172 152/140/172 +f 85/139/173 87/141/173 153/140/173 +f 87/139/174 89/141/174 154/140/174 +f 89/139/175 91/141/175 155/140/175 +f 91/139/176 75/141/176 147/140/176 +o Main +v 0.442187 0.949283 0.000000 +v 0.442187 0.934133 0.076163 +v 0.467651 0.871654 0.000000 +v 0.442187 0.826422 -0.183874 +v 0.442187 0.890990 -0.140731 +v 0.467651 0.796715 -0.112154 +v 0.442187 0.890990 0.140731 +v 0.442187 0.826422 0.183874 +v 0.467651 0.836098 0.085839 +v 0.442187 0.674096 -0.183874 +v 0.442187 0.750259 -0.199024 +v 0.467651 0.703804 -0.112154 +v 0.442187 0.934133 -0.076163 +v 0.467651 0.862413 -0.046456 +v 0.442187 0.750259 0.199024 +v 0.442187 0.674096 0.183874 +v 0.467651 0.750259 0.121394 +v 0.442187 0.566385 -0.076163 +v 0.442187 0.609528 -0.140731 +v 0.467651 0.638106 -0.046456 +v 0.442187 0.609528 0.140731 +v 0.442187 0.566385 0.076163 +v 0.467651 0.664421 0.085839 +v 0.467651 0.836098 -0.085839 +v 0.467651 0.862413 0.046456 +v 0.467651 0.750259 -0.121394 +v 0.467651 0.796715 0.112154 +v 0.467651 0.664421 -0.085839 +v 0.442187 0.551236 0.000000 +v 0.467651 0.628865 0.000000 +v 0.467651 0.703804 0.112154 +v 0.467651 0.638106 0.046456 +v -0.030531 0.674096 -0.183874 +v -0.030531 0.750259 0.199024 +v -0.030531 0.826422 -0.183874 +v -0.030531 0.890990 0.140731 +v -0.030531 0.934133 -0.076163 +v -0.030531 0.566385 0.076163 +v -0.030531 0.609528 -0.140731 +v -0.030531 0.674096 0.183874 +v -0.030531 0.949283 0.000000 +v -0.030531 0.750259 -0.199024 +v -0.030531 0.826422 0.183874 +v -0.030531 0.890990 -0.140731 +v -0.030531 0.934133 0.076163 +v -0.030531 0.551236 0.000000 +v -0.030531 0.609528 0.140731 +v -0.030531 0.566385 -0.076163 +vt 0.000000 0.000000 +vt 0.500000 0.000000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 0.000000 1.000000 +vt 0.500000 1.000000 +vn 0.948400 0.311100 0.061900 +vn 0.948400 0.176200 -0.263700 +vn 0.948400 0.176200 0.263700 +vn 0.948400 -0.061900 -0.311100 +vn 0.948400 0.311100 -0.061900 +vn 0.948400 -0.061900 0.311100 +vn 0.948400 -0.263700 -0.176200 +vn 0.948400 -0.263700 0.176200 +vn 0.948400 0.263700 -0.176200 +vn 0.948400 0.263700 0.176200 +vn 0.948400 0.061900 -0.311100 +vn 0.948400 0.061900 0.311100 +vn 0.948400 -0.176200 -0.263700 +vn 0.948400 -0.311100 -0.061900 +vn 0.948400 -0.176200 0.263700 +vn 0.948400 -0.311100 0.061900 +vn 0.000000 -0.555600 -0.831500 +vn 0.000000 0.195100 0.980800 +vn 0.000000 0.195100 -0.980800 +vn 0.000000 0.831500 0.555600 +vn 0.000000 0.831500 -0.555600 +vn 0.000000 -0.831500 0.555600 +vn 0.000000 -0.831500 -0.555600 +vn 0.000000 -0.195100 0.980800 +vn 0.000000 0.980800 -0.195100 +vn 0.000000 -0.195100 -0.980800 +vn 0.000000 0.555600 0.831500 +vn 0.000000 0.555600 -0.831500 +vn 0.000000 0.980800 0.195100 +vn 0.000000 -0.980800 0.195100 +vn 0.000000 -0.555600 0.831500 +vn 0.000000 -0.980800 -0.195100 +usemtl Receiver +f 156/142/178 157/143/178 158/144/178 +f 159/142/179 160/143/179 161/144/179 +f 162/142/180 163/143/180 164/144/180 +f 165/142/181 166/143/181 167/144/181 +f 168/142/182 156/143/182 169/144/182 +f 170/142/183 171/143/183 172/144/183 +f 173/142/184 174/143/184 175/144/184 +f 176/142/185 177/143/185 178/144/185 +f 160/142/186 168/143/186 179/144/186 +f 157/142/187 162/143/187 180/144/187 +f 166/142/188 159/143/188 181/144/188 +f 163/142/189 170/143/189 182/144/189 +f 174/142/190 165/143/190 183/144/190 +f 184/142/191 173/143/191 185/144/191 +f 171/142/192 176/143/192 186/144/192 +f 177/142/193 184/143/193 187/144/193 +f 165/144/194 174/145/194 188/146/194 +f 170/144/195 163/145/195 189/146/195 +f 159/144/196 166/145/196 190/146/196 +f 162/144/197 157/145/197 191/146/197 +f 168/144/198 160/145/198 192/146/198 +f 177/144/199 176/145/199 193/146/199 +f 174/144/200 173/145/200 194/146/200 +f 171/144/201 170/145/201 195/146/201 +f 156/144/202 168/145/202 196/146/202 +f 166/144/203 165/145/203 197/146/203 +f 163/144/204 162/145/204 198/146/204 +f 160/144/205 159/145/205 199/146/205 +f 157/144/206 156/145/206 200/146/206 +f 184/144/207 177/145/207 201/146/207 +f 176/144/208 171/145/208 202/146/208 +f 173/144/209 184/145/209 203/146/209 +f 157/143/178 180/145/178 158/144/178 +f 160/143/179 179/145/179 161/144/179 +f 163/143/180 182/145/180 164/144/180 +f 166/143/181 181/145/181 167/144/181 +f 156/143/182 158/145/182 169/144/182 +f 171/143/183 186/145/183 172/144/183 +f 174/143/184 183/145/184 175/144/184 +f 177/143/185 187/145/185 178/144/185 +f 168/143/186 169/145/186 179/144/186 +f 162/143/187 164/145/187 180/144/187 +f 159/143/188 161/145/188 181/144/188 +f 170/143/189 172/145/189 182/144/189 +f 165/143/190 167/145/190 183/144/190 +f 173/143/191 175/145/191 185/144/191 +f 176/143/192 178/145/192 186/144/192 +f 184/143/193 185/145/193 187/144/193 +f 174/145/194 194/147/194 188/146/194 +f 163/145/195 198/147/195 189/146/195 +f 166/145/196 197/147/196 190/146/196 +f 157/145/197 200/147/197 191/146/197 +f 160/145/198 199/147/198 192/146/198 +f 176/145/199 202/147/199 193/146/199 +f 173/145/200 203/147/200 194/146/200 +f 170/145/201 189/147/201 195/146/201 +f 168/145/202 192/147/202 196/146/202 +f 165/145/203 188/147/203 197/146/203 +f 162/145/204 191/147/204 198/146/204 +f 159/145/205 190/147/205 199/146/205 +f 156/145/206 196/147/206 200/146/206 +f 177/145/207 193/147/207 201/146/207 +f 171/145/208 195/147/208 202/146/208 +f 184/145/209 201/147/209 203/146/209 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.mtl new file mode 100644 index 00000000..609b0297 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.mtl @@ -0,0 +1,2 @@ +newmtl Reflector +map_Kd galacticraftplanets:blocks/beam_reflector diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.obj new file mode 100644 index 00000000..44342540 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.obj @@ -0,0 +1,477 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib reflector.mtl +o EnergyBlaster +v 0.000000 1.242149 -0.083616 +v 0.000000 1.334889 0.187788 +v 0.070871 1.216354 -0.083616 +v 0.130483 1.287397 0.187788 +v 0.108581 1.151039 -0.083616 +v 0.199912 1.167143 0.187788 +v 0.095484 1.076765 -0.083616 +v 0.175800 1.030395 0.187788 +v 0.037710 1.028286 -0.083616 +v 0.069429 0.941139 0.187788 +v -0.037710 1.028286 -0.083616 +v -0.069429 0.941139 0.187788 +v -0.095485 1.076765 -0.083616 +v -0.175800 1.030395 0.187788 +v -0.108581 1.151039 -0.083616 +v -0.130483 1.287397 0.187788 +v 0.000000 1.255622 0.290641 +v -0.070871 1.216354 -0.083616 +v -0.199912 1.167143 0.187788 +v -0.057138 1.199988 -0.282212 +v 0.000000 1.220784 -0.282212 +v 0.057138 1.199988 -0.282212 +v -0.087541 1.147329 -0.282212 +v -0.076982 1.087447 -0.282212 +v -0.030403 1.048363 -0.282212 +v 0.030402 1.048363 -0.282212 +v 0.076982 1.087447 -0.282212 +v 0.087541 1.147329 -0.282212 +v 0.107152 1.070029 0.290641 +v -0.042318 1.015626 0.290641 +v 0.042318 1.015626 0.290641 +v -0.079531 1.226675 0.290641 +v -0.121849 1.153378 0.290641 +v -0.107152 1.070029 0.290641 +v 0.121849 1.153378 0.290641 +v 0.079531 1.226675 0.290641 +vt 0.948800 1.000000 +vt 0.448800 1.000000 +vt 0.948800 0.500000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 0.000000 1.000000 +vt 1.000000 0.836800 +vt 0.500000 0.836800 +vt 1.000000 0.336800 +vt 0.750000 0.500000 +vt 0.910697 0.441511 +vt 0.589303 0.441511 +vt 0.003798 0.293412 +vt 0.164495 0.015077 +vt 0.033494 0.125000 +vt 0.448800 0.500000 +vt 0.500000 1.000000 +vt 0.500000 0.336800 +vt 0.996202 0.293412 +vt 0.966506 0.125000 +vt 0.835505 0.015077 +vt 0.664495 0.015077 +vt 0.533494 0.125000 +vt 0.503798 0.293412 +vt 0.335505 0.015077 +vt 0.410697 0.441511 +vt 0.496202 0.293412 +vt 0.466506 0.125000 +vt 0.250000 0.500000 +vt 0.089303 0.441511 +vn 0.325600 0.894700 -0.305700 +vn 0.824600 0.476100 -0.305700 +vn 0.937700 -0.165300 -0.305700 +vn 0.612000 -0.729400 -0.305700 +vn 0.000000 -0.952100 -0.305700 +vn -0.612000 -0.729400 -0.305700 +vn -0.937700 -0.165300 -0.305700 +vn -0.277000 0.761100 0.586500 +vn -0.325600 0.894700 -0.305700 +vn -0.824600 0.476100 -0.305700 +vn -0.340300 0.934900 -0.100600 +vn 0.000000 0.000000 -1.000000 +vn -0.861600 0.497500 -0.100600 +vn -0.979800 -0.172800 -0.100600 +vn -0.639500 -0.762200 -0.100600 +vn 0.000000 -0.994900 -0.100600 +vn 0.639500 -0.762200 -0.100600 +vn 0.979800 -0.172800 -0.100600 +vn 0.861600 0.497500 -0.100600 +vn 0.340300 0.934900 -0.100600 +vn 0.000000 0.000000 1.000000 +vn -0.701400 0.405000 0.586500 +vn -0.797600 -0.140600 0.586500 +vn -0.520600 -0.620400 0.586500 +vn 0.000000 -0.809900 0.586500 +vn 0.520600 -0.620400 0.586500 +vn 0.797600 -0.140600 0.586500 +vn 0.701400 0.405000 0.586500 +vn 0.277000 0.761100 0.586500 +vn -0.797600 -0.140600 0.586600 +usemtl Reflector +f 1/1/1 2/2/1 3/3/1 +f 3/1/2 4/2/2 5/3/2 +f 5/1/3 6/2/3 7/3/3 +f 7/1/4 8/2/4 9/3/4 +f 9/1/5 10/2/5 11/3/5 +f 11/1/6 12/2/6 13/3/6 +f 13/1/7 14/2/7 15/3/7 +f 2/4/8 16/5/8 17/6/8 +f 18/1/9 16/2/9 1/3/9 +f 15/1/10 19/2/10 18/3/10 +f 18/7/11 1/8/11 20/9/11 +f 21/10/12 22/11/12 20/12/12 +f 15/7/13 18/8/13 23/9/13 +f 13/7/14 15/8/14 24/9/14 +f 11/7/15 13/8/15 25/9/15 +f 9/7/16 11/8/16 26/9/16 +f 7/7/17 9/8/17 27/9/17 +f 5/7/18 7/8/18 28/9/18 +f 3/7/19 5/8/19 22/9/19 +f 1/7/20 3/8/20 21/9/20 +f 29/13/21 30/14/21 31/15/21 +f 16/4/22 19/5/22 32/6/22 +f 19/4/23 14/5/23 33/6/23 +f 14/4/24 12/5/24 34/6/24 +f 12/4/25 10/5/25 30/6/25 +f 10/4/26 8/5/26 31/6/26 +f 8/4/27 6/5/27 29/6/27 +f 6/4/28 4/5/28 35/6/28 +f 4/4/29 2/5/29 36/6/29 +f 2/2/1 4/16/1 3/3/1 +f 4/2/2 6/16/2 5/3/2 +f 6/2/3 8/16/3 7/3/3 +f 8/2/4 10/16/4 9/3/4 +f 10/2/5 12/16/5 11/3/5 +f 12/2/6 14/16/6 13/3/6 +f 14/2/7 19/16/7 15/3/7 +f 16/5/8 32/17/8 17/6/8 +f 16/2/9 2/16/9 1/3/9 +f 19/2/10 16/16/10 18/3/10 +f 1/8/11 21/18/11 20/9/11 +f 28/19/12 27/20/12 26/21/12 +f 28/19/12 26/21/12 25/22/12 +f 22/11/12 28/19/12 20/12/12 +f 28/19/12 25/22/12 20/12/12 +f 25/22/12 24/23/12 20/12/12 +f 24/23/12 23/24/12 20/12/12 +f 18/8/13 20/18/13 23/9/13 +f 15/8/14 23/18/14 24/9/14 +f 13/8/15 24/18/15 25/9/15 +f 11/8/16 25/18/16 26/9/16 +f 9/8/17 26/18/17 27/9/17 +f 7/8/18 27/18/18 28/9/18 +f 5/8/19 28/18/19 22/9/19 +f 3/8/20 22/18/20 21/9/20 +f 29/13/21 34/25/21 30/14/21 +f 17/26/21 32/27/21 33/28/21 +f 36/29/21 17/26/21 33/28/21 +f 36/29/21 33/28/21 34/25/21 +f 35/30/21 36/29/21 34/25/21 +f 29/13/21 35/30/21 34/25/21 +f 19/5/22 33/17/22 32/6/22 +f 14/5/23 34/17/30 33/6/23 +f 12/5/24 30/17/24 34/6/24 +f 10/5/25 31/17/25 30/6/25 +f 8/5/26 29/17/26 31/6/26 +f 6/5/27 35/17/27 29/6/27 +f 4/5/28 36/17/28 35/6/28 +f 2/5/29 17/17/29 36/6/29 +o Ring +v 0.200623 1.163777 -0.132192 +v 0.133225 1.285288 -0.132192 +v 0.180561 1.160594 -0.097008 +v 0.119903 1.269953 -0.097008 +v 0.140436 1.154227 -0.097008 +v 0.093258 1.239285 -0.097008 +v 0.120374 1.151044 -0.132192 +v 0.079935 1.223951 -0.132192 +v 0.140436 1.154227 -0.167376 +v 0.093258 1.239285 -0.167376 +v 0.180561 1.160594 -0.167376 +v 0.003490 1.335048 -0.132192 +v 0.003141 1.314737 -0.097008 +v 0.002443 1.274117 -0.097008 +v 0.002094 1.253807 -0.132192 +v 0.002443 1.274117 -0.167376 +v 0.119903 1.269953 -0.167376 +v 0.003141 1.314737 -0.167376 +v -0.127879 1.289774 -0.132192 +v -0.115091 1.273991 -0.097008 +v -0.089515 1.242425 -0.097008 +v -0.076727 1.226642 -0.132192 +v -0.089515 1.242425 -0.167376 +v -0.115091 1.273991 -0.167376 +v -0.199411 1.170650 -0.132192 +v -0.179470 1.166780 -0.097008 +v -0.139588 1.159039 -0.097008 +v -0.119647 1.155168 -0.132192 +v -0.139588 1.159039 -0.167376 +v -0.179470 1.166780 -0.167376 +v -0.177637 1.033416 -0.132192 +v -0.159873 1.043269 -0.097008 +v -0.124346 1.062975 -0.097008 +v -0.106582 1.072828 -0.132192 +v -0.124346 1.062975 -0.167376 +v -0.159873 1.043269 -0.167376 +v -0.072744 0.942285 -0.132192 +v -0.065470 0.961251 -0.097008 +v -0.050921 0.999183 -0.097008 +v -0.043646 1.018149 -0.132192 +v -0.050921 0.999183 -0.167376 +v -0.065470 0.961251 -0.167376 +v 0.066186 0.939898 -0.132192 +v 0.059568 0.959102 -0.097008 +v 0.046330 0.997512 -0.097008 +v 0.039712 1.016717 -0.132192 +v 0.046330 0.997512 -0.167376 +v 0.059568 0.959102 -0.167376 +v 0.174147 1.027372 -0.132192 +v 0.156733 1.037829 -0.097008 +v 0.121903 1.058744 -0.097008 +v 0.104488 1.069201 -0.132192 +v 0.121903 1.058744 -0.167376 +v 0.156733 1.037829 -0.167376 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vn 0.768700 0.426300 0.476900 +vn 0.000000 -0.000000 1.000000 +vn -0.768700 -0.426300 0.476900 +vn -0.768700 -0.426300 -0.476900 +vn 0.000000 0.000000 -1.000000 +vn 0.768700 0.426300 -0.476900 +vn 0.314800 0.820700 0.476900 +vn -0.314800 -0.820700 0.476900 +vn -0.314800 -0.820700 -0.476900 +vn 0.314800 0.820700 -0.476900 +vn -0.286400 0.831000 0.476900 +vn 0.286400 -0.831000 0.476900 +vn 0.286400 -0.831000 -0.476900 +vn -0.286400 0.831000 -0.476900 +vn -0.753600 0.452500 0.476900 +vn 0.753500 -0.452500 0.476900 +vn 0.753500 -0.452500 -0.476900 +vn -0.753600 0.452500 -0.476900 +vn -0.868100 -0.137700 0.476900 +vn 0.868100 0.137700 0.476900 +vn 0.868100 0.137700 -0.476900 +vn -0.868100 -0.137700 -0.476900 +vn -0.576500 -0.663500 0.476900 +vn 0.576500 0.663500 0.476900 +vn 0.576500 0.663500 -0.476900 +vn -0.576500 -0.663500 -0.476900 +vn -0.015100 -0.878800 0.476900 +vn -0.015100 -0.878900 0.476900 +vn 0.015100 0.878800 0.476900 +vn 0.015100 0.878800 -0.476900 +vn -0.015100 -0.878800 -0.476900 +vn -0.015100 -0.878900 -0.476900 +vn 0.553400 -0.683000 0.476800 +vn 0.553400 -0.682900 0.476900 +vn 0.553400 -0.682900 0.476800 +vn -0.553300 0.682900 0.476900 +vn -0.553300 0.682900 -0.476900 +vn 0.553400 -0.682900 -0.476800 +vn 0.553300 -0.682900 -0.476900 +vn 0.862900 -0.167500 0.476900 +vn -0.862900 0.167500 0.476900 +vn -0.862900 0.167500 -0.476900 +vn 0.862900 -0.167500 -0.476900 +vn -0.015100 -0.878900 0.476800 +vn 0.553300 -0.682900 0.476900 +usemtl Reflector +f 37/31/31 38/32/31 39/33/31 +f 39/31/32 40/32/32 41/33/32 +f 41/31/33 42/32/33 43/33/33 +f 43/31/34 44/32/34 45/33/34 +f 45/31/35 46/32/35 47/33/35 +f 37/31/36 47/32/36 38/33/36 +f 38/31/37 48/32/37 40/33/37 +f 40/31/32 49/32/32 50/34/32 +f 42/31/38 50/32/38 44/33/38 +f 44/31/39 51/32/39 46/33/39 +f 46/31/35 52/32/35 53/33/35 +f 53/31/40 54/32/40 38/33/40 +f 48/31/41 55/32/41 49/33/41 +f 49/31/32 56/32/32 50/33/32 +f 50/31/42 57/32/42 51/33/42 +f 51/31/43 58/32/43 52/33/43 +f 52/31/35 59/32/35 60/34/35 +f 54/31/44 60/32/44 48/33/44 +f 55/31/45 61/32/45 62/34/45 +f 56/31/32 62/32/32 57/33/32 +f 57/31/46 63/32/46 64/34/46 +f 58/31/47 64/32/47 59/33/47 +f 59/31/35 65/32/35 60/33/35 +f 60/31/48 66/32/48 55/33/48 +f 61/31/49 67/32/49 68/34/49 +f 62/31/32 68/32/32 63/33/32 +f 63/31/50 69/32/50 64/33/50 +f 64/31/51 70/32/51 65/33/51 +f 65/31/35 71/32/35 72/34/35 +f 66/31/52 72/32/52 61/33/52 +f 67/31/53 73/32/53 68/33/53 +f 68/31/32 74/32/32 69/33/32 +f 69/31/54 75/32/54 76/34/54 +f 70/31/55 76/32/55 71/33/55 +f 71/31/35 77/32/35 78/34/35 +f 72/31/56 78/32/56 67/33/56 +f 73/31/57 79/32/58 74/33/57 +f 74/31/32 80/32/32 75/33/32 +f 75/31/59 81/32/59 76/33/59 +f 76/31/60 82/32/60 77/33/60 +f 77/31/35 83/32/35 78/33/35 +f 78/31/61 84/32/62 73/33/61 +f 79/31/63 85/32/64 80/33/65 +f 80/31/32 86/32/32 81/33/32 +f 81/31/66 87/32/66 82/33/66 +f 82/31/67 88/32/67 83/33/67 +f 83/31/35 89/32/35 84/33/35 +f 84/31/68 90/32/69 85/34/69 +f 85/31/70 37/32/70 86/33/70 +f 86/31/32 39/32/32 87/33/32 +f 87/31/71 41/32/71 88/33/71 +f 88/31/72 43/32/72 89/33/72 +f 89/31/35 45/32/35 90/33/35 +f 90/31/73 47/32/73 37/34/73 +f 38/32/31 40/34/31 39/33/31 +f 40/32/32 42/34/32 41/33/32 +f 42/32/33 44/34/33 43/33/33 +f 44/32/34 46/34/34 45/33/34 +f 46/32/35 53/34/35 47/33/35 +f 47/32/36 53/34/36 38/33/36 +f 48/32/37 49/34/37 40/33/37 +f 42/33/32 40/31/32 50/34/32 +f 50/32/38 51/34/38 44/33/38 +f 51/32/39 52/34/39 46/33/39 +f 52/32/35 54/34/35 53/33/35 +f 54/32/40 48/34/40 38/33/40 +f 55/32/41 56/34/41 49/33/41 +f 56/32/32 57/34/32 50/33/32 +f 57/32/42 58/34/42 51/33/42 +f 58/32/43 59/34/43 52/33/43 +f 54/33/35 52/31/35 60/34/35 +f 60/32/44 55/34/44 48/33/44 +f 56/33/45 55/31/45 62/34/45 +f 62/32/32 63/34/32 57/33/32 +f 58/33/46 57/31/46 64/34/46 +f 64/32/47 65/34/47 59/33/47 +f 65/32/35 66/34/35 60/33/35 +f 66/32/48 61/34/48 55/33/48 +f 62/33/49 61/31/49 68/34/49 +f 68/32/32 69/34/32 63/33/32 +f 69/32/50 70/34/50 64/33/50 +f 70/32/51 71/34/51 65/33/51 +f 66/33/35 65/31/35 72/34/35 +f 72/32/52 67/34/52 61/33/52 +f 73/32/53 74/34/53 68/33/53 +f 74/32/32 75/34/32 69/33/32 +f 70/33/54 69/31/54 76/34/54 +f 76/32/55 77/34/55 71/33/55 +f 72/33/35 71/31/35 78/34/35 +f 78/32/56 73/34/56 67/33/56 +f 79/32/58 80/34/74 74/33/57 +f 80/32/32 81/34/32 75/33/32 +f 81/32/59 82/34/59 76/33/59 +f 82/32/60 83/34/60 77/33/60 +f 83/32/35 84/34/35 78/33/35 +f 84/32/62 79/34/62 73/33/61 +f 85/32/64 86/34/75 80/33/65 +f 86/32/32 87/34/32 81/33/32 +f 87/32/66 88/34/66 82/33/66 +f 88/32/67 89/34/67 83/33/67 +f 89/32/35 90/34/35 84/33/35 +f 79/33/68 84/31/68 85/34/69 +f 37/32/70 39/34/70 86/33/70 +f 39/32/32 41/34/32 87/33/32 +f 41/32/71 43/34/71 88/33/71 +f 43/32/72 45/34/72 89/33/72 +f 45/32/35 47/34/35 90/33/35 +f 85/33/73 90/31/73 37/34/73 +o Axle +v -0.041604 1.129241 0.041604 +v -0.041604 1.129241 -0.041604 +v -0.042071 0.805585 0.042071 +v 0.041604 1.129241 -0.041604 +v -0.042071 0.805585 -0.042071 +v 0.041604 1.129241 0.041604 +v 0.042071 0.805585 -0.042071 +v 0.042071 0.805585 0.042071 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 0.000000 1.000000 +vt 0.500000 1.000000 +vn -1.000000 0.001400 0.000000 +vn 0.000000 0.001400 -1.000000 +vn 1.000000 0.001400 0.000000 +vn 0.000000 0.001400 1.000000 +usemtl Reflector +f 91/35/76 92/36/76 93/37/76 +f 92/35/77 94/36/77 95/37/77 +f 94/35/78 96/36/78 97/37/78 +f 96/35/79 91/36/79 98/37/79 +f 92/36/76 95/38/76 93/37/76 +f 94/36/77 97/38/77 95/37/77 +f 96/36/78 98/38/78 97/37/78 +f 91/36/79 93/38/79 98/37/79 +o Base +v 0.089808 0.814962 -0.089808 +v -0.089808 0.814962 -0.089808 +v 0.089808 0.814962 0.089808 +v -0.089808 0.814962 0.089808 +v -0.146304 0.140310 0.146304 +v -0.146304 0.140310 -0.146304 +v 0.146304 0.140310 -0.146304 +v 0.146304 0.140310 0.146304 +v -0.146304 0.140310 0.146304 +v 0.146304 0.140310 0.146304 +v 0.146304 0.140310 -0.146304 +v -0.146304 0.140310 -0.146304 +v -0.370646 0.223467 0.370646 +v -0.370646 0.223467 -0.370646 +v -0.370646 0.059008 0.370646 +v 0.370646 0.223467 -0.370646 +v -0.370646 0.059008 -0.370646 +v 0.370646 0.223467 0.370646 +v 0.370646 0.059008 -0.370646 +v 0.370646 0.059008 0.370646 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.500000 1.000000 +vt 0.000000 0.500000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn -0.996500 0.083400 0.000000 +vn 0.000000 0.083400 -0.996500 +vn 0.996500 0.083400 0.000000 +vn 0.000000 0.083400 0.996500 +vn 0.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +usemtl Reflector +f 99/39/80 100/40/80 101/41/80 +f 102/39/81 100/40/81 103/41/81 +f 100/39/82 99/40/82 104/41/82 +f 99/39/83 101/40/83 105/41/83 +f 101/39/84 102/40/84 106/41/84 +f 107/39/85 108/40/85 103/41/85 +f 108/39/85 109/40/85 106/41/85 +f 109/39/85 110/40/85 105/41/85 +f 110/39/85 107/40/85 104/41/85 +f 111/42/86 112/39/86 113/43/86 +f 112/42/87 114/39/87 115/43/87 +f 114/42/88 116/39/88 117/43/88 +f 116/42/89 111/39/89 118/43/89 +f 113/42/90 115/39/90 118/43/90 +f 116/42/80 114/39/80 111/43/80 +f 100/40/80 102/44/80 101/41/80 +f 100/40/81 104/44/81 103/41/81 +f 99/40/82 105/44/82 104/41/82 +f 101/40/83 106/44/83 105/41/83 +f 102/40/84 103/44/84 106/41/84 +f 108/40/85 106/44/85 103/41/85 +f 109/40/85 105/44/85 106/41/85 +f 110/40/85 104/44/85 105/41/85 +f 107/40/85 103/44/85 104/41/85 +f 112/39/86 115/41/86 113/43/86 +f 114/39/87 117/41/87 115/43/87 +f 116/39/88 118/41/88 117/43/88 +f 111/39/89 113/41/89 118/43/89 +f 115/39/90 117/41/90 118/43/90 +f 114/39/80 112/41/80 111/43/80 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_blue.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_blue.json new file mode 100644 index 00000000..46201d31 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_blue.json @@ -0,0 +1,129 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/blue_egg_0", + "texture": "galacticraftplanets:blocks/blue_egg_0" +}, +"elements": [ +{ + "from": [ 4, 0, 4 ], + "to": [ 12, 10, 12 ], + "faces": { + "down": { "uv": [ 12, 12, 4, 4 ], "texture": "#texture" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#texture" }, + "north": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "south": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "west": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "east": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 10, 5 ], + "to": [ 11, 10.5, 11 ], + "faces": { + "down": { "uv": [ 11, 11, 5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "east": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" } + } +}, +{ + "from": [ 3.5, 0, 5 ], + "to": [ 4, 8, 11 ], + "faces": { + "down": { "uv": [ 12.5, 11, 12, 5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 5, 4, 11 ], "texture": "#texture" }, + "north": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 3.5 ], + "to": [ 11, 8, 4 ], + "faces": { + "down": { "uv": [ 11, 4, 5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 3.5, 11, 4 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12, 0, 5 ], + "to": [ 12.5, 8, 11 ], + "faces": { + "down": { "uv": [ 4, 11, 3.5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 12, 5, 12.5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 12 ], + "to": [ 11, 8, 12.5 ], + "faces": { + "down": { "uv": [ 11, 12.5, 5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 5, 12, 11, 12.5 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 0, 7 ], + "to": [ 3.5, 4, 9 ], + "faces": { + "down": { "uv": [ 13, 9, 12.5, 7 ], "texture": "#texture" }, + "up": { "uv": [ 3, 7, 3.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 3 ], + "to": [ 9, 4, 3.5 ], + "faces": { + "down": { "uv": [ 9, 3.5, 7, 3 ], "texture": "#texture" }, + "up": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 12.5 ], + "to": [ 9, 4, 13 ], + "faces": { + "down": { "uv": [ 9, 13, 7, 12.5 ], "texture": "#texture" }, + "up": { "uv": [ 7, 12.5, 9, 13 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12.5, 0, 7 ], + "to": [ 13, 4, 9 ], + "faces": { + "down": { "uv": [ 3.5, 9, 3, 7 ], "texture": "#texture" }, + "up": { "uv": [ 12.5, 7, 13, 9 ], "texture": "#texture" }, + "north": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_red.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_red.json new file mode 100644 index 00000000..13b50486 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_red.json @@ -0,0 +1,129 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/red_egg_0", + "texture": "galacticraftplanets:blocks/red_egg_0" +}, +"elements": [ +{ + "from": [ 4, 0, 4 ], + "to": [ 12, 10, 12 ], + "faces": { + "down": { "uv": [ 12, 12, 4, 4 ], "texture": "#texture" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#texture" }, + "north": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "south": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "west": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "east": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 10, 5 ], + "to": [ 11, 10.5, 11 ], + "faces": { + "down": { "uv": [ 11, 11, 5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "east": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" } + } +}, +{ + "from": [ 3.5, 0, 5 ], + "to": [ 4, 8, 11 ], + "faces": { + "down": { "uv": [ 12.5, 11, 12, 5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 5, 4, 11 ], "texture": "#texture" }, + "north": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 3.5 ], + "to": [ 11, 8, 4 ], + "faces": { + "down": { "uv": [ 11, 4, 5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 3.5, 11, 4 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12, 0, 5 ], + "to": [ 12.5, 8, 11 ], + "faces": { + "down": { "uv": [ 4, 11, 3.5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 12, 5, 12.5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 12 ], + "to": [ 11, 8, 12.5 ], + "faces": { + "down": { "uv": [ 11, 12.5, 5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 5, 12, 11, 12.5 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 0, 7 ], + "to": [ 3.5, 4, 9 ], + "faces": { + "down": { "uv": [ 13, 9, 12.5, 7 ], "texture": "#texture" }, + "up": { "uv": [ 3, 7, 3.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 3 ], + "to": [ 9, 4, 3.5 ], + "faces": { + "down": { "uv": [ 9, 3.5, 7, 3 ], "texture": "#texture" }, + "up": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 12.5 ], + "to": [ 9, 4, 13 ], + "faces": { + "down": { "uv": [ 9, 13, 7, 12.5 ], "texture": "#texture" }, + "up": { "uv": [ 7, 12.5, 9, 13 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12.5, 0, 7 ], + "to": [ 13, 4, 9 ], + "faces": { + "down": { "uv": [ 3.5, 9, 3, 7 ], "texture": "#texture" }, + "up": { "uv": [ 12.5, 7, 13, 9 ], "texture": "#texture" }, + "north": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_yellow.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_yellow.json new file mode 100644 index 00000000..42883f7f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_yellow.json @@ -0,0 +1,129 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/yellow_egg_0", + "texture": "galacticraftplanets:blocks/yellow_egg_0" +}, +"elements": [ +{ + "from": [ 4, 0, 4 ], + "to": [ 12, 10, 12 ], + "faces": { + "down": { "uv": [ 12, 12, 4, 4 ], "texture": "#texture" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#texture" }, + "north": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "south": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "west": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "east": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 10, 5 ], + "to": [ 11, 10.5, 11 ], + "faces": { + "down": { "uv": [ 11, 11, 5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "east": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" } + } +}, +{ + "from": [ 3.5, 0, 5 ], + "to": [ 4, 8, 11 ], + "faces": { + "down": { "uv": [ 12.5, 11, 12, 5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 5, 4, 11 ], "texture": "#texture" }, + "north": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 3.5 ], + "to": [ 11, 8, 4 ], + "faces": { + "down": { "uv": [ 11, 4, 5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 3.5, 11, 4 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12, 0, 5 ], + "to": [ 12.5, 8, 11 ], + "faces": { + "down": { "uv": [ 4, 11, 3.5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 12, 5, 12.5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 12 ], + "to": [ 11, 8, 12.5 ], + "faces": { + "down": { "uv": [ 11, 12.5, 5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 5, 12, 11, 12.5 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 0, 7 ], + "to": [ 3.5, 4, 9 ], + "faces": { + "down": { "uv": [ 13, 9, 12.5, 7 ], "texture": "#texture" }, + "up": { "uv": [ 3, 7, 3.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 3 ], + "to": [ 9, 4, 3.5 ], + "faces": { + "down": { "uv": [ 9, 3.5, 7, 3 ], "texture": "#texture" }, + "up": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 12.5 ], + "to": [ 9, 4, 13 ], + "faces": { + "down": { "uv": [ 9, 13, 7, 12.5 ], "texture": "#texture" }, + "up": { "uv": [ 7, 12.5, 9, 13 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12.5, 0, 7 ], + "to": [ 13, 4, 9 ], + "faces": { + "down": { "uv": [ 3.5, 9, 3, 7 ], "texture": "#texture" }, + "up": { "uv": [ 12.5, 7, 13, 9 ], "texture": "#texture" }, + "north": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_controller.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_controller.json new file mode 100644 index 00000000..854aee30 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_controller.json @@ -0,0 +1,25 @@ +{ + "parent": "block/cube_all", + "elements": [ + { "from": [ 0, 4, 0 ], + "to": [ 16, 12.5, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftplanets:blocks/solar_controller_top", + "down": "galacticraftplanets:blocks/solar_controller_top", + "up": "galacticraftplanets:blocks/solar_controller_top", + "north": "galacticraftplanets:blocks/solar_controller_side", + "east": "galacticraftplanets:blocks/solar_controller_output", + "south": "galacticraftplanets:blocks/solar_controller_side", + "west": "galacticraftplanets:blocks/solar_controller_side" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_module.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_module.json new file mode 100644 index 00000000..5a47a7c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_module.json @@ -0,0 +1,25 @@ +{ + "parent": "block/cube_all", + "elements": [ + { "from": [ 0, 6, 0 ], + "to": [ 16, 10, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftplanets:blocks/solar_top", + "down": "galacticraftplanets:blocks/solar_top", + "up": "galacticraftplanets:blocks/solar_top", + "north": "galacticraftplanets:blocks/solar_side", + "east": "galacticraftplanets:blocks/solar_side", + "south": "galacticraftplanets:blocks/solar_side", + "west": "galacticraftplanets:blocks/solar_side" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/spout.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/spout.json new file mode 100644 index 00000000..2fc8e316 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/spout.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube_all", + "textures": { + "particle": "galacticraftplanets:blocks/venus_rock_0", + "down": "galacticraftplanets:blocks/venus_rock_0", + "up": "galacticraftplanets:blocks/spout", + "north": "galacticraftplanets:blocks/venus_rock_0", + "east": "galacticraftplanets:blocks/venus_rock_0", + "south": "galacticraftplanets:blocks/venus_rock_0", + "west": "galacticraftplanets:blocks/venus_rock_0" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.mtl new file mode 100644 index 00000000..d69bd249 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.mtl @@ -0,0 +1,5 @@ +newmtl Connector +map_Kd galacticraftplanets:blocks/telepad_short0 + +newmtl Main +map_Kd galacticraftplanets:blocks/telepad_short diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.obj new file mode 100644 index 00000000..929e5d58 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.obj @@ -0,0 +1,406 @@ +# Blender v2.76 (sub 0) OBJ File: 'tele.blend' +# www.blender.org +mtllib telepad_short.mtl +o Connector +v -0.262909 3.388816 0.262909 +v -0.262909 3.691933 0.262909 +v -0.262909 3.388816 -0.262909 +v -0.262909 3.691933 -0.262909 +v 0.262909 3.388816 0.262909 +v 0.262909 3.691933 0.262909 +v 0.262909 3.388816 -0.262909 +v 0.262909 3.691933 -0.262909 +vt 0.993167 0.505142 +vt 0.993167 0.996858 +vt 0.501450 0.996858 +vt 0.390130 0.611101 +vt 0.390130 0.905664 +vt 0.095566 0.905664 +vt 0.501450 0.505142 +vt 0.095566 0.611101 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +usemtl Connector +f 4/1/1 3/2/1 1/3/1 +f 8/1/2 7/2/2 3/3/2 +f 6/1/3 5/2/3 7/3/3 +f 2/1/4 1/2/4 5/3/4 +f 8/4/5 4/5/5 2/6/5 +f 2/7/1 4/1/1 1/3/1 +f 4/7/2 8/1/2 3/3/2 +f 8/7/3 6/1/3 7/3/3 +f 6/7/4 2/1/4 5/3/4 +f 6/8/5 8/4/5 2/6/5 +o Top +v -2.000000 3.690734 -2.000000 +v -2.000000 3.490734 -2.000000 +v -2.000000 3.690734 2.000000 +v -2.000000 3.490734 2.000000 +v 2.000000 3.690734 -2.000000 +v 2.000000 3.490734 -2.000000 +v 2.000000 3.690734 2.000000 +v 2.000000 3.490734 2.000000 +v -1.500000 3.490734 -1.500000 +v -1.500000 3.290734 -1.500000 +v -1.500000 3.490734 1.500000 +v -1.500000 3.290734 1.500000 +v 1.500000 3.490734 -1.500000 +v 1.500000 3.290734 -1.500000 +v 1.500000 3.490734 1.500000 +v 1.500000 3.290734 1.500000 +v -0.750000 3.290734 -0.750000 +v -0.750000 3.090734 -0.750000 +v -0.750000 3.290734 0.750000 +v -0.750000 3.090734 0.750000 +v 0.750000 3.290734 -0.750000 +v 0.750000 3.090734 -0.750000 +v 0.750000 3.290734 0.750000 +v 0.750000 3.090734 0.750000 +v -2.000000 3.690734 0.666667 +v -2.000000 3.690734 -0.666667 +v 0.666667 3.690734 2.000000 +v -0.666667 3.690734 2.000000 +v 2.000000 3.690734 -0.666667 +v 2.000000 3.690734 0.666667 +v -0.666667 3.690734 -2.000000 +v 0.666667 3.690734 -2.000000 +v -1.768620 3.690734 -1.768620 +v 1.768620 3.690734 -1.768620 +v -1.768620 3.690734 1.768620 +v 1.768620 3.690734 1.768620 +v -1.768620 3.599312 -1.768620 +v 1.768620 3.599312 -1.768620 +v -1.768620 3.599313 1.768620 +v 1.768620 3.599313 1.768620 +v -0.621219 3.090734 -0.621219 +v -0.621219 3.090734 0.621219 +v 0.621219 3.090734 0.621219 +v 0.621219 3.090734 -0.621219 +v -0.621219 3.254340 -0.621219 +v -0.621219 3.254340 0.621219 +v 0.621219 3.254340 0.621219 +v 0.621219 3.254340 -0.621219 +vt 0.953582 0.867121 +vt 0.752682 0.519153 +vt 0.551782 0.635142 +vt 0.752682 0.983111 +vt 0.984661 0.519153 +vt 0.984661 0.983111 +vt 0.520703 0.983111 +vt 0.986211 0.018439 +vt 0.986211 0.482398 +vt 0.522253 0.482398 +vt 0.522253 0.018439 +vt 0.994914 0.501149 +vt 0.994914 0.988713 +vt 0.507350 0.988713 +vt 0.507350 0.501149 +vt 0.487048 0.021540 +vt 0.487048 0.485498 +vt 0.023090 0.485498 +vt 0.551782 0.867121 +vt 0.953582 0.635142 +vt 0.520703 0.519153 +vt 0.023090 0.021540 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 -0.000000 +usemtl Main +f 12/9/6 33/10/6 34/11/6 +f 16/9/7 35/10/7 12/12/7 +f 14/9/8 37/10/8 38/11/8 +f 10/9/9 39/10/9 14/12/9 +f 16/13/10 12/14/10 10/15/10 +f 20/13/6 19/14/6 17/15/6 +f 24/13/7 23/14/7 19/15/7 +f 22/13/8 21/14/8 23/15/8 +f 18/13/9 17/14/9 21/15/9 +f 19/13/11 23/14/11 21/15/11 +f 24/13/10 20/14/10 18/15/10 +f 28/16/6 27/17/6 25/18/6 +f 32/16/7 31/17/7 27/18/7 +f 32/19/8 30/16/8 29/17/8 +f 26/16/9 25/17/9 29/18/9 +f 27/13/11 31/14/11 29/15/11 +f 32/16/10 51/17/10 52/18/10 +f 43/13/8 47/14/8 45/15/8 +f 11/20/11 15/21/11 44/22/11 +f 11/23/11 43/20/11 41/21/11 +f 47/13/11 48/14/11 46/15/11 +f 42/13/6 46/14/6 48/15/6 +f 44/13/9 48/14/9 47/15/9 +f 41/13/7 45/14/7 46/15/7 +f 51/16/6 55/17/6 56/18/6 +f 26/16/10 49/17/10 50/18/10 +f 30/16/10 52/17/10 49/18/10 +f 28/16/10 50/17/10 51/18/10 +f 55/24/10 54/25/10 53/26/10 +f 49/16/8 53/17/8 54/18/8 +f 52/16/7 56/17/7 53/18/7 +f 50/16/9 54/17/9 55/18/9 +f 15/20/11 13/21/11 42/22/11 +f 13/20/11 9/21/11 41/22/11 +f 9/27/6 10/12/6 34/11/6 +f 12/9/6 11/28/6 33/10/6 +f 34/11/6 10/12/6 12/9/6 +f 11/27/7 12/12/7 36/11/7 +f 16/9/7 15/28/7 35/10/7 +f 35/10/7 36/11/7 12/12/7 +f 15/27/8 16/12/8 38/11/8 +f 14/9/8 13/28/8 37/10/8 +f 38/11/8 16/12/8 14/9/8 +f 13/27/9 14/12/9 40/11/9 +f 10/9/9 9/28/9 39/10/9 +f 39/10/9 40/11/9 14/12/9 +f 14/29/10 16/13/10 10/15/10 +f 18/29/6 20/13/6 17/15/6 +f 20/29/7 24/13/7 19/15/7 +f 24/29/8 22/13/8 23/15/8 +f 22/29/9 18/13/9 21/15/9 +f 17/29/11 19/13/11 21/15/11 +f 22/29/10 24/13/10 18/15/10 +f 26/19/6 28/16/6 25/18/6 +f 28/19/7 32/16/7 27/18/7 +f 31/18/8 32/19/8 29/17/8 +f 30/19/9 26/16/9 29/18/9 +f 25/29/11 27/13/11 29/15/11 +f 30/19/10 32/16/10 52/18/10 +f 41/29/8 43/13/8 45/15/8 +f 43/23/11 11/20/11 44/22/11 +f 9/22/11 11/23/11 41/21/11 +f 45/29/11 47/13/11 46/15/11 +f 44/29/6 42/13/6 48/15/6 +f 43/29/9 44/13/9 47/15/9 +f 42/29/7 41/13/7 46/15/7 +f 52/19/6 51/16/6 56/18/6 +f 28/19/10 26/16/10 50/18/10 +f 26/19/10 30/16/10 49/18/10 +f 32/19/10 28/16/10 51/18/10 +f 56/30/10 55/24/10 53/26/10 +f 50/19/8 49/16/8 54/18/8 +f 49/19/7 52/16/7 53/18/7 +f 51/19/9 50/16/9 55/18/9 +f 44/23/11 15/20/11 42/22/11 +f 42/23/11 13/20/11 41/22/11 +o Bottom +v -0.384384 0.378917 -0.703855 +v -0.365933 0.640014 -0.721764 +v -0.384384 0.037907 -1.950158 +v -0.384384 0.217413 -1.965660 +v 0.384384 0.378917 -0.703855 +v 0.365933 0.640014 -0.721764 +v 0.384384 0.037907 -1.950158 +v 0.384384 0.217413 -1.965660 +v -2.000000 0.000000 2.000000 +v -2.000000 0.200000 2.000000 +v -2.000000 0.000000 -2.000000 +v -2.000000 0.200000 -2.000000 +v 2.000000 0.000000 2.000000 +v 2.000000 0.200000 2.000000 +v 2.000000 0.000000 -2.000000 +v 2.000000 0.200000 -2.000000 +v -0.703855 0.378917 0.384384 +v -0.721764 0.640014 0.365933 +v -1.950158 0.037907 0.384384 +v -1.965660 0.217413 0.384384 +v -0.703855 0.378917 -0.384384 +v -0.721764 0.640014 -0.365934 +v -1.950158 0.037907 -0.384384 +v -1.965660 0.217413 -0.384384 +v 0.384384 0.378917 0.703855 +v 0.365933 0.640014 0.721764 +v 0.384384 0.037907 1.950158 +v 0.384384 0.217413 1.965660 +v -0.384384 0.378917 0.703855 +v -0.365934 0.640014 0.721764 +v -0.384384 0.037907 1.950158 +v -0.384384 0.217413 1.965660 +v 0.703855 0.378917 -0.384384 +v 0.721764 0.640014 -0.365933 +v 1.950158 0.037907 -0.384384 +v 1.965660 0.217413 -0.384384 +v 0.703855 0.378917 0.384384 +v 0.721764 0.640014 0.365933 +v 1.950158 0.037907 0.384384 +v 1.965660 0.217413 0.384384 +v -1.500000 0.200000 1.500000 +v -1.500000 0.200000 -1.500000 +v 1.500000 0.200000 -1.500000 +v 1.500000 0.200000 1.500000 +v -1.500000 0.364341 1.500000 +v -1.500000 0.364341 -1.500000 +v 1.500000 0.364341 -1.500000 +v 1.500000 0.364341 1.500000 +v -0.750000 0.364341 0.750000 +v -0.750000 0.364341 -0.750000 +v 0.750000 0.364341 -0.750000 +v 0.750000 0.364341 0.750000 +v -0.750000 0.675818 0.750000 +v -0.750000 0.675818 -0.750000 +v 0.750000 0.675818 -0.750000 +v 0.750000 0.675818 0.750000 +v -0.647926 0.675818 0.647926 +v -0.647926 0.675818 -0.647926 +v 0.647926 0.675818 -0.647926 +v 0.647926 0.675818 0.647926 +v -0.647926 0.600000 0.647926 +v -0.647926 0.600000 -0.647926 +v 0.647926 0.600000 -0.647926 +v 0.647926 0.600000 0.647926 +vt 0.488179 0.511821 +vt 0.488179 0.990443 +vt 0.009557 0.990443 +vt 0.992257 0.506907 +vt 0.992257 0.989156 +vt 0.510007 0.989156 +vt 0.009557 0.511821 +vt 0.490690 0.510860 +vt 0.490690 0.994504 +vt 0.007046 0.994504 +vt 0.987325 0.513388 +vt 0.987325 0.982674 +vt 0.518039 0.982674 +vt 0.990618 0.612042 +vt 0.990618 0.884021 +vt 0.505445 0.884021 +vt 0.990618 0.505445 +vt 0.990618 0.990618 +vt 0.505445 0.990618 +vt 0.990618 0.604676 +vt 0.990618 0.891387 +vt 0.505445 0.891387 +vt 0.987849 0.013701 +vt 0.987849 0.490237 +vt 0.511314 0.490237 +vt 0.491930 0.010457 +vt 0.491930 0.493480 +vt 0.008907 0.493480 +vt 0.510007 0.506907 +vt 0.007046 0.510860 +vt 0.518039 0.513388 +vt 0.505445 0.612042 +vt 0.505445 0.505445 +vt 0.505445 0.604676 +vt 0.511314 0.013701 +vt 0.008907 0.010457 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.086000 -0.996300 +vn 0.997500 0.069900 -0.008900 +vn 0.000000 0.946800 -0.321700 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 -0.000000 +vn -0.996300 -0.086000 0.000000 +vn -0.008900 0.069900 -0.997500 +vn -0.321700 0.946800 0.000000 +vn 0.000000 -0.086000 0.996300 +vn -0.997500 0.069900 0.008900 +vn 0.000000 0.946800 0.321700 +vn 0.996300 -0.086000 0.000000 +vn 0.008900 0.069900 0.997500 +vn 0.321700 0.946800 0.000000 +vn -0.997500 0.069900 -0.008900 +vn -0.008900 0.069900 0.997500 +vn 0.997500 0.069900 0.008900 +vn 0.008900 0.069900 -0.997500 +usemtl Main +f 60/31/12 59/32/12 57/33/12 +f 64/34/13 63/35/13 59/36/13 +f 64/37/14 62/31/14 61/32/14 +f 64/38/15 60/39/15 58/40/15 +f 68/34/12 67/35/12 65/36/12 +f 72/34/16 71/35/16 67/36/16 +f 70/34/17 69/35/17 71/36/17 +f 66/34/18 65/35/18 69/36/18 +f 67/41/19 71/42/19 69/43/19 +f 70/44/20 100/45/20 97/46/20 +f 76/31/18 75/32/18 73/33/18 +f 80/34/21 79/35/21 75/36/21 +f 80/37/22 78/31/22 77/32/22 +f 80/38/23 76/39/23 74/40/23 +f 84/31/17 83/32/17 81/33/17 +f 88/34/24 87/35/24 83/36/24 +f 88/37/25 86/31/25 85/32/25 +f 88/38/26 84/39/26 82/40/26 +f 92/31/16 91/32/16 89/33/16 +f 96/34/27 95/35/27 91/36/27 +f 96/37/28 94/31/28 93/32/28 +f 96/38/29 92/39/29 90/40/29 +f 99/47/17 103/48/17 104/49/17 +f 68/44/20 98/45/20 99/46/20 +f 72/44/20 99/45/20 100/46/20 +f 66/44/20 97/45/20 98/46/20 +f 101/50/20 105/51/20 106/52/20 +f 97/47/12 101/48/12 102/49/12 +f 100/47/18 104/48/18 101/49/18 +f 98/47/16 102/48/16 103/49/16 +f 108/53/18 112/54/18 109/55/18 +f 104/50/20 108/51/20 105/52/20 +f 102/50/20 106/51/20 107/52/20 +f 103/50/20 107/51/20 108/52/20 +f 111/53/20 115/54/20 116/55/20 +f 106/53/16 110/54/16 111/55/16 +f 107/53/17 111/54/17 112/55/17 +f 105/53/12 109/54/12 110/55/12 +f 116/53/16 120/54/16 117/55/16 +f 109/53/20 113/54/20 114/55/20 +f 112/53/20 116/54/20 113/55/20 +f 110/53/20 114/54/20 115/55/20 +f 119/56/20 118/57/20 117/58/20 +f 114/53/18 118/54/18 119/55/18 +f 115/53/12 119/54/12 120/55/12 +f 113/53/17 117/54/17 118/55/17 +f 58/37/30 60/31/30 57/33/30 +f 60/59/13 64/34/13 59/36/13 +f 63/33/17 64/37/17 61/32/17 +f 62/60/15 64/38/15 58/40/15 +f 66/59/12 68/34/12 65/36/12 +f 68/59/16 72/34/16 67/36/16 +f 72/59/17 70/34/17 71/36/17 +f 70/59/18 66/34/18 69/36/18 +f 65/61/19 67/41/19 69/43/19 +f 66/62/20 70/44/20 97/46/20 +f 74/37/31 76/31/31 73/33/31 +f 76/59/21 80/34/21 75/36/21 +f 79/33/16 80/37/16 77/32/16 +f 78/60/23 80/38/23 74/40/23 +f 82/37/32 84/31/32 81/33/32 +f 84/59/24 88/34/24 83/36/24 +f 87/33/12 88/37/12 85/32/12 +f 86/60/26 88/38/26 82/40/26 +f 90/37/33 92/31/33 89/33/33 +f 92/59/27 96/34/27 91/36/27 +f 95/33/18 96/37/18 93/32/18 +f 94/60/29 96/38/29 90/40/29 +f 100/63/17 99/47/17 104/49/17 +f 72/62/20 68/44/20 99/46/20 +f 70/62/20 72/44/20 100/46/20 +f 68/62/20 66/44/20 98/46/20 +f 102/64/20 101/50/20 106/52/20 +f 98/63/12 97/47/12 102/49/12 +f 97/63/18 100/47/18 101/49/18 +f 99/63/16 98/47/16 103/49/16 +f 105/65/18 108/53/18 109/55/18 +f 101/64/20 104/50/20 105/52/20 +f 103/64/20 102/50/20 107/52/20 +f 104/64/20 103/50/20 108/52/20 +f 112/65/20 111/53/20 116/55/20 +f 107/65/16 106/53/16 111/55/16 +f 108/65/17 107/53/17 112/55/17 +f 106/65/12 105/53/12 110/55/12 +f 113/65/16 116/53/16 117/55/16 +f 110/65/20 109/53/20 114/55/20 +f 109/65/20 112/53/20 113/55/20 +f 111/65/20 110/53/20 115/55/20 +f 120/66/20 119/56/20 117/58/20 +f 115/65/18 114/53/18 119/55/18 +f 116/65/12 115/53/12 120/55/12 +f 114/65/17 113/53/17 118/55/17 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/terraformer_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/terraformer_model.json new file mode 100644 index 00000000..34b9b391 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/terraformer_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftplanets:blocks/terraformer_0", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftplanets:blocks/terraformer_0", + "west": "galacticraftcore:blocks/machine" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/titanium_block_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/titanium_block_model.json new file mode 100644 index 00000000..5ab943fe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/titanium_block_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/block_titanium" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t2.json new file mode 100644 index 00000000..93b69d2f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t2.json @@ -0,0 +1,45 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/treasure_chest_mars", + "texture": "galacticraftplanets:model/treasure" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 9, 15 ], + "faces": { + "down": { "uv": [ 10.5, 8.25, 7, 4.75 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 8.5, 14, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8.5, 7, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.5, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 3.5, 10.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 10.5, 3.5, 7, 0 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 7, 15 ], + "to": [ 9.25, 11, 16 ], + "faces": { + "down": { "uv": [ 1.25, 0.25, 0.75, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0.25, 0, 0.75, 0.25 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0.25, 0.5, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0.25, 1.25, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 1.25, 0.25, 1.5, 1.25 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t3.json new file mode 100644 index 00000000..50fec3d3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t3.json @@ -0,0 +1,45 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/treasure_chest_venus", + "texture": "galacticraftplanets:model/treasure_venus" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 9, 15 ], + "faces": { + "down": { "uv": [ 10.5, 8.25, 7, 4.75 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 8.5, 14, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8.5, 7, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.5, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 3.5, 10.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 10.5, 3.5, 7, 0 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 7, 15 ], + "to": [ 9.25, 11, 16 ], + "faces": { + "down": { "uv": [ 1.25, 0.25, 0.75, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0.25, 0, 0.75, 0.25 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0.25, 0.5, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0.25, 1.25, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 1.25, 0.25, 1.5, 1.25 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_aluminum.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_aluminum.json new file mode 100644 index 00000000..d6a3c22d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_aluminum.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_aluminum_venus" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_copper.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_copper.json new file mode 100644 index 00000000..8426e819 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_copper.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_copper_venus" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_galena.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_galena.json new file mode 100644 index 00000000..33a8aba6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_galena.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_galena" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_quartz.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_quartz.json new file mode 100644 index 00000000..d72b3e74 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_quartz.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_quartz_venus" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_silicon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_silicon.json new file mode 100644 index 00000000..bbe8346c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_silicon.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_silicon_venus" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_solar.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_solar.json new file mode 100644 index 00000000..501367ad --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_solar.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_solar" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_tin.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_tin.json new file mode 100644 index 00000000..82781433 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_tin.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_tin_venus" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_0_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_0_model.json new file mode 100644 index 00000000..230d916c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_0_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_0" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_1_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_1_model.json new file mode 100644 index 00000000..8e787fdc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_1" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_2_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_2_model.json new file mode 100644 index 00000000..05ad867f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_2_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_2" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_3_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_3_model.json new file mode 100644 index 00000000..5abdd14f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_3_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_3" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_scorched.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_scorched.json new file mode 100644 index 00000000..27cb8a56 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_scorched.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_scorched" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_0_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_0_model.json new file mode 100644 index 00000000..7856f12f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_0_model.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/vine_0" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_1_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_1_model.json new file mode 100644 index 00000000..48d5eba1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/vine_1" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_2_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_2_model.json new file mode 100644 index 00000000..f63e6513 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_2_model.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/vine_2" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_model.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_model.json new file mode 100644 index 00000000..fef7d0e8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_model.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#cross" + }, + "elements": [ + { "from": [ 0, 0, 8 ], + "to": [ 16, 16, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" } + } + }, + { "from": [ 8, 0, 0 ], + "to": [ 8, 16, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" } + } + } + ] +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway.json new file mode 100644 index 00000000..5aa0ab82 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway.json @@ -0,0 +1,152 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_n.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_n.json new file mode 100644 index 00000000..a20636ae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_n.json @@ -0,0 +1,165 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ne.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ne.json new file mode 100644 index 00000000..25e77581 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ne.json @@ -0,0 +1,178 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 10, 6, 6.5 ], + "to": [ 16, 8.5, 9.5 ], + "faces": { + "down": { "uv": [ 7.5, 9.5, 1.5, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 8.5, 6.5, 14.5, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nes.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nes.json new file mode 100644 index 00000000..6c6ce2be --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nes.json @@ -0,0 +1,191 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 10, 6, 6.5 ], + "to": [ 16, 8.5, 9.5 ], + "faces": { + "down": { "uv": [ 7.5, 9.5, 1.5, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 8.5, 6.5, 14.5, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6, 10 ], + "to": [ 9.5, 8.5, 16 ], + "faces": { + "down": { "uv": [ 9.5, 14.5, 6.5, 8.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 8.5, 9.5, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nesw.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nesw.json new file mode 100644 index 00000000..eefc4d95 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nesw.json @@ -0,0 +1,204 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0, 6, 6.5 ], + "to": [ 6, 8.5, 9.5 ], + "faces": { + "down": { "uv": [ 14.5, 9.5, 8.5, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1.5, 10.5, 7.5, 13.5 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 1.5, 11, 7.5, 13.5 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 10, 6, 6.5 ], + "to": [ 16, 8.5, 9.5 ], + "faces": { + "down": { "uv": [ 7.5, 9.5, 1.5, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 8.5, 6.5, 14.5, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6, 10 ], + "to": [ 9.5, 8.5, 16 ], + "faces": { + "down": { "uv": [ 9.5, 14.5, 6.5, 8.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 8.5, 9.5, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ns.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ns.json new file mode 100644 index 00000000..ac5b5bb7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ns.json @@ -0,0 +1,178 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6, 10 ], + "to": [ 9.5, 8.5, 16 ], + "faces": { + "down": { "uv": [ 9.5, 14.5, 6.5, 8.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 8.5, 9.5, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen.json new file mode 100644 index 00000000..9392b57c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen.json @@ -0,0 +1,153 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_d.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_d.json new file mode 100644 index 00000000..c9685793 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_d.json @@ -0,0 +1,166 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_n.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_n.json new file mode 100644 index 00000000..e5ada58f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_n.json @@ -0,0 +1,166 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nd.json new file mode 100644 index 00000000..3fb71fb7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nd.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ne.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ne.json new file mode 100644 index 00000000..25a29a03 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ne.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ned.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ned.json new file mode 100644 index 00000000..ebf86aaf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ned.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nes.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nes.json new file mode 100644 index 00000000..0db476e5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nes.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesd.json new file mode 100644 index 00000000..6f9dc4f1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesd.json @@ -0,0 +1,205 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesw.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesw.json new file mode 100644 index 00000000..bac7f375 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesw.json @@ -0,0 +1,205 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0.0625, 6.4375, 6.5 ], + "to": [ 6.0625, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 16, 10, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_neswd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_neswd.json new file mode 100644 index 00000000..8b9d9934 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_neswd.json @@ -0,0 +1,218 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0.0625, 6.4375, 6.5 ], + "to": [ 6.0625, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 16, 10, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ns.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ns.json new file mode 100644 index 00000000..c5d440f1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ns.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nsd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nsd.json new file mode 100644 index 00000000..8eb05f3c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nsd.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire.json new file mode 100644 index 00000000..21f49be9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire.json @@ -0,0 +1,153 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_d.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_d.json new file mode 100644 index 00000000..b1b27f39 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_d.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_n.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_n.json new file mode 100644 index 00000000..fb275223 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_n.json @@ -0,0 +1,166 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nd.json new file mode 100644 index 00000000..b1b27f39 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nd.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ne.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ne.json new file mode 100644 index 00000000..5230ad93 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ne.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ned.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ned.json new file mode 100644 index 00000000..1e598c71 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ned.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nes.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nes.json new file mode 100644 index 00000000..f3bc54ac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nes.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesd.json new file mode 100644 index 00000000..a6325481 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesd.json @@ -0,0 +1,205 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesw.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesw.json new file mode 100644 index 00000000..948c231e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesw.json @@ -0,0 +1,205 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 11.75, 7.625, 14.375, 10.125 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 11.75, 7.625, 14.375, 10.125 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_neswd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_neswd.json new file mode 100644 index 00000000..3b56ea05 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_neswd.json @@ -0,0 +1,218 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 11.75, 7.625, 14.375, 10.125 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 11.75, 7.625, 14.375, 10.125 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ns.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ns.json new file mode 100644 index 00000000..a33af529 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ns.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nsd.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nsd.json new file mode 100644 index 00000000..d412a23b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nsd.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_0.json new file mode 100644 index 00000000..1f0018e7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_0.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/web_torch_0" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_1.json new file mode 100644 index 00000000..bd3ca884 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_1.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/web_torch_1" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.mtl new file mode 100644 index 00000000..d478cedb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.mtl @@ -0,0 +1,29 @@ +newmtl None +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket + +newmtl None_NONE +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket + +newmtl None_uv.png +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket + +newmtl None_uv.png.004 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket + +newmtl None_uv.png.005 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.obj new file mode 100644 index 00000000..21137e0b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.obj @@ -0,0 +1,1154 @@ +mtllib cargo_rocket.mtl +o Rocket +v -0.162447 1.380342 -1.551622 +v 0.162447 1.380342 -1.551622 +v 0.162447 1.188578 -1.551622 +v 0.162447 1.380342 -1.226728 +v 0.162447 1.188578 -1.226728 +v -0.162447 1.380342 -1.226728 +v -0.162447 1.188578 -1.226728 +v -0.162447 1.188578 -1.551622 +v 1.551622 1.380342 -0.162447 +v 1.551622 1.380342 0.162447 +v 1.551622 1.188578 0.162447 +v 1.226728 1.380342 0.162447 +v 1.226728 1.188578 0.162447 +v 1.226728 1.380342 -0.162447 +v 1.226728 1.188578 -0.162447 +v 1.551622 1.188578 -0.162447 +v -1.551622 1.380342 0.162447 +v -1.551622 1.380342 -0.162447 +v -1.551622 1.188578 -0.162447 +v -1.226728 1.380342 -0.162447 +v -1.226728 1.188578 -0.162447 +v -1.226728 1.380342 0.162447 +v -1.226728 1.188578 0.162447 +v -1.551622 1.188578 0.162447 +v 1.252214 2.407651 0.413706 +v 0.977566 2.639503 0.587932 +v 0.977566 1.463642 0.587932 +v 0.977566 2.639503 -0.587928 +v 0.977566 1.463642 -0.587928 +v 1.252214 2.407651 -0.413703 +v 1.252214 1.695493 0.413706 +v 1.352214 1.695493 0.413706 +v -0.156886 1.050235 -0.988298 +v -0.156886 1.050235 -1.154150 +v -0.156886 0.982336 -1.154150 +v -0.088986 1.050235 -1.154150 +v -0.088986 0.982336 -1.154150 +v -0.088986 1.050235 -0.988298 +v -0.088986 0.982336 -0.988298 +v -0.156886 0.982336 -0.988298 +v -0.231915 1.192633 -1.156447 +v -0.231915 1.192633 -1.620277 +v -0.231915 0.394576 -1.620277 +v 0.231915 1.192633 -1.620277 +v 0.231915 0.394576 -1.620277 +v 0.231915 1.192633 -1.156447 +v 0.231915 0.394576 -1.156447 +v -0.231915 0.394576 -1.156447 +v -1.090075 3.839907 1.090076 +v -1.090075 3.839907 -1.090074 +v -1.090075 3.663910 -1.090074 +v 1.090075 3.839907 -1.090074 +v 1.090075 3.663910 -1.090074 +v 1.090075 3.839907 1.090076 +v 1.090075 3.663910 1.090076 +v -1.090075 3.663910 1.090076 +v -0.730563 0.593724 0.730563 +v -0.730563 0.593724 -0.730563 +v -0.730563 0.393723 -0.730563 +v 0.730563 0.593724 -0.730563 +v 0.730563 0.393723 -0.730563 +v 0.730563 0.593724 0.730563 +v 0.730563 0.393723 0.730563 +v -0.730563 0.393723 0.730563 +v -1.000000 3.754139 1.000001 +v -1.000000 3.754139 -0.999999 +v -1.000000 0.589041 -1.000000 +v 1.000000 3.754139 -0.999999 +v 1.000000 0.589041 -1.000000 +v 1.000000 3.754139 1.000001 +v 1.000000 0.589041 1.000000 +v -1.000000 0.589041 1.000000 +v -0.876676 0.407405 0.876676 +v -0.876676 0.407405 -0.876676 +v -0.876676 0.207405 -0.876676 +v 0.876676 0.407405 -0.876676 +v 0.876676 0.207405 -0.876676 +v 0.876676 0.407405 0.876676 +v 0.876676 0.207405 0.876676 +v -0.876676 0.207405 0.876676 +v -1.052011 0.219172 1.052011 +v -1.052011 0.219172 -1.052011 +v -1.052011 0.019172 -1.052011 +v 1.052011 0.219172 -1.052011 +v 1.052011 0.019172 -1.052011 +v 1.052011 0.219172 1.052011 +v 1.052011 0.019172 1.052011 +v -1.052011 0.019172 1.052011 +v -1.004321 4.019471 1.004322 +v -1.004321 4.019471 -1.004320 +v -1.004321 3.798504 -1.004320 +v 1.004321 4.019471 -1.004320 +v 1.004321 3.798504 -1.004320 +v 1.004321 4.019471 1.004322 +v 1.004321 3.798504 1.004322 +v -1.004321 3.798504 1.004322 +v -0.892730 4.221910 0.892731 +v -0.892730 4.221910 -0.892729 +v -0.892730 4.000943 -0.892729 +v 0.892730 4.221910 -0.892729 +v 0.892730 4.000943 -0.892729 +v 0.892730 4.221910 0.892731 +v 0.892730 4.000943 0.892731 +v -0.892730 4.000943 0.892731 +v -0.781138 4.424355 0.781139 +v -0.781138 4.424355 -0.781137 +v -0.781138 4.203388 -0.781137 +v 0.781138 4.424355 -0.781137 +v 0.781138 4.203388 -0.781137 +v 0.781138 4.424355 0.781139 +v 0.781138 4.203388 0.781139 +v -0.781138 4.203388 0.781139 +v -0.669547 4.626801 0.669548 +v -0.669547 4.626801 -0.669546 +v -0.669547 4.405833 -0.669546 +v 0.669547 4.626801 -0.669546 +v 0.669547 4.405833 -0.669546 +v 0.669547 4.626801 0.669548 +v 0.669547 4.405833 0.669548 +v -0.669547 4.405833 0.669548 +v -0.557956 4.829246 0.557957 +v -0.557956 4.829246 -0.557955 +v -0.557956 4.608278 -0.557955 +v 0.557956 4.829246 -0.557955 +v 0.557956 4.608278 -0.557955 +v 0.557956 4.829246 0.557957 +v 0.557956 4.608278 0.557957 +v -0.557956 4.608278 0.557957 +v -0.446365 5.031691 0.446366 +v -0.446365 5.031691 -0.446364 +v -0.446365 4.810724 -0.446364 +v 0.446365 5.031691 -0.446364 +v 0.446365 4.810724 -0.446364 +v 0.446365 5.031691 0.446366 +v 0.446365 4.810724 0.446366 +v -0.446365 4.810724 0.446366 +v -0.334774 5.234136 0.334775 +v -0.334774 5.234136 -0.334773 +v -0.334774 5.013169 -0.334773 +v 0.334774 5.234136 -0.334773 +v 0.334774 5.013169 -0.334773 +v 0.334774 5.234136 0.334775 +v 0.334774 5.013169 0.334775 +v -0.334774 5.013169 0.334775 +v -0.223182 5.436581 0.223183 +v -0.223182 5.436581 -0.223181 +v -0.223182 5.215614 -0.223181 +v 0.223182 5.436581 -0.223181 +v 0.223182 5.215614 -0.223181 +v 0.223182 5.436581 0.223183 +v 0.223182 5.215614 0.223183 +v -0.223182 5.215614 0.223183 +v -0.111591 6.821851 0.111592 +v -0.111591 6.821851 -0.111590 +v -0.111591 5.349908 -0.111590 +v 0.111591 6.821851 -0.111590 +v 0.111591 5.349908 -0.111590 +v 0.111591 6.821851 0.111592 +v 0.111591 5.349908 0.111592 +v -0.111591 5.349908 0.111592 +v 0.061876 1.050235 -0.988298 +v 0.061876 1.050235 -1.154150 +v 0.061876 0.982336 -1.154150 +v 0.129776 1.050235 -1.154150 +v 0.129776 0.982336 -1.154150 +v 0.129776 1.050235 -0.988298 +v 0.129776 0.982336 -0.988298 +v 0.061876 0.982336 -0.988298 +v -0.156886 0.723960 -0.988298 +v -0.156886 0.723960 -1.154150 +v -0.156886 0.656060 -1.154150 +v -0.088986 0.723960 -1.154150 +v -0.088986 0.656060 -1.154150 +v -0.088986 0.723960 -0.988298 +v -0.088986 0.656060 -0.988298 +v -0.156886 0.656060 -0.988298 +v 0.061876 0.723960 -0.988298 +v 0.061876 0.723960 -1.154150 +v 0.061876 0.656060 -1.154150 +v 0.129776 0.723960 -1.154150 +v 0.129776 0.656060 -1.154150 +v 0.129776 0.723960 -0.988298 +v 0.129776 0.656060 -0.988298 +v 0.061876 0.656060 -0.988298 +v -1.156447 1.192633 0.231915 +v -1.620277 1.192633 0.231915 +v -1.620277 0.394576 0.231915 +v -1.620277 1.192633 -0.231915 +v -1.620277 0.394576 -0.231915 +v -1.156447 1.192633 -0.231915 +v -1.156447 0.394576 -0.231915 +v -1.156447 0.394576 0.231915 +v -0.988298 1.050235 0.156886 +v -1.154150 1.050235 0.156886 +v -1.154150 0.982336 0.156886 +v -1.154150 1.050235 0.088986 +v -1.154150 0.982336 0.088986 +v -0.988298 1.050235 0.088986 +v -0.988298 0.982336 0.088986 +v -0.988298 0.982336 0.156886 +v -0.988298 1.050235 -0.061876 +v -1.154150 1.050235 -0.061876 +v -1.154150 0.982336 -0.061876 +v -1.154150 1.050235 -0.129776 +v -1.154150 0.982336 -0.129776 +v -0.988298 1.050235 -0.129776 +v -0.988298 0.982336 -0.129776 +v -0.988298 0.982336 -0.061876 +v -0.988298 0.723960 0.156886 +v -1.154150 0.723960 0.156886 +v -1.154150 0.656060 0.156886 +v -1.154150 0.723960 0.088986 +v -1.154150 0.656060 0.088986 +v -0.988298 0.723960 0.088986 +v -0.988298 0.656060 0.088986 +v -0.988298 0.656060 0.156886 +v -0.988298 0.723960 -0.061876 +v -1.154150 0.723960 -0.061876 +v -1.154150 0.656060 -0.061876 +v -1.154150 0.723960 -0.129776 +v -1.154150 0.656060 -0.129776 +v -0.988298 0.723960 -0.129776 +v -0.988298 0.656060 -0.129776 +v -0.988298 0.656060 -0.061876 +v 0.231915 1.192633 1.156447 +v 0.231915 1.192633 1.620277 +v 0.231915 0.394576 1.620277 +v -0.231915 1.192633 1.620277 +v -0.231915 0.394576 1.620277 +v -0.231915 1.192633 1.156447 +v -0.231915 0.394576 1.156447 +v 0.231915 0.394576 1.156447 +v 0.156886 1.050235 0.988298 +v 0.156886 1.050235 1.154150 +v 0.156886 0.982336 0.988298 +v 0.088986 1.050235 1.154150 +v 0.088986 0.982336 1.154150 +v 0.088986 1.050235 0.988298 +v 0.156886 0.982336 1.154150 +v -0.061876 1.050235 0.988298 +v -0.061876 1.050235 1.154150 +v -0.061876 0.982336 1.154150 +v -0.129776 1.050235 1.154150 +v -0.129776 0.982336 1.154150 +v -0.129776 1.050235 0.988298 +v -0.129776 0.982336 0.988298 +v -0.061876 0.982336 0.988298 +v 0.156886 0.723960 0.988298 +v 0.156886 0.723960 1.154150 +v 0.156886 0.656060 1.154150 +v 0.088986 0.723960 1.154150 +v 0.088986 0.656060 1.154150 +v 0.088986 0.723960 0.988298 +v 0.088986 0.656060 0.988298 +v 0.156886 0.656060 0.988298 +v -0.061876 0.723960 0.988298 +v -0.061876 0.723960 1.154150 +v -0.061876 0.656060 1.154150 +v -0.129776 0.723960 1.154150 +v -0.129776 0.656060 1.154150 +v -0.129776 0.723960 0.988298 +v -0.129776 0.656060 0.988298 +v -0.061876 0.656060 0.988298 +v 1.156447 1.192633 -0.231915 +v 1.620277 1.192633 -0.231915 +v 1.620277 0.394576 -0.231915 +v 1.620277 1.192633 0.231915 +v 1.620277 0.394576 0.231915 +v 1.156447 1.192633 0.231915 +v 1.156447 0.394576 0.231915 +v 1.156447 0.394576 -0.231915 +v 0.988298 1.050235 -0.156886 +v 1.154150 1.050235 -0.156886 +v 1.154150 0.982336 -0.156886 +v 1.154150 1.050235 -0.088986 +v 1.154150 0.982336 -0.088986 +v 0.988298 1.050235 -0.088986 +v 0.988298 0.982336 -0.088986 +v 0.988298 0.982336 -0.156886 +v 0.988298 1.050235 0.061876 +v 1.154150 1.050235 0.061876 +v 1.154150 0.982336 0.061876 +v 1.154150 1.050235 0.129776 +v 1.154150 0.982336 0.129776 +v 0.988298 1.050235 0.129776 +v 0.988298 0.982336 0.129776 +v 0.988298 0.982336 0.061876 +v 0.988298 0.723960 -0.156886 +v 1.154150 0.723960 -0.156886 +v 1.154150 0.656060 -0.156886 +v 1.154150 0.723960 -0.088986 +v 1.154150 0.656060 -0.088986 +v 0.988298 0.723960 -0.088986 +v 0.988298 0.656060 -0.088986 +v 0.988298 0.656060 -0.156886 +v 0.988298 0.723960 0.061876 +v 1.154150 0.723960 0.061876 +v 1.154150 0.656060 0.061876 +v 1.154150 0.723960 0.129776 +v 1.154150 0.656060 0.129776 +v 0.988298 0.723960 0.129776 +v 0.988298 0.656060 0.129776 +v 0.988298 0.656060 0.061876 +v 0.413706 2.407651 -1.252214 +v 0.587932 2.639503 -0.977566 +v 0.413706 1.695493 -1.252214 +v -0.587928 2.639503 -0.977566 +v -0.587928 1.463642 -0.977566 +v -0.413703 2.407651 -1.252214 +v 0.413706 2.407651 -1.352214 +v 0.587932 1.463642 -0.977566 +v -1.252214 2.407651 -0.413706 +v -0.977566 2.639503 -0.587932 +v -1.252214 1.695493 -0.413706 +v -0.977566 2.639503 0.587928 +v -0.977566 1.463642 0.587928 +v -1.252214 2.407651 0.413703 +v -1.252214 1.695493 0.413703 +v -1.352214 1.695493 0.413703 +v -0.977566 1.463642 -0.587932 +v -0.413706 2.407651 1.252214 +v -0.587932 2.639503 0.977566 +v -0.587932 1.463642 0.977566 +v 0.587929 2.639503 0.977566 +v 0.587929 1.463642 0.977566 +v 0.413703 2.407651 1.252214 +v 0.413703 2.407651 1.252214 +v -0.413706 1.695493 1.252214 +v -0.413706 2.407651 1.252214 +v -0.413706 2.407651 1.352214 +v 0.413703 1.695493 1.252214 +v -0.413706 1.695493 1.252214 +v 0.413703 1.695493 1.252214 +v 0.413703 2.407651 1.352214 +v 0.413703 1.695493 1.352214 +v -0.413706 1.695493 1.352214 +v 1.352214 2.407651 -0.413703 +v 1.352214 2.407651 0.413706 +v 1.352214 1.695493 -0.413703 +v 1.252214 1.695493 -0.413703 +v -0.413703 2.407651 -1.352214 +v -0.413703 1.695493 -1.352214 +v 0.413706 1.695493 -1.352214 +v -0.413703 1.695493 -1.252214 +v -1.352214 2.407651 0.413703 +v -1.352214 2.407651 -0.413706 +v -1.352214 1.695493 -0.413706 +v 0.088986 0.982336 0.988298 +v 0.162447 1.380342 1.551622 +v -0.162447 1.380342 1.551622 +v -0.162447 1.188578 1.551622 +v -0.162447 1.380342 1.226728 +v -0.162447 1.188578 1.226728 +v 0.162447 1.380342 1.226728 +v 0.162447 1.188578 1.226728 +v 0.162447 1.188578 1.551622 +vt 0.721313 0.104784 +vt 0.840814 0.104784 +vt 0.840814 0.117721 +vt 0.762038 0.120654 +vt 0.800089 0.120654 +vt 0.800089 0.148922 +vt 0.721313 0.117721 +vt 0.762038 0.148922 +vt 0.000000 0.000000 +vt 0.382496 0.394239 +vt 0.456036 0.394239 +vt 0.456036 0.467779 +vt 0.331396 0.005303 +vt 0.707998 0.005303 +vt 0.707998 0.381904 +vt 0.382496 0.467779 +vt 0.686915 0.033087 +vt 0.713291 0.033087 +vt 0.713291 0.373180 +vt 0.385521 0.392880 +vt 0.459938 0.392880 +vt 0.459938 0.467297 +vt 0.353448 0.581915 +vt 0.350909 0.581907 +vt 0.350972 0.561397 +vt 0.929476 0.324363 +vt 0.926937 0.324355 +vt 0.927000 0.303845 +vt 0.795878 0.063692 +vt 0.757076 0.063692 +vt 0.757076 0.002364 +vt 0.796459 0.065267 +vt 0.834469 0.065267 +vt 0.834469 0.103276 +vt 0.757032 0.064629 +vt 0.795382 0.064629 +vt 0.795382 0.102979 +vt 0.380586 0.390267 +vt 0.463569 0.390267 +vt 0.463569 0.473251 +vt 0.380089 0.389735 +vt 0.463169 0.389735 +vt 0.463169 0.472814 +vt 0.241772 0.958304 +vt 0.167004 0.958323 +vt 0.166756 0.002239 +vt 0.121813 0.000943 +vt 0.196581 0.000924 +vt 0.196829 0.957008 +vt 0.160155 0.958068 +vt 0.085387 0.958101 +vt 0.084962 0.002017 +vt 0.078361 0.001780 +vt 0.003593 0.001761 +vt 0.003345 0.957845 +vt 0.384788 0.466074 +vt 0.384559 0.391306 +vt 0.459327 0.391077 +vt 0.657101 0.580952 +vt 0.471756 0.581521 +vt 0.471188 0.396177 +vt 0.385665 0.396142 +vt 0.460674 0.396142 +vt 0.460674 0.471151 +vt 0.395649 0.470081 +vt 0.394231 0.470085 +vt 0.394000 0.394539 +vt 0.389340 0.394539 +vt 0.390758 0.394535 +vt 0.390989 0.470081 +vt 0.397747 0.470085 +vt 0.396329 0.470081 +vt 0.396561 0.394535 +vt 0.391670 0.394539 +vt 0.393087 0.394535 +vt 0.393319 0.470081 +vt 0.708816 0.400580 +vt 0.700472 0.400605 +vt 0.700447 0.392262 +vt 0.419454 0.466212 +vt 0.421958 0.466204 +vt 0.421965 0.468708 +vt 0.350909 0.487835 +vt 0.353448 0.487827 +vt 0.353510 0.508337 +vt 0.929476 0.299840 +vt 0.926937 0.299832 +vt 0.927000 0.279321 +vt 0.693800 0.634125 +vt 0.696339 0.634117 +vt 0.696401 0.654628 +vt 0.522632 0.907070 +vt 0.520094 0.907062 +vt 0.520157 0.886551 +vt 0.693800 0.658648 +vt 0.696339 0.658640 +vt 0.696401 0.679151 +vt 0.696339 0.703682 +vt 0.693800 0.703674 +vt 0.693863 0.683164 +vt 0.796459 0.103276 +vt 0.694292 0.879396 +vt 0.691754 0.879388 +vt 0.691817 0.858878 +vt 0.929476 0.360987 +vt 0.926937 0.360979 +vt 0.927000 0.340469 +vt 0.929476 0.430724 +vt 0.926937 0.430716 +vt 0.927000 0.410206 +vt 0.353448 0.557392 +vt 0.350909 0.557384 +vt 0.350972 0.536873 +vt 0.385521 0.467297 +vt 0.353510 0.606430 +vt 0.350972 0.606438 +vt 0.350909 0.585928 +vt 0.380175 0.959380 +vt 0.377636 0.959387 +vt 0.377573 0.938877 +vt 0.353511 0.434767 +vt 0.350972 0.434775 +vt 0.350909 0.414264 +vt 0.766986 0.770375 +vt 0.764448 0.770367 +vt 0.764511 0.749856 +vt 0.855901 0.471486 +vt 0.853363 0.471478 +vt 0.853426 0.450967 +vt 0.386718 0.959388 +vt 0.384180 0.959380 +vt 0.384242 0.938869 +vt 0.927961 0.139835 +vt 0.925422 0.139827 +vt 0.925485 0.119317 +vt 0.522632 0.882546 +vt 0.520094 0.882538 +vt 0.520157 0.862028 +vt 0.350909 0.512358 +vt 0.353448 0.512350 +vt 0.353510 0.532860 +vt 0.331973 0.938877 +vt 0.334511 0.938869 +vt 0.334574 0.959380 +vt 0.350909 0.389741 +vt 0.353448 0.389733 +vt 0.353511 0.410244 +vt 0.350909 0.438788 +vt 0.353448 0.438780 +vt 0.353511 0.459291 +vt 0.694292 0.903920 +vt 0.691754 0.903912 +vt 0.691817 0.883401 +vt 0.522632 0.931593 +vt 0.520094 0.931585 +vt 0.520157 0.911074 +vt 0.522632 0.956116 +vt 0.520094 0.956108 +vt 0.520157 0.935598 +vt 0.929476 0.385510 +vt 0.926937 0.385502 +vt 0.927000 0.364992 +vt 0.928401 0.275309 +vt 0.925863 0.275317 +vt 0.925800 0.254806 +vt 0.927960 0.093452 +vt 0.925422 0.093444 +vt 0.925485 0.072934 +vt 0.353510 0.483814 +vt 0.350972 0.483822 +vt 0.350909 0.463311 +vt 0.766986 0.745851 +vt 0.764448 0.745843 +vt 0.764511 0.725333 +vt 0.331396 0.381904 +vt 0.686915 0.373180 +vt 0.353510 0.561404 +vt 0.929539 0.303852 +vt 0.795878 0.002364 +vt 0.757032 0.102979 +vt 0.380586 0.473251 +vt 0.380089 0.472814 +vt 0.241524 0.002220 +vt 0.122061 0.957027 +vt 0.159730 0.001984 +vt 0.078113 0.957865 +vt 0.459556 0.465845 +vt 0.656532 0.395608 +vt 0.385665 0.471151 +vt 0.395417 0.394535 +vt 0.389572 0.470085 +vt 0.397979 0.394539 +vt 0.391902 0.470085 +vt 0.708790 0.392236 +vt 0.419461 0.468716 +vt 0.350972 0.508345 +vt 0.929539 0.279329 +vt 0.693863 0.654635 +vt 0.522695 0.886559 +vt 0.693863 0.679159 +vt 0.696401 0.683172 +vt 0.694355 0.858886 +vt 0.929539 0.340476 +vt 0.929539 0.410214 +vt 0.353510 0.536881 +vt 0.353448 0.585920 +vt 0.380112 0.938869 +vt 0.353448 0.414257 +vt 0.767049 0.749864 +vt 0.855964 0.450975 +vt 0.386781 0.938877 +vt 0.928023 0.119324 +vt 0.522695 0.862036 +vt 0.350972 0.532868 +vt 0.332036 0.959387 +vt 0.350972 0.410252 +vt 0.350972 0.459298 +vt 0.694355 0.883409 +vt 0.522695 0.911082 +vt 0.522695 0.935605 +vt 0.929539 0.365000 +vt 0.928339 0.254798 +vt 0.928023 0.072942 +vt 0.353448 0.463303 +vt 0.767049 0.725341 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.535700 -0.000000 0.844400 +vn 0.535700 0.000000 -0.844400 +vn 0.645100 -0.764100 0.000000 +vn 0.645100 0.764100 0.000000 +vn 0.844400 0.000000 -0.535700 +vn -0.844400 0.000000 -0.535700 +vn 0.000000 -0.764100 -0.645100 +vn 0.000000 0.764100 -0.645100 +vn -0.535700 0.000000 -0.844400 +vn -0.535700 -0.000000 0.844400 +vn -0.645100 -0.764100 -0.000000 +vn -0.645100 0.764100 0.000000 +vn -0.844400 -0.000000 0.535700 +vn 0.844400 -0.000000 0.535700 +vn 0.000000 -0.764100 0.645100 +vn 0.000000 0.764100 0.645100 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 2/1/2 4/2/2 5/3/2 +f 4/1/3 6/2/3 7/3/3 +f 6/1/4 1/2/4 8/3/4 +f 6/4/5 4/5/5 2/6/5 +f 8/7/1 1/1/1 3/3/1 +f 3/7/2 2/1/2 5/3/2 +f 5/7/3 4/1/3 7/3/3 +f 7/7/4 6/1/4 8/3/4 +f 1/8/5 6/4/5 2/6/5 +usemtl None_uv.png.004 +f 349/1/3 350/2/3 351/3/3 +f 350/1/4 352/2/4 353/3/4 +f 352/1/1 354/2/1 355/3/1 +f 354/1/2 349/2/2 356/3/2 +f 354/4/5 352/5/5 349/8/5 +f 352/5/5 350/6/5 349/8/5 +f 356/7/3 349/1/3 351/3/3 +f 351/7/4 350/1/4 353/3/4 +f 353/7/1 352/1/1 355/3/1 +f 355/7/2 354/1/2 356/3/2 +usemtl None_NONE +f 24/9/6 19/9/6 21/9/6 +f 356/9/6 351/9/6 353/9/6 +f 16/9/6 11/9/6 13/9/6 +f 8/9/6 3/9/6 5/9/6 +f 23/9/6 24/9/6 21/9/6 +f 355/9/6 356/9/6 353/9/6 +f 15/9/6 16/9/6 13/9/6 +f 7/9/6 8/9/6 5/9/6 +usemtl None_uv.png.005 +f 9/1/2 10/2/2 11/3/2 +f 10/1/3 12/2/3 13/3/3 +f 12/1/4 14/2/4 15/3/4 +f 14/1/1 9/2/1 16/3/1 +f 14/4/5 12/5/5 9/8/5 +f 12/5/5 10/6/5 9/8/5 +f 16/7/2 9/1/2 11/3/2 +f 11/7/3 10/1/3 13/3/3 +f 13/7/4 12/1/4 15/3/4 +f 15/7/1 14/1/1 16/3/1 +usemtl None_uv.png +f 17/1/4 18/2/4 19/3/4 +f 18/1/1 20/2/1 21/3/1 +f 20/1/2 22/2/2 23/3/2 +f 22/1/3 17/2/3 24/3/3 +f 22/4/5 20/5/5 18/6/5 +f 25/10/7 26/11/7 27/12/7 +f 26/13/4 28/14/4 29/15/4 +f 28/10/8 30/11/8 29/16/8 +f 25/17/3 31/18/3 32/19/3 +f 31/10/9 27/11/9 29/12/9 +f 30/10/10 28/11/10 25/16/10 +f 33/20/4 34/21/4 35/22/4 +f 34/23/1 36/24/1 37/25/1 +f 36/20/2 38/21/2 39/22/2 +f 38/26/3 33/27/3 40/28/3 +f 40/20/6 35/21/6 37/22/6 +f 38/20/5 36/21/5 34/22/5 +f 41/29/4 42/30/4 43/31/4 +f 42/29/1 44/30/1 45/31/1 +f 44/29/2 46/30/2 47/31/2 +f 46/29/3 41/30/3 48/31/3 +f 48/32/6 43/33/6 45/34/6 +f 46/35/5 44/36/5 42/37/5 +f 49/38/4 50/39/4 51/40/4 +f 50/38/1 52/39/1 53/40/1 +f 52/38/2 54/39/2 55/40/2 +f 54/38/3 49/39/3 56/40/3 +f 56/38/6 51/39/6 53/40/6 +f 54/38/5 52/39/5 50/40/5 +f 57/41/4 58/42/4 59/43/4 +f 58/41/1 60/42/1 61/43/1 +f 60/41/2 62/42/2 63/43/2 +f 62/41/3 57/42/3 64/43/3 +f 64/41/6 59/42/6 61/43/6 +f 62/41/5 60/42/5 58/43/5 +f 65/44/4 66/45/4 67/46/4 +f 66/47/1 68/48/1 69/49/1 +f 68/50/2 70/51/2 71/52/2 +f 70/53/3 65/54/3 72/55/3 +f 72/56/6 67/57/6 69/58/6 +f 70/38/5 68/39/5 66/40/5 +f 73/41/4 74/42/4 75/43/4 +f 74/41/1 76/42/1 77/43/1 +f 76/41/2 78/42/2 79/43/2 +f 78/41/3 73/42/3 80/43/3 +f 80/41/6 75/42/6 77/43/6 +f 78/41/5 76/42/5 74/43/5 +f 81/41/4 82/42/4 83/43/4 +f 82/41/1 84/42/1 85/43/1 +f 84/41/2 86/42/2 87/43/2 +f 86/41/3 81/42/3 88/43/3 +f 88/59/6 83/60/6 85/61/6 +f 86/41/5 84/42/5 82/43/5 +f 89/38/4 90/39/4 91/40/4 +f 90/38/1 92/39/1 93/40/1 +f 92/38/2 94/39/2 95/40/2 +f 94/38/3 89/39/3 96/40/3 +f 96/38/6 91/39/6 93/40/6 +f 94/38/5 92/39/5 90/40/5 +f 97/38/4 98/39/4 99/40/4 +f 98/38/1 100/39/1 101/40/1 +f 100/38/2 102/39/2 103/40/2 +f 102/38/3 97/39/3 104/40/3 +f 104/38/6 99/39/6 101/40/6 +f 102/38/5 100/39/5 98/40/5 +f 105/38/4 106/39/4 107/40/4 +f 106/38/1 108/39/1 109/40/1 +f 108/38/2 110/39/2 111/40/2 +f 110/38/3 105/39/3 112/40/3 +f 112/38/6 107/39/6 109/40/6 +f 110/38/5 108/39/5 106/40/5 +f 113/38/4 114/39/4 115/40/4 +f 114/38/1 116/39/1 117/40/1 +f 116/38/2 118/39/2 119/40/2 +f 118/38/3 113/39/3 120/40/3 +f 120/38/6 115/39/6 117/40/6 +f 118/38/5 116/39/5 114/40/5 +f 121/38/4 122/39/4 123/40/4 +f 122/38/1 124/39/1 125/40/1 +f 124/38/2 126/39/2 127/40/2 +f 126/38/3 121/39/3 128/40/3 +f 128/38/6 123/39/6 125/40/6 +f 126/38/5 124/39/5 122/40/5 +f 129/38/4 130/39/4 131/40/4 +f 130/38/1 132/39/1 133/40/1 +f 132/38/2 134/39/2 135/40/2 +f 134/38/3 129/39/3 136/40/3 +f 136/38/6 131/39/6 133/40/6 +f 134/38/5 132/39/5 130/40/5 +f 137/38/4 138/39/4 139/40/4 +f 138/38/1 140/39/1 141/40/1 +f 140/38/2 142/39/2 143/40/2 +f 142/38/3 137/39/3 144/40/3 +f 144/38/6 139/39/6 141/40/6 +f 142/38/5 140/39/5 138/40/5 +f 145/62/4 146/63/4 147/64/4 +f 146/38/1 148/39/1 149/40/1 +f 148/38/2 150/39/2 151/40/2 +f 150/38/3 145/39/3 152/40/3 +f 152/38/6 147/39/6 149/40/6 +f 150/38/5 148/39/5 146/40/5 +f 153/65/4 154/66/4 155/67/4 +f 154/68/1 156/69/1 157/70/1 +f 156/71/2 158/72/2 159/73/2 +f 158/74/3 153/75/3 160/76/3 +f 160/77/6 155/78/6 157/79/6 +f 158/80/5 156/81/5 154/82/5 +f 161/20/4 162/21/4 163/22/4 +f 162/83/1 164/84/1 165/85/1 +f 164/20/2 166/21/2 167/22/2 +f 166/86/3 161/87/3 168/88/3 +f 168/20/6 163/21/6 165/22/6 +f 166/20/5 164/21/5 162/22/5 +f 169/20/4 170/21/4 171/22/4 +f 170/89/1 172/90/1 173/91/1 +f 172/20/2 174/21/2 175/22/2 +f 174/92/3 169/93/3 176/94/3 +f 176/20/6 171/21/6 173/22/6 +f 174/20/5 172/21/5 170/22/5 +f 177/20/4 178/21/4 179/22/4 +f 178/95/1 180/96/1 181/97/1 +f 180/20/2 182/21/2 183/22/2 +f 182/98/3 177/99/3 184/100/3 +f 184/20/6 179/21/6 181/22/6 +f 182/20/5 180/21/5 178/22/5 +f 185/29/3 186/30/3 187/31/3 +f 186/29/4 188/30/4 189/31/4 +f 188/29/1 190/30/1 191/31/1 +f 190/29/2 185/30/2 192/31/2 +f 192/32/6 187/33/6 191/101/6 +f 190/35/5 188/36/5 186/37/5 +f 193/20/3 194/21/3 195/22/3 +f 194/102/4 196/103/4 197/104/4 +f 196/20/1 198/21/1 199/22/1 +f 198/105/2 193/106/2 200/107/2 +f 200/20/6 195/21/6 197/22/6 +f 198/20/5 196/21/5 194/22/5 +f 201/20/3 202/21/3 203/22/3 +f 202/108/4 204/109/4 205/110/4 +f 204/20/1 206/21/1 207/22/1 +f 206/111/2 201/112/2 208/113/2 +f 208/20/6 203/21/6 207/114/6 +f 206/20/5 204/21/5 202/22/5 +f 209/20/3 210/21/3 211/22/3 +f 210/115/4 212/116/4 213/117/4 +f 212/20/1 214/21/1 215/22/1 +f 214/118/2 209/119/2 216/120/2 +f 216/20/6 211/21/6 213/22/6 +f 214/20/5 212/21/5 210/22/5 +f 217/20/3 218/21/3 219/22/3 +f 218/121/4 220/122/4 221/123/4 +f 220/20/1 222/21/1 223/22/1 +f 222/124/2 217/125/2 224/126/2 +f 224/20/6 219/21/6 221/22/6 +f 222/20/5 220/21/5 218/22/5 +f 225/29/2 226/30/2 227/31/2 +f 226/29/3 228/30/3 229/31/3 +f 228/29/4 230/30/4 231/31/4 +f 230/29/1 225/30/1 232/31/1 +f 232/32/6 227/33/6 231/101/6 +f 230/35/5 228/36/5 226/37/5 +f 233/20/2 234/21/2 235/114/2 +f 234/127/3 236/128/3 237/129/3 +f 236/20/4 238/21/4 237/114/4 +f 238/130/1 233/131/1 235/132/1 +f 235/20/6 239/21/6 237/22/6 +f 238/20/5 236/21/5 234/22/5 +f 240/20/2 241/21/2 242/22/2 +f 241/133/3 243/134/3 244/135/3 +f 243/20/4 245/21/4 246/22/4 +f 245/136/1 240/137/1 247/138/1 +f 247/20/6 242/21/6 246/114/6 +f 245/20/5 243/21/5 241/22/5 +f 248/20/2 249/21/2 250/22/2 +f 249/139/3 251/140/3 252/141/3 +f 251/20/4 253/21/4 254/22/4 +f 253/142/1 248/143/1 255/144/1 +f 255/20/6 250/21/6 252/22/6 +f 253/20/5 251/21/5 249/22/5 +f 256/20/2 257/21/2 258/22/2 +f 257/145/3 259/146/3 260/147/3 +f 259/20/4 261/21/4 262/22/4 +f 261/148/1 256/149/1 263/150/1 +f 263/20/6 258/21/6 262/114/6 +f 261/20/5 259/21/5 257/22/5 +f 264/29/1 265/30/1 266/31/1 +f 265/29/2 267/30/2 268/31/2 +f 267/29/3 269/30/3 270/31/3 +f 269/29/4 264/30/4 271/31/4 +f 271/32/6 266/33/6 268/34/6 +f 269/35/5 267/36/5 265/37/5 +f 272/20/1 273/21/1 274/22/1 +f 273/151/2 275/152/2 276/153/2 +f 275/20/3 277/21/3 278/22/3 +f 277/154/4 272/155/4 279/156/4 +f 279/20/6 274/21/6 276/22/6 +f 277/20/5 275/21/5 273/22/5 +f 280/20/1 281/21/1 282/22/1 +f 281/157/2 283/158/2 284/159/2 +f 283/20/3 285/21/3 286/22/3 +f 285/160/4 280/161/4 287/162/4 +f 287/20/6 282/21/6 284/22/6 +f 285/20/5 283/21/5 281/22/5 +f 288/20/1 289/21/1 290/22/1 +f 289/163/2 291/164/2 292/165/2 +f 291/20/3 293/21/3 294/22/3 +f 293/166/4 288/167/4 295/168/4 +f 295/20/6 290/21/6 292/22/6 +f 293/20/5 291/21/5 289/22/5 +f 296/20/1 297/21/1 298/22/1 +f 297/169/2 299/170/2 300/171/2 +f 299/20/3 301/21/3 302/22/3 +f 301/172/4 296/173/4 303/174/4 +f 303/20/6 298/21/6 300/22/6 +f 301/20/5 299/21/5 297/22/5 +f 304/10/11 305/11/11 306/16/11 +f 305/13/3 307/14/3 308/15/3 +f 307/10/12 309/11/12 308/16/12 +f 309/17/5 304/18/5 310/19/5 +f 306/10/13 311/11/13 308/12/13 +f 309/10/14 307/11/14 305/12/14 +f 312/10/15 313/11/15 314/16/15 +f 313/13/2 315/14/2 316/15/2 +f 315/10/16 317/11/16 318/12/16 +f 314/17/6 318/18/6 319/19/6 +f 314/10/17 320/11/17 316/12/17 +f 317/10/18 315/11/18 313/12/18 +f 321/10/19 322/11/19 323/12/19 +f 322/13/1 324/14/1 325/15/1 +f 324/10/20 326/11/20 325/16/20 +f 326/10/3 321/16/3 327/10/3 +f 328/10/21 323/11/21 325/12/21 +f 326/10/22 324/11/22 322/12/22 +f 327/17/5 329/18/5 330/19/5 +f 321/10/3 328/16/3 329/10/3 +f 328/10/3 331/16/3 332/10/3 +f 331/12/3 326/11/3 333/12/3 +f 334/15/3 330/175/3 335/14/3 +f 332/17/6 333/18/6 336/176/6 +f 329/17/4 332/18/4 336/19/4 +f 333/17/2 327/18/2 334/19/2 +f 337/15/2 338/175/2 339/14/2 +f 31/17/6 340/18/6 32/176/6 +f 340/17/1 30/18/1 337/19/1 +f 30/17/5 25/18/5 338/19/5 +f 341/15/1 310/175/1 342/14/1 +f 304/17/2 306/18/2 343/19/2 +f 306/17/6 344/18/6 343/176/6 +f 344/17/4 309/18/4 341/19/4 +f 345/15/4 346/175/4 347/13/4 +f 318/17/3 317/18/3 319/176/3 +f 317/17/5 312/18/5 345/176/5 +f 312/17/1 314/18/1 346/176/1 +f 24/7/4 17/1/4 19/3/4 +f 19/7/1 18/1/1 21/3/1 +f 21/7/2 20/1/2 23/3/2 +f 23/7/3 22/1/3 24/3/3 +f 17/8/5 22/4/5 18/6/5 +f 31/16/7 25/10/7 27/12/7 +f 27/175/4 26/13/4 29/15/4 +f 305/11/11 311/12/11 306/16/11 +f 338/176/3 25/17/3 32/19/3 +f 340/16/9 31/10/9 29/12/9 +f 326/11/20 331/12/20 325/16/20 +f 40/114/4 33/20/4 35/22/4 +f 35/177/1 34/23/1 37/25/1 +f 37/114/2 36/20/2 39/22/2 +f 39/178/3 38/26/3 40/28/3 +f 39/114/6 40/20/6 37/22/6 +f 33/114/5 38/20/5 34/22/5 +f 48/179/4 41/29/4 43/31/4 +f 43/179/1 42/29/1 45/31/1 +f 45/179/2 44/29/2 47/31/2 +f 47/179/3 46/29/3 48/31/3 +f 47/101/6 48/32/6 45/34/6 +f 41/180/5 46/35/5 42/37/5 +f 56/181/4 49/38/4 51/40/4 +f 51/181/1 50/38/1 53/40/1 +f 53/181/2 52/38/2 55/40/2 +f 55/181/3 54/38/3 56/40/3 +f 55/181/6 56/38/6 53/40/6 +f 49/181/5 54/38/5 50/40/5 +f 64/182/4 57/41/4 59/43/4 +f 59/182/1 58/41/1 61/43/1 +f 61/182/2 60/41/2 63/43/2 +f 63/182/3 62/41/3 64/43/3 +f 63/182/6 64/41/6 61/43/6 +f 57/182/5 62/41/5 58/43/5 +f 72/183/4 65/44/4 67/46/4 +f 67/184/1 66/47/1 69/49/1 +f 69/185/2 68/50/2 71/52/2 +f 71/186/3 70/53/3 72/55/3 +f 71/187/6 72/56/6 69/58/6 +f 65/181/5 70/38/5 66/40/5 +f 80/182/4 73/41/4 75/43/4 +f 75/182/1 74/41/1 77/43/1 +f 77/182/2 76/41/2 79/43/2 +f 79/182/3 78/41/3 80/43/3 +f 79/182/6 80/41/6 77/43/6 +f 73/182/5 78/41/5 74/43/5 +f 88/182/4 81/41/4 83/43/4 +f 83/182/1 82/41/1 85/43/1 +f 85/182/2 84/41/2 87/43/2 +f 87/182/3 86/41/3 88/43/3 +f 87/188/6 88/59/6 85/61/6 +f 81/182/5 86/41/5 82/43/5 +f 96/181/4 89/38/4 91/40/4 +f 91/181/1 90/38/1 93/40/1 +f 93/181/2 92/38/2 95/40/2 +f 95/181/3 94/38/3 96/40/3 +f 95/181/6 96/38/6 93/40/6 +f 89/181/5 94/38/5 90/40/5 +f 104/181/4 97/38/4 99/40/4 +f 99/181/1 98/38/1 101/40/1 +f 101/181/2 100/38/2 103/40/2 +f 103/181/3 102/38/3 104/40/3 +f 103/181/6 104/38/6 101/40/6 +f 97/181/5 102/38/5 98/40/5 +f 112/181/4 105/38/4 107/40/4 +f 107/181/1 106/38/1 109/40/1 +f 109/181/2 108/38/2 111/40/2 +f 111/181/3 110/38/3 112/40/3 +f 111/181/6 112/38/6 109/40/6 +f 105/181/5 110/38/5 106/40/5 +f 120/181/4 113/38/4 115/40/4 +f 115/181/1 114/38/1 117/40/1 +f 117/181/2 116/38/2 119/40/2 +f 119/181/3 118/38/3 120/40/3 +f 119/181/6 120/38/6 117/40/6 +f 113/181/5 118/38/5 114/40/5 +f 128/181/4 121/38/4 123/40/4 +f 123/181/1 122/38/1 125/40/1 +f 125/181/2 124/38/2 127/40/2 +f 127/181/3 126/38/3 128/40/3 +f 127/181/6 128/38/6 125/40/6 +f 121/181/5 126/38/5 122/40/5 +f 136/181/4 129/38/4 131/40/4 +f 131/181/1 130/38/1 133/40/1 +f 133/181/2 132/38/2 135/40/2 +f 135/181/3 134/38/3 136/40/3 +f 135/181/6 136/38/6 133/40/6 +f 129/181/5 134/38/5 130/40/5 +f 144/181/4 137/38/4 139/40/4 +f 139/181/1 138/38/1 141/40/1 +f 141/181/2 140/38/2 143/40/2 +f 143/181/3 142/38/3 144/40/3 +f 143/181/6 144/38/6 141/40/6 +f 137/181/5 142/38/5 138/40/5 +f 152/189/4 145/62/4 147/64/4 +f 147/181/1 146/38/1 149/40/1 +f 149/181/2 148/38/2 151/40/2 +f 151/181/3 150/38/3 152/40/3 +f 151/181/6 152/38/6 149/40/6 +f 145/181/5 150/38/5 146/40/5 +f 160/190/4 153/65/4 155/67/4 +f 155/191/1 154/68/1 157/70/1 +f 157/192/2 156/71/2 159/73/2 +f 159/193/3 158/74/3 160/76/3 +f 159/194/6 160/77/6 157/79/6 +f 153/195/5 158/80/5 154/82/5 +f 168/114/4 161/20/4 163/22/4 +f 163/196/1 162/83/1 165/85/1 +f 165/114/2 164/20/2 167/22/2 +f 167/197/3 166/86/3 168/88/3 +f 167/114/6 168/20/6 165/22/6 +f 161/114/5 166/20/5 162/22/5 +f 176/114/4 169/20/4 171/22/4 +f 171/198/1 170/89/1 173/91/1 +f 173/114/2 172/20/2 175/22/2 +f 175/199/3 174/92/3 176/94/3 +f 175/114/6 176/20/6 173/22/6 +f 169/114/5 174/20/5 170/22/5 +f 184/114/4 177/20/4 179/22/4 +f 179/200/1 178/95/1 181/97/1 +f 181/114/2 180/20/2 183/22/2 +f 183/201/3 182/98/3 184/100/3 +f 183/114/6 184/20/6 181/22/6 +f 177/114/5 182/20/5 178/22/5 +f 192/179/3 185/29/3 187/31/3 +f 187/179/4 186/29/4 189/31/4 +f 189/179/1 188/29/1 191/31/1 +f 191/179/2 190/29/2 192/31/2 +f 330/175/3 336/13/3 335/14/3 +f 185/180/5 190/35/5 186/37/5 +f 200/114/3 193/20/3 195/22/3 +f 195/202/4 194/102/4 197/104/4 +f 197/114/1 196/20/1 199/22/1 +f 199/203/2 198/105/2 200/107/2 +f 199/114/6 200/20/6 197/22/6 +f 193/114/5 198/20/5 194/22/5 +f 208/114/3 201/20/3 203/22/3 +f 203/204/4 202/108/4 205/110/4 +f 205/114/1 204/20/1 207/22/1 +f 207/205/2 206/111/2 208/113/2 +f 201/114/5 206/20/5 202/22/5 +f 216/114/3 209/20/3 211/22/3 +f 211/206/4 210/115/4 213/117/4 +f 213/114/1 212/20/1 215/22/1 +f 215/207/2 214/118/2 216/120/2 +f 215/114/6 216/20/6 213/22/6 +f 209/114/5 214/20/5 210/22/5 +f 224/114/3 217/20/3 219/22/3 +f 219/208/4 218/121/4 221/123/4 +f 221/114/1 220/20/1 223/22/1 +f 223/209/2 222/124/2 224/126/2 +f 223/114/6 224/20/6 221/22/6 +f 217/114/5 222/20/5 218/22/5 +f 232/179/2 225/29/2 227/31/2 +f 227/179/3 226/29/3 229/31/3 +f 229/179/4 228/29/4 231/31/4 +f 231/179/1 230/29/1 232/31/1 +f 187/33/6 189/34/6 191/101/6 +f 225/180/5 230/35/5 226/37/5 +f 239/210/3 234/127/3 237/129/3 +f 312/18/5 346/19/5 345/176/5 +f 348/211/1 238/130/1 235/132/1 +f 348/114/6 235/20/6 237/22/6 +f 233/114/5 238/20/5 234/22/5 +f 247/114/2 240/20/2 242/22/2 +f 242/212/3 241/133/3 244/135/3 +f 244/114/4 243/20/4 246/22/4 +f 246/213/1 245/136/1 247/138/1 +f 203/21/6 205/22/6 207/114/6 +f 240/114/5 245/20/5 241/22/5 +f 255/114/2 248/20/2 250/22/2 +f 250/214/3 249/139/3 252/141/3 +f 252/114/4 251/20/4 254/22/4 +f 254/215/1 253/142/1 255/144/1 +f 254/114/6 255/20/6 252/22/6 +f 248/114/5 253/20/5 249/22/5 +f 263/114/2 256/20/2 258/22/2 +f 258/216/3 257/145/3 260/147/3 +f 260/114/4 259/20/4 262/22/4 +f 262/217/1 261/148/1 263/150/1 +f 333/18/6 335/19/6 336/176/6 +f 256/114/5 261/20/5 257/22/5 +f 271/179/1 264/29/1 266/31/1 +f 266/179/2 265/29/2 268/31/2 +f 268/179/3 267/29/3 270/31/3 +f 270/179/4 269/29/4 271/31/4 +f 270/101/6 271/32/6 268/34/6 +f 264/180/5 269/35/5 265/37/5 +f 279/114/1 272/20/1 274/22/1 +f 274/218/2 273/151/2 276/153/2 +f 276/114/3 275/20/3 278/22/3 +f 278/219/4 277/154/4 279/156/4 +f 278/114/6 279/20/6 276/22/6 +f 272/114/5 277/20/5 273/22/5 +f 287/114/1 280/20/1 282/22/1 +f 282/220/2 281/157/2 284/159/2 +f 284/114/3 283/20/3 286/22/3 +f 286/221/4 285/160/4 287/162/4 +f 286/114/6 287/20/6 284/22/6 +f 280/114/5 285/20/5 281/22/5 +f 295/114/1 288/20/1 290/22/1 +f 290/222/2 289/163/2 292/165/2 +f 292/114/3 291/20/3 294/22/3 +f 294/223/4 293/166/4 295/168/4 +f 294/114/6 295/20/6 292/22/6 +f 288/114/5 293/20/5 289/22/5 +f 303/114/1 296/20/1 298/22/1 +f 298/224/2 297/169/2 300/171/2 +f 300/114/3 299/20/3 302/22/3 +f 302/225/4 301/172/4 303/174/4 +f 302/114/6 303/20/6 300/22/6 +f 296/114/5 301/20/5 297/22/5 +f 28/11/10 26/12/10 25/16/10 +f 311/175/3 305/13/3 308/15/3 +f 30/11/8 340/12/8 29/16/8 +f 341/176/5 309/17/5 310/19/5 +f 344/16/13 306/10/13 308/12/13 +f 304/16/14 309/10/14 305/12/14 +f 234/21/2 239/22/2 235/114/2 +f 320/175/2 313/13/2 316/15/2 +f 316/16/16 315/10/16 318/12/16 +f 347/176/6 314/17/6 319/19/6 +f 318/16/17 314/10/17 316/12/17 +f 312/16/18 317/10/18 313/12/18 +f 328/16/19 321/10/19 323/12/19 +f 323/175/1 322/13/1 325/15/1 +f 310/175/1 343/13/1 342/14/1 +f 321/16/3 329/16/3 327/10/3 +f 331/16/21 328/10/21 325/12/21 +f 321/16/22 326/10/22 322/12/22 +f 334/176/5 327/17/5 330/19/5 +f 328/16/3 332/16/3 329/10/3 +f 331/16/3 333/16/3 332/10/3 +f 326/11/3 327/11/3 333/12/3 +f 344/18/6 342/19/6 343/176/6 +f 330/176/4 329/17/4 336/19/4 +f 335/176/2 333/17/2 334/19/2 +f 227/33/6 229/34/6 231/101/6 +f 258/21/6 260/22/6 262/114/6 +f 339/176/1 340/17/1 337/19/1 +f 337/176/5 30/17/5 338/19/5 +f 338/175/2 32/13/2 339/14/2 +f 310/176/2 304/17/2 343/19/2 +f 242/21/6 244/22/6 246/114/6 +f 342/176/4 344/17/4 341/19/4 +f 319/14/4 345/15/4 347/13/4 +f 340/18/6 339/19/6 32/176/6 +f 314/18/1 347/19/1 346/176/1 +f 317/18/3 345/19/3 319/176/3 +f 313/11/15 320/12/15 314/16/15 +f 238/21/4 348/22/4 237/114/4 +f 309/11/12 344/12/12 308/16/12 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/chamber.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/chamber.obj new file mode 100644 index 00000000..401a1b21 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/chamber.obj @@ -0,0 +1,1792 @@ +# Blender v2.68 (sub 0) OBJ File: 'chamber.blend' +# www.blender.org +mtllib chamber.mtl +o Main_Cylinder +v 0.250387 4.349160 -1.000000 +v 0.265470 0.000793 -1.000000 +v 0.250387 4.349160 1.000000 +v 0.265470 0.000793 1.000000 +v 0.684268 4.350665 0.900969 +v 0.699351 0.002298 0.900969 +v 0.922417 4.351491 0.711051 +v 0.810580 0.002684 0.623490 +v 0.917664 4.351474 0.152303 +v 0.917664 4.351474 -0.152303 +v 0.922416 4.351491 -0.711051 +v 0.810580 0.002684 -0.623490 +v 0.684268 4.350665 -0.900969 +v 0.699351 0.002298 -0.900969 +v 0.000389 4.348293 -1.000000 +v 0.015472 -0.000074 -1.000000 +v 0.000389 4.348293 1.000000 +v 0.015472 -0.000074 1.000000 +v 0.745409 3.668157 -1.000000 +v 0.745409 3.668157 1.000000 +v 0.686636 3.667953 0.900969 +v 0.924785 3.668779 0.711051 +v 0.920032 3.668762 0.152303 +v 0.920032 3.668762 -0.152303 +v 0.924785 3.668779 -0.711051 +v 0.686636 3.667953 -0.900969 +v 0.001143 4.130874 -1.000000 +v 0.001143 4.130874 1.000000 +v 0.535112 0.222934 -1.000000 +v 0.014755 0.206474 -1.000000 +v 0.535112 0.222934 1.000000 +v 0.592642 0.223133 0.900969 +v 0.703871 0.223519 0.623490 +v 0.896966 0.224189 0.222521 +v 0.896966 0.224189 -0.222521 +v 0.703871 0.223519 -0.623490 +v 0.592642 0.223133 -0.900969 +v 0.014755 0.206474 1.000000 +v 0.745409 3.668157 -0.750000 +v 0.535112 0.222934 -0.750000 +v 0.535112 0.222934 0.781250 +v 0.745409 3.668157 0.781250 +v 0.750602 2.171250 -1.000000 +v 0.750602 2.171250 1.000000 +v 0.745409 3.668157 -0.875000 +v 0.535112 0.222934 0.890625 +v 0.745409 3.668157 0.890625 +v 0.535112 0.222934 -0.875000 +v 0.750602 2.171250 -0.750000 +v 0.158761 0.221628 0.015625 +v 0.252755 3.666448 0.015625 +v 0.750602 2.171250 0.781250 +v 0.750602 2.171250 -0.875000 +v 0.257948 2.169541 0.015625 +v 0.750602 2.171250 0.890625 +v 0.235670 4.131742 1.000000 +v 0.669551 4.133246 0.900969 +v 0.249282 0.207341 1.000000 +v 0.683164 0.208846 0.900969 +v 0.158761 0.221628 -0.596875 +v 0.252755 3.666448 -0.596875 +v 0.257948 2.169541 -0.596875 +v 0.158761 0.221628 0.628125 +v 0.252755 3.666448 0.628125 +v 0.257948 2.169541 0.628125 +v 0.519911 0.141585 -1.000000 +v 0.014987 0.139834 -1.000000 +v 0.519911 0.141585 1.000000 +v 0.698866 0.142206 0.900969 +v 0.810095 0.142592 0.623490 +v 1.003191 0.143262 0.222521 +v 1.003191 0.143262 -0.222521 +v 0.810095 0.142592 -0.623490 +v 0.698866 0.142206 -0.900969 +v 0.014986 0.139834 1.000000 +vt 0.091032 0.775249 +vt 0.128525 0.775248 +vt 0.090993 0.787908 +vt 0.075306 0.528199 +vt 0.062682 0.528587 +vt 0.062491 0.473978 +vt 0.287154 0.713953 +vt 0.265718 0.713888 +vt 0.249573 0.634955 +vt 0.644911 0.406675 +vt 0.644872 0.394016 +vt 0.682404 0.406677 +vt 0.062682 0.607512 +vt 0.075306 0.607899 +vt 0.062491 0.662120 +vt 0.637739 0.019222 +vt 0.591570 0.166366 +vt 0.590976 0.056441 +vt 0.551237 0.073742 +vt 0.443824 0.000000 +vt 0.529198 0.019221 +vt 0.445031 0.393459 +vt 0.395873 0.393610 +vt 0.001168 0.382007 +vt 0.394627 0.380800 +vt 0.394666 0.393459 +vt 0.083155 0.456041 +vt 0.179396 0.394666 +vt 0.228077 0.414541 +vt 0.732067 0.393812 +vt 0.780848 0.406269 +vt 0.721580 0.393459 +vt 0.722787 0.000000 +vt 0.771757 0.000150 +vt 0.535631 0.817644 +vt 0.495925 0.723427 +vt 0.518349 0.726470 +vt 0.636618 0.758326 +vt 0.574845 0.758137 +vt 0.636530 0.706904 +vt 0.494861 0.793909 +vt 0.433088 0.794099 +vt 0.494657 0.706714 +vt 0.494773 0.845332 +vt 0.433000 0.845522 +vt 0.000000 0.001207 +vt 0.393459 0.000000 +vt 0.393519 0.019673 +vt 0.082739 0.591483 +vt 0.782016 0.787056 +vt 0.733275 0.787258 +vt 0.781956 0.767384 +vt 0.000060 0.020880 +vt 0.001150 0.375977 +vt 0.637034 0.725884 +vt 0.636618 0.590441 +vt 0.125529 0.767880 +vt 0.226987 0.769626 +vt 0.868536 0.370092 +vt 0.771757 0.339671 +vt 0.903252 0.246465 +vt 0.929713 0.154878 +vt 0.905122 0.154954 +vt 0.904707 0.019819 +vt 0.308774 0.768608 +vt 0.320049 0.766608 +vt 0.319983 0.788125 +vt 0.990865 0.535359 +vt 0.891008 0.528744 +vt 1.000000 0.400225 +vt 0.040425 0.809826 +vt 0.018908 0.809892 +vt 0.018493 0.674757 +vt 0.954304 0.154803 +vt 0.929298 0.019743 +vt 0.954853 0.333585 +vt 0.930261 0.333660 +vt 0.905670 0.333736 +vt 0.636074 0.528745 +vt 0.515578 0.529114 +vt 0.515163 0.393980 +vt 0.636618 0.705975 +vt 0.516121 0.706344 +vt 0.999587 0.712591 +vt 0.922352 0.707530 +vt 0.061942 0.809760 +vt 0.040010 0.674691 +vt 0.062491 0.988541 +vt 0.040973 0.988607 +vt 0.019456 0.988674 +vt 0.395081 0.529484 +vt 0.394666 0.394349 +vt 0.395624 0.706714 +vt 0.782016 0.577456 +vt 0.881873 0.570842 +vt 0.891008 0.705976 +vt 0.813360 0.398671 +vt 0.890595 0.393610 +vt 0.082739 0.412897 +vt 0.075795 0.415848 +vt 0.075825 0.394666 +vt 0.287338 0.768543 +vt 0.309861 0.414114 +vt 0.288426 0.414048 +vt 0.323539 0.394674 +vt 0.287907 0.468636 +vt 0.266471 0.468570 +vt 0.394609 0.374770 +vt 0.679408 0.414045 +vt 0.780866 0.412299 +vt 0.178188 0.788113 +vt 0.226969 0.775656 +vt 0.061906 0.504589 +vt 0.000000 0.394855 +vt 0.061632 0.394666 +vt 0.075115 0.473591 +vt 0.228137 0.634889 +vt 0.249841 0.547402 +vt 0.228406 0.547336 +vt 0.636652 0.373716 +vt 0.590118 0.336210 +vt 0.591386 0.226291 +vt 0.551989 0.319060 +vt 0.530286 0.373715 +vt 0.394666 0.000151 +vt 0.001207 0.394666 +vt 0.772496 0.098677 +vt 0.869460 0.068850 +vt 0.903435 0.186540 +vt 0.780809 0.393610 +vt 0.770550 0.393609 +vt 0.636414 0.845522 +vt 0.075115 0.662507 +vt 0.075271 0.394666 +vt 0.590118 0.240060 +vt 0.062527 0.528587 +vt 0.589849 0.152507 +vt 0.558036 0.797993 +vt 0.535631 0.801174 +vt 0.574757 0.706714 +vt 0.228137 0.394868 +vt 0.000858 0.674625 +vt 0.000458 0.564703 +vt 0.062090 0.564514 +vt 0.772126 0.219174 +vt 0.394666 0.474199 +vt 0.394297 0.594696 +vt 0.515754 0.715070 +vt 0.535582 0.706714 +vt 0.856907 0.393609 +vt 0.903849 0.356390 +vt 0.393927 0.715193 +vt 0.320115 0.745091 +vt 0.904707 0.076621 +vt 0.869535 0.044259 +vt 0.869611 0.019668 +vt 0.574703 0.855389 +vt 0.321190 0.394666 +vt 0.321115 0.419258 +vt 0.321039 0.443849 +vt 0.953890 0.019668 +vt 0.635660 0.393610 +vt 0.061528 0.674625 +vt 0.791151 0.712591 +vt 0.322332 0.788133 +vt 0.075795 0.434078 +vt 0.082709 0.415848 +vt 0.082739 0.437030 +vt 0.226930 0.788315 +vt 0.000274 0.504778 +vt 0.062491 0.674436 +vt 0.900143 0.393610 +usemtl None +f 69/1 68/2 6/3 +f 69/4 6/5 8/6 +f 33/7 70/8 34/9 +f 74/10 14/11 66/12 +f 73/13 12/14 74/15 +f 13/16 10/17 11/18 +f 12/19 2/20 14/21 +f 2/20 4/22 18/23 +f 75/24 67/25 16/26 +f 20/27 3/28 28/29 +f 66/12 2/30 67/31 +f 3/32 1/33 15/34 +f 3/35 20/36 21/37 +f 5/38 21/39 7/40 +f 13/41 26/42 1/43 +f 11/44 25/45 26/42 +f 17/46 15/47 27/48 +f 44/49 20/27 28/29 +f 15/50 1/51 27/52 +f 28/53 27/48 38/54 +f 19/55 43/56 27/52 +f 68/2 31/57 38/58 +f 42/59 64/60 23/61 +f 53/62 43/63 19/64 +f 32/65 46/66 31/67 +f 62/68 49/69 61/70 +f 55/71 52/72 42/73 +f 49/74 53/62 45/75 +f 40/76 48/77 53/62 +f 48/77 29/78 43/63 +f 65/79 54/80 51/81 +f 63/82 50/83 54/80 +f 60/84 40/85 62/68 +f 44/86 55/71 47/87 +f 31/88 46/89 55/71 +f 46/89 41/90 52/72 +f 54/80 62/91 61/92 +f 50/83 60/93 62/91 +f 52/94 65/95 64/96 +f 41/97 63/98 65/95 +f 31/99 68/100 32/101 +f 32/65 69/102 33/7 +f 37/103 74/104 66/105 +f 36/106 73/107 74/104 +f 38/54 30/108 67/25 +f 29/109 66/12 30/110 +f 4/111 68/2 75/112 +f 10/113 25/114 11/115 +f 14/11 2/30 66/12 +f 70/116 69/4 8/6 +f 70/8 71/117 34/9 +f 35/118 73/107 36/106 +f 72/119 73/107 35/118 +f 71/117 72/119 35/118 +f 34/9 71/117 35/118 +f 27/48 30/108 38/54 +f 13/16 1/33 10/17 +f 1/33 3/32 10/17 +f 5/120 7/121 9/122 +f 3/32 5/120 9/122 +f 10/17 3/32 9/122 +f 8/123 6/124 4/22 +f 12/19 4/22 2/20 +f 8/123 4/22 12/19 +f 16/125 2/20 18/23 +f 18/126 75/24 16/26 +f 61/127 39/128 24/129 +f 2/30 16/130 67/31 +f 17/131 3/32 15/34 +f 5/38 3/132 21/39 +f 12/14 14/133 74/15 +f 70/116 8/6 71/134 +f 8/123 12/19 71/135 +f 12/14 73/13 72/136 +f 71/135 12/19 72/137 +f 26/138 19/139 1/140 +f 13/41 11/44 26/42 +f 28/53 17/46 27/48 +f 31/57 44/49 38/58 +f 44/49 28/29 38/58 +f 3/28 17/141 28/29 +f 22/142 23/143 9/144 +f 43/56 29/109 30/110 +f 27/52 43/56 30/110 +f 75/112 68/2 38/58 +f 51/145 61/127 24/129 +f 60/146 50/147 36/106 +f 20/36 47/148 21/37 +f 47/148 42/149 21/37 +f 21/150 42/59 22/151 +f 22/151 42/59 23/61 +f 24/129 23/61 51/145 +f 63/152 41/153 33/7 +f 24/129 39/128 25/154 +f 39/128 45/155 25/154 +f 45/155 19/156 25/154 +f 19/139 26/138 25/157 +f 45/75 53/62 19/64 +f 29/158 48/159 37/103 +f 40/160 60/146 36/106 +f 50/147 63/152 33/7 +f 35/118 36/106 50/147 +f 32/65 41/153 46/66 +f 33/7 41/153 32/65 +f 48/159 40/160 37/103 +f 37/103 40/160 36/106 +f 33/7 34/9 50/147 +f 1/51 19/55 27/52 +f 68/2 4/111 6/3 +f 34/9 35/118 50/147 +f 21/39 22/140 7/40 +f 47/87 55/71 42/73 +f 39/161 49/74 45/75 +f 49/74 40/76 53/62 +f 53/62 48/77 43/63 +f 64/162 65/79 51/81 +f 65/79 63/82 54/80 +f 40/85 49/69 62/68 +f 20/163 44/86 47/87 +f 44/86 31/88 55/71 +f 55/71 46/89 52/72 +f 51/81 54/80 61/92 +f 54/80 50/83 62/91 +f 42/164 52/94 64/96 +f 52/94 41/97 65/95 +f 68/165 69/102 32/65 +f 69/102 70/8 33/7 +f 29/166 37/167 66/168 +f 37/103 36/106 74/104 +f 75/24 38/54 67/25 +f 66/12 67/31 30/110 +f 18/169 4/111 75/112 +f 10/113 24/170 25/114 +f 10/113 23/143 24/170 +f 9/144 23/143 10/113 +f 7/171 22/142 9/144 +f 49/69 39/172 61/70 +f 64/60 51/145 23/61 +l 20 56 +l 21 57 +l 31 58 +l 32 59 +o Shield_Torus +v 1.286668 1.294293 0.013407 +v 1.277310 1.320004 0.013407 +v 1.253614 1.333685 0.013407 +v 1.226668 1.328934 0.013407 +v 1.209081 1.307973 0.013407 +v 1.209081 1.280612 0.013407 +v 1.226668 1.259652 0.013407 +v 1.253614 1.254900 0.013407 +v 1.277310 1.268581 0.013407 +v 1.088046 1.294293 -0.583488 +v 1.080475 1.320004 -0.578117 +v 1.061305 1.333685 -0.564518 +v 1.039505 1.328934 -0.549052 +v 1.025276 1.307973 -0.538958 +v 1.025276 1.280612 -0.538958 +v 1.039505 1.259652 -0.549052 +v 1.061305 1.254900 -0.564518 +v 1.080475 1.268581 -0.578117 +v 0.568046 1.294293 -0.952390 +v 0.565154 1.320004 -0.943699 +v 0.557832 1.333685 -0.921694 +v 0.549505 1.328934 -0.896671 +v 0.544070 1.307973 -0.880338 +v 0.544070 1.280612 -0.880338 +v 0.549505 1.259652 -0.896671 +v 0.557832 1.254900 -0.921694 +v 0.565154 1.268581 -0.943699 +v 0.568046 1.294293 0.979203 +v 0.565154 1.320004 0.970513 +v 0.557832 1.333685 0.948507 +v 0.549505 1.328934 0.923484 +v 0.544070 1.307973 0.907151 +v 0.544070 1.280612 0.907151 +v 0.549505 1.259652 0.923484 +v 0.557832 1.254900 0.948507 +v 0.565154 1.268581 0.970513 +v 1.088045 1.294293 0.610302 +v 1.080475 1.320004 0.604931 +v 1.061304 1.333685 0.591331 +v 1.039505 1.328934 0.575866 +v 1.025276 1.307973 0.565772 +v 1.025276 1.280612 0.565772 +v 1.039505 1.259652 0.575866 +v 1.061304 1.254900 0.591331 +v 1.080475 1.268581 0.604931 +v 0.246668 1.307973 0.907151 +v 0.246668 1.280612 0.907151 +v 0.246668 1.333685 0.948507 +v 0.246668 1.328934 0.923484 +v 0.246668 1.320004 0.970513 +v 0.246668 1.294293 0.979203 +v 0.246668 1.254900 0.948507 +v 0.246668 1.268581 0.970513 +v 0.246668 1.259652 0.923484 +v 0.246668 1.259652 -0.896671 +v 0.246668 1.280612 -0.880338 +v 0.246668 1.333685 -0.921694 +v 0.246668 1.328934 -0.896671 +v 0.246668 1.307973 -0.880338 +v 0.246668 1.320004 -0.943699 +v 0.246668 1.268581 -0.943699 +v 0.246668 1.254900 -0.921694 +v 0.246668 1.294293 -0.952390 +v 1.323580 1.720119 0.013407 +v 1.314222 1.745830 0.013407 +v 1.290526 1.759511 0.013407 +v 1.263580 1.754760 0.013407 +v 1.245992 1.733799 0.013407 +v 1.245992 1.706438 0.013407 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.314222 1.694407 0.013407 +v 1.124958 1.720119 -0.583488 +v 1.117387 1.745830 -0.578117 +v 1.098216 1.759511 -0.564518 +v 1.076417 1.754760 -0.549052 +v 1.062188 1.733799 -0.538958 +v 1.062188 1.706438 -0.538958 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 1.117387 1.694407 -0.578117 +v 0.604958 1.720119 -0.952390 +v 0.602066 1.745830 -0.943699 +v 0.594744 1.759511 -0.921694 +v 0.586417 1.754760 -0.896671 +v 0.580982 1.733799 -0.880338 +v 0.580982 1.706438 -0.880338 +v 0.586417 1.685478 -0.896671 +v 0.594744 1.680727 -0.921694 +v 0.602066 1.694407 -0.943699 +v 0.604958 1.720119 0.979203 +v 0.602066 1.745830 0.970513 +v 0.594744 1.759511 0.948507 +v 0.586417 1.754760 0.923484 +v 0.580982 1.733799 0.907151 +v 0.580982 1.706438 0.907151 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 0.602066 1.694407 0.970513 +v 1.124957 1.720119 0.610302 +v 1.117386 1.745830 0.604931 +v 1.098216 1.759511 0.591331 +v 1.076416 1.754760 0.575866 +v 1.062188 1.733799 0.565772 +v 1.062188 1.706438 0.565772 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.117386 1.694407 0.604931 +v 0.283580 1.733799 0.907151 +v 0.283580 1.706438 0.907151 +v 0.283580 1.759511 0.948507 +v 0.283580 1.754760 0.923484 +v 0.283580 1.745830 0.970513 +v 0.283580 1.720119 0.979203 +v 0.283580 1.680727 0.948507 +v 0.283580 1.694407 0.970513 +v 0.283580 1.685478 0.923484 +v 0.283580 1.685478 -0.896671 +v 0.283580 1.706438 -0.880338 +v 0.283580 1.759511 -0.921694 +v 0.283580 1.754760 -0.896671 +v 0.283580 1.733799 -0.880338 +v 0.283580 1.745830 -0.943699 +v 0.283580 1.694407 -0.943699 +v 0.283580 1.680727 -0.921694 +v 0.283580 1.720119 -0.952390 +v 1.383426 3.359691 0.013407 +v 1.374067 3.385402 0.013407 +v 1.350372 3.399083 0.013407 +v 1.323426 3.394332 0.013407 +v 1.305838 3.373371 0.013407 +v 1.305838 3.346010 0.013407 +v 1.323426 3.325050 0.013407 +v 1.350372 3.320298 0.013407 +v 1.374067 3.333979 0.013407 +v 1.184803 3.359691 -0.583488 +v 1.177232 3.385402 -0.578117 +v 1.158062 3.399083 -0.564518 +v 1.136262 3.394332 -0.549052 +v 1.122033 3.373371 -0.538958 +v 1.122033 3.346010 -0.538958 +v 1.136262 3.325050 -0.549052 +v 1.158062 3.320298 -0.564518 +v 1.177232 3.333979 -0.578117 +v 0.664803 3.359691 -0.952390 +v 0.661912 3.385402 -0.943699 +v 0.654589 3.399083 -0.921694 +v 0.646262 3.394332 -0.896671 +v 0.640828 3.373371 -0.880338 +v 0.640828 3.346010 -0.880338 +v 0.646262 3.325050 -0.896671 +v 0.654589 3.320298 -0.921694 +v 0.661912 3.333979 -0.943699 +v 0.664803 3.359691 0.979203 +v 0.661912 3.385402 0.970513 +v 0.654589 3.399083 0.948507 +v 0.646262 3.394332 0.923484 +v 0.640828 3.373371 0.907151 +v 0.640828 3.346010 0.907151 +v 0.646262 3.325050 0.923484 +v 0.654589 3.320298 0.948507 +v 0.661912 3.333979 0.970513 +v 1.184803 3.359691 0.610302 +v 1.177232 3.385402 0.604931 +v 1.158062 3.399083 0.591331 +v 1.136262 3.394332 0.575866 +v 1.122033 3.373371 0.565772 +v 1.122033 3.346010 0.565772 +v 1.136262 3.325050 0.575866 +v 1.158062 3.320298 0.591331 +v 1.177232 3.333979 0.604931 +v 0.343426 3.373371 0.907151 +v 0.343426 3.346010 0.907151 +v 0.343426 3.399083 0.948507 +v 0.343426 3.394332 0.923484 +v 0.343426 3.385402 0.970513 +v 0.343426 3.359691 0.979203 +v 0.343426 3.320298 0.948507 +v 0.343426 3.333979 0.970513 +v 0.343426 3.325050 0.923484 +v 0.343426 3.325050 -0.896671 +v 0.343426 3.346010 -0.880338 +v 0.343426 3.399083 -0.921694 +v 0.343426 3.394332 -0.896671 +v 0.343426 3.373371 -0.880338 +v 0.343426 3.385402 -0.943699 +v 0.343426 3.333979 -0.943699 +v 0.343426 3.320298 -0.921694 +v 0.343426 3.359691 -0.952390 +v 1.383426 2.928434 0.013407 +v 1.374067 2.954146 0.013407 +v 1.350372 2.967826 0.013407 +v 1.323426 2.963075 0.013407 +v 1.305838 2.942115 0.013407 +v 1.305838 2.914753 0.013407 +v 1.323426 2.893793 0.013407 +v 1.350372 2.889042 0.013407 +v 1.374067 2.902723 0.013407 +v 1.184803 2.928434 -0.583488 +v 1.177232 2.954146 -0.578117 +v 1.158062 2.967826 -0.564518 +v 1.136262 2.963075 -0.549052 +v 1.122033 2.942115 -0.538958 +v 1.122033 2.914753 -0.538958 +v 1.136262 2.893793 -0.549052 +v 1.158062 2.889042 -0.564518 +v 1.177232 2.902723 -0.578117 +v 0.664803 2.928434 -0.952390 +v 0.661912 2.954146 -0.943699 +v 0.654589 2.967826 -0.921694 +v 0.646262 2.963075 -0.896671 +v 0.640828 2.942115 -0.880338 +v 0.640828 2.914753 -0.880338 +v 0.646262 2.893793 -0.896671 +v 0.654589 2.889042 -0.921694 +v 0.661912 2.902723 -0.943699 +v 0.664803 2.928434 0.979203 +v 0.661912 2.954146 0.970513 +v 0.654589 2.967826 0.948507 +v 0.646262 2.963075 0.923484 +v 0.640828 2.942115 0.907151 +v 0.640828 2.914753 0.907151 +v 0.646262 2.893793 0.923484 +v 0.654589 2.889042 0.948507 +v 0.661912 2.902723 0.970513 +v 1.184803 2.928434 0.610302 +v 1.177232 2.954146 0.604931 +v 1.158062 2.967826 0.591331 +v 1.136262 2.963075 0.575866 +v 1.122033 2.942115 0.565772 +v 1.122033 2.914753 0.565772 +v 1.136262 2.893793 0.575866 +v 1.158062 2.889042 0.591331 +v 1.177232 2.902723 0.604931 +v 0.343426 2.942115 0.907151 +v 0.343426 2.914753 0.907151 +v 0.343426 2.967826 0.948507 +v 0.343426 2.963075 0.923484 +v 0.343426 2.954146 0.970513 +v 0.343426 2.928434 0.979203 +v 0.343426 2.889042 0.948507 +v 0.343426 2.902723 0.970513 +v 0.343426 2.893793 0.923484 +v 0.343426 2.893793 -0.896671 +v 0.343426 2.914753 -0.880338 +v 0.343426 2.967826 -0.921694 +v 0.343426 2.963075 -0.896671 +v 0.343426 2.942115 -0.880338 +v 0.343426 2.954146 -0.943699 +v 0.343426 2.902723 -0.943699 +v 0.343426 2.889042 -0.921694 +v 0.343426 2.928434 -0.952390 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 -0.896671 +v 0.594744 1.680727 -0.921694 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 -0.896671 +v 0.594744 1.680727 -0.921694 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 -0.896671 +v 0.594744 1.680727 -0.921694 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.021363 1.299541 -0.549052 +v 1.043163 1.294790 -0.564518 +v 0.531364 1.299541 -0.896671 +v 0.539690 1.294790 -0.921694 +v 1.208527 1.299541 0.013407 +v 1.235473 1.294790 0.013407 +v 1.021363 1.299541 -0.549052 +v 1.043163 1.294790 -0.564518 +v 0.531364 1.299541 0.923484 +v 0.539690 1.294790 0.948507 +v 1.021363 1.299541 0.575866 +v 1.043163 1.294790 0.591331 +v 1.323091 2.938798 0.013407 +v 1.350037 2.934047 0.013407 +v 1.135927 2.938798 -0.549052 +v 1.157727 2.934047 -0.564518 +v 0.645928 2.938798 -0.896671 +v 0.654254 2.934047 -0.921694 +v 0.645928 2.938798 0.923484 +v 0.654254 2.934047 0.948507 +v 1.135927 2.938798 0.575866 +v 1.157727 2.934047 0.591331 +vt 0.898508 0.888505 +vt 0.884475 0.984859 +vt 0.893351 0.887956 +vt 0.590320 0.546505 +vt 0.627822 0.434395 +vt 0.594761 0.546846 +vt 0.631400 0.437313 +vt 0.599941 0.546749 +vt 0.998202 0.886665 +vt 0.980392 0.977008 +vt 0.993560 0.885525 +vt 0.704735 0.728739 +vt 0.705368 0.818525 +vt 0.700136 0.818509 +vt 0.379901 0.181461 +vt 0.344843 0.076391 +vt 0.347886 0.074759 +vt 0.383585 0.181748 +vt 0.352115 0.071853 +vt 0.388795 0.181784 +vt 0.355551 0.069033 +vt 0.989311 0.096284 +vt 0.994241 0.097729 +vt 0.988994 0.193307 +vt 0.989368 0.315225 +vt 0.984094 0.193909 +vt 0.726236 0.365347 +vt 0.727551 0.369852 +vt 0.635600 0.440147 +vt 0.709422 0.817435 +vt 0.709070 0.932319 +vt 0.705022 0.931347 +vt 0.699790 0.931331 +vt 0.695823 0.932278 +vt 0.254489 0.009118 +vt 0.256150 0.004407 +vt 0.257327 0.000000 +vt 0.993927 0.193878 +vt 0.994297 0.314699 +vt 0.472305 0.729730 +vt 0.472275 0.779856 +vt 0.467332 0.778488 +vt 0.787482 0.728723 +vt 0.726614 0.728530 +vt 0.727921 0.724685 +vt 0.787390 0.724875 +vt 0.729538 0.719829 +vt 0.787415 0.720014 +vt 0.730709 0.716234 +vt 0.387862 0.730725 +vt 0.387862 0.777110 +vt 0.382630 0.777078 +vt 0.196547 0.353089 +vt 0.253222 0.352706 +vt 0.196880 0.356513 +vt 0.254591 0.356123 +vt 0.196957 0.361354 +vt 0.256254 0.360953 +vt 0.196741 0.365347 +vt 0.477193 0.728723 +vt 0.477164 0.778398 +vt 0.883509 0.669925 +vt 0.898139 0.768211 +vt 0.892985 0.768744 +vt 0.628056 0.658855 +vt 0.631629 0.656612 +vt 0.635823 0.653578 +vt 0.985099 0.680280 +vt 1.000000 0.773325 +vt 0.995326 0.774218 +vt 0.980692 0.682844 +vt 0.975615 0.682766 +vt 0.344905 0.287003 +vt 0.347949 0.289220 +vt 0.352179 0.292211 +vt 0.257434 0.364936 +vt 0.888124 0.671313 +vt 0.902622 0.768715 +vt 0.990249 0.774141 +vt 0.355617 0.294576 +vt 0.902988 0.887926 +vt 0.989829 0.365347 +vt 0.984464 0.314729 +vt 0.787103 0.365540 +vt 0.787019 0.370042 +vt 0.729178 0.374492 +vt 0.708463 0.979549 +vt 0.704425 0.977729 +vt 0.699194 0.977713 +vt 0.695216 0.979508 +vt 0.196778 0.009508 +vt 0.196852 0.004808 +vt 0.196634 0.000410 +vt 0.994754 0.364370 +vt 0.057762 0.583927 +vt 0.043729 0.680280 +vt 0.052604 0.583377 +vt 0.786867 0.183128 +vt 0.824369 0.071018 +vt 0.791308 0.183469 +vt 0.827947 0.073937 +vt 0.796488 0.183372 +vt 0.925575 0.876309 +vt 0.907764 0.966653 +vt 0.920933 0.875169 +vt 0.936893 0.669941 +vt 0.937525 0.759727 +vt 0.932293 0.759711 +vt 0.576448 0.181461 +vt 0.541390 0.076391 +vt 0.544433 0.074759 +vt 0.000000 0.000000 +vt 0.585342 0.181784 +vt 0.548662 0.071853 +vt 0.552097 0.069033 +vt 0.980949 0.365347 +vt 0.985879 0.366791 +vt 0.980632 0.462369 +vt 0.981006 0.584287 +vt 0.975732 0.462971 +vt 0.922782 0.001970 +vt 0.924098 0.006476 +vt 0.832147 0.076771 +vt 0.941580 0.758637 +vt 0.941227 0.873521 +vt 0.937179 0.872549 +vt 0.931948 0.872533 +vt 0.927980 0.873480 +vt 0.452697 0.004407 +vt 0.453874 0.000000 +vt 0.985565 0.462941 +vt 0.985935 0.583761 +vt 0.685404 0.729730 +vt 0.685375 0.779855 +vt 0.680432 0.778488 +vt 0.984029 0.365347 +vt 0.923161 0.365153 +vt 0.924468 0.361309 +vt 0.983936 0.361498 +vt 0.926085 0.356453 +vt 0.983962 0.356637 +vt 0.927256 0.352857 +vt 0.279971 0.730725 +vt 0.279971 0.777110 +vt 0.274739 0.777078 +vt 0.393094 0.353089 +vt 0.449769 0.352706 +vt 0.393427 0.356513 +vt 0.451138 0.356123 +vt 0.393504 0.361354 +vt 0.452801 0.360953 +vt 0.393288 0.365347 +vt 0.690293 0.728723 +vt 0.690264 0.778398 +vt 0.042763 0.365347 +vt 0.057393 0.463633 +vt 0.052238 0.464166 +vt 0.824603 0.295478 +vt 0.828176 0.293236 +vt 0.832370 0.290201 +vt 0.912472 0.669925 +vt 0.927373 0.762969 +vt 0.922699 0.763863 +vt 0.908065 0.672489 +vt 0.917622 0.763785 +vt 0.541452 0.287003 +vt 0.548726 0.292211 +vt 0.453981 0.364936 +vt 0.047377 0.366735 +vt 0.061875 0.464136 +vt 0.544496 0.289220 +vt 0.552163 0.294576 +vt 0.062241 0.583348 +vt 0.981467 0.634409 +vt 0.976102 0.583791 +vt 0.983650 0.002163 +vt 0.983566 0.006665 +vt 0.925725 0.011115 +vt 0.940620 0.920750 +vt 0.936583 0.918931 +vt 0.931351 0.918915 +vt 0.927373 0.920710 +vt 0.451036 0.009118 +vt 0.393325 0.009508 +vt 0.393399 0.004808 +vt 0.393181 0.000410 +vt 0.986392 0.633432 +vt 0.020022 0.583927 +vt 0.005989 0.680280 +vt 0.014864 0.583378 +vt 0.589641 0.183128 +vt 0.627142 0.071018 +vt 0.594081 0.183469 +vt 0.630720 0.073937 +vt 0.599262 0.183372 +vt 0.022703 0.886665 +vt 0.004893 0.977008 +vt 0.018061 0.885525 +vt 0.870605 0.672304 +vt 0.871238 0.762090 +vt 0.866006 0.762074 +vt 0.183354 0.181461 +vt 0.148296 0.076391 +vt 0.151339 0.074759 +vt 0.492300 0.801289 +vt 0.487254 0.800420 +vt 0.492100 0.729592 +vt 0.192248 0.181784 +vt 0.155568 0.071853 +vt 0.159004 0.069033 +vt 0.029719 0.634409 +vt 0.034649 0.635853 +vt 0.029401 0.731431 +vt 0.029775 0.853349 +vt 0.024501 0.732033 +vt 0.725556 0.001970 +vt 0.726871 0.006476 +vt 0.634920 0.076771 +vt 0.875293 0.761000 +vt 0.874940 0.875884 +vt 0.870892 0.874912 +vt 0.865660 0.874896 +vt 0.861693 0.875843 +vt 0.590320 0.822837 +vt 0.590628 0.728898 +vt 0.664486 0.728723 +vt 0.059603 0.004407 +vt 0.060780 0.000000 +vt 0.034334 0.732003 +vt 0.034705 0.852823 +vt 0.511176 0.729730 +vt 0.511146 0.779856 +vt 0.506203 0.778488 +vt 0.786802 0.365347 +vt 0.725935 0.365153 +vt 0.727241 0.361309 +vt 0.786710 0.361498 +vt 0.728859 0.356453 +vt 0.786735 0.356637 +vt 0.730029 0.352857 +vt 0.285203 0.730725 +vt 0.285203 0.777110 +vt 0.279971 0.777078 +vt 0.000000 0.353089 +vt 0.056675 0.352706 +vt 0.000333 0.356513 +vt 0.058044 0.356123 +vt 0.000410 0.361354 +vt 0.059707 0.360953 +vt 0.000194 0.365347 +vt 0.516064 0.728723 +vt 0.516035 0.778398 +vt 0.005023 0.365347 +vt 0.019653 0.463633 +vt 0.014499 0.464166 +vt 0.627376 0.295478 +vt 0.630949 0.293236 +vt 0.635143 0.290201 +vt 0.009600 0.680280 +vt 0.024501 0.773325 +vt 0.019827 0.774219 +vt 0.005194 0.682844 +vt 0.014750 0.774141 +vt 0.148358 0.287003 +vt 0.116606 0.821436 +vt 0.107515 0.934425 +vt 0.036048 0.928692 +vt 0.155632 0.292211 +vt 0.060887 0.364936 +vt 0.009637 0.366735 +vt 0.024136 0.464136 +vt 0.012984 0.885447 +vt 0.151402 0.289220 +vt 0.107727 0.727626 +vt 0.045139 0.815703 +vt 0.159070 0.294576 +vt 0.024501 0.583348 +vt 0.030237 0.903471 +vt 0.024872 0.852853 +vt 0.786424 0.002163 +vt 0.786340 0.006665 +vt 0.728498 0.011115 +vt 0.874333 0.923114 +vt 0.870296 0.921294 +vt 0.865064 0.921278 +vt 0.861086 0.923073 +vt 0.057942 0.009118 +vt 0.000232 0.009508 +vt 0.000305 0.004808 +vt 0.000087 0.000410 +vt 0.035162 0.902494 +vt 0.971252 0.583927 +vt 0.957220 0.680280 +vt 0.966095 0.583377 +vt 0.393094 0.546505 +vt 0.430595 0.434395 +vt 0.397534 0.546846 +vt 0.434174 0.437313 +vt 0.402715 0.546749 +vt 0.973817 0.886665 +vt 0.956007 0.977008 +vt 0.969175 0.885525 +vt 0.674060 0.728739 +vt 0.674693 0.818525 +vt 0.668829 0.728723 +vt 0.379901 0.546807 +vt 0.344843 0.441738 +vt 0.347886 0.440106 +vt 0.383585 0.547095 +vt 0.352115 0.437200 +vt 0.388795 0.547131 +vt 0.355551 0.434380 +vt 0.029719 0.365347 +vt 0.034648 0.366791 +vt 0.029401 0.462369 +vt 0.029775 0.584287 +vt 0.024501 0.462971 +vt 0.529009 0.365347 +vt 0.530325 0.369852 +vt 0.438373 0.440148 +vt 0.678748 0.817435 +vt 0.678395 0.932319 +vt 0.674347 0.931347 +vt 0.669116 0.931331 +vt 0.669462 0.818509 +vt 0.665148 0.932278 +vt 0.254489 0.374465 +vt 0.256150 0.369754 +vt 0.257327 0.365347 +vt 0.034334 0.462941 +vt 0.034705 0.583761 +vt 0.482166 0.729730 +vt 0.482137 0.779856 +vt 0.477193 0.778488 +vt 0.590255 0.728723 +vt 0.529388 0.728530 +vt 0.530695 0.724685 +vt 0.590163 0.724875 +vt 0.532312 0.719829 +vt 0.590189 0.720014 +vt 0.533482 0.716234 +vt 0.393094 0.730725 +vt 0.393094 0.777110 +vt 0.387862 0.777078 +vt 0.196547 0.718435 +vt 0.253222 0.718052 +vt 0.196880 0.721860 +vt 0.254591 0.721470 +vt 0.196957 0.726701 +vt 0.256254 0.726300 +vt 0.196741 0.730693 +vt 0.487055 0.728723 +vt 0.487025 0.778398 +vt 0.956253 0.365347 +vt 0.970883 0.463633 +vt 0.965729 0.464166 +vt 0.430829 0.658855 +vt 0.434402 0.656612 +vt 0.438596 0.653578 +vt 0.960714 0.680280 +vt 0.975615 0.773325 +vt 0.970941 0.774219 +vt 0.956308 0.682844 +vt 0.965864 0.774141 +vt 0.344905 0.652350 +vt 0.347949 0.654567 +vt 0.352179 0.657557 +vt 0.257434 0.730283 +vt 0.960867 0.366735 +vt 0.975366 0.464136 +vt 0.355617 0.659923 +vt 0.975732 0.583348 +vt 0.030237 0.634409 +vt 0.024872 0.583791 +vt 0.589877 0.365540 +vt 0.589793 0.370042 +vt 0.531952 0.374492 +vt 0.677788 0.979549 +vt 0.673751 0.977729 +vt 0.668519 0.977713 +vt 0.664541 0.979508 +vt 0.196778 0.374855 +vt 0.196852 0.370155 +vt 0.196634 0.365757 +vt 0.035162 0.633432 +vt 0.393456 0.846766 +vt 0.393094 0.728723 +vt 0.466970 0.737083 +vt 0.196547 0.824633 +vt 0.196566 0.730693 +vt 0.270468 0.738826 +vt 0.506203 0.803480 +vt 0.501125 0.802829 +vt 0.506139 0.729375 +vt 0.779832 0.846165 +vt 0.787547 0.942066 +vt 0.709422 0.844953 +vt 0.695104 0.730507 +vt 0.695216 0.844664 +vt 0.690408 0.846019 +vt 0.946272 0.459824 +vt 0.878815 0.369433 +vt 0.881918 0.365347 +vt 0.878487 0.665860 +vt 0.946147 0.573049 +vt 0.881581 0.669925 +vt 0.951102 0.574562 +vt 0.787547 0.460132 +vt 0.803692 0.369476 +vt 0.861587 0.463251 +vt 0.274739 0.801113 +vt 0.270552 0.802413 +vt 0.270468 0.731993 +vt 0.804447 0.666240 +vt 0.787836 0.573486 +vt 0.861875 0.576605 +vt 0.787331 0.729935 +vt 0.716921 0.728723 +vt 0.803834 0.365347 +vt 0.877732 0.372594 +vt 0.496450 0.803098 +vt 0.492300 0.803568 +vt 0.492365 0.729193 +vt 0.590320 0.728723 +vt 0.589968 0.843607 +vt 0.516416 0.737083 +vt 0.191337 0.542688 +vt 0.155638 0.435698 +vt 0.159867 0.432792 +vt 0.062241 0.370057 +vt 0.063902 0.365347 +vt 0.062343 0.717062 +vt 0.155701 0.650159 +vt 0.064006 0.721892 +vt 0.159931 0.653150 +vt 0.500887 0.802577 +vt 0.496817 0.803514 +vt 0.496991 0.729660 +vt 0.590683 0.940879 +vt 0.664179 0.822662 +vt 0.861401 0.669533 +vt 0.862046 0.760959 +vt 0.787547 0.669359 +vt 0.188832 0.842762 +vt 0.196547 0.938663 +vt 0.116606 0.838122 +vt 0.196331 0.726532 +vt 0.124105 0.721892 +vt 0.788191 0.760785 +vt 0.879444 0.983443 +vt 0.976069 0.974247 +vt 0.699503 0.728723 +vt 0.393094 0.181551 +vt 0.988483 0.885447 +vt 0.696175 0.817394 +vt 0.467361 0.728814 +vt 0.787547 0.716415 +vt 0.382630 0.730693 +vt 0.878487 0.671343 +vt 0.984922 0.364400 +vt 0.787055 0.374676 +vt 0.038697 0.678864 +vt 0.903442 0.963892 +vt 0.931661 0.669925 +vt 0.580132 0.181748 +vt 0.589641 0.181551 +vt 0.928333 0.758596 +vt 0.680461 0.728814 +vt 0.984094 0.353038 +vt 0.274739 0.730693 +vt 0.037740 0.366764 +vt 0.902988 0.672411 +vt 0.976560 0.633462 +vt 0.983602 0.011299 +vt 0.000958 0.678864 +vt 0.000571 0.974247 +vt 0.865374 0.672288 +vt 0.187038 0.181748 +vt 0.196547 0.181551 +vt 0.506232 0.728814 +vt 0.786867 0.353038 +vt 0.279971 0.730693 +vt 0.000000 0.366764 +vt 0.000116 0.682766 +vt 0.036260 0.721892 +vt 0.025329 0.902524 +vt 0.786375 0.011299 +vt 0.952188 0.678864 +vt 0.951685 0.974247 +vt 0.964098 0.885447 +vt 0.393094 0.546898 +vt 0.665501 0.817394 +vt 0.477223 0.728814 +vt 0.590320 0.716415 +vt 0.387862 0.730693 +vt 0.951231 0.366764 +vt 0.951231 0.682766 +vt 0.025329 0.633462 +vt 0.589828 0.374676 +vt 0.467332 0.855126 +vt 0.270449 0.832766 +vt 0.501061 0.728723 +vt 0.717137 0.940854 +vt 0.951231 0.458223 +vt 0.274655 0.730693 +vt 0.878487 0.669359 +vt 0.877874 0.368465 +vt 0.496515 0.728723 +vt 0.516064 0.851967 +vt 0.196547 0.542723 +vt 0.664541 0.940705 +vt 0.124321 0.934023 +vt 0.787839 0.875669 +vt 0.915856 0.875091 +usemtl None_chamber2.png +f 76/173 85/174 77/175 +f 77/176 86/177 78/178 +f 78/178 87/179 79/180 +f 79/181 88/182 80/183 +f 80/184 89/185 90/186 +f 81/187 90/188 91/189 +f 82/190 91/189 92/191 +f 83/192 92/191 93/193 +f 76/194 84/195 85/196 +f 85/196 94/197 86/198 +f 86/177 95/199 87/179 +f 87/179 96/200 88/201 +f 88/202 97/203 89/185 +f 89/185 98/204 90/186 +f 90/186 99/205 100/206 +f 91/189 100/207 101/208 +f 92/191 101/208 102/209 +f 93/210 102/211 94/197 +f 126/212 103/213 104/214 +f 125/215 104/216 105/217 +f 123/218 105/217 106/219 +f 124/220 106/219 107/221 +f 121/222 107/223 108/224 +f 122/225 108/226 129/227 +f 129/227 109/228 127/229 +f 127/229 110/230 128/231 +f 128/232 111/233 126/212 +f 103/234 112/235 113/236 +f 104/216 113/237 114/238 +f 105/217 114/238 115/239 +f 106/240 115/241 116/242 +f 107/243 116/242 108/244 +f 108/226 117/245 109/228 +f 109/228 118/246 110/230 +f 110/230 119/247 111/248 +f 111/249 120/250 103/234 +f 112/235 76/173 77/175 +f 113/237 77/176 78/178 +f 114/238 78/178 79/180 +f 115/241 79/181 80/183 +f 116/242 80/183 117/251 +f 117/245 81/187 118/246 +f 118/246 82/190 119/247 +f 119/247 83/192 120/252 +f 120/250 84/253 112/235 +f 94/197 138/254 95/255 +f 95/199 135/256 96/200 +f 96/200 132/257 97/258 +f 97/203 133/259 98/204 +f 98/204 134/260 131/261 +f 99/205 131/261 130/262 +f 100/207 130/263 137/264 +f 101/208 137/264 136/265 +f 102/211 136/266 138/254 +f 139/267 148/268 140/269 +f 140/270 149/271 141/272 +f 141/272 150/273 142/274 +f 142/275 151/276 143/277 +f 143/278 152/279 153/280 +f 144/281 153/282 154/283 +f 172/284 181/284 332/284 +f 146/285 155/286 156/287 +f 139/288 147/289 148/290 +f 148/290 157/291 149/292 +f 149/271 158/293 150/273 +f 150/273 159/294 151/295 +f 151/296 160/297 152/279 +f 152/279 161/298 153/280 +f 153/280 162/299 163/300 +f 155/284 154/284 337/284 +f 155/286 164/301 165/302 +f 156/303 165/304 157/291 +f 189/305 166/306 167/307 +f 188/308 167/309 168/310 +f 186/311 168/310 169/312 +f 187/313 169/312 170/314 +f 184/315 170/316 171/317 +f 185/318 171/319 192/320 +f 192/320 172/321 190/322 +f 190/322 173/323 191/324 +f 191/325 174/326 189/305 +f 166/327 175/328 176/329 +f 167/309 176/330 177/331 +f 168/310 177/331 178/332 +f 169/333 178/334 179/335 +f 170/336 179/335 180/337 +f 171/319 180/338 172/321 +f 145/284 154/284 328/284 +f 173/323 182/339 174/340 +f 174/341 183/342 166/327 +f 175/328 139/267 140/269 +f 176/330 140/270 141/272 +f 177/331 141/272 142/274 +f 178/334 142/275 143/277 +f 179/335 143/277 180/337 +f 180/338 144/281 181/343 +f 154/284 155/284 330/284 +f 182/339 146/285 183/344 +f 183/342 147/345 175/328 +f 157/291 201/346 158/347 +f 158/293 198/348 159/294 +f 159/294 195/349 160/350 +f 160/297 196/351 161/298 +f 161/298 197/352 194/353 +f 162/299 194/353 193/354 +f 163/355 193/356 200/357 +f 164/301 200/357 199/358 +f 165/304 199/359 201/346 +f 202/360 211/361 203/362 +f 203/363 212/364 204/365 +f 204/365 213/366 205/367 +f 205/368 214/369 206/370 +f 206/371 215/372 216/373 +f 207/374 216/375 217/376 +f 226/377 227/378 388/379 +f 209/380 218/381 219/382 +f 202/383 210/384 211/385 +f 211/385 220/386 212/387 +f 212/364 221/388 213/366 +f 213/366 222/389 214/390 +f 214/391 223/392 215/372 +f 215/372 224/393 225/394 +f 216/373 225/394 226/395 +f 218/396 209/397 385/398 +f 218/381 227/399 228/400 +f 219/401 228/402 220/386 +f 252/403 229/404 230/405 +f 251/406 230/407 231/408 +f 249/409 231/408 232/410 +f 250/411 232/410 233/412 +f 247/413 233/414 234/415 +f 248/416 234/417 255/418 +f 255/418 235/419 253/420 +f 253/420 236/421 254/422 +f 254/423 237/424 252/403 +f 229/425 238/426 239/427 +f 230/407 239/428 240/429 +f 231/408 240/429 241/430 +f 232/431 241/432 242/433 +f 233/434 242/433 243/435 +f 234/417 243/436 235/419 +f 244/437 208/438 384/439 +f 236/421 245/440 237/441 +f 237/442 246/443 229/425 +f 238/426 202/360 203/362 +f 239/428 203/363 204/365 +f 240/429 204/365 205/367 +f 241/432 205/368 206/370 +f 242/433 206/370 207/444 +f 243/436 207/374 244/445 +f 235/446 244/437 392/447 +f 245/440 209/380 246/448 +f 246/443 210/449 238/426 +f 220/386 264/450 221/451 +f 221/388 261/452 222/389 +f 222/389 258/453 223/454 +f 223/392 259/455 224/393 +f 224/393 260/456 257/457 +f 225/394 257/457 256/458 +f 226/459 256/460 263/461 +f 227/399 263/461 262/462 +f 228/402 262/463 264/450 +f 265/464 274/465 266/466 +f 266/467 275/468 267/469 +f 267/469 276/470 268/471 +f 268/472 277/473 269/474 +f 269/475 278/476 270/477 +f 270/478 279/479 280/480 +f 271/481 280/480 281/482 +f 272/483 281/482 282/484 +f 265/485 273/486 274/487 +f 274/487 283/488 275/489 +f 275/468 284/490 276/470 +f 276/470 285/491 277/492 +f 277/493 286/494 278/476 +f 278/476 287/495 288/496 +f 279/497 288/496 289/498 +f 280/480 289/499 290/500 +f 281/482 290/500 291/501 +f 282/502 291/503 283/488 +f 315/504 292/505 293/506 +f 314/507 293/508 294/509 +f 312/510 294/509 295/511 +f 313/512 295/511 296/513 +f 310/514 296/515 297/516 +f 311/517 297/518 318/519 +f 318/519 298/520 316/521 +f 316/521 299/522 317/523 +f 317/524 300/525 315/504 +f 292/526 301/527 302/528 +f 293/508 302/529 303/530 +f 294/509 303/530 304/531 +f 295/532 304/533 305/534 +f 296/535 305/534 306/536 +f 297/518 306/537 298/520 +f 298/520 307/538 299/522 +f 299/522 308/539 300/540 +f 300/541 309/542 292/526 +f 301/527 265/464 266/466 +f 302/529 266/467 267/469 +f 303/530 267/469 268/471 +f 304/533 268/472 269/474 +f 305/534 269/474 306/536 +f 306/537 270/478 307/538 +f 307/538 271/481 308/539 +f 308/539 272/483 309/543 +f 309/542 273/544 301/527 +f 283/488 327/545 284/546 +f 284/490 324/547 285/491 +f 285/491 321/548 286/549 +f 286/494 322/550 287/495 +f 287/495 323/551 320/552 +f 288/496 320/552 319/553 +f 289/499 319/554 326/555 +f 290/500 326/555 325/556 +f 291/503 325/557 327/545 +f 331/284 329/284 343/284 +f 163/284 164/284 338/284 +f 335/284 333/284 347/284 +f 173/284 172/284 333/284 +f 181/284 145/284 334/284 +f 146/284 182/284 329/284 +f 182/284 173/284 335/284 +f 155/284 146/284 331/284 +f 336/284 338/284 348/284 +f 345/284 344/284 357/284 +f 342/284 343/284 354/284 +f 346/284 340/284 358/284 +f 164/284 155/284 339/284 +f 328/284 330/284 340/284 +f 332/284 334/284 344/284 +f 329/284 335/284 341/284 +f 334/284 328/284 346/284 +f 330/284 331/284 342/284 +f 154/284 163/284 336/284 +f 333/284 332/284 345/284 +f 359/284 357/284 371/284 +f 348/284 350/284 360/284 +f 357/284 356/284 369/284 +f 354/284 355/284 366/284 +f 347/284 345/284 359/284 +f 338/284 339/284 350/284 +f 343/284 341/284 355/284 +f 339/284 337/284 351/284 +f 340/284 342/284 352/284 +f 337/284 336/284 349/284 +f 344/284 346/284 356/284 +f 341/284 347/284 353/284 +f 363/558 361/559 373/560 +f 367/561 365/562 377/563 +f 362/564 363/565 374/566 +f 371/567 369/568 383/569 +f 350/284 351/284 362/284 +f 355/284 353/284 367/284 +f 351/284 349/284 363/284 +f 352/284 354/284 364/284 +f 349/284 348/284 361/284 +f 356/284 358/284 368/284 +f 353/284 359/284 365/284 +f 358/284 352/284 370/284 +f 372/570 374/571 375/572 +f 376/573 378/574 379/575 +f 380/576 382/577 381/578 +f 382/577 376/573 383/579 +f 364/580 366/581 376/582 +f 361/583 360/584 372/585 +f 368/586 370/587 382/588 +f 365/589 371/567 377/590 +f 370/587 364/580 376/582 +f 366/581 367/591 378/592 +f 369/593 368/594 380/595 +f 360/596 362/597 372/598 +f 384/599 386/600 387/601 +f 386/600 388/602 389/603 +f 390/604 392/605 391/606 +f 392/605 384/599 393/607 +f 236/608 235/609 390/610 +f 227/611 218/396 387/612 +f 208/613 217/614 384/615 +f 245/616 236/617 393/618 +f 209/619 245/616 385/620 +f 217/614 226/395 386/621 +f 85/174 86/622 77/175 +f 86/177 87/179 78/178 +f 87/179 88/201 79/180 +f 88/182 89/623 80/183 +f 81/624 80/184 90/186 +f 82/190 81/187 91/189 +f 83/192 82/190 92/191 +f 84/625 83/192 93/193 +f 84/195 93/210 85/196 +f 94/197 95/255 86/198 +f 95/199 96/200 87/179 +f 96/200 97/258 88/201 +f 97/203 98/204 89/185 +f 80/183 81/626 117/251 +f 91/627 90/186 100/206 +f 92/191 91/189 101/208 +f 93/193 92/191 102/209 +f 85/196 93/210 94/197 +f 125/628 126/212 104/214 +f 123/218 125/215 105/217 +f 124/220 123/218 106/219 +f 121/629 124/220 107/221 +f 122/630 121/222 108/224 +f 108/226 109/228 129/227 +f 109/228 110/230 127/229 +f 110/230 111/248 128/231 +f 111/233 103/213 126/212 +f 104/631 103/234 113/236 +f 105/217 104/216 114/238 +f 106/219 105/217 115/239 +f 107/243 106/240 116/242 +f 117/245 118/246 109/228 +f 118/246 119/247 110/230 +f 119/247 120/252 111/248 +f 120/250 112/235 103/234 +f 113/236 112/235 77/175 +f 114/238 113/237 78/178 +f 115/239 114/238 79/180 +f 116/242 115/241 80/183 +f 278/476 279/497 270/477 +f 81/187 82/190 118/246 +f 82/190 83/192 119/247 +f 83/192 84/625 120/252 +f 84/253 76/173 112/235 +f 138/254 135/632 95/255 +f 135/256 132/257 96/200 +f 132/257 133/633 97/258 +f 133/259 134/260 98/204 +f 99/205 98/204 131/261 +f 100/206 99/205 130/262 +f 101/208 100/207 137/264 +f 102/209 101/208 136/265 +f 94/197 102/211 138/254 +f 148/268 149/634 140/269 +f 149/271 150/273 141/272 +f 150/273 151/295 142/274 +f 151/276 152/635 143/277 +f 144/636 143/278 153/280 +f 145/637 144/281 154/283 +f 181/284 334/284 332/284 +f 147/638 146/285 156/287 +f 147/289 156/303 148/290 +f 157/291 158/347 149/292 +f 158/293 159/294 150/273 +f 159/294 160/350 151/295 +f 160/297 161/298 152/279 +f 116/242 117/251 108/244 +f 154/639 153/280 163/300 +f 154/284 336/284 337/284 +f 156/287 155/286 165/302 +f 148/290 156/303 157/291 +f 188/640 189/305 167/307 +f 186/311 188/308 168/310 +f 187/313 186/311 169/312 +f 184/641 187/313 170/314 +f 185/642 184/315 171/317 +f 171/319 172/321 192/320 +f 172/321 173/323 190/322 +f 173/323 174/340 191/324 +f 174/326 166/306 189/305 +f 167/643 166/327 176/329 +f 168/310 167/309 177/331 +f 169/312 168/310 178/332 +f 170/336 169/333 179/335 +f 171/644 170/336 180/337 +f 180/338 181/343 172/321 +f 154/284 330/284 328/284 +f 182/339 183/344 174/340 +f 183/342 175/328 166/327 +f 176/329 175/328 140/269 +f 177/331 176/330 141/272 +f 178/332 177/331 142/274 +f 179/335 178/334 143/277 +f 98/204 99/205 90/186 +f 144/281 145/637 181/343 +f 155/284 331/284 330/284 +f 146/285 147/638 183/344 +f 147/345 139/267 175/328 +f 201/346 198/645 158/347 +f 198/348 195/349 159/294 +f 195/349 196/646 160/350 +f 196/351 197/352 161/298 +f 162/299 161/298 194/353 +f 163/300 162/299 193/354 +f 164/301 163/355 200/357 +f 165/302 164/301 199/358 +f 157/291 165/304 201/346 +f 211/361 212/647 203/362 +f 212/364 213/366 204/365 +f 213/366 214/390 205/367 +f 214/369 215/648 206/370 +f 207/649 206/371 216/373 +f 208/650 207/374 217/376 +f 227/378 389/524 388/379 +f 210/651 209/380 219/382 +f 210/384 219/401 211/385 +f 220/386 221/451 212/387 +f 221/388 222/389 213/366 +f 222/389 223/454 214/390 +f 223/392 224/393 215/372 +f 216/373 215/372 225/394 +f 217/614 216/373 226/395 +f 387/612 218/396 385/398 +f 219/382 218/381 228/400 +f 211/385 219/401 220/386 +f 251/652 252/403 230/405 +f 249/409 251/406 231/408 +f 250/411 249/409 232/410 +f 247/653 250/411 233/412 +f 248/654 247/413 234/415 +f 234/417 235/419 255/418 +f 235/419 236/421 253/420 +f 236/421 237/441 254/422 +f 237/424 229/404 252/403 +f 230/655 229/425 239/427 +f 231/408 230/407 240/429 +f 232/410 231/408 241/430 +f 233/434 232/431 242/433 +f 234/656 233/434 243/435 +f 243/436 244/445 235/419 +f 392/447 244/437 384/439 +f 245/440 246/448 237/441 +f 246/443 238/426 229/425 +f 239/427 238/426 203/362 +f 240/429 239/428 204/365 +f 241/430 240/429 205/367 +f 242/433 241/432 206/370 +f 243/435 242/433 207/444 +f 207/374 208/650 244/445 +f 390/657 235/446 392/447 +f 209/380 210/651 246/448 +f 210/449 202/360 238/426 +f 264/450 261/658 221/451 +f 261/452 258/453 222/389 +f 258/453 259/659 223/454 +f 259/455 260/456 224/393 +f 225/394 224/393 257/457 +f 226/395 225/394 256/458 +f 227/399 226/459 263/461 +f 228/400 227/399 262/462 +f 220/386 228/402 264/450 +f 274/465 275/660 266/466 +f 275/468 276/470 267/469 +f 276/470 277/492 268/471 +f 277/473 278/661 269/474 +f 269/474 270/662 306/536 +f 271/481 270/478 280/480 +f 272/483 271/481 281/482 +f 273/663 272/483 282/484 +f 273/486 282/502 274/487 +f 283/488 284/546 275/489 +f 284/490 285/491 276/470 +f 285/491 286/549 277/492 +f 286/494 287/495 278/476 +f 279/497 278/476 288/496 +f 280/664 279/497 289/498 +f 281/482 280/480 290/500 +f 282/484 281/482 291/501 +f 274/487 282/502 283/488 +f 314/665 315/504 293/506 +f 312/510 314/507 294/509 +f 313/512 312/510 295/511 +f 310/666 313/512 296/513 +f 311/667 310/514 297/516 +f 297/518 298/520 318/519 +f 298/520 299/522 316/521 +f 299/522 300/540 317/523 +f 300/525 292/505 315/504 +f 293/668 292/526 302/528 +f 294/509 293/508 303/530 +f 295/511 294/509 304/531 +f 296/535 295/532 305/534 +f 297/669 296/535 306/536 +f 306/537 307/538 298/520 +f 307/538 308/539 299/522 +f 308/539 309/543 300/540 +f 309/542 301/527 292/526 +f 302/528 301/527 266/466 +f 303/530 302/529 267/469 +f 304/531 303/530 268/471 +f 305/534 304/533 269/474 +f 161/298 162/299 153/280 +f 270/478 271/481 307/538 +f 271/481 272/483 308/539 +f 272/483 273/663 309/543 +f 273/544 265/464 301/527 +f 327/545 324/670 284/546 +f 324/547 321/548 285/491 +f 321/548 322/671 286/549 +f 322/550 323/551 287/495 +f 288/496 287/495 320/552 +f 289/498 288/496 319/553 +f 290/500 289/499 326/555 +f 291/501 290/500 325/556 +f 283/488 291/503 327/545 +f 329/284 341/284 343/284 +f 164/284 339/284 338/284 +f 333/284 345/284 347/284 +f 172/284 332/284 333/284 +f 145/284 328/284 334/284 +f 182/284 335/284 329/284 +f 173/284 333/284 335/284 +f 146/284 329/284 331/284 +f 338/284 350/284 348/284 +f 344/284 356/284 357/284 +f 343/284 355/284 354/284 +f 340/284 352/284 358/284 +f 155/284 337/284 339/284 +f 330/284 342/284 340/284 +f 334/284 346/284 344/284 +f 335/284 347/284 341/284 +f 328/284 340/284 346/284 +f 331/284 343/284 342/284 +f 163/284 338/284 336/284 +f 332/284 344/284 345/284 +f 357/284 369/284 371/284 +f 350/284 362/284 360/284 +f 356/284 368/284 369/284 +f 355/284 367/284 366/284 +f 345/284 357/284 359/284 +f 339/284 351/284 350/284 +f 341/284 353/284 355/284 +f 337/284 349/284 351/284 +f 342/284 354/284 352/284 +f 336/284 348/284 349/284 +f 346/284 358/284 356/284 +f 347/284 359/284 353/284 +f 375/672 363/558 373/560 +f 379/673 367/561 377/563 +f 363/565 375/674 374/566 +f 369/568 381/675 383/569 +f 351/284 363/284 362/284 +f 353/284 365/284 367/284 +f 349/284 361/284 363/284 +f 354/284 366/284 364/284 +f 348/284 360/284 361/284 +f 358/284 370/284 368/284 +f 359/284 371/284 365/284 +f 352/284 364/284 370/284 +f 373/325 372/570 375/572 +f 377/676 376/573 379/575 +f 382/577 383/579 381/578 +f 376/573 377/676 383/579 +f 366/581 378/592 376/582 +f 373/677 361/583 372/585 +f 380/678 368/586 382/588 +f 371/567 383/569 377/590 +f 382/588 370/587 376/582 +f 367/591 379/679 378/592 +f 381/680 369/593 380/595 +f 362/597 374/681 372/598 +f 385/682 384/599 387/601 +f 387/601 386/600 389/603 +f 392/605 393/607 391/606 +f 384/599 385/682 393/607 +f 391/674 236/608 390/610 +f 389/683 227/611 387/612 +f 217/614 386/621 384/615 +f 236/617 391/684 393/618 +f 245/616 393/618 385/620 +f 226/395 388/685 386/621 +f 143/277 144/686 180/337 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.mtl new file mode 100644 index 00000000..20d97e80 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.mtl @@ -0,0 +1,50 @@ +# Blender MTL File: 'None' +# Material Count: 8 + +newmtl Material.001 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.002 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.004 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.005 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.006 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.007 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.008 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.009 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.obj new file mode 100644 index 00000000..00db6d49 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.obj @@ -0,0 +1,348 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib grapple.mtl +o Grapple +v -0.914415 -0.027964 -0.247289 +v -0.953962 -0.027964 -0.286836 +v -0.692003 -0.027964 -0.548794 +v -0.652457 -0.027964 -0.509247 +v -0.914415 0.027964 -0.247289 +v -0.652457 0.027964 -0.509247 +v -0.692003 0.027964 -0.548794 +v -0.953962 0.027964 -0.286836 +v -0.635469 -0.031115 -0.027889 +v -0.679472 -0.031115 0.016115 +v -0.970949 -0.031115 -0.275363 +v -0.926946 -0.031115 -0.319366 +v -0.635469 0.031115 -0.027889 +v -0.926946 0.031115 -0.319366 +v -0.970949 0.031115 -0.275363 +v -0.679472 0.031115 0.016114 +v -0.255923 -0.032332 -0.032332 +v -0.255923 -0.032332 0.032332 +v -0.684261 -0.032332 0.032332 +v -0.684261 -0.032332 -0.032332 +v -0.255922 0.032332 -0.032332 +v -0.684261 0.032332 -0.032332 +v -0.684261 0.032332 0.032332 +v -0.255923 0.032332 0.032332 +v 0.394779 -0.059349 -0.059349 +v 0.394779 -0.059349 0.059349 +v -0.394779 -0.059349 0.059350 +v -0.394779 -0.059349 -0.059349 +v 0.394779 0.059349 -0.059349 +v -0.394779 0.059349 -0.059349 +v -0.394779 0.059349 0.059349 +v 0.394778 0.059349 0.059349 +v -0.914415 0.228140 0.099427 +v -0.953962 0.262389 0.119200 +v -0.692004 0.489251 0.250180 +v -0.652457 0.455003 0.230406 +v -0.914415 0.200176 0.147862 +v -0.652457 0.427039 0.278841 +v -0.692003 0.461288 0.298615 +v -0.953962 0.234425 0.167636 +v -0.635469 0.039710 -0.013002 +v -0.679472 0.001602 -0.035004 +v -0.970949 0.254029 0.110735 +v -0.926946 0.292137 0.132737 +v -0.635469 0.008595 0.040891 +v -0.926946 0.261022 0.186629 +v -0.970950 0.222914 0.164628 +v -0.679472 -0.029513 0.018889 +v -0.914415 -0.200176 0.147862 +v -0.953962 -0.234425 0.167635 +v -0.692004 -0.461287 0.298615 +v -0.652457 -0.427038 0.278841 +v -0.914415 -0.228140 0.099427 +v -0.652457 -0.455002 0.230406 +v -0.692004 -0.489251 0.250180 +v -0.953962 -0.262389 0.119200 +v -0.635469 -0.008595 0.040891 +v -0.679472 0.029513 0.018889 +v -0.970950 -0.222913 0.164628 +v -0.926946 -0.261021 0.186629 +v -0.635469 -0.039710 -0.013002 +v -0.926946 -0.292136 0.132737 +v -0.970950 -0.254028 0.110735 +v -0.679473 -0.001602 -0.035003 +vt 0.963922 0.024757 +vt 0.963922 0.764305 +vt 0.895453 0.764305 +vt 0.888894 0.785151 +vt 0.966575 0.785150 +vt 0.966575 0.031255 +vt 0.296930 0.671390 +vt 0.296930 0.773939 +vt 0.153041 0.773939 +vt 0.146940 0.003051 +vt 0.146940 0.682460 +vt 0.003051 0.682460 +vt 0.146940 0.783728 +vt 0.003051 0.783728 +vt 0.153041 0.671390 +vt 0.153041 0.003051 +vt 0.296930 0.003051 +vt 0.895453 0.024757 +vt 0.888894 0.031256 +vt 0.003051 0.003051 +vt 0.660141 0.003051 +vt 0.702629 0.016730 +vt 0.702629 0.450073 +vt 0.499943 0.448737 +vt 0.456925 0.461681 +vt 0.456925 0.026590 +vt 0.447557 0.003051 +vt 0.499943 0.013646 +vt 0.404538 0.451086 +vt 0.649876 0.460900 +vt 0.607388 0.447221 +vt 0.660141 0.436394 +vt 0.404538 0.015994 +vt 0.607388 0.013878 +vt 0.102456 0.790184 +vt 0.607289 0.790184 +vt 0.607288 0.857272 +vt 0.629153 0.789830 +vt 0.629153 0.857626 +vt 0.176438 0.857626 +vt 0.776527 0.822200 +vt 0.776527 0.889969 +vt 0.708731 0.889969 +vt 0.031828 0.795543 +vt 0.494236 0.795543 +vt 0.494236 0.863340 +vt 0.070693 0.863728 +vt 0.070693 0.931525 +vt 0.003051 0.931525 +vt 0.717416 0.789342 +vt 0.717416 0.857139 +vt 0.230036 0.857139 +vt 0.102456 0.857272 +vt 0.176438 0.789830 +vt 0.708731 0.822200 +vt 0.031828 0.863340 +vt 0.003051 0.863728 +vt 0.230036 0.789342 +vt 0.355419 0.438142 +vt 0.355418 0.003051 +vt 0.398437 0.015995 +vt 0.558798 0.027556 +vt 0.601286 0.013878 +vt 0.601286 0.447221 +vt 0.346050 0.461681 +vt 0.303032 0.448737 +vt 0.303032 0.013646 +vt 0.506045 0.016730 +vt 0.506045 0.450073 +vt 0.398437 0.451086 +vt 0.558798 0.460900 +vt 0.548533 0.003051 +vt 0.614180 0.270636 +vt 0.614180 0.741766 +vt 0.553241 0.741766 +vt 0.544473 0.283992 +vt 0.610546 0.283992 +vt 0.610546 0.706706 +vt 0.137366 0.976023 +vt 0.081499 0.976023 +vt 0.081499 0.897636 +vt 0.499943 0.467783 +vt 0.499943 0.836366 +vt 0.421556 0.836365 +vt 0.499943 0.891534 +vt 0.421556 0.891534 +vt 0.137366 0.897636 +vt 0.499943 0.897636 +vt 0.499943 0.976023 +vt 0.553241 0.270636 +vt 0.544473 0.706706 +vt 0.421556 0.467783 +vt 0.738186 0.487114 +vt 0.807476 0.464807 +vt 0.807476 0.793790 +vt 0.401102 0.799792 +vt 0.331116 0.798887 +vt 0.331116 0.467783 +vt 0.708731 0.434933 +vt 0.778021 0.412625 +vt 0.617777 0.263736 +vt 0.617777 0.736264 +vt 0.540343 0.736264 +vt 0.303032 0.851308 +vt 0.401102 0.819945 +vt 0.553283 0.320649 +vt 0.553283 0.679351 +vt 0.446717 0.679351 +vt 0.738186 0.816098 +vt 0.401102 0.468688 +vt 0.540343 0.263736 +vt 0.373018 0.872366 +vt 0.446717 0.320649 +vt 0.664688 0.595752 +vt 0.588354 0.595752 +vt 0.588354 0.096063 +vt 0.658742 0.715117 +vt 0.595175 0.715117 +vt 0.595175 0.215428 +vt 0.847616 0.508641 +vt 0.847616 0.584077 +vt 0.836227 0.584077 +vt 0.889014 0.003051 +vt 0.889014 0.502539 +vt 0.813578 0.502539 +vt 0.772072 0.673366 +vt 0.700945 0.673366 +vt 0.700945 0.597929 +vt 0.627193 0.965551 +vt 0.627193 0.467002 +vt 0.702629 0.467002 +vt 0.664688 0.096063 +vt 0.658742 0.215428 +vt 0.836227 0.508640 +vt 0.813578 0.003051 +vt 0.772072 0.597929 +vt 0.702629 0.965551 +vt 0.576031 0.467002 +vt 0.576031 0.798106 +vt 0.506045 0.819164 +vt 0.778021 0.406524 +vt 0.708731 0.384216 +vt 0.708731 0.055233 +vt 0.778021 0.077540 +vt 0.738186 0.003051 +vt 0.604115 0.850527 +vt 0.534129 0.871585 +vt 0.807476 0.025358 +vt 0.807476 0.354342 +vt 0.506045 0.488060 +vn -0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.500000 -0.866000 +vn 0.000000 -0.500000 0.866000 +vn -0.707100 -0.612400 -0.353600 +vn -0.707100 0.612400 0.353600 +vn 0.707100 0.612400 0.353500 +vn 0.707100 -0.612400 -0.353600 +vn -0.707100 -0.612400 -0.353500 +vn -0.707100 0.612400 0.353500 +vn 0.707100 0.612400 0.353600 +vn -0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 0.707100 +vn 0.000000 0.500000 0.866000 +vn -0.000000 -0.500000 -0.866000 +vn -0.707100 0.612400 -0.353600 +vn -0.707100 -0.612400 0.353600 +vn 0.707100 -0.612400 0.353600 +vn 0.707100 0.612400 -0.353600 +vn -0.707100 0.612400 -0.353500 +usemtl Material.001 +f 26/1/1 27/2/1 28/3/1 +f 30/4/2 31/5/2 32/6/2 +f 29/7/3 32/8/3 26/9/3 +f 32/10/4 31/11/4 27/12/4 +f 31/11/5 30/13/5 28/14/5 +f 25/15/6 28/16/6 30/17/6 +f 25/18/1 26/1/1 28/3/1 +f 29/19/2 30/4/2 32/6/2 +f 25/15/3 29/7/3 26/9/3 +f 26/20/4 32/10/4 27/12/4 +f 27/12/5 31/11/5 28/14/5 +f 29/7/6 25/15/6 30/17/6 +usemtl Material.006 +f 33/21/7 34/22/7 35/23/7 +f 38/24/8 39/25/8 40/26/8 +f 33/27/9 37/28/9 40/26/9 +f 40/26/10 39/25/10 35/29/10 +f 35/23/11 39/30/11 38/31/11 +f 33/21/12 36/32/12 38/31/12 +f 36/32/7 33/21/7 35/23/7 +f 37/28/8 38/24/8 40/26/8 +f 34/33/13 33/27/13 40/26/13 +f 34/33/14 40/26/14 35/29/14 +f 36/32/15 35/23/15 38/31/15 +f 37/34/12 33/21/12 38/31/12 +usemtl Material.004 +f 2/35/1 3/36/1 4/37/1 +f 6/38/2 7/39/2 8/40/2 +f 5/41/16 8/42/16 2/43/16 +f 8/44/17 7/45/17 3/46/17 +f 3/47/18 7/48/18 6/49/18 +f 5/50/19 1/51/19 4/52/19 +f 1/53/1 2/35/1 4/37/1 +f 5/54/2 6/38/2 8/40/2 +f 1/55/16 5/41/16 2/43/16 +f 2/56/17 8/44/17 3/46/17 +f 4/57/18 3/47/18 6/49/18 +f 6/58/19 5/50/19 4/52/19 +usemtl Material.008 +f 50/59/20 51/60/20 52/61/20 +f 54/62/21 55/63/21 56/64/21 +f 53/65/22 56/66/22 50/59/22 +f 50/59/23 56/66/23 55/67/23 +f 55/63/24 54/62/24 52/68/24 +f 49/69/25 52/68/25 54/62/25 +f 49/70/20 50/59/20 52/61/20 +f 53/71/21 54/62/21 56/64/21 +f 49/70/22 53/65/22 50/59/22 +f 51/60/23 50/59/23 55/67/23 +f 51/72/24 55/63/24 52/68/24 +f 53/71/25 49/69/25 54/62/25 +usemtl Material.002 +f 18/73/1 19/74/1 20/75/1 +f 22/76/2 23/77/2 24/78/2 +f 21/79/3 24/80/3 18/81/3 +f 24/82/4 23/83/4 19/84/4 +f 23/83/5 22/85/5 20/86/5 +f 17/87/6 20/88/6 22/89/6 +f 17/90/1 18/73/1 20/75/1 +f 21/91/2 22/76/2 24/78/2 +f 17/87/3 21/79/3 18/81/3 +f 18/92/4 24/82/4 19/84/4 +f 19/84/5 23/83/5 20/86/5 +f 21/79/6 17/87/6 22/89/6 +usemtl Material.007 +f 41/93/7 42/94/7 43/95/7 +f 46/96/8 47/97/8 48/98/8 +f 41/93/12 45/99/12 48/100/12 +f 48/101/9 47/102/9 43/103/9 +f 43/104/14 47/97/14 46/105/14 +f 41/106/15 44/107/15 46/108/15 +f 44/109/7 41/93/7 43/95/7 +f 45/110/8 46/96/8 48/98/8 +f 42/94/12 41/93/12 48/100/12 +f 42/111/9 48/101/9 43/103/9 +f 44/112/10 43/104/10 46/105/10 +f 45/113/15 41/106/15 46/108/15 +usemtl Material.005 +f 9/114/1 10/115/1 11/116/1 +f 14/117/2 15/118/2 16/119/2 +f 9/120/19 13/121/19 16/122/19 +f 16/123/16 15/124/16 11/125/16 +f 15/126/17 14/127/17 12/128/17 +f 9/129/18 12/130/18 14/131/18 +f 12/132/1 9/114/1 11/116/1 +f 13/133/2 14/117/2 16/119/2 +f 10/134/19 9/120/19 16/122/19 +f 10/135/16 16/123/16 11/125/16 +f 11/136/17 15/126/17 12/128/17 +f 13/137/18 9/129/18 14/131/18 +usemtl Material.009 +f 58/138/20 59/139/20 60/140/20 +f 62/141/21 63/142/21 64/143/21 +f 61/144/25 64/143/25 58/145/25 +f 64/101/22 63/102/22 59/103/22 +f 63/146/23 62/147/23 60/140/23 +f 61/144/24 57/148/24 60/149/24 +f 57/150/20 58/138/20 60/140/20 +f 61/144/21 62/141/21 64/143/21 +f 57/148/25 61/144/25 58/145/25 +f 58/111/26 64/101/26 59/103/26 +f 59/139/23 63/146/23 60/140/23 +f 62/141/24 61/144/24 60/149/24 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_deco.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_deco.json new file mode 100644 index 00000000..07b1b067 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_deco.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/asteroid_deco_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_1.json new file mode 100644 index 00000000..6302a22b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/asteroid_rock_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_2.json new file mode 100644 index 00000000..9cb7dee8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/asteroid_rock_2_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroids_block.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroids_block.json new file mode 100644 index 00000000..aa2e8b4c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroids_block.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/asteroid_rock_0_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/astro_miner.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/astro_miner.json new file mode 100644 index 00000000..7cc3d75d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/astro_miner.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/atmospheric_valve" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atmospheric_valve.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atmospheric_valve.json new file mode 100644 index 00000000..7cc3d75d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atmospheric_valve.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/atmospheric_valve" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atomic_battery.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atomic_battery.json new file mode 100644 index 00000000..e85362ea --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atomic_battery.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/atomic_battery" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_core.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_core.json new file mode 100644 index 00000000..0b41b7b5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_core.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/beam_core" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_receiver.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_receiver.json new file mode 100644 index 00000000..61f55f0e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_receiver.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/beam_receiver" + }, + "display": { + "thirdperson": { + "rotation": [ 90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, 45, 115 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_reflector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_reflector.json new file mode 100644 index 00000000..f17e7d4e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_reflector.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/beam_reflector" + }, + "display": { + "thirdperson": { + "rotation": [ 90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, 45, 115 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_mars.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_mars.json new file mode 100644 index 00000000..fd436d43 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_venus.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_venus.json new file mode 100644 index 00000000..945da850 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_venus.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_venus_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sludge.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sludge.json new file mode 100644 index 00000000..fa1bb672 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sludge.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/bucket_sludge" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sulphuric_acid.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sulphuric_acid.json new file mode 100644 index 00000000..e5564405 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sulphuric_acid.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/bucket_sulphuric_acid" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2.json new file mode 100644 index 00000000..4380e9c9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_1.json new file mode 100644 index 00000000..b0e67a9c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_2.json new file mode 100644 index 00000000..c2348f3e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_3.json new file mode 100644 index 00000000..5f9a7651 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_4.json new file mode 100644 index 00000000..89714456 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_5.json new file mode 100644 index 00000000..9b010ab7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_6.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_6.json new file mode 100644 index 00000000..c6896d53 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox.json new file mode 100644 index 00000000..b7061107 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_1.json new file mode 100644 index 00000000..061787e2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_2.json new file mode 100644 index 00000000..a34c8a09 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_3.json new file mode 100644 index 00000000..e9f3b649 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_4.json new file mode 100644 index 00000000..a8dc6bcf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_5.json new file mode 100644 index 00000000..7ed5f960 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_6.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_6.json new file mode 100644 index 00000000..4a669458 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/carbon_fragments.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/carbon_fragments.json new file mode 100644 index 00000000..cfa1ba59 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/carbon_fragments.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/carbon_fragments" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cobblestone.json new file mode 100644 index 00000000..0393cd32 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cobblestone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/cobblestone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_desh.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_desh.json new file mode 100644 index 00000000..766b8e42 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_desh.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/compressed_desh" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_titanium.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_titanium.json new file mode 100644 index 00000000..0934868a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_titanium.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/compressed_titanium" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/crashed_probe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/crashed_probe.json new file mode 100644 index 00000000..c2c97bbb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/crashed_probe.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/crashed_probe", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/creeper_egg.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/creeper_egg.json new file mode 100644 index 00000000..6490bc37 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/creeper_egg.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftplanets:block/creeper_egg" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cryogenic_chamber.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cryogenic_chamber.json new file mode 100644 index 00000000..260e85b5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cryogenic_chamber.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/cryo_0", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dense_ice.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dense_ice.json new file mode 100644 index 00000000..6735183c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dense_ice.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dense_ice", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/deshBlock.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/deshBlock.json new file mode 100644 index 00000000..07a30a41 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/deshBlock.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/desh_block_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_axe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_axe.json new file mode 100644 index 00000000..d183b47b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_axe" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_block.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_block.json new file mode 100644 index 00000000..07a30a41 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_block.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/desh_block_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_boots.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_boots.json new file mode 100644 index 00000000..fc41fd3f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_boots.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_chestplate.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_chestplate.json new file mode 100644 index 00000000..7ad8a7ba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_chestplate.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_chestplate" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_helmet.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_helmet.json new file mode 100644 index 00000000..65da914e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_helmet.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_helmet" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_hoe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_hoe.json new file mode 100644 index 00000000..695f5a57 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_hoe" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_leggings.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_leggings.json new file mode 100644 index 00000000..401e6550 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_leggings.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_leggings" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick.json new file mode 100644 index 00000000..02d97632 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_pick" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick_slime.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick_slime.json new file mode 100644 index 00000000..d3cc87a3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick_slime.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_pick_slime" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_spade.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_spade.json new file mode 100644 index 00000000..180f555a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_spade.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_spade" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_stick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_stick.json new file mode 100644 index 00000000..d4ebd3e8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_stick.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_stick" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_sword.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_sword.json new file mode 100644 index 00000000..1cc57e3d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_sword" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick.json new file mode 100644 index 00000000..fd436d43 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_1.json new file mode 100644 index 00000000..945da850 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_venus_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_2.json new file mode 100644 index 00000000..fcb8d210 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_venus_2_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dust_titanium.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dust_titanium.json new file mode 100644 index 00000000..80a47ba9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dust_titanium.json @@ -0,0 +1,7 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "galacticraftplanets:items/dust_titanium" + }, + "display": {} +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/electrolyzer.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/electrolyzer.json new file mode 100644 index 00000000..03672c51 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/electrolyzer.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/electrolyzer_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/engine_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/engine_t2.json new file mode 100644 index 00000000..8fe2ee03 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/engine_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/engine_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/fluid_manip.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/fluid_manip.json new file mode 100644 index 00000000..2d3c1608 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/fluid_manip.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/fluid_manip" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/gas_liquefier.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/gas_liquefier.json new file mode 100644 index 00000000..d9a705b4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/gas_liquefier.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/gas_liquefier_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/geothermal_generator.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/geothermal_generator.json new file mode 100644 index 00000000..5203c89d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/geothermal_generator.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/geothermal_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/grapple.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/grapple.json new file mode 100644 index 00000000..7266fa71 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/grapple.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/grapple" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/heavy_nose_cone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/heavy_nose_cone.json new file mode 100644 index 00000000..f11f4af4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/heavy_nose_cone.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/heavy_nose_cone_joined" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_desh.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_desh.json new file mode 100644 index 00000000..51997564 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_desh.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/ingot_desh" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_lead.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_lead.json new file mode 100644 index 00000000..94930b8b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_lead.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/ingot_lead" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_titanium.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_titanium.json new file mode 100644 index 00000000..8291c3ab --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_titanium.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/ingot_titanium" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/item_basic_asteroids.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/item_basic_asteroids.json new file mode 100644 index 00000000..3d6ad211 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/item_basic_asteroids.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/reinforced_plate_t3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key.json new file mode 100644 index 00000000..1d818640 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key.json @@ -0,0 +1,104 @@ +{ + "textures": { + "key": "galacticraftplanets:items/key_t2" + }, + "elements": [ + { + "from": [ 0.0, 6.0, 7.5 ], + "to": [ 3.0, 9.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "west": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 2.0, 3.0, 3.0 ] } + } + }, + { + "from": [ 3.0, 6.5, 7.5 ], + "to": [ 4.0, 8.5, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "east": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "south": { "texture": "#key", "uv": [ 4.0, 6.0, 5.0, 8.0 ] }, + "west": { "texture": "#key", "uv": [ 9.0, 8.0, 8.0, 6.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] } + } + }, + { + "from": [ 4.0, 7.0, 7.5 ], + "to": [ 15.0, 8.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] }, + "down": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] } + } + }, + { + "from": [ 10.5, 6.0, 7.5 ], + "to": [ 14.5, 7.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] } + } + }, + { + "from": [ 11.5, 5.0, 7.5 ], + "to": [ 14.5, 6.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 1.0, 1.0, 1.0 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 0.75, 0.75, 0.75 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, -90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key_t3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key_t3.json new file mode 100644 index 00000000..9e3b7a84 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key_t3.json @@ -0,0 +1,104 @@ +{ + "textures": { + "key": "galacticraftplanets:items/key_t3" + }, + "elements": [ + { + "from": [ 0.0, 6.0, 7.5 ], + "to": [ 3.0, 9.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "west": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 2.0, 3.0, 3.0 ] } + } + }, + { + "from": [ 3.0, 6.5, 7.5 ], + "to": [ 4.0, 8.5, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "east": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "south": { "texture": "#key", "uv": [ 4.0, 6.0, 5.0, 8.0 ] }, + "west": { "texture": "#key", "uv": [ 9.0, 8.0, 8.0, 6.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] } + } + }, + { + "from": [ 4.0, 7.0, 7.5 ], + "to": [ 15.0, 8.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] }, + "down": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] } + } + }, + { + "from": [ 10.5, 6.0, 7.5 ], + "to": [ 14.5, 7.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] } + } + }, + { + "from": [ 11.5, 5.0, 7.5 ], + "to": [ 14.5, 6.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 1.0, 1.0, 1.0 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 0.75, 0.75, 0.75 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, -90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/laser_turret.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/laser_turret.json new file mode 100644 index 00000000..99712921 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/laser_turret.json @@ -0,0 +1,126 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "galacticraftplanets:blocks/laser", + "particle": "galacticraftplanets:blocks/laser" + }, + "elements": [ + { + "name": "baseCube", + "from": [0, -16, 0], + "to": [16, 0, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [4, 4, 8, 8], "texture": "#0"}, + "east": {"uv": [0, 4, 4, 8], "texture": "#0"}, + "south": {"uv": [12, 4, 16, 8], "texture": "#0"}, + "west": {"uv": [8, 4, 12, 8], "texture": "#0"}, + "up": {"uv": [8, 4, 4, 0], "texture": "#0"}, + "down": {"uv": [12, 0, 8, 4], "texture": "#0"} + } + }, + { + "name": "baseConnector0", + "from": [5, 0, 5], + "to": [11, 4, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [7, 12.5, 8.5, 13.5], "texture": "#0"}, + "east": {"uv": [5.5, 12.5, 7, 13.5], "texture": "#0"}, + "south": {"uv": [10, 12.5, 11.5, 13.5], "texture": "#0"}, + "west": {"uv": [8.5, 12.5, 10, 13.5], "texture": "#0"}, + "up": {"uv": [8.5, 12.5, 7, 11], "texture": "#0"}, + "down": {"uv": [10, 11, 8.5, 12.5], "texture": "#0"} + } + }, + { + "name": "baseConnector1", + "from": [6.5, 4, 6.5], + "to": [9.5, 8, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [0.75, 0.75, 1.5, 1.75], "texture": "#0"}, + "east": {"uv": [0, 0.75, 0.75, 1.75], "texture": "#0"}, + "south": {"uv": [2.25, 0.75, 3, 1.75], "texture": "#0"}, + "west": {"uv": [1.5, 0.75, 2.25, 1.75], "texture": "#0"}, + "up": {"uv": [1.5, 0.75, 0.75, 0], "texture": "#0"}, + "down": {"uv": [2.25, 0, 1.5, 0.75], "texture": "#0"} + } + }, + { + "name": "phalangeAxle", + "from": [6, 8, 3], + "to": [10, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [2.5, 10.5, 3.5, 11.25], "texture": "#0"}, + "east": {"uv": [0, 10.5, 2.5, 11.25], "texture": "#0"}, + "south": {"uv": [6, 10.5, 7, 11.25], "texture": "#0"}, + "west": {"uv": [3.5, 10.5, 6, 11.25], "texture": "#0"}, + "up": {"uv": [3.5, 10.5, 2.5, 8], "texture": "#0"}, + "down": {"uv": [4.5, 8, 3.5, 10.5], "texture": "#0"} + } + }, + { + "name": "turretLeft", + "from": [0, 11, 11], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [7.75, 10.25, 11.25, 11], "texture": "#0"}, + "east": {"uv": [7, 10.25, 7.75, 11], "texture": "#0"}, + "south": {"uv": [12, 10.25, 15.5, 11], "texture": "#0"}, + "west": {"uv": [11.25, 10.25, 12, 11], "texture": "#0"}, + "up": {"uv": [11.25, 10.25, 7.75, 9.5], "texture": "#0"}, + "down": {"uv": [14.75, 9.5, 11.25, 10.25], "texture": "#0"} + } + }, + { + "name": "turretRight", + "from": [0, 11, 2], + "to": [14, 14, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [5.25, 8.75, 8.75, 9.5], "texture": "#0"}, + "east": {"uv": [4.5, 8.75, 5.25, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 8.75, 13, 9.5], "texture": "#0"}, + "west": {"uv": [8.75, 8.75, 9.5, 9.5], "texture": "#0"}, + "up": {"uv": [8.75, 8.75, 5.25, 8], "texture": "#0"}, + "down": {"uv": [12.25, 8, 8.75, 8.75], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0, 4.75, 0], + "scale": [0.42, 0.42, 0.42] + }, + "thirdperson_lefthand": { + "translation": [0, 4.75, 0], + "scale": [0.42, 0.42, 0.42] + }, + "firstperson_righthand": { + "rotation": [0, -100, 0] + }, + "firstperson_lefthand": { + "rotation": [0, 81, 0] + }, + "ground": { + "translation": [0, 5, 0], + "scale": [0.42, 0.42, 0.42] + }, + "gui": { + "rotation": [30, -135, 0], + "translation": [0, 3.5, 0], + "scale": [0.42, 0.42, 0.42] + }, + "head": { + "translation": [0, 16, 0] + }, + "fixed": { + "rotation": [0, -180, 0], + "translation": [0, 4.5, 0], + "scale": [0.42, 0.42, 0.42] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/launch_controller.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/launch_controller.json new file mode 100644 index 00000000..c1ebd108 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/launch_controller.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/launch_controller_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/lead_block.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/lead_block.json new file mode 100644 index 00000000..6c1a2089 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/lead_block.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/lead_block", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_middle.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_middle.json new file mode 100644 index 00000000..6d1440a4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_middle.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/mars_middle_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_brick.json new file mode 100644 index 00000000..e1db2318 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftplanets:block/mars_brick_stairs" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_cobblestone.json new file mode 100644 index 00000000..658df0bc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftplanets:block/mars_cobblestone_stairs" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stone.json new file mode 100644 index 00000000..0ce8f695 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/mars_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_surface.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_surface.json new file mode 100644 index 00000000..044e5106 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_surface.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/mars_surface_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial.json new file mode 100644 index 00000000..80397805 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_1.json new file mode 100644 index 00000000..90695fa6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_2.json new file mode 100644 index 00000000..77edf964 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_3.json new file mode 100644 index 00000000..6b2852c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_4.json new file mode 100644 index 00000000..7ff9e6b4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_5.json new file mode 100644 index 00000000..d0e7fbe8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_6.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_6.json new file mode 100644 index 00000000..f8ad1ec1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_synthesizer.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_synthesizer.json new file mode 100644 index 00000000..f7b7e506 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_synthesizer.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/methane_synthesizer_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base.json new file mode 100644 index 00000000..508215c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/miner_base", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base_full.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base_full.json new file mode 100644 index 00000000..508215c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base_full.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/miner_base", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_aluminum_asteroids.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_aluminum_asteroids.json new file mode 100644 index 00000000..71572a06 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_aluminum_asteroids.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_aluminum_asteroids_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_copper_mars.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_copper_mars.json new file mode 100644 index 00000000..3856544f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_copper_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_copper_mars_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_desh_mars.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_desh_mars.json new file mode 100644 index 00000000..bf89ccd3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_desh_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_desh_mars_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_ilmenite_asteroids.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_ilmenite_asteroids.json new file mode 100644 index 00000000..b7bf50aa --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_ilmenite_asteroids.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_ilmenite_asteroids_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_asteroids.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_asteroids.json new file mode 100644 index 00000000..97fffbac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_asteroids.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_iron_asteroids_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_mars.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_mars.json new file mode 100644 index 00000000..ba61c86f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_iron_mars_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_tin_mars.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_tin_mars.json new file mode 100644 index 00000000..766a557a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_tin_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_tin_mars_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/orion_drive.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/orion_drive.json new file mode 100644 index 00000000..d9ce3cee --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/orion_drive.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/orion_drive" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/radioisotope_core.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/radioisotope_core.json new file mode 100644 index 00000000..630577ab --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/radioisotope_core.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/radioisotope_core" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/raw_desh.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/raw_desh.json new file mode 100644 index 00000000..1bbc28b1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/raw_desh.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/raw_desh" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/reinforced_plate_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/reinforced_plate_t2.json new file mode 100644 index 00000000..14cdcb96 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/reinforced_plate_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/reinforced_plate_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_cargo.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_cargo.json new file mode 100644 index 00000000..cfa1ba59 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_cargo.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/carbon_fragments" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_fins_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_fins_t2.json new file mode 100644 index 00000000..a1091870 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_fins_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/rocket_fins_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t2.json new file mode 100644 index 00000000..00b32573 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t3.json new file mode 100644 index 00000000..00b32573 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_astro_miner.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_astro_miner.json new file mode 100644 index 00000000..bb877646 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_astro_miner.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/schematic_astro_miner" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_cargo.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_cargo.json new file mode 100644 index 00000000..2b44bd57 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_cargo.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/schematic_rocket_cargo" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_t3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_t3.json new file mode 100644 index 00000000..aeb56b4f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_t3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/schematic_rocket_t3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_iron.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_iron.json new file mode 100644 index 00000000..068febb5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_iron.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/shard_iron" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_titanium.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_titanium.json new file mode 100644 index 00000000..1588c3e4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_titanium.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/shard_titanium" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shield_controller.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shield_controller.json new file mode 100644 index 00000000..9e7410b8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shield_controller.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/shield_controller" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_cargo.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_cargo.json new file mode 100644 index 00000000..5a5b7b40 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_cargo.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/slimeling_cargo" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_blue.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_blue.json new file mode 100644 index 00000000..90a8a89f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_blue.json @@ -0,0 +1,25 @@ +{ + "parent":"galacticraftplanets:block/slimeling_egg_blue", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0.00, 4.00, -0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ -180, -45, -180 ], + "translation": [ 0.00, 4.00, 0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_red.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_red.json new file mode 100644 index 00000000..8719abfb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_red.json @@ -0,0 +1,25 @@ +{ + "parent":"galacticraftplanets:block/slimeling_egg_red", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0.00, 4.00, -0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ -180, -45, -180 ], + "translation": [ 0.00, 4.00, 0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_yellow.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_yellow.json new file mode 100644 index 00000000..d94d1bd9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_yellow.json @@ -0,0 +1,25 @@ +{ + "parent":"galacticraftplanets:block/slimeling_egg_yellow", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0.00, 4.00, -0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ -180, -45, -180 ], + "translation": [ 0.00, 4.00, 0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_controller.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_controller.json new file mode 100644 index 00000000..3aef8f00 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_controller.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/solar_array_controller", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_module.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_module.json new file mode 100644 index 00000000..27db9665 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_module.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/solar_array_module", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_dust.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_dust.json new file mode 100644 index 00000000..1361f5c7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_dust.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/solar_dust" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_module_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_module_2.json new file mode 100644 index 00000000..07535d74 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_module_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/solar_module_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/spout.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/spout.json new file mode 100644 index 00000000..2dc83d9c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/spout.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/spout", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed.json new file mode 100644 index 00000000..7bc47eee --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/strange_seed1" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed1.json new file mode 100644 index 00000000..296fefa5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/strange_seed0" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/telepad_short.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/telepad_short.json new file mode 100644 index 00000000..ebc76c92 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/telepad_short.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/telepad_short" + }, + "display": { + "thirdperson": { + "rotation": [ 90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, 45, 115 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/terraformer.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/terraformer.json new file mode 100644 index 00000000..0fc63be2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/terraformer.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/terraformer_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots.json new file mode 100644 index 00000000..00b32573 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots_t2.json new file mode 100644 index 00000000..09f51289 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_boots_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate.json new file mode 100644 index 00000000..3e3d7c5c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_chestplate" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate_t2.json new file mode 100644 index 00000000..2d0e2794 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_chestplate_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth.json new file mode 100644 index 00000000..6fa2e62a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_cloth" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth_t2.json new file mode 100644 index 00000000..0aba44dc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_cloth_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_fabric.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_fabric.json new file mode 100644 index 00000000..7a407d99 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_fabric.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_fabric" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_helm_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_helm_t2.json new file mode 100644 index 00000000..c2b29214 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_helm_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_helm_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings.json new file mode 100644 index 00000000..3c97ccb5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_leggings" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings_t2.json new file mode 100644 index 00000000..9403a37b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_leggings_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_padding.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_padding.json new file mode 100644 index 00000000..eae42971 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_padding.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_helm" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thin_solar_wafer.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thin_solar_wafer.json new file mode 100644 index 00000000..1c5431c0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thin_solar_wafer.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thin_solar_wafer" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_axe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_axe.json new file mode 100644 index 00000000..b02e1880 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_axe" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_block.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_block.json new file mode 100644 index 00000000..24401b53 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_block.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/titanium_block_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_boots.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_boots.json new file mode 100644 index 00000000..db2784cf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_boots.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/titanium_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_chestplate.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_chestplate.json new file mode 100644 index 00000000..b3de064d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_chestplate.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/titanium_chestplate" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_helmet.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_helmet.json new file mode 100644 index 00000000..b9bd54fd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_helmet.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/titanium_helmet" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_hoe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_hoe.json new file mode 100644 index 00000000..a9339aeb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_hoe" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_leggings.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_leggings.json new file mode 100644 index 00000000..d51aef72 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_leggings.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/titanium_leggings" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_pickaxe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_pickaxe.json new file mode 100644 index 00000000..8658e7af --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_pickaxe" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_shovel.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_shovel.json new file mode 100644 index 00000000..5afce82c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_shovel" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_sword.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_sword.json new file mode 100644 index 00000000..595f0dd1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_sword" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t2.json new file mode 100644 index 00000000..3235c6a9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/treasure_t2", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t3.json new file mode 100644 index 00000000..cd072d3f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t3.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/treasure_t3", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_aluminum.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_aluminum.json new file mode 100644 index 00000000..fc1e2dbf --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_aluminum.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_aluminum", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_copper.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_copper.json new file mode 100644 index 00000000..cc994115 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_copper.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_copper", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_galena.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_galena.json new file mode 100644 index 00000000..2e7d8d1e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_galena.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_galena", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_quartz.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_quartz.json new file mode 100644 index 00000000..a05e9827 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_quartz.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_quartz", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_silicon.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_silicon.json new file mode 100644 index 00000000..6b37574d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_silicon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_silicon", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_solar.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_solar.json new file mode 100644 index 00000000..94245b76 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_solar.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_solar", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_tin.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_tin.json new file mode 100644 index 00000000..3817431c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_tin.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_tin", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_0.json new file mode 100644 index 00000000..2dc59a46 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_0.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_0_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_1.json new file mode 100644 index 00000000..8e39746b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_2.json new file mode 100644 index 00000000..2c9270c8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_2_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_3.json new file mode 100644 index 00000000..90927b9d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_3.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_3_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_scorched.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_scorched.json new file mode 100644 index 00000000..4b44ffd2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_scorched.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_scorched", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_0.json new file mode 100644 index 00000000..7e3af3c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_0.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/vine_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_1.json new file mode 100644 index 00000000..7e3af3c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/vine_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_2.json new file mode 100644 index 00000000..7e3af3c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/vine_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/volcanic_pickaxe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/volcanic_pickaxe.json new file mode 100644 index 00000000..b2f12e6a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/volcanic_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/volcanic_pickaxe" + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway.json new file mode 100644 index 00000000..4668e2d2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/walkway_nesw", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_pipe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_pipe.json new file mode 100644 index 00000000..96e5da07 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_pipe.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/walkway_oxygen_neswd", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_wire.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_wire.json new file mode 100644 index 00000000..1682ef0a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_wire.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/walkway_wire_neswd", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_0.json new file mode 100644 index 00000000..9e8a60b7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_0.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/web_torch_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_1.json new file mode 100644 index 00000000..7f44c6c1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/web_torch_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.mtl new file mode 100644 index 00000000..f7a4ec39 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/landing_balloon diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.obj new file mode 100644 index 00000000..bb978f94 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.obj @@ -0,0 +1,6794 @@ +mtllib landing_balloon.mtl +o Sphere +v -1.025688 -2.186153 1.175247 +v -1.325416 -1.969380 1.299398 +v -1.025688 -2.186153 0.882353 +v -1.525688 -1.644957 1.382353 +v -1.325416 -1.969380 0.758202 +v -1.596014 -1.262273 1.411483 +v -1.525688 -1.644957 0.675246 +v -1.525688 -0.879590 1.382353 +v -1.596014 -1.262273 0.646116 +v -1.325416 -0.555167 1.299398 +v -1.525688 -0.879590 0.675246 +v -1.025688 -0.338394 1.175246 +v -1.325416 -0.555167 0.758202 +v -0.818581 -2.186153 0.675246 +v -0.942732 -1.969380 0.375519 +v -1.025688 -1.644957 0.175247 +v -1.054818 -1.262273 0.104920 +v -1.025688 -0.879590 0.175247 +v -1.025688 -0.338394 0.882353 +v -0.942732 -0.555167 0.375518 +v -0.525688 -2.186153 0.675247 +v -0.401536 -1.969380 0.375519 +v -0.318581 -1.644957 0.175247 +v -0.289451 -1.262273 0.104920 +v -0.318581 -0.879590 0.175247 +v -0.818581 -0.338394 0.675246 +v -0.401536 -0.555167 0.375519 +v -0.318581 -2.186153 0.882354 +v -0.018853 -1.969380 0.758202 +v 0.181419 -1.644957 0.675247 +v 0.251745 -1.262274 0.646117 +v 0.181419 -0.879590 0.675247 +v -0.525688 -0.338394 0.675247 +v -0.018853 -0.555167 0.758202 +v -0.318581 -2.186153 1.175247 +v -0.018853 -1.969380 1.299398 +v 0.181419 -1.644957 1.382354 +v 0.251745 -1.262274 1.411484 +v 0.181419 -0.879590 1.382354 +v -0.318581 -0.338394 0.882353 +v -0.018853 -0.555167 1.299398 +v -0.525688 -2.186153 1.382353 +v -0.401537 -1.969380 1.682082 +v -0.318581 -1.644957 1.882354 +v -0.289452 -1.262274 1.952680 +v -0.318581 -0.879590 1.882354 +v -0.318581 -0.338394 1.175247 +v -0.401537 -0.555167 1.682082 +v -0.818581 -2.186153 1.382353 +v -0.942733 -1.969380 1.682081 +v -1.025688 -1.644957 1.882354 +v -1.054818 -1.262274 1.952679 +v -1.025688 -0.879590 1.882354 +v -0.525688 -0.338394 1.382353 +v -0.942733 -0.555167 1.682081 +v -0.672135 -2.262273 1.028800 +v -0.672135 -0.262273 1.028800 +v -0.818581 -0.338394 1.382353 +v -1.025688 -2.186153 0.175246 +v -1.325416 -1.969380 0.299398 +v -1.025688 -2.186153 -0.117647 +v -1.525688 -1.644957 0.382353 +v -1.325416 -1.969380 -0.241798 +v -1.596014 -1.262273 0.411483 +v -1.525688 -1.644957 -0.324754 +v -1.525688 -0.879590 0.382353 +v -1.596014 -1.262273 -0.353884 +v -1.325416 -0.555167 0.299398 +v -1.525688 -0.879590 -0.324754 +v -1.025688 -0.338394 0.175246 +v -1.325416 -0.555167 -0.241798 +v -0.818581 -2.186153 -0.324753 +v -0.942732 -1.969380 -0.624482 +v -1.025688 -1.644957 -0.824754 +v -1.054818 -1.262273 -0.895080 +v -1.025688 -0.879590 -0.824754 +v -1.025688 -0.338394 -0.117647 +v -0.942732 -0.555167 -0.624482 +v -0.525688 -2.186153 -0.324753 +v -0.401536 -1.969380 -0.624481 +v -0.318581 -1.644957 -0.824753 +v -0.289451 -1.262273 -0.895080 +v -0.318581 -0.879590 -0.824753 +v -0.818581 -0.338394 -0.324753 +v -0.401536 -0.555167 -0.624482 +v -0.318581 -2.186153 -0.117647 +v -0.018853 -1.969380 -0.241798 +v 0.181419 -1.644957 -0.324753 +v 0.251745 -1.262273 -0.353883 +v 0.181419 -0.879590 -0.324753 +v -0.525688 -0.338394 -0.324753 +v -0.018853 -0.555167 -0.241798 +v -0.318581 -2.186153 0.175247 +v -0.018853 -1.969380 0.299398 +v 0.181419 -1.644957 0.382354 +v 0.251745 -1.262273 0.411484 +v 0.181419 -0.879590 0.382354 +v -0.318581 -0.338394 -0.117647 +v -0.018853 -0.555167 0.299398 +v -0.525688 -2.186153 0.382353 +v -0.401537 -1.969380 0.682081 +v -0.318581 -1.644957 0.882354 +v -0.289451 -1.262273 0.952680 +v -0.318581 -0.879590 0.882353 +v -0.318581 -0.338394 0.175246 +v -0.401537 -0.555167 0.682081 +v -0.942733 -1.969380 0.682081 +v -1.025688 -1.644957 0.882353 +v -1.054818 -1.262273 0.952679 +v -1.025688 -0.879590 0.882353 +v -0.525688 -0.338394 0.382353 +v -0.942733 -0.555167 0.682081 +v -0.672134 -2.262273 0.028800 +v -0.672134 -0.262273 0.028800 +v -0.818581 -2.186153 0.382353 +v -0.818581 -0.338394 0.382353 +v -1.025688 -2.186153 -0.824754 +v -1.325416 -1.969380 -0.700602 +v -1.025688 -2.186153 -1.117647 +v -1.525687 -1.644957 -0.617647 +v -1.325416 -1.969380 -1.241798 +v -1.596014 -1.262273 -0.588517 +v -1.525688 -1.644957 -1.324754 +v -1.525688 -0.879590 -0.617647 +v -1.596014 -1.262273 -1.353884 +v -1.325416 -0.555167 -0.700602 +v -1.525688 -0.879590 -1.324754 +v -1.025688 -0.338394 -0.824754 +v -1.325416 -0.555167 -1.241798 +v -0.818581 -2.186153 -1.324754 +v -0.942732 -1.969380 -1.624482 +v -1.025688 -1.644957 -1.824754 +v -1.054818 -1.262273 -1.895080 +v -1.025688 -0.879590 -1.824754 +v -1.025688 -0.338394 -1.117647 +v -0.942732 -0.555166 -1.624482 +v -0.525688 -2.186153 -1.324754 +v -0.401536 -1.969380 -1.624482 +v -0.289451 -1.262273 -1.895080 +v -0.401536 -0.555167 -1.624482 +v -0.818581 -0.338394 -1.324754 +v -0.318581 -2.186153 -1.117647 +v -0.318581 -1.644957 -1.824754 +v -0.018853 -1.969380 -1.241798 +v 0.181419 -1.644957 -1.324754 +v -0.318581 -0.879590 -1.824754 +v 0.251745 -1.262273 -1.353884 +v 0.181419 -0.879590 -1.324754 +v -0.525688 -0.338394 -1.324754 +v -0.018853 -0.555167 -1.241798 +v -0.318581 -2.186153 -0.824754 +v -0.018853 -1.969380 -0.700602 +v 0.181419 -1.644957 -0.617647 +v 0.251745 -1.262273 -0.588517 +v 0.181419 -0.879590 -0.617647 +v -0.318581 -0.338394 -1.117647 +v -0.018853 -0.555167 -0.700602 +v -0.525688 -2.186153 -0.617647 +v -0.401537 -1.969380 -0.317919 +v -0.318581 -1.644957 -0.117647 +v -0.289451 -1.262273 -0.047320 +v -0.318581 -0.879590 -0.117647 +v -0.318581 -0.338394 -0.824754 +v -0.401537 -0.555167 -0.317919 +v -0.818581 -2.186153 -0.617647 +v -0.942733 -1.969380 -0.317919 +v -1.025688 -1.644957 -0.117647 +v -1.054818 -1.262273 -0.047321 +v -1.025688 -0.879590 -0.117647 +v -0.525688 -0.338394 -0.617647 +v -0.942733 -0.555167 -0.317919 +v -0.672134 -2.262273 -0.971200 +v -0.672134 -0.262273 -0.971200 +v -0.818581 -0.338394 -0.617647 +v -0.025688 -2.186153 0.675246 +v -0.325416 -1.969380 0.799398 +v -0.025688 -2.186153 0.382353 +v -0.525688 -1.644957 0.882353 +v -0.325416 -1.969380 0.258202 +v -0.596014 -1.262274 0.911483 +v -0.525688 -1.644957 0.175246 +v -0.525688 -0.879590 0.882353 +v -0.596014 -1.262273 0.146116 +v -0.325416 -0.555167 0.799398 +v -0.525688 -0.879590 0.175246 +v -0.025688 -0.338394 0.675246 +v -0.325416 -0.555167 0.258202 +v 0.181419 -2.186153 0.175247 +v 0.057268 -1.969380 -0.124481 +v -0.025688 -1.644957 -0.324753 +v -0.054818 -1.262273 -0.395080 +v -0.025688 -0.879590 -0.324753 +v -0.025688 -0.338394 0.382353 +v 0.057268 -0.555167 -0.124482 +v 0.474312 -2.186153 0.175247 +v 0.598464 -1.969380 -0.124481 +v 0.681419 -1.644957 -0.324753 +v 0.710549 -1.262273 -0.395080 +v 0.681419 -0.879590 -0.324753 +v 0.181419 -0.338394 0.175247 +v 0.598464 -0.555167 -0.124481 +v 0.681419 -2.186153 0.382353 +v 0.981147 -1.969380 0.258202 +v 1.181419 -1.644957 0.175247 +v 1.251745 -1.262273 0.146117 +v 1.181419 -0.879590 0.175247 +v 0.474312 -0.338394 0.175247 +v 0.981147 -0.555167 0.258202 +v 0.681419 -2.186153 0.675247 +v 0.981147 -1.969380 0.799398 +v 1.181419 -1.644957 0.882354 +v 1.251745 -1.262273 0.911484 +v 1.181419 -0.879590 0.882354 +v 0.681419 -0.338394 0.382353 +v 0.981147 -0.555167 0.799398 +v 0.474312 -2.186153 0.882353 +v 0.598463 -1.969380 1.182082 +v 0.681419 -1.644957 1.382353 +v 0.710549 -1.262274 1.452680 +v 0.681419 -0.879590 1.382354 +v 0.681419 -0.338394 0.675247 +v 0.598463 -0.555167 1.182081 +v 0.181419 -2.186153 0.882353 +v 0.057267 -1.969380 1.182081 +v -0.025688 -1.644957 1.382353 +v -0.054818 -1.262274 1.452679 +v -0.025688 -0.879590 1.382353 +v 0.474312 -0.338394 0.882353 +v 0.057267 -0.555167 1.182081 +v 0.327866 -2.262273 0.528800 +v 0.327866 -0.262274 0.528800 +v 0.181419 -0.338394 0.882353 +v -0.025688 -2.186153 -0.324753 +v -0.325416 -1.969380 -0.200602 +v -0.025688 -2.186153 -0.617647 +v -0.525688 -1.644957 -0.117647 +v -0.325416 -1.969380 -0.741798 +v -0.596014 -1.262273 -0.088517 +v -0.525688 -1.644957 -0.824753 +v -0.525688 -0.879590 -0.117647 +v -0.596014 -1.262273 -0.853884 +v -0.325416 -0.555167 -0.200602 +v -0.525688 -0.879590 -0.824754 +v -0.025688 -0.338394 -0.324754 +v -0.325416 -0.555167 -0.741798 +v 0.181419 -2.186153 -0.824753 +v 0.057268 -1.969380 -1.124481 +v -0.025688 -1.644957 -1.324754 +v -0.054818 -1.262273 -1.395080 +v -0.025688 -0.879590 -1.324754 +v -0.025688 -0.338394 -0.617647 +v 0.057268 -0.555167 -1.124482 +v 0.474312 -2.186153 -0.824753 +v 0.598464 -1.969380 -1.124481 +v 0.681419 -1.644957 -1.324753 +v 0.710549 -1.262273 -1.395080 +v 0.681419 -0.879590 -1.324754 +v 0.181419 -0.338394 -0.824753 +v 0.598464 -0.555167 -1.124481 +v 0.681419 -2.186153 -0.617647 +v 0.981147 -1.969380 -0.741798 +v 1.181419 -1.644957 -0.824753 +v 1.251745 -1.262273 -0.853883 +v 1.181419 -0.879590 -0.824753 +v 0.474312 -0.338394 -0.824754 +v 0.981147 -0.555167 -0.741798 +v 0.681419 -2.186153 -0.324753 +v 0.981147 -1.969380 -0.200602 +v 1.181419 -1.644957 -0.117646 +v 1.251745 -1.262273 -0.088516 +v 1.181419 -0.879590 -0.117646 +v 0.681419 -0.338394 -0.617647 +v 0.981147 -0.555167 -0.200602 +v 0.474312 -2.186153 -0.117647 +v 0.598463 -1.969380 0.182081 +v 0.681419 -1.644957 0.382353 +v 0.710549 -1.262274 0.452680 +v 0.681418 -0.879590 0.382353 +v 0.681419 -0.338394 -0.324754 +v 0.598463 -0.555167 0.182081 +v 0.181419 -2.186153 -0.117647 +v 0.057267 -1.969380 0.182081 +v -0.025688 -1.644957 0.382353 +v -0.054818 -1.262274 0.452679 +v -0.025688 -0.879590 0.382353 +v 0.474312 -0.338394 -0.117647 +v 0.057267 -0.555167 0.182081 +v 0.327866 -2.262273 -0.471200 +v 0.327865 -0.262273 -0.471200 +v 0.181419 -0.338394 -0.117647 +v 0.974312 -2.186153 0.175247 +v 0.674584 -1.969380 0.299398 +v 0.974312 -2.186153 -0.117647 +v 0.474312 -1.644957 0.382353 +v 0.674584 -1.969380 -0.241798 +v 0.403986 -1.262274 0.411483 +v 0.474312 -1.644957 -0.324754 +v 0.474312 -0.879590 0.382353 +v 0.403986 -1.262273 -0.353884 +v 0.674584 -0.555167 0.299398 +v 0.474312 -0.879590 -0.324754 +v 0.974312 -0.338394 0.175246 +v 0.674584 -0.555167 -0.241798 +v 1.181419 -2.186153 -0.324754 +v 1.057268 -1.969380 -0.624482 +v 0.974312 -1.644957 -0.824754 +v 0.945183 -1.262273 -0.895080 +v 0.974312 -0.879590 -0.824754 +v 0.974312 -0.338394 -0.117647 +v 1.057268 -0.555167 -0.624482 +v 1.474312 -2.186153 -0.324753 +v 1.598464 -1.969380 -0.624482 +v 1.681419 -1.644957 -0.824753 +v 1.710549 -1.262273 -0.895080 +v 1.681419 -0.879590 -0.824754 +v 1.181419 -0.338394 -0.324754 +v 1.598464 -0.555167 -0.624482 +v 1.681419 -2.186153 -0.117647 +v 1.981147 -1.969380 -0.241798 +v 2.181419 -1.644957 -0.324753 +v 2.251745 -1.262273 -0.353884 +v 2.181419 -0.879590 -0.324753 +v 1.474312 -0.338394 -0.324753 +v 1.981147 -0.555167 -0.241798 +v 1.681419 -2.186153 0.175247 +v 1.981147 -1.969380 0.299398 +v 2.181419 -1.644957 0.382354 +v 2.251745 -1.262274 0.411484 +v 2.181419 -0.879590 0.382354 +v 1.681419 -0.338394 -0.117647 +v 1.981147 -0.555167 0.299398 +v 1.474312 -2.186153 0.382353 +v 1.598463 -1.969380 0.682081 +v 1.681419 -1.644957 0.882353 +v 1.710549 -1.262274 0.952680 +v 1.681419 -0.879590 0.882353 +v 1.681419 -0.338394 0.175246 +v 1.598463 -0.555167 0.682081 +v 1.181419 -2.186153 0.382353 +v 1.057267 -1.969380 0.682081 +v 0.974312 -1.644957 0.882353 +v 0.945182 -1.262274 0.952679 +v 0.974312 -0.879590 0.882353 +v 1.474312 -0.338394 0.382353 +v 1.057267 -0.555167 0.682081 +v 1.327865 -2.262273 0.028800 +v 1.327866 -0.262273 0.028800 +v 1.181419 -0.338394 0.382353 +v -0.501675 -0.813708 1.130124 +v -0.798598 -1.017731 1.251595 +v -0.503172 -0.812223 0.844739 +v -1.161659 -1.094870 1.333931 +v -0.801363 -1.014987 0.724273 +v -1.535587 -1.033382 1.364596 +v -1.165272 -1.091286 0.644951 +v -1.863455 -0.842628 1.338923 +v -1.539498 -1.029502 0.618850 +v -2.095347 -0.551647 1.260820 +v -1.867068 -0.839043 0.649943 +v -2.195960 -0.204741 1.142177 +v -2.098112 -0.548904 0.733498 +v -0.435969 -0.621267 0.643572 +v -0.677188 -0.662146 0.352564 +v -1.003029 -0.630277 0.159290 +v -1.363887 -0.530510 0.093174 +v -1.704825 -0.378034 0.164282 +v -2.197456 -0.203256 0.856792 +v -2.130253 -0.012300 0.655625 +v -0.339432 -0.352699 0.644463 +v -0.498812 -0.165897 0.354210 +v -0.769970 0.018104 0.161441 +v -1.111626 0.171293 0.095502 +v -1.973936 -0.196063 0.361789 +v -1.471765 0.270347 0.166433 +v -1.795561 0.300186 0.363435 +v -0.270113 -0.163843 0.846890 +v -0.370726 0.183064 0.728247 +v -0.602617 0.474044 0.650144 +v -0.930485 0.664798 0.624471 +v -1.304413 0.726287 0.655136 +v -2.033716 0.256268 0.656516 +v -1.667475 0.649147 0.737472 +v -0.268616 -0.165327 1.132275 +v -0.367960 0.180320 1.255570 +v -0.599004 0.470460 1.339124 +v -0.926574 0.660919 1.370217 +v -1.664709 0.646404 1.264794 +v -1.964397 0.445125 0.858943 +v -0.335819 -0.356284 1.333443 +v -0.492136 -0.172521 1.627279 +v -0.761248 0.009451 1.824785 +v -1.300800 0.722702 1.344116 +v -1.102185 0.161926 1.895893 +v -1.463043 0.261693 1.829778 +v -1.962900 0.443640 1.144328 +v -1.788885 0.293563 1.636504 +v -0.432356 -0.624852 1.332551 +v -0.670512 -0.668770 1.625632 +v -0.994307 -0.638930 1.822634 +v -1.696103 -0.386688 1.827627 +v -2.030104 0.252684 1.345495 +v -1.967261 -0.202686 1.634857 +v -0.316096 -0.513863 0.988011 +v -2.149976 0.145279 1.001056 +v -2.126640 -0.015884 1.344604 +v -1.354446 -0.539876 1.893565 +v -0.506785 -0.808639 0.155759 +v -0.803707 -1.012662 0.277230 +v -0.508281 -0.807154 -0.129625 +v -1.166769 -1.089801 0.359566 +v -0.806472 -1.009918 -0.250092 +v -1.540697 -1.028313 0.390232 +v -1.170382 -1.086217 -0.329414 +v -1.868564 -0.837558 0.364559 +v -1.544608 -1.024433 -0.355514 +v -2.100456 -0.546578 0.286455 +v -1.872177 -0.833974 -0.324421 +v -2.201069 -0.199672 0.167812 +v -2.103221 -0.543835 -0.240867 +v -0.441078 -0.616198 -0.330793 +v -0.682297 -0.657077 -0.621801 +v -1.008139 -0.625208 -0.815075 +v -1.368997 -0.525441 -0.881191 +v -1.709934 -0.372965 -0.810083 +v -2.202565 -0.198187 -0.117573 +v -1.979046 -0.190994 -0.612576 +v -0.503921 -0.160828 -0.620155 +v -0.775079 0.023173 -0.812924 +v -1.116735 0.176362 -0.878863 +v -1.476875 0.275416 -0.807932 +v -2.135362 -0.007231 -0.318740 +v -1.800670 0.305255 -0.610930 +v -0.344542 -0.347630 -0.329902 +v -0.275222 -0.158774 -0.127474 +v -0.375835 0.188133 -0.246117 +v -0.607727 0.479113 -0.324221 +v -0.935594 0.669868 -0.349894 +v -1.309523 0.731356 -0.319228 +v -2.038826 0.261337 -0.317849 +v -1.672584 0.654216 -0.236893 +v -0.273726 -0.160258 0.157910 +v -0.373070 0.185390 0.281205 +v -0.604114 0.475529 0.364759 +v -0.931684 0.665988 0.395853 +v -1.305910 0.727771 0.369752 +v -1.969506 0.450194 -0.115422 +v -1.669819 0.651473 0.290430 +v -0.340929 -0.351215 0.359078 +v -0.497245 -0.167452 0.652914 +v -0.766357 0.014519 0.850420 +v -1.107294 0.166995 0.921528 +v -1.468153 0.266762 0.855413 +v -1.968010 0.448709 0.169963 +v -1.793994 0.298632 0.662139 +v -0.437465 -0.619783 0.358187 +v -0.675621 -0.663701 0.651268 +v -0.999416 -0.633861 0.848270 +v -1.359556 -0.534807 0.919200 +v -1.701212 -0.381619 0.853262 +v -2.035213 0.257753 0.371131 +v -1.972370 -0.197617 0.660493 +v -0.321206 -0.508793 0.013646 +v -2.155086 0.150348 0.026692 +v -2.131749 -0.010815 0.370240 +v -0.511894 -0.803570 -0.818605 +v -0.808817 -1.007593 -0.697134 +v -0.513391 -0.802085 -1.103990 +v -1.171878 -1.084732 -0.614799 +v -0.811582 -1.004849 -1.224456 +v -1.545806 -1.023244 -0.584133 +v -1.175491 -1.081147 -1.303778 +v -1.873674 -0.832489 -0.609806 +v -1.549717 -1.019364 -1.329879 +v -2.105566 -0.541509 -0.687909 +v -1.877287 -0.828905 -1.298786 +v -2.206178 -0.194603 -0.806553 +v -2.207675 -0.193118 -1.091937 +v -0.446188 -0.611129 -1.305157 +v -0.687406 -0.652008 -1.596166 +v -1.013248 -0.620138 -1.789440 +v -1.374107 -0.520372 -1.855555 +v -2.108331 -0.538766 -1.215232 +v -1.715044 -0.367896 -1.784447 +v -1.984155 -0.185925 -1.586941 +v -0.349651 -0.342561 -1.304266 +v -0.509031 -0.155759 -1.594519 +v -0.780189 0.028242 -1.787289 +v -1.121845 0.181431 -1.853227 +v -1.481984 0.280485 -1.782296 +v -2.140472 -0.002162 -1.293105 +v -1.805780 0.310324 -1.585294 +v -0.280332 -0.153704 -1.101839 +v -0.380945 0.193202 -1.220482 +v -0.612836 0.484182 -1.298585 +v -0.940704 0.674937 -1.324259 +v -1.314632 0.736425 -1.293593 +v -2.043936 0.266406 -1.292214 +v -1.677693 0.659285 -1.211257 +v -0.278835 -0.155189 -0.816454 +v -0.378179 0.190459 -0.693160 +v -0.609223 0.480598 -0.609606 +v -0.936793 0.671057 -0.578512 +v -1.311019 0.732840 -0.604613 +v -1.974616 0.455263 -1.089786 +v -1.674928 0.656542 -0.683935 +v -0.346038 -0.346146 -0.615287 +v -0.502355 -0.162383 -0.321451 +v -0.771467 0.019588 -0.123944 +v -1.112404 0.172064 -0.052836 +v -1.473262 0.271831 -0.118952 +v -1.973119 0.453778 -0.804401 +v -1.799104 0.303701 -0.312226 +v -0.680731 -0.658632 -0.323097 +v -1.004526 -0.628792 -0.126095 +v -1.364666 -0.529738 -0.055164 +v -1.706322 -0.376550 -0.121103 +v -2.040323 0.262822 -0.603234 +v -1.977480 -0.192548 -0.313872 +v -0.326315 -0.503724 -0.960719 +v -2.160195 0.155417 -0.947673 +v -0.442575 -0.614714 -0.616178 +v -2.136859 -0.005746 -0.604125 +v -0.174635 0.105775 0.645984 +v -0.471557 -0.098247 0.767455 +v -0.176131 0.107260 0.360599 +v -0.834618 -0.175386 0.849790 +v -0.474322 -0.095504 0.240132 +v -1.208547 -0.113898 0.880456 +v -0.838231 -0.171802 0.160810 +v -1.536414 0.076856 0.854783 +v -1.212457 -0.110019 0.134710 +v -1.768306 0.367836 0.776679 +v -1.540027 0.080440 0.165803 +v -1.868919 0.714743 0.658036 +v -1.870415 0.716228 0.372651 +v -0.108928 0.298216 0.159431 +v -0.350147 0.257337 -0.131577 +v -0.675988 0.289207 -0.324851 +v -1.036847 0.388974 -0.390966 +v -1.771071 0.370580 0.249357 +v -1.377784 0.541449 -0.319858 +v -1.646896 0.723421 -0.122352 +v -0.012391 0.566784 0.160322 +v -0.171771 0.753586 -0.129931 +v -0.442929 0.937588 -0.322700 +v -0.784585 1.090776 -0.388638 +v -1.144724 1.189830 -0.317708 +v -1.803212 0.907184 0.171484 +v -1.468520 1.219670 -0.120706 +v 0.056928 0.755641 0.362750 +v -0.043685 1.102548 0.244107 +v -0.275576 1.393528 0.166003 +v -0.603444 1.584282 0.140330 +v -0.977372 1.645770 0.170996 +v -1.706676 1.175752 0.172375 +v -1.340434 1.568631 0.253332 +v 0.058425 0.754156 0.648134 +v -0.040919 1.099804 0.771429 +v -0.271964 1.389943 0.854983 +v -0.599533 1.580402 0.886077 +v -0.973759 1.642186 0.859976 +v -1.637356 1.364608 0.374802 +v -1.337668 1.565888 0.780654 +v -0.165095 0.746963 1.143138 +v -0.434207 0.928934 1.340645 +v -0.775144 1.081410 1.411753 +v -1.136002 1.181177 1.345637 +v -1.635859 1.363123 0.660187 +v -1.461844 1.213046 1.152363 +v -0.008779 0.563200 0.849302 +v -0.105315 0.294632 0.848411 +v -0.343471 0.250714 1.141492 +v -0.667266 0.280553 1.338493 +v -1.027406 0.379607 1.409424 +v -1.369061 0.532796 1.343486 +v -1.703063 1.172167 0.861355 +v -1.640220 0.716797 1.150716 +v 0.010945 0.405621 0.503870 +v -1.822935 1.064762 0.516916 +v -1.799599 0.903599 0.860464 +v -0.179744 0.110844 -0.328381 +v -0.476666 -0.093178 -0.206910 +v -0.181241 0.112329 -0.613766 +v -0.839728 -0.170318 -0.124574 +v -0.479432 -0.090435 -0.734232 +v -1.213656 -0.108829 -0.093909 +v -0.843341 -0.166733 -0.813554 +v -1.541523 0.081925 -0.119582 +v -1.217567 -0.104950 -0.839655 +v -1.773415 0.372905 -0.197685 +v -1.545136 0.085509 -0.808562 +v -1.874028 0.719812 -0.316328 +v -1.776181 0.375648 -0.725008 +v -0.114037 0.303285 -0.814933 +v -0.355256 0.262406 -1.105941 +v -0.681098 0.294276 -1.299215 +v -1.041956 0.394043 -1.365331 +v -1.382893 0.546518 -1.294223 +v -1.875525 0.721297 -0.601713 +v -1.652005 0.728490 -1.096717 +v -0.017501 0.571853 -0.814042 +v -0.176880 0.758655 -1.104295 +v -0.448038 0.942657 -1.297064 +v -0.789694 1.095845 -1.363003 +v -1.149834 1.194899 -1.292072 +v -1.808321 0.912253 -0.802881 +v -1.473629 1.224739 -1.095070 +v 0.051819 0.760710 -0.611615 +v -0.048794 1.107616 -0.730258 +v -0.280686 1.398597 -0.808361 +v -0.608553 1.589351 -0.834034 +v -0.982481 1.650839 -0.803369 +v -1.711785 1.180821 -0.801990 +v -1.345543 1.573700 -0.721033 +v 0.053315 0.759225 -0.326230 +v -0.046029 1.104873 -0.202936 +v -0.277073 1.395012 -0.119381 +v -0.604643 1.585471 -0.088288 +v -0.978868 1.647255 -0.114389 +v -1.642465 1.369677 -0.599562 +v -1.342778 1.570956 -0.193711 +v -0.013888 0.568269 -0.125063 +v -0.170204 0.752032 0.168774 +v -0.439316 0.934003 0.366280 +v -0.780253 1.086478 0.437388 +v -1.141112 1.186245 0.371272 +v -1.640969 1.368192 -0.314177 +v -1.466953 1.218115 0.177998 +v -0.110424 0.299701 -0.125954 +v -0.348580 0.255783 0.167127 +v -0.672375 0.285622 0.364129 +v -1.032515 0.384676 0.435060 +v -1.374171 0.537865 0.369121 +v -1.708172 1.177236 -0.113010 +v -1.645329 0.721866 0.176352 +v 0.005835 0.410690 -0.470494 +v -1.828045 1.069832 -0.457449 +v -1.804708 0.908668 -0.113901 +v 0.152406 1.025259 0.161843 +v -0.144516 0.821236 0.283314 +v 0.150910 1.026744 -0.123542 +v -0.507577 0.744097 0.365650 +v -0.147281 0.823980 -0.244008 +v -0.881506 0.805585 0.396315 +v -0.511190 0.747681 -0.323330 +v -1.209373 0.996340 0.370642 +v -0.885416 0.809465 -0.349431 +v -1.441265 1.287320 0.292539 +v -1.212986 0.999924 -0.318338 +v -1.541878 1.634226 0.173896 +v -1.444030 1.290063 -0.234784 +v 0.218113 1.217700 -0.324709 +v -0.023106 1.176821 -0.615717 +v -0.348947 1.208690 -0.808991 +v -0.709806 1.308457 -0.875107 +v -1.050743 1.460933 -0.803999 +v -1.543374 1.635711 -0.111489 +v -1.319854 1.642904 -0.606493 +v 0.314649 1.486268 -0.323818 +v 0.155270 1.673070 -0.614071 +v -0.115888 1.857071 -0.806840 +v -0.457544 2.010260 -0.872779 +v -0.817684 2.109314 -0.801848 +v -1.476171 1.826667 -0.312657 +v -1.141479 2.139153 -0.604846 +v 0.283356 2.022031 -0.240034 +v 0.051465 2.313011 -0.318137 +v -0.276403 2.503766 -0.343810 +v -0.650331 2.565254 -0.313145 +v -1.379635 2.095235 -0.311766 +v -1.013392 2.488115 -0.230809 +v 0.383969 1.675124 -0.121391 +v 0.385466 1.673640 0.163994 +v 0.286121 2.019288 0.287288 +v 0.055077 2.309427 0.370843 +v -0.272492 2.499886 0.401936 +v -0.646718 2.561669 0.375835 +v -1.310315 2.284092 -0.109338 +v -1.308818 2.282607 0.176047 +v 0.318262 1.482684 0.365161 +v 0.161946 1.666447 0.658998 +v -0.107166 1.848418 0.856504 +v -0.448103 2.000893 0.927612 +v -1.010628 2.485371 0.296513 +v -0.808961 2.100660 0.861496 +v -1.134803 2.132530 0.668222 +v 0.221726 1.214115 0.364270 +v -0.016430 1.170197 0.657351 +v -0.340225 1.200037 0.854353 +v -0.700365 1.299091 0.925284 +v -1.042021 1.452279 0.859345 +v -1.376022 2.091651 0.377214 +v -1.313179 1.636281 0.666576 +v 0.337986 1.325105 0.019729 +v -1.495894 1.984246 0.032775 +v -1.472558 1.823083 0.376323 +v 1.222376 -0.812255 -0.186505 +v 1.488583 -1.016115 -0.007289 +v 0.985877 -0.811301 -0.026767 +v 1.758795 -1.093177 0.248817 +v 1.051590 -1.014351 0.287869 +v 1.991875 -1.031710 0.542822 +v 1.187836 -1.090872 0.634459 +v 2.152339 -0.841073 0.829966 +v 1.373874 -1.029216 0.960238 +v 2.215756 -0.550287 1.066536 +v 1.581380 -0.838768 1.215609 +v 2.172474 -0.203622 1.216514 +v 1.778764 -0.548523 1.361694 +v 0.780990 -0.620704 0.029298 +v 0.673008 -0.662174 0.391463 +v 0.693196 -0.630732 0.769811 +v 0.838479 -0.531163 1.106741 +v 1.086740 -0.378627 1.350960 +v 1.935975 -0.202667 1.376252 +v 1.400182 -0.196346 1.465287 +v 0.727735 -0.352115 -0.051154 +v 0.574606 -0.165885 0.242808 +v 0.564627 0.017701 0.575584 +v 0.699316 0.170695 0.896511 +v 0.958170 0.269805 1.156733 +v 1.731089 -0.012071 1.432317 +v 1.301780 0.299942 1.316632 +v 0.857307 -0.162868 -0.220994 +v 0.814025 0.183796 -0.071016 +v 0.877443 0.474582 0.165554 +v 1.037906 0.665220 0.452699 +v 1.270986 0.726687 0.746703 +v 1.677833 0.256518 1.351865 +v 1.541199 0.649624 1.002809 +v 1.093806 -0.163823 -0.380732 +v 1.251018 0.182032 -0.366174 +v 1.448401 0.472278 -0.220089 +v 1.655907 0.662725 0.035282 +v 1.841945 0.724382 0.361061 +v 1.807406 0.445765 1.182025 +v 1.978191 0.647860 0.707651 +v 1.298693 -0.354419 -0.436797 +v 1.629599 -0.170144 -0.469767 +v 1.943042 0.012137 -0.355440 +v 2.191303 0.164673 -0.111221 +v 2.336586 0.264241 0.225709 +v 2.043905 0.444810 1.022287 +v 2.356773 0.295684 0.604057 +v 1.728002 -0.666433 -0.321112 +v 2.071611 -0.636296 -0.161213 +v 2.465155 -0.384192 0.419937 +v 2.455176 -0.200605 0.752713 +v 2.248791 0.254214 0.966223 +v 1.000701 -0.512635 -0.261548 +v 2.029080 0.146145 1.257069 +v 1.351948 -0.623009 -0.356345 +v 2.302047 -0.014376 1.046674 +v 2.330465 -0.537186 0.099009 +v 0.414918 -0.808996 0.358876 +v 0.681125 -1.012855 0.538092 +v 0.178420 -0.808041 0.518614 +v 0.951338 -1.089918 0.794198 +v 0.244133 -1.011091 0.833251 +v 1.184418 -1.028451 1.088203 +v 0.380379 -1.087613 1.179840 +v 1.344881 -0.837813 1.375347 +v 0.566417 -1.025957 1.505619 +v 1.408299 -0.547027 1.611917 +v 0.773923 -0.835509 1.760990 +v 1.365017 -0.200363 1.761895 +v 0.971307 -0.545264 1.907075 +v -0.026467 -0.617445 0.574679 +v -0.114261 -0.627472 1.315192 +v 0.031022 -0.527904 1.652123 +v 0.279282 -0.375368 1.896342 +v 1.128518 -0.199408 1.921634 +v 0.923631 -0.008812 1.977698 +v -0.134449 -0.658915 0.936844 +v -0.079722 -0.348856 0.494227 +v -0.232851 -0.162626 0.788189 +v -0.242831 0.020960 1.120965 +v -0.108141 0.173955 1.441893 +v 0.592725 -0.193087 2.010668 +v 0.150713 0.273065 1.702114 +v 0.494323 0.303202 1.862013 +v 0.049850 -0.159609 0.324387 +v 0.006568 0.187056 0.474366 +v 0.069986 0.477842 0.710935 +v 0.230449 0.668479 0.998080 +v 0.463529 0.729946 1.292084 +v 0.870376 0.259778 1.897246 +v 0.733742 0.652883 1.548190 +v 0.286349 -0.160564 0.164649 +v 0.443560 0.185292 0.179207 +v 0.640944 0.475537 0.325292 +v 0.848450 0.665985 0.580663 +v 1.034488 0.727641 0.906442 +v 0.999949 0.449024 1.727407 +v 1.170734 0.651119 1.253032 +v 0.491236 -0.351160 0.108585 +v 0.822142 -0.166885 0.075614 +v 1.135585 0.015396 0.189941 +v 1.383845 0.167932 0.434160 +v 1.529129 0.267500 0.771091 +v 1.236448 0.448070 1.567668 +v 1.441334 0.257473 1.511604 +v 0.544491 -0.619750 0.189036 +v 0.920545 -0.663174 0.224269 +v 1.264154 -0.633036 0.384168 +v 1.523008 -0.533927 0.644390 +v 1.549316 0.298943 1.149439 +v 1.657698 -0.380932 0.965318 +v 1.494590 -0.011117 1.592055 +v 0.193244 -0.509376 0.283833 +v 1.221623 0.149404 1.802450 +v 1.647718 -0.197346 1.298094 +v -0.392539 -0.805737 0.904257 +v -0.126332 -1.009596 1.083474 +v -0.629037 -0.804782 1.063996 +v 0.143881 -1.086658 1.339579 +v -0.563324 -1.007832 1.378632 +v 0.376961 -1.025192 1.633584 +v -0.241040 -1.022697 2.051001 +v 0.537424 -0.834554 1.920729 +v 0.600842 -0.543768 2.157298 +v -0.033534 -0.832250 2.306371 +v 0.557560 -0.197104 2.307276 +v 0.163850 -0.542004 2.452456 +v -0.833924 -0.614186 1.120060 +v -0.427078 -1.084354 1.725222 +v -0.941906 -0.655656 1.482225 +v -0.921719 -0.624213 1.860573 +v -0.776435 -0.524645 2.197504 +v -0.528175 -0.372109 2.441723 +v 0.321061 -0.196149 2.467015 +v -0.214732 -0.189828 2.556049 +v -0.887180 -0.345596 1.039608 +v -1.040309 -0.159367 1.333570 +v -1.050288 0.024219 1.666346 +v -0.915598 0.177214 1.987274 +v -0.656744 0.276324 2.247495 +v 0.116174 -0.005552 2.523079 +v -0.313135 0.306461 2.407394 +v -0.757607 -0.156350 0.869768 +v -0.800889 0.190315 1.019747 +v -0.737472 0.481101 1.256316 +v -0.577008 0.671739 1.543461 +v -0.343928 0.733205 1.837466 +v 0.062919 0.263037 2.442628 +v -0.073715 0.656143 2.093571 +v -0.521108 -0.157304 0.710030 +v -0.363897 0.188551 0.724589 +v -0.166513 0.478796 0.870673 +v 0.040993 0.669244 1.126044 +v 0.227031 0.730900 1.451823 +v 0.192492 0.452284 2.272788 +v 0.363277 0.654379 1.798413 +v -0.316221 -0.347901 0.653966 +v 0.014685 -0.163626 0.620995 +v 0.328128 0.018655 0.735322 +v 0.576388 0.171191 0.979541 +v 0.721671 0.270759 1.316472 +v 0.428990 0.451329 2.113049 +v 0.741859 0.302202 1.694820 +v -0.262966 -0.616491 0.734417 +v 0.113088 -0.659914 0.769650 +v 0.456697 -0.629777 0.929549 +v 0.715551 -0.530667 1.189771 +v 0.850241 -0.377673 1.510699 +v 0.633877 0.260732 2.056985 +v 0.687132 -0.007857 2.137437 +v -0.614213 -0.506117 0.829214 +v 0.414166 0.152663 2.347831 +v 0.840261 -0.194087 1.843475 +v 0.636822 0.106396 -0.188493 +v 0.903030 -0.097463 -0.009277 +v 0.400324 0.107351 -0.028755 +v 1.173241 -0.174525 0.246829 +v 0.602283 -0.172220 0.632471 +v 1.406322 -0.113059 0.540834 +v 1.566785 0.077579 0.827978 +v 0.788321 -0.110564 0.958250 +v 1.630203 0.368365 1.064548 +v 0.995827 0.079884 1.213621 +v 1.586921 0.715030 1.214526 +v 1.193211 0.370129 1.359706 +v 0.466037 -0.095699 0.285881 +v 0.195437 0.297947 0.027310 +v 0.087455 0.256478 0.389475 +v 0.107643 0.287920 0.767823 +v 0.252926 0.387489 1.104753 +v 0.501186 0.540025 1.348972 +v 1.350422 0.715984 1.374264 +v 0.814629 0.722305 1.463299 +v 0.142182 0.566537 -0.053142 +v -0.010947 0.752766 0.240820 +v -0.020927 0.936353 0.573596 +v 0.113763 1.089347 0.894524 +v 0.372617 1.188457 1.154745 +v 1.145535 0.906581 1.430329 +v 0.716226 1.218594 1.314644 +v 0.271754 0.755784 -0.222982 +v 0.228472 1.102448 -0.073004 +v 0.291890 1.393234 0.163566 +v 0.452353 1.583872 0.450710 +v 0.685433 1.645338 0.744715 +v 1.092280 1.175170 1.349877 +v 0.955646 1.568276 1.000821 +v 0.508253 0.754829 -0.382720 +v 0.665464 1.100684 -0.368162 +v 0.862848 1.390929 -0.222077 +v 1.070354 1.581377 0.033294 +v 1.256392 1.643034 0.359073 +v 1.221853 1.364417 1.180037 +v 1.392638 1.566512 0.705663 +v 0.713140 0.564232 -0.438784 +v 1.044046 0.748508 -0.471755 +v 1.357489 0.930788 -0.357428 +v 1.605750 1.083324 -0.113209 +v 1.751033 1.182893 0.223722 +v 1.458351 1.363462 1.020299 +v 1.771220 1.214335 0.602070 +v 0.766395 0.295643 -0.358333 +v 1.142449 0.252219 -0.323100 +v 1.486058 0.282356 -0.163201 +v 1.744912 0.381466 0.097021 +v 1.879602 0.534460 0.417949 +v 1.663238 1.172866 0.964235 +v 1.869623 0.718047 0.750725 +v 0.415148 0.406017 -0.263536 +v 1.443527 1.064796 1.255081 +v 1.716493 0.904276 1.044686 +v -0.170635 0.109656 0.356888 +v 0.095572 -0.094204 0.536104 +v -0.407133 0.110610 0.516626 +v 0.365785 -0.171266 0.792210 +v -0.341420 -0.092440 0.831262 +v 0.598865 -0.109799 1.086215 +v -0.205174 -0.168961 1.177853 +v 0.759328 0.080838 1.373359 +v -0.019136 -0.107305 1.503631 +v 0.822746 0.371624 1.609929 +v 0.188370 0.083143 1.759002 +v 0.779464 0.718289 1.759907 +v 0.385754 0.373388 1.905087 +v -0.612020 0.301207 0.572691 +v -0.720002 0.259737 0.934856 +v -0.699814 0.291179 1.313204 +v -0.554531 0.390748 1.650135 +v -0.306271 0.543284 1.894353 +v 0.542965 0.719244 1.919646 +v 0.007172 0.725565 2.008680 +v -0.665275 0.569796 0.492239 +v -0.818404 0.756026 0.786201 +v -0.828384 0.939612 1.118977 +v -0.693694 1.092606 1.439905 +v -0.434840 1.191716 1.700126 +v 0.338078 0.909840 1.975710 +v -0.091231 1.221853 1.860025 +v -0.535703 0.759043 0.322399 +v -0.578985 1.105707 0.472378 +v -0.515568 1.396493 0.708947 +v -0.355104 1.587131 0.996092 +v -0.122024 1.648597 1.290097 +v 0.284823 1.178430 1.895259 +v 0.148189 1.571535 1.546202 +v -0.299204 0.758088 0.162661 +v -0.141993 1.103943 0.177220 +v 0.055391 1.394189 0.323304 +v 0.262897 1.584636 0.578675 +v 0.448935 1.646293 0.904454 +v 0.414396 1.367676 1.725419 +v 0.585181 1.569771 1.251044 +v -0.094317 0.567491 0.106597 +v 0.236589 0.751767 0.073626 +v 0.550032 0.934048 0.187953 +v 0.798293 1.086583 0.432172 +v 0.943576 1.186152 0.769103 +v 0.650894 1.366721 1.565680 +v 0.963763 1.217595 1.147451 +v -0.041062 0.298902 0.187048 +v 0.334992 0.255478 0.222281 +v 0.678601 0.285615 0.382180 +v 0.937455 0.384725 0.642402 +v 1.072145 0.537719 0.963330 +v 0.855781 1.176125 1.509616 +v 1.062165 0.721306 1.296106 +v -0.392309 0.409276 0.281845 +v 0.636070 1.068056 1.800462 +v 0.909036 0.907535 1.590067 +v 0.051269 1.025048 -0.190481 +v 0.317476 0.821189 -0.011265 +v -0.185230 1.026003 -0.030743 +v 0.587689 0.744127 0.244841 +v -0.119516 0.822953 0.283893 +v 0.820769 0.805593 0.538846 +v 0.016730 0.746431 0.630483 +v 0.981232 0.996231 0.825990 +v 0.202768 0.808088 0.956262 +v 1.044650 1.287017 1.062560 +v 0.410274 0.998536 1.211633 +v 1.001368 1.633682 1.212538 +v 0.764869 1.634636 1.372277 +v -0.390116 1.216599 0.025322 +v -0.498098 1.175129 0.387487 +v -0.477911 1.206572 0.765835 +v -0.332628 1.306141 1.102766 +v 0.607658 1.288781 1.357718 +v -0.084367 1.458676 1.346984 +v 0.229076 1.640957 1.461311 +v -0.443372 1.485189 -0.055130 +v -0.596501 1.671418 0.238832 +v -0.606480 1.855005 0.571608 +v -0.471790 2.007999 0.892536 +v -0.212936 2.107109 1.152757 +v 0.559982 1.825233 1.428341 +v 0.130673 2.137246 1.312656 +v -0.313799 1.674435 -0.224970 +v -0.357081 2.021100 -0.074991 +v -0.293664 2.311886 0.161578 +v -0.133200 2.502524 0.448723 +v 0.099880 2.563990 0.742728 +v 0.506727 2.093822 1.347889 +v 0.370093 2.486928 0.998833 +v -0.077300 1.673481 -0.384708 +v 0.079911 2.019336 -0.370150 +v 0.277295 2.309581 -0.224065 +v 0.484801 2.500029 0.031306 +v 0.670839 2.561685 0.357085 +v 0.636300 2.283069 1.178050 +v 0.807085 2.485164 0.703675 +v 0.458493 1.667159 -0.473743 +v 0.771936 1.849440 -0.359416 +v 1.020196 2.001976 -0.115197 +v 1.165479 2.101544 0.221734 +v 0.872798 2.282114 1.018311 +v 1.185667 2.132987 0.600082 +v 0.127587 1.482884 -0.440773 +v 0.180842 1.214295 -0.360321 +v 0.556895 1.170871 -0.325088 +v 0.900505 1.201008 -0.165189 +v 1.159359 1.300118 0.095033 +v 1.294049 1.453112 0.415961 +v 1.077685 2.091517 0.962247 +v 1.284069 1.636698 0.748737 +v -0.170405 1.324668 -0.265524 +v 0.857974 1.983448 1.253093 +v 1.130940 1.822928 1.042698 +v -0.845385 -0.716125 -0.956977 +v -0.836990 -0.912054 -1.282683 +v -0.587579 -0.730881 -0.835457 +v -0.758459 -0.983344 -1.647778 +v -0.360626 -0.939319 -1.058143 +v -0.621747 -0.919141 -1.996678 +v -0.136060 -1.018967 -1.354402 +v -0.447669 -0.729220 -2.276267 +v 0.051933 -0.957699 -1.679131 +v -0.262724 -0.442495 -2.443980 +v 0.174731 -0.764843 -1.982891 +v -0.095071 -0.102616 -2.474283 +v 0.213640 -0.469759 -2.219440 +v -0.425770 -0.551876 -0.683062 +v -0.061642 -0.608561 -0.776556 +v 0.254582 -0.586811 -0.986490 +v 0.474761 -0.489937 -1.280905 +v 0.565373 -0.332687 -1.614979 +v 0.162735 -0.117372 -2.352763 +v 0.512624 -0.139001 -1.937852 +v -0.454743 -0.283970 -0.589064 +v -0.115178 -0.113535 -0.602870 +v 0.184634 0.059972 -0.759559 +v 0.399049 0.210136 -1.035277 +v 0.495424 0.314096 -1.388048 +v 0.324544 0.061633 -2.200369 +v 0.459088 0.356025 -1.764166 +v -0.657527 -0.084098 -0.608525 +v -0.489874 0.255781 -0.638829 +v -0.304930 0.542506 -0.806542 +v -0.130851 0.732427 -1.086131 +v 0.005861 0.796630 -1.435031 +v 0.295571 0.329539 -2.106371 +v 0.084392 0.725340 -1.800126 +v -0.915334 -0.069342 -0.730046 +v -0.966238 0.283045 -0.863369 +v -0.927329 0.578129 -1.099917 +v -0.804531 0.770985 -1.403678 +v -0.616539 0.832253 -1.728406 +v 0.092787 0.529411 -2.125832 +v -0.391972 0.752605 -2.024665 +v -1.077143 -0.248347 -0.882440 +v -1.265222 -0.047713 -1.144957 +v -1.317971 0.145973 -1.467830 +v -1.227359 0.303223 -1.801903 +v -1.007181 0.400097 -2.096319 +v -0.165019 0.544167 -2.247352 +v -0.690956 0.421847 -2.306253 +v -1.048169 -0.516253 -0.976438 +v -1.211686 -0.542739 -1.318642 +v -1.248023 -0.500810 -1.694761 +v -1.151647 -0.396850 -2.047532 +v -0.937232 -0.246686 -2.323250 +v -0.326828 0.365162 -2.399746 +v -0.637420 -0.073179 -2.479939 +v -0.782366 -0.425386 -0.720244 +v 0.029768 0.238672 -2.362565 +v -0.297855 0.097256 -2.493744 +v 0.034820 -0.766504 -0.542081 +v 0.043216 -0.962433 -0.867788 +v 0.292627 -0.781259 -0.420561 +v 0.121747 -1.033722 -1.232882 +v 0.519579 -0.989697 -0.643248 +v 0.258458 -0.969519 -1.581782 +v 0.744146 -1.069345 -0.939507 +v 0.432537 -0.779598 -1.861371 +v 0.932138 -1.008077 -1.264235 +v 0.617481 -0.492873 -2.029084 +v 1.054936 -0.815221 -1.567996 +v 0.785135 -0.152995 -2.059388 +v 1.093845 -0.520137 -1.804544 +v 0.454436 -0.602254 -0.268167 +v 0.818564 -0.658939 -0.361660 +v 1.134788 -0.637189 -0.571595 +v 1.354966 -0.540315 -0.866010 +v 1.445578 -0.383066 -1.200084 +v 1.042941 -0.167750 -1.937868 +v 1.392830 -0.189380 -1.522957 +v 0.425462 -0.334348 -0.174169 +v 0.765028 -0.163913 -0.187975 +v 1.064840 0.009594 -0.344664 +v 1.279255 0.159758 -0.620381 +v 1.375630 0.263718 -0.973153 +v 1.204750 0.011255 -1.785474 +v 1.339293 0.305647 -1.349271 +v 0.222678 -0.134476 -0.193630 +v 0.390332 0.205402 -0.223934 +v 0.575276 0.492128 -0.391647 +v 0.749355 0.682049 -0.671236 +v 0.886066 0.746251 -1.020136 +v 1.175776 0.279161 -1.691476 +v 0.964598 0.674962 -1.385230 +v -0.035128 -0.119721 -0.315150 +v -0.086032 0.232667 -0.448474 +v -0.047123 0.527750 -0.685022 +v 0.075675 0.720607 -0.988783 +v 0.263667 0.781874 -1.313511 +v 0.972993 0.479033 -1.710937 +v 0.488234 0.702226 -1.609770 +v -0.196937 -0.298725 -0.467544 +v -0.385016 -0.098091 -0.730062 +v -0.437765 0.095595 -1.052934 +v -0.347153 0.252844 -1.387008 +v -0.126975 0.349718 -1.681423 +v 0.715187 0.493788 -1.832457 +v 0.189250 0.371469 -1.891358 +v -0.167963 -0.566632 -0.561542 +v -0.331480 -0.593117 -0.903747 +v -0.367817 -0.551189 -1.279865 +v -0.271442 -0.447229 -1.632637 +v -0.057027 -0.297065 -1.908355 +v 0.553377 0.314784 -1.984851 +v 0.242786 -0.123558 -2.065043 +v 0.097839 -0.475764 -0.305349 +v 0.909974 0.188293 -1.947670 +v 0.582351 0.046877 -2.078849 +v 0.915026 -0.816882 -0.127186 +v 0.923421 -1.012811 -0.452893 +v 1.172832 -0.831638 -0.005666 +v 1.001952 -1.084100 -0.817987 +v 1.399785 -1.040075 -0.228353 +v 1.138664 -1.019898 -1.166887 +v 1.624352 -1.119723 -0.524612 +v 1.312743 -0.829977 -1.446476 +v 1.812344 -1.058455 -0.849340 +v 1.497687 -0.543251 -1.614189 +v 1.935142 -0.865599 -1.153101 +v 1.665340 -0.203373 -1.644492 +v 1.974051 -0.570516 -1.389649 +v 1.334641 -0.652633 0.146728 +v 1.698769 -0.709318 0.053235 +v 2.014994 -0.687568 -0.156699 +v 2.235172 -0.590694 -0.451115 +v 2.325784 -0.433444 -0.785188 +v 1.923146 -0.218128 -1.522972 +v 2.273035 -0.239758 -1.108061 +v 1.305668 -0.384726 0.240726 +v 1.645233 -0.214291 0.226921 +v 1.945045 -0.040785 0.070232 +v 2.159460 0.109379 -0.205486 +v 2.255836 0.213339 -0.558257 +v 2.084956 -0.039124 -1.370578 +v 2.219499 0.255268 -0.934376 +v 1.102884 -0.184854 0.221265 +v 1.270537 0.155024 0.190961 +v 1.455482 0.441749 0.023249 +v 1.629561 0.631670 -0.256340 +v 1.766272 0.695873 -0.605240 +v 2.055982 0.228783 -1.276580 +v 1.844803 0.624583 -0.970335 +v 0.845078 -0.170099 0.099745 +v 0.794174 0.182288 -0.033579 +v 0.833082 0.477372 -0.270127 +v 0.955880 0.670228 -0.573887 +v 1.143873 0.731496 -0.898616 +v 1.853198 0.428655 -1.296041 +v 1.368439 0.651848 -1.194875 +v 0.683269 -0.349104 -0.052649 +v 0.495189 -0.148469 -0.315166 +v 0.442440 0.045216 -0.638039 +v 0.533053 0.202466 -0.972113 +v 0.753231 0.299340 -1.266528 +v 1.595392 0.443410 -1.417561 +v 1.069455 0.321090 -1.476463 +v 0.712242 -0.617010 -0.146647 +v 0.548725 -0.643496 -0.488852 +v 0.512389 -0.601567 -0.864970 +v 0.608764 -0.497607 -1.217741 +v 0.823179 -0.347443 -1.493459 +v 1.433583 0.264405 -1.569956 +v 1.122991 -0.173936 -1.650148 +v 0.978045 -0.526142 0.109547 +v 1.790179 0.137915 -1.532774 +v 1.462557 -0.003501 -1.663953 +v -0.504204 0.173375 -0.428600 +v -0.495809 -0.022554 -0.754306 +v -0.246398 0.158620 -0.307080 +v -0.417278 -0.093843 -1.119401 +v -0.019445 -0.049818 -0.529767 +v -0.280566 -0.029640 -1.468301 +v 0.205122 -0.129466 -0.826025 +v -0.106487 0.160281 -1.747890 +v 0.393114 -0.068198 -1.150754 +v 0.078457 0.447006 -1.915603 +v 0.515912 0.124658 -1.454515 +v 0.246110 0.786884 -1.945906 +v 0.554821 0.419741 -1.691063 +v -0.084589 0.337624 -0.154686 +v 0.279539 0.280939 -0.248179 +v 0.595763 0.302689 -0.458113 +v 0.815942 0.399563 -0.752528 +v 0.906554 0.556813 -1.086602 +v 0.503917 0.772129 -1.824386 +v 0.853805 0.750499 -1.409475 +v -0.113562 0.605531 -0.060688 +v 0.226003 0.775966 -0.074493 +v 0.525815 0.949473 -0.231182 +v 0.740230 1.099637 -0.506900 +v 0.836606 1.203596 -0.859671 +v 0.665726 0.951133 -1.671992 +v 0.800269 1.245525 -1.235790 +v -0.316346 0.805403 -0.080149 +v -0.148693 1.145281 -0.110453 +v 0.036252 1.432006 -0.278165 +v 0.210330 1.621927 -0.557754 +v 0.347042 1.686130 -0.906654 +v 0.636752 1.219040 -1.577994 +v 0.425573 1.614841 -1.271749 +v -0.574152 0.820158 -0.201669 +v -0.625057 1.172545 -0.334992 +v -0.586148 1.467629 -0.571540 +v -0.463350 1.660485 -0.875301 +v -0.275357 1.721753 -1.200030 +v 0.433968 1.418912 -1.597455 +v -0.050791 1.642105 -1.496289 +v -0.735961 0.641153 -0.354063 +v -0.924041 0.841788 -0.616580 +v -0.976790 1.035473 -0.939453 +v -0.886178 1.192723 -1.273527 +v -0.665999 1.289597 -1.567942 +v 0.176162 1.433667 -1.718975 +v -0.349775 1.311347 -1.777876 +v -0.706988 0.373247 -0.448061 +v -0.870505 0.346761 -0.790266 +v -0.906841 0.388690 -1.166384 +v -0.810466 0.492650 -1.519155 +v -0.596051 0.642814 -1.794873 +v 0.014353 1.254662 -1.871369 +v -0.296239 0.816321 -1.951562 +v -0.441185 0.464115 -0.191867 +v 0.370949 1.128172 -1.834188 +v 0.043326 0.986756 -1.965367 +v 0.376002 0.122997 -0.013705 +v 0.384397 -0.072932 -0.339411 +v 0.633808 0.108241 0.107815 +v 0.462928 -0.144222 -0.704505 +v 0.860760 -0.100197 -0.114871 +v 0.599639 -0.080019 -1.053406 +v 1.085327 -0.179845 -0.411130 +v 0.773718 0.109902 -1.332994 +v 1.273320 -0.118577 -0.735859 +v 0.958663 0.396627 -1.500707 +v 1.396117 0.074279 -1.039619 +v 1.126316 0.736506 -1.531011 +v 1.435026 0.369363 -1.276168 +v 0.795617 0.287246 0.260210 +v 1.159745 0.230561 0.166716 +v 1.475969 0.252311 -0.043218 +v 1.696147 0.349185 -0.337633 +v 1.786759 0.506435 -0.671707 +v 1.384122 0.721750 -1.409491 +v 1.734010 0.700120 -0.994580 +v 0.766643 0.555152 0.354208 +v 1.106209 0.725587 0.340402 +v 1.406021 0.899094 0.183713 +v 1.620436 1.049258 -0.092005 +v 1.716811 1.153218 -0.444776 +v 1.545931 0.900755 -1.257097 +v 1.680474 1.195147 -0.820894 +v 0.563859 0.755024 0.334747 +v 0.731513 1.094903 0.304443 +v 0.916457 1.381628 0.136730 +v 1.090536 1.571549 -0.142859 +v 1.227247 1.635752 -0.491759 +v 1.516958 1.168661 -1.163099 +v 1.305779 1.564462 -0.856854 +v 0.306053 0.769780 0.213227 +v 0.255149 1.122167 0.079903 +v 0.294058 1.417251 -0.156645 +v 0.416856 1.610107 -0.460406 +v 0.604848 1.671375 -0.785134 +v 1.314174 1.368533 -1.182560 +v 0.829415 1.591727 -1.081393 +v 0.144244 0.590775 0.060832 +v -0.043835 0.791409 -0.201685 +v -0.096584 0.985095 -0.524558 +v -0.005972 1.142345 -0.858631 +v 0.214206 1.239219 -1.153047 +v 1.056368 1.383289 -1.304080 +v 0.530431 1.260969 -1.362981 +v 0.173218 0.322869 -0.033166 +v 0.009701 0.296383 -0.375370 +v -0.026636 0.338312 -0.751489 +v 0.069740 0.442272 -1.104260 +v 0.284155 0.592436 -1.379978 +v 0.894558 1.204284 -1.456474 +v 0.583967 0.765943 -1.536667 +v 0.439020 0.413736 0.223028 +v 1.251155 1.077794 -1.419293 +v 0.923532 0.936378 -1.550472 +v -0.163023 1.062875 0.099777 +v -0.154628 0.866947 -0.225929 +v 0.094783 1.048120 0.221297 +v -0.076097 0.795657 -0.591024 +v 0.321736 0.839682 -0.001390 +v 0.060615 0.859860 -0.939924 +v 0.546303 0.760034 -0.297649 +v 0.234694 1.049781 -1.219513 +v 0.734295 0.821302 -0.622377 +v 0.419638 1.336506 -1.387226 +v 0.857093 1.014158 -0.926138 +v 0.587291 1.676384 -1.417529 +v 0.896002 1.309242 -1.162686 +v 0.256592 1.227125 0.373691 +v 0.620720 1.170440 0.280198 +v 0.936944 1.192190 0.070264 +v 1.157123 1.289064 -0.224152 +v 1.247735 1.446314 -0.558225 +v 0.845098 1.661629 -1.296009 +v 1.194986 1.639999 -0.881098 +v 0.227619 1.495031 0.467689 +v 0.567184 1.665466 0.453884 +v 0.866996 1.838973 0.297195 +v 1.081411 1.989137 0.021477 +v 1.177787 2.093097 -0.331294 +v 1.006907 1.840634 -1.143615 +v 1.141450 2.135026 -0.707413 +v 0.024835 1.694903 0.448228 +v 0.192488 2.034781 0.417924 +v 0.377433 2.321507 0.250212 +v 0.551511 2.511428 -0.029377 +v 0.688223 2.575631 -0.378277 +v 0.977933 2.108540 -1.049617 +v 0.766754 2.504341 -0.743372 +v -0.232971 1.709659 0.326708 +v -0.283875 2.062046 0.193385 +v -0.244967 2.357130 -0.043164 +v -0.122169 2.549986 -0.346924 +v 0.065824 2.611253 -0.671653 +v 0.775149 2.308412 -1.069078 +v 0.290391 2.531605 -0.967912 +v -0.394780 1.530654 0.174314 +v -0.582860 1.731288 -0.088203 +v -0.635609 1.924974 -0.411076 +v -0.544996 2.082223 -0.745150 +v -0.324818 2.179098 -1.039565 +v 0.517343 2.323168 -1.190598 +v -0.008594 2.200848 -1.249500 +v -0.365807 1.262747 0.080316 +v -0.529323 1.236262 -0.261889 +v -0.565660 1.278190 -0.638007 +v -0.469285 1.382150 -0.990778 +v -0.254870 1.532314 -1.266496 +v 0.355534 2.144163 -1.342992 +v 0.044942 1.705822 -1.423185 +v -0.100004 1.353615 0.336510 +v 0.712130 2.017673 -1.305811 +v 0.384508 1.876257 -1.436990 +vt 0.825269 0.653237 +vt 0.839805 0.644867 +vt 0.825269 0.668555 +vt 0.303150 0.181763 +vt 0.320652 0.192664 +vt 0.288172 0.193944 +vt 0.709288 0.967084 +vt 0.729202 0.968803 +vt 0.710234 0.995196 +vt 0.749647 0.967943 +vt 0.730225 0.999231 +vt 0.767511 0.964636 +vt 0.750592 0.996055 +vt 0.763082 0.835940 +vt 0.746117 0.830842 +vt 0.763082 0.807637 +vt 0.275024 0.184518 +vt 0.261273 0.191550 +vt 0.301082 0.208579 +vt 0.262763 0.206938 +vt 0.311788 0.226195 +vt 0.267883 0.225557 +vt 0.318660 0.244110 +vt 0.275854 0.244572 +vt 0.320652 0.259596 +vt 0.285461 0.261088 +vt 0.746117 0.815524 +vt 0.742972 0.787315 +vt 0.814385 0.679553 +vt 0.819696 0.693493 +vt 0.798994 0.679789 +vt 0.241808 0.213134 +vt 0.240504 0.233652 +vt 0.246218 0.253333 +vt 0.749148 0.774460 +vt 0.711990 0.773891 +vt 0.735234 0.804527 +vt 0.714533 0.786880 +vt 0.791256 0.693928 +vt 0.788111 0.669124 +vt 0.924704 0.984453 +vt 0.907062 0.989892 +vt 0.923981 0.955922 +vt 0.886695 0.992104 +vt 0.906117 0.952615 +vt 0.866703 0.990751 +vt 0.885672 0.951755 +vt 0.850132 0.986039 +vt 0.865758 0.953473 +vt 0.719843 0.804291 +vt 0.694423 0.806586 +vt 0.771147 0.674222 +vt 0.788111 0.653806 +vt 0.924704 0.934406 +vt 0.907062 0.924503 +vt 0.886695 0.921327 +vt 0.160356 0.080018 +vt 0.142840 0.090882 +vt 0.140132 0.063929 +vt 0.708960 0.814956 +vt 0.694423 0.834890 +vt 0.771147 0.645918 +vt 0.798994 0.642808 +vt 0.160356 0.013058 +vt 0.157988 0.028476 +vt 0.134937 0.000000 +vt 0.150887 0.046339 +vt 0.124778 0.011415 +vt 0.114940 0.027872 +vt 0.127361 0.078568 +vt 0.106921 0.046868 +vt 0.114518 0.088027 +vt 0.101942 0.065510 +vt 0.791256 0.625597 +vt 0.814385 0.642573 +vt 0.785081 0.612741 +vt 0.819696 0.625161 +vt 0.098034 0.003375 +vt 0.085993 0.019171 +vt 0.080178 0.038829 +vt 0.714533 0.855211 +vt 0.719843 0.841272 +vt 0.742972 0.855646 +vt 0.807116 0.661755 +vt 0.727112 0.823474 +vt 0.708960 0.830274 +vt 0.735234 0.841507 +vt 0.693662 0.934518 +vt 0.710234 0.929807 +vt 0.692938 0.963049 +vt 0.730225 0.928454 +vt 0.750592 0.930666 +vt 0.768234 0.936105 +vt 0.825303 0.316785 +vt 0.839840 0.308415 +vt 0.825303 0.332102 +vt 0.062676 0.181763 +vt 0.080178 0.192664 +vt 0.047698 0.193944 +vt 0.633992 0.967084 +vt 0.653906 0.968803 +vt 0.634938 0.995196 +vt 0.674351 0.967943 +vt 0.654929 0.999231 +vt 0.692215 0.964636 +vt 0.675296 0.996055 +vt 0.852755 0.254655 +vt 0.835791 0.249557 +vt 0.852755 0.226351 +vt 0.034550 0.184518 +vt 0.020799 0.191550 +vt 0.060608 0.208579 +vt 0.022289 0.206938 +vt 0.071314 0.226195 +vt 0.027409 0.225557 +vt 0.078186 0.244110 +vt 0.035380 0.244572 +vt 0.080178 0.259596 +vt 0.044987 0.261088 +vt 0.835791 0.234239 +vt 0.832645 0.206030 +vt 0.814420 0.343100 +vt 0.819730 0.357040 +vt 0.799029 0.343336 +vt 0.001334 0.213134 +vt 0.000030 0.233652 +vt 0.005744 0.253333 +vt 0.838821 0.193174 +vt 0.801664 0.192606 +vt 0.824907 0.223241 +vt 0.804206 0.205595 +vt 0.791291 0.357475 +vt 0.788146 0.332671 +vt 0.998511 0.596658 +vt 0.980868 0.602098 +vt 0.997787 0.568128 +vt 0.960501 0.604309 +vt 0.979923 0.564820 +vt 0.940510 0.602956 +vt 0.959478 0.563960 +vt 0.923938 0.598245 +vt 0.939565 0.565679 +vt 0.809516 0.223006 +vt 0.784096 0.225301 +vt 0.771181 0.337769 +vt 0.788146 0.317353 +vt 0.998511 0.546612 +vt 0.980868 0.536709 +vt 0.960501 0.533533 +vt 0.240533 0.080018 +vt 0.223017 0.090882 +vt 0.220309 0.063929 +vt 0.798633 0.233670 +vt 0.784097 0.253604 +vt 0.771181 0.309465 +vt 0.799029 0.306355 +vt 0.240533 0.013058 +vt 0.238166 0.028476 +vt 0.215115 0.000000 +vt 0.231064 0.046339 +vt 0.204955 0.011415 +vt 0.195117 0.027872 +vt 0.207539 0.078568 +vt 0.187099 0.046868 +vt 0.194696 0.088027 +vt 0.182120 0.065510 +vt 0.791291 0.289144 +vt 0.819730 0.288709 +vt 0.785115 0.276288 +vt 0.178212 0.003375 +vt 0.166171 0.019171 +vt 0.160356 0.038829 +vt 0.804206 0.273926 +vt 0.809516 0.259986 +vt 0.832645 0.274361 +vt 0.807151 0.325302 +vt 0.816786 0.242188 +vt 0.798633 0.248988 +vt 0.814420 0.306120 +vt 0.824907 0.260222 +vt 0.618366 0.934518 +vt 0.634938 0.929807 +vt 0.617643 0.963049 +vt 0.654929 0.928454 +vt 0.675296 0.930666 +vt 0.692938 0.936105 +vt 0.443302 0.503616 +vt 0.457838 0.495246 +vt 0.443302 0.518934 +vt 0.303180 0.000000 +vt 0.320682 0.010901 +vt 0.288202 0.012181 +vt 0.032598 0.967497 +vt 0.052512 0.969216 +vt 0.033544 0.995609 +vt 0.072957 0.968356 +vt 0.053535 0.999644 +vt 0.090821 0.965048 +vt 0.073902 0.996468 +vt 0.775356 0.023413 +vt 0.792320 0.028511 +vt 0.775356 0.051717 +vt 0.275054 0.002754 +vt 0.261302 0.009787 +vt 0.301112 0.026816 +vt 0.262793 0.025175 +vt 0.311817 0.044432 +vt 0.267913 0.043793 +vt 0.318689 0.062347 +vt 0.275884 0.062808 +vt 0.320681 0.077833 +vt 0.285491 0.079324 +vt 0.792320 0.043829 +vt 0.795466 0.072038 +vt 0.432419 0.529932 +vt 0.437729 0.543872 +vt 0.417027 0.530168 +vt 0.241837 0.031370 +vt 0.246248 0.071570 +vt 0.789290 0.084894 +vt 0.823905 0.072474 +vt 0.803203 0.054827 +vt 0.409290 0.544307 +vt 0.406144 0.519503 +vt 0.998783 0.911631 +vt 0.981141 0.917070 +vt 0.998060 0.883100 +vt 0.960774 0.919282 +vt 0.980196 0.879793 +vt 0.940782 0.917929 +vt 0.959751 0.878933 +vt 0.924211 0.913217 +vt 0.939837 0.880652 +vt 0.818595 0.055063 +vt 0.844014 0.052768 +vt 0.389180 0.524601 +vt 0.406144 0.504185 +vt 0.998783 0.861584 +vt 0.981141 0.851681 +vt 0.960774 0.848505 +vt 0.080178 0.170900 +vt 0.059954 0.154811 +vt 0.829478 0.044398 +vt 0.844014 0.024464 +vt 0.389180 0.496297 +vt 0.417027 0.493187 +vt 0.080178 0.103940 +vt 0.077811 0.119357 +vt 0.054759 0.090882 +vt 0.070709 0.137221 +vt 0.044600 0.102296 +vt 0.034762 0.118754 +vt 0.047183 0.169450 +vt 0.026743 0.137750 +vt 0.034341 0.178908 +vt 0.021765 0.156392 +vt 0.409289 0.475976 +vt 0.432419 0.492952 +vt 0.403114 0.463120 +vt 0.437729 0.475540 +vt 0.017857 0.094257 +vt 0.005815 0.110053 +vt 0.000000 0.129711 +vt 0.823905 0.004142 +vt 0.818595 0.018082 +vt 0.795466 0.003707 +vt 0.425149 0.512134 +vt 0.811325 0.035880 +vt 0.829478 0.029080 +vt 0.803203 0.017846 +vt 0.016972 0.934931 +vt 0.033544 0.930220 +vt 0.016248 0.963462 +vt 0.053535 0.928867 +vt 0.073902 0.931078 +vt 0.091544 0.936518 +vt 0.827798 0.144751 +vt 0.842335 0.136382 +vt 0.827798 0.160069 +vt 0.223002 0.181763 +vt 0.240504 0.192664 +vt 0.208024 0.193944 +vt 0.941054 0.959957 +vt 0.960967 0.961675 +vt 0.941999 0.988069 +vt 0.981412 0.960816 +vt 0.961990 0.992103 +vt 0.999277 0.957508 +vt 0.982358 0.988927 +vt 0.774001 0.388189 +vt 0.790965 0.393287 +vt 0.774001 0.416493 +vt 0.194876 0.184518 +vt 0.181125 0.191550 +vt 0.220934 0.208579 +vt 0.182615 0.206938 +vt 0.231640 0.226195 +vt 0.187735 0.225557 +vt 0.238512 0.244110 +vt 0.195706 0.244572 +vt 0.240504 0.259596 +vt 0.205313 0.261088 +vt 0.790965 0.408605 +vt 0.794111 0.436814 +vt 0.816915 0.171067 +vt 0.822225 0.185007 +vt 0.801524 0.171303 +vt 0.161660 0.213134 +vt 0.160356 0.233652 +vt 0.166070 0.253333 +vt 0.787935 0.449670 +vt 0.825092 0.450239 +vt 0.801848 0.419603 +vt 0.822550 0.437250 +vt 0.793786 0.185442 +vt 0.790641 0.160638 +vt 0.993362 0.768033 +vt 0.975720 0.773472 +vt 0.992639 0.739502 +vt 0.955353 0.775683 +vt 0.974775 0.736195 +vt 0.935362 0.774330 +vt 0.954330 0.735335 +vt 0.918790 0.769619 +vt 0.934417 0.737053 +vt 0.817240 0.419839 +vt 0.842659 0.417544 +vt 0.773676 0.165736 +vt 0.790641 0.145320 +vt 0.993362 0.717986 +vt 0.975720 0.708083 +vt 0.955353 0.704907 +vt 0.080178 0.080018 +vt 0.062662 0.090882 +vt 0.059954 0.063929 +vt 0.828123 0.409174 +vt 0.842659 0.389240 +vt 0.773676 0.137432 +vt 0.801524 0.134322 +vt 0.080178 0.013058 +vt 0.077811 0.028476 +vt 0.054759 0.000000 +vt 0.070709 0.046339 +vt 0.044600 0.011415 +vt 0.034762 0.027872 +vt 0.047183 0.078568 +vt 0.026743 0.046868 +vt 0.034341 0.088027 +vt 0.021765 0.065510 +vt 0.793786 0.117111 +vt 0.816915 0.134087 +vt 0.787610 0.104255 +vt 0.822225 0.116675 +vt 0.017857 0.003375 +vt 0.005815 0.019171 +vt 0.000000 0.038829 +vt 0.822550 0.368918 +vt 0.817240 0.382858 +vt 0.794111 0.368483 +vt 0.809646 0.153269 +vt 0.809970 0.400656 +vt 0.828123 0.393856 +vt 0.801848 0.382622 +vt 0.925427 0.927391 +vt 0.941999 0.922680 +vt 0.924704 0.955922 +vt 0.961990 0.921327 +vt 0.982358 0.923538 +vt 1.000000 0.928978 +vt 0.825471 0.734993 +vt 0.840007 0.726623 +vt 0.825471 0.750311 +vt 0.303180 0.090936 +vt 0.320682 0.101837 +vt 0.288202 0.103117 +vt 0.474666 0.967497 +vt 0.494579 0.969216 +vt 0.475611 0.995609 +vt 0.515024 0.968356 +vt 0.495602 0.999644 +vt 0.532888 0.965048 +vt 0.515969 0.996467 +vt 0.694423 0.835940 +vt 0.677459 0.830842 +vt 0.694423 0.807637 +vt 0.275054 0.093691 +vt 0.261302 0.100723 +vt 0.301112 0.117752 +vt 0.262793 0.116111 +vt 0.311817 0.135368 +vt 0.267913 0.134730 +vt 0.318689 0.153283 +vt 0.275884 0.153745 +vt 0.320681 0.168769 +vt 0.285491 0.170261 +vt 0.677459 0.815524 +vt 0.674314 0.787315 +vt 0.814587 0.761309 +vt 0.819897 0.775248 +vt 0.799196 0.761544 +vt 0.241837 0.122307 +vt 0.240533 0.142825 +vt 0.246248 0.162506 +vt 0.680490 0.774460 +vt 0.643332 0.773891 +vt 0.666576 0.804527 +vt 0.645875 0.786880 +vt 0.791458 0.775683 +vt 0.788313 0.750879 +vt 0.998783 0.840854 +vt 0.981141 0.846294 +vt 0.998060 0.812324 +vt 0.980196 0.809016 +vt 0.940782 0.847152 +vt 0.959751 0.808157 +vt 0.924211 0.842441 +vt 0.939837 0.809875 +vt 0.651185 0.804291 +vt 0.625765 0.806586 +vt 0.771349 0.755977 +vt 0.788313 0.735561 +vt 0.998783 0.790808 +vt 0.981141 0.780905 +vt 0.960774 0.777729 +vt 0.160356 0.170900 +vt 0.142840 0.181763 +vt 0.140132 0.154811 +vt 0.640301 0.814956 +vt 0.625765 0.834890 +vt 0.771349 0.727674 +vt 0.799196 0.724564 +vt 0.160356 0.103940 +vt 0.157988 0.119357 +vt 0.134937 0.090882 +vt 0.150887 0.137221 +vt 0.124778 0.102296 +vt 0.114940 0.118754 +vt 0.127361 0.169450 +vt 0.106921 0.137750 +vt 0.114518 0.178908 +vt 0.101942 0.156392 +vt 0.791458 0.707352 +vt 0.814587 0.724328 +vt 0.785282 0.694497 +vt 0.819897 0.706917 +vt 0.098034 0.094257 +vt 0.085993 0.110053 +vt 0.080178 0.129711 +vt 0.645875 0.855211 +vt 0.651185 0.841272 +vt 0.674314 0.855646 +vt 0.807318 0.743511 +vt 0.658454 0.823474 +vt 0.640301 0.830274 +vt 0.666576 0.841507 +vt 0.459039 0.934931 +vt 0.475611 0.930220 +vt 0.458316 0.963462 +vt 0.495602 0.928867 +vt 0.515969 0.931078 +vt 0.533612 0.936518 +vt 0.825303 0.491422 +vt 0.839840 0.483052 +vt 0.825303 0.506740 +vt 0.160326 0.192664 +vt 0.127846 0.193944 +vt 0.552725 0.967019 +vt 0.572639 0.968738 +vt 0.553670 0.995131 +vt 0.593084 0.967878 +vt 0.573662 0.999166 +vt 0.610948 0.964570 +vt 0.594029 0.995990 +vt 0.605034 0.835875 +vt 0.588069 0.830777 +vt 0.605034 0.807571 +vt 0.114698 0.184518 +vt 0.100947 0.191550 +vt 0.140756 0.208579 +vt 0.102437 0.206938 +vt 0.151462 0.226195 +vt 0.107558 0.225557 +vt 0.158334 0.244110 +vt 0.115528 0.244572 +vt 0.160326 0.259596 +vt 0.125135 0.261088 +vt 0.588069 0.815459 +vt 0.584924 0.787250 +vt 0.814420 0.517738 +vt 0.819730 0.531677 +vt 0.799029 0.517973 +vt 0.081482 0.213134 +vt 0.080178 0.233652 +vt 0.085892 0.253333 +vt 0.591100 0.774395 +vt 0.553942 0.773826 +vt 0.577186 0.804461 +vt 0.556485 0.786815 +vt 0.791291 0.532112 +vt 0.788146 0.507308 +vt 0.993389 0.077812 +vt 0.975747 0.083251 +vt 0.992666 0.049281 +vt 0.955380 0.085462 +vt 0.974802 0.045974 +vt 0.935388 0.084110 +vt 0.954357 0.045114 +vt 0.918817 0.079398 +vt 0.934443 0.046832 +vt 0.561795 0.804226 +vt 0.536375 0.806521 +vt 0.771181 0.512406 +vt 0.788146 0.491990 +vt 0.993389 0.027765 +vt 0.975747 0.017862 +vt 0.955380 0.014686 +vt 0.240533 0.170900 +vt 0.220309 0.154811 +vt 0.550912 0.814891 +vt 0.536375 0.834825 +vt 0.771181 0.484103 +vt 0.799029 0.480992 +vt 0.240533 0.103940 +vt 0.238166 0.119357 +vt 0.215115 0.090882 +vt 0.231064 0.137221 +vt 0.204955 0.102296 +vt 0.195117 0.118754 +vt 0.207539 0.169450 +vt 0.187099 0.137750 +vt 0.194696 0.178908 +vt 0.182120 0.156392 +vt 0.791291 0.463781 +vt 0.814420 0.480757 +vt 0.785115 0.450926 +vt 0.819730 0.463346 +vt 0.178212 0.094257 +vt 0.166171 0.110053 +vt 0.160356 0.129711 +vt 0.556485 0.855146 +vt 0.561795 0.841206 +vt 0.584924 0.855581 +vt 0.807151 0.499939 +vt 0.569064 0.823408 +vt 0.550912 0.830209 +vt 0.577186 0.841442 +vt 0.537099 0.934453 +vt 0.553670 0.929742 +vt 0.536375 0.962984 +vt 0.573662 0.928389 +vt 0.594029 0.930600 +vt 0.611671 0.936040 +vt 0.335889 0.698867 +vt 0.339295 0.681711 +vt 0.349087 0.705810 +vt 0.344914 0.662600 +vt 0.363682 0.694539 +vt 0.351891 0.644445 +vt 0.376777 0.679361 +vt 0.359163 0.630008 +vt 0.386379 0.662587 +vt 0.076677 0.631463 +vt 0.086117 0.647344 +vt 0.054214 0.641208 +vt 0.720786 0.233514 +vt 0.732601 0.249733 +vt 0.711465 0.252422 +vt 0.446511 0.714789 +vt 0.463744 0.722424 +vt 0.440043 0.724990 +vt 0.374588 0.709971 +vt 0.023422 0.628538 +vt 0.038236 0.631985 +vt 0.005099 0.658814 +vt 0.018403 0.664756 +vt 0.068924 0.654802 +vt 0.035891 0.671484 +vt 0.080127 0.670698 +vt 0.072537 0.683239 +vt 0.451792 0.741274 +vt 0.425851 0.729184 +vt 0.460114 0.758442 +vt 0.425568 0.749023 +vt 0.463744 0.773881 +vt 0.425851 0.768567 +vt 0.014669 0.700553 +vt 0.054901 0.677974 +vt 0.032441 0.704556 +vt 0.052260 0.703287 +vt 0.412248 0.724914 +vt 0.400433 0.741133 +vt 0.426657 0.784840 +vt 0.393011 0.758258 +vt 0.698862 0.763287 +vt 0.694423 0.744840 +vt 0.732212 0.759455 +vt 0.696034 0.724898 +vt 0.725236 0.741299 +vt 0.703448 0.706499 +vt 0.719616 0.722189 +vt 0.407203 0.714681 +vt 0.395224 0.611404 +vt 0.385941 0.627235 +vt 0.377532 0.603942 +vt 0.739485 0.773891 +vt 0.771349 0.757130 +vt 0.766701 0.741313 +vt 0.744004 0.709360 +vt 0.716211 0.705033 +vt 0.388909 0.588069 +vt 0.381269 0.575513 +vt 0.362826 0.617487 +vt 0.363416 0.580742 +vt 0.347028 0.626640 +vt 0.344382 0.587174 +vt 0.332545 0.630008 +vt 0.327065 0.593830 +vt 0.757099 0.724538 +vt 0.771349 0.704375 +vt 0.784096 0.252223 +vt 0.766864 0.259858 +vt 0.772144 0.233374 +vt 0.380040 0.561795 +vt 0.361145 0.555394 +vt 0.341414 0.554055 +vt 0.784096 0.200767 +vt 0.780467 0.216206 +vt 0.746204 0.206080 +vt 0.760396 0.249657 +vt 0.745920 0.225624 +vt 0.426657 0.712070 +vt 0.441467 0.704556 +vt 0.747010 0.262577 +vt 0.727556 0.259966 +vt 0.086117 0.686476 +vt 0.071108 0.696938 +vt 0.748217 0.274361 +vt 0.761820 0.270091 +vt 0.395224 0.572283 +vt 0.746204 0.245463 +vt 0.385941 0.554949 +vt 0.323126 0.697400 +vt 0.315712 0.679001 +vt 0.314101 0.659060 +vt 0.318540 0.640613 +vt 0.747010 0.189807 +vt 0.711465 0.200965 +vt 0.713364 0.216389 +vt 0.647586 0.074358 +vt 0.650992 0.057202 +vt 0.660785 0.081301 +vt 0.656611 0.038091 +vt 0.675379 0.070030 +vt 0.663588 0.019936 +vt 0.688475 0.054852 +vt 0.670861 0.005499 +vt 0.698077 0.038078 +vt 0.687636 0.375353 +vt 0.697076 0.391233 +vt 0.665173 0.385097 +vt 0.712046 0.044616 +vt 0.723861 0.060835 +vt 0.702724 0.063523 +vt 0.369501 0.720204 +vt 0.386733 0.727840 +vt 0.363033 0.730405 +vt 0.686286 0.085462 +vt 0.634381 0.372428 +vt 0.649195 0.375875 +vt 0.616058 0.402704 +vt 0.629362 0.408646 +vt 0.679883 0.398692 +vt 0.646850 0.415374 +vt 0.691086 0.414588 +vt 0.665860 0.421864 +vt 0.374781 0.746689 +vt 0.348557 0.754438 +vt 0.383104 0.763857 +vt 0.386733 0.779296 +vt 0.348840 0.773982 +vt 0.625628 0.444443 +vt 0.643400 0.448446 +vt 0.683496 0.427129 +vt 0.663219 0.447177 +vt 0.348840 0.734599 +vt 0.335238 0.730329 +vt 0.323423 0.746548 +vt 0.349647 0.790255 +vt 0.316001 0.763673 +vt 0.701514 0.437842 +vt 0.697076 0.419395 +vt 0.734865 0.434010 +vt 0.698686 0.399454 +vt 0.727888 0.415854 +vt 0.706100 0.381054 +vt 0.722269 0.396744 +vt 0.330193 0.720097 +vt 0.694256 0.334861 +vt 0.684973 0.350692 +vt 0.676564 0.327399 +vt 0.742137 0.448446 +vt 0.774001 0.431685 +vt 0.769354 0.415868 +vt 0.759751 0.399093 +vt 0.718863 0.379588 +vt 0.746656 0.383915 +vt 0.687941 0.311526 +vt 0.680301 0.298970 +vt 0.661858 0.340944 +vt 0.662448 0.304199 +vt 0.646060 0.350097 +vt 0.643414 0.310632 +vt 0.631577 0.353466 +vt 0.626097 0.317287 +vt 0.774001 0.378930 +vt 0.775356 0.063324 +vt 0.758124 0.070960 +vt 0.763404 0.044475 +vt 0.679072 0.285252 +vt 0.660177 0.278851 +vt 0.640446 0.277512 +vt 0.775356 0.011868 +vt 0.771726 0.027307 +vt 0.738270 0.000909 +vt 0.737463 0.017182 +vt 0.751656 0.060759 +vt 0.737180 0.036726 +vt 0.349647 0.717485 +vt 0.364456 0.709971 +vt 0.738270 0.073679 +vt 0.718816 0.071067 +vt 0.697076 0.430366 +vt 0.682067 0.440828 +vt 0.739477 0.085462 +vt 0.753079 0.081192 +vt 0.694256 0.295740 +vt 0.737463 0.056565 +vt 0.684973 0.278407 +vt 0.634824 0.072891 +vt 0.627409 0.054492 +vt 0.625799 0.034551 +vt 0.630237 0.016104 +vt 0.702724 0.012067 +vt 0.645907 0.169747 +vt 0.649312 0.152591 +vt 0.659105 0.176689 +vt 0.654931 0.133480 +vt 0.673700 0.165419 +vt 0.661908 0.115325 +vt 0.686795 0.150241 +vt 0.669181 0.100888 +vt 0.696397 0.133467 +vt 0.221094 0.627227 +vt 0.230534 0.643108 +vt 0.198631 0.636972 +vt 0.764355 0.141735 +vt 0.752540 0.125516 +vt 0.757585 0.115283 +vt 0.753915 0.623877 +vt 0.771147 0.631512 +vt 0.747446 0.634078 +vt 0.684606 0.180851 +vt 0.167839 0.624302 +vt 0.182653 0.627749 +vt 0.149516 0.654578 +vt 0.162820 0.660520 +vt 0.213341 0.650566 +vt 0.180308 0.667248 +vt 0.224544 0.666462 +vt 0.199318 0.673739 +vt 0.759195 0.650362 +vt 0.733254 0.638272 +vt 0.767517 0.667530 +vt 0.732971 0.658111 +vt 0.771147 0.682969 +vt 0.733254 0.677655 +vt 0.159086 0.696317 +vt 0.176858 0.700321 +vt 0.216954 0.679003 +vt 0.196677 0.699051 +vt 0.719651 0.634002 +vt 0.707836 0.650221 +vt 0.734060 0.693928 +vt 0.700414 0.667346 +vt 0.698694 0.346871 +vt 0.694256 0.328424 +vt 0.732045 0.343039 +vt 0.695867 0.308483 +vt 0.725068 0.324883 +vt 0.703281 0.290083 +vt 0.719449 0.305773 +vt 0.714607 0.623769 +vt 0.634539 0.251747 +vt 0.625256 0.267578 +vt 0.616848 0.244285 +vt 0.739318 0.357475 +vt 0.771181 0.340714 +vt 0.766534 0.324897 +vt 0.756932 0.308122 +vt 0.716044 0.288617 +vt 0.743836 0.292944 +vt 0.628224 0.228412 +vt 0.620585 0.215856 +vt 0.602141 0.257830 +vt 0.602731 0.221085 +vt 0.586344 0.266983 +vt 0.583697 0.227517 +vt 0.571860 0.270351 +vt 0.566380 0.234173 +vt 0.771181 0.287959 +vt 0.701045 0.123026 +vt 0.718277 0.115391 +vt 0.712997 0.141876 +vt 0.600460 0.195737 +vt 0.580729 0.194398 +vt 0.701045 0.174483 +vt 0.704674 0.159044 +vt 0.738131 0.185442 +vt 0.738938 0.169169 +vt 0.724745 0.125592 +vt 0.739221 0.149625 +vt 0.734060 0.621158 +vt 0.748870 0.613644 +vt 0.738131 0.112672 +vt 0.230534 0.682240 +vt 0.215525 0.692702 +vt 0.736924 0.100888 +vt 0.723321 0.105158 +vt 0.634539 0.212626 +vt 0.619355 0.202138 +vt 0.738937 0.129786 +vt 0.625256 0.195292 +vt 0.633144 0.168280 +vt 0.625730 0.149881 +vt 0.624119 0.129940 +vt 0.628557 0.111492 +vt 0.773676 0.174284 +vt 0.771777 0.158860 +vt 0.715938 0.601948 +vt 0.719344 0.584792 +vt 0.729137 0.608891 +vt 0.724963 0.565682 +vt 0.743731 0.597621 +vt 0.731940 0.547526 +vt 0.756827 0.582443 +vt 0.739213 0.533090 +vt 0.766429 0.565668 +vt 0.684711 0.539959 +vt 0.694151 0.555840 +vt 0.662248 0.549704 +vt 0.383992 0.040847 +vt 0.372177 0.024628 +vt 0.377222 0.014395 +vt 0.519143 0.714789 +vt 0.536375 0.722424 +vt 0.512675 0.724990 +vt 0.754637 0.613053 +vt 0.631457 0.537034 +vt 0.646270 0.540481 +vt 0.613133 0.567311 +vt 0.626437 0.573252 +vt 0.676959 0.563298 +vt 0.643925 0.579980 +vt 0.688161 0.579195 +vt 0.662935 0.586471 +vt 0.524423 0.741274 +vt 0.498482 0.729184 +vt 0.532746 0.758442 +vt 0.498199 0.749023 +vt 0.536375 0.773881 +vt 0.498482 0.768567 +vt 0.622703 0.609050 +vt 0.640475 0.613053 +vt 0.680571 0.591735 +vt 0.660294 0.611783 +vt 0.484880 0.724914 +vt 0.473065 0.741133 +vt 0.499289 0.784840 +vt 0.465643 0.758258 +vt 0.698694 0.521508 +vt 0.694256 0.503061 +vt 0.732045 0.517676 +vt 0.695866 0.483120 +vt 0.725068 0.499521 +vt 0.703281 0.464721 +vt 0.719449 0.480410 +vt 0.479835 0.714681 +vt 0.617498 0.675258 +vt 0.608215 0.691090 +vt 0.599806 0.667797 +vt 0.739318 0.532112 +vt 0.771181 0.515351 +vt 0.766534 0.499534 +vt 0.756932 0.482759 +vt 0.716043 0.463254 +vt 0.743836 0.467582 +vt 0.611183 0.651923 +vt 0.585690 0.644597 +vt 0.585100 0.681341 +vt 0.569302 0.690494 +vt 0.566656 0.651029 +vt 0.554819 0.693863 +vt 0.549339 0.657685 +vt 0.771181 0.462596 +vt 0.320682 0.022138 +vt 0.337914 0.014503 +vt 0.332634 0.040988 +vt 0.603543 0.639367 +vt 0.602314 0.625649 +vt 0.583418 0.619248 +vt 0.563688 0.617909 +vt 0.320682 0.073594 +vt 0.324311 0.058156 +vt 0.357768 0.084554 +vt 0.358574 0.068281 +vt 0.344382 0.024704 +vt 0.358858 0.048737 +vt 0.499289 0.712070 +vt 0.514099 0.704556 +vt 0.357768 0.011784 +vt 0.694151 0.594973 +vt 0.679142 0.605435 +vt 0.356561 0.000000 +vt 0.342958 0.004270 +vt 0.617498 0.636137 +vt 0.358574 0.028898 +vt 0.608215 0.618804 +vt 0.703175 0.600482 +vt 0.695761 0.582082 +vt 0.694151 0.562141 +vt 0.698589 0.543694 +vt 0.393313 0.073396 +vt 0.391414 0.057972 +vt 0.656327 0.263257 +vt 0.659732 0.246100 +vt 0.669525 0.270199 +vt 0.665352 0.226990 +vt 0.684120 0.258929 +vt 0.672328 0.208835 +vt 0.697215 0.243751 +vt 0.679601 0.194398 +vt 0.706817 0.226977 +vt 0.689075 0.620834 +vt 0.698515 0.636715 +vt 0.666613 0.630579 +vt 0.090465 0.506258 +vt 0.102280 0.522478 +vt 0.081144 0.525166 +vt 0.296869 0.720204 +vt 0.314101 0.727840 +vt 0.290401 0.730405 +vt 0.695026 0.274361 +vt 0.635821 0.617909 +vt 0.650635 0.621357 +vt 0.617498 0.648186 +vt 0.630802 0.654127 +vt 0.681323 0.644174 +vt 0.648290 0.660856 +vt 0.692526 0.660070 +vt 0.667299 0.667346 +vt 0.302149 0.746689 +vt 0.276209 0.734599 +vt 0.310472 0.763857 +vt 0.275925 0.754438 +vt 0.314101 0.779296 +vt 0.276209 0.773982 +vt 0.627068 0.689925 +vt 0.644840 0.693928 +vt 0.684936 0.672611 +vt 0.664658 0.692659 +vt 0.262606 0.730329 +vt 0.250791 0.746548 +vt 0.277015 0.790255 +vt 0.243369 0.763673 +vt 0.540814 0.763222 +vt 0.536375 0.744774 +vt 0.574165 0.759389 +vt 0.537986 0.724833 +vt 0.567188 0.741234 +vt 0.545400 0.706434 +vt 0.561568 0.722124 +vt 0.257561 0.720097 +vt 0.694256 0.513508 +vt 0.684973 0.529339 +vt 0.676564 0.506046 +vt 0.581437 0.773826 +vt 0.613301 0.757065 +vt 0.608653 0.741247 +vt 0.599051 0.724473 +vt 0.558163 0.704967 +vt 0.585956 0.709295 +vt 0.687941 0.490173 +vt 0.680301 0.477617 +vt 0.661858 0.519591 +vt 0.662448 0.482846 +vt 0.646060 0.528744 +vt 0.643414 0.489278 +vt 0.631577 0.532112 +vt 0.626097 0.495934 +vt 0.613301 0.704310 +vt 0.153775 0.524967 +vt 0.136543 0.532603 +vt 0.141823 0.506118 +vt 0.679072 0.463899 +vt 0.660177 0.457498 +vt 0.640446 0.456159 +vt 0.153775 0.473511 +vt 0.150146 0.488950 +vt 0.116689 0.462552 +vt 0.115883 0.478825 +vt 0.130075 0.522402 +vt 0.115599 0.498369 +vt 0.277015 0.717485 +vt 0.291825 0.709971 +vt 0.116689 0.535322 +vt 0.097235 0.532710 +vt 0.698515 0.675848 +vt 0.683507 0.686310 +vt 0.117896 0.547105 +vt 0.131499 0.542835 +vt 0.694256 0.474387 +vt 0.115883 0.518208 +vt 0.684973 0.457053 +vt 0.643564 0.261790 +vt 0.636150 0.243391 +vt 0.634539 0.223449 +vt 0.638978 0.205002 +vt 0.081144 0.473710 +vt 0.083043 0.489133 +vt 0.254766 0.698867 +vt 0.258172 0.681711 +vt 0.267965 0.705810 +vt 0.263791 0.662600 +vt 0.282559 0.694539 +vt 0.270768 0.644445 +vt 0.295655 0.679362 +vt 0.278041 0.630009 +vt 0.305257 0.662587 +vt 0.526936 0.631463 +vt 0.536375 0.647344 +vt 0.504473 0.641208 +vt 0.212827 0.741168 +vt 0.201012 0.724948 +vt 0.222148 0.722260 +vt 0.068884 0.714789 +vt 0.086117 0.722425 +vt 0.062416 0.724990 +vt 0.293466 0.709972 +vt 0.473681 0.628538 +vt 0.488495 0.631985 +vt 0.455358 0.658814 +vt 0.468662 0.664756 +vt 0.519183 0.654802 +vt 0.486150 0.671484 +vt 0.530386 0.670698 +vt 0.505159 0.677974 +vt 0.074165 0.741274 +vt 0.048224 0.729184 +vt 0.082487 0.758442 +vt 0.047941 0.749023 +vt 0.086117 0.773881 +vt 0.048224 0.768567 +vt 0.464928 0.700553 +vt 0.482700 0.704556 +vt 0.522796 0.683239 +vt 0.502519 0.703287 +vt 0.022806 0.741133 +vt 0.049030 0.784840 +vt 0.015384 0.758258 +vt 0.621936 0.763287 +vt 0.617498 0.744840 +vt 0.655287 0.759455 +vt 0.619108 0.724898 +vt 0.648310 0.741299 +vt 0.626523 0.706499 +vt 0.642691 0.722189 +vt 0.034621 0.724914 +vt 0.029576 0.714682 +vt 0.314101 0.611404 +vt 0.304819 0.627235 +vt 0.296410 0.603942 +vt 0.662560 0.773891 +vt 0.694423 0.757130 +vt 0.689776 0.741313 +vt 0.680174 0.724538 +vt 0.639285 0.705033 +vt 0.652484 0.698090 +vt 0.307786 0.588069 +vt 0.300147 0.575513 +vt 0.281703 0.617487 +vt 0.282294 0.580742 +vt 0.265906 0.626640 +vt 0.263260 0.587174 +vt 0.251423 0.630009 +vt 0.245943 0.593830 +vt 0.667078 0.709360 +vt 0.694423 0.704375 +vt 0.149516 0.722459 +vt 0.166748 0.714823 +vt 0.161468 0.741308 +vt 0.298918 0.561795 +vt 0.280022 0.555394 +vt 0.260292 0.554055 +vt 0.149516 0.773915 +vt 0.153146 0.758476 +vt 0.186603 0.784874 +vt 0.187409 0.768601 +vt 0.173217 0.725024 +vt 0.187692 0.749057 +vt 0.049030 0.712070 +vt 0.063840 0.704556 +vt 0.186603 0.712104 +vt 0.206056 0.714716 +vt 0.536375 0.686476 +vt 0.521367 0.696938 +vt 0.185396 0.700321 +vt 0.171793 0.704591 +vt 0.314101 0.572283 +vt 0.187409 0.729218 +vt 0.304818 0.554949 +vt 0.242004 0.697400 +vt 0.234589 0.679001 +vt 0.232979 0.659060 +vt 0.237417 0.640613 +vt 0.222148 0.773716 +vt 0.186236 0.922372 +vt 0.180008 0.935449 +vt 0.175572 0.911863 +vt 0.533116 0.517469 +vt 0.514934 0.521668 +vt 0.533116 0.489603 +vt 0.494901 0.523165 +vt 0.514934 0.485259 +vt 0.476066 0.521732 +vt 0.494901 0.483756 +vt 0.461297 0.517588 +vt 0.476066 0.485323 +vt 0.963987 0.171886 +vt 0.957582 0.154476 +vt 0.983693 0.152603 +vt 0.160304 0.916032 +vt 0.175572 0.897043 +vt 0.536375 0.470089 +vt 0.519193 0.459763 +vt 0.036027 0.272590 +vt 0.055925 0.275054 +vt 0.033760 0.300265 +vt 0.073627 0.284388 +vt 0.053831 0.300622 +vt 0.968247 0.144040 +vt 0.983693 0.125340 +vt 0.160304 0.888648 +vt 0.186236 0.886593 +vt 0.000030 0.308240 +vt 0.014867 0.302940 +vt 0.001633 0.336060 +vt 0.016962 0.339288 +vt 0.036027 0.339607 +vt 0.072024 0.303957 +vt 0.055925 0.336970 +vt 0.968247 0.129286 +vt 0.963987 0.106066 +vt 0.180008 0.869339 +vt 0.201316 0.886634 +vt 0.175982 0.856094 +vt 0.207872 0.869415 +vt 0.022019 0.365123 +vt 0.041500 0.367571 +vt 0.080178 0.445659 +vt 0.063119 0.456159 +vt 0.059073 0.429896 +vt 0.957582 0.118855 +vt 0.936119 0.106072 +vt 0.211979 0.897143 +vt 0.080178 0.380417 +vt 0.077047 0.395434 +vt 0.055449 0.367571 +vt 0.069637 0.412809 +vt 0.044737 0.378650 +vt 0.034664 0.394642 +vt 0.046966 0.444095 +vt 0.026763 0.413113 +vt 0.035158 0.453244 +vt 0.022237 0.431249 +vt 0.227576 0.888832 +vt 0.211979 0.911963 +vt 0.461297 0.450754 +vt 0.443595 0.460088 +vt 0.459694 0.431185 +vt 0.423696 0.462552 +vt 0.441500 0.434520 +vt 0.008049 0.386012 +vt 0.002174 0.405139 +vt 0.916414 0.125355 +vt 0.931836 0.129294 +vt 0.916414 0.152618 +vt 0.227576 0.916215 +vt 0.207872 0.935525 +vt 0.461297 0.403365 +vt 0.421429 0.434877 +vt 0.443595 0.398172 +vt 0.402537 0.432202 +vt 0.404631 0.395854 +vt 0.387699 0.426902 +vt 0.389302 0.399082 +vt 0.931836 0.144049 +vt 0.936119 0.171892 +vt 0.193718 0.905230 +vt 0.950037 0.135855 +vt 0.942500 0.118858 +vt 0.201316 0.922413 +vt 0.942500 0.154479 +vt 0.536375 0.537365 +vt 0.519193 0.547662 +vt 0.423696 0.395535 +vt 0.448651 0.372337 +vt 0.429170 0.367571 +vt 0.931866 0.185442 +vt 0.968277 0.185434 +vt 0.340033 0.927752 +vt 0.333805 0.940829 +vt 0.329369 0.917244 +vt 0.533116 0.333901 +vt 0.514934 0.338100 +vt 0.533116 0.306034 +vt 0.494901 0.339596 +vt 0.514934 0.301690 +vt 0.476066 0.338163 +vt 0.494901 0.300187 +vt 0.461297 0.334019 +vt 0.476066 0.301754 +vt 0.937605 0.463913 +vt 0.944010 0.481323 +vt 0.917899 0.483196 +vt 0.314101 0.921412 +vt 0.329369 0.902424 +vt 0.519193 0.276194 +vt 0.350099 0.272590 +vt 0.369997 0.275054 +vt 0.347832 0.300265 +vt 0.387699 0.284388 +vt 0.367902 0.300622 +vt 0.933345 0.491759 +vt 0.933345 0.506513 +vt 0.314101 0.894029 +vt 0.340033 0.891974 +vt 0.314101 0.308240 +vt 0.328939 0.302940 +vt 0.315705 0.336060 +vt 0.331034 0.339288 +vt 0.350099 0.339607 +vt 0.386096 0.303957 +vt 0.369997 0.336970 +vt 0.917899 0.510459 +vt 0.937605 0.529733 +vt 0.333805 0.874719 +vt 0.355113 0.892015 +vt 0.329780 0.861474 +vt 0.361670 0.874796 +vt 0.336091 0.365123 +vt 0.355572 0.367571 +vt 0.472283 0.171263 +vt 0.455224 0.181763 +vt 0.451178 0.155501 +vt 0.944010 0.516944 +vt 0.965472 0.529727 +vt 0.365776 0.902524 +vt 0.472283 0.106021 +vt 0.469152 0.121038 +vt 0.447554 0.093175 +vt 0.461741 0.138413 +vt 0.436842 0.104254 +vt 0.426769 0.120247 +vt 0.439071 0.169700 +vt 0.418868 0.138717 +vt 0.427263 0.178848 +vt 0.414342 0.156854 +vt 0.381373 0.894213 +vt 0.365776 0.917343 +vt 0.314101 0.355773 +vt 0.296399 0.365107 +vt 0.312498 0.336204 +vt 0.276501 0.367571 +vt 0.294305 0.339539 +vt 0.400154 0.111616 +vt 0.394279 0.130743 +vt 0.985178 0.510444 +vt 0.969756 0.506505 +vt 0.969756 0.491750 +vt 0.381373 0.921596 +vt 0.355113 0.927794 +vt 0.314101 0.308385 +vt 0.274234 0.339896 +vt 0.296399 0.303192 +vt 0.255341 0.337221 +vt 0.276501 0.300554 +vt 0.240504 0.331921 +vt 0.257436 0.300874 +vt 0.985178 0.483181 +vt 0.959092 0.481320 +vt 0.347515 0.910611 +vt 0.951555 0.499944 +vt 0.959092 0.516941 +vt 0.361670 0.940906 +vt 0.536375 0.353796 +vt 0.519193 0.364094 +vt 0.301456 0.277357 +vt 0.281974 0.272590 +vt 0.969726 0.450357 +vt 0.965472 0.463907 +vt 0.933315 0.450365 +vt 0.118964 0.922372 +vt 0.112736 0.935449 +vt 0.108301 0.911863 +vt 0.385920 0.523862 +vt 0.367739 0.528061 +vt 0.385920 0.495995 +vt 0.347706 0.529558 +vt 0.347706 0.490148 +vt 0.328871 0.528125 +vt 0.314101 0.523980 +vt 0.328871 0.491715 +vt 0.965438 0.677992 +vt 0.959033 0.660583 +vt 0.985143 0.658710 +vt 0.093033 0.916032 +vt 0.108301 0.897043 +vt 0.367739 0.491651 +vt 0.389180 0.476482 +vt 0.371998 0.466155 +vt 0.356679 0.086783 +vt 0.376577 0.089247 +vt 0.354412 0.114457 +vt 0.394279 0.098581 +vt 0.374482 0.114815 +vt 0.969698 0.650147 +vt 0.985143 0.631446 +vt 0.093033 0.888648 +vt 0.118964 0.886593 +vt 0.320682 0.122433 +vt 0.335519 0.117133 +vt 0.322285 0.150252 +vt 0.337614 0.153480 +vt 0.356679 0.153800 +vt 0.392676 0.118150 +vt 0.376577 0.151162 +vt 0.969698 0.635392 +vt 0.965438 0.612173 +vt 0.112736 0.869339 +vt 0.134044 0.886634 +vt 0.108711 0.856094 +vt 0.140601 0.869415 +vt 0.342671 0.179315 +vt 0.362152 0.181763 +vt 0.398655 0.259851 +vt 0.381596 0.270351 +vt 0.377551 0.244089 +vt 0.959033 0.624961 +vt 0.937570 0.612179 +vt 0.144708 0.897143 +vt 0.398655 0.194609 +vt 0.395525 0.209626 +vt 0.373926 0.181763 +vt 0.388114 0.227001 +vt 0.363215 0.192843 +vt 0.353142 0.208835 +vt 0.365444 0.258288 +vt 0.345241 0.227305 +vt 0.353636 0.267436 +vt 0.340715 0.245442 +vt 0.160304 0.888832 +vt 0.144708 0.911963 +vt 0.387699 0.450754 +vt 0.369997 0.460088 +vt 0.386096 0.431185 +vt 0.350099 0.462552 +vt 0.367902 0.434520 +vt 0.326527 0.200204 +vt 0.320652 0.219331 +vt 0.917865 0.631461 +vt 0.933287 0.635400 +vt 0.917865 0.658725 +vt 0.160304 0.916215 +vt 0.134044 0.922413 +vt 0.387699 0.403365 +vt 0.347832 0.434877 +vt 0.369997 0.398172 +vt 0.328939 0.432202 +vt 0.350099 0.395535 +vt 0.314101 0.426902 +vt 0.331034 0.395854 +vt 0.933287 0.650155 +vt 0.943951 0.660586 +vt 0.126447 0.905230 +vt 0.951488 0.641962 +vt 0.943951 0.624965 +vt 0.140601 0.935525 +vt 0.389180 0.543757 +vt 0.371998 0.554055 +vt 0.375054 0.372337 +vt 0.933317 0.691549 +vt 0.937570 0.677999 +vt 0.969728 0.691540 +vt 0.107789 0.613941 +vt 0.101561 0.627018 +vt 0.097125 0.603432 +vt 0.544101 0.151570 +vt 0.525920 0.155769 +vt 0.525920 0.119360 +vt 0.505887 0.157266 +vt 0.487052 0.155833 +vt 0.505887 0.117857 +vt 0.472283 0.151689 +vt 0.487052 0.119424 +vt 0.783588 0.965691 +vt 0.800999 0.959290 +vt 0.802866 0.985401 +vt 0.081857 0.607601 +vt 0.097125 0.588612 +vt 0.544101 0.123704 +vt 0.547361 0.104190 +vt 0.530179 0.093864 +vt 0.189773 0.367571 +vt 0.209671 0.370035 +vt 0.187506 0.395246 +vt 0.227373 0.379369 +vt 0.207576 0.395603 +vt 0.811433 0.969957 +vt 0.830130 0.985407 +vt 0.081857 0.580217 +vt 0.107789 0.578162 +vt 0.153775 0.403221 +vt 0.168613 0.397921 +vt 0.155379 0.431040 +vt 0.170708 0.434268 +vt 0.189773 0.434588 +vt 0.225770 0.398938 +vt 0.209671 0.431950 +vt 0.826188 0.969960 +vt 0.849408 0.965706 +vt 0.101561 0.560908 +vt 0.122869 0.578203 +vt 0.097535 0.547663 +vt 0.129426 0.560984 +vt 0.175765 0.460103 +vt 0.195246 0.462552 +vt 0.476659 0.259851 +vt 0.459600 0.270351 +vt 0.455554 0.244089 +vt 0.836621 0.959298 +vt 0.849408 0.937838 +vt 0.133532 0.588712 +vt 0.476659 0.194609 +vt 0.473528 0.209626 +vt 0.451930 0.181763 +vt 0.466117 0.227001 +vt 0.441218 0.192843 +vt 0.431145 0.208835 +vt 0.443447 0.258288 +vt 0.423244 0.227305 +vt 0.431639 0.267436 +vt 0.418718 0.245442 +vt 0.149129 0.580401 +vt 0.133532 0.603532 +vt 0.233953 0.355773 +vt 0.216251 0.365107 +vt 0.232350 0.336204 +vt 0.196353 0.367571 +vt 0.214156 0.339539 +vt 0.404530 0.200204 +vt 0.398655 0.219331 +vt 0.830130 0.918128 +vt 0.826188 0.933549 +vt 0.802866 0.918122 +vt 0.149129 0.607784 +vt 0.122869 0.613982 +vt 0.233953 0.308385 +vt 0.194086 0.339896 +vt 0.216251 0.303192 +vt 0.175193 0.337221 +vt 0.196353 0.300554 +vt 0.160356 0.331921 +vt 0.177288 0.300874 +vt 0.811433 0.933546 +vt 0.783588 0.937823 +vt 0.115271 0.596799 +vt 0.819622 0.951749 +vt 0.836621 0.944216 +vt 0.800999 0.944208 +vt 0.129426 0.627094 +vt 0.547361 0.171466 +vt 0.530179 0.181763 +vt 0.221308 0.277357 +vt 0.201826 0.272590 +vt 0.770039 0.933566 +vt 0.272761 0.927752 +vt 0.266533 0.940829 +vt 0.262098 0.917244 +vt 0.310842 0.523862 +vt 0.292660 0.528061 +vt 0.310842 0.495996 +vt 0.272627 0.529558 +vt 0.292660 0.491651 +vt 0.253792 0.528125 +vt 0.272627 0.490148 +vt 0.239023 0.523980 +vt 0.253792 0.491715 +vt 0.936444 0.384419 +vt 0.942849 0.401828 +vt 0.916738 0.403701 +vt 0.246830 0.921412 +vt 0.262098 0.902424 +vt 0.314101 0.476482 +vt 0.296919 0.466155 +vt 0.116175 0.367571 +vt 0.136073 0.370035 +vt 0.113908 0.395246 +vt 0.153775 0.379369 +vt 0.133979 0.395603 +vt 0.932184 0.412264 +vt 0.916738 0.430965 +vt 0.246830 0.894029 +vt 0.272761 0.891974 +vt 0.080178 0.403221 +vt 0.095016 0.397921 +vt 0.081781 0.431040 +vt 0.097110 0.434268 +vt 0.116175 0.434588 +vt 0.152172 0.398938 +vt 0.136073 0.431950 +vt 0.932184 0.427019 +vt 0.936444 0.450239 +vt 0.266533 0.874719 +vt 0.287841 0.892015 +vt 0.262508 0.861474 +vt 0.294398 0.874795 +vt 0.102167 0.460103 +vt 0.121649 0.462552 +vt 0.472283 0.082675 +vt 0.455224 0.093175 +vt 0.451178 0.066913 +vt 0.942849 0.437450 +vt 0.964312 0.450232 +vt 0.298505 0.902524 +vt 0.472283 0.017433 +vt 0.469152 0.032450 +vt 0.447554 0.004587 +vt 0.461741 0.049825 +vt 0.436842 0.015666 +vt 0.426769 0.031658 +vt 0.439071 0.081111 +vt 0.418868 0.050129 +vt 0.427263 0.090260 +vt 0.414342 0.068266 +vt 0.314101 0.894213 +vt 0.298505 0.917343 +vt 0.461297 0.355773 +vt 0.443595 0.365107 +vt 0.459694 0.336204 +vt 0.423696 0.367571 +vt 0.441500 0.339539 +vt 0.400154 0.023028 +vt 0.394279 0.042155 +vt 0.984017 0.430950 +vt 0.968595 0.427011 +vt 0.984017 0.403686 +vt 0.314101 0.921596 +vt 0.287842 0.927794 +vt 0.461297 0.308385 +vt 0.421429 0.339896 +vt 0.443595 0.303192 +vt 0.402537 0.337221 +vt 0.423696 0.300554 +vt 0.387699 0.331921 +vt 0.404631 0.300874 +vt 0.968595 0.412256 +vt 0.964312 0.384413 +vt 0.280244 0.910611 +vt 0.950394 0.420449 +vt 0.957931 0.437447 +vt 0.957931 0.401825 +vt 0.294398 0.940906 +vt 0.314101 0.543757 +vt 0.296919 0.554055 +vt 0.448651 0.277357 +vt 0.429170 0.272590 +vt 0.968565 0.370863 +vt 0.932154 0.370871 +vt 0.407304 0.927752 +vt 0.401076 0.940829 +vt 0.396641 0.917244 +vt 0.076918 0.517470 +vt 0.058737 0.521668 +vt 0.076918 0.489603 +vt 0.038704 0.523165 +vt 0.058737 0.485259 +vt 0.019869 0.521732 +vt 0.038704 0.483756 +vt 0.005099 0.517588 +vt 0.019869 0.485323 +vt 0.937605 0.291655 +vt 0.944010 0.309065 +vt 0.933345 0.319501 +vt 0.381373 0.921412 +vt 0.396641 0.902424 +vt 0.080178 0.470089 +vt 0.062996 0.459763 +vt 0.116175 0.272590 +vt 0.136073 0.275054 +vt 0.113908 0.300265 +vt 0.153775 0.284388 +vt 0.133979 0.300622 +vt 0.917899 0.310938 +vt 0.917899 0.338201 +vt 0.381373 0.894029 +vt 0.407304 0.891974 +vt 0.080178 0.308240 +vt 0.095016 0.302940 +vt 0.081781 0.336060 +vt 0.097110 0.339288 +vt 0.116175 0.339607 +vt 0.152172 0.303957 +vt 0.136073 0.336970 +vt 0.933345 0.334256 +vt 0.937605 0.357475 +vt 0.401076 0.874719 +vt 0.422385 0.892015 +vt 0.397051 0.861474 +vt 0.428941 0.874796 +vt 0.102167 0.365123 +vt 0.121649 0.367571 +vt 0.539300 0.445659 +vt 0.522241 0.456159 +vt 0.518196 0.429896 +vt 0.944010 0.344686 +vt 0.965472 0.357469 +vt 0.433048 0.902524 +vt 0.539300 0.380417 +vt 0.536170 0.395434 +vt 0.514571 0.367571 +vt 0.528759 0.412809 +vt 0.503860 0.378650 +vt 0.493787 0.394642 +vt 0.506089 0.444095 +vt 0.485886 0.413113 +vt 0.494281 0.453244 +vt 0.481360 0.431249 +vt 0.448644 0.894213 +vt 0.448644 0.921596 +vt 0.314101 0.450754 +vt 0.296399 0.460088 +vt 0.312498 0.431185 +vt 0.276501 0.462552 +vt 0.294305 0.434520 +vt 0.467172 0.386012 +vt 0.461297 0.405139 +vt 0.985178 0.338186 +vt 0.969756 0.334247 +vt 0.985178 0.310923 +vt 0.433048 0.917343 +vt 0.422385 0.927794 +vt 0.314101 0.403365 +vt 0.274234 0.434877 +vt 0.296399 0.398172 +vt 0.255341 0.432202 +vt 0.276501 0.395535 +vt 0.240504 0.426902 +vt 0.257436 0.395854 +vt 0.969756 0.319493 +vt 0.965472 0.291649 +vt 0.414787 0.910611 +vt 0.951555 0.327686 +vt 0.959092 0.344683 +vt 0.959092 0.309062 +vt 0.428941 0.940906 +vt 0.080178 0.537365 +vt 0.062996 0.547663 +vt 0.301456 0.372337 +vt 0.281974 0.367571 +vt 0.969726 0.278099 +vt 0.933315 0.278107 +vt 0.536635 0.312401 +vt 0.549493 0.299056 +vt 0.541655 0.326277 +vt 0.566243 0.288045 +vt 0.558768 0.324695 +vt 0.584335 0.281045 +vt 0.578361 0.321545 +vt 0.601015 0.279121 +vt 0.597452 0.317305 +vt 0.091544 0.851351 +vt 0.075609 0.852030 +vt 0.091544 0.817988 +vt 0.057073 0.847927 +vt 0.075609 0.826495 +vt 0.541655 0.339499 +vt 0.558768 0.349126 +vt 0.578361 0.353466 +vt 0.613133 0.312620 +vt 0.597452 0.351855 +vt 0.067770 0.790438 +vt 0.057073 0.834108 +vt 0.057413 0.805409 +vt 0.091544 0.906573 +vt 0.077637 0.918216 +vt 0.090006 0.892531 +vt 0.059432 0.926045 +vt 0.074795 0.892270 +vt 0.039701 0.928867 +vt 0.055719 0.892145 +vt 0.021447 0.926253 +vt 0.035681 0.892174 +vt 0.034149 0.784840 +vt 0.047225 0.822696 +vt 0.031681 0.801125 +vt 0.091544 0.878711 +vt 0.077637 0.866733 +vt 0.059432 0.858779 +vt 0.017733 0.892354 +vt 0.039701 0.856059 +vt 0.472346 0.628538 +vt 0.459617 0.613901 +vt 0.489484 0.613083 +vt 0.033299 0.820378 +vt 0.013485 0.816151 +vt 0.501904 0.792972 +vt 0.520440 0.788870 +vt 0.501904 0.806791 +vt 0.536375 0.789548 +vt 0.520440 0.814404 +vt 0.524256 0.622007 +vt 0.507576 0.620083 +vt 0.536375 0.588508 +vt 0.520694 0.583823 +vt 0.472735 0.602072 +vt 0.501603 0.579583 +vt 0.459877 0.588727 +vt 0.482010 0.576433 +vt 0.492056 0.818203 +vt 0.536375 0.822911 +vt 0.502244 0.835490 +vt 0.536375 0.556587 +vt 0.520694 0.549273 +vt 0.501603 0.547662 +vt 0.464897 0.574851 +vt 0.482010 0.552002 +vt 0.478130 0.820522 +vt 0.512601 0.850461 +vt 0.476512 0.839775 +vt 0.847989 0.015387 +vt 0.866085 0.012641 +vt 0.844014 0.049067 +vt 0.885763 0.015421 +vt 0.861783 0.049096 +vt 0.904025 0.023306 +vt 0.881788 0.049102 +vt 0.918093 0.035093 +vt 0.900984 0.049084 +vt 0.483588 0.801231 +vt 0.468282 0.812390 +vt 0.468282 0.798570 +vt 0.038757 0.839668 +vt 0.478130 0.787159 +vt 0.492056 0.784840 +vt 0.023451 0.828510 +vt 0.023451 0.842329 +vt 0.033299 0.853740 +vt 0.047225 0.856059 +vt 0.458316 0.824749 +vt 0.536375 0.287227 +vt 0.549104 0.272590 +vt 0.847989 0.082665 +vt 0.866085 0.085462 +vt 0.904025 0.074798 +vt 0.916447 0.049044 +vt 0.476918 0.229287 +vt 0.489776 0.215942 +vt 0.481938 0.243162 +vt 0.506526 0.204931 +vt 0.499051 0.241581 +vt 0.524618 0.197931 +vt 0.518645 0.238431 +vt 0.541298 0.196007 +vt 0.537735 0.234191 +vt 0.917865 0.678683 +vt 0.901929 0.679362 +vt 0.917865 0.645321 +vt 0.883393 0.675260 +vt 0.901929 0.653827 +vt 0.481938 0.256384 +vt 0.499051 0.266012 +vt 0.518645 0.270351 +vt 0.553417 0.229506 +vt 0.537735 0.268741 +vt 0.894091 0.617771 +vt 0.883393 0.661440 +vt 0.883734 0.632742 +vt 0.768234 0.906160 +vt 0.754327 0.917803 +vt 0.766696 0.892118 +vt 0.736122 0.925632 +vt 0.751485 0.891857 +vt 0.716391 0.928454 +vt 0.732409 0.891732 +vt 0.698137 0.925841 +vt 0.712371 0.891761 +vt 0.860469 0.612173 +vt 0.873546 0.650029 +vt 0.858001 0.628457 +vt 0.768234 0.878298 +vt 0.754327 0.866320 +vt 0.736122 0.858366 +vt 0.694423 0.891941 +vt 0.716391 0.855646 +vt 0.549104 0.617909 +vt 0.536375 0.603273 +vt 0.566243 0.602454 +vt 0.859619 0.647710 +vt 0.839805 0.643483 +vt 0.814937 0.855035 +vt 0.833473 0.850932 +vt 0.814937 0.868854 +vt 0.849408 0.851611 +vt 0.833473 0.876467 +vt 0.601015 0.611379 +vt 0.584335 0.609455 +vt 0.613133 0.577879 +vt 0.597452 0.573195 +vt 0.549493 0.591444 +vt 0.578361 0.568955 +vt 0.536635 0.578099 +vt 0.558768 0.565804 +vt 0.805089 0.880266 +vt 0.849408 0.884974 +vt 0.815277 0.897553 +vt 0.613133 0.545959 +vt 0.597452 0.538644 +vt 0.578361 0.537034 +vt 0.541655 0.564223 +vt 0.558768 0.541373 +vt 0.791163 0.882585 +vt 0.825634 0.912524 +vt 0.789544 0.901838 +vt 0.846634 0.380163 +vt 0.864730 0.377417 +vt 0.842659 0.413843 +vt 0.884408 0.380198 +vt 0.860428 0.413872 +vt 0.902670 0.388082 +vt 0.880433 0.413878 +vt 0.916738 0.399869 +vt 0.899629 0.413860 +vt 0.796621 0.863294 +vt 0.781315 0.874452 +vt 0.781315 0.860633 +vt 0.865078 0.667000 +vt 0.791163 0.849222 +vt 0.805089 0.846903 +vt 0.849772 0.655842 +vt 0.849772 0.669661 +vt 0.859619 0.681073 +vt 0.873546 0.683392 +vt 0.476659 0.204113 +vt 0.489387 0.189476 +vt 0.846634 0.447442 +vt 0.864730 0.450239 +vt 0.884408 0.447476 +vt 0.915092 0.413820 +vt 0.902670 0.439575 +vt 0.154035 0.502362 +vt 0.166893 0.489017 +vt 0.159055 0.516238 +vt 0.183643 0.478007 +vt 0.176168 0.514657 +vt 0.201735 0.471006 +vt 0.195762 0.511506 +vt 0.218415 0.469082 +vt 0.214852 0.507266 +vt 0.917899 0.516868 +vt 0.901964 0.517547 +vt 0.917899 0.483505 +vt 0.883427 0.513444 +vt 0.901964 0.492012 +vt 0.159055 0.529460 +vt 0.176168 0.539088 +vt 0.195762 0.543427 +vt 0.230534 0.502582 +vt 0.214852 0.541817 +vt 0.894125 0.455955 +vt 0.883427 0.499625 +vt 0.883768 0.470926 +vt 0.694423 0.906160 +vt 0.680516 0.917803 +vt 0.692885 0.892118 +vt 0.662311 0.925632 +vt 0.677674 0.891857 +vt 0.642580 0.928454 +vt 0.658598 0.891732 +vt 0.624326 0.925841 +vt 0.638560 0.891761 +vt 0.860504 0.450357 +vt 0.873580 0.488213 +vt 0.858035 0.466641 +vt 0.694423 0.878298 +vt 0.680516 0.866320 +vt 0.662311 0.858366 +vt 0.620612 0.891941 +vt 0.642580 0.855646 +vt 0.560090 0.181763 +vt 0.547361 0.167127 +vt 0.577228 0.166308 +vt 0.859654 0.485894 +vt 0.839840 0.481667 +vt 0.883428 0.294388 +vt 0.901964 0.290285 +vt 0.883428 0.308207 +vt 0.917899 0.290964 +vt 0.901964 0.315820 +vt 0.612000 0.175233 +vt 0.595320 0.173309 +vt 0.624119 0.141733 +vt 0.608438 0.137049 +vt 0.560478 0.155298 +vt 0.589347 0.132809 +vt 0.547621 0.141953 +vt 0.569754 0.129658 +vt 0.873580 0.319619 +vt 0.917899 0.324327 +vt 0.883768 0.336906 +vt 0.624119 0.109813 +vt 0.608438 0.102498 +vt 0.589347 0.100888 +vt 0.552641 0.128077 +vt 0.569754 0.105227 +vt 0.859654 0.321938 +vt 0.894125 0.351877 +vt 0.858036 0.341191 +vt 0.853110 0.534234 +vt 0.871207 0.531487 +vt 0.849136 0.567914 +vt 0.890884 0.534268 +vt 0.866905 0.567943 +vt 0.909147 0.542152 +vt 0.886909 0.567948 +vt 0.923215 0.553940 +vt 0.906105 0.567930 +vt 0.865112 0.302647 +vt 0.849806 0.313806 +vt 0.849806 0.299986 +vt 0.865112 0.505185 +vt 0.859654 0.288575 +vt 0.873580 0.286256 +vt 0.849806 0.494026 +vt 0.849806 0.507846 +vt 0.859654 0.519257 +vt 0.873580 0.521576 +vt 0.153775 0.477188 +vt 0.166504 0.462552 +vt 0.853110 0.601512 +vt 0.871207 0.604309 +vt 0.890884 0.601547 +vt 0.921568 0.567891 +vt 0.909147 0.593645 +vt 0.539560 0.407381 +vt 0.552418 0.394037 +vt 0.544580 0.421257 +vt 0.569167 0.383026 +vt 0.561693 0.419676 +vt 0.587259 0.376026 +vt 0.581286 0.416526 +vt 0.603939 0.374101 +vt 0.600377 0.412285 +vt 0.918067 0.770975 +vt 0.902131 0.771654 +vt 0.918067 0.737612 +vt 0.883595 0.767551 +vt 0.902131 0.746119 +vt 0.544580 0.434479 +vt 0.561693 0.444107 +vt 0.581286 0.448446 +vt 0.616058 0.407601 +vt 0.600377 0.446836 +vt 0.894293 0.710063 +vt 0.883595 0.753732 +vt 0.883935 0.725033 +vt 0.532127 0.906573 +vt 0.518220 0.918216 +vt 0.530589 0.892531 +vt 0.500015 0.926045 +vt 0.515377 0.892270 +vt 0.480284 0.928867 +vt 0.496301 0.892145 +vt 0.462030 0.926253 +vt 0.476264 0.892174 +vt 0.860671 0.704464 +vt 0.873747 0.742321 +vt 0.858203 0.720749 +vt 0.532127 0.878711 +vt 0.518220 0.866733 +vt 0.500015 0.858779 +vt 0.458316 0.892354 +vt 0.480284 0.856059 +vt 0.561769 0.085462 +vt 0.549041 0.070826 +vt 0.578908 0.070007 +vt 0.859821 0.740002 +vt 0.840007 0.735775 +vt 0.193104 0.793006 +vt 0.211640 0.788904 +vt 0.193104 0.806826 +vt 0.227576 0.789583 +vt 0.211640 0.814439 +vt 0.613680 0.078932 +vt 0.597000 0.077008 +vt 0.625799 0.045432 +vt 0.610117 0.040748 +vt 0.562158 0.058997 +vt 0.591027 0.036508 +vt 0.549300 0.045652 +vt 0.571433 0.033357 +vt 0.183257 0.818237 +vt 0.227576 0.822946 +vt 0.193445 0.835524 +vt 0.625799 0.013512 +vt 0.610117 0.006197 +vt 0.591027 0.004587 +vt 0.554320 0.031776 +vt 0.571433 0.008926 +vt 0.169330 0.820556 +vt 0.203802 0.850495 +vt 0.167712 0.839809 +vt 0.846309 0.115366 +vt 0.864406 0.112620 +vt 0.842335 0.149047 +vt 0.884083 0.115401 +vt 0.860104 0.149076 +vt 0.902346 0.123285 +vt 0.880108 0.149081 +vt 0.916414 0.135073 +vt 0.899304 0.149063 +vt 0.174789 0.801266 +vt 0.159483 0.812424 +vt 0.159483 0.798605 +vt 0.865279 0.759292 +vt 0.169330 0.787193 +vt 0.183257 0.784874 +vt 0.849973 0.748134 +vt 0.849973 0.761953 +vt 0.859821 0.773365 +vt 0.873747 0.775683 +vt 0.539300 0.382208 +vt 0.552029 0.367571 +vt 0.846309 0.182645 +vt 0.864406 0.185442 +vt 0.884083 0.182679 +vt 0.914768 0.149024 +vt 0.902346 0.174778 +vt 0.472542 0.044397 +vt 0.485400 0.031053 +vt 0.477562 0.058273 +vt 0.502150 0.020042 +vt 0.494675 0.056692 +vt 0.520242 0.013042 +vt 0.514269 0.053542 +vt 0.536922 0.011118 +vt 0.533359 0.049302 +vt 0.849408 0.842194 +vt 0.833473 0.842873 +vt 0.849408 0.808831 +vt 0.814937 0.838771 +vt 0.833473 0.817338 +vt 0.477562 0.071495 +vt 0.494675 0.081123 +vt 0.514269 0.085462 +vt 0.549041 0.044617 +vt 0.533359 0.083852 +vt 0.825634 0.781282 +vt 0.814937 0.824951 +vt 0.815277 0.796253 +vt 0.926566 0.243119 +vt 0.912659 0.254762 +vt 0.925027 0.229078 +vt 0.894454 0.262591 +vt 0.909816 0.228816 +vt 0.874723 0.265413 +vt 0.890740 0.228691 +vt 0.856469 0.262800 +vt 0.870703 0.228720 +vt 0.792013 0.775683 +vt 0.805089 0.813540 +vt 0.789544 0.791968 +vt 0.926566 0.215257 +vt 0.912659 0.203280 +vt 0.894454 0.195325 +vt 0.852755 0.228900 +vt 0.874723 0.192606 +vt 0.017828 0.628538 +vt 0.005099 0.613901 +vt 0.034966 0.613083 +vt 0.791163 0.811221 +vt 0.771349 0.806994 +vt 0.357689 0.798387 +vt 0.376226 0.794285 +vt 0.357689 0.812207 +vt 0.392161 0.794963 +vt 0.376226 0.819820 +vt 0.069739 0.622007 +vt 0.053059 0.620083 +vt 0.081857 0.588508 +vt 0.066176 0.583823 +vt 0.018217 0.602072 +vt 0.047085 0.579583 +vt 0.005359 0.588728 +vt 0.027492 0.576433 +vt 0.347842 0.823618 +vt 0.392161 0.828326 +vt 0.358030 0.840905 +vt 0.081857 0.556587 +vt 0.066176 0.549273 +vt 0.047085 0.547663 +vt 0.010379 0.574852 +vt 0.027492 0.552002 +vt 0.333915 0.825937 +vt 0.368387 0.855876 +vt 0.332297 0.845190 +vt 0.853383 0.778430 +vt 0.871479 0.775683 +vt 0.849408 0.812110 +vt 0.891156 0.778464 +vt 0.867177 0.812139 +vt 0.909419 0.786348 +vt 0.887182 0.812144 +vt 0.923487 0.798136 +vt 0.906377 0.812126 +vt 0.339374 0.806646 +vt 0.324068 0.817805 +vt 0.324068 0.803986 +vt 0.796621 0.830511 +vt 0.333915 0.792574 +vt 0.347842 0.790255 +vt 0.781315 0.819353 +vt 0.781315 0.833172 +vt 0.791163 0.844584 +vt 0.472283 0.019224 +vt 0.485011 0.004587 +vt 0.853383 0.845708 +vt 0.871479 0.848505 +vt 0.891156 0.845743 +vt 0.921841 0.812087 +vt 0.909419 0.837841 +vt 0.536635 0.495969 +vt 0.549493 0.482625 +vt 0.541655 0.509845 +vt 0.566243 0.471614 +vt 0.558768 0.508264 +vt 0.584335 0.464614 +vt 0.578361 0.505114 +vt 0.601015 0.462690 +vt 0.597452 0.500874 +vt 0.849136 0.599601 +vt 0.833200 0.600280 +vt 0.849136 0.566238 +vt 0.814664 0.596177 +vt 0.833200 0.574745 +vt 0.541655 0.523067 +vt 0.558768 0.532695 +vt 0.613133 0.496189 +vt 0.597452 0.535424 +vt 0.825362 0.538688 +vt 0.814664 0.582358 +vt 0.815005 0.553659 +vt 0.610186 0.906095 +vt 0.596279 0.917738 +vt 0.608648 0.892053 +vt 0.578075 0.925566 +vt 0.593437 0.891792 +vt 0.558343 0.928389 +vt 0.574361 0.891667 +vt 0.540089 0.925775 +vt 0.554323 0.891696 +vt 0.791741 0.533090 +vt 0.804817 0.570946 +vt 0.789272 0.549374 +vt 0.610186 0.878233 +vt 0.596279 0.866255 +vt 0.578075 0.858301 +vt 0.536375 0.891876 +vt 0.558343 0.855581 +vt 0.166504 0.624302 +vt 0.153775 0.609665 +vt 0.183643 0.608847 +vt 0.790890 0.568627 +vt 0.771076 0.564400 +vt 0.279630 0.798387 +vt 0.298166 0.794285 +vt 0.279630 0.812207 +vt 0.314101 0.794963 +vt 0.298166 0.819820 +vt 0.218415 0.617771 +vt 0.201735 0.615847 +vt 0.230534 0.584272 +vt 0.214852 0.579588 +vt 0.166893 0.597836 +vt 0.195762 0.575347 +vt 0.154035 0.584492 +vt 0.176168 0.572197 +vt 0.269782 0.823618 +vt 0.314101 0.828326 +vt 0.279970 0.840905 +vt 0.230534 0.552351 +vt 0.214852 0.545037 +vt 0.159055 0.570616 +vt 0.176168 0.547766 +vt 0.255856 0.825937 +vt 0.290328 0.855876 +vt 0.254238 0.845190 +vt 0.853383 0.851251 +vt 0.849408 0.884932 +vt 0.891156 0.851286 +vt 0.867177 0.884960 +vt 0.909419 0.859170 +vt 0.887182 0.884966 +vt 0.923487 0.870958 +vt 0.906377 0.884948 +vt 0.261314 0.806646 +vt 0.246008 0.817805 +vt 0.246008 0.803986 +vt 0.796349 0.587918 +vt 0.255856 0.792574 +vt 0.269782 0.790255 +vt 0.781043 0.576759 +vt 0.781043 0.590579 +vt 0.790890 0.601990 +vt 0.804817 0.604309 +vt 0.536375 0.470796 +vt 0.549104 0.456159 +vt 0.853383 0.918530 +vt 0.871479 0.921327 +vt 0.891156 0.918564 +vt 0.921841 0.884908 +vt 0.909419 0.910663 +vt 0.839805 0.673171 +vt 0.768234 0.986151 +vt 0.295243 0.272590 +vt 0.258082 0.269182 +vt 0.849408 0.957508 +vt 0.866703 0.925362 +vt 0.100762 0.080960 +vt 0.822238 0.612173 +vt 0.081474 0.059357 +vt 0.839840 0.336718 +vt 0.692938 0.986151 +vt 0.054769 0.272590 +vt 0.017607 0.269182 +vt 0.923215 0.569714 +vt 0.940510 0.537567 +vt 0.180940 0.080960 +vt 0.822273 0.275720 +vt 0.161652 0.059357 +vt 0.457838 0.523550 +vt 0.091544 0.986564 +vt 0.295272 0.090827 +vt 0.240533 0.051888 +vt 0.258111 0.087419 +vt 0.826447 0.085462 +vt 0.923487 0.884687 +vt 0.940782 0.852540 +vt 0.020584 0.171841 +vt 0.440271 0.462552 +vt 0.001296 0.150239 +vt 0.842335 0.164685 +vt 1.000000 0.979024 +vt 0.215095 0.272590 +vt 0.177933 0.269182 +vt 0.918067 0.741088 +vt 0.935362 0.708941 +vt 0.020584 0.080960 +vt 0.824768 0.103687 +vt 0.001296 0.059357 +vt 0.840007 0.754927 +vt 0.533612 0.986564 +vt 0.295272 0.181763 +vt 0.258111 0.178355 +vt 0.923487 0.813910 +vt 0.940782 0.781763 +vt 0.100762 0.171841 +vt 0.822440 0.693928 +vt 0.081474 0.150239 +vt 0.839840 0.511356 +vt 0.611671 0.986086 +vt 0.134917 0.272590 +vt 0.097756 0.269182 +vt 0.918093 0.050867 +vt 0.935388 0.018721 +vt 0.180940 0.171841 +vt 0.822273 0.450357 +vt 0.161652 0.150239 +vt 0.391027 0.646770 +vt 0.391027 0.699525 +vt 0.391112 0.773682 +vt 0.391112 0.722226 +vt 0.729409 0.698090 +vt 0.314101 0.599696 +vt 0.754910 0.693928 +vt 0.323853 0.557982 +vt 0.702724 0.022261 +vt 0.702724 0.075016 +vt 0.314101 0.779097 +vt 0.314101 0.727641 +vt 0.732061 0.372645 +vt 0.613133 0.323153 +vt 0.757562 0.368483 +vt 0.622885 0.281439 +vt 0.704624 0.027491 +vt 0.701045 0.117649 +vt 0.773676 0.122828 +vt 0.701045 0.170404 +vt 0.698515 0.682770 +vt 0.698515 0.631314 +vt 0.729242 0.281674 +vt 0.553417 0.240039 +vt 0.754743 0.277512 +vt 0.563168 0.198325 +vt 0.771076 0.549851 +vt 0.393313 0.021939 +vt 0.771076 0.602606 +vt 0.463744 0.773682 +vt 0.463744 0.722226 +vt 0.729242 0.456311 +vt 0.536375 0.663551 +vt 0.754743 0.452149 +vt 0.546126 0.621836 +vt 0.711465 0.211159 +vt 0.711465 0.263914 +vt 0.241470 0.779097 +vt 0.241470 0.727641 +vt 0.571361 0.698025 +vt 0.613133 0.501800 +vt 0.596862 0.693863 +vt 0.622885 0.460086 +vt 0.309904 0.646770 +vt 0.309904 0.699525 +vt 0.013485 0.773682 +vt 0.013485 0.722226 +vt 0.232979 0.599696 +vt 0.677985 0.693928 +vt 0.242730 0.557982 +vt 0.220249 0.758293 +vt 0.461297 0.489721 +vt 0.499511 0.456159 +vt 0.073627 0.331777 +vt 0.212389 0.856193 +vt 0.060982 0.362805 +vt 0.021775 0.446291 +vt 0.003418 0.425147 +vt 0.409688 0.370019 +vt 0.461297 0.306152 +vt 0.536375 0.286520 +vt 0.499511 0.272590 +vt 0.387699 0.331776 +vt 0.366187 0.861574 +vt 0.375054 0.362805 +vt 0.413880 0.171896 +vt 0.395522 0.150751 +vt 0.242107 0.304102 +vt 0.262493 0.275039 +vt 0.314101 0.496114 +vt 0.352316 0.462552 +vt 0.394279 0.145969 +vt 0.145118 0.856193 +vt 0.381634 0.176997 +vt 0.340252 0.260484 +vt 0.321895 0.239339 +vt 0.315705 0.399082 +vt 0.336091 0.370019 +vt 0.472283 0.123822 +vt 0.510497 0.090260 +vt 0.227373 0.426757 +vt 0.133943 0.547762 +vt 0.214728 0.457785 +vt 0.418256 0.260484 +vt 0.399898 0.239339 +vt 0.161959 0.304102 +vt 0.182345 0.275039 +vt 0.770039 0.969977 +vt 0.239023 0.496114 +vt 0.277237 0.462552 +vt 0.153775 0.426757 +vt 0.298915 0.861574 +vt 0.141130 0.457785 +vt 0.413880 0.083308 +vt 0.395522 0.062163 +vt 0.389302 0.304102 +vt 0.409688 0.275039 +vt 0.005099 0.489721 +vt 0.043314 0.456159 +vt 0.153775 0.331776 +vt 0.433458 0.861574 +vt 0.141130 0.362805 +vt 0.480897 0.446291 +vt 0.462540 0.425147 +vt 0.242107 0.399082 +vt 0.262493 0.370019 +vt 0.613133 0.344541 +vt 0.021447 0.858988 +vt 0.464897 0.561630 +vt 0.478980 0.856059 +vt 0.885763 0.082700 +vt 0.918093 0.062961 +vt 0.553417 0.261427 +vt 0.698137 0.858575 +vt 0.541655 0.551001 +vt 0.792013 0.918122 +vt 0.771349 0.886811 +vt 0.916738 0.427737 +vt 0.230534 0.534502 +vt 0.624326 0.858575 +vt 0.552641 0.114855 +vt 0.860504 0.357475 +vt 0.839840 0.326165 +vt 0.923215 0.581808 +vt 0.616058 0.439522 +vt 0.462030 0.858988 +vt 0.554320 0.018554 +vt 0.170181 0.856094 +vt 0.149516 0.824783 +vt 0.916414 0.162940 +vt 0.549041 0.076538 +vt 0.856469 0.195534 +vt 0.010379 0.561630 +vt 0.334766 0.861474 +vt 0.314101 0.830164 +vt 0.923487 0.826004 +vt 0.613133 0.528110 +vt 0.540089 0.858510 +vt 0.159055 0.557394 +vt 0.256706 0.861474 +vt 0.236042 0.830164 +vt 0.923487 0.898825 +vn -0.586000 -0.810300 0.000000 +vn -0.850900 -0.525300 0.000000 +vn -0.983500 -0.180700 0.000000 +vn -0.983500 0.180700 0.000000 +vn -0.850900 0.525300 0.000000 +vn -0.586000 0.810300 0.000000 +vn -0.414400 -0.810300 -0.414400 +vn -0.601700 -0.525300 -0.601700 +vn -0.695500 -0.180700 -0.695500 +vn -0.695500 0.180700 -0.695500 +vn -0.601700 0.525300 -0.601700 +vn -0.414400 0.810300 -0.414400 +vn 0.000000 -0.810300 -0.586000 +vn 0.000000 -0.525300 -0.850900 +vn 0.000000 -0.180700 -0.983500 +vn 0.000000 0.180700 -0.983500 +vn 0.000000 0.525300 -0.850900 +vn 0.000000 0.810300 -0.586000 +vn 0.414400 -0.810300 -0.414400 +vn 0.601700 -0.525300 -0.601700 +vn 0.695500 -0.180700 -0.695500 +vn 0.695500 0.180700 -0.695500 +vn 0.601700 0.525300 -0.601700 +vn 0.414400 0.810300 -0.414400 +vn 0.586000 -0.810300 0.000000 +vn 0.850900 -0.525300 0.000000 +vn 0.983500 -0.180700 0.000000 +vn 0.983500 0.180700 0.000000 +vn 0.850900 0.525300 0.000000 +vn 0.586000 0.810300 0.000000 +vn 0.414400 -0.810300 0.414400 +vn 0.601700 -0.525300 0.601700 +vn 0.695500 -0.180700 0.695500 +vn 0.695500 0.180700 0.695500 +vn 0.601700 0.525300 0.601700 +vn 0.414400 0.810300 0.414400 +vn 0.000000 -0.810300 0.586000 +vn -0.000000 -0.525300 0.850900 +vn 0.000000 -0.180700 0.983500 +vn -0.000000 0.180700 0.983500 +vn 0.000000 0.525300 0.850900 +vn -0.000000 0.810300 0.586000 +vn -0.210500 -0.977600 0.000000 +vn -0.210500 0.977600 0.000000 +vn -0.148800 -0.977600 -0.148800 +vn -0.148800 0.977600 -0.148800 +vn 0.000000 -0.977600 -0.210500 +vn 0.000000 0.977600 -0.210500 +vn 0.148800 -0.977600 -0.148800 +vn 0.148800 0.977600 -0.148800 +vn 0.210500 -0.977600 0.000000 +vn 0.210500 0.977600 0.000000 +vn 0.148800 -0.977600 0.148800 +vn 0.148800 0.977600 0.148800 +vn 0.000000 -0.977600 0.210500 +vn 0.000000 0.977600 0.210500 +vn -0.148800 -0.977600 0.148800 +vn -0.414400 -0.810300 0.414400 +vn -0.601700 -0.525300 0.601700 +vn -0.695500 -0.180700 0.695500 +vn -0.695500 0.180700 0.695500 +vn -0.601700 0.525300 0.601700 +vn -0.414400 0.810300 0.414400 +vn -0.148800 0.977600 0.148800 +vn 0.564300 -0.825500 -0.007300 +vn 0.206500 -0.978400 -0.006200 +vn -0.162600 -0.986700 -0.004300 +vn -0.502800 -0.864400 -0.001900 +vn -0.782200 -0.623100 0.000900 +vn -0.782100 -0.623100 0.000900 +vn -0.960700 -0.277400 0.003600 +vn 0.620200 -0.661900 -0.421100 +vn 0.287600 -0.740800 -0.607100 +vn -0.068800 -0.712000 -0.698800 +vn -0.409000 -0.589700 -0.696400 +vn -0.701000 -0.385400 -0.600000 +vn -0.904900 -0.113700 -0.410200 +vn 0.759400 -0.271000 -0.591400 +vn 0.489900 -0.173200 -0.854400 +vn 0.164900 -0.056000 -0.984700 +vn -0.175200 0.066200 -0.982300 +vn -0.175200 0.066300 -0.982300 +vn -0.498800 0.182100 -0.847400 +vn -0.765600 0.277100 -0.580600 +vn 0.900500 0.118000 -0.418500 +vn 0.694700 0.391700 -0.603300 +vn 0.401700 0.596900 -0.694500 +vn 0.061500 0.719200 -0.692100 +vn -0.293900 0.747000 -0.596300 +vn -0.624500 0.666200 -0.407700 +vn 0.960700 0.277400 -0.003600 +vn 0.782200 0.623100 -0.000900 +vn 0.502800 0.864400 0.001900 +vn 0.162600 0.986700 0.004300 +vn -0.206500 0.978400 0.006200 +vn -0.564300 0.825500 0.007300 +vn 0.904900 0.113700 0.410200 +vn 0.701000 0.385400 0.600000 +vn 0.409000 0.589700 0.696400 +vn 0.068800 0.712000 0.698800 +vn -0.287600 0.740800 0.607100 +vn -0.620200 0.661900 0.421100 +vn 0.765600 -0.277100 0.580600 +vn 0.498800 -0.182100 0.847400 +vn 0.175200 -0.066300 0.982300 +vn -0.164900 0.056000 0.984700 +vn -0.489900 0.173200 0.854400 +vn -0.759400 0.271000 0.591400 +vn 0.848800 -0.528700 -0.007200 +vn -0.991200 0.132600 0.005900 +vn 0.868800 -0.469900 -0.155800 +vn -0.971100 0.191400 -0.142700 +vn 0.918900 -0.329600 -0.217000 +vn -0.921100 0.331800 -0.203900 +vn 0.969500 -0.189800 -0.154900 +vn -0.870400 0.471500 -0.141800 +vn 0.991200 -0.132600 -0.005900 +vn -0.848800 0.528700 0.007200 +vn 0.971100 -0.191400 0.142700 +vn -0.868800 0.469900 0.155800 +vn 0.921100 -0.331800 0.203900 +vn -0.918900 0.329600 0.217000 +vn 0.870400 -0.471500 0.141800 +vn 0.624500 -0.666200 0.407700 +vn 0.293900 -0.747000 0.596300 +vn -0.061500 -0.719200 0.692100 +vn -0.401700 -0.596900 0.694500 +vn -0.694700 -0.391700 0.603300 +vn -0.900500 -0.118000 0.418500 +vn -0.969500 0.189800 0.154900 +vn 0.782100 0.623100 -0.000900 +vn 0.175200 -0.066200 0.982300 +vn -0.921100 0.331700 -0.203900 +vn 0.921100 -0.331700 0.203900 +vn -0.318200 -0.825400 -0.466200 +vn -0.118400 -0.978400 -0.169500 +vn 0.088200 -0.986700 0.136400 +vn 0.278900 -0.864500 0.418100 +vn 0.436000 -0.623300 0.649200 +vn 0.536900 -0.277600 0.796600 +vn -0.693700 -0.662500 -0.282700 +vn -0.663500 -0.741800 0.097100 +vn -0.541900 -0.713300 0.444500 +vn -0.351200 -0.591100 0.726200 +vn -0.109100 -0.386700 0.915700 +vn 0.161500 -0.114700 0.980200 +vn -0.913200 -0.272000 -0.303400 +vn -0.982300 -0.174700 0.066900 +vn -0.910400 -0.057800 0.409600 +vn -0.719700 0.064400 0.691300 +vn -0.427900 0.180400 0.885600 +vn -0.058000 0.275900 0.959400 +vn -0.848300 0.117500 -0.516300 +vn -0.888100 0.390700 -0.242200 +vn -0.801500 0.595700 0.052400 +vn -0.610700 0.717900 0.334100 +vn -0.333700 0.745900 0.576500 +vn 0.006900 0.665300 0.746600 +vn -0.536900 0.277600 -0.796600 +vn -0.436000 0.623300 -0.649200 +vn -0.278900 0.864500 -0.418100 +vn -0.088200 0.986700 -0.136400 +vn 0.118400 0.978400 0.169500 +vn 0.318200 0.825400 0.466200 +vn -0.161500 0.114700 -0.980200 +vn 0.109100 0.386700 -0.915700 +vn 0.351200 0.591100 -0.726200 +vn 0.541900 0.713300 -0.444500 +vn 0.663500 0.741800 -0.097100 +vn 0.693700 0.662500 0.282700 +vn 0.058000 -0.275900 -0.959400 +vn 0.427900 -0.180400 -0.885600 +vn 0.719700 -0.064400 -0.691300 +vn 0.910400 0.057800 -0.409600 +vn 0.982300 0.174700 -0.066900 +vn 0.913200 0.272000 0.303400 +vn -0.476600 -0.528600 -0.702500 +vn 0.555200 0.132400 0.821100 +vn -0.611400 -0.470000 -0.636500 +vn 0.420300 0.190900 0.887100 +vn -0.690300 -0.329800 -0.644000 +vn 0.341500 0.331200 0.879600 +vn -0.667000 -0.189900 -0.720500 +vn 0.364800 0.471000 0.803200 +vn -0.555200 -0.132400 -0.821100 +vn 0.476600 0.528600 0.702500 +vn -0.420300 -0.190900 -0.887100 +vn 0.611400 0.470000 0.636500 +vn -0.341500 -0.331200 -0.879600 +vn 0.690300 0.329800 0.644000 +vn -0.364800 -0.471000 -0.803200 +vn -0.006900 -0.665300 -0.746600 +vn 0.333700 -0.745900 -0.576500 +vn 0.610700 -0.717900 -0.334100 +vn 0.801500 -0.595700 -0.052400 +vn 0.888100 -0.390700 0.242200 +vn 0.848300 -0.117500 0.516300 +vn 0.667000 0.189900 0.720500 +vn 0.910400 0.057800 -0.409700 +vn 0.611400 0.470000 0.636600 +vn 0.088100 -0.986700 0.136400 +vn -0.088100 0.986700 -0.136400 +vn -0.611400 -0.470000 -0.636600 +vn -0.719600 0.064400 0.691300 +vn -0.278200 -0.826200 0.489900 +vn -0.132500 -0.977800 0.162400 +vn 0.024500 -0.984900 -0.171600 +vn 0.175200 -0.861700 -0.476300 +vn 0.305300 -0.619800 -0.722900 +vn 0.397200 -0.274000 -0.875900 +vn 0.078700 -0.686500 0.722800 +vn 0.385700 -0.774900 0.500700 +vn 0.623500 -0.750400 0.219400 +vn 0.774200 -0.627200 -0.085300 +vn 0.823500 -0.416900 -0.384700 +vn 0.754100 -0.134300 -0.642900 +vn 0.191700 -0.306400 0.932400 +vn 0.549800 -0.223000 0.805000 +vn 0.813100 -0.112400 0.571100 +vn 0.963800 0.010700 0.266500 +vn 0.987600 0.135000 -0.080400 +vn 0.867100 0.245800 -0.433300 +vn -0.005400 0.091500 0.995800 +vn 0.263500 0.354700 0.897100 +vn 0.482300 0.555300 0.677500 +vn 0.633000 0.678500 0.372900 +vn 0.701400 0.712700 0.011700 +vn 0.669900 0.643700 -0.369900 +vn -0.397200 0.274000 0.875900 +vn -0.305300 0.619800 0.722900 +vn -0.175200 0.861700 0.476300 +vn -0.024500 0.984900 0.171600 +vn 0.132500 0.977800 -0.162400 +vn 0.278200 0.826200 -0.489900 +vn 0.278200 0.826200 -0.489800 +vn -0.754100 0.134300 0.642900 +vn -0.823500 0.416900 0.384700 +vn -0.774200 0.627200 0.085300 +vn -0.623500 0.750400 -0.219400 +vn -0.385700 0.774900 -0.500700 +vn -0.078700 0.686500 -0.722800 +vn -0.867100 -0.245800 0.433300 +vn -0.987600 -0.135000 0.080400 +vn -0.963800 -0.010700 -0.266500 +vn -0.813100 0.112400 -0.571100 +vn -0.549800 0.223000 -0.805000 +vn -0.191700 0.306400 -0.932400 +vn -0.386000 -0.530700 0.754500 +vn 0.428800 0.135500 -0.893200 +vn -0.257900 -0.480500 0.838200 +vn 0.557000 0.185700 -0.809500 +vn -0.217300 -0.344000 0.913500 +vn 0.597500 0.322200 -0.734200 +vn -0.288100 -0.201100 0.936300 +vn 0.526700 0.465100 -0.711500 +vn -0.428800 -0.135500 0.893200 +vn 0.386000 0.530700 -0.754500 +vn -0.557000 -0.185700 0.809500 +vn 0.257800 0.480500 -0.838200 +vn -0.597500 -0.322200 0.734200 +vn 0.217300 0.344000 -0.913500 +vn -0.526700 -0.465100 0.711500 +vn -0.669900 -0.643700 0.369900 +vn -0.701400 -0.712700 -0.011700 +vn -0.633000 -0.678500 -0.372900 +vn -0.482300 -0.555300 -0.677500 +vn -0.263500 -0.354700 -0.897100 +vn 0.005400 -0.091500 -0.995800 +vn 0.288100 0.201100 -0.936300 +vn -0.278200 -0.826200 0.489800 +vn -0.257800 -0.480500 0.838200 +vn 0.257900 0.480500 -0.838200 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 2/4/2 4/5/2 5/6/2 +f 4/7/3 6/8/3 7/9/3 +f 6/8/4 8/10/4 9/11/4 +f 8/10/5 10/12/5 11/13/5 +f 10/14/6 12/15/6 13/16/6 +f 3/17/7 5/6/7 14/18/7 +f 5/6/8 7/19/8 15/20/8 +f 7/19/9 9/21/9 16/22/9 +f 9/21/10 11/23/10 17/24/10 +f 11/23/11 13/25/11 18/26/11 +f 13/16/12 19/27/12 20/28/12 +f 14/29/13 15/30/13 21/31/13 +f 15/20/14 16/22/14 22/32/14 +f 16/22/15 17/24/15 23/33/15 +f 17/24/16 18/26/16 24/34/16 +f 18/35/17 20/28/17 25/36/17 +f 20/28/18 26/37/18 27/38/18 +f 21/31/19 22/39/19 28/40/19 +f 22/41/20 23/42/20 29/43/20 +f 23/42/21 24/44/21 30/45/21 +f 24/44/22 25/46/22 31/47/22 +f 25/46/23 27/48/23 32/49/23 +f 27/38/24 33/50/24 34/51/24 +f 28/40/25 29/52/25 35/53/25 +f 29/43/26 30/45/26 36/54/26 +f 30/45/27 31/47/27 37/55/27 +f 31/47/28 32/49/28 38/56/28 +f 32/57/29 34/58/29 39/59/29 +f 34/51/30 40/60/30 41/61/30 +f 35/53/31 36/62/31 42/63/31 +f 36/64/32 37/65/32 43/66/32 +f 37/65/33 38/67/33 44/68/33 +f 38/67/34 39/59/34 45/69/34 +f 39/59/35 41/70/35 46/71/35 +f 41/70/36 47/72/36 48/73/36 +f 42/63/37 43/74/37 49/75/37 +f 43/74/38 44/76/38 50/77/38 +f 44/68/39 45/69/39 51/78/39 +f 45/69/40 46/71/40 52/79/40 +f 46/71/41 48/73/41 53/80/41 +f 48/81/42 54/82/42 55/83/42 +f 56/84/43 1/1/43 3/3/43 +f 12/15/44 57/85/44 19/27/44 +f 56/84/45 3/3/45 14/29/45 +f 19/27/46 57/85/46 26/37/46 +f 56/84/47 14/29/47 21/31/47 +f 26/37/48 57/85/48 33/50/48 +f 56/84/49 21/31/49 28/40/49 +f 33/50/50 57/85/50 40/60/50 +f 56/84/51 28/40/51 35/53/51 +f 40/60/52 57/85/52 47/86/52 +f 56/84/53 35/53/53 42/63/53 +f 47/86/54 57/85/54 54/82/54 +f 56/84/55 42/63/55 49/75/55 +f 54/82/56 57/85/56 58/87/56 +f 56/84/57 49/75/57 1/1/57 +f 49/75/58 50/77/58 2/2/58 +f 50/88/59 51/89/59 2/90/59 +f 51/89/60 52/91/60 4/7/60 +f 52/91/61 53/92/61 6/8/61 +f 53/92/62 55/93/62 10/12/62 +f 55/83/63 58/87/63 12/15/63 +f 58/87/64 57/85/64 12/15/64 +f 59/94/1 60/95/1 61/96/1 +f 60/97/2 62/98/2 63/99/2 +f 62/100/3 64/101/3 65/102/3 +f 64/101/4 66/103/4 67/104/4 +f 66/103/5 68/105/5 69/106/5 +f 68/107/6 70/108/6 71/109/6 +f 61/110/7 63/99/7 72/111/7 +f 63/99/8 65/112/8 73/113/8 +f 65/112/9 67/114/9 74/115/9 +f 67/114/10 69/116/10 75/117/10 +f 69/116/11 71/118/11 76/119/11 +f 71/109/12 77/120/12 78/121/12 +f 72/122/13 73/123/13 79/124/13 +f 73/113/14 74/115/14 80/125/14 +f 74/115/15 75/117/15 81/126/15 +f 75/117/16 76/119/16 82/127/16 +f 76/128/17 78/121/17 83/129/17 +f 78/121/18 84/130/18 85/131/18 +f 79/124/19 80/132/19 86/133/19 +f 80/134/20 81/135/20 87/136/20 +f 81/135/21 82/137/21 88/138/21 +f 82/137/22 83/139/22 89/140/22 +f 83/139/23 85/141/23 90/142/23 +f 85/131/24 91/143/24 92/144/24 +f 86/133/25 87/145/25 93/146/25 +f 87/136/26 88/138/26 94/147/26 +f 88/138/27 89/140/27 95/148/27 +f 89/140/28 90/142/28 96/149/28 +f 90/150/29 92/151/29 97/152/29 +f 92/144/30 98/153/30 99/154/30 +f 93/146/31 94/155/31 100/156/31 +f 94/157/32 95/158/32 101/159/32 +f 95/158/33 96/160/33 102/161/33 +f 96/160/34 97/152/34 103/162/34 +f 97/152/35 99/163/35 104/164/35 +f 99/163/36 105/165/36 106/166/36 +f 100/156/37 101/167/37 107/168/37 +f 101/167/38 102/169/38 107/168/38 +f 102/161/39 103/162/39 108/170/39 +f 103/162/40 104/164/40 109/171/40 +f 104/164/41 106/166/41 110/172/41 +f 106/173/42 111/174/42 112/175/42 +f 113/176/43 59/94/43 61/96/43 +f 70/108/44 114/177/44 77/120/44 +f 113/176/45 61/96/45 72/122/45 +f 77/120/46 114/177/46 84/130/46 +f 113/176/47 72/122/47 79/124/47 +f 84/130/48 114/177/48 91/143/48 +f 113/176/49 79/124/49 86/133/49 +f 91/143/50 114/177/50 98/153/50 +f 113/176/51 86/133/51 93/146/51 +f 98/153/52 114/177/52 105/178/52 +f 113/176/53 93/146/53 100/156/53 +f 105/178/54 114/177/54 111/174/54 +f 113/176/55 100/156/55 115/179/55 +f 111/174/56 114/177/56 116/180/56 +f 113/176/57 115/179/57 59/94/57 +f 115/179/58 107/168/58 59/94/58 +f 107/181/59 108/182/59 60/183/59 +f 108/182/60 109/184/60 62/100/60 +f 109/184/61 110/185/61 64/101/61 +f 110/185/62 112/186/62 66/103/62 +f 112/175/63 116/180/63 70/108/63 +f 116/180/64 114/177/64 70/108/64 +f 117/187/1 118/188/1 119/189/1 +f 118/190/2 120/191/2 121/192/2 +f 120/193/3 122/194/3 123/195/3 +f 122/194/4 124/196/4 125/197/4 +f 124/196/5 126/198/5 127/199/5 +f 126/200/6 128/201/6 129/202/6 +f 119/203/7 121/192/7 130/204/7 +f 121/192/8 123/205/8 131/206/8 +f 123/205/9 125/207/9 132/208/9 +f 125/207/10 127/209/10 133/210/10 +f 127/209/11 129/211/11 134/212/11 +f 129/202/12 135/213/12 136/214/12 +f 130/215/13 131/216/13 137/217/13 +f 131/206/14 132/208/14 138/218/14 +f 132/208/15 133/210/15 139/219/15 +f 133/210/16 134/212/16 139/219/16 +f 134/220/17 136/214/17 140/221/17 +f 136/214/18 141/222/18 140/221/18 +f 137/217/19 138/223/19 142/224/19 +f 138/225/20 143/226/20 144/227/20 +f 143/226/21 139/228/21 145/229/21 +f 139/228/22 146/230/22 147/231/22 +f 146/230/23 140/232/23 148/233/23 +f 140/221/24 149/234/24 150/235/24 +f 142/224/25 144/236/25 151/237/25 +f 144/227/26 145/229/26 152/238/26 +f 145/229/27 147/231/27 153/239/27 +f 147/231/28 148/233/28 154/240/28 +f 148/241/29 150/97/29 155/242/29 +f 150/235/30 156/243/30 157/244/30 +f 151/237/31 152/245/31 158/246/31 +f 152/247/32 153/248/32 159/249/32 +f 153/248/33 154/250/33 160/251/33 +f 154/250/34 155/242/34 161/252/34 +f 155/242/35 157/253/35 162/254/35 +f 157/253/36 163/255/36 164/256/36 +f 158/246/37 159/257/37 165/258/37 +f 159/257/38 160/259/38 166/260/38 +f 160/251/39 161/252/39 167/261/39 +f 161/252/40 162/254/40 168/262/40 +f 162/254/41 164/256/41 169/263/41 +f 164/264/42 170/265/42 171/266/42 +f 172/267/43 117/187/43 119/189/43 +f 128/201/44 173/268/44 135/213/44 +f 172/267/45 119/189/45 130/215/45 +f 135/213/46 173/268/46 141/222/46 +f 172/267/47 130/215/47 137/217/47 +f 141/222/48 173/268/48 149/234/48 +f 172/267/49 137/217/49 142/224/49 +f 149/234/50 173/268/50 156/243/50 +f 172/267/51 142/224/51 151/237/51 +f 156/243/52 173/268/52 163/269/52 +f 172/267/53 151/237/53 158/246/53 +f 163/269/54 173/268/54 170/265/54 +f 172/267/55 158/246/55 165/258/55 +f 170/265/56 173/268/56 174/270/56 +f 172/267/57 165/258/57 117/187/57 +f 165/258/58 166/260/58 117/187/58 +f 166/271/59 167/272/59 118/273/59 +f 167/272/60 168/274/60 120/193/60 +f 168/274/61 169/275/61 122/194/61 +f 169/275/62 171/276/62 124/196/62 +f 171/266/63 174/270/63 128/201/63 +f 174/270/64 173/268/64 128/201/64 +f 175/277/1 176/278/1 177/279/1 +f 176/280/2 178/281/2 179/282/2 +f 178/283/3 180/284/3 181/285/3 +f 180/284/4 182/286/4 183/287/4 +f 182/286/5 184/288/5 185/289/5 +f 184/290/6 186/291/6 187/292/6 +f 177/293/7 179/282/7 188/294/7 +f 179/282/8 181/295/8 189/296/8 +f 181/295/9 183/297/9 190/298/9 +f 183/297/10 185/299/10 191/300/10 +f 185/299/11 187/301/11 192/302/11 +f 187/292/12 193/303/12 194/304/12 +f 188/305/13 189/306/13 195/307/13 +f 189/296/14 190/298/14 196/308/14 +f 190/298/15 191/300/15 197/309/15 +f 191/300/16 192/302/16 198/310/16 +f 192/311/17 194/304/17 199/312/17 +f 194/304/18 200/313/18 201/314/18 +f 195/307/19 196/315/19 202/316/19 +f 196/317/20 197/318/20 203/319/20 +f 197/318/21 198/320/21 204/321/21 +f 198/320/22 199/322/22 205/323/22 +f 199/322/23 201/324/23 206/325/23 +f 201/314/24 207/326/24 208/327/24 +f 202/316/25 203/328/25 209/329/25 +f 203/319/26 204/321/26 210/330/26 +f 204/321/27 205/323/27 211/331/27 +f 205/323/28 206/325/28 212/332/28 +f 206/333/29 208/334/29 213/335/29 +f 208/327/30 214/336/30 215/337/30 +f 209/329/31 210/338/31 216/339/31 +f 210/340/32 211/341/32 217/342/32 +f 211/341/33 212/343/33 218/344/33 +f 212/343/34 213/335/34 219/345/34 +f 213/335/35 215/346/35 220/347/35 +f 215/346/36 221/348/36 222/349/36 +f 216/339/37 217/350/37 223/351/37 +f 217/350/38 218/352/38 224/353/38 +f 218/344/39 219/345/39 225/354/39 +f 219/345/40 220/347/40 226/355/40 +f 220/347/41 222/349/41 227/356/41 +f 222/357/42 228/358/42 229/359/42 +f 230/360/43 175/277/43 177/279/43 +f 186/291/44 231/361/44 193/303/44 +f 230/360/45 177/279/45 188/305/45 +f 193/303/46 231/361/46 200/313/46 +f 230/360/47 188/305/47 195/307/47 +f 200/313/48 231/361/48 207/326/48 +f 230/360/49 195/307/49 202/316/49 +f 207/326/50 231/361/50 214/336/50 +f 230/360/51 202/316/51 209/329/51 +f 214/336/52 231/361/52 221/362/52 +f 230/360/53 209/329/53 216/339/53 +f 221/362/54 231/361/54 228/358/54 +f 230/360/55 216/339/55 223/351/55 +f 228/358/56 231/361/56 232/363/56 +f 230/360/57 223/351/57 175/277/57 +f 223/351/58 224/353/58 175/277/58 +f 224/364/59 225/365/59 176/366/59 +f 225/365/60 226/367/60 178/283/60 +f 226/367/61 227/368/61 180/284/61 +f 227/368/62 229/369/62 182/286/62 +f 229/359/63 232/363/63 184/290/63 +f 232/363/64 231/361/64 186/291/64 +f 233/370/1 234/371/1 235/372/1 +f 234/373/2 236/374/2 237/375/2 +f 236/376/3 238/377/3 239/378/3 +f 238/377/4 240/379/4 241/380/4 +f 240/379/5 242/381/5 243/382/5 +f 242/383/6 244/384/6 245/385/6 +f 235/386/7 237/375/7 246/387/7 +f 237/375/8 239/388/8 247/389/8 +f 239/388/9 241/390/9 248/391/9 +f 241/390/10 243/392/10 249/393/10 +f 243/392/11 245/394/11 250/395/11 +f 245/385/12 251/396/12 252/397/12 +f 246/398/13 247/399/13 253/400/13 +f 247/389/14 248/391/14 254/401/14 +f 248/391/15 249/393/15 255/402/15 +f 249/393/16 250/395/16 256/403/16 +f 250/404/17 252/397/17 257/405/17 +f 252/397/18 258/406/18 259/407/18 +f 253/400/19 254/408/19 260/409/19 +f 254/410/20 255/411/20 261/412/20 +f 255/411/21 256/240/21 262/413/21 +f 256/240/22 257/414/22 263/415/22 +f 257/414/23 259/416/23 264/417/23 +f 259/407/24 265/418/24 266/419/24 +f 260/409/25 261/420/25 267/421/25 +f 261/412/26 262/413/26 268/422/26 +f 262/413/27 263/415/27 269/423/27 +f 263/415/28 264/417/28 270/424/28 +f 264/425/29 266/426/29 271/427/29 +f 266/419/30 272/428/30 273/429/30 +f 267/421/31 268/430/31 274/431/31 +f 268/432/32 269/433/32 275/434/32 +f 269/433/33 270/435/33 276/436/33 +f 270/435/34 271/427/34 277/437/34 +f 271/427/35 273/438/35 278/439/35 +f 273/438/36 279/440/36 280/441/36 +f 274/431/37 275/442/37 281/443/37 +f 275/442/38 276/444/38 282/445/38 +f 276/436/39 277/437/39 283/446/39 +f 277/437/40 278/439/40 284/447/40 +f 278/439/41 280/441/41 285/448/41 +f 280/449/42 286/450/42 287/451/42 +f 288/452/43 233/370/43 235/372/43 +f 244/384/44 289/453/44 251/396/44 +f 288/452/45 235/372/45 246/398/45 +f 251/396/46 289/453/46 258/406/46 +f 288/452/47 246/398/47 253/400/47 +f 258/406/48 289/453/48 265/418/48 +f 288/452/49 253/400/49 260/409/49 +f 265/418/50 289/453/50 272/428/50 +f 288/452/51 260/409/51 267/421/51 +f 272/428/52 289/453/52 279/454/52 +f 288/452/53 267/421/53 274/431/53 +f 279/454/54 289/453/54 286/450/54 +f 288/452/55 274/431/55 281/443/55 +f 286/450/56 289/453/56 290/455/56 +f 288/452/57 281/443/57 233/370/57 +f 281/443/58 282/445/58 233/370/58 +f 282/456/59 283/457/59 234/458/59 +f 283/457/60 284/459/60 236/376/60 +f 284/459/61 285/460/61 238/377/61 +f 285/460/62 287/461/62 240/379/62 +f 287/451/63 290/455/63 242/383/63 +f 290/455/64 289/453/64 244/384/64 +f 291/462/1 292/463/1 293/464/1 +f 292/426/2 294/465/2 295/466/2 +f 294/467/3 296/468/3 297/469/3 +f 296/468/4 298/470/4 299/471/4 +f 298/470/5 300/472/5 301/473/5 +f 300/474/6 302/475/6 303/476/6 +f 293/477/7 295/466/7 304/478/7 +f 295/466/8 297/479/8 305/480/8 +f 297/479/9 299/481/9 306/482/9 +f 299/481/10 301/483/10 307/484/10 +f 301/483/11 303/485/11 308/486/11 +f 303/476/12 309/487/12 310/488/12 +f 304/489/13 305/490/13 311/491/13 +f 305/480/14 306/482/14 312/492/14 +f 306/482/15 307/484/15 313/493/15 +f 307/484/16 308/486/16 314/494/16 +f 308/495/17 310/488/17 315/496/17 +f 310/488/18 316/497/18 317/498/18 +f 311/491/19 312/499/19 318/500/19 +f 312/501/20 313/502/20 319/503/20 +f 313/502/21 314/504/21 320/505/21 +f 314/504/22 315/506/22 321/507/22 +f 315/506/23 317/508/23 322/509/23 +f 317/498/24 323/510/24 324/511/24 +f 318/500/25 319/512/25 325/513/25 +f 319/503/26 320/505/26 326/514/26 +f 320/505/27 321/507/27 327/515/27 +f 321/507/28 322/509/28 328/516/28 +f 322/517/29 324/280/29 329/518/29 +f 324/511/30 330/519/30 331/520/30 +f 325/513/31 326/521/31 332/522/31 +f 326/523/32 327/524/32 333/525/32 +f 327/524/33 328/526/33 334/527/33 +f 328/526/34 329/518/34 335/528/34 +f 329/518/35 331/529/35 336/530/35 +f 331/529/36 337/531/36 338/532/36 +f 332/522/37 333/533/37 339/534/37 +f 333/533/38 334/535/38 340/536/38 +f 334/527/39 335/528/39 341/537/39 +f 335/528/40 336/530/40 342/538/40 +f 336/530/41 338/532/41 343/539/41 +f 338/540/42 344/541/42 345/542/42 +f 346/543/43 291/462/43 293/464/43 +f 302/475/44 347/544/44 309/487/44 +f 346/543/45 293/464/45 304/489/45 +f 309/487/46 347/544/46 316/497/46 +f 346/543/47 304/489/47 311/491/47 +f 316/497/48 347/544/48 323/510/48 +f 346/543/49 311/491/49 318/500/49 +f 323/510/50 347/544/50 330/519/50 +f 346/543/51 318/500/51 325/513/51 +f 330/519/52 347/544/52 337/545/52 +f 346/543/53 325/513/53 332/522/53 +f 337/545/54 347/544/54 344/541/54 +f 346/543/55 332/522/55 339/534/55 +f 344/541/56 347/544/56 348/546/56 +f 346/543/57 339/534/57 291/462/57 +f 339/534/58 340/536/58 291/462/58 +f 340/547/59 341/548/59 292/549/59 +f 341/548/60 342/550/60 294/467/60 +f 342/550/61 343/551/61 296/468/61 +f 343/551/62 345/552/62 298/470/62 +f 345/542/63 348/546/63 302/475/63 +f 348/546/64 347/544/64 302/475/64 +f 349/553/65 350/554/65 351/555/65 +f 350/554/66 352/556/66 353/557/66 +f 352/556/67 354/558/67 355/559/67 +f 354/558/68 356/560/68 357/561/68 +f 356/562/69 358/563/70 359/564/70 +f 358/565/71 360/566/71 361/567/71 +f 351/568/72 353/569/72 362/570/72 +f 353/557/73 355/559/73 363/571/73 +f 355/572/74 357/573/74 364/574/74 +f 357/573/75 359/564/75 365/575/75 +f 359/564/76 361/576/76 366/577/76 +f 361/576/77 367/578/77 368/579/77 +f 362/570/78 363/580/78 369/581/78 +f 363/580/79 364/582/79 370/583/79 +f 364/582/80 365/584/80 371/585/80 +f 365/575/81 366/577/81 372/586/82 +f 366/577/83 373/587/83 374/588/83 +f 373/587/84 368/579/84 375/589/84 +f 369/581/85 370/583/85 376/590/85 +f 370/583/86 371/585/86 377/591/86 +f 371/585/87 372/592/87 378/593/87 +f 372/594/88 374/595/88 379/596/88 +f 374/595/89 375/597/89 380/598/89 +f 375/597/90 381/599/90 382/600/90 +f 376/590/91 377/591/91 383/601/91 +f 377/602/92 378/603/92 384/604/92 +f 378/605/93 379/596/93 385/606/93 +f 379/596/94 380/598/94 386/607/94 +f 380/598/95 382/600/95 387/608/95 +f 382/600/96 388/609/96 387/608/96 +f 383/610/97 384/604/97 389/611/97 +f 384/604/98 385/612/98 390/613/98 +f 385/612/99 386/614/99 391/615/99 +f 386/614/100 392/616/100 393/617/100 +f 392/618/101 387/608/101 394/619/101 +f 387/620/102 395/621/102 396/622/102 +f 389/611/103 390/613/103 397/623/103 +f 390/613/104 391/615/104 398/624/104 +f 391/615/105 393/617/105 399/625/105 +f 393/626/106 394/627/106 400/628/106 +f 394/627/107 396/622/107 400/628/107 +f 396/622/108 401/629/108 402/630/108 +f 403/631/109 349/632/109 351/568/109 +f 360/566/110 404/633/110 367/634/110 +f 403/631/111 351/568/111 362/570/111 +f 367/578/112 404/635/112 368/579/112 +f 403/631/113 362/570/113 369/581/113 +f 368/579/114 404/635/114 381/636/114 +f 403/631/115 369/581/115 376/590/115 +f 381/637/116 404/633/116 388/638/116 +f 403/631/117 376/590/117 383/601/117 +f 388/638/118 404/633/118 395/621/118 +f 403/639/119 383/610/119 389/611/119 +f 395/621/120 404/633/120 401/629/120 +f 403/639/121 389/611/121 397/623/121 +f 401/629/122 404/633/122 405/640/122 +f 403/639/123 397/623/123 349/641/123 +f 397/642/124 398/643/124 349/553/124 +f 398/643/125 399/644/125 350/554/125 +f 399/644/126 406/645/126 352/556/126 +f 406/646/127 400/628/127 354/647/127 +f 400/628/128 402/630/128 356/648/128 +f 402/630/129 405/640/129 358/565/129 +f 405/640/130 404/633/130 360/566/130 +f 407/649/65 408/650/65 409/651/65 +f 408/650/66 410/652/66 411/653/66 +f 410/652/67 412/654/67 413/655/67 +f 412/654/68 414/656/68 415/657/68 +f 414/658/70 416/659/70 417/660/70 +f 416/661/71 418/662/71 419/663/71 +f 409/664/72 411/665/72 420/666/72 +f 411/653/73 413/655/73 421/667/73 +f 413/668/74 415/669/74 422/670/74 +f 415/669/75 417/660/75 423/671/75 +f 417/660/76 419/672/76 424/673/76 +f 419/672/77 425/674/77 426/675/77 +f 420/666/78 421/676/78 427/677/78 +f 421/676/79 422/678/79 427/677/79 +f 422/678/80 423/679/80 428/680/80 +f 423/671/81 424/673/82 429/681/82 +f 424/673/83 426/675/83 430/682/83 +f 426/675/84 431/683/84 432/684/84 +f 433/685/85 427/677/85 434/686/85 +f 427/677/86 428/680/86 435/687/86 +f 428/680/87 429/688/87 436/689/87 +f 429/690/88 430/691/88 437/692/88 +f 430/691/89 432/693/89 438/694/89 +f 432/693/90 439/695/90 440/696/90 +f 434/686/91 435/687/91 441/697/91 +f 435/698/131 436/699/131 442/700/131 +f 436/701/93 437/692/93 443/702/93 +f 437/692/94 438/694/94 444/703/94 +f 438/694/95 440/696/95 445/704/95 +f 440/696/96 446/705/96 447/706/96 +f 441/707/97 442/700/97 448/708/97 +f 442/700/98 443/709/98 449/710/98 +f 443/709/99 444/711/99 450/712/99 +f 444/711/100 445/713/100 451/714/100 +f 445/704/101 447/706/101 452/715/101 +f 447/716/102 453/717/102 454/718/102 +f 448/708/103 449/710/103 455/719/103 +f 449/710/104 450/712/104 456/720/104 +f 450/712/132 451/714/132 457/721/132 +f 451/722/106 452/723/106 458/724/106 +f 452/723/107 454/718/107 459/725/107 +f 454/718/108 460/726/108 461/727/108 +f 462/728/109 407/729/109 409/664/109 +f 418/662/110 463/730/110 425/731/110 +f 462/728/111 409/664/111 420/666/111 +f 425/674/112 463/732/112 431/683/112 +f 462/728/113 420/666/113 433/685/113 +f 431/683/114 463/732/114 439/733/114 +f 462/728/115 433/685/115 434/686/115 +f 439/734/116 463/730/116 446/735/116 +f 462/728/117 434/686/117 441/697/117 +f 446/735/118 463/730/118 453/717/118 +f 462/736/119 441/707/119 448/708/119 +f 453/717/120 463/730/120 460/726/120 +f 462/736/121 448/708/121 455/719/121 +f 460/726/122 463/730/122 464/737/122 +f 462/736/123 455/719/123 407/738/123 +f 455/739/124 456/740/124 407/649/124 +f 456/740/125 457/741/125 408/650/125 +f 457/741/126 458/742/126 410/652/126 +f 458/724/127 459/725/127 412/743/127 +f 459/725/128 461/727/128 416/661/128 +f 461/727/129 464/737/129 416/661/129 +f 464/737/130 463/730/130 418/662/130 +f 465/744/65 466/745/65 467/746/65 +f 466/745/66 468/747/66 469/748/66 +f 468/747/67 470/749/67 471/750/67 +f 470/749/68 472/751/68 473/752/68 +f 472/753/70 474/754/70 475/755/70 +f 474/756/71 476/757/71 477/758/71 +f 467/759/72 469/760/72 478/761/72 +f 469/748/73 471/750/73 479/762/73 +f 471/763/74 473/764/74 480/765/74 +f 473/764/75 475/755/75 481/766/75 +f 475/755/76 482/767/76 483/768/76 +f 482/767/77 477/769/77 484/770/77 +f 478/761/78 479/771/78 485/772/78 +f 479/771/79 480/773/79 486/774/79 +f 480/773/80 481/775/80 487/776/80 +f 481/766/82 483/768/82 488/777/82 +f 483/768/83 484/770/83 489/778/83 +f 484/770/84 490/779/84 491/780/84 +f 485/772/85 486/774/85 492/781/85 +f 486/774/86 487/776/86 493/782/86 +f 487/776/87 488/783/87 494/784/87 +f 488/785/88 489/786/88 495/787/88 +f 489/786/89 491/788/89 496/789/89 +f 491/788/90 497/790/90 498/791/90 +f 492/781/91 493/782/91 499/792/91 +f 493/793/92 494/794/92 500/795/131 +f 494/796/93 495/787/93 501/797/93 +f 495/787/94 496/789/94 502/798/94 +f 496/789/95 498/791/95 503/799/95 +f 498/791/96 504/800/96 505/801/96 +f 499/802/97 500/795/97 506/803/97 +f 500/795/98 501/804/98 507/805/98 +f 501/804/99 502/806/99 508/807/99 +f 502/806/100 503/808/100 509/809/100 +f 503/799/101 505/801/101 510/810/101 +f 505/811/102 511/812/102 512/813/102 +f 506/803/103 507/805/103 513/814/103 +f 507/805/104 508/807/104 513/814/104 +f 508/807/105 509/809/105 514/815/105 +f 509/816/106 510/817/106 515/818/106 +f 510/817/107 512/813/107 516/819/107 +f 512/813/108 517/820/108 518/821/108 +f 519/822/109 465/823/109 467/759/109 +f 476/757/110 520/824/110 477/758/110 +f 519/822/111 467/759/111 478/761/111 +f 477/769/112 520/825/112 490/779/112 +f 519/822/113 478/761/113 485/772/113 +f 490/779/133 520/825/133 497/826/133 +f 519/822/115 485/772/115 492/781/115 +f 497/827/116 520/824/116 504/828/116 +f 519/822/117 492/781/117 499/792/117 +f 504/828/118 520/824/118 511/812/118 +f 519/829/119 499/802/119 506/803/119 +f 511/812/120 520/824/120 517/820/120 +f 519/829/121 506/803/121 521/830/121 +f 517/820/122 520/824/122 522/831/122 +f 519/829/123 521/830/123 465/832/123 +f 521/833/124 513/834/124 465/744/124 +f 513/834/125 514/835/125 466/745/125 +f 514/835/126 515/836/126 468/747/126 +f 515/818/127 516/819/127 470/837/127 +f 516/819/128 518/821/128 472/838/128 +f 518/821/129 522/831/129 474/756/129 +f 522/831/130 520/824/130 476/757/130 +f 523/839/65 524/840/65 525/841/65 +f 524/840/66 526/842/66 527/843/66 +f 526/842/67 528/844/67 529/845/67 +f 528/844/68 530/846/68 531/847/68 +f 530/848/70 532/849/70 533/850/70 +f 532/851/71 534/852/71 535/853/71 +f 525/854/72 527/855/72 536/856/72 +f 527/843/73 529/845/73 537/857/73 +f 529/858/74 531/859/74 538/860/74 +f 531/859/75 533/850/75 539/861/75 +f 533/850/76 540/862/76 541/863/76 +f 540/862/77 535/864/77 542/865/77 +f 536/856/78 537/866/78 543/867/78 +f 537/866/79 538/868/79 544/869/79 +f 538/868/80 539/870/80 545/871/80 +f 539/861/82 541/863/81 546/872/81 +f 541/863/83 542/865/83 547/873/83 +f 542/865/84 548/874/84 549/875/84 +f 543/867/85 544/869/85 550/876/85 +f 544/869/86 545/871/86 551/877/86 +f 545/871/87 546/878/87 552/879/87 +f 546/880/88 547/881/88 553/882/88 +f 547/881/89 549/883/89 554/884/89 +f 549/883/90 555/885/90 556/886/90 +f 550/876/91 551/877/91 557/887/91 +f 551/888/92 552/889/131 558/890/131 +f 552/891/93 553/882/93 559/892/93 +f 553/882/94 554/884/94 560/893/94 +f 554/884/95 556/886/95 561/894/95 +f 556/886/96 562/895/96 563/896/96 +f 557/897/97 558/890/97 564/898/97 +f 558/890/98 559/899/98 564/898/98 +f 559/899/99 560/900/99 565/901/99 +f 560/900/100 561/902/100 566/903/100 +f 561/894/101 563/896/101 567/904/101 +f 563/905/102 568/906/102 569/907/102 +f 570/908/103 564/898/103 571/909/103 +f 564/898/104 565/901/104 572/910/104 +f 565/901/105 566/903/105 573/911/105 +f 566/912/106 567/913/106 574/914/106 +f 567/913/107 569/907/107 575/915/107 +f 569/907/108 576/916/108 577/917/108 +f 578/918/109 523/919/109 525/854/109 +f 534/852/110 579/920/110 535/853/110 +f 578/918/111 525/854/111 536/856/111 +f 535/864/112 579/921/112 548/874/112 +f 578/918/113 536/856/113 543/867/113 +f 548/874/114 579/921/114 555/922/114 +f 578/918/115 543/867/115 550/876/115 +f 555/923/116 579/920/116 562/924/116 +f 578/918/117 550/876/117 557/887/117 +f 562/924/118 579/920/118 568/906/118 +f 578/925/119 557/897/119 570/908/119 +f 568/906/120 579/920/120 576/916/120 +f 578/925/134 570/908/134 571/909/134 +f 576/916/122 579/920/122 580/926/122 +f 578/925/123 571/909/123 523/927/123 +f 571/928/124 572/929/124 523/839/124 +f 572/929/125 573/930/125 524/840/125 +f 573/930/126 574/931/126 526/842/126 +f 574/914/127 575/915/127 528/932/127 +f 575/915/128 577/917/128 530/933/128 +f 577/917/129 580/926/129 532/851/129 +f 580/926/130 579/920/130 534/852/130 +f 581/934/65 582/935/65 583/936/65 +f 582/935/66 584/937/66 585/938/66 +f 584/937/67 586/939/67 587/940/67 +f 586/939/68 588/941/68 589/942/68 +f 588/943/70 590/944/70 591/945/70 +f 590/946/71 592/947/71 593/948/71 +f 583/949/72 585/950/72 594/951/72 +f 585/938/73 587/940/73 595/952/73 +f 587/953/74 589/954/74 596/955/74 +f 589/954/75 591/945/75 597/956/75 +f 591/945/76 593/957/76 598/958/76 +f 593/957/77 599/959/77 600/960/77 +f 594/951/78 595/961/78 601/962/78 +f 595/961/79 596/963/79 602/964/79 +f 596/963/80 597/965/80 603/966/80 +f 597/956/82 598/958/82 604/967/82 +f 598/958/83 600/960/83 605/968/83 +f 600/960/84 606/969/84 607/970/84 +f 601/962/85 602/964/85 608/971/85 +f 602/964/86 603/966/86 609/972/86 +f 603/966/87 604/973/87 610/974/87 +f 604/975/88 605/976/88 611/977/88 +f 605/976/89 607/978/89 612/979/89 +f 607/978/90 613/980/90 614/981/90 +f 608/971/91 609/972/91 615/982/91 +f 609/983/92 610/984/131 616/985/131 +f 610/986/93 611/977/93 617/987/93 +f 611/977/94 612/979/94 618/988/94 +f 612/979/95 614/981/95 619/989/95 +f 614/981/96 620/990/96 621/991/96 +f 615/992/97 616/985/97 622/993/97 +f 616/985/98 617/994/98 623/995/98 +f 617/994/99 618/996/99 624/997/99 +f 618/996/100 619/998/100 625/999/100 +f 619/989/101 621/991/101 626/1000/101 +f 621/1001/102 627/1002/102 628/1003/102 +f 622/993/103 623/995/103 629/1004/103 +f 623/995/104 624/997/104 630/1005/104 +f 624/997/105 625/999/105 631/1006/105 +f 625/1007/106 626/1008/106 632/1009/106 +f 626/1008/107 628/1003/107 633/1010/107 +f 628/1003/108 634/1011/108 635/1012/108 +f 636/1013/109 581/1014/109 583/949/109 +f 592/947/110 637/1015/110 599/1016/110 +f 636/1013/111 583/949/111 594/951/111 +f 599/959/112 637/1017/112 606/969/112 +f 636/1013/113 594/951/113 601/962/113 +f 606/969/133 637/1017/133 613/1018/133 +f 636/1013/115 601/962/115 608/971/115 +f 613/1019/116 637/1015/116 620/1020/116 +f 636/1013/117 608/971/117 615/982/117 +f 620/1020/118 637/1015/118 627/1002/118 +f 636/1021/119 615/992/119 622/993/119 +f 627/1002/120 637/1015/120 634/1011/120 +f 636/1021/134 622/993/134 629/1004/134 +f 634/1011/122 637/1015/122 638/1022/122 +f 636/1021/123 629/1004/123 581/1023/123 +f 629/1024/124 630/1025/124 581/934/124 +f 630/1025/125 631/1026/125 582/935/125 +f 631/1026/126 632/1027/126 584/937/126 +f 632/1009/127 633/1010/127 586/1028/127 +f 633/1010/128 635/1012/128 588/1029/128 +f 635/1012/129 638/1022/129 592/947/129 +f 638/1022/130 637/1015/130 592/947/130 +f 639/1030/65 640/1031/65 641/1032/65 +f 640/1031/66 642/1033/66 643/1034/66 +f 642/1033/67 644/1035/67 645/1036/67 +f 644/1035/68 646/1037/68 647/1038/68 +f 646/1039/70 648/1040/70 649/1041/70 +f 648/1042/71 650/1043/71 651/1044/71 +f 641/1045/72 643/1046/72 652/1047/72 +f 643/1034/73 645/1036/73 653/1048/73 +f 645/1049/74 647/1050/74 654/1051/74 +f 647/1050/75 649/1041/75 655/1052/75 +f 649/1041/76 651/1053/76 656/1054/76 +f 651/1053/77 657/1055/77 658/1056/77 +f 652/1047/78 653/1057/78 659/1058/78 +f 653/1057/79 654/1059/79 660/1060/79 +f 654/1059/80 655/1061/80 661/1062/80 +f 655/1052/81 656/1054/82 662/1063/82 +f 656/1054/83 658/1056/83 663/1064/83 +f 658/1056/84 664/1065/84 665/1066/84 +f 659/1058/85 660/1060/85 666/1067/85 +f 660/1060/86 661/1062/86 666/1067/86 +f 661/1062/87 662/1068/87 667/1069/87 +f 662/1070/88 663/1071/88 668/1072/88 +f 663/1071/89 665/1073/89 669/1074/89 +f 665/1073/90 670/1075/90 671/1076/90 +f 672/1077/91 666/1067/91 673/1078/91 +f 666/1079/92 667/1080/131 674/1081/131 +f 667/1082/93 668/1072/93 675/1083/93 +f 668/1072/94 669/1074/94 676/1084/94 +f 669/1074/95 671/1076/95 677/1085/95 +f 671/1076/96 678/1086/96 679/1087/96 +f 673/1088/97 674/1081/97 680/1089/97 +f 674/1081/98 675/1090/98 681/1091/98 +f 675/1090/99 676/1092/99 682/1093/99 +f 676/1092/100 677/1094/100 683/1095/100 +f 677/1085/101 684/1096/101 685/1097/101 +f 684/1098/102 679/1099/102 686/1100/102 +f 680/1089/103 681/1091/103 687/1101/103 +f 681/1091/104 682/1093/104 688/1102/104 +f 682/1093/105 683/1095/105 689/1103/105 +f 683/1104/106 685/1105/106 690/1106/106 +f 685/1105/107 686/1100/107 691/1107/107 +f 686/1100/108 692/1108/108 693/1109/108 +f 694/1110/109 639/1111/109 641/1045/109 +f 650/1043/110 695/1112/110 657/1113/110 +f 694/1110/111 641/1045/111 652/1047/111 +f 657/1055/112 695/1114/112 664/1065/112 +f 694/1110/113 652/1047/113 659/1058/113 +f 664/1065/114 695/1114/114 670/1115/114 +f 694/1110/115 659/1058/115 672/1077/115 +f 670/1116/116 695/1112/116 678/1117/116 +f 694/1110/117 672/1077/117 673/1078/117 +f 678/1117/118 695/1112/118 679/1099/118 +f 694/1118/119 673/1088/119 680/1089/119 +f 679/1099/120 695/1112/120 692/1108/120 +f 694/1118/134 680/1089/134 687/1101/134 +f 692/1108/122 695/1112/122 696/1119/122 +f 694/1118/123 687/1101/123 639/1120/123 +f 687/1121/124 688/1122/124 639/1030/124 +f 688/1122/125 689/1123/125 640/1031/125 +f 689/1123/126 690/1124/126 642/1033/126 +f 690/1106/127 691/1107/127 644/1125/127 +f 691/1107/128 693/1109/128 648/1042/128 +f 693/1109/129 696/1119/129 648/1042/129 +f 696/1119/130 695/1112/130 650/1043/130 +f 697/1126/135 698/1127/135 699/1128/135 +f 698/1129/136 700/1130/136 701/1131/136 +f 700/1130/137 702/1132/137 703/1133/137 +f 702/1132/138 704/1134/138 705/1135/138 +f 704/1134/139 706/1136/139 707/1137/139 +f 706/1138/140 708/1139/140 709/1140/140 +f 699/1128/141 701/1141/141 710/1142/141 +f 701/1131/142 703/1133/142 711/1143/142 +f 703/1133/143 705/1135/143 712/1144/143 +f 705/1145/144 707/1146/144 713/1147/144 +f 707/1146/145 709/1148/145 714/1149/145 +f 709/1140/146 715/1150/146 716/1151/146 +f 710/1142/147 711/1152/147 717/1153/147 +f 711/1154/148 712/1155/148 718/1156/148 +f 712/1155/149 713/1147/149 719/1157/149 +f 713/1147/150 714/1149/150 720/1158/150 +f 714/1149/151 716/1159/151 721/1160/151 +f 716/1151/152 722/1161/152 723/1162/152 +f 717/1153/153 718/1163/153 724/1164/153 +f 718/1163/154 719/1165/154 725/1166/154 +f 719/1157/155 720/1158/155 726/1167/155 +f 720/1158/156 721/1160/156 727/1168/156 +f 721/1169/157 723/1170/157 728/1171/157 +f 723/1162/158 729/1172/158 730/1173/158 +f 724/1164/159 725/1166/159 731/1174/159 +f 725/1175/160 726/1176/160 732/1177/160 +f 726/1176/161 727/1178/161 733/1179/161 +f 727/1178/162 728/1171/162 734/1180/162 +f 728/1171/163 730/1181/163 735/1182/163 +f 730/1181/164 736/1183/164 737/1184/164 +f 731/1174/165 732/1185/165 738/1186/165 +f 732/1187/166 733/1188/166 739/1189/166 +f 733/1188/167 734/1190/167 740/1191/167 +f 734/1180/168 735/1182/168 741/1192/168 +f 735/1182/169 737/1184/169 742/1193/169 +f 737/1194/170 743/1195/170 744/1196/170 +f 738/1186/171 739/1197/171 745/1198/171 +f 739/1189/172 740/1191/172 745/1199/172 +f 740/1191/173 741/1200/173 746/1201/173 +f 741/1200/174 742/1202/174 747/1203/174 +f 742/1202/175 744/1204/175 748/1205/175 +f 744/1196/176 749/1206/176 748/1207/176 +f 750/1208/177 697/1126/177 699/1128/177 +f 708/1139/178 751/1209/178 715/1150/178 +f 750/1208/179 699/1128/179 710/1142/179 +f 715/1150/180 751/1209/180 722/1161/180 +f 750/1208/181 710/1142/181 717/1153/181 +f 722/1161/182 751/1209/182 729/1172/182 +f 750/1208/183 717/1153/183 724/1164/183 +f 729/1172/184 751/1209/184 736/1210/184 +f 750/1208/185 724/1164/185 731/1174/185 +f 736/1210/186 751/1209/186 743/1195/186 +f 750/1208/187 731/1174/187 738/1186/187 +f 743/1195/188 751/1209/188 749/1206/188 +f 750/1208/189 738/1186/189 752/1211/189 +f 749/1206/190 751/1209/190 753/1212/190 +f 750/1208/191 752/1211/191 697/1126/191 +f 752/1211/192 745/1198/192 698/1127/192 +f 745/1213/193 746/1214/193 698/1129/193 +f 746/1201/194 754/1215/194 700/1216/194 +f 754/1215/195 747/1203/195 702/1217/195 +f 747/1218/196 748/1207/196 704/1219/196 +f 748/1207/197 753/1212/197 706/1138/197 +f 753/1212/198 751/1209/198 708/1139/198 +f 755/1220/135 756/1221/135 757/1222/135 +f 756/1223/136 758/1224/136 759/1225/136 +f 758/1224/137 760/1226/137 761/1227/137 +f 760/1226/138 762/1228/138 763/1229/138 +f 762/1228/139 764/1230/139 765/1231/139 +f 764/1232/140 766/1233/140 767/1234/140 +f 757/1222/141 759/1235/141 768/1236/141 +f 759/1225/142 761/1227/142 769/1237/142 +f 761/1227/143 763/1229/143 769/1237/143 +f 763/1238/144 765/1239/144 770/1240/144 +f 765/1239/145 767/1241/145 771/1242/145 +f 767/1234/146 772/1243/146 773/1244/146 +f 768/1236/147 774/1245/147 775/1246/147 +f 774/1247/148 769/1248/148 776/1249/148 +f 769/1248/149 770/1240/149 777/1250/149 +f 770/1240/150 771/1242/150 778/1251/150 +f 771/1242/151 779/1252/151 780/1253/151 +f 779/1254/152 773/1244/152 781/1255/152 +f 775/1246/153 776/1256/153 782/1257/153 +f 776/1256/154 777/1258/154 783/1259/154 +f 777/1250/155 778/1251/155 784/1260/155 +f 778/1251/156 780/1253/156 785/1261/156 +f 780/1262/157 781/1263/157 786/1264/157 +f 781/1255/158 787/1265/158 788/1266/158 +f 782/1257/159 783/1259/159 789/1267/159 +f 783/1268/160 784/1269/160 790/1270/160 +f 784/1269/161 785/1271/161 791/1272/161 +f 785/1271/162 786/1264/162 792/1273/162 +f 786/1264/163 788/1274/163 793/1275/163 +f 788/1274/164 794/1276/164 795/1277/164 +f 789/1267/165 790/1278/165 796/1279/165 +f 790/1280/166 791/1281/166 797/1282/166 +f 791/1281/167 792/1283/167 798/1284/167 +f 792/1273/168 793/1275/168 799/1285/168 +f 793/1275/169 795/1277/169 800/1286/169 +f 795/1287/170 801/1288/170 802/1289/170 +f 796/1279/171 797/1290/171 803/1291/171 +f 797/1282/172 798/1284/172 804/1292/172 +f 798/1284/173 799/1293/173 805/1294/173 +f 799/1293/199 800/1295/174 806/1296/174 +f 800/1295/175 807/1297/175 808/1298/175 +f 807/1299/176 802/1289/176 809/1300/176 +f 810/1301/177 755/1220/177 757/1222/177 +f 766/1233/178 811/1302/178 772/1243/178 +f 810/1301/179 757/1222/179 768/1236/179 +f 772/1243/180 811/1302/180 773/1244/180 +f 810/1301/181 768/1236/181 775/1246/181 +f 773/1244/182 811/1302/182 787/1265/182 +f 810/1301/183 775/1246/183 782/1257/183 +f 787/1265/184 811/1302/184 794/1303/184 +f 810/1301/185 782/1257/185 789/1267/185 +f 794/1303/186 811/1302/186 801/1288/186 +f 810/1301/187 789/1267/187 796/1279/187 +f 801/1288/200 811/1302/200 802/1289/200 +f 810/1301/189 796/1279/189 803/1291/189 +f 802/1289/190 811/1302/190 809/1300/190 +f 810/1301/191 803/1291/191 755/1220/191 +f 803/1291/192 804/1304/192 755/1220/192 +f 804/1305/193 805/1306/193 756/1223/193 +f 805/1294/194 806/1296/194 758/1307/194 +f 806/1296/195 808/1298/195 760/1308/195 +f 808/1309/196 812/1310/196 762/1311/196 +f 812/1310/197 809/1300/197 766/1233/197 +f 809/1300/198 811/1302/198 766/1233/198 +f 813/1312/135 814/1313/135 815/1314/135 +f 814/1315/136 816/1316/136 817/1317/136 +f 816/1316/137 818/1318/201 819/1319/137 +f 818/1318/138 820/1320/138 819/1319/138 +f 820/1320/139 821/1321/139 822/1322/139 +f 821/1323/140 823/1324/140 824/1325/140 +f 815/1314/141 817/1326/141 825/1327/141 +f 817/1317/142 826/1328/142 827/1329/142 +f 826/1328/143 819/1319/143 828/1330/143 +f 819/1331/144 822/1332/144 829/1333/144 +f 822/1332/145 824/1334/145 830/1335/145 +f 824/1325/146 831/1336/146 832/1337/146 +f 825/1327/147 827/1338/147 833/1339/147 +f 827/1340/148 828/1341/148 834/1342/148 +f 828/1341/149 829/1333/149 835/1343/149 +f 829/1333/150 830/1335/150 836/1344/150 +f 830/1335/151 832/1345/151 837/1346/151 +f 832/1337/152 838/1347/152 839/1348/152 +f 833/1339/153 834/1349/153 840/1350/153 +f 834/1349/154 835/1351/154 841/1352/154 +f 835/1343/155 836/1344/155 842/1353/155 +f 836/1344/156 837/1346/156 843/1354/156 +f 837/1355/157 839/1356/157 844/1357/157 +f 839/1348/158 845/1358/158 846/1359/158 +f 840/1350/159 841/1352/159 847/1360/159 +f 841/1361/160 842/1362/160 848/1363/160 +f 842/1362/161 843/1364/161 849/1365/161 +f 843/1364/202 844/1357/202 850/1366/202 +f 844/1357/163 846/1367/163 851/1368/163 +f 846/1367/164 852/1369/164 853/1370/164 +f 847/1360/165 848/1371/165 854/1372/165 +f 848/1373/166 849/1374/166 855/1375/166 +f 849/1374/167 850/1376/167 856/1377/167 +f 850/1366/168 851/1368/168 857/1378/168 +f 851/1368/169 853/1370/169 858/1379/169 +f 853/1380/170 859/1381/170 860/1382/170 +f 854/1372/171 855/1383/171 861/1384/171 +f 855/1375/172 856/1377/172 862/1385/172 +f 856/1377/173 857/1386/173 863/1387/173 +f 857/1386/174 858/1388/174 864/1389/174 +f 858/1388/175 860/1390/175 865/1391/175 +f 860/1382/176 866/1392/176 867/1393/176 +f 868/1394/177 813/1312/177 815/1314/177 +f 823/1324/178 869/1395/178 831/1336/178 +f 868/1394/179 815/1314/179 825/1327/179 +f 831/1336/180 869/1395/180 838/1347/180 +f 868/1394/181 825/1327/181 833/1339/181 +f 838/1347/182 869/1395/182 845/1358/182 +f 868/1394/183 833/1339/183 840/1350/183 +f 845/1358/184 869/1395/184 852/1396/184 +f 868/1394/185 840/1350/185 847/1360/185 +f 852/1396/186 869/1395/186 859/1381/186 +f 868/1394/187 847/1360/187 854/1372/187 +f 859/1381/188 869/1395/188 866/1392/188 +f 868/1394/189 854/1372/189 861/1384/189 +f 866/1392/190 869/1395/190 867/1393/190 +f 868/1394/191 861/1384/191 813/1312/191 +f 861/1384/192 862/1397/192 813/1312/192 +f 862/1398/193 863/1399/193 814/1315/193 +f 863/1387/194 864/1389/194 816/1400/194 +f 864/1389/195 865/1391/195 818/1261/195 +f 865/1401/196 870/1402/196 820/1403/196 +f 870/1402/197 867/1393/197 821/1323/197 +f 867/1393/198 869/1395/198 823/1324/198 +f 871/1404/135 872/1405/135 873/1406/135 +f 872/1407/136 874/1408/136 875/1409/136 +f 874/1408/201 876/1410/201 875/1409/201 +f 876/1410/138 877/1411/138 878/1412/138 +f 877/1411/139 879/1413/139 880/1414/139 +f 879/1415/140 881/1416/140 882/1417/140 +f 873/1406/141 883/1418/141 884/1419/141 +f 883/1420/142 875/1409/142 885/1421/142 +f 875/1409/143 878/1412/143 886/1422/143 +f 878/1423/144 880/1424/144 887/1425/144 +f 880/1424/145 882/1426/145 888/1427/145 +f 882/1417/146 889/1428/146 890/1429/146 +f 884/1419/147 885/1430/147 891/1431/147 +f 885/1432/148 886/1433/148 892/1434/148 +f 886/1433/149 887/1425/149 893/1435/149 +f 887/1425/150 888/1427/150 894/1436/150 +f 888/1427/151 890/1437/151 895/1438/151 +f 890/1429/152 896/1439/152 897/1440/152 +f 891/1431/153 892/1441/153 898/1442/153 +f 892/1441/154 893/1443/154 899/1444/154 +f 893/1435/155 894/1436/155 900/1445/155 +f 894/1436/156 895/1438/156 901/1446/156 +f 895/1447/157 897/1448/157 902/1449/157 +f 897/1440/158 903/1450/158 904/1451/158 +f 898/1442/159 899/1444/159 905/1452/159 +f 899/1453/160 900/1454/160 906/1455/160 +f 900/1454/161 901/1456/161 907/1457/161 +f 901/1456/202 902/1449/162 908/1458/162 +f 902/1449/163 904/1459/163 909/1460/163 +f 904/1459/164 910/1461/164 911/1462/164 +f 905/1452/165 906/1463/165 912/1464/165 +f 906/1465/166 907/1466/166 913/1467/166 +f 907/1466/167 908/1468/167 914/1469/167 +f 908/1458/168 909/1460/168 915/1470/168 +f 909/1460/169 911/1462/169 916/1471/169 +f 911/1472/170 917/1473/170 918/1474/170 +f 912/1464/171 913/1475/171 919/1476/171 +f 913/1467/172 914/1469/172 920/1477/172 +f 914/1469/173 915/1478/173 921/1479/173 +f 915/1478/174 916/1480/174 922/1481/174 +f 916/1480/175 918/1482/175 923/1483/175 +f 918/1474/176 924/1484/176 925/1485/176 +f 926/1486/177 871/1404/177 873/1406/177 +f 881/1416/178 927/1487/178 889/1428/178 +f 926/1486/203 873/1406/203 884/1419/203 +f 889/1428/180 927/1487/180 896/1439/180 +f 926/1486/181 884/1419/181 891/1431/181 +f 896/1439/182 927/1487/182 903/1450/182 +f 926/1486/183 891/1431/183 898/1442/183 +f 903/1450/184 927/1487/184 910/1488/184 +f 926/1486/185 898/1442/185 905/1452/185 +f 910/1488/186 927/1487/186 917/1473/186 +f 926/1486/187 905/1452/187 912/1464/187 +f 917/1473/200 927/1487/200 924/1484/200 +f 926/1486/189 912/1464/189 919/1476/189 +f 924/1484/190 927/1487/190 928/1489/190 +f 926/1486/191 919/1476/191 871/1404/191 +f 919/1476/192 920/1490/192 871/1404/192 +f 920/1491/193 921/1492/193 872/1407/193 +f 921/1479/194 922/1481/194 874/1493/194 +f 922/1481/195 923/1483/195 876/1494/195 +f 923/1495/196 925/1485/196 879/1415/196 +f 925/1485/197 928/1489/197 879/1415/197 +f 928/1489/198 927/1487/198 881/1416/198 +f 929/1496/135 930/1497/135 931/1498/135 +f 930/1499/136 932/1500/136 933/1501/136 +f 932/1500/137 934/1502/137 935/1503/137 +f 934/1502/138 936/1504/138 937/1505/138 +f 936/1504/139 938/1506/139 939/1507/139 +f 938/1508/140 940/1509/140 941/1510/140 +f 931/1498/141 933/1511/141 942/1512/141 +f 933/1501/142 935/1503/142 943/1513/142 +f 935/1503/143 937/1505/143 944/1514/143 +f 937/1515/144 939/1516/144 945/1517/144 +f 939/1516/145 941/1518/145 946/1519/145 +f 941/1510/146 947/1520/146 948/1521/146 +f 942/1512/147 943/1522/147 949/1523/147 +f 943/1524/148 944/1525/148 950/1526/148 +f 944/1525/149 945/1517/149 951/1527/149 +f 945/1517/150 946/1519/150 952/1528/150 +f 946/1519/151 948/1529/151 953/1530/151 +f 948/1521/152 954/1531/152 955/1532/152 +f 949/1523/153 950/1533/153 956/1534/153 +f 950/1533/154 951/1535/154 957/1536/154 +f 951/1527/155 952/1528/155 958/1537/155 +f 952/1528/156 953/1530/156 959/1538/156 +f 953/1539/157 955/1540/157 960/1541/157 +f 955/1532/158 961/1542/158 962/1543/158 +f 956/1534/159 957/1536/159 963/1544/159 +f 957/1545/160 958/1546/160 964/1547/160 +f 958/1546/161 959/1548/161 965/1549/161 +f 959/1548/202 960/1541/162 966/1550/162 +f 960/1541/163 962/1551/163 967/1552/163 +f 962/1551/164 968/1553/164 969/1554/164 +f 963/1544/165 964/1555/165 970/1556/165 +f 964/1557/166 965/1558/166 971/1559/166 +f 965/1558/167 966/1560/167 972/1561/167 +f 966/1550/168 967/1552/168 973/1562/168 +f 967/1552/169 969/1554/169 974/1563/169 +f 969/1564/170 975/1565/170 976/1566/170 +f 970/1556/171 971/1567/171 977/1568/171 +f 971/1559/172 972/1561/172 978/1569/172 +f 972/1561/173 973/1570/173 979/1571/173 +f 973/1570/174 974/1572/174 980/1573/174 +f 974/1572/175 976/1574/175 981/1575/175 +f 976/1566/176 982/1576/176 983/1577/176 +f 984/1578/177 929/1496/177 931/1498/177 +f 940/1509/178 985/1579/178 947/1520/178 +f 984/1578/203 931/1498/203 942/1512/203 +f 947/1520/180 985/1579/180 954/1531/180 +f 984/1578/181 942/1512/181 949/1523/181 +f 954/1531/182 985/1579/182 961/1542/182 +f 984/1578/183 949/1523/183 956/1534/183 +f 961/1542/184 985/1579/184 968/1580/184 +f 984/1578/185 956/1534/185 963/1544/185 +f 968/1580/186 985/1579/186 975/1565/186 +f 984/1578/187 963/1544/187 970/1556/187 +f 975/1565/188 985/1579/188 982/1576/188 +f 984/1578/189 970/1556/189 977/1568/189 +f 982/1576/190 985/1579/190 986/1581/190 +f 984/1578/191 977/1568/191 929/1496/191 +f 977/1568/192 978/1582/192 929/1496/192 +f 978/1583/193 979/1584/193 930/1499/193 +f 979/1571/194 980/1573/194 932/1585/194 +f 980/1573/195 981/1575/195 934/1586/195 +f 981/1587/196 983/1577/196 936/1588/196 +f 983/1577/197 986/1581/197 938/1508/197 +f 986/1581/198 985/1579/198 940/1509/198 +f 987/1589/135 988/1590/135 989/1591/135 +f 988/1592/136 990/1593/136 991/1594/136 +f 990/1593/137 992/1595/137 993/1596/137 +f 992/1595/138 994/1597/138 995/1598/138 +f 994/1597/139 996/1599/139 997/1600/139 +f 996/1601/140 998/1602/140 999/1603/140 +f 989/1591/141 991/1604/141 1000/1605/141 +f 991/1594/142 993/1596/142 1001/1606/142 +f 993/1596/143 995/1598/143 1002/1607/143 +f 995/1608/144 997/1609/144 1003/1610/144 +f 997/1609/145 1004/1611/145 1005/1612/145 +f 1004/1613/146 999/1603/146 1006/1614/146 +f 1000/1605/147 1001/1615/147 1007/1616/147 +f 1001/1617/148 1002/1618/148 1008/1619/148 +f 1002/1618/149 1003/1610/149 1009/1620/149 +f 1003/1610/204 1005/1612/204 1010/1621/204 +f 1005/1612/151 1006/1622/151 1011/1623/151 +f 1006/1614/152 1012/1624/152 1013/1625/152 +f 1007/1616/153 1008/1626/153 1014/1627/153 +f 1008/1626/154 1009/1628/154 1015/1629/154 +f 1009/1620/155 1010/1621/155 1016/1630/155 +f 1010/1621/156 1011/1623/156 1017/1631/156 +f 1011/1632/157 1013/1633/157 1018/1634/157 +f 1013/1625/158 1019/1635/158 1020/1636/158 +f 1014/1627/159 1015/1629/159 1021/1637/159 +f 1015/1638/160 1016/1639/160 1022/1640/160 +f 1016/1639/161 1017/1641/161 1023/1642/161 +f 1017/1641/202 1018/1634/202 1024/1643/202 +f 1018/1634/163 1020/1644/163 1025/1645/163 +f 1020/1644/164 1026/1646/164 1027/1647/164 +f 1021/1637/165 1022/1648/165 1028/1649/165 +f 1022/1650/166 1023/1651/166 1028/1652/166 +f 1023/1651/167 1024/1653/167 1029/1654/167 +f 1024/1643/168 1025/1645/168 1030/1655/168 +f 1025/1645/169 1027/1647/169 1031/1656/169 +f 1027/1657/170 1032/1658/170 1033/1659/170 +f 1034/1660/171 1028/1649/171 1035/1661/171 +f 1028/1652/172 1029/1654/172 1036/1662/172 +f 1029/1654/173 1030/1663/173 1037/1664/173 +f 1030/1663/174 1031/1665/174 1038/1666/174 +f 1031/1665/175 1033/1667/175 1039/1668/175 +f 1033/1659/176 1040/1669/176 1041/1670/176 +f 1042/1671/177 987/1589/177 989/1591/177 +f 998/1602/178 1043/1672/178 999/1603/178 +f 1042/1671/203 989/1591/203 1000/1605/203 +f 999/1603/180 1043/1672/180 1012/1624/180 +f 1042/1671/181 1000/1605/181 1007/1616/181 +f 1012/1624/182 1043/1672/182 1019/1635/182 +f 1042/1671/183 1007/1616/183 1014/1627/183 +f 1019/1635/184 1043/1672/184 1026/1673/184 +f 1042/1671/185 1014/1627/185 1021/1637/185 +f 1026/1673/186 1043/1672/186 1032/1658/186 +f 1042/1671/187 1021/1637/187 1034/1660/187 +f 1032/1658/188 1043/1672/188 1040/1669/188 +f 1042/1671/189 1034/1660/189 1035/1661/189 +f 1040/1669/190 1043/1672/190 1044/1674/190 +f 1042/1671/191 1035/1661/191 987/1589/191 +f 1035/1661/192 1036/1675/192 987/1589/192 +f 1036/1676/193 1037/1677/193 988/1592/193 +f 1037/1664/194 1038/1666/194 990/1678/194 +f 1038/1666/195 1039/1668/195 992/1679/195 +f 1039/1680/196 1041/1670/196 994/1681/196 +f 1041/1670/197 1044/1674/197 996/1601/197 +f 1044/1674/198 1043/1672/198 998/1602/198 +f 1045/1682/205 1046/1683/205 1047/1684/205 +f 1046/1683/206 1048/1685/206 1049/1686/206 +f 1048/1685/207 1050/1687/207 1051/1688/207 +f 1050/1687/208 1052/1689/208 1053/1690/208 +f 1052/1691/209 1054/1692/209 1055/1693/209 +f 1054/1692/210 1056/1694/210 1057/1695/210 +f 1047/1684/211 1049/1686/211 1058/1696/211 +f 1049/1686/212 1051/1688/212 1059/1697/212 +f 1051/1688/213 1053/1690/213 1060/1698/213 +f 1053/1690/214 1055/1699/214 1061/1700/214 +f 1055/1693/215 1057/1695/215 1062/1701/215 +f 1057/1695/216 1063/1702/216 1064/1703/216 +f 1058/1704/217 1059/1705/217 1065/1706/217 +f 1059/1705/218 1060/1707/218 1066/1708/218 +f 1060/1707/219 1061/1709/219 1067/1710/219 +f 1061/1709/220 1062/1711/220 1068/1712/220 +f 1062/1701/221 1064/1703/221 1069/1713/221 +f 1064/1703/222 1070/1714/222 1071/1715/222 +f 1065/1706/223 1066/1708/223 1072/1716/223 +f 1066/1708/224 1067/1710/224 1073/1717/224 +f 1067/1710/225 1068/1712/225 1074/1718/225 +f 1068/1712/226 1069/1719/226 1075/1720/226 +f 1069/1721/227 1071/1722/227 1076/1723/227 +f 1071/1715/228 1077/1724/228 1078/1725/228 +f 1072/1726/229 1073/1727/229 1079/1728/229 +f 1073/1727/230 1074/1729/230 1080/1730/230 +f 1074/1731/231 1075/1732/231 1081/1733/231 +f 1075/1732/232 1076/1723/232 1082/1734/232 +f 1076/1723/233 1078/1735/233 1083/1736/233 +f 1078/1735/234 1084/1737/235 1085/1738/235 +f 1079/1728/236 1080/1730/236 1086/1739/236 +f 1080/1730/237 1081/1740/237 1087/1741/237 +f 1081/1733/238 1082/1734/238 1088/1742/238 +f 1082/1734/239 1083/1736/239 1089/1743/239 +f 1083/1736/240 1085/1738/240 1090/1744/240 +f 1085/1738/241 1091/1745/241 1092/1746/241 +f 1086/1739/242 1087/1741/242 1093/1747/242 +f 1087/1741/243 1088/1748/243 1094/1749/243 +f 1088/1750/244 1089/1751/244 1095/1752/244 +f 1089/1751/245 1090/1753/245 1096/1754/245 +f 1090/1753/246 1092/1755/246 1097/1756/246 +f 1092/1755/247 1098/1757/247 1099/1758/247 +f 1100/1759/248 1045/1760/248 1047/1761/248 +f 1056/1694/249 1101/1762/249 1063/1702/249 +f 1100/1759/250 1047/1761/250 1058/1763/250 +f 1063/1702/251 1101/1762/251 1070/1714/251 +f 1100/1759/252 1058/1763/252 1065/1764/252 +f 1070/1714/253 1101/1762/253 1077/1724/253 +f 1100/1759/254 1065/1764/254 1072/1726/254 +f 1077/1724/255 1101/1762/255 1084/1765/255 +f 1100/1759/256 1072/1726/256 1079/1728/256 +f 1084/1765/257 1101/1762/257 1091/1766/257 +f 1100/1759/258 1079/1728/258 1086/1739/258 +f 1091/1766/259 1101/1762/259 1098/1767/259 +f 1100/1759/260 1086/1739/260 1093/1747/260 +f 1098/1767/261 1101/1762/261 1102/1768/261 +f 1100/1759/262 1093/1747/262 1045/1760/262 +f 1093/1747/263 1094/1749/263 1046/1769/263 +f 1094/1770/264 1095/1771/264 1046/1683/264 +f 1095/1752/265 1096/1754/265 1048/1772/265 +f 1096/1754/266 1097/1756/266 1050/1773/266 +f 1097/1756/267 1099/1758/267 1054/1774/267 +f 1099/1758/268 1102/1775/268 1054/1774/268 +f 1102/1768/269 1101/1762/269 1056/1694/269 +f 1103/1776/270 1104/1777/270 1105/1778/270 +f 1104/1777/206 1106/1779/206 1107/1780/206 +f 1106/1779/207 1108/1781/207 1109/1782/207 +f 1108/1781/208 1110/1783/208 1111/1784/208 +f 1110/1785/209 1112/1786/209 1113/1787/209 +f 1112/1786/210 1114/1788/210 1115/1789/210 +f 1105/1778/211 1107/1780/211 1116/1790/211 +f 1107/1780/212 1109/1782/212 1117/1791/212 +f 1109/1782/213 1111/1784/213 1118/1792/213 +f 1111/1784/214 1113/1793/214 1119/1794/214 +f 1113/1787/215 1115/1789/215 1120/1795/215 +f 1115/1789/216 1121/1796/216 1122/1797/216 +f 1116/1798/217 1117/1799/217 1123/1800/217 +f 1117/1799/218 1118/1801/218 1124/1802/218 +f 1118/1801/219 1119/1803/219 1125/1804/219 +f 1119/1803/220 1120/1805/220 1126/1806/220 +f 1120/1795/221 1122/1797/221 1127/1807/221 +f 1122/1797/222 1128/1808/222 1129/1809/222 +f 1123/1800/223 1124/1802/223 1130/1810/223 +f 1124/1802/224 1125/1804/224 1131/1811/224 +f 1125/1804/225 1126/1806/225 1132/1812/225 +f 1126/1806/226 1127/1813/226 1133/1814/226 +f 1127/1815/227 1129/1816/227 1134/1817/227 +f 1129/1809/228 1135/1818/228 1136/1819/228 +f 1130/1820/229 1131/1821/229 1137/1822/229 +f 1131/1821/230 1132/1823/230 1138/1824/230 +f 1132/1825/231 1133/1826/231 1139/1827/231 +f 1133/1826/232 1134/1817/232 1140/1828/232 +f 1134/1817/233 1136/1829/233 1141/1830/233 +f 1136/1829/235 1142/1831/234 1143/1832/234 +f 1137/1822/236 1138/1824/236 1144/1833/236 +f 1138/1824/237 1139/1834/237 1145/1835/237 +f 1139/1827/238 1140/1828/238 1146/1836/238 +f 1140/1828/239 1141/1830/239 1147/1837/239 +f 1141/1830/240 1143/1832/240 1148/1838/240 +f 1143/1832/241 1149/1839/241 1150/1840/241 +f 1144/1833/242 1145/1835/242 1151/1841/242 +f 1145/1835/243 1146/1842/243 1152/1843/243 +f 1146/1844/244 1147/1845/244 1153/1846/244 +f 1147/1845/245 1148/1847/245 1154/1848/245 +f 1148/1847/246 1150/1849/246 1155/1850/246 +f 1150/1849/247 1156/1851/247 1157/1852/247 +f 1158/1853/248 1103/1854/248 1105/1855/248 +f 1114/1788/249 1159/1856/249 1121/1796/249 +f 1158/1853/271 1105/1855/271 1116/1857/271 +f 1121/1796/251 1159/1856/251 1128/1808/251 +f 1158/1853/252 1116/1857/252 1123/1858/252 +f 1128/1808/253 1159/1856/253 1135/1818/253 +f 1158/1853/254 1123/1858/254 1130/1820/254 +f 1135/1818/255 1159/1856/255 1142/1859/255 +f 1158/1853/256 1130/1820/256 1137/1822/256 +f 1142/1859/257 1159/1856/257 1149/1860/257 +f 1158/1853/258 1137/1822/258 1144/1833/258 +f 1149/1860/259 1159/1856/259 1156/1861/259 +f 1158/1853/260 1144/1833/260 1151/1841/260 +f 1156/1861/261 1159/1856/261 1160/1862/261 +f 1158/1853/262 1151/1841/262 1103/1854/262 +f 1151/1841/263 1152/1843/263 1103/1854/263 +f 1152/1863/264 1153/1864/264 1104/1777/264 +f 1153/1846/265 1154/1848/265 1106/1865/265 +f 1154/1848/266 1155/1850/266 1108/1866/266 +f 1155/1850/267 1157/1852/267 1110/1867/267 +f 1157/1852/268 1160/1868/268 1112/1869/268 +f 1160/1862/269 1159/1856/269 1114/1788/269 +f 1161/1870/270 1162/1871/270 1163/1872/270 +f 1162/1871/206 1164/1873/206 1165/1874/206 +f 1164/1873/207 1166/1875/207 1167/1876/207 +f 1166/1875/208 1168/1877/208 1169/1878/208 +f 1168/1879/209 1170/1880/209 1171/1881/209 +f 1170/1880/210 1172/1882/210 1173/1883/210 +f 1163/1872/211 1165/1874/211 1174/1884/211 +f 1165/1874/212 1167/1876/212 1175/1885/212 +f 1167/1876/213 1169/1878/213 1176/1886/213 +f 1169/1878/214 1171/1887/214 1177/1888/214 +f 1171/1881/215 1173/1883/215 1178/1889/215 +f 1173/1883/216 1179/1890/216 1180/1891/216 +f 1174/1892/217 1175/1893/217 1181/1894/217 +f 1175/1893/218 1176/1895/218 1182/1896/218 +f 1176/1895/219 1177/1897/219 1183/1898/219 +f 1177/1897/220 1178/1899/220 1184/1900/220 +f 1178/1889/221 1180/1891/221 1185/1901/221 +f 1180/1891/222 1186/1902/222 1187/1903/222 +f 1181/1894/223 1182/1896/223 1188/1904/223 +f 1182/1896/224 1183/1898/224 1189/1905/224 +f 1183/1898/225 1184/1900/225 1190/1906/225 +f 1184/1900/226 1185/1907/226 1191/1908/226 +f 1185/1909/227 1187/1910/227 1192/1911/227 +f 1187/1903/228 1193/1912/228 1194/1913/228 +f 1188/1914/229 1189/1915/229 1195/1916/229 +f 1189/1915/230 1190/1917/230 1196/1918/230 +f 1190/1919/231 1191/1920/231 1197/1921/231 +f 1191/1920/232 1192/1911/232 1198/1922/232 +f 1192/1911/233 1194/1923/233 1199/1924/233 +f 1194/1923/235 1200/1925/235 1201/1926/235 +f 1195/1916/236 1196/1918/236 1202/1927/236 +f 1196/1918/237 1197/1928/237 1203/1929/237 +f 1197/1921/238 1198/1922/238 1204/1930/238 +f 1198/1922/239 1199/1924/239 1205/1931/239 +f 1199/1924/240 1201/1926/240 1206/1932/240 +f 1201/1926/241 1207/1933/241 1208/1934/241 +f 1202/1927/242 1203/1929/242 1209/1935/242 +f 1203/1929/243 1204/1936/243 1210/1937/243 +f 1204/1938/244 1205/1939/244 1211/1940/244 +f 1205/1939/245 1206/1941/245 1212/1942/245 +f 1206/1941/246 1208/1943/246 1213/1944/246 +f 1208/1943/247 1214/1945/247 1215/1946/247 +f 1216/1947/248 1161/1948/248 1163/1949/248 +f 1172/1882/249 1217/1950/249 1179/1890/249 +f 1216/1947/271 1163/1949/271 1174/1951/271 +f 1179/1890/251 1217/1950/251 1186/1902/251 +f 1216/1947/252 1174/1951/252 1181/1952/252 +f 1186/1902/253 1217/1950/253 1193/1912/253 +f 1216/1947/254 1181/1952/254 1188/1914/254 +f 1193/1912/255 1217/1950/255 1200/1953/255 +f 1216/1947/256 1188/1914/256 1195/1916/256 +f 1200/1953/257 1217/1950/257 1207/1954/257 +f 1216/1947/258 1195/1916/258 1202/1927/258 +f 1207/1954/272 1217/1950/272 1214/1955/272 +f 1216/1947/260 1202/1927/260 1209/1935/260 +f 1214/1955/261 1217/1950/261 1218/1956/261 +f 1216/1947/262 1209/1935/262 1161/1948/262 +f 1209/1935/263 1210/1937/263 1161/1948/263 +f 1210/1957/264 1211/1958/264 1162/1871/264 +f 1211/1940/265 1212/1942/265 1164/1959/265 +f 1212/1942/266 1213/1944/266 1166/1960/266 +f 1213/1944/267 1215/1946/267 1168/1961/267 +f 1215/1946/268 1218/1962/268 1170/1963/268 +f 1218/1956/269 1217/1950/269 1172/1882/269 +f 1219/1964/205 1220/1965/205 1221/1966/205 +f 1220/1965/206 1222/1967/206 1223/1968/206 +f 1222/1967/207 1224/1969/207 1225/1970/207 +f 1224/1969/208 1226/1971/208 1227/1972/208 +f 1226/1973/209 1228/1974/209 1229/1975/209 +f 1228/1974/210 1230/1976/210 1231/1977/210 +f 1221/1966/211 1223/1968/211 1232/1978/211 +f 1223/1968/212 1225/1970/212 1233/1979/212 +f 1225/1970/213 1227/1972/213 1234/1980/213 +f 1227/1972/214 1229/1981/214 1235/1982/214 +f 1229/1975/215 1231/1977/215 1236/1983/215 +f 1231/1977/216 1237/1984/216 1238/1985/216 +f 1232/1986/217 1233/1987/217 1239/1988/217 +f 1233/1987/218 1234/1989/218 1240/1990/218 +f 1234/1989/219 1235/1991/219 1241/1992/219 +f 1235/1991/220 1236/1993/220 1242/1994/220 +f 1236/1983/221 1238/1985/221 1243/1995/221 +f 1238/1985/222 1244/1996/222 1245/1997/222 +f 1239/1988/223 1240/1990/223 1246/1998/223 +f 1240/1990/224 1241/1992/224 1247/1999/224 +f 1241/1992/225 1242/1994/225 1248/2000/225 +f 1242/1994/226 1243/2001/226 1249/2002/226 +f 1243/2003/227 1245/2004/227 1250/2005/227 +f 1245/1997/228 1251/2006/228 1252/2007/228 +f 1246/2008/229 1247/2009/229 1253/2010/229 +f 1247/2009/230 1248/2011/230 1254/2012/230 +f 1248/2013/231 1249/2014/231 1255/2015/231 +f 1249/2014/232 1250/2005/232 1256/2016/232 +f 1250/2005/233 1252/2017/233 1257/2018/233 +f 1252/2017/234 1258/2019/234 1259/2020/234 +f 1253/2010/236 1254/2012/236 1260/2021/236 +f 1254/2012/237 1255/2022/237 1261/2023/237 +f 1255/2015/238 1256/2016/238 1262/2024/238 +f 1256/2016/239 1257/2018/239 1263/2025/239 +f 1257/2018/240 1259/2020/240 1264/2026/240 +f 1259/2020/241 1265/2027/241 1266/2028/241 +f 1260/2021/242 1261/2023/242 1267/2029/242 +f 1261/2023/243 1262/2030/243 1268/2031/243 +f 1262/2032/244 1263/2033/244 1269/2034/244 +f 1263/2033/245 1264/2035/245 1270/2036/245 +f 1264/2035/246 1266/2037/246 1271/2038/246 +f 1266/2037/247 1272/2039/247 1273/2040/247 +f 1274/2041/248 1219/2042/248 1221/2043/248 +f 1230/1976/249 1275/2044/249 1237/1984/249 +f 1274/2041/271 1221/2043/271 1232/2045/271 +f 1237/1984/251 1275/2044/251 1244/1996/251 +f 1274/2041/252 1232/2045/252 1239/2046/252 +f 1244/1996/253 1275/2044/253 1251/2006/253 +f 1274/2041/254 1239/2046/254 1246/2008/254 +f 1251/2006/255 1275/2044/255 1258/2047/255 +f 1274/2041/256 1246/2008/256 1253/2010/256 +f 1258/2047/257 1275/2044/257 1265/2048/257 +f 1274/2041/258 1253/2010/258 1260/2021/258 +f 1265/2048/259 1275/2044/259 1272/2049/259 +f 1274/2041/260 1260/2021/260 1267/2029/260 +f 1272/2049/261 1275/2044/261 1276/2050/261 +f 1274/2041/262 1267/2029/262 1219/2042/262 +f 1267/2029/263 1268/2031/263 1219/2042/263 +f 1268/2051/264 1269/2052/264 1220/1965/264 +f 1269/2034/265 1270/2036/265 1222/2053/265 +f 1270/2036/266 1271/2038/266 1224/2054/266 +f 1271/2038/267 1273/2040/267 1226/2055/267 +f 1273/2040/268 1276/2056/268 1228/2057/268 +f 1276/2050/269 1275/2044/269 1230/1976/269 +f 1277/2058/205 1278/2059/205 1279/2060/205 +f 1278/2059/206 1280/2061/206 1281/2062/206 +f 1280/2061/207 1282/2063/207 1283/2064/207 +f 1282/2063/208 1284/2065/208 1285/2066/208 +f 1284/2067/209 1286/2068/209 1287/2069/209 +f 1286/2068/210 1288/2070/210 1289/2071/210 +f 1279/2060/211 1281/2062/211 1290/2072/211 +f 1281/2062/212 1283/2064/212 1291/2073/212 +f 1283/2064/213 1285/2066/213 1292/2074/213 +f 1285/2066/214 1287/2075/214 1293/2076/214 +f 1287/2069/215 1289/2071/215 1294/2077/215 +f 1289/2071/216 1295/2078/216 1296/2079/216 +f 1290/2080/217 1291/2081/217 1297/2082/217 +f 1291/2081/218 1292/2083/218 1298/2084/218 +f 1292/2083/219 1293/2085/219 1299/2086/219 +f 1293/2085/220 1294/2087/220 1300/2088/220 +f 1294/2077/221 1296/2079/221 1301/2089/221 +f 1296/2079/222 1302/2090/222 1303/2091/222 +f 1297/2082/223 1298/2084/223 1304/2092/223 +f 1298/2084/224 1299/2086/224 1305/2093/224 +f 1299/2086/225 1300/2088/225 1306/2094/225 +f 1300/2088/226 1301/2095/226 1307/2096/226 +f 1301/2097/227 1303/2098/227 1308/2099/227 +f 1303/2091/228 1309/2100/228 1310/2101/228 +f 1304/2102/229 1305/2103/229 1311/2104/229 +f 1305/2103/230 1306/2105/230 1312/2106/230 +f 1306/2107/231 1307/2108/231 1313/2109/231 +f 1307/2108/232 1308/2099/232 1314/2110/232 +f 1308/2099/233 1310/2111/233 1315/2112/233 +f 1310/2111/234 1316/2113/235 1317/2114/235 +f 1311/2104/236 1312/2106/236 1318/2115/236 +f 1312/2106/237 1313/2116/237 1319/2117/237 +f 1313/2109/238 1314/2110/238 1320/2118/238 +f 1314/2110/239 1315/2112/239 1321/2119/239 +f 1315/2112/240 1317/2114/240 1322/2120/240 +f 1317/2114/241 1323/2121/241 1324/2122/241 +f 1318/2115/242 1319/2117/242 1325/2123/242 +f 1319/2117/243 1320/2124/243 1326/2125/243 +f 1320/2126/244 1321/2127/244 1327/2128/244 +f 1321/2127/245 1322/2129/245 1328/2130/245 +f 1322/2129/246 1324/2131/246 1329/2132/246 +f 1324/2131/247 1330/2133/247 1331/2134/247 +f 1332/2135/248 1277/2136/248 1279/2137/248 +f 1288/2070/249 1333/2138/249 1295/2078/249 +f 1332/2135/250 1279/2137/250 1290/2139/250 +f 1295/2078/251 1333/2138/251 1302/2090/251 +f 1332/2135/252 1290/2139/252 1297/2140/252 +f 1302/2090/253 1333/2138/253 1309/2100/253 +f 1332/2135/254 1297/2140/254 1304/2102/254 +f 1309/2100/255 1333/2138/255 1316/2141/255 +f 1332/2135/256 1304/2102/256 1311/2104/256 +f 1316/2141/257 1333/2138/257 1323/2142/257 +f 1332/2135/258 1311/2104/258 1318/2115/258 +f 1323/2142/259 1333/2138/259 1330/2143/259 +f 1332/2135/260 1318/2115/260 1325/2123/260 +f 1330/2143/261 1333/2138/261 1334/1858/261 +f 1332/2135/262 1325/2123/262 1277/2136/262 +f 1325/2123/263 1326/2125/263 1277/2136/263 +f 1326/2144/264 1327/2145/264 1278/2059/264 +f 1327/2128/265 1328/2130/265 1280/2146/265 +f 1328/2130/266 1329/2132/266 1282/2147/266 +f 1329/2132/267 1331/2134/267 1284/2148/267 +f 1331/2134/268 1334/2149/268 1286/2150/268 +f 1334/1858/269 1333/2138/269 1288/2070/269 +f 1335/2151/270 1336/2152/270 1337/2153/270 +f 1336/2152/206 1338/2154/206 1339/2155/206 +f 1338/2154/207 1340/2156/207 1341/2157/207 +f 1340/2156/208 1342/2158/208 1343/2159/208 +f 1342/2160/209 1344/2161/209 1345/2162/209 +f 1344/2161/210 1346/2163/210 1347/2164/210 +f 1337/2153/211 1339/2155/211 1348/2165/211 +f 1339/2155/212 1341/2157/212 1349/2166/212 +f 1341/2157/213 1343/2159/213 1350/1838/213 +f 1343/2159/214 1345/2167/214 1351/2168/214 +f 1345/2162/215 1347/2164/215 1352/2169/215 +f 1347/2164/216 1353/2170/216 1354/2171/216 +f 1348/2172/217 1349/2173/217 1355/2174/217 +f 1349/2173/218 1350/2175/218 1356/2176/218 +f 1350/2175/219 1351/2177/219 1357/2178/219 +f 1351/2177/220 1352/2179/220 1358/2180/220 +f 1352/2169/221 1354/2171/221 1359/2181/221 +f 1354/2171/222 1360/2182/222 1361/2183/222 +f 1355/2174/223 1356/2176/223 1362/2184/223 +f 1356/2176/224 1357/2178/224 1363/2185/224 +f 1357/2178/225 1358/2180/225 1364/2186/225 +f 1358/2180/226 1359/2187/226 1365/2188/226 +f 1359/2189/227 1361/2190/227 1366/2191/227 +f 1361/2183/228 1367/2192/228 1368/2193/228 +f 1362/2194/229 1363/2195/229 1369/2196/229 +f 1363/2195/230 1364/2197/230 1370/2198/230 +f 1364/2199/231 1365/2200/231 1371/2201/231 +f 1365/2200/232 1366/2191/232 1372/2202/232 +f 1366/2191/233 1368/2203/233 1373/2204/233 +f 1368/2203/234 1374/2205/235 1375/2206/235 +f 1369/2196/236 1370/2198/236 1376/2207/236 +f 1370/2198/237 1371/2208/237 1377/2209/237 +f 1371/2201/238 1372/2202/238 1378/2210/238 +f 1372/2202/239 1373/2204/239 1379/2211/239 +f 1373/2204/240 1375/2206/240 1380/1886/240 +f 1375/2206/241 1381/2212/241 1382/2213/241 +f 1376/2207/242 1377/2209/242 1383/2214/242 +f 1377/2209/243 1378/2215/243 1384/2216/243 +f 1378/2217/244 1379/2147/244 1385/2218/244 +f 1379/2147/245 1380/2219/245 1386/2220/245 +f 1380/2219/246 1382/2221/246 1387/2222/246 +f 1382/2221/247 1388/2223/247 1389/2224/247 +f 1390/2225/248 1335/2226/248 1337/2227/248 +f 1346/2163/249 1391/2228/249 1353/2170/249 +f 1390/2225/271 1337/2227/271 1348/2229/271 +f 1353/2170/251 1391/2228/251 1360/2182/251 +f 1390/2225/252 1348/2229/252 1355/2230/252 +f 1360/2182/253 1391/2228/253 1367/2192/253 +f 1390/2225/254 1355/2230/254 1362/2194/254 +f 1367/2192/255 1391/2228/255 1374/2231/255 +f 1390/2225/256 1362/2194/256 1369/2196/256 +f 1374/2231/257 1391/2228/257 1381/2232/257 +f 1390/2225/258 1369/2196/258 1376/2207/258 +f 1381/2232/259 1391/2228/259 1388/2233/259 +f 1390/2225/260 1376/2207/260 1383/2214/260 +f 1388/2233/261 1391/2228/261 1392/2234/261 +f 1390/2225/262 1383/2214/262 1335/2226/262 +f 1383/2214/263 1384/2216/263 1335/2226/263 +f 1384/2235/264 1385/2236/264 1336/2152/264 +f 1385/2218/265 1386/2220/265 1338/2237/265 +f 1386/2220/266 1387/2222/266 1340/2238/266 +f 1387/2222/267 1389/2224/267 1342/2239/267 +f 1389/2224/268 1392/2240/268 1344/2241/268 +f 1392/2234/269 1391/2228/269 1346/2163/269 +f 2/2/1 5/2242/1 3/3/1 +f 4/5/2 7/19/2 5/6/2 +f 6/8/3 9/11/3 7/9/3 +f 8/10/4 11/13/4 9/11/4 +f 10/12/5 13/2243/5 11/13/5 +f 12/15/6 19/27/6 13/16/6 +f 5/6/7 15/20/7 14/18/7 +f 7/19/8 16/22/8 15/20/8 +f 9/21/9 17/24/9 16/22/9 +f 11/23/10 18/26/10 17/24/10 +f 13/25/11 20/2244/11 18/26/11 +f 19/27/12 26/37/12 20/28/12 +f 15/30/13 22/39/13 21/31/13 +f 16/22/14 23/33/14 22/32/14 +f 17/24/15 24/34/15 23/33/15 +f 18/26/16 25/2245/16 24/34/16 +f 20/28/17 27/38/17 25/36/17 +f 26/37/18 33/50/18 27/38/18 +f 22/39/19 29/52/19 28/40/19 +f 23/42/20 30/45/20 29/43/20 +f 24/44/21 31/47/21 30/45/21 +f 25/46/22 32/49/22 31/47/22 +f 27/48/23 34/2246/23 32/49/23 +f 33/50/24 40/60/24 34/51/24 +f 29/52/25 36/62/25 35/53/25 +f 30/45/26 37/55/26 36/54/26 +f 31/47/27 38/56/27 37/55/27 +f 32/49/28 39/2247/28 38/56/28 +f 34/58/29 41/70/29 39/59/29 +f 40/60/30 47/86/30 41/61/30 +f 36/62/31 43/74/31 42/63/31 +f 37/65/32 44/68/32 43/66/32 +f 38/67/33 45/69/33 44/68/33 +f 39/59/34 46/71/34 45/69/34 +f 41/70/35 48/73/35 46/71/35 +f 47/72/36 54/2248/36 48/73/36 +f 43/74/37 50/77/37 49/75/37 +f 44/76/38 51/2249/38 50/77/38 +f 45/69/39 52/79/39 51/78/39 +f 46/71/40 53/80/40 52/79/40 +f 48/73/41 55/2250/41 53/80/41 +f 54/82/42 58/87/42 55/83/42 +f 1/1/58 49/75/58 2/2/58 +f 51/89/59 4/7/59 2/90/59 +f 52/91/60 6/8/60 4/7/60 +f 53/92/61 8/10/61 6/8/61 +f 8/10/62 53/92/62 10/12/62 +f 10/14/63 55/83/63 12/15/63 +f 60/95/1 63/2251/1 61/96/1 +f 62/98/2 65/112/2 63/99/2 +f 64/101/3 67/104/3 65/102/3 +f 66/103/4 69/106/4 67/104/4 +f 68/105/5 71/2252/5 69/106/5 +f 70/108/6 77/120/6 71/109/6 +f 63/99/7 73/113/7 72/111/7 +f 65/112/8 74/115/8 73/113/8 +f 67/114/9 75/117/9 74/115/9 +f 69/116/10 76/119/10 75/117/10 +f 71/118/11 78/2253/11 76/119/11 +f 77/120/12 84/130/12 78/121/12 +f 73/123/13 80/132/13 79/124/13 +f 74/115/14 81/126/14 80/125/14 +f 75/117/15 82/127/15 81/126/15 +f 76/119/16 83/2254/16 82/127/16 +f 78/121/17 85/131/17 83/129/17 +f 84/130/18 91/143/18 85/131/18 +f 80/132/19 87/145/19 86/133/19 +f 81/135/20 88/138/20 87/136/20 +f 82/137/21 89/140/21 88/138/21 +f 83/139/22 90/142/22 89/140/22 +f 85/141/23 92/2255/23 90/142/23 +f 91/143/24 98/153/24 92/144/24 +f 87/145/25 94/155/25 93/146/25 +f 88/138/26 95/148/26 94/147/26 +f 89/140/27 96/149/27 95/148/27 +f 90/142/28 97/2256/28 96/149/28 +f 92/151/29 99/163/29 97/152/29 +f 98/153/30 105/178/30 99/154/30 +f 94/155/31 101/167/31 100/156/31 +f 95/158/32 102/161/32 101/159/32 +f 96/160/33 103/162/33 102/161/33 +f 97/152/34 104/164/34 103/162/34 +f 99/163/35 106/166/35 104/164/35 +f 105/165/36 111/2257/36 106/166/36 +f 115/179/37 100/156/37 107/168/37 +f 102/169/38 108/2258/38 107/168/38 +f 103/162/39 109/171/39 108/170/39 +f 104/164/40 110/172/40 109/171/40 +f 106/166/41 112/2259/41 110/172/41 +f 111/174/42 116/180/42 112/175/42 +f 107/168/58 60/95/58 59/94/58 +f 108/182/59 62/100/59 60/183/59 +f 109/184/60 64/101/60 62/100/60 +f 110/185/61 66/103/61 64/101/61 +f 112/186/62 68/105/62 66/103/62 +f 68/107/63 112/175/63 70/108/63 +f 118/188/1 121/2260/1 119/189/1 +f 120/191/2 123/205/2 121/192/2 +f 122/194/3 125/197/3 123/195/3 +f 124/196/4 127/199/4 125/197/4 +f 126/198/5 129/2261/5 127/199/5 +f 128/201/6 135/213/6 129/202/6 +f 121/192/7 131/206/7 130/204/7 +f 123/205/8 132/208/8 131/206/8 +f 125/207/9 133/210/9 132/208/9 +f 127/209/10 134/212/10 133/210/10 +f 129/211/11 136/2262/11 134/212/11 +f 135/213/12 141/222/12 136/214/12 +f 131/216/13 138/223/13 137/217/13 +f 132/208/14 143/2263/14 138/218/14 +f 143/2263/15 132/208/15 139/219/15 +f 134/212/16 146/2264/16 139/219/16 +f 146/2265/17 134/220/17 140/221/17 +f 141/222/18 149/234/18 140/221/18 +f 138/223/19 144/236/19 142/224/19 +f 143/226/20 145/229/20 144/227/20 +f 139/228/21 147/231/21 145/229/21 +f 146/230/22 148/233/22 147/231/22 +f 140/232/23 150/2266/23 148/233/23 +f 149/234/24 156/243/24 150/235/24 +f 144/236/25 152/245/25 151/237/25 +f 145/229/26 153/239/26 152/238/26 +f 147/231/27 154/240/27 153/239/27 +f 148/233/28 155/2267/28 154/240/28 +f 150/97/29 157/253/29 155/242/29 +f 156/243/30 163/269/30 157/244/30 +f 152/245/31 159/257/31 158/246/31 +f 153/248/32 160/251/32 159/249/32 +f 154/250/33 161/252/33 160/251/33 +f 155/242/34 162/254/34 161/252/34 +f 157/253/35 164/256/35 162/254/35 +f 163/255/36 170/2268/36 164/256/36 +f 159/257/37 166/260/37 165/258/37 +f 160/259/38 167/2269/38 166/260/38 +f 161/252/39 168/262/39 167/261/39 +f 162/254/40 169/263/40 168/262/40 +f 164/256/41 171/2270/41 169/263/41 +f 170/265/42 174/270/42 171/266/42 +f 166/260/58 118/188/58 117/187/58 +f 167/272/59 120/193/59 118/273/59 +f 168/274/60 122/194/60 120/193/60 +f 169/275/61 124/196/61 122/194/61 +f 171/276/62 126/198/62 124/196/62 +f 126/200/63 171/266/63 128/201/63 +f 176/278/1 179/2271/1 177/279/1 +f 178/281/2 181/295/2 179/282/2 +f 180/284/3 183/287/3 181/285/3 +f 182/286/4 185/289/4 183/287/4 +f 184/288/5 187/2272/5 185/289/5 +f 186/291/6 193/303/6 187/292/6 +f 179/282/7 189/296/7 188/294/7 +f 181/295/8 190/298/8 189/296/8 +f 183/297/9 191/300/9 190/298/9 +f 185/299/10 192/302/10 191/300/10 +f 187/301/11 194/2273/11 192/302/11 +f 193/303/12 200/313/12 194/304/12 +f 189/306/13 196/315/13 195/307/13 +f 190/298/14 197/309/14 196/308/14 +f 191/300/15 198/310/15 197/309/15 +f 192/302/16 199/2274/16 198/310/16 +f 194/304/17 201/314/17 199/312/17 +f 200/313/18 207/326/18 201/314/18 +f 196/315/19 203/328/19 202/316/19 +f 197/318/20 204/321/20 203/319/20 +f 198/320/21 205/323/21 204/321/21 +f 199/322/22 206/325/22 205/323/22 +f 201/324/23 208/2275/23 206/325/23 +f 207/326/24 214/336/24 208/327/24 +f 203/328/25 210/338/25 209/329/25 +f 204/321/26 211/331/26 210/330/26 +f 205/323/27 212/332/27 211/331/27 +f 206/325/28 213/2276/28 212/332/28 +f 208/334/29 215/346/29 213/335/29 +f 214/336/30 221/362/30 215/337/30 +f 210/338/31 217/350/31 216/339/31 +f 211/341/32 218/344/32 217/342/32 +f 212/343/33 219/345/33 218/344/33 +f 213/335/34 220/347/34 219/345/34 +f 215/346/35 222/349/35 220/347/35 +f 221/348/36 228/2277/36 222/349/36 +f 217/350/37 224/353/37 223/351/37 +f 218/352/38 225/2278/38 224/353/38 +f 219/345/39 226/355/39 225/354/39 +f 220/347/40 227/356/40 226/355/40 +f 222/349/41 229/2279/41 227/356/41 +f 228/358/42 232/363/42 229/359/42 +f 224/353/58 176/278/58 175/277/58 +f 225/365/59 178/283/59 176/366/59 +f 226/367/60 180/284/60 178/283/60 +f 227/368/61 182/286/61 180/284/61 +f 229/369/62 184/288/62 182/286/62 +f 232/363/63 186/291/63 184/290/63 +f 234/371/1 237/2280/1 235/372/1 +f 236/374/2 239/388/2 237/375/2 +f 238/377/3 241/380/3 239/378/3 +f 240/379/4 243/382/4 241/380/4 +f 242/381/5 245/2281/5 243/382/5 +f 244/384/6 251/396/6 245/385/6 +f 237/375/7 247/389/7 246/387/7 +f 239/388/8 248/391/8 247/389/8 +f 241/390/9 249/393/9 248/391/9 +f 243/392/10 250/395/10 249/393/10 +f 245/394/11 252/2282/11 250/395/11 +f 251/396/12 258/406/12 252/397/12 +f 247/399/13 254/408/13 253/400/13 +f 248/391/14 255/402/14 254/401/14 +f 249/393/15 256/403/15 255/402/15 +f 250/395/16 257/2283/16 256/403/16 +f 252/397/17 259/407/17 257/405/17 +f 258/406/18 265/418/18 259/407/18 +f 254/408/19 261/420/19 260/409/19 +f 255/411/20 262/413/20 261/412/20 +f 256/240/21 263/415/21 262/413/21 +f 257/414/22 264/417/22 263/415/22 +f 259/416/23 266/2284/23 264/417/23 +f 265/418/24 272/428/24 266/419/24 +f 261/420/25 268/430/25 267/421/25 +f 262/413/26 269/423/26 268/422/26 +f 263/415/27 270/424/27 269/423/27 +f 264/417/28 271/2285/28 270/424/28 +f 266/426/29 273/438/29 271/427/29 +f 272/428/30 279/454/30 273/429/30 +f 268/430/31 275/442/31 274/431/31 +f 269/433/32 276/436/32 275/434/32 +f 270/435/33 277/437/33 276/436/33 +f 271/427/34 278/439/34 277/437/34 +f 273/438/35 280/441/35 278/439/35 +f 279/440/36 286/2286/36 280/441/36 +f 275/442/37 282/445/37 281/443/37 +f 276/444/38 283/2287/38 282/445/38 +f 277/437/39 284/447/39 283/446/39 +f 278/439/40 285/448/40 284/447/40 +f 280/441/41 287/2288/41 285/448/41 +f 286/450/42 290/455/42 287/451/42 +f 282/445/58 234/371/58 233/370/58 +f 283/457/59 236/376/59 234/458/59 +f 284/459/60 238/377/60 236/376/60 +f 285/460/61 240/379/61 238/377/61 +f 287/461/62 242/381/62 240/379/62 +f 290/455/63 244/384/63 242/383/63 +f 292/463/1 295/2289/1 293/464/1 +f 294/465/2 297/479/2 295/466/2 +f 296/468/3 299/471/3 297/469/3 +f 298/470/4 301/473/4 299/471/4 +f 300/472/5 303/2290/5 301/473/5 +f 302/475/6 309/487/6 303/476/6 +f 295/466/7 305/480/7 304/478/7 +f 297/479/8 306/482/8 305/480/8 +f 299/481/9 307/484/9 306/482/9 +f 301/483/10 308/486/10 307/484/10 +f 303/485/11 310/2291/11 308/486/11 +f 309/487/12 316/497/12 310/488/12 +f 305/490/13 312/499/13 311/491/13 +f 306/482/14 313/493/14 312/492/14 +f 307/484/15 314/494/15 313/493/15 +f 308/486/16 315/2292/16 314/494/16 +f 310/488/17 317/498/17 315/496/17 +f 316/497/18 323/510/18 317/498/18 +f 312/499/19 319/512/19 318/500/19 +f 313/502/20 320/505/20 319/503/20 +f 314/504/21 321/507/21 320/505/21 +f 315/506/22 322/509/22 321/507/22 +f 317/508/23 324/2293/23 322/509/23 +f 323/510/24 330/519/24 324/511/24 +f 319/512/25 326/521/25 325/513/25 +f 320/505/26 327/515/26 326/514/26 +f 321/507/27 328/516/27 327/515/27 +f 322/509/28 329/2294/28 328/516/28 +f 324/280/29 331/529/29 329/518/29 +f 330/519/30 337/545/30 331/520/30 +f 326/521/31 333/533/31 332/522/31 +f 327/524/32 334/527/32 333/525/32 +f 328/526/33 335/528/33 334/527/33 +f 329/518/34 336/530/34 335/528/34 +f 331/529/35 338/532/35 336/530/35 +f 337/531/36 344/2295/36 338/532/36 +f 333/533/37 340/536/37 339/534/37 +f 334/535/38 341/2296/38 340/536/38 +f 335/528/39 342/538/39 341/537/39 +f 336/530/40 343/539/40 342/538/40 +f 338/532/41 345/2297/41 343/539/41 +f 344/541/42 348/546/42 345/542/42 +f 340/536/58 292/463/58 291/462/58 +f 341/548/59 294/467/59 292/549/59 +f 342/550/60 296/468/60 294/467/60 +f 343/551/61 298/470/61 296/468/61 +f 345/552/62 300/472/62 298/470/62 +f 300/474/63 345/542/63 302/475/63 +f 350/554/65 353/557/65 351/555/65 +f 352/556/66 355/559/66 353/557/66 +f 354/558/67 357/561/67 355/559/67 +f 356/560/68 359/2298/68 357/561/68 +f 358/563/70 361/576/70 359/564/70 +f 360/566/71 367/634/71 361/567/71 +f 353/569/72 363/580/72 362/570/72 +f 355/559/73 364/2299/73 363/571/73 +f 357/573/74 365/575/74 364/574/74 +f 359/564/75 366/577/75 365/575/75 +f 361/576/76 373/587/76 366/577/76 +f 373/587/77 361/576/77 368/579/77 +f 363/580/78 370/583/78 369/581/78 +f 364/582/79 371/585/79 370/583/79 +f 365/584/80 372/592/80 371/585/80 +f 366/577/81 374/588/82 372/586/82 +f 373/587/83 375/589/83 374/588/83 +f 368/579/84 381/636/84 375/589/84 +f 370/583/85 377/591/85 376/590/85 +f 371/585/86 378/593/86 377/591/86 +f 372/592/87 379/2300/87 378/593/87 +f 374/595/88 380/598/88 379/596/88 +f 375/597/89 382/600/89 380/598/89 +f 381/599/90 388/609/90 382/600/90 +f 377/591/91 384/2301/91 383/601/91 +f 378/603/92 385/612/92 384/604/92 +f 379/596/93 386/607/93 385/606/93 +f 380/598/94 392/618/94 386/607/94 +f 392/618/95 380/598/95 387/608/95 +f 388/609/96 395/2302/96 387/608/96 +f 384/604/97 390/613/97 389/611/97 +f 385/612/98 391/615/98 390/613/98 +f 386/614/99 393/617/99 391/615/99 +f 392/616/100 394/2303/100 393/617/100 +f 387/608/101 396/2304/101 394/619/101 +f 395/621/102 401/629/102 396/622/102 +f 390/613/103 398/624/103 397/623/103 +f 391/615/104 399/625/104 398/624/104 +f 393/617/105 406/2305/105 399/625/105 +f 406/646/106 393/626/106 400/628/106 +f 396/622/107 402/630/107 400/628/107 +f 401/629/108 405/640/108 402/630/108 +f 398/643/124 350/554/124 349/553/124 +f 399/644/125 352/556/125 350/554/125 +f 406/645/126 354/558/126 352/556/126 +f 400/628/127 356/648/127 354/647/127 +f 402/630/128 358/565/128 356/648/128 +f 405/640/129 360/566/129 358/565/129 +f 408/650/65 411/653/65 409/651/65 +f 410/652/66 413/655/66 411/653/66 +f 412/654/67 415/657/67 413/655/67 +f 414/656/68 417/2306/68 415/657/68 +f 416/659/70 419/672/70 417/660/70 +f 418/662/71 425/731/71 419/663/71 +f 411/665/72 421/676/72 420/666/72 +f 413/655/73 422/2307/73 421/667/73 +f 415/669/74 423/671/74 422/670/74 +f 417/660/75 424/673/75 423/671/75 +f 419/672/76 426/675/76 424/673/76 +f 425/674/77 431/683/77 426/675/77 +f 433/685/78 420/666/78 427/677/78 +f 422/678/79 428/680/79 427/677/79 +f 423/679/80 429/688/80 428/680/80 +f 424/673/82 430/682/82 429/681/82 +f 426/675/83 432/684/83 430/682/83 +f 431/683/84 439/733/84 432/684/84 +f 427/677/85 435/687/85 434/686/85 +f 428/680/86 436/689/86 435/687/86 +f 429/688/87 437/2308/87 436/689/87 +f 430/691/88 438/694/88 437/692/88 +f 432/693/89 440/696/89 438/694/89 +f 439/695/90 446/705/90 440/696/90 +f 435/687/91 442/2309/91 441/697/91 +f 436/699/131 443/709/131 442/700/131 +f 437/692/93 444/703/93 443/702/93 +f 438/694/94 445/704/94 444/703/94 +f 440/696/95 447/706/95 445/704/95 +f 446/705/96 453/2310/96 447/706/96 +f 442/700/97 449/710/97 448/708/97 +f 443/709/98 450/712/98 449/710/98 +f 444/711/99 451/714/99 450/712/99 +f 445/713/100 452/2311/100 451/714/100 +f 447/706/101 454/2312/101 452/715/101 +f 453/717/102 460/726/102 454/718/102 +f 449/710/103 456/720/103 455/719/103 +f 450/712/104 457/721/104 456/720/104 +f 451/714/132 458/2313/132 457/721/132 +f 452/723/106 459/725/106 458/724/106 +f 454/718/107 461/727/107 459/725/107 +f 460/726/108 464/737/108 461/727/108 +f 456/740/124 408/650/124 407/649/124 +f 457/741/125 410/652/125 408/650/125 +f 458/742/126 412/654/126 410/652/126 +f 459/725/127 414/2314/127 412/743/127 +f 414/2314/128 459/725/128 416/661/128 +f 464/737/129 418/662/129 416/661/129 +f 466/745/65 469/748/65 467/746/65 +f 468/747/66 471/750/66 469/748/66 +f 470/749/67 473/752/67 471/750/67 +f 472/751/68 475/2315/68 473/752/68 +f 474/754/70 482/767/70 475/755/70 +f 482/2316/71 474/756/71 477/758/71 +f 469/760/72 479/771/72 478/761/72 +f 471/750/73 480/2317/73 479/762/73 +f 473/764/74 481/766/74 480/765/74 +f 475/755/75 483/768/75 481/766/75 +f 482/767/76 484/770/76 483/768/76 +f 477/769/77 490/779/77 484/770/77 +f 479/771/78 486/774/78 485/772/78 +f 480/773/79 487/776/79 486/774/79 +f 481/775/80 488/783/80 487/776/80 +f 483/768/82 489/778/82 488/777/82 +f 484/770/83 491/780/83 489/778/83 +f 490/779/84 497/826/84 491/780/84 +f 486/774/85 493/782/85 492/781/85 +f 487/776/86 494/784/86 493/782/86 +f 488/783/87 495/2318/87 494/784/87 +f 489/786/88 496/789/88 495/787/88 +f 491/788/89 498/791/89 496/789/89 +f 497/790/90 504/800/90 498/791/90 +f 493/782/91 500/2319/91 499/792/91 +f 494/794/92 501/804/131 500/795/131 +f 495/787/93 502/798/93 501/797/93 +f 496/789/94 503/799/94 502/798/94 +f 498/791/95 505/801/95 503/799/95 +f 504/800/96 511/2320/96 505/801/96 +f 500/795/97 507/805/97 506/803/97 +f 501/804/98 508/807/98 507/805/98 +f 502/806/99 509/809/99 508/807/99 +f 503/808/100 510/2321/100 509/809/100 +f 505/801/101 512/2322/101 510/810/101 +f 511/812/102 517/820/102 512/813/102 +f 521/830/103 506/803/103 513/814/103 +f 508/807/104 514/815/104 513/814/104 +f 509/809/105 515/2323/105 514/815/105 +f 510/817/106 516/819/106 515/818/106 +f 512/813/107 518/821/107 516/819/107 +f 517/820/108 522/831/108 518/821/108 +f 513/834/124 466/745/124 465/744/124 +f 514/835/125 468/747/125 466/745/125 +f 515/836/126 470/749/126 468/747/126 +f 516/819/127 472/838/127 470/837/127 +f 518/821/128 474/756/128 472/838/128 +f 522/831/129 476/757/129 474/756/129 +f 524/840/65 527/843/65 525/841/65 +f 526/842/66 529/845/66 527/843/66 +f 528/844/67 531/847/67 529/845/67 +f 530/846/68 533/2324/68 531/847/68 +f 532/849/70 540/862/69 533/850/70 +f 540/2325/71 532/851/71 535/853/71 +f 527/855/72 537/866/72 536/856/72 +f 529/845/73 538/2326/73 537/857/73 +f 531/859/74 539/861/74 538/860/74 +f 533/850/75 541/863/75 539/861/75 +f 540/862/76 542/865/76 541/863/76 +f 535/864/77 548/874/77 542/865/77 +f 537/866/78 544/869/78 543/867/78 +f 538/868/79 545/871/79 544/869/79 +f 539/870/80 546/878/80 545/871/80 +f 541/863/81 547/873/81 546/872/81 +f 542/865/83 549/875/83 547/873/83 +f 548/874/84 555/922/84 549/875/84 +f 544/869/85 551/877/85 550/876/85 +f 545/871/86 552/879/86 551/877/86 +f 546/878/87 553/2327/87 552/879/87 +f 547/881/88 554/884/88 553/882/88 +f 549/883/89 556/886/89 554/884/89 +f 555/885/90 562/895/90 556/886/90 +f 551/877/91 558/2328/91 557/887/91 +f 552/889/131 559/899/131 558/890/131 +f 553/882/93 560/893/93 559/892/93 +f 554/884/94 561/894/94 560/893/94 +f 556/886/95 563/896/95 561/894/95 +f 562/895/96 568/2329/96 563/896/96 +f 570/908/97 557/897/97 564/898/97 +f 559/899/98 565/901/98 564/898/98 +f 560/900/99 566/903/99 565/901/99 +f 561/902/100 567/2330/100 566/903/100 +f 563/896/101 569/2331/101 567/904/101 +f 568/906/102 576/916/102 569/907/102 +f 564/898/103 572/910/103 571/909/103 +f 565/901/104 573/911/104 572/910/104 +f 566/903/105 574/2332/105 573/911/105 +f 567/913/106 575/915/106 574/914/106 +f 569/907/107 577/917/107 575/915/107 +f 576/916/108 580/926/108 577/917/108 +f 572/929/124 524/840/124 523/839/124 +f 573/930/125 526/842/125 524/840/125 +f 574/931/126 528/844/126 526/842/126 +f 575/915/127 530/933/127 528/932/127 +f 577/917/128 532/851/128 530/933/128 +f 580/926/129 534/852/129 532/851/129 +f 582/935/65 585/938/65 583/936/65 +f 584/937/66 587/940/66 585/938/66 +f 586/939/67 589/942/67 587/940/67 +f 588/941/68 591/2333/68 589/942/68 +f 590/944/70 593/957/70 591/945/70 +f 592/947/71 599/1016/71 593/948/71 +f 585/950/72 595/961/72 594/951/72 +f 587/940/73 596/2334/73 595/952/73 +f 589/954/74 597/956/74 596/955/74 +f 591/945/75 598/958/75 597/956/75 +f 593/957/76 600/960/76 598/958/76 +f 599/959/77 606/969/77 600/960/77 +f 595/961/78 602/964/78 601/962/78 +f 596/963/79 603/966/79 602/964/79 +f 597/965/80 604/973/80 603/966/80 +f 598/958/82 605/968/82 604/967/82 +f 600/960/83 607/970/83 605/968/83 +f 606/969/84 613/1018/84 607/970/84 +f 602/964/85 609/972/85 608/971/85 +f 603/966/86 610/974/86 609/972/86 +f 604/973/87 611/2335/87 610/974/87 +f 605/976/88 612/979/88 611/977/88 +f 607/978/89 614/981/89 612/979/89 +f 613/980/90 620/990/90 614/981/90 +f 609/972/91 616/2336/91 615/982/91 +f 610/984/131 617/994/131 616/985/131 +f 611/977/93 618/988/93 617/987/93 +f 612/979/94 619/989/94 618/988/94 +f 614/981/95 621/991/95 619/989/95 +f 620/990/96 627/2337/96 621/991/96 +f 616/985/97 623/995/97 622/993/97 +f 617/994/98 624/997/98 623/995/98 +f 618/996/99 625/999/99 624/997/99 +f 619/998/100 626/2338/100 625/999/100 +f 621/991/101 628/2339/101 626/1000/101 +f 627/1002/102 634/1011/102 628/1003/102 +f 623/995/103 630/1005/103 629/1004/103 +f 624/997/104 631/1006/104 630/1005/104 +f 625/999/105 632/2340/105 631/1006/105 +f 626/1008/106 633/1010/106 632/1009/106 +f 628/1003/107 635/1012/107 633/1010/107 +f 634/1011/108 638/1022/108 635/1012/108 +f 630/1025/124 582/935/124 581/934/124 +f 631/1026/125 584/937/125 582/935/125 +f 632/1027/126 586/939/126 584/937/126 +f 633/1010/127 588/1029/127 586/1028/127 +f 635/1012/128 590/946/128 588/1029/128 +f 590/946/129 635/1012/129 592/947/129 +f 640/1031/65 643/1034/65 641/1032/65 +f 642/1033/66 645/1036/66 643/1034/66 +f 644/1035/67 647/1038/67 645/1036/67 +f 646/1037/68 649/2341/68 647/1038/68 +f 648/1040/70 651/1053/70 649/1041/70 +f 650/1043/71 657/1113/71 651/1044/71 +f 643/1046/72 653/1057/72 652/1047/72 +f 645/1036/73 654/2342/73 653/1048/73 +f 647/1050/74 655/1052/74 654/1051/74 +f 649/1041/75 656/1054/75 655/1052/75 +f 651/1053/76 658/1056/76 656/1054/76 +f 657/1055/77 664/1065/77 658/1056/77 +f 653/1057/78 660/1060/78 659/1058/78 +f 654/1059/79 661/1062/79 660/1060/79 +f 655/1061/80 662/1068/80 661/1062/80 +f 656/1054/82 663/1064/82 662/1063/82 +f 658/1056/83 665/1066/83 663/1064/83 +f 664/1065/84 670/1115/84 665/1066/84 +f 672/1077/85 659/1058/85 666/1067/85 +f 661/1062/86 667/1069/86 666/1067/86 +f 662/1068/87 668/2343/87 667/1069/87 +f 663/1071/88 669/1074/88 668/1072/88 +f 665/1073/89 671/1076/89 669/1074/89 +f 670/1075/90 678/1086/90 671/1076/90 +f 666/1067/91 674/2344/91 673/1078/91 +f 667/1080/131 675/1090/131 674/1081/131 +f 668/1072/93 676/1084/93 675/1083/93 +f 669/1074/94 677/1085/94 676/1084/94 +f 671/1076/95 684/1096/95 677/1085/95 +f 684/1096/96 671/1076/96 679/1087/96 +f 674/1081/97 681/1091/97 680/1089/97 +f 675/1090/98 682/1093/98 681/1091/98 +f 676/1092/99 683/1095/99 682/1093/99 +f 677/1094/100 685/2345/100 683/1095/100 +f 684/1096/101 686/2346/101 685/1097/101 +f 679/1099/102 692/1108/102 686/1100/102 +f 681/1091/103 688/1102/103 687/1101/103 +f 682/1093/104 689/1103/104 688/1102/104 +f 683/1095/105 690/2347/105 689/1103/105 +f 685/1105/106 691/1107/106 690/1106/106 +f 686/1100/107 693/1109/107 691/1107/107 +f 692/1108/108 696/1119/108 693/1109/108 +f 688/1122/124 640/1031/124 639/1030/124 +f 689/1123/125 642/1033/125 640/1031/125 +f 690/1124/126 644/1035/126 642/1033/126 +f 691/1107/127 646/2348/127 644/1125/127 +f 646/2348/128 691/1107/128 648/1042/128 +f 696/1119/129 650/1043/129 648/1042/129 +f 698/1127/135 701/1141/135 699/1128/135 +f 700/1130/136 703/1133/136 701/1131/136 +f 702/1132/137 705/1135/137 703/1133/137 +f 704/1134/138 707/1137/138 705/1135/138 +f 706/1136/139 709/2349/139 707/1137/139 +f 708/1139/140 715/1150/140 709/1140/140 +f 701/1141/141 711/1152/141 710/1142/141 +f 703/1133/142 712/1144/142 711/1143/142 +f 705/1135/143 713/2350/143 712/1144/143 +f 707/1146/144 714/1149/144 713/1147/144 +f 709/1148/145 716/1159/145 714/1149/145 +f 715/1150/146 722/1161/146 716/1151/146 +f 711/1152/147 718/1163/147 717/1153/147 +f 712/1155/148 719/1157/148 718/1156/148 +f 713/1147/149 720/1158/149 719/1157/149 +f 714/1149/150 721/1160/150 720/1158/150 +f 716/1159/151 723/2351/151 721/1160/151 +f 722/1161/152 729/1172/152 723/1162/152 +f 718/1163/153 725/1166/153 724/1164/153 +f 719/1165/154 726/2352/154 725/1166/154 +f 720/1158/155 727/1168/155 726/1167/155 +f 721/1160/156 728/2353/156 727/1168/156 +f 723/1170/157 730/1181/157 728/1171/157 +f 729/1172/158 736/1210/158 730/1173/158 +f 725/1166/159 732/1185/159 731/1174/159 +f 726/1176/160 733/1179/160 732/1177/160 +f 727/1178/161 734/1180/161 733/1179/161 +f 728/1171/162 735/1182/162 734/1180/162 +f 730/1181/163 737/1184/163 735/1182/163 +f 736/1183/164 743/2354/164 737/1184/164 +f 732/1185/165 739/1197/165 738/1186/165 +f 733/1188/166 740/1191/166 739/1189/166 +f 734/1190/167 741/1200/167 740/1191/167 +f 735/1182/168 742/1193/168 741/1192/168 +f 737/1184/169 744/2355/169 742/1193/169 +f 743/1195/170 749/1206/170 744/1196/170 +f 752/1211/171 738/1186/171 745/1198/171 +f 740/1191/172 746/1201/172 745/1199/172 +f 741/1200/173 754/1215/173 746/1201/173 +f 754/1215/174 741/1200/174 747/1203/174 +f 747/1203/175 742/1202/175 748/1205/175 +f 749/1206/176 753/1212/176 748/1207/176 +f 697/1126/192 752/1211/192 698/1127/192 +f 746/1214/193 700/1130/193 698/1129/193 +f 754/1215/194 702/1217/194 700/1216/194 +f 747/1203/195 704/2356/195 702/1217/195 +f 748/1207/196 706/1138/196 704/1219/196 +f 753/1212/197 708/1139/197 706/1138/197 +f 756/1221/135 759/1235/135 757/1222/135 +f 758/1224/136 761/1227/136 759/1225/136 +f 760/1226/137 763/1229/137 761/1227/137 +f 762/1228/138 765/1231/138 763/1229/138 +f 764/1230/139 767/2357/139 765/1231/139 +f 766/1233/140 772/1243/140 767/1234/140 +f 759/1235/141 774/1245/141 768/1236/141 +f 774/2358/142 759/1225/142 769/1237/142 +f 763/1229/143 770/2359/143 769/1237/143 +f 765/1239/144 771/1242/144 770/1240/144 +f 767/1241/145 779/1252/145 771/1242/145 +f 779/1254/146 767/1234/146 773/1244/146 +f 774/1245/147 776/1256/147 775/1246/147 +f 769/1248/148 777/1250/148 776/1249/148 +f 770/1240/149 778/1251/149 777/1250/149 +f 771/1242/150 780/1253/204 778/1251/150 +f 779/1252/151 781/2360/151 780/1253/151 +f 773/1244/152 787/1265/152 781/1255/152 +f 776/1256/153 783/1259/153 782/1257/153 +f 777/1258/154 784/2361/154 783/1259/154 +f 778/1251/155 785/1261/155 784/1260/155 +f 780/1253/156 786/2362/156 785/1261/156 +f 781/1263/157 788/1274/157 786/1264/157 +f 787/1265/158 794/1303/158 788/1266/158 +f 783/1259/159 790/1278/159 789/1267/159 +f 784/1269/160 791/1272/160 790/1270/160 +f 785/1271/161 792/1273/161 791/1272/161 +f 786/1264/162 793/1275/202 792/1273/162 +f 788/1274/163 795/1277/163 793/1275/163 +f 794/1276/164 801/2363/164 795/1277/164 +f 790/1278/165 797/1290/165 796/1279/165 +f 791/1281/166 798/1284/166 797/1282/166 +f 792/1283/167 799/1293/167 798/1284/167 +f 793/1275/168 800/1286/168 799/1285/168 +f 795/1277/169 807/2364/169 800/1286/169 +f 807/1299/170 795/1287/170 802/1289/170 +f 797/1290/171 804/1304/171 803/1291/171 +f 798/1284/172 805/1294/172 804/1292/172 +f 799/1293/173 806/1296/173 805/1294/173 +f 800/1295/174 808/1298/174 806/1296/174 +f 807/1297/175 812/2365/175 808/1298/175 +f 812/1310/176 807/1299/176 809/1300/176 +f 804/1304/192 756/1221/192 755/1220/192 +f 805/1306/193 758/1224/193 756/1223/193 +f 806/1296/194 760/1308/194 758/1307/194 +f 808/1298/195 762/2366/195 760/1308/195 +f 812/1310/196 764/1232/196 762/1311/196 +f 764/1232/197 812/1310/197 766/1233/197 +f 814/1313/135 817/1326/135 815/1314/135 +f 816/1316/136 826/1328/136 817/1317/136 +f 826/1328/137 816/1316/137 819/1319/137 +f 820/1320/138 822/1322/138 819/1319/138 +f 821/1321/139 824/2367/139 822/1322/139 +f 823/1324/140 831/1336/140 824/1325/140 +f 817/1326/141 827/1338/141 825/1327/141 +f 826/1328/142 828/1330/142 827/1329/142 +f 819/1319/143 829/2368/143 828/1330/143 +f 822/1332/144 830/1335/144 829/1333/144 +f 824/1334/145 832/1345/145 830/1335/145 +f 831/1336/146 838/1347/146 832/1337/146 +f 827/1338/147 834/1349/147 833/1339/147 +f 828/1341/148 835/1343/148 834/1342/148 +f 829/1333/149 836/1344/149 835/1343/149 +f 830/1335/150 837/1346/150 836/1344/150 +f 832/1345/151 839/2369/151 837/1346/151 +f 838/1347/152 845/1358/152 839/1348/152 +f 834/1349/153 841/1352/153 840/1350/153 +f 835/1351/154 842/2370/154 841/1352/154 +f 836/1344/155 843/1354/155 842/1353/155 +f 837/1346/156 844/2371/156 843/1354/156 +f 839/1356/157 846/1367/157 844/1357/157 +f 845/1358/158 852/1396/158 846/1359/158 +f 841/1352/159 848/1371/159 847/1360/159 +f 842/1362/160 849/1365/160 848/1363/160 +f 843/1364/161 850/1366/161 849/1365/161 +f 844/1357/202 851/1368/202 850/1366/202 +f 846/1367/163 853/1370/163 851/1368/163 +f 852/1369/164 859/2372/164 853/1370/164 +f 848/1371/165 855/1383/165 854/1372/165 +f 849/1374/166 856/1377/166 855/1375/166 +f 850/1376/167 857/1386/167 856/1377/167 +f 851/1368/168 858/1379/168 857/1378/168 +f 853/1370/169 860/2373/169 858/1379/169 +f 859/1381/170 866/1392/170 860/1382/170 +f 855/1383/171 862/1397/171 861/1384/171 +f 856/1377/172 863/1387/172 862/1385/172 +f 857/1386/173 864/1389/173 863/1387/173 +f 858/1388/174 865/1391/174 864/1389/174 +f 860/1390/175 870/2374/175 865/1391/175 +f 870/1402/176 860/1382/176 867/1393/176 +f 862/1397/192 814/1313/192 813/1312/192 +f 863/1399/193 816/1316/193 814/1315/193 +f 864/1389/194 818/1261/194 816/1400/194 +f 865/1391/195 820/2375/195 818/1261/195 +f 870/1402/196 821/1323/196 820/1403/196 +f 867/1393/197 823/1324/197 821/1323/197 +f 872/1405/135 883/1418/135 873/1406/135 +f 883/1420/136 872/1407/136 875/1409/136 +f 876/1410/201 878/1412/201 875/1409/201 +f 877/1411/138 880/1414/138 878/1412/138 +f 879/1413/139 882/2376/139 880/1414/139 +f 881/1416/140 889/1428/140 882/1417/140 +f 883/1418/141 885/1430/141 884/1419/141 +f 875/1409/142 886/1422/142 885/1421/142 +f 878/1412/143 887/2377/143 886/1422/143 +f 880/1424/144 888/1427/144 887/1425/144 +f 882/1426/145 890/1437/145 888/1427/145 +f 889/1428/146 896/1439/146 890/1429/146 +f 885/1430/147 892/1441/147 891/1431/147 +f 886/1433/148 893/1435/148 892/1434/148 +f 887/1425/149 894/1436/149 893/1435/149 +f 888/1427/150 895/1438/150 894/1436/150 +f 890/1437/151 897/2378/151 895/1438/151 +f 896/1439/152 903/1450/152 897/1440/152 +f 892/1441/153 899/1444/153 898/1442/153 +f 893/1443/154 900/2379/154 899/1444/154 +f 894/1436/155 901/1446/155 900/1445/155 +f 895/1438/156 902/2380/156 901/1446/156 +f 897/1448/157 904/1459/157 902/1449/157 +f 903/1450/158 910/1488/158 904/1451/158 +f 899/1444/159 906/1463/159 905/1452/159 +f 900/1454/160 907/1457/160 906/1455/160 +f 901/1456/161 908/1458/161 907/1457/161 +f 902/1449/162 909/1460/162 908/1458/162 +f 904/1459/163 911/1462/163 909/1460/163 +f 910/1461/164 917/2381/164 911/1462/164 +f 906/1463/165 913/1475/165 912/1464/165 +f 907/1466/166 914/1469/166 913/1467/166 +f 908/1468/167 915/1478/167 914/1469/167 +f 909/1460/168 916/1471/168 915/1470/168 +f 911/1462/169 918/2382/169 916/1471/169 +f 917/1473/170 924/1484/170 918/1474/170 +f 913/1475/171 920/1490/171 919/1476/171 +f 914/1469/172 921/1479/172 920/1477/172 +f 915/1478/173 922/1481/173 921/1479/173 +f 916/1480/174 923/1483/174 922/1481/174 +f 918/1482/175 925/2383/175 923/1483/175 +f 924/1484/176 928/1489/176 925/1485/176 +f 920/1490/192 872/1405/192 871/1404/192 +f 921/1492/193 874/1408/193 872/1407/193 +f 922/1481/194 876/1494/194 874/1493/194 +f 923/1483/195 877/2384/195 876/1494/195 +f 877/2385/196 923/1495/196 879/1415/196 +f 928/1489/197 881/1416/197 879/1415/197 +f 930/1497/135 933/1511/135 931/1498/135 +f 932/1500/136 935/1503/136 933/1501/136 +f 934/1502/137 937/1505/137 935/1503/137 +f 936/1504/138 939/1507/138 937/1505/138 +f 938/1506/139 941/2386/139 939/1507/139 +f 940/1509/140 947/1520/140 941/1510/140 +f 933/1511/141 943/1522/141 942/1512/141 +f 935/1503/142 944/1514/142 943/1513/142 +f 937/1505/143 945/2387/143 944/1514/143 +f 939/1516/144 946/1519/144 945/1517/144 +f 941/1518/145 948/1529/145 946/1519/145 +f 947/1520/146 954/1531/146 948/1521/146 +f 943/1522/147 950/1533/147 949/1523/147 +f 944/1525/148 951/1527/148 950/1526/148 +f 945/1517/149 952/1528/149 951/1527/149 +f 946/1519/150 953/1530/150 952/1528/150 +f 948/1529/151 955/2388/151 953/1530/151 +f 954/1531/152 961/1542/152 955/1532/152 +f 950/1533/153 957/1536/153 956/1534/153 +f 951/1535/154 958/2389/154 957/1536/154 +f 952/1528/155 959/1538/155 958/1537/155 +f 953/1530/156 960/2390/156 959/1538/156 +f 955/1540/157 962/1551/157 960/1541/157 +f 961/1542/158 968/1580/158 962/1543/158 +f 957/1536/159 964/1555/159 963/1544/159 +f 958/1546/160 965/1549/160 964/1547/160 +f 959/1548/161 966/1550/161 965/1549/161 +f 960/1541/162 967/1552/162 966/1550/162 +f 962/1551/163 969/1554/163 967/1552/163 +f 968/1553/164 975/2391/164 969/1554/164 +f 964/1555/165 971/1567/165 970/1556/165 +f 965/1558/166 972/1561/166 971/1559/166 +f 966/1560/167 973/1570/167 972/1561/167 +f 967/1552/168 974/1563/168 973/1562/168 +f 969/1554/169 976/2392/169 974/1563/169 +f 975/1565/170 982/1576/170 976/1566/170 +f 971/1567/171 978/1582/171 977/1568/171 +f 972/1561/172 979/1571/172 978/1569/172 +f 973/1570/173 980/1573/173 979/1571/173 +f 974/1572/174 981/1575/174 980/1573/174 +f 976/1574/175 983/2393/175 981/1575/175 +f 982/1576/176 986/1581/176 983/1577/176 +f 978/1582/192 930/1497/192 929/1496/192 +f 979/1584/193 932/1500/193 930/1499/193 +f 980/1573/194 934/1586/194 932/1585/194 +f 981/1575/195 936/2394/195 934/1586/195 +f 983/1577/196 938/1508/196 936/1588/196 +f 986/1581/197 940/1509/197 938/1508/197 +f 988/1590/135 991/1604/135 989/1591/135 +f 990/1593/136 993/1596/136 991/1594/136 +f 992/1595/137 995/1598/137 993/1596/137 +f 994/1597/138 997/1600/138 995/1598/138 +f 996/1599/139 1004/2395/139 997/1600/139 +f 1004/1613/140 996/1601/140 999/1603/140 +f 991/1604/141 1001/1615/141 1000/1605/141 +f 993/1596/142 1002/1607/142 1001/1606/142 +f 995/1598/143 1003/2396/143 1002/1607/143 +f 997/1609/144 1005/1612/144 1003/1610/144 +f 1004/1611/145 1006/1622/145 1005/1612/145 +f 999/1603/146 1012/1624/146 1006/1614/146 +f 1001/1615/147 1008/1626/147 1007/1616/147 +f 1002/1618/148 1009/1620/148 1008/1619/148 +f 1003/1610/149 1010/1621/149 1009/1620/149 +f 1005/1612/204 1011/1623/150 1010/1621/204 +f 1006/1622/151 1013/2397/151 1011/1623/151 +f 1012/1624/152 1019/1635/152 1013/1625/152 +f 1008/1626/153 1015/1629/153 1014/1627/153 +f 1009/1628/154 1016/2398/154 1015/1629/154 +f 1010/1621/155 1017/1631/155 1016/1630/155 +f 1011/1623/156 1018/2399/156 1017/1631/156 +f 1013/1633/157 1020/1644/157 1018/1634/157 +f 1019/1635/158 1026/1673/158 1020/1636/158 +f 1015/1629/159 1022/1648/159 1021/1637/159 +f 1016/1639/160 1023/1642/160 1022/1640/160 +f 1017/1641/161 1024/1643/161 1023/1642/161 +f 1018/1634/202 1025/1645/202 1024/1643/202 +f 1020/1644/163 1027/1647/163 1025/1645/163 +f 1026/1646/164 1032/2400/164 1027/1647/164 +f 1034/1660/165 1021/1637/165 1028/1649/165 +f 1023/1651/166 1029/1654/166 1028/1652/166 +f 1024/1653/167 1030/1663/167 1029/1654/167 +f 1025/1645/168 1031/1656/168 1030/1655/168 +f 1027/1647/169 1033/2401/169 1031/1656/169 +f 1032/1658/170 1040/1669/170 1033/1659/170 +f 1028/1649/171 1036/1675/171 1035/1661/171 +f 1029/1654/172 1037/1664/172 1036/1662/172 +f 1030/1663/173 1038/1666/173 1037/1664/173 +f 1031/1665/174 1039/1668/174 1038/1666/174 +f 1033/1667/175 1041/2402/175 1039/1668/175 +f 1040/1669/176 1044/1674/176 1041/1670/176 +f 1036/1675/192 988/1590/192 987/1589/192 +f 1037/1677/193 990/1593/193 988/1592/193 +f 1038/1666/194 992/1679/194 990/1678/194 +f 1039/1668/195 994/2403/195 992/1679/195 +f 1041/1670/196 996/1601/196 994/1681/196 +f 1044/1674/197 998/1602/197 996/1601/197 +f 1046/1683/205 1049/1686/205 1047/1684/205 +f 1048/1685/206 1051/1688/206 1049/1686/206 +f 1050/1687/207 1053/1690/207 1051/1688/207 +f 1052/1689/208 1055/1699/208 1053/1690/208 +f 1054/1692/209 1057/1695/209 1055/1693/209 +f 1056/1694/210 1063/1702/210 1057/1695/210 +f 1049/1686/211 1059/1697/211 1058/1696/211 +f 1051/1688/212 1060/1698/212 1059/1697/212 +f 1053/1690/213 1061/1700/213 1060/1698/213 +f 1055/1699/214 1062/2404/214 1061/1700/214 +f 1057/1695/215 1064/1703/215 1062/1701/215 +f 1063/1702/216 1070/1714/216 1064/1703/216 +f 1059/1705/217 1066/1708/217 1065/1706/217 +f 1060/1707/218 1067/1710/218 1066/1708/218 +f 1061/1709/219 1068/1712/219 1067/1710/219 +f 1062/1711/220 1069/1719/220 1068/1712/220 +f 1064/1703/221 1071/1715/221 1069/1713/221 +f 1070/1714/222 1077/1724/222 1071/1715/222 +f 1066/1708/223 1073/1717/223 1072/1716/223 +f 1067/1710/224 1074/1718/224 1073/1717/224 +f 1068/1712/225 1075/1720/225 1074/1718/225 +f 1069/1719/226 1076/2405/226 1075/1720/226 +f 1071/1722/227 1078/1735/227 1076/1723/227 +f 1077/1724/228 1084/1765/228 1078/1725/228 +f 1073/1727/229 1080/1730/229 1079/1728/229 +f 1074/1729/230 1081/1740/230 1080/1730/230 +f 1075/1732/231 1082/1734/231 1081/1733/231 +f 1076/1723/232 1083/1736/232 1082/1734/232 +f 1078/1735/233 1085/1738/233 1083/1736/233 +f 1084/1737/235 1091/1745/235 1085/1738/235 +f 1080/1730/236 1087/1741/236 1086/1739/236 +f 1081/1740/237 1088/1748/237 1087/1741/237 +f 1082/1734/238 1089/1743/238 1088/1742/238 +f 1083/1736/239 1090/1744/239 1089/1743/239 +f 1085/1738/240 1092/1746/240 1090/1744/240 +f 1091/1745/241 1098/2406/241 1092/1746/241 +f 1087/1741/242 1094/1749/242 1093/1747/242 +f 1088/1748/243 1095/2407/243 1094/1749/243 +f 1089/1751/244 1096/1754/244 1095/1752/244 +f 1090/1753/245 1097/1756/245 1096/1754/245 +f 1092/1755/246 1099/1758/246 1097/1756/246 +f 1098/1757/247 1102/1775/247 1099/1758/247 +f 1045/1760/263 1093/1747/263 1046/1769/263 +f 1095/1771/264 1048/1685/264 1046/1683/264 +f 1096/1754/265 1050/1773/265 1048/1772/265 +f 1097/1756/266 1052/2408/266 1050/1773/266 +f 1052/2408/267 1097/1756/267 1054/1774/267 +f 1102/1775/268 1056/2409/268 1054/1774/268 +f 1104/1777/270 1107/1780/205 1105/1778/270 +f 1106/1779/206 1109/1782/206 1107/1780/206 +f 1108/1781/207 1111/1784/207 1109/1782/207 +f 1110/1783/208 1113/1793/208 1111/1784/208 +f 1112/1786/209 1115/1789/209 1113/1787/209 +f 1114/1788/210 1121/1796/210 1115/1789/210 +f 1107/1780/211 1117/1791/211 1116/1790/211 +f 1109/1782/212 1118/1792/212 1117/1791/212 +f 1111/1784/213 1119/1794/213 1118/1792/213 +f 1113/1793/214 1120/2410/214 1119/1794/214 +f 1115/1789/215 1122/1797/215 1120/1795/215 +f 1121/1796/216 1128/1808/216 1122/1797/216 +f 1117/1799/217 1124/1802/217 1123/1800/217 +f 1118/1801/218 1125/1804/218 1124/1802/218 +f 1119/1803/219 1126/1806/219 1125/1804/219 +f 1120/1805/220 1127/1813/220 1126/1806/220 +f 1122/1797/221 1129/1809/221 1127/1807/221 +f 1128/1808/222 1135/1818/222 1129/1809/222 +f 1124/1802/223 1131/1811/223 1130/1810/223 +f 1125/1804/224 1132/1812/224 1131/1811/224 +f 1126/1806/225 1133/1814/225 1132/1812/225 +f 1127/1813/226 1134/2411/226 1133/1814/226 +f 1129/1816/227 1136/1829/227 1134/1817/227 +f 1135/1818/228 1142/1859/228 1136/1819/228 +f 1131/1821/229 1138/1824/229 1137/1822/229 +f 1132/1823/230 1139/1834/230 1138/1824/230 +f 1133/1826/231 1140/1828/231 1139/1827/231 +f 1134/1817/232 1141/1830/232 1140/1828/232 +f 1136/1829/233 1143/1832/233 1141/1830/233 +f 1142/1831/234 1149/1839/234 1143/1832/234 +f 1138/1824/236 1145/1835/236 1144/1833/236 +f 1139/1834/237 1146/1842/237 1145/1835/237 +f 1140/1828/238 1147/1837/238 1146/1836/238 +f 1141/1830/239 1148/1838/239 1147/1837/239 +f 1143/1832/240 1150/1840/240 1148/1838/240 +f 1149/1839/241 1156/2412/241 1150/1840/241 +f 1145/1835/242 1152/1843/242 1151/1841/242 +f 1146/1842/243 1153/2413/243 1152/1843/243 +f 1147/1845/244 1154/1848/244 1153/1846/244 +f 1148/1847/245 1155/1850/245 1154/1848/245 +f 1150/1849/246 1157/1852/246 1155/1850/246 +f 1156/1851/247 1160/1868/247 1157/1852/247 +f 1152/1843/263 1104/2414/263 1103/1854/263 +f 1153/1864/264 1106/1779/264 1104/1777/264 +f 1154/1848/265 1108/1866/265 1106/1865/265 +f 1155/1850/266 1110/1867/266 1108/1866/266 +f 1157/1852/267 1112/1869/267 1110/1867/267 +f 1160/1868/268 1114/2415/268 1112/1869/268 +f 1162/1871/270 1165/1874/270 1163/1872/270 +f 1164/1873/206 1167/1876/206 1165/1874/206 +f 1166/1875/207 1169/1878/207 1167/1876/207 +f 1168/1877/208 1171/1887/208 1169/1878/208 +f 1170/1880/209 1173/1883/209 1171/1881/209 +f 1172/1882/210 1179/1890/210 1173/1883/210 +f 1165/1874/211 1175/1885/211 1174/1884/211 +f 1167/1876/212 1176/1886/212 1175/1885/212 +f 1169/1878/213 1177/1888/213 1176/1886/213 +f 1171/1887/214 1178/2416/214 1177/1888/214 +f 1173/1883/215 1180/1891/215 1178/1889/215 +f 1179/1890/216 1186/1902/216 1180/1891/216 +f 1175/1893/217 1182/1896/217 1181/1894/217 +f 1176/1895/218 1183/1898/218 1182/1896/218 +f 1177/1897/219 1184/1900/219 1183/1898/219 +f 1178/1899/220 1185/1907/220 1184/1900/220 +f 1180/1891/221 1187/1903/221 1185/1901/221 +f 1186/1902/222 1193/1912/222 1187/1903/222 +f 1182/1896/223 1189/1905/223 1188/1904/223 +f 1183/1898/224 1190/1906/224 1189/1905/224 +f 1184/1900/225 1191/1908/225 1190/1906/225 +f 1185/1907/226 1192/2417/226 1191/1908/226 +f 1187/1910/227 1194/1923/227 1192/1911/227 +f 1193/1912/228 1200/1953/228 1194/1913/228 +f 1189/1915/229 1196/1918/229 1195/1916/229 +f 1190/1917/230 1197/1928/230 1196/1918/230 +f 1191/1920/231 1198/1922/231 1197/1921/231 +f 1192/1911/232 1199/1924/232 1198/1922/232 +f 1194/1923/233 1201/1926/233 1199/1924/233 +f 1200/1925/235 1207/1933/234 1201/1926/235 +f 1196/1918/236 1203/1929/236 1202/1927/236 +f 1197/1928/237 1204/1936/237 1203/1929/237 +f 1198/1922/238 1205/1931/238 1204/1930/238 +f 1199/1924/239 1206/1932/239 1205/1931/239 +f 1201/1926/240 1208/1934/240 1206/1932/240 +f 1207/1933/241 1214/2418/241 1208/1934/241 +f 1203/1929/242 1210/1937/242 1209/1935/242 +f 1204/1936/243 1211/2419/243 1210/1937/243 +f 1205/1939/244 1212/1942/244 1211/1940/244 +f 1206/1941/245 1213/1944/245 1212/1942/245 +f 1208/1943/246 1215/1946/246 1213/1944/246 +f 1214/1945/247 1218/1962/247 1215/1946/247 +f 1210/1937/263 1162/2420/263 1161/1948/263 +f 1211/1958/264 1164/1873/264 1162/1871/264 +f 1212/1942/265 1166/1960/265 1164/1959/265 +f 1213/1944/266 1168/1961/266 1166/1960/266 +f 1215/1946/267 1170/1963/267 1168/1961/267 +f 1218/1962/268 1172/2421/268 1170/1963/268 +f 1220/1965/205 1223/1968/205 1221/1966/205 +f 1222/1967/206 1225/1970/206 1223/1968/206 +f 1224/1969/207 1227/1972/207 1225/1970/207 +f 1226/1971/208 1229/1981/208 1227/1972/208 +f 1228/1974/209 1231/1977/209 1229/1975/209 +f 1230/1976/210 1237/1984/210 1231/1977/210 +f 1223/1968/211 1233/1979/211 1232/1978/211 +f 1225/1970/212 1234/1980/212 1233/1979/212 +f 1227/1972/213 1235/1982/213 1234/1980/213 +f 1229/1981/214 1236/2422/214 1235/1982/214 +f 1231/1977/215 1238/1985/215 1236/1983/215 +f 1237/1984/216 1244/1996/216 1238/1985/216 +f 1233/1987/217 1240/1990/217 1239/1988/217 +f 1234/1989/218 1241/1992/218 1240/1990/218 +f 1235/1991/219 1242/1994/219 1241/1992/219 +f 1236/1993/220 1243/2001/220 1242/1994/220 +f 1238/1985/221 1245/1997/221 1243/1995/221 +f 1244/1996/222 1251/2006/222 1245/1997/222 +f 1240/1990/223 1247/1999/223 1246/1998/223 +f 1241/1992/224 1248/2000/224 1247/1999/224 +f 1242/1994/225 1249/2002/225 1248/2000/225 +f 1243/2001/226 1250/2423/226 1249/2002/226 +f 1245/2004/227 1252/2017/227 1250/2005/227 +f 1251/2006/228 1258/2047/228 1252/2007/228 +f 1247/2009/229 1254/2012/229 1253/2010/229 +f 1248/2011/230 1255/2022/230 1254/2012/230 +f 1249/2014/231 1256/2016/231 1255/2015/231 +f 1250/2005/232 1257/2018/232 1256/2016/232 +f 1252/2017/233 1259/2020/233 1257/2018/233 +f 1258/2019/234 1265/2027/234 1259/2020/234 +f 1254/2012/236 1261/2023/236 1260/2021/236 +f 1255/2022/237 1262/2030/237 1261/2023/237 +f 1256/2016/238 1263/2025/238 1262/2024/238 +f 1257/2018/239 1264/2026/239 1263/2025/239 +f 1259/2020/240 1266/2028/240 1264/2026/240 +f 1265/2027/241 1272/2424/241 1266/2028/241 +f 1261/2023/242 1268/2031/242 1267/2029/242 +f 1262/2030/243 1269/2425/243 1268/2031/243 +f 1263/2033/244 1270/2036/244 1269/2034/244 +f 1264/2035/245 1271/2038/245 1270/2036/245 +f 1266/2037/246 1273/2040/246 1271/2038/246 +f 1272/2039/247 1276/2056/247 1273/2040/247 +f 1268/2031/263 1220/2426/263 1219/2042/263 +f 1269/2052/264 1222/1967/264 1220/1965/264 +f 1270/2036/265 1224/2054/265 1222/2053/265 +f 1271/2038/266 1226/2055/266 1224/2054/266 +f 1273/2040/267 1228/2057/267 1226/2055/267 +f 1276/2056/268 1230/2427/268 1228/2057/268 +f 1278/2059/205 1281/2062/205 1279/2060/205 +f 1280/2061/206 1283/2064/206 1281/2062/206 +f 1282/2063/207 1285/2066/207 1283/2064/207 +f 1284/2065/208 1287/2075/208 1285/2066/208 +f 1286/2068/209 1289/2071/209 1287/2069/209 +f 1288/2070/210 1295/2078/210 1289/2071/210 +f 1281/2062/211 1291/2073/211 1290/2072/211 +f 1283/2064/212 1292/2074/212 1291/2073/212 +f 1285/2066/213 1293/2076/213 1292/2074/213 +f 1287/2075/214 1294/2428/214 1293/2076/214 +f 1289/2071/215 1296/2079/215 1294/2077/215 +f 1295/2078/216 1302/2090/216 1296/2079/216 +f 1291/2081/217 1298/2084/217 1297/2082/217 +f 1292/2083/218 1299/2086/218 1298/2084/218 +f 1293/2085/219 1300/2088/219 1299/2086/219 +f 1294/2087/220 1301/2095/220 1300/2088/220 +f 1296/2079/221 1303/2091/221 1301/2089/221 +f 1302/2090/222 1309/2100/222 1303/2091/222 +f 1298/2084/223 1305/2093/223 1304/2092/223 +f 1299/2086/224 1306/2094/224 1305/2093/224 +f 1300/2088/225 1307/2096/225 1306/2094/225 +f 1301/2095/226 1308/2429/226 1307/2096/226 +f 1303/2098/227 1310/2111/227 1308/2099/227 +f 1309/2100/228 1316/2141/228 1310/2101/228 +f 1305/2103/229 1312/2106/229 1311/2104/229 +f 1306/2105/230 1313/2116/230 1312/2106/230 +f 1307/2108/231 1314/2110/231 1313/2109/231 +f 1308/2099/232 1315/2112/232 1314/2110/232 +f 1310/2111/233 1317/2114/233 1315/2112/233 +f 1316/2113/235 1323/2121/235 1317/2114/235 +f 1312/2106/236 1319/2117/236 1318/2115/236 +f 1313/2116/237 1320/2124/237 1319/2117/237 +f 1314/2110/238 1321/2119/238 1320/2118/238 +f 1315/2112/239 1322/2120/239 1321/2119/239 +f 1317/2114/240 1324/2122/240 1322/2120/240 +f 1323/2121/241 1330/2430/241 1324/2122/241 +f 1319/2117/242 1326/2125/242 1325/2123/242 +f 1320/2124/243 1327/2431/243 1326/2125/243 +f 1321/2127/244 1328/2130/244 1327/2128/244 +f 1322/2129/245 1329/2132/245 1328/2130/245 +f 1324/2131/246 1331/2134/246 1329/2132/246 +f 1330/2133/247 1334/2149/247 1331/2134/247 +f 1326/2125/263 1278/2432/263 1277/2136/263 +f 1327/2145/264 1280/2061/264 1278/2059/264 +f 1328/2130/265 1282/2147/265 1280/2146/265 +f 1329/2132/266 1284/2148/266 1282/2147/266 +f 1331/2134/267 1286/2150/267 1284/2148/267 +f 1334/2149/268 1288/2433/268 1286/2150/268 +f 1336/2152/270 1339/2155/270 1337/2153/270 +f 1338/2154/206 1341/2157/206 1339/2155/206 +f 1340/2156/207 1343/2159/207 1341/2157/207 +f 1342/2158/208 1345/2167/208 1343/2159/208 +f 1344/2161/209 1347/2164/209 1345/2162/209 +f 1346/2163/210 1353/2170/210 1347/2164/210 +f 1339/2155/211 1349/2166/211 1348/2165/211 +f 1341/2157/212 1350/1838/212 1349/2166/212 +f 1343/2159/213 1351/2168/213 1350/1838/213 +f 1345/2167/214 1352/2434/214 1351/2168/214 +f 1347/2164/215 1354/2171/215 1352/2169/215 +f 1353/2170/216 1360/2182/216 1354/2171/216 +f 1349/2173/217 1356/2176/217 1355/2174/217 +f 1350/2175/218 1357/2178/218 1356/2176/218 +f 1351/2177/219 1358/2180/219 1357/2178/219 +f 1352/2179/220 1359/2187/220 1358/2180/220 +f 1354/2171/221 1361/2183/221 1359/2181/221 +f 1360/2182/222 1367/2192/222 1361/2183/222 +f 1356/2176/223 1363/2185/223 1362/2184/223 +f 1357/2178/224 1364/2186/224 1363/2185/224 +f 1358/2180/225 1365/2188/225 1364/2186/225 +f 1359/2187/226 1366/2435/226 1365/2188/226 +f 1361/2190/227 1368/2203/227 1366/2191/227 +f 1367/2192/228 1374/2231/228 1368/2193/228 +f 1363/2195/229 1370/2198/229 1369/2196/229 +f 1364/2197/230 1371/2208/230 1370/2198/230 +f 1365/2200/231 1372/2202/231 1371/2201/231 +f 1366/2191/232 1373/2204/232 1372/2202/232 +f 1368/2203/233 1375/2206/233 1373/2204/233 +f 1374/2205/235 1381/2212/235 1375/2206/235 +f 1370/2198/236 1377/2209/236 1376/2207/236 +f 1371/2208/237 1378/2215/237 1377/2209/237 +f 1372/2202/238 1379/2211/238 1378/2210/238 +f 1373/2204/239 1380/1886/239 1379/2211/239 +f 1375/2206/240 1382/2213/240 1380/1886/240 +f 1381/2212/241 1388/2436/241 1382/2213/241 +f 1377/2209/242 1384/2216/242 1383/2214/242 +f 1378/2215/243 1385/2437/243 1384/2216/243 +f 1379/2147/244 1386/2220/244 1385/2218/244 +f 1380/2219/245 1387/2222/245 1386/2220/245 +f 1382/2221/246 1389/2224/246 1387/2222/246 +f 1388/2223/247 1392/2240/247 1389/2224/247 +f 1384/2216/263 1336/2438/263 1335/2226/263 +f 1385/2236/264 1338/2154/264 1336/2152/264 +f 1386/2220/265 1340/2238/265 1338/2237/265 +f 1387/2222/266 1342/2239/266 1340/2238/266 +f 1389/2224/267 1344/2241/267 1342/2239/267 +f 1392/2240/268 1346/2439/268 1344/2241/268 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.mtl new file mode 100644 index 00000000..3459f9cc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.mtl @@ -0,0 +1,6 @@ +# Made in Blockbench 3.0.6 +newmtl 0 +map_Kd galacticraftplanets:blocks/laser +newmtl 1 +map_Kd galacticraftplanets:blocks/laser_off +newmtl none diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.obj new file mode 100644 index 00000000..08e28393 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.obj @@ -0,0 +1,733 @@ +# Made in Blockbench 3.0.6 +mtllib laser.mtl +o baseCube +v 8.027900863219243 -7.999951218766888 7.9720504406127475 +v 7.999975609364869 -7.972026007445098 -8.027900820649574 +v 8.05582607454103 -23.99990239496411 7.9440764906275145 +v 8.027900820686657 -23.97197718364232 -8.055874770634809 +v -7.999975651897453 -7.999999957430332 -8.00002439059798 +v -7.97205039804308 -8.027925168752123 7.999926870664343 +v -7.972050440575664 -23.999951133627555 -8.027998340583213 +v -7.9441251867212905 -24.027876344949345 7.971952920679109 +vt 0.0009765625 0.7490234375 +vt 0.0009765625 0.5009765625 +vt 0.2490234375 0.7490234375 +vt 0.0009765625 0.5009765625 +vt 0.2490234375 0.5009765625 +vt 0.2490234375 0.7490234375 +vt 0.5009765625 0.7490234375 +vt 0.5009765625 0.5009765625 +vt 0.7490234375 0.7490234375 +vt 0.5009765625 0.5009765625 +vt 0.7490234375 0.5009765625 +vt 0.7490234375 0.7490234375 +vt 0.4990234375 0.7509765625 +vt 0.4990234375 0.9990234375 +vt 0.2509765625 0.7509765625 +vt 0.4990234375 0.9990234375 +vt 0.2509765625 0.9990234375 +vt 0.2509765625 0.7509765625 +vt 0.7490234375 0.9990234375 +vt 0.7490234375 0.7509765625 +vt 0.5009765625 0.9990234375 +vt 0.7490234375 0.7509765625 +vt 0.5009765625 0.7509765625 +vt 0.5009765625 0.9990234375 +vt 0.7509765625 0.7490234375 +vt 0.7509765625 0.5009765625 +vt 0.9990234375 0.7490234375 +vt 0.7509765625 0.5009765625 +vt 0.9990234375 0.5009765625 +vt 0.9990234375 0.7490234375 +vt 0.2509765625 0.7490234375 +vt 0.2509765625 0.5009765625 +vt 0.4990234375 0.7490234375 +vt 0.2509765625 0.5009765625 +vt 0.4990234375 0.5009765625 +vt 0.4990234375 0.7490234375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 1/1/1 3/2/2 2/3/3 +f 3/4/4 4/5/5 2/6/6 +usemtl 0 +f 5/7/7 7/8/8 6/9/9 +f 7/10/10 8/11/11 6/12/12 +usemtl 0 +f 5/13/13 6/14/14 2/15/15 +f 6/16/16 1/17/17 2/18/18 +usemtl 0 +f 8/19/19 7/20/20 3/21/21 +f 7/22/22 4/23/23 3/24/24 +usemtl 0 +f 6/25/25 8/26/26 1/27/27 +f 8/28/28 3/29/29 1/30/30 +usemtl 0 +f 2/31/31 4/32/32 5/33/33 +f 4/34/34 7/35/35 5/36/36 +o baseConnector0 +v 3.012208149414828 -3.9999786555499104 2.987770543355704 +v 3.001736179219438 -3.9895067013042396 -3.012211179617667 +v 3.0191894522452754 -7.999966449599215 2.980777055859395 +v 3.0087174820498856 -7.989494495353545 -3.019204667113976 +v -2.998245543753933 -3.999996932548702 -3.0017575183483194 +v -2.987773573558543 -4.010468886794373 2.9982242046250516 +v -2.9912642409234853 -7.999984726598008 -3.0087510058446276 +v -2.9807922707280956 -8.010456680843678 2.9912307171287433 +vt 0.3447265625 0.2177734375 +vt 0.3447265625 0.1572265625 +vt 0.4365234375 0.2177734375 +vt 0.3447265625 0.1572265625 +vt 0.4365234375 0.1572265625 +vt 0.4365234375 0.2177734375 +vt 0.5322265625 0.2177734375 +vt 0.5322265625 0.1572265625 +vt 0.6240234375 0.2177734375 +vt 0.5322265625 0.1572265625 +vt 0.6240234375 0.1572265625 +vt 0.6240234375 0.2177734375 +vt 0.5302734375 0.2197265625 +vt 0.5302734375 0.3115234375 +vt 0.4384765625 0.2197265625 +vt 0.5302734375 0.3115234375 +vt 0.4384765625 0.3115234375 +vt 0.4384765625 0.2197265625 +vt 0.6240234375 0.3115234375 +vt 0.6240234375 0.2197265625 +vt 0.5322265625 0.3115234375 +vt 0.6240234375 0.2197265625 +vt 0.5322265625 0.2197265625 +vt 0.5322265625 0.3115234375 +vt 0.6259765625 0.2177734375 +vt 0.6259765625 0.1572265625 +vt 0.7177734375 0.2177734375 +vt 0.6259765625 0.1572265625 +vt 0.7177734375 0.1572265625 +vt 0.7177734375 0.2177734375 +vt 0.4384765625 0.2177734375 +vt 0.4384765625 0.1572265625 +vt 0.5302734375 0.2177734375 +vt 0.4384765625 0.1572265625 +vt 0.5302734375 0.1572265625 +vt 0.5302734375 0.2177734375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 9/37/37 11/38/38 10/39/39 +f 11/40/40 12/41/41 10/42/42 +usemtl 0 +f 13/43/43 15/44/44 14/45/45 +f 15/46/46 16/47/47 14/48/48 +usemtl 0 +f 13/49/49 14/50/50 10/51/51 +f 14/52/52 9/53/53 10/54/54 +usemtl 0 +f 16/55/55 15/56/56 11/57/57 +f 15/58/58 12/59/59 11/60/60 +usemtl 0 +f 14/61/61 16/62/62 9/63/63 +f 16/64/64 11/65/65 9/66/66 +usemtl 0 +f 10/67/67 12/68/68 13/69/69 +f 12/70/70 15/71/71 13/72/72 +o baseConnector1 +v 1.5026134232921902 0.000004569249696384503 1.4973820154260062 +v 1.4973774381944953 0.005240546372531796 -1.5026088460606792 +v 1.5095947261226377 -3.9999832247996085 1.490388527929698 +v 1.5043587410249428 -3.9947472476767727 -1.5096023335569875 +v -1.5026134232921902 -0.000004569249698604949 -1.4973820154260051 +v -1.4973774381944953 -0.00524054637253446 1.5026088460606803 +v -1.4956321204617427 -3.999992363299004 -1.5043755029223136 +v -1.4903961353640478 -4.00522834042184 1.4956153585643719 +vt 0.0009765625 0.9521484375 +vt 0.0009765625 0.8916015625 +vt 0.0458984375 0.9521484375 +vt 0.0009765625 0.8916015625 +vt 0.0458984375 0.8916015625 +vt 0.0458984375 0.9521484375 +vt 0.0947265625 0.9521484375 +vt 0.0947265625 0.8916015625 +vt 0.1396484375 0.9521484375 +vt 0.0947265625 0.8916015625 +vt 0.1396484375 0.8916015625 +vt 0.1396484375 0.9521484375 +vt 0.0927734375 0.9541015625 +vt 0.0927734375 0.9990234375 +vt 0.0478515625 0.9541015625 +vt 0.0927734375 0.9990234375 +vt 0.0478515625 0.9990234375 +vt 0.0478515625 0.9541015625 +vt 0.1396484375 0.9990234375 +vt 0.1396484375 0.9541015625 +vt 0.0947265625 0.9990234375 +vt 0.1396484375 0.9541015625 +vt 0.0947265625 0.9541015625 +vt 0.0947265625 0.9990234375 +vt 0.1416015625 0.9521484375 +vt 0.1416015625 0.8916015625 +vt 0.1865234375 0.9521484375 +vt 0.1416015625 0.8916015625 +vt 0.1865234375 0.8916015625 +vt 0.1865234375 0.9521484375 +vt 0.0478515625 0.9521484375 +vt 0.0478515625 0.8916015625 +vt 0.0927734375 0.9521484375 +vt 0.0478515625 0.8916015625 +vt 0.0927734375 0.8916015625 +vt 0.0927734375 0.9521484375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 17/73/73 19/74/74 18/75/75 +f 19/76/76 20/77/77 18/78/78 +usemtl 0 +f 21/79/79 23/80/80 22/81/81 +f 23/82/82 24/83/83 22/84/84 +usemtl 0 +f 21/85/85 22/86/86 18/87/87 +f 22/88/88 17/89/89 18/90/90 +usemtl 0 +f 24/91/91 23/92/92 19/93/93 +f 23/94/94 20/95/95 19/96/96 +usemtl 0 +f 22/97/97 24/98/98 17/99/99 +f 24/100/100 19/101/101 17/102/102 +usemtl 0 +f 18/103/103 20/104/104 21/105/105 +f 20/106/106 23/107/107 21/108/108 +o phalangeAxle +v 2.0034845723644468 2.9947609607470733 5.001745331010259 +v 1.9860312887054636 3.0122142178231917 -4.998224207278692 +v 2.008720549487282 -0.005229884789905936 4.996500215388028 +v 1.991267265828299 0.012223372286212841 -5.003469322900924 +v -2.013956526610117 3.005220730326884 -4.991255099765794 +v -1.996503242951134 2.9877674732507646 5.008714438523158 +v -2.0087205494872817 0.005229884789904604 -4.996500215388025 +v -1.9912672658282986 -0.012223372286214174 5.003469322900926 +vt 0.0009765625 0.3427734375 +vt 0.0009765625 0.2978515625 +vt 0.1552734375 0.3427734375 +vt 0.0009765625 0.2978515625 +vt 0.1552734375 0.2978515625 +vt 0.1552734375 0.3427734375 +vt 0.2197265625 0.3427734375 +vt 0.2197265625 0.2978515625 +vt 0.3740234375 0.3427734375 +vt 0.2197265625 0.2978515625 +vt 0.3740234375 0.2978515625 +vt 0.3740234375 0.3427734375 +vt 0.2177734375 0.3447265625 +vt 0.2177734375 0.4990234375 +vt 0.1572265625 0.3447265625 +vt 0.2177734375 0.4990234375 +vt 0.1572265625 0.4990234375 +vt 0.1572265625 0.3447265625 +vt 0.2802734375 0.4990234375 +vt 0.2802734375 0.3447265625 +vt 0.2197265625 0.4990234375 +vt 0.2802734375 0.3447265625 +vt 0.2197265625 0.3447265625 +vt 0.2197265625 0.4990234375 +vt 0.3759765625 0.3427734375 +vt 0.3759765625 0.2978515625 +vt 0.4365234375 0.3427734375 +vt 0.3759765625 0.2978515625 +vt 0.4365234375 0.2978515625 +vt 0.4365234375 0.3427734375 +vt 0.1572265625 0.3427734375 +vt 0.1572265625 0.2978515625 +vt 0.2177734375 0.3427734375 +vt 0.1572265625 0.2978515625 +vt 0.2177734375 0.2978515625 +vt 0.2177734375 0.3427734375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 25/109/109 27/110/110 26/111/111 +f 27/112/112 28/113/113 26/114/114 +usemtl 0 +f 29/115/115 31/116/116 30/117/117 +f 31/118/118 32/119/119 30/120/120 +usemtl 0 +f 29/121/121 30/122/122 26/123/123 +f 30/124/124 25/125/125 26/126/126 +usemtl 0 +f 32/127/127 31/128/128 27/129/129 +f 31/130/130 28/131/131 27/132/132 +usemtl 0 +f 30/133/133 32/134/134 25/135/135 +f 32/136/136 27/137/137 25/138/138 +usemtl 0 +f 26/139/139 28/140/140 29/141/141 +f 28/142/142 31/143/143 29/144/144 +o turretLeft +v 5.99998173892309 5.999999968072749 6.000018292948487 +v 5.994745753825395 6.005235945195584 3.000027431461801 +v 6.005217716045926 3.0000091225357695 5.994773177326255 +v 5.999981730948231 3.0052450996586053 2.9947823158395703 +v -8.005211599779138 5.980758738958505 3.0244193077569466 +v -7.999975614681444 5.97552276183567 6.024410169243632 +v -7.999975622656302 2.9807678934215263 3.0191741921347153 +v -7.994739637558607 2.9755319162986904 6.019165053621401 +vt 0.4384765625 0.3583984375 +vt 0.4384765625 0.3134765625 +vt 0.4833984375 0.3583984375 +vt 0.4384765625 0.3134765625 +vt 0.4833984375 0.3134765625 +vt 0.4833984375 0.3583984375 +vt 0.7041015625 0.3583984375 +vt 0.7041015625 0.3134765625 +vt 0.7490234375 0.3583984375 +vt 0.7041015625 0.3134765625 +vt 0.7490234375 0.3134765625 +vt 0.7490234375 0.3583984375 +vt 0.7021484375 0.3603515625 +vt 0.7021484375 0.4052734375 +vt 0.4853515625 0.3603515625 +vt 0.7021484375 0.4052734375 +vt 0.4853515625 0.4052734375 +vt 0.4853515625 0.3603515625 +vt 0.9208984375 0.4052734375 +vt 0.9208984375 0.3603515625 +vt 0.7041015625 0.4052734375 +vt 0.9208984375 0.3603515625 +vt 0.7041015625 0.3603515625 +vt 0.7041015625 0.4052734375 +vt 0.7509765625 0.3583984375 +vt 0.7509765625 0.3134765625 +vt 0.9677734375 0.3583984375 +vt 0.7509765625 0.3134765625 +vt 0.9677734375 0.3134765625 +vt 0.9677734375 0.3583984375 +vt 0.4853515625 0.3583984375 +vt 0.4853515625 0.3134765625 +vt 0.7021484375 0.3583984375 +vt 0.4853515625 0.3134765625 +vt 0.7021484375 0.3134765625 +vt 0.7021484375 0.3583984375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 33/145/145 35/146/146 34/147/147 +f 35/148/148 36/149/149 34/150/150 +usemtl 0 +f 37/151/151 39/152/152 38/153/153 +f 39/154/154 40/155/155 38/156/156 +usemtl 0 +f 37/157/157 38/158/158 34/159/159 +f 38/160/160 33/161/161 34/162/162 +usemtl 0 +f 40/163/163 39/164/164 35/165/165 +f 39/166/166 36/167/167 35/168/168 +usemtl 0 +f 38/169/169 40/170/170 33/171/171 +f 40/172/172 35/173/173 33/174/174 +usemtl 0 +f 34/175/175 36/176/176 37/177/177 +f 36/178/178 39/179/179 37/180/180 +o turretRight +v 5.984273783630005 6.015707899441256 -2.99995429151157 +v 5.97903779853231 6.020943876564091 -5.999945152998255 +v 5.989509760752841 3.0157170539042766 -3.0051994071338006 +v 5.984273775655146 3.020953031027112 -6.0051902686204865 +v -8.020919555072222 5.9964666703270115 -5.97555327670311 +v -8.015683569974527 5.991230693204177 -2.9755624152164244 +v -8.015683577949385 2.996475824790033 -5.980798392325341 +v -8.01044759285169 2.991239847667197 -2.9808075308386557 +vt 0.2822265625 0.4521484375 +vt 0.2822265625 0.4072265625 +vt 0.3271484375 0.4521484375 +vt 0.2822265625 0.4072265625 +vt 0.3271484375 0.4072265625 +vt 0.3271484375 0.4521484375 +vt 0.5478515625 0.4521484375 +vt 0.5478515625 0.4072265625 +vt 0.5927734375 0.4521484375 +vt 0.5478515625 0.4072265625 +vt 0.5927734375 0.4072265625 +vt 0.5927734375 0.4521484375 +vt 0.5458984375 0.4541015625 +vt 0.5458984375 0.4990234375 +vt 0.3291015625 0.4541015625 +vt 0.5458984375 0.4990234375 +vt 0.3291015625 0.4990234375 +vt 0.3291015625 0.4541015625 +vt 0.7646484375 0.4990234375 +vt 0.7646484375 0.4541015625 +vt 0.5478515625 0.4990234375 +vt 0.7646484375 0.4541015625 +vt 0.5478515625 0.4541015625 +vt 0.5478515625 0.4990234375 +vt 0.5947265625 0.4521484375 +vt 0.5947265625 0.4072265625 +vt 0.8115234375 0.4521484375 +vt 0.5947265625 0.4072265625 +vt 0.8115234375 0.4072265625 +vt 0.8115234375 0.4521484375 +vt 0.3291015625 0.4521484375 +vt 0.3291015625 0.4072265625 +vt 0.5458984375 0.4521484375 +vt 0.3291015625 0.4072265625 +vt 0.5458984375 0.4072265625 +vt 0.5458984375 0.4521484375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 41/181/181 43/182/182 42/183/183 +f 43/184/184 44/185/185 42/186/186 +usemtl 0 +f 45/187/187 47/188/188 46/189/189 +f 47/190/190 48/191/191 46/192/192 +usemtl 0 +f 45/193/193 46/194/194 42/195/195 +f 46/196/196 41/197/197 42/198/198 +usemtl 0 +f 48/199/199 47/200/200 43/201/201 +f 47/202/202 44/203/203 43/204/204 +usemtl 0 +f 46/205/205 48/206/206 41/207/207 +f 48/208/208 43/209/209 41/210/210 +usemtl 0 +f 42/211/211 44/212/212 45/213/213 +f 44/214/214 47/215/215 45/216/216 +o turretLeft_off +usemtl 1 +f 33/145/145 35/146/146 34/147/147 +f 35/148/148 36/149/149 34/150/150 +usemtl 1 +f 37/151/151 39/152/152 38/153/153 +f 39/154/154 40/155/155 38/156/156 +usemtl 1 +f 37/157/157 38/158/158 34/159/159 +f 38/160/160 33/161/161 34/162/162 +usemtl 1 +f 40/163/163 39/164/164 35/165/165 +f 39/166/166 36/167/167 35/168/168 +usemtl 1 +f 38/169/169 40/170/170 33/171/171 +f 40/172/172 35/173/173 33/174/174 +usemtl 1 +f 34/175/175 36/176/176 37/177/177 +f 36/178/178 39/179/179 37/180/180 +o turretRight_off +usemtl 1 +f 41/181/181 43/182/182 42/183/183 +f 43/184/184 44/185/185 42/186/186 +usemtl 1 +f 45/187/187 47/188/188 46/189/189 +f 47/190/190 48/191/191 46/192/192 +usemtl 1 +f 45/193/193 46/194/194 42/195/195 +f 46/196/196 41/197/197 42/198/198 +usemtl 1 +f 48/199/199 47/200/200 43/201/201 +f 47/202/202 44/203/203 43/204/204 +usemtl 1 +f 46/205/205 48/206/206 41/207/207 +f 48/208/208 43/209/209 41/210/210 +usemtl 1 +f 42/211/211 44/212/212 45/213/213 +f 44/214/214 47/215/215 45/216/216 +o phalange +v 2.996500215388035 4.0017422582563125 2.001760564519426 +v 2.9895189019244417 4.008723561086759 -1.9982272507961545 +v 3.0052268439260943 -0.9982424843053193 1.9930187051490407 +v 2.998245530462501 -0.9912611814748717 -2.00696911016654 +v -3.0104628210489293 3.998233329842297 -1.9877735895268067 +v -3.003481507585336 3.9912520270118494 2.012214225788774 +v -3.00173619251087 -1.0017514127193343 -1.9965154488971921 +v -2.9947548790472767 -1.0087327155497818 2.0034723664183884 +vt 0.0009765625 0.2333984375 +vt 0.0009765625 0.1572265625 +vt 0.0615234375 0.2333984375 +vt 0.0009765625 0.1572265625 +vt 0.0615234375 0.1572265625 +vt 0.0615234375 0.2333984375 +vt 0.1572265625 0.2333984375 +vt 0.1572265625 0.1572265625 +vt 0.2177734375 0.2333984375 +vt 0.1572265625 0.1572265625 +vt 0.2177734375 0.1572265625 +vt 0.2177734375 0.2333984375 +vt 0.1552734375 0.2353515625 +vt 0.1552734375 0.2958984375 +vt 0.0634765625 0.2353515625 +vt 0.1552734375 0.2958984375 +vt 0.0634765625 0.2958984375 +vt 0.0634765625 0.2353515625 +vt 0.2490234375 0.2958984375 +vt 0.2490234375 0.2353515625 +vt 0.1572265625 0.2958984375 +vt 0.2490234375 0.2353515625 +vt 0.1572265625 0.2353515625 +vt 0.1572265625 0.2958984375 +vt 0.2197265625 0.2333984375 +vt 0.2197265625 0.1572265625 +vt 0.3115234375 0.2333984375 +vt 0.2197265625 0.1572265625 +vt 0.3115234375 0.1572265625 +vt 0.3115234375 0.2333984375 +vt 0.0634765625 0.2333984375 +vt 0.0634765625 0.1572265625 +vt 0.1552734375 0.2333984375 +vt 0.0634765625 0.1572265625 +vt 0.1552734375 0.1572265625 +vt 0.1552734375 0.2333984375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 49/217/217 51/218/218 50/219/219 +f 51/220/220 52/221/221 50/222/222 +usemtl 0 +f 53/223/223 55/224/224 54/225/225 +f 55/226/226 56/227/227 54/228/228 +usemtl 0 +f 53/229/229 54/230/230 50/231/231 +f 54/232/232 49/233/233 50/234/234 +usemtl 0 +f 56/235/235 55/236/236 51/237/237 +f 55/238/238 52/239/239 51/240/240 +usemtl 0 +f 54/241/241 56/242/242 49/243/243 +f 56/244/244 51/245/245 49/246/246 +usemtl 0 +f 50/247/247 52/248/248 53/249/249 +f 52/250/250 55/251/251 53/252/252 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase.obj new file mode 100644 index 00000000..adff1d89 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase.obj @@ -0,0 +1,339 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 08.05.2015 20:43:33 + +# +# object dock +# + +v -20.0000 -20.0000 20.0000 +v -20.0000 -20.0000 -20.0000 +v 20.0000 -20.0000 -20.0000 +v 20.0000 -20.0000 20.0000 +v -20.0000 20.0000 20.0000 +v 20.0000 20.0000 20.0000 +v 20.0000 20.0000 -4.3750 +v -20.0000 20.0000 -4.3750 +v 20.0000 4.3750 20.0000 +v -20.0000 4.3750 20.0000 +v 20.0000 4.3750 -20.0000 +v 18.1250 4.3750 16.8750 +v -18.1250 4.3750 16.8750 +v -18.1250 15.0000 16.8750 +v 18.1250 15.0000 16.8750 +v -20.0000 4.3750 -20.0000 +v -18.1250 -18.1250 -20.0000 +v 18.1250 -18.1250 -20.0000 +v 18.1250 15.0000 -9.3750 +v -18.1250 15.0000 -9.3750 +v 18.1250 4.3750 -20.0000 +v -18.1250 4.3750 -20.0000 +v -18.1250 -18.1250 16.8750 +v 18.1250 -18.1250 16.8750 +v 11.2500 15.0000 -9.3750 +v 18.1250 11.2500 -13.1250 +v 11.9118 11.2500 -13.1250 +v 18.1250 4.3750 -6.2500 +v 13.1250 4.3750 16.8750 +v 13.1250 4.3750 -6.2500 +v 11.9118 11.2500 16.8750 +v 11.2500 15.0000 16.8750 +v 17.5000 -18.1250 -20.0000 +v 11.2500 -18.1250 -20.0000 +v 11.2500 -16.8750 -20.0000 +v 17.5000 -8.1250 -20.0000 +v -11.2500 -18.1250 -20.0000 +v -11.2500 -16.8750 -20.0000 +v -17.5000 -18.1250 -20.0000 +v -17.5000 -8.1250 -20.0000 +v -16.2500 -6.2500 9.3750 +v -10.0000 -15.0000 9.3750 +v -10.0000 -15.0000 -1.8750 +v -16.2500 -6.2500 -1.8750 +v 10.0000 -15.0000 9.3750 +v 10.0000 -15.0000 -1.8750 +v 16.2500 -6.2500 9.3750 +v 16.2500 -6.2500 -1.8750 +v -11.2500 -16.8750 -6.2500 +v -17.5000 -8.1250 -6.2500 +v 11.2500 -16.8750 -6.2500 +v 17.5000 -8.1250 -6.2500 +v 18.1250 -8.1250 -20.0000 +v -18.1250 -8.1250 -20.0000 +v -18.1250 -6.2500 -1.8750 +v -18.1250 -6.2500 9.3750 +v -18.1250 -8.1250 -6.2500 +v 18.1250 -6.2500 9.3750 +v 18.1250 -6.2500 -1.8750 +v 18.1250 -8.1250 -6.2500 +v 18.1250 -3.1250 9.3750 +v -18.1250 -3.1250 9.3750 +v 18.1250 -15.0000 9.3750 +v -18.1250 -15.0000 9.3750 +v 6.2500 -16.8750 -20.0000 +v -6.2500 -16.8750 -20.0000 +v -6.2500 -15.0000 -18.1250 +v 6.2500 -15.0000 -18.1250 +v -6.2500 -16.8750 -6.2500 +v -6.2500 -15.0000 -1.8750 +v 6.2500 -15.0000 -1.8750 +v 6.2500 -16.8750 -6.2500 +v 6.8750 -3.1250 9.3750 +v -6.8750 -3.1250 9.3750 +v -6.8750 6.8750 9.3750 +v 6.8750 6.8750 9.3750 +v -6.8750 4.3750 16.8750 +v -6.8750 6.8750 16.8750 +v 6.8750 6.8750 16.8750 +v 6.8750 4.3750 16.8750 +v -11.2500 15.0000 -9.3750 +v -11.9117 11.2500 -13.1250 +v -18.1250 11.2500 -13.1250 +v -18.1250 4.3750 -6.2500 +v -13.1250 4.3750 -6.2500 +v -13.1250 4.3750 16.8750 +v -11.9118 11.2500 16.8750 +v -11.2500 15.0000 16.8750 +# 88 vertices + +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 -0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.0000 -1.0000 +vn -0.0000 0.7071 -0.7071 +vn -0.0000 -1.0000 -0.0000 +vn -0.9848 -0.1738 0.0000 +vn -0.9848 -0.1738 -0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.8137 0.5812 0.0000 +vn -0.8137 0.5812 -0.0000 +vn 0.7331 0.5237 -0.4339 +vn 0.0000 0.9191 -0.3939 +vn -0.7331 0.5237 -0.4339 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 1.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.9848 -0.1738 0.0000 +# 25 vertex normals + +vt 1.0000 0.3869 0.3413 +vt 1.0000 0.7679 0.3413 +vt 0.6667 0.7679 0.3413 +vt 0.6667 0.3869 0.3413 +vt 0.3333 0.6429 0.6587 +vt 0.0000 0.6429 0.6587 +vt 0.0000 0.4107 0.6587 +vt 0.3333 0.4107 0.6587 +vt 0.6667 0.0000 0.3413 +vt 1.0000 0.0000 0.3413 +vt 1.0000 0.2321 0.3413 +vt 0.6667 0.2321 0.3413 +vt 1.0000 0.3810 0.3413 +vt 0.6667 0.3810 0.3413 +vt 0.6667 0.0000 0.6587 +vt 0.3333 0.0000 0.6587 +vt 0.3333 0.2321 0.6587 +vt 0.6667 0.2321 0.6587 +vt 0.4635 0.3810 0.6587 +vt 0.6667 0.3810 0.6587 +vt 0.3438 0.5774 0.3661 +vt 0.6458 0.5774 0.3661 +vt 0.6458 0.6786 0.3661 +vt 0.3438 0.6786 0.3661 +vt 0.3333 0.0000 0.3413 +vt 0.3333 0.2321 0.3413 +vt 0.4635 0.3810 0.3413 +vt -0.0000 0.0000 0.6587 +vt 0.3177 0.0179 0.6587 +vt 0.0156 0.0179 0.6587 +vt 0.0156 0.3631 0.6190 +vt 0.3177 0.3631 0.6190 +vt -0.0000 0.2321 0.6587 +vt 0.0156 0.2321 0.6587 +vt 0.0000 0.2619 0.5347 +vt 0.0156 0.2619 0.5347 +vt 0.3177 0.2321 0.6587 +vt 0.3333 0.2619 0.5347 +vt 0.3177 0.2619 0.5347 +vt 0.6510 0.6845 0.3562 +vt 0.6510 0.8988 0.3562 +vt 0.9583 0.8988 0.3562 +vt 0.9583 0.6845 0.3562 +vt 0.6510 0.8988 0.6438 +vt 0.6510 0.6845 0.6438 +vt 0.9583 0.6845 0.6438 +vt 0.9583 0.8988 0.6438 +vt 0.7396 1.0000 0.3562 +vt 0.9583 1.0000 0.3562 +vt 0.6458 0.9286 0.6190 +vt 0.3438 0.9286 0.6190 +vt 0.3438 0.6786 0.6190 +vt 0.6458 0.6786 0.6190 +vt 0.7396 1.0000 0.6438 +vt 0.9583 1.0000 0.6438 +vt 0.2604 0.3631 0.4976 +vt 0.3177 0.3631 0.4976 +vt 0.3177 0.3274 0.5269 +vt 0.2656 0.3274 0.5269 +vt 0.2083 0.2143 0.5347 +vt 0.0156 0.2143 0.5347 +vt 0.2083 0.2619 0.5347 +vt 0.2656 0.3274 0.5945 +vt 0.0156 0.3274 0.5955 +vt 0.0156 0.3631 0.5893 +vt 0.2344 0.3631 0.5893 +vt 0.2083 0.2619 0.6042 +vt 0.0156 0.2619 0.6042 +vt 0.3177 0.2619 0.4731 +vt 0.2760 0.2619 0.4731 +vt 0.0208 0.0179 0.6587 +vt 0.0729 0.0179 0.6587 +vt 0.0729 0.0298 0.6587 +vt 0.0208 0.1131 0.6587 +vt 0.2604 0.0179 0.6587 +vt 0.2604 0.0298 0.6587 +vt 0.3125 0.0179 0.6587 +vt 0.3125 0.1131 0.6587 +vt 0.0573 0.9643 0.3710 +vt 0.1302 0.9643 0.4206 +vt 0.1302 0.8571 0.4206 +vt 0.0573 0.8571 0.3710 +vt 0.3073 0.9643 0.3810 +vt 0.1406 0.9643 0.3810 +vt 0.1406 0.8571 0.3810 +vt 0.3073 0.8571 0.3810 +vt 0.1302 0.9643 0.5794 +vt 0.0573 0.9643 0.6290 +vt 0.0573 0.8571 0.6290 +vt 0.1302 0.8571 0.5794 +vt 0.1302 0.8155 0.4107 +vt 0.0573 0.8155 0.3611 +vt 0.1302 0.8155 0.3661 +vt 0.3177 0.8155 0.3661 +vt 0.0573 0.8155 0.6389 +vt 0.1302 0.8155 0.5893 +vt 0.0156 0.1131 0.6587 +vt 0.3177 0.1131 0.6587 +vt 0.0573 0.9643 0.4504 +vt 0.0573 0.8571 0.4504 +vt 0.0417 0.8571 0.4504 +vt 0.0417 0.9643 0.4504 +vt 0.0469 0.8155 0.4355 +vt 0.0417 0.8155 0.4355 +vt 0.0573 0.6845 0.6389 +vt 0.1302 0.6845 0.5893 +vt 0.1302 0.6845 0.3661 +vt 0.3177 0.6845 0.3661 +vt 0.1302 0.6845 0.4107 +vt 0.0573 0.6845 0.3611 +vt 0.0417 0.6845 0.4355 +vt 0.0469 0.6845 0.4355 +vt 0.3438 0.5774 0.5347 +vt 0.3438 0.5060 0.4752 +vt 0.6458 0.5060 0.4752 +vt 0.6458 0.5774 0.5347 +vt 0.3438 0.5060 0.4256 +vt 0.3438 0.3929 0.4256 +vt 0.6458 0.3929 0.4256 +vt 0.6458 0.5060 0.4256 +vt 0.1719 0.6548 0.3661 +vt 0.2760 0.6548 0.3661 +vt 0.2760 0.6845 0.3810 +vt 0.1719 0.6845 0.3810 +vt 0.0573 0.6548 0.0000 +vt 0.0208 0.6726 0.0000 +vt 0.1563 0.6726 0.0000 +vt 0.1719 0.6548 0.0000 +vt 0.2760 0.8393 0.3810 +vt 0.1719 0.8393 0.3810 +vt 0.1094 0.0476 0.4256 +vt 0.2240 0.0476 0.4256 +vt 0.2240 0.1429 0.4256 +vt 0.1094 0.1429 0.4256 +vt 0.0885 0.2143 0.4454 +vt 0.1094 0.2143 0.4454 +vt 0.1094 0.1429 0.4454 +vt 0.0260 0.1429 0.4454 +vt 0.1094 0.2143 0.5546 +vt 0.2240 0.2143 0.5546 +vt 0.2240 0.1429 0.5546 +vt 0.1094 0.1429 0.5546 +vt 0.0885 0.2143 0.5546 +vt 0.0260 0.1429 0.5546 +vt 0.0156 0.2619 0.3966 +vt 0.2083 0.2619 0.3966 +vt 0.2656 0.3274 0.4062 +vt 0.0156 0.3274 0.4055 +vt 0.2344 0.3631 0.4114 +vt 0.0156 0.3631 0.4114 +# 150 texture coords + +g dock +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 1/9/3 4/10/3 9/11/3 10/12/3 +f 10/12/3 9/11/3 6/13/3 5/14/3 +f 4/15/4 3/16/4 11/17/4 9/18/4 +f 9/18/5 11/17/5 7/19/5 6/20/5 +f 12/21/6 13/22/6 14/23/6 15/24/6 +f 2/25/7 1/9/7 10/12/7 16/26/7 +f 16/26/8 10/12/8 5/14/8 8/27/8 +f 3/28/9 2/16/9 17/29/9 18/30/9 +f 8/8/10 7/7/10 19/31/10 20/32/10 +f 11/33/11 3/28/11 18/30/11 21/34/11 +f 7/7/10 11/35/10 21/36/10 19/31/10 +f 2/16/11 16/17/11 22/37/11 17/29/11 +f 16/38/12 8/8/12 20/32/12 22/39/12 +f 17/40/5 22/41/5 13/42/5 23/43/5 +f 21/44/8 18/45/8 24/46/8 12/47/8 +f 22/41/5 20/48/5 14/49/5 13/42/5 +f 20/50/1 19/51/1 15/52/1 14/53/1 +f 19/54/7 21/44/7 12/47/7 15/55/7 +f 25/56/12 19/57/12 26/58/12 27/59/12 +f 28/60/13 12/61/13 29/36/13 30/62/13 +f 27/63/14 31/64/14 32/65/14 25/66/14 +f 31/64/15 27/63/15 30/67/15 29/68/15 +f 27/59/16 26/58/16 28/69/16 30/70/16 +f 33/71/6 34/72/6 35/73/6 36/74/6 +f 34/72/6 37/75/6 38/76/6 35/73/6 +f 37/75/6 39/77/6 40/78/6 38/76/6 +f 41/79/17 42/80/17 43/81/17 44/82/17 +f 42/83/2 45/84/2 46/85/2 43/86/2 +f 45/87/18 47/88/18 48/89/18 46/90/18 +f 44/82/19 43/81/19 49/91/19 50/92/19 +f 43/86/20 46/85/20 51/93/20 49/94/20 +f 46/90/21 48/89/21 52/95/21 51/96/21 +f 33/71/9 36/74/9 53/97/9 18/30/9 +f 40/78/9 39/77/9 17/29/9 54/98/9 +f 41/99/22 44/100/22 55/101/22 56/102/22 +f 44/100/20 50/103/20 57/104/20 55/101/20 +f 48/100/22 47/99/22 58/102/22 59/101/22 +f 52/103/20 48/100/20 59/101/20 60/104/20 +f 51/96/18 52/95/18 36/105/18 35/106/18 +f 49/94/23 51/93/23 35/107/23 38/108/23 +f 50/92/17 49/91/17 38/109/17 40/110/17 +f 52/103/2 60/104/2 53/111/2 36/112/2 +f 57/104/2 50/103/2 40/112/2 54/111/2 +f 12/113/12 61/114/12 62/115/10 13/116/10 +f 61/117/6 63/118/6 64/119/6 62/120/6 +f 65/121/10 66/122/10 67/123/10 68/124/10 +f 69/125/7 70/126/7 67/127/7 66/128/7 +f 70/129/2 71/130/2 68/124/2 67/123/2 +f 71/126/4 72/125/4 65/128/4 68/127/4 +f 73/131/6 74/132/6 75/133/6 76/134/6 +f 77/135/8 78/136/8 75/137/8 74/138/7 +f 78/139/2 79/140/2 76/141/2 75/142/2 +f 79/139/5 80/143/24 73/144/4 76/142/4 +f 20/57/10 81/56/10 82/59/10 83/58/10 +f 13/61/1 84/60/1 85/62/1 86/36/1 +f 86/145/25 85/146/25 82/147/25 87/148/25 +f 81/149/25 88/150/25 87/148/25 82/147/25 +f 83/58/16 82/59/16 85/70/16 84/69/16 +# 60 polygons + diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.mtl new file mode 100644 index 00000000..e6617563 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.mtl @@ -0,0 +1,4 @@ +newmtl MinerBase +Ks 1.000000 1.000000 1.000000 +d 1.000000 +map_Kd galacticraftplanets:blocks/minerbase \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.obj new file mode 100644 index 00000000..7f536cb8 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.obj @@ -0,0 +1,269 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib minerbase0.mtl +o dock.001 +v -20.000000 -20.000008 19.999992 +v -20.000000 -19.999992 -20.000008 +v 20.000000 -19.999992 -20.000008 +v 20.000000 -20.000008 19.999992 +v -20.000000 19.999992 20.000008 +v 20.000000 19.999992 20.000008 +v 20.000000 20.000000 -4.374994 +v -20.000000 20.000000 -4.374994 +v 20.000000 4.374994 20.000000 +v -20.000000 4.374994 20.000000 +v 20.000000 4.375006 -20.000000 +v 18.125000 4.374994 16.875000 +v -18.125000 4.374994 16.875000 +v -18.125000 14.999994 16.875004 +v 18.125000 14.999994 16.875004 +v -20.000000 4.375006 -20.000000 +v -18.125000 -18.124992 -20.000008 +v 18.125000 -18.124992 -20.000008 +v 18.125000 15.000004 -9.374994 +v -18.125000 15.000004 -9.374994 +v 18.125000 4.375006 -20.000000 +v -18.125000 4.375006 -20.000000 +v -18.125000 -18.125004 16.874992 +v 18.125000 -18.125004 16.874992 +v 11.250000 15.000004 -9.374994 +v 18.125000 11.250004 -13.124996 +v 11.911800 11.250004 -13.124996 +v 18.125000 4.375002 -6.250000 +v 13.125000 4.374994 16.875000 +v 13.125000 4.375002 -6.250000 +v 11.911800 11.249994 16.875004 +v 11.250000 14.999994 16.875004 +v 17.500000 -18.124992 -20.000008 +v 11.250000 -18.124992 -20.000008 +v 11.250000 -16.874992 -20.000004 +v 17.500000 -8.124994 -20.000004 +v -11.250000 -18.124992 -20.000008 +v -11.250000 -16.874992 -20.000004 +v -17.500000 -18.124992 -20.000008 +v -17.500000 -8.124994 -20.000004 +v -16.250000 -6.250002 9.374998 +v -10.000000 -15.000004 9.374994 +v -10.000000 -15.000000 -1.875005 +v -16.250000 -6.250000 -1.875002 +v 10.000000 -15.000004 9.374994 +v 10.000000 -15.000000 -1.875005 +v 16.250000 -6.250002 9.374998 +v 16.250000 -6.250000 -1.875002 +v -11.250000 -16.874996 -6.250006 +v -17.500000 -8.124998 -6.250002 +v 11.250000 -16.874996 -6.250006 +v 17.500000 -8.124998 -6.250002 +v 18.125000 -8.124994 -20.000004 +v -18.125000 -8.124994 -20.000004 +v -18.125000 -6.250000 -1.875002 +v -18.125000 -6.250002 9.374998 +v -18.125000 -8.124998 -6.250002 +v 18.125000 -6.250002 9.374998 +v 18.125000 -6.250000 -1.875002 +v 18.125000 -8.124998 -6.250002 +v -11.250000 15.000004 -9.374994 +v -11.911700 11.250004 -13.124996 +v -18.125000 11.250004 -13.124996 +v -18.125000 4.375002 -6.250000 +v -13.125000 4.375002 -6.250000 +v -13.125000 4.374994 16.875000 +v -11.911800 11.249994 16.875004 +v -11.250000 14.999994 16.875004 +v 18.125000 -3.125002 9.374998 +v -18.125000 -3.125002 9.374998 +v 18.125000 -15.000004 9.374994 +v -18.125000 -15.000004 9.374994 +v 6.250000 -16.874992 -20.000004 +v -6.250000 -16.874992 -20.000004 +v -6.250000 -14.999994 -18.125004 +v 6.250000 -14.999994 -18.125004 +v -6.250000 -16.874996 -6.250006 +v -6.250000 -15.000000 -1.875005 +v 6.250000 -15.000000 -1.875005 +v 6.250000 -16.874996 -6.250006 +v 6.875000 -3.125002 9.374998 +v -6.875000 -3.125002 9.374998 +v -6.875000 6.874998 9.375002 +v 6.875000 6.874998 9.375002 +v -6.875000 4.374994 16.875000 +v -6.875000 6.874994 16.875004 +v 6.875000 6.874994 16.875004 +v 6.875000 4.374994 16.875000 +vt 0.753676 0.596213 +vt 0.753676 0.846534 +vt 0.502801 0.846534 +vt 0.502801 0.596213 +vt 0.251851 0.764408 +vt 0.000976 0.764408 +vt 0.000976 0.611850 +vt 0.251851 0.611850 +vt 0.502801 0.342016 +vt 0.753676 0.342016 +vt 0.753676 0.494508 +vt 0.502801 0.494508 +vt 0.753676 0.592337 +vt 0.502801 0.592337 +vt 0.251851 0.342016 +vt 0.251851 0.494508 +vt 0.349852 0.592337 +vt 0.259754 0.721374 +vt 0.487070 0.721374 +vt 0.487070 0.787863 +vt 0.259754 0.787863 +vt 0.000976 0.342016 +vt 0.240108 0.353776 +vt 0.012718 0.353776 +vt 0.012718 0.580576 +vt 0.240108 0.580576 +vt 0.000976 0.494508 +vt 0.012718 0.494508 +vt 0.000976 0.514087 +vt 0.012718 0.514087 +vt 0.240108 0.494508 +vt 0.251851 0.514087 +vt 0.240108 0.514087 +vt 0.490984 0.791740 +vt 0.490984 0.932537 +vt 0.722288 0.932537 +vt 0.722288 0.791740 +vt 0.557673 0.999027 +vt 0.722288 0.999027 +vt 0.487070 0.952116 +vt 0.259754 0.952116 +vt 0.196979 0.580576 +vt 0.240108 0.557121 +vt 0.200893 0.557121 +vt 0.157763 0.482813 +vt 0.012718 0.482813 +vt 0.157763 0.514087 +vt 0.012718 0.557121 +vt 0.177409 0.580576 +vt 0.208721 0.514087 +vt 0.016632 0.353776 +vt 0.055847 0.353776 +vt 0.055847 0.361594 +vt 0.016632 0.416323 +vt 0.196979 0.353776 +vt 0.196979 0.361594 +vt 0.236194 0.353776 +vt 0.236194 0.416323 +vt 0.044105 0.975571 +vt 0.098977 0.975571 +vt 0.098977 0.905140 +vt 0.044105 0.905140 +vt 0.232280 0.975571 +vt 0.106805 0.975571 +vt 0.106805 0.905140 +vt 0.232280 0.905140 +vt 0.098977 0.877808 +vt 0.044105 0.877808 +vt 0.240108 0.877808 +vt 0.012718 0.416323 +vt 0.240108 0.416323 +vt 0.032363 0.905140 +vt 0.032363 0.975571 +vt 0.036277 0.877808 +vt 0.032363 0.877808 +vt 0.044105 0.791740 +vt 0.098977 0.791740 +vt 0.240108 0.791740 +vt 0.032363 0.791740 +vt 0.036277 0.791740 +vt 0.259754 0.674463 +vt 0.487070 0.674463 +vt 0.259754 0.600155 +vt 0.487070 0.600155 +vt 0.130365 0.772226 +vt 0.208721 0.772226 +vt 0.208721 0.791740 +vt 0.130365 0.791740 +vt 0.044105 0.772226 +vt 0.016632 0.783921 +vt 0.118623 0.783921 +vt 0.208721 0.893445 +vt 0.130365 0.893445 +vt 0.083321 0.373289 +vt 0.169580 0.373289 +vt 0.169580 0.435902 +vt 0.083321 0.435902 +vt 0.067590 0.482813 +vt 0.083321 0.482813 +vt 0.020546 0.435902 +vt 0.169580 0.482813 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +vn -0.984800 -0.173800 -0.000000 +vn 0.000000 -0.707100 -0.707100 +vn 0.813700 0.581200 0.000000 +vn -0.813700 0.581200 0.000000 +vn 0.733100 0.523700 -0.433900 +vn 0.000000 0.919100 -0.393900 +vn -0.733100 0.523700 -0.433900 +vn 0.984800 -0.173800 0.000000 +usemtl MinerBase +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 1/9/3 4/10/3 9/11/3 10/12/3 +f 10/12/3 9/11/3 6/13/3 5/14/3 +f 4/9/4 3/15/4 11/16/4 9/12/4 +f 9/12/4 11/16/4 7/17/4 6/14/4 +f 12/18/5 13/19/5 14/20/5 15/21/5 +f 2/15/6 1/9/6 10/12/6 16/16/6 +f 16/16/6 10/12/6 5/14/6 8/17/6 +f 3/22/5 2/15/5 17/23/5 18/24/5 +f 8/8/7 7/7/7 19/25/7 20/26/7 +f 11/27/5 3/22/5 18/24/5 21/28/5 +f 7/7/7 11/29/7 21/30/7 19/25/7 +f 2/15/5 16/16/5 22/31/5 17/23/5 +f 16/32/7 8/8/7 20/26/7 22/33/7 +f 17/34/4 22/35/4 13/36/4 23/37/4 +f 21/35/6 18/34/6 24/37/6 12/36/6 +f 22/35/4 20/38/4 14/39/4 13/36/4 +f 20/40/1 19/41/1 15/21/1 14/20/1 +f 19/38/6 21/35/6 12/36/6 15/39/6 +f 25/42/7 19/26/7 26/43/7 27/44/7 +f 28/45/1 12/46/1 29/30/1 30/47/1 +f 27/44/8 31/48/8 32/25/8 25/49/8 +f 31/48/8 27/44/8 30/47/8 29/30/8 +f 27/44/9 26/43/9 28/33/9 30/50/9 +f 33/51/5 34/52/5 35/53/5 36/54/5 +f 34/52/5 37/55/5 38/56/5 35/53/5 +f 37/55/5 39/57/5 40/58/5 38/56/5 +f 41/59/10 42/60/10 43/61/10 44/62/10 +f 42/63/2 45/64/2 46/65/2 43/66/2 +f 45/60/11 47/59/11 48/62/11 46/61/11 +f 44/62/12 43/61/12 49/67/12 50/68/12 +f 43/66/13 46/65/13 51/67/13 49/69/13 +f 46/61/14 48/62/14 52/68/14 51/67/14 +f 33/51/5 36/54/5 53/70/5 18/24/5 +f 40/58/5 39/57/5 17/23/5 54/71/5 +f 41/59/2 44/62/2 55/72/2 56/73/2 +f 44/62/13 50/74/13 57/75/13 55/72/13 +f 48/62/2 47/59/2 58/73/2 59/72/2 +f 52/74/13 48/62/13 59/72/13 60/75/13 +f 51/67/11 52/68/11 36/76/11 35/77/11 +f 49/69/2 51/67/2 35/77/2 38/78/2 +f 50/68/10 49/67/10 38/77/10 40/76/10 +f 52/74/2 60/75/2 53/79/2 36/80/2 +f 57/75/2 50/74/2 40/80/2 54/79/2 +f 20/26/7 61/42/7 62/44/7 63/43/7 +f 13/46/1 64/45/1 65/47/1 66/30/1 +f 66/30/15 65/47/15 62/44/15 67/48/15 +f 61/49/15 68/25/15 67/48/15 62/44/15 +f 63/43/9 62/44/9 65/50/9 64/33/9 +f 12/18/7 69/81/7 70/82/7 13/19/7 +f 69/81/5 71/83/5 72/84/5 70/82/5 +f 73/85/7 74/86/7 75/87/7 76/88/7 +f 77/89/6 78/90/6 75/91/6 74/85/6 +f 78/92/2 79/93/2 76/88/2 75/87/2 +f 79/90/4 80/89/4 73/85/4 76/91/4 +f 81/94/5 82/95/5 83/96/5 84/97/5 +f 85/98/6 86/99/6 83/97/6 82/100/6 +f 86/99/2 87/101/2 84/96/2 83/97/2 +f 87/99/4 88/98/4 81/100/4 84/97/4 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.mtl new file mode 100644 index 00000000..b5f3b9f0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.mtl @@ -0,0 +1,5 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +map_Kd galacticraftplanets:blocks/orb diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.obj new file mode 100644 index 00000000..e4657224 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.obj @@ -0,0 +1,175 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib orb.mtl +o inner_Icosphere +v 0.000000 -1.000000 0.000000 +v 0.723600 -0.447215 0.525720 +v -0.276385 -0.447215 0.850640 +v -0.894425 -0.447215 0.000000 +v -0.276385 -0.447215 -0.850640 +v 0.723600 -0.447215 -0.525720 +v 0.276385 0.447215 0.850640 +v -0.723600 0.447215 0.525720 +v -0.723600 0.447215 -0.525720 +v 0.276385 0.447215 -0.850640 +v 0.894425 0.447215 0.000000 +v 0.000000 1.000000 0.000000 +vt 0.512774 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.512774 0.515875 +vt 0.512774 0.515875 +vt 0.512774 0.515875 +vn 0.1876 -0.7947 0.5774 +vn 0.6071 -0.7947 0.0000 +vn -0.4911 -0.7947 0.3568 +vn -0.4911 -0.7947 -0.3568 +vn 0.1876 -0.7947 -0.5774 +vn 0.9822 -0.1876 0.0000 +vn 0.3035 -0.1876 0.9342 +vn -0.7946 -0.1876 0.5774 +vn -0.7946 -0.1876 -0.5774 +vn 0.3035 -0.1876 -0.9342 +vn 0.7946 0.1876 0.5774 +vn -0.3035 0.1876 0.9342 +vn -0.9822 0.1876 0.0000 +vn -0.3035 0.1876 -0.9342 +vn 0.7946 0.1876 -0.5774 +vn 0.4911 0.7947 0.3568 +vn -0.1876 0.7947 0.5774 +vn -0.6071 0.7947 0.0000 +vn -0.1876 0.7947 -0.5774 +vn 0.4911 0.7947 -0.3568 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 2/4/2 1/5/2 6/6/2 +f 1/1/3 3/7/3 4/8/3 +f 1/1/4 4/9/4 5/10/4 +f 1/1/5 5/11/5 6/6/5 +f 2/4/6 6/12/6 11/13/6 +f 3/14/7 2/2/7 7/15/7 +f 4/16/8 3/7/8 8/17/8 +f 5/18/9 4/9/9 9/19/9 +f 6/20/10 5/11/10 10/21/10 +f 2/4/11 11/22/11 7/15/11 +f 3/14/12 7/23/12 8/17/12 +f 4/16/13 8/24/13 9/19/13 +f 5/18/14 9/25/14 10/21/14 +f 6/20/15 10/26/15 11/13/15 +f 7/27/16 11/22/16 12/28/16 +f 8/29/17 7/23/17 12/28/17 +f 9/30/18 8/24/18 12/28/18 +f 10/31/19 9/25/19 12/28/19 +f 11/32/20 10/26/20 12/28/20 +o outer_Icosphere.001 +v 0.000000 -1.372937 0.000000 +v 0.993457 -0.613998 0.721780 +v -0.379459 -0.613998 1.167875 +v -1.227989 -0.613998 0.000000 +v -0.379459 -0.613998 -1.167875 +v 0.993457 -0.613998 -0.721780 +v 0.379459 0.613998 1.167875 +v -0.993457 0.613998 0.721780 +v -0.993457 0.613998 -0.721780 +v 0.379459 0.613998 -1.167875 +v 1.227989 0.613998 0.000000 +v 0.000000 1.372937 0.000000 +vt 0.036479 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.036479 0.534092 +vt 0.036479 0.534092 +vt 0.036479 0.534092 +vn 0.1876 -0.7947 0.5774 +vn 0.6071 -0.7947 0.0000 +vn -0.4911 -0.7947 0.3568 +vn -0.4911 -0.7947 -0.3568 +vn 0.1876 -0.7947 -0.5774 +vn 0.9822 -0.1876 0.0000 +vn 0.3035 -0.1876 0.9342 +vn -0.7946 -0.1876 0.5774 +vn -0.7946 -0.1876 -0.5774 +vn 0.3035 -0.1876 -0.9342 +vn 0.7946 0.1876 0.5774 +vn -0.3035 0.1876 0.9342 +vn -0.9822 0.1876 0.0000 +vn -0.3035 0.1876 -0.9342 +vn 0.7946 0.1876 -0.5774 +vn 0.4911 0.7947 0.3568 +vn -0.1876 0.7947 0.5774 +vn -0.6071 0.7947 0.0000 +vn -0.1876 0.7947 -0.5774 +vn 0.4911 0.7947 -0.3568 +usemtl None +f 13/33/21 14/34/21 15/35/21 +f 14/36/22 13/37/22 18/38/22 +f 13/33/23 15/39/23 16/40/23 +f 13/33/24 16/41/24 17/42/24 +f 13/33/25 17/43/25 18/38/25 +f 14/36/26 18/44/26 23/45/26 +f 15/46/27 14/34/27 19/47/27 +f 16/48/28 15/39/28 20/49/28 +f 17/50/29 16/41/29 21/51/29 +f 18/52/30 17/43/30 22/53/30 +f 14/36/31 23/54/31 19/47/31 +f 15/46/32 19/55/32 20/49/32 +f 16/48/33 20/56/33 21/51/33 +f 17/50/34 21/57/34 22/53/34 +f 18/52/35 22/58/35 23/45/35 +f 19/59/36 23/54/36 24/60/36 +f 20/61/37 19/55/37 24/60/37 +f 21/62/38 20/56/38 24/60/38 +f 22/63/39 21/57/39 24/60/39 +f 23/64/40 22/58/40 24/60/40 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.mtl new file mode 100644 index 00000000..70166dc6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/space_pod diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.obj new file mode 100644 index 00000000..0b8a5971 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.obj @@ -0,0 +1,962 @@ +mtllib pod.mtl +o PodBody +v -0.634758 4.766150 -0.570744 +v -0.634758 4.766150 -0.634192 +v -0.634758 4.371327 -0.570744 +v 0.570743 4.766150 -0.634192 +v 0.634191 4.766150 -0.634192 +v 0.570743 4.371327 -0.634192 +v 0.634191 4.766150 0.574482 +v 0.634191 4.766150 0.634757 +v 0.634191 4.371327 0.574482 +v -0.574483 4.766150 0.634757 +v -0.634758 4.766150 0.634757 +v -0.574483 4.371327 0.634757 +v 0.570743 4.371327 -0.570744 +v 0.634191 4.371327 -0.570744 +v -0.574483 4.766150 -0.570744 +v -0.574483 4.766150 -0.634192 +v -0.850016 4.766150 0.001869 +v -0.850016 4.371327 0.001869 +v 0.634191 4.766150 -0.570744 +v 0.634191 4.371327 -0.634192 +v 0.765090 4.371327 0.001869 +v 0.850095 4.371327 0.001869 +v -0.769260 4.766150 0.001869 +v 0.850095 4.766150 0.001869 +v -0.634758 4.766150 0.574482 +v -0.634758 4.371327 0.634757 +v 0.570743 4.371327 0.634757 +v 0.570743 4.371327 0.574482 +v 0.634191 4.371327 0.634757 +v -0.574483 4.766150 0.574482 +v -0.001870 4.766150 -0.852130 +v -0.001870 4.371327 -0.852130 +v 0.570743 4.766150 0.634757 +v -0.001870 4.371327 -0.766925 +v 0.570743 4.766150 -0.570744 +v -0.002085 4.371327 0.002050 +v -0.001870 4.371327 0.851970 +v -0.001870 4.371327 0.771025 +v -0.001870 4.766150 0.851970 +v -0.001870 4.766150 -0.766925 +v 0.765090 4.766150 0.001869 +v 0.765090 4.413541 0.001869 +v -0.001870 4.766150 0.771025 +v -0.634758 4.371327 -0.634192 +v -0.574483 4.371327 -0.570744 +v -0.634758 4.371327 0.574482 +v -0.574483 4.413541 -0.570744 +v -0.769260 4.413541 0.001869 +v -0.574483 4.413541 -0.570744 +v -0.001870 4.413541 -0.766925 +v 0.570743 4.766150 0.574482 +v -0.001870 4.413541 0.771025 +v 0.570743 4.413541 0.574482 +v -0.574483 4.371327 0.574482 +v -0.002085 4.413541 0.002050 +v -0.574483 4.371327 -0.634192 +v -0.769260 4.371327 0.001869 +v 0.570743 4.413541 -0.570744 +v -0.574483 4.413541 0.574482 +v -0.002085 4.413541 0.002050 +v -0.001870 4.413541 -0.766925 +v -0.769260 4.413541 0.001869 +v -1.121243 1.250807 1.121243 +v -1.121243 1.250807 -1.121243 +v -1.121243 0.922112 1.121243 +v 1.121243 1.250807 -1.121243 +v -1.121243 0.922112 -1.121243 +v 1.121243 1.250807 1.121243 +v 1.121243 0.922112 -1.121243 +v 1.121243 0.922112 1.121243 +v -1.282053 2.701678 -0.302830 +v -1.282053 2.701678 -0.612996 +v -1.282053 0.915438 -0.302830 +v -0.983548 2.701678 -0.612996 +v -1.282053 0.915438 -0.612996 +v -0.983548 2.701678 0.245198 +v -0.983548 2.701678 0.612996 +v -0.983548 0.915438 0.245198 +v -1.282053 2.701678 0.612996 +v -0.983548 0.915438 0.612996 +v -0.983548 0.915438 -0.202830 +v -0.983548 4.033402 -0.202829 +v -0.983548 4.033402 -0.612995 +v -1.282053 4.033402 -0.612995 +v -1.282053 2.701678 0.345198 +v -1.282053 0.915438 0.612996 +v -0.983548 2.701678 -0.202830 +v -1.282053 0.915438 0.345198 +v -0.983548 4.033402 0.612997 +v -0.983548 4.033402 0.245199 +v -1.282053 4.033402 0.612997 +v -1.282053 4.033402 0.345199 +v -0.983548 0.915438 -0.612996 +v -1.282053 4.033402 -0.302829 +v -1.282053 3.339003 -0.302829 +v -1.282053 3.339003 -0.612995 +v -0.983548 3.339003 0.245199 +v -0.983548 3.339003 0.612997 +v -1.282053 3.339003 0.612997 +v -0.983548 3.339003 -0.202829 +v -1.282053 3.339003 0.345199 +v -0.983548 3.339003 -0.612995 +v -1.326488 3.265762 -0.230242 +v -1.326488 3.265762 0.272613 +v -1.326488 2.774920 0.272612 +v -1.326488 2.774920 -0.230243 +v -1.000000 4.360665 1.000001 +v -1.000000 4.360665 -0.999999 +v -1.000000 0.417663 1.000000 +v 1.000000 4.360665 -0.999999 +v -1.000000 0.417663 -1.000000 +v 1.000000 4.360665 1.000001 +v 1.000000 0.417663 -1.000000 +v 1.000000 0.417663 1.000000 +v 0.412316 2.368839 -1.268437 +v 0.657365 2.368839 -1.259879 +v 0.412316 0.915438 -1.268437 +v 0.646948 2.368839 -0.961556 +v 0.657365 0.915438 -1.259879 +v -0.328692 2.368839 -0.995626 +v -0.578297 2.368839 -1.004342 +v -0.328692 0.915438 -0.995626 +v -0.567880 2.368839 -1.302666 +v -0.578297 0.915438 -1.004342 +v 0.401899 0.915438 -0.970113 +v 0.401899 4.033402 -0.970112 +v 0.646948 4.033402 -0.961555 +v 0.412316 4.033402 -1.268436 +v 0.657365 4.033402 -1.259878 +v 0.412316 3.574099 -1.268436 +v 0.657365 3.574099 -1.259878 +v -0.328692 4.033402 -0.995625 +v -0.578297 4.033402 -1.004341 +v -0.328692 3.574099 -0.995625 +v -0.567880 4.033402 -1.302665 +v -0.578297 3.574099 -1.004341 +v 0.646948 3.574099 -0.961555 +v -0.567880 3.574099 -1.302665 +v -0.318274 2.368839 -1.293949 +v -0.318274 0.915438 -1.293949 +v 0.401899 2.368839 -0.970113 +v 0.646948 0.915438 -0.961556 +v -0.318274 4.033402 -1.293948 +v -0.318274 3.574099 -1.293948 +v 0.406242 3.574099 -1.094502 +v 0.401899 3.574099 -0.970112 +v -0.567880 0.915438 -1.302666 +v -0.324348 2.368839 -1.120016 +v -0.324348 3.574099 -1.120015 +v -0.321635 2.368839 -1.197703 +v 0.406242 2.368839 -1.094503 +v -0.321635 3.574099 -1.197702 +v 0.408955 3.574099 -1.172189 +v 0.408955 2.368839 -1.172190 +v -1.121243 4.032755 1.121244 +v -1.121243 4.032755 -1.121242 +v -1.121243 3.704061 1.121244 +v 1.121243 4.032755 -1.121242 +v -1.121243 3.704061 -1.121242 +v 1.121243 4.032755 1.121244 +v 1.121243 3.704061 -1.121242 +v 1.121243 3.704061 1.121244 +v -0.634758 0.034352 0.570746 +v -0.634758 0.034352 0.634193 +v -0.634758 0.429174 0.570746 +v 0.570743 0.034352 0.634193 +v 0.634191 0.034352 0.634193 +v 0.570743 0.429174 0.634193 +v 0.634191 0.034352 -0.574480 +v 0.634191 0.034352 -0.634755 +v 0.634191 0.429174 -0.574480 +v -0.574483 0.034352 -0.634755 +v -0.634758 0.034352 -0.634755 +v -0.574483 0.429174 -0.634755 +v 0.570743 0.429174 0.570746 +v 0.634191 0.429174 0.570746 +v -0.574483 0.034352 0.570746 +v -0.574483 0.034352 0.634193 +v -0.850016 0.034352 -0.001867 +v -0.850016 0.429174 -0.001867 +v 0.634191 0.034352 0.570746 +v 0.634191 0.429174 0.634193 +v 0.765090 0.429174 -0.001867 +v 0.850095 0.429174 -0.001867 +v -0.769260 0.034352 -0.001867 +v 0.850095 0.034352 -0.001867 +v -0.634758 0.034352 -0.574480 +v -0.634758 0.429174 -0.634755 +v 0.570743 0.429174 -0.634755 +v 0.570743 0.429174 -0.574480 +v 0.634191 0.429174 -0.634755 +v -0.574483 0.034352 -0.574480 +v -0.001870 0.034352 0.852132 +v -0.001870 0.429174 0.852132 +v 0.570743 0.034352 -0.634755 +v -0.001870 0.429174 0.766927 +v 0.570743 0.034352 0.570746 +v -0.002085 0.429174 -0.002048 +v -0.001870 0.429174 -0.851968 +v -0.001870 0.429174 -0.771024 +v -0.001870 0.034352 -0.851968 +v -0.001870 0.034352 0.766927 +v 0.765090 0.034352 -0.001867 +v 0.765090 0.386961 -0.001867 +v -0.001870 0.034352 -0.771024 +v -0.634758 0.429174 0.634193 +v -0.574483 0.429174 0.570746 +v -0.634758 0.429174 -0.574480 +v -0.574483 0.386961 0.570746 +v -0.769260 0.386961 -0.001867 +v -0.574483 0.386961 0.570746 +v -0.001870 0.386961 0.766927 +v 0.570743 0.034352 -0.574480 +v -0.001870 0.386961 -0.771024 +v 0.570743 0.386961 -0.574480 +v -0.574483 0.429174 -0.574480 +v -0.002085 0.386961 -0.002048 +v -0.574483 0.429174 0.634193 +v -0.769260 0.429174 -0.001867 +v 0.570743 0.386961 0.570746 +v -0.574483 0.386961 -0.574480 +v -0.002085 0.386961 -0.002048 +v -0.001870 0.386961 0.766927 +v -0.769260 0.386961 -0.001867 +v -0.302830 2.701678 1.282053 +v -0.612996 2.701678 1.282053 +v -0.302830 0.915438 1.282053 +v -0.612996 2.701678 0.983548 +v -0.612996 0.915438 1.282053 +v 0.245198 2.701678 0.983548 +v 0.612996 2.701678 0.983548 +v 0.245198 0.915438 0.983548 +v 0.612996 2.701678 1.282053 +v 0.612996 0.915438 0.983548 +v -0.202830 0.915438 0.983548 +v -0.202830 4.033402 0.983549 +v -0.612996 4.033402 0.983549 +v -0.612996 4.033402 1.282054 +v 0.345198 2.701678 1.282053 +v 0.612996 0.915438 1.282053 +v -0.202830 2.701678 0.983548 +v 0.345198 0.915438 1.282053 +v 0.612996 4.033402 0.983549 +v 0.245198 4.033402 0.983549 +v 0.612996 4.033402 1.282054 +v 0.345198 4.033402 1.282054 +v -0.612996 0.915438 0.983548 +v -0.302830 4.033402 1.282054 +v -0.302830 3.339003 1.282054 +v -0.612996 3.339003 1.282054 +v 0.245198 3.339003 0.983549 +v 0.612996 3.339003 0.983549 +v 0.612996 3.339003 1.282054 +v -0.202830 3.339003 0.983549 +v 0.345198 3.339003 1.282054 +v -0.612996 3.339003 0.983549 +v -0.230243 3.265762 1.326488 +v 0.272612 3.265762 1.326488 +v 0.272612 2.774920 1.326488 +v -0.230243 2.774920 1.326488 +v 1.282053 2.701678 0.302830 +v 1.282053 2.701678 0.612996 +v 1.282053 0.915438 0.302830 +v 0.983548 2.701678 0.612996 +v 1.282053 0.915438 0.612996 +v 0.983548 2.701678 -0.245198 +v 0.983548 2.701678 -0.612996 +v 0.983548 0.915438 -0.245198 +v 1.282054 2.701678 -0.612996 +v 0.983548 0.915438 -0.612996 +v 0.983548 0.915438 0.202830 +v 0.983548 4.033402 0.202831 +v 0.983548 4.033402 0.612997 +v 1.282053 4.033402 0.612997 +v 1.282053 2.701678 -0.345198 +v 1.282054 0.915438 -0.612996 +v 0.983548 2.701678 0.202830 +v 1.282053 0.915438 -0.345198 +v 0.983548 4.033402 -0.612995 +v 0.983548 4.033402 -0.245197 +v 1.282054 4.033402 -0.612995 +v 1.282053 4.033402 -0.345197 +v 0.983548 0.915438 0.612996 +v 1.282053 4.033402 0.302831 +v 1.282053 3.339003 0.302831 +v 1.282053 3.339003 0.612997 +v 0.983548 3.339003 -0.245197 +v 0.983548 3.339003 -0.612995 +v 1.282054 3.339003 -0.612995 +v 0.983548 3.339003 0.202831 +v 1.282053 3.339003 -0.345197 +v 0.983548 3.339003 0.612997 +v 1.326488 3.265762 0.230244 +v 1.326488 3.265762 -0.272611 +v 1.326488 2.774920 -0.272612 +v 1.326488 2.774920 0.230243 +v -0.612996 3.339003 1.282054 +v -0.935509 4.207664 0.935510 +v -0.935509 0.893071 0.935509 +v -0.935509 4.207664 -0.935508 +v -0.935509 0.893071 -0.935509 +v 0.935509 4.207664 -0.935508 +v 0.935509 0.893071 -0.935509 +v 0.935509 4.207664 0.935510 +v 0.935509 0.893071 0.935509 +v -0.612996 2.701678 1.282053 +vt 0.507236 0.505729 +vt 0.998486 0.505729 +vt 0.507236 0.996979 +vt 0.007371 0.006440 +vt 0.498621 0.006440 +vt 0.007371 0.497689 +vt 0.998486 0.996979 +vt 0.498621 0.497689 +vt 0.505136 0.506305 +vt 0.996386 0.506305 +vt 0.505136 0.997555 +vt 0.996386 0.997555 +vt 0.967001 0.003089 +vt 0.996327 0.003089 +vt 0.967001 0.493847 +vt 0.988623 0.497655 +vt 0.505862 0.497655 +vt 0.988623 0.014893 +vt 0.007371 0.505465 +vt 0.498621 0.505465 +vt 0.007371 0.996714 +vt 0.506571 0.505640 +vt 0.997821 0.505640 +vt 0.506571 0.996889 +vt 0.505136 0.503629 +vt 0.996386 0.503629 +vt 0.505136 0.994879 +vt 0.503052 0.503052 +vt 0.503052 0.996948 +vt 0.996948 0.503052 +vt 0.996327 0.493847 +vt 0.505862 0.014893 +vt 0.498621 0.996714 +vt 0.997821 0.996889 +vt 0.996386 0.994879 +vt 0.996948 0.996948 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.936000 0.000000 -0.351900 +vn 0.935700 0.000000 0.352800 +vn 0.355700 0.000000 -0.934600 +vn -0.354700 -0.000000 0.935000 +vn -0.946900 0.000000 0.321400 +vn 0.324100 -0.000000 0.946000 +vn 0.946700 0.000000 -0.322000 +vn -0.324600 0.000000 -0.945800 +vn -0.936000 0.000000 0.351900 +vn 0.935700 0.000000 -0.352800 +vn -0.946900 0.000000 -0.321400 +vn 0.946700 0.000000 0.322000 +vn -0.355700 0.000000 -0.934600 +vn 0.354700 -0.000000 0.935000 +vn -0.324100 -0.000000 0.946000 +vn 0.324600 0.000000 -0.945800 +vn 0.000000 0.000000 0.000000 +vn -0.852900 0.000000 -0.522100 +vn -0.855000 0.518700 0.000000 +vn -0.855000 -0.518700 0.000000 +vn -0.852900 -0.000000 0.522100 +vn 0.034900 0.000000 -0.999400 +vn 0.999400 -0.000000 0.034900 +vn -0.034900 -0.000000 0.999400 +vn -0.999400 0.000000 -0.034900 +vn 0.355700 -0.000000 0.934600 +vn -0.354700 0.000000 -0.935000 +vn 0.324100 0.000000 -0.946000 +vn -0.324600 -0.000000 0.945800 +vn -0.355700 -0.000000 0.934600 +vn 0.354700 0.000000 -0.935000 +vn -0.324100 0.000000 -0.946000 +vn 0.324600 -0.000000 0.945800 +vn -0.522100 -0.000000 0.852900 +vn 0.000000 0.518700 0.855000 +vn 0.000000 -0.518700 0.855000 +vn 0.522100 -0.000000 0.852900 +vn 0.852900 0.000000 0.522100 +vn 0.855000 0.518700 0.000000 +vn 0.855000 -0.518700 0.000000 +vn 0.852900 0.000000 -0.522100 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 4/1/2 5/2/2 6/3/2 +f 7/1/3 8/2/3 9/3/3 +f 10/1/4 11/2/4 12/3/4 +f 13/4/5 6/5/5 14/6/5 +f 15/1/6 16/2/6 1/3/6 +f 17/1/7 1/2/7 18/3/7 +f 5/1/3 19/2/3 20/3/3 +f 21/4/5 13/5/5 22/6/5 +f 23/1/6 15/2/6 17/3/6 +f 24/1/8 7/2/8 22/3/8 +f 11/1/1 25/2/1 26/3/1 +f 27/4/5 28/5/5 29/6/5 +f 10/1/6 30/2/6 11/3/6 +f 31/1/9 4/2/9 32/3/9 +f 8/1/4 33/2/4 29/3/4 +f 34/4/5 32/5/5 13/6/5 +f 19/1/6 5/2/6 35/3/6 +f 36/1/5 34/2/5 21/3/5 +f 24/1/6 19/2/6 35/7/6 +f 37/4/5 38/5/5 28/8/5 +f 8/1/6 7/2/6 33/3/6 +f 39/1/10 10/2/10 37/3/10 +f 40/1/6 31/2/6 15/3/6 +f 41/1/11 35/2/11 42/3/11 +f 39/1/6 43/2/6 30/7/6 +f 2/1/2 16/2/2 44/3/2 +f 3/4/5 44/5/5 45/6/5 +f 18/4/5 3/5/5 45/8/5 +f 26/4/5 46/5/5 12/6/5 +f 47/4/4 48/5/4 49/6/4 +f 40/1/12 15/2/12 50/3/12 +f 23/1/13 30/2/13 48/3/13 +f 43/1/14 51/2/14 52/3/14 +f 25/1/15 17/2/15 46/3/15 +f 28/4/5 21/5/5 22/8/5 +f 30/1/6 23/2/6 17/7/6 +f 19/1/16 24/2/16 14/3/16 +f 38/1/5 36/2/5 21/7/5 +f 7/1/6 24/2/6 51/3/6 +f 51/1/17 41/2/17 53/3/17 +f 46/4/5 18/5/5 54/6/5 +f 52/1/6 55/2/6 48/7/6 +f 15/1/18 23/2/18 47/3/18 +f 16/1/19 31/2/19 56/3/19 +f 45/4/5 56/5/5 32/8/5 +f 57/1/5 45/2/5 34/7/5 +f 12/4/5 54/5/5 37/6/5 +f 33/1/20 39/2/20 27/3/20 +f 35/1/6 4/2/6 31/7/6 +f 33/1/6 51/2/6 39/3/6 +f 42/1/6 58/2/6 50/7/6 +f 35/1/21 40/2/21 58/3/21 +f 30/1/22 43/2/22 59/3/22 +f 54/1/5 57/2/5 38/3/5 +f 53/1/6 42/2/6 52/3/6 +f 60/1/6 61/2/6 62/3/6 +f 55/4/23 50/5/23 60/6/23 +f 50/4/23 47/5/4 61/6/23 +f 48/4/4 55/5/23 62/6/4 +f 63/4/1 64/5/1 65/6/1 +f 64/4/2 66/5/2 67/6/2 +f 66/4/3 68/5/3 69/6/3 +f 68/4/4 63/5/4 70/6/4 +f 65/4/5 67/5/5 70/6/5 +f 68/4/6 66/5/6 63/6/6 +f 71/9/1 72/10/1 73/11/1 +f 72/9/2 74/10/2 75/11/2 +f 76/4/3 77/5/3 78/6/3 +f 77/9/4 79/10/4 80/11/4 +f 73/9/5 75/10/5 81/11/5 +f 82/9/6 83/10/6 84/12/6 +f 79/9/1 85/10/1 86/11/1 +f 87/4/3 76/5/3 81/6/3 +f 86/9/5 88/10/5 78/12/5 +f 89/9/6 90/10/6 91/11/6 +f 85/9/1 71/10/1 88/11/1 +f 88/9/5 73/10/5 78/11/5 +f 90/9/6 82/10/6 92/11/6 +f 74/4/3 87/5/3 93/6/3 +f 94/9/1 84/10/1 95/11/1 +f 84/9/2 83/10/2 96/11/2 +f 90/4/3 89/5/3 97/6/3 +f 89/9/4 91/10/4 98/11/4 +f 91/9/1 92/10/1 99/11/1 +f 82/4/3 90/5/3 100/6/3 +f 92/9/1 94/10/1 101/11/1 +f 83/4/3 82/5/3 102/6/3 +f 95/9/1 96/10/1 71/11/1 +f 96/9/2 102/10/2 72/11/2 +f 97/4/3 98/5/3 76/6/3 +f 98/9/4 99/10/4 77/11/4 +f 99/9/1 101/10/1 79/11/1 +f 100/4/3 97/5/3 87/6/3 +f 95/13/24 71/14/24 103/15/24 +f 102/4/3 100/5/3 74/6/3 +f 104/16/1 103/17/1 105/18/1 +f 101/13/25 95/14/25 104/15/25 +f 71/13/26 85/14/26 106/15/26 +f 85/13/27 101/14/27 105/15/27 +f 107/19/1 108/20/1 109/21/1 +f 108/19/2 110/20/2 111/21/2 +f 110/19/3 112/20/3 113/21/3 +f 112/19/4 107/20/4 114/21/4 +f 109/19/5 111/20/5 114/21/5 +f 112/19/6 110/20/6 107/21/6 +f 115/9/28 116/10/28 117/11/28 +f 116/9/29 118/10/29 119/11/29 +f 120/4/30 121/5/30 122/6/30 +f 121/9/31 123/10/31 124/11/31 +f 117/9/5 119/10/5 125/11/5 +f 126/9/6 127/10/6 128/11/6 +f 128/9/28 129/10/28 130/11/28 +f 129/22/29 127/23/29 131/24/29 +f 132/4/30 133/5/30 134/6/30 +f 133/9/31 135/10/31 136/11/31 +f 130/9/28 131/10/28 115/11/28 +f 131/9/29 137/10/29 116/11/29 +f 134/4/30 136/5/30 120/6/30 +f 136/9/31 138/10/31 121/11/31 +f 139/9/28 115/10/28 140/11/28 +f 118/4/30 141/5/30 142/6/30 +f 140/9/5 117/10/5 122/11/5 +f 132/9/6 126/10/6 143/11/6 +f 143/9/28 128/10/28 144/11/28 +f 127/4/30 126/5/30 137/6/30 +f 130/9/31 115/10/31 145/11/31 +f 137/4/30 146/5/30 118/6/30 +f 141/4/30 120/5/30 125/6/30 +f 126/4/30 132/5/30 146/6/30 +f 146/4/30 134/5/30 141/6/30 +f 123/9/28 139/10/28 147/11/28 +f 147/9/5 140/10/5 124/11/5 +f 133/9/6 132/10/6 135/11/6 +f 135/9/28 143/10/28 138/11/28 +f 138/9/28 144/10/28 123/11/28 +f 148/4/31 149/5/31 150/6/31 +f 144/9/5 130/10/5 149/11/5 +f 115/9/6 139/10/6 151/11/6 +f 139/9/29 144/10/29 148/11/29 +f 152/25/28 153/26/28 150/27/28 +f 145/4/29 151/5/29 153/6/29 +f 149/4/6 145/5/6 152/6/6 +f 151/4/5 148/5/5 154/6/5 +f 155/4/1 156/5/1 157/6/1 +f 156/4/2 158/5/2 159/6/2 +f 158/4/3 160/5/3 161/6/3 +f 160/4/4 155/5/4 162/6/4 +f 157/4/5 159/5/5 162/6/5 +f 160/4/6 158/5/6 155/6/6 +f 163/1/1 164/2/1 165/3/1 +f 166/1/4 167/2/4 168/3/4 +f 169/1/3 170/2/3 171/3/3 +f 172/1/2 173/2/2 174/3/2 +f 175/4/6 168/5/6 176/6/6 +f 177/1/5 178/2/5 163/3/5 +f 179/1/15 163/2/15 180/3/15 +f 167/1/3 181/2/3 182/3/3 +f 183/4/6 175/5/6 184/6/6 +f 185/1/5 177/2/5 179/3/5 +f 186/1/16 169/2/16 184/3/16 +f 173/1/1 187/2/1 188/3/1 +f 189/4/6 190/5/6 191/6/6 +f 172/1/5 192/2/5 173/3/5 +f 193/1/32 166/2/32 194/3/32 +f 170/1/2 195/2/2 191/3/2 +f 196/4/6 194/5/6 175/6/6 +f 181/1/5 167/2/5 197/3/5 +f 198/1/6 196/2/6 183/3/6 +f 186/1/5 181/2/5 197/7/5 +f 199/4/6 200/5/6 190/8/6 +f 170/1/5 169/2/5 195/3/5 +f 201/1/33 172/2/33 199/3/33 +f 202/1/5 193/2/5 177/3/5 +f 203/1/17 197/2/17 204/3/17 +f 201/1/5 205/2/5 192/7/5 +f 164/1/4 178/2/4 206/3/4 +f 165/4/6 206/5/6 207/6/6 +f 180/4/6 165/5/6 207/8/6 +f 188/4/6 208/5/6 174/6/6 +f 209/4/4 210/5/4 211/6/4 +f 202/1/34 177/2/34 212/3/34 +f 185/1/18 192/2/18 210/3/18 +f 205/1/35 213/2/35 214/3/35 +f 187/1/7 179/2/7 208/3/7 +f 190/4/6 183/5/6 184/8/6 +f 192/1/5 185/2/5 179/7/5 +f 181/1/8 186/2/8 176/3/8 +f 200/1/6 198/2/6 183/7/6 +f 169/1/5 186/2/5 213/3/5 +f 213/1/11 203/2/11 215/3/11 +f 208/4/6 180/5/6 216/6/6 +f 214/1/5 217/2/5 210/7/5 +f 177/1/13 185/2/13 209/3/13 +f 178/1/36 193/2/36 218/3/36 +f 207/4/6 218/5/6 194/8/6 +f 219/4/6 207/5/6 196/8/6 +f 174/4/6 216/5/6 199/6/6 +f 195/1/37 201/2/37 189/3/37 +f 197/1/5 166/2/5 193/7/5 +f 195/1/5 213/2/5 201/3/5 +f 204/1/5 220/2/5 212/7/5 +f 197/1/38 202/2/38 220/3/38 +f 192/1/39 205/2/39 221/3/39 +f 216/1/6 219/2/6 200/3/6 +f 215/1/5 204/2/5 214/3/5 +f 222/1/5 223/2/5 224/3/5 +f 217/4/23 212/5/23 222/6/23 +f 212/4/23 209/5/4 223/6/23 +f 210/4/4 217/5/23 224/6/4 +f 225/9/4 226/10/4 227/11/4 +f 226/9/1 228/10/1 229/11/1 +f 230/4/2 231/5/2 232/6/2 +f 231/9/3 233/10/3 234/11/3 +f 227/9/5 229/10/5 235/11/5 +f 236/9/6 237/10/6 238/12/6 +f 233/9/4 239/10/4 240/11/4 +f 241/4/2 230/5/2 235/6/2 +f 240/9/5 242/10/5 232/12/5 +f 243/9/6 244/10/6 245/11/6 +f 239/9/4 225/10/4 242/11/4 +f 242/9/5 227/10/5 232/11/5 +f 244/9/6 236/10/6 246/11/6 +f 228/4/2 241/5/2 247/6/2 +f 248/9/4 238/10/4 249/11/4 +f 238/9/1 237/10/1 250/11/1 +f 244/4/2 243/5/2 251/6/2 +f 243/9/3 245/10/3 252/11/3 +f 245/9/4 246/10/4 253/11/4 +f 236/4/2 244/5/2 254/6/2 +f 246/9/4 248/10/4 255/11/4 +f 237/4/2 236/5/2 256/6/2 +f 249/9/4 250/10/4 225/11/4 +f 250/9/1 256/10/1 226/11/1 +f 251/4/2 252/5/2 230/6/2 +f 252/9/3 253/10/3 231/11/3 +f 253/9/4 255/10/4 233/11/4 +f 254/4/2 251/5/2 241/6/2 +f 249/13/40 225/14/40 257/15/40 +f 256/4/2 254/5/2 228/6/2 +f 258/16/4 257/17/4 259/18/4 +f 255/13/41 249/14/41 258/15/41 +f 225/13/42 239/14/42 260/15/42 +f 239/13/43 255/14/43 259/15/43 +f 261/9/3 262/10/3 263/11/3 +f 262/9/4 264/10/4 265/11/4 +f 266/4/1 267/5/1 268/6/1 +f 267/9/2 269/10/2 270/11/2 +f 263/9/5 265/10/5 271/11/5 +f 272/9/6 273/10/6 274/12/6 +f 269/9/3 275/10/3 276/11/3 +f 277/4/1 266/5/1 271/6/1 +f 276/9/5 278/10/5 268/12/5 +f 279/9/6 280/10/6 281/11/6 +f 275/9/3 261/10/3 278/11/3 +f 278/9/5 263/10/5 268/11/5 +f 280/9/6 272/10/6 282/11/6 +f 264/4/1 277/5/1 283/6/1 +f 284/9/3 274/10/3 285/11/3 +f 274/9/4 273/10/4 286/11/4 +f 280/4/1 279/5/1 287/6/1 +f 279/9/2 281/10/2 288/11/2 +f 281/9/3 282/10/3 289/11/3 +f 272/4/1 280/5/1 290/6/1 +f 282/9/3 284/10/3 291/11/3 +f 273/4/1 272/5/1 292/6/1 +f 285/9/3 286/10/3 261/11/3 +f 286/9/4 292/10/4 262/11/4 +f 287/4/1 288/5/1 266/6/1 +f 288/9/2 289/10/2 267/11/2 +f 289/9/3 291/10/3 269/11/3 +f 290/4/1 287/5/1 277/6/1 +f 285/13/44 261/14/44 293/15/44 +f 292/4/1 290/5/1 264/6/1 +f 294/16/3 293/17/3 295/18/3 +f 291/13/45 285/14/45 294/15/45 +f 261/13/46 275/14/46 296/15/46 +f 275/13/47 291/14/47 295/15/47 +f 250/5/4 226/8/4 297/5/4 +f 298/28/3 299/29/3 300/30/3 +f 300/28/4 301/29/4 302/30/4 +f 302/28/1 303/29/1 304/30/1 +f 304/28/2 305/29/2 298/30/2 +f 299/28/6 305/29/6 301/30/6 +f 304/28/5 298/29/5 302/30/5 +f 2/2/1 44/7/1 3/3/1 +f 5/2/2 20/7/2 6/3/2 +f 8/2/3 29/7/3 9/3/3 +f 11/2/4 26/7/4 12/3/4 +f 6/5/5 20/8/5 14/6/5 +f 16/2/6 2/7/6 1/3/6 +f 1/2/7 3/7/7 18/3/7 +f 19/2/3 14/7/3 20/3/3 +f 13/5/5 14/8/5 22/6/5 +f 15/2/6 1/7/6 17/3/6 +f 7/2/8 9/7/8 22/3/8 +f 25/2/1 46/7/1 26/3/1 +f 28/5/5 9/8/5 29/6/5 +f 30/2/6 25/7/6 11/3/6 +f 4/2/9 6/7/9 32/3/9 +f 33/2/4 27/7/4 29/3/4 +f 32/5/5 6/8/5 13/6/5 +f 5/2/6 4/7/6 35/3/6 +f 34/2/5 13/7/5 21/3/5 +f 41/3/6 24/1/6 35/7/6 +f 27/6/5 37/4/5 28/8/5 +f 7/2/6 51/7/6 33/3/6 +f 10/2/10 12/7/10 37/3/10 +f 31/2/6 16/7/6 15/3/6 +f 35/2/11 58/7/11 42/3/11 +f 10/3/6 39/1/6 30/7/6 +f 16/2/2 56/7/2 44/3/2 +f 44/5/5 56/8/5 45/6/5 +f 57/6/5 18/4/5 45/8/5 +f 46/5/5 54/8/5 12/6/5 +f 48/5/4 62/8/4 49/6/4 +f 15/2/12 47/7/12 50/3/12 +f 30/2/13 59/7/13 48/3/13 +f 51/2/14 53/7/14 52/3/14 +f 17/2/15 18/7/15 46/3/15 +f 9/6/5 28/4/5 22/8/5 +f 25/3/6 30/1/6 17/7/6 +f 24/2/16 22/7/16 14/3/16 +f 28/3/5 38/1/5 21/7/5 +f 24/2/6 41/7/6 51/3/6 +f 41/2/17 42/7/17 53/3/17 +f 18/5/5 57/8/5 54/6/5 +f 59/3/6 52/1/6 48/7/6 +f 23/2/18 48/7/18 47/3/18 +f 31/2/19 32/7/19 56/3/19 +f 34/6/5 45/4/5 32/8/5 +f 36/3/5 57/1/5 34/7/5 +f 54/5/5 38/8/5 37/6/5 +f 39/2/20 37/7/20 27/3/20 +f 40/3/6 35/1/6 31/7/6 +f 51/2/6 43/7/6 39/3/6 +f 55/3/6 42/1/6 50/7/6 +f 40/2/21 50/7/21 58/3/21 +f 43/2/22 52/7/22 59/3/22 +f 57/2/5 36/7/5 38/3/5 +f 42/2/6 55/7/6 52/3/6 +f 61/2/6 49/7/6 62/3/6 +f 50/5/23 61/8/23 60/6/23 +f 47/5/4 49/8/4 61/6/23 +f 55/5/23 60/8/23 62/6/4 +f 64/5/1 67/8/1 65/6/1 +f 66/5/2 69/8/2 67/6/2 +f 68/5/3 70/8/3 69/6/3 +f 63/5/4 65/8/4 70/6/4 +f 67/5/5 69/8/5 70/6/5 +f 66/5/6 64/8/6 63/6/6 +f 72/10/1 75/12/1 73/11/1 +f 74/10/2 93/12/2 75/11/2 +f 77/5/3 80/8/3 78/6/3 +f 79/10/4 86/12/4 80/11/4 +f 75/10/5 93/12/5 81/11/5 +f 94/11/6 82/9/6 84/12/6 +f 85/10/1 88/12/1 86/11/1 +f 76/5/3 78/8/3 81/6/3 +f 80/11/5 86/9/5 78/12/5 +f 90/10/6 92/12/6 91/11/6 +f 71/10/1 73/12/1 88/11/1 +f 73/10/5 81/12/5 78/11/5 +f 82/10/6 94/12/6 92/11/6 +f 87/5/3 81/8/3 93/6/3 +f 84/10/1 96/12/1 95/11/1 +f 83/10/2 102/12/2 96/11/2 +f 89/5/3 98/8/3 97/6/3 +f 91/10/4 99/12/4 98/11/4 +f 92/10/1 101/12/1 99/11/1 +f 90/5/3 97/8/3 100/6/3 +f 94/10/1 95/12/1 101/11/1 +f 82/5/3 100/8/3 102/6/3 +f 96/10/1 72/12/1 71/11/1 +f 102/10/2 74/12/2 72/11/2 +f 98/5/3 77/8/3 76/6/3 +f 99/10/4 79/12/4 77/11/4 +f 101/10/1 85/12/1 79/11/1 +f 97/5/3 76/8/3 87/6/3 +f 71/14/24 106/31/24 103/15/24 +f 100/5/3 87/8/3 74/6/3 +f 103/17/1 106/32/1 105/18/1 +f 95/14/25 103/31/25 104/15/25 +f 85/14/26 105/31/26 106/15/26 +f 101/14/27 104/31/27 105/15/27 +f 108/20/1 111/33/1 109/21/1 +f 110/20/2 113/33/2 111/21/2 +f 112/20/3 114/33/3 113/21/3 +f 107/20/4 109/33/4 114/21/4 +f 111/20/5 113/33/5 114/21/5 +f 110/20/6 108/33/6 107/21/6 +f 116/10/28 119/12/28 117/11/28 +f 118/10/29 142/12/29 119/11/29 +f 121/5/30 124/8/30 122/6/30 +f 123/10/31 147/12/31 124/11/31 +f 119/10/5 142/12/5 125/11/5 +f 127/10/6 129/12/6 128/11/6 +f 129/10/28 131/12/28 130/11/28 +f 127/23/29 137/34/29 131/24/29 +f 133/5/30 136/8/30 134/6/30 +f 135/10/31 138/12/31 136/11/31 +f 131/10/28 116/12/28 115/11/28 +f 137/10/29 118/12/29 116/11/29 +f 136/5/30 121/8/30 120/6/30 +f 138/10/31 123/12/31 121/11/31 +f 115/10/28 117/12/28 140/11/28 +f 141/5/30 125/8/30 142/6/30 +f 117/10/5 125/12/5 122/11/5 +f 126/10/6 128/12/6 143/11/6 +f 128/10/28 130/12/28 144/11/28 +f 126/5/30 146/8/30 137/6/30 +f 115/10/31 151/12/31 145/11/31 +f 146/5/30 141/8/30 118/6/30 +f 120/5/30 122/8/30 125/6/30 +f 132/5/30 134/8/30 146/6/30 +f 134/5/30 120/8/30 141/6/30 +f 139/10/28 140/12/28 147/11/28 +f 140/10/5 122/12/5 124/11/5 +f 132/10/6 143/12/6 135/11/6 +f 143/10/28 144/12/28 138/11/28 +f 144/10/28 139/12/28 123/11/28 +f 149/5/31 152/8/31 150/6/31 +f 130/10/5 145/12/5 149/11/5 +f 139/10/6 148/12/6 151/11/6 +f 144/10/29 149/12/29 148/11/29 +f 153/26/28 154/35/28 150/27/28 +f 151/5/29 154/8/29 153/6/29 +f 145/5/6 153/8/6 152/6/6 +f 148/5/5 150/8/5 154/6/5 +f 156/5/1 159/8/1 157/6/1 +f 158/5/2 161/8/2 159/6/2 +f 160/5/3 162/8/3 161/6/3 +f 155/5/4 157/8/4 162/6/4 +f 159/5/5 161/8/5 162/6/5 +f 158/5/6 156/8/6 155/6/6 +f 164/2/1 206/7/1 165/3/1 +f 167/2/4 182/7/4 168/3/4 +f 170/2/3 191/7/3 171/3/3 +f 173/2/2 188/7/2 174/3/2 +f 168/5/6 182/8/6 176/6/6 +f 178/2/5 164/7/5 163/3/5 +f 163/2/15 165/7/15 180/3/15 +f 181/2/3 176/7/3 182/3/3 +f 175/5/6 176/8/6 184/6/6 +f 177/2/5 163/7/5 179/3/5 +f 169/2/16 171/7/16 184/3/16 +f 187/2/1 208/7/1 188/3/1 +f 190/5/6 171/8/6 191/6/6 +f 192/2/5 187/7/5 173/3/5 +f 166/2/32 168/7/32 194/3/32 +f 195/2/2 189/7/2 191/3/2 +f 194/5/6 168/8/6 175/6/6 +f 167/2/5 166/7/5 197/3/5 +f 196/2/6 175/7/6 183/3/6 +f 203/3/5 186/1/5 197/7/5 +f 189/6/6 199/4/6 190/8/6 +f 169/2/5 213/7/5 195/3/5 +f 172/2/33 174/7/33 199/3/33 +f 193/2/5 178/7/5 177/3/5 +f 197/2/17 220/7/17 204/3/17 +f 172/3/5 201/1/5 192/7/5 +f 178/2/4 218/7/4 206/3/4 +f 206/5/6 218/8/6 207/6/6 +f 219/6/6 180/4/6 207/8/6 +f 208/5/6 216/8/6 174/6/6 +f 210/5/4 224/8/4 211/6/4 +f 177/2/34 209/7/34 212/3/34 +f 192/2/18 221/7/18 210/3/18 +f 213/2/35 215/7/35 214/3/35 +f 179/2/7 180/7/7 208/3/7 +f 171/6/6 190/4/6 184/8/6 +f 187/3/5 192/1/5 179/7/5 +f 186/2/8 184/7/8 176/3/8 +f 190/3/6 200/1/6 183/7/6 +f 186/2/5 203/7/5 213/3/5 +f 203/2/11 204/7/11 215/3/11 +f 180/5/6 219/8/6 216/6/6 +f 221/3/5 214/1/5 210/7/5 +f 185/2/13 210/7/13 209/3/13 +f 193/2/36 194/7/36 218/3/36 +f 196/6/6 207/4/6 194/8/6 +f 198/6/6 219/4/6 196/8/6 +f 216/5/6 200/8/6 199/6/6 +f 201/2/37 199/7/37 189/3/37 +f 202/3/5 197/1/5 193/7/5 +f 213/2/5 205/7/5 201/3/5 +f 217/3/5 204/1/5 212/7/5 +f 202/2/38 212/7/38 220/3/38 +f 205/2/39 214/7/39 221/3/39 +f 219/2/6 198/7/6 200/3/6 +f 204/2/5 217/7/5 214/3/5 +f 223/2/5 211/7/5 224/3/5 +f 212/5/23 223/8/23 222/6/23 +f 209/5/4 211/8/4 223/6/23 +f 217/5/23 222/8/23 224/6/4 +f 226/10/4 229/12/4 227/11/4 +f 228/10/1 247/12/1 229/11/1 +f 231/5/2 234/8/2 232/6/2 +f 233/10/3 240/12/3 234/11/3 +f 229/10/5 247/12/5 235/11/5 +f 248/11/6 236/9/6 238/12/6 +f 239/10/4 242/12/4 240/11/4 +f 230/5/2 232/8/2 235/6/2 +f 234/11/5 240/9/5 232/12/5 +f 244/10/6 246/12/6 245/11/6 +f 225/10/4 227/12/4 242/11/4 +f 227/10/5 235/12/5 232/11/5 +f 236/10/6 248/12/6 246/11/6 +f 241/5/2 235/8/2 247/6/2 +f 238/10/4 250/12/4 249/11/4 +f 237/10/1 256/12/1 250/11/1 +f 243/5/2 252/8/2 251/6/2 +f 245/10/3 253/12/3 252/11/3 +f 246/10/4 255/12/4 253/11/4 +f 244/5/2 251/8/2 254/6/2 +f 248/10/4 249/12/4 255/11/4 +f 236/5/2 254/8/2 256/6/2 +f 250/10/4 226/12/4 225/11/4 +f 256/10/1 228/12/1 226/11/1 +f 252/5/2 231/8/2 230/6/2 +f 253/10/3 233/12/3 231/11/3 +f 255/10/4 239/12/4 233/11/4 +f 251/5/2 230/8/2 241/6/2 +f 225/14/40 260/31/40 257/15/40 +f 254/5/2 241/8/2 228/6/2 +f 257/17/4 260/32/4 259/18/4 +f 249/14/41 257/31/41 258/15/41 +f 239/14/42 259/31/42 260/15/42 +f 255/14/43 258/31/43 259/15/43 +f 262/10/3 265/12/3 263/11/3 +f 264/10/4 283/12/4 265/11/4 +f 267/5/1 270/8/1 268/6/1 +f 269/10/2 276/12/2 270/11/2 +f 265/10/5 283/12/5 271/11/5 +f 284/11/6 272/9/6 274/12/6 +f 275/10/3 278/12/3 276/11/3 +f 266/5/1 268/8/1 271/6/1 +f 270/11/5 276/9/5 268/12/5 +f 280/10/6 282/12/6 281/11/6 +f 261/10/3 263/12/3 278/11/3 +f 263/10/5 271/12/5 268/11/5 +f 272/10/6 284/12/6 282/11/6 +f 277/5/1 271/8/1 283/6/1 +f 274/10/3 286/12/3 285/11/3 +f 273/10/4 292/12/4 286/11/4 +f 279/5/1 288/8/1 287/6/1 +f 281/10/2 289/12/2 288/11/2 +f 282/10/3 291/12/3 289/11/3 +f 280/5/1 287/8/1 290/6/1 +f 284/10/3 285/12/3 291/11/3 +f 272/5/1 290/8/1 292/6/1 +f 286/10/3 262/12/3 261/11/3 +f 292/10/4 264/12/4 262/11/4 +f 288/5/1 267/8/1 266/6/1 +f 289/10/2 269/12/2 267/11/2 +f 291/10/3 275/12/3 269/11/3 +f 287/5/1 266/8/1 277/6/1 +f 261/14/44 296/31/44 293/15/44 +f 290/5/1 277/8/1 264/6/1 +f 293/17/3 296/32/3 295/18/3 +f 285/14/45 293/31/45 294/15/45 +f 275/14/46 295/31/46 296/15/46 +f 291/14/47 294/31/47 295/15/47 +f 226/8/4 306/8/4 297/5/4 +f 299/29/3 301/36/3 300/30/3 +f 301/29/4 303/36/4 302/30/4 +f 303/29/1 305/36/1 304/30/1 +f 305/29/2 299/36/2 298/30/2 +f 305/29/6 303/36/6 301/30/6 +f 298/29/5 300/36/5 302/30/5 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.mtl new file mode 100644 index 00000000..0a34c9e2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.mtl @@ -0,0 +1,11 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/pod_flame + +newmtl None_spacePod.png +Ka 0.000000 0.000000 0.000000 +Kd 0.800000 0.800000 0.800000 +d 1.000000 +map_Kd galacticraftplanets:blocks/space_pod diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.obj new file mode 100644 index 00000000..fb1eb0c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.obj @@ -0,0 +1,3590 @@ +# Blender v2.78 (sub 0) OBJ File: 'podFlame.blend' +# www.blender.org +mtllib pod_flame.mtl +o Flame_Sphere +v 0.308348 0.922904 -1.550171 +v 0.302423 0.685997 -1.520385 +v 0.284877 0.458195 -1.432171 +v 0.256382 0.248252 -1.288920 +v 0.218035 0.064235 -1.096136 +v 0.171309 -0.086784 -0.861229 +v 0.118000 -0.199002 -0.593224 +v 0.060156 -0.268105 -0.302423 +v 0.604847 0.922904 -1.460229 +v 0.593225 0.685997 -1.432171 +v 0.558806 0.458195 -1.349076 +v 0.502912 0.248252 -1.214136 +v 0.427691 0.064235 -1.032538 +v 0.336035 -0.086784 -0.811260 +v 0.231465 -0.199002 -0.558805 +v 0.118000 -0.268105 -0.284876 +v 0.878102 0.922904 -1.314171 +v 0.861229 0.685997 -1.288920 +v 0.811260 0.458195 -1.214136 +v 0.730115 0.248252 -1.092693 +v 0.620912 0.064235 -0.929259 +v 0.487847 -0.086784 -0.730114 +v 0.336035 -0.199002 -0.502911 +v 0.171309 -0.268105 -0.256382 +v 1.117611 0.922904 -1.117611 +v 1.096137 0.685997 -1.096136 +v 1.032538 0.458195 -1.032538 +v 0.929260 0.248252 -0.929259 +v 0.790271 0.064235 -0.790270 +v 0.620912 -0.086784 -0.620911 +v 0.427691 -0.199002 -0.427691 +v 0.218035 -0.268105 -0.218035 +v 1.314172 0.922904 -0.878101 +v 1.288920 0.685997 -0.861228 +v 1.214136 0.458195 -0.811260 +v 1.092694 0.248252 -0.730114 +v 0.929260 0.064235 -0.620911 +v 0.730115 -0.086784 -0.487847 +v 0.502912 -0.199002 -0.336035 +v 0.256382 -0.268105 -0.171309 +v 0.000000 -0.291438 0.000001 +v 1.460229 0.922904 -0.604846 +v 1.432171 0.685997 -0.593224 +v 1.349076 0.458195 -0.558805 +v 1.214136 0.248252 -0.502911 +v 1.032538 0.064235 -0.427691 +v 0.811260 -0.086784 -0.336034 +v 0.558806 -0.199002 -0.231464 +v 0.284877 -0.268105 -0.117999 +v 1.550171 0.922904 -0.308348 +v 1.520385 0.685997 -0.302423 +v 1.432171 0.458195 -0.284876 +v 1.288920 0.248252 -0.256382 +v 1.096137 0.064235 -0.218035 +v 0.861229 -0.086784 -0.171309 +v 0.593225 -0.199002 -0.117999 +v 0.302423 -0.268105 -0.060155 +v 1.580541 0.922904 0.000001 +v 1.550171 0.685997 0.000001 +v 1.460229 0.458195 0.000000 +v 1.314172 0.248252 0.000001 +v 1.117611 0.064235 0.000001 +v 0.878101 -0.086784 0.000001 +v 0.604847 -0.199002 0.000000 +v 0.308348 -0.268105 0.000000 +v 1.550171 0.922904 0.308349 +v 1.520385 0.685997 0.302424 +v 1.432171 0.458195 0.284877 +v 1.288920 0.248252 0.256383 +v 1.096137 0.064235 0.218036 +v 0.861229 -0.086784 0.171310 +v 0.593225 -0.199002 0.118000 +v 0.302423 -0.268105 0.060156 +v 1.460229 0.922904 0.604847 +v 1.432171 0.685997 0.593225 +v 1.349076 0.458195 0.558806 +v 1.214136 0.248252 0.502912 +v 1.032538 0.064235 0.427692 +v 0.811260 -0.086784 0.336035 +v 0.558806 -0.199002 0.231465 +v 0.284877 -0.268105 0.118000 +v 1.314172 0.922904 0.878102 +v 1.288920 0.685997 0.861229 +v 1.214136 0.458195 0.811260 +v 1.092694 0.248252 0.730115 +v 0.929260 0.064235 0.620912 +v 0.730115 -0.086784 0.487848 +v 0.502912 -0.199002 0.336035 +v 0.256382 -0.268105 0.171310 +v 1.117611 0.922904 1.117612 +v 1.096136 0.685997 1.096137 +v 1.032538 0.458195 1.032538 +v 0.929259 0.248252 0.929260 +v 0.790270 0.064235 0.790271 +v 0.620911 -0.086784 0.620912 +v 0.427691 -0.199002 0.427692 +v 0.218035 -0.268105 0.218036 +v 0.878101 0.922904 1.314172 +v 0.861229 0.685997 1.288920 +v 0.811260 0.458195 1.214137 +v 0.730114 0.248252 1.092694 +v 0.620911 0.064235 0.929260 +v 0.487847 -0.086784 0.730115 +v 0.336035 -0.199002 0.502912 +v 0.171309 -0.268105 0.256383 +v 0.604847 0.922904 1.460230 +v 0.593225 0.685997 1.432171 +v 0.558806 0.458195 1.349076 +v 0.502912 0.248252 1.214137 +v 0.427691 0.064235 1.032538 +v 0.336035 -0.086784 0.811260 +v 0.231465 -0.199002 0.558806 +v 0.118000 -0.268105 0.284877 +v 0.308348 0.922904 1.550172 +v 0.302423 0.685997 1.520385 +v 0.284877 0.458195 1.432172 +v 0.256382 0.248252 1.288920 +v 0.218035 0.064235 1.096137 +v 0.171309 -0.086784 0.861229 +v 0.118000 -0.199002 0.593225 +v 0.060156 -0.268105 0.302424 +v -0.000000 0.922904 1.580541 +v -0.000000 0.685997 1.550171 +v 0.000000 0.458195 1.460230 +v -0.000000 0.248252 1.314172 +v -0.000000 0.064235 1.117611 +v -0.000000 -0.086784 0.878102 +v 0.000000 -0.199002 0.604847 +v 0.000000 -0.268105 0.308349 +v -0.308348 0.922904 1.550171 +v -0.302423 0.685997 1.520385 +v -0.284876 0.458195 1.432172 +v -0.256382 0.248252 1.288920 +v -0.218035 0.064235 1.096137 +v -0.171309 -0.086784 0.861229 +v -0.118000 -0.199002 0.593225 +v -0.060156 -0.268105 0.302424 +v -0.604847 0.922904 1.460230 +v -0.593225 0.685997 1.432171 +v -0.558805 0.458195 1.349076 +v -0.502912 0.248252 1.214136 +v -0.427691 0.064235 1.032538 +v -0.336035 -0.086784 0.811260 +v -0.231465 -0.199002 0.558806 +v -0.118000 -0.268105 0.284877 +v -0.878101 0.922904 1.314172 +v -0.861229 0.685997 1.288920 +v -0.811260 0.458195 1.214137 +v -0.730114 0.248252 1.092694 +v -0.620911 0.064235 0.929260 +v -0.487847 -0.086784 0.730115 +v -0.336035 -0.199002 0.502912 +v -0.171309 -0.268105 0.256383 +v -1.117611 0.922904 1.117611 +v -1.096136 0.685997 1.096136 +v -1.032538 0.458195 1.032538 +v -0.929259 0.248252 0.929259 +v -0.790270 0.064235 0.790271 +v -0.620911 -0.086784 0.620912 +v -0.427691 -0.199002 0.427692 +v -0.218035 -0.268105 0.218036 +v -1.314172 0.922904 0.878101 +v -1.288920 0.685997 0.861229 +v -1.214136 0.458195 0.811260 +v -1.092693 0.248252 0.730115 +v -0.929259 0.064235 0.620912 +v -0.730114 -0.086784 0.487847 +v -0.502912 -0.199002 0.336035 +v -0.256382 -0.268105 0.171310 +v -1.460229 0.922904 0.604847 +v -1.432171 0.685997 0.593225 +v -1.349076 0.458195 0.558806 +v -1.214136 0.248252 0.502912 +v -1.032538 0.064235 0.427692 +v -0.811260 -0.086784 0.336035 +v -0.558805 -0.199002 0.231465 +v -0.284876 -0.268105 0.118000 +v -1.550171 0.922904 0.308348 +v -1.520384 0.685997 0.302423 +v -1.432171 0.458195 0.284877 +v -1.288919 0.248252 0.256382 +v -1.096136 0.064235 0.218035 +v -0.861229 -0.086784 0.171309 +v -0.593224 -0.199002 0.118000 +v -0.302423 -0.268105 0.060156 +v -1.580540 0.922904 0.000000 +v -1.550170 0.685997 0.000000 +v -1.460229 0.458195 0.000001 +v -1.314171 0.248252 0.000000 +v -1.117611 0.064235 0.000000 +v -0.878101 -0.086784 0.000000 +v -0.604846 -0.199002 0.000000 +v -0.308348 -0.268105 0.000000 +v -1.550170 0.922904 -0.308348 +v -1.520384 0.685997 -0.302423 +v -1.432171 0.458195 -0.284876 +v -1.288919 0.248252 -0.256382 +v -1.096136 0.064235 -0.218035 +v -0.861229 -0.086784 -0.171309 +v -0.593224 -0.199002 -0.117999 +v -0.302423 -0.268105 -0.060155 +v -1.460229 0.922904 -0.604846 +v -1.432170 0.685997 -0.593224 +v -1.349076 0.458195 -0.558805 +v -1.214135 0.248252 -0.502911 +v -1.032538 0.064235 -0.427691 +v -0.811259 -0.086784 -0.336034 +v -0.558805 -0.199002 -0.231464 +v -0.284876 -0.268105 -0.117999 +v -1.314171 0.922904 -0.878101 +v -1.288919 0.685997 -0.861228 +v -1.214136 0.458195 -0.811259 +v -1.092693 0.248252 -0.730114 +v -0.929259 0.064235 -0.620911 +v -0.730114 -0.086784 -0.487846 +v -0.502911 -0.199002 -0.336034 +v -0.256382 -0.268105 -0.171308 +v -0.003349 3.695691 -2.069118 +v -0.406524 3.692196 -2.029409 +v -0.794205 3.692196 -1.911808 +v -1.120816 3.692196 -1.696060 +v -1.117610 0.922904 -1.117610 +v -1.096135 0.685997 -1.096135 +v -1.032538 0.458195 -1.032537 +v -0.929259 0.248252 -0.929259 +v -0.790270 0.064235 -0.790270 +v -0.620911 -0.086784 -0.620911 +v -0.427691 -0.199002 -0.427691 +v -0.218035 -0.268105 -0.218034 +v -1.530209 3.692196 -1.495382 +v -1.696897 3.692196 -1.119979 +v -1.912646 3.692196 -0.793369 +v -2.030248 3.692196 -0.405687 +v -2.069957 3.692196 -0.002512 +v -2.030248 3.692196 0.400663 +v -1.912646 3.692196 0.788344 +v -0.878101 0.922904 -1.314171 +v -0.861228 0.685997 -1.288919 +v -0.811260 0.458195 -1.214135 +v -0.730114 0.248252 -1.092693 +v -0.620911 0.064235 -0.929259 +v -0.487847 -0.086784 -0.730114 +v -0.336035 -0.199002 -0.502911 +v -0.171309 -0.268105 -0.256382 +v -1.696898 3.692196 1.200097 +v -1.513215 3.692196 1.524347 +v -1.120817 3.692196 1.776179 +v -0.794207 3.692196 1.906784 +v -0.406525 3.692196 2.024386 +v -0.003350 3.692196 2.064095 +v 0.399825 3.692196 2.024386 +v -0.604846 0.922904 -1.460228 +v -0.593224 0.685997 -1.432170 +v -0.558805 0.458195 -1.349075 +v -0.502911 0.248252 -1.214135 +v -0.427691 0.064235 -1.032537 +v -0.336035 -0.086784 -0.811259 +v -0.231465 -0.199002 -0.558805 +v -0.118000 -0.268105 -0.284876 +v 0.787506 3.692196 1.906784 +v 1.151832 3.692196 1.727132 +v 1.506514 3.692196 1.490358 +v 1.761164 3.692196 1.117799 +v 1.905946 3.692196 0.788345 +v 2.023548 3.692196 0.400663 +v 2.063258 3.692196 -0.002512 +v -0.308348 0.922904 -1.550170 +v -0.302423 0.685997 -1.520383 +v -0.284876 0.458195 -1.432170 +v -0.256382 0.248252 -1.288919 +v -0.218035 0.064235 -1.096136 +v -0.171309 -0.086784 -0.861228 +v -0.118000 -0.199002 -0.593224 +v -0.060156 -0.268105 -0.302423 +v 2.023548 3.692196 -0.405687 +v 1.905946 3.692196 -0.793368 +v 1.775341 3.692196 -1.119979 +v 1.523510 3.692196 -1.529371 +v 1.199260 3.692196 -1.696060 +v 0.787507 3.692196 -1.911809 +v 0.399825 3.692196 -2.029411 +v 0.000000 0.922904 -1.580539 +v 0.000000 0.685997 -1.550169 +v 0.000000 0.458195 -1.460228 +v 0.000000 0.248252 -1.314170 +v 0.000000 0.064235 -1.117610 +v 0.000000 -0.086784 -0.878100 +v 0.000000 -0.199002 -0.604846 +v 0.000000 -0.268105 -0.308348 +v -0.008589 8.102575 -3.315125 +v -0.654081 8.096979 -3.251549 +v -1.274767 8.096979 -3.063267 +v -1.797677 8.096979 -2.717849 +v -2.453124 8.096979 -2.396560 +v -2.719996 8.096979 -1.795530 +v -3.065414 8.096979 -1.272621 +v -3.253698 8.096979 -0.651935 +v -3.317273 8.096979 -0.006442 +v -3.253698 8.096979 0.639050 +v -3.065415 8.096979 1.259736 +v -2.719998 8.096979 1.918963 +v -2.425917 8.096979 2.438093 +v -1.797679 8.096979 2.841282 +v -1.274769 8.096979 3.050384 +v -0.654082 8.096979 3.238667 +v -0.008590 8.096979 3.302243 +v 0.636902 8.096979 3.238667 +v 1.257589 8.096979 3.050385 +v 1.840883 8.096979 2.762756 +v 2.408737 8.096979 2.383677 +v 2.816437 8.096979 1.787202 +v 3.048236 8.096979 1.259737 +v 3.236520 8.096979 0.639051 +v 3.300095 8.096979 -0.006442 +v 3.236520 8.096979 -0.651934 +v 3.048237 8.096979 -1.272621 +v 2.839135 8.096979 -1.795530 +v 2.435946 8.096979 -2.450977 +v 1.916816 8.096979 -2.717850 +v 1.257589 8.096979 -3.063268 +v 0.636903 8.096979 -3.251552 +vt 0.8510 0.0230 +vt 0.8380 0.0110 +vt 0.8581 0.0113 +vt 0.9031 0.0052 +vt 0.8421 0.1722 +vt 0.8164 0.1407 +vt 0.8429 0.1425 +vt 0.8176 0.1116 +vt 0.8438 0.1134 +vt 0.8190 0.0843 +vt 0.8448 0.0858 +vt 0.8208 0.0597 +vt 0.8461 0.0610 +vt 0.8234 0.0387 +vt 0.8479 0.0398 +vt 0.8277 0.0223 +vt 0.8042 0.0214 +vt 0.8176 0.0105 +vt 0.8152 0.1703 +vt 0.7899 0.1383 +vt 0.7914 0.1094 +vt 0.7932 0.0823 +vt 0.7954 0.0580 +vt 0.7986 0.0374 +vt 0.7651 0.1067 +vt 0.7672 0.0799 +vt 0.7698 0.0559 +vt 0.7736 0.0358 +vt 0.7803 0.0203 +vt 0.7968 0.0099 +vt 0.7884 0.1679 +vt 0.7633 0.1355 +vt 0.7753 0.0093 +vt 0.7617 0.1650 +vt 0.7368 0.1322 +vt 0.7388 0.1037 +vt 0.7410 0.0771 +vt 0.7440 0.0536 +vt 0.7483 0.0340 +vt 0.7559 0.0190 +vt 0.7123 0.1005 +vt 0.7147 0.0742 +vt 0.7179 0.0511 +vt 0.7225 0.0320 +vt 0.7309 0.0177 +vt 0.7530 0.0086 +vt 0.7350 0.1617 +vt 0.7102 0.1288 +vt 0.7297 0.0079 +vt 0.6816 0.1546 +vt 0.6835 0.1253 +vt 0.6857 0.0971 +vt 0.6881 0.0712 +vt 0.6914 0.0486 +vt 0.6963 0.0300 +vt 0.7052 0.0163 +vt 0.6646 0.0460 +vt 0.6695 0.0280 +vt 0.6787 0.0149 +vt 0.7050 0.0072 +vt 0.6568 0.1218 +vt 0.6589 0.0938 +vt 0.6613 0.0683 +vt 0.6786 0.0066 +vt 0.6282 0.1476 +vt 0.6300 0.1184 +vt 0.6319 0.0907 +vt 0.6342 0.0654 +vt 0.6373 0.0436 +vt 0.6421 0.0261 +vt 0.6511 0.0136 +vt 0.6097 0.0415 +vt 0.6140 0.0244 +vt 0.6225 0.0124 +vt 0.6499 0.0060 +vt 0.6030 0.1154 +vt 0.6048 0.0878 +vt 0.6069 0.0629 +vt 0.6185 0.0054 +vt 0.5747 0.1419 +vt 0.5760 0.1128 +vt 0.5775 0.0854 +vt 0.5792 0.0607 +vt 0.5816 0.0396 +vt 0.5854 0.0230 +vt 0.5929 0.0114 +vt 0.5532 0.0381 +vt 0.5562 0.0218 +vt 0.5621 0.0106 +vt 0.5839 0.0050 +vt 0.5489 0.1107 +vt 0.5500 0.0834 +vt 0.5514 0.0589 +vt 0.5224 0.0820 +vt 0.5233 0.0576 +vt 0.5245 0.0370 +vt 0.5265 0.0209 +vt 0.5305 0.0100 +vt 0.5459 0.0047 +vt 0.5478 0.1397 +vt 0.5216 0.1092 +vt 0.4982 0.0097 +vt 0.5052 0.0046 +vt 0.5210 0.1382 +vt 0.4944 0.1084 +vt 0.4947 0.0812 +vt 0.4951 0.0569 +vt 0.4956 0.0364 +vt 0.4965 0.0204 +vt 0.4669 0.0810 +vt 0.4668 0.0567 +vt 0.4666 0.0363 +vt 0.4663 0.0203 +vt 0.4656 0.0096 +vt 0.4631 0.0045 +vt 0.4941 0.1373 +vt 0.4671 0.1082 +vt 0.4332 0.0098 +vt 0.4215 0.0046 +vt 0.0457 0.0052 +vt 0.4672 0.1372 +vt 0.4398 0.1087 +vt 0.4392 0.0815 +vt 0.4385 0.0572 +vt 0.4376 0.0366 +vt 0.4362 0.0206 +vt 0.4116 0.0827 +vt 0.4104 0.0582 +vt 0.4088 0.0375 +vt 0.4063 0.0213 +vt 0.4012 0.0103 +vt 0.3821 0.0049 +vt 0.4403 0.1377 +vt 0.4125 0.1099 +vt 0.3459 0.0052 +vt 0.4134 0.1389 +vt 0.3853 0.1118 +vt 0.3840 0.0844 +vt 0.3824 0.0598 +vt 0.3803 0.0388 +vt 0.3769 0.0224 +vt 0.3700 0.0110 +vt 0.3566 0.0866 +vt 0.3547 0.0618 +vt 0.3520 0.0405 +vt 0.3479 0.0237 +vt 0.3398 0.0119 +vt 0.3130 0.0057 +vt 0.3865 0.1408 +vt 0.3582 0.1141 +vt 0.2831 0.0063 +vt 0.3330 0.1461 +vt 0.3313 0.1170 +vt 0.3294 0.0893 +vt 0.3272 0.0642 +vt 0.3242 0.0426 +vt 0.3196 0.0253 +vt 0.3108 0.0131 +vt 0.2968 0.0449 +vt 0.2919 0.0271 +vt 0.2827 0.0143 +vt 0.2557 0.0069 +vt 0.3044 0.1202 +vt 0.3024 0.0923 +vt 0.3000 0.0669 +vt 0.2303 0.0076 +vt 0.3062 0.1494 +vt 0.2776 0.1236 +vt 0.2755 0.0956 +vt 0.2730 0.0698 +vt 0.2697 0.0474 +vt 0.2648 0.0291 +vt 0.2557 0.0157 +vt 0.2383 0.0311 +vt 0.2296 0.0170 +vt 0.2064 0.0083 +vt 0.2529 0.1565 +vt 0.2509 0.1272 +vt 0.2488 0.0989 +vt 0.2463 0.0728 +vt 0.2431 0.0499 +vt 0.2243 0.1307 +vt 0.2223 0.1022 +vt 0.2199 0.0758 +vt 0.2168 0.0525 +vt 0.2124 0.0331 +vt 0.2043 0.0184 +vt 0.1837 0.0090 +vt 0.1868 0.0350 +vt 0.1797 0.0197 +vt 0.1618 0.0097 +vt 0.1995 0.1635 +vt 0.1977 0.1340 +vt 0.1959 0.1053 +vt 0.1937 0.0786 +vt 0.1909 0.0549 +vt 0.1695 0.1082 +vt 0.1676 0.0812 +vt 0.1652 0.0570 +vt 0.1617 0.0367 +vt 0.1556 0.0209 +vt 0.1407 0.0103 +vt 0.1727 0.1666 +vt 0.1712 0.1370 +vt 0.1319 0.0219 +vt 0.1201 0.0108 +vt 0.1460 0.1692 +vt 0.1447 0.1396 +vt 0.1433 0.1107 +vt 0.1417 0.0834 +vt 0.1397 0.0589 +vt 0.1368 0.0382 +vt 0.1171 0.1126 +vt 0.1159 0.0852 +vt 0.1144 0.0604 +vt 0.1122 0.0393 +vt 0.1085 0.0227 +vt 0.0999 0.0112 +vt 0.1191 0.1714 +vt 0.1181 0.1417 +vt 0.0854 0.0233 +vt 0.0799 0.0115 +vt 0.0916 0.1432 +vt 0.0909 0.1141 +vt 0.0902 0.0865 +vt 0.0892 0.0615 +vt 0.0878 0.0402 +vt 0.0648 0.1149 +vt 0.0645 0.0872 +vt 0.0923 0.1729 +vt 0.0693 0.5806 +vt 0.0654 0.1738 +vt 0.0640 0.0621 +vt 0.6783 0.5649 +vt 0.7083 0.1582 +vt 0.0634 0.0407 +vt 0.7660 0.5750 +vt 0.0624 0.0236 +vt 0.4908 0.5444 +vt 0.0601 0.0117 +vt 0.2528 0.5672 +vt 0.2253 0.5706 +vt 0.4457 0.5449 +vt 0.4231 0.5461 +vt 0.0651 0.1441 +vt 0.1368 0.5782 +vt 0.3771 0.5504 +vt 0.3566 0.5527 +vt 0.9199 0.0236 +vt 0.8978 0.0117 +vt 0.9175 0.0117 +vt 0.5390 0.5469 +vt 0.8609 0.5805 +vt 0.8282 0.5796 +vt 0.9225 0.1441 +vt 0.8959 0.1739 +vt 0.8960 0.1443 +vt 0.7327 0.5717 +vt 0.8961 0.1150 +vt 0.9222 0.1149 +vt 0.6549 0.1510 +vt 0.6062 0.5548 +vt 0.9219 0.0872 +vt 0.8962 0.0873 +vt 0.2796 0.1529 +vt 0.2793 0.5637 +vt 0.8964 0.0622 +vt 0.9215 0.0621 +vt 0.4683 0.5443 +vt 0.8966 0.0408 +vt 0.9209 0.0407 +vt 0.1966 0.5737 +vt 0.8969 0.0237 +vt 0.5825 0.5517 +vt 0.6015 0.1445 +vt 0.9267 0.5806 +vt 0.8942 0.5811 +vt 0.8712 0.0619 +vt 0.6557 0.5617 +vt 0.8723 0.0405 +vt 0.4002 0.5480 +vt 0.8740 0.0235 +vt 0.1047 0.5805 +vt 0.8780 0.0116 +vt 0.3294 0.5562 +vt 0.5142 0.5449 +vt 0.8690 0.1734 +vt 0.8694 0.1437 +vt 0.2262 0.1601 +vt 0.8700 0.1145 +vt 0.8705 0.0869 +vt 0.6306 0.5582 +vt 0.7965 0.5774 +vt 0.7098 0.5691 +vt 0.5591 0.5490 +vt 0.1667 0.5764 +vt 0.3597 0.1432 +vt 0.3083 0.5595 +vt 0.4048 0.9721 +vt 0.3898 0.9734 +vt 0.6041 0.9788 +vt 0.7192 0.9882 +vt 0.2945 0.9842 +vt 0.2712 0.9860 +vt 0.5209 0.9700 +vt 0.5033 0.9688 +vt 0.4213 0.9706 +vt 0.6213 0.9807 +vt 0.8098 0.9901 +vt 0.7573 0.9895 +vt 0.3154 0.9821 +vt 0.5352 0.9712 +vt 0.4377 0.9695 +vt 0.6620 0.9848 +vt 0.6466 0.9833 +vt 0.3348 0.9800 +vt 0.9594 0.9901 +vt 0.8814 0.9904 +vt 0.4539 0.9688 +vt 0.6896 0.9868 +vt 0.5519 0.9728 +vt 0.1019 0.9901 +vt 0.4701 0.9684 +vt 0.3555 0.9775 +vt 0.5688 0.9747 +vt 0.2144 0.9887 +vt 0.1632 0.9901 +vt 0.3696 0.9755 +vt 0.5862 0.9767 +vt 0.2440 0.9876 +vt 0.4863 0.9685 +vt 0.9228 0.1738 +vn 0.0223 -0.9737 -0.2269 +vn 0.0074 -0.9971 -0.0755 +vn 0.0972 -0.1266 -0.9872 +vn 0.0912 -0.3657 -0.9262 +vn 0.0806 -0.5692 -0.8182 +vn 0.0672 -0.7284 -0.6819 +vn 0.0525 -0.8447 -0.5326 +vn 0.0374 -0.9244 -0.3796 +vn 0.1107 -0.9244 -0.3650 +vn 0.0662 -0.9737 -0.2182 +vn 0.0220 -0.9971 -0.0726 +vn 0.2880 -0.1265 -0.9492 +vn 0.2702 -0.3657 -0.8907 +vn 0.2387 -0.5692 -0.7868 +vn 0.1989 -0.7284 -0.6557 +vn 0.1554 -0.8447 -0.5122 +vn 0.3876 -0.5692 -0.7251 +vn 0.3230 -0.7284 -0.6043 +vn 0.2523 -0.8447 -0.4720 +vn 0.1798 -0.9244 -0.3364 +vn 0.1075 -0.9737 -0.2011 +vn 0.0357 -0.9971 -0.0669 +vn 0.4676 -0.1266 -0.8748 +vn 0.4387 -0.3657 -0.8208 +vn 0.1447 -0.9737 -0.1763 +vn 0.0481 -0.9971 -0.0586 +vn 0.6293 -0.1266 -0.7668 +vn 0.5904 -0.3657 -0.7195 +vn 0.5216 -0.5692 -0.6356 +vn 0.4347 -0.7284 -0.5297 +vn 0.3395 -0.8447 -0.4137 +vn 0.2420 -0.9244 -0.2949 +vn 0.6356 -0.5692 -0.5216 +vn 0.5297 -0.7284 -0.4347 +vn 0.4137 -0.8447 -0.3395 +vn 0.2949 -0.9244 -0.2420 +vn 0.1763 -0.9737 -0.1447 +vn 0.0586 -0.9971 -0.0481 +vn 0.7668 -0.1265 -0.6293 +vn 0.7195 -0.3657 -0.5904 +vn 0.2011 -0.9737 -0.1075 +vn 0.0669 -0.9971 -0.0357 +vn 0.8748 -0.1266 -0.4676 +vn 0.8208 -0.3657 -0.4387 +vn 0.7251 -0.5692 -0.3876 +vn 0.6043 -0.7284 -0.3230 +vn 0.4720 -0.8447 -0.2523 +vn 0.3364 -0.9244 -0.1798 +vn 0.6557 -0.7284 -0.1989 +vn 0.5122 -0.8447 -0.1554 +vn 0.3650 -0.9244 -0.1107 +vn 0.2182 -0.9737 -0.0662 +vn 0.0726 -0.9971 -0.0220 +vn 0.9492 -0.1265 -0.2880 +vn 0.8907 -0.3657 -0.2702 +vn 0.7868 -0.5692 -0.2387 +vn 0.0755 -0.9971 -0.0074 +vn 0.9872 -0.1266 -0.0972 +vn 0.9262 -0.3657 -0.0912 +vn 0.8182 -0.5692 -0.0806 +vn 0.6819 -0.7284 -0.0672 +vn 0.5326 -0.8447 -0.0525 +vn 0.3796 -0.9244 -0.0374 +vn 0.2269 -0.9737 -0.0224 +vn 0.6819 -0.7284 0.0672 +vn 0.5326 -0.8447 0.0525 +vn 0.3796 -0.9244 0.0374 +vn 0.2269 -0.9737 0.0224 +vn 0.0755 -0.9971 0.0074 +vn 0.9872 -0.1266 0.0972 +vn 0.9262 -0.3657 0.0912 +vn 0.8182 -0.5692 0.0806 +vn 0.0726 -0.9971 0.0220 +vn 0.9492 -0.1266 0.2880 +vn 0.8907 -0.3657 0.2702 +vn 0.7868 -0.5692 0.2387 +vn 0.6557 -0.7284 0.1989 +vn 0.5122 -0.8447 0.1554 +vn 0.3650 -0.9244 0.1107 +vn 0.2182 -0.9737 0.0662 +vn 0.4720 -0.8447 0.2523 +vn 0.3364 -0.9244 0.1798 +vn 0.2011 -0.9737 0.1075 +vn 0.0669 -0.9971 0.0357 +vn 0.8748 -0.1266 0.4676 +vn 0.8208 -0.3657 0.4387 +vn 0.7251 -0.5692 0.3876 +vn 0.6043 -0.7284 0.3230 +vn 0.7195 -0.3657 0.5904 +vn 0.6356 -0.5692 0.5216 +vn 0.5297 -0.7284 0.4347 +vn 0.4137 -0.8447 0.3395 +vn 0.2949 -0.9244 0.2420 +vn 0.1763 -0.9737 0.1447 +vn 0.0586 -0.9971 0.0481 +vn 0.7668 -0.1266 0.6293 +vn 0.2420 -0.9244 0.2949 +vn 0.1447 -0.9737 0.1763 +vn 0.0481 -0.9971 0.0586 +vn 0.6293 -0.1266 0.7668 +vn 0.5904 -0.3657 0.7195 +vn 0.5216 -0.5692 0.6356 +vn 0.4347 -0.7284 0.5297 +vn 0.3395 -0.8447 0.4137 +vn 0.4387 -0.3657 0.8208 +vn 0.3876 -0.5692 0.7251 +vn 0.3230 -0.7284 0.6043 +vn 0.2523 -0.8447 0.4720 +vn 0.1798 -0.9244 0.3364 +vn 0.1075 -0.9737 0.2011 +vn 0.0357 -0.9971 0.0669 +vn 0.4676 -0.1266 0.8748 +vn 0.1107 -0.9244 0.3650 +vn 0.0662 -0.9737 0.2182 +vn 0.0220 -0.9971 0.0726 +vn 0.2880 -0.1266 0.9492 +vn 0.2702 -0.3657 0.8907 +vn 0.2387 -0.5692 0.7868 +vn 0.1989 -0.7284 0.6557 +vn 0.1554 -0.8447 0.5122 +vn 0.0806 -0.5692 0.8182 +vn 0.0672 -0.7284 0.6819 +vn 0.0525 -0.8447 0.5326 +vn 0.0374 -0.9244 0.3796 +vn 0.0224 -0.9737 0.2269 +vn 0.0074 -0.9971 0.0755 +vn 0.0972 -0.1266 0.9872 +vn 0.0912 -0.3657 0.9262 +vn -0.0224 -0.9737 0.2269 +vn -0.0074 -0.9971 0.0755 +vn -0.0972 -0.1266 0.9872 +vn -0.0912 -0.3657 0.9262 +vn -0.0806 -0.5692 0.8182 +vn -0.0672 -0.7284 0.6819 +vn -0.0525 -0.8447 0.5326 +vn -0.0374 -0.9244 0.3796 +vn -0.2387 -0.5692 0.7868 +vn -0.1989 -0.7284 0.6557 +vn -0.1554 -0.8447 0.5122 +vn -0.1107 -0.9244 0.3650 +vn -0.0662 -0.9737 0.2182 +vn -0.0220 -0.9971 0.0726 +vn -0.2880 -0.1266 0.9492 +vn -0.2702 -0.3657 0.8907 +vn -0.1075 -0.9737 0.2011 +vn -0.0357 -0.9971 0.0669 +vn -0.4676 -0.1266 0.8748 +vn -0.4387 -0.3657 0.8208 +vn -0.3876 -0.5692 0.7251 +vn -0.3230 -0.7284 0.6043 +vn -0.2523 -0.8447 0.4720 +vn -0.1798 -0.9244 0.3364 +vn -0.4347 -0.7284 0.5297 +vn -0.3395 -0.8447 0.4137 +vn -0.2420 -0.9244 0.2949 +vn -0.1447 -0.9737 0.1763 +vn -0.0481 -0.9971 0.0586 +vn -0.6293 -0.1266 0.7668 +vn -0.5904 -0.3657 0.7195 +vn -0.5216 -0.5692 0.6356 +vn -0.0586 -0.9971 0.0481 +vn -0.7668 -0.1266 0.6293 +vn -0.7195 -0.3657 0.5904 +vn -0.6356 -0.5692 0.5216 +vn -0.5297 -0.7284 0.4347 +vn -0.4137 -0.8447 0.3395 +vn -0.2949 -0.9244 0.2420 +vn -0.1763 -0.9737 0.1447 +vn -0.4720 -0.8447 0.2523 +vn -0.3364 -0.9244 0.1798 +vn -0.2011 -0.9737 0.1075 +vn -0.0669 -0.9971 0.0357 +vn -0.8748 -0.1266 0.4676 +vn -0.8208 -0.3657 0.4387 +vn -0.7251 -0.5692 0.3876 +vn -0.6043 -0.7284 0.3230 +vn -0.9492 -0.1266 0.2880 +vn -0.8907 -0.3657 0.2702 +vn -0.7868 -0.5692 0.2387 +vn -0.6557 -0.7284 0.1989 +vn -0.5122 -0.8447 0.1554 +vn -0.3650 -0.9244 0.1107 +vn -0.2182 -0.9737 0.0662 +vn -0.0726 -0.9971 0.0220 +vn -0.5326 -0.8447 0.0525 +vn -0.3796 -0.9244 0.0374 +vn -0.2269 -0.9737 0.0224 +vn -0.0755 -0.9971 0.0074 +vn -0.9872 -0.1266 0.0972 +vn -0.9262 -0.3657 0.0912 +vn -0.8182 -0.5692 0.0806 +vn -0.6819 -0.7284 0.0672 +vn -0.9262 -0.3657 -0.0912 +vn -0.8182 -0.5692 -0.0806 +vn -0.6819 -0.7284 -0.0672 +vn -0.5326 -0.8447 -0.0525 +vn -0.3796 -0.9244 -0.0374 +vn -0.2269 -0.9737 -0.0224 +vn -0.0755 -0.9971 -0.0074 +vn -0.9872 -0.1266 -0.0972 +vn -0.3650 -0.9244 -0.1107 +vn -0.2182 -0.9737 -0.0662 +vn -0.0726 -0.9971 -0.0220 +vn -0.9492 -0.1266 -0.2880 +vn -0.8907 -0.3657 -0.2702 +vn -0.7868 -0.5692 -0.2387 +vn -0.6557 -0.7284 -0.1989 +vn -0.5122 -0.8447 -0.1554 +vn -0.8208 -0.3657 -0.4387 +vn -0.7251 -0.5692 -0.3876 +vn -0.6043 -0.7284 -0.3230 +vn -0.4720 -0.8447 -0.2523 +vn -0.3364 -0.9244 -0.1798 +vn -0.2011 -0.9737 -0.1075 +vn -0.0669 -0.9971 -0.0357 +vn -0.8748 -0.1266 -0.4676 +vn -0.2949 -0.9244 -0.2420 +vn -0.1763 -0.9737 -0.1447 +vn -0.0586 -0.9971 -0.0481 +vn -0.7668 -0.1266 -0.6293 +vn -0.7195 -0.3657 -0.5904 +vn -0.6356 -0.5692 -0.5216 +vn -0.5297 -0.7284 -0.4347 +vn -0.4137 -0.8447 -0.3395 +vn -0.5216 -0.5692 -0.6356 +vn -0.6262 -0.1601 -0.7630 +vn -0.4347 -0.7284 -0.5297 +vn 0.7602 -0.1811 -0.6239 +vn -0.3395 -0.8447 -0.4137 +vn 0.2859 -0.1726 -0.9426 +vn -0.2420 -0.9244 -0.2949 +vn 0.6246 -0.1752 0.7611 +vn -0.1447 -0.9737 -0.1763 +vn -0.9802 -0.1731 0.0965 +vn 0.0966 -0.1711 0.9805 +vn -0.0481 -0.9971 -0.0586 +vn -0.6293 -0.1266 -0.7668 +vn -0.8704 -0.1609 -0.4653 +vn -0.5904 -0.3657 -0.7195 +vn -0.3649 -0.1842 0.9126 +vn -0.1075 -0.9737 -0.2011 +vn 0.8675 -0.1802 0.4637 +vn -0.0951 -0.1729 -0.9803 +vn -0.0357 -0.9971 -0.0669 +vn -0.4676 -0.1266 -0.8748 +vn 0.4571 -0.1733 -0.8724 +vn -0.4387 -0.3657 -0.8208 +vn 0.9805 -0.1710 -0.0966 +vn -0.3876 -0.5692 -0.7251 +vn -0.8687 -0.1727 0.4643 +vn -0.3230 -0.7284 -0.6043 +vn 0.4645 -0.1708 0.8690 +vn -0.2523 -0.8447 -0.4720 +vn -0.9801 -0.1733 -0.0965 +vn -0.1798 -0.9244 -0.3364 +vn 0.9806 -0.1708 0.0966 +vn -0.5430 -0.1712 -0.8221 +vn -0.1989 -0.7284 -0.6557 +vn 0.8689 -0.1715 -0.4644 +vn -0.1554 -0.8447 -0.5122 +vn -0.0966 -0.1713 0.9805 +vn -0.1107 -0.9244 -0.3650 +vn -0.8976 -0.1881 -0.3986 +vn -0.0662 -0.9737 -0.2182 +vn -0.5295 -0.1968 0.8251 +vn 0.7589 -0.1904 0.6228 +vn -0.0220 -0.9971 -0.0726 +vn -0.2880 -0.1266 -0.9492 +vn -0.9425 -0.1729 0.2859 +vn -0.2702 -0.3657 -0.8907 +vn -0.2859 -0.1732 -0.9425 +vn -0.2387 -0.5692 -0.7868 +vn 0.9428 -0.1712 -0.2860 +vn 0.0965 -0.1728 -0.9802 +vn -0.0074 -0.9971 -0.0755 +vn -0.0972 -0.1266 -0.9872 +vn 0.4484 -0.1954 -0.8722 +vn -0.0912 -0.3657 -0.9262 +vn 0.2860 -0.1709 0.9429 +vn -0.0806 -0.5692 -0.8182 +vn 0.9429 -0.1707 0.2860 +vn -0.0672 -0.7284 -0.6819 +vn -0.9424 -0.1734 -0.2859 +vn -0.0525 -0.8447 -0.5326 +vn -0.2860 -0.1716 0.9427 +vn -0.0374 -0.9244 -0.3796 +vn -0.7607 -0.1777 0.6243 +vn -0.0223 -0.9737 -0.2269 +vn -0.3574 -0.2710 0.8938 +vn 0.8938 -0.2707 -0.3574 +vn 0.0920 -0.2708 -0.9582 +vn -0.9579 -0.2713 -0.0943 +vn 0.7943 -0.2728 0.5429 +vn -0.2795 -0.2697 0.9215 +vn 0.8189 -0.2750 -0.5037 +vn -0.0920 -0.2710 -0.9582 +vn -0.9579 -0.2712 0.0943 +vn 0.8815 -0.2701 0.3874 +vn -0.0944 -0.2695 0.9584 +vn 0.4402 -0.2703 -0.8562 +vn -0.2794 -0.2713 -0.9211 +vn -0.9211 -0.2710 0.2794 +vn 0.9217 -0.2689 0.2796 +vn -0.5310 -0.2681 -0.8039 +vn 0.0944 -0.2693 0.9584 +vn 0.4468 -0.2706 -0.8527 +vn -0.8526 -0.2710 0.4468 +vn 0.9585 -0.2691 0.0944 +vn -0.4243 -0.2660 -0.8656 +vn 0.2796 -0.2691 0.9216 +vn 0.2795 -0.2706 -0.9212 +vn -0.8373 -0.2719 0.4743 +vn 0.9584 -0.2692 -0.0944 +vn -0.8813 -0.2647 -0.3913 +vn 0.4259 -0.2697 0.8637 +vn -0.5192 -0.2754 0.8090 +vn 0.9216 -0.2694 -0.2796 +vn -0.8038 -0.2681 -0.5310 +vn -0.9210 -0.2714 -0.2794 +vn 0.5343 -0.2718 0.8004 +vn 0.0972 -0.1265 -0.9872 +vn 0.4676 -0.1265 -0.8748 +vn 0.7668 -0.1266 -0.6293 +vn 0.9492 -0.1266 -0.2880 +vn 0.9872 -0.1265 -0.0972 +vn 0.2269 -0.9737 -0.0223 +vn 0.0223 -0.9737 0.2269 +vn -0.5905 -0.3657 0.7195 +vn -0.5216 -0.5692 0.6355 +vn -0.2269 -0.9737 0.0223 +vn -0.7195 -0.3657 -0.5905 +vn -0.6355 -0.5692 -0.5216 +vn -0.4326 -0.1848 -0.8825 +vn 0.8348 -0.1987 -0.5135 +vn 0.5455 -0.1866 0.8171 +vn -0.8221 -0.1713 -0.5430 +vn -0.4644 -0.1718 0.8688 +vn 0.9019 -0.1714 0.3964 +vn -0.0965 -0.1730 -0.9802 +vn 0.4643 -0.1723 -0.8687 +vn -0.8723 -0.1737 0.4571 +vn 0.4355 -0.1747 0.8831 +vn -0.4653 -0.1608 -0.8704 +vn 0.9127 -0.1839 -0.3650 +vn -0.7630 -0.1601 -0.6262 +vn -0.6239 -0.1815 0.7602 +vn 0.8122 -0.1792 0.5552 +vn -0.2879 -0.1266 -0.9492 +vn 0.0951 -0.1726 -0.9804 +vn 0.6243 -0.1773 -0.7608 +vn -0.8537 -0.1930 0.4836 +vn 0.4402 -0.2703 -0.8563 +usemtl None +f 288/1/1 8/2/1 289/3/1 +f 41/4/2 289/3/2 8/2/2 +f 282/5/3 2/6/3 283/7/3 +f 283/7/4 3/8/4 284/9/4 +f 284/9/5 4/10/5 285/11/5 +f 285/11/6 5/12/6 286/13/6 +f 286/13/7 6/14/7 287/15/7 +f 287/15/8 7/16/8 288/1/8 +f 6/14/9 15/17/9 7/16/9 +f 7/16/10 16/18/10 8/2/10 +f 41/4/11 8/2/11 16/18/11 +f 1/19/12 10/20/12 2/6/12 +f 2/6/13 11/21/13 3/8/13 +f 4/10/14 11/21/14 12/22/14 +f 5/12/15 12/22/15 13/23/15 +f 6/14/16 13/23/16 14/24/16 +f 12/22/17 19/25/17 20/26/17 +f 12/22/18 21/27/18 13/23/18 +f 13/23/19 22/28/19 14/24/19 +f 14/24/20 23/29/20 15/17/20 +f 15/17/21 24/30/21 16/18/21 +f 41/4/22 16/18/22 24/30/22 +f 9/31/23 18/32/23 10/20/23 +f 10/20/24 19/25/24 11/21/24 +f 23/29/25 32/33/25 24/30/25 +f 41/4/26 24/30/26 32/33/26 +f 17/34/27 26/35/27 18/32/27 +f 18/32/28 27/36/28 19/25/28 +f 20/26/29 27/36/29 28/37/29 +f 21/27/30 28/37/30 29/38/30 +f 22/28/31 29/38/31 30/39/31 +f 22/28/32 31/40/32 23/29/32 +f 28/37/33 35/41/33 36/42/33 +f 29/38/34 36/42/34 37/43/34 +f 30/39/35 37/43/35 38/44/35 +f 30/39/36 39/45/36 31/40/36 +f 31/40/37 40/46/37 32/33/37 +f 41/4/38 32/33/38 40/46/38 +f 25/47/39 34/48/39 26/35/39 +f 26/35/40 35/41/40 27/36/40 +f 39/45/41 49/49/41 40/46/41 +f 41/4/42 40/46/42 49/49/42 +f 34/48/43 42/50/43 43/51/43 +f 34/48/44 44/52/44 35/41/44 +f 36/42/45 44/52/45 45/53/45 +f 36/42/46 46/54/46 37/43/46 +f 38/44/47 46/54/47 47/55/47 +f 38/44/48 48/56/48 39/45/48 +f 45/53/49 54/57/49 46/54/49 +f 46/54/50 55/58/50 47/55/50 +f 47/55/51 56/59/51 48/56/51 +f 49/49/52 56/59/52 57/60/52 +f 41/4/53 49/49/53 57/60/53 +f 42/50/54 51/61/54 43/51/54 +f 43/51/55 52/62/55 44/52/55 +f 45/53/56 52/62/56 53/63/56 +f 41/4/57 57/60/57 65/64/57 +f 51/61/58 58/65/58 59/66/58 +f 51/61/59 60/67/59 52/62/59 +f 53/63/60 60/67/60 61/68/60 +f 54/57/61 61/68/61 62/69/61 +f 55/58/62 62/69/62 63/70/62 +f 56/59/63 63/70/63 64/71/63 +f 57/60/64 64/71/64 65/64/64 +f 61/68/65 70/72/65 62/69/65 +f 63/70/66 70/72/66 71/73/66 +f 63/70/67 72/74/67 64/71/67 +f 64/71/68 73/75/68 65/64/68 +f 41/4/69 65/64/69 73/75/69 +f 58/65/70 67/76/70 59/66/70 +f 59/66/71 68/77/71 60/67/71 +f 61/68/72 68/77/72 69/78/72 +f 41/4/73 73/75/73 81/79/73 +f 67/76/74 74/80/74 75/81/74 +f 67/76/75 76/82/75 68/77/75 +f 69/78/76 76/82/76 77/83/76 +f 69/78/77 78/84/77 70/72/77 +f 71/73/78 78/84/78 79/85/78 +f 71/73/79 80/86/79 72/74/79 +f 73/75/80 80/86/80 81/79/80 +f 79/85/81 86/87/81 87/88/81 +f 79/85/82 88/89/82 80/86/82 +f 80/86/83 89/90/83 81/79/83 +f 41/4/84 81/79/84 89/90/84 +f 74/80/85 83/91/85 75/81/85 +f 75/81/86 84/92/86 76/82/86 +f 77/83/87 84/92/87 85/93/87 +f 77/83/88 86/87/88 78/84/88 +f 83/91/89 92/94/89 84/92/89 +f 85/93/90 92/94/90 93/95/90 +f 85/93/91 94/96/91 86/87/91 +f 87/88/92 94/96/92 95/97/92 +f 87/88/93 96/98/93 88/89/93 +f 89/90/94 96/98/94 97/99/94 +f 41/4/95 89/90/95 97/99/95 +f 82/100/96 91/101/96 83/91/96 +f 95/97/97 104/102/97 96/98/97 +f 96/98/98 105/103/98 97/99/98 +f 41/4/99 97/99/99 105/103/99 +f 90/104/100 99/105/100 91/101/100 +f 91/101/101 100/106/101 92/94/101 +f 93/95/102 100/106/102 101/107/102 +f 93/95/103 102/108/103 94/96/103 +f 95/97/104 102/108/104 103/109/104 +f 99/105/105 108/110/105 100/106/105 +f 101/107/106 108/110/106 109/111/106 +f 101/107/107 110/112/107 102/108/107 +f 103/109/108 110/112/108 111/113/108 +f 103/109/109 112/114/109 104/102/109 +f 104/102/110 113/115/110 105/103/110 +f 41/4/111 105/103/111 113/115/111 +f 98/116/112 107/117/112 99/105/112 +f 111/113/113 120/118/113 112/114/113 +f 112/114/114 121/119/114 113/115/114 +f 41/120/115 113/115/115 121/119/115 +f 106/121/116 115/122/116 107/117/116 +f 107/117/117 116/123/117 108/110/117 +f 109/111/118 116/123/118 117/124/118 +f 109/111/119 118/125/119 110/112/119 +f 110/112/120 119/126/120 111/113/120 +f 117/124/121 124/127/121 125/128/121 +f 117/124/122 126/129/122 118/125/122 +f 119/126/123 126/129/123 127/130/123 +f 120/118/124 127/130/124 128/131/124 +f 120/118/125 129/132/125 121/119/125 +f 41/120/126 121/119/126 129/132/126 +f 114/133/127 123/134/127 115/122/127 +f 115/122/128 124/127/128 116/123/128 +f 128/131/129 137/135/129 129/132/129 +f 41/120/130 129/132/130 137/135/130 +f 122/136/131 131/137/131 123/134/131 +f 123/134/132 132/138/132 124/127/132 +f 125/128/133 132/138/133 133/139/133 +f 125/128/134 134/140/134 126/129/134 +f 127/130/135 134/140/135 135/141/135 +f 128/131/136 135/141/136 136/142/136 +f 133/139/137 140/143/137 141/144/137 +f 133/139/138 142/145/138 134/140/138 +f 134/140/139 143/146/139 135/141/139 +f 136/142/140 143/146/140 144/147/140 +f 137/135/141 144/147/141 145/148/141 +f 41/120/142 137/135/142 145/148/142 +f 130/149/143 139/150/143 131/137/143 +f 131/137/144 140/143/144 132/138/144 +f 144/147/145 153/151/145 145/148/145 +f 41/120/146 145/148/146 153/151/146 +f 139/150/147 146/152/147 147/153/147 +f 139/150/148 148/154/148 140/143/148 +f 141/144/149 148/154/149 149/155/149 +f 141/144/150 150/156/150 142/145/150 +f 143/146/151 150/156/151 151/157/151 +f 143/146/152 152/158/152 144/147/152 +f 149/155/153 158/159/153 150/156/153 +f 150/156/154 159/160/154 151/157/154 +f 152/158/155 159/160/155 160/161/155 +f 153/151/156 160/161/156 161/162/156 +f 41/120/157 153/151/157 161/162/157 +f 146/152/158 155/163/158 147/153/158 +f 147/153/159 156/164/159 148/154/159 +f 149/155/160 156/164/160 157/165/160 +f 41/120/161 161/162/161 169/166/161 +f 154/167/162 163/168/162 155/163/162 +f 155/163/163 164/169/163 156/164/163 +f 157/165/164 164/169/164 165/170/164 +f 157/165/165 166/171/165 158/159/165 +f 159/160/166 166/171/166 167/172/166 +f 160/161/167 167/172/167 168/173/167 +f 160/161/168 169/166/168 161/162/168 +f 166/171/169 175/174/169 167/172/169 +f 167/172/170 176/175/170 168/173/170 +f 169/166/171 176/175/171 177/176/171 +f 41/120/172 169/166/172 177/176/172 +f 163/168/173 170/177/173 171/178/173 +f 163/168/174 172/179/174 164/169/174 +f 165/170/175 172/179/175 173/180/175 +f 165/170/176 174/181/176 166/171/176 +f 170/177/177 179/182/177 171/178/177 +f 171/178/178 180/183/178 172/179/178 +f 173/180/179 180/183/179 181/184/179 +f 173/180/180 182/185/180 174/181/180 +f 174/181/181 183/186/181 175/174/181 +f 175/174/182 184/187/182 176/175/182 +f 176/175/183 185/188/183 177/176/183 +f 41/120/184 177/176/184 185/188/184 +f 182/185/185 191/189/185 183/186/185 +f 184/187/186 191/189/186 192/190/186 +f 185/188/187 192/190/187 193/191/187 +f 41/120/188 185/188/188 193/191/188 +f 179/182/189 186/192/189 187/193/189 +f 179/182/190 188/194/190 180/183/190 +f 181/184/191 188/194/191 189/195/191 +f 181/184/192 190/196/192 182/185/192 +f 187/193/193 196/197/193 188/194/193 +f 189/195/194 196/197/194 197/198/194 +f 189/195/195 198/199/195 190/196/195 +f 190/196/196 199/200/196 191/189/196 +f 192/190/197 199/200/197 200/201/197 +f 192/190/198 201/202/198 193/191/198 +f 41/120/199 193/191/199 201/202/199 +f 187/193/200 194/203/200 195/204/200 +f 199/200/201 208/205/201 200/201/201 +f 200/201/202 209/206/202 201/202/202 +f 41/120/203 201/202/203 209/206/203 +f 195/204/204 202/207/204 203/208/204 +f 195/204/205 204/209/205 196/197/205 +f 197/198/206 204/209/206 205/210/206 +f 198/199/207 205/210/207 206/211/207 +f 198/199/208 207/212/208 199/200/208 +f 203/208/209 212/213/209 204/209/209 +f 205/210/210 212/213/210 213/214/210 +f 205/210/211 214/215/211 206/211/211 +f 206/211/212 215/216/212 207/212/212 +f 208/205/213 215/216/213 216/217/213 +f 208/205/214 217/218/214 209/206/214 +f 41/120/215 209/206/215 217/218/215 +f 203/208/216 210/219/216 211/220/216 +f 215/216/217 228/221/217 216/217/217 +f 216/217/218 229/222/218 217/218/218 +f 41/120/219 217/218/219 229/222/219 +f 210/219/220 223/223/220 211/220/220 +f 211/220/221 224/224/221 212/213/221 +f 213/214/222 224/224/222 225/225/222 +f 213/214/223 226/226/223 214/215/223 +f 214/215/224 227/227/224 215/216/224 +f 225/225/225 239/228/225 240/229/225 +f 222/230/226 221/231/226 237/232/226 +f 225/225/227 241/233/227 226/226/227 +f 25/47/228 277/234/228 33/235/228 +f 226/226/229 242/236/229 227/227/229 +f 1/19/230 280/237/230 9/31/230 +f 228/221/231 242/236/231 243/238/231 +f 90/104/232 261/239/232 98/116/232 +f 228/221/233 244/240/233 229/222/233 +f 186/192/234 235/241/234 234/242/234 +f 122/136/235 251/243/235 250/244/235 +f 41/120/236 229/222/236 244/240/236 +f 223/223/237 237/232/237 238/245/237 +f 202/207/238 231/246/238 210/219/238 +f 223/223/239 239/228/239 224/224/239 +f 146/152/240 248/247/240 247/248/240 +f 243/249/241 259/250/241 244/251/241 +f 74/80/242 263/252/242 82/100/242 +f 282/5/243 219/253/243 218/254/243 +f 41/4/244 244/251/244 259/250/244 +f 238/255/245 252/256/245 253/257/245 +f 17/34/246 280/237/246 279/258/246 +f 238/255/247 254/259/247 239/260/247 +f 50/261/248 266/262/248 58/65/248 +f 240/263/249 254/259/249 255/264/249 +f 162/265/250 236/266/250 170/177/250 +f 240/263/251 256/267/251 241/268/251 +f 98/116/252 260/269/252 106/121/252 +f 241/268/253 257/270/253 242/271/253 +f 194/203/254 234/242/254 233/272/254 +f 242/271/255 258/273/255 243/249/255 +f 58/65/256 265/274/256 66/275/256 +f 252/256/257 221/276/257 220/277/257 +f 255/264/258 271/278/258 256/267/258 +f 33/235/259 276/279/259 42/50/259 +f 256/267/260 272/280/260 257/270/260 +f 130/149/261 250/244/261 249/281/261 +f 258/273/262 272/280/262 273/282/262 +f 222/230/263 231/246/263 230/283/263 +f 258/273/264 274/284/264 259/250/264 +f 154/167/265 247/248/265 246/285/265 +f 82/100/266 262/286/266 90/104/266 +f 41/4/267 259/250/267 274/284/267 +f 253/257/268 267/287/268 268/288/268 +f 178/289/269 236/266/269 235/241/269 +f 253/257/270 269/290/270 254/259/270 +f 252/256/271 219/253/271 267/287/271 +f 255/264/272 269/290/272 270/291/272 +f 42/50/273 275/292/273 50/261/273 +f 282/5/274 281/293/274 1/19/274 +f 41/4/275 274/284/275 289/3/275 +f 267/287/276 283/7/276 268/288/276 +f 25/47/277 279/258/277 278/294/277 +f 268/288/278 284/9/278 269/290/278 +f 114/133/279 260/269/279 251/243/279 +f 270/291/280 284/9/280 285/11/280 +f 66/275/281 264/295/281 74/80/281 +f 270/291/282 286/13/282 271/278/282 +f 202/207/283 233/272/283 232/296/283 +f 272/280/284 286/13/284 287/15/284 +f 138/297/285 249/281/285 248/247/285 +f 272/280/286 288/1/286 273/282/286 +f 154/167/287 245/298/287 162/265/287 +f 274/284/288 288/1/288 289/3/288 +f 247/248/289 304/299/289 303/300/289 +f 277/234/290 316/301/290 276/279/290 +f 218/254/291 321/302/291 281/293/291 +f 233/272/292 298/303/292 297/304/292 +f 262/286/293 311/305/293 310/306/293 +f 248/247/294 305/307/294 304/299/294 +f 278/294/295 317/308/295 277/234/295 +f 218/254/296 291/309/296 290/310/296 +f 234/242/297 299/311/297 298/303/297 +f 263/252/298 312/312/298 311/305/298 +f 249/281/299 306/313/299 305/307/299 +f 278/294/300 319/314/300 318/315/300 +f 220/277/301 291/309/301 219/253/301 +f 235/241/302 300/316/302 299/311/302 +f 265/274/303 312/312/303 264/295/303 +f 220/277/304 293/317/304 292/318/304 +f 250/244/305 307/319/305 306/313/305 +f 279/258/306 320/320/306 319/314/306 +f 245/298/307 300/316/307 236/266/307 +f 266/262/308 313/321/308 265/274/308 +f 230/283/309 293/322/309 221/231/309 +f 251/243/310 308/323/310 307/319/310 +f 281/293/311 320/320/311 280/237/311 +f 246/285/312 301/324/312 245/298/312 +f 275/292/313 314/325/313 266/262/313 +f 230/283/314 295/326/314 294/327/314 +f 261/239/315 308/323/315 260/269/315 +f 246/285/316 303/300/316 302/328/316 +f 276/279/317 315/329/317 275/292/317 +f 232/296/318 295/326/318 231/246/318 +f 232/296/319 297/304/319 296/330/319 +f 262/286/320 309/331/320 261/239/320 +f 288/1/1 7/16/1 8/2/1 +f 282/5/321 1/19/321 2/6/321 +f 283/7/4 2/6/4 3/8/4 +f 284/9/5 3/8/5 4/10/5 +f 285/11/6 4/10/6 5/12/6 +f 286/13/7 5/12/7 6/14/7 +f 287/15/8 6/14/8 7/16/8 +f 6/14/9 14/24/9 15/17/9 +f 7/16/10 15/17/10 16/18/10 +f 1/19/12 9/31/12 10/20/12 +f 2/6/13 10/20/13 11/21/13 +f 4/10/14 3/8/14 11/21/14 +f 5/12/15 4/10/15 12/22/15 +f 6/14/16 5/12/16 13/23/16 +f 12/22/17 11/21/17 19/25/17 +f 12/22/18 20/26/18 21/27/18 +f 13/23/19 21/27/19 22/28/19 +f 14/24/20 22/28/20 23/29/20 +f 15/17/21 23/29/21 24/30/21 +f 9/31/322 17/34/322 18/32/322 +f 10/20/24 18/32/24 19/25/24 +f 23/29/25 31/40/25 32/33/25 +f 17/34/27 25/47/27 26/35/27 +f 18/32/28 26/35/28 27/36/28 +f 20/26/29 19/25/29 27/36/29 +f 21/27/30 20/26/30 28/37/30 +f 22/28/31 21/27/31 29/38/31 +f 22/28/32 30/39/32 31/40/32 +f 28/37/33 27/36/33 35/41/33 +f 29/38/34 28/37/34 36/42/34 +f 30/39/35 29/38/35 37/43/35 +f 30/39/36 38/44/36 39/45/36 +f 31/40/37 39/45/37 40/46/37 +f 25/47/323 33/235/323 34/48/323 +f 26/35/40 34/48/40 35/41/40 +f 39/45/41 48/56/41 49/49/41 +f 34/48/43 33/235/43 42/50/43 +f 34/48/44 43/51/44 44/52/44 +f 36/42/45 35/41/45 44/52/45 +f 36/42/46 45/53/46 46/54/46 +f 38/44/47 37/43/47 46/54/47 +f 38/44/48 47/55/48 48/56/48 +f 45/53/49 53/63/49 54/57/49 +f 46/54/50 54/57/50 55/58/50 +f 47/55/51 55/58/51 56/59/51 +f 49/49/52 48/56/52 56/59/52 +f 42/50/324 50/261/324 51/61/324 +f 43/51/55 51/61/55 52/62/55 +f 45/53/56 44/52/56 52/62/56 +f 51/61/325 50/261/325 58/65/325 +f 51/61/59 59/66/59 60/67/59 +f 53/63/60 52/62/60 60/67/60 +f 54/57/61 53/63/61 61/68/61 +f 55/58/62 54/57/62 62/69/62 +f 56/59/63 55/58/63 63/70/63 +f 57/60/326 56/59/326 64/71/326 +f 61/68/65 69/78/65 70/72/65 +f 63/70/66 62/69/66 70/72/66 +f 63/70/67 71/73/67 72/74/67 +f 64/71/68 72/74/68 73/75/68 +f 58/65/70 66/275/70 67/76/70 +f 59/66/71 67/76/71 68/77/71 +f 61/68/72 60/67/72 68/77/72 +f 67/76/74 66/275/74 74/80/74 +f 67/76/75 75/81/75 76/82/75 +f 69/78/76 68/77/76 76/82/76 +f 69/78/77 77/83/77 78/84/77 +f 71/73/78 70/72/78 78/84/78 +f 71/73/79 79/85/79 80/86/79 +f 73/75/80 72/74/80 80/86/80 +f 79/85/81 78/84/81 86/87/81 +f 79/85/82 87/88/82 88/89/82 +f 80/86/83 88/89/83 89/90/83 +f 74/80/85 82/100/85 83/91/85 +f 75/81/86 83/91/86 84/92/86 +f 77/83/87 76/82/87 84/92/87 +f 77/83/88 85/93/88 86/87/88 +f 83/91/89 91/101/89 92/94/89 +f 85/93/90 84/92/90 92/94/90 +f 85/93/91 93/95/91 94/96/91 +f 87/88/92 86/87/92 94/96/92 +f 87/88/93 95/97/93 96/98/93 +f 89/90/94 88/89/94 96/98/94 +f 82/100/96 90/104/96 91/101/96 +f 95/97/97 103/109/97 104/102/97 +f 96/98/98 104/102/98 105/103/98 +f 90/104/100 98/116/100 99/105/100 +f 91/101/101 99/105/101 100/106/101 +f 93/95/102 92/94/102 100/106/102 +f 93/95/103 101/107/103 102/108/103 +f 95/97/104 94/96/104 102/108/104 +f 99/105/105 107/117/105 108/110/105 +f 101/107/106 100/106/106 108/110/106 +f 101/107/107 109/111/107 110/112/107 +f 103/109/108 102/108/108 110/112/108 +f 103/109/109 111/113/109 112/114/109 +f 104/102/110 112/114/110 113/115/110 +f 98/116/112 106/121/112 107/117/112 +f 111/113/113 119/126/113 120/118/113 +f 112/114/114 120/118/114 121/119/114 +f 106/121/116 114/133/116 115/122/116 +f 107/117/117 115/122/117 116/123/117 +f 109/111/118 108/110/118 116/123/118 +f 109/111/119 117/124/119 118/125/119 +f 110/112/120 118/125/120 119/126/120 +f 117/124/121 116/123/121 124/127/121 +f 117/124/122 125/128/122 126/129/122 +f 119/126/123 118/125/123 126/129/123 +f 120/118/124 119/126/124 127/130/124 +f 120/118/327 128/131/327 129/132/327 +f 114/133/127 122/136/127 123/134/127 +f 115/122/128 123/134/128 124/127/128 +f 128/131/129 136/142/129 137/135/129 +f 122/136/131 130/149/131 131/137/131 +f 123/134/132 131/137/132 132/138/132 +f 125/128/133 124/127/133 132/138/133 +f 125/128/134 133/139/134 134/140/134 +f 127/130/135 126/129/135 134/140/135 +f 128/131/136 127/130/136 135/141/136 +f 133/139/137 132/138/137 140/143/137 +f 133/139/138 141/144/138 142/145/138 +f 134/140/139 142/145/139 143/146/139 +f 136/142/140 135/141/140 143/146/140 +f 137/135/141 136/142/141 144/147/141 +f 130/149/143 138/297/143 139/150/143 +f 131/137/144 139/150/144 140/143/144 +f 144/147/145 152/158/145 153/151/145 +f 139/150/147 138/297/147 146/152/147 +f 139/150/148 147/153/148 148/154/148 +f 141/144/149 140/143/149 148/154/149 +f 141/144/150 149/155/150 150/156/150 +f 143/146/151 142/145/151 150/156/151 +f 143/146/152 151/157/152 152/158/152 +f 149/155/153 157/165/153 158/159/153 +f 150/156/154 158/159/154 159/160/154 +f 152/158/155 151/157/155 159/160/155 +f 153/151/156 152/158/156 160/161/156 +f 146/152/158 154/167/158 155/163/158 +f 147/153/328 155/163/328 156/164/328 +f 149/155/329 148/154/329 156/164/329 +f 154/167/162 162/265/162 163/168/162 +f 155/163/163 163/168/163 164/169/163 +f 157/165/164 156/164/164 164/169/164 +f 157/165/165 165/170/165 166/171/165 +f 159/160/166 158/159/166 166/171/166 +f 160/161/167 159/160/167 167/172/167 +f 160/161/168 168/173/168 169/166/168 +f 166/171/169 174/181/169 175/174/169 +f 167/172/170 175/174/170 176/175/170 +f 169/166/171 168/173/171 176/175/171 +f 163/168/173 162/265/173 170/177/173 +f 163/168/174 171/178/174 172/179/174 +f 165/170/175 164/169/175 172/179/175 +f 165/170/176 173/180/176 174/181/176 +f 170/177/177 178/289/177 179/182/177 +f 171/178/178 179/182/178 180/183/178 +f 173/180/179 172/179/179 180/183/179 +f 173/180/180 181/184/180 182/185/180 +f 174/181/181 182/185/181 183/186/181 +f 175/174/182 183/186/182 184/187/182 +f 176/175/183 184/187/183 185/188/183 +f 182/185/185 190/196/185 191/189/185 +f 184/187/186 183/186/186 191/189/186 +f 185/188/330 184/187/330 192/190/330 +f 179/182/189 178/289/189 186/192/189 +f 179/182/190 187/193/190 188/194/190 +f 181/184/191 180/183/191 188/194/191 +f 181/184/192 189/195/192 190/196/192 +f 187/193/193 195/204/193 196/197/193 +f 189/195/194 188/194/194 196/197/194 +f 189/195/195 197/198/195 198/199/195 +f 190/196/196 198/199/196 199/200/196 +f 192/190/197 191/189/197 199/200/197 +f 192/190/198 200/201/198 201/202/198 +f 187/193/200 186/192/200 194/203/200 +f 199/200/201 207/212/201 208/205/201 +f 200/201/202 208/205/202 209/206/202 +f 195/204/204 194/203/204 202/207/204 +f 195/204/205 203/208/205 204/209/205 +f 197/198/206 196/197/206 204/209/206 +f 198/199/207 197/198/207 205/210/207 +f 198/199/208 206/211/208 207/212/208 +f 203/208/209 211/220/209 212/213/209 +f 205/210/210 204/209/210 212/213/210 +f 205/210/211 213/214/211 214/215/211 +f 206/211/212 214/215/212 215/216/212 +f 208/205/213 207/212/213 215/216/213 +f 208/205/214 216/217/214 217/218/214 +f 203/208/216 202/207/216 210/219/216 +f 215/216/217 227/227/217 228/221/217 +f 216/217/218 228/221/218 229/222/218 +f 210/219/220 222/230/220 223/223/220 +f 211/220/331 223/223/331 224/224/331 +f 213/214/332 212/213/332 224/224/332 +f 213/214/223 225/225/223 226/226/223 +f 214/215/224 226/226/224 227/227/224 +f 225/225/225 224/224/225 239/228/225 +f 222/230/333 230/283/333 221/231/333 +f 225/225/227 240/229/227 241/233/227 +f 25/47/334 278/294/334 277/234/334 +f 226/226/229 241/233/229 242/236/229 +f 1/19/230 281/293/230 280/237/230 +f 228/221/231 227/227/231 242/236/231 +f 90/104/335 262/286/335 261/239/335 +f 228/221/233 243/238/233 244/240/233 +f 186/192/234 178/289/234 235/241/234 +f 122/136/235 114/133/235 251/243/235 +f 223/223/237 222/230/237 237/232/237 +f 202/207/336 232/296/336 231/246/336 +f 223/223/239 238/245/239 239/228/239 +f 146/152/337 138/297/337 248/247/337 +f 243/249/241 258/273/241 259/250/241 +f 74/80/338 264/295/338 263/252/338 +f 282/5/339 267/287/339 219/253/339 +f 238/255/245 237/332/245 252/256/245 +f 17/34/340 9/31/340 280/237/340 +f 238/255/247 253/257/247 254/259/247 +f 50/261/248 275/292/248 266/262/248 +f 240/263/249 239/260/249 254/259/249 +f 162/265/341 245/298/341 236/266/341 +f 240/263/251 255/264/251 256/267/251 +f 98/116/342 261/239/342 260/269/342 +f 241/268/253 256/267/253 257/270/253 +f 194/203/254 186/192/254 234/242/254 +f 242/271/255 257/270/255 258/273/255 +f 58/65/256 266/262/256 265/274/256 +f 252/256/343 237/332/343 221/276/343 +f 255/264/258 270/291/258 271/278/258 +f 33/235/344 277/234/344 276/279/344 +f 256/267/260 271/278/260 272/280/260 +f 130/149/261 122/136/261 250/244/261 +f 258/273/262 257/270/262 272/280/262 +f 222/230/345 210/219/345 231/246/345 +f 258/273/264 273/282/264 274/284/264 +f 154/167/346 146/152/346 247/248/346 +f 82/100/347 263/252/347 262/286/347 +f 253/257/348 252/256/348 267/287/348 +f 178/289/269 170/177/269 236/266/269 +f 253/257/270 268/288/270 269/290/270 +f 252/256/271 220/277/271 219/253/271 +f 255/264/272 254/259/272 269/290/272 +f 42/50/273 276/279/273 275/292/273 +f 282/5/349 218/254/349 281/293/349 +f 267/287/276 282/5/276 283/7/276 +f 25/47/350 17/34/350 279/258/350 +f 268/288/278 283/7/278 284/9/278 +f 114/133/279 106/121/279 260/269/279 +f 270/291/280 269/290/280 284/9/280 +f 66/275/281 265/274/281 264/295/281 +f 270/291/282 285/11/282 286/13/282 +f 202/207/283 194/203/283 233/272/283 +f 272/280/284 271/278/284 286/13/284 +f 138/297/285 130/149/285 249/281/285 +f 272/280/286 287/15/286 288/1/286 +f 154/167/351 246/285/351 245/298/351 +f 274/284/288 273/282/288 288/1/288 +f 247/248/289 248/247/289 304/299/289 +f 277/234/290 317/308/290 316/301/290 +f 218/254/291 290/310/291 321/302/291 +f 233/272/292 234/242/292 298/303/292 +f 262/286/293 263/252/293 311/305/293 +f 248/247/294 249/281/294 305/307/294 +f 278/294/295 318/315/295 317/308/295 +f 218/254/296 219/253/296 291/309/296 +f 234/242/297 235/241/297 299/311/297 +f 263/252/298 264/295/298 312/312/298 +f 249/281/299 250/244/299 306/313/299 +f 278/294/352 279/258/352 319/314/352 +f 220/277/301 292/318/301 291/309/301 +f 235/241/302 236/266/302 300/316/302 +f 265/274/303 313/321/303 312/312/303 +f 220/277/304 221/276/304 293/317/304 +f 250/244/305 251/243/305 307/319/305 +f 279/258/306 280/237/306 320/320/306 +f 245/298/307 301/324/307 300/316/307 +f 266/262/308 314/325/308 313/321/308 +f 230/283/309 294/327/309 293/322/309 +f 251/243/310 260/269/310 308/323/310 +f 281/293/311 321/302/311 320/320/311 +f 246/285/312 302/328/312 301/324/312 +f 275/292/313 315/329/313 314/325/313 +f 230/283/314 231/246/314 295/326/314 +f 261/239/315 309/331/315 308/323/315 +f 246/285/316 247/248/316 303/300/316 +f 276/279/317 316/301/317 315/329/317 +f 232/296/318 296/330/318 295/326/318 +f 232/296/319 233/272/319 297/304/319 +f 262/286/320 310/306/320 309/331/320 +o PodBody +v -0.634758 4.766150 -0.570743 +v -0.634758 4.766150 -0.634191 +v -0.634758 4.371327 -0.570743 +v 0.570743 4.766150 -0.634191 +v 0.634191 4.766150 -0.634191 +v 0.570743 4.371327 -0.634191 +v 0.634191 4.766150 0.574483 +v 0.634191 4.766150 0.634758 +v 0.634191 4.371327 0.574483 +v -0.574483 4.766150 0.634758 +v -0.634758 4.766150 0.634758 +v -0.574483 4.371327 0.634758 +v 0.570743 4.371327 -0.570743 +v 0.634191 4.371327 -0.570743 +v -0.574483 4.766150 -0.570743 +v -0.574483 4.766150 -0.634191 +v -0.850016 4.766150 0.001870 +v -0.850016 4.371327 0.001870 +v 0.634191 4.766150 -0.570743 +v 0.634191 4.371327 -0.634191 +v 0.765090 4.371327 0.001870 +v 0.850095 4.371327 0.001870 +v -0.769260 4.766150 0.001870 +v 0.850095 4.766150 0.001870 +v -0.634758 4.766150 0.574483 +v -0.634758 4.371327 0.634758 +v 0.570743 4.371327 0.634758 +v 0.570743 4.371327 0.574483 +v 0.634191 4.371327 0.634758 +v -0.574483 4.766150 0.574483 +v -0.001870 4.766150 -0.852129 +v -0.001870 4.371327 -0.852129 +v 0.570743 4.766150 0.634758 +v -0.001870 4.371327 -0.766924 +v 0.570743 4.766150 -0.570743 +v -0.002085 4.371327 0.002051 +v -0.001870 4.371327 0.851971 +v -0.001870 4.371327 0.771026 +v -0.001870 4.766150 0.851971 +v -0.001870 4.766150 -0.766924 +v 0.765090 4.766150 0.001870 +v 0.765090 4.413541 0.001870 +v -0.001870 4.766150 0.771026 +v -0.634758 4.371327 -0.634191 +v -0.574483 4.371327 -0.570743 +v -0.634758 4.371327 0.574483 +v -0.574483 4.413541 -0.570743 +v -0.769260 4.413541 0.001870 +v -0.574483 4.413541 -0.570743 +v -0.001870 4.413541 -0.766924 +v 0.570743 4.766150 0.574483 +v -0.001870 4.413541 0.771026 +v 0.570743 4.413541 0.574483 +v -0.574483 4.371327 0.574483 +v -0.002085 4.413541 0.002051 +v -0.574483 4.371327 -0.634191 +v -0.769260 4.371327 0.001870 +v 0.570743 4.413541 -0.570743 +v -0.574483 4.413541 0.574483 +v -0.002085 4.413541 0.002051 +v -0.001870 4.413541 -0.766924 +v -0.769260 4.413541 0.001870 +v -1.121243 1.250807 1.121243 +v -1.121243 1.250807 -1.121243 +v -1.121243 0.922112 1.121243 +v 1.121243 1.250807 -1.121243 +v -1.121243 0.922112 -1.121243 +v 1.121243 1.250807 1.121243 +v 1.121243 0.922112 -1.121243 +v 1.121243 0.922112 1.121243 +v -1.282053 2.701678 -0.302830 +v -1.282053 2.701678 -0.612996 +v -1.282053 0.915438 -0.302830 +v -0.983548 2.701678 -0.612996 +v -1.282053 0.915438 -0.612996 +v -0.983548 2.701678 0.245198 +v -0.983548 2.701678 0.612996 +v -0.983548 0.915438 0.245198 +v -1.282053 2.701678 0.612996 +v -0.983548 0.915438 0.612996 +v -0.983548 0.915438 -0.202830 +v -0.983548 4.033402 -0.202828 +v -0.983548 4.033402 -0.612994 +v -1.282053 4.033402 -0.612994 +v -1.282053 2.701678 0.345198 +v -1.282053 0.915438 0.612996 +v -0.983548 2.701678 -0.202830 +v -1.282053 0.915438 0.345198 +v -0.983548 4.033402 0.612998 +v -0.983548 4.033402 0.245200 +v -1.282053 4.033402 0.612998 +v -1.282053 4.033402 0.345200 +v -0.983548 0.915438 -0.612996 +v -1.282053 4.033402 -0.302828 +v -1.282053 3.339003 -0.302828 +v -1.282053 3.339003 -0.612994 +v -0.983548 3.339003 0.245200 +v -0.983548 3.339003 0.612998 +v -1.282053 3.339003 0.612998 +v -0.983548 3.339003 -0.202828 +v -1.282053 3.339003 0.345200 +v -0.983548 3.339003 -0.612994 +v -1.326488 3.265762 -0.230241 +v -1.326488 3.265762 0.272614 +v -1.326488 2.774920 0.272612 +v -1.326488 2.774920 -0.230243 +v -1.000000 4.360665 1.000002 +v -1.000000 4.360665 -0.999998 +v -1.000000 0.417663 1.000000 +v 1.000000 4.360665 -0.999998 +v -1.000000 0.417663 -1.000000 +v 1.000000 4.360665 1.000002 +v 1.000000 0.417663 -1.000000 +v 1.000000 0.417663 1.000000 +v 0.412316 2.368839 -1.268437 +v 0.657365 2.368839 -1.259879 +v 0.412316 0.915438 -1.268437 +v 0.646948 2.368839 -0.961556 +v 0.657365 0.915438 -1.259879 +v -0.328692 2.368839 -0.995626 +v -0.578297 2.368839 -1.004342 +v -0.328692 0.915438 -0.995626 +v -0.567880 2.368839 -1.302666 +v -0.578297 0.915438 -1.004342 +v 0.401899 0.915438 -0.970113 +v 0.401899 4.033402 -0.970111 +v 0.646948 4.033402 -0.961554 +v 0.412316 4.033402 -1.268435 +v 0.657365 4.033402 -1.259877 +v 0.412316 3.574099 -1.268435 +v 0.657365 3.574099 -1.259877 +v -0.328692 4.033402 -0.995624 +v -0.578297 4.033402 -1.004340 +v -0.328692 3.574099 -0.995624 +v -0.567880 4.033402 -1.302664 +v -0.578297 3.574099 -1.004340 +v 0.646948 3.574099 -0.961554 +v -0.567880 3.574099 -1.302664 +v -0.318274 2.368839 -1.293949 +v -0.318274 0.915438 -1.293949 +v 0.401899 2.368839 -0.970113 +v 0.646948 0.915438 -0.961556 +v -0.318274 4.033402 -1.293947 +v -0.318274 3.574099 -1.293947 +v 0.406242 3.574099 -1.094501 +v 0.401899 3.574099 -0.970111 +v -0.567880 0.915438 -1.302666 +v -0.324348 2.368839 -1.120016 +v -0.324348 3.574099 -1.120014 +v -0.321635 2.368839 -1.197703 +v 0.406242 2.368839 -1.094503 +v -0.321635 3.574099 -1.197701 +v 0.408955 3.574099 -1.172188 +v 0.408955 2.368839 -1.172190 +v -1.121243 4.032755 1.121245 +v -1.121243 4.032755 -1.121241 +v -1.121243 3.704061 1.121245 +v 1.121243 4.032755 -1.121241 +v -1.121243 3.704061 -1.121241 +v 1.121243 4.032755 1.121245 +v 1.121243 3.704061 -1.121241 +v 1.121243 3.704061 1.121245 +v -0.634758 0.034352 0.570746 +v -0.634758 0.034352 0.634193 +v -0.634758 0.429174 0.570746 +v 0.570743 0.034352 0.634193 +v 0.634191 0.034352 0.634193 +v 0.570743 0.429174 0.634193 +v 0.634191 0.034352 -0.574480 +v 0.634191 0.034352 -0.634755 +v 0.634191 0.429174 -0.574480 +v -0.574483 0.034352 -0.634755 +v -0.634758 0.034352 -0.634755 +v -0.574483 0.429174 -0.634755 +v 0.570743 0.429174 0.570746 +v 0.634191 0.429174 0.570746 +v -0.574483 0.034352 0.570746 +v -0.574483 0.034352 0.634193 +v -0.850016 0.034352 -0.001867 +v -0.850016 0.429174 -0.001867 +v 0.634191 0.034352 0.570746 +v 0.634191 0.429174 0.634193 +v 0.765090 0.429174 -0.001867 +v 0.850095 0.429174 -0.001867 +v -0.769260 0.034352 -0.001867 +v 0.850095 0.034352 -0.001867 +v -0.634758 0.034352 -0.574480 +v -0.634758 0.429174 -0.634755 +v 0.570743 0.429174 -0.634755 +v 0.570743 0.429174 -0.574480 +v 0.634191 0.429174 -0.634755 +v -0.574483 0.034352 -0.574480 +v -0.001870 0.034352 0.852132 +v -0.001870 0.429174 0.852132 +v 0.570743 0.034352 -0.634755 +v -0.001870 0.429174 0.766927 +v 0.570743 0.034352 0.570746 +v -0.002085 0.429174 -0.002048 +v -0.001870 0.429174 -0.851968 +v -0.001870 0.429174 -0.771024 +v -0.001870 0.034352 -0.851968 +v -0.001870 0.034352 0.766927 +v 0.765090 0.034352 -0.001867 +v 0.765090 0.386961 -0.001867 +v -0.001870 0.034352 -0.771024 +v -0.634758 0.429174 0.634193 +v -0.574483 0.429174 0.570746 +v -0.634758 0.429174 -0.574480 +v -0.574483 0.386961 0.570746 +v -0.769260 0.386961 -0.001867 +v -0.574483 0.386961 0.570746 +v -0.001870 0.386961 0.766927 +v 0.570743 0.034352 -0.574480 +v -0.001870 0.386961 -0.771024 +v 0.570743 0.386961 -0.574480 +v -0.574483 0.429174 -0.574480 +v -0.002085 0.386961 -0.002048 +v -0.574483 0.429174 0.634193 +v -0.769260 0.429174 -0.001867 +v 0.570743 0.386961 0.570746 +v -0.574483 0.386961 -0.574480 +v -0.002085 0.386961 -0.002048 +v -0.001870 0.386961 0.766927 +v -0.769260 0.386961 -0.001867 +v -0.302830 2.701678 1.282053 +v -0.612996 2.701678 1.282053 +v -0.302830 0.915438 1.282053 +v -0.612996 2.701678 0.983548 +v -0.612996 0.915438 1.282053 +v 0.245198 2.701678 0.983548 +v 0.612996 2.701678 0.983548 +v 0.245198 0.915438 0.983548 +v 0.612996 2.701678 1.282053 +v 0.612996 0.915438 0.983548 +v -0.202830 0.915438 0.983548 +v -0.202830 4.033402 0.983550 +v -0.612996 4.033402 0.983550 +v -0.612996 4.033402 1.282055 +v 0.345198 2.701678 1.282053 +v 0.612996 0.915438 1.282053 +v -0.202830 2.701678 0.983548 +v 0.345198 0.915438 1.282053 +v 0.612996 4.033402 0.983550 +v 0.245198 4.033402 0.983550 +v 0.612996 4.033402 1.282055 +v 0.345198 4.033402 1.282055 +v -0.612996 0.915438 0.983548 +v -0.302830 4.033402 1.282055 +v -0.302830 3.339003 1.282055 +v -0.612996 3.339003 1.282055 +v 0.245198 3.339003 0.983550 +v 0.612996 3.339003 0.983550 +v 0.612996 3.339003 1.282055 +v -0.202830 3.339003 0.983550 +v 0.345198 3.339003 1.282055 +v -0.612996 3.339003 0.983550 +v -0.230243 3.265762 1.326488 +v 0.272612 3.265762 1.326488 +v 0.272612 2.774920 1.326488 +v -0.230243 2.774920 1.326488 +v 1.282053 2.701678 0.302830 +v 1.282053 2.701678 0.612996 +v 1.282053 0.915438 0.302830 +v 0.983548 2.701678 0.612996 +v 1.282053 0.915438 0.612996 +v 0.983548 2.701678 -0.245198 +v 0.983548 2.701678 -0.612996 +v 0.983548 0.915438 -0.245198 +v 1.282054 2.701678 -0.612996 +v 0.983548 0.915438 -0.612996 +v 0.983548 0.915438 0.202830 +v 0.983548 4.033402 0.202832 +v 0.983548 4.033402 0.612998 +v 1.282053 4.033402 0.612998 +v 1.282053 2.701678 -0.345198 +v 1.282054 0.915438 -0.612996 +v 0.983548 2.701678 0.202830 +v 1.282053 0.915438 -0.345198 +v 0.983548 4.033402 -0.612994 +v 0.983548 4.033402 -0.245196 +v 1.282054 4.033402 -0.612994 +v 1.282053 4.033402 -0.345196 +v 0.983548 0.915438 0.612996 +v 1.282053 4.033402 0.302832 +v 1.282053 3.339003 0.302832 +v 1.282053 3.339003 0.612998 +v 0.983548 3.339003 -0.245196 +v 0.983548 3.339003 -0.612994 +v 1.282054 3.339003 -0.612994 +v 0.983548 3.339003 0.202832 +v 1.282053 3.339003 -0.345196 +v 0.983548 3.339003 0.612998 +v 1.326488 3.265762 0.230245 +v 1.326488 3.265762 -0.272610 +v 1.326488 2.774920 -0.272612 +v 1.326488 2.774920 0.230243 +v -0.612996 3.339003 1.282055 +v -0.935509 4.207664 0.935511 +v -0.935509 0.893071 0.935509 +v -0.935509 4.207664 -0.935507 +v -0.935509 0.893071 -0.935509 +v 0.935509 4.207664 -0.935507 +v 0.935509 0.893071 -0.935509 +v 0.935509 4.207664 0.935511 +v 0.935509 0.893071 0.935509 +v -0.612996 2.701678 1.282053 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9886 0.4977 +vt 0.5059 0.4977 +vt 0.9886 0.0149 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5066 0.5056 +vt 0.9978 0.5056 +vt 0.5066 0.9969 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.9976 +vt 0.5051 0.9976 +vt 0.5051 0.5036 +vt 0.9964 0.5036 +vt 0.5051 0.9949 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9886 0.4977 +vt 0.5059 0.4977 +vt 0.9886 0.0149 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9886 0.4977 +vt 0.5059 0.4977 +vt 0.9886 0.0149 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.4986 0.0064 +vt 0.5031 0.5031 +vt 0.5031 0.9969 +vt 0.9969 0.5031 +vt 0.5031 0.5031 +vt 0.5031 0.9969 +vt 0.9969 0.5031 +vt 0.5031 0.5031 +vt 0.5031 0.9969 +vt 0.9969 0.5031 +vt 0.5031 0.5031 +vt 0.5031 0.9969 +vt 0.9969 0.5031 +vt 0.5031 0.5031 +vt 0.9969 0.5031 +vt 0.5031 0.9969 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.0074 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.0074 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.5051 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9963 0.4938 +vt 0.4986 0.4977 +vt 0.5059 0.0149 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.4986 0.9967 +vt 0.4986 0.9967 +vt 0.4986 0.9967 +vt 0.4986 0.9967 +vt 0.4986 0.9967 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9978 0.9969 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9949 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.0074 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.0074 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.0074 0.4977 +vt 0.0074 0.4977 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.5051 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9963 0.4938 +vt 0.4986 0.4977 +vt 0.5059 0.0149 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.5051 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9963 0.4938 +vt 0.4986 0.4977 +vt 0.5059 0.0149 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.4986 0.4977 +vt 0.9969 0.9969 +vt 0.9969 0.9969 +vt 0.9969 0.9969 +vt 0.9969 0.9969 +vt 0.9969 0.9969 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.9360 0.0000 -0.3519 +vn 0.9357 0.0000 0.3528 +vn 0.3557 0.0000 -0.9346 +vn -0.3547 -0.0000 0.9350 +vn -0.9469 0.0000 0.3214 +vn 0.3241 -0.0000 0.9460 +vn 0.9467 0.0000 -0.3220 +vn -0.3246 0.0000 -0.9458 +vn -0.9360 0.0000 0.3519 +vn 0.9357 0.0000 -0.3528 +vn -0.9469 0.0000 -0.3214 +vn 0.9467 0.0000 0.3220 +vn -0.3557 0.0000 -0.9346 +vn 0.3547 -0.0000 0.9350 +vn -0.3241 -0.0000 0.9460 +vn 0.3246 0.0000 -0.9458 +vn 0.0000 0.0000 0.0000 +vn -0.8529 0.0000 -0.5221 +vn -0.8550 0.5187 0.0000 +vn -0.8550 -0.5187 0.0000 +vn -0.8529 -0.0000 0.5221 +vn 0.0349 0.0000 -0.9994 +vn 0.9994 -0.0000 0.0349 +vn -0.0349 -0.0000 0.9994 +vn -0.9994 0.0000 -0.0349 +vn 0.3557 -0.0000 0.9346 +vn -0.3547 0.0000 -0.9350 +vn 0.3241 0.0000 -0.9460 +vn -0.3246 -0.0000 0.9458 +vn -0.3557 -0.0000 0.9346 +vn 0.3547 0.0000 -0.9350 +vn -0.3241 0.0000 -0.9460 +vn 0.3246 -0.0000 0.9458 +vn -0.5221 -0.0000 0.8529 +vn 0.0000 0.5187 0.8550 +vn 0.0000 -0.5187 0.8550 +vn 0.5221 -0.0000 0.8529 +vn 0.8529 -0.0000 0.5221 +vn 0.8550 0.5187 0.0000 +vn 0.8550 -0.5187 0.0000 +vn 0.8529 0.0000 -0.5221 +usemtl None_spacePod.png +f 322/333/353 323/334/353 324/335/353 +f 325/336/354 326/337/354 327/338/354 +f 328/339/355 329/340/355 330/341/355 +f 331/342/356 332/343/356 333/344/356 +f 334/345/357 327/346/357 335/347/357 +f 336/348/358 337/349/358 322/350/358 +f 338/351/359 322/352/359 339/353/359 +f 326/354/355 340/355/355 341/356/355 +f 342/357/357 334/358/357 343/359/357 +f 344/360/358 336/361/358 338/362/358 +f 345/363/360 328/364/360 343/365/360 +f 332/366/353 346/367/353 347/368/353 +f 348/369/357 349/370/357 350/371/357 +f 331/342/358 351/372/358 332/373/358 +f 352/374/361 325/375/361 353/376/361 +f 329/377/356 354/378/356 350/379/356 +f 355/380/357 353/381/357 334/382/357 +f 340/383/358 326/337/358 356/384/358 +f 357/385/357 355/386/357 342/387/357 +f 345/363/358 340/355/358 356/388/358 +f 358/389/357 359/390/357 349/391/357 +f 329/377/358 328/364/358 354/392/358 +f 360/393/362 331/394/362 358/395/362 +f 361/396/358 352/397/358 336/398/358 +f 362/399/363 356/400/363 363/401/363 +f 360/393/358 364/402/358 351/403/358 +f 323/404/354 337/349/354 365/405/354 +f 324/406/357 365/407/357 366/408/357 +f 339/409/357 324/410/357 366/411/357 +f 347/412/357 367/413/357 333/414/357 +f 368/415/356 369/416/356 370/417/356 +f 361/396/364 336/361/364 371/418/364 +f 344/360/365 351/372/365 369/419/365 +f 364/420/366 372/421/366 373/422/366 +f 346/423/367 338/424/367 367/425/367 +f 349/426/357 342/427/357 343/428/357 +f 351/429/358 344/430/358 338/431/358 +f 340/383/368 345/432/368 335/433/368 +f 359/434/357 357/435/357 342/436/357 +f 328/339/358 345/432/358 372/437/358 +f 372/438/369 362/439/369 374/440/369 +f 367/441/357 339/442/357 375/443/357 +f 373/444/358 376/445/358 369/446/358 +f 336/348/370 344/430/370 368/447/370 +f 337/448/371 352/397/371 377/449/371 +f 366/450/357 377/451/357 353/452/357 +f 378/453/357 366/454/357 355/455/357 +f 333/456/357 375/457/357 358/458/357 +f 354/459/372 360/460/372 348/461/372 +f 356/462/358 325/375/358 352/463/358 +f 354/459/358 372/421/358 360/464/358 +f 363/465/358 379/466/358 371/467/358 +f 356/462/373 361/468/373 379/469/373 +f 351/429/374 364/402/374 380/470/374 +f 375/471/357 378/472/357 359/473/357 +f 374/474/358 363/475/358 373/422/358 +f 381/476/358 382/477/358 383/478/358 +f 376/479/375 371/480/375 381/481/375 +f 371/482/375 368/483/356 382/484/375 +f 369/485/356 376/486/375 383/487/356 +f 384/488/353 385/489/353 386/490/353 +f 385/491/354 387/492/354 388/493/354 +f 387/494/355 389/495/355 390/496/355 +f 389/497/356 384/498/356 391/499/356 +f 386/500/357 388/501/357 391/499/357 +f 389/497/358 387/492/358 384/502/358 +f 392/503/353 393/504/353 394/505/353 +f 393/506/354 395/507/354 396/508/354 +f 397/509/355 398/510/355 399/511/355 +f 398/512/356 400/513/356 401/514/356 +f 394/515/357 396/516/357 402/517/357 +f 403/518/358 404/519/358 405/520/358 +f 400/521/353 406/522/353 407/523/353 +f 408/524/355 397/525/355 402/526/355 +f 407/527/357 409/528/357 399/529/357 +f 410/530/358 411/531/358 412/532/358 +f 406/533/353 392/534/353 409/535/353 +f 409/536/357 394/537/357 399/538/357 +f 411/539/358 403/540/358 413/541/358 +f 395/542/355 408/543/355 414/544/355 +f 415/545/353 405/546/353 416/547/353 +f 405/548/354 404/519/354 417/549/354 +f 411/550/355 410/551/355 418/552/355 +f 410/530/356 412/553/356 419/554/356 +f 412/555/353 413/556/353 420/557/353 +f 403/558/355 411/559/355 421/560/355 +f 413/561/353 415/562/353 422/563/353 +f 404/564/355 403/565/355 423/566/355 +f 416/567/353 417/568/353 392/569/353 +f 417/570/354 423/571/354 393/572/354 +f 418/573/355 419/574/355 397/575/355 +f 419/576/356 420/577/356 398/578/356 +f 420/579/353 422/580/353 400/581/353 +f 421/582/355 418/583/355 408/584/355 +f 416/585/376 392/586/376 424/587/376 +f 423/588/355 421/589/355 395/590/355 +f 425/591/353 424/592/353 426/593/353 +f 422/594/377 416/595/377 425/596/377 +f 392/597/378 406/598/378 427/599/378 +f 406/600/379 422/601/379 426/602/379 +f 428/603/353 429/604/353 430/605/353 +f 429/606/354 431/607/354 432/608/354 +f 431/609/355 433/610/355 434/611/355 +f 433/612/356 428/613/356 435/614/356 +f 430/615/357 432/616/357 435/614/357 +f 433/612/358 431/607/358 428/617/358 +f 436/618/380 437/619/380 438/620/380 +f 437/621/381 439/622/381 440/623/381 +f 441/624/382 442/625/382 443/626/382 +f 442/627/383 444/628/383 445/629/383 +f 438/630/357 440/631/357 446/632/357 +f 447/633/358 448/634/358 449/635/358 +f 449/636/380 450/637/380 451/638/380 +f 450/639/381 448/640/381 452/641/381 +f 453/642/382 454/643/382 455/644/382 +f 454/645/383 456/646/383 457/647/383 +f 451/648/380 452/649/380 436/650/380 +f 452/651/381 458/652/381 437/653/381 +f 455/654/382 457/655/382 441/656/382 +f 457/657/383 459/658/383 442/659/383 +f 460/660/380 436/661/380 461/662/380 +f 439/663/382 462/664/382 463/665/382 +f 461/666/357 438/667/357 443/668/357 +f 453/669/358 447/670/358 464/671/358 +f 464/672/380 449/673/380 465/674/380 +f 448/675/382 447/676/382 458/677/382 +f 451/648/383 436/661/383 466/678/383 +f 458/679/382 467/680/382 439/681/382 +f 462/682/382 441/683/382 446/684/382 +f 447/685/382 453/686/382 467/687/382 +f 467/688/382 455/689/382 462/690/382 +f 444/691/380 460/692/380 468/693/380 +f 468/694/357 461/695/357 445/629/357 +f 454/645/358 453/696/358 456/697/358 +f 456/698/380 464/699/380 459/700/380 +f 459/701/380 465/702/380 444/703/380 +f 469/704/383 470/705/383 471/706/383 +f 465/707/357 451/708/357 470/709/357 +f 436/618/358 460/692/358 472/710/358 +f 460/660/381 465/702/381 469/711/381 +f 473/712/380 474/713/380 471/714/380 +f 466/715/381 472/716/381 474/717/381 +f 470/718/358 466/719/358 473/720/358 +f 472/721/357 469/722/357 475/723/357 +f 476/724/353 477/725/353 478/726/353 +f 477/727/354 479/728/354 480/729/354 +f 479/730/355 481/731/355 482/732/355 +f 481/733/356 476/734/356 483/735/356 +f 478/736/357 480/737/357 483/735/357 +f 481/733/358 479/728/358 476/738/358 +f 484/739/353 485/740/353 486/741/353 +f 487/742/356 488/743/356 489/744/356 +f 490/745/355 491/746/355 492/747/355 +f 493/748/354 494/749/354 495/750/354 +f 496/751/358 489/752/358 497/753/358 +f 498/754/357 499/755/357 484/756/357 +f 500/757/367 484/758/367 501/759/367 +f 488/760/355 502/761/355 503/762/355 +f 504/763/358 496/764/358 505/765/358 +f 506/766/357 498/767/357 500/768/357 +f 507/769/368 490/770/368 505/771/368 +f 494/772/353 508/773/353 509/774/353 +f 510/775/358 511/776/358 512/777/358 +f 493/748/357 513/778/357 494/779/357 +f 514/780/384 487/781/384 515/782/384 +f 491/783/354 516/784/354 512/785/354 +f 517/786/358 515/787/358 496/788/358 +f 502/789/357 488/743/357 518/790/357 +f 519/791/358 517/792/358 504/793/358 +f 507/769/357 502/761/357 518/794/357 +f 520/795/358 521/796/358 511/797/358 +f 491/783/357 490/770/357 516/798/357 +f 522/799/385 493/800/385 520/801/385 +f 523/802/357 514/803/357 498/804/357 +f 524/805/369 518/806/369 525/807/369 +f 522/799/357 526/808/357 513/809/357 +f 485/810/356 499/755/356 527/811/356 +f 486/812/358 527/813/358 528/814/358 +f 501/815/358 486/816/358 528/817/358 +f 509/818/358 529/819/358 495/820/358 +f 530/821/356 531/822/356 532/823/356 +f 523/802/386 498/767/386 533/824/386 +f 506/766/370 513/778/370 531/825/370 +f 526/826/387 534/827/387 535/828/387 +f 508/829/359 500/830/359 529/831/359 +f 511/832/358 504/833/358 505/834/358 +f 513/835/357 506/836/357 500/837/357 +f 502/789/360 507/838/360 497/839/360 +f 521/840/358 519/841/358 504/842/358 +f 490/745/357 507/838/357 534/843/357 +f 534/844/363 524/845/363 536/846/363 +f 529/847/358 501/848/358 537/849/358 +f 535/850/357 538/851/357 531/852/357 +f 498/754/365 506/836/365 530/853/365 +f 499/854/388 514/803/388 539/855/388 +f 528/856/358 539/857/358 515/858/358 +f 540/859/358 528/860/358 517/861/358 +f 495/862/358 537/863/358 520/864/358 +f 516/865/389 522/866/389 510/867/389 +f 518/868/357 487/781/357 514/869/357 +f 516/865/357 534/827/357 522/870/357 +f 525/871/357 541/872/357 533/873/357 +f 518/868/390 523/874/390 541/875/390 +f 513/835/391 526/808/391 542/876/391 +f 537/877/358 540/878/358 521/879/358 +f 536/880/357 525/881/357 535/828/357 +f 543/882/357 544/883/357 545/884/357 +f 538/885/375 533/886/375 543/887/375 +f 533/888/375 530/889/356 544/890/375 +f 531/891/356 538/892/375 545/893/356 +f 546/894/356 547/895/356 548/896/356 +f 547/897/353 549/898/353 550/899/353 +f 551/900/354 552/901/354 553/902/354 +f 552/903/355 554/904/355 555/905/355 +f 548/906/357 550/907/357 556/908/357 +f 557/909/358 558/910/358 559/911/358 +f 554/912/356 560/913/356 561/914/356 +f 562/915/354 551/916/354 556/917/354 +f 561/918/357 563/919/357 553/920/357 +f 564/921/358 565/922/358 566/923/358 +f 560/924/356 546/925/356 563/926/356 +f 563/927/357 548/928/357 553/929/357 +f 565/930/358 557/931/358 567/932/358 +f 549/933/354 562/934/354 568/935/354 +f 569/936/356 559/937/356 570/938/356 +f 559/939/353 558/910/353 571/940/353 +f 565/941/354 564/942/354 572/943/354 +f 564/921/355 566/944/355 573/945/355 +f 566/946/356 567/947/356 574/948/356 +f 557/949/354 565/950/354 575/951/354 +f 567/952/356 569/953/356 576/954/356 +f 558/955/354 557/956/354 577/957/354 +f 570/958/356 571/959/356 546/960/356 +f 571/961/353 577/962/353 547/963/353 +f 572/964/354 573/965/354 551/966/354 +f 573/967/355 574/968/355 552/969/355 +f 574/970/356 576/971/356 554/972/356 +f 575/973/354 572/974/354 562/975/354 +f 570/976/392 546/977/392 578/978/392 +f 577/979/354 575/980/354 549/981/354 +f 579/982/356 578/983/356 580/984/356 +f 576/985/393 570/986/393 579/987/393 +f 546/988/394 560/989/394 581/990/394 +f 560/991/395 576/992/395 580/993/395 +f 582/994/355 583/995/355 584/996/355 +f 583/997/356 585/998/356 586/999/356 +f 587/1000/353 588/1001/353 589/1002/353 +f 588/1003/354 590/1004/354 591/1005/354 +f 584/1006/357 586/1007/357 592/1008/357 +f 593/1009/358 594/1010/358 595/1011/358 +f 590/1012/355 596/1013/355 597/1014/355 +f 598/1015/353 587/1016/353 592/1017/353 +f 597/1018/357 599/1019/357 589/1020/357 +f 600/1021/358 601/1022/358 602/1023/358 +f 596/1024/355 582/1025/355 599/1026/355 +f 599/1027/357 584/1028/357 589/1029/357 +f 601/1030/358 593/1031/358 603/1032/358 +f 585/1033/353 598/1034/353 604/1035/353 +f 605/1036/355 595/1037/355 606/1038/355 +f 595/1039/356 594/1010/356 607/1040/356 +f 601/1041/353 600/1042/353 608/1043/353 +f 600/1021/354 602/1044/354 609/1045/354 +f 602/1046/355 603/1047/355 610/1048/355 +f 593/1049/353 601/1050/353 611/1051/353 +f 603/1052/355 605/1053/355 612/1054/355 +f 594/1055/353 593/1056/353 613/1057/353 +f 606/1058/355 607/1059/355 582/1060/355 +f 607/1061/356 613/1062/356 583/1063/356 +f 608/1064/353 609/1065/353 587/1066/353 +f 609/1067/354 610/1068/354 588/1069/354 +f 610/1070/355 612/1071/355 590/1072/355 +f 611/1073/353 608/1074/353 598/1075/353 +f 606/1076/396 582/1077/396 614/1078/396 +f 613/1079/353 611/1080/353 585/1081/353 +f 615/1082/355 614/1083/355 616/1084/355 +f 612/1085/397 606/1086/397 615/1087/397 +f 582/1088/398 596/1089/398 617/1090/398 +f 596/1091/399 612/1092/399 616/1093/399 +f 571/1094/356 547/1095/356 618/1096/356 +f 619/1097/355 620/1098/355 621/1099/355 +f 621/1100/356 622/1101/356 623/1102/356 +f 623/1103/353 624/1104/353 625/1105/353 +f 625/1106/354 626/1107/354 619/1108/354 +f 620/1109/358 626/1107/358 622/1110/358 +f 625/1106/357 619/1111/357 623/1102/357 +f 323/334/353 365/1112/353 324/335/353 +f 326/337/354 341/1113/354 327/338/354 +f 329/340/355 350/1114/355 330/341/355 +f 332/343/356 347/1115/356 333/344/356 +f 327/346/357 341/1116/357 335/347/357 +f 337/349/358 323/1117/358 322/350/358 +f 322/352/359 324/1118/359 339/353/359 +f 340/355/355 335/1119/355 341/356/355 +f 334/358/357 335/1120/357 343/359/357 +f 336/361/358 322/1121/358 338/362/358 +f 328/364/360 330/1122/360 343/365/360 +f 346/367/353 367/1123/353 347/368/353 +f 349/370/357 330/1124/357 350/371/357 +f 351/372/358 346/1125/358 332/373/358 +f 325/375/361 327/1126/361 353/376/361 +f 354/378/356 348/1127/356 350/379/356 +f 353/381/357 327/1128/357 334/382/357 +f 326/337/358 325/1129/358 356/384/358 +f 355/386/357 334/1130/357 342/387/357 +f 362/1131/358 345/363/358 356/388/358 +f 348/1132/357 358/389/357 349/391/357 +f 328/364/358 372/1133/358 354/392/358 +f 331/394/362 333/1134/362 358/395/362 +f 352/397/358 337/1135/358 336/398/358 +f 356/400/363 379/1136/363 363/401/363 +f 331/1137/358 360/393/358 351/403/358 +f 337/349/354 377/1138/354 365/405/354 +f 365/407/357 377/1139/357 366/408/357 +f 378/1140/357 339/409/357 366/411/357 +f 367/413/357 375/1141/357 333/414/357 +f 369/416/356 383/1142/356 370/417/356 +f 336/361/364 368/1143/364 371/418/364 +f 351/372/365 380/1144/365 369/419/365 +f 372/421/366 374/1145/366 373/422/366 +f 338/424/367 339/1146/367 367/425/367 +f 330/1147/357 349/426/357 343/428/357 +f 346/1148/358 351/429/358 338/431/358 +f 345/432/368 343/1149/368 335/433/368 +f 349/1150/357 359/434/357 342/436/357 +f 345/432/358 362/1151/358 372/437/358 +f 362/439/369 363/1152/369 374/440/369 +f 339/442/357 378/1153/357 375/443/357 +f 380/470/358 373/444/358 369/446/358 +f 344/430/370 369/446/370 368/447/370 +f 352/397/371 353/1154/371 377/449/371 +f 355/1155/357 366/450/357 353/452/357 +f 357/1156/357 378/453/357 355/455/357 +f 375/457/357 359/1157/357 358/458/357 +f 360/460/372 358/1158/372 348/461/372 +f 361/1159/358 356/462/358 352/463/358 +f 372/421/358 364/1160/358 360/464/358 +f 376/1161/358 363/465/358 371/467/358 +f 361/468/373 371/467/373 379/469/373 +f 364/402/374 373/1162/374 380/470/374 +f 378/472/357 357/1163/357 359/473/357 +f 363/475/358 376/1164/358 373/422/358 +f 382/477/358 370/1165/358 383/478/358 +f 371/480/375 382/1166/375 381/481/375 +f 368/483/356 370/1167/356 382/484/375 +f 376/486/375 381/1168/375 383/487/356 +f 385/489/353 388/1169/353 386/490/353 +f 387/492/354 390/1170/354 388/493/354 +f 389/495/355 391/1171/355 390/496/355 +f 384/498/356 386/1172/356 391/499/356 +f 388/501/357 390/1170/357 391/499/357 +f 387/492/358 385/1173/358 384/502/358 +f 393/504/353 396/1174/353 394/505/353 +f 395/507/354 414/1175/354 396/508/354 +f 398/510/355 401/1176/355 399/511/355 +f 400/513/356 407/1177/356 401/514/356 +f 396/516/357 414/1175/357 402/517/357 +f 415/1178/358 403/518/358 405/520/358 +f 406/522/353 409/1179/353 407/523/353 +f 397/525/355 399/1180/355 402/526/355 +f 401/514/357 407/527/357 399/529/357 +f 411/531/358 413/1181/358 412/532/358 +f 392/534/353 394/1182/353 409/535/353 +f 394/537/357 402/1183/357 399/538/357 +f 403/540/358 415/1184/358 413/541/358 +f 408/543/355 402/1185/355 414/544/355 +f 405/546/353 417/1186/353 416/547/353 +f 404/519/354 423/1187/354 417/549/354 +f 410/551/355 419/1188/355 418/552/355 +f 412/553/356 420/1189/356 419/554/356 +f 413/556/353 422/1190/353 420/557/353 +f 411/559/355 418/1191/355 421/560/355 +f 415/562/353 416/1192/353 422/563/353 +f 403/565/355 421/1193/355 423/566/355 +f 417/568/353 393/1194/353 392/569/353 +f 423/571/354 395/1195/354 393/572/354 +f 419/574/355 398/1196/355 397/575/355 +f 420/577/356 400/1197/356 398/578/356 +f 422/580/353 406/1198/353 400/581/353 +f 418/583/355 397/1199/355 408/584/355 +f 392/586/376 427/1200/376 424/587/376 +f 421/589/355 408/1201/355 395/590/355 +f 424/592/353 427/1202/353 426/593/353 +f 416/595/377 424/1203/377 425/596/377 +f 406/598/378 426/1204/378 427/599/378 +f 422/601/379 425/1205/379 426/602/379 +f 429/604/353 432/1206/353 430/605/353 +f 431/607/354 434/1207/354 432/608/354 +f 433/610/355 435/1208/355 434/611/355 +f 428/613/356 430/1209/356 435/614/356 +f 432/616/357 434/1207/357 435/614/357 +f 431/607/358 429/1210/358 428/617/358 +f 437/619/380 440/1211/380 438/620/380 +f 439/622/381 463/1212/381 440/623/381 +f 442/625/382 445/1213/382 443/626/382 +f 444/628/383 468/1214/383 445/629/383 +f 440/631/357 463/1212/357 446/632/357 +f 448/634/358 450/1215/358 449/635/358 +f 450/637/380 452/1216/380 451/638/380 +f 448/640/381 458/1217/381 452/641/381 +f 454/643/382 457/1218/382 455/644/382 +f 456/646/383 459/1219/383 457/647/383 +f 452/649/380 437/1220/380 436/650/380 +f 458/652/381 439/1221/381 437/653/381 +f 457/655/382 442/1222/382 441/656/382 +f 459/658/383 444/1223/383 442/659/383 +f 436/661/380 438/1224/380 461/662/380 +f 462/664/382 446/1225/382 463/665/382 +f 438/667/357 446/1226/357 443/668/357 +f 447/670/358 449/1227/358 464/671/358 +f 449/673/380 451/1228/380 465/674/380 +f 447/676/382 467/1229/382 458/677/382 +f 436/661/383 472/1230/383 466/678/383 +f 467/680/382 462/1231/382 439/681/382 +f 441/683/382 443/1232/382 446/684/382 +f 453/686/382 455/1233/382 467/687/382 +f 455/689/382 441/1234/382 462/690/382 +f 460/692/380 461/1235/380 468/693/380 +f 461/695/357 443/1236/357 445/629/357 +f 453/696/358 464/1237/358 456/697/358 +f 464/699/380 465/1238/380 459/700/380 +f 465/702/380 460/1239/380 444/703/380 +f 470/705/383 473/1240/383 471/706/383 +f 451/708/357 466/1241/357 470/709/357 +f 460/692/358 469/1242/358 472/710/358 +f 465/702/381 470/1243/381 469/711/381 +f 474/713/380 475/1244/380 471/714/380 +f 472/716/381 475/1245/381 474/717/381 +f 466/719/358 474/1246/358 473/720/358 +f 469/722/357 471/1247/357 475/723/357 +f 477/725/353 480/1248/353 478/726/353 +f 479/728/354 482/1249/354 480/729/354 +f 481/731/355 483/1250/355 482/732/355 +f 476/734/356 478/1251/356 483/735/356 +f 480/737/357 482/1249/357 483/735/357 +f 479/728/358 477/1252/358 476/738/358 +f 485/740/353 527/1253/353 486/741/353 +f 488/743/356 503/1254/356 489/744/356 +f 491/746/355 512/1255/355 492/747/355 +f 494/749/354 509/1256/354 495/750/354 +f 489/752/358 503/1257/358 497/753/358 +f 499/755/357 485/1258/357 484/756/357 +f 484/758/367 486/1259/367 501/759/367 +f 502/761/355 497/1260/355 503/762/355 +f 496/764/358 497/1261/358 505/765/358 +f 498/767/357 484/1262/357 500/768/357 +f 490/770/368 492/1263/368 505/771/368 +f 508/773/353 529/1264/353 509/774/353 +f 511/776/358 492/1265/358 512/777/358 +f 513/778/357 508/1266/357 494/779/357 +f 487/781/384 489/1267/384 515/782/384 +f 516/784/354 510/1268/354 512/785/354 +f 515/787/358 489/1269/358 496/788/358 +f 488/743/357 487/1270/357 518/790/357 +f 517/792/358 496/1271/358 504/793/358 +f 524/1272/357 507/769/357 518/794/357 +f 510/1273/358 520/795/358 511/797/358 +f 490/770/357 534/1274/357 516/798/357 +f 493/800/385 495/1275/385 520/801/385 +f 514/803/357 499/1276/357 498/804/357 +f 518/806/369 541/1277/369 525/807/369 +f 493/1278/357 522/799/357 513/809/357 +f 499/755/356 539/1279/356 527/811/356 +f 527/813/358 539/1280/358 528/814/358 +f 540/1281/358 501/815/358 528/817/358 +f 529/819/358 537/1282/358 495/820/358 +f 531/822/356 545/1283/356 532/823/356 +f 498/767/386 530/1284/386 533/824/386 +f 513/778/370 542/1285/370 531/825/370 +f 534/827/387 536/1286/387 535/828/387 +f 500/830/359 501/1287/359 529/831/359 +f 492/1288/358 511/832/358 505/834/358 +f 508/1289/357 513/835/357 500/837/357 +f 507/838/360 505/1290/360 497/839/360 +f 511/1291/358 521/840/358 504/842/358 +f 507/838/357 524/1292/357 534/843/357 +f 524/845/363 525/1293/363 536/846/363 +f 501/848/358 540/1294/358 537/849/358 +f 542/876/357 535/850/357 531/852/357 +f 506/836/365 531/852/365 530/853/365 +f 514/803/388 515/1295/388 539/855/388 +f 517/1296/358 528/856/358 515/858/358 +f 519/1297/358 540/859/358 517/861/358 +f 537/863/358 521/1298/358 520/864/358 +f 522/866/389 520/1299/389 510/867/389 +f 523/1300/357 518/868/357 514/869/357 +f 534/827/357 526/1301/357 522/870/357 +f 538/1302/357 525/871/357 533/873/357 +f 523/874/390 533/873/390 541/875/390 +f 526/808/391 535/1303/391 542/876/391 +f 540/878/358 519/1304/358 521/879/358 +f 525/881/357 538/1305/357 535/828/357 +f 544/883/357 532/1306/357 545/884/357 +f 533/886/375 544/1307/375 543/887/375 +f 530/889/356 532/1308/356 544/890/375 +f 538/892/375 543/1309/375 545/893/356 +f 547/895/356 550/1310/356 548/896/356 +f 549/898/353 568/1311/353 550/899/353 +f 552/901/354 555/1312/354 553/902/354 +f 554/904/355 561/1313/355 555/905/355 +f 550/907/357 568/1311/357 556/908/357 +f 569/1314/358 557/909/358 559/911/358 +f 560/913/356 563/1315/356 561/914/356 +f 551/916/354 553/1316/354 556/917/354 +f 555/905/357 561/918/357 553/920/357 +f 565/922/358 567/1317/358 566/923/358 +f 546/925/356 548/1318/356 563/926/356 +f 548/928/357 556/1319/357 553/929/357 +f 557/931/358 569/1320/358 567/932/358 +f 562/934/354 556/1321/354 568/935/354 +f 559/937/356 571/1322/356 570/938/356 +f 558/910/353 577/1323/353 571/940/353 +f 564/942/354 573/1324/354 572/943/354 +f 566/944/355 574/1325/355 573/945/355 +f 567/947/356 576/1326/356 574/948/356 +f 565/950/354 572/1327/354 575/951/354 +f 569/953/356 570/1328/356 576/954/356 +f 557/956/354 575/1329/354 577/957/354 +f 571/959/356 547/1330/356 546/960/356 +f 577/962/353 549/1331/353 547/963/353 +f 573/965/354 552/1332/354 551/966/354 +f 574/968/355 554/1333/355 552/969/355 +f 576/971/356 560/1334/356 554/972/356 +f 572/974/354 551/1335/354 562/975/354 +f 546/977/392 581/1336/392 578/978/392 +f 575/980/354 562/1337/354 549/981/354 +f 578/983/356 581/1338/356 580/984/356 +f 570/986/393 578/1339/393 579/987/393 +f 560/989/394 580/1340/394 581/990/394 +f 576/992/395 579/1341/395 580/993/395 +f 583/995/355 586/1342/355 584/996/355 +f 585/998/356 604/1343/356 586/999/356 +f 588/1001/353 591/1344/353 589/1002/353 +f 590/1004/354 597/1345/354 591/1005/354 +f 586/1007/357 604/1343/357 592/1008/357 +f 605/1346/358 593/1009/358 595/1011/358 +f 596/1013/355 599/1347/355 597/1014/355 +f 587/1016/353 589/1348/353 592/1017/353 +f 591/1005/357 597/1018/357 589/1020/357 +f 601/1022/358 603/1349/358 602/1023/358 +f 582/1025/355 584/1350/355 599/1026/355 +f 584/1028/357 592/1351/357 589/1029/357 +f 593/1031/358 605/1352/358 603/1032/358 +f 598/1034/353 592/1353/353 604/1035/353 +f 595/1037/355 607/1354/355 606/1038/355 +f 594/1010/356 613/1355/356 607/1040/356 +f 600/1042/353 609/1356/353 608/1043/353 +f 602/1044/354 610/1357/354 609/1045/354 +f 603/1047/355 612/1358/355 610/1048/355 +f 601/1050/353 608/1359/353 611/1051/353 +f 605/1053/355 606/1360/355 612/1054/355 +f 593/1056/353 611/1361/353 613/1057/353 +f 607/1059/355 583/1362/355 582/1060/355 +f 613/1062/356 585/1363/356 583/1063/356 +f 609/1065/353 588/1364/353 587/1066/353 +f 610/1068/354 590/1365/354 588/1069/354 +f 612/1071/355 596/1366/355 590/1072/355 +f 608/1074/353 587/1367/353 598/1075/353 +f 582/1077/396 617/1368/396 614/1078/396 +f 611/1080/353 598/1369/353 585/1081/353 +f 614/1083/355 617/1370/355 616/1084/355 +f 606/1086/397 614/1371/397 615/1087/397 +f 596/1089/398 616/1372/398 617/1090/398 +f 612/1092/399 615/1373/399 616/1093/399 +f 547/1095/356 627/1374/356 618/1096/356 +f 620/1098/355 622/1375/355 621/1099/355 +f 622/1101/356 624/1376/356 623/1102/356 +f 624/1104/353 626/1377/353 625/1105/353 +f 626/1107/354 620/1378/354 619/1108/354 +f 626/1107/358 624/1376/358 622/1110/358 +f 619/1111/357 621/1379/357 623/1102/357 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.mtl new file mode 100644 index 00000000..b19f0c1c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.mtl @@ -0,0 +1,23 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/rocket_t2 + +newmtl None_rocketT1.png +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/rocket_t2 + +newmtl None_rocketT1.png.002 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/rocket_t2 + +newmtl None_rocketT1.png.004 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/rocket_t2 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.obj new file mode 100644 index 00000000..fb49eb6c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.obj @@ -0,0 +1,899 @@ +mtllib rocket_t2.mtl +o Rocket +v -0.867203 5.684977 0.867203 +v -0.867203 5.784976 0.867203 +v -0.867203 5.684977 -0.867203 +v -0.867203 5.784976 -0.867203 +v 0.867203 5.684977 0.867203 +v 0.867203 5.784976 0.867203 +v 0.867203 5.684977 -0.867203 +v 0.867203 5.784976 -0.867203 +v -0.700000 -0.025000 0.700000 +v -0.700000 0.075000 0.700000 +v -0.700000 -0.025000 -0.700000 +v -0.700000 0.075000 -0.700000 +v 0.700000 -0.025000 0.700000 +v 0.700000 0.075000 0.700000 +v 0.700000 -0.025000 -0.700000 +v 0.700000 0.075000 -0.700000 +v -0.600000 0.075000 0.600000 +v -0.600000 0.175000 0.600000 +v -0.600000 0.075000 -0.600000 +v -0.600000 0.175000 -0.600000 +v 0.600000 0.075000 0.600000 +v 0.600000 0.175000 0.600000 +v 0.600000 0.075000 -0.600000 +v 0.600000 0.175000 -0.600000 +v -0.100000 7.184501 0.100000 +v -0.100000 8.984502 0.100000 +v -0.100000 7.184501 -0.100000 +v -0.100000 8.984502 -0.100000 +v 0.100000 7.184501 0.100000 +v 0.100000 8.984502 0.100000 +v 0.100000 7.184501 -0.100000 +v 0.100000 8.984502 -0.100000 +v -0.500000 0.175000 0.500000 +v -0.500000 0.375000 0.500000 +v -0.500000 0.175000 -0.500000 +v -0.500000 0.375000 -0.500000 +v 0.500000 0.175000 0.500000 +v 0.500000 0.375000 0.500000 +v 0.500000 0.175000 -0.500000 +v 0.500000 0.375000 -0.500000 +v -0.900000 0.375000 0.900000 +v -0.900000 0.475000 0.900000 +v -0.900000 0.375000 -0.900000 +v -0.900000 0.475000 -0.900000 +v 0.900000 0.375000 0.900000 +v 0.900000 0.475000 0.900000 +v 0.900000 0.375000 -0.900000 +v 0.900000 0.475000 -0.900000 +v -0.802256 0.375325 0.897637 +v -0.802256 5.775334 0.897637 +v -0.802256 0.375325 0.797637 +v -0.802256 5.775334 0.797637 +v 0.897744 0.375325 0.897637 +v 0.897744 5.775334 0.897637 +v 0.897744 0.375325 0.797637 +v 0.897744 5.775334 0.797637 +v 0.798310 0.399330 0.800000 +v 0.798310 5.799326 0.800000 +v 0.798310 0.399330 -0.800000 +v 0.798310 5.799326 -0.800000 +v 0.898310 0.399330 0.800000 +v 0.898310 5.799326 0.800000 +v 0.898310 0.399330 -0.800000 +v 0.898310 5.799326 -0.800000 +v -0.898721 0.407736 0.895898 +v -0.898721 5.807732 0.895898 +v -0.898721 0.407736 -0.804103 +v -0.898721 5.807732 -0.804103 +v -0.798721 0.407736 0.895898 +v -0.798721 5.807732 0.895898 +v -0.798721 0.407736 -0.804103 +v -0.798721 5.807732 -0.804103 +v -0.898111 0.404094 -0.796410 +v -0.898111 5.804089 -0.796410 +v -0.898111 0.404094 -0.896410 +v -0.898111 5.804089 -0.896410 +v -0.398111 0.404094 -0.796410 +v -0.398111 5.804089 -0.796410 +v -0.398111 0.404094 -0.896410 +v -0.398111 5.804089 -0.896410 +v -0.400000 4.138270 -0.796410 +v -0.400000 5.799060 -0.796410 +v -0.400000 4.138270 -0.896410 +v -0.400000 5.799060 -0.896410 +v 0.400000 4.138270 -0.796410 +v 0.400000 5.799060 -0.796410 +v 0.400000 4.138270 -0.896410 +v 0.400000 5.799060 -0.896410 +v -0.400000 0.403183 -0.796410 +v -0.400000 3.403180 -0.796410 +v -0.400000 0.403183 -0.896410 +v -0.400000 3.403180 -0.896410 +v 0.400000 0.403183 -0.796410 +v 0.400000 3.403180 -0.796410 +v 0.400000 0.403183 -0.896410 +v 0.400000 3.403180 -0.896410 +v -0.200000 6.987399 0.200000 +v -0.200000 7.187399 0.200000 +v -0.200000 6.987399 -0.200000 +v -0.200000 7.187399 -0.200000 +v 0.200000 6.987399 0.200000 +v 0.200000 7.187399 0.200000 +v 0.200000 6.987399 -0.200000 +v 0.200000 7.187399 -0.200000 +v -0.800000 5.802254 0.800000 +v -0.800000 6.002254 0.800000 +v -0.800000 5.802254 -0.800000 +v -0.800000 6.002255 -0.800000 +v 0.800000 5.802254 0.800000 +v 0.800000 6.002254 0.800000 +v 0.800000 5.802254 -0.800000 +v 0.800000 6.002255 -0.800000 +v -0.700000 6.000873 0.700000 +v -0.700000 6.200872 0.700000 +v -0.700000 6.000873 -0.700000 +v -0.700000 6.200872 -0.700000 +v 0.700000 6.000873 0.700000 +v 0.700000 6.200872 0.700000 +v 0.700000 6.000873 -0.700000 +v 0.700000 6.200872 -0.700000 +v -0.600000 6.201362 0.600000 +v -0.600000 6.401362 0.600000 +v -0.600000 6.201362 -0.600000 +v -0.600000 6.401362 -0.600000 +v 0.600000 6.201362 0.600000 +v 0.600000 6.401362 0.600000 +v 0.600000 6.201362 -0.600000 +v 0.600000 6.401362 -0.600000 +v -0.500000 6.401852 0.500000 +v -0.500000 6.601852 0.500000 +v -0.500000 6.401852 -0.500000 +v -0.500000 6.601852 -0.500000 +v 0.500000 6.401852 0.500000 +v 0.500000 6.601852 0.500000 +v 0.500000 6.401852 -0.500000 +v 0.500000 6.601852 -0.500000 +v -0.400000 6.597856 0.400000 +v -0.400000 6.797855 0.400000 +v -0.400000 6.597856 -0.400000 +v -0.400000 6.797856 -0.400000 +v 0.400000 6.597856 0.400000 +v 0.400000 6.797855 0.400000 +v 0.400000 6.597856 -0.400000 +v 0.400000 6.797856 -0.400000 +v -0.300000 6.793045 0.300000 +v -0.300000 6.993045 0.300000 +v -0.300000 6.793045 -0.300000 +v -0.300000 6.993045 -0.300000 +v 0.300000 6.793045 0.300000 +v 0.300000 6.993045 0.300000 +v 0.300000 6.793045 -0.300000 +v 0.300000 6.993045 -0.300000 +v -1.421026 0.007384 -1.279605 +v -1.421026 1.507384 -1.279605 +v -1.491737 0.007384 -1.350315 +v -1.491737 1.507384 -1.350315 +v -1.279605 0.007384 -1.421026 +v -1.279605 1.507384 -1.421026 +v -1.350316 0.007384 -1.491737 +v -1.350316 1.507384 -1.491737 +v -0.855036 0.879847 -0.713615 +v -0.855036 1.679847 -0.713615 +v -0.996457 0.879847 -0.855036 +v -0.996457 1.679847 -0.855036 +v -0.713615 0.879847 -0.855036 +v -0.713615 1.679847 -0.855036 +v -0.855036 0.879847 -0.996458 +v -0.855036 1.679847 -0.996458 +v -0.996458 0.779847 -0.855036 +v -0.996458 1.579847 -0.855036 +v -1.137879 0.779847 -0.996457 +v -1.137879 1.579847 -0.996457 +v -0.855036 0.779847 -0.996457 +v -0.855036 1.579847 -0.996457 +v -0.996458 0.779847 -1.137879 +v -0.996458 1.579847 -1.137879 +v -1.137879 0.579847 -0.996457 +v -1.137879 1.379847 -0.996457 +v -1.279300 0.579847 -1.137879 +v -1.279300 1.379847 -1.137879 +v -0.996458 0.579847 -1.137879 +v -0.996458 1.379847 -1.137879 +v -1.137879 0.579847 -1.279300 +v -1.137879 1.379847 -1.279300 +v -1.279300 0.179847 -1.137879 +v -1.279300 0.979847 -1.137879 +v -1.420722 0.179847 -1.279300 +v -1.420722 0.979847 -1.279300 +v -1.137879 0.179847 -1.279300 +v -1.137879 0.979847 -1.279300 +v -1.279300 0.179847 -1.420722 +v -1.279300 0.979847 -1.420722 +v -1.279605 0.007383 1.408365 +v -1.279605 1.507384 1.408365 +v -1.350315 0.007383 1.479076 +v -1.350315 1.507384 1.479076 +v -1.421026 0.007383 1.266944 +v -1.421026 1.507384 1.266944 +v -1.491737 0.007383 1.337655 +v -1.491737 1.507384 1.337655 +v -0.855036 0.779847 0.983797 +v -0.855036 1.579847 0.983797 +v -0.996458 0.779847 1.125218 +v -0.996458 1.579847 1.125218 +v -0.996458 0.779847 0.842375 +v -0.996458 1.579847 0.842375 +v -1.137879 0.779847 0.983797 +v -1.137879 1.579847 0.983797 +v -0.996458 0.579847 1.125218 +v -0.996458 1.379847 1.125218 +v -1.137879 0.579847 1.266640 +v -1.137879 1.379847 1.266640 +v -1.137879 0.579847 0.983797 +v -1.137879 1.379847 0.983797 +v -1.279300 0.579847 1.125218 +v -1.279300 1.379847 1.125218 +v -1.137879 0.179847 1.266640 +v -1.137879 0.979847 1.266640 +v -1.279300 0.179847 1.408061 +v -1.279300 0.979847 1.408061 +v -1.279300 0.179847 1.125218 +v -1.279300 0.979847 1.125218 +v -1.420722 0.179847 1.266640 +v -1.420722 0.979847 1.266640 +v -0.713615 0.879847 0.842375 +v -0.713615 1.679847 0.842375 +v -0.855036 0.879847 0.983797 +v -0.855036 1.679847 0.983797 +v -0.855036 0.879847 0.700954 +v -0.855036 1.679847 0.700954 +v -0.996458 0.879847 0.842375 +v -0.996458 1.679847 0.842375 +v 1.408365 0.007383 1.266944 +v 1.408365 1.507383 1.266944 +v 1.479076 0.007383 1.337655 +v 1.479076 1.507383 1.337655 +v 1.266944 0.007383 1.408366 +v 1.266944 1.507383 1.408366 +v 1.337654 0.007383 1.479076 +v 1.337654 1.507383 1.479076 +v 0.983797 0.779847 0.842375 +v 0.983797 1.579847 0.842375 +v 1.125218 0.779846 0.983797 +v 1.125218 1.579847 0.983797 +v 0.842375 0.779847 0.983797 +v 0.842375 1.579847 0.983797 +v 0.983797 0.779846 1.125218 +v 0.983797 1.579847 1.125218 +v 1.125218 0.579846 0.983797 +v 1.125218 1.379847 0.983797 +v 1.266639 0.579846 1.125218 +v 1.266639 1.379847 1.125218 +v 0.983797 0.579846 1.125218 +v 0.983797 1.379847 1.125218 +v 1.125218 0.579846 1.266640 +v 1.125218 1.379847 1.266640 +v 1.266639 0.179846 1.125218 +v 1.266639 0.979846 1.125218 +v 1.408061 0.179846 1.266640 +v 1.408061 0.979846 1.266640 +v 1.125218 0.179846 1.266640 +v 1.125218 0.979846 1.266640 +v 1.266639 0.179846 1.408061 +v 1.266639 0.979846 1.408061 +v 0.842375 0.879847 0.700954 +v 0.842375 1.679847 0.700954 +v 0.983797 0.879847 0.842375 +v 0.983797 1.679847 0.842375 +v 0.700954 0.879847 0.842375 +v 0.700954 1.679847 0.842375 +v 0.842375 0.879847 0.983797 +v 0.842375 1.679847 0.983797 +v 1.266944 0.007383 -1.421026 +v 1.266944 1.507384 -1.421026 +v 1.337654 0.007383 -1.491737 +v 1.337654 1.507384 -1.491737 +v 1.408365 0.007383 -1.279605 +v 1.408365 1.507384 -1.279605 +v 1.479076 0.007383 -1.350316 +v 1.479076 1.507384 -1.350316 +v 0.842375 0.779847 -0.996458 +v 0.842375 1.579847 -0.996458 +v 0.983796 0.779847 -1.137879 +v 0.983796 1.579847 -1.137879 +v 0.983796 0.779847 -0.855036 +v 0.983796 1.579847 -0.855036 +v 1.125218 0.779847 -0.996458 +v 1.125218 1.579847 -0.996458 +v 0.983796 0.579847 -1.137879 +v 0.983796 1.379847 -1.137879 +v 1.125218 0.579847 -1.279300 +v 1.125218 1.379847 -1.279300 +v 1.125218 0.579847 -0.996458 +v 1.125218 1.379847 -0.996458 +v 1.266639 0.579847 -1.137879 +v 1.266639 1.379847 -1.137879 +v 1.125218 0.179847 -1.279300 +v 1.125218 0.979847 -1.279300 +v 1.266639 0.179847 -1.420722 +v 1.266639 0.979847 -1.420722 +v 1.266639 0.179847 -1.137879 +v 1.266639 0.979847 -1.137879 +v 1.408061 0.179847 -1.279300 +v 1.408061 0.979847 -1.279300 +v 0.700954 0.879847 -0.855036 +v 0.700954 1.679847 -0.855036 +v 0.842375 0.879847 -0.996458 +v 0.842375 1.679847 -0.996458 +v 0.842375 0.879847 -0.713615 +v 0.842375 1.679847 -0.713615 +v 0.983796 0.879847 -0.855036 +v 0.983796 1.679847 -0.855036 +v 0.395899 0.404094 -0.796410 +v 0.395899 5.804089 -0.796410 +v 0.395899 0.404094 -0.896410 +v 0.395899 5.804089 -0.896410 +v 0.895899 0.404094 -0.796410 +v 0.895899 5.804089 -0.796410 +v 0.895899 0.404094 -0.896410 +v 0.895899 5.804089 -0.896410 +v -0.150000 0.536412 -0.898030 +v -0.150000 1.036412 -0.898030 +v -0.150000 0.536412 -0.998030 +v -0.150000 1.036412 -0.998030 +v 0.150000 0.536412 -0.898030 +v 0.150000 1.036412 -0.898030 +v 0.150000 0.536412 -0.998030 +v 0.150000 1.036412 -0.998030 +v -0.250000 0.477908 -0.983898 +v -0.250000 1.277908 -0.983898 +v -0.250000 0.477908 -1.483898 +v -0.250000 1.277908 -1.483898 +v 0.250000 0.477908 -0.983898 +v 0.250000 1.277908 -0.983898 +v 0.250000 0.477908 -1.483898 +v 0.250000 1.277908 -1.483898 +v -0.200000 1.271981 -1.030706 +v -0.200000 1.471981 -1.030706 +v -0.200000 1.271981 -1.430707 +v -0.200000 1.471981 -1.430707 +v 0.200000 1.271981 -1.030706 +v 0.200000 1.471981 -1.030706 +v 0.200000 1.271981 -1.430707 +v 0.200000 1.471981 -1.430707 +v -0.898030 0.536412 0.150000 +v -0.898030 1.036412 0.150000 +v -0.998030 0.536412 0.150000 +v -0.998030 1.036412 0.150000 +v -0.898030 0.536412 -0.150000 +v -0.898030 1.036412 -0.150000 +v -0.998030 0.536412 -0.150000 +v -0.998030 1.036412 -0.150000 +v -0.983898 0.477908 0.250000 +v -0.983898 1.277908 0.250000 +v -1.483898 0.477908 0.250000 +v -1.483898 1.277908 0.250000 +v -0.983898 0.477908 -0.250000 +v -0.983898 1.277908 -0.250000 +v -1.483898 0.477908 -0.250000 +v -1.483898 1.277908 -0.250000 +v -1.030706 1.271981 0.200000 +v -1.030706 1.471981 0.200000 +v -1.430707 1.271981 0.200000 +v -1.430707 1.471981 0.200000 +v -1.030706 1.271981 -0.200000 +v -1.030706 1.471981 -0.200000 +v -1.430707 1.271981 -0.200000 +v -1.430707 1.471981 -0.200000 +v 0.150000 0.536412 0.898030 +v 0.150000 1.036412 0.898030 +v 0.150000 0.536412 0.998030 +v 0.150000 1.036412 0.998030 +v -0.150000 0.536412 0.898030 +v -0.150000 1.036412 0.898030 +v -0.150000 0.536412 0.998030 +v -0.150000 1.036412 0.998030 +v 0.250000 0.477908 0.983898 +v 0.250000 1.277908 0.983898 +v 0.250000 0.477908 1.483898 +v 0.250000 1.277908 1.483898 +v -0.250000 0.477908 0.983898 +v -0.250000 1.277908 0.983898 +v -0.250000 0.477908 1.483898 +v -0.250000 1.277908 1.483898 +v 0.200000 1.271981 1.030706 +v 0.200000 1.471981 1.030706 +v 0.200000 1.271981 1.430707 +v 0.200000 1.471981 1.430707 +v -0.200000 1.271981 1.030706 +v -0.200000 1.471981 1.030706 +v -0.200000 1.271981 1.430707 +v -0.200000 1.471981 1.430707 +v 0.898030 0.536412 -0.150000 +v 0.898030 1.036412 -0.150000 +v 0.998030 0.536412 -0.150000 +v 0.998030 1.036412 -0.150000 +v 0.898030 0.536412 0.150000 +v 0.898030 1.036412 0.150000 +v 0.998030 0.536412 0.150000 +v 0.998030 1.036412 0.150000 +v 0.983898 0.477908 -0.250000 +v 0.983898 1.277908 -0.250000 +v 1.483898 0.477908 -0.250000 +v 1.483898 1.277908 -0.250000 +v 0.983898 0.477908 0.250000 +v 0.983898 1.277908 0.250000 +v 1.483898 0.477908 0.250000 +v 1.483898 1.277908 0.250000 +v 1.030706 1.271981 -0.200000 +v 1.030706 1.471981 -0.200000 +v 1.430707 1.271981 -0.200000 +v 1.430707 1.471981 -0.200000 +v 1.030706 1.271981 0.200000 +v 1.030706 1.471981 0.200000 +v 1.430707 1.271981 0.200000 +v 1.430707 1.471981 0.200000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.238606 0.937792 +vt 0.245889 0.937792 +vt 0.245889 0.995739 +vt 0.238606 0.995739 +vt 0.055831 0.944961 +vt 0.110552 0.944961 +vt 0.110552 0.999682 +vt 0.055831 0.999682 +vt 0.110275 0.946323 +vt 0.163310 0.946323 +vt 0.163310 0.999358 +vt 0.110275 0.999358 +vt 0.056735 0.944690 +vt 0.110441 0.944690 +vt 0.110441 0.998396 +vt 0.056735 0.998396 +vt 0.977420 0.429486 +vt 0.984200 0.429486 +vt 0.984200 0.360492 +vt 0.977420 0.360492 +vt 0.976892 0.430600 +vt 0.983500 0.430600 +vt 0.983500 0.437208 +vt 0.976892 0.437208 +vt 0.535233 0.707529 +vt 0.605835 0.707529 +vt 0.605835 0.714124 +vt 0.535233 0.714124 +vt 0.535233 0.654047 +vt 0.605835 0.654047 +vt 0.605835 0.660643 +vt 0.535233 0.660643 +vt 0.055473 0.946228 +vt 0.108793 0.946228 +vt 0.108793 0.999548 +vt 0.055473 0.999548 +vt 0.540032 0.784586 +vt 0.595117 0.784586 +vt 0.595117 0.932285 +vt 0.540032 0.932285 +vt 0.535578 0.783240 +vt 0.597104 0.783240 +vt 0.597104 0.936269 +vt 0.535578 0.936269 +vt 0.603734 0.486570 +vt 0.608592 0.486570 +vt 0.608592 0.636697 +vt 0.603734 0.636697 +vt 0.601026 0.657552 +vt 0.535220 0.657552 +vt 0.535220 0.450187 +vt 0.601026 0.450187 +vt 0.534092 0.653000 +vt 0.606045 0.653000 +vt 0.606045 0.660021 +vt 0.534092 0.660021 +vt 0.605626 0.444683 +vt 0.539294 0.444683 +vt 0.539294 0.235488 +vt 0.605626 0.235488 +vt 0.601779 0.659296 +vt 0.535242 0.659296 +vt 0.535242 0.448402 +vt 0.601779 0.448402 +vt 0.603734 0.503321 +vt 0.608592 0.503321 +vt 0.608592 0.653449 +vt 0.603734 0.653449 +vt 0.534092 0.652584 +vt 0.606045 0.652584 +vt 0.606045 0.659605 +vt 0.534092 0.659605 +vt 0.426017 0.835789 +vt 0.429636 0.835789 +vt 0.429636 0.995989 +vt 0.426017 0.995989 +vt 0.425623 0.996263 +vt 0.406315 0.996263 +vt 0.406315 0.786300 +vt 0.425623 0.786300 +vt 0.402443 0.835789 +vt 0.429789 0.835789 +vt 0.429789 0.995989 +vt 0.402443 0.995989 +vt 0.406275 0.996133 +vt 0.429639 0.996133 +vt 0.429639 0.999967 +vt 0.406275 0.999967 +vt 0.371084 0.996143 +vt 0.332199 0.996143 +vt 0.332199 0.930074 +vt 0.371084 0.930074 +vt 0.534491 0.653518 +vt 0.606369 0.653518 +vt 0.606369 0.660388 +vt 0.534491 0.660388 +vt 0.370850 0.925602 +vt 0.332293 0.925602 +vt 0.332293 0.809118 +vt 0.370850 0.809118 +vt 0.874947 0.695620 +vt 0.937689 0.695620 +vt 0.937689 0.702715 +vt 0.874947 0.702715 +vt 0.812800 0.704156 +vt 0.874008 0.704156 +vt 0.874008 0.765363 +vt 0.812800 0.765363 +vt 0.598937 0.520005 +vt 0.608583 0.520005 +vt 0.608583 0.561538 +vt 0.598937 0.561538 +vt 0.425623 0.780873 +vt 0.406315 0.780873 +vt 0.406315 0.570923 +vt 0.425623 0.570923 +vt 0.402679 0.615370 +vt 0.405676 0.615370 +vt 0.405676 0.775157 +vt 0.402679 0.775157 +vt 0.429785 0.671952 +vt 0.448953 0.671952 +vt 0.448953 0.831739 +vt 0.429785 0.831739 +vt 0.402443 0.671952 +vt 0.402443 0.831739 +vt 0.406275 0.784512 +vt 0.429639 0.784512 +vt 0.429639 0.788336 +vt 0.406275 0.788336 +vt 0.607801 0.904325 +vt 0.625358 0.904325 +vt 0.625358 0.921883 +vt 0.607801 0.921883 +vt 0.621027 0.957030 +vt 0.640646 0.957030 +vt 0.640646 0.926030 +vt 0.621027 0.926030 +vt 0.641035 0.976458 +vt 0.659857 0.976458 +vt 0.659857 0.957510 +vt 0.641035 0.957510 +vt 0.621316 0.976455 +vt 0.640606 0.976455 +vt 0.640606 0.957114 +vt 0.621316 0.957114 +vt 0.617813 0.999157 +vt 0.633756 0.999157 +vt 0.633756 0.977890 +vt 0.617813 0.977890 +vt 0.632339 0.999895 +vt 0.648283 0.999895 +vt 0.648283 0.984721 +vt 0.632339 0.984721 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 0.707100 +usemtl None +f 2/1/1 4/2/1 3/3/1 1/4/1 +f 4/1/2 8/2/2 7/3/2 3/4/2 +f 8/1/3 6/2/3 5/3/3 7/4/3 +f 6/1/4 2/2/4 1/3/4 5/4/4 +f 1/5/5 3/6/5 7/7/5 5/8/5 +f 6/1/6 8/2/6 4/3/6 2/4/6 +f 10/9/1 12/10/1 11/11/1 9/12/1 +f 12/9/2 16/10/2 15/11/2 11/12/2 +f 16/9/3 14/10/3 13/11/3 15/12/3 +f 14/9/4 10/10/4 9/11/4 13/12/4 +f 9/13/5 11/14/5 15/15/5 13/16/5 +f 14/17/6 16/18/6 12/19/6 10/20/6 +f 18/9/1 20/10/1 19/11/1 17/12/1 +f 20/9/2 24/10/2 23/11/2 19/12/2 +f 24/9/3 22/10/3 21/11/3 23/12/3 +f 22/9/4 18/10/4 17/11/4 21/12/4 +f 17/1/5 19/2/5 23/3/5 21/4/5 +f 22/17/6 24/18/6 20/19/6 18/20/6 +f 26/21/1 28/22/1 27/23/1 25/24/1 +f 28/21/2 32/22/2 31/23/2 27/24/2 +f 32/21/3 30/22/3 29/23/3 31/24/3 +f 30/21/4 26/22/4 25/23/4 29/24/4 +f 25/1/5 27/2/5 31/3/5 29/4/5 +f 30/25/6 32/26/6 28/27/6 26/28/6 +f 34/9/1 36/10/1 35/11/1 33/12/1 +f 36/9/2 40/10/2 39/11/2 35/12/2 +f 40/9/3 38/10/3 37/11/3 39/12/3 +f 38/9/4 34/10/4 33/11/4 37/12/4 +f 33/1/5 35/2/5 39/3/5 37/4/5 +f 38/1/6 40/2/6 36/3/6 34/4/6 +f 42/29/1 44/30/1 43/31/1 41/32/1 +f 44/33/2 48/34/2 47/35/2 43/36/2 +f 48/29/3 46/30/3 45/31/3 47/32/3 +f 46/29/4 42/30/4 41/31/4 45/32/4 +f 41/37/5 43/38/5 47/39/5 45/40/5 +f 46/41/6 48/42/6 44/43/6 42/44/6 +f 50/1/1 52/2/1 51/3/1 49/4/1 +f 52/45/2 56/46/2 55/47/2 51/48/2 +f 56/49/3 54/50/3 53/51/3 55/52/3 +f 54/53/4 50/54/4 49/55/4 53/56/4 +f 49/1/5 51/2/5 55/3/5 53/4/5 +f 54/57/6 56/58/6 52/59/6 50/60/6 +f 58/45/1 60/46/1 59/47/1 57/48/1 +f 60/1/2 64/2/2 63/3/2 59/4/2 +f 64/61/3 62/62/3 61/63/3 63/64/3 +f 62/1/4 58/2/4 57/3/4 61/4/4 +f 57/1/5 59/2/5 63/3/5 61/4/5 +f 62/57/6 64/58/6 60/59/6 58/60/6 +f 66/65/1 68/66/1 67/67/1 65/68/1 +f 68/1/2 72/2/2 71/3/2 67/4/2 +f 72/45/3 70/46/3 69/47/3 71/48/3 +f 70/69/4 66/70/4 65/71/4 69/72/4 +f 65/1/5 67/2/5 71/3/5 69/4/5 +f 70/73/6 72/74/6 68/75/6 66/76/6 +f 74/77/1 76/78/1 75/79/1 73/80/1 +f 76/81/2 80/82/2 79/83/2 75/84/2 +f 80/45/3 78/46/3 77/47/3 79/48/3 +f 78/45/4 74/46/4 73/47/4 77/48/4 +f 73/85/5 75/86/5 79/87/5 77/88/5 +f 78/89/6 80/90/6 76/91/6 74/92/6 +f 82/1/1 84/2/1 83/3/1 81/4/1 +f 84/93/2 88/94/2 87/95/2 83/96/2 +f 88/1/3 86/2/3 85/3/3 87/4/3 +f 86/45/4 82/46/4 81/47/4 85/48/4 +f 81/45/5 83/46/5 87/47/5 85/48/5 +f 86/97/6 88/98/6 84/99/6 82/100/6 +f 90/1/1 92/2/1 91/3/1 89/4/1 +f 92/101/2 96/102/2 95/103/2 91/104/2 +f 96/1/3 94/2/3 93/3/3 95/4/3 +f 94/45/4 90/46/4 89/47/4 93/48/4 +f 89/1/5 91/2/5 95/3/5 93/4/5 +f 94/45/6 96/46/6 92/47/6 90/48/6 +f 98/105/1 100/106/1 99/107/1 97/108/1 +f 100/105/2 104/106/2 103/107/2 99/108/2 +f 104/105/3 102/106/3 101/107/3 103/108/3 +f 102/105/4 98/106/4 97/107/4 101/108/4 +f 97/1/5 99/2/5 103/3/5 101/4/5 +f 102/109/6 104/110/6 100/111/6 98/112/6 +f 106/105/1 108/106/1 107/107/1 105/108/1 +f 108/105/2 112/106/2 111/107/2 107/108/2 +f 112/105/3 110/106/3 109/107/3 111/108/3 +f 110/105/4 106/106/4 105/107/4 109/108/4 +f 105/1/5 107/2/5 111/3/5 109/4/5 +f 110/109/6 112/110/6 108/111/6 106/112/6 +f 114/105/1 116/106/1 115/107/1 113/108/1 +f 116/105/2 120/106/2 119/107/2 115/108/2 +f 120/105/3 118/106/3 117/107/3 119/108/3 +f 118/105/4 114/106/4 113/107/4 117/108/4 +f 113/1/5 115/2/5 119/3/5 117/4/5 +f 118/109/6 120/110/6 116/111/6 114/112/6 +f 122/105/1 124/106/1 123/107/1 121/108/1 +f 124/105/2 128/106/2 127/107/2 123/108/2 +f 128/105/3 126/106/3 125/107/3 127/108/3 +f 126/105/4 122/106/4 121/107/4 125/108/4 +f 121/1/5 123/2/5 127/3/5 125/4/5 +f 126/109/6 128/110/6 124/111/6 122/112/6 +f 130/105/1 132/106/1 131/107/1 129/108/1 +f 132/105/2 136/106/2 135/107/2 131/108/2 +f 136/105/3 134/106/3 133/107/3 135/108/3 +f 134/105/4 130/106/4 129/107/4 133/108/4 +f 129/1/5 131/2/5 135/3/5 133/4/5 +f 134/109/6 136/110/6 132/111/6 130/112/6 +f 138/105/1 140/106/1 139/107/1 137/108/1 +f 140/105/2 144/106/2 143/107/2 139/108/2 +f 144/105/3 142/106/3 141/107/3 143/108/3 +f 142/105/4 138/106/4 137/107/4 141/108/4 +f 137/1/5 139/2/5 143/3/5 141/4/5 +f 142/109/6 144/110/6 140/111/6 138/112/6 +f 146/105/1 148/106/1 147/107/1 145/108/1 +f 148/105/2 152/106/2 151/107/2 147/108/2 +f 152/105/3 150/106/3 149/107/3 151/108/3 +f 150/105/4 146/106/4 145/107/4 149/108/4 +f 145/1/5 147/2/5 151/3/5 149/4/5 +f 150/109/6 152/110/6 148/111/6 146/112/6 +f 154/5/7 156/6/7 155/7/7 153/8/7 +f 156/5/8 160/6/8 159/7/8 155/8/8 +f 160/5/9 158/6/9 157/7/9 159/8/9 +f 158/5/10 154/6/10 153/7/10 157/8/10 +f 153/5/5 155/6/5 159/7/5 157/8/5 +f 158/5/6 160/6/6 156/7/6 154/8/6 +f 162/5/7 164/6/7 163/7/7 161/8/7 +f 164/5/8 168/6/8 167/7/8 163/8/8 +f 168/5/9 166/6/9 165/7/9 167/8/9 +f 166/113/10 162/114/10 161/115/10 165/116/10 +f 161/5/5 163/6/5 167/7/5 165/8/5 +f 166/5/6 168/6/6 164/7/6 162/8/6 +f 170/5/7 172/6/7 171/7/7 169/8/7 +f 172/5/8 176/6/8 175/7/8 171/8/8 +f 176/5/9 174/6/9 173/7/9 175/8/9 +f 174/5/10 170/6/10 169/7/10 173/8/10 +f 169/5/5 171/6/5 175/7/5 173/8/5 +f 174/5/6 176/6/6 172/7/6 170/8/6 +f 178/5/7 180/6/7 179/7/7 177/8/7 +f 180/5/8 184/6/8 183/7/8 179/8/8 +f 184/5/9 182/6/9 181/7/9 183/8/9 +f 182/5/10 178/6/10 177/7/10 181/8/10 +f 177/5/5 179/6/5 183/7/5 181/8/5 +f 182/5/6 184/6/6 180/7/6 178/8/6 +f 186/5/7 188/6/7 187/7/7 185/8/7 +f 188/5/8 192/6/8 191/7/8 187/8/8 +f 192/5/9 190/6/9 189/7/9 191/8/9 +f 190/5/10 186/6/10 185/7/10 189/8/10 +f 185/5/5 187/6/5 191/7/5 189/8/5 +f 190/5/6 192/6/6 188/7/6 186/8/6 +f 194/5/10 196/6/10 195/7/10 193/8/10 +f 196/5/7 200/6/7 199/7/7 195/8/7 +f 200/5/8 198/6/8 197/7/8 199/8/8 +f 198/5/9 194/6/9 193/7/9 197/8/9 +f 193/5/5 195/6/5 199/7/5 197/8/5 +f 198/5/6 200/6/6 196/7/6 194/8/6 +f 202/5/10 204/6/10 203/7/10 201/8/10 +f 204/5/7 208/6/7 207/7/7 203/8/7 +f 208/5/8 206/6/8 205/7/8 207/8/8 +f 206/5/9 202/6/9 201/7/9 205/8/9 +f 201/5/5 203/6/5 207/7/5 205/8/5 +f 206/5/6 208/6/6 204/7/6 202/8/6 +f 210/5/10 212/6/10 211/7/10 209/8/10 +f 212/5/7 216/6/7 215/7/7 211/8/7 +f 216/5/8 214/6/8 213/7/8 215/8/8 +f 214/5/9 210/6/9 209/7/9 213/8/9 +f 209/5/5 211/6/5 215/7/5 213/8/5 +f 214/5/6 216/6/6 212/7/6 210/8/6 +f 218/5/10 220/6/10 219/7/10 217/8/10 +f 220/5/7 224/6/7 223/7/7 219/8/7 +f 224/5/8 222/6/8 221/7/8 223/8/8 +f 222/5/9 218/6/9 217/7/9 221/8/9 +f 217/5/5 219/6/5 223/7/5 221/8/5 +f 222/5/6 224/6/6 220/7/6 218/8/6 +f 226/5/10 228/6/10 227/7/10 225/8/10 +f 228/5/7 232/6/7 231/7/7 227/8/7 +f 232/5/8 230/6/8 229/7/8 231/8/8 +f 230/113/9 226/114/9 225/115/9 229/116/9 +f 225/5/5 227/6/5 231/7/5 229/8/5 +f 230/5/6 232/6/6 228/7/6 226/8/6 +f 234/5/9 236/6/9 235/7/9 233/8/9 +f 236/5/10 240/6/10 239/7/10 235/8/10 +f 240/5/7 238/6/7 237/7/7 239/8/7 +f 238/5/8 234/6/8 233/7/8 237/8/8 +f 233/5/5 235/6/5 239/7/5 237/8/5 +f 238/5/6 240/6/6 236/7/6 234/8/6 +f 242/5/9 244/6/9 243/7/9 241/8/9 +f 244/5/10 248/6/10 247/7/10 243/8/10 +f 248/5/7 246/6/7 245/7/7 247/8/7 +f 246/5/8 242/6/8 241/7/8 245/8/8 +f 241/5/5 243/6/5 247/7/5 245/8/5 +f 246/5/6 248/6/6 244/7/6 242/8/6 +f 250/5/9 252/6/9 251/7/9 249/8/9 +f 252/5/10 256/6/10 255/7/10 251/8/10 +f 256/5/7 254/6/7 253/7/7 255/8/7 +f 254/5/8 250/6/8 249/7/8 253/8/8 +f 249/5/5 251/6/5 255/7/5 253/8/5 +f 254/5/6 256/6/6 252/7/6 250/8/6 +f 258/5/9 260/6/9 259/7/9 257/8/9 +f 260/5/10 264/6/10 263/7/10 259/8/10 +f 264/5/7 262/6/7 261/7/7 263/8/7 +f 262/5/8 258/6/8 257/7/8 261/8/8 +f 257/5/5 259/6/5 263/7/5 261/8/5 +f 262/5/6 264/6/6 260/7/6 258/8/6 +f 266/5/9 268/6/9 267/7/9 265/8/9 +f 268/5/10 272/6/10 271/7/10 267/8/10 +f 272/5/7 270/6/7 269/7/7 271/8/7 +f 270/113/8 266/114/8 265/115/8 269/116/8 +f 265/5/5 267/6/5 271/7/5 269/8/5 +f 270/5/6 272/6/6 268/7/6 266/8/6 +f 274/5/8 276/6/8 275/7/8 273/8/8 +f 276/5/9 280/6/9 279/7/9 275/8/9 +f 280/5/10 278/6/10 277/7/10 279/8/10 +f 278/5/7 274/6/7 273/7/7 277/8/7 +f 273/5/5 275/6/5 279/7/5 277/8/5 +f 278/5/6 280/6/6 276/7/6 274/8/6 +f 282/5/8 284/6/8 283/7/8 281/8/8 +f 284/5/9 288/6/9 287/7/9 283/8/9 +f 288/5/10 286/6/10 285/7/10 287/8/10 +f 286/5/7 282/6/7 281/7/7 285/8/7 +f 281/5/5 283/6/5 287/7/5 285/8/5 +f 286/5/6 288/6/6 284/7/6 282/8/6 +f 290/5/8 292/6/8 291/7/8 289/8/8 +f 292/5/9 296/6/9 295/7/9 291/8/9 +f 296/5/10 294/6/10 293/7/10 295/8/10 +f 294/5/7 290/6/7 289/7/7 293/8/7 +f 289/5/5 291/6/5 295/7/5 293/8/5 +f 294/5/6 296/6/6 292/7/6 290/8/6 +f 298/5/8 300/6/8 299/7/8 297/8/8 +f 300/5/9 304/6/9 303/7/9 299/8/9 +f 304/5/10 302/6/10 301/7/10 303/8/10 +f 302/5/7 298/6/7 297/7/7 301/8/7 +f 297/5/5 299/6/5 303/7/5 301/8/5 +f 302/5/6 304/6/6 300/7/6 298/8/6 +f 306/5/8 308/6/8 307/7/8 305/8/8 +f 308/5/9 312/6/9 311/7/9 307/8/9 +f 312/5/10 310/6/10 309/7/10 311/8/10 +f 310/113/7 306/114/7 305/115/7 309/116/7 +f 305/5/5 307/6/5 311/7/5 309/8/5 +f 310/5/6 312/6/6 308/7/6 306/8/6 +f 314/45/1 316/46/1 315/47/1 313/48/1 +f 316/117/2 320/118/2 319/119/2 315/120/2 +f 320/121/3 318/122/3 317/123/3 319/124/3 +f 318/125/4 314/126/4 313/127/4 317/128/4 +f 313/129/5 315/125/5 319/128/5 317/130/5 +f 318/131/6 320/132/6 316/133/6 314/134/6 +f 322/135/1 324/136/1 323/137/1 321/138/1 +f 324/135/2 328/136/2 327/137/2 323/138/2 +f 328/135/3 326/136/3 325/137/3 327/138/3 +f 326/135/4 322/136/4 321/137/4 325/138/4 +f 321/135/5 323/136/5 327/137/5 325/138/5 +f 326/135/6 328/136/6 324/137/6 322/138/6 +f 330/139/1 332/140/1 331/141/1 329/142/1 +f 332/139/2 336/140/2 335/141/2 331/142/2 +f 336/139/3 334/140/3 333/141/3 335/142/3 +f 334/139/4 330/140/4 329/141/4 333/142/4 +f 329/143/5 331/144/5 335/145/5 333/146/5 +f 334/147/6 336/148/6 332/149/6 330/150/6 +f 338/151/1 340/152/1 339/153/1 337/154/1 +f 340/151/2 344/152/2 343/153/2 339/154/2 +f 344/151/3 342/152/3 341/153/3 343/154/3 +f 342/151/4 338/152/4 337/153/4 341/154/4 +f 337/151/5 339/152/5 343/153/5 341/154/5 +f 342/155/6 344/156/6 340/157/6 338/158/6 +f 346/135/4 348/136/4 347/137/4 345/138/4 +f 348/135/1 352/136/1 351/137/1 347/138/1 +f 352/135/2 350/136/2 349/137/2 351/138/2 +f 350/135/3 346/136/3 345/137/3 349/138/3 +f 345/135/5 347/136/5 351/137/5 349/138/5 +f 350/135/6 352/136/6 348/137/6 346/138/6 +f 354/139/4 356/140/4 355/141/4 353/142/4 +f 356/139/1 360/140/1 359/141/1 355/142/1 +f 360/139/2 358/140/2 357/141/2 359/142/2 +f 358/139/3 354/140/3 353/141/3 357/142/3 +f 353/143/5 355/144/5 359/145/5 357/146/5 +f 358/147/6 360/148/6 356/149/6 354/150/6 +f 362/151/4 364/152/4 363/153/4 361/154/4 +f 364/151/1 368/152/1 367/153/1 363/154/1 +f 368/151/2 366/152/2 365/153/2 367/154/2 +f 366/151/3 362/152/3 361/153/3 365/154/3 +f 361/151/5 363/152/5 367/153/5 365/154/5 +f 366/155/6 368/156/6 364/157/6 362/158/6 +f 370/135/3 372/136/3 371/137/3 369/138/3 +f 372/135/4 376/136/4 375/137/4 371/138/4 +f 376/135/1 374/136/1 373/137/1 375/138/1 +f 374/135/2 370/136/2 369/137/2 373/138/2 +f 369/135/5 371/136/5 375/137/5 373/138/5 +f 374/135/6 376/136/6 372/137/6 370/138/6 +f 378/139/3 380/140/3 379/141/3 377/142/3 +f 380/139/4 384/140/4 383/141/4 379/142/4 +f 384/139/1 382/140/1 381/141/1 383/142/1 +f 382/139/2 378/140/2 377/141/2 381/142/2 +f 377/143/5 379/144/5 383/145/5 381/146/5 +f 382/147/6 384/148/6 380/149/6 378/150/6 +f 386/151/3 388/152/3 387/153/3 385/154/3 +f 388/151/4 392/152/4 391/153/4 387/154/4 +f 392/151/1 390/152/1 389/153/1 391/154/1 +f 390/151/2 386/152/2 385/153/2 389/154/2 +f 385/151/5 387/152/5 391/153/5 389/154/5 +f 390/155/6 392/156/6 388/157/6 386/158/6 +f 394/135/2 396/136/2 395/137/2 393/138/2 +f 396/135/3 400/136/3 399/137/3 395/138/3 +f 400/135/4 398/136/4 397/137/4 399/138/4 +f 398/135/1 394/136/1 393/137/1 397/138/1 +f 393/135/5 395/136/5 399/137/5 397/138/5 +f 398/135/6 400/136/6 396/137/6 394/138/6 +f 402/139/2 404/140/2 403/141/2 401/142/2 +f 404/139/3 408/140/3 407/141/3 403/142/3 +f 408/139/4 406/140/4 405/141/4 407/142/4 +f 406/139/1 402/140/1 401/141/1 405/142/1 +f 401/143/5 403/144/5 407/145/5 405/146/5 +f 406/147/6 408/148/6 404/149/6 402/150/6 +f 410/151/2 412/152/2 411/153/2 409/154/2 +f 412/151/3 416/152/3 415/153/3 411/154/3 +f 416/151/4 414/152/4 413/153/4 415/154/4 +f 414/151/1 410/152/1 409/153/1 413/154/1 +f 409/151/5 411/152/5 415/153/5 413/154/5 +f 414/155/6 416/156/6 412/157/6 410/158/6 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/texture.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/texture.png new file mode 100644 index 00000000..e69de29b diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.mtl new file mode 100644 index 00000000..99650b53 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.mtl @@ -0,0 +1,11 @@ +newmtl tier3rocket +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/tier3rocket + +newmtl tier3rocket_tier3rocket.png +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/tier3rocket diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.obj new file mode 100644 index 00000000..1243f44b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.obj @@ -0,0 +1,1685 @@ +mtllib tier3rocket.mtl +o Cube +v -0.059738 6.493113 0.059739 +v -0.059738 6.493113 -0.059737 +v -0.059738 6.373637 0.059739 +v 0.059738 6.493113 -0.059737 +v -0.059738 6.373637 -0.059737 +v 0.059738 6.493113 0.059739 +v 0.059738 6.373637 -0.059737 +v 0.059738 6.373637 0.059739 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl tier3rocket +f 1/1/1 2/2/1 3/3/1 +f 2/1/2 4/2/2 5/3/2 +f 4/1/3 6/2/3 7/3/3 +f 6/1/4 1/2/4 8/3/4 +f 3/1/5 5/2/5 8/3/5 +f 6/1/6 4/2/6 1/3/6 +f 2/1/1 5/2/1 3/3/1 +f 4/1/2 7/2/2 5/3/2 +f 6/1/3 8/2/3 7/3/3 +f 1/1/4 3/2/4 8/3/4 +f 5/1/5 7/2/5 8/3/5 +f 4/1/6 2/2/6 1/3/6 +o NoseCone +v -1.005998 3.988554 0.427022 +v -0.409399 3.988554 1.013298 +v -0.687662 4.680286 0.291896 +v 0.409399 3.988554 -1.013296 +v -0.427021 3.988554 -1.005997 +v 0.279850 4.680286 -0.692651 +v 1.013297 3.988554 0.409400 +v 1.005998 3.988554 -0.427020 +v 0.692652 4.680286 0.279851 +v 0.427021 3.988554 1.005999 +v -0.279850 4.680286 0.692653 +v -0.692652 4.680286 -0.279849 +v -0.022676 5.204226 -0.009161 +v -0.291896 4.680286 -0.687661 +v -0.009556 5.204226 -0.022511 +v 0.687662 4.680286 -0.291894 +v 0.022512 5.204226 -0.009555 +v 0.291895 4.680286 0.687663 +v 0.009556 5.204226 0.022513 +v -1.013297 3.988554 -0.409398 +v 0.022676 5.204226 0.009163 +v 0.009162 5.204226 -0.022675 +v -0.022512 5.204226 0.009557 +v -0.009162 5.204226 0.022677 +vt 0.001993 0.906839 +vt 0.091636 0.906839 +vt 0.001993 0.996482 +vt 0.001815 0.903609 +vt 0.094865 0.903609 +vt 0.001815 0.996660 +vt 0.001172 0.902966 +vt 0.095508 0.902966 +vt 0.001172 0.997302 +vt 0.091636 0.996482 +vt 0.094865 0.996660 +vt 0.095508 0.997302 +vn -0.636300 0.419300 0.647500 +vn -0.007900 0.419300 -0.907800 +vn 0.907800 0.419300 -0.007900 +vn 0.007900 0.419300 0.907800 +vn -0.617400 0.786700 0.005400 +vn -0.440400 0.786700 -0.432700 +vn 0.432700 0.786700 -0.440400 +vn 0.440400 0.786700 0.432700 +vn 0.647500 0.419300 0.636300 +vn 0.636300 0.419300 -0.647500 +vn -0.647500 0.419300 -0.636300 +vn -0.907800 0.419300 0.007900 +vn 0.617400 0.786700 -0.005400 +vn -0.005400 0.786700 -0.617400 +vn -0.432700 0.786700 0.440400 +vn 0.005400 0.786700 0.617400 +vn -0.440300 0.786700 -0.432700 +vn 0.432800 0.786600 -0.440400 +vn 0.440300 0.786700 0.432700 +vn -0.432800 0.786600 0.440400 +usemtl tier3rocket_tier3rocket.png +f 9/4/7 10/5/7 11/6/7 +f 12/4/8 13/5/8 14/6/8 +f 15/4/9 16/5/9 17/6/9 +f 10/7/10 18/8/10 19/9/10 +f 20/4/11 11/5/11 21/6/11 +f 22/4/12 20/5/12 23/6/12 +f 24/4/13 14/5/13 25/6/13 +f 26/4/14 17/5/14 27/6/14 +f 18/4/15 15/5/15 26/6/15 +f 16/4/16 12/5/16 24/6/16 +f 13/4/17 28/5/17 22/6/17 +f 28/4/18 9/5/18 20/6/18 +f 17/4/19 24/5/19 29/6/19 +f 14/4/20 22/5/20 30/6/20 +f 11/4/21 19/5/21 31/6/21 +f 26/10/22 27/11/22 19/12/22 +f 10/5/7 19/13/7 11/6/7 +f 13/5/8 22/13/8 14/6/8 +f 16/5/9 24/13/9 17/6/9 +f 18/8/10 26/14/10 19/9/10 +f 11/5/11 31/13/11 21/6/11 +f 20/5/23 21/13/23 23/6/23 +f 14/5/24 30/13/24 25/6/24 +f 17/5/25 29/13/25 27/6/25 +f 15/5/15 17/13/15 26/6/15 +f 12/5/16 14/13/16 24/6/16 +f 28/5/17 20/13/17 22/6/17 +f 9/5/18 11/13/18 20/6/18 +f 24/5/19 25/13/19 29/6/19 +f 22/5/20 23/13/20 30/6/20 +f 19/5/26 32/13/26 31/6/26 +f 27/11/22 32/15/22 19/12/22 +o Boosters +v 0.794857 0.942041 1.014215 +v 0.571929 0.942041 0.791287 +v 0.794857 0.793944 1.014215 +v 0.794857 0.942041 0.568358 +v 0.571929 0.793944 0.791287 +v 1.017786 0.942041 0.791287 +v 0.794857 0.793944 0.568358 +v 1.017786 0.793944 0.791287 +v 0.795105 0.797082 1.089688 +v 0.500522 0.797083 0.795105 +v 0.795105 0.082555 1.089688 +v 0.795105 0.797083 0.500522 +v 0.500522 0.082555 0.795105 +v 1.089688 0.797082 0.795105 +v 0.795105 0.082555 0.500522 +v 1.089688 0.082555 0.795105 +v -1.014215 0.942041 0.794857 +v -0.791287 0.942041 0.571929 +v -1.014215 0.793944 0.794857 +v -0.568358 0.942041 0.794858 +v -0.791287 0.793944 0.571929 +v -0.791287 0.942041 1.017786 +v -0.568358 0.793944 0.794858 +v -0.791287 0.793944 1.017786 +v -1.089688 0.797082 0.795105 +v -0.795105 0.797083 0.500522 +v -1.089688 0.082555 0.795105 +v -0.500522 0.797083 0.795105 +v -0.795105 0.082555 0.500522 +v -0.795105 0.797082 1.089688 +v -0.500522 0.082555 0.795105 +v -0.795105 0.082555 1.089688 +v 1.014215 0.942041 -0.794857 +v 0.791287 0.942041 -0.571929 +v 1.014215 0.793944 -0.794857 +v 0.568358 0.942041 -0.794857 +v 0.791287 0.793944 -0.571929 +v 0.791287 0.942041 -1.017786 +v 0.568358 0.793944 -0.794857 +v 0.791287 0.793944 -1.017786 +v 1.089688 0.797082 -0.795105 +v 0.795105 0.797083 -0.500522 +v 1.089688 0.082555 -0.795105 +v 0.500522 0.797083 -0.795105 +v 0.795105 0.082555 -0.500522 +v 0.795105 0.797082 -1.089687 +v 0.500522 0.082555 -0.795105 +v 0.795105 0.082555 -1.089687 +v -0.794858 0.942041 -1.014215 +v -0.571929 0.942041 -0.791287 +v -0.794858 0.793944 -1.014215 +v -0.794858 0.942041 -0.568358 +v -0.571929 0.793944 -0.791287 +v -1.017786 0.942041 -0.791287 +v -0.794858 0.793944 -0.568358 +v -1.017786 0.793944 -0.791287 +v -0.795105 0.797082 -1.089688 +v -0.500522 0.797083 -0.795105 +v -0.795105 0.082555 -1.089688 +v -0.795105 0.797083 -0.500522 +v -0.500522 0.082555 -0.795105 +v -1.089688 0.797082 -0.795105 +v -0.795105 0.082555 -0.500522 +v -1.089688 0.082555 -0.795105 +vt 0.290886 0.977095 +vt 0.312896 0.977095 +vt 0.290886 0.984134 +vt 0.289664 0.926608 +vt 0.317723 0.926608 +vt 0.289664 0.954667 +vt 0.293920 0.984931 +vt 0.308879 0.984931 +vt 0.293920 0.999890 +vt 0.352239 0.956958 +vt 0.333462 0.956958 +vt 0.352239 0.925955 +vt 0.293585 0.956958 +vt 0.274808 0.956958 +vt 0.293585 0.925955 +vt 0.313082 0.956958 +vt 0.294305 0.956958 +vt 0.313082 0.925955 +vt 0.332742 0.956958 +vt 0.313966 0.956958 +vt 0.332742 0.925955 +vt 0.313900 0.957561 +vt 0.332808 0.957561 +vt 0.313900 0.976470 +vt 0.294223 0.957381 +vt 0.313163 0.957381 +vt 0.294223 0.976322 +vt 0.312896 0.984134 +vt 0.317723 0.954667 +vt 0.308879 0.999890 +vt 0.333462 0.925955 +vt 0.274808 0.925955 +vt 0.294305 0.925955 +vt 0.313966 0.925955 +vt 0.332808 0.976470 +vt 0.313163 0.976322 +vn -0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.707100 -0.000000 0.707100 +vn 0.000000 -1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +usemtl tier3rocket_tier3rocket.png +f 33/16/27 34/17/27 35/18/27 +f 34/16/28 36/17/28 37/18/28 +f 36/16/29 38/17/29 39/18/29 +f 38/16/30 33/17/30 40/18/30 +f 35/19/31 37/20/31 40/21/31 +f 38/22/32 36/23/32 33/24/32 +f 41/25/27 42/26/27 43/27/27 +f 42/28/28 44/29/28 45/30/28 +f 44/31/29 46/32/29 47/33/29 +f 46/34/30 41/35/30 48/36/30 +f 43/37/31 45/38/31 48/39/31 +f 46/40/32 44/41/32 41/42/32 +f 49/16/28 50/17/28 51/18/28 +f 50/16/29 52/17/29 53/18/29 +f 52/16/30 54/17/30 55/18/30 +f 54/16/27 49/17/27 56/18/27 +f 51/19/31 53/20/31 56/21/31 +f 54/22/32 52/23/32 49/24/32 +f 57/25/28 58/26/28 59/27/28 +f 58/28/29 60/29/29 61/30/29 +f 60/31/30 62/32/30 63/33/30 +f 62/34/27 57/35/27 64/36/27 +f 59/37/31 61/38/31 64/39/31 +f 62/40/32 60/41/32 57/42/32 +f 65/16/30 66/17/30 67/18/30 +f 66/16/27 68/17/27 69/18/27 +f 68/16/28 70/17/28 71/18/28 +f 70/16/29 65/17/29 72/18/29 +f 67/19/31 69/20/31 72/21/31 +f 70/22/32 68/23/32 65/24/32 +f 73/25/30 74/26/30 75/27/30 +f 74/28/27 76/29/27 77/30/27 +f 76/31/28 78/32/28 79/33/28 +f 78/34/29 73/35/29 80/36/29 +f 75/37/31 77/38/31 80/39/31 +f 78/40/32 76/41/32 73/42/32 +f 81/16/29 82/17/29 83/18/29 +f 82/16/30 84/17/30 85/18/30 +f 84/16/27 86/17/27 87/18/27 +f 86/16/28 81/17/28 88/18/28 +f 83/19/31 85/20/31 88/21/31 +f 86/22/32 84/23/32 81/24/32 +f 89/25/29 90/26/29 91/27/29 +f 90/28/30 92/29/30 93/30/30 +f 92/31/27 94/32/27 95/33/27 +f 94/34/28 89/35/28 96/36/28 +f 91/37/31 93/38/31 96/39/31 +f 94/40/32 92/41/32 89/42/32 +f 34/17/27 37/43/27 35/18/27 +f 36/17/28 39/43/28 37/18/28 +f 38/17/29 40/43/29 39/18/29 +f 33/17/30 35/43/30 40/18/30 +f 37/20/31 39/44/31 40/21/31 +f 36/23/32 34/45/32 33/24/32 +f 42/26/27 45/46/27 43/27/27 +f 44/29/28 47/47/28 45/30/28 +f 46/32/29 48/48/29 47/33/29 +f 41/35/30 43/49/30 48/36/30 +f 45/38/31 47/50/31 48/39/31 +f 44/41/32 42/51/32 41/42/32 +f 50/17/28 53/43/28 51/18/28 +f 52/17/29 55/43/29 53/18/29 +f 54/17/30 56/43/30 55/18/30 +f 49/17/27 51/43/27 56/18/27 +f 53/20/31 55/44/31 56/21/31 +f 52/23/32 50/45/32 49/24/32 +f 58/26/28 61/46/28 59/27/28 +f 60/29/29 63/47/29 61/30/29 +f 62/32/30 64/48/30 63/33/30 +f 57/35/27 59/49/27 64/36/27 +f 61/38/31 63/50/31 64/39/31 +f 60/41/32 58/51/32 57/42/32 +f 66/17/30 69/43/30 67/18/30 +f 68/17/27 71/43/27 69/18/27 +f 70/17/28 72/43/28 71/18/28 +f 65/17/29 67/43/29 72/18/29 +f 69/20/31 71/44/31 72/21/31 +f 68/23/32 66/45/32 65/24/32 +f 74/26/30 77/46/30 75/27/30 +f 76/29/27 79/47/27 77/30/27 +f 78/32/28 80/48/28 79/33/28 +f 73/35/29 75/49/29 80/36/29 +f 77/38/31 79/50/31 80/39/31 +f 76/41/32 74/51/32 73/42/32 +f 82/17/29 85/43/29 83/18/29 +f 84/17/30 87/43/30 85/18/30 +f 86/17/27 88/43/27 87/18/27 +f 81/17/28 83/43/28 88/18/28 +f 85/20/31 87/44/31 88/21/31 +f 84/23/32 82/45/32 81/24/32 +f 90/26/29 93/46/29 91/27/29 +f 92/29/30 95/47/30 93/30/30 +f 94/32/27 96/48/27 95/33/27 +f 89/35/28 91/49/28 96/36/28 +f 93/38/31 95/50/31 96/39/31 +f 92/41/32 90/51/32 89/42/32 +o Rocket +v 1.489663 -0.260650 0.081097 +v 1.489663 -0.260650 -0.081097 +v 1.804969 -0.679494 0.081097 +v 1.489663 0.844951 0.081097 +v 0.879181 1.328376 0.081097 +v 0.879181 1.328376 -0.081097 +v 0.879181 0.222775 0.081097 +v 1.489663 0.844951 -0.081097 +v 0.879181 0.222775 -0.081097 +v 1.804969 0.426107 -0.081096 +v 1.804969 0.426107 0.081097 +v 1.804969 -0.679494 -0.081096 +v -1.489663 -0.260650 -0.081097 +v -1.489663 -0.260650 0.081097 +v -1.804969 -0.679494 -0.081097 +v -1.489663 0.844951 -0.081097 +v -0.879181 1.328376 -0.081097 +v -0.879181 1.328376 0.081097 +v -0.879181 0.222774 -0.081097 +v -1.489663 0.844951 0.081097 +v -0.879181 0.222774 0.081097 +v -1.804969 0.426107 0.081097 +v -1.804969 0.426107 -0.081097 +v -1.804969 -0.679494 0.081097 +v -0.927184 0.018899 -0.374607 +v -0.920505 0.018899 0.390731 +v -0.927184 0.018899 -0.374607 +v -0.390731 0.018899 -0.920505 +v -0.390731 0.018899 -0.920505 +v -0.836280 0.018616 0.354980 +v -0.842348 0.018616 -0.340331 +v -0.836280 0.018616 0.354980 +v 0.842348 0.018616 0.340331 +v 0.354980 0.018616 0.836280 +v 0.842348 0.018616 0.340331 +v 0.920505 0.018899 -0.390731 +v 0.374607 0.018899 -0.927184 +v 0.920505 0.018899 -0.390731 +v 0.390731 0.018899 0.920505 +v 0.927184 0.018899 0.374607 +v 0.390731 0.018899 0.920505 +v -0.340331 0.018616 0.842348 +v -0.007325 0.018616 -0.839314 +v 0.340331 0.018616 -0.842348 +v -0.007325 0.018616 -0.839314 +v 0.836280 0.018616 -0.354980 +v 0.340331 0.018616 -0.842348 +v 0.374607 -0.077696 -0.927184 +v 0.920505 -0.077696 -0.390731 +v 0.927184 -0.077696 0.374607 +v 0.390731 -0.077696 0.920505 +v -0.374607 -0.077696 0.927184 +v -0.374607 0.018899 0.927184 +v -0.920505 -0.077696 0.390731 +v -0.927184 -0.077696 -0.374607 +v -0.390731 -0.077696 -0.920505 +v 0.295850 0.018899 0.921333 +v 0.295850 0.018899 0.921333 +v -0.263655 0.018616 0.841679 +v -0.263655 0.018616 0.841679 +v 0.927184 0.018899 0.374607 +v -0.354980 0.018616 -0.836280 +v -0.842348 0.018616 -0.340331 +v 0.836280 0.018616 -0.354980 +v 0.374607 0.018899 -0.927184 +v -0.340331 0.018616 0.842348 +v -0.920505 0.018899 0.390731 +v -0.842348 3.988270 -0.340330 +v -0.354980 3.988270 -0.836279 +v -0.575797 4.680093 -0.232636 +v 0.008744 5.204226 0.020600 +v -0.008383 5.204226 0.020750 +v 0.009556 5.204226 0.022513 +v 0.008383 5.204226 -0.020748 +v 0.020599 5.204226 -0.008743 +v 0.009162 5.204226 -0.022675 +v 0.340331 3.988270 -0.842347 +v 0.836280 3.988270 -0.354979 +v 0.232637 4.680093 -0.575796 +v 0.842348 3.988270 0.340332 +v 0.571650 4.680093 -0.242650 +v 0.920505 3.988554 -0.390730 +v 0.374607 3.988554 -0.927183 +v 1.005998 3.988554 -0.427020 +v -0.836280 3.988270 0.354981 +v -0.571650 4.680093 0.242652 +v -0.374607 3.988554 0.927185 +v 0.390731 3.988554 0.920506 +v -0.409399 3.988554 1.013298 +v 0.020749 5.204226 0.008384 +v 0.022676 5.204226 0.009163 +v 0.927184 3.988554 0.374608 +v 0.427021 3.988554 1.005999 +v 0.575797 4.680093 0.232638 +v 0.242651 4.680093 0.571651 +v 0.018850 5.204220 0.007617 +v -0.020599 5.204226 0.008745 +v -0.020749 5.204226 -0.008382 +v -0.022512 5.204226 0.009557 +v -0.232637 4.680093 0.575798 +v -0.007616 5.204220 0.018851 +v -0.920505 3.988554 0.390732 +v -1.005998 3.988554 0.427022 +v -0.242651 4.680093 -0.571649 +v -0.018850 5.204220 -0.007615 +v -0.008744 5.204226 -0.020598 +v -0.022676 5.204226 -0.009161 +v -0.340331 3.988270 0.842349 +v -0.390731 3.988554 -0.920504 +v 0.409399 3.988554 -1.013296 +v 0.354980 3.988270 0.836281 +v 0.022512 5.204226 -0.009555 +v 1.013297 3.988554 0.409400 +v -0.005007 4.680093 -0.573722 +v 0.007616 5.204220 -0.018849 +v 0.295850 1.948675 0.921333 +v 0.390731 1.948675 0.920505 +v 0.295850 2.763297 0.921333 +v -0.018714 5.204220 0.007945 +v -0.009162 5.204226 0.022677 +v 0.018714 5.204220 -0.007943 +v -0.009556 5.204226 -0.022511 +v -0.927184 3.988554 -0.374606 +v -1.013297 3.988554 -0.409398 +v -0.278951 0.018899 0.926349 +v -0.374607 0.018899 0.927184 +v -0.427021 3.988554 -1.005997 +v -0.278951 0.018899 0.926349 +v 0.144246 4.680093 0.572509 +v 0.007944 5.204220 0.018715 +v 0.051816 6.389805 0.051816 +v 0.051816 6.389805 -0.051814 +v -0.051816 6.389805 0.051816 +v 0.051816 5.141355 0.051816 +v 0.051816 5.141355 -0.051814 +v -0.051816 6.389805 -0.051814 +v -0.051816 5.141355 -0.051814 +v -0.051816 5.141355 0.051816 +v -0.374607 1.948675 0.927184 +v -0.278951 1.948675 0.926349 +v -0.374607 2.763297 0.927184 +v 0.390731 2.763297 0.920505 +v -0.354980 2.744025 -0.836280 +v 0.836280 2.744025 -0.354980 +v 0.354980 2.744025 0.836280 +v 0.211021 3.988270 0.837537 +v -0.842348 2.744025 -0.340331 +v -0.278951 2.763297 0.926349 +v -0.273804 2.765314 0.841679 +v 0.842348 2.744025 0.340331 +v 0.340331 2.744025 -0.842348 +v -0.007325 3.988270 -0.839313 +v -0.273804 1.964659 0.841679 +v -0.340331 1.992424 0.842348 +v -0.340331 2.744025 0.842348 +v -0.354980 0.018616 -0.836280 +v 0.211021 0.018616 0.837536 +v 0.211021 0.018616 0.837536 +v 0.293480 2.765314 0.837536 +v 0.354980 0.018616 0.836280 +v 0.354980 1.992424 0.836280 +v 0.293480 1.964659 0.837536 +v -0.836280 2.744025 0.354980 +v 0.150881 -0.323499 -0.373444 +v 0.370754 -0.323499 -0.157376 +v 0.373444 -0.323499 0.150881 +v -0.157376 -0.323499 -0.370754 +v -0.373444 -0.323499 -0.150881 +v -0.370754 -0.323499 0.157376 +v -0.150881 -0.323499 0.373444 +v -0.278951 -0.077696 0.926349 +v -0.507571 -0.843672 -0.073998 +v -0.581607 -0.843672 0.000037 +v -0.352811 -0.659209 -0.000582 +v -0.965412 -1.322610 0.139715 +v -0.918290 -1.070062 0.000978 +v -1.103631 -1.322610 0.001495 +v -0.535294 -0.384754 0.076890 +v -0.612042 -0.384754 0.000142 +v 0.072953 -0.843672 -0.508632 +v 0.000008 -0.843672 -0.581577 +v 0.000673 -0.659209 -0.354066 +v -0.508662 -0.843672 0.072983 +v -0.534147 -0.162744 -0.077753 +v -0.612042 -0.162744 0.000142 +v 0.000673 -0.659209 0.352902 +v 0.000008 -0.843672 0.581652 +v 0.074043 -0.843672 0.507617 +v -0.534147 -0.384754 -0.077753 +v 0.114042 -1.070062 -0.801265 +v -0.001003 -1.070062 -0.916309 +v 0.136661 -1.322610 -0.962357 +v -0.001559 -1.322610 -1.100577 +v 0.076643 -0.384754 -0.535047 +v -0.000105 -0.384754 -0.611795 +v -0.000105 -0.162744 -0.611795 +v -0.001003 -1.070062 0.918265 +v 0.115761 -1.070062 0.801501 +v 0.010582 -1.531285 -1.052691 +v 1.053110 -1.531285 -0.010163 +v 0.007897 -1.377602 -0.785571 +v -0.001646 -1.531285 -1.129241 +v 0.000212 -1.531285 1.042736 +v 0.000158 -1.377602 0.778141 +v -0.803245 -1.070062 0.116022 +v -1.132462 -1.531285 0.001576 +v -1.042316 -1.531285 0.000208 +v -1.088115 -1.531285 0.045922 +v -0.001646 -1.531285 1.132392 +v -0.045519 -1.531285 1.088519 +v 0.042701 -1.531285 -1.084894 +v 1.085297 -1.531285 -0.042298 +v -0.777828 -1.377602 0.000155 +v -0.001559 -1.322610 1.103568 +v 0.142299 -1.531285 0.988447 +v 0.138727 -1.322610 0.963282 +v -0.000105 -0.162744 0.612079 +v -0.000105 -0.384754 0.612079 +v 0.077790 -0.162744 0.534184 +v 0.785883 -1.377602 -0.007584 +v -0.963346 -1.322610 -0.138791 +v -0.988517 -1.531285 -0.142369 +v -0.801526 -1.070062 -0.115786 +v 0.077790 -0.384754 0.534184 +v 0.081097 -0.260650 -1.489663 +v -0.081096 -0.260650 -1.489663 +v 0.081097 -0.679494 -1.804969 +v 0.081097 0.844951 -1.489663 +v 0.081097 1.328376 -0.879181 +v -0.081097 1.328376 -0.879181 +v 0.081097 0.222775 -0.879181 +v -0.081096 0.844951 -1.489663 +v -0.081097 0.222775 -0.879181 +v -0.081096 0.426107 -1.804969 +v 0.081097 0.426107 -1.804969 +v -0.081096 -0.679494 -1.804969 +v -0.081097 -0.260650 1.489663 +v 0.081096 -0.260650 1.489663 +v -0.081097 -0.679494 1.804969 +v -0.081097 0.844951 1.489663 +v -0.081097 1.328376 0.879181 +v 0.081097 1.328376 0.879181 +v -0.081097 0.222775 0.879181 +v 0.081096 0.844951 1.489663 +v 0.081097 0.222775 0.879181 +v 0.081096 0.426107 1.804969 +v -0.081097 0.426107 1.804969 +v 0.081096 -0.679494 1.804969 +v -0.007944 5.204220 -0.018713 +v -0.000164 5.204220 -0.018781 +v -0.180225 4.680093 0.575341 +v 0.004722 5.204220 0.018744 +v -0.005900 5.204220 0.018836 +v -0.354980 1.992424 -0.836280 +v -0.842348 1.992424 -0.340331 +v 0.836280 1.992424 -0.354980 +v 0.340331 1.992424 -0.842348 +v -0.263655 3.988270 0.841680 +v -0.836280 1.992424 0.354980 +v 0.842348 1.992424 0.340331 +v 0.157376 -0.323499 0.370754 +v -0.112354 -0.323499 0.373108 +v 0.119160 -0.323499 0.371088 +v 0.295850 -0.077696 0.921333 +v -0.067267 -0.843672 -0.514302 +v -0.040214 -0.659209 -0.313179 +v -0.307815 -0.659209 -0.045578 +v -0.139318 -1.322610 0.965809 +v -0.115663 -1.070062 0.803604 +v -0.076597 -0.384754 0.535587 +v -0.043512 -0.659209 0.308717 +v -0.308478 -0.659209 0.043752 +v 0.508921 -0.843672 -0.072664 +v 0.581622 -0.843672 0.000037 +v 0.354157 -0.659209 -0.000582 +v 0.309972 -0.659209 -0.044767 +v 0.045006 -0.659209 -0.309732 +v -0.072694 -0.843672 0.508950 +v -0.070887 -0.162744 -0.541013 +v -0.070887 -0.384754 -0.541013 +v 0.514348 -0.843672 0.067312 +v 0.313270 -0.659209 0.040305 +v 0.045669 -0.659209 0.307906 +v 0.801623 -1.070062 -0.113683 +v 0.916284 -1.070062 0.000978 +v 0.962754 -1.322610 -0.136264 +v 1.100514 -1.322610 0.001495 +v 0.076643 -0.162744 -0.535047 +v 0.611832 -0.384754 0.000142 +v 0.535340 -0.162744 -0.076350 +v 0.611832 -0.162744 0.000142 +v 0.535340 -0.384754 -0.076350 +v 0.810183 -1.070062 0.107079 +v 1.129171 -1.531285 0.001576 +v -0.132446 -1.531285 -0.998440 +v 0.998371 -1.531285 0.132376 +v 0.973038 -1.322610 0.128971 +v 0.541050 -0.384754 0.070924 +v 0.541050 -0.162744 0.070924 +v -0.129035 -1.322610 -0.973102 +v -0.107104 -1.070062 -0.810208 +v -0.535294 -0.162744 0.076891 +v -0.076597 -0.162744 0.535587 +vt 0.238862 0.761269 +vt 0.196218 0.761265 +vt 0.238861 0.739248 +vt 0.294707 0.718374 +vt 0.298494 0.672007 +vt 0.332244 0.738537 +vt 0.151118 0.810854 +vt 0.108474 0.810854 +vt 0.151118 0.768209 +vt 0.112259 0.765651 +vt 0.108474 0.719262 +vt 0.145988 0.699058 +vt 0.196218 0.803904 +vt 0.292148 0.736713 +vt 0.249504 0.736691 +vt 0.292148 0.694061 +vt 0.545828 0.446068 +vt 0.545828 0.488713 +vt 0.503183 0.446068 +vt 0.336031 0.765570 +vt 0.249504 0.694039 +vt 0.292140 0.672029 +vt 0.149773 0.672007 +vt 0.523389 0.764019 +vt 0.566033 0.764015 +vt 0.523388 0.786048 +vt 0.152332 0.718369 +vt 0.156119 0.672007 +vt 0.189870 0.738528 +vt 0.293387 0.768128 +vt 0.336031 0.768128 +vt 0.293387 0.810773 +vt 0.342375 0.765644 +vt 0.338590 0.719256 +vt 0.376107 0.699057 +vt 0.566033 0.721366 +vt 0.196224 0.672029 +vt 0.238868 0.672007 +vt 0.196224 0.714666 +vt 0.523388 0.788607 +vt 0.566032 0.788607 +vt 0.523388 0.831251 +vt 0.193658 0.765558 +vt 0.238868 0.714644 +vt 0.196216 0.736685 +vt 0.379892 0.672007 +vt 0.000000 0.000000 +vt 0.846005 0.001279 +vt 0.811658 0.312313 +vt 0.811658 0.129499 +vt 0.370970 0.257722 +vt 0.509820 0.257722 +vt 0.370970 0.396572 +vt 0.336789 0.131641 +vt 0.336763 0.001279 +vt 0.363459 0.159975 +vt 0.519132 0.442630 +vt 0.519157 0.314403 +vt 0.545811 0.372567 +vt 0.519157 0.131590 +vt 0.545828 0.284916 +vt 0.837153 0.789469 +vt 0.967509 0.789469 +vt 0.837153 0.919826 +vt 0.336789 0.314455 +vt 0.363459 0.284939 +vt 0.978379 0.773952 +vt 0.954901 0.863031 +vt 0.939617 0.714702 +vt 0.921698 0.864045 +vt 0.898220 0.776398 +vt 0.937762 0.717652 +vt 0.898220 0.651434 +vt 0.921698 0.562354 +vt 0.936993 0.710691 +vt 0.336763 0.442630 +vt 0.363441 0.372555 +vt 0.519132 0.001279 +vt 0.545828 0.159952 +vt 0.938300 0.561847 +vt 0.954901 0.561341 +vt 0.938849 0.707742 +vt 0.154354 0.181404 +vt 0.174260 0.181404 +vt 0.154354 0.312005 +vt 0.936993 0.714782 +vt 0.978379 0.648987 +vt 0.939617 0.710611 +vt 0.948027 0.863241 +vt 0.938849 0.717618 +vt 0.240281 0.445189 +vt 0.240281 0.472436 +vt 0.233042 0.445189 +vt 0.509707 0.769485 +vt 0.502469 0.769481 +vt 0.509707 0.721371 +vt 0.287865 0.787425 +vt 0.260618 0.787426 +vt 0.287865 0.739271 +vt 0.509707 0.820164 +vt 0.502470 0.820158 +vt 0.509707 0.772049 +vt 0.193658 0.816270 +vt 0.166411 0.816270 +vt 0.193658 0.768116 +vt 0.028321 0.007837 +vt 0.178223 0.007837 +vt 0.028321 0.484351 +vt 0.179118 0.486593 +vt 0.029476 0.486593 +vt 0.179118 0.327396 +vt 0.179956 0.002101 +vt 0.179956 0.234692 +vt 0.028639 0.002101 +vt 0.288771 0.001279 +vt 0.471165 0.314403 +vt 0.057323 0.777070 +vt 0.067384 0.825016 +vt 0.057323 0.825022 +vt 0.288797 0.131641 +vt 0.316395 0.476609 +vt 0.316395 0.445189 +vt 0.338656 0.476687 +vt 0.471140 0.001279 +vt 0.471165 0.131590 +vt 0.431039 0.777043 +vt 0.431039 0.824995 +vt 0.406745 0.825013 +vt 0.101265 0.747010 +vt 0.105915 0.748076 +vt 0.105915 0.777043 +vt 0.183648 0.445189 +vt 0.205892 0.446160 +vt 0.205892 0.485801 +vt 0.230483 0.476609 +vt 0.208451 0.476687 +vt 0.230483 0.445189 +vt 0.938293 0.492012 +vt 0.962580 0.491271 +vt 0.067384 0.672029 +vt 0.057323 0.748104 +vt 0.057323 0.672034 +vt 0.952523 0.932929 +vt 0.962580 0.932622 +vt 0.341215 0.485801 +vt 0.341430 0.445628 +vt 0.363459 0.445189 +vt 0.061625 0.747023 +vt 0.288797 0.314455 +vt 0.602160 0.343160 +vt 0.586933 0.286315 +vt 0.586933 0.205267 +vt 0.639658 0.319354 +vt 0.586192 0.319855 +vt 0.623695 0.274946 +vt 0.677464 0.275295 +vt 0.638922 0.257200 +vt 0.677464 0.213487 +vt 0.638922 0.232305 +vt 0.639658 0.170136 +vt 0.623695 0.214845 +vt 0.548386 0.214697 +vt 0.586192 0.170638 +vt 0.586933 0.232793 +vt 0.548386 0.276505 +vt 0.586933 0.257688 +vt 0.602160 0.275148 +vt 0.632975 0.170199 +vt 0.601755 0.804295 +vt 0.594442 0.804295 +vt 0.605771 0.761882 +vt 0.961588 0.080386 +vt 0.951840 0.063377 +vt 0.961588 0.028992 +vt 0.518419 0.539329 +vt 0.505581 0.519808 +vt 0.505581 0.491271 +vt 0.651898 0.777172 +vt 0.651898 0.804295 +vt 0.640691 0.761882 +vt 0.594442 0.777171 +vt 0.287865 0.797678 +vt 0.279309 0.789991 +vt 0.287865 0.789984 +vt 0.605771 0.630446 +vt 0.594442 0.588033 +vt 0.601755 0.588033 +vt 0.513277 0.491271 +vt 0.668385 0.823927 +vt 0.668385 0.866704 +vt 0.949281 0.063338 +vt 0.939533 0.080380 +vt 0.939533 0.028986 +vt 0.512266 0.749903 +vt 0.512266 0.721366 +vt 0.520829 0.721366 +vt 0.577769 0.525630 +vt 0.589303 0.525630 +vt 0.788556 0.507776 +vt 0.788556 0.895418 +vt 0.931483 0.023642 +vt 0.684542 0.895418 +vt 0.577769 0.866704 +vt 0.577769 0.823927 +vt 0.969637 0.023643 +vt 0.684542 0.507776 +vt 0.680022 0.507760 +vt 0.680022 0.491271 +vt 0.680022 0.911741 +vt 0.680022 0.895428 +vt 0.791733 0.507760 +vt 0.791733 0.895428 +vt 0.156027 0.769631 +vt 0.163852 0.768116 +vt 0.163852 0.782335 +vt 0.582451 0.491271 +vt 0.568592 0.491271 +vt 0.360535 0.768208 +vt 0.369091 0.768203 +vt 0.360535 0.775902 +vt 0.362042 0.910078 +vt 0.443408 0.910078 +vt 0.362042 0.991444 +vt 0.568592 0.901054 +vt 0.582451 0.901054 +vt 0.566033 0.519808 +vt 0.553339 0.539329 +vt 0.566033 0.491271 +vt 0.338590 0.768203 +vt 0.346414 0.769522 +vt 0.338590 0.782420 +vt 0.589303 0.866704 +vt 0.249496 0.966807 +vt 0.249496 0.938270 +vt 0.258059 0.966807 +vt 0.518419 0.670765 +vt 0.513277 0.718807 +vt 0.505581 0.718807 +vt 0.196216 0.739244 +vt 0.336031 0.692170 +vt 0.108474 0.768209 +vt 0.149773 0.745446 +vt 0.238862 0.803908 +vt 0.503183 0.488713 +vt 0.298494 0.745407 +vt 0.249496 0.672007 +vt 0.112259 0.692212 +vt 0.566032 0.786045 +vt 0.193658 0.692166 +vt 0.336031 0.810773 +vt 0.379892 0.745445 +vt 0.523389 0.721370 +vt 0.566032 0.831251 +vt 0.156119 0.745399 +vt 0.238861 0.736663 +vt 0.342375 0.692206 +vt 0.928925 0.315893 +vt 0.894578 0.444113 +vt 0.928925 0.133079 +vt 0.846005 0.442630 +vt 0.894578 0.002762 +vt 0.870291 0.443371 +vt 0.851361 0.001443 +vt 0.884521 0.002455 +vt 0.509820 0.396572 +vt 0.363441 0.070865 +vt 0.095508 0.902966 +vt 0.091636 0.996482 +vt 0.967509 0.919826 +vt 0.937762 0.707775 +vt 0.545811 0.070876 +vt 0.938305 0.707758 +vt 0.174260 0.312005 +vt 0.925360 0.863933 +vt 0.938624 0.717625 +vt 0.937882 0.717648 +vt 0.233042 0.472436 +vt 0.502469 0.721366 +vt 0.260618 0.739271 +vt 0.502470 0.772044 +vt 0.166411 0.768116 +vt 0.178223 0.484351 +vt 0.029477 0.327396 +vt 0.028639 0.234692 +vt 0.259781 0.001279 +vt 0.259806 0.131641 +vt 0.183649 0.001279 +vt 0.183674 0.131641 +vt 0.471140 0.442630 +vt 0.442175 0.314403 +vt 0.442150 0.442630 +vt 0.366042 0.314403 +vt 0.366018 0.442630 +vt 0.100557 0.824998 +vt 0.105915 0.824995 +vt 0.101265 0.777867 +vt 0.061625 0.777880 +vt 0.259806 0.314455 +vt 0.183674 0.314455 +vt 0.338656 0.445805 +vt 0.442150 0.001279 +vt 0.442175 0.131590 +vt 0.366018 0.001279 +vt 0.366043 0.131590 +vt 0.382451 0.777077 +vt 0.382451 0.825030 +vt 0.431039 0.748077 +vt 0.382451 0.748111 +vt 0.431039 0.672007 +vt 0.406745 0.672025 +vt 0.382451 0.672042 +vt 0.183864 0.485362 +vt 0.208451 0.445805 +vt 0.914006 0.492754 +vt 0.100557 0.672010 +vt 0.105915 0.672007 +vt 0.919363 0.933941 +vt 0.914006 0.934105 +vt 0.363459 0.484830 +vt 0.288771 0.442630 +vt 0.259781 0.442630 +vt 0.183648 0.442630 +vt 0.623695 0.342503 +vt 0.638922 0.284728 +vt 0.623695 0.146835 +vt 0.638922 0.203680 +vt 0.602160 0.147493 +vt 0.621003 0.146918 +vt 0.604830 0.147411 +vt 0.602160 0.215047 +vt 0.592820 0.170576 +vt 0.604830 0.215022 +vt 0.621003 0.214870 +vt 0.645252 0.804295 +vt 0.636651 0.761882 +vt 0.610216 0.761882 +vt 0.951840 0.404449 +vt 0.961588 0.387551 +vt 0.961588 0.438774 +vt 0.951840 0.106153 +vt 0.951840 0.361815 +vt 0.505581 0.690365 +vt 0.518419 0.654336 +vt 0.518419 0.555814 +vt 0.651898 0.615066 +vt 0.651898 0.588034 +vt 0.640691 0.630446 +vt 0.640691 0.646876 +vt 0.640691 0.745397 +vt 0.594442 0.615066 +vt 0.605771 0.646876 +vt 0.605771 0.745397 +vt 0.279309 0.797685 +vt 0.279309 0.850432 +vt 0.287865 0.843434 +vt 0.287865 0.850425 +vt 0.279309 0.843441 +vt 0.645252 0.588034 +vt 0.636651 0.630446 +vt 0.610216 0.630446 +vt 0.559041 0.491271 +vt 0.549300 0.539329 +vt 0.522864 0.539329 +vt 0.668385 0.568264 +vt 0.668385 0.525630 +vt 0.939533 0.387546 +vt 0.949281 0.404412 +vt 0.939533 0.438768 +vt 0.949281 0.106115 +vt 0.949281 0.361778 +vt 0.520829 0.749903 +vt 0.512266 0.948902 +vt 0.520829 0.920460 +vt 0.520829 0.948902 +vt 0.512266 0.920460 +vt 0.657904 0.525630 +vt 0.931483 0.444113 +vt 0.931483 0.040132 +vt 0.931483 0.427799 +vt 0.577769 0.568264 +vt 0.969637 0.444113 +vt 0.969637 0.040133 +vt 0.969637 0.427799 +vt 0.791733 0.491271 +vt 0.694242 0.491271 +vt 0.778812 0.491271 +vt 0.791733 0.911741 +vt 0.694242 0.911741 +vt 0.778812 0.911741 +vt 0.156027 0.783488 +vt 0.156027 0.878490 +vt 0.163852 0.866894 +vt 0.163852 0.879814 +vt 0.156027 0.865898 +vt 0.677463 0.491271 +vt 0.664870 0.491271 +vt 0.369091 0.775897 +vt 0.369091 0.821656 +vt 0.369091 0.828648 +vt 0.360535 0.828653 +vt 0.360535 0.821661 +vt 0.443408 0.991444 +vt 0.664870 0.901054 +vt 0.677464 0.901054 +vt 0.657904 0.866704 +vt 0.566033 0.690365 +vt 0.566033 0.718807 +vt 0.553339 0.670765 +vt 0.553339 0.654336 +vt 0.553339 0.555814 +vt 0.346414 0.783378 +vt 0.338590 0.866974 +vt 0.346414 0.878374 +vt 0.338590 0.879893 +vt 0.346414 0.865783 +vt 0.258059 0.938270 +vt 0.249496 0.767713 +vt 0.249496 0.739271 +vt 0.258059 0.739271 +vt 0.258059 0.767713 +vt 0.559041 0.718807 +vt 0.549300 0.670765 +vt 0.522864 0.670765 +vn -0.798900 -0.601400 0.000000 +vn 0.000000 -0.000000 1.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.620800 -0.784000 0.000000 +vn 0.620800 0.784000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.798900 0.601400 0.000000 +vn 0.798900 -0.601400 0.000000 +vn 0.620800 -0.784000 0.000000 +vn -0.620800 0.784000 0.000000 +vn -0.798900 0.601400 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.700900 0.000000 -0.713300 +vn 1.000000 0.000000 -0.008700 +vn 0.713300 0.000000 0.700900 +vn -0.700900 0.000000 0.713200 +vn -1.000000 0.000000 0.008700 +vn -0.008700 0.000000 -1.000000 +vn -0.713300 0.000000 -0.700900 +vn 0.665900 -0.358400 0.654300 +vn 0.000000 1.000000 -0.000900 +vn 0.000000 1.000000 0.000200 +vn -0.654300 -0.358400 0.665900 +vn -0.933500 -0.358400 0.008100 +vn -0.000000 -1.000000 0.000000 +vn 0.933500 -0.358400 -0.008100 +vn 0.000000 1.000000 0.000500 +vn -0.489700 -0.727000 -0.481300 +vn 0.481300 -0.727000 -0.489700 +vn 0.489700 -0.727000 0.481300 +vn 0.000000 1.000000 -0.000500 +vn 0.654300 -0.358400 -0.665900 +vn -0.665900 -0.358400 -0.654300 +vn 0.006000 -0.727000 0.686600 +vn 0.008700 -0.000000 1.000000 +vn 0.686600 -0.727000 -0.006000 +vn 0.000000 1.000000 -0.000200 +vn -0.686600 -0.727000 0.006000 +vn -0.481300 -0.727000 0.489700 +vn 0.000000 1.000000 0.000900 +vn -0.006000 -0.727000 -0.686600 +vn -0.700900 -0.000000 0.713300 +vn 0.998200 -0.000000 0.060700 +vn -0.010100 0.000000 -0.999900 +vn -0.000200 -0.999700 -0.023800 +vn -0.999600 0.000000 0.028300 +vn 0.008100 -0.358400 0.933500 +vn -0.008100 -0.358400 -0.933500 +vn 0.001600 0.982300 0.187300 +vn -0.020400 0.000000 -0.999800 +vn -0.003600 -0.913500 -0.406900 +vn -0.290200 -0.913500 -0.285200 +vn -0.406900 -0.913500 0.003600 +vn -0.285200 -0.913500 0.290200 +vn 0.290200 -0.913500 0.285200 +vn 0.406900 -0.913500 -0.003600 +vn 0.285200 -0.913500 -0.290200 +vn 0.003600 -0.913500 0.406900 +vn -0.532200 0.658400 -0.532200 +vn -0.627300 0.461600 0.627300 +vn -0.587500 -0.556500 0.587500 +vn 0.533600 0.656200 -0.533600 +vn -0.531000 0.660400 0.531000 +vn -0.707100 0.000000 -0.707100 +vn 0.532300 0.658200 0.532300 +vn -0.588500 -0.554300 -0.588500 +vn 0.489500 0.721600 -0.489500 +vn 0.628800 0.457400 -0.628800 +vn 0.707100 0.000000 -0.707100 +vn 0.488100 0.723600 0.488100 +vn -0.443600 -0.778800 0.443600 +vn 0.703800 0.096400 -0.703800 +vn -0.448800 -0.772800 -0.448800 +vn -0.486600 0.725600 0.486600 +vn -0.703700 0.097500 0.703700 +vn 0.449000 -0.772500 0.449000 +vn 0.703800 0.096900 0.703800 +vn 0.628100 0.459400 0.628100 +vn 0.707100 -0.000000 0.707100 +vn -0.628000 0.459600 -0.628000 +vn 0.589600 -0.552000 -0.589600 +vn -0.703800 0.097000 -0.703800 +vn 0.448900 -0.772700 -0.448900 +vn -0.488000 0.723700 -0.488000 +vn -0.707100 -0.000000 0.707100 +vn 0.588600 -0.554200 0.588600 +vn 0.000000 -0.601400 0.798900 +vn 0.000000 -0.784000 0.620800 +vn 0.000000 0.784000 -0.620800 +vn 0.000000 0.601400 -0.798900 +vn 0.000000 -0.601400 -0.798900 +vn 0.000000 -0.784000 -0.620800 +vn 0.000000 0.784000 0.620800 +vn 0.000000 0.601400 0.798900 +vn -0.000000 -1.000000 -0.002000 +vn 0.000000 1.000000 0.000400 +vn 0.000000 1.000000 -0.000400 +vn -0.006200 -0.727000 -0.686600 +vn -0.005900 -0.727000 -0.686600 +vn -0.010100 0.000100 -0.999900 +vn -0.007300 0.000100 -1.000000 +vn -0.022800 -0.007000 -0.999700 +vn -0.000200 -0.999700 -0.024100 +vn -0.010100 -0.000100 -0.999900 +vn -0.022300 0.004300 -0.999700 +vn -0.007300 -0.000000 -1.000000 +vn 0.001400 0.982600 0.185600 +vn 0.003500 -0.913500 0.406900 +vn 0.488100 0.723500 0.488100 +usemtl tier3rocket_tier3rocket.png +f 97/52/33 98/53/33 99/54/33 +f 100/55/34 101/56/34 97/57/34 +f 101/58/35 102/59/35 103/60/35 +f 102/61/36 104/62/36 98/63/36 +f 98/53/37 97/52/37 105/64/37 +f 102/65/38 101/66/38 104/67/38 +f 106/68/39 107/69/39 108/70/39 +f 100/55/34 97/57/34 99/71/34 +f 104/67/40 100/72/40 106/73/40 +f 98/63/36 104/62/36 108/74/36 +f 109/75/41 110/76/41 111/77/41 +f 112/78/36 113/79/36 109/80/36 +f 113/81/39 114/82/39 115/83/39 +f 114/84/34 116/85/34 110/86/34 +f 110/76/42 109/75/42 117/87/42 +f 114/88/43 113/89/43 116/90/43 +f 118/91/35 119/92/35 120/93/35 +f 112/78/36 109/80/36 111/94/36 +f 116/90/44 112/95/44 118/96/44 +f 110/86/34 116/85/34 120/97/34 +f 121/98/34 122/98/34 123/98/34 +f 124/98/34 121/98/34 125/98/34 +f 126/98/34 127/98/34 128/98/34 +f 129/98/34 130/98/34 131/98/34 +f 132/98/34 133/98/34 134/98/34 +f 135/98/34 136/98/34 137/98/34 +f 138/99/45 127/100/45 126/101/45 +f 139/98/34 140/98/34 141/98/34 +f 140/98/34 142/98/34 143/98/34 +f 144/102/46 133/103/46 145/104/46 +f 145/102/47 132/103/47 146/104/47 +f 146/102/48 136/103/48 147/104/48 +f 148/102/49 149/103/49 150/104/49 +f 150/102/50 122/103/50 151/104/50 +f 152/102/51 124/103/51 144/104/51 +f 151/102/52 121/103/52 152/104/52 +f 153/98/34 135/98/34 154/98/34 +f 155/98/34 138/98/34 156/98/34 +f 136/98/34 132/98/34 157/98/34 +f 127/98/34 158/98/34 159/98/34 +f 142/98/34 129/98/34 160/98/34 +f 133/98/34 124/98/34 161/98/34 +f 138/98/34 126/98/34 162/98/34 +f 122/98/34 149/98/34 163/98/34 +f 164/105/53 165/106/53 166/107/53 +f 167/98/54 168/98/54 169/98/54 +f 170/98/55 171/98/55 172/98/55 +f 173/108/56 174/109/56 175/110/56 +f 174/109/57 176/111/57 177/112/57 +f 178/113/58 179/114/58 180/115/58 +f 181/116/59 164/105/59 182/117/59 +f 183/113/58 184/114/58 185/115/58 +f 186/98/60 167/98/60 187/98/60 +f 184/113/58 188/114/58 189/115/58 +f 190/118/61 191/119/61 192/120/61 +f 193/98/45 194/98/45 195/98/45 +f 196/121/62 182/122/62 197/123/62 +f 198/113/58 183/114/58 199/115/58 +f 166/124/63 200/125/63 201/126/63 +f 194/98/64 202/98/64 203/98/64 +f 204/127/65 181/116/65 196/128/65 +f 179/113/58 205/114/58 206/115/58 +f 176/111/66 207/129/66 190/130/66 +f 171/98/45 186/98/45 208/98/45 +f 188/113/58 178/114/58 209/115/58 +f 210/131/67 175/132/67 211/133/67 +f 212/134/68 213/135/68 214/136/68 +f 182/122/69 166/124/69 215/137/69 +f 168/98/70 193/98/70 216/98/70 +f 177/138/71 190/118/71 217/139/71 +f 175/132/72 177/138/72 211/133/72 +f 202/98/73 170/98/73 218/98/73 +f 219/113/58 198/114/58 220/115/58 +f 149/98/34 221/98/34 222/98/34 +f 205/113/58 219/114/58 223/115/58 +f 222/102/68 148/103/68 137/104/68 +f 221/98/34 153/98/34 224/98/34 +f 225/140/74 226/141/74 191/119/74 +f 227/142/45 228/143/45 229/144/45 +f 227/145/34 229/146/34 230/147/34 +f 228/148/39 227/149/39 231/150/39 +f 232/151/36 228/152/36 233/153/36 +f 229/154/35 232/155/35 234/156/35 +f 235/134/68 236/135/68 237/136/68 +f 157/157/47 134/158/47 188/159/47 +f 134/157/46 161/158/46 178/159/46 +f 161/157/51 125/158/51 179/159/51 +f 137/157/48 157/158/48 184/159/48 +f 125/157/52 123/158/52 205/159/52 +f 123/157/50 163/158/50 219/159/50 +f 184/160/68 183/161/68 238/162/68 +f 163/157/75 222/158/75 198/159/75 +f 137/163/68 213/164/68 222/165/68 +f 239/166/48 165/106/48 164/105/48 +f 240/167/75 174/109/75 173/108/75 +f 241/168/51 242/169/51 207/170/51 +f 243/171/47 164/105/47 181/116/47 +f 244/172/76 236/173/76 245/174/76 +f 241/175/52 207/129/52 176/111/52 +f 246/176/50 176/111/50 174/109/50 +f 247/177/68 173/178/68 248/179/68 +f 249/180/77 250/181/77 251/182/77 +f 158/98/34 139/98/34 252/98/34 +f 253/98/34 155/98/34 254/98/34 +f 244/183/78 245/184/78 255/185/78 +f 214/186/79 255/187/79 212/188/79 +f 130/98/34 253/98/34 256/98/34 +f 248/189/80 173/190/80 175/132/80 +f 254/191/51 257/192/51 256/193/51 +f 242/194/81 191/119/81 207/195/81 +f 236/196/82 212/197/82 258/198/82 +f 257/192/83 258/199/83 241/168/83 +f 259/200/46 181/116/46 204/127/46 +f 260/201/58 261/202/58 262/203/58 +f 152/204/84 144/205/84 263/206/84 +f 151/207/85 152/204/85 264/208/85 +f 150/209/86 151/207/86 265/210/86 +f 148/211/87 150/209/87 266/212/87 +f 146/213/88 147/214/88 262/215/88 +f 145/216/89 146/213/89 261/217/89 +f 144/205/90 145/216/90 260/218/90 +f 266/212/91 267/219/91 148/211/91 +f 268/220/92 269/221/92 270/222/92 +f 271/223/93 272/224/93 273/225/93 +f 270/226/94 274/227/94 275/228/94 +f 276/229/95 277/230/95 278/231/95 +f 270/222/96 269/221/96 279/232/96 +f 280/233/97 275/234/97 281/235/97 +f 282/236/98 283/237/98 284/238/98 +f 270/226/99 275/228/99 285/239/99 +f 277/230/100 286/240/100 287/241/100 +f 287/242/101 288/243/101 289/244/101 +f 290/245/102 291/246/102 292/247/102 +f 283/237/103 293/248/103 294/249/103 +f 295/250/104 296/251/104 297/250/104 +f 289/244/105 288/243/105 298/252/105 +f 296/251/106 299/253/106 300/253/106 +f 269/221/107 272/254/107 301/255/107 +f 271/223/108 273/225/108 302/256/108 +f 303/257/58 304/258/58 302/259/58 +f 305/260/58 306/261/58 299/253/58 +f 303/257/58 299/253/58 304/258/58 +f 307/262/58 308/263/58 296/251/58 +f 303/257/109 295/250/109 309/257/109 +f 310/264/110 305/265/110 311/266/110 +f 312/267/111 293/248/111 310/268/111 +f 313/269/112 314/270/112 315/271/112 +f 297/272/58 316/273/58 309/274/58 +f 273/275/113 272/254/113 317/276/113 +f 290/277/114 278/278/114 291/279/114 +f 302/280/115 273/281/115 318/282/115 +f 299/253/116 303/257/116 309/257/116 +f 269/221/117 319/283/117 272/254/117 +f 275/284/118 274/285/118 281/286/118 +f 282/287/119 320/288/119 314/289/119 +f 321/52/120 322/53/120 323/54/120 +f 324/55/39 325/56/39 321/57/39 +f 325/58/34 326/59/34 327/60/34 +f 326/61/35 328/62/35 322/63/35 +f 322/53/121 321/52/121 329/64/121 +f 326/65/122 325/66/122 328/67/122 +f 330/68/36 331/69/36 332/70/36 +f 324/55/39 321/57/39 323/71/39 +f 328/67/123 324/72/123 330/73/123 +f 322/63/35 328/62/35 332/74/35 +f 333/52/124 334/53/124 335/54/124 +f 336/55/35 337/56/35 333/57/35 +f 337/58/36 338/59/36 339/60/36 +f 338/61/39 340/62/39 334/63/39 +f 334/53/125 333/52/125 341/64/125 +f 338/65/126 337/66/126 340/67/126 +f 342/68/34 343/69/34 344/70/34 +f 336/55/35 333/57/35 335/71/35 +f 340/67/127 336/72/127 342/73/127 +f 334/63/39 340/62/39 344/74/39 +f 98/53/33 108/290/33 99/54/33 +f 101/56/34 103/291/34 97/57/34 +f 102/59/35 105/292/35 103/60/35 +f 105/293/36 102/61/36 98/63/36 +f 97/52/37 103/294/37 105/64/37 +f 101/66/38 100/72/38 104/67/38 +f 107/69/39 99/295/39 108/70/39 +f 107/296/34 100/55/34 99/71/34 +f 100/72/40 107/297/40 106/73/40 +f 104/62/36 106/298/36 108/74/36 +f 110/76/41 120/299/41 111/77/41 +f 113/79/36 115/300/36 109/80/36 +f 114/82/39 117/301/39 115/83/39 +f 117/302/34 114/84/34 110/86/34 +f 109/75/42 115/303/42 117/87/42 +f 113/89/43 112/95/43 116/90/43 +f 119/92/35 111/304/35 120/93/35 +f 119/305/36 112/78/36 111/94/36 +f 112/95/44 119/306/44 118/96/44 +f 116/85/34 118/307/34 120/97/34 +f 122/98/34 163/98/34 123/98/34 +f 121/98/34 123/98/34 125/98/34 +f 127/98/34 159/98/34 128/98/34 +f 130/98/34 256/98/34 131/98/34 +f 133/98/34 161/98/34 134/98/34 +f 136/98/34 157/98/34 137/98/34 +f 142/308/45 140/309/45 129/310/45 +f 138/99/45 158/311/45 127/100/45 +f 129/310/45 140/309/45 130/312/45 +f 139/313/45 158/311/45 138/99/45 +f 140/309/45 139/313/45 130/312/45 +f 139/313/45 138/99/45 130/312/45 +f 138/99/45 155/314/45 130/312/45 +f 155/314/128 253/315/128 130/312/128 +f 140/98/34 143/98/34 141/98/34 +f 142/98/34 160/98/34 143/98/34 +f 133/103/46 132/316/46 145/104/46 +f 132/103/47 136/316/47 146/104/47 +f 136/103/48 135/316/48 147/104/48 +f 149/103/75 122/316/75 150/104/75 +f 122/103/50 121/316/50 151/104/50 +f 124/103/51 133/316/51 144/104/51 +f 121/103/52 124/316/52 152/104/52 +f 135/98/34 137/98/34 154/98/34 +f 138/98/34 162/98/34 156/98/34 +f 132/98/34 134/98/34 157/98/34 +f 158/98/34 252/98/34 159/98/34 +f 129/98/34 131/98/34 160/98/34 +f 124/98/34 125/98/34 161/98/34 +f 126/98/34 128/98/34 162/98/34 +f 149/98/34 222/98/34 163/98/34 +f 165/106/53 200/317/53 166/107/53 +f 168/98/129 216/318/129 169/98/129 +f 171/98/45 208/319/45 172/98/45 +f 174/109/56 177/112/56 175/110/56 +f 176/111/57 190/130/57 177/112/57 +f 179/114/58 206/320/58 180/115/58 +f 164/105/59 166/107/59 182/117/59 +f 184/114/58 189/320/58 185/115/58 +f 167/98/45 169/319/45 187/98/45 +f 188/114/58 209/320/58 189/115/58 +f 191/119/61 226/141/61 192/120/61 +f 194/98/45 203/319/45 195/98/45 +f 182/122/62 215/137/62 197/123/62 +f 183/114/58 185/320/58 199/115/58 +f 200/125/63 345/321/63 201/126/63 +f 202/98/45 218/319/45 203/98/45 +f 181/116/65 182/117/65 196/128/65 +f 205/114/58 223/320/58 206/115/58 +f 207/129/66 191/322/66 190/130/66 +f 186/98/45 187/319/45 208/98/45 +f 178/114/58 180/320/58 209/115/58 +f 200/125/67 210/131/67 345/321/67 +f 210/131/67 211/133/67 346/323/67 +f 345/321/67 210/131/67 346/323/67 +f 213/135/68 238/324/68 214/136/68 +f 166/124/69 201/126/69 215/137/69 +f 193/98/45 195/319/45 216/98/45 +f 190/118/71 192/120/71 217/139/71 +f 177/138/72 217/139/72 211/133/72 +f 170/98/130 172/319/130 218/98/130 +f 198/114/58 199/320/58 220/115/58 +f 221/98/34 224/98/34 222/98/34 +f 219/114/58 220/320/58 223/115/58 +f 148/103/68 147/316/68 137/104/68 +f 153/98/34 154/98/34 224/98/34 +f 225/140/74 347/325/74 226/141/74 +f 347/325/74 196/121/74 197/123/74 +f 226/141/131 347/325/131 348/326/131 +f 347/325/74 197/123/74 349/327/74 +f 348/326/132 347/325/132 349/327/132 +f 228/143/45 232/328/45 229/144/45 +f 229/146/34 234/329/34 230/147/34 +f 227/149/39 230/330/39 231/150/39 +f 228/152/36 231/331/36 233/153/36 +f 232/155/35 233/332/35 234/156/35 +f 236/135/68 244/324/68 237/136/68 +f 134/158/47 178/333/47 188/159/47 +f 161/158/46 179/333/46 178/159/46 +f 125/158/51 205/333/51 179/159/51 +f 157/158/48 188/333/48 184/159/48 +f 123/158/52 219/333/52 205/159/52 +f 163/158/50 198/333/50 219/159/50 +f 183/161/68 237/334/68 238/162/68 +f 222/158/75 183/333/75 198/159/75 +f 213/164/68 235/335/68 222/165/68 +f 239/166/48 164/105/48 243/171/48 +f 350/336/48 239/166/48 243/171/48 +f 350/336/48 243/171/48 351/337/48 +f 252/338/48 350/336/48 159/339/48 +f 350/336/48 351/337/48 159/339/48 +f 240/167/75 173/108/75 247/340/75 +f 352/341/75 240/167/75 247/340/75 +f 352/341/75 247/340/75 353/342/75 +f 160/343/75 352/341/75 143/344/75 +f 352/341/75 353/342/75 143/344/75 +f 241/168/51 354/345/51 242/169/51 +f 251/182/51 204/346/51 354/345/51 +f 245/347/133 251/182/133 354/345/133 +f 255/348/134 245/347/134 354/345/134 +f 241/168/135 255/348/135 354/345/135 +f 243/171/47 181/116/47 259/200/47 +f 351/337/47 243/171/47 259/200/47 +f 351/337/47 259/200/47 355/349/47 +f 159/339/47 351/337/47 128/350/47 +f 351/337/47 355/349/47 128/350/47 +f 236/173/76 249/351/76 245/174/76 +f 241/175/52 176/111/52 246/176/52 +f 257/352/52 241/175/52 246/176/52 +f 257/352/52 246/176/52 356/353/52 +f 256/354/52 257/352/52 131/355/52 +f 257/352/52 356/353/52 131/355/52 +f 246/176/50 174/109/50 240/167/50 +f 356/353/50 246/176/50 240/167/50 +f 356/353/50 240/167/50 352/341/50 +f 131/355/50 356/353/50 160/343/50 +f 356/353/50 352/341/50 160/343/50 +f 239/356/68 248/179/68 165/357/68 +f 247/177/68 248/179/68 239/356/68 +f 353/358/68 247/177/68 239/356/68 +f 353/358/68 239/356/68 350/359/68 +f 143/360/68 353/358/68 350/359/68 +f 141/361/68 143/360/68 350/359/68 +f 252/362/68 141/361/68 350/359/68 +f 245/347/77 249/180/77 251/182/77 +f 139/98/34 141/98/34 252/98/34 +f 155/98/34 156/98/34 254/98/34 +f 214/363/136 244/183/136 255/185/136 +f 255/187/79 258/364/79 212/188/79 +f 253/98/34 254/98/34 256/98/34 +f 165/365/80 248/189/80 200/125/80 +f 248/189/80 175/132/80 210/131/80 +f 200/125/80 248/189/80 210/131/80 +f 254/191/51 156/366/51 257/192/51 +f 156/366/51 162/367/51 250/181/51 +f 156/366/137 250/181/137 249/180/137 +f 257/192/138 156/366/138 258/199/138 +f 156/366/139 249/180/139 258/199/139 +f 242/194/81 354/368/81 191/119/81 +f 354/368/81 204/369/81 196/121/81 +f 191/119/81 354/368/81 225/140/81 +f 354/368/81 196/121/81 347/325/81 +f 225/140/81 354/368/81 347/325/81 +f 249/370/140 236/196/140 258/198/140 +f 258/199/83 255/348/83 241/168/83 +f 259/200/46 204/127/46 251/371/46 +f 355/349/46 259/200/46 251/371/46 +f 355/349/46 251/371/46 250/372/46 +f 128/350/46 355/349/46 162/373/46 +f 355/349/46 250/372/46 162/373/46 +f 263/374/58 260/201/58 264/375/58 +f 260/201/58 262/203/58 264/375/58 +f 264/375/58 266/376/58 265/377/58 +f 262/203/58 357/378/58 264/375/58 +f 264/375/58 358/379/58 266/376/58 +f 357/378/58 359/380/58 264/375/58 +f 359/380/58 358/379/58 264/375/58 +f 144/205/84 260/218/84 263/206/84 +f 152/204/85 263/206/85 264/208/85 +f 151/207/86 264/208/86 265/210/86 +f 150/209/87 265/210/87 266/212/87 +f 147/214/88 357/381/88 262/215/88 +f 146/213/89 262/215/89 261/217/89 +f 145/216/90 261/217/90 260/218/90 +f 360/382/91 267/219/91 266/212/91 +f 147/214/91 360/382/91 357/381/91 +f 357/381/91 360/382/91 359/383/91 +f 360/382/141 266/212/141 358/384/141 +f 359/383/91 360/382/91 358/384/91 +f 361/385/92 268/220/92 270/222/92 +f 277/230/92 361/385/92 278/231/92 +f 278/231/92 361/385/92 362/386/92 +f 361/385/92 270/222/92 363/387/92 +f 362/386/92 361/385/92 363/387/92 +f 293/388/93 364/389/93 310/390/93 +f 301/391/93 272/224/93 271/223/93 +f 293/388/93 365/392/93 364/389/93 +f 365/392/93 301/391/93 364/389/93 +f 301/391/93 271/223/93 364/389/93 +f 270/226/94 366/393/94 274/227/94 +f 366/393/94 282/287/94 314/289/94 +f 367/394/94 282/287/94 366/393/94 +f 368/395/94 367/394/94 366/393/94 +f 270/226/94 368/395/94 366/393/94 +f 369/396/95 276/229/95 278/231/95 +f 370/397/95 369/396/95 371/398/95 +f 371/398/95 369/396/95 372/399/95 +f 369/396/95 278/231/95 373/400/95 +f 372/399/95 369/396/95 373/400/95 +f 270/222/96 279/232/96 374/401/96 +f 282/236/96 374/401/96 283/237/96 +f 367/402/96 374/401/96 282/236/96 +f 368/403/96 270/222/96 374/401/96 +f 367/402/96 368/403/96 374/401/96 +f 285/404/97 275/234/97 280/233/97 +f 291/405/97 375/406/97 292/407/97 +f 291/405/97 376/408/97 375/406/97 +f 376/408/97 285/404/97 375/406/97 +f 285/404/97 280/233/97 375/406/97 +f 282/236/98 284/238/98 377/409/98 +f 371/398/98 377/409/98 370/397/98 +f 378/410/98 377/409/98 371/398/98 +f 379/411/98 282/236/98 377/409/98 +f 378/410/98 379/411/98 377/409/98 +f 270/226/99 285/239/99 376/412/99 +f 278/278/99 376/412/99 291/279/99 +f 362/413/99 376/412/99 278/278/99 +f 363/414/99 270/226/99 376/412/99 +f 362/413/99 363/414/99 376/412/99 +f 380/415/100 370/397/100 381/416/100 +f 286/240/100 370/397/100 380/415/100 +f 277/230/100 276/229/100 286/240/100 +f 276/229/100 369/396/100 286/240/100 +f 369/396/100 370/397/100 286/240/100 +f 382/417/101 381/418/101 383/419/101 +f 287/242/101 286/420/101 288/243/101 +f 380/421/101 381/418/101 382/417/101 +f 286/420/101 380/421/101 382/417/101 +f 288/243/101 286/420/101 382/417/101 +f 290/245/102 292/247/102 384/422/102 +f 385/423/102 386/424/102 387/425/102 +f 385/423/102 388/426/102 386/424/102 +f 388/426/102 290/245/102 386/424/102 +f 290/245/102 384/422/102 386/424/102 +f 370/397/103 389/427/103 381/416/103 +f 370/397/103 294/249/103 389/427/103 +f 284/238/103 283/237/103 294/249/103 +f 377/409/103 284/238/103 294/249/103 +f 370/397/142 377/409/142 294/249/142 +f 296/251/104 316/251/104 297/250/104 +f 382/417/105 383/419/105 390/428/105 +f 298/252/105 288/243/105 307/429/105 +f 382/417/105 390/428/105 308/430/105 +f 288/243/105 382/417/105 308/430/105 +f 307/429/105 288/243/105 308/430/105 +f 316/251/106 296/251/106 300/253/106 +f 283/237/107 365/431/107 293/248/107 +f 283/237/107 301/255/107 365/431/107 +f 279/232/107 269/221/107 301/255/107 +f 374/401/107 279/232/107 301/255/107 +f 283/237/107 374/401/107 301/255/107 +f 310/390/108 364/389/108 305/432/108 +f 271/223/108 302/256/108 304/433/108 +f 305/432/108 364/389/108 306/434/108 +f 364/389/108 271/223/108 306/434/108 +f 271/223/108 304/433/108 306/434/108 +f 307/262/58 295/250/58 298/435/58 +f 303/257/58 302/259/58 318/436/58 +f 303/257/58 318/436/58 391/437/58 +f 295/250/58 303/257/58 391/437/58 +f 298/435/58 295/250/58 391/437/58 +f 390/438/58 296/251/58 308/263/58 +f 311/439/58 305/260/58 299/253/58 +f 392/440/58 311/439/58 299/253/58 +f 390/438/58 392/440/58 296/251/58 +f 392/440/58 299/253/58 296/251/58 +f 299/253/58 306/261/58 304/258/58 +f 295/250/58 307/262/58 296/251/58 +f 295/250/109 297/250/109 309/257/109 +f 312/441/110 310/264/110 311/266/110 +f 383/442/110 392/443/110 390/444/110 +f 383/442/110 393/445/110 392/443/110 +f 393/445/110 312/441/110 392/443/110 +f 312/441/110 311/266/110 392/443/110 +f 383/446/111 381/416/111 393/447/111 +f 312/267/111 294/249/111 293/248/111 +f 381/416/111 389/427/111 393/447/111 +f 389/427/111 294/249/111 393/447/111 +f 294/249/111 312/267/111 393/447/111 +f 314/270/112 320/448/112 315/271/112 +f 394/449/112 385/450/112 387/451/112 +f 394/449/112 387/451/112 395/452/112 +f 320/448/112 394/449/112 315/271/112 +f 394/449/112 395/452/112 315/271/112 +f 316/273/58 300/453/58 309/274/58 +f 396/454/113 287/241/113 289/455/113 +f 272/254/113 319/283/113 317/276/113 +f 397/456/113 287/241/113 396/454/113 +f 319/283/113 397/456/113 396/454/113 +f 317/276/113 319/283/113 396/454/113 +f 388/457/114 278/278/114 290/277/114 +f 385/458/114 371/459/114 388/457/114 +f 371/459/114 372/460/114 388/457/114 +f 372/460/114 373/461/114 388/457/114 +f 373/461/114 278/278/114 388/457/114 +f 273/281/115 317/462/115 318/282/115 +f 391/463/115 289/464/115 298/465/115 +f 396/466/115 289/464/115 391/463/115 +f 317/462/115 396/466/115 391/463/115 +f 318/282/115 317/462/115 391/463/115 +f 300/253/116 299/253/116 309/257/116 +f 397/456/117 277/230/117 287/241/117 +f 319/283/117 277/230/117 397/456/117 +f 269/221/117 268/220/117 319/283/117 +f 268/220/117 361/385/117 319/283/117 +f 361/385/117 277/230/117 319/283/117 +f 281/286/118 274/285/118 398/467/118 +f 366/468/118 314/469/118 313/470/118 +f 366/468/118 313/470/118 399/471/118 +f 274/285/118 366/468/118 398/467/118 +f 366/468/118 399/471/118 398/467/118 +f 282/287/119 394/472/119 320/288/119 +f 371/459/119 385/458/119 394/472/119 +f 378/473/119 371/459/119 394/472/119 +f 379/474/119 378/473/119 394/472/119 +f 282/287/119 379/474/119 394/472/119 +f 322/53/120 332/290/120 323/54/120 +f 325/56/39 327/291/39 321/57/39 +f 326/59/34 329/292/34 327/60/34 +f 329/293/35 326/61/35 322/63/35 +f 321/52/121 327/294/121 329/64/121 +f 325/66/122 324/72/122 328/67/122 +f 331/69/36 323/295/36 332/70/36 +f 331/296/39 324/55/39 323/71/39 +f 324/72/123 331/297/123 330/73/123 +f 328/62/35 330/298/35 332/74/35 +f 334/53/124 344/290/124 335/54/124 +f 337/56/35 339/291/35 333/57/35 +f 338/59/36 341/292/36 339/60/36 +f 341/293/39 338/61/39 334/63/39 +f 333/52/125 339/294/125 341/64/125 +f 337/66/126 336/72/126 340/67/126 +f 343/69/34 335/295/34 344/70/34 +f 343/296/35 336/55/35 335/71/35 +f 336/72/127 343/297/127 342/73/127 +f 340/62/39 342/298/39 344/74/39 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/walkway.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/walkway.obj new file mode 100644 index 00000000..793d7499 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/walkway.obj @@ -0,0 +1,375 @@ +# Blender v2.69 (sub 0) OBJ File: '' +# www.blender.org +o Pipe +v -1.001688 0.626558 0.180403 +v -1.001688 0.626558 -0.180403 +v 1.001688 0.626558 -0.180403 +v 1.001688 0.626558 0.180403 +v -1.001688 0.987364 0.180403 +v -1.001688 0.987364 -0.180403 +v 1.001688 0.987364 -0.180403 +v 1.001688 0.987364 0.180403 +v 0.180403 0.626558 1.001688 +v -0.180403 0.626558 1.001688 +v -0.180403 0.626558 -1.001688 +v 0.180403 0.626558 -1.001688 +v 0.180403 0.987364 1.001688 +v -0.180403 0.987364 1.001688 +v -0.180403 0.987364 -1.001688 +v 0.180403 0.987364 -1.001688 +vt 0.376467 0.376577 +vt 0.623313 0.376577 +vt 0.376467 0.623423 +vt 0.001515 0.375808 +vt 0.998485 0.375808 +vt 0.001515 0.624192 +vt 0.004752 0.623526 +vt 0.004752 0.376474 +vt 0.995247 0.623526 +vt 0.623313 0.623423 +vt 0.998485 0.624192 +vt 0.995247 0.376474 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +f 5/1/1 6/2/1 1/3/1 +f 6/4/2 7/5/2 2/6/2 +f 7/1/3 8/2/3 3/3/3 +f 8/4/4 5/5/4 4/6/4 +f 1/7/5 2/8/5 4/9/5 +f 8/7/6 7/8/6 5/9/6 +f 13/1/4 14/2/4 9/3/4 +f 14/4/1 15/5/1 10/6/1 +f 15/1/2 16/2/2 11/3/2 +f 16/4/3 13/5/3 12/6/3 +f 9/7/5 10/8/5 12/9/5 +f 16/7/6 15/8/6 13/9/6 +f 6/2/1 2/10/1 1/3/1 +f 7/5/2 3/11/2 2/6/2 +f 8/2/3 4/10/3 3/3/3 +f 5/5/4 1/11/4 4/6/4 +f 2/8/5 3/12/5 4/9/5 +f 7/8/6 6/12/6 5/9/6 +f 14/2/4 10/10/4 9/3/4 +f 15/5/1 11/11/1 10/6/1 +f 16/2/2 12/10/2 11/3/2 +f 13/5/3 9/11/3 12/6/3 +f 10/8/5 11/12/5 12/9/5 +f 15/8/6 14/12/6 13/9/6 +o WalkwayBase +v 0.150000 0.643837 0.988801 +v -0.150000 0.643837 0.988801 +v -0.150000 0.643837 -0.988801 +v 0.150000 0.643837 -0.988801 +v 0.150000 0.943837 0.988801 +v -0.150000 0.943837 0.988801 +v -0.150000 0.943837 -0.988801 +v 0.150000 0.943837 -0.988801 +v 0.988801 0.643837 -0.150000 +v 0.988801 0.643837 0.150000 +v -0.988801 0.643837 0.150000 +v -0.988801 0.643837 -0.150000 +v 0.988801 0.943837 -0.150000 +v 0.988801 0.943837 0.150000 +v -0.988801 0.943837 0.150000 +v -0.988801 0.943837 -0.150000 +vt 0.370452 0.370452 +vt 0.629548 0.370452 +vt 0.370452 0.629548 +vt 0.000000 0.407716 +vt 1.000000 0.407716 +vt 0.000000 0.592284 +vt 0.418179 0.000000 +vt 0.581821 0.000000 +vt 0.418179 1.000000 +vt 0.000000 0.409927 +vt 1.000000 0.409927 +vt 0.000000 0.590073 +vt 0.408001 0.000000 +vt 0.591999 0.000000 +vt 0.408001 1.000000 +vt 0.629548 0.629548 +vt 1.000000 0.592284 +vt 0.581821 1.000000 +vt 1.000000 0.590073 +vt 0.591999 1.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +f 21/13/7 22/14/7 17/15/7 +f 22/16/8 23/17/8 18/18/8 +f 23/13/9 24/14/9 19/15/9 +f 24/16/10 21/17/10 20/18/10 +f 17/19/11 18/20/11 20/21/11 +f 24/19/12 23/20/12 21/21/12 +f 29/13/10 30/14/10 25/15/10 +f 30/22/7 31/23/7 26/24/7 +f 31/13/8 32/14/8 27/15/8 +f 32/22/9 29/23/9 28/24/9 +f 25/25/11 26/26/11 28/27/11 +f 32/25/12 31/26/12 29/27/12 +f 22/14/7 18/28/7 17/15/7 +f 23/17/8 19/29/8 18/18/8 +f 24/14/9 20/28/9 19/15/9 +f 21/17/10 17/29/10 20/18/10 +f 18/20/11 19/30/11 20/21/11 +f 23/20/12 22/30/12 21/21/12 +f 30/14/10 26/28/10 25/15/10 +f 31/23/7 27/31/7 26/24/7 +f 32/14/8 28/28/8 27/15/8 +f 29/23/9 25/31/9 28/24/9 +f 26/26/11 27/32/11 28/27/11 +f 31/26/12 30/32/12 29/27/12 +o Walkway +v -0.090685 0.672507 0.090685 +v -0.090685 0.672507 -0.090685 +v 0.090685 0.672507 -0.090685 +v 0.090685 0.672507 0.090685 +v -0.090685 1.986790 0.090685 +v -0.090685 1.986790 -0.090685 +v 0.090685 1.986790 -0.090685 +v 0.090685 1.986790 0.090685 +v -0.200000 0.606551 0.200000 +v -0.200000 0.606551 -0.200000 +v 0.200000 0.606551 -0.200000 +v 0.200000 0.606551 0.200000 +v -0.200000 1.006551 0.200000 +v -0.200000 1.006551 -0.200000 +v 0.200000 1.006551 -0.200000 +v 0.200000 1.006551 0.200000 +v -0.200000 1.900000 0.800000 +v -0.200000 1.900000 -0.800000 +v 0.200000 1.900000 -0.800000 +v 0.200000 1.900000 0.800000 +v -0.200000 2.100000 0.800000 +v -0.200000 2.100000 -0.800000 +v 0.200000 2.100000 -0.800000 +v 0.200000 2.100000 0.800000 +v 0.800000 1.900000 0.800000 +v 0.800000 1.900000 -0.800000 +v 1.000000 1.900000 -0.800000 +v 1.000000 1.900000 0.800000 +v 0.800000 2.100000 0.800000 +v 0.800000 2.100000 -0.800000 +v 1.000000 2.100000 -0.800000 +v 1.000000 2.100000 0.800000 +v -1.000000 1.900000 1.000000 +v -1.000000 1.900000 0.800000 +v 1.000000 1.900000 0.800000 +v 1.000000 1.900000 1.000000 +v -1.000000 2.100000 1.000000 +v -1.000000 2.100000 0.800000 +v 1.000000 2.100000 0.800000 +v 1.000000 2.100000 1.000000 +v -1.000000 1.900000 -0.800000 +v -1.000000 1.900000 -1.000000 +v 1.000000 1.900000 -1.000000 +v 1.000000 1.900000 -0.800000 +v -1.000000 2.100000 -0.800000 +v -1.000000 2.100000 -1.000000 +v 1.000000 2.100000 -1.000000 +v 1.000000 2.100000 -0.800000 +v -1.000000 1.900000 0.800000 +v -1.000000 1.900000 -0.800000 +v -0.800000 1.900000 -0.800000 +v -0.800000 1.900000 0.800000 +v -1.000000 2.100000 0.800000 +v -1.000000 2.100000 -0.800000 +v -0.800000 2.100000 -0.800000 +v -0.800000 2.100000 0.800000 +v 0.800000 1.900010 0.200000 +v -0.800000 1.900010 0.200000 +v -0.800000 1.900010 -0.200000 +v 0.800000 1.900010 -0.200000 +v 0.800000 2.100010 0.200000 +v -0.800000 2.100010 0.200000 +v -0.800000 2.100010 -0.200000 +v 0.800000 2.100010 -0.200000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.404883 +vt 1.000000 0.404883 +vt 0.000000 0.595117 +vt 0.094929 -0.001166 +vt 0.905071 -0.001166 +vt 0.094929 0.090633 +vt 0.904693 0.001032 +vt 0.992096 0.001032 +vt 0.904693 0.088435 +vt 0.004563 0.000000 +vt 0.060852 0.000000 +vt 0.004563 1.000000 +vt 1.000000 1.000000 +vt 1.000000 0.595117 +vt 0.905071 0.090633 +vt 0.992096 0.088435 +vt 0.060852 1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 -0.000001 +f 37/33/13 38/34/13 33/35/13 +f 38/33/14 39/34/14 34/35/14 +f 39/33/15 40/34/15 35/35/15 +f 40/33/16 37/34/16 36/35/16 +f 33/33/17 34/34/17 36/35/17 +f 40/33/18 39/34/18 37/35/18 +f 45/33/13 46/34/13 41/35/13 +f 46/33/14 47/34/14 42/35/14 +f 47/33/15 48/34/15 43/35/15 +f 48/33/16 45/34/16 44/35/16 +f 41/33/17 42/34/17 44/35/17 +f 48/33/18 47/34/18 45/35/18 +f 53/33/13 54/34/13 49/35/13 +f 54/33/14 55/34/14 50/35/14 +f 55/33/15 56/34/15 51/35/15 +f 56/33/16 53/34/16 52/35/16 +f 49/33/17 50/34/17 52/35/17 +f 56/36/18 55/37/18 53/38/18 +f 61/39/13 62/40/13 57/41/13 +f 62/33/14 63/34/14 58/35/14 +f 63/39/15 64/40/15 59/41/15 +f 64/33/16 61/34/16 60/35/16 +f 57/39/17 58/40/17 60/41/17 +f 64/39/18 63/40/18 61/41/18 +f 69/42/13 70/43/13 65/44/13 +f 70/45/14 71/46/14 66/47/14 +f 71/42/15 72/43/15 67/44/15 +f 72/45/16 69/46/16 68/47/16 +f 65/45/17 66/46/17 68/47/17 +f 72/45/18 71/46/18 69/47/18 +f 77/42/13 78/43/13 73/44/13 +f 78/45/14 79/46/14 74/47/14 +f 79/42/15 80/43/15 75/44/15 +f 80/45/16 77/46/16 76/47/16 +f 73/45/17 74/46/17 76/47/17 +f 80/45/18 79/46/18 77/47/18 +f 85/39/13 86/40/13 81/41/13 +f 86/33/14 87/34/14 82/35/14 +f 87/39/15 88/40/15 83/41/15 +f 88/33/16 85/34/16 84/35/16 +f 81/39/17 82/40/17 84/41/17 +f 88/39/18 87/40/18 85/41/18 +f 93/33/16 94/34/16 89/35/16 +f 94/33/13 95/34/13 90/35/13 +f 95/33/14 96/34/14 91/35/14 +f 96/33/15 93/34/15 92/35/15 +f 89/33/17 90/34/17 92/35/17 +f 96/36/18 95/37/18 93/38/18 +f 38/34/13 34/48/13 33/35/13 +f 39/34/14 35/48/14 34/35/14 +f 40/34/15 36/48/15 35/35/15 +f 37/34/16 33/48/16 36/35/16 +f 34/34/17 35/48/17 36/35/17 +f 39/34/19 38/48/19 37/35/19 +f 46/34/13 42/48/13 41/35/13 +f 47/34/14 43/48/14 42/35/14 +f 48/34/15 44/48/15 43/35/15 +f 45/34/16 41/48/16 44/35/16 +f 42/34/17 43/48/17 44/35/17 +f 47/34/18 46/48/18 45/35/18 +f 54/34/13 50/48/13 49/35/13 +f 55/34/14 51/48/14 50/35/14 +f 56/34/15 52/48/15 51/35/15 +f 53/34/16 49/48/16 52/35/16 +f 50/34/17 51/48/17 52/35/17 +f 55/37/18 54/49/18 53/38/18 +f 62/40/13 58/50/13 57/41/13 +f 63/34/14 59/48/14 58/35/14 +f 64/40/15 60/50/15 59/41/15 +f 61/34/16 57/48/16 60/35/16 +f 58/40/17 59/50/17 60/41/17 +f 63/40/18 62/50/18 61/41/18 +f 70/43/13 66/51/13 65/44/13 +f 71/46/14 67/52/14 66/47/14 +f 72/43/15 68/51/15 67/44/15 +f 69/46/16 65/52/16 68/47/16 +f 66/46/17 67/52/17 68/47/17 +f 71/46/18 70/52/18 69/47/18 +f 78/43/13 74/51/13 73/44/13 +f 79/46/14 75/52/14 74/47/14 +f 80/43/15 76/51/15 75/44/15 +f 77/46/16 73/52/16 76/47/16 +f 74/46/17 75/52/17 76/47/17 +f 79/46/18 78/52/18 77/47/18 +f 86/40/13 82/50/13 81/41/13 +f 87/34/14 83/48/14 82/35/14 +f 88/40/15 84/50/15 83/41/15 +f 85/34/16 81/48/16 84/35/16 +f 82/40/17 83/50/17 84/41/17 +f 87/40/18 86/50/18 85/41/18 +f 94/34/16 90/48/16 89/35/16 +f 95/34/13 91/48/13 90/35/13 +f 96/34/14 92/48/14 91/35/14 +f 93/34/15 89/48/15 92/35/15 +f 90/34/17 91/48/17 92/35/17 +f 95/37/18 94/49/18 93/38/18 +o Wire +v -1.001688 0.626558 0.180403 +v -1.001688 0.626558 -0.180403 +v 1.001688 0.626558 -0.180403 +v 1.001688 0.626558 0.180403 +v -1.001688 0.987364 0.180403 +v -1.001688 0.987364 -0.180403 +v 1.001688 0.987364 -0.180403 +v 1.001688 0.987364 0.180403 +v 0.180403 0.626558 1.001688 +v -0.180403 0.626558 1.001688 +v -0.180403 0.626558 -1.001688 +v 0.180403 0.626558 -1.001688 +v 0.180403 0.987364 1.001688 +v -0.180403 0.987364 1.001688 +v -0.180403 0.987364 -1.001688 +v 0.180403 0.987364 -1.001688 +vt 0.809853 0.438768 +vt 0.932317 0.438768 +vt 0.809853 0.561232 +vt 0.187799 0.438302 +vt 0.812201 0.438302 +vt 0.187799 0.561698 +vt 0.189827 0.561367 +vt 0.189827 0.438633 +vt 0.810173 0.561367 +vt 0.932317 0.561232 +vt 0.812201 0.561698 +vt 0.810173 0.438633 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +f 101/53/20 102/54/20 97/55/20 +f 102/56/21 103/57/21 98/58/21 +f 103/53/22 104/54/22 99/55/22 +f 104/56/23 101/57/23 100/58/23 +f 97/59/24 98/60/24 100/61/24 +f 104/59/25 103/60/25 101/61/25 +f 102/54/20 98/62/20 97/55/20 +f 103/57/21 99/63/21 98/58/21 +f 104/54/22 100/62/22 99/55/22 +f 101/57/23 97/63/23 100/58/23 +f 98/60/24 99/64/24 100/61/24 +f 103/60/25 102/64/25 101/61/25 +f 109/53/23 110/54/23 105/55/23 +f 110/56/20 111/57/20 106/58/20 +f 111/53/21 112/54/21 107/55/21 +f 112/56/22 109/57/22 108/58/22 +f 105/59/24 106/60/24 108/61/24 +f 112/59/25 111/60/25 109/61/25 +f 110/54/23 106/62/23 105/55/23 +f 111/57/20 107/63/20 106/58/20 +f 112/54/21 108/62/21 107/55/21 +f 109/57/22 105/63/22 108/58/22 +f 106/60/24 107/64/24 108/61/24 +f 111/60/25 110/64/25 109/61/25 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.mtl b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.mtl new file mode 100644 index 00000000..e1f510f0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.mtl @@ -0,0 +1,8 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/web \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.obj b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.obj new file mode 100644 index 00000000..0c606f8c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.obj @@ -0,0 +1,1833 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +mtllib web.mtl +o Sphere +v 0.000000 0.980785 -0.345922 +v 0.089531 0.980785 -0.334135 +v 0.175622 0.923880 -0.655429 +v 0.254963 0.831470 -0.951535 +v 0.324507 0.707107 -1.211075 +v 0.381579 0.555570 -1.424073 +v 0.423988 0.382683 -1.582345 +v 0.450104 0.195090 -1.679809 +v 0.458922 0.000000 -1.712718 +v 0.450104 -0.195090 -1.679809 +v 0.423988 -0.382683 -1.582346 +v 0.381579 -0.555570 -1.424073 +v 0.324507 -0.707107 -1.211075 +v 0.254963 -0.831470 -0.951535 +v 0.175622 -0.923880 -0.655429 +v 0.089531 -0.980785 -0.334134 +v 0.172961 0.980785 -0.299577 +v 0.339275 0.923880 -0.587642 +v 0.492551 0.831470 -0.853123 +v 0.626899 0.707107 -1.085820 +v 0.737155 0.555570 -1.276789 +v 0.819083 0.382683 -1.418692 +v 0.869533 0.195090 -1.506075 +v 0.886569 0.000000 -1.535581 +v 0.869533 -0.195090 -1.506076 +v 0.819083 -0.382683 -1.418692 +v 0.737155 -0.555570 -1.276789 +v 0.626899 -0.707107 -1.085820 +v 0.492551 -0.831470 -0.853123 +v 0.339275 -0.923880 -0.587641 +v 0.172961 -0.980785 -0.299577 +v 0.244604 0.980785 -0.244603 +v 0.479808 0.923880 -0.479807 +v 0.696573 0.831470 -0.696572 +v 0.886569 0.707107 -0.886568 +v 1.042495 0.555570 -1.042494 +v 1.158358 0.382683 -1.158357 +v 1.229706 0.195090 -1.229705 +v 1.253797 0.000000 -1.253797 +v 1.229706 -0.195090 -1.229705 +v 1.158358 -0.382683 -1.158357 +v 1.042495 -0.555570 -1.042494 +v 0.886569 -0.707107 -0.886568 +v 0.696573 -0.831470 -0.696572 +v 0.479808 -0.923880 -0.479807 +v 0.244604 -0.980785 -0.244603 +v 0.299578 0.980785 -0.172961 +v 0.587642 0.923880 -0.339275 +v 0.853124 0.831470 -0.492551 +v 1.085820 0.707107 -0.626898 +v 1.276790 0.555570 -0.737154 +v 1.418692 0.382683 -0.819082 +v 1.506076 0.195090 -0.869533 +v 1.535582 0.000000 -0.886568 +v 1.506076 -0.195090 -0.869533 +v 1.418693 -0.382683 -0.819082 +v 1.276790 -0.555570 -0.737154 +v 1.085820 -0.707107 -0.626898 +v 0.853124 -0.831470 -0.492551 +v 0.587642 -0.923880 -0.339275 +v 0.299577 -0.980785 -0.172960 +v 0.334135 0.980785 -0.089531 +v 0.655430 0.923880 -0.175621 +v 0.951536 0.831470 -0.254963 +v 1.211075 0.707107 -0.324506 +v 1.424074 0.555570 -0.381579 +v 1.582346 0.382683 -0.423988 +v 1.679809 0.195090 -0.450103 +v 1.712719 0.000000 -0.458921 +v 1.679809 -0.195090 -0.450103 +v 1.582346 -0.382683 -0.423988 +v 1.424074 -0.555570 -0.381579 +v 1.211075 -0.707107 -0.324506 +v 0.951536 -0.831470 -0.254963 +v 0.655429 -0.923880 -0.175621 +v 0.334135 -0.980785 -0.089531 +v 0.345922 0.980785 0.000001 +v 0.678551 0.923880 0.000001 +v 0.985102 0.831470 0.000001 +v 1.253797 0.707107 0.000001 +v 1.474310 0.555570 0.000001 +v 1.638165 0.382683 0.000000 +v 1.739066 0.195090 0.000000 +v 1.773137 0.000000 0.000001 +v 1.739067 -0.195090 0.000000 +v 1.638165 -0.382683 0.000000 +v 1.474310 -0.555570 0.000001 +v 1.253797 -0.707107 0.000001 +v 0.985102 -0.831470 0.000001 +v 0.678550 -0.923880 0.000001 +v 0.345922 -0.980785 0.000001 +v 0.334135 0.980785 0.089532 +v 0.655430 0.923880 0.175622 +v 0.951536 0.831470 0.254964 +v 1.211075 0.707107 0.324507 +v 1.424074 0.555570 0.381580 +v 1.582346 0.382683 0.423989 +v 1.679809 0.195090 0.450104 +v 1.712719 0.000000 0.458922 +v 1.679809 -0.195090 0.450104 +v 1.582346 -0.382683 0.423989 +v 1.424074 -0.555570 0.381580 +v 1.211075 -0.707107 0.324507 +v 0.951536 -0.831470 0.254964 +v 0.655429 -0.923880 0.175622 +v 0.334135 -0.980785 0.089532 +v 0.299578 0.980785 0.172962 +v 0.587642 0.923880 0.339276 +v 0.853124 0.831470 0.492552 +v 1.085820 0.707107 0.626899 +v 1.276790 0.555570 0.737155 +v 1.418692 0.382683 0.819083 +v 1.506076 0.195090 0.869534 +v 1.535582 0.000000 0.886569 +v 1.506076 -0.195090 0.869534 +v 1.418692 -0.382683 0.819083 +v 1.276790 -0.555570 0.737155 +v 1.085820 -0.707107 0.626899 +v 0.853124 -0.831470 0.492552 +v 0.587642 -0.923880 0.339276 +v 0.299577 -0.980785 0.172962 +v 0.244604 0.980785 0.244605 +v 0.479808 0.923880 0.479808 +v 0.696572 0.831470 0.696573 +v 0.886568 0.707107 0.886569 +v 1.042494 0.555570 1.042495 +v 1.158357 0.382683 1.158358 +v 1.229705 0.195090 1.229706 +v 1.253797 0.000000 1.253798 +v 1.229706 -0.195090 1.229706 +v 1.158358 -0.382683 1.158358 +v 1.042494 -0.555570 1.042495 +v 0.886568 -0.707107 0.886569 +v 0.696572 -0.831470 0.696573 +v 0.479807 -0.923880 0.479808 +v 0.244604 -0.980785 0.244604 +v 0.172961 0.980785 0.299578 +v 0.339275 0.923880 0.587643 +v 0.492551 0.831470 0.853124 +v 0.626899 0.707107 1.085821 +v 0.737155 0.555570 1.276790 +v 0.819082 0.382683 1.418693 +v 0.869533 0.195090 1.506076 +v 0.886568 0.000000 1.535582 +v 0.869533 -0.195090 1.506076 +v 0.819082 -0.382683 1.418693 +v 0.737155 -0.555570 1.276790 +v 0.626899 -0.707107 1.085821 +v 0.492551 -0.831470 0.853124 +v 0.339275 -0.923880 0.587642 +v 0.172961 -0.980785 0.299578 +v 0.089531 0.980785 0.334136 +v 0.175622 0.923880 0.655430 +v 0.254963 0.831470 0.951536 +v 0.324507 0.707107 1.211076 +v 0.381579 0.555570 1.424074 +v 0.423988 0.382683 1.582346 +v 0.450103 0.195090 1.679809 +v 0.458922 0.000000 1.712719 +v 0.450103 -0.195090 1.679810 +v 0.423988 -0.382683 1.582346 +v 0.381579 -0.555570 1.424074 +v 0.324507 -0.707107 1.211076 +v 0.254963 -0.831470 0.951536 +v 0.175622 -0.923880 0.655430 +v 0.089531 -0.980785 0.334135 +v -0.000000 0.980785 0.345923 +v -0.000000 0.923880 0.678551 +v 0.000000 0.831470 0.985103 +v 0.000000 0.707107 1.253798 +v 0.000000 0.555570 1.474310 +v 0.000000 0.382683 1.638165 +v 0.000000 0.195090 1.739067 +v 0.000000 0.000000 1.773137 +v 0.000000 -0.195090 1.739067 +v 0.000000 -0.382683 1.638165 +v 0.000000 -0.555570 1.474310 +v 0.000000 -0.707107 1.253798 +v 0.000000 -0.831470 0.985103 +v 0.000000 -0.923880 0.678551 +v -0.000000 -0.980785 0.345922 +v 0.000000 -1.000000 0.000001 +v -0.089531 0.980785 0.334136 +v -0.175622 0.923880 0.655430 +v -0.254963 0.831470 0.951536 +v -0.324506 0.707107 1.211075 +v -0.381579 0.555570 1.424074 +v -0.423988 0.382683 1.582346 +v -0.450103 0.195090 1.679809 +v -0.458921 0.000000 1.712719 +v -0.450103 -0.195090 1.679809 +v -0.423988 -0.382683 1.582346 +v -0.381579 -0.555570 1.424074 +v -0.324506 -0.707107 1.211075 +v -0.254963 -0.831470 0.951536 +v -0.175622 -0.923880 0.655430 +v -0.089531 -0.980785 0.334135 +v -0.172961 0.980785 0.299578 +v -0.339275 0.923880 0.587643 +v -0.492551 0.831470 0.853124 +v -0.626898 0.707107 1.085821 +v -0.737154 0.555570 1.276790 +v -0.819082 0.382683 1.418693 +v -0.869533 0.195090 1.506076 +v -0.886568 0.000000 1.535582 +v -0.869533 -0.195090 1.506076 +v -0.819082 -0.382683 1.418693 +v -0.737154 -0.555570 1.276790 +v -0.626898 -0.707107 1.085821 +v -0.492551 -0.831470 0.853124 +v -0.339275 -0.923880 0.587642 +v -0.172961 -0.980785 0.299578 +v -0.244604 0.980785 0.244605 +v -0.479808 0.923880 0.479808 +v -0.696572 0.831470 0.696573 +v -0.886568 0.707107 0.886569 +v -1.042494 0.555570 1.042495 +v -1.158357 0.382683 1.158358 +v -1.229705 0.195090 1.229706 +v -1.253797 0.000000 1.253798 +v -1.229705 -0.195090 1.229706 +v -1.158357 -0.382683 1.158358 +v -1.042494 -0.555570 1.042495 +v -0.886568 -0.707107 0.886569 +v -0.696572 -0.831470 0.696573 +v -0.479807 -0.923880 0.479808 +v -0.244604 -0.980785 0.244604 +v -0.000001 1.000000 0.000001 +v -0.299578 0.980785 0.172962 +v -0.587642 0.923880 0.339276 +v -0.853123 0.831470 0.492552 +v -1.085820 0.707107 0.626899 +v -1.276789 0.555570 0.737155 +v -1.418692 0.382683 0.819083 +v -1.506075 0.195090 0.869533 +v -1.535581 0.000000 0.886569 +v -1.506075 -0.195090 0.869533 +v -1.418692 -0.382683 0.819083 +v -1.276789 -0.555570 0.737155 +v -1.085820 -0.707107 0.626899 +v -0.853123 -0.831470 0.492552 +v -0.587642 -0.923880 0.339276 +v -0.299577 -0.980785 0.172961 +v -0.334135 0.980785 0.089532 +v -0.655429 0.923880 0.175622 +v -0.951535 0.831470 0.254964 +v -1.211075 0.707107 0.324507 +v -1.424073 0.555570 0.381580 +v -1.582345 0.382683 0.423989 +v -1.679809 0.195090 0.450104 +v -1.712718 0.000000 0.458922 +v -1.679809 -0.195090 0.450104 +v -1.582345 -0.382683 0.423989 +v -1.424073 -0.555570 0.381580 +v -1.211075 -0.707107 0.324507 +v -0.951535 -0.831470 0.254964 +v -0.655429 -0.923880 0.175622 +v -0.334135 -0.980785 0.089532 +v -0.345922 0.980785 0.000001 +v -0.678550 0.923880 0.000001 +v -0.985102 0.831470 0.000001 +v -1.253797 0.707107 0.000001 +v -1.474309 0.555570 0.000001 +v -1.638165 0.382683 0.000001 +v -1.739066 0.195090 0.000000 +v -1.773136 0.000000 0.000001 +v -1.739066 -0.195090 0.000000 +v -1.638165 -0.382683 0.000001 +v -1.474309 -0.555570 0.000001 +v -1.253797 -0.707107 0.000001 +v -0.985102 -0.831470 0.000001 +v -0.678550 -0.923880 0.000001 +v -0.345922 -0.980785 0.000001 +v -0.334135 0.980785 -0.089531 +v -0.655429 0.923880 -0.175621 +v -0.951535 0.831470 -0.254963 +v -1.211075 0.707107 -0.324506 +v -1.424073 0.555570 -0.381579 +v -1.582345 0.382683 -0.423987 +v -1.679809 0.195090 -0.450103 +v -1.712718 0.000000 -0.458921 +v -1.679809 -0.195090 -0.450103 +v -1.582345 -0.382683 -0.423988 +v -1.424073 -0.555570 -0.381579 +v -1.211075 -0.707107 -0.324506 +v -0.951535 -0.831470 -0.254963 +v -0.655429 -0.923880 -0.175621 +v -0.334135 -0.980785 -0.089531 +v -0.299578 0.980785 -0.172961 +v -0.587642 0.923880 -0.339275 +v -0.853123 0.831470 -0.492550 +v -1.085820 0.707107 -0.626898 +v -1.276789 0.555570 -0.737154 +v -1.418692 0.382683 -0.819082 +v -1.506075 0.195090 -0.869533 +v -1.535581 0.000000 -0.886568 +v -1.506075 -0.195090 -0.869533 +v -1.418692 -0.382683 -0.819082 +v -1.276789 -0.555570 -0.737154 +v -1.085820 -0.707107 -0.626898 +v -0.853123 -0.831470 -0.492550 +v -0.587641 -0.923880 -0.339274 +v -0.299577 -0.980785 -0.172960 +v -0.244604 0.980785 -0.244603 +v -0.479807 0.923880 -0.479807 +v -0.696572 0.831470 -0.696572 +v -0.886568 0.707107 -0.886568 +v -1.042494 0.555570 -1.042493 +v -1.158357 0.382683 -1.158357 +v -1.229705 0.195090 -1.229705 +v -1.253797 0.000000 -1.253796 +v -1.229705 -0.195090 -1.229705 +v -1.158357 -0.382683 -1.158357 +v -1.042494 -0.555570 -1.042493 +v -0.886568 -0.707107 -0.886568 +v -0.696572 -0.831470 -0.696572 +v -0.479807 -0.923880 -0.479807 +v -0.244604 -0.980785 -0.244603 +v -0.172961 0.980785 -0.299577 +v -0.339275 0.923880 -0.587641 +v -0.492551 0.831470 -0.853123 +v -0.626899 0.707107 -1.085819 +v -0.737155 0.555570 -1.276789 +v -0.819082 0.382683 -1.418691 +v -0.869533 0.195090 -1.506075 +v -0.886568 0.000000 -1.535581 +v -0.869533 -0.195090 -1.506075 +v -0.819082 -0.382683 -1.418692 +v -0.737155 -0.555570 -1.276789 +v -0.626899 -0.707107 -1.085819 +v -0.492551 -0.831470 -0.853123 +v -0.339275 -0.923880 -0.587641 +v -0.172961 -0.980785 -0.299576 +v -0.089531 0.980785 -0.334135 +v -0.175622 0.923880 -0.655429 +v -0.254963 0.831470 -0.951535 +v -0.324507 0.707107 -1.211074 +v -0.381579 0.555570 -1.424073 +v -0.423988 0.382683 -1.582345 +v -0.450103 0.195090 -1.679808 +v -0.458921 0.000000 -1.712718 +v -0.450103 -0.195090 -1.679808 +v -0.423988 -0.382683 -1.582345 +v -0.381579 -0.555570 -1.424073 +v -0.324507 -0.707107 -1.211074 +v -0.254963 -0.831470 -0.951535 +v -0.175622 -0.923880 -0.655428 +v -0.089531 -0.980785 -0.334134 +v 0.000000 0.923880 -0.678550 +v 0.000000 0.831470 -0.985101 +v -0.000000 0.707107 -1.253796 +v -0.000000 0.555570 -1.474309 +v -0.000000 0.382683 -1.638164 +v 0.000000 0.195090 -1.739065 +v 0.000000 0.000000 -1.773136 +v 0.000000 -0.195090 -1.739066 +v 0.000000 -0.382683 -1.638164 +v -0.000000 -0.555570 -1.474309 +v -0.000000 -0.707107 -1.253796 +v 0.000000 -0.831470 -0.985101 +v 0.000000 -0.923880 -0.678549 +v 0.000000 -0.980785 -0.345921 +vt 0.5195 0.6683 +vt 0.5430 0.5819 +vt 0.5646 0.6624 +vt 0.5195 0.8049 +vt 0.5916 0.7631 +vt 0.5195 0.7726 +vt 0.5195 0.7382 +vt 0.5827 0.7299 +vt 0.5816 0.7259 +vt 0.5195 0.7341 +vt 0.5195 0.7909 +vt 0.5963 0.7808 +vt 0.5704 0.6841 +vt 0.5195 0.6908 +vt 0.5195 0.8250 +vt 0.6052 0.8138 +vt 0.5584 0.6391 +vt 0.5195 0.6442 +vt 0.5195 0.8413 +vt 0.6094 0.8295 +vt 0.5457 0.5919 +vt 0.5195 0.5953 +vt 0.5195 0.8417 +vt 0.6095 0.8299 +vt 0.5327 0.5433 +vt 0.5195 0.5451 +vt 0.6061 0.8173 +vt 0.5195 0.8287 +vt 0.5195 0.5850 +vt 0.5195 0.4941 +vt 0.5195 0.4941 +vt 0.6000 0.7943 +vt 0.6868 0.7839 +vt 0.5649 0.5728 +vt 0.5450 0.5383 +vt 0.6749 0.7632 +vt 0.6066 0.6450 +vt 0.6588 0.7353 +vt 0.6416 0.7055 +vt 0.6395 0.7019 +vt 0.6679 0.7511 +vt 0.6179 0.6645 +vt 0.6850 0.7807 +vt 0.5946 0.6241 +vt 0.6931 0.7948 +vt 0.5701 0.5818 +vt 0.6933 0.7951 +vt 0.6892 0.6638 +vt 0.6586 0.6332 +vt 0.7535 0.7281 +vt 0.6256 0.6003 +vt 0.7650 0.7396 +vt 0.5911 0.5657 +vt 0.7653 0.7399 +vt 0.5555 0.5302 +vt 0.7561 0.7307 +vt 0.5837 0.5584 +vt 0.7392 0.7139 +vt 0.6427 0.6173 +vt 0.7165 0.6911 +vt 0.6921 0.6667 +vt 0.7294 0.7040 +vt 0.5636 0.5196 +vt 0.7886 0.6495 +vt 0.6704 0.5812 +vt 0.7607 0.6334 +vt 0.7309 0.6162 +vt 0.7273 0.6141 +vt 0.7765 0.6425 +vt 0.6898 0.5925 +vt 0.8061 0.6596 +vt 0.6495 0.5692 +vt 0.8202 0.6677 +vt 0.6072 0.5447 +vt 0.8205 0.6679 +vt 0.8092 0.6614 +vt 0.5982 0.5395 +vt 0.7095 0.5450 +vt 0.6645 0.5330 +vt 0.8549 0.5840 +vt 0.6173 0.5203 +vt 0.8552 0.5841 +vt 0.5687 0.5073 +vt 0.8427 0.5807 +vt 0.6073 0.5176 +vt 0.8197 0.5746 +vt 0.6878 0.5392 +vt 0.7885 0.5662 +vt 0.7553 0.5573 +vt 0.7513 0.5562 +vt 0.8062 0.5709 +vt 0.8391 0.5798 +vt 0.6103 0.4941 +vt 0.6937 0.4941 +vt 0.7980 0.4941 +vt 0.7636 0.4941 +vt 0.7594 0.4941 +vt 0.8163 0.4941 +vt 0.7162 0.4941 +vt 0.8504 0.4941 +vt 0.6696 0.4941 +vt 0.8667 0.4941 +vt 0.6207 0.4941 +vt 0.8671 0.4941 +vt 0.5705 0.4941 +vt 0.8541 0.4941 +vt 0.8302 0.4941 +vt 0.8549 0.4043 +vt 0.6173 0.4679 +vt 0.8552 0.4042 +vt 0.5687 0.4810 +vt 0.8427 0.4076 +vt 0.6073 0.4706 +vt 0.8197 0.4137 +vt 0.6878 0.4491 +vt 0.7885 0.4221 +vt 0.7553 0.4310 +vt 0.7513 0.4320 +vt 0.8062 0.4173 +vt 0.7095 0.4432 +vt 0.8391 0.4085 +vt 0.6645 0.4553 +vt 0.7607 0.3549 +vt 0.7309 0.3721 +vt 0.7273 0.3742 +vt 0.7765 0.3458 +vt 0.6898 0.3958 +vt 0.8061 0.3287 +vt 0.6495 0.4191 +vt 0.8202 0.3205 +vt 0.6072 0.4435 +vt 0.8205 0.3204 +vt 0.5636 0.4687 +vt 0.8092 0.3269 +vt 0.5982 0.4487 +vt 0.7886 0.3388 +vt 0.6704 0.4070 +vt 0.5911 0.4226 +vt 0.7650 0.2486 +vt 0.7653 0.2484 +vt 0.5555 0.4581 +vt 0.7561 0.2576 +vt 0.5837 0.4299 +vt 0.7392 0.2744 +vt 0.6427 0.3710 +vt 0.7165 0.2972 +vt 0.6921 0.3216 +vt 0.6892 0.3245 +vt 0.7294 0.2843 +vt 0.6586 0.3551 +vt 0.7535 0.2602 +vt 0.6256 0.3880 +vt 0.6416 0.2828 +vt 0.6588 0.2530 +vt 0.6395 0.2864 +vt 0.6679 0.2372 +vt 0.6179 0.3238 +vt 0.6850 0.2076 +vt 0.5946 0.3642 +vt 0.6931 0.1935 +vt 0.5701 0.4065 +vt 0.6933 0.1931 +vt 0.5450 0.4500 +vt 0.6868 0.2044 +vt 0.5649 0.4155 +vt 0.6749 0.2251 +vt 0.6066 0.3433 +vt 0.6094 0.1588 +vt 0.6095 0.1584 +vt 0.5327 0.4449 +vt 0.6061 0.1710 +vt 0.5430 0.4064 +vt 0.6000 0.1940 +vt 0.5646 0.3259 +vt 0.5916 0.2251 +vt 0.5827 0.2584 +vt 0.5816 0.2624 +vt 0.5963 0.2075 +vt 0.5704 0.3042 +vt 0.6052 0.1745 +vt 0.5584 0.3492 +vt 0.5457 0.3964 +vt 0.5195 0.2542 +vt 0.5195 0.2501 +vt 0.5195 0.1974 +vt 0.5195 0.2975 +vt 0.5195 0.1632 +vt 0.5195 0.3441 +vt 0.5195 0.1470 +vt 0.5195 0.3929 +vt 0.5195 0.1466 +vt 0.5195 0.4432 +vt 0.5195 0.1596 +vt 0.5195 0.4033 +vt 0.5195 0.1834 +vt 0.5195 0.3200 +vt 0.5195 0.2156 +vt 0.5063 0.4449 +vt 0.4329 0.1710 +vt 0.4960 0.4064 +vt 0.4391 0.1940 +vt 0.4744 0.3259 +vt 0.4475 0.2251 +vt 0.4564 0.2584 +vt 0.4574 0.2624 +vt 0.4427 0.2075 +vt 0.4686 0.3042 +vt 0.4339 0.1745 +vt 0.4807 0.3492 +vt 0.4297 0.1588 +vt 0.4933 0.3964 +vt 0.4296 0.1584 +vt 0.3996 0.2864 +vt 0.4212 0.3238 +vt 0.3541 0.2076 +vt 0.4445 0.3642 +vt 0.3459 0.1935 +vt 0.4689 0.4065 +vt 0.3458 0.1931 +vt 0.4941 0.4500 +vt 0.3523 0.2044 +vt 0.4741 0.4155 +vt 0.3642 0.2251 +vt 0.4324 0.3433 +vt 0.3803 0.2530 +vt 0.3975 0.2828 +vt 0.3712 0.2372 +vt 0.4553 0.4299 +vt 0.4835 0.4581 +vt 0.2830 0.2576 +vt 0.2998 0.2744 +vt 0.3964 0.3710 +vt 0.3226 0.2972 +vt 0.3469 0.3216 +vt 0.3499 0.3245 +vt 0.3097 0.2843 +vt 0.3805 0.3551 +vt 0.2856 0.2602 +vt 0.4134 0.3880 +vt 0.2740 0.2486 +vt 0.4480 0.4226 +vt 0.2738 0.2484 +vt 0.2330 0.3287 +vt 0.3896 0.4191 +vt 0.2189 0.3205 +vt 0.4319 0.4435 +vt 0.2185 0.3204 +vt 0.4754 0.4687 +vt 0.2298 0.3269 +vt 0.4409 0.4487 +vt 0.2504 0.3388 +vt 0.3687 0.4070 +vt 0.2783 0.3549 +vt 0.3082 0.3721 +vt 0.3118 0.3742 +vt 0.2625 0.3458 +vt 0.3492 0.3958 +vt 0.1964 0.4076 +vt 0.2194 0.4137 +vt 0.3513 0.4491 +vt 0.2505 0.4221 +vt 0.2838 0.4310 +vt 0.2878 0.4320 +vt 0.2329 0.4173 +vt 0.3296 0.4432 +vt 0.1999 0.4085 +vt 0.3746 0.4553 +vt 0.1842 0.4043 +vt 0.4218 0.4679 +vt 0.1838 0.4042 +vt 0.4703 0.4810 +vt 0.4318 0.4706 +vt 0.3695 0.4941 +vt 0.1723 0.4941 +vt 0.4183 0.4941 +vt 0.1720 0.4941 +vt 0.4686 0.4941 +vt 0.1850 0.4941 +vt 0.4287 0.4941 +vt 0.2088 0.4941 +vt 0.3453 0.4941 +vt 0.2410 0.4941 +vt 0.2755 0.4941 +vt 0.2796 0.4941 +vt 0.2228 0.4941 +vt 0.3229 0.4941 +vt 0.1886 0.4941 +vt 0.3513 0.5392 +vt 0.2505 0.5662 +vt 0.2838 0.5573 +vt 0.2878 0.5562 +vt 0.2329 0.5709 +vt 0.3296 0.5450 +vt 0.1999 0.5798 +vt 0.3746 0.5330 +vt 0.1842 0.5840 +vt 0.4218 0.5203 +vt 0.1838 0.5841 +vt 0.4703 0.5073 +vt 0.1964 0.5807 +vt 0.4318 0.5176 +vt 0.2194 0.5746 +vt 0.2189 0.6677 +vt 0.4319 0.5447 +vt 0.2185 0.6679 +vt 0.4754 0.5196 +vt 0.2298 0.6614 +vt 0.4409 0.5395 +vt 0.2504 0.6495 +vt 0.3687 0.5812 +vt 0.2783 0.6334 +vt 0.3082 0.6162 +vt 0.3118 0.6141 +vt 0.2625 0.6425 +vt 0.3492 0.5925 +vt 0.2330 0.6596 +vt 0.3896 0.5692 +vt 0.3226 0.6911 +vt 0.3469 0.6667 +vt 0.3499 0.6638 +vt 0.3097 0.7040 +vt 0.3805 0.6332 +vt 0.2856 0.7281 +vt 0.4134 0.6003 +vt 0.2740 0.7396 +vt 0.4480 0.5657 +vt 0.2738 0.7399 +vt 0.4835 0.5302 +vt 0.2830 0.7307 +vt 0.4553 0.5584 +vt 0.2998 0.7139 +vt 0.3964 0.6173 +vt 0.4445 0.6241 +vt 0.4689 0.5818 +vt 0.3459 0.7948 +vt 0.3458 0.7951 +vt 0.4941 0.5383 +vt 0.3523 0.7839 +vt 0.4741 0.5728 +vt 0.3642 0.7632 +vt 0.4324 0.6450 +vt 0.3803 0.7353 +vt 0.3975 0.7055 +vt 0.3996 0.7019 +vt 0.3712 0.7511 +vt 0.4212 0.6645 +vt 0.3541 0.7807 +vt 0.4574 0.7259 +vt 0.4427 0.7808 +vt 0.4686 0.6841 +vt 0.4339 0.8138 +vt 0.4807 0.6391 +vt 0.4297 0.8295 +vt 0.4933 0.5919 +vt 0.4296 0.8299 +vt 0.5063 0.5433 +vt 0.4329 0.8173 +vt 0.4960 0.5819 +vt 0.4391 0.7943 +vt 0.4744 0.6624 +vt 0.4475 0.7631 +vt 0.4564 0.7299 +vn 0.0222 0.9854 -0.1686 +vn 0.1152 -0.4705 -0.8748 +vn 0.0380 0.9568 -0.2884 +vn 0.0951 -0.6848 -0.7225 +vn 0.0552 0.9061 -0.4194 +vn 0.0744 -0.8219 -0.5648 +vn 0.0744 0.8219 -0.5648 +vn 0.0552 -0.9061 -0.4194 +vn 0.0951 0.6848 -0.7225 +vn 0.0380 -0.9568 -0.2884 +vn 0.1152 0.4705 -0.8748 +vn 0.0222 -0.9854 -0.1686 +vn 0.1286 0.1706 -0.9769 +vn 0.0073 0.9984 -0.0555 +vn 0.0073 -0.9984 -0.0555 +vn 0.1286 -0.1706 -0.9769 +vn 0.3771 0.1706 -0.9103 +vn 0.0214 0.9984 -0.0517 +vn 0.0214 -0.9984 -0.0517 +vn 0.3771 -0.1706 -0.9103 +vn 0.0651 0.9854 -0.1571 +vn 0.3377 -0.4705 -0.8152 +vn 0.1113 0.9568 -0.2688 +vn 0.2789 -0.6848 -0.6733 +vn 0.1619 0.9061 -0.3908 +vn 0.2180 -0.8219 -0.5263 +vn 0.2180 0.8219 -0.5263 +vn 0.1619 -0.9061 -0.3908 +vn 0.2789 0.6848 -0.6733 +vn 0.1113 -0.9568 -0.2688 +vn 0.3377 0.4705 -0.8152 +vn 0.0651 -0.9854 -0.1571 +vn 0.3468 -0.8219 -0.4519 +vn 0.3468 0.8219 -0.4519 +vn 0.2575 -0.9061 -0.3356 +vn 0.4436 0.6848 -0.5782 +vn 0.1771 -0.9568 -0.2308 +vn 0.5372 0.4705 -0.7000 +vn 0.1035 -0.9854 -0.1349 +vn 0.5998 0.1706 -0.7817 +vn 0.0341 0.9984 -0.0444 +vn 0.0341 -0.9984 -0.0444 +vn 0.5998 -0.1706 -0.7817 +vn 0.1035 0.9854 -0.1349 +vn 0.5372 -0.4705 -0.7000 +vn 0.1771 0.9568 -0.2308 +vn 0.4436 -0.6848 -0.5782 +vn 0.2575 0.9061 -0.3356 +vn 0.0444 -0.9984 -0.0341 +vn 0.7817 -0.1706 -0.5998 +vn 0.1349 0.9854 -0.1035 +vn 0.7000 -0.4705 -0.5372 +vn 0.2308 0.9568 -0.1771 +vn 0.5782 -0.6848 -0.4436 +vn 0.3356 0.9061 -0.2575 +vn 0.4519 -0.8219 -0.3468 +vn 0.4519 0.8219 -0.3468 +vn 0.3356 -0.9061 -0.2575 +vn 0.5782 0.6848 -0.4436 +vn 0.2308 -0.9568 -0.1771 +vn 0.7000 0.4705 -0.5372 +vn 0.1349 -0.9854 -0.1035 +vn 0.7817 0.1706 -0.5998 +vn 0.0444 0.9984 -0.0341 +vn 0.3908 -0.9061 -0.1619 +vn 0.6733 0.6848 -0.2789 +vn 0.2688 -0.9568 -0.1113 +vn 0.8152 0.4705 -0.3377 +vn 0.1571 -0.9854 -0.0651 +vn 0.9103 0.1706 -0.3771 +vn 0.0517 0.9984 -0.0214 +vn 0.0517 -0.9984 -0.0214 +vn 0.9103 -0.1706 -0.3771 +vn 0.1571 0.9854 -0.0651 +vn 0.8152 -0.4705 -0.3377 +vn 0.2688 0.9568 -0.1113 +vn 0.6733 -0.6848 -0.2789 +vn 0.3908 0.9061 -0.1619 +vn 0.5263 -0.8219 -0.2180 +vn 0.5263 0.8219 -0.2180 +vn 0.1686 0.9854 -0.0222 +vn 0.8748 -0.4705 -0.1152 +vn 0.2884 0.9568 -0.0380 +vn 0.7225 -0.6848 -0.0951 +vn 0.4194 0.9061 -0.0552 +vn 0.5648 -0.8219 -0.0744 +vn 0.5648 0.8219 -0.0744 +vn 0.4194 -0.9061 -0.0552 +vn 0.7225 0.6848 -0.0951 +vn 0.2884 -0.9568 -0.0380 +vn 0.8748 0.4705 -0.1152 +vn 0.1686 -0.9854 -0.0222 +vn 0.9769 0.1706 -0.1286 +vn 0.0555 0.9984 -0.0073 +vn 0.0555 -0.9984 -0.0073 +vn 0.9769 -0.1706 -0.1286 +vn 0.7225 0.6848 0.0951 +vn 0.2884 -0.9568 0.0380 +vn 0.8748 0.4705 0.1152 +vn 0.1686 -0.9854 0.0222 +vn 0.9769 0.1706 0.1286 +vn 0.0555 0.9984 0.0073 +vn 0.0555 -0.9984 0.0073 +vn 0.9769 -0.1706 0.1286 +vn 0.1686 0.9854 0.0222 +vn 0.8748 -0.4705 0.1152 +vn 0.2884 0.9568 0.0380 +vn 0.7225 -0.6848 0.0951 +vn 0.4194 0.9061 0.0552 +vn 0.5648 -0.8219 0.0744 +vn 0.5648 0.8219 0.0744 +vn 0.4194 -0.9061 0.0552 +vn 0.8152 -0.4705 0.3377 +vn 0.2688 0.9568 0.1113 +vn 0.6733 -0.6848 0.2789 +vn 0.3908 0.9061 0.1619 +vn 0.5263 -0.8219 0.2180 +vn 0.5263 0.8219 0.2180 +vn 0.3908 -0.9061 0.1619 +vn 0.6733 0.6848 0.2789 +vn 0.2688 -0.9568 0.1113 +vn 0.8152 0.4705 0.3377 +vn 0.1571 -0.9854 0.0651 +vn 0.9103 0.1706 0.3771 +vn 0.0517 0.9984 0.0214 +vn 0.0517 -0.9984 0.0214 +vn 0.9103 -0.1706 0.3771 +vn 0.1571 0.9854 0.0651 +vn 0.2308 -0.9568 0.1771 +vn 0.7000 0.4705 0.5372 +vn 0.1349 -0.9854 0.1035 +vn 0.7817 0.1706 0.5998 +vn 0.0444 0.9984 0.0341 +vn 0.0444 -0.9984 0.0341 +vn 0.7817 -0.1706 0.5998 +vn 0.1349 0.9854 0.1035 +vn 0.7000 -0.4705 0.5372 +vn 0.2308 0.9568 0.1771 +vn 0.5782 -0.6848 0.4436 +vn 0.3356 0.9061 0.2575 +vn 0.4519 -0.8219 0.3468 +vn 0.4519 0.8219 0.3468 +vn 0.3356 -0.9061 0.2575 +vn 0.5782 0.6848 0.4436 +vn 0.1771 0.9568 0.2308 +vn 0.4436 -0.6848 0.5782 +vn 0.2575 0.9061 0.3356 +vn 0.3468 -0.8219 0.4519 +vn 0.3468 0.8219 0.4519 +vn 0.2575 -0.9061 0.3356 +vn 0.4436 0.6848 0.5782 +vn 0.1771 -0.9568 0.2308 +vn 0.5372 0.4705 0.7000 +vn 0.1035 -0.9854 0.1349 +vn 0.5998 0.1706 0.7817 +vn 0.0341 0.9984 0.0444 +vn 0.0341 -0.9984 0.0444 +vn 0.5998 -0.1706 0.7817 +vn 0.1035 0.9854 0.1349 +vn 0.5372 -0.4705 0.7000 +vn 0.3377 0.4705 0.8152 +vn 0.0651 -0.9854 0.1571 +vn 0.3771 0.1706 0.9103 +vn 0.0214 0.9984 0.0517 +vn 0.0214 -0.9984 0.0517 +vn 0.3771 -0.1706 0.9103 +vn 0.0651 0.9854 0.1571 +vn 0.3377 -0.4705 0.8152 +vn 0.1113 0.9568 0.2688 +vn 0.2789 -0.6848 0.6733 +vn 0.1619 0.9061 0.3908 +vn 0.2180 -0.8219 0.5263 +vn 0.2180 0.8219 0.5263 +vn 0.1619 -0.9061 0.3908 +vn 0.2789 0.6848 0.6733 +vn 0.1113 -0.9568 0.2688 +vn 0.0951 -0.6848 0.7225 +vn 0.0552 0.9061 0.4194 +vn 0.0744 -0.8219 0.5648 +vn 0.0744 0.8219 0.5648 +vn 0.0552 -0.9061 0.4194 +vn 0.0951 0.6848 0.7225 +vn 0.0380 -0.9568 0.2884 +vn 0.1152 0.4705 0.8748 +vn 0.0222 -0.9854 0.1686 +vn 0.1286 0.1706 0.9769 +vn 0.0073 0.9984 0.0555 +vn 0.0073 -0.9984 0.0555 +vn 0.1286 -0.1706 0.9769 +vn 0.0222 0.9854 0.1686 +vn 0.1152 -0.4705 0.8748 +vn 0.0380 0.9568 0.2884 +vn -0.0222 -0.9854 0.1686 +vn -0.1286 0.1706 0.9769 +vn -0.0073 0.9984 0.0555 +vn -0.0073 -0.9984 0.0555 +vn -0.1286 -0.1706 0.9769 +vn -0.0222 0.9854 0.1686 +vn -0.1152 -0.4705 0.8748 +vn -0.0380 0.9568 0.2884 +vn -0.0951 -0.6848 0.7225 +vn -0.0552 0.9061 0.4194 +vn -0.0744 -0.8219 0.5648 +vn -0.0744 0.8219 0.5648 +vn -0.0552 -0.9061 0.4194 +vn -0.0951 0.6848 0.7225 +vn -0.0380 -0.9568 0.2884 +vn -0.1152 0.4705 0.8748 +vn -0.2180 -0.8219 0.5263 +vn -0.2180 0.8219 0.5263 +vn -0.1619 -0.9061 0.3908 +vn -0.2789 0.6848 0.6733 +vn -0.1113 -0.9568 0.2688 +vn -0.3377 0.4705 0.8152 +vn -0.0651 -0.9854 0.1571 +vn -0.3771 0.1706 0.9103 +vn -0.0214 0.9984 0.0517 +vn -0.0214 -0.9984 0.0517 +vn -0.3771 -0.1706 0.9103 +vn -0.0651 0.9854 0.1571 +vn -0.3377 -0.4705 0.8152 +vn -0.1113 0.9568 0.2688 +vn -0.2789 -0.6848 0.6733 +vn -0.1619 0.9061 0.3908 +vn -0.0341 0.9984 0.0444 +vn -0.0341 -0.9984 0.0444 +vn -0.5998 -0.1706 0.7817 +vn -0.1035 0.9854 0.1349 +vn -0.5372 -0.4705 0.7000 +vn -0.1771 0.9568 0.2308 +vn -0.4436 -0.6848 0.5782 +vn -0.2575 0.9061 0.3356 +vn -0.3468 -0.8219 0.4519 +vn -0.3468 0.8219 0.4519 +vn -0.2575 -0.9061 0.3356 +vn -0.4436 0.6848 0.5782 +vn -0.1771 -0.9568 0.2308 +vn -0.5372 0.4705 0.7000 +vn -0.1035 -0.9854 0.1349 +vn -0.5998 0.1706 0.7817 +vn -0.4519 0.8219 0.3468 +vn -0.3356 -0.9061 0.2575 +vn -0.5782 0.6848 0.4436 +vn -0.2308 -0.9568 0.1771 +vn -0.7000 0.4705 0.5372 +vn -0.1349 -0.9854 0.1035 +vn -0.7817 0.1706 0.5998 +vn -0.0444 0.9984 0.0341 +vn -0.0444 -0.9984 0.0341 +vn -0.7817 -0.1706 0.5998 +vn -0.1349 0.9854 0.1035 +vn -0.7000 -0.4705 0.5372 +vn -0.2308 0.9568 0.1771 +vn -0.5782 -0.6848 0.4436 +vn -0.3356 0.9061 0.2575 +vn -0.4519 -0.8219 0.3468 +vn -0.9103 -0.1706 0.3771 +vn -0.1571 0.9854 0.0651 +vn -0.8152 -0.4705 0.3377 +vn -0.2688 0.9568 0.1113 +vn -0.6733 -0.6848 0.2789 +vn -0.3908 0.9061 0.1619 +vn -0.5263 -0.8219 0.2180 +vn -0.5263 0.8219 0.2180 +vn -0.3908 -0.9061 0.1619 +vn -0.6733 0.6848 0.2789 +vn -0.2688 -0.9568 0.1113 +vn -0.8152 0.4705 0.3377 +vn -0.1571 -0.9854 0.0651 +vn -0.9103 0.1706 0.3771 +vn -0.0517 0.9984 0.0214 +vn -0.0517 -0.9984 0.0214 +vn -0.4194 -0.9061 0.0552 +vn -0.7225 0.6848 0.0951 +vn -0.2884 -0.9568 0.0380 +vn -0.8748 0.4705 0.1152 +vn -0.1686 -0.9854 0.0222 +vn -0.9769 0.1706 0.1286 +vn -0.0555 0.9984 0.0073 +vn -0.0555 -0.9984 0.0073 +vn -0.9769 -0.1706 0.1286 +vn -0.1686 0.9854 0.0222 +vn -0.8748 -0.4705 0.1152 +vn -0.2884 0.9568 0.0380 +vn -0.7225 -0.6848 0.0951 +vn -0.4194 0.9061 0.0552 +vn -0.5648 -0.8219 0.0744 +vn -0.5648 0.8219 0.0744 +vn -0.1686 0.9854 -0.0222 +vn -0.8748 -0.4705 -0.1152 +vn -0.2884 0.9568 -0.0380 +vn -0.7225 -0.6848 -0.0951 +vn -0.4194 0.9061 -0.0552 +vn -0.5648 -0.8219 -0.0744 +vn -0.5648 0.8219 -0.0744 +vn -0.4194 -0.9061 -0.0552 +vn -0.7225 0.6848 -0.0951 +vn -0.2884 -0.9568 -0.0380 +vn -0.8748 0.4705 -0.1152 +vn -0.1686 -0.9854 -0.0222 +vn -0.9769 0.1706 -0.1286 +vn -0.0555 0.9984 -0.0073 +vn -0.0555 -0.9984 -0.0073 +vn -0.9769 -0.1706 -0.1286 +vn -0.6733 0.6848 -0.2789 +vn -0.2688 -0.9568 -0.1113 +vn -0.8152 0.4705 -0.3377 +vn -0.1571 -0.9854 -0.0651 +vn -0.9103 0.1706 -0.3771 +vn -0.0517 0.9984 -0.0214 +vn -0.0517 -0.9984 -0.0214 +vn -0.9103 -0.1706 -0.3771 +vn -0.1571 0.9854 -0.0651 +vn -0.8152 -0.4705 -0.3377 +vn -0.2688 0.9568 -0.1113 +vn -0.6733 -0.6848 -0.2789 +vn -0.3908 0.9061 -0.1619 +vn -0.5263 -0.8219 -0.2180 +vn -0.5263 0.8219 -0.2180 +vn -0.3908 -0.9061 -0.1619 +vn -0.7000 -0.4705 -0.5372 +vn -0.2308 0.9568 -0.1771 +vn -0.5782 -0.6848 -0.4436 +vn -0.3356 0.9061 -0.2575 +vn -0.4519 -0.8219 -0.3468 +vn -0.4519 0.8219 -0.3468 +vn -0.3356 -0.9061 -0.2575 +vn -0.5782 0.6848 -0.4436 +vn -0.2308 -0.9568 -0.1771 +vn -0.7000 0.4705 -0.5372 +vn -0.1349 -0.9854 -0.1035 +vn -0.7817 0.1706 -0.5998 +vn -0.0444 0.9984 -0.0341 +vn -0.0444 -0.9984 -0.0341 +vn -0.7817 -0.1706 -0.5998 +vn -0.1349 0.9854 -0.1035 +vn -0.1771 -0.9568 -0.2308 +vn -0.5372 0.4705 -0.7000 +vn -0.1035 -0.9854 -0.1349 +vn -0.5998 0.1706 -0.7817 +vn -0.0341 0.9984 -0.0444 +vn -0.0341 -0.9984 -0.0444 +vn -0.5998 -0.1706 -0.7817 +vn -0.1035 0.9854 -0.1349 +vn -0.5372 -0.4705 -0.7000 +vn -0.1771 0.9568 -0.2308 +vn -0.4436 -0.6848 -0.5782 +vn -0.2575 0.9061 -0.3356 +vn -0.3468 -0.8219 -0.4519 +vn -0.3468 0.8219 -0.4519 +vn -0.2575 -0.9061 -0.3356 +vn -0.4436 0.6848 -0.5782 +vn -0.2789 -0.6848 -0.6733 +vn -0.1619 0.9061 -0.3908 +vn -0.2180 -0.8219 -0.5263 +vn -0.2180 0.8219 -0.5263 +vn -0.1619 -0.9061 -0.3908 +vn -0.2789 0.6848 -0.6733 +vn -0.1113 -0.9568 -0.2688 +vn -0.3377 0.4705 -0.8152 +vn -0.0651 -0.9854 -0.1571 +vn -0.3771 0.1706 -0.9103 +vn -0.0214 0.9984 -0.0517 +vn -0.0214 -0.9984 -0.0517 +vn -0.3771 -0.1706 -0.9103 +vn -0.0651 0.9854 -0.1571 +vn -0.3377 -0.4705 -0.8152 +vn -0.1113 0.9568 -0.2688 +vn -0.0222 -0.9854 -0.1686 +vn -0.1286 0.1706 -0.9769 +vn -0.0073 0.9984 -0.0555 +vn -0.0073 -0.9984 -0.0555 +vn -0.1286 -0.1706 -0.9769 +vn -0.0222 0.9854 -0.1686 +vn -0.1152 -0.4705 -0.8748 +vn -0.0380 0.9568 -0.2884 +vn -0.0951 -0.6848 -0.7225 +vn -0.0552 0.9061 -0.4194 +vn -0.0744 -0.8219 -0.5648 +vn -0.0744 0.8219 -0.5648 +vn -0.0552 -0.9061 -0.4194 +vn -0.0951 0.6848 -0.7225 +vn -0.0380 -0.9568 -0.2884 +vn -0.1152 0.4705 -0.8748 +usemtl None +f 349/1/1 2/2/1 3/3/1 +f 356/4/2 11/5/2 357/6/2 +f 350/7/3 3/3/3 4/8/3 +f 357/6/4 12/9/4 358/10/4 +f 351/11/5 4/8/5 5/12/5 +f 358/10/6 13/13/6 359/14/6 +f 352/15/7 5/12/7 6/16/7 +f 359/14/8 14/17/8 360/18/8 +f 353/19/9 6/16/9 7/20/9 +f 360/18/10 15/21/10 361/22/10 +f 354/23/11 7/20/11 8/24/11 +f 361/22/12 16/25/12 362/26/12 +f 354/23/13 9/27/13 355/28/13 +f 1/29/14 228/30/14 2/2/14 +f 182/31/15 362/26/15 16/25/15 +f 356/4/16 9/27/16 10/32/16 +f 8/24/17 24/33/17 9/27/17 +f 2/2/18 228/30/18 17/34/18 +f 182/31/19 16/25/19 31/35/19 +f 10/32/20 24/33/20 25/36/20 +f 2/2/21 18/37/21 3/3/21 +f 10/32/22 26/38/22 11/5/22 +f 3/3/23 19/39/23 4/8/23 +f 11/5/24 27/40/24 12/9/24 +f 4/8/25 20/41/25 5/12/25 +f 12/9/26 28/42/26 13/13/26 +f 5/12/27 21/43/27 6/16/27 +f 13/13/28 29/44/28 14/17/28 +f 7/20/29 21/43/29 22/45/29 +f 14/17/30 30/46/30 15/21/30 +f 7/20/31 23/47/31 8/24/31 +f 15/21/32 31/35/32 16/25/32 +f 28/42/33 42/48/33 43/49/33 +f 20/41/34 36/50/34 21/43/34 +f 29/44/35 43/49/35 44/51/35 +f 21/43/36 37/52/36 22/45/36 +f 29/44/37 45/53/37 30/46/37 +f 22/45/38 38/54/38 23/47/38 +f 30/46/39 46/55/39 31/35/39 +f 23/47/40 39/56/40 24/33/40 +f 17/34/41 228/30/41 32/57/41 +f 182/31/42 31/35/42 46/55/42 +f 24/33/43 40/58/43 25/36/43 +f 18/37/44 32/57/44 33/59/44 +f 26/38/45 40/58/45 41/60/45 +f 18/37/46 34/61/46 19/39/46 +f 27/40/47 41/60/47 42/48/47 +f 19/39/48 35/62/48 20/41/48 +f 182/31/49 46/55/49 61/63/49 +f 39/56/50 55/64/50 40/58/50 +f 32/57/51 48/65/51 33/59/51 +f 40/58/52 56/66/52 41/60/52 +f 33/59/53 49/67/53 34/61/53 +f 42/48/54 56/66/54 57/68/54 +f 34/61/55 50/69/55 35/62/55 +f 42/48/56 58/70/56 43/49/56 +f 35/62/57 51/71/57 36/50/57 +f 43/49/58 59/72/58 44/51/58 +f 36/50/59 52/73/59 37/52/59 +f 44/51/60 60/74/60 45/53/60 +f 38/54/61 52/73/61 53/75/61 +f 46/55/62 60/74/62 61/63/62 +f 39/56/63 53/75/63 54/76/63 +f 32/57/64 228/30/64 47/77/64 +f 59/72/65 73/78/65 74/79/65 +f 51/71/66 67/80/66 52/73/66 +f 59/72/67 75/81/67 60/74/67 +f 52/73/68 68/82/68 53/75/68 +f 61/63/69 75/81/69 76/83/69 +f 54/76/70 68/82/70 69/84/70 +f 47/77/71 228/30/71 62/85/71 +f 182/31/72 61/63/72 76/83/72 +f 54/76/73 70/86/73 55/64/73 +f 47/77/74 63/87/74 48/65/74 +f 55/64/75 71/88/75 56/66/75 +f 48/65/76 64/89/76 49/67/76 +f 57/68/77 71/88/77 72/90/77 +f 49/67/78 65/91/78 50/69/78 +f 57/68/79 73/78/79 58/70/79 +f 50/69/80 66/92/80 51/71/80 +f 63/87/81 77/93/81 78/94/81 +f 70/86/82 86/95/82 71/88/82 +f 63/87/83 79/96/83 64/89/83 +f 71/88/84 87/97/84 72/90/84 +f 64/89/85 80/98/85 65/91/85 +f 73/78/86 87/97/86 88/99/86 +f 65/91/87 81/100/87 66/92/87 +f 74/79/88 88/99/88 89/101/88 +f 66/92/89 82/102/89 67/80/89 +f 75/81/90 89/101/90 90/103/90 +f 68/82/91 82/102/91 83/104/91 +f 76/83/92 90/103/92 91/105/92 +f 69/84/93 83/104/93 84/106/93 +f 62/85/94 228/30/94 77/93/94 +f 182/31/95 76/83/95 91/105/95 +f 69/84/96 85/107/96 70/86/96 +f 81/100/97 97/108/97 82/102/97 +f 89/101/98 105/109/98 90/103/98 +f 82/102/99 98/110/99 83/104/99 +f 90/103/100 106/111/100 91/105/100 +f 83/104/101 99/112/101 84/106/101 +f 77/93/102 228/30/102 92/113/102 +f 182/31/103 91/105/103 106/111/103 +f 84/106/104 100/114/104 85/107/104 +f 77/93/105 93/115/105 78/94/105 +f 85/107/106 101/116/106 86/95/106 +f 79/96/107 93/115/107 94/117/107 +f 87/97/108 101/116/108 102/118/108 +f 79/96/109 95/119/109 80/98/109 +f 87/97/110 103/120/110 88/99/110 +f 80/98/111 96/121/111 81/100/111 +f 88/99/112 104/122/112 89/101/112 +f 100/114/113 116/123/113 101/116/113 +f 93/115/114 109/124/114 94/117/114 +f 101/116/115 117/125/115 102/118/115 +f 94/117/116 110/126/116 95/119/116 +f 103/120/117 117/125/117 118/127/117 +f 95/119/118 111/128/118 96/121/118 +f 104/122/119 118/127/119 119/129/119 +f 96/121/120 112/130/120 97/108/120 +f 105/109/121 119/129/121 120/131/121 +f 98/110/122 112/130/122 113/132/122 +f 106/111/123 120/131/123 121/133/123 +f 98/110/124 114/134/124 99/112/124 +f 92/113/125 228/30/125 107/135/125 +f 182/31/126 106/111/126 121/133/126 +f 99/112/127 115/136/127 100/114/127 +f 92/113/128 108/137/128 93/115/128 +f 119/129/129 135/138/129 120/131/129 +f 113/132/130 127/139/130 128/140/130 +f 121/133/131 135/138/131 136/141/131 +f 113/132/132 129/142/132 114/134/132 +f 107/135/133 228/30/133 122/143/133 +f 182/31/134 121/133/134 136/141/134 +f 115/136/135 129/142/135 130/144/135 +f 107/135/136 123/145/136 108/137/136 +f 115/136/137 131/146/137 116/123/137 +f 108/137/138 124/147/138 109/124/138 +f 117/125/139 131/146/139 132/148/139 +f 109/124/140 125/149/140 110/126/140 +f 118/127/141 132/148/141 133/150/141 +f 110/126/142 126/151/142 111/128/142 +f 118/127/143 134/152/143 119/129/143 +f 111/128/144 127/139/144 112/130/144 +f 123/145/145 139/153/145 124/147/145 +f 132/148/146 146/154/146 147/155/146 +f 124/147/147 140/156/147 125/149/147 +f 133/150/148 147/155/148 148/157/148 +f 125/149/149 141/158/149 126/151/149 +f 133/150/150 149/159/150 134/152/150 +f 126/151/151 142/160/151 127/139/151 +f 135/138/152 149/159/152 150/161/152 +f 128/140/153 142/160/153 143/162/153 +f 136/141/154 150/161/154 151/163/154 +f 128/140/155 144/164/155 129/142/155 +f 122/143/156 228/30/156 137/165/156 +f 182/31/157 136/141/157 151/163/157 +f 130/144/158 144/164/158 145/166/158 +f 122/143/159 138/167/159 123/145/159 +f 130/144/160 146/154/160 131/146/160 +f 143/162/161 157/168/161 158/169/161 +f 150/161/162 166/170/162 151/163/162 +f 144/164/163 158/169/163 159/171/163 +f 137/165/164 228/30/164 152/172/164 +f 182/31/165 151/163/165 166/170/165 +f 144/164/166 160/173/166 145/166/166 +f 138/167/167 152/172/167 153/174/167 +f 145/166/168 161/175/168 146/154/168 +f 138/167/169 154/176/169 139/153/169 +f 147/155/170 161/175/170 162/177/170 +f 139/153/171 155/178/171 140/156/171 +f 148/157/172 162/177/172 163/179/172 +f 140/156/173 156/180/173 141/158/173 +f 148/157/174 164/181/174 149/159/174 +f 141/158/175 157/168/175 142/160/175 +f 149/159/176 165/182/176 150/161/176 +f 161/175/177 177/183/177 162/177/177 +f 155/178/178 169/184/178 170/185/178 +f 163/179/179 177/183/179 178/186/179 +f 155/178/180 171/187/180 156/180/180 +f 164/181/181 178/186/181 179/188/181 +f 156/180/182 172/189/182 157/168/182 +f 165/182/183 179/188/183 180/190/183 +f 158/169/184 172/189/184 173/191/184 +f 166/170/185 180/190/185 181/192/185 +f 158/169/186 174/193/186 159/171/186 +f 152/172/187 228/30/187 167/194/187 +f 182/31/188 166/170/188 181/192/188 +f 159/171/189 175/195/189 160/173/189 +f 152/172/190 168/196/190 153/174/190 +f 160/173/191 176/197/191 161/175/191 +f 153/174/192 169/184/192 154/176/192 +f 180/190/193 197/198/193 181/192/193 +f 173/191/194 190/199/194 174/193/194 +f 167/194/195 228/30/195 183/200/195 +f 182/31/196 181/192/196 197/198/196 +f 175/195/197 190/199/197 191/201/197 +f 168/196/198 183/200/198 184/202/198 +f 175/195/199 192/203/199 176/197/199 +f 168/196/200 185/204/200 169/184/200 +f 176/197/201 193/205/201 177/183/201 +f 169/184/202 186/206/202 170/185/202 +f 178/186/203 193/205/203 194/207/203 +f 170/185/204 187/208/204 171/187/204 +f 179/188/205 194/207/205 195/209/205 +f 171/187/206 188/210/206 172/189/206 +f 180/190/207 195/209/207 196/211/207 +f 173/191/208 188/210/208 189/212/208 +f 194/207/209 208/213/209 209/214/209 +f 186/206/210 202/215/210 187/208/210 +f 194/207/211 210/216/211 195/209/211 +f 187/208/212 203/217/212 188/210/212 +f 196/211/213 210/216/213 211/218/213 +f 189/212/214 203/217/214 204/219/214 +f 196/211/215 212/220/215 197/198/215 +f 189/212/216 205/221/216 190/199/216 +f 183/200/217 228/30/217 198/222/217 +f 182/31/218 197/198/218 212/220/218 +f 191/201/219 205/221/219 206/223/219 +f 183/200/220 199/224/220 184/202/220 +f 191/201/221 207/225/221 192/203/221 +f 184/202/222 200/226/222 185/204/222 +f 192/203/223 208/213/223 193/205/223 +f 185/204/224 201/227/224 186/206/224 +f 198/222/225 228/30/225 213/228/225 +f 182/31/226 212/220/226 227/229/226 +f 206/223/227 220/230/227 221/231/227 +f 198/222/228 214/232/228 199/224/228 +f 206/223/229 222/233/229 207/225/229 +f 199/224/230 215/234/230 200/226/230 +f 207/225/231 223/235/231 208/213/231 +f 200/226/232 216/236/232 201/227/232 +f 209/214/233 223/235/233 224/237/233 +f 201/227/234 217/238/234 202/215/234 +f 209/214/235 225/239/235 210/216/235 +f 202/215/236 218/240/236 203/217/236 +f 210/216/237 226/241/237 211/218/237 +f 204/219/238 218/240/238 219/242/238 +f 212/220/239 226/241/239 227/229/239 +f 204/219/240 220/230/240 205/221/240 +f 216/236/241 233/243/241 217/238/241 +f 224/237/242 241/244/242 225/239/242 +f 217/238/243 234/245/243 218/240/243 +f 225/239/244 242/246/244 226/241/244 +f 219/242/245 234/245/245 235/247/245 +f 226/241/246 243/248/246 227/229/246 +f 219/242/247 236/249/247 220/230/247 +f 213/228/248 228/30/248 229/250/248 +f 182/31/249 227/229/249 243/248/249 +f 221/231/250 236/249/250 237/251/250 +f 213/228/251 230/252/251 214/232/251 +f 221/231/252 238/253/252 222/233/252 +f 214/232/253 231/254/253 215/234/253 +f 222/233/254 239/255/254 223/235/254 +f 215/234/255 232/256/255 216/236/255 +f 223/235/256 240/257/256 224/237/256 +f 237/251/257 251/258/257 252/259/257 +f 229/250/258 245/260/258 230/252/258 +f 237/251/259 253/261/259 238/253/259 +f 230/252/260 246/262/260 231/254/260 +f 239/255/261 253/261/261 254/263/261 +f 232/256/262 246/262/262 247/264/262 +f 240/257/263 254/263/263 255/265/263 +f 232/256/264 248/266/264 233/243/264 +f 241/244/265 255/265/265 256/267/265 +f 233/243/266 249/268/266 234/245/266 +f 241/244/267 257/269/267 242/246/267 +f 235/247/268 249/268/268 250/270/268 +f 243/248/269 257/269/269 258/271/269 +f 235/247/270 251/258/270 236/249/270 +f 229/250/271 228/30/271 244/272/271 +f 182/31/272 243/248/272 258/271/272 +f 255/265/273 271/273/273 256/267/273 +f 248/266/274 264/274/274 249/268/274 +f 257/269/275 271/273/275 272/275/275 +f 250/270/276 264/274/276 265/276/276 +f 257/269/277 273/277/277 258/271/277 +f 250/270/278 266/278/278 251/258/278 +f 244/272/279 228/30/279 259/279/279 +f 182/31/280 258/271/280 273/277/280 +f 252/259/281 266/278/281 267/280/281 +f 244/272/282 260/281/282 245/260/282 +f 252/259/283 268/282/283 253/261/283 +f 245/260/284 261/283/284 246/262/284 +f 253/261/285 269/284/285 254/263/285 +f 247/264/286 261/283/286 262/285/286 +f 254/263/287 270/286/287 255/265/287 +f 248/266/288 262/285/288 263/287/288 +f 259/279/289 275/288/289 260/281/289 +f 267/280/290 283/289/290 268/282/290 +f 260/281/291 276/290/291 261/283/291 +f 268/282/292 284/291/292 269/284/292 +f 261/283/293 277/292/293 262/285/293 +f 269/284/294 285/293/294 270/286/294 +f 263/287/295 277/292/295 278/294/295 +f 270/286/296 286/295/296 271/273/296 +f 263/287/297 279/296/297 264/274/297 +f 271/273/298 287/297/298 272/275/298 +f 265/276/299 279/296/299 280/298/299 +f 272/275/300 288/299/300 273/277/300 +f 265/276/301 281/300/301 266/278/301 +f 259/279/302 228/30/302 274/301/302 +f 182/31/303 273/277/303 288/299/303 +f 267/280/304 281/300/304 282/302/304 +f 278/294/305 294/303/305 279/296/305 +f 286/295/306 302/304/306 287/297/306 +f 280/298/307 294/303/307 295/305/307 +f 288/299/308 302/304/308 303/306/308 +f 280/298/309 296/307/309 281/300/309 +f 274/301/310 228/30/310 289/308/310 +f 182/31/311 288/299/311 303/306/311 +f 282/302/312 296/307/312 297/309/312 +f 274/301/313 290/310/313 275/288/313 +f 282/302/314 298/311/314 283/289/314 +f 275/288/315 291/312/315 276/290/315 +f 283/289/316 299/313/316 284/291/316 +f 276/290/317 292/314/317 277/292/317 +f 284/291/318 300/315/318 285/293/318 +f 278/294/319 292/314/319 293/316/319 +f 286/295/320 300/315/320 301/317/320 +f 297/309/321 313/318/321 298/311/321 +f 290/310/322 306/319/322 291/312/322 +f 298/311/323 314/320/323 299/313/323 +f 291/312/324 307/321/324 292/314/324 +f 299/313/325 315/322/325 300/315/325 +f 292/314/326 308/323/326 293/316/326 +f 300/315/327 316/324/327 301/317/327 +f 293/316/328 309/325/328 294/303/328 +f 302/304/329 316/324/329 317/326/329 +f 295/305/330 309/325/330 310/327/330 +f 302/304/331 318/328/331 303/306/331 +f 295/305/332 311/329/332 296/307/332 +f 289/308/333 228/30/333 304/330/333 +f 182/31/334 303/306/334 318/328/334 +f 297/309/335 311/329/335 312/331/335 +f 289/308/336 305/332/336 290/310/336 +f 317/326/337 331/333/337 332/334/337 +f 310/327/338 324/335/338 325/336/338 +f 317/326/339 333/337/339 318/328/339 +f 310/327/340 326/338/340 311/329/340 +f 304/330/341 228/30/341 319/339/341 +f 182/31/342 318/328/342 333/337/342 +f 312/331/343 326/338/343 327/340/343 +f 304/330/344 320/341/344 305/332/344 +f 312/331/345 328/342/345 313/318/345 +f 305/332/346 321/343/346 306/319/346 +f 313/318/347 329/344/347 314/320/347 +f 306/319/348 322/345/348 307/321/348 +f 314/320/349 330/346/349 315/322/349 +f 308/323/350 322/345/350 323/347/350 +f 315/322/351 331/333/351 316/324/351 +f 308/323/352 324/335/352 309/325/352 +f 328/342/353 344/348/353 329/344/353 +f 321/343/354 337/349/354 322/345/354 +f 329/344/355 345/350/355 330/346/355 +f 322/345/356 338/351/356 323/347/356 +f 330/346/357 346/352/357 331/333/357 +f 323/347/358 339/353/358 324/335/358 +f 332/334/359 346/352/359 347/354/359 +f 325/336/360 339/353/360 340/355/360 +f 332/334/361 348/356/361 333/337/361 +f 325/336/362 341/357/362 326/338/362 +f 319/339/363 228/30/363 334/358/363 +f 182/31/364 333/337/364 348/356/364 +f 327/340/365 341/357/365 342/359/365 +f 319/339/366 335/360/366 320/341/366 +f 327/340/367 343/361/367 328/342/367 +f 320/341/368 336/362/368 321/343/368 +f 348/356/369 361/22/369 362/26/369 +f 340/355/370 355/28/370 341/357/370 +f 334/358/371 228/30/371 1/29/371 +f 182/31/372 348/356/372 362/26/372 +f 342/359/373 355/28/373 356/4/373 +f 335/360/374 1/29/374 349/1/374 +f 342/359/375 357/6/375 343/361/375 +f 335/360/376 350/7/376 336/362/376 +f 343/361/377 358/10/377 344/348/377 +f 336/362/378 351/11/378 337/349/378 +f 345/350/379 358/10/379 359/14/379 +f 337/349/380 352/15/380 338/351/380 +f 346/352/381 359/14/381 360/18/381 +f 338/351/382 353/19/382 339/353/382 +f 346/352/383 361/22/383 347/354/383 +f 340/355/384 353/19/384 354/23/384 +f 349/1/1 1/29/1 2/2/1 +f 356/4/2 10/32/2 11/5/2 +f 350/7/3 349/1/3 3/3/3 +f 357/6/4 11/5/4 12/9/4 +f 351/11/5 350/7/5 4/8/5 +f 358/10/6 12/9/6 13/13/6 +f 352/15/7 351/11/7 5/12/7 +f 359/14/8 13/13/8 14/17/8 +f 353/19/9 352/15/9 6/16/9 +f 360/18/10 14/17/10 15/21/10 +f 354/23/11 353/19/11 7/20/11 +f 361/22/12 15/21/12 16/25/12 +f 354/23/13 8/24/13 9/27/13 +f 356/4/16 355/28/16 9/27/16 +f 8/24/17 23/47/17 24/33/17 +f 10/32/20 9/27/20 24/33/20 +f 2/2/21 17/34/21 18/37/21 +f 10/32/22 25/36/22 26/38/22 +f 3/3/23 18/37/23 19/39/23 +f 11/5/24 26/38/24 27/40/24 +f 4/8/25 19/39/25 20/41/25 +f 12/9/26 27/40/26 28/42/26 +f 5/12/27 20/41/27 21/43/27 +f 13/13/28 28/42/28 29/44/28 +f 7/20/29 6/16/29 21/43/29 +f 14/17/30 29/44/30 30/46/30 +f 7/20/31 22/45/31 23/47/31 +f 15/21/32 30/46/32 31/35/32 +f 28/42/33 27/40/33 42/48/33 +f 20/41/34 35/62/34 36/50/34 +f 29/44/35 28/42/35 43/49/35 +f 21/43/36 36/50/36 37/52/36 +f 29/44/37 44/51/37 45/53/37 +f 22/45/38 37/52/38 38/54/38 +f 30/46/39 45/53/39 46/55/39 +f 23/47/40 38/54/40 39/56/40 +f 24/33/43 39/56/43 40/58/43 +f 18/37/44 17/34/44 32/57/44 +f 26/38/45 25/36/45 40/58/45 +f 18/37/46 33/59/46 34/61/46 +f 27/40/47 26/38/47 41/60/47 +f 19/39/48 34/61/48 35/62/48 +f 39/56/50 54/76/50 55/64/50 +f 32/57/51 47/77/51 48/65/51 +f 40/58/52 55/64/52 56/66/52 +f 33/59/53 48/65/53 49/67/53 +f 42/48/54 41/60/54 56/66/54 +f 34/61/55 49/67/55 50/69/55 +f 42/48/56 57/68/56 58/70/56 +f 35/62/57 50/69/57 51/71/57 +f 43/49/58 58/70/58 59/72/58 +f 36/50/59 51/71/59 52/73/59 +f 44/51/60 59/72/60 60/74/60 +f 38/54/61 37/52/61 52/73/61 +f 46/55/62 45/53/62 60/74/62 +f 39/56/63 38/54/63 53/75/63 +f 59/72/65 58/70/65 73/78/65 +f 51/71/66 66/92/66 67/80/66 +f 59/72/67 74/79/67 75/81/67 +f 52/73/68 67/80/68 68/82/68 +f 61/63/69 60/74/69 75/81/69 +f 54/76/70 53/75/70 68/82/70 +f 54/76/73 69/84/73 70/86/73 +f 47/77/74 62/85/74 63/87/74 +f 55/64/75 70/86/75 71/88/75 +f 48/65/76 63/87/76 64/89/76 +f 57/68/77 56/66/77 71/88/77 +f 49/67/78 64/89/78 65/91/78 +f 57/68/79 72/90/79 73/78/79 +f 50/69/80 65/91/80 66/92/80 +f 63/87/81 62/85/81 77/93/81 +f 70/86/82 85/107/82 86/95/82 +f 63/87/83 78/94/83 79/96/83 +f 71/88/84 86/95/84 87/97/84 +f 64/89/85 79/96/85 80/98/85 +f 73/78/86 72/90/86 87/97/86 +f 65/91/87 80/98/87 81/100/87 +f 74/79/88 73/78/88 88/99/88 +f 66/92/89 81/100/89 82/102/89 +f 75/81/90 74/79/90 89/101/90 +f 68/82/91 67/80/91 82/102/91 +f 76/83/92 75/81/92 90/103/92 +f 69/84/93 68/82/93 83/104/93 +f 69/84/96 84/106/96 85/107/96 +f 81/100/97 96/121/97 97/108/97 +f 89/101/98 104/122/98 105/109/98 +f 82/102/99 97/108/99 98/110/99 +f 90/103/100 105/109/100 106/111/100 +f 83/104/101 98/110/101 99/112/101 +f 84/106/104 99/112/104 100/114/104 +f 77/93/105 92/113/105 93/115/105 +f 85/107/106 100/114/106 101/116/106 +f 79/96/107 78/94/107 93/115/107 +f 87/97/108 86/95/108 101/116/108 +f 79/96/109 94/117/109 95/119/109 +f 87/97/110 102/118/110 103/120/110 +f 80/98/111 95/119/111 96/121/111 +f 88/99/112 103/120/112 104/122/112 +f 100/114/113 115/136/113 116/123/113 +f 93/115/114 108/137/114 109/124/114 +f 101/116/115 116/123/115 117/125/115 +f 94/117/116 109/124/116 110/126/116 +f 103/120/117 102/118/117 117/125/117 +f 95/119/118 110/126/118 111/128/118 +f 104/122/119 103/120/119 118/127/119 +f 96/121/120 111/128/120 112/130/120 +f 105/109/121 104/122/121 119/129/121 +f 98/110/122 97/108/122 112/130/122 +f 106/111/123 105/109/123 120/131/123 +f 98/110/124 113/132/124 114/134/124 +f 99/112/127 114/134/127 115/136/127 +f 92/113/128 107/135/128 108/137/128 +f 119/129/129 134/152/129 135/138/129 +f 113/132/130 112/130/130 127/139/130 +f 121/133/131 120/131/131 135/138/131 +f 113/132/132 128/140/132 129/142/132 +f 115/136/135 114/134/135 129/142/135 +f 107/135/136 122/143/136 123/145/136 +f 115/136/137 130/144/137 131/146/137 +f 108/137/138 123/145/138 124/147/138 +f 117/125/139 116/123/139 131/146/139 +f 109/124/140 124/147/140 125/149/140 +f 118/127/141 117/125/141 132/148/141 +f 110/126/142 125/149/142 126/151/142 +f 118/127/143 133/150/143 134/152/143 +f 111/128/144 126/151/144 127/139/144 +f 123/145/145 138/167/145 139/153/145 +f 132/148/146 131/146/146 146/154/146 +f 124/147/147 139/153/147 140/156/147 +f 133/150/148 132/148/148 147/155/148 +f 125/149/149 140/156/149 141/158/149 +f 133/150/150 148/157/150 149/159/150 +f 126/151/151 141/158/151 142/160/151 +f 135/138/152 134/152/152 149/159/152 +f 128/140/153 127/139/153 142/160/153 +f 136/141/154 135/138/154 150/161/154 +f 128/140/155 143/162/155 144/164/155 +f 130/144/158 129/142/158 144/164/158 +f 122/143/159 137/165/159 138/167/159 +f 130/144/160 145/166/160 146/154/160 +f 143/162/161 142/160/161 157/168/161 +f 150/161/162 165/182/162 166/170/162 +f 144/164/163 143/162/163 158/169/163 +f 144/164/166 159/171/166 160/173/166 +f 138/167/167 137/165/167 152/172/167 +f 145/166/168 160/173/168 161/175/168 +f 138/167/169 153/174/169 154/176/169 +f 147/155/170 146/154/170 161/175/170 +f 139/153/171 154/176/171 155/178/171 +f 148/157/172 147/155/172 162/177/172 +f 140/156/173 155/178/173 156/180/173 +f 148/157/174 163/179/174 164/181/174 +f 141/158/175 156/180/175 157/168/175 +f 149/159/176 164/181/176 165/182/176 +f 161/175/177 176/197/177 177/183/177 +f 155/178/178 154/176/178 169/184/178 +f 163/179/179 162/177/179 177/183/179 +f 155/178/180 170/185/180 171/187/180 +f 164/181/181 163/179/181 178/186/181 +f 156/180/182 171/187/182 172/189/182 +f 165/182/183 164/181/183 179/188/183 +f 158/169/184 157/168/184 172/189/184 +f 166/170/185 165/182/185 180/190/185 +f 158/169/186 173/191/186 174/193/186 +f 159/171/189 174/193/189 175/195/189 +f 152/172/190 167/194/190 168/196/190 +f 160/173/191 175/195/191 176/197/191 +f 153/174/192 168/196/192 169/184/192 +f 180/190/193 196/211/193 197/198/193 +f 173/191/194 189/212/194 190/199/194 +f 175/195/197 174/193/197 190/199/197 +f 168/196/198 167/194/198 183/200/198 +f 175/195/199 191/201/199 192/203/199 +f 168/196/200 184/202/200 185/204/200 +f 176/197/201 192/203/201 193/205/201 +f 169/184/202 185/204/202 186/206/202 +f 178/186/203 177/183/203 193/205/203 +f 170/185/204 186/206/204 187/208/204 +f 179/188/205 178/186/205 194/207/205 +f 171/187/206 187/208/206 188/210/206 +f 180/190/207 179/188/207 195/209/207 +f 173/191/208 172/189/208 188/210/208 +f 194/207/209 193/205/209 208/213/209 +f 186/206/210 201/227/210 202/215/210 +f 194/207/211 209/214/211 210/216/211 +f 187/208/212 202/215/212 203/217/212 +f 196/211/213 195/209/213 210/216/213 +f 189/212/214 188/210/214 203/217/214 +f 196/211/215 211/218/215 212/220/215 +f 189/212/216 204/219/216 205/221/216 +f 191/201/219 190/199/219 205/221/219 +f 183/200/220 198/222/220 199/224/220 +f 191/201/221 206/223/221 207/225/221 +f 184/202/222 199/224/222 200/226/222 +f 192/203/223 207/225/223 208/213/223 +f 185/204/224 200/226/224 201/227/224 +f 206/223/227 205/221/227 220/230/227 +f 198/222/228 213/228/228 214/232/228 +f 206/223/229 221/231/229 222/233/229 +f 199/224/230 214/232/230 215/234/230 +f 207/225/231 222/233/231 223/235/231 +f 200/226/232 215/234/232 216/236/232 +f 209/214/233 208/213/233 223/235/233 +f 201/227/234 216/236/234 217/238/234 +f 209/214/235 224/237/235 225/239/235 +f 202/215/236 217/238/236 218/240/236 +f 210/216/237 225/239/237 226/241/237 +f 204/219/238 203/217/238 218/240/238 +f 212/220/239 211/218/239 226/241/239 +f 204/219/240 219/242/240 220/230/240 +f 216/236/241 232/256/241 233/243/241 +f 224/237/242 240/257/242 241/244/242 +f 217/238/243 233/243/243 234/245/243 +f 225/239/244 241/244/244 242/246/244 +f 219/242/245 218/240/245 234/245/245 +f 226/241/246 242/246/246 243/248/246 +f 219/242/247 235/247/247 236/249/247 +f 221/231/250 220/230/250 236/249/250 +f 213/228/251 229/250/251 230/252/251 +f 221/231/252 237/251/252 238/253/252 +f 214/232/253 230/252/253 231/254/253 +f 222/233/254 238/253/254 239/255/254 +f 215/234/255 231/254/255 232/256/255 +f 223/235/256 239/255/256 240/257/256 +f 237/251/257 236/249/257 251/258/257 +f 229/250/258 244/272/258 245/260/258 +f 237/251/259 252/259/259 253/261/259 +f 230/252/260 245/260/260 246/262/260 +f 239/255/261 238/253/261 253/261/261 +f 232/256/262 231/254/262 246/262/262 +f 240/257/263 239/255/263 254/263/263 +f 232/256/264 247/264/264 248/266/264 +f 241/244/265 240/257/265 255/265/265 +f 233/243/266 248/266/266 249/268/266 +f 241/244/267 256/267/267 257/269/267 +f 235/247/268 234/245/268 249/268/268 +f 243/248/269 242/246/269 257/269/269 +f 235/247/270 250/270/270 251/258/270 +f 255/265/273 270/286/273 271/273/273 +f 248/266/274 263/287/274 264/274/274 +f 257/269/275 256/267/275 271/273/275 +f 250/270/276 249/268/276 264/274/276 +f 257/269/277 272/275/277 273/277/277 +f 250/270/278 265/276/278 266/278/278 +f 252/259/281 251/258/281 266/278/281 +f 244/272/282 259/279/282 260/281/282 +f 252/259/283 267/280/283 268/282/283 +f 245/260/284 260/281/284 261/283/284 +f 253/261/285 268/282/285 269/284/285 +f 247/264/286 246/262/286 261/283/286 +f 254/263/287 269/284/287 270/286/287 +f 248/266/288 247/264/288 262/285/288 +f 259/279/289 274/301/289 275/288/289 +f 267/280/290 282/302/290 283/289/290 +f 260/281/291 275/288/291 276/290/291 +f 268/282/292 283/289/292 284/291/292 +f 261/283/293 276/290/293 277/292/293 +f 269/284/294 284/291/294 285/293/294 +f 263/287/295 262/285/295 277/292/295 +f 270/286/296 285/293/296 286/295/296 +f 263/287/297 278/294/297 279/296/297 +f 271/273/298 286/295/298 287/297/298 +f 265/276/299 264/274/299 279/296/299 +f 272/275/300 287/297/300 288/299/300 +f 265/276/301 280/298/301 281/300/301 +f 267/280/304 266/278/304 281/300/304 +f 278/294/305 293/316/305 294/303/305 +f 286/295/306 301/317/306 302/304/306 +f 280/298/307 279/296/307 294/303/307 +f 288/299/308 287/297/308 302/304/308 +f 280/298/309 295/305/309 296/307/309 +f 282/302/312 281/300/312 296/307/312 +f 274/301/313 289/308/313 290/310/313 +f 282/302/314 297/309/314 298/311/314 +f 275/288/315 290/310/315 291/312/315 +f 283/289/316 298/311/316 299/313/316 +f 276/290/317 291/312/317 292/314/317 +f 284/291/318 299/313/318 300/315/318 +f 278/294/319 277/292/319 292/314/319 +f 286/295/320 285/293/320 300/315/320 +f 297/309/321 312/331/321 313/318/321 +f 290/310/322 305/332/322 306/319/322 +f 298/311/323 313/318/323 314/320/323 +f 291/312/324 306/319/324 307/321/324 +f 299/313/325 314/320/325 315/322/325 +f 292/314/326 307/321/326 308/323/326 +f 300/315/327 315/322/327 316/324/327 +f 293/316/328 308/323/328 309/325/328 +f 302/304/329 301/317/329 316/324/329 +f 295/305/330 294/303/330 309/325/330 +f 302/304/331 317/326/331 318/328/331 +f 295/305/332 310/327/332 311/329/332 +f 297/309/335 296/307/335 311/329/335 +f 289/308/336 304/330/336 305/332/336 +f 317/326/337 316/324/337 331/333/337 +f 310/327/338 309/325/338 324/335/338 +f 317/326/339 332/334/339 333/337/339 +f 310/327/340 325/336/340 326/338/340 +f 312/331/343 311/329/343 326/338/343 +f 304/330/344 319/339/344 320/341/344 +f 312/331/345 327/340/345 328/342/345 +f 305/332/346 320/341/346 321/343/346 +f 313/318/347 328/342/347 329/344/347 +f 306/319/348 321/343/348 322/345/348 +f 314/320/349 329/344/349 330/346/349 +f 308/323/350 307/321/350 322/345/350 +f 315/322/351 330/346/351 331/333/351 +f 308/323/352 323/347/352 324/335/352 +f 328/342/353 343/361/353 344/348/353 +f 321/343/354 336/362/354 337/349/354 +f 329/344/355 344/348/355 345/350/355 +f 322/345/356 337/349/356 338/351/356 +f 330/346/357 345/350/357 346/352/357 +f 323/347/358 338/351/358 339/353/358 +f 332/334/359 331/333/359 346/352/359 +f 325/336/360 324/335/360 339/353/360 +f 332/334/361 347/354/361 348/356/361 +f 325/336/362 340/355/362 341/357/362 +f 327/340/365 326/338/365 341/357/365 +f 319/339/366 334/358/366 335/360/366 +f 327/340/367 342/359/367 343/361/367 +f 320/341/368 335/360/368 336/362/368 +f 348/356/369 347/354/369 361/22/369 +f 340/355/370 354/23/370 355/28/370 +f 342/359/373 341/357/373 355/28/373 +f 335/360/374 334/358/374 1/29/374 +f 342/359/375 356/4/375 357/6/375 +f 335/360/376 349/1/376 350/7/376 +f 343/361/377 357/6/377 358/10/377 +f 336/362/378 350/7/378 351/11/378 +f 345/350/379 344/348/379 358/10/379 +f 337/349/380 351/11/380 352/15/380 +f 346/352/381 345/350/381 359/14/381 +f 338/351/382 352/15/382 353/19/382 +f 346/352/383 360/18/383 361/22/383 +f 340/355/384 339/353/384 353/19/384 diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/planets-logo.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/planets-logo.png new file mode 100644 index 00000000..2e0e9ee1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/planets-logo.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/_factories.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/_factories.json new file mode 100644 index 00000000..c91be5e3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/_factories.json @@ -0,0 +1,11 @@ +{ + "recipes": { + "replacable": "micdoodle8.mods.galacticraft.core.recipe.OreRecipeUpdatable$RecipeFactory" + }, + "ingredients": { + "advanced_metal": "micdoodle8.mods.galacticraft.core.recipe.IngredientAdvancedMetal" + }, + "conditions": { + "condition": "micdoodle8.mods.galacticraft.core.recipe.ConditionEnabled" + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/asteroids_block_7.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/asteroids_block_7.json new file mode 100644 index 00000000..dc22ffba --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/asteroids_block_7.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:asteroids_block", + "data": 7 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atmospheric_valve.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atmospheric_valve.json new file mode 100644 index 00000000..0ae7d9a2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atmospheric_valve.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:atmospheric_valve" + }, + "pattern": [ + " ", + "XYX", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atomic_battery.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atomic_battery.json new file mode 100644 index 00000000..fc10f361 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atomic_battery.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:atomic_battery" + }, + "pattern": [ + "XXX", + "XYX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "lead_ingot" + }, + "Y": { + "item": "galacticraftplanets:basic_item_venus", + "data": 2 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_1.json new file mode 100644 index 00000000..de519088 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_1.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:basic_item_venus", + "data": 1, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:venus", + "data": 12 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_3.json new file mode 100644 index 00000000..2ed8decb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_3.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + }, + "pattern": [ + " ", + "XYX", + " " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_5.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_5.json new file mode 100644 index 00000000..bd79d302 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_5.json @@ -0,0 +1,26 @@ +{ +"result": { + "item": "galacticraftplanets:basic_item_venus", + "data": 5, + "count": 3 + }, + "pattern": [ + "XXX", + "YYY", + "ZZZ" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferSolarThin" + }, + "Z": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_receiver.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_receiver.json new file mode 100644 index 00000000..056fa91f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_receiver.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:beam_receiver" + }, + "pattern": [ + " X ", + "XYX", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector.json new file mode 100644 index 00000000..2b8443bb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftplanets:beam_reflector" + }, + "pattern": [ + " Y ", + "ZX ", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "Z": { + "item": "minecraft:lever" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector_alt.json new file mode 100644 index 00000000..13e86977 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector_alt.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftplanets:beam_reflector" + }, + "pattern": [ + " Y ", + " XZ", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "Z": { + "item": "minecraft:lever" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments.json new file mode 100644 index 00000000..8bb52bcb --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftplanets:carbon_fragments", + "count": 8 + }, + "ingredients": [ + { + "item": "minecraft:coal", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless", + "conditions": [ + { + "type": "galacticraftplanets:condition", + "data": "aa_loaded" + } + ] +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt.json new file mode 100644 index 00000000..a058014d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftplanets:carbon_fragments", + "count": 32 + }, + "ingredients": [ + { + "item": "minecraft:coal", + "data": 0 + }, + { + "item": "minecraft:coal", + "data": 0 + }, + { + "item": "minecraft:coal", + "data": 0 + }, + { + "item": "minecraft:coal", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt.json new file mode 100644 index 00000000..5992a605 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "galacticraftplanets:carbon_fragments", + "count": 4 + }, + "ingredients": [ + { + "item": "minecraft:coal", + "data": 1 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt_alt.json new file mode 100644 index 00000000..a9f806de --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt_alt.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftplanets:carbon_fragments", + "count": 16 + }, + "ingredients": [ + { + "item": "minecraft:coal", + "data": 1 + }, + { + "item": "minecraft:coal", + "data": 1 + }, + { + "item": "minecraft:coal", + "data": 1 + }, + { + "item": "minecraft:coal", + "data": 1 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe.json new file mode 100644 index 00000000..7dafa90f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_axe" + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe_alt.json new file mode 100644 index 00000000..ad4c642b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe_alt.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_axe" + }, + "pattern": [ + "XX", + "YX", + "Y " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_boots.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_boots.json new file mode 100644 index 00000000..11a5e2d9 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_boots.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:desh_boots" + }, + "pattern": [ + "X X", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_chestplate.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_chestplate.json new file mode 100644 index 00000000..c1521294 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_chestplate.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:desh_chestplate" + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_helmet.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_helmet.json new file mode 100644 index 00000000..045483cd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_helmet.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:desh_helmet" + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe.json new file mode 100644 index 00000000..48cd7cd3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_hoe" + }, + "pattern": [ + "XX", + "Y ", + "Y " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe_alt.json new file mode 100644 index 00000000..6ea8d9f7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe_alt.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_hoe" + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_leggings.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_leggings.json new file mode 100644 index 00000000..61df7533 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_leggings.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:desh_leggings" + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_pick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_pick.json new file mode 100644 index 00000000..6006ae50 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_pick.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_pick" + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_spade.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_spade.json new file mode 100644 index 00000000..58a2ae87 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_spade.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_spade" + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_sword.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_sword.json new file mode 100644 index 00000000..bd00655c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_sword.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_sword" + }, + "pattern": [ + "X", + "X", + "Y" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/geothermal_generator.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/geothermal_generator.json new file mode 100644 index 00000000..02c0cdf5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/geothermal_generator.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "galacticraftplanets:geothermal_generator" + }, + "pattern": [ + "XVX", + "WGW", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftplanets:atmospheric_valve" + }, + "W": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "G": { + "item": "galacticraftcore:machine", + "data": 0 + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Y": { + "item": "galacticraftplanets:basic_item_venus", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/grapple.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/grapple.json new file mode 100644 index 00000000..8099da63 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/grapple.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftplanets:grapple" + }, + "pattern": [ + " Z", + "XZ ", + "XX " + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Z": { + "item": "minecraft:string" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/heavy_nose_cone_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/heavy_nose_cone_0.json new file mode 100644 index 00000000..8e1794ef --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/heavy_nose_cone_0.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:heavy_nose_cone", + "data": 0 + }, + "pattern": [ + " Y ", + " X ", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "item": "minecraft:redstone_torch" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_0.json new file mode 100644 index 00000000..b8adc30b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 0, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:asteroids_block", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1.json new file mode 100644 index 00000000..3c56e569 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1.json @@ -0,0 +1,31 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 1 + }, + "pattern": [ + " YV", + "XWX", + "XZX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "V": { + "item": "minecraft:stone_button" + }, + "W": { + "item": "galacticraftcore:canister", + "data": 32767 + }, + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "item": "minecraft:flint_and_steel" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1_alt.json new file mode 100644 index 00000000..e6565257 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1_alt.json @@ -0,0 +1,31 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 1 + }, + "pattern": [ + "VY ", + "XWX", + "XZX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "V": { + "item": "minecraft:stone_button" + }, + "W": { + "item": "galacticraftcore:canister", + "data": 32767 + }, + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "item": "minecraft:flint_and_steel" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2.json new file mode 100644 index 00000000..3906d5c6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 2 + }, + "pattern": [ + " Y ", + "XYX", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2_alt.json new file mode 100644 index 00000000..c9867c3b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2_alt.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 2 + }, + "pattern": [ + " Y ", + "XYX", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_7.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_7.json new file mode 100644 index 00000000..d3b9e120 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_7.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + }, + "pattern": [ + " X ", + "XYX", + " X " + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:wool", + "data": 32767 + }, + "Y": { + "item": "minecraft:redstone" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_8.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_8.json new file mode 100644 index 00000000..dfc06413 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_8.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "pattern": [ + "XYX", + "YZY", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:redstone" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedIron" + }, + "Z": { + "item": "minecraft:glass_pane" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_1.json new file mode 100644 index 00000000..6f99379e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_1.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + }, + "pattern": [ + "X", + "X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_2.json new file mode 100644 index 00000000..e416b977 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_2.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_mars", + "data": 2, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 8 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_4.json new file mode 100644 index 00000000..f6c90dfc --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_4.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_mars", + "data": 4 + }, + "pattern": [ + "XWX", + "XYX", + " Z " + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "item": "minecraft:diamond" + }, + "X": { + "item": "minecraft:leather" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "slimeball" + }, + "Z": { + "item": "minecraft:chest" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_6.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_6.json new file mode 100644 index 00000000..30343be3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_6.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_mars", + "data": 6 + }, + "pattern": [ + "MXM", + "SWS", + "MXM" + ], + "type": "galacticraftplanets:replacable", + "key": { + "S": { + "type": "forge:ore_dict", + "ore": "slimeball" + }, + "W": { + "item": "galacticraftcore:basic_item", + "data": 14 + }, + "X": { + "item": "galacticraftcore:air_fan" + }, + "M": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_8.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_8.json new file mode 100644 index 00000000..75dc797f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_8.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars", + "data": 8 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_0.json new file mode 100644 index 00000000..668ceddd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_0.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine", + "data": 0 + }, + "pattern": [ + "XWX", + "XZX", + "WVW" + ], + "type": "galacticraftplanets:replacable", + "key": { + "V": { + "item": "galacticraftcore:oxygen_concentrator" + }, + "W": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_plate" + }, + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Z": { + "item": "galacticraftcore:canister", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_4.json new file mode 100644 index 00000000..7106d74b --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_4.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine", + "data": 4 + }, + "pattern": [ + "XYX", + "XZX", + "XYX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_plate" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 3 + }, + "Z": { + "item": "minecraft:bed", + "data": 32767 + } + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_8.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_8.json new file mode 100644 index 00000000..8b145b66 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_8.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine", + "data": 8 + }, + "pattern": [ + "ZVZ", + "YXY", + "ZWZ" + ], + "type": "galacticraftplanets:replacable", + "key": { + "V": { + "item": "galacticraftcore:basic_item", + "data": 19 + }, + "W": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "X": { + "item": "galacticraftcore:basic_item", + "data": 14 + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_plate" + }, + "Z": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_0.json new file mode 100644 index 00000000..abc3e714 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_0.json @@ -0,0 +1,44 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine_t2", + "data": 0 + }, + "pattern": [ + "TVS", + "FWS", + "PXO" + ], + "type": "minecraft:crafting_shaped", + "key": { + "P": { + "item": "galacticraftcore:oxygen_compressor", + "data": 4 + }, + "S": { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 1800 + }, + "T": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "V": { + "item": "galacticraftcore:air_vent" + }, + "F": { + "item": "galacticraftcore:fluid_pipe" + }, + "W": { + "item": "galacticraftplanets:item_basic_mars", + "data": 6 + }, + "X": { + "item": "galacticraftcore:basic_item", + "data": 10 + }, + "O": { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_4.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_4.json new file mode 100644 index 00000000..b415fea3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_4.json @@ -0,0 +1,40 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine_t2", + "data": 4 + }, + "pattern": [ + "TVT", + "FWF", + "CXO" + ], + "type": "minecraft:crafting_shaped", + "key": { + "C": { + "item": "galacticraftcore:machine_tiered", + "data": 4 + }, + "T": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "V": { + "item": "galacticraftcore:air_vent" + }, + "F": { + "item": "galacticraftcore:fluid_pipe" + }, + "W": { + "item": "galacticraftplanets:item_basic_mars", + "data": 6 + }, + "X": { + "item": "galacticraftcore:basic_item", + "data": 10 + }, + "O": { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_8.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_8.json new file mode 100644 index 00000000..185f6659 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_8.json @@ -0,0 +1,36 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine_t2", + "data": 8 + }, + "pattern": [ + "TVT", + "FWF", + "BXB" + ], + "type": "minecraft:crafting_shaped", + "key": { + "B": { + "item": "galacticraftcore:basic_item", + "data": 6 + }, + "T": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "V": { + "item": "galacticraftcore:air_vent" + }, + "F": { + "item": "galacticraftcore:fluid_pipe" + }, + "W": { + "item": "galacticraftplanets:item_basic_mars", + "data": 6 + }, + "X": { + "item": "galacticraftcore:basic_item", + "data": 10 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick.json new file mode 100644 index 00000000..ced8a636 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars_stairs_brick", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick_alt.json new file mode 100644 index 00000000..04127de3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars_stairs_brick", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone.json new file mode 100644 index 00000000..9461c871 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars_stairs_cobblestone", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone_alt.json new file mode 100644 index 00000000..9ac6f42a --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars_stairs_cobblestone", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/miner_base.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/miner_base.json new file mode 100644 index 00000000..253c58b4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/miner_base.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftplanets:miner_base", + "count": 4 + }, + "pattern": [ + "XCX", + "W W", + "XBX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "B": { + "item": "galacticraftcore:machine_tiered", + "data": 0 + }, + "C": { + "item": "minecraft:chest" + }, + "W": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/orion_drive.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/orion_drive.json new file mode 100644 index 00000000..026dd4e0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/orion_drive.json @@ -0,0 +1,49 @@ +{ + "result": { + "item": "galacticraftplanets:orion_drive" + }, + "pattern": [ + "ABC", + "DOE", + "FGH" + ], + "type": "forge:ore_shaped", + "key": { + "A": { + "type": "forge:ore_dict", + "ore": "oreDiamond" + }, + "B": { + "type": "forge:ore_dict", + "ore": "oreLapis" + }, + "C": { + "type": "forge:ore_dict", + "ore": "oreGold" + }, + "D": { + "type": "forge:ore_dict", + "ore": "oreRedstone" + }, + "E": { + "type": "forge:ore_dict", + "ore": "oreCoal" + }, + "F": { + "type": "forge:ore_dict", + "ore": "oreCheese" + }, + "G": { + "type": "forge:ore_dict", + "ore": "oreDesh" + }, + "H": { + "type": "forge:ore_dict", + "ore": "oreIlmenite" + }, + "O": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_controller.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_controller.json new file mode 100644 index 00000000..b33a761e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_controller.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftplanets:solar_array_controller", + "data": 0 + }, + "pattern": [ + "X X", + "YZY", + "XYX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_module.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_module.json new file mode 100644 index 00000000..370132b1 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_module.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftplanets:solar_array_module", + "data": 0 + }, + "pattern": [ + "XXX", + "YZY" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 5, + "count": 3 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/telepad_short.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/telepad_short.json new file mode 100644 index 00000000..9465d016 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/telepad_short.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftplanets:telepad_short" + }, + "pattern": [ + "XWX", + "ZYZ", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "W": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "minecraft:redstone" + }, + "Z": { + "item": "minecraft:ender_pearl" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_0.json new file mode 100644 index 00000000..45c8f048 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding", + "data": 0 + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_1.json new file mode 100644 index 00000000..660976f4 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_1.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding", + "data": 1 + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_2.json new file mode 100644 index 00000000..32a1a13f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding", + "data": 2 + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_3.json new file mode 100644 index 00000000..6de27da7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding", + "data": 3 + }, + "pattern": [ + "X X", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_0.json new file mode 100644 index 00000000..04e4396c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding_t2", + "data": 0 + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_1.json new file mode 100644 index 00000000..95799c77 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_1.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding_t2", + "data": 1 + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_2.json new file mode 100644 index 00000000..994145e0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding_t2", + "data": 2 + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_3.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_3.json new file mode 100644 index 00000000..b60150ae --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding_t2", + "data": 3 + }, + "pattern": [ + "X X", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe.json new file mode 100644 index 00000000..cc068a34 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_axe" + }, + "pattern": [ + "YY ", + "YX ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe_alt.json new file mode 100644 index 00000000..d32a2bbe --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe_alt.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_axe" + }, + "pattern": [ + " YY", + " XY", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_boots.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_boots.json new file mode 100644 index 00000000..708ef45e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_boots.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_boots" + }, + "pattern": [ + "X X", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_chestplate.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_chestplate.json new file mode 100644 index 00000000..6caa7d75 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_chestplate.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_chestplate" + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_helmet.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_helmet.json new file mode 100644 index 00000000..ae8e53b0 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_helmet.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_helmet" + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe.json new file mode 100644 index 00000000..9fe9cfd5 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_hoe" + }, + "pattern": [ + " YY", + " X ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe_alt.json new file mode 100644 index 00000000..72acef2c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe_alt.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_hoe" + }, + "pattern": [ + "YY ", + " X ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_leggings.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_leggings.json new file mode 100644 index 00000000..aff12bbd --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_leggings.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_leggings" + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_pickaxe.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_pickaxe.json new file mode 100644 index 00000000..ec1cf1b7 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_pickaxe.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_pickaxe" + }, + "pattern": [ + "YYY", + " X ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_shovel.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_shovel.json new file mode 100644 index 00000000..eb53605c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_shovel.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_shovel" + }, + "pattern": [ + " Y ", + " X ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_sword.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_sword.json new file mode 100644 index 00000000..789f9a0d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_sword.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_sword" + }, + "pattern": [ + " Y ", + " Y ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/venus_12.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/venus_12.json new file mode 100644 index 00000000..44b7055f --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/venus_12.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:venus", + "data": 12 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_0.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_0.json new file mode 100644 index 00000000..bd70f463 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_0.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 0, + "count": 5 + }, + "pattern": [ + "XXX", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1.json new file mode 100644 index 00000000..1e90af74 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 1, + "count": 5 + }, + "pattern": [ + "XXX", + "YXY", + "YYY" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1_alt.json new file mode 100644 index 00000000..7ce95e9e --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1_alt.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 1 + }, + "ingredients": [ + { + "item": "galacticraftplanets:walkway", + "data": 0 + }, + { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2.json new file mode 100644 index 00000000..1a58074d --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 2, + "count": 5 + }, + "pattern": [ + "XXX", + "YXY", + "YYY" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftcore:fluid_pipe" + } + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2_alt.json b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2_alt.json new file mode 100644 index 00000000..c204a1e3 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2_alt.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 2 + }, + "ingredients": [ + { + "item": "galacticraftplanets:walkway", + "data": 0 + }, + { + "item": "galacticraftcore:fluid_pipe" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid0.png new file mode 100644 index 00000000..3d6a72bf Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid1.png new file mode 100644 index 00000000..48af4f69 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid2.png new file mode 100644 index 00000000..f774ca34 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner.png new file mode 100644 index 00000000..4484b713 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_fx.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_fx.png new file mode 100644 index 00000000..c5a09199 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_fx.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_off.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_off.png new file mode 100644 index 00000000..814fc7f1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_off.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_receiver.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_receiver.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_receiver.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_reflector.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_reflector.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_reflector.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_lead.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_lead.png new file mode 100644 index 00000000..4c75aa3b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_lead.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_titanium.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_titanium.png new file mode 100644 index 00000000..5dc69b95 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_titanium.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_0.png new file mode 100644 index 00000000..965ec03c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_1.png new file mode 100644 index 00000000..60fd8517 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/bottom.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/bottom.png new file mode 100644 index 00000000..8e3a3321 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/bottom.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/brick.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/brick.png new file mode 100644 index 00000000..294f73d4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/brick.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cargo_rocket.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cargo_rocket.png new file mode 100644 index 00000000..fbfc8b14 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cargo_rocket.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cobblestone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cobblestone.png new file mode 100644 index 00000000..e1b4516f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cobblestone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/creeper_egg.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/creeper_egg.png new file mode 100644 index 00000000..47e21f4f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/creeper_egg.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_1.png new file mode 100644 index 00000000..ef3c9923 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_dummy.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_dummy.png new file mode 100644 index 00000000..b6d794b2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_dummy.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/decoration_desh.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/decoration_desh.png new file mode 100644 index 00000000..ea1edbf2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/decoration_desh.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dense_ice.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dense_ice.png new file mode 100644 index 00000000..ac0e799b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dense_ice.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/desh.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/desh.png new file mode 100644 index 00000000..c927ced2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/desh.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_1.png new file mode 100644 index 00000000..8615abb1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_2.png new file mode 100644 index 00000000..3dd2137a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/electrolyzer.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/electrolyzer.png new file mode 100644 index 00000000..a88688ca Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/electrolyzer.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png new file mode 100644 index 00000000..79011bc8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png new file mode 100644 index 00000000..cc8dfe6b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png new file mode 100644 index 00000000..f9df0db5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png new file mode 100644 index 00000000..76effcfb Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png new file mode 100644 index 00000000..fe270e47 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png new file mode 100644 index 00000000..9ae29b71 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png new file mode 100644 index 00000000..c1588399 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png new file mode 100644 index 00000000..1211e6d1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png new file mode 100644 index 00000000..877d6ea1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png new file mode 100644 index 00000000..21c77707 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png new file mode 100644 index 00000000..a4b76ca7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png new file mode 100644 index 00000000..3079e9d7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png.mcmeta new file mode 100644 index 00000000..034019ff --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 3 + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png new file mode 100644 index 00000000..bbd74e2b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png new file mode 100644 index 00000000..8576f04a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/gas_liquefier.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/gas_liquefier.png new file mode 100644 index 00000000..0e1fa3e3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/gas_liquefier.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png new file mode 100644 index 00000000..0976c990 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png.mcmeta new file mode 100644 index 00000000..49eb24f6 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png.mcmeta @@ -0,0 +1,21 @@ +{ + "animation": { + "frametime": 1, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_inactive.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_inactive.png new file mode 100644 index 00000000..c8c0dad0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_inactive.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_vent.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_vent.png new file mode 100644 index 00000000..116d8b38 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_vent.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/grapple.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/grapple.png new file mode 100644 index 00000000..5b099dfc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/grapple.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/landing_balloon.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/landing_balloon.png new file mode 100644 index 00000000..fb0bf69b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/landing_balloon.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser.png new file mode 100644 index 00000000..0a1f714d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser_off.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser_off.png new file mode 100644 index 00000000..5d1cdecd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser_off.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/launch_controller.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/launch_controller.png new file mode 100644 index 00000000..33fc633c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/launch_controller.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input.png new file mode 100644 index 00000000..a1fa62bc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input_warning.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input_warning.png new file mode 100644 index 00000000..4db0b6c4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input_warning.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output.png new file mode 100644 index 00000000..d96646f2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output_warning.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output_warning.png new file mode 100644 index 00000000..c0e28f59 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output_warning.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_side_warning.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_side_warning.png new file mode 100644 index 00000000..7be90254 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_side_warning.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input.png new file mode 100644 index 00000000..b5361d5d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input_warning.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input_warning.png new file mode 100644 index 00000000..e9b883e5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input_warning.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machineframe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machineframe.png new file mode 100644 index 00000000..f57558d9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machineframe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/methane_synthesizer.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/methane_synthesizer.png new file mode 100644 index 00000000..c4f9e820 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/methane_synthesizer.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/middle.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/middle.png new file mode 100644 index 00000000..71568a2b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/middle.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/minerbase.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/minerbase.png new file mode 100644 index 00000000..c92d68df Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/minerbase.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/orb.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/orb.png new file mode 100644 index 00000000..9480b8ba Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/orb.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_asteroids.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_asteroids.png new file mode 100644 index 00000000..a4778352 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_asteroids.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_venus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_venus.png new file mode 100644 index 00000000..329ea7a1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_venus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_mars.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_mars.png new file mode 100644 index 00000000..3f1c3ec0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_mars.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_venus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_venus.png new file mode 100644 index 00000000..d59f47a7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_venus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_galena.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_galena.png new file mode 100644 index 00000000..c99b4001 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_galena.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_ilmenite.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_ilmenite.png new file mode 100644 index 00000000..3bdaf934 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_ilmenite.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_asteroids.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_asteroids.png new file mode 100644 index 00000000..f3d81082 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_asteroids.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_mars.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_mars.png new file mode 100644 index 00000000..cdc023ca Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_mars.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_quartz_venus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_quartz_venus.png new file mode 100644 index 00000000..a2c1c9c4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_quartz_venus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_silicon_venus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_silicon_venus.png new file mode 100644 index 00000000..35498714 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_silicon_venus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_solar.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_solar.png new file mode 100644 index 00000000..99b47250 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_solar.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_mars.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_mars.png new file mode 100644 index 00000000..207f026d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_mars.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_venus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_venus.png new file mode 100644 index 00000000..b5aeeb3f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_venus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pipe_hydrogen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pipe_hydrogen.png new file mode 100644 index 00000000..e9fb7bb9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pipe_hydrogen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pod_flame.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pod_flame.png new file mode 100644 index 00000000..24fba65f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pod_flame.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe.png new file mode 100644 index 00000000..16e63a45 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_bottom.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_bottom.png new file mode 100644 index 00000000..21103fad Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_bottom.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png new file mode 100644 index 00000000..85e8842c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png.mcmeta new file mode 100644 index 00000000..f928c362 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 15 + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png new file mode 100644 index 00000000..60584e02 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png.mcmeta new file mode 100644 index 00000000..f928c362 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 15 + } +} \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_top.png new file mode 100644 index 00000000..820ba8e7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_0.png new file mode 100644 index 00000000..0b3ea24d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_1.png new file mode 100644 index 00000000..b05ac035 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/rocket_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/rocket_t2.png new file mode 100644 index 00000000..15386ad7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/rocket_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_output.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_output.png new file mode 100644 index 00000000..0d5b9de4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_output.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_side.png new file mode 100644 index 00000000..5250d8b5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_top.png new file mode 100644 index 00000000..97f35c20 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_side.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_side.png new file mode 100644 index 00000000..99e7e316 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_side.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_top.png new file mode 100644 index 00000000..4cf70f00 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/space_pod.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/space_pod.png new file mode 100644 index 00000000..d1891b6f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/space_pod.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/spout.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/spout.png new file mode 100644 index 00000000..a136f44f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/spout.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short0.png new file mode 100644 index 00000000..ef0d1f92 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/terraformer_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/terraformer_0.png new file mode 100644 index 00000000..e12a49d4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/terraformer_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tier3rocket.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tier3rocket.png new file mode 100644 index 00000000..aee97b73 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tier3rocket.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_black.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_black.png new file mode 100644 index 00000000..7772f51a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_black.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_blue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_blue.png new file mode 100644 index 00000000..4ce6f9cb Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_blue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_brown.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_brown.png new file mode 100644 index 00000000..e797b8eb Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_brown.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_cyan.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_cyan.png new file mode 100644 index 00000000..ef708b1a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_cyan.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_gray.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_gray.png new file mode 100644 index 00000000..e61d6bf6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_gray.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_green.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_green.png new file mode 100644 index 00000000..6c8d7d75 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_green.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_light_blue.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_light_blue.png new file mode 100644 index 00000000..7c4ce7ca Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_light_blue.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_lime.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_lime.png new file mode 100644 index 00000000..8555fad7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_lime.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_magenta.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_magenta.png new file mode 100644 index 00000000..0a12ab78 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_magenta.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_orange.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_orange.png new file mode 100644 index 00000000..78bd9e86 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_orange.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_pink.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_pink.png new file mode 100644 index 00000000..29ebbf6d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_pink.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_purple.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_purple.png new file mode 100644 index 00000000..d9d17a99 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_purple.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_red.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_red.png new file mode 100644 index 00000000..d6e7488a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_red.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_silver.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_silver.png new file mode 100644 index 00000000..772bf371 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_silver.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_white.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_white.png new file mode 100644 index 00000000..b26ed9a4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_white.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_yellow.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_yellow.png new file mode 100644 index 00000000..73f30635 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_yellow.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/top.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/top.png new file mode 100644 index 00000000..d6d27fdb Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/top.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_mars.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_mars.png new file mode 100644 index 00000000..aec9b89a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_mars.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_venus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_venus.png new file mode 100644 index 00000000..b4722313 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_venus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_0.png new file mode 100644 index 00000000..0472a530 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_1.png new file mode 100644 index 00000000..bf93707a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_2.png new file mode 100644 index 00000000..2fe2fe05 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_3.png new file mode 100644 index 00000000..9a077b0b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_scorched.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_scorched.png new file mode 100644 index 00000000..d536db54 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_scorched.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_0.png new file mode 100644 index 00000000..8353c6b1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_1.png new file mode 100644 index 00000000..82c7c73b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_2.png new file mode 100644 index 00000000..18d6ea10 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/walkway.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/walkway.png new file mode 100644 index 00000000..a2aef2fe Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/walkway.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web.png new file mode 100644 index 00000000..eaf44b59 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_0.png new file mode 100644 index 00000000..d3b1d53e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_1.png new file mode 100644 index 00000000..d0f04736 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_0.png new file mode 100644 index 00000000..02a294ce Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_1.png new file mode 100644 index 00000000..190385db Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/crashed_probe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/crashed_probe.png new file mode 100644 index 00000000..36742d6f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/crashed_probe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier.png new file mode 100644 index 00000000..443db920 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_m.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_m.png new file mode 100644 index 00000000..44b13dff Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_m.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_recipe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_recipe.png new file mode 100644 index 00000000..fedade60 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_recipe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gases_methane_oxygen_nitrogen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gases_methane_oxygen_nitrogen.png new file mode 100644 index 00000000..09141c55 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gases_methane_oxygen_nitrogen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/geothermal.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/geothermal.png new file mode 100644 index 00000000..070ab133 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/geothermal.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gui_astro_miner_dock.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gui_astro_miner_dock.png new file mode 100644 index 00000000..79d33dbd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gui_astro_miner_dock.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret.png new file mode 100644 index 00000000..4b1c300e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret_edit.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret_edit.png new file mode 100644 index 00000000..b3e26510 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret_edit.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/launch_controller.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/launch_controller.png new file mode 100644 index 00000000..2cf9d37f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/launch_controller.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/mars_rocket_gui.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/mars_rocket_gui.png new file mode 100644 index 00000000..615b8949 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/mars_rocket_gui.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer.png new file mode 100644 index 00000000..331109b0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer_recipe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer_recipe.png new file mode 100644 index 00000000..e4928fa0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer_recipe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/galaxy.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/galaxy.png new file mode 100644 index 00000000..57fe877d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/galaxy.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/mars.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/mars.png new file mode 100644 index 00000000..52bbef71 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/mars.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_astro_miner.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_astro_miner.png new file mode 100644 index 00000000..54e88c25 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_astro_miner.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_cargo.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_cargo.png new file mode 100644 index 00000000..2360d061 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_cargo.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2.png new file mode 100644 index 00000000..190e3a2d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2_recipe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2_recipe.png new file mode 100644 index 00000000..323becd5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2_recipe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3.png new file mode 100644 index 00000000..190e3a2d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3_recipe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3_recipe.png new file mode 100644 index 00000000..323becd5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3_recipe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/short_range_telepad.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/short_range_telepad.png new file mode 100644 index 00000000..ee95a65f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/short_range_telepad.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel0.png new file mode 100644 index 00000000..bb8bedb2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel1.png new file mode 100644 index 00000000..8d4f47b2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel2.png new file mode 100644 index 00000000..947acd90 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/solar_array_controller.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/solar_array_controller.png new file mode 100644 index 00000000..ff9b3e88 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/solar_array_controller.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/terraformer.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/terraformer.png new file mode 100644 index 00000000..5c13627b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/terraformer.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/venus_rocket_gui.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/venus_rocket_gui.png new file mode 100644 index 00000000..553cd7df Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/venus_rocket_gui.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atmospheric_valve.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atmospheric_valve.png new file mode 100644 index 00000000..84af2639 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atmospheric_valve.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atomic_battery.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atomic_battery.png new file mode 100644 index 00000000..9bde6c11 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atomic_battery.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/beam_core.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/beam_core.png new file mode 100644 index 00000000..43bf47e8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/beam_core.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sludge.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sludge.png new file mode 100644 index 00000000..1d56fea8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sludge.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sulphuric_acid.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sulphuric_acid.png new file mode 100644 index 00000000..109f0db5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sulphuric_acid.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_0.png new file mode 100644 index 00000000..3a557c22 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_1.png new file mode 100644 index 00000000..fab727e9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_2.png new file mode 100644 index 00000000..4745e43a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_3.png new file mode 100644 index 00000000..be9e6e41 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_4.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_4.png new file mode 100644 index 00000000..d358dd72 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_4.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_5.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_5.png new file mode 100644 index 00000000..5f33bdb7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_5.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_6.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_6.png new file mode 100644 index 00000000..1780f083 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_6.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_0.png new file mode 100644 index 00000000..9440e1bc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_1.png new file mode 100644 index 00000000..d78b130c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_2.png new file mode 100644 index 00000000..b8a4ab3e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_3.png new file mode 100644 index 00000000..02203f0e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_4.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_4.png new file mode 100644 index 00000000..761ff94a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_4.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_5.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_5.png new file mode 100644 index 00000000..95dade80 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_5.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_6.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_6.png new file mode 100644 index 00000000..6d4032f1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_6.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/carbon_fragments.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/carbon_fragments.png new file mode 100644 index 00000000..8338ec27 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/carbon_fragments.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_desh.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_desh.png new file mode 100644 index 00000000..0de0f10c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_desh.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_titanium.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_titanium.png new file mode 100644 index 00000000..fc3a3656 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_titanium.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_axe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_axe.png new file mode 100644 index 00000000..b5d70f2c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_axe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_boots.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_boots.png new file mode 100644 index 00000000..2b0a568c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_boots.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_chestplate.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_chestplate.png new file mode 100644 index 00000000..56a2270c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_chestplate.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_helmet.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_helmet.png new file mode 100644 index 00000000..2636e2ae Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_helmet.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_hoe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_hoe.png new file mode 100644 index 00000000..7a638e91 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_hoe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_leggings.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_leggings.png new file mode 100644 index 00000000..43bdc043 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_leggings.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick.png new file mode 100644 index 00000000..2fa66a32 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick_slime.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick_slime.png new file mode 100644 index 00000000..6dacf8b7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick_slime.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_plate.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_plate.png new file mode 100644 index 00000000..acd166c9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_plate.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_spade.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_spade.png new file mode 100644 index 00000000..1c4a79ce Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_spade.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_stick.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_stick.png new file mode 100644 index 00000000..288b7a3c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_stick.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_sword.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_sword.png new file mode 100644 index 00000000..0619f2f6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_sword.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/dust_titanium.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/dust_titanium.png new file mode 100644 index 00000000..d0855477 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/dust_titanium.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/engine_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/engine_t2.png new file mode 100644 index 00000000..62b94a4c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/engine_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/fluid_manip.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/fluid_manip.png new file mode 100644 index 00000000..eefb0c56 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/fluid_manip.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.0.png new file mode 100644 index 00000000..d56d2b63 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.png new file mode 100644 index 00000000..76d60570 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone_joined.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone_joined.png new file mode 100644 index 00000000..e106a2a9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone_joined.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_desh.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_desh.png new file mode 100644 index 00000000..dd8bb7f8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_desh.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_lead.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_lead.png new file mode 100644 index 00000000..a07905dd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_lead.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_titanium.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_titanium.png new file mode 100644 index 00000000..869bbe35 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_titanium.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t2.png new file mode 100644 index 00000000..3d1c03bc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t3.png new file mode 100644 index 00000000..1b09813f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_0.png new file mode 100644 index 00000000..4f3873ff Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_1.png new file mode 100644 index 00000000..41de1d3a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_2.png new file mode 100644 index 00000000..484a1762 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_3.png new file mode 100644 index 00000000..aa37509b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_4.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_4.png new file mode 100644 index 00000000..2b2ecef0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_4.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_5.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_5.png new file mode 100644 index 00000000..36ca23a7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_5.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_6.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_6.png new file mode 100644 index 00000000..b56a1a6c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_6.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/orion_drive.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/orion_drive.png new file mode 100644 index 00000000..7588ff48 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/orion_drive.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/radioisotope_core.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/radioisotope_core.png new file mode 100644 index 00000000..cc94f281 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/radioisotope_core.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/raw_desh.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/raw_desh.png new file mode 100644 index 00000000..2f97ab72 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/raw_desh.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t2.png new file mode 100644 index 00000000..0a7adf8c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t3.png new file mode 100644 index 00000000..dc09b7e2 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/rocket_fins_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/rocket_fins_t2.png new file mode 100644 index 00000000..e7a206d5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/rocket_fins_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_astro_miner.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_astro_miner.png new file mode 100644 index 00000000..22b79294 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_astro_miner.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_cargo.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_cargo.png new file mode 100644 index 00000000..b86297c3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_cargo.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_t3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_t3.png new file mode 100644 index 00000000..af5eadc4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_t3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_iron.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_iron.png new file mode 100644 index 00000000..aba2b8cc Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_iron.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_titanium.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_titanium.png new file mode 100644 index 00000000..bc003264 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_titanium.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shield_controller.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shield_controller.png new file mode 100644 index 00000000..fab640c5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shield_controller.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/slimeling_cargo.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/slimeling_cargo.png new file mode 100644 index 00000000..348847ed Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/slimeling_cargo.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_dust.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_dust.png new file mode 100644 index 00000000..e95684dd Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_dust.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_module_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_module_2.png new file mode 100644 index 00000000..d12dd3c1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_module_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed0.png new file mode 100644 index 00000000..3bd63393 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed1.png new file mode 100644 index 00000000..a383173a Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots.png new file mode 100644 index 00000000..b69cf76f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots0.png new file mode 100644 index 00000000..6b077f3c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots_t2.png new file mode 100644 index 00000000..9df986d0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate.png new file mode 100644 index 00000000..fd33273f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate0.png new file mode 100644 index 00000000..80a1e419 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate_t2.png new file mode 100644 index 00000000..74397692 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth.png new file mode 100644 index 00000000..ff1a75ca Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth_t2.png new file mode 100644 index 00000000..bfe43a43 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_fabric.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_fabric.png new file mode 100644 index 00000000..73fedad3 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_fabric.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm.png new file mode 100644 index 00000000..f947a665 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm0.png new file mode 100644 index 00000000..9278c26e Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm_t2.png new file mode 100644 index 00000000..74108d16 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings.png new file mode 100644 index 00000000..d383026b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings0.png new file mode 100644 index 00000000..3906f75f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings_t2.png new file mode 100644 index 00000000..a52b8d62 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thin_solar_wafer.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thin_solar_wafer.png new file mode 100644 index 00000000..804423de Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thin_solar_wafer.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_axe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_axe.png new file mode 100644 index 00000000..ca2a2cc6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_axe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_boots.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_boots.png new file mode 100644 index 00000000..06e6bce6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_boots.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_chestplate.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_chestplate.png new file mode 100644 index 00000000..5011032f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_chestplate.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_helmet.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_helmet.png new file mode 100644 index 00000000..8580c2e5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_helmet.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_hoe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_hoe.png new file mode 100644 index 00000000..556d78bf Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_hoe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_leggings.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_leggings.png new file mode 100644 index 00000000..e142ffe0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_leggings.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_pickaxe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_pickaxe.png new file mode 100644 index 00000000..161e6953 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_pickaxe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_shovel.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_shovel.png new file mode 100644 index 00000000..ee04686c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_shovel.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_sword.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_sword.png new file mode 100644 index 00000000..9c1fa56b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_sword.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/volcanic_pickaxe.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/volcanic_pickaxe.png new file mode 100644 index 00000000..825c73e6 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/volcanic_pickaxe.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/gradient.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/gradient.png new file mode 100644 index 00000000..2b6083c5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/gradient.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/rain_venus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/rain_venus.png new file mode 100644 index 00000000..f70c9ef4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/rain_venus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/shield.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/shield.png new file mode 100644 index 00000000..dfc499d9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/shield.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_0.png new file mode 100644 index 00000000..c6b1cdb1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_1.png new file mode 100644 index 00000000..7f6fef0b Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_t2_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_t2_1.png new file mode 100644 index 00000000..ea1a6fa7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_t2_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underacid.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underacid.png new file mode 100644 index 00000000..dfb5f7ab Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underacid.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underbecterial.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underbecterial.png new file mode 100644 index 00000000..f164319f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underbecterial.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_1.png new file mode 100644 index 00000000..d453b2b1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_2.png new file mode 100644 index 00000000..21d144cb Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_3.png new file mode 100644 index 00000000..2d044ee9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_1.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_1.png new file mode 100644 index 00000000..8a9e8bc8 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_1.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_2.png new file mode 100644 index 00000000..b895509f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_3.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_3.png new file mode 100644 index 00000000..bdb2c6ed Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_3.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_receiver.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_receiver.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_receiver.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_reflector.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_reflector.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_reflector.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber.png new file mode 100644 index 00000000..e36a6fb0 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2.png new file mode 100644 index 00000000..620632fe Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2_dark.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2_dark.png new file mode 100644 index 00000000..3f788892 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2_dark.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber_dark.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber_dark.png new file mode 100644 index 00000000..e040e514 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber_dark.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/creeper.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/creeper.png new file mode 100644 index 00000000..96e3406f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/creeper.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/juicer.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/juicer.png new file mode 100644 index 00000000..03f1162f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/juicer.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/minerbase.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/minerbase.png new file mode 100644 index 00000000..568d5a5c Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/minerbase.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/rocket_t2.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/rocket_t2.png new file mode 100644 index 00000000..15386ad7 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/rocket_t2.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/slimeling/green.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/slimeling/green.png new file mode 100644 index 00000000..5b6f21c9 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/slimeling/green.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/sludgeling.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/sludgeling.png new file mode 100644 index 00000000..32a5a0e4 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/sludgeling.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/spider_queen.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/spider_queen.png new file mode 100644 index 00000000..0dfd601d Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/spider_queen.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter0.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter0.png new file mode 100644 index 00000000..ef0d1f92 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter0.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure.png new file mode 100644 index 00000000..0355f9c1 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure_venus.png b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure_venus.png new file mode 100644 index 00000000..b79cbe17 Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure_venus.png differ diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/mcmod.info b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/mcmod.info new file mode 100644 index 00000000..5e313cf2 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/mcmod.info @@ -0,0 +1,19 @@ +[ + { + "modid": "galacticraftcore", + "name": "Galacticraft", + "description": "An advanced space travel mod for Minecraft!", + "version": "${version}", + "mcversion": "1.12.2", + "logoFile": "assets/galacticraftcore/core-logo.png", + "authorList": [ + "micdoodle8", + "radfast", + "EzerArch", + "fishtaco", + "SpaceViking", + "SteveKunG", + "ROMVoid95" + ] + } +] \ No newline at end of file diff --git a/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/pack.mcmeta b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/pack.mcmeta new file mode 100644 index 00000000..ae588233 --- /dev/null +++ b/java_mod/Galacticraft-Legacy-master-1.12/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Galacticraft resources", + "pack_format": 3 + } +} diff --git a/java_mod/Galacticraft-Legacy-master.zip b/java_mod/Galacticraft-Legacy-master.zip new file mode 100644 index 00000000..b089bc4f Binary files /dev/null and b/java_mod/Galacticraft-Legacy-master.zip differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/.editorconfig b/java_mod/src/Galacticraft-Legacy-master-1.12/.editorconfig new file mode 100644 index 00000000..cdeefa11 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.java] +charset = utf-8 +indent_style = tab +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/.gitattributes b/java_mod/src/Galacticraft-Legacy-master-1.12/.gitattributes new file mode 100644 index 00000000..15d71b4c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/.gitattributes @@ -0,0 +1,75 @@ +* text=auto + +*.bat text eol=crlf +#*.bat text eol=lf +*.gradle text diff=java +mcmod.info text +*.java text +*.json text +*.lang text +*.mcmeta text +*.md text +*.properties text +gradlew text eol=lf +*.sh text eol=lf +*.txt text +*.xml text +*.yml text +*.yaml text +*.toml text + +# Documents +*.pdf binary + +# Graphics +*.eps binary +*.gif binary +*.ico binary +*.jpg binary +*.jpeg binary +*.png binary +*.psd binary +# SVG treated as an asset (binary) by default. If you want to treat it as text, +# comment-out the following line and uncomment the line after. +*.svg binary +#*.svg text +*.tif binary +*.tiff binary +*.webp binary +*.xcf binary + +# Other +*.exe binary +*.jar binary + +############################### +# Git Large File System (LFS) # +############################### + +# Archives +#*.7z filter=lfs diff=lfs merge=lfs -text +#*.br filter=lfs diff=lfs merge=lfs -text +#*.bz2 filter=lfs diff=lfs merge=lfs -text +#*.gz filter=lfs diff=lfs merge=lfs -text +#*.tar filter=lfs diff=lfs merge=lfs -text +#*.zip filter=lfs diff=lfs merge=lfs -text + +# Documents +#*.pdf filter=lfs diff=lfs merge=lfs -text + +# Graphics +#*.eps filter=lfs diff=lfs merge=lfs -text +#*.gif filter=lfs diff=lfs merge=lfs -text +#*.ico filter=lfs diff=lfs merge=lfs -text +#*.jpg filter=lfs diff=lfs merge=lfs -text +#*.jpeg filter=lfs diff=lfs merge=lfs -text +#*.png filter=lfs diff=lfs merge=lfs -text +#*.psd filter=lfs diff=lfs merge=lfs -text +#*.tif filter=lfs diff=lfs merge=lfs -text +#*.tiff filter=lfs diff=lfs merge=lfs -text +#*.webp filter=lfs diff=lfs merge=lfs -text +#*.xcf filter=lfs diff=lfs merge=lfs -text + +# Other +#*.exe filter=lfs diff=lfs merge=lfs -text +#*.jar filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/bug_report.yml b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..a5c4c026 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,117 @@ +name: Bug Report +description: File a bug report +title: "[Bug]: " +labels: + - '[Attribute] Bug Report' + - '[Status] Triage' +assignees: + - ROMVoid95 +body: + - type: markdown + attributes: + value: >- + NOTE: No support for compiling the project will be provided. + + For help with Galacticraft 5, please use [TeamGalacticraft/Galacticraft](https://github.com/TeamGalacticraft/Galacticraft). + + For general Galacticraft help and support visit the [Galacticraft Central Discord](http://discord.galacticraftcentral.com/) + - type: dropdown + id: forge-version + attributes: + label: Forge Version + options: + - 14.23.5.2860 + - 14.23.5.2859 + - 14.23.5.2858 + - 14.23.5.2857 + - 14.23.5.2856 + - 14.23.5.2855 + - 14.23.5.2854 + - 14.23.5.2852 + - 14.23.5.2851 + - 14.23.5.2847 + - 14.23.5.2846 + - 14.23.5.2845 + - 14.23.5.2844 + - 14.23.5.2843 + - 14.23.5.2842 + - 14.23.5.2841 + - 14.23.5.2840 + - 14.23.5.2839 + - 14.23.5.2838 + - 14.23.5.2837 + - 14.23.5.2836 + - 14.23.5.2835 + - 14.23.5.2834 + - 14.23.5.2833 + - 14.23.5.2832 + - 14.23.5.2831 + - 14.23.5.2830 + - 14.23.5.2829 + - 14.23.5.2828 + - 14.23.5.2827 + - 14.23.5.2826 + - 14.23.5.2825 + - 14.23.5.2824 + - 14.23.5.2823 + - 14.23.5.2822 + - 14.23.5.2821 + - 14.23.5.2820 + - 14.23.5.2819 + - 14.23.5.2818 + - 14.23.5.2817 + - 14.23.5.2816 + - 14.23.5.2815 + - 14.23.5.2814 + - 14.23.5.2813 + - 14.23.5.2812 + - 14.23.5.2811 + - 14.23.5.2810 + - 14.23.5.2809 + - 14.23.5.2808 + - 14.23.5.2807 + - 14.23.5.2806 + - 14.23.5.2805 + - 14.23.5.2804 + - 14.23.5.2803 + - 14.23.5.2802 + - 14.23.5.2801 + - 14.23.5.2800 + validations: + required: true + - type: input + id: version + attributes: + label: Galacticraft Version + placeholder: "4.0.2.282" + validations: + required: true + - type: textarea + id: logs + attributes: + label: Log or Crash Report + description: >- + If you have any logs (`latest.log`, `crash-report-.txt`, etc...) + Please upload the entire content in the log(s) to any paste site + *Examples:* + - [Github Gist](https://gist.github.com/) + - [Hastebin](https://hastebin.com/) + - [paste.gg](https://paste.gg/) + - [] + Please upload your log (latest.log and/or crash report) to [Github + Gist](https://gist.github.com/) then paste the gist url here, you + can paste as many links as needed + placeholder: 'https://gist.github.com/ROMVoid95/9392b3f0f7b44f9732087007aaa95e32' + - type: textarea + id: repro + attributes: + label: Reproduction steps + description: How do you trigger this bug? Please walk us through it step by step. + value: | + 1. Do this + 2. Do that + 3. Crash/Bug + ... + validations: + required: true + diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/config.yml b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..3ba13e0c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/feature_request.yml b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 00000000..e29890f1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,46 @@ +name: Feature Request +description: Suggesting a new feature for the mod. +title: "[Feature]: " +labels: + - '[Attribute] Feature Request' +body: + - type: markdown + attributes: + value: >- + Thank you for taking intrest in suggesting new features! + - type: dropdown + id: has_searched + attributes: + label: Searched For Existing Request? + description: >- + Please verify that you have already searched for this Feature in exisiting Feature Requests + options: + - "No" + - "Yes I Have" + validations: + required: true + - type: textarea + id: description + attributes: + label: Feature Description + description: >- + Please explain and describe the Feature you're suggesting. The more + information you provide the better! + value: | + ... + validations: + required: true + - type: textarea + id: media + attributes: + label: Screenshots and Videos + description: If applicable, add screenshots or videos to help explain the Feature you're suggesting. + validations: + required: false + - type: textarea + id: extra_info + attributes: + label: Additional Context + description: Add any extra context or information about the Feature you're suggesting here. + validations: + required: false diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/.github/workflows/ci.yml b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/workflows/ci.yml new file mode 100644 index 00000000..3bc73791 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/workflows/ci.yml @@ -0,0 +1,78 @@ +name: 'CI' +on: + push: + branches: [ "master-1.12" ] +jobs: + build: + env: + VERSION_SUFFIX: -SNAPSHOT + name: Build + runs-on: ubuntu-latest + if: ${{!startsWith(github.event.head_commit.message, 'ci')}} + steps: + - if: startsWith(github.ref, 'refs/tags/') + id: set_suffix_if_tagged + run: | + echo "VERSION_SUFFIX=" >> $GITHUB_ENV + + - uses: actions/checkout@v3 + + - name: Cache + uses: actions/cache@v3.2.3 + with: + path: | + ~/.m2 + ~/.gradle + key: ${{ runner.os }}-gradle-${{ hashFiles('build.gradle') }} + + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + + - uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: 17 + + - name: Decode Keystore + id: decode + uses: timheuer/base64-to-file@v1.2 + with: + fileName: 'keyring.gpg' + encodedString: ${{ secrets.SIGNING_SECRET_KEY_RING_FILE }} + + - name: Expose + run: cp ${{ steps.decode.outputs.filePath }} . + + - uses: gradle/gradle-build-action@v2 + if: ${{ !startsWith(github.ref, 'refs/tags/') }} + with: + arguments: build + + - uses: gradle/gradle-build-action@v2 + if: startsWith(github.ref, 'refs/tags/') + with: + arguments: build createChangelog + + - name: Create Release + id: release + uses: softprops/action-gh-release@v0.1.15 + if: startsWith(github.ref, 'refs/tags/') + with: + body_path: ${{ github.workspace }}/changelog/*.md + + - name: Publish Release + uses: gradle/gradle-build-action@v2 + if: steps.release.outcome == 'success' + env: + CURSE_TOKEN: ${{ secrets.CURSE_TOKEN }} + MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} + with: + arguments: pubishToAll + + - name: 'Deploy to Nexus' + uses: gradle/gradle-build-action@v2 + env: + NEXUS_USER: ${{ secrets.NEXUS_USER }} + NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} + with: + arguments: publishToGalacticMaven -Pversion_suffix=${{ env.VERSION_SUFFIX }} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/.github/workflows/stale.yml b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/workflows/stale.yml new file mode 100644 index 00000000..3eab7093 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/.github/workflows/stale.yml @@ -0,0 +1,23 @@ +name: Mark stale issues and pull requests + +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - uses: actions/stale@v7 + with: + repo-token: ${{ github.token }} + stale-issue-message: 'Issue has been marked stale because it has been open 7 days with no activity. Issue will be closed in 24 hours if not updated' + close-issue-message: 'Issue closed due to no updates or activity after the previous Stale notification' + days-before-stale: 7 + days-before-close: 1 + any-of-labels: 'Cannot Reproduce,More Information Needed' diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/.gitignore b/java_mod/src/Galacticraft-Legacy-master-1.12/.gitignore new file mode 100644 index 00000000..75c7c18e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/.gitignore @@ -0,0 +1,79 @@ +# Build # +######### +MANIFEST.MF +dependency-reduced-pom.xml + +# Compiled # +############ +bin +build +dist +lib +out +run +/target +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Databases # +############# +*.db +*.sql +*.sqlite + +# Packages # +############ +*.7z +*.dmg +*.gz +*.iso +*.rar +*.tar +*.zip + +# Repository # +############## +.git + +# Logging # +########### +/logs +*.log + +# Misc # +######## +*.bak + +# System # +########## +.DS_Store +ehthumbs.db +Thumbs.db + +# Project # +########### +.classpath +.externalToolBuilders +.idea +.project +.settings +.checkstyle +.factorypath +run +eclipse +nbproject +atlassian-ide-plugin.xml +build.xml +nb-configuration.xml +*.iml +*.ipr +*.iws +/.apt_generated/ +*.launch +/.nb-gradle/ +/.gradle/ +!etc/replace/IntCache.class diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/.pomrc b/java_mod/src/Galacticraft-Legacy-master-1.12/.pomrc new file mode 100644 index 00000000..dd9b80d7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/.pomrc @@ -0,0 +1,39 @@ +{ + "artifactId": "galacticraft-legacy", + "name": "Galacticraft-Legacy", + "url": "https://github.com/TeamGalacticraft/Galacticraft-Legacy", + "description": "An advanced space exploration mod for Minecraft", + "inceptionYear": "2021", + "organization": { + "name": "TeamGalacticraft", + "url": "https://github.com/TeamGalacticraft" + }, + "licenses": [ + { + "name": "MIT", + "url": "https://github.com/TeamGalacticraft/Galacticraft-Legacy/blob/master/LICENSE", + "distribution": "repo" + } + ], + "issueManagement": { + "system": "github", + "url": "https://github.com/TeamGalacticraft/Galacticraft-Legacy/issues" + }, + "scm": { + "connection": "scm:git:git://github.com/TeamGalacticraft/Galacticraft-Legacy.git", + "developerConnection": "scm:git:git@github.com:TeamGalacticraft/Galacticraft-Legacy.git", + "url": "https://github.com/TeamGalacticraft/Galacticraft-Legacy" + }, + "developers": [ + { + "id": "rom", + "name": "ROMVoid95", + "email": "rom.void95@gmail.com", + "roles": [ + "developer" + ], + "timezone": "CST/CDT" + } + + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/LICENSE b/java_mod/src/Galacticraft-Legacy-master-1.12/LICENSE new file mode 100644 index 00000000..5424da9c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Team Galacticraft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/README.md b/java_mod/src/Galacticraft-Legacy-master-1.12/README.md new file mode 100644 index 00000000..f3ceb4db --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/README.md @@ -0,0 +1,62 @@ +

+ +

+ GitHub contributors + GitHub commits + Code size + GitHub repo size + Lines of Code +

+

+ curseforge + modrinth +

+

+ discord-plural + patreon-plural +

+ +Galacticraft-Legacy +============ + +The 1.12.2 version of Galacticraft that receives updates, forked from the original [Repository](https://github.com/micdoodle8/Galacticraft). If you're wondering why this repository shows to be behind in commits. The original only receives updates to its Capes list, this repository does not contain a capes list. + +------ + +## Mod Developers + +To import the mod into your IDE environment, It's best to use artifacts published to our [Maven Repository](https://maven.galacticraft.net/). +```gradle +repositories { + maven { + url "https://maven.galacticraft.net/repository/legacy/" + } +} + +dependencies { + compileOnly fg.deobf("dev.galacticraft:galacticraft-legacy:${version}") +} +``` +> *Note: a 'deobf' version is still distributed, But it is only advisable to use this classifier is your already using mappings: `stable_39-1.12`. To avoid any issues it is best to use the main artifact* + +## Addon Developers + +While you can still import Galacticraft into your IDE using the above method. A special-use Gradle Plugin has been developed that handles all the setup for you. + +Get the plugin on [Gradle Plugin Repository](https://plugins.gradle.org/plugin/net.galacticraft.addon) or check out the [galacticraft-addon-template](https://github.com/TeamGalacticraft/galacticraft-addon-template) repository + +## Developing Galacticraft-Legacy + +### Prerequisites +* Java 8 JDK +* An IDE with a compatible [Project Lombok plugin](https://projectlombok.org/download) + +>Should you encounter any weird errors concerning missing getter or setter methods, it's probably because your code has not been processed by Project Lombok's processor. + +### Clone + +`git clone https://github.com/TeamGalacticraft/Galacticraft-Legacy.git` + +### Import + +After all Prerequisites and cloning is finished, simply import the project into your IDE. diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/build.gradle b/java_mod/src/Galacticraft-Legacy-master-1.12/build.gradle new file mode 100644 index 00000000..c6416d91 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/build.gradle @@ -0,0 +1,136 @@ +plugins { + id 'java' + id 'eclipse' + id 'org.cadixdev.licenser' version '0.6.1' + id 'com.diffplug.spotless' version '6.13.0' + id 'net.minecraftforge.gradle' version '6.+' + id 'net.galacticraft.changelog' version '1.0.4' + id 'net.galacticraft.internal.legacy' version '1.0.5' + id 'nexus-publishing' version '2.1' +} + +group = "dev.galacticraft" +archivesBaseName = "Galacticraft" +version = "${mod_version}${version_suffix}" + +java.toolchain.languageVersion = JavaLanguageVersion.of(8) + +repositories { + mavenCentral() + maven { + name 'galacticraft' + url 'https://maven.galacticraft.net/repository/legacy-common/' + } +} + +dependencies { + minecraft "net.minecraftforge:forge:${MC_VERSION}-${forge_version}" + + compileRequired fg.deobf('mod.dependency:mekanism:9.8.3.390') + compileRequired fg.deobf('mod.dependency:industrialcraft-2:2.8.222-ex112') + compileRequired fg.deobf('mod.dependency:buildcraft-api:7.99.24.8') + compileOnly fg.deobf('mod.dependency:biomes-o-plenty:7.0.1.2445') + compileOnly fg.deobf('mod.dependency:appliedenergistics2:rv6-stable-7') + compileOnly fg.deobf('mod.dependency:redstoneflux:2.1.1.1') + compileOnly fg.deobf('mod.dependency:actuallyadditions:r152') + compileOnly fg.deobf('mod.dependency:playerapi:1.1') + compileOnly fg.deobf('mod.dependency:journeymap:5.7.1') + compileOnly fg.deobf('mod.dependency:jei:4.16.1.302:api') + runtimeOnly fg.deobf('mod.dependency:jei:4.16.1.302') + + // Project lombok + compileOnly 'org.projectlombok:lombok:1.18.24' + annotationProcessor 'org.projectlombok:lombok:1.18.24' + testCompileOnly 'org.projectlombok:lombok:1.18.24' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.24' +} + +spotless { + enforceCheck false + java { + target 'src/*/java/micdoodle8/mods/**/*.java' + endWithNewline() + trimTrailingWhitespace() + removeUnusedImports() + indentWithSpaces() + } +} + +license { + header = project.file('etc/HEADER') + properties { + company = 'Team Galacticraft' + year = Calendar.getInstance().get(Calendar.YEAR); + } + ignoreFailures = true + include '**/*.java' +} + +clean { + def filteredDelete = new HashSet<>() + for (def toDelete : getDelete()) { + for (def f : file(toDelete).listFiles()) { + if (f.getName() != "fg_cache") { + filteredDelete.add(f) + } + } + } + setDelete(filteredDelete) +} + +tokens { + replace('version', version) +} + +changelog { + fromTag('4.0.5') +} + +maven { + excludeDependencies('forge', 'jei') + artifacts(mavenJar, deobfJar, sourcesJar) +} + + +modpublishing { + + changelogPath(changelog.changelogFile) + + curseforge('564236') { + if (System.getenv().CI) + apiKey = 'none' + relations { + optional( + 'mekanism', + 'jei', + 'journeymap', + 'playerapi', + 'actually-additions', + 'redstone-flux', + 'applied-energistics-2', + 'biomes-o-plenty', + 'buildcraft', + 'industrial-craft' + ) + incompatible( + 'betterportals' , + 'vics-modern-warfare-mod' + ) + } + } + + modrinth('ZnmdXAk2') { + if (System.getenv().CI) + token('none') + dependencies { + // Mekanism + optional.version 'KIzASRO5' + // JourneyMap + optional.version 'vacvhRKp' + } + } +} + +tasks.withType(GenerateModuleMetadata).configureEach { + enabled = false +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/changelog/4.0.6.md b/java_mod/src/Galacticraft-Legacy-master-1.12/changelog/4.0.6.md new file mode 100644 index 00000000..bfa19114 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/changelog/4.0.6.md @@ -0,0 +1,28 @@ +Galacticraft-Legacy | 4.0.6 +=========================== + +Features +-------- +- Blocks in configs can handle * declaration ([d7a41a14](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/d7a41a14da5b2f4190de162210ecd531f7f33d07)) +- call onChunkPopulate in chunk decoration ([438a7dd6](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/438a7dd67af21bce62018a48824b8f73b8e4d782)) +- allow charcoal to coal-gen input ([d2c14321](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/d2c143216ccb1e4da8e2685105c4fc4a59c7f1fc)) + +Fixes +----- +- trigger adv. solar gen achievement correctly ([d13683f3](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/d13683f3cee2cd0f300a99211ab96388a7112ab2)) +- replace isBlank with isEmpty in BlockUtil ([66f385d5](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/66f385d5f6a72743c61aab8ab2c01cebb9e22035)) +- check `player.world.provider` sooner ([11f4714a](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/11f4714af589b46f791caa54810b06178914658e)) +- (lang) remove substring calls ([3fc7af24](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/3fc7af24471b66a1a8177a45f40880d13b91e09b)) +- prevent lang file name uppercase ([13a13b8e](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/13a13b8eef35f546db37fb7bd5fdda5a49229fc7)) +- output sides for Gas Liquefier ([#137](https://github.com/TeamGalacticraft/Galacticraft-Legacy/pull/137)) +- hotfix for ArrayIndexOutOfBounds on getSlotsForFace() ([246ee9ee](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/246ee9eea6cf9a17ec4e13169223c74635446c7f)) +- (compat) add IGasHandler to Electrolyzer ([f00896e9](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/f00896e983d2be28173eb3aff8b80a0b8f85c75d)) + +Misc +---- +- **(style)** + - removed 'par#' prefix from params ([fc796c0e](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/fc796c0ec3e5f6ded60921afa1f153a36034a5ec)) +- **(revert)** + - unintended changes committed ([5c07be22](https://github.com/TeamGalacticraft/Galacticraft-Legacy/commit/5c07be22b7effecb64a1833f91f45e9a738b6f6f)) +- **(refactor)** + - (lang) update zh_cn.lang ([#147](https://github.com/TeamGalacticraft/Galacticraft-Legacy/pull/147)) diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/etc/HEADER b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/HEADER new file mode 100644 index 00000000..089d9108 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/HEADER @@ -0,0 +1,4 @@ +Copyright (c) ${year} ${company} + +Licensed under the MIT license. +See LICENSE file in the project root for details. diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/etc/OLD_LICENSE.txt b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/OLD_LICENSE.txt new file mode 100644 index 00000000..ade1a8a0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/OLD_LICENSE.txt @@ -0,0 +1,664 @@ +Copyright and Licensing +======================= + +1. "Galacticraft" and "the Galacticraft project" means the plugin for + +Forge-modified Minecraft (see section 10 below) which is distributed as a + +compiled binary through the home page + +http://www.micdoodle8.com/mods/galacticraft and whose source code is or + +has been published on Github in the micdoodle8/Galacticraft and + +micdoodle8/MicdoodleCore repositories. Galacticraft's "source code" means the + +material, including Java code, other programming code, image, textures, + +models, sound files and other binary files, published within the + +micdoodle8/Galacticraft and micdoodle8/MicdoodleCore repositories on Github, + +subject to section 18 below in relation to "dependencies", and any related + +material including the text, design and artwork on the Wiki which is + +published on www.micdoodle8.com or any other official Galacticraft website. + +2. Galacticraft is a copyright work, and the copyright belongs to the + +Galacticraft developers. The "Galacticraft developers" means the persons + +known by the Github usernames micdoodle8, radfast and fishtaco567 + +and any additional person whom the Galacticraft developers deem to become + +one of the Galacticraft developers in future. References herein to the + +Galacticraft developers shall be construed jointly and severally. + +3. The "overriding principle" is that Galacticraft is intended to be + +open-source software with its source code distributed freely on Github (or + +any similar technological means which allows for the distribution of source + +code via the internet to any interested person), available to all on a free + +for non-commercial use basis as detailed further below. + +4. Nothing in this Licence shall interfere with that overriding principle + +and no rights granted by this Licence shall interfere with the continuing ability of + +the Galacticraft developers to modify, supplement and publish Galacticraft's + +source code on to Github and to distribute, through Github or elsewhere, any + +compiled or binary code based thereon. + + +Contributions +------------- + +5. Contributions to Galacticraft in the form of code, code snippets, + +pull requests, translations, artwork, sounds, music, or other similar + +contributions are welcomed. Issue reports and comments, forum posts, + +editing of the Wiki, and other user contributions are also welcomed + +and are classed as "contributions" to the project for these purposes. Any + +person contributing in that form (a "Contributor"), by the act of + +contributing, (a) assigns the copyright in that contribution to the + +Galacticraft developers; (b) in any event, authorises the distribution of + +that contribution thereafter as a part of the Galacticraft project through + +Github or otherwise; (c) consents to Galacticraft's developers licensing + +that contribution as a part of the Galacticraft project as set out in + +section 20 and following below. + +6. No Contributor shall be entitled, by a claim to copyright relating to + +their contribution or any other code or material in Galacticraft, or by any + +other means, to interfere with the overriding principle. In particular, no + +Contributor shall be entitled, by reason of that contribution or otherwise, + +to attempt to prevent the continuing publication of Galacticraft's source code + +on Github or any distribution or licensing of Galacticraft. + +7. A Contributor does not become one of the Galacticraft developers by the + +act of contribution, unless the Galacticraft developers deem otherwise in + +their sole discretion (which would require a large scale, sustained and + +substantial contribution to the project). + +8. In the event of a Contributor making (whether deliberately or + +inadvertently) a contribution which wholly or partly comprises material in + +which a third party ("the original copyright holder") holds the copyright, + +the Contributor shall (a) not seek to enforce or assist in the enforcement + +of that copyright against Galacticraft nor by any other means prevent the + +continuing publication of Galacticraft on Github whether by means of DMCA + +notices or otherwise, which shall be a matter for the original copyright + +holder only; (b) the Contributor shall indemnify and hold harmless the + +Galacticraft developers against any loss or damage, consequential loss, or + +costs arising out of the contribution of the said material to Galacticraft. + + +Interaction with Mojang's EULA +------------------------------ + +9. Mojang AB ("Mojang") holds the copyright in the game known as Minecraft + +(herein, "vanilla" Minecraft). + +10. Galacticraft is popularly referred to as a Minecraft "Mod", but more + +accurately it is a plugin. A separate project known as Forge modifies the + +code of vanilla Minecraft. Galacticraft does not itself modify the code of + +Minecraft but it provides new original material (a "plugin") which is + +interoperable with Forge-modified Minecraft. On this basis Galacticraft is + +considered by the Galacticraft developers to be a plugin rather than a Mod, + +but whether that is correct or not shall not affect the validity of this + +document and the licence granted hereby, which shall apply in the same way in + +either case. + +11. The purpose of Galacticraft is to supplement the gameplay experience of + +a player playing modified Minecraft through the use of Galacticraft's + +original material which is contained in compiled binary versions of + +Galacticraft (including code, graphics, textures, icons, models, sounds and + +music). The player will need to be running Minecraft, together with the + +Forge modifications, in order to enjoy the gameplay experience contained in + +a compiled version of Galacticraft. + +12. Galacticraft contains references to Forge-modified Minecraft (including + +vanilla Minecraft code) for interoperability reasons only. Galacticraft - + +in either its source code or its compiled binaries - does not contain a + +vanilla or Forge-modified copy of Minecraft as such, and there is no intent, + +in or through Galacticraft, to "distribute" any material in which Mojang + +holds the copyright. + +13. Galacticraft's source code can be read by anyone and Minecraft is not + +required in order to read and enjoy the Galacticraft source code. + +Galacticraft's compiled binaries, however, can provide a gameplay experience + +only to a person who is running Minecraft. + +14. Accordingly, the rights of Mojang AB as copyright owner in respect of + +Minecraft do not and would not prevent the distribution of Galacticraft's + +source code. + +15. In any event, to the extent that it is relevant, the Galacticraft + +developers are permitted by Mojang's EULA for Minecraft to distribute + +Galacticraft. Specifically, that EULA provides (sic): + +"If you've bought the Game, you may play around with it and modify it. ... + +Basically, mods (or plugins, or tools) are cool (you can distribute + +those)...." + +and + +"Any tools you write for the Game from scratch belong to you. Modifications + +to the Game ("Mods") (including pre-run Mods and in-memory Mods) and plugins + +for the Game also belong to you and you can do whatever you want with them, + +as long as you don't sell them for money / try to make money from them." + +In quoting Mojang's EULA as aforesaid, no representation or admission is + +made that Mojang's authorisation is in fact required to distribute + +Galacticraft or its source code or as to the meaning of that EULA or + +expressions within it, which shall be a question of law to be resolved in + +any relevant jurisdiction where the question arises, but if and to the + +extent that such authorisation is required, it is authorised. + + +Libraries etc +------------- + +16. Galacticraft incorporates code snippets and libraries written by third + +parties. + +17. All such third party code is distributed within the Galacticraft + +project subject to whichever licence was originally applicable to it and + +subject also to the terms herein as set out below. Reference should be + +made to the original third party code for licensing information. + + +Dependencies +------------ + +18. The code of Galacticraft's dependencies (that is to say, anything in + +the /dependencies folder in the Galacticraft Github project, which includes + +other mod's APIs) is included on the Github for interoperability reasons + +only. This is for the convenience of developers wishing to make use of the + +Galacticraft source code in their own development environment without + +compilation errors. The dependencies are not distributed within + +Galacticraft's compiled binaries and are not part of the copyright work + +known as Galacticraft which is licensed under this licence. + +19. The code of all dependencies within the Galacticraft project is subject + +to whichever licence was originally applicable to that code. Reference + +should be made to the original code for licensing information. + + +Galacticraft: licence +--------------------- + +20. Galacticraft is free for non-commercial use. The compiled + +binaries in Galacticraft are made freely available to all players. + +The Galacticraft project source code can be accessed and used + +on an open-source basis by any person, except that (a) no person can + +sell it or any derived work for money or try to make money from it, + +(b) no person can interfere with the overriding principle. The + +detailed terms and provisions set out below shall apply in all cases. + +21. Where the Galacticraft project or its source code incorporates or + +includes material ("the Part") which is subject to a third party copyright + +or licence ("the original licence") then (a) to the maximum extent that + +the law allows in every relevant jurisdiction, the terms of the licence + +herein or any severable terms or provisions of this licence shall apply, + +in addition to or in place of the terms of the original licence, to the + +Part as incorporated in the Galacticraft project; and (b) where and to + +the extent that that is not possible (for example because a term of the + +original licence is not compatible with this licence and the law requires + +the original licence to prevail) then to that extent the terms of the + +original licence shall apply in relation to the Part only, and the + +remainder of the Galacticraft project shall be licensed on the terms + +herein both part by part and as an overall compilation. + +22. "On an open-source basis" means that Galacticraft's source code is + +published in accordance with the overriding principle. The Galacticraft + +developers will use best endeavours to continue to make Galacticraft's + +source code available in that way. This meets the Galacticraft developers' + +obligations under the GPL or LGPL (where applicable) to provide access to + +source code. The Galacticraft developers will not be liable in the event of + +the discontinued operation of Github or other force majeure preventing + +public access to the source code or any repository containing it. + +23. The restriction on persons selling Galacticraft for money or "trying to + +make money from it" does not prevent: (a) a person making money from an + +advertisement which that person provides to a player who downloads, free of + +charge, a modpack containing a compiled binary of Galacticraft together + +with other mods, subject to the additional conditions in section 37 below; + +(b) a server owner who charges a fee or receives donations from players + +playing on a server which offers a Galacticraft gameplay experience to players + +who have themselves installed Galacticraft in their clients, so long as the + +server does not disable player access to critical (in contrast to cosmetic) + +features, items or blocks in Galacticraft or make player access to parts or + +stages of Galacticraft conditional on payment ("pay to win"); and (c) a person + +from making a video recording of a Galacticraft gameplay experience and + +distributing that video on Youtube, Twitch or similar internet video distribution + +channels and making money in consequence of the video or related advertisements. + +24. No undertaking or warranty is given that Galacticraft is suitable for + +use on any computer system or in any modpack, that it is stable and + +crash-free and interoperable with other "mods", or that there will be no + +loss or corruption of data or internet connectivity through the use of + +Galacticraft. Galacticraft is provided "as is". It is the responsibility + +of every player, modpack maker and server owner to test and confirm + +Galacticraft's suitability for the intended use. In any event, the + +liability of the Galacticraft developers to any person using Galacticraft + +shall be limited to such monetary amount, if any (and otherwise zero), as + +that person has paid to the Galacticraft developers for the use of + +Galacticraft. These exclusions and limitations of liability shall apply to + +the maximum extent permitted by law in every relevant jurisdiction. + +25. Galacticraft may be updated from time to time, but the Galacticraft + +developers are not obliged to update Galacticraft and are not obliged to fix + +bugs, crashes or issues which may be identified now or in future, which + +shall be done at the sole discretion of the Galacticraft developers. + +26. The Galacticraft project may be discontinued at any time, at the sole + +discretion of the Galacticraft developers, in which case users of + +Galacticraft may continue to use such source code or compiled versions as + +they may have downloaded at that time on the terms applicable to them at + +that time, but no further access to Galacticraft or its source code will be + +provided by the Galacticraft developers. + +27. Galacticraft may either now or in future contain or display code, + +graphics or text which makes reference to, links to, communicates with or + +advertises either Galacticraft or its associated website(s) or other projects + +of the Galacticraft developers or any of them. In that event, as a condition + +of the continued use of Galacticraft, no user of Galacticraft (and in + +particular, no server owner or modpack maker) shall block, disable or + +prevent such reference, link, communication or advertising. + +28. (a) Any person may make free use of Galacticraft's API and may freely + +copy and distribute the API to the extent required for interoperability reasons. + +(b) Any person may study Galacticraft's source code and may copy it, modify it, + +reverse engineer it or otherwise use it for that person's own personal use + +or any non-commercial academic purpose (but this does not permit distribution + +and this does not permit inclusion or copying of any part of Galacticraft + +or any derivative works in any commercial work or for any commercial purpose). + +(c) Licence is granted to all persons to copy, use and modify + +non-substantial parts (as defined below) of the Galacticraft project (including its + +source code) for any non-commercial purpose and to incorporate such non-substantial + +parts as appropriate and reasonable in their own non-commercial projects, including + +other Minecraft mods or plugins, provided that no person other than the Galacticraft + +developers may present Galacticraft's source code as being their own work, and any + +derived work must contain appropriate author attribution. Any commercial use of a work + +derived from Galacticraft shall continue to be prohibited. + +(d) "Non-substantial parts" means any part other than the whole or a substantial + +element of Galacticraft: for example a single Java method would be a non-substantial part. + +A "substantial part" includes anything which when compiled into playable form (together with + +any other code from any origin required to render it playable) replicates or reproduces + +to any substantially similar extent the gameplay, graphics, sound or visual design of + +Galacticraft or any identifiable or material part or gameplay element of Galacticraft + +(including for example the player experience of visiting any individual planet, + +dimension or world which is represented in Galacticraft, the appearance of any 'mob' + +or entity in Galacticraft, and any game screen or GUI which is specific to Galacticraft). + +All textured models (for example rockets, landers, mobs and other entities) included + +in Galacticraft are individually deemed to be "substantial parts". + +(e) Distribution of the whole of Galacticraft, in unaltered compiled binary form, + +is permitted ONLY in modpacks as set out further in section 37 below. Apart from modpacks, + +distribution or copying of Galacticraft or any substantial part of it or any derived + +work is PROHIBITED without permission from the developers. In particular, distribution + +of out-dated, altered, modified, converted or partial copies of Galacticraft or its + +binaries is prohibited. Copies or ports to other versions of Minecraft or Forge either in + +Java or for non-Java gaming platforms including mobile or console versions are PROHIBITED + +without the written permission of the Galacticraft developers. + +(f) All permissions in this section 28 are subject to the proviso that no other person + +may present Galacticraft's source code or any derived work or any compiled version as + +being their own work or take any action which denies the Galacticraft developers' + +ownership of the copyright in Galacticraft and rights to licence it and continued + +ability to publish the source code in accordance with the overriding principle. + +(g) Incorporation of Galacticraft or parts of it (or any derived work) in any commercial + +project - including vanilla Minecraft itself or any installer, distribution, mod download + +website, downloadable content or other resource which is available to paying users, + +subscribers or members only, or is otherwise conditional on a purchase, or which is + +distributed only to viewers of an advertisement (for example through an Ad.fly link + +or similar) - would violate section 20(a) above and is PROHIBITED. + +28A. The copying or distribution of Galacticraft in mod "installers", + +for example Skydaz, is PROHIBITED and no licence is granted to distribute + +Galacticraft or its binaries in that way. An "installer" here means a program, + +script or system which has the sole or main function of installing + +Galacticraft for a player. A system for downloading, installing and launching + +modpacks comprising multiple mods presented together (for example Technic + +or FeedTheBeast launchers) is not an "installer" for these purposes and distribution + +of Galacticraft in modpacks is fully permitted in accordance with the modpack + +permission in section 37 below. + +28B. For the avoidance of doubt, the distribution or copying of Galacticraft + +on mod download or re-distribution websites is PROHIBITED. (But bona fide + +modpacks comprising multiple mods, distributed through CurseForge or FTB or + +Technic platform or similar sites, are permitted in accordance with the modpack + +permission in section 37 below.) + +29. To the extent that Galacticraft uses parts of the code which are or have + +previously been licensed on the LGPL or GPL basis or any other licensing + +basis, that licence is to be applied subject to the above when such source + +code or compiled binaries are distributed as part of the Galacticraft + +project, and anything in the LGPL or GPL or other licence which is + +inconsistent with the above shall not apply to Galacticraft as a whole. + +In any event, users of Galacticraft are allowed to modify Galacticraft + +code for their own use and to reverse engineer the distributed binaries + +for the purpose of debugging such modifications. + +30. A player playing Galacticraft within a Minecraft environment + +may do so only if that player has a legitimately acquired copy of + +Minecraft. Any other use of Galacticraft for a gameplay experience is + +not authorised. + +31. This copyright and licensing document itself is excluded from the + +licence terms above. This is a copyright and proprietary legal document and + +it must NOT be copied by any other person, in whole or in part, except for + +purposes permitted by law. + + +Proper law, jurisdiction and updating +------------------------------------- + +32. This document and the licence granted hereby are granted under the law + +of Canada and should be interpreted accordingly. + +33. The copyright in Galacticraft and the licence granted hereby are + +applicable and enforceable in every jurisdiction where Galacticraft is used, + +in accordance with these terms. References herein to "each relevant + +jurisdiction" are to be read accordingly. "Copyright" includes to the + +extent applicable also all the other intellectual property rights or equivalent + +rights, as applicable in each relevant jurisdiction, which are held by the + +author, writer, artist, designer, inventor, creator or other rights-holder of + +the computer code, text, artwork, designs, technologies and sounds contained + +in Galacticraft. + +34. In the event that a part or provision of this document is ineffective + +or not legally enforceable, that part or provision shall be severed from + +and shall not affect the other parts and provisions of this document and + +the licence granted hereby which shall continue to operate and to be + +enforceable to the maximum extent that the law allows. + +35. This document and the licence granted hereby may be updated from time + +to time, in which case the updated terms apply to any person continuing to + +use Galacticraft or its source code after the date of such update, as a + +condition of that continuing use. This document and licence applies on + +the same basis to persons who downloaded or obtained copies of Galacticraft + +or its source code prior to the date this document first came into force + +and who continue to use Galacticraft thereafter. + +36. A person downloading or otherwise obtaining a copy of Galacticraft or + +its source code does not thereby obtain ownership of Galacticraft, but + +merely a copy of it which may be used only on the terms licenced by the + +Galacticraft developers from time to time as set out herein. + + +Modpacks permission +------------------- + +37. Permission is hereby granted for Galacticraft (in its compiled, Java + +version in the form of .jar binary files) to be incorporated in any + +modpack without further authorisation from the Galacticraft developers, on + +the basis set out in sections 1 to 36 above - note in particular the + +prohibitions on commercial use - and subject to the following + +additional points: (a) a modpack must not incorporate the word + +"Galacticraft" in its name nor in any other way present itself as being an + +"official" Galacticraft modpack; (b) modpacks are not required to provide + +players with a link to Galacticraft's source code, but they must not attempt + +to deny access to Galacticraft's source code nor otherwise interfere with + +the overriding principle; (c) the Galacticraft code and other elements + +in the compiled binary must not be altered and every copy of Galacticraft's + +compiled binary code must include, within the relevant .jar or .zip or other + +packaged file, a copy of this LICENSE.txt; (d) modpacks must so far as + +reasonably possible distribute an up-to-date version of Galacticraft; (e) + +a 'modpack' here means a compilation of Galacticraft with other mods to + +create a bona fide pack of multiple mods playable in the Java versions of + +Minecraft combined with Forge. diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/etc/SECURITY.md b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/SECURITY.md new file mode 100644 index 00000000..fdda8a70 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/SECURITY.md @@ -0,0 +1,13 @@ +# Security Policy + +## Supported Versions + + +| Version | Supported | +| ------- | ------------------ | +| 4.0.x | :white_check_mark: | +| < 4.0 | :x: | + +## Reporting a Vulnerability + +Please report (suspected) security vulnerabilities to security@galacticraft.net. You will receive a response from us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but historically within a few days. diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/etc/formatting/eclipse_formatter.xml b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/formatting/eclipse_formatter.xml new file mode 100644 index 00000000..3002b60f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/formatting/eclipse_formatter.xml @@ -0,0 +1,401 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/etc/formatting/intellij_idea_style.xml b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/formatting/intellij_idea_style.xml new file mode 100644 index 00000000..79af7df1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/formatting/intellij_idea_style.xml @@ -0,0 +1,57 @@ + + \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/etc/replace/IntCache.class b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/replace/IntCache.class new file mode 100644 index 00000000..e44bb436 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/etc/replace/IntCache.class differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/gradle.properties b/java_mod/src/Galacticraft-Legacy-master-1.12/gradle.properties new file mode 100644 index 00000000..4146ddff --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/gradle.properties @@ -0,0 +1,15 @@ +org.gradle.jvmargs=-Xmx3G +org.gradle.daemon=false + +MC_VERSION=1.12.2 +forge_version=14.23.5.2860 +mapping_channel=stable +mapping_version=39-1.12 + +mod_version=4.0.7 +version_suffix= + +##Allows using your skin while testing, This can be with or without hyphens +##uuid = +##username = +##accessToken = diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/gradle/resources.gradle b/java_mod/src/Galacticraft-Legacy-master-1.12/gradle/resources.gradle new file mode 100644 index 00000000..4a07d9bc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/gradle/resources.gradle @@ -0,0 +1,66 @@ +def resourceTargets = [ 'mcmod.info' ] +def intoTargets = [ + "$rootDir/out/production/resources/", + "$rootDir/out/production/${project.name}.main/", + "$rootDir/bin/main/" +] +def replaceProperties = [ mod_version: version.toString(), minecraft_version: "${mc_version}" ] + +processResources { + inputs.properties replaceProperties + replaceProperties.put 'project', project + + filesMatching(resourceTargets) { + expand replaceProperties + } + + intoTargets.each { target -> + if (file(target).exists()) { + copy { + from(sourceSets.main.resources) { + include resourceTargets + expand replaceProperties + } + into target + } + } + } +} + +def modFileTokens = [ + gcVersion: version.toString() +] +def included = [ "micdoodle8/mods/galacticraft/core/Constants.java" ] +def includedPaths = included.collect { java.nio.file.Paths.get(it) } +def expandedSrc = new File(project.buildDir, 'expandedSrc') +def srcMainJava = project.file('src/main/java').toPath() + +task javaReplaceTokens(type: Copy) { + inputs.property 'tokens', modFileTokens + from(srcMainJava) { + include included + } + into expandedSrc + filter(org.apache.tools.ant.filters.ReplaceTokens, beginToken: '${', endToken: '}', tokens: modFileTokens) +} + +compileJava { + dependsOn javaReplaceTokens + exclude { + srcMainJava.relativize(it.file.toPath()) in includedPaths + } + source expandedSrc + + options.compilerArgs << "-Xlint:none" + options.encoding = 'UTF-8' + options.fork = true + options.incremental = true +} + +tasks.withType(Javadoc) { + failOnError false + options.memberLevel = JavadocMemberLevel.PUBLIC + options.encoding = 'UTF-8' + options.charSet = 'UTF-8' + options.links = ["https://docs.oracle.com/javase/8/docs/api/".toString()] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.jar b/java_mod/src/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..ccebba77 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.jar differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.properties b/java_mod/src/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..37aef8d3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/gradlew b/java_mod/src/Galacticraft-Legacy-master-1.12/gradlew new file mode 100644 index 00000000..79a61d42 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/gradlew @@ -0,0 +1,244 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed 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 +# +# https://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. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/gradlew.bat b/java_mod/src/Galacticraft-Legacy-master-1.12/gradlew.bat new file mode 100644 index 00000000..93e3f59f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/settings.gradle b/java_mod/src/Galacticraft-Legacy-master-1.12/settings.gradle new file mode 100644 index 00000000..cbc65196 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/settings.gradle @@ -0,0 +1,6 @@ +pluginManagement { + repositories { + maven { url = 'https://maven.galacticraft.net/repository/internal-plugins/' } + maven { url = 'https://maven.galacticraft.net/repository/gradle/' } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ForRemoval.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ForRemoval.java new file mode 100644 index 00000000..7e8eb04d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ForRemoval.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.annotations; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + + +/** + * Functionality annotated with ForRemoval will no longer be supported + * and should not be used anymore in new code. + */ +@Documented +@Retention(RUNTIME) +@Target( +{TYPE, FIELD, METHOD, CONSTRUCTOR}) +public @interface ForRemoval +{ + /** + * Version which will most likely remove this feature. + * + * @return The deadline version or N/A if this isn't known yet + */ + String deadline() default "N/A"; +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ReplaceWith.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ReplaceWith.java new file mode 100644 index 00000000..5a1d1f58 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/annotations/ReplaceWith.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.annotations; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * Functionality annotated with ReplaceWith should be replaced immediately + * with the mentioned code fragment. This is often used for things like naming changes. + */ +@Documented +@Retention(RUNTIME) +@Target( +{TYPE, FIELD, METHOD, CONSTRUCTOR}) +public @interface ReplaceWith +{ + String value(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftConfigAccess.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftConfigAccess.java new file mode 100644 index 00000000..45f50b48 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftConfigAccess.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api; + +import java.lang.reflect.Field; + +public class GalacticraftConfigAccess +{ + + private static Field quickMode; + private static Field hardMode; + private static Field adventureMode; + private static Field adventureRecipes; + private static Field adventureMobDropsAndSpawning; + private static Field adventureSpawnHandling; + private static Field adventureAsteroidPopulation; + + public static boolean getQuickMode() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) quickMode.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getHardMode() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) hardMode.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeMode() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureMode.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeRecipes() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureRecipes.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeMobDropsAndSpawning() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureMobDropsAndSpawning.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeSpawnHandling() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureSpawnHandling.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + public static boolean getChallengeAsteroidPopulation() + { + if (quickMode == null) + setup(); + + try + { + return (boolean) adventureAsteroidPopulation.getBoolean(null); + } catch (Exception e) + { + } + return false; + } + + private static void setup() + { + try + { + Class GCConfig = Class.forName("micdoodle8.mods.galacticraft.core.util.ConfigManagerCore"); + quickMode = GCConfig.getField("quickMode"); + hardMode = GCConfig.getField("hardMode"); + adventureMode = GCConfig.getField("challengeMode"); + adventureRecipes = GCConfig.getField("challengeRecipes"); + adventureMobDropsAndSpawning = GCConfig.getField("challengeMobDropsAndSpawning"); + adventureSpawnHandling = GCConfig.getField("challengeSpawnHandling"); + adventureAsteroidPopulation = GCConfig.getField("challengeAsteroidPopulation"); + } catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftRegistry.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftRegistry.java new file mode 100644 index 00000000..c770bbc7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/GalacticraftRegistry.java @@ -0,0 +1,498 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.DimensionType; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldProviderSurface; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.api.world.SpaceStationType; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import com.google.common.collect.Lists; + +public class GalacticraftRegistry +{ + + private static Map, ITeleportType> teleportTypeMap = new HashMap<>(); + private static List spaceStations = new ArrayList<>(); + private static List rocketBenchT1Recipes = new ArrayList<>(); + private static List buggyBenchRecipes = new ArrayList<>(); + private static List rocketBenchT2Recipes = new ArrayList<>(); + private static List cargoRocketRecipes = new ArrayList<>(); + private static List rocketBenchT3Recipes = new ArrayList<>(); + private static List astroMinerRecipes = new ArrayList<>(); + private static Map, ResourceLocation> rocketGuiMap = new HashMap<>(); + private static Map> dungeonLootMap = new HashMap<>(); + private static List dimensionTypeIDs = new ArrayList<>(); + private static List gameScreens = new ArrayList<>(); + private static int maxScreenTypes; + private static Map> gearMap = new HashMap<>(); + private static Map> gearSlotMap = new HashMap<>(); + + /** + * Register a new Teleport type for the world provider passed + * + * @param clazz the world provider class that you wish to customize + * teleportation for + * @param type an ITeleportType-implemented class that will be used for the + * provided world type + */ + public static void registerTeleportType(Class clazz, ITeleportType type) + { + if (!GalacticraftRegistry.teleportTypeMap.containsKey(clazz)) + { + GalacticraftRegistry.teleportTypeMap.put(clazz, type); + } + } + + /** + * Link a world provider to a gui texture. This texture will be shown on the + * left-side of the screen while the player is in the rocket. + * + * @param clazz The World Provider class + * @param rocketGui Resource Location for the gui texture + */ + public static void registerRocketGui(Class clazz, ResourceLocation rocketGui) + { + if (!GalacticraftRegistry.rocketGuiMap.containsKey(clazz)) + { + GalacticraftRegistry.rocketGuiMap.put(clazz, rocketGui); + } + } + + /** + * Add loot to the list of items that can possibly spawn in dungeon chests, + * but it is guaranteed that one will always spawn + * + * @param tier Tier of dungeon chest to add loot to. For example Moon is 1 + * and Mars is 2 + * @param loot The itemstack to add to the possible list of items + */ + public static void addDungeonLoot(int tier, ItemStack loot) + { + List dungeonStacks = null; + + if (GalacticraftRegistry.dungeonLootMap.containsKey(tier)) + { + dungeonStacks = GalacticraftRegistry.dungeonLootMap.get(tier); + dungeonStacks.add(loot); + } else + { + dungeonStacks = new ArrayList<>(); + dungeonStacks.add(loot); + } + + GalacticraftRegistry.dungeonLootMap.put(tier, dungeonStacks); + } + + public static void addT1RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT1Recipes.add(recipe); + } + + public static void addT2RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT2Recipes.add(recipe); + } + + public static void addT3RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT3Recipes.add(recipe); + } + + public static void addCargoRocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.cargoRocketRecipes.add(recipe); + } + + public static void addMoonBuggyRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.buggyBenchRecipes.add(recipe); + } + + public static void addAstroMinerRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.astroMinerRecipes.add(recipe); + } + + public static void removeT1RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT1Recipes.remove(recipe); + } + + public static void removeT2RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT2Recipes.remove(recipe); + } + + public static void removeT3RocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.rocketBenchT3Recipes.remove(recipe); + } + + public static void removeCargoRocketRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.cargoRocketRecipes.remove(recipe); + } + + public static void removeMoonBuggyRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.buggyBenchRecipes.remove(recipe); + } + + public static void removeAstroMinerRecipe(INasaWorkbenchRecipe recipe) + { + GalacticraftRegistry.astroMinerRecipes.remove(recipe); + } + + public static void removeAllT1RocketRecipes() + { + GalacticraftRegistry.rocketBenchT1Recipes.clear(); + } + + public static void removeAllT2RocketRecipes() + { + GalacticraftRegistry.rocketBenchT2Recipes.clear(); + } + + public static void removeAllT3RocketRecipes() + { + GalacticraftRegistry.rocketBenchT3Recipes.clear(); + } + + public static void removeAllCargoRocketRecipes() + { + GalacticraftRegistry.cargoRocketRecipes.clear(); + } + + public static void removeAllMoonBuggyRecipes() + { + GalacticraftRegistry.buggyBenchRecipes.clear(); + } + + public static void removeAllAstroMinerRecipes() + { + GalacticraftRegistry.astroMinerRecipes.clear(); + } + + public static ITeleportType getTeleportTypeForDimension(Class clazz) + { + if (!IGalacticraftWorldProvider.class.isAssignableFrom(clazz)) + { + clazz = WorldProviderSurface.class; + } + return GalacticraftRegistry.teleportTypeMap.get(clazz); + } + + public static void registerSpaceStation(SpaceStationType type) + { + for (SpaceStationType type1 : GalacticraftRegistry.spaceStations) + { + if (type1.getWorldToOrbitID() == type.getWorldToOrbitID()) + { + throw new RuntimeException("Two space station types registered with the same home planet ID: " + type.getWorldToOrbitID()); + } + } + + GalacticraftRegistry.spaceStations.add(type); + } + + public static void replaceSpaceStationRecipe(int spaceStationID, HashMap obj) + { + for (SpaceStationType type1 : GalacticraftRegistry.spaceStations) + { + if (type1.getSpaceStationID() == spaceStationID) + { + type1.setRecipeForSpaceStation(new SpaceStationRecipe(obj)); + } + } + } + + public SpaceStationType getTypeFromPlanetID(int planetID) + { + return GalacticraftRegistry.spaceStations.get(planetID); + } + + public static List getSpaceStationData() + { + return GalacticraftRegistry.spaceStations; + } + + public static List getRocketT1Recipes() + { + return GalacticraftRegistry.rocketBenchT1Recipes; + } + + public static List getRocketT2Recipes() + { + return GalacticraftRegistry.rocketBenchT2Recipes; + } + + public static List getRocketT3Recipes() + { + return GalacticraftRegistry.rocketBenchT3Recipes; + } + + public static List getCargoRocketRecipes() + { + return GalacticraftRegistry.cargoRocketRecipes; + } + + public static List getBuggyBenchRecipes() + { + return GalacticraftRegistry.buggyBenchRecipes; + } + + public static List getAstroMinerRecipes() + { + return GalacticraftRegistry.astroMinerRecipes; + } + + @SideOnly(Side.CLIENT) + public static ResourceLocation getResouceLocationForDimension(Class clazz) + { + if (!IGalacticraftWorldProvider.class.isAssignableFrom(clazz)) + { + clazz = WorldProviderSurface.class; + } + return GalacticraftRegistry.rocketGuiMap.get(clazz); + } + + public static List getDungeonLoot(int tier) + { + return GalacticraftRegistry.dungeonLootMap.get(tier); + } + + /*** + * Register a Galacticraft dimension + */ + public static DimensionType registerDimension(String name, String suffix, int id, Class provider, boolean keepLoaded) throws IllegalArgumentException + { + for (DimensionType other : DimensionType.values()) + { + if (other.getId() == id) + { + return null; + } + } + + DimensionType type = DimensionType.register(name, suffix, id, provider, keepLoaded); + GalacticraftRegistry.dimensionTypeIDs.add(type == null ? 0 : id); + if (type == null) + { + GalacticraftCore.logger.error("Problem registering dimension type " + id + ". May be fixable by changing config."); + } + + return type; + } + + public static int getDimensionTypeID(int index) + { + // Not the best solution but is better than the very unuseful IndexOutOfBoundsException message + try + { + return GalacticraftRegistry.dimensionTypeIDs.get(index); + } catch (IndexOutOfBoundsException e) + { + GalacticraftCore.logger.error("Attempted to get index[%d] while 'dimensionTypeIDs' size was %d", index, GalacticraftRegistry.dimensionTypeIDs.size()); + return 0; + } + + } + + public static boolean isDimensionTypeIDRegistered(int typeId) + { + return GalacticraftRegistry.dimensionTypeIDs.contains(typeId); + } + + /** + * Register an IGameScreen so the Display Screen can access it + * + * @param screen The IGameScreen to be registered + * @return The type ID assigned to this screen type + */ + public static int registerScreen(IGameScreen screen) + { + GalacticraftRegistry.gameScreens.add(screen); + maxScreenTypes++; + screen.setFrameSize(0.098F); + return maxScreenTypes - 1; + } + + public static void registerScreensServer(int maxTypes) + { + maxScreenTypes = maxTypes; + } + + public static int getMaxScreenTypes() + { + return maxScreenTypes; + } + + public static IGameScreen getGameScreen(int type) + { + return GalacticraftRegistry.gameScreens.get(type); + } + + /** + * Adds a custom item for 'extended inventory' slots + * + * Gear IDs must be unique, and should be configurable for user convenience + * + * Please do not use values less than 100, to avoid conflicts with future + * Galacticraft core additions + * + * @param gearID Unique ID for this gear item, please use values greater + * than 100 + * @param type Slot this item can be placed in + * @param item Item to register, not metadata-sensitive + */ + public static void registerGear(int gearID, EnumExtendedInventorySlot type, Item item) + { + addGearObject(gearID, type, item); + } + + /** + * Adds a custom item for 'extended inventory' slots + * + * Gear IDs must be unique, and should be configurable for user convenience + * + * Please do not use values less than 100, to avoid conflicts with future + * Galacticraft core additions + * + * @param gearID Unique ID for this gear item, please use values greater + * than 100 + * @param type Slot this item can be placed in + * @param itemStack ItemStack to register, metadata-sensitive + */ + public static void registerGear(int gearID, EnumExtendedInventorySlot type, ItemStack itemStack) + { + addGearObject(gearID, type, itemStack); + } + + private static void addGearObject(int gearID, EnumExtendedInventorySlot type, Object obj) + { + if (GalacticraftRegistry.gearMap.containsKey(gearID)) + { + if (!GalacticraftRegistry.gearMap.get(gearID).contains(obj)) + { + GalacticraftRegistry.gearMap.get(gearID).add(obj); + } + } else + { + List gear = Lists.newArrayList(); + gear.add(obj); + GalacticraftRegistry.gearMap.put(gearID, gear); + } + + if (GalacticraftRegistry.gearSlotMap.containsKey(gearID)) + { + if (!GalacticraftRegistry.gearSlotMap.get(gearID).contains(type)) + { + GalacticraftRegistry.gearSlotMap.get(gearID).add(type); + } + } else + { + List gearType = Lists.newArrayList(); + gearType.add(type); + GalacticraftRegistry.gearSlotMap.put(gearID, gearType); + } + } + + public static List listAllGearForSlot(EnumExtendedInventorySlot slotType) + { + List result = new LinkedList<>(); + for (Map.Entry> entry : GalacticraftRegistry.gearMap.entrySet()) + { + List slotType1 = getSlotType(entry.getKey()); + if (slotType1.contains(slotType)) + { + List objectList = entry.getValue(); + for (Object o : objectList) + { + if (o instanceof ItemStack) + { + result.add((ItemStack) o); + } else if (o instanceof Item) + { + result.add(new ItemStack((Item) o)); + } + } + } + } + return result; + } + + public static int findMatchingGearID(ItemStack stack, EnumExtendedInventorySlot slotType) + { + for (Map.Entry> entry : GalacticraftRegistry.gearMap.entrySet()) + { + List slotType1 = getSlotType(entry.getKey()); + List objectList = entry.getValue(); + + if (!slotType1.contains(slotType)) + { + continue; + } + + for (Object o : objectList) + { + if (o instanceof Item) + { + if (stack.getItem() == o) + { + return entry.getKey(); + } + } else if (o instanceof ItemStack) + { + if (stack.getItem() == ((ItemStack) o).getItem() && stack.getItemDamage() == ((ItemStack) o).getItemDamage()) + { + return entry.getKey(); + } + } + } + } + + return -1; + } + + public static List getSlotType(int gearID) + { + return GalacticraftRegistry.gearSlotMap.get(gearID); + } + + @Deprecated + /** + * Grating will now register fluids automatically if they extend + * BlockFluidBase + * + */ + public static void registerGratingFluid(Block fluidBlock) + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IDetectableResource.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IDetectableResource.java new file mode 100644 index 00000000..1577e462 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IDetectableResource.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.block.state.IBlockState; + +/** + * Implement this interface to let Sensor Goggles see your block. + */ +public interface IDetectableResource +{ + + /** + * @return array of metadata values that are considered valueable. + */ + boolean isValueable(IBlockState metadata); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IOxygenReliantBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IOxygenReliantBlock.java new file mode 100644 index 00000000..b7fe3002 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IOxygenReliantBlock.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * If block requires updates when oxygen is added and removed, implement this + * into your block class. + * + * It is recommended that blocks implementing this should be set to tick + * randomly, and should override @updateTick() also to carry out oxygen checks. + */ +public interface IOxygenReliantBlock +{ + + void onOxygenRemoved(World world, BlockPos pos, IBlockState currentState); + + void onOxygenAdded(World world, BlockPos pos, IBlockState currentState); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPartialSealableBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPartialSealableBlock.java new file mode 100644 index 00000000..6c6a8c3b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPartialSealableBlock.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface IPartialSealableBlock +{ + + boolean isSealed(World world, BlockPos pos, EnumFacing direction); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPlantableBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPlantableBlock.java new file mode 100644 index 00000000..4d8c9ae1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/IPlantableBlock.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.block.state.IBlockState; + +/** + * Extend this block to allow planting of saplings on it. Requires + */ +public interface IPlantableBlock +{ + + /** + * @return amount of water blocks required for sapling to be growable. 4 is + * default. + */ + int requiredLiquidBlocksNearby(); + + /** + * @return is sapling can be placed on the provided metadata value, return + * true + */ + boolean isPlantable(IBlockState state); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/ITerraformableBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/ITerraformableBlock.java new file mode 100644 index 00000000..a9f1db26 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/ITerraformableBlock.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface ITerraformableBlock +{ + + /** + * Determines if the block as this position is terraformable. This will only + * be called for blocks inside the terraformer bubble. It is recommended + * that you test whether the block can see the surface before returning + * true. + * + * @param world World that the block is a part of + * @param pos The position of the block + * @return True if the block can be terraformed, false if not. + */ + boolean isTerraformable(World world, BlockPos pos); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/package-info.java new file mode 100644 index 00000000..0b4206f4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/block/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|block") +package micdoodle8.mods.galacticraft.api.block; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IGameScreen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IGameScreen.java new file mode 100644 index 00000000..36ea2853 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IGameScreen.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client; + +public interface IGameScreen +{ + + /** + * Set up the frame edge size for this screen. This part must not be drawn + * when the screen is rendered. + * + * Typical size: 0.1F for a screen which can be 1.0F x 1.0F or larger + * + * (This will be called only once during screen initialisation.) + * + * @param frameSize + */ + void setFrameSize(float frameSize); + + /** + * Draw a screen in the XY plane with z == 0. Must fit in the coordinate + * range (0, 0, 0) - (scaleX, scaleY, 0) + * + * Register your IGameScreen by calling DrawGameScreen.registerScreen(); + * from your @Mod class during Forge postInit() phase. + * + * @param type Type of screen to draw, as registered + * @param ticks The worldtime in ticks (including partial ticks) + * @param scaleX Dimension of the screen in X direction + * @param scaleY Dimension of the screen in Y direction + * @param screen The screen driver (DrawGameScreen) for this particular + * screen + * + * NOTE 1: It is not necessary to enclose your code with glPushMatrix + * and glPopMatrix, as this will be done by the calling method. You + * can also change the lighting in your render as the calling method + * will finish by calling RenderHelper.enableStandardItemLighting(). + * + * NOTE 2: if disabling GL11.GL_TEXTURE_2D in your code it is very + * IMPORTANT to re-enable it again. + * + */ + void render(int type, float ticks, float scaleX, float scaleY, IScreenManager screen); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IItemMeshDefinitionCustom.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IItemMeshDefinitionCustom.java new file mode 100644 index 00000000..46eecfd3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IItemMeshDefinitionCustom.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client; + +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.item.ItemStack; + +public interface IItemMeshDefinitionCustom extends ItemMeshDefinition +{ + + static ItemMeshDefinition create(IItemMeshDefinitionCustom lambda) + { + return lambda; + } + + ModelResourceLocation getLocation(ItemStack stack); + + @Override + default ModelResourceLocation getModelLocation(ItemStack stack) + { + return getLocation(stack); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IScreenManager.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IScreenManager.java new file mode 100644 index 00000000..792e5d74 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/IScreenManager.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client; + +import net.minecraft.world.WorldProvider; + +public interface IScreenManager +{ + + /** + * Used by screen renderers to figure out which world they are in + * + * @return The WorldProvider of the world where the screen driver is located + */ + WorldProvider getWorldProvider(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/AbstractTab.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/AbstractTab.java new file mode 100644 index 00000000..c94ec7b9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/AbstractTab.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client.tabs; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.inventory.GuiInventory; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public abstract class AbstractTab extends GuiButton +{ + + ResourceLocation texture = new ResourceLocation("textures/gui/container/creative_inventory/tabs.png"); + ItemStack renderStack; + public int potionOffsetLast; + protected RenderItem itemRender; + + public AbstractTab(int id, int posX, int posY, ItemStack renderStack) + { + super(id, posX, posY, 28, 32, ""); + this.renderStack = renderStack; + this.itemRender = FMLClientHandler.instance().getClient().getRenderItem(); + } + + @Override + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + int newPotionOffset = TabRegistry.getPotionOffsetNEI(); + GuiScreen screen = FMLClientHandler.instance().getClient().currentScreen; + if (screen instanceof GuiInventory) + { + newPotionOffset += TabRegistry.getRecipeBookOffset((GuiInventory) screen) - TabRegistry.recipeBookOffset; + } + if (newPotionOffset != this.potionOffsetLast) + { + this.x += newPotionOffset - this.potionOffsetLast; + this.potionOffsetLast = newPotionOffset; + } + if (this.visible) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + int yTexPos = this.enabled ? 3 : 32; + int ySize = this.enabled ? 25 : 32; + int xOffset = this.id == 2 ? 0 : 1; + int yPos = this.y + (this.enabled ? 3 : 0); + + mc.renderEngine.bindTexture(this.texture); + this.drawTexturedModalRect(this.x, yPos, xOffset * 28, yTexPos, 28, ySize); + + RenderHelper.enableGUIStandardItemLighting(); + this.zLevel = 100.0F; + this.itemRender.zLevel = 100.0F; + GlStateManager.enableLighting(); + GlStateManager.enableRescaleNormal(); + this.itemRender.renderItemAndEffectIntoGUI(this.renderStack, this.x + 6, this.y + 8); + this.itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, this.renderStack, this.x + 6, this.y + 8, null); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + this.itemRender.zLevel = 0.0F; + this.zLevel = 0.0F; + RenderHelper.disableStandardItemLighting(); + } + } + + @Override + public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) + { + boolean inWindow = this.enabled && this.visible && mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + + if (inWindow) + { + this.onTabClicked(); + } + + return inWindow; + } + + public abstract void onTabClicked(); + + public abstract boolean shouldAddToList(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/InventoryTabVanilla.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/InventoryTabVanilla.java new file mode 100644 index 00000000..c73777d8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/InventoryTabVanilla.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client.tabs; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; + +public class InventoryTabVanilla extends AbstractTab +{ + + public InventoryTabVanilla() + { + super(0, 0, 0, new ItemStack(Blocks.CRAFTING_TABLE)); + } + + @Override + public void onTabClicked() + { + TabRegistry.openInventoryGui(); + } + + @Override + public boolean shouldAddToList() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/TabRegistry.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/TabRegistry.java new file mode 100644 index 00000000..05fd7240 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/client/tabs/TabRegistry.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.client.tabs; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.gui.inventory.GuiInventory; +import net.minecraft.inventory.ContainerPlayer; +import net.minecraft.network.play.client.CPacketCloseWindow; +import net.minecraft.potion.PotionEffect; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TabRegistry +{ + + private static ArrayList tabList = new ArrayList(); + private static Class clazzJEIConfig = null; + public static Class clazzNEIConfig = null; + + static + { + try + { + // Checks for JEI by looking for this class instead of a + // Loader.isModLoaded() check + clazzJEIConfig = Class.forName("mezz.jei.config.Config"); + } catch (Exception ignore) + { + // no log spam + } + // Only activate NEI feature if NEI is standalone + if (clazzJEIConfig == null) + { + try + { + clazzNEIConfig = Class.forName("codechicken.nei.NEIClientConfig"); + } catch (Throwable ignore) + { + // no log spam + } + } + } + + public static void registerTab(AbstractTab tab) + { + TabRegistry.tabList.add(tab); + } + + public static ArrayList getTabList() + { + return TabRegistry.tabList; + } + + // Retained for backwards compatibility with TC pre version 1.6.0d40 + public static void addTabsToInventory(GuiContainer gui) + { + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void guiPostInit(GuiScreenEvent.InitGuiEvent.Post event) + { + if (event.getGui() instanceof GuiInventory) + { + int guiLeft = (event.getGui().width - 176) / 2; + int guiTop = (event.getGui().height - 166) / 2; + recipeBookOffset = getRecipeBookOffset((GuiInventory) event.getGui()); + guiLeft += getPotionOffset() + recipeBookOffset; + + TabRegistry.updateTabValues(guiLeft, guiTop, InventoryTabVanilla.class); + TabRegistry.addTabsToList(event.getButtonList()); + } + } + + private static Minecraft mc = FMLClientHandler.instance().getClient(); + private static boolean initWithPotion; + public static int recipeBookOffset; + + public static void openInventoryGui() + { + TabRegistry.mc.player.connection.sendPacket(new CPacketCloseWindow(mc.player.openContainer.windowId)); + GuiInventory inventory = new GuiInventory(TabRegistry.mc.player); + TabRegistry.mc.displayGuiScreen(inventory); + } + + public static void updateTabValues(int cornerX, int cornerY, Class selectedButton) + { + int count = 2; + for (int i = 0; i < TabRegistry.tabList.size(); i++) + { + AbstractTab t = TabRegistry.tabList.get(i); + + if (t.shouldAddToList()) + { + t.id = count; + t.x = cornerX + (count - 2) * 28; + t.y = cornerY - 28; + t.enabled = !t.getClass().equals(selectedButton); + t.potionOffsetLast = getPotionOffsetNEI(); + count++; + } + } + } + + public static void addTabsToList(List buttonList) + { + for (AbstractTab tab : TabRegistry.tabList) + { + if (tab.shouldAddToList()) + { + buttonList.add(tab); + } + } + } + + public static int getPotionOffset() + { + /* + * Disabled in 1.12.2 because a vanilla bug means potion offsets are + * currently not a thing The vanilla bug is that GuiInventory.initGui() + * resets GuiLeft to the recipe book version of GuiLeft, and in + * GuiRecipeBook.updateScreenPosition() it takes no account of potion + * offset even if the recipe book is inactive. // If at least one potion + * is active... if (doPotionOffsetVanilla()) { initWithPotion = true; + * return 60 + getPotionOffsetJEI() + getPotionOffsetNEI(); } + */ + + // No potions, no offset needed + initWithPotion = false; + return 0; + } + + public static boolean doPotionOffsetVanilla() + { + for (PotionEffect potioneffect : mc.player.getActivePotionEffects()) + { + if (potioneffect.getPotion().shouldRender(potioneffect)) + { + return true; + } + } + return false; + } + + public static int getPotionOffsetJEI() + { + if (clazzJEIConfig != null) + { + try + { + Object enabled = clazzJEIConfig.getMethod("isOverlayEnabled").invoke(null); + if (enabled instanceof Boolean) + { + if (!((Boolean) enabled)) + { + // If JEI is disabled, no special change to + // getPotionOffset() + return 0; + } + // Active JEI undoes the standard potion offset (they listen + // for GuiScreenEvent.PotionShiftEvent) + return -60; + } + } catch (Exception ignore) + { + // no log spam + } + } + return 0; + } + + public static int getPotionOffsetNEI() + { + if (initWithPotion && clazzNEIConfig != null) + { + try + { + // Check whether NEI is hidden and enabled + Object hidden = clazzNEIConfig.getMethod("isHidden").invoke(null); + Object enabled = clazzNEIConfig.getMethod("isEnabled").invoke(null); + if (hidden instanceof Boolean && enabled instanceof Boolean) + { + if ((Boolean) hidden || !((Boolean) enabled)) + { + // If NEI is disabled or hidden, it does not affect the + // tabs offset with potions + return 0; + } + // But active NEI undoes the standard potion offset + return -60; + } + } catch (Exception ignore) + { + // no log spam + } + } + // No NEI, no change + return 0; + } + + public static int getRecipeBookOffset(GuiInventory gui) + { + boolean widthTooNarrow = gui.width < 379; + gui.func_194310_f().func_194303_a(gui.width, gui.height, mc, widthTooNarrow, ((ContainerPlayer) gui.inventorySlots).craftMatrix); + return gui.func_194310_f().updateScreenPosition(widthTooNarrow, gui.width, gui.getXSize()) - (gui.width - 176) / 2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IAntiGrav.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IAntiGrav.java new file mode 100644 index 00000000..ee67242e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IAntiGrav.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +/** + * Implement into entities that are unaffected by gravity + */ +public interface IAntiGrav +{ +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICameraZoomEntity.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICameraZoomEntity.java new file mode 100644 index 00000000..6112c779 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICameraZoomEntity.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +public interface ICameraZoomEntity +{ + + float getCameraZoom(); + + boolean defaultThirdPerson(); + + /** + * Used for the ICameraZoomEntities which can rotate pitch and yaw (e.g. + * TieredRocket, Moon Lander) Return a value less than -10F to signal a + * non-rotatable entity (e.g. Landing Balloons, Entry Pod) + */ + float getRotateOffset(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICargoEntity.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICargoEntity.java new file mode 100644 index 00000000..fe4727cf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ICargoEntity.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import javax.annotation.Nonnull; +import net.minecraft.item.ItemStack; + +/** + * Implement into entities that can be loaded with cargo + */ +public interface ICargoEntity +{ + + enum EnumCargoLoadingState + { + FULL, EMPTY, NOTARGET, NOINVENTORY, SUCCESS + } + + class RemovalResult + { + + public final EnumCargoLoadingState resultState; + @Nonnull public final ItemStack resultStack; + + public RemovalResult(EnumCargoLoadingState resultState, @Nonnull ItemStack resultStack) + { + this.resultState = resultState; + this.resultStack = resultStack; + } + } + + EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd); + + RemovalResult removeCargo(boolean doRemove); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IDockable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IDockable.java new file mode 100644 index 00000000..1aa3f0a5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IDockable.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; + +/** + * Implement into entities that are placed on fuel docks to load with cargo and + * fuel + */ +public interface IDockable extends IFuelable, ICargoEntity +{ + + /** + * Sets the current fuel dock for this entity + */ + void setPad(IFuelDock pad); + + /** + * Gets the fuel dock when required. Must return the same one that was set. + */ + IFuelDock getLandingPad(); + + /** + * When the fuel dock is destroyed. Most likely kills the entity and drops + * it's containing items. + */ + void onPadDestroyed(); + + /** + * Whether or not the fuel dock this entity is on is valid.

Returning + * false will not let setPad be called. + */ + boolean isDockValid(IFuelDock dock); + + boolean inFlight(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityBreathable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityBreathable.java new file mode 100644 index 00000000..edfccae4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityBreathable.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +/** + * Implement into entities that are living, but can breath without oxygen + */ +public interface IEntityBreathable +{ + + /** + * Whether or not this entity can currently breathe without oxygen in it's + * vicinity + */ + boolean canBreath(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityNoisy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityNoisy.java new file mode 100644 index 00000000..c9a920fb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IEntityNoisy.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraft.client.audio.ISound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.util.ITickable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/** + * Implement into entities that make a sound all the time, like rockets + */ +public interface IEntityNoisy +{ + + @SideOnly(Side.CLIENT) + ITickable getSoundUpdater(); + + @SideOnly(Side.CLIENT) + ISound setSoundUpdater(EntityPlayerSP player); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IFuelable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IFuelable.java new file mode 100644 index 00000000..b7ea9d3d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IFuelable.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraftforge.fluids.FluidStack; + +/** + * Implement into entities that can be fueled when placed on fuel docks + */ +public interface IFuelable +{ + + /** + * Add fuel to the entity + * + * @param fluid The fluid to add. Be sure to check if the correct fluid is + * being loaded before adding it. + * @param doDrain Whether or not fluid should actually be added, or is just + * a test. + * @return the amount of fluid that was added to the entity. + */ + int addFuel(FluidStack fluid, boolean doDrain); + + /** + * Remove fuel from an entity + * + * @param amount The amount of fluid to drain + * @return The fluidstack that was drained + */ + FluidStack removeFuel(int amount); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IIgnoreShift.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IIgnoreShift.java new file mode 100644 index 00000000..2ba6d52a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IIgnoreShift.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +public interface IIgnoreShift +{ + + boolean shouldIgnoreShiftExit(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILandable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILandable.java new file mode 100644 index 00000000..45d0ed06 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILandable.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraft.util.math.BlockPos; + +/** + * An entity which requires a hook into landing pad events should implement this + * interface + */ +public interface ILandable extends IDockable +{ + + /** + * Called when the entity lands on a dock + * + * @param pos coordinates of the dock + */ + void landEntity(BlockPos pos); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILaserTrackableFast.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILaserTrackableFast.java new file mode 100644 index 00000000..78470794 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ILaserTrackableFast.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +/** + * Used for non-living, but laser turret targettable entities + */ +public interface ILaserTrackableFast +{ +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IRocketType.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IRocketType.java new file mode 100644 index 00000000..11f172f6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IRocketType.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraft.util.text.translation.I18n; + +public interface IRocketType +{ + + enum EnumRocketType + { + + DEFAULT(0, "", false, 2), + INVENTORY27(1, I18n.translateToLocal("gui.rocket_type.0"), false, 20), + INVENTORY36(2, I18n.translateToLocal("gui.rocket_type.1"), false, 38), + INVENTORY54(3, I18n.translateToLocal("gui.rocket_type.2"), false, 56), + PREFUELED(4, I18n.translateToLocal("gui.rocket_type.3"), true, 2); + + private int index; + private String tooltip; + private boolean preFueled; + private int inventorySpace; + + private EnumRocketType(int index, String tooltip, boolean preFueled, int inventorySpace) + { + this.index = index; + this.tooltip = tooltip; + this.preFueled = preFueled; + this.inventorySpace = inventorySpace; + } + + public String getTooltip() + { + return this.tooltip; + } + + public int getIndex() + { + return this.index; + } + + public int getInventorySpace() + { + return this.inventorySpace; + } + + public boolean getPreFueled() + { + return this.preFueled; + } + } + + EnumRocketType getType(); + + int getRocketTier(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ITelemetry.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ITelemetry.java new file mode 100644 index 00000000..e76b2954 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/ITelemetry.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +/** + * Implement into entities to allow transmission of data via telemetry + */ +public interface ITelemetry +{ + + void transmitData(int[] data); + + void receiveData(int[] data, String[] str); + + void adjustDisplay(int[] data); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IWorldTransferCallback.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IWorldTransferCallback.java new file mode 100644 index 00000000..82895168 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/IWorldTransferCallback.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraft.world.World; + +public interface IWorldTransferCallback +{ + + void onWorldTransferred(World world); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/package-info.java new file mode 100644 index 00000000..f823d3c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/entity/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|entity") +package micdoodle8.mods.galacticraft.api.entity; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/ZeroGravityEvent.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/ZeroGravityEvent.java new file mode 100644 index 00000000..c5a5e384 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/ZeroGravityEvent.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.fml.common.eventhandler.Cancelable; + +/** + * Entity Living zero gravity events.

Cancel the event to disable zero + * gravity effects on this entity If Zero Gravity is disabled, the entity will + * fall under dimension-set gravity (probably very low!) + */ +public abstract class ZeroGravityEvent extends LivingEvent +{ + + public final WorldProvider provider; + + public ZeroGravityEvent(EntityLivingBase entity) + { + super(entity); + this.provider = entity.world.provider; + } + + /** + * Cancel this to return false on all freefall tests "Freefall" = feet not + * on a block in a Zero G Dimension + */ + @Cancelable + public static class InFreefall extends ZeroGravityEvent + { + + public InFreefall(EntityLivingBase entity) + { + super(entity); + } + } + + /** + * Cancel this to block special Zero G dimension motion (moving on walls, + * and jumping and landing on blocks) + */ + @Cancelable + public static class Motion extends ZeroGravityEvent + { + + public Motion(EntityLivingBase entity) + { + super(entity); + } + } + + /** + * Cancel this to block the sneak override on Zero G dimensions when + * descending (no sneak) or landing (sneak during impact) + * + * (This sneaking will mostly be cancelled anyhow if the Motion event is + * cancelled) + */ + @Cancelable + public static class SneakOverride extends ZeroGravityEvent + { + + public SneakOverride(EntityLivingBase entity) + { + super(entity); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/celestial/RegisterEvent.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/celestial/RegisterEvent.java new file mode 100644 index 00000000..996aa7c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/celestial/RegisterEvent.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event.celestial; + +import micdoodle8.mods.galacticraft.api.galaxies.ICelestial; +import net.minecraftforge.fml.common.ModContainer; +import net.minecraftforge.fml.common.eventhandler.Event; + +public class RegisterEvent extends Event +{ + + public ICelestial celestialObject; + + public RegisterEvent(ICelestial celestialObject, ModContainer mod) + { + this.celestialObject = celestialObject; + celestialObject.setOwnerId(mod.getModId()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/CelestialBodyRenderEvent.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/CelestialBodyRenderEvent.java new file mode 100644 index 00000000..65d289f1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/CelestialBodyRenderEvent.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event.client; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; +import org.lwjgl.util.vector.Vector3f; + +public abstract class CelestialBodyRenderEvent extends Event +{ + + public final CelestialBody celestialBody; + + public CelestialBodyRenderEvent(CelestialBody celestialBody) + { + this.celestialBody = celestialBody; + } + + public static class CelestialRingRenderEvent extends CelestialBodyRenderEvent + { + + public CelestialRingRenderEvent(CelestialBody celestialBody) + { + super(celestialBody); + } + + @Cancelable + public static class Pre extends CelestialBodyRenderEvent + { + + public final Vector3f parentOffset; + + public Pre(CelestialBody celestialBody, Vector3f parentOffset) + { + super(celestialBody); + this.parentOffset = parentOffset; + } + } + + public static class Post extends CelestialBodyRenderEvent + { + + public Post(CelestialBody celestialBody) + { + super(celestialBody); + } + } + } + + @Cancelable + public static class Pre extends CelestialBodyRenderEvent + { + + public ResourceLocation celestialBodyTexture; + public int textureSize; + + public Pre(CelestialBody celestialBody, ResourceLocation celestialBodyTexture, int textureSize) + { + super(celestialBody); + this.celestialBodyTexture = celestialBodyTexture; + this.textureSize = textureSize; + } + } + + public static class Post extends CelestialBodyRenderEvent + { + + public Post(CelestialBody celestialBody) + { + super(celestialBody); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/package-info.java new file mode 100644 index 00000000..99d9af57 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/client/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|event|client") +package micdoodle8.mods.galacticraft.api.event.client; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/GCCoreOxygenSuffocationEvent.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/GCCoreOxygenSuffocationEvent.java new file mode 100644 index 00000000..b0888af0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/GCCoreOxygenSuffocationEvent.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event.oxygen; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.fml.common.eventhandler.Cancelable; + +/** + * Entity Living suffocation events.

Be sure to make the proper checks + * before cancelling oxygen events... world providers, armor equipped, etc. + */ +public abstract class GCCoreOxygenSuffocationEvent extends LivingEvent +{ + + public final WorldProvider provider; + + public GCCoreOxygenSuffocationEvent(EntityLivingBase entity) + { + super(entity); + this.provider = entity.world.provider; + } + + /** + * This event is posted just before the living entity suffocates

Set + * the event as cancelled to stop the living entity from suffocating

IF + * THE Pre EVENT IS CANCELLED, THE "WARNING: OXYGEN SETUP INVALID!" HUD + * MESSAGE WILL NOT BE SHOWN + */ + @Cancelable + public static class Pre extends GCCoreOxygenSuffocationEvent + { + + public Pre(EntityLivingBase entity) + { + super(entity); + } + } + + /** + * This event is called after the living entity takes damage from oxygen + * suffocation

The event is not called if the pre event was canceled + */ + public static class Post extends GCCoreOxygenSuffocationEvent + { + + public Post(EntityLivingBase entity) + { + super(entity); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/package-info.java new file mode 100644 index 00000000..03534a7f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/oxygen/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|event|oxygen") +package micdoodle8.mods.galacticraft.api.event.oxygen; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/GCCoreEventPopulate.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/GCCoreEventPopulate.java new file mode 100644 index 00000000..e5ec8135 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/GCCoreEventPopulate.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.event.wgen; + +import java.util.Random; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.eventhandler.Event; + +/** + * Event is thrown when a chunk is populated on planets.

If you're adding + * your own dimensions, make sure you post these two events to the forge event + * bus when decorating your planet/moon + */ +public class GCCoreEventPopulate extends Event +{ + + public final World world; + public final Random rand; + public final BlockPos pos; + + public GCCoreEventPopulate(World world, Random rand, BlockPos pos) + { + this.world = world; + this.rand = rand; + this.pos = pos; + } + + public static class Pre extends GCCoreEventPopulate + { + + public Pre(World world, Random rand, BlockPos pos) + { + super(world, rand, pos); + } + } + + public static class Post extends GCCoreEventPopulate + { + + public Post(World world, Random rand, BlockPos pos) + { + super(world, rand, pos); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/package-info.java new file mode 100644 index 00000000..f5b41cbb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/event/wgen/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|event|worldgen") +package micdoodle8.mods.galacticraft.api.event.wgen; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialBody.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialBody.java new file mode 100644 index 00000000..447f783a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialBody.java @@ -0,0 +1,454 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.function.Predicate; + +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.SpawnListEntry; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IMobSpawnBiome; + +import org.apache.commons.lang3.builder.EqualsBuilder; + +public abstract class CelestialBody extends CelestialObject implements Comparable +{ + + protected float relativeSize = 1.0F; + protected ScalableDistance relativeDistanceFromCenter = new ScalableDistance(1.0F); + protected float relativeOrbitTime = 1.0F; + protected float phaseShift = 0.0F; + protected int dimensionID = -1; + protected Class providerClass; + protected String dimensionSuffix; + protected boolean autoRegisterDimension = false; + protected boolean isReachable = false; + protected boolean forceStaticLoad = true; + protected int tierRequired = 0; + + public AtmosphereInfo atmosphere = new AtmosphereInfo(false, false, false, 0.0F, 0.0F, 1.0F); + protected LinkedList biomeInfo; + public LinkedList biomesToGenerate; + public BiomeGenBaseGC[] biomesToAdapt; + protected LinkedList mobInfo; + + protected ResourceLocation celestialBodyIcon; + + protected float ringColorR = 1.0F; + protected float ringColorG = 1.0F; + protected float ringColorB = 1.0F; + + protected ArrayList checklistKeys = new ArrayList<>(); + + public CelestialBody(String bodyName) + { + super(bodyName); + } + + public CelestialBody(String type, String bodyName) + { + this(CelestialType.create(type), bodyName); + } + + public CelestialBody(CelestialType type, String bodyName) + { + super(type, bodyName); + } + + public int getID() + { + return dimensionID; + } + + @Override + public void setOwnerId(String ownerId) + { + super.setOwnerId(ownerId); + } + + /** + * Used for rendering planet's location on the map.

Value of 2.0F would result in the planet being rendered twice as large as earth. + * + * @return Size of the planet/moon relative to earth. + */ + public float getRelativeSize() + { + return this.relativeSize; + } + + /** + * Used for rendering planet's location on the map.

Value of 2.0F would result in an ellipse with twice the radius of the overworld. + * + * @return Distance from the center of the map relative to earth. + */ + public ScalableDistance getRelativeDistanceFromCenter() + { + return this.relativeDistanceFromCenter; + } + + /** + * Used for rendering planet's location on the map.

Value of 1π would result in the planet being rendered directly accross from the original position

Value of 2π is a full rotation and therefore would be rendered at the same spot as the original position + * + * @return Phase shift of planet for planet's revolution around the sun. + */ + public float getPhaseShift() + { + return this.phaseShift; + } + + /** + * Multiplier for length of time relative to earth that this planet takes to orbit fully.

Value of 2.0F would result in the planet rotating twice as slow (and therefore take twice as long) as the earth takes to revolve around the sun. + * + * @return Multiple value for planet's revolution around the sun. + */ + public float getRelativeOrbitTime() + { + return this.relativeOrbitTime; + } + + public int getTierRequirement() + { + return this.tierRequired; + } + + public CelestialBody setTierRequired(int tierRequired) + { + this.tierRequired = tierRequired; + return this; + } + + public CelestialBody setRelativeSize(float relativeSize) + { + this.relativeSize = relativeSize; + return this; + } + + public CelestialBody setRelativeDistanceFromCenter(ScalableDistance relativeDistanceFromCenter) + { + this.relativeDistanceFromCenter = relativeDistanceFromCenter; + return this; + } + + public CelestialBody setPhaseShift(float phaseShift) + { + this.phaseShift = phaseShift; + return this; + } + + public CelestialBody setRelativeOrbitTime(float relativeOrbitTime) + { + this.relativeOrbitTime = relativeOrbitTime; + return this; + } + + public CelestialBody setAtmosphere(AtmosphereInfo atmos) + { + this.atmosphere = atmos; + return this; + } + + public CelestialBody setDimensionInfo(int dimID, Class providerClass) + { + return this.setDimensionInfo(dimID, providerClass, true); + } + + public CelestialBody setDimensionInfo(int providerId, Class providerClass, boolean autoRegister) + { + this.dimensionID = providerId; + this.providerClass = providerClass; + this.autoRegisterDimension = autoRegister; + this.isReachable = true; + return this; + } + + public boolean shouldAutoRegister() + { + return this.autoRegisterDimension; + } + + public int getDimensionID() + { + return this.dimensionID; + } + + public Class getWorldProvider() + { + return this.providerClass; + } + + public boolean isReachable() + { + return this.isReachable; + } + + /* + * Use this to list the atmospheric gases on the celestial body, starting with the most abundant Do not include trace gases (anything less than 0.25%) (Do not use for stars!) + */ + public CelestialBody atmosphereComponents(EnumAtmosphericGas... gasses) + { + this.atmosphere.composition.addAll(Arrays.asList(gasses)); + return this; + } + + /* + * Use this to list the atmospheric gases on the celestial body, starting with the most abundant Do not include trace gases (anything less than 0.25%) (Do not use for stars!) + */ + public CelestialBody atmosphereComponents(Collection collection) + { + this.atmosphere.composition.addAll(collection); + return this; + } + + /* + * Use this to list the atmospheric gases on the celestial body, starting with the most abundant Do not include trace gases (anything less than 0.25%) (Do not use for stars!) + */ + public CelestialBody atmosphereComponent(EnumAtmosphericGas gas) + { + this.atmosphere.composition.add(gas); + return this; + } + + public CelestialBody setRingColorRGB(float ringColorR, float ringColorG, float ringColorB) + { + this.ringColorR = ringColorR; + this.ringColorG = ringColorG; + this.ringColorB = ringColorB; + return this; + } + + public float getRingColorR() + { + return this.ringColorR; + } + + public float getRingColorG() + { + return this.ringColorG; + } + + public float getRingColorB() + { + return this.ringColorB; + } + + public ResourceLocation getBodyIcon() + { + return this.celestialBodyIcon; + } + + public CelestialBody setBodyIcon(ResourceLocation planetIcon) + { + this.celestialBodyIcon = planetIcon; + return this; + } + + public boolean getForceStaticLoad() + { + return this.forceStaticLoad; + } + + public CelestialBody setForceStaticLoad(boolean force) + { + this.forceStaticLoad = force; + return this; + } + + public void addChecklistKeys(String... keys) + { + this.checklistKeys.addAll(Arrays.asList(keys)); + } + + public List getChecklistKeys() + { + return this.checklistKeys; + } + + @Override + public int hashCode() + { + return this.getTranslationKey().hashCode(); + } + + @Override + public boolean equals(Object other) + { + if (other instanceof CelestialBody) + { + return new EqualsBuilder().append(this.getTranslationKey(), ((CelestialBody) other).getTranslationKey()).isEquals(); + } + + return false; + } + + @Override + public int compareTo(CelestialBody other) + { + ScalableDistance thisDistance = this.getRelativeDistanceFromCenter(); + ScalableDistance otherDistance = other.getRelativeDistanceFromCenter(); + return otherDistance.unScaledDistance < thisDistance.unScaledDistance ? 1 : (otherDistance.unScaledDistance > thisDistance.unScaledDistance ? -1 : 0); + } + + public static class ScalableDistance + { + + public final float unScaledDistance; + public final float scaledDistance; + + public ScalableDistance(float unScaledDistance, float scaledDistance) + { + this.unScaledDistance = unScaledDistance; + this.scaledDistance = scaledDistance; + } + + public ScalableDistance(float distance) + { + this(distance, distance); + } + } + + public static Predicate filterReachable() + { + return new Predicate() + { + + @Override + public boolean test(CelestialBody celestialObject) + { + return celestialObject.isReachable(); + } + }; + } + + public void setUnreachable() + { + this.isReachable = false; + } + + public String getDimensionSuffix() + { + return dimensionSuffix; + } + + public void setDimensionSuffix(String dimensionSuffix) + { + this.dimensionSuffix = dimensionSuffix; + } + + public void setBiomeInfo(Biome... biomes) + { + this.biomeInfo = new LinkedList<>(); + this.biomesToGenerate = new LinkedList<>(); + LinkedList adaptiveBiomes = new LinkedList<>(); + int index = 0; + for (Biome b : biomes) + { + this.biomeInfo.add(b); + if (b instanceof BiomeGenBaseGC && ((BiomeGenBaseGC) b).isAdaptiveBiome) + { + this.biomesToGenerate.add(BiomeAdaptive.register(index++, (BiomeGenBaseGC) b)); + adaptiveBiomes.add((BiomeGenBaseGC) b); + } else + { + this.biomesToGenerate.add(b); + } + } + this.biomesToAdapt = adaptiveBiomes.toArray(new BiomeGenBaseGC[adaptiveBiomes.size()]); + } + + public List getBiomes() + { + return this.biomeInfo; + } + + public void addMobInfo(SpawnListEntry entry) + { + if (this.mobInfo == null) + { + this.mobInfo = new LinkedList<>(); + } + this.mobInfo.add(entry); + } + + public void initialiseMobSpawns() + { + if (this.biomeInfo != null && this.mobInfo != null) + { + for (Biome biome : this.biomeInfo) + { + if (biome instanceof IMobSpawnBiome) + { + ((IMobSpawnBiome) biome).initialiseMobLists(this.mobInfo); + } + } + } + } + + public List getSurfaceBlocks() + { + if (this.providerClass != null && IGalacticraftWorldProvider.class.isAssignableFrom(this.providerClass)) + { + try + { + return ((IGalacticraftWorldProvider) this.providerClass.newInstance()).getSurfaceBlocks(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + return null; + } + + // DEPRECIATED METHODS + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("isReachable()") + public boolean getReachable() + { + return isReachable(); + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("getCelestialType().getName()") + public String getUnlocalizedNamePrefix() + { + return "unset"; + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("getTranslationKey()") + public String getUnlocalizedName() + { + return getTranslationKey(); + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("getTranslatedName()") + public String getLocalizedName() + { + return getTranslatedName(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialObject.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialObject.java new file mode 100644 index 00000000..55c78fa7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialObject.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import java.util.function.Predicate; + +//import lombok.Setter; +import net.minecraft.util.text.translation.I18n; + +import lombok.Setter; + +public abstract class CelestialObject implements ICelestial +{ + + protected final String bodyName; + @Setter + private CelestialType type; + @Setter + public String ownerId; + + public CelestialObject(CelestialType type, String bodyName) + { + this(bodyName); + this.type = type; + } + + public CelestialObject(String bodyName) + { + this.bodyName = bodyName; + } + + @Override + public String getName() + { + return this.bodyName; + } + + public String getTranslationKey() + { + return this.getCelestialType().toString() + "." + bodyName; + } + + @Override + public CelestialType getCelestialType() + { + return this.type; + } + + public String getOwnerId() + { + return this.ownerId; + } + + public String getTranslatedName() + { + return I18n.translateToLocal(this.getTranslationKey()); + } + + public boolean isEqualTo(CelestialType celestialType, String name) + { + return type.equals(celestialType) && bodyName.equalsIgnoreCase(name); + } + + public static Predicate filter(String modId) + { + return new Predicate() + { + + @Override + public boolean test(CelestialObject celestialObject) + { + return celestialObject.getOwnerId().equals(modId); + } + }; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialType.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialType.java new file mode 100644 index 00000000..da5d361a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/CelestialType.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; + +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode +public final class CelestialType +{ + + private static final Map byName = new HashMap<>(); + private static Collection allTypes = Collections.unmodifiableCollection(byName.values()); + + public static final CelestialType SATELLITE = new CelestialType("satellite"); + public static final CelestialType MOON = new CelestialType("moon"); + public static final CelestialType PLANET = new CelestialType("planet"); + public static final CelestialType STAR = new CelestialType("star"); + public static final CelestialType SOLARSYSTEM = new CelestialType("solarsystem"); + + private final String name; + + public static CelestialType create(String name) + { + return new CelestialType(name.toLowerCase()); + } + + private CelestialType(String name) + { + this.name = name; + byName.put(name, this); + } + + public String getName() + { + return name; + } + + @Override + public String toString() + { + return name; + } + + public String getPrefix() + { + return name + "."; + } + + public static Collection getAllNames() + { + return allTypes.stream().map(t -> t.getName()).collect(Collectors.toList()); + } + + public static Collection getAll() + { + return allTypes; + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/GalaxyRegistry.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/GalaxyRegistry.java new file mode 100644 index 00000000..819532b9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/GalaxyRegistry.java @@ -0,0 +1,399 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.event.celestial.RegisterEvent; +import micdoodle8.mods.galacticraft.api.util.stream.CelestialCollector; +import micdoodle8.mods.galacticraft.core.util.list.CelestialList; +import micdoodle8.mods.galacticraft.core.util.list.ImmutableCelestialList; + +public class GalaxyRegistry +{ + + static CelestialList solarSystems = CelestialList.create(); + static CelestialList planets = CelestialList.create(); + static CelestialList moons = CelestialList.create(); + static CelestialList satellites = CelestialList.create(); + static CelestialList objects = CelestialList.create(); + static Map> moonList = new HashMap<>(); + static Map> satelliteList = new HashMap<>(); + static Map> solarSystemList = new HashMap<>(); + + public static void refreshGalaxies() + { + moonList.clear(); + satelliteList.clear(); + solarSystemList.clear(); + for (Moon moon : getMoons()) + { + Planet planet = moon.getParentPlanet(); + CelestialList list = moonList.get(planet); + if (list == null) + { + list = CelestialList.create(); + } + list.add(moon); + moonList.put(planet, list); + } + for (Satellite satellite : getSatellites()) + { + CelestialBody celestialBody = satellite.getParentPlanet(); + CelestialList list = satelliteList.get(celestialBody); + if (list == null) + { + list = CelestialList.create(); + } + list.add(satellite); + satelliteList.put(celestialBody, list); + } + for (Planet planet : getPlanets()) + { + SolarSystem solarSystem = planet.getParentSolarSystem(); + CelestialList list = solarSystemList.get(solarSystem); + if (list == null) + { + list = CelestialList.create(); + } + list.add(planet); + solarSystemList.put(solarSystem, list); + } + } + + /** + * Returns the CelestialObject that matches the given TranslationKey. Iterates through EVERY registerd object + * + * @param translationkey + * + * @return CelestialObject + */ + public static CelestialObject getCelestialObjectFromTranslationKey(String translationkey) + { + for (CelestialObject celestialObject : objects) + { + if (celestialObject.getTranslationKey().equals(translationkey)) + { + return celestialObject; + } + } + return null; + } + + /** + * Returns the CelestialBody of the given DimensionID. Iterates through, Planets, Moons & Satellites only + * + * @param dimensionID the DIM Id of the CelestialBody + * + * @return CelestialBody with the DimensionID provided + */ + public static CelestialBody getCelestialBodyFromDimensionID(int dimensionID) + { + for (Planet planet : planets) + { + if (planet.getDimensionID() == dimensionID) + { + return planet; + } + } + for (Moon moon : moons) + { + if (moon.getDimensionID() == dimensionID) + { + return moon; + } + } + for (Satellite satellite : satellites) + { + if (satellite.getDimensionID() == dimensionID) + { + return satellite; + } + } + return null; + } + + public static List getPlanetsForSolarSystem(SolarSystem solarSystem) + { + if (solarSystemList.get(solarSystem) == null) + { + return new ArrayList<>(); + } + return solarSystemList.get(solarSystem); + } + + public static List getMoonsForPlanet(Planet planet) + { + if (moonList.get(planet) == null) + { + return new ArrayList<>(); + } + return moonList.get(planet); + } + + public static List getSatellitesForCelestialBody(CelestialBody celestialBody) + { + if (satelliteList.get(celestialBody) == null) + { + return new ArrayList<>(); + } + return satelliteList.get(celestialBody); + } + + public static CelestialBody getPlanetOrMoonFromTranslationkey(String translationKey) + { + for (Planet planet : planets) + { + if (planet.getTranslationKey().equals(translationKey)) + { + return planet; + } + } + for (Moon moon : moons) + { + if (moon.getTranslationKey().equals(translationKey)) + { + return moon; + } + } + return null; + } + + public static void register(Object object) + { + if (object instanceof SolarSystem) + { + SolarSystem solarSystem = (SolarSystem) object; + RegisterEvent registerEvent = new RegisterEvent(solarSystem, Loader.instance().activeModContainer()); + solarSystems.add(solarSystem); + objects.add(solarSystem); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + if (object instanceof Planet) + { + Planet planet = (Planet) object; + RegisterEvent registerEvent = new RegisterEvent(planet, Loader.instance().activeModContainer()); + planets.add(planet); + objects.add(planet); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + if (object instanceof Moon) + { + Moon moon = (Moon) object; + RegisterEvent registerEvent = new RegisterEvent(moon, Loader.instance().activeModContainer()); + moons.add(moon); + objects.add(moon); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + if (object instanceof Satellite) + { + Satellite satellite = (Satellite) object; + RegisterEvent registerEvent = new RegisterEvent(satellite, Loader.instance().activeModContainer()); + satellites.add(satellite); + objects.add(satellite); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + if (object instanceof CelestialBody) + { + CelestialBody celestialType = (CelestialBody) object; + String unlocalizedPrefix = ((CelestialBody) object).getUnlocalizedNamePrefix(); + if (!unlocalizedPrefix.equals("unset")) + { + ((CelestialBody) object).setType(CelestialType.create(unlocalizedPrefix)); + } + RegisterEvent registerEvent = new RegisterEvent(celestialType, Loader.instance().activeModContainer()); + objects.add(celestialType); + MinecraftForge.EVENT_BUS.post(registerEvent); + } + } + + /** + * Returns a read-only list containing all registered CelestialObjects + */ + public static ImmutableCelestialList getAllRegisteredObjects() + { + return ImmutableCelestialList.of(objects); + } + + /** + * Returns a read-only list containing all registered Solar Systems + */ + public static ImmutableCelestialList getSolarSystems() + { + return ImmutableCelestialList.of(solarSystems); + } + + /** + * Returns a read-only list containing all registered Planets + */ + public static ImmutableCelestialList getPlanets() + { + return ImmutableCelestialList.of(planets); + } + + /** + * Returns a read-only list containing all registered Moons + */ + public static ImmutableCelestialList getMoons() + { + return ImmutableCelestialList.of(moons); + } + + /** + * Returns a read-only list containing all registered Satellites + */ + public static ImmutableCelestialList getSatellites() + { + return ImmutableCelestialList.of(satellites); + } + + /** + * Returns a read-only list containing all CelestialObjects that are reachable + */ + public static ImmutableCelestialList getAllReachableBodies() + {//@noformat + return ImmutableCelestialList.from( + planets.stream().filter(CelestialBody.filterReachable()).collect(CelestialCollector.toList()), + moons.stream().filter(CelestialBody.filterReachable()).collect(CelestialCollector.toList()) + ); + } + + /** + * Returns a read-only list containing all CelestialObjects registered by the provided ModContainer + */ + public static ImmutableCelestialList getCelestialObjectsFromMod(ModContainer modContainer) + { + return getCelestialObjectsFromMod(modContainer.getModId()); + } + + /** + * Returns a read-only list containing all CelestialObjects registered by the provided modId + */ + public static ImmutableCelestialList getCelestialObjectsFromMod(String modId) + { + return objects.stream().filter(CelestialObject.filter(modId)).collect(CelestialCollector.toList()).toUnmodifiableList(); + } + + public static String[] getAllTransltionKeys() + { + return objects.stream().map(key -> key.getTranslationKey()).collect(Collectors.toList()).toArray(new String[objects.size()]); + } + + // -- DEPRECIATED METHODS -- // + + /** + * @ReplaceWith {@link GalaxyRegistry#getPlanetOrMoonFromTranslationkey(String translationKey)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getPlanetOrMoonFromTranslationkey(String translationKey)") + public static CelestialBody getCelestialBodyFromUnlocalizedName(String unlocalizedName) + { + return getPlanetOrMoonFromTranslationkey(unlocalizedName); + } + + /** + * @ReplaceWith {@link GalaxyRegistry#register(T object)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.register(T object)") + public static boolean registerSolarSystem(SolarSystem solarSystem) + { + GalaxyRegistry.register(solarSystem); + return solarSystems.contains(solarSystem); + } + + /** + * @ReplaceWith {@link GalaxyRegistry#register(T object)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.register(T object)") + public static boolean registerPlanet(Planet planet) + { + GalaxyRegistry.register(planet); + return planets.contains(planet); + } + + /** + * @ReplaceWith {@link GalaxyRegistry#register(T object)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.register(T object)") + public static boolean registerMoon(Moon moon) + { + GalaxyRegistry.register(moon); + return moons.contains(moon); + } + + /** + * @ReplaceWith {@link GalaxyRegistry#register(T object)} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.register(T object)") + public static boolean registerSatellite(Satellite satellite) + { + GalaxyRegistry.register(satellite); + return satellites.contains(satellite); + } + + /** + * Returns a read-only map containing Solar System Names and their associated Solar Systems. + * + * @ReplaceWith {@link GalaxyRegistry#getSolarSystems()} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getSolarSystems()") + public static Map getRegisteredSolarSystems() + { + return solarSystems.getRegistered(); + } + + /** + * Returns a read-only map containing Planet Names and their associated Planets. + * + * @ReplaceWith {@link GalaxyRegistry#getPlanets()} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getPlanets()") + public static Map getRegisteredPlanets() + { + return planets.getRegistered(); + } + + /** + * Returns a read-only map containing Moon Names and their associated Moons. + * + * @ReplaceWith {@link GalaxyRegistry#getMoons()} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getMoons()") + public static Map getRegisteredMoons() + { + return moons.getRegistered(); + } + + /** + * Returns a read-only map containing Satellite Names and their associated Satellite. + * + * @ReplaceWith {@link GalaxyRegistry#getSatellites()} + */ + @Deprecated + @ReplaceWith("GalaxyRegistry.getSatellites()") + public static Map getRegisteredSatellites() + { + return satellites.getRegistered(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/ICelestial.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/ICelestial.java new file mode 100644 index 00000000..922dc191 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/ICelestial.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +public interface ICelestial +{ + + public String getName(); + + public CelestialType getCelestialType(); + + public void setOwnerId(String ownerId); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/IChildBody.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/IChildBody.java new file mode 100644 index 00000000..764e3b09 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/IChildBody.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +public interface IChildBody +{ + Planet getParentPlanet(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Moon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Moon.java new file mode 100644 index 00000000..fd76c93e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Moon.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +public class Moon extends CelestialBody implements IChildBody +{ + protected Planet parentPlanet = null; + + public Moon(String moonName) + { + super(CelestialType.MOON, moonName); + } + + public Moon setParentPlanet(Planet planet) + { + this.parentPlanet = planet; + return this; + } + + @Override + public Planet getParentPlanet() + { + return this.parentPlanet; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Planet.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Planet.java new file mode 100644 index 00000000..4463a786 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Planet.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import net.minecraft.world.biome.Biome.SpawnListEntry; + +public class Planet extends CelestialBody +{ + protected SolarSystem parentSolarSystem = null; + + public Planet(String planetName) + { + super(CelestialType.PLANET, planetName); + } + + public SolarSystem getParentSolarSystem() + { + return this.parentSolarSystem; + } + + public Planet setParentSolarSystem(SolarSystem galaxy) + { + this.parentSolarSystem = galaxy; + return this; + } + + public static void addMobToSpawn(String planetName, SpawnListEntry mobData) + { + GalaxyRegistry.getPlanetOrMoonFromTranslationkey("planet." + planetName).addMobInfo(mobData); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Satellite.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Satellite.java new file mode 100644 index 00000000..773c9d84 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Satellite.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import net.minecraft.world.WorldProvider; + +public class Satellite extends CelestialBody implements IChildBody +{ + protected Planet parentCelestialBody = null; + protected int dimensionIdStatic = 0; + + public Satellite(String satelliteName) + { + super(CelestialType.SATELLITE, satelliteName); + } + + @Override + public Planet getParentPlanet() + { + return this.parentCelestialBody; + } + + public Satellite setParentBody(Planet parentCelestialBody) + { + this.parentCelestialBody = parentCelestialBody; + return this; + } + + public CelestialBody setDimensionInfo(int providerIdDynamic, int providerIdStatic, Class providerClass) + { + this.dimensionIdStatic = providerIdStatic; + return super.setDimensionInfo(providerIdDynamic, providerClass, false); + } + + public int getDimensionIdStatic() + { + return dimensionIdStatic; + } + + @Override + @Deprecated + public CelestialBody setDimensionInfo(int providerId, Class providerClass, boolean autoRegister) + { + throw new UnsupportedOperationException("Satellite registered using an outdated method (setDimensionInfo)! Tell Galacticraft addon authors to update to the latest API."); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/SolarSystem.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/SolarSystem.java new file mode 100644 index 00000000..ba8ee5e7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/SolarSystem.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +public class SolarSystem extends CelestialObject +{ + + protected Vector3 mapPosition = null; + protected Star mainStar = null; + protected String unlocalizedGalaxyName; + + public SolarSystem(String solarSystem, String parentGalaxy) + { + super(CelestialType.SOLARSYSTEM, solarSystem); + this.unlocalizedGalaxyName = parentGalaxy; + } + + @Override + public void setOwnerId(String ownerId) + { + super.setOwnerId(ownerId); + } + + public Vector3 getMapPosition() + { + return this.mapPosition; + } + + public SolarSystem setMapPosition(Vector3 mapPosition) + { + mapPosition.scale(500D); + this.mapPosition = mapPosition; + return this; + } + + public Star getMainStar() + { + return this.mainStar; + } + + public SolarSystem setMainStar(Star star) + { + this.mainStar = star; + return this; + } + + public String getTranslatedParentGalaxyName() + { + return super.getTranslatedName(); + } + + public String getParentGalaxyTranslationKey() + { + return "galaxy." + this.unlocalizedGalaxyName; + } + + // DEPRECATED METHODS + + @Deprecated + @ReplaceWith("getTranslationKey()") + public String getUnlocalizedName() + { + return getTranslationKey(); + } + + @Deprecated + @ReplaceWith("getTranslatedName()") + public String getLocalizedName() + { + return getTranslatedName(); + } + + @Deprecated + @ReplaceWith("getTranslatedParentGalaxyName()") + public String getLocalizedParentGalaxyName() + { + return getTranslatedParentGalaxyName(); + } + + @Deprecated + @ReplaceWith("getParentGalaxyTranslationKey()") + public String getUnlocalizedParentGalaxyName() + { + return "galaxy." + this.unlocalizedGalaxyName; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Star.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Star.java new file mode 100644 index 00000000..056640a4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/Star.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.galaxies; + +public class Star extends CelestialBody + +{ + protected SolarSystem parentSolarSystem = null; + + public Star(String planetName) + { + super(CelestialType.STAR, planetName); + } + + public SolarSystem getParentSolarSystem() + { + return this.parentSolarSystem; + } + + public Star setParentSolarSystem(SolarSystem galaxy) + { + this.parentSolarSystem = galaxy; + return this; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/package-info.java new file mode 100644 index 00000000..03d50e62 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/galaxies/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|galaxies") +package micdoodle8.mods.galacticraft.api.galaxies; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/AccessInventoryGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/AccessInventoryGC.java new file mode 100644 index 00000000..0df2762c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/AccessInventoryGC.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.inventory; + +import java.lang.reflect.Method; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; + +/** + * A static method for other mods to access the Galacticraft extended inventory. + * + * Call: AccessInventoryGC.getGCInventoryForPlayer(player) + */ +public class AccessInventoryGC +{ + + private static Class playerStatsClass; + private static Method getStats; + private static Method getExtendedInventory; + + public static IInventoryGC getGCInventoryForPlayer(EntityPlayerMP player) + { + try + { + if (playerStatsClass == null || getStats == null || getExtendedInventory == null) + { + playerStatsClass = Class.forName("micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats"); + getStats = playerStatsClass.getMethod("get", Entity.class); + getExtendedInventory = playerStatsClass.getMethod("getExtendedInventory"); + } + + Object stats = getStats.invoke(null, player); + if (stats == null) + { + return null; + } + return (IInventoryGC) getExtendedInventory.invoke(stats); + } catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/IInventoryGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/IInventoryGC.java new file mode 100644 index 00000000..93da4ca3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/inventory/IInventoryGC.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; + +/** + * An interface for other mods to access the Galacticraft extended inventory + * slots. + * + * (All normal IInventory methods will work) + */ +public interface IInventoryGC extends IInventory +{ + + /** + * Drop only the Galacticraft items from the player's inventory. + * + * @param player + */ + void dropExtendedItems(EntityPlayer player); + + /** + * Make the implementing inventory a copy of the specified extended + * inventory. + * + * @param par1InventoryPlayer The inventory to copy + */ + void copyInventory(IInventoryGC par1InventoryPlayer); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ElectricItemHelper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ElectricItemHelper.java new file mode 100644 index 00000000..7f368dd1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ElectricItemHelper.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +/** + * Some helper functions for electric items. + * + * @author Calclavia + */ +public class ElectricItemHelper +{ + + /** + * Recharges an electric item. + * + * @param joules - The joules being provided to the electric item + * @return The total amount of joules provided by the provider. + */ + public static float chargeItem(ItemStack itemStack, float joules) + { + if (itemStack != null) + { + if (itemStack.getItem() instanceof IItemElectric) + { + return ((IItemElectric) itemStack.getItem()).recharge(itemStack, Math.min(((IItemElectric) itemStack.getItem()).getTransfer(itemStack), joules), true); + } + } + + return 0; + } + + /** + * Decharges an electric item. + * + * @param joules - The joules being withdrawn from the electric item + * @return The total amount of joules the provider received. + */ + public static float dischargeItem(ItemStack itemStack, float joules) + { + if (itemStack != null) + { + if (itemStack.getItem() instanceof IItemElectric) + { + return ((IItemElectric) itemStack.getItem()).discharge(itemStack, Math.min(((IItemElectric) itemStack.getItem()).getMaxElectricityStored(itemStack), joules), true); + } + } + + return 0; + } + + /** + * Returns an uncharged version of the electric item. Use this if you want + * the crafting recipe to use a charged version of the electric item instead + * of an empty version of the electric item + * + * @return An electrical ItemStack with a specific charge. + */ + public static ItemStack getWithCharge(ItemStack itemStack, float joules) + { + if (itemStack != null) + { + if (itemStack.getItem() instanceof IItemElectric) + { + ((IItemElectric) itemStack.getItem()).setElectricity(itemStack, joules); + return itemStack; + } + } + + return itemStack; + } + + public static ItemStack getWithCharge(Item item, float joules) + { + return ElectricItemHelper.getWithCharge(new ItemStack(item), joules); + } + + public static ItemStack getCloneWithCharge(ItemStack itemStack, float joules) + { + return ElectricItemHelper.getWithCharge(itemStack.copy(), joules); + } + + public static ItemStack getUncharged(ItemStack itemStack) + { + return ElectricItemHelper.getWithCharge(itemStack, 0); + } + + public static ItemStack getUncharged(Item item) + { + return ElectricItemHelper.getUncharged(new ItemStack(item)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/EnumExtendedInventorySlot.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/EnumExtendedInventorySlot.java new file mode 100644 index 00000000..4dc8c41a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/EnumExtendedInventorySlot.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +public enum EnumExtendedInventorySlot +{ + MASK, GEAR, LEFT_TANK, RIGHT_TANK, PARACHUTE, FREQUENCY_MODULE, THERMAL_HELMET, THERMAL_CHESTPLATE, THERMAL_LEGGINGS, THERMAL_BOOTS, SHIELD_CONTROLLER +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/GCRarity.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/GCRarity.java new file mode 100644 index 00000000..14bea4f5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/GCRarity.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.common.IRarity; + +public interface GCRarity extends IRarity +{ + @Override + default TextFormatting getColor() + { + return TextFormatting.BLUE; + } + + @Override + default String getName() + { + return "Space"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorCorrosionResistant.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorCorrosionResistant.java new file mode 100644 index 00000000..31f6e72e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorCorrosionResistant.java @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +public interface IArmorCorrosionResistant +{ +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorGravity.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorGravity.java new file mode 100644 index 00000000..231ac37b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IArmorGravity.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; + +public interface IArmorGravity +{ + + /** + * Effective on worlds where the Galacticraft gravity is less than Overworld + * normal. + * + * @return value between 0 and 100 (other values have undefined results) 0 = + * standard Galacticraft gravity for the world 50 = mid=way 100 = + * gravity as if the player was on the Overworld (the armor makes + * the player heavy) + * + * The total effect will be cumulative for all pieces of + * IArmorGravity armor worn. + */ + int gravityOverrideIfLow(EntityPlayer p); + + /** + * Effective on worlds where the Galacticraft gravity is higher than + * Overworld normal. + * + * @return value between 0 and 100 (other values have undefined results) 0 = + * standard Galacticraft gravity for the world 50 = mid=way 100 = + * gravity as if the player was on the Overworld (the armor makes + * the player lighter / stronger) + * + * The total effect will be cumulative for all pieces of + * IArmorGravity armor worn. + */ + int gravityOverrideIfHigh(EntityPlayer p); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IBreathableArmor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IBreathableArmor.java new file mode 100644 index 00000000..711a92f6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IBreathableArmor.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** + * Implement into Armor items + */ +public interface IBreathableArmor +{ + + enum EnumGearType + { + HELMET, GEAR, TANK1, TANK2 + } + + /** + * @param gearType The gear type to be handled + * @return true if the passed gear type should be handled by this armor item + */ + boolean handleGearType(EnumGearType gearType); + + /** + * Determines if armor item is currently valid for breathing + * + * @param helmetInSlot The armor itemstack + * @param playerWearing The player wearing the armor + * @param type The oxygen gear type @see EnumGearType + * @return true if this armor item is valid for the provided oxygen gear + * type + */ + boolean canBreathe(ItemStack helmetInSlot, EntityPlayer playerWearing, EnumGearType type); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItem.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItem.java new file mode 100644 index 00000000..7cfb3154 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItem.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; + +/** + * Implement into an item class to allow player to hold it above their head + */ +public interface IHoldableItem +{ + + /** + * Self-explanatory.

Use player.inventory.getCurrentItem() to get the + * itemstack + * + * @param player the player holding the item + * @return true if player should hold the item above their head + */ + boolean shouldHoldLeftHandUp(EntityPlayer player); + + /** + * Self-explanatory.

Use player.inventory.getCurrentItem() to get the + * itemstack + * + * @param player the player holding the item + * @return true if player should hold the item above their head + */ + boolean shouldHoldRightHandUp(EntityPlayer player); + + /** + * Used to determine if player should crouch while holding this item.

+ * Use player.inventory.getCurrentItem() to get the itemstack + * + * @param player the player holding the item + * @return true if player should hold the item above their head + */ + boolean shouldCrouch(EntityPlayer player); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItemCustom.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItemCustom.java new file mode 100644 index 00000000..231967ea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IHoldableItemCustom.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.entity.player.EntityPlayer; + +public interface IHoldableItemCustom extends IHoldableItem +{ + + Vector3 getLeftHandRotation(EntityPlayer player); + + Vector3 getRightHandRotation(EntityPlayer player); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectric.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectric.java new file mode 100644 index 00000000..7bdd3100 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectric.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +public interface IItemElectric +{ + + /** + * Adds energy to an item. Returns the quantity of energy that was accepted. + * This should always return 0 if the item cannot be externally charged. + * + * @param itemStack ItemStack to be charged. + * @param energy Maximum amount of energy to be sent into the item. + * @param doRecharge If false, the charge will only be simulated. + * @return Amount of energy that was accepted by the item. + */ + float recharge(ItemStack itemStack, float energy, boolean doRecharge); + + /** + * Removes energy from an item. Returns the quantity of energy that was + * removed. This should always return 0 if the item cannot be externally + * discharged. + * + * @param itemStack ItemStack to be discharged. + * @param energy Maximum amount of energy to be removed from the item. + * @param doDischarge If false, the discharge will only be simulated. + * @return Amount of energy that was removed from the item. + */ + float discharge(ItemStack itemStack, float energy, boolean doDischarge); + + /** + * Get the amount of energy currently stored in the item. + */ + float getElectricityStored(ItemStack theItem); + + /** + * Get the max amount of energy that can be stored in the item. + */ + float getMaxElectricityStored(ItemStack theItem); + + /** + * Sets the amount of energy in the ItemStack. + * + * @param itemStack - the ItemStack. + * @param joules - Amount of electrical energy. + */ + void setElectricity(ItemStack itemStack, float joules); + + /** + * @return the energy request this ItemStack demands. + */ + float getTransfer(ItemStack itemStack); + + /** + * @return The energy tier this item runs on (must be 1 or 2) + */ + int getTierGC(ItemStack itemStack); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectricBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectricBase.java new file mode 100644 index 00000000..64b90f42 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemElectricBase.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +/** + * Interface version of + * micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase For use in + * electrical ItemArmor, or other items which must extend different classes + */ +public interface IItemElectricBase extends IItemElectric +{ + + float getMaxTransferGC(ItemStack itemStack); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemOxygenSupply.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemOxygenSupply.java new file mode 100644 index 00000000..d6c03d24 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemOxygenSupply.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +public interface IItemOxygenSupply +{ + + /* + * Returns the amount of gas that this oxygen item is able to supply + */ + int discharge(ItemStack itemStack, int amount); + + int getOxygenStored(ItemStack theItem); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemThermal.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemThermal.java new file mode 100644 index 00000000..36147357 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IItemThermal.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +public interface IItemThermal +{ + + /** + * The thermal strength of this armor. Value for first tier thermal padding + * is 1. + */ + int getThermalStrength(); + + /** + * Returns whether the provided itemstack is valid for the armor slot: + * + * @param stack The item to test + * @param armorSlot 0 - helmet 1 - chestplate 2 - leggings 3 - boots + */ + boolean isValidForSlot(ItemStack stack, int armorSlot); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyItem.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyItem.java new file mode 100644 index 00000000..684a19f5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyItem.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.item.ItemStack; + +/** + * Implement into a key Item class to allow @IKeyable tile entities to get + * activated while holding this item

Nothing here (yet) + */ +public interface IKeyItem +{ + + /** + * Gets the tier of this object + * + * @return - The item's tier + */ + int getTier(ItemStack stack); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyable.java new file mode 100644 index 00000000..6f3fd8a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IKeyable.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +/** + * Implement into tile entities that do something upon being activated by a key + */ +public interface IKeyable +{ + + /** + * @return -1 for any tier, or return tier required for key activated to + * pass + */ + int getTierOfKeyRequired(); + + /** + * called when key of correct tier is clicked + * + * @param key the key itemstack + * @param face the block face clicked + * @return true if something was done, false if not + */ + boolean onValidKeyActivated(EntityPlayer player, ItemStack key, EnumFacing face); + + /** + * called when player is not holding correct tier of key, or any key at all + * + * @param player + * @return true if something was done, false if not + */ + boolean onActivatedWithoutKey(EntityPlayer player, EnumFacing face); + + boolean canBreak(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IPaintable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IPaintable.java new file mode 100644 index 00000000..895f1b78 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/IPaintable.java @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.relauncher.Side; + +public interface IPaintable +{ + + int setColor(int color, EntityPlayer player, Side side); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ISensorGlassesArmor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ISensorGlassesArmor.java new file mode 100644 index 00000000..afdd370d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/ISensorGlassesArmor.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.item; + +public interface ISensorGlassesArmor +{ + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/package-info.java new file mode 100644 index 00000000..ab3136f8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/item/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|item") +package micdoodle8.mods.galacticraft.api.item; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/package-info.java new file mode 100644 index 00000000..45efc920 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI") +package micdoodle8.mods.galacticraft.api; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/EnergySource.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/EnergySource.java new file mode 100644 index 00000000..444316c5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/EnergySource.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.power; + +import java.util.List; +import net.minecraft.util.EnumFacing; + +public abstract class EnergySource +{ + + public static class EnergySourceWireless extends EnergySource + { + + public final List nodes; + + public EnergySourceWireless(List nodes) + { + this.nodes = nodes; + } + } + + public static class EnergySourceAdjacent extends EnergySource + { + + public final EnumFacing direction; + + public EnergySourceAdjacent(EnumFacing direction) + { + this.direction = direction; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyHandlerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyHandlerGC.java new file mode 100644 index 00000000..d01e330b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyHandlerGC.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.power; + +public interface IEnergyHandlerGC +{ + + /** + * Add energy from an external source + * + * @param from Energy Source that is providing power + * @param amount Maximum amount of energy to receive + * @param simulate If true, the transfer will only be simulated. + * @return The amount of energy that was successfully received (or would + * have been, if simulated). + */ + float receiveEnergyGC(EnergySource from, float amount, boolean simulate); + + /** + * Remove energy, transferring it to an external source + * + * @param from Energy Source that is extracting power + * @param amount Maximum amount of energy to extract + * @param simulate If true, the transfer will only be simulated. + * @return The amount of energy that was successfully extracted (or would + * have been, if simulated). + */ + float extractEnergyGC(EnergySource from, float amount, boolean simulate); + + /** + * Returns true if the handler can interface with the provided energy source + */ + boolean nodeAvailable(EnergySource from); + + /** + * Returns the amount of energy stored in this handler available to the + * provided source + */ + float getEnergyStoredGC(EnergySource from); + + /** + * Returns the maximum amount of energy stored in this handler available to + * the provided source + */ + float getMaxEnergyStoredGC(EnergySource from); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyStorageGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyStorageGC.java new file mode 100644 index 00000000..56be51b7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/IEnergyStorageGC.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.power; + +public interface IEnergyStorageGC +{ + + /** + * Add energy to the storage. + * + * @param amount Maximum amount of energy to receive + * @param simulate If true, the transfer will only be simulated. + * @return The amount of energy that was successfully received (or would + * have been, if simulated). + */ + float receiveEnergyGC(float amount, boolean simulate); + + /** + * Remove energy from the storage. + * + * @param amount Maximum amount of energy to extract + * @param simulate If true, the transfer will only be simulated. + * @return The amount of energy that was successfully extracted (or would + * have been, if simulated). + */ + float extractEnergyGC(float amount, boolean simulate); + + /** + * Returns the amount of energy stored + */ + float getEnergyStoredGC(); + + /** + * Returns the maximum amount of energy stored + */ + float getCapacityGC(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/ILaserNode.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/ILaserNode.java new file mode 100644 index 00000000..5302deb2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/ILaserNode.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.power; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.tileentity.TileEntity; + +public interface ILaserNode extends IEnergyHandlerGC +{ + + Vector3 getInputPoint(); + + Vector3 getOutputPoint(boolean offset); + + ILaserNode getTarget(); + + TileEntity getTile(); + + boolean canConnectTo(ILaserNode node); + + Vector3 getColor(); + + void addNode(ILaserNode node); + + void removeNode(ILaserNode node); + + int compareTo(ILaserNode otherNode, BlockVec3 origin); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/package-info.java new file mode 100644 index 00000000..beba1628 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/power/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|power") +package micdoodle8.mods.galacticraft.api.power; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/BlockMetaPair.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/BlockMetaPair.java new file mode 100644 index 00000000..232af106 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/BlockMetaPair.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.core; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; + +/** + * Do not include this prefab class in your released mod download. + */ +@Deprecated +@ForRemoval(deadline = "4.1.0") +public class BlockMetaPair +{ + + private final Block block; + private final byte metadata; + + public BlockMetaPair(Block block, byte metadata) + { + this.block = block; + this.metadata = metadata; + } + + public Block getBlock() + { + return this.block; + } + + public byte getMetadata() + { + return this.metadata; + } + + public IBlockState getBlockState() + { + return this.block.getStateFromMeta(this.metadata); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/package-info.java new file mode 100644 index 00000000..63935107 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/core/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|prefab|core") +package micdoodle8.mods.galacticraft.api.prefab.core; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityAutoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityAutoRocket.java new file mode 100644 index 00000000..49e9a595 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityAutoRocket.java @@ -0,0 +1,1481 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.entity; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ClassInheritanceMultiMap; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IEntityNoisy; +import micdoodle8.mods.galacticraft.api.entity.ILandable; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPadFull; +import micdoodle8.mods.galacticraft.core.client.sounds.SoundUpdaterRocket; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.event.EventLandingPadRemoval; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; + +import io.netty.buffer.ByteBuf; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class EntityAutoRocket extends EntitySpaceshipBase implements ILandable, IInventory, IEntityNoisy +{ + + public int destinationFrequency = -1; + public BlockPos targetVec; + public int targetDimension; + protected NonNullList stacks; + private IFuelDock landingPad; + public EnumAutoLaunch autoLaunchSetting; + public int autoLaunchCountdown; + private BlockVec3 activeLaunchController; + + public String statusMessage; + public String statusColour; + public int statusMessageCooldown; + public int lastStatusMessageCooldown; + public boolean statusValid; + protected double lastMotionY; + protected double lastLastMotionY; + private boolean waitForPlayer; + protected ITickable rocketSoundUpdater; + private boolean rocketSoundToStop = false; + private static Class controllerClass = TileEntityLaunchController.class; + + public EntityAutoRocket(World world) + { + super(world); + + if (world != null && world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + public EntityAutoRocket(World world, double posX, double posY, double posZ) + { + this(world); + this.setSize(0.98F, 2F); + this.setPosition(posX, posY, posZ); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = posX; + this.prevPosY = posY; + this.prevPosZ = posZ; + } + + // Used for Cargo Rockets, client is asking the server what is the status + public boolean checkLaunchValidity() + { + this.statusMessageCooldown = 40; + + if (this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.UNIGNITED.ordinal() && !this.world.isRemote) + { + if (!this.setFrequency()) + { + this.destinationFrequency = -1; + this.statusMessage = I18n.translateToLocal("gui.message.frequency.name") + "#" + I18n.translateToLocal("gui.message.not_set.name"); + this.statusColour = "\u00a7c"; + return false; + } + else + { + this.statusMessage = I18n.translateToLocal("gui.message.success.name"); + this.statusColour = "\u00a7a"; + return true; + } + } + } + else + { + this.destinationFrequency = -1; + this.statusMessage = I18n.translateToLocal("gui.message.not_enough.name") + "#" + I18n.translateToLocal("gui.message.fuel.name"); + this.statusColour = "\u00a7c"; + return false; + } + + this.destinationFrequency = -1; + return false; + } + + public boolean setFrequency() + { + if (this.activeLaunchController != null) + { + TileEntity launchController = this.activeLaunchController.getTileEntity(this.world); + if (controllerClass.isInstance(launchController)) + { + try + { + Boolean b = (Boolean) controllerClass.getMethod("validFrequency").invoke(launchController); + + if (b != null && b) + { + int controllerFrequency = controllerClass.getField("destFrequency").getInt(launchController); + boolean foundPad = this.setTarget(false, controllerFrequency); + + if (foundPad) + { + this.destinationFrequency = controllerFrequency; + GalacticraftCore.logger.debug("Rocket under launch control: going to target frequency " + controllerFrequency); + return true; + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + this.destinationFrequency = -1; + return false; + } + + protected boolean setTarget(boolean doSet, int destFreq) + { + WorldServer[] servers = GCCoreUtil.getWorldServerList(this.world); + for (int i = 0; i < servers.length; i++) + { + WorldServer world = servers[i]; + + try + { + for (TileEntity tile : new ArrayList<>(world.loadedTileEntityList)) + { + if (!controllerClass.isInstance(tile)) + continue; + + tile = world.getTileEntity(tile.getPos()); + if (!controllerClass.isInstance(tile)) + continue; + + int controllerFrequency = controllerClass.getField("frequency").getInt(tile); + + if (destFreq == controllerFrequency) + { + boolean targetSet = false; + + blockLoop: for (int x = -2; x <= 2; x++) + { + for (int z = -2; z <= 2; z++) + { + BlockPos pos = new BlockPos(tile.getPos().add(x, 0, z)); + Block block = world.getBlockState(pos).getBlock(); + + if (block instanceof BlockLandingPadFull) + { + if (doSet) + { + this.targetVec = pos; + } + + targetSet = true; + break blockLoop; + } + } + } + + if (doSet) + { + this.targetDimension = tile.getWorld().provider.getDimension(); + } + + if (!targetSet) + { + if (doSet) + { + this.targetVec = null; + } + + return false; + } + else + { + return true; + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + return false; + } + + @Override + public int getScaledFuelLevel(int scale) + { + if (this.getFuelTankCapacity() <= 0) + { + return 0; + } + + return this.fuelTank.getFluidAmount() * scale / this.getFuelTankCapacity() / ConfigManagerCore.rocketFuelFactor; + } + + @Override + public void onUpdate() + { + // Workaround for a weird bug (?) in vanilla 1.8.9 where - if client + // view distance is shorter + // than the server's chunk loading distance - chunks will unload on the + // client, but the + // entity will still be in the WorldClient.loadedEntityList. This + // results in an entity which + // is in the world, not dead and still updating on both server and + // client, but not in any chunk's + // chunk.entityLists. Also, it won't be reloaded into any chunk's + // entityLists when the chunk comes + // back into viewing range - not sure why, maybe because it's already in + // the World.loadedEntityList? + // Because it's now not in any chunk's entityLists, it cannot be + // iterated for rendering by RenderGlobal, + // so it's gone invisible! + + // Tracing shows that Chunk.onChunkUnload() is called on the chunk + // clientside when the chunk goes + // out of the view distance. However, even after Chunk.onChunkUnload() - + // which should remove + // this entity from the WorldClient.loadedEntityList - this entity stays + // in the world loadedEntityList. + // That's why an onUpdate() tick is active for it, still! + // Weird, huh? + if (this.world.isRemote && this.addedToChunk && !CompatibilityManager.isCubicChunksLoaded) + { + Chunk chunk = this.world.getChunk(this.chunkCoordX, this.chunkCoordZ); + int cx = MathHelper.floor(this.posX) >> 4; + int cz = MathHelper.floor(this.posZ) >> 4; + if (chunk.isLoaded() && this.chunkCoordX == cx && this.chunkCoordZ == cz) + { + boolean thisfound = false; + ClassInheritanceMultiMap mapEntities = chunk.getEntityLists()[this.chunkCoordY]; + for (Entity ent : mapEntities) + { + if (ent == this) + { + thisfound = true; + break; + } + } + if (!thisfound) + { + chunk.addEntity(this); + } + } + } + + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.hasValidFuel()) + { + if (this.targetVec != null) + { + double yDiff = this.posY - this.getOnPadYOffset() - this.targetVec.getY(); + this.motionY = Math.max(-2.0, (yDiff - 0.04) / -55.0); + + // Some lateral motion in case not exactly on target (happens if + // rocket was moving laterally during launch) + double diff = this.posX - this.targetVec.getX() - 0.5D; + double motX, motZ; + if (diff > 0D) + { + motX = Math.max(-0.1, diff / -100.0D); + } + else if (diff < 0D) + { + motX = Math.min(0.1, diff / -100.0D); + } + else + motX = 0D; + diff = this.posZ - this.targetVec.getZ() - 0.5D; + if (diff > 0D) + { + motZ = Math.max(-0.1, diff / -100.0D); + } + else if (diff < 0D) + { + motZ = Math.min(0.1, diff / -100.0D); + } + else + motZ = 0D; + if (motZ != 0D || motX != 0D) + { + double angleYaw = Math.atan(motZ / motX); + double signed = motX < 0 ? 50D : -50D; + double anglePitch = Math.atan(Math.sqrt(motZ * motZ + motX * motX) / signed) * 100D; + this.rotationYaw = (float) angleYaw * Constants.RADIANS_TO_DEGREES; + this.rotationPitch = (float) anglePitch * Constants.RADIANS_TO_DEGREES; + } + else + this.rotationPitch = 0F; + + if (yDiff > 1D && yDiff < 4D) + { + for (Object o : this.world.getEntitiesInAABBexcluding(this, this.getEntityBoundingBox().offset(0D, -3D, 0D), EntitySpaceshipBase.rocketSelector)) + { + if (o instanceof EntitySpaceshipBase) + { + ((EntitySpaceshipBase) o).dropShipAsItem(); + ((EntitySpaceshipBase) o).setDead(); + } + } + } + if (yDiff < 0.4) + { + int yMin = MathHelper.floor(this.getEntityBoundingBox().minY - this.getOnPadYOffset() - 0.45D) - 2; + int yMax = MathHelper.floor(this.getEntityBoundingBox().maxY) + 1; + int zMin = MathHelper.floor(this.posZ) - 1; + int zMax = MathHelper.floor(this.posZ) + 1; + for (int x = MathHelper.floor(this.posX) - 1; x <= MathHelper.floor(this.posX) + 1; x++) + { + for (int z = zMin; z <= zMax; z++) + { + // Doing y as the inner loop may help with cacheing + // of chunks + for (int y = yMin; y <= yMax; y++) + { + if (this.world.getTileEntity(new BlockPos(x, y, z)) instanceof IFuelDock) + { + // Land the rocket on the pad found + this.rotationPitch = 0F; + this.failRocket(); + } + } + } + } + } + } + } + + super.onUpdate(); + + if (!this.world.isRemote) + { + if (this.statusMessageCooldown > 0) + { + this.statusMessageCooldown--; + } + + if (this.statusMessageCooldown == 0 && this.lastStatusMessageCooldown > 0 && this.statusValid) + { + this.autoLaunch(); + } + + if (this.autoLaunchCountdown > 0 && (!(this instanceof EntityTieredRocket) || !this.getPassengers().isEmpty())) + { + if (--this.autoLaunchCountdown <= 0) + { + this.autoLaunch(); + } + } + + if (this.autoLaunchSetting == EnumAutoLaunch.ROCKET_IS_FUELED && this.fuelTank.getFluidAmount() == this.fuelTank.getCapacity() && (!(this instanceof EntityTieredRocket) || !this.getPassengers().isEmpty())) + { + this.autoLaunch(); + } + + if (this.autoLaunchSetting == EnumAutoLaunch.INSTANT) + { + if (this.autoLaunchCountdown == 0 && (!(this instanceof EntityTieredRocket) || !this.getPassengers().isEmpty())) + { + this.autoLaunch(); + } + } + + if (this.autoLaunchSetting == EnumAutoLaunch.REDSTONE_SIGNAL) + { + if (this.ticks % 11 == 0 && this.activeLaunchController != null) + { + if (RedstoneUtil.isBlockReceivingRedstone(this.world, this.activeLaunchController.toBlockPos())) + { + this.autoLaunch(); + } + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + this.setPad(null); + } + else + { + if (this.launchPhase == EnumLaunchPhase.UNIGNITED.ordinal() && this.landingPad != null && this.ticks % 17 == 0) + { + this.updateControllerSettings(this.landingPad); + } + } + + this.lastStatusMessageCooldown = this.statusMessageCooldown; + } + + if (this.launchPhase >= EnumLaunchPhase.IGNITED.ordinal()) + { + if (this.rocketSoundUpdater != null) + { + this.rocketSoundUpdater.update(); + this.rocketSoundToStop = true; + } + } + else + { + if (this.rocketSoundToStop) + { + this.stopRocketSound(); + if (this.rocketSoundUpdater != null) + { + FMLClientHandler.instance().getClient().getSoundHandler().stopSound((ISound) rocketSoundUpdater); + } + this.rocketSoundUpdater = null; + } + } + } + + @Override + protected boolean shouldMoveClientSide() + { + return false; + } + + // Server side only - this is a Launch Controlled ignition attempt + private void autoLaunch() + { + if (this.autoLaunchSetting != null) + { + if (this.activeLaunchController != null) + { + TileEntity tile = this.activeLaunchController.getTileEntity(this.world); + + if (controllerClass.isInstance(tile)) + { + Boolean autoLaunchEnabled = null; + try + { + autoLaunchEnabled = controllerClass.getField("controlEnabled").getBoolean(tile); + } catch (Exception e) + {} + + if (autoLaunchEnabled != null && autoLaunchEnabled) + { + if (this.fuelTank.getFluidAmount() > this.fuelTank.getCapacity() * 2 / 5) + this.ignite(); + else + this.failMessageInsufficientFuel(); + } + else + { + this.failMessageLaunchController(); + } + } + } + this.autoLaunchSetting = null; + + return; + } + else + { + this.ignite(); + } + } + + public boolean igniteWithResult() + { + if (this.setFrequency()) + { + super.ignite(); + this.activeLaunchController = null; + return true; + } + else + { + if (this.isPlayerRocket()) + { + super.ignite(); + this.activeLaunchController = null; + return true; + } + + this.activeLaunchController = null; + return false; + } + } + + @Override + public void ignite() + { + this.igniteWithResult(); + } + + public abstract boolean isPlayerRocket(); + + @Override + public void landEntity(BlockPos pos) + { + TileEntity tile = this.world.getTileEntity(pos); + + if (tile instanceof IFuelDock) + { + IFuelDock dock = (IFuelDock) tile; + + if (this.isDockValid(dock)) + { + if (!this.world.isRemote) + { + // Drop any existing rocket on the landing pad + if (dock.getDockedEntity() instanceof EntitySpaceshipBase && dock.getDockedEntity() != this) + { + ((EntitySpaceshipBase) dock.getDockedEntity()).dropShipAsItem(); + ((EntitySpaceshipBase) dock.getDockedEntity()).setDead(); + } + + this.setPad(dock); + } + + this.onRocketLand(pos); + } + } + } + + public void updateControllerSettings(IFuelDock dock) + { + HashSet connectedTiles = dock.getConnectedTiles(); + + try + { + for (ILandingPadAttachable updatedTile : connectedTiles) + { + if (controllerClass.isInstance(updatedTile)) + { + // This includes a check for whether it has enough energy to + // run (if it doesn't, then a launch would not go to the + // destination frequency and the rocket would be lost!) + Boolean autoLaunchEnabled = controllerClass.getField("controlEnabled").getBoolean(updatedTile); + + this.activeLaunchController = new BlockVec3((TileEntity) updatedTile); + + if (autoLaunchEnabled) + { + this.autoLaunchSetting = EnumAutoLaunch.values()[controllerClass.getField("launchDropdownSelection").getInt(updatedTile)]; + + switch (this.autoLaunchSetting) + { + case INSTANT: + // Small countdown to give player a moment to + // exit the Launch Controller GUI + if (this.autoLaunchCountdown <= 0 || this.autoLaunchCountdown > 12) + this.autoLaunchCountdown = 12; + break; + // The other settings set time to count down AFTER + // player mounts rocket but BEFORE engine ignition + // TODO: if autoLaunchCountdown > 0 add some smoke + // (but not flame) particle effects or other + // pre-flight test feedback so the player knows + // something is happening + case TIME_10_SECONDS: + if (this.autoLaunchCountdown <= 0 || this.autoLaunchCountdown > 200) + this.autoLaunchCountdown = 200; + break; + case TIME_30_SECONDS: + if (this.autoLaunchCountdown <= 0 || this.autoLaunchCountdown > 600) + this.autoLaunchCountdown = 600; + break; + case TIME_1_MINUTE: + if (this.autoLaunchCountdown <= 0 || this.autoLaunchCountdown > 1200) + this.autoLaunchCountdown = 1200; + break; + default: + break; + } + } + else + { + // This LaunchController is out of power, disabled, + // invalid target or set not to launch + // No auto launch - but maybe another connectedTile will + // have some launch settings? + this.autoLaunchSetting = null; + this.autoLaunchCountdown = 0; + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + protected void onRocketLand(BlockPos pos) + { + this.setPositionAndRotation(pos.getX() + 0.5, pos.getY() + 0.4D + this.getOnPadYOffset(), pos.getZ() + 0.5, this.rotationYaw, 0.0F); + this.stopRocketSound(); + if (this.rocketSoundUpdater != null) + { + FMLClientHandler.instance().getClient().getSoundHandler().stopSound((ISound) rocketSoundUpdater); + } + this.rocketSoundUpdater = null; // Allow sound to be restarted again if + // it relaunches + } + + public void stopRocketSound() + { + if (this.rocketSoundUpdater != null) + { + ((SoundUpdaterRocket) this.rocketSoundUpdater).stopRocketSound(); + } + this.rocketSoundToStop = false; + } + + @Override + public void setDead() + { + super.setDead(); + + if (this.rocketSoundUpdater != null) + { + this.rocketSoundUpdater.update(); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (!this.world.isRemote) + { + double clientPosY = buffer.readDouble(); + if (clientPosY != Double.NaN && this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.LAUNCHED.ordinal()) + { + if (clientPosY > this.posY) + { + this.motionY += (clientPosY - this.posY) / 40D; + } + } + else if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal()) + { + if (clientPosY < this.posY) + { + this.motionY += (clientPosY - this.posY) / 40D; + } + } + } + return; + } + int launchPhaseLast = this.launchPhase; + super.decodePacketdata(buffer); + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, buffer.readInt())); + boolean landingNew = buffer.readBoolean(); + if (landingNew && launchPhaseLast != EnumLaunchPhase.LANDING.ordinal()) + { + if (this.rocketSoundUpdater != null) + { + FMLClientHandler.instance().getClient().getSoundHandler().stopSound((ISound) rocketSoundUpdater); + } + this.rocketSoundUpdater = null; // Flag TickHandlerClient to restart + // it + } + this.destinationFrequency = buffer.readInt(); + + if (buffer.readBoolean()) + { + this.targetVec = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + } + + double motX = buffer.readDouble() / 8000.0D; + double motY = buffer.readDouble() / 8000.0D; + double motZ = buffer.readDouble() / 8000.0D; + double lastMotY = buffer.readDouble() / 8000.0D; + double lastLastMotY = buffer.readDouble() / 8000.0D; + + if (!this.hasValidFuel()) + { + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + this.lastMotionY = lastMotY; + this.lastLastMotionY = lastLastMotY; + } + + if (this.stacks == null) + { + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + } + + this.setWaitForPlayer(buffer.readBoolean()); + + this.statusMessage = ByteBufUtils.readUTF8String(buffer); + this.statusMessage = this.statusMessage.equals("") ? null : this.statusMessage; + this.statusMessageCooldown = buffer.readInt(); + this.lastStatusMessageCooldown = buffer.readInt(); + this.statusValid = buffer.readBoolean(); + + // Update client with correct rider if needed + if (this.world.isRemote) + { + int shouldBeMountedId = buffer.readInt(); + if (this.getPassengers().isEmpty()) + { + if (shouldBeMountedId > -1) + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + if (e.dimension != this.dimension) + { + if (e instanceof EntityPlayer) + { + e = WorldUtil.forceRespawnClient(this.dimension, e.world.getDifficulty().getId(), e.world.getWorldInfo().getTerrainType().getName(), ((EntityPlayerMP) e).interactionManager.getGameType().getID()); + e.startRiding(this); + } + } + else + e.startRiding(this); + } + } + } + else if (this.getPassengers().get(0).getEntityId() != shouldBeMountedId) + { + if (shouldBeMountedId == -1) + { + this.removePassengers(); + } + else + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + if (e.dimension != this.dimension) + { + if (e instanceof EntityPlayer) + { + e = WorldUtil.forceRespawnClient(this.dimension, e.world.getDifficulty().getId(), e.world.getWorldInfo().getTerrainType().getName(), ((EntityPlayerMP) e).interactionManager.getGameType().getID()); + e.startRiding(this); + } + } + else + e.startRiding(this); + } + } + } + } + this.statusColour = ByteBufUtils.readUTF8String(buffer); + if (this.statusColour.equals("")) + this.statusColour = null; + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + if (this.getPassengers().contains(FMLClientHandler.instance().getClientPlayerEntity()) && this.hasValidFuel()) + { + list.add(this.posY); + } + else + { + list.add(Double.NaN); + } + } + super.getNetworkedData(list); + + list.add(this.fuelTank.getFluidAmount()); + list.add(this.launchPhase == EnumLaunchPhase.LANDING.ordinal()); + list.add(this.destinationFrequency); + list.add(this.targetVec != null); + + if (this.targetVec != null) + { + list.add(this.targetVec.getX()); + list.add(this.targetVec.getY()); + list.add(this.targetVec.getZ()); + } + + list.add(this.motionX * 8000.0D); + list.add(this.motionY * 8000.0D); + list.add(this.motionZ * 8000.0D); + list.add(this.lastMotionY * 8000.0D); + list.add(this.lastLastMotionY * 8000.0D); + + list.add(this.getWaitForPlayer()); + + list.add(this.statusMessage != null ? this.statusMessage : ""); + list.add(this.statusMessageCooldown); + list.add(this.lastStatusMessageCooldown); + list.add(this.statusValid); + + if (!this.world.isRemote) + { + list.add(this.getPassengers().isEmpty() ? -1 : this.getPassengers().get(0).getEntityId()); + } + list.add(this.statusColour != null ? this.statusColour : ""); + } + + @Override + protected void failRocket() + { + this.stopRocketSound(); + + if (this.shouldCancelExplosion()) + { + // TODO: why looking around when already know the target? + // TODO: it would be good to land on an alternative neighbouring pad + // if there is already a rocket on the target pad + for (int i = -3; i <= 3; i++) + { + BlockPos pos = new BlockPos((int) Math.floor(this.posX), (int) Math.floor(this.posY + i), (int) Math.floor(this.posZ)); + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null && this.world.getTileEntity(pos) instanceof IFuelDock && this.posY - this.targetVec.getY() < 5) + { + for (int x = MathHelper.floor(this.posX) - 1; x <= MathHelper.floor(this.posX) + 1; x++) + { + for (int y = MathHelper.floor(this.posY - 3.0D); y <= MathHelper.floor(this.posY) + 1; y++) + { + for (int z = MathHelper.floor(this.posZ) - 1; z <= MathHelper.floor(this.posZ) + 1; z++) + { + BlockPos pos1 = new BlockPos(x, y, z); + TileEntity tile = this.world.getTileEntity(pos1); + + if (tile instanceof IFuelDock) + { + this.landEntity(pos1); + return; + } + } + } + } + } + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + super.failRocket(); + } + } + + protected boolean shouldCancelExplosion() + { + return this.hasValidFuel(); + } + + @Override + public boolean hasValidFuel() + { + return this.fuelTank.getFluidAmount() > 0; + } + + public void cancelLaunch() + { + this.setLaunchPhase(EnumLaunchPhase.UNIGNITED); + this.timeUntilLaunch = 0; + if (!this.world.isRemote && !this.getPassengers().isEmpty() && this.getPassengers().get(0) instanceof EntityPlayerMP) + { + this.getPassengers().get(0).sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.nogyroscope"))); + } + } + + public void failMessageLaunchController() + { + if (!this.world.isRemote && !this.getPassengers().isEmpty() && this.getPassengers().get(0) instanceof EntityPlayerMP) + { + ((EntityPlayerMP) this.getPassengers().get(0)).sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.launchcontroller"))); + } + } + + public void failMessageInsufficientFuel() + { + if (!this.world.isRemote && !this.getPassengers().isEmpty() && this.getPassengers().get(0) instanceof EntityPlayerMP) + { + ((EntityPlayerMP) this.getPassengers().get(0)).sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.fuelinsufficient"))); + } + } + + @Override + public void onLaunch() + { + if (((this.world.provider.getDimension() != GalacticraftCore.planetOverworld.getDimensionID()) && !(this.world.provider instanceof IGalacticraftWorldProvider))) + { + if (ConfigManagerCore.disableRocketLaunchAllNonGC) + { + this.cancelLaunch(); + return; + } + + // No rocket flight in the Nether, the End etc + for (int i = ConfigManagerCore.disableRocketLaunchDimensions.length - 1; i >= 0; i--) + { + if (ConfigManagerCore.disableRocketLaunchDimensions[i] == this.world.provider.getDimension()) + { + this.cancelLaunch(); + return; + } + } + + } + + super.onLaunch(); + + if (!this.world.isRemote) + { + GCPlayerStats stats = null; + + if (!this.getPassengers().isEmpty()) + { + for (Entity player : this.getPassengers()) + { + if (player instanceof EntityPlayerMP) + { + stats = GCPlayerStats.get(player); + stats.setLaunchpadStack(null); + + if (!(this.world.provider instanceof IOrbitDimension)) + { + stats.setCoordsTeleportedFromX(player.posX); + stats.setCoordsTeleportedFromZ(player.posZ); + } + } + } + + Entity playerMain = this.getPassengers().get(0); + if (playerMain instanceof EntityPlayerMP) + stats = GCPlayerStats.get(playerMain); + } + + int amountRemoved = 0; + + PADSEARCH: for (int x = MathHelper.floor(this.posX) - 1; x <= MathHelper.floor(this.posX) + 1; x++) + { + for (int y = MathHelper.floor(this.posY) - 3; y <= MathHelper.floor(this.posY) + 1; y++) + { + for (int z = MathHelper.floor(this.posZ) - 1; z <= MathHelper.floor(this.posZ) + 1; z++) + { + BlockPos pos = new BlockPos(x, y, z); + final Block block = this.world.getBlockState(pos).getBlock(); + + if (block != null && block instanceof BlockLandingPadFull) + { + if (amountRemoved < 9) + { + EventLandingPadRemoval event = new EventLandingPadRemoval(this.world, pos); + MinecraftForge.EVENT_BUS.post(event); + + if (event.allow) + { + this.world.setBlockToAir(pos); + amountRemoved = 9; + } + break PADSEARCH; + } + } + } + } + } + + // Set the player's launchpad item for return on landing - or null + // if launchpads not removed + if (stats != null && amountRemoved == 9) + { + stats.setLaunchpadStack(new ItemStack(GCBlocks.landingPad, 9, 0)); + } + + this.playSound(SoundEvents.ENTITY_ITEM_PICKUP, 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + + if (this.getSizeInventory() > 0) + { + ItemStackHelper.saveAllItems(nbt, this.stacks); + } + + nbt.setBoolean("TargetValid", this.targetVec != null); + + if (this.targetVec != null) + { + nbt.setDouble("targetTileX", this.targetVec.getX()); + nbt.setDouble("targetTileY", this.targetVec.getY()); + nbt.setDouble("targetTileZ", this.targetVec.getZ()); + } + + nbt.setBoolean("WaitingForPlayer", this.getWaitForPlayer()); + nbt.setBoolean("Landing", this.launchPhase == EnumLaunchPhase.LANDING.ordinal()); + nbt.setInteger("AutoLaunchSetting", this.autoLaunchSetting != null ? this.autoLaunchSetting.getIndex() : -1); + nbt.setInteger("TimeUntilAutoLaunch", this.autoLaunchCountdown); + nbt.setInteger("DestinationFrequency", this.destinationFrequency); + if (this.activeLaunchController != null) + this.activeLaunchController.writeToNBT(nbt, "ALCat"); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + + if (nbt.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + + if (this.getSizeInventory() > 0) + { + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.stacks); + } + + if (nbt.getBoolean("TargetValid") && nbt.hasKey("targetTileX")) + { + this.targetVec = new BlockPos(MathHelper.floor(nbt.getDouble("targetTileX")), MathHelper.floor(nbt.getDouble("targetTileY")), MathHelper.floor(nbt.getDouble("targetTileZ"))); + } + + this.setWaitForPlayer(nbt.getBoolean("WaitingForPlayer")); + int autoLaunchValue = nbt.getInteger("AutoLaunchSetting"); + this.autoLaunchSetting = autoLaunchValue == -1 ? null : EnumAutoLaunch.values()[autoLaunchValue]; + this.autoLaunchCountdown = nbt.getInteger("TimeUntilAutoLaunch"); + this.destinationFrequency = nbt.getInteger("DestinationFrequency"); + this.activeLaunchController = BlockVec3.readFromNBT(nbt, "ALCat"); + } + + @Override + public int addFuel(FluidStack liquid, boolean doFill) + { + return FluidUtil.fillWithGCFuel(this.fuelTank, liquid, doFill); + } + + @Override + public FluidStack removeFuel(int amount) + { + return this.fuelTank.drain(amount * ConfigManagerCore.rocketFuelFactor, true); + } + + @Override + public void setPad(IFuelDock pad) + { + // Called either when a rocket lands or when one is placed + // Can also be called with null param when rocket leaves a pad + this.landingPad = pad; + if (pad != null) + { + pad.dockEntity(this); + // NOTE: setPad() is called also when a world or chunk is loaded - + // if the rocket is Ignited (from NBT save data) do not change those + // settings + if ((this.launchPhase != EnumLaunchPhase.IGNITED.ordinal())) + { + this.setLaunchPhase(EnumLaunchPhase.UNIGNITED); + this.targetVec = null; + this.updateControllerSettings(pad); + } + } + } + + @Override + public IFuelDock getLandingPad() + { + return this.landingPad; + } + + @Override + public int getMaxFuel() + { + return this.fuelTank.getCapacity(); + } + + @Override + public boolean isDockValid(IFuelDock dock) + { + return (dock instanceof TileEntityLandingPad); + } + + @Override + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + if (this.getSizeInventory() <= 3) + { + if (this.autoLaunchSetting == EnumAutoLaunch.CARGO_IS_FULL) + { + this.autoLaunch(); + } + + return EnumCargoLoadingState.NOINVENTORY; + } + + int count = 0; + + for (count = 0; count < this.stacks.size() - 2; count++) + { + ItemStack stackAt = this.stacks.get(count); + + if (!stackAt.isEmpty() && stackAt.getItem() == stack.getItem() && stackAt.getItemDamage() == stack.getItemDamage() && stackAt.getCount() < stackAt.getMaxStackSize()) + { + if (stackAt.getCount() + stack.getCount() <= stackAt.getMaxStackSize()) + { + if (doAdd) + { + stackAt.grow(stack.getCount()); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + else + { + // Part of the stack can fill this slot but there will be + // some left over + int origSize = stackAt.getCount(); + int surplus = origSize + stack.getCount() - stackAt.getMaxStackSize(); + + if (doAdd) + { + stackAt.setCount(stackAt.getMaxStackSize()); + this.markDirty(); + } + + stack.setCount(surplus); + if (this.addCargo(stack, doAdd) == EnumCargoLoadingState.SUCCESS) + { + return EnumCargoLoadingState.SUCCESS; + } + + stackAt.setCount(origSize); + if (this.autoLaunchSetting == EnumAutoLaunch.CARGO_IS_FULL) + { + this.autoLaunch(); + } + return EnumCargoLoadingState.FULL; + } + } + } + + for (count = 0; count < this.stacks.size() - 2; count++) + { + ItemStack stackAt = this.stacks.get(count); + + if (stackAt.isEmpty()) + { + if (doAdd) + { + this.stacks.set(count, stack); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + } + + if (this.autoLaunchSetting == EnumAutoLaunch.CARGO_IS_FULL) + { + this.autoLaunch(); + } + + return EnumCargoLoadingState.FULL; + } + + @Override + public RemovalResult removeCargo(boolean doRemove) + { + for (int i = 0; i < this.stacks.size() - 2; i++) + { + ItemStack stackAt = this.stacks.get(i); + + if (!stackAt.isEmpty()) + { + ItemStack resultStack = stackAt.copy(); + resultStack.setCount(1); + + if (doRemove) + { + stackAt.shrink(1); + } + + if (doRemove) + { + this.markDirty(); + } + return new RemovalResult(EnumCargoLoadingState.SUCCESS, resultStack); + } + } + + if (this.autoLaunchSetting == EnumAutoLaunch.CARGO_IS_UNLOADED) + { + this.autoLaunch(); + } + + return new RemovalResult(EnumCargoLoadingState.EMPTY, ItemStack.EMPTY); + } + + @Override + public ItemStack getStackInSlot(int index) + { + if (this.stacks == null) + { + return ItemStack.EMPTY; + } + + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return !this.isDead && entityplayer.getDistanceSq(this) <= 64.0D; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public void markDirty() + {} + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + {} + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + {} + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + {} + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public void onPadDestroyed() + { + if (!this.isDead && this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal()) + { + this.dropShipAsItem(); + this.setDead(); + } + } + + @Override + public List getItemsDropped(List droppedItemList) + { + if (this.stacks != null) + { + for (final ItemStack item : this.stacks) + { + if (item != null && !item.isEmpty()) + { + droppedItemList.add(item); + } + } + } + + return droppedItemList; + } + + public boolean getWaitForPlayer() + { + return this.waitForPlayer; + } + + public void setWaitForPlayer(boolean waitForPlayer) + { + this.waitForPlayer = waitForPlayer; + } + + public static enum EnumAutoLaunch + { + + CARGO_IS_UNLOADED(0, "cargo_unloaded"), CARGO_IS_FULL(1, "cargo_full"), ROCKET_IS_FUELED(2, "fully_fueled"), INSTANT(3, "instant"), TIME_10_SECONDS(4, "ten_sec"), TIME_30_SECONDS(5, "thirty_sec"), TIME_1_MINUTE(6, "one_min"), REDSTONE_SIGNAL(7, "redstone_sig"); + + private final int index; + private String title; + + private EnumAutoLaunch(int index, String title) + { + this.index = index; + this.title = title; + } + + public int getIndex() + { + return this.index; + } + + public String getTitle() + { + return GCCoreUtil.translate("gui.message." + this.title + ".name"); + } + } + + @Override + @SideOnly(Side.CLIENT) + public ITickable getSoundUpdater() + { + return this.rocketSoundUpdater; + } + + @Override + @SideOnly(Side.CLIENT) + public ISound setSoundUpdater(EntityPlayerSP player) + { + this.rocketSoundUpdater = new SoundUpdaterRocket(player, this); + return (ISound) this.rocketSoundUpdater; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRender3d(double x, double y, double z) + { + double d0 = this.posX - x; + double d1 = this.posY - y; + double d2 = this.posZ - z; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + return d3 < Constants.RENDERDISTANCE_LONG; + } + + @Override + public boolean inFlight() + { + return this.getLaunched(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntitySpaceshipBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntitySpaceshipBase.java new file mode 100644 index 00000000..93092e75 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntitySpaceshipBase.java @@ -0,0 +1,768 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.entity; + +import com.google.common.base.Predicate; +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.entity.ITelemetry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.api.world.IExitHeight; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.advancement.GCTriggers; +import micdoodle8.mods.galacticraft.core.client.screen.GameScreenText; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class EntitySpaceshipBase extends Entity implements IPacketReceiver, IIgnoreShift, ITelemetry +{ + + public static enum EnumLaunchPhase + { + UNIGNITED, IGNITED, LAUNCHED, LANDING + } + + public int launchPhase; + + protected long ticks = 0; + protected double dragAir; + public int timeUntilLaunch; + public float timeSinceLaunch; + public float rollAmplitude; + public float shipDamage; + private ArrayList telemetryList = new ArrayList(); + private boolean addToTelemetry = false; + public FluidTank fuelTank = new FluidTank(this.getFuelTankCapacity() * ConfigManagerCore.rocketFuelFactor); + private double syncAdjustX = 0D; + private double syncAdjustY = 0D; + private double syncAdjustZ = 0D; + private boolean syncAdjustFlag = false; + + public EntitySpaceshipBase(World par1World) + { + super(par1World); + this.launchPhase = EnumLaunchPhase.UNIGNITED.ordinal(); + this.preventEntitySpawning = true; + this.ignoreFrustumCheck = true; + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 5.0; + return distance < d0 * d0; + } + + public abstract int getFuelTankCapacity(); + + public abstract int getMaxFuel(); + + public abstract int getScaledFuelLevel(int i); + + public abstract int getPreLaunchWait(); + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + protected void entityInit() + { + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return null; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + if (!this.world.isRemote && !this.isDead) + { + Entity e = par1DamageSource.getTrueSource(); + boolean flag = e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode; + if (this.isEntityInvulnerable(par1DamageSource) || this.posY > 300 || (e instanceof EntityLivingBase && !(e instanceof EntityPlayer))) + { + return false; + } else + { + this.rollAmplitude = 10; + this.markVelocityChanged(); + this.shipDamage += par2 * 10; + + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + this.shipDamage = 100; + } + + if (flag || this.shipDamage > 90 && !this.world.isRemote) + { + this.removePassengers(); + + if (flag) + { + this.setDead(); + } else + { + this.setDead(); + this.dropShipAsItem(); + } + return true; + } + + return true; + } + } else + { + return true; + } + } + + public void dropShipAsItem() + { + if (this.world.isRemote) + { + return; + } + + for (final ItemStack item : this.getItemsDropped(new ArrayList())) + { + EntityItem entityItem = this.entityDropItem(item, 0); + + if (item.hasTagCompound()) + { + entityItem.getItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); + } + } + } + + public abstract List getItemsDropped(List droppedItemList); + + @Override + public void performHurtAnimation() + { + this.rollAmplitude = 5; + this.shipDamage += this.shipDamage * 10; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public boolean shouldRiderSit() + { + return false; + } + + @Override + public void onUpdate() + { + this.ticks++; + + super.onUpdate(); + + if (this.addToTelemetry) + { + this.addToTelemetry = false; + for (BlockVec3Dim vec : new ArrayList(this.telemetryList)) + { + TileEntity t1 = vec.getTileEntityNoLoad(); + if (t1 instanceof TileEntityTelemetry && !t1.isInvalid()) + { + if (((TileEntityTelemetry) t1).linkedEntity == this) + ((TileEntityTelemetry) t1).addTrackedEntity(this); + } + } + } + + for (Entity e : this.getPassengers()) + { + e.fallDistance = 0.0F; + } + + if (this.posY > (this.world.provider instanceof IExitHeight ? ((IExitHeight) this.world.provider).getYCoordinateToTeleport() : 1200) && this.launchPhase != EnumLaunchPhase.LANDING.ordinal()) + { + this.onReachAtmosphere(); +// if (this.world.isRemote) +// this.posY = 1 + (this.world.provider instanceof IExitHeight ? ((IExitHeight) this.world.provider).getYCoordinateToTeleport() : 1200); + } + + if (this.rollAmplitude > 0) + { + this.rollAmplitude--; + } + + if (this.shipDamage > 0) + { + this.shipDamage--; + } + + if (!this.world.isRemote) + { + if (this.posY < 0.0D) + { + this.setDead(); + } else if (this.posY > (this.world.provider instanceof IExitHeight ? ((IExitHeight) this.world.provider).getYCoordinateToTeleport() : 1200) + + (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() ? 355 : 100)) + { + for (Entity e : this.getPassengers()) + { + if (e instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(e); + if (stats.isUsingPlanetSelectionGui()) + { + this.setDead(); + } + } else + this.setDead(); + } + } + + if (this.timeSinceLaunch > 50 && this.onGround) + { + this.failRocket(); + } + } + + if (this.launchPhase == EnumLaunchPhase.UNIGNITED.ordinal()) + { + this.timeUntilLaunch = this.getPreLaunchWait(); + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + this.timeSinceLaunch++; + } else + { + this.timeSinceLaunch = 0; + } + + if (this.timeUntilLaunch > 0 && this.launchPhase == EnumLaunchPhase.IGNITED.ordinal()) + { + this.timeUntilLaunch--; + } + + AxisAlignedBB box = this.getEntityBoundingBox().grow(0.2D); + + final List var15 = this.world.getEntitiesWithinAABBExcludingEntity(this, box); + + if (var15 != null && !var15.isEmpty()) + { + for (int var52 = 0; var52 < var15.size(); ++var52) + { + final Entity var17 = (Entity) var15.get(var52); + + if (this.getPassengers().contains(var17)) + { + var17.applyEntityCollision(this); + } + } + } + + if (this.timeUntilLaunch == 0 && this.launchPhase == EnumLaunchPhase.IGNITED.ordinal()) + { + this.setLaunchPhase(EnumLaunchPhase.LAUNCHED); + this.onLaunch(); + } + + if (this.rotationPitch > 90) + { + this.rotationPitch = 90; + } + + if (this.rotationPitch < -90) + { + this.rotationPitch = -90; + } + + this.motionX = -(50 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * Math.sin(this.rotationPitch * 0.01 / Constants.RADIANS_TO_DEGREES_D)); + this.motionZ = -(50 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * Math.sin(this.rotationPitch * 0.01 / Constants.RADIANS_TO_DEGREES_D)); + + if (this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal()) + { + this.motionX = this.motionY = this.motionZ = 0.0F; + } + + if (this.world.isRemote) + { + this.setPosition(this.posX, this.posY, this.posZ); + + if (this.shouldMoveClientSide()) + { + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + } else + { + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + + this.setRotation(this.rotationYaw, this.rotationPitch); + + if (this.world.isRemote) + { + this.setPosition(this.posX, this.posY, this.posZ); + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (!this.world.isRemote && this.ticks % 3 == 0) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketDynamic(this), this.world.provider.getDimension()); + // PacketDispatcher.sendPacketToAllInDimension(GCCorePacketManager.getPacket(GalacticraftCore.CHANNELENTITIES, + // this, this.getNetworkedData(new ArrayList())), + // this.world.provider.getDimension()); + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + if (getPassengers().size() >= 1) // When the screen changes to the + // map, the player is not riding + // the rocket anymore. + { + if (getPassengers().get(0) instanceof EntityPlayerMP) + { + GCTriggers.LAUNCH_ROCKET.trigger(((EntityPlayerMP) getPassengers().get(0))); + } + } + } + } + + protected boolean shouldMoveClientSide() + { + return true; + } + + public abstract boolean hasValidFuel(); + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (!this.world.isRemote) + { + new Exception().printStackTrace(); + } + int newLaunchPhase = buffer.readInt(); + if (this.launchPhase != newLaunchPhase) + { + this.setLaunchPhase(EnumLaunchPhase.values()[newLaunchPhase]); + if (newLaunchPhase == EnumLaunchPhase.LANDING.ordinal()) + { + this.syncAdjustFlag = true; + } + } else if (this.hasValidFuel()) + { + if (Math.abs(this.syncAdjustX - this.posX) > 0.2D) + this.motionX += (this.syncAdjustX - this.posX) / 40D; + if (Math.abs(this.syncAdjustY - this.posY) > 0.2D) + this.motionY += (this.syncAdjustY - this.posY) / 40D; + if (Math.abs(this.syncAdjustZ - this.posZ) > 0.2D) + this.motionZ += (this.syncAdjustZ - this.posZ) / 40D; + } + this.timeSinceLaunch = buffer.readFloat(); + this.timeUntilLaunch = buffer.readInt(); + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + return; + } + list.add(this.launchPhase); + list.add(this.timeSinceLaunch); + list.add(this.timeUntilLaunch); + } + + public void turnYaw(float f) + { + this.rotationYaw += f; + } + + public void turnPitch(float f) + { + this.rotationPitch += f; + } + + protected void failRocket() + { + for (Entity passenger : this.getPassengers()) + { + passenger.attackEntityFrom(DamageSourceGC.spaceshipCrash, (int) (4.0D * 20 + 1.0D)); + } + + if (!ConfigManagerCore.disableSpaceshipGrief) + { + this.world.createExplosion(this, this.posX, this.posY, this.posZ, 5, true); + } + + this.setDead(); + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + this.setRotation(yaw, pitch); + if (this.syncAdjustFlag && this.world.isBlockLoaded(new BlockPos(x, 255D, z)) && this.hasValidFuel()) + { + EntityPlayer p = FMLClientHandler.instance().getClientPlayerEntity(); + double dx = x - p.posX; + double dz = z - p.posZ; + if (dx * dx + dz * dz < 1024) + { + if (!this.world.loadedEntityList.contains(this)) + { + try + { + this.world.loadedEntityList.add(this); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.posX = x; + this.posY = y; + this.posZ = z; + + int cx = MathHelper.floor(x / 16.0D); + int cz = MathHelper.floor(z / 16.0D); + + if (!this.addedToChunk || this.chunkCoordX != cx || this.chunkCoordZ != cz) + { + if (this.addedToChunk && this.world.isBlockLoaded(new BlockPos(this.chunkCoordX << 4, 255, this.chunkCoordZ << 4), true)) + { + this.world.getChunk(this.chunkCoordX, this.chunkCoordZ).removeEntityAtIndex(this, this.chunkCoordY); + } + + this.addedToChunk = true; + this.world.getChunk(cx, cz).addEntity(this); + } + + this.syncAdjustX = 0D; + this.syncAdjustY = 0D; + this.syncAdjustZ = 0D; + this.syncAdjustFlag = false; + } + } else + { + this.syncAdjustX = x; + this.syncAdjustY = y; + this.syncAdjustZ = z; + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + nbt.setInteger("launchPhase", this.launchPhase + 1); + nbt.setInteger("timeUntilLaunch", this.timeUntilLaunch); + if (telemetryList.size() > 0) + { + NBTTagList teleNBTList = new NBTTagList(); + for (BlockVec3Dim vec : new ArrayList(this.telemetryList)) + { + NBTTagCompound tag = new NBTTagCompound(); + vec.writeToNBT(tag); + teleNBTList.appendTag(tag); + } + nbt.setTag("telemetryList", teleNBTList); + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.timeUntilLaunch = nbt.getInteger("timeUntilLaunch"); + + boolean hasOldTags = false; + + // Backwards compatibility: + if (nbt.getKeySet().contains("launched")) + { + hasOldTags = true; + + boolean launched = nbt.getBoolean("launched"); + + if (launched) + { + this.setLaunchPhase(EnumLaunchPhase.LAUNCHED); + } + } + + // Backwards compatibility: + if (nbt.getKeySet().contains("ignite")) + { + hasOldTags = true; + + int ignite = nbt.getInteger("ignite"); + + if (ignite == 1) + { + this.setLaunchPhase(EnumLaunchPhase.IGNITED); + } + } + + // Backwards compatibility: + if (hasOldTags) + { + if (this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal() && this.launchPhase != EnumLaunchPhase.IGNITED.ordinal()) + { + this.setLaunchPhase(EnumLaunchPhase.UNIGNITED); + } + } else + { + this.setLaunchPhase(EnumLaunchPhase.values()[nbt.getInteger("launchPhase") - 1]); + } + + // Update all Telemetry Units which are still tracking this rocket + this.telemetryList.clear(); + if (nbt.hasKey("telemetryList")) + { + NBTTagList teleNBT = nbt.getTagList("telemetryList", 10); + if (teleNBT.tagCount() > 0) + { + for (int j = teleNBT.tagCount() - 1; j >= 0; j--) + { + NBTTagCompound tag1 = teleNBT.getCompoundTagAt(j); + if (tag1 != null) + { + this.telemetryList.add(BlockVec3Dim.readFromNBT(tag1)); + } + } + this.addToTelemetry = true; + } + } + } + + public boolean getLaunched() + { + return this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal(); + } + + public boolean canBeRidden() + { + return false; + } + + public void ignite() + { + this.setLaunchPhase(EnumLaunchPhase.IGNITED); + } + + @Override + public double getMountedYOffset() + { + return -0.9D; + } + + public double getOnPadYOffset() + { + return 0D; + } + + public void onLaunch() + { + MinecraftForge.EVENT_BUS.post(new RocketLaunchEvent(this)); + } + + public void onReachAtmosphere() + { + } + + @SideOnly(Side.CLIENT) + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) + { + } + + @Override + public boolean canRiderInteract() + { + return true; + } + + public ResourceLocation getSpaceshipGui() + { + return GalacticraftRegistry.getResouceLocationForDimension(this.world.provider.getClass()); + } + + public void setLaunchPhase(EnumLaunchPhase phase) + { + this.launchPhase = phase.ordinal(); + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal(); + } + + public static class RocketLaunchEvent extends EntityEvent + { + + public final EntitySpaceshipBase rocket; + + public RocketLaunchEvent(EntitySpaceshipBase entity) + { + super(entity); + rocket = entity; + } + } + + public void addTelemetry(TileEntityTelemetry tile) + { + this.telemetryList.add(new BlockVec3Dim(tile)); + } + + public ArrayList getTelemetry() + { + ArrayList returnList = new ArrayList(); + for (BlockVec3Dim vec : new ArrayList(this.telemetryList)) + { + TileEntity t1 = vec.getTileEntity(); + if (t1 instanceof TileEntityTelemetry && !t1.isInvalid()) + { + if (((TileEntityTelemetry) t1).linkedEntity == this) + returnList.add((TileEntityTelemetry) t1); + } + } + return returnList; + } + + @Override + public void transmitData(int[] data) + { + data[0] = this.timeUntilLaunch; + data[1] = (int) this.posY; + // data[2] is entity speed already set as default by TileEntityTelemetry + data[3] = this.getScaledFuelLevel(100); + data[4] = (int) this.rotationPitch; + } + + @Override + public void receiveData(int[] data, String[] str) + { + // Spaceships: + // data0 = launch countdown + // data1 = height + // data2 = speed + // data3 = fuel remaining + // data4 = pitch angle + int countdown = data[0]; + str[0] = ""; + str[1] = (countdown == 400) ? GCCoreUtil.translate("gui.rocket.on_launchpad") + : ((countdown > 0) ? GCCoreUtil.translate("gui.rocket.countdown") + ": " + countdown / 20 : GCCoreUtil.translate("gui.rocket.launched")); + str[2] = GCCoreUtil.translate("gui.rocket.height") + ": " + data[1]; + str[3] = GameScreenText.makeSpeedString(data[2]); + str[4] = GCCoreUtil.translate("gui.message.fuel.name") + ": " + data[3] + "%"; + } + + @Override + public void adjustDisplay(int[] data) + { + GL11.glRotatef(data[4], -1, 0, 0); + GL11.glTranslatef(0, this.height / 4, 0); + } + + /** + * Used in RenderTier1Rocket for standard rendering. Ignore if using a + * custom renderer. + * + * @return Y-axis offset for rendering at correct position + */ + public float getRenderOffsetY() + { + return 1.34F; + } + + public static final Predicate rocketSelector = new Predicate() + { + + @Override + public boolean apply(Entity e) + { + return e instanceof EntitySpaceshipBase && e.isEntityAlive(); + } + }; + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double height = this.posY + (double) this.getEyeHeight(); + if (height > 255D) + height = 255D; + BlockPos blockpos = new BlockPos(this.posX, height, this.posZ); + return this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityTieredRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityTieredRocket.java new file mode 100644 index 00000000..afe7025e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/EntityTieredRocket.java @@ -0,0 +1,562 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.entity; + +import io.netty.buffer.ByteBuf; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Iterator; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.entity.IWorldTransferCallback; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IExitHeight; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class EntityTieredRocket extends EntityAutoRocket implements IRocketType, IDockable, IWorldTransferCallback, ICameraZoomEntity +{ + + public EnumRocketType rocketType; + public float rumble; + public int launchCooldown; + private ArrayList preGenList = new ArrayList<>(); + private Iterator preGenIterator = null; + static boolean preGenInProgress = false; + static Field marsConfigAllDimsAllowed; + + static + { + try + { + Class marsConfig = Class.forName("micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars"); + marsConfigAllDimsAllowed = marsConfig.getField("launchControllerAllDims"); + } catch (Exception ignore) + { + } + } + + public EntityTieredRocket(World par1World) + { + super(par1World); + this.setSize(0.98F, 4F); +// this.yOffset = this.height / 2.0F; + } + + public EntityTieredRocket(World world, double posX, double posY, double posZ) + { + super(world, posX, posY, posZ); + } + + public void igniteCheckingCooldown() + { + if (!this.world.isRemote && this.launchCooldown <= 0) + { + this.initiatePlanetsPreGen(this.chunkCoordX, this.chunkCoordZ); + + this.ignite(); + } + } + + private void initiatePlanetsPreGen(int cx, int cz) + { + this.preGenList.clear(); + + // Pre-generate terrain on all possible destination planets if the + // destination is not being controlled by a Launch Controller + // (note: this does NOT include the Moon!) + + // This generates with a chunk radius of 12: so for 2 planets that's + // 1250 chunks to pregen + // It starts at the centre and generates in circles radiating out in + // case it doesn't have time to finish + // These will be done: 2 chunks per tick during IGNITE phase (so 800 + // chunks during the 20 second launch countdown) + // then the ones that are left 1 chunk per tick during flight (normally + // flight will last more than 450 ticks) + // If the server is at less than 20tps then maybe some of the outermost + // chunks won't be pre-generated but that's probably OK + if (this.destinationFrequency == -1 && !EntityTieredRocket.preGenInProgress) + { + ArrayList toPreGen = new ArrayList<>(); + for (Planet planet : GalaxyRegistry.getRegisteredPlanets().values()) + { + if (planet.getDimensionID() == this.dimension) + { + continue; + } + if (planet.isReachable() && planet.getTierRequirement() <= this.getRocketTier() && !planet.getTranslationKey().equals("planet.asteroids")) + { + toPreGen.add(planet.getDimensionID()); + } + } + + if (toPreGen.size() > 0) + { + for (Integer dimID : toPreGen) + { + this.preGenList.add(new BlockVec3(cx, dimID, cz)); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Starting terrain pregen for dimension " + dimID + " at " + (cx * 16 + 8) + ", " + (cz * 16 + 8)); + } + } + for (int r = 1; r < 12; r++) // concentric squares with radius r + { + int xmin = cx - r; + int xmax = cx + r; + int zmin = cz - r; + int zmax = cz + r; + for (int i = -r; i < r; i++) // stop before i == r to avoid + // doing corners twice + { + for (Integer dimID : toPreGen) + { + this.preGenList.add(new BlockVec3(xmin, dimID, cz + i)); + this.preGenList.add(new BlockVec3(xmax, dimID, cz - i)); + this.preGenList.add(new BlockVec3(cx - i, dimID, zmin)); + this.preGenList.add(new BlockVec3(cx + i, dimID, zmax)); + } + } + } + this.preGenIterator = this.preGenList.iterator(); + EntityTieredRocket.preGenInProgress = true; + } + } else + { + this.preGenIterator = null; + } + } + + @Override + public void onUpdate() + { + if (this.getWaitForPlayer()) + { + if (!this.getPassengers().isEmpty()) + { + Entity passenger = this.getPassengers().get(0); + if (this.ticks >= 40) + { + if (!this.world.isRemote) + { + this.removePassengers(); + passenger.startRiding(this, true); + GalacticraftCore.logger.debug("Remounting player in rocket."); + } + + this.setWaitForPlayer(false); + this.motionY = -0.5D; + } else + { + this.motionX = this.motionY = this.motionZ = 0.0D; + passenger.motionX = passenger.motionY = passenger.motionZ = 0; + } + } else + { + this.motionX = this.motionY = this.motionZ = 0.0D; + } + } + + super.onUpdate(); + + if (!this.world.isRemote) + { + if (this.launchCooldown > 0) + { + this.launchCooldown--; + } + + if (this.preGenIterator != null) + { + if (this.preGenIterator.hasNext()) + { + MinecraftServer mcserver; + if (this.world instanceof WorldServer) + { + mcserver = ((WorldServer) this.world).getMinecraftServer(); + BlockVec3 coords = this.preGenIterator.next(); + World w = mcserver.getWorld(coords.y); + if (w != null) + { + w.getChunk(coords.x, coords.z); + // Pregen a second chunk if still on launchpad (low + // strain on server) + if (this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal() && this.preGenIterator.hasNext()) + { + coords = this.preGenIterator.next(); + w = mcserver.getWorld(coords.y); + w.getChunk(coords.x, coords.z); + } + } + } + } else + { + this.preGenIterator = null; + EntityTieredRocket.preGenInProgress = false; + } + } + } + + if (this.rumble > 0) + { + this.rumble--; + } else if (this.rumble < 0) + { + this.rumble++; + } + + final double rumbleAmount = this.rumble / (double) (37 - 5 * Math.max(this.getRocketTier(), 5)); + for (Entity passenger : this.getPassengers()) + { + passenger.posX += rumbleAmount; + passenger.posZ += rumbleAmount; + } + + if (this.launchPhase >= EnumLaunchPhase.IGNITED.ordinal()) + { + this.performHurtAnimation(); + + this.rumble = (float) this.rand.nextInt(3) - 3; + } + + if (!this.world.isRemote) + { + this.lastLastMotionY = this.lastMotionY; + this.lastMotionY = this.motionY; + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.rocketType = EnumRocketType.values()[buffer.readInt()]; + super.decodePacketdata(buffer); + + if (buffer.readBoolean()) + { + this.posX = buffer.readDouble() / 8000.0D; + this.posY = buffer.readDouble() / 8000.0D; + this.posZ = buffer.readDouble() / 8000.0D; + } + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + return; + } + list.add(this.rocketType != null ? this.rocketType.getIndex() : 0); + super.getNetworkedData(list); + + boolean sendPosUpdates = this.ticks < 25 || this.launchPhase < EnumLaunchPhase.LAUNCHED.ordinal(); + list.add(sendPosUpdates); + + if (sendPosUpdates) + { + list.add(this.posX * 8000.0D); + list.add(this.posY * 8000.0D); + list.add(this.posZ * 8000.0D); + } + } + + @Override + public void onReachAtmosphere() + { + // Launch controlled + if (this.destinationFrequency != -1) + { + if (this.world.isRemote) + { + // stop the sounds on the client - but do not reset, the rocket + // may start again + this.stopRocketSound(); + return; + } + + this.setTarget(true, this.destinationFrequency); + + if (this.targetVec != null) + { + if (this.targetDimension != this.world.provider.getDimension()) + { + WorldProvider targetDim = WorldUtil.getProviderForDimensionServer(this.targetDimension); + if (targetDim != null && targetDim.world instanceof WorldServer) + { + boolean dimensionAllowed = this.targetDimension == ConfigManagerCore.idDimensionOverworld; + + if (targetDim instanceof IGalacticraftWorldProvider) + { + if (((IGalacticraftWorldProvider) targetDim).canSpaceshipTierPass(this.getRocketTier())) + dimensionAllowed = true; + else + dimensionAllowed = false; + } else + // No rocket flight to non-Galacticraft dimensions other + // than the Overworld allowed unless config + if ((this.targetDimension > 1 || this.targetDimension < -1) && marsConfigAllDimsAllowed != null) + { + try + { + if (marsConfigAllDimsAllowed.getBoolean(null)) + { + dimensionAllowed = true; + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + if (dimensionAllowed) + { + if (!this.getPassengers().isEmpty()) + { + for (Entity passenger : this.getPassengers()) + { + if (passenger instanceof EntityPlayerMP) + { + WorldUtil.transferEntityToDimension(passenger, this.targetDimension, (WorldServer) targetDim.world, false, this); + } + } + } else + { + Entity e = WorldUtil.transferEntityToDimension(this, this.targetDimension, (WorldServer) targetDim.world, false, null); + if (e instanceof EntityAutoRocket) + { + e.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5f); + ((EntityAutoRocket) e).setLaunchPhase(EnumLaunchPhase.LANDING); + ((EntityAutoRocket) e).setWaitForPlayer(false); + } else + { + GalacticraftCore.logger.info("Error: failed to recreate the unmanned rocket in landing mode on target planet."); + e.setDead(); + this.setDead(); + } + } + return; + } + } + // No destination world found - in this situation continue + // into regular take-off (as if Not launch controlled) + } else + { + // Same dimension controlled rocket flight + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + // Stop any lateral motion, otherwise it will update to an + // incorrect x,z position first tick after spawning above + // target + this.motionX = this.motionZ = 0.0D; + // Small upward motion initially, to keep clear of own flame + // trail from launch + this.motionY = 0.1D; + for (Entity passenger : this.getPassengers()) + { + if (passenger instanceof EntityPlayerMP) + { + WorldUtil.forceMoveEntityToPos(passenger, (WorldServer) this.world, new Vector3(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F), + false); + this.setWaitForPlayer(true); + GalacticraftCore.logger.debug("Rocket repositioned, waiting for player"); + } + } + this.setLaunchPhase(EnumLaunchPhase.LANDING); + // Do not destroy the rocket, we still need it! + return; + } + } else + { + // Launch controlled launch but no valid target frequency = + // rocket loss [INVESTIGATE] + GalacticraftCore.logger.info("Error: the launch controlled rocket failed to find a valid landing spot when it reached space."); + this.fuelTank.drain(Integer.MAX_VALUE, true); + this.posY = Math.max(255, (this.world.provider instanceof IExitHeight ? ((IExitHeight) this.world.provider).getYCoordinateToTeleport() : 1200) - 200); + return; + } + } + + // Not launch controlled + if (!this.world.isRemote) + { + for (Entity e : this.getPassengers()) + { + if (e instanceof EntityPlayerMP) + { + EntityPlayerMP player = (EntityPlayerMP) e; + + this.onTeleport(player); + GCPlayerStats stats = GCPlayerStats.get(player); + WorldUtil.toCelestialSelection(player, stats, this.getRocketTier()); + } + } + + // Destroy any rocket which reached the top of the atmosphere and is + // not controlled by a Launch Controller + this.setDead(); + } + + // Client side, non-launch controlled, do nothing - no reason why it + // can't continue flying until the GUICelestialSelection activates + } + + @Override + protected boolean shouldCancelExplosion() + { + return this.hasValidFuel() && Math.abs(this.lastLastMotionY) < 4; + } + + public void onTeleport(EntityPlayerMP player) + { + } + + @Override + protected void onRocketLand(BlockPos pos) + { + super.onRocketLand(pos); + this.launchCooldown = 40; + } + + @Override + public void onLaunch() + { + super.onLaunch(); + } + + @Override + protected boolean shouldMoveClientSide() + { + return true; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (hand != EnumHand.MAIN_HAND) + { + return false; + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal()) + { + return false; + } + + if (!this.getPassengers().isEmpty() && this.getPassengers().contains(player)) + { + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, this.world.provider.getDimension(), new Object[] + {}), (EntityPlayerMP) player); + GCPlayerStats stats = GCPlayerStats.get(player); + stats.setChatCooldown(0); + // Prevent player being dropped from the top of the rocket... + float heightBefore = this.height; + this.height = this.height / 2.0F; + this.removePassengers(); + this.height = heightBefore; + } + + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_DISPLAY_ROCKET_CONTROLS, this.world.provider.getDimension(), new Object[] + {}), (EntityPlayerMP) player); + GCPlayerStats stats = GCPlayerStats.get(player); + stats.setChatCooldown(0); + player.startRiding(this); + } + + return true; + } + + return false; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("Type", this.rocketType.getIndex()); + super.writeEntityToNBT(nbt); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.rocketType = EnumRocketType.values()[nbt.getInteger("Type")]; + super.readEntityFromNBT(nbt); + } + + @Override + public EnumRocketType getType() + { + return this.rocketType; + } + + @Override + public int getSizeInventory() + { + if (this.rocketType == null) + return 2; + return this.rocketType.getInventorySpace(); + } + + @Override + public void onWorldTransferred(World world) + { + if (this.targetVec != null) + { + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + this.setLaunchPhase(EnumLaunchPhase.LANDING); + this.setWaitForPlayer(true); + this.motionX = this.motionY = this.motionZ = 0.0D; + } else + { + this.setDead(); + } + } + + @Override + public float getRotateOffset() + { + return -1.5F; + } + + @Override + public boolean isPlayerRocket() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/package-info.java new file mode 100644 index 00000000..159116f7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/entity/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|prefab|entity") +package micdoodle8.mods.galacticraft.api.prefab.entity; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/package-info.java new file mode 100644 index 00000000..ebe9ecb2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|prefab") +package micdoodle8.mods.galacticraft.api.prefab; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeAdaptive.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeAdaptive.java new file mode 100644 index 00000000..bbed65f6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeAdaptive.java @@ -0,0 +1,389 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.gen.feature.WorldGenAbstractTree; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.BiomeDictionary; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BiomeAdaptive extends BiomeGenBaseGC +{ + + public static BiomeAdaptive biomeDefault; + public static List biomeList = new LinkedList<>(); + private Biome biomeTrue; + private final int index; + private boolean loggedConflict; + + public BiomeAdaptive(int i, Biome biomeInitial) + { + super(BiomeData.builder().biomeName("Outer Space" + (i == 0 ? "" : " " + i)).build()); + this.index = i; + this.biomeTrue = biomeInitial; + this.decorator = this.createBiomeDecorator(); + if (index == 0) + { + biomeDefault = this; + } + } + + @Override + public void registerTypes(Biome b) + { + if (this.biomeTrue instanceof BiomeGenBaseGC) + { + ((BiomeGenBaseGC) this.biomeTrue).registerTypes(this); + } else + { + BiomeDictionary.addTypes(this, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SPARSE, BiomeDictionary.Type.SPOOKY); + } + } + + public static BiomeGenBaseGC register(int index, BiomeGenBaseGC biome) + { + if (index >= biomeList.size()) + { + BiomeAdaptive newAdaptive = new BiomeAdaptive(index, biome); + biomeList.add(newAdaptive); + return newAdaptive; + } + return biomeList.get(index); + } + + public static BiomeGenBaseGC getDefaultBiomeFor(CelestialBody body) + { + return body.biomesToAdapt[0]; + } + + public static void setBody(CelestialBody body) + { + biomeDefault.setBodyInstance(body); + } + + public boolean isInstance(Class clazz) + { + return clazz.isInstance(this.biomeTrue); + } + + /** + * Be sure to call this from your BiomeProvider in:
-- getBiome(BlockPos + * pos, Biome defaultBiome)
-- getBiomesForGeneration(Biome[] biomes, + * int x, int z, int length, int width)
-- getBiomes(@Nullable Biome[] + * oldBiomeList, int x, int z, int width, int depth)
-- + * getBiomes(@Nullable Biome[] listToReuse, int x, int z, int width, int + * length, boolean cacheFlag)
also from your WorldProvider in:
-- + * getBiomeProviderClass()

See BiomeProviderVenus for an example. + */ + public static void setBodyMultiBiome(CelestialBody body) + { + for (BiomeAdaptive b : biomeList) + { + if (b.setBodyInstance(body)) + break; + } + } + + /** + * @param body + * @return true if end of list + */ + protected boolean setBodyInstance(CelestialBody body) + { + this.biomeTrue = body.biomesToAdapt[this.index]; + this.fillerBlock = this.biomeTrue.fillerBlock; + this.topBlock = this.biomeTrue.topBlock; + this.decorator = this.biomeTrue.decorator; + return this.index == body.biomesToAdapt.length - 1; + } + + public static List getBiomesListFor(CelestialBody body) + { + List result = new LinkedList<>(); + for (BiomeAdaptive b : biomeList) + { + if (result.size() >= body.biomesToAdapt.length) + { + break; + } + + result.add(b); + } + return result; + } + + // =========================================================================== + // ===============Pass through all Biome methods to the true + // biome============ + // =========================================================================== + + @Override + public BiomeDecorator createBiomeDecorator() + { + return biomeTrue == null ? null : biomeTrue.createBiomeDecorator(); + } + + @Override + public boolean isMutation() + { + return biomeTrue.isMutation(); + } + + @Override + public WorldGenAbstractTree getRandomTreeFeature(Random rand) + { + return biomeTrue.getRandomTreeFeature(rand); + } + + @Override + public WorldGenerator getRandomWorldGenForGrass(Random rand) + { + return biomeTrue.getRandomWorldGenForGrass(rand); + } + + @Override + public BlockFlower.EnumFlowerType pickRandomFlower(Random rand, BlockPos pos) + { + return biomeTrue.pickRandomFlower(rand, pos); + } + + @Override + @SideOnly(Side.CLIENT) + public int getSkyColorByTemp(float currentTemperature) + { + return biomeTrue.getSkyColorByTemp(currentTemperature); + } + + @Override + public List getSpawnableList(EnumCreatureType creatureType) + { + return biomeTrue.getSpawnableList(creatureType); + } + + @Override + public boolean getEnableSnow() + { + return biomeTrue.getEnableSnow(); + } + + @Override + public boolean canRain() + { + return biomeTrue.canRain(); + } + + @Override + public boolean isHighHumidity() + { + return biomeTrue.isHighHumidity(); + } + + @Override + public float getSpawningChance() + { + return biomeTrue.getSpawningChance(); + } + + @Override + public float getTemperature(BlockPos pos) + { + return biomeTrue.getTemperature(pos); + } + + @Override + public void decorate(World worldIn, Random rand, BlockPos pos) + { + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + this.setBodyInstance(((IGalacticraftWorldProvider) worldIn.provider).getCelestialBody()); + } else + { + reportBiomeIDconflict(); + } + biomeTrue.decorate(worldIn, rand, pos); + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal) + { + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + this.setBodyInstance(((IGalacticraftWorldProvider) worldIn.provider).getCelestialBody()); + } else + { + reportBiomeIDconflict(); + } + biomeTrue.genTerrainBlocks(worldIn, rand, chunkPrimerIn, x, z, noiseVal); + } + + @Override + @SideOnly(Side.CLIENT) + public int getGrassColorAtPos(BlockPos pos) + { + return biomeTrue.getGrassColorAtPos(pos); + } + + @Override + public final void generateBiomeTerrain(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal) + { + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + this.setBodyInstance(((IGalacticraftWorldProvider) worldIn.provider).getCelestialBody()); + } else + { + reportBiomeIDconflict(); + } + biomeTrue.generateBiomeTerrain(worldIn, rand, chunkPrimerIn, x, z, noiseVal); + } + + @Override + @SideOnly(Side.CLIENT) + public int getFoliageColorAtPos(BlockPos pos) + { + return biomeTrue.getFoliageColorAtPos(pos); + } + + @Override + public Class getBiomeClass() + { + return biomeTrue.getBiomeClass(); + } + + @Override + public Biome.TempCategory getTempCategory() + { + return biomeTrue.getTempCategory(); + } + + @Override + public boolean ignorePlayerSpawnSuitability() + { + return biomeTrue.ignorePlayerSpawnSuitability(); + } + + @Override + public float getBaseHeight() + { + return biomeTrue == null ? 0.0F : biomeTrue.getBaseHeight(); + } + + @Override + public float getRainfall() + { + return biomeTrue.getRainfall(); + } + + @Override + @SideOnly(Side.CLIENT) + public String getBiomeName() + { + return biomeTrue.getBiomeName(); + } + + @Override + public float getHeightVariation() + { + return biomeTrue.getHeightVariation(); + } + + @Override + public float getDefaultTemperature() + { + return biomeTrue.getDefaultTemperature(); + } + + @Override + @SideOnly(Side.CLIENT) + public int getWaterColor() + { + return biomeTrue.getWaterColor(); + } + + @Override + public boolean isSnowyBiome() + { + return biomeTrue.isSnowyBiome(); + } + + @Override + public BiomeDecorator getModdedBiomeDecorator(BiomeDecorator original) + { + return biomeTrue.getModdedBiomeDecorator(original); + } + + @Override + public int getWaterColorMultiplier() + { + return biomeTrue.getWaterColorMultiplier(); + } + + @Override + public int getModdedBiomeGrassColor(int original) + { + return biomeTrue.getModdedBiomeGrassColor(original); + } + + @Override + public int getModdedBiomeFoliageColor(int original) + { + return biomeTrue.getModdedBiomeFoliageColor(original); + } + + @Override + public void addDefaultFlowers() + { + if (biomeTrue != null) + biomeTrue.addDefaultFlowers(); + } + + @Override + public void addFlower(IBlockState state, int weight) + { + biomeTrue.addFlower(state, weight); + } + + @Override + public void plantFlower(World world, Random rand, BlockPos pos) + { + if (world.provider instanceof IGalacticraftWorldProvider) + { + this.setBodyInstance(((IGalacticraftWorldProvider) world.provider).getCelestialBody()); + } else + { + reportBiomeIDconflict(); + } + biomeTrue.plantFlower(world, rand, pos); + } + + private void reportBiomeIDconflict() + { + if (this.loggedConflict) + return; + this.loggedConflict = true; + GalacticraftCore.logger.error("POTENTIAL BIOME ID CONFLICT for id " + Biome.getIdForBiome(this) + " conflicting with Galacticraft"); + GalacticraftCore.logger.error("PLEASE CHECK CONFIGS FOR BOTH MODS: see Galacticraft core.conf setting BiomeIDBase"); + Thread.dumpStack(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeDecoratorSpace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeDecoratorSpace.java new file mode 100644 index 00000000..d492e84a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeDecoratorSpace.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.MinecraftForge; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class BiomeDecoratorSpace +{ + + protected Random rand; + + protected int posX; + protected int posZ; + + /** + * Note: the passed X,Z co-ordinates are now block co-ordinates, not chunk + * co-ordinates + * + * @param world + * @param random + * @param posX + * @param posZ + */ + public void decorate(World world, Random random, int posX, int posZ) + { + if (this.getCurrentWorld() != null) + { + throw new RuntimeException("Already decorating!!"); + } else + { + this.setCurrentWorld(world); + this.rand = random; + this.posX = posX; + this.posZ = posZ; + BlockPos pos = new BlockPos(this.posX, 0, this.posZ); + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Pre(world, this.rand, pos)); + this.decorate(); + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Post(world, this.rand, pos)); + this.setCurrentWorld(null); + this.rand = null; + } + } + + protected abstract void setCurrentWorld(World world); + + protected abstract World getCurrentWorld(); + + protected void generateOre(int amountPerChunk, WorldGenerator worldGenerator, int minY, int maxY) + { + World currentWorld = this.getCurrentWorld(); + for (int var5 = 0; var5 < amountPerChunk; ++var5) + { + final int var6 = this.posX + this.rand.nextInt(16); + final int var7 = this.rand.nextInt(maxY - minY) + minY; + final int var8 = this.posZ + this.rand.nextInt(16); + worldGenerator.generate(currentWorld, this.rand, new BlockPos(var6, var7, var8)); + } + } + + protected abstract void decorate(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderDefault.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderDefault.java new file mode 100644 index 00000000..17673594 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderDefault.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.layer.IntCache; + +/** + * A Biome Provider for Galacticraft planets (and other bodies!) which only have + * 1 biome + * + * Makes use of Galacticraft's BiomeAdaptive so that only one Biome is + * registered in Forge (this BiomeProvider in combination with BiomeAdaptive + * makes sure the correct actual biome is seen) + */ +public class BiomeProviderDefault extends BiomeProviderSpace +{ + + private static final Biome[] biomeCache = new Biome[256]; + private final List biomesToSpawnIn; + + private BiomeGenBaseGC biomeTrue; + private CelestialBody body; + + static + { + for (int i = 0; i < 16; ++i) + { + biomeCache[i] = BiomeAdaptive.biomeDefault; + } + System.arraycopy(biomeCache, 0, biomeCache, 16, 16); + System.arraycopy(biomeCache, 0, biomeCache, 32, 32); + System.arraycopy(biomeCache, 0, biomeCache, 64, 64); + System.arraycopy(biomeCache, 0, biomeCache, 128, 128); + } + + public BiomeProviderDefault(CelestialBody theBody) + { + body = theBody; + biomeTrue = BiomeAdaptive.getDefaultBiomeFor(body); + this.biomesToSpawnIn = new ArrayList(); + this.biomesToSpawnIn.add(this.getBiome()); + } + + @Override + public Biome getBiome() + { + if (body != null) + BiomeAdaptive.setBody(body); + return BiomeAdaptive.biomeDefault; + } + + public Biome getBiomeTrue() + { + return biomeTrue; + } + + @Override + public List getBiomesToSpawnIn() + { + return this.biomesToSpawnIn; + } + + @Override + public Biome getBiome(BlockPos pos, Biome defaultBiome) + { + return this.getBiome(); + } + + @Override + public float getTemperatureAtHeight(float par1, int par2) + { + return par1; + } + + @Override + public Biome[] getBiomesForGeneration(Biome[] arrayToReuse, int x, int z, int width, int length) + { + return this.getBiomes(arrayToReuse, x, z, width, length, true); + } + + @Override + public Biome[] getBiomes(Biome[] par1ArrayOfBiome, int par2, int par3, int par4, int par5) + { + return this.getBiomes(par1ArrayOfBiome, par2, par3, par4, par5, true); + } + + @Override + public Biome[] getBiomes(Biome[] listToReuse, int x, int z, int width, int length, boolean cacheFlag) + { + BiomeAdaptive.setBody(body); + IntCache.resetIntCache(); + int size = width * length; + + if (listToReuse == null || listToReuse.length < size) + { + listToReuse = new Biome[size]; + } + + if (size <= 256) + { + System.arraycopy(biomeCache, 0, listToReuse, 0, size); + } else + { + System.arraycopy(biomeCache, 0, listToReuse, 0, 256); + for (int i = 256; i < size; i += i) + { + System.arraycopy(listToReuse, 0, listToReuse, i, ((size - i) < i) ? (size - i) : i); + } + } + + return listToReuse; + } + + @SuppressWarnings("rawtypes") + @Override + public boolean areBiomesViable(int par1, int par2, int par3, List par4List) + { + return par4List.contains(this.getBiomeTrue()); + } + + @SuppressWarnings("rawtypes") + @Override + public BlockPos findBiomePosition(int par1, int par2, int par3, List par4List, Random par5Random) + { + final int var6 = par1 - par3 >> 2; + final int var7 = par2 - par3 >> 2; + final int var8 = par1 + par3 >> 2; + final int var10 = var8 - var6 + 1; + + final int var16 = var6 + 0 % var10 << 2; + final int var17 = var7 + 0 / var10 << 2; + + return new BlockPos(var16, 0, var17); + } + + @Override + public void cleanupCache() + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderSpace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderSpace.java new file mode 100644 index 00000000..7289ea4f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/BiomeProviderSpace.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeCache; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.layer.IntCache; + +/** + * Do not include this prefab class in your released mod download.

This + * chunk manager is used for single-biome dimensions, which is common on basic + * planets. + */ +public abstract class BiomeProviderSpace extends BiomeProvider +{ + + private final BiomeCache biomeCache; + private final List biomesToSpawnIn; + + public BiomeProviderSpace() + { + this.biomeCache = new BiomeCache(this); + this.biomesToSpawnIn = new ArrayList(); + this.biomesToSpawnIn.add(this.getBiome()); + } + + @Override + public List getBiomesToSpawnIn() + { + return this.biomesToSpawnIn; + } + + @Override + public Biome getBiome(BlockPos pos, Biome defaultBiome) + { + return this.getBiome(); + } + + @Override + public float getTemperatureAtHeight(float temp, int height) + { + return temp; + } + + @Override + public Biome[] getBiomesForGeneration(Biome[] biomes, int x, int z, int width, int height) + { + IntCache.resetIntCache(); + + if (biomes == null || biomes.length < width * height) + { + biomes = new Biome[width * height]; + } + + for (int var7 = 0; var7 < width * height; ++var7) + { + biomes[var7] = this.getBiome(); + } + + return biomes; + } + + @Override + public Biome[] getBiomes(@Nullable Biome[] oldBiomeList, int x, int z, int width, int depth) + { + return this.getBiomes(oldBiomeList, x, z, width, depth, true); + } + + @Override + public Biome[] getBiomes(Biome[] listToReuse, int x, int z, int width, int length, boolean cacheFlag) + { + IntCache.resetIntCache(); + + if (listToReuse == null || listToReuse.length < width * length) + { + listToReuse = new Biome[width * length]; + } + + if (cacheFlag && width == 16 && length == 16 && (x & 15) == 0 && (z & 15) == 0) + { + final Biome[] var9 = this.biomeCache.getCachedBiomes(x, z); + System.arraycopy(var9, 0, listToReuse, 0, width * length); + return listToReuse; + } else + { + for (int var8 = 0; var8 < width * length; ++var8) + { + listToReuse[var8] = this.getBiome(); + } + + return listToReuse; + } + } + + @Override + public boolean areBiomesViable(int x, int z, int radius, List allowed) + { + return allowed.contains(this.getBiome()); + } + + @Override + public BlockPos findBiomePosition(int x, int z, int range, List biomes, Random random) + { + final int i = x - range >> 2; + final int j = z - range >> 2; + final int k = x + range >> 2; + final int l = k - i + 1; + + final int i1 = i + 0 % l << 2; + final int j1 = j + 0 / l << 2; + + return new BlockPos(i1, 0, j1); + } + + @Override + public void cleanupCache() + { + this.biomeCache.cleanupCache(); + } + + public abstract Biome getBiome(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/ChunkProviderSpace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/ChunkProviderSpace.java new file mode 100644 index 00000000..68ff1e17 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/ChunkProviderSpace.java @@ -0,0 +1,436 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFalling; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; + +import net.minecraftforge.event.ForgeEventFactory; + +import micdoodle8.mods.galacticraft.api.prefab.core.BlockMetaPair; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.perlin.generator.GradientNoise; +import micdoodle8.mods.galacticraft.core.world.gen.EnumCraterSize; + +/** + * Do not include this prefab class in your released mod download. + */ +public abstract class ChunkProviderSpace extends ChunkProviderBase +{ + + protected final Random rand; + + private final GradientNoise noiseGen1; + private final GradientNoise noiseGen2; + private final GradientNoise noiseGen3; + private final GradientNoise noiseGen4; + private final GradientNoise noiseGen5; + private final GradientNoise noiseGen6; + private final GradientNoise noiseGen7; + + protected final World world; + + private Biome[] biomesForGeneration = this.getBiomesForGeneration(); + + private final double TERRAIN_HEIGHT_MOD = this.getHeightModifier(); + private final double SMALL_FEATURE_HEIGHT_MOD = this.getSmallFeatureHeightModifier(); + private final double MOUNTAIN_HEIGHT_MOD = this.getMountainHeightModifier(); + private final double VALLEY_HEIGHT_MOD = this.getValleyHeightModifier(); + private final int CRATER_PROB = this.getCraterProbability(); + + // DO NOT CHANGE + private final int MID_HEIGHT = this.getSeaLevel(); + private static final int CHUNK_SIZE = 16; + private static final double MAIN_FEATURE_FILTER_MOD = 4; + private static final double LARGE_FEATURE_FILTER_MOD = 8; + private static final double SMALL_FEATURE_FILTER_MOD = 8; + + private List worldGenerators; + + + + public ChunkProviderSpace(World world, long seed, boolean mapFeaturesEnabled) + { + this.world = world; + this.rand = new Random(seed); + this.noiseGen1 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen2 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen3 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen4 = new GradientNoise(this.rand.nextLong(), 2, 0.25D); + this.noiseGen5 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + this.noiseGen6 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + this.noiseGen7 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + } + + public void generateTerrain(int chunkX, int chunkZ, ChunkPrimer primer) + { + this.noiseGen1.setFrequencyAll(0.014999999664723873D); + this.noiseGen2.setFrequencyAll(0.0030000000474999913D); + this.noiseGen3.setFrequencyAll(0.01D); + this.noiseGen4.setFrequencyAll(0.01D); + this.noiseGen5.setFrequencyAll(0.01D); + this.noiseGen6.setFrequencyAll(0.0010000000474974513D); + this.noiseGen7.setFrequencyAll(0.004999999888241291D); + + for (int x = 0; x < CHUNK_SIZE; x++) + { + for (int z = 0; z < CHUNK_SIZE; z++) + { + final double baseHeight = this.noiseGen1.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * this.TERRAIN_HEIGHT_MOD; + final double smallHillHeight = this.noiseGen2.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * this.SMALL_FEATURE_HEIGHT_MOD; + double mountainHeight = Math.abs(this.noiseGen3.evalNoise(chunkX * 16 + x, chunkZ * 16 + z)); + double valleyHeight = Math.abs(this.noiseGen4.evalNoise(chunkX * 16 + x, chunkZ * 16 + z)); + final double featureFilter = this.noiseGen5.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * MAIN_FEATURE_FILTER_MOD; + final double largeFilter = this.noiseGen6.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * LARGE_FEATURE_FILTER_MOD; + final double smallFilter = this.noiseGen7.evalNoise(chunkX * 16 + x, chunkZ * 16 + z) * SMALL_FEATURE_FILTER_MOD - 0.5; + mountainHeight = this.lerp(smallHillHeight, mountainHeight * this.MOUNTAIN_HEIGHT_MOD, this.fade(this.clamp(mountainHeight * 2, 0, 1))); + valleyHeight = this.lerp(smallHillHeight, valleyHeight * this.VALLEY_HEIGHT_MOD - this.VALLEY_HEIGHT_MOD + 9, this.fade(this.clamp((valleyHeight + 2) * 4, 0, 1))); + + double yDev = this.lerp(valleyHeight, mountainHeight, this.fade(largeFilter)); + yDev = this.lerp(smallHillHeight, yDev, smallFilter); + yDev = this.lerp(baseHeight, yDev, featureFilter); + + for (int y = 0; y < 255; y++) + { + if (y < this.MID_HEIGHT + yDev) + { + primer.setBlockState(x, y, z, this.getStoneBlock().getBlock().getStateFromMeta(this.getStoneBlock().getMetadata())); + } + } + } + } + } + + private double lerp(double d1, double d2, double t) + { + if (t < 0.0) + { + return d1; + } + if (t > 1.0) + { + return d2; + } else + { + return d1 + (d2 - d1) * t; + } + } + + private double fade(double n) + { + return n * n * n * (n * (n * 6 - 15) + 10); + } + + private double clamp(double x, double min, double max) + { + if (x < min) + { + return min; + } + if (x > max) + { + return max; + } + return x; + } + + public void replaceBiomeBlocks(int x, int z, ChunkPrimer primer, Biome[] biomesIn) + { + final int var5 = 20; + this.noiseGen4.setFrequencyAll(0.0625D); + for (int var8 = 0; var8 < 16; ++var8) + { + for (int var9 = 0; var9 < 16; ++var9) + { + final int var12 = (int) (this.noiseGen4.evalNoise(x * 16 + var8, z * 16 + var9) / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D); + int var13 = -1; + Block var14 = this.getGrassBlock().getBlock(); + byte var14m = this.getGrassBlock().getMetadata(); + Block var15 = this.getDirtBlock().getBlock(); + byte var15m = this.getDirtBlock().getMetadata(); + + for (int var16 = 255 - 1; var16 >= 0; --var16) + { + if (var16 <= 0 + this.rand.nextInt(5)) + { + primer.setBlockState(var8, var16, var9, Blocks.BEDROCK.getDefaultState()); + } else + { + Block var18 = primer.getBlockState(var8, var16, var9).getBlock(); + + if (Blocks.AIR == var18) + { + var13 = -1; + } else if (var18 == this.getStoneBlock().getBlock()) + { + + if (var13 == -1) + { + if (var12 <= 0) + { + var14 = Blocks.AIR; + var14m = 0; + var15 = this.getStoneBlock().getBlock(); + var15m = this.getStoneBlock().getMetadata(); + } else if (var16 >= var5 - -16 && var16 <= var5 + 1) + { + var14 = this.getGrassBlock().getBlock(); + var14m = this.getGrassBlock().getMetadata(); + var14 = this.getDirtBlock().getBlock(); + var14m = this.getDirtBlock().getMetadata(); + } + + var13 = var12; + + if (var16 >= var5 - 1) + { + primer.setBlockState(var8, var16, var9, var14.getStateFromMeta(var14m)); + } else + { + primer.setBlockState(var8, var16, var9, var15.getStateFromMeta(var15m)); + } + } else if (var13 > 0) + { + --var13; + primer.setBlockState(var8, var16, var9, var15.getStateFromMeta(var15m)); + } + } + } + } + } + } + } + + @Override + public Chunk generateChunk(int x, int z) + { + ChunkPrimer primer = new ChunkPrimer(); + try + { + this.rand.setSeed(x * 341873128712L + z * 132897987541L); + this.generateTerrain(x, z, primer); + this.createCraters(x, z, primer); + this.biomesForGeneration = this.world.getBiomeProvider().getBiomes(this.biomesForGeneration, x * 16, z * 16, 16, 16); + this.replaceBiomeBlocks(x, z, primer, this.biomesForGeneration); + + if (this.worldGenerators == null) + { + this.worldGenerators = this.getWorldGenerators(); + } + + for (MapGenBaseMeta generator : this.worldGenerators) + { + generator.generate(this.world, x, z, primer); + } + + this.onChunkProvide(x, z, primer); + } catch (Exception e) + { + GalacticraftCore.logger.error("Error caught in planetary worldgen at coords " + x + "," + z + ". If the next 2 lines are showing an Add-On mod name, please report to that mod's author!"); + e.printStackTrace(); + } + + final Chunk var4 = new Chunk(this.world, primer, x, z); + final byte[] var5 = var4.getBiomeArray(); + + for (int var6 = 0; var6 < var5.length; ++var6) + { + var5[var6] = (byte) Biome.getIdForBiome(this.biomesForGeneration[var6]); + } + + var4.generateSkylightMap(); + return var4; + } + + public void createCraters(int chunkX, int chunkZ, ChunkPrimer primer) + { + this.noiseGen5.setFrequencyAll(0.014999999664723873D); + for (int cx = chunkX - 2; cx <= chunkX + 2; cx++) + { + for (int cz = chunkZ - 2; cz <= chunkZ + 2; cz++) + { + for (int x = 0; x < CHUNK_SIZE; x++) + { + for (int z = 0; z < CHUNK_SIZE; z++) + { + if (Math.abs(this.randFromPoint(cx * 16 + x, (cz * 16 + z) * 1000)) < this.noiseGen5.evalNoise(cx * 16 + x, cz * 16 + z) / this.CRATER_PROB) + { + final Random random = new Random(cx * 16 + x + (cz * 16 + z) * 5000); + final EnumCraterSize cSize = EnumCraterSize.sizeArray[random.nextInt(EnumCraterSize.sizeArray.length)]; + final int size = random.nextInt(cSize.MAX_SIZE - cSize.MIN_SIZE) + cSize.MIN_SIZE + 15; + this.makeCrater(cx * 16 + x, cz * 16 + z, chunkX * 16, chunkZ * 16, size, primer); + } + } + } + } + } + } + + public void makeCrater(int craterX, int craterZ, int chunkX, int chunkZ, int size, ChunkPrimer primer) + { + for (int x = 0; x < CHUNK_SIZE; x++) + { + for (int z = 0; z < CHUNK_SIZE; z++) + { + double xDev = craterX - (chunkX + x); + double zDev = craterZ - (chunkZ + z); + if (xDev * xDev + zDev * zDev < size * size) + { + xDev /= size; + zDev /= size; + final double sqrtY = xDev * xDev + zDev * zDev; + double yDev = sqrtY * sqrtY * 6; + yDev = 5 - yDev; + int helper = 0; + for (int y = 127; y > 0; y--) + { + if (Blocks.AIR != primer.getBlockState(x, y, z).getBlock() && helper <= yDev) + { + primer.setBlockState(x, y, z, Blocks.AIR.getDefaultState()); + helper++; + } + + if (helper > yDev) + { + break; + } + } + } + } + } + } + + private double randFromPoint(int x, int z) + { + int n; + n = x + z * 57; + n = n << 13 ^ n; + return 1.0 - (n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff) / 1073741824.0; + } + + public void decoratePlanet(World world, Random rand, int posX, int posZ) + { + this.getBiomeGenerator().decorate(world, rand, posX, posZ); + } + + @Override + public void populate(int x, int z) + { + BlockFalling.fallInstantly = true; + int var4 = x * 16; + int var5 = z * 16; + this.world.getBiome(new BlockPos(var4 + 16, 0, var5 + 16)); + this.rand.setSeed(this.world.getSeed()); + final long var7 = this.rand.nextLong() / 2L * 2L + 1L; + final long var9 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(x * var7 + z * var9 ^ this.world.getSeed()); + ForgeEventFactory.onChunkPopulate(true, this, this.world, this.rand, x, z, false); + this.decoratePlanet(this.world, this.rand, var4, var5); + this.onPopulate(x, z); + ForgeEventFactory.onChunkPopulate(false, this, this.world, this.rand, x, z, false); + BlockFalling.fallInstantly = false; + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + Biome biomegenbase = this.world.getBiome(pos); + return biomegenbase.getSpawnableList(creatureType); + } + + /** + * Do not return null + * + * @return The biome generator for this world, handles ore, flower, etc + * generation. See GCBiomeDecoratorBase. + */ + protected abstract BiomeDecoratorSpace getBiomeGenerator(); + + /** + * Do not return null, have at least one biome for generation + * + * @return Biome instance for generation + */ + protected abstract Biome[] getBiomesForGeneration(); + + /** + * @return The average terrain level. Default is 64. + */ + protected abstract int getSeaLevel(); + + /** + * List of all world generators to use. Caves, ravines, structures, etc. + *

Return an empty list for no world generators. Do not return null. + * + * @return + */ + protected abstract List getWorldGenerators(); + + /** + * The grass block to be generated. Doesn't have to be grass of course. + * + * @return BlockMetaPair instance containing ID and metadata for grass + * block. + */ + protected abstract BlockMetaPair getGrassBlock(); + + /** + * The dirt block to be generated. Doesn't have to be dirt of course. + * + * @return BlockMetaPair instance containing ID and metadata for dirt block. + */ + protected abstract BlockMetaPair getDirtBlock(); + + /** + * The stone block to be generated. Doesn't have to be stone of course. + * + * @return BlockMetaPair instance containing ID and metadata for stone + * block. + */ + protected abstract BlockMetaPair getStoneBlock(); + + /** + * @return Base height modifier + */ + public abstract double getHeightModifier(); + + /** + * @return Height modifier for small hills + */ + public abstract double getSmallFeatureHeightModifier(); + + /** + * @return Height modifier for mountains + */ + public abstract double getMountainHeightModifier(); + + /** + * @return Height modifier for valleys + */ + public abstract double getValleyHeightModifier(); + + /** + * @return Probability that craters will be generated + */ + public abstract int getCraterProbability(); + + public abstract void onChunkProvide(int cX, int cZ, ChunkPrimer primer); + + public abstract void onPopulate(int cX, int cZ); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/MapGenBaseMeta.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/MapGenBaseMeta.java new file mode 100644 index 00000000..32c99efa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/MapGenBaseMeta.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +/** + * Do not include this prefab class in your released mod download.

This is + * a base class for World Gen such as caves. Override and generate features in + * recursiveGenerate + */ +public abstract class MapGenBaseMeta +{ + + /** + * The number of Chunks to gen-check in any given direction. + */ + protected int range = 8; + + /** + * The RNG used by the MapGen classes. + */ + protected Random rand = new Random(); + + /** + * This world object. + */ + protected World world; + + public void generate(World world, int chunkX, int chunkZ, ChunkPrimer primer) + { + this.world = world; + this.rand.setSeed(world.getSeed()); + final long r0 = this.rand.nextLong(); + final long r1 = this.rand.nextLong(); + + for (int x0 = chunkX - this.range; x0 <= chunkX + this.range; ++x0) + { + for (int y0 = chunkZ - this.range; y0 <= chunkZ + this.range; ++y0) + { + final long randX = x0 * r0; + final long randZ = y0 * r1; + this.rand.setSeed(randX ^ randZ ^ world.getSeed()); + this.recursiveGenerate(world, x0, y0, chunkX, chunkZ, primer); + } + } + } + + /** + * Recursively called by generate() (generate) and optionally by itself. + */ + protected void recursiveGenerate(World world, int xChunkCoord, int zChunkCoord, int origXChunkCoord, int origZChunkCoord, ChunkPrimer primer) + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/WorldProviderSpace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/WorldProviderSpace.java new file mode 100644 index 00000000..d8bf32ef --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/WorldProviderSpace.java @@ -0,0 +1,552 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.util.Arrays; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.JavaUtil; +import net.minecraft.command.CommandTime; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.village.VillageCollection; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class WorldProviderSpace extends WorldProvider implements IGalacticraftWorldProvider +{ + + private long timeCurrentOffset = 0L; + public long preTickTime = Long.MIN_VALUE; + private long saveTCO = 0L; + static Field tickCounter; + + static + { + try + { + tickCounter = VillageCollection.class.getDeclaredField(GCCoreUtil.isDeobfuscated() ? "tickCounter" : "field_75553_e"); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + /** + * @return The fog color in this dimension + */ + public abstract Vector3 getFogColor(); + + /** + * @return The sky color in this dimension + */ + public abstract Vector3 getSkyColor(); + + /** + * Whether or not there will be rain or snow in this dimension + * + * @deprecated Use new shouldDisablePrecipitation method in + * IGalacticraftWorldProvider interface + */ + @Deprecated + @ForRemoval(deadline = "4.1.0") + public boolean canRainOrSnow() + { + return this.shouldDisablePrecipitation(); + } + + /** + * Whether or not to render vanilla sunset (can be overridden with custom + * sky provider) + */ + public abstract boolean hasSunset(); + + /** + * The length of day in this dimension

Default: 24000 + */ + public abstract long getDayLength(); + + public abstract Class getChunkProviderClass(); + + /** + * If possible you should not override this so that BiomeProviderDefault is + * used (see Moon, Mars and Asteroids for examples) + * + * But this can be used for planets where you have multiple biomes In that + * case if using BiomeAdaptive (see Venus for example) this will need a + * BiomeAdaptive.setBodyMultiBiome() call; + */ + public Class getBiomeProviderClass() + { + return null; + } + + @Override + public void setDimension(int var1) + { + super.setDimension(var1); + } + + @Override + public void updateWeather() + { + if (!this.world.isRemote) + { + long newTime = world.getWorldInfo().getWorldTime(); + if (this.preTickTime == Long.MIN_VALUE) + { + // First tick: get the timeCurrentOffset from saved ticks in + // villages.dat :) + int savedTick = 0; + try + { + tickCounter.setAccessible(true); + savedTick = tickCounter.getInt(this.world.villageCollection); + if (savedTick < 0) + savedTick = 0; + } catch (Exception ignore) + { + } + this.timeCurrentOffset = savedTick - newTime; + } else + { + // Detect jumps in world time (e.g. because of bed use on + // Overworld) and reverse them for this world + long diff = (newTime - this.preTickTime); + if (diff > 1L) + { + this.timeCurrentOffset -= diff - 1L; + this.saveTime(); + } + } + this.preTickTime = newTime; + this.saveTCO = 0L; + } + + if (this.shouldDisablePrecipitation()) + { + this.world.getWorldInfo().setRainTime(0); + this.world.getWorldInfo().setRaining(false); + this.world.getWorldInfo().setThunderTime(0); + this.world.getWorldInfo().setThundering(false); + this.world.rainingStrength = 0.0F; + this.world.thunderingStrength = 0.0F; + } else + { + this.updateWeatherOverride(); + } + } + + /* + * Override this to circumvent vanilla updateWeather() + */ + protected void updateWeatherOverride() + { + super.updateWeather(); + } + + @Override + public String getSaveFolder() + { + return "DIM" + this.getCelestialBody().getDimensionID(); + } + + @Override + public boolean isGasPresent(EnumAtmosphericGas gas) + { + return this.getCelestialBody().atmosphere.isGasPresent(gas); + } + + @Override + public boolean hasNoAtmosphere() + { + return this.getCelestialBody().atmosphere.hasNoGases(); + } + + @Override + public boolean hasBreathableAtmosphere() + { + return this.getCelestialBody().atmosphere.isBreathable(); + } + + @Override + public boolean shouldDisablePrecipitation() + { + return !this.getCelestialBody().atmosphere.hasPrecipitation(); + } + + @Override + public float getSoundVolReductionAmount() + { + float d = this.getCelestialBody().atmosphere.relativeDensity(); + if (d <= 0.0F) + { + return 20.0F; + } + if (d > 5.0F) + { + return 0.2F; + } + return 1.0F / d; + } + + @Override + public double getMeteorFrequency() + { + float d = this.getCelestialBody().atmosphere.relativeDensity(); + if (d <= 0.0F) + { + return 5.0D; + } + return d * 100D; + } + + @Override + public float getThermalLevelModifier() + { + return this.getCelestialBody().atmosphere.thermalLevel(); + } + + @Override + public float getWindLevel() + { + return this.getCelestialBody().atmosphere.windLevel(); + } + + @Override + public boolean shouldCorrodeArmor() + { + return this.getCelestialBody().atmosphere.isCorrosive(); + } + + @Override + public boolean canBlockFreeze(BlockPos pos, boolean byWater) + { + // TODO: if block is water and world temperature is low, freeze + return super.canBlockFreeze(pos, byWater); + } + + @Override + public boolean canDoLightning(Chunk chunk) + { + return !this.shouldDisablePrecipitation(); + } + + @Override + public boolean canDoRainSnowIce(Chunk chunk) + { + return !this.shouldDisablePrecipitation(); + } + + @Override + public float getSolarSize() + { + return 1.0F / this.getCelestialBody().getRelativeDistanceFromCenter().unScaledDistance; + } + + @Override + public float[] calcSunriseSunsetColors(float var1, float var2) + { + return this.hasSunset() ? super.calcSunriseSunsetColors(var1, var2) : null; + } + + @Override + public float calculateCelestialAngle(long par1, float par3) + { + par1 = this.getWorldTime(); + int j = (int) (par1 % this.getDayLength()); + float f1 = (j + par3) / this.getDayLength() - 0.25F; + + if (f1 < 0.0F) + { + ++f1; + } + + if (f1 > 1.0F) + { + --f1; + } + + float f2 = f1; + f1 = 0.5F - MathHelper.cos(f1 * 3.1415927F) / 2.0F; + return f2 + (f1 - f2) / 3.0F; + } + + @SideOnly(Side.CLIENT) + @Override + public Vec3d getFogColor(float var1, float var2) + { + Vector3 fogColor = this.getFogColor(); + return new Vec3d(fogColor.floatX(), fogColor.floatY(), fogColor.floatZ()); + } + + @Override + public Vec3d getSkyColor(Entity cameraEntity, float partialTicks) + { + Vector3 skyColor = this.getSkyColor(); + return new Vec3d(skyColor.floatX(), skyColor.floatY(), skyColor.floatZ()); + } + + @Override + public boolean isSkyColored() + { + return true; + } + + /** + * Do not override this. + * + * Returns true on clients (to allow rendering of sky etc, maybe even + * clouds). Returns false on servers (to disable Nether Portal mob spawning + * and sleeping in beds). + */ + @Override + public boolean isSurfaceWorld() + { + return (this.world == null) ? false : this.world.isRemote; + } + + /** + * This must normally return false, so that if the dimension is set for + * 'static' loading it will not keep chunks around the dimension spawn + * position permanently loaded. It is also needed to be false so that the + * 'Force Overworld Respawn' setting in core.conf will work correctly - see + * also WorldProviderS[ace.getRespawnDimension(). + * + * But: returning 'false' will cause beds to explode in this dimension. If + * you want beds NOT to explode, you can override this, like in + * WorldProviderMoon. + */ + @Override + public boolean canRespawnHere() + { + return false; + } + + /** + * Do NOT override this in your add-ons. + * + * This controls whether the player will respawn in the space dimension or + * the Overworld in accordance with the 'Force Overworld Respawn' setting on + * core.conf. + */ + @Override + public int getRespawnDimension(EntityPlayerMP player) + { + return this.shouldForceRespawn() ? this.getDimension() : 0; + } + + /** + * If true, the the player should respawn in this dimension upon death. + * + * Obeying the 'Force Overworld Respawn' setting from core.conf is an + * important protection for players are endlessly dying in a space + * dimension: for example respawning in an airless environment with no + * oxygen tanks and no oxygen machinery. + */ + public boolean shouldForceRespawn() + { + return !ConfigManagerCore.forceOverworldRespawn; + } + + /** + * If false (the default) then Nether Portals will have no function on this + * world. Nether Portals can still be constructed, if the player can make + * fire, they just won't do anything. + * + * @return True if Nether Portals should work like on the Overworld. + */ + @Override + public boolean netherPortalsOperational() + { + return false; + } + + @Override + public float getArrowGravity() + { + return 0.005F; + } + + @Override + public IChunkGenerator createChunkGenerator() + { + try + { + Class chunkProviderClass = this.getChunkProviderClass(); + + Constructor[] constructors = chunkProviderClass.getConstructors(); + for (int i = 0; i < constructors.length; i++) + { + Constructor constr = constructors[i]; + if (Arrays.equals(constr.getParameterTypes(), new Object[] {World.class, long.class, boolean.class})) + { + return (IChunkGenerator) constr.newInstance(this.world, this.world.getSeed(), this.world.getWorldInfo().isMapFeaturesEnabled()); + } + if(Arrays.equals(constr.getParameterTypes(), new Object[] {World.class, long.class})) + { + return (IChunkGenerator) constr.newInstance(this.world, this.world.getSeed()); + } + else if (constr.getParameterTypes().length == 0) + { + return (IChunkGenerator) constr.newInstance(); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } + + @Override + protected void init() + { + this.hasSkyLight = true; + + if (this.getBiomeProviderClass() != null) + { + try + { + Class biomeProviderClass = this.getBiomeProviderClass(); + + Constructor[] constructors = biomeProviderClass.getConstructors(); + for (Constructor constr : constructors) + { + if (Arrays.equals(constr.getParameterTypes(), new Object[] + {World.class})) + { + this.biomeProvider = (BiomeProvider) constr.newInstance(this.world); + } else if (constr.getParameterTypes().length == 0) + { + this.biomeProvider = (BiomeProvider) constr.newInstance(); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } else + { + this.biomeProvider = new BiomeProviderDefault(this.getCelestialBody()); + } + } + + @Override + public BiomeProvider getBiomeProvider() + { + if (this.getBiomeProviderClass() == null) + { + BiomeAdaptive.setBody(this.getCelestialBody()); + } + return biomeProvider; + } + + @Override + public boolean shouldMapSpin(String entity, double x, double y, double z) + { + return false; + } + + // Work around vanilla feature: worlds which are not the Overworld cannot + // change the time, as the worldInfo is a DerivedWorldInfo + // Therefore each Galacticraft dimension maintains its own timeCurrentOffset + @Override + public void setWorldTime(long time) + { + world.getWorldInfo().setWorldTime(time); + if (!world.isRemote) + { + if (JavaUtil.instance.isCalledBy(CommandTime.class)) + { + this.timeCurrentOffset = this.saveTCO; + this.saveTime(); + this.preTickTime = time; + } else + { + long newTCO = time - world.getWorldInfo().getWorldTime(); + long diff = newTCO - this.timeCurrentOffset; + if (diff > 1L || diff < -1L) + { + this.timeCurrentOffset = newTCO; + this.saveTime(); + this.preTickTime = time; + } + } + this.saveTCO = 0; + } + } + + @Override + public long getWorldTime() + { + if (JavaUtil.instance.isCalledBy(CommandTime.class)) + { + this.saveTCO = this.timeCurrentOffset; + } + return world.getWorldInfo().getWorldTime() + this.timeCurrentOffset; + } + + /** + * Adjust time offset on Galacticraft worlds when the Overworld time jumps + * and you don't want the time on all the other Galacticraft worlds to jump + * also - see WorldUtil.setNextMorning() for example + */ + public void adjustTimeOffset(long diff) + { + if (diff != 0L) + { + this.timeCurrentOffset -= diff; + this.preTickTime += diff; + this.saveTime(); + } + } + + public void adjustTime(long newTime) + { + long diff = newTime - this.preTickTime; + if (diff != 0L) + { + this.timeCurrentOffset -= diff; + this.preTickTime = newTime; + this.saveTime(); + } + } + + /** + * Save this world's custom time (from timeCurrentOffset) into this world's + * villages.dat :) + */ + private void saveTime() + { + try + { + VillageCollection vc = this.world.villageCollection; + tickCounter.setAccessible(true); + tickCounter.setInt(vc, (int) (this.getWorldTime())); + vc.markDirty(); + } catch (Exception ignore) + { + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/package-info.java new file mode 100644 index 00000000..cfa47ad2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/prefab/world/gen/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|prefab|worldgen") +package micdoodle8.mods.galacticraft.api.prefab.world.gen; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CircuitFabricatorRecipes.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CircuitFabricatorRecipes.java new file mode 100644 index 00000000..3fd25f07 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CircuitFabricatorRecipes.java @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +public class CircuitFabricatorRecipes +{ + + private static List> recipeInputs = new ArrayList<>(); + private static List recipeOutputs = new ArrayList<>(); + + public static ArrayList> slotValidItems = new ArrayList<>(5); + + /** + * Input list must be array with 5 elements matching the 5 slots in the + * machine. Use null if no item is used in the slot. Use a List + * for Oredicted ingredients.

0: Diamond 1: Silicon 2: Silicon 3: + * Redstone dust 4: Recipe item + * + * @param output ItemStack + * @param inputList Object array. Must contain only null, ItemStack, or + * List. + * + * @return + */ + public static void addRecipe(ItemStack output, List inputList) + { + if (inputList.size() != 5) + { + throw new RuntimeException("Invalid circuit fabricator recipe! Inputs length should be 5, was " + inputList.size()); + } + for (Object o : inputList) + { + if (o == null || o instanceof ItemStack) + { + continue; + } + if (o instanceof List && ((List) o).size() > 0) + { + continue; + } + throw new RuntimeException("Invalid circuit fabricator recipe! Input must be ItemStack or List: " + o.toString()); + } + + NonNullList inputs = NonNullList.create(); + inputs.addAll(inputList); + CircuitFabricatorRecipes.recipeInputs.add(inputs); + CircuitFabricatorRecipes.recipeOutputs.add(output); + validateItems(inputList); + } + + /** + * Add the recipe ingredients to the valid items for each slot + * + * @param inputList + */ + @SuppressWarnings("unchecked") + private static void validateItems(List inputList) + { + // First initialise the ArrayList if this is the first time it's used + if (CircuitFabricatorRecipes.slotValidItems.size() == 0) + { + for (int i = 0; i < 5; i++) + { + ArrayList entry = new ArrayList<>(3); + CircuitFabricatorRecipes.slotValidItems.add(entry); + } + } + // Now see if the recipe items are already valid for their slots, if not + // add them + for (int i = 0; i < 5; i++) + { + Object input = inputList.get(i); + if (input instanceof ItemStack) + { + validateItem(i, (ItemStack) input); + } else if (input instanceof List) + { + for (ItemStack stack : (List) input) + { + validateItem(i, stack); + } + } + } + } + + private static void validateItem(int i, ItemStack inputStack) + { + if (inputStack.isEmpty()) + { + return; + } + + ArrayList validItems = CircuitFabricatorRecipes.slotValidItems.get(i); + + boolean found = false; + for (int j = 0; j < validItems.size(); j++) + { + if (inputStack.isItemEqual(validItems.get(j))) + { + found = true; + break; + } + } + if (!found) + { + validItems.add(inputStack.copy()); + } + } + + /** + * Gets the output ItemStack for the passed input. + * + * @param inputList ItemStack array of input items + * @return The result ItemStack + */ + @SuppressWarnings("unchecked") + public static ItemStack getOutputForInput(List inputList) + { + if (inputList.size() != 5) + { + return ItemStack.EMPTY; + } + + int count = 0; + for (NonNullList recipe : CircuitFabricatorRecipes.recipeInputs) + { + boolean found = true; + for (int i = 0; i < 5; i++) + { + Object recipeStack = recipe.get(i); + ItemStack inputStack = inputList.get(i); + + if (recipeStack instanceof ItemStack && ((ItemStack) recipeStack).isEmpty() || inputStack.isEmpty()) + { + if (!(recipeStack instanceof ItemStack && ((ItemStack) recipeStack).isEmpty()) || !inputStack.isEmpty()) + { + found = false; + break; + } + } else if (recipeStack instanceof ItemStack) + { + ItemStack stack = ((ItemStack) recipeStack); + if (stack.getItem() != inputStack.getItem() || stack.getItemDamage() != inputStack.getItemDamage() || !RecipeUtil.areItemStackTagsEqual(stack, inputStack)) + { + found = false; + break; + } + } else if (recipeStack instanceof List) + { + boolean listMatchOne = false; + for (ItemStack stack : (List) recipeStack) + { + if (stack.getItem() == inputStack.getItem() && stack.getItemDamage() == inputStack.getItemDamage() && RecipeUtil.areItemStackTagsEqual(stack, inputStack)) + { + listMatchOne = true; + break; + } + } + if (listMatchOne == false) + { + found = false; + break; + } + } + } + + if (found) + { + return recipeOutputs.get(count); + } + + count++; + } + + return ItemStack.EMPTY; + } + + public static List> getRecipes() + { + return recipeInputs; + } + + public static ItemStack getOutput(int count) + { + return recipeOutputs.get(count); + } + + /** + * Caution: call this BEFORE the JEI plugin registers recipes - or else the + * removed recipe will still be shown in JEI. + */ + public static void removeRecipe(ItemStack match) + { + int count = 0; + for (ItemStack output : new ArrayList(recipeOutputs)) + { + if (ItemStack.areItemStacksEqual(match, output)) + { + recipeInputs.remove(count); + recipeOutputs.remove(count); + // Do not increment count if we just removed the element! + } else + count++; + } + } + + @SuppressWarnings("unchecked") + public static void replaceRecipeIngredient(ItemStack ingredient, List replacement) + { + if (ingredient == null) + return; + CircuitFabricatorRecipes.slotValidItems.clear(); + Object newIngredient = replacement; + + for (NonNullList recipe : CircuitFabricatorRecipes.recipeInputs) + { + for (int i = 0; i < 5; i++) + { + Object recipeStack = recipe.get(i); + if (recipeStack == null) + { + continue; + } + + if (recipeStack instanceof ItemStack) + { + ItemStack stack = ((ItemStack) recipeStack); + if (stack.getItem() == ingredient.getItem() && stack.getItemDamage() == ingredient.getItemDamage() && ItemStack.areItemStackTagsEqual(stack, ingredient)) + { + recipe.set(i, newIngredient); + } + } else if (recipeStack instanceof List) + { + for (ItemStack stack : (List) recipeStack) + { + if (stack.getItem() == ingredient.getItem() && stack.getItemDamage() == ingredient.getItemDamage() && ItemStack.areItemStackTagsEqual(stack, ingredient)) + { + recipe.set(i, newIngredient); + break; + } + } + } + } + + CircuitFabricatorRecipes.validateItems(recipe); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CompressorRecipes.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CompressorRecipes.java new file mode 100644 index 00000000..8aed1dea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/CompressorRecipes.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftConfigAccess; +import micdoodle8.mods.galacticraft.core.GCItems; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; + +public class CompressorRecipes +{ + + private static List recipes = new ArrayList<>(); + private static List recipesAdventure = new ArrayList<>(); + private static boolean adventureOnly = false; + //private static Field adventureFlag; + //private static boolean flagNotCached = true; + public static boolean steelIngotsPresent = false; + public static List steelRecipeGC; + + public static ShapedRecipesGC addRecipe(ItemStack output, Object... inputList) + { + StringBuilder s = new StringBuilder(); + int i = 0; + int j = 0; + int k = 0; + + if (inputList[i] instanceof String[]) + { + String[] astring = (String[]) inputList[i++]; + + for (String s1 : astring) + { + ++k; + j = s1.length(); + s.append(s1); + } + } else + { + while (inputList[i] instanceof String) + { + String s2 = (String) inputList[i++]; + ++k; + j = s2.length(); + s.append(s2); + } + } + + HashMap hashmap = new HashMap<>(inputList.length / 2, 1.0F); + + for (; i < inputList.length; i += 2) + { + Character character = (Character) inputList[i]; + ItemStack itemstack1 = null; + + if (inputList[i + 1] instanceof Item) + { + itemstack1 = new ItemStack((Item) inputList[i + 1]); + } else if (inputList[i + 1] instanceof Block) + { + itemstack1 = new ItemStack((Block) inputList[i + 1], 1, 32767); + } else if (inputList[i + 1] instanceof ItemStack) + { + itemstack1 = (ItemStack) inputList[i + 1]; + } + + hashmap.put(character, itemstack1); + } + + ItemStack[] aitemstack = new ItemStack[j * k]; + + for (int i1 = 0; i1 < j * k; ++i1) + { + char c0 = s.charAt(i1); + + if (hashmap.containsKey(c0)) + { + aitemstack[i1] = hashmap.get(c0).copy(); + } else + { + aitemstack[i1] = null; + } + } + + ShapedRecipesGC shapedRecipes = new ShapedRecipesGC(j, k, aitemstack, output); + if (!adventureOnly) + CompressorRecipes.recipes.add(shapedRecipes); + CompressorRecipes.recipesAdventure.add(shapedRecipes); + return shapedRecipes; + } + + public static void addShapelessRecipe(ItemStack itemStack, Object... objs) + { + ArrayList arraylist = new ArrayList<>(); + + for (Object object1 : objs) + { + if (object1 instanceof ItemStack) + { + arraylist.add(((ItemStack) object1).copy()); + } else if (object1 instanceof Item) + { + arraylist.add(new ItemStack((Item) object1)); + } else if (object1 instanceof String) + { + arraylist.add(object1); + } else + { + if (!(object1 instanceof Block)) + { + throw new RuntimeException("Invalid shapeless compressor recipe!"); + } + + arraylist.add(new ItemStack((Block) object1)); + } + } + + IRecipe toAdd = new ShapelessOreRecipeGC(itemStack, arraylist.toArray()); + if (!adventureOnly) + CompressorRecipes.recipes.add(toAdd); + CompressorRecipes.recipesAdventure.add(toAdd); + } + + public static ShapedRecipesGC addRecipeAdventure(ItemStack output, Object... inputList) + { + adventureOnly = true; + ShapedRecipesGC returnValue = CompressorRecipes.addRecipe(output, inputList); + adventureOnly = false; + return returnValue; + } + + public static void addShapelessAdventure(ItemStack par1ItemStack, Object... par2ArrayOfObj) + { + adventureOnly = true; + CompressorRecipes.addShapelessRecipe(par1ItemStack, par2ArrayOfObj); + adventureOnly = false; + } + + public static ItemStack findMatchingRecipe(InventoryCrafting inventory, World par2World) + { + int i = 0; + ItemStack itemstack = ItemStack.EMPTY; + ItemStack itemstack1 = ItemStack.EMPTY; + int j; + + for (j = 0; j < inventory.getSizeInventory(); ++j) + { + ItemStack itemstack2 = inventory.getStackInSlot(j); + + if (!itemstack2.isEmpty()) + { + if (i == 0) + { + itemstack = itemstack2; + } + + if (i == 1) + { + itemstack1 = itemstack2; + } + + ++i; + } + } + + if (i == 2 && itemstack.getItem() == itemstack1.getItem() && itemstack.getCount() == 1 && itemstack1.getCount() == 1 && itemstack.getItem().isRepairable()) + { + Item item = itemstack.getItem(); + int k = item.getMaxDamage(itemstack) - itemstack.getItemDamage(); + int l = item.getMaxDamage(itemstack) - itemstack1.getItemDamage(); + int i1 = k + l + item.getMaxDamage(itemstack) * 5 / 100; + int j1 = item.getMaxDamage(itemstack) - i1; + + if (j1 < 0) + { + j1 = 0; + } + + return new ItemStack(itemstack.getItem(), 1, j1); + } else + { + List theRecipes = CompressorRecipes.getRecipeList(); + + for (j = 0; j < theRecipes.size(); ++j) + { + IRecipe irecipe = theRecipes.get(j); + + if (irecipe instanceof ShapedRecipesGC && irecipe.matches(inventory, par2World)) + { + return irecipe.getRecipeOutput().copy(); + } else if (irecipe instanceof ShapelessOreRecipeGC && irecipe.matches(inventory, par2World)) + { + return irecipe.getRecipeOutput().copy(); + } + } + + return ItemStack.EMPTY; + } + } + + public static List getRecipeListAll() + { + List result = new ArrayList<>(CompressorRecipes.recipesAdventure); + List endList = getRecipeListHidden(true, true); + result.removeIf(irecipe -> endList.contains(irecipe)); + IRecipe ice = null; + Item iceItem = new ItemStack(Blocks.ICE).getItem(); + for (IRecipe test : result) + { + if (test.getRecipeOutput().getItem() == iceItem) + { + ice = test; + break; + } + } + if (ice != null) + { + result.remove(ice); + result.add(ice); + } + result.addAll(endList); + return result; + } + + public static List getRecipeListHidden(boolean hideSteel, boolean hideAdventure) + { + if (!hideAdventure) + return new ArrayList(0); + + List result = new ArrayList<>(CompressorRecipes.recipesAdventure); + result.removeIf(irecipe -> CompressorRecipes.recipes.contains(irecipe)); + if (steelIngotsPresent && hideSteel) + { + List resultSteelless = new ArrayList<>(result.size()); + for (IRecipe recipe : result) + { + ItemStack output = recipe.getRecipeOutput(); + if (output == null) + continue; // Intentional ItemStack null check + if (output.getItemDamage() == 9 && output.getItem() == GCItems.basicItem && recipe instanceof ShapelessOreRecipeGC) + { + if (((ShapelessOreRecipeGC) recipe).matches(steelRecipeGC)) + { + continue; + } + } + resultSteelless.add(recipe); + } + return resultSteelless; + } + return result; + } + + public static List getRecipeList() + { + if (GalacticraftConfigAccess.getChallengeRecipes()) + return CompressorRecipes.recipesAdventure; + + // Filter out the GC steel recipe in Hard Mode + if (steelIngotsPresent && GalacticraftConfigAccess.getHardMode()) + { + List resultSteelless = new ArrayList<>(CompressorRecipes.recipes.size()); + for (IRecipe recipe : CompressorRecipes.recipes) + { + ItemStack output = recipe.getRecipeOutput(); + if (output == null) + continue; // Intentional ItemStack null check + if (output.getItemDamage() == 9 && output.getItem() == GCItems.basicItem && recipe instanceof ShapelessOreRecipeGC) + { + if (((ShapelessOreRecipeGC) recipe).matches(steelRecipeGC)) + { + continue; + } + } + resultSteelless.add(recipe); + } + return resultSteelless; + } + + return CompressorRecipes.recipes; + } + + public static List getRecipes(ItemStack match) + { + List result = new ArrayList(CompressorRecipes.getRecipeList()); + result.removeIf(irecipe -> !ItemStack.areItemStacksEqual(match, irecipe.getRecipeOutput())); + return result; + } + + /** + * Caution: call this BEFORE the JEI plugin registers recipes - or else the + * removed recipe will still be shown in JEI. + */ + public static void removeRecipe(ItemStack match) + { + CompressorRecipes.recipes.removeIf(irecipe -> ItemStack.areItemStacksEqual(match, irecipe.getRecipeOutput())); + CompressorRecipes.recipesAdventure.removeIf(irecipe -> ItemStack.areItemStacksEqual(match, irecipe.getRecipeOutput())); + } + + public static void replaceRecipeIngredient(ItemStack ingredient, List replacement) + { + if (ingredient == null) + return; + + for (IRecipe recipe : CompressorRecipes.recipesAdventure) + { + if (recipe instanceof IRecipeUpdatable) + { + ((IRecipeUpdatable) recipe).replaceInput(ingredient, replacement); + } + } + } + + public static void replaceRecipeIngredient(ItemStack ingredient) + { + if (ingredient == null) + return; + + for (IRecipe recipe : CompressorRecipes.recipesAdventure) + { + if (recipe instanceof IRecipeUpdatable) + { + ((IRecipeUpdatable) recipe).replaceInput(ingredient); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/INasaWorkbenchRecipe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/INasaWorkbenchRecipe.java new file mode 100644 index 00000000..d6c7a338 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/INasaWorkbenchRecipe.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.HashMap; +import javax.annotation.Nonnull; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public interface INasaWorkbenchRecipe +{ + + boolean matches(IInventory inventory); + + int getRecipeSize(); + + @Nonnull + ItemStack getRecipeOutput(); + + HashMap getRecipeInput(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/IRecipeUpdatable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/IRecipeUpdatable.java new file mode 100644 index 00000000..13dcef8d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/IRecipeUpdatable.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.List; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +public interface IRecipeUpdatable extends IRecipe +{ + + /** + * Replace all inputs which match ItemStack inputA with a List + * (probably representing OreDict output). + * + * @param inputA the current simple ItemStack ingredient + * @param inputB the List to replace it with + */ + public void replaceInput(ItemStack ingredient, List replacement); + + /** + * Replace all inputs which are lists containing ItemStack ingredient with + * simple ItemStack of ingredient. + * + * @param ingredient + */ + public void replaceInput(ItemStack ingredient); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicItem.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicItem.java new file mode 100644 index 00000000..4720cbcf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicItem.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +/** + * Implement this in an item that will be accepted into the schematic slot + */ +public interface ISchematicItem +{ + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicPage.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicPage.java new file mode 100644 index 00000000..7aebcc2c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicPage.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/** + * Schematic page to be added to NASA Workbench + */ +public interface ISchematicPage extends Comparable +{ + + /** + * Get the page ID. Make it configurable since it has to be unique between + * other Galacticraft addons. Determines order of schematics. + */ + int getPageID(); + + /** + * The GUI ID of this page. Used like any other GUI IDs to determine which + * container and GUI to open. Again, must be unique between mods so make it + * configurable. + */ + int getGuiID(); + + /** + * The item required to unlock this schematic. The item class must implement + * ISchematicItem, since it goes in the NASA Workbench unlock slot. + */ + ItemStack getRequiredItem(); + + /** + * The resulting client-side GUI for this page + * + * @param player The player opening this GUI + * @param pos Coordinates of the NASA Workbench + * @return the GUI to be opened with this schematic + */ + @SideOnly(Side.CLIENT) + GuiScreen getResultScreen(EntityPlayer player, BlockPos pos); + + /** + * The resulting container for this page + * + * @param player The player opening this GUI + * @param pos Coordinates of the NASA Workbench + * @return the container to be opened with this schematic + */ + Container getResultContainer(EntityPlayer player, BlockPos pos); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicResultPage.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicResultPage.java new file mode 100644 index 00000000..7e6443f0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ISchematicResultPage.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +/** + * Implement into GUI classes for the unlocked pages + */ +public interface ISchematicResultPage +{ + + /** + * Sets the integer index in the set of pages the player has unlocked + */ + void setPageIndex(int index); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicEvent.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicEvent.java new file mode 100644 index 00000000..10d5fbf3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicEvent.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.eventhandler.Event; + +/** + * These events are used internally to perform actions when Galacticraft is + * installed, without needing to include unnecessary classes. There is no need + * to subscribe to these events. + */ +public abstract class SchematicEvent extends Event +{ + + public ISchematicPage page; + + public SchematicEvent(ISchematicPage page) + { + this.page = page; + } + + public static class Unlock extends SchematicEvent + { + + public EntityPlayerMP player; + + public Unlock(EntityPlayerMP player, ISchematicPage page) + { + super(page); + this.player = player; + } + } + + public static class FlipPage extends SchematicEvent + { + + public int index; + public int direction; + public GuiScreen currentGui; + + public FlipPage(GuiScreen cs, ISchematicPage page, int index, int direction) + { + super(page); + this.currentGui = cs; + this.index = index; + this.direction = direction; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicPage.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicPage.java new file mode 100644 index 00000000..a4173971 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicPage.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +/** + * Reference implementation of {@link ISchematicPage}. Use/extend this or + * implement your own. + */ +public abstract class SchematicPage implements ISchematicPage +{ + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicRegistry.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicRegistry.java new file mode 100644 index 00000000..35b682b6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SchematicRegistry.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.recipe.SchematicEvent.FlipPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicEvent.Unlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicRegistry +{ + + public static ArrayList schematicRecipes = new ArrayList(); + public static ArrayList schematicItems = new ArrayList<>(); + public static ArrayList textures = new ArrayList<>(); + + /** + * Register a new schematic page + */ + public static void registerSchematicRecipe(ISchematicPage page) + { + if (!SchematicRegistry.schematicRecipes.contains(page)) + { + SchematicRegistry.schematicRecipes.add(page); + } + } + + /** + * Finds the recipe for the given itemstack + * + * @param stack the itemstack to be searched with + * @return the recipe that requires the provided itemstack + */ + public static ISchematicPage getMatchingRecipeForItemStack(ItemStack stack) + { + for (final ISchematicPage schematic : SchematicRegistry.schematicRecipes) + { + final ItemStack requiredItem = schematic.getRequiredItem(); + + if (requiredItem != null && stack != null && requiredItem.isItemEqual(stack)) + { + return schematic; + } + } + + return null; + } + + /** + * Finds the recipe for the given recipe ID + * + * @param id the ID to be searched with + * @return the recipe that has and ID equal to the one provided + */ + public static ISchematicPage getMatchingRecipeForID(int id) + { + for (final ISchematicPage schematic : SchematicRegistry.schematicRecipes) + { + if (schematic.getPageID() == id) + { + return schematic; + } + } + + return null; + } + + /** + * Called when a player unlocks a page. Used internally. + * + * @param player the player that unlocked the schematic + * @param page the schematic page to be unlocked + */ + public static void addUnlockedPage(EntityPlayerMP player, ISchematicPage page) + { + // Used internally to add page to player's list of unlocked schematics. + // No need to subscribe to this event + if (page != null) + MinecraftForge.EVENT_BUS.post(new Unlock(player, page)); + } + + /** + * Called when a player unlocks a page. Used internally. + * + * @param player the player that unlocked the schematic + * @param stack the itemstack the player has provided + * @return the schematic page that was unlocked + */ + public static ISchematicPage unlockNewPage(EntityPlayerMP player, ItemStack stack) + { + if (stack != null) + { + final ISchematicPage schematic = SchematicRegistry.getMatchingRecipeForItemStack(stack); + + if (schematic != null) + { + SchematicRegistry.addUnlockedPage(player, schematic); + + return schematic; + } + } + + return null; + } + + /** + * Finds the correct schematic when player presses NEXT + * + * @param currentIndex the current index of unlocked schematics the player + * is viewing + * @return the schematic page that will be shown when the player clicks NEXT + */ + @SideOnly(Side.CLIENT) + public static void flipToNextPage(GuiScreen cs, int currentIndex) + { + FMLClientHandler.instance().getClient().currentScreen = null; + + // Used internally inside Galacticraft to flip to the next page. No need + // to subscribe to this event. + MinecraftForge.EVENT_BUS.post(new FlipPage(cs, null, currentIndex, 1)); + } + + /** + * Finds the correct schematic when player presses BACK + * + * @param currentIndex the current index of unlocked schematics the player + * is viewing + * @return the schematic page that will be shown when the player clicks BACK + */ + @SideOnly(Side.CLIENT) + public static void flipToLastPage(GuiScreen cs, int currentIndex) + { + FMLClientHandler.instance().getClient().currentScreen = null; + + // Used internally inside Galacticraft to flip to the last page. No need + // to subscribe to this event. + MinecraftForge.EVENT_BUS.post(new FlipPage(cs, null, currentIndex, -1)); + } + + public static void registerTexture(ResourceLocation loc) + { + textures.add(loc); + } + + public static ResourceLocation getSchematicTexture(int index) + { + if (index < textures.size()) + return textures.get(index); + + GalacticraftCore.logger.debug("couldn't find render texture for " + index); + return textures.get(0); + } + + public static int registerSchematicItem(ItemStack item) + { + int index = schematicItems.size(); + schematicItems.add(item); + return index; + } + + public static ItemStack getSchematicItem(int index) + { + if (index < schematicItems.size()) + return schematicItems.get(index).copy(); + + GalacticraftCore.logger.debug("couldn't find schematic item for " + index); + return schematicItems.get(0).copy(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapedRecipesGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapedRecipesGC.java new file mode 100644 index 00000000..263fd75c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapedRecipesGC.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class ShapedRecipesGC extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe +{ + + public final int recipeWidth; + public final int recipeHeight; + public final ItemStack[] recipeItems; + private final ItemStack recipeOutput; + + public ShapedRecipesGC(int width, int height, ItemStack[] input, ItemStack output) + { + this.recipeWidth = width; + this.recipeHeight = height; + this.recipeItems = input; + this.recipeOutput = output; + } + + @Override + public ItemStack getRecipeOutput() + { + return this.recipeOutput; + } + + @Override + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList aitemstack = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < aitemstack.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + aitemstack.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + + return aitemstack; + } + + @Override + public boolean matches(InventoryCrafting inv, World worldIn) + { + for (int i = 0; i <= 3 - this.recipeWidth; ++i) + { + for (int j = 0; j <= 3 - this.recipeHeight; ++j) + { + if (this.checkMatch(inv, i, j, true)) + { + return true; + } + + if (this.checkMatch(inv, i, j, false)) + { + return true; + } + } + } + + return false; + } + + private boolean checkMatch(InventoryCrafting p_77573_1_, int p_77573_2_, int p_77573_3_, boolean p_77573_4_) + { + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int k = i - p_77573_2_; + int l = j - p_77573_3_; + ItemStack itemstack = ItemStack.EMPTY; + + if (k >= 0 && l >= 0 && k < this.recipeWidth && l < this.recipeHeight) + { + if (p_77573_4_) + { + itemstack = this.recipeItems[this.recipeWidth - k - 1 + l * this.recipeWidth]; + } else + { + itemstack = this.recipeItems[k + l * this.recipeWidth]; + } + } + + ItemStack itemstack1 = p_77573_1_.getStackInRowAndColumn(i, j); + + if (!itemstack1.isEmpty() || !itemstack.isEmpty()) + { + if (itemstack1.isEmpty() && !itemstack.isEmpty() || !itemstack1.isEmpty() && itemstack.isEmpty()) + { + return false; + } + + if (itemstack.getItem() != itemstack1.getItem()) + { + return false; + } + + if (itemstack.getMetadata() != 32767 && itemstack.getMetadata() != itemstack1.getMetadata()) + { + return false; + } + } + } + } + + return true; + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting inv) + { + return this.getRecipeOutput().copy(); + } + + @Override + public boolean canFit(int width, int height) + { + return width >= 3 && height >= 3; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapelessOreRecipeGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapelessOreRecipeGC.java new file mode 100644 index 00000000..36922b9a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/ShapelessOreRecipeGC.java @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import net.minecraft.block.Block; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.oredict.OreDictionary; + +public class ShapelessOreRecipeGC extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipeUpdatable +{ + + protected ItemStack output = null; + protected ArrayList input = new ArrayList(); + + public ShapelessOreRecipeGC(Block result, Object... recipe) + { + this(new ItemStack(result), recipe); + } + + public ShapelessOreRecipeGC(Item result, Object... recipe) + { + this(new ItemStack(result), recipe); + } + + public ShapelessOreRecipeGC(ItemStack result, Object... recipe) + { + output = result.copy(); + for (Object in : recipe) + { + if (in instanceof ItemStack) + { + input.add(((ItemStack) in).copy()); + } else if (in instanceof Item) + { + input.add(new ItemStack((Item) in)); + } else if (in instanceof Block) + { + input.add(new ItemStack((Block) in)); + } else if (in instanceof String) + { + input.add(OreDictionary.getOres((String) in)); + } else + { + StringBuilder ret = new StringBuilder("Invalid compressor shapeless ore recipe: "); + for (Object tmp : recipe) + { + ret.append(tmp).append(", "); + } + ret.append(output); + throw new RuntimeException(ret.toString()); + } + } + } + + @Override + public boolean canFit(int width, int height) + { + return width * height >= input.size(); + } + + @Override + public ItemStack getRecipeOutput() + { + return output; + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting var1) + { + return output.copy(); + } + + @SuppressWarnings("unchecked") + @Override + public boolean matches(InventoryCrafting var1, World world) + { + List required = new LinkedList<>(input); + + for (int x = 0; x < var1.getSizeInventory(); x++) + { + ItemStack slot = var1.getStackInSlot(x); + + if (!slot.isEmpty()) + { + boolean inRecipe = false; + Iterator req = required.iterator(); + + while (req.hasNext()) + { + boolean match = false; + + Object next = req.next(); + + if (next instanceof ItemStack) + { + match = OreDictionary.itemMatches((ItemStack) next, slot, false); + } else if (next instanceof List) + { + Iterator itr = ((List) next).iterator(); + while (itr.hasNext() && !match) + { + match = OreDictionary.itemMatches(itr.next(), slot, false); + } + } + + if (match) + { + inRecipe = true; + required.remove(next); + break; + } + } + + if (!inRecipe) + { + return false; + } + } + } + + return required.isEmpty(); + } + + @SuppressWarnings("unchecked") + public boolean matches(List var1) + { + List required = new LinkedList<>(input); + + for (ItemStack slot : var1) + { + if (slot != null) + { + boolean inRecipe = false; + Iterator req = required.iterator(); + + while (req.hasNext()) + { + boolean match = false; + + Object next = req.next(); + + if (next instanceof ItemStack) + { + match = OreDictionary.itemMatches((ItemStack) next, slot, false); + } else if (next instanceof List) + { + Iterator itr = ((List) next).iterator(); + while (itr.hasNext() && !match) + { + match = OreDictionary.itemMatches(itr.next(), slot, false); + } + } + + if (match) + { + inRecipe = true; + required.remove(next); + break; + } + } + + if (!inRecipe) + { + return false; + } + } + } + + return required.isEmpty(); + } + + public ArrayList getInput() + { + return this.input; + } + + @Override + public NonNullList getRemainingItems(InventoryCrafting inv) // getRecipeLeftovers + { + return ForgeHooks.defaultRecipeGetRemainingItems(inv); + } + + @Override + public void replaceInput(ItemStack inputA, List inputB) + { + for (int i = 0; i < this.input.size(); i++) + { + Object test = this.input.get(i); + if (test instanceof ItemStack && ItemStack.areItemsEqual(inputA, (ItemStack) test) && RecipeUtil.areItemStackTagsEqual(inputA, (ItemStack) test)) + { + this.input.set(i, inputB); + } else if (test instanceof List && itemListContains((List) test, inputA)) + { + this.input.set(i, inputB); + } + } + } + + @Override + public void replaceInput(ItemStack inputB) + { + for (int i = 0; i < this.input.size(); i++) + { + Object test = this.input.get(i); + if (test instanceof List && itemListContains((List) test, inputB)) + { + this.input.set(i, inputB); + } + } + } + + private static boolean itemListContains(List test, ItemStack stack) + { + for (Object b : test) + { + if (b instanceof ItemStack && ItemStack.areItemsEqual(stack, (ItemStack) b) && RecipeUtil.areItemStackTagsEqual(stack, (ItemStack) b)) + return true; + } + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SpaceStationRecipe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SpaceStationRecipe.java new file mode 100644 index 00000000..ed05d401 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/SpaceStationRecipe.java @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.recipe; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public class SpaceStationRecipe +{ + + private final HashMap input = new HashMap(4, 1.0F); + + /** + * @param objMap a map of the items required. Each entry should be an object + * of ItemStack, Item/Block or String(OreDict) and the amount of that + * item required + */ + public SpaceStationRecipe(HashMap objMap) + { + for (final Object obj : objMap.keySet()) + { + final Integer amount = objMap.get(obj); + + if (obj instanceof ItemStack) + { + this.input.put(((ItemStack) obj).copy(), amount); + } else if (obj instanceof Item) + { + this.input.put(new ItemStack((Item) obj), amount); + } else if (obj instanceof Block) + { + this.input.put(new ItemStack((Block) obj), amount); + } else if (obj instanceof String) + { + List stacks = OreDictionary.getOres((String) obj); + this.input.put(stacks, amount); + } else if (obj instanceof ArrayList) + { + this.input.put(obj, amount); + } else + { + throw new RuntimeException("INVALID SPACE STATION RECIPE"); + } + } + } + + public int getRecipeSize() + { + return this.input.size(); + } + + @SuppressWarnings("unchecked") + public boolean matches(EntityPlayer player, boolean remove) + { + final HashMap required = new HashMap(); + required.putAll(this.input); + + final Iterator req = this.input.keySet().iterator(); + + while (req.hasNext()) + { + final Object next = req.next(); + + final int amountRequired = required.get(next); + int amountInInv = 0; + + for (int x = 0; x < player.inventory.getSizeInventory(); x++) + { + final ItemStack slot = player.inventory.getStackInSlot(x); + + if (slot != null && slot.getCount() > 0) // Intentional + // ItemStack null check + { + if (next instanceof ItemStack) + { + if (SpaceStationRecipe.checkItemEquals((ItemStack) next, slot)) + { + amountInInv += slot.getCount(); + } + } else if (next instanceof List) + { + for (final ItemStack item : (List) next) + { + if (SpaceStationRecipe.checkItemEquals(item, slot)) + { + amountInInv += slot.getCount(); + } + } + } + } + } + + if (amountInInv >= amountRequired) + { + required.remove(next); + } + } + + if (required.isEmpty() && remove) + { + this.removeItems(player); + } + + return required.isEmpty(); + } + + @SuppressWarnings("unchecked") + public void removeItems(EntityPlayer player) + { + final HashMap required = new HashMap(this.input); + + final Iterator req = required.keySet().iterator(); + + while (req.hasNext()) + { + final Object next = req.next(); + + final int amountRequired = required.get(next); + int amountRemoved = 0; + + InventoryLoop: for (int x = 0; x < player.inventory.getSizeInventory(); x++) + { + final ItemStack slot = player.inventory.getStackInSlot(x); + + if (slot != null && slot.getCount() > 0) // Intentional + // ItemStack null check + { + final int amountRemaining = amountRequired - amountRemoved; + + if (next instanceof ItemStack) + { + if (SpaceStationRecipe.checkItemEquals((ItemStack) next, slot)) + { + final int amountToRemove = Math.min(slot.getCount(), amountRemaining); + ItemStack newStack = slot.copy(); + newStack.shrink(amountToRemove); + + if (newStack.getCount() <= 0) + { + newStack = ItemStack.EMPTY; + } + + player.inventory.setInventorySlotContents(x, newStack); + amountRemoved += amountToRemove; + if (amountRemoved == amountRequired) + break; + } + } else if (next instanceof List) + { + for (final ItemStack item : (List) next) + { + if (SpaceStationRecipe.checkItemEquals(item, slot)) + { + final int amountToRemove = Math.min(slot.getCount(), amountRemaining); + ItemStack newStack = slot.copy(); + newStack.shrink(amountToRemove); + + if (newStack.getCount() <= 0) + { + newStack = ItemStack.EMPTY; + } + + player.inventory.setInventorySlotContents(x, newStack); + amountRemoved += amountToRemove; + if (amountRemoved == amountRequired) + break InventoryLoop; + } + } + } + } + } + } + } + + public static boolean checkItemEquals(ItemStack target, ItemStack input) + { + return target.getItem() == input.getItem() && (target.getItemDamage() == OreDictionary.WILDCARD_VALUE || target.getItemDamage() == input.getItemDamage()); + } + + /** + * Returns the input for this recipe, any mod accessing this value should + * never manipulate the values in this array as it will effect the recipe + * itself. + * + * @return The recipes input vales. + */ + public HashMap getInput() + { + return this.input; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/package-info.java new file mode 100644 index 00000000..a732ab12 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/recipe/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|recipe") +package micdoodle8.mods.galacticraft.api.recipe; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IColorable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IColorable.java new file mode 100644 index 00000000..68d5dc71 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IColorable.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; + +/** + * Used for colored pipes to set/get colors. + */ +public interface IColorable +{ + + /** + * Called when the color is changed. + */ + void onColorUpdate(); + + /** + * Gets the color of this tile from the Block State. + * + * @param state the state + * + * @return the color of the tile, equivalent to the dye colors in vanilla + * minecraft + */ + byte getColor(IBlockState state); + + /** + * Called when a tile adjacent to this one has it's color changed. + * + * @param direction the direction (relative to this tile) that was updated. + */ + void onAdjacentColorChanged(EnumFacing direction); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IDisableableMachine.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IDisableableMachine.java new file mode 100644 index 00000000..469ffcec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IDisableableMachine.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +/** + * Currently only used internally when enable/disable buttons are clicked. + */ +public interface IDisableableMachine +{ + + /** + * Sets the machine to disabled or enabled. + * + * @param index the index + * @param disabled whether or not the machine should be set to the enabled + * or disabled state + */ + void setDisabled(int index, boolean disabled); + + /** + * Get the current state of the machine (enabled/disabled). + * + * @param index the index + * @return the current state of the machine (enabled/disabled) + */ + boolean getDisabled(int index); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IFuelDock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IFuelDock.java new file mode 100644 index 00000000..cd8ea052 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/IFuelDock.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +import java.util.HashSet; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +/** + * The Interface IFuelDock. + */ +public interface IFuelDock +{ + + /** + * Gets the connected tiles. + * + * @return the connected tiles + */ + HashSet getConnectedTiles(); + + /** + * Checks if is block attachable. + * + * @param world the world + * @param pos the pos + * @return true, if is block attachable + */ + boolean isBlockAttachable(IBlockAccess world, BlockPos pos); + + /** + * Gets the docked entity. + * + * @return the docked entity + */ + IDockable getDockedEntity(); + + /** + * Dock entity. + * + * @param entity the entity + */ + void dockEntity(IDockable entity); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILandingPadAttachable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILandingPadAttachable.java new file mode 100644 index 00000000..9d2a6338 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILandingPadAttachable.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +/** + * Implement into tile entities that can attack to landing pads. It is + * recommended that you check if the landing pad at the provided coordinates is + * valid for connection. + */ +public interface ILandingPadAttachable +{ + + /** + * Determines if this tile can connect to the landing pad at the provided + * coordinates. + * + * @param world World the tiles are located in + * @param pos Coordinate the landing pad is located at + * @return True if the block can attach to the landing pad, false if not + */ + boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILockable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILockable.java new file mode 100644 index 00000000..7027e525 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ILockable.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +/** + * The Interface ILockable. + */ +public interface ILockable +{ + + /** + * Gets the locked. + * + * @return the locked + */ + boolean getLocked(); + + /** + * Clear locked inventory. + */ + void clearLockedInventory(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ITileClientUpdates.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ITileClientUpdates.java new file mode 100644 index 00000000..cc8b874d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/ITileClientUpdates.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.tile; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/*** + * Sends basic tile load configuration data e.g. facing (if not obtainable from + * blockState) to the client. + * + * IMPORTANT: call this.clientValidate() from the tile's validate() method + */ +public interface ITileClientUpdates +{ + + /** + * The supplied data array of ints ALWAYS has length 4. You don't have to + * use all of them! + * + * @param data the data + */ + void buildDataPacket(int[] data); + + /** + * The supplied data list has 4 ints of data to use at positions 1 through + * 4. + * + * @param data the data + */ + @SideOnly(Side.CLIENT) + void updateClient(List data); + + /** + * Implement validate() in the tile and call this!. + */ + default void clientOnLoad() + { + TileEntity tile = (TileEntity) this; + if (tile.getWorld().isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REQUEST_MACHINE_DATA, tile.getWorld(), new Object[] + {tile.getPos()})); + } + } + + /** + * Do not override unless you want to use a custom data packet with more + * than 4 ints of data. (If overriding this you must override all other + * methods in ITileClientUpdates as well ... in which case, why are you + * using it?) + * + * @param player the player + */ + default void sendUpdateToClient(EntityPlayerMP player) + { + int[] data = new int[4]; + this.buildDataPacket(data); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_MACHINE_DATA, GCCoreUtil.getDimensionID(player.world), new Object[] + {((TileEntity) this).getPos(), data[0], data[1], data[2], data[3]}), player); + } + + /** + * Used to push updates out to clients. + */ + default void updateAllInDimension() + { + int[] data = new int[4]; + this.buildDataPacket(data); + int dimID = GCCoreUtil.getDimensionID(((TileEntity) this).getWorld()); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(EnumSimplePacket.C_UPDATE_MACHINE_DATA, dimID, new Object[] + {((TileEntity) this).getPos(), data[0], data[1], data[2], data[3]}), dimID); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/package-info.java new file mode 100644 index 00000000..61bc2ab3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/tile/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|tile") +package micdoodle8.mods.galacticraft.api.tile; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/NetworkType.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/NetworkType.java new file mode 100644 index 00000000..531517bc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/NetworkType.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission; + +public enum NetworkType +{ + POWER, FLUID, SOLAR_MODULE +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IElectricityNetwork.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IElectricityNetwork.java new file mode 100644 index 00000000..33d35869 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IElectricityNetwork.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import net.minecraft.tileentity.TileEntity; + +/** + * The Electrical Network in interface form. + * + * @author Calclavia + */ +public interface IElectricityNetwork extends IGridNetwork +{ + + /** + * Produce energy into the network + * + * @param energy Amount of energy to send into the network + * @param doReceive Whether to put energy into the network (true) or just + * simulate (false) + * @param tierGC The tier of the producing tile (must be 1 or 2) + * @param ignoreTiles TileEntities to ignore for energy transfers. + * @return Amount of energy REMAINING from the passed energy parameter + */ + float produce(float energy, boolean doReceive, int tierGC, TileEntity... ignoreTiles); + + /** + * Get the total energy request in this network + * + * @param ignoreTiles Tiles to ignore in the request calculations (NOTE: + * only used in initial (internal) check. + * @return Amount of energy requested in this network + */ + float getRequest(TileEntity... ignoreTiles); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IGridNetwork.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IGridNetwork.java new file mode 100644 index 00000000..051b8501 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IGridNetwork.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import java.util.Set; + +/** + * Implement this in your network class/interface if you plan to have your own network defined by specific conductors and acceptors. + * + * @param - the class/interface Type value in which you implement this + * @param - the class/interface Type which makes up the network's conductor Set + * @param - the class/interface Type which makes up the network's acceptor Set + * + * @author aidancbrady + */ +public interface IGridNetwork +{ + + /** + * Refreshes and cleans up conductor references of this network, as well as updating the acceptor set. + */ + void refresh(); + + /** + * Gets the Set of conductors that make up this network. + * + * @return conductor set + */ + Set getTransmitters(); + + /** + * Creates a new network that makes up the current network and the network defined in the parameters. Be sure to refresh the new network inside this method. + * + * @param network network to merge + * + * @return The merged network + */ + N merge(N network); + + /** + * Splits a network by the conductor referenced in the parameters. It will then create and refresh the new independent networks possibly created by this operation. + * + * @param connection the conductor connection to split the network from + */ + void split(C connection); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IOxygenNetwork.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IOxygenNetwork.java new file mode 100644 index 00000000..2e9a931c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IOxygenNetwork.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import net.minecraft.tileentity.TileEntity; + +/** + * The Oxygen Network in interface form. + * + * @author Calclavia + */ +public interface IOxygenNetwork extends IGridNetwork +{ + + /** + * Produces oxygen in this oxygen network. + * + * @return Rejected energy in Joules. + */ + float produce(float sendAmount, TileEntity... ignoreTiles); + + /** + * Gets the total amount of oxygen requested/needed in the electricity + * network. + * + * @param ignoreTiles The TileEntities to ignore during this calculation + * (optional). + */ + float getRequest(TileEntity... ignoreTiles); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IPathCallBack.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IPathCallBack.java new file mode 100644 index 00000000..89c7c1fa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IPathCallBack.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import java.util.Set; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; + +public interface IPathCallBack +{ + + /** + * @param finder - The Pathfinder object. + * @param currentNode - The node being iterated through. + * @return A set of nodes connected to the currentNode. Essentially one + * should return a set of neighboring nodes. + */ + Set getConnectedNodes(Pathfinder finder, BlockVec3 currentNode); + + /** + * Called when looping through nodes. + * + * @param finder - The Pathfinder. + * @param node - The node being searched. + * @return True to stop the path finding operation. + */ + boolean onSearch(Pathfinder finder, BlockVec3 node); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IReflectorNode.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IReflectorNode.java new file mode 100644 index 00000000..54e16fcd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/IReflectorNode.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +public interface IReflectorNode +{ + + Vector3 getInputPoint(); + + Vector3 getOutputPoint(boolean offset); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/Pathfinder.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/Pathfinder.java new file mode 100644 index 00000000..b23749a0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/Pathfinder.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import java.util.HashSet; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; + +/** + * A class that allows flexible ai for different positions. Compared to AStar + * ai, this version is faster but does not calculated the most optimal path. + * + * @author Calclavia + */ +public class Pathfinder +{ + + /** + * A ai call back interface used to call back on paths. + */ + public IPathCallBack callBackCheck; + + /** + * A list of nodes that the pathfinder already went through. + */ + public Set closedSet; + + /** + * The resulted path found by the pathfinder. Could be null if no path was + * found. + */ + public Set results; + + public Pathfinder(IPathCallBack callBack) + { + this.callBackCheck = callBack; + this.reset(); + } + + /** + * @return True on success finding, false on failure. + */ + public boolean findNodes(BlockVec3 currentNode) + { + this.closedSet.add(currentNode); + + if (this.callBackCheck.onSearch(this, currentNode)) + { + return false; + } + + for (BlockVec3 node : this.callBackCheck.getConnectedNodes(this, currentNode)) + { + if (!this.closedSet.contains(node)) + { + if (this.findNodes(node)) + { + return true; + } + } + } + + return false; + } + + /** + * Called to execute the ai operation. + */ + public Pathfinder init(BlockVec3 startNode) + { + this.findNodes(startNode); + return this; + } + + public Pathfinder reset() + { + this.closedSet = new HashSet(); + this.results = new HashSet(); + return this; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/PathfinderChecker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/PathfinderChecker.java new file mode 100644 index 00000000..9b85f347 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/PathfinderChecker.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; + +/** + * Check if a conductor connects with another. + * + * @author Calclavia + */ +public class PathfinderChecker extends Pathfinder +{ + + public PathfinderChecker(final World world, final INetworkConnection targetConnector, final NetworkType networkType, final INetworkConnection... ignoreConnector) + { + super(new IPathCallBack() + { + + @Override + public Set getConnectedNodes(Pathfinder finder, BlockVec3 currentNode) + { + Set neighbors = new HashSet(); + + for (int i = 0; i < 6; i++) + { + EnumFacing direction = EnumFacing.byIndex(i); + BlockVec3 position = currentNode.clone().modifyPositionFromSide(direction); + TileEntity connectedBlock = position.getTileEntity(world); + + if (connectedBlock instanceof ITransmitter && !Arrays.asList(ignoreConnector).contains(connectedBlock)) + { + if (((ITransmitter) connectedBlock).canConnect(direction.getOpposite(), networkType)) + { + neighbors.add(position); + } + } + } + + return neighbors; + } + + @Override + public boolean onSearch(Pathfinder finder, BlockVec3 node) + { + if (node.getTileEntity(world) == targetConnector) + { + finder.results.add(node); + return true; + } + + return false; + } + }); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/package-info.java new file mode 100644 index 00000000..6e2619be --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/grid/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|transmission|grid") +package micdoodle8.mods.galacticraft.api.transmission.grid; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/package-info.java new file mode 100644 index 00000000..db66d0cf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|transmission") +package micdoodle8.mods.galacticraft.api.transmission; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IBufferTransmitter.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IBufferTransmitter.java new file mode 100644 index 00000000..fbc3d63d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IBufferTransmitter.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +public interface IBufferTransmitter extends ITransmitter +{ + + N getBuffer(); + + int getCapacity(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConductor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConductor.java new file mode 100644 index 00000000..f6449bcd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConductor.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; + +public interface IConductor extends ITransmitter +{ + + /** + * @return The tier of this conductor - must be 1 or 2 + */ + int getTierGC(); + + /** + * @return This conductor's electricity network. + */ + @Override + IElectricityNetwork getNetwork(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConnector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConnector.java new file mode 100644 index 00000000..58266057 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IConnector.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import net.minecraft.util.EnumFacing; + +/** + * Applied to TileEntities that can connect to an electrical OR oxygen network. + * + * @author Calclavia, micdoodle8 + */ +public interface IConnector +{ + + /** + * @return If the connection is possible. + */ + boolean canConnect(EnumFacing direction, NetworkType type); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectrical.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectrical.java new file mode 100644 index 00000000..16885cd9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectrical.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import net.minecraft.util.EnumFacing; + +/** + * Applied to all TileEntities that can interact with electricity. + * + * @author Calclavia, King_Lemming + */ +public interface IElectrical extends IConnector +{ + + /** + * Adds electricity to an block. Returns the quantity of electricity that + * was accepted. This should always return 0 if the block cannot be + * externally charged. + * + * @param from Orientation the electricity is sent in from. + * @param receive Maximum amount of electricity to be sent into the block. + * @param tierProduced The tier of electricity which is being provided (must + * be 1 or 2) + * @param doReceive If false, the charge will only be simulated. + * @return Amount of energy that was accepted by the block. + */ + float receiveElectricity(EnumFacing from, float receive, int tierProduced, boolean doReceive); + + /** + * Adds electricity to an block. Returns the ElectricityPack, the + * electricity provided. This should always return null if the block cannot + * be externally discharged. + * + * @param from Orientation the electricity is requested from. + * @param request Maximum amount of energy to be sent into the block. + * @param doProvide If false, the charge will only be simulated. + * @return Amount of energy that was given out by the block. + */ + float provideElectricity(EnumFacing from, float request, boolean doProvide); + + /** + * @return How much energy does this TileEntity want? + */ + float getRequest(EnumFacing direction); + + /** + * @return How much energy does this TileEntity want to provide? + */ + float getProvide(EnumFacing direction); + + /** + * Gets the tier of this TileEntity. + * + * @return The tier, should be 1 or 2 + */ + int getTierGC(); + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectricalStorage.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectricalStorage.java new file mode 100644 index 00000000..be3a5e0e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IElectricalStorage.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +/** + * This interface is to be applied to all TileEntities which stores electricity + * within them. + * + * @author Calclavia + */ +public interface IElectricalStorage +{ + + /** + * Sets the amount of joules this unit has stored. + */ + void setEnergyStored(float energy); + + /** + * * @return Get the amount of energy currently stored in the block. + */ + float getEnergyStored(); + + /** + * @return Get the max amount of energy that can be stored in the block. + */ + float getMaxEnergyStored(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkConnection.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkConnection.java new file mode 100644 index 00000000..a90bd181 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkConnection.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import net.minecraft.tileentity.TileEntity; + +/** + * Applied to TileEntities. + * + * @author Calclavia + */ +public interface INetworkConnection extends IConnector +{ + + /** + * Gets a list of all the connected TileEntities that this conductor is + * connected to. The array's length should be always the 6 adjacent wires. + * + * @return + */ + TileEntity[] getAdjacentConnections(); + + /** + * Refreshes the conductor + */ + void refresh(); + + void onNetworkChanged(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkProvider.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkProvider.java new file mode 100644 index 00000000..ecd3c148 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/INetworkProvider.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; + +public interface INetworkProvider +{ + + IGridNetwork getNetwork(); + + boolean hasNetwork(); + + void setNetwork(IGridNetwork network); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenReceiver.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenReceiver.java new file mode 100644 index 00000000..d698e4b4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenReceiver.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import net.minecraft.util.EnumFacing; + +/** + * Applied to all TileEntities that can interact with oxygen. + */ +public interface IOxygenReceiver extends IConnector +{ + + boolean shouldPullOxygen(); + + /** + * Adds oxygen reception to a tile entity. Returns the quantity of oxygen + * that was accepted. This should always return 0 if the block cannot + * receive oxygen. + * + * @param from Orientation the oxygen is sent in from. + * @param receive Maximum amount of oxygen to be sent into the block. + * @param doReceive If false, the transfer will only be simulated. + * @return Amount of oxygen that was accepted by the block. + */ + int receiveOxygen(EnumFacing from, int receive, boolean doReceive); + + /** + * Adds oxygen provision to a block. Returns the quantity of oxygen + * provided. This should always return 0 if the tile entity cannot provide + * oxygen. + * + * @param from Orientation the oxygen is requested from. + * @param request Maximum amount of oxygen to be pushed out of the block. + * @param doProvide If false, the transfer will only be simulated. + * @return Amount of oxygen that was given out by the block. + */ + int provideOxygen(EnumFacing from, int request, boolean doProvide); + + /** + * @return How much oxygen does this TileEntity want? + */ + int getOxygenRequest(EnumFacing direction); + + /** + * @return How much oxygen does this TileEntity want to provide? + */ + int getOxygenProvide(EnumFacing direction); + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenStorage.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenStorage.java new file mode 100644 index 00000000..be38e41b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/IOxygenStorage.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +/** + * This interface is to be applied to all TileEntities which have Oxygen stores + */ +public interface IOxygenStorage +{ + + /** + * Sets the amount of oxygen this unit has stored. + */ + void setOxygenStored(int oxygen); + + /** + * * @return Get the amount of oxygen currently stored in the block. + */ + int getOxygenStored(); + + /** + * @return Get the max amount of oxygen that can be stored in the block. + */ + int getMaxOxygenStored(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/ITransmitter.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/ITransmitter.java new file mode 100644 index 00000000..faa1f636 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/ITransmitter.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; + +public interface ITransmitter extends INetworkProvider, INetworkConnection +{ + + NetworkType getNetworkType(); + + boolean canTransmit(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/package-info.java new file mode 100644 index 00000000..71148570 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/transmission/tile/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|trasmission|tile") +package micdoodle8.mods.galacticraft.api.transmission.tile; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/util/stream/CelestialCollector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/util/stream/CelestialCollector.java new file mode 100644 index 00000000..163ddddf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/util/stream/CelestialCollector.java @@ -0,0 +1,93 @@ +package micdoodle8.mods.galacticraft.api.util.stream; + +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumSet; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collector; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; +import micdoodle8.mods.galacticraft.core.util.list.CelestialList; + +import lombok.experimental.UtilityClass; + +import static java.util.stream.Collector.Characteristics.IDENTITY_FINISH; + +@UtilityClass +public final class CelestialCollector +{ + static final Set CH_ID = from(IDENTITY_FINISH); + + static final Set from(Collector.Characteristics... arr) + { + return Collections.unmodifiableSet(EnumSet.of(arr[0], Arrays.copyOfRange(arr, 1, arr.length))); + } + + @SuppressWarnings("unchecked") + private static Function castingIdentity() + { + return i -> (R) i; + } + + //@noformat + static class AccumulatorImpl implements Collector { + private final Supplier supplier; + private final BiConsumer accumulator; + private final BinaryOperator combiner; + private final Function finisher; + private final Set characteristics; + + AccumulatorImpl(Supplier supplier, + BiConsumer accumulator, + BinaryOperator combiner, + Function finisher, + Set characteristics) { + this.supplier = supplier; + this.accumulator = accumulator; + this.combiner = combiner; + this.finisher = finisher; + this.characteristics = characteristics; + } + + AccumulatorImpl(Supplier supplier, + BiConsumer accumulator, + BinaryOperator combiner, + Set characteristics) { + this(supplier, accumulator, combiner, castingIdentity(), characteristics); + } + + @Override + public BiConsumer accumulator() { + return accumulator; + } + + @Override + public Supplier supplier() { + return supplier; + } + + @Override + public BinaryOperator combiner() { + return combiner; + } + + @Override + public Function finisher() { + return finisher; + } + + @Override + public Set characteristics() { + return characteristics; + } + } + + public static + Collector> toList() { + return new AccumulatorImpl<>((Supplier>) CelestialList::new, CelestialList::add, (left, right) -> { left.addAll(right); return left; }, CH_ID); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockTuple.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockTuple.java new file mode 100644 index 00000000..a8a56667 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockTuple.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class BlockTuple +{ + + public Block block; + public int meta; + + public BlockTuple(Block b, int m) + { + this.block = b; + this.meta = m; + } + + @Override + public String toString() + { + Item item = Item.getItemFromBlock(this.block); + if (item == null || item == Item.getItemFromBlock(Blocks.AIR)) + return this.block.getTranslationKey() + ".name"; + return new ItemStack(item, 1, this.meta).getTranslationKey() + ".name"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3.java new file mode 100644 index 00000000..44afa339 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3.java @@ -0,0 +1,683 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ReportedException; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.ChunkProviderServer; + +/* BlockVec3 is similar to galacticraft.api.vector.Vector3? + * + * But for speed it uses integer arithmetic not doubles, for block coordinates + * This reduces unnecessary type conversion between integers and doubles and back again. + * (Minecraft block coordinates are always integers, only entity coordinates are doubles.) + * + */ +public class BlockVec3 implements Cloneable +{ + + public int x; + public int y; + public int z; + public int sideDoneBits = 0; + private static Chunk chunkCached; + public static int chunkCacheDim = Integer.MAX_VALUE; + private static int chunkCacheX = 1876000; // outside the world edge + private static int chunkCacheZ = 1876000; // outside the world edge + private static Chunk chunkCached_Client; + public static int chunkCacheDim_Client = Integer.MAX_VALUE; + private static int chunkCacheX_Client = 1876000; // outside the world edge + private static int chunkCacheZ_Client = 1876000; // outside the world edge + // INVALID_VECTOR is used in cases where a null vector cannot be used + public static final BlockVec3 INVALID_VECTOR = new BlockVec3(-1, -1, -1); + + public BlockVec3() + { + this(0, 0, 0); + } + + public BlockVec3(BlockPos pos) + { + this(pos.getX(), pos.getY(), pos.getZ()); + } + + public BlockVec3(int x, int y, int z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public BlockVec3(Entity par1) + { + this.x = (int) Math.floor(par1.posX); + this.y = (int) Math.floor(par1.posY); + this.z = (int) Math.floor(par1.posZ); + } + + public BlockVec3(TileEntity par1) + { + this.x = par1.getPos().getX(); + this.y = par1.getPos().getY(); + this.z = par1.getPos().getZ(); + } + + /** + * Makes a new copy of this Vector. Prevents variable referencing problems. + */ + @Override + public final BlockVec3 clone() + { + return new BlockVec3(this.x, this.y, this.z); + } + + public BlockPos toBlockPos() + { + return new BlockPos(this.x, this.y, this.z); + } + + /** + * Get block ID at the BlockVec3 coordinates, with a forced chunk load if + * the coordinates are unloaded. + * + * @param world + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + */ + public IBlockState getBlockState(World world) + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.isRemote) + { + if (BlockVec3.chunkCacheX_Client == chunkx && BlockVec3.chunkCacheZ_Client == chunkz && BlockVec3.chunkCacheDim_Client == world.provider.getDimension() + && BlockVec3.chunkCached_Client.isLoaded()) + { + return BlockVec3.chunkCached_Client.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached_Client = chunk; + BlockVec3.chunkCacheDim_Client = world.provider.getDimension(); + BlockVec3.chunkCacheX_Client = chunkx; + BlockVec3.chunkCacheZ_Client = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // this will be within the same chunk + if (BlockVec3.chunkCacheX == chunkx && BlockVec3.chunkCacheZ == chunkz && BlockVec3.chunkCacheDim == world.provider.getDimension() && BlockVec3.chunkCached.isLoaded()) + { + return BlockVec3.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached = chunk; + BlockVec3.chunkCacheDim = world.provider.getDimension(); + BlockVec3.chunkCacheX = chunkx; + BlockVec3.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + /** + * Get block ID at the BlockVec3 coordinates without forcing a chunk load. + * + * @param world + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + * Returns Blocks.BEDROCK if the coordinates being checked are in an + * unloaded chunk + */ + public IBlockState getBlockState_noChunkLoad(World world) + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.getChunkProvider().getLoadedChunk(chunkx, chunkz) != null) + { + if (world.isRemote) + { + if (BlockVec3.chunkCacheX_Client == chunkx && BlockVec3.chunkCacheZ_Client == chunkz && BlockVec3.chunkCacheDim_Client == world.provider.getDimension() + && BlockVec3.chunkCached_Client.isLoaded()) + { + return BlockVec3.chunkCached_Client.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached_Client = chunk; + BlockVec3.chunkCacheDim_Client = world.provider.getDimension(); + BlockVec3.chunkCacheX_Client = chunkx; + BlockVec3.chunkCacheZ_Client = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // calls to + // this will be within the same chunk + if (BlockVec3.chunkCacheX == chunkx && BlockVec3.chunkCacheZ == chunkz && BlockVec3.chunkCacheDim == world.provider.getDimension() && BlockVec3.chunkCached.isLoaded()) + { + return BlockVec3.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached = chunk; + BlockVec3.chunkCacheDim = world.provider.getDimension(); + BlockVec3.chunkCacheX = chunkx; + BlockVec3.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // Chunk doesn't exist - meaning, it is not loaded + return Blocks.BEDROCK.getDefaultState(); + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + public IBlockState getBlockState(IBlockAccess par1iBlockAccess) + { + return par1iBlockAccess.getBlockState(new BlockPos(this.x, this.y, this.z)); + } + + /** + * Get block ID at the BlockVec3 coordinates without forcing a chunk load. + * Only call this 'safe' version if x and z coordinates are within the + * Minecraft world map (-30m to +30m) + * + * @param world + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256. Returns Blocks.BEDROCK if the coordinates being + * checked are in an unloaded chunk + */ + @Nullable + public IBlockState getBlockStateSafe_noChunkLoad(World world) + { + if (this.y < 0 || this.y >= 256) + { + return null; + } + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.getChunkProvider().getLoadedChunk(chunkx, chunkz) != null) + { + if (world.isRemote) + { + if (BlockVec3.chunkCacheX_Client == chunkx && BlockVec3.chunkCacheZ_Client == chunkz && BlockVec3.chunkCacheDim_Client == world.provider.getDimension() + && BlockVec3.chunkCached_Client.isLoaded()) + { + return BlockVec3.chunkCached_Client.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached_Client = chunk; + BlockVec3.chunkCacheDim_Client = world.provider.getDimension(); + BlockVec3.chunkCacheX_Client = chunkx; + BlockVec3.chunkCacheZ_Client = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // calls to + // this will be within the same chunk + if (BlockVec3.chunkCacheX == chunkx && BlockVec3.chunkCacheZ == chunkz && BlockVec3.chunkCacheDim == world.provider.getDimension() && BlockVec3.chunkCached.isLoaded()) + { + return BlockVec3.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } + final Chunk chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached = chunk; + BlockVec3.chunkCacheDim = world.provider.getDimension(); + BlockVec3.chunkCacheX = chunkx; + BlockVec3.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + // Chunk doesn't exist - meaning, it is not loaded + return Blocks.BEDROCK.getDefaultState(); + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + public BlockVec3 translate(BlockVec3 par1) + { + this.x += par1.x; + this.y += par1.y; + this.z += par1.z; + return this; + } + + public BlockVec3 translate(int par1x, int par1y, int par1z) + { + this.x += par1x; + this.y += par1y; + this.z += par1z; + return this; + } + + public static BlockVec3 add(BlockVec3 par1, BlockVec3 a) + { + return new BlockVec3(par1.x + a.x, par1.y + a.y, par1.z + a.z); + } + + public BlockVec3 subtract(BlockVec3 par1) + { + this.x -= par1.x; + this.y -= par1.y; + this.z -= par1.z; + + return this; + } + + public BlockVec3 scale(int par1) + { + this.x *= par1; + this.y *= par1; + this.z *= par1; + + return this; + } + + public BlockVec3 modifyPositionFromSide(EnumFacing side, int amount) + { + switch (side.ordinal()) + { + case 0: + this.y -= amount; + break; + case 1: + this.y += amount; + break; + case 2: + this.z -= amount; + break; + case 3: + this.z += amount; + break; + case 4: + this.x -= amount; + break; + case 5: + this.x += amount; + break; + } + return this; + } + + public BlockVec3 newVecSide(int side) + { + final BlockVec3 vec = new BlockVec3(this.x, this.y, this.z); + vec.sideDoneBits = (1 << (side ^ 1)) + (side << 6); + switch (side) + { + case 0: + vec.y--; + return vec; + case 1: + vec.y++; + return vec; + case 2: + vec.z--; + return vec; + case 3: + vec.z++; + return vec; + case 4: + vec.x--; + return vec; + case 5: + vec.x++; + return vec; + } + return vec; + } + + public BlockVec3 modifyPositionFromSide(EnumFacing side) + { + return this.modifyPositionFromSide(side, 1); + } + + @Override + public int hashCode() + { + // Upgraded hashCode calculation from the one in VecDirPair to something + // a bit stronger and faster + return ((this.y * 379 + this.x) * 373 + this.z) * 7; + } + + @Override + public boolean equals(Object o) + { + if (o instanceof BlockVec3) + { + final BlockVec3 vector = (BlockVec3) o; + return this.x == vector.x && this.y == vector.y && this.z == vector.z; + } + + return false; + } + + @Override + public String toString() + { + return "[" + this.x + "," + this.y + "," + this.z + "]"; + } + + /** + * This will load the chunk. + * + * @param world + * @return TileEntity + */ + public TileEntity getTileEntity(IBlockAccess world) + { + return world.getTileEntity(new BlockPos(this.x, this.y, this.z)); + } + + /** + * No chunk load: returns null if chunk to side is unloaded + * + * @param world + * @param side + * @return TileEntity + */ + public TileEntity getTileEntityOnSide(World world, EnumFacing side) + { + if (side == null) + { + return null; + } + + int x = this.x; + int y = this.y; + int z = this.z; + switch (side.ordinal()) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return null; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.isBlockLoaded(pos, false) ? world.getTileEntity(pos) : null; + } + + /** + * No chunk load: returns null if chunk to side is unloaded + * + * @param world + * @param side + * @return TileEntity + */ + public TileEntity getTileEntityOnSide(World world, int side) + { + int x = this.x; + int y = this.y; + int z = this.z; + switch (side) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return null; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.isBlockLoaded(pos, false) ? world.getTileEntity(pos) : null; + } + + /** + * This will load the chunk to the side. + * + * @param world + * @param side + * @return boolean true if face is solid, false if not solid + */ + public boolean blockOnSideHasSolidFace(World world, int side) + { + int x = this.x; + int y = this.y; + int z = this.z; + switch (side) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return false; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.getBlockState(pos).getBlock().isSideSolid(world.getBlockState(pos), world, pos, EnumFacing.byIndex(side ^ 1)); + } + + /** + * No chunk load: returns null if chunk is unloaded + * + * @param world + * @param side + * @return Block + */ + public Block getBlockOnSide(World world, int side) + { + int x = this.x; + int y = this.y; + int z = this.z; + switch (side) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return null; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.isBlockLoaded(pos, false) ? world.getBlockState(pos).getBlock() : null; + } + + public int getBlockMetadata(IBlockAccess world) + { + final IBlockState state = world.getBlockState(new BlockPos(x, y, z)); + return state.getBlock().getMetaFromState(state); + } + + public static BlockVec3 readFromNBT(NBTTagCompound nbtCompound) + { + final BlockVec3 tempVector = new BlockVec3(); + tempVector.x = nbtCompound.getInteger("x"); + tempVector.y = nbtCompound.getInteger("y"); + tempVector.z = nbtCompound.getInteger("z"); + return tempVector; + } + + public int distanceTo(BlockVec3 vector) + { + int var2 = vector.x - this.x; + int var4 = vector.y - this.y; + int var6 = vector.z - this.z; + return MathHelper.floor(Math.sqrt(var2 * var2 + var4 * var4 + var6 * var6)); + } + + public int distanceSquared(BlockVec3 vector) + { + int var2 = vector.x - this.x; + int var4 = vector.y - this.y; + int var6 = vector.z - this.z; + return var2 * var2 + var4 * var4 + var6 * var6; + } + + public NBTTagCompound writeToNBT(NBTTagCompound tag) + { + tag.setInteger("x", this.x); + tag.setInteger("y", this.y); + tag.setInteger("z", this.z); + return tag; + } + + public BlockVec3(NBTTagCompound tag) + { + this.x = tag.getInteger("x"); + this.y = tag.getInteger("y"); + this.z = tag.getInteger("z"); + } + + public NBTTagCompound writeToNBT(NBTTagCompound tag, String prefix) + { + tag.setInteger(prefix + "_x", this.x); + tag.setInteger(prefix + "_y", this.y); + tag.setInteger(prefix + "_z", this.z); + return tag; + } + + public static BlockVec3 readFromNBT(NBTTagCompound tag, String prefix) + { + Integer readX = tag.getInteger(prefix + "_x"); + if (readX == 0) + return null; + Integer readY = tag.getInteger(prefix + "_y"); + if (readY == 0) + return null; + Integer readZ = tag.getInteger(prefix + "_z"); + if (readZ == 0) + return null; + return new BlockVec3(readX, readY, readZ); + } + + public double getMagnitude() + { + return Math.sqrt(this.getMagnitudeSquared()); + } + + public int getMagnitudeSquared() + { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + + public void setBlock(World worldObj, IBlockState block) + { + worldObj.setBlockState(new BlockPos(x, y, z), block, 3); + } + + public boolean blockExists(World world) + { + return world.isBlockLoaded(new BlockPos(this.x, this.y, this.z), false); + } + + public void setSideDone(int side) + { + this.sideDoneBits |= 1 << side; + } + + public TileEntity getTileEntityForce(World world) + { + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + + if (world.getChunkProvider().getLoadedChunk(chunkx, chunkz) != null) + return world.getTileEntity(this.toBlockPos()); + + Chunk chunk = ((ChunkProviderServer) world.getChunkProvider()).loadChunk(chunkx, chunkz); + return chunk.getTileEntity(new BlockPos(this.x & 15, this.y, this.z & 15), Chunk.EnumCreateEntityType.IMMEDIATE); + } + + public Vector3 midPoint() + { + return new Vector3(this.x + 0.5, this.y + 0.5, this.z + 0.5); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3Dim.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3Dim.java new file mode 100644 index 00000000..259adee9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/BlockVec3Dim.java @@ -0,0 +1,408 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ReportedException; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/* BlockVec3 is similar to galacticraft.api.vector.Vector3? + * + * But for speed it uses integer arithmetic not doubles, for block coordinates + * This reduces unnecessary type conversion between integers and doubles and back again. + * (Minecraft block coordinates are always integers, only entity coordinates are doubles.) + * + */ +public class BlockVec3Dim implements Cloneable +{ + + public int x; + public int y; + public int z; + public int dim; + + private static Chunk chunkCached; + public static int chunkCacheDim = Integer.MAX_VALUE; + private static int chunkCacheX = 1876000; // outside the world edge + private static int chunkCacheZ = 1876000; // outside the world edge + // INVALID_VECTOR is used in cases where a null vector cannot be used + public static final BlockVec3Dim INVALID_VECTOR = new BlockVec3Dim(-1, -1, -1, -2); + + public BlockVec3Dim() + { + this(0, 0, 0, 0); + } + + public BlockVec3Dim(int x, int y, int z, int d) + { + this.x = x; + this.y = y; + this.z = z; + this.dim = d; + } + + public BlockVec3Dim(Entity par1) + { + this.x = (int) Math.floor(par1.posX); + this.y = (int) Math.floor(par1.posY); + this.z = (int) Math.floor(par1.posZ); + this.dim = par1.dimension; + } + + public BlockVec3Dim(TileEntity par1) + { + this.x = par1.getPos().getX(); + this.y = par1.getPos().getY(); + this.z = par1.getPos().getZ(); + this.dim = par1.getWorld().provider.getDimension(); + } + + public BlockVec3Dim(BlockPos pos, int dimensionId) + { + this(pos.getX(), pos.getY(), pos.getZ(), dimensionId); + } + + /** + * Makes a new copy of this Vector. Prevents variable referencing problems. + */ + @Override + public final BlockVec3Dim clone() + { + return new BlockVec3Dim(this.x, this.y, this.z, this.dim); + } + + /** + * Get block ID at the BlockVec3Dim coordinates, with a forced chunk load if + * the coordinates are unloaded. Only works server-side. + * + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + */ + public IBlockState getBlockState() + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + World world = getWorldForId(this.dim); + if (world == null) + return null; + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + // In a typical inner loop, 80% of the time consecutive calls to + // this will be within the same chunk + if (BlockVec3Dim.chunkCacheX == chunkx && BlockVec3Dim.chunkCacheZ == chunkz && BlockVec3Dim.chunkCacheDim == world.provider.getDimension() && BlockVec3Dim.chunkCached.isLoaded()) + { + return BlockVec3Dim.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } else + { + Chunk chunk = null; + chunk = world.getChunk(chunkx, chunkz); + BlockVec3Dim.chunkCached = chunk; + BlockVec3Dim.chunkCacheDim = world.provider.getDimension(); + BlockVec3Dim.chunkCacheX = chunkx; + BlockVec3Dim.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + /** + * Get block ID at the BlockVec3 coordinates without forcing a chunk load. + * + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + * Returns Blocks.BEDROCK if the coordinates being checked are in an + * unloaded chunk + */ + public IBlockState getBlockState_noChunkLoad() + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + World world = getWorldForId(this.dim); + if (world == null) + return null; + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.getChunkProvider().getLoadedChunk(chunkx, chunkz) != null) + { + // In a typical inner loop, 80% of the time consecutive calls to + // this will be within the same chunk + if (BlockVec3Dim.chunkCacheX == chunkx && BlockVec3Dim.chunkCacheZ == chunkz && BlockVec3Dim.chunkCacheDim == world.provider.getDimension() && BlockVec3Dim.chunkCached.isLoaded()) + { + return BlockVec3Dim.chunkCached.getBlockState(this.x & 15, this.y, this.z & 15); + } else + { + Chunk chunk = null; + chunk = world.getChunk(chunkx, chunkz); + BlockVec3Dim.chunkCached = chunk; + BlockVec3Dim.chunkCacheDim = world.provider.getDimension(); + BlockVec3Dim.chunkCacheX = chunkx; + BlockVec3Dim.chunkCacheZ = chunkz; + return chunk.getBlockState(this.x & 15, this.y, this.z & 15); + } + } + // Chunk doesn't exist - meaning, it is not loaded + return Blocks.BEDROCK.getDefaultState(); + } catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Requested block coordinates"); + crashreportcategory.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + public Block getBlock() + { + World world = this.getWorldForId(this.dim); + if (world == null) + return null; + return world.getBlockState(new BlockPos(this.x, this.y, this.z)).getBlock(); + } + + public BlockVec3Dim modifyPositionFromSide(EnumFacing side, int amount) + { + switch (side.ordinal()) + { + case 0: + this.y -= amount; + break; + case 1: + this.y += amount; + break; + case 2: + this.z -= amount; + break; + case 3: + this.z += amount; + break; + case 4: + this.x -= amount; + break; + case 5: + this.x += amount; + break; + } + return this; + } + + public BlockVec3Dim newVecSide(int side) + { + BlockVec3Dim vec = new BlockVec3Dim(this.x, this.y, this.z, this.dim); + switch (side) + { + case 0: + vec.y--; + return vec; + case 1: + vec.y++; + return vec; + case 2: + vec.z--; + return vec; + case 3: + vec.z++; + return vec; + case 4: + vec.x--; + return vec; + case 5: + vec.x++; + return vec; + } + return vec; + } + + public BlockVec3Dim modifyPositionFromSide(EnumFacing side) + { + return this.modifyPositionFromSide(side, 1); + } + + @Override + public int hashCode() + { + return (((this.z * 431 + this.x) * 379 + this.y) * 373 + this.dim) * 7; + } + + @Override + public boolean equals(Object o) + { + if (o instanceof BlockVec3Dim) + { + BlockVec3Dim vector = (BlockVec3Dim) o; + return this.x == vector.x && this.y == vector.y && this.z == vector.z && this.dim == vector.dim; + } + + return false; + } + + @Override + public String toString() + { + return "BlockVec3 " + this.dim + ":[" + this.x + "," + this.y + "," + this.z + "]"; + } + + /** + * This will load the chunk - use getTileEntityNoLoad() if just updating + * things if present. + */ + public TileEntity getTileEntity() + { + World world = this.getWorldForId(this.dim); + if (world == null) + return null; + return world.getTileEntity(new BlockPos(this.x, this.y, this.z)); + } + + public TileEntity getTileEntityNoLoad() + { + World world = getWorldForId(this.dim); + if (world == null) + return null; + BlockPos pos = new BlockPos(this.x, this.y, this.z); + if (world.isBlockLoaded(pos, false)) + return world.getTileEntity(pos); + return null; + } + + public IBlockState getBlockMetadata() + { + World world = this.getWorldForId(this.dim); + if (world == null) + return null; + return world.getBlockState(new BlockPos(this.x, this.y, this.z)); + } + + public static BlockVec3Dim readFromNBT(NBTTagCompound nbtCompound) + { + BlockVec3Dim tempVector = new BlockVec3Dim(); + tempVector.x = nbtCompound.getInteger("x"); + tempVector.y = nbtCompound.getInteger("y"); + tempVector.z = nbtCompound.getInteger("z"); + tempVector.dim = nbtCompound.getInteger("dim"); + return tempVector; + } + + public NBTTagCompound writeToNBT(NBTTagCompound par1NBTTagCompound) + { + par1NBTTagCompound.setInteger("x", this.x); + par1NBTTagCompound.setInteger("y", this.y); + par1NBTTagCompound.setInteger("z", this.z); + par1NBTTagCompound.setInteger("dim", this.dim); + return par1NBTTagCompound; + } + + public BlockVec3Dim(NBTTagCompound par1NBTTagCompound) + { + this.x = par1NBTTagCompound.getInteger("x"); + this.y = par1NBTTagCompound.getInteger("y"); + this.z = par1NBTTagCompound.getInteger("z"); + this.dim = par1NBTTagCompound.getInteger("dim"); + } + + public double getMagnitude() + { + return Math.sqrt(this.getMagnitudeSquared()); + } + + public int getMagnitudeSquared() + { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + + public void setBlock(IBlockState block) + { + World world = this.getWorldForId(this.dim); + if (world == null) + return; + world.setBlockState(new BlockPos(this.x, this.y, this.z), block, 3); + } + + public boolean blockExists() + { + World world = this.getWorldForId(this.dim); + if (world == null) + return false; + return world.isBlockLoaded(new BlockPos(this.x, this.y, this.z)); + } + + /** + * It is up to the calling method to check that the dimension matches + * + * @param vector + * @return + */ + public int distanceSquared(BlockVec3 vector) + { + int var2 = vector.x - this.x; + int var4 = vector.y - this.y; + int var6 = vector.z - this.z; + return var2 * var2 + var4 * var4 + var6 * var6; + } + + public BlockPos toBlockPos() + { + return new BlockPos(x, y, z); + } + + private World getWorldForId(int dimensionID) + { + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + return WorldUtil.getWorldForDimensionServer(dimensionID); + } else + { + return getWorldForIdClient(dimensionID); + } + } + + @SideOnly(Side.CLIENT) + private World getWorldForIdClient(int dimensionID) + { + World world = FMLClientHandler.instance().getClient().world; + + if (world != null && world.provider.getDimension() == dimensionID) + { + return world; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector2.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector2.java new file mode 100644 index 00000000..64747cec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector2.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +/** + * Vector2 Class is used for defining objects in a 2D space. + * + * @author Calclavia + */ + +public class Vector2 implements Cloneable +{ + + public double x; + public double y; + + public Vector2() + { + this(0, 0); + } + + public Vector2(double x, double y) + { + this.x = x; + this.y = y; + } + + /** + * Returns the integer floor value. + * + * @return + */ + public int intX() + { + return (int) Math.floor(this.x); + } + + public int intY() + { + return (int) Math.floor(this.y); + } + + /** + * Makes a new copy of this Vector. Prevents variable referencing problems. + */ + @Override + public final Vector2 clone() + { + return new Vector2(this.x, this.y); + } + + public static double distance(Vector2 point1, Vector2 point2) + { + double xDifference = point1.x - point2.x; + double yDiference = point1.y - point2.y; + return Math.sqrt(xDifference * xDifference + yDiference * yDiference); + } + + public static double slope(Vector2 point1, Vector2 point2) + { + double xDifference = point1.x - point2.x; + double yDiference = point1.y - point2.y; + return yDiference / xDifference; + } + + public double distanceTo(Vector2 target) + { + double xDifference = this.x - target.x; + double yDifference = this.y - target.y; + return Math.sqrt(xDifference * xDifference + yDifference * yDifference); + } + + public Vector2 add(Vector2 par1) + { + this.x += par1.x; + this.y += par1.y; + return this; + } + + public Vector2 add(double par1) + { + this.x += par1; + this.y += par1; + return this; + } + + public Vector2 invert() + { + this.multiply(-1); + return this; + } + + public Vector2 multiply(double amount) + { + this.x *= amount; + this.y *= amount; + return this; + } + + public Vector2 round() + { + return new Vector2(Math.round(this.x), Math.round(this.y)); + } + + public Vector2 ceil() + { + return new Vector2(Math.ceil(this.x), Math.ceil(this.y)); + } + + public Vector2 floor() + { + return new Vector2(Math.floor(this.x), Math.floor(this.y)); + } + + @Override + public int hashCode() + { + return ("X:" + this.x + "Y:" + this.y).hashCode(); + } + + @Override + public boolean equals(Object o) + { + if (o instanceof Vector2) + { + Vector2 vector = (Vector2) o; + return this.x == vector.x && this.y == vector.y; + } + + return false; + } + + @Override + public String toString() + { + return "Vector2 [" + this.x + "," + this.y + "]"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector3.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector3.java new file mode 100644 index 00000000..79c644d6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/Vector3.java @@ -0,0 +1,809 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.vector; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.lwjgl.util.vector.Vector3f; + +/** + * Vector3 Class is used for defining objects in a 3D space. + * + * @author Calclavia + */ + +public class Vector3 implements Cloneable +{ + + public double x; + public double y; + public double z; + + public Vector3(double x, double y, double z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public Vector3() + { + this(0, 0, 0); + } + + public Vector3(Vector3 vector) + { + this(vector.x, vector.y, vector.z); + } + + public Vector3(double amount) + { + this(amount, amount, amount); + } + + public Vector3(Entity par1) + { + this(par1.posX, par1.posY, par1.posZ); + } + + public Vector3(BlockPos pos) + { + this(pos.getX(), pos.getY(), pos.getZ()); + } + + public Vector3(TileEntity par1) + { + this(par1.getPos()); + } + + public Vector3(Vec3d par1) + { + this(par1.x, par1.y, par1.z); + + } + + public Vector3(RayTraceResult par1) + { + this(par1.getBlockPos()); + } + + public Vector3(EnumFacing direction) + { + this(direction.getXOffset(), direction.getYOffset(), direction.getZOffset()); + } + + /** + * Loads a Vector3 from an NBT compound. + */ + public Vector3(NBTTagCompound nbt) + { + this(nbt.getDouble("x"), nbt.getDouble("y"), nbt.getDouble("z")); + } + + public Vector3(BlockVec3 vec) + { + this(vec.x, vec.y, vec.z); + } + + /** + * Returns the coordinates as integers, ideal for block placement. + */ + public int intX() + { + return (int) Math.floor(this.x); + } + + public int intY() + { + return (int) Math.floor(this.y); + } + + public int intZ() + { + return (int) Math.floor(this.z); + } + + public float floatX() + { + return (float) this.x; + } + + public float floatY() + { + return (float) this.y; + } + + public float floatZ() + { + return (float) this.z; + } + + /** + * Makes a new copy of this Vector. Prevents variable referencing problems. + */ + @Override + public final Vector3 clone() + { + return new Vector3(this); + } + + /** + * Easy block access functions. + * + * @param world + * @return + */ + public Block getBlock(IBlockAccess world) + { + return world.getBlockState(new BlockPos(this.intX(), this.intY(), this.intZ())).getBlock(); + } + + public IBlockState getBlockMetadata(IBlockAccess world) + { + return world.getBlockState(new BlockPos(this.intX(), this.intY(), this.intZ())); + } + + public TileEntity getTileEntity(IBlockAccess world) + { + return world.getTileEntity(new BlockPos(this.intX(), this.intY(), this.intZ())); + } + + public boolean setBlock(World world, IBlockState state, int notify) + { + return world.setBlockState(new BlockPos(this.intX(), this.intY(), this.intZ()), state, notify); + } + + public boolean setBlock(World world, IBlockState state) + { + return this.setBlock(world, state, 3); + } + + /** + * ---------------------- CONVERSION FUNCTIONS ---------------------------- + */ + /** + * Converts this Vector3 into a Vector2 by dropping the Y axis. + */ + public Vector2 toVector2() + { + return new Vector2(this.x, this.z); + } + + /** + * Converts this vector three into a Minecraft Vec3d object + */ + public Vec3d toVec3() + { + return new Vec3d(this.x, this.y, this.z); + } + + /** + * Converts Vector3 into a EnumFacing. + */ + public EnumFacing toEnumFacing() + { + for (EnumFacing direction : EnumFacing.VALUES) + { + if (this.x == direction.getXOffset() && this.y == direction.getYOffset() && this.z == direction.getZOffset()) + { + return direction; + } + } + + return null; + } + + public double getMagnitude() + { + return Math.sqrt(this.getMagnitudeSquared()); + } + + public double getMagnitudeSquared() + { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + + public Vector3 normalize() + { + double d = this.getMagnitude(); + + if (d != 0) + { + this.scale(1 / d); + } + + return this; + } + + /** + * Gets the distance between two vectors + * + * @return The distance + */ + public static double distance(Vector3 vec1, Vector3 vec2) + { + return vec1.distance(vec2); + } + + @Deprecated + public double distanceTo(Vector3 vector3) + { + return this.distance(vector3); + } + + public double distance(Vector3 compare) + { + Vector3 difference = this.clone().difference(compare); + return difference.getMagnitude(); + } + + /** + * Multiplies the vector by negative one. + */ + public Vector3 invert() + { + this.scale(-1); + return this; + } + + public Vector3 translate(Vector3 par1) + { + this.x += par1.x; + this.y += par1.y; + this.z += par1.z; + return this; + } + + public Vector3 translate(double par1) + { + this.x += par1; + this.y += par1; + this.z += par1; + return this; + } + + public static Vector3 translate(Vector3 translate, Vector3 par1) + { + translate.x += par1.x; + translate.y += par1.y; + translate.z += par1.z; + return translate; + } + + public static Vector3 translate(Vector3 translate, double par1) + { + translate.x += par1; + translate.y += par1; + translate.z += par1; + return translate; + } + + @Deprecated + public Vector3 add(Vector3 amount) + { + return this.translate(amount); + } + + @Deprecated + public Vector3 add(double amount) + { + return this.translate(amount); + } + + @Deprecated + public Vector3 subtract(Vector3 amount) + { + return this.translate(amount.clone().invert()); + } + + @Deprecated + public Vector3 subtract(double amount) + { + return this.translate(-amount); + } + + public Vector3 difference(Vector3 amount) + { + return this.translate(amount.clone().invert()); + } + + public Vector3 difference(double amount) + { + return this.translate(-amount); + } + + public Vector3 scale(double amount) + { + this.x *= amount; + this.y *= amount; + this.z *= amount; + return this; + } + + public Vector3 scale(Vector3 amount) + { + this.x *= amount.x; + this.y *= amount.y; + this.z *= amount.z; + return this; + } + + public static Vector3 scale(Vector3 vec, double amount) + { + return vec.scale(amount); + } + + public static Vector3 scale(Vector3 vec, Vector3 amount) + { + return vec.scale(amount); + } + + @Deprecated + public Vector3 multiply(double amount) + { + return this.scale(amount); + } + + @Deprecated + public Vector3 multiply(Vector3 amount) + { + return this.scale(amount); + } + + /** + * Static versions of a lot of functions + */ + public static Vector3 subtract(Vector3 par1, Vector3 par2) + { + return new Vector3(par1.x - par2.x, par1.y - par2.y, par1.z - par2.z); + } + + @Deprecated + public static Vector3 add(Vector3 par1, Vector3 par2) + { + return new Vector3(par1.x + par2.x, par1.y + par2.y, par1.z + par2.z); + } + + @Deprecated + public static Vector3 add(Vector3 par1, double par2) + { + return new Vector3(par1.x + par2, par1.y + par2, par1.z + par2); + } + + @Deprecated + public static Vector3 multiply(Vector3 vec1, Vector3 vec2) + { + return new Vector3(vec1.x * vec2.x, vec1.y * vec2.y, vec1.z * vec2.z); + } + + @Deprecated + public static Vector3 multiply(Vector3 vec1, double vec2) + { + return new Vector3(vec1.x * vec2, vec1.y * vec2, vec1.z * vec2); + } + + public Vector3 round() + { + return new Vector3(Math.round(this.x), Math.round(this.y), Math.round(this.z)); + } + + public Vector3 ceil() + { + return new Vector3(Math.ceil(this.x), Math.ceil(this.y), Math.ceil(this.z)); + } + + public Vector3 floor() + { + return new Vector3(Math.floor(this.x), Math.floor(this.y), Math.floor(this.z)); + } + + public Vector3 toRound() + { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + this.z = Math.round(this.z); + return this; + } + + public Vector3 toCeil() + { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + this.z = Math.ceil(this.z); + return this; + } + + public Vector3 toFloor() + { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + this.z = Math.floor(this.z); + return this; + } + + /** + * Gets all entities inside of this position in block space. + */ + public List getEntitiesWithin(World worldObj, Class par1Class) + { + return worldObj.getEntitiesWithinAABB(par1Class, new AxisAlignedBB(this.intX(), this.intY(), this.intZ(), this.intX() + 1, this.intY() + 1, this.intZ() + 1)); + } + + /** + * Gets a position relative to a position's side + * + * @return The position relative to the original position's side + */ + public Vector3 modifyPositionFromSide(EnumFacing side, double amount) + { + return this.translate(new Vector3(side).scale(amount)); + } + + public Vector3 modifyPositionFromSide(EnumFacing side) + { + this.modifyPositionFromSide(side, 1); + return this; + } + + /** + * Cross product functions + * + * @return The cross product between this vector and another. + */ + public Vector3 toCrossProduct(Vector3 compare) + { + double newX = this.y * compare.z - this.z * compare.y; + double newY = this.z * compare.x - this.x * compare.z; + double newZ = this.x * compare.y - this.y * compare.x; + this.x = newX; + this.y = newY; + this.z = newZ; + return this; + } + + public Vector3 crossProduct(Vector3 compare) + { + return this.clone().toCrossProduct(compare); + } + + public Vector3 xCrossProduct() + { + return new Vector3(0.0D, this.z, -this.y); + } + + public Vector3 zCrossProduct() + { + return new Vector3(-this.y, this.x, 0.0D); + } + + public double dotProduct(Vector3 vec2) + { + return this.x * vec2.x + this.y * vec2.y + this.z * vec2.z; + } + + /** + * @return The perpendicular vector. + */ + public Vector3 getPerpendicular() + { + if (this.z == 0.0F) + { + return this.zCrossProduct(); + } + + return this.xCrossProduct(); + } + + /** + * @return True if this Vector3 is zero. + */ + public boolean isZero() + { + return this.x == 0 && this.y == 0 && this.z == 0; + } + + /** + * Rotate by a this vector around an axis. + * + * @return The new Vector3 rotation. + */ + public Vector3 rotate(float angle, Vector3 axis) + { + return Vector3.translateMatrix(Vector3.getRotationMatrix(angle, axis), this.clone()); + } + + public double[] getRotationMatrix(float angle) + { + double[] matrix = new double[16]; + Vector3 axis = this.clone().normalize(); + double x = axis.x; + double y = axis.y; + double z = axis.z; + angle /= Constants.RADIANS_TO_DEGREES; + float cos = MathHelper.cos(angle); + float ocos = 1.0F - cos; + float sin = MathHelper.sin(angle); + matrix[0] = x * x * ocos + cos; + matrix[1] = y * x * ocos + z * sin; + matrix[2] = x * z * ocos - y * sin; + matrix[4] = x * y * ocos - z * sin; + matrix[5] = y * y * ocos + cos; + matrix[6] = y * z * ocos + x * sin; + matrix[8] = x * z * ocos + y * sin; + matrix[9] = y * z * ocos - x * sin; + matrix[10] = z * z * ocos + cos; + matrix[15] = 1.0F; + return matrix; + } + + public static Vector3 translateMatrix(double[] matrix, Vector3 translation) + { + double x = translation.x * matrix[0] + translation.y * matrix[1] + translation.z * matrix[2] + matrix[3]; + double y = translation.x * matrix[4] + translation.y * matrix[5] + translation.z * matrix[6] + matrix[7]; + double z = translation.x * matrix[8] + translation.y * matrix[9] + translation.z * matrix[10] + matrix[11]; + translation.x = x; + translation.y = y; + translation.z = z; + return translation; + } + + public static double[] getRotationMatrix(float angle, Vector3 axis) + { + return axis.getRotationMatrix(angle); + } + + /** + * Rotates this Vector by a yaw, pitch and roll value. + */ + public void rotate(double yaw, double pitch, double roll) + { + double yawRadians = Math.toRadians(yaw); + double pitchRadians = Math.toRadians(pitch); + double rollRadians = Math.toRadians(roll); + + double x = this.x; + double y = this.y; + double z = this.z; + + this.x = x * Math.cos(yawRadians) * Math.cos(pitchRadians) + z * (Math.cos(yawRadians) * Math.sin(pitchRadians) * Math.sin(rollRadians) - Math.sin(yawRadians) * Math.cos(rollRadians)) + + y * (Math.cos(yawRadians) * Math.sin(pitchRadians) * Math.cos(rollRadians) + Math.sin(yawRadians) * Math.sin(rollRadians)); + this.z = x * Math.sin(yawRadians) * Math.cos(pitchRadians) + z * (Math.sin(yawRadians) * Math.sin(pitchRadians) * Math.sin(rollRadians) + Math.cos(yawRadians) * Math.cos(rollRadians)) + + y * (Math.sin(yawRadians) * Math.sin(pitchRadians) * Math.cos(rollRadians) - Math.cos(yawRadians) * Math.sin(rollRadians)); + this.y = -x * Math.sin(pitchRadians) + z * Math.cos(pitchRadians) * Math.sin(rollRadians) + y * Math.cos(pitchRadians) * Math.cos(rollRadians); + } + + /** + * Rotates a point by a yaw and pitch around the anchor 0,0 by a specific + * angle. + */ + public void rotate(double yaw, double pitch) + { + this.rotate(yaw, pitch, 0); + } + + public void rotate(double yaw) + { + double yawRadians = Math.toRadians(yaw); + + double x = this.x; + double z = this.z; + + if (yaw != 0) + { + this.x = x * Math.cos(yawRadians) - z * Math.sin(yawRadians); + this.z = x * Math.sin(yawRadians) + z * Math.cos(yawRadians); + } + } + + /** + * Gets the delta look position based on the rotation yaw and pitch. + * Minecraft coordinates are messed up. Y and Z are flipped. Yaw is + * displaced by 90 degrees. Pitch is inversed. + * + * @param rotationYaw + * @param rotationPitch + */ + public static Vector3 getDeltaPositionFromRotation(float rotationYaw, float rotationPitch) + { + return new Vector3(Math.cos(Math.toRadians(rotationYaw + 90)), Math.sin(Math.toRadians(-rotationPitch)), Math.sin(Math.toRadians(rotationYaw + 90))); + } + + /** + * Gets the angle between this vector and another vector. + * + * @return Angle in degrees + */ + public double getAngle(Vector3 vec2) + { + return Vector3.anglePreNorm(this.clone().normalize(), vec2.clone().normalize()); + } + + public static double getAngle(Vector3 vec1, Vector3 vec2) + { + return vec1.getAngle(vec2); + } + + public double anglePreNorm(Vector3 vec2) + { + return Math.acos(this.dotProduct(vec2)); + } + + public static double anglePreNorm(Vector3 vec1, Vector3 vec2) + { + return Math.acos(vec1.clone().dotProduct(vec2)); + } + + /** + * Loads a Vector3 from an NBT compound. + */ + @Deprecated + public static Vector3 readFromNBT(NBTTagCompound nbt) + { + return new Vector3(nbt); + } + + /** + * Saves this Vector3 to disk + */ + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + nbt.setDouble("x", this.x); + nbt.setDouble("y", this.y); + nbt.setDouble("z", this.z); + return nbt; + } + + public static Vector3 UP() + { + return new Vector3(0, 1, 0); + } + + public static Vector3 DOWN() + { + return new Vector3(0, -1, 0); + } + + public static Vector3 NORTH() + { + return new Vector3(0, 0, -1); + } + + public static Vector3 SOUTH() + { + return new Vector3(0, 0, 1); + } + + public static Vector3 WEST() + { + return new Vector3(-1, 0, 0); + } + + public static Vector3 EAST() + { + return new Vector3(1, 0, 0); + } + + @Deprecated + public RayTraceResult rayTraceEntities(World world, float rotationYaw, float rotationPitch, boolean collisionFlag, double reachDistance) + { + return this.rayTraceEntities(world, rotationYaw, rotationPitch, reachDistance); + } + + public RayTraceResult rayTraceEntities(World world, float rotationYaw, float rotationPitch, double reachDistance) + { + return this.rayTraceEntities(world, Vector3.getDeltaPositionFromRotation(rotationYaw, rotationPitch).scale(reachDistance)); + } + + /** + * Does an entity raytrace. + * + * @param world - The world object. + * @param target - The rotation in terms of Vector3. Convert using + * getDeltaPositionFromRotation() + * @return The target hit. + */ + public RayTraceResult rayTraceEntities(World world, Vector3 target) + { + RayTraceResult pickedEntity = null; + Vec3d startingPosition = this.toVec3(); + Vec3d look = target.toVec3(); + double reachDistance = this.distance(target); + Vec3d reachPoint = new Vec3d(startingPosition.x + look.x * reachDistance, startingPosition.y + look.y * reachDistance, startingPosition.z + look.z * reachDistance); + + double checkBorder = 1.1 * reachDistance; + AxisAlignedBB boxToScan = new AxisAlignedBB(-checkBorder, -checkBorder, -checkBorder, checkBorder, checkBorder, checkBorder).offset(this.x, this.y, this.z); + + List entitiesHit = world.getEntitiesWithinAABBExcludingEntity(null, boxToScan); + double closestEntity = reachDistance; + + if (entitiesHit == null || entitiesHit.isEmpty()) + { + return null; + } + for (Entity entityHit : entitiesHit) + { + if (entityHit != null && entityHit.canBeCollidedWith() && entityHit.getCollisionBoundingBox() != null) + { + float border = entityHit.getCollisionBorderSize(); + AxisAlignedBB aabb = entityHit.getEntityBoundingBox().grow(border); + RayTraceResult hitMOP = aabb.calculateIntercept(startingPosition, reachPoint); + + if (hitMOP != null) + { + if (aabb.contains(startingPosition)) + { + if (0.0D < closestEntity || closestEntity == 0.0D) + { + pickedEntity = new RayTraceResult(entityHit); + if (pickedEntity != null) + { + pickedEntity.hitVec = hitMOP.hitVec; + closestEntity = 0.0D; + } + } + } else + { + double distance = startingPosition.distanceTo(hitMOP.hitVec); + + if (distance < closestEntity || closestEntity == 0.0D) + { + pickedEntity = new RayTraceResult(entityHit); + pickedEntity.hitVec = hitMOP.hitVec; + closestEntity = distance; + } + } + } + } + } + return pickedEntity; + } + + @Override + public int hashCode() + { + return new HashCodeBuilder().append(this.x).append(this.y).append(this.z).hashCode(); + } + + @Override + public boolean equals(Object o) + { + if (o instanceof Vector3) + { + Vector3 vector3 = (Vector3) o; + return new EqualsBuilder().append(this.x, vector3.x).append(this.y, vector3.y).append(this.z, vector3.z).isEquals(); + } + + return false; + } + + @Override + public String toString() + { + return "Vector3 [" + this.x + "," + this.y + "," + this.z + "]"; + } + + public Vector3f toVector3f() + { + return new Vector3f((float) this.x, (float) this.y, (float) this.z); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/package-info.java new file mode 100644 index 00000000..80e703f1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/vector/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|vector") +package micdoodle8.mods.galacticraft.api.vector; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/AtmosphereInfo.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/AtmosphereInfo.java new file mode 100644 index 00000000..4aa223b0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/AtmosphereInfo.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.ArrayList; + +public class AtmosphereInfo +{ + + private final Boolean isBreathable; + private final boolean hasPrecipitation; + private final boolean isCorrosive; + private final float thermalLevel; + private final float windLevel; + private final float density; + public ArrayList composition = new ArrayList<>(); + + /** + * @param breathable - supply null here to have the AtmosphereInfo object + * test the atmospheric composition for oxygen and CO2, or true or + * false to override + * @param precipitation - true for rain etc, false for none + * @param corrosive - true for atmosphere which can corrode armor + * @param relativeTemperature - the thermal level relative to Overworld: + * 0.0F is default + * @param windLevel - the wind level + * @param density - the atmospheric density (affects sounds and meteor + * frequency): 1.0F is like Overworld + */ + public AtmosphereInfo(Boolean breathable, boolean precipitation, boolean corrosive, float relativeTemperature, float windLevel, float density) + { + this.isBreathable = breathable; + this.hasPrecipitation = precipitation; + this.isCorrosive = corrosive; + this.thermalLevel = relativeTemperature; + this.windLevel = windLevel; + this.density = density; + } + + public boolean isBreathable() + { + if (this.isBreathable == null) + { + return this.isGasPresent(EnumAtmosphericGas.OXYGEN) && !this.isGasPresent(EnumAtmosphericGas.CO2); + } + return this.isBreathable; + } + + public boolean hasPrecipitation() + { + return this.hasPrecipitation; + } + + public boolean isCorrosive() + { + return this.isCorrosive; + } + + public float thermalLevel() + { + return this.thermalLevel; + } + + public float windLevel() + { + return this.windLevel; + } + + public float relativeDensity() + { + return this.density; + } + + public boolean isGasPresent(EnumAtmosphericGas gas) + { + return this.composition.contains(gas); + } + + public boolean hasNoGases() + { + return this.composition.isEmpty(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeData.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeData.java new file mode 100644 index 00000000..1ccdec4d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeData.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import net.minecraft.world.biome.Biome.BiomeProperties; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class BiomeData +{ + + private String biomeName; + @Builder.Default private float baseHeight = 0.1F; + @Builder.Default private float heightVariation = 0.2F; + @Builder.Default private float temperature = 0.5F; + @Builder.Default private float rainfall = 0.0F; + @Builder.Default private int waterColor = 16777215; + @Builder.Default private boolean enableSnow = false; + @Builder.Default private boolean enableRain = false; + private String baseBiomeRegName; + + public BiomeProperties toBiomeProperties() + { + BiomeProperties biomeProperties = new BiomeProperties(biomeName) + .setBaseHeight(baseHeight).setHeightVariation(heightVariation) + .setTemperature(temperature).setRainfall(rainfall) + .setWaterColor(waterColor).setBaseBiome(baseBiomeRegName); + if (!enableRain) + { + biomeProperties.setRainDisabled(); + } + if (!enableSnow) + { + biomeProperties.setSnowEnabled(); + } + return biomeProperties; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeGenBaseGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeGenBaseGC.java new file mode 100644 index 00000000..d6dbf323 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/BiomeGenBaseGC.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.LinkedList; + +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.passive.EntityAmbientCreature; +import net.minecraft.entity.passive.EntityWaterMob; +import net.minecraft.world.biome.Biome; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ASMUtil; + +/** + * This extension of BiomeGenBase contains the default initialiseMobLists() + * called on CelestialBody registration to register mob spawn data + */ +public abstract class BiomeGenBaseGC extends Biome implements IMobSpawnBiome +{ + + public final boolean isAdaptiveBiome; + + protected BiomeGenBaseGC(BiomeData data) + { + super(data.toBiomeProperties()); + this.setRegistryName(data.getBiomeName()); + GalacticraftCore.biomesList.add(this); + this.isAdaptiveBiome = false; + } + + protected BiomeGenBaseGC(BiomeData data, boolean adaptive) + { + super(data.toBiomeProperties()); + this.setRegistryName(data.getBiomeName()); + this.isAdaptiveBiome = adaptive; + } + + protected BiomeGenBaseGC(BiomeProperties properties, boolean adaptive) { + super(properties); + this.setRegistryName(ASMUtil.getBiomeName(properties)); + this.isAdaptiveBiome = adaptive; + } + + protected BiomeGenBaseGC(BiomeProperties properties) + { + super(properties); + this.setRegistryName(ASMUtil.getBiomeName(properties)); + GalacticraftCore.biomesList.add(this); + this.isAdaptiveBiome = false; + } + + /** + * Override this in your biomes
(Note: if adaptive biomes, only the + * FIRST to register the adaptive biome will have its types registered in + * the BiomeDictionary - sorry, that's a Forge limitation.) + */ + public void registerTypes(Biome registering) + { + } + + /** + * The default implementation in BiomeGenBaseGC will attempt to allocate + * each SpawnListEntry in the CelestialBody's mobInfo to this biome's Water, + * Cave, Monster or Creature lists according to whether the spawnable + * entity's class is a subclass of EntityWaterMob, EntityAmbientCreature, + * EntityMob or anything else (passive mobs or plain old EntityLiving). + * + * Override this if different behaviour is required. + */ + @Override + public void initialiseMobLists(LinkedList mobInfo) + { + this.spawnableMonsterList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableCaveCreatureList.clear(); + for (SpawnListEntry entry : mobInfo) + { + Class mobClass = entry.entityClass; + if (EntityWaterMob.class.isAssignableFrom(mobClass)) + { + this.spawnableWaterCreatureList.add(entry); + } else if (EntityAmbientCreature.class.isAssignableFrom(mobClass)) + { + this.spawnableCaveCreatureList.add(entry); + } else if (EntityMob.class.isAssignableFrom(mobClass)) + { + this.spawnableMonsterList.add(entry); + } else + { + this.spawnableCreatureList.add(entry); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ChunkProviderBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ChunkProviderBase.java new file mode 100644 index 00000000..db086e29 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ChunkProviderBase.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import javax.annotation.Nullable; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.IChunkGenerator; + +public abstract class ChunkProviderBase implements IChunkGenerator +{ + + @Override + @Nullable + public BlockPos getNearestStructurePos(World worldIn, String structureName, BlockPos position, boolean findUnexplored) + { + return null; + } + + // This is something connected with Ocean Monuments, and not used in + // Galacticraft. + @Override + public boolean generateStructures(Chunk chunkIn, int x, int z) + { + return false; + } + + /** + * Override this if you want to implement an advancement using + * net.minecraft.advancements.critereon.LocationPredicate + */ + @Override + public boolean isInsideStructure(World worldIn, String structureName, BlockPos pos) + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/DimensionalCoord.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/DimensionalCoord.java new file mode 100644 index 00000000..007c5bb0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/DimensionalCoord.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class DimensionalCoord +{ + + public int posX, posY, posZ; + public int dimId; + + public DimensionalCoord(int posX, int posY, int posZ, int dimId) + { + this.posX = posX; + this.posY = posY; + this.posZ = posZ; + this.dimId = dimId; + } + + public DimensionalCoord(double posX, double posY, double posZ, int dimId) + { + this((int) Math.floor(posX), (int) Math.floor(posX), (int) Math.floor(posX), dimId); + } + + public DimensionalCoord(Entity entity) + { + this.posX = (int) entity.posX; + this.posY = (int) entity.posY; + this.posZ = (int) entity.posZ; + this.dimId = entity.world.provider.getDimension(); + } + + public DimensionalCoord(BlockPos pos, World world) + { + this(pos.getX(), pos.getY(), pos.getZ(), world.provider.getDimension()); + } + + public static DimensionalCoord toCoord(TileEntity tileEntity) + { + return new DimensionalCoord(tileEntity.getPos(), tileEntity.getWorld()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/EnumAtmosphericGas.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/EnumAtmosphericGas.java new file mode 100644 index 00000000..b55b007a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/EnumAtmosphericGas.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +public enum EnumAtmosphericGas +{ + NITROGEN, OXYGEN, CO2, WATER, METHANE, HYDROGEN, HELIUM, ARGON +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IExitHeight.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IExitHeight.java new file mode 100644 index 00000000..50d8745a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IExitHeight.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +/** + * For world providers where you would like to specify height for spacecraft to + * be teleported

Implement into world providers + */ +public interface IExitHeight +{ + + /** + * @return y-coordinate that spacecraft leaves the dimension + */ + double getYCoordinateToTeleport(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IGalacticraftWorldProvider.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IGalacticraftWorldProvider.java new file mode 100644 index 00000000..03230138 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IGalacticraftWorldProvider.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; + +public interface IGalacticraftWorldProvider +{ + + /** + * gets additional gravity to add to players in this dimension. Typical + * values range from 0.040 to 0.065 + * + * @return additional gravity for this provider + */ + float getGravity(); + + /** + * Gets custom arrow gravity, overriding the vanilla gravity for arrows + * + * @return added y-motion per tick for arrows + */ + float getArrowGravity(); + + /** + * Determines the rate to spawn meteors in this planet. Lower means MORE + * meteors.

Typical value would be about 7. Return 0 for no meteors. + * + * @return + */ + double getMeteorFrequency(); + + /** + * Depending on gravity, different fuel depletion rates will occur in + * spacecraft (less force required to lift) + * + * @return multiplier of fuel usage, relative to the earth. Lower gravity = + * Lower fuel usage (multiplier less than zero) + */ + double getFuelUsageMultiplier(); + + /** + * Whether or not the spaceship tier from {@link IRocketType} can enter this + * dimension + * + * @param tier The tier of the spaceship entering this dimension + * @return Whether or not the spaceship with given tier can enter this + * dimension + */ + boolean canSpaceshipTierPass(int tier); + + /** + * Fall damage will be multiplied by this number while on the planet/moon. + * + * @return Fall damage multiplier, returning 1 will be equal to earth. + */ + float getFallDamageModifier(); + + /** + * + * @return true if this world has no type of atmosphere at all - e.g. the + * Moon + */ + boolean hasNoAtmosphere(); + + /** + * Changes volume of sounds on this planet. You should be using higher + * values for thin atmospheres and high values for dense atmospheres + * + * @return Sound reduction divisor. Value of 10 will make sounds ten times + * more quiet. Value of 0.1 will make sounds 10 times louder. Be + * careful with the values you choose! + */ + float getSoundVolReductionAmount(); + + /** + * Whether or not the atmosphere of this dimension is valid for players to + * breathe + * + * @return True if players can breathe here, False if not. + */ + boolean hasBreathableAtmosphere(); + + /** + * If false (the default) then Nether Portals will have no function on this + * world. Nether Portals can still be constructed, if the player can make + * fire, they just won't do anything. + * + * @return True if Nether Portals should work like on the Overworld. + */ + boolean netherPortalsOperational(); + + /** + * Whether or not the atmosphere of this dimension contains the specified + * gas + * + * @return True if the gas is present in the atmosphere, False if not. + */ + boolean isGasPresent(EnumAtmosphericGas gas); + + /** + * This value will affect player's thermal level, damaging them if it + * reaches too high or too low. + * + * @return Positive integer for hot celestial bodies, negative for cold. + * Zero for neutral + */ + float getThermalLevelModifier(); + + /** + * Amount of wind on this world. Used for flag waving.

Earth has a + * value of 1.0F, Luna (Moon) has a value of 0.0F. + * + * @return Flag movement magnitude. Relative to earth's value of 1.0F + */ + float getWindLevel(); + + /** + * Factor by which the sun is to be drawn smaller (<1.0) or larger (>1.0) + * than the sun on the Overworld + * + * @return factor + */ + float getSolarSize(); + + /** + * The celestial body object for this dimension + * + * @return The Moon or Planet object for this dimension + * @see micdoodle8.mods.galacticraft.api.galaxies.Planet + * @see micdoodle8.mods.galacticraft.api.galaxies.Moon + */ + abstract CelestialBody getCelestialBody(); + + /** + * Whether rain and snow should be disabled on this planet + * + * @return true if precipitation should be disabled. False otherwise. + */ + boolean shouldDisablePrecipitation(); + + /** + * Whether or not player's armor should be corroded in this world + * + * @return true if armor should be corroded, false if not + */ + boolean shouldCorrodeArmor(); + + /** + * The size (in blocks) of the average spacing between dungeons For example, + * on the Moon it's 704 blocks, meaning one dungeon in each (704 x 704) + * square in the (x, z) plane

If your world has no dungeons you can + * safely return 0 here. + */ + int getDungeonSpacing(); + + /** + * The ChestGenHooks identifier of the dungeon chests to generate in this + * world + */ + ResourceLocation getDungeonChestType(); + + List getSurfaceBlocks(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IMobSpawnBiome.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IMobSpawnBiome.java new file mode 100644 index 00000000..980e3676 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IMobSpawnBiome.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.LinkedList; +import net.minecraft.world.biome.Biome.SpawnListEntry; + +/** + * Implement this on any Galacticraft World Provider biome registered for a + * Celestial Body + */ +public interface IMobSpawnBiome +{ + + public void initialiseMobLists(LinkedList mobInfo); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IOrbitDimension.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IOrbitDimension.java new file mode 100644 index 00000000..80dfd8ca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IOrbitDimension.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +public interface IOrbitDimension extends IGalacticraftWorldProvider +{ + + /** + * @return the name of the world that this dimension is orbiting. For the + * overworld it returns "Overworld" + * @deprecated use {@link IOrbitDimension#getPlanetIdToOrbit()} + */ + @Deprecated + String getPlanetToOrbit(); + + /** + * @return the y-coordinate that entities will fall back into the world we + * are orbiting + */ + int getYCoordToTeleportToPlanet(); + + default int getPlanetIdToOrbit() + { + return Integer.MIN_VALUE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ISolarLevel.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ISolarLevel.java new file mode 100644 index 00000000..b806ed84 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ISolarLevel.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +/** + * Used to change the solar multiplier of certain world providers

If you + * have a solar feature in your mod, check whether the world's provider inherits + * this class and multiply the solar generation by the solar multiplier double + *

for example:

if (worldObj.provider instanceof ISolarLevel) + * solarStrength *= ((ISolarLevel) + * worldObj.provider).getSolarEnergyMultiplier(); + */ +public interface ISolarLevel +{ + + double getSolarEnergyMultiplier(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ITeleportType.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ITeleportType.java new file mode 100644 index 00000000..5f202586 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/ITeleportType.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +/** + * Implement into WorldProvider for customizing spawning players and other + * entities into space dimension

You can also create a separate class, + * implement it there, then register it in @GalacticraftRegistry + */ +public interface ITeleportType +{ + + /** + * This method is used to determine if a player will open parachute upon + * entering the dimension + * + * @return whether player will set parachute open upon entering this + * dimension + */ + boolean useParachute(); + + /** + * Gets the player spawn location when entering this dimension + * + * @param world The world to be spawned into + * @param player The player to be teleported + * @return a vector3 object containing the coordinates to be spawned into + * the world with + */ + Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player); + + /** + * Gets the entity (non-player) spawn location when entering this dimension + * + * @param world The world to be spawned into + * @param entity the non-player entity to be teleported + * @return a vector3 object containing the coordinates to be spawned into + * the world with + */ + Vector3 getEntitySpawnLocation(WorldServer world, Entity entity); + + /** + * Gets the parachest spawn location when entering this dimension. Return + * null for no parachest spawn + * + * @param world The world to be spawned into + * @param player The player being teleported + * @param rand The random instance + * @return a vector3 object containing the coordinates to be spawned into + * the world with. Return null for no spawn + */ + Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand); + + /** + * Called when player is transferred to a space dimension + * + * @param newWorld The world object of the entered world + * @param player The player that has transferred dimensions + * @param ridingAutoRocket If the player is riding an auto rocket. Do not + * spawn in landers if so. + */ + void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket); + + /** + * Used by Asteroids Survival game mode to set up the initial lander + * inventory + * + * @param player + */ + void setupAdventureSpawn(EntityPlayerMP player); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IWeatherProvider.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IWeatherProvider.java new file mode 100644 index 00000000..71c0d80a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IWeatherProvider.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.util.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.particle.Particle; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IWeatherProvider +{ + + @SideOnly(Side.CLIENT) + Particle getParticle(WorldClient world, double x, double y, double z); + + void weatherSounds(int j, Minecraft mc, World world, BlockPos blockpos, double xx, double yy, double zz, Random random); + + int getSoundInterval(float f); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IZeroGDimension.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IZeroGDimension.java new file mode 100644 index 00000000..fc8e0937 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/IZeroGDimension.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import net.minecraft.entity.Entity; + +public interface IZeroGDimension +{ + + boolean inFreefall(Entity entity); + + void setInFreefall(Entity entity); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/OxygenHooks.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/OxygenHooks.java new file mode 100644 index 00000000..798a4243 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/OxygenHooks.java @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import java.lang.reflect.Method; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; + +public class OxygenHooks +{ + + private static Class oxygenUtilClass; + private static Method combusionTestMethod; + private static Method breathableAirBlockMethod; + private static Method breathableAirBlockEntityMethod; + private static Method torchHasOxygenMethod; + private static Method oxygenBubbleMethod; + private static Method validOxygenSetupMethod; + + /** + * Test whether fire can burn in this world's atmosphere (outside any oxygen + * bubble). + * + * @param provider The WorldProvider for this dimension + * + * @return False if fire burns normally True if fire cannot burn in this + * world + * + */ + public static boolean noAtmosphericCombustion(WorldProvider provider) + { + try + { + if (combusionTestMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + combusionTestMethod = oxygenUtilClass.getDeclaredMethod("noAtmosphericCombustion", WorldProvider.class); + } + return (Boolean) combusionTestMethod.invoke(null, provider); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Test whether a bounding box (normally a block but it could be an entity) + * is inside an oxygen bubble or oxygen sealed space, on an otherwise + * oxygen-free world. (Do not use this on the Overworld or other oxygen-rich + * world,, it will return false negatives!!) + * + * NOTE: In a complex build where this block is surrounded by air-permeable + * blocks on all sides (for example torches, ladders, signs, wires, chests + * etc etc) then it may have to look quite far to find whether it is in + * oxygen or not - it will check up to 5 blocks in each direction. This can + * impose a performance load in the unlikely event there are permeable + * blocks in all directions. It is therefore advisable not to call this + * every tick: 1 tick in 5 should be plenty. + * + * @param world The World + * @param bb AxisAligned BB representing the block (e.g. a torch), or maybe + * the side of a block + * @return True if the bb is in oxygen, otherwise false. + */ + public static boolean isAABBInBreathableAirBlock(World world, AxisAlignedBB bb) + { + try + { + if (breathableAirBlockMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + breathableAirBlockMethod = oxygenUtilClass.getDeclaredMethod("isAABBInBreathableAirBlock", World.class, AxisAlignedBB.class); + } + return (Boolean) breathableAirBlockMethod.invoke(null, world, bb); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Special version of the oxygen AABB check for living entities. This is + * based on checking the oxygen contact of a small box centred at the + * entity's eye height. The small box has sides equal to half the width of + * the entity. This is a good approximation to head size and position for + * most types of mobs. + * + * @param entity + * @return True if the entity's head is in an oxygen bubble or block, false + * otherwise + */ + public static boolean isAABBInBreathableAirBlock(EntityLivingBase entity) + { + try + { + if (breathableAirBlockEntityMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + breathableAirBlockEntityMethod = oxygenUtilClass.getDeclaredMethod("isAABBInBreathableAirBlock", EntityLivingBase.class); + } + return (Boolean) breathableAirBlockEntityMethod.invoke(null, entity); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Simplified (better performance) version of the block oxygen check for use + * with torch blocks and other oxygen-requiring blocks which can access + * oxygen on any side. + * + * NOTE: this does not run an inOxygenBubble() check, you will need to do + * that also. + * + * @param world + * @param block The block type of this torch being checked - currently + * unused + * @param pos The x, y, z position of the torch + * @return True if there is a (sealed) oxygen block accessible, otherwise + * false. + */ + public static boolean checkTorchHasOxygen(World world, Block block, BlockPos pos) + { + try + { + if (torchHasOxygenMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + torchHasOxygenMethod = oxygenUtilClass.getDeclaredMethod("checkTorchHasOxygen", World.class, BlockPos.class); + } + return (Boolean) torchHasOxygenMethod.invoke(null, world, pos); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Test whether a location is inside an Oxygen Bubble from an Oxygen + * Distributor + * + * @param worldObj World + * @param avgX avg X, avgY, avgZ are the average co-ordinates of the + * location + * @param avgY (for example, the central point of a block being tested + * @param avgZ or the average position of the centre of a living entity) + * @return True if it is in an oxygen bubble, otherwise false + */ + public static boolean inOxygenBubble(World worldObj, double avgX, double avgY, double avgZ) + { + try + { + if (oxygenBubbleMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + oxygenBubbleMethod = oxygenUtilClass.getDeclaredMethod("inOxygenBubble", World.class, double.class, double.class, double.class); + } + return (Boolean) oxygenBubbleMethod.invoke(null, worldObj, avgX, avgY, avgZ); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } + + /** + * Test whether a player is wearing a working set of Galacticraft + * oxygen-breathing apparatus (mask, gear + tank) + * + * @param player + * @return True if the setup is valid, otherwise false + */ + public static boolean hasValidOxygenSetup(EntityPlayerMP player) + { + try + { + if (validOxygenSetupMethod == null) + { + if (oxygenUtilClass == null) + { + oxygenUtilClass = Class.forName("micdoodle8.mods.galacticraft.core.util.OxygenUtil"); + } + validOxygenSetupMethod = oxygenUtilClass.getDeclaredMethod("hasValidOxygenSetup", EntityPlayerMP.class); + } + return (Boolean) validOxygenSetupMethod.invoke(null, player); + } catch (Exception e) + { + e.printStackTrace(); + } + + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/SpaceStationType.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/SpaceStationType.java new file mode 100644 index 00000000..25b995f1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/SpaceStationType.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.api.world; + +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; + +/** + * Currently only used internally, not guaranteed to work. + */ +public class SpaceStationType +{ + + private final int spaceStationID; + private final int planetID; + private SpaceStationRecipe recipe; + + /** + * The planet ID is the home planet. Only one SpaceStationType is allowed + * per home planet. The dimension number for the planet ID should match what + * it will be on the CLIENT even if the server has assigned different + * dimension IDs. For example, for the Overworld the planet ID should be 0 + * (it should be 0, even if the server has set + * ConfigManagerCore.idDimensionOverworld to a different value than 0). + */ + public SpaceStationType(int spaceStationID, int planetID, SpaceStationRecipe recipe) + { + this.spaceStationID = spaceStationID; + this.planetID = planetID; + this.recipe = recipe; + } + + /** + * Dimension ID of the space station + */ + public int getSpaceStationID() + { + return this.spaceStationID; + } + + /** + * Dimension ID of the planet this space station is orbiting + */ + public int getWorldToOrbitID() + { + return this.planetID; + } + + /** + * The recipe to create this space station + */ + public SpaceStationRecipe getRecipeForSpaceStation() + { + return this.recipe; + } + + public void setRecipeForSpaceStation(SpaceStationRecipe newRecipe) + { + this.recipe = newRecipe; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/package-info.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/package-info.java new file mode 100644 index 00000000..5d48ec65 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/api/world/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +@API(apiVersion = "1.0", owner = "galacticraftcore", provides = "GalacticraftAPI|world") +package micdoodle8.mods.galacticraft.api.world; + +import net.minecraftforge.fml.common.API; diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/Constants.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/Constants.java new file mode 100644 index 00000000..10e7196e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/Constants.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; + +public class Constants +{ + + public static final String MOD_ID_CORE = "galacticraftcore"; + public static final String MOD_ID_PLANETS = "galacticraftplanets"; + public static final String MOD_NAME_SIMPLE = "Galacticraft"; + + public static final String VERSION = "${version}"; + + public static final String DEPENDENCIES_FORGE = "required-after:forge@[14.23.5.2847,); "; + public static final String DEPENDENCIES_MICCORE = "required-after:micdoodlecore; "; + @Deprecated + @ForRemoval(deadline = "4.1.0") + public static final String DEPENDENCIES_MODS = "after:ic2; after:tconstruct; after:mantle;"; + + public static final String MCVERSION = "[1.12)"; + + public static final String CONFIG_CATEGORY_DIMENSIONS = "dimensions"; + public static final String CONFIG_CATEGORY_ENTITIES = "entities"; + public static final String CONFIG_CATEGORY_SCHEMATIC = "schematic"; + public static final String CONFIG_CATEGORY_GENERAL = "general"; + public static final String CONFIG_CATEGORY_WORLDGEN = "worldgen"; + public static final String CONFIG_CATEGORY_ACHIEVEMENTS = "achievements"; + public static final String CONFIG_CATEGORY_CLIENT = "client"; + public static final String CONFIG_CATEGORY_SERVER = "server"; + public static final String CONFIG_CATEGORY_CONTROLS = "controls"; + public static final String CONFIG_CATEGORY_KEYS = "keybindings_initial"; + public static final String CONFIG_CATEGORY_DIFFICULTY = "difficulty"; + public static final String CONFIG_CATEGORY_COMPATIBILITY = "compatibility"; + + public static final int OVERWORLD_SKYPROVIDER_STARTHEIGHT = 200; + public static final int OVERWORLD_CLOUD_HEIGHT = 130; + + public static final float LOX_GAS_RATIO = 5F / 54; + + public static final String CONFIG_FILE = "Galacticraft/core.cfg"; + public static final String POWER_CONFIG_FILE = "Galacticraft/energy.cfg"; + public static final String CHUNKLOADER_CONFIG_FILE = "Galacticraft/chunkloading.cfg"; + public static final String PLANETS_CONFIG_FILE = "Galacticraft/planets.cfg"; + + public static final String OLD_CONFIG_FILE = "Galacticraft/core.conf"; + public static final String OLD_POWER_CONFIG_FILE = "Galacticraft/power-GC3.conf"; + public static final String OLD_CHUNKLOADER_CONFIG_FILE = "Galacticraft/chunkloading.conf"; + + public static final String ASSET_PREFIX = "galacticraftcore"; + public static final String TEXTURE_PREFIX = ASSET_PREFIX + ":"; + public static final String PREFIX = "micdoodle8."; + public static final String GCDATAFOLDER = "../galacticraft/"; + + public static final int GEAR_ID_OXYGEN_MASK = 0; + public static final int GEAR_ID_OXYGEN_GEAR = 1; + public static final int GEAR_ID_OXYGEN_TANK_LIGHT = 2; + public static final int GEAR_ID_OXYGEN_TANK_MEDIUM = 3; + public static final int GEAR_ID_OXYGEN_TANK_HEAVY = 4; + public static final int GEAR_ID_OXYGEN_TANK_INFINITE = 5; + public static final int GEAR_ID_THERMAL_PADDING_T1_HELMET = 6; + public static final int GEAR_ID_THERMAL_PADDING_T1_CHESTPLATE = 7; + public static final int GEAR_ID_THERMAL_PADDING_T1_LEGGINGS = 8; + public static final int GEAR_ID_THERMAL_PADDING_T1_BOOTS = 9; + public static final int GEAR_ID_THERMAL_PADDING_T2_HELMET = 10; + public static final int GEAR_ID_THERMAL_PADDING_T2_CHESTPLATE = 11; + public static final int GEAR_ID_THERMAL_PADDING_T2_LEGGINGS = 12; + public static final int GEAR_ID_THERMAL_PADDING_T2_BOOTS = 13; + public static final int GEAR_ID_PARACHUTE = 14; + public static final int GEAR_ID_FREQUENCY_MODULE = 15; + public static final int GEAR_ID_SHIELD_CONTROLLER = 16; + + /** + * 128 squared (8 chunks range)
+ * used for small + high frequency TESR tiles like Fluid Pipes + */ + public static final double RENDERDISTANCE_SHORT = 16384D; + /** + * 256 squared (16 chunks range)
+ * used for standard block-sized TESR tiles like Fluid Tanks or Treasure Chests,
+ * also heavy render burden large tiles like the Dish and Display Screen + */ + public static final double RENDERDISTANCE_MEDIUM = 65536D; + /** + * 512 squared (32 chunks max range)
+ * used for uncommon, large or extra bright TESR tiles like Oxygen Bubble Distributors, Solar Panels or Panel Lighting + */ + public static final double RENDERDISTANCE_LONG = 262144D; + + public static final float RADIANS_TO_DEGREES = 180F / 3.1415927F; + public static final double RADIANS_TO_DEGREES_D = 180D / Math.PI; + + public static final float twoPI = (float) Math.PI * 2F; + public static final float halfPI = (float) Math.PI / 2F; + + public static final String PERMISSION_CREATE_STATION = "galacticraft.station.create"; +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCBlocks.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCBlocks.java new file mode 100644 index 00000000..4d266488 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCBlocks.java @@ -0,0 +1,664 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.registries.IForgeRegistry; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.core.blocks.BlockAirLockFrame; +import micdoodle8.mods.galacticraft.core.blocks.BlockAirLockWall; +import micdoodle8.mods.galacticraft.core.blocks.BlockAluminumWire; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasic; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon.EnumBlockBasicMoon; +import micdoodle8.mods.galacticraft.core.blocks.BlockBossSpawner; +import micdoodle8.mods.galacticraft.core.blocks.BlockBreathableAir; +import micdoodle8.mods.galacticraft.core.blocks.BlockBrightAir; +import micdoodle8.mods.galacticraft.core.blocks.BlockBrightBreathableAir; +import micdoodle8.mods.galacticraft.core.blocks.BlockBrightLamp; +import micdoodle8.mods.galacticraft.core.blocks.BlockCargoLoader; +import micdoodle8.mods.galacticraft.core.blocks.BlockCheese; +import micdoodle8.mods.galacticraft.core.blocks.BlockCompactNasaWorkbench; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedDetector; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedRedstone; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedRepeater; +import micdoodle8.mods.galacticraft.core.blocks.BlockCrafting; +import micdoodle8.mods.galacticraft.core.blocks.BlockDish; +import micdoodle8.mods.galacticraft.core.blocks.BlockDoubleSlabGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockEmergencyBox; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.blocks.BlockFallenMeteor; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidPipe; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidTank; +import micdoodle8.mods.galacticraft.core.blocks.BlockFuelLoader; +import micdoodle8.mods.galacticraft.core.blocks.BlockGlowstoneTorch; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPad; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPadFull; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine3; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine4; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineTiered; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockNasaWorkbench; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCollector; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCompressor; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDetector; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDistributor; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenSealer; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.blocks.BlockParaChest; +import micdoodle8.mods.galacticraft.core.blocks.BlockPlatform; +import micdoodle8.mods.galacticraft.core.blocks.BlockRefinery; +import micdoodle8.mods.galacticraft.core.blocks.BlockScreen; +import micdoodle8.mods.galacticraft.core.blocks.BlockSlabGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockSolar; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass.GlassFrame; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass.GlassType; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceStationBase; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpinThruster; +import micdoodle8.mods.galacticraft.core.blocks.BlockStairsGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockTelemetry; +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import micdoodle8.mods.galacticraft.core.blocks.BlockWallGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.ItemBlockAirLock; +import micdoodle8.mods.galacticraft.core.items.ItemBlockAluminumWire; +import micdoodle8.mods.galacticraft.core.items.ItemBlockArclamp; +import micdoodle8.mods.galacticraft.core.items.ItemBlockBase; +import micdoodle8.mods.galacticraft.core.items.ItemBlockCargoLoader; +import micdoodle8.mods.galacticraft.core.items.ItemBlockCheese; +import micdoodle8.mods.galacticraft.core.items.ItemBlockCreativeGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBlockEmergencyBox; +import micdoodle8.mods.galacticraft.core.items.ItemBlockEnclosed; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGlassGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockLandingPad; +import micdoodle8.mods.galacticraft.core.items.ItemBlockMachine; +import micdoodle8.mods.galacticraft.core.items.ItemBlockMoon; +import micdoodle8.mods.galacticraft.core.items.ItemBlockNasaWorkbench; +import micdoodle8.mods.galacticraft.core.items.ItemBlockOxygenCompressor; +import micdoodle8.mods.galacticraft.core.items.ItemBlockPanel; +import micdoodle8.mods.galacticraft.core.items.ItemBlockSlabGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockSolar; +import micdoodle8.mods.galacticraft.core.items.ItemBlockThruster; +import micdoodle8.mods.galacticraft.core.items.ItemBlockWallGC; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.StackSorted; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.ObjectArrays; +import com.google.common.collect.Ordering; + +public class GCBlocks +{ + //@noformat + public static Block breatheableAir; + public static Block brightAir; + public static Block brightBreatheableAir; + public static Block brightLamp; + public static Block treasureChestTier1; + public static Block landingPad; + public static Block unlitTorch; + public static Block unlitTorchLit; + public static Block oxygenDistributor; + public static Block oxygenPipe; + public static Block oxygenPipePull; + public static Block oxygenCollector; + public static Block oxygenCompressor; + public static Block oxygenSealer; + public static Block oxygenDetector; + public static Block nasaWorkbench; + public static Block compactNasaWorkbench; + public static Block fallenMeteor; + public static Block basicBlock; + public static Block airLockFrame; + public static Block airLockSeal; + public static BlockSpaceGlass spaceGlassClear; + public static BlockSpaceGlass spaceGlassVanilla; + public static BlockSpaceGlass spaceGlassStrong; + public static BlockSpaceGlass spaceGlassTinClear; + public static BlockSpaceGlass spaceGlassTinVanilla; + public static BlockSpaceGlass spaceGlassTinStrong; + public static Block crafting; + public static Block crudeOil; + public static Block fuel; + public static Block refinery; + public static Block fuelLoader; + public static Block landingPadFull; + public static Block spaceStationBase; + public static Block fakeBlock; + public static Block sealableBlock; + public static Block cargoLoader; + public static Block parachest; + public static Block solarPanel; + public static Block radioTelescope; + public static Block machineBase; + public static Block machineBase2; + public static Block machineBase3; + public static Block machineBase4; + public static Block machineTiered; + public static Block aluminumWire; + public static Block panelLighting; + public static Block glowstoneTorch; + public static Block blockMoon; + public static Block cheeseBlock; + public static Block spinThruster; + public static Block screen; + public static Block telemetry; + public static Block fluidTank; + public static Block bossSpawner; + public static Block slabGCHalf; + public static Block slabGCDouble; + public static Block tinStairs1; + public static Block tinStairs2; + public static Block moonStoneStairs; + public static Block moonBricksStairs; + public static Block wallGC; + public static Block concealedRedstone; + public static Block concealedRepeater_Powered; + public static Block concealedRepeater_Unpowered; + public static Block concealedDetector; + public static Block platform; + public static Block emergencyBox; + public static Block grating; + public static Block gratingWater; + public static Block gratingLava; + // @format + + public static final Material machine = new Material(MapColor.IRON); + + public static ArrayList hiddenBlocks = new ArrayList<>(); + public static ArrayList otherModTorchesLit = new ArrayList<>(); + public static ArrayList otherModTorchesUnlit = new ArrayList<>(); + + public static Map> sortMapBlocks = Maps.newHashMap(); + public static HashMap itemChanges = new HashMap<>(4, 1.0F); + + public static void initBlocks() + { + GCBlocks.breatheableAir = new BlockBreathableAir("breatheable_air"); + GCBlocks.brightAir = new BlockBrightAir("bright_air"); + GCBlocks.brightBreatheableAir = new BlockBrightBreathableAir("bright_breathable_air"); + GCBlocks.brightLamp = new BlockBrightLamp("arclamp"); + GCBlocks.treasureChestTier1 = new BlockTier1TreasureChest("treasure_chest"); + GCBlocks.landingPad = new BlockLandingPad("landing_pad"); + GCBlocks.landingPadFull = new BlockLandingPadFull("landing_pad_full"); + GCBlocks.unlitTorch = new BlockUnlitTorch(false, "unlit_torch"); + GCBlocks.unlitTorchLit = new BlockUnlitTorch(true, "unlit_torch_lit"); + GCBlocks.oxygenDistributor = new BlockOxygenDistributor("distributor"); + GCBlocks.oxygenPipe = new BlockFluidPipe("fluid_pipe", BlockFluidPipe.EnumPipeMode.NORMAL); + GCBlocks.oxygenPipePull = new BlockFluidPipe("fluid_pipe_pull", BlockFluidPipe.EnumPipeMode.PULL); + GCBlocks.oxygenCollector = new BlockOxygenCollector("collector"); + GCBlocks.nasaWorkbench = new BlockNasaWorkbench("rocket_workbench"); + GCBlocks.compactNasaWorkbench = new BlockCompactNasaWorkbench("compact_workbench"); + GCBlocks.fallenMeteor = new BlockFallenMeteor("fallen_meteor"); + GCBlocks.basicBlock = new BlockBasic("basic_block_core"); + GCBlocks.airLockFrame = new BlockAirLockFrame("air_lock_frame"); + GCBlocks.airLockSeal = new BlockAirLockWall("air_lock_seal"); + // These glass types have to be registered as 6 separate blocks, + // - (a) to allow different coloring of each one and + // - (b) because the Forge + // MultiLayer custom model does not allow for different textures to be set for different variants + GCBlocks.spaceGlassVanilla = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_vanilla", GlassType.VANILLA, GlassFrame.PLAIN, null).setHardness(0.3F).setResistance(3F); + GCBlocks.spaceGlassClear = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_clear", GlassType.CLEAR, GlassFrame.PLAIN, null).setHardness(0.3F).setResistance(3F); + GCBlocks.spaceGlassStrong = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_strong", GlassType.STRONG, GlassFrame.PLAIN, null).setHardness(4F).setResistance(35F); + GCBlocks.spaceGlassTinVanilla = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_vanilla_tin", GlassType.VANILLA, GlassFrame.TIN_DECO, GCBlocks.spaceGlassVanilla).setHardness(0.3F).setResistance(4F); + GCBlocks.spaceGlassTinClear = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_clear_tin", GlassType.CLEAR, GlassFrame.TIN_DECO, GCBlocks.spaceGlassClear).setHardness(0.3F).setResistance(4F); + GCBlocks.spaceGlassTinStrong = (BlockSpaceGlass) new BlockSpaceGlass("space_glass_strong_tin", GlassType.STRONG, GlassFrame.TIN_DECO, GCBlocks.spaceGlassStrong).setHardness(4F).setResistance(35F); + GCBlocks.crafting = new BlockCrafting("magnetic_table"); + GCBlocks.refinery = new BlockRefinery("refinery"); + GCBlocks.oxygenCompressor = new BlockOxygenCompressor(false, "oxygen_compressor"); + GCBlocks.fuelLoader = new BlockFuelLoader("fuel_loader"); + GCBlocks.spaceStationBase = new BlockSpaceStationBase("space_station_base"); + GCBlocks.fakeBlock = new BlockMulti("block_multi"); + GCBlocks.oxygenSealer = new BlockOxygenSealer("sealer"); + GCBlocks.sealableBlock = new BlockEnclosed("enclosed"); + GCBlocks.oxygenDetector = new BlockOxygenDetector("oxygen_detector"); + GCBlocks.cargoLoader = new BlockCargoLoader("cargo"); + GCBlocks.parachest = new BlockParaChest("parachest"); + GCBlocks.solarPanel = new BlockSolar("solar"); + GCBlocks.radioTelescope = new BlockDish("dishbase"); + GCBlocks.machineBase = new BlockMachine("machine"); + GCBlocks.machineBase2 = new BlockMachine2("machine2"); + GCBlocks.machineBase3 = new BlockMachine3("machine3"); + GCBlocks.machineBase4 = new BlockMachine4("machine4"); + GCBlocks.machineTiered = new BlockMachineTiered("machine_tiered"); + GCBlocks.aluminumWire = new BlockAluminumWire("aluminum_wire"); + GCBlocks.panelLighting = new BlockPanelLighting("panel_lighting"); + GCBlocks.glowstoneTorch = new BlockGlowstoneTorch("glowstone_torch"); + GCBlocks.blockMoon = new BlockBasicMoon("basic_block_moon"); + GCBlocks.cheeseBlock = new BlockCheese("cheese"); + GCBlocks.spinThruster = new BlockSpinThruster("spin_thruster"); + GCBlocks.screen = new BlockScreen("view_screen"); + GCBlocks.telemetry = new BlockTelemetry("telemetry"); + GCBlocks.fluidTank = new BlockFluidTank("fluid_tank"); + GCBlocks.bossSpawner = new BlockBossSpawner("boss_spawner"); + GCBlocks.slabGCHalf = new BlockSlabGC("slab_gc_half", Material.ROCK); + GCBlocks.slabGCDouble = new BlockDoubleSlabGC("slab_gc_double", Material.ROCK); + GCBlocks.tinStairs1 = new BlockStairsGC("tin_stairs_1", basicBlock.getDefaultState().withProperty(BlockBasic.BASIC_TYPE, BlockBasic.EnumBlockBasic.ALUMINUM_DECORATION_BLOCK_0)).setHardness(2.0F); + GCBlocks.tinStairs2 = new BlockStairsGC("tin_stairs_2", basicBlock.getDefaultState().withProperty(BlockBasic.BASIC_TYPE, BlockBasic.EnumBlockBasic.ALUMINUM_DECORATION_BLOCK_1)).setHardness(2.0F); + GCBlocks.moonStoneStairs = new BlockStairsGC("moon_stairs_stone", blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_STONE)).setHardness(1.5F); + GCBlocks.moonBricksStairs = new BlockStairsGC("moon_stairs_brick", blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_DUNGEON_BRICK)).setHardness(4.0F); + GCBlocks.wallGC = new BlockWallGC("wall_gc"); + GCBlocks.concealedRedstone = new BlockConcealedRedstone("concealed_redstone"); + GCBlocks.concealedRepeater_Powered = new BlockConcealedRepeater("concealed_repeater_pow", true); + GCBlocks.concealedRepeater_Unpowered = new BlockConcealedRepeater("concealed_repeater", false); + GCBlocks.concealedDetector = new BlockConcealedDetector("concealed_detector"); + GCBlocks.platform = new BlockPlatform("platform"); + GCBlocks.emergencyBox = new BlockEmergencyBox("emergency_box"); + GCBlocks.grating = new BlockGrating("grating", ConfigManagerCore.allowLiquidGratings ? Material.CARPET : Material.IRON); + GCBlocks.gratingWater = new BlockGrating("grating1", Material.WATER); + GCBlocks.gratingLava = new BlockGrating("grating2", Material.LAVA).setLightLevel(1.0F); + + // Hide certain items from NEI + GCBlocks.hiddenBlocks.add(GCBlocks.airLockSeal); + GCBlocks.hiddenBlocks.add(GCBlocks.oxygenPipePull); + GCBlocks.hiddenBlocks.add(GCBlocks.unlitTorch); + GCBlocks.hiddenBlocks.add(GCBlocks.unlitTorchLit); + GCBlocks.hiddenBlocks.add(GCBlocks.landingPadFull); + GCBlocks.hiddenBlocks.add(GCBlocks.spaceStationBase); + GCBlocks.hiddenBlocks.add(GCBlocks.bossSpawner); + GCBlocks.hiddenBlocks.add(GCBlocks.slabGCDouble); + GCBlocks.hiddenBlocks.add(GCBlocks.concealedRepeater_Powered); + + // Register blocks before register ores, so that the ItemStack picks up + // the correct item + GCBlocks.registerBlocks(); + GCBlocks.setHarvestLevels(); + } + + public static void oreDictRegistrations() + { + OreDictionary.registerOre("oreCopper", new ItemStack(GCBlocks.basicBlock, 1, 5)); + OreDictionary.registerOre("oreCopper", new ItemStack(GCBlocks.blockMoon, 1, 0)); + OreDictionary.registerOre("oreTin", new ItemStack(GCBlocks.basicBlock, 1, 6)); + OreDictionary.registerOre("oreTin", new ItemStack(GCBlocks.blockMoon, 1, 1)); + OreDictionary.registerOre("oreAluminum", new ItemStack(GCBlocks.basicBlock, 1, 7)); + OreDictionary.registerOre("oreAluminium", new ItemStack(GCBlocks.basicBlock, 1, 7)); + OreDictionary.registerOre("oreNaturalAluminum", new ItemStack(GCBlocks.basicBlock, 1, 7)); + OreDictionary.registerOre("oreSilicon", new ItemStack(GCBlocks.basicBlock, 1, 8)); + OreDictionary.registerOre("oreCheese", new ItemStack(GCBlocks.blockMoon, 1, 2)); + + OreDictionary.registerOre("blockCopper", new ItemStack(GCBlocks.basicBlock, 1, 9)); + OreDictionary.registerOre("blockTin", new ItemStack(GCBlocks.basicBlock, 1, 10)); + OreDictionary.registerOre("blockAluminum", new ItemStack(GCBlocks.basicBlock, 1, 11)); + OreDictionary.registerOre("blockAluminium", new ItemStack(GCBlocks.basicBlock, 1, 11)); + OreDictionary.registerOre("blockSilicon", new ItemStack(GCBlocks.basicBlock, 1, 13)); + + OreDictionary.registerOre("turfMoon", new ItemStack(GCBlocks.blockMoon, 1, EnumBlockBasicMoon.MOON_TURF.getMeta())); + OreDictionary.registerOre("itemCharcoal", new ItemStack(Items.COAL, 1, 1)); + OreDictionary.registerOre("itemCoal", new ItemStack(Items.COAL, 1)); + } + + public static void finalizeSort() + { + List itemOrderListBlocks = Lists.newArrayList(); + for (EnumSortCategoryBlock type : EnumSortCategoryBlock.values()) + { + if (type == EnumSortCategoryBlock.EGG) + continue; + List stackSorteds = sortMapBlocks.get(type); + if (stackSorteds != null) + { + itemOrderListBlocks.addAll(stackSorteds); + } + else + { + System.out.println("ERROR: null sort stack: " + type.toString()); + } + } + Comparator tabSorterBlocks = Ordering.explicit(itemOrderListBlocks).onResultOf(input -> new StackSorted(input.getItem(), input.getItemDamage())); + GalacticraftCore.galacticraftBlocksTab.setTabSorter(tabSorterBlocks); + } + + private static void setHarvestLevel(Block block, String toolClass, int level, int meta) + { + block.setHarvestLevel(toolClass, level, block.getStateFromMeta(meta)); + } + + public static void doOtherModsTorches(IForgeRegistry registry) + { + BlockUnlitTorch torch; + BlockUnlitTorch torchLit; + + if (CompatibilityManager.isTConstructLoaded) + { + Block modTorch = null; + try + { + // tconstruct.world.TinkerWorld.stoneTorch + Class clazz = Class.forName("slimeknights.tconstruct.gadgets.TinkerGadgets"); + modTorch = (Block) clazz.getDeclaredField("stoneTorch").get(null); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (modTorch != null) + { + torch = new BlockUnlitTorch(false, "unlit_torch_stone"); + torchLit = new BlockUnlitTorch(true, "unlit_torch_stone_lit"); + GCBlocks.hiddenBlocks.add(torch); + GCBlocks.hiddenBlocks.add(torchLit); + GCBlocks.otherModTorchesUnlit.add(torch); + GCBlocks.otherModTorchesLit.add(torchLit); + registerBlock(torch, ItemBlockGC.class); + registerBlock(torchLit, ItemBlockGC.class); + registry.register(torch); + registry.register(torchLit); + BlockUnlitTorch.register(torch, torchLit, modTorch); + GalacticraftCore.logger.info("Galacticraft: activating Tinker's Construct compatibility."); + } + } + } + + public static void registerFuel() + { + GCBlocks.fuel = new BlockFluidGC(GCFluids.fluidFuel, "fuel"); + ((BlockFluidGC) GCBlocks.fuel).setQuantaPerBlock(3); + GCBlocks.fuel.setTranslationKey("fuel"); + GCBlocks.registerBlock(GCBlocks.fuel, ItemBlockGC.class); + } + + public static void registerOil() + { + GCBlocks.crudeOil = new BlockFluidGC(GCFluids.fluidOil, "oil"); + ((BlockFluidGC) GCBlocks.crudeOil).setQuantaPerBlock(3); + GCBlocks.crudeOil.setTranslationKey("crude_oil_still"); + GCBlocks.registerBlock(GCBlocks.crudeOil, ItemBlockGC.class); + } + + public static void setHarvestLevels() + { + setHarvestLevel(GCBlocks.basicBlock, "pickaxe", 1, 5); // Copper ore + setHarvestLevel(GCBlocks.basicBlock, "pickaxe", 1, 6); // Tin ore + setHarvestLevel(GCBlocks.basicBlock, "pickaxe", 1, 7); // Aluminium ore + setHarvestLevel(GCBlocks.basicBlock, "pickaxe", 2, 8); // Silicon ore + setHarvestLevel(GCBlocks.fallenMeteor, "pickaxe", 3, 0); + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 1, 0); // Copper ore + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 1, 1); // Tin ore + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 1, 2); // Cheese ore + setHarvestLevel(GCBlocks.blockMoon, "shovel", 0, 3); // Moon dirt + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 0, 4); // Moon rock + + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 1); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 2); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 3, 3); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 4); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 3, 5); + setHarvestLevel(GCBlocks.slabGCHalf, "pickaxe", 1, 6); + + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 1); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 2); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 3, 3); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 4); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 3, 5); + setHarvestLevel(GCBlocks.slabGCDouble, "pickaxe", 1, 6); + + setHarvestLevel(GCBlocks.tinStairs1, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.tinStairs1, "pickaxe", 1, 0); + + setHarvestLevel(GCBlocks.moonStoneStairs, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.moonBricksStairs, "pickaxe", 3, 0); + + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 1, 0); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 1, 1); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 1, 2); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 3, 3); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 0, 4); + setHarvestLevel(GCBlocks.wallGC, "pickaxe", 3, 5); + + setHarvestLevel(GCBlocks.wallGC, "shovel", 0, 5); + + // Moon dungeon brick (actually unharvestable) + setHarvestLevel(GCBlocks.blockMoon, "pickaxe", 3, 14); + } + + public static void register(String modid, Block block, Class itemClass, Object... itemCtorArgs) + { + String key = block.getTranslationKey().substring(5); + ResourceLocation resourceLocation = new ResourceLocation(modid, key); + if (block.getRegistryName() == null) + { + block.setRegistryName(resourceLocation); + } + GCCoreUtil.registerGalacticraftBlock(key, block); + + if (itemClass != null) + { + ItemBlock item = null; + Class[] ctorArgClasses = new Class[itemCtorArgs.length + 1]; + ctorArgClasses[0] = Block.class; + for (int idx = 1; idx < ctorArgClasses.length; idx++) + { + ctorArgClasses[idx] = itemCtorArgs[idx - 1].getClass(); + } + + try + { + Constructor constructor = itemClass.getConstructor(ctorArgClasses); + item = constructor.newInstance(ObjectArrays.concat(block, itemCtorArgs)); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (item != null) + { + GCCoreUtil.registerGalacticraftItem(key, item); + if (item.getRegistryName() == null) + { + item.setRegistryName(resourceLocation); + } + } + } + + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("Use Your Own Registry") + public static void registerBlock(Block block, Class itemClass, Object... itemCtorArgs) + { + String name = block.getTranslationKey().substring(5); + if (block.getRegistryName() == null) + { + block.setRegistryName(name); + } + GCCoreUtil.registerGalacticraftBlock(name, block); + + if (itemClass != null) + { + ItemBlock item = null; + Class[] ctorArgClasses = new Class[itemCtorArgs.length + 1]; + ctorArgClasses[0] = Block.class; + for (int idx = 1; idx < ctorArgClasses.length; idx++) + { + ctorArgClasses[idx] = itemCtorArgs[idx - 1].getClass(); + } + + try + { + Constructor constructor = itemClass.getConstructor(ctorArgClasses); + item = constructor.newInstance(ObjectArrays.concat(block, itemCtorArgs)); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (item != null) + { + GCCoreUtil.registerGalacticraftItem(name, item); + if (item.getRegistryName() == null) + { + item.setRegistryName(name); + } + } + } + } + + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("Use Your Own Registry") + public static void registerBlocks(IForgeRegistry registry) + { + for (Block block : GalacticraftCore.blocksList) + { + registry.register(block); + } + + // Complete registration of various types of torches + BlockUnlitTorch.register((BlockUnlitTorch) GCBlocks.unlitTorch, (BlockUnlitTorch) GCBlocks.unlitTorchLit, Blocks.TORCH); + } + + public static boolean registeringSorted = false; + + public static void registerSorted(Block block) + { + if (block instanceof ISortableBlock) + { + Item item = Item.getItemFromBlock(block); + if (item == Items.AIR) + { + return; + } + ISortableBlock sortableBlock = (ISortableBlock) block; + NonNullList blocks = NonNullList.create(); + registeringSorted = true; + block.getSubBlocks(null, blocks); + registeringSorted = false; + if (blocks.isEmpty()) + { + blocks.add(new ItemStack(block)); + } + for (ItemStack stack : blocks) + { + EnumSortCategoryBlock categoryBlock = sortableBlock.getCategory(stack.getItemDamage()); + if (!sortMapBlocks.containsKey(categoryBlock)) + { + sortMapBlocks.put(categoryBlock, new ArrayList<>()); + } + sortMapBlocks.get(categoryBlock).add(new StackSorted(stack.getItem(), stack.getItemDamage())); + } + } + else if (block.getCreativeTab() == GalacticraftCore.galacticraftBlocksTab) + { + throw new RuntimeException(block.getClass() + " must inherit " + ISortableBlock.class.getSimpleName() + "!"); + } + } + + private static void registerBlock(Block block, Class itemClass) + { + register(Constants.MOD_ID_CORE, block, itemClass); + } + + public static void registerBlocks() + { + registerBlock(GCBlocks.landingPad, ItemBlockLandingPad.class); + registerBlock(GCBlocks.landingPadFull, ItemBlockGC.class); + registerBlock(GCBlocks.unlitTorch, ItemBlockGC.class); + registerBlock(GCBlocks.unlitTorchLit, ItemBlockGC.class); + registerBlock(GCBlocks.breatheableAir, null); + registerBlock(GCBlocks.brightAir, null); + registerBlock(GCBlocks.brightBreatheableAir, null); + registerBlock(GCBlocks.oxygenDistributor, ItemBlockDesc.class); + registerBlock(GCBlocks.oxygenCollector, ItemBlockDesc.class); + registerBlock(GCBlocks.oxygenCompressor, ItemBlockOxygenCompressor.class); + registerBlock(GCBlocks.oxygenSealer, ItemBlockDesc.class); + registerBlock(GCBlocks.oxygenDetector, ItemBlockDesc.class); + registerBlock(GCBlocks.aluminumWire, ItemBlockAluminumWire.class); + registerBlock(GCBlocks.oxygenPipe, ItemBlockDesc.class); + registerBlock(GCBlocks.oxygenPipePull, ItemBlockDesc.class); + registerBlock(GCBlocks.refinery, ItemBlockDesc.class); + registerBlock(GCBlocks.fuelLoader, ItemBlockDesc.class); + registerBlock(GCBlocks.cargoLoader, ItemBlockCargoLoader.class); + registerBlock(GCBlocks.nasaWorkbench, ItemBlockNasaWorkbench.class); + registerBlock(GCBlocks.compactNasaWorkbench, ItemBlockDesc.class); + registerBlock(GCBlocks.basicBlock, ItemBlockBase.class); + registerBlock(GCBlocks.airLockFrame, ItemBlockAirLock.class); + registerBlock(GCBlocks.airLockSeal, ItemBlockGC.class); + registerBlock(GCBlocks.spaceGlassClear, ItemBlockGlassGC.class); + registerBlock(GCBlocks.spaceGlassVanilla, ItemBlockGlassGC.class); + registerBlock(GCBlocks.spaceGlassStrong, ItemBlockGlassGC.class); + registerBlock(GCBlocks.spaceGlassTinClear, null); // The corresponding item is already registered + registerBlock(GCBlocks.spaceGlassTinVanilla, null); // The corresponding item is already registered + registerBlock(GCBlocks.spaceGlassTinStrong, null); // The corresponding item is already registered + registerBlock(GCBlocks.crafting, ItemBlockDesc.class); + registerBlock(GCBlocks.sealableBlock, ItemBlockEnclosed.class); + registerBlock(GCBlocks.spaceStationBase, ItemBlockGC.class); + registerBlock(GCBlocks.fakeBlock, null); + registerBlock(GCBlocks.parachest, ItemBlockDesc.class); + registerBlock(GCBlocks.solarPanel, ItemBlockSolar.class); + registerBlock(GCBlocks.radioTelescope, ItemBlockGC.class); + registerBlock(GCBlocks.machineBase, ItemBlockMachine.class); + registerBlock(GCBlocks.machineBase2, ItemBlockMachine.class); + registerBlock(GCBlocks.machineBase3, ItemBlockMachine.class); + registerBlock(GCBlocks.machineTiered, ItemBlockMachine.class); + registerBlock(GCBlocks.machineBase4, ItemBlockMachine.class); + registerBlock(GCBlocks.panelLighting, ItemBlockPanel.class); + registerBlock(GCBlocks.glowstoneTorch, ItemBlockDesc.class); + registerBlock(GCBlocks.fallenMeteor, ItemBlockDesc.class); + registerBlock(GCBlocks.blockMoon, ItemBlockMoon.class); + registerBlock(GCBlocks.cheeseBlock, ItemBlockCheese.class); + registerBlock(GCBlocks.spinThruster, ItemBlockThruster.class); + registerBlock(GCBlocks.screen, ItemBlockDesc.class); + registerBlock(GCBlocks.telemetry, ItemBlockDesc.class); + registerBlock(GCBlocks.brightLamp, ItemBlockArclamp.class); + registerBlock(GCBlocks.treasureChestTier1, ItemBlockDesc.class); + registerBlock(GCBlocks.fluidTank, ItemBlockDesc.class); + registerBlock(GCBlocks.bossSpawner, ItemBlockGC.class); + registerBlock(GCBlocks.tinStairs1, ItemBlockGC.class); + registerBlock(GCBlocks.tinStairs2, ItemBlockGC.class); + registerBlock(GCBlocks.moonStoneStairs, ItemBlockGC.class); + registerBlock(GCBlocks.moonBricksStairs, ItemBlockGC.class); + registerBlock(GCBlocks.wallGC, ItemBlockWallGC.class); + registerBlock(GCBlocks.slabGCHalf, ItemBlockSlabGC.class, GCBlocks.slabGCHalf, GCBlocks.slabGCDouble); + registerBlock(GCBlocks.slabGCDouble, ItemBlockSlabGC.class, GCBlocks.slabGCHalf, GCBlocks.slabGCDouble); + registerBlock(GCBlocks.concealedRedstone, ItemBlockGC.class); + registerBlock(GCBlocks.concealedRepeater_Powered, ItemBlockGC.class); + registerBlock(GCBlocks.concealedRepeater_Unpowered, ItemBlockGC.class); + registerBlock(GCBlocks.concealedDetector, ItemBlockCreativeGC.class); + registerBlock(GCBlocks.platform, ItemBlockDesc.class); + registerBlock(GCBlocks.emergencyBox, ItemBlockEmergencyBox.class); + registerBlock(GCBlocks.grating, ItemBlockGC.class); + registerBlock(GCBlocks.gratingWater, null); + registerBlock(GCBlocks.gratingLava, null); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCFluids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCFluids.java new file mode 100644 index 00000000..dce3458a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCFluids.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.BehaviorProjectileDispense; +import net.minecraft.dispenser.IBehaviorDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.dispenser.IPosition; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import micdoodle8.mods.galacticraft.core.blocks.MaterialOleaginous; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.items.ItemBucketGC; +import micdoodle8.mods.galacticraft.core.items.ItemTier1Rocket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemTier3Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +import buildcraft.api.fuels.BuildcraftFuelRegistry; +import buildcraft.api.mj.MjAPI; + +public class GCFluids +{ + + public static Fluid fluidOil; + public static Fluid fluidFuel; + public static Fluid fluidOxygenGas; + public static Fluid fluidHydrogenGas; + public static Material materialOil = new MaterialOleaginous(MapColor.BROWN); + + public static void registerFluids() + { + fluidOxygenGas = registerFluid("oxygen", 1, 13, 295, true, "oxygen_gas"); + fluidHydrogenGas = registerFluid("hydrogen", 1, 1, 295, true, "hydrogen_gas"); + } + + //TODO lets just rename our fluids to a more unique name so this isn't a thing anymore + public static void registerOilandFuel() + { + // NOTE: the way this operates will depend on the order in which + // different mods initialize (normally alphabetical order) + // Galacticraft can handle things OK if another mod registers oil or + // fuel first. The other mod may not be so happy if GC registers oil or + // fuel first. + + String oilID = ConfigManagerCore.useOldOilFluidID ? "oilgc" : "oil"; + String fuelID = ConfigManagerCore.useOldFuelFluidID ? "fuelgc" : "fuel"; + + // Oil: + if (!FluidRegistry.isFluidRegistered(oilID)) + { + ResourceLocation flowingOil = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/oil_flow"); + ResourceLocation stillOil = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/oil_still"); + Fluid gcFluidOil = new Fluid(oilID, stillOil, flowingOil).setDensity(800).setViscosity(1500); + FluidRegistry.registerFluid(gcFluidOil); + } + else + { + GalacticraftCore.logger.info("Galacticraft oil is not default, issues may occur."); + } + + fluidOil = FluidRegistry.getFluid(oilID); + + if (fluidOil.getBlock() == null) + { + GCBlocks.registerOil(); + fluidOil.setBlock(GCBlocks.crudeOil); + } + else + { + GCBlocks.crudeOil = fluidOil.getBlock(); + } + + if (GCBlocks.crudeOil != null && !FluidRegistry.getBucketFluids().contains(fluidOil)) + { + // Create a Universal Bucket AS WELL AS our type, this is needed to pull oil out of other mods tanks + FluidRegistry.addBucketForFluid(GCFluids.fluidOil); + GCItems.bucketOil = new ItemBucketGC(GCBlocks.crudeOil, fluidOil); + GCItems.bucketOil.setTranslationKey("bucket_oil"); + GCItems.registerItem(GCItems.bucketOil); + EventHandlerGC.bucketList.put(GCBlocks.crudeOil, GCItems.bucketOil); + } + + // Fuel: + if (!FluidRegistry.isFluidRegistered(fuelID)) + { + ResourceLocation flowingFuel = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/fuel_flow"); + ResourceLocation stillFuel = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/fuel_still"); + Fluid gcFluidFuel = new Fluid(fuelID, stillFuel, flowingFuel).setDensity(400).setViscosity(900); + FluidRegistry.registerFluid(gcFluidFuel); + } + else + { + GalacticraftCore.logger.info("Galacticraft fuel is not default, issues may occur."); + } + + fluidFuel = FluidRegistry.getFluid(fuelID); + + if (fluidFuel.getBlock() == null) + { + GCBlocks.registerFuel(); + GCFluids.fluidFuel.setBlock(GCBlocks.fuel); + } + else + { + GCBlocks.fuel = fluidFuel.getBlock(); + } + + if (GCBlocks.fuel != null && !FluidRegistry.getBucketFluids().contains(fluidFuel)) + { + // Create a Universal Bucket AS WELL AS our type, this is needed to pull oil out of other mods tanks + FluidRegistry.addBucketForFluid(GCFluids.fluidFuel); + GCItems.bucketFuel = new ItemBucketGC(GCBlocks.fuel, fluidFuel); + GCItems.bucketFuel.setTranslationKey("bucket_fuel"); + GCItems.registerItem(GCItems.bucketFuel); + EventHandlerGC.bucketList.put(GCBlocks.fuel, GCItems.bucketFuel); + } + } + + private static Fluid registerFluid(String fluidName, int density, int viscosity, int temperature, boolean gaseous, String fluidTexture) + { + Fluid returnFluid = FluidRegistry.getFluid(fluidName); + + if (returnFluid == null) + { + ResourceLocation texture = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/" + fluidTexture); + FluidRegistry.registerFluid(new Fluid(fluidName, texture, texture).setDensity(density).setViscosity(viscosity).setTemperature(temperature).setGaseous(gaseous)); + returnFluid = FluidRegistry.getFluid(fluidName); + } + else + { + returnFluid.setGaseous(gaseous); + } + + return returnFluid; + } + + public static void registerLegacyFluids() + { + // Register now any unregistered "oil", "fuel", "oilgc" and "fuelgc" + // fluids + // This is for legacy compatibility with any 'in the world' tanks and + // items filled in different GC versions or with different GC config + // In those cases, FluidUtil methods (and TileEntityRefinery) will + // attempt to fresh containers/tanks with the current fuel or oil type + ResourceLocation flowingOil = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/oil_flow"); + ResourceLocation flowingFuel = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/fuel_flow"); + ResourceLocation stillOil = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/oil_still"); + ResourceLocation stillFuel = new ResourceLocation(Constants.TEXTURE_PREFIX + "blocks/fluids/fuel_still"); + if (!FluidRegistry.isFluidRegistered("oil")) + { + FluidRegistry.registerFluid(new Fluid("oil", stillOil, flowingOil).setDensity(800).setViscosity(1500)); + } + if (!FluidRegistry.isFluidRegistered("oilgc")) + { + FluidRegistry.registerFluid(new Fluid("oilgc", stillOil, flowingOil).setDensity(800).setViscosity(1500)); + } + if (!FluidRegistry.isFluidRegistered("fuel")) + { + FluidRegistry.registerFluid(new Fluid("fuel", stillFuel, flowingFuel).setDensity(400).setViscosity(900)); + } + if (!FluidRegistry.isFluidRegistered("fuelgc")) + { + FluidRegistry.registerFluid(new Fluid("fuelgc", stillFuel, flowingFuel).setDensity(400).setViscosity(900)); + } + } + + public static void registerDispenserBehaviours() + { + IBehaviorDispenseItem ibehaviordispenseitem = new BehaviorDefaultDispenseItem() + { + + private final BehaviorDefaultDispenseItem dispenseBehavior = new BehaviorDefaultDispenseItem(); + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + ItemBucketGC itembucket = (ItemBucketGC) stack.getItem(); + BlockPos blockpos = source.getBlockPos().offset(source.getBlockState().getValue(BlockDispenser.FACING)); + if (itembucket.tryPlaceContainedLiquid((EntityPlayer) null, source.getWorld(), blockpos)) + { + return new ItemStack(Items.BUCKET); + } + else + { + return this.dispenseBehavior.dispense(source, stack); + } + } + }; + if (GCItems.bucketFuel != null) + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(GCItems.bucketFuel, ibehaviordispenseitem); + } + if (GCItems.bucketOil != null) + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(GCItems.bucketOil, ibehaviordispenseitem); + } + if (MarsItems.bucketSludge != null) + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(MarsItems.bucketSludge, ibehaviordispenseitem); + } + if (VenusItems.bucketSulphuricAcid != null) + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(VenusItems.bucketSulphuricAcid, ibehaviordispenseitem); + } + + // The following code is for other objects, not liquids, but it's + // convenient to keep it all together + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(GCItems.meteorChunk, new BehaviorProjectileDispense() + { + + @Override + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stack) + { + EntityMeteorChunk meteor = new EntityMeteorChunk(worldIn); + meteor.setPosition(position.getX(), position.getY(), position.getZ()); + if (stack.getItemDamage() > 0) + { + meteor.setFire(20); + meteor.isHot = true; + } + meteor.canBePickedUp = 1; + return meteor; + } + + @Override + protected float getProjectileVelocity() + { + return 1.0F; + } + }); + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(GCItems.rocketTier1, new BehaviorDefaultDispenseItem() + { + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + BlockPos pos = source.getBlockPos().offset(source.getBlockState().getValue(BlockDispenser.FACING), 2); + IBlockState iblockstate = world.getBlockState(pos); + boolean rocketPlaced = false; + if (iblockstate.getBlock() == GCBlocks.landingPadFull && GCBlocks.landingPadFull.getMetaFromState(iblockstate) == 0) + { + float centerX = pos.getX() + 0.5F; + float centerY = pos.getY() + 0.4F; + float centerZ = pos.getZ() + 0.5F; + rocketPlaced = ItemTier1Rocket.placeRocketOnPad(stack, world, world.getTileEntity(pos), centerX, centerY, centerZ); + } + + if (rocketPlaced) + { + stack.splitStack(1); + } + return stack; + } + }); + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(MarsItems.rocketMars, new BehaviorDefaultDispenseItem() + { + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + BlockPos pos = source.getBlockPos().offset(source.getBlockState().getValue(BlockDispenser.FACING), 2); + IBlockState iblockstate = world.getBlockState(pos); + boolean rocketPlaced = false; + if (iblockstate.getBlock() == GCBlocks.landingPadFull && GCBlocks.landingPadFull.getMetaFromState(iblockstate) == 0) + { + float centerX = pos.getX() + 0.5F; + float centerY = pos.getY() + 0.4F; + float centerZ = pos.getZ() + 0.5F; + rocketPlaced = ItemTier2Rocket.placeRocketOnPad(stack, world, world.getTileEntity(pos), centerX, centerY, centerZ); + } + + if (rocketPlaced) + { + stack.splitStack(1); + } + return stack; + } + }); + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(AsteroidsItems.tier3Rocket, new BehaviorDefaultDispenseItem() + { + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + BlockPos pos = source.getBlockPos().offset(source.getBlockState().getValue(BlockDispenser.FACING), 2); + IBlockState iblockstate = world.getBlockState(pos); + boolean rocketPlaced = false; + if (iblockstate.getBlock() == GCBlocks.landingPadFull && GCBlocks.landingPadFull.getMetaFromState(iblockstate) == 0) + { + float centerX = pos.getX() + 0.5F; + float centerY = pos.getY() + 0.4F; + float centerZ = pos.getZ() + 0.5F; + rocketPlaced = ItemTier3Rocket.placeRocketOnPad(stack, world, world.getTileEntity(pos), centerX, centerY, centerZ); + } + + if (rocketPlaced) + { + stack.splitStack(1); + } + return stack; + } + }); + } + + public static void registerBCFuel() + { + BuildcraftFuelRegistry.fuel.addFuel(GCFluids.fluidFuel, 5 * MjAPI.MJ, 9000); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCItems.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCItems.java new file mode 100644 index 00000000..8f91b420 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GCItems.java @@ -0,0 +1,405 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.Item.ToolMaterial; +import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.registries.IForgeRegistry; + +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemArmorGC; +import micdoodle8.mods.galacticraft.core.items.ItemAxeGC; +import micdoodle8.mods.galacticraft.core.items.ItemBase; +import micdoodle8.mods.galacticraft.core.items.ItemBasic; +import micdoodle8.mods.galacticraft.core.items.ItemBattery; +import micdoodle8.mods.galacticraft.core.items.ItemBatteryInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemBuggy; +import micdoodle8.mods.galacticraft.core.items.ItemBuggyMaterial; +import micdoodle8.mods.galacticraft.core.items.ItemCanister; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemCheese; +import micdoodle8.mods.galacticraft.core.items.ItemEmergencyKit; +import micdoodle8.mods.galacticraft.core.items.ItemFlag; +import micdoodle8.mods.galacticraft.core.items.ItemFood; +import micdoodle8.mods.galacticraft.core.items.ItemFuelCanister; +import micdoodle8.mods.galacticraft.core.items.ItemHoeGC; +import micdoodle8.mods.galacticraft.core.items.ItemIC2Compat; +import micdoodle8.mods.galacticraft.core.items.ItemKey; +import micdoodle8.mods.galacticraft.core.items.ItemMeteorChunk; +import micdoodle8.mods.galacticraft.core.items.ItemMeteoricIron; +import micdoodle8.mods.galacticraft.core.items.ItemMoon; +import micdoodle8.mods.galacticraft.core.items.ItemOilCanister; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenGear; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenMask; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.items.ItemPickaxeGC; +import micdoodle8.mods.galacticraft.core.items.ItemPreLaunchChecklist; +import micdoodle8.mods.galacticraft.core.items.ItemRocketEngineGC; +import micdoodle8.mods.galacticraft.core.items.ItemSchematic; +import micdoodle8.mods.galacticraft.core.items.ItemSensorGlasses; +import micdoodle8.mods.galacticraft.core.items.ItemSpadeGC; +import micdoodle8.mods.galacticraft.core.items.ItemSwordGC; +import micdoodle8.mods.galacticraft.core.items.ItemTier1Rocket; +import micdoodle8.mods.galacticraft.core.items.ItemUniversalWrench; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.StackSorted; +import micdoodle8.mods.galacticraft.core.wrappers.PartialCanister; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; + +import mezz.jei.api.ingredients.IIngredientBlacklist; + +public class GCItems +{ + //@noformat + public static Item oxTankLight; + public static Item oxTankMedium; + public static Item oxTankHeavy; + public static Item oxMask; + public static Item rocketTier1; + public static Item sensorGlasses; + public static Item sensorLens; + public static Item steelPickaxe; + public static Item steelAxe; + public static Item steelHoe; + public static Item steelSpade; + public static Item steelSword; + public static Item steelHelmet; + public static Item steelChestplate; + public static Item steelLeggings; + public static Item steelBoots; + public static Item canister; + public static Item oxygenVent; + public static Item oxygenFan; + public static Item oxygenConcentrator; + public static Item rocketEngine; + public static Item heavyPlatingTier1; + public static Item partNoseCone; + public static Item partFins; + public static Item buggy; + public static Item flag; + public static Item oxygenGear; + public static Item parachute; + public static Item canvas; + public static Item flagPole; + public static Item oilCanister; + public static Item fuelCanister; + public static Item oxygenCanisterInfinite; + public static Item schematic; + public static Item key; + public static Item partBuggy; + public static Item basicItem; + public static Item foodItem; + public static Item battery; + public static Item infiniteBatery; + public static Item meteorChunk; + public static Item wrench; + public static Item cheeseCurd; + public static Item meteoricIronRaw; + public static Item itemBasicMoon; + public static Item bucketOil; + public static Item bucketFuel; + public static Item prelaunchChecklist; + public static Item dungeonFinder; + public static Item ic2compat; + public static Item emergencyKit; + //@format + + public static ArmorMaterial ARMOR_SENSOR_GLASSES = EnumHelper.addArmorMaterial("SENSORGLASSES", "", 200, new int[] {0, 0, 0, 0}, 0, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 0.0F); + public static ArmorMaterial ARMOR_STEEL = EnumHelper.addArmorMaterial("steel", "", 30, new int[] {3, 6, 8, 3}, 9, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 1.0F); + public static ToolMaterial TOOL_STEEL = EnumHelper.addToolMaterial("steel", 3, 768, 5.0F, 2, 8); + + public static ArrayList hiddenItems = new ArrayList<>(); + public static LinkedList canisterTypes = new LinkedList<>(); + public static Map> sortMapItems = Maps.newHashMap(); + public static HashMap itemChanges = new HashMap<>(4, 1.0F); + + public static void initItems() + { + GCItems.oxTankLight = new ItemOxygenTank(1, "oxygen_tank_light_full"); + GCItems.oxTankMedium = new ItemOxygenTank(2, "oxygen_tank_med_full"); + GCItems.oxTankHeavy = new ItemOxygenTank(3, "oxygen_tank_heavy_full"); + GCItems.oxMask = new ItemOxygenMask("oxygen_mask"); + GCItems.rocketTier1 = new ItemTier1Rocket("rocket_t1"); + GCItems.sensorGlasses = new ItemSensorGlasses("sensor_glasses"); + GCItems.steelPickaxe = new ItemPickaxeGC("steel_pickaxe"); + GCItems.steelAxe = new ItemAxeGC("steel_axe"); + GCItems.steelHoe = new ItemHoeGC("steel_hoe"); + GCItems.steelSpade = new ItemSpadeGC("steel_shovel"); + GCItems.steelSword = new ItemSwordGC("steel_sword"); + GCItems.steelHelmet = new ItemArmorGC(EntityEquipmentSlot.HEAD, "helmet"); + GCItems.steelChestplate = new ItemArmorGC(EntityEquipmentSlot.CHEST, "chestplate"); + GCItems.steelLeggings = new ItemArmorGC(EntityEquipmentSlot.LEGS, "leggings"); + GCItems.steelBoots = new ItemArmorGC(EntityEquipmentSlot.FEET, "boots"); + GCItems.canister = new ItemCanister("canister"); + GCItems.oxygenVent = new ItemBase("air_vent"); + GCItems.oxygenFan = new ItemBase("air_fan"); + GCItems.oxygenConcentrator = new ItemBase("oxygen_concentrator"); + GCItems.heavyPlatingTier1 = new ItemBase("heavy_plating").setSmeltingXP(1F); + GCItems.rocketEngine = new ItemRocketEngineGC("engine"); + GCItems.partFins = new ItemBase("rocket_fins"); + GCItems.partNoseCone = new ItemBase("nose_cone"); + GCItems.sensorLens = new ItemBase("sensor_lens"); + GCItems.buggy = new ItemBuggy("buggy"); + GCItems.flag = new ItemFlag("flag"); + GCItems.oxygenGear = new ItemOxygenGear("oxygen_gear"); + GCItems.parachute = new ItemParaChute("parachute"); + GCItems.canvas = new ItemBase("canvas"); + GCItems.oilCanister = new ItemOilCanister("oil_canister_partial"); + GCItems.fuelCanister = new ItemFuelCanister("fuel_canister_partial"); + GCItems.oxygenCanisterInfinite = new ItemCanisterOxygenInfinite("infinite_oxygen"); + GCItems.flagPole = new ItemBase("steel_pole"); + GCItems.schematic = new ItemSchematic("schematic"); + GCItems.key = new ItemKey("key"); + GCItems.partBuggy = new ItemBuggyMaterial("buggymat"); + GCItems.basicItem = new ItemBasic("basic_item"); + GCItems.foodItem = new ItemFood("food"); + GCItems.battery = new ItemBattery("battery"); + GCItems.infiniteBatery = new ItemBatteryInfinite("infinite_battery"); + GCItems.meteorChunk = new ItemMeteorChunk("meteor_chunk"); + GCItems.wrench = new ItemUniversalWrench("standard_wrench"); + GCItems.cheeseCurd = new ItemCheese(1, 0.1F, false); + GCItems.meteoricIronRaw = new ItemMeteoricIron("meteoric_iron_raw"); + GCItems.itemBasicMoon = new ItemMoon("item_basic_moon"); + GCItems.prelaunchChecklist = new ItemPreLaunchChecklist("prelaunch_checklist"); + GCItems.dungeonFinder = new ItemBase("dungeonfinder"); + GCItems.ic2compat = new ItemIC2Compat("ic2compat"); + GCItems.emergencyKit = new ItemEmergencyKit("emergency_kit"); + + GCItems.registerHarvestLevels(); + + GCItems.registerItems(); + GCItems.itemChanges.put(new ItemStack(GCItems.basicItem, 1, 15), new ItemStack(GCItems.foodItem, 1, 0)); + GCItems.itemChanges.put(new ItemStack(GCItems.basicItem, 1, 16), new ItemStack(GCItems.foodItem, 1, 1)); + GCItems.itemChanges.put(new ItemStack(GCItems.basicItem, 1, 17), new ItemStack(GCItems.foodItem, 1, 2)); + GCItems.itemChanges.put(new ItemStack(GCItems.basicItem, 1, 18), new ItemStack(GCItems.foodItem, 1, 3)); + + GalacticraftCore.proxy.registerCanister(new PartialCanister(GCItems.oilCanister, Constants.MOD_ID_CORE, "oil_canister_partial", 7)); + GalacticraftCore.proxy.registerCanister(new PartialCanister(GCItems.fuelCanister, Constants.MOD_ID_CORE, "fuel_canister_partial", 7)); + } + + public static void oreDictRegistrations() + { + for (int i = 0; i < ItemBasic.names.length; i++) + { + if (ItemBasic.names[i].contains("ingot") || ItemBasic.names[i].contains("compressed") || ItemBasic.names[i].contains("wafer")) + { + String name = ItemBasic.names[i]; + while (name.contains("_")) + { + int loc = name.indexOf("_"); + name = name.substring(0, loc) + name.substring(loc + 1, loc + 2).toUpperCase() + name.substring(loc + 2, name.length()); + } + OreDictionary.registerOre(name, new ItemStack(GCItems.basicItem, 1, i)); + } + } + + OreDictionary.registerOre("foodCheese", new ItemStack(GCItems.cheeseCurd, 1, 0)); + OreDictionary.registerOre("compressedMeteoricIron", new ItemStack(GCItems.itemBasicMoon, 1, 1)); + OreDictionary.registerOre("ingotMeteoricIron", new ItemStack(GCItems.itemBasicMoon, 1, 0)); + if (CompatibilityManager.useAluDust()) + { + OreDictionary.registerOre("dustAluminum", new ItemStack(GCItems.ic2compat, 1, 0)); + OreDictionary.registerOre("dustAluminium", new ItemStack(GCItems.ic2compat, 1, 0)); + } + if (CompatibilityManager.isIc2Loaded()) + { + OreDictionary.registerOre("crushedAluminum", new ItemStack(GCItems.ic2compat, 1, 2)); + OreDictionary.registerOre("crushedPurifiedAluminum", new ItemStack(GCItems.ic2compat, 1, 1)); + OreDictionary.registerOre("dustTinyTitanium", new ItemStack(GCItems.ic2compat, 1, 7)); + } + + GalacticraftCore.proxy.registerCanister(new PartialCanister(GCItems.oilCanister, Constants.MOD_ID_CORE, "oil_canister_partial", 7)); + GalacticraftCore.proxy.registerCanister(new PartialCanister(GCItems.fuelCanister, Constants.MOD_ID_CORE, "fuel_canister_partial", 7)); + OreDictionary.registerOre(ConfigManagerCore.otherModsSilicon, new ItemStack(GCItems.basicItem, 1, 2)); + } + + /** + * Do not call this until after mod loading is complete because JEI doesn't + * have an internal item blacklist until it services an + * FMLLoadCompleteEvent. (Seriously?!) + */ + public static void hideItemsJEI(IIngredientBlacklist jeiHidden) + { + if (jeiHidden != null) + { + for (ItemStack item : GCItems.itemChanges.keySet()) + { + jeiHidden.addIngredientToBlacklist(item.copy()); + } + + for (Item item : GCItems.hiddenItems) + { + jeiHidden.addIngredientToBlacklist(new ItemStack(item, 1, 0)); + } + + for (Block block : GCBlocks.hiddenBlocks) + { + jeiHidden.addIngredientToBlacklist(new ItemStack(block, 1, 0)); + if (block == GCBlocks.slabGCDouble) + { + for (int j = 1; j < 7; j++) + jeiHidden.addIngredientToBlacklist(new ItemStack(block, 1, j)); + } + } + } + } + + public static void finalizeSort() + { + List itemOrderListItems = Lists.newArrayList(); + for (EnumSortCategoryItem type : EnumSortCategoryItem.values()) + { + List stackSorteds = sortMapItems.get(type); + if (stackSorteds != null) + { + itemOrderListItems.addAll(stackSorteds); + } + else + { + System.out.println("ERROR: null sort stack: " + type.toString()); + } + } + + Comparator tabSorterItems = Ordering.explicit(itemOrderListItems).onResultOf(input -> new StackSorted(input.getItem(), input.getItemDamage())); + + GalacticraftCore.galacticraftItemsTab.setTabSorter(tabSorterItems); + } + + public static void registerHarvestLevels() + { + GCItems.steelPickaxe.setHarvestLevel("pickaxe", 4); + GCItems.steelAxe.setHarvestLevel("axe", 4); + GCItems.steelSpade.setHarvestLevel("shovel", 4); + } + + public static void registerSorted(Item item) + { + if (item instanceof ISortableItem) + { + ISortableItem sortableItem = (ISortableItem) item; + NonNullList items = NonNullList.create(); + item.getSubItems(GalacticraftCore.galacticraftItemsTab, items); + for (ItemStack stack : items) + { + EnumSortCategoryItem categoryItem = sortableItem.getCategory(stack.getItemDamage()); + if (!sortMapItems.containsKey(categoryItem)) + { + sortMapItems.put(categoryItem, new ArrayList<>()); + } + sortMapItems.get(categoryItem).add(new StackSorted(stack.getItem(), stack.getItemDamage())); + } + } + else if (item.getCreativeTab() == GalacticraftCore.galacticraftItemsTab) + { + throw new RuntimeException(item.getClass() + " must inherit " + ISortableItem.class.getSimpleName() + "!"); + } + } + + public static void registerItems() + { + GCItems.registerItem(GCItems.rocketTier1); + GCItems.registerItem(GCItems.oxMask); + GCItems.registerItem(GCItems.oxygenGear); + GCItems.registerItem(GCItems.oxTankLight); + GCItems.registerItem(GCItems.oxTankMedium); + GCItems.registerItem(GCItems.oxTankHeavy); + GCItems.registerItem(GCItems.oxygenCanisterInfinite); + GCItems.registerItem(GCItems.sensorLens); + GCItems.registerItem(GCItems.sensorGlasses); + GCItems.registerItem(GCItems.wrench); + GCItems.registerItem(GCItems.steelPickaxe); + GCItems.registerItem(GCItems.steelAxe); + GCItems.registerItem(GCItems.steelHoe); + GCItems.registerItem(GCItems.steelSpade); + GCItems.registerItem(GCItems.steelSword); + GCItems.registerItem(GCItems.steelHelmet); + GCItems.registerItem(GCItems.steelChestplate); + GCItems.registerItem(GCItems.steelLeggings); + GCItems.registerItem(GCItems.steelBoots); + GCItems.registerItem(GCItems.canister); + GCItems.registerItem(GCItems.oxygenVent); + GCItems.registerItem(GCItems.oxygenFan); + GCItems.registerItem(GCItems.oxygenConcentrator); + GCItems.registerItem(GCItems.rocketEngine); + GCItems.registerItem(GCItems.heavyPlatingTier1); + GCItems.registerItem(GCItems.partNoseCone); + GCItems.registerItem(GCItems.partFins); + GCItems.registerItem(GCItems.flagPole); + GCItems.registerItem(GCItems.canvas); + GCItems.registerItem(GCItems.oilCanister); + GCItems.registerItem(GCItems.fuelCanister); + GCItems.registerItem(GCItems.schematic); + GCItems.registerItem(GCItems.key); + GCItems.registerItem(GCItems.partBuggy); + GCItems.registerItem(GCItems.buggy); + GCItems.registerItem(GCItems.basicItem); + GCItems.registerItem(GCItems.foodItem); + GCItems.registerItem(GCItems.battery); + GCItems.registerItem(GCItems.infiniteBatery); + GCItems.registerItem(GCItems.meteorChunk); + GCItems.registerItem(GCItems.cheeseCurd); + GCItems.registerItem(GCItems.meteoricIronRaw); + GCItems.registerItem(GCItems.itemBasicMoon); + // GCItems.registerItem(GCItems.cheeseBlock); + GCItems.registerItem(GCItems.flag); + GCItems.registerItem(GCItems.parachute); + GCItems.registerItem(GCItems.prelaunchChecklist); + GCItems.registerItem(GCItems.dungeonFinder); + GCItems.registerItem(GCItems.emergencyKit); + + GCItems.canisterTypes.add((ItemCanisterGeneric) GCItems.fuelCanister); + GCItems.canisterTypes.add((ItemCanisterGeneric) GCItems.oilCanister); + + if (CompatibilityManager.useAluDust()) + GCItems.registerItem(GCItems.ic2compat); + } + + public static void registerItem(Item item) + { + String name = item.getTranslationKey().substring(5); + if (item.getRegistryName() == null) + { + item.setRegistryName(name); + } + GCCoreUtil.registerGalacticraftItem(name, item); + GalacticraftCore.itemListTrue.add(item); + GalacticraftCore.proxy.postRegisterItem(item); + } + + public static void registerItems(IForgeRegistry registry) + { + for (ItemStack item : GalacticraftCore.itemList) + { + registry.register(item.getItem()); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GalacticraftCore.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GalacticraftCore.java new file mode 100644 index 00000000..f2a5a8aa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/GalacticraftCore.java @@ -0,0 +1,936 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; + +import javax.imageio.ImageIO; +import javax.imageio.ImageWriteParam; +import javax.imageio.ImageWriter; + +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.world.DimensionType; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldProviderSurface; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.SpawnListEntry; + +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.Mod.Instance; +import net.minecraftforge.fml.common.ModMetadata; +import net.minecraftforge.fml.common.SidedProxy; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLInterModComms; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerAboutToStartEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.event.FMLServerStoppedEvent; +import net.minecraftforge.fml.common.event.FMLServerStoppingEvent; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.registries.GameData; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.RegistryManager; +import net.minecraftforge.server.permission.DefaultPermissionLevel; +import net.minecraftforge.server.permission.PermissionAPI; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialType; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Moon; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.galaxies.SolarSystem; +import micdoodle8.mods.galacticraft.api.galaxies.Star; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.core.advancement.GCTriggers; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import micdoodle8.mods.galacticraft.core.client.gui.GuiHandler; +import micdoodle8.mods.galacticraft.core.client.screen.GameScreenBasic; +import micdoodle8.mods.galacticraft.core.client.screen.GameScreenCelestial; +import micdoodle8.mods.galacticraft.core.client.screen.GameScreenText; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.command.CommandGCEnergyUnits; +import micdoodle8.mods.galacticraft.core.command.CommandGCHelp; +import micdoodle8.mods.galacticraft.core.command.CommandGCHouston; +import micdoodle8.mods.galacticraft.core.command.CommandGCInv; +import micdoodle8.mods.galacticraft.core.command.CommandGCKit; +import micdoodle8.mods.galacticraft.core.command.CommandJoinSpaceRace; +import micdoodle8.mods.galacticraft.core.command.CommandKeepDim; +import micdoodle8.mods.galacticraft.core.command.CommandPlanetTeleport; +import micdoodle8.mods.galacticraft.core.command.CommandSpaceStationAddOwner; +import micdoodle8.mods.galacticraft.core.command.CommandSpaceStationChangeOwner; +import micdoodle8.mods.galacticraft.core.command.CommandSpaceStationRemoveOwner; +import micdoodle8.mods.galacticraft.core.datafix.GCCoreDataFixers; +import micdoodle8.mods.galacticraft.core.dimension.GCDimensions; +import micdoodle8.mods.galacticraft.core.dimension.TeleportTypeMoon; +import micdoodle8.mods.galacticraft.core.dimension.TeleportTypeOrbit; +import micdoodle8.mods.galacticraft.core.dimension.TeleportTypeOverworld; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderOverworldOrbit; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.grid.ChunkPowerHandler; +import micdoodle8.mods.galacticraft.core.energy.tile.TileCableIC2Sealed; +import micdoodle8.mods.galacticraft.core.entities.EntityAlienVillager; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedWitch; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import micdoodle8.mods.galacticraft.core.entities.EntityParachest; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import micdoodle8.mods.galacticraft.core.entities.player.GCCapabilities; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerBaseMP; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.event.LootHandlerGC; +import micdoodle8.mods.galacticraft.core.items.ItemSchematic; +import micdoodle8.mods.galacticraft.core.network.ConnectionEvents; +import micdoodle8.mods.galacticraft.core.network.ConnectionPacket; +import micdoodle8.mods.galacticraft.core.network.GalacticraftChannelHandler; +import micdoodle8.mods.galacticraft.core.proxy.CommonProxyCore; +import micdoodle8.mods.galacticraft.core.recipe.RecipeManagerGC; +import micdoodle8.mods.galacticraft.core.schematic.SchematicAdd; +import micdoodle8.mods.galacticraft.core.schematic.SchematicMoonBuggy; +import micdoodle8.mods.galacticraft.core.schematic.SchematicRocketT1; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWire; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWireSwitch; +import micdoodle8.mods.galacticraft.core.tile.TileEntityArclamp; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFueler; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFuelerSingle; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoUnloader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCompactNasaWorkbench; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDish; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEmergencyBox; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFallenMeteor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPadSingle; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNasaWorkbench; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNull; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDetector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.tile.TileEntityParaChest; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlayerDetector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySpaceStationBase; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.tile.TileEntityThruster; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.CreativeTabGC; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.GalacticLog; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.world.ChunkLoadingCallback; +import micdoodle8.mods.galacticraft.core.world.gen.BiomeMoon; +import micdoodle8.mods.galacticraft.core.world.gen.BiomeOrbit; +import micdoodle8.mods.galacticraft.core.world.gen.OreGenOtherMods; +import micdoodle8.mods.galacticraft.core.world.gen.OverworldGenerator; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.recipe.RecipeManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.mars.recipe.RecipeManagerMars; +import micdoodle8.mods.galacticraft.planets.venus.recipe.RecipeManagerVenus; + +import api.player.server.ServerPlayerAPI; + +//@noformat +@Mod( + modid = Constants.MOD_ID_CORE, + name = GalacticraftCore.NAME, + version = Constants.VERSION, + dependencies = Constants.DEPENDENCIES_FORGE + Constants.DEPENDENCIES_MICCORE, + useMetadata = false, + acceptedMinecraftVersions = "[1.12, 1.13)", + guiFactory = "micdoodle8.mods.galacticraft.core.client.gui.screen.ConfigGuiFactoryCore" +) +public class GalacticraftCore +{ + public static final String NAME = "Galacticraft Core"; + //@format + + private File GCCoreSource; + + @SidedProxy(clientSide = "micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore", serverSide = "micdoodle8.mods.galacticraft.core.proxy.CommonProxyCore") + public static CommonProxyCore proxy; + + @Instance(Constants.MOD_ID_CORE) + public static GalacticraftCore instance; + + /** + * This will be TRUE from this point forward at all times + */ + @Deprecated + @ReplaceWith("Remove all checks to this") + public static boolean isPlanetsLoaded = true; + + public static boolean isHeightConflictingModInstalled; + + public static GalacticraftChannelHandler packetPipeline; + public static GCPlayerHandler handler; + + public static CreativeTabGC galacticraftBlocksTab; + public static CreativeTabGC galacticraftItemsTab; + + public static SolarSystem solarSystemSol; + public static Planet planetMercury; + public static Planet planetVenus; + public static Planet planetMars; + public static Planet planetOverworld; + public static Planet planetJupiter; + public static Planet planetSaturn; + public static Planet planetUranus; + public static Planet planetNeptune; + public static Moon moonMoon; + public static Satellite satelliteSpaceStation; + + public static LinkedList itemList = new LinkedList<>(); + public static LinkedList itemListTrue = new LinkedList<>(); + public static LinkedList blocksList = new LinkedList<>(); + public static LinkedList biomesList = new LinkedList<>(); + + public static ImageWriter jpgWriter; + public static ImageWriteParam writeParam; + public static boolean enableJPEG = false; + + public static GalacticLog logger; + + public GalacticraftCore() + { + logger = new GalacticLog(this); + } + + static + { + FluidRegistry.enableUniversalBucket(); + } + + @EventHandler + public void preInit(FMLPreInitializationEvent event) + { + GCCoreSource = event.getSourceFile(); + this.initModInfo(event.getModMetadata()); + GCCapabilities.register(); + + GCCoreUtil.nextID = 0; + + if (CompatibilityManager.isSmartMovingLoaded || CompatibilityManager.isWitcheryLoaded) + { + isHeightConflictingModInstalled = true; + } + + GalacticraftCore.solarSystemSol = new SolarSystem("sol", "milky_way").setMapPosition(new Vector3(0.0F, 0.0F, 0.0F)); + GalacticraftCore.planetOverworld = (Planet) new Planet("overworld").setParentSolarSystem(GalacticraftCore.solarSystemSol).setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(0.0F); + GalacticraftCore.moonMoon = (Moon) new Moon("moon").setParentPlanet(GalacticraftCore.planetOverworld).setRelativeSize(0.2667F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(13F, 13F)).setRelativeOrbitTime(1 / 0.01F); + GalacticraftCore.satelliteSpaceStation = (Satellite) new Satellite("spacestation.overworld").setParentBody(GalacticraftCore.planetOverworld).setRelativeSize(0.2667F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(9F, 9F)).setRelativeOrbitTime(1 / 0.05F); + + MinecraftForge.EVENT_BUS.register(new EventHandlerGC()); + handler = new GCPlayerHandler(); + MinecraftForge.EVENT_BUS.register(handler); + GalacticraftCore.proxy.preInit(event); + + ConnectionPacket.bus = NetworkRegistry.INSTANCE.newEventDrivenChannel(ConnectionPacket.CHANNEL); + ConnectionPacket.bus.register(new ConnectionPacket()); + + this.handleConfigFilenameChange(event); + + GalacticraftCore.galacticraftBlocksTab = new CreativeTabGC(CreativeTabs.getNextID(), "galacticraft_blocks", null, null); + GalacticraftCore.galacticraftItemsTab = new CreativeTabGC(CreativeTabs.getNextID(), "galacticraft_items", null, null); + + GCFluids.registerOilandFuel(); + + if (CompatibilityManager.PlayerAPILoaded) + { + ServerPlayerAPI.register(Constants.MOD_ID_CORE, GCPlayerBaseMP.class); + } + + GCBlocks.initBlocks(); + GCItems.initItems(); + + GCFluids.registerFluids(); + + // Force initialisation of GC biome types in preinit (after config load) + // - this helps BiomeTweaker by initialising mod biomes in a fixed order + // during mod loading + GalacticraftCore.satelliteSpaceStation.setBiomeInfo(BiomeOrbit.space); + GalacticraftCore.moonMoon.setBiomeInfo(BiomeMoon.moonFlat); + } + + @EventHandler + public void init(FMLInitializationEvent event) + { + GalacticraftCore.galacticraftBlocksTab.setItemForTab(new ItemStack(Item.getItemFromBlock(GCBlocks.machineBase2))); + GalacticraftCore.galacticraftItemsTab.setItemForTab(new ItemStack(GCItems.rocketTier1)); + + if (FMLCommonHandler.instance().getSide() == Side.CLIENT) + { + GCBlocks.finalizeSort(); + GCItems.finalizeSort(); + } + + GalacticraftCore.proxy.init(event); + + GalacticraftCore.packetPipeline = GalacticraftChannelHandler.init(); + + Star starSol = (Star) new Star("sol").setParentSolarSystem(GalacticraftCore.solarSystemSol).setTierRequired(-1); + starSol.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/sun.png")); + GalacticraftCore.solarSystemSol.setMainStar(starSol); + + GalacticraftCore.planetOverworld.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png")); + GalacticraftCore.planetOverworld.setDimensionInfo(ConfigManagerCore.idDimensionOverworld, WorldProvider.class, false).setTierRequired(1); + GalacticraftCore.planetOverworld.atmosphereComponent(EnumAtmosphericGas.NITROGEN).atmosphereComponent(EnumAtmosphericGas.OXYGEN).atmosphereComponent(EnumAtmosphericGas.ARGON).atmosphereComponent(EnumAtmosphericGas.WATER); + GalacticraftCore.planetOverworld.addChecklistKeys("equip_parachute"); + + GalacticraftCore.moonMoon.setDimensionInfo(ConfigManagerCore.idDimensionMoon, WorldProviderMoon.class).setTierRequired(1); + GalacticraftCore.moonMoon.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/moon.png")); + GalacticraftCore.moonMoon.setAtmosphere(new AtmosphereInfo(false, false, false, 0.0F, 0.0F, 0.0F)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedZombie.class, 8, 2, 3)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedSpider.class, 8, 2, 3)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedSkeleton.class, 8, 2, 3)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedCreeper.class, 8, 2, 3)); + GalacticraftCore.moonMoon.addMobInfo(new SpawnListEntry(EntityEvolvedEnderman.class, 10, 1, 4)); + GalacticraftCore.moonMoon.addChecklistKeys("equip_oxygen_suit"); + + // Satellites must always have a WorldProvider implementing + // IOrbitDimension + GalacticraftCore.satelliteSpaceStation.setDimensionInfo(ConfigManagerCore.idDimensionOverworldOrbit, ConfigManagerCore.idDimensionOverworldOrbitStatic, WorldProviderOverworldOrbit.class).setTierRequired(1); + GalacticraftCore.satelliteSpaceStation.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/space_station.png")); + GalacticraftCore.satelliteSpaceStation.setAtmosphere(new AtmosphereInfo(false, false, false, 0.0F, 0.1F, 0.02F)); + GalacticraftCore.satelliteSpaceStation.addChecklistKeys("equip_oxygen_suit", "create_grapple"); + + ForgeChunkManager.setForcedChunkLoadingCallback(this, new ChunkLoadingCallback()); + MinecraftForge.EVENT_BUS.register(new ConnectionEvents()); + + SchematicRegistry.registerSchematicRecipe(new SchematicRocketT1()); + SchematicRegistry.registerSchematicRecipe(new SchematicMoonBuggy()); + SchematicRegistry.registerSchematicRecipe(new SchematicAdd()); + ChunkPowerHandler.initiate(); + EnergyConfigHandler.initGas(); + LootHandlerGC.registerAll(); + + this.registerCreatures(); + this.registerOtherEntities(); + this.registerTileEntities(); + + GalaxyRegistry.register(GalacticraftCore.solarSystemSol); + GalaxyRegistry.register(GalacticraftCore.planetOverworld); + GalaxyRegistry.register(GalacticraftCore.moonMoon); + GalaxyRegistry.register(GalacticraftCore.satelliteSpaceStation); + GCDimensions.ORBIT = GalacticraftRegistry.registerDimension("Space Station", "_orbit", ConfigManagerCore.idDimensionOverworldOrbit, WorldProviderOverworldOrbit.class, false); + if (GCDimensions.ORBIT == null) + { + GalacticraftCore.logger.error("Failed to register space station dimension type with ID " + ConfigManagerCore.idDimensionOverworldOrbit); + } + GCDimensions.ORBIT_KEEPLOADED = GalacticraftRegistry.registerDimension("Space Station", "_orbit", ConfigManagerCore.idDimensionOverworldOrbitStatic, WorldProviderOverworldOrbit.class, true); + if (GCDimensions.ORBIT_KEEPLOADED == null) + { + GalacticraftCore.logger.error("Failed to register space station dimension type with ID " + ConfigManagerCore.idDimensionOverworldOrbitStatic); + } + GalacticraftRegistry.registerTeleportType(WorldProviderSurface.class, new TeleportTypeOverworld()); + GalacticraftRegistry.registerTeleportType(WorldProviderOverworldOrbit.class, new TeleportTypeOrbit()); + GalacticraftRegistry.registerTeleportType(WorldProviderMoon.class, new TeleportTypeMoon()); + GalacticraftRegistry.registerRocketGui(WorldProviderOverworldOrbit.class, new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/overworld_rocket_gui.png")); + GalacticraftRegistry.registerRocketGui(WorldProviderSurface.class, new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/overworld_rocket_gui.png")); + GalacticraftRegistry.registerRocketGui(WorldProviderMoon.class, new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/moon_rocket_gui.png")); + GalacticraftRegistry.addDungeonLoot(1, new ItemStack(GCItems.schematic, 1, 0)); + GalacticraftRegistry.addDungeonLoot(1, new ItemStack(GCItems.schematic, 1, 1)); + + if (ConfigManagerCore.enableCopperOreGen) + { + GameRegistry.registerWorldGenerator(new OverworldGenerator(GCBlocks.basicBlock, 5, 24, 0, 75, 7), 4); + } + + if (ConfigManagerCore.enableTinOreGen) + { + GameRegistry.registerWorldGenerator(new OverworldGenerator(GCBlocks.basicBlock, 6, 22, 0, 60, 7), 4); + } + + if (ConfigManagerCore.enableAluminumOreGen) + { + GameRegistry.registerWorldGenerator(new OverworldGenerator(GCBlocks.basicBlock, 7, 18, 0, 45, 7), 4); + } + + if (ConfigManagerCore.enableSiliconOreGen) + { + GameRegistry.registerWorldGenerator(new OverworldGenerator(GCBlocks.basicBlock, 8, 3, 0, 25, 7), 4); + } + + FMLInterModComms.sendMessage("OpenBlocks", "donateUrl", "http://www.patreon.com/micdoodle8"); + registerCoreGameScreens(); + + GCFluids.registerLegacyFluids(); + GCFluids.registerDispenserBehaviours(); + if (CompatibilityManager.isBCraftEnergyLoaded()) + GCFluids.registerBCFuel(); + + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_MASK, EnumExtendedInventorySlot.MASK, GCItems.oxMask); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_GEAR, EnumExtendedInventorySlot.GEAR, GCItems.oxygenGear); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_LIGHT, EnumExtendedInventorySlot.LEFT_TANK, GCItems.oxTankLight); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_LIGHT, EnumExtendedInventorySlot.RIGHT_TANK, GCItems.oxTankLight); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_MEDIUM, EnumExtendedInventorySlot.LEFT_TANK, GCItems.oxTankMedium); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_MEDIUM, EnumExtendedInventorySlot.RIGHT_TANK, GCItems.oxTankMedium); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_HEAVY, EnumExtendedInventorySlot.LEFT_TANK, GCItems.oxTankHeavy); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_HEAVY, EnumExtendedInventorySlot.RIGHT_TANK, GCItems.oxTankHeavy); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_INFINITE, EnumExtendedInventorySlot.LEFT_TANK, GCItems.oxygenCanisterInfinite); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_OXYGEN_TANK_INFINITE, EnumExtendedInventorySlot.RIGHT_TANK, GCItems.oxygenCanisterInfinite); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_PARACHUTE, EnumExtendedInventorySlot.PARACHUTE, GCItems.parachute); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_FREQUENCY_MODULE, EnumExtendedInventorySlot.FREQUENCY_MODULE, new ItemStack(GCItems.basicItem, 1, 19)); + + GalacticraftCore.proxy.registerFluidTexture(GCFluids.fluidOil, new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/underoil.png")); + GalacticraftCore.proxy.registerFluidTexture(GCFluids.fluidFuel, new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/underfuel.png")); + + PermissionAPI.registerNode(Constants.PERMISSION_CREATE_STATION, DefaultPermissionLevel.ALL, "Allows players to create space stations"); + + GCTriggers.registerTriggers(); + } + + @EventHandler + public void postInit(FMLPostInitializationEvent event) + { + GalacticraftCore.planetMercury = makeDummyPlanet("mercury", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetMercury != null) + { + GalacticraftCore.planetMercury.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(1.45F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(0.5F, 0.5F)).setRelativeOrbitTime(0.24096385542168674698795180722892F); + } + GalacticraftCore.planetVenus = makeDummyPlanet("venus", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetVenus != null) + { + GalacticraftCore.planetVenus.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(2.0F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(0.75F, 0.75F)).setRelativeOrbitTime(0.61527929901423877327491785323111F); + } + GalacticraftCore.planetMars = makeDummyPlanet("mars", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetMars != null) + { + GalacticraftCore.planetMars.setRingColorRGB(0.67F, 0.1F, 0.1F).setPhaseShift(0.1667F).setRelativeSize(0.5319F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.25F, 1.25F)).setRelativeOrbitTime(1.8811610076670317634173055859803F); + } + GalacticraftCore.planetJupiter = makeDummyPlanet("jupiter", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetJupiter != null) + { + GalacticraftCore.planetJupiter.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift((float) Math.PI).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.5F, 1.5F)).setRelativeOrbitTime(11.861993428258488499452354874042F); + } + GalacticraftCore.planetSaturn = makeDummyPlanet("saturn", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetSaturn != null) + { + GalacticraftCore.planetSaturn.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(5.45F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.75F, 1.75F)).setRelativeOrbitTime(29.463307776560788608981380065717F); + } + GalacticraftCore.planetUranus = makeDummyPlanet("uranus", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetUranus != null) + { + GalacticraftCore.planetUranus.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(1.38F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(2.0F, 2.0F)).setRelativeOrbitTime(84.063526834611171960569550930997F); + } + GalacticraftCore.planetNeptune = makeDummyPlanet("neptune", GalacticraftCore.solarSystemSol); + if (GalacticraftCore.planetNeptune != null) + { + GalacticraftCore.planetNeptune.setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(1.0F).setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(2.25F, 2.25F)).setRelativeOrbitTime(164.84118291347207009857612267251F); + } + + MinecraftForge.EVENT_BUS.register(new OreGenOtherMods()); + + GalacticraftCore.proxy.postInit(event); + + ArrayList cBodyList = new ArrayList<>(); + cBodyList.addAll(GalaxyRegistry.getPlanets()); + cBodyList.addAll(GalaxyRegistry.getMoons()); + + for (CelestialBody body : cBodyList) + { + if (body.shouldAutoRegister()) + { + int id = Arrays.binarySearch(ConfigManagerCore.staticLoadDimensions, body.getDimensionID()); + // It's important this is done in the same order as planets will + // be registered by WorldUtil.registerPlanet(); + DimensionType type = GalacticraftRegistry.registerDimension(body.getTranslationKey(), body.getDimensionSuffix(), body.getDimensionID(), body.getWorldProvider(), body.getForceStaticLoad() || id < 0); + if (type != null) + { + body.initialiseMobSpawns(); + } + else + { + body.setUnreachable(); + GalacticraftCore.logger.error("Tried to register dimension for body: " + body.getTranslationKey() + " hit conflict with ID " + body.getDimensionID()); + } + } + + if (body.getSurfaceBlocks() != null) + { + TransformerHooks.spawnListAE2_GC.addAll(body.getSurfaceBlocks()); + } + } + + GCDimensions.MOON = WorldUtil.getDimensionTypeById(ConfigManagerCore.idDimensionMoon); + + CompatibilityManager.checkForCompatibleMods(); + RecipeManagerGC.loadCompatibilityRecipes(); + TileEntityDeconstructor.initialiseRecipeList(); + ItemSchematic.registerSchematicItems(); + NetworkRegistry.INSTANCE.registerGuiHandler(GalacticraftCore.instance, new GuiHandler()); + MinecraftForge.EVENT_BUS.register(new TickHandlerServer()); + GalaxyRegistry.refreshGalaxies(); + + GalacticraftRegistry.registerScreen(new GameScreenText()); // Screen API + // demo + // Note: add-ons can register their own screens in postInit by calling + // GalacticraftRegistry.registerScreen(IGameScreen) like this. + // [Called on both client and server: do not include any client-specific + // code in the new game screen's constructor method.] + + try + { + jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next(); + writeParam = jpgWriter.getDefaultWriteParam(); + writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); + writeParam.setCompressionQuality(1.0f); + enableJPEG = true; + } catch (UnsatisfiedLinkError e) + { + GalacticraftCore.logger.error("Error initialising JPEG compressor - this is likely caused by OpenJDK - see https://wiki.micdoodle8.com/wiki/Compatibility#For_clients_running_OpenJDK"); + e.printStackTrace(); + } + } + + @EventHandler + public void serverAboutToStart(FMLServerAboutToStartEvent event) + { + TickHandlerServer.restart(); + } + + @EventHandler + public void serverInit(FMLServerStartedEvent event) + { + BlockVec3.chunkCacheDim = Integer.MAX_VALUE; + } + + @EventHandler + public void onServerStarting(FMLServerStartingEvent event) + { + GCCoreUtil.notifyStarted(event.getServer()); + File worldFolder = DimensionManager.getCurrentSaveRootDirectory(); + moveLegacyGCFileLocations(worldFolder); + + event.registerServerCommand(new CommandSpaceStationAddOwner()); + event.registerServerCommand(new CommandSpaceStationChangeOwner()); + event.registerServerCommand(new CommandSpaceStationRemoveOwner()); + event.registerServerCommand(new CommandPlanetTeleport()); + event.registerServerCommand(new CommandKeepDim()); + event.registerServerCommand(new CommandGCInv()); + event.registerServerCommand(new CommandGCHelp()); + event.registerServerCommand(new CommandGCKit()); + event.registerServerCommand(new CommandGCHouston()); + event.registerServerCommand(new CommandGCEnergyUnits()); + event.registerServerCommand(new CommandJoinSpaceRace()); + + WorldUtil.initialiseDimensionNames(); + WorldUtil.registerSpaceStations(event.getServer(), new File(worldFolder, "galacticraft")); + + ArrayList cBodyList = new ArrayList<>(); + cBodyList.addAll(GalaxyRegistry.getPlanets()); + cBodyList.addAll(GalaxyRegistry.getMoons()); + + for (CelestialBody body : cBodyList) + { + if (body.shouldAutoRegister()) + { + if (!WorldUtil.registerPlanet(body.getDimensionID(), body.isReachable(), 0)) + { + body.setUnreachable(); + } + } + } + } + + private void handleConfigFilenameChange(FMLPreInitializationEvent event) + { + File oldCoreConfig = new File(event.getModConfigurationDirectory(), Constants.OLD_CONFIG_FILE); + File oldPowerConfig = new File(event.getModConfigurationDirectory(), Constants.OLD_POWER_CONFIG_FILE); + File oldChunkLoaderConfig = new File(event.getModConfigurationDirectory(), Constants.OLD_CHUNKLOADER_CONFIG_FILE); + + File coreConfig = new File(event.getModConfigurationDirectory(), Constants.CONFIG_FILE); + File powerConfig = new File(event.getModConfigurationDirectory(), Constants.POWER_CONFIG_FILE); + File chunkLoaderConfig = new File(event.getModConfigurationDirectory(), Constants.CHUNKLOADER_CONFIG_FILE); + + if (oldCoreConfig.exists()) + { + oldCoreConfig.renameTo(coreConfig); + } + + if (oldPowerConfig.exists()) + { + oldPowerConfig.renameTo(powerConfig); + } + + if (oldChunkLoaderConfig.exists()) + { + oldChunkLoaderConfig.renameTo(chunkLoaderConfig); + } + + ConfigManagerCore.initialize(coreConfig); + EnergyConfigHandler.setDefaultValues(powerConfig); + ChunkLoadingCallback.loadConfig(chunkLoaderConfig); + } + + private void moveLegacyGCFileLocations(File worldFolder) + { + File destFolder = new File(worldFolder, "galacticraft"); + if (!destFolder.exists()) + { + if (!destFolder.mkdirs()) + return; + } + File dataFolder = new File(worldFolder, "data"); + if (!dataFolder.exists()) + return; + + moveGCFile(new File(dataFolder, "GCAsteroidData.dat"), destFolder); + moveGCFile(new File(dataFolder, "GCSpaceRaceData.dat"), destFolder); + moveGCFile(new File(dataFolder, "GCSpinData.dat"), destFolder); + moveGCFile(new File(dataFolder, "GCInv_savefile.dat"), destFolder); + String[] names = dataFolder.list(); + for (String name : names) + { + if (name.startsWith("spacestation_") && name.endsWith(".dat")) + { + moveGCFile(new File(dataFolder, name), destFolder); + } + } + } + + private void moveGCFile(File file, File destFolder) + { + if (file.exists()) + { + File destPath = new File(destFolder, file.getName()); + if (destPath.exists()) + { + GalacticraftCore.logger.info("Deleting duplicate Galacticraft data file: " + file.getName()); + file.delete(); + return; + } + try + { + java.nio.file.Files.move(file.toPath(), destPath.toPath()); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + + @EventHandler + public void onServerStopping(FMLServerStoppingEvent var1) + { + MapUtil.saveMapProgress(); + } + + @EventHandler + public void onServerStop(FMLServerStoppedEvent var1) + { + // Unregister dimensions + WorldUtil.unregisterPlanets(); + WorldUtil.unregisterSpaceStations(); + GCCoreUtil.notifyStarted(null); + } + + private static void registerCoreGameScreens() + { + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + IGameScreen rendererBasic = new GameScreenBasic(); + IGameScreen rendererCelest = new GameScreenCelestial(); + // Type 0 - blank + GalacticraftRegistry.registerScreen(rendererBasic); + // Type 1 - local satellite view + GalacticraftRegistry.registerScreen(rendererBasic); + // Type 2 - solar system + GalacticraftRegistry.registerScreen(rendererCelest); + // Type 3 - local planet + GalacticraftRegistry.registerScreen(rendererCelest); + // Type 4 - render test + GalacticraftRegistry.registerScreen(rendererCelest); + } + else + { + GalacticraftRegistry.registerScreensServer(5); + } + } + + private void registerTileEntities() + { + register(TileEntityTreasureChest.class, "gc_treasure_chest"); + register(TileEntityOxygenDistributor.class, "gc_air_distributor"); + register(TileEntityOxygenCollector.class, "gc_air_collector"); + register(TileEntityFluidPipe.class, "gc_oxygen_pipe"); + register(TileEntityAirLock.class, "gc_air_lock_frame"); + register(TileEntityRefinery.class, "gc_refinery"); + register(TileEntityNasaWorkbench.class, "gc_nasa_workbench"); + register(TileEntityCompactNasaWorkbench.class, "gc_nasa_workbench_compact"); + register(TileEntityDeconstructor.class, "gc_deconstructor"); + register(TileEntityOxygenCompressor.class, "gc_air_compressor"); + register(TileEntityFuelLoader.class, "gc_fuel_loader"); + register(TileEntityLandingPadSingle.class, "gc_landing_pad"); + register(TileEntityLandingPad.class, "gc_landing_pad_full"); + register(TileEntitySpaceStationBase.class, "gc_space_station"); + register(TileEntityMulti.class, "gc_dummy_block"); + register(TileEntityOxygenSealer.class, "gc_air_sealer"); + register(TileEntityDungeonSpawner.class, "gc_dungeon_boss_spawner"); + register(TileEntityOxygenDetector.class, "gc_oxygen_detector"); + register(TileEntityBuggyFueler.class, "gc_buggy_fueler"); + register(TileEntityBuggyFuelerSingle.class, "gc_buggy_fueler_single"); + register(TileEntityCargoLoader.class, "gc_cargo_loader"); + register(TileEntityCargoUnloader.class, "gc_cargo_unloader"); + register(TileEntityParaChest.class, "gc_parachest_tile"); + register(TileEntitySolar.class, "gc_solar_panel"); + register(TileEntityDish.class, "gc_radio_telescope"); + register(TileEntityCrafting.class, "gc_magnetic_crafting_table"); + register(TileEntityEnergyStorageModule.class, "gc_energy_storage_module"); + register(TileEntityCoalGenerator.class, "gc_coal_generator"); + register(TileEntityElectricFurnace.class, "gc_electric_furnace"); + register(TileEntityAluminumWire.class, "gc_aluminum_wire"); + register(TileEntityAluminumWireSwitch.class, "gc_switchable_aluminum_wire"); + register(TileEntityFallenMeteor.class, "gc_fallen_meteor"); + register(TileEntityIngotCompressor.class, "gc_ingot_compressor"); + register(TileEntityElectricIngotCompressor.class, "gc_electric_ingot_compressor"); + register(TileEntityCircuitFabricator.class, "gc_circuit_fabricator"); + register(TileEntityAirLockController.class, "gc_air_lock_controller"); + register(TileEntityOxygenStorageModule.class, "gc_oxygen_storage_module"); + register(TileEntityOxygenDecompressor.class, "gc_oxygen_decompressor"); + register(TileEntityThruster.class, "gc_space_station_thruster"); + register(TileEntityArclamp.class, "gc_arc_lamp"); + register(TileEntityScreen.class, "gc_view_screen"); + register(TileEntityPanelLight.class, "gc_panel_lighting"); + register(TileEntityTelemetry.class, "gc_telemetry_unit"); + register(TileEntityPainter.class, "gc_painter"); + register(TileEntityFluidTank.class, "gc_fluid_tank"); + register(TileEntityPlayerDetector.class, "gc_player_detector"); + register(TileEntityPlatform.class, "gc_platform"); + register(TileEntityEmergencyBox.class, "gc_emergency_post"); + register(TileEntityNull.class, "gc_null_tile"); + if (CompatibilityManager.isIc2Loaded()) + { + register(TileCableIC2Sealed.class, "gc_sealed_ic2_cable"); + } + + new GCCoreDataFixers().registerAll(); + } + + private void register(Class tileEntityClass, String key) + { + GameRegistry.registerTileEntity(tileEntityClass, new ResourceLocation(Constants.MOD_ID_CORE, key)); + } + + private void registerCreatures() + { + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedSpider.class, "evolved_spider", 3419431, 11013646); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedZombie.class, "evolved_zombie", 44975, 7969893); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedCreeper.class, "evolved_creeper", 894731, 0); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedSkeleton.class, "evolved_skeleton", 12698049, 4802889); + GCCoreUtil.registerGalacticraftCreature(EntitySkeletonBoss.class, "evolved_skeleton_boss", 12698049, 4802889); + GCCoreUtil.registerGalacticraftCreature(EntityAlienVillager.class, "alien_villager", ColorUtil.to32BitColor(255, 103, 145, 181), 12422002); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedEnderman.class, "evolved_enderman", 1447446, 0); + GCCoreUtil.registerGalacticraftCreature(EntityEvolvedWitch.class, "evolved_witch", 3407872, 5349438); + } + + private void registerOtherEntities() + { + GCCoreUtil.registerGalacticraftNonMobEntity(EntityTier1Rocket.class, "rocket_t1", 150, 1, false); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityMeteor.class, "meteor", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityBuggy.class, "buggy", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityFlag.class, "gcflag", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityParachest.class, "para_chest", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityLander.class, "lander", 150, 5, false); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityMeteorChunk.class, "meteor_chunk", 150, 5, true); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityCelestialFake.class, "celestial_screen", 150, 5, false); + GCCoreUtil.registerGalacticraftNonMobEntity(EntityHangingSchematic.class, "hanging_schematic", 150, 5, false); + } + + private Planet makeDummyPlanet(String name, SolarSystem system) + { + // Loop through all planets to make sure it's not registered as a + // reachable dimension first + for (CelestialObject body : new ArrayList<>(GalaxyRegistry.getPlanets())) + { + if (body.isEqualTo(CelestialType.PLANET, name)) + { + if (((Planet) body).getParentSolarSystem() == system) + { + return null; + } + } + } + + Planet planet = new Planet(name).setParentSolarSystem(system); + planet.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/" + name + ".png")); + GalaxyRegistry.register(planet); + return planet; + } + + @Mod.EventBusSubscriber(modid = Constants.MOD_ID_CORE) + public static class RegistrationHandler + { + + @SubscribeEvent + public static void registerBlocks(RegistryEvent.Register event) + { + GCBlocks.registerBlocks(event.getRegistry()); + CompatibilityManager.registerMicroBlocks(); + } + + @SubscribeEvent + public static void registerItems(RegistryEvent.Register event) + { + // First, the final steps of block registration + IForgeRegistry blockRegistry = RegistryManager.ACTIVE.getRegistry(GameData.BLOCKS); + GCBlocks.doOtherModsTorches(blockRegistry); + BlockGrating.createForgeFluidVersions(blockRegistry); + + GCItems.registerItems(event.getRegistry()); + + // RegisterSorted for blocks cannot be run until all the items have + // been registered + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + for (Item item : GalacticraftCore.itemListTrue) + { + GCItems.registerSorted(item); + } + for (Block block : GalacticraftCore.blocksList) + { + GCBlocks.registerSorted(block); + } + } + + GCBlocks.oreDictRegistrations(); + GCItems.oreDictRegistrations(); + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public static void registerRecipes(RegistryEvent.Register event) + { + RecipeManagerGC.addUniversalRecipes(); + RecipeManagerGC.setConfigurableRecipes(); + + // PLANETS + RecipeManagerAsteroids.addUniversalRecipes(); + RecipeManagerMars.addUniversalRecipes(); + RecipeManagerVenus.addUniversalRecipes(); + } + + @SubscribeEvent + public static void registerModels(ModelRegistryEvent event) + { + proxy.registerVariants(); + GalacticraftPlanets.proxy.registerVariants(); + } + + @SubscribeEvent + public static void registerBiomes(RegistryEvent.Register event) + { + // First, final steps of item registration + GalacticraftCore.handler.registerTorchTypes(); + GalacticraftCore.handler.registerItemChanges(); + + for (BiomeGenBaseGC biome : GalacticraftCore.biomesList) + { + event.getRegistry().register(biome); + if (!ConfigManagerCore.disableBiomeTypeRegistrations) + { + biome.registerTypes(biome); + } + } + } + + @SubscribeEvent + public static void registerSounds(RegistryEvent.Register event) + { + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + GCSounds.registerSounds(event.getRegistry()); + } + } + } + + private void initModInfo(ModMetadata info) + { + info.modId = Constants.MOD_ID_CORE; + info.name = Constants.MOD_NAME_SIMPLE; + info.version = Constants.VERSION; + info.description = "An advanced space travel mod for Minecraft!"; + info.authorList = Arrays.asList("micdoodle8", "radfast", "EzerArch", "fishtaco", "SpaceViking", "SteveKunG", "ROMVoid95"); + info.logoFile = "assets/galacticraftplanets/core-logo.png"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/TransformerHooks.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/TransformerHooks.java new file mode 100644 index 00000000..93acafda --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/TransformerHooks.java @@ -0,0 +1,717 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.IChunkGenerator; + +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.IWorldGenerator; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IAntiGrav; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.item.IArmorGravity; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.api.world.IWeatherProvider; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import micdoodle8.mods.galacticraft.core.client.BubbleRenderer; +import micdoodle8.mods.galacticraft.core.client.FootprintRenderer; +import micdoodle8.mods.galacticraft.core.client.SkyProviderOverworld; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.player.EnumGravity; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +import org.lwjgl.opengl.GL11; + +import static micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore.PLAYER_Y_OFFSET; +import static micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore.submergedTextures; + +/** + * These methods are called from vanilla minecraft through bytecode injection done in MicdoodleCore See https://github.com/micdoodle8/MicdoodleCore + */ +public class TransformerHooks +{ + + private static List otherModGeneratorsWhitelist = new LinkedList<>(); + private static IWorldGenerator generatorTCAuraNodes = null; + private static Method generateTCAuraNodes = null; + private static boolean generatorsInitialised = false; + public static List spawnListAE2_GC = new LinkedList<>(); + public static ThreadLocal renderBuilder = new ThreadLocal<>(); + private static int rainSoundCounter = 0; + private static Random random = new Random(); + + public static double getGravityForEntity(Entity entity) + { + if (entity.world.provider instanceof IGalacticraftWorldProvider) + { + if (entity instanceof EntityChicken && !OxygenUtil.isAABBInBreathableAirBlock(entity.world, entity.getEntityBoundingBox())) + { + return 0.08D; + } + + final IGalacticraftWorldProvider customProvider = (IGalacticraftWorldProvider) entity.world.provider; + if (entity instanceof EntityPlayer) + { + EntityPlayer player = (EntityPlayer) entity; + if (player.inventory != null) + { + int armorModLowGrav = 100; + int armorModHighGrav = 100; + for (ItemStack armorPiece : player.getArmorInventoryList()) + { + if (armorPiece != null && armorPiece.getItem() instanceof IArmorGravity) + { + armorModLowGrav -= ((IArmorGravity) armorPiece.getItem()).gravityOverrideIfLow(player); + armorModHighGrav -= ((IArmorGravity) armorPiece.getItem()).gravityOverrideIfHigh(player); + } + } + if (armorModLowGrav > 100) + { + armorModLowGrav = 100; + } + if (armorModHighGrav > 100) + { + armorModHighGrav = 100; + } + if (armorModLowGrav < 0) + { + armorModLowGrav = 0; + } + if (armorModHighGrav < 0) + { + armorModHighGrav = 0; + } + if (customProvider.getGravity() > 0) + { + return 0.08D - (customProvider.getGravity() * armorModLowGrav) / 100; + } + return 0.08D - (customProvider.getGravity() * armorModHighGrav) / 100; + } + } + return 0.08D - customProvider.getGravity(); + } else if (entity instanceof IAntiGrav) + { + return 0; + } else + { + return 0.08D; + } + } + + public static double getItemGravity(EntityItem e) + { + if (e.world.provider instanceof IGalacticraftWorldProvider) + { + final IGalacticraftWorldProvider customProvider = (IGalacticraftWorldProvider) e.world.provider; + return Math.max(0.002D, 0.03999999910593033D - (customProvider instanceof IOrbitDimension ? 0.05999999910593033D : customProvider.getGravity()) / 1.75D); + } else + { + return 0.03999999910593033D; + } + } + + public static float getArrowGravity(EntityArrow e) + { + if (e.world.provider instanceof IGalacticraftWorldProvider) + { + return ((IGalacticraftWorldProvider) e.world.provider).getArrowGravity(); + } else + { + return 0.05F; + } + } + + public static float getRainStrength(World world, float partialTicks) + { + if (world.isRemote) + { + if (world.provider.getSkyRenderer() instanceof SkyProviderOverworld) + { + return 0.0F; + } + } + + return world.prevRainingStrength + (world.rainingStrength - world.prevRainingStrength) * partialTicks; + } + + public static void otherModGenerate(int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) + { + if (world.provider instanceof WorldProviderSpaceStation) + { + return; + } + + if (!(world.provider instanceof IGalacticraftWorldProvider) || ConfigManagerCore.enableOtherModsFeatures) + { + try + { + net.minecraftforge.fml.common.registry.GameRegistry.generateWorld(chunkX, chunkZ, world, chunkGenerator, chunkProvider); + } catch (Exception e) + { + GalacticraftCore.logger.error("Error in another mod's worldgen. This is *NOT* a Galacticraft bug, report it to the other mod please."); + GalacticraftCore.logger.error("Details:- Dimension:" + GCCoreUtil.getDimensionID(world) + " Chunk cx,cz:" + chunkX + "," + chunkZ + " Seed:" + world.getSeed()); + e.printStackTrace(); + } + return; + } + + if (!generatorsInitialised) + { + generatorsInitialised = true; + + if (ConfigManagerCore.whitelistCoFHCoreGen) + { + addWorldGenForName("CoFHCore custom oregen", "cofh.cofhworld.init.WorldHandler"); + } + addWorldGenForName("GalacticGreg oregen", "bloodasp.galacticgreg.GT_Worldgenerator_Space"); + addWorldGenForName("Dense Ores oregen", "com.rwtema.denseores.WorldGenOres"); + addWorldGenForName("AE2 meteorites worldgen", "appeng.worldgen.MeteoriteWorldGen"); + + try + { + Class genThaumCraft = Class.forName("thaumcraft.common.lib.world.ThaumcraftWorldGenerator"); + if (genThaumCraft != null && ConfigManagerCore.enableThaumCraftNodes) + { + final Field regField = GameRegistry.class.getDeclaredField("worldGenerators"); + regField.setAccessible(true); + Set registeredGenerators = (Set) regField.get(null); + for (IWorldGenerator gen : registeredGenerators) + { + if (genThaumCraft.isInstance(gen)) + { + generatorTCAuraNodes = gen; + break; + } + } + if (generatorTCAuraNodes != null) + { + generateTCAuraNodes = genThaumCraft.getDeclaredMethod("generateWildNodes", World.class, Random.class, int.class, int.class, boolean.class, boolean.class); + generateTCAuraNodes.setAccessible(true); + GalacticraftCore.logger.info("Whitelisting ThaumCraft aura node generation on planets."); + } + } + } catch (Exception e) + { + } + } + + if (otherModGeneratorsWhitelist.size() > 0 || generateTCAuraNodes != null) + { + try + { + long worldSeed = world.getSeed(); + Random fmlRandom = new Random(worldSeed); + long xSeed = fmlRandom.nextLong() >> 2 + 1L; + long zSeed = fmlRandom.nextLong() >> 2 + 1L; + long chunkSeed = (xSeed * chunkX + zSeed * chunkZ) ^ worldSeed; + fmlRandom.setSeed(chunkSeed); + + for (IWorldGenerator gen : otherModGeneratorsWhitelist) + { + gen.generate(fmlRandom, chunkX, chunkZ, world, chunkGenerator, chunkProvider); + } + if (generateTCAuraNodes != null) + { + generateTCAuraNodes.invoke(generatorTCAuraNodes, world, fmlRandom, chunkX, chunkZ, false, true); + } + } catch (Exception e) + { + GalacticraftCore.logger.error("Error in another mod's worldgen. This is *NOT* a Galacticraft bug, report it to the other mod please."); + e.printStackTrace(); + } + } + } + + private static void addWorldGenForName(String logString, String name) + { + try + { + Class target = Class.forName(name); + if (target != null) + { + final Field regField = GameRegistry.class.getDeclaredField("worldGenerators"); + regField.setAccessible(true); + Set registeredGenerators = (Set) regField.get(null); + for (IWorldGenerator gen : registeredGenerators) + { + if (target.isInstance(gen)) + { + otherModGeneratorsWhitelist.add(gen); + GalacticraftCore.logger.info("Whitelisting " + logString + " on planets."); + return; + } + } + } + } catch (Exception e) + { + } + } + + /* + * Used to supplement the hard-coded blocklist in AE2's MeteoritePlacer class + */ + public static boolean addAE2MeteorSpawn(Object o, Block b) + { + if (o instanceof Collection) + { + ((Collection) o).add(b); + ((Collection) o).addAll(spawnListAE2_GC); + return true; + } + return false; + } + + @SideOnly(Side.CLIENT) + public static float getWorldBrightness(World world) + { + if (world.provider instanceof WorldProviderMoon) + { + float f1 = world.getCelestialAngle(1.0F); + float f2 = 1.0F - (MathHelper.cos(f1 * Constants.twoPI) * 2.0F + 0.2F); + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + f2 = 1.0F - f2; + return f2 * 0.8F; + } + + return world.getSunBrightness(1.0F); + } + + @SideOnly(Side.CLIENT) + public static float getColorRed(World world) + { + return (float) WorldUtil.getWorldColor(world).x; + } + + @SideOnly(Side.CLIENT) + public static float getColorGreen(World world) + { + return (float) WorldUtil.getWorldColor(world).y; + } + + @SideOnly(Side.CLIENT) + public static float getColorBlue(World world) + { + return (float) WorldUtil.getWorldColor(world).z; + } + + @SideOnly(Side.CLIENT) + public static Vec3d getFogColorHook(World world) + { + EntityPlayerSP player = FMLClientHandler.instance().getClient().player; + if (world.provider.getSkyRenderer() instanceof SkyProviderOverworld) + { + float var20 = ((float) (player.posY) - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / 1000.0F; + var20 = MathHelper.sqrt(var20); + final float var21 = Math.max(1.0F - var20 * 40.0F, 0.0F); + + Vec3d vec = world.getFogColor(1.0F); + + return new Vec3d(vec.x * Math.max(1.0F - var20 * 1.29F, 0.0F), vec.y * Math.max(1.0F - var20 * 1.29F, 0.0F), vec.z * Math.max(1.0F - var20 * 1.29F, 0.0F)); + } + + return world.getFogColor(1.0F); + } + + @SideOnly(Side.CLIENT) + public static Vec3d getSkyColorHook(World world) + { + EntityPlayerSP player = FMLClientHandler.instance().getClient().player; + if (world.provider.getSkyRenderer() instanceof SkyProviderOverworld || (player != null && player.posY > Constants.OVERWORLD_CLOUD_HEIGHT && player.getRidingEntity() instanceof EntitySpaceshipBase)) + { + float f1 = world.getCelestialAngle(1.0F); + float f2 = MathHelper.cos(f1 * Constants.twoPI) * 2.0F + 0.5F; + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + int i = MathHelper.floor(player.posX); + int j = MathHelper.floor(player.posY); + int k = MathHelper.floor(player.posZ); + BlockPos pos = new BlockPos(i, j, k); + int l = ForgeHooksClient.getSkyBlendColour(world, pos); + float f4 = (l >> 16 & 255) / 255.0F; + float f5 = (l >> 8 & 255) / 255.0F; + float f6 = (l & 255) / 255.0F; + f4 *= f2; + f5 *= f2; + f6 *= f2; + + if (player.posY <= Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + Vec3d vec = world.getSkyColor(FMLClientHandler.instance().getClient().getRenderViewEntity(), 1.0F); + double blend = (player.posY - Constants.OVERWORLD_CLOUD_HEIGHT) / (Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT - Constants.OVERWORLD_CLOUD_HEIGHT); + double ablend = 1 - blend; + return new Vec3d(f4 * blend + vec.x * ablend, f5 * blend + vec.y * ablend, f6 * blend + vec.z * ablend); + } else + { + double blend = Math.min(1.0D, (player.posY - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / 300.0D); + double ablend = 1.0D - blend; + blend /= 255.0D; + return new Vec3d(f4 * ablend + blend * 31.0D, f5 * ablend + blend * 8.0D, f6 * ablend + blend * 99.0D); + } + } + + return world.getSkyColor(FMLClientHandler.instance().getClient().getRenderViewEntity(), 1.0F); + } + + @SideOnly(Side.CLIENT) + public static double getRenderPosY(Entity viewEntity, double regular) + { + if (viewEntity.posY >= 256) + { + return 255.0F; + } else + { + return regular + viewEntity.getEyeHeight(); + } + } + + @SideOnly(Side.CLIENT) + public static boolean shouldRenderFire(Entity entity) + { + if (entity.world == null || !(entity.world.provider instanceof IGalacticraftWorldProvider)) + { + return entity.isBurning(); + } + + if (!(entity instanceof EntityLivingBase) && !(entity instanceof EntityArrow)) + { + return entity.isBurning(); + } + + if (entity.isBurning()) + { + if (OxygenUtil.noAtmosphericCombustion(entity.world.provider)) + { + return OxygenUtil.isAABBInBreathableAirBlock(entity.world, entity.getEntityBoundingBox()); + } else + { + return true; + } + // Disable fire on Galacticraft worlds with no oxygen + } + + return false; + } + + @SideOnly(Side.CLIENT) + public static void orientCamera(float partialTicks) + { + EntityPlayerSP player = ClientProxyCore.mc.player; + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + Entity viewEntity = ClientProxyCore.mc.getRenderViewEntity(); + + if (player.getRidingEntity() instanceof ICameraZoomEntity && ClientProxyCore.mc.gameSettings.thirdPersonView == 0) + { + Entity entity = player.getRidingEntity(); + float offset = ((ICameraZoomEntity) entity).getRotateOffset(); + if (offset > -10F) + { + offset += PLAYER_Y_OFFSET; + GL11.glTranslatef(0, -offset, 0); + float anglePitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + float angleYaw = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks; + GL11.glRotatef(-anglePitch, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(angleYaw, 0.0F, 1.0F, 0.0F); + + GL11.glTranslatef(0, offset, 0); + } + } + + if (viewEntity instanceof EntityLivingBase && viewEntity.world.provider instanceof IZeroGDimension && !((EntityLivingBase) viewEntity).isPlayerSleeping()) + { + float pitch = viewEntity.prevRotationPitch + (viewEntity.rotationPitch - viewEntity.prevRotationPitch) * partialTicks; + float yaw = viewEntity.prevRotationYaw + (viewEntity.rotationYaw - viewEntity.prevRotationYaw) * partialTicks + 180.0F; + float eyeHeightChange = viewEntity.width / 2.0F; + + GL11.glRotatef(-yaw, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-pitch, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.0F, 0.1F); + + EnumGravity gDir = stats.getGdir(); + GL11.glRotatef(180.0F * gDir.getThetaX(), 1.0F, 0.0F, 0.0F); + GL11.glRotatef(180.0F * gDir.getThetaZ(), 0.0F, 0.0F, 1.0F); + GL11.glRotatef(pitch * gDir.getPitchGravityX(), 1.0F, 0.0F, 0.0F); + GL11.glRotatef(pitch * gDir.getPitchGravityY(), 0.0F, 1.0F, 0.0F); + GL11.glRotatef(yaw * gDir.getYawGravityX(), 1.0F, 0.0F, 0.0F); + GL11.glRotatef(yaw * gDir.getYawGravityY(), 0.0F, 1.0F, 0.0F); + GL11.glRotatef(yaw * gDir.getYawGravityZ(), 0.0F, 0.0F, 1.0F); + + GL11.glTranslatef(eyeHeightChange * gDir.getEyeVecX(), eyeHeightChange * gDir.getEyeVecY(), eyeHeightChange * gDir.getEyeVecZ()); + + if (stats.getGravityTurnRate() < 1.0F) + { + GL11.glRotatef(90.0F * (stats.getGravityTurnRatePrev() + (stats.getGravityTurnRate() - stats.getGravityTurnRatePrev()) * partialTicks), stats.getGravityTurnVecX(), stats.getGravityTurnVecY(), stats.getGravityTurnVecZ()); + } + } + } + + @SideOnly(Side.CLIENT) + public static void renderLiquidOverlays(float partialTicks) + { + boolean within = false; + for (Map.Entry entry : submergedTextures.entrySet()) + { + if (FluidUtil.isInsideOfFluid(ClientProxyCore.mc.player, entry.getKey())) + { + within = true; + ClientProxyCore.mc.getTextureManager().bindTexture(entry.getValue()); + break; + } + } + + if (!within) + { + return; + } + + Tessellator tessellator = Tessellator.getInstance(); + float f1 = ClientProxyCore.mc.player.getBrightness() / 3.0F; + GL11.glColor4f(f1, f1, f1, 1.0F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glPushMatrix(); + float f2 = 4.0F; + float f3 = -1.1F; + float f4 = 1.1F; + float f5 = -1.1F; + float f6 = 1.1F; + float f7 = -0.25F; + float f8 = -ClientProxyCore.mc.player.rotationYaw / 64.0F; + float f9 = ClientProxyCore.mc.player.rotationPitch / 64.0F; + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(f3, f5, f7).tex(f2 + f8, f2 + f9).endVertex(); + worldRenderer.pos(f4, f5, f7).tex(0.0F + f8, f2 + f9).endVertex(); + worldRenderer.pos(f4, f6, f7).tex(0.0F + f8, 0.0F + f9).endVertex(); + worldRenderer.pos(f3, f6, f7).tex(f2 + f8, 0.0F + f9).endVertex(); + tessellator.draw(); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + } + + @SideOnly(Side.CLIENT) + public static void renderFootprints(float partialTicks) + { + FootprintRenderer.renderFootprints(ClientProxyCore.mc.player, partialTicks); + MinecraftForge.EVENT_BUS.post(new ClientProxyCore.EventSpecialRender(partialTicks)); + BubbleRenderer.renderBubbles(ClientProxyCore.mc.player, partialTicks); + } + + @SideOnly(Side.CLIENT) + public static double getCameraZoom(double previous) + { + if (ConfigManagerCore.disableVehicleCameraChanges) + { + return previous; + } + + EntityPlayer player = Minecraft.getMinecraft().player; + if (player.getRidingEntity() != null && player.getRidingEntity() instanceof ICameraZoomEntity) + { + return ((ICameraZoomEntity) player.getRidingEntity()).getCameraZoom(); + } + + return previous; + } + + public static double armorDamageHook(EntityLivingBase entity) + { + if (entity instanceof EntityPlayer) + { + GCPlayerStats stats = GCPlayerStats.get(entity); + if (stats != null) + { + ItemStack shield = stats.getShieldControllerInSlot(); + if (shield != null && !shield.isEmpty() && shield.getItem() == VenusItems.basicItem && shield.getItemDamage() == 0) + { + return 0D; + } + } + } + return 1D; + } + + public static void setCurrentBuffer(BufferBuilder buffer) + { + renderBuilder.set(buffer); + } + + public static boolean isGrating(boolean orig, Block b) + { + return orig || (b instanceof BlockGrating && b != GCBlocks.grating && MinecraftForgeClient.getRenderLayer() == BlockRenderLayer.TRANSLUCENT); + } + + public static float armorDamageHookF(EntityLivingBase entity) + { + return (float) armorDamageHook(entity); + } + + @SideOnly(Side.CLIENT) + public static int addRainParticles(int result, int rendererUpdateCount, float f) + { + Minecraft mc = Minecraft.getMinecraft(); + World world = mc.world; + if (result == 0 || !(world.provider instanceof IWeatherProvider)) + { + // Either no rain or it's a vanilla dimension + return result; + } + IWeatherProvider moddedProvider = ((IWeatherProvider) world.provider); + + random.setSeed(rendererUpdateCount * 312987231L); + Entity entity = mc.getRenderViewEntity(); + BlockPos blockpos = new BlockPos(entity); + int i = 10; + double x = 0.0D; + double y = 0.0D; + double z = 0.0D; + double xx = 0.0D; + double yy = 0.0D; + double zz = 0.0D; + int j = 0; + int k = (int) (100.0F * f * f); + + if (mc.gameSettings.particleSetting == 1) + { + k >>= 1; + } else if (mc.gameSettings.particleSetting == 2) + { + k = 0; + } + + for (int l = 0; l < k; ++l) + { + BlockPos blockpos1 = world.getPrecipitationHeight(blockpos.add(random.nextInt(i) - random.nextInt(i), 0, random.nextInt(i) - random.nextInt(i))); + Biome biome = world.getBiome(blockpos1); + + if (blockpos1.getY() <= blockpos.getY() + i && blockpos1.getY() >= blockpos.getY() - i) + { + double xd = random.nextDouble(); + double zd = random.nextDouble(); + BlockPos blockpos2 = blockpos1.down(); + IBlockState iblockstate = world.getBlockState(blockpos2); + AxisAlignedBB axisalignedbb = iblockstate.getBoundingBox(world, blockpos2); + + if (iblockstate.getMaterial() != Material.LAVA && iblockstate.getBlock() != Blocks.MAGMA) + { + if (iblockstate.getMaterial() != Material.AIR) + { + ++j; + + x = blockpos2.getX() + xd; + y = blockpos2.getY() + 0.1D + axisalignedbb.maxY; + z = blockpos2.getZ() + zd; + if (random.nextInt(j) == 0) + { + xx = x; + yy = y - 1.0D; + zz = z; + } + + mc.effectRenderer.addEffect(moddedProvider.getParticle(mc.world, x, y, z)); + } + } else + { + mc.world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, blockpos1.getX() + xd, blockpos1.getY() + 0.1D - axisalignedbb.minY, blockpos1.getZ() + zd, 0.0D, 0.0D, 0.0D, new int[0]); + } + } + } + + if (moddedProvider.getSoundInterval(f) > 0) + { + if (j > 0 && random.nextInt(moddedProvider.getSoundInterval(f)) < rainSoundCounter++) + { + rainSoundCounter = 0; + + moddedProvider.weatherSounds(j, mc, world, blockpos, xx, yy, zz, random); + } + } else if (j > 0 && 0 < rainSoundCounter++) + { + rainSoundCounter = 0; + + moddedProvider.weatherSounds(j, mc, world, blockpos, xx, yy, zz, random); + } + + // Bypass vanilla code after returning from this + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/GCTriggers.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/GCTriggers.java new file mode 100644 index 00000000..3f4dbc66 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/GCTriggers.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.advancement; + +import java.lang.reflect.Method; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.advancements.ICriterionInstance; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.core.advancement.criterion.GenericTrigger; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; + +public class GCTriggers +{ + + public static final GenericTrigger LAUNCH_ROCKET = new GenericTrigger("launch_rocket") + { + + @Override + public ICriterionInstance deserializeInstance(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) + { + return new Instance(getId()) + { + + @Override + public boolean test(EntityPlayerMP player) + { + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + if (((EntitySpaceshipBase) player.getRidingEntity()).launchPhase >= EntitySpaceshipBase.EnumLaunchPhase.LAUNCHED.ordinal()) + { + return player.getRidingEntity().getPassengers().size() >= 1 && player.getRidingEntity().getPassengers().get(0) instanceof EntityPlayerMP; + } + } + return false; + } + }; + } + }; + public static final GenericTrigger FIND_MOON_BOSS = new GenericTrigger("boss_moon") + { + + @Override + public ICriterionInstance deserializeInstance(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) + { + return new Instance(getId()) + { + + @Override + public boolean test(EntityPlayerMP player) + { + for (Entity entity : player.world.loadedEntityList) + { + return entity instanceof EntitySkeletonBoss && entity.getDistanceSq(player) < 20 * 20; + } + return false; + } + }; + } + }; + public static final GenericTrigger CREATE_SPACE_STATION = new GenericTrigger("create_space_station") + { + + @Override + public ICriterionInstance deserializeInstance(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) + { + return new Instance(getId()) + { + + @Override + public boolean test(EntityPlayerMP player) + { + return !GCPlayerStats.get(player).getSpaceStationDimensionData().isEmpty(); + } + }; + } + }; + + public static void registerTriggers() + { + Method register = null; + try + { + Class clazz = CriteriaTriggers.class; + Method[] mm = clazz.getDeclaredMethods(); + for (Method m : mm) + { + Class[] params = m.getParameterTypes(); + if (params != null && params.length == 1 && params[0] == ICriterionTrigger.class) + { + register = m; + break; + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + + if (register != null) + { + try + { + register.invoke(null, GCTriggers.LAUNCH_ROCKET); + register.invoke(null, GCTriggers.FIND_MOON_BOSS); + register.invoke(null, GCTriggers.CREATE_SPACE_STATION); + } catch (Exception ignore) + { + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/criterion/GenericTrigger.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/criterion/GenericTrigger.java new file mode 100644 index 00000000..16d21312 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/advancement/criterion/GenericTrigger.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.advancement.criterion; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Map; +import java.util.Set; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.advancements.critereon.AbstractCriterionInstance; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; + +public abstract class GenericTrigger implements ICriterionTrigger +{ + + private final ResourceLocation id; + private final Map listeners = Maps.newHashMap(); + + public GenericTrigger(String id) + { + super(); + this.id = new ResourceLocation(Constants.ASSET_PREFIX, id); + } + + @Override + public ResourceLocation getId() + { + return id; + } + + @Override + public void addListener(PlayerAdvancements playerAdvancements, ICriterionTrigger.Listener listener) + { + Listeners listeners = this.listeners.get(playerAdvancements); + + if (listeners == null) + { + listeners = new Listeners(playerAdvancements); + this.listeners.put(playerAdvancements, listeners); + } + + listeners.add(listener); + } + + @Override + public void removeListener(PlayerAdvancements advancements, ICriterionTrigger.Listener listener) + { + Listeners listeners = this.listeners.get(advancements); + + if (listeners != null) + { + listeners.remove(listener); + + if (listeners.isEmpty()) + { + this.listeners.remove(advancements); + } + } + } + + @Override + public void removeAllListeners(PlayerAdvancements advancements) + { + listeners.remove(advancements); + } + + /** + * Trigger. + * + * @param playerMP the player + */ + public void trigger(EntityPlayerMP playerMP) + { + Listeners listeners = this.listeners.get(playerMP.getAdvancements()); + + if (listeners != null) + { + listeners.trigger(playerMP); + } + } + + public static abstract class Instance extends AbstractCriterionInstance + { + + public Instance(ResourceLocation resourceLocation) + { + super(resourceLocation); + } + + public abstract boolean test(EntityPlayerMP player); + } + + static class Listeners + { + + private final PlayerAdvancements playerAdvancements; + private final Set listeners = Sets.newHashSet(); + + public Listeners(PlayerAdvancements advancements) + { + playerAdvancements = advancements; + } + + public boolean isEmpty() + { + return listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player) + { + ArrayList list = null; + + for (ICriterionTrigger.Listener listener : listeners) + { + if (listener.getCriterionInstance() instanceof Instance) + { + if (((Instance) listener.getCriterionInstance()).test(player)) + { + if (list == null) + { + list = Lists.newArrayList(); + } + + list.add(listener); + } + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(playerAdvancements); + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvanced.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvanced.java new file mode 100644 index 00000000..44f13964 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvanced.java @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.lang.reflect.Method; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; + +/** + * An advanced block class that is to be extended for wrenching capabilities. + */ +public abstract class BlockAdvanced extends Block +{ + + public BlockAdvanced(Material material) + { + super(material); + this.setHardness(0.6f); + this.setResistance(2.5F); + // A default blast resistance for GC machines and tiles, similar to a + // bookshelf + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (hand != EnumHand.MAIN_HAND) + { + return false; + } + + ItemStack heldItem = playerIn.getHeldItem(hand); + + if (this.useWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + return true; + } + + if (playerIn.isSneaking()) + { + if (this.onSneakMachineActivated(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + return true; + } + } + + return this.onMachineActivated(worldIn, pos, state, playerIn, hand, heldItem, side, hitX, hitY, hitZ); + } + + protected boolean useWrench(World worldIn, BlockPos pos, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (heldItem.getItem() == GCItems.wrench) + { + if (playerIn.isSneaking()) + { + if (this.onSneakUseWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + playerIn.swingArm(hand); + return true; + } + return false; + } + + playerIn.swingArm(hand); + return true; + } + /* + * Check if the player is holding a wrench or an electric item. If so, + * call the wrench event. + */ + if (this.isUsableWrench(playerIn, heldItem, pos)) + { + this.damageWrench(playerIn, heldItem, pos); + + if (playerIn.isSneaking()) + { + if (this.onSneakUseWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + playerIn.swingArm(hand); + return true; + } + } + + if (this.onUseWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + playerIn.swingArm(hand); + return true; + } + } + + return false; + } + + /** + * A function that denotes if an itemStack is a wrench that can be used. + * Override this for more wrench compatibility. Compatible with Buildcraft + * and IC2 wrench API via reflection. + * + * @return True if it is a wrench. + */ + public boolean isUsableWrench(EntityPlayer entityPlayer, ItemStack itemStack, BlockPos pos) + { + if (entityPlayer != null && itemStack != null) + { + Item item = itemStack.getItem(); + if (item == GCItems.wrench) + return false; + + Class wrenchClass = item.getClass(); + + /** + * Buildcraft + */ + try + { + Method methodCanWrench = wrenchClass.getMethod("canWrench", EntityPlayer.class, BlockPos.class); + return (Boolean) methodCanWrench.invoke(item, entityPlayer, pos); + } catch (NoClassDefFoundError e) + { + } catch (Exception e) + { + } + + if (CompatibilityManager.isIc2Loaded()) + { + /** + * Industrialcraft + */ + if (wrenchClass == CompatibilityManager.classIC2wrench || wrenchClass == CompatibilityManager.classIC2wrenchElectric) + { + return itemStack.getItemDamage() < itemStack.getMaxDamage(); + } + } + } + + return false; + } + + /** + * This function damages a wrench. Works with Buildcraft and Industrialcraft + * wrenches. + * + * @return True if damage was successfull. + */ + public boolean damageWrench(EntityPlayer entityPlayer, ItemStack itemStack, BlockPos pos) + { + if (this.isUsableWrench(entityPlayer, itemStack, pos)) + { + Class wrenchClass = itemStack.getItem().getClass(); + + /** + * Buildcraft + */ + try + { + Method methodWrenchUsed = wrenchClass.getMethod("wrenchUsed", EntityPlayer.class, BlockPos.class); + methodWrenchUsed.invoke(itemStack.getItem(), entityPlayer, pos); + return true; + } catch (Exception e) + { + } + + /** + * Industrialcraft + */ + try + { + if (wrenchClass == CompatibilityManager.classIC2wrench || wrenchClass == CompatibilityManager.classIC2wrenchElectric) + { + Method methodWrenchDamage = wrenchClass.getMethod("damage", ItemStack.class, Integer.TYPE, EntityPlayer.class); + methodWrenchDamage.invoke(itemStack.getItem(), itemStack, 1, entityPlayer); + return true; + } + } catch (Exception e) + { + } + } + + return false; + } + + /** + * Called when the machine is right clicked by the player + * + * @return True if something happens + */ + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return false; + } + + /** + * Called when the machine is being wrenched by a player while sneaking. + * + * @return True if something happens + */ + public boolean onSneakMachineActivated(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return false; + } + + /** + * Called when a player uses a wrench on the machine + * + * @return True if some happens + */ + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return false; + } + + /** + * Called when a player uses a wrench on the machine while sneaking. Only + * works with the UE wrench. + * + * @return True if some happens + */ + public boolean onSneakUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return this.onUseWrench(world, pos, entityPlayer, hand, heldItem, side, hitX, hitY, hitZ); + } + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return this.isNormalCube(base_state, world, pos); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvancedTile.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvancedTile.java new file mode 100644 index 00000000..6187bfd0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAdvancedTile.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.tile.ILockable; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class BlockAdvancedTile extends BlockAdvanced implements ITileEntityProvider +{ + + public BlockAdvancedTile(Material par3Material) + { + super(par3Material); + this.hasTileEntity = true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return null; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + this.dropEntireInventory(worldIn, pos, state); + super.breakBlock(worldIn, pos, state); + } + + public void dropEntireInventory(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + if (tileEntity instanceof ILockable) + { + ((ILockable) tileEntity).clearLockedInventory(); + } + + if (tileEntity != null) + { + if (tileEntity instanceof IInventory) + { + IInventory inventory = (IInventory) tileEntity; + + Random syncRandom = GCCoreUtil.getRandom(pos); + + for (int var6 = 0; var6 < inventory.getSizeInventory(); ++var6) + { + ItemStack var7 = inventory.getStackInSlot(var6); + + if (var7 != null && !var7.isEmpty()) + { + float var8 = syncRandom.nextFloat() * 0.8F + 0.1F; + float var9 = syncRandom.nextFloat() * 0.8F + 0.1F; + float var10 = syncRandom.nextFloat() * 0.8F + 0.1F; + + while (!var7.isEmpty()) + { + EntityItem var12 = new EntityItem(worldIn, pos.getX() + var8, pos.getY() + var9, pos.getZ() + var10, var7.splitStack(syncRandom.nextInt(21) + 10)); + float var13 = 0.05F; + var12.motionX = (float) syncRandom.nextGaussian() * var13; + var12.motionY = (float) syncRandom.nextGaussian() * var13 + 0.2F; + var12.motionZ = (float) syncRandom.nextGaussian() * var13; + worldIn.spawnEntity(var12); + } + } + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockFrame.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockFrame.java new file mode 100644 index 00000000..09235fba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockFrame.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class BlockAirLockFrame extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + private enum EnumAirLockType implements IStringSerializable + { + + AIR_LOCK_FRAME(0, "air_lock_frame"), AIR_LOCK_CONTROLLER(1, "air_lock_controller"); + + private final int meta; + private final String name; + + EnumAirLockType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumAirLockType[] values = values(); + + public static EnumAirLockType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public static final PropertyEnum AIR_LOCK_TYPE = PropertyEnum.create("airlocktype", EnumAirLockType.class); + + public BlockAirLockFrame(String assetName) + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(AIR_LOCK_TYPE, EnumAirLockType.AIR_LOCK_FRAME)); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, EnumAirLockType.AIR_LOCK_FRAME.getMeta())); + list.add(new ItemStack(this, 1, EnumAirLockType.AIR_LOCK_CONTROLLER.getMeta())); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityAirLockController && placer instanceof EntityPlayer) + { + ((TileEntityAirLockController) tile).ownerName = PlayerUtil.getName(((EntityPlayer) placer)); + } + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + if (state.getValue(AIR_LOCK_TYPE).getMeta() == EnumAirLockType.AIR_LOCK_FRAME.getMeta()) + { + return new TileEntityAirLock(); + } else + { + return new TileEntityAirLockController(); + } + } + + @Override + public boolean canConnectRedstone(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + + if (state.getValue(AIR_LOCK_TYPE).getMeta() == EnumAirLockType.AIR_LOCK_CONTROLLER.getMeta() && tile instanceof TileEntityAirLockController) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + return false; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityAirLockController) + { + ((TileEntityAirLockController) tile).unsealAirLock(); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AIR_LOCK_TYPE, EnumAirLockType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(AIR_LOCK_TYPE).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, AIR_LOCK_TYPE); + } + + @Override + public String getShiftDescription(int itemDamage) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int itemDamage) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockWall.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockWall.java new file mode 100644 index 00000000..830ec499 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAirLockWall.java @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockBreakable; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockAirLockWall extends BlockBreakable implements IPartialSealableBlock, ISortableBlock +{ + + public static final PropertyEnum CONNECTION_TYPE = PropertyEnum.create("connection", EnumAirLockSealConnection.class); + protected static final AxisAlignedBB AABB_X = new AxisAlignedBB(0.25, 0.0, 0.0, 0.75, 1.0, 1.0); + protected static final AxisAlignedBB AABB_Z = new AxisAlignedBB(0.0, 0.0, 0.25, 1.0, 1.0, 0.75); + protected static final AxisAlignedBB AABB_FLAT = new AxisAlignedBB(0.0, 0.25, 0.0, 1.0, 0.75, 1.0); + + public enum EnumAirLockSealConnection implements IStringSerializable + { + + X("x"), Z("z"), FLAT("flat"); + + private final String name; + + EnumAirLockSealConnection(String name) + { + this.name = name; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockAirLockWall(String assetName) + { + super(Material.IRON, false); + this.setTickRandomly(true); + this.setHardness(1000.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (getConnection(source, pos)) + { + case X: + return AABB_X; + case Z: + return AABB_Z; + default: + case FLAT: + return AABB_FLAT; + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + +// @Override +// public Item getItem(World world, BlockPos pos) +// { +// return null; +// } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, CONNECTION_TYPE); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(CONNECTION_TYPE, getConnection(worldIn, pos)); + } + + private EnumAirLockSealConnection getConnection(IBlockAccess worldIn, BlockPos pos) + { + EnumAirLockSealConnection connection; + + Block frameID = GCBlocks.airLockFrame; + Block sealID = GCBlocks.airLockSeal; + + Block idXMin = worldIn.getBlockState(pos.offset(EnumFacing.WEST)).getBlock(); + Block idXMax = worldIn.getBlockState(pos.offset(EnumFacing.WEST)).getBlock(); + + if (idXMin != frameID && idXMax != frameID && idXMin != sealID && idXMax != sealID) + { + connection = EnumAirLockSealConnection.X; + } else + { + int adjacentCount = 0; + + for (EnumFacing dir : EnumFacing.HORIZONTALS) + { + Block blockID = worldIn.getBlockState(pos.offset(dir)).getBlock(); + + if (blockID == GCBlocks.airLockFrame || blockID == GCBlocks.airLockSeal) + { + adjacentCount++; + } + } + + if (adjacentCount == 4) + { + connection = EnumAirLockSealConnection.FLAT; + } else + { + connection = EnumAirLockSealConnection.Z; + } + } + + return connection; + } + + @Override + public int getMetaFromState(IBlockState state) + { + return 0; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAluminumWire.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAluminumWire.java new file mode 100644 index 00000000..11a8b1d6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockAluminumWire.java @@ -0,0 +1,599 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWire; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWireSwitch; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockAluminumWire extends BlockTransmitter implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum WIRE_TYPE = PropertyEnum.create("wiretype", EnumWireType.class); + private static final float MIN = 0.38F; + private static final float MINH = 0.3F; + private static final float MAX = 0.62F; + private static final float MAXH = 0.7F; + protected static final AxisAlignedBB[] BOUNDING_BOXES = new AxisAlignedBB[] + { + + new AxisAlignedBB(MIN, MIN, MIN, MAX, MAX, MAX), // No connection + // 0000000 + new AxisAlignedBB(MIN, MIN, MIN, MAX, MAX, 1.0D), // South 0000001 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, MAX, MAX), // West 0000010 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, MAX, 1.0D), // South West + // 0000011 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, MAX, MAX), // North 0000100 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, MAX, 1.0D), // North South + // 0000101 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, MAX, MAX), // North West + // 0000110 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, MAX, 1.0D), // North South + // West 0000111 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, MAX, MAX), // East 0001000 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, MAX, 1.0D), // East South + // 0001001 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, MAX, MAX), // West East + // 0001010 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, MAX, 1.0D), // South West + // East 0001011 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, MAX, MAX), // North East + // 0001100 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, MAX, 1.0D), // North South + // East 0001101 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, MAX, MAX), // North East + // West 0001110 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, MAX, 1.0D), // North South + // East West + // 0001111 + + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, MAX, MAX), // Down 0010000 + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, MAX, 1.0D), // Down South + // 0010001 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, MAX, MAX), // Down West + // 0010010 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, MAX, 1.0D), // Down South + // West 0010011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, MAX, MAX), // Down North + // 0010100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, MAX, 1.0D), // Down North + // South 0010101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, MAX, MAX), // Down North + // West 0010110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, MAX, 1.0D), // Down North + // South West + // 0010111 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, MAX, MAX), // Down East + // 0011000 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, MAX, 1.0D), // Down East + // South 0011001 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, MAX, MAX), // Down West + // East 0011010 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, MAX, 1.0D), // Down South + // West East + // 0011011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, MAX, MAX), // Down North + // East 0011100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, MAX, 1.0D), // Down North + // South East + // 0011101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAX, MAX), // Down North + // East West + // 0011110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAX, 1.0D), // Down North + // South East + // West + // 0011111 + + new AxisAlignedBB(MIN, MIN, MIN, MAX, 1.0D, MAX), // Up 0100000 + new AxisAlignedBB(MIN, MIN, MIN, MAX, 1.0D, 1.0D), // Up South + // 0100001 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, 1.0D, MAX), // Up West + // 0100010 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, 1.0D, 1.0D), // Up South West + // 0100011 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, 1.0D, MAX), // Up North + // 0100100 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, 1.0D, 1.0D), // Up North + // South 0100101 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, 1.0D, MAX), // Up North West + // 0100110 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, 1.0D, 1.0D), // Up North + // South West + // 0100111 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, 1.0D, MAX), // Up East + // 0101000 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, 1.0D, 1.0D), // Up East South + // 0101001 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, 1.0D, MAX), // Up West East + // 0101010 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, 1.0D, 1.0D), // Up South + // West East + // 0101011 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, 1.0D, MAX), // Up North East + // 0101100 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // 0101101 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, 1.0D, MAX), // Up North + // East West + // 0101110 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // West + // 0101111 + + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, 1.0D, MAX), // Up Down + // 0110000 + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, 1.0D, 1.0D), // Up Down South + // 0110001 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, 1.0D, MAX), // Up Down West + // 0110010 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, 1.0D, 1.0D), // Up Down + // South West + // 0110011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, 1.0D, MAX), // Up Down North + // 0110100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, 1.0D, 1.0D), // Up Down + // North South + // 0110101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, 1.0D, MAX), // Up Down + // North West + // 0110110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, 1.0D, 1.0D), // Up Down + // North South + // West + // 0110111 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, 1.0D, MAX), // Up Down East + // 0111000 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, 1.0D, 1.0D), // Up Down East + // South + // 0111001 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, 1.0D, MAX), // Up Down West + // East 0111010 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, 1.0D, 1.0D), // Up Down + // South West + // East + // 0111011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, 1.0D, MAX), // Up Down + // North East + // 0111100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // Up Down + // North South + // East + // 0111101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, MAX), // Up Down + // North East + // West + // 0111110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // Up Down + // North + // South East + // West + // 0111111 + + new AxisAlignedBB(MINH, MINH, MINH, MAXH, MAXH, MAXH), // No + // connection + // 1000000 + new AxisAlignedBB(MINH, MINH, MINH, MAXH, MAXH, 1.0D), // South + // 1000001 + new AxisAlignedBB(0.0D, MINH, MINH, MAXH, MAXH, MAXH), // West + // 1000010 + new AxisAlignedBB(0.0D, MINH, MINH, MAXH, MAXH, 1.0D), // South West + // 1000011 + new AxisAlignedBB(MINH, MINH, 0.0D, MAXH, MAXH, MAXH), // North + // 1000100 + new AxisAlignedBB(MINH, MINH, 0.0D, MAXH, MAXH, 1.0D), // North + // South + // 1000101 + new AxisAlignedBB(0.0D, MINH, 0.0D, MAXH, MAXH, MAXH), // North West + // 1000110 + new AxisAlignedBB(0.0D, MINH, 0.0D, MAXH, MAXH, 1.0D), // North + // South West + // 1000111 + new AxisAlignedBB(MINH, MINH, MINH, 1.0D, MAXH, MAXH), // East + // 1001000 + new AxisAlignedBB(MINH, MINH, MINH, 1.0D, MAXH, 1.0D), // East South + // 1001001 + new AxisAlignedBB(0.0D, MINH, MINH, 1.0D, MAXH, MAXH), // West East + // 1001010 + new AxisAlignedBB(0.0D, MINH, MINH, 1.0D, MAXH, 1.0D), // South West + // East + // 1001011 + new AxisAlignedBB(MINH, MINH, 0.0D, 1.0D, MAXH, MAXH), // North East + // 1001100 + new AxisAlignedBB(MINH, MINH, 0.0D, 1.0D, MAXH, 1.0D), // North + // South East + // 1001101 + new AxisAlignedBB(0.0D, MINH, 0.0D, 1.0D, MAXH, MAXH), // North East + // West + // 1001110 + new AxisAlignedBB(0.0D, MINH, 0.0D, 1.0D, MAXH, 1.0D), // North + // South East + // West + // 1001111 + + new AxisAlignedBB(MINH, 0.0D, MINH, MAXH, MAXH, MAXH), // Down + // 1010000 + new AxisAlignedBB(MINH, 0.0D, MINH, MAXH, MAXH, 1.0D), // Down South + // 1010001 + new AxisAlignedBB(0.0D, 0.0D, MINH, MAXH, MAXH, MAXH), // Down West + // 1010010 + new AxisAlignedBB(0.0D, 0.0D, MINH, MAXH, MAXH, 1.0D), // Down South + // West + // 1010011 + new AxisAlignedBB(MINH, 0.0D, 0.0D, MAXH, MAXH, MAXH), // Down North + // 1010100 + new AxisAlignedBB(MINH, 0.0D, 0.0D, MAXH, MAXH, 1.0D), // Down North + // South + // 1010101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAXH, MAXH, MAXH), // Down North + // West + // 1010110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAXH, MAXH, 1.0D), // Down North + // South West + // 1010111 + new AxisAlignedBB(MINH, 0.0D, MINH, 1.0D, MAXH, MAXH), // Down East + // 1011000 + new AxisAlignedBB(MINH, 0.0D, MINH, 1.0D, MAXH, 1.0D), // Down East + // South + // 1011001 + new AxisAlignedBB(0.0D, 0.0D, MINH, 1.0D, MAXH, MAXH), // Down West + // East + // 1011010 + new AxisAlignedBB(0.0D, 0.0D, MINH, 1.0D, MAXH, 1.0D), // Down South + // West East + // 1011011 + new AxisAlignedBB(MINH, 0.0D, 0.0D, 1.0D, MAXH, MAXH), // Down North + // East + // 1011100 + new AxisAlignedBB(MINH, 0.0D, 0.0D, 1.0D, MAXH, 1.0D), // Down North + // South East + // 1011101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAXH, MAXH), // Down North + // East West + // 1011110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAXH, 1.0D), // Down North + // South East + // West + // 1011111 + + new AxisAlignedBB(MINH, MINH, MINH, MAXH, 1.0D, MAXH), // Up 1100000 + new AxisAlignedBB(MINH, MINH, MINH, MAXH, 1.0D, 1.0D), // Up South + // 1100001 + new AxisAlignedBB(0.0D, MINH, MINH, MAXH, 1.0D, MAXH), // Up West + // 1100010 + new AxisAlignedBB(0.0D, MINH, MINH, MAXH, 1.0D, 1.0D), // Up South + // West + // 1100011 + new AxisAlignedBB(MINH, MINH, 0.0D, MAXH, 1.0D, MAXH), // Up North + // 1100100 + new AxisAlignedBB(MINH, MINH, 0.0D, MAXH, 1.0D, 1.0D), // Up North + // South + // 1100101 + new AxisAlignedBB(0.0D, MINH, 0.0D, MAXH, 1.0D, MAXH), // Up North + // West + // 1100110 + new AxisAlignedBB(0.0D, MINH, 0.0D, MAXH, 1.0D, 1.0D), // Up North + // South West + // 1100111 + new AxisAlignedBB(MINH, MINH, MINH, 1.0D, 1.0D, MAXH), // Up East + // 1101000 + new AxisAlignedBB(MINH, MINH, MINH, 1.0D, 1.0D, 1.0D), // Up East + // South + // 1101001 + new AxisAlignedBB(0.0D, MINH, MINH, 1.0D, 1.0D, MAXH), // Up West + // East + // 1101010 + new AxisAlignedBB(0.0D, MINH, MINH, 1.0D, 1.0D, 1.0D), // Up South + // West East + // 1101011 + new AxisAlignedBB(MINH, MINH, 0.0D, 1.0D, 1.0D, MAXH), // Up North + // East + // 1101100 + new AxisAlignedBB(MINH, MINH, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // 1101101 + new AxisAlignedBB(0.0D, MINH, 0.0D, 1.0D, 1.0D, MAXH), // Up North + // East West + // 1101110 + new AxisAlignedBB(0.0D, MINH, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // West + // 1101111 + + new AxisAlignedBB(MINH, 0.0D, MINH, MAXH, 1.0D, MAXH), // Up Down + // 1110000 + new AxisAlignedBB(MINH, 0.0D, MINH, MAXH, 1.0D, 1.0D), // Up Down + // South + // 1110001 + new AxisAlignedBB(0.0D, 0.0D, MINH, MAXH, 1.0D, MAXH), // Up Down + // West + // 1110010 + new AxisAlignedBB(0.0D, 0.0D, MINH, MAXH, 1.0D, 1.0D), // Up Down + // South West + // 1110011 + new AxisAlignedBB(MINH, 0.0D, 0.0D, MAXH, 1.0D, MAXH), // Up Down + // North + // 1110100 + new AxisAlignedBB(MINH, 0.0D, 0.0D, MAXH, 1.0D, 1.0D), // Up Down + // North + // South + // 1110101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAXH, 1.0D, MAXH), // Up Down + // North West + // 1110110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAXH, 1.0D, 1.0D), // Up Down + // North + // South West + // 1110111 + new AxisAlignedBB(MINH, 0.0D, MINH, 1.0D, 1.0D, MAXH), // Up Down + // East + // 1111000 + new AxisAlignedBB(MINH, 0.0D, MINH, 1.0D, 1.0D, 1.0D), // Up Down + // East South + // 1111001 + new AxisAlignedBB(0.0D, 0.0D, MINH, 1.0D, 1.0D, MAXH), // Up Down + // West East + // 1111010 + new AxisAlignedBB(0.0D, 0.0D, MINH, 1.0D, 1.0D, 1.0D), // Up Down + // South West + // East + // 1111011 + new AxisAlignedBB(MINH, 0.0D, 0.0D, 1.0D, 1.0D, MAXH), // Up Down + // North East + // 1111100 + new AxisAlignedBB(MINH, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // Up Down + // North + // South East + // 1111101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, MAXH), // Up Down + // North East + // West + // 1111110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; // Up Down + // North + // South + // East West + // 1111111 + + public enum EnumWireType implements IStringSerializable + { + + ALUMINUM_WIRE(0, "alu_wire"), ALUMINUM_WIRE_HEAVY(1, "alu_wire_heavy"), ALUMINUM_WIRE_SWITCHED(2, "alu_wire_switch"), ALUMINUM_WIRE_SWITCHED_HEAVY(3, "alu_wire_switch_heavy"); + + private final int meta; + private final String name; + + EnumWireType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumWireType[] values = values(); + + public static EnumWireType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockAluminumWire(String assetName) + { + super(Material.CLOTH); + this.setSoundType(SoundType.CLOTH); + this.setResistance(0.2F); + this.setHardness(0.075F); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + return BOUNDING_BOXES[getBoundingBoxIdx(state)]; + } + + private static int getBoundingBoxIdx(IBlockState state) + { + int i = 0; + + if (state.getValue(NORTH).booleanValue()) + { + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if (state.getValue(EAST).booleanValue()) + { + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if (state.getValue(SOUTH).booleanValue()) + { + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if (state.getValue(WEST).booleanValue()) + { + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + if (state.getValue(DOWN).booleanValue()) + { + i |= 1 << 4; + } + + if (state.getValue(UP).booleanValue()) + { + i |= 1 << 5; + } + + // Is heavy: + if (((EnumWireType) state.getValue(WIRE_TYPE)).ordinal() % 2 == 1) + { + i |= 1 << 6; + } + + return i; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + TileEntity tile; + switch (metadata) + { + case 0: + tile = new TileEntityAluminumWire(1); + break; + case 1: + tile = new TileEntityAluminumWire(2); + break; + case 2: + tile = new TileEntityAluminumWireSwitch(1); + break; + case 3: + tile = new TileEntityAluminumWireSwitch(2); + break; + default: + return null; + } + + return tile; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + list.add(new ItemStack(this, 1, 2)); + list.add(new ItemStack(this, 1, 3)); + } + + @Override + public NetworkType getNetworkType(IBlockState state) + { + return NetworkType.POWER; + } + + @Override + public String getShiftDescription(int itemDamage) + { + switch (itemDamage) + { + case 0: + return GCCoreUtil.translate("tile.aluminum_wire.alu_wire.description"); + case 1: + return GCCoreUtil.translate("tile.aluminum_wire.alu_wire_heavy.description"); + case 2: + return GCCoreUtil.translate("tile.aluminum_wire.alu_wire_switch.description"); + case 3: + return GCCoreUtil.translate("tile.aluminum_wire.alu_wire_switch_heavy.description"); + } + return ""; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(WIRE_TYPE, EnumWireType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumWireType) state.getValue(WIRE_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, WIRE_TYPE, UP, DOWN, NORTH, EAST, SOUTH, WEST); + } + + @Override + public boolean showDescription(int itemDamage) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.TRANSMITTER; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasic.java new file mode 100644 index 00000000..211681d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasic.java @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +/** + * Metadata: 3 = Tin Decoration Block 1; 4 = Tin Decoration Block 2; 5 = Copper + * Ore; 6 = Tin Ore; 7 = Aluminium Ore; 8 = Silicon Ore; 9 = Copper Block; 10 = + * Tin Block; 11 = Aluminium Block; 12 = Meteoric Iron Block; 13 = Silicon + * Block; + */ +public class BlockBasic extends Block implements IDetectableResource, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE = PropertyEnum.create("basictype", EnumBlockBasic.class); + + public enum EnumBlockBasic implements IStringSerializable + { + + ALUMINUM_DECORATION_BLOCK_0(3, "deco_block_0"), + ALUMINUM_DECORATION_BLOCK_1(4, "deco_block_1"), + ORE_COPPER(5, "ore_copper_gc"), + ORE_TIN(6, "ore_tin_gc"), + ORE_ALUMINUM(7, "ore_aluminum_gc"), + ORE_SILICON(8, "ore_silicon"), + DECO_BLOCK_COPPER(9, "block_copper_gc"), + DECO_BLOCK_TIN(10, "block_tin_gc"), + DECO_BLOCK_ALUMINUM(11, "block_aluminum_gc"), + DECO_BLOCK_METEOR_IRON(12, "block_meteoric_iron_gc"), + DECO_BLOCK_SILICON(13, "block_silicon_gc"); + + private final int meta; + private final String name; + + EnumBlockBasic(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + public static EnumBlockBasic byMetadata(int meta) + { + int val = meta - 3; + if (val < 0 || val >= values().length) + { + return ALUMINUM_DECORATION_BLOCK_0; + } + return values()[val]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockBasic(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.blockResistance = 15F; + this.setDefaultState(this.blockState.getBaseState().withProperty(BASIC_TYPE, EnumBlockBasic.ALUMINUM_DECORATION_BLOCK_0)); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + switch (getMetaFromState(state)) + { + case 8: + return GCItems.basicItem; + default: + return Item.getItemFromBlock(this); + } + } + + @Override + public int damageDropped(IBlockState state) + { + switch (getMetaFromState(state)) + { + case 8: + return 2; + default: + return getMetaFromState(state); + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + int bonus = 0; + if (ConfigManagerCore.quickMode && this.getMetaFromState(state) == 8) + { + bonus = 1; + } + if (fortune > 0 && Item.getItemFromBlock(this) != this.getItemDropped(state, random, fortune)) + { + int j = random.nextInt(fortune + 2) - 1; + + if (j < 0) + { + j = 0; + } + + return this.quantityDropped(random) * (j + 1) + bonus; + } else + { + return this.quantityDropped(random) + bonus; + } + } + + @Override + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) + { + int metadata = getMetaFromState(world.getBlockState(pos)); + + if (metadata < 5) + { + return 2.0F; + // Decoration blocks are soft, like cauldrons or wood + } else if (metadata == 12) + { + return 8.0F; + // Meteoric Iron is tougher than diamond + } else if (metadata > 8) + { + return 6.0F; + // Blocks of metal are tough - like diamond blocks in vanilla + } + + return super.getExplosionResistance(world, pos, exploder, explosion); + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + int metadata = getMetaFromState(blockState); + + if (metadata == 5 || metadata == 6) + { + return 5.0F; + } + + if (metadata == 7) + { + return 6.0F; + } + + if (metadata == 8) + { + return 3.0F; + } + + return this.blockHardness; + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int var4 = 3; var4 <= 13; ++var4) + { + list.add(new ItemStack(this, 1, var4)); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + EnumBlockBasic type = state.getValue(BASIC_TYPE); + switch (type) + { + case ORE_COPPER: + case ORE_TIN: + case ORE_ALUMINUM: + case ORE_SILICON: + return true; + default: + return false; + } + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_SILICON) + { + return new ItemStack(Item.getItemFromBlock(this), 1, EnumBlockBasic.ORE_SILICON.getMeta()); + } + + return super.getPickBlock(state, target, world, pos, player); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE, EnumBlockBasic.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasic) state.getValue(BASIC_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + switch (meta) + { + case 3: + case 4: + return EnumSortCategoryBlock.DECORATION; + case 5: + case 6: + case 7: + case 8: + return EnumSortCategoryBlock.ORE; + case 9: + case 10: + case 11: + case 12: + case 13: + return EnumSortCategoryBlock.INGOT_BLOCK; + } + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + int meta = this.getMetaFromState(state); + if (meta == 8) + { + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 2, 5); + } + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasicMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasicMoon.java new file mode 100644 index 00000000..29af65f9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBasicMoon.java @@ -0,0 +1,400 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.block.IPlantableBlock; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; + +import com.google.common.base.Predicate; + +public class BlockBasicMoon extends Block implements IDetectableResource, IPlantableBlock, ITerraformableBlock, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE_MOON = PropertyEnum.create("basictypemoon", EnumBlockBasicMoon.class); + + public enum EnumBlockBasicMoon implements IStringSerializable + { + + ORE_COPPER_MOON(0, "ore_copper_moon"), + ORE_TIN_MOON(1, "ore_tin_moon"), + ORE_CHEESE_MOON(2, "ore_cheese_moon"), + MOON_DIRT(3, "moon_dirt_moon"), + MOON_STONE(4, "moon_stone"), + MOON_TURF(5, "moon_turf"), + ORE_SAPPHIRE(6, "ore_sapphire_moon"), + MOON_DUNGEON_BRICK(14, "moon_dungeon_brick"); + + private final int meta; + private final String name; + + EnumBlockBasicMoon(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockBasicMoon[] values = values(); + + public static EnumBlockBasicMoon byMetadata(int meta) + { + if (meta < 7) + { + return values[meta]; + } + + return MOON_DUNGEON_BRICK; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockBasicMoon(String assetName) + { + super(Material.ROCK); + this.blockHardness = 1.5F; + this.blockResistance = 2.5F; + this.setDefaultState(this.blockState.getBaseState().withProperty(BASIC_TYPE_MOON, EnumBlockBasicMoon.ORE_COPPER_MOON)); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) + { + EnumBlockBasicMoon type = world.getBlockState(pos).getValue(BASIC_TYPE_MOON); + + if (type == EnumBlockBasicMoon.MOON_DUNGEON_BRICK) + { + return 40.0F; + } else if (type == EnumBlockBasicMoon.MOON_STONE) + { + return 6.0F; + } else if (type == EnumBlockBasicMoon.ORE_COPPER_MOON || type == EnumBlockBasicMoon.ORE_TIN_MOON || type == EnumBlockBasicMoon.ORE_SAPPHIRE || type == EnumBlockBasicMoon.ORE_CHEESE_MOON) + { + return 3.0F; + } + + return this.blockResistance / 5.0F; + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + EnumBlockBasicMoon type = blockState.getValue(BASIC_TYPE_MOON); + + if (type == EnumBlockBasicMoon.MOON_DIRT || type == EnumBlockBasicMoon.MOON_TURF) + { + return 0.5F; + } + + if (type == EnumBlockBasicMoon.MOON_DUNGEON_BRICK) + { + return 4.0F; + } + + if (type == EnumBlockBasicMoon.ORE_COPPER_MOON || type == EnumBlockBasicMoon.ORE_TIN_MOON || type == EnumBlockBasicMoon.ORE_SAPPHIRE) + { + return 5.0F; + } + + if (type == EnumBlockBasicMoon.ORE_CHEESE_MOON) + { + return 3.0F; + } + + return this.blockHardness; + } + + @Override + public boolean canHarvestBlock(IBlockAccess world, BlockPos pos, EntityPlayer player) + { + IBlockState bs = world.getBlockState(pos); + if (bs.getBlock() != this) + return false; + EnumBlockBasicMoon type = bs.getValue(BASIC_TYPE_MOON); + if (type == EnumBlockBasicMoon.MOON_DIRT || type == EnumBlockBasicMoon.MOON_TURF) + { + return true; + } + + return super.canHarvestBlock(world, pos, player); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + switch (type) + { + case ORE_CHEESE_MOON: + return GCItems.cheeseCurd; + case ORE_SAPPHIRE: + return GCItems.itemBasicMoon; + default: + return Item.getItemFromBlock(this); + } + } + + @Override + public int damageDropped(IBlockState state) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + if (type == EnumBlockBasicMoon.ORE_CHEESE_MOON) + { + return 0; + } else if (type == EnumBlockBasicMoon.ORE_SAPPHIRE) + { + return 2; + } else + { + return getMetaFromState(state); + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + switch (type) + { + case ORE_CHEESE_MOON: + if (fortune >= 1) + { + return (random.nextFloat() < fortune * 0.29F - 0.25F) ? 2 : 1; + } + return 1; + default: + return 1; + } + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (EnumBlockBasicMoon type : EnumBlockBasicMoon.values()) + { + list.add(new ItemStack(this, 1, type.getMeta())); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + switch (type) + { + case ORE_CHEESE_MOON: + case ORE_COPPER_MOON: + case ORE_SAPPHIRE: + case ORE_TIN_MOON: + return true; + default: + return false; + } + } + + @Override + public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) + { + EnumBlockBasicMoon type = state.getValue(BASIC_TYPE_MOON); + + if (type != EnumBlockBasicMoon.MOON_TURF) + { + return false; + } + + plantable.getPlant(world, pos.offset(EnumFacing.UP)); + + return plantable instanceof BlockFlower; + } + + @Override + public int requiredLiquidBlocksNearby() + { + return 4; + } + + @Override + public boolean isPlantable(IBlockState state) + { + return state.getValue(BASIC_TYPE_MOON) == EnumBlockBasicMoon.MOON_TURF; + + } + + @Override + public boolean isTerraformable(World world, BlockPos pos) + { + EnumBlockBasicMoon type = world.getBlockState(pos).getValue(BASIC_TYPE_MOON); + + if (type == EnumBlockBasicMoon.MOON_TURF) + { + BlockPos above = pos.offset(EnumFacing.UP); + IBlockState stateAbove = world.getBlockState(above); + return stateAbove.getBlock().isAir(stateAbove, world, above); + } + + return false; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state)); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)); + + if (!worldIn.isRemote && type == EnumBlockBasicMoon.MOON_TURF) + { + Map> footprintChunkMap = TickHandlerServer.serverFootprintMap.get(GCCoreUtil.getDimensionID(worldIn)); + + if (footprintChunkMap != null) + { + long chunkKey = ChunkPos.asLong(pos.getX() >> 4, pos.getZ() >> 4); + List footprintList = footprintChunkMap.get(chunkKey); + + if (footprintList != null && !footprintList.isEmpty()) + { + List toRemove = new ArrayList(); + + for (Footprint footprint : footprintList) + { + if (footprint.position.x > pos.getX() && footprint.position.x < pos.getX() + 1 && footprint.position.z > pos.getZ() && footprint.position.z < pos.getZ() + 1) + { + toRemove.add(footprint); + } + } + + if (!toRemove.isEmpty()) + { + footprintList.removeAll(toRemove); + } + } + } + + TickHandlerServer.footprintBlockChanges.add(new BlockVec3Dim(pos, GCCoreUtil.getDimensionID(worldIn))); + } + } + + @Override + public boolean isReplaceableOreGen(IBlockState state, IBlockAccess world, BlockPos pos, Predicate target) + { + EnumBlockBasicMoon type = state.getValue(BASIC_TYPE_MOON); + return type == EnumBlockBasicMoon.MOON_STONE || type == EnumBlockBasicMoon.MOON_DIRT; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE_MOON, EnumBlockBasicMoon.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasicMoon) state.getValue(BASIC_TYPE_MOON)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE_MOON); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + EnumBlockBasicMoon type = ((EnumBlockBasicMoon) getStateFromMeta(meta).getValue(BASIC_TYPE_MOON)); + switch (type) + { + case ORE_CHEESE_MOON: + case ORE_COPPER_MOON: + case ORE_SAPPHIRE: + case ORE_TIN_MOON: + return EnumSortCategoryBlock.ORE; + case MOON_DUNGEON_BRICK: + return EnumSortCategoryBlock.BRICKS; + default: + return EnumSortCategoryBlock.GENERAL; + } + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + EnumBlockBasicMoon type = state.getValue(BASIC_TYPE_MOON); + if (type == EnumBlockBasicMoon.ORE_CHEESE_MOON || type == EnumBlockBasicMoon.ORE_SAPPHIRE) + { + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 2, 5) + (type == EnumBlockBasicMoon.ORE_SAPPHIRE ? 1 : 0); + } + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBossSpawner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBossSpawner.java new file mode 100644 index 00000000..18dbbfdc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBossSpawner.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; + +public class BlockBossSpawner extends Block implements ITileEntityProvider +{ + + public BlockBossSpawner(String assetName) + { + super(Material.ROCK); + this.blockHardness = 1000000.0F; + this.blockResistance = 1000000.0F; + this.setTranslationKey(assetName); + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return false; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + return 0; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityDungeonSpawner<>(EntitySkeletonBoss.class); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return ItemStack.EMPTY; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return null; + } + + @Override + public boolean isCollidable() + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBreathableAir.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBreathableAir.java new file mode 100644 index 00000000..965e07c2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBreathableAir.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; + +public class BlockBreathableAir extends BlockAir +{ + + public static final PropertyBool THERMAL = PropertyBool.create("thermal"); + + public BlockBreathableAir(String assetName) + { + this.setResistance(1000.0F); + this.setDefaultState(this.blockState.getBaseState().withProperty(THERMAL, false)); + this.setHardness(0.0F); + this.setTranslationKey(assetName); + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + final Block block = blockAccess.getBlockState(pos).getBlock(); + if (block == this || block == GCBlocks.brightBreatheableAir) + { + return false; + } else + { + return block instanceof BlockAir; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block oldBlock, BlockPos fromPos) + { + if (Blocks.AIR != oldBlock) + // Do no check if replacing breatheableAir with a solid block, although + // that could be dividing a sealed space + { + // Check if replacing a passthrough breathable block, like a torch - + // if so replace with BreathableAir not Air + if (Blocks.AIR == state.getBlock()) + { + EnumFacing side; + if (pos.getX() != fromPos.getX()) + side = pos.getX() > fromPos.getX() ? EnumFacing.EAST : EnumFacing.WEST; + else if (pos.getY() != fromPos.getY()) + side = pos.getY() > fromPos.getY() ? EnumFacing.UP : EnumFacing.DOWN; + else + side = pos.getZ() > fromPos.getZ() ? EnumFacing.SOUTH : EnumFacing.NORTH; + if (OxygenPressureProtocol.canBlockPassAir(worldIn, state, fromPos, side)) + { + worldIn.setBlockState(fromPos, GCBlocks.breatheableAir.getDefaultState(), 6); + } + } + // In all cases, trigger a leak check at this point + OxygenPressureProtocol.onEdgeBlockUpdated(worldIn, pos); + } + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, THERMAL); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(THERMAL, meta % 2 == 1); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(THERMAL) ? 1 : 0); + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public void breakBlock(World worldIn, BlockPos vec, IBlockState state) + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightAir.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightAir.java new file mode 100644 index 00000000..87f53cc0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightAir.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.BlockAir; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockBrightAir extends BlockAir +{ + + public BlockBrightAir(String assetName) + { + this.setResistance(1000.0F); + this.setHardness(0.0F); + this.setTranslationKey(assetName); + this.setLightLevel(1.0F); + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public boolean shouldSideBeRendered(IBlockState state, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return false; + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + return 15; + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public void breakBlock(World worldIn, BlockPos vec, IBlockState state) + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightBreathableAir.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightBreathableAir.java new file mode 100644 index 00000000..6e4b1e54 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightBreathableAir.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; + +public class BlockBrightBreathableAir extends BlockAir +{ + + public static final PropertyBool THERMAL = PropertyBool.create("thermal"); + + public BlockBrightBreathableAir(String assetName) + { + this.setResistance(1000.0F); + this.setDefaultState(this.blockState.getBaseState().withProperty(THERMAL, false)); + this.setHardness(0.0F); + this.setTranslationKey(assetName); + this.setLightLevel(1.0F); + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + final Block block = blockAccess.getBlockState(pos).getBlock(); + if (block == this || block == GCBlocks.breatheableAir) + { + return false; + } else + { + return block instanceof BlockAir; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (Blocks.AIR == blockIn) + // Do no check if replacing breatheableAir with a solid block, although + // that could be dividing a sealed space + { + OxygenPressureProtocol.onEdgeBlockUpdated(worldIn, pos); + } + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, THERMAL); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(THERMAL, meta % 2 == 1); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(THERMAL) ? 1 : 0); + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + return 15; + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public void breakBlock(World worldIn, BlockPos vec, IBlockState state) + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightLamp.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightLamp.java new file mode 100644 index 00000000..cee13093 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockBrightLamp.java @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityArclamp; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +public class BlockBrightLamp extends BlockAdvanced implements IShiftDescription, ITileEntityProvider, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing"); +// public static final PropertyBool ACTIVE = PropertyBool.create("active"); + + protected static final AxisAlignedBB DOWN_AABB = new AxisAlignedBB(0.2F, 0.0F, 0.2F, 0.8F, 0.6F, 0.8F); + protected static final AxisAlignedBB UP_AABB = new AxisAlignedBB(0.2F, 0.4F, 0.2F, 0.8F, 1.0F, 0.8F); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.0F, 0.8F, 0.8F, 0.6F); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.4F, 0.8F, 0.8F, 1.0F); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.0F, 0.2F, 0.2F, 0.6F, 0.8F, 0.8F); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.4F, 0.2F, 0.2F, 1.0F, 0.8F, 0.8F); + + // Metadata: bits 0-2 are the side of the base plate using standard side + // convention (0-5) + + public BlockBrightLamp(String assetName) + { + super(Material.GLASS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); // .withProperty(ACTIVE, + // true)); + this.setHardness(0.1F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setLightLevel(0.9F); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case EAST: + return EAST_AABB; + case WEST: + return WEST_AABB; + case SOUTH: + return SOUTH_AABB; + case NORTH: + return NORTH_AABB; + case DOWN: + return DOWN_AABB; + case UP: + default: + return UP_AABB; + } + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + Block block = state.getBlock(); + if (block != this) + { + return block.getLightValue(state); + } + /** + * Gets the light value of the specified block coords. Args: x, y, z + */ + + if (world instanceof World) + { + return RedstoneUtil.isBlockReceivingRedstone((World) world, pos) ? 0 : this.lightValue; + } + + return 0; + } + + @Override + public int getLightOpacity(IBlockState state, IBlockAccess world, BlockPos pos) + { + return 1; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + double boundsMin = 0.2D; + double boundsMax = 0.8D; + return new AxisAlignedBB(pos.getX() + boundsMin, pos.getY() + boundsMin, pos.getZ() + boundsMin, pos.getX() + boundsMax, pos.getY() + boundsMax, pos.getZ() + boundsMax); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing side : EnumFacing.VALUES) + { + BlockPos offsetPos = pos.offset(side); + IBlockState state = worldIn.getBlockState(offsetPos); + BlockFaceShape faceShape = state.getBlockFaceShape(worldIn, offsetPos, side.getOpposite()); + if (faceShape.equals(BlockFaceShape.SOLID)) + { + return true; + } + } + return false; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + EnumFacing opposite = facing.getOpposite(); + BlockPos offsetPos = pos.offset(opposite); + IBlockState state = world.getBlockState(offsetPos); + BlockFaceShape faceShape = state.getBlockFaceShape(world, offsetPos, facing); + if (faceShape.equals(BlockFaceShape.SOLID)) + { + return this.getDefaultState().withProperty(FACING, opposite); + } + + return this.getDefaultState().withProperty(FACING, facing); + } + + /** + * Lets the block know when one of its neighbor changes. Doesn't know which + * neighbor changed (coordinates passed are their own) Args: x, y, z, + * neighbor blockID + */ + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing side = state.getValue(FACING); + + BlockPos offsetPos = pos.offset(side); + IBlockState state1 = worldIn.getBlockState(offsetPos); + BlockFaceShape faceShape = state1.getBlockFaceShape(worldIn, offsetPos, EnumFacing.byIndex(side.getIndex() ^ 1)); + if (faceShape.equals(BlockFaceShape.SOLID)) + { + return; + } + + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityArclamp) + { + ((TileEntityArclamp) tile).facingChanged(); + } + } + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityArclamp(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); // , ACTIVE }); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCargoLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCargoLoader.java new file mode 100644 index 00000000..7ac58c4e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCargoLoader.java @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoUnloader; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class BlockCargoLoader extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + private enum EnumLoaderType implements IStringSerializable + { + + CARGO_LOADER(METADATA_CARGO_LOADER, "cargo_loader"), CARGO_UNLOADER(METADATA_CARGO_UNLOADER, "cargo_unloader"); + + private final int meta; + private final String name; + + EnumLoaderType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + @Override + public String getName() + { + return this.name; + } + } + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumLoaderType.class); + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public static final int METADATA_CARGO_LOADER = 0; + public static final int METADATA_CARGO_UNLOADER = 4; + + public BlockCargoLoader(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, BlockCargoLoader.METADATA_CARGO_LOADER)); + list.add(new ItemStack(this, 1, BlockCargoLoader.METADATA_CARGO_UNLOADER)); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity != null) + { + if (tileEntity instanceof TileEntityCargoLoader) + { + ((TileEntityCargoLoader) tileEntity).checkForCargoEntity(); + } else if (tileEntity instanceof TileEntityCargoUnloader) + { + ((TileEntityCargoUnloader) tileEntity).checkForCargoEntity(); + } + } + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftCore.instance, -1, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + if (state.getValue(TYPE) == EnumLoaderType.CARGO_LOADER) + { + return new TileEntityCargoLoader(); + } else + { + return new TileEntityCargoUnloader(); + } + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; +// int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); +// +// if (stack.getItemDamage() >= METADATA_CARGO_UNLOADER) +// { +// change += METADATA_CARGO_UNLOADER; +// } +// else if (stack.getItemDamage() >= METADATA_CARGO_LOADER) +// { +// change += METADATA_CARGO_LOADER; +// } + + worldIn.setBlockState(pos, state.withProperty(FACING, EnumFacing.byHorizontalIndex(angle).getOpposite()), 3); + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + } + + @Override + public void onPlayerDestroy(World worldIn, BlockPos pos, IBlockState state) + { + super.onPlayerDestroy(worldIn, pos, state); + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + } + + @Override + public int damageDropped(IBlockState state) + { + return state.getValue(TYPE).getMeta(); + } + + @Override + public String getShiftDescription(int meta) + { + switch (meta) + { + case METADATA_CARGO_LOADER: + return GCCoreUtil.translate("tile.cargo_loader.description"); + case METADATA_CARGO_UNLOADER: + return GCCoreUtil.translate("tile.cargo_unloader.description"); + } + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumLoaderType type = meta >= METADATA_CARGO_UNLOADER ? EnumLoaderType.CARGO_UNLOADER : EnumLoaderType.CARGO_LOADER; + + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex() + state.getValue(TYPE).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCheese.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCheese.java new file mode 100644 index 00000000..d128675d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCheese.java @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockCheese extends Block implements IShiftDescription, ISortableBlock +{ + + public static final PropertyInteger BITES = PropertyInteger.create("bites", 0, 6); + protected static final AxisAlignedBB[] CHEESE_AABB = new AxisAlignedBB[] + {new AxisAlignedBB(0.0625, 0.0, 0.0625, 0.9375, 0.5, 0.9375), new AxisAlignedBB(0.1875, 0.0, 0.0625, 0.9375, 0.5, 0.9375), new AxisAlignedBB(0.3125, 0.0, 0.0625, 0.9375, 0.5, 0.9375), + new AxisAlignedBB(0.4375, 0.0, 0.0625, 0.9375, 0.5, 0.9375), new AxisAlignedBB(0.5625, 0.0, 0.0625, 0.9375, 0.5, 0.9375), new AxisAlignedBB(0.6875, 0.0, 0.0625, 0.9375, 0.5, 0.9375), + new AxisAlignedBB(0.8125, 0.0, 0.0625, 0.9375, 0.5, 0.9375)}; + + public BlockCheese(String assetName) + { + super(Material.CAKE); + this.setTickRandomly(true); + this.disableStats(); + this.setHardness(0.5F); + this.setDefaultState(this.blockState.getBaseState().withProperty(BITES, Integer.valueOf(0))); + this.setSoundType(SoundType.CLOTH); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + int bites = 0; + if (state.getBlock() instanceof BlockCheese) + { + bites = ((Integer) state.getValue(BITES)).intValue(); + } + return CHEESE_AABB[bites]; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + this.eatCheeseSlice(worldIn, pos, state, playerIn); + return true; + } + + @Override + public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + this.eatCheeseSlice(worldIn, pos, worldIn.getBlockState(pos), playerIn); + } + + private void eatCheeseSlice(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn) + { + if (playerIn.canEat(false)) + { + playerIn.getFoodStats().addStats(2, 0.1F); + int i = ((Integer) state.getValue(BITES)).intValue(); + + if (i < 6) + { + worldIn.setBlockState(pos, state.withProperty(BITES, Integer.valueOf(i + 1)), 3); + } else + { + worldIn.setBlockToAir(pos); + } + } + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return super.canPlaceBlockAt(worldIn, pos) && this.canBlockStay(worldIn, pos); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.canBlockStay(worldIn, pos)) + { + worldIn.setBlockToAir(pos); + } + } + + private boolean canBlockStay(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).getMaterial().isSolid(); + } + + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BITES, Integer.valueOf(meta)); + } + + @Override + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.CAKE, 1, 0); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((Integer) state.getValue(BITES)).intValue(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {BITES}); + } + + @Override + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return (7 - ((Integer) worldIn.getBlockState(pos).getValue(BITES)).intValue()) * 2; + } + + @Override + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCompactNasaWorkbench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCompactNasaWorkbench.java new file mode 100644 index 00000000..bd79232f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCompactNasaWorkbench.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCompactNasaWorkbench; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockCompactNasaWorkbench extends BlockTileGC implements ITileEntityProvider, IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockCompactNasaWorkbench(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + ItemStack heldItem = playerIn.getHeldItem(hand); + + if (heldItem.getItem() != GCItems.wrench) + { + playerIn.openGui(GalacticraftCore.instance, SchematicRegistry.getMatchingRecipeForID(0).getGuiID(), worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityCompactNasaWorkbench(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedDetector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedDetector.java new file mode 100644 index 00000000..64dd65ec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedDetector.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlayerDetector; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +public class BlockConcealedDetector extends Block implements ISortableBlock, ITileEntityProvider +{ + + public static final PropertyInteger VARIANT = PropertyInteger.create("var", 0, 1); + public static final PropertyInteger FACING = PropertyInteger.create("facing", 0, 3); + public static final PropertyBool DETECTED = PropertyBool.create("det"); + + public BlockConcealedDetector(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.blockResistance = 15F; + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, Integer.valueOf(0)).withProperty(VARIANT, Integer.valueOf(0)).withProperty(DETECTED, false)); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int damage, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getHorizontalIndex()); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + int facing = meta & 3; + int var = (meta >> 2) & 1; + return this.getDefaultState().withProperty(FACING, Integer.valueOf(facing)).withProperty(VARIANT, Integer.valueOf(var)).withProperty(DETECTED, Boolean.valueOf(meta >= 8)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).intValue() + state.getValue(VARIANT).intValue() * 4 + (state.getValue(DETECTED) ? 8 : 0); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {FACING, VARIANT, DETECTED}); + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return true; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return true; + } + + @Override + public boolean isSideSolid(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityPlayerDetector(); + } + + @Override + public boolean canProvidePower(IBlockState state) + { + return true; + } + + @Override + public int getWeakPower(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + if (worldIn instanceof World && RedstoneUtil.isBlockReceivingDirectRedstone((World) worldIn, pos)) + return 0; + + return worldIn.getBlockState(pos).getValue(DETECTED) ? 0 : 15; + } + + public void updateState(World worldObj, BlockPos pos, boolean result) + { + IBlockState bs = worldObj.getBlockState(pos); + if (result != (boolean) bs.getValue(DETECTED)) + { + worldObj.setBlockState(pos, bs.withProperty(DETECTED, result), 3); + } + } + + @Override + public int quantityDropped(Random random) + { + return 0; + } + + @Override + protected boolean canSilkHarvest() + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRedstone.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRedstone.java new file mode 100644 index 00000000..abce08f7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRedstone.java @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.List; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRedstoneRepeater; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +public class BlockConcealedRedstone extends Block implements ISortableBlock +{ + + public static final PropertyInteger POWER = PropertyInteger.create("power", 0, 15); + private boolean canProvidePower = true; + private final Set blocksNeedingUpdate = Sets.newHashSet(); + + public BlockConcealedRedstone(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.blockResistance = 15F; + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(POWER, Integer.valueOf(0))); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(POWER, Integer.valueOf(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((Integer) state.getValue(POWER)).intValue(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {POWER}); + } + + private IBlockState updateSurroundingRedstone(World worldIn, BlockPos pos, IBlockState state) + { + state = this.calculateCurrentChanges(worldIn, pos, pos, state); + List list = Lists.newArrayList(this.blocksNeedingUpdate); + this.blocksNeedingUpdate.clear(); + + for (BlockPos blockpos : list) + { + worldIn.notifyNeighborsOfStateChange(blockpos, this, false); + } + + return state; + } + + private IBlockState calculateCurrentChanges(World worldIn, BlockPos pos1, BlockPos pos2, IBlockState state) + { + IBlockState iblockstate = state; + int currentPower = ((Integer) state.getValue(POWER)).intValue(); + int maxPower = 0; + maxPower = this.getMaxCurrentStrength(worldIn, pos2, maxPower); + this.canProvidePower = false; + int k = worldIn.getRedstonePowerFromNeighbors(pos1); + this.canProvidePower = true; + + if (k > 0 && k > maxPower - 1) + { + maxPower = k; + } + + int l = 0; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos1.offset(enumfacing); + boolean flag = blockpos.getX() != pos2.getX() || blockpos.getZ() != pos2.getZ(); + + if (flag) + { + l = this.getMaxCurrentStrength(worldIn, blockpos, l); + } + + IBlockState bs = worldIn.getBlockState(blockpos); + IBlockState bsUp = worldIn.getBlockState(pos1.up()); + if (bs.getBlock().isNormalCube(bs) && !bsUp.getBlock().isNormalCube(bsUp)) + { + if (flag && pos1.getY() >= pos2.getY()) + { + l = this.getMaxCurrentStrength(worldIn, blockpos.up(), l); + } + } else if (!bs.getBlock().isNormalCube(bs) && flag && pos1.getY() <= pos2.getY()) + { + l = this.getMaxCurrentStrength(worldIn, blockpos.down(), l); + } + } + + if (l > maxPower) + { + maxPower = l - 1; + } else if (maxPower > 0) + { + maxPower--; + } else + { + maxPower = 0; + } + + if (k > maxPower - 1) + { + maxPower = k; + } + + if (currentPower != maxPower) + { + state = state.withProperty(POWER, Integer.valueOf(maxPower)); + + if (worldIn.getBlockState(pos1) == iblockstate) + { + worldIn.setBlockState(pos1, state, 2); + } + + this.blocksNeedingUpdate.add(pos1); + + for (EnumFacing enumfacing1 : EnumFacing.VALUES) + { + this.blocksNeedingUpdate.add(pos1.offset(enumfacing1)); + } + } + + return state; + } + + private void notifyWireNeighborsOfStateChange(World worldIn, BlockPos pos) + { + Block b = worldIn.getBlockState(pos).getBlock(); + if (b == this || b == Blocks.REDSTONE_WIRE) + { + worldIn.notifyNeighborsOfStateChange(pos, this, false); + + for (EnumFacing enumfacing : EnumFacing.VALUES) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + } + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + this.updateSurroundingRedstone(worldIn, pos, state); + + for (EnumFacing enumfacing : EnumFacing.Plane.VERTICAL) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + + for (EnumFacing enumfacing1 : EnumFacing.Plane.HORIZONTAL) + { + this.notifyWireNeighborsOfStateChange(worldIn, pos.offset(enumfacing1)); + } + + this.notifyNeighbors(worldIn, pos); + } + } + + private void notifyNeighbors(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing2 : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing2); + + IBlockState bs = worldIn.getBlockState(blockpos); + if (bs.getBlock().isNormalCube(bs)) + { + this.notifyWireNeighborsOfStateChange(worldIn, blockpos.up()); + } else + { + this.notifyWireNeighborsOfStateChange(worldIn, blockpos.down()); + } + } + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + + if (!worldIn.isRemote) + { + for (EnumFacing enumfacing : EnumFacing.VALUES) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + + this.updateSurroundingRedstone(worldIn, pos, state); + + for (EnumFacing enumfacing1 : EnumFacing.Plane.HORIZONTAL) + { + this.notifyWireNeighborsOfStateChange(worldIn, pos.offset(enumfacing1)); + } + + this.notifyNeighbors(worldIn, pos); + } + } + + private int getMaxCurrentStrength(World worldIn, BlockPos pos, int strength) + { + if (worldIn.getBlockState(pos).getBlock() != this) + { + return strength; + } else + { + int i = (Integer) worldIn.getBlockState(pos).getValue(POWER); + return i > strength ? i : strength; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + this.updateSurroundingRedstone(worldIn, pos, state); + } + } + + @Override + public int getStrongPower(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + return !this.canProvidePower ? 0 : this.getWeakPower(state, worldIn, pos, side); + } + + @Override + public int getWeakPower(IBlockState state, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (!this.canProvidePower) + { + return 0; + } else + { + return ((Integer) state.getValue(POWER)).intValue(); + } + } + + protected static boolean canRedstoneConnect(IBlockAccess world, BlockPos pos, EnumFacing side) + { + IBlockState state = world.getBlockState(pos); + if (state.getBlock() == Blocks.REDSTONE_WIRE || state.getBlock() == GCBlocks.concealedRedstone) + { + return true; + } else if (Blocks.UNPOWERED_REPEATER.isAssociatedBlock(state.getBlock())) + { + EnumFacing direction = (EnumFacing) state.getValue(BlockRedstoneRepeater.FACING); + return direction == side || direction.getOpposite() == side; + } else + { + return state.getBlock().canConnectRedstone(state, world, pos, side); + } + } + + @Override + public boolean canProvidePower(IBlockState state) + { + return this.canProvidePower; + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return true; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return true; + } + + @Override + public boolean isSideSolid(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRepeater.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRepeater.java new file mode 100644 index 00000000..de8208f2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockConcealedRepeater.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.BlockRedstoneRepeater; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockConcealedRepeater extends BlockRedstoneRepeater implements ISortableBlock +{ + + protected static final AxisAlignedBB CUBE_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + + public BlockConcealedRepeater(String assetName, boolean powered) + { + super(powered); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.blockResistance = 15F; + this.setTranslationKey(assetName); + this.setCreativeTab(powered ? null : GalacticraftCore.galacticraftBlocksTab); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return CUBE_AABB; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public int getLightOpacity(IBlockState state) + { + return 0; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return true; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return true; + } + + @Override + public boolean isSideSolid(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); + } + + @Override + public boolean canBlockStay(World worldIn, BlockPos pos) + { + return true; + } + + @Override + protected IBlockState getPoweredState(IBlockState unpoweredState) + { + Integer integer = (Integer) unpoweredState.getValue(DELAY); + Boolean obool = (Boolean) unpoweredState.getValue(LOCKED); + EnumFacing enumfacing = (EnumFacing) unpoweredState.getValue(FACING); + return GCBlocks.concealedRepeater_Powered.getDefaultState().withProperty(FACING, enumfacing).withProperty(DELAY, integer).withProperty(LOCKED, obool); + } + + @Override + protected IBlockState getUnpoweredState(IBlockState poweredState) + { + Integer integer = (Integer) poweredState.getValue(DELAY); + Boolean obool = (Boolean) poweredState.getValue(LOCKED); + EnumFacing enumfacing = (EnumFacing) poweredState.getValue(FACING); + return GCBlocks.concealedRepeater_Unpowered.getDefaultState().withProperty(FACING, enumfacing).withProperty(DELAY, integer).withProperty(LOCKED, obool); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return ItemBlock.getItemFromBlock(GCBlocks.concealedRepeater_Unpowered); + } + + @Override + @SideOnly(Side.CLIENT) + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(GCBlocks.concealedRepeater_Unpowered); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCrafting.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCrafting.java new file mode 100644 index 00000000..e233290d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockCrafting.java @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockCrafting extends BlockAdvancedTile implements ITileEntityProvider, ISortableBlock, IShiftDescription +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing"); + + public BlockCrafting(String assetName) + { + super(Material.IRON); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + ItemStack heldItem = playerIn.getHeldItem(hand); + + if (this.useWrench(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + return true; + } + + if (playerIn.isSneaking()) + { + if (this.onSneakMachineActivated(worldIn, pos, playerIn, hand, heldItem, side, hitX, hitY, hitZ)) + { + return true; + } + } + + if (!worldIn.isRemote) + { + playerIn.openGui(GalacticraftCore.instance, -1, worldIn, pos.getX(), pos.getY(), pos.getZ()); + } + return true; + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + this.rotate6Ways(world, pos); + return true; + } + + private void rotate6Ways(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + EnumFacing facing = state.getValue(FACING); + if (facing == EnumFacing.DOWN) + { + facing = EnumFacing.UP; + } else if (facing == EnumFacing.UP) + { + facing = EnumFacing.NORTH; + } else if (facing == EnumFacing.WEST) + { + facing = EnumFacing.DOWN; + } else + { + facing = facing.rotateY(); + } +// int metadata = this.getMetaFromState(world.getBlockState(pos)); +// int metaDir = ((metadata & 7) + 1) % 6; +// //DOWN->UP->NORTH->*EAST*->*SOUTH*->WEST +// //0->1 1->2 2->5 3->4 4->0 5->3 +// if (metaDir == 3) //after north +// { +// metaDir = 5; +// } +// else if (metaDir == 0) +// { +// metaDir = 3; +// } +// else if (metaDir == 5) +// { +// metaDir = 0; +// } + + world.setBlockState(pos, state.withProperty(FACING, facing), 3); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityCrafting(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + worldIn.setBlockState(pos, state.withProperty(FACING, getFacingFromEntity(worldIn, pos, placer)), 2); + } + + public static EnumFacing getFacingFromEntity(World worldIn, BlockPos clickedBlock, EntityLivingBase entityIn) + { + if (MathHelper.abs((float) entityIn.posX - (float) clickedBlock.getX()) < 3.0F && MathHelper.abs((float) entityIn.posZ - (float) clickedBlock.getZ()) < 3.0F) + { + double d0 = entityIn.posY + (double) entityIn.getEyeHeight(); + + if (d0 - (double) clickedBlock.getY() > 2.0D) + { + return EnumFacing.UP; + } + + if ((double) clickedBlock.getY() - d0 > 1.0D) + { + return EnumFacing.DOWN; + } + } + + return entityIn.getHorizontalFacing().getOpposite(); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.byIndex(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public void dropEntireInventory(World worldIn, BlockPos pos, IBlockState state) + { + super.dropEntireInventory(worldIn, pos, state); + TileEntity tileEntity = worldIn.getTileEntity(pos); + if (tileEntity instanceof TileEntityCrafting) + { + ((TileEntityCrafting) tileEntity).dropHiddenOutputBuffer(worldIn, pos); + } + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDish.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDish.java new file mode 100644 index 00000000..ca635aa5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDish.java @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDish; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockDish extends BlockTileGC implements IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public BlockDish(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) + { + for (int y = 1; y <= 2; y++) + { + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + BlockPos pos1 = pos.add((y == 2 ? x : 0), y, (y == 2 ? z : 0)); + Block block = world.getBlockState(pos1).getBlock(); + + if (block.getMaterial(world.getBlockState(pos)) != Material.AIR && !block.isReplaceable(world, pos1)) + { + return false; + } + } + } + } + + EnumFacing facing = EnumFacing.byIndex(side.getIndex() ^ 1); + return world.getBlockState(pos.add(facing.getXOffset(), facing.getYOffset(), facing.getZOffset())).getBlock() != GCBlocks.fakeBlock; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int metadata = state.getBlock().getMetaFromState(state); + + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = 0; + + switch (angle) + { + case 0: + change = 1; + break; + case 1: + change = 2; + break; + case 2: + change = 0; + break; + case 3: + change = 3; + break; + } + + worldIn.setBlockState(pos, state.getBlock().getStateFromMeta(change), 3); + + BlockMulti.onPlacement(worldIn, pos, placer, this); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityDish) + { + ((TileEntityDish) tile).onDestroy(tile); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { +// IBlockState state = world.getBlockState(pos); +// int original = state.getBlock().getMetaFromState(state); +// int change = world.getBlockState(pos).getValue(FACING).rotateY().getHorizontalIndex(); + +// TileEntity te = world.getTileEntity(pos); +// if (te instanceof TileBaseUniversalElectrical) +// { +// ((TileBaseUniversalElectrical) te).updateFacing(); +// } +// +// world.setBlockState(pos, state.getBlock().getStateFromMeta(change), 3); + return true; + } + + @Override + public boolean onSneakMachineActivated(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + // entityPlayer.openGui(GalacticraftCore.instance, -1, world, x, y, z); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState metadata) + { + return new TileEntityDish(); + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate("tile.radio_telescope.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDoubleSlabGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDoubleSlabGC.java new file mode 100644 index 00000000..cc424f4c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockDoubleSlabGC.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.material.Material; + +public class BlockDoubleSlabGC extends BlockSlabGC +{ + + public BlockDoubleSlabGC(String name, Material material) + { + super(material); + this.setTranslationKey(name); + } + + @Override + public boolean isDouble() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEmergencyBox.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEmergencyBox.java new file mode 100644 index 00000000..93a4283a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEmergencyBox.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEmergencyBox; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockEmergencyBox extends BlockAdvancedTile implements IShiftDescription, ISortableBlock, IPartialSealableBlock +{ + + public static final PropertyBool KIT = PropertyBool.create("kit"); + + public BlockEmergencyBox(String assetName) + { + super(Material.IRON); + this.setHardness(4.0F); + this.setResistance(70F); + this.setSoundType(SoundType.METAL); + this.setLightLevel(1.0F); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(KIT, false)); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, KIT); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(KIT, meta % 2 == 1); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(KIT) ? 1 : 0); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(this, 1, this.getMetaFromState(state)); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return (face == EnumFacing.UP || face == EnumFacing.DOWN) ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityEmergencyBox(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityEmergencyBox) + { + if (!world.isRemote) + { + ((TileEntityEmergencyBox) tile).click(player, side, state.getValue(KIT)); + } + return true; + } + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return direction.ordinal() < 2; + } + + @Override + public boolean isSideSolid(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction) + { + return direction.ordinal() < 2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEnclosed.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEnclosed.java new file mode 100644 index 00000000..1cdfc295 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockEnclosed.java @@ -0,0 +1,518 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.tile.TileCableIC2Sealed; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWire; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNull; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import appeng.api.AEApi; +import appeng.api.parts.IPartHelper; +import ic2.api.network.INetworkManager; + +public class BlockEnclosed extends Block implements IPartialSealableBlock, ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static Item[] pipeItemsBC = new Item[6]; + public static Block blockPipeBC = null; + public static Method onBlockNeighbourChangeIC2a = null; + public static Method onBlockNeighbourChangeIC2b = null; + private static Class icCableContainerClass; + private static Class icWireRegClass; + private static Field icWireRegInstance; + private static Method icContainerGetMethod; + private static Constructor icTileCableConstuctor; + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumEnclosedBlockType.class); + + public enum EnumEnclosedBlockType implements IStringSerializable + { + +// copper(1, 1, 0.25F, 0.2D, 128), +// glass(0, 0, 0.25F, 0.025D, 8192), +// gold(2, 1, 0.1875F, 0.4D, 512), +// iron(3, 1, 0.375F, 0.8D, 2048), +// tin(1, 1, 0.25F, 0.2D, 32), +// detector(0, 2147483647, 0.5F, 0.5D, 8192), +// splitter(0, 2147483647, 0.5F, 0.5D, 8192); + IC2_HV_CABLE(0, "iron", 2, 7, "enclosed_hv_cable"), + OXYGEN_PIPE(1, "enclosed_fluid_pipe"), + IC2_COPPER_CABLE(2, "copper", 1, 1, "enclosed_copper_cable"), + IC2_GOLD_CABLE(3, "gold", 2, 4, "enclosed_gold_cable"), + TE_CONDUIT(4, "enclosed_te_conduit"), // CURRENTLY UNUSED + IC2_GLASS_FIBRE_CABLE(5, "glass", 0, 9, "enclosed_glass_fibre_cable"), + IC2_LV_CABLE(6, "tin", 1, 10, "enclosed_lv_cable"), + BC_ITEM_STONEPIPE(7, "pipeItemStone", "enclosed_pipe_items_stone"), + BC_ITEM_COBBLESTONEPIPE(8, "pipeItemCobble", "enclosed_pipe_items_cobblestone"), + BC_FLUIDS_STONEPIPE(9, "pipeFluidStone", "enclosed_pipe_fluids_stone"), + BC_FLUIDS_COBBLESTONEPIPE(10, "pipeFluidCobble", "enclosed_pipe_fluids_cobblestone"), + BC_POWER_STONEPIPE(11, "pipePowerStone", "enclosed_pipe_power_stone"), + BC_POWER_GOLDPIPE(12, "pipePowerGold", "enclosed_pipe_power_gold"), + ME_CABLE(13, "enclosed_me_cable"), + ALUMINUM_WIRE(14, "enclosed_aluminum_wire"), + ALUMINUM_WIRE_HEAVY(15, "enclosed_heavy_aluminum_wire"); + + private final int meta; + private final String name; + private final String ic2Enum; + private final int ic2Insulation; + private final int icClassicMeta; + private final String bcPipeType; + + EnumEnclosedBlockType(int meta, String bcPipeType, String name) + { + this(meta, null, -1, -1, bcPipeType, name); + } + + EnumEnclosedBlockType(int meta, String name) + { + this(meta, null, -1, -1, null, name); + } + + EnumEnclosedBlockType(int meta, String ic2Enum, int ic2Insulation, int icClassicMeta, String name) + { + this(meta, ic2Enum, ic2Insulation, icClassicMeta, null, name); + } + + EnumEnclosedBlockType(int meta, String ic2Enum, int ic2Insulation, int icClassicMeta, String bcPipeType, String name) + { + this.meta = meta; + this.ic2Enum = ic2Enum; + this.ic2Insulation = ic2Insulation; + this.icClassicMeta = icClassicMeta; + this.bcPipeType = bcPipeType; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + public String getIc2Enum() + { + return ic2Enum; + } + + public int getIc2Insulation() + { + return ic2Insulation; + } + + public String getBCPipeType() + { + return bcPipeType; + } + + private final static EnumEnclosedBlockType[] values = values(); + + public static EnumEnclosedBlockType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockEnclosed(String assetName) + { + super(Material.CLAY); + this.setResistance(0.2F); + this.setHardness(0.4f); + this.setSoundType(SoundType.STONE); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.ALUMINUM_WIRE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.ALUMINUM_WIRE_HEAVY.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.OXYGEN_PIPE.getMeta())); + + if (CompatibilityManager.isTELoaded() || GCBlocks.registeringSorted) + { + // par3List.add(new ItemStack(par1, 1, 0)); + } + + if (CompatibilityManager.isIc2Loaded() || GCBlocks.registeringSorted) + { + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_COPPER_CABLE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_GOLD_CABLE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_HV_CABLE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_GLASS_FIBRE_CABLE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.IC2_LV_CABLE.getMeta())); + } + + if (CompatibilityManager.isBCraftTransportLoaded() || GCBlocks.registeringSorted) + { + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_ITEM_COBBLESTONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_ITEM_STONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_FLUIDS_COBBLESTONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_FLUIDS_STONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_POWER_STONEPIPE.getMeta())); + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.BC_POWER_GOLDPIPE.getMeta())); + } + + if (CompatibilityManager.isAppEngLoaded() || GCBlocks.registeringSorted) + { + list.add(new ItemStack(this, 1, EnumEnclosedBlockType.ME_CABLE.getMeta())); + } + } + + public static void initialiseBC() + { + try + { + if (CompatibilityManager.classBCTransport != null) + { + for (int i = 0; i < 6; i++) + { + String pipeName = EnumEnclosedBlockType.values()[i + 7].getBCPipeType(); + pipeItemsBC[i] = (Item) CompatibilityManager.classBCTransport.getField(pipeName).get(null); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public int damageDropped(IBlockState state) + { + return state.getBlock().getMetaFromState(state); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { +// int metadata = state.getBlock().getMetaFromState(state); + EnumEnclosedBlockType type = state.getValue(TYPE); + final TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (type == EnumEnclosedBlockType.TE_CONDUIT) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } else if (type == EnumEnclosedBlockType.OXYGEN_PIPE) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + + if (tileEntity instanceof INetworkConnection) + { + ((INetworkConnection) tileEntity).refresh(); + } + } else if (type.getMeta() <= 6) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + if (CompatibilityManager.isIc2Loaded() && tileEntity != null) + { + try + { + if (onBlockNeighbourChangeIC2a != null) + { + onBlockNeighbourChangeIC2a.invoke(tileEntity, blockIn); + } else if (onBlockNeighbourChangeIC2b != null) + { + onBlockNeighbourChangeIC2b.invoke(tileEntity, blockIn, pos); + } + return; + } catch (Exception ignore) + { + } + } + } else if (type.getMeta() <= 12) + { + if (CompatibilityManager.isBCraftTransportLoaded()) + { + if (blockPipeBC != null) + { + try + { + blockPipeBC.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } catch (Exception e) + { + e.printStackTrace(); + } + return; + } + } + + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } else if (type.getMeta() <= EnumEnclosedBlockType.ME_CABLE.getMeta()) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + if (CompatibilityManager.isAppEngLoaded()) + { +// worldIn.notifyBlockUpdate(pos); TODO + } + } else if (type.getMeta() <= EnumEnclosedBlockType.ALUMINUM_WIRE.getMeta()) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + if (tileEntity instanceof IConductor) + { + ((IConductor) tileEntity).refresh(); + } + } else if (type.getMeta() <= EnumEnclosedBlockType.ALUMINUM_WIRE_HEAVY.getMeta()) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + if (tileEntity instanceof IConductor) + { + ((IConductor) tileEntity).refresh(); + } + } + } + + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + if (metadata == EnumEnclosedBlockType.TE_CONDUIT.getMeta()) + { + // TODO + } else if (metadata == EnumEnclosedBlockType.OXYGEN_PIPE.getMeta()) + { + return new TileEntityFluidPipe(); + } else if (metadata <= 6) + { + if (CompatibilityManager.isIc2Loaded()) + { + try + { + EnumEnclosedBlockType enclosedType = EnumEnclosedBlockType.byMetadata(metadata); + if (CompatibilityManager.isIc2ClassicLoaded()) + { + if (icCableContainerClass == null) + { + icCableContainerClass = Class.forName("ic2.core.block.wiring.cables.CableContainer"); + + icWireRegClass = Class.forName("ic2.core.block.wiring.cables.WireRegistry"); + icWireRegInstance = icWireRegClass.getDeclaredField("instance"); + icContainerGetMethod = icWireRegClass.getMethod("getContainerFromMeta", int.class); + + icTileCableConstuctor = CompatibilityManager.classIc2ClassicTileCable.getConstructor(icCableContainerClass); + } + + Object wireRegInstance = icWireRegInstance.get(null); + Object container = icContainerGetMethod.invoke(wireRegInstance, enclosedType.icClassicMeta); + + return (TileEntity) icTileCableConstuctor.newInstance(container); + } else + { + // IndustrialCraft 2 uses enums for types + Enum[] enums = (Enum[]) CompatibilityManager.classIC2cableType.getEnumConstants(); + Enum foundEnum = null; + for (Enum e : enums) + { + if (e.name().equals(enclosedType.getIc2Enum())) + { + foundEnum = e; + break; + } + } + + return new TileCableIC2Sealed().setupInsulation(foundEnum, enclosedType.getIc2Insulation()); + } + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + } else if (metadata <= 12) + { + if (CompatibilityManager.isBCraftTransportLoaded()) + { + try + { + return (TileEntity) CompatibilityManager.classBCTransportPipeTile.getConstructor().newInstance(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } else if (metadata <= EnumEnclosedBlockType.ME_CABLE.getMeta()) + { + if (CompatibilityManager.isAppEngLoaded()) + { + // Emulate Api.INSTANCE.partHelper().getCombinedInstance( + // TileCableBus.class ) + try + { + IPartHelper apiPart = AEApi.instance().partHelper(); + Class classTileCableBus = Class.forName("appeng.tile.networking.TileCableBus"); + for (Method m : apiPart.getClass().getMethods()) + { + if ("getCombinedInstance".equals(m.getName())) + { + return (TileEntity) ((Class) m.invoke(apiPart, classTileCableBus)).newInstance(); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } else if (metadata <= EnumEnclosedBlockType.ALUMINUM_WIRE.getMeta()) + { + return new TileEntityAluminumWire(1); + } else if (metadata <= EnumEnclosedBlockType.ALUMINUM_WIRE_HEAVY.getMeta()) + { + return new TileEntityAluminumWire(2); + } + + return new TileEntityNull(); + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int metadata = stack.getItemDamage(); + if (metadata >= EnumEnclosedBlockType.BC_ITEM_STONEPIPE.getMeta() && metadata <= EnumEnclosedBlockType.BC_POWER_GOLDPIPE.getMeta()) + { + try + { + TileEntity tile = worldIn.getTileEntity(pos); + if (CompatibilityManager.classBCTransportPipeTile.isInstance(tile)) + { + Method m = CompatibilityManager.classBCTransportPipeTile.getMethod("onPlacedBy", EntityLivingBase.class, ItemStack.class); + m.invoke(tile, placer, new ItemStack(pipeItemsBC[metadata - 7])); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } else if (!worldIn.isRemote && metadata <= EnumEnclosedBlockType.IC2_LV_CABLE.getMeta() && metadata != EnumEnclosedBlockType.OXYGEN_PIPE.getMeta() + && metadata != EnumEnclosedBlockType.TE_CONDUIT.getMeta() && CompatibilityManager.isIc2Loaded()) + { + TileEntity te = worldIn.getTileEntity(pos); + if (te != null) + { + try + { + Object network = CompatibilityManager.fieldIC2networkManager.get(null); + if (CompatibilityManager.isIc2ClassicLoaded()) + { + Method get = network.getClass().getMethod("get"); + Object manager = get.invoke(network); + Method sendMethod = CompatibilityManager.classIc2ClassicNetworkManager.getMethod("sendInitialData", EntityPlayerMP.class, TileEntity.class); + sendMethod.invoke(manager, placer, te); + } else + { + INetworkManager manager = null; + Method get = network.getClass().getMethod("get", boolean.class); + manager = (INetworkManager) get.invoke(network, true); + if (manager != null) + { + manager.sendInitialData(te); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumEnclosedBlockType type = EnumEnclosedBlockType.byMetadata(meta); + return this.getDefaultState().withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(TYPE).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.TRANSMITTER; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFallenMeteor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFallenMeteor.java new file mode 100644 index 00000000..a69b3f6d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFallenMeteor.java @@ -0,0 +1,312 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFallenMeteor; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockFallenMeteor extends Block implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + private static final AxisAlignedBB BOUNDS = new AxisAlignedBB(0.15, 0.05, 0.15, 0.85, 0.75, 0.85); + + public BlockFallenMeteor(String assetName) + { + super(Material.ROCK); + this.setHardness(40.0F); + this.setSoundType(SoundType.STONE); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return BOUNDS; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public int quantityDroppedWithBonus(int par1, Random par2Random) + { + return 1 + (int) (par2Random.nextFloat() + 0.75F); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return GCItems.meteoricIronRaw; + } + + @Override + public void onEntityCollision(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityFallenMeteor) + { + TileEntityFallenMeteor meteor = (TileEntityFallenMeteor) tile; + + if (meteor.getHeatLevel() <= 0) + { + return; + } + + if (entityIn instanceof EntityLivingBase) + { + final EntityLivingBase livingEntity = (EntityLivingBase) entityIn; + + worldIn.playSound(null, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, SoundEvents.ENTITY_GENERIC_EXTINGUISH_FIRE, SoundCategory.NEUTRAL, 0.5F, + 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F); + + for (int var5 = 0; var5 < 8; ++var5) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, pos.getX() + Math.random(), pos.getY() + 0.2D + Math.random(), pos.getZ() + Math.random(), 0.0D, 0.0D, 0.0D); + } + + if (!livingEntity.isBurning()) + { + livingEntity.setFire(2); + } + + double var9 = pos.getX() + 0.5F - livingEntity.posX; + double var7; + + for (var7 = livingEntity.posZ - pos.getZ(); var9 * var9 + var7 * var7 < 1.0E-4D; var7 = (Math.random() - Math.random()) * 0.01D) + { + var9 = (Math.random() - Math.random()) * 0.01D; + } + + livingEntity.knockBack(livingEntity, 1, var9, var7); + } + } + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack itemStack) + { + world.setBlockState(pos, this.getDefaultState(), 3); + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntityFallenMeteor) + { + ((TileEntityFallenMeteor) tile).setHeatLevel(0); + } + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + this.tryToFall(worldIn, pos, state); + } + } + + private void tryToFall(World world, BlockPos pos, IBlockState state) + { + if (this.canFallBelow(world, pos.down()) && pos.getY() >= 0) + { + int prevHeatLevel = ((TileEntityFallenMeteor) world.getTileEntity(pos)).getHeatLevel(); + world.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); + BlockPos blockpos1; + + for (blockpos1 = pos.down(); this.canFallBelow(world, blockpos1) && blockpos1.getY() > 0; blockpos1 = blockpos1.down()) + { + } + + if (blockpos1.getY() >= 0) + { + world.setBlockState(blockpos1.up(), state, 3); + ((TileEntityFallenMeteor) world.getTileEntity(blockpos1.up())).setHeatLevel(prevHeatLevel); + } + } + } + + private boolean canFallBelow(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + + if (state.getMaterial() == Material.AIR) + { + return true; + } else if (state.getBlock() == Blocks.FIRE) + { + return true; + } else + { + return state.getMaterial() == Material.WATER ? true : state.getMaterial() == Material.LAVA; + } + } + + public static int colorMultiplier(IBlockAccess worldIn, BlockPos pos) + { + if (worldIn != null && pos != null) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityFallenMeteor) + { + TileEntityFallenMeteor meteor = (TileEntityFallenMeteor) tile; + + Vector3 col = new Vector3(198, 108, 58); + col.translate(200 - meteor.getScaledHeatLevel() * 200); + col.x = Math.min(255, col.x); + col.y = Math.min(255, col.y); + col.z = Math.min(255, col.z); + + return ColorUtil.to32BitColor(255, (byte) col.x, (byte) col.y, (byte) col.z); + } + } + + return 16777215; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityFallenMeteor(); + } + + @Override + public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player) + { + return true; + } + + @Override + public float getPlayerRelativeBlockHardness(IBlockState state, EntityPlayer player, World world, BlockPos pos) + { + float hardness = this.getBlockHardness(state, world, pos); + if (hardness < 0.0F) + { + return 0.0F; + } + + int power = canHarvestBlock(this, player, state); + if (power > 0) + { + return power * player.getDigSpeed(state, pos) / hardness / 30F; + } else + { + return player.getDigSpeed(state, pos) / hardness / 30F; + } + } + + public int canHarvestBlock(Block block, EntityPlayer player, IBlockState state) + { + ItemStack stack = player.inventory.getCurrentItem(); + String tool = block.getHarvestTool(state); + if (stack.isEmpty() || tool == null) + { + return player.canHarvestBlock(state) ? 1 : 0; + } + + int toolLevel = stack.getItem().getHarvestLevel(stack, tool, player, state) - block.getHarvestLevel(state) + 1; + if (toolLevel < 1) + { + return player.canHarvestBlock(state) ? 1 : 0; + } + + return toolLevel; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 3, 7); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidGC.java new file mode 100644 index 00000000..89220b22 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidGC.java @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import javax.annotation.Nullable; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.common.property.IExtendedBlockState; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.IFluidBlock; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; + +public class BlockFluidGC extends BlockFluidClassic +{ + + private final String fluidName; + private final Fluid fluid; + + public BlockFluidGC(Fluid fluid, String assetName) + { + super(fluid, (assetName.startsWith("oil") || assetName.startsWith("fuel")) ? GCFluids.materialOil : Material.WATER); + this.fluidName = assetName; + this.fluid = fluid; + + if (assetName.startsWith("oil")) + { + this.needsRandomTick = true; + } + + this.setTranslationKey(assetName); + } + + @Override + @Nullable + public Boolean isEntityInsideMaterial(IBlockAccess world, BlockPos pos, IBlockState state, Entity entity, double yToTest, Material material, boolean testingHead) + { + return true; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote && this.fluidName.startsWith("oil") && playerIn instanceof EntityPlayerSP) + { + ClientProxyCore.playerClientHandler.onBuild(7, (EntityPlayerSP) playerIn); + } + + return super.onBlockActivated(worldIn, pos, state, playerIn, hand, side, hitX, hitY, hitZ); + } + + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + super.randomDisplayTick(stateIn, worldIn, pos, rand); + + if (this.fluidName.startsWith("oil") && rand.nextInt(1200) == 0) + { + worldIn.playSound(null, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, SoundEvents.BLOCK_LAVA_AMBIENT, SoundCategory.BLOCKS, rand.nextFloat() * 0.25F + 0.75F, + 0.00001F + rand.nextFloat() * 0.5F); + } + if (this.fluidName.equals("oil") && rand.nextInt(10) == 0) + { + BlockPos below = pos.down(); + IBlockState state = worldIn.getBlockState(below); + if (state.getBlock().isSideSolid(state, worldIn, below, EnumFacing.UP) && !worldIn.getBlockState(pos.down(2)).getMaterial().blocksMovement()) + { + GalacticraftCore.proxy.spawnParticle("oilDrip", new Vector3(pos.getX() + rand.nextFloat(), pos.getY() - 1.05D, pos.getZ() + rand.nextFloat()), new Vector3(0, 0, 0), new Object[] + {}); + } + } + } + + @Override + public boolean canDisplace(IBlockAccess world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + + return super.canDisplace(world, pos); + } + + @Override + public boolean displaceIfPossible(World world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + + return super.displaceIfPossible(world, pos); + } + + @Override + public boolean isFlammable(IBlockAccess world, BlockPos pos, EnumFacing face) + { + if (this.fluidName.startsWith("fuel")) + { + ((World) world).createExplosion(null, pos.getX(), pos.getY(), pos.getZ(), 6.0F, true); + return true; + } + return (this.fluidName.startsWith("oil")); + } + + @Override + public IBlockState getExtendedState(IBlockState oldState, IBlockAccess world, BlockPos pos) + { + IExtendedBlockState state = (IExtendedBlockState) oldState; + state = state.withProperty(FLOW_DIRECTION, (float) getFlowDirection(state, world, pos)); + IBlockState[][] upBlockState = new IBlockState[3][3]; + float[][] height = new float[3][3]; + float[][] corner = new float[2][2]; + upBlockState[1][1] = world.getBlockState(pos.down(this.densityDir)); + height[1][1] = this.getFluidHeightForRender(world, pos, upBlockState[1][1]); + + if (height[1][1] == 1) + { + for (int i = 0; i < 2; i++) + { + for (int j = 0; j < 2; j++) + { + corner[i][j] = 1; + } + } + } else + { + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + if (i != 1 || j != 1) + { + upBlockState[i][j] = world.getBlockState(pos.add(i - 1, 0, j - 1).down(this.densityDir)); + height[i][j] = this.getFluidHeightForRender(world, pos.add(i - 1, 0, j - 1), upBlockState[i][j]); + } + } + } + for (int i = 0; i < 2; i++) + { + for (int j = 0; j < 2; j++) + { + corner[i][j] = this.getFluidHeightAverage(height[i][j], height[i][j + 1], height[i + 1][j], height[i + 1][j + 1]); + } + } + // check for downflow above corners + boolean n = this.isFluid(upBlockState[0][1]); + boolean s = this.isFluid(upBlockState[2][1]); + boolean w = this.isFluid(upBlockState[1][0]); + boolean e = this.isFluid(upBlockState[1][2]); + boolean nw = this.isFluid(upBlockState[0][0]); + boolean ne = this.isFluid(upBlockState[0][2]); + boolean sw = this.isFluid(upBlockState[2][0]); + boolean se = this.isFluid(upBlockState[2][2]); + + if (nw || n || w) + { + corner[0][0] = 0.999F; + } + if (ne || n || e) + { + corner[0][1] = 0.999F; + } + if (sw || s || w) + { + corner[1][0] = 0.999F; + } + if (se || s || e) + { + corner[1][1] = 0.999F; + } + } + state = state.withProperty(LEVEL_CORNERS[0], corner[0][0]); + state = state.withProperty(LEVEL_CORNERS[1], corner[0][1]); + state = state.withProperty(LEVEL_CORNERS[2], corner[1][1]); + state = state.withProperty(LEVEL_CORNERS[3], corner[1][0]); + return state; + } + + public static double getFlowDirection(IBlockState state, IBlockAccess world, BlockPos pos) + { + if (!state.getMaterial().isLiquid()) + { + return -1000.0; + } + Vec3d vec = ((BlockFluidBase) state.getBlock()).getFlowVector(world, pos); + return vec.x == 0.0D && vec.z == 0.0D ? -1000.0D : Math.atan2(vec.z, vec.x) - Math.PI / 2D; + } + + private boolean isFluid(IBlockState state) + { + return state.getMaterial().isLiquid() || state.getBlock() instanceof IFluidBlock; + } + + @Override + public float getFluidHeightForRender(IBlockAccess world, BlockPos pos, IBlockState up) + { + IBlockState here = world.getBlockState(pos); + + if (here.getBlock() == this) + { + if (up.getMaterial().isLiquid() || up.getBlock() instanceof IFluidBlock) + { + return 1; + } + if (this.getMetaFromState(here) == this.getMaxRenderHeightMeta()) + { + return 0.875F; + } + } + if (here.getBlock() instanceof BlockLiquid) + { + return Math.min(1 - BlockLiquid.getLiquidHeightPercent(here.getValue(BlockLiquid.LEVEL)), 14f / 16); + } + return !here.getMaterial().isSolid() && up.getBlock() == this ? 1 : this.getQuantaPercentage(world, pos) * 0.875F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidPipe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidPipe.java new file mode 100644 index 00000000..2aa277bd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidPipe.java @@ -0,0 +1,512 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.tile.IColorable; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockFluidPipe extends BlockTransmitter implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum COLOR = PropertyEnum.create("color", EnumDyeColor.class); + + public static boolean ignoreDrop = false; + + private EnumPipeMode mode; + + private static final float MIN = 0.35F; + private static final float MAX = 0.65F; + protected static final AxisAlignedBB[] BOUNDING_BOXES = new AxisAlignedBB[] + { + + new AxisAlignedBB(MIN, MIN, MIN, MAX, MAX, MAX), // No connection + // 000000 + new AxisAlignedBB(MIN, MIN, MIN, MAX, MAX, 1.0D), // South 000001 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, MAX, MAX), // West 000010 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, MAX, 1.0D), // South West + // 000011 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, MAX, MAX), // North 000100 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, MAX, 1.0D), // North South + // 000101 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, MAX, MAX), // North West + // 000110 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, MAX, 1.0D), // North South + // West 000111 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, MAX, MAX), // East 001000 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, MAX, 1.0D), // East South + // 001001 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, MAX, MAX), // West East + // 001010 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, MAX, 1.0D), // South West + // East 001011 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, MAX, MAX), // North East + // 001100 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, MAX, 1.0D), // North South + // East 001101 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, MAX, MAX), // North East + // West 001110 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, MAX, 1.0D), // North South + // East West + // 001111 + + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, MAX, MAX), // Down 010000 + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, MAX, 1.0D), // Down South + // 010001 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, MAX, MAX), // Down West + // 010010 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, MAX, 1.0D), // Down South + // West 010011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, MAX, MAX), // Down North + // 010100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, MAX, 1.0D), // Down North + // South 010101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, MAX, MAX), // Down North + // West 010110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, MAX, 1.0D), // Down North + // South West + // 010111 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, MAX, MAX), // Down East + // 011000 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, MAX, 1.0D), // Down East + // South 011001 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, MAX, MAX), // Down West + // East 011010 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, MAX, 1.0D), // Down South + // West East + // 011011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, MAX, MAX), // Down North + // East 011100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, MAX, 1.0D), // Down North + // South East + // 011101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAX, MAX), // Down North + // East West + // 011110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, MAX, 1.0D), // Down North + // South East + // West 011111 + + new AxisAlignedBB(MIN, MIN, MIN, MAX, 1.0D, MAX), // Up 100000 + new AxisAlignedBB(MIN, MIN, MIN, MAX, 1.0D, 1.0D), // Up South + // 100001 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, 1.0D, MAX), // Up West 100010 + new AxisAlignedBB(0.0D, MIN, MIN, MAX, 1.0D, 1.0D), // Up South West + // 100011 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, 1.0D, MAX), // Up North + // 100100 + new AxisAlignedBB(MIN, MIN, 0.0D, MAX, 1.0D, 1.0D), // Up North + // South 100101 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, 1.0D, MAX), // Up North West + // 100110 + new AxisAlignedBB(0.0D, MIN, 0.0D, MAX, 1.0D, 1.0D), // Up North + // South West + // 100111 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, 1.0D, MAX), // Up East 101000 + new AxisAlignedBB(MIN, MIN, MIN, 1.0D, 1.0D, 1.0D), // Up East South + // 101001 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, 1.0D, MAX), // Up West East + // 101010 + new AxisAlignedBB(0.0D, MIN, MIN, 1.0D, 1.0D, 1.0D), // Up South + // West East + // 101011 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, 1.0D, MAX), // Up North East + // 101100 + new AxisAlignedBB(MIN, MIN, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // 101101 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, 1.0D, MAX), // Up North + // East West + // 101110 + new AxisAlignedBB(0.0D, MIN, 0.0D, 1.0D, 1.0D, 1.0D), // Up North + // South East + // West 101111 + + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, 1.0D, MAX), // Up Down 110000 + new AxisAlignedBB(MIN, 0.0D, MIN, MAX, 1.0D, 1.0D), // Up Down South + // 110001 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, 1.0D, MAX), // Up Down West + // 110010 + new AxisAlignedBB(0.0D, 0.0D, MIN, MAX, 1.0D, 1.0D), // Up Down + // South West + // 110011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, 1.0D, MAX), // Up Down North + // 110100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, MAX, 1.0D, 1.0D), // Up Down + // North South + // 110101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, 1.0D, MAX), // Up Down + // North West + // 110110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, MAX, 1.0D, 1.0D), // Up Down + // North South + // West 110111 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, 1.0D, MAX), // Up Down East + // 111000 + new AxisAlignedBB(MIN, 0.0D, MIN, 1.0D, 1.0D, 1.0D), // Up Down East + // South 111001 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, 1.0D, MAX), // Up Down West + // East 111010 + new AxisAlignedBB(0.0D, 0.0D, MIN, 1.0D, 1.0D, 1.0D), // Up Down + // South West + // East 111011 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, 1.0D, MAX), // Up Down + // North East + // 111100 + new AxisAlignedBB(MIN, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // Up Down + // North South + // East 111101 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, MAX), // Up Down + // North East + // West 111110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; // Up Down + // North + // South + // East West + // 111111 + + public BlockFluidPipe(String assetName, EnumPipeMode mode) + { + super(Material.GLASS); + this.setHardness(0.3F); + this.setSoundType(SoundType.GLASS); + this.setDefaultState(this.blockState.getBaseState().withProperty(COLOR, EnumDyeColor.WHITE)); + this.setTranslationKey(assetName); + this.mode = mode; + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + return BOUNDING_BOXES[getBoundingBoxIdx(state)]; + } + + private static int getBoundingBoxIdx(IBlockState state) + { + int i = 0; + + if (state.getValue(NORTH).booleanValue()) + { + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if (state.getValue(EAST).booleanValue()) + { + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if (state.getValue(SOUTH).booleanValue()) + { + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if (state.getValue(WEST).booleanValue()) + { + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + if (state.getValue(DOWN).booleanValue()) + { + i |= 1 << 4; + } + + if (state.getValue(UP).booleanValue()) + { + i |= 1 << 5; + } + + return i; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntityFluidPipe tile = (TileEntityFluidPipe) worldIn.getTileEntity(pos); + int pipeColor = state.getValue(COLOR).getDyeDamage(); + + if (!ignoreDrop && tile != null && pipeColor != 15) + { + spawnItem(worldIn, pos, pipeColor); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(GCBlocks.oxygenPipe); + // Never drop the 'pull' variety of pipe + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + worldIn.notifyLightSet(pos); + } + + @Override + public CreativeTabs getCreativeTab() + { + if (this.mode == EnumPipeMode.NORMAL) + { + return GalacticraftCore.galacticraftBlocksTab; + } + + return null; + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + TileEntityFluidPipe tile = (TileEntityFluidPipe) world.getTileEntity(pos); + tile.switchType(); + } + + return true; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + final TileEntityFluidPipe tileEntity = (TileEntityFluidPipe) worldIn.getTileEntity(pos); + + if (super.onBlockActivated(worldIn, pos, state, playerIn, hand, side, hitX, hitY, hitZ)) + { + return true; + } + + if (!worldIn.isRemote) + { + final ItemStack stack = playerIn.inventory.getCurrentItem(); + + if (!stack.isEmpty()) + { + if (stack.getItem() instanceof ItemDye) + { + final int dyeColor = playerIn.inventory.getCurrentItem().getItemDamage(); + + final byte colorBefore = tileEntity.getColor(state); + + tileEntity.onColorUpdate(); + + worldIn.setBlockState(pos, state.withProperty(COLOR, EnumDyeColor.byDyeDamage(dyeColor))); + + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(PacketSimple.EnumSimplePacket.C_RECOLOR_PIPE, GCCoreUtil.getDimensionID(worldIn), new Object[] + {pos}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(worldIn), pos.getX(), pos.getY(), pos.getZ(), 40.0)); + + if (colorBefore != (byte) dyeColor && !playerIn.capabilities.isCreativeMode) + { + playerIn.inventory.getCurrentItem().shrink(1); + } + + if (colorBefore != (byte) dyeColor && colorBefore != 15) + { + spawnItem(worldIn, pos, colorBefore); + } + + // GCCorePacketManager.sendPacketToClients(GCCorePacketManager.getPacket(GalacticraftCore.CHANNELENTITIES, + // tileEntity, tileEntity.getColor(), (byte) -1)); TODO Fix + // pipe color + + BlockPos tileVec = tileEntity.getPos(); + for (final EnumFacing dir : EnumFacing.VALUES) + { + final TileEntity tileAt = worldIn.getTileEntity(tileVec.offset(dir)); + + if (tileAt != null && tileAt instanceof IColorable) + { + ((IColorable) tileAt).onAdjacentColorChanged(dir); + } + } + + return true; + } + } + + } + + return false; + } + + private void spawnItem(World worldIn, BlockPos pos, int colorBefore) + { + final float f = 0.7F; + Random syncRandom = GCCoreUtil.getRandom(pos); + final double d0 = syncRandom.nextFloat() * f + (1.0F - f) * 0.5D; + final double d1 = syncRandom.nextFloat() * f + (1.0F - f) * 0.2D + 0.6D; + final double d2 = syncRandom.nextFloat() * f + (1.0F - f) * 0.5D; + final EntityItem entityitem = new EntityItem(worldIn, pos.getX() + d0, pos.getY() + d1, pos.getZ() + d2, new ItemStack(Items.DYE, 1, colorBefore)); + entityitem.setDefaultPickupDelay(); + worldIn.spawnEntity(entityitem); + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityFluidPipe(); + } + +// @SideOnly(Side.CLIENT) +// @Override +// public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) +// { +// return this.getCollisionBoundingBox(worldIn.getBlockState(pos), worldIn, pos); +// } + + @Override + public NetworkType getNetworkType(IBlockState state) + { + return NetworkType.FLUID; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, COLOR, UP, DOWN, NORTH, EAST, SOUTH, WEST); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(COLOR).getMetadata(); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.TRANSMITTER; + } + + public EnumPipeMode getMode() + { + return mode; + } + + public enum EnumPipeMode implements IStringSerializable + { + + NORMAL(0, "normal"), PULL(1, "pull"); + + private final int meta; + private final String name; + + EnumPipeMode(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return meta; + } + + public static EnumPipeMode byMetadata(int ordinal) + { + return EnumPipeMode.values()[ordinal]; + } + + @Override + public String getName() + { + return this.name; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidTank.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidTank.java new file mode 100644 index 00000000..333f0f6a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFluidTank.java @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidActionResult; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockFluidTank extends Block implements IShiftDescription, ISortableBlock, ITileEntityProvider +{ + + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool DOWN = PropertyBool.create("down"); + private static final AxisAlignedBB BOUNDS = new AxisAlignedBB(0.05F, 0.0F, 0.05F, 0.95F, 1.0F, 0.95F); + + public BlockFluidTank(String assetName) + { + super(Material.GLASS); + this.setHardness(3.0F); + this.setResistance(8.0F); + this.setSoundType(SoundType.GLASS); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return BOUNDS; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityFluidTank) + { + TileEntityFluidTank tank = (TileEntityFluidTank) tile; + tank.onBreak(); + } + super.breakBlock(worldIn, pos, state); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @SideOnly(Side.CLIENT) + @Override + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, UP, DOWN); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState stateAbove = worldIn.getBlockState(pos.up()); + IBlockState stateBelow = worldIn.getBlockState(pos.down()); + return state.withProperty(UP, stateAbove.getBlock() == this).withProperty(DOWN, stateBelow.getBlock() == this); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState(); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return 0; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityFluidTank(); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (super.onBlockActivated(worldIn, pos, state, playerIn, hand, side, hitX, hitY, hitZ)) + { + return true; + } + + if (hand == EnumHand.OFF_HAND) + { + return false; + } + + ItemStack current = playerIn.inventory.getCurrentItem(); + int slot = playerIn.inventory.currentItem; + + if (!current.isEmpty()) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityFluidTank) + { + TileEntityFluidTank tank = (TileEntityFluidTank) tile; + + FluidActionResult forgeResult = FluidUtil.interactWithFluidHandler(current, tank.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null), playerIn); + if (forgeResult.isSuccess()) + { + playerIn.inventory.setInventorySlotContents(slot, forgeResult.result); + if (playerIn.inventoryContainer != null) + { + playerIn.inventoryContainer.detectAndSendChanges(); + } + return true; + } + + return false; + } + } + + return false; + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntityFluidTank) + { + TileEntityFluidTank tank = (TileEntityFluidTank) tile; + return tank.fluidTank.getFluid() == null || tank.fluidTank.getFluid().amount == 0 ? 0 : tank.fluidTank.getFluid().getFluid().getLuminosity(tank.fluidTank.getFluid()); + } + + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFuelLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFuelLoader.java new file mode 100644 index 00000000..4875ed2b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockFuelLoader.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class BlockFuelLoader extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static IMachineSidesProperties MACHINESIDES_RENDERTYPE = IMachineSidesProperties.TWOFACES_HORIZ; + public static final PropertyEnum SIDES = MACHINESIDES_RENDERTYPE.asProperty; + + public BlockFuelLoader(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityFuelLoader(); + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + worldIn.setBlockState(pos, state.withProperty(FACING, EnumFacing.byHorizontalIndex(angle).getOpposite()), 3); + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + } + + @Override + public void onPlayerDestroy(World worldIn, BlockPos pos, IBlockState state) + { + super.onPlayerDestroy(worldIn, pos, state); + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, SIDES); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + + return IMachineSides.addPropertyForTile(state, tile, MACHINESIDES_RENDERTYPE, SIDES); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public boolean onSneakUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof IMachineSides) + { + ((IMachineSides) tile).nextSideConfiguration(tile); + return true; + } + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGlowstoneTorch.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGlowstoneTorch.java new file mode 100644 index 00000000..792b6b03 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGlowstoneTorch.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockGlowstoneTorch extends BlockTorchBase implements IShiftDescription, ISortableBlock +{ + + public BlockGlowstoneTorch(String assetName) + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); + this.setTickRandomly(true); + this.setTranslationKey(assetName); + this.setLightLevel(0.85F); + this.setSoundType(SoundType.WOOD); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : FACING.getAllowedValues()) + { + if (this.canPlaceAt(worldIn, pos, enumfacing)) + { + return true; + } + } + + return false; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.checkForDrop(worldIn, pos, state); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.checkForDrop(worldIn, pos, state)) + { + return; + } else + { + EnumFacing enumfacing = state.getValue(FACING); + EnumFacing.Axis enumfacing$axis = enumfacing.getAxis(); + EnumFacing enumfacing1 = enumfacing.getOpposite(); + boolean flag = false; + + if (enumfacing$axis.isHorizontal() && !worldIn.isSideSolid(pos.offset(enumfacing1), enumfacing, true)) + { + flag = true; + } else if (enumfacing$axis.isVertical() && !this.canPlaceOn(worldIn, pos.offset(enumfacing1))) + { + flag = true; + } + + if (flag) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + } + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + super.updateTick(worldIn, pos, state, rand); + + if (getMetaFromState(state) == 0) + { + this.onBlockAdded(worldIn, pos, state); + } + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {FACING}); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGrating.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGrating.java new file mode 100644 index 00000000..ec0a2769 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGrating.java @@ -0,0 +1,922 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.BlockDynamicLiquid; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.property.IExtendedBlockState; +import net.minecraftforge.common.property.IUnlistedProperty; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.registries.IForgeRegistry; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.JavaUtil; +import micdoodle8.mods.galacticraft.core.util.PropertyObject; + +public class BlockGrating extends Block implements ISortableBlock, IPartialSealableBlock +{ + + public static final PropertyObject BASE_STATE = new PropertyObject<>("held_state", IBlockState.class); + protected static final AxisAlignedBB BOUNDING_BOX = new AxisAlignedBB(0.0D, 0.875D, 0.0D, 1.0D, 1.0D, 1.0D); + public static IBlockAccess savedBlockAccess; + public static BlockPos savedPos; + + private int adjacentSourceBlocks; + private final IBlockState liquidEquivalentDynamic; + private final IBlockState liquidEquivalentStatic; + private boolean forgeFluid = false; + private BlockFluidBase forgeBlock = null; + public static List forgeBlocks = new ArrayList<>(); + public static int number = 3; // That's Plain, Water, Lava - any more will + // be Forge Fluids + private static Method gofd; + private static Field fieldQuantaPerBlock; + private ThreadLocal replaceWithFluidIntended = new ThreadLocal<>().withInitial(() -> false); + + static + { + try + { + gofd = BlockFluidClassic.class.getDeclaredMethod("getOptimalFlowDirections", World.class, BlockPos.class); + gofd.setAccessible(true); + } catch (Exception e) + { + e.printStackTrace(); + } + try + { + fieldQuantaPerBlock = BlockFluidBase.class.getDeclaredField("quantaPerBlock"); + fieldQuantaPerBlock.setAccessible(true); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + public BlockGrating(String assetName, Material material) + { + super(material); + if (this.material == Material.LAVA) + { + this.liquidEquivalentStatic = Blocks.LAVA.getDefaultState(); + this.liquidEquivalentDynamic = Blocks.FLOWING_LAVA.getDefaultState(); + this.setTickRandomly(true); + } else if (this.material == Material.WATER) + { + this.liquidEquivalentStatic = Blocks.WATER.getDefaultState(); + this.liquidEquivalentDynamic = Blocks.FLOWING_WATER.getDefaultState(); + this.setTickRandomly(true); + } else + { + this.liquidEquivalentStatic = null; + this.liquidEquivalentDynamic = null; + } + this.setHardness(0.5F); + this.blockResistance = 15F; + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + public BlockGrating(Block forge) + { + super(forge.getMaterial(forge.getDefaultState())); + this.forgeFluid = true; + this.forgeBlock = (BlockFluidBase) forge; + this.liquidEquivalentStatic = null; + this.liquidEquivalentDynamic = null; + this.setHardness(0.5F); + this.blockResistance = 15F; + this.setSoundType(SoundType.METAL); + this.setTranslationKey("grating" + number); + number++; + } + + public static void createForgeFluidVersion(Block b, IForgeRegistry blockRegistry) + { + if (b instanceof BlockFluidBase) + { + BlockGrating grating = new BlockGrating(b); + grating.setLightLevel(b.getLightValue(b.getDefaultState()) / 15F); + BlockGrating.forgeBlocks.add(grating); + GCBlocks.registerBlock(grating, null); + blockRegistry.register(grating); + } + } + + public static void createForgeFluidVersions(IForgeRegistry blockRegistry) + { + Iterator it = Block.REGISTRY.iterator(); + while (it.hasNext()) + { + Block test = it.next(); + if (test instanceof BlockFluidBase) + { + createForgeFluidVersion(test, blockRegistry); + } + } + } + + public static void remapForgeVariants() + { + for (Block b : forgeBlocks) + { + BlockGrating.remapVariant(b); + } + } + + @Override + public String getLocalizedName() + { + return I18n.translateToLocal("tile.grating.name"); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) + { + return true; + } + + @SideOnly(Side.CLIENT) + public static void remapVariant(Block grating) + { + ModelLoader.setCustomStateMapper(grating, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState ignore) + { + return new ModelResourceLocation("galacticraftcore:grating", "normal"); + } + }); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) + { + return BOUNDING_BOX; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + if (JavaUtil.instance.isCalledBy(BlockDynamicLiquid.class, BlockFluidBase.class)) + { + return Item.getItemFromBlock(Blocks.AIR); + } + Thread.dumpStack(); + return Item.getItemFromBlock(GCBlocks.grating); + } + + @Override + @Nullable + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Item.getItemFromBlock(GCBlocks.grating), 1, 0); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(GCBlocks.grating), 1, 0); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockGratingExtendedState(this, new IProperty[] + {BlockLiquid.LEVEL, BlockFluidBase.LEVEL}, new IUnlistedProperty[] + {BASE_STATE}); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BlockLiquid.LEVEL, Integer.valueOf(meta)).withProperty(BlockFluidBase.LEVEL, Integer.valueOf(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((Integer) state.getValue(BlockLiquid.LEVEL)).intValue(); + } + + @Override + public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) + { + savedBlockAccess = world; + savedPos = pos; + return ((IExtendedBlockState) state).withProperty(BASE_STATE, this.getLiquidBlock(state)); + } + + public IBlockState getLiquidBlock(IBlockState state) + { + if (this.forgeFluid && state.getPropertyKeys().contains(BlockFluidBase.LEVEL)) + { + int level = state.getValue(BlockFluidBase.LEVEL).intValue(); + return this.forgeBlock.getDefaultState().withProperty(BlockFluidBase.LEVEL, level); + } else if (this.material == Material.WATER || this.material == Material.LAVA) + { + int level = state.getValue(BlockLiquid.LEVEL).intValue(); + return this.liquidEquivalentStatic.withProperty(BlockLiquid.LEVEL, level); + } + + return null; + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) + { + IBlockState newBlock = world.getBlockState(pos); + if (newBlock.getBlock() instanceof BlockGrating) + { + return; + } + if (Blocks.AIR == newBlock.getBlock() && this != GCBlocks.grating) + { + world.setBlockState(pos, this.getLiquidBlock(state)); + this.dropBlockAsItem(world, pos, state, 0); + } + if (this.replaceWithFluidIntended.get()) + { + // Intended replacement with fluid block, called from + // this.removedByPlayer() + this.replaceWithFluidIntended.set(false); + return; + } + if (newBlock.getBlock() instanceof BlockFluidBase) + { + for (BlockGrating b : forgeBlocks) + { + if (newBlock.getBlock() == b.forgeBlock) + { + int level = newBlock.getValue(BlockFluidBase.LEVEL).intValue(); + IBlockState bs = b.getDefaultState().withProperty(BlockFluidBase.LEVEL, level).withProperty(BlockLiquid.LEVEL, level); + world.setBlockState(pos, bs); + return; + } + } + // If not a known Forge fluid block, drop grating item + Block.spawnAsEntity(world, pos, new ItemStack(GCBlocks.grating)); + return; + } + if (newBlock.getBlock() instanceof BlockLiquid) + { + if (newBlock.getMaterial() == Material.WATER) + { + int level = newBlock.getValue(BlockLiquid.LEVEL).intValue(); + IBlockState bs = GCBlocks.gratingWater.getDefaultState().withProperty(BlockLiquid.LEVEL, level); + world.setBlockState(pos, bs); + } else if (newBlock.getMaterial() == Material.LAVA) + { + int level = newBlock.getValue(BlockLiquid.LEVEL).intValue(); + IBlockState bs = GCBlocks.gratingLava.getDefaultState().withProperty(BlockLiquid.LEVEL, level); + world.setBlockState(pos, bs); + } + } + } + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + this.onBlockHarvested(world, pos, state, player); + if (this == GCBlocks.grating) + { + return world.setBlockState(pos, Blocks.AIR.getDefaultState(), world.isRemote ? 11 : 3); + } + this.replaceWithFluidIntended.set(true); + return world.setBlockState(pos, this.getLiquidBlock(state), world.isRemote ? 11 : 3); + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + IBlockState oldBlock = world.getBlockState(pos); + if (oldBlock.getBlock() instanceof BlockGrating) + { + return this.getStateFromMeta(meta); + } + if (oldBlock.getBlock() instanceof BlockFluidBase) + { + for (BlockGrating b : forgeBlocks) + { + if (oldBlock.getBlock() == b.forgeBlock) + { + int level = oldBlock.getValue(BlockFluidBase.LEVEL).intValue(); + return b.getDefaultState().withProperty(BlockFluidBase.LEVEL, level).withProperty(BlockLiquid.LEVEL, level); + } + } + } else if (oldBlock.getBlock() instanceof BlockLiquid) + { + if (oldBlock.getMaterial() == Material.WATER) + { + int level = oldBlock.getValue(BlockLiquid.LEVEL).intValue(); + return GCBlocks.gratingWater.getDefaultState().withProperty(BlockLiquid.LEVEL, level); + } else if (oldBlock.getMaterial() == Material.LAVA) + { + int level = oldBlock.getValue(BlockLiquid.LEVEL).intValue(); + return GCBlocks.gratingLava.getDefaultState().withProperty(BlockLiquid.LEVEL, level); + } + } + return this.getStateFromMeta(meta); + } + + @Override + public Material getMaterial(IBlockState state) + { + // Disable conversion to plain stone (lava above water in + // BlockDynamicLiquid.updateTick) - also allows water centre source + // block to form above this + // also allow endermen and others to teleport onto this + // (EntityLivingBase) and players to spawn on this (World) + int found = JavaUtil.instance.isCalledBySecond(BlockDynamicLiquid.class, EntityLivingBase.class, World.class); + if (found > 0) + { + if (found > 1 || JavaUtil.instance.isCalledByThird(WorldServer.class)) + { + return Material.IRON; + } + } + + return this.material; + } + + @Override + public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + { + return false; + } + + // Pistons cannot move this + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.BLOCK; + } + + @Override + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return false; + } + + @Override + public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid) + { + return true; + } + + // ---------------From BlockDynamicLiquid + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!this.material.isLiquid()) + return; + if (this.forgeFluid) + { + if (this.forgeBlock instanceof BlockFluidClassic) + { + this.updateTickForge(worldIn, pos, state, rand); + } + return; + } + + int i = ((Integer) state.getValue(BlockLiquid.LEVEL)).intValue(); + int j = 1; + + if (this.material == Material.LAVA && !worldIn.provider.doesWaterVaporize()) + { + j = 2; + } + + int k = this.tickRate(worldIn); + + if (i > 0) + { + int l = -100; + this.adjacentSourceBlocks = 0; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + l = this.checkAdjacentBlock(worldIn, pos.offset(enumfacing), l); + } + + int i1 = l + j; + + if (i1 >= 8 || l < 0) + { + i1 = -1; + } + + int j1 = this.getDepth(worldIn.getBlockState(pos.up())); + + if (j1 >= 0) + { + if (j1 >= 8) + { + i1 = j1; + } else + { + i1 = j1 + 8; + } + } + + if (this.adjacentSourceBlocks >= 2 && net.minecraftforge.event.ForgeEventFactory.canCreateFluidSource(worldIn, pos, state, this.material == Material.WATER)) + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + + if (iblockstate.getMaterial().isSolid()) + { + i1 = 0; + } else if (iblockstate.getMaterial() == this.material && ((Integer) iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0) + { + i1 = 0; + } + } + + if (this.material == Material.LAVA && i < 8 && i1 < 8 && i1 > i && rand.nextInt(4) != 0) + { + k *= 4; + } + + if (i1 == i) + { +// this.placeStaticBlock(worldIn, pos, state); + } else + { + i = i1; + + if (i1 < 0) + { + worldIn.setBlockState(pos, GCBlocks.grating.getDefaultState(), 3); + } else + { + state = state.withProperty(BlockLiquid.LEVEL, Integer.valueOf(i1)); + worldIn.setBlockState(pos, state, 2); + worldIn.scheduleUpdate(pos, this, k); + worldIn.notifyNeighborsOfStateChange(pos, this, false); + } + } + } else + { +// this.placeStaticBlock(worldIn, pos, state); + } + + BlockPos down = pos.down(); + IBlockState iblockstate1 = worldIn.getBlockState(down); + + if (this.canFlowInto(worldIn, down, iblockstate1)) + { + if (this.material == Material.LAVA && iblockstate1.getMaterial() == Material.WATER && !(iblockstate1.getBlock() instanceof BlockGrating)) + { + worldIn.setBlockState(down, Blocks.STONE.getDefaultState()); + return; + } + + if (i >= 8) + { + this.tryFlowInto(worldIn, down, iblockstate1, i); + } else + { + this.tryFlowInto(worldIn, down, iblockstate1, i + 8); + } + } else if (i >= 0 && (i == 0 || this.isBlocked(worldIn, down, iblockstate1))) + { + Set set = this.getPossibleFlowDirections(worldIn, pos); + int k1 = i + j; + + if (i >= 8) + { + k1 = 1; + } + + if (k1 >= 8) + { + return; + } + + for (EnumFacing enumfacing1 : set) + { + this.tryFlowInto(worldIn, pos.offset(enumfacing1), worldIn.getBlockState(pos.offset(enumfacing1)), k1); + } + } + } + + private void tryFlowInto(World worldIn, BlockPos pos, IBlockState state, int level) + { + if (this.canFlowInto(worldIn, pos, state)) + { + if (state.getMaterial() != Material.AIR && !(state.getBlock() instanceof BlockGrating)) + { + if (this.material == Material.LAVA) + { + } else + { + if (state.getBlock() != Blocks.SNOW_LAYER) + state.getBlock().dropBlockAsItem(worldIn, pos, state, 0); + } + } + + worldIn.setBlockState(pos, this.liquidEquivalentDynamic.withProperty(BlockLiquid.LEVEL, Integer.valueOf(level)), 3); + } + } + + private int getSlopeDistance(World worldIn, BlockPos pos, int distance, EnumFacing calculateFlowCost) + { + int i = 1000; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (enumfacing != calculateFlowCost) + { + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (!this.isBlocked(worldIn, blockpos, iblockstate) && (iblockstate.getMaterial() != this.material || ((Integer) iblockstate.getValue(BlockLiquid.LEVEL)).intValue() > 0)) + { + if (!this.isBlocked(worldIn, blockpos.down(), iblockstate)) + { + return distance; + } + + if (distance < this.getSlopeFindDistance(worldIn)) + { + int j = this.getSlopeDistance(worldIn, blockpos, distance + 1, enumfacing.getOpposite()); + + if (j < i) + { + i = j; + } + } + } + } + } + + return i; + } + + private int getSlopeFindDistance(World worldIn) + { + return this.material == Material.LAVA && !worldIn.provider.doesWaterVaporize() ? 2 : 4; + } + + /** + * This method returns a Set of EnumFacing + */ + private Set getPossibleFlowDirections(World worldIn, BlockPos pos) + { + int i = 1000; + Set set = EnumSet.noneOf(EnumFacing.class); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (!this.isBlocked(worldIn, blockpos, iblockstate) && (iblockstate.getMaterial() != this.material || ((Integer) iblockstate.getValue(BlockLiquid.LEVEL)).intValue() > 0)) + { + int j; + + if (this.isBlocked(worldIn, blockpos.down(), worldIn.getBlockState(blockpos.down()))) + { + j = this.getSlopeDistance(worldIn, blockpos, 1, enumfacing.getOpposite()); + } else + { + j = 0; + } + + if (j < i) + { + set.clear(); + } + + if (j <= i) + { + set.add(enumfacing); + i = j; + } + } + } + + return set; + } + + private boolean isBlocked(World worldIn, BlockPos pos, IBlockState state) + { + IBlockState bs = worldIn.getBlockState(pos); + Block block = bs.getBlock(); + return !(block instanceof BlockDoor) && block != Blocks.STANDING_SIGN && block != Blocks.LADDER && block != Blocks.REEDS + ? (block.getMaterial(bs) != Material.PORTAL && block.getMaterial(bs) != Material.STRUCTURE_VOID ? block.getMaterial(bs).blocksMovement() : true) : true; + } + + protected int checkAdjacentBlock(World worldIn, BlockPos pos, int currentMinLevel) + { + int i = this.getDepth(worldIn.getBlockState(pos)); + + if (i < 0) + { + return currentMinLevel; + } else + { + if (i == 0) + { + ++this.adjacentSourceBlocks; + } + + if (i >= 8) + { + i = 0; + } + + return currentMinLevel >= 0 && i >= currentMinLevel ? currentMinLevel : i; + } + } + + private boolean canFlowInto(World worldIn, BlockPos pos, IBlockState state) + { + Material material = state.getMaterial(); + return material != this.material && material != Material.LAVA && !this.isBlocked(worldIn, pos, state); + } + + // ---------------From BlockLiquid etc + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (this.material.isLiquid()) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (this.material.isLiquid()) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + } + + @Override + public int tickRate(World worldIn) + { + if (this.forgeFluid) + { + return this.forgeBlock.tickRate(worldIn); + } + return this.material == Material.WATER ? 5 : (this.material == Material.LAVA ? (worldIn.provider.isNether() ? 10 : 30) : 0); + } + + protected int getDepth(IBlockState p_189542_1_) + { + return p_189542_1_.getMaterial() == this.material ? ((Integer) p_189542_1_.getValue(BlockLiquid.LEVEL)).intValue() : -1; + } + + // ------------------From BlockFluidBase + + public void updateTickForge(World world, BlockPos pos, IBlockState state, Random rand) + { +// if (!isSourceBlock(world, pos) && ForgeEventFactory.canCreateFluidSource(world, pos, state, false)) +// { +// int adjacentSourceBlocks = +// (isSourceBlock(world, pos.north()) ? 1 : 0) + +// (isSourceBlock(world, pos.south()) ? 1 : 0) + +// (isSourceBlock(world, pos.east()) ? 1 : 0) + +// (isSourceBlock(world, pos.west()) ? 1 : 0); +// if (adjacentSourceBlocks >= 2 && (world.getBlockState(pos.down(1)).getMaterial().isSolid() || isSourceBlock(world, pos.down(1)))) +// world.setBlockState(pos, state.withProperty(BlockFluidBase.LEVEL, 0)); +// } + + int quantaPerBlock = 8; + try + { + quantaPerBlock = fieldQuantaPerBlock.getInt(this.forgeBlock); + } catch (Exception e) + { + } + int tickRate = this.forgeBlock.tickRate(world); + int quantaRemaining = quantaPerBlock - state.getValue(BlockFluidBase.LEVEL); + int expQuanta = -101; + + // check adjacent block levels if non-source + if (quantaRemaining < quantaPerBlock) + { + if (testSame(world, pos.add(0, 1, 0)) || testSame(world, pos.add(-1, 1, 0)) || testSame(world, pos.add(1, 1, 0)) || testSame(world, pos.add(0, 1, -1)) || testSame(world, pos.add(0, 1, 1))) + { + expQuanta = quantaPerBlock - 1; + } else + { + int maxQuanta = -100; + maxQuanta = getLargerQuanta(world, pos.add(-1, 0, 0), maxQuanta); + maxQuanta = getLargerQuanta(world, pos.add(1, 0, 0), maxQuanta); + maxQuanta = getLargerQuanta(world, pos.add(0, 0, -1), maxQuanta); + maxQuanta = getLargerQuanta(world, pos.add(0, 0, 1), maxQuanta); + + expQuanta = maxQuanta - 1; + } + + // decay calculation + if (expQuanta != quantaRemaining) + { + quantaRemaining = expQuanta; + + if (expQuanta <= 0) + { + world.setBlockState(pos, GCBlocks.grating.getDefaultState(), 3); + } else + { + world.setBlockState(pos, state.withProperty(BlockFluidBase.LEVEL, quantaPerBlock - expQuanta), 2); + world.scheduleUpdate(pos, this, tickRate); + world.notifyNeighborsOfStateChange(pos, this.forgeBlock, false); + } + } + } + // This is a "source" block, set meta to zero, and send a server only + // update + else if (quantaRemaining >= quantaPerBlock) + { + world.setBlockState(pos, this.getDefaultState(), 2); + } + + // Flow vertically if possible + if (this.forgeBlock.canDisplace(world, pos.down(1))) + { + flowIntoBlock(world, pos.down(1), 1); + return; + } + + // Flow outward if possible + int flowMeta = quantaPerBlock - quantaRemaining + 1; + if (flowMeta >= quantaPerBlock) + { + return; + } + + if (isSourceBlock(world, pos) || !((BlockFluidClassic) this.forgeBlock).isFlowingVertically(world, pos)) + { + Block test = world.getBlockState(pos.up(1)).getBlock(); + if (test == this || test == this.forgeBlock) + { + flowMeta = 1; + } + + boolean flowTo[]; + try + { + flowTo = (boolean[]) gofd.invoke(this.forgeBlock, world, pos); + + if (flowTo[0]) + flowIntoBlock(world, pos.add(-1, 0, 0), flowMeta); + if (flowTo[1]) + flowIntoBlock(world, pos.add(1, 0, 0), flowMeta); + if (flowTo[2]) + flowIntoBlock(world, pos.add(0, 0, -1), flowMeta); + if (flowTo[3]) + flowIntoBlock(world, pos.add(0, 0, 1), flowMeta); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + private boolean testSame(World world, BlockPos pos) + { + Block test = world.getBlockState(pos).getBlock(); + return test == this || test == this.forgeBlock; + } + + private boolean isSourceBlock(IBlockAccess world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + return state.getBlock() instanceof BlockFluidBase && state.getValue(BlockFluidBase.LEVEL) == 0; + } + + protected int getLargerQuanta(IBlockAccess world, BlockPos pos, int compare) + { + int quantaRemaining = this.forgeBlock.getQuantaValue(world, pos); + if (quantaRemaining <= 0) + { + return compare; + } + return quantaRemaining >= compare ? quantaRemaining : compare; + } + + protected void flowIntoBlock(World world, BlockPos pos, int meta) + { + if (meta < 0) + return; + if (this.forgeBlock.displaceIfPossible(world, pos)) + { + world.setBlockState(pos, this.forgeBlock.getBlockState().getBaseState().withProperty(BlockFluidBase.LEVEL, meta), 3); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGratingExtendedState.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGratingExtendedState.java new file mode 100644 index 00000000..c5286468 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockGratingExtendedState.java @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.IBlockState; + +import net.minecraftforge.common.property.ExtendedBlockState; +import net.minecraftforge.common.property.IExtendedBlockState; +import net.minecraftforge.common.property.IUnlistedProperty; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.BlockFluidClassic; + +import micdoodle8.mods.galacticraft.core.util.JavaUtil; + +import com.google.common.base.Predicates; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Iterables; + +public class BlockGratingExtendedState extends ExtendedBlockState +{ + + public BlockGratingExtendedState(Block blockIn, IProperty[] properties, IUnlistedProperty[] unlistedProperties) + { + super(blockIn, properties, unlistedProperties); + } + + @Override + @Nonnull + protected StateImplementation createState(@Nonnull Block block, @Nonnull ImmutableMap, Comparable> properties, @Nullable ImmutableMap, Optional> unlistedProperties) + { + if (unlistedProperties == null || unlistedProperties.isEmpty()) + return super.createState(block, properties, unlistedProperties); + return new ExtendedStateImplementation(block, properties, unlistedProperties, null, null); + } + + protected static class ExtendedStateImplementation extends StateImplementation implements IExtendedBlockState + { + + private final ImmutableMap, Optional> unlistedProperties; + private IBlockState cleanState; + private final Block blockBase; + + protected ExtendedStateImplementation(Block block, ImmutableMap, Comparable> properties, ImmutableMap, Optional> unlistedProperties, @Nullable ImmutableTable, Comparable, IBlockState> table, IBlockState clean) + { + super(block, properties, table); + this.unlistedProperties = unlistedProperties; + this.cleanState = clean == null ? this : clean; + this.blockBase = block; + } + + /** + * Get a version of this BlockState with the given Property now set to + * the given value + */ + @Override + @Nonnull + public , V extends T> IBlockState withProperty(@Nonnull IProperty property, @Nonnull V value) + { + IBlockState clean = super.withProperty(property, value); + if (clean == this.cleanState) + { + return this; + } + + if (Iterables.all(unlistedProperties.values(), Predicates.>equalTo(Optional.empty()))) + { // no + // dynamic + // properties + // present, + // looking + // up + // in + // the + // normal + // table + return clean; + } + + return new ExtendedStateImplementation(getBlock(), clean.getProperties(), unlistedProperties, ((StateImplementation) clean).getPropertyValueTable(), this.cleanState); + } + + @Override + public IExtendedBlockState withProperty(IUnlistedProperty property, V value) + { + if (!this.unlistedProperties.containsKey(property)) + { + throw new IllegalArgumentException("Cannot set unlisted property " + property + " as it does not exist in " + getBlock().getBlockState()); + } + if (!property.isValid(value)) + { + throw new IllegalArgumentException( + "Cannot set unlisted property " + property + " to " + value + " on block " + Block.REGISTRY.getNameForObject(getBlock()) + ", it is not an allowed value"); + } + Map, Optional> newMap = new HashMap, Optional>(unlistedProperties); + newMap.put(property, Optional.ofNullable(value)); + if (Iterables.all(newMap.values(), Predicates.>equalTo(Optional.empty()))) + { // no + // dynamic + // properties, + // lookup + // normal + // state + return (IExtendedBlockState) cleanState; + } + return new ExtendedStateImplementation(getBlock(), getProperties(), ImmutableMap.copyOf(newMap), propertyValueTable, this.cleanState); + } + + @Override + public Collection> getUnlistedNames() + { + return Collections.unmodifiableCollection(unlistedProperties.keySet()); + } + + @Override + public V getValue(IUnlistedProperty property) + { + if (!this.unlistedProperties.containsKey(property)) + { + throw new IllegalArgumentException("Cannot get unlisted property " + property + " as it does not exist in " + getBlock().getBlockState()); + } + return property.getType().cast(this.unlistedProperties.get(property).orElse(null)); + } + + @Override + public ImmutableMap, Optional> getUnlistedProperties() + { + return unlistedProperties; + } + + @Override + public IBlockState getClean() + { + return cleanState; + } + + @Override + public Block getBlock() + { + if (JavaUtil.instance.isCalledBy(BlockFluidClassic.class, BlockFluidBase.class, BlockFluidGC.class)) + { + IBlockState bs = ((BlockGrating) blockBase).getLiquidBlock(this); + if (bs != null) + return bs.getBlock(); + } + return this.blockBase; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPad.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPad.java new file mode 100644 index 00000000..5d73fe5b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPad.java @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFuelerSingle; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPadSingle; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockLandingPad extends BlockAdvancedTile implements IPartialSealableBlock, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum PAD_TYPE = PropertyEnum.create("type", EnumLandingPadType.class); + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0, 0.0, 0.0, 1.0, 0.1875, 1.0); + + public enum EnumLandingPadType implements IStringSerializable + { + + ROCKET_PAD(0, "rocket"), BUGGY_PAD(1, "buggy"); + + private final int meta; + private final String name; + + EnumLandingPadType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumLandingPadType[] values = values(); + + public static EnumLandingPadType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockLandingPad(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setResistance(10.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int i = 0; i < 2; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + + private boolean checkAxis(World worldIn, BlockPos pos, Block block, EnumFacing facing) + { + int sameCount = 0; + for (int i = 1; i <= 3; i++) + { + if (worldIn.getBlockState(pos.offset(facing, i)).getBlock() == block) + { + sameCount++; + } + } + + return sameCount < 3; + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + final Block id = GCBlocks.landingPad; + + if (!checkAxis(worldIn, pos, id, EnumFacing.EAST) || !checkAxis(worldIn, pos, id, EnumFacing.WEST) || !checkAxis(worldIn, pos, id, EnumFacing.NORTH) + || !checkAxis(worldIn, pos, id, EnumFacing.SOUTH)) + { + return false; + } + + if (worldIn.getBlockState(pos.offset(EnumFacing.DOWN)).getBlock() == GCBlocks.landingPad && side == EnumFacing.UP) + { + return false; + } else + { + return this.canPlaceBlockAt(worldIn, pos); + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + switch (meta) + { + case 0: + return new TileEntityLandingPadSingle(); + case 1: + return new TileEntityBuggyFuelerSingle(); + default: + return null; + } + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return direction == EnumFacing.UP; + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public String getShiftDescription(int meta) + { + if (meta == 0) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + return GCCoreUtil.translate("tile.buggy_pad.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(PAD_TYPE, EnumLandingPadType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumLandingPadType) state.getValue(PAD_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, PAD_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.PAD; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPadFull.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPadFull.java new file mode 100644 index 00000000..2c3c2b38 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockLandingPadFull.java @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFueler; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; + +public class BlockLandingPadFull extends BlockAdvancedTile implements IPartialSealableBlock +{ + + public static final PropertyEnum PAD_TYPE = PropertyEnum.create("type", EnumLandingPadFullType.class); + private final AxisAlignedBB AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.1875D, 1.0D); + + public enum EnumLandingPadFullType implements IStringSerializable + { + + ROCKET_PAD(0, "rocket"), BUGGY_PAD(1, "buggy"); + + private final int meta; + private final String name; + + EnumLandingPadFullType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumLandingPadFullType[] values = values(); + + public static EnumLandingPadFullType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockLandingPadFull(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setResistance(10.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); +// this.maxY = 0.25F; + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + + @Override + public int quantityDropped(Random par1Random) + { + return 9; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + if (var9 instanceof IMultiBlock) + { + ((IMultiBlock) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(GCBlocks.landingPad); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { +// switch (getMetaFromState(blockState)) +// { +// case 0: +// return new AxisAlignedBB(pos.getX() + this.minX, pos.getY() + this.minY, pos.getZ() + this.minZ, +// pos.getX() + this.maxX, pos.getY() + this.maxY, pos.getZ() + this.maxZ); TODO +// case 2: +// return new AxisAlignedBB(pos.getX() + this.minX, pos.getY() + this.minY, pos.getZ() + this.minZ, +// pos.getX() + this.maxX, pos.getY() + this.maxY, pos.getZ() + this.maxZ); +// default: +// } + return this.AABB; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (int x2 = -1; x2 < 2; ++x2) + { + for (int z2 = -1; z2 < 2; ++z2) + { + if (!super.canPlaceBlockAt(worldIn, new BlockPos(pos.getX() + x2, pos.getY(), pos.getZ() + z2))) + { + return false; + } + } + + } + + return true; + } + + @Override + public boolean hasTileEntity(IBlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + switch (getMetaFromState(state)) + { + case 0: + return new TileEntityLandingPad(); + case 1: + return new TileEntityBuggyFueler(); + // case 2: + // return new GCCoreTileEntityCargoPad(); + default: + return null; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + worldIn.notifyBlockUpdate(pos, state, state, 3); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @SideOnly(Side.CLIENT) + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return direction == EnumFacing.UP; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + int metadata = getMetaFromState(state); + return new ItemStack(Item.getItemFromBlock(GCBlocks.landingPad), 1, metadata); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(PAD_TYPE, EnumLandingPadFullType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumLandingPadFullType) state.getValue(PAD_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, PAD_TYPE); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine.java new file mode 100644 index 00000000..cea532c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; + +public class BlockMachine extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineType.class); + + public enum EnumMachineType implements EnumMachineBase, IStringSerializable + { + + COAL_GENERATOR(0, "coal_generator", TileEntityCoalGenerator::new, "tile.coal_generator.description", "tile.machine.0"), + COMPRESSOR(12, "ingot_compressor", TileEntityIngotCompressor::new, "tile.compressor.description", "tile.machine.3"); // 3 + // for + // backwards + // compatibility + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineType[] values = values(); + + @Override + public EnumMachineType fromMetadata(int meta) + { + switch (meta / 4) + { + case 3: + return COMPRESSOR; + default: + return COAL_GENERATOR; + } + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachine(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineType.values; + this.typeBase = EnumMachineType.values[0]; + } + + @SideOnly(Side.CLIENT) + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityCoalGenerator) + { + TileEntityCoalGenerator tileEntity = (TileEntityCoalGenerator) tile; + if (tileEntity.heatGJperTick > 0) + { + float particlePosX = pos.getX() + 0.5F; + float particlePosY = pos.getY() + 0.0F + rand.nextFloat() * 6.0F / 16.0F; + float particlePosZ = pos.getZ() + 0.5F; + float particleSize0 = 0.52F; + float particleSize1 = rand.nextFloat() * 0.6F - 0.3F; + + switch (stateIn.getValue(FACING)) + { + case NORTH: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, particlePosX + particleSize1, particlePosY, particlePosZ - particleSize0, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, particlePosX + particleSize1, particlePosY, particlePosZ - particleSize0, 0.0D, 0.0D, 0.0D); + break; + case EAST: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, particlePosX + particleSize0, particlePosY, particlePosZ + particleSize1, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, particlePosX + particleSize0, particlePosY, particlePosZ + particleSize1, 0.0D, 0.0D, 0.0D); + break; + case SOUTH: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, particlePosX + particleSize1, particlePosY, particlePosZ + particleSize0, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, particlePosX + particleSize1, particlePosY, particlePosZ + particleSize0, 0.0D, 0.0D, 0.0D); + break; + case WEST: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, particlePosX - particleSize0, particlePosY, particlePosZ + particleSize1, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, particlePosX - particleSize0, particlePosY, particlePosZ + particleSize1, 0.0D, 0.0D, 0.0D); + break; + } + } + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineType type = (EnumMachineType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine2.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine2.java new file mode 100644 index 00000000..d74d0764 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine2.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; + +public class BlockMachine2 extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineExtendedType.class); + public static IMachineSidesProperties MACHINESIDES_RENDERTYPE = IMachineSidesProperties.TWOFACES_HORIZ; + public static final PropertyEnum SIDES = MACHINESIDES_RENDERTYPE.asProperty; + + public enum EnumMachineExtendedType implements EnumMachineBase, IStringSerializable + { + + ELECTRIC_COMPRESSOR(0, "electric_compressor", TileEntityElectricIngotCompressor::new, "tile.compressor_electric.description", "tile.machine2.4"), + CIRCUIT_FABRICATOR(4, "circuit_fabricator", TileEntityCircuitFabricator::new, "tile.circuit_fabricator.description", "tile.machine2.5"), + OXYGEN_STORAGE(8, "oxygen_storage", TileEntityOxygenStorageModule::new, "tile.oxygen_storage_module.description", "tile.machine2.6"), + DECONSTRUCTOR(12, "deconstructor", TileEntityDeconstructor::new, "tile.deconstructor.description", "tile.machine2.10"); + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineExtendedType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineExtendedType[] values = values(); + + @Override + public EnumMachineExtendedType fromMetadata(int meta) + { + return values[(meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachine2(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineExtendedType.values; + this.typeBase = EnumMachineExtendedType.values[0]; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineExtendedType type = (EnumMachineExtendedType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineExtendedType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE, SIDES); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + return IMachineSides.addPropertyForTile(state, tile, MACHINESIDES_RENDERTYPE, SIDES); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine3.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine3.java new file mode 100644 index 00000000..7ef1c1a5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine3.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; + +/** + * A block for several types of UNPOWERED Galacticraft machine with a base + * building purpose - e.g. Painter + * + * Note: does not implement IMachineSides + * + */ +public class BlockMachine3 extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineBuildingType.class); + + public enum EnumMachineBuildingType implements EnumMachineBase, IStringSerializable + { + + PAINTER(0, "painter", TileEntityPainter::new, "tile.painter.description", "tile.machine3.9"); + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineBuildingType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineBuildingType[] values = values(); + + @Override + public EnumMachineBuildingType fromMetadata(int meta) + { + return values[(meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachine3(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineBuildingType.values; + this.typeBase = EnumMachineBuildingType.values[0]; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineBuildingType type = (EnumMachineBuildingType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineBuildingType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine4.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine4.java new file mode 100644 index 00000000..29896d79 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachine4.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; + +/** + * A block for advanced types of POWERED Galacticraft machine with a base + * building purpose - e.g. Advanced Compressor + * + * Note: this DOES implement IMachineSides, in comparison with BlockMachine3 + * which does not + * + */ +public class BlockMachine4 extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineAdvancedType.class); + public static IMachineSidesProperties MACHINESIDES_RENDERTYPE = IMachineSidesProperties.TWOFACES_HORIZ; + public static final PropertyEnum SIDES = MACHINESIDES_RENDERTYPE.asProperty; + + public enum EnumMachineAdvancedType implements EnumMachineBase, IStringSerializable + { + + ADVANCED_COMPRESSOR(0, "advanced_compressor", () -> new TileEntityElectricIngotCompressor(true), "tile.compressor_advanced.description", "tile.machine4.11"); + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineAdvancedType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineAdvancedType[] values = values(); + + @Override + public EnumMachineAdvancedType fromMetadata(int meta) + { + return values[0]; // (meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachine4(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineAdvancedType.values; + this.typeBase = EnumMachineAdvancedType.values[0]; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineAdvancedType type = (EnumMachineAdvancedType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineAdvancedType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE, SIDES); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + return IMachineSides.addPropertyForTile(state, tile, MACHINESIDES_RENDERTYPE, SIDES); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineBase.java new file mode 100644 index 00000000..9c332fee --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineBase.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class BlockMachineBase extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + public static final int METADATA_MASK = 0x0c; // Used to select the machine + // type from metadata + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + protected EnumMachineBase[] types; + protected EnumMachineBase typeBase; + + public BlockMachineBase(String assetName) + { + super(GCBlocks.machine); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.initialiseTypes(); + } + + protected abstract void initialiseTypes(); + + @Override + @SideOnly(Side.CLIENT) + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int metadata = getMetaFromState(state); + + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + + worldIn.setBlockState(pos, this.getStateFromMeta((metadata & BlockMachineBase.METADATA_MASK) + change), 3); + } + + /** + * Called when the block is right clicked by the player + */ + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + + @Override + public boolean onSneakUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof IMachineSides) + { + ((IMachineSides) tile).nextSideConfiguration(tile); + return true; + } + return false; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + int meta = getMetaFromState(state); + EnumMachineBase type = typeBase.fromMetadata(meta); + return type.tileConstructor(); + } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state) & BlockMachineBase.METADATA_MASK; + } + + public String getTranslationKey(int meta) + { + EnumMachineBase type = typeBase.fromMetadata(meta); + return type.getTranslationKey(); + } + + @Override + public String getShiftDescription(int meta) + { + EnumMachineBase type = typeBase.fromMetadata(meta); + return GCCoreUtil.translate(type.getShiftDescriptionKey()); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + public static EnumFacing byIndex(IBlockState state) + { + if (state.getBlock() instanceof BlockMachineBase) + { + return (state.getValue(BlockMachineBase.FACING)); + } + return EnumFacing.NORTH; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (EnumMachineBase type : types) + list.add(new ItemStack(this, 1, type.getMetadata())); + } + + public interface EnumMachineBase & IStringSerializable> + { + + int getMetadata(); + + EnumMachineBase fromMetadata(int meta); + + String getShiftDescriptionKey(); + + String getTranslationKey(); + + TileEntity tileConstructor(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineTiered.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineTiered.java new file mode 100644 index 00000000..beef04c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMachineTiered.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; + +public class BlockMachineTiered extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumTieredMachineType.class); + public static IMachineSidesProperties MACHINESIDES_RENDERTYPE = IMachineSidesProperties.TWOFACES_HORIZ; + public static final PropertyEnum SIDES = MACHINESIDES_RENDERTYPE.asProperty; + public static final PropertyInteger FILL_VALUE = PropertyInteger.create("fill_value", 0, 33); + + public enum EnumTieredMachineType implements EnumMachineBase, IStringSerializable + { + + STORAGE_MODULE(0, "energy_storage", TileEntityEnergyStorageModule::new, "tile.energy_storage_module_tier1.description", "tile.machine.1"), + ELECTRIC_FURNACE(4, "electric_furnace", TileEntityElectricFurnace::new, "tile.electric_furnace_tier1.description", "tile.machine.2"), + STORAGE_CLUSTER(8, "cluster_storage", TileEntityEnergyStorageModule::new, "tile.energy_storage_module_tier2.description", "tile.machine.8"), + ARC_FURNACE(12, "arc_furnace", TileEntityElectricFurnace::new, "tile.electric_furnace_tier2.description", "tile.machine.7"); + + private final int meta; + private final String name; + private TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumTieredMachineType(int meta, String name, TileConstructor tc, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tc; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumTieredMachineType[] values = values(); + + @Override + public EnumMachineBase fromMetadata(int meta) + { + return values[(meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + int tier = this.meta / 8 + 1; + return this.tile.create(tier); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(int tier); // Note this variant picks up the new + // TileEntityStorageModule(int tier) + // constructor, and forces the ::new + // above to that + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachineTiered(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumTieredMachineType.values; + this.typeBase = EnumTieredMachineType.values[0]; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + TileEntity tile = super.createTileEntity(world, state); + tile.setWorld(world); + return tile; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumTieredMachineType type = (EnumTieredMachineType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing) state.getValue(FACING)).getHorizontalIndex() + ((EnumTieredMachineType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE, FILL_VALUE, SIDES); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + state = IMachineSides.addPropertyForTile(state, tile, MACHINESIDES_RENDERTYPE, SIDES); + + if (!(tile instanceof TileEntityEnergyStorageModule)) + { + return state.withProperty(FILL_VALUE, 0); + } + int energyLevel = ((TileEntityEnergyStorageModule) tile).scaledEnergyLevel; + if (state.getValue(TYPE) == EnumTieredMachineType.STORAGE_CLUSTER) + energyLevel += 17; + return state.withProperty(FILL_VALUE, energyLevel); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMulti.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMulti.java new file mode 100644 index 00000000..ce423a10 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockMulti.java @@ -0,0 +1,510 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.ParticleManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; + +public class BlockMulti extends BlockAdvanced implements IPartialSealableBlock, ITileEntityProvider +{ + + public static final PropertyEnum MULTI_TYPE = PropertyEnum.create("type", EnumBlockMultiType.class); + public static final PropertyInteger RENDER_TYPE = PropertyInteger.create("rendertype", 0, 7); + + protected static final AxisAlignedBB AABB_PAD = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 0.1875F, 1.0F); + protected static final AxisAlignedBB AABB_SOLAR = new AxisAlignedBB(0.0F, 0.2F, 0.0F, 1.0F, 0.8F, 1.0F); + protected static final AxisAlignedBB AABB_SOLAR_POLE = new AxisAlignedBB(0.3F, 0.0F, 0.3F, 0.7F, 1.0F, 0.7F); + protected static final AxisAlignedBB AABB_TURRET = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + + public enum EnumBlockMultiType implements IStringSerializable + { + + SOLAR_PANEL_0(0, "solar"), + SPACE_STATION_BASE(1, "ss_base"), + ROCKET_PAD(2, "rocket_pad"), + NASA_WORKBENCH(3, "nasa_workbench"), + SOLAR_PANEL_1(4, "solar_panel"), + CRYO_CHAMBER(5, "cryo_chamber"), + BUGGY_FUEL_PAD(6, "buggy_pad"), + MINER_BASE(7, "miner_base"), // UNUSED + DISH_LARGE(8, "dish_large"), + LASER_TURRET(9, "laser_turret"); + + private final int meta; + private final String name; + + EnumBlockMultiType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockMultiType[] values = values(); + + public static EnumBlockMultiType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockMulti(String assetName) + { + super(GCBlocks.machine); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setResistance(1000000000000000.0F); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(MULTI_TYPE)) + { + case SOLAR_PANEL_0: + case SOLAR_PANEL_1: + boolean midPole = source.getBlockState(pos.up()).getBlock() == this; + boolean topPole = source.getBlockState(pos.down()).getBlock() == this; + if (topPole || midPole) + return midPole ? AABB_SOLAR_POLE : AABB_SOLAR; + else + return AABB_SOLAR; + case ROCKET_PAD: + case BUGGY_FUEL_PAD: + return AABB_PAD; + case LASER_TURRET: + return AABB_TURRET; + default: + return FULL_BLOCK_AABB; + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canDropFromExplosion(Explosion par1Explosion) + { + return false; + } + + public void makeFakeBlock(World worldObj, BlockPos pos, BlockPos mainBlock, int meta) + { + worldObj.setBlockState(pos, GCBlocks.fakeBlock.getStateFromMeta(meta), meta == 5 ? 3 : 0); + worldObj.setTileEntity(pos, new TileEntityMulti(mainBlock)); + } + + public void makeFakeBlock(World worldObj, Collection posList, BlockPos mainBlock, EnumBlockMultiType type) + { + for (BlockPos pos : posList) + { + worldObj.setBlockState(pos, this.getDefaultState().withProperty(MULTI_TYPE, type), type == EnumBlockMultiType.CRYO_CHAMBER ? 3 : 0); + worldObj.setTileEntity(pos, new TileEntityMulti(mainBlock)); + } + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + return worldIn.getBlockState(mainBlockPosition).getBlockHardness(worldIn, pos); + } + } + + return this.blockHardness; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + int metadata = getMetaFromState(worldIn.getBlockState(pos)); + + // Landing pad and refueling pad + if (metadata == 2 || metadata == 6) + { + return direction == EnumFacing.DOWN; + } + + // Basic solar panel fixed top + if (metadata == 4) + { + return direction == EnumFacing.UP; + } + + return false; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityMulti) + { + ((TileEntityMulti) tileEntity).onBlockRemoval(); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntityMulti tileEntity = (TileEntityMulti) worldIn.getTileEntity(pos); + if (tileEntity == null) + { + return false; + } + return tileEntity.onBlockActivated(worldIn, pos, playerIn); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntityMulti tileEntity = (TileEntityMulti) world.getTileEntity(pos); + return tileEntity.onBlockWrenched(world, pos, entityPlayer, hand, side, hitX, hitY, hitZ); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public TileEntity createNewTileEntity(World var1, int meta) + { + return null; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + TileEntity tileEntity = world.getTileEntity(pos); + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + IBlockState mainBlockState = world.getBlockState(mainBlockPosition); + + if (Blocks.AIR != mainBlockState.getBlock()) + { + return mainBlockState.getBlock().getPickBlock(mainBlockState, target, world, mainBlockPosition, player); + } + } + } + + return ItemStack.EMPTY; + } + + @Override + public EnumFacing getBedDirection(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileEntity tileEntity = world.getTileEntity(pos); + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + IBlockState mainState = world.getBlockState(mainBlockPosition); + return mainState.getBlock().getBedDirection(mainState, world, mainBlockPosition); + } + } + + return EnumFacing.UP; // TODO + } + + @Override + public boolean isBed(IBlockState state, IBlockAccess world, BlockPos pos, Entity player) + { + TileEntity tileEntity = world.getTileEntity(pos); + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + IBlockState mainState = world.getBlockState(mainBlockPosition); + return mainState.getBlock().isBed(mainState, world, mainBlockPosition, player); + } + } + + return super.isBed(state, world, pos, player); + } + + @Override + public void setBedOccupied(IBlockAccess world, BlockPos pos, EntityPlayer player, boolean occupied) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(pos)) + { + world.getBlockState(mainBlockPosition).getBlock().setBedOccupied(world, mainBlockPosition, player, occupied); + } + else + { + super.setBedOccupied(world, pos, player, occupied); + } + } + + @Override + public BlockPos getBedSpawnPosition(IBlockState state, IBlockAccess world, BlockPos pos, EntityPlayer player) + { + if (!(world instanceof World)) + { + return null; + } + int tries = 3; + World worldIn = (World) world; + TileEntity tileEntity = worldIn.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + IBlockState cryoChamber = worldIn.getBlockState(mainBlockPosition); + EnumFacing enumfacing = EnumFacing.NORTH; + if (cryoChamber.getBlock() == MarsBlocks.machine) + { + enumfacing = cryoChamber.getValue(BlockMachineMars.FACING); + } + int i = pos.getX(); + int j = pos.getY(); + int k = pos.getZ(); + + for (int l = 0; l <= 1; ++l) + { + int i1 = i - enumfacing.getXOffset() * l - 1; + int j1 = k - enumfacing.getZOffset() * l - 1; + int k1 = i1 + 2; + int l1 = j1 + 2; + + for (int i2 = i1; i2 <= k1; ++i2) + { + for (int j2 = j1; j2 <= l1; ++j2) + { + BlockPos blockpos = new BlockPos(i2, j, j2); + + if (hasRoomForPlayer(worldIn, blockpos)) + { + if (tries <= 0) + { + return blockpos; + } + + --tries; + } + } + } + } + + return null; + } + + private static boolean hasRoomForPlayer(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).isSideSolid(worldIn, pos.down(), EnumFacing.UP) && !worldIn.getBlockState(pos).getMaterial().isSolid() && !worldIn.getBlockState(pos.up()).getMaterial().isSolid(); + } + + @Override + public boolean addHitEffects(IBlockState state, World worldObj, RayTraceResult target, ParticleManager manager) + { + TileEntity tileEntity = worldObj.getTileEntity(target.getBlockPos()); + + if (tileEntity instanceof TileEntityMulti) + { + BlockPos mainBlockPosition = ((TileEntityMulti) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null && !mainBlockPosition.equals(target.getBlockPos())) + { + manager.addBlockHitEffects(mainBlockPosition, target); + } + } + + return super.addHitEffects(state, worldObj, target, manager); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(MULTI_TYPE, EnumBlockMultiType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(MULTI_TYPE).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, MULTI_TYPE, RENDER_TYPE); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + EnumBlockMultiType type = state.getValue(MULTI_TYPE); + int renderType = 0; + + switch (type) + { + case CRYO_CHAMBER: + IBlockState stateAbove = worldIn.getBlockState(pos.up()); + TileEntityMulti tile = (TileEntityMulti) worldIn.getTileEntity(pos); + if (stateAbove.getBlock() == this && (stateAbove.getValue(MULTI_TYPE)) == EnumBlockMultiType.CRYO_CHAMBER) + { + renderType = 0; + } + else + { + renderType = 4; + } + if (tile != null && tile.mainBlockPosition != null) + { + IBlockState stateMain = worldIn.getBlockState(tile.mainBlockPosition); + if (stateMain.getBlock() == MarsBlocks.machine && stateMain.getValue(BlockMachineMars.TYPE) == BlockMachineMars.EnumMachineType.CRYOGENIC_CHAMBER) + { + EnumFacing dir = stateMain.getValue(BlockMachineMars.FACING); + renderType += dir.getHorizontalIndex(); + } + } + break; + default: + break; + } + + return state.withProperty(RENDER_TYPE, renderType); + } + + public static void onPlacement(World worldIn, BlockPos pos, EntityLivingBase placer, Block callingBlock) + { + final TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof IMultiBlock) + { + boolean validSpot = true; + List toCheck = new LinkedList<>(); + ((IMultiBlock) tile).getPositions(pos, toCheck); + for (BlockPos toTest : toCheck) + { + IBlockState blockAt = worldIn.getBlockState(toTest); + if (!blockAt.getBlock().isReplaceable(worldIn, toTest)) + { + validSpot = false; + break; + } + } + + if (!validSpot) + { + worldIn.setBlockToAir(pos); + + if (!worldIn.isRemote && placer instanceof EntityPlayerMP) + { + EntityPlayerMP player = (EntityPlayerMP) placer; + player.sendMessage(new TextComponentString(EnumColor.RED + GCCoreUtil.translate("gui.warning.noroom"))); + if (!player.capabilities.isCreativeMode) + { + final ItemStack nasaWorkbench = new ItemStack(callingBlock, 1, 0); + final EntityItem entityitem = player.dropItem(nasaWorkbench, false); + entityitem.setPickupDelay(0); + entityitem.setOwner(player.getName()); + } + } + + return; + } + + ((IMultiBlock) tile).onCreate(worldIn, pos); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockNasaWorkbench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockNasaWorkbench.java new file mode 100644 index 00000000..501412bc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockNasaWorkbench.java @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNasaWorkbench; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockNasaWorkbench extends BlockContainer implements ITileEntityProvider, IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public BlockNasaWorkbench(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return new AxisAlignedBB((double) pos.getX() + -0.0F, (double) pos.getY() + 0.0F, (double) pos.getZ() + -0.0F, (double) pos.getX() + 1.0F, (double) pos.getY() + 1.4F, + (double) pos.getZ() + 1.0F); + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + BlockMulti.onPlacement(worldIn, pos, placer, this); + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + int fakeBlockCount = 0; + + for (int x = -1; x < 2; x++) + { + for (int y = 0; y < 4; y++) + { + for (int z = -1; z < 2; z++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + if (Math.abs(x) != 1 || Math.abs(z) != 1) + { + Block block = worldIn.getBlockState(pos.add(x, y, z)).getBlock(); + + if ((y == 0 || y == 3) && x == 0 && z == 0) + { + if (block == GCBlocks.fakeBlock) + { + fakeBlockCount++; + } + } else if (y != 0 && y != 3) + { + if (block == GCBlocks.fakeBlock) + { + fakeBlockCount++; + } + } + } + } + } + } + } + + if (fakeBlockCount >= 11 && var9 instanceof IMultiBlock) + { + ((IMultiBlock) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftCore.instance, SchematicRegistry.getMatchingRecipeForID(0).getGuiID(), worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityNasaWorkbench(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCollector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCollector.java new file mode 100644 index 00000000..44ad8424 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCollector.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenCollector extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockOxygenCollector(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityOxygenCollector(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @SideOnly(Side.CLIENT) + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityOxygenCollector) + { + if (((TileEntityOxygenCollector) tile).lastOxygenCollected > 1) + { + for (int particleCount = 0; particleCount < 10; particleCount++) + { + double x2 = pos.getX() + rand.nextFloat(); + double y2 = pos.getY() + rand.nextFloat(); + double z2 = pos.getZ() + rand.nextFloat(); + double mX = 0.0D; + double mY = 0.0D; + double mZ = 0.0D; + int dir = rand.nextInt(2) * 2 - 1; + mX = (rand.nextFloat() - 0.5D) * 0.5D; + mY = (rand.nextFloat() - 0.5D) * 0.5D; + mZ = (rand.nextFloat() - 0.5D) * 0.5D; + + final int meta = getMetaFromState(stateIn); + + if (meta == 3 || meta == 2) + { + x2 = pos.getX() + 0.5D + 0.25D * dir; + mX = rand.nextFloat() * 2.0F * dir; + } else + { + z2 = pos.getZ() + 0.5D + 0.25D * dir; + mZ = rand.nextFloat() * 2.0F * dir; + } + + GalacticraftCore.proxy.spawnParticle("oxygen", new Vector3(x2, y2, z2), new Vector3(mX, mY, mZ), new Object[] + {new Vector3(0.7D, 0.7D, 1.0D)}); + } + } + } + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCompressor.java new file mode 100644 index 00000000..287a6d78 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenCompressor.java @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenCompressor extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final int OXYGEN_COMPRESSOR_METADATA = 0; + public static final int OXYGEN_DECOMPRESSOR_METADATA = 4; + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumCompressorType.class); + + public enum EnumCompressorType implements IStringSerializable + { + + COMPRESSOR(0, "compressor"), DECOMPRESSOR(1, "decompressor"); + + private final int meta; + private final String name; + + EnumCompressorType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumCompressorType[] values = values(); + + public static EnumCompressorType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockOxygenCompressor(boolean isActive, String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + int metadata = getMetaFromState(state); + if (metadata >= BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA) + { + return new TileEntityOxygenDecompressor(); + } else if (metadata >= BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA) + { + return new TileEntityOxygenCompressor(); + } else + { + return null; + } + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + + if (stack.getItemDamage() >= BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA) + { + change += BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA; + } else if (stack.getItemDamage() >= BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA) + { + change += BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA; + } + + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA)); + list.add(new ItemStack(this, 1, BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA)); + } + + @Override + public int damageDropped(IBlockState state) + { + int metadata = getMetaFromState(state); + if (metadata >= BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA) + { + return BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA; + } else if (metadata >= BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA) + { + return BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA; + } else + { + return 0; + } + } + + @Override + public String getShiftDescription(int meta) + { + switch (meta) + { + case OXYGEN_COMPRESSOR_METADATA: + return GCCoreUtil.translate("tile.oxygen_compressor.description"); + case OXYGEN_DECOMPRESSOR_METADATA: + return GCCoreUtil.translate("tile.oxygen_decompressor.description"); + } + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumCompressorType type = EnumCompressorType.byMetadata((int) Math.floor(meta / 4.0)); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex() + state.getValue(TYPE).getMeta() * 4; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDetector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDetector.java new file mode 100644 index 00000000..d744ab45 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDetector.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDetector; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenDetector extends BlockContainer implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyBool ACTIVE = PropertyBool.create("active"); + + public BlockOxygenDetector(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityOxygenDetector(); + } + + public void updateOxygenState(World worldIn, BlockPos pos, boolean valid) + { + if (valid) + { + worldIn.setBlockState(pos, getStateFromMeta(1), 3); + } else + { + worldIn.setBlockState(pos, getStateFromMeta(0), 3); + } + } + + @Override + public boolean canProvidePower(IBlockState state) + { + return true; + } + + @Override + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return getMetaFromState(blockState) == 1 ? 15 : 0; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(ACTIVE, meta > 0); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(ACTIVE) ? 1 : 0; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, ACTIVE); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDistributor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDistributor.java new file mode 100644 index 00000000..3233b355 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenDistributor.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenDistributor extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockOxygenDistributor(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + worldIn.setBlockState(pos, getStateFromMeta(EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex()), 3); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityOxygenDistributor(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenSealer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenSealer.java new file mode 100644 index 00000000..d294eee9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockOxygenSealer.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockOxygenSealer extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockOxygenSealer(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + worldIn.setBlockState(pos, getStateFromMeta(EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex()), 3); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityOxygenSealer(); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + // Run a sealer check if needed and if not picked up by + // BlockBreathableAir.onNeighborBlockChange() + BlockPos ventSide = pos.up(1); + Block testBlock = worldIn.getBlockState(ventSide).getBlock(); + if (testBlock == GCBlocks.breatheableAir || testBlock == GCBlocks.brightBreatheableAir) + { + TickHandlerServer.scheduleNewEdgeCheck(GCCoreUtil.getDimensionID(worldIn), pos); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPanelLighting.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPanelLighting.java new file mode 100644 index 00000000..3c5903eb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPanelLighting.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.common.property.ExtendedBlockState; +import net.minecraftforge.common.property.IExtendedBlockState; +import net.minecraftforge.common.property.IUnlistedProperty; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.IPaintable; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PropertyObject; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +public class BlockPanelLighting extends BlockAdvancedTile implements ISortableBlock, IShiftDescription, IPaintable +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", PanelType.class); + public static final PropertyObject BASE_STATE = new PropertyObject<>("held_state", IBlockState.class); + + public static int color = 0xf0f0e0; + + public enum PanelType implements IStringSerializable + { + + SQUARE("square", 11), SPOTS("spots", 7), LINEAR("linear", 9), SF("sf", 2), SFDIAG("sfdiag", 2); + // IF ADDING TO THIS ENUM, MAKE SURE TO CHANGE DEFINITION OF + // PacketSimple.C_UPDATE_STATS!!!!!! + + private final String name; + private final int light; + + private PanelType(String name, int lightValue) + { + this.name = name; + this.light = lightValue; + } + + @Override + public String getName() + { + return this.name; + } + + public int getLight() + { + return this.light; + } + } + + public static final int PANELTYPES_LENGTH = PanelType.values().length; + private static IBlockState[] superState = new IBlockState[PANELTYPES_LENGTH]; // - + // only + // used + // clientSide + + public BlockPanelLighting(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState()); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new ExtendedBlockState(this, new IProperty[] + {TYPE}, new IUnlistedProperty[] + {BASE_STATE}); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int i = 0; i < PANELTYPES_LENGTH; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + + @Override + public int damageDropped(IBlockState state) + { + return this.getMetaFromState(state); + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + ArrayList result = new ArrayList(); + result.add(new ItemStack(this.getItemDropped(state, null, fortune), 1, this.getMetaFromState(state))); + return result; + } + + @Override + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int damage, EntityLivingBase placer) + { + return this.getStateFromMeta(damage); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int damage = stack.getItemDamage(); + if (damage >= PANELTYPES_LENGTH) + damage = 0; + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityPanelLight && placer instanceof EntityPlayer) + { + ((TileEntityPanelLight) tile).initialise(damage, EnumFacing.getDirectionFromEntityLiving(pos, placer), (EntityPlayer) placer, worldIn.isRemote, + ((BlockPanelLighting) state.getBlock()).superState[damage]); + } + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (!(tile instanceof TileEntityPanelLight)) + { + return false; + } + IBlockState bs = world.getBlockState(pos); + if (!(bs.getBlock() instanceof BlockPanelLighting)) + { + return false; + } + PanelType type = (PanelType) bs.getValue(BlockPanelLighting.TYPE); + TileEntityPanelLight tilegood = (TileEntityPanelLight) tile; + int metadata = tilegood.meta; + if (metadata < 8 && (type == PanelType.LINEAR || type == PanelType.SF) || metadata < 24 && type == PanelType.SFDIAG) + { + tilegood.meta += 8; + return true; + } + + int metaDir = ((metadata & 7) + 1) % 6; + // DOWN->UP->NORTH->*EAST*->*SOUTH*->WEST + // 0->1 1->2 2->5 3->4 4->0 5->3 + if (metaDir == 3) // after north + { + metaDir = 5; + } else if (metaDir == 0) + { + metaDir = 3; + } else if (metaDir == 5) + { + metaDir = 0; + } + + tilegood.meta = metaDir; + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityPanelLight(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate("tile.panel_lighting.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) + { + return true; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + if (meta >= PANELTYPES_LENGTH) + meta = 0; + return this.getDefaultState().withProperty(TYPE, PanelType.values()[meta]); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((PanelType) state.getValue(BlockPanelLighting.TYPE)).ordinal(); + } + + @Override + public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityPanelLight) + { + state = ((IExtendedBlockState) state).withProperty(BASE_STATE, ((TileEntityPanelLight) tile).getBaseBlock()); + } + + return state; + } + + @Override + public int getLightValue(IBlockState bs, IBlockAccess world, BlockPos pos) + { + if (!(bs.getBlock() instanceof BlockPanelLighting)) + { + return 0; + } + if (world instanceof World && RedstoneUtil.isBlockReceivingRedstone((World) world, pos)) + { + return 0; + } + return ((PanelType) bs.getValue(BlockPanelLighting.TYPE)).getLight(); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + worldIn.checkLightFor(EnumSkyBlock.BLOCK, pos); + } + + @SideOnly(value = Side.CLIENT) + public static void updateClient(int type, IBlockState state) + { + if (type >= PANELTYPES_LENGTH) + type = 0; + superState[type] = state; + } + + @SideOnly(value = Side.CLIENT) + public static void updateClient(List data) + { + IBlockState state; + for (int i = 0; i < PANELTYPES_LENGTH; i++) + { + state = TileEntityPanelLight.readBlockState((String) data.get(i + i + 1), (Integer) data.get(i + i + 2)); + if (state.getBlock() == Blocks.AIR) + { + state = null; + } + superState[i] = state; + } + color = (Integer) data.get(2 * PANELTYPES_LENGTH + 1); + } + + public static void getNetworkedData(Object[] result, IBlockState[] panel_lighting) + { + // IF CHANGING THIS, MAKE SURE TO CHANGE DEFINITION OF + // PacketSimple.C_UPDATE_STATS + Block block; + IBlockState bs; + for (int i = 0; i < PANELTYPES_LENGTH; i++) + { + bs = panel_lighting[i]; + if (bs == null) + bs = Blocks.AIR.getDefaultState(); + block = bs.getBlock(); + result[i + i + 1] = ((ResourceLocation) Block.REGISTRY.getNameForObject(block)).toString(); + result[i + i + 2] = block.getMetaFromState(bs); + } + } + + @Override + public int setColor(int color, EntityPlayer p, Side side) + { + if (side == Side.CLIENT) + { + BlockPanelLighting.color = ColorUtil.lighten(ColorUtil.lightenFully(color, 255), 0.1F); + } else + { + GCPlayerStats stats = GCPlayerStats.get(p); + stats.setPanelLightingColor(color); + } + return 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockParaChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockParaChest.java new file mode 100644 index 00000000..924ca8f9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockParaChest.java @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Iterator; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityParaChest; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockParaChest extends BlockContainer implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyEnum COLOR = PropertyEnum.create("color", EnumDyeColor.class); + protected static final AxisAlignedBB NOT_CONNECTED_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.875D, 0.9375D); + + public BlockParaChest(String assetName) + { + super(Material.WOOD); + this.setHardness(3.0F); + this.setSoundType(SoundType.WOOD); +// this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return NOT_CONNECTED_AABB; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing()); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } else + { + IInventory iinventory = this.getInventory(worldIn, pos); + + if (iinventory != null && playerIn instanceof EntityPlayerMP) + { + playerIn.openGui(GalacticraftCore.instance, -1, worldIn, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + TileEntityParaChest tileentitychest = (TileEntityParaChest) worldIn.getTileEntity(pos); + + if (tileentitychest != null) + { + tileentitychest.updateContainingBlockInfo(); + } + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntityParaChest tileentitychest = (TileEntityParaChest) worldIn.getTileEntity(pos); + + if (tileentitychest != null) + { + Random syncRandom = GCCoreUtil.getRandom(pos); + for (int j1 = 0; j1 < tileentitychest.getSizeInventory(); ++j1) + { + ItemStack itemstack = tileentitychest.getStackInSlot(j1); + + if (itemstack != null) + { + + float f = syncRandom.nextFloat() * 0.8F + 0.1F; + float f1 = syncRandom.nextFloat() * 0.8F + 0.1F; + EntityItem entityitem; + + for (float f2 = syncRandom.nextFloat() * 0.8F + 0.1F; !itemstack.isEmpty(); worldIn.spawnEntity(entityitem)) + { + entityitem = new EntityItem(worldIn, pos.getX() + f, pos.getY() + f1, pos.getZ() + f2, itemstack.splitStack(syncRandom.nextInt(21) + 10)); + float f3 = 0.05F; + entityitem.motionX = (float) syncRandom.nextGaussian() * f3; + entityitem.motionY = (float) syncRandom.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) syncRandom.nextGaussian() * f3; + } + } + } + + worldIn.updateComparatorOutputLevel(pos, null); + } + + super.breakBlock(worldIn, pos, state); + } + + public IInventory getInventory(World par1World, BlockPos pos) + { + Object object = par1World.getTileEntity(pos); + + if (object == null) + { + return null; + } else if (par1World.isSideSolid(pos.offset(EnumFacing.UP), EnumFacing.DOWN)) + { + return null; + } else if (BlockParaChest.isOcelotBlockingChest(par1World, pos)) + { + return null; + } else + { + return (IInventory) object; + } + } + + public static boolean isOcelotBlockingChest(World par0World, BlockPos pos) + { + Iterator iterator = + par0World.getEntitiesWithinAABB(EntityOcelot.class, new AxisAlignedBB(pos.getX(), pos.getY() + 1, pos.getZ(), pos.getX() + 1, pos.getY() + 2, pos.getZ() + 1)).iterator(); + EntityOcelot entityocelot; + + do + { + if (!iterator.hasNext()) + { + return false; + } + + entityocelot = (EntityOcelot) iterator.next(); + } while (!entityocelot.isSitting()); + + return true; + } + + @Override + public TileEntity createNewTileEntity(World par1World, int meta) + { + return new TileEntityParaChest(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, COLOR, FACING); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (!(tile instanceof TileEntityParaChest)) + { + return state; + } + TileEntityParaChest chest = (TileEntityParaChest) tile; + return state.withProperty(COLOR, chest.color); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPlatform.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPlatform.java new file mode 100644 index 00000000..3195f8c9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockPlatform.java @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockPlatform extends BlockAdvancedTile implements IPartialSealableBlock, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum CORNER = PropertyEnum.create("type", EnumCorner.class); + public static final float HEIGHT = 0.875F; + protected static final AxisAlignedBB BOUNDING_BOX = new AxisAlignedBB(0.0D, 6 / 16.0D, 0.0D, 1.0D, HEIGHT, 1.0D); + protected static final AxisAlignedBB BOUNDING_BOX_ZEROG = new AxisAlignedBB(0.0D, 6 / 16.0D, 0.0D, 1.0D, 1.0D, 1.0D);; + public static boolean ignoreCollisionTests; + + public enum EnumCorner implements IStringSerializable + { + + NONE(0, "none"), NW(1, "sw"), SW(2, "nw"), NE(3, "se"), SE(4, "ne"); + // Yes these labels are the wrong way round, n should be s! But the + // BlockState model is hard-coded to work with this as it is. + + private final int meta; + private final String name; + + EnumCorner(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumCorner[] values = values(); + + public static EnumCorner byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockPlatform(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setResistance(10.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(CORNER, EnumCorner.NONE)); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + private boolean checkAxis(World worldIn, BlockPos pos, Block block, EnumFacing facing) + { + int sameCount = 0; + for (int i = 1; i <= 2; i++) + { + IBlockState bs = worldIn.getBlockState(pos.offset(facing, i)); + if (bs.getBlock() == block && bs.getValue(BlockPlatform.CORNER) == BlockPlatform.EnumCorner.NONE) + { + sameCount++; + } + } + + return sameCount > 1; + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + final Block id = GCBlocks.platform; + + if (checkAxis(worldIn, pos, id, EnumFacing.EAST) || checkAxis(worldIn, pos, id, EnumFacing.WEST) || checkAxis(worldIn, pos, id, EnumFacing.NORTH) + || checkAxis(worldIn, pos, id, EnumFacing.SOUTH)) + { + return false; + } + + if (worldIn.getBlockState(pos.offset(EnumFacing.DOWN)).getBlock() == GCBlocks.platform && side == EnumFacing.UP) + { + return false; + } else + { + return this.canPlaceBlockAt(worldIn, pos); + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityPlatform(meta); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + if (var9 instanceof TileEntityPlatform) + { + ((TileEntityPlatform) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return direction == EnumFacing.UP; + } + + @Override + public int damageDropped(IBlockState state) + { + return 0; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(CORNER, EnumCorner.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumCorner) state.getValue(CORNER)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, CORNER); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB mask, List list, @Nullable Entity entityIn, boolean p_185477_7_) + { + if (ignoreCollisionTests) + return; + TileEntity te = worldIn.getTileEntity(pos); + if (te instanceof TileEntityPlatform) + { + if (((TileEntityPlatform) te).noCollide()) + return; + } + AxisAlignedBB axisalignedbb = this.getCollisionBoundingBox(state, worldIn, pos).offset(pos); + + if (axisalignedbb != null && mask.intersects(axisalignedbb)) + { + list.add(axisalignedbb); + } + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) + { + if (world instanceof World && ((World) world).provider instanceof IZeroGDimension) + return BOUNDING_BOX_ZEROG; + return BOUNDING_BOX; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(IBlockState bs, World worldIn, BlockPos pos) + { + TileEntity te = worldIn.getTileEntity(pos); + if (te instanceof TileEntityPlatform) + { + if (((TileEntityPlatform) te).noCollide()) + { + if (bs.getBlock() == this && bs.getValue(BlockPlatform.CORNER) == BlockPlatform.EnumCorner.SE) + return new AxisAlignedBB((double) pos.getX() + 9 / 16D, (double) pos.getY(), (double) pos.getZ() + 9 / 16D, (double) pos.getX() + 1.0D, (double) pos.getY() + HEIGHT, + (double) pos.getZ() + 1.0D); + else + return new AxisAlignedBB((double) pos.getX(), (double) pos.getY(), (double) pos.getZ(), (double) pos.getX() + 7 / 16D, (double) pos.getY() + HEIGHT, (double) pos.getZ() + 7 / 16D); + } + } + return super.getSelectedBoundingBox(bs, worldIn, pos); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockRefinery.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockRefinery.java new file mode 100644 index 00000000..9046c6d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockRefinery.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockRefinery extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockRefinery(String assetName) + { + super(Material.ROCK); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + final TileEntity te = worldIn.getTileEntity(pos); + + if (te instanceof TileEntityRefinery) + { + final TileEntityRefinery refinery = (TileEntityRefinery) te; + + if (refinery.processTicks > 0) + { + final float var7 = pos.getX() + 0.5F; + final float var8 = pos.getY() + 1.1F; + final float var9 = pos.getZ() + 0.5F; + final float var10 = 0.0F; + final float var11 = 0.0F; + + for (int i = -1; i <= 1; i++) + { + for (int j = -1; j <= 1; j++) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7 + var11 + i * 0.2, var8, var9 + var10 + j * 0.2, 0.0D, 0.01D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, var7 + var11 + i * 0.1, var8 - 0.2, var9 + var10 + j * 0.1, 0.0D, 0.0001D, 0.0D); + } + } + } + } + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityRefinery(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + worldIn.setBlockState(pos, getStateFromMeta(EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex()), 3); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockScreen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockScreen.java new file mode 100644 index 00000000..5d7c6912 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockScreen.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockScreen extends BlockAdvanced implements IShiftDescription, IPartialSealableBlock, ITileEntityProvider, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing"); + public static final PropertyBool LEFT = PropertyBool.create("left"); + public static final PropertyBool RIGHT = PropertyBool.create("right"); + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool DOWN = PropertyBool.create("down"); + + protected static final float boundsFront = 0.094F; + protected static final float boundsBack = 1.0F - boundsFront; + protected static final AxisAlignedBB DOWN_AABB = new AxisAlignedBB(0F, 0F, 0F, 1.0F, boundsBack, 1.0F); + protected static final AxisAlignedBB UP_AABB = new AxisAlignedBB(0F, boundsFront, 0F, 1.0F, 1.0F, 1.0F); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0F, 0F, boundsFront, 1.0F, 1.0F, 1.0F); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0F, 0F, 0F, 1.0F, 1.0F, boundsBack); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(boundsFront, 0F, 0F, 1.0F, 1.0F, 1.0F); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0F, 0F, 0F, boundsBack, 1.0F, 1.0F); + + // Metadata: 0-5 = direction of screen back; bit 3 = reserved for future use + public BlockScreen(String assetName) + { + super(Material.CIRCUITS); + this.setDefaultState( + this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(LEFT, false).withProperty(RIGHT, false).withProperty(UP, false).withProperty(DOWN, false)); + this.setHardness(0.1F); + this.setSoundType(SoundType.GLASS); + this.setTranslationKey(assetName); + } + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing direction) + { + return direction.ordinal() != getMetaFromState(base_state); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + ((TileEntityScreen) worldIn.getTileEntity(pos)).breakScreen(state); + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face.ordinal() == getMetaFromState(state) ? BlockFaceShape.UNDEFINED : BlockFaceShape.BOWL; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + int change = world.getBlockState(pos).getValue(FACING).rotateY().getIndex(); + world.setBlockState(pos, this.getStateFromMeta(change), 3); + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityScreen(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityScreen) + { + ((TileEntityScreen) tile).changeChannel(); + return true; + } + return false; + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityScreen) + { + ((TileEntityScreen) tile).refreshConnections(true); + } + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case EAST: + return EAST_AABB; + case WEST: + return WEST_AABB; + case SOUTH: + return SOUTH_AABB; + case NORTH: + return NORTH_AABB; + case DOWN: + return DOWN_AABB; + case UP: + default: + return UP_AABB; + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, LEFT, RIGHT, UP, DOWN); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntityScreen screen = (TileEntityScreen) worldIn.getTileEntity(pos); + return state.withProperty(LEFT, screen.connectedLeft).withProperty(RIGHT, screen.connectedRight).withProperty(UP, screen.connectedUp).withProperty(DOWN, screen.connectedDown); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSlabGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSlabGC.java new file mode 100644 index 00000000..98403afd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSlabGC.java @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockSlabGC extends BlockSlab implements ISortableBlock +{ + + public final static PropertyEnum VARIANT = PropertyEnum.create("variant", BlockType.class); + + public BlockSlabGC(String name, Material material) + { + super(material); + this.setTranslationKey(name); + this.useNeighborBrightness = true; + } + + public BlockSlabGC(Material material) + { + super(material); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int i = 0; i < 7; ++i) + { + list.add(new ItemStack(this, 1, i)); + } + } + + @Override + public int damageDropped(IBlockState state) + { + return this.getMetaFromState(state) & 7; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(GCBlocks.slabGCHalf); + } + + @Override + public int quantityDropped(Random rand) + { + return this.isDouble() ? 2 : 1; + } + + @Override + public CreativeTabs getCreativeTab() + { + return this.isDouble() ? null : GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + Block block = blockState.getBlock(); + + if (!(block instanceof BlockSlabGC)) // This will prevent game crashing + // when harvest block + { + return 0; + } + + switch (this.getMetaFromState(blockState)) + { + case 2: + case 3: + return 1.5F; + default: + return 2.0F; + } + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(this, 1, this.getMetaFromState(state) & 7); + } + + @Override + public String getTranslationKey(int meta) + { + BlockType type = (this.getStateFromMeta(meta).getValue(VARIANT)); + return type.getLangName(); + } + + @Override + public boolean isDouble() + { + return false; + } + + @Override + public IProperty getVariantProperty() + { + return VARIANT; + } + + @Override + public Comparable getTypeForItem(ItemStack stack) + { + return BlockType.byMetadata(stack.getMetadata() & 7); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + IBlockState state = this.getDefaultState().withProperty(VARIANT, BlockType.byMetadata(meta & 7)); + + if (!this.isDouble()) + { + state = state.withProperty(HALF, (meta & 8) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP); + } + return state; + } + + @Override + public int getMetaFromState(IBlockState state) + { + byte b0 = 0; + int i = b0 | state.getValue(VARIANT).getMetadata(); + + if (!this.isDouble() && state.getValue(HALF) == EnumBlockHalf.TOP) + { + i |= 8; + } + return i; + } + + @Override + protected BlockStateContainer createBlockState() + { + return this.isDouble() ? new BlockStateContainer(this, VARIANT) : new BlockStateContainer(this, HALF, VARIANT); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.SLABS; + } + + public enum BlockType implements IStringSerializable + { + + TIN_SLAB_1(0, "tin_slab_1"), TIN_SLAB_2(1, "tin_slab_2"), MOON_STONE_SLAB(2, "moon_slab"), MOON_DUNGEON_BRICK_SLAB(3, "moon_bricks_slab"), MARS_COBBLESTONE_SLAB(4, "mars_slab"), MARS_DUNGEON_SLAB(5, "mars_bricks_slab"), ASTEROIDS_DECO(6, "asteroids_slab"); + + private int meta; + private String langName; + private static BlockType[] META_LOOKUP = new BlockType[values().length]; + + BlockType(int meta, String langName) + { + this.meta = meta; + this.langName = langName; + } + + @Override + public String toString() + { + return this.getName(); + } + + @Override + public String getName() + { + return this.langName; + } + + public int getMetadata() + { + return this.meta; + } + + public static BlockType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + return META_LOOKUP[meta]; + } + + public String getLangName() + { + return langName; + } + + static + { + BlockType[] var0 = values(); + + for (BlockType var3 : var0) + { + META_LOOKUP[var3.getMetadata()] = var3; + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSolar.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSolar.java new file mode 100644 index 00000000..4e493346 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSolar.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockSolar extends BlockTileGC implements IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public static final int BASIC_METADATA = 0; + public static final int ADVANCED_METADATA = 4; + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumSolarType.class); + + public enum EnumSolarType implements IStringSerializable + { + + BASIC_SOLAR(0, "basic_solar"), ADVANCED_SOLAR(1, "advanced_solar"); // 3 + // for + // backwards + // compatibility + + private final int meta; + private final String name; + + EnumSolarType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumSolarType[] values = values(); + + public static EnumSolarType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockSolar(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, BlockSolar.BASIC_METADATA)); + list.add(new ItemStack(this, 1, BlockSolar.ADVANCED_METADATA)); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + for (int y = 1; y <= 2; y++) + { + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + BlockPos posAt = pos.add(y == 2 ? x : 0, y, y == 2 ? z : 0); + IBlockState bs = worldIn.getBlockState(posAt); + + if (bs.getMaterial() != Material.AIR && !bs.getBlock().isReplaceable(worldIn, posAt)) + { + return false; + } + } + } + } + + for (int x = -2; x <= 2; x++) + { + for (int z = -2; z <= 2; z++) + { + BlockPos posAt = pos.add(x, 0, z); + Block block = worldIn.getBlockState(posAt).getBlock(); + + if (block == this) + { + return false; + } + } + } + + return true; + // return new BlockVec3(x1, y1, z1).newVecSide(side ^ 1).getBlock(world) + // != GCBlocks.fakeBlock; TODO + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + + if (stack.getItemDamage() >= ADVANCED_METADATA) + { + change += ADVANCED_METADATA; + } else if (stack.getItemDamage() >= BASIC_METADATA) + { + change += BASIC_METADATA; + } + + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + + BlockMulti.onPlacement(worldIn, pos, placer, this); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + if (var9 instanceof TileEntitySolar) + { + ((TileEntitySolar) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftCore.instance, -1, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public int damageDropped(IBlockState state) + { + if (getMetaFromState(state) >= BlockSolar.ADVANCED_METADATA) + { + return BlockSolar.ADVANCED_METADATA; + } else + { + return BlockSolar.BASIC_METADATA; + } + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + if (getMetaFromState(state) >= BlockSolar.ADVANCED_METADATA) + { + return new TileEntitySolar(2); + } else + { + return new TileEntitySolar(1); + } + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public String getShiftDescription(int meta) + { + switch (meta) + { + case BASIC_METADATA: + return GCCoreUtil.translate("tile.solar_basic.description"); + case ADVANCED_METADATA: + return GCCoreUtil.translate("tile.solar_adv.description"); + } + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumSolarType type = EnumSolarType.byMetadata((int) Math.floor(meta / 4.0)); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex() + state.getValue(TYPE).getMeta() * 4; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceGlass.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceGlass.java new file mode 100644 index 00000000..e748cae9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceGlass.java @@ -0,0 +1,1102 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.item.IPaintable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.JavaUtil; + +public class BlockSpaceGlass extends Block implements IPartialSealableBlock, IShiftDescription, ISortableBlock, IPaintable +{ + + public static final PropertyEnum MODEL = PropertyEnum.create("modeltype", GlassModel.class); + public static final PropertyEnum ROTATION = PropertyEnum.create("rot", GlassRotation.class); + // public static final PropertyInteger PLACING = + // PropertyInteger.create("placing", 0, 2); + // This will define whether originally placed by the player facing NS - EW - + // or UD + + public final GlassType type; + private final GlassFrame frame; // frameValue corresponds to the damage of + // the placing item + public int color = 0xFFFFFF; + private final Block baseBlock; + private boolean isClient; + private static Class clazz = Blocks.WATER.getClass().getSuperclass(); + + public BlockSpaceGlass(String assetName, GlassType newType, GlassFrame newFrame, Block base) + { + super(Material.GLASS); + this.isClient = GalacticraftCore.proxy.getClass().getName().equals("micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore"); + this.type = newType; + this.frame = newFrame; + this.baseBlock = base == null ? this : base; + this.color = frame.getDefaultColor(); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.GLASS); + this.hasTileEntity = true; + this.setDefaultState(this.blockState.getBaseState().withProperty(MODEL, GlassModel.STANDARD_PANE).withProperty(ROTATION, GlassRotation.N)); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {MODEL, ROTATION}); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + // The plain block variety produces items carrying all variants as + // damage values + // Other block varieties have no corresponding ItemBlock (see + // registration in GCBlocks) + if (this.frame == GlassFrame.PLAIN) + { + for (int i = 0; i < GlassFrame.values().length; i++) + list.add(new ItemStack(this, 1, i)); + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.DECORATION; + } + + @Override + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + // This allows the different item damage values to place different + // instances of the block - the instances of the block are constructed + // in GCBlocks + if (meta >= GlassFrame.values().length) + meta = 0; + switch (GlassFrame.values()[meta]) + { + case TIN_DECO: + { + switch (this.type) + { + case STRONG: + return GCBlocks.spaceGlassTinStrong.getDefaultState(); + case VANILLA: + return GCBlocks.spaceGlassTinVanilla.getDefaultState(); + default: + return GCBlocks.spaceGlassTinClear.getDefaultState(); + } + } + case PLAIN: + default: + return this.getDefaultState(); + } + // TODO: Add PLACING direction + } + + @Override + public int damageDropped(IBlockState state) + { + return this.frame.ordinal(); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(this.baseBlock); + // TODO: override getItemDropped() to return null if we make a broken + // Space Glass variant... + // (if doing that, also update EntityAstroMiner.getPickBlock() + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + ArrayList ret = new ArrayList<>(1); + ret.add(new ItemStack(this.getItemDropped(state, null, fortune), 1, this.frame.ordinal())); + return ret; + } + + @Override + public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return direction.ordinal() > 1; + } + + @Override + public Material getMaterial(IBlockState state) + { + if (this.isClient && JavaUtil.instance.isCalledBySpecific(clazz)) + { + return Material.WATER; + } + return this.material; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + @Override + public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) + { + return layer == BlockRenderLayer.TRANSLUCENT || layer == BlockRenderLayer.SOLID; + } + + @Override + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB mask, List list, @Nullable Entity entityIn, boolean p_185477_7_) + { + IBlockState above = worldIn.getBlockState(pos.up()); + IBlockState below = worldIn.getBlockState(pos.down()); + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + + boolean connectN = this.canPaneConnectToBlock(north, state); + boolean connectS = this.canPaneConnectToBlock(south, state); + boolean connectW = this.canPaneConnectToBlock(west, state); + boolean connectE = this.canPaneConnectToBlock(east, state); + + boolean plateD = this.buildSolidSide(below, state); + boolean plateU = this.buildSolidSide(above, state); + boolean plateN = this.buildSolidSide(north, state); + boolean plateS = this.buildSolidSide(south, state); + boolean plateW = this.buildSolidSide(west, state); + boolean plateE = this.buildSolidSide(east, state); + + // No plate on the sides which glass is facing + if (connectN || connectS) + { + plateW = plateE = false; + } + if (connectW || connectE) + { + plateN = plateS = false; + } + + // Singleton + if (!connectE && !connectW && !connectN && !connectS) + { + boolean prefEW = false; + if (below.getBlock() == this) + { + prefEW = (isConnectedEW(below, worldIn, pos.down()) || isPreferenceEW(below, worldIn, pos.down())); + } else if (above.getBlock() == this) + { + prefEW = (isConnectedEW(above, worldIn, pos.up()) || isPreferenceEW(above, worldIn, pos.up())); + } + + if (this.isPreferenceEW(state, worldIn, pos)) + prefEW = true; + + if (prefEW) + { + plateN = plateS = false; + } else + { + plateW = plateE = false; + } + } + + final double posGlass = 0.375D; + final double posBase = 0.225D; + double xMin = plateU || plateD || plateN || plateS ? posBase : posGlass; + double xMax = plateU || plateD || plateN || plateS ? 1D - posBase : 1D - posGlass; + double yMin = 0D; // plateE || plateW || plateN || plateS ? posBase : + // 0.375D; + double yMax = 1D; // plateE || plateW || plateN || plateS ? 0.775D : + // 0.625D; + double zMin = plateU || plateD || plateE || plateW ? posBase : posGlass; + double zMax = plateU || plateD || plateE || plateW ? 1D - posBase : 1D - posGlass; + + if (plateW || connectW) + xMin = 0D; + if (plateE || connectE) + xMax = 1D; + if (plateN || connectN) + zMin = 0D; + if (plateS || connectS) + zMax = 1D; + + // Special for corner diagonals + if ((connectW ^ connectE) && (connectN ^ connectS) && !(plateU && plateD)) + { + double diag = 0.25D; + if (connectW) + { + xMin = diag - 0.01D; + xMax = diag; + } else + { + xMin = 1D - diag; + xMax = 1.01D - diag; + } + if (connectN) + { + zMin = diag - 0.01D; + zMax = diag; + } else + { + zMin = 1D - diag; + zMax = 1.01D - diag; + } + } + + xMin += pos.getX(); + xMax += pos.getX(); + yMin += pos.getY(); + yMax += pos.getY(); + zMin += pos.getZ(); + zMax += pos.getZ(); + AxisAlignedBB axisalignedbb = new AxisAlignedBB(xMin, yMin, zMin, xMax, yMax, zMax); + if (axisalignedbb != null && mask.intersects(axisalignedbb)) + { + list.add(axisalignedbb); + } + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(IBlockState bs, World worldIn, BlockPos pos) + { + return this.getBoundingBox(bs, worldIn, pos).offset(pos); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState bs, IBlockAccess worldIn, BlockPos pos) + { + IBlockState state = worldIn.getBlockState(pos); + IBlockState above = worldIn.getBlockState(pos.up()); + IBlockState below = worldIn.getBlockState(pos.down()); + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + + boolean connectedN = this.canPaneConnectToBlock(north, state); + boolean connectedS = this.canPaneConnectToBlock(south, state); + boolean connectedW = this.canPaneConnectToBlock(west, state); + boolean connectedE = this.canPaneConnectToBlock(east, state); + + boolean plateD = this.buildSolidSide(below, state); + boolean plateU = this.buildSolidSide(above, state); + boolean plateN = this.buildSolidSide(north, state); + boolean plateS = this.buildSolidSide(south, state); + boolean plateW = this.buildSolidSide(west, state); + boolean plateE = this.buildSolidSide(east, state); + + // No plate on the sides which glass is facing + if (connectedN || connectedS) + { + plateW = plateE = false; + } + if (connectedW || connectedE) + { + plateN = plateS = false; + } + + // Singleton + if (!connectedE && !connectedW && !connectedN && !connectedS) + { + boolean prefEW = false; + if (below.getBlock() == this) + { + prefEW = (isConnectedEW(below, worldIn, pos.down()) || isPreferenceEW(below, worldIn, pos.down())); + } else if (above.getBlock() == this) + { + prefEW = (isConnectedEW(above, worldIn, pos.up()) || isPreferenceEW(above, worldIn, pos.up())); + } + + if (this.isPreferenceEW(state, worldIn, pos)) + prefEW = true; + + if (prefEW) + { + plateN = plateS = false; + } else + { + plateW = plateE = false; + } + } + + int offset = 0; + int base = 1; + int solids = (plateD ? 1 : 0) + (plateU ? 1 : 0) + (plateN ? 1 : 0) + (plateS ? 1 : 0) + (plateW ? 1 : 0) + (plateE ? 1 : 0); + if (solids > 2 || (plateU && plateD) || (plateW && plateE) || (plateN && plateS)) + { + base = 0; + } + + if (connectedW || plateW) + { + offset = 2; + } + if (connectedN || plateN) + { + offset += 4; + } + if (connectedE || plateE) + { + offset += 8; + } + if (connectedS || plateS) + { + offset += 16; + } + + // See 1.10 version for the logic + return BOUNDING_BOXES[offset + base]; + } + + protected static final AxisAlignedBB[] BOUNDING_BOXES = + {new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), // Widen + // to the + // frame + // width, + // if + // frames + // on + // opposite + // sides + new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D), // The + // glass + // width + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), // 0001 + new AxisAlignedBB(0.0D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D), // 0001 + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), // 0010 + new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 0.625D), // 0010 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), // 0011 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.625D, 1.0D, 0.625D), // 0011 + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), // 0100 + new AxisAlignedBB(0.375D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D), // 0100 + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), // 0101 + new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D), // 0101 + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), // 0110 + new AxisAlignedBB(0.375D, 0.0D, 0.0D, 1.0D, 1.0D, 0.625D), // 0110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), // 0111 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.625D), // 0111 + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), // 1000 + new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 1.0D), // 1000 + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), // 1001 + new AxisAlignedBB(0.0D, 0.0D, 0.375D, 0.625D, 1.0D, 1.0D), // 1001 + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), // 1010 + new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D), // 1010 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), // 1011 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D), // 1011 + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), // 1100 + new AxisAlignedBB(0.375D, 0.0D, 0.375D, 1.0D, 1.0D, 1.0D), // 1100 + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), // 1101 + new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 1.0D), // 1101 + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // 1110 + new AxisAlignedBB(0.375D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // 1110 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), // 1111 + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D) // 1111 + }; + + @Override + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing dir) + { + IBlockState thisBlock = world.getBlockState(pos); + if ((dir == EnumFacing.NORTH || dir == EnumFacing.SOUTH) && this.isConnectedEW(thisBlock, world, pos)) + return false; + if ((dir == EnumFacing.WEST || dir == EnumFacing.EAST) && this.isConnectedNS(thisBlock, world, pos)) + return false; + IBlockState otherBlock = world.getBlockState(pos.offset(dir.getOpposite())); + return this.buildSolidSide(otherBlock, thisBlock); + } + + protected boolean isConnectedEW(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + return this.canPaneConnectToBlock(west, state) || this.canPaneConnectToBlock(east, state); + } + + protected boolean isConnectedEWRecursive(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing dir) + { + boolean connectN = this.canPaneConnectToBlock(worldIn.getBlockState(pos.north()), state); + boolean connectS = this.canPaneConnectToBlock(worldIn.getBlockState(pos.south()), state); + boolean connectW = this.canPaneConnectToBlock(worldIn.getBlockState(pos.west()), state); + boolean connectE = this.canPaneConnectToBlock(worldIn.getBlockState(pos.east()), state); + if (connectN || connectS || connectW || connectE) + { + return (connectW || connectE) && !connectN && !connectS; + } + BlockPos next = pos.offset(dir, 1); + IBlockState nextState = worldIn.getBlockState(next); + if (nextState.getBlock() == this) + { + return this.isConnectedEWRecursive(nextState, worldIn, next, dir); + } + return dir == EnumFacing.DOWN && this.isPreferenceEW(state, worldIn, pos); + } + + protected boolean isConnectedNS(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + return this.canPaneConnectToBlock(north, state) || this.canPaneConnectToBlock(south, state); + } + + protected boolean isConnectedNSRecursive(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing dir) + { + boolean connectN = this.canPaneConnectToBlock(worldIn.getBlockState(pos.north()), state); + boolean connectS = this.canPaneConnectToBlock(worldIn.getBlockState(pos.south()), state); + boolean connectW = this.canPaneConnectToBlock(worldIn.getBlockState(pos.west()), state); + boolean connectE = this.canPaneConnectToBlock(worldIn.getBlockState(pos.east()), state); + if (connectN || connectS || connectW || connectE) + { + return (connectN || connectS) && !connectW && !connectE; + } + BlockPos next = pos.offset(dir, 1); + IBlockState nextState = worldIn.getBlockState(next); + if (nextState.getBlock() == this) + { + return this.isConnectedNSRecursive(nextState, worldIn, next, dir); + } + return dir == EnumFacing.DOWN && !this.isPreferenceEW(state, worldIn, pos); + } + + protected boolean isPreferenceEW(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + int solidsEW = (west.getBlock().isSideSolid(worldIn.getBlockState(pos.west()), worldIn, pos.west(), EnumFacing.EAST) ? 1 : 0) + + (east.getBlock().isSideSolid(worldIn.getBlockState(pos.east()), worldIn, pos.east(), EnumFacing.WEST) ? 1 : 0); + int solidsNS = (north.getBlock().isSideSolid(worldIn.getBlockState(pos.north()), worldIn, pos.north(), EnumFacing.SOUTH) ? 1 : 0) + + (south.getBlock().isSideSolid(worldIn.getBlockState(pos.south()), worldIn, pos.south(), EnumFacing.NORTH) ? 1 : 0); + return solidsEW > solidsNS; + } + + protected boolean canPaneConnectToBlock(IBlockState off, IBlockState blockState) + { + return off.getBlock() == this; + } + + protected boolean buildSolidSide(IBlockState off, IBlockState blockState) + { + return !(off.getBlock() == this); + } + + protected boolean buildSolidSideUD(BlockPos pos, EnumFacing testUD, IBlockAccess worldIn, IBlockState blockState) + { + BlockPos offPos = pos.offset(testUD, 1); + IBlockState off = worldIn.getBlockState(offPos); + if (off.getBlock() != this) + return true; + int connThis = (isConnectedEW(blockState, worldIn, pos) ? 2 : 0) + (isConnectedNS(blockState, worldIn, pos) ? 1 : 0); + int connOther = (isConnectedEW(off, worldIn, offPos) ? 2 : 0) + (isConnectedNS(off, worldIn, offPos) ? 1 : 0); + if (connThis == 0 && connOther == 0) + return false; + int trueThis = identifyHorizConnections(worldIn, pos, blockState); + int trueOther = identifyHorizConnections(worldIn, offPos, off); + + // Singles (no horizontal connections) -> does it match the plane of the + // one above or below? + if (connThis == 0 && (((trueOther & 3) == 0) && trueThis != 3 || ((trueOther & 12) == 0) && trueThis == 3)) + { + return false; + } + if (connOther == 0 && (((trueThis & 3) == 0) && trueOther != 3 || ((trueThis & 12) == 0) && trueOther == 3)) + { + return false; + } + + // Non-matching planes of connection, including all singles not already + // dealt with -> solid side + if (connThis != connOther) + return true; + + // One side of connection only - and matches plane of the one + // above/below -> no solid side + if (trueThis < 3 || trueThis == 4 || trueThis == 8) + { + return false; + } + if (trueOther < 3 || trueOther == 4 || trueOther == 8) + { + return false; + } + + // Special cases: T junctions above/below 2-way corners, or similar -> + // solid side because the glass can't connect properly + if ((trueThis & 7) != (trueOther & 7)) + { + return true; + } + if ((trueThis & 11) != (trueOther & 11)) + { + return true; + } + if ((trueThis & 13) != (trueOther & 13)) + { + return true; + } + if ((trueThis & 14) != (trueOther & 14)) + { + return true; + } + + // Anything still left, it's matching planes of connection and not a + // special case -> no solid side + return false; + } + + private int identifyHorizConnections(IBlockAccess worldIn, BlockPos pos, IBlockState state) + { + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + + boolean connectN = this.canPaneConnectToBlock(north, state); + boolean connectS = this.canPaneConnectToBlock(south, state); + boolean connectW = this.canPaneConnectToBlock(west, state); + boolean connectE = this.canPaneConnectToBlock(east, state); + + int connections = (connectN ? 1 : 0) + (connectS ? 1 : 0) + (connectW ? 1 : 0) + (connectE ? 1 : 0); + + if (!connectN && !connectS && !connectW && !connectE) + { + IBlockState above = worldIn.getBlockState(pos.up()); + IBlockState below = worldIn.getBlockState(pos.down()); + + if (below.getBlock() == this && this.isConnectedEWRecursive(below, worldIn, pos.down(), EnumFacing.DOWN)) + { + return 3; + } else if (above.getBlock() == this && this.isConnectedEWRecursive(above, worldIn, pos.up(), EnumFacing.UP)) + { + return 3; + } + if (below.getBlock() == this && this.isConnectedNSRecursive(below, worldIn, pos.down(), EnumFacing.DOWN)) + { + return 12; + } else if (above.getBlock() == this && this.isConnectedNSRecursive(above, worldIn, pos.up(), EnumFacing.UP)) + { + return 12; + } + if (this.isPreferenceEW(state, worldIn, pos)) + { + return 3; + } + } + + return (connectN ? 8 : 0) + (connectS ? 4 : 0) + (connectW ? 2 : 0) + (connectE ? 1 : 0); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + IBlockState above = worldIn.getBlockState(pos.up()); + IBlockState below = worldIn.getBlockState(pos.down()); + IBlockState north = worldIn.getBlockState(pos.north()); + IBlockState south = worldIn.getBlockState(pos.south()); + IBlockState west = worldIn.getBlockState(pos.west()); + IBlockState east = worldIn.getBlockState(pos.east()); + + boolean connectN = this.canPaneConnectToBlock(north, state); + boolean connectS = this.canPaneConnectToBlock(south, state); + boolean connectW = this.canPaneConnectToBlock(west, state); + boolean connectE = this.canPaneConnectToBlock(east, state); + + boolean plateD = buildSolidSideUD(pos, EnumFacing.DOWN, worldIn, state); + boolean plateU = buildSolidSideUD(pos, EnumFacing.UP, worldIn, state); + boolean plateN = this.buildSolidSide(north, state); + boolean plateS = this.buildSolidSide(south, state); + boolean plateW = this.buildSolidSide(west, state); + boolean plateE = this.buildSolidSide(east, state); + + int connections = (connectN ? 1 : 0) + (connectS ? 1 : 0) + (connectW ? 1 : 0) + (connectE ? 1 : 0); + GlassRotation rot = GlassRotation.N; + int cornerPiece = 0; + + if (connections == 4) + return getModel(state, 4, rot, plateD, false, false, plateU, 0); + + if (connections == 3) + { + if (!connectE) + rot = GlassRotation.S; + else if (!connectN) + rot = GlassRotation.E; + else if (!connectS) + rot = GlassRotation.W; + + return getModel(state, 3, rot, plateD, false, false, plateU, 0); + } + + if (connections == 0) + { + if (below.getBlock() == this && this.isConnectedEWRecursive(below, worldIn, pos.down(), EnumFacing.DOWN)) + { + rot = GlassRotation.E; + } else if (above.getBlock() == this && this.isConnectedEWRecursive(above, worldIn, pos.up(), EnumFacing.UP)) + { + rot = GlassRotation.E; + } + if (below.getBlock() == this && this.isConnectedNSRecursive(below, worldIn, pos.down(), EnumFacing.DOWN)) + { + } else if (above.getBlock() == this && this.isConnectedNSRecursive(above, worldIn, pos.up(), EnumFacing.UP)) + { + } else if (this.isPreferenceEW(state, worldIn, pos)) + { + rot = GlassRotation.E; + } + + return getModel(state, 1, rot, plateD, plateS, plateN, plateU, 0); + } + +// EnumFacing testUD = EnumFacing.UP; +// if (plateU && !plateD) +// { +// testUD = EnumFacing.DOWN; +// } +// if (plateD && !plateU) +// { +// testUD = EnumFacing.UP; +// } + + // Two glass connections in a flat plane - this also covers connected + // flat on one side only + if (connectW && connectE || connections == 1 && (connectW || connectE)) + { + rot = GlassRotation.E; + if (connectW && !plateU && buildSolidSideUD(pos.west(), EnumFacing.UP, worldIn, west)) + { + cornerPiece++; + } + if (connectW && !plateD && buildSolidSideUD(pos.west(), EnumFacing.DOWN, worldIn, west)) + { + cornerPiece += 5; + } + if (connectE && !plateU && buildSolidSideUD(pos.east(), EnumFacing.UP, worldIn, east)) + { + cornerPiece++; + if (connectW) + rot = GlassRotation.W; + } + if (connectE && !plateD && buildSolidSideUD(pos.east(), EnumFacing.DOWN, worldIn, east)) + { + cornerPiece += 5; + if (connectW) + rot = GlassRotation.W; + } + return getModel(state, 1, rot, plateD, plateW, plateE, plateU, cornerPiece); + } + + if (connectN && connectS || connections == 1) + { + if (connectN && !plateU && buildSolidSideUD(pos.north(), EnumFacing.UP, worldIn, north)) + { + if (!connectS) + { + cornerPiece |= 5; + if (!plateD) + rot = GlassRotation.S; + } else + { + cornerPiece |= 1; + rot = GlassRotation.S; + } + } + if (connectN && !plateD && buildSolidSideUD(pos.north(), EnumFacing.DOWN, worldIn, north)) + { + cornerPiece++; + if (connectS) + rot = GlassRotation.S; + } + if (connectS && !plateU && buildSolidSideUD(pos.south(), EnumFacing.UP, worldIn, south)) + { + if (cornerPiece == 0 && !plateD) + { + cornerPiece = 5; + rot = GlassRotation.S; + } else if ((cornerPiece & 3) < 2) + { + cornerPiece++; + } + } + if (connectS && !plateD && buildSolidSideUD(pos.south(), EnumFacing.DOWN, worldIn, south)) + { + if ((cornerPiece & 3) < 2) + { + cornerPiece++; + } else + { + cornerPiece |= 5; + // rot = GlassRotation.S; + } + } + return getModel(state, 1, rot, plateD, plateS, plateN, plateU, cornerPiece); + } + + // It must be two glass connections on a corner + + if (connectW && connectS) + rot = GlassRotation.S; + else if (connectS && connectE) + rot = GlassRotation.E; + else if (connectN && connectW) + rot = GlassRotation.W; + + return getModel(state, 2, rot, plateD, false, false, plateU, 0); + } + + private IBlockState getModel(IBlockState state, int model, GlassRotation rot, boolean plateD, boolean plateL, boolean plateR, boolean plateU, int cornerPiece) + { + int x = 0; + int y = rot.ordinal(); + if (y % 2 == 1) + y = y ^ 2; + int solids = (plateD ? 1 : 0) + (plateU ? 1 : 0) + (plateR ? 1 : 0) + (plateL ? 1 : 0); + switch (model) + { + case 1: + if (solids == 4) + return state.withProperty(MODEL, GlassModel.STANDARD_S4).withProperty(ROTATION, rot.get(y, 0)); + + if (solids == 3) + { + if (!plateD) + x = (y % 2 == 1) ? 3 : 1; + else if (!plateR) + { + x = 2; + y = y ^ 2; + } else if (!plateU) + x = (y % 2 == 1) ? 1 : 3; + return state.withProperty(MODEL, GlassModel.STANDARD_S3).withProperty(ROTATION, rot.get(y, x)); + } + + if (plateD && plateU) + return state.withProperty(MODEL, GlassModel.STANDARD_S2A).withProperty(ROTATION, rot.get(y, 0)); + + if (plateL && plateR) + return state.withProperty(MODEL, GlassModel.STANDARD_S2A).withProperty(ROTATION, rot.get(y, 1)); + + if (plateD && (plateR || plateL)) + { + return state.withProperty(MODEL, cornerPiece > 0 ? GlassModel.STANDARD_S2B : GlassModel.STANDARD_S2).withProperty(ROTATION, rot.get(plateL ? (y ^ 2) : y, 0)); + } + + if (plateU && (plateR || plateL)) + { + return state.withProperty(MODEL, cornerPiece > 0 ? GlassModel.STANDARD_S2B : GlassModel.STANDARD_S2).withProperty(ROTATION, rot.get(plateL ? (y ^ 2) : y, 2)); + } + + if (plateU || plateD) + return state.withProperty(MODEL, getCornerModel(cornerPiece)).withProperty(ROTATION, rot.get(y, (plateU || cornerPiece > 4) ? 2 : 0)); + + if (plateR || plateL) + return state.withProperty(MODEL, getCornerModel(cornerPiece)).withProperty(ROTATION, rot.get(plateL ? (y ^ 2) : y, 1 + (cornerPiece > 4 ? 2 : 0))); + + return state.withProperty(MODEL, GlassModel.STANDARD_PANE).withProperty(ROTATION, rot.get(y, 0)); + case 2: + if (plateU && plateD) + return state.withProperty(MODEL, GlassModel.CORNER_S2).withProperty(ROTATION, rot.get(y, 0)); + if (plateD) + return state.withProperty(MODEL, GlassModel.CORNER_S).withProperty(ROTATION, rot.get(y, 0)); + if (plateU) + return state.withProperty(MODEL, GlassModel.CORNER_S).withProperty(ROTATION, rot.get((y + 3) % 4, 2)); + + return state.withProperty(MODEL, GlassModel.CORNER).withProperty(ROTATION, rot.get(y, 0)); + case 3: + if (plateD && plateU) + return state.withProperty(MODEL, GlassModel.T_JUNCTION_S2).withProperty(ROTATION, rot.get(y, 0)); + if (plateD) + return state.withProperty(MODEL, GlassModel.T_JUNCTION_S).withProperty(ROTATION, rot.get(y, 0)); + if (plateU) + return state.withProperty(MODEL, GlassModel.T_JUNCTION_S).withProperty(ROTATION, rot.get(y ^ 2, 2)); + + return state.withProperty(MODEL, GlassModel.T_JUNCTION).withProperty(ROTATION, rot.get(y, x)); + case 4: + if (plateD && plateU) + return state.withProperty(MODEL, GlassModel.CROSSROADS_S2).withProperty(ROTATION, rot.get(y, 0)); + if (plateD) + return state.withProperty(MODEL, GlassModel.CROSSROADS_S).withProperty(ROTATION, rot.get(y, 0)); + if (plateU) + return state.withProperty(MODEL, GlassModel.CROSSROADS_S).withProperty(ROTATION, rot.get(y ^ 2, 2)); + default: + return state.withProperty(MODEL, GlassModel.CROSSROADS).withProperty(ROTATION, rot.get(y, x)); + } + } + + private Comparable getCornerModel(int cornerPiece) + { + if ((cornerPiece & 2) == 2) + return GlassModel.STANDARD_S1BB; + return cornerPiece > 0 ? GlassModel.STANDARD_S1B : GlassModel.STANDARD_S1; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState(); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return 0; + } + + @Override + public int setColor(int newColor, EntityPlayer p, Side side) + { + if (newColor >= 0 && this.color != newColor) + { + this.color = newColor; + return 1; + } + return 0; + } + + public void resetColor() + { + this.color = this.frame.defaultColor; + } + + @SideOnly(Side.CLIENT) + public static void updateGlassColors(int color1, int color2, int color3) + { + int changes = 0; + changes += GCBlocks.spaceGlassVanilla.setColor(color1, null, Side.CLIENT); + changes += GCBlocks.spaceGlassClear.setColor(color2, null, Side.CLIENT); + changes += GCBlocks.spaceGlassStrong.setColor(color3, null, Side.CLIENT); + + if (changes > 0) + BlockSpaceGlass.updateClientRender(); + } + + @SideOnly(Side.CLIENT) + public static void updateClientRender() + { + Minecraft.getMinecraft().renderGlobal.loadRenderers(); + // TODO: improve performance, this is re-rendering ALL chunks on client + // Can we somehow limit this to chunks containing BlockSpaceGlass? + // or else: don't do all the chunk redrawing at once, queue them? + } + + @Override + public String getShiftDescription(int meta) + { + switch (this.type) + { + case CLEAR: + return GCCoreUtil.translate("tile.space_glass.clear.description"); + case VANILLA: + return GCCoreUtil.translate("tile.space_glass.description"); + case STRONG: + default: + return GCCoreUtil.translate("tile.space_glass.strong.description"); + } + + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + public enum GlassModel implements IStringSerializable + { + + STANDARD_PANE("standard"), + CORNER("corner"), + T_JUNCTION("joint"), + CROSSROADS("joinx"), + STANDARD_S1("standards1"), + STANDARD_S1B("standards1b"), + STANDARD_S1BB("standards1bb"), + STANDARD_S2("standards2"), + STANDARD_S2A("standards2a"), + STANDARD_S2B("standards2b"), + STANDARD_S3("standards3"), + STANDARD_S4("standards4"), + CORNER_S("corner_s"), + CORNER_S2("corner_s2"), + T_JUNCTION_S("joint_s"), + T_JUNCTION_S2("joint_s2"), + CROSSROADS_S("joinx_s"), + CROSSROADS_S2("joinx_s2"); + + private final String name; + + private GlassModel(String name) + { + this.name = name; + } + + @Override + public String getName() + { + return this.name; + } + } + + public enum GlassRotation implements IStringSerializable + { + + N("0"), E("y"), S("yy"), W("yyy"), UN("u"), UE("uyyy"), US("uyy"), UW("uy"), UUN("uuyy"), UUE("uuyyy"), UUS("uu"), UUW("uuy"), DN("d"), DE("dy"), DS("dyy"), DW("dyyy"); + + private final String name; + + private GlassRotation(String name) + { + this.name = name; + } + + @Override + public String getName() + { + return this.name; + } + + private static GlassRotation get(int i) + { + return GlassRotation.values()[i]; + } + + private static GlassRotation get(int y, int x) + { + int i = y + x * 4; + return GlassRotation.values()[i]; + } + } + + public enum GlassFrame implements IStringSerializable + { + + PLAIN("plain", 0xfafaf7), TIN_DECO("tin_deco", 0xFFFFFF); + // TODO - more frame textures can be added in future - maybe only on + // Asteroids? + + private final String name; + private final int defaultColor; + + private GlassFrame(String name, int color) + { + this.name = name; + this.defaultColor = color; + } + + @Override + public String getName() + { + return this.name; + } + + public int getDefaultColor() + { + return this.defaultColor; + } + } + + public enum GlassType implements IStringSerializable + { + + VANILLA("vanilla"), CLEAR("clear"), STRONG("strong"); + + private final String name; + + private GlassType(String name) + { + this.name = name; + } + + @Override + public String getName() + { + return this.name; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceStationBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceStationBase.java new file mode 100644 index 00000000..40b2d52b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpaceStationBase.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySpaceStationBase; + +public class BlockSpaceStationBase extends BlockContainer implements ITileEntityProvider +{ + + public BlockSpaceStationBase(String assetName) + { + super(Material.ROCK); + this.setHardness(-1); + this.setTranslationKey(assetName); + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + return -1.0F; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity tileAt = worldIn.getTileEntity(pos); + + if (tileAt instanceof IMultiBlock) + { + ((IMultiBlock) tileAt).onDestroy(tileAt); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntitySpaceStationBase(); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof IMultiBlock) + { + ((IMultiBlock) tile).onCreate(worldIn, pos); + } + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return ItemStack.EMPTY; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpinThruster.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpinThruster.java new file mode 100644 index 00000000..0f85ba08 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockSpinThruster.java @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityThruster; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockSpinThruster extends BlockAdvanced implements IShiftDescription, ITileEntityProvider, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyBool ORIENTATION = PropertyBool.create("rev"); + + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.4F, 0.8F, 0.8F, 1.0F); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.0F, 0.8F, 0.8F, 0.6F); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.4F, 0.2F, 0.2F, 1.0F, 0.8F, 0.8F); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.0F, 0.2F, 0.2F, 0.6F, 0.8F, 0.8F); + + public BlockSpinThruster(String assetName) + { + super(Material.CIRCUITS); + this.setHardness(0.1F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(ORIENTATION, false)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case EAST: + return EAST_AABB; + case WEST: + return WEST_AABB; + case SOUTH: + return SOUTH_AABB; + default: + case NORTH: + return NORTH_AABB; + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canPlaceBlockAt(World world, BlockPos pos) + { + return world.isSideSolid(pos.west(), EnumFacing.EAST, true) || world.isSideSolid(pos.east(), EnumFacing.WEST, true) || world.isSideSolid(pos.north(), EnumFacing.SOUTH, true) + || world.isSideSolid(pos.south(), EnumFacing.NORTH, true); + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + if (facing.getAxis().isHorizontal() && this.canBlockStay(world, pos, facing)) + { + return this.getDefaultState().withProperty(FACING, facing); + } else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (this.canBlockStay(world, pos, enumfacing)) + { + return this.getDefaultState().withProperty(FACING, enumfacing); + } + } + return this.getDefaultState(); + } + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (this.getMetaFromState(state) == 0) + { + this.onBlockAdded(worldIn, pos, state); + } + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + int metadata = this.getMetaFromState(state); + + BlockPos baseBlock; + switch (metadata) + { + case 1: + baseBlock = pos.offset(EnumFacing.WEST); + break; + case 2: + baseBlock = pos.offset(EnumFacing.EAST); + break; + case 3: + baseBlock = pos.offset(EnumFacing.NORTH); + break; + case 4: + baseBlock = pos.offset(EnumFacing.SOUTH); + break; + default: + return; + } + + if (!worldIn.isRemote) + { + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) worldIn.provider).getSpinManager().refresh(baseBlock, true); + } + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing enumfacing = state.getValue(FACING); + + if (!this.canBlockStay(worldIn, pos, enumfacing)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + if (!worldIn.isRemote) + { + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) worldIn.provider).getSpinManager().refresh(pos, true); + } + } + } + + protected boolean canBlockStay(World world, BlockPos pos, EnumFacing facing) + { + return world.isSideSolid(pos.offset(facing.getOpposite()), facing, true); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + // TODO this is torch code as a placeholder, still need to adjust + // positioning and particle type + // Also make small thrust sounds + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + if (((WorldProviderSpaceStation) worldIn.provider).getSpinManager().thrustersFiring || rand.nextInt(80) == 0) + { + final int var6 = this.getMetaFromState(stateIn) & 7; + final double var7 = pos.getX() + 0.5F; + final double var9 = pos.getY() + 0.7F; + final double var11 = pos.getZ() + 0.5F; + final double var13 = 0.2199999988079071D; + final double var15 = 0.27000001072883606D; + + if (var6 == 1) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7 - var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + } else if (var6 == 2) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7 + var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + } else if (var6 == 3) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7, var9 + var13, var11 - var15, 0.0D, 0.0D, 0.0D); + } else if (var6 == 0) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var7, var9 + var13, var11 + var15, 0.0D, 0.0D, 0.0D); + } + } + } + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + IBlockState state = world.getBlockState(pos); + boolean orientation = state.getValue(ORIENTATION); + + EnumFacing currentFacing = state.getValue(FACING); +// if (this.canBlockStay(world, pos.offset(currentFacing.getOpposite()), currentFacing)) +// { + world.setBlockState(pos, state.withProperty(ORIENTATION, !orientation), 2); +// } + // TODO else + + if (world.provider instanceof WorldProviderSpaceStation && !world.isRemote) + { + WorldProviderSpaceStation worldOrbital = (WorldProviderSpaceStation) world.provider; + worldOrbital.getSpinManager().refresh(pos, true); + } + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityThruster(); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + final int facing = this.getMetaFromState(state) & 8; + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + WorldProviderSpaceStation worldOrbital = (WorldProviderSpaceStation) worldIn.provider; + worldOrbital.getSpinManager().removeThruster(pos, facing == 0); + worldOrbital.getSpinManager().updateSpinSpeed(); + } + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(ORIENTATION, meta >= 8); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex() + (state.getValue(ORIENTATION) ? 8 : 0); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, ORIENTATION); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockStairsGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockStairsGC.java new file mode 100644 index 00000000..c84bdc46 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockStairsGC.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.BlockStairs; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockStairsGC extends BlockStairs implements ISortableBlock +{ + + public BlockStairsGC(String name, IBlockState state) + { + super(state); + this.setTranslationKey(name); + this.useNeighborBrightness = true; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.STAIRS; + } + + // Override the interaction with StructuredComponent to do nothing here, + // otherwise messes up our Abandoned Base generation code merged from 1.8.9 + @Override + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state; + } + + // Override the interaction with StructuredComponent to do nothing here, + // otherwise messes up our Abandoned Base generation code merged from 1.8.9 + @Override + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state; + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(SHAPE, getStairsShape(state, worldIn, pos)); + } + + // Correct bugged version in vanilla Minecraft + private static BlockStairs.EnumShape getStairsShape(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + EnumFacing enumfacing = (EnumFacing) state.getValue(FACING); + IBlockState iblockstate = worldIn.getBlockState(pos.offset(enumfacing)); + boolean top = state.getValue(HALF) == EnumHalf.TOP; + + if (isBlockStairs(iblockstate) && state.getValue(HALF) == iblockstate.getValue(HALF)) + { + EnumFacing enumfacing1 = (EnumFacing) iblockstate.getValue(FACING); + + if (enumfacing1.getAxis() != ((EnumFacing) state.getValue(FACING)).getAxis() && isDifferentStairs(state, worldIn, pos, enumfacing1.getOpposite())) + { + if (enumfacing1 == (top ? enumfacing.rotateY() : enumfacing.rotateYCCW())) + { + return BlockStairs.EnumShape.OUTER_LEFT; + } + + return BlockStairs.EnumShape.OUTER_RIGHT; + } + } + + IBlockState iblockstate1 = worldIn.getBlockState(pos.offset(enumfacing.getOpposite())); + + if (isBlockStairs(iblockstate1) && state.getValue(HALF) == iblockstate1.getValue(HALF)) + { + EnumFacing enumfacing2 = (EnumFacing) iblockstate1.getValue(FACING); + + if (enumfacing2.getAxis() != ((EnumFacing) state.getValue(FACING)).getAxis() && isDifferentStairs(state, worldIn, pos, enumfacing2)) + { + if (enumfacing2 == (top ? enumfacing.rotateY() : enumfacing.rotateYCCW())) + { + return BlockStairs.EnumShape.INNER_LEFT; + } + + return BlockStairs.EnumShape.INNER_RIGHT; + } + } + + return BlockStairs.EnumShape.STRAIGHT; + } + + private static boolean isDifferentStairs(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + IBlockState iblockstate = worldIn.getBlockState(pos.offset(side)); + return !isBlockStairs(iblockstate) || iblockstate.getValue(FACING) != state.getValue(FACING) || iblockstate.getValue(HALF) != state.getValue(HALF); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTelemetry.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTelemetry.java new file mode 100644 index 00000000..79fa8db4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTelemetry.java @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.UUID; + +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockTelemetry extends BlockAdvancedTile implements IShiftDescription, ISortableBlock +{ + + // Metadata: 0-3 = orientation; bits 2,3 = reserved for future use + public BlockTelemetry(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = 0; + + switch (angle) + { + case 0: + change = 3; + break; + case 1: + change = 4; + break; + case 2: + change = 2; + break; + case 3: + change = 5; + break; + } + + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + final int metadata = getMetaFromState(world.getBlockState(pos)); + final int facing = metadata & 3; + int change = 0; + + switch (facing) + { + case 0: + change = 1; + break; + case 1: + change = 3; + break; + case 2: + change = 5; + break; + case 3: + change = 4; + break; + case 4: + change = 2; + break; + case 5: + change = 0; + } + change += (12 & metadata); + world.setBlockState(pos, getStateFromMeta(change), 2); + + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityTelemetry(); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityTelemetry) + { + ItemStack held = entityPlayer.inventory.getCurrentItem(); + // Look for Frequency Module + if (!held.isEmpty() && held.getItem() == GCItems.basicItem && held.getItemDamage() == 19) + { + NBTTagCompound fmData = held.getTagCompound(); + if (fmData != null && fmData.hasKey("linkedUUIDMost") && fmData.hasKey("linkedUUIDLeast")) + { + UUID uuid = new UUID(fmData.getLong("linkedUUIDMost"), fmData.getLong("linkedUUIDLeast")); + ((TileEntityTelemetry) tile).addTrackedEntity(uuid); + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.telemetry_succeed.message"))); + } else + { + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.telemetry_fail.message"))); + + if (fmData == null) + { + fmData = new NBTTagCompound(); + held.setTagCompound(fmData); + } + } + fmData.setInteger("teCoordX", pos.getX()); + fmData.setInteger("teCoordY", pos.getY()); + fmData.setInteger("teCoordZ", pos.getZ()); + fmData.setInteger("teDim", GCCoreUtil.getDimensionID(world)); + return true; + } + + ItemStack wearing = GCPlayerStats.get(entityPlayer).getFrequencyModuleInSlot(); + if (wearing != null) + { + if (wearing.hasTagCompound() && wearing.getTagCompound().hasKey("teDim")) + { + return false; + } + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.telemetry_fail_wearing_it.message"))); + } else + { + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.telemetry_fail_no_frequency_module.message"))); + } + } + } + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTier1TreasureChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTier1TreasureChest.java new file mode 100644 index 00000000..a1b04ea7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTier1TreasureChest.java @@ -0,0 +1,547 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.Iterator; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.ParticleManager; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class BlockTier1TreasureChest extends BlockContainer implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0.0, 0.0625, 0.9375, 0.875, 0.9375); + + public BlockTier1TreasureChest(String assetName) + { + super(Material.ROCK); + this.setSoundType(SoundType.STONE); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + this.setHardness(100000.0F); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.ENTITYBLOCK_ANIMATED; + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.checkForSurroundingChests(worldIn, pos, state); + Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); + + while (iterator.hasNext()) + { + EnumFacing enumfacing = (EnumFacing) iterator.next(); + BlockPos blockpos1 = pos.offset(enumfacing); + IBlockState iblockstate1 = worldIn.getBlockState(blockpos1); + + if (iblockstate1.getBlock() == this) + { + this.checkForSurroundingChests(worldIn, blockpos1, iblockstate1); + } + } + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing()); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(MathHelper.floor((double) (placer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3).getOpposite(); + state = state.withProperty(FACING, enumfacing); + BlockPos blockpos1 = pos.north(); + BlockPos blockpos2 = pos.south(); + BlockPos blockpos3 = pos.west(); + BlockPos blockpos4 = pos.east(); + boolean flag = this == worldIn.getBlockState(blockpos1).getBlock(); + boolean flag1 = this == worldIn.getBlockState(blockpos2).getBlock(); + boolean flag2 = this == worldIn.getBlockState(blockpos3).getBlock(); + boolean flag3 = this == worldIn.getBlockState(blockpos4).getBlock(); + + if (!flag && !flag1 && !flag2 && !flag3) + { + worldIn.setBlockState(pos, state, 3); + } else if (enumfacing.getAxis() == EnumFacing.Axis.X && (flag || flag1)) + { + if (flag) + { + worldIn.setBlockState(blockpos1, state, 3); + } else + { + worldIn.setBlockState(blockpos2, state, 3); + } + + worldIn.setBlockState(pos, state, 3); + } else if (enumfacing.getAxis() == EnumFacing.Axis.Z && (flag2 || flag3)) + { + if (flag2) + { + worldIn.setBlockState(blockpos3, state, 3); + } else + { + worldIn.setBlockState(blockpos4, state, 3); + } + + worldIn.setBlockState(pos, state, 3); + } + } + + public IBlockState checkForSurroundingChests(World worldIn, BlockPos pos, IBlockState state) + { + if (worldIn.isRemote) + { + return state; + } else + { + IBlockState iblockstate1 = worldIn.getBlockState(pos.north()); + IBlockState iblockstate2 = worldIn.getBlockState(pos.south()); + IBlockState iblockstate3 = worldIn.getBlockState(pos.west()); + IBlockState iblockstate4 = worldIn.getBlockState(pos.east()); + EnumFacing enumfacing = (EnumFacing) state.getValue(FACING); + Block block = iblockstate1.getBlock(); + Block block1 = iblockstate2.getBlock(); + Block block2 = iblockstate3.getBlock(); + Block block3 = iblockstate4.getBlock(); + + if (block != this && block1 != this) + { + boolean flag = block.isFullBlock(iblockstate1); + boolean flag1 = block1.isFullBlock(iblockstate2); + + if (block2 == this || block3 == this) + { + BlockPos blockpos2 = block2 == this ? pos.west() : pos.east(); + IBlockState iblockstate7 = worldIn.getBlockState(blockpos2.north()); + IBlockState iblockstate8 = worldIn.getBlockState(blockpos2.south()); + enumfacing = EnumFacing.SOUTH; + EnumFacing enumfacing2; + + if (block2 == this) + { + enumfacing2 = (EnumFacing) iblockstate3.getValue(FACING); + } else + { + enumfacing2 = (EnumFacing) iblockstate4.getValue(FACING); + } + + if (enumfacing2 == EnumFacing.NORTH) + { + enumfacing = EnumFacing.NORTH; + } + + Block block6 = iblockstate7.getBlock(); + Block block7 = iblockstate8.getBlock(); + + if ((flag || block6.isFullBlock(iblockstate7)) && !flag1 && !block7.isFullBlock(iblockstate8)) + { + enumfacing = EnumFacing.SOUTH; + } + + if ((flag1 || block7.isFullBlock(iblockstate8)) && !flag && !block6.isFullBlock(iblockstate7)) + { + enumfacing = EnumFacing.NORTH; + } + } + } else + { + BlockPos blockpos1 = block == this ? pos.north() : pos.south(); + IBlockState iblockstate5 = worldIn.getBlockState(blockpos1.west()); + IBlockState iblockstate6 = worldIn.getBlockState(blockpos1.east()); + enumfacing = EnumFacing.EAST; + EnumFacing enumfacing1; + + if (block == this) + { + enumfacing1 = (EnumFacing) iblockstate1.getValue(FACING); + } else + { + enumfacing1 = (EnumFacing) iblockstate2.getValue(FACING); + } + + if (enumfacing1 == EnumFacing.WEST) + { + enumfacing = EnumFacing.WEST; + } + + Block block4 = iblockstate5.getBlock(); + Block block5 = iblockstate6.getBlock(); + + if ((block2.isFullBlock(iblockstate3) || block4.isFullBlock(iblockstate5)) && !block3.isFullBlock(iblockstate4) && !block5.isFullBlock(iblockstate6)) + { + enumfacing = EnumFacing.EAST; + } + + if ((block3.isFullBlock(iblockstate4) || block5.isFullBlock(iblockstate6)) && !block2.isFullBlock(iblockstate3) && !block4.isFullBlock(iblockstate5)) + { + enumfacing = EnumFacing.WEST; + } + } + + state = state.withProperty(FACING, enumfacing); + worldIn.setBlockState(pos, state, 3); + return state; + } + } + + public IBlockState correctFacing(World worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = null; + Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); + + while (iterator.hasNext()) + { + EnumFacing enumfacing1 = (EnumFacing) iterator.next(); + IBlockState iblockstate1 = worldIn.getBlockState(pos.offset(enumfacing1)); + + if (iblockstate1.getBlock() == this) + { + return state; + } + + if (iblockstate1.getBlock().isFullBlock(iblockstate1)) + { + if (enumfacing != null) + { + enumfacing = null; + break; + } + + enumfacing = enumfacing1; + } + } + + if (enumfacing != null) + { + return state.withProperty(FACING, enumfacing.getOpposite()); + } else + { + EnumFacing enumfacing2 = (EnumFacing) state.getValue(FACING); + IBlockState state1 = worldIn.getBlockState(pos.offset(enumfacing2)); + + if (state1.getBlock().isFullBlock(state1)) + { + enumfacing2 = enumfacing2.getOpposite(); + } + + state1 = worldIn.getBlockState(pos.offset(enumfacing2)); + if (state1.getBlock().isFullBlock(state1)) + { + enumfacing2 = enumfacing2.rotateY(); + } + + state1 = worldIn.getBlockState(pos.offset(enumfacing2)); + if (state1.getBlock().isFullBlock(state1)) + { + enumfacing2 = enumfacing2.getOpposite(); + } + + return state.withProperty(FACING, enumfacing2); + } + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + int i = 0; + BlockPos blockpos1 = pos.west(); + BlockPos blockpos2 = pos.east(); + BlockPos blockpos3 = pos.north(); + BlockPos blockpos4 = pos.south(); + + if (worldIn.getBlockState(blockpos1).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos1)) + { + return false; + } + + ++i; + } + + if (worldIn.getBlockState(blockpos2).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos2)) + { + return false; + } + + ++i; + } + + if (worldIn.getBlockState(blockpos3).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos3)) + { + return false; + } + + ++i; + } + + if (worldIn.getBlockState(blockpos4).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos4)) + { + return false; + } + + ++i; + } + + return i <= 1; + } + + private boolean isDoubleChest(World worldIn, BlockPos pos) + { + if (worldIn.getBlockState(pos).getBlock() != this) + { + return false; + } else + { + Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); + EnumFacing enumfacing; + + do + { + if (!iterator.hasNext()) + { + return false; + } + + enumfacing = (EnumFacing) iterator.next(); + } while (worldIn.getBlockState(pos.offset(enumfacing)).getBlock() != this); + + return true; + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityTreasureChest) + { + tileentity.updateContainingBlockInfo(); + } + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof IInventory) + { + InventoryHelper.dropInventoryItems(worldIn, pos, (IInventory) tileentity); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } else + { + TileEntity tile = worldIn.getTileEntity(pos); + playerIn.displayGUIChest((IInventory) tile); + return true; + } + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityTreasureChest(); + } + + public int isProvidingWeakPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side) + { + if (!this.canProvidePower(state)) + { + return 0; + } else + { + int i = 0; + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityTreasureChest) + { + i = ((TileEntityTreasureChest) tileentity).numPlayersUsing; + } + + return MathHelper.clamp(i, 0, 15); + } + } + + public int isProvidingStrongPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side) + { + return side == EnumFacing.UP ? this.isProvidingWeakPower(worldIn, pos, state, side) : 0; + } + + private boolean isBlocked(World worldIn, BlockPos pos) + { + return this.isBelowSolidBlock(worldIn, pos) || this.isOcelotSittingOnChest(worldIn, pos); + } + + private boolean isBelowSolidBlock(World worldIn, BlockPos pos) + { + return worldIn.isSideSolid(pos.up(), EnumFacing.DOWN, false); + } + + private boolean isOcelotSittingOnChest(World worldIn, BlockPos pos) + { + Iterator iterator = worldIn.getEntitiesWithinAABB(EntityOcelot.class, + new AxisAlignedBB((double) pos.getX(), (double) (pos.getY() + 1), (double) pos.getZ(), (double) (pos.getX() + 1), (double) (pos.getY() + 2), (double) (pos.getZ() + 1))).iterator(); + EntityOcelot entityocelot; + + do + { + if (!iterator.hasNext()) + { + return false; + } + + Entity entity = (Entity) iterator.next(); + entityocelot = (EntityOcelot) entity; + } while (!entityocelot.isSitting()); + + return true; + } + + @Override + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean addDestroyEffects(World world, BlockPos pos, ParticleManager manager) + { + return false; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.TREASURE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTileGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTileGC.java new file mode 100644 index 00000000..45bf65e1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTileGC.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * An advanced block class that is to be extended for wrenching capabilities. + */ +public abstract class BlockTileGC extends BlockAdvanced implements ITileEntityProvider +{ + + public BlockTileGC(Material material) + { + super(material); + this.hasTileEntity = true; + } + + /** + * ejects contained items into the world, and notifies neighbours of an + * update, as appropriate + * + * Note: breakBlock is called when placing blocks getTileEntity() at this + * point will give the NEW block's tileEntity, if the old block's tile is + * already invalid so: do NOT invalidate old tileEntities before breaking + * blocks + */ + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (worldIn.getTileEntity(pos) instanceof IInventory) + { + InventoryHelper.dropInventoryItems(worldIn, pos, (IInventory) worldIn.getTileEntity(pos)); + } + super.breakBlock(worldIn, pos, state); + } + + /** + * Called when the block receives a BlockEvent - see World.addBlockEvent. By + * default, passes it on to the tile entity at this location. Args: world, + * x, y, z, blockID, EventID, event parameter + */ + @Override + public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int eventID, int eventParam) + { + super.eventReceived(state, worldIn, pos, eventID, eventParam); + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity != null && tileentity.receiveClientEvent(eventID, eventParam); + } + + /** + * Returns the TileEntity used by this block. You should use the metadata + * sensitive version of this to get the maximum optimization! + */ + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return null; + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTorchBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTorchBase.java new file mode 100644 index 00000000..85cf080f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTorchBase.java @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockTorchBase extends Block +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", facing -> facing != EnumFacing.DOWN); + protected static final AxisAlignedBB STANDING_AABB = new AxisAlignedBB(0.4000000059604645D, 0.0D, 0.4000000059604645D, 0.6000000238418579D, 0.6000000238418579D, 0.6000000238418579D); + protected static final AxisAlignedBB TORCH_NORTH_AABB = new AxisAlignedBB(0.3499999940395355D, 0.20000000298023224D, 0.699999988079071D, 0.6499999761581421D, 0.800000011920929D, 1.0D); + protected static final AxisAlignedBB TORCH_SOUTH_AABB = new AxisAlignedBB(0.3499999940395355D, 0.20000000298023224D, 0.0D, 0.6499999761581421D, 0.800000011920929D, 0.30000001192092896D); + protected static final AxisAlignedBB TORCH_WEST_AABB = new AxisAlignedBB(0.699999988079071D, 0.20000000298023224D, 0.3499999940395355D, 1.0D, 0.800000011920929D, 0.6499999761581421D); + protected static final AxisAlignedBB TORCH_EAST_AABB = new AxisAlignedBB(0.0D, 0.20000000298023224D, 0.3499999940395355D, 0.30000001192092896D, 0.800000011920929D, 0.6499999761581421D); + + public BlockTorchBase(Material materialIn) + { + super(materialIn); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case EAST: + return TORCH_EAST_AABB; + case WEST: + return TORCH_WEST_AABB; + case SOUTH: + return TORCH_SOUTH_AABB; + case NORTH: + return TORCH_NORTH_AABB; + default: + return STANDING_AABB; + } + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + @Override + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + if (this.canPlaceAt(worldIn, pos, facing)) + { + return this.getDefaultState().withProperty(FACING, facing); + } else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (worldIn.isSideSolid(pos.offset(enumfacing.getOpposite()), enumfacing, true)) + { + return this.getDefaultState().withProperty(FACING, enumfacing); + } + } + + return this.getDefaultState(); + } + } + + protected boolean canPlaceAt(World worldIn, BlockPos pos, EnumFacing facing) + { + BlockPos blockpos = pos.offset(facing.getOpposite()); + boolean flag = facing.getAxis().isHorizontal(); + return flag && worldIn.isSideSolid(blockpos, facing, true) || facing.equals(EnumFacing.UP) && this.canPlaceOn(worldIn, blockpos); + } + + protected boolean canPlaceOn(World worldIn, BlockPos pos) + { + IBlockState state = worldIn.getBlockState(pos); + Block block = state.getBlock(); + if (block.isSideSolid(state, worldIn, pos, EnumFacing.UP)) + { + return true; + } else + { + return block.canPlaceTorchOnTop(state, worldIn, pos); + } + } + + protected boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) + { + if (state.getBlock() == this && this.canPlaceAt(worldIn, pos, (EnumFacing) state.getValue(FACING))) + { + return true; + } else + { + if (state.getBlock() == this) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + return false; + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState(); + + switch (meta) + { + case 1: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.EAST); + break; + case 2: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.WEST); + break; + case 3: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.SOUTH); + break; + case 4: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.NORTH); + break; + case 5: + default: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.UP); + } + + return iblockstate; + } + + @Override + public int getMetaFromState(IBlockState state) + { + int i = 0; + + switch ((EnumFacing) state.getValue(FACING)) + { + case EAST: + i = i | 1; + break; + case WEST: + i = i | 2; + break; + case SOUTH: + i = i | 3; + break; + case NORTH: + i = i | 4; + break; + case DOWN: + case UP: + default: + i = i | 5; + } + + return i; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTransmitter.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTransmitter.java new file mode 100644 index 00000000..69dae629 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockTransmitter.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; + +public abstract class BlockTransmitter extends BlockAdvanced +{ + + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool DOWN = PropertyBool.create("down"); + public static final PropertyBool NORTH = PropertyBool.create("north"); + public static final PropertyBool EAST = PropertyBool.create("east"); + public static final PropertyBool SOUTH = PropertyBool.create("south"); + public static final PropertyBool WEST = PropertyBool.create("west"); + + public BlockTransmitter(Material material) + { + super(material); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + + TileEntity tile = worldIn.getTileEntity(pos); + + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_UPDATE_WIRE_BOUNDS, GCCoreUtil.getDimensionID((World) worldIn), new Object[] + {pos}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID((World) worldIn), pos.getX(), pos.getY(), pos.getZ(), 10.0D)); + + if (tile instanceof INetworkConnection) + { + ((INetworkConnection) tile).refresh(); + } + } + + public abstract NetworkType getNetworkType(IBlockState state); + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof ITransmitter) + { + TileEntity[] connectable = new TileEntity[6]; + switch (this.getNetworkType(state)) + { + case FLUID: + connectable = OxygenUtil.getAdjacentFluidConnections(tileEntity); + break; + case POWER: + connectable = EnergyUtil.getAdjacentPowerConnections(tileEntity); + break; + default: + break; + } + + return state.withProperty(DOWN, Boolean.valueOf(connectable[EnumFacing.DOWN.ordinal()] != null)).withProperty(UP, Boolean.valueOf(connectable[EnumFacing.UP.ordinal()] != null)) + .withProperty(NORTH, Boolean.valueOf(connectable[EnumFacing.NORTH.ordinal()] != null)).withProperty(EAST, Boolean.valueOf(connectable[EnumFacing.EAST.ordinal()] != null)) + .withProperty(SOUTH, Boolean.valueOf(connectable[EnumFacing.SOUTH.ordinal()] != null)).withProperty(WEST, Boolean.valueOf(connectable[EnumFacing.WEST.ordinal()] != null)); + } + + return state; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockUnlitTorch.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockUnlitTorch.java new file mode 100644 index 00000000..68ae38e9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockUnlitTorch.java @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IOxygenReliantBlock; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; + +public class BlockUnlitTorch extends BlockTorchBase implements IOxygenReliantBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", facing -> facing != EnumFacing.DOWN); + + public boolean lit; + public Block litVersion; + public Block unlitVersion; + public Block fallback; + public static HashMap registeredTorches = new HashMap<>(); + + public BlockUnlitTorch(boolean lit, String assetName) + { + super(Material.CIRCUITS); + this.setTickRandomly(true); + this.lit = lit; + this.setLightLevel(lit ? 0.9375F : 0.2F); + this.setHardness(0.0F); + this.setSoundType(SoundType.WOOD); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); + } + + public static void register(BlockUnlitTorch unlittorch, BlockUnlitTorch littorch, Block vanillatorch) + { + littorch.litVersion = littorch; + littorch.unlitVersion = unlittorch; + littorch.fallback = vanillatorch; + unlittorch.litVersion = littorch; + unlittorch.unlitVersion = unlittorch; + unlittorch.fallback = vanillatorch; + registeredTorches.put(littorch, vanillatorch); + GCBlocks.itemChanges.put(unlittorch, littorch); + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return null; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : FACING.getAllowedValues()) + { + if (this.canPlaceAt(worldIn, pos, enumfacing)) + { + return true; + } + } + + return false; + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (state.getBlock().getMetaFromState(state) == 0) + { + this.onBlockAdded(worldIn, pos, state); + } else + { + this.checkOxygen(worldIn, pos, state); + } + } + + @Override + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (this.checkForDrop(worldIn, pos, state)) + { + this.checkOxygen(worldIn, pos, state); + } + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (this.checkForDrop(worldIn, pos, state)) + { + EnumFacing enumfacing = state.getValue(FACING); + EnumFacing.Axis enumfacingAxis = enumfacing.getAxis(); + EnumFacing enumfacing1 = enumfacing.getOpposite(); + boolean flag = false; + + if (enumfacingAxis.isHorizontal() && !worldIn.isSideSolid(pos.offset(enumfacing1), enumfacing, true)) + { + flag = true; + } else if (enumfacingAxis.isVertical() && !this.canPlaceOn(worldIn, pos.offset(enumfacing1))) + { + flag = true; + } + + if (flag) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } else + { + this.checkOxygen(worldIn, pos, state); + } + } + } + + private void checkOxygen(World world, BlockPos pos, IBlockState state) + { + if (world.provider instanceof IGalacticraftWorldProvider) + { + if (OxygenUtil.checkTorchHasOxygen(world, pos)) + { + this.onOxygenAdded(world, pos, state); + } else + { + this.onOxygenRemoved(world, pos, state); + } + } else + { + EnumFacing enumfacing = state.getValue(FACING); + world.setBlockState(pos, this.fallback.getDefaultState().withProperty(FACING, enumfacing), 2); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + EnumFacing enumfacing = stateIn.getValue(FACING); + double d0 = (double) pos.getX() + 0.5D; + double d1 = (double) pos.getY() + 0.7D; + double d2 = (double) pos.getZ() + 0.5D; + double d3 = 0.22D; + double d4 = 0.27D; + + if (enumfacing.getAxis().isHorizontal()) + { + EnumFacing enumfacing1 = enumfacing.getOpposite(); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 + d4 * (double) enumfacing1.getXOffset(), d1 + d3, d2 + d4 * (double) enumfacing1.getZOffset(), 0.0D, 0.0D, 0.0D, new int[0]); + if (this == GCBlocks.unlitTorchLit) + { + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + d4 * (double) enumfacing1.getXOffset(), d1 + d3, d2 + d4 * (double) enumfacing1.getZOffset(), 0.0D, 0.0D, 0.0D, new int[0]); + } + } else + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D, new int[0]); + if (this == GCBlocks.unlitTorchLit) + { + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0, d1, d2, 0.0D, 0.0D, 0.0D, new int[0]); + } + } + } + + @Override + public void onOxygenRemoved(World world, BlockPos pos, IBlockState state) + { + if (world.provider instanceof IGalacticraftWorldProvider) + { + EnumFacing enumfacing = state.getValue(FACING); + world.setBlockState(pos, this.unlitVersion.getDefaultState().withProperty(FACING, enumfacing), 2); + } + } + + @Override + public void onOxygenAdded(World world, BlockPos pos, IBlockState state) + { + if (world.provider instanceof IGalacticraftWorldProvider) + { + EnumFacing enumfacing = state.getValue(FACING); + world.setBlockState(pos, this.litVersion.getDefaultState().withProperty(FACING, enumfacing), 2); + } + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this.litVersion)); + return ret; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] + {FACING}); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockWallGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockWallGC.java new file mode 100644 index 00000000..9c164139 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/BlockWallGC.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public class BlockWallGC extends Block implements ISortableBlock +{ + //@noformat + protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] + { + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), + new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), + new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), + new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), + new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), + new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D) + }; + + protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] + { + AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), + AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), + AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), + AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), + AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), + AABB_BY_INDEX[15].setMaxY(1.5D) + }; + + //@format + public final static PropertyBool UP = PropertyBool.create("up"); + public final static PropertyBool NORTH = PropertyBool.create("north"); + public final static PropertyBool EAST = PropertyBool.create("east"); + public final static PropertyBool SOUTH = PropertyBool.create("south"); + public final static PropertyBool WEST = PropertyBool.create("west"); + public final static PropertyEnum VARIANT = PropertyEnum.create("variant", BlockType.class); + + public BlockWallGC(String name) + { + super(Material.ROCK); + this.setHardness(1.5F); + this.setResistance(2.5F); + this.setDefaultState(this.getDefaultState().withProperty(UP, Boolean.FALSE).withProperty(NORTH, Boolean.FALSE).withProperty(EAST, Boolean.FALSE).withProperty(SOUTH, Boolean.FALSE).withProperty(WEST, Boolean.FALSE).withProperty(VARIANT, BlockType.TIN_1_WALL)); + this.setTranslationKey(name); + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isPassable(IBlockAccess world, BlockPos pos) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face != EnumFacing.UP && face != EnumFacing.DOWN ? BlockFaceShape.MIDDLE_POLE_THICK : BlockFaceShape.CENTER_BIG; + } + + @Override + public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + return AABB_BY_INDEX[getAABBIndex(state)]; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + blockState = this.getActualState(blockState, worldIn, pos); + return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)]; + } + + private static int getAABBIndex(IBlockState state) + { + int i = 0; + + if (state.getValue(NORTH)) + { + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if (state.getValue(EAST)) + { + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if (state.getValue(SOUTH)) + { + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if (state.getValue(WEST)) + { + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + return i; + } + + private boolean canConnectTo(IBlockAccess world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + Block block = state.getBlock(); + return block == Blocks.BARRIER ? false : block != this && !(block instanceof BlockFenceGate) ? block.getMaterial(state).isOpaque() && block.isFullCube(state) ? block.getMaterial(state) != Material.GOURD : false : true; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int i = 0; i < 6; ++i) + { + list.add(new ItemStack(this, 1, i)); + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public int damageDropped(IBlockState state) + { + return this.getMetaFromState(state); + } + + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return side == EnumFacing.DOWN ? super.shouldSideBeRendered(blockState, blockAccess, pos, side) : true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockType.values()[meta % 6]); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(VARIANT).ordinal(); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) + { + boolean flag = this.canConnectTo(world, pos.north()); + boolean flag1 = this.canConnectTo(world, pos.east()); + boolean flag2 = this.canConnectTo(world, pos.south()); + boolean flag3 = this.canConnectTo(world, pos.west()); + boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3; + return state.withProperty(UP, !flag4 || !world.isAirBlock(pos.up())).withProperty(NORTH, flag).withProperty(EAST, flag1).withProperty(SOUTH, flag2).withProperty(WEST, flag3); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, WEST, SOUTH, VARIANT}); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.WALLS; + } + + public enum BlockType implements IStringSerializable + { + + TIN_1_WALL("tin_1_wall"), TIN_2_WALL("tin_2_wall"), MOON_STONE_WALL("moon_stone_wall"), MOON_DUNGEON_BRICK_WALL("moon_dungeon_brick_wall"), MARS_COBBLESTONE_WALL("mars_cobblestone_wall"), MARS_DUNGEON_BRICK_WALL("mars_dungeon_brick_wall"); + + private String name; + + BlockType(String name) + { + this.name = name; + } + + @Override + public String toString() + { + return this.getName(); + } + + @Override + public String getName() + { + return this.name; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/ISortableBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/ISortableBlock.java new file mode 100644 index 00000000..73055c8f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/ISortableBlock.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; + +public interface ISortableBlock +{ + + EnumSortCategoryBlock getCategory(int meta); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/MaterialOleaginous.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/MaterialOleaginous.java new file mode 100644 index 00000000..dc2d882c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/blocks/MaterialOleaginous.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.blocks; + +import net.minecraft.block.BlockDynamicLiquid; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockStaticLiquid; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.MaterialLiquid; + +import micdoodle8.mods.galacticraft.core.util.JavaUtil; + +//This avoids water and oil mixing, by being a different material +public class MaterialOleaginous extends MaterialLiquid +{ + + private Class blockLiquidName = BlockLiquid.class; + private Class blockLiquidStaticName = BlockStaticLiquid.class; + private Class blockLiquidDynamicName = BlockDynamicLiquid.class; + + public MaterialOleaginous(MapColor color) + { + super(color); + this.setNoPushMobility(); + } + + // Water and other liquids cannot displace oil, but solid blocks can + @Override + public boolean blocksMovement() + { + return JavaUtil.instance.isCalledBy(blockLiquidStaticName, blockLiquidName, blockLiquidDynamicName); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/BubbleRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/BubbleRenderer.java new file mode 100644 index 00000000..28c5ca72 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/BubbleRenderer.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProviderColored; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; + +import org.lwjgl.opengl.GL11; + +public class BubbleRenderer +{ + + private static IBakedModel sphere; + private static List bubbleProviders = Lists.newArrayList(); + + public static void clearBubbles() + { + bubbleProviders.clear(); + } + + public static void addBubble(IBubbleProviderColored tile) + { + bubbleProviders.add(tile); + } + + private static void updateModels() + { + try + { + sphere = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "sphere.obj"), ImmutableList.of("Sphere")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + + public static void renderBubbles(EntityPlayer player, float partialTicks) + { + if (bubbleProviders.isEmpty()) + { + return; + } + + double interpPosX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; + double interpPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; + double interpPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; + + if (sphere == null) + { + updateModels(); + } + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + GlStateManager.pushMatrix(); + + GlStateManager.enableRescaleNormal(); + GlStateManager.enableBlend(); + GlStateManager.disableLighting(); + GlStateManager.disableCull(); + + GlStateManager.alphaFunc(GL11.GL_GREATER, 0.1F); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.matrixMode(GL11.GL_TEXTURE); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GlStateManager.depthMask(false); + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + + for (IBubbleProviderColored provider : bubbleProviders) + { + TileEntity tile = (TileEntity) provider; + if (!provider.getBubbleVisible()) + { + continue; + } + + GL11.glPushMatrix(); + + float x = (float) (tile.getPos().getX() - interpPosX); + float y = (float) (tile.getPos().getY() - interpPosY); + float z = (float) (tile.getPos().getZ() - interpPosZ); + + GL11.glTranslatef(x + 0.5F, y + 1.0F, z + 0.5F); + GL11.glScalef(provider.getBubbleSize(), provider.getBubbleSize(), provider.getBubbleSize()); + + Vector3 colorVec = provider.getColor(); + int color = ColorUtil.to32BitColor(30, (int) (colorVec.z * 255), (int) (colorVec.y * 255), (int) (colorVec.x * 255)); + ClientUtil.drawBakedModelColored(sphere, color); + + GL11.glPopMatrix(); + } + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/CloudRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/CloudRenderer.java new file mode 100644 index 00000000..c4188ddc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/CloudRenderer.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; + +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CloudRenderer extends IRenderHandler +{ + + @Override + @SideOnly(Side.CLIENT) + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + // Do nothing + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/DynamicTextureProper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/DynamicTextureProper.java new file mode 100644 index 00000000..15bd8892 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/DynamicTextureProper.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.awt.image.BufferedImage; + +import net.minecraft.client.renderer.texture.DynamicTexture; + +public class DynamicTextureProper extends DynamicTexture +{ + + private boolean updateFlag = false; + private final int width; // We could transform these in the base class to + // protected + private final int height; // but whatever. + + public DynamicTextureProper(BufferedImage img) + { + this(img.getWidth(), img.getHeight()); + this.update(img); + } + + public DynamicTextureProper(int width, int height) + { + super(width, height); + this.width = width; + this.height = height; + } + + public void update(BufferedImage img) + { + img.getRGB(0, 0, this.width, this.height, this.getTextureData(), 0, this.width); + this.updateFlag = true; + } + + @Override + public int getGlTextureId() + { + if (this.updateFlag) + { + this.updateFlag = false; + this.updateDynamicTexture(); + } + return super.getGlTextureId(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/EventHandlerClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/EventHandlerClient.java new file mode 100644 index 00000000..252a6a1c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/EventHandlerClient.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.client.event.RenderPlayerEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.event.client.CelestialBodyRenderEvent; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import com.google.common.base.Function; + +import org.lwjgl.opengl.GL11; + +public class EventHandlerClient +{ + + public static Minecraft mc = FMLClientHandler.instance().getClient(); + public static boolean sneakRenderOverride; + public static IBakedModel[] fluidPipeModels = new IBakedModel[6]; + + @SubscribeEvent(priority = EventPriority.LOWEST) // Lowest priority to do + // the PushMatrix last, + // just before vanilla + // RenderPlayer - this also + // means if it gets + // cancelled first by + // another mod, this will + // never be called + public void onRenderPlayerPre(RenderPlayerEvent.Pre event) + { + GL11.glPushMatrix(); + + final EntityPlayer player = event.getEntityPlayer(); + + if (player.getRidingEntity() instanceof ICameraZoomEntity && player == Minecraft.getMinecraft().player && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0) + { + Entity entity = player.getRidingEntity(); + float rotateOffset = ((ICameraZoomEntity) entity).getRotateOffset(); + if (rotateOffset > -10F) + { + rotateOffset += ClientProxyCore.PLAYER_Y_OFFSET; + GL11.glTranslatef(0, -rotateOffset, 0); + float anglePitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * event.getPartialRenderTick(); + float angleYaw = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * event.getPartialRenderTick(); + GL11.glRotatef(-angleYaw, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(anglePitch, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0, rotateOffset, 0); + } + } + + if (player instanceof EntityPlayerSP) + { + sneakRenderOverride = true; + } + + // Gravity - freefall - jetpack changes in player model orientation can + // go here + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) // Highest priority to do + // the PushMatrix first, + // just after vanilla + // RenderPlayer + public void onRenderPlayerPost(RenderPlayerEvent.Post event) + { + GL11.glPopMatrix(); + + if (event.getEntityPlayer() instanceof EntityPlayerSP) + sneakRenderOverride = false; + } + + @SubscribeEvent + public void onRenderPlanetPre(CelestialBodyRenderEvent.Pre event) + { + if (event.celestialBody == GalacticraftCore.planetOverworld) + { + if (!ClientProxyCore.overworldTextureRequestSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(mc.world), new Object[] + {})); + ClientProxyCore.overworldTextureRequestSent = true; + } + + if (ClientProxyCore.overworldTexturesValid) + { + event.celestialBodyTexture = null; + GlStateManager.bindTexture(ClientProxyCore.overworldTextureClient.getGlTextureId()); + } + } + } + + @SubscribeEvent + public void onRenderPlanetPost(CelestialBodyRenderEvent.Post event) + { + if (mc.currentScreen instanceof GuiCelestialSelection) + { + if (event.celestialBody == GalacticraftCore.planetSaturn) + { + mc.renderEngine.bindTexture(ClientProxyCore.saturnRingTexture); + float size = ((GuiCelestialSelection) mc.currentScreen).getWidthForCelestialBody(event.celestialBody) / 6.0F; + ((GuiCelestialSelection) mc.currentScreen).drawTexturedModalRect(-7.5F * size, -1.75F * size, 15.0F * size, 3.5F * size, 0, 0, 30, 7, false, false, 32, 32); + } else if (event.celestialBody == GalacticraftCore.planetUranus) + { + mc.renderEngine.bindTexture(ClientProxyCore.uranusRingTexture); + float size = ((GuiCelestialSelection) mc.currentScreen).getWidthForCelestialBody(event.celestialBody) / 6.0F; + ((GuiCelestialSelection) mc.currentScreen).drawTexturedModalRect(-1.75F * size, -7.0F * size, 3.5F * size, 14.0F * size, 0, 0, 7, 28, false, false, 32, 32); + } + } + } + + @SubscribeEvent + public void onTextureStitch(TextureStitchEvent.Post event) + { + for (EnumFacing facing : EnumFacing.VALUES) + { + try + { + // Get the first character of the direction name (n/e/s/w/u/d) + Character c = Character.toLowerCase(facing.getName().charAt(0)); + IModel model; + synchronized (ModelLoaderRegistry.class) + { + model = ModelLoaderRegistry.getModel(new ResourceLocation(Constants.ASSET_PREFIX, "block/fluid_pipe_pull_" + c)); + } + Function spriteFunction = (ResourceLocation location) -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + fluidPipeModels[facing.ordinal()] = model.bake(model.getDefaultState(), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/FootprintRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/FootprintRenderer.java new file mode 100644 index 00000000..b0f9927f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/FootprintRenderer.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; + +import org.lwjgl.opengl.GL11; + +public class FootprintRenderer +{ + + public static Map> footprints = new ConcurrentHashMap>(); + private static final ResourceLocation footprintTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/footprint.png"); + + public static void renderFootprints(EntityPlayer player, float partialTicks) + { + int dimActive = GCCoreUtil.getDimensionID(player.world); + List footprintsToDraw = new LinkedList<>(); + + for (List footprintList : footprints.values()) + { + for (Footprint footprint : footprintList) + { + if (footprint.dimension == dimActive) + { + footprintsToDraw.add(footprint); + } + } + } + + if (footprintsToDraw.isEmpty()) + { + return; + } + + GlStateManager.pushMatrix(); + double interpPosX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; + double interpPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; + double interpPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(FootprintRenderer.footprintTexture); + + GlStateManager.depthMask(true); + GlStateManager.enableDepth(); + GlStateManager.enableTexture2D(); + GlStateManager.disableCull(); + + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0); + Tessellator tessellator = Tessellator.getInstance(); + float f7 = 1.0F; + float f6 = 0.0F; + float f8 = 0.0F; + float f9 = 1.0F; + + GlStateManager.alphaFunc(GL11.GL_GREATER, 0.1F); + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + boolean sensorGlasses = OverlaySensorGlasses.overrideMobTexture(); + if (sensorGlasses) + { + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + for (Footprint footprint : footprintsToDraw) + { + GL11.glPushMatrix(); + + if (!sensorGlasses) + { + int j = footprint.lightmapVal % 65536; + int k = footprint.lightmapVal / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); + } + + float ageScale = footprint.age / (float) Footprint.MAX_AGE; + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + + float f11 = (float) (footprint.position.x - interpPosX); + float f12 = (float) (footprint.position.y - interpPosY) + 0.001F; + float f13 = (float) (footprint.position.z - interpPosZ); + + GL11.glTranslatef(f11, f12, f13); + + GlStateManager.color(1F - ageScale, 1F - ageScale, 1F - ageScale, 1F - ageScale); + double footprintScale = 0.5F; + worldRenderer + .pos(Math.sin((45 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale, 0, Math.cos((45 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + .tex(f7, f9).endVertex(); + worldRenderer + .pos(Math.sin((135 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale, 0, Math.cos((135 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + .tex(f7, f8).endVertex(); + worldRenderer + .pos(Math.sin((225 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale, 0, Math.cos((225 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + .tex(f6, f8).endVertex(); + worldRenderer + .pos(Math.sin((315 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale, 0, Math.cos((315 - footprint.rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + .tex(f6, f9).endVertex(); + + tessellator.draw(); + GlStateManager.popMatrix(); + } + + if (sensorGlasses) + { + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + } + + GlStateManager.popMatrix(); + } + + public static void addFootprint(long chunkKey, Footprint footprint) + { + List footprintList = footprints.get(chunkKey); + + if (footprintList == null) + { + footprintList = new ArrayList(); + } + + footprintList.add(new Footprint(footprint.dimension, footprint.position, footprint.rotation, footprint.owner, footprint.lightmapVal)); + footprints.put(chunkKey, footprintList); + } + + public static void addFootprint(long chunkKey, int dimension, Vector3 position, float rotation, String owner, int lightmapVal) + { + addFootprint(chunkKey, new Footprint(dimension, position, rotation, owner, lightmapVal)); + } + + public static void setFootprints(long chunkKey, List prints) + { + List footprintList = footprints.get(chunkKey); + + if (footprintList == null) + { + footprintList = new ArrayList(); + } + + Iterator i = footprintList.iterator(); + while (i.hasNext()) + { + Footprint print = i.next(); + if (!print.owner.equals(FMLClientHandler.instance().getClient().player.getName())) + { + i.remove(); + } + } + + footprintList.addAll(prints); + footprints.put(chunkKey, footprintList); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/GalacticraftStateMapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/GalacticraftStateMapper.java new file mode 100644 index 00000000..2c552049 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/GalacticraftStateMapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.util.ResourceLocation; + +public class GalacticraftStateMapper extends StateMapperBase +{ + + public static final GalacticraftStateMapper INSTANCE = new GalacticraftStateMapper(); + + public static String getPropertyString(IBlockState state) + { + return INSTANCE.getPropertyString(state.getProperties()); + } + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + ResourceLocation loc = Block.REGISTRY.getNameForObject(state.getBlock()); + loc = new ResourceLocation(loc.getNamespace().replace("|", ""), loc.getPath()); + return new ModelResourceLocation(loc, getPropertyString(state)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/KeyHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/KeyHandler.java new file mode 100644 index 00000000..17e2c359 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/KeyHandler.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.settings.KeyBinding; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.common.gameevent.TickEvent.Type; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +public abstract class KeyHandler +{ + + private final KeyBinding[] keyBindings; + private KeyBinding[] vKeyBindings; + private boolean[] keyDown; + private boolean[] repeatings; + private boolean[] vRepeatings; + public boolean isDummy; + + public KeyHandler(KeyBinding[] keyBindings, boolean[] repeatings, KeyBinding[] vanillaKeys, boolean[] vanillaRepeatings) + { + assert keyBindings.length == repeatings.length : "You need to pass two arrays of identical length"; + assert vanillaKeys.length == vanillaRepeatings.length : "You need to pass two arrays of identical length"; + this.keyBindings = keyBindings; + this.repeatings = repeatings; + this.vKeyBindings = vanillaKeys; + this.vRepeatings = vanillaRepeatings; + this.keyDown = new boolean[keyBindings.length + vanillaKeys.length]; + } + + public KeyHandler(KeyBinding[] keyBindings) + { + this.keyBindings = keyBindings; + this.isDummy = true; + } + + @SubscribeEvent + public void onTick(ClientTickEvent event) + { + if (event.side == Side.CLIENT) + { + if (event.phase == Phase.START) + { + this.keyTick(event.type, false); + } else if (event.phase == Phase.END) + { + this.keyTick(event.type, true); + } + } + + } + + public void keyTick(Type type, boolean tickEnd) + { + boolean inChat = FMLClientHandler.instance().getClient().currentScreen instanceof GuiChat; + + for (int i = 0; i < this.keyBindings.length; i++) + { + KeyBinding keyBinding = this.keyBindings[i]; + int keyCode = keyBinding.getKeyCode(); + if (keyCode == Keyboard.KEY_NONE) + continue; + boolean state = false; + + try + { + if (!inChat) + { + if (keyCode < 0) + { + keyCode += 100; + state = Mouse.isButtonDown(keyCode); + } else + { + state = Keyboard.isKeyDown(keyCode); + } + } + } catch (IndexOutOfBoundsException e) + { + GalacticraftCore.logger.error("Invalid keybinding! " + keyBinding.getKeyDescription()); + continue; + } + + if (state != this.keyDown[i] || state && this.repeatings[i]) + { + if (state) + { + this.keyDown(type, keyBinding, tickEnd, state != this.keyDown[i]); + } else + { + this.keyUp(type, keyBinding, tickEnd); + } + if (tickEnd) + { + this.keyDown[i] = state; + } + } + } + for (int i = 0; i < this.vKeyBindings.length; i++) + { + KeyBinding keyBinding = this.vKeyBindings[i]; + int keyCode = keyBinding.getKeyCode(); + if (keyCode == Keyboard.KEY_NONE) + continue; + boolean state; + try + { + state = keyCode < 0 ? Mouse.isButtonDown(keyCode + 100) : Keyboard.isKeyDown(keyCode); + } catch (IndexOutOfBoundsException e) + { + GalacticraftCore.logger.error("Invalid keybinding! " + keyBinding.getKeyDescription()); + continue; + } + + if (state != this.keyDown[i + this.keyBindings.length] || state && this.vRepeatings[i]) + { + if (state) + { + this.keyDown(type, keyBinding, tickEnd, state != this.keyDown[i + this.keyBindings.length]); + } else + { + this.keyUp(type, keyBinding, tickEnd); + } + if (tickEnd) + { + this.keyDown[i + this.keyBindings.length] = state; + } + } + } + } + + public abstract void keyDown(Type types, KeyBinding kb, boolean tickEnd, boolean isRepeat); + + public abstract void keyUp(Type types, KeyBinding kb, boolean tickEnd); + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderMoon.java new file mode 100644 index 00000000..55e7bccb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderMoon.java @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import org.lwjgl.opengl.GL11; + +public class SkyProviderMoon extends IRenderHandler +{ + + private static final ResourceLocation overworldTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/orbitalsun.png"); + + public int starGLCallList = GLAllocation.generateDisplayLists(3); + public int glSkyList; + public int glSkyList2; + + public SkyProviderMoon() + { + GL11.glPushMatrix(); + GL11.glNewList(this.starGLCallList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + final Tessellator tessellator = Tessellator.getInstance(); + this.glSkyList = this.starGLCallList + 1; + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + BufferBuilder worldRenderer = tessellator.getBuffer(); + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j + 0, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j + 0, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + this.glSkyList2 = this.starGLCallList + 2; + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + if (!ClientProxyCore.overworldTextureRequestSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(mc.world), new Object[] + {})); + ClientProxyCore.overworldTextureRequestSent = true; + } + + WorldProviderMoon gcProvider = null; + + if (world.provider instanceof WorldProviderMoon) + { + gcProvider = (WorldProviderMoon) world.provider; + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + GL11.glColor3f(1F, 1F, 1F); + final Tessellator var23 = Tessellator.getInstance(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(0, 0, 0); + GL11.glCallList(this.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + float var10; + float var11; + float var12; + + float var20 = 0; + + if (gcProvider != null) + { + var20 = gcProvider.getStarBrightness(partialTicks); + } + + if (var20 > 0.0F) + { + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-19.0F, 0, 1.0F, 0); + GL11.glColor4f(1.0F, 1.0F, 1.0F, var20); + GL11.glCallList(this.starGLCallList); + GL11.glPopMatrix(); + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glPushMatrix(); + + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 5F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + var12 = 20.0F / 3.5F; + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-var12, 99.9D, -var12).endVertex(); + worldRenderer.pos(var12, 99.9D, -var12).endVertex(); + worldRenderer.pos(var12, 99.9D, var12).endVertex(); + worldRenderer.pos(-var12, 99.9D, var12).endVertex(); + var23.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var12 = 20.0F; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderMoon.sunTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, 100.0D, -var12).tex(0.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 100.0D, -var12).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 100.0D, var12).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(-var12, 100.0D, var12).tex(0.0D, 1.0D).endVertex(); + var23.draw(); + + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + + GL11.glDisable(GL11.GL_BLEND); + + // HOME: + var12 = 10.0F; + final float earthRotation = (float) (world.getSpawnPoint().getZ() - mc.player.posZ) * 0.01F; + GL11.glScalef(0.6F, 0.6F, 0.6F); + GL11.glRotatef(earthRotation, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(200F, 1.0F, 0.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1F); + + if (ClientProxyCore.overworldTexturesValid) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, ClientProxyCore.overworldTextureClient.getGlTextureId()); + } else + { + // Overworld texture is 48x48 in a 64x64 .png file + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderMoon.overworldTexture); + } + + world.getMoonPhase(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, -100.0D, var12).tex(0D, 1.0D).endVertex(); + worldRenderer.pos(var12, -100.0D, var12).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(var12, -100.0D, -var12).tex(1.0D, 0D).endVertex(); + worldRenderer.pos(-var12, -100.0D, -var12).tex(0D, 0D).endVertex(); + var23.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + final double var25 = mc.player.getPosition().getY() - world.getHorizon(); + + if (var25 < 0.0D) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 12.0F, 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + var10 = 1.0F; + var11 = -((float) (var25 + 65.0D)); + var12 = -var10; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(-var10, var11, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var11, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var11, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var11, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var11, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var11, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var11, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var11, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(-var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, var10).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(var10, var12, -var10).color(0, 0, 0, 1.0F).endVertex(); + var23.draw(); + } + + GL11.glColor3f(70F / 256F, 70F / 256F, 70F / 256F); + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -((float) (var25 - 16.0D)), 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random var1 = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var2.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int var3 = 0; var3 < (ConfigManagerCore.moreStars ? 20000 : 6000); ++var3) + { + double var4 = var1.nextFloat() * 2.0F - 1.0F; + double var6 = var1.nextFloat() * 2.0F - 1.0F; + double var8 = var1.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.15F + var1.nextFloat() * 0.1F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double var14 = var4 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 100D + 150D : 100.0D); + final double var16 = var6 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 100D + 150D : 100.0D); + final double var18 = var8 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 100D + 150D : 100.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = var1.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int var38 = 0; var38 < 4; ++var38) + { + final double var39 = 0.0D; + final double var41 = ((var38 & 2) - 1) * var10; + final double var43 = ((var38 + 1 & 2) - 1) * var10; + final double var47 = var41 * var36 - var43 * var34; + final double var49 = var43 * var36 + var41 * var34; + final double var53 = var47 * var28 + var39 * var30; + final double var55 = var39 * var28 - var47 * var30; + final double var57 = var55 * var22 - var49 * var24; + final double var61 = var49 * var22 + var55 * var24; + worldRenderer.pos(var14 + var57, var16 + var53, var18 + var61).endVertex(); + } + } + } + + var2.draw(); + } + + private Vec3d getCustomSkyColor() + { + return new Vec3d(0.26796875D, 0.1796875D, 0.0D); + } + + public float getSkyBrightness(float par1) + { + final float var2 = FMLClientHandler.instance().getClient().world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.sin(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOrbit.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOrbit.java new file mode 100644 index 00000000..48797b91 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOrbit.java @@ -0,0 +1,397 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +import org.lwjgl.opengl.GL11; + +public class SkyProviderOrbit extends IRenderHandler +{ + + private static final ResourceLocation moonTexture = new ResourceLocation("textures/environment/moon_phases.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/orbitalsun.png"); + + + public static boolean displayListsInitialized = false; + public static int starGLCallList; + public static int glSkyList; + public static int glSkyList2; + + private final ResourceLocation planetToRender; + private final boolean renderMoon; + private final boolean renderSun; + public float spinAngle = 0; + public float spinDeltaPerTick = 0; + private float prevPartialTicks = 0; + private long prevTick; + + public SkyProviderOrbit(ResourceLocation planet, boolean renderMoon, boolean renderSun) + { + this.planetToRender = planet; + this.renderMoon = renderMoon; + this.renderSun = renderSun; + + if (!displayListsInitialized) + { + initializeDisplayLists(); + } + } + + private void initializeDisplayLists() + { + starGLCallList = GLAllocation.generateDisplayLists(3); + + GL11.glPushMatrix(); + GL11.glNewList(SkyProviderOrbit.starGLCallList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + SkyProviderOrbit.glSkyList = SkyProviderOrbit.starGLCallList + 1; + GL11.glNewList(SkyProviderOrbit.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j + 0, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j + 0, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + SkyProviderOrbit.glSkyList2 = SkyProviderOrbit.starGLCallList + 2; + GL11.glNewList(SkyProviderOrbit.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + + displayListsInitialized = true; + } + + private final Minecraft minecraft = FMLClientHandler.instance().getClient(); + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + final float var20 = 400.0F + (float) this.minecraft.player.posY / 2F; + + // if (this.minecraft.player.getRidingEntity() != null) + { + // var20 = (float) (this.minecraft.player.posY - 200.0F); + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + final Vec3d var2 = this.minecraft.world.getSkyColor(this.minecraft.getRenderViewEntity(), partialTicks); + float var3 = (float) var2.x; + float var4 = (float) var2.y; + float var5 = (float) var2.z; + float var8; + + if (this.minecraft.gameSettings.anaglyph) + { + final float var6 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F; + final float var7 = (var3 * 30.0F + var4 * 70.0F) / 100.0F; + var8 = (var3 * 30.0F + var5 * 70.0F) / 100.0F; + var3 = var6; + var4 = var7; + var5 = var8; + } + + GL11.glColor3f(var3, var4, var5); + final Tessellator var23 = Tessellator.getInstance(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(var3, var4, var5); + GL11.glCallList(SkyProviderOrbit.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + final float[] var24 = this.minecraft.world.provider.calcSunriseSunsetColors(this.minecraft.world.getCelestialAngle(partialTicks), partialTicks); + float var9; + float var10; + float var11; + float var12; + + if (var24 != null) + { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glPushMatrix(); + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(MathHelper.sin(this.minecraft.world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F); + var8 = var24[0]; + var9 = var24[1]; + var10 = var24[2]; + float var13; + + if (this.minecraft.gameSettings.anaglyph) + { + var11 = (var8 * 30.0F + var9 * 59.0F + var10 * 11.0F) / 100.0F; + var12 = (var8 * 30.0F + var9 * 70.0F) / 100.0F; + var13 = (var8 * 30.0F + var10 * 70.0F) / 100.0F; + var8 = var11; + var9 = var12; + var10 = var13; + } + + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(0.0D, 100.0D, 0.0D).color(var8, var9, var10, var24[3]).endVertex(); + final byte var26 = 16; + + for (int var27 = 0; var27 <= var26; ++var27) + { + var13 = var27 * Constants.twoPI / var26; + final float var14 = MathHelper.sin(var13); + final float var15 = MathHelper.cos(var13); + worldRenderer.pos(var14 * 120.0F, var15 * 120.0F, -var15 * 40.0F * var24[3]).color(var24[0], var24[1], var24[2], 0.0F).endVertex(); + } + + var23.draw(); + GL11.glPopMatrix(); + GL11.glShadeModel(GL11.GL_FLAT); + } + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glPushMatrix(); + var8 = 1.0F - this.minecraft.world.getRainStrength(partialTicks); + var9 = 0.0F; + var10 = 0.0F; + var11 = 0.0F; + GL11.glColor4f(1.0F, 1.0F, 1.0F, var8); + GL11.glTranslatef(var9, var10, var11); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + + // Code for rendering spinning spacestations + float deltaTick = partialTicks - this.prevPartialTicks; + // while (deltaTick < 0F) deltaTick += 1.0F; + this.prevPartialTicks = partialTicks; + long curTick = this.minecraft.world.getTotalWorldTime(); + int tickDiff = (int) (curTick - this.prevTick); + this.prevTick = curTick; + if (tickDiff > 0 && tickDiff < 20) + { + deltaTick += tickDiff; + } + this.spinAngle = this.spinAngle - this.spinDeltaPerTick * deltaTick; + while (this.spinAngle < -180F) + { + this.spinAngle += 360F; + } + GL11.glRotatef(this.spinAngle, 0.0F, 1.0F, 0.0F); + + // At 0.8, these will look bright against a black sky - allows some + // headroom for them to + // look even brighter in outer dimensions (further from the sun) + GL11.glColor4f(0.8F, 0.8F, 0.8F, 0.8F); + GL11.glCallList(SkyProviderOrbit.starGLCallList); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glPushMatrix(); + float celestialAngle = this.minecraft.world.getCelestialAngle(partialTicks); + GL11.glRotatef(celestialAngle * 360.0F, 1.0F, 0.0F, 0.0F); + if (this.renderSun) + { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + var12 = 8.0F; + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-var12, 99.9D, -var12).endVertex(); + worldRenderer.pos(var12, 99.9D, -var12).endVertex(); + worldRenderer.pos(var12, 99.9D, var12).endVertex(); + worldRenderer.pos(-var12, 99.9D, var12).endVertex(); + var23.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var12 = 28.0F; + this.minecraft.renderEngine.bindTexture(SkyProviderOrbit.sunTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, 100.0D, -var12).tex(0.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 100.0D, -var12).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 100.0D, var12).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(-var12, 100.0D, var12).tex(0.0D, 1.0D).endVertex(); + var23.draw(); + } + + if (this.renderMoon) + { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + var12 = 11.3F; + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-var12, -99.9D, var12).endVertex(); + worldRenderer.pos(var12, -99.9D, var12).endVertex(); + worldRenderer.pos(var12, -99.9D, -var12).endVertex(); + worldRenderer.pos(-var12, -99.9D, -var12).endVertex(); + var23.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var12 = 40.0F; + this.minecraft.renderEngine.bindTexture(SkyProviderOrbit.moonTexture); + float var28 = this.minecraft.world.getMoonPhase(); + final int var30 = (int) (var28 % 4); + final int var29 = (int) (var28 / 4 % 2); + final float var16 = (var30 + 0) / 4.0F; + final float var17 = (var29 + 0) / 2.0F; + final float var18 = (var30 + 1) / 4.0F; + final float var19 = (var29 + 1) / 2.0F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, -100.0D, var12).tex(var18, var19).endVertex(); + worldRenderer.pos(var12, -100.0D, var12).tex(var16, var19).endVertex(); + worldRenderer.pos(var12, -100.0D, -var12).tex(var16, var17).endVertex(); + worldRenderer.pos(-var12, -100.0D, -var12).tex(var18, var17).endVertex(); + var23.draw(); + } + + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_BLEND); + + if (this.planetToRender != null) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -var20 / 10, 0.0F); + float scale = 100 * (0.3F - var20 / 10000.0F); + scale = Math.max(scale, 0.2F); + GL11.glScalef(scale, 0.0F, scale); + GL11.glTranslatef(0.0F, -var20, 0.0F); + GL11.glRotatef(90F, 0.0F, 1.0F, 0.0F); + this.minecraft.renderEngine.bindTexture(this.planetToRender); + + var10 = 1.0F; + final float alpha = 0.5F; + GL11.glColor4f(Math.min(alpha, 1.0F), Math.min(alpha, 1.0F), Math.min(alpha, 1.0F), Math.min(alpha, 1.0F)); + BufferBuilder worldRenderer = var23.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var10, 0, var10).tex(0D, 1.0).endVertex(); + worldRenderer.pos(var10, 0, var10).tex(1.0, 1.0).endVertex(); + worldRenderer.pos(var10, 0, -var10).tex(1.0, 0D).endVertex(); + worldRenderer.pos(-var10, 0, -var10).tex(0D, 0D).endVertex(); + var23.draw(); + GL11.glPopMatrix(); + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glPopMatrix(); + + GL11.glEnable(GL11.GL_ALPHA_TEST); + + GL11.glColor3f(0.0F, 0.0F, 0.0F); + + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glDepthMask(true); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random var1 = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + var2.getBuffer().begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int var3 = 0; var3 < (ConfigManagerCore.moreStars ? 20000 : 6000); ++var3) + { + double var4 = var1.nextFloat() * 2.0F - 1.0F; + double var6 = var1.nextFloat() * 2.0F - 1.0F; + double var8 = var1.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.07F + var1.nextFloat() * 0.06F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double var14 = var4 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 50D + 75D : 50.0D); + final double var16 = var6 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 50D + 75D : 50.0D); + final double var18 = var8 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 50D + 75D : 50.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = var1.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int var38 = 0; var38 < 4; ++var38) + { + final double var39 = 0.0D; + final double var41 = ((var38 & 2) - 1) * var10; + final double var43 = ((var38 + 1 & 2) - 1) * var10; + final double var47 = var41 * var36 - var43 * var34; + final double var49 = var43 * var36 + var41 * var34; + final double var53 = var47 * var28 + var39 * var30; + final double var55 = var39 * var28 - var47 * var30; + final double var57 = var55 * var22 - var49 * var24; + final double var61 = var49 * var22 + var55 * var24; + var2.getBuffer().pos(var14 + var57, var16 + var53, var18 + var61).endVertex(); + } + } + } + + var2.draw(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOverworld.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOverworld.java new file mode 100644 index 00000000..2f997194 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/SkyProviderOverworld.java @@ -0,0 +1,460 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client; + +import java.lang.reflect.Method; +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.launchwrapper.Launch; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.Project; + +public class SkyProviderOverworld extends IRenderHandler +{ + + private static final ResourceLocation moonTexture = new ResourceLocation("textures/environment/moon_phases.png"); + private static final ResourceLocation sunTexture = new ResourceLocation("textures/environment/sun.png"); + + private static boolean optifinePresent = false; + + static + { + try + { + optifinePresent = Launch.classLoader.getClassBytes("CustomColors") != null; + } catch (final Exception e) + { + } + } + + private int starGLCallList = GLAllocation.generateDisplayLists(7); + private int glSkyList; + private int glSkyList2; + private final ResourceLocation planetToRender = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + + public SkyProviderOverworld() + { + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + final Random rand = new Random(10842L); + GL11.glNewList(this.starGLCallList, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glNewList(this.starGLCallList + 1, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glNewList(this.starGLCallList + 2, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glNewList(this.starGLCallList + 3, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glNewList(this.starGLCallList + 4, GL11.GL_COMPILE); + this.renderStars(worldrenderer, rand); + tessellator.draw(); + GL11.glEndList(); + GL11.glPopMatrix(); + this.glSkyList = this.starGLCallList + 5; + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 5; + final int i = 256 / byte2 + 2; + float f = 16F; + BufferBuilder worldRenderer = tessellator.getBuffer(); + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j, f, l).endVertex(); + worldRenderer.pos(j + byte2, f, l).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + this.glSkyList2 = this.starGLCallList + 6; + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1).endVertex(); + worldRenderer.pos(k, f, i1).endVertex(); + worldRenderer.pos(k, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + private final Minecraft minecraft = FMLClientHandler.instance().getClient(); + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + if (!ClientProxyCore.overworldTextureRequestSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(mc.world), new Object[] + {})); + ClientProxyCore.overworldTextureRequestSent = true; + } + + double zoom = 0.0; + double yaw = 0.0; + double pitch = 0.0; + Method m = null; + + if (!optifinePresent) + { + try + { + Class c = mc.entityRenderer.getClass(); + zoom = mc.entityRenderer.cameraZoom; + yaw = mc.entityRenderer.cameraYaw; + pitch = mc.entityRenderer.cameraPitch; + + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + + if (zoom != 1.0D) + { + GL11.glTranslatef((float) yaw, (float) (-pitch), 0.0F); + GL11.glScaled(zoom, zoom, 1.0D); + } + + Project.gluPerspective(mc.gameSettings.fovSetting, (float) mc.displayWidth / (float) mc.displayHeight, 0.05F, 1400.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + + mc.entityRenderer.orientCamera(partialTicks); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + float theta = MathHelper.sqrt(((float) (mc.player.posY) - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / 1000.0F); + final float var21 = Math.max(1.0F - theta * 4.0F, 0.0F); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + final Vec3d var2 = this.minecraft.world.getSkyColor(this.minecraft.getRenderViewEntity(), partialTicks); + float i = (float) var2.x * var21; + float x = (float) var2.y * var21; + float var5 = (float) var2.z * var21; + float z; + + if (this.minecraft.gameSettings.anaglyph) + { + final float y = (i * 30.0F + x * 59.0F + var5 * 11.0F) / 100.0F; + final float var7 = (i * 30.0F + x * 70.0F) / 100.0F; + z = (i * 30.0F + var5 * 70.0F) / 100.0F; + i = y; + x = var7; + var5 = z; + } + + GL11.glColor3f(i, x, var5); + final Tessellator var23 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var23.getBuffer(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(i, x, var5); + if (mc.player.posY < 214) + { + GL11.glCallList(this.glSkyList); + } + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + final float[] costh = this.minecraft.world.provider.calcSunriseSunsetColors(this.minecraft.world.getCelestialAngle(partialTicks), partialTicks); + float var9; + float size; + float rand1; + float r; + + if (costh != null) + { + final float sunsetModInv = Math.min(1.0F, Math.max(1.0F - theta * 50.0F, 0.0F)); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glPushMatrix(); + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(MathHelper.sin(this.minecraft.world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F); + z = costh[0] * sunsetModInv; + var9 = costh[1] * sunsetModInv; + size = costh[2] * sunsetModInv; + float rand3; + + if (this.minecraft.gameSettings.anaglyph) + { + rand1 = (z * 30.0F + var9 * 59.0F + size * 11.0F) / 100.0F; + r = (z * 30.0F + var9 * 70.0F) / 100.0F; + rand3 = (z * 30.0F + size * 70.0F) / 100.0F; + z = rand1; + var9 = r; + size = rand3; + } + + worldRenderer.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + + worldRenderer.pos(0.0D, 100.0D, 0.0D).color(z * sunsetModInv, var9 * sunsetModInv, size * sunsetModInv, costh[3]).endVertex(); + final byte phi = 16; + + for (int var27 = 0; var27 <= phi; ++var27) + { + rand3 = var27 * Constants.twoPI / phi; + final float xx = MathHelper.sin(rand3); + final float rand5 = MathHelper.cos(rand3); + worldRenderer.pos(xx * 120.0F, rand5 * 120.0F, -rand5 * 40.0F * costh[3]).color(costh[0] * sunsetModInv, costh[1] * sunsetModInv, costh[2] * sunsetModInv, 0.0F).endVertex(); + } + + var23.draw(); + GL11.glPopMatrix(); + GL11.glShadeModel(GL11.GL_FLAT); + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + + GL11.glPushMatrix(); + z = 1.0F - this.minecraft.world.getRainStrength(partialTicks); + var9 = 0.0F; + size = 0.0F; + rand1 = 0.0F; + GL11.glColor4f(1.0F, 1.0F, 1.0F, z); + GL11.glTranslatef(var9, size, rand1); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + + GL11.glRotatef(this.minecraft.world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + double playerHeight = this.minecraft.player.posY; + + // Draw stars + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + float threshold; + Vec3d vec = TransformerHooks.getFogColorHook(this.minecraft.world); + threshold = Math.max(0.1F, (float) vec.length() - 0.1F); + float var20 = ((float) playerHeight - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / 1000.0F; + var20 = MathHelper.sqrt(var20); + float bright1 = Math.min(0.9F, var20 * 3); + + if (bright1 > threshold) + { + GL11.glColor4f(bright1, bright1, bright1, 1.0F); + GL11.glCallList(this.starGLCallList); + } + + GL11.glCallList(this.starGLCallList + 2); + + GL11.glCallList(this.starGLCallList + 3); + + GL11.glCallList(this.starGLCallList + 4); + + // Draw sun + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + r = 30.0F; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.minecraft.renderEngine.bindTexture(SkyProviderOverworld.sunTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-r, 100.0D, -r).tex(0.0D, 0.0D).endVertex(); + worldRenderer.pos(r, 100.0D, -r).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(r, 100.0D, r).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(-r, 100.0D, r).tex(0.0D, 1.0D).endVertex(); + var23.draw(); + + // Draw moon + r = 40.0F; + this.minecraft.renderEngine.bindTexture(SkyProviderOverworld.moonTexture); + float sinphi = this.minecraft.world.getMoonPhase(); + final int cosphi = (int) (sinphi % 4); + final int var29 = (int) (sinphi / 4 % 2); + final float yy = (cosphi) / 4.0F; + final float rand7 = (var29) / 2.0F; + final float zz = (cosphi + 1) / 4.0F; + final float rand9 = (var29 + 1) / 2.0F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-r, -100.0D, r).tex(zz, rand9).endVertex(); + worldRenderer.pos(r, -100.0D, r).tex(yy, rand9).endVertex(); + worldRenderer.pos(r, -100.0D, -r).tex(yy, rand7).endVertex(); + worldRenderer.pos(-r, -100.0D, -r).tex(zz, rand7).endVertex(); + var23.draw(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + + // TODO get exact height figure here + double var25 = playerHeight - 64; + + if (var25 > this.minecraft.gameSettings.renderDistanceChunks * 16) + { + theta *= 400.0F; + + final float sinth = Math.max(Math.min(theta / 100.0F - 0.2F, 0.5F), 0.0F); + + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_FOG); + float scale = 850 * (0.25F - theta / 10000.0F); + scale = Math.max(scale, 0.2F); + GL11.glScalef(scale, 1.0F, scale); + GL11.glTranslatef(0.0F, -(float) mc.player.posY, 0.0F); + + { + this.minecraft.renderEngine.bindTexture(this.planetToRender); + } + + size = 1.0F; + + GL11.glColor4f(sinth, sinth, sinth, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + + double zoomIn = 0.0D; + double cornerB = 1.0 - zoomIn; + worldRenderer.pos(-size, 0, size).tex(zoomIn, cornerB).endVertex(); + worldRenderer.pos(size, 0, size).tex(cornerB, cornerB).endVertex(); + worldRenderer.pos(size, 0, -size).tex(cornerB, zoomIn).endVertex(); + worldRenderer.pos(-size, 0, -size).tex(zoomIn, zoomIn).endVertex(); + var23.draw(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glPopMatrix(); + } + + GL11.glColor3f(0.0f, 0.0f, 0.0f); + + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + + if (!optifinePresent) + { + try + { + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + + if (zoom != 1.0D) + { + GL11.glTranslatef((float) yaw, (float) (-pitch), 0.0F); + GL11.glScaled(zoom, zoom, 1.0D); + } + + Project.gluPerspective(mc.gameSettings.fovSetting, (float) mc.displayWidth / (float) mc.displayHeight, 0.05F, this.minecraft.gameSettings.renderDistanceChunks * 16 * 2.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + + mc.entityRenderer.orientCamera(partialTicks); + } catch (Exception e) + { + e.printStackTrace(); + } + } + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars(BufferBuilder worldRenderer, Random rand) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int i = 0; i < (ConfigManagerCore.moreStars ? 4000 : 1200); ++i) + { + double x = rand.nextFloat() * 2.0F - 1.0F; + double y = rand.nextFloat() * 2.0F - 1.0F; + double z = rand.nextFloat() * 2.0F - 1.0F; + final double size = 0.15F + rand.nextFloat() * 0.1F; + double r = x * x + y * y + z * z; + + if (r < 1.0D && r > 0.01D) + { + r = 1.0D / Math.sqrt(r); + x *= r; + y *= r; + z *= r; + final double xx = x * (ConfigManagerCore.moreStars ? rand.nextDouble() * 100D + 150D : 100.0D); + final double zz = z * (ConfigManagerCore.moreStars ? rand.nextDouble() * 100D + 150D : 100.0D); + if (Math.abs(xx) < 29D && Math.abs(zz) < 29D) + { + continue; + } + final double yy = y * (ConfigManagerCore.moreStars ? rand.nextDouble() * 100D + 150D : 100.0D); + final double theta = Math.atan2(x, z); + final double sinth = Math.sin(theta); + final double costh = Math.cos(theta); + final double phi = Math.atan2(Math.sqrt(x * x + z * z), y); + final double sinphi = Math.sin(phi); + final double cosphi = Math.cos(phi); + final double rho = rand.nextDouble() * Math.PI * 2.0D; + final double sinrho = Math.sin(rho); + final double cosrho = Math.cos(rho); + + for (int j = 0; j < 4; ++j) + { + final double a = 0.0D; + final double b = ((j & 2) - 1) * size; + final double c = ((j + 1 & 2) - 1) * size; + final double d = b * cosrho - c * sinrho; + final double e = c * cosrho + b * sinrho; + final double dy = d * sinphi + a * cosphi; + final double ff = a * sinphi - d * cosphi; + final double dx = ff * sinth - e * costh; + final double dz = e * sinth + ff * costh; + worldRenderer.pos(xx + dx, yy + dy, zz + dz).endVertex(); + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EffectHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EffectHandler.java new file mode 100644 index 00000000..cea69d75 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EffectHandler.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.EntityLivingBase; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class EffectHandler +{ + + public static void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... otherInfo) + { + Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + double dX = mc.getRenderViewEntity().posX - position.x; + double dY = mc.getRenderViewEntity().posY - position.y; + double dZ = mc.getRenderViewEntity().posZ - position.z; + Particle particle = null; + double viewDistance = 64.0D; + + if (particleID.equals("whiteSmokeIdle")) + { + particle = new ParticleLaunchSmoke(mc.world, position, motion, 1.0F, false); + } else if (particleID.equals("whiteSmokeLaunched")) + { + particle = new ParticleLaunchSmoke(mc.world, position, motion, 1.0F, true); + } else if (particleID.equals("whiteSmokeLargeIdle")) + { + particle = new ParticleLaunchSmoke(mc.world, position, motion, 2.5F, false); + } else if (particleID.equals("whiteSmokeLargeLaunched")) + { + particle = new ParticleLaunchSmoke(mc.world, position, motion, 2.5F, true); + } else if (particleID.equals("launchFlameIdle")) + { + particle = new ParticleLaunchFlame(mc.world, position, motion, false, (EntityLivingBase) otherInfo[0]); + } else if (particleID.equals("launchFlameLaunched")) + { + particle = new ParticleLaunchFlame(mc.world, position, motion, true, (EntityLivingBase) otherInfo[0]); + } else if (particleID.equals("whiteSmokeTiny")) + { + particle = new ParticleSmokeSmall(mc.world, position, motion); + } else if (particleID.equals("oilDrip")) + { + particle = new ParticleOilDrip(mc.world, position.x, position.y, position.z); + } + + if (dX * dX + dY * dY + dZ * dZ < viewDistance * viewDistance) + { + if (particleID.equals("oxygen")) + { + particle = new ParticleOxygen(mc.world, position, motion, (Vector3) otherInfo[0]); + } + } + + if (particle != null) + { + mc.effectRenderer.addEffect(particle); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EntityFXLaunchParticle.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EntityFXLaunchParticle.java new file mode 100644 index 00000000..d6344edf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/EntityFXLaunchParticle.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.Particle; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class EntityFXLaunchParticle extends Particle +{ + + public EntityFXLaunchParticle(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + + @Override + public void move(double x, double y, double z) + { + double d0 = y; + double origX = x; + double origZ = z; + + List list = this.getCollidingBoundingBoxes(this.getBoundingBox().expand(x, y, z)); + AxisAlignedBB axisalignedbb = this.getBoundingBox(); + + for (AxisAlignedBB blocker : list) + { + y = blocker.calculateYOffset(axisalignedbb, y); + } + axisalignedbb = axisalignedbb.offset(0.0D, y, 0.0D); + if (y != d0) + { + this.motionY += (y - d0) * 1.15D; + this.motionX *= 0.7D; + this.motionZ *= 0.7D; + } + this.motionY -= 0.005D; + + for (AxisAlignedBB blocker : list) + { + x = blocker.calculateXOffset(axisalignedbb, x); + } + axisalignedbb = axisalignedbb.offset(x, 0.0D, 0.0D); + + for (AxisAlignedBB blocker : list) + { + z = blocker.calculateZOffset(axisalignedbb, z); + } + axisalignedbb = axisalignedbb.offset(0.0D, 0.0D, z); + + this.setBoundingBox(axisalignedbb); + this.posX = (axisalignedbb.minX + axisalignedbb.maxX) / 2.0D; + this.posY = axisalignedbb.minY; + this.posZ = (axisalignedbb.minZ + axisalignedbb.maxZ) / 2.0D; + this.onGround = false; + } + + /** + * Simplified for performance: no colliding boxes for entities (most/all of + * the entities will be other launch particles) + */ + public List getCollidingBoundingBoxes(AxisAlignedBB bb) + { + List list = new LinkedList<>(); + World w = this.world; + int xs = MathHelper.floor(bb.minX) - 1; + int xe = MathHelper.ceil(bb.maxX); + int ys = MathHelper.floor(bb.minY) - 1; + int ye = MathHelper.ceil(bb.maxY); + int zs = MathHelper.floor(bb.minZ) - 1; + int ze = MathHelper.ceil(bb.maxZ); + BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); + IBlockState iblockstate1; + boolean xends, xzmiddle; + + for (int x = xs; x <= xe; ++x) + { + xends = (x == xs || x == xe); + for (int z = zs; z <= ze; ++z) + { + if (xends) + { + if (z == zs || z == ze) + continue; + + xzmiddle = false; + } else + { + xzmiddle = z > zs && z < ze; + } + + if (w.isBlockLoaded(mutablePos.setPos(x, 64, z))) + { + for (int y = ys; y <= ye; ++y) + { + if (y != ys && y != ye || xzmiddle) + { + mutablePos.setPos(x, y, z); + iblockstate1 = w.getBlockState(mutablePos); + if (!(iblockstate1.getBlock() instanceof BlockAir) && !(iblockstate1.getBlock() instanceof BlockGrating)) + iblockstate1.addCollisionBoxToList(w, mutablePos, bb, list, null, false); + } + } + } + } + } + + return list; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLanderFlame.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLanderFlame.java new file mode 100644 index 00000000..4986aa07 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLanderFlame.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ParticleLanderFlame extends Particle +{ + + private float smokeParticleScale; + private EntityLivingBase ridingEntity; + + public ParticleLanderFlame(World world, double x, double y, double z, double mX, double mY, double mZ, EntityLivingBase ridingEntity) + { + super(world, x, y, z, mX, mY, mZ); + this.motionX *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += mX; + this.motionY = mY; + this.motionZ += mZ; + this.particleRed = 200F / 255F; + this.particleGreen = 200F / 255F; + this.particleBlue = 200F / 255F + this.rand.nextFloat() / 3; + this.particleScale *= 8F * 1.0F; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) 5.0D; + this.canCollide = true; + this.ridingEntity = ridingEntity; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_DEPTH_TEST); + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + + this.particleGreen -= 0.09F; + this.particleRed -= 0.09F; + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.particleScale *= 0.9599999785423279D; + + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.world.rand.nextInt(5) == 1) + { + final List var3 = this.world.getEntitiesWithinAABB(Entity.class, this.getBoundingBox().grow(1.0D, 0.5D, 1.0D)); + + if (var3 != null) + { + for (int var4 = 0; var4 < var3.size(); ++var4) + { + final Entity var5 = (Entity) var3.get(var4); + + if (var5 instanceof EntityLivingBase && !var5.isDead && !var5.isBurning() && !var5.equals(this.ridingEntity)) + { + var5.setFire(3); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_SET_ENTITY_FIRE, GCCoreUtil.getDimensionID(var5.world), new Object[] + {var5.getEntityId()})); + } + } + } + } + } + + @Override + public int getBrightnessForRender(float par1) + { + return 15728880; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchFlame.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchFlame.java new file mode 100644 index 00000000..f9a0c263 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchFlame.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ParticleLaunchFlame extends Particle +{ + + private float smokeParticleScale; + private boolean spawnSmokeShort; + private EntityLivingBase ridingEntity; + + public ParticleLaunchFlame(World par1World, Vector3 position, Vector3 motion, boolean launched, EntityLivingBase ridingEntity) + { + super(par1World, position.x, position.y, position.z, 0.0D, 0.0D, 0.0D); + this.motionX = motion.x; + this.motionY = motion.y; + this.motionZ = motion.z; + this.particleRed = 255F / 255F; + this.particleGreen = 120F / 255F + this.rand.nextFloat() / 3; + this.particleBlue = 55F / 255F; + this.particleScale *= launched ? 4F : 0.1F; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) (this.particleMaxAge * 1F); + this.canCollide = true; + this.spawnSmokeShort = launched; + this.ridingEntity = ridingEntity; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_DEPTH_TEST); + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + GalacticraftCore.proxy.spawnParticle(this.spawnSmokeShort ? "whiteSmokeLaunched" : "whiteSmokeIdle", new Vector3(this.posX, this.posY + this.rand.nextDouble() * 2, this.posZ), + new Vector3(this.motionX, this.motionY, this.motionZ), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle(this.spawnSmokeShort ? "whiteSmokeLargeLaunched" : "whiteSmokeLargeIdle", new Vector3(this.posX, this.posY + this.rand.nextDouble() * 2, this.posZ), + new Vector3(this.motionX, this.motionY, this.motionZ), new Object[] + {}); + if (!this.spawnSmokeShort) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeIdle", new Vector3(this.posX, this.posY + this.rand.nextDouble() * 2, this.posZ), new Vector3(this.motionX, this.motionY, this.motionZ), + new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("whiteSmokeLargeIdle", new Vector3(this.posX, this.posY + this.rand.nextDouble() * 2, this.posZ), + new Vector3(this.motionX, this.motionY, this.motionZ), new Object[] + {}); + } + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.001D; + this.move(this.motionX, this.motionY, this.motionZ); + + this.particleGreen += 0.01F; + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.world.rand.nextInt(5) == 1) + { + final List var3 = this.world.getEntitiesWithinAABB(Entity.class, this.getBoundingBox().grow(1.0D, 0.5D, 1.0D)); + + if (var3 != null) + { + for (int var4 = 0; var4 < var3.size(); ++var4) + { + final Entity var5 = (Entity) var3.get(var4); + + if (var5 instanceof EntityLivingBase && !var5.isDead && !var5.isBurning() && !var5.equals(this.ridingEntity)) + { + var5.setFire(3); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_SET_ENTITY_FIRE, GCCoreUtil.getDimensionID(var5.world), new Object[] + {var5.getEntityId()})); + } + } + } + } + } + + @Override + public int getBrightnessForRender(float par1) + { + return 15728880; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchSmoke.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchSmoke.java new file mode 100644 index 00000000..b0272f5f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleLaunchSmoke.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ParticleLaunchSmoke extends EntityFXLaunchParticle +{ + + float smokeParticleScale; + + public ParticleLaunchSmoke(World par1World, Vector3 position, Vector3 motion, float size, boolean launched) + { + super(par1World, position.x, position.y, position.z, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.setSize(0.2F, 0.2F); + this.motionX += motion.x; + this.motionY += motion.y; + this.motionZ += motion.z; + this.particleAlpha = 1.0F; + this.particleRed = this.particleGreen = this.particleBlue = (float) (Math.random() * 0.30000001192092896D) + 0.6F; + this.particleScale *= 0.75F; + this.particleScale *= size * 3; + this.smokeParticleScale = this.particleScale; + + if (launched) + { + this.particleMaxAge = (int) (this.particleMaxAge * size) + 10; + } else + { + this.motionX += par1World.rand.nextDouble() / 2 - 0.25; + this.motionY += par1World.rand.nextDouble() / 20; + this.motionZ += par1World.rand.nextDouble() / 2 - 0.25; + this.particleMaxAge = 30 + this.particleMaxAge; + } + + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + GL11.glPushMatrix(); + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_DEPTH_TEST); + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + GL11.glPopMatrix(); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOilDrip.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOilDrip.java new file mode 100644 index 00000000..be961dc4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOilDrip.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.Particle; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleOilDrip extends Particle +{ + + private int bobTimer; + + public ParticleOilDrip(World world, double x, double y, double z) + { + super(world, x, y, z, 0.0D, 0.0D, 0.0D); + this.motionX = this.motionY = this.motionZ = 0.0D; + this.setParticleTextureIndex(113); + this.setSize(0.01F, 0.01F); + this.particleGravity = 0.06F; + this.bobTimer = 40; + this.particleMaxAge = (int) (64.0D / (Math.random() * 0.8D + 0.2D)); + this.motionX = this.motionY = this.motionZ = 0.0D; + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.particleRed = 0.1F; + this.particleGreen = 0.1F; + this.particleBlue = 0.1F; + + this.motionY -= this.particleGravity; + + if (this.bobTimer-- > 0) + { + this.motionX *= 0.02D; + this.motionY *= 0.02D; + this.motionZ *= 0.02D; + this.setParticleTextureIndex(113); + } else + { + this.setParticleTextureIndex(112); + } + + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + + BlockPos pos = new BlockPos(this.posX, this.posY, this.posZ); + IBlockState state = this.world.getBlockState(pos); + Material material = state.getMaterial(); + + if (material.isLiquid() || material.isSolid()) + { + double d0 = 0.0D; + + if (state.getBlock() instanceof BlockLiquid) + { + d0 = BlockLiquid.getLiquidHeightPercent(((Integer) state.getValue(BlockLiquid.LEVEL)).intValue()); + } + + double d1 = MathHelper.floor(this.posY) + 1 - d0; + + if (this.posY < d1) + { + this.setExpired(); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOxygen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOxygen.java new file mode 100644 index 00000000..2b97378c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleOxygen.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import java.util.HashMap; +import java.util.Map; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleOxygen extends Particle +{ + + private final float portalParticleScale; + private final double portalPosX; + private final double portalPosY; + private final double portalPosZ; + private static long tick = -1L; + private static Map cacheLighting = new HashMap<>(); + + public ParticleOxygen(World par1World, Vector3 position, Vector3 motion, Vector3 color) + { + super(par1World, position.x, position.y, position.z, motion.x, motion.y, motion.z); + this.motionX = motion.x; + this.motionY = motion.y; + this.motionZ = motion.z; + this.portalPosX = this.posX = position.x; + this.portalPosY = this.posY = position.y; + this.portalPosZ = this.posZ = position.z; + this.portalParticleScale = this.particleScale = 0.1F; + this.particleRed = color.floatX(); + this.particleGreen = color.floatY(); + this.particleBlue = color.floatZ(); + this.particleMaxAge = (int) (Math.random() * 10.0D) + 40; + this.canCollide = false; + this.setParticleTextureIndex((int) (Math.random() * 8.0D)); + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge; + var8 = 1.0F - var8; + var8 *= var8; + var8 = 1.0F - var8; + this.particleScale = this.portalParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + @Override + public int getBrightnessForRender(float par1) + { + long time = this.world.getWorldTime(); + if (time > tick) + { + cacheLighting.clear(); + tick = time; + } + BlockPos blockpos = new BlockPos(this.posX, this.posY + 0.17, this.posZ); + int var2; + if (cacheLighting.containsKey(blockpos)) + { + var2 = cacheLighting.get(blockpos); + } else + { + var2 = this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + cacheLighting.put(blockpos, var2); + } + float var3 = (float) this.particleAge / (float) this.particleMaxAge; + var3 *= var3; + var3 *= var3; + final int var4 = var2 & 255; + int var5 = var2 >> 16 & 255; + var5 += (int) (var3 * 15.0F * 16.0F); + + if (var5 > 240) + { + var5 = 240; + } + + return var4 | var5 << 16; + } + + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + float var1 = (float) this.particleAge / (float) this.particleMaxAge; + final float var2 = var1; + var1 = -var1 + var1 * var1 * 2.0F; + var1 = 1.0F - var1; + this.posX = this.portalPosX + this.motionX * var1; + this.posY = this.portalPosY + this.motionY * var1 + (1.0F - var2); + this.posZ = this.portalPosZ + this.motionZ * var1; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSmokeSmall.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSmokeSmall.java new file mode 100644 index 00000000..628fa63b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSmokeSmall.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ParticleSmokeSmall extends Particle +{ + + float smokeParticleScale; + + public ParticleSmokeSmall(World par1World, Vector3 position, Vector3 motion) + { + super(par1World, position.x, position.y, position.z, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.01D; + this.motionY *= 0.01D; + this.motionZ *= 0.01D; + this.setSize(0.05F, 0.05F); + this.motionX += motion.x; + this.motionY += motion.y; + this.motionZ += motion.z; + this.particleAlpha = 0.8F; + this.particleRed = this.particleGreen = this.particleBlue = (float) (Math.random() * 0.2D) + 0.7F; + this.particleScale *= 0.3F; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = 110; + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + GL11.glPushMatrix(); + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_DEPTH_TEST); + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + GL11.glPopMatrix(); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.03D; + this.motionZ *= 1.03D; + } + + this.motionX *= 0.99D; + this.motionY *= 0.99D; + this.motionZ *= 0.99D; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSparks.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSparks.java new file mode 100644 index 00000000..62491b10 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/fx/ParticleSparks.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.fx; + +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + +public class ParticleSparks extends Particle +{ + + float smokeParticleScale; + + public ParticleSparks(World par1World, double par2, double par4, double par6, double par8, double par12) + { + super(par1World, par2, par4, par6, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += par8; + this.motionY += 0.06; + this.motionZ += par12; + this.particleRed = 255F / 255F; + this.particleGreen = 255F / 255F; + this.particleBlue = 0F / 255F + this.rand.nextFloat() / 6; + this.particleScale *= 0.15F; + this.particleScale *= 1.0F * 3; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) 50.0D; + this.particleMaxAge = (int) (this.particleMaxAge * 1.0F); + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float var8 = (this.particleAge + partialTicks) / this.particleMaxAge * 32.0F; + + if (var8 < 0.0F) + { + var8 = 0.0F; + } + + if (var8 > 1.0F) + { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.setParticleTextureIndex(160 + 7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY -= 0.01D; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9100000262260437D; + this.motionY *= 0.9100000262260437D; + this.motionZ *= 0.9100000262260437D; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiHandler.java new file mode 100644 index 00000000..a77cdc86 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiHandler.java @@ -0,0 +1,345 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiAirLockController; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCargoLoader; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCargoUnloader; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCircuitFabricator; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCoalGenerator; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCrafting; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiDeconstructor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiElectricFurnace; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiExtendedInventory; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiFuelLoader; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiIngotCompressor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenCollector; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenCompressor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenDistributor; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenSealer; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPainter; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiParaChest; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiRefinery; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiRocketInventory; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiSolar; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiJoinSpaceRace; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiNewSpaceRace; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiPreLaunchChecklist; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCargoLoader; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCircuitFabricator; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCoalGenerator; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCrafting; +import micdoodle8.mods.galacticraft.core.inventory.ContainerDeconstructor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerElectricFurnace; +import micdoodle8.mods.galacticraft.core.inventory.ContainerElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.inventory.ContainerExtendedInventory; +import micdoodle8.mods.galacticraft.core.inventory.ContainerFuelLoader; +import micdoodle8.mods.galacticraft.core.inventory.ContainerIngotCompressor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenCollector; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenCompressor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenDistributor; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenSealer; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.inventory.ContainerPainter; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRefinery; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRocketInventory; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSolar; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoUnloader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; +import micdoodle8.mods.galacticraft.core.tile.TileEntityParaChest; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.IGuiHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GuiHandler implements IGuiHandler +{ + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase == null) + { + player.sendMessage(new TextComponentString("Galacticraft player instance null server-side. This is a bug.")); + return null; + } + + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (ID == GuiIdsCore.ROCKET_INVENTORY && player.getRidingEntity() instanceof EntityTieredRocket) + { + return new ContainerRocketInventory(player.inventory, (EntityTieredRocket) player.getRidingEntity(), ((EntityTieredRocket) player.getRidingEntity()).getType(), player); + } else if (ID == GuiIdsCore.EXTENDED_INVENTORY) + { + return new ContainerExtendedInventory(player, stats.getExtendedInventory()); + } + + BlockPos pos = new BlockPos(x, y, z); + TileEntity tile = world.getTileEntity(pos); + + if (tile != null) + { + if (tile instanceof TileEntityCrafting) + { + return new ContainerCrafting(player.inventory, (TileEntityCrafting) tile); + } else if (tile instanceof TileEntityRefinery) + { + return new ContainerRefinery(player.inventory, (TileEntityRefinery) tile, player); + } else if (tile instanceof TileEntityOxygenCollector) + { + return new ContainerOxygenCollector(player.inventory, (TileEntityOxygenCollector) tile); + } else if (tile instanceof TileEntityOxygenDistributor) + { + return new ContainerOxygenDistributor(player.inventory, (TileEntityOxygenDistributor) tile); + } else if (tile instanceof TileEntityFuelLoader) + { + return new ContainerFuelLoader(player.inventory, (TileEntityFuelLoader) tile); + } else if (tile instanceof TileEntityOxygenSealer) + { + return new ContainerOxygenSealer(player.inventory, (TileEntityOxygenSealer) tile); + } else if (tile instanceof TileEntityCargoLoader) + { + return new ContainerCargoLoader(player.inventory, (TileEntityCargoLoader) tile); + } else if (tile instanceof TileEntityCargoUnloader) + { + return new ContainerCargoLoader(player.inventory, (TileEntityCargoUnloader) tile); + } else if (tile instanceof TileEntityParaChest) + { + return new ContainerParaChest(player.inventory, (TileEntityParaChest) tile, player); + } else if (tile instanceof TileEntitySolar) + { + return new ContainerSolar(player.inventory, (TileEntitySolar) tile); + } else if (tile instanceof TileEntityEnergyStorageModule) + { + return new ContainerEnergyStorageModule(player.inventory, (TileEntityEnergyStorageModule) tile); + } else if (tile instanceof TileEntityCoalGenerator) + { + return new ContainerCoalGenerator(player.inventory, (TileEntityCoalGenerator) tile); + } else if (tile instanceof TileEntityElectricFurnace) + { + return new ContainerElectricFurnace(player.inventory, (TileEntityElectricFurnace) tile); + } else if (tile instanceof TileEntityIngotCompressor) + { + return new ContainerIngotCompressor(player.inventory, (TileEntityIngotCompressor) tile); + } else if (tile instanceof TileEntityElectricIngotCompressor) + { + return new ContainerElectricIngotCompressor(player.inventory, (TileEntityElectricIngotCompressor) tile); + } else if (tile instanceof TileEntityCircuitFabricator) + { + return new ContainerCircuitFabricator(player.inventory, (TileEntityCircuitFabricator) tile); + } else if (tile instanceof TileEntityOxygenStorageModule) + { + return new ContainerOxygenStorageModule(player.inventory, (TileEntityOxygenStorageModule) tile); + } else if (tile instanceof TileEntityOxygenCompressor) + { + return new ContainerOxygenCompressor(player.inventory, (TileEntityOxygenCompressor) tile, player); + } else if (tile instanceof TileEntityOxygenDecompressor) + { + return new ContainerOxygenDecompressor(player.inventory, (TileEntityOxygenDecompressor) tile, player); + } else if (tile instanceof TileEntityDeconstructor) + { + return new ContainerDeconstructor(player.inventory, (TileEntityDeconstructor) tile); + } else if (tile instanceof TileEntityPainter) + { + return new ContainerPainter(player.inventory, (TileEntityPainter) tile); + } + } + + for (ISchematicPage page : stats.getUnlockedSchematics()) + { + if (ID == page.getGuiID()) + { + return page.getResultContainer(playerBase, new BlockPos(x, y, z)); + } + } + + return null; + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + return this.getClientGuiElement(ID, player, world, new BlockPos(x, y, z)); + } + + return null; + } + + @SideOnly(Side.CLIENT) + private Object getClientGuiElement(int ID, EntityPlayer player, World world, BlockPos position) + { + EntityPlayerSP playerClient = PlayerUtil.getPlayerBaseClientFromPlayer(player, false); + + if (ID == GuiIdsCore.GALAXY_MAP) + { + return new GuiCelestialSelection(true, null, true); + } else if (ID == GuiIdsCore.ROCKET_INVENTORY && player.getRidingEntity() instanceof EntityTieredRocket) + { + return new GuiRocketInventory(player.inventory, (EntityTieredRocket) player.getRidingEntity(), ((EntityTieredRocket) player.getRidingEntity()).getType()); + } else if (ID == GuiIdsCore.EXTENDED_INVENTORY) + { + return new GuiExtendedInventory(player, ClientProxyCore.dummyInventory); + } else if (ID == GuiIdsCore.SPACE_RACE_START) + { + return new GuiNewSpaceRace(player); + } else if (ID == GuiIdsCore.SPACE_RACE_JOIN) + { + return new GuiJoinSpaceRace(playerClient); + } else if (ID == GuiIdsCore.PRE_LAUNCH_CHECKLIST) + { + ItemStack checkList = GCCoreUtil.getMatchingItemEitherHand(playerClient, GCItems.prelaunchChecklist); + return new GuiPreLaunchChecklist(WorldUtil.getAllChecklistKeys(), + checkList != null && checkList.hasTagCompound() ? (NBTTagCompound) checkList.getTagCompound().getTag("checklistData") : null); + } + + TileEntity tile = world.getTileEntity(position); + + if (tile != null) + { + if (tile instanceof TileEntityCrafting) + { + return new GuiCrafting(player.inventory, (TileEntityCrafting) tile); + } else if (tile instanceof TileEntityRefinery) + { + return new GuiRefinery(player.inventory, (TileEntityRefinery) world.getTileEntity(position)); + } else if (tile instanceof TileEntityOxygenCollector) + { + return new GuiOxygenCollector(player.inventory, (TileEntityOxygenCollector) tile); + } else if (tile instanceof TileEntityOxygenDistributor) + { + return new GuiOxygenDistributor(player.inventory, (TileEntityOxygenDistributor) tile); + } else if (tile instanceof TileEntityFuelLoader) + { + return new GuiFuelLoader(player.inventory, (TileEntityFuelLoader) tile); + } else if (tile instanceof TileEntityOxygenSealer) + { + return new GuiOxygenSealer(player.inventory, (TileEntityOxygenSealer) tile); + } else if (tile instanceof TileEntityCargoLoader) + { + return new GuiCargoLoader(player.inventory, (TileEntityCargoLoader) tile); + } else if (tile instanceof TileEntityCargoUnloader) + { + return new GuiCargoUnloader(player.inventory, (TileEntityCargoUnloader) tile); + } else if (tile instanceof TileEntityParaChest) + { + return new GuiParaChest(player.inventory, (TileEntityParaChest) tile); + } else if (tile instanceof TileEntitySolar) + { + return new GuiSolar(player.inventory, (TileEntitySolar) tile); + } else if (tile instanceof TileEntityAirLockController) + { + return new GuiAirLockController((TileEntityAirLockController) tile); + } else if (tile instanceof TileEntityEnergyStorageModule) + { + return new GuiEnergyStorageModule(player.inventory, (TileEntityEnergyStorageModule) tile); + } else if (tile instanceof TileEntityCoalGenerator) + { + return new GuiCoalGenerator(player.inventory, (TileEntityCoalGenerator) tile); + } else if (tile instanceof TileEntityElectricFurnace) + { + return new GuiElectricFurnace(player.inventory, (TileEntityElectricFurnace) tile); + } else if (tile instanceof TileEntityIngotCompressor) + { + return new GuiIngotCompressor(player.inventory, (TileEntityIngotCompressor) tile); + } else if (tile instanceof TileEntityElectricIngotCompressor) + { + return new GuiElectricIngotCompressor(player.inventory, (TileEntityElectricIngotCompressor) tile); + } else if (tile instanceof TileEntityCircuitFabricator) + { + return new GuiCircuitFabricator(player.inventory, (TileEntityCircuitFabricator) tile); + } else if (tile instanceof TileEntityOxygenStorageModule) + { + return new GuiOxygenStorageModule(player.inventory, (TileEntityOxygenStorageModule) tile); + } else if (tile instanceof TileEntityOxygenCompressor) + { + return new GuiOxygenCompressor(player.inventory, (TileEntityOxygenCompressor) tile); + } else if (tile instanceof TileEntityOxygenDecompressor) + { + return new GuiOxygenDecompressor(player.inventory, (TileEntityOxygenDecompressor) tile); + } else if (tile instanceof TileEntityDeconstructor) + { + return new GuiDeconstructor(player.inventory, (TileEntityDeconstructor) tile); + } else if (tile instanceof TileEntityPainter) + { + return new GuiPainter(player.inventory, (TileEntityPainter) tile); + } + } + + if (playerClient != null) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(playerClient); + + for (ISchematicPage page : stats.getUnlockedSchematics()) + { + if (ID == page.getGuiID()) + { + GuiScreen screen = page.getResultScreen(playerClient, position); + + if (screen instanceof ISchematicResultPage) + { + ((ISchematicResultPage) screen).setPageIndex(page.getPageID()); + } + + return screen; + } + } + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiIdsCore.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiIdsCore.java new file mode 100644 index 00000000..7a9e4697 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/GuiIdsCore.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui; + +public class GuiIdsCore +{ + + public static final int NASA_WORKBENCH_ROCKET = 0; + public static final int NASA_WORKBENCH_BUGGY = 1; + public static final int NASA_WORKBENCH_NEW_SCHEMATIC = 2; + public static final int GALAXY_MAP = 3; + public static final int ROCKET_INVENTORY = 4; + public static final int EXTENDED_INVENTORY = 5; + public static final int SPACE_RACE_START = 6; + public static final int SPACE_RACE_JOIN = 7; + public static final int PRE_LAUNCH_CHECKLIST = 8; +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiAirLockController.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiAirLockController.java new file mode 100644 index 00000000..6baf7272 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiAirLockController.java @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementDropdown; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementDropdown.IDropboxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Keyboard; + +public class GuiAirLockController extends GuiScreen implements ICheckBoxCallback, IDropboxCallback, ITextBoxCallback +{ + + private final int xSize; + private final int ySize; + private static final ResourceLocation airLockControllerGui = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/air_lock_controller.png"); + private final TileEntityAirLockController controller; + private GuiElementCheckbox checkboxRedstoneSignal; + private GuiElementCheckbox checkboxPlayerDistance; + private GuiElementDropdown dropdownPlayerDistance; + private GuiElementCheckbox checkboxOpenForPlayer; + private GuiElementTextBox textBoxPlayerToOpenFor; + private GuiElementCheckbox checkboxInvertSelection; + private GuiElementCheckbox checkboxHorizontalMode; + private int cannotEditTimer; + + public GuiAirLockController(TileEntityAirLockController controller) + { + this.controller = controller; + this.ySize = 139; + this.xSize = 181; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.checkboxRedstoneSignal = new GuiElementCheckbox(0, this, this.width / 2 - 84, var6 + 18, GCCoreUtil.translate("gui.checkbox.redstone_signal.name")); + this.checkboxPlayerDistance = new GuiElementCheckbox(1, this, this.width / 2 - 84, var6 + 33, GCCoreUtil.translate("gui.checkbox.player_within.name") + ": "); + String[] dropboxStrings = + {GCCoreUtil.translate("gui.dropbox.player_distance.name.0"), GCCoreUtil.translate("gui.dropbox.player_distance.name.1"), GCCoreUtil.translate("gui.dropbox.player_distance.name.2"), + GCCoreUtil.translate("gui.dropbox.player_distance.name.3")}; + this.dropdownPlayerDistance = new GuiElementDropdown(2, this, var5 + 99, var6 + 32, dropboxStrings); + this.checkboxOpenForPlayer = new GuiElementCheckbox(3, this, this.width / 2 - 68, var6 + 49, GCCoreUtil.translate("gui.checkbox.player_name.name") + ": "); + this.textBoxPlayerToOpenFor = new GuiElementTextBox(4, this, this.width / 2 - 61, var6 + 64, 110, 15, "", false, 16, false); + this.checkboxInvertSelection = new GuiElementCheckbox(5, this, this.width / 2 - 84, var6 + 80, GCCoreUtil.translate("gui.checkbox.invert.name")); + this.checkboxHorizontalMode = new GuiElementCheckbox(6, this, this.width / 2 - 84, var6 + 96, GCCoreUtil.translate("gui.checkbox.horizontal.name")); + this.buttonList.add(this.checkboxRedstoneSignal); + this.buttonList.add(this.checkboxPlayerDistance); + this.buttonList.add(this.dropdownPlayerDistance); + this.buttonList.add(this.checkboxOpenForPlayer); + this.buttonList.add(this.textBoxPlayerToOpenFor); + this.buttonList.add(this.checkboxInvertSelection); + this.buttonList.add(this.checkboxHorizontalMode); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (keyID != Keyboard.KEY_ESCAPE) + { + if (this.textBoxPlayerToOpenFor.keyTyped(keyChar, keyID)) + { + return; + } + } + + super.keyTyped(keyChar, keyID); + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + break; + } + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + + this.mc.renderEngine.bindTexture(GuiAirLockController.airLockControllerGui); + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + this.drawTexturedModalRect(var5 + 11, var6 + 51, 181, 0, 7, 9); + + String displayString = GCCoreUtil.translateWithFormat("gui.title.air_lock.name", this.controller.ownerName); + this.fontRenderer.drawString(displayString, this.width / 2 - this.fontRenderer.getStringWidth(displayString) / 2, this.height / 2 - 65, 4210752); + + if (this.cannotEditTimer > 0) + { + this.fontRenderer.drawString(this.controller.ownerName, this.width / 2 - this.fontRenderer.getStringWidth(displayString) / 2, this.height / 2 - 65, + this.cannotEditTimer % 30 < 15 ? ColorUtil.to32BitColor(255, 255, 100, 100) : 4210752); + this.cannotEditTimer--; + } + + displayString = GCCoreUtil.translate("gui.message.status.name") + ":"; + this.fontRenderer.drawString(displayString, this.width / 2 - this.fontRenderer.getStringWidth(displayString) / 2, this.height / 2 + 45, 4210752); + displayString = EnumColor.RED + GCCoreUtil.translate("gui.status.air_lock_closed.name"); + + if (!this.controller.active) + { + displayString = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.air_lock_open.name"); + } + + this.fontRenderer.drawString(displayString, this.width / 2 - this.fontRenderer.getStringWidth(displayString) / 2, this.height / 2 + 55, 4210752); + + super.drawScreen(par1, par2, par3); + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + if (checkbox.equals(this.checkboxRedstoneSignal)) + { + this.controller.redstoneActivation = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {0, this.controller.getPos(), this.controller.redstoneActivation ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 0, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.redstoneActivation ? 1 : + // 0 })); + } else if (checkbox.equals(this.checkboxPlayerDistance)) + { + this.controller.playerDistanceActivation = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {1, this.controller.getPos(), this.controller.playerDistanceActivation ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 1, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.playerDistanceActivation + // ? 1 : 0 })); + } else if (checkbox.equals(this.checkboxOpenForPlayer)) + { + this.controller.playerNameMatches = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {3, this.controller.getPos(), this.controller.playerNameMatches ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 3, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.playerNameMatches ? 1 : 0 + // })); + } else if (checkbox.equals(this.checkboxInvertSelection)) + { + this.controller.invertSelection = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {4, this.controller.getPos(), this.controller.invertSelection ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 4, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.invertSelection ? 1 : 0 + // })); + } else if (checkbox.equals(this.checkboxHorizontalMode)) + { + this.controller.lastHorizontalModeEnabled = this.controller.horizontalModeEnabled; + this.controller.horizontalModeEnabled = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {5, this.controller.getPos(), this.controller.horizontalModeEnabled ? 1 : 0})); + // PacketDispatcher.sendPacketToServer(PacketUtil.createPacket(GalacticraftCore.CHANNEL, + // EnumPacketServer.ON_ADVANCED_GUI_CLICKED_INT, new Object[] { 5, + // this.controller.xCoord, this.controller.yCoord, + // this.controller.zCoord, this.controller.horizontalModeEnabled ? 1 + // : 0 })); + } + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.controller.ownerName); + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + if (checkbox.equals(this.checkboxRedstoneSignal)) + { + return this.controller.redstoneActivation; + } else if (checkbox.equals(this.checkboxPlayerDistance)) + { + return this.controller.playerDistanceActivation; + } else if (checkbox.equals(this.checkboxOpenForPlayer)) + { + return this.controller.playerNameMatches; + } else if (checkbox.equals(this.checkboxInvertSelection)) + { + return this.controller.invertSelection; + } else if (checkbox.equals(this.checkboxHorizontalMode)) + { + return this.controller.horizontalModeEnabled; + } + + return false; + } + + @Override + public boolean canBeClickedBy(GuiElementDropdown dropdown, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.controller.ownerName); + } + + @Override + public void onSelectionChanged(GuiElementDropdown dropdown, int selection) + { + if (dropdown.equals(this.dropdownPlayerDistance)) + { + this.controller.playerDistanceSelection = selection; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {2, this.controller.getPos(), this.controller.playerDistanceSelection})); + } + } + + @Override + public int getInitialSelection(GuiElementDropdown dropdown) + { + return this.controller.playerDistanceSelection; + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.controller.ownerName); + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + if (textBox.equals(this.textBoxPlayerToOpenFor)) + { + this.controller.playerToOpenFor = newText != null ? newText : ""; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_STRING, GCCoreUtil.getDimensionID(mc.world), new Object[] + {0, this.controller.getPos(), this.controller.playerToOpenFor})); + } + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + if (textBox.equals(this.textBoxPlayerToOpenFor)) + { + return this.controller.playerToOpenFor; + } + + return null; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + return ColorUtil.to32BitColor(255, 200, 200, 200); + } + + @Override + public void onIntruderInteraction() + { + this.cannotEditTimer = 50; + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + this.cannotEditTimer = 50; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiBuggy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiBuggy.java new file mode 100644 index 00000000..5abd3927 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiBuggy.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.inventory.ContainerBuggy; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiBuggy extends GuiContainerGC +{ + + private static ResourceLocation[] sealerTexture = new ResourceLocation[4]; + + static + { + for (int i = 0; i < 4; i++) + { + GuiBuggy.sealerTexture[i] = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/buggy_" + i * 18 + ".png"); + } + } + + private final IInventory upperChestInventory; + private final int type; + + public GuiBuggy(IInventory par1IInventory, IInventory par2IInventory, int type) + { + super(new ContainerBuggy(par1IInventory, par2IInventory, type, FMLClientHandler.instance().getClient().player)); + this.upperChestInventory = par1IInventory; + this.allowUserInput = false; + this.type = type; + this.ySize = 145 + this.type * 36; + } + + @Override + public void initGui() + { + super.initGui(); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.0")); + oxygenDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 71, (this.height - this.ySize) / 2 + 6, 36, 40, oxygenDesc, this.width, this.height, this)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.fuel.name"), 8, 2 + 3, 4210752); + + this.fontRenderer.drawString(GCCoreUtil.translate(this.upperChestInventory.getName()), 8, this.type == 0 ? 50 : 39, 4210752); + + if (this.mc.player != null && this.mc.player.getRidingEntity() != null && this.mc.player.getRidingEntity() instanceof EntityBuggy) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.fuel.name") + ":", 125, 15 + 3, 4210752); + final double percentage = ((EntityBuggy) this.mc.player.getRidingEntity()).getScaledFuelLevel(100); + final String color = percentage > 80.0D ? EnumColor.BRIGHT_GREEN.getCode() : percentage > 40.0D ? EnumColor.ORANGE.getCode() : EnumColor.RED.getCode(); + final String str = percentage + "% " + GCCoreUtil.translate("gui.message.full.name"); + this.fontRenderer.drawString(color + str, 117 - str.length() / 2, 20 + 8, 4210752); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.getTextureManager().bindTexture(GuiBuggy.sealerTexture[this.type]); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, 176, this.ySize); + + if (this.mc.player != null && this.mc.player.getRidingEntity() != null && this.mc.player.getRidingEntity() instanceof EntityBuggy) + { + final int fuelLevel = ((EntityBuggy) this.mc.player.getRidingEntity()).getScaledFuelLevel(38); + + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 72, (this.height - this.ySize) / 2 + 45 - fuelLevel, 176, 38 - fuelLevel, 42, fuelLevel); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoLoader.java new file mode 100644 index 00000000..22747554 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoLoader.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCargoLoader; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiCargoLoader extends GuiContainerGC +{ + + public static final ResourceLocation loaderTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/cargo_loader.png"); + + private final TileEntityCargoLoader cargoLoader; + + private GuiButton buttonLoadItems; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiCargoLoader(InventoryPlayer par1InventoryPlayer, TileEntityCargoLoader par2TileEntityAirDistributor) + { + super(new ContainerCargoLoader(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.cargoLoader = par2TileEntityAirDistributor; + this.ySize = 201; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.cargoLoader.getWorld()), new Object[] + {this.cargoLoader.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.cargoLoader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.cargoLoader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 107; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 101; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 9, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonLoadItems = new GuiButton(0, this.width / 2 - 1, this.height / 2 - 23, 76, 20, GCCoreUtil.translate("gui.button.loaditems.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetX = -17; + int offsetY = 45; + this.fontRenderer.drawString(this.cargoLoader.getName(), 60, 12, 4210752); + this.buttonLoadItems.enabled = this.cargoLoader.disableCooldown == 0; + this.buttonLoadItems.displayString = !this.cargoLoader.getDisabled(0) ? GCCoreUtil.translate("gui.button.stoploading.name") : GCCoreUtil.translate("gui.button.loaditems.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(), 28 + offsetX, 45 + 23 - 46 + offsetY, 4210752); + // this.fontRenderer.drawString("" + + // this.cargoLoader.storage.getMaxExtract(), 28 + offsetX, 56 + 23 - 46 + // + offsetY, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90, 4210752); + } + + private String getStatus() + { + if (this.cargoLoader.outOfItems) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.noitems.name"); + } + + if (this.cargoLoader.noTarget) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.notargetload.name"); + } + + if (this.cargoLoader.targetNoInventory) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.noinvtarget.name"); + } + + if (this.cargoLoader.targetFull) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.targetfull.name"); + } + + return this.cargoLoader.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiCargoLoader.loaderTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.cargoLoader.getEnergyStoredGC(), this.cargoLoader.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.cargoLoader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.cargoLoader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.cargoLoader.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 94, var6 + 101, 176, 0, 11, 10); + } + + this.drawTexturedModalRect(var5 + 108, var6 + 102, 187, 0, Math.min(this.cargoLoader.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoUnloader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoUnloader.java new file mode 100644 index 00000000..5cf3280a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCargoUnloader.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCargoLoader; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoUnloader; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiCargoUnloader extends GuiContainerGC +{ + + private static final ResourceLocation unloaderTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/cargo_loader.png"); + + private final TileEntityCargoUnloader cargoUnloader; + + private GuiButton buttonLoadItems; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiCargoUnloader(InventoryPlayer par1InventoryPlayer, TileEntityCargoUnloader par2TileEntityAirDistributor) + { + super(new ContainerCargoLoader(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.cargoUnloader = par2TileEntityAirDistributor; + this.ySize = 201; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.cargoUnloader.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.cargoUnloader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.cargoUnloader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 107; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 101; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 9, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonLoadItems = new GuiButton(0, this.width / 2 - 1, this.height / 2 - 23, 76, 20, GCCoreUtil.translate("gui.button.unloaditems.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetX = -17; + int offsetY = 45; + this.fontRenderer.drawString(this.cargoUnloader.getName(), 60, 12, 4210752); + this.buttonLoadItems.enabled = this.cargoUnloader.disableCooldown == 0; + this.buttonLoadItems.displayString = !this.cargoUnloader.getDisabled(0) ? GCCoreUtil.translate("gui.button.stopunloading.name") : GCCoreUtil.translate("gui.button.unloaditems.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(), 28 + offsetX, 45 + 23 - 46 + offsetY, 4210752); + // this.fontRenderer.drawString("" + + // this.cargoUnloader.storage.getMaxExtract(), 28 + offsetX, 56 + 23 - + // 46 + offsetY, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.cargoUnloader.getVoltage(), + // ElectricUnit.VOLTAGE), 28 + offsetX, 68 + 23 - 46 + offsetY, + // 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90, 4210752); + } + + private String getStatus() + { + if (this.cargoUnloader.noTarget) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.notargetunload.name"); + } + + if (this.cargoUnloader.targetEmpty) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.targetempty.name"); + } + + if (this.cargoUnloader.targetNoInventory) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.noinvtarget.name"); + } + + return this.cargoUnloader.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiCargoUnloader.unloaderTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.cargoUnloader.getEnergyStoredGC(), this.cargoUnloader.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.cargoUnloader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.cargoUnloader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.cargoUnloader.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 94, var6 + 101, 176, 0, 11, 10); + } + + this.drawTexturedModalRect(var5 + 108, var6 + 102, 187, 0, Math.min(this.cargoUnloader.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCircuitFabricator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCircuitFabricator.java new file mode 100644 index 00000000..9a4531ff --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCircuitFabricator.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCircuitFabricator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiCircuitFabricator extends GuiContainerGC +{ + + private static final ResourceLocation circuitFabricatorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/circuit_fabricator.png"); + private TileEntityCircuitFabricator tileEntity; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 56, 9, null, 0, 0, this); + private GuiElementInfoRegion processInfoRegion = new GuiElementInfoRegion(0, 0, 53, 12, null, 0, 0, this); + + public GuiCircuitFabricator(InventoryPlayer par1InventoryPlayer, TileEntityCircuitFabricator tileEntity) + { + super(new ContainerCircuitFabricator(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 192; + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 17; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 88; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 5, (this.height - this.ySize) / 2 + 68, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.processInfoRegion.tooltipStrings = new ArrayList(); + this.processInfoRegion.xPosition = (this.width - this.xSize) / 2 + 87; + this.processInfoRegion.yPosition = (this.height - this.ySize) / 2 + 19; + this.processInfoRegion.parentWidth = this.width; + this.processInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.processInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 10, 6, 4210752); + String displayText; + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + String str = GCCoreUtil.translate("gui.message.status.name") + ":"; + this.fontRenderer.drawString(str, 115 - this.fontRenderer.getStringWidth(str) / 2, 80, 4210752); + displayText = this.tileEntity.getGUIstatus(displayText, null, true); + this.fontRenderer.drawString(displayText, 115 - this.fontRenderer.getStringWidth(displayText) / 2, 90, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 93, 4210752); +// str = "" + this.tileEntity.storage.getMaxExtract(); +// this.fontRenderer.drawString(str, 5, 42, 4210752); +// // str = ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), ElectricUnit.VOLTAGE); +// this.fontRenderer.drawString(str, 5, 52, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiCircuitFabricator.circuitFabricatorTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + this.drawTexturedModalRect(containerWidth + 5, containerHeight + 68, 176, 47, 18, 18); + this.drawTexturedModalRect(containerWidth + 5, containerHeight + 89, 194, 47, 9, 8); + this.drawTexturedModalRect(containerWidth + 17, containerHeight + 88, 176, 65, 56, 9); + int scale; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (this.tileEntity.processTicks * 100) / this.tileEntity.getProcessTimeRequired(); + } else + { + scale = 0; + } + + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.electric_compressor.desc.0") + ": " + scale + "%"); + this.processInfoRegion.tooltipStrings = processDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (this.tileEntity.processTicks * 51) / this.tileEntity.getProcessTimeRequired(); + this.drawTexturedModalRect(containerWidth + 88, containerHeight + 20, 176, 17 + this.tileEntity.processTicks % 9 / 3 * 10, scale, 10); + } + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + scale = this.tileEntity.getScaledElecticalLevel(54); + this.drawTexturedModalRect(containerWidth + 116 - 98, containerHeight + 89, 176, 0, scale, 7); + this.drawTexturedModalRect(containerWidth + 4, containerHeight + 88, 176, 7, 11, 10); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCoalGenerator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCoalGenerator.java new file mode 100644 index 00000000..f9d5c2f9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCoalGenerator.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCoalGenerator; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiCoalGenerator extends GuiContainerGC +{ + + private static final ResourceLocation coalGeneratorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/coal_generator.png"); + + private TileEntityCoalGenerator tileEntity; + + public GuiCoalGenerator(InventoryPlayer playerInventory, TileEntityCoalGenerator tileEntity) + { + super(new ContainerCoalGenerator(playerInventory, tileEntity)); + this.tileEntity = tileEntity; + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 55, 6, 4210752); + String displayText = GCCoreUtil.translate("gui.status.generating.name"); + + if (this.tileEntity.heatGJperTick <= 0 || this.tileEntity.heatGJperTick < TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK) + { + displayText = GCCoreUtil.translate("gui.status.not_generating.name"); + } + + this.fontRenderer.drawString(displayText, 122 - this.fontRenderer.getStringWidth(displayText) / 2, 33, 4210752); + + if (this.tileEntity.heatGJperTick < TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK) + { + displayText = GCCoreUtil.translate("gui.status.hull_heat.name") + ": " + (int) (this.tileEntity.heatGJperTick / TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK * 100) + "%"; + } else + { + displayText = EnergyDisplayHelper.getEnergyDisplayS(this.tileEntity.heatGJperTick - TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK) + "/t"; + } + + this.fontRenderer.drawString(displayText, 122 - this.fontRenderer.getStringWidth(displayText) / 2, 45, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + this.mc.renderEngine.bindTexture(GuiCoalGenerator.coalGeneratorTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiContainerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiContainerGC.java new file mode 100644 index 00000000..c142040b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiContainerGC.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public abstract class GuiContainerGC extends GuiContainer +{ + + public List infoRegions = new ArrayList(); + + public GuiContainerGC(Container container) + { + super(container); + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.drawDefaultBackground(); + super.drawScreen(par1, par2, par3); + this.renderHoveredToolTip(par1, par2); + + for (int k = 0; k < this.infoRegions.size(); ++k) + { + GuiElementInfoRegion guibutton = this.infoRegions.get(k); + guibutton.drawRegion(par1, par2); + } + } + + @Override + public void setWorldAndResolution(Minecraft par1Minecraft, int par2, int par3) + { + this.infoRegions.clear(); + super.setWorldAndResolution(par1Minecraft, par2, par3); + } + + public int getTooltipOffset(int par1, int par2) + { + for (int i1 = 0; i1 < this.inventorySlots.inventorySlots.size(); ++i1) + { + Slot slot = this.inventorySlots.inventorySlots.get(i1); + + if (slot.isEnabled() && this.isPointInRegion(slot.xPos, slot.yPos, 16, 16, par1, par2)) + { + ItemStack itemStack = slot.getStack(); + + if (!itemStack.isEmpty()) + { + List list = itemStack.getTooltip(this.mc.player, this.mc.gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL); + int size = list.size(); + + if (CompatibilityManager.isWailaLoaded()) + { + size++; + } + + return size * 10 + 10; + } + } + } + + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCrafting.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCrafting.java new file mode 100644 index 00000000..2674e7e1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiCrafting.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCrafting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiCrafting extends GuiContainerGC +{ + + private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/crafting_table.png"); + TileEntityCrafting tile; + List memorySlotDesc = new ArrayList(); + + public GuiCrafting(InventoryPlayer playerInv, TileEntityCrafting tile) + { + super(new ContainerCrafting(playerInv, tile)); + this.tile = tile; + } + + @Override + public void initGui() + { + super.initGui(); + ItemStack mem = this.tile.getMemoryHeld(); + boolean memoryStored = !mem.isEmpty(); + memorySlotDesc.add(GCCoreUtil.translate(memoryStored ? "gui.crafting_memory.desc.0" : "gui.crafting_memory.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 123, (this.height - this.ySize) / 2 + 59, 18, 18, memorySlotDesc, this.width, this.height, this)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(I18n.format("container.crafting", new Object[0]), 28, 6, 4210752); + this.fontRenderer.drawString(I18n.format("container.inventory", new Object[0]), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(craftingTableGuiTextures); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + + ItemStack mem = this.tile.getMemoryHeld(); + boolean memoryStored = !mem.isEmpty(); + memorySlotDesc.clear(); + memorySlotDesc.add(GCCoreUtil.translate(memoryStored ? "gui.crafting_memory.desc.0" : "gui.crafting_memory.desc.1")); + if (mem != null && !mem.isEmpty()) + this.itemRender.renderItemAndEffectIntoGUI(mem, i + 124, j + 59); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiDeconstructor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiDeconstructor.java new file mode 100644 index 00000000..832443cf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiDeconstructor.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerDeconstructor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiDeconstructor extends GuiContainerGC +{ + + private static final ResourceLocation guiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/deconstructor.png"); + private TileEntityDeconstructor tileEntity; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 56, 9, null, 0, 0, this); + private GuiElementInfoRegion processInfoRegion = new GuiElementInfoRegion(0, 0, 52, 25, null, 0, 0, this); + + public GuiDeconstructor(InventoryPlayer par1InventoryPlayer, TileEntityDeconstructor tileEntity) + { + super(new ContainerDeconstructor(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 199; + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 17; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 95; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 54, (this.height - this.ySize) / 2 + 74, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.processInfoRegion.tooltipStrings = new ArrayList(); + this.processInfoRegion.xPosition = (this.width - this.xSize) / 2 + 53;// 77 + this.processInfoRegion.yPosition = (this.height - this.ySize) / 2 + 28;// 30 + this.processInfoRegion.parentWidth = this.width; + this.processInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.processInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 10, 6, 4210752); + String displayText; + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + String str = GCCoreUtil.translate("gui.message.status.name") + ": " + displayText; + this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 75, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 93, 4210752); +// str = "" + this.tileEntity.storage.getMaxExtract(); +// this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 85, 4210752); +// // str = ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), ElectricUnit.VOLTAGE); +// this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 95, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiDeconstructor.guiTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + int scale; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 100); + } else + { + scale = 0; + } + + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.electric_compressor.desc.0") + ": " + scale + "%"); + this.processInfoRegion.tooltipStrings = processDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 54); + this.drawTexturedModalRect(containerWidth + 53, containerHeight + 36, 176, 13, scale, 17); + } + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + scale = this.tileEntity.getScaledElecticalLevel(54); + this.drawTexturedModalRect(containerWidth + 116 - 98, containerHeight + 96, 176, 30, scale, 7); + this.drawTexturedModalRect(containerWidth + 4, containerHeight + 95, 176, 37, 11, 10); + } + + if (this.tileEntity.processTicks > this.tileEntity.processTimeRequired / 2) + { + this.drawTexturedModalRect(containerWidth + 77, containerHeight + 28, 176, 0, 15, 13); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricFurnace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricFurnace.java new file mode 100644 index 00000000..7fa07a84 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricFurnace.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerElectricFurnace; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiElectricFurnace extends GuiContainerGC +{ + + private static final ResourceLocation electricFurnaceTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/electric_furnace.png"); + private static final ResourceLocation arcFurnaceTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/electric_arc_furnace.png"); + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 56, 9, null, 0, 0, this); + + private TileEntityElectricFurnace tileEntity; + private ResourceLocation texture; + + public GuiElectricFurnace(InventoryPlayer par1InventoryPlayer, TileEntityElectricFurnace tileEntity) + { + super(new ContainerElectricFurnace(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + texture = tileEntity.tierGC == 2 ? arcFurnaceTexture : electricFurnaceTexture; + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 39; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 52; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 48, 18, 18, batterySlotDesc, this.width, this.height, this)); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 45, 6, 4210752); + String displayText = ""; + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": ", 97, 52, 4210752); + this.fontRenderer.drawString(this.tileEntity.getGUIstatus(null, displayText, true), 107, 62, 4210752); +// this.fontRenderer.drawString("" + this.tileEntity.storage.getMaxExtract(), 97, 56, 4210752); +// this.fontRenderer.drawString("Voltage: " + (int) (this.tileEntity.getVoltage() * 1000.0F), 97, 68, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(this.texture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + int scale; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 23); + this.drawTexturedModalRect(containerWidth + 78, containerHeight + 24, 176, 0, 23 - scale, 15); + } + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + scale = this.tileEntity.getScaledElecticalLevel(54); + this.drawTexturedModalRect(containerWidth + 40, containerHeight + 53, 176, 15, scale, 7); + this.drawTexturedModalRect(containerWidth + 26, containerHeight + 52, 176, 22, 11, 10); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricIngotCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricIngotCompressor.java new file mode 100644 index 00000000..9eeb8902 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiElectricIngotCompressor.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiElectricIngotCompressor extends GuiContainerGC +{ + + private static final ResourceLocation electricFurnaceTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/electric_ingot_compressor.png"); + private TileEntityElectricIngotCompressor tileEntity; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 56, 9, null, 0, 0, this); + private GuiElementInfoRegion processInfoRegion = new GuiElementInfoRegion(0, 0, 52, 25, null, 0, 0, this); + + public GuiElectricIngotCompressor(InventoryPlayer par1InventoryPlayer, TileEntityElectricIngotCompressor tileEntity) + { + super(new ContainerElectricIngotCompressor(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 199; + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 17; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 95; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 54, (this.height - this.ySize) / 2 + 74, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.processInfoRegion.tooltipStrings = new ArrayList(); + this.processInfoRegion.xPosition = (this.width - this.xSize) / 2 + 77; + this.processInfoRegion.yPosition = (this.height - this.ySize) / 2 + 30; + this.processInfoRegion.parentWidth = this.width; + this.processInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.processInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 10, 6, 4210752); + String displayText; + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + String str = GCCoreUtil.translate("gui.message.status.name") + ": " + this.tileEntity.getGUIstatus(displayText, null, true); + this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 75, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 93, 4210752); +// str = "" + this.tileEntity.storage.getMaxExtract(); +// this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 85, 4210752); +// // str = ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), ElectricUnit.VOLTAGE); +// this.fontRenderer.drawString(str, 120 - this.fontRenderer.getStringWidth(str) / 2, 95, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiElectricIngotCompressor.electricFurnaceTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + int scale; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 100); + } else + { + scale = 0; + } + + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.electric_compressor.desc.0") + ": " + scale + "%"); + this.processInfoRegion.tooltipStrings = processDesc; + + if (this.tileEntity.processTicks > 0) + { + scale = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.processTimeRequired * 54); + this.drawTexturedModalRect(containerWidth + 77, containerHeight + 38, 176, 13, scale, 17); + } + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + scale = this.tileEntity.getScaledElecticalLevel(54); + this.drawTexturedModalRect(containerWidth + 116 - 98, containerHeight + 96, 176, 30, scale, 7); + this.drawTexturedModalRect(containerWidth + 4, containerHeight + 95, 176, 37, 11, 10); + } + + if (this.tileEntity.processTicks > this.tileEntity.processTimeRequired / 2) + { + this.drawTexturedModalRect(containerWidth + 101, containerHeight + 30, 176, 0, 15, 13); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiEnergyStorageModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiEnergyStorageModule.java new file mode 100644 index 00000000..8d9ea170 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiEnergyStorageModule.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiEnergyStorageModule extends GuiContainerGC +{ + + private static final ResourceLocation batteryBoxTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/energy_storage_module.png"); + + private TileEntityEnergyStorageModule tileEntity; + + public GuiEnergyStorageModule(InventoryPlayer par1InventoryPlayer, TileEntityEnergyStorageModule batteryBox) + { + super(new ContainerEnergyStorageModule(par1InventoryPlayer, batteryBox)); + this.tileEntity = batteryBox; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), this.xSize / 2 - this.fontRenderer.getStringWidth(this.tileEntity.getName()) / 2, 6, 4210752); + float energy = this.tileEntity.getEnergyStoredGC(); + if (energy + 49 > this.tileEntity.getMaxEnergyStoredGC()) + { + energy = this.tileEntity.getMaxEnergyStoredGC(); + } + String displayStr = EnergyDisplayHelper.getEnergyDisplayS(energy); + this.fontRenderer.drawString(displayStr, 122 - this.fontRenderer.getStringWidth(displayStr) / 2, 25, 4210752); + displayStr = GCCoreUtil.translate("gui.message.of.name") + " " + EnergyDisplayHelper.getEnergyDisplayS(this.tileEntity.getMaxEnergyStoredGC()); + this.fontRenderer.drawString(displayStr, 122 - this.fontRenderer.getStringWidth(displayStr) / 2, 34, 4210752); + displayStr = GCCoreUtil.translate("gui.max_output.desc") + ": " + EnergyDisplayHelper.getEnergyDisplayS(this.tileEntity.storage.getMaxExtract()) + "/t"; + this.fontRenderer.drawString(displayStr, 114 - this.fontRenderer.getStringWidth(displayStr) / 2, 64, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiEnergyStorageModule.batteryBoxTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + // Background energy bar + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + // Foreground energy bar + int scale = (int) ((this.tileEntity.getEnergyStoredGC() + 49) / this.tileEntity.getMaxEnergyStoredGC() * 72); + this.drawTexturedModalRect(containerWidth + 87, containerHeight + 52, 176, 0, scale, 3); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiExtendedInventory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiExtendedInventory.java new file mode 100644 index 00000000..fca45766 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiExtendedInventory.java @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.api.client.tabs.AbstractTab; +import micdoodle8.mods.galacticraft.api.client.tabs.TabRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.screen.InventoryTabGalacticraft; +import micdoodle8.mods.galacticraft.core.inventory.ContainerExtendedInventory; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.InventoryEffectRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; + +public class GuiExtendedInventory extends InventoryEffectRenderer +{ + + private static final ResourceLocation inventoryTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/inventory.png"); + private int potionOffsetLast; + private static float rotation = 0.0F; + private boolean initWithPotion; + + public GuiExtendedInventory(EntityPlayer player, InventoryExtended inventory) + { + super(new ContainerExtendedInventory(player, inventory)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + GuiExtendedInventory.drawPlayerOnGui(this.mc, 33, 60, 29); + } + + @Override + public void initGui() + { + super.initGui(); + + this.guiLeft = (this.width - this.xSize) / 2; + this.guiLeft += this.getPotionOffset(); + this.potionOffsetLast = this.getPotionOffsetNEI(); + + int cornerX = this.guiLeft; + int cornerY = this.guiTop; + + TabRegistry.updateTabValues(cornerX, cornerY, InventoryTabGalacticraft.class); + TabRegistry.addTabsToList(this.buttonList); + + this.buttonList.add(new GuiButton(0, this.guiLeft + 10, this.guiTop + 71, 7, 7, "")); + this.buttonList.add(new GuiButton(1, this.guiLeft + 51, this.guiTop + 71, 7, 7, "")); + } + + @Override + protected void actionPerformed(GuiButton button) + { + switch (button.id) + { + case 0: + GuiExtendedInventory.rotation += 10.0F; + break; + case 1: + GuiExtendedInventory.rotation -= 10.0F; + break; + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiExtendedInventory.inventoryTexture); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + int newPotionOffset = this.getPotionOffsetNEI(); + + if (newPotionOffset < this.potionOffsetLast) + { + int diff = newPotionOffset - this.potionOffsetLast; + this.potionOffsetLast = newPotionOffset; + this.guiLeft += diff; + + for (int k = 0; k < this.buttonList.size(); ++k) + { + GuiButton button = this.buttonList.get(k); + + if (!(button instanceof AbstractTab)) + { + button.x += diff; + } + } + } + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + public static void drawPlayerOnGui(Minecraft mc, int x, int y, int scale) + { + RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager(); + GlStateManager.enableColorMaterial(); + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, 50.0F); + GlStateManager.scale(-scale, scale, scale); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + float f2 = mc.player.renderYawOffset; + float f3 = mc.player.rotationYaw; + float f4 = mc.player.rotationPitch; + float f5 = mc.player.rotationYawHead; + GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); + mc.player.renderYawOffset = GuiExtendedInventory.rotation; + mc.player.rotationYaw = (float) Math.atan(32 / 40.0F) * 40.0F; + mc.player.rotationYaw = GuiExtendedInventory.rotation; + mc.player.rotationYawHead = mc.player.rotationYaw; + mc.player.rotationPitch = (float) Math.sin(Minecraft.getSystemTime() / 500.0F) * 3.0F; + GlStateManager.translate(0.0F, (float) mc.player.getYOffset(), 0.0F); + rendermanager.setPlayerViewY(180.0F); + rendermanager.setRenderShadow(false); + rendermanager.renderEntity(mc.player, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F, false); + rendermanager.setRenderShadow(true); + mc.player.renderYawOffset = f2; + mc.player.rotationYaw = f3; + mc.player.rotationPitch = f4; + mc.player.rotationYawHead = f5; + GlStateManager.popMatrix(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + // Instanced method of this to have the instance field initWithPotion + public int getPotionOffset() + { + /* + * Disabled in 1.12.2 because a vanilla bug means potion offsets are + * currently not a thing The vanilla bug is that GuiInventory.initGui() + * resets GuiLeft to the recipe book version of GuiLeft, and in + * GuiRecipeBook.updateScreenPosition() it takes no account of potion + * offset even if the recipe book is inactive. // If at least one potion + * is active... if (this.hasActivePotionEffects) { this.initWithPotion = + * true; return 60 + TabRegistry.getPotionOffsetJEI() + + * getPotionOffsetNEI(); } + */ + // No potions, no offset needed + this.initWithPotion = false; + return 0; + } + + // Instanced method of this to use the instance field initWithPotion + public int getPotionOffsetNEI() + { + if (this.initWithPotion && TabRegistry.clazzNEIConfig != null) + { + try + { + // Check whether NEI is hidden and enabled + Object hidden = TabRegistry.clazzNEIConfig.getMethod("isHidden").invoke(null); + Object enabled = TabRegistry.clazzNEIConfig.getMethod("isEnabled").invoke(null); + + if (hidden instanceof Boolean && enabled instanceof Boolean) + { + if ((Boolean) hidden || !((Boolean) enabled)) + { + // If NEI is disabled or hidden, offset the tabs by the + // standard 60 + return 0; + } + // Active NEI undoes the standard potion offset + return -60; + } + } catch (Exception e) + { + } + } + // No NEI, no change + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiFuelLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiFuelLoader.java new file mode 100644 index 00000000..46806a5d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiFuelLoader.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerFuelLoader; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiFuelLoader extends GuiContainerGC +{ + + private static final ResourceLocation fuelLoaderTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/fuel_loader.png"); + + private final TileEntityFuelLoader fuelLoader; + + private GuiButton buttonLoadFuel; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 65, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiFuelLoader(InventoryPlayer par1InventoryPlayer, TileEntityFuelLoader par2TileEntityAirDistributor) + { + super(new ContainerFuelLoader(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.fuelLoader = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.fuelLoader.getWorld()), new Object[] + {this.fuelLoader.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.2")); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.3")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 33, 16, 38, fuelTankDesc, this.width, this.height, this)); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 50, (this.height - this.ySize) / 2 + 54, 18, 18, batterySlotDesc, this.width, this.height, this)); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.fuelLoader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.fuelLoader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 65; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + this.buttonList.add(this.buttonLoadFuel = new GuiButton(0, this.width / 2 + 2, this.height / 2 - 49, 76, 20, GCCoreUtil.translate("gui.button.loadfuel.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.fuelLoader.getName(), 60, 10, 4210752); + this.buttonLoadFuel.enabled = this.fuelLoader.disableCooldown == 0 && !(this.fuelLoader.fuelTank.getFluid() == null || this.fuelLoader.fuelTank.getFluid().amount == 0); + this.buttonLoadFuel.displayString = !this.fuelLoader.getDisabled(0) ? GCCoreUtil.translate("gui.button.stoploading.name") : GCCoreUtil.translate("gui.button.loadfuel.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(), 28, 45 + 23 - 46, 4210752); + // this.fontRenderer.drawString("" + + // this.fuelLoader.storage.getMaxExtract(), 28, 56 + 23 - 46, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.fuelLoader.getVoltage(), + // ElectricUnit.VOLTAGE), 28, 68 + 23 - 46, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 11, 4210752); + } + + private String getStatus() + { + if (this.fuelLoader.fuelTank.getFluid() == null || this.fuelLoader.fuelTank.getFluid().amount == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.nofuel.name"); + } + + return this.fuelLoader.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiFuelLoader.fuelLoaderTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + final int fuelLevel = this.fuelLoader.getScaledFuelLevel(38); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 17 + 54 - fuelLevel, 176, 38 - fuelLevel, 16, fuelLevel); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.fuelLoader.getEnergyStoredGC(), this.fuelLoader.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.fuelLoader.getEnergyStoredGC()) + " / " + (int) Math.floor(this.fuelLoader.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.fuelLoader.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 65, 192, 7, 11, 10); + } + + this.drawTexturedModalRect(var5 + 113, var6 + 66, 192, 0, Math.min(this.fuelLoader.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiIngotCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiIngotCompressor.java new file mode 100644 index 00000000..7945e174 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiIngotCompressor.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerIngotCompressor; +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiIngotCompressor extends GuiContainerGC +{ + + private static final ResourceLocation electricFurnaceTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/ingot_compressor.png"); + private GuiElementInfoRegion processInfoRegion = new GuiElementInfoRegion(0, 0, 52, 25, null, 0, 0, this); + + private TileEntityIngotCompressor tileEntity; + + public GuiIngotCompressor(InventoryPlayer par1InventoryPlayer, TileEntityIngotCompressor tileEntity) + { + super(new ContainerIngotCompressor(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 192; + } + + @Override + public void initGui() + { + super.initGui(); + this.processInfoRegion.tooltipStrings = new ArrayList(); + this.processInfoRegion.xPosition = (this.width - this.xSize) / 2 + 77; + this.processInfoRegion.yPosition = (this.height - this.ySize) / 2 + 30; + this.processInfoRegion.parentWidth = this.width; + this.processInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.processInfoRegion); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 10, 6, 4210752); + String displayText = GCCoreUtil.translate("gui.message.fuel.name") + ":"; + this.fontRenderer.drawString(displayText, 50 - this.fontRenderer.getStringWidth(displayText), 79, 4210752); + + if (this.tileEntity.processTicks > 0) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.compressing.name"); + } else + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.idle.name"); + } + + String str = GCCoreUtil.translate("gui.message.status.name") + ":"; + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ":", 120 - this.fontRenderer.getStringWidth(str) / 2, 70, 4210752); + str = displayText; + this.fontRenderer.drawString(displayText, 120 - this.fontRenderer.getStringWidth(str) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiIngotCompressor.electricFurnaceTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int process; + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + + if (this.tileEntity.processTicks > 0) + { + process = (int) ((double) this.tileEntity.processTicks / (double) this.tileEntity.PROCESS_TIME_REQUIRED * 100); + } else + { + process = 0; + } + + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.electric_compressor.desc.0") + ": " + process + "%"); + this.processInfoRegion.tooltipStrings = processDesc; + + if (this.tileEntity.processTicks > 0) + { + int scale = (int) ((double) this.tileEntity.processTicks / (double) TileEntityIngotCompressor.PROCESS_TIME_REQUIRED * 54); + this.drawTexturedModalRect(containerWidth + 77, containerHeight + 36, 176, 13, scale, 17); + } + + if (this.tileEntity.furnaceBurnTime > 0) + { + int scale = (int) ((double) this.tileEntity.furnaceBurnTime / (double) this.tileEntity.currentItemBurnTime * 14); + this.drawTexturedModalRect(containerWidth + 81, containerHeight + 27 + 14 - scale, 176, 30 + 14 - scale, 14, scale); + } + + if (this.tileEntity.processTicks > TileEntityIngotCompressor.PROCESS_TIME_REQUIRED / 2) + { + this.drawTexturedModalRect(containerWidth + 101, containerHeight + 28, 176, 0, 15, 13); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCollector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCollector.java new file mode 100644 index 00000000..b95aa14e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCollector.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenCollector; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenCollector extends GuiContainerGC +{ + + private static final ResourceLocation collectorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/oxygen.png"); + + private final TileEntityOxygenCollector collector; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiOxygenCollector(InventoryPlayer par1InventoryPlayer, TileEntityOxygenCollector par2TileEntityAirDistributor) + { + super(new ContainerOxygenCollector(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.collector = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + public void initGui() + { + super.initGui(); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 31, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 37; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.collector.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.out.name") + ":", 99, 25, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 37, 4210752, this.fontRenderer); + GCCoreUtil.drawStringCentered(GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(), this.xSize / 2, 50, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.status.collecting.name") + ": " + (int) (0.5F + Math.min(this.collector.lastOxygenCollected * 20F, TileEntityOxygenCollector.OUTPUT_PER_TICK * 20F)) + + GCCoreUtil.translate("gui.per_second"); + GCCoreUtil.drawStringCentered(status, this.xSize / 2, 60, 4210752, this.fontRenderer); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90 + 2, 4210752); + } + + private String getStatus() + { + String returnValue = this.collector.getGUIstatus(); + + if (returnValue.equals(EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.active.name")) && this.collector.lastOxygenCollected <= 0.0F) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingleaves.name"); + } + + return returnValue; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenCollector.collectorTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + if (this.collector != null) + { + int scale = this.collector.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 25, 197, 7, Math.min(scale, 54), 7); + scale = this.collector.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 38, 197, 0, Math.min(scale, 54), 7); + + if (this.collector.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 37, 176, 0, 11, 10); + } + + if (this.collector.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 24, 187, 0, 10, 10); + } + + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.collector.getOxygenStored()) + " / " + (int) Math.floor(this.collector.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.collector.getEnergyStoredGC(), this.collector.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.collector.getEnergyStoredGC()) + " / " + (int) Math.floor(this.collector.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCompressor.java new file mode 100644 index 00000000..7959eaac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenCompressor.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenCompressor; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenCompressor extends GuiContainerGC +{ + + private static final ResourceLocation compressorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/compressor.png"); + + private final TileEntityOxygenCompressor compressor; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiOxygenCompressor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenCompressor par2TileEntityAirDistributor) + { + super(new ContainerOxygenCompressor(par1InventoryPlayer, par2TileEntityAirDistributor, FMLClientHandler.instance().getClient().player)); + this.compressor = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + public void initGui() + { + super.initGui(); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 46, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + List oxygenSlotDesc = new ArrayList(); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.0")); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 16, (this.height - this.ySize) / 2 + 26, 18, 18, oxygenSlotDesc, this.width, this.height, this)); + List compressorSlotDesc = new ArrayList(); + compressorSlotDesc.add(GCCoreUtil.translate("gui.oxygen_compressor.slot.desc.0")); + compressorSlotDesc.add(GCCoreUtil.translate("gui.oxygen_compressor.slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 132, (this.height - this.ySize) / 2 + 70, 18, 18, compressorSlotDesc, this.width, this.height, this)); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.compressor.getOxygenStored()) + " / " + (int) Math.floor(this.compressor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.compressor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.compressor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 37; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.compressor.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 26, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 38, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 50, 4210752); + status = GCCoreUtil.translate("gui.oxygen_use.desc") + ": " + TileEntityOxygenCompressor.TANK_TRANSFER_SPEED * 20 + GCCoreUtil.translate("gui.per_second"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 60, 4210752); + // status = ElectricityDisplay.getDisplay(this.compressor.ueWattsPerTick + // * 20, ElectricUnit.WATT); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = ElectricityDisplay.getDisplay(this.compressor.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 104 + 17, 4210752); + } + + private String getStatus() + { + if (this.compressor.getStackInSlot(0) == null || !(this.compressor.getStackInSlot(0).getItem() instanceof ItemOxygenTank)) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingtank.name"); + } + + if (this.compressor.getStackInSlot(0) != null && this.compressor.getStackInSlot(0).getItemDamage() == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.fulltank.name"); + } + + if (this.compressor.getOxygenStored() < 1.0D) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingoxygen.name"); + } + + return this.compressor.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenCompressor.compressorTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + if (this.compressor != null) + { + int scale = this.compressor.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 25, 197, 7, Math.min(scale, 54), 7); + scale = this.compressor.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 38, 197, 0, Math.min(scale, 54), 7); + + if (this.compressor.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 37, 176, 0, 11, 10); + } + + if (this.compressor.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 24, 187, 0, 10, 10); + } + + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.compressor.getOxygenStored()) + " / " + (int) Math.floor(this.compressor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.compressor.getEnergyStoredGC(), this.compressor.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.compressor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.compressor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDecompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDecompressor.java new file mode 100644 index 00000000..9b591e6c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDecompressor.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenDecompressor extends GuiContainerGC +{ + + private static final ResourceLocation compressorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/decompressor.png"); + + private final TileEntityOxygenDecompressor decompressor; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiOxygenDecompressor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenDecompressor par2TileEntityAirDistributor) + { + super(new ContainerOxygenDecompressor(par1InventoryPlayer, par2TileEntityAirDistributor, FMLClientHandler.instance().getClient().player)); + this.decompressor = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + public void initGui() + { + super.initGui(); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 31, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + List compressorSlotDesc = new ArrayList(); + compressorSlotDesc.add(GCCoreUtil.translate("gui.oxygen_decompressor.slot.desc.0")); + compressorSlotDesc.add(GCCoreUtil.translate("gui.oxygen_decompressor.slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 132, (this.height - this.ySize) / 2 + 70, 18, 18, compressorSlotDesc, this.width, this.height, this)); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.decompressor.getOxygenStored()) + " / " + (int) Math.floor(this.decompressor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.decompressor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.decompressor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 37; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.decompressor.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 26, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 38, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 50, 4210752); + status = GCCoreUtil.translate("gui.max_output.desc") + ": " + TileEntityOxygenDecompressor.OUTPUT_PER_TICK * 20 + GCCoreUtil.translate("gui.per_second"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 60, 4210752); + // status = + // ElectricityDisplay.getDisplay(this.decompressor.ueWattsPerTick * 20, + // ElectricUnit.WATT); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = + // ElectricityDisplay.getDisplay(this.decompressor.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 104 + 17, 4210752); + } + + private String getStatus() + { + if (this.decompressor.getStackInSlot(0) == null || !(this.decompressor.getStackInSlot(0).getItem() instanceof ItemOxygenTank)) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingtank.name"); + } + + if (this.decompressor.getStackInSlot(0) != null && this.decompressor.getStackInSlot(0).getItemDamage() == this.decompressor.getStackInSlot(0).getMaxDamage()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.tank_empty.name"); + } + + return this.decompressor.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenDecompressor.compressorTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + if (this.decompressor != null) + { + int scale = this.decompressor.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 25, 197, 7, Math.min(scale, 54), 7); + scale = this.decompressor.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 38, 197, 0, Math.min(scale, 54), 7); + + if (this.decompressor.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 37, 176, 0, 11, 10); + } + + if (this.decompressor.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 24, 187, 0, 10, 10); + } + + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.decompressor.getOxygenStored()) + " / " + (int) Math.floor(this.decompressor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.decompressor.getEnergyStoredGC(), this.decompressor.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.decompressor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.decompressor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDistributor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDistributor.java new file mode 100644 index 00000000..fb19c6ae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenDistributor.java @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenDistributor; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenDistributor extends GuiContainerGC implements ICheckBoxCallback +{ + + private static final ResourceLocation distributorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/oxygen_distributor.png"); + + private final TileEntityOxygenDistributor distributor; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + private GuiElementCheckbox checkboxRenderBubble; + + public GuiOxygenDistributor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenDistributor par2TileEntityAirDistributor) + { + super(new ContainerOxygenDistributor(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.distributor = par2TileEntityAirDistributor; + this.ySize = 180; + } + + @Override + public void initGui() + { + super.initGui(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 46, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + List oxygenSlotDesc = new ArrayList(); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.0")); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 16, (this.height - this.ySize) / 2 + 26, 18, 18, oxygenSlotDesc, this.width, this.height, this)); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.distributor.getOxygenStored()) + " / " + (int) Math.floor(this.distributor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.distributor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.distributor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 37; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + this.checkboxRenderBubble = new GuiElementCheckbox(0, this, var5 + 85, var6 + 87, GCCoreUtil.translate("gui.message.bubble_visible.name")); + this.buttonList.add(this.checkboxRenderBubble); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.distributor.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 26, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 38, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 50, 4210752); + status = GCCoreUtil.translate("gui.oxygen_use.desc") + ": " + this.distributor.oxygenPerTick * 20 + GCCoreUtil.translate("gui.per_second"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 60, 4210752); + // status = + // ElectricityDisplay.getDisplay(this.distributor.ueWattsPerTick * 20, + // ElectricUnit.WATT); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = ElectricityDisplay.getDisplay(this.distributor.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90 + 3, 4210752); + } + + private String getStatus() + { + if (this.distributor.getOxygenStored() < this.distributor.oxygenPerTick) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingoxygen.name"); + } + + return this.distributor.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenDistributor.distributorTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, 181); + + if (this.distributor != null) + { + int scale = this.distributor.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 25, 197, 7, Math.min(scale, 54), 7); + scale = this.distributor.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 38, 197, 0, Math.min(scale, 54), 7); + + if (this.distributor.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 37, 176, 0, 11, 10); + } + + if (this.distributor.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 24, 187, 0, 10, 10); + } + + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.distributor.getOxygenStored()) + " / " + (int) Math.floor(this.distributor.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.distributor.getEnergyStoredGC(), this.distributor.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.distributor.getEnergyStoredGC()) + " / " + (int) Math.floor(this.distributor.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + this.checkboxRenderBubble.isSelected = this.distributor.shouldRenderBubble; + } + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + this.distributor.setBubbleVisible(newSelected); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {6, this.distributor.getPos(), newSelected ? 1 : 0})); + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return this.distributor.shouldRenderBubble; + } + + @Override + public void onIntruderInteraction() + { + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenSealer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenSealer.java new file mode 100644 index 00000000..685edf15 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenSealer.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenSealer; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +//import galacticraft.core.util.RedstoneUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiOxygenSealer extends GuiContainerGC +{ + + private static final ResourceLocation sealerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/oxygen_sealer.png"); + + private final TileEntityOxygenSealer sealer; + private GuiButton buttonDisable; + + private GuiElementInfoRegion oxygenInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 24, 56, 9, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 112, (this.height - this.ySize) / 2 + 37, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiOxygenSealer(InventoryPlayer par1InventoryPlayer, TileEntityOxygenSealer par2TileEntityAirDistributor) + { + super(new ContainerOxygenSealer(par1InventoryPlayer, par2TileEntityAirDistributor)); + this.sealer = par2TileEntityAirDistributor; + this.ySize = 200; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.sealer.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 32, (this.height - this.ySize) / 2 + 26, 18, 18, batterySlotDesc, this.width, this.height, this)); + List oxygenSlotDesc = new ArrayList(); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.0")); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 9, (this.height - this.ySize) / 2 + 26, 18, 18, oxygenSlotDesc, this.width, this.height, this)); + List ambientThermalDesc = new ArrayList(); + ambientThermalDesc.add(GCCoreUtil.translate("gui.thermal_slot.desc.0")); + ambientThermalDesc.add(GCCoreUtil.translate("gui.thermal_slot.desc.1")); + ambientThermalDesc.add(GCCoreUtil.translate("gui.thermal_slot.desc.2")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 55, (this.height - this.ySize) / 2 + 26, 18, 18, ambientThermalDesc, this.width, this.height, this)); + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.sealer.getOxygenStored()) + " / " + (int) Math.floor(this.sealer.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + this.oxygenInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.oxygenInfoRegion.yPosition = (this.height - this.ySize) / 2 + 23; + this.oxygenInfoRegion.parentWidth = this.width; + this.oxygenInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.oxygenInfoRegion); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ": " + + ((int) Math.floor(this.sealer.getEnergyStoredGC()) + " / " + (int) Math.floor(this.sealer.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 36; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 38, this.height / 2 - 30 + 21, 76, 20, GCCoreUtil.translate("gui.button.enableseal.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.sealer.getName(), 8, 10, 4210752); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 26, 4210752, this.fontRenderer); + GCCoreUtil.drawStringRightAligned(GCCoreUtil.translate("gui.message.in.name") + ":", 99, 38, 4210752, this.fontRenderer); + String status = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.buttonDisable.enabled = this.sealer.disableCooldown == 0; + this.buttonDisable.displayString = this.sealer.disabled ? GCCoreUtil.translate("gui.button.enableseal.name") : GCCoreUtil.translate("gui.button.disableseal.name"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 50, 4210752); + int adjustedOxygenPerTick = (int) (this.sealer.oxygenPerTick * 20); + if (this.sealer.disabled || this.sealer.getEnergyStoredGC() < this.sealer.storage.getMaxExtract()) + adjustedOxygenPerTick = 0; + status = GCCoreUtil.translate("gui.oxygen_use.desc") + ": " + adjustedOxygenPerTick + GCCoreUtil.translate("gui.per_second"); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 60, 4210752); + status = GCCoreUtil.translate("gui.message.thermal_status.name") + ": " + this.getThermalStatus(); + this.fontRenderer.drawString(status, this.xSize / 2 - this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = ElectricityDisplay.getDisplay(this.sealer.ueWattsPerTick * + // 20, ElectricUnit.WATT); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 70, 4210752); + // status = ElectricityDisplay.getDisplay(this.sealer.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(status, this.xSize / 2 - + // this.fontRenderer.getStringWidth(status) / 2, 80, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 90 + 3, 4210752); + } + + private String getThermalStatus() + { + IBlockState stateAbove = this.sealer.getWorld().getBlockState(this.sealer.getPos().up()); + Block blockAbove = stateAbove.getBlock(); + int metadata = blockAbove.getMetaFromState(stateAbove); + + if (blockAbove == GCBlocks.breatheableAir || blockAbove == GCBlocks.brightBreatheableAir) + { + if (metadata == 1) + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.on.name"); + } + } + + if (this.sealer.thermalControlEnabled()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.not_available.name"); + } + + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.off.name"); + } + + private String getStatus() + { + BlockPos blockPosAbove = this.sealer.getPos().up(); + Block blockAbove = this.sealer.getWorld().getBlockState(blockPosAbove).getBlock(); + IBlockState state = this.sealer.getWorld().getBlockState(blockPosAbove); + + if (!(blockAbove.isAir(state, this.sealer.getWorld(), blockPosAbove)) && !OxygenPressureProtocol.canBlockPassAir(this.sealer.getWorld(), state, blockPosAbove, EnumFacing.UP)) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.sealerblocked.name"); + } + +// if (RedstoneUtil.isBlockReceivingRedstone(this.sealer.getWorldObj(), this.sealer.getPos())) +// { +// return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.off.name"); +// } + + if (this.sealer.disabled) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (this.sealer.getEnergyStoredGC() == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + if (this.sealer.getEnergyStoredGC() < this.sealer.storage.getMaxExtract()) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + if (this.sealer.getOxygenStored() < 1) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingoxygen.name"); + } + + if (this.sealer.calculatingSealed) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.checking_seal.name") + "..."; + } + + int threadCooldown = this.sealer.getScaledThreadCooldown(25); + + if (threadCooldown < 15) + { + if (threadCooldown < 4) + { + String elipsis = ""; + for (int i = 0; i < (23 - threadCooldown) % 4; i++) + { + elipsis += "."; + } + + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.check_starting.name") + elipsis; + } else + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.check_pending.name"); + } + } else + { + if (!this.sealer.sealed) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.unsealed.name"); + } else + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.sealed.name"); + } + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiOxygenSealer.sealerTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 + 5, 0, 0, this.xSize, this.ySize); + + if (this.sealer != null) + { + List oxygenDesc = new ArrayList(); + oxygenDesc.add(GCCoreUtil.translate("gui.oxygen_storage.desc.0")); + oxygenDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + + ((int) Math.floor(this.sealer.getOxygenStored()) + " / " + (int) Math.floor(this.sealer.getMaxOxygenStored()))); + this.oxygenInfoRegion.tooltipStrings = oxygenDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.sealer.getEnergyStoredGC(), this.sealer.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ": " + ((int) Math.floor(this.sealer.getEnergyStoredGC()) + " / " + (int) Math.floor(this.sealer.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + int scale = this.sealer.getCappedScaledOxygenLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 24, 197, 7, Math.min(scale, 54), 7); + scale = this.sealer.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 113, var6 + 37, 197, 0, Math.min(scale, 54), 7); + scale = 25 - this.sealer.getScaledThreadCooldown(25); + this.drawTexturedModalRect(var5 + 148, var6 + 60, 176, 14, 10, 27); + if (scale != 0) + { + this.drawTexturedModalRect(var5 + 149, var6 + 61 + scale, 186, 14, 8, 25 - scale); + } + + if (this.sealer.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 99, var6 + 36, 176, 0, 11, 10); + } + + if (this.sealer.getOxygenStored() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 23, 187, 0, 10, 10); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenStorageModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenStorageModule.java new file mode 100644 index 00000000..712ad029 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiOxygenStorageModule.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiOxygenStorageModule extends GuiContainerGC +{ + + private static final ResourceLocation batteryBoxTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/oxygen_storage_module.png"); + + private TileEntityOxygenStorageModule tileEntity; + + public GuiOxygenStorageModule(InventoryPlayer par1InventoryPlayer, TileEntityOxygenStorageModule storageModule) + { + super(new ContainerOxygenStorageModule(par1InventoryPlayer, storageModule)); + this.tileEntity = storageModule; + } + + @Override + public void initGui() + { + super.initGui(); + List oxygenSlotDesc = new ArrayList(); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.0")); + oxygenSlotDesc.add(GCCoreUtil.translate("gui.oxygen_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 16, (this.height - this.ySize) / 2 + 21, 18, 18, oxygenSlotDesc, this.width, this.height, this)); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String guiTitle = GCCoreUtil.translate("tile.machine2.6.name"); + this.fontRenderer.drawString(guiTitle, this.xSize / 2 - this.fontRenderer.getStringWidth(guiTitle) / 2, 6, 4210752); + String displayJoules = (int) (this.tileEntity.getOxygenStored() + 0.5F) + " " + GCCoreUtil.translate("gui.message.of.name"); + String displayMaxJoules = "" + (int) this.tileEntity.getMaxOxygenStored(); + String maxOutputLabel = GCCoreUtil.translate("gui.max_output.desc") + ": " + TileEntityOxygenStorageModule.OUTPUT_PER_TICK * 20 + GCCoreUtil.translate("gui.per_second"); + + this.fontRenderer.drawString(displayJoules, 122 - this.fontRenderer.getStringWidth(displayJoules) / 2 - 35, 30, 4210752); + this.fontRenderer.drawString(displayMaxJoules, 122 - this.fontRenderer.getStringWidth(displayMaxJoules) / 2 - 35, 40, 4210752); + this.fontRenderer.drawString(maxOutputLabel, 122 - this.fontRenderer.getStringWidth(maxOutputLabel) / 2 - 35, 60, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiOxygenStorageModule.batteryBoxTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + // Background energy bar + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + // Foreground energy bar + int scale = (int) ((double) this.tileEntity.getOxygenStored() / (double) this.tileEntity.getMaxOxygenStored() * 72); + this.drawTexturedModalRect(containerWidth + 52, containerHeight + 52, 176, 0, scale, 3); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPainter.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPainter.java new file mode 100644 index 00000000..b664128b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPainter.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.inventory.ContainerPainter; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiPainter extends GuiContainerGC +{ + + private static final ResourceLocation painterTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/painter.png"); + + private TileEntityPainter tileEntity; + private GuiButton buttonApplyPaint; + + public GuiPainter(InventoryPlayer par1InventoryPlayer, TileEntityPainter tileEntity) + { + super(new ContainerPainter(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + this.ySize = 186; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.add(this.buttonApplyPaint = new GuiButton(0, this.width / 2 + 4, this.height / 2 - 48, 76, 20, GCCoreUtil.translate("gui.button.paintapply.name"))); + this.buttonList.add(this.buttonApplyPaint = new GuiButton(1, this.width / 2 - 80, this.height / 2 - 48, 76, 20, GCCoreUtil.translate("gui.button.paintmix.name"))); + this.buttonList.add(this.buttonApplyPaint = new GuiButton(2, this.width / 2 - 80, this.height / 2 - 48 + 22, 76, 20, GCCoreUtil.translate("gui.button.paintreset.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.tileEntity.getPos(), par1GuiButton.id})); + tileEntity.buttonPressed(par1GuiButton.id, this.mc.player, Side.CLIENT); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of + * the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 39, 6, 4210752); + String displayText = ""; + + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiPainter.painterTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int guiLeft = (this.width - this.xSize) / 2; + int guiBottom = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(guiLeft, guiBottom, 0, 0, this.xSize, this.ySize); + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + ColorUtil.setGLColor(tileEntity.guiColor); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + int x = guiLeft + this.xSize / 2 - 9; + int y = guiBottom + this.ySize / 2 - 69; + int height = 18; + int width = 18; + worldrenderer.begin(7, DefaultVertexFormats.POSITION); + worldrenderer.pos((double) (x + 0F), (double) (y + height), (double) this.zLevel).endVertex(); + worldrenderer.pos((double) (x + width), (double) (y + height), (double) this.zLevel).endVertex(); + worldrenderer.pos((double) (x + width), (double) (y + 0), (double) this.zLevel).endVertex(); + worldrenderer.pos((double) (x + 0F), (double) (y + 0), (double) this.zLevel).endVertex(); + tessellator.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiParaChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiParaChest.java new file mode 100644 index 00000000..32e5a261 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiParaChest.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.IScaleableFuelLevel; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiParaChest extends GuiContainerGC +{ + + private static ResourceLocation[] parachestTexture = new ResourceLocation[4]; + + static + { + for (int i = 0; i < 4; i++) + { + GuiParaChest.parachestTexture[i] = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/chest_" + i * 18 + ".png"); + } + } + + private IInventory upperChestInventory; + private IInventory lowerChestInventory; + + private int inventorySlots = 0; + + public GuiParaChest(IInventory par1IInventory, IInventory par2IInventory) + { + super(new ContainerParaChest(par1IInventory, par2IInventory, FMLClientHandler.instance().getClient().player)); + this.upperChestInventory = par1IInventory; + this.lowerChestInventory = par2IInventory; + this.allowUserInput = false; + this.inventorySlots = par2IInventory.getSizeInventory(); + this.ySize = 146 + this.inventorySlots * 2; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.lowerChestInventory.getName(), 8, 6, 4210752); + this.fontRenderer.drawString(this.upperChestInventory.hasCustomName() ? this.upperChestInventory.getName() : GCCoreUtil.translate(this.upperChestInventory.getName()), 8, + this.ySize - 103 + (this.inventorySlots == 3 ? 2 : 4), 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiParaChest.parachestTexture[(this.inventorySlots - 3) / 18]); + int k = (this.width - this.xSize) / 2; + int l = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + + if (this.lowerChestInventory instanceof IScaleableFuelLevel) + { + int fuelLevel = ((IScaleableFuelLevel) this.lowerChestInventory).getScaledFuelLevel(28); + this.drawTexturedModalRect(k + 17, l + (this.inventorySlots == 3 ? 40 : 42) - fuelLevel + this.inventorySlots * 2, 176, 28 - fuelLevel, 34, fuelLevel); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPositionedContainer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPositionedContainer.java new file mode 100644 index 00000000..4e7665de --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiPositionedContainer.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import net.minecraft.inventory.Container; +import net.minecraft.util.math.BlockPos; + +public abstract class GuiPositionedContainer extends GuiContainerGC +{ + + private int x; + private int y; + private int z; + + public GuiPositionedContainer(Container container, BlockPos pos) + { + super(container); + this.x = pos.getX(); + this.y = pos.getY(); + this.z = pos.getZ(); + } + + public int getX() + { + return this.x; + } + + public int getY() + { + return this.y; + } + + public int getZ() + { + return this.z; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRefinery.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRefinery.java new file mode 100644 index 00000000..a3b71a26 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRefinery.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRefinery; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiRefinery extends GuiContainerGC +{ + + private static final ResourceLocation refineryTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/refinery.png"); + + private final TileEntityRefinery tileEntity; + + private GuiButton buttonDisable; + + private GuiElementInfoRegion fuelTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion oilTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 62, (this.height - this.ySize) / 2 + 16, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiRefinery(InventoryPlayer par1InventoryPlayer, TileEntityRefinery tileEntity) + { + super(new ContainerRefinery(par1InventoryPlayer, tileEntity, FMLClientHandler.instance().getClient().player)); + this.tileEntity = tileEntity; + this.ySize = 168; + } + + @Override + public void initGui() + { + super.initGui(); + List oilTankDesc = new ArrayList(); + oilTankDesc.add(GCCoreUtil.translate("gui.oil_tank.desc.0")); + oilTankDesc.add(GCCoreUtil.translate("gui.oil_tank.desc.1")); + int oilLevel = this.tileEntity.oilTank != null && this.tileEntity.oilTank.getFluid() != null ? this.tileEntity.oilTank.getFluid().amount : 0; + int oilCapacity = this.tileEntity.oilTank != null ? this.tileEntity.oilTank.getCapacity() : 0; + oilTankDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.message.oil.name") + ": " + oilLevel + " / " + oilCapacity); + this.oilTankRegion.tooltipStrings = oilTankDesc; + this.oilTankRegion.xPosition = (this.width - this.xSize) / 2 + 7; + this.oilTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.oilTankRegion.parentWidth = this.width; + this.oilTankRegion.parentHeight = this.height; + this.infoRegions.add(this.oilTankRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 37, (this.height - this.ySize) / 2 + 50, 18, 18, batterySlotDesc, this.width, this.height, this)); + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.4")); + int fuelLevel = this.tileEntity.fuelTank != null && this.tileEntity.fuelTank.getFluid() != null ? this.tileEntity.fuelTank.getFluid().amount : 0; + int fuelCapacity = this.tileEntity.fuelTank != null ? this.tileEntity.fuelTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.message.fuel.name") + ": " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + this.fuelTankRegion.xPosition = (this.width - this.xSize) / 2 + 153; + this.fuelTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.fuelTankRegion.parentWidth = this.width; + this.fuelTankRegion.parentHeight = this.height; + this.infoRegions.add(this.fuelTankRegion); + List fuelSlotDesc = new ArrayList(); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.0")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.1")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.2")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 152, (this.height - this.ySize) / 2 + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.tileEntity.getEnergyStoredGC()) + " / " + (int) Math.floor(this.tileEntity.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 62; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 16; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 39, this.height / 2 - 56, 76, 20, GCCoreUtil.translate("gui.button.refine.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.tileEntity.getPos(), 0})); + break; + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + GCCoreUtil.drawStringCentered(this.tileEntity.getName(), this.xSize / 2, 5, 4210752, this.fontRenderer); + String displayText = ""; + int yOffset = -18; + + String missingInput = null; + if (this.tileEntity.oilTank.getFluid() == null || this.tileEntity.oilTank.getFluidAmount() == 0) + { + missingInput = EnumColor.RED + GCCoreUtil.translate("gui.status.nooil.name"); + } + String activeString = this.tileEntity.canProcess() ? EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.refining.name") : null; + displayText = this.tileEntity.getGUIstatus(missingInput, activeString, false); + + this.buttonDisable.enabled = this.tileEntity.disableCooldown == 0; + this.buttonDisable.displayString = this.tileEntity.processTicks == 0 ? GCCoreUtil.translate("gui.button.refine.name") : GCCoreUtil.translate("gui.button.stoprefine.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ": ", 60, 45 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(displayText, 60, 45 + 34 + yOffset, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.tileEntity.ueWattsPerTick + // * 20, ElectricUnit.WATT), 72, 56 + 23 + yOffset, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), + // ElectricUnit.VOLTAGE), 72, 68 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 23, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiRefinery.refineryTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int containerWidth = (this.width - this.xSize) / 2; + int containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + + int displayInt = this.tileEntity.getScaledOilLevel(38); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 17 + 49 - displayInt, 176, 38 - displayInt, 16, displayInt); + + displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 17 + 49 - displayInt, 176 + 16, 38 - displayInt, 16, displayInt); + + List oilTankDesc = new ArrayList(); + oilTankDesc.add(GCCoreUtil.translate("gui.oil_tank.desc.0")); + oilTankDesc.add(GCCoreUtil.translate("gui.oil_tank.desc.1")); + int oilLevel = this.tileEntity.oilTank != null && this.tileEntity.oilTank.getFluid() != null ? this.tileEntity.oilTank.getFluid().amount : 0; + int oilCapacity = this.tileEntity.oilTank != null ? this.tileEntity.oilTank.getCapacity() : 0; + oilTankDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.message.oil.name") + ": " + oilLevel + " / " + oilCapacity); + this.oilTankRegion.tooltipStrings = oilTankDesc; + + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.4")); + int fuelLevel = this.tileEntity.fuelTank != null && this.tileEntity.fuelTank.getFluid() != null ? this.tileEntity.fuelTank.getFluid().amount : 0; + int fuelCapacity = this.tileEntity.fuelTank != null ? this.tileEntity.fuelTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.message.fuel.name") + ": " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.tileEntity.getEnergyStoredGC()) + " / " + (int) Math.floor(this.tileEntity.getMaxEnergyStoredGC()))); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(containerWidth + 49, containerHeight + 16, 208, 0, 11, 10); + } + + this.drawTexturedModalRect(containerWidth + 63, containerHeight + 17, 176, 38, Math.min(this.tileEntity.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRocketInventory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRocketInventory.java new file mode 100644 index 00000000..751960d6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiRocketInventory.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRocketInventory; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiRocketInventory extends GuiContainerGC +{ + + private static ResourceLocation[] rocketTextures = new ResourceLocation[4]; + + static + { + for (int i = 0; i < 4; i++) + { + GuiRocketInventory.rocketTextures[i] = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/rocket_" + i * 18 + ".png"); + } + } + + private final IInventory upperChestInventory; + private final EnumRocketType rocketType; + + public GuiRocketInventory(IInventory par1IInventory, IInventory par2IInventory, EnumRocketType rocketType) + { + super(new ContainerRocketInventory(par1IInventory, par2IInventory, rocketType, FMLClientHandler.instance().getClient().player)); + this.upperChestInventory = par1IInventory; + this.allowUserInput = false; + this.ySize = rocketType.getInventorySpace() <= 3 ? 132 : 145 + rocketType.getInventorySpace() * 2; + this.rocketType = rocketType; + } + + @Override + public void initGui() + { + super.initGui(); + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.0")); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + (((EntityTieredRocket) this.mc.player.getRidingEntity()).rocketType.getInventorySpace() == 2 ? 70 : 71), + (this.height - this.ySize) / 2 + 6, 36, 40, fuelTankDesc, this.width, this.height, this)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.fuel.name"), 8, 2 + 3, 4210752); + + this.fontRenderer.drawString(GCCoreUtil.translate(this.upperChestInventory.getName()), 8, 34 + 2 + 3, 4210752); + + if (this.mc.player != null && this.mc.player.getRidingEntity() != null && this.mc.player.getRidingEntity() instanceof EntitySpaceshipBase) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.fuel.name") + ":", 125, 15 + 3, 4210752); + final double percentage = ((EntitySpaceshipBase) this.mc.player.getRidingEntity()).getScaledFuelLevel(100); + final String color = percentage > 80.0D ? EnumColor.BRIGHT_GREEN.getCode() : percentage > 40.0D ? EnumColor.ORANGE.getCode() : EnumColor.RED.getCode(); + final String str = percentage + "% " + GCCoreUtil.translate("gui.message.full.name"); + this.fontRenderer.drawString(color + str, 117 - str.length() / 2, 20 + 8, 4210752); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.getTextureManager().bindTexture(GuiRocketInventory.rocketTextures[(this.rocketType.getInventorySpace() - 2) / 18]); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, 176, this.ySize); + + if (this.mc.player != null && this.mc.player.getRidingEntity() != null && this.mc.player.getRidingEntity() instanceof EntitySpaceshipBase) + { + final int fuelLevel = ((EntitySpaceshipBase) this.mc.player.getRidingEntity()).getScaledFuelLevel(38); + + this.drawTexturedModalRect((this.width - this.xSize) / 2 + (((EntityTieredRocket) this.mc.player.getRidingEntity()).rocketType.getInventorySpace() == 2 ? 71 : 72), + (this.height - this.ySize) / 2 + 45 - fuelLevel, 176, 38 - fuelLevel, 42, fuelLevel); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicBuggy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicBuggy.java new file mode 100644 index 00000000..8470fd01 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicBuggy.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.inventory.ContainerBuggyBench; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicBuggy extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation buggyBenchTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/buggybench.png"); + + private int pageIndex; + + public GuiSchematicBuggy(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerBuggyBench(par1InventoryPlayer, pos, FMLClientHandler.instance().getClient().player), pos); + this.ySize = 221; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("schematic.moonbuggy.name"), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 202 - 104 + 2 + 27, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicBuggy.buggyBenchTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - 221) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, 220); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicInput.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicInput.java new file mode 100644 index 00000000..73df1041 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicInput.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematic; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicInput extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation schematicInputTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/schematicpage.png"); + + private int pageIndex; + + public GuiSchematicInput(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematic(par1InventoryPlayer, pos), pos); + } + + @Override + public void initGui() + { + super.initGui(); + List schematicSlotDesc = new ArrayList(); + GuiButton nextButton; + schematicSlotDesc.add(GCCoreUtil.translate("gui.new_schematic.slot.desc.0")); + schematicSlotDesc.add(GCCoreUtil.translate("gui.new_schematic.slot.desc.1")); + schematicSlotDesc.add(GCCoreUtil.translate("gui.new_schematic.slot.desc.2")); + schematicSlotDesc.add(GCCoreUtil.translate("gui.new_schematic.slot.desc.3")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 79, (this.height - this.ySize) / 2, 18, 18, schematicSlotDesc, this.width, this.height, this)); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(nextButton = new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + this.buttonList.add(new GuiButton(2, this.width / 2 - 92 / 2, this.height / 2 - 52, 92, 20, GCCoreUtil.translate("gui.button.unlockschematic.name"))); + nextButton.enabled = false; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + case 2: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UNLOCK_NEW_SCHEMATIC, GCCoreUtil.getDimensionID(mc.world), new Object[] + {})); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.addnewsch.name"), 7, -22, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 56, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicInput.schematicInputTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - 220) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, 220); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicTier1Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicTier1Rocket.java new file mode 100644 index 00000000..5db62910 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSchematicTier1Rocket.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematicTier1Rocket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicTier1Rocket extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation rocketBenchTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/rocketbench.png"); + + private int pageIndex; + + public GuiSchematicTier1Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicTier1Rocket(par1InventoryPlayer, pos), pos); + this.ySize = 221; + } + + @Override + public void initGui() + { + super.initGui(); + GuiButton backButton; + this.buttonList.add(backButton = new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + backButton.enabled = false; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("schematic.rocket_t1.name"), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 202 - 104 + 2 + 27, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicTier1Rocket.rocketBenchTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSolar.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSolar.java new file mode 100644 index 00000000..9c2a10c9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/container/GuiSolar.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.container; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSolar; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiSolar extends GuiContainerGC +{ + + private static final ResourceLocation solarGuiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/solar.png"); + + private final TileEntitySolar solarPanel; + + private GuiButton buttonEnableSolar; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiSolar(InventoryPlayer par1InventoryPlayer, TileEntitySolar solarPanel) + { + super(new ContainerSolar(par1InventoryPlayer, solarPanel)); + this.solarPanel = solarPanel; + this.ySize = 201; + this.xSize = 176; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.solarPanel.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.solarPanel.getEnergyStoredGC()) + " / " + (int) Math.floor(this.solarPanel.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 96; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 82, 18, 18, batterySlotDesc, this.width, this.height, this)); + List sunGenDesc = new ArrayList(); + float sunVisible = Math.round(this.solarPanel.solarStrength / 9.0F * 1000) / 10.0F; + sunGenDesc.add(this.solarPanel.solarStrength > 0 ? GCCoreUtil.translate("gui.status.sun_visible.name") + ": " + sunVisible + "%" : GCCoreUtil.translate("gui.status.blockedfully.name")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 47, (this.height - this.ySize) / 2 + 20, 18, 18, sunGenDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonEnableSolar = new GuiButton(0, this.width / 2 - 36, this.height / 2 - 19, 72, 20, GCCoreUtil.translate("gui.button.enable.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetY = 35; + this.buttonEnableSolar.enabled = this.solarPanel.disableCooldown == 0; + this.buttonEnableSolar.displayString = !this.solarPanel.getDisabled(0) ? GCCoreUtil.translate("gui.button.disable.name") : GCCoreUtil.translate("gui.button.enable.name"); + String displayString = this.solarPanel.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, 4210752); + displayString = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 45 + 23 - 46 + offsetY, 4210752); + displayString = GCCoreUtil.translate("gui.message.generating.name") + ": " + + (this.solarPanel.generateWatts > 0 ? EnergyDisplayHelper.getEnergyDisplayS(this.solarPanel.generateWatts) + "/t" : GCCoreUtil.translate("gui.status.not_generating.name")); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 34 + 23 - 46 + offsetY, 4210752); + float boost = Math.round((this.solarPanel.getSolarBoost() - 1) * 1000) / 10.0F; + displayString = GCCoreUtil.translate("gui.message.environment.name") + ": " + boost + "%"; + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 56 + 23 - 46 + offsetY, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.solarPanel.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(displayString, this.xSize / 2 - + // this.fontRenderer.getStringWidth(displayString) / 2, 68 + 23 - 46 + + // offsetY, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, 4210752); + } + + private String getStatus() + { + if (this.solarPanel.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (!this.solarPanel.getWorld().isDaytime()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedfully.name"); + } + + if (this.solarPanel.getWorld().isRaining() || this.solarPanel.getWorld().isThundering()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.raining.name"); + } + + if (this.solarPanel.solarStrength == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedfully.name"); + } + + if (this.solarPanel.solarStrength < 9) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedpartial.name"); + } + + if (this.solarPanel.generateWatts > 0) + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.collectingenergy.name"); + } + + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.unknown.name"); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiSolar.solarGuiTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.solarPanel.getEnergyStoredGC(), this.solarPanel.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.solarPanel.getEnergyStoredGC()) + " / " + (int) Math.floor(this.solarPanel.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.solarPanel.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 83, var6 + 24, 176, 0, 11, 10); + } + + if (this.solarPanel.solarStrength > 0) + { + this.drawTexturedModalRect(var5 + 48, var6 + 21, 176, 10, 16, 16); + } + + this.drawTexturedModalRect(var5 + 97, var6 + 25, 187, 0, Math.min(this.solarPanel.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckbox.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckbox.java new file mode 100644 index 00000000..c73ec291 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckbox.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiElementCheckbox extends GuiButton +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + public Boolean isSelected; + private ICheckBoxCallback parentGui; + private int textColor; + private int texWidth; + private int texHeight; + private int texX; + private int texY; + private boolean shiftOnHover; + + public GuiElementCheckbox(int id, ICheckBoxCallback parentGui, int x, int y, String text) + { + this(id, parentGui, x, y, text, 4210752); + } + + public GuiElementCheckbox(int id, ICheckBoxCallback parentGui, int x, int y, String text, int textColor) + { + this(id, parentGui, x, y, 13, 13, 20, 24, text, textColor); + } + + private GuiElementCheckbox(int id, ICheckBoxCallback parentGui, int x, int y, int width, int height, int texX, int texY, String text, int textColor) + { + this(id, parentGui, x, y, width, height, width, height, texX, texY, text, textColor, true); + } + + public GuiElementCheckbox(int id, ICheckBoxCallback parentGui, int x, int y, int width, int height, int texWidth, int texHeight, int texX, int texY, String text, int textColor, boolean shiftOnHover) + { + super(id, x, y, width, height, text); + this.parentGui = parentGui; + this.textColor = textColor; + this.texWidth = texWidth; + this.texHeight = texHeight; + this.shiftOnHover = shiftOnHover; + this.texX = texX; + this.texY = texY; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.isSelected == null) + { + this.isSelected = this.parentGui.getInitiallySelected(this); + } + + if (this.visible) + { + par1Minecraft.getTextureManager().bindTexture(GuiElementCheckbox.texture); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + this.drawTexturedModalRect(this.x, this.y, this.isSelected ? this.texX + this.texWidth : this.texX, this.hovered ? this.shiftOnHover ? this.texY + this.texHeight : this.texY : this.texY, + this.width, this.height); + this.mouseDragged(par1Minecraft, par2, par3); + par1Minecraft.fontRenderer.drawString(this.displayString, this.x + this.width + 3, this.y + (this.height - 6) / 2, this.textColor, false); + } + } + + @Override + public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6) + { + float f = 0.00390625F; + float f1 = 0.00390625F; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(par1 + 0, par2 + par6, this.zLevel).tex((par3 + 0) * f, (par4 + this.texHeight) * f1).endVertex(); + worldRenderer.pos(par1 + par5, par2 + par6, this.zLevel).tex((par3 + this.texWidth) * f, (par4 + this.texHeight) * f1).endVertex(); + worldRenderer.pos(par1 + par5, par2 + 0, this.zLevel).tex((par3 + this.texWidth) * f, (par4 + 0) * f1).endVertex(); + worldRenderer.pos(par1 + 0, par2 + 0, this.zLevel).tex((par3 + 0) * f, (par4 + 0) * f1).endVertex(); + tessellator.draw(); + } + + @Override + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) + { + if (this.enabled && this.visible && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height) + { + if (this.parentGui.canPlayerEdit(this, par1Minecraft.player)) + { + this.isSelected = !this.isSelected; + this.parentGui.onSelectionChanged(this, this.isSelected); + return true; + } else + { + this.parentGui.onIntruderInteraction(); + } + } + + return false; + } + + public interface ICheckBoxCallback + { + + void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected); + + boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player); + + boolean getInitiallySelected(GuiElementCheckbox checkbox); + + void onIntruderInteraction(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckboxPreLaunch.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckboxPreLaunch.java new file mode 100644 index 00000000..42547c96 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementCheckboxPreLaunch.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiElementCheckboxPreLaunch extends GuiButton +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/checklist_book.png"); + public Boolean isSelected; + private ICheckBoxCallback parentGui; + private int textColor; + private int texX; + private int texY; + + public GuiElementCheckboxPreLaunch(int id, ICheckBoxCallback parentGui, int x, int y, String text) + { + this(id, parentGui, x, y, text, 4210752); + } + + public GuiElementCheckboxPreLaunch(int id, ICheckBoxCallback parentGui, int x, int y, String text, int textColor) + { + this(id, parentGui, x, y, 9, 9, 194, 0, text, textColor); + } + + private GuiElementCheckboxPreLaunch(int id, ICheckBoxCallback parentGui, int x, int y, int width, int height, int texX, int texY, String text, int textColor) + { + super(id, x, y, width, height, text); + this.parentGui = parentGui; + this.textColor = textColor; + this.texX = texX; + this.texY = texY; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.isSelected == null) + { + this.isSelected = this.parentGui.getInitiallySelected(this); + } + + if (this.visible) + { + par1Minecraft.getTextureManager().bindTexture(GuiElementCheckboxPreLaunch.texture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + int texWidth = this.isSelected ? 12 : 9; + int texHeight = this.isSelected ? 16 : 9; + this.drawTexturedModalRect(this.x, this.isSelected ? this.y - 7 : this.y, this.hovered ? (this.texX + 12) : this.texX, this.isSelected ? this.texY + 9 : this.texY, texWidth, texHeight); + this.mouseDragged(par1Minecraft, par2, par3); + par1Minecraft.fontRenderer.drawSplitString(EnumColor.BLACK + this.displayString, this.x + this.width + 3, this.y + (this.height - 6) / 2, 100, ColorUtil.to32BitColor(255, 5, 5, 5)); + } + } + + @Override + public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6) + { + float f = 0.00390625F; + float f1 = 0.00390625F; + int texWidth = this.isSelected ? 12 : 9; + int texHeight = this.isSelected ? 16 : 9; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(par1 + 0, par2 + par6, this.zLevel).tex((par3 + 0) * f, (par4 + texHeight) * f1).endVertex(); + worldRenderer.pos(par1 + par5, par2 + par6, this.zLevel).tex((par3 + texWidth) * f, (par4 + texHeight) * f1).endVertex(); + worldRenderer.pos(par1 + par5, par2 + 0, this.zLevel).tex((par3 + texWidth) * f, (par4 + 0) * f1).endVertex(); + worldRenderer.pos(par1 + 0, par2 + 0, this.zLevel).tex((par3 + 0) * f, (par4 + 0) * f1).endVertex(); + tessellator.draw(); + } + + @Override + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) + { + if (this.enabled && this.visible && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height) + { + if (this.parentGui.canPlayerEdit(this, par1Minecraft.player)) + { + this.isSelected = !this.isSelected; + this.parentGui.onSelectionChanged(this, this.isSelected); + return true; + } else + { + this.parentGui.onIntruderInteraction(); + } + } + + return false; + } + + public int willFit(int max) + { + int size = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(this.displayString, 100).size() * Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT; + GalacticraftCore.logger.debug(displayString + " " + size + " " + max); + if (size > max) + { + return -1; + } + return size; + } + + public interface ICheckBoxCallback + { + + void onSelectionChanged(GuiElementCheckboxPreLaunch checkbox, boolean newSelected); + + boolean canPlayerEdit(GuiElementCheckboxPreLaunch checkbox, EntityPlayer player); + + boolean getInitiallySelected(GuiElementCheckboxPreLaunch checkbox); + + void onIntruderInteraction(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementDropdown.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementDropdown.java new file mode 100644 index 00000000..574ad55f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementDropdown.java @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiElementDropdown extends GuiButton +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + + public boolean dropdownClicked; + public String[] optionStrings; + public int selectedOption = -1; + public FontRenderer font; + private IDropboxCallback parentClass; + + public GuiElementDropdown(int id, IDropboxCallback parentClass, int x, int y, String... text) + { + super(id, x, y, 15, 15, ""); + Minecraft mc = FMLClientHandler.instance().getClient(); + this.parentClass = parentClass; + this.font = mc.fontRenderer; + this.optionStrings = text; + + int largestString = Integer.MIN_VALUE; + + for (String element : text) + { + largestString = Math.max(largestString, this.font.getStringWidth(element)); + } + + this.width = largestString + 8 + 15; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.selectedOption == -1) + { + this.selectedOption = this.parentClass.getInitialSelection(this); + } + + if (this.visible) + { +// GL11.glDisable(GL12.GL_RESCALE_NORMAL); +// RenderHelper.disableStandardItemLighting(); +// GL11.glDisable(GL11.GL_LIGHTING); +// GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glPushMatrix(); + + this.zLevel = 300.0F; + GL11.glTranslatef(0, 0, 500); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + Gui.drawRect(this.x, this.y, this.x + this.width - 15, this.y + (this.dropdownClicked ? this.height * this.optionStrings.length : this.height), ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.x + 1, this.y + 1, this.x + this.width - 16, this.y + (this.dropdownClicked ? this.height * this.optionStrings.length : this.height) - 1, + ColorUtil.to32BitColor(255, 150, 150, 150)); + Gui.drawRect(this.x + this.width - 15, this.y, this.x + this.width - 1, this.y + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.x + this.width - 15, this.y + 1, this.x + this.width - 2, this.y + this.height - 1, ColorUtil.to32BitColor(255, 150, 150, 150)); + + if (this.dropdownClicked && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height * this.optionStrings.length) + { + int hoverPos = (par3 - this.y) / this.height; + Gui.drawRect(this.x + 1, this.y + this.height * hoverPos + 1, this.x + this.width - 16, this.y + this.height * (hoverPos + 1) - 1, ColorUtil.to32BitColor(255, 175, 175, 175)); + } + + this.mouseDragged(par1Minecraft, par2, par3); + + if (this.dropdownClicked) + { + for (int i = 0; i < this.optionStrings.length; i++) + { + this.font.drawStringWithShadow(this.optionStrings[i], this.x + this.width / 2 - 7 - this.font.getStringWidth(this.optionStrings[i]) / 2, + this.y + (this.height - 6) / 2 + this.height * i, ColorUtil.to32BitColor(255, 255, 255, 255)); + } + } else + { + this.font.drawStringWithShadow(this.optionStrings[this.selectedOption], this.x + this.width / 2 - 7 - this.font.getStringWidth(this.optionStrings[this.selectedOption]) / 2, + this.y + (this.height - 6) / 2, ColorUtil.to32BitColor(255, 255, 255, 255)); + } + + par1Minecraft.renderEngine.bindTexture(this.texture); + this.drawTexturedModalRect(this.x + this.width - 12, this.y + 5, 185, 0, 7, 4); + + GL11.glPopMatrix(); + this.zLevel = 0.0F; +// GL11.glEnable(GL11.GL_LIGHTING); +// GL11.glEnable(GL11.GL_DEPTH_TEST); +// RenderHelper.enableStandardItemLighting(); +// GL11.glEnable(GL12.GL_RESCALE_NORMAL); + } + } + + @Override + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) + { + if (!this.dropdownClicked) + { + if (this.enabled && this.visible && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height) + { + if (this.parentClass.canBeClickedBy(this, par1Minecraft.player)) + { + this.dropdownClicked = true; + return true; + } else + { + this.parentClass.onIntruderInteraction(); + } + } + } else + { + if (this.enabled && this.visible && par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height * this.optionStrings.length) + { + if (this.parentClass.canBeClickedBy(this, par1Minecraft.player)) + { + int optionClicked = (par3 - this.y) / this.height; + this.selectedOption = optionClicked % this.optionStrings.length; + this.dropdownClicked = false; + this.parentClass.onSelectionChanged(this, this.selectedOption); + return true; + } else + { + this.parentClass.onIntruderInteraction(); + } + } else + { + this.dropdownClicked = false; + } + } + + return false; + } + + public interface IDropboxCallback + { + + boolean canBeClickedBy(GuiElementDropdown dropdown, EntityPlayer player); + + void onSelectionChanged(GuiElementDropdown dropdown, int selection); + + int getInitialSelection(GuiElementDropdown dropdown); + + void onIntruderInteraction(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientButton.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientButton.java new file mode 100644 index 00000000..9e9b8806 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientButton.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.OpenGlHelper; +import org.lwjgl.opengl.GL11; + +public class GuiElementGradientButton extends GuiButton +{ + + public GuiElementGradientButton(int id, int x, int y, int width, int height, String buttonText) + { + super(id, x, y, width, height, buttonText); + } + + @Override + public void drawButton(Minecraft p_146112_1_, int p_146112_2_, int p_146112_3_, float partial) + { + if (this.visible) + { + FontRenderer fontrenderer = p_146112_1_.fontRenderer; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = p_146112_2_ >= this.x && p_146112_3_ >= this.y && p_146112_2_ < this.x + this.width && p_146112_3_ < this.y + this.height; + int k = this.getHoverState(this.hovered); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + int color = ColorUtil.to32BitColor(150, 10, 10, 10); + + if (!this.enabled) + { + if (this.hovered) + { + color = ColorUtil.to32BitColor(150, 30, 30, 30); + } else + { + color = ColorUtil.to32BitColor(150, 32, 32, 32); + } + } else if (this.hovered) + { + color = ColorUtil.to32BitColor(150, 30, 30, 30); + } + + this.drawGradientRect(this.x, this.y, this.x + this.width, this.y + this.height, color, color); + this.mouseDragged(p_146112_1_, p_146112_2_, p_146112_3_); + int l = 14737632; + + if (this.packedFGColour != 0) + { + l = this.packedFGColour; + } else if (!this.enabled) + { + l = 10526880; + } else if (this.hovered) + { + l = 16777120; + } + + this.drawCenteredString(fontrenderer, this.displayString, this.x + this.width / 2, this.y + (this.height - 8) / 2, l); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientList.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientList.java new file mode 100644 index 00000000..2bc80406 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementGradientList.java @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Mouse; + +public class GuiElementGradientList extends Gui +{ + + public static class ListElement + { + + public String value; + public int color; + + public ListElement(String value, int color) + { + this.value = value; + this.color = color; + } + } + + public static final int BUTTON_HEIGHT = 20; + public int width; + public int height; + public int xPosition; + public int yPosition; + public List listContents = new ArrayList(); + public int sliderPos; + private int lastMousePosY; + private boolean sliderGrabbed; + private boolean sliderEnabled; + private int selectedIndex = -1; + + public GuiElementGradientList(int xPos, int yPos, int width, int height) + { + this.xPosition = xPos; + this.yPosition = yPos; + this.width = width; + this.height = height; + this.sliderPos = this.yPosition + 1; + } + + public void updateListContents(List newContents) + { + this.listContents = newContents; + this.sliderEnabled = this.listContents.size() * GuiElementGradientList.BUTTON_HEIGHT > this.height; + if (this.selectedIndex >= this.listContents.size()) + { + this.selectedIndex = -1; + } + } + + public void draw(int mousePosX, int mousePosY) + { + if (this.sliderEnabled) + { + if (this.sliderGrabbed + || mousePosX >= this.xPosition + this.width - 9 && mousePosX < this.xPosition + this.width && mousePosY >= this.yPosition && mousePosY < this.yPosition + this.height) + { + if (Mouse.isButtonDown(0)) + { + this.sliderGrabbed = true; + + if (this.lastMousePosY > 0) + { + if (mousePosY >= this.sliderPos && mousePosY < this.sliderPos + 15) + { + int deltaY = this.lastMousePosY - this.sliderPos; + this.sliderPos = mousePosY - deltaY; + } else + { + this.sliderPos = mousePosY - 7; + } + } + + this.lastMousePosY = mousePosY; + } else + { + this.sliderGrabbed = false; + } + } else + { + this.lastMousePosY = 0; + } + } + + if (Mouse.isButtonDown(0)) + { + if (mousePosX >= this.xPosition && mousePosX < this.xPosition + this.width - 10 && mousePosY >= this.yPosition && mousePosY < this.yPosition + this.height) + { + int clickPosY = mousePosY - this.yPosition + (int) Math.floor((this.listContents.size() * GuiElementGradientList.BUTTON_HEIGHT - this.height) * this.getSliderPercentage()); + this.selectedIndex = clickPosY / GuiElementGradientList.BUTTON_HEIGHT; + + if (this.selectedIndex < 0 || this.selectedIndex >= this.listContents.size()) + { + this.selectedIndex = -1; + } + } + } + + this.sliderPos = Math.min(Math.max(this.yPosition, this.sliderPos), this.yPosition + this.height - 15); + + this.drawGradientRect(this.xPosition, this.yPosition, this.xPosition + this.width - 10, this.yPosition + this.height, ColorUtil.to32BitColor(255, 30, 30, 30), + ColorUtil.to32BitColor(255, 30, 30, 30)); + this.drawGradientRect(this.xPosition + this.width - 9, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, ColorUtil.to32BitColor(255, 50, 50, 50), + ColorUtil.to32BitColor(255, 50, 50, 50)); + int sliderColor = this.sliderEnabled ? ColorUtil.to32BitColor(255, 90, 90, 90) : ColorUtil.to32BitColor(255, 40, 40, 40); + this.drawGradientRect(this.xPosition + this.width - 9, this.sliderPos, this.xPosition + this.width, this.sliderPos + 15, sliderColor, sliderColor); + + Gui.drawRect(this.xPosition + this.width - 1, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.xPosition + this.width - 10, this.yPosition, this.xPosition + this.width - 9, this.yPosition + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.xPosition, this.yPosition, this.xPosition + 1, this.yPosition + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + 1, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.xPosition, this.yPosition + this.height - 1, this.xPosition + this.width, this.yPosition + this.height, ColorUtil.to32BitColor(255, 0, 0, 0)); + + sliderColor = this.sliderEnabled ? ColorUtil.to32BitColor(255, 120, 120, 120) : ColorUtil.to32BitColor(255, 60, 60, 60); + Gui.drawRect(this.xPosition + this.width - 9, this.sliderPos + 1, this.xPosition + this.width - 8, this.sliderPos + 14, sliderColor); + Gui.drawRect(this.xPosition + this.width - 2, this.sliderPos + 1, this.xPosition + this.width - 1, this.sliderPos + 14, sliderColor); + Gui.drawRect(this.xPosition + this.width - 9, this.sliderPos, this.xPosition + this.width - 1, this.sliderPos + 1, sliderColor); + Gui.drawRect(this.xPosition + this.width - 9, this.sliderPos + 15, this.xPosition + this.width - 1, this.sliderPos + 14, sliderColor); + + int currentDrawHeight = this.yPosition + 1 - (int) Math.floor((this.listContents.size() * GuiElementGradientList.BUTTON_HEIGHT - this.height) * this.getSliderPercentage()); + FontRenderer fontRenderer = FMLClientHandler.instance().getClient().fontRenderer; + + for (int i = 0; i < this.listContents.size(); i++) + { + ListElement displayButton = this.listContents.get(i); + + if (displayButton != null && displayButton.value != null && !displayButton.value.isEmpty()) + { + int yCoord0 = currentDrawHeight; + int yCoord1 = currentDrawHeight + GuiElementGradientList.BUTTON_HEIGHT - 1; + + if (yCoord1 > this.yPosition && yCoord0 < this.yPosition + this.height) + { + yCoord0 = Math.max(this.yPosition + 1, yCoord0); + yCoord1 = Math.min(this.yPosition + this.height - 1, yCoord1); + + int color = i == this.selectedIndex ? ColorUtil.to32BitColor(255, 35, 35, 35) : ColorUtil.to32BitColor(255, 25, 25, 25); + + Gui.drawRect(this.xPosition + 1, yCoord0, this.xPosition + this.width - 10, yCoord1, color); + + if (currentDrawHeight + GuiElementGradientList.BUTTON_HEIGHT / 2 - fontRenderer.FONT_HEIGHT / 2 > this.yPosition + && currentDrawHeight + GuiElementGradientList.BUTTON_HEIGHT / 2 + fontRenderer.FONT_HEIGHT / 2 < this.yPosition + this.height) + { + fontRenderer.drawString(displayButton.value, this.xPosition + (this.width - 10) / 2 - fontRenderer.getStringWidth(displayButton.value) / 2, + currentDrawHeight + GuiElementGradientList.BUTTON_HEIGHT / 2 - fontRenderer.FONT_HEIGHT / 2, displayButton.color); + } + + } + + currentDrawHeight += GuiElementGradientList.BUTTON_HEIGHT; + } + } + } + + public void update() + { + } + + private float getSliderPercentage() + { + if (!this.sliderEnabled) + { + return 0.0F; + } + + return (this.sliderPos - this.yPosition) / (float) (this.height - 15); + } + + public ListElement getSelectedElement() + { + if (this.selectedIndex == -1) + { + return null; + } + + return this.listContents.get(this.selectedIndex); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementInfoRegion.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementInfoRegion.java new file mode 100644 index 00000000..f7de76c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementInfoRegion.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import java.util.Iterator; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@SideOnly(Side.CLIENT) +public class GuiElementInfoRegion extends Gui +{ + + protected int width; + protected int height; + public int xPosition; + public int yPosition; + public boolean enabled; + public boolean drawRegion; + public boolean withinRegion; + public List tooltipStrings; + public int parentWidth; + public int parentHeight; + public GuiContainerGC parentGui; + + public GuiElementInfoRegion(int xPos, int yPos, int width, int height, List tooltipStrings, int parentWidth, int parentHeight, GuiContainerGC parentGui) + { + this.width = 200; + this.height = 20; + this.enabled = true; + this.xPosition = xPos; + this.yPosition = yPos; + this.width = width; + this.height = height; + this.tooltipStrings = tooltipStrings; + this.parentWidth = parentWidth; + this.parentHeight = parentHeight; + this.parentGui = parentGui; + } + + protected int getHoverState(boolean par1) + { + byte b0 = 1; + + if (!this.enabled) + { + b0 = 0; + } else if (par1) + { + b0 = 2; + } + + return b0; + } + + public void drawRegion(int par2, int par3) + { + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + this.withinRegion = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height; + + if (this.drawRegion) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int k = this.getHoverState(this.withinRegion); + Gui.drawRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, ColorUtil.to32BitColor(100 * k, 255, 0, 0)); + } + + if (this.tooltipStrings != null && !this.tooltipStrings.isEmpty() && this.withinRegion) + { + int k = 0; + Iterator iterator = this.tooltipStrings.iterator(); + + while (iterator.hasNext()) + { + String s = iterator.next(); + int l = FMLClientHandler.instance().getClient().fontRenderer.getStringWidth(s); + + if (l > k) + { + k = l; + } + } + + int i1 = par2 + 12; + int j1 = par3 - 12; + int k1 = 8; + + if (this.tooltipStrings.size() > 1) + { + k1 += (this.tooltipStrings.size() - 1) * 10; + } + + if (i1 + k > this.parentWidth) + { + i1 -= 28 + k; + } + + if (this.parentGui.getTooltipOffset(par2, par3) > 0) + { + j1 -= k1 + 9; + } + + this.zLevel = 300.0F; +// GuiElementInfoRegion.itemRenderer.zLevel = 300.0F; + int l1 = -267386864; + this.drawGradientRect(i1 - 3, j1 - 4, i1 + k + 3, j1 - 3, l1, l1); + this.drawGradientRect(i1 - 3, j1 + k1 + 3, i1 + k + 3, j1 + k1 + 4, l1, l1); + this.drawGradientRect(i1 - 3, j1 - 3, i1 + k + 3, j1 + k1 + 3, l1, l1); + this.drawGradientRect(i1 - 4, j1 - 3, i1 - 3, j1 + k1 + 3, l1, l1); + this.drawGradientRect(i1 + k + 3, j1 - 3, i1 + k + 4, j1 + k1 + 3, l1, l1); + int i2 = 1347420415; + int j2 = (i2 & 16711422) >> 1 | i2 & -16777216; + this.drawGradientRect(i1 - 3, j1 - 3 + 1, i1 - 3 + 1, j1 + k1 + 3 - 1, i2, j2); + this.drawGradientRect(i1 + k + 2, j1 - 3 + 1, i1 + k + 3, j1 + k1 + 3 - 1, i2, j2); + this.drawGradientRect(i1 - 3, j1 - 3, i1 + k + 3, j1 - 3 + 1, i2, i2); + this.drawGradientRect(i1 - 3, j1 + k1 + 2, i1 + k + 3, j1 + k1 + 3, j2, j2); + + for (int k2 = 0; k2 < this.tooltipStrings.size(); ++k2) + { + String s1 = this.tooltipStrings.get(k2); + FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow(s1, i1, j1, -1); + + j1 += 10; + } + + this.zLevel = 0.0F; +// GuiElementInfoRegion.itemRenderer.zLevel = 0.0F; + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSlider.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSlider.java new file mode 100644 index 00000000..8689fbf4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSlider.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import java.util.Collections; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public class GuiElementSlider extends GuiButton +{ + + private Vector3 firstColor; + private Vector3 lastColor; + private final boolean isVertical; + private int sliderPos; + + public GuiElementSlider(int id, int x, int y, int width, int height, boolean vertical, Vector3 firstColor, Vector3 lastColor) + { + this(id, x, y, width, height, vertical, firstColor, lastColor, ""); + } + + public GuiElementSlider(int id, int x, int y, int width, int height, boolean vertical, Vector3 firstColor, Vector3 lastColor, String displayString) + { + super(id, x, y, width, height, displayString); + this.isVertical = vertical; + this.firstColor = firstColor; + this.lastColor = lastColor; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.visible) + { + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + + if (Mouse.isButtonDown(0) && this.hovered) + { + if (this.isVertical) + { + this.sliderPos = par3 - this.y; + } else + { + this.sliderPos = par2 - this.x; + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + + if (this.isVertical) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width, this.y, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(this.x, this.y, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(this.x, (double) this.y + this.height, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.width, (double) this.y + this.height, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width - 1, (double) this.y + 1, this.zLevel).color(this.firstColor.floatX(), this.firstColor.floatY(), this.firstColor.floatZ(), 1.0F) + .endVertex(); + worldRenderer.pos((double) this.x + 1, (double) this.y + 1, this.zLevel).color(this.firstColor.floatX(), this.firstColor.floatY(), this.firstColor.floatZ(), 1.0F).endVertex(); + worldRenderer.pos((double) this.x + 1, (double) this.y + this.height - 1, this.zLevel).color(this.lastColor.floatX(), this.lastColor.floatY(), this.lastColor.floatZ(), 1.0F) + .endVertex(); + worldRenderer.pos((double) this.x + this.width - 1, (double) this.y + this.height - 1, this.zLevel) + .color(this.lastColor.floatX(), this.lastColor.floatY(), this.lastColor.floatZ(), 1.0F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width, (double) this.y + this.sliderPos - 1, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos(this.x, (double) this.y + this.sliderPos - 1, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos(this.x, (double) this.y + this.sliderPos + 1, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.width, (double) this.y + this.sliderPos + 1, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + tessellator.draw(); + } else + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width, this.y, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(this.x, this.y, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(this.x, (double) this.y + this.height, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.width, (double) this.y + this.height, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.width - 1, (double) this.y + 1, this.zLevel).color(this.lastColor.floatX(), this.lastColor.floatY(), this.lastColor.floatZ(), 1.0F) + .endVertex(); + worldRenderer.pos((double) this.x + 1, (double) this.y + 1, this.zLevel).color(this.firstColor.floatX(), this.firstColor.floatY(), this.firstColor.floatZ(), 1.0F).endVertex(); + worldRenderer.pos((double) this.x + 1, (double) this.y + this.height - 1, this.zLevel).color(this.firstColor.floatX(), this.firstColor.floatY(), this.firstColor.floatZ(), 1.0F) + .endVertex(); + worldRenderer.pos((double) this.x + this.width - 1, (double) this.y + this.height - 1, this.zLevel) + .color(this.lastColor.floatX(), this.lastColor.floatY(), this.lastColor.floatZ(), 1.0F).endVertex(); + tessellator.draw(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) this.x + this.sliderPos + 1, this.y, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.sliderPos - 1, this.y, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.sliderPos - 1, (double) this.y + this.height, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + worldRenderer.pos((double) this.x + this.sliderPos + 1, (double) this.y + this.height, this.zLevel).color(1, 1, 1, 1.0F).endVertex(); + tessellator.draw(); + } + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + } + + public void drawHoveringText() + { + if (this.hovered) + { + FontRenderer font = FMLClientHandler.instance().getClient().fontRenderer; + Minecraft mc = FMLClientHandler.instance().getClient(); + ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + int width = scaledresolution.getScaledWidth(); + int height = scaledresolution.getScaledHeight(); + int x = Mouse.getX() * width / mc.displayWidth; + int y = height - Mouse.getY() * height / mc.displayHeight - 1; + net.minecraftforge.fml.client.config.GuiUtils.drawHoveringText(Collections.singletonList(this.displayString), x, y, width, height, -1, font); + } + } + + public void setSliderPos(float pos) + { + this.sliderPos = (int) Math.floor(this.height * pos); + } + + public int getSliderPos() + { + return this.sliderPos; + } + + public float getNormalizedValue() + { + return this.sliderPos / (float) this.height; + } + + public double getColorValueD() + { + return (this.sliderPos * 255.0D) / (this.height - 1); + } + + public int getButtonHeight() + { + return this.height; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSpinner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSpinner.java new file mode 100644 index 00000000..5230cbcd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementSpinner.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiElementSpinner extends GuiButton +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + private ISpinnerCallback parentGui; + private int textColor; + private boolean hoverUpper; + private boolean hoverLower; + public Integer value; + + public GuiElementSpinner(int id, ISpinnerCallback parentGui, int x, int y) + { + this(id, parentGui, x, y, 4210752); + } + + public GuiElementSpinner(int id, ISpinnerCallback parentGui, int x, int y, int textColor) + { + super(id, x, y, 31, 20, ""); + this.parentGui = parentGui; + this.textColor = textColor; + } + + @Override + public void drawButton(Minecraft mc, int mX, int mY, float partial) + { + if (this.value == null) + { + this.value = this.parentGui.getInitialValue(this); + } + + if (this.visible) + { + mc.getTextureManager().bindTexture(GuiElementSpinner.texture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = mX >= this.x && mY >= this.y && mX < this.x + this.width && mY < this.y + this.height; + this.hoverUpper = mX >= this.x + 20 && mX < this.x + width && mY > this.y && mY < this.y + this.height / 2; + this.hoverLower = mX >= this.x + 20 && mX < this.x + width && mY > this.y + this.height / 2 && mY < this.y + this.height; + this.drawTexturedModalRect(this.x, this.y, 214, 0, 20, this.height); + this.drawTexturedModalRect(this.x + 20, this.y, this.hoverUpper ? 245 : 234, 0, 11, 10); + this.drawTexturedModalRect(this.x + 20, this.y + 10, this.hoverLower ? 245 : 234, 10, 11, 10); +// this.mouseDragged(mc, mX, mY); + mc.fontRenderer.drawString(this.value.toString(), this.x + 11 - (mc.fontRenderer.getStringWidth(this.value.toString()) >> 1), this.y + (this.height - 6) / 2, this.textColor, false); + } + } + + public void increase() + { + this.parentGui.onSelectionChanged(this, this.value + 1); + this.value++; + } + + public void decrease() + { + this.parentGui.onSelectionChanged(this, this.value - 1); + this.value--; + } + + @Override + public boolean mousePressed(Minecraft mc, int mX, int mY) + { + if (this.enabled && this.visible) + { + if (mX >= this.x + 20 && mX < this.x + width && mY > this.y && mY < this.y + this.height / 2) + { + if (this.parentGui.canPlayerEdit(this, mc.player)) + { + increase(); + return true; + } + } + + if (mX >= this.x + 20 && mX < this.x + width && mY > this.y + this.height / 2 && mY < this.y + this.height) + { + if (this.parentGui.canPlayerEdit(this, mc.player)) + { + decrease(); + return true; + } + } + } + + return false; + } + + public interface ISpinnerCallback + { + + void onSelectionChanged(GuiElementSpinner spinner, int newVal); + + boolean canPlayerEdit(GuiElementSpinner spinner, EntityPlayer player); + + int getInitialValue(GuiElementSpinner spinner); + + void onIntruderInteraction(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTextBox.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTextBox.java new file mode 100644 index 00000000..d8ab2637 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTextBox.java @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Keyboard; + +public class GuiElementTextBox extends GuiButton +{ + + public String text; + public boolean numericOnly; + public boolean centered; + private int maxLength; + + public long timeBackspacePressed; + public int cursorPulse; + public int backspacePressed; + public boolean isTextFocused = false; + public int incorrectUseTimer; + public boolean resetOnClick = true; + + private ITextBoxCallback parentGui; + + private Minecraft mc = FMLClientHandler.instance().getClient(); + + public GuiElementTextBox(int id, ITextBoxCallback parentGui, int x, int y, int width, int height, String initialText, boolean numericOnly, int maxLength, boolean centered) + { + super(id, x, y, width, height, initialText); + this.parentGui = parentGui; + this.numericOnly = numericOnly; + this.maxLength = maxLength; + this.centered = centered; + } + + /** + * Call this from the parent GUI class in keyTyped. + */ + public boolean keyTyped(char keyChar, int keyID) + { + if (this.isTextFocused) + { + if (keyID == Keyboard.KEY_BACK) + { + if (this.text.length() > 0) + { + if (this.parentGui.canPlayerEdit(this, this.mc.player)) + { + String toBeParsed = this.text.substring(0, this.text.length() - 1); + + if (this.isValid(toBeParsed)) + { + this.text = toBeParsed; + this.timeBackspacePressed = System.currentTimeMillis(); + } else + { + this.text = ""; + } + } else + { + this.incorrectUseTimer = 10; + this.parentGui.onIntruderInteraction(this); + } + } + } else if (keyChar == 22) + { + String pastestring = GuiScreen.getClipboardString(); + + if (pastestring == null) + { + pastestring = ""; + } + + if (this.isValid(this.text + pastestring)) + { + if (this.parentGui.canPlayerEdit(this, this.mc.player)) + { + this.text = this.text + pastestring; + this.text = this.text.substring(0, Math.min(String.valueOf(this.text).length(), this.maxLength)); + } else + { + this.incorrectUseTimer = 10; + this.parentGui.onIntruderInteraction(this); + } + } + } else if (this.isValid(this.text + keyChar)) + { + if (this.parentGui.canPlayerEdit(this, this.mc.player)) + { + this.text = this.text + keyChar; + this.text = this.text.substring(0, Math.min(this.text.length(), this.maxLength)); + } else + { + this.incorrectUseTimer = 10; + this.parentGui.onIntruderInteraction(this); + } + } + + this.parentGui.onTextChanged(this, this.text); + return true; + } + + return false; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.text == null) + { + this.text = this.parentGui.getInitialText(this); + this.parentGui.onTextChanged(this, this.text); + } + + if (this.visible) + { + Gui.drawRect(this.x, this.y, this.x + this.width, this.y + this.height, ColorUtil.to32BitColor(140, 140, 140, 140)); + Gui.drawRect(this.x + 1, this.y + 1, this.x + this.width - 1, this.y + this.height - 1, ColorUtil.to32BitColor(255, 0, 0, 0)); + + this.cursorPulse++; + + if (this.timeBackspacePressed > 0) + { + if (Keyboard.isKeyDown(Keyboard.KEY_BACK) && this.text.length() > 0) + { + if (System.currentTimeMillis() - this.timeBackspacePressed > 200 / (1 + this.backspacePressed * 0.3F) && this.parentGui.canPlayerEdit(this, this.mc.player)) + { + String toBeParsed = this.text.substring(0, this.text.length() - 1); + + if (this.isValid(toBeParsed)) + { + this.text = toBeParsed; + this.parentGui.onTextChanged(this, this.text); + } else + { + this.text = ""; + } + + this.timeBackspacePressed = System.currentTimeMillis(); + this.backspacePressed++; + } else if (!this.parentGui.canPlayerEdit(this, this.mc.player)) + { + this.incorrectUseTimer = 10; + this.parentGui.onIntruderInteraction(this); + } + } else + { + this.timeBackspacePressed = 0; + this.backspacePressed = 0; + } + } + + if (this.incorrectUseTimer > 0) + { + this.incorrectUseTimer--; + } + + int xPos = this.x + 4; + + if (this.centered) + { + xPos = this.x + this.width / 2 - this.mc.fontRenderer.getStringWidth(this.text) / 2; + } + + this.drawString(this.mc.fontRenderer, this.text + (this.cursorPulse / 24 % 2 == 0 && this.isTextFocused ? "_" : ""), xPos, this.y + this.height / 2 - 4, + this.incorrectUseTimer > 0 ? ColorUtil.to32BitColor(255, 255, 20, 20) : this.parentGui.getTextColor(this)); + } + } + + public int getIntegerValue() + { + try + { + return Integer.parseInt(this.text.equals("") ? "0" : this.text); + } catch (Exception e) + { + return -1; + } + } + + public boolean isValid(String string) + { + if (this.numericOnly) + { + if (string.length() > 0 && ChatAllowedCharacters.isAllowedCharacter(string.charAt(string.length() - 1))) + { + try + { + Integer.parseInt(string); + return true; + } catch (Exception e) + { + return false; + } + } else + { + return false; + } + } else + { + if (string.length() <= 0) + { + return false; + } + + return ChatAllowedCharacters.isAllowedCharacter(string.charAt(string.length() - 1)); + } + } + + @Override + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) + { + if (super.mousePressed(par1Minecraft, par2, par3)) + { + Gui.drawRect(this.x, this.y, this.x + this.width, this.y + this.height, 0xffA0A0A0); + this.isTextFocused = true; + if (resetOnClick) + { + this.text = this.parentGui.getInitialText(this); + } + this.parentGui.onTextChanged(this, this.text); + return true; + } else + { + this.isTextFocused = false; + return false; + } + } + + public int getMaxLength() + { + return maxLength; + } + + public interface ITextBoxCallback + { + + boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player); + + void onTextChanged(GuiElementTextBox textBox, String newText); + + String getInitialText(GuiElementTextBox textBox); + + int getTextColor(GuiElementTextBox textBox); + + void onIntruderInteraction(GuiElementTextBox textBox); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTexturedButton.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTexturedButton.java new file mode 100644 index 00000000..e5f53ca7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTexturedButton.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiElementTexturedButton extends GuiButton +{ + + private final ResourceLocation texture; + private final int bWidth, bHeight; + + public GuiElementTexturedButton(int par1, int par2, int par3, int par4, int par5, ResourceLocation texture, int width, int height) + { + super(par1, par2, par3, par4, par5, ""); + this.texture = texture; + this.bWidth = width; + this.bHeight = height; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.visible) + { + final FontRenderer var4 = par1Minecraft.fontRenderer; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + this.getHoverState(this.hovered); + par1Minecraft.renderEngine.bindTexture(this.texture); + this.drawTexturedModalRect(this.x, this.y, 0, 0, this.bWidth, this.bHeight); + this.mouseDragged(par1Minecraft, par2, par3); + int var6 = 14737632; + + if (!this.enabled) + { + var6 = -6250336; + } else if (this.hovered) + { + var6 = 16777120; + } + + this.drawCenteredString(var4, this.displayString, this.x + this.width / 2, this.y + (this.height - 8) / 2, var6); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTurnPageButton.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTurnPageButton.java new file mode 100644 index 00000000..1bce050a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/element/GuiElementTurnPageButton.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.element; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiElementTurnPageButton extends GuiButton +{ + + private final boolean nextPage; + private static final ResourceLocation background = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/bookleft.png"); + + public GuiElementTurnPageButton(int par1, int par2, int par3, boolean par4) + { + super(par1, par2, par3, 23, 13, ""); + this.nextPage = par4; + } + + @Override + public void drawButton(Minecraft par1Minecraft, int par2, int par3, float partial) + { + if (this.visible) + { + boolean var4 = par2 >= this.x && par3 >= this.y && par2 < this.x + this.width && par3 < this.y + this.height; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + par1Minecraft.getTextureManager().bindTexture(GuiElementTurnPageButton.background); + int var5 = 0; + int var6 = 192; + + if (var4) + { + var5 += 23; + } + + if (!this.nextPage) + { + var6 += 13; + } + + this.drawTexturedModalRect(this.x, this.y, var5, var6, 23, 13); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/Overlay.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/Overlay.java new file mode 100644 index 00000000..65b89bec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/Overlay.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import org.lwjgl.opengl.GL11; + +public class Overlay +{ + + /** + * Get the player's spaceship height off ground + * + * @param player thePlayer + * @return position of player's spaceship + */ + protected static int getPlayerPositionY(EntityPlayer player) + { + if (player.getRidingEntity() != null && player.getRidingEntity() instanceof EntityTier1Rocket) + { + return (int) Math.floor(((EntityTier1Rocket) player.getRidingEntity()).posY); + } + + return (int) Math.floor(player.posY); + } + + /** + * Draw a textured rectangle at the specified position + * + * @param par1 xpos + * @param par2 ypos + * @param par3 u + * @param par4 v + * @param par5 width + * @param par6 height + */ + protected static void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6) + { + final float var7 = 0.00390625F; + final float var8 = 0.00390625F; + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(par1 + 0, par2 + par6, 0.0).tex((par3 + 0) * var7, (par4 + par6) * var8).endVertex(); + worldRenderer.pos(par1 + par5, par2 + par6, 0.0).tex((par3 + par5) * var7, (par4 + par6) * var8).endVertex(); + worldRenderer.pos(par1 + par5, par2 + 0, 0.0).tex((par3 + par5) * var7, (par4 + 0) * var8).endVertex(); + worldRenderer.pos(par1 + 0, par2 + 0, 0.0).tex((par3 + 0) * var7, (par4 + 0) * var8).endVertex(); + tess.draw(); + } + + /** + * Draws a rectangle with middle at point specified + * + * @param var1 x + * @param var3 y + * @param var5 depth + * @param var7 width + * @param var9 height + */ + protected static void drawCenteringRectangle(double var1, double var3, double var5, double var7, double var9) + { + var7 *= 0.5D; + var9 *= 0.5D; + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(var1 - var7, var3 + var9, var5).tex(0.0D, 1.0D).endVertex(); + worldRenderer.pos(var1 + var7, var3 + var9, var5).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(var1 + var7, var3 - var9, var5).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(var1 - var7, var3 - var9, var5).tex(0.0D, 0.0D).endVertex(); + tess.draw(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayDockingRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayDockingRocket.java new file mode 100644 index 00000000..dcb0493a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayDockingRocket.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OverlayDockingRocket extends Overlay +{ + + /** + * Render the GUI when player is docking a vehicle + */ + public static void renderDockingOverlay(Minecraft mc, long ticks) + { + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int width = scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + + if (mc.player.getRidingEntity() instanceof EntityAutoRocket) + { + EntityAutoRocket rocket = (EntityAutoRocket) mc.player.getRidingEntity(); + + if (rocket.launchPhase == EnumLaunchPhase.LANDING.ordinal() && rocket.targetVec != null) + { + double dX = Math.round((rocket.posX - rocket.targetVec.getX()) * 100.0D) / 100.0D; + double dY = Math.round((rocket.posY - rocket.targetVec.getY()) * 100.0D) / 100.0D; + double dZ = Math.round((rocket.posZ - rocket.targetVec.getZ()) * 100.0D) / 100.0D; + String dXStr = String.valueOf(dX); + String dYStr = String.valueOf(dY); + String dZStr = String.valueOf(dZ); + + double targetMotionY = Math.round(Math.max((rocket.posY - rocket.targetVec.getY()) / -100.0D, -0.9D) * 100.0D) / 100.0D; + double currentMotionY = Math.round(rocket.motionY * 100.0D) / 100.0D; + double dMY = Math.floor((targetMotionY - currentMotionY) * 300); + int dMotionY = (int) Math.max(1, Math.min(255, dMY)); + int dMotionYN = (int) Math.max(1, Math.min(255, -dMY)); + String targetMotionYStr = GCCoreUtil.translate("gui.docking_rocket.target_vel.name") + ": " + String.format("%.2f", targetMotionY); + String currentMotionYStr = GCCoreUtil.translate("gui.docking_rocket.current_vel.name") + ": " + String.format("%.2f", currentMotionY); + + int red = ColorUtil.to32BitColor(dMY > 0 ? 0 : dMotionYN, 255, 255, 255); + int green = ColorUtil.to32BitColor(dMY < 0 ? 0 : dMotionY, 255, 255, 255); + int grey = ColorUtil.to32BitColor(255, 220, 220, 220); + +// if (dMY > 25) +// { +// String warning = GCCoreUtil.translateWithFormat("gui.docking_rocket.warning.name.0", GameSettings.getKeyDisplayString(KeyHandlerClient.spaceKey.getKeyCode())); +// mc.fontRenderer.drawString(warning, width / 2 - mc.fontRenderer.getStringWidth(warning) / 2, height / 3 - 50, green); +// } +// else if (dMY < -25) +// { +// String warning2 = GCCoreUtil.translateWithFormat("gui.docking_rocket.warning.name.1", GameSettings.getKeyDisplayString(KeyHandlerClient.leftShiftKey.getKeyCode())); +// mc.fontRenderer.drawString(warning2, width / 2 - mc.fontRenderer.getStringWidth(warning2) / 2, height / 3 - 35, red); +// } + + mc.fontRenderer.drawString(targetMotionYStr, width - mc.fontRenderer.getStringWidth(targetMotionYStr) - 50, height / 3 + 50, grey); + mc.fontRenderer.drawString(currentMotionYStr, width - mc.fontRenderer.getStringWidth(currentMotionYStr) - 50, height / 3 + 35, grey); + + mc.fontRenderer.drawString(GCCoreUtil.translate("gui.docking_rocket.distance_from.name"), 50, height / 3 + 15, grey); + mc.fontRenderer.drawString("X: " + dXStr, 50, height / 3 + 35, Math.abs(dX) > 15 ? red : grey); + mc.fontRenderer.drawString("Y: " + dYStr, 50, height / 3 + 45, Math.abs(dY) > 50 || Math.abs(dY) < 1.9 ? grey : ticks / 10 % 2 == 0 ? red : grey); + mc.fontRenderer.drawString("Z: " + dZStr, 50, height / 3 + 55, Math.abs(dZ) > 15 ? red : grey); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLander.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLander.java new file mode 100644 index 00000000..d3c043e6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLander.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.settings.GameSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OverlayLander extends Overlay +{ + + /** + * Render the GUI when player is in inventory + */ + public static void renderLanderOverlay(Minecraft mc, long ticks) + { + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int width = scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + + GlStateManager.pushMatrix(); + GlStateManager.scale(2.0F, 2.0F, 0.0F); + + if (mc.player.getRidingEntity().motionY < -2.0) + { + mc.fontRenderer.drawString(GCCoreUtil.translate("gui.warning"), width / 4 - mc.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.warning")) / 2, height / 8 - 20, + ColorUtil.to32BitColor(255, 255, 0, 0)); + final int alpha = (int) (200 * (Math.sin(ticks) * 0.5F + 0.5F)) + 5; + final String press1 = GCCoreUtil.translate("gui.lander.warning2"); + final String press2 = GCCoreUtil.translate("gui.lander.warning3"); + mc.fontRenderer.drawString(press1 + GameSettings.getKeyDisplayString(KeyHandlerClient.spaceKey.getKeyCode()) + press2, + width / 4 - mc.fontRenderer.getStringWidth(press1 + GameSettings.getKeyDisplayString(KeyHandlerClient.spaceKey.getKeyCode()) + press2) / 2, height / 8, + ColorUtil.to32BitColor(alpha, alpha, alpha, alpha)); + } + + GlStateManager.popMatrix(); + + if (mc.player.getRidingEntity().motionY != 0.0D) + { + String string = GCCoreUtil.translate("gui.lander.velocity") + ": " + Math.round(((EntityLander) mc.player.getRidingEntity()).motionY * 1000) / 100.0D + " " + + GCCoreUtil.translate("gui.lander.velocityu"); + int color = + ColorUtil.to32BitColor(255, (int) Math.floor(Math.abs(mc.player.getRidingEntity().motionY) * 51.0D), 255 - (int) Math.floor(Math.abs(mc.player.getRidingEntity().motionY) * 51.0D), 0); + mc.fontRenderer.drawString(string, width / 2 - mc.fontRenderer.getStringWidth(string) / 2, height / 3, color); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLaunchCountdown.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLaunchCountdown.java new file mode 100644 index 00000000..729d45b9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayLaunchCountdown.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OverlayLaunchCountdown extends Overlay +{ + + public static void renderCountdownOverlay(Minecraft mc) + { + GlStateManager.disableLighting(); + int count = ((EntitySpaceshipBase) mc.player.getRidingEntity()).timeUntilLaunch / 2; + + count = (int) Math.floor(count / 10.0F); + + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int width = scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + + GlStateManager.pushMatrix(); + + if (count <= 10) + { + GlStateManager.scale(4.0F, 4.0F, 0.0F); + mc.fontRenderer.drawString(String.valueOf(count), width / 8 - mc.fontRenderer.getStringWidth(String.valueOf(count)) / 2, height / 20, ColorUtil.to32BitColor(255, 255, 0, 0)); + } else + { + GlStateManager.scale(2.0F, 2.0F, 0.0F); + mc.fontRenderer.drawString(String.valueOf(count), width / 4 - mc.fontRenderer.getStringWidth(String.valueOf(count)) / 2, height / 8, ColorUtil.to32BitColor(255, 255, 0, 0)); + } + + GlStateManager.popMatrix(); + GlStateManager.enableLighting(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenTanks.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenTanks.java new file mode 100644 index 00000000..3c163291 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenTanks.java @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class OverlayOxygenTanks extends Overlay +{ + + private final static ResourceLocation guiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + + /** + * Render the GUI that displays oxygen level in tanks + */ + public static void renderOxygenTankIndicator(Minecraft mc, int heatLevel, int oxygenInTank1, int oxygenInTank2, boolean right, boolean top, boolean invalid) + { + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int i = scaledresolution.getScaledWidth(); + final int j = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.depthMask(false); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableAlpha(); + mc.renderEngine.bindTexture(OverlayOxygenTanks.guiTexture); + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GlStateManager.enableDepth(); + GlStateManager.enableAlpha(); + GlStateManager.disableLighting(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + int minLeftX = 0; + int maxLeftX = 0; + int minRightX = 0; + int maxRightX = 0; + double bottomY = 0; + double topY = 0; + double zLevel = -190.0D; + + if (right) + { + minLeftX = i - 59; + maxLeftX = i - 40; + minRightX = i - 39; + maxRightX = i - 20; + } else + { + minLeftX = 10; + maxLeftX = 29; + minRightX = 30; + maxRightX = 49; + } + + if (top) + { + topY = 10.5; + } else + { + topY = j - 57; + } + + bottomY = topY + 46.5; + + float texMod = 0.00390625F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX, bottomY, zLevel).tex(66 * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(minLeftX + 9, bottomY, zLevel).tex((66 + 9) * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(minLeftX + 9, topY, zLevel).tex((66 + 9) * texMod, 47 * 2 * texMod).endVertex(); + worldRenderer.pos(minLeftX, topY, zLevel).tex(66 * texMod, 47 * 2 * texMod).endVertex(); + tessellator.draw(); + + int heatLevelScaled = Math.min(Math.max(heatLevel, 1), 45); + int heatLeveLScaledMax = Math.min(heatLevelScaled + 2, 45); + int heatLevelScaledMin = Math.max(heatLeveLScaledMax - 2, 0); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX + 1, bottomY - heatLevelScaledMin, zLevel).tex(76 * texMod, (48 + 45 - heatLevelScaled) * texMod).endVertex(); + worldRenderer.pos(minLeftX + 8, bottomY - heatLevelScaledMin, zLevel).tex((76 + 7) * texMod, (48 + 45 - heatLevelScaled) * texMod).endVertex(); + worldRenderer.pos(minLeftX + 8, bottomY - heatLeveLScaledMax, zLevel).tex((76 + 7) * texMod, (48 + 45 - heatLevelScaled) * texMod).endVertex(); + worldRenderer.pos(minLeftX + 1, bottomY - heatLeveLScaledMax, zLevel).tex(76 * texMod, (48 + 45 - heatLevelScaled) * texMod).endVertex(); + tessellator.draw(); + + if (invalid) + { + GlStateManager.color(1, 0, 0); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX - 5, bottomY - heatLevelScaledMin + 3, zLevel).tex(84 * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(minLeftX - 1, bottomY - heatLevelScaledMin + 3, zLevel).tex((84 + 5) * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(minLeftX - 1, bottomY - heatLeveLScaledMax - 3, zLevel).tex((84 + 5) * texMod, (47 + 9) * texMod).endVertex(); + worldRenderer.pos(minLeftX - 5, bottomY - heatLeveLScaledMax - 3, zLevel).tex(84 * texMod, (47 + 9) * texMod).endVertex(); + tessellator.draw(); + GlStateManager.color(1, 1, 1); + } + + minLeftX += 10; + maxLeftX += 10; + minRightX += 10; + maxRightX += 10; + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minRightX, bottomY, zLevel).tex(85 * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(maxRightX, bottomY, zLevel).tex((85 + 19) * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(maxRightX, topY, zLevel).tex((85 + 19) * texMod, 0 * texMod).endVertex(); + worldRenderer.pos(minRightX, topY, zLevel).tex(85 * texMod, 0 * texMod).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX, bottomY, zLevel).tex(85 * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(maxLeftX, bottomY, zLevel).tex((85 + 19) * texMod, 47 * texMod).endVertex(); + worldRenderer.pos(maxLeftX, topY, zLevel).tex((85 + 19) * texMod, 0 * texMod).endVertex(); + worldRenderer.pos(minLeftX, topY, zLevel).tex(85 * texMod, 0 * texMod).endVertex(); + tessellator.draw(); + GlStateManager.depthMask(true); + + if (oxygenInTank1 > 0) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX + 1, topY + 1 + oxygenInTank1 / 2, zLevel).tex(105 * 0.00390625F, oxygenInTank1 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxLeftX - 1, topY + 1 + oxygenInTank1 / 2, zLevel).tex((105 + 17) * 0.00390625F, oxygenInTank1 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxLeftX - 1, topY + 1, zLevel).tex((105 + 17) * 0.00390625F, 1 * 0.00390625F).endVertex(); + worldRenderer.pos(minLeftX + 1, topY + 1, zLevel).tex(105 * 0.00390625F, 1 * 0.00390625F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minLeftX, topY + 1 + oxygenInTank1 / 2, zLevel).tex(66 * 0.00390625F, oxygenInTank1 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxLeftX - 1, topY + 1 + oxygenInTank1 / 2, zLevel).tex((66 + 17) * 0.00390625F, oxygenInTank1 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxLeftX - 1, topY + 1 + oxygenInTank1 / 2 - 1, zLevel).tex((66 + 17) * 0.00390625F, 1 * 0.00390625F).endVertex(); + worldRenderer.pos(minLeftX, topY + 1 + oxygenInTank1 / 2 - 1, zLevel).tex(66 * 0.00390625F, 1 * 0.00390625F).endVertex(); + tessellator.draw(); + } + + if (oxygenInTank2 > 0) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minRightX + 1, topY + 1 + oxygenInTank2 / 2, 0).tex(105 * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxRightX - 1, topY + 1 + oxygenInTank2 / 2, 0).tex((105 + 17) * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxRightX - 1, topY + 1, 0).tex((105 + 17) * 0.00390625F, 1 * 0.00390625F).endVertex(); + worldRenderer.pos(minRightX + 1, topY + 1, 0).tex(105 * 0.00390625F, 1 * 0.00390625F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minRightX, topY + 1 + oxygenInTank2 / 2, 0).tex(66 * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxRightX - 1, topY + 1 + oxygenInTank2 / 2, 0).tex((66 + 17) * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(maxRightX - 1, topY + 1 + oxygenInTank2 / 2 - 1, 0).tex((66 + 17) * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + worldRenderer.pos(minRightX, topY + 1 + oxygenInTank2 / 2 - 1, 0).tex(66 * 0.00390625F, oxygenInTank2 / 2 * 0.00390625F).endVertex(); + tessellator.draw(); + } + + if (invalid) + { + String value = GCCoreUtil.translate("gui.warning.invalid_thermal"); + mc.fontRenderer.drawString(value, minLeftX - 18 - mc.fontRenderer.getStringWidth(value), (int) bottomY - heatLevelScaled - mc.fontRenderer.FONT_HEIGHT / 2 - 1, + ColorUtil.to32BitColor(255, 255, 10, 10)); + } + GlStateManager.disableBlend(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenWarning.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenWarning.java new file mode 100644 index 00000000..009fd0f4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayOxygenWarning.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OverlayOxygenWarning extends Overlay +{ + + /** + * Render the GUI when player is in inventory + */ + public static void renderOxygenWarningOverlay(Minecraft mc, long ticks) + { + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + final int width = scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + GlStateManager.enableColorMaterial(); + GlStateManager.pushMatrix(); + GlStateManager.scale(2.0F, 2.0F, 0.0F); + GlStateManager.enableBlend(); + mc.fontRenderer.drawString(GCCoreUtil.translate("gui.warning"), width / 4 - mc.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.warning")) / 2, height / 8 - 20, + ColorUtil.to32BitColor(255, 255, 0, 0)); + final int alpha = (int) (200 * (Math.sin(ticks / 1.5F) * 0.5F + 0.5F)) + 5; + mc.fontRenderer.drawString(GCCoreUtil.translate("gui.oxygen.warning"), width / 4 - mc.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.oxygen.warning")) / 2, height / 8, + ColorUtil.to32BitColor(alpha, 255, 0, 0)); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayRocket.java new file mode 100644 index 00000000..c2ab161d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlayRocket.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class OverlayRocket extends Overlay +{ + + /** + * Render the GUI when player is in inventory + */ + public static void renderSpaceshipOverlay(Minecraft mc, ResourceLocation guiTexture) + { + if (guiTexture == null) + { + return; + } + + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(mc, mc.displayWidth, mc.displayHeight); + scaledresolution.getScaledWidth(); + final int height = scaledresolution.getScaledHeight(); + mc.entityRenderer.setupOverlayRendering(); + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(guiTexture); + + float var1 = 0F; + float var2 = height / 2 - 170 / 2; + float var3 = 0.0F; + float var3b = 0.0F; + float var4 = 0.0F; + float var5 = 1.0F; + float var6 = 1.0F; + float var7 = 1.0F; + float var8 = 1.0F; + float sizeScale = 0.65F; + + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(var1 + 0, var2 + 242.0F * sizeScale, 0.0).tex((var3 + 0) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + 20.0F * sizeScale, var2 + 242.0F * sizeScale, 0.0).tex((var3 + var5) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + 20.0F * sizeScale, var2 + 0, 0.0).tex((var3 + var5) * var7, (var4 + 0) * var8).endVertex(); + worldRenderer.pos(var1 + 0, var2 + 0, 0.0).tex((var3 + 0) * var7, (var4 + 0) * var8).endVertex(); + tess.draw(); + + GlStateManager.color(1.0F, 1.0F, 1.0F); + + Entity rocket = mc.player.getRidingEntity(); + float headOffset = 0; + if (rocket instanceof EntityTier1Rocket) + { + headOffset = 5F; + } + Render spaceshipRender = (Render) mc.getRenderManager().entityRenderMap.get(rocket.getClass()); + + final int y1 = height / 2 + 60 - (int) Math.floor(Overlay.getPlayerPositionY(mc.player) / 10.5F); + var1 = 2.5F; + var2 = y1; + var3 = 8; + var3b = 40; + var4 = 8; + var5 = 8; + var6 = 8; + var7 = 1.0F / 64.0F; + var8 = 1.0F / 64.0F; + + GlStateManager.pushMatrix(); + final int i = rocket.getBrightnessForRender(); + final int j = i % 65536; + final int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j / 1.0F, k / 1.0F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableColorMaterial(); + GlStateManager.translate(var1 + 4, var2 + 6, 50F); + GlStateManager.scale(5F, 5F, 5F); + GlStateManager.rotate(180F, 1, 0, 0); + GlStateManager.rotate(90F, 0, 1, 0); + + try + { + spaceshipRender.doRender(rocket.getClass().getConstructor(World.class).newInstance(mc.player.world), 0, 0, 0, 0, 0); + } catch (Exception e) + { + e.printStackTrace(); + } + + GlStateManager.popMatrix(); + + mc.renderEngine.bindTexture(ClientProxyCore.playerHead); + + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(770, 771); + GlStateManager.translate(0F, -12F + headOffset, 60F); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(var1 + 0, var2 + var6, 0.0).tex((var3 + 0) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + var5, var2 + var6, 0.0).tex((var3 + var5) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + var5, var2 + 0, 0.0).tex((var3 + var5) * var7, (var4 + 0) * var8).endVertex(); + worldRenderer.pos(var1 + 0, var2 + 0, 0.0).tex((var3 + 0) * var7, (var4 + 0) * var8).endVertex(); + tess.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(var1 + 0, var2 + var6, 0.0).tex((var3b + 0) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + var5, var2 + var6, 0.0).tex((var3b + var5) * var7, (var4 + var6) * var8).endVertex(); + worldRenderer.pos(var1 + var5, var2 + 0, 0.0).tex((var3b + var5) * var7, (var4 + 0) * var8).endVertex(); + worldRenderer.pos(var1 + 0, var2 + 0, 0.0).tex((var3b + 0) * var7, (var4 + 0) * var8).endVertex(); + tess.draw(); + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlaySensorGlasses.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlaySensorGlasses.java new file mode 100644 index 00000000..1a277a0f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/overlay/OverlaySensorGlasses.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.overlay; + +import java.util.Iterator; +import micdoodle8.mods.galacticraft.api.item.ISensorGlassesArmor; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class OverlaySensorGlasses extends Overlay +{ + + private static final ResourceLocation hudTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/hud.png"); + private static final ResourceLocation indicatorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/indicator.png"); + public static final ResourceLocation altTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/sensor_mobs.png"); + + private static Minecraft minecraft = FMLClientHandler.instance().getClient(); + + private static int zoom = 0; + + /** + * Render the GUI that displays sensor glasses + */ + public static void renderSensorGlassesMain(ItemStack stack, EntityPlayer player, ScaledResolution resolution, float partialTicks) + { + OverlaySensorGlasses.zoom++; + + final float f = MathHelper.sin(OverlaySensorGlasses.zoom / 80.0F) * 0.1F + 0.1F; + + final ScaledResolution scaledresolution = ClientUtil.getScaledRes(OverlaySensorGlasses.minecraft, OverlaySensorGlasses.minecraft.displayWidth, OverlaySensorGlasses.minecraft.displayHeight); + final int i = scaledresolution.getScaledWidth(); + final int k = scaledresolution.getScaledHeight(); + OverlaySensorGlasses.minecraft.entityRenderer.setupOverlayRendering(); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_ALPHA_TEST); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(OverlaySensorGlasses.hudTexture); + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(i / 2 - k - f * 80, k + f * 40, -90D).tex(0.0D, 1.0D).endVertex(); + worldRenderer.pos(i / 2 + k + f * 80, k + f * 40, -90D).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(i / 2 + k + f * 80, 0.0D - f * 40, -90D).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(i / 2 - k - f * 80, 0.0D - f * 40, -90D).tex(0.0D, 0.0D).endVertex(); + tessellator.draw(); + + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + public static void renderSensorGlassesValueableBlocks(ItemStack stack, EntityPlayer player, ScaledResolution resolution, float partialTicks) + { + final Iterator var51 = ClientProxyCore.valueableBlocks.iterator(); + double var52; + double var58; + double var59; + double var20; + double var21; + float var60; + + while (var51.hasNext()) + { + BlockVec3 coords = var51.next(); + + var52 = ClientProxyCore.playerPosX - coords.x - 0.5D; + var58 = ClientProxyCore.playerPosY - coords.y - 0.5D; + var59 = ClientProxyCore.playerPosZ - coords.z - 0.5D; + var60 = (float) Math.toDegrees(Math.atan2(var52, var59)); + var20 = Math.sqrt(var52 * var52 + var58 * var58 + var59 * var59) * 0.5D; + var21 = Math.sqrt(var52 * var52 + var59 * var59) * 0.5D; + + final ScaledResolution var5 = ClientUtil.getScaledRes(OverlaySensorGlasses.minecraft, OverlaySensorGlasses.minecraft.displayWidth, OverlaySensorGlasses.minecraft.displayHeight); + final int var6 = var5.getScaledWidth(); + final int var7 = var5.getScaledHeight(); + + boolean var2 = false; + + final EntityPlayerSP client = PlayerUtil.getPlayerBaseClientFromPlayer(OverlaySensorGlasses.minecraft.player, false); + + if (client != null) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(client); + var2 = stats.isUsingAdvancedGoggles(); + } + + OverlaySensorGlasses.minecraft.fontRenderer.drawString( + GCCoreUtil.translate("gui.sensor.advanced") + ": " + (var2 ? GCCoreUtil.translate("gui.sensor.advancedon") : GCCoreUtil.translate("gui.sensor.advancedoff")), var6 / 2 - 50, 4, + 0x03b88f); + + try + { + GL11.glPushMatrix(); + + if (var20 < 4.0D) + { + GL11.glColor4f(0.0F, 255F / 255F, 198F / 255F, (float) Math.min(1.0D, Math.max(0.2D, (var20 - 1.0D) * 0.1D))); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(OverlaySensorGlasses.indicatorTexture); + GL11.glRotatef(-var60 - ClientProxyCore.playerRotationYaw + 180.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslated(0.0D, var2 ? -var20 * 16 : -var21 * 16, 0.0D); + GL11.glRotatef(-(-var60 - ClientProxyCore.playerRotationYaw + 180.0F), 0.0F, 0.0F, 1.0F); + Overlay.drawCenteringRectangle(var6 / 2, var7 / 2, 1.0D, 8.0D, 8.0D); + } + } finally + { + GL11.glPopMatrix(); + } + } + } + + public static void preRenderMobs() + { + GL11.glEnable(GL11.GL_BLEND); +//TODO Enable these to see the entity through solid blocks - but would need a postRenderCallback to switch this off again otherwise everything is changed +// GL11.glDisable(GL11.GL_DEPTH_TEST); +// GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_ALPHA_TEST); + int i = 15728880; + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j / 1.0F, (float) k / 1.0F); + GL11.glTranslatef(0.0F, 0.045F, 0.0F); + GL11.glScalef(1.07F, 1.035F, 1.07F); + } + + public static void postRenderMobs() + { + GL11.glEnable(GL11.GL_ALPHA_TEST); +// GL11.glEnable(GL11.GL_DEPTH_TEST); +// GL11.glDepthMask(true); + } + + public static boolean overrideMobTexture() + { + EntityPlayer player = Minecraft.getMinecraft().player; + return (player != null && player.inventory.armorItemInSlot(3) != null && player.inventory.armorItemInSlot(3).getItem() instanceof ISensorGlassesArmor); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/CFPage.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/CFPage.java new file mode 100644 index 00000000..3c4eb52a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/CFPage.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class CFPage extends GuiTeleporting +{ + public CFPage() + { + super(1); + this.message = ""; + TickHandlerClient.teleportingGui = this; + } + + @Override + public void initGui() + { + super.initGui(); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + super.drawScreen(mouseX, mouseY, partialTicks); + ResourceLocation img = new ResourceLocation(Constants.MOD_ID_CORE, "textures/gui/landing.png"); + Minecraft.getMinecraft().renderEngine.bindTexture(img); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder vertexbuffer = tessellator.getBuffer(); + vertexbuffer.begin(7, DefaultVertexFormats.POSITION_TEX); + vertexbuffer.pos(0 + 0, 0 + height, zLevel).tex(0, 1).endVertex(); + vertexbuffer.pos(0 + width, 0 + height, zLevel).tex(1, 1).endVertex(); + vertexbuffer.pos(0 + width, 0 + 0, zLevel).tex(1, 0).endVertex(); + vertexbuffer.pos(0 + 0, 0 + 0, zLevel).tex(0, 0).endVertex(); + tessellator.draw(); + } + + @Override + public void updateScreen() + { + super.updateScreen(); + } + + @Override + public boolean doesGuiPauseGame() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/ConfigGuiFactoryCore.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/ConfigGuiFactoryCore.java new file mode 100644 index 00000000..c6dd8487 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/ConfigGuiFactoryCore.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import java.util.Set; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.fml.client.IModGuiFactory; +import net.minecraftforge.fml.client.config.GuiConfig; + +public class ConfigGuiFactoryCore implements IModGuiFactory +{ + + public static class CoreConfigGUI extends GuiConfig + { + + public CoreConfigGUI(GuiScreen parent) + { + super(parent, ConfigManagerCore.getConfigElements(), Constants.MOD_ID_CORE, false, false, GCCoreUtil.translate("gc.configgui.title")); + } + } + + @Override + public void initialize(Minecraft minecraftInstance) + { + + } + + @Override + public Set runtimeGuiCategories() + { + return null; + } + + public GuiScreen createConfigGui(GuiScreen arg0) + { + // TODO Forge 2282 addition! + return new CoreConfigGUI(arg0); + } + + public boolean hasConfigGui() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiCelestialSelection.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiCelestialSelection.java new file mode 100644 index 00000000..671d2e85 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiCelestialSelection.java @@ -0,0 +1,2434 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.ibm.icu.text.ArabicShaping; +import com.ibm.icu.text.ArabicShapingException; +import com.ibm.icu.text.Bidi; +import java.io.IOException; +import java.nio.FloatBuffer; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.event.client.CelestialBodyRenderEvent; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.IChildBody; +import micdoodle8.mods.galacticraft.api.galaxies.Moon; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.galaxies.SolarSystem; +import micdoodle8.mods.galacticraft.api.galaxies.Star; +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; +import micdoodle8.mods.galacticraft.api.world.SpaceStationType; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.BufferUtils; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.vector.Matrix4f; +import org.lwjgl.util.vector.Vector2f; +import org.lwjgl.util.vector.Vector3f; +import org.lwjgl.util.vector.Vector4f; + +public class GuiCelestialSelection extends GuiScreen +{ + + protected enum EnumView + { + PREVIEW, PROFILE + } + + protected enum EnumSelection + { + UNSELECTED, SELECTED, ZOOMED + } + + protected static final int MAX_SPACE_STATION_NAME_LENGTH = 32; + + protected float zoom = 0.0F; + protected float planetZoom = 0.0F; + protected boolean doneZooming = false; + protected float preSelectZoom = 0.0F; + protected Vector2f preSelectPosition = new Vector2f(); + protected static ResourceLocation guiMain0 = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialselection.png"); + protected static ResourceLocation guiMain1 = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialselection1.png"); + protected float ticksSinceSelectionF = 0; + protected float ticksSinceUnselectionF = -1; + protected float ticksSinceMenuOpenF = 0; + protected float ticksTotalF = 0; + @Deprecated + protected int ticksSinceSelection = (int) ticksSinceSelectionF; + @Deprecated + protected int ticksSinceUnselection = (int) ticksSinceUnselectionF; + @Deprecated + protected int ticksSinceMenuOpen = (int) ticksSinceMenuOpenF; + @Deprecated + protected int ticksTotal = (int) ticksTotalF; + protected int animateGrandchildren = 0; + protected Vector2f position = new Vector2f(0, 0); + protected Map planetPosMap = Maps.newHashMap(); + @Deprecated + protected Map celestialBodyTicks = Maps.newHashMap(); + protected CelestialBody selectedBody; + protected CelestialBody lastSelectedBody; + protected static int BORDER_SIZE = 0; + protected static int BORDER_EDGE_SIZE = 0; + protected int canCreateOffset = 24; + protected EnumView viewState = EnumView.PREVIEW; + protected EnumSelection selectionState = EnumSelection.UNSELECTED; + protected int zoomTooltipPos = 0; + protected Object selectedParent = GalacticraftCore.solarSystemSol; + protected final boolean mapMode; + public List possibleBodies; + + // Each home planet has a map of owner's names linked with their station + // data: + public Map> spaceStationMap = Maps.newHashMap(); + + protected String selectedStationOwner = ""; + protected int spaceStationListOffset = 0; + protected boolean renamingSpaceStation; + protected String renamingString = ""; + protected Vector2f translation = new Vector2f(0.0F, 0.0F); + protected boolean mouseDragging = false; + protected int lastMovePosX = -1; + protected int lastMovePosY = -1; + protected boolean errorLogged = false; + public boolean canCreateStations = false; + protected List bodiesToRender = Lists.newArrayList(); + + // String colours + protected static final int WHITE = ColorUtil.to32BitColor(255, 255, 255, 255); + protected static final int GREY5 = ColorUtil.to32BitColor(255, 150, 150, 150); + protected static final int GREY4 = ColorUtil.to32BitColor(255, 140, 140, 140); + protected static final int GREY3 = ColorUtil.to32BitColor(255, 120, 120, 120); + protected static final int GREY2 = ColorUtil.to32BitColor(255, 100, 100, 100); + protected static final int GREY1 = ColorUtil.to32BitColor(255, 80, 80, 80); + protected static final int GREY0 = ColorUtil.to32BitColor(255, 40, 40, 40); + protected static final int GREEN = ColorUtil.to32BitColor(255, 0, 255, 0); + protected static final int RED = ColorUtil.to32BitColor(255, 255, 0, 0); + protected static final int RED3 = ColorUtil.to32BitColor(255, 255, 100, 100); + protected static final int CYAN = ColorUtil.to32BitColor(255, 150, 200, 255); + + public GuiCelestialSelection(boolean mapMode, List possibleBodies, boolean canCreateStations) + { + this.mapMode = mapMode; + this.possibleBodies = possibleBodies; + this.canCreateStations = canCreateStations; + } + + @Override + public void initGui() + { + GuiCelestialSelection.BORDER_SIZE = this.width / 65; + GuiCelestialSelection.BORDER_EDGE_SIZE = GuiCelestialSelection.BORDER_SIZE / 4; + + for (SolarSystem solarSystem : GalaxyRegistry.getRegisteredSolarSystems().values()) + { + bodiesToRender.add(solarSystem.getMainStar()); + } + bodiesToRender.addAll(GalaxyRegistry.getRegisteredPlanets().values()); + bodiesToRender.addAll(GalaxyRegistry.getRegisteredMoons().values()); + bodiesToRender.addAll(GalaxyRegistry.getRegisteredSatellites().values()); + } + + protected String getGrandparentName() + { + if (this.selectedParent instanceof Planet) + { + SolarSystem parentSolarSystem = ((Planet) this.selectedParent).getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedName(); + } + } else if (this.selectedParent instanceof IChildBody) + { + Planet parentPlanet = ((IChildBody) this.selectedParent).getParentPlanet(); + + if (parentPlanet != null) + { + SolarSystem parentSolarSystem = parentPlanet.getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedName(); + } + } + } else if (this.selectedParent instanceof Star) + { + SolarSystem parentSolarSystem = ((Star) this.selectedParent).getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedParentGalaxyName(); + } + } else if (this.selectedParent instanceof SolarSystem) + { + return ((SolarSystem) this.selectedParent).getTranslatedParentGalaxyName(); + } + + return "Null"; + } + + protected int getSatelliteParentID(Satellite satellite) + { + return satellite.getParentPlanet().getDimensionID(); + } + + protected String getParentName() + { + if (this.selectedBody instanceof Planet) + { + SolarSystem parentSolarSystem = ((Planet) this.selectedBody).getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedName(); + } + } else if (this.selectedBody instanceof IChildBody) + { + Planet parentPlanet = ((IChildBody) this.selectedBody).getParentPlanet(); + + if (parentPlanet != null) + { + return parentPlanet.getTranslatedName(); + } + } else if (this.selectedBody instanceof Star) + { + SolarSystem parentSolarSystem = ((Star) this.selectedBody).getParentSolarSystem(); + + if (parentSolarSystem != null) + { + return parentSolarSystem.getTranslatedName(); + } + } else if (this.selectedParent != null) + { + if (this.selectedParent instanceof SolarSystem) + { + return ((SolarSystem) this.selectedParent).getTranslatedName(); + } + } + + return "Null"; + } + + protected float getScale(CelestialBody celestialBody) + { + return 3.0F * celestialBody.getRelativeDistanceFromCenter().unScaledDistance * (celestialBody instanceof Planet ? 25.0F : 1.0F / 5.0F); + } + + protected List getSiblings(CelestialBody celestialBody) + { + List bodyList = Lists.newArrayList(); + + if (celestialBody instanceof Planet) + { + SolarSystem solarSystem = ((Planet) celestialBody).getParentSolarSystem(); + + for (Planet planet : GalaxyRegistry.getRegisteredPlanets().values()) + { + SolarSystem solarSystem1 = planet.getParentSolarSystem(); + + if (solarSystem1 != null && solarSystem1.equals(solarSystem)) + { + bodyList.add(planet); + } + } + } else if (celestialBody instanceof IChildBody) + { + Planet planet = ((IChildBody) celestialBody).getParentPlanet(); + + for (Moon moon : GalaxyRegistry.getRegisteredMoons().values()) + { + Planet planet1 = moon.getParentPlanet(); + + if (planet1 != null && planet1.equals(planet)) + { + bodyList.add(moon); + } + } + + for (Satellite sat : GalaxyRegistry.getRegisteredSatellites().values()) + { + Planet planet1 = sat.getParentPlanet(); + + if (planet1 != null && planet1.equals(planet)) + { + bodyList.add(sat); + } + } + } + + Collections.sort(bodyList); + + return bodyList; + } + + protected List getChildren(Object object) + { + List bodyList = Lists.newArrayList(); + + if (object instanceof Planet) + { + List moons = GalaxyRegistry.getMoonsForPlanet((Planet) object); + bodyList.addAll(moons); + } else if (object instanceof SolarSystem) + { + List planets = GalaxyRegistry.getPlanetsForSolarSystem((SolarSystem) object); + bodyList.addAll(planets); + } + + Collections.sort(bodyList); + + return bodyList; + } + + protected float lerp(float min, float max, float val) + { + return min + val * (max - min); + } + + protected Vector2f lerpVec2(Vector2f v0, Vector2f v1, float t) + { + return new Vector2f(v0.x + t * (v1.x - v0.x), v0.y + t * (v1.y - v0.y)); + } + + protected float getZoomAdvanced() + { + if (this.ticksTotalF < 30) + { + float scale = Math.max(0.0F, Math.min(this.ticksTotalF / 30.0F, 1.0F)); + return this.lerp(-0.75F, 0.0F, (float) Math.pow(scale, 0.5F)); + } + + if (this.selectedBody == null || this.selectionState != EnumSelection.ZOOMED) + { + if (!this.doneZooming) + { + float unselectScale = this.lerp(this.zoom, this.preSelectZoom, Math.max(0.0F, Math.min(this.ticksSinceUnselectionF / 100.0F, 1.0F))); + + if (unselectScale <= this.preSelectZoom + 0.05F) + { + this.zoom = this.preSelectZoom; + this.ticksSinceUnselectionF = -1; + this.doneZooming = true; + } + + return unselectScale; + } + + return this.zoom; + } + + if (!this.doneZooming) + { + float f = this.lerp(this.zoom, 12, Math.max(0.0F, Math.min((this.ticksSinceSelectionF - 20) / 40.0F, 1.0F))); + + if (f >= 11.95F) + { + this.doneZooming = true; + } + + return f; + } + + return 12 + this.planetZoom; + } + + protected Vector2f getTranslationAdvanced(float partialTicks) + { + if (this.selectedBody == null) + { + if (this.ticksSinceUnselectionF > 0) + { + float f0 = Math.max(0.0F, Math.min(this.ticksSinceUnselectionF / 100.0F, 1.0F)); + if (f0 >= 0.999999F) + { + this.ticksSinceUnselectionF = 0; + } + return this.lerpVec2(this.position, this.preSelectPosition, f0); + } + + return new Vector2f(this.position.x + translation.x, this.position.y + translation.y); + } + + if (!this.isZoomed()) + { + if (this.selectedBody instanceof IChildBody) + { + Vector3f posVec = this.getCelestialBodyPosition(((IChildBody) this.selectedBody).getParentPlanet()); + return new Vector2f(posVec.x, posVec.y); + } + + return new Vector2f(this.position.x + translation.x, this.position.y + translation.y); + } + + Vector2f pos = this.position; + + if (this.lastSelectedBody != null) + { + Vector3f pos3 = this.getCelestialBodyPosition(this.lastSelectedBody); + pos.x = pos3.x; + pos.y = pos3.y; + } + + Vector3f posVec = this.getCelestialBodyPosition(this.selectedBody); + return this.lerpVec2(pos, new Vector2f(posVec.x, posVec.y), Math.max(0.0F, Math.min((this.ticksSinceSelectionF - 18) / 7.5F, 1.0F))); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + // Override and do nothing, so it isn't possible to exit the GUI + if (this.mapMode) + { + super.keyTyped(keyChar, keyID); + } + + if (keyID == 1) + { + if (this.selectedBody != null) + { + this.unselectCelestialBody(); + } + } + + if (this.renamingSpaceStation) + { + if (keyID == Keyboard.KEY_BACK) + { + if (this.renamingString != null && this.renamingString.length() > 0) + { + String toBeParsed = this.renamingString.substring(0, this.renamingString.length() - 1); + + if (this.isValid(toBeParsed)) + { + this.renamingString = toBeParsed; + } else + { + this.renamingString = ""; + } + } + } else if (keyChar == 22) + { + String pastestring = GuiScreen.getClipboardString(); + + if (pastestring == null) + { + pastestring = ""; + } + + if (this.isValid(this.renamingString + pastestring)) + { + this.renamingString = this.renamingString + pastestring; + this.renamingString = this.renamingString.substring(0, Math.min(String.valueOf(this.renamingString).length(), MAX_SPACE_STATION_NAME_LENGTH)); + } + } else if (this.isValid(this.renamingString + keyChar)) + { + this.renamingString = this.renamingString + keyChar; + this.renamingString = this.renamingString.substring(0, Math.min(this.renamingString.length(), MAX_SPACE_STATION_NAME_LENGTH)); + } + + return; + } + + // Keyboard shortcut - teleport to dimension by pressing 'Enter' + if (keyID == Keyboard.KEY_RETURN) + { + this.teleportToSelectedBody(); + } + } + + public boolean isValid(String string) + { + return string.length() > 0 && ChatAllowedCharacters.isAllowedCharacter(string.charAt(string.length() - 1)); + + } + + protected boolean canCreateSpaceStation(CelestialBody atBody) + { + if (this.mapMode || ConfigManagerCore.disableSpaceStationCreation || !this.canCreateStations) + { + return false; + } + + if (!atBody.isReachable() || (this.possibleBodies != null && !this.possibleBodies.contains(atBody))) + { + // If parent body is unreachable, the satellite is also unreachable + return false; + } + + boolean foundRecipe = false; + for (SpaceStationType type : GalacticraftRegistry.getSpaceStationData()) + { + if (type.getWorldToOrbitID() == atBody.getDimensionID()) + { + foundRecipe = true; + } + } + + if (!foundRecipe) + { + return false; + } + + if (!ClientProxyCore.clientSpaceStationID.containsKey(atBody.getDimensionID())) + { + return true; + } + + int resultID = ClientProxyCore.clientSpaceStationID.get(atBody.getDimensionID()); + + return !(resultID != 0 && resultID != -1); + } + + protected void unselectCelestialBody() + { + this.selectionState = EnumSelection.UNSELECTED; + this.ticksSinceUnselectionF = 0; + this.lastSelectedBody = this.selectedBody; + this.selectedBody = null; + this.doneZooming = false; + this.selectedStationOwner = ""; + this.animateGrandchildren = 0; + } + + @Override + public void updateScreen() + { + if (this.ticksSinceMenuOpenF < 20) + { + Mouse.setGrabbed(false); + } + + if (!this.renamingSpaceStation && (this.selectedBody == null || !this.isZoomed())) + { + if (GameSettings.isKeyDown(KeyHandlerClient.leftKey)) + { + translation.x += -2.0F; + translation.y += -2.0F; + } + + if (GameSettings.isKeyDown(KeyHandlerClient.rightKey)) + { + translation.x += 2.0F; + translation.y += 2.0F; + } + + if (GameSettings.isKeyDown(KeyHandlerClient.upKey)) + { + translation.x += 2.0F; + translation.y += -2.0F; + } + + if (GameSettings.isKeyDown(KeyHandlerClient.downKey)) + { + translation.x += -2.0F; + translation.y += 2.0F; + } + } + } + + protected void teleportToSelectedBody() + { + if (this.selectedBody != null) + { + if (this.selectedBody.isReachable() && this.possibleBodies != null && this.possibleBodies.contains(this.selectedBody)) + { + try + { + String dimension; + int dimensionID; + + if (this.selectedBody instanceof Satellite) + { + if (this.spaceStationMap == null) + { + GalacticraftCore.logger.error("Please report as a BUG: spaceStationIDs was null."); + return; + } + Satellite selectedSatellite = (Satellite) this.selectedBody; + Integer mapping = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(this.selectedStationOwner).getStationDimensionID(); + // No need to check lowercase as selectedStationOwner is + // taken from keys. + if (mapping == null) + { + GalacticraftCore.logger.error("Problem matching player name in space station check: " + this.selectedStationOwner); + return; + } + dimensionID = mapping; + WorldProvider spacestation = WorldUtil.getProviderForDimensionClient(dimensionID); + if (spacestation != null) + { + dimension = "Space Station " + mapping; + } else + { + GalacticraftCore.logger.error("Failed to find a spacestation with dimension " + dimensionID); + return; + } + } else + { + dimensionID = this.selectedBody.getDimensionID(); + dimension = WorldUtil.getDimensionName(WorldUtil.getProviderForDimensionClient(dimensionID)); + } + + if (dimension.contains("$")) + { + this.mc.gameSettings.thirdPersonView = 0; + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_TELEPORT_ENTITY, GCCoreUtil.getDimensionID(mc.world), new Object[] {dimensionID})); + + if (dimensionID == 666) + { + mc.displayGuiScreen(new CFPage()); + } else + { + mc.displayGuiScreen(new GuiTeleporting(dimensionID)); + } + + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + + @Override + public void handleInput() throws IOException + { + this.translation.x = 0; + this.translation.y = 0; + super.handleInput(); + } + + @Override + protected void mouseClickMove(int x, int y, int lastButtonClicked, long timeSinceMouseClick) + { + super.mouseClickMove(x, y, lastButtonClicked, timeSinceMouseClick); + + if (mouseDragging && lastMovePosX != -1 && lastButtonClicked == 0) + { + int deltaX = x - lastMovePosX; + int deltaY = y - lastMovePosY; + float scollMultiplier = -Math.abs(this.zoom); + + if (this.zoom == -1.0F) + { + scollMultiplier = -1.5F; + } + + if (this.zoom >= -0.25F && this.zoom <= 0.15F) + { + scollMultiplier = -0.2F; + } + + if (this.zoom >= 0.15F) + { + scollMultiplier = -0.15F; + } + + translation.x += (deltaX - deltaY) * scollMultiplier * (ConfigManagerCore.invertMapMouseScroll ? -1.0F : 1.0F) * ConfigManagerCore.mapMouseScrollSensitivity * 0.2F; + translation.y += (deltaY + deltaX) * scollMultiplier * (ConfigManagerCore.invertMapMouseScroll ? -1.0F : 1.0F) * ConfigManagerCore.mapMouseScrollSensitivity * 0.2F; + } + + lastMovePosX = x; + lastMovePosY = y; + } + + @Override + protected void mouseReleased(int x, int y, int button) + { + super.mouseReleased(x, y, button); + + mouseDragging = false; + lastMovePosX = -1; + lastMovePosY = -1; + } + + @Override + protected void mouseClicked(int x, int y, int button) throws IOException + { + super.mouseClicked(x, y, button); + boolean clickHandled = false; + + final int LHS = GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE; + final int RHS = width - LHS; + final int TOP = LHS; + + if (this.selectedBody != null && x > LHS && x < LHS + 88 && y > TOP && y < TOP + 13) + { + this.unselectCelestialBody(); + return; + } + + if (!this.mapMode) + { + if (x >= RHS - 95 && x < RHS && y > TOP + 181 + canCreateOffset && y < TOP + 182 + 12 + canCreateOffset) + { + if (this.selectedBody != null) + { + SpaceStationRecipe recipe = WorldUtil.getSpaceStationRecipe(this.selectedBody.getDimensionID()); + if (recipe != null && this.canCreateSpaceStation(this.selectedBody)) + { + if (recipe.matches(this.mc.player, false) || this.mc.player.capabilities.isCreativeMode) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_BIND_SPACE_STATION_ID, GCCoreUtil.getDimensionID(this.mc.world), new Object[] {this.selectedBody.getDimensionID()})); + // Zoom in on Overworld to show the new SpaceStation + // if not already zoomed + if (!this.isZoomed()) + { + this.selectionState = EnumSelection.ZOOMED; + this.preSelectZoom = this.zoom; + this.preSelectPosition = this.position; + this.ticksSinceSelectionF = 0; + this.doneZooming = false; + } + return; + } + + clickHandled = true; + } + } + } + } + + if (this.mapMode) + { + if (x > RHS - 88 && x < RHS && y > TOP && y < TOP + 13) + { + this.mc.displayGuiScreen(null); + this.mc.setIngameFocus(); + clickHandled = true; + } + } + + if (this.selectedBody != null && !this.mapMode) + { + if (x > RHS - 88 && x < RHS && y > TOP && y < TOP + 13) + { + if (!(this.selectedBody instanceof Satellite) || !this.selectedStationOwner.equals("")) + { + this.teleportToSelectedBody(); + } + + clickHandled = true; + } + } + + // Need unscaled mouse coords + int mouseX = Mouse.getX(); + int mouseY = Mouse.getY() * -1 + Minecraft.getMinecraft().displayHeight - 1; + + if (this.selectedBody instanceof Satellite) + { + if (this.renamingSpaceStation) + { + if (x >= width / 2 - 90 && x <= width / 2 + 90 && y >= this.height / 2 - 38 && y <= this.height / 2 + 38) + { + // Apply + if (x >= width / 2 - 90 + 17 && x <= width / 2 - 90 + 17 + 72 && y >= this.height / 2 - 38 + 59 && y <= this.height / 2 - 38 + 59 + 12) + { + String strName = PlayerUtil.getName(this.mc.player); + Satellite selectedSatellite = (Satellite) this.selectedBody; + Integer spacestationID = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(strName).getStationDimensionID(); + if (spacestationID == null) + { + spacestationID = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(strName.toLowerCase()).getStationDimensionID(); + } + if (spacestationID != null) + { + this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(strName).setStationName(this.renamingString); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_RENAME_SPACE_STATION, GCCoreUtil.getDimensionID(this.mc.world), new Object[] {this.renamingString, spacestationID})); + } + this.renamingSpaceStation = false; + } + // Cancel + if (x >= width / 2 && x <= width / 2 + 72 && y >= this.height / 2 - 38 + 59 && y <= this.height / 2 - 38 + 59 + 12) + { + this.renamingSpaceStation = false; + } + clickHandled = true; + } + } else + { + this.drawTexturedModalRect(width / 2 - 47, TOP, 94, 11, 0, 414, 188, 22, false, false); + + if (x >= width / 2 - 47 && x <= width / 2 - 47 + 94 && y >= TOP && y <= TOP + 11) + { + if (this.selectedStationOwner.length() != 0 && this.selectedStationOwner.equalsIgnoreCase(PlayerUtil.getName(this.mc.player))) + { + this.renamingSpaceStation = true; + this.renamingString = null; + clickHandled = true; + } + } + + Satellite selectedSatellite = (Satellite) this.selectedBody; + int stationListSize = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).size(); + int max = Math.min((this.height / 2) / 14, stationListSize); + + int xPos; + int yPos; + + // Up button + xPos = RHS - 85; + yPos = TOP + 45; + + if (x >= xPos && x <= xPos + 61 && y >= yPos && y <= yPos + 4) + { + if (this.spaceStationListOffset > 0) + { + this.spaceStationListOffset--; + } + clickHandled = true; + } + + // Down button + xPos = RHS - 85; + yPos = TOP + 49 + max * 14; + + if (x >= xPos && x <= xPos + 61 && y >= yPos && y <= yPos + 4) + { + if (max + spaceStationListOffset < stationListSize) + { + this.spaceStationListOffset++; + } + clickHandled = true; + } + + Iterator> it = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).entrySet().iterator(); + int i = 0; + int j = 0; + while (it.hasNext() && i < max) + { + Map.Entry e = it.next(); + if (j >= this.spaceStationListOffset) + { + int xOffset = 0; + + if (e.getKey().equalsIgnoreCase(this.selectedStationOwner)) + { + xOffset -= 5; + } + + xPos = RHS - 95 + xOffset; + yPos = TOP + 50 + i * 14; + + if (x >= xPos && x <= xPos + 93 && y >= yPos && y <= yPos + 12) + { + this.selectedStationOwner = e.getKey(); + clickHandled = true; + } + i++; + } + j++; + } + } + } + + int xPos = LHS + 2; + int yPos = TOP + 10; + + boolean planetZoomedMoon = this.isZoomed() && this.selectedParent instanceof Planet; + + // Top yellow button e.g. Sol + if (x >= xPos && x <= xPos + 93 && y >= yPos && y <= yPos + 12 && this.selectedParent instanceof CelestialBody) + { + if (this.selectedBody == null) + { + this.preSelectZoom = this.zoom; + this.preSelectPosition = this.position; + } + + EnumSelection selectionCountOld = this.selectionState; + + if (this.isSelected()) + { + this.unselectCelestialBody(); + } + + if (selectionCountOld == EnumSelection.ZOOMED) + { + this.selectionState = EnumSelection.SELECTED; + } + + this.selectedBody = (CelestialBody) this.selectedParent; + this.ticksSinceSelectionF = 0; + this.selectionState = EnumSelection.values()[this.selectionState.ordinal() + 1]; + if (this.isZoomed() && !planetZoomedMoon) + { + this.ticksSinceMenuOpenF = 0; + } + clickHandled = true; + } + + yPos += 22; + + // First blue button - normally the Selected Body (but it's the parent + // planet if this is a moon) + if (x >= xPos && x <= xPos + 93 && y >= yPos && y <= yPos + 12) + { + if (planetZoomedMoon) + { + if (this.selectedBody == null) + { + this.preSelectZoom = this.zoom; + this.preSelectPosition = this.position; + } + + EnumSelection selectionCountOld = this.selectionState; + if (this.isSelected()) + { + this.unselectCelestialBody(); + } + if (selectionCountOld == EnumSelection.ZOOMED) + { + this.selectionState = EnumSelection.SELECTED; + } + + this.selectedBody = (CelestialBody) this.selectedParent; + this.ticksSinceSelectionF = 0; + this.selectionState = EnumSelection.values()[this.selectionState.ordinal() + 1]; + } + clickHandled = true; + } + + if (!clickHandled) + { + List children = this.getChildren(this.isZoomed() && !(this.selectedParent instanceof Planet) ? this.selectedBody : this.selectedParent); + + yPos = TOP + 50; + for (CelestialBody child : children) + { + clickHandled = this.testClicked(child, child.equals(this.selectedBody) ? 5 : 0, yPos, x, y, false); + yPos += 14; + + if (!clickHandled && !this.isZoomed() && child.equals(this.selectedBody)) + { + List grandchildren = this.getChildren(child); + int gOffset = 0; + for (CelestialBody grandchild : grandchildren) + { + if (gOffset + 14 > this.animateGrandchildren) + { + break; + } + clickHandled = this.testClicked(grandchild, 10, yPos, x, y, true); + yPos += 14; + gOffset += 14; + if (clickHandled) + break; + } + yPos += this.animateGrandchildren - gOffset; + } + + if (clickHandled) + break; + } + } + + if (!clickHandled) + { + for (Map.Entry e : this.planetPosMap.entrySet()) + { + CelestialBody bodyClicked = e.getKey(); + if (this.selectedBody == null && bodyClicked instanceof IChildBody) + { + continue; + } + + float iconSize = e.getValue().z; // Z value holds size on-screen + + if (mouseX >= e.getValue().x - iconSize && mouseX <= e.getValue().x + iconSize && mouseY >= e.getValue().y - iconSize && mouseY <= e.getValue().y + iconSize) + { + if (this.selectedBody != bodyClicked || !this.isZoomed()) + { + if (this.isSelected() && this.selectedBody != bodyClicked) + { + + if (!(this.selectedBody instanceof IChildBody) || ((IChildBody) this.selectedBody).getParentPlanet() != bodyClicked) + { + this.unselectCelestialBody(); + } else if (this.isZoomed()) + { + this.selectionState = EnumSelection.SELECTED; + } + } + + if (bodyClicked != this.selectedBody) + { + this.lastSelectedBody = this.selectedBody; + this.animateGrandchildren = 0; + if (!(this.selectedBody instanceof IChildBody) || ((IChildBody) this.selectedBody).getParentPlanet() != bodyClicked) + { + // Only unzoom if the new selected body is not + // the child of the previously selected body + this.selectionState = EnumSelection.UNSELECTED; + } + } else + { + this.doneZooming = false; + this.planetZoom = 0.0F; + } + + this.selectedBody = bodyClicked; + this.ticksSinceSelectionF = 0; + this.selectionState = EnumSelection.values()[this.selectionState.ordinal() + 1]; + + if (bodyClicked instanceof IChildBody) + { + this.selectionState = EnumSelection.ZOOMED; + } + + if (this.isZoomed()) + { + this.ticksSinceMenuOpenF = 0; + } + + // Auto select if it's a spacestation and there is only + // a single entry + if (this.selectedBody instanceof Satellite && this.spaceStationMap.get(this.getSatelliteParentID((Satellite) this.selectedBody)).size() == 1) + { + Iterator> it = this.spaceStationMap.get(this.getSatelliteParentID((Satellite) this.selectedBody)).entrySet().iterator(); + this.selectedStationOwner = it.next().getKey(); + } + + clickHandled = true; + break; + } + } + } + } + + if (!clickHandled) + { + if (this.selectedBody != null) + { + this.unselectCelestialBody(); + this.planetZoom = 0.0F; + } + + mouseDragging = true; + } + + Object selectedParent = this.selectedParent; + + if (this.selectedBody instanceof IChildBody) + { + selectedParent = ((IChildBody) this.selectedBody).getParentPlanet(); + } else if (this.selectedBody instanceof Planet) + { + selectedParent = ((Planet) this.selectedBody).getParentSolarSystem(); + } else if (this.selectedBody == null) + { + selectedParent = GalacticraftCore.solarSystemSol; + } + + if (this.selectedParent != selectedParent) + { + this.selectedParent = selectedParent; + } + } + + protected boolean testClicked(CelestialBody body, int xOffset, int yPos, int x, int y, boolean grandchild) + { + int xPos = GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE + 2 + xOffset; + if (x >= xPos && x <= xPos + 93 && y >= yPos && y <= yPos + 12) + { + if (this.selectedBody != body || !this.isZoomed()) + { + if (this.selectedBody == null) + { + this.preSelectZoom = this.zoom; + this.preSelectPosition = this.position; + } + + EnumSelection selectionCountOld = this.selectionState; + + if (selectionCountOld == EnumSelection.ZOOMED) + { + this.selectionState = EnumSelection.SELECTED; + } + + this.doneZooming = false; + this.planetZoom = 0.0F; + + if (body != this.selectedBody) + { + // Selecting a different body + this.lastSelectedBody = this.selectedBody; + this.selectionState = EnumSelection.SELECTED; + } else + { + // Selecting the same body e.g. double-clicking + this.selectionState = EnumSelection.values()[this.selectionState.ordinal() + 1]; + } + + this.selectedBody = body; + this.ticksSinceSelectionF = 0; + if (grandchild) + this.selectionState = EnumSelection.ZOOMED; + if (this.isZoomed()) + { + this.ticksSinceMenuOpenF = 0; + } + this.animateGrandchildren = 0; + return true; + } + } + return false; + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + public void drawScreen(int mousePosX, int mousePosY, float partialTicks) + { + this.ticksSinceMenuOpenF += partialTicks; + this.ticksTotalF += partialTicks; + + if (this.selectedBody != null) + { + this.ticksSinceSelectionF += partialTicks; + } + + if (this.selectedBody == null && this.ticksSinceUnselectionF >= 0) + { + this.ticksSinceUnselectionF += partialTicks; + } + + if (Mouse.hasWheel()) + { + float wheel = Mouse.getDWheel() / (this.selectedBody == null ? 500.0F : 250.0F); + + if (wheel != 0) + { + if (this.selectedBody == null || (this.viewState == EnumView.PREVIEW && !this.isZoomed())) + { + // Minimum zoom increased from 0.55F to 1F to allow zoom out + // to see other solar systems + this.zoom = Math.min(Math.max(this.zoom + wheel * ((this.zoom + 2.0F)) / 10.0F, -1.0F), 3); + } else + { + this.planetZoom = Math.min(Math.max(this.planetZoom + wheel, -4.9F), 5); + } + } + } + + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_BLEND); + + Matrix4f camMatrix = new Matrix4f(); + Matrix4f.translate(new Vector3f(0.0F, 0.0F, -9000.0F), camMatrix, camMatrix); // See + // EntityRenderer.java:setupOverlayRendering + Matrix4f viewMatrix = new Matrix4f(); + viewMatrix.m00 = 2.0F / width; + viewMatrix.m11 = 2.0F / -height; + viewMatrix.m22 = -2.0F / 9000.0F; + viewMatrix.m30 = -1.0F; + viewMatrix.m31 = 1.0F; + viewMatrix.m32 = -2.0F; + + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + FloatBuffer fb = BufferUtils.createFloatBuffer(16 * Float.SIZE); + fb.rewind(); + viewMatrix.store(fb); + fb.flip(); + GL11.glMultMatrix(fb); + fb.clear(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + fb.rewind(); + camMatrix.store(fb); + fb.flip(); + fb.clear(); + GL11.glMultMatrix(fb); + + this.setBlackBackground(); + + GL11.glPushMatrix(); + Matrix4f worldMatrix = this.setIsometric(partialTicks); + float gridSize = 7000F; // 194.4F; + // TODO: Add dynamic map sizing, to allow the map to be small by default + // and expand when more distant solar systems are added. + this.drawGrid(gridSize, height / 3 / 3.5F); + this.drawCircles(); + GL11.glPopMatrix(); + + HashMap matrixMap = this.drawCelestialBodies(worldMatrix); + + this.planetPosMap.clear(); + + for (Map.Entry e : matrixMap.entrySet()) + { + Matrix4f planetMatrix = e.getValue(); + Matrix4f matrix0 = Matrix4f.mul(viewMatrix, planetMatrix, planetMatrix); + int x = (int) Math.floor((matrix0.m30 * 0.5 + 0.5) * Minecraft.getMinecraft().displayWidth); + int y = (int) Math.floor(Minecraft.getMinecraft().displayHeight - (matrix0.m31 * 0.5 + 0.5) * Minecraft.getMinecraft().displayHeight); + Vector2f vec = new Vector2f(x, y); + + Matrix4f scaleVec = new Matrix4f(); + scaleVec.m00 = matrix0.m00; + scaleVec.m11 = matrix0.m11; + scaleVec.m22 = matrix0.m22; + Vector4f newVec = Matrix4f.transform(scaleVec, new Vector4f(2, -2, 0, 0), null); + float iconSize = (newVec.y * (Minecraft.getMinecraft().displayHeight / 2.0F)) * (e.getKey() instanceof Star ? 2 : 1) * (e.getKey() == this.selectedBody ? 1.5F : 1.0F); + + this.planetPosMap.put(e.getKey(), new Vector3f(vec.x, vec.y, iconSize)); // Store + // size + // on-screen + // in + // Z-value + // for + // ease + } + + this.drawSelectionCursor(fb, worldMatrix); + + try + { + this.drawButtons(mousePosX, mousePosY); + } catch (Exception e) + { + if (!this.errorLogged) + { + this.errorLogged = true; + GalacticraftCore.logger.error("Problem identifying planet or dimension in an add on for Galacticraft!"); + GalacticraftCore.logger.error("(The problem is likely caused by a dimension ID conflict. Check configs for dimension clashes. You can also try disabling Mars space station in configs.)"); + e.printStackTrace(); + } + } + + this.drawBorder(); + GL11.glPopMatrix(); + + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + } + + protected void drawSelectionCursor(FloatBuffer fb, Matrix4f worldMatrix) + { + GL11.glPushMatrix(); + switch (this.selectionState) + { + case SELECTED: + if (this.selectedBody != null) + { + setupMatrix(this.selectedBody, worldMatrix, fb); + fb.clear(); + GL11.glScalef(1 / 15.0F, 1 / 15.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + float colMod = this.getZoomAdvanced() < 4.9F ? (float) (Math.sin(this.ticksSinceSelectionF / 2.0F) * 0.5F + 0.5F) : 1.0F; + GL11.glColor4f(1.0F, 1.0F, 0.0F, 1 * colMod); + int width = (int) Math.floor((getWidthForCelestialBody(this.selectedBody) / 2.0) * (this.selectedBody instanceof IChildBody ? 9.0 : 30.0)); + + this.drawTexturedModalRect(-width, -width, width * 2, width * 2, 266, 29, 100, 100, false, false); + } + break; + case ZOOMED: + if (this.selectedBody != null) + { + setupMatrix(this.selectedBody, worldMatrix, fb); + fb.clear(); + float div = (this.zoom + 1.0F - this.planetZoom); + float scale = Math.max(0.3F, 1.5F / (this.ticksSinceSelectionF / 5.0F)) * 2.0F / div; + GL11.glScalef(scale, scale, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + float colMod = this.getZoomAdvanced() < 4.9F ? (float) (Math.sin(this.ticksSinceSelectionF / 1.0F) * 0.5F + 0.5F) : 1.0F; + GL11.glColor4f(0.4F, 0.8F, 1.0F, 1 * colMod); + int width = getWidthForCelestialBody(this.selectedBody) * 13; + this.drawTexturedModalRect(-width, -width, width * 2, width * 2, 266, 29, 100, 100, false, false); + } + break; + default: + break; + } + GL11.glPopMatrix(); + } + + protected Vector3f getCelestialBodyPosition(CelestialBody cBody) + { + if (cBody == null) + return new Vector3f(0.0F, 0.0F, 0.0F); + if (cBody instanceof Star) + { + if (cBody.getTranslationKey().equalsIgnoreCase("star.sol")) + // Return zero vector for Sol, different location for other solar + // systems + { + return new Vector3f(); + } + return ((Star) cBody).getParentSolarSystem().getMapPosition().toVector3f(); + } + + float timeScale = cBody instanceof Planet ? 200.0F : 2.0F; + float distanceFromCenter = this.getScale(cBody); + Vector3f cBodyPos = new Vector3f((float) Math.sin(ticksTotalF / (timeScale * cBody.getRelativeOrbitTime()) + cBody.getPhaseShift()) * distanceFromCenter, (float) Math.cos(ticksTotalF / (timeScale * cBody.getRelativeOrbitTime()) + cBody.getPhaseShift()) * distanceFromCenter, 0); + + if (cBody instanceof Planet) + { + Vector3f parentVec = this.getCelestialBodyPosition(((Planet) cBody).getParentSolarSystem().getMainStar()); + return Vector3f.add(cBodyPos, parentVec, null); + } + + if (cBody instanceof IChildBody) + { + Vector3f parentVec = this.getCelestialBodyPosition(((IChildBody) cBody).getParentPlanet()); + return Vector3f.add(cBodyPos, parentVec, null); + } + + return cBodyPos; + } + + public int getWidthForCelestialBody(CelestialBody celestialBody) + { + boolean zoomed = celestialBody == this.selectedBody && this.selectionState == EnumSelection.SELECTED; + return celestialBody instanceof Star ? (zoomed ? 12 : 8) : celestialBody instanceof Planet ? (zoomed ? 6 : 4) : celestialBody instanceof IChildBody ? (zoomed ? 6 : 4) : 2; + } + + // public int getWidthForCelestialBody(CelestialBody celestialBody) + // { + // float size = celestialBody.getRelativeSize(); + // boolean zoomed = celestialBody == this.selectedBody && this.selectionState == EnumSelection.SELECTED; + // if (celestialBody instanceof Star) + // { + // return (int) (zoomed ? (12 * size) : (8 * size)); + // } else if (celestialBody instanceof Planet) + // { + // return (int) (zoomed ? (6 * size) : (4 * size)); + // } else if (celestialBody instanceof IChildBody) + // { + // return (int) (zoomed ? (6 * size) : (4 * size)); + // } else + // { + // return 2; + // } + // } + + public HashMap drawCelestialBodies(Matrix4f worldMatrix) + { + GL11.glColor3f(1.0F, 1.0F, 1.0F); + FloatBuffer fb = BufferUtils.createFloatBuffer(16 * Float.SIZE); + HashMap matrixMap = Maps.newHashMap(); + + for (CelestialBody body : bodiesToRender) + { + boolean hasParent = body instanceof IChildBody; + + float alpha = getAlpha(body); + + if (alpha > 0.0F) + { + GlStateManager.pushMatrix(); + Matrix4f worldMatrixLocal = setupMatrix(body, worldMatrix, fb, hasParent ? 0.25F : 1.0F); + CelestialBodyRenderEvent.Pre preEvent = new CelestialBodyRenderEvent.Pre(body, body.getBodyIcon(), 16); + MinecraftForge.EVENT_BUS.post(preEvent); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, alpha); + if (preEvent.celestialBodyTexture != null) + { + this.mc.renderEngine.bindTexture(preEvent.celestialBodyTexture); + } + + if (!preEvent.isCanceled()) + { + int size = getWidthForCelestialBody(body); + this.drawTexturedModalRect(-size / 2, -size / 2, size, size, 0, 0, preEvent.textureSize, preEvent.textureSize, false, false, preEvent.textureSize, preEvent.textureSize); + matrixMap.put(body, worldMatrixLocal); + } + + CelestialBodyRenderEvent.Post postEvent = new CelestialBodyRenderEvent.Post(body); + MinecraftForge.EVENT_BUS.post(postEvent); + GlStateManager.popMatrix(); + } + } + + return matrixMap; + } + + /** + * Draws gray border around outside of gui + */ + public void drawBorder() + { + Gui.drawRect(0, 0, GuiCelestialSelection.BORDER_SIZE, height, GREY2); + Gui.drawRect(width - GuiCelestialSelection.BORDER_SIZE, 0, width, height, GREY2); + Gui.drawRect(0, 0, width, GuiCelestialSelection.BORDER_SIZE, GREY2); + Gui.drawRect(0, height - GuiCelestialSelection.BORDER_SIZE, width, height, GREY2); + Gui.drawRect(GuiCelestialSelection.BORDER_SIZE, GuiCelestialSelection.BORDER_SIZE, GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE, height - GuiCelestialSelection.BORDER_SIZE, GREY0); + Gui.drawRect(GuiCelestialSelection.BORDER_SIZE, GuiCelestialSelection.BORDER_SIZE, width - GuiCelestialSelection.BORDER_SIZE, GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE, GREY0); + Gui.drawRect(width - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE, GuiCelestialSelection.BORDER_SIZE, width - GuiCelestialSelection.BORDER_SIZE, height - GuiCelestialSelection.BORDER_SIZE, GREY1); + Gui.drawRect(GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE, width - GuiCelestialSelection.BORDER_SIZE, height - GuiCelestialSelection.BORDER_SIZE, GREY1); + } + + public void drawButtons(int mousePosX, int mousePosY) + { + this.zLevel = 0.0F; + boolean handledSliderPos = false; + + final int LHS = GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE; + final int RHS = width - LHS; + final int TOP = LHS; + final int BOT = height - LHS; + + if (this.viewState == EnumView.PROFILE) + { + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(width / 2 - 43, TOP, 86, 15, 266, 0, 172, 29, false, false); + String str = GCCoreUtil.translate("gui.message.catalog.name").toUpperCase(); + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2, TOP + this.fontRenderer.FONT_HEIGHT / 2, WHITE); + + if (this.selectedBody != null) + { + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + + if (mousePosX > LHS && mousePosX < LHS + 88 && mousePosY > TOP && mousePosY < TOP + 13) + { + GL11.glColor3f(3.0F, 0.0F, 0.0F); + } else + { + GL11.glColor3f(0.9F, 0.2F, 0.2F); + } + + this.drawTexturedModalRect(LHS, TOP, 88, 13, 0, 392, 148, 22, false, false); + str = GCCoreUtil.translate("gui.message.back.name").toUpperCase(); + this.fontRenderer.drawString(str, LHS + 45 - this.fontRenderer.getStringWidth(str) / 2, TOP + this.fontRenderer.FONT_HEIGHT / 2 - 2, WHITE); + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + if (mousePosX > RHS - 88 && mousePosX < RHS && mousePosY > TOP && mousePosY < TOP + 13) + { + GL11.glColor3f(0.0F, 3.0F, 0.0F); + } else + { + GL11.glColor3f(0.2F, 0.9F, 0.2F); + } + + this.drawTexturedModalRect(RHS - 88, TOP, 88, 13, 0, 392, 148, 22, true, false); + + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(LHS, BOT - 13, 88, 13, 0, 392, 148, 22, false, true); + this.drawTexturedModalRect(RHS - 88, BOT - 13, 88, 13, 0, 392, 148, 22, true, true); + int menuTopLeft = TOP - 115 + height / 2 - 4; + int posX = LHS + Math.min((int) this.ticksSinceSelectionF * 10, 133) - 134; + int posX2 = (int) (LHS + Math.min(this.ticksSinceSelectionF * 1.25F, 15) - 15); + int fontPosY = menuTopLeft + GuiCelestialSelection.BORDER_EDGE_SIZE + this.fontRenderer.FONT_HEIGHT / 2 - 2; + this.drawTexturedModalRect(posX, menuTopLeft + 12, 133, 196, 0, 0, 266, 392, false, false); + + str = GCCoreUtil.translate("gui.message.daynightcycle.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 14, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".daynightcycle.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 25, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".daynightcycle.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 36, WHITE); + } + + str = GCCoreUtil.translate("gui.message.surfacegravity.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 50, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".surfacegravity.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 61, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".surfacegravity.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 72, WHITE); + } + + str = GCCoreUtil.translate("gui.message.surfacecomposition.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 88, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".surfacecomposition.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 99, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".surfacecomposition.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 110, WHITE); + } + + str = GCCoreUtil.translate("gui.message.atmosphere.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 126, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".atmosphere.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 137, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".atmosphere.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 148, WHITE); + } + + str = GCCoreUtil.translate("gui.message.meansurfacetemp.name") + ":"; + this.fontRenderer.drawString(str, posX + 5, fontPosY + 165, CYAN); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".meansurfacetemp.0.name"); + this.fontRenderer.drawString(str, posX + 10, fontPosY + 176, WHITE); + str = GCCoreUtil.translate("gui.message." + this.selectedBody.getName() + ".meansurfacetemp.1.name"); + if (!str.isEmpty()) + { + this.fontRenderer.drawString(str, posX + 10, fontPosY + 187, WHITE); + } + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(posX2, menuTopLeft + 12, 17, 199, 439, 0, 32, 399, false, false); + } + } else + { + String str; + // Catalog: + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(LHS, TOP, 74, 11, 0, 392, 148, 22, false, false); + str = GCCoreUtil.translate("gui.message.catalog.name").toUpperCase(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, LHS + 40 - fontRenderer.getStringWidth(str) / 2, TOP + 1, WHITE); + + int scale = (int) Math.min(95, this.ticksSinceMenuOpenF * 12.0F); + boolean planetZoomedNotMoon = this.isZoomed() && !(this.selectedParent instanceof Planet); + + // Parent frame: + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + this.drawTexturedModalRect(LHS - 95 + scale, TOP + 12, 95, 41, 0, 436, 95, 41, false, false); + str = planetZoomedNotMoon ? this.selectedBody.getTranslatedName() : this.getParentName(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, LHS + 9 - 95 + scale, TOP + 34, WHITE); + GL11.glColor4f(1, 1, 0, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + + // Grandparent frame: + this.drawTexturedModalRect(LHS + 2 - 95 + scale, TOP + 14, 93, 17, 95, 436, 93, 17, false, false); + str = planetZoomedNotMoon ? this.getParentName() : this.getGrandparentName(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, LHS + 7 - 95 + scale, TOP + 16, GREY3); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + + List children = this.getChildren(planetZoomedNotMoon ? this.selectedBody : this.selectedParent); + drawChildren(children, 0, 0, true); + + if (this.mapMode) + { + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + this.drawTexturedModalRect(RHS - 74, TOP, 74, 11, 0, 392, 148, 22, true, false); + str = GCCoreUtil.translate("gui.message.exit.name").toUpperCase(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, RHS - 40 - fontRenderer.getStringWidth(str) / 2, TOP + 1, WHITE); + } + + if (this.selectedBody != null) + { + // Right-hand bar (basic selectionState info) + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + + if (this.selectedBody instanceof Satellite) + { + Satellite selectedSatellite = (Satellite) this.selectedBody; + int stationListSize = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).size(); + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + int max = Math.min((this.height / 2) / 14, stationListSize); + this.drawTexturedModalRect(RHS - 95, TOP, 95, 53, this.selectedStationOwner.length() == 0 ? 95 : 0, 186, 95, 53, false, false); + if (this.spaceStationListOffset <= 0) + { + GL11.glColor4f(0.65F, 0.65F, 0.65F, 1); + } else + { + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + } + this.drawTexturedModalRect(RHS - 85, TOP + 45, 61, 4, 0, 239, 61, 4, false, false); + if (max + spaceStationListOffset >= stationListSize) + { + GL11.glColor4f(0.65F, 0.65F, 0.65F, 1); + } else + { + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + } + this.drawTexturedModalRect(RHS - 85, TOP + 49 + max * 14, 61, 4, 0, 239, 61, 4, false, true); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + + if (this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(this.selectedStationOwner) == null) + { + str = GCCoreUtil.translate("gui.message.select_ss.name"); + this.drawSplitString(str, RHS - 47, TOP + 20, 91, WHITE, false, false); + } else + { + str = GCCoreUtil.translate("gui.message.ss_owner.name"); + this.fontRenderer.drawString(str, RHS - 85, TOP + 18, WHITE); + str = this.selectedStationOwner; + this.fontRenderer.drawString(str, RHS - 47 - this.fontRenderer.getStringWidth(str) / 2, TOP + 30, WHITE); + } + + Iterator> it = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).entrySet().iterator(); + int i = 0; + int j = 0; + while (it.hasNext() && i < max) + { + Map.Entry e = it.next(); + + if (j >= this.spaceStationListOffset) + { + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + int xOffset = 0; + + if (e.getKey().equalsIgnoreCase(this.selectedStationOwner)) + { + xOffset -= 5; + } + + this.drawTexturedModalRect(RHS - 95 + xOffset, TOP + 50 + i * 14, 93, 12, 95, 464, 93, 12, true, false); + str = ""; + String str0 = e.getValue().getStationName(); + int point = 0; + while (this.fontRenderer.getStringWidth(str) < 80 && point < str0.length()) + { + str = str + str0.substring(point, point + 1); + point++; + } + if (this.fontRenderer.getStringWidth(str) >= 80) + { + str = str.substring(0, str.length() - 3); + str = str + "..."; + } + this.fontRenderer.drawString(str, RHS - 88 + xOffset, TOP + 52 + i * 14, WHITE); + i++; + } + j++; + } + } else + { + this.drawTexturedModalRect(RHS - 96, TOP, 96, 139, 63, 0, 96, 139, false, false); + } + + if (this.canCreateSpaceStation(this.selectedBody) && (!(this.selectedBody instanceof Satellite))) + { + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + int canCreateLength = Math.max(0, this.drawSplitString(GCCoreUtil.translate("gui.message.can_create_space_station.name"), 0, 0, 91, 0, true, true) - 2); + canCreateOffset = canCreateLength * this.fontRenderer.FONT_HEIGHT; + + this.drawTexturedModalRect(RHS - 95, TOP + 134, 93, 4, 159, 102, 93, 4, false, false); + for (int barY = 0; barY < canCreateLength; ++barY) + { + this.drawTexturedModalRect(RHS - 95, TOP + 138 + barY * this.fontRenderer.FONT_HEIGHT, 93, this.fontRenderer.FONT_HEIGHT, 159, 106, 93, this.fontRenderer.FONT_HEIGHT, false, false); + } + this.drawTexturedModalRect(RHS - 95, TOP + 138 + canCreateOffset, 93, 43, 159, 106, 93, 43, false, false); + this.drawTexturedModalRect(RHS - 79, TOP + 129, 61, 4, 0, 170, 61, 4, false, false); + + SpaceStationRecipe recipe = WorldUtil.getSpaceStationRecipe(this.selectedBody.getDimensionID()); + if (recipe != null) + { + GL11.glColor4f(0.0F, 1.0F, 0.1F, 1); + boolean validInputMaterials = true; + + int i = 0; + for (Map.Entry e : recipe.getInput().entrySet()) + { + Object next = e.getKey(); + int xPos = (int) (RHS - 95 + i * 93 / (double) recipe.getInput().size() + 5); + int yPos = TOP + 154 + canCreateOffset; + + if (next instanceof ItemStack) + { + int amount = getAmountInInventory((ItemStack) next); + RenderHelper.enableGUIStandardItemLighting(); + ItemStack toRender = ((ItemStack) next).copy(); + this.itemRender.renderItemAndEffectIntoGUI(toRender, xPos, yPos); + this.itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, toRender, xPos, yPos, null); + RenderHelper.disableStandardItemLighting(); + GL11.glEnable(GL11.GL_BLEND); + + if (mousePosX >= xPos && mousePosX <= xPos + 16 && mousePosY >= yPos && mousePosY <= yPos + 16) + { + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glPushMatrix(); + GL11.glTranslatef(0, 0, 300); + int k = this.fontRenderer.getStringWidth(((ItemStack) next).getDisplayName()); + int j2 = mousePosX - k / 2; + int k2 = mousePosY - 12; + int i1 = 8; + + if (j2 + k > this.width) + { + j2 -= (j2 - this.width + k); + } + + if (k2 + i1 + 6 > this.height) + { + k2 = this.height - i1 - 6; + } + + int j1 = ColorUtil.to32BitColor(190, 0, 153, 255); + this.drawGradientRect(j2 - 3, k2 - 4, j2 + k + 3, k2 - 3, j1, j1); + this.drawGradientRect(j2 - 3, k2 + i1 + 3, j2 + k + 3, k2 + i1 + 4, j1, j1); + this.drawGradientRect(j2 - 3, k2 - 3, j2 + k + 3, k2 + i1 + 3, j1, j1); + this.drawGradientRect(j2 - 4, k2 - 3, j2 - 3, k2 + i1 + 3, j1, j1); + this.drawGradientRect(j2 + k + 3, k2 - 3, j2 + k + 4, k2 + i1 + 3, j1, j1); + int k1 = ColorUtil.to32BitColor(170, 0, 153, 255); + int l1 = (k1 & 16711422) >> 1 | k1 & -16777216; + this.drawGradientRect(j2 - 3, k2 - 3 + 1, j2 - 3 + 1, k2 + i1 + 3 - 1, k1, l1); + this.drawGradientRect(j2 + k + 2, k2 - 3 + 1, j2 + k + 3, k2 + i1 + 3 - 1, k1, l1); + this.drawGradientRect(j2 - 3, k2 - 3, j2 + k + 3, k2 - 3 + 1, k1, k1); + this.drawGradientRect(j2 - 3, k2 + i1 + 2, j2 + k + 3, k2 + i1 + 3, l1, l1); + + this.fontRenderer.drawString(((ItemStack) next).getDisplayName(), j2, k2, WHITE); + + GL11.glPopMatrix(); + } + + str = "" + e.getValue(); + boolean valid = amount >= e.getValue(); + if (!valid && validInputMaterials) + { + validInputMaterials = false; + } + int color = valid | this.mc.player.capabilities.isCreativeMode ? GREEN : RED; + this.fontRenderer.drawString(str, xPos + 8 - this.fontRenderer.getStringWidth(str) / 2, TOP + 170 + canCreateOffset, color); + } else if (next instanceof Collection) + { + Collection items = (Collection) next; + + int amount = 0; + + for (ItemStack stack : items) + { + amount += getAmountInInventory(stack); + } + + RenderHelper.enableGUIStandardItemLighting(); + + Iterator it = items.iterator(); + int count = 0; + int toRenderIndex = ((int) this.ticksSinceMenuOpenF / 20) % items.size(); + ItemStack toRender = null; + while (it.hasNext()) + { + ItemStack stack = it.next(); + if (count == toRenderIndex) + { + toRender = stack; + break; + } + count++; + } + + if (toRender == null) + { + continue; + } + + this.itemRender.renderItemAndEffectIntoGUI(toRender, xPos, yPos); + this.itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, toRender, xPos, yPos, null); + RenderHelper.disableStandardItemLighting(); + GL11.glEnable(GL11.GL_BLEND); + + if (mousePosX >= xPos && mousePosX <= xPos + 16 && mousePosY >= yPos && mousePosY <= yPos + 16) + { + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glPushMatrix(); + GL11.glTranslatef(0, 0, 300); + int k = this.fontRenderer.getStringWidth(toRender.getDisplayName()); + int j2 = mousePosX - k / 2; + int k2 = mousePosY - 12; + int i1 = 8; + + if (j2 + k > this.width) + { + j2 -= (j2 - this.width + k); + } + + if (k2 + i1 + 6 > this.height) + { + k2 = this.height - i1 - 6; + } + + int j1 = ColorUtil.to32BitColor(190, 0, 153, 255); + this.drawGradientRect(j2 - 3, k2 - 4, j2 + k + 3, k2 - 3, j1, j1); + this.drawGradientRect(j2 - 3, k2 + i1 + 3, j2 + k + 3, k2 + i1 + 4, j1, j1); + this.drawGradientRect(j2 - 3, k2 - 3, j2 + k + 3, k2 + i1 + 3, j1, j1); + this.drawGradientRect(j2 - 4, k2 - 3, j2 - 3, k2 + i1 + 3, j1, j1); + this.drawGradientRect(j2 + k + 3, k2 - 3, j2 + k + 4, k2 + i1 + 3, j1, j1); + int k1 = ColorUtil.to32BitColor(170, 0, 153, 255); + int l1 = (k1 & 16711422) >> 1 | k1 & -16777216; + this.drawGradientRect(j2 - 3, k2 - 3 + 1, j2 - 3 + 1, k2 + i1 + 3 - 1, k1, l1); + this.drawGradientRect(j2 + k + 2, k2 - 3 + 1, j2 + k + 3, k2 + i1 + 3 - 1, k1, l1); + this.drawGradientRect(j2 - 3, k2 - 3, j2 + k + 3, k2 - 3 + 1, k1, k1); + this.drawGradientRect(j2 - 3, k2 + i1 + 2, j2 + k + 3, k2 + i1 + 3, l1, l1); + + this.fontRenderer.drawString(toRender.getDisplayName(), j2, k2, WHITE); + + GL11.glPopMatrix(); + } + + str = "" + e.getValue(); + boolean valid = amount >= e.getValue(); + if (!valid && validInputMaterials) + { + validInputMaterials = false; + } + int color = valid | this.mc.player.capabilities.isCreativeMode ? GREEN : RED; + this.fontRenderer.drawString(str, xPos + 8 - this.fontRenderer.getStringWidth(str) / 2, TOP + 170 + canCreateOffset, color); + } + + i++; + } + + if (validInputMaterials || this.mc.player.capabilities.isCreativeMode) + { + GL11.glColor4f(0.0F, 1.0F, 0.1F, 1); + } else + { + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + } + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + + if (!this.mapMode) + { + if (mousePosX >= RHS - 95 && mousePosX <= RHS && mousePosY >= TOP + 182 + canCreateOffset && mousePosY <= TOP + 182 + 12 + canCreateOffset) + { + this.drawTexturedModalRect(RHS - 95, TOP + 182 + canCreateOffset, 93, 12, 0, 174, 93, 12, false, false); + } + } + + this.drawTexturedModalRect(RHS - 95, TOP + 182 + canCreateOffset, 93, 12, 0, 174, 93, 12, false, false); + + int color = (int) ((Math.sin(this.ticksSinceMenuOpenF / 5.0) * 0.5 + 0.5) * 255); + this.drawSplitString(GCCoreUtil.translate("gui.message.can_create_space_station.name"), RHS - 48, TOP + 137, 91, ColorUtil.to32BitColor(255, color, 255, color), true, false); + + if (!mapMode) + { + this.drawSplitString(GCCoreUtil.translate("gui.message.create_ss.name").toUpperCase(), RHS - 48, TOP + 185 + canCreateOffset, 91, WHITE, false, false); + } + } else + { + this.drawSplitString(GCCoreUtil.translate("gui.message.cannot_create_space_station.name"), RHS - 48, TOP + 138, 91, WHITE, true, false); + } + } + + // Catalog overlay + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.3F - Math.min(0.3F, this.ticksSinceSelectionF / 50.0F)); + this.drawTexturedModalRect(LHS, TOP, 74, 11, 0, 392, 148, 22, false, false); + str = GCCoreUtil.translate("gui.message.catalog.name").toUpperCase(); + this.fontRenderer.drawString(str, LHS + 40 - fontRenderer.getStringWidth(str) / 2, TOP + 1, WHITE); + + // Top bar title: + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + if (this.selectedBody instanceof Satellite) + { + if (this.selectedStationOwner.length() == 0 || !this.selectedStationOwner.equalsIgnoreCase(PlayerUtil.getName(this.mc.player))) + { + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + } else + { + GL11.glColor4f(0.0F, 1.0F, 0.0F, 1); + } + this.drawTexturedModalRect(width / 2 - 47, TOP, 94, 11, 0, 414, 188, 22, false, false); + } else + { + this.drawTexturedModalRect(width / 2 - 47, TOP, 94, 11, 0, 414, 188, 22, false, false); + } + if (this.selectedBody.getTierRequirement() >= 0 && (!(this.selectedBody instanceof Satellite))) + { + boolean canReach; + if (!this.selectedBody.isReachable() || (this.possibleBodies != null && !this.possibleBodies.contains(this.selectedBody))) + { + canReach = false; + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + } else + { + canReach = true; + GL11.glColor4f(0.0F, 1.0F, 0.0F, 1); + } + this.drawTexturedModalRect(width / 2 - 30, TOP + 11, 30, 11, 0, 414, 60, 22, false, false); + this.drawTexturedModalRect(width / 2, TOP + 11, 30, 11, 128, 414, 60, 22, false, false); + str = GCCoreUtil.translateWithFormat("gui.message.tier.name", this.selectedBody.getTierRequirement() == 0 ? "?" : this.selectedBody.getTierRequirement()); + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2, TOP + 13, canReach ? GREY4 : RED3); + } + + str = this.selectedBody.getTranslatedName(); + + if (this.selectedBody instanceof Satellite) + { + str = GCCoreUtil.translate("gui.message.rename.name").toUpperCase(); + } + + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2, TOP + 2, WHITE); + + // Catalog wedge: + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.drawTexturedModalRect(LHS + 4, TOP, 83, 12, 0, 477, 83, 12, false, false); + + if (!this.mapMode) + { + if (!this.selectedBody.isReachable() || (this.possibleBodies != null && !this.possibleBodies.contains(this.selectedBody)) || (this.selectedBody instanceof Satellite && this.selectedStationOwner.equals(""))) + { + GL11.glColor4f(1.0F, 0.0F, 0.0F, 1); + } else + { + GL11.glColor4f(0.0F, 1.0F, 0.0F, 1); + } + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + this.drawTexturedModalRect(RHS - 74, TOP, 74, 11, 0, 392, 148, 22, true, false); + str = GCCoreUtil.translate("gui.message.launch.name").toUpperCase(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.fontRenderer.drawString(str, RHS - 40 - fontRenderer.getStringWidth(str) / 2, TOP + 2, WHITE); + } + + if (this.selectionState == EnumSelection.SELECTED && !(this.selectedBody instanceof Satellite)) + { + handledSliderPos = true; + + int sliderPos = this.zoomTooltipPos; + if (zoomTooltipPos != 38) + { + sliderPos = Math.min((int) this.ticksSinceSelectionF * 2, 38); + this.zoomTooltipPos = sliderPos; + } + + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + this.drawTexturedModalRect(RHS - 182, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE - sliderPos, 83, 38, 512 - 166, 512 - 76, 166, 76, true, false); + + boolean flag0 = GalaxyRegistry.getSatellitesForCelestialBody(this.selectedBody).size() > 0; + boolean flag1 = this.selectedBody instanceof Planet && GalaxyRegistry.getMoonsForPlanet((Planet) this.selectedBody).size() > 0; + if (flag0 && flag1) + { + this.drawSplitString(GCCoreUtil.translate("gui.message.click_again.0.name"), RHS - 182 + 41, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE + 2 - sliderPos, 79, GREY5, false, false); + } else if (!flag0 && flag1) + { + this.drawSplitString(GCCoreUtil.translate("gui.message.click_again.1.name"), RHS - 182 + 41, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE + 6 - sliderPos, 79, GREY5, false, false); + } else if (flag0) + { + this.drawSplitString(GCCoreUtil.translate("gui.message.click_again.2.name"), RHS - 182 + 41, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE + 6 - sliderPos, 79, GREY5, false, false); + } else + { + this.drawSplitString(GCCoreUtil.translate("gui.message.click_again.3.name"), RHS - 182 + 41, height - GuiCelestialSelection.BORDER_SIZE - GuiCelestialSelection.BORDER_EDGE_SIZE + 11 - sliderPos, 79, GREY5, false, false); + } + + } + + if (this.selectedBody instanceof Satellite && renamingSpaceStation) + { + this.drawDefaultBackground(); + GL11.glColor4f(0.0F, 0.6F, 1.0F, 1); + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain1); + this.drawTexturedModalRect(width / 2 - 90, this.height / 2 - 38, 179, 67, 159, 0, 179, 67, false, false); + this.drawTexturedModalRect(width / 2 - 90 + 4, this.height / 2 - 38 + 2, 171, 10, 159, 92, 171, 10, false, false); + this.drawTexturedModalRect(width / 2 - 90 + 8, this.height / 2 - 38 + 18, 161, 13, 159, 67, 161, 13, false, false); + this.drawTexturedModalRect(width / 2 - 90 + 17, this.height / 2 - 38 + 59, 72, 12, 159, 80, 72, 12, true, false); + this.drawTexturedModalRect(width / 2, this.height / 2 - 38 + 59, 72, 12, 159, 80, 72, 12, false, false); + str = GCCoreUtil.translate("gui.message.assign_name.name"); + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2, this.height / 2 - 35, WHITE); + str = GCCoreUtil.translate("gui.message.apply.name"); + this.fontRenderer.drawString(str, width / 2 - this.fontRenderer.getStringWidth(str) / 2 - 36, this.height / 2 + 23, WHITE); + str = GCCoreUtil.translate("gui.message.cancel.name"); + this.fontRenderer.drawString(str, width / 2 + 36 - this.fontRenderer.getStringWidth(str) / 2, this.height / 2 + 23, WHITE); + + if (this.renamingString == null) + { + Satellite selectedSatellite = (Satellite) this.selectedBody; + String playerName = PlayerUtil.getName(this.mc.player); + this.renamingString = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(playerName).getStationName(); + if (this.renamingString == null) + { + this.renamingString = this.spaceStationMap.get(getSatelliteParentID(selectedSatellite)).get(playerName.toLowerCase()).getStationName(); + } + if (this.renamingString == null) + { + this.renamingString = ""; + } + } + + str = this.renamingString; + String str0 = this.renamingString; + + if ((this.ticksSinceMenuOpenF / 10) % 2 == 0) + { + str0 += "_"; + } + + this.fontRenderer.drawString(str0, width / 2 - this.fontRenderer.getStringWidth(str) / 2, this.height / 2 - 17, WHITE); + } + } + } + + if (!handledSliderPos) + { + this.zoomTooltipPos = 0; + } + } + + /** + * Draws child bodies (when appropriate) on the left-hand interface + */ + protected int drawChildren(List children, int xOffsetBase, int yOffsetPrior, boolean recursive) + { + xOffsetBase += GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE; + final int yOffsetBase = GuiCelestialSelection.BORDER_SIZE + GuiCelestialSelection.BORDER_EDGE_SIZE + 50 + yOffsetPrior; + int yOffset = 0; + for (int i = 0; i < children.size(); i++) + { + CelestialBody child = children.get(i); + int xOffset = xOffsetBase + (child.equals(this.selectedBody) ? 5 : 0); + final int scale = (int) Math.min(95.0F, Math.max(0.0F, (this.ticksSinceMenuOpenF * 25.0F) - 95 * i)); + + this.mc.renderEngine.bindTexture(GuiCelestialSelection.guiMain0); + float brightness = child.equals(this.selectedBody) ? 0.2F : 0.0F; + if (child.isReachable()) + { + GL11.glColor4f(0.0F, 0.6F + brightness, 0.0F, scale / 95.0F); + } else + { + GL11.glColor4f(0.6F + brightness, 0.0F, 0.0F, scale / 95.0F); + } + this.drawTexturedModalRect(3 + xOffset, yOffsetBase + yOffset + 1, 86, 10, 0, 489, 86, 10, false, false); + GL11.glColor4f(3 * brightness, 0.6F + 2 * brightness, 1.0F, scale / 95.0F); + this.drawTexturedModalRect(2 + xOffset, yOffsetBase + yOffset, 93, 12, 95, 464, 93, 12, false, false); + + if (scale > 0) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int color = 14737632; + this.fontRenderer.drawString(child.getTranslatedName(), 7 + xOffset, yOffsetBase + yOffset + 2, color); + } + + yOffset += 14; + if (recursive && child.equals(this.selectedBody)) + { + List grandchildren = this.getChildren(child); + if (grandchildren.size() > 0) + { + if (this.animateGrandchildren == 14 * grandchildren.size()) + { + yOffset += drawChildren(grandchildren, 10, yOffset, false); + } else + { + if (this.animateGrandchildren >= 14) + { + List partial = new LinkedList<>(); + for (int j = 0; j < this.animateGrandchildren / 14; j++) + { + partial.add(grandchildren.get(j)); + } + drawChildren(partial, 10, yOffset, false); + } + yOffset += this.animateGrandchildren; + this.animateGrandchildren += 2; + } + } + } + } + return yOffset; + } + + protected int getAmountInInventory(ItemStack stack) + { + int amountInInv = 0; + + for (int x = 0; x < FMLClientHandler.instance().getClientPlayerEntity().inventory.getSizeInventory(); x++) + { + final ItemStack slot = FMLClientHandler.instance().getClientPlayerEntity().inventory.getStackInSlot(x); + + if (slot != null) + { + if (SpaceStationRecipe.checkItemEquals(stack, slot)) + { + amountInInv += slot.getCount(); + } + } + } + + return amountInInv; + } + + public int drawSplitString(String text, int x, int y, int width, int color, boolean small, boolean simulate) + { + return this.renderSplitString(text, x, y, width, color, small, simulate); + } + + protected int renderSplitString(String text, int x, int y, int width, int color, boolean small, boolean simulate) + { + if (small) + { + List list = this.fontRenderer.listFormattedStringToWidth(text, width); + + for (Iterator iterator = list.iterator(); iterator.hasNext(); y += this.fontRenderer.FONT_HEIGHT) + { + String string = (String) iterator.next(); + if (!simulate) + { + this.renderStringAligned(string, x, y, width, color); + } + } + + return list.size(); + } else + { + List list = this.fontRenderer.listFormattedStringToWidth(text, width); + + for (Iterator iterator = list.iterator(); iterator.hasNext(); y += this.fontRenderer.FONT_HEIGHT) + { + String s1 = iterator.next(); + if (!simulate) + { + this.renderStringAligned(s1, x, y, width, color); + } + } + + return list.size(); + } + } + + protected void renderStringAligned(String text, int x, int y, int width, int color) + { + if (this.fontRenderer.getBidiFlag()) + { + int i1 = this.fontRenderer.getStringWidth(this.bidiReorder(text)); + x = x + width - i1; + } + + this.fontRenderer.drawString(text, x - this.fontRenderer.getStringWidth(text) / 2, y, color, false); + } + + protected String bidiReorder(String text) + { + try + { + Bidi bidi = new Bidi((new ArabicShaping(8)).shape(text), 127); + bidi.setReorderingMode(0); + return bidi.writeReordered(2); + } catch (ArabicShapingException arabicshapingexception) + { + return text; + } + } + + public void drawTexturedModalRect(int x, int y, int width, int height, int u, int v, int uWidth, int vHeight, boolean invertX, boolean invertY) + { + this.drawTexturedModalRect(x, y, width, height, u, v, uWidth, vHeight, invertX, invertY, 512, 512); + } + + public void drawTexturedModalRect(float x, float y, float width, float height, float u, float v, float uWidth, float vHeight, boolean invertX, boolean invertY, float texSizeX, float texSizeY) + { + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + float texModX = 1F / texSizeX; + float texModY = 1F / texSizeY; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + float height0 = invertY ? 0 : vHeight; + float height1 = invertY ? vHeight : 0; + float width0 = invertX ? uWidth : 0; + float width1 = invertX ? 0 : uWidth; + worldRenderer.pos(x, y + height, this.zLevel).tex((u + width0) * texModX, (v + height0) * texModY).endVertex(); + worldRenderer.pos(x + width, y + height, this.zLevel).tex((u + width1) * texModX, (v + height0) * texModY).endVertex(); + worldRenderer.pos(x + width, y, this.zLevel).tex((u + width1) * texModX, (v + height1) * texModY).endVertex(); + worldRenderer.pos(x, y, this.zLevel).tex((u + width0) * texModX, (v + height1) * texModY).endVertex(); + tessellator.draw(); + } + + public void setBlackBackground() + { + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_TEXTURE_2D); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(0.0D, height, -90.0D).endVertex(); + worldRenderer.pos(width, height, -90.0D).endVertex(); + worldRenderer.pos(width, 0.0D, -90.0D).endVertex(); + worldRenderer.pos(0.0D, 0.0D, -90.0D).endVertex(); + tessellator.draw(); + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + /** + * Rotates/translates/scales to appropriate values before drawing celestial + * bodies + */ + public Matrix4f setIsometric(float partialTicks) + { + Matrix4f mat0 = new Matrix4f(); + Matrix4f.translate(new Vector3f(width / 2.0F, height / 2, 0), mat0, mat0); + Matrix4f.rotate((float) Math.toRadians(55), new Vector3f(1, 0, 0), mat0, mat0); + Matrix4f.rotate((float) Math.toRadians(-45), new Vector3f(0, 0, 1), mat0, mat0); + float zoomLocal = this.getZoomAdvanced(); + this.zoom = zoomLocal; + Matrix4f.scale(new Vector3f(1.1f + zoomLocal, 1.1F + zoomLocal, 1.1F + zoomLocal), mat0, mat0); + Vector2f cBodyPos = this.getTranslationAdvanced(partialTicks); + this.position = this.getTranslationAdvanced(partialTicks); + Matrix4f.translate(new Vector3f(-cBodyPos.x, -cBodyPos.y, 0), mat0, mat0); + FloatBuffer fb = BufferUtils.createFloatBuffer(16); + fb.rewind(); + mat0.store(fb); + fb.flip(); + GL11.glMultMatrix(fb); + return mat0; + } + + /** + * Draw background grid + */ + public void drawGrid(float gridSize, float gridScale) + { + GL11.glColor4f(0.0F, 0.2F, 0.5F, 0.55F); + + GL11.glBegin(GL11.GL_LINES); + + gridSize += gridScale / 2; + for (float v = -gridSize; v <= gridSize; v += gridScale) + { + GL11.glVertex3f(v, -gridSize, -0.0F); + GL11.glVertex3f(v, gridSize, -0.0F); + GL11.glVertex3f(-gridSize, v, -0.0F); + GL11.glVertex3f(gridSize, v, -0.0F); + } + + GL11.glEnd(); + } + + /** + * Draw orbit circles on gui + */ + public void drawCircles() + { + GL11.glColor4f(1, 1, 1, 1); + GL11.glLineWidth(3); + int count = 0; + + final float theta = (float) (2 * Math.PI / 90); + final float cos = (float) Math.cos(theta); + final float sin = (float) Math.sin(theta); + + for (CelestialBody body : bodiesToRender) + { + Vector3f systemOffset = new Vector3f(0.0F, 0.0F, 0.0F); + if (body instanceof IChildBody) + { + systemOffset = this.getCelestialBodyPosition(((IChildBody) body).getParentPlanet()); + } else if (body instanceof Planet) + { + systemOffset = this.getCelestialBodyPosition(((Planet) body).getParentSolarSystem().getMainStar()); + } + + float x = this.getScale(body); + float y = 0; + + float alpha = getAlpha(body); + + if (alpha > 0.0F) + { + switch (count % 2) + { + case 0: + GL11.glColor4f(0.0F / 1.4F, 0.6F / 1.4F, 1.0F / 1.4F, alpha / 1.4F); + break; + case 1: + GL11.glColor4f(0.3F / 1.4F, 0.8F / 1.4F, 1.0F / 1.4F, alpha / 1.4F); + break; + } + + CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre preEvent = new CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre(body, systemOffset); + MinecraftForge.EVENT_BUS.post(preEvent); + + if (!preEvent.isCanceled()) + { + GL11.glTranslatef(systemOffset.x, systemOffset.y, systemOffset.z); + + GL11.glBegin(GL11.GL_LINE_LOOP); + + float temp; + for (int i = 0; i < 90; i++) + { + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + } + + GL11.glEnd(); + + GL11.glTranslatef(-systemOffset.x, -systemOffset.y, -systemOffset.z); + + count++; + } + + CelestialBodyRenderEvent.CelestialRingRenderEvent.Post postEvent = new CelestialBodyRenderEvent.CelestialRingRenderEvent.Post(body); + MinecraftForge.EVENT_BUS.post(postEvent); + } + } + + GL11.glLineWidth(1); + } + + /** + * Returns the transparency of the selected body. Hidden bodies will return + * 0.0, opaque bodies will return 1.0, and ones fading in/out will pass + * between those two values + */ + public float getAlpha(CelestialBody body) + { + float alpha = 1.0F; + + if (body instanceof IChildBody) + { + boolean selected = body == this.selectedBody || (((IChildBody) body).getParentPlanet() == this.selectedBody && this.selectionState != EnumSelection.SELECTED); + boolean ready = this.lastSelectedBody != null || this.ticksSinceSelectionF > 35; + boolean isSibling = getSiblings(this.selectedBody).contains(body); + boolean isPossible = !(body instanceof Satellite) || (this.possibleBodies != null && this.possibleBodies.contains(body)); + if ((!selected && !isSibling) || !isPossible) + { + alpha = 0.0F; + } else if (this.isZoomed() && ((!selected || !ready) && !isSibling)) + { + alpha = Math.min(Math.max((this.ticksSinceSelectionF - 30) / 15.0F, 0.0F), 1.0F); + } + } else + { + boolean isSelected = this.selectedBody == body; + boolean isChildSelected = this.selectedBody instanceof IChildBody; + boolean isOwnChildSelected = isChildSelected && ((IChildBody) this.selectedBody).getParentPlanet() == body; + + if (!isSelected && !isOwnChildSelected && (this.isZoomed() || isChildSelected)) + { + if (this.lastSelectedBody != null || this.selectedBody instanceof IChildBody) + { + alpha = 0.0F; + } else + { + alpha = 1.0F - Math.min(this.ticksSinceSelectionF / 25.0F, 1.0F); + } + } + } + + return alpha; + } + + public static class StationDataGUI + { + + private String stationName; + private Integer stationDimensionID; + + public StationDataGUI(String stationName, Integer stationDimensionID) + { + this.stationName = stationName; + this.stationDimensionID = stationDimensionID; + } + + public String getStationName() + { + return stationName; + } + + public void setStationName(String stationName) + { + this.stationName = stationName; + } + + public Integer getStationDimensionID() + { + return stationDimensionID; + } + } + + protected boolean isZoomed() + { + return this.selectionState == EnumSelection.ZOOMED; + } + + protected boolean isSelected() + { + return this.selectionState != EnumSelection.UNSELECTED; + } + + protected Matrix4f setupMatrix(CelestialBody body, Matrix4f worldMatrix, FloatBuffer fb) + { + return setupMatrix(body, worldMatrix, fb, 1.0F); + } + + protected Matrix4f setupMatrix(CelestialBody body, Matrix4f worldMatrix, FloatBuffer fb, float scaleXZ) + { + Matrix4f worldMatrix0 = new Matrix4f(worldMatrix); + Matrix4f.translate(this.getCelestialBodyPosition(body), worldMatrix0, worldMatrix0); + Matrix4f worldMatrix1 = new Matrix4f(); + Matrix4f.rotate((float) Math.toRadians(45), new Vector3f(0, 0, 1), worldMatrix1, worldMatrix1); + Matrix4f.rotate((float) Math.toRadians(-55), new Vector3f(1, 0, 0), worldMatrix1, worldMatrix1); + if (scaleXZ != 1.0F) + { + Matrix4f.scale(new Vector3f(scaleXZ, scaleXZ, 1.0F), worldMatrix1, worldMatrix1); + } + worldMatrix1 = Matrix4f.mul(worldMatrix0, worldMatrix1, worldMatrix1); + fb.rewind(); + worldMatrix1.store(fb); + fb.flip(); + GL11.glMultMatrix(fb); + + return worldMatrix1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiJoinSpaceRace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiJoinSpaceRace.java new file mode 100644 index 00000000..ff3dbe24 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiJoinSpaceRace.java @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientButton; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.client.model.ModelFlag; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiJoinSpaceRace extends GuiScreen implements ICheckBoxCallback, ITextBoxCallback +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + + private int ticksPassed; + private EntityPlayer thePlayer; + private boolean initialized; + + private int buttonFlag_height; + private int buttonFlag_xPosition; + private int buttonFlag_yPosition; + + private EntityFlag dummyFlag = new EntityFlag(FMLClientHandler.instance().getClient().world); + private ModelFlag dummyModel = new ModelFlag(); + + private SpaceRace spaceRaceData; + + public GuiJoinSpaceRace(EntityPlayerSP player) + { + this.thePlayer = player; + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + SpaceRace race = SpaceRaceManager.getSpaceRaceFromID(stats.getSpaceRaceInviteTeamID()); + + if (race != null) + { + this.spaceRaceData = race; + } else + { + List playerList = new ArrayList(); + playerList.add(PlayerUtil.getName(player)); + this.spaceRaceData = new SpaceRace(playerList, SpaceRace.DEFAULT_NAME, new FlagData(48, 32), new Vector3(1, 1, 1)); + } + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + + if (this.initialized) + { + final int var5 = (this.width - this.width / 4) / 2; + final int var6 = (this.height - this.height / 4) / 2; + + int buttonFlag_width = 81; + this.buttonFlag_height = 58; + this.buttonFlag_xPosition = this.width / 2 - buttonFlag_width / 2; + this.buttonFlag_yPosition = this.height / 2 - this.height / 3 + 10; + + this.buttonList + .add(new GuiElementGradientButton(0, this.width / 2 - this.width / 3 + 15, this.height / 2 - this.height / 4 - 15, 50, 15, GCCoreUtil.translate("gui.space_race.create.close.name"))); + int width = (int) (var5 / 1.0F); + this.buttonList.add(new GuiElementGradientButton(1, this.width / 2 - width / 2, this.buttonFlag_yPosition + this.buttonFlag_height + 60, width, 20, + GCCoreUtil.translateWithFormat("gui.space_race.join.name", this.spaceRaceData.getTeamName()))); + } + } + + @Override + protected void actionPerformed(GuiButton buttonClicked) + { + switch (buttonClicked.id) + { + case 0: + this.thePlayer.closeScreen(); + break; + case 1: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ADD_RACE_PLAYER, GCCoreUtil.getDimensionID(mc.world), new Object[] + {PlayerUtil.getName(this.thePlayer), this.spaceRaceData.getSpaceRaceID()})); + this.thePlayer.closeScreen(); + break; + default: + break; + } + } + + @Override + protected void mouseClicked(int x, int y, int clickIndex) throws IOException + { + super.mouseClicked(x, y, clickIndex); + } + + @Override + public void updateScreen() + { + super.updateScreen(); + ++this.ticksPassed; + + if (!this.initialized) + { + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.drawDefaultBackground(); + final int var5 = (this.width - this.width / 4) / 2; + final int var6 = (this.height - this.height / 4) / 2; + + if (this.initialized) + { + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.join.title.name"), this.width / 2, this.height / 2 - this.height / 3 - 15, 16777215); + this.drawFlagButton(par1, par2); + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.join.owner.name") + ": " + this.spaceRaceData.getPlayerNames().get(0), this.width / 2, + this.buttonFlag_yPosition + this.buttonFlag_height + 25, ColorUtil.to32BitColor(255, 150, 150, 150)); + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translateWithFormat("gui.space_race.join.member_count.name", this.spaceRaceData.getPlayerNames().size()), this.width / 2, + this.buttonFlag_yPosition + this.buttonFlag_height + 40, ColorUtil.to32BitColor(255, 150, 150, 150)); + GL11.glPushMatrix(); + GL11.glTranslatef(this.width / 2, this.buttonFlag_yPosition + this.buttonFlag_height + 5 + FMLClientHandler.instance().getClient().fontRenderer.FONT_HEIGHT / 2, 0); + GL11.glScalef(1.5F, 1.5F, 1.0F); + GL11.glTranslatef(-this.width / 2, (-(this.buttonFlag_yPosition + this.buttonFlag_height + 5)) - FMLClientHandler.instance().getClient().fontRenderer.FONT_HEIGHT / 2, 0); + this.drawCenteredString(this.fontRenderer, this.spaceRaceData.getTeamName(), this.width / 2, this.buttonFlag_yPosition + this.buttonFlag_height + 5, + ColorUtil.to32BitColor(255, 100, 150, 20)); + GL11.glPopMatrix(); + } + + super.drawScreen(par1, par2, par3); + } + + private void drawFlagButton(int mouseX, int mouseY) + { + GL11.glPushMatrix(); + GL11.glTranslatef(this.buttonFlag_xPosition + 2.9F, this.buttonFlag_yPosition + this.buttonFlag_height + 1 - 4, 0); + GL11.glScalef(74.0F, 74.0F, 1F); + GL11.glTranslatef(0.0F, 0.36F, 1.0F); + GL11.glScalef(1.0F, 1.0F, -1F); + this.dummyFlag.flagData = this.spaceRaceData.getFlagData(); + this.dummyModel.renderFlag(this.dummyFlag, this.ticksPassed); + GL11.glColor3f(1, 1, 1); + GL11.glPopMatrix(); + } + + @Override + public void drawWorldBackground(int i) + { + if (this.mc.world != null) + { + int scaleX = Math.min(this.ticksPassed * 14, this.width / 3); + int scaleY = Math.min(this.ticksPassed * 14, this.height / 3); + + if (scaleX == this.width / 3 && scaleY == this.height / 3 && !this.initialized) + { + this.initialized = true; + this.initGui(); + } + + this.drawGradientRect(this.width / 2 - scaleX, this.height / 2 - scaleY, this.width / 2 + scaleX, this.height / 2 + scaleY, -1072689136, -804253680); + } else + { + this.drawBackground(i); + } + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return false; + } + + @Override + public void onIntruderInteraction() + { + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return true; + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + return ColorUtil.to32BitColor(255, 255, 255, 255); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiMissingCore.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiMissingCore.java new file mode 100644 index 00000000..e2d5a944 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiMissingCore.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import java.net.URI; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiMissingCore extends GuiScreen +{ + + private int urlX; + private int urlY; + private int urlWidth; + private int urlHeight; + + @Override + public void initGui() + { + super.initGui(); + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.drawDefaultBackground(); + int offset = this.height / 2 - 50; + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.missing_core.name.0"), this.width / 2, offset, 0xFF5555); + offset += 25; + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.missing_core.name.1"), this.width / 2, offset, 0xFF5555); + offset += 20; + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.missing_core.name.2"), this.width / 2, offset, 0x999999); + offset += 20; + String s = TextFormatting.UNDERLINE + GCCoreUtil.translate("gui.missing_core.name.3"); + this.urlX = this.width / 2 - this.fontRenderer.getStringWidth(s) / 2 - 10; + this.urlY = offset - 2; + this.urlWidth = this.fontRenderer.getStringWidth(s) + 20; + this.urlHeight = 14; + Gui.drawRect(this.urlX, this.urlY, this.urlX + this.urlWidth, this.urlY + this.urlHeight, ColorUtil.to32BitColor(50, 0, 0, 255)); + this.drawCenteredString(this.fontRenderer, s, this.width / 2, offset, 0x999999); + } + + @Override + protected void keyTyped(char par1, int par2) + { + } + + public void actionPerformed() + { + this.actionPerformed(null); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + FMLClientHandler.instance().getClient().displayGuiScreen((GuiScreen) null); + } + + @Override + protected void mouseClicked(int x, int y, int which) + { + if (x > this.urlX && x < this.urlX + this.urlWidth && y > this.urlY && y < this.urlY + this.urlHeight) + { + try + { + Class oclass = Class.forName("java.awt.Desktop"); + Object object = oclass.getMethod("getDesktop", new Class[0]).invoke((Object) null, new Object[0]); + oclass.getMethod("browse", new Class[] + {URI.class}).invoke(object, new Object[] + {new URI("http://micdoodle8.com/mods/galacticraft/downloads")}); + } catch (Throwable throwable) + { + throwable.printStackTrace(); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiNewSpaceRace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiNewSpaceRace.java new file mode 100644 index 00000000..61591224 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiNewSpaceRace.java @@ -0,0 +1,1162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import javax.imageio.ImageIO; +import micdoodle8.mods.galacticraft.api.vector.Vector2; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientButton; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientList; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientList.ListElement; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementSlider; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.client.model.ModelFlag; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public class GuiNewSpaceRace extends GuiScreen implements ICheckBoxCallback, ITextBoxCallback +{ + + protected static final ResourceLocation texture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/gui.png"); + + public enum EnumSpaceRaceGui + { + MAIN, ADD_PLAYER, REMOVE_PLAYER, DESIGN_FLAG, CHANGE_TEAM_COLOR + } + + private int ticksPassed; + private EntityPlayer thePlayer; + private GuiElementCheckbox checkboxPaintbrush; + private GuiElementCheckbox checkboxShowGrid; + private GuiElementCheckbox checkboxEraser; + private GuiElementCheckbox checkboxSelector; + private GuiElementCheckbox checkboxColorSelector; + private GuiElementTextBox textBoxRename; + private boolean initialized; + private GuiElementSlider sliderColorR; + private GuiElementSlider sliderColorG; + private GuiElementSlider sliderColorB; + private GuiElementSlider sliderBrushSize; + private GuiElementSlider sliderEraserSize; + private GuiElementGradientList gradientListAddPlayers; + private GuiElementGradientList gradientListRemovePlayers; + private EnumSpaceRaceGui currentState = EnumSpaceRaceGui.MAIN; + + private int buttonFlag_width; + private int buttonFlag_height; + private int buttonFlag_xPosition; + private int buttonFlag_yPosition; + private boolean buttonFlag_hover; + + private int buttonTeamColor_width; + private int buttonTeamColor_height; + private int buttonTeamColor_xPosition; + private int buttonTeamColor_yPosition; + private boolean buttonTeamColor_hover; + + private Vector2 flagDesignerScale = new Vector2(); + private float flagDesignerMinX; + private float flagDesignerMinY; + private float flagDesignerWidth; + private float flagDesignerHeight; + + private int selectionMinX; + private int selectionMaxX; + private int selectionMinY; + private int selectionMaxY; + + private EntityFlag dummyFlag = new EntityFlag(FMLClientHandler.instance().getClient().world); + private ModelFlag dummyModel = new ModelFlag(); + + private SpaceRace spaceRaceData; + public Map recentlyInvited = new HashMap(); + + private boolean lastMousePressed = false; + private boolean isDirty = true; + private boolean canEdit; + + public GuiNewSpaceRace(EntityPlayer player) + { + this.thePlayer = player; + + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(player)); + + if (race != null) + { + this.spaceRaceData = race; + } else + { + List playerList = new ArrayList(); + playerList.add(PlayerUtil.getName(player)); + this.spaceRaceData = new SpaceRace(playerList, SpaceRace.DEFAULT_NAME, new FlagData(48, 32), new Vector3(1, 1, 1)); + } + + this.mc = FMLClientHandler.instance().getClient(); + this.canEdit = canPlayerEdit(); + } + + private boolean canPlayerEdit() + { + return PlayerUtil.getName(this.mc.player).equals(this.spaceRaceData.getPlayerNames().get(0)); + } + + @Override + public void initGui() + { + float sliderR = 0; + float sliderG = 0; + float sliderB = 0; + + if (this.sliderColorR != null && this.sliderColorG != null && this.sliderColorB != null) + { + sliderR = this.sliderColorR.getSliderPos() / (float) this.sliderColorR.getButtonHeight(); + sliderG = this.sliderColorG.getSliderPos() / (float) this.sliderColorG.getButtonHeight(); + sliderB = this.sliderColorB.getSliderPos() / (float) this.sliderColorB.getButtonHeight(); + } + + super.initGui(); + this.buttonList.clear(); + + if (this.initialized) + { + this.buttonFlag_width = 81; + this.buttonFlag_height = 58; + this.buttonFlag_xPosition = this.width / 2 - this.buttonFlag_width / 2; + this.buttonFlag_yPosition = this.height / 2 - this.height / 3 + 10; + + this.buttonTeamColor_width = 45; + this.buttonTeamColor_height = 45; + this.buttonTeamColor_xPosition = this.buttonFlag_xPosition + this.buttonFlag_width + 10; + this.buttonTeamColor_yPosition = this.buttonFlag_yPosition + this.buttonFlag_height / 2 - this.buttonTeamColor_height / 2; + + this.buttonList.add(new GuiElementGradientButton(0, this.width / 2 - this.width / 3 + 15, this.height / 2 - this.height / 4 - 15, 50, 15, + this.currentState == EnumSpaceRaceGui.MAIN ? GCCoreUtil.translate("gui.space_race.create.close.name") : GCCoreUtil.translate("gui.space_race.create.back.name"))); + + switch (this.currentState) + { + case MAIN: + this.textBoxRename = new GuiElementTextBox(1, this, this.width / 2 - 75, this.buttonFlag_yPosition + this.buttonFlag_height + 10, 150, 16, + GCCoreUtil.translate("gui.space_race.create.rename.name"), false, 25, true); + this.buttonList.add(this.textBoxRename); + if (this.canEdit) + { + this.buttonList.add(new GuiElementGradientButton(2, this.width / 2 - 120, this.textBoxRename.y + this.height / 10, 100, this.height / 10, + GCCoreUtil.translate("gui.space_race.create.add_players.name"))); + this.buttonList.add(new GuiElementGradientButton(3, this.width / 2 - 120, this.textBoxRename.y + this.height / 10 + this.height / 10 + this.height / 50, 100, this.height / 10, + GCCoreUtil.translate("gui.space_race.create.rem_players.name"))); + } + + GuiElementGradientButton localStats = new GuiElementGradientButton(4, this.width / 2 + (this.canEdit ? 20 : -50), this.textBoxRename.y + this.height / 10, 100, this.height / 10, + GCCoreUtil.translate("gui.space_race.create.server_stats.name")); + GuiElementGradientButton serverStats = new GuiElementGradientButton(5, this.width / 2 + (this.canEdit ? 20 : -50), + this.textBoxRename.y + this.height / 10 + this.height / 10 + this.height / 50, 100, this.height / 10, GCCoreUtil.translate("gui.space_race.create.global_stats.name")); + localStats.enabled = false; + serverStats.enabled = false; + this.buttonList.add(localStats); + this.buttonList.add(serverStats); + break; + case ADD_PLAYER: + this.buttonList.add(new GuiElementGradientButton(2, this.width / 2 - this.width / 3 + 7, this.height / 2 + this.height / 4 - 15, 64, 15, + GCCoreUtil.translate("gui.space_race.create.send_invite.name"))); + int xPos0 = ((GuiElementGradientButton) this.buttonList.get(0)).x + ((GuiElementGradientButton) this.buttonList.get(0)).getButtonWidth() + 10; + int xPos1 = this.width / 2 + this.width / 3 - 10; + int yPos0 = this.height / 2 - this.height / 3 + 10; + int yPos1 = this.height / 2 + this.height / 3 - 10; + this.gradientListAddPlayers = new GuiElementGradientList(xPos0, yPos0, xPos1 - xPos0, yPos1 - yPos0); + break; + case REMOVE_PLAYER: + this.buttonList.add(new GuiElementGradientButton(2, this.width / 2 - this.width / 3 + 7, this.height / 2 + this.height / 4 - 15, 64, 15, + GCCoreUtil.translate("gui.space_race.create.remove.name"))); + int xPos0b = ((GuiElementGradientButton) this.buttonList.get(0)).x + ((GuiElementGradientButton) this.buttonList.get(0)).getButtonWidth() + 10; + int xPos1b = this.width / 2 + this.width / 3 - 10; + int yPos0b = this.height / 2 - this.height / 3 + 10; + int yPos1b = this.height / 2 + this.height / 3 - 10; + this.gradientListRemovePlayers = new GuiElementGradientList(xPos0b, yPos0b, xPos1b - xPos0b, yPos1b - yPos0b); + break; + case DESIGN_FLAG: + int guiBottom = this.height / 2 + this.height / 4; + int guiTop = this.height / 2 - this.height / 4; + int guiRight = this.width / 2 + this.width / 3; + int guiLeft; + this.flagDesignerScale = new Vector2(this.width / 130.0F, this.height / 70.0F); + this.flagDesignerMinX = this.width / 2 - this.spaceRaceData.getFlagData().getWidth() * (float) this.flagDesignerScale.x / 2; + this.flagDesignerMinY = this.height / 2 - this.spaceRaceData.getFlagData().getHeight() * (float) this.flagDesignerScale.y / 2; + this.flagDesignerWidth = this.spaceRaceData.getFlagData().getWidth() * (float) this.flagDesignerScale.x; + this.flagDesignerHeight = this.spaceRaceData.getFlagData().getHeight() * (float) this.flagDesignerScale.y; + int flagDesignerRight = (int) (this.flagDesignerMinX + this.flagDesignerWidth); + int availWidth = (int) ((guiRight - 10 - (this.flagDesignerMinX + this.flagDesignerWidth + 10)) / 3); + float x1 = flagDesignerRight + 10; + float x2 = guiRight - 10; + float y1 = guiBottom - 10 - (x2 - x1); + int height = (int) (y1 - 10 - (guiTop + 10)); + this.sliderColorR = new GuiElementSlider(1, flagDesignerRight + 10, guiTop + 10, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(1, 0, 0)); + this.sliderColorG = new GuiElementSlider(2, flagDesignerRight + 11 + availWidth, guiTop + 10, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(0, 1, 0)); + this.sliderColorB = new GuiElementSlider(3, flagDesignerRight + 12 + availWidth * 2, guiTop + 10, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(0, 0, 1)); + this.sliderColorR.setSliderPos(sliderR); + this.sliderColorG.setSliderPos(sliderG); + this.sliderColorB.setSliderPos(sliderB); + this.buttonList.add(this.sliderColorR); + this.buttonList.add(this.sliderColorG); + this.buttonList.add(this.sliderColorB); + this.checkboxPaintbrush = new GuiElementCheckbox(5, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 10, 13, 13, 26, 26, 133, 0, "", 4210752, false); + this.checkboxEraser = new GuiElementCheckbox(6, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 25, 13, 13, 26, 26, 133, 52, "", 4210752, false); + this.checkboxSelector = new GuiElementCheckbox(7, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 40, 13, 13, 26, 26, 133, 78, "", 4210752, false); + this.checkboxColorSelector = + new GuiElementCheckbox(8, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 55, 13, 13, 26, 26, 133, 104, "", 4210752, false); + this.checkboxShowGrid = new GuiElementCheckbox(9, this, (int) (this.flagDesignerMinX - 15), this.height / 2 - this.height / 4 + 90, 13, 13, 26, 26, 133, 26, "", 4210752, false); + this.sliderBrushSize = new GuiElementSlider(10, this.checkboxPaintbrush.x - 40, this.checkboxPaintbrush.y, 35, 13, false, new Vector3(0.34, 0.34, 0.34), + new Vector3(0.34, 0.34, 0.34), GCCoreUtil.translate("gui.space_race.create.brush_size.name")); + this.sliderEraserSize = new GuiElementSlider(11, this.checkboxEraser.x - 40, this.checkboxEraser.y, 35, 13, false, new Vector3(0.34, 0.34, 0.34), new Vector3(0.34, 0.34, 0.34), + GCCoreUtil.translate("gui.space_race.create.eraser_size.name")); + this.sliderEraserSize.visible = false; + this.buttonList.add(this.checkboxPaintbrush); + this.buttonList.add(this.checkboxShowGrid); + this.buttonList.add(this.checkboxEraser); + this.buttonList.add(this.checkboxSelector); + this.buttonList.add(this.checkboxColorSelector); + this.buttonList.add(this.sliderBrushSize); + this.buttonList.add(this.sliderEraserSize); + break; + case CHANGE_TEAM_COLOR: + guiBottom = this.height / 2 + this.height / 4; + guiTop = this.height / 2 - this.height / 4; + guiLeft = this.width / 6; + guiRight = this.width / 2 + this.width / 3; + flagDesignerRight = guiLeft; + availWidth = (guiRight - guiLeft - 100) / 3; + x1 = flagDesignerRight + 10; + x2 = guiLeft - 10; + y1 = guiBottom - 10 - (x2 - x1); + height = (int) (y1 - 10 - (guiTop + 30)); + this.sliderColorR = new GuiElementSlider(1, flagDesignerRight + 25, guiTop + 30, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(1, 0, 0)); + this.sliderColorG = new GuiElementSlider(2, flagDesignerRight + availWidth + 50, guiTop + 30, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(0, 1, 0)); + this.sliderColorB = new GuiElementSlider(3, flagDesignerRight + availWidth * 2 + 75, guiTop + 30, availWidth, height, true, new Vector3(0, 0, 0), new Vector3(0, 0, 1)); + this.sliderColorR.setSliderPos(this.spaceRaceData.getTeamColor().floatX()); + this.sliderColorG.setSliderPos(this.spaceRaceData.getTeamColor().floatY()); + this.sliderColorB.setSliderPos(this.spaceRaceData.getTeamColor().floatZ()); + this.buttonList.add(this.sliderColorR); + this.buttonList.add(this.sliderColorG); + this.buttonList.add(this.sliderColorB); + break; + default: + break; + } + } + } + + @Override + public void onGuiClosed() + { + this.exitCurrentScreen(false); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (this.textBoxRename != null && this.textBoxRename.keyTyped(keyChar, keyID)) + { + return; + } + + super.keyTyped(keyChar, keyID); + } + + private void exitCurrentScreen(boolean close) + { + if (this.currentState == EnumSpaceRaceGui.MAIN) + { + if (this.isDirty) + { + this.sendSpaceRaceData(); + } + + if (close) + { + if (this.canEdit) + { + this.writeFlagToFile(); + } + + this.thePlayer.closeScreen(); + } + } else + { + this.currentState = EnumSpaceRaceGui.MAIN; + this.initGui(); + } + } + + @Override + protected void actionPerformed(GuiButton buttonClicked) + { + switch (buttonClicked.id) + { + case 0: + if (this.currentState == EnumSpaceRaceGui.CHANGE_TEAM_COLOR) + { + this.markDirty(); + } + + this.exitCurrentScreen(true); + break; + case 1: + break; + case 2: + if (this.currentState == EnumSpaceRaceGui.MAIN && this.canEdit) + { + this.currentState = EnumSpaceRaceGui.ADD_PLAYER; + this.initGui(); + } else if (this.currentState == EnumSpaceRaceGui.ADD_PLAYER) + { + ListElement playerToInvite = this.gradientListAddPlayers.getSelectedElement(); + if (playerToInvite != null && !this.recentlyInvited.containsKey(playerToInvite.value)) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(this.thePlayer)); + if (race != null) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_INVITE_RACE_PLAYER, GCCoreUtil.getDimensionID(mc.world), new Object[] + {playerToInvite.value, race.getSpaceRaceID()})); + this.recentlyInvited.put(playerToInvite.value, 20 * 60); + } + } + } else if (this.currentState == EnumSpaceRaceGui.REMOVE_PLAYER) + { + ListElement playerToRemove = this.gradientListRemovePlayers.getSelectedElement(); + if (playerToRemove != null) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(this.thePlayer)); + if (race != null) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REMOVE_RACE_PLAYER, GCCoreUtil.getDimensionID(mc.world), new Object[] + {playerToRemove.value, race.getSpaceRaceID()})); + } + } + } + break; + case 3: + if (this.currentState == EnumSpaceRaceGui.MAIN && this.canEdit) + { + this.currentState = EnumSpaceRaceGui.REMOVE_PLAYER; + this.initGui(); + } + break; + default: + break; + } + } + + @Override + protected void mouseClicked(int x, int y, int clickIndex) throws IOException + { + super.mouseClicked(x, y, clickIndex); + } + + @Override + public void updateScreen() + { + super.updateScreen(); + + if (this.ticksPassed % 100 == 0) + { + if (this.isDirty || this.ticksPassed == 0) + { + this.sendSpaceRaceData(); + this.isDirty = false; + } else + { + this.updateSpaceRaceData(); + } + } + + ++this.ticksPassed; + + for (Entry e : new HashSet>(this.recentlyInvited.entrySet())) + { + int timeLeft = e.getValue(); + if (--timeLeft < 0) + { + this.recentlyInvited.remove(e.getKey()); + } else + { + this.recentlyInvited.put(e.getKey(), timeLeft); + } + } + + if (this.currentState == EnumSpaceRaceGui.ADD_PLAYER && this.gradientListAddPlayers != null && this.ticksPassed % 20 == 0) + { + List playerNames = new ArrayList(); + for (int i = 0; i < this.thePlayer.world.playerEntities.size(); i++) + { + EntityPlayer player = (EntityPlayer) this.thePlayer.world.playerEntities.get(i); + + if (player.getDistanceSq(this.thePlayer) <= 25 * 25) + { + String username = PlayerUtil.getName(player); + + if (!this.spaceRaceData.getPlayerNames().contains(username)) + { + playerNames.add(new ListElement(username, this.recentlyInvited.containsKey(username) ? ColorUtil.to32BitColor(255, 250, 120, 0) : ColorUtil.to32BitColor(255, 190, 190, 190))); + } + } + } + + this.gradientListAddPlayers.updateListContents(playerNames); + + if (this.buttonList.size() >= 2) + { + ((GuiElementGradientButton) this.buttonList.get(1)).enabled = this.gradientListAddPlayers.getSelectedElement() != null; + } + } + + if (this.currentState == EnumSpaceRaceGui.REMOVE_PLAYER && this.gradientListRemovePlayers != null && this.ticksPassed % 20 == 0) + { + List playerNames = new ArrayList(); + for (int i = 1; i < this.spaceRaceData.getPlayerNames().size(); i++) + { + String playerName = this.spaceRaceData.getPlayerNames().get(i); + playerNames.add(new ListElement(playerName, ColorUtil.to32BitColor(255, 190, 190, 190))); + } + + this.gradientListRemovePlayers.updateListContents(playerNames); + + if (this.buttonList.size() >= 2) + { + ((GuiElementGradientButton) this.buttonList.get(1)).enabled = this.gradientListRemovePlayers.getSelectedElement() != null; + } + } + + if (this.currentState == EnumSpaceRaceGui.ADD_PLAYER && this.gradientListAddPlayers != null) + { + this.gradientListAddPlayers.update(); + } + + if (this.currentState == EnumSpaceRaceGui.REMOVE_PLAYER && this.gradientListRemovePlayers != null) + { + this.gradientListRemovePlayers.update(); + } + + if (!this.initialized) + { + return; + } + + if (this.currentState == EnumSpaceRaceGui.DESIGN_FLAG) + { + int x = Mouse.getEventX() * this.width / this.mc.displayWidth; + int y = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; + + if (this.canEdit && x >= this.flagDesignerMinX && y >= this.flagDesignerMinY && x <= this.flagDesignerMinX + this.flagDesignerWidth && y <= this.flagDesignerMinY + this.flagDesignerHeight) + { + int unScaledX = (int) Math.floor((x - this.flagDesignerMinX) / this.flagDesignerScale.x); + int unScaledY = (int) Math.floor((y - this.flagDesignerMinY) / this.flagDesignerScale.y); + + if (Mouse.isButtonDown(0)) + { + if (this.checkboxEraser.isSelected != null && this.checkboxEraser.isSelected) + { + this.setColorWithBrushSize(unScaledX, unScaledY, new Vector3(255, 255, 255), (int) Math.floor(this.sliderEraserSize.getNormalizedValue() * 10) + 1); + } else if (this.checkboxColorSelector.isSelected != null && this.checkboxColorSelector.isSelected) + { + Vector3 colorAt = this.spaceRaceData.getFlagData().getColorAt(unScaledX, unScaledY); + this.sliderColorR.setSliderPos(colorAt.floatX()); + this.sliderColorG.setSliderPos(colorAt.floatY()); + this.sliderColorB.setSliderPos(colorAt.floatZ()); + } else if (this.checkboxPaintbrush.isSelected != null && this.checkboxPaintbrush.isSelected) + { + this.setColorWithBrushSize(unScaledX, unScaledY, new Vector3(this.sliderColorR.getColorValueD(), this.sliderColorG.getColorValueD(), this.sliderColorB.getColorValueD()), + (int) Math.floor(this.sliderBrushSize.getNormalizedValue() * 10) + 1); + } + } + } + + if (this.checkboxSelector != null) + { + if (!this.lastMousePressed && Mouse.isButtonDown(0) && this.checkboxSelector.isSelected != null && this.checkboxSelector.isSelected) + { + if (x >= this.flagDesignerMinX && y >= this.flagDesignerMinY && x <= this.flagDesignerMinX + this.flagDesignerWidth && y <= this.flagDesignerMinY + this.flagDesignerHeight) + { + int unScaledX = (int) Math.floor((x - this.flagDesignerMinX) / this.flagDesignerScale.x); + int unScaledY = (int) Math.floor((y - this.flagDesignerMinY) / this.flagDesignerScale.y); + this.selectionMinX = unScaledX; + this.selectionMinY = unScaledY; + } else + { + this.selectionMinX = this.selectionMinY = -1; + } + } else if (this.lastMousePressed && !Mouse.isButtonDown(0) && this.checkboxSelector.isSelected != null && this.checkboxSelector.isSelected) + { + if (this.selectionMinX != -1 && this.selectionMinY != -1 && x >= this.flagDesignerMinX && y >= this.flagDesignerMinY && x <= this.flagDesignerMinX + this.flagDesignerWidth + && y <= this.flagDesignerMinY + this.flagDesignerHeight) + { + int unScaledX = (int) Math.floor((x - this.flagDesignerMinX) / this.flagDesignerScale.x); + int unScaledY = (int) Math.floor((y - this.flagDesignerMinY) / this.flagDesignerScale.y); + this.selectionMaxX = Math.min(unScaledX + 1, this.spaceRaceData.getFlagData().getWidth()); + this.selectionMaxY = Math.min(unScaledY + 1, this.spaceRaceData.getFlagData().getHeight()); + + if (this.selectionMinX > this.selectionMaxX) + { + int temp = this.selectionMaxX - 1; + this.selectionMaxX = this.selectionMinX + 1; + this.selectionMinX = temp; + } + + if (this.selectionMinY > this.selectionMaxY) + { + int temp = this.selectionMaxY - 1; + this.selectionMaxY = this.selectionMinY + 1; + this.selectionMinY = temp; + } + } else + { + this.selectionMaxX = this.selectionMaxY = -1; + } + } + } + + if (this.sliderBrushSize != null && this.sliderBrushSize.visible) + { + this.sliderBrushSize.displayString = GCCoreUtil.translate("gui.space_race.create.brush_radius.name") + ": " + ((int) Math.floor(this.sliderBrushSize.getNormalizedValue() * 10) + 1); + } + + if (this.sliderEraserSize != null && this.sliderEraserSize.visible) + { + this.sliderEraserSize.displayString = GCCoreUtil.translate("gui.space_race.create.eraser_radius.name") + ": " + ((int) Math.floor(this.sliderEraserSize.getNormalizedValue() * 10) + 1); + } + + if (this.sliderColorR != null && this.sliderColorR.visible) + { + this.sliderColorR.displayString = String.valueOf((int) Math.floor(this.sliderColorR.getColorValueD())); + } + + if (this.sliderColorG != null && this.sliderColorG.visible) + { + this.sliderColorG.displayString = String.valueOf((int) Math.floor(this.sliderColorG.getColorValueD())); + } + + if (this.sliderColorB != null && this.sliderColorB.visible) + { + this.sliderColorB.displayString = String.valueOf((int) Math.floor(this.sliderColorB.getColorValueD())); + } + } else if (this.currentState == EnumSpaceRaceGui.MAIN) + { + if (this.lastMousePressed && !Mouse.isButtonDown(0)) + { + if (this.buttonFlag_hover) + { + this.currentState = EnumSpaceRaceGui.DESIGN_FLAG; + this.initGui(); + } + + if (this.buttonTeamColor_hover) + { + this.currentState = EnumSpaceRaceGui.CHANGE_TEAM_COLOR; + this.initGui(); + } + } + } + + this.lastMousePressed = Mouse.isButtonDown(0); + } + + private void setColor(int unScaledX, int unScaledY, Vector3 color) + { + if (this.selectionMaxX - this.selectionMinX > 0 && this.selectionMaxY - this.selectionMinY > 0) + { + if (unScaledX >= this.selectionMinX && unScaledX <= this.selectionMaxX - 1 && unScaledY >= this.selectionMinY && unScaledY <= this.selectionMaxY - 1) + { + this.markDirty(); + this.spaceRaceData.getFlagData().setColorAt(unScaledX, unScaledY, color); + } + } else + { + this.markDirty(); + this.spaceRaceData.getFlagData().setColorAt(unScaledX, unScaledY, color); + } + } + + private void setColorWithBrushSize(int unScaledX, int unScaledY, Vector3 color, int brushSize) + { + for (int x = unScaledX - brushSize + 1; x < unScaledX + brushSize; x++) + { + for (int y = unScaledY - brushSize + 1; y < unScaledY + brushSize; y++) + { + if (x >= 0 && x < this.spaceRaceData.getFlagData().getWidth() && y >= 0 && y < this.spaceRaceData.getFlagData().getHeight()) + { + float relativeX = x + 0.5F - (unScaledX + 0.5F); + float relativeY = y + 0.5F - (unScaledY + 0.5F); + + if (Math.sqrt(relativeX * relativeX + relativeY * relativeY) <= brushSize) + { + this.setColor(x, y, color); + } + } + } + } + } + + public void updateSpaceRaceData() + { + String playerName = PlayerUtil.getName(this.mc.player); + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(playerName); + + if (race != null && !this.isDirty) + { + this.spaceRaceData = race; + this.canEdit = canPlayerEdit(); + + if (!this.textBoxRename.text.equals(race.getTeamName())) + { + this.textBoxRename.text = race.getTeamName(); + } + } + } + + public void sendSpaceRaceData() + { + if (this.canEdit) + { + List objList = new ArrayList(); + objList.add(this.spaceRaceData.getSpaceRaceID()); + objList.add(this.spaceRaceData.getTeamName()); + objList.add(this.spaceRaceData.getFlagData()); + objList.add(this.spaceRaceData.getTeamColor()); + objList.add(this.spaceRaceData.getPlayerNames().toArray(new String[this.spaceRaceData.getPlayerNames().size()])); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_START_NEW_SPACE_RACE, GCCoreUtil.getDimensionID(mc.world), objList)); + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.drawDefaultBackground(); + + if (this.initialized) + { + this.buttonFlag_hover = this.canEdit && this.currentState == EnumSpaceRaceGui.MAIN && par1 >= this.buttonFlag_xPosition && par2 >= this.buttonFlag_yPosition + && par1 < this.buttonFlag_xPosition + this.buttonFlag_width && par2 < this.buttonFlag_yPosition + this.buttonFlag_height; + this.buttonTeamColor_hover = this.canEdit && this.currentState == EnumSpaceRaceGui.MAIN && par1 >= this.buttonTeamColor_xPosition && par2 >= this.buttonTeamColor_yPosition + && par1 < this.buttonTeamColor_xPosition + this.buttonTeamColor_width && par2 < this.buttonTeamColor_yPosition + this.buttonTeamColor_height; + + switch (this.currentState) + { + case MAIN: + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.create.title.name"), this.width / 2, this.height / 2 - this.height / 3 - 15, 16777215); + this.drawFlagButton(); + this.drawColorButton(); + + GuiElementGradientButton serverStats = (GuiElementGradientButton) this.buttonList.get(this.canEdit ? 4 : 2); + GuiElementGradientButton localStats = (GuiElementGradientButton) this.buttonList.get(this.canEdit ? 5 : 3); + + if (par1 > serverStats.x && par1 < serverStats.x + serverStats.width && par2 > serverStats.y && par2 < serverStats.y + serverStats.height) + { + serverStats.displayString = GCCoreUtil.translate("gui.space_race.coming_soon"); + } else + { + serverStats.displayString = GCCoreUtil.translate("gui.space_race.create.server_stats.name"); + } + + if (par1 > localStats.x && par1 < localStats.x + localStats.width && par2 > localStats.y && par2 < localStats.y + localStats.height) + { + localStats.displayString = GCCoreUtil.translate("gui.space_race.coming_soon"); + } else + { + localStats.displayString = GCCoreUtil.translate("gui.space_race.create.global_stats.name"); + } + + break; + case ADD_PLAYER: + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.create.invite_player.name"), this.width / 2, this.height / 2 - this.height / 3 - 15, 16777215); + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.create.player_radius.name"), this.width / 2, this.height / 2 + this.height / 3 + 3, + ColorUtil.to32BitColor(255, 180, 40, 40)); + break; + case REMOVE_PLAYER: + this.drawCenteredString(this.fontRenderer, GCCoreUtil.translate("gui.space_race.create.remove_player.name"), this.width / 2, this.height / 2 - this.height / 3 - 15, 16777215); + break; + case DESIGN_FLAG: + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + + for (int x = 0; x < this.spaceRaceData.getFlagData().getWidth(); x++) + { + for (int y = 0; y < this.spaceRaceData.getFlagData().getHeight(); y++) + { + Vector3 color = this.spaceRaceData.getFlagData().getColorAt(x, y); + GL11.glColor4f(color.floatX(), color.floatY(), color.floatZ(), 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x, this.flagDesignerMinY + y * this.flagDesignerScale.y + 1 * this.flagDesignerScale.y, 0.0D) + .endVertex(); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x + 1 * this.flagDesignerScale.x, + this.flagDesignerMinY + y * this.flagDesignerScale.y + 1 * this.flagDesignerScale.y, 0.0D).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x + 1 * this.flagDesignerScale.x, this.flagDesignerMinY + y * this.flagDesignerScale.y, 0.0D) + .endVertex(); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x, this.flagDesignerMinY + y * this.flagDesignerScale.y, 0.0D).endVertex(); + tessellator.draw(); + } + } + + if (this.checkboxShowGrid != null && this.checkboxShowGrid.isSelected != null && this.checkboxShowGrid.isSelected) + { + for (int x = 0; x <= this.spaceRaceData.getFlagData().getWidth(); x++) + { + worldRenderer.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x, this.flagDesignerMinY, this.zLevel).color(0.0F, 0.0F, 0.0F, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + x * this.flagDesignerScale.x, this.flagDesignerMinY + this.flagDesignerHeight, this.zLevel).color(0.0F, 0.0F, 0.0F, 1.0F) + .endVertex(); + tessellator.draw(); + } + + for (int y = 0; y <= this.spaceRaceData.getFlagData().getHeight(); y++) + { + worldRenderer.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(this.flagDesignerMinX, this.flagDesignerMinY + y * this.flagDesignerScale.y, this.zLevel).color(0.0F, 0.0F, 0.0F, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.flagDesignerWidth, this.flagDesignerMinY + y * this.flagDesignerScale.y, this.zLevel).color(0.0F, 0.0F, 0.0F, 1.0F) + .endVertex(); + tessellator.draw(); + } + } + + if (!(this.lastMousePressed && this.checkboxSelector.isSelected != null && this.checkboxSelector.isSelected) && this.selectionMaxX - this.selectionMinX > 0 + && this.selectionMaxY - this.selectionMinY > 0) + { + worldRenderer.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR); + float col = (float) (Math.sin(this.ticksPassed * 0.3) * 0.4 + 0.1); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMinX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMinY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMaxX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMinY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMaxX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMaxY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMinX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMaxY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + worldRenderer.pos(this.flagDesignerMinX + this.selectionMinX * this.flagDesignerScale.x, this.flagDesignerMinY + this.selectionMinY * this.flagDesignerScale.y, this.zLevel) + .color(col, col, col, 1.0F).endVertex(); + tessellator.draw(); + } + + int guiRight = this.width / 2 + this.width / 3; + int guiBottom = this.height / 2 + this.height / 4; + float x1 = this.sliderColorR.x; + float x2 = guiRight - 10; + float y1 = guiBottom - 10 - (x2 - x1); + float y2 = guiBottom - 10; + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(x2, y1, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(x1, y1, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(x1, y2, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer.pos(x2, y2, this.zLevel).color(0, 0, 0, 1.0F).endVertex(); + tessellator.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) x2 - 1, (double) y1 + 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x1 + 1, (double) y1 + 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x1 + 1, (double) y2 - 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x2 - 1, (double) y2 - 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + tessellator.draw(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + break; + case CHANGE_TEAM_COLOR: + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + x1 = this.sliderColorG.x; + x2 = this.sliderColorG.x + this.sliderColorG.getButtonWidth(); + y1 = this.height / 2 - this.height / 3 + 5; + y2 = this.sliderColorG.y - 5; + float xDiff = x2 - x1; + float yDiff = y2 - y1; + + if (xDiff > yDiff) + { + x1 = this.sliderColorG.x + this.sliderColorG.getButtonWidth() / 2 - yDiff / 2; + x2 = this.sliderColorG.x + this.sliderColorG.getButtonWidth() / 2 + yDiff / 2; + } else + { + y2 = y1 + xDiff; + } + + tessellator = Tessellator.getInstance(); + worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos((double) x2 - 1, (double) y1 + 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x1 + 1, (double) y1 + 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x1 + 1, (double) y2 - 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + worldRenderer.pos((double) x2 - 1, (double) y2 - 1, this.zLevel) + .color(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue(), 1.0F).endVertex(); + tessellator.draw(); + + this.spaceRaceData.setTeamColor(new Vector3(this.sliderColorR.getNormalizedValue(), this.sliderColorG.getNormalizedValue(), this.sliderColorB.getNormalizedValue())); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + break; + } + } + + super.drawScreen(par1, par2, par3); + + if (this.currentState == EnumSpaceRaceGui.ADD_PLAYER && this.gradientListAddPlayers != null) + { + this.gradientListAddPlayers.draw(par1, par2); + } + + if (this.currentState == EnumSpaceRaceGui.REMOVE_PLAYER && this.gradientListRemovePlayers != null) + { + this.gradientListRemovePlayers.draw(par1, par2); + } + + for (GuiButton button : this.buttonList) + { + if (button instanceof GuiElementSlider) + { + ((GuiElementSlider) button).drawHoveringText(); + } + } + } + + private void markDirty() + { + this.isDirty = true; + } + + private void drawFlagButton() + { + GL11.glPushMatrix(); + GL11.glTranslatef(this.buttonFlag_xPosition + 2.9F, this.buttonFlag_yPosition + this.buttonFlag_height + 1 - 4, 0); + GL11.glScalef(74.0F, 74.0F, 1F); + GL11.glTranslatef(0.0F, 0.36F, 1.0F); + GL11.glScalef(1.0F, 1.0F, -1F); + this.dummyFlag.flagData = this.spaceRaceData.getFlagData(); + this.dummyModel.renderFlag(this.dummyFlag, this.ticksPassed); + GL11.glColor3f(1, 1, 1); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.0F, 500.0F); + int color = this.buttonFlag_hover ? 170 : 100; + if (this.canEdit) + { + String message = GCCoreUtil.translate("gui.space_race.create.customize.name"); + this.fontRenderer.drawString(message, this.buttonFlag_xPosition + this.buttonFlag_width / 2 - this.fontRenderer.getStringWidth(message) / 2, + this.buttonFlag_yPosition + this.buttonFlag_height / 2 - 5, ColorUtil.to32BitColor(255, color, color, color), this.buttonFlag_hover); + } + GL11.glPopMatrix(); + + if (this.buttonFlag_hover) + { + Gui.drawRect(this.buttonFlag_xPosition, this.buttonFlag_yPosition, this.buttonFlag_xPosition + this.buttonFlag_width, this.buttonFlag_yPosition + this.buttonFlag_height, + ColorUtil.to32BitColor(255, 50, 50, 50)); + } + + Gui.drawRect(this.buttonFlag_xPosition + this.buttonFlag_width - 1, this.buttonFlag_yPosition, this.buttonFlag_xPosition + this.buttonFlag_width, + this.buttonFlag_yPosition + this.buttonFlag_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonFlag_xPosition, this.buttonFlag_yPosition, this.buttonFlag_xPosition + 1, this.buttonFlag_yPosition + this.buttonFlag_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonFlag_xPosition, this.buttonFlag_yPosition, this.buttonFlag_xPosition + this.buttonFlag_width, this.buttonFlag_yPosition + 1, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonFlag_xPosition, this.buttonFlag_yPosition + this.buttonFlag_height - 1, this.buttonFlag_xPosition + this.buttonFlag_width, + this.buttonFlag_yPosition + this.buttonFlag_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + } + + private void drawColorButton() + { + Gui.drawRect(this.buttonTeamColor_xPosition + 2, this.buttonTeamColor_yPosition + 2, this.buttonTeamColor_xPosition + this.buttonTeamColor_width - 2, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height - 2, ColorUtil.to32BitColor(255, (int) (this.spaceRaceData.getTeamColor().x * 255.0F), + (int) (this.spaceRaceData.getTeamColor().y * 255.0F), (int) (this.spaceRaceData.getTeamColor().z * 255.0F))); + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.0F, 500.0F); + int color = this.buttonTeamColor_hover ? 170 : 100; + if (canEdit) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.change_color.name.0"), + this.buttonTeamColor_xPosition + this.buttonTeamColor_width / 2 - this.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.change_color.name.0")) / 2, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height / 2 - 13, ColorUtil.to32BitColor(255, color, color, color), this.buttonTeamColor_hover); + } + this.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.change_color.name.1"), + this.buttonTeamColor_xPosition + this.buttonTeamColor_width / 2 - this.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.change_color.name.1")) / 2, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height / 2 - (canEdit ? 3 : 9), ColorUtil.to32BitColor(255, color, color, color), this.buttonTeamColor_hover); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.change_color.name.2"), + this.buttonTeamColor_xPosition + this.buttonTeamColor_width / 2 - this.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.change_color.name.2")) / 2, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height / 2 + (canEdit ? 7 : 1), ColorUtil.to32BitColor(255, color, color, color), this.buttonTeamColor_hover); + GL11.glPopMatrix(); + + if (this.buttonTeamColor_hover) + { + Gui.drawRect(this.buttonTeamColor_xPosition, this.buttonTeamColor_yPosition, this.buttonTeamColor_xPosition + this.buttonTeamColor_width, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height, ColorUtil.to32BitColor(55, 50, 50, 50)); + } + + Gui.drawRect(this.buttonTeamColor_xPosition + this.buttonTeamColor_width - 1, this.buttonTeamColor_yPosition, this.buttonTeamColor_xPosition + this.buttonTeamColor_width, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonTeamColor_xPosition, this.buttonTeamColor_yPosition, this.buttonTeamColor_xPosition + 1, this.buttonTeamColor_yPosition + this.buttonTeamColor_height, + ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonTeamColor_xPosition, this.buttonTeamColor_yPosition, this.buttonTeamColor_xPosition + this.buttonTeamColor_width, this.buttonTeamColor_yPosition + 1, + ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(this.buttonTeamColor_xPosition, this.buttonTeamColor_yPosition + this.buttonTeamColor_height - 1, this.buttonTeamColor_xPosition + this.buttonTeamColor_width, + this.buttonTeamColor_yPosition + this.buttonTeamColor_height, ColorUtil.to32BitColor(255, 0, 0, 0)); + } + + @Override + public void drawWorldBackground(int i) + { + if (this.mc.world != null) + { + int scaleX = Math.min(this.ticksPassed * 14, this.width / 3); + int scaleY = Math.min(this.ticksPassed * 14, this.height / 3); + + if (scaleX == this.width / 3 && scaleY == this.height / 3 && !this.initialized) + { + this.initialized = true; + this.initGui(); + } + + this.drawGradientRect(this.width / 2 - scaleX, this.height / 2 - scaleY, this.width / 2 + scaleX, this.height / 2 + scaleY, -1072689136, -804253680); + } else + { + this.drawBackground(i); + } + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + if (checkbox.equals(this.checkboxEraser)) + { + if (newSelected) + { + this.sliderEraserSize.visible = true; + + if (this.checkboxPaintbrush.isSelected) + { + this.sliderBrushSize.visible = false; + this.checkboxPaintbrush.isSelected = false; + } else if (this.checkboxSelector.isSelected) + { + this.checkboxSelector.isSelected = false; + } else if (this.checkboxColorSelector.isSelected) + { + this.checkboxColorSelector.isSelected = false; + } + } else + { + this.sliderEraserSize.visible = false; + } + } else if (checkbox.equals(this.checkboxPaintbrush)) + { + if (newSelected) + { + this.sliderBrushSize.visible = true; + + if (this.checkboxEraser.isSelected) + { + this.sliderEraserSize.visible = false; + this.checkboxEraser.isSelected = false; + } else if (this.checkboxSelector.isSelected) + { + this.checkboxSelector.isSelected = false; + } else if (this.checkboxColorSelector.isSelected) + { + this.checkboxColorSelector.isSelected = false; + } + } else + { + this.sliderBrushSize.visible = false; + } + } else if (checkbox.equals(this.checkboxSelector)) + { + if (newSelected) + { + if (this.checkboxEraser.isSelected) + { + this.sliderEraserSize.visible = false; + this.checkboxEraser.isSelected = false; + } else if (this.checkboxPaintbrush.isSelected) + { + this.sliderBrushSize.visible = false; + this.checkboxPaintbrush.isSelected = false; + } else if (this.checkboxColorSelector.isSelected) + { + this.checkboxColorSelector.isSelected = false; + } + } + } else if (checkbox.equals(this.checkboxColorSelector)) + { + if (newSelected) + { + if (this.checkboxEraser.isSelected) + { + this.sliderEraserSize.visible = false; + this.checkboxEraser.isSelected = false; + } else if (this.checkboxPaintbrush.isSelected) + { + this.sliderBrushSize.visible = false; + this.checkboxPaintbrush.isSelected = false; + } else if (this.checkboxSelector.isSelected) + { + this.checkboxSelector.isSelected = false; + } + } + } + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return checkbox.equals(this.checkboxPaintbrush); + + } + + @Override + public void onIntruderInteraction() + { + + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return this.canEdit; + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + if (textBox == this.textBoxRename) + { + if (!newText.equals(this.spaceRaceData.getTeamName())) + { + this.spaceRaceData.setTeamName(newText); + this.markDirty(); + } + } + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + if (textBox == this.textBoxRename) + { + return this.spaceRaceData.getTeamName(); + } + + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + return ColorUtil.to32BitColor(255, 255, 255, 255); + } + + private File writeFlagToFile() + { + try + { + String dirName = Minecraft.getMinecraft().gameDir.getAbsolutePath(); + File directory = new File(dirName, "assets"); + boolean success = true; + if (!directory.exists()) + { + success = directory.mkdir(); + } + if (success) + { + directory = new File(directory, "flagCache"); + if (!directory.exists()) + { + success = directory.mkdir(); + } + + if (success) + { + File file = new File(directory, this.spaceRaceData.getSpaceRaceID() + ".png"); + ImageIO.write(this.spaceRaceData.getFlagData().toBufferedImage(), "png", file); + return file; + } + } + } catch (IOException e) + { + e.printStackTrace(); + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiPreLaunchChecklist.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiPreLaunchChecklist.java new file mode 100644 index 00000000..4dc5fa66 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiPreLaunchChecklist.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckboxPreLaunch; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GuiPreLaunchChecklist extends GuiScreen implements GuiElementCheckboxPreLaunch.ICheckBoxCallback +{ + + private static final ResourceLocation bookGuiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/checklist_book.png"); + private int bookImageWidth = 192; + private int bookImageHeight = 192; + private List> checklistKeys; + private int currPage = 0; + private int bookTotalPages; + private NextPageButton buttonNextPage; + private NextPageButton buttonPreviousPage; + private NBTTagCompound tagCompound; + private Map checkboxToKeyMap = Maps.newHashMap(); + + public GuiPreLaunchChecklist(List> checklistKeys, NBTTagCompound tagCompound) + { + this.tagCompound = tagCompound != null ? tagCompound : new NBTTagCompound(); + this.checklistKeys = checklistKeys; + } + + @Override + public void initGui() + { + this.buttonList.clear(); + this.checkboxToKeyMap.clear(); + + int i = (this.width - this.bookImageWidth) / 2; + int j = 2; + this.buttonList.add(this.buttonNextPage = new NextPageButton(0, i + 120, j + 154, true)); + this.buttonList.add(this.buttonPreviousPage = new NextPageButton(1, i + 38, j + 154, false)); + + int yPos = 25; + int index = 2; + int page = 0; + + for (List e : this.checklistKeys) + { + if (e.isEmpty()) + { + continue; + } + String title = e.get(0); + List checkboxes = e.subList(1, e.size()); + GuiElementCheckboxPreLaunch element = new GuiElementCheckboxPreLaunch(index, this, this.width / 2 - 73 + 11, yPos, GCCoreUtil.translate(title), 0); + int size = element.willFit(152 - yPos); + if (size >= 0) + { + if (page == this.currPage) + { + this.buttonList.add(element); + this.checkboxToKeyMap.put(element.id, title); + index++; + } + yPos += size + mc.fontRenderer.FONT_HEIGHT / 2; + } else + { + page++; + yPos = 25; + size = element.willFit(152 - yPos); + element = new GuiElementCheckboxPreLaunch(index, this, this.width / 2 - 73 + 11, yPos, GCCoreUtil.translate(title), 0); + + if (page == this.currPage) + { + this.buttonList.add(element); + this.checkboxToKeyMap.put(element.id, title); + index++; + } + yPos += size + mc.fontRenderer.FONT_HEIGHT / 2; + } + + for (String checkbox : checkboxes) + { + element = new GuiElementCheckboxPreLaunch(index, this, this.width / 2 - 73 + 16, yPos, GCCoreUtil.translate("checklist." + checkbox + ".key"), 0); + size = element.willFit(152 - yPos); + if (size >= 0) + { + if (page == this.currPage) + { + this.buttonList.add(element); + this.checkboxToKeyMap.put(element.id, title + "." + checkbox + ".key"); + index++; + } + yPos += size + mc.fontRenderer.FONT_HEIGHT / 2; + } else + { + page++; + yPos = 25; + size = element.willFit(152 - yPos); + element = new GuiElementCheckboxPreLaunch(index, this, this.width / 2 - 73 + 16, yPos, GCCoreUtil.translate("checklist." + checkbox + ".key"), 0); + + if (page == this.currPage) + { + this.buttonList.add(element); + this.checkboxToKeyMap.put(element.id, title + "." + checkbox + ".key"); + index++; + } + yPos += size + mc.fontRenderer.FONT_HEIGHT / 2; + } + } + } + + bookTotalPages = page + 1; + this.updateButtons(); + } + + private void updateButtons() + { + this.buttonNextPage.visible = this.currPage < this.bookTotalPages - 1; + this.buttonPreviousPage.visible = this.currPage > 0; + } + + private void onDataChange() + { + for (GuiButton button : this.buttonList) + { + if (button instanceof GuiElementCheckboxPreLaunch) + { + this.tagCompound.setBoolean(this.checkboxToKeyMap.get(button.id), ((GuiElementCheckboxPreLaunch) button).isSelected); + } + } + + // Send changed tag compound to server + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_UPDATE_CHECKLIST, GCCoreUtil.getDimensionID(mc.player.world), new Object[] + {this.tagCompound})); + + // Update client item + ItemStack stack = mc.player + .getHeldItem(EnumHand.MAIN_HAND /* + * TODO Support off-hand use + */); + NBTTagCompound tagCompound = stack.getTagCompound(); + if (tagCompound == null) + { + tagCompound = new NBTTagCompound(); + } + tagCompound.setTag("checklistData", this.tagCompound); + stack.setTagCompound(tagCompound); + } + + @Override + protected void actionPerformed(GuiButton buttonClicked) + { + if (buttonClicked == this.buttonNextPage) + { + this.currPage++; + this.initGui(); + } else if (buttonClicked == this.buttonPreviousPage) + { + this.currPage--; + this.initGui(); + } + } + + @Override + public void updateScreen() + { + + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(bookGuiTexture); + int i = (this.width - this.bookImageWidth) / 2; + int j = 2; + this.drawTexturedModalRect(i, j, 0, 0, this.bookImageWidth, this.bookImageHeight); + + super.drawScreen(par1, par2, par3); + } + + @Override + public void onSelectionChanged(GuiElementCheckboxPreLaunch element, boolean newSelected) + { + // Set all 'sub-boxes' to the new selection + boolean started = false; + for (int i = 2; i < this.buttonList.size(); ++i) + { + GuiButton button = this.buttonList.get(i); + if (started) + { + if (button.x > element.x) + { + ((GuiElementCheckboxPreLaunch) button).isSelected = newSelected; + } else + { + break; + } + } else if (button == element) + { + started = true; + } + } + + this.onDataChange(); + } + + @Override + public boolean canPlayerEdit(GuiElementCheckboxPreLaunch checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckboxPreLaunch checkbox) + { + return this.tagCompound.getBoolean(this.checkboxToKeyMap.get(checkbox.id)); + } + + @Override + public void onIntruderInteraction() + { + } + + @SideOnly(Side.CLIENT) + static class NextPageButton extends GuiButton + { + + private final boolean forward; + + public NextPageButton(int id, int x, int y, boolean forward) + { + super(id, x, y, 23, 13, ""); + this.forward = forward; + } + + @Override + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partial) + { + if (this.visible) + { + boolean flag = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.getTextureManager().bindTexture(bookGuiTexture); + int i = 0; + int j = 192; + + if (flag) + { + i += 23; + } + + if (!this.forward) + { + j += 13; + } + + this.drawTexturedModalRect(this.x, this.y, i, j, 23, 13); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiStarBackground.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiStarBackground.java new file mode 100644 index 00000000..af3c8d52 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiStarBackground.java @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.GLU; + +public abstract class GuiStarBackground extends GuiScreen +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/stars.png"); + private static final ResourceLocation blackTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/black.png"); + + public void drawBlackBackground() + { + final ScaledResolution var5 = ClientUtil.getScaledRes(this.mc, this.mc.displayWidth, this.mc.displayHeight); + final int var6 = var5.getScaledWidth(); + final int var7 = var5.getScaledHeight(); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_ALPHA_TEST); + this.mc.getTextureManager().bindTexture(GuiStarBackground.blackTexture); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.0D, var7, -90.0D).tex(0.0D, 1.0D).endVertex(); + worldRenderer.pos(var6, var7, -90.0D).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(var6, 0.0D, -90.0D).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(0.0D, 0.0D, -90.0D).tex(0.0D, 0.0D).endVertex(); + tess.draw(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + private void drawPanorama2(float par1) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GLU.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + final byte var5 = 1; + + for (int var6 = 0; var6 < var5 * var5; ++var6) + { + GL11.glPushMatrix(); + final float var7 = ((float) (var6 % var5) / (float) var5 - 0.5F) / 128.0F; + final float var8 = ((float) (var6 / var5) / (float) var5 - 0.5F) / 128.0F; + final float var9 = 0.0F; + + float mY; + float mX; + + if (Mouse.getY() < this.height) + { + mY = (-this.height + Mouse.getY()) / 100F; + } else + { + mY = (-this.height + Mouse.getY()) / 100F; + } + + mX = (this.width - Mouse.getX()) / 100F; + + this.doCustomTranslation(0, var7, var8, var9, mX, mY); + + for (int var10 = 0; var10 < 9; ++var10) + { + GL11.glPushMatrix(); + + if (var10 == 1) + { + GL11.glTranslatef(1.96F, 0.0F, 0.0F); + } + + if (var10 == 2) + { + GL11.glTranslatef(-1.96F, 0.0F, 0.0F); + } + + if (var10 == 3) + { + GL11.glTranslatef(0.0F, 1.96F, 0.0F); + } + + if (var10 == 4) + { + GL11.glTranslatef(0.0F, -1.96F, 0.0F); + } + + if (var10 == 5) + { + GL11.glTranslatef(-1.96F, -1.96F, 0.0F); + } + + if (var10 == 6) + { + GL11.glTranslatef(-1.96F, 1.96F, 0.0F); + } + + if (var10 == 7) + { + GL11.glTranslatef(1.96F, -1.96F, 0.0F); + } + + if (var10 == 8) + { + GL11.glTranslatef(1.96F, 1.96F, 0.0F); + } + + this.mc.getTextureManager().bindTexture(GuiStarBackground.backgroundTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); + worldRenderer.pos(-1.0D, -1.0D, 1.0D).tex(0.0F + 1, 0.0F + 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(1.0D, -1.0D, 1.0D).tex(1.0F - 1, 0.0F + 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(1.0D, 1.0D, 1.0D).tex(1.0F - 1, 1.0F - 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(-1.0D, 1.0D, 1.0D).tex(0.0F + 1, 1.0F - 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + tess.draw(); + GL11.glPopMatrix(); + } + + GL11.glPopMatrix(); + } + + worldRenderer.setTranslation(0.0D, 0.0D, 0.0D); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + + private void drawPanorama(float par1) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GLU.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + final byte var5 = 1; + + for (int var6 = 0; var6 < var5 * var5; ++var6) + { + GL11.glPushMatrix(); + final float var7 = ((float) (var6 % var5) / (float) var5 - 0.5F) / 64.0F; + final float var8 = ((float) (var6 / var5) / (float) var5 - 0.5F) / 64.0F; + final float var9 = 0.0F; + + float mY; + float mX; + + if (Mouse.getY() < this.height) + { + mY = (-this.height + Mouse.getY()) / 100F; + } else + { + mY = (-this.height + Mouse.getY()) / 100F; + } + + mX = (this.width - Mouse.getX()) / 100F; + + this.doCustomTranslation(1, var7, var8, var9, mX, mY); + + GL11.glRotatef(MathHelper.sin(par1 / 1000.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-par1 * 0.005F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(41, 0, 0, 1); + + for (int var10 = 0; var10 < 6; ++var10) + { + GL11.glPushMatrix(); + + if (var10 == 1) + { + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + } + + if (var10 == 2) + { + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + } + + if (var10 == 3) + { + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + } + + if (var10 == 4) + { + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + } + + if (var10 == 5) + { + GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); + } + + this.mc.getTextureManager().bindTexture(GuiStarBackground.backgroundTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); + worldRenderer.pos(-1.0D, -1.0D, 1.0D).tex(0.0F + 1, 0.0F + 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(1.0D, -1.0D, 1.0D).tex(1.0F - 1, 0.0F + 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(1.0D, 1.0D, 1.0D).tex(1.0F - 1, 1.0F - 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + worldRenderer.pos(-1.0D, 1.0D, 1.0D).tex(0.0F + 1, 1.0F - 1).color(1.0F, 1.0F, 1.0F, 1.0F / (var6 + 1)).endVertex(); + tess.draw(); + GL11.glPopMatrix(); + } + + GL11.glPopMatrix(); + } + + worldRenderer.setTranslation(0.0D, 0.0D, 0.0D); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + + private void rotateAndBlurSkybox() + { + this.mc.getTextureManager().bindTexture(GuiStarBackground.backgroundTexture); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColorMask(true, true, true, false); + GL11.glPushMatrix(); + GL11.glPopMatrix(); + GL11.glColorMask(true, true, true, true); + } + + public void renderSkybox() + { + GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + GL11.glPushMatrix(); + GL11.glScalef(1.0F, 0.0F, 1.0F); + this.drawPanorama(1); + this.drawPanorama2(1); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_TEXTURE_2D); + this.rotateAndBlurSkybox(); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); + final float var5 = this.width > this.height ? 120.0F / this.width : 120.0F / this.height; + final float var6 = this.height * var5 / 256.0F; + final float var7 = this.width * var5 / 256.0F; + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + final int var8 = this.width; + final int var9 = this.height; + worldRenderer.pos(0.0D, var9, this.zLevel).tex(0.5F - var6, 0.5F + var7).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + worldRenderer.pos(var8, var9, this.zLevel).tex(0.5F - var6, 0.5F - var7).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + worldRenderer.pos(var8, 0.0D, this.zLevel).tex(0.5F + var6, 0.5F - var7).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + worldRenderer.pos(0.0D, 0.0D, this.zLevel).tex(0.5F + var6, 0.5F + var7).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + tess.draw(); + GL11.glPopMatrix(); + } + + public abstract void doCustomTranslation(int type, float coord1, float coord2, float coord3, float mX, float mY); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiTeleporting.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiTeleporting.java new file mode 100644 index 00000000..e6cdf687 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/GuiTeleporting.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.gui.GuiScreen; + +public class GuiTeleporting extends GuiScreen +{ + + private final int targetDimensionID; + protected String message; + + public GuiTeleporting(int targetDimensionID) + { + this.targetDimensionID = targetDimensionID; + String[] possibleStrings = new String[] + {"Taking one small step", "Taking one giant leap", "Prepare for entry!"}; + this.message = possibleStrings[(int) (Math.random() * possibleStrings.length)]; + TickHandlerClient.teleportingGui = this; + } + + @Override + public void initGui() + { + super.initGui(); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + super.drawScreen(mouseX, mouseY, partialTicks); + this.drawBackground(0); + this.drawCenteredString(this.fontRenderer, this.message, this.width / 2, this.height / 2, ColorUtil.to32BitColor(255, 255, 255, 255)); + } + + @Override + public void updateScreen() + { + super.updateScreen(); + if (mc.player != null && mc.player.world != null) + { + // Screen will exit when the player is in the target dimension and + // has started moving down + if (mc.player.world.provider.getDimension() == this.targetDimensionID) + { + if ((mc.player.world.provider instanceof WorldProviderSpaceStation || (mc.player.posY - mc.player.lastTickPosY) < 0.0)) + { + mc.displayGuiScreen(null); + TickHandlerClient.teleportingGui = null; + } + } + } + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/InventoryTabGalacticraft.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/InventoryTabGalacticraft.java new file mode 100644 index 00000000..555a5884 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/gui/screen/InventoryTabGalacticraft.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.gui.screen; + +import micdoodle8.mods.galacticraft.api.client.tabs.AbstractTab; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class InventoryTabGalacticraft extends AbstractTab +{ + + public InventoryTabGalacticraft() + { + super(0, 0, 0, new ItemStack(GCItems.oxMask)); + } + + @Override + public void onTabClicked() + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_OPEN_EXTENDED_INVENTORY, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {})); + ClientProxyCore.playerClientHandler.onBuild(0, FMLClientHandler.instance().getClientPlayerEntity()); + } + + @Override + public boolean shouldAddToList() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/GalacticraftJEI.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/GalacticraftJEI.java new file mode 100644 index 00000000..8890142f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/GalacticraftJEI.java @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei; + +import java.util.LinkedList; +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.BlankModPlugin; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.IJeiRuntime; +import mezz.jei.api.IModRegistry; +import mezz.jei.api.IRecipeRegistry; +import mezz.jei.api.JEIPlugin; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; +import mezz.jei.api.recipe.IRecipeWrapper; +import mezz.jei.api.recipe.IRecipeWrapperFactory; +import mezz.jei.api.recipe.IStackHelper; +import mezz.jei.api.recipe.VanillaRecipeCategoryUid; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.api.recipe.ShapedRecipesGC; +import micdoodle8.mods.galacticraft.api.recipe.ShapelessOreRecipeGC; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.client.jei.buggy.BuggyRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.buggy.BuggyRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.buggy.BuggyRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator.CircuitFabricatorRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator.CircuitFabricatorRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator.CircuitFabricatorRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor.IngotCompressorRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor.IngotCompressorShapedRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor.IngotCompressorShapelessRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor.OxygenCompressorRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor.OxygenCompressorRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor.OxygenCompressorRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.refinery.RefineryRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.refinery.RefineryRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.refinery.RefineryRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeCategory; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeMaker; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeWrapper; +import micdoodle8.mods.galacticraft.core.recipe.ShapedRecipeNBT; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +@JEIPlugin +public class GalacticraftJEI extends BlankModPlugin +{ + + private static IModRegistry registryCached = null; + private static IRecipeRegistry recipesCached = null; + + private static boolean hiddenSteel = false; + private static boolean hiddenAdventure = false; + public static List hidden = new LinkedList<>(); + private static IRecipeCategory ingotCompressorCategory; + + @Override + public void register(@Nonnull IModRegistry registry) + { + registryCached = registry; + IStackHelper stackHelper = registry.getJeiHelpers().getStackHelper(); + + registry.handleRecipes(INasaWorkbenchRecipe.class, Tier1RocketRecipeWrapper::new, RecipeCategories.ROCKET_T1_ID); + registry.handleRecipes(INasaWorkbenchRecipe.class, BuggyRecipeWrapper::new, RecipeCategories.BUGGY_ID); + registry.handleRecipes(CircuitFabricatorRecipeWrapper.class, recipe -> recipe, RecipeCategories.CIRCUIT_FABRICATOR_ID); + registry.handleRecipes(ShapedRecipesGC.class, IngotCompressorShapedRecipeWrapper::new, RecipeCategories.INGOT_COMPRESSOR_ID); + registry.handleRecipes(ShapelessOreRecipeGC.class, new IRecipeWrapperFactory() + { + + @Override + public IRecipeWrapper getRecipeWrapper(ShapelessOreRecipeGC recipe) + { + return new IngotCompressorShapelessRecipeWrapper(stackHelper, recipe); + } + }, RecipeCategories.INGOT_COMPRESSOR_ID); + registry.handleRecipes(RefineryRecipeWrapper.class, recipe -> recipe, RecipeCategories.REFINERY_ID); + registry.handleRecipes(OxygenCompressorRecipeWrapper.class, recipe -> recipe, RecipeCategories.OXYGEN_COMPRESSOR_ID); + registry.handleRecipes(ShapedRecipeNBT.class, NBTSensitiveShapedRecipeWrapper::new, VanillaRecipeCategoryUid.CRAFTING); + + registry.addRecipes(Tier1RocketRecipeMaker.getRecipesList(), RecipeCategories.ROCKET_T1_ID); + registry.addRecipes(BuggyRecipeMaker.getRecipesList(), RecipeCategories.BUGGY_ID); + registry.addRecipes(CircuitFabricatorRecipeMaker.getRecipesList(), RecipeCategories.CIRCUIT_FABRICATOR_ID); + registry.addRecipes(CompressorRecipes.getRecipeListAll(), RecipeCategories.INGOT_COMPRESSOR_ID); + registry.addRecipes(OxygenCompressorRecipeMaker.getRecipesList(), RecipeCategories.OXYGEN_COMPRESSOR_ID); + registry.addRecipes(RefineryRecipeMaker.getRecipesList(), RecipeCategories.REFINERY_ID); + + registry.addRecipeCatalyst(new ItemStack(GCBlocks.nasaWorkbench), RecipeCategories.ROCKET_T1_ID, RecipeCategories.BUGGY_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.compactNasaWorkbench), RecipeCategories.ROCKET_T1_ID, RecipeCategories.BUGGY_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.machineBase2, 1, 4), RecipeCategories.CIRCUIT_FABRICATOR_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.machineBase, 1, 12), RecipeCategories.INGOT_COMPRESSOR_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.machineBase2, 1, 0), RecipeCategories.INGOT_COMPRESSOR_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.oxygenCompressor), RecipeCategories.OXYGEN_COMPRESSOR_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.refinery), RecipeCategories.REFINERY_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.crafting), VanillaRecipeCategoryUid.CRAFTING); + registry.getRecipeTransferRegistry().addRecipeTransferHandler(new MagneticCraftingTransferInfo()); + + this.addInformationPages(registry); + GCItems.hideItemsJEI(registry.getJeiHelpers().getIngredientBlacklist()); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registry) + { + IGuiHelper guiHelper = registry.getJeiHelpers().getGuiHelper(); + ingotCompressorCategory = new IngotCompressorRecipeCategory(guiHelper); + registry.addRecipeCategories(new Tier1RocketRecipeCategory(guiHelper), new BuggyRecipeCategory(guiHelper), new CircuitFabricatorRecipeCategory(guiHelper), ingotCompressorCategory, + new OxygenCompressorRecipeCategory(guiHelper), new RefineryRecipeCategory(guiHelper)); + } + + private void addInformationPages(IModRegistry registry) + { + registry.addIngredientInfo(new ItemStack(GCBlocks.oxygenPipe), ItemStack.class, GCCoreUtil.translate("jei.fluid_pipe.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.fuelLoader), ItemStack.class, GCCoreUtil.translate("jei.fuel_loader.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.oxygenCollector), ItemStack.class, GCCoreUtil.translate("jei.oxygen_collector.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.oxygenDistributor), ItemStack.class, GCCoreUtil.translate("jei.oxygen_distributor.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.oxygenSealer), ItemStack.class, GCCoreUtil.translate("jei.oxygen_sealer.info")); + if (CompatibilityManager.isAppEngLoaded()) + { + registry.addIngredientInfo(new ItemStack(GCBlocks.machineBase2), ItemStack.class, new String[] + {GCCoreUtil.translate("jei.electric_compressor.info"), GCCoreUtil.translate("jei.electric_compressor.appeng.info")}); + } else + { + registry.addIngredientInfo(new ItemStack(GCBlocks.machineBase2), ItemStack.class, GCCoreUtil.translate("jei.electric_compressor.info")); + } + registry.addIngredientInfo(new ItemStack(GCBlocks.crafting), ItemStack.class, GCCoreUtil.translate("jei.magnetic_crafting.info")); + registry.addIngredientInfo(new ItemStack(GCBlocks.brightLamp), ItemStack.class, GCCoreUtil.translate("jei.arc_lamp.info")); + registry.addIngredientInfo(new ItemStack(GCItems.wrench), ItemStack.class, GCCoreUtil.translate("jei.wrench.info")); + } + + @Override + public void onRuntimeAvailable(IJeiRuntime rt) + { + recipesCached = rt.getRecipeRegistry(); + } + + public static void updateHidden(boolean hideSteel, boolean hideAdventure) + { + boolean changeHidden = false; + if (hideSteel != hiddenSteel) + { + hiddenSteel = hideSteel; + changeHidden = true; + } + if (hideAdventure != hiddenAdventure) + { + hiddenAdventure = hideAdventure; + changeHidden = true; + } + if (changeHidden && recipesCached != null) + { + unhide(); + List toHide = CompressorRecipes.getRecipeListHidden(hideSteel, hideAdventure); + hidden.clear(); + List allRW = recipesCached.getRecipeWrappers(ingotCompressorCategory); + for (IRecipe recipe : toHide) + { + hidden.add(recipesCached.getRecipeWrapper(recipe, RecipeCategories.INGOT_COMPRESSOR_ID)); + } + hide(); + } + } + + private static void hide() + { + for (IRecipeWrapper wrapper : hidden) + { + recipesCached.hideRecipe(wrapper); + } + } + + private static void unhide() + { + for (IRecipeWrapper wrapper : hidden) + { + recipesCached.unhideRecipe(wrapper); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/MagneticCraftingTransferInfo.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/MagneticCraftingTransferInfo.java new file mode 100644 index 00000000..a0f3dc93 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/MagneticCraftingTransferInfo.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei; + +import java.util.ArrayList; +import java.util.List; +import mezz.jei.api.recipe.VanillaRecipeCategoryUid; +import mezz.jei.api.recipe.transfer.IRecipeTransferInfo; +import micdoodle8.mods.galacticraft.core.inventory.ContainerCrafting; +import net.minecraft.inventory.Slot; + +public class MagneticCraftingTransferInfo implements IRecipeTransferInfo +{ + + @Override + public Class getContainerClass() + { + return ContainerCrafting.class; + } + + @Override + public String getRecipeCategoryUid() + { + return VanillaRecipeCategoryUid.CRAFTING; + } + + // Crafting matrix inventory slots + @Override + public List getRecipeSlots(ContainerCrafting container) + { + List slots = new ArrayList<>(); + for (int i = 1; i < 10; i++) + { + slots.add(container.getSlot(i)); + } + return slots; + } + + // Player inventory slots + @Override + public List getInventorySlots(ContainerCrafting container) + { + List slots = new ArrayList<>(); + for (int i = 10; i < container.inventorySlots.size(); i++) + { + slots.add(container.getSlot(i)); + } + return slots; + } + + @Override + public boolean canHandle(ContainerCrafting container) + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/NBTSensitiveShapedRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/NBTSensitiveShapedRecipeWrapper.java new file mode 100644 index 00000000..daa5df17 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/NBTSensitiveShapedRecipeWrapper.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei; + +import java.util.Arrays; +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.BlankRecipeWrapper; +import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper; +import micdoodle8.mods.galacticraft.core.recipe.ShapedRecipeNBT; +import net.minecraft.item.ItemStack; + +public class NBTSensitiveShapedRecipeWrapper extends BlankRecipeWrapper implements IShapedCraftingRecipeWrapper +{ + + @Nonnull private final ShapedRecipeNBT recipe; + + public NBTSensitiveShapedRecipeWrapper(@Nonnull ShapedRecipeNBT recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + List recipeItems = Arrays.asList(recipe.recipeItems); + ItemStack recipeOutput = recipe.getRecipeOutput(); + try + { + ingredients.setInputs(ItemStack.class, recipeItems); + if (recipeOutput != null) + { + ingredients.setOutput(ItemStack.class, recipeOutput); + } + } catch (RuntimeException e) + { + e.printStackTrace(); + } + } + + @Override + public int getWidth() + { + return 3; + } + + @Override + public int getHeight() + { + return 3; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/RecipeCategories.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/RecipeCategories.java new file mode 100644 index 00000000..530c71e2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/RecipeCategories.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei; + +public class RecipeCategories +{ + + public static final String ROCKET_T1_ID = "galacticraft.rocketT1"; + public static final String ROCKET_T2_ID = "galacticraft.rocketT2"; + public static final String ROCKET_T3_ID = "galacticraft.rocketT3"; + public static final String ROCKET_CARGO_ID = "galacticraft.cargoRocket"; + public static final String BUGGY_ID = "galacticraft.buggy"; + public static final String CIRCUIT_FABRICATOR_ID = "galacticraft.circuits"; + public static final String INGOT_COMPRESSOR_ID = "galacticraft.ingotcompressor"; + public static final String REFINERY_ID = "galacticraft.refinery"; + public static final String OXYGEN_COMPRESSOR_ID = "galacticraft.oxygencompressor"; + public static final String GAS_LIQUEFIER_ID = "galacticraft.gas_liquefier"; + public static final String METHANE_SYNTHESIZER_ID = "galacticraft.methaneSynthesizer"; + public static final String ASTRO_MINER_ID = "galacticraft.astroMiner"; + public static final String RECIPE_NBTSENSITIVE = "galacticraft.recipeShapedNBT"; +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeCategory.java new file mode 100644 index 00000000..f809f51d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeCategory.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.buggy; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.util.ResourceLocation; + +public class BuggyRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation buggyGuiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/buggybench.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public BuggyRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(buggyGuiTexture, 3, 4, 168, 130); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.BUGGY_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 35, 36); + itemstacks.init(1, true, 53, 36); + itemstacks.init(2, true, 71, 36); + itemstacks.init(3, true, 35, 54); + itemstacks.init(4, true, 71, 54); + itemstacks.init(5, true, 53, 54); + itemstacks.init(6, true, 35, 72); + itemstacks.init(7, true, 53, 72); + itemstacks.init(8, true, 71, 72); + itemstacks.init(9, true, 35, 90); + itemstacks.init(10, true, 53, 90); + itemstacks.init(11, true, 71, 90); + + itemstacks.init(12, true, 17, 36); + itemstacks.init(13, true, 17, 90); + itemstacks.init(14, true, 89, 36); + itemstacks.init(15, true, 89, 90); + itemstacks.init(16, true, 89, 7); + itemstacks.init(17, true, 115, 7); + itemstacks.init(18, true, 141, 7); + itemstacks.init(19, false, 138, 102); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeMaker.java new file mode 100644 index 00000000..a919db41 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeMaker.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.buggy; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.GCItems; +import net.minecraft.item.ItemStack; + +public class BuggyRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getBuggyBenchRecipes()) + { + int chests = BuggyRecipeMaker.countStorage(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } + + public static int countStorage(INasaWorkbenchRecipe recipe) + { + int count = 0; + ItemStack storage = new ItemStack(GCItems.partBuggy, 1, 2); + for (Entry e : recipe.getRecipeInput().entrySet()) + { + if (ItemStack.areItemsEqual(storage, e.getValue())) + count++; + } + return count; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeWrapper.java new file mode 100644 index 00000000..b80a2813 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/buggy/BuggyRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.buggy; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class BuggyRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public BuggyRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeCategory.java new file mode 100644 index 00000000..e2da52fc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeCategory.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +public class CircuitFabricatorRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation circuitFabTex = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/circuit_fabricator.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated progressBar; + + public CircuitFabricatorRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(circuitFabTex, 3, 4, 168, 101); + this.localizedName = GCCoreUtil.translate("tile.machine2.5.name"); + + IDrawableStatic progressBarDrawable = guiHelper.createDrawable(circuitFabTex, 176, 17, 51, 10); + this.progressBar = guiHelper.createAnimatedDrawable(progressBarDrawable, 70, IDrawableAnimated.StartDirection.LEFT, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.CIRCUIT_FABRICATOR_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(Minecraft minecraft) + { + this.progressBar.draw(minecraft, 85, 16); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 11, 12); + itemstacks.init(1, true, 70, 41); + itemstacks.init(2, true, 70, 59); + itemstacks.init(3, true, 118, 41); + itemstacks.init(4, true, 141, 15); + itemstacks.init(5, false, 148, 81); + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeMaker.java new file mode 100644 index 00000000..b680cce2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeMaker.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; + +public class CircuitFabricatorRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int count = 0; + for (List entry : CircuitFabricatorRecipes.getRecipes()) + { + CircuitFabricatorRecipeWrapper wrapper = new CircuitFabricatorRecipeWrapper(entry, CircuitFabricatorRecipes.getOutput(count)); + recipes.add(wrapper); + count++; + } + + return recipes; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeWrapper.java new file mode 100644 index 00000000..40909674 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/circuitfabricator/CircuitFabricatorRecipeWrapper.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.circuitfabricator; + +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class CircuitFabricatorRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final List input; + @Nonnull private final ItemStack output; + + public CircuitFabricatorRecipeWrapper(@Nonnull List objects, @Nonnull ItemStack output) + { + this.input = objects; + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, this.input); + ingredients.setOutput(ItemStack.class, this.output); + } + + public boolean equals(Object o) + { + if (o instanceof CircuitFabricatorRecipeWrapper) + { + CircuitFabricatorRecipeWrapper match = (CircuitFabricatorRecipeWrapper) o; + if (!ItemStack.areItemStacksEqual(match.output, this.output)) + return false; + for (int i = 0; i < this.input.size(); i++) + { + Object a = this.input.get(i); + Object b = match.input.get(i); + if (a == null && b == null) + continue; + + if (a instanceof ItemStack) + { + if (!(b instanceof ItemStack)) + return false; + if (!ItemStack.areItemStacksEqual((ItemStack) a, (ItemStack) b)) + return false; + } else if (a instanceof List) + { + if (!(b instanceof List)) + return false; + List aa = ((List) a); + List bb = ((List) b); + if (aa.size() != bb.size()) + return false; + for (int j = 0; j < aa.size(); j++) + { + ItemStack c = (ItemStack) aa.get(j); + ItemStack d = (ItemStack) bb.get(j); + if (!ItemStack.areItemStacksEqual((ItemStack) c, (ItemStack) d)) + return false; + } + } + } + return true; + } + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorRecipeCategory.java new file mode 100644 index 00000000..4a3b3f45 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorRecipeCategory.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor; + +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.GalacticraftJEI; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class IngotCompressorRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation compressorTex = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/ingot_compressor.png"); + private static final ResourceLocation compressorTexBlank = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/ingot_compressor_blank.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final IDrawable backgroundBlank; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated progressBar; + + private boolean drawNothing = false; + + public IngotCompressorRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(compressorTex, 18, 17, 137, 78); + this.backgroundBlank = guiHelper.createDrawable(compressorTexBlank, 18, 17, 137, 78); + this.localizedName = GCCoreUtil.translate("tile.machine.3.name"); + + IDrawableStatic progressBarDrawable = guiHelper.createDrawable(compressorTex, 176, 13, 52, 17); + this.progressBar = guiHelper.createAnimatedDrawable(progressBarDrawable, 70, IDrawableAnimated.StartDirection.LEFT, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.INGOT_COMPRESSOR_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + if (this.drawNothing) + { + return this.backgroundBlank; + } + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + if (!this.drawNothing) + this.progressBar.draw(minecraft, 59, 19); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + this.drawNothing = GalacticraftJEI.hidden.contains(recipeWrapper); + if (this.drawNothing) + return; + + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + for (int j = 0; j < 9; j++) + { + itemstacks.init(j, true, j % 3 * 18, j / 3 * 18); + } + + itemstacks.init(9, false, 119, 20); + + if (ConfigManagerCore.quickMode) + { + List output = ingredients.getOutputs(ItemStack.class).get(0); + ItemStack stackOutput = output.get(0); + if (stackOutput.getItem().getTranslationKey(stackOutput).contains("compressed")) + { + ItemStack stackDoubled = stackOutput.copy(); + stackDoubled.setCount(stackOutput.getCount() * 2); + output.set(0, stackDoubled); + } + } + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapedRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapedRecipeWrapper.java new file mode 100644 index 00000000..508bdbc6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapedRecipeWrapper.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor; + +import java.awt.Color; +import java.util.Arrays; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.ShapedRecipesGC; +import micdoodle8.mods.galacticraft.core.client.jei.GalacticraftJEI; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; + +public class IngotCompressorShapedRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ShapedRecipesGC recipe; + + public IngotCompressorShapedRecipeWrapper(@Nonnull ShapedRecipesGC recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Arrays.asList(recipe.recipeItems)); + ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput()); + } + + @Override + public void drawInfo(Minecraft mc, int recipeWidth, int recipeHeight, int mouseX, int mouseY) + { + if (GalacticraftJEI.hidden.contains(this)) + { + FontRenderer fontRendererObj = mc.fontRenderer; + String experienceString = "Asteroids Challenge"; + GCCoreUtil.drawStringCentered(experienceString, 69, 8, Color.gray.getRGB(), fontRendererObj); + experienceString = "game mode only!"; + GCCoreUtil.drawStringCentered(experienceString, 69, 20, Color.gray.getRGB(), fontRendererObj); + return; + } + FurnaceRecipes furnaceRecipes = FurnaceRecipes.instance(); + float experience = 0; + + try + { + experience = furnaceRecipes.getSmeltingExperience(this.recipe.getRecipeOutput()); + } catch (Exception e) + { + } + + if (experience > 0) + { + String experienceString = GCCoreUtil.translateWithFormat("gui.jei.category.smelting.experience", experience); + FontRenderer fontRendererObj = mc.fontRenderer; + int stringWidth = fontRendererObj.getStringWidth(experienceString); + fontRendererObj.drawString(experienceString, recipeWidth + 6 - stringWidth, 8, Color.gray.getRGB()); + } + } + + public boolean matches(ShapedRecipesGC test) + { + return this.recipe == test; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapelessRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapelessRecipeWrapper.java new file mode 100644 index 00000000..130cf943 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/ingotcompressor/IngotCompressorShapelessRecipeWrapper.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.ingotcompressor; + +import java.awt.Color; +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import mezz.jei.api.recipe.IStackHelper; +import micdoodle8.mods.galacticraft.api.recipe.ShapelessOreRecipeGC; +import micdoodle8.mods.galacticraft.core.client.jei.GalacticraftJEI; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; + +public class IngotCompressorShapelessRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ShapelessOreRecipeGC recipe; + private final IStackHelper stackHelper; + + public IngotCompressorShapelessRecipeWrapper(IStackHelper stackhelper, @Nonnull ShapelessOreRecipeGC recipe) + { + this.recipe = recipe; + this.stackHelper = stackhelper; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + List> inputs = this.stackHelper.expandRecipeItemStackInputs(recipe.getInput()); + ingredients.setInputLists(ItemStack.class, inputs); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } + + @Override + public void drawInfo(Minecraft mc, int recipeWidth, int recipeHeight, int mouseX, int mouseY) + { + if (GalacticraftJEI.hidden.contains(this)) + { + FontRenderer fontRendererObj = mc.fontRenderer; + String experienceString = "Asteroids Challenge"; + GCCoreUtil.drawStringCentered(experienceString, 69, 8, Color.gray.getRGB(), fontRendererObj); + experienceString = "game mode only!"; + GCCoreUtil.drawStringCentered(experienceString, 69, 20, Color.gray.getRGB(), fontRendererObj); + return; + } + FurnaceRecipes furnaceRecipes = FurnaceRecipes.instance(); + float experience = 0; + + try + { + experience = furnaceRecipes.getSmeltingExperience(this.recipe.getRecipeOutput()); + } catch (Exception e) + { + } + + if (experience > 0) + { + String experienceString = GCCoreUtil.translateWithFormat("gui.jei.category.smelting.experience", experience); + FontRenderer fontRendererObj = mc.fontRenderer; + int stringWidth = fontRendererObj.getStringWidth(experienceString); + fontRendererObj.drawString(experienceString, recipeWidth + 6 - stringWidth, 8, Color.gray.getRGB()); + } + } + + public boolean matches(@Nonnull ShapelessOreRecipeGC test) + { + return this.recipe == test; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeCategory.java new file mode 100644 index 00000000..7ba1e1cf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeCategory.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.BlankRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +public class OxygenCompressorRecipeCategory extends BlankRecipeCategory +{ + + private static final ResourceLocation compressorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/compressor.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + private IDrawableAnimated oxygenBar; + private IDrawable oxygenLabel; + + public OxygenCompressorRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(compressorTexture, 3, 4, 168, 80); + this.localizedName = GCCoreUtil.translate("tile.oxygen_compressor.0.name"); + + IDrawableStatic progressBarDrawableO2 = guiHelper.createDrawable(compressorTexture, 197, 7, 54, 7); + this.oxygenBar = guiHelper.createAnimatedDrawable(progressBarDrawableO2, 70, IDrawableAnimated.StartDirection.RIGHT, true); + this.oxygenLabel = guiHelper.createDrawable(compressorTexture, 187, 0, 10, 10); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.OXYGEN_COMPRESSOR_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + this.oxygenLabel.draw(minecraft, 97, 15); + this.oxygenBar.draw(minecraft, 110, 16); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, false, 129, 61); + + if (recipeWrapper instanceof OxygenCompressorRecipeWrapper) + { + itemstacks.set(ingredients); + } + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeHandler.java new file mode 100644 index 00000000..775468d7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeHandler.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor; + +import javax.annotation.Nonnull; +import mezz.jei.api.recipe.IRecipeHandler; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; + +public class OxygenCompressorRecipeHandler implements IRecipeHandler +{ + + @Nonnull + @Override + public Class getRecipeClass() + { + return OxygenCompressorRecipeWrapper.class; + } + + @Override + public String getRecipeCategoryUid(OxygenCompressorRecipeWrapper recipe) + { + return RecipeCategories.OXYGEN_COMPRESSOR_ID; + } + + @Nonnull + @Override + public IRecipeWrapper getRecipeWrapper(@Nonnull OxygenCompressorRecipeWrapper recipe) + { + return recipe; + } + + @Override + public boolean isRecipeValid(@Nonnull OxygenCompressorRecipeWrapper recipe) + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeMaker.java new file mode 100644 index 00000000..392b1e3e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeMaker.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import net.minecraft.item.ItemStack; + +public class OxygenCompressorRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + for (ItemStack stack : GalacticraftRegistry.listAllGearForSlot(EnumExtendedInventorySlot.LEFT_TANK)) + { + if (stack != null && stack.getItem() instanceof ItemOxygenTank) + { + recipes.add(new OxygenCompressorRecipeWrapper(stack.copy())); + } + } + + return recipes; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeWrapper.java new file mode 100644 index 00000000..e2de5116 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/oxygencompressor/OxygenCompressorRecipeWrapper.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.oxygencompressor; + +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.BlankRecipeWrapper; +import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class OxygenCompressorRecipeWrapper extends BlankRecipeWrapper implements ICraftingRecipeWrapper +{ + + @Nonnull private final ItemStack output; + + public OxygenCompressorRecipeWrapper(@Nonnull ItemStack output) + { + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setOutput(ItemStack.class, this.output); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeCategory.java new file mode 100644 index 00000000..e2fe464a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeCategory.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.refinery; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +public class RefineryRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation refineryGuiTex = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/refinery_recipe.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated oilBar; + @Nonnull private final IDrawableAnimated fuelBar; + + public RefineryRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(refineryGuiTex, 3, 4, 168, 64); + this.localizedName = GCCoreUtil.translate("tile.refinery.name"); + + IDrawableStatic progressBarDrawableOil = guiHelper.createDrawable(refineryGuiTex, 176, 0, 16, 38); + this.oilBar = guiHelper.createAnimatedDrawable(progressBarDrawableOil, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic progressBarDrawableFuel = guiHelper.createDrawable(refineryGuiTex, 192, 0, 16, 38); + this.fuelBar = guiHelper.createAnimatedDrawable(progressBarDrawableFuel, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.REFINERY_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + this.oilBar.draw(minecraft, 40, 24); + this.fuelBar.draw(minecraft, 114, 24); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 39, 2); + itemstacks.init(1, false, 113, 2); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeMaker.java new file mode 100644 index 00000000..9632a5d4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeMaker.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.refinery; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GCItems; +import net.minecraft.item.ItemStack; + +public class RefineryRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + recipes.add(new RefineryRecipeWrapper(new ItemStack(GCItems.oilCanister, 1, 1), new ItemStack(GCItems.fuelCanister, 1, 1))); + recipes.add(new RefineryRecipeWrapper(new ItemStack(GCItems.bucketOil), new ItemStack(GCItems.fuelCanister, 1, 1))); + recipes.add(new RefineryRecipeWrapper(new ItemStack(GCItems.oilCanister, 1, 1), new ItemStack(GCItems.bucketFuel))); + recipes.add(new RefineryRecipeWrapper(new ItemStack(GCItems.bucketOil), new ItemStack(GCItems.bucketFuel))); + + return recipes; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeWrapper.java new file mode 100644 index 00000000..d80bd57b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/refinery/RefineryRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.refinery; + +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class RefineryRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ItemStack input; + @Nonnull private final ItemStack output; + + public RefineryRecipeWrapper(@Nonnull ItemStack input, @Nonnull ItemStack output) + { + this.input = input; + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInput(ItemStack.class, this.input); + ingredients.setOutput(ItemStack.class, this.output); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeCategory.java new file mode 100644 index 00000000..80f309ff --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeCategory.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.tier1rocket; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.util.ResourceLocation; + +public class Tier1RocketRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation rocketGuiTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/rocketbench.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public Tier1RocketRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(rocketGuiTexture, 3, 4, 168, 130); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ROCKET_T1_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 44, 14); + itemstacks.init(1, true, 35, 32); + itemstacks.init(2, true, 35, 50); + itemstacks.init(3, true, 35, 68); + itemstacks.init(4, true, 35, 86); + itemstacks.init(5, true, 53, 32); + itemstacks.init(6, true, 53, 50); + itemstacks.init(7, true, 53, 68); + itemstacks.init(8, true, 53, 86); + itemstacks.init(9, true, 17, 104); + itemstacks.init(10, true, 17, 86); + itemstacks.init(11, true, 44, 104); + itemstacks.init(12, true, 71, 86); + itemstacks.init(13, true, 71, 104); + itemstacks.init(14, true, 89, 7); + itemstacks.init(15, true, 115, 7); + itemstacks.init(16, true, 141, 7); + itemstacks.init(17, false, 138, 91); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftCore.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeMaker.java new file mode 100644 index 00000000..d3288ff6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeMaker.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.tier1rocket; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.oredict.OreDictionary; + +public class Tier1RocketRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT1Recipes()) + { + int chests = Tier1RocketRecipeMaker.countChests(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } + + public static int countChests(INasaWorkbenchRecipe recipe) + { + int count = 0; + NonNullList woodChests = OreDictionary.getOres("chestWood"); + for (ItemStack woodChest : woodChests) + { + for (Entry e : recipe.getRecipeInput().entrySet()) + { + if (ItemStack.areItemsEqual(woodChest, e.getValue())) + count++; + } + } + return count; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeWrapper.java new file mode 100644 index 00000000..564d4535 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/jei/tier1rocket/Tier1RocketRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.jei.tier1rocket; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class Tier1RocketRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public Tier1RocketRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAlienVillager.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAlienVillager.java new file mode 100644 index 00000000..e35af852 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAlienVillager.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelVillager; +import net.minecraft.entity.Entity; + +public class ModelAlienVillager extends ModelVillager +{ + + public ModelRenderer brain; + + public ModelAlienVillager(float par1) + { + this(par1, 0.0F, 64, 64); + } + + public ModelAlienVillager(float par1, float par2, int par3, int par4) + { + super(par1, par2, 0, 0); + this.villagerHead = new ModelRenderer(this).setTextureSize(par3, par4); + this.villagerHead.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.villagerHead.setTextureOffset(0, 0).addBox(-4.0F, -10.0F, -4.0F, 8, 10, 8, par1 + 0.001F); + this.villagerNose = new ModelRenderer(this).setTextureSize(par3, par4); + this.villagerNose.setRotationPoint(0.0F, par2 - 2.0F, 0.0F); + this.villagerNose.setTextureOffset(24, 0).addBox(-1.0F, -1.0F, -6.0F, 2, 4, 2, par1 + 0.002F); + this.villagerHead.addChild(this.villagerNose); + this.villagerBody = new ModelRenderer(this).setTextureSize(par3, par4); + this.villagerBody.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.villagerBody.setTextureOffset(16, 20).addBox(-4.0F, 0.0F, -3.0F, 8, 12, 6, par1 + 0.003F); + this.villagerBody.setTextureOffset(0, 38).addBox(-4.0F, 0.0F, -3.0F, 8, 18, 6, par1 + 0.5F + 0.004F); + this.villagerArms = new ModelRenderer(this).setTextureSize(par3, par4); + this.villagerArms.setRotationPoint(0.0F, 0.0F + par2 + 2.0F, 0.0F); + this.villagerArms.setTextureOffset(44, 22).addBox(-8.0F, -2.0F, -2.0F, 4, 8, 4, par1 + 0.005F); + this.villagerArms.setTextureOffset(44, 22).addBox(4.0F, -2.0F, -2.0F, 4, 8, 4, par1 + 0.0001F); + this.villagerArms.setTextureOffset(40, 38).addBox(-4.0F, 2.0F, -2.0F, 8, 4, 4, par1 + 0.0004F); + this.rightVillagerLeg = new ModelRenderer(this, 0, 22).setTextureSize(par3, par4); + this.rightVillagerLeg.setRotationPoint(-2.0F, 12.0F + par2, 0.0F); + this.rightVillagerLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, par1 + 0.0006F); + this.leftVillagerLeg = new ModelRenderer(this, 0, 22).setTextureSize(par3, par4); + this.leftVillagerLeg.mirror = true; + this.leftVillagerLeg.setRotationPoint(2.0F, 12.0F + par2, 0.0F); + this.leftVillagerLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, par1 + 0.0002F); + this.brain = new ModelRenderer(this).setTextureSize(par3, par4); + this.brain.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.brain.setTextureOffset(32, 0).addBox(-4.0F, -16.0F, -4.0F, 8, 8, 8, par1 + 0.5F); + } + + @Override + public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + super.render(par1Entity, par2, par3, par4, par5, par6, par7); + + this.brain.render(par7); + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity par7Entity) + { + super.setRotationAngles(par1, par2, par3, par4, par5, par6, par7Entity); + + this.brain.rotateAngleX = this.villagerHead.rotateAngleX; + this.brain.rotateAngleY = this.villagerHead.rotateAngleY; + this.brain.rotateAngleZ = this.villagerHead.rotateAngleZ; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAluminumWire.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAluminumWire.java new file mode 100644 index 00000000..e761cbf5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelAluminumWire.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelAluminumWire extends ModelBase +{ + + // fields + ModelRenderer middle; + ModelRenderer right; + ModelRenderer left; + ModelRenderer back; + ModelRenderer front; + ModelRenderer top; + ModelRenderer bottom; + + public ModelAluminumWire() + { + this.textureWidth = 64; + this.textureHeight = 32; + this.middle = new ModelRenderer(this, 0, 0); + this.middle.addBox(-1F, -1F, -1F, 4, 4, 4); + this.middle.setRotationPoint(-1F, 15F, -1F); + this.middle.setTextureSize(64, 32); + this.middle.mirror = true; + this.setRotation(this.middle, 0F, 0F, 0F); + this.right = new ModelRenderer(this, 21, 0); + this.right.addBox(0F, 0F, 0F, 6, 4, 4); + this.right.setRotationPoint(2F, 14F, -2F); + this.right.setTextureSize(64, 32); + this.right.mirror = true; + this.setRotation(this.right, 0F, 0F, 0F); + this.left = new ModelRenderer(this, 21, 0); + this.left.addBox(0F, 0F, 0F, 6, 4, 4); + this.left.setRotationPoint(-8F, 14F, -2F); + this.left.setTextureSize(64, 32); + this.left.mirror = true; + this.setRotation(this.left, 0F, 0F, 0F); + this.back = new ModelRenderer(this, 0, 11); + this.back.addBox(0F, 0F, 0F, 4, 4, 6); + this.back.setRotationPoint(-2F, 14F, 2F); + this.back.setTextureSize(64, 32); + this.back.mirror = true; + this.setRotation(this.back, 0F, 0F, 0F); + this.front = new ModelRenderer(this, 0, 11); + this.front.addBox(0F, 0F, 0F, 4, 4, 6); + this.front.setRotationPoint(-2F, 14F, -8F); + this.front.setTextureSize(64, 32); + this.front.mirror = true; + this.setRotation(this.front, 0F, 0F, 0F); + this.top = new ModelRenderer(this, 21, 11); + this.top.addBox(0F, 0F, 0F, 4, 6, 4); + this.top.setRotationPoint(-2F, 8F, -2F); + this.top.setTextureSize(64, 32); + this.top.mirror = true; + this.setRotation(this.top, 0F, 0F, 0F); + this.bottom = new ModelRenderer(this, 21, 11); + this.bottom.addBox(0F, 0F, 0F, 4, 6, 4); + this.bottom.setRotationPoint(-2F, 18F, -2F); + this.bottom.setTextureSize(64, 32); + this.bottom.mirror = true; + this.setRotation(this.bottom, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.renderMiddle(); + this.renderBottom(); + this.renderTop(); + this.renderLeft(); + this.renderRight(); + this.renderBack(); + this.renderFront(); + } + + public void renderMiddle() + { + this.middle.render(0.0625F); + } + + public void renderBottom() + { + this.bottom.render(0.0625F); + } + + public void renderTop() + { + this.top.render(0.0625F); + } + + public void renderLeft() + { + this.left.render(0.0625F); + } + + public void renderRight() + { + this.right.render(0.0625F); + } + + public void renderBack() + { + this.back.render(0.0625F); + } + + public void renderFront() + { + // this.Front.render(0.0625F); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float x, float y, float z, float f3, float f4, float f5, Entity entity) + { + super.setRotationAngles(x, y, z, f3, f4, f5, entity); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelBipedGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelBipedGC.java new file mode 100644 index 00000000..650f13b0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelBipedGC.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.common.MinecraftForge; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.item.IHoldableItemCustom; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; + +public class ModelBipedGC +{ + + public static void setRotationAngles(ModelBiped biped, float par1, float par2, float par3, float par4, float par5, float par6, Entity par7Entity) + { + if (!(par7Entity instanceof EntityPlayer)) + return; + final EntityPlayer player = (EntityPlayer) par7Entity; + final ItemStack currentItemStack = player.inventory.getCurrentItem(); + final float floatPI = 3.1415927F; + + if (!par7Entity.onGround && par7Entity.world.provider instanceof IGalacticraftWorldProvider && par7Entity.getRidingEntity() == null && ((currentItemStack == null) || !(currentItemStack.getItem() instanceof IHoldableItem))) + { + float speedModifier = 0.1162F * 2; + + float angularSwingArm = MathHelper.cos(par1 * (speedModifier / 2)); + float rightMod = biped.rightArmPose == ModelBiped.ArmPose.ITEM ? 1 : 2; + biped.bipedRightArm.rotateAngleX -= MathHelper.cos(par1 * 0.6662F + floatPI) * rightMod * par2 * 0.5F; + biped.bipedLeftArm.rotateAngleX -= MathHelper.cos(par1 * 0.6662F) * 2.0F * par2 * 0.5F; + biped.bipedRightArm.rotateAngleX += -angularSwingArm * 4.0F * par2 * 0.5F; + biped.bipedLeftArm.rotateAngleX += angularSwingArm * 4.0F * par2 * 0.5F; + biped.bipedLeftLeg.rotateAngleX -= MathHelper.cos(par1 * 0.6662F + floatPI) * 1.4F * par2; + biped.bipedLeftLeg.rotateAngleX += MathHelper.cos(par1 * 0.1162F * 2 + floatPI) * 1.4F * par2; + biped.bipedRightLeg.rotateAngleX -= MathHelper.cos(par1 * 0.6662F) * 1.4F * par2; + biped.bipedRightLeg.rotateAngleX += MathHelper.cos(par1 * 0.1162F * 2) * 1.4F * par2; + } + + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + if (gearData.getParachute() != null) + { + // Parachute is equipped + biped.bipedLeftArm.rotateAngleX += floatPI; + biped.bipedLeftArm.rotateAngleZ += floatPI / 10; + biped.bipedRightArm.rotateAngleX += floatPI; + biped.bipedRightArm.rotateAngleZ -= floatPI / 10; + } + } + + ItemStack heldItemStack = null; + + for (EnumHand hand : EnumHand.values()) + { + ItemStack item = player.getHeldItem(hand); + if (item != null && item.getItem() instanceof IHoldableItem) + { + heldItemStack = item; + } + } + + if (heldItemStack != null && !(player.getRidingEntity() instanceof ICameraZoomEntity)) + { + Item heldItem = heldItemStack.getItem(); + IHoldableItem holdableItem = (IHoldableItem) heldItem; + IHoldableItemCustom holdableItemCustom = heldItem instanceof IHoldableItemCustom ? (IHoldableItemCustom) heldItem : null; + + if (holdableItem.shouldHoldLeftHandUp(player)) + { + Vector3 angle = null; + + if (holdableItemCustom != null) + { + angle = holdableItemCustom.getLeftHandRotation(player); + } + + if (angle == null) + { + angle = new Vector3(floatPI + 0.3F, 0.0F, floatPI / 10.0F); + } + + biped.bipedLeftArm.rotateAngleX = angle.floatX(); + biped.bipedLeftArm.rotateAngleY = angle.floatY(); + biped.bipedLeftArm.rotateAngleZ = angle.floatZ(); + } + + if (holdableItem.shouldHoldRightHandUp(player)) + { + Vector3 angle = null; + + if (holdableItemCustom != null) + { + angle = holdableItemCustom.getRightHandRotation(player); + } + + if (angle == null) + { + angle = new Vector3(floatPI + 0.3F, 0.0F, (float) -Math.PI / 10.0F); + } + + biped.bipedRightArm.rotateAngleX = angle.floatX(); + biped.bipedRightArm.rotateAngleY = angle.floatY(); + biped.bipedRightArm.rotateAngleZ = angle.floatZ(); + } + } + + for (Entity e : player.world.loadedEntityList) + { + if (e instanceof EntityTieredRocket && e.getDistanceSq(player) < 200) + { + final EntityTieredRocket ship = (EntityTieredRocket) e; + + if (!ship.getPassengers().isEmpty() && !ship.getPassengers().contains(player) && (ship.getLaunched() || ship.timeUntilLaunch < 390)) + { + biped.bipedRightArm.rotateAngleZ -= floatPI / 8F + MathHelper.sin(par3 * 0.9F) * 0.2F; + biped.bipedRightArm.rotateAngleX = floatPI; + break; + } + } + } + + if (player.isPlayerSleeping()) + { + RenderPlayerGC.RotatePlayerEvent event = new RenderPlayerGC.RotatePlayerEvent((AbstractClientPlayer) player); + MinecraftForge.EVENT_BUS.post(event); + + if (event.vanillaOverride && (event.shouldRotate == null || event.shouldRotate)) + { + biped.bipedHead.rotateAngleX = (float) (20.0F - Math.sin(player.ticksExisted / 10.0F) / 7.0F); + biped.bipedHead.rotateAngleY = 0.0F; + biped.bipedHead.rotateAngleZ = 0.0F; + biped.bipedLeftArm.rotateAngleX = 0.0F; + biped.bipedLeftArm.rotateAngleY = 0.0F; + biped.bipedLeftArm.rotateAngleZ = 0.0F; + biped.bipedRightArm.rotateAngleX = 0.0F; + biped.bipedRightArm.rotateAngleY = 0.0F; + biped.bipedRightArm.rotateAngleZ = 0.0F; + } + } + + ModelBiped.copyModelAngles(biped.bipedHead, biped.bipedHeadwear); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedCreeper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedCreeper.java new file mode 100644 index 00000000..e9f835ad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedCreeper.java @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class ModelEvolvedCreeper extends ModelBase +{ + + ModelRenderer leftOxygenTank; + ModelRenderer rightOxygenTank; + ModelRenderer tubeRight2; + ModelRenderer tubeLeft1; + ModelRenderer tubeRight3; + ModelRenderer tubeRight4; + ModelRenderer tubeRight5; + ModelRenderer tubeLeft6; + ModelRenderer tubeRight7; + ModelRenderer tubeRight1; + ModelRenderer tubeLeft2; + ModelRenderer tubeLeft3; + ModelRenderer tubeLeft4; + ModelRenderer tubeLeft5; + ModelRenderer tubeLeft7; + ModelRenderer tubeRight6; + ModelRenderer tubeLeft8; + ModelRenderer oxygenMask; + public ModelRenderer head; + public ModelRenderer field_78133_b; + public ModelRenderer body; + public ModelRenderer leg1; + public ModelRenderer leg2; + public ModelRenderer leg3; + public ModelRenderer leg4; + + public ModelEvolvedCreeper() + { + this(0.0F); + } + + public ModelEvolvedCreeper(float par1) + { + this.textureWidth = 128; + this.textureHeight = 64; + this.leftOxygenTank = new ModelRenderer(this, 40, 20); + this.leftOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.leftOxygenTank.setRotationPoint(2F, 5F, 3.8F); + this.leftOxygenTank.setTextureSize(128, 64); + this.leftOxygenTank.mirror = true; + this.setRotation(this.leftOxygenTank, 0F, 0F, 0F); + this.rightOxygenTank = new ModelRenderer(this, 40, 20); + this.rightOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.rightOxygenTank.setRotationPoint(-2F, 5F, 3.8F); + this.rightOxygenTank.setTextureSize(128, 64); + this.rightOxygenTank.mirror = true; + this.setRotation(this.rightOxygenTank, 0F, 0F, 0F); + this.tubeRight2 = new ModelRenderer(this, 40, 30); + this.tubeRight2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight2.setRotationPoint(-2F, 5F, 6.8F); + this.tubeRight2.setTextureSize(128, 64); + this.tubeRight2.mirror = true; + this.setRotation(this.tubeRight2, 0F, 0F, 0F); + this.tubeLeft1 = new ModelRenderer(this, 40, 30); + this.tubeLeft1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft1.setRotationPoint(2F, 6F, 5.8F); + this.tubeLeft1.setTextureSize(128, 64); + this.tubeLeft1.mirror = true; + this.setRotation(this.tubeLeft1, 0F, 0F, 0F); + this.tubeRight3 = new ModelRenderer(this, 40, 30); + this.tubeRight3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight3.setRotationPoint(-2F, 4F, 6.8F); + this.tubeRight3.setTextureSize(128, 64); + this.tubeRight3.mirror = true; + this.setRotation(this.tubeRight3, 0F, 0F, 0F); + this.tubeRight4 = new ModelRenderer(this, 40, 30); + this.tubeRight4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight4.setRotationPoint(-2F, 3F, 6.8F); + this.tubeRight4.setTextureSize(128, 64); + this.tubeRight4.mirror = true; + this.setRotation(this.tubeRight4, 0F, 0F, 0F); + this.tubeRight5 = new ModelRenderer(this, 40, 30); + this.tubeRight5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight5.setRotationPoint(-2F, 2F, 6.8F); + this.tubeRight5.setTextureSize(128, 64); + this.tubeRight5.mirror = true; + this.setRotation(this.tubeRight5, 0F, 0F, 0F); + this.tubeLeft6 = new ModelRenderer(this, 40, 30); + this.tubeLeft6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft6.setRotationPoint(2F, 1F, 5.8F); + this.tubeLeft6.setTextureSize(128, 64); + this.tubeLeft6.mirror = true; + this.setRotation(this.tubeLeft6, 0F, 0F, 0F); + this.tubeRight7 = new ModelRenderer(this, 40, 30); + this.tubeRight7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight7.setRotationPoint(-2F, 0F, 4.8F); + this.tubeRight7.setTextureSize(128, 64); + this.tubeRight7.mirror = true; + this.setRotation(this.tubeRight7, 0F, 0F, 0F); + this.tubeRight1 = new ModelRenderer(this, 40, 30); + this.tubeRight1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight1.setRotationPoint(-2F, 6F, 5.8F); + this.tubeRight1.setTextureSize(128, 64); + this.tubeRight1.mirror = true; + this.setRotation(this.tubeRight1, 0F, 0F, 0F); + this.tubeLeft2 = new ModelRenderer(this, 40, 30); + this.tubeLeft2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft2.setRotationPoint(2F, 5F, 6.8F); + this.tubeLeft2.setTextureSize(128, 64); + this.tubeLeft2.mirror = true; + this.setRotation(this.tubeLeft2, 0F, 0F, 0F); + this.tubeLeft3 = new ModelRenderer(this, 40, 30); + this.tubeLeft3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft3.setRotationPoint(2F, 4F, 6.8F); + this.tubeLeft3.setTextureSize(128, 64); + this.tubeLeft3.mirror = true; + this.setRotation(this.tubeLeft3, 0F, 0F, 0F); + this.tubeLeft4 = new ModelRenderer(this, 40, 30); + this.tubeLeft4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft4.setRotationPoint(2F, 3F, 6.8F); + this.tubeLeft4.setTextureSize(128, 64); + this.tubeLeft4.mirror = true; + this.setRotation(this.tubeLeft4, 0F, 0F, 0F); + this.tubeLeft5 = new ModelRenderer(this, 40, 30); + this.tubeLeft5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft5.setRotationPoint(2F, 2F, 6.8F); + this.tubeLeft5.setTextureSize(128, 64); + this.tubeLeft5.mirror = true; + this.setRotation(this.tubeLeft5, 0F, 0F, 0F); + this.tubeLeft7 = new ModelRenderer(this, 40, 30); + this.tubeLeft7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft7.setRotationPoint(2F, 0F, 4.8F); + this.tubeLeft7.setTextureSize(128, 64); + this.tubeLeft7.mirror = true; + this.setRotation(this.tubeLeft7, 0F, 0F, 0F); + this.tubeRight6 = new ModelRenderer(this, 40, 30); + this.tubeRight6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight6.setRotationPoint(-2F, 1F, 5.8F); + this.tubeRight6.setTextureSize(128, 64); + this.tubeRight6.mirror = true; + this.setRotation(this.tubeRight6, 0F, 0F, 0F); + this.tubeLeft8 = new ModelRenderer(this, 40, 30); + this.tubeLeft8.addBox(0F, 0F, 0F, 1, 1, 1, par1); + this.tubeLeft8.setRotationPoint(0F, -2F, 0F); + this.tubeLeft8.setTextureSize(128, 64); + this.tubeLeft8.mirror = true; + this.setRotation(this.tubeLeft8, 0F, 0F, 0F); + this.oxygenMask = new ModelRenderer(this, 40, 0); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10, par1); + this.oxygenMask.setRotationPoint(0F, 4F, 0F); + this.oxygenMask.setTextureSize(128, 64); + this.oxygenMask.mirror = true; + this.setRotation(this.oxygenMask, 0F, 0F, 0F); + + final byte var2 = 4; + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, par1); + this.head.setRotationPoint(0.0F, var2, 0.0F); + this.head.setTextureSize(128, 64); + this.field_78133_b = new ModelRenderer(this, 32, 0); + this.field_78133_b.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, par1 + 0.5F); + this.field_78133_b.setRotationPoint(0.0F, var2, 0.0F); + this.field_78133_b.setTextureSize(128, 64); + this.body = new ModelRenderer(this, 16, 16); + this.body.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, par1); + this.body.setRotationPoint(0.0F, var2, 0.0F); + this.body.setTextureSize(128, 64); + this.leg1 = new ModelRenderer(this, 0, 16); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, par1); + this.leg1.setRotationPoint(-2.0F, 12 + var2, 4.0F); + this.leg1.setTextureSize(128, 64); + this.leg2 = new ModelRenderer(this, 0, 16); + this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, par1); + this.leg2.setRotationPoint(2.0F, 12 + var2, 4.0F); + this.leg2.setTextureSize(128, 64); + this.leg3 = new ModelRenderer(this, 0, 16); + this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, par1); + this.leg3.setRotationPoint(-2.0F, 12 + var2, -4.0F); + this.leg3.setTextureSize(128, 64); + this.leg4 = new ModelRenderer(this, 0, 16); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, par1); + this.leg4.setRotationPoint(2.0F, 12 + var2, -4.0F); + this.leg4.setTextureSize(128, 64); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + this.setRotationAngles(par2, par3, par4, par5, par6, par7); + + if (this.isChild) + { + float f6 = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / f6, 1.5F / f6, 1.5F / f6); + GL11.glTranslatef(0.0F, 16.0F * par7, 0.0F); + this.head.render(par7); + this.oxygenMask.render(par7); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / f6, 1.0F / f6, 1.0F / f6); + GL11.glTranslatef(0.0F, 24.0F * par7, 0.0F); + this.leftOxygenTank.render(par7); + this.rightOxygenTank.render(par7); + this.tubeRight2.render(par7); + this.tubeLeft1.render(par7); + this.tubeRight3.render(par7); + this.tubeRight4.render(par7); + this.tubeRight5.render(par7); + this.tubeLeft6.render(par7); + this.tubeRight7.render(par7); + this.tubeRight1.render(par7); + this.tubeLeft2.render(par7); + this.tubeLeft3.render(par7); + this.tubeLeft4.render(par7); + this.tubeLeft5.render(par7); + this.tubeLeft7.render(par7); + this.tubeRight6.render(par7); + this.tubeLeft8.render(par7); + this.body.render(par7); + this.leg1.render(par7); + this.leg2.render(par7); + this.leg3.render(par7); + this.leg4.render(par7); + GL11.glPopMatrix(); + } else + { + this.leftOxygenTank.render(par7); + this.rightOxygenTank.render(par7); + this.tubeRight2.render(par7); + this.tubeLeft1.render(par7); + this.tubeRight3.render(par7); + this.tubeRight4.render(par7); + this.tubeRight5.render(par7); + this.tubeLeft6.render(par7); + this.tubeRight7.render(par7); + this.tubeRight1.render(par7); + this.tubeLeft2.render(par7); + this.tubeLeft3.render(par7); + this.tubeLeft4.render(par7); + this.tubeLeft5.render(par7); + this.tubeLeft7.render(par7); + this.tubeRight6.render(par7); + this.tubeLeft8.render(par7); + this.oxygenMask.render(par7); + this.head.render(par7); + this.body.render(par7); + this.leg1.render(par7); + this.leg2.render(par7); + this.leg3.render(par7); + this.leg4.render(par7); + } + } + + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6) + { + this.oxygenMask.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + this.oxygenMask.rotateAngleX = par5 / Constants.RADIANS_TO_DEGREES; + this.head.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + this.head.rotateAngleX = par5 / Constants.RADIANS_TO_DEGREES; + this.leg1.rotateAngleX = MathHelper.cos(par1 * 0.6662F) * 1.4F * par2; + this.leg2.rotateAngleX = MathHelper.cos(par1 * 0.6662F + 3.1415927F) * 1.4F * par2; + this.leg3.rotateAngleX = MathHelper.cos(par1 * 0.6662F + 3.1415927F) * 1.4F * par2; + this.leg4.rotateAngleX = MathHelper.cos(par1 * 0.6662F) * 1.4F * par2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedEnderman.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedEnderman.java new file mode 100644 index 00000000..6965cc3b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedEnderman.java @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelEvolvedEnderman extends ModelBiped +{ + + public boolean isCarrying; + public boolean isAttacking; + ModelRenderer oxygenMask; + ModelRenderer tank1; + ModelRenderer tank2; + ModelRenderer tube1; + ModelRenderer tube2; + ModelRenderer tube3; + ModelRenderer tube4; + ModelRenderer tube5; + ModelRenderer tube6; + ModelRenderer tube7; + ModelRenderer tube8; + ModelRenderer tube9; + ModelRenderer tube10; + ModelRenderer tube11; + ModelRenderer tube12; + ModelRenderer tube13; + ModelRenderer tube14; + + public ModelEvolvedEnderman() + { + super(0.0F, -14.0F, 64, 64); + float f1 = -14.0F; + this.bipedHeadwear = new ModelRenderer(this, 0, 16); + this.bipedHeadwear.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.0F - 0.5F); + this.bipedHeadwear.setRotationPoint(0.0F, 0.0F + f1, 0.0F); + this.bipedBody = new ModelRenderer(this, 32, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, 0.0F); + this.bipedBody.setRotationPoint(0.0F, 0.0F + f1, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 56, 0); + this.bipedRightArm.addBox(-1.0F, -2.0F, -1.0F, 2, 30, 2, 0.0F); + this.bipedRightArm.setRotationPoint(-3.0F, 2.0F + f1, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 56, 0); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -1.0F, 2, 30, 2, 0.0F); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + f1, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 56, 0); + this.bipedRightLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 30, 2, 0.0F); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F + f1, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 56, 0); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 30, 2, 0.0F); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F + f1, 0.0F); + + this.oxygenMask = new ModelRenderer(this, 0, 44); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10); + this.oxygenMask.setRotationPoint(0F, -14F, 0F); + + this.tank1 = new ModelRenderer(this, 52, 54); + this.tank1.addBox(0F, 0F, 0F, 3, 7, 3); + this.tank1.setRotationPoint(0F, -11F, 2F); + + this.tank2 = new ModelRenderer(this, 52, 54); + this.tank2.addBox(0F, 0F, 0F, 3, 7, 3); + this.tank2.setRotationPoint(-3F, -11F, 2F); + + this.tube1 = new ModelRenderer(this, 44, 62); + this.tube1.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube1.setRotationPoint(-2F, -10.5F, 5F); + + this.tube2 = new ModelRenderer(this, 44, 62); + this.tube2.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube2.setRotationPoint(-2F, -11F, 6F); + + this.tube3 = new ModelRenderer(this, 44, 62); + this.tube3.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube3.setRotationPoint(-2F, -12F, 7F); + + this.tube4 = new ModelRenderer(this, 44, 62); + this.tube4.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube4.setRotationPoint(-2F, -13F, 7F); + + this.tube5 = new ModelRenderer(this, 44, 62); + this.tube5.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube5.setRotationPoint(-2F, -14F, 7F); + + this.tube6 = new ModelRenderer(this, 44, 62); + this.tube6.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube6.setRotationPoint(-2F, -15F, 6F); + + this.tube7 = new ModelRenderer(this, 44, 62); + this.tube7.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube7.setRotationPoint(-2F, -16F, 5F); + + this.tube8 = new ModelRenderer(this, 44, 62); + this.tube8.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube8.setRotationPoint(1F, -10.5F, 5F); + + this.tube9 = new ModelRenderer(this, 44, 62); + this.tube9.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube9.setRotationPoint(1F, -11F, 6F); + + this.tube10 = new ModelRenderer(this, 44, 62); + this.tube10.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube10.setRotationPoint(1F, -12F, 7F); + + this.tube11 = new ModelRenderer(this, 44, 62); + this.tube11.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube11.setRotationPoint(1F, -13F, 7F); + + this.tube12 = new ModelRenderer(this, 44, 62); + this.tube12.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube12.setRotationPoint(1F, -14F, 7F); + + this.tube13 = new ModelRenderer(this, 44, 62); + this.tube13.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube13.setRotationPoint(1F, -15F, 6F); + + this.tube14 = new ModelRenderer(this, 44, 62); + this.tube14.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube14.setRotationPoint(1F, -16F, 5F); + } + + @Override + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale, Entity entity) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entity); + this.bipedHead.showModel = true; + float f6 = -14.0F; + this.bipedBody.rotateAngleX = 0.0F; + this.bipedBody.rotationPointY = f6; + this.bipedBody.rotationPointZ = -0.0F; + this.bipedRightLeg.rotateAngleX -= 0.0F; + this.bipedLeftLeg.rotateAngleX -= 0.0F; + this.bipedRightArm.rotateAngleX = (float) (this.bipedRightArm.rotateAngleX * 0.5D); + this.bipedLeftArm.rotateAngleX = (float) (this.bipedLeftArm.rotateAngleX * 0.5D); + this.bipedRightLeg.rotateAngleX = (float) (this.bipedRightLeg.rotateAngleX * 0.5D); + this.bipedLeftLeg.rotateAngleX = (float) (this.bipedLeftLeg.rotateAngleX * 0.5D); + float f7 = 0.4F; + + if (this.bipedRightArm.rotateAngleX > f7) + { + this.bipedRightArm.rotateAngleX = f7; + } + if (this.bipedLeftArm.rotateAngleX > f7) + { + this.bipedLeftArm.rotateAngleX = f7; + } + if (this.bipedRightArm.rotateAngleX < -f7) + { + this.bipedRightArm.rotateAngleX = -f7; + } + if (this.bipedLeftArm.rotateAngleX < -f7) + { + this.bipedLeftArm.rotateAngleX = -f7; + } + if (this.bipedRightLeg.rotateAngleX > f7) + { + this.bipedRightLeg.rotateAngleX = f7; + } + if (this.bipedLeftLeg.rotateAngleX > f7) + { + this.bipedLeftLeg.rotateAngleX = f7; + } + if (this.bipedRightLeg.rotateAngleX < -f7) + { + this.bipedRightLeg.rotateAngleX = -f7; + } + if (this.bipedLeftLeg.rotateAngleX < -f7) + { + this.bipedLeftLeg.rotateAngleX = -f7; + } + + if (this.isCarrying) + { + this.bipedRightArm.rotateAngleX = -0.5F; + this.bipedLeftArm.rotateAngleX = -0.5F; + this.bipedRightArm.rotateAngleZ = 0.05F; + this.bipedLeftArm.rotateAngleZ = -0.05F; + } + + this.bipedRightArm.rotationPointZ = 0.0F; + this.bipedLeftArm.rotationPointZ = 0.0F; + this.bipedRightLeg.rotationPointZ = 0.0F; + this.bipedLeftLeg.rotationPointZ = 0.0F; + this.bipedRightLeg.rotationPointY = 9.0F + f6; + this.bipedLeftLeg.rotationPointY = 9.0F + f6; + this.bipedHead.rotationPointZ = -0.0F; + this.bipedHead.rotationPointY = f6 + 1.0F; + this.bipedHeadwear.rotationPointX = this.bipedHead.rotationPointX; + this.bipedHeadwear.rotationPointY = this.bipedHead.rotationPointY; + this.bipedHeadwear.rotationPointZ = this.bipedHead.rotationPointZ; + this.bipedHeadwear.rotateAngleX = this.bipedHead.rotateAngleX; + this.bipedHeadwear.rotateAngleY = this.bipedHead.rotateAngleY; + this.bipedHeadwear.rotateAngleZ = this.bipedHead.rotateAngleZ; + + this.oxygenMask.rotationPointX = this.bipedHead.rotationPointX; + this.oxygenMask.rotationPointY = this.bipedHead.rotationPointY; + this.oxygenMask.rotationPointZ = this.bipedHead.rotationPointZ; + this.oxygenMask.rotateAngleX = this.bipedHead.rotateAngleX; + this.oxygenMask.rotateAngleY = this.bipedHead.rotateAngleY; + this.oxygenMask.rotateAngleZ = this.bipedHead.rotateAngleZ; + + if (this.isAttacking) + { + float f8 = 1.0F; + this.bipedHead.rotationPointY -= f8 * 5.0F; + this.oxygenMask.rotationPointY -= f8 * 5.0F; + } + } + + @Override + public void render(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + super.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entity); + this.oxygenMask.render(scale); + this.tank1.render(scale); + this.tank2.render(scale); + this.tube1.render(scale); + this.tube2.render(scale); + this.tube3.render(scale); + this.tube4.render(scale); + this.tube5.render(scale); + this.tube6.render(scale); + this.tube7.render(scale); + this.tube8.render(scale); + this.tube9.render(scale); + this.tube10.render(scale); + this.tube11.render(scale); + this.tube12.render(scale); + this.tube13.render(scale); + this.tube14.render(scale); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeleton.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeleton.java new file mode 100644 index 00000000..fb07c383 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeleton.java @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelEvolvedSkeleton extends ModelBiped +{ + + ModelRenderer leftOxygenTank; + ModelRenderer rightOxygenTank; + ModelRenderer tubeRight2; + ModelRenderer tubeLeft1; + ModelRenderer tubeRight3; + ModelRenderer tubeRight4; + ModelRenderer tubeRight5; + ModelRenderer tubeLeft6; + ModelRenderer tubeRight7; + ModelRenderer tubeRight1; + ModelRenderer tubeLeft2; + ModelRenderer tubeLeft3; + ModelRenderer tubeLeft4; + ModelRenderer tubeLeft5; + ModelRenderer tubeLeft7; + ModelRenderer tubeRight6; + ModelRenderer oxygenMask; + + public ModelEvolvedSkeleton() + { + this(0.0F); + } + + public ModelEvolvedSkeleton(float par1) + { + this.textureWidth = 128; + this.textureHeight = 64; + final int par2 = 0; + this.rightArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; + this.leftArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; + this.leftOxygenTank = new ModelRenderer(this, 48, 20); + this.leftOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.leftOxygenTank.setRotationPoint(2F, 2F, 3.8F); + this.leftOxygenTank.setTextureSize(128, 64); + this.leftOxygenTank.mirror = true; + this.setRotation(this.leftOxygenTank, 0F, 0F, 0F); + this.rightOxygenTank = new ModelRenderer(this, 48, 20); + this.rightOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.rightOxygenTank.setRotationPoint(-2F, 2F, 3.8F); + this.rightOxygenTank.setTextureSize(128, 64); + this.rightOxygenTank.mirror = true; + this.setRotation(this.rightOxygenTank, 0F, 0F, 0F); + this.tubeRight2 = new ModelRenderer(this, 48, 30); + this.tubeRight2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight2.setRotationPoint(-2F, 2F, 6.8F); + this.tubeRight2.setTextureSize(128, 64); + this.tubeRight2.mirror = true; + this.setRotation(this.tubeRight2, 0F, 0F, 0F); + this.tubeLeft1 = new ModelRenderer(this, 48, 30); + this.tubeLeft1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft1.setRotationPoint(2F, 3F, 5.8F); + this.tubeLeft1.setTextureSize(128, 64); + this.tubeLeft1.mirror = true; + this.setRotation(this.tubeLeft1, 0F, 0F, 0F); + this.tubeRight3 = new ModelRenderer(this, 48, 30); + this.tubeRight3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight3.setRotationPoint(-2F, 1F, 6.8F); + this.tubeRight3.setTextureSize(128, 64); + this.tubeRight3.mirror = true; + this.setRotation(this.tubeRight3, 0F, 0F, 0F); + this.tubeRight4 = new ModelRenderer(this, 48, 30); + this.tubeRight4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight4.setRotationPoint(-2F, 0F, 6.8F); + this.tubeRight4.setTextureSize(128, 64); + this.tubeRight4.mirror = true; + this.setRotation(this.tubeRight4, 0F, 0F, 0F); + this.tubeRight5 = new ModelRenderer(this, 48, 30); + this.tubeRight5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight5.setRotationPoint(-2F, -1F, 6.8F); + this.tubeRight5.setTextureSize(128, 64); + this.tubeRight5.mirror = true; + this.setRotation(this.tubeRight5, 0F, 0F, 0F); + this.tubeLeft6 = new ModelRenderer(this, 48, 30); + this.tubeLeft6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft6.setRotationPoint(2F, -2F, 5.8F); + this.tubeLeft6.setTextureSize(128, 64); + this.tubeLeft6.mirror = true; + this.setRotation(this.tubeLeft6, 0F, 0F, 0F); + this.tubeRight7 = new ModelRenderer(this, 48, 30); + this.tubeRight7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight7.setRotationPoint(-2F, -3F, 4.8F); + this.tubeRight7.setTextureSize(128, 64); + this.tubeRight7.mirror = true; + this.setRotation(this.tubeRight7, 0F, 0F, 0F); + this.tubeRight1 = new ModelRenderer(this, 48, 30); + this.tubeRight1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight1.setRotationPoint(-2F, 3F, 5.8F); + this.tubeRight1.setTextureSize(128, 64); + this.tubeRight1.mirror = true; + this.setRotation(this.tubeRight1, 0F, 0F, 0F); + this.tubeLeft2 = new ModelRenderer(this, 48, 30); + this.tubeLeft2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft2.setRotationPoint(2F, 2F, 6.8F); + this.tubeLeft2.setTextureSize(128, 64); + this.tubeLeft2.mirror = true; + this.setRotation(this.tubeLeft2, 0F, 0F, 0F); + this.tubeLeft3 = new ModelRenderer(this, 48, 30); + this.tubeLeft3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft3.setRotationPoint(2F, 1F, 6.8F); + this.tubeLeft3.setTextureSize(128, 64); + this.tubeLeft3.mirror = true; + this.setRotation(this.tubeLeft3, 0F, 0F, 0F); + this.tubeLeft4 = new ModelRenderer(this, 48, 30); + this.tubeLeft4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft4.setRotationPoint(2F, 0F, 6.8F); + this.tubeLeft4.setTextureSize(128, 64); + this.tubeLeft4.mirror = true; + this.setRotation(this.tubeLeft4, 0F, 0F, 0F); + this.tubeLeft5 = new ModelRenderer(this, 48, 30); + this.tubeLeft5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft5.setRotationPoint(2F, -1F, 6.8F); + this.tubeLeft5.setTextureSize(128, 64); + this.tubeLeft5.mirror = true; + this.setRotation(this.tubeLeft5, 0F, 0F, 0F); + this.tubeLeft7 = new ModelRenderer(this, 48, 30); + this.tubeLeft7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft7.setRotationPoint(2F, -3F, 4.8F); + this.tubeLeft7.setTextureSize(128, 64); + this.tubeLeft7.mirror = true; + this.setRotation(this.tubeLeft7, 0F, 0F, 0F); + this.tubeRight6 = new ModelRenderer(this, 48, 30); + this.tubeRight6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight6.setRotationPoint(-2F, -2F, 5.8F); + this.tubeRight6.setTextureSize(128, 64); + this.tubeRight6.mirror = true; + this.setRotation(this.tubeRight6, 0F, 0F, 0F); + this.oxygenMask = new ModelRenderer(this, 48, 0); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10, par1); + this.oxygenMask.setRotationPoint(0F, 0F, 0F); + this.oxygenMask.setTextureSize(128, 64); + this.oxygenMask.mirror = true; + this.setRotation(this.oxygenMask, 0F, 0F, 0F); + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, par1); + this.bipedHead.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, par1); + this.bipedBody.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-1.0F, -2.0F, -1.0F, 2, 12, 2, par1); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -1.0F, 2, 12, 2, par1); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 12, 2, par1); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 12, 2, par1); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F, 0.0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.leftOxygenTank.render(f5); + this.rightOxygenTank.render(f5); + this.tubeRight2.render(f5); + this.tubeLeft1.render(f5); + this.tubeRight3.render(f5); + this.tubeRight4.render(f5); + this.tubeRight5.render(f5); + this.tubeLeft6.render(f5); + this.tubeRight7.render(f5); + this.tubeRight1.render(f5); + this.tubeLeft2.render(f5); + this.tubeLeft3.render(f5); + this.tubeLeft4.render(f5); + this.tubeLeft5.render(f5); + this.tubeLeft7.render(f5); + this.tubeRight6.render(f5); + this.oxygenMask.render(f5); + this.bipedHead.render(f5); + this.bipedBody.render(f5); + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + this.bipedRightLeg.render(f5); + this.bipedLeftLeg.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity entity) + { + super.setRotationAngles(par1, par2, par3, par4, par5, par6, entity); + copyModelAngles(this.bipedHead, this.oxygenMask); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeletonBoss.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeletonBoss.java new file mode 100644 index 00000000..aea4522f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSkeletonBoss.java @@ -0,0 +1,397 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelEvolvedSkeletonBoss extends ModelBase +{ + + private ModelRenderer upperHead; + private ModelRenderer pelvis; + private ModelRenderer sternum; + private ModelRenderer rightLeg; + private ModelRenderer rightArm; + private ModelRenderer spine; + private ModelRenderer leftArm; + private ModelRenderer leftLeg; + private ModelRenderer leftFrontBotRib; + private ModelRenderer leftFrontTopRib; + private ModelRenderer leftFront2ndRib; + private ModelRenderer leftFront3rdRib; + private ModelRenderer leftSideBotRib; + private ModelRenderer leftSide3rdRib; + private ModelRenderer leftSide2ndRib; + private ModelRenderer leftSideTopRib; + private ModelRenderer rightSideTopRib; + private ModelRenderer rightSide2ndRib; + private ModelRenderer rightSide3rdRib; + private ModelRenderer rightSideBotRib; + private ModelRenderer rightFrontBotRib; + private ModelRenderer rightFront3rdRib; + private ModelRenderer rightFront2ndRib; + private ModelRenderer rightFrontTopRib; + private ModelRenderer leftBackTopRib; + private ModelRenderer leftBack2ndRib; + private ModelRenderer leftBack3rdRib; + private ModelRenderer leftBackBotRib; + private ModelRenderer rightBackBotRib; + private ModelRenderer rightBack3rdRib; + private ModelRenderer rightBack2ndRib; + private ModelRenderer rightBackTopRib; + + public ModelEvolvedSkeletonBoss() + { + this.textureWidth = 128; + this.textureHeight = 128; + + float halfPI = Constants.halfPI; + + this.upperHead = new ModelRenderer(this, 0, 16); + this.upperHead.addBox(-4F, -8F, -6F, 8, 8, 8); + this.upperHead.setRotationPoint(0F, -24F, 6F); + this.upperHead.setTextureSize(64, 32); + this.upperHead.mirror = true; + this.setRotation(this.upperHead, 0.122173F, 0F, 0F); + this.pelvis = new ModelRenderer(this, 32, 19); + this.pelvis.addBox(-6F, 0F, -3F, 12, 5, 5); + this.pelvis.setRotationPoint(0F, -2F, 5F); + this.pelvis.setTextureSize(64, 32); + this.pelvis.mirror = true; + this.setRotation(this.pelvis, 0F, 0F, 0F); + this.sternum = new ModelRenderer(this, 0, 0); + this.sternum.addBox(-1.5F, 0F, -1F, 3, 9, 1); + this.sternum.setRotationPoint(0F, -21F, 2F); + this.sternum.setTextureSize(64, 32); + this.sternum.mirror = true; + this.setRotation(this.sternum, 0F, 0F, 0F); + this.rightLeg = new ModelRenderer(this, 56, 33); + this.rightLeg.mirror = true; + this.rightLeg.addBox(-2F, 0F, -2F, 3, 26, 3); + this.rightLeg.setRotationPoint(-5F, 0F, 5F); + this.rightLeg.setTextureSize(64, 32); + this.rightLeg.mirror = true; + this.setRotation(this.rightLeg, 0F, 0F, 0F); + this.rightLeg.mirror = false; + this.rightArm = new ModelRenderer(this, 56, 33); + this.rightArm.addBox(-2F, -2F, -1.5F, 3, 24, 3); + this.rightArm.setRotationPoint(-8F, -20F, 5F); + this.rightArm.setTextureSize(64, 32); + this.rightArm.mirror = true; + this.setRotation(this.rightArm, 0F, 0F, 0F); + this.spine = new ModelRenderer(this, 32, 33); + this.spine.addBox(-1.5F, 0F, -1F, 3, 22, 2); + this.spine.setRotationPoint(0F, -24F, 6F); + this.spine.setTextureSize(64, 32); + this.spine.mirror = true; + this.setRotation(this.spine, 0F, 0F, 0F); + this.leftArm = new ModelRenderer(this, 56, 33); + this.leftArm.addBox(-1F, -2F, -1.5F, 3, 24, 3); + this.leftArm.setRotationPoint(8F, -20F, 5F); + this.leftArm.setTextureSize(64, 32); + this.leftArm.mirror = true; + this.setRotation(this.leftArm, 0F, 0F, 0F); + this.leftLeg = new ModelRenderer(this, 56, 33); + this.leftLeg.addBox(-2F, 0F, -2F, 3, 26, 3); + this.leftLeg.setRotationPoint(6F, 0F, 5F); + this.leftLeg.setTextureSize(64, 32); + this.leftLeg.mirror = true; + this.setRotation(this.leftLeg, 0F, 0F, 0F); + this.leftFrontBotRib = new ModelRenderer(this, 0, 0); + this.leftFrontBotRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftFrontBotRib.setRotationPoint(7F, -13F, 2F); + this.leftFrontBotRib.setTextureSize(64, 32); + this.leftFrontBotRib.mirror = true; + this.setRotation(this.leftFrontBotRib, 0F, -halfPI, 0F); + this.leftFrontTopRib = new ModelRenderer(this, 0, 0); + this.leftFrontTopRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftFrontTopRib.setRotationPoint(7F, -22F, 2F); + this.leftFrontTopRib.setTextureSize(64, 32); + this.leftFrontTopRib.mirror = true; + this.setRotation(this.leftFrontTopRib, 0F, -halfPI, 0F); + this.leftFront2ndRib = new ModelRenderer(this, 0, 0); + this.leftFront2ndRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftFront2ndRib.setRotationPoint(7F, -19F, 2F); + this.leftFront2ndRib.setTextureSize(64, 32); + this.leftFront2ndRib.mirror = true; + this.setRotation(this.leftFront2ndRib, 0F, -halfPI, 0F); + this.leftFront3rdRib = new ModelRenderer(this, 0, 0); + this.leftFront3rdRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftFront3rdRib.setRotationPoint(7F, -16F, 2F); + this.leftFront3rdRib.setTextureSize(64, 32); + this.leftFront3rdRib.mirror = true; + this.setRotation(this.leftFront3rdRib, 0F, -halfPI, 0F); + this.leftSideBotRib = new ModelRenderer(this, 0, 0); + this.leftSideBotRib.addBox(-1F, 0F, -6F, 1, 2, 6); + this.leftSideBotRib.setRotationPoint(7F, -13F, 7F); + this.leftSideBotRib.setTextureSize(64, 32); + this.leftSideBotRib.mirror = true; + this.setRotation(this.leftSideBotRib, 0F, 0F, 0F); + this.leftSide3rdRib = new ModelRenderer(this, 0, 0); + this.leftSide3rdRib.addBox(-1F, 0F, -6F, 1, 2, 6); + this.leftSide3rdRib.setRotationPoint(7F, -16F, 7F); + this.leftSide3rdRib.setTextureSize(64, 32); + this.leftSide3rdRib.mirror = true; + this.setRotation(this.leftSide3rdRib, 0F, 0F, 0F); + this.leftSide2ndRib = new ModelRenderer(this, 0, 0); + this.leftSide2ndRib.addBox(-1F, 0F, -6F, 1, 2, 6); + this.leftSide2ndRib.setRotationPoint(7F, -19F, 7F); + this.leftSide2ndRib.setTextureSize(64, 32); + this.leftSide2ndRib.mirror = true; + this.setRotation(this.leftSide2ndRib, 0F, 0F, 0F); + this.leftSideTopRib = new ModelRenderer(this, 0, 0); + this.leftSideTopRib.addBox(-1F, 0F, -6F, 1, 2, 6); + this.leftSideTopRib.setRotationPoint(7F, -22F, 7F); + this.leftSideTopRib.setTextureSize(64, 32); + this.leftSideTopRib.mirror = true; + this.setRotation(this.leftSideTopRib, 0F, 0F, 0F); + this.rightSideTopRib = new ModelRenderer(this, 0, 0); + this.rightSideTopRib.addBox(0F, 0F, -6F, 1, 2, 6); + this.rightSideTopRib.setRotationPoint(-7F, -22F, 7F); + this.rightSideTopRib.setTextureSize(64, 32); + this.rightSideTopRib.mirror = true; + this.setRotation(this.rightSideTopRib, 0F, 0F, 0F); + this.rightSide2ndRib = new ModelRenderer(this, 0, 0); + this.rightSide2ndRib.addBox(0F, 0F, -6F, 1, 2, 6); + this.rightSide2ndRib.setRotationPoint(-7F, -19F, 7F); + this.rightSide2ndRib.setTextureSize(64, 32); + this.rightSide2ndRib.mirror = true; + this.setRotation(this.rightSide2ndRib, 0F, 0F, 0F); + this.rightSide3rdRib = new ModelRenderer(this, 0, 0); + this.rightSide3rdRib.addBox(0F, 0F, -6F, 1, 2, 6); + this.rightSide3rdRib.setRotationPoint(-7F, -16F, 7F); + this.rightSide3rdRib.setTextureSize(64, 32); + this.rightSide3rdRib.mirror = true; + this.setRotation(this.rightSide3rdRib, 0F, 0F, 0F); + this.rightSideBotRib = new ModelRenderer(this, 0, 0); + this.rightSideBotRib.addBox(0F, 0F, -6F, 1, 2, 6); + this.rightSideBotRib.setRotationPoint(-7F, -13F, 7F); + this.rightSideBotRib.setTextureSize(64, 32); + this.rightSideBotRib.mirror = true; + this.setRotation(this.rightSideBotRib, 0F, 0F, 0F); + this.rightFrontBotRib = new ModelRenderer(this, 0, 0); + this.rightFrontBotRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightFrontBotRib.setRotationPoint(-7F, -13F, 2F); + this.rightFrontBotRib.setTextureSize(64, 32); + this.rightFrontBotRib.mirror = true; + this.setRotation(this.rightFrontBotRib, 0F, halfPI, 0F); + this.rightFront3rdRib = new ModelRenderer(this, 0, 0); + this.rightFront3rdRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightFront3rdRib.setRotationPoint(-7F, -16F, 2F); + this.rightFront3rdRib.setTextureSize(64, 32); + this.rightFront3rdRib.mirror = true; + this.setRotation(this.rightFront3rdRib, 0F, halfPI, 0F); + this.rightFront2ndRib = new ModelRenderer(this, 0, 0); + this.rightFront2ndRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightFront2ndRib.setRotationPoint(-7F, -19F, 2F); + this.rightFront2ndRib.setTextureSize(64, 32); + this.rightFront2ndRib.mirror = true; + this.setRotation(this.rightFront2ndRib, 0F, halfPI, 0F); + this.rightFrontTopRib = new ModelRenderer(this, 0, 0); + this.rightFrontTopRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightFrontTopRib.setRotationPoint(-7F, -22F, 2F); + this.rightFrontTopRib.setTextureSize(64, 32); + this.rightFrontTopRib.mirror = true; + this.setRotation(this.rightFrontTopRib, 0F, halfPI, 0F); + this.leftBackTopRib = new ModelRenderer(this, 0, 0); + this.leftBackTopRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftBackTopRib.setRotationPoint(7F, -22F, 7F); + this.leftBackTopRib.setTextureSize(64, 32); + this.leftBackTopRib.mirror = true; + this.setRotation(this.leftBackTopRib, 0F, -halfPI, 0F); + this.leftBack2ndRib = new ModelRenderer(this, 0, 0); + this.leftBack2ndRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftBack2ndRib.setRotationPoint(7F, -19F, 7F); + this.leftBack2ndRib.setTextureSize(64, 32); + this.leftBack2ndRib.mirror = true; + this.setRotation(this.leftBack2ndRib, 0F, -halfPI, 0F); + this.leftBack3rdRib = new ModelRenderer(this, 0, 0); + this.leftBack3rdRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftBack3rdRib.setRotationPoint(7F, -16F, 7F); + this.leftBack3rdRib.setTextureSize(64, 32); + this.leftBack3rdRib.mirror = true; + this.setRotation(this.leftBack3rdRib, 0F, -halfPI, 0F); + this.leftBackBotRib = new ModelRenderer(this, 0, 0); + this.leftBackBotRib.addBox(-1F, 0F, 0F, 1, 2, 6); + this.leftBackBotRib.setRotationPoint(7F, -13F, 7F); + this.leftBackBotRib.setTextureSize(64, 32); + this.leftBackBotRib.mirror = true; + this.setRotation(this.leftBackBotRib, 0F, -halfPI, 0F); + this.rightBackBotRib = new ModelRenderer(this, 0, 0); + this.rightBackBotRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightBackBotRib.setRotationPoint(-7F, -13F, 7F); + this.rightBackBotRib.setTextureSize(64, 32); + this.rightBackBotRib.mirror = true; + this.setRotation(this.rightBackBotRib, 0F, halfPI, 0F); + this.rightBack3rdRib = new ModelRenderer(this, 0, 0); + this.rightBack3rdRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightBack3rdRib.setRotationPoint(-7F, -16F, 7F); + this.rightBack3rdRib.setTextureSize(64, 32); + this.rightBack3rdRib.mirror = true; + this.setRotation(this.rightBack3rdRib, 0F, halfPI, 0F); + this.rightBack2ndRib = new ModelRenderer(this, 0, 0); + this.rightBack2ndRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightBack2ndRib.setRotationPoint(-7F, -19F, 7F); + this.rightBack2ndRib.setTextureSize(64, 32); + this.rightBack2ndRib.mirror = true; + this.setRotation(this.rightBack2ndRib, 0F, halfPI, 0F); + this.rightBackTopRib = new ModelRenderer(this, 0, 0); + this.rightBackTopRib.addBox(0F, 0F, 0F, 1, 2, 6); + this.rightBackTopRib.setRotationPoint(-7F, -22F, 7F); + this.rightBackTopRib.setTextureSize(64, 32); + this.rightBackTopRib.mirror = true; + this.setRotation(this.rightBackTopRib, 0F, halfPI, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.upperHead.render(f5); + this.pelvis.render(f5); + this.sternum.render(f5); + this.rightLeg.render(f5); + this.rightArm.render(f5); + this.spine.render(f5); + this.leftArm.render(f5); + this.leftLeg.render(f5); + this.leftFrontBotRib.render(f5); + this.leftFrontTopRib.render(f5); + this.leftFront2ndRib.render(f5); + this.leftFront3rdRib.render(f5); + this.leftSideBotRib.render(f5); + this.leftSide3rdRib.render(f5); + this.leftSide2ndRib.render(f5); + this.leftSideTopRib.render(f5); + this.rightSideTopRib.render(f5); + this.rightSide2ndRib.render(f5); + this.rightSide3rdRib.render(f5); + this.rightSideBotRib.render(f5); + this.rightFrontBotRib.render(f5); + this.rightFront3rdRib.render(f5); + this.rightFront2ndRib.render(f5); + this.rightFrontTopRib.render(f5); + this.leftBackTopRib.render(f5); + this.leftBack2ndRib.render(f5); + this.leftBack3rdRib.render(f5); + this.leftBackBotRib.render(f5); + this.rightBackBotRib.render(f5); + this.rightBack3rdRib.render(f5); + this.rightBack2ndRib.render(f5); + this.rightBackTopRib.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity e) + { + final float floatPI = 3.1415927F; + + final EntitySkeletonBoss boss = (EntitySkeletonBoss) e; + super.setRotationAngles(par1, par2, par3, par4, par5, par6, e); + this.upperHead.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + this.upperHead.rotateAngleX = par5 / Constants.RADIANS_TO_DEGREES; + this.rightArm.rotateAngleX = MathHelper.cos(par1 * 0.6662F + floatPI) * 2.0F * par2 * 0.5F; + this.leftArm.rotateAngleX = MathHelper.cos(par1 * 0.6662F) * 2.0F * par2 * 0.5F; + this.rightArm.rotateAngleZ = 0.0F; + this.leftArm.rotateAngleZ = 0.0F; + this.rightLeg.rotateAngleX = MathHelper.cos(par1 * 0.6662F) * 1.4F * par2; + this.leftLeg.rotateAngleX = MathHelper.cos(par1 * 0.6662F + floatPI) * 1.4F * par2; + this.rightLeg.rotateAngleY = 0.0F; + this.leftLeg.rotateAngleY = 0.0F; + + if (this.isRiding) + { + this.rightArm.rotateAngleX += -(floatPI / 5F); + this.leftArm.rotateAngleX += -(floatPI / 5F); + this.rightLeg.rotateAngleX = -(floatPI * 2F / 5F); + this.leftLeg.rotateAngleX = -(floatPI * 2F / 5F); + this.rightLeg.rotateAngleY = floatPI / 10F; + this.leftLeg.rotateAngleY = -(floatPI / 10F); + } + + this.rightArm.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + this.leftArm.rotateAngleY = par4 / Constants.RADIANS_TO_DEGREES; + float var7; + float var8; + + if (this.swingProgress > -9990.0F) + { + var7 = this.swingProgress; + this.spine.rotateAngleY = MathHelper.sin(MathHelper.sqrt(var7) * Constants.twoPI) * 0.2F; + + this.rightArm.rotationPointZ = MathHelper.sin(this.spine.rotateAngleY) * 5.0F; + this.rightArm.rotationPointX = -MathHelper.cos(this.spine.rotateAngleY) * 5.0F; + this.leftArm.rotationPointZ = -MathHelper.sin(this.spine.rotateAngleY) * 5.0F; + this.leftArm.rotationPointX = MathHelper.cos(this.spine.rotateAngleY) * 5.0F; + this.rightArm.rotateAngleY += this.spine.rotateAngleY; + this.leftArm.rotateAngleY += this.spine.rotateAngleY; + this.leftArm.rotateAngleX += this.spine.rotateAngleY; + var7 = 1.0F - this.swingProgress; + var7 *= var7; + var7 *= var7; + var7 = 1.0F - var7; + var8 = MathHelper.sin(var7 * floatPI); + final float var9 = MathHelper.sin(this.swingProgress * floatPI) * -(this.upperHead.rotateAngleX - 0.7F) * 0.75F; + this.rightArm.rotateAngleX = (float) (this.rightArm.rotateAngleX - (var8 * 1.2D + var9)); + this.rightArm.rotateAngleY += this.spine.rotateAngleY * 2.0F; + this.rightArm.rotateAngleZ = MathHelper.sin(this.swingProgress * floatPI) * -0.4F; + } + + final float f6 = MathHelper.sin(this.swingProgress * floatPI); + final float f7 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * floatPI); + this.rightArm.rotateAngleZ = 0.0F; + this.leftArm.rotateAngleZ = 0.0F; + this.rightArm.rotateAngleY = 0.5F * (par4 / Constants.RADIANS_TO_DEGREES) + -(0.1F - f6 * 0.6F); + this.leftArm.rotateAngleY = 0.5F * (par4 / Constants.RADIANS_TO_DEGREES) + 0.1F - f6 * 0.6F; + this.rightArm.rotateAngleX = -(floatPI / 2F); + this.leftArm.rotateAngleX = -(floatPI / 2F); + this.rightArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F; + this.leftArm.rotateAngleX -= f6 * 1.2F - f7 * 0.4F; + this.rightArm.rotateAngleZ += MathHelper.cos(par3 * 0.09F) * 0.05F + 0.05F; + this.leftArm.rotateAngleZ -= MathHelper.cos(par3 * 0.09F) * 0.05F + 0.05F; + this.rightArm.rotateAngleX += MathHelper.sin(par3 * 0.067F) * 0.05F; + this.leftArm.rotateAngleX -= MathHelper.sin(par3 * 0.067F) * 0.05F; + + if (((EntitySkeletonBoss) e).deathTicks > 0) + { + this.leftArm.rotateAngleX = -(floatPI / 2F) + (float) (Math.pow(((EntitySkeletonBoss) e).deathTicks, 2) / 5.0F) / 3.0F / Constants.RADIANS_TO_DEGREES; + this.rightArm.rotateAngleX = -(floatPI / 2F) + (float) (Math.pow(((EntitySkeletonBoss) e).deathTicks, 2) / 5.0F) / 2.0F / Constants.RADIANS_TO_DEGREES; + } + + if (boss.throwTimer + boss.postThrowDelay > 0) + { + this.rightArm.rotateAngleX -= MathHelper.cos((boss.throwTimer + boss.postThrowDelay) * 0.05F) * 1.2F + 0.05F; + this.leftArm.rotateAngleX -= MathHelper.cos((boss.throwTimer + boss.postThrowDelay) * 0.05F) * 1.2F + 0.05F; + } + } + + public void postRenderArm(float scale, ItemCameraTransforms.TransformType type) + { + if (type == ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND) + { + this.rightArm.postRender(scale); + } else + { + this.leftArm.postRender(scale); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSpider.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSpider.java new file mode 100644 index 00000000..2a416729 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedSpider.java @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelEvolvedSpider extends ModelBase +{ + + ModelRenderer body; + ModelRenderer rearEnd; + ModelRenderer leg8; + ModelRenderer leg6; + ModelRenderer leg4; + ModelRenderer leg2; + ModelRenderer leg7; + ModelRenderer leg5; + ModelRenderer leg3; + ModelRenderer leg1; + ModelRenderer head; + + ModelRenderer oxygenMask; + ModelRenderer tank1; + ModelRenderer tank2; + ModelRenderer tube1; + ModelRenderer tube2; + ModelRenderer tube3; + ModelRenderer tube4; + ModelRenderer tube5; + ModelRenderer tube6; + ModelRenderer tube7; + ModelRenderer tube8; + ModelRenderer tube9; + ModelRenderer tube10; + ModelRenderer tube11; + ModelRenderer tube12; + ModelRenderer tube13; + ModelRenderer tube15; + ModelRenderer tube14; + ModelRenderer tube16; + ModelRenderer tube17; + ModelRenderer tube18; + + public ModelEvolvedSpider() + { + this(0.0F); + } + + public ModelEvolvedSpider(float par1) + { + this.textureWidth = 128; + this.textureHeight = 64; + + this.body = new ModelRenderer(this, 0, 0); + this.body.addBox(-3F, -3F, -3F, 6, 6, 6, par1); + this.body.setRotationPoint(0F, 15F, 0F); + this.body.setTextureSize(128, 64); + this.body.mirror = true; + this.setRotation(this.body, 0F, 0F, 0F); + this.rearEnd = new ModelRenderer(this, 0, 12); + this.rearEnd.addBox(-5F, -4F, -6F, 10, 8, 12, par1); + this.rearEnd.setRotationPoint(0F, 15F, 9F); + this.rearEnd.setTextureSize(128, 64); + this.rearEnd.mirror = true; + this.setRotation(this.rearEnd, 0F, 0F, 0F); + this.leg8 = new ModelRenderer(this, 18, 0); + this.leg8.addBox(-1F, -1F, -1F, 16, 2, 2, par1); + this.leg8.setRotationPoint(4F, 15F, -1F); + this.leg8.setTextureSize(128, 64); + this.leg8.mirror = true; + this.setRotation(this.leg8, 0F, 0.5759587F, 0.1919862F); + this.leg6 = new ModelRenderer(this, 18, 0); + this.leg6.addBox(-1F, -1F, -1F, 16, 2, 2, par1); + this.leg6.setRotationPoint(4F, 15F, 0F); + this.leg6.setTextureSize(128, 64); + this.leg6.mirror = true; + this.setRotation(this.leg6, 0F, 0.2792527F, 0.1919862F); + this.leg4 = new ModelRenderer(this, 18, 0); + this.leg4.addBox(-1F, -1F, -1F, 16, 2, 2, par1); + this.leg4.setRotationPoint(4F, 15F, 1F); + this.leg4.setTextureSize(128, 64); + this.leg4.mirror = true; + this.setRotation(this.leg4, 0F, -0.2792527F, 0.1919862F); + this.leg2 = new ModelRenderer(this, 18, 0); + this.leg2.addBox(-1F, -1F, -1F, 16, 2, 2, par1); + this.leg2.setRotationPoint(4F, 15F, 2F); + this.leg2.setTextureSize(128, 64); + this.leg2.mirror = true; + this.setRotation(this.leg2, 0F, -0.5759587F, 0.1919862F); + this.leg7 = new ModelRenderer(this, 18, 0); + this.leg7.addBox(-15F, -1F, -1F, 16, 2, 2, par1); + this.leg7.setRotationPoint(-4F, 15F, -1F); + this.leg7.setTextureSize(128, 64); + this.leg7.mirror = true; + this.setRotation(this.leg7, 0F, -0.5759587F, -0.1919862F); + this.leg5 = new ModelRenderer(this, 18, 0); + this.leg5.addBox(-15F, -1F, -1F, 16, 2, 2, par1); + this.leg5.setRotationPoint(-4F, 15F, 0F); + this.leg5.setTextureSize(128, 64); + this.leg5.mirror = true; + this.setRotation(this.leg5, 0F, -0.2792527F, -0.1919862F); + this.leg3 = new ModelRenderer(this, 18, 0); + this.leg3.addBox(-15F, -1F, -1F, 16, 2, 2, par1); + this.leg3.setRotationPoint(-4F, 15F, 1F); + this.leg3.setTextureSize(128, 64); + this.leg3.mirror = true; + this.setRotation(this.leg3, 0F, 0.2792527F, -0.1919862F); + this.leg1 = new ModelRenderer(this, 18, 0); + this.leg1.addBox(-15F, -1F, -1F, 16, 2, 2, par1); + this.leg1.setRotationPoint(-4F, 15F, 2F); + this.leg1.setTextureSize(128, 64); + this.leg1.mirror = true; + this.setRotation(this.leg1, 0F, 0.5759587F, -0.1919862F); + this.head = new ModelRenderer(this, 32, 4); + this.head.addBox(-4F, -4F, -8F, 8, 8, 8, par1); + this.head.setRotationPoint(0F, 15F, -3F); + this.head.setTextureSize(128, 64); + this.head.mirror = true; + this.setRotation(this.head, 0F, 0F, 0F); + + this.oxygenMask = new ModelRenderer(this, 0, 32); + this.oxygenMask.addBox(-5F, -5F, -9F, 10, 10, 10, par1); + this.oxygenMask.setRotationPoint(0F, 15F, -3F); + this.oxygenMask.setTextureSize(128, 64); + this.oxygenMask.mirror = true; + this.setRotation(this.oxygenMask, 0F, 0F, 0F); + this.tank1 = new ModelRenderer(this, 40, 34); + this.tank1.addBox(1F, -3F, 0F, 3, 3, 7, par1); + this.tank1.setRotationPoint(0F, 11F, 4F); + this.tank1.setTextureSize(128, 64); + this.tank1.mirror = true; + this.setRotation(this.tank1, 0F, 0F, 0F); + this.tank2 = new ModelRenderer(this, 40, 34); + this.tank2.addBox(-4F, -3F, 0F, 3, 3, 7, par1); + this.tank2.setRotationPoint(0F, 11F, 4F); + this.tank2.setTextureSize(128, 64); + this.tank2.mirror = true; + this.setRotation(this.tank2, 0F, 0F, 0F); + this.tube1 = new ModelRenderer(this, 40, 32); + this.tube1.addBox(2F, 0F, -6.5F, 1, 1, 1, par1); + this.tube1.setRotationPoint(0F, 11F, 4F); + this.tube1.setTextureSize(128, 64); + this.tube1.mirror = true; + this.setRotation(this.tube1, 0F, 0F, 0F); + this.tube2 = new ModelRenderer(this, 40, 32); + this.tube2.addBox(2F, -1F, -5.5F, 1, 1, 1, par1); + this.tube2.setRotationPoint(0F, 11F, 4F); + this.tube2.setTextureSize(128, 64); + this.tube2.mirror = true; + this.setRotation(this.tube2, 0F, 0F, 0F); + this.tube3 = new ModelRenderer(this, 40, 32); + this.tube3.addBox(2F, -1F, -4.5F, 1, 1, 1, par1); + this.tube3.setRotationPoint(0F, 11F, 4F); + this.tube3.setTextureSize(128, 64); + this.tube3.mirror = true; + this.setRotation(this.tube3, 0F, 0F, 0F); + this.tube4 = new ModelRenderer(this, 40, 32); + this.tube4.addBox(2F, -2F, -3.5F, 1, 1, 1, par1); + this.tube4.setRotationPoint(0F, 11F, 4F); + this.tube4.setTextureSize(128, 64); + this.tube4.mirror = true; + this.setRotation(this.tube4, 0F, 0F, 0F); + this.tube5 = new ModelRenderer(this, 40, 32); + this.tube5.addBox(2F, -3F, -2.5F, 1, 1, 1, par1); + this.tube5.setRotationPoint(0F, 11F, 4F); + this.tube5.setTextureSize(128, 64); + this.tube5.mirror = true; + this.setRotation(this.tube5, 0F, 0F, 0F); + this.tube6 = new ModelRenderer(this, 40, 32); + this.tube6.addBox(2F, -4F, -2.5F, 1, 1, 1, par1); + this.tube6.setRotationPoint(0F, 11F, 4F); + this.tube6.setTextureSize(128, 64); + this.tube6.mirror = true; + this.setRotation(this.tube6, 0F, 0F, 0F); + this.tube7 = new ModelRenderer(this, 40, 32); + this.tube7.addBox(2F, -5F, -1.5F, 1, 1, 1, par1); + this.tube7.setRotationPoint(0F, 11F, 4F); + this.tube7.setTextureSize(128, 64); + this.tube7.mirror = true; + this.setRotation(this.tube7, 0F, 0F, 0F); + this.tube8 = new ModelRenderer(this, 40, 32); + this.tube8.addBox(2F, -5F, -0.5F, 1, 1, 1, par1); + this.tube8.setRotationPoint(0F, 11F, 4F); + this.tube8.setTextureSize(128, 64); + this.tube8.mirror = true; + this.setRotation(this.tube8, 0F, 0F, 0F); + this.tube9 = new ModelRenderer(this, 40, 32); + this.tube9.addBox(2F, -4F, 0.5F, 1, 1, 1, par1); + this.tube9.setRotationPoint(0F, 11F, 4F); + this.tube9.setTextureSize(128, 64); + this.tube9.mirror = true; + this.setRotation(this.tube9, 0F, 0F, 0F); + this.tube10 = new ModelRenderer(this, 40, 32); + this.tube10.addBox(-3F, 0F, -6.5F, 1, 1, 1, par1); + this.tube10.setRotationPoint(0F, 11F, 4F); + this.tube10.setTextureSize(128, 64); + this.tube10.mirror = true; + this.setRotation(this.tube10, 0F, 0F, 0F); + this.tube11 = new ModelRenderer(this, 40, 32); + this.tube11.addBox(-3F, -1F, -5.5F, 1, 1, 1, par1); + this.tube11.setRotationPoint(0F, 11F, 4F); + this.tube11.setTextureSize(128, 64); + this.tube11.mirror = true; + this.setRotation(this.tube11, 0F, 0F, 0F); + this.tube12 = new ModelRenderer(this, 40, 32); + this.tube12.addBox(-3F, -1F, -4.5F, 1, 1, 1, par1); + this.tube12.setRotationPoint(0F, 11F, 4F); + this.tube12.setTextureSize(128, 64); + this.tube12.mirror = true; + this.setRotation(this.tube12, 0F, 0F, 0F); + this.tube13 = new ModelRenderer(this, 40, 32); + this.tube13.addBox(-3F, -2F, -3.5F, 1, 1, 1, par1); + this.tube13.setRotationPoint(0F, 11F, 4F); + this.tube13.setTextureSize(128, 64); + this.tube13.mirror = true; + this.setRotation(this.tube13, 0F, 0F, 0F); + this.tube15 = new ModelRenderer(this, 40, 32); + this.tube15.addBox(-3F, -4F, -2.5F, 1, 1, 1, par1); + this.tube15.setRotationPoint(0F, 11F, 4F); + this.tube15.setTextureSize(128, 64); + this.tube15.mirror = true; + this.setRotation(this.tube15, 0F, 0F, 0F); + this.tube14 = new ModelRenderer(this, 40, 32); + this.tube14.addBox(-3F, -3F, -2.5F, 1, 1, 1, par1); + this.tube14.setRotationPoint(0F, 11F, 4F); + this.tube14.setTextureSize(128, 64); + this.tube14.mirror = true; + this.setRotation(this.tube14, 0F, 0F, 0F); + this.tube16 = new ModelRenderer(this, 40, 32); + this.tube16.addBox(-3F, -5F, -1.5F, 1, 1, 1, par1); + this.tube16.setRotationPoint(0F, 11F, 4F); + this.tube16.setTextureSize(128, 64); + this.tube16.mirror = true; + this.setRotation(this.tube16, 0F, 0F, 0F); + this.tube17 = new ModelRenderer(this, 40, 32); + this.tube17.addBox(-3F, -5F, -0.5F, 1, 1, 1, par1); + this.tube17.setRotationPoint(0F, 11F, 4F); + this.tube17.setTextureSize(128, 64); + this.tube17.mirror = true; + this.setRotation(this.tube17, 0F, 0F, 0F); + this.tube18 = new ModelRenderer(this, 40, 32); + this.tube18.addBox(-3F, -4F, 0.5F, 1, 1, 1, par1); + this.tube18.setRotationPoint(0F, 11F, 4F); + this.tube18.setTextureSize(128, 64); + this.tube18.mirror = true; + this.setRotation(this.tube18, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5); + this.body.render(f5); + this.rearEnd.render(f5); + this.leg8.render(f5); + this.leg6.render(f5); + this.leg4.render(f5); + this.leg2.render(f5); + this.leg7.render(f5); + this.leg5.render(f5); + this.leg3.render(f5); + this.leg1.render(f5); + this.head.render(f5); + this.oxygenMask.render(f5); + this.tank1.render(f5); + this.tank2.render(f5); + this.tube1.render(f5); + this.tube2.render(f5); + this.tube3.render(f5); + this.tube4.render(f5); + this.tube5.render(f5); + this.tube6.render(f5); + this.tube7.render(f5); + this.tube8.render(f5); + this.tube9.render(f5); + this.tube10.render(f5); + this.tube11.render(f5); + this.tube12.render(f5); + this.tube13.render(f5); + this.tube15.render(f5); + this.tube14.render(f5); + this.tube16.render(f5); + this.tube17.render(f5); + this.tube18.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + this.head.rotateAngleY = f3 / Constants.RADIANS_TO_DEGREES; + this.head.rotateAngleX = f4 / Constants.RADIANS_TO_DEGREES; + this.oxygenMask.rotateAngleY = f3 / Constants.RADIANS_TO_DEGREES; + this.oxygenMask.rotateAngleX = f4 / Constants.RADIANS_TO_DEGREES; + final float var7 = (float) Math.PI / 4F; + this.leg1.rotateAngleZ = -var7; + this.leg2.rotateAngleZ = var7; + this.leg3.rotateAngleZ = -var7 * 0.74F; + this.leg4.rotateAngleZ = var7 * 0.74F; + this.leg5.rotateAngleZ = -var7 * 0.74F; + this.leg6.rotateAngleZ = var7 * 0.74F; + this.leg7.rotateAngleZ = -var7; + this.leg8.rotateAngleZ = var7; + final float var8 = -0.0F; + final float var9 = 0.3926991F; + this.leg1.rotateAngleY = var9 * 2.0F + var8; + this.leg2.rotateAngleY = -var9 * 2.0F - var8; + this.leg3.rotateAngleY = var9 * 1.0F + var8; + this.leg4.rotateAngleY = -var9 * 1.0F - var8; + this.leg5.rotateAngleY = -var9 * 1.0F + var8; + this.leg6.rotateAngleY = var9 * 1.0F - var8; + this.leg7.rotateAngleY = -var9 * 2.0F + var8; + this.leg8.rotateAngleY = var9 * 2.0F - var8; + final float var10 = -(MathHelper.cos(f * 0.6662F * 2.0F + 0.0F) * 0.4F) * f1; + final float var11 = -(MathHelper.cos(f * 0.6662F * 2.0F + (float) Math.PI) * 0.4F) * f1; + final float var12 = -(MathHelper.cos(f * 0.6662F * 2.0F + Constants.halfPI) * 0.4F) * f1; + final float var13 = -(MathHelper.cos(f * 0.6662F * 2.0F + 3F * Constants.halfPI) * 0.4F) * f1; + final float var14 = Math.abs(MathHelper.sin(f * 0.6662F + 0.0F) * 0.4F) * f1; + final float var15 = Math.abs(MathHelper.sin(f * 0.6662F + (float) Math.PI) * 0.4F) * f1; + final float var16 = Math.abs(MathHelper.sin(f * 0.6662F + Constants.halfPI) * 0.4F) * f1; + final float var17 = Math.abs(MathHelper.sin(f * 0.6662F + 3F * Constants.halfPI) * 0.4F) * f1; + this.leg1.rotateAngleY += var10; + this.leg2.rotateAngleY += -var10; + this.leg3.rotateAngleY += var11; + this.leg4.rotateAngleY += -var11; + this.leg5.rotateAngleY += var12; + this.leg6.rotateAngleY += -var12; + this.leg7.rotateAngleY += var13; + this.leg8.rotateAngleY += -var13; + this.leg1.rotateAngleZ += var14; + this.leg2.rotateAngleZ += -var14; + this.leg3.rotateAngleZ += var15; + this.leg4.rotateAngleZ += -var15; + this.leg5.rotateAngleZ += var16; + this.leg6.rotateAngleZ += -var16; + this.leg7.rotateAngleZ += var17; + this.leg8.rotateAngleZ += -var17; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedWitch.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedWitch.java new file mode 100644 index 00000000..539d2b04 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedWitch.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelWitch; +import net.minecraft.entity.Entity; + +public class ModelEvolvedWitch extends ModelWitch +{ + + ModelRenderer tank1; + ModelRenderer tank2; + ModelRenderer oxygenMask; + ModelRenderer tube1; + ModelRenderer tube2; + ModelRenderer tube3; + ModelRenderer tube4; + ModelRenderer tube5; + ModelRenderer tube6; + ModelRenderer tube7; + ModelRenderer tube8; + ModelRenderer tube9; + ModelRenderer tube10; + ModelRenderer tube11; + ModelRenderer tube12; + ModelRenderer tube13; + ModelRenderer tube14; + ModelRenderer tube15; + ModelRenderer tube16; + ModelRenderer tube17; + ModelRenderer tube18; + + public ModelEvolvedWitch() + { + super(0.0F); + this.textureWidth = 64; + this.textureHeight = 128; + + this.tank1 = new ModelRenderer(this, 52, 66); + this.tank1.addBox(0F, 0F, 0F, 3, 7, 3); + this.tank1.setRotationPoint(0F, 4F, 3F); + + this.tank2 = new ModelRenderer(this, 52, 66); + this.tank2.addBox(0F, 0F, 0F, 3, 7, 3); + this.tank2.setRotationPoint(-3F, 4F, 3F); + + this.oxygenMask = new ModelRenderer(this, 24, 90); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10); + this.oxygenMask.setRotationPoint(0F, 1F, 0F); + + this.tube1 = new ModelRenderer(this, 60, 76); + this.tube1.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube1.setRotationPoint(1F, 4.5F, 6F); + + this.tube2 = new ModelRenderer(this, 60, 76); + this.tube2.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube2.setRotationPoint(1F, 3.5F, 7F); + + this.tube3 = new ModelRenderer(this, 60, 76); + this.tube3.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube3.setRotationPoint(1F, 2.5F, 7.5F); + + this.tube4 = new ModelRenderer(this, 60, 76); + this.tube4.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube4.setRotationPoint(1F, 1.5F, 7.5F); + + this.tube5 = new ModelRenderer(this, 60, 76); + this.tube5.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube5.setRotationPoint(1F, 0.5F, 7.5F); + + this.tube6 = new ModelRenderer(this, 60, 76); + this.tube6.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube6.setRotationPoint(1F, -0.5F, 7F); + + this.tube7 = new ModelRenderer(this, 60, 76); + this.tube7.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube7.setRotationPoint(1F, -1.5F, 6F); + + this.tube8 = new ModelRenderer(this, 60, 76); + this.tube8.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube8.setRotationPoint(1F, -2.5F, 5F); + + this.tube9 = new ModelRenderer(this, 60, 76); + this.tube9.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube9.setRotationPoint(1F, -3F, 4F); + + this.tube10 = new ModelRenderer(this, 60, 76); + this.tube10.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube10.setRotationPoint(-2F, 4.5F, 6F); + + this.tube11 = new ModelRenderer(this, 60, 76); + this.tube11.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube11.setRotationPoint(-2F, 3.5F, 7F); + + this.tube12 = new ModelRenderer(this, 60, 76); + this.tube12.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube12.setRotationPoint(-2F, 2.5F, 7.5F); + + this.tube13 = new ModelRenderer(this, 60, 76); + this.tube13.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube13.setRotationPoint(-2F, 1.5F, 7.5F); + + this.tube14 = new ModelRenderer(this, 60, 76); + this.tube14.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube14.setRotationPoint(-2F, 0.5F, 7.5F); + + this.tube15 = new ModelRenderer(this, 60, 76); + this.tube15.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube15.setRotationPoint(-2F, -0.5F, 7F); + + this.tube16 = new ModelRenderer(this, 60, 76); + this.tube16.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube16.setRotationPoint(-2F, -1.5F, 6F); + + this.tube17 = new ModelRenderer(this, 60, 76); + this.tube17.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube17.setRotationPoint(-2F, -2.5F, 5F); + + this.tube18 = new ModelRenderer(this, 60, 76); + this.tube18.addBox(0F, 0F, 0F, 1, 1, 1); + this.tube18.setRotationPoint(-2F, -3F, 4F); + } + + @Override + public void render(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + super.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.tank1.render(scale); + this.tank2.render(scale); + this.oxygenMask.render(scale); + this.tube1.render(scale); + this.tube2.render(scale); + this.tube3.render(scale); + this.tube4.render(scale); + this.tube5.render(scale); + this.tube6.render(scale); + this.tube7.render(scale); + this.tube8.render(scale); + this.tube9.render(scale); + this.tube10.render(scale); + this.tube11.render(scale); + this.tube12.render(scale); + this.tube13.render(scale); + this.tube14.render(scale); + this.tube15.render(scale); + this.tube16.render(scale); + this.tube17.render(scale); + this.tube18.render(scale); + } + + @Override + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale, Entity entity) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entity); + this.oxygenMask.rotateAngleY = this.villagerHead.rotateAngleY; + this.oxygenMask.rotateAngleX = this.villagerHead.rotateAngleX; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedZombie.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedZombie.java new file mode 100644 index 00000000..781974ba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelEvolvedZombie.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import org.lwjgl.opengl.GL11; + +public class ModelEvolvedZombie extends ModelBiped +{ + + ModelRenderer leftOxygenTank; + ModelRenderer rightOxygenTank; + ModelRenderer tubeRight2; + ModelRenderer tubeLeft1; + ModelRenderer tubeRight3; + ModelRenderer tubeRight4; + ModelRenderer tubeRight5; + ModelRenderer tubeLeft6; + ModelRenderer tubeRight7; + ModelRenderer tubeRight1; + ModelRenderer tubeLeft2; + ModelRenderer tubeLeft3; + ModelRenderer tubeLeft4; + ModelRenderer tubeLeft5; + ModelRenderer tubeLeft7; + ModelRenderer tubeRight6; + ModelRenderer tubeLeft8; + ModelRenderer oxygenMask; + private float saveGravity; + private boolean renderGear; + + public ModelEvolvedZombie(boolean renderGear) + { + this(0.0F, false, renderGear); + } + + public ModelEvolvedZombie(float par1, boolean halfSizeTexture, boolean renderGear) + { + this.textureWidth = halfSizeTexture ? 64 : 128; + this.textureHeight = halfSizeTexture ? 32 : 64; + this.renderGear = renderGear; + final int par2 = 0; + this.leftOxygenTank = new ModelRenderer(this, 56, 20); + this.leftOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.leftOxygenTank.setRotationPoint(2F, 2F, 3.8F); + this.leftOxygenTank.mirror = true; + this.setRotation(this.leftOxygenTank, 0F, 0F, 0F); + this.rightOxygenTank = new ModelRenderer(this, 56, 20); + this.rightOxygenTank.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, par1); + this.rightOxygenTank.setRotationPoint(-2F, 2F, 3.8F); + this.rightOxygenTank.mirror = true; + this.setRotation(this.rightOxygenTank, 0F, 0F, 0F); + this.tubeRight2 = new ModelRenderer(this, 56, 30); + this.tubeRight2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight2.setRotationPoint(-2F, 2F, 6.8F); + this.tubeRight2.mirror = true; + this.setRotation(this.tubeRight2, 0F, 0F, 0F); + this.tubeLeft1 = new ModelRenderer(this, 56, 30); + this.tubeLeft1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft1.setRotationPoint(2F, 3F, 5.8F); + this.tubeLeft1.mirror = true; + this.setRotation(this.tubeLeft1, 0F, 0F, 0F); + this.tubeRight3 = new ModelRenderer(this, 56, 30); + this.tubeRight3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight3.setRotationPoint(-2F, 1F, 6.8F); + this.tubeRight3.mirror = true; + this.setRotation(this.tubeRight3, 0F, 0F, 0F); + this.tubeRight4 = new ModelRenderer(this, 56, 30); + this.tubeRight4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight4.setRotationPoint(-2F, 0F, 6.8F); + this.tubeRight4.mirror = true; + this.setRotation(this.tubeRight4, 0F, 0F, 0F); + this.tubeRight5 = new ModelRenderer(this, 56, 30); + this.tubeRight5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight5.setRotationPoint(-2F, -1F, 6.8F); + this.tubeRight5.mirror = true; + this.setRotation(this.tubeRight5, 0F, 0F, 0F); + this.tubeLeft6 = new ModelRenderer(this, 56, 30); + this.tubeLeft6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft6.setRotationPoint(2F, -2F, 5.8F); + this.tubeLeft6.mirror = true; + this.setRotation(this.tubeLeft6, 0F, 0F, 0F); + this.tubeRight7 = new ModelRenderer(this, 56, 30); + this.tubeRight7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight7.setRotationPoint(-2F, -3F, 4.8F); + this.tubeRight7.mirror = true; + this.setRotation(this.tubeRight7, 0F, 0F, 0F); + this.tubeRight1 = new ModelRenderer(this, 56, 30); + this.tubeRight1.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight1.setRotationPoint(-2F, 3F, 5.8F); + this.tubeRight1.mirror = true; + this.setRotation(this.tubeRight1, 0F, 0F, 0F); + this.tubeLeft2 = new ModelRenderer(this, 56, 30); + this.tubeLeft2.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft2.setRotationPoint(2F, 2F, 6.8F); + this.tubeLeft2.mirror = true; + this.setRotation(this.tubeLeft2, 0F, 0F, 0F); + this.tubeLeft3 = new ModelRenderer(this, 56, 30); + this.tubeLeft3.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft3.setRotationPoint(2F, 1F, 6.8F); + this.tubeLeft3.mirror = true; + this.setRotation(this.tubeLeft3, 0F, 0F, 0F); + this.tubeLeft4 = new ModelRenderer(this, 56, 30); + this.tubeLeft4.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft4.setRotationPoint(2F, 0F, 6.8F); + this.tubeLeft4.mirror = true; + this.setRotation(this.tubeLeft4, 0F, 0F, 0F); + this.tubeLeft5 = new ModelRenderer(this, 56, 30); + this.tubeLeft5.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft5.setRotationPoint(2F, -1F, 6.8F); + this.tubeLeft5.mirror = true; + this.setRotation(this.tubeLeft5, 0F, 0F, 0F); + this.tubeLeft7 = new ModelRenderer(this, 56, 30); + this.tubeLeft7.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeLeft7.setRotationPoint(2F, -3F, 4.8F); + this.tubeLeft7.mirror = true; + this.setRotation(this.tubeLeft7, 0F, 0F, 0F); + this.tubeRight6 = new ModelRenderer(this, 56, 30); + this.tubeRight6.addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, par1); + this.tubeRight6.setRotationPoint(-2F, -2F, 5.8F); + this.tubeRight6.mirror = true; + this.setRotation(this.tubeRight6, 0F, 0F, 0F); + this.tubeLeft8 = new ModelRenderer(this, 56, 30); + this.tubeLeft8.addBox(0F, 0F, 0F, 1, 1, 1, par1); + this.tubeLeft8.setRotationPoint(0F, -5F, 0F); + this.tubeLeft8.mirror = true; + this.setRotation(this.tubeLeft8, 0F, 0F, 0F); + this.oxygenMask = new ModelRenderer(this, 56, 0); + this.oxygenMask.addBox(-5F, -9F, -5F, 10, 10, 10, par1); + this.oxygenMask.setRotationPoint(0F, 0F, 0F); + this.oxygenMask.mirror = true; + this.setRotation(this.oxygenMask, 0F, 0F, 0F); + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, par1); + this.bipedHead.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, par1); + this.bipedBody.setRotationPoint(0.0F, 0.0F + par2, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, par1); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F + par2, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, par1); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + par2, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, par1); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F + par2, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, par1); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F + par2, 0.0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + this.saveGravity = WorldUtil.getGravityFactor(entity); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + if (this.isChild) + { + float f6 = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / f6, 1.5F / f6, 1.5F / f6); + GL11.glTranslatef(0.0F, 16.0F * f5, 0.0F); + this.bipedHead.render(f5); + if (this.renderGear) + { + this.oxygenMask.render(f5); + } + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / f6, 1.0F / f6, 1.0F / f6); + GL11.glTranslatef(0.0F, 24.0F * f5, 0.0F); + if (this.renderGear) + { + this.leftOxygenTank.render(f5); + this.rightOxygenTank.render(f5); + this.tubeRight2.render(f5); + this.tubeLeft1.render(f5); + this.tubeRight3.render(f5); + this.tubeRight4.render(f5); + this.tubeRight5.render(f5); + this.tubeLeft6.render(f5); + this.tubeRight7.render(f5); + this.tubeRight1.render(f5); + this.tubeLeft2.render(f5); + this.tubeLeft3.render(f5); + this.tubeLeft4.render(f5); + this.tubeLeft5.render(f5); + this.tubeLeft7.render(f5); + this.tubeRight6.render(f5); + this.tubeLeft8.render(f5); + } + this.bipedBody.render(f5); + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + this.bipedRightLeg.render(f5); + this.bipedLeftLeg.render(f5); + GL11.glPopMatrix(); + } else + { + if (this.renderGear) + { + this.leftOxygenTank.render(f5); + this.rightOxygenTank.render(f5); + this.tubeRight2.render(f5); + this.tubeLeft1.render(f5); + this.tubeRight3.render(f5); + this.tubeRight4.render(f5); + this.tubeRight5.render(f5); + this.tubeLeft6.render(f5); + this.tubeRight7.render(f5); + this.tubeRight1.render(f5); + this.tubeLeft2.render(f5); + this.tubeLeft3.render(f5); + this.tubeLeft4.render(f5); + this.tubeLeft5.render(f5); + this.tubeLeft7.render(f5); + this.tubeRight6.render(f5); + this.tubeLeft8.render(f5); + this.oxygenMask.render(f5); + } + this.bipedHead.render(f5); + this.bipedBody.render(f5); + this.bipedRightArm.render(f5); + this.bipedLeftArm.render(f5); + this.bipedRightLeg.render(f5); + this.bipedLeftLeg.render(f5); + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity entityIn) + { + super.setRotationAngles(p_78087_1_, p_78087_2_, p_78087_3_, p_78087_4_, p_78087_5_, p_78087_6_, entityIn); + float f = MathHelper.sin(this.swingProgress * (float) Math.PI); + float f1 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * (float) Math.PI); + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - f * 0.6F); + this.bipedLeftArm.rotateAngleY = 0.1F - f * 0.6F; + this.bipedRightArm.rotateAngleX = -((float) Math.PI / 2F); + this.bipedLeftArm.rotateAngleX = -((float) Math.PI / 2F); + this.bipedRightArm.rotateAngleX -= f * 1.2F - f1 * 0.4F; + this.bipedLeftArm.rotateAngleX -= f * 1.2F - f1 * 0.4F; + this.bipedRightArm.rotateAngleZ += MathHelper.cos(p_78087_3_ * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(p_78087_3_ * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(p_78087_3_ * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(p_78087_3_ * 0.067F) * 0.05F; + + copyModelAngles(this.bipedHead, this.oxygenMask); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelFlag.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelFlag.java new file mode 100644 index 00000000..25ee11a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelFlag.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import org.lwjgl.opengl.GL11; + +public class ModelFlag extends ModelBase +{ + + ModelRenderer base; + ModelRenderer pole; + + public ModelFlag() + { + this.textureWidth = 128; + this.textureHeight = 64; + this.base = new ModelRenderer(this, 4, 0); + this.base.addBox(-1.5F, 0F, -1.5F, 3, 1, 3); + this.base.setRotationPoint(0F, 23F, 0F); + this.base.setTextureSize(128, 64); + this.base.mirror = true; + this.setRotation(this.base, 0F, 0F, 0F); + this.pole = new ModelRenderer(this, 0, 0); + this.pole.addBox(-0.5F, -40F, -0.5F, 1, 40, 1); + this.pole.setRotationPoint(0F, 23F, 0F); + this.pole.setTextureSize(128, 64); + this.pole.mirror = true; + this.setRotation(this.pole, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + + if (entity instanceof EntityFlag) + { + EntityFlag flag = (EntityFlag) entity; + this.renderPole(flag, f5); + this.renderFlag(flag, flag.ticksExisted); + } + } + + public void renderPole(Entity entity, float f5) + { + this.base.render(f5); + this.pole.render(f5); + } + + public void renderFlag(EntityFlag entity, float ticks) + { + if (entity.flagData != null) + { + GL11.glPushMatrix(); + + GL11.glScalef(0.5F, 0.5F, 0.5F); + GL11.glTranslatef(0.0F, -1.1F, 0.0F); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_CULL_FACE); + + float windLevel = 1.0F; + + if (entity.world.provider instanceof IGalacticraftWorldProvider) + { + windLevel = ((IGalacticraftWorldProvider) entity.world.provider).getWindLevel(); + } + + for (int i = 0; i < entity.flagData.getWidth(); i++) + { + for (int j = 0; j < entity.flagData.getHeight(); j++) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0, -1.0F, 0); + float offset = 0.0F; + float offsetAhead = 0.0F; + + if (windLevel > 0) + { + offset = (float) (Math.sin(ticks / 2.0F + i * 50 + 3) / 25.0F) * i / 30.0F; + offsetAhead = (float) (Math.sin(ticks / 2.0F + (i + 1) * 50 + 3) / 25.0F) * (i + 1) / 30.0F; + offset *= windLevel; + offsetAhead *= windLevel; + } + + Vector3 col = entity.flagData.getColorAt(i, j); + GL11.glColor3f(col.floatX(), col.floatY(), col.floatZ()); + + Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_TRIANGLES, DefaultVertexFormats.POSITION); + + worldRenderer.pos(i / 24.0F + 0.0 / 24.0F, j / 24.0F + 0.0 / 24.0F + offset, offset).endVertex(); + worldRenderer.pos(i / 24.0F + 0.0 / 24.0F, j / 24.0F + 1.0 / 24.0F + offset, offset).endVertex(); + worldRenderer.pos(i / 24.0F + 1.0 / 24.0F, j / 24.0F + 1.0 / 24.0F + offsetAhead, offsetAhead).endVertex(); + + worldRenderer.pos(i / 24.0F + 0.0 / 24.0F, j / 24.0F + 0.0 / 24.0F + offset, offset).endVertex(); + worldRenderer.pos(i / 24.0F + 1.0 / 24.0F, j / 24.0F + 1.0 / 24.0F + offsetAhead, offsetAhead).endVertex(); + worldRenderer.pos(i / 24.0F + 1.0 / 24.0F, j / 24.0F + 0.0 / 24.0F + offsetAhead, offsetAhead).endVertex(); + + tess.draw(); + + GL11.glColor3f(1, 1, 1); + GL11.glPopMatrix(); + } + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glPopMatrix(); + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelKey.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelKey.java new file mode 100644 index 00000000..c5ce4544 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelKey.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelKey extends ModelBase +{ + + public ModelRenderer keyParts[] = new ModelRenderer[5]; + + public ModelKey() + { + this.textureWidth = 64; + this.textureHeight = 64; + this.keyParts[4] = new ModelRenderer(this, 50, 43); + this.keyParts[4].addBox(7F, 2F, -0.5F, 3, 1, 1); + this.keyParts[4].setRotationPoint(0F, 0F, 0F); + this.keyParts[4].setTextureSize(64, 64); + this.keyParts[4].mirror = true; + this.keyParts[3] = new ModelRenderer(this, 39, 43); + this.keyParts[3].addBox(6F, 1F, -0.5F, 4, 1, 1); + this.keyParts[3].setRotationPoint(0F, 0F, 0F); + this.keyParts[3].setTextureSize(64, 64); + this.keyParts[3].mirror = true; + this.keyParts[2] = new ModelRenderer(this, 14, 43); + this.keyParts[2].addBox(-0.5F, 0F, -0.5F, 11, 1, 1); + this.keyParts[2].setRotationPoint(0F, 0F, 0F); + this.keyParts[2].setTextureSize(64, 64); + this.keyParts[2].mirror = true; + this.keyParts[1] = new ModelRenderer(this, 9, 43); + this.keyParts[1].addBox(-1.5F, -0.5F, -0.5F, 1, 2, 1); + this.keyParts[1].setRotationPoint(0F, 0F, 0F); + this.keyParts[1].setTextureSize(64, 64); + this.keyParts[1].mirror = true; + this.keyParts[0] = new ModelRenderer(this, 0, 43); + this.keyParts[0].addBox(-4.5F, -1F, -0.5F, 3, 3, 1); + this.keyParts[0].setRotationPoint(0F, 0F, 0F); + this.keyParts[0].setTextureSize(64, 64); + this.keyParts[0].mirror = true; + } + + public void renderAll() + { + for (final ModelRenderer nmtmr : this.keyParts) + { + nmtmr.rotationPointX = -4.0F; + nmtmr.rotationPointY = 0.0F; + nmtmr.rotationPointZ = -2.0F; + nmtmr.render(0.0625F); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelLander.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelLander.java new file mode 100644 index 00000000..793fa90c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelLander.java @@ -0,0 +1,545 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.entity.Entity; + +public class ModelLander extends ModelBase +{ + + ModelRendererGC bodyMain1; + ModelRendererGC bodyMain2; + ModelRendererGC bodyAux1; + ModelRendererGC bodyAux2; + ModelRendererGC bodyAux3; + ModelRendererGC bodyAux4; + ModelRendererGC bodySupportMain1; + ModelRendererGC bodySupportMain2; + ModelRendererGC legStructureAux1e; + ModelRendererGC footBaseg; + ModelRendererGC legStructure1i; + ModelRendererGC legBase1j; + ModelRendererGC footJointk; + ModelRendererGC footBasel; + ModelRendererGC legBase1n; + ModelRendererGC legStructureAux1s; + ModelRendererGC legStructure1u; + ModelRendererGC footJointv; + ModelRendererGC footBasew; + ModelRendererGC footBasex; + ModelRendererGC legBase1z; + ModelRendererGC legStructureAux1f; + ModelRendererGC legStructure1g; + ModelRendererGC footJointh; + ModelRendererGC footBasei; + ModelRendererGC footBasej; + ModelRendererGC legBase1l; + ModelRendererGC legStructureAux1q; + ModelRendererGC legStructure1s; + ModelRendererGC footJointt; + ModelRendererGC footBaseu; + ModelRendererGC footBasev; + ModelRendererGC moduleMain1; + ModelRendererGC moduleMain2; + ModelRendererGC moduleMainDeco; + ModelRendererGC moduleCore1; + ModelRendererGC moduleCore2; + ModelRendererGC moduleCore3; + ModelRendererGC moduleAux1; + ModelRendererGC moduleAux2; + ModelRendererGC moduleAux3; + ModelRendererGC moduleAux4; + ModelRendererGC moduleAux5; + ModelRendererGC moduleAux6; + ModelRendererGC moduleAux7; + ModelRendererGC moduleAux8; + ModelRendererGC moduleThrusterBase1; + ModelRendererGC moduleThrusterBase2; + ModelRendererGC moduleThrusterBase3; + ModelRendererGC moduleThrusterBase4; + ModelRendererGC moduleThrusterBase5; + ModelRendererGC moduleThrusterConeTop1; + ModelRendererGC moduleThrusterConeTop2; + ModelRendererGC moduleThrusterConeTop3; + ModelRendererGC moduleThrusterConeBack1; + ModelRendererGC moduleThrusterConeBack2; + ModelRendererGC moduleThrusterConeBack3; + ModelRendererGC moduleThrusterConeBot1; + ModelRendererGC moduleThrusterConeBot2; + ModelRendererGC moduleThrusterConeBot3; + ModelRendererGC moduleThrusterConeFront1; + ModelRendererGC moduleThrusterConeFront2; + ModelRendererGC moduleThrusterConeFront3; + + public ModelLander() + { + this.textureWidth = 512; + this.textureHeight = 512; + + this.bodyMain1 = new ModelRendererGC(this, 125, 128); + this.bodyMain1.addBox(-24F, 0F, -24F, 48, 12, 48); + this.bodyMain1.setRotationPoint(0F, 0F, 0F); + this.bodyMain1.setTextureSize(512, 512); + this.bodyMain1.mirror = true; + this.setRotation(this.bodyMain1, 0F, -0.3926991F, 0F); + this.bodyMain2 = new ModelRendererGC(this, 125, 128); + this.bodyMain2.addBox(-24F, -0.1F, -24F, 48, 12, 48); + this.bodyMain2.setRotationPoint(0F, 0F, 0F); + this.bodyMain2.setTextureSize(512, 512); + this.bodyMain2.mirror = true; + this.setRotation(this.bodyMain2, 0F, 0.3926991F, 0F); + this.bodyAux1 = new ModelRendererGC(this, 125, 192); + this.bodyAux1.addBox(-13F, -5F, -34F, 26, 15, 34); + this.bodyAux1.setRotationPoint(0F, 0F, 0F); + this.bodyAux1.setTextureSize(512, 512); + this.bodyAux1.mirror = true; + this.setRotation(this.bodyAux1, 0.0698132F, 0.7853982F, 0F); + this.bodyAux2 = new ModelRendererGC(this, 125, 192); + this.bodyAux2.addBox(-13F, -5F, -34F, 26, 15, 34); + this.bodyAux2.setRotationPoint(0F, 0F, 0F); + this.bodyAux2.setTextureSize(512, 512); + this.bodyAux2.mirror = true; + this.setRotation(this.bodyAux2, 0.0698132F, -0.7853982F, 0F); + this.bodyAux3 = new ModelRendererGC(this, 125, 192); + this.bodyAux3.addBox(-13F, -5F, -34F, 26, 15, 34); + this.bodyAux3.setRotationPoint(0F, 0F, 0F); + this.bodyAux3.setTextureSize(512, 512); + this.bodyAux3.mirror = true; + this.setRotation(this.bodyAux3, 0.0698132F, -2.356194F, 0F); + this.bodyAux4 = new ModelRendererGC(this, 125, 192); + this.bodyAux4.addBox(-13F, -5F, -34F, 26, 15, 34); + this.bodyAux4.setRotationPoint(0F, 0F, 0F); + this.bodyAux4.setTextureSize(512, 512); + this.bodyAux4.mirror = true; + this.setRotation(this.bodyAux4, 0.0698132F, 2.356194F, 0F); + this.bodySupportMain1 = new ModelRendererGC(this, 125, 243); + this.bodySupportMain1.addBox(-19F, -7F, -19F, 38, 10, 38); + this.bodySupportMain1.setRotationPoint(0F, 0F, 0F); + this.bodySupportMain1.setTextureSize(512, 512); + this.bodySupportMain1.mirror = true; + this.setRotation(this.bodySupportMain1, 0F, 0F, 0F); + this.bodySupportMain2 = new ModelRendererGC(this, 125, 293); + this.bodySupportMain2.addBox(-12F, -15F, -12F, 24, 15, 24); + this.bodySupportMain2.setRotationPoint(0F, 0F, 0F); + this.bodySupportMain2.setTextureSize(512, 512); + this.bodySupportMain2.mirror = true; + this.setRotation(this.bodySupportMain2, 0F, 0F, 0F); + this.legStructureAux1e = new ModelRendererGC(this, 0, 81); + this.legStructureAux1e.addBox(-26F, 28F, -2F, 3, 24, 3); + this.legStructureAux1e.setRotationPoint(0F, 0F, 0F); + this.legStructureAux1e.setTextureSize(512, 512); + this.legStructureAux1e.mirror = true; + this.setRotation(this.legStructureAux1e, 0F, -2.356194F, 0.7330383F); + this.footBaseg = new ModelRendererGC(this, 125, 81); + this.footBaseg.addBox(-64F, 18.9F, -2F, 11, 6, 2); + this.footBaseg.setRotationPoint(0F, 0F, 0F); + this.footBaseg.setTextureSize(512, 512); + this.footBaseg.mirror = true; + this.setRotation(this.footBaseg, 0F, -2.356194F, 0F); + this.legStructure1i = new ModelRendererGC(this, 0, 0); + this.legStructure1i.addBox(-27F, 33F, -3F, 5, 14, 5); + this.legStructure1i.setRotationPoint(0F, 0F, 0F); + this.legStructure1i.setTextureSize(512, 512); + this.legStructure1i.mirror = true; + this.setRotation(this.legStructure1i, 0F, -2.356194F, 0.7330383F); + this.legBase1j = new ModelRendererGC(this, 16, 81); + this.legBase1j.addBox(-29F, 20F, -5F, 9, 10, 9); + this.legBase1j.setRotationPoint(0F, 0F, 0F); + this.legBase1j.setTextureSize(512, 512); + this.legBase1j.mirror = true; + this.setRotation(this.legBase1j, 0F, -2.356194F, 0.7330383F); + this.footJointk = new ModelRendererGC(this, 64, 104); + this.footJointk.addBox(-58F, 20F, -6.5F, 7, 5, 11); + this.footJointk.setRotationPoint(0F, 0F, 0F); + this.footJointk.setTextureSize(512, 512); + this.footJointk.mirror = true; + this.setRotation(this.footJointk, 0F, -2.356194F, 0F); + this.footBasel = new ModelRendererGC(this, 64, 81); + this.footBasel.addBox(-62F, 23F, -8.5F, 10, 2, 15); + this.footBasel.setRotationPoint(0F, 0F, 0F); + this.footBasel.setTextureSize(512, 512); + this.footBasel.mirror = true; + this.setRotation(this.footBasel, 0F, -2.356194F, 0F); + this.legBase1n = new ModelRendererGC(this, 16, 81); + this.legBase1n.addBox(-29F, 20F, -5F, 9, 10, 9); + this.legBase1n.setRotationPoint(0F, 0F, 0F); + this.legBase1n.setTextureSize(512, 512); + this.legBase1n.mirror = true; + this.setRotation(this.legBase1n, 0F, -0.7853982F, 0.7330383F); + this.legStructureAux1s = new ModelRendererGC(this, 0, 81); + this.legStructureAux1s.addBox(-26F, 28F, -2F, 3, 24, 3); + this.legStructureAux1s.setRotationPoint(0F, 0F, 0F); + this.legStructureAux1s.setTextureSize(512, 512); + this.legStructureAux1s.mirror = true; + this.setRotation(this.legStructureAux1s, 0F, -0.7853982F, 0.7330383F); + this.legStructure1u = new ModelRendererGC(this, 0, 0); + this.legStructure1u.addBox(-27F, 33F, -3F, 5, 14, 5); + this.legStructure1u.setRotationPoint(0F, 0F, 0F); + this.legStructure1u.setTextureSize(512, 512); + this.legStructure1u.mirror = true; + this.setRotation(this.legStructure1u, 0F, -0.7853982F, 0.7330383F); + this.footJointv = new ModelRendererGC(this, 64, 104); + this.footJointv.addBox(-58F, 20F, -6.5F, 7, 5, 11); + this.footJointv.setRotationPoint(0F, 0F, 0F); + this.footJointv.setTextureSize(512, 512); + this.footJointv.mirror = true; + this.setRotation(this.footJointv, 0F, -0.7853982F, 0F); + this.footBasew = new ModelRendererGC(this, 64, 81); + this.footBasew.addBox(-62F, 23F, -8.5F, 10, 2, 15); + this.footBasew.setRotationPoint(0F, 0F, 0F); + this.footBasew.setTextureSize(512, 512); + this.footBasew.mirror = true; + this.setRotation(this.footBasew, 0F, -0.7853982F, 0F); + this.footBasex = new ModelRendererGC(this, 125, 81); + this.footBasex.addBox(-64F, 18.9F, -2F, 11, 6, 2); + this.footBasex.setRotationPoint(0F, 0F, 0F); + this.footBasex.setTextureSize(512, 512); + this.footBasex.mirror = true; + this.setRotation(this.footBasex, 0F, -0.7853982F, 0F); + this.legBase1z = new ModelRendererGC(this, 16, 81); + this.legBase1z.addBox(-29F, 20F, -5F, 9, 10, 9); + this.legBase1z.setRotationPoint(0F, 0F, 0F); + this.legBase1z.setTextureSize(512, 512); + this.legBase1z.mirror = true; + this.setRotation(this.legBase1z, 0F, 0.7853982F, 0.7330383F); + this.legStructureAux1f = new ModelRendererGC(this, 0, 81); + this.legStructureAux1f.addBox(-26F, 28F, -2F, 3, 24, 3); + this.legStructureAux1f.setRotationPoint(0F, 0F, 0F); + this.legStructureAux1f.setTextureSize(512, 512); + this.legStructureAux1f.mirror = true; + this.setRotation(this.legStructureAux1f, 0F, 0.7853982F, 0.7330383F); + this.legStructure1g = new ModelRendererGC(this, 0, 0); + this.legStructure1g.addBox(-27F, 33F, -3F, 5, 14, 5); + this.legStructure1g.setRotationPoint(0F, 0F, 0F); + this.legStructure1g.setTextureSize(512, 512); + this.legStructure1g.mirror = true; + this.setRotation(this.legStructure1g, 0F, 0.7853982F, 0.7330383F); + this.footJointh = new ModelRendererGC(this, 64, 104); + this.footJointh.addBox(-58F, 20F, -6.5F, 7, 5, 11); + this.footJointh.setRotationPoint(0F, 0F, 0F); + this.footJointh.setTextureSize(512, 512); + this.footJointh.mirror = true; + this.setRotation(this.footJointh, 0F, 0.7853982F, 0F); + this.footBasei = new ModelRendererGC(this, 64, 81); + this.footBasei.addBox(-62F, 23F, -8.5F, 10, 2, 15); + this.footBasei.setRotationPoint(0F, 0F, 0F); + this.footBasei.setTextureSize(512, 512); + this.footBasei.mirror = true; + this.setRotation(this.footBasei, 0F, 0.7853982F, 0F); + this.footBasej = new ModelRendererGC(this, 125, 81); + this.footBasej.addBox(-64F, 18.9F, -2F, 11, 6, 2); + this.footBasej.setRotationPoint(0F, 0F, 0F); + this.footBasej.setTextureSize(512, 512); + this.footBasej.mirror = true; + this.setRotation(this.footBasej, 0F, 0.7853982F, 0F); + this.legBase1l = new ModelRendererGC(this, 16, 81); + this.legBase1l.addBox(-29F, 20F, -5F, 9, 10, 9); + this.legBase1l.setRotationPoint(0F, 0F, 0F); + this.legBase1l.setTextureSize(512, 512); + this.legBase1l.mirror = true; + this.setRotation(this.legBase1l, 0F, 2.356194F, 0.7330383F); + this.legStructureAux1q = new ModelRendererGC(this, 0, 81); + this.legStructureAux1q.addBox(-26F, 28F, -2F, 3, 24, 3); + this.legStructureAux1q.setRotationPoint(0F, 0F, 0F); + this.legStructureAux1q.setTextureSize(512, 512); + this.legStructureAux1q.mirror = true; + this.setRotation(this.legStructureAux1q, 0F, 2.356194F, 0.7330383F); + this.legStructure1s = new ModelRendererGC(this, 0, 0); + this.legStructure1s.addBox(-27F, 33F, -3F, 5, 14, 5); + this.legStructure1s.setRotationPoint(0F, 0F, 0F); + this.legStructure1s.setTextureSize(512, 512); + this.legStructure1s.mirror = true; + this.setRotation(this.legStructure1s, 0F, 2.356194F, 0.7330383F); + this.footJointt = new ModelRendererGC(this, 64, 104); + this.footJointt.addBox(-58F, 20F, -6.5F, 7, 5, 11); + this.footJointt.setRotationPoint(0F, 0F, 0F); + this.footJointt.setTextureSize(512, 512); + this.footJointt.mirror = true; + this.setRotation(this.footJointt, 0F, 2.356194F, 0F); + this.footBaseu = new ModelRendererGC(this, 64, 81); + this.footBaseu.addBox(-62F, 23F, -8.5F, 10, 2, 15); + this.footBaseu.setRotationPoint(0F, 0F, 0F); + this.footBaseu.setTextureSize(512, 512); + this.footBaseu.mirror = true; + this.setRotation(this.footBaseu, 0F, 2.356194F, 0F); + this.footBasev = new ModelRendererGC(this, 125, 81); + this.footBasev.addBox(-64F, 18.9F, -2F, 11, 6, 2); + this.footBasev.setRotationPoint(0F, 0F, 0F); + this.footBasev.setTextureSize(512, 512); + this.footBasev.mirror = true; + this.setRotation(this.footBasev, 0F, 2.356194F, 0F); + this.moduleMain1 = new ModelRendererGC(this, 289, 166); + this.moduleMain1.addBox(-6F, -44F, -16F, 32, 32, 32); + this.moduleMain1.setRotationPoint(0F, 0F, 0F); + this.moduleMain1.setTextureSize(512, 512); + this.moduleMain1.mirror = true; + this.setRotation(this.moduleMain1, 0F, 0F, 0F); + this.moduleMain2 = new ModelRendererGC(this, 249, 234); + this.moduleMain2.addBox(-16F, -30F, -13F, 32, 16, 26); + this.moduleMain2.setRotationPoint(0F, 0F, 0F); + this.moduleMain2.setTextureSize(512, 512); + this.moduleMain2.mirror = true; + this.setRotation(this.moduleMain2, 0F, 0F, 0F); + this.moduleMainDeco = new ModelRendererGC(this, 70, 300); + this.moduleMainDeco.addBox(16F, -46F, -20.9F, 5, 30, 37); + this.moduleMainDeco.setRotationPoint(0F, 0F, 0F); + this.moduleMainDeco.setTextureSize(512, 512); + this.moduleMainDeco.mirror = true; + this.setRotation(this.moduleMainDeco, 0F, 0F, 0F); + this.moduleCore1 = new ModelRendererGC(this, 197, 293); + this.moduleCore1.mirror = true; + this.moduleCore1.addBox(-20F, -48F, -25F, 5, 36, 42); + this.moduleCore1.setRotationPoint(0F, 0F, 0F); + this.moduleCore1.setTextureSize(512, 512); + this.moduleCore1.mirror = true; + this.setRotation(this.moduleCore1, 0F, 0F, 0F); + this.moduleCore1.mirror = false; + this.moduleCore2 = new ModelRendererGC(this, 197, 293); + this.moduleCore2.addBox(-30F, -48F, -25F, 5, 36, 42); + this.moduleCore2.setRotationPoint(0F, 0F, 0F); + this.moduleCore2.setTextureSize(512, 512); + this.moduleCore2.mirror = true; + this.setRotation(this.moduleCore2, 0F, 0F, 0F); + this.moduleCore3 = new ModelRendererGC(this, 295, 300); + this.moduleCore3.addBox(-25F, -44F, -21F, 5, 28, 34); + this.moduleCore3.setRotationPoint(0F, 0F, 0F); + this.moduleCore3.setTextureSize(512, 512); + this.moduleCore3.mirror = true; + this.setRotation(this.moduleCore3, 0F, 0F, 0F); + this.moduleAux1 = new ModelRendererGC(this, 85, 238); + this.moduleAux1.addBox(26F, -34F, -13F, 4, 16, 26); + this.moduleAux1.setRotationPoint(0F, 0F, 0F); + this.moduleAux1.setTextureSize(512, 512); + this.moduleAux1.mirror = true; + this.setRotation(this.moduleAux1, 0F, 0F, 0F); + this.moduleAux2 = new ModelRendererGC(this, 0, 110); + this.moduleAux2.addBox(26.1F, -60F, 9F, 1, 28, 1); + this.moduleAux2.setRotationPoint(0F, 0F, 0F); + this.moduleAux2.setTextureSize(512, 512); + this.moduleAux2.mirror = true; + this.setRotation(this.moduleAux2, 0F, 0F, 0F); + this.moduleAux3 = new ModelRendererGC(this, 17, 110); + this.moduleAux3.addBox(27F, -57F, -12F, 1, 23, 1); + this.moduleAux3.setRotationPoint(0F, 0F, 0F); + this.moduleAux3.setTextureSize(512, 512); + this.moduleAux3.mirror = true; + this.setRotation(this.moduleAux3, 0F, 0F, 0F); + this.moduleAux4 = new ModelRendererGC(this, 5, 110); + this.moduleAux4.addBox(28F, -48F, -8F, 1, 14, 1); + this.moduleAux4.setRotationPoint(0F, 0F, 0F); + this.moduleAux4.setTextureSize(512, 512); + this.moduleAux4.mirror = true; + this.setRotation(this.moduleAux4, 0F, 0F, 0F); + this.moduleAux5 = new ModelRendererGC(this, 5, 110); + this.moduleAux5.addBox(28F, -48F, -6F, 1, 14, 1); + this.moduleAux5.setRotationPoint(0F, 0F, 0F); + this.moduleAux5.setTextureSize(512, 512); + this.moduleAux5.mirror = true; + this.setRotation(this.moduleAux5, 0F, 0F, 0F); + this.moduleAux6 = new ModelRendererGC(this, 5, 110); + this.moduleAux6.addBox(28F, -48F, -4F, 1, 14, 1); + this.moduleAux6.setRotationPoint(0F, 0F, 0F); + this.moduleAux6.setTextureSize(512, 512); + this.moduleAux6.mirror = true; + this.setRotation(this.moduleAux6, 0F, 0F, 0F); + this.moduleAux7 = new ModelRendererGC(this, 11, 110); + this.moduleAux7.addBox(27F, -53F, 2F, 1, 19, 1); + this.moduleAux7.setRotationPoint(0F, 0F, 0F); + this.moduleAux7.setTextureSize(512, 512); + this.moduleAux7.mirror = true; + this.setRotation(this.moduleAux7, 0F, 0F, 0F); + this.moduleAux8 = new ModelRendererGC(this, 0, 110); + this.moduleAux8.addBox(28.9F, -60F, 9F, 1, 28, 1); + this.moduleAux8.setRotationPoint(0F, 0F, 0F); + this.moduleAux8.setTextureSize(512, 512); + this.moduleAux8.mirror = true; + this.setRotation(this.moduleAux8, 0F, 0F, 0F); + this.moduleThrusterBase1 = new ModelRendererGC(this, 21, 19); + this.moduleThrusterBase1.addBox(30F, -28F, -5F, 3, 6, 10); + this.moduleThrusterBase1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase1.setTextureSize(512, 512); + this.moduleThrusterBase1.mirror = true; + this.setRotation(this.moduleThrusterBase1, 0F, 0F, 0F); + this.moduleThrusterBase2 = new ModelRendererGC(this, 50, 0); + this.moduleThrusterBase2.addBox(5F, -39F, -5F, 3, 5, 10); + this.moduleThrusterBase2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase2.setTextureSize(512, 512); + this.moduleThrusterBase2.mirror = true; + this.setRotation(this.moduleThrusterBase2, 0F, 0F, 0.7853982F); + this.moduleThrusterBase3 = new ModelRendererGC(this, 50, 0); + this.moduleThrusterBase3.addBox(-43F, -4F, -5F, 3, 6, 10); + this.moduleThrusterBase3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase3.setTextureSize(512, 512); + this.moduleThrusterBase3.mirror = true; + this.setRotation(this.moduleThrusterBase3, 0F, 0F, 2.356194F); + this.moduleThrusterBase4 = new ModelRendererGC(this, 0, 23); + this.moduleThrusterBase4.addBox(24F, -28F, 13.7F, 3, 6, 6); + this.moduleThrusterBase4.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase4.setTextureSize(512, 512); + this.moduleThrusterBase4.mirror = true; + this.setRotation(this.moduleThrusterBase4, 0F, 0.7853982F, 0F); + this.moduleThrusterBase5 = new ModelRendererGC(this, 0, 23); + this.moduleThrusterBase5.mirror = true; + this.moduleThrusterBase5.addBox(24F, -28F, -19.5F, 3, 6, 6); + this.moduleThrusterBase5.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterBase5.setTextureSize(512, 512); + this.moduleThrusterBase5.mirror = true; + this.setRotation(this.moduleThrusterBase5, 0F, -0.7853982F, 0F); + this.moduleThrusterBase5.mirror = false; + this.moduleThrusterConeTop1 = new ModelRendererGC(this, 40, 9); + this.moduleThrusterConeTop1.addBox(-44F, -3F, -1F, 1, 2, 2); + this.moduleThrusterConeTop1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeTop1.setTextureSize(512, 512); + this.moduleThrusterConeTop1.mirror = true; + this.setRotation(this.moduleThrusterConeTop1, 0F, 0F, 2.356194F); + this.moduleThrusterConeTop2 = new ModelRendererGC(this, 30, 9); + this.moduleThrusterConeTop2.addBox(-45F, -3.5F, -1.5F, 1, 3, 3); + this.moduleThrusterConeTop2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeTop2.setTextureSize(512, 512); + this.moduleThrusterConeTop2.mirror = true; + this.setRotation(this.moduleThrusterConeTop2, 0F, 0F, 2.356194F); + this.moduleThrusterConeTop3 = new ModelRendererGC(this, 29, 0); + this.moduleThrusterConeTop3.addBox(-46F, -4F, -2F, 1, 4, 4); + this.moduleThrusterConeTop3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeTop3.setTextureSize(512, 512); + this.moduleThrusterConeTop3.mirror = true; + this.setRotation(this.moduleThrusterConeTop3, 0F, 0F, 2.356194F); + this.moduleThrusterConeBack1 = new ModelRendererGC(this, 40, 9); + this.moduleThrusterConeBack1.addBox(27F, -26F, -18.5F, 1, 2, 2); + this.moduleThrusterConeBack1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBack1.setTextureSize(512, 512); + this.moduleThrusterConeBack1.mirror = true; + this.setRotation(this.moduleThrusterConeBack1, 0F, -0.7853982F, 0F); + this.moduleThrusterConeBack2 = new ModelRendererGC(this, 30, 9); + this.moduleThrusterConeBack2.addBox(28F, -26.5F, -19F, 1, 3, 3); + this.moduleThrusterConeBack2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBack2.setTextureSize(512, 512); + this.moduleThrusterConeBack2.mirror = true; + this.setRotation(this.moduleThrusterConeBack2, 0F, -0.7853982F, 0F); + this.moduleThrusterConeBack3 = new ModelRendererGC(this, 29, 0); + this.moduleThrusterConeBack3.addBox(29F, -27F, -19.5F, 1, 4, 4); + this.moduleThrusterConeBack3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBack3.setTextureSize(512, 512); + this.moduleThrusterConeBack3.mirror = true; + this.setRotation(this.moduleThrusterConeBack3, 0F, -0.7853982F, 0F); + this.moduleThrusterConeBot1 = new ModelRendererGC(this, 40, 9); + this.moduleThrusterConeBot1.addBox(8F, -38F, -1F, 1, 2, 2); + this.moduleThrusterConeBot1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBot1.setTextureSize(512, 512); + this.moduleThrusterConeBot1.mirror = true; + this.setRotation(this.moduleThrusterConeBot1, 0F, 0F, 0.7853982F); + this.moduleThrusterConeBot2 = new ModelRendererGC(this, 30, 9); + this.moduleThrusterConeBot2.addBox(9F, -38.5F, -1.5F, 1, 3, 3); + this.moduleThrusterConeBot2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBot2.setTextureSize(512, 512); + this.moduleThrusterConeBot2.mirror = true; + this.setRotation(this.moduleThrusterConeBot2, 0F, 0F, 0.7853982F); + this.moduleThrusterConeBot3 = new ModelRendererGC(this, 29, 0); + this.moduleThrusterConeBot3.addBox(10F, -39F, -2F, 1, 4, 4); + this.moduleThrusterConeBot3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeBot3.setTextureSize(512, 512); + this.moduleThrusterConeBot3.mirror = true; + this.setRotation(this.moduleThrusterConeBot3, 0F, 0F, 0.7853982F); + this.moduleThrusterConeFront1 = new ModelRendererGC(this, 40, 9); + this.moduleThrusterConeFront1.addBox(27F, -26F, 16.5F, 1, 2, 2); + this.moduleThrusterConeFront1.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeFront1.setTextureSize(512, 512); + this.moduleThrusterConeFront1.mirror = true; + this.setRotation(this.moduleThrusterConeFront1, 0F, 0.7853982F, 0F); + this.moduleThrusterConeFront2 = new ModelRendererGC(this, 30, 9); + this.moduleThrusterConeFront2.addBox(28F, -26.5F, 16F, 1, 3, 3); + this.moduleThrusterConeFront2.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeFront2.setTextureSize(512, 512); + this.moduleThrusterConeFront2.mirror = true; + this.setRotation(this.moduleThrusterConeFront2, 0F, 0.7853982F, 0F); + this.moduleThrusterConeFront3 = new ModelRendererGC(this, 29, 0); + this.moduleThrusterConeFront3.addBox(29F, -27F, 15.5F, 1, 4, 4); + this.moduleThrusterConeFront3.setRotationPoint(0F, 0F, 0F); + this.moduleThrusterConeFront3.setTextureSize(512, 512); + this.moduleThrusterConeFront3.mirror = true; + this.setRotation(this.moduleThrusterConeFront3, 0F, 0.7853982F, 0F); + } + + @Override + public void render(Entity entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + super.render(entity, par2, par3, par4, par5, par6, par7); + this.setRotationAngles(par2, par3, par4, par5, par6, par7, entity); + this.bodyMain1.render(par7); + this.bodyMain2.render(par7); + this.bodyAux1.render(par7); + this.bodyAux2.render(par7); + this.bodyAux3.render(par7); + this.bodyAux4.render(par7); + this.bodySupportMain1.render(par7); + this.bodySupportMain2.render(par7); + this.legStructureAux1e.render(par7); + this.footBaseg.render(par7); + this.legStructure1i.render(par7); + this.legBase1j.render(par7); + this.footJointk.render(par7); + this.footBasel.render(par7); + this.legBase1n.render(par7); + this.legStructureAux1s.render(par7); + this.legStructure1u.render(par7); + this.footJointv.render(par7); + this.footBasew.render(par7); + this.footBasex.render(par7); + this.legBase1z.render(par7); + this.legStructureAux1f.render(par7); + this.legStructure1g.render(par7); + this.footJointh.render(par7); + this.footBasei.render(par7); + this.footBasej.render(par7); + this.legBase1l.render(par7); + this.legStructureAux1q.render(par7); + this.legStructure1s.render(par7); + this.footJointt.render(par7); + this.footBaseu.render(par7); + this.footBasev.render(par7); + this.moduleMain1.render(par7); + this.moduleMain2.render(par7); + this.moduleMainDeco.render(par7); + this.moduleCore1.render(par7); + this.moduleCore2.render(par7); + this.moduleCore3.render(par7); + this.moduleAux1.render(par7); + this.moduleAux2.render(par7); + this.moduleAux3.render(par7); + this.moduleAux4.render(par7); + this.moduleAux5.render(par7); + this.moduleAux6.render(par7); + this.moduleAux7.render(par7); + this.moduleAux8.render(par7); + this.moduleThrusterBase1.render(par7); + this.moduleThrusterBase2.render(par7); + this.moduleThrusterBase3.render(par7); + this.moduleThrusterBase4.render(par7); + this.moduleThrusterBase5.render(par7); + this.moduleThrusterConeTop1.render(par7); + this.moduleThrusterConeTop2.render(par7); + this.moduleThrusterConeTop3.render(par7); + this.moduleThrusterConeBack1.render(par7); + this.moduleThrusterConeBack2.render(par7); + this.moduleThrusterConeBack3.render(par7); + this.moduleThrusterConeBot1.render(par7); + this.moduleThrusterConeBot2.render(par7); + this.moduleThrusterConeBot3.render(par7); + this.moduleThrusterConeFront1.render(par7); + this.moduleThrusterConeFront2.render(par7); + this.moduleThrusterConeFront3.render(par7); + } + + private void setRotation(ModelRendererGC model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteor.java new file mode 100644 index 00000000..55eb3c5b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteor.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelMeteor extends ModelBase +{ + + ModelRenderer[] shapes = new ModelRenderer[13]; + + public ModelMeteor() + { + this.textureWidth = 128; + this.textureHeight = 64; + + this.shapes[0] = new ModelRenderer(this, 0, 0); + this.shapes[0].addBox(0F, -7F, -13F, 2, 4, 4); + this.shapes[0].setRotationPoint(0F, 0F, 0F); + this.shapes[0].setTextureSize(128, 64); + this.shapes[0].mirror = true; + this.setRotation(this.shapes[0], 0F, 0F, 0F); + this.shapes[1] = new ModelRenderer(this, 0, 0); + this.shapes[1].addBox(-10F, -10F, -10F, 20, 20, 20); + this.shapes[1].setRotationPoint(0F, 0F, 0F); + this.shapes[1].setTextureSize(128, 64); + this.shapes[1].mirror = true; + this.setRotation(this.shapes[1], 0F, 0F, 0F); + this.shapes[2] = new ModelRenderer(this, 0, 0); + this.shapes[2].addBox(-5F, -8F, -12F, 5, 9, 1); + this.shapes[2].setRotationPoint(0F, 0F, 0F); + this.shapes[2].setTextureSize(128, 64); + this.shapes[2].mirror = true; + this.setRotation(this.shapes[2], 0F, 0F, 0F); + this.shapes[3] = new ModelRenderer(this, 0, 0); + this.shapes[3].addBox(0F, -6F, 11F, 4, 13, 1); + this.shapes[3].setRotationPoint(0F, 0F, 0F); + this.shapes[3].setTextureSize(128, 64); + this.shapes[3].mirror = true; + this.setRotation(this.shapes[3], 0F, 0F, 0F); + this.shapes[4] = new ModelRenderer(this, 0, 0); + this.shapes[4].addBox(-9F, 10F, -9F, 18, 1, 18); + this.shapes[4].setRotationPoint(0F, 0F, 0F); + this.shapes[4].setTextureSize(128, 64); + this.shapes[4].mirror = true; + this.setRotation(this.shapes[4], 0F, 0F, 0F); + this.shapes[5] = new ModelRenderer(this, 0, 0); + this.shapes[5].addBox(11F, 3F, -8F, 1, 5, 5); + this.shapes[5].setRotationPoint(0F, 0F, 0F); + this.shapes[5].setTextureSize(128, 64); + this.shapes[5].mirror = true; + this.setRotation(this.shapes[5], 0F, 0F, 0F); + this.shapes[6] = new ModelRenderer(this, 0, 0); + this.shapes[6].addBox(-7F, -8F, 10F, 7, 12, 2); + this.shapes[6].setRotationPoint(0F, 0F, 0F); + this.shapes[6].setTextureSize(128, 64); + this.shapes[6].mirror = true; + this.setRotation(this.shapes[6], 0F, 0F, 0F); + this.shapes[7] = new ModelRenderer(this, 0, 0); + this.shapes[7].addBox(-9F, -9F, 10F, 18, 18, 1); + this.shapes[7].setRotationPoint(0F, 0F, 0F); + this.shapes[7].setTextureSize(128, 64); + this.shapes[7].mirror = true; + this.setRotation(this.shapes[7], 0F, 0F, 0F); + this.shapes[8] = new ModelRenderer(this, 0, 0); + this.shapes[8].addBox(-11F, -9F, -9F, 1, 18, 18); + this.shapes[8].setRotationPoint(0F, 0F, 0F); + this.shapes[8].setTextureSize(128, 64); + this.shapes[8].mirror = true; + this.setRotation(this.shapes[8], 0F, 0F, 0F); + this.shapes[9] = new ModelRenderer(this, 0, 0); + this.shapes[9].addBox(10F, -9F, -9F, 1, 18, 18); + this.shapes[9].setRotationPoint(0F, 0F, 0F); + this.shapes[9].setTextureSize(128, 64); + this.shapes[9].mirror = true; + this.setRotation(this.shapes[9], 0F, 0F, 0F); + this.shapes[10] = new ModelRenderer(this, 0, 0); + this.shapes[10].addBox(-9F, -9F, -11F, 18, 18, 1); + this.shapes[10].setRotationPoint(0F, 0F, 0F); + this.shapes[10].setTextureSize(128, 64); + this.shapes[10].mirror = true; + this.setRotation(this.shapes[10], 0F, 0F, 0F); + this.shapes[11] = new ModelRenderer(this, 0, 0); + this.shapes[11].addBox(-9F, -9F, -11F, 18, 18, 1); + this.shapes[11].setRotationPoint(0F, 0F, 0F); + this.shapes[11].setTextureSize(128, 64); + this.shapes[11].mirror = true; + this.setRotation(this.shapes[11], 0F, 0F, 0F); + this.shapes[12] = new ModelRenderer(this, 0, 0); + this.shapes[12].addBox(-9F, -11F, -9F, 18, 1, 18); + this.shapes[12].setRotationPoint(0F, 0F, 0F); + this.shapes[12].setTextureSize(128, 64); + this.shapes[12].mirror = true; + this.setRotation(this.shapes[12], 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + for (final ModelRenderer shape : this.shapes) + { + shape.render(f5); + } + } + + public void renderBlock(float f) + { + for (final ModelRenderer shape : this.shapes) + { + shape.render(f); + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteorChunk.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteorChunk.java new file mode 100644 index 00000000..e4b8b52e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelMeteorChunk.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelMeteorChunk extends ModelBase +{ + + private ModelRenderer[] boxes = new ModelRenderer[6]; + + public ModelMeteorChunk() + { + textureWidth = 16; + textureHeight = 16; + + boxes[0] = new ModelRenderer(this, 0, 0); + boxes[0].addBox(0F, 0F, 0F, 1, 8, 6); + boxes[0].setRotationPoint(4F, 0.0F, -5F); + boxes[0].setTextureSize(16, 16); + setRotation(boxes[0], -0F, -0F, -0F); + boxes[0].mirror = false; + boxes[1] = new ModelRenderer(this, 0, 0); + boxes[1].addBox(0F, 0F, 0F, 5, 8, 1); + boxes[1].setRotationPoint(-3F, 1.0F, -7F); + boxes[1].setTextureSize(16, 16); + setRotation(boxes[1], -0F, -0F, -0F); + boxes[1].mirror = false; + boxes[2] = new ModelRenderer(this, 0, 0); + boxes[2].addBox(0F, 0F, 0F, 1, 8, 6); + boxes[2].setRotationPoint(-6F, -1.0F, -5F); + boxes[2].setTextureSize(16, 16); + setRotation(boxes[2], -0F, -0F, -0F); + boxes[2].mirror = false; + boxes[3] = new ModelRenderer(this, 0, 0); + boxes[3].addBox(0F, 0F, 0F, 6, 1, 5); + boxes[3].setRotationPoint(-3F, -3.0F, -4F); + boxes[3].setTextureSize(16, 16); + setRotation(boxes[3], -0F, -0F, -0F); + boxes[3].mirror = false; + boxes[4] = new ModelRenderer(this, 0, 0); + boxes[4].addBox(0F, 0F, 0F, 5, 8, 1); + boxes[4].setRotationPoint(-3F, 0.0F, 3F); + boxes[4].setTextureSize(16, 16); + setRotation(boxes[4], -0F, -0F, -0F); + boxes[4].mirror = false; + boxes[5] = new ModelRenderer(this, 0, 0); + boxes[5].addBox(0F, 0F, 0F, 9, 12, 9); + boxes[5].setRotationPoint(-5F, -2.0F, -6F); + boxes[5].setTextureSize(16, 16); + setRotation(boxes[5], -0F, -0F, -0F); + boxes[5].mirror = false; + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + for (ModelRenderer mr : boxes) + { + mr.render(f5); + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelParaChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelParaChest.java new file mode 100644 index 00000000..01d66235 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelParaChest.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderParaChest; +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class ModelParaChest extends ModelChest +{ + + private static final ResourceLocation grayParachuteTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/gray.png"); + + public ModelRenderer[] parachute = new ModelRenderer[3]; + public ModelRenderer[] parachuteStrings = new ModelRenderer[4]; + + public ModelParaChest() + { + this(0.0F); + } + + public ModelParaChest(float par1) + { + super(); + + this.parachute[0] = new ModelRenderer(this, 0, 0).setTextureSize(256, 256); + this.parachute[0].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, par1); + this.parachute[0].setRotationPoint(15.0F, 4.0F, 0.0F); + this.parachute[1] = new ModelRenderer(this, 0, 42).setTextureSize(256, 256); + this.parachute[1].addBox(-20.0F, -45.0F, -20.0F, 40, 2, 40, par1); + this.parachute[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachute[2] = new ModelRenderer(this, 0, 0).setTextureSize(256, 256); + this.parachute[2].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, par1); + this.parachute[2].setRotationPoint(11F, -11, 0.0F); + + this.parachuteStrings[0] = new ModelRenderer(this, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[0].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[0].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[1] = new ModelRenderer(this, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[1].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[2] = new ModelRenderer(this, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[2].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[2].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[3] = new ModelRenderer(this, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[3].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[3].setRotationPoint(0.0F, 0.0F, 0.0F); + } + + @Override + public void renderAll() + { + this.chestLid.rotateAngleX = (float) Math.PI; + this.chestBelow.rotateAngleX = (float) Math.PI; + this.chestKnob.rotateAngleX = (float) Math.PI; + + this.chestLid.rotationPointX = 2.0F; + this.chestLid.rotationPointY = 7.0F; + this.chestLid.rotationPointZ = -6.0F; + this.chestKnob.rotationPointX = 9.0F; + this.chestKnob.rotationPointY = 7.0F; + this.chestKnob.rotationPointZ = -6.0F; + this.chestBelow.rotationPointX = 2.0F; + this.chestBelow.rotationPointY = 8.0F; + this.chestBelow.rotationPointZ = 8.0F; + + int i; + + for (i = 0; i < this.parachute.length; i++) + { + this.parachute[i].render(0.0625F); + } + + for (i = 0; i < this.parachuteStrings.length; i++) + { + this.parachuteStrings[i].render(0.0625F); + } + + this.parachute[0].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + + this.parachute[0].setRotationPoint(-5.85F, -11.0F, 2.0F); + this.parachute[1].setRotationPoint(9F, -7F, 2.0F); + this.parachute[2].setRotationPoint(-2.15F, 4.0F, 2.0F); + this.parachute[0].rotateAngleZ = (float) (210F / Constants.RADIANS_TO_DEGREES); + this.parachute[1].rotateAngleZ = (float) (180F / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleZ = (float) -(210F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleZ = (float) ((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].setRotationPoint(9.0F, 3.0F, 2.0F); + this.parachuteStrings[1].rotateAngleZ = (float) ((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].setRotationPoint(9.0F, 3.0F, 2.0F); + + this.parachuteStrings[2].rotateAngleZ = (float) -((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].setRotationPoint(9.0F, 3.0F, 2.0F); + this.parachuteStrings[3].rotateAngleZ = (float) -((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].setRotationPoint(9.0F, 3.0F, 2.0F); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(RenderParaChest.parachestTexture); + + super.renderAll(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelPlayerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelPlayerGC.java new file mode 100644 index 00000000..3bf642af --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelPlayerGC.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class ModelPlayerGC extends ModelPlayer +{ + + public static final ResourceLocation oxygenMaskTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/oxygen.png"); + public static final ResourceLocation playerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/player.png"); + + public ModelPlayerGC(float var1, boolean smallArms) + { + super(var1, smallArms); + + if (smallArms) + { + this.bipedLeftArm = new ModelRenderer(this, 32, 48); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 3, 12, 4, var1); + this.bipedLeftArm.setRotationPoint(5.0F, 2.5F, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-2.0F, -2.0F, -2.0F, 3, 12, 4, var1); + this.bipedRightArm.setRotationPoint(-5.0F, 2.5F, 0.0F); + } else + { + this.bipedLeftArm = new ModelRenderer(this, 32, 48); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, var1); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, var1); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + } + } + + @Override + public void render(Entity entityIn, float f1, float f2, float f3, float f4, float f5, float scale) + { + GlStateManager.pushMatrix(); + super.render(entityIn, f1, f2, f3, f4, f5, scale); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRendererGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRendererGC.java new file mode 100644 index 00000000..dd077b06 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRendererGC.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.Tessellator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +public class ModelRendererGC extends ModelRenderer +{ + + private boolean compiled; + private int displayList; + + public ModelRendererGC(ModelBase par1ModelBase, int par2, int par3) + { + super(par1ModelBase, par2, par3); + } + + @Override + @SideOnly(Side.CLIENT) + public void render(float par1) + { + if (!this.isHidden) + { + if (this.showModel) + { + if (!this.compiled) + { + this.compileDisplayList(par1); + } + + GL11.glTranslatef(this.offsetX, this.offsetY, this.offsetZ); + int i; + + if (this.rotateAngleX == 0.0F && this.rotateAngleY == 0.0F && this.rotateAngleZ == 0.0F) + { + if (this.rotationPointX == 0.0F && this.rotationPointY == 0.0F && this.rotationPointZ == 0.0F) + { + GL11.glCallList(this.displayList); + + if (this.childModels != null) + { + for (i = 0; i < this.childModels.size(); ++i) + { + ((ModelRenderer) this.childModels.get(i)).render(par1); + } + } + } else + { + GL11.glTranslatef(this.rotationPointX * par1, this.rotationPointY * par1, this.rotationPointZ * par1); + GL11.glCallList(this.displayList); + + if (this.childModels != null) + { + for (i = 0; i < this.childModels.size(); ++i) + { + ((ModelRenderer) this.childModels.get(i)).render(par1); + } + } + + GL11.glTranslatef(-this.rotationPointX * par1, -this.rotationPointY * par1, -this.rotationPointZ * par1); + } + } else + { + GL11.glPushMatrix(); + GL11.glTranslatef(this.rotationPointX * par1, this.rotationPointY * par1, this.rotationPointZ * par1); + + if (this.rotateAngleY != 0.0F) + { + GL11.glRotatef(this.rotateAngleY * Constants.RADIANS_TO_DEGREES, 0.0F, 1.0F, 0.0F); + } +// + if (this.rotateAngleZ != 0.0F) + { + GL11.glRotatef(this.rotateAngleZ * Constants.RADIANS_TO_DEGREES, 0.0F, 0.0F, 1.0F); + } + + if (this.rotateAngleX != 0.0F) + { + GL11.glRotatef(this.rotateAngleX * Constants.RADIANS_TO_DEGREES, 1.0F, 0.0F, 0.0F); + } + + GL11.glCallList(this.displayList); + + if (this.childModels != null) + { + for (i = 0; i < this.childModels.size(); ++i) + { + ((ModelRenderer) this.childModels.get(i)).render(par1); + } + } + + GL11.glPopMatrix(); + } + + GL11.glTranslatef(-this.offsetX, -this.offsetY, -this.offsetZ); + } + } + } + + @SideOnly(Side.CLIENT) + private void compileDisplayList(float par1) + { + this.displayList = GLAllocation.generateDisplayLists(1); + GL11.glNewList(this.displayList, GL11.GL_COMPILE); + Tessellator tessellator = Tessellator.getInstance(); + + for (int i = 0; i < this.cubeList.size(); ++i) + { + ((ModelBox) this.cubeList.get(i)).render(tessellator.getBuffer(), par1); + } + + GL11.glEndList(); + this.compiled = true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRocketTier1.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRocketTier1.java new file mode 100644 index 00000000..f6bf244e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/ModelRocketTier1.java @@ -0,0 +1,358 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelRocketTier1 extends ModelBase +{ + + ModelRenderer insideRoof; + ModelRenderer rocketBase1; + ModelRenderer rocketBase2; + ModelRenderer tip; + ModelRenderer wing4d; + ModelRenderer wing4c; + ModelRenderer wing4e; + ModelRenderer wing4b; + ModelRenderer wing4a; + ModelRenderer wing1a; + ModelRenderer wing1b; + ModelRenderer wing1c; + ModelRenderer wing1e; + ModelRenderer wing1d; + ModelRenderer wing2e; + ModelRenderer wing2d; + ModelRenderer wing2c; + ModelRenderer wing2b; + ModelRenderer wing2a; + ModelRenderer wing3e; + ModelRenderer wing3d; + ModelRenderer wing3c; + ModelRenderer wing3b; + ModelRenderer wing3a; + ModelRenderer top1; + ModelRenderer top2; + ModelRenderer top3; + ModelRenderer top4; + ModelRenderer top5; + ModelRenderer top6; + ModelRenderer top7; + ModelRenderer insideBottom; + ModelRenderer insideLeft; + ModelRenderer insidetop; + ModelRenderer rocketBase3; + ModelRenderer insideRight; + ModelRenderer insideSideLeft; + ModelRenderer insideSideRight; + ModelRenderer insideSideBack; + ModelRenderer insideFloor; + + public ModelRocketTier1() + { + this.textureWidth = 256; + this.textureHeight = 256; + + this.insideRoof = new ModelRenderer(this, 0, 59); + this.insideRoof.addBox(-9F, -45F, -9F, 18, 1, 18); + this.insideRoof.setRotationPoint(0F, 23F, 0F); + this.insideRoof.setTextureSize(256, 256); + this.insideRoof.mirror = true; + this.setRotation(this.insideRoof, 0F, 0F, 0F); + this.rocketBase1 = new ModelRenderer(this, 0, 0); + this.rocketBase1.addBox(-7F, -1F, -7F, 14, 1, 14); + this.rocketBase1.setRotationPoint(0F, 24F, 0F); + this.rocketBase1.setTextureSize(256, 256); + this.rocketBase1.mirror = true; + this.setRotation(this.rocketBase1, 0F, 0F, 0F); + this.rocketBase2 = new ModelRenderer(this, 0, 15); + this.rocketBase2.addBox(-6F, -2F, -6F, 12, 1, 12); + this.rocketBase2.setRotationPoint(0F, 24F, 0F); + this.rocketBase2.setTextureSize(256, 256); + this.rocketBase2.mirror = true; + this.setRotation(this.rocketBase2, 0F, 0F, 0F); + this.tip = new ModelRenderer(this, 248, 144); + this.tip.addBox(-1F, -76F, -1F, 2, 18, 2); + this.tip.setRotationPoint(0F, 24F, 0F); + this.tip.setTextureSize(256, 256); + this.tip.mirror = true; + this.setRotation(this.tip, 0F, 0F, 0F); + this.wing4d = new ModelRenderer(this, 66, 0); + this.wing4d.addBox(11F, -14F, -1F, 2, 8, 2); + this.wing4d.setRotationPoint(0F, 24F, 0F); + this.wing4d.setTextureSize(256, 256); + this.wing4d.mirror = true; + this.setRotation(this.wing4d, 0F, 0F, 0F); + this.wing4c = new ModelRenderer(this, 66, 0); + this.wing4c.addBox(13F, -12F, -1F, 2, 8, 2); + this.wing4c.setRotationPoint(0F, 24F, 0F); + this.wing4c.setTextureSize(256, 256); + this.wing4c.mirror = true; + this.setRotation(this.wing4c, 0F, 0F, 0F); + this.wing4e = new ModelRenderer(this, 66, 0); + this.wing4e.addBox(9.1F, -15F, -1F, 2, 8, 2); + this.wing4e.setRotationPoint(0F, 24F, 0F); + this.wing4e.setTextureSize(256, 256); + this.wing4e.mirror = true; + this.setRotation(this.wing4e, 0F, 0F, 0F); + this.wing4b = new ModelRenderer(this, 66, 0); + this.wing4b.addBox(15F, -9F, -1F, 2, 8, 2); + this.wing4b.setRotationPoint(0F, 24F, 0F); + this.wing4b.setTextureSize(256, 256); + this.wing4b.mirror = true; + this.setRotation(this.wing4b, 0F, 0F, 0F); + this.wing4a = new ModelRenderer(this, 74, 0); + this.wing4a.addBox(17F, -14F, -1F, 1, 15, 2); + this.wing4a.setRotationPoint(0F, 24F, 0F); + this.wing4a.setTextureSize(256, 256); + this.wing4a.mirror = true; + this.setRotation(this.wing4a, 0F, 0F, 0F); + this.wing1a = new ModelRenderer(this, 60, 0); + this.wing1a.addBox(-1F, -14F, -18F, 2, 15, 1); + this.wing1a.setRotationPoint(0F, 24F, 0F); + this.wing1a.setTextureSize(256, 256); + this.wing1a.mirror = true; + this.setRotation(this.wing1a, 0F, 0F, 0F); + this.wing1b = new ModelRenderer(this, 66, 0); + this.wing1b.addBox(-1F, -9F, -17F, 2, 8, 2); + this.wing1b.setRotationPoint(0F, 24F, 0F); + this.wing1b.setTextureSize(256, 256); + this.wing1b.mirror = true; + this.setRotation(this.wing1b, 0F, 0F, 0F); + this.wing1c = new ModelRenderer(this, 66, 0); + this.wing1c.addBox(-1F, -12F, -15F, 2, 8, 2); + this.wing1c.setRotationPoint(0F, 24F, 0F); + this.wing1c.setTextureSize(256, 256); + this.wing1c.mirror = true; + this.setRotation(this.wing1c, 0F, 0F, 0F); + this.wing1e = new ModelRenderer(this, 66, 0); + this.wing1e.addBox(-1F, -15F, -11.1F, 2, 8, 2); + this.wing1e.setRotationPoint(0F, 24F, 0F); + this.wing1e.setTextureSize(256, 256); + this.wing1e.mirror = true; + this.setRotation(this.wing1e, 0F, 0F, 0F); + this.wing1d = new ModelRenderer(this, 66, 0); + this.wing1d.addBox(-1F, -14F, -13F, 2, 8, 2); + this.wing1d.setRotationPoint(0F, 24F, 0F); + this.wing1d.setTextureSize(256, 256); + this.wing1d.mirror = true; + this.setRotation(this.wing1d, 0F, 0F, 0F); + this.wing2e = new ModelRenderer(this, 66, 0); + this.wing2e.addBox(-11.1F, -15F, -1F, 2, 8, 2); + this.wing2e.setRotationPoint(0F, 24F, 0F); + this.wing2e.setTextureSize(256, 256); + this.wing2e.mirror = true; + this.setRotation(this.wing2e, 0F, 0F, 0F); + this.wing2d = new ModelRenderer(this, 66, 0); + this.wing2d.addBox(-13F, -14F, -1F, 2, 8, 2); + this.wing2d.setRotationPoint(0F, 24F, 0F); + this.wing2d.setTextureSize(256, 256); + this.wing2d.mirror = true; + this.setRotation(this.wing2d, 0F, 0F, 0F); + this.wing2c = new ModelRenderer(this, 66, 0); + this.wing2c.addBox(-15F, -12F, -1F, 2, 8, 2); + this.wing2c.setRotationPoint(0F, 24F, 0F); + this.wing2c.setTextureSize(256, 256); + this.wing2c.mirror = true; + this.setRotation(this.wing2c, 0F, 0F, 0F); + this.wing2b = new ModelRenderer(this, 66, 0); + this.wing2b.addBox(-17F, -9F, -1F, 2, 8, 2); + this.wing2b.setRotationPoint(0F, 24F, 0F); + this.wing2b.setTextureSize(256, 256); + this.wing2b.mirror = true; + this.setRotation(this.wing2b, 0F, 0F, 0F); + this.wing2a = new ModelRenderer(this, 74, 0); + this.wing2a.addBox(-18F, -14F, -1F, 1, 15, 2); + this.wing2a.setRotationPoint(0F, 24F, 0F); + this.wing2a.setTextureSize(256, 256); + this.wing2a.mirror = true; + this.setRotation(this.wing2a, 0F, 0F, 0F); + this.wing3e = new ModelRenderer(this, 66, 0); + this.wing3e.addBox(-1F, -15F, 9.1F, 2, 8, 2); + this.wing3e.setRotationPoint(0F, 24F, 0F); + this.wing3e.setTextureSize(256, 256); + this.wing3e.mirror = true; + this.setRotation(this.wing3e, 0F, 0F, 0F); + this.wing3d = new ModelRenderer(this, 66, 0); + this.wing3d.addBox(-1F, -14F, 11F, 2, 8, 2); + this.wing3d.setRotationPoint(0F, 24F, 0F); + this.wing3d.setTextureSize(256, 256); + this.wing3d.mirror = true; + this.setRotation(this.wing3d, 0F, 0F, 0F); + this.wing3c = new ModelRenderer(this, 66, 0); + this.wing3c.addBox(-1F, -12F, 13F, 2, 8, 2); + this.wing3c.setRotationPoint(0F, 24F, 0F); + this.wing3c.setTextureSize(256, 256); + this.wing3c.mirror = true; + this.setRotation(this.wing3c, 0F, 0F, 0F); + this.wing3b = new ModelRenderer(this, 66, 0); + this.wing3b.addBox(-1F, -9F, 15F, 2, 8, 2); + this.wing3b.setRotationPoint(0F, 24F, 0F); + this.wing3b.setTextureSize(256, 256); + this.wing3b.mirror = true; + this.setRotation(this.wing3b, 0F, 0F, 0F); + this.wing3a = new ModelRenderer(this, 60, 0); + this.wing3a.addBox(-1F, -14F, 17F, 2, 15, 1); + this.wing3a.setRotationPoint(0F, 24F, 0F); + this.wing3a.setTextureSize(256, 256); + this.wing3a.mirror = true; + this.setRotation(this.wing3a, 0F, 0F, 0F); + this.top1 = new ModelRenderer(this, 192, 60); + this.top1.addBox(-8F, -48F, -8F, 16, 2, 16); + this.top1.setRotationPoint(0F, 24F, 0F); + this.top1.setTextureSize(256, 256); + this.top1.mirror = true; + this.setRotation(this.top1, 0F, 0F, 0F); + this.top2 = new ModelRenderer(this, 200, 78); + this.top2.addBox(-7F, -50F, -7F, 14, 2, 14); + this.top2.setRotationPoint(0F, 24F, 0F); + this.top2.setTextureSize(256, 256); + this.top2.mirror = true; + this.setRotation(this.top2, 0F, 0F, 0F); + this.top3 = new ModelRenderer(this, 208, 94); + this.top3.addBox(-6F, -52F, -6F, 12, 2, 12); + this.top3.setRotationPoint(0F, 24F, 0F); + this.top3.setTextureSize(256, 256); + this.top3.mirror = true; + this.setRotation(this.top3, 0F, 0F, 0F); + this.top4 = new ModelRenderer(this, 216, 108); + this.top4.addBox(-5F, -54F, -5F, 10, 2, 10); + this.top4.setRotationPoint(0F, 24F, 0F); + this.top4.setTextureSize(256, 256); + this.top4.mirror = true; + this.setRotation(this.top4, 0F, 0F, 0F); + this.top5 = new ModelRenderer(this, 224, 120); + this.top5.addBox(-4F, -56F, -4F, 8, 2, 8); + this.top5.setRotationPoint(0F, 24F, 0F); + this.top5.setTextureSize(256, 256); + this.top5.mirror = true; + this.setRotation(this.top5, 0F, 0F, 0F); + this.top6 = new ModelRenderer(this, 232, 130); + this.top6.addBox(-3F, -58F, -3F, 6, 2, 6); + this.top6.setRotationPoint(0F, 24F, 0F); + this.top6.setTextureSize(256, 256); + this.top6.mirror = true; + this.setRotation(this.top6, 0F, 0F, 0F); + this.top7 = new ModelRenderer(this, 240, 138); + this.top7.addBox(-2F, -60F, -2F, 4, 2, 4); + this.top7.setRotationPoint(0F, 24F, 0F); + this.top7.setTextureSize(256, 256); + this.top7.mirror = true; + this.setRotation(this.top7, 0F, 0F, 0F); + this.insideBottom = new ModelRenderer(this, 85, 18); + this.insideBottom.addBox(-3.9F, -22F, -8.9F, 8, 17, 1); + this.insideBottom.setRotationPoint(0F, 24F, 0F); + this.insideBottom.setTextureSize(256, 256); + this.insideBottom.mirror = true; + this.setRotation(this.insideBottom, 0F, 0F, 0F); + this.insideLeft = new ModelRenderer(this, 103, 0); + this.insideLeft.addBox(3.9F, -46F, -8.9F, 5, 41, 1); + this.insideLeft.setRotationPoint(0F, 24F, 0F); + this.insideLeft.setTextureSize(256, 256); + this.insideLeft.mirror = true; + this.setRotation(this.insideLeft, 0F, 0F, 0F); + this.insidetop = new ModelRenderer(this, 85, 0); + this.insidetop.addBox(-3.9F, -46F, -8.9F, 8, 17, 1); + this.insidetop.setRotationPoint(0F, 24F, 0F); + this.insidetop.setTextureSize(256, 256); + this.insidetop.mirror = true; + this.setRotation(this.insidetop, 0F, 0F, 0F); + this.rocketBase3 = new ModelRenderer(this, 0, 28); + this.rocketBase3.addBox(-5F, -4F, -5F, 10, 2, 10); + this.rocketBase3.setRotationPoint(0F, 24F, 0F); + this.rocketBase3.setTextureSize(256, 256); + this.rocketBase3.mirror = true; + this.setRotation(this.rocketBase3, 0F, 0F, 0F); + this.insideRight = new ModelRenderer(this, 103, 42); + this.insideRight.addBox(-8.9F, -46F, -8.9F, 5, 41, 1); + this.insideRight.setRotationPoint(0F, 24F, 0F); + this.insideRight.setTextureSize(256, 256); + this.insideRight.mirror = true; + this.setRotation(this.insideRight, 0F, 0F, 0F); + this.insideSideLeft = new ModelRenderer(this, 119, 57); + this.insideSideLeft.addBox(8.1F, -46F, -7.9F, 1, 41, 17); + this.insideSideLeft.setRotationPoint(0F, 24F, 0F); + this.insideSideLeft.setTextureSize(256, 256); + this.insideSideLeft.mirror = true; + this.setRotation(this.insideSideLeft, 0F, 0F, 0F); + this.insideSideRight = new ModelRenderer(this, 120, 0); + this.insideSideRight.addBox(-8.9F, -46F, -7.9F, 1, 41, 16); + this.insideSideRight.setRotationPoint(0F, 24F, 0F); + this.insideSideRight.setTextureSize(256, 256); + this.insideSideRight.mirror = true; + this.setRotation(this.insideSideRight, 0F, 0F, 0F); + this.insideSideBack = new ModelRenderer(this, 120, 114); + this.insideSideBack.addBox(-8.9F, -46F, 8.1F, 17, 41, 1); + this.insideSideBack.setRotationPoint(0F, 24F, 0F); + this.insideSideBack.setTextureSize(256, 256); + this.insideSideBack.mirror = true; + this.setRotation(this.insideSideBack, 0F, 0F, 0F); + this.insideFloor = new ModelRenderer(this, 0, 40); + this.insideFloor.addBox(-9F, -4F, -9F, 18, 1, 18); + this.insideFloor.setRotationPoint(0F, 23F, 0F); + this.insideFloor.setTextureSize(256, 256); + this.insideFloor.mirror = true; + this.setRotation(this.insideFloor, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.insideRoof.render(f5); + this.rocketBase1.render(f5); + this.rocketBase2.render(f5); + this.tip.render(f5); + this.wing4d.render(f5); + this.wing4c.render(f5); + this.wing4e.render(f5); + this.wing4b.render(f5); + this.wing4a.render(f5); + this.wing1a.render(f5); + this.wing1b.render(f5); + this.wing1c.render(f5); + this.wing1e.render(f5); + this.wing1d.render(f5); + this.wing2e.render(f5); + this.wing2d.render(f5); + this.wing2c.render(f5); + this.wing2b.render(f5); + this.wing2a.render(f5); + this.wing3e.render(f5); + this.wing3d.render(f5); + this.wing3c.render(f5); + this.wing3b.render(f5); + this.wing3a.render(f5); + this.top1.render(f5); + this.top2.render(f5); + this.top3.render(f5); + this.top4.render(f5); + this.top5.render(f5); + this.top6.render(f5); + this.top7.render(f5); + this.insideBottom.render(f5); + this.insideLeft.render(f5); + this.insidetop.render(f5); + this.rocketBase3.render(f5); + this.insideRight.render(f5); + this.insideSideLeft.render(f5); + this.insideSideRight.render(f5); + this.insideSideBack.render(f5); + this.insideFloor.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/OBJLoaderGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/OBJLoaderGC.java new file mode 100644 index 00000000..5d53c8a9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/OBJLoaderGC.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model; + +import com.google.common.collect.ImmutableMap; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.IReloadableResourceManager; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ICustomModelLoader; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.client.model.obj.OBJModel; + +/* + * Loader for OBJ models. + * To enable your mod call instance.addDomain(modid). + * If you need more control over accepted resources - extend the class, and register a new instance with ModelLoaderRegistry. + */ +public class OBJLoaderGC implements ICustomModelLoader +{ + + public static final OBJLoaderGC instance = new OBJLoaderGC(); + private IResourceManager manager; + private final Set enabledDomains = new HashSet<>(); + private final Map cache = new HashMap<>(); + + static + { + ((IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager()).registerReloadListener(instance); + } + + public void addDomain(String domain) + { + enabledDomains.add(domain.toLowerCase()); + } + + @Override + public void onResourceManagerReload(IResourceManager resourceManager) + { + this.manager = resourceManager; + cache.clear(); + } + + @Override + public boolean accepts(ResourceLocation modelLocation) + { + return enabledDomains.contains(modelLocation.getNamespace()) && modelLocation.getPath().endsWith(".obj"); + } + + @Override + public IModel loadModel(ResourceLocation modelLocation) throws IOException + { + IModel model = null; + if (cache.containsKey(modelLocation)) + { + model = cache.get(modelLocation); + } else + { + try + { + String prefix = modelLocation.getPath().contains("models/") ? "" : "models/"; + ResourceLocation file = new ResourceLocation(modelLocation.getNamespace(), prefix + modelLocation.getPath()); + IResource resource = manager.getResource(file); + if (resource != null) + { + OBJModel.Parser parser = new OBJModel.Parser(resource, manager); + try + { + model = parser.parse().process(ImmutableMap.of("flip-v", "true")); + } finally + { + resource.getInputStream().close(); + cache.put(modelLocation, model); + } + } + } catch (IOException e) + { + throw e; + } + } + if (model == null) + return ModelLoaderRegistry.getMissingModel(); + return model; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelGrating.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelGrating.java new file mode 100644 index 00000000..b95eda57 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelGrating.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.block.model.ModelManager; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.common.property.IExtendedBlockState; + +public class ModelGrating implements IBakedModel +{ + + private final IBakedModel gratingMetal; + + public ModelGrating(ModelResourceLocation blockLoc, ModelManager modelManager) + { + this.gratingMetal = modelManager.getModel(blockLoc); + } + + @Override + public List getQuads(IBlockState state, EnumFacing side, long rand) + { + if (side == EnumFacing.DOWN && state.getBlock() instanceof BlockGrating) + { + IBlockState baseState = ((IExtendedBlockState) state).getValue(BlockGrating.BASE_STATE); + if (baseState != null) + { + IBlockAccess blockAccess = BlockGrating.savedBlockAccess; + BlockPos pos = BlockGrating.savedPos; + BufferBuilder buffer = TransformerHooks.renderBuilder.get(); + if (buffer != null) + { + if (baseState.getBlock().canRenderInLayer(baseState, MinecraftForgeClient.getRenderLayer())) + try + { + Minecraft.getMinecraft().getBlockRendererDispatcher().renderBlock(baseState, pos, blockAccess, buffer); + } catch (Exception ignore) + { + ignore.printStackTrace(); + } + } + } + } + if (MinecraftForgeClient.getRenderLayer() == BlockRenderLayer.CUTOUT) + { + return this.gratingMetal.getQuads(state, side, rand); + } + + return ImmutableList.of(); + } + + @Override + public boolean isAmbientOcclusion() + { + return true; + } + + @Override + public boolean isGui3d() + { + return true; + } + + @Override + public boolean isBuiltInRenderer() + { + return false; + } + + @Override + public TextureAtlasSprite getParticleTexture() + { + return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(Constants.ASSET_PREFIX + ":blocks/screen_side"); + } + + @Override + public ItemCameraTransforms getItemCameraTransforms() + { + return ItemCameraTransforms.DEFAULT; + } + + @Override + public ItemOverrideList getOverrides() + { + return ItemOverrideList.NONE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelNasaWorkbench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelNasaWorkbench.java new file mode 100644 index 00000000..daa9fb2d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelNasaWorkbench.java @@ -0,0 +1,324 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelNasaWorkbench extends ModelBase +{ + + ModelRenderer base1a; + ModelRenderer baseAux1; + ModelRenderer base1b; + ModelRenderer base2a; + ModelRenderer base2b; + ModelRenderer baseAux3; + ModelRenderer baseAux2; + ModelRenderer clawL1; + ModelRenderer clawL2; + ModelRenderer clawR1; + ModelRenderer clawR2; + ModelRenderer clawRPR; + ModelRenderer clawRPL; + ModelRenderer armB1; + ModelRenderer manipulatorRotationPointB; + ModelRenderer baseRotationPointB; + ModelRenderer armRotationPointB; + ModelRenderer armB2; + ModelRenderer armR1; + ModelRenderer armR2; + ModelRenderer baseRotationPointR; + ModelRenderer armRotationPointR; + ModelRenderer weldHead; + ModelRenderer weldBit; + ModelRenderer screenRotationPointF; + ModelRenderer armF1; + ModelRenderer baseRotationPointF; + ModelRenderer screen; + ModelRenderer armRotationPointL; + ModelRenderer armL2; + ModelRenderer baseRotationPointL; + ModelRenderer armL1; + ModelRenderer sensorDish; + ModelRenderer sensor; + + public ModelNasaWorkbench() + { + this(0.0F); + } + + public ModelNasaWorkbench(float var1) + { + this.textureWidth = 256; + this.textureHeight = 128; + +// this.base1a = new ModelRenderer(this, 113, 24); +// this.base1a.addBox(-2.5F, -2F, -7.5F, 5, 2, 15); +// this.base1a.setRotationPoint(0F, 24F, 0F); +// this.base1a.setTextureSize(256, 128); +// this.base1a.mirror = true; +// this.setRotation(this.base1a, 0F, halfPI, 0F); +// this.baseAux1 = new ModelRenderer(this, 35, 40); +// this.baseAux1.addBox(-3.5F, 0F, -3.5F, 7, 1, 7); +// this.baseAux1.setRotationPoint(0F, 20F, 0F); +// this.baseAux1.setTextureSize(256, 128); +// this.baseAux1.mirror = true; +// this.setRotation(this.baseAux1, 0F, 0.7853982F, 0F); +// this.base1b = new ModelRenderer(this, 113, 24); +// this.base1b.addBox(-2.5F, -2F, -7.5F, 5, 2, 15); +// this.base1b.setRotationPoint(0F, 24F, 0F); +// this.base1b.setTextureSize(256, 128); +// this.base1b.mirror = true; +// this.setRotation(this.base1b, 0F, 0F, 0F); +// this.base2a = new ModelRenderer(this, 65, 0); +// this.base2a.addBox(-3.5F, -2F, -7F, 7, 5, 14); +// this.base2a.setRotationPoint(0F, 23F, 0F); +// this.base2a.setTextureSize(256, 128); +// this.base2a.mirror = true; +// this.setRotation(this.base2a, 0F, -0.7853982F, 0F); +// this.base2b = new ModelRenderer(this, 65, 0); +// this.base2b.addBox(-3.5F, -2F, -7F, 7, 3, 14); +// this.base2b.setRotationPoint(0F, 23F, 0F); +// this.base2b.setTextureSize(256, 128); +// this.base2b.mirror = true; +// this.setRotation(this.base2b, 0F, 0.7853982F, 0F); +// this.baseAux3 = new ModelRenderer(this, 50, 62); +// this.baseAux3.addBox(-8.5F, 0F, -0.5F, 17, 4, 1); +// this.baseAux3.setRotationPoint(0F, 20.5F, 0F); +// this.baseAux3.setTextureSize(256, 128); +// this.baseAux3.mirror = true; +// this.setRotation(this.baseAux3, 0F, -0.7853982F, 0F); +// this.baseAux2 = new ModelRenderer(this, 50, 62); +// this.baseAux2.addBox(-8.5F, 0F, -0.5F, 17, 4, 1); +// this.baseAux2.setRotationPoint(0F, 20.5F, 0F); +// this.baseAux2.setTextureSize(256, 128); +// this.baseAux2.mirror = true; +// this.setRotation(this.baseAux2, 0F, 0.7853982F, 0F); +// this.clawL1 = new ModelRenderer(this, 7, 57); +// this.clawL1.addBox(-0.5F, -1F, -3F, 1, 2, 3); +// this.clawL1.setRotationPoint(-1F, -0.2F, 4F); +// this.clawL1.setTextureSize(256, 128); +// this.clawL1.mirror = true; +// this.setRotation(this.clawL1, 0F, 1.003826F, 0F); +// this.clawL2 = new ModelRenderer(this, 7, 57); +// this.clawL2.addBox(-2.7F, -1F, -5F, 1, 2, 3); +// this.clawL2.setRotationPoint(-1F, -0.2F, 4F); +// this.clawL2.setTextureSize(256, 128); +// this.clawL2.mirror = true; +// this.setRotation(this.clawL2, 0F, 0.1698892F, 0F); +// this.clawR1 = new ModelRenderer(this, 7, 57); +// this.clawR1.addBox(-0.5F, -1F, -3F, 1, 2, 3); +// this.clawR1.setRotationPoint(1F, -0.2F, 4F); +// this.clawR1.setTextureSize(256, 128); +// this.clawR1.mirror = true; +// this.setRotation(this.clawR1, 0F, -1.041005F, 0F); +// this.clawR2 = new ModelRenderer(this, 7, 57); +// this.clawR2.addBox(1.7F, -1F, -5F, 1, 2, 3); +// this.clawR2.setRotationPoint(1F, -0.2F, 4F); +// this.clawR2.setTextureSize(256, 128); +// this.clawR2.mirror = true; +// this.setRotation(this.clawR2, 0F, -0.1896157F, 0F); +// this.clawRPR = new ModelRenderer(this, 0, 45); +// this.clawRPR.addBox(-2.2F, -1.5F, -3F, 1, 3, 1); +// this.clawRPR.setRotationPoint(1F, -0.2F, 4F); +// this.clawRPR.setTextureSize(256, 128); +// this.clawRPR.mirror = true; +// this.setRotation(this.clawRPR, 0F, -1.63514F, 0F); +// this.clawRPL = new ModelRenderer(this, 0, 45); +// this.clawRPL.addBox(-2.2F, -1.5F, -3F, 1, 3, 1); +// this.clawRPL.setRotationPoint(-1F, -0.2F, 4F); +// this.clawRPL.setTextureSize(256, 128); +// this.clawRPL.mirror = true; +// this.setRotation(this.clawRPL, 0F, 0.4096913F, 0F); +// this.armB1 = new ModelRenderer(this, 46, 0); +// this.armB1.addBox(-1F, -12F, -1F, 2, 12, 2); +// this.armB1.setRotationPoint(0F, 22F, 8F); +// this.armB1.setTextureSize(256, 128); +// this.armB1.mirror = true; +// this.setRotation(this.armB1, -0.3005282F, 0F, 0F); +// this.manipulatorRotationPointB = new ModelRenderer(this, 0, 69); +// this.manipulatorRotationPointB.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.manipulatorRotationPointB.setRotationPoint(0F, 0F, 4.5F); +// this.manipulatorRotationPointB.setTextureSize(256, 128); +// this.manipulatorRotationPointB.mirror = true; +// this.setRotation(this.manipulatorRotationPointB, 0F, halfPI, 0F); +// this.baseRotationPointB = new ModelRenderer(this, 0, 69); +// this.baseRotationPointB.addBox(-1.5F, -1.2F, -1.5F, 3, 3, 3); +// this.baseRotationPointB.setRotationPoint(0F, 22F, 7.5F); +// this.baseRotationPointB.setTextureSize(256, 128); +// this.baseRotationPointB.mirror = true; +// this.setRotation(this.baseRotationPointB, this.toRadians(0), this.toRadians(90), this.toRadians(15)); +// this.armRotationPointB = new ModelRenderer(this, 0, 69); +// this.armRotationPointB.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.armRotationPointB.setRotationPoint(0F, 10F, 11.5F); +// this.armRotationPointB.setTextureSize(256, 128); +// this.armRotationPointB.mirror = true; +// this.setRotation(this.armRotationPointB, this.toRadians(90), this.toRadians(0), this.toRadians(-90)); +// this.armB2 = new ModelRenderer(this, 46, 0); +// this.armB2.addBox(-1F, -12F, -1F, 2, 12, 2); +// this.armB2.setRotationPoint(0F, 9F, 11F); +// this.armB2.setTextureSize(256, 128); +// this.armB2.mirror = true; +// this.setRotation(this.armB2, 0.6289468F, 0F, 0F); +// this.armR1 = new ModelRenderer(this, 46, 0); +// this.armR1.addBox(-1F, -12F, -1F, 2, 12, 2); +// this.armR1.setRotationPoint(-8F, 22F, 0F); +// this.armR1.setTextureSize(256, 128); +// this.armR1.mirror = true; +// this.setRotation(this.armR1, 0.6351428F, halfPI, 0F); +// this.armR2 = new ModelRenderer(this, 55, 0); +// this.armR2.addBox(-1F, -8F, -1F, 2, 8, 2); +// this.armR2.setRotationPoint(-15F, 11F, 0F); +// this.armR2.setTextureSize(256, 128); +// this.armR2.mirror = true; +// this.setRotation(this.armR2, -0.9635439F, halfPI, 0F); +// this.baseRotationPointR = new ModelRenderer(this, 0, 69); +// this.baseRotationPointR.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.baseRotationPointR.setRotationPoint(-7.9F, 22F, 0F); +// this.baseRotationPointR.setTextureSize(256, 128); +// this.baseRotationPointR.mirror = true; +// this.setRotation(this.baseRotationPointR, 0F, 0F, 0.5235988F); +// this.armRotationPointR = new ModelRenderer(this, 0, 69); +// this.armRotationPointR.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.armRotationPointR.setRotationPoint(-15.76667F, 11.5F, 0F); +// this.armRotationPointR.setTextureSize(256, 128); +// this.armRotationPointR.mirror = true; +// this.setRotation(this.armRotationPointR, 0F, 0F, -0.1745329F); +// this.weldHead = new ModelRenderer(this, 17, 0); +// this.weldHead.addBox(-2F, -1.5F, -1.5F, 5, 3, 3); +// this.weldHead.setRotationPoint(-9F, 6F, 0F); +// this.weldHead.setTextureSize(256, 128); +// this.weldHead.mirror = true; +// this.setRotation(this.weldHead, 0F, 0F, 0.5948578F); +// this.weldBit = new ModelRenderer(this, 0, 0); +// this.weldBit.addBox(0F, -0.5F, -0.5F, 7, 1, 1); +// this.weldBit.setRotationPoint(-9F, 6F, 0F); +// this.weldBit.setTextureSize(256, 128); +// this.weldBit.mirror = true; +// this.setRotation(this.weldBit, 0F, 0F, 0.5948606F); +// this.screenRotationPointF = new ModelRenderer(this, 0, 77); +// this.screenRotationPointF.addBox(-1.5F, -1.5F, -1.5F, 3, 2, 3); +// this.screenRotationPointF.setRotationPoint(0F, 14F, -9F); +// this.screenRotationPointF.setTextureSize(256, 128); +// this.screenRotationPointF.mirror = true; +// this.setRotation(this.screenRotationPointF, this.toRadians(30), this.toRadians(0), this.toRadians(0)); +// this.armF1 = new ModelRenderer(this, 55, 0); +// this.armF1.addBox(-1F, -8F, -1F, 2, 8, 2); +// this.armF1.setRotationPoint(0F, 21F, -7.5F); +// this.armF1.setTextureSize(256, 128); +// this.armF1.mirror = true; +// this.setRotation(this.armF1, 0.2602503F, 0F, 0F); +// this.baseRotationPointF = new ModelRenderer(this, 0, 69); +// this.baseRotationPointF.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.baseRotationPointF.setRotationPoint(0F, 21.6F, -6.8F); +// this.baseRotationPointF.setTextureSize(256, 128); +// this.baseRotationPointF.mirror = true; +// this.setRotation(this.baseRotationPointF, this.toRadians(30F), this.toRadians(0), this.toRadians(0)); +// this.screen = new ModelRenderer(this, 10, 45); +// this.screen.addBox(-3.5F, -2.5F, -1F, 7, 5, 1); +// this.screen.setRotationPoint(0F, 13F, -10F); +// this.screen.setTextureSize(256, 128); +// this.screen.mirror = true; +// this.setRotation(this.screen, -1.047198F, 0F, 0F); +// this.armRotationPointL = new ModelRenderer(this, 0, 69); +// this.armRotationPointL.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.armRotationPointL.setRotationPoint(13.8F, 18.4F, 0F); +// this.armRotationPointL.setTextureSize(256, 128); +// this.armRotationPointL.mirror = true; +// this.setRotation(this.armRotationPointL, 0F, -3.141593F, 0.5235988F); +// this.armL2 = new ModelRenderer(this, 55, 0); +// this.armL2.addBox(-1F, -8F, -1F, 2, 8, 2); +// this.armL2.setRotationPoint(13.7F, 18F, 0F); +// this.armL2.setTextureSize(256, 128); +// this.armL2.mirror = true; +// this.setRotation(this.armL2, 0.6351428F, halfPI, 0F); +// this.baseRotationPointL = new ModelRenderer(this, 0, 69); +// this.baseRotationPointL.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); +// this.baseRotationPointL.setRotationPoint(7.5F, 22F, 0F); +// this.baseRotationPointL.setTextureSize(256, 128); +// this.baseRotationPointL.mirror = true; +// this.setRotation(this.baseRotationPointL, 0F, -3.141593F, 0.5235988F); +// this.armL1 = new ModelRenderer(this, 55, 0); +// this.armL1.addBox(-1F, -8F, -1F, 2, 8, 2); +// this.armL1.setRotationPoint(8F, 22F, 0F); +// this.armL1.setTextureSize(256, 128); +// this.armL1.mirror = true; +// this.setRotation(this.armL1, -1.037895F, halfPI, 0F); +// this.sensorDish = new ModelRenderer(this, 68, 41); +// this.sensorDish.addBox(-1F, -2F, -2F, 1, 4, 4); +// this.sensorDish.setRotationPoint(6F, 12F, 0F); +// this.sensorDish.setTextureSize(256, 128); +// this.sensorDish.mirror = true; +// this.setRotation(this.sensorDish, 0F, 0F, -0.3005282F); +// this.sensor = new ModelRenderer(this, 60, 54); +// this.sensor.addBox(-3F, -2F, -1F, 5, 2, 2); +// this.sensor.setRotationPoint(9F, 12F, 0F); +// this.sensor.setTextureSize(256, 128); +// this.sensor.mirror = true; +// this.setRotation(this.sensor, 0F, 0F, -0.3005353F); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void renderAll() + { + this.base1a.render(0.0625F); + this.baseAux1.render(0.0625F); + this.base1b.render(0.0625F); + this.base2a.render(0.0625F); + this.base2b.render(0.0625F); + this.baseAux3.render(0.0625F); + this.baseAux2.render(0.0625F); + this.clawL1.render(0.0625F); + this.clawL2.render(0.0625F); + this.clawR1.render(0.0625F); + this.clawR2.render(0.0625F); + this.clawRPR.render(0.0625F); + this.clawRPL.render(0.0625F); + this.armB1.render(0.0625F); + this.manipulatorRotationPointB.render(0.0625F); + this.baseRotationPointB.render(0.0625F); + this.armRotationPointB.render(0.0625F); + this.armB2.render(0.0625F); +// this.armR1.render(0.0625F); + this.armR2.render(0.0625F); + this.baseRotationPointR.render(0.0625F); + this.armRotationPointR.render(0.0625F); + this.weldHead.render(0.0625F); + this.weldBit.render(0.0625F); + this.screenRotationPointF.render(0.0625F); + this.armF1.render(0.0625F); + this.baseRotationPointF.render(0.0625F); + this.screen.render(0.0625F); + this.armRotationPointL.render(0.0625F); + this.armL2.render(0.0625F); + this.baseRotationPointL.render(0.0625F); + this.armL1.render(0.0625F); + this.sensorDish.render(0.0625F); + this.sensor.render(0.0625F); + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity e) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5, e); + } + + private float toRadians(float f) + { + return f / Constants.RADIANS_TO_DEGREES; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelPanelLightBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelPanelLightBase.java new file mode 100644 index 00000000..f7814a99 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelPanelLightBase.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.common.property.IExtendedBlockState; + +public class ModelPanelLightBase implements IBakedModel +{ + + private final ModelResourceLocation callingBlock; + + public ModelPanelLightBase(ModelResourceLocation blockLoc) + { + this.callingBlock = blockLoc; + } + + @Override + public List getQuads(IBlockState state, EnumFacing side, long rand) + { + if (state.getBlock() instanceof BlockPanelLighting) + { + IBlockState baseState = ((IExtendedBlockState) state).getValue(BlockPanelLighting.BASE_STATE); + BlockRenderLayer layer = MinecraftForgeClient.getRenderLayer(); + if (baseState == null) + { + if (layer == null || layer == BlockRenderLayer.SOLID) + { + return Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelManager().getModel(this.callingBlock).getQuads(state, side, rand); + } + } else if (layer == null || baseState.getBlock().canRenderInLayer(baseState, layer)) + { + return Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState(baseState).getQuads(baseState, side, rand); + } + } + return ImmutableList.of(); + } + + @Override + public boolean isAmbientOcclusion() + { + return true; + } + + @Override + public boolean isGui3d() + { + return true; + } + + @Override + public boolean isBuiltInRenderer() + { + return false; + } + + @Override + public TextureAtlasSprite getParticleTexture() + { + return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("minecraft:blocks/glass"); + } + + @Override + public ItemCameraTransforms getItemCameraTransforms() + { + return ItemCameraTransforms.DEFAULT; + } + + @Override + public ItemOverrideList getOverrides() + { + return ItemOverrideList.NONE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelParaChestTile.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelParaChestTile.java new file mode 100644 index 00000000..0b8e9cdc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelParaChestTile.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.model.ModelRenderer; + +public class ModelParaChestTile extends ModelChest +{ + + public ModelRenderer keyParts[] = new ModelRenderer[3]; + + public ModelParaChestTile() + { + super(); + this.keyParts[0] = new ModelRenderer(this, 60, 61); + this.keyParts[0].setTextureSize(64, 64); + this.keyParts[0].addBox(-1.0F, -6.0F, 0.0F, 1, 1, 1); + this.keyParts[0].setRotationPoint(0F, 0F, 0F); + this.keyParts[0].mirror = true; + this.keyParts[0].rotationPointX = 7.0F; + this.keyParts[0].rotationPointY = 7.0F; + this.keyParts[0].rotationPointZ = 7.5F; + this.keyParts[1] = new ModelRenderer(this, 53, 57); + this.keyParts[1].setTextureSize(64, 64); + this.keyParts[1].addBox(-1.0F, -6.0F, 0.0F, 4, 1, 1); + this.keyParts[1].setRotationPoint(0F, 0F, 0F); + this.keyParts[1].mirror = true; + this.keyParts[1].rotationPointX = 7.0F; + this.keyParts[1].rotationPointY = 6.0F; + this.keyParts[1].rotationPointZ = 7.5F; + this.keyParts[2] = new ModelRenderer(this, 60, 61); + this.keyParts[2].setTextureSize(64, 64); + this.keyParts[2].addBox(-1.0F, -6.0F, 0.0F, 1, 1, 1); + this.keyParts[2].setRotationPoint(0F, 0F, 0F); + this.keyParts[2].mirror = true; + this.keyParts[2].rotationPointX = 10.0F; + this.keyParts[2].rotationPointY = 7.0F; + this.keyParts[2].rotationPointZ = 7.5F; + } + + public void renderAll(boolean lidUp) + { + if (lidUp) + { + for (ModelRenderer m : this.keyParts) + { + m.render(0.0625F); + } + } + + super.renderAll(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelSolarPanel.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelSolarPanel.java new file mode 100644 index 00000000..7d3e85b4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelSolarPanel.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelSolarPanel extends ModelBase +{ + + ModelRenderer panelMain; + ModelRenderer sideHorizontal0; + ModelRenderer sideVertical0; + ModelRenderer sideVertical2; + ModelRenderer sideVertical1; + ModelRenderer sideHorizontal1; + ModelRenderer sideHorizontal3; + ModelRenderer sideHorizontal2; + ModelRenderer pole; + + public ModelSolarPanel() + { + this(0.0F); + } + + public ModelSolarPanel(float var1) + { + this.textureWidth = 256; + this.textureHeight = 128; + this.panelMain = new ModelRenderer(this, 0, 0); + this.panelMain.addBox(-23F, -0.5F, -23F, 46, 1, 46); + this.panelMain.setRotationPoint(0F, 0F, 0F); + this.panelMain.setTextureSize(256, 128); + this.panelMain.mirror = true; + this.setRotation(this.panelMain, 0F, 0F, 0F); + this.sideHorizontal0 = new ModelRenderer(this, 0, 48); + this.sideHorizontal0.addBox(-24F, -1.111F, -23F, 1, 1, 46); + this.sideHorizontal0.setRotationPoint(0F, 0F, 0F); + this.sideHorizontal0.setTextureSize(256, 128); + this.sideHorizontal0.mirror = true; + this.setRotation(this.sideHorizontal0, 0F, 0F, 0F); + this.sideVertical0 = new ModelRenderer(this, 94, 48); + this.sideVertical0.addBox(-24F, -1.1F, 23F, 48, 1, 1); + this.sideVertical0.setRotationPoint(0F, 0F, 0F); + this.sideVertical0.setTextureSize(256, 128); + this.sideVertical0.mirror = true; + this.setRotation(this.sideVertical0, 0F, 0F, 0F); + this.sideVertical2 = new ModelRenderer(this, 94, 48); + this.sideVertical2.addBox(-24F, -1.1F, -24F, 48, 1, 1); + this.sideVertical2.setRotationPoint(0F, 0F, 0F); + this.sideVertical2.setTextureSize(256, 128); + this.sideVertical2.mirror = true; + this.setRotation(this.sideVertical2, 0F, 0F, 0F); + this.sideVertical1 = new ModelRenderer(this, 94, 48); + this.sideVertical1.addBox(-24F, -1.1F, -0.5F, 48, 1, 1); + this.sideVertical1.setRotationPoint(0F, 0F, 0F); + this.sideVertical1.setTextureSize(256, 128); + this.sideVertical1.mirror = true; + this.setRotation(this.sideVertical1, 0F, 0F, 0F); + this.sideHorizontal1 = new ModelRenderer(this, 0, 48); + this.sideHorizontal1.addBox(-9F, -1.111F, -23F, 1, 1, 46); + this.sideHorizontal1.setRotationPoint(0F, 0F, 0F); + this.sideHorizontal1.setTextureSize(256, 128); + this.sideHorizontal1.mirror = true; + this.setRotation(this.sideHorizontal1, 0F, 0F, 0F); + this.sideHorizontal3 = new ModelRenderer(this, 0, 48); + this.sideHorizontal3.addBox(23F, -1.111F, -23F, 1, 1, 46); + this.sideHorizontal3.setRotationPoint(0F, 0F, 0F); + this.sideHorizontal3.setTextureSize(256, 128); + this.sideHorizontal3.mirror = true; + this.setRotation(this.sideHorizontal3, 0F, 0F, 0F); + this.sideHorizontal2 = new ModelRenderer(this, 0, 48); + this.sideHorizontal2.addBox(8F, -1.111F, -23F, 1, 1, 46); + this.sideHorizontal2.setRotationPoint(0F, 0F, 0F); + this.sideHorizontal2.setTextureSize(256, 128); + this.sideHorizontal2.mirror = true; + this.setRotation(this.sideHorizontal2, 0F, 0F, 0F); + this.pole = new ModelRenderer(this, 94, 50); + this.pole.addBox(-1.5F, 0.0F, -1.5F, 3, 24, 3); + this.pole.setRotationPoint(0F, 0F, 0F); + this.pole.setTextureSize(256, 128); + this.pole.mirror = true; + this.setRotation(this.pole, 0F, 0F, 0F); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void renderPanel() + { + this.panelMain.render(0.0625F); + this.sideHorizontal0.render(0.0625F); + this.sideVertical0.render(0.0625F); + this.sideVertical2.render(0.0625F); + this.sideVertical1.render(0.0625F); + this.sideHorizontal1.render(0.0625F); + this.sideHorizontal3.render(0.0625F); + this.sideHorizontal2.render(0.0625F); + } + + public void renderPole() + { + this.pole.render(0.0625F); + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity e) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5, e); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChest.java new file mode 100644 index 00000000..91b7b7a6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChest.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.model.ModelRenderer; + +public class ModelTreasureChest extends ModelChest +{ + + public ModelRenderer keyParts[] = new ModelRenderer[6]; + + public ModelTreasureChest() + { + super(); + this.textureWidth = 64; + this.textureHeight = 64; + this.keyParts[4] = new ModelRenderer(this, 50, 43); + this.keyParts[4].addBox(7F, 2F, -0.5F, 3, 1, 1); + this.keyParts[4].setRotationPoint(0F, 0F, 0F); + this.keyParts[4].setTextureSize(64, 64); + this.keyParts[4].mirror = true; + this.keyParts[3] = new ModelRenderer(this, 39, 43); + this.keyParts[3].addBox(6F, 1F, -0.5F, 4, 1, 1); + this.keyParts[3].setRotationPoint(0F, 0F, 0F); + this.keyParts[3].setTextureSize(64, 64); + this.keyParts[3].mirror = true; + this.keyParts[2] = new ModelRenderer(this, 14, 43); + this.keyParts[2].addBox(-0.5F, 0F, -0.5F, 11, 1, 1); + this.keyParts[2].setRotationPoint(0F, 0F, 0F); + this.keyParts[2].setTextureSize(64, 64); + this.keyParts[2].mirror = true; + this.keyParts[1] = new ModelRenderer(this, 9, 43); + this.keyParts[1].addBox(-1.5F, -0.5F, -0.5F, 1, 2, 1); + this.keyParts[1].setRotationPoint(0F, 0F, 0F); + this.keyParts[1].setTextureSize(64, 64); + this.keyParts[1].mirror = true; + this.keyParts[0] = new ModelRenderer(this, 0, 43); + this.keyParts[0].addBox(-4.5F, -1F, -0.5F, 3, 3, 1); + this.keyParts[0].setRotationPoint(0F, 0F, 0F); + this.keyParts[0].setTextureSize(64, 64); + this.keyParts[0].mirror = true; + this.keyParts[5] = new ModelRenderer(this, 0, 0).setTextureSize(64, 64); + this.keyParts[5].addBox(-2.0F, -2.05F, -15.1F, 4, 4, 1, 0.0F); + this.keyParts[5].rotationPointX = 8.0F; + this.keyParts[5].rotationPointY = 7.0F; + this.keyParts[5].rotationPointZ = 15.0F; + } + + public void renderAll(boolean withKey) + { + if (withKey) + { + for (final ModelRenderer nmtmr : this.keyParts) + { + if (!nmtmr.equals(this.keyParts[5])) + { + nmtmr.rotationPointX = 8.0F; + nmtmr.rotationPointY = 7.0F; + nmtmr.rotationPointZ = -2.0F; + nmtmr.rotateAngleY = 3 * Constants.halfPI; + nmtmr.rotateAngleX = -this.chestLid.rotateAngleX; + nmtmr.render(0.0625F); + } + } + } + + this.keyParts[5].rotationPointX = 8.0F; + this.keyParts[5].rotationPointY = 7.0F; + this.keyParts[5].rotationPointZ = 15.0F; + this.keyParts[5].rotateAngleX = 0; + this.keyParts[5].rotateAngleY = 0; + this.keyParts[5].render(0.0625F); + + super.renderAll(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChestLarge.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChestLarge.java new file mode 100644 index 00000000..90c23475 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/model/block/ModelTreasureChestLarge.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.model.block; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelLargeChest; +import net.minecraft.client.model.ModelRenderer; + +public class ModelTreasureChestLarge extends ModelLargeChest +{ + + public ModelRenderer keyParts[] = new ModelRenderer[6]; + + public ModelTreasureChestLarge() + { + super(); + this.textureWidth = 128; + this.textureHeight = 64; + this.keyParts[4] = new ModelRenderer(this, 50, 43); + this.keyParts[4].addBox(7F, 2F, -0.5F, 3, 1, 1); + this.keyParts[4].setRotationPoint(0F, 0F, 0F); + this.keyParts[4].setTextureSize(128, 64); + this.keyParts[4].mirror = true; + this.keyParts[3] = new ModelRenderer(this, 39, 43); + this.keyParts[3].addBox(6F, 1F, -0.5F, 4, 1, 1); + this.keyParts[3].setRotationPoint(0F, 0F, 0F); + this.keyParts[3].setTextureSize(128, 64); + this.keyParts[3].mirror = true; + this.keyParts[2] = new ModelRenderer(this, 14, 43); + this.keyParts[2].addBox(-0.5F, 0F, -0.5F, 11, 1, 1); + this.keyParts[2].setRotationPoint(0F, 0F, 0F); + this.keyParts[2].setTextureSize(128, 64); + this.keyParts[2].mirror = true; + this.keyParts[1] = new ModelRenderer(this, 9, 43); + this.keyParts[1].addBox(-1.5F, -0.5F, -0.5F, 1, 2, 1); + this.keyParts[1].setRotationPoint(0F, 0F, 0F); + this.keyParts[1].setTextureSize(128, 64); + this.keyParts[1].mirror = true; + this.keyParts[0] = new ModelRenderer(this, 0, 43); + this.keyParts[0].addBox(-4.5F, -1F, -0.5F, 3, 3, 1); + this.keyParts[0].setRotationPoint(0F, 0F, 0F); + this.keyParts[0].setTextureSize(128, 64); + this.keyParts[0].mirror = true; + this.keyParts[5] = new ModelRenderer(this, 0, 0).setTextureSize(128, 64); + this.keyParts[5].addBox(-2.0F, -2.05F, -15.1F, 4, 4, 1, 0.0F); + this.keyParts[5].rotationPointX = 8.0F; + this.keyParts[5].rotationPointY = 7.0F; + this.keyParts[5].rotationPointZ = 15.0F; + } + + public void renderAll(boolean withKey) + { + if (withKey) + { + for (final ModelRenderer nmtmr : this.keyParts) + { + if (!nmtmr.equals(this.keyParts[5])) + { + nmtmr.rotationPointX = 16.0F; + nmtmr.rotationPointY = 7.0F; + nmtmr.rotationPointZ = -2.0F; + nmtmr.rotateAngleY = 3 * Constants.halfPI; + nmtmr.rotateAngleX = -this.chestLid.rotateAngleX; + nmtmr.render(0.0625F); + } + } + } + + this.keyParts[5].rotationPointX = 16.0F; + this.keyParts[5].rotationPointY = 7.0F; + this.keyParts[5].rotationPointZ = 15.0F; + this.keyParts[5].rotateAngleX = 0; + this.keyParts[5].rotateAngleY = 0; + this.keyParts[5].render(0.0625F); + + super.renderAll(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/RenderPlanet.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/RenderPlanet.java new file mode 100644 index 00000000..2c9babec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/RenderPlanet.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class RenderPlanet +{ + + private static TextureManager renderEngine = FMLClientHandler.instance().getClient().renderEngine; + + private static ResourceLocation textureEuropa = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/europa.png"); + private static ResourceLocation textureGanymede = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/ganymede.png"); + private static ResourceLocation textureIo = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/io.png"); + private static ResourceLocation textureSaturn = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/saturn.png"); + private static ResourceLocation textureJupiterInner = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/jupiter_inner.png"); + private static ResourceLocation textureJupiterUpper = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/planets/jupiter_upper.png"); + + public static void renderPlanet(int textureId, float scale, float ticks, float relSize) + { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureId); + float size = relSize / 70 * scale; + ticks = ((float) System.nanoTime()) / 50000000F; + RenderPlanet.drawTexturedRectUV(-size / 2, -size / 2, size, size, ticks); + } + + public static void renderPlanet(ResourceLocation texture, float scale, float ticks, float relSize) + { + RenderPlanet.renderEngine.bindTexture(texture); + float size = relSize / 70 * scale; + ticks = ((float) System.nanoTime()) / 50000000F; + RenderPlanet.drawTexturedRectUV(-size / 2, -size / 2, size, size, ticks); + } + + public static void renderID(int id, float scale, float ticks) + { + ResourceLocation texture; + switch (id) + { + case 0: + texture = textureEuropa; + break; + case 1: + texture = textureGanymede; + break; + case 2: + texture = textureIo; + break; + case 3: + texture = textureJupiterInner; + break; + case 4: + texture = textureSaturn; + break; + default: + texture = textureGanymede; + } + if (id == 3) // Jupiter + { + float relSize = 48F; + float size = relSize / 70 * scale; + RenderPlanet.renderEngine.bindTexture(texture); + RenderPlanet.drawTexturedRectUV(-size / 2, -size / 2, size, size, ticks); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef(0, 0, -0.001F); + RenderPlanet.renderEngine.bindTexture(textureJupiterUpper); + size *= 1.001F; + RenderPlanet.drawTexturedRectUV(-size / 2, -size / 2, size, size, ticks * 0.85F); + } else + { + RenderPlanet.renderPlanet(texture, scale, ticks, 8F); + } + } + + public static void drawTexturedRectUV(float x, float y, float width, float height, float ticks) + { + for (int ysect = 0; ysect < 6; ysect++) + { + float factor = 1F + MathHelper.cos((7.5F + 10F * ysect) / 62F); + drawTexturedRectUVSixth(x, y, width, height, (ticks / 1100F) % 1F - (1F - factor) * 0.15F, ysect / 6F, 0.16F * factor); + } + } + + public static void drawTexturedRectUVSixth(float x, float y, float width, float height, float prog, float y0, float span) + { + y0 /= 2; + if (prog < 0F) + { + prog += 1.0F; + } + prog = 1.0F - prog; + float y1 = y0 + 1 / 12F; + float y2 = 1F - y1; + float y3 = 1F - y0; + float yaa = y + height * y0; + float yab = y + height * y1; + float yba = y + height * y2; + float ybb = y + height * y3; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + if (prog <= 1F - span) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, yab, 0F).tex(prog, y1).endVertex(); + worldRenderer.pos(x + width, yab, 0F).tex(prog + span, y1).endVertex(); + worldRenderer.pos(x + width, yaa, 0F).tex(prog + span, y0).endVertex(); + worldRenderer.pos(x, yaa, 0F).tex(prog, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, ybb, 0F).tex(prog, y3).endVertex(); + worldRenderer.pos(x + width, ybb, 0F).tex(prog + span, y3).endVertex(); + worldRenderer.pos(x + width, yba, 0F).tex(prog + span, y2).endVertex(); + worldRenderer.pos(x, yba, 0F).tex(prog, y2).endVertex(); + tessellator.draw(); + } else + { + double xp = x + width * (1F - prog) / span; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, yab, 0F).tex(prog, y1).endVertex(); + worldRenderer.pos(xp, yab, 0F).tex(1.0F, y1).endVertex(); + worldRenderer.pos(xp, yaa, 0F).tex(1.0F, y0).endVertex(); + worldRenderer.pos(x, yaa, 0F).tex(prog, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, ybb, 0F).tex(prog, y3).endVertex(); + worldRenderer.pos(xp, ybb, 0F).tex(1.0F, y3).endVertex(); + worldRenderer.pos(xp, yba, 0F).tex(1.0F, y2).endVertex(); + worldRenderer.pos(x, yba, 0F).tex(prog, y2).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(xp, yab, 0F).tex(0F, y1).endVertex(); + worldRenderer.pos(x + width, yab, 0F).tex(prog - 1F + span, y1).endVertex(); + worldRenderer.pos(x + width, yaa, 0F).tex(prog - 1F + span, y0).endVertex(); + worldRenderer.pos(xp, yaa, 0F).tex(0F, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(xp, ybb, 0F).tex(0F, y3).endVertex(); + worldRenderer.pos(x + width, ybb, 0F).tex(prog - 1F + span, y3).endVertex(); + worldRenderer.pos(x + width, yba, 0F).tex(prog - 1F + span, y2).endVertex(); + worldRenderer.pos(xp, yba, 0F).tex(0F, y2).endVertex(); + tessellator.draw(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/ThreadDownloadImageDataGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/ThreadDownloadImageDataGC.java new file mode 100644 index 00000000..b3f56832 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/ThreadDownloadImageDataGC.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.concurrent.atomic.AtomicInteger; +import javax.imageio.ImageIO; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.client.renderer.IImageBuffer; +import net.minecraft.client.renderer.texture.SimpleTexture; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.FileUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ThreadDownloadImageDataGC extends SimpleTexture +{ + + private static final Logger logger = LogManager.getLogger(); + private static final AtomicInteger threadDownloadCounter = new AtomicInteger(0); + private final File field_152434_e; + private final String imageUrl; + private final IImageBuffer imageBuffer; + private BufferedImage bufferedImage; + private Thread imageThread; + private boolean textureUploaded; + + public ThreadDownloadImageDataGC(File p_i1049_1_, String p_i1049_2_, ResourceLocation p_i1049_3_, IImageBuffer p_i1049_4_) + { + super(p_i1049_3_); + this.field_152434_e = p_i1049_1_; + this.imageUrl = p_i1049_2_; + this.imageBuffer = p_i1049_4_; + } + + private void checkTextureUploaded() + { + if (!this.textureUploaded) + { + if (this.bufferedImage != null) + { + if (this.textureLocation != null) + { + this.deleteGlTexture(); + } + + TextureUtil.uploadTextureImage(super.getGlTextureId(), this.bufferedImage); + this.textureUploaded = true; + } + } + } + + @Override + public int getGlTextureId() + { + this.checkTextureUploaded(); + return super.getGlTextureId(); + } + + public void setBufferedImage(BufferedImage p_147641_1_) + { + this.bufferedImage = p_147641_1_; + } + + @Override + public void loadTexture(IResourceManager p_110551_1_) + { + try + { + if (this.bufferedImage == null && this.textureLocation != null) + { + super.loadTexture(p_110551_1_); + } + } catch (Exception e) + { + e.printStackTrace(); + } + + if (this.imageThread == null) + { + if (this.field_152434_e != null && this.field_152434_e.isFile()) + { + GalacticraftCore.logger.debug("Loading http texture from local cache (%s)", this.field_152434_e); + + try + { + this.bufferedImage = ImageIO.read(this.field_152434_e); + + if (this.imageBuffer != null) + { + this.setBufferedImage(this.imageBuffer.parseUserSkin(this.bufferedImage)); + } + } catch (IOException ioexception) + { + logger.error("Couldn\'t load skin " + this.field_152434_e, ioexception); + this.func_152433_a(); + } + } else + { + this.func_152433_a(); + } + } + } + + protected void func_152433_a() + { + this.imageThread = new Thread("Texture Downloader #" + threadDownloadCounter.incrementAndGet()) + { + + @Override + public void run() + { + HttpURLConnection httpurlconnection = null; + GalacticraftCore.logger.debug("Downloading http texture from %s to %s", ThreadDownloadImageDataGC.this.imageUrl, ThreadDownloadImageDataGC.this.field_152434_e); + + try + { + httpurlconnection = (HttpURLConnection) (new URL(ThreadDownloadImageDataGC.this.imageUrl)).openConnection(); + httpurlconnection.setDoInput(true); + httpurlconnection.setDoOutput(false); + httpurlconnection.connect(); + + if (httpurlconnection.getResponseCode() / 100 == 2) + { + BufferedImage bufferedimage; + + if (ThreadDownloadImageDataGC.this.field_152434_e != null) + { + FileUtils.copyInputStreamToFile(httpurlconnection.getInputStream(), ThreadDownloadImageDataGC.this.field_152434_e); + bufferedimage = ImageIO.read(ThreadDownloadImageDataGC.this.field_152434_e); + } else + { + bufferedimage = ImageIO.read(httpurlconnection.getInputStream()); + } + + if (ThreadDownloadImageDataGC.this.imageBuffer != null) + { + bufferedimage = ThreadDownloadImageDataGC.this.imageBuffer.parseUserSkin(bufferedimage); + } + + ThreadDownloadImageDataGC.this.setBufferedImage(bufferedimage); + return; + } + } catch (Exception exception) + { + ThreadDownloadImageDataGC.logger.error("Couldn\'t download http texture", exception); + return; + } finally + { + if (httpurlconnection != null) + { + httpurlconnection.disconnect(); + } + } + } + }; + this.imageThread.setDaemon(true); + this.imageThread.start(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderAlienVillager.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderAlienVillager.java new file mode 100644 index 00000000..803bc7ce --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderAlienVillager.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelAlienVillager; +import micdoodle8.mods.galacticraft.core.entities.EntityAlienVillager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderAlienVillager extends RenderLiving +{ + + private static final ResourceLocation villagerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/villager.png"); + private boolean texSwitch; + + protected ModelAlienVillager villagerModel; + + public RenderAlienVillager(RenderManager manager) + { + super(manager, new ModelAlienVillager(0.0F), 0.5F); + this.villagerModel = (ModelAlienVillager) this.mainModel; + } + + @Override + protected void preRenderCallback(EntityAlienVillager villager, float par2) + { + float f1 = 0.9375F; + + if (villager.getGrowingAge() < 0) + { + f1 = (float) (f1 * 0.5D); + this.shadowSize = 0.25F; + } else + { + this.shadowSize = 0.5F; + } + + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + + GL11.glScalef(f1, f1, f1); + } + + @Override + protected ResourceLocation getEntityTexture(EntityAlienVillager par1Entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderAlienVillager.villagerTexture; + } + + @Override + public void doRender(EntityAlienVillager villager, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(villager, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(villager, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderBuggy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderBuggy.java new file mode 100644 index 00000000..050c4487 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderBuggy.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderBuggy extends Render +{ + + private OBJModel.OBJBakedModel mainModel; + private OBJModel.OBJBakedModel radarDish; + private OBJModel.OBJBakedModel wheelLeftCover; + private OBJModel.OBJBakedModel wheelRight; + private OBJModel.OBJBakedModel wheelLeft; + private OBJModel.OBJBakedModel wheelRightCover; + private OBJModel.OBJBakedModel cargoLeft; + private OBJModel.OBJBakedModel cargoMid; + private OBJModel.OBJBakedModel cargoRight; + + private void updateModels() + { + if (this.mainModel == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(Constants.ASSET_PREFIX, "buggy.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + this.mainModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("MainBody"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.radarDish = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("RadarDish_Dish"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.wheelLeftCover = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Wheel_Left_Cover"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.wheelRight = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Wheel_Right"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.wheelLeft = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Wheel_Left"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.wheelRightCover = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Wheel_Right_Cover"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.cargoLeft = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("CargoLeft"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.cargoMid = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("CargoMid"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.cargoRight = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("CargoRight"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + public RenderBuggy(RenderManager manager) + { + super(manager); + this.shadowSize = 1.0F; + } + + @Override + protected ResourceLocation getEntityTexture(EntityBuggy entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityBuggy entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.scale(1.0F, 1.0F, 1.0F); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-pitch, 0.0F, 0.0F, 1.0F); + GlStateManager.scale(0.41F, 0.41F, 0.41F); + + this.updateModels(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + // Front wheels + GlStateManager.pushMatrix(); + float dZ = -2.727F; + float dY = 0.976F; + float dX = 1.25F; + float rotation = entity.wheelRotationX; + GlStateManager.translate(dX, dY, dZ); + GlStateManager.rotate(entity.wheelRotationZ, 0, 1, 0); + ClientUtil.drawBakedModel(this.wheelRightCover); + GlStateManager.rotate(rotation, 1, 0, 0); + ClientUtil.drawBakedModel(this.wheelRight); + GlStateManager.popMatrix(); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-dX, dY, dZ); + GlStateManager.rotate(entity.wheelRotationZ, 0, 1, 0); + ClientUtil.drawBakedModel(this.wheelLeftCover); + GlStateManager.rotate(rotation, 1, 0, 0); + ClientUtil.drawBakedModel(this.wheelLeft); + GlStateManager.popMatrix(); + + // Back wheels + GlStateManager.pushMatrix(); + dX = 1.9F; + dZ = -dZ; + GlStateManager.translate(dX, dY, dZ); + GlStateManager.rotate(-entity.wheelRotationZ, 0, 1, 0); + GlStateManager.rotate(rotation, 1, 0, 0); + ClientUtil.drawBakedModel(this.wheelRight); + GlStateManager.popMatrix(); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-dX, dY, dZ); + GlStateManager.rotate(-entity.wheelRotationZ, 0, 1, 0); + GlStateManager.rotate(rotation, 1, 0, 0); + ClientUtil.drawBakedModel(this.wheelLeft); + GlStateManager.popMatrix(); + + ClientUtil.drawBakedModel(this.mainModel); + + // Radar Dish + GlStateManager.pushMatrix(); + GlStateManager.translate(-1.178F, 4.1F, -2.397F); + int ticks = entity.ticksExisted + entity.getEntityId() * 10000; + GlStateManager.rotate((float) Math.sin(ticks * 0.05) * 50.0F, 1, 0, 0); + GlStateManager.rotate((float) Math.cos(ticks * 0.1) * 50.0F, 0, 0, 1); + ClientUtil.drawBakedModel(this.radarDish); + GlStateManager.popMatrix(); + + if (entity.buggyType > 0) + { + ClientUtil.drawBakedModel(this.cargoLeft); + + if (entity.buggyType > 1) + { + ClientUtil.drawBakedModel(this.cargoMid); + + if (entity.buggyType > 2) + { + ClientUtil.drawBakedModel(this.cargoRight); + } + } + } + + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityBuggy buggy, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = buggy.getEntityBoundingBox().grow(2D, 1D, 2D); + return buggy.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEntityFake.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEntityFake.java new file mode 100644 index 00000000..0d759035 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEntityFake.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEntityFake extends Render +{ + + public RenderEntityFake(RenderManager manager) + { + super(manager); + } + + @Override + protected ResourceLocation getEntityTexture(EntityCelestialFake par1Entity) + { + return null; + } + + @Override + public void doRender(EntityCelestialFake par1Entity, double par2, double par4, double par6, float par8, float par9) + { + } + + @Override + public boolean shouldRender(EntityCelestialFake lander, ICamera camera, double camX, double camY, double camZ) + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedCreeper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedCreeper.java new file mode 100644 index 00000000..0a871204 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedCreeper.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerEvolvedCreeperCharge; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedCreeper extends RenderLiving +{ + + private static final ResourceLocation creeperTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/creeper.png"); + private boolean texSwitch; + + public RenderEvolvedCreeper(RenderManager manager) + { + super(manager, new ModelEvolvedCreeper(), 0.5F); + this.addLayer(new LayerEvolvedCreeperCharge(this)); + } + + @Override + protected void preRenderCallback(EntityEvolvedCreeper entity, float partialTicks) + { + float f = entity.getCreeperFlashIntensity(partialTicks); + float f1 = 1.0F + MathHelper.sin(f * 100.0F) * f * 0.01F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + f = f * f; + f = f * f; + float f2 = (1.0F + f * 0.4F) * f1; + float f3 = (1.0F + f * 0.1F) / f1; + GlStateManager.scale(0.2F + f2, 0.2F + f3, 0.2F + f2); + + if (this.texSwitch) + { + GlStateManager.translate(0.0F, -0.03F, 0.0F); + OverlaySensorGlasses.preRenderMobs(); + } + GlStateManager.translate(0.0F, 0.125F, 0.0F); + } + + @Override + protected int getColorMultiplier(EntityEvolvedCreeper entity, float lightBrightness, float partialTicks) + { + float f = entity.getCreeperFlashIntensity(partialTicks); + + if ((int) (f * 10.0F) % 2 == 0) + { + return 0; + } else + { + int i = (int) (f * 0.2F * 255.0F); + i = MathHelper.clamp(i, 0, 255); + return i << 24 | 16777215; + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedCreeper entity) + { + return this.texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedCreeper.creeperTexture; + } + + @Override + public void doRender(EntityEvolvedCreeper entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedEnderman.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedEnderman.java new file mode 100644 index 00000000..4bad30f3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedEnderman.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerEvolvedEndermanEyes; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerEvolvedEndermanHeldBlock; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedEnderman extends RenderLiving +{ + + private static final ResourceLocation endermanTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/evolved_enderman.png"); + private ModelEvolvedEnderman endermanModel; + private Random rnd = new Random(); + private boolean texSwitch; + + public RenderEvolvedEnderman(RenderManager manager) + { + super(manager, new ModelEvolvedEnderman(), 0.5F); + this.endermanModel = (ModelEvolvedEnderman) super.mainModel; + this.addLayer(new LayerEvolvedEndermanEyes(this)); + this.addLayer(new LayerEvolvedEndermanHeldBlock(this)); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedEnderman entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedEnderman.endermanTexture; + } + + @Override + public void doRender(EntityEvolvedEnderman entity, double x, double y, double z, float entityYaw, float partialTicks) + { + IBlockState iblockstate = entity.getHeldBlockState(); + this.endermanModel.isCarrying = iblockstate != null; + this.endermanModel.isAttacking = entity.isScreaming(); + + if (entity.isScreaming()) + { + double d3 = 0.02D; + x += this.rnd.nextGaussian() * d3; + z += this.rnd.nextGaussian() * d3; + } + super.doRender(entity, x, y, z, entityYaw, partialTicks); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void preRenderCallback(EntityEvolvedEnderman entity, float partialTickTime) + { + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeleton.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeleton.java new file mode 100644 index 00000000..7c1f89e7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeleton.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import net.minecraft.client.model.ModelSkeleton; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderBiped; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedSkeleton extends RenderBiped +{ + + private static final ResourceLocation skeletonTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/skeleton.png"); + private static final ResourceLocation powerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/power.png"); + + private final ModelEvolvedSkeleton model = new ModelEvolvedSkeleton(0.2F); + private boolean texSwitch; + + public RenderEvolvedSkeleton(RenderManager manager) + { + super(manager, new ModelEvolvedSkeleton(), 0.6F); + this.addLayer(new LayerHeldItem(this)); + this.addLayer(new LayerBipedArmor(this) + { + + @Override + protected void initArmor() + { + this.modelLeggings = new ModelSkeleton(0.5F, true); + this.modelArmor = new ModelSkeleton(1.0F, true); + } + }); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedSkeleton par1Entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedSkeleton.skeletonTexture; + } + + @Override + protected void preRenderCallback(EntityEvolvedSkeleton par1EntityLiving, float par2) + { + GL11.glScalef(1.2F, 1.2F, 1.2F); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntityEvolvedSkeleton entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void applyRotations(EntityEvolvedSkeleton skellie, float pitch, float yaw, float partialTicks) + { + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GL11.glTranslatef(0F, -skellie.height * 0.55F, 0F); + GL11.glRotatef(skellie.getTumbleAngle(partialTicks), skellie.getTumbleAxisX(), 0F, skellie.getTumbleAxisZ()); + GL11.glTranslatef(0F, skellie.height * 0.55F, 0F); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + super.applyRotations(skellie, pitch, yaw, partialTicks); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeletonBoss.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeletonBoss.java new file mode 100644 index 00000000..9a2ad445 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSkeletonBoss.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerHeldItemEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedSkeletonBoss extends RenderLiving +{ + + private static final ResourceLocation skeletonBossTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/skeletonboss.png"); + + public RenderEvolvedSkeletonBoss(RenderManager manager) + { + super(manager, new ModelEvolvedSkeletonBoss(), 0.9F); + this.addLayer(new LayerHeldItemEvolvedSkeletonBoss(this)); + } + + @Override + protected ResourceLocation getEntityTexture(EntitySkeletonBoss entity) + { + return RenderEvolvedSkeletonBoss.skeletonBossTexture; + } + + @Override + protected void preRenderCallback(EntitySkeletonBoss entity, float partialTicks) + { + GlStateManager.scale(1.2F, 1.2F, 1.2F); + GlStateManager.rotate((float) (Math.pow(entity.deathTicks, 2) / 5.0F + (Math.pow(entity.deathTicks, 2) / 5.0F - Math.pow(entity.deathTicks - 1, 2) / 5.0F) * partialTicks), 0.0F, 1.0F, 0.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSpider.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSpider.java new file mode 100644 index 00000000..1a427429 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedSpider.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedSpider extends RenderLiving +{ + + private static final ResourceLocation spiderTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/spider.png"); + private boolean texSwitch; + + public RenderEvolvedSpider(RenderManager manager) + { + super(manager, new ModelEvolvedSpider(), 1.0F); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedSpider par1Entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedSpider.spiderTexture; + } + + @Override + protected void preRenderCallback(EntityEvolvedSpider par1EntityLiving, float par2) + { + GL11.glScalef(1.2F, 1.2F, 1.2F); + if (texSwitch) + { + GL11.glTranslatef(0.0F, -0.03F, 0.0F); + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntityEvolvedSpider entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected float getDeathMaxRotation(EntityEvolvedSpider par1EntityLiving) + { + return 180.0F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedWitch.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedWitch.java new file mode 100644 index 00000000..cc238caa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedWitch.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedWitch; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerHeldItemEvolvedWitch; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedWitch; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedWitch extends RenderLiving +{ + + private static final ResourceLocation witchTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/evolved_witch.png"); + private boolean texSwitch; + + public RenderEvolvedWitch(RenderManager manager) + { + super(manager, new ModelEvolvedWitch(), 0.5F); + this.addLayer(new LayerHeldItemEvolvedWitch(this)); + } + + @Override + public void transformHeldFull3DItemLayer() + { + GlStateManager.translate(0.0F, 0.1875F, 0.0F); + } + + @Override + public void doRender(EntityEvolvedWitch entity, double x, double y, double z, float entityYaw, float partialTicks) + { + ((ModelEvolvedWitch) this.mainModel).holdingItem = entity.getHeldItemMainhand() != null; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void preRenderCallback(EntityEvolvedWitch entity, float partialTickTime) + { + float f1 = 0.9375F; + GlStateManager.scale(f1, f1, f1); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedWitch entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedWitch.witchTexture; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedZombie.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedZombie.java new file mode 100644 index 00000000..56ca3ace --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderEvolvedZombie.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelZombie; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderBiped; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderEvolvedZombie extends RenderBiped +{ + + private static final ResourceLocation zombieTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/zombie.png"); + private static final ResourceLocation powerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/power.png"); + + private final ModelBase model = new ModelEvolvedZombie(0.2F, false, true); + private boolean texSwitch; + + public RenderEvolvedZombie(RenderManager manager) + { + super(manager, new ModelEvolvedZombie(true), 0.5F); + LayerRenderer layerrenderer = (LayerRenderer) this.layerRenderers.get(0); + this.addLayer(new LayerHeldItem(this)); + LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this) + { + + @Override + protected void initArmor() + { + this.modelLeggings = new ModelZombie(0.5F, true); + this.modelArmor = new ModelZombie(1.0F, true); + } + }; + this.addLayer(layerbipedarmor); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEvolvedZombie par1Entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderEvolvedZombie.zombieTexture; + } + + @Override + protected void preRenderCallback(EntityEvolvedZombie zombie, float par2) + { + GL11.glScalef(1.2F, 1.2F, 1.2F); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntityEvolvedZombie entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void applyRotations(EntityEvolvedZombie zombie, float pitch, float yaw, float partialTicks) + { + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GL11.glTranslatef(0F, -zombie.height * 0.55F, 0F); + GL11.glRotatef(zombie.getTumbleAngle(partialTicks), zombie.getTumbleAxisX(), 0F, zombie.getTumbleAxisZ()); + GL11.glTranslatef(0F, zombie.height * 0.55F, 0F); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + super.applyRotations(zombie, pitch, yaw, partialTicks); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderFlag.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderFlag.java new file mode 100644 index 00000000..3fcc375c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderFlag.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelFlag; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderFlag extends Render +{ + + public static ResourceLocation flagTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/flag.png"); + + protected ModelFlag modelFlag; + + public RenderFlag(RenderManager manager) + { + super(manager); + this.shadowSize = 1F; + this.modelFlag = new ModelFlag(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityFlag entity) + { + return RenderFlag.flagTexture; + } + + @Override + public void doRender(EntityFlag entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + long seed = entity.getEntityId() * 493286711L; + seed = seed * seed * 4392167121L + seed * 98761L; + float seedX = (((seed >> 16 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + float seedY = (((seed >> 20 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + float seedZ = (((seed >> 24 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + GlStateManager.translate(seedX, seedY + 1.5F, seedZ); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entity.getFacingAngle(), 0.0F, 1.0F, 0.0F); + this.bindEntityTexture(entity); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + this.modelFlag.render(entity, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + GlStateManager.popMatrix(); + } + + @Override + public boolean shouldRender(EntityFlag lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(1D, 2D, 1D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderLander.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderLander.java new file mode 100644 index 00000000..e59be20d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderLander.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelLander; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderLander extends Render +{ + + private static final ResourceLocation landerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/lander.png"); + + protected ModelLander landerModel; + + public RenderLander(RenderManager manager) + { + super(manager); + this.shadowSize = 2F; + this.landerModel = new ModelLander(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityLander par1Entity) + { + return RenderLander.landerTexture; + } + + @Override + public void doRender(EntityLander lander, double par2, double par4, double par6, float par8, float par9) + { + GL11.glPushMatrix(); + final float var24 = lander.prevRotationPitch + (lander.rotationPitch - lander.prevRotationPitch) * par9; + GL11.glTranslatef((float) par2, (float) par4 + 1.55F, (float) par6); + GL11.glRotatef(180.0F - par8, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var24, 0.0F, 0.0F, 1.0F); + + float f6 = lander.timeSinceHit - par9; + float f7 = lander.currentDamage - par9; + + if (f7 < 0.0F) + { + f7 = 0.0F; + } + + if (f6 > 0.0F) + { + GL11.glRotatef((float) Math.sin(f6) * 0.2F * f6 * f7 / 25.0F, 1.0F, 0.0F, 0.0F); + } + + this.bindEntityTexture(lander); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.landerModel.render(lander, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + GL11.glPopMatrix(); + } + + @Override + public boolean shouldRender(EntityLander lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(2D, 1D, 2D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteor.java new file mode 100644 index 00000000..93cd5bd7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteor.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelMeteor; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderMeteor extends Render +{ + + private static final ResourceLocation meteorTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/meteor.png"); + + private final ModelMeteor modelMeteor; + + public RenderMeteor(RenderManager manager) + { + super(manager); + this.shadowSize = 1F; + this.modelMeteor = new ModelMeteor(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityMeteor par1Entity) + { + return RenderMeteor.meteorTexture; + } + + @Override + public void doRender(EntityMeteor meteor, double par2, double par4, double par6, float par8, float par9) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + GL11.glRotatef(par8, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(par8, 1.0F, 0.0F, 0.0F); + final float f = meteor.getSize(); + GL11.glScalef(f / 2, f / 2, f / 2); + this.bindEntityTexture(meteor); + this.modelMeteor.render(meteor, 0.0F, 0.0F, -0.5F, 0.0F, 0.0F, 0.1F); + GL11.glPopMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteorChunk.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteorChunk.java new file mode 100644 index 00000000..28b67119 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderMeteorChunk.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelMeteorChunk; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; + +public class RenderMeteorChunk extends Render +{ + + private static final ResourceLocation meteorChunkTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/meteor_chunk.png"); + private static final ResourceLocation meteorChunkHotTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/meteor_chunk_hot.png"); + private final ModelMeteorChunk modelMeteor; + + public RenderMeteorChunk(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 0.1F; + this.modelMeteor = new ModelMeteorChunk(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityMeteorChunk entity) + { + if (entity.isHot()) + { + return RenderMeteorChunk.meteorChunkHotTexture; + } else + { + return RenderMeteorChunk.meteorChunkTexture; + } + } + + @Override + public void doRender(EntityMeteorChunk entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + final float pitch = entity.rotationPitch; + final float yaw = entity.rotationYaw; + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.scale(0.3F, 0.3F, 0.3F); + GlStateManager.rotate(yaw, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(pitch, 0.0F, 0.0F, 1.0F); + this.bindEntityTexture(entity); + this.modelMeteor.render(entity, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderParaChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderParaChest.java new file mode 100644 index 00000000..72edfdd4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderParaChest.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.ModelParaChest; +import micdoodle8.mods.galacticraft.core.entities.EntityParachest; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderParaChest extends Render +{ + + private static final ResourceLocation[] textures = + {new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/plain.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/black.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/blue.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/lime.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/brown.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/darkblue.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/darkgray.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/darkgreen.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/gray.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/magenta.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/orange.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/pink.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/purple.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/red.png"), + new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/teal.png"), new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/yellow.png")}; + public static final ResourceLocation parachestTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachest.png"); + + private final ModelParaChest chestModel; + + public RenderParaChest(RenderManager manager) + { + super(manager); + this.shadowSize = 1F; + this.chestModel = new ModelParaChest(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityParachest entity) + { + return RenderParaChest.textures[ItemParaChute.getParachuteDamageValueFromDyeEnum(entity.color)]; + } + + @Override + public void doRender(EntityParachest entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) x - 0.5F, (float) y, (float) z); + + this.bindEntityTexture(entity); + + if (!entity.isDead) + { + this.chestModel.renderAll(); + } + + GL11.glPopMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderPlayerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderPlayerGC.java new file mode 100644 index 00000000..f22b982f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderPlayerGC.java @@ -0,0 +1,362 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import java.lang.reflect.Field; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerArmorBase; +import net.minecraft.client.renderer.entity.layers.LayerCustomHead; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerFrequencyModule; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerHeldItemGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerOxygenGear; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerOxygenMask; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerOxygenParachute; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerOxygenTanks; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerShield; +import micdoodle8.mods.galacticraft.core.client.render.entities.layer.LayerThermalPadding; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; + +import org.lwjgl.opengl.GL11; + +/** + * This renders the thermal armor (unless RenderPlayerAPI is installed). The + * thermal armor render is done after the corresponding body part of the player + * is drawn. This ALSO patches RenderPlayer so that it uses ModelPlayerGC in + * place of ModelPlayer to draw the player.

Finally, this also adds a hook + * into applyRotations so as to fire a RotatePlayerEvent - used by the Cryogenic + * Chamber + * + * @author User + */ +public class RenderPlayerGC extends RenderPlayer +{ + + public static ResourceLocation thermalPaddingTexture0; + public static ResourceLocation thermalPaddingTexture1; + public static ResourceLocation thermalPaddingTexture1_T2; + public static ResourceLocation heatShieldTexture; + public static boolean flagThermalOverride = false; + private static Boolean isSmartRenderLoaded = null; + + public RenderPlayerGC() + { + this(false); + } + + public RenderPlayerGC(boolean smallArms) + { + super(FMLClientHandler.instance().getClient().getRenderManager(), smallArms); + this.mainModel = new ModelPlayerGC(0.0F, smallArms); + this.addGCLayers(); + } + + private void addGCLayers() + { + Field f1 = null; + Field f2 = null; + Field f3 = null; + try + { + f1 = LayerArmorBase.class.getDeclaredField(GCCoreUtil.isDeobfuscated() ? "renderer" : "field_177190_a"); + f1.setAccessible(true); + } catch (Exception ignore) + {} + // The following code removes the vanilla skull and item layer renderers + // and replaces them with the Galacticraft ones + // Also updates all armor layers (including layers added by other mods) + // to reflect GC model limb positioning + int itemLayerIndex = -1; + int skullLayerIndex = -1; + for (int i = 0; i < this.layerRenderers.size(); i++) + { + LayerRenderer layer = this.layerRenderers.get(i); + if (layer instanceof LayerHeldItem) + { + itemLayerIndex = i; + } + else if (layer instanceof LayerArmorBase) + { + if (f1 != null) + { + try + { + f1.set(layer, this); + } catch (Exception ignore) + {} + } + } + else if (layer instanceof LayerCustomHead) + { + skullLayerIndex = i; + } + } + if (skullLayerIndex >= 0) + { + this.setLayer(skullLayerIndex, new LayerCustomHead(this.getMainModel().bipedHead)); + } + if (itemLayerIndex >= 0 && !ConfigManagerCore.disableVehicleCameraChanges) + { + this.setLayer(itemLayerIndex, new LayerHeldItemGC(this)); + } + + this.addLayer(new LayerOxygenTanks(this)); + this.addLayer(new LayerOxygenGear(this)); + this.addLayer(new LayerOxygenMask(this)); + this.addLayer(new LayerOxygenParachute(this)); + this.addLayer(new LayerFrequencyModule(this)); + + this.addLayer(new LayerThermalPadding(this)); + + RenderPlayerGC.thermalPaddingTexture0 = new ResourceLocation("galacticraftplanets", "textures/misc/thermal_padding_0.png"); + RenderPlayerGC.thermalPaddingTexture1 = new ResourceLocation("galacticraftplanets", "textures/misc/thermal_padding_1.png"); + RenderPlayerGC.thermalPaddingTexture1_T2 = new ResourceLocation("galacticraftplanets", "textures/misc/thermal_padding_t2_1.png"); + RenderPlayerGC.heatShieldTexture = new ResourceLocation("galacticraftplanets", "textures/misc/shield.png"); + + this.addLayer(new LayerShield(this)); + } + + private > void setLayer(int index, U layer) + { + this.layerRenderers.set(index, (LayerRenderer) layer); + } + + public RenderPlayerGC(RenderPlayer old, boolean smallArms) + { + super(FMLClientHandler.instance().getClient().getRenderManager(), smallArms); + this.mainModel = new ModelPlayerGC(0.0F, smallArms); + + // Preserve any layers added by other mods, for example + // WearableBackpacks + Class clazz = old.getClass().getSuperclass(); + Field f = null; + do + { + try + { + f = clazz.getDeclaredField(GCCoreUtil.isDeobfuscated() ? "layerRenderers" : "field_177097_h"); + f.setAccessible(true); + } catch (Exception ignore) + {} + clazz = clazz.getSuperclass(); + } while (f == null && clazz != null); + if (f != null) + try + { + List> layers = (List>) f.get(old); + if (layers.size() == 0) + { + // Specifically fix for compatibility with MetaMorph's + // non-standard "RenderSubPlayer" class + try + { + Field g = old.getClass().getDeclaredField("original"); + old = (RenderPlayer) g.get(old); + layers = (List>) f.get(old); + } catch (Exception ignore) + {} + } + if (layers.size() > 0) + { + for (LayerRenderer oldLayer : layers) + { + if (this.hasNoLayer(oldLayer.getClass())) + { + LayerRenderer newInstance = null; + try + { + newInstance = oldLayer.getClass().getConstructor(RenderLivingBase.class).newInstance(this); + } catch (Exception ignore) + {} + if (newInstance == null) + { + try + { + newInstance = oldLayer.getClass().getConstructor(RenderPlayer.class).newInstance(this); + } catch (Exception ignore) + {} + } + if (newInstance == null) + { + try + { + newInstance = oldLayer.getClass().getConstructor(boolean.class, ModelPlayer.class).newInstance(smallArms, this.mainModel); + } catch (Exception ignore) + {} + } + if (newInstance != null) + { + oldLayer = newInstance; + } + this.addLayer(oldLayer); + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + + this.addGCLayers(); + } + + private boolean hasNoLayer(Class test) + { + for (LayerRenderer oldLayer : this.layerRenderers) + { + if (oldLayer.getClass() == test) + return false; + } + return true; + } + + @Override + protected void preRenderCallback(AbstractClientPlayer entitylivingbaseIn, float partialTickTime) + { + super.preRenderCallback(entitylivingbaseIn, partialTickTime); + + if (entitylivingbaseIn.isEntityAlive() && entitylivingbaseIn.isPlayerSleeping()) + { + RotatePlayerEvent event = new RotatePlayerEvent(entitylivingbaseIn); + MinecraftForge.EVENT_BUS.post(event); + + if (!event.vanillaOverride) + { + super.preRenderCallback(entitylivingbaseIn, partialTickTime); + } + else if (event.shouldRotate == null || event.shouldRotate) + { + entitylivingbaseIn.rotationYawHead = 0; + entitylivingbaseIn.prevRotationYawHead = 0; + GL11.glTranslatef(0.0F, 0.3F, 0.0F); + } + } + } + + @Override + protected void applyRotations(AbstractClientPlayer abstractClientPlayer, float par2, float par3, float par4) + { + if (abstractClientPlayer.isEntityAlive() && abstractClientPlayer.isPlayerSleeping()) + { + RotatePlayerEvent event = new RotatePlayerEvent(abstractClientPlayer); + MinecraftForge.EVENT_BUS.post(event); + + if (!event.vanillaOverride) + { + super.applyRotations(abstractClientPlayer, par2, par3, par4); + } + else if (event.shouldRotate == null) + { + GL11.glRotatef(abstractClientPlayer.getBedOrientationInDegrees(), 0.0F, 1.0F, 0.0F); + } + else if (event.shouldRotate) + { + float rotation = 0.0F; + + if (abstractClientPlayer.bedLocation != null) + { + IBlockState bed = abstractClientPlayer.world.getBlockState(abstractClientPlayer.bedLocation); + + if (bed.getBlock().isBed(bed, abstractClientPlayer.world, abstractClientPlayer.bedLocation, abstractClientPlayer)) + { + if (bed.getBlock() == GCBlocks.fakeBlock && bed.getValue(BlockMulti.MULTI_TYPE) == BlockMulti.EnumBlockMultiType.CRYO_CHAMBER) + { + TileEntity tile = event.getEntityPlayer().world.getTileEntity(abstractClientPlayer.bedLocation); + if (tile instanceof TileEntityMulti) + { + bed = event.getEntityPlayer().world.getBlockState(((TileEntityMulti) tile).mainBlockPosition); + } + } + + if (bed.getBlock() == MarsBlocks.machine && bed.getValue(BlockMachineMars.TYPE) == BlockMachineMars.EnumMachineType.CRYOGENIC_CHAMBER) + { + switch (bed.getValue(BlockMachineMars.FACING)) + { + case NORTH: + rotation = 0.0F; + break; + case EAST: + rotation = 270.0F; + break; + case SOUTH: + rotation = 180.0F; + break; + case WEST: + rotation = 90.0F; + break; + } + } + } + } + + GL11.glRotatef(rotation, 0.0F, 1.0F, 0.0F); + } + } + else + { + if (Minecraft.getMinecraft().gameSettings.thirdPersonView != 0) + { + final EntityPlayer player = abstractClientPlayer; + + if (player.getRidingEntity() instanceof ICameraZoomEntity) + { + Entity rocket = player.getRidingEntity(); + float rotateOffset = ((ICameraZoomEntity) rocket).getRotateOffset(); + if (rotateOffset > -10F) + { + GL11.glTranslatef(0, -rotateOffset, 0); + float anglePitch = rocket.prevRotationPitch; + float angleYaw = rocket.prevRotationYaw; + GL11.glRotatef(-angleYaw, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(anglePitch, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0, rotateOffset, 0); + } + } + } + super.applyRotations(abstractClientPlayer, par2, par3, par4); + } + } + + public static class RotatePlayerEvent extends PlayerEvent + { + + public Boolean shouldRotate = null; + public boolean vanillaOverride = false; + + public RotatePlayerEvent(AbstractClientPlayer player) + { + super(player); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderSchematic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderSchematic.java new file mode 100644 index 00000000..bcd0e074 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderSchematic.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.EntityHanging; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSchematic extends Render +{ + + public RenderSchematic(RenderManager manager) + { + super(manager); + } + + @Override + protected ResourceLocation getEntityTexture(EntityHangingSchematic entity) + { + return SchematicRegistry.getSchematicTexture(entity.schematic); + } + + @Override + public void doRender(EntityHangingSchematic entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.enableRescaleNormal(); + this.bindEntityTexture(entity); + float f = 0.0625F; + GlStateManager.scale(f, f, f); + this.renderPainting(entity, entity.getWidthPixels(), entity.getHeightPixels()); + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + private void renderPainting(EntityHangingSchematic painting, int width, int height) + { + float f = (float) (-width) / 2.0F; + float f1 = (float) (-height) / 2.0F; + float f2 = 0.5F; + float f3 = 0.75F; + float f4 = 0.8125F; + float f5 = 0.0F; + float f6 = 0.0625F; + float f7 = 0.75F; + float f8 = 0.8125F; + float f9 = 0.001953125F; + float f10 = 0.001953125F; + float f11 = 0.7519531F; + float f12 = 0.7519531F; + float f13 = 0.0F; + float f14 = 0.0625F; + + for (int i = 0; i < width / 16; ++i) + { + for (int j = 0; j < height / 16; ++j) + { + double a = f + (float) ((i + 1) * 16); + double b = f + (float) (i * 16); + double c = f1 + (float) ((j + 1) * 16); + double d = f1 + (float) (j * 16); + this.setLightmap(painting, (a + b) / 2.0F, (c + d) / 2.0F); + float f19 = (float) (width - i * 16) / 32.0F; + float f20 = (float) (width - (i + 1) * 16) / 32.0F; + float f21 = (float) (height - j * 16) / 32.0F; + float f22 = (float) (height - (j + 1) * 16) / 32.0F; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX_NORMAL); + worldrenderer.pos(a, d, (-f2)).tex(f20, f21).normal(0.0F, 0.0F, -1.0F).endVertex(); + worldrenderer.pos(b, d, (-f2)).tex(f19, f21).normal(0.0F, 0.0F, -1.0F).endVertex(); + worldrenderer.pos(b, c, (-f2)).tex(f19, f22).normal(0.0F, 0.0F, -1.0F).endVertex(); + worldrenderer.pos(a, c, (-f2)).tex(f20, f22).normal(0.0F, 0.0F, -1.0F).endVertex(); + worldrenderer.pos(a, c, f2).tex(f3, f5).normal(0.0F, 0.0F, 1.0F).endVertex(); + worldrenderer.pos(b, c, f2).tex(f4, f5).normal(0.0F, 0.0F, 1.0F).endVertex(); + worldrenderer.pos(b, d, f2).tex(f4, f6).normal(0.0F, 0.0F, 1.0F).endVertex(); + worldrenderer.pos(a, d, f2).tex(f3, f6).normal(0.0F, 0.0F, 1.0F).endVertex(); + worldrenderer.pos(a, c, (-f2)).tex(f7, f9).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos(b, c, (-f2)).tex(f8, f9).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos(b, c, f2).tex(f8, f10).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos(a, c, f2).tex(f7, f10).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldrenderer.pos(a, d, f2).tex(f7, f9).normal(0.0F, -1.0F, 0.0F).endVertex(); + worldrenderer.pos(b, d, f2).tex(f8, f9).normal(0.0F, -1.0F, 0.0F).endVertex(); + worldrenderer.pos(b, d, (-f2)).tex(f8, f10).normal(0.0F, -1.0F, 0.0F).endVertex(); + worldrenderer.pos(a, d, (-f2)).tex(f7, f10).normal(0.0F, -1.0F, 0.0F).endVertex(); + worldrenderer.pos(a, c, f2).tex(f12, f13).normal(-1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(a, d, f2).tex(f12, f14).normal(-1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(a, d, (-f2)).tex(f11, f14).normal(-1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(a, c, (-f2)).tex(f11, f13).normal(-1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(b, c, (-f2)).tex(f12, f13).normal(1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(b, d, (-f2)).tex(f12, f14).normal(1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(b, d, f2).tex(f11, f14).normal(1.0F, 0.0F, 0.0F).endVertex(); + worldrenderer.pos(b, c, f2).tex(f11, f13).normal(1.0F, 0.0F, 0.0F).endVertex(); + tessellator.draw(); + } + } + } + + private void setLightmap(EntityHanging painting, double p_77008_2_, double p_77008_3_) + { + int i = MathHelper.floor(painting.posX); + int j = MathHelper.floor(painting.posY + (double) (p_77008_3_ / 16.0F)); + int k = MathHelper.floor(painting.posZ); + EnumFacing enumfacing = painting.facingDirection; + + if (enumfacing == EnumFacing.NORTH) + { + i = MathHelper.floor(painting.posX + (double) (p_77008_2_ / 16.0F)); + } + + if (enumfacing == EnumFacing.WEST) + { + k = MathHelper.floor(painting.posZ - (double) (p_77008_2_ / 16.0F)); + } + + if (enumfacing == EnumFacing.SOUTH) + { + i = MathHelper.floor(painting.posX - (double) (p_77008_2_ / 16.0F)); + } + + if (enumfacing == EnumFacing.EAST) + { + k = MathHelper.floor(painting.posZ + (double) (p_77008_2_ / 16.0F)); + } + + int l = this.renderManager.world.getCombinedLight(new BlockPos(i, j, k), 0); + int i1 = l % 65536; + int j1 = l / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) i1, (float) j1); + GlStateManager.color(1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderTier1Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderTier1Rocket.java new file mode 100644 index 00000000..bf484b06 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/RenderTier1Rocket.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderTier1Rocket extends Render +{ + + private ResourceLocation spaceshipTexture; + + protected ModelBase modelSpaceship; + + public RenderTier1Rocket(RenderManager manager, ModelBase spaceshipModel, String textureDomain, String texture) + { + this(manager, new ResourceLocation(textureDomain, "textures/model/" + texture + ".png")); + this.modelSpaceship = spaceshipModel; + } + + private RenderTier1Rocket(RenderManager manager, ResourceLocation texture) + { + super(manager); + this.spaceshipTexture = texture; + this.shadowSize = 0.9F; + } + + @Override + protected ResourceLocation getEntityTexture(EntitySpaceshipBase par1Entity) + { + return this.spaceshipTexture; + } + + @Override + public void doRender(EntitySpaceshipBase entity, double par2, double par4, double par6, float par8, float par9) + { + GL11.glPushMatrix(); + final float var24 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * par9; + final float var25 = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * par9; + + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + GL11.glRotatef(180.0F - par8, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var24, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-var25, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, entity.getRenderOffsetY(), 0.0F); + final float var28 = entity.rollAmplitude - par9; + + if (var28 > 0.0F) + { + final float i = entity.getLaunched() ? (5 - MathHelper.floor(entity.timeUntilLaunch / 85)) / 10F : 0.3F; + GL11.glRotatef(MathHelper.sin(var28) * var28 * i * par9, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(MathHelper.sin(var28) * var28 * i * par9, 1.0F, 0.0F, 1.0F); + } + + this.bindEntityTexture(entity); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.modelSpaceship.render(entity, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + + GL11.glPopMatrix(); + } + + @Override + public boolean shouldRender(EntitySpaceshipBase rocket, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = rocket.getEntityBoundingBox().grow(0.6D, 1D, 0.6D); + + return rocket.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedCreeperCharge.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedCreeperCharge.java new file mode 100644 index 00000000..937fc6e5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedCreeperCharge.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEvolvedCreeperCharge implements LayerRenderer +{ + + private final RenderEvolvedCreeper render; + private final ModelEvolvedCreeper creeperModel = new ModelEvolvedCreeper(2.0F); + + public LayerEvolvedCreeperCharge(RenderEvolvedCreeper render) + { + this.render = render; + } + + @Override + public void doRenderLayer(EntityEvolvedCreeper entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entity.getPowered()) + { + boolean flag = entity.isInvisible(); + GlStateManager.depthMask(!flag); + this.render.bindTexture(new ResourceLocation("textures/entity/creeper/creeper_armor.png")); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + float f = entity.ticksExisted + partialTicks; + GlStateManager.translate(f * 0.01F, f * 0.01F, 0.0F); + GlStateManager.matrixMode(5888); + GlStateManager.enableBlend(); + float f1 = 0.5F; + GlStateManager.color(f1, f1, f1, 1.0F); + GlStateManager.disableLighting(); + GlStateManager.blendFunc(1, 1); + this.creeperModel.setModelAttributes(this.render.getMainModel()); + this.creeperModel.render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + GlStateManager.depthMask(flag); + } + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanEyes.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanEyes.java new file mode 100644 index 00000000..95ac873e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanEyes.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEvolvedEndermanEyes implements LayerRenderer +{ + + private static final ResourceLocation eyesTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/evolved_enderman_eyes.png"); + + private RenderEvolvedEnderman render; + + public LayerEvolvedEndermanEyes(RenderEvolvedEnderman render) + { + this.render = render; + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + @Override + public void doRenderLayer(EntityEvolvedEnderman entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.render.bindTexture(LayerEvolvedEndermanEyes.eyesTexture); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.blendFunc(1, 1); + GlStateManager.disableLighting(); + GlStateManager.depthMask(!entity.isInvisible()); + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F); + GlStateManager.enableLighting(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.render.getMainModel().render(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.render.setLightmap(entity); + GlStateManager.depthMask(true); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanHeldBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanHeldBlock.java new file mode 100644 index 00000000..4c8470d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerEvolvedEndermanHeldBlock.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEvolvedEndermanHeldBlock implements LayerRenderer +{ + + private RenderEvolvedEnderman render; + + public LayerEvolvedEndermanHeldBlock(RenderEvolvedEnderman render) + { + this.render = render; + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + @Override + public void doRenderLayer(EntityEvolvedEnderman entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + IBlockState iblockstate = entity.getHeldBlockState(); + + if (iblockstate != null) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.6875F, -0.75F); + GlStateManager.rotate(20.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(45.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.25F, 0.1875F, 0.25F); + float f7 = 0.5F; + GlStateManager.scale(-f7, -f7, f7); + int i = entity.getBrightnessForRender(); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.render.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + blockrendererdispatcher.renderBlockBrightness(iblockstate, 1.0F); + GlStateManager.popMatrix(); + GlStateManager.disableRescaleNormal(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerFrequencyModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerFrequencyModule.java new file mode 100644 index 00000000..a6c1dfed --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerFrequencyModule.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerFrequencyModule implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + private OBJModel.OBJBakedModel moduleModel; + private OBJModel.OBJBakedModel radarModel; + + public LayerFrequencyModule(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + } + + private void updateModels() + { + if (this.moduleModel == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(Constants.ASSET_PREFIX, "frequency_module.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + this.moduleModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.radarModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Radar"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean wearingModule = gearData.getFrequencyModule() != GCPlayerHandler.GEAR_NOT_PRESENT; + boolean wearingHelmet = gearData.getMask() != GCPlayerHandler.GEAR_NOT_PRESENT; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.playerTexture); + + if (wearingModule) + { + this.updateModels(); + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + GlStateManager.rotate(180, 1, 0, 0); + GlStateManager.pushMatrix(); + GlStateManager.rotate((float) (this.playerRenderer.getMainModel().bipedHeadwear.rotateAngleY * -Constants.RADIANS_TO_DEGREES), 0, 1, 0); + GlStateManager.rotate((float) (this.playerRenderer.getMainModel().bipedHeadwear.rotateAngleX * Constants.RADIANS_TO_DEGREES), 1, 0, 0); + GlStateManager.scale(0.3F, 0.3F, 0.3F); + + if (wearingHelmet) + { + GlStateManager.translate(-1.1F, player.isSneaking() ? 0.35F : 1.2F, 0); + } else + { + GlStateManager.translate(-0.9F, player.isSneaking() ? 0.1F : 0.9F, 0); + } + + ClientUtil.drawBakedModel(this.moduleModel); + GlStateManager.translate(0.0F, 1.3F, 0.0F); + GlStateManager.rotate((float) (Math.sin(player.ticksExisted * 0.05) * 50.0F), 1, 0, 0); + GlStateManager.rotate((float) (Math.cos(player.ticksExisted * 0.1) * 50.0F), 0, 1, 0); + ClientUtil.drawBakedModel(this.radarModel); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + } + } + } + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedSkeletonBoss.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedSkeletonBoss.java new file mode 100644 index 00000000..120080aa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedSkeletonBoss.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerHeldItemEvolvedSkeletonBoss implements LayerRenderer +{ + + private final RenderEvolvedSkeletonBoss renderer; + + public LayerHeldItemEvolvedSkeletonBoss(RenderEvolvedSkeletonBoss renderer) + { + this.renderer = renderer; + } + + @Override + public void doRenderLayer(EntitySkeletonBoss entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entity.throwTimer + entity.postThrowDelay == 0) + { + this.renderHeldItem(entity, ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND); + this.renderHeldItem(entity, ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND); + } + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + private void renderHeldItem(EntitySkeletonBoss entity, ItemCameraTransforms.TransformType type) + { + ItemStack bow = new ItemStack(Items.BOW); + + if (bow != null) + { + GlStateManager.pushMatrix(); + ((ModelEvolvedSkeletonBoss) this.renderer.getMainModel()).postRenderArm(0.0625F, type); + + if (type == ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND) + { + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.05F, 0.125F, -1.525F); + } else + { + GlStateManager.translate(0.025F, 1.525F, -0.125F); + } + + Minecraft.getMinecraft().getItemRenderer().renderItemSide(entity, bow, type, false); + GlStateManager.popMatrix(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedWitch.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedWitch.java new file mode 100644 index 00000000..03dc9e8e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemEvolvedWitch.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.client.model.ModelEvolvedWitch; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedWitch; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedWitch; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerHeldItemEvolvedWitch implements LayerRenderer +{ + + private RenderEvolvedWitch witchRenderer; + + public LayerHeldItemEvolvedWitch(RenderEvolvedWitch witchRenderer) + { + this.witchRenderer = witchRenderer; + } + + @Override + public void doRenderLayer(EntityEvolvedWitch entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + ItemStack itemstack = entity.getHeldItemMainhand(); + + if (!itemstack.isEmpty()) + { + GlStateManager.color(1.0F, 1.0F, 1.0F); + GlStateManager.pushMatrix(); + + if (this.witchRenderer.getMainModel().isChild) + { + GlStateManager.translate(0.0F, 0.625F, 0.0F); + GlStateManager.rotate(-20.0F, -1.0F, 0.0F, 0.0F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + } + + ((ModelEvolvedWitch) this.witchRenderer.getMainModel()).villagerNose.postRender(0.0625F); + GlStateManager.translate(-0.0625F, 0.53125F, 0.21875F); + Item item = itemstack.getItem(); + Minecraft mc = Minecraft.getMinecraft(); + + if (item == Items.BOW) + { + GlStateManager.translate(0.0F, 0.125F, -0.125F); + GlStateManager.rotate(-45.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.scale(0.625F, -0.625F, 0.625F); + GlStateManager.rotate(-100.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-20.0F, 0.0F, 1.0F, 0.0F); + } else if (item.isFull3D()) + { + if (item.shouldRotateAroundWhenRendering()) + { + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, -0.0625F, 0.0F); + } + + this.witchRenderer.transformHeldFull3DItemLayer(); + GlStateManager.translate(0.0625F, -0.125F, 0.0F); + GlStateManager.scale(0.625F, -0.625F, 0.625F); + GlStateManager.rotate(0.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(0.0F, 0.0F, 1.0F, 0.0F); + } else + { + GlStateManager.translate(0.1875F, 0.1875F, 0.0F); + GlStateManager.scale(0.875F, 0.875F, 0.875F); + GlStateManager.rotate(-20.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(-60.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-30.0F, 0.0F, 0.0F, 1.0F); + } + GlStateManager.rotate(-15.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(40.0F, 0.0F, 0.0F, 1.0F); + mc.getItemRenderer().renderItem(entity, itemstack, TransformType.THIRD_PERSON_RIGHT_HAND); + GlStateManager.popMatrix(); + } + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemGC.java new file mode 100644 index 00000000..25d2c3c4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerHeldItemGC.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHandSide; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerHeldItemGC implements LayerRenderer +{ + + protected final RenderLivingBase livingEntityRenderer; + + public LayerHeldItemGC(RenderLivingBase livingEntityRendererIn) + { + this.livingEntityRenderer = livingEntityRendererIn; + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (player.getRidingEntity() instanceof ICameraZoomEntity) + { + return; + } + boolean flag = player.getPrimaryHand() == EnumHandSide.RIGHT; + ItemStack itemstack = flag ? player.getHeldItemOffhand() : player.getHeldItemMainhand(); + ItemStack itemstack1 = flag ? player.getHeldItemMainhand() : player.getHeldItemOffhand(); + + if (!itemstack.isEmpty() || !itemstack1.isEmpty()) + { + GlStateManager.pushMatrix(); + + if (this.livingEntityRenderer.getMainModel().isChild) + { + float f = 0.5F; + GlStateManager.translate(0.0F, 0.75F, 0.0F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + } + + this.renderHeldItem(player, itemstack1, ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, EnumHandSide.RIGHT); + this.renderHeldItem(player, itemstack, ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, EnumHandSide.LEFT); + GlStateManager.popMatrix(); + } + } + + private void renderHeldItem(EntityLivingBase p_188358_1_, ItemStack p_188358_2_, ItemCameraTransforms.TransformType p_188358_3_, EnumHandSide handSide) + { + if (!p_188358_2_.isEmpty()) + { + GlStateManager.pushMatrix(); + + if (p_188358_1_.isSneaking()) + { + GlStateManager.translate(0.0F, 0.2F, 0.0F); + } + // Forge: moved this call down, fixes incorrect offset while + // sneaking. + ((ModelBiped) this.livingEntityRenderer.getMainModel()).postRenderArm(0.0625F, handSide); + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + boolean flag = handSide == EnumHandSide.LEFT; + GlStateManager.translate((float) (flag ? -1 : 1) / 16.0F, 0.125F, -0.625F); + Minecraft.getMinecraft().getItemRenderer().renderItemSide(p_188358_1_, p_188358_2_, p_188358_3_, flag); + GlStateManager.popMatrix(); + } + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenGear.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenGear.java new file mode 100644 index 00000000..434d294b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenGear.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerOxygenGear implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + public ModelRenderer[][] tubes = new ModelRenderer[2][7]; + + public LayerOxygenGear(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + float scaleFactor = 0.0F; + ModelPlayer modelPlayer = playerRendererIn.getMainModel(); + + this.tubes[0][0] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][0].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][0].setRotationPoint(2F, 3F, 5.8F); + this.tubes[0][0].setTextureSize(128, 64); + this.tubes[0][0].mirror = true; + this.tubes[0][1] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][1].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][1].setRotationPoint(2F, 2F, 6.8F); + this.tubes[0][1].setTextureSize(128, 64); + this.tubes[0][1].mirror = true; + this.tubes[0][2] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][2].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][2].setRotationPoint(2F, 1F, 6.8F); + this.tubes[0][2].setTextureSize(128, 64); + this.tubes[0][2].mirror = true; + this.tubes[0][3] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][3].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][3].setRotationPoint(2F, 0F, 6.8F); + this.tubes[0][3].setTextureSize(128, 64); + this.tubes[0][3].mirror = true; + this.tubes[0][4] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][4].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][4].setRotationPoint(2F, -1F, 6.8F); + this.tubes[0][4].setTextureSize(128, 64); + this.tubes[0][4].mirror = true; + this.tubes[0][5] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][5].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][5].setRotationPoint(2F, -2F, 5.8F); + this.tubes[0][5].setTextureSize(128, 64); + this.tubes[0][5].mirror = true; + this.tubes[0][6] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[0][6].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[0][6].setRotationPoint(2F, -3F, 4.8F); + this.tubes[0][6].setTextureSize(128, 64); + this.tubes[0][6].mirror = true; + + this.tubes[1][0] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][0].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][0].setRotationPoint(-2F, 3F, 5.8F); + this.tubes[1][0].setTextureSize(128, 64); + this.tubes[1][0].mirror = true; + this.tubes[1][1] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][1].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][1].setRotationPoint(-2F, 2F, 6.8F); + this.tubes[1][1].setTextureSize(128, 64); + this.tubes[1][1].mirror = true; + this.tubes[1][2] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][2].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][2].setRotationPoint(-2F, 1F, 6.8F); + this.tubes[1][2].setTextureSize(128, 64); + this.tubes[1][2].mirror = true; + this.tubes[1][3] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][3].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][3].setRotationPoint(-2F, 0F, 6.8F); + this.tubes[1][3].setTextureSize(128, 64); + this.tubes[1][3].mirror = true; + this.tubes[1][4] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][4].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][4].setRotationPoint(-2F, -1F, 6.8F); + this.tubes[1][4].setTextureSize(128, 64); + this.tubes[1][4].mirror = true; + this.tubes[1][5] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][5].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][5].setRotationPoint(-2F, -2F, 5.8F); + this.tubes[1][5].setTextureSize(128, 64); + this.tubes[1][5].mirror = true; + this.tubes[1][6] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.tubes[1][6].addBox(-0.5F, -0.5F, -0.5F, 1, 1, 1, scaleFactor); + this.tubes[1][6].setRotationPoint(-2F, -3F, 4.8F); + this.tubes[1][6].setTextureSize(128, 64); + this.tubes[1][6].mirror = true; + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean wearingGear = gearData.getGear() == Constants.GEAR_ID_OXYGEN_GEAR; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.playerTexture); + + if (wearingGear && !playerRenderer.getMainModel().isSneak) + { + for (int i = 0; i < 7; i++) + { + for (int k = 0; k < 2; k++) + { + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.tubes[k][i]); + + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.175F * (float) (k * 2 - 1), 0.0F, 0.0F); + GlStateManager.translate(0.0F, -0.0325F * (float) (i * 2 - 1), 0.0F); + GlStateManager.translate(0.0F, 0.0F, -0.0325F * (float) (Math.pow(i * 2 - 1, 2) * 0.05)); + GlStateManager.translate(0.0F, 0.2F, 0.0F); + GlStateManager.translate(0.0F, 0.0F, 0.2F); + + this.tubes[k][i].render(scale); + + GlStateManager.popMatrix(); + } + } + } + } + } + GlStateManager.color(1.0F, 1.0F, 1.0F); + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenMask.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenMask.java new file mode 100644 index 00000000..58b6ea75 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenMask.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class LayerOxygenMask implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + public ModelRenderer oxygenMask; + + public LayerOxygenMask(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + float scaleFactor = 1.0F; + ModelPlayer modelPlayer = playerRendererIn.getMainModel(); + + this.oxygenMask = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(128, 64); + this.oxygenMask.addBox(-8.0F, -16.0F, -8.0F, 16, 16, 16, scaleFactor); + this.oxygenMask.setRotationPoint(0.0F, 0.0F, 0.0F); + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean wearingMask = gearData.getMask() != GCPlayerHandler.GEAR_NOT_PRESENT; + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.oxygenMaskTexture); + + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedHeadwear, this.oxygenMask); + this.oxygenMask.rotationPointY = this.playerRenderer.getMainModel().bipedHeadwear.rotationPointY * 8.0F; + + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + + if (wearingMask) + { + GL11.glPushMatrix(); + GL11.glScalef(1.05F, 1.05F, 1.05F); + this.oxygenMask.render(scale); + GL11.glScalef(1F, 1F, 1F); + GL11.glPopMatrix(); + } + + GlStateManager.popMatrix(); + } + } + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenParachute.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenParachute.java new file mode 100644 index 00000000..2e1a541d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenParachute.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerOxygenParachute implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + public ModelRenderer[] parachute = new ModelRenderer[3]; + public ModelRenderer[] parachuteStrings = new ModelRenderer[4]; + + public LayerOxygenParachute(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + float scaleFactor = 0.0F; + ModelPlayer modelPlayer = playerRendererIn.getMainModel(); + + this.parachute[0] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(256, 256); + this.parachute[0].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, scaleFactor); + this.parachute[0].setRotationPoint(15.0F, 4.0F, 0.0F); + this.parachute[1] = new ModelRenderer(modelPlayer, 0, 42).setTextureSize(256, 256); + this.parachute[1].addBox(-20.0F, -45.0F, -20.0F, 40, 2, 40, scaleFactor); + this.parachute[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachute[2] = new ModelRenderer(modelPlayer, 0, 0).setTextureSize(256, 256); + this.parachute[2].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, scaleFactor); + this.parachute[2].setRotationPoint(11F, -11, 0.0F); + + this.parachuteStrings[0] = new ModelRenderer(modelPlayer, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[0].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, scaleFactor); + this.parachuteStrings[0].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[1] = new ModelRenderer(modelPlayer, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[1].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, scaleFactor); + this.parachuteStrings[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[2] = new ModelRenderer(modelPlayer, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[2].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, scaleFactor); + this.parachuteStrings[2].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[3] = new ModelRenderer(modelPlayer, 100, 0).setTextureSize(256, 256); + this.parachuteStrings[3].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, scaleFactor); + this.parachuteStrings[3].setRotationPoint(0.0F, 0.0F, 0.0F); + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean usingParachute = gearData.getParachute() != null; + + if (usingParachute) + { + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.playerTexture); + + this.parachute[0].rotateAngleZ = (float) (30F / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleZ = (float) -(30F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleZ = (float) (155F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].setRotationPoint(-9.0F, -7.0F, 2.0F); + this.parachuteStrings[1].rotateAngleZ = (float) (155F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].setRotationPoint(-9.0F, -7.0F, 2.0F); + this.parachuteStrings[2].rotateAngleZ = (float) -(155F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].setRotationPoint(9.0F, -7.0F, 2.0F); + this.parachuteStrings[3].rotateAngleZ = (float) -(155F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].setRotationPoint(9.0F, -7.0F, 2.0F); + + GlStateManager.pushMatrix(); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(gearData.getParachute()); + + this.parachute[0].render(scale); + this.parachute[1].render(scale); + this.parachute[2].render(scale); + + this.parachuteStrings[0].render(scale); + this.parachuteStrings[1].render(scale); + this.parachuteStrings[2].render(scale); + this.parachuteStrings[3].render(scale); + + GlStateManager.popMatrix(); + } + } + } + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenTanks.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenTanks.java new file mode 100644 index 00000000..120a3e33 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerOxygenTanks.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerOxygenTanks implements LayerRenderer +{ + + private final RenderPlayer playerRenderer; + public ModelRenderer[] greenOxygenTanks = new ModelRenderer[2]; + public ModelRenderer[] orangeOxygenTanks = new ModelRenderer[2]; + public ModelRenderer[] redOxygenTanks = new ModelRenderer[2]; + + public LayerOxygenTanks(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + float scaleFactor = 0.0F; + ModelPlayer modelPlayer = playerRendererIn.getMainModel(); + + this.greenOxygenTanks[0] = new ModelRenderer(modelPlayer, 4, 0).setTextureSize(128, 64); + this.greenOxygenTanks[0].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.greenOxygenTanks[0].setRotationPoint(2F, 2F, 3.8F); + this.greenOxygenTanks[0].mirror = true; + this.greenOxygenTanks[1] = new ModelRenderer(modelPlayer, 4, 0).setTextureSize(128, 64); + this.greenOxygenTanks[1].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.greenOxygenTanks[1].setRotationPoint(-2F, 2F, 3.8F); + this.greenOxygenTanks[1].mirror = true; + + this.orangeOxygenTanks[0] = new ModelRenderer(modelPlayer, 16, 0).setTextureSize(128, 64); + this.orangeOxygenTanks[0].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.orangeOxygenTanks[0].setRotationPoint(2F, 2F, 3.8F); + this.orangeOxygenTanks[0].mirror = true; + this.orangeOxygenTanks[1] = new ModelRenderer(modelPlayer, 16, 0).setTextureSize(128, 64); + this.orangeOxygenTanks[1].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.orangeOxygenTanks[1].setRotationPoint(-2F, 2F, 3.8F); + this.orangeOxygenTanks[1].mirror = true; + + this.redOxygenTanks[0] = new ModelRenderer(modelPlayer, 28, 0).setTextureSize(128, 64); + this.redOxygenTanks[0].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.redOxygenTanks[0].setRotationPoint(2F, 2F, 3.8F); + this.redOxygenTanks[0].mirror = true; + this.redOxygenTanks[1] = new ModelRenderer(modelPlayer, 28, 0).setTextureSize(128, 64); + this.redOxygenTanks[1].addBox(-1.5F, 0F, -1.5F, 3, 7, 3, scaleFactor); + this.redOxygenTanks[1].setRotationPoint(-2F, 2F, 3.8F); + this.redOxygenTanks[1].mirror = true; + } + + @Override + public void doRenderLayer(AbstractClientPlayer player, float f5, float f6, float partialTicks, float f8, float f2, float f7, float scale) + { + if (!player.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (gearData != null) + { + boolean wearingLeftTankGreen = gearData.getLeftTank() == Constants.GEAR_ID_OXYGEN_TANK_LIGHT; + boolean wearingLeftTankOrange = gearData.getLeftTank() == Constants.GEAR_ID_OXYGEN_TANK_MEDIUM; + boolean wearingLeftTankRed = gearData.getLeftTank() == Constants.GEAR_ID_OXYGEN_TANK_HEAVY || gearData.getLeftTank() == Constants.GEAR_ID_OXYGEN_TANK_INFINITE; + boolean wearingRightTankGreen = gearData.getRightTank() == Constants.GEAR_ID_OXYGEN_TANK_LIGHT; + boolean wearingRightTankOrange = gearData.getRightTank() == Constants.GEAR_ID_OXYGEN_TANK_MEDIUM; + boolean wearingRightTankRed = gearData.getRightTank() == Constants.GEAR_ID_OXYGEN_TANK_HEAVY || gearData.getRightTank() == Constants.GEAR_ID_OXYGEN_TANK_INFINITE; + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelPlayerGC.playerTexture); + + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.greenOxygenTanks[0]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.greenOxygenTanks[1]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.orangeOxygenTanks[0]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.orangeOxygenTanks[1]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.redOxygenTanks[0]); + ModelPlayer.copyModelAngles(this.playerRenderer.getMainModel().bipedBody, this.redOxygenTanks[1]); + + if (playerRenderer.getMainModel().isSneak) + { + this.greenOxygenTanks[0].rotationPointY = 2.0F; + this.greenOxygenTanks[1].rotationPointY = 2.0F; + this.greenOxygenTanks[0].rotationPointZ = 1.6F; + this.greenOxygenTanks[1].rotationPointZ = 1.6F; + + this.orangeOxygenTanks[0].rotationPointY = 2.0F; + this.orangeOxygenTanks[1].rotationPointY = 2.0F; + this.orangeOxygenTanks[0].rotationPointZ = 1.6F; + this.orangeOxygenTanks[1].rotationPointZ = 1.6F; + + this.redOxygenTanks[0].rotationPointY = 2.0F; + this.redOxygenTanks[1].rotationPointY = 2.0F; + this.redOxygenTanks[0].rotationPointZ = 1.6F; + this.redOxygenTanks[1].rotationPointZ = 1.6F; + } else + { + this.greenOxygenTanks[0].rotationPointY = 0.5F; + this.greenOxygenTanks[1].rotationPointY = 0.5F; + this.greenOxygenTanks[0].rotationPointZ = 0.5F; + this.greenOxygenTanks[1].rotationPointZ = 0.5F; + + this.orangeOxygenTanks[0].rotationPointY = 0.5F; + this.orangeOxygenTanks[1].rotationPointY = 0.5F; + this.orangeOxygenTanks[0].rotationPointZ = 0.5F; + this.orangeOxygenTanks[1].rotationPointZ = 0.5F; + + this.redOxygenTanks[0].rotationPointY = 0.5F; + this.redOxygenTanks[1].rotationPointY = 0.5F; + this.redOxygenTanks[0].rotationPointZ = 0.5F; + this.redOxygenTanks[1].rotationPointZ = 0.5F; + } + + for (int i = 0; i < 2; ++i) + { + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.175F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, 0.2F, 0.0F); + GlStateManager.translate(0.0F, 0.0F, 0.2F); + + if (wearingLeftTankRed) + { + this.redOxygenTanks[0].render(scale); + } + + if (wearingLeftTankOrange) + { + this.orangeOxygenTanks[0].render(scale); + } + + if (wearingLeftTankGreen) + { + this.greenOxygenTanks[0].render(scale); + } + + GlStateManager.popMatrix(); + + GlStateManager.pushMatrix(); + GlStateManager.translate(-0.175F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, 0.2F, 0.0F); + GlStateManager.translate(0.0F, 0.0F, 0.2F); + + if (wearingRightTankRed) + { + this.redOxygenTanks[1].render(scale); + } + + if (wearingRightTankOrange) + { + this.orangeOxygenTanks[1].render(scale); + } + + if (wearingRightTankGreen) + { + this.greenOxygenTanks[1].render(scale); + } + GlStateManager.color(1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + } + } + } + } + + @Override + public boolean shouldCombineTextures() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerShield.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerShield.java new file mode 100644 index 00000000..0559c346 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerShield.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import org.lwjgl.opengl.GL11; + +public class LayerShield implements LayerRenderer +{ + + private final RenderPlayer renderer; + private ModelBiped shieldModel; + + public LayerShield(RenderPlayer playerRendererIn) + { + this.renderer = playerRendererIn; + this.initModel(); + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + @Override + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float f2, float f3, float partialTicks, float f5, float f6, float f7, float scale) + { + if (!entitylivingbaseIn.isInvisible()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData((EntityPlayer) entitylivingbaseIn); + + if (gearData != null) + { + if (gearData.getShieldController() != GCPlayerHandler.GEAR_NOT_PRESENT) + { + this.shieldModel.setVisible(false); + this.shieldModel.bipedRightLeg.showModel = true; + this.shieldModel.bipedLeftLeg.showModel = true; + this.shieldModel.bipedBody.showModel = true; + this.shieldModel.bipedRightArm.showModel = true; + this.shieldModel.bipedLeftArm.showModel = true; + this.shieldModel.bipedHead.showModel = true; + this.shieldModel.bipedHeadwear.showModel = true; + this.shieldModel.setModelAttributes(this.renderer.getMainModel()); + this.shieldModel.setLivingAnimations(entitylivingbaseIn, f2, f3, partialTicks); + this.renderer.bindTexture(RenderPlayerGC.thermalPaddingTexture0); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + float f = (float) Math.sin((entitylivingbaseIn.ticksExisted + partialTicks) / 20.0F) * 5.0F; + GlStateManager.translate(0.0F, f * 0.01F, 0.0F); + GlStateManager.matrixMode(5888); + + GL11.glDisable(GL11.GL_LIGHTING); + Minecraft.getMinecraft().renderEngine.bindTexture(RenderPlayerGC.heatShieldTexture); + GL11.glEnable(GL11.GL_BLEND); + float sTime = (float) ((1.0F - Math.sin((entitylivingbaseIn.ticksExisted + partialTicks) / 10.0F)) * 0.1F + 0.0F); + + float r = 0.9F * sTime; + float g = 0.2F * sTime; + float b = 0.9F * sTime; + + GlStateManager.depthMask(false); + GL11.glColor4f(r, g, b, 0.2F); + GlStateManager.blendFunc(GL11.GL_ONE, GL11.GL_ONE); + this.shieldModel.render(entitylivingbaseIn, f2, f3, f5, f6, f7, scale); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GL11.glColor4f(1, 1, 1, 1); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_LIGHTING); + GlStateManager.depthMask(true); + } + } + } + } + + private void initModel() + { + this.shieldModel = new ModelPlayerGC(1.5F, false); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerThermalPadding.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerThermalPadding.java new file mode 100644 index 00000000..53bbb804 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/entities/layer/LayerThermalPadding.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.entities.layer; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.ModelPlayerGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemThermalPaddingTier2; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.entity.layers.LayerArmorBase; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import org.lwjgl.opengl.GL11; + +public class LayerThermalPadding extends LayerArmorBase +{ + + private final RenderPlayer renderer; + + public LayerThermalPadding(RenderPlayer playerRendererIn) + { + super(playerRendererIn); + this.renderer = playerRendererIn; + } + + @Override + public boolean shouldCombineTextures() + { + return false; + } + + @Override + protected void setModelSlotVisible(ModelBiped model, EntityEquipmentSlot slotIn) + { + model.setVisible(false); + + switch (slotIn) + { + case HEAD: + model.bipedRightLeg.showModel = true; + model.bipedLeftLeg.showModel = true; + break; + case CHEST: + model.bipedRightLeg.showModel = true; + model.bipedLeftLeg.showModel = true; + break; + case LEGS: + model.bipedBody.showModel = true; + model.bipedRightArm.showModel = true; + model.bipedLeftArm.showModel = true; + break; + case FEET: + model.bipedHead.showModel = true; + model.bipedHeadwear.showModel = true; + default: + break; + } + } + + public ItemStack getItemStackFromSlot(EntityLivingBase living, EntityEquipmentSlot slotIn) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData((EntityPlayer) living); + + if (gearData != null) + { + int padding = gearData.getThermalPadding(slotIn.getSlotIndex() - 1); + if (padding != GCPlayerHandler.GEAR_NOT_PRESENT) + { + switch (padding) + { + case Constants.GEAR_ID_THERMAL_PADDING_T1_HELMET: + case Constants.GEAR_ID_THERMAL_PADDING_T1_CHESTPLATE: + case Constants.GEAR_ID_THERMAL_PADDING_T1_LEGGINGS: + case Constants.GEAR_ID_THERMAL_PADDING_T1_BOOTS: + return new ItemStack(AsteroidsItems.thermalPadding, 1, slotIn.getSlotIndex() - 1); + case Constants.GEAR_ID_THERMAL_PADDING_T2_HELMET: + case Constants.GEAR_ID_THERMAL_PADDING_T2_CHESTPLATE: + case Constants.GEAR_ID_THERMAL_PADDING_T2_LEGGINGS: + case Constants.GEAR_ID_THERMAL_PADDING_T2_BOOTS: + return new ItemStack(VenusItems.thermalPaddingTier2, 1, slotIn.getSlotIndex() - 1); + default: + break; + } + } + } + + return null; // This null is OK, it's used only as flag by calling code + // in this same class + } + + @Override + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.CHEST); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.LEGS); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.FEET); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.HEAD); + } + + private void renderArmorLayer(EntityLivingBase entityLivingBaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale, EntityEquipmentSlot slotIn) + { + ItemStack itemstack = this.getItemStackFromSlot(entityLivingBaseIn, slotIn); + + if (itemstack != null) + { + ModelBiped model = this.getModelFromSlot(slotIn); + model.setModelAttributes(this.renderer.getMainModel()); + model.setLivingAnimations(entityLivingBaseIn, limbSwing, limbSwingAmount, partialTicks); + this.setModelSlotVisible(model, slotIn); + this.renderer.bindTexture(itemstack.getItem() instanceof ItemThermalPaddingTier2 ? RenderPlayerGC.thermalPaddingTexture1_T2 : RenderPlayerGC.thermalPaddingTexture1); + model.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + + // Start alpha render + GlStateManager.disableLighting(); + Minecraft.getMinecraft().renderEngine.bindTexture(RenderPlayerGC.thermalPaddingTexture0); + GlStateManager.enableAlpha(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + float time = entityLivingBaseIn.ticksExisted / 10.0F; + float sTime = (float) Math.sin(time) * 0.5F + 0.5F; + + float r = 0.2F * sTime; + float g = 1.0F * sTime; + float b = 0.2F * sTime; + + if (entityLivingBaseIn.world.provider instanceof IGalacticraftWorldProvider) + { + float modifier = ((IGalacticraftWorldProvider) entityLivingBaseIn.world.provider).getThermalLevelModifier(); + + if (modifier > 0) + { + b = g; + g = r; + } else if (modifier < 0) + { + r = g; + g = b; + } + } + + GlStateManager.color(r, g, b, 0.4F * sTime); + model.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + GlStateManager.color(1, 1, 1, 1); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableLighting(); + } + } + + @Override + protected void initArmor() + { + this.modelLeggings = new ModelPlayerGC(0.55F, false); // Head inside + // Oxygen Mask + this.modelArmor = new ModelPlayerGC(0.05F, false); // Chest and limbs + // close to skin + } + + @Override + public ModelBiped getModelFromSlot(EntityEquipmentSlot slotIn) + { + return slotIn == EntityEquipmentSlot.FEET ? this.modelLeggings : this.modelArmor; // FEET + // is + // intended + // here, + // actually + // picks + // up + // the + // helmet + // (yes + // really) + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemLiquidCanisterModel.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemLiquidCanisterModel.java new file mode 100644 index 00000000..4a583c51 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemLiquidCanisterModel.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class ItemLiquidCanisterModel implements IBakedModel +{ + + private final IBakedModel iBakedModel; + + public ItemLiquidCanisterModel(IBakedModel i_modelToWrap) + { + this.iBakedModel = i_modelToWrap; + } + + @Override + public List getQuads(IBlockState state, EnumFacing side, long rand) + { + return iBakedModel.getQuads(state, side, rand); + } + + @Override + public ItemOverrideList getOverrides() + { + return BakedLiquidCanisterOverrideHandler.INSTANCE; + } + + @Override + public boolean isAmbientOcclusion() + { + return iBakedModel.isAmbientOcclusion(); + } + + @Override + public boolean isGui3d() + { + return iBakedModel.isGui3d(); + } + + @Override + public boolean isBuiltInRenderer() + { + return iBakedModel.isBuiltInRenderer(); + } + + @Override + public TextureAtlasSprite getParticleTexture() + { + return iBakedModel.getParticleTexture(); + } + + @Override + public ItemCameraTransforms getItemCameraTransforms() + { + return ItemCameraTransforms.DEFAULT; + } + + private static final class BakedLiquidCanisterOverrideHandler extends ItemOverrideList + { + + public static final BakedLiquidCanisterOverrideHandler INSTANCE = new BakedLiquidCanisterOverrideHandler(); + + private BakedLiquidCanisterOverrideHandler() + { + super(ImmutableList.of()); + } + + @Override + public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) + { + if (stack.getTagCompound() == null) + { + ItemStack copy = stack.copy(); + copy.setTagCompound(new NBTTagCompound()); + copy.getTagCompound().setBoolean("Unbreakable", true); + return FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().getItemModel(copy); + } + return originalModel; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelBuggy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelBuggy.java new file mode 100644 index 00000000..64c2b591 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelBuggy.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelBuggy extends ModelTransformWrapper +{ + + public ItemModelBuggy(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.1085F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.2F, -0.8F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(-0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.0F, -0.4F, -0.3F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.15F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.0F, -0.4F, 1.2F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 15, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (0.2F - Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.075F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(1.5F, -1.5F, -0.15F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelFlag.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelFlag.java new file mode 100644 index 00000000..67cb8746 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelFlag.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.entity.EntityLivingBase; + +public class ItemModelFlag extends ModelTransformWrapper +{ + + public ItemModelFlag(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.25F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.22F, -1.6F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(-Constants.halfPI / 2.0F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 0.65F : 1.5F; + float yTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -0.08F : -0.05F; + Vector3f trans = new Vector3f(xTran, yTran, 0.0F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.rotZ(0.0F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) -(Math.PI / 3.0F)); + ret.mul(mul); + mul.setIdentity(); + EntityLivingBase player = Minecraft.getMinecraft().player; + if (player != null && player.isHandActive() && !player.getActiveItemStack().isEmpty()) + { + final int useTime = Minecraft.getMinecraft().player.getItemInUseMaxCount(); + float interpolate0 = useTime / 20.0F; + interpolate0 = (interpolate0 * interpolate0 + interpolate0 * 2.0F) / 3.0F; + + if (interpolate0 > 1.0F) + { + interpolate0 = 1.0F; + } + final int useTimeFuture = Minecraft.getMinecraft().player.getItemInUseMaxCount() + 1; + float interpolate1 = useTimeFuture / 20.0F; + interpolate1 = (interpolate1 * interpolate1 + interpolate1 * 2.0F) / 3.0F; + + if (interpolate1 > 1.0F) + { + interpolate1 = 1.0F; + } + mul.rotX(((interpolate0 + (interpolate1 - interpolate0) * Minecraft.getMinecraft().getRenderPartialTicks()) * 75.0F) / Constants.RADIANS_TO_DEGREES); + } + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.54F, -0.4F, 0.54F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.0F, 0.5F, 0.0F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.125F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.2F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(3.15F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -1.0F, 0.6F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelRocket.java new file mode 100644 index 00000000..9ffdcf1b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelRocket.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelRocket extends ModelTransformWrapper +{ + + public ItemModelRocket(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.15F, 0.0F, -0.15F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.57F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.5F, -0.6F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + if(!ConfigManagerCore.disableRocketIconRotation) { + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + } + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, -3.2F, -2.6F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.4F, -2.8F, 1.2F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.2F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(0.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -2.75F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelWorkbench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelWorkbench.java new file mode 100644 index 00000000..3ea38c10 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/ItemModelWorkbench.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelWorkbench extends ModelTransformWrapper +{ + + public ItemModelWorkbench(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.0F, -0.0F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.0F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-0.025F, 0.4F, 0.3F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(38, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-0.05F, 0.3F, 0.4F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(-30, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(-30, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.85F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.05F, 0.25F, 0.45F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.8F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(3.15F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.0F, 0.0F, 0.4F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/TextureDungeonFinder.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/TextureDungeonFinder.java new file mode 100644 index 00000000..b06018d1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/item/TextureDungeonFinder.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.item; + +import java.lang.reflect.Field; +import java.util.Map; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TextureDungeonFinder extends TextureAtlasSprite +{ + + /** Current compass heading in radians */ + public double currentAngle; + /** Speed and direction of compass rotation */ + public double angleDelta; + + public TextureDungeonFinder(String iconName) + { + super(iconName); + } + + @Override + public void updateAnimation() + { + Minecraft minecraft = Minecraft.getMinecraft(); + + if (minecraft.world != null && minecraft.player != null) + { + this.updateCompass(minecraft.world, minecraft.player, (double) minecraft.player.rotationYaw, false, false); + } else + { + this.updateCompass((World) null, null, 0.0D, true, false); + } + } + + /** + * Updates the compass based on the given x,z coords and camera direction + */ + public void updateCompass(World worldIn, EntityPlayerSP player, double angle, boolean flag1, boolean flag2) + { + if (!this.framesTextureData.isEmpty()) + { + double d0 = 0.0D; + + if (worldIn != null && player != null && !flag1) + { + if (worldIn.provider instanceof IGalacticraftWorldProvider && player.inventory.hasItemStack(new ItemStack(GCItems.dungeonFinder))) + { + double direction = GCPlayerStatsClient.get(player).getDungeonDirection(); + angle = (angle - direction) % 360.0D; + d0 = -angle / Constants.RADIANS_TO_DEGREES_D; + } else + { + d0 = Math.random() * Math.PI * 2.0D; + } + } + + if (flag2) + { + this.currentAngle = d0; + } else + { + double d3; + + for (d3 = d0 - this.currentAngle; d3 < -Math.PI; d3 += (Math.PI * 2D)) + { + ; + } + + while (d3 >= Math.PI) + { + d3 -= (Math.PI * 2D); + } + + d3 = MathHelper.clamp(d3, -1.0D, 1.0D); + this.angleDelta += d3 * 0.1D; + this.angleDelta *= 0.8D; + this.currentAngle += this.angleDelta; + } + + int i; + + for (i = (int) ((this.currentAngle / (Math.PI * 2D) + 1.0D) * (double) this.framesTextureData.size()) % this.framesTextureData.size(); i < 0; i = + (i + this.framesTextureData.size()) % this.framesTextureData.size()) + { + ; + } + + if (i != this.frameCounter) + { + this.frameCounter = i; + TextureUtil.uploadTextureMipmap((int[][]) this.framesTextureData.get(this.frameCounter), this.width, this.height, this.originX, this.originY, false, false); + } + } + } + + public void register(TextureMap map) + { + try + { + Field f = map.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "mapRegisteredSprites" : "field_110574_e"); + f.setAccessible(true); + Map textureMap = (Map) f.get(map); + textureMap.put(this.getIconName(), this); + } catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityArclampRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityArclampRenderer.java new file mode 100644 index 00000000..0489d669 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityArclampRenderer.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityArclamp; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityArclampRenderer extends TileEntitySpecialRenderer +{ + + public static final ResourceLocation lampTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/underoil.png"); + public static final ResourceLocation lightTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/light.png"); + private static IBakedModel lampMetal; + + @Override + public void render(TileEntityArclamp tileEntity, double d, double d1, double d2, float f, int par9, float alpha) + { + this.updateModels(); + int side = tileEntity.getBlockMetadata(); + int metaFacing = tileEntity.facing; + + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1 + 0.5F, (float) d2 + 0.5F); + RenderHelper.enableStandardItemLighting(); + GlStateManager.enableRescaleNormal(); + + switch (side) + { + case 0: + break; + case 1: + GlStateManager.rotate(180F, 1F, 0, 0); + if (metaFacing < 2) + { + metaFacing ^= 1; + } + break; + case 2: + GlStateManager.rotate(90F, 1F, 0, 0); + metaFacing ^= 1; + break; + case 3: + GlStateManager.rotate(90F, -1F, 0, 0); + break; + case 4: + GlStateManager.rotate(90F, 0, 0, -1F); + metaFacing -= 2; + if (metaFacing < 0) + { + metaFacing = 1 - metaFacing; + } + break; + case 5: + GlStateManager.rotate(90F, 0, 0, 1F); + metaFacing += 2; + if (metaFacing > 3) + { + metaFacing = 5 - metaFacing; + } + break; + } + + GlStateManager.translate(0, -0.175F, 0); + + switch (metaFacing) + { + case 0: + break; + case 1: + GlStateManager.rotate(180F, 0, 1F, 0); + break; + case 2: + GlStateManager.rotate(90F, 0, 1F, 0); + break; + case 3: + GlStateManager.rotate(270F, 0, 1F, 0); + break; + } + + this.bindTexture(TileEntityArclampRenderer.lampTexture); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.rotate(45F, -1F, 0, 0); + GlStateManager.scale(0.048F, 0.048F, 0.048F); + ClientUtil.drawBakedModel(TileEntityArclampRenderer.lampMetal); + RenderHelper.disableStandardItemLighting(); + + float greyLevel = tileEntity.getEnabled() ? 1.0F : 26F / 255F; + // Save the lighting state + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GlStateManager.disableLighting(); + + this.bindTexture(TileEntityArclampRenderer.lightTexture); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableTexture2D(); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(greyLevel, greyLevel, greyLevel, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + float frameA = -3.4331F; // These co-ordinates came originally from + // arclamp_light.obj model + float frameB = -frameA; // These co-ordinates came originally from + // arclamp_light.obj model + float frameY = 2.3703F; // These co-ordinates came originally from + // arclamp_light.obj model + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameA).endVertex(); + worldRenderer.pos(frameA, frameY, frameA).endVertex(); + tess.draw(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableTexture2D(); + // ? need to undo GlStateManager.glBlendFunc()? + + // Restore the lighting state + GlStateManager.enableLighting(); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + GlStateManager.popMatrix(); + } + + private void updateModels() + { + if (lampMetal == null) + { + try + { + lampMetal = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "arclamp_metal.obj")); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityBubbleProviderRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityBubbleProviderRenderer.java new file mode 100644 index 00000000..6d56049e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityBubbleProviderRenderer.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProvider; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@Deprecated +public class TileEntityBubbleProviderRenderer extends TileEntitySpecialRenderer +{ + + private static IBakedModel sphere; + + private final float colorRed; + private final float colorGreen; + private final float colorBlue; + + public TileEntityBubbleProviderRenderer(float colorRed, float colorGreen, float colorBlue) + { + this.colorRed = colorRed; + this.colorGreen = colorGreen; + this.colorBlue = colorBlue; + } + + private static void updateModels() + { + if (sphere == null) + { + try + { + sphere = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "sphere.obj"), ImmutableList.of("Sphere")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void render(E provider, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (!provider.getBubbleVisible()) + { + return; + } + + updateModels(); + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glTranslatef((float) x + 0.5F, (float) y + 1.0F, (float) z + 0.5F); + + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(this.colorRed / 2.0F, this.colorGreen / 2.0F, this.colorBlue / 2.0F, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glDepthMask(false); + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GL11.glScalef(provider.getBubbleSize(), provider.getBubbleSize(), provider.getBubbleSize()); + + int color = ColorUtil.to32BitColor(30, (int) (this.colorBlue / 2.0F * 255), (int) (this.colorGreen / 2.0F * 255), (int) (this.colorRed / 2.0F * 255)); + ClientUtil.drawBakedModelColored(sphere, color); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glDepthMask(true); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glEnable(GL11.GL_CULL_FACE); + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityDishRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityDishRenderer.java new file mode 100644 index 00000000..f5e90156 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityDishRenderer.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDish; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class TileEntityDishRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation textureSupport = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/telesupport.png"); + private static final ResourceLocation textureFork = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/telefork.png"); + private static final ResourceLocation textureDish = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/teledish.png"); + private static IBakedModel modelSupport; + private static IBakedModel modelFork; + private static IBakedModel modelDish; + private TextureManager renderEngine = FMLClientHandler.instance().getClient().renderEngine; + + private void updateModels() + { + if (modelDish == null) + { + try + { + modelDish = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "teledish.obj")); + modelFork = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "telefork.obj")); + modelSupport = ClientUtil.modelFromOBJ(new ResourceLocation(Constants.ASSET_PREFIX, "telesupport.obj")); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + @Override + public void render(TileEntityDish tile, double par2, double par4, double par6, float partialTickTime, int par9, float alpha) + { + this.updateModels(); + TileEntityDish dish = (TileEntityDish) tile; + float hour = dish.rotation(partialTickTime) % 360F; + float declination = dish.elevation(partialTickTime) % 360F; + + final EntityPlayer player = FMLClientHandler.instance().getClient().player; + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + GL11.glTranslatef(0.5F, 1.0F, 0.5F); + GL11.glScalef(1.6F, 1.25F, 1.6F); + + this.renderEngine.bindTexture(textureSupport); + ClientUtil.drawBakedModel(modelSupport); + GL11.glScalef(1.25F, 1.6F, 1.25F); + GL11.glTranslatef(0F, 2.88F * 0.15F / 1.6F, 0F); + GL11.glScalef(0.85F, 0.85F, 0.85F); + GL11.glRotatef(hour, 0, -1, 0); + this.renderEngine.bindTexture(textureFork); + ClientUtil.drawBakedModel(modelFork); + + GL11.glTranslatef(0.0F, 2.3F, 0.0F); + GL11.glRotatef(declination, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(0.0F, -2.3F, 0.0F); + + this.renderEngine.bindTexture(textureDish); + ClientUtil.drawBakedModel(modelDish); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityEmergencyBoxRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityEmergencyBoxRenderer.java new file mode 100644 index 00000000..4fc1838c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityEmergencyBoxRenderer.java @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockEmergencyBox; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEmergencyBox; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityEmergencyBoxRenderer extends TileEntitySpecialRenderer +{ + + private static final float MASKSCALE = 3F; + + public class Flap extends ModelBase + { + + ModelRenderer model; + protected float angle; + + public Flap() + { + this.angle = 0.0F; + this.textureWidth = 32; + this.textureHeight = 32; + this.model = new ModelRenderer(this, 0, 0); + this.model.addBox(-6F, -6F, 0F, 12, 6, 1); + this.model.setRotationPoint(0F, 6F, -7F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void render() + { + this.setRotation(this.model, angle / Constants.RADIANS_TO_DEGREES, 0F, 0F); + this.model.render(1F / 16F); + } + } + + public class Plinth extends ModelBase + { + + ModelRenderer model; + + public Plinth() + { + this.textureWidth = 16; + this.textureHeight = 16; + this.model = new ModelRenderer(this, 0, 0); + this.model.addBox(-6F, -7F, -6F, 12, 1, 12); + this.model.setRotationPoint(0F, 0F, 0F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + public void render(float height) + { + this.model.setRotationPoint(0F, height, 0F); + this.model.render(1F / 16F); + } + } + + public class Mask extends ModelBase + { + + ModelRenderer model; + + public Mask() + { + this.textureWidth = 128; + this.textureHeight = 64; + this.model = new ModelRenderer(this, 0, 0); + this.model.addBox(-8.0F, -4F, -8.0F, 16, 16, 16, 1.0F); + this.model.setRotationPoint(0F, 0F, 0F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + public void render(float height) + { + this.model.setRotationPoint(0F, height * MASKSCALE, 0F); + this.model.render(1F / 16F / MASKSCALE); + } + } + + public class Tank extends ModelBase + { + + ModelRenderer model; + + public Tank() + { + this.textureWidth = 128; + this.textureHeight = 64; + this.model = new ModelRenderer(this, 0, 0); + this.model.setTextureOffset(4, 0); // Green tank + this.model.addBox(-1.5F, 0F, -1.5F, 3, 7, 3, 1.0F); + this.model.setRotationPoint(0F, 0F, 0F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + public void render(float height) + { + this.model.setRotationPoint(0F, height * MASKSCALE, 0F); + this.model.render(1F / 16F / MASKSCALE); + } + } + + public class Pack extends ModelBase + { + + ModelRenderer model; + + public Pack() + { + this.textureWidth = 256; + this.textureHeight = 256; + this.model = new ModelRenderer(this, 0, 0); + this.model.setTextureOffset(50, 50); + this.model.addBox(-6F, -11F, -10F, 12, 1, 20, 1.0F); + this.model.setRotationPoint(0F, 0F, 0F); + this.model.setTextureSize(this.textureWidth, this.textureHeight); + this.model.mirror = true; + } + + public void render(float height) + { + this.model.setRotationPoint(0F, height * 2F, 0F); + this.model.render(1F / 32F); + } + } + + private static final ResourceLocation boxTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/emergency_box.png"); + private static final ResourceLocation flapTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/emergency_box_flap.png"); + private static final ResourceLocation packTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/red.png"); + private static final ResourceLocation oxygenMaskTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/oxygen.png"); + private static final ResourceLocation oxygenTankTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/player.png"); + private Flap flapA = new Flap(); + private Flap flapB = new Flap(); + private Flap flapC = new Flap(); + private Flap flapD = new Flap(); + private Plinth plat = new Plinth(); + private Mask mask = new Mask(); + private Tank tank = new Tank(); + private Pack pack = new Pack(); + + @Override + public void render(TileEntityEmergencyBox tileEntity, double d, double d1, double d2, float f, int par9, float alpha) + { + IBlockState b = tileEntity.getWorld().getBlockState(tileEntity.getPos()); + if (!(b.getBlock() instanceof BlockEmergencyBox)) + return; + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1 + 0.5F, (float) d2 + 0.5F); + + flapA.angle = tileEntity.getAngleA(f); + flapB.angle = tileEntity.getAngleB(f); + flapC.angle = tileEntity.getAngleC(f); + flapD.angle = tileEntity.getAngleD(f); + float height = Math.max(Math.max(flapA.angle, flapB.angle), Math.max(flapC.angle, flapD.angle)) / 90F; + + if (height > 0F && b.getValue(BlockEmergencyBox.KIT)) + { + GlStateManager.pushMatrix(); + this.bindTexture(packTexture); + this.pack.render(height); + GlStateManager.rotate(180F, 1F, 0F, 0F); + this.bindTexture(oxygenMaskTexture); + GlStateManager.translate(0.0F, 0.0F, -0.07F); + this.mask.render(-height); + this.bindTexture(oxygenTankTexture); + GlStateManager.translate(0.1F, 0.11F, 0.3F); + this.tank.render(-height); + GlStateManager.translate(-0.2F, 0F, 0F); + this.tank.render(-height); + GlStateManager.popMatrix(); + } + + this.bindTexture(boxTexture); + this.plat.render(height); + this.bindTexture(flapTexture); + this.flapA.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapB.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapC.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapD.render(); + GlStateManager.rotate(180F, 1F, 0F, 0F); + this.flapB.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapA.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapD.render(); + GlStateManager.rotate(90F, 0, 1F, 0F); + this.flapC.render(); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidPipeRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidPipeRenderer.java new file mode 100644 index 00000000..9a54448d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidPipeRenderer.java @@ -0,0 +1,374 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import com.google.common.collect.Maps; +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.Fluid; +import org.lwjgl.opengl.GL11; + +public class TileEntityFluidPipeRenderer extends TileEntitySpecialRenderer +{ + + private static HashMap> cache = new HashMap<>(); + + private final int stages = 100; + + @Override + public void render(TileEntityFluidPipe pipe, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (pipe.getBlockType() == GCBlocks.oxygenPipePull) + { + GL11.glPushMatrix(); + + GL11.glTranslatef((float) x, (float) y, (float) z); + + RenderHelper.disableStandardItemLighting(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + TileEntity[] adj = OxygenUtil.getAdjacentFluidConnections(pipe); + + for (EnumFacing facing : EnumFacing.VALUES) + { + TileEntity sideTile = adj[facing.ordinal()]; + + if (sideTile != null && !(sideTile instanceof IBufferTransmitter)) + { + GL11.glPushMatrix(); + if (sideTile instanceof TileEntityFluidTank) + switch (facing) + { + case SOUTH: + GL11.glTranslatef(0F, 0F, 1 / 16F); + break; + case NORTH: + GL11.glTranslatef(0F, 0F, -1 / 16F); + break; + case EAST: + GL11.glTranslatef(1 / 16F, 0F, 0F); + break; + case WEST: + GL11.glTranslatef(-1 / 16F, 0F, 0F); + break; + default: + break; + } + ClientUtil.drawBakedModel(EventHandlerClient.fluidPipeModels[facing.ordinal()]); + GL11.glPopMatrix(); + } + } + + GL11.glPopMatrix(); + } + + float scale; + + if (pipe.hasNetwork()) + { + FluidNetwork network = (FluidNetwork) pipe.getNetwork(); + scale = network.fluidScale; + } else + { + scale = pipe.buffer.getFluidAmount() / (float) pipe.buffer.getCapacity(); + } + + Fluid fluid; + + if (pipe.hasNetwork()) + { + FluidNetwork network = (FluidNetwork) pipe.getNetwork(); + fluid = network.refFluid; + } else + { + fluid = pipe.getBuffer() == null ? null : pipe.getBuffer().getFluid(); + } + + if (fluid == null) + { + return; + } + + if (scale > 0.01) + { + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + float opacity = 1.0F; + + boolean gas = fluid.isGaseous(); + + if (gas) + { + opacity = scale; + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, opacity); + + TileEntity[] connections = OxygenUtil.getAdjacentFluidConnections(pipe); + + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity sideTile = connections[side.ordinal()]; + if (sideTile != null) + { + Integer[] displayLists = getListAndRender(side, fluid); + + if (displayLists != null) + { + if (!gas) + { + Integer list = displayLists[Math.max(3, (int) (scale * (stages - 1)))]; + GL11.glCallList(list); + } else + { + Integer list = displayLists[stages - 1]; + GL11.glCallList(list); + } + } + } + } + + Integer[] displayLists = getListAndRender(null, fluid); + + if (displayLists != null) + { + if (!gas) + { + Integer list = displayLists[Math.max(3, (int) (scale * (stages - 1)))]; + GL11.glCallList(list); + } else + { + Integer list = displayLists[stages - 1]; + GL11.glCallList(list); + } + } + + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + } + + private Integer[] getListAndRender(EnumFacing side, Fluid fluid) + { + if (fluid == null) + { + return null; + } + + TextureAtlasSprite sprite = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(fluid.getStill().toString()); + int sideIndex = side == null ? 6 : side.ordinal(); + + if (cache.containsKey(sideIndex) && cache.get(sideIndex).containsKey(fluid)) + { + return cache.get(sideIndex).get(fluid); + } + + float size = 0.09F; + float mid = 0.0F; + float minX; + float maxX; + float minY; + float maxY; + float minZ; + float maxZ; + + Integer[] displayLists = new Integer[this.stages]; + + if (cache.containsKey(sideIndex)) + { + cache.get(sideIndex).put(fluid, displayLists); + } else + { + HashMap map = Maps.newHashMap(); + map.put(fluid, displayLists); + cache.put(sideIndex, map); + } + + for (int i = 0; i < stages; ++i) + { + displayLists[i] = GLAllocation.generateDisplayLists(1); + GL11.glNewList(displayLists[i], GL11.GL_COMPILE); + + float level = (i / (float) stages); + + switch (sideIndex) + { + case 0: + minX = mid - level * size; + maxX = mid + level * size; + minY = mid + size; + maxY = mid + 0.5F; + minZ = mid - level * size; + maxZ = mid + level * size; + break; + case 1: + minX = mid - level * size; + maxX = mid + level * size; + minY = mid - 0.5F; + maxY = mid - size; + minZ = mid - level * size; + maxZ = mid + level * size; + break; + case 2: + minX = mid - size; + maxX = mid + size; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid + size; + maxZ = mid + 0.5F; + break; + case 3: + minX = mid - size; + maxX = mid + size; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid - 0.5F; + maxZ = mid - size; + break; + case 4: + minX = mid - 0.5F; + maxX = mid - size; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid - size; + maxZ = mid + size; + break; + case 5: + minX = mid + size; + maxX = mid + 0.5F; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid - size; + maxZ = mid + size; + break; + default: + minX = mid - size; + maxX = mid + size; + maxY = mid + size; + minY = mid + size - level * size * 2.0F; + minZ = mid - size; + maxZ = mid + size; + break; + } + + renderBox(minX, maxX, minY, maxY, minZ, maxZ, level, sprite); + GL11.glEndList(); + } + + return displayLists; + } + + private void renderBox(float minX, float maxX, float minY, float maxY, float minZ, float maxZ, float level, TextureAtlasSprite sprite) + { + final double uMin = sprite.getMinU(); + final double uMax = sprite.getMaxU(); + final double vMin = sprite.getMinV(); + final double vMax = sprite.getMaxV(); + + Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + + double uDiff = (uMax - uMin); + double vDiff = (vMax - vMin); + double texMinX_U = uMin + (minX + 0.5F) * uDiff; + double texMaxX_U = uMin + (maxX + 0.5F) * uDiff; + double texMinZ_U = uMin + (minZ + 0.5F) * uDiff; + double texMaxZ_U = uMin + (maxZ + 0.5F) * uDiff; + double texMinX_V = vMin + (minX + 0.5F) * vDiff; + double texMaxX_V = vMin + (maxX + 0.5F) * vDiff; + double texMinY_V = vMin + (minY + 0.5F) * vDiff; + double texMaxY_V = vMin + (maxY + 0.5F) * vDiff; + + // North + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minX, minY, minZ).tex(texMinX_U, texMinY_V).endVertex(); + worldRenderer.pos(minX, maxY, minZ).tex(texMinX_U, texMaxY_V).endVertex(); + worldRenderer.pos(maxX, maxY, minZ).tex(texMaxX_U, texMaxY_V).endVertex(); + worldRenderer.pos(maxX, minY, minZ).tex(texMaxX_U, texMinY_V).endVertex(); + tess.draw(); + + // South + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(maxX, minY, maxZ).tex(texMaxX_U, texMinY_V).endVertex(); + worldRenderer.pos(maxX, maxY, maxZ).tex(texMaxX_U, texMaxY_V).endVertex(); + worldRenderer.pos(minX, maxY, maxZ).tex(texMinX_U, texMaxY_V).endVertex(); + worldRenderer.pos(minX, minY, maxZ).tex(texMinX_U, texMinY_V).endVertex(); + tess.draw(); + + // West + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(minX, maxY, minZ).tex(texMinZ_U, texMaxY_V).endVertex(); + worldRenderer.pos(minX, minY, minZ).tex(texMinZ_U, texMinY_V).endVertex(); + worldRenderer.pos(minX, minY, maxZ).tex(texMaxZ_U, texMinY_V).endVertex(); + worldRenderer.pos(minX, maxY, maxZ).tex(texMaxZ_U, texMaxY_V).endVertex(); + tess.draw(); + + // East + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(maxX, maxY, maxZ).tex(texMaxZ_U, texMaxY_V).endVertex(); + worldRenderer.pos(maxX, minY, maxZ).tex(texMaxZ_U, texMinY_V).endVertex(); + worldRenderer.pos(maxX, minY, minZ).tex(texMinZ_U, texMinY_V).endVertex(); + worldRenderer.pos(maxX, maxY, minZ).tex(texMinZ_U, texMaxY_V).endVertex(); + tess.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(maxX, minY, maxZ).tex(texMaxZ_U, texMaxX_V).endVertex(); + worldRenderer.pos(minX, minY, maxZ).tex(texMaxZ_U, texMinX_V).endVertex(); + worldRenderer.pos(minX, minY, minZ).tex(texMinZ_U, texMinX_V).endVertex(); + worldRenderer.pos(maxX, minY, minZ).tex(texMinZ_U, texMaxX_V).endVertex(); + tess.draw(); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(maxX, maxY, maxZ).tex(texMaxZ_U, texMaxX_V).endVertex(); + worldRenderer.pos(maxX, maxY, minZ).tex(texMinZ_U, texMaxX_V).endVertex(); + worldRenderer.pos(minX, maxY, minZ).tex(texMinZ_U, texMinX_V).endVertex(); + worldRenderer.pos(minX, maxY, maxZ).tex(texMaxZ_U, texMinX_V).endVertex(); + tess.draw(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidTankRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidTankRenderer.java new file mode 100644 index 00000000..6b7c1781 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityFluidTankRenderer.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import org.lwjgl.opengl.GL11; + +public class TileEntityFluidTankRenderer extends TileEntitySpecialRenderer +{ + + @Override + public void render(TileEntityFluidTank tank, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + FluidTankInfo[] info = tank.getTankInfo(EnumFacing.DOWN); + + if (info.length != 1) + { + return; + } + FluidStack tankFluid = info[0].fluid; + if (tankFluid == null || tankFluid.getFluid() == null || (!tankFluid.getFluid().isGaseous() && tankFluid.amount == 0)) + { + return; + } + + TileEntityFluidTank tankAbove = tank.getNextTank(tank.getPos()); + TileEntityFluidTank tankBelow = tank.getPreviousTank(tank.getPos()); + + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + TextureAtlasSprite sprite = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(tankFluid.getFluid().getStill().toString()); + final double uMin = sprite.getMinU(); + final double uMax = sprite.getMaxU(); + final double vMin = sprite.getMinV(); + final double vMax = sprite.getMaxV(); + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) x, (float) y + 1.5F, (float) z + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + + float level = 1.0F; + float levelInv = 0.0F; + float opacity = 1.0F; + + boolean compositeGaseous = tankFluid.getFluid().isGaseous(); + + if (compositeGaseous) + { + opacity = Math.min(tankFluid.amount / (float) info[0].capacity * 0.8F + 0.2F, 1F); + } else + { + level = tank.fluidTank.getFluidAmount() / 16400.0F; + if (level <= 0.012F) + { + levelInv = 1.0F; // Empty tanks render empty - see #3222 + } else + { + levelInv = 0.988F - level; // 1.2% inset from each end of the + // tank, to avoid z-fighting with + // blocks above/below + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, opacity); + + if (levelInv < 1.0F) + { + // North + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-0.4, levelInv, -0.399).tex(uMin, vMin).endVertex(); + worldRenderer.pos(-0.4, 1.0, -0.399).tex(uMin, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(0.4, 1.0, -0.399).tex(uMax, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(0.4, levelInv, -0.399).tex(uMax, vMin).endVertex(); + tess.draw(); + + // South + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.4, levelInv, 0.399).tex(uMax, vMin).endVertex(); + worldRenderer.pos(0.4, 1.0, 0.399).tex(uMax, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(-0.4, 1.0, 0.399).tex(uMin, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(-0.4, levelInv, 0.399).tex(uMin, vMin).endVertex(); + tess.draw(); + + // West + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-0.399, 1.0, -0.4).tex(uMin, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(-0.399, levelInv, -0.4).tex(uMin, vMin).endVertex(); + worldRenderer.pos(-0.399, levelInv, 0.4).tex(uMax, vMin).endVertex(); + worldRenderer.pos(-0.399, 1.0, 0.4).tex(uMax, vMin + (vMax - vMin) * level).endVertex(); + tess.draw(); + + // East + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.399, 1.0, 0.4).tex(uMax, vMin + (vMax - vMin) * level).endVertex(); + worldRenderer.pos(0.399, levelInv, 0.4).tex(uMax, vMin).endVertex(); + worldRenderer.pos(0.399, levelInv, -0.4).tex(uMin, vMin).endVertex(); + worldRenderer.pos(0.399, 1.0, -0.4).tex(uMin, vMin + (vMax - vMin) * level).endVertex(); + tess.draw(); + + if (tankAbove == null || (tankAbove.fluidTank.getFluidAmount() == 0 && !compositeGaseous)) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.4, 0.01 + levelInv, 0.4).tex(uMax, vMax).endVertex(); + worldRenderer.pos(-0.4, 0.01 + levelInv, 0.4).tex(uMax, vMin).endVertex(); + worldRenderer.pos(-0.4, 0.01 + levelInv, -0.4).tex(uMin, vMin).endVertex(); + worldRenderer.pos(0.4, 0.01 + levelInv, -0.4).tex(uMin, vMax).endVertex(); + tess.draw(); + } + + if (tankBelow == null || (tankBelow.fluidTank.getFluidAmount() == 0 && !compositeGaseous)) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(0.4, 0.99, 0.4).tex(uMax, vMax).endVertex(); + worldRenderer.pos(0.4, 0.99, -0.4).tex(uMin, vMax).endVertex(); + worldRenderer.pos(-0.4, 0.99, -0.4).tex(uMin, vMin).endVertex(); + worldRenderer.pos(-0.4, 0.99, 0.4).tex(uMax, vMin).endVertex(); + tess.draw(); + } + } + + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPanelLightRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPanelLightRenderer.java new file mode 100644 index 00000000..edd038b3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPanelLightRenderer.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityPanelLightRenderer extends TileEntitySpecialRenderer +{ + + public static final ResourceLocation lightTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/light.png"); + + @Override + public void render(TileEntityPanelLight tileEntity, double d, double d1, double d2, float f, int par9, float alpha) + { + int side = tileEntity.meta; + int rot = side >> 3; + side = (side & 7) ^ 1; + BlockPanelLighting.PanelType type = tileEntity.getType(); + + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1 + 0.5F, (float) d2 + 0.5F); + + switch (side) + { + case 0: + break; + case 1: + GlStateManager.rotate(180F, 1F, 0, 0); + break; + case 2: + GlStateManager.rotate(90F, 1F, 0, 0); + break; + case 3: + GlStateManager.rotate(90F, -1F, 0, 0); + break; + case 4: + GlStateManager.rotate(90F, 0, 0, -1F); + rot = (rot + 1) % 4; + break; + case 5: + GlStateManager.rotate(90F, 0, 0, 1F); + rot = (rot + 1) % 4; + break; + } + + if (rot > 0) + { + GlStateManager.rotate(90F * rot, 0, 1F, 0F); + } + + if (type == BlockPanelLighting.PanelType.SFDIAG) + { + GlStateManager.rotate(45F, 0, 1F, 0F); + } + + GlStateManager.translate(-0.5F, -0.5F, -0.5F); + RenderHelper.disableStandardItemLighting(); + + if (tileEntity.getEnabled()) + { + ColorUtil.setGLColor(tileEntity.color); + } else + { + float greyLevel = 24F / 255F; + GlStateManager.color(greyLevel, greyLevel, greyLevel, 1.0F); + } + + // Save the lighting state + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GlStateManager.disableLighting(); + + this.bindTexture(TileEntityArclampRenderer.lightTexture); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableTexture2D(); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + float frameY = 1.01F; + float frameA, frameB, frameC; + switch (type) + { + case SQUARE: + default: + frameA = 0.15F; + frameB = 0.5F; + frameC = frameA; + break; + case SPOTS: + frameA = 0.21F; + frameB = 0.29F; + frameC = frameA; + break; + case LINEAR: + frameA = 0.08F; + frameB = 0.5F; + frameC = 0.36F; + break; + case SF: + case SFDIAG: + frameA = 0.1F; + frameB = 0.4F; + frameC = 0.35F; + } + if (type != BlockPanelLighting.PanelType.SFDIAG) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(1.0F - frameA, frameY, frameC).endVertex(); + worldRenderer.pos(1.0F - frameB, frameY, frameC).endVertex(); + worldRenderer.pos(1.0F - frameB, frameY, frameB).endVertex(); + worldRenderer.pos(1.0F - frameA, frameY, frameB).endVertex(); + tess.draw(); + frameA = 1.0F - frameA; + frameB = 1.0F - frameB; + frameC = 1.0F - frameC; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(1.0F - frameA, frameY, frameC).endVertex(); + worldRenderer.pos(1.0F - frameB, frameY, frameC).endVertex(); + worldRenderer.pos(1.0F - frameB, frameY, frameB).endVertex(); + worldRenderer.pos(1.0F - frameA, frameY, frameB).endVertex(); + tess.draw(); + } else + { + frameA += 0.02F; + GlStateManager.translate(0.239F, 0F, -0.345F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + frameA += 0.02F; + GlStateManager.translate(0.23F, 0F, 0.233F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + GlStateManager.translate(-0.48F, 0F, 0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameB).endVertex(); + worldRenderer.pos(frameB, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + } + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableTexture2D(); + // ? need to undo GlStateManager.glBlendFunc()? + + // Restore the lighting state + GlStateManager.enableLighting(); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + RenderHelper.enableStandardItemLighting(); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPlatformRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPlatformRenderer.java new file mode 100644 index 00000000..e01d9ad0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityPlatformRenderer.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import java.util.HashMap; +import java.util.Map; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockPlatform; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityPlatformRenderer extends TileEntitySpecialRenderer +{ + + public class ModelPlatform extends ModelBase + { + + ModelRenderer panelMain; + + public ModelPlatform() + { + this(0.0F); + } + + public ModelPlatform(float var1) + { + this.textureWidth = 128; + this.textureHeight = 128; + this.panelMain = new ModelRenderer(this, 0, 0); + this.panelMain.addBox(-22F, -3.5F, -22F, 44, 7, 44); + this.panelMain.setRotationPoint(0F, 0F, 0F); + this.panelMain.setTextureSize(128, 128); + this.panelMain.mirror = true; + this.setRotation(this.panelMain, 0F, 0F, 0F); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void render() + { + this.panelMain.render(1.125F / 44F); + } + } + + public static final ResourceLocation platformTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/platform_moving.png"); + public static final ResourceLocation lightTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/misc/light.png"); + private ModelPlatform platform = new ModelPlatform(); + private static Map lastYMap = new HashMap<>(); + private static float lastPartialTicks = -1F; + + @Override + public void render(TileEntityPlatform tileEntity, double d, double d1, double d2, float f, int par9, float alpha) + { + if (f != lastPartialTicks) + { + lastPartialTicks = f; + lastYMap.clear(); + } + IBlockState b = tileEntity.getWorld().getBlockState(tileEntity.getPos()); + float yOffset = tileEntity.getYOffset(f); + if (b.getBlock() == GCBlocks.platform && b.getValue(BlockPlatform.CORNER) == BlockPlatform.EnumCorner.NW) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1 + 0.5F, (float) d2 + 0.5F); + GlStateManager.rotate(90F, 0, 1F, 0F); + GlStateManager.translate(-0.5F, -0.5F, 0.5F); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + + // Render a moving platform + boolean renderPlatformForThisTE = false; + float newY = (float) d1 + yOffset; + int xz = tenLSB(tileEntity.getPos().getX()) << 10; + xz += tenLSB(tileEntity.getPos().getZ()); + Float lastYF = lastYMap.get(xz); + float lastY = lastYF == null ? -1 : lastYF; + if (!tileEntity.isMoving() || Math.abs(newY - lastY) > 0.001F || Math.abs(f - lastPartialTicks) > 0.001F) + { + renderPlatformForThisTE = true; + lastYMap.put(xz, newY); + GlStateManager.pushMatrix(); + if (tileEntity.isMoving()) + { + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, tileEntity.getMeanLightX(yOffset), tileEntity.getMeanLightZ(yOffset)); + } else + { + int light = tileEntity.getBlendedLight(); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) (light % 65536), (float) (light / 65536)); + } + GlStateManager.translate(0F, 0.79F + yOffset, 0F); + this.bindTexture(TileEntityPlatformRenderer.platformTexture); + this.platform.render(); + GlStateManager.popMatrix(); + } + + if (tileEntity.lightEnabled() || tileEntity.isMoving()) + { + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GlStateManager.disableLighting(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableTexture2D(); + + this.bindTexture(TileEntityPlatformRenderer.lightTexture); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + float frameA, frameB, frameC, frameD; + + // Draw the moving platform side-lights + if (tileEntity.isMoving() && renderPlatformForThisTE) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(0F, 0.26F + yOffset, 0F); + GlStateManager.color(1.0F, 0.84F, 65F / 255F, 1.0F); + + float frameRadius = 1.126F / 2F; + frameB = frameRadius - 0.04F; + frameC = -frameB; + frameA = 0.552F; + frameD = 0.578F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + frameA = 0.482F; + frameD = 0.504666F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + frameA = 0.552F; + frameD = 0.578F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + frameA = 0.482F; + frameD = 0.504666F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + frameA = 0.552F; + frameD = 0.578F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + frameA = 0.482F; + frameD = 0.504666F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + frameA = 0.552F; + frameD = 0.578F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + frameA = 0.482F; + frameD = 0.504666F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-frameRadius, frameA, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameB).endVertex(); + worldRenderer.pos(-frameRadius, frameD, frameC).endVertex(); + worldRenderer.pos(-frameRadius, frameA, frameC).endVertex(); + tess.draw(); + + GlStateManager.popMatrix(); + } + + // Draw the activation lights + if (tileEntity.lightEnabled()) + { + float greyLevel = 125F / 255F; + switch (tileEntity.lightColor()) + { + case 1: + GlStateManager.color(1.0F, 115F / 255F, 115F / 255F, 1.0F); + break; + default: + GlStateManager.color(greyLevel, 1.0F, greyLevel, 1.0F); + } + + float frameY = 0.9376F; + frameC = 0.7F; + frameD = 0.58F; + frameB = frameC + 0.02F; + frameA = -frameD; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + GlStateManager.rotate(90F, 0, 1F, 0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameB).endVertex(); + worldRenderer.pos(frameD, frameY, frameC).endVertex(); + worldRenderer.pos(frameA, frameY, frameC).endVertex(); + tess.draw(); + } + + // Restore the lighting state + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + // ? need to undo GlStateManager.glBlendFunc()? + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + } + + GlStateManager.enableRescaleNormal(); + RenderHelper.enableStandardItemLighting(); + GlStateManager.popMatrix(); + } + } + + private int tenLSB(int x) + { + if (x < 0) + return x % 1024 + 1024; + + return x % 1024; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityScreenRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityScreenRenderer.java new file mode 100644 index 00000000..847caae2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityScreenRenderer.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import java.nio.FloatBuffer; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityScreenRenderer extends TileEntitySpecialRenderer +{ + + public static final ResourceLocation blockTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/blocks/screen_side.png"); + private TextureManager renderEngine = FMLClientHandler.instance().getClient().renderEngine; + private static FloatBuffer colorBuffer = GLAllocation.createDirectFloatBuffer(16); + + private float yPlane = 0.91F; + float frame = 0.098F; + + @Override + public void render(TileEntityScreen screen, double par2, double par4, double par6, float partialTickTime, int par9, float alpha) + { + GL11.glPushMatrix(); + // Texture file + this.renderEngine.bindTexture(TileEntityScreenRenderer.blockTexture); + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + + int meta = screen.getBlockMetadata(); + boolean screenData = (meta >= 8); + meta &= 7; + + switch (meta) + { + case 0: + GL11.glRotatef(180, 1, 0, 0); + GL11.glTranslatef(0, -1.0F, -1.0F); + break; + case 1: + break; + case 2: + GL11.glTranslatef(0.0F, 0.0F, -0.87F); + GL11.glRotatef(90, 1.0F, 0, 0); + GL11.glTranslatef(0.0F, 0.0F, -1.0F); + break; + case 3: + GL11.glTranslatef(0.0F, 0.0F, 0.87F); + GL11.glRotatef(90, -1.0F, 0, 0); + GL11.glTranslatef(1.0F, -1.0F, 1.0F); + GL11.glRotatef(180, 0, -1.0F, 0); + break; + case 4: + GL11.glTranslatef(-0.87F, 0.0F, 0.0F); + GL11.glRotatef(90, 0, 0, -1.0F); + GL11.glTranslatef(-1.0F, 0.0F, 1.0F); + GL11.glRotatef(90, 0, 1.0F, 0); + break; + case 5: + GL11.glTranslatef(0.87F, 0.0F, 0.0F); + GL11.glRotatef(90, 0, 0, 1.0F); + GL11.glTranslatef(1.0F, -1.0F, 0.0F); + GL11.glRotatef(90, 0, -1.0F, 0); + break; + default: + break; + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + GL11.glTranslatef(-screen.screenOffsetx, this.yPlane, -screen.screenOffsetz); + GL11.glRotatef(90, 1F, 0F, 0F); + boolean cornerblock = false; + if (screen.connectionsLeft == 0 || screen.connectionsRight == 0) + { + cornerblock = (screen.connectionsUp == 0 || screen.connectionsDown == 0); + } + int totalLR = screen.connectionsLeft + screen.connectionsRight; + int totalUD = screen.connectionsUp + screen.connectionsDown; + if (totalLR > 1 && totalUD > 1 && !cornerblock) + { + // centre block + if (screen.connectionsLeft == screen.connectionsRight - (totalLR | 1)) + { + if (screen.connectionsUp == screen.connectionsDown - (totalUD | 1)) + { + cornerblock = true; + } + } + } + GL11.glRotatef(180, 0, 1, 0); + GL11.glTranslatef(-screen.screen.getScaleX(), 0.0F, 0.0F); + screen.screen.drawScreen(screen.imageType, partialTickTime + screen.getWorld().getWorldTime(), cornerblock); + + GL11.glPopMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntitySolarPanelRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntitySolarPanelRenderer.java new file mode 100644 index 00000000..a58fd66f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntitySolarPanelRenderer.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelSolarPanel; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class TileEntitySolarPanelRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation solarPanelTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/solar_panel_basic.png"); + private static final ResourceLocation solarPanelAdvTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/solar_panel_advanced.png"); + public ModelSolarPanel model = new ModelSolarPanel(); + + @Override + public void render(TileEntitySolar panel, double par2, double par4, double par6, float partialTickTime, int par9, float alpha) + { + boolean doSkyRotation = false; + if (panel.tierGC == 2) + { + this.bindTexture(TileEntitySolarPanelRenderer.solarPanelAdvTexture); + doSkyRotation = panel.getWorld().provider instanceof WorldProviderSpaceStation; + } else + { + this.bindTexture(TileEntitySolarPanelRenderer.solarPanelTexture); + } + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) par2, (float) par4, (float) par6); + + GL11.glTranslatef(0.5F, 1.0F, 0.5F); + if (doSkyRotation) + { + GL11.glPushMatrix(); + GL11.glRotatef(((WorldProviderSpaceStation) panel.getWorld().provider).getSkyRotation(), 0.0F, 1.0F, 0.0F); + this.model.renderPole(); + GL11.glPopMatrix(); + } else + this.model.renderPole(); + + GL11.glTranslatef(0.0F, 1.5F, 0.0F); + + GL11.glRotatef(180.0F, 0, 0, 1); + GL11.glRotatef(-90.0F, 0, 1, 0); + + float celestialAngle = (panel.getWorld().getCelestialAngle(1.0F) - 0.784690560F) * 360.0F; + float celestialAngle2 = panel.getWorld().getCelestialAngle(1.0F) * 360.0F; + + if (doSkyRotation) + { + GL11.glRotatef(((WorldProviderSpaceStation) panel.getWorld().provider).getSkyRotation(), 0.0F, -1.0F, 0.0F); + } + + GL11.glRotatef(panel.currentAngle - (celestialAngle - celestialAngle2), 1.0F, 0.0F, 0.0F); + + this.model.renderPanel(); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityTreasureChestRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityTreasureChestRenderer.java new file mode 100644 index 00000000..85c3bf5f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/render/tile/TileEntityTreasureChestRenderer.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.render.tile; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelTreasureChest; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelTreasureChestLarge; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@SideOnly(Side.CLIENT) +public class TileEntityTreasureChestRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation treasureChestTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/treasure.png"); + + private final ModelTreasureChest chestModel = new ModelTreasureChest(); + + /** + * Renders the TileEntity for the chest at a position. + */ + @Override + public void render(TileEntityTreasureChest chest, double par2, double par4, double par6, float partialTickTime, int par9, float alpha) + { + int var9; + + if (!chest.hasWorld()) + { + var9 = 0; + } else + { + var9 = chest.getBlockMetadata(); + } + + ModelTreasureChest var14 = null; + ModelTreasureChestLarge var14b = null; + + var14 = this.chestModel; + this.bindTexture(TileEntityTreasureChestRenderer.treasureChestTexture); + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) par2, (float) par4 + 1.0F, (float) par6 + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + short var11 = 0; + + if (var9 == 2) + { + var11 = 180; + } + + if (var9 == 3) + { + var11 = 0; + } + + if (var9 == 4) + { + var11 = 90; + } + + if (var9 == 5) + { + var11 = -90; + } + + GL11.glRotatef(var11, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float var12 = chest.prevLidAngle + (chest.lidAngle - chest.prevLidAngle) * partialTickTime; + + var12 = 1.0F - var12; + var12 = 1.0F - var12 * var12 * var12; + + if (var14 != null) + { + var14.chestLid.rotateAngleX = -(var12 * (float) Math.PI / 4.0F); + var14.renderAll(!chest.locked); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/DrawGameScreen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/DrawGameScreen.java new file mode 100644 index 00000000..69c5388f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/DrawGameScreen.java @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.screen; + +import java.nio.FloatBuffer; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.client.IScreenManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class DrawGameScreen implements IScreenManager +{ + + private TextureManager renderEngine = FMLClientHandler.instance().getClient().renderEngine; + private static FloatBuffer colorBuffer = GLAllocation.createDirectFloatBuffer(16); + private static int texCount = 1; + + private float tickDrawn = -1F; + public boolean initialise = true; + public boolean initialiseLast = false; + private boolean readyToInitialise = false; + private int tileCount = 0; + private int callCount = 0; + private int tickMapDone = -1; + + private float scaleX; + private float scaleZ; + + public TileEntity driver; + public Class telemetryLastClass; + public String telemetryLastName; + public Entity telemetryLastEntity; + public Render telemetryLastRender; + public static DynamicTexture reusableMap; // This will be set up in + // MapUtil.resetClientBody() + public int[] localMap = null; + public boolean mapDone = false; + public boolean mapFirstTick = false; + + public DrawGameScreen(float scaleXparam, float scaleZparam, TileEntity te) + { + this.scaleX = scaleXparam; + this.scaleZ = scaleZparam; + this.driver = te; + this.mapFirstTick = true; + } + + public boolean check(float scaleXparam, float scaleZparam) + { + if (this.mapDone) + { + return this.scaleX == scaleXparam && this.scaleZ == scaleZparam; + } + + return false; + } + + private void makeMap() + { + if (this.mapDone || reusableMap == null || GCCoreUtil.getDimensionID(this.driver.getWorld()) != 0) + { + return; + } + this.localMap = new int[MapUtil.SIZE_STD2 * MapUtil.SIZE_STD2]; + boolean result = MapUtil.getMap(this.localMap, this.driver.getWorld(), this.driver.getPos()); + if (result) + { + TextureUtil.uploadTexture(reusableMap.getGlTextureId(), this.localMap, MapUtil.SIZE_STD2, MapUtil.SIZE_STD2); + mapDone = true; + } + } + + public void drawScreen(int type, float ticks, boolean cornerBlock) + { + if (type >= GalacticraftRegistry.getMaxScreenTypes()) + { + System.out.println("Wrong gamescreen type detected - this is a bug." + type); + return; + } + + if (cornerBlock) + { + if ((this.mapFirstTick || ((int) ticks) % 99 == 0) && !mapDone) + { + if (this.tickMapDone != (int) ticks) + { + this.tickMapDone = (int) ticks; + this.makeMap(); + this.mapFirstTick = false; + } + } + this.doDraw(type, ticks); + this.initialise = true; + this.initialiseLast = false; + return; + } + + // Performance code: if type > 1 then we only want + // to draw the screen once per tick, for multi-screens + + // Spend the first tick just initialising the counter + if (initialise) + { + if (!initialiseLast) + { + tickDrawn = ticks; + readyToInitialise = false; + initialiseLast = true; + return; + } + + if (!readyToInitialise) + { + if (ticks == tickDrawn) + { + return; + } + } + + if (!readyToInitialise) + { + readyToInitialise = true; + tickDrawn = ticks; + tileCount = 1; + return; + } else if (ticks == tickDrawn) + { + tileCount++; + return; + } else + { + // Start normal operations + initialise = false; + initialiseLast = false; + readyToInitialise = false; + } + } + + if (++callCount < tileCount) + { + // Normal situation, everything OK + if (callCount == 1 || tickDrawn == ticks) + { + tickDrawn = ticks; + return; + } else + // The callCount last tick was less than the tileCount, reinitialise + { + initialise = true; + // but draw this tick [probably a tileEntity moved out of the + // frustum] + } + } + + if (callCount == tileCount) + { + callCount = 0; + // Again if this is not the tickDrawn then something is wrong, + // reinitialise + if (tileCount > 1 && ticks != tickDrawn) + { + initialise = true; + } + } + + tickDrawn = ticks; + + this.doDraw(type, ticks); + } + + private void doDraw(int type, float ticks) + { + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + + if (type > 0) + { + GL11.glDisable(GL11.GL_LIGHTING); + } + + GalacticraftRegistry.getGameScreen(type).render(type, ticks, scaleX, scaleZ, this); + + if (type > 0) + { + GL11.glEnable(GL11.GL_LIGHTING); + } + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + } + + @Override + public WorldProvider getWorldProvider() + { + if (this.driver != null) + { + return driver.getWorld().provider; + } + + return null; + } + + public float getScaleZ() + { + return scaleZ; + } + + public float getScaleX() + { + return scaleX; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenBasic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenBasic.java new file mode 100644 index 00000000..a28dc641 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenBasic.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.screen; + +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.client.IScreenManager; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.render.RenderPlanet; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GameScreenBasic implements IGameScreen +{ + + private TextureManager renderEngine; + + private float frameA; + private float frameBx; + private float frameBy; + private double textureAx = 0D; + private double textureAy = 0D; + private double textureBx = 1.0D; + private double textureBy = 1.0D; + + public GameScreenBasic() + { + // This can be called from either server or client, so don't include + // client-side only code on the server. + if (GCCoreUtil.getEffectiveSide().isClient()) + { + renderEngine = FMLClientHandler.instance().getClient().renderEngine; + } + } + + @Override + public void setFrameSize(float frameSize) + { + this.frameA = frameSize; + } + + @Override + public void render(int type, float ticks, float scaleX, float scaleY, IScreenManager scr) + { + frameBx = scaleX - frameA; + frameBy = scaleY - frameA; + + if (scaleX == scaleY) + { + textureAx = 0D; + textureAy = 0D; + textureBx = 1.0D; + textureBy = 1.0D; + } else if (scaleX < scaleY) + { + textureAx = (1.0D - (scaleX / scaleY)) / 2D; + textureAy = 0D; + textureBx = 1.0D - textureAx; + textureBy = 1.0D; + } else if (scaleY < scaleX) + { + textureAx = 0D; + textureAy = (1.0D - (scaleY / scaleX)) / 2D; + textureBx = 1.0D; + textureBy = 1.0D - textureAy; + } + + switch (type) + { + case 0: + drawBlackBackground(0.09F); + break; + case 1: + if (scr instanceof DrawGameScreen && ((DrawGameScreen) scr).mapDone) + { + GlStateManager.bindTexture(DrawGameScreen.reusableMap.getGlTextureId()); + draw2DTexture(); + } else if (ClientProxyCore.overworldTexturesValid) + { + GlStateManager.pushMatrix(); + float centreX = scaleX / 2; + float centreY = scaleY / 2; + GlStateManager.translate(centreX, centreY, 0F); + RenderPlanet.renderPlanet(ClientProxyCore.overworldTextureWide.getGlTextureId(), Math.min(scaleX, scaleY) - 0.2F, ticks, 45F); + GlStateManager.popMatrix(); + } else + { + this.renderEngine.bindTexture(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png")); + if (!ClientProxyCore.overworldTextureRequestSent) + { + GalacticraftCore.packetPipeline.sendToServer( + new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {})); + ClientProxyCore.overworldTextureRequestSent = true; + } +// Overworld texture is 48x48 in a 64x64 .png file + draw2DTexture(); + } + break; + } + } + + private void draw2DTexture() + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + + worldRenderer.pos(frameA, frameBy, 0F).tex(textureAx, textureBy).endVertex(); + worldRenderer.pos(frameBx, frameBy, 0F).tex(textureBx, textureBy).endVertex(); + worldRenderer.pos(frameBx, frameA, 0F).tex(textureBx, textureAy).endVertex(); + worldRenderer.pos(frameA, frameA, 0F).tex(textureAx, textureAy).endVertex(); + tess.draw(); + } + + private void drawBlackBackground(float greyLevel) + { + GlStateManager.disableLighting(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GlStateManager.disableTexture2D(); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(greyLevel, greyLevel, greyLevel, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + worldRenderer.pos(frameA, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameA, 0.005F).endVertex(); + worldRenderer.pos(frameA, frameA, 0.005F).endVertex(); + tess.draw(); + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenCelestial.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenCelestial.java new file mode 100644 index 00000000..6786dafa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenCelestial.java @@ -0,0 +1,411 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.screen; + +import java.nio.DoubleBuffer; +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.client.IScreenManager; +import micdoodle8.mods.galacticraft.api.event.client.CelestialBodyRenderEvent; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Moon; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.galaxies.SolarSystem; +import micdoodle8.mods.galacticraft.api.galaxies.Star; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.render.RenderPlanet; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.vector.Vector3f; + +public class GameScreenCelestial implements IGameScreen +{ + + private TextureManager renderEngine; + + private float frameA; + private float frameBx; + private float frameBy; + private float centreX; + private float centreY; + private float scale; + + private final int lineSegments = 90; + private final float cos = MathHelper.cos(Constants.twoPI / lineSegments); + private final float sin = MathHelper.sin(Constants.twoPI / lineSegments); + + private DoubleBuffer planes; + + public GameScreenCelestial() + { + if (GCCoreUtil.getEffectiveSide().isClient()) + { + renderEngine = FMLClientHandler.instance().getClient().renderEngine; + planes = BufferUtils.createDoubleBuffer(4 * Double.SIZE); + } + } + + @Override + public void setFrameSize(float frameSize) + { + this.frameA = frameSize; + } + + @Override + public void render(int type, float ticks, float scaleX, float scaleY, IScreenManager scr) + { + centreX = scaleX / 2; + centreY = scaleY / 2; + frameBx = scaleX - frameA; + frameBy = scaleY - frameA; + this.scale = Math.max(scaleX, scaleY) - 0.2F; + + drawBlackBackground(0.0F); + + planeEquation(frameA, frameA, 0, frameA, frameBy, 0, frameA, frameBy, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE0, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE0); + planeEquation(frameBx, frameBy, 0, frameBx, frameA, 0, frameBx, frameA, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE1, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE1); + planeEquation(frameA, frameBy, 0, frameBx, frameBy, 0, frameBx, frameBy, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE2, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE2); + planeEquation(frameBx, frameA, 0, frameA, frameA, 0, frameA, frameA, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE3, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE3); + + switch (type) + { + case 2: + WorldProvider wp = scr.getWorldProvider(); + CelestialBody body = null; + if (wp instanceof IGalacticraftWorldProvider) + { + body = ((IGalacticraftWorldProvider) wp).getCelestialBody(); + } + if (body == null) + { + body = GalacticraftCore.planetOverworld; + } + drawCelestialBodies(body, ticks); + break; + case 3: + drawCelestialBodiesZ(GalacticraftCore.planetOverworld, ticks); + break; + case 4: + drawPlanetsTest(ticks); + break; + } + + GL11.glDisable(GL11.GL_CLIP_PLANE3); + GL11.glDisable(GL11.GL_CLIP_PLANE2); + GL11.glDisable(GL11.GL_CLIP_PLANE1); + GL11.glDisable(GL11.GL_CLIP_PLANE0); + } + + private void drawBlackBackground(float greyLevel) + { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GL11.glColor4f(greyLevel, greyLevel, greyLevel, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + worldRenderer.pos(frameA, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameA, 0.005F).endVertex(); + worldRenderer.pos(frameA, frameA, 0.005F).endVertex(); + tess.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + private void drawCelestialBodies(CelestialBody body, float ticks) + { + Star star = null; + SolarSystem solarSystem = null; + if (body instanceof Planet) + { + solarSystem = ((Planet) body).getParentSolarSystem(); + } else if (body instanceof Moon) + { + solarSystem = ((Moon) body).getParentPlanet().getParentSolarSystem(); + } else if (body instanceof Satellite) + { + solarSystem = ((Satellite) body).getParentPlanet().getParentSolarSystem(); + } + + if (solarSystem == null) + { + solarSystem = GalacticraftCore.solarSystemSol; + } + star = solarSystem.getMainStar(); + + if (star != null && star.getBodyIcon() != null) + { + this.drawCelestialBody(star, 0F, 0F, ticks, 6F); + } + + String mainSolarSystem = solarSystem.getTranslationKey(); + for (Planet planet : GalaxyRegistry.getRegisteredPlanets().values()) + { + if (planet.getParentSolarSystem() != null && planet.getBodyIcon() != null) + { + if (planet.getParentSolarSystem().getTranslationKey().equalsIgnoreCase(mainSolarSystem)) + { + Vector3f pos = this.getCelestialBodyPosition(planet, ticks); + this.drawCircle(planet); + this.drawCelestialBody(planet, pos.x, pos.y, ticks, (planet.getRelativeDistanceFromCenter().unScaledDistance < 1.5F) ? 2F : 2.8F); + } + } + } + } + + private void drawCelestialBodiesZ(CelestialBody planet, float ticks) + { + this.drawCelestialBody(planet, 0F, 0F, ticks, 11F); + + for (Moon moon : GalaxyRegistry.getRegisteredMoons().values()) + { + if (moon.getParentPlanet() == planet && moon.getBodyIcon() != null) + { + Vector3f pos = this.getCelestialBodyPosition(moon, ticks); + this.drawCircle(moon); + this.drawCelestialBody(moon, pos.x, pos.y, ticks, 4F); + } + } + + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + if (satellite.getParentPlanet() == planet) + { + Vector3f pos = this.getCelestialBodyPosition(satellite, ticks); + this.drawCircle(satellite); + this.drawCelestialBody(satellite, pos.x, pos.y, ticks, 3F); + } + } + } + + private void drawTexturedRectCBody(float x, float y, float width, float height) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, y + height, 0F).tex(0D, 1.0).endVertex(); + worldRenderer.pos(x + width, y + height, 0F).tex(1.0, 1.0).endVertex(); + worldRenderer.pos(x + width, y, 0F).tex(1.0, 0D).endVertex(); + worldRenderer.pos(x, y, 0F).tex(0D, 0D).endVertex(); + tessellator.draw(); + } + + private void drawCelestialBody(CelestialBody planet, float xPos, float yPos, float ticks, float relSize) + { + if (xPos + centreX > frameBx || xPos + centreX < frameA) + { + return; + } + if (yPos + centreY > frameBy || yPos + centreY < frameA) + { + return; + } + + GL11.glPushMatrix(); + GL11.glTranslatef(xPos + centreX, yPos + centreY, 0F); + + float alpha = 1.0F; + + CelestialBodyRenderEvent.Pre preEvent = new CelestialBodyRenderEvent.Pre(planet, planet.getBodyIcon(), 12); + MinecraftForge.EVENT_BUS.post(preEvent); + + GL11.glColor4f(1, 1, 1, alpha); + if (preEvent.celestialBodyTexture != null) + { + this.renderEngine.bindTexture(preEvent.celestialBodyTexture); + } + + if (!preEvent.isCanceled()) + { + float size = relSize / 70 * scale; + this.drawTexturedRectCBody(-size / 2, -size / 2, size, size); + } + + CelestialBodyRenderEvent.Post postEvent = new CelestialBodyRenderEvent.Post(planet); + MinecraftForge.EVENT_BUS.post(postEvent); + + GL11.glPopMatrix(); + } + + private void drawCircle(CelestialBody cBody) + { + GL11.glPushMatrix(); + GL11.glTranslatef(centreX, centreY, 0.002F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + float sd = 0.002514F * scale; + float x = this.getScale(cBody); + float y = 0; + float grey = 0.1F + 0.65F * Math.max(0F, (0.5F - x)); + x = x * scale / sd; + + GL11.glColor4f(grey, grey, grey, 1.0F); + GL11.glLineWidth(0.002F); + + GL11.glScalef(sd, sd, sd); + CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre preEvent = new CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre(cBody, new Vector3f(0.0F, 0.0F, 0.0F)); + MinecraftForge.EVENT_BUS.post(preEvent); + + if (!preEvent.isCanceled()) + { + GL11.glBegin(GL11.GL_LINE_LOOP); + + float temp; + for (int i = 0; i < lineSegments; i++) + { + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + } + + GL11.glEnd(); + } + + CelestialBodyRenderEvent.CelestialRingRenderEvent.Post postEvent = new CelestialBodyRenderEvent.CelestialRingRenderEvent.Post(cBody); + MinecraftForge.EVENT_BUS.post(postEvent); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glPopMatrix(); + } + + private Vector3f getCelestialBodyPosition(CelestialBody cBody, float ticks) + { + float timeScale = cBody instanceof Planet ? 200.0F : 2.0F; + float distanceFromCenter = this.getScale(cBody) * scale; + return new Vector3f((float) Math.sin(ticks / (timeScale * cBody.getRelativeOrbitTime()) + cBody.getPhaseShift()) * distanceFromCenter, + (float) Math.cos(ticks / (timeScale * cBody.getRelativeOrbitTime()) + cBody.getPhaseShift()) * distanceFromCenter, 0); + } + + private float getScale(CelestialBody celestialBody) + { + float distance = celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + if (distance >= 1.375F) + { + if (distance >= 1.5F) + { + distance *= 1.15F; + } else + { + distance += 0.075F; + } + } + return 1 / 140.0F * distance * (celestialBody instanceof Planet ? 25.0F : 3.5F); + } + + private void planeEquation(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3) + { + double[] result = new double[4]; + result[0] = y1 * (z2 - z3) + y2 * (z3 - z1) + y3 * (z1 - z2); + result[1] = z1 * (x2 - x3) + z2 * (x3 - x1) + z3 * (x1 - x2); + result[2] = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2); + result[3] = -(x1 * (y2 * z3 - y3 * z2) + x2 * (y3 * z1 - y1 * z3) + x3 * (y1 * z2 - y2 * z1)); + planes.put(result, 0, 4); + planes.position(0); + } + + private void drawPlanetsTest(float ticks) + { + GL11.glPushMatrix(); + GL11.glTranslatef(centreX, centreY, 0F); + + int id = (int) (ticks / 600F) % 5; + RenderPlanet.renderID(id, scale, ticks); + GL11.glPopMatrix(); + } + + private void drawTexturedRectUV(float x, float y, float width, float height, float ticks) + { + for (int ysect = 0; ysect < 6; ysect++) + { + float angle = 7.5F + 15F * ysect; + drawTexturedRectUVSixth(x, y, width, height, (ticks / (900F - 80F * MathHelper.cos(angle))) % 1F, ysect / 6F); + } + } + + private void drawTexturedRectUVSixth(float x, float y, float width, float height, float prog, float y0) + { + y0 /= 2; + prog = 1.0F - prog; + float y1 = y0 + 1 / 12F; + float y2 = 1F - y1; + float y3 = 1F - y0; + float yaa = y + height * y0; + float yab = y + height * y1; + float yba = y + height * y2; + float ybb = y + height * y3; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + if (prog <= 0.75F) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, yab, 0F).tex(prog, y1).endVertex(); + worldRenderer.pos(x + width, yab, 0F).tex(prog + 0.25F, y1).endVertex(); + worldRenderer.pos(x + width, yaa, 0F).tex(prog + 0.25F, y0).endVertex(); + worldRenderer.pos(x, yaa, 0F).tex(prog, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, ybb, 0F).tex(prog, y3).endVertex(); + worldRenderer.pos(x + width, ybb, 0F).tex(prog + 0.25F, y3).endVertex(); + worldRenderer.pos(x + width, yba, 0F).tex(prog + 0.25F, y2).endVertex(); + worldRenderer.pos(x, yba, 0F).tex(prog, y2).endVertex(); + tessellator.draw(); + } else + { + double xp = x + width * (1F - prog) / 0.25F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, yab, 0F).tex(prog, y1).endVertex(); + worldRenderer.pos(xp, yab, 0F).tex(1.0F, y1).endVertex(); + worldRenderer.pos(xp, yaa, 0F).tex(1.0F, y0).endVertex(); + worldRenderer.pos(x, yaa, 0F).tex(prog, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(x, ybb, 0F).tex(prog, y3).endVertex(); + worldRenderer.pos(xp, ybb, 0F).tex(1.0F, y3).endVertex(); + worldRenderer.pos(xp, yba, 0F).tex(1.0F, y2).endVertex(); + worldRenderer.pos(x, yba, 0F).tex(prog, y2).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(xp, yab, 0F).tex(0F, y1).endVertex(); + worldRenderer.pos(x + width, yab, 0F).tex(prog - 0.75F, y1).endVertex(); + worldRenderer.pos(x + width, yaa, 0F).tex(prog - 0.75F, y0).endVertex(); + worldRenderer.pos(xp, yaa, 0F).tex(0F, y0).endVertex(); + tessellator.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(xp, ybb, 0F).tex(0F, y3).endVertex(); + worldRenderer.pos(x + width, ybb, 0F).tex(prog - 0.75F, y3).endVertex(); + worldRenderer.pos(x + width, yba, 0F).tex(prog - 0.75F, y2).endVertex(); + worldRenderer.pos(xp, yba, 0F).tex(0F, y2).endVertex(); + tessellator.draw(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenText.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenText.java new file mode 100644 index 00000000..c55ab717 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/screen/GameScreenText.java @@ -0,0 +1,466 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.screen; + +import java.lang.reflect.Method; +import java.nio.DoubleBuffer; +import micdoodle8.mods.galacticraft.api.client.IGameScreen; +import micdoodle8.mods.galacticraft.api.client.IScreenManager; +import micdoodle8.mods.galacticraft.api.entity.ITelemetry; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityOtherPlayerMP; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; + +public class GameScreenText implements IGameScreen +{ + + private float frameA; + private float frameBx; + private float frameBy; + private int yPos; + private DoubleBuffer planes; + private Method renderModelMethod; + private Method renderLayersMethod; + + public GameScreenText() + { + if (GCCoreUtil.getEffectiveSide().isClient()) + { + planes = BufferUtils.createDoubleBuffer(4 * Double.SIZE); + try + { + Class clazz = RenderLivingBase.class; + int count = 0; + for (Method m : clazz.getDeclaredMethods()) + { + String s = m.getName(); + if (s.equals(GCCoreUtil.isDeobfuscated() ? "renderModel" : "func_77036_a")) + { + m.setAccessible(true); + this.renderModelMethod = m; + if (count == 1) + break; + count = 1; + } else if (s.equals(GCCoreUtil.isDeobfuscated() ? "renderLayers" : "func_177093_a")) + { + m.setAccessible(true); + this.renderLayersMethod = m; + if (count == 1) + break; + count = 1; + } + } + } catch (Exception e) + { + } + } + } + + @Override + public void setFrameSize(float frameSize) + { + this.frameA = frameSize; + } + + + // TODO: Pretty this up a bit maybe? + @Override + @SideOnly(Side.CLIENT) + public void render(int type, float ticks, float sizeX, float sizeY, IScreenManager scr) + { + DrawGameScreen screen = (DrawGameScreen) scr; + + frameBx = sizeX - frameA; + frameBy = sizeY - frameA; + drawBlackBackground(0.0F); + planeEquation(frameA, frameA, 0, frameA, frameBy, 0, frameA, frameBy, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE0, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE0); + planeEquation(frameBx, frameBy, 0, frameBx, frameA, 0, frameBx, frameA, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE1, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE1); + planeEquation(frameA, frameBy, 0, frameBx, frameBy, 0, frameBx, frameBy, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE2, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE2); + planeEquation(frameBx, frameA, 0, frameA, frameA, 0, frameA, frameA, 1); + GL11.glClipPlane(GL11.GL_CLIP_PLANE3, planes); + GL11.glEnable(GL11.GL_CLIP_PLANE3); + yPos = 0; + + TileEntityTelemetry telemeter = TileEntityTelemetry.getNearest(screen.driver); + // Make the text to draw. To look good it's important the width and + // height + // of the whole text box are correctly set here. + String strName = ""; + String[] str = + {GCCoreUtil.translate("gui.display.nolink"), "", "", "", ""}; + Render renderEntity = null; + Entity entity = null; + float Xmargin = 0; + + if (telemeter != null && telemeter.clientData.length >= 3) + { + if (telemeter.clientClass != null) + { + if (telemeter.clientClass == screen.telemetryLastClass && (telemeter.clientClass != EntityPlayerMP.class || telemeter.clientName.equals(screen.telemetryLastName))) + { + // Used cached data from last time if possible + entity = screen.telemetryLastEntity; + renderEntity = screen.telemetryLastRender; + strName = screen.telemetryLastName; + } else + { + // Create an entity to render, based on class, and get its + // name + entity = null; + + if (telemeter.clientClass == EntityPlayerMP.class) + { + strName = telemeter.clientName; + entity = new EntityOtherPlayerMP(screen.driver.getWorld(), telemeter.clientGameProfile); + renderEntity = (Render) FMLClientHandler.instance().getClient().getRenderManager().getEntityRenderObject(entity); + } else + { + try + { + entity = (Entity) telemeter.clientClass.getConstructor(World.class).newInstance(screen.driver.getWorld()); + } catch (Exception ex) + { + } + if (entity != null) + { + strName = entity.getName(); + } + renderEntity = (Render) FMLClientHandler.instance().getClient().getRenderManager().entityRenderMap.get(telemeter.clientClass); + } + } + + // Setup special visual types from data sent by Telemetry + if (entity instanceof EntityHorse) + { +// ((EntityHorse) entity).setType(HorseType.values()[telemeter.clientData[3]]); + ((EntityHorse) entity).setHorseVariant(telemeter.clientData[4]); + } + if (entity instanceof EntityVillager) + { + ((EntityVillager) entity).setProfession(telemeter.clientData[3]); + ((EntityVillager) entity).setGrowingAge(telemeter.clientData[4]); + } else if (entity instanceof EntityWolf) + { + ((EntityWolf) entity).setCollarColor(EnumDyeColor.byDyeDamage(telemeter.clientData[3])); + ((EntityWolf) entity).setBegging(telemeter.clientData[4] == 1); + } else if (entity instanceof EntitySheep) + { + ((EntitySheep) entity).setFleeceColor(EnumDyeColor.byDyeDamage(telemeter.clientData[3])); + ((EntitySheep) entity).setSheared(telemeter.clientData[4] == 1); + } else if (entity instanceof EntityOcelot) + { + ((EntityOcelot) entity).setTameSkin(telemeter.clientData[3]); + } else if (entity instanceof EntitySkeleton) + { +// ((EntitySkeleton) entity).setSkeletonType(SkeletonType.values()[telemeter.clientData[3]]); + } else if (entity instanceof EntityZombie) + { +// ((EntityZombie) entity).setVillager(telemeter.clientData[3] == 1); TODO Fix for MC 1.10 + ((EntityZombie) entity).setChild(telemeter.clientData[4] == 1); + } + + } + + if (entity instanceof ITelemetry) + { + ((ITelemetry) entity).receiveData(telemeter.clientData, str); + } else if (entity instanceof EntityLivingBase) + { + // Living entity: + // data0 = time to show red damage + // data1 = health in half-hearts + // data2 = pulse + // data3 = hunger (for player); horsetype (for horse) + // data4 = oxygen (for player); horsevariant (for horse) + str[0] = telemeter.clientData[0] > 0 ? GCCoreUtil.translate("gui.player.ouch") : ""; + if (telemeter.clientData[1] >= 0) + { + str[1] = GCCoreUtil.translate("gui.player.health") + ": " + telemeter.clientData[1] + "%"; + } else + { + str[1] = ""; + } + str[2] = "" + telemeter.clientData[2] + " " + GCCoreUtil.translate("gui.player.bpm"); + if (telemeter.clientData[3] > -1) + { + str[3] = GCCoreUtil.translate("gui.player.food") + ": " + telemeter.clientData[3] + "%"; + } + if (telemeter.clientData[4] > -1) + { + int oxygen = telemeter.clientData[4]; + oxygen = (oxygen % 4096) + (oxygen / 4096); + if (oxygen == 180 || oxygen == 90) + { + str[4] = GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": OK"; + } else + { + str[4] = GCCoreUtil.translate("gui.oxygen_storage.desc.1") + ": " + this.makeOxygenString(oxygen) + GCCoreUtil.translate("gui.seconds"); + } + } + } else + // Generic - could be boats or minecarts etc - just show the speed + // TODO can add more here, e.g. position data? + if (telemeter.clientData[2] >= 0) + { + str[2] = makeSpeedString(telemeter.clientData[2]); + } + } else + { + // Default - draw a simple time display just to show the Display + // Screen is working + World w1 = screen.driver.getWorld(); + int time1 = w1 != null ? (int) ((w1.getWorldTime() + 6000L) % 24000L) : 0; + str[2] = makeTimeString(time1 * 360); + } + + int textWidthPixels = 155; + int textHeightPixels = 60; // 1 lines + if (str[3].isEmpty()) + { + textHeightPixels -= 10; + } + if (str[4].isEmpty()) + { + textHeightPixels -= 10; + } + + // First pass - approximate border size + float borders = frameA * 2 + 0.05F * Math.min(sizeX, sizeY); + float scaleXTest = (sizeX - borders) / textWidthPixels; + float scaleYTest = (sizeY - borders) / textHeightPixels; + float scale = sizeX; + if (scaleYTest < scaleXTest) + { + scale = sizeY; + } + // Second pass - the border size may be more accurate now + borders = frameA * 2 + 0.05F * scale; + scaleXTest = (sizeX - borders) / textWidthPixels; + scaleYTest = (sizeY - borders) / textHeightPixels; + scale = sizeX; + float scaleText = scaleXTest; + if (scaleYTest < scaleXTest) + { + scale = sizeY; + scaleText = scaleYTest; + } + + // Centre the text in the display + float border = frameA + 0.025F * scale; + if (entity != null && renderEntity != null) + { + Xmargin = (sizeX - borders) / 2; + } + float Xoffset = (sizeX - borders - textWidthPixels * scaleText) / 2 + Xmargin; + float Yoffset = (sizeY - borders - textHeightPixels * scaleText) / 2 + scaleText; + GL11.glTranslatef(border + Xoffset, border + Yoffset, 0.0F); + GL11.glScalef(scaleText, scaleText, 1.0F); + + // Actually draw the text + int whiteColour = ColorUtil.to32BitColor(255, 240, 216, 255); + drawText(strName, whiteColour); + drawText(str[0], whiteColour); + drawText(str[1], whiteColour); + drawText(str[2], whiteColour); + drawText(str[3], whiteColour); + drawText(str[4], whiteColour); + + // If there is an entity to render, draw it on the left of the text + if (renderEntity != null && entity != null) + { + GL11.glTranslatef(-Xmargin / 2 / scaleText, textHeightPixels / 2 + (-Yoffset + (sizeY - borders) / 2) / scaleText, -0.0005F); + float scalefactor = 38F / (float) Math.pow(Math.max(entity.height, entity.width), 0.65); + GL11.glScalef(scalefactor, scalefactor, 0.0015F); + GL11.glRotatef(180F, 0, 0, 1); + GL11.glRotatef(180F, 0, 1, 0); + if (entity instanceof ITelemetry) + { + ((ITelemetry) entity).adjustDisplay(telemeter.clientData); + } + RenderPlayerGC.flagThermalOverride = true; + if (entity instanceof EntityLivingBase && renderEntity instanceof RenderLivingBase && renderModelMethod != null) + { + this.renderLiving((EntityLivingBase) entity, (RenderLivingBase) renderEntity, ticks % 1F); + } else + { + renderEntity.doRender(entity, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F); + } + RenderPlayerGC.flagThermalOverride = false; +// GL11.glEnable(GL12.GL_RESCALE_NORMAL); +// OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); +// GL11.glDisable(GL11.GL_TEXTURE_2D); +// OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + // TODO Cross-dimensional tracking (i.e. old entity setDead, new entity + // created) + // TODO Deal with text off screen (including where localizations longer + // than English) + + screen.telemetryLastClass = (telemeter == null) ? null : telemeter.clientClass; + screen.telemetryLastEntity = entity; + screen.telemetryLastRender = renderEntity; + screen.telemetryLastName = strName; + GL11.glDisable(GL11.GL_CLIP_PLANE3); + GL11.glDisable(GL11.GL_CLIP_PLANE2); + GL11.glDisable(GL11.GL_CLIP_PLANE1); + GL11.glDisable(GL11.GL_CLIP_PLANE0); + } + + // This is a simplified version of doRender() in RenderLivingEntity + // No lighting adjustment, no sitting, no name text, no sneaking and no + // Forge events + private void renderLiving(EntityLivingBase entity, RenderLivingBase render, float partialTicks) + { + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + render.getMainModel().isChild = entity.isChild(); + + try + { + float f = 0F; + float f1 = 0F; + float f2 = f1 - f; + float f7 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + float f8 = 0F; + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + float f4 = 0.0625F; + GlStateManager.translate(0.0F, -1.5078125F, 0.0F); + float f5 = entity.prevLimbSwingAmount + (entity.limbSwingAmount - entity.prevLimbSwingAmount) * partialTicks; + float f6 = entity.limbSwing - entity.limbSwingAmount * (1.0F - partialTicks); + + if (entity.isChild()) + { + f6 *= 3.0F; + } + + if (f5 > 1.0F) + { + f5 = 1.0F; + } + + GlStateManager.enableAlpha(); + render.getMainModel().setLivingAnimations(entity, f6, f5, partialTicks); + render.getMainModel().setRotationAngles(f6, f5, f8, f2, f7, 0.0625F, entity); + + renderModelMethod.invoke(render, entity, f6, f5, f8, f2, f7, 0.0625F); + GlStateManager.depthMask(true); + renderLayersMethod.invoke(render, entity, f6, f5, partialTicks, f8, f2, f7, 0.0625F); + + GlStateManager.disableRescaleNormal(); + } catch (Exception exception) + { + } + + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.enableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.enableCull(); + GlStateManager.popMatrix(); + } + + private String makeTimeString(int l) + { + int hrs = l / 360000; + int mins = l / 6000 - hrs * 60; + int secs = l / 100 - hrs * 3600 - mins * 60; + String hrsStr = hrs > 9 ? "" + hrs : "0" + hrs; + String minsStr = mins > 9 ? "" + mins : "0" + mins; + String secsStr = secs > 9 ? "" + secs : "0" + secs; + return hrsStr + ":" + minsStr + ":" + secsStr; + } + + public static String makeSpeedString(int speed100) + { + int sp1 = speed100 / 100; + int sp2 = (speed100 % 100); + String spstr1 = GCCoreUtil.translate("gui.rocket.speed") + ": " + sp1; + String spstr2 = (sp2 > 9 ? "" : "0") + sp2; + return spstr1 + "." + spstr2 + " " + GCCoreUtil.translate("gui.lander.velocityu"); + } + + private String makeOxygenString(int oxygen) + { + // Server takes 1 air away every 9 ticks (OxygenUtil.getDrainSpacing) + int sp1 = oxygen * 9 / 20; + int sp2 = ((oxygen * 9) % 20) / 2; + String spstr1 = "" + sp1; + String spstr2 = "" + sp2; + return spstr1 + "." + spstr2; + } + + private void drawText(String str, int colour) + { + Minecraft.getMinecraft().fontRenderer.drawString(str, 0, yPos, colour, false); + yPos += 10; + } + + private void drawBlackBackground(float greyLevel) + { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GL11.glColor4f(greyLevel, greyLevel, greyLevel, 1.0F); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(frameA, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameBy, 0.005F).endVertex(); + worldRenderer.pos(frameBx, frameA, 0.005F).endVertex(); + worldRenderer.pos(frameA, frameA, 0.005F).endVertex(); + tess.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + private void planeEquation(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3) + { + double[] result = new double[4]; + result[0] = y1 * (z2 - z3) + y2 * (z3 - z1) + y3 * (z1 - z2); + result[1] = z1 * (x2 - x3) + z2 * (x3 - x1) + z3 * (x1 - x2); + result[2] = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2); + result[3] = -(x1 * (y2 * z3 - y3 * z2) + x2 * (y3 * z1 - y1 * z3) + x3 * (y1 * z2 - y2 * z1)); + planes.put(result, 0, 4); + planes.position(0); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/GCSounds.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/GCSounds.java new file mode 100644 index 00000000..5bcff4d1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/GCSounds.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.sounds; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.registries.IForgeRegistry; + +public class GCSounds +{ + + public static SoundEvent bossDeath; + public static SoundEvent bossLaugh; + public static SoundEvent bossOoh; + public static SoundEvent bossOuch; + public static SoundEvent slimeDeath; + public static SoundEvent astroMiner; + public static SoundEvent shuttle; + public static SoundEvent parachute; + public static SoundEvent openAirLock; + public static SoundEvent closeAirLock; + public static SoundEvent singleDrip; + public static SoundEvent scaryScape; + public static SoundEvent deconstructor; + public static SoundEvent advanced_compressor; + public static SoundEvent laserCharge; + public static SoundEvent laserShoot; + + public static SoundEvent music; + + public static void registerSounds(IForgeRegistry registry) + { + bossDeath = registerSound("entity.bossdeath", registry); + bossLaugh = registerSound("entity.bosslaugh", registry); + bossOoh = registerSound("entity.ooh", registry); + bossOuch = registerSound("entity.ouch", registry); + slimeDeath = registerSound("entity.slime_death", registry); + astroMiner = registerSound("entity.astrominer", registry); + shuttle = registerSound("shuttle.shuttle", registry); + parachute = registerSound("player.parachute", registry); + openAirLock = registerSound("player.openairlock", registry); + closeAirLock = registerSound("player.closeairlock", registry); + singleDrip = registerSound("ambience.singledrip", registry); + scaryScape = registerSound("ambience.scaryscape", registry); + music = registerSound("galacticraft.music_space", registry); + deconstructor = registerSound("block.deconstructor", registry); + advanced_compressor = registerSound("player.unlockchest", registry); + laserCharge = registerSound("laser.charge", registry); + laserShoot = registerSound("laser.shoot", registry); + } + + private static SoundEvent registerSound(String soundName, IForgeRegistry registry) + { + ResourceLocation soundID = new ResourceLocation(Constants.ASSET_PREFIX, soundName); + SoundEvent result = new SoundEvent(soundID).setRegistryName(soundID); + registry.register(result); + return result; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/MusicTickerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/MusicTickerGC.java new file mode 100644 index 00000000..cb714e4c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/MusicTickerGC.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.sounds; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.MusicTicker; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class MusicTickerGC extends MusicTicker +{ + + public MusicTickerGC(Minecraft mc) + { + super(mc); + } + + @Override + public void update() + { + MusicTicker.MusicType musictype = this.mc.getAmbientMusicType(); + if (FMLClientHandler.instance().getWorldClient() != null && FMLClientHandler.instance().getWorldClient().provider instanceof IGalacticraftWorldProvider) + { + musictype = ClientProxyCore.MUSIC_TYPE_MARS; + } + + if (this.currentMusic != null) + { + if (!musictype.getMusicLocation().getSoundName().equals(this.currentMusic.getSoundLocation())) + { + this.mc.getSoundHandler().stopSound(this.currentMusic); + this.timeUntilNextMusic = MathHelper.getInt(this.rand, 0, musictype.getMinDelay() / 2); + } + + if (!this.mc.getSoundHandler().isSoundPlaying(this.currentMusic)) + { + this.currentMusic = null; + this.timeUntilNextMusic = Math.min(MathHelper.getInt(this.rand, musictype.getMinDelay(), musictype.getMaxDelay()), this.timeUntilNextMusic); + } + } + + this.timeUntilNextMusic = Math.min(this.timeUntilNextMusic, musictype.getMaxDelay()); + + if (this.currentMusic == null && this.timeUntilNextMusic-- <= 0) + { + this.playMusic(musictype); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/SoundUpdaterRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/SoundUpdaterRocket.java new file mode 100644 index 00000000..a3a06d97 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/client/sounds/SoundUpdaterRocket.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.client.sounds; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.audio.MovingSound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.util.SoundCategory; + +/** + * This file is part of the Galacticraft project + * + * @author micdoodle8 + */ +public class SoundUpdaterRocket extends MovingSound +{ + + private final EntityPlayerSP thePlayer; + private final EntityAutoRocket theRocket; + private boolean soundStopped; + private boolean ignition = false; + + public SoundUpdaterRocket(EntityPlayerSP entityPlayerSP, EntityAutoRocket par2Entity) + { + super(GCSounds.shuttle, SoundCategory.NEUTRAL); + this.theRocket = par2Entity; + this.thePlayer = entityPlayerSP; + this.attenuationType = ISound.AttenuationType.NONE; + this.volume = 0.00001F; // If it's zero it won't start playing + this.pitch = 0.0F; // pitch + this.repeat = true; + this.repeatDelay = 0; // repeat delay + this.updateSoundLocation(par2Entity); + } + + /** + * Updates the JList with a new model. + */ + @Override + public void update() + { + if (!this.theRocket.isDead) + { + if (this.theRocket.launchPhase == EnumLaunchPhase.IGNITED.ordinal()) + { + if (!ignition) + { + this.pitch = 0.0F; + ignition = true; + } + if (this.theRocket.timeUntilLaunch < this.theRocket.getPreLaunchWait()) + { + if (this.pitch < 1.0F) + { + this.pitch += 0.0025F; + } + + if (this.pitch > 1.0F) + { + this.pitch = 1.0F; + } + } + } else + { + this.pitch = 1.0F; + } + + if (this.theRocket.launchPhase >= EnumLaunchPhase.IGNITED.ordinal()) + { + if (this.theRocket.posY > 1000) + { + this.volume = 0F; + if (this.theRocket.launchPhase != EnumLaunchPhase.LANDING.ordinal()) + { + this.donePlaying = true; + } + } else if (this.theRocket.posY > Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + this.volume = 1.0F - (float) ((this.theRocket.posY - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) / (1000.0 - Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT)); + } else + { + this.volume = 1.0F; + } + } + + this.updateSoundLocation(this.theRocket); + } else + { + this.donePlaying = true; + } + } + + public void stopRocketSound() + { + this.donePlaying = true; + this.soundStopped = true; + } + + public void updateSoundLocation(Entity e) + { + this.xPosF = (float) e.posX; + this.yPosF = (float) e.posY; + this.zPosF = (float) e.posZ; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCAstroMiner.java new file mode 100644 index 00000000..a28d87d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCAstroMiner.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.List; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandGCAstroMiner extends CommandBase +{ + + @Override + public String getName() + { + return "gcastrominer"; + } + + @Override + public String getUsage(ICommandSender sender) + { + return "/" + this.getName() + " [show|reset|set] "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, "show", "set", "reset"); + } + if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + return null; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 1; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length > 2) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.dimensiontp.too_many", this.getUsage(sender)), new Object[0]); + } + if (args.length < 1) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssinvite.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + int type = 0; + int newvalue = 0; + if (args[0].equalsIgnoreCase("show")) + { + type = 1; + } else if (args[0].equalsIgnoreCase("reset")) + { + type = 2; + } else if (args[0].length() > 3 && args[0].substring(0, 3).equalsIgnoreCase("set")) + { + String number = args[0].substring(3); + try + { + newvalue = Integer.parseInt(number); + if (newvalue > 0) + { + type = 3; + } + } catch (NumberFormatException ex) + { + } + } + + // Proceed if syntax of show|reset|set was correct + if (type > 0) + { + EntityPlayerMP playerBase = null; + try + { + if (args.length == 2) + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[1], true); + } else + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + } + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + switch (type) + { + case 1: + sender.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("command.gcastrominer.count", PlayerUtil.getName(playerBase), "" + stats.getAstroMinerCount()))); + break; + case 2: + stats.setAstroMinerCount(0); + sender.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("command.gcastrominer.count", PlayerUtil.getName(playerBase), "" + 0))); + break; + case 3: + stats.setAstroMinerCount(newvalue); + sender.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("command.gcastrominer.count", PlayerUtil.getName(playerBase), "" + newvalue))); + break; + } + } else + { + throw new Exception("Could not find player with name: " + args[1]); + } + } catch (final Exception e) + { + throw new CommandException(e.getMessage(), new Object[0]); + } + return; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCEnergyUnits.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCEnergyUnits.java new file mode 100644 index 00000000..b6e4e1ad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCEnergyUnits.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandGCEnergyUnits extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + String options = " [gJ"; + if (EnergyConfigHandler.isBuildcraftLoaded()) + { + options = options + "|MJ"; + } + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + options = options + "|EU"; + } + if (EnergyConfigHandler.isMekanismLoaded()) + { + options = options + "|J"; + } + options = options + "|RF"; + return "/" + this.getName() + options + "]"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "gcenergyunits"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + if (playerBase == null) + { + return; + } + + if (args.length == 1) + { + String param = args[0].toLowerCase(); + if (param.length() <= 2) + { + int paramvalue = 0; + if ("gj".equals(param)) + { + paramvalue = 1; + } else if ("mj".equals(param) && EnergyConfigHandler.isBuildcraftLoaded()) + { + paramvalue = 2; + } else if ("eu".equals(param) && EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + paramvalue = 3; + } else if ("j".equals(param) && EnergyConfigHandler.isMekanismLoaded()) + { + paramvalue = 4; + } else if ("rf".equals(param)) + { + paramvalue = 5; + } + + if (paramvalue > 0) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_ENERGYUNITS, GCCoreUtil.getDimensionID(playerBase.world), new Object[] + {paramvalue}), playerBase); + return; + } + + } + + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.gcenergyunits.invalid_units", this.getUsage(sender)), new Object[0]); + } + + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.gcenergyunits.no_units", this.getUsage(sender)), new Object[0]); + } + + public static void handleParamClientside(int param) + { + if (param == 1) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = false; + EnergyConfigHandler.displayEnergyUnitsRF = false; + return; + } + + if (param == 2 && EnergyConfigHandler.isBuildcraftLoaded()) + { + EnergyConfigHandler.displayEnergyUnitsBC = true; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = false; + EnergyConfigHandler.displayEnergyUnitsRF = false; + return; + } + + if (param == 3 && EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = true; + EnergyConfigHandler.displayEnergyUnitsMek = false; + EnergyConfigHandler.displayEnergyUnitsRF = false; + return; + } + + if (param == 4 && EnergyConfigHandler.isMekanismLoaded()) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = true; + EnergyConfigHandler.displayEnergyUnitsRF = false; + return; + } + + if (param == 5) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = false; + EnergyConfigHandler.displayEnergyUnitsRF = true; + return; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHelp.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHelp.java new file mode 100644 index 00000000..ba8db05e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHelp.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.ITextComponent; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandGCHelp extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName(); + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "gchelp"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + if (playerBase == null) + { + return; + } + playerBase.sendMessage( + ITextComponent.Serializer.jsonToComponent("[{\"text\":\"" + GCCoreUtil.translate("gui.message.help1") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + + Constants.PREFIX + "com" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki" + "\"}}]")); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHouston.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHouston.java new file mode 100644 index 00000000..e94ef031 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCHouston.java @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +import com.mojang.authlib.GameProfile; + +public class CommandGCHouston extends CommandBase +{ + + private static List timerList = new LinkedList<>(); + + public static void reset() + { + timerList.clear(); + } + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " []"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "gchouston"; + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + if (args.length == 1 && this.isOp(server, sender)) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + return null; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 1; + } + + private boolean isOp(MinecraftServer server, ICommandSender sender) + { + Entity entitySender = sender.getCommandSenderEntity(); + if (entitySender == null) + { + return true; + } else if (entitySender instanceof EntityPlayer) + { + GameProfile prof = ((EntityPlayer) entitySender).getGameProfile(); + return server.getPlayerList().canSendCommands(prof); + } + return false; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = null; + boolean isOp = this.isOp(server, sender); + + if (args.length < 2) + { + try + { + if (args.length == 0) + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + if (!playerBase.capabilities.isCreativeMode) + { + if (ConfigManagerCore.challengeMode || !(playerBase.world.provider instanceof IGalacticraftWorldProvider)) + { + CommandBase.notifyCommandListener(sender, this, "commands.gchouston.fail"); + return; + } + } + + if (timerList.contains(playerBase)) + { + timerList.remove(playerBase); + } else + { + timerList.add(playerBase); + TickHandlerServer.timerHoustonCommand = 250; + String msg = EnumColor.YELLOW + GCCoreUtil.translate("commands.gchouston.confirm.1") + " " + EnumColor.WHITE + GCCoreUtil.translate("commands.gchouston.confirm.2"); + CommandBase.notifyCommandListener(sender, this, msg); + return; + } + } else + { + if (!isOp) + { + CommandBase.notifyCommandListener(sender, this, "commands.gchouston.noop"); + return; + } + + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[0], true); + } + + if (playerBase != null) + { + int dimID = ConfigManagerCore.idDimensionOverworld; + WorldServer worldserver = server.getWorld(dimID); + if (worldserver == null) + { + worldserver = server.getWorld(0); + if (worldserver == null) + { + throw new Exception("/gchouston could not find Overworld."); + } + dimID = 0; + } + BlockPos spawnPoint = null; + BlockPos bedPos = playerBase.getBedLocation(dimID); + if (bedPos != null) + { + spawnPoint = EntityPlayer.getBedSpawnLocation(worldserver, bedPos, false); + } + if (spawnPoint == null) + { + spawnPoint = worldserver.getTopSolidOrLiquidBlock(worldserver.getSpawnPoint()); + } + GCPlayerStats stats = GCPlayerStats.get(playerBase); + stats.setRocketStacks(NonNullList.withSize(0, ItemStack.EMPTY)); + stats.setRocketType(IRocketType.EnumRocketType.DEFAULT.ordinal()); + stats.setRocketItem(null); + stats.setFuelLevel(0); + stats.setCoordsTeleportedFromX(spawnPoint.getX()); + stats.setCoordsTeleportedFromZ(spawnPoint.getZ()); + stats.setUsingPlanetSelectionGui(false); + playerBase.closeScreen(); + Vector3 spawnPos = new Vector3(spawnPoint.getX() + 0.5D, spawnPoint.getY() + 0.25D, spawnPoint.getZ() + 0.5D); + + try + { + WorldUtil.teleportEntitySimple(worldserver, dimID, playerBase, spawnPos); + } catch (Exception e) + { + e.printStackTrace(); + throw e; + } + + CommandBase.notifyCommandListener(sender, this, "commands.gchouston.success", new Object[] + {String.valueOf(EnumColor.GREY + "" + playerBase.getName())}); + } else + { + throw new Exception("Could not find player with name: " + args[0]); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.dimensiontp.too_many", this.getUsage(sender)), new Object[0]); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCInv.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCInv.java new file mode 100644 index 00000000..809cc384 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCInv.java @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class CommandGCInv extends CommandBase +{ + + protected static final Map savedata = new HashMap(); + private static final Set dontload = new HashSet(); + private static boolean firstuse = true; + private static GCInvSaveData savefile; + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " [save|restore|drop|clear] "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public String getName() + { + return "gcinv"; + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, "save", "restore", "drop", "clear"); + } + if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + return null; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 1; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (CommandGCInv.firstuse) + { + CommandGCInv.firstuse = false; + CommandGCInv.initialise(); + } + + if (args.length == 2) + { + try + { + EntityPlayerMP thePlayer = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[1], true); + if (thePlayer != null && !thePlayer.isDead && thePlayer.world != null) + { + GCPlayerStats stats = GCPlayerStats.get(thePlayer); + + if (args[0].equalsIgnoreCase("drop")) + { + InventoryExtended gcInventory = stats.getExtendedInventory(); + gcInventory.dropExtendedItems(thePlayer); + } else if (args[0].equalsIgnoreCase("save")) + { + InventoryExtended gcInventory = stats.getExtendedInventory(); + ItemStack[] saveinv = new ItemStack[gcInventory.getSizeInventory()]; + for (int i = 0; i < gcInventory.getSizeInventory(); i++) + { + saveinv[i] = gcInventory.getStackInSlot(i); + gcInventory.setInventorySlotContents(i, ItemStack.EMPTY); + } + + CommandGCInv.savedata.put(args[1].toLowerCase(), saveinv); + CommandGCInv.dontload.add(args[1].toLowerCase()); + CommandGCInv.writefile(); + System.out.println("[GCInv] Saving and clearing GC inventory slots of " + PlayerUtil.getName(thePlayer)); + } else if (args[0].equalsIgnoreCase("restore")) + { + ItemStack[] saveinv = CommandGCInv.savedata.get(args[1].toLowerCase()); + CommandGCInv.dontload.remove(args[1].toLowerCase()); + if (saveinv == null) + { + System.out.println("[GCInv] Tried to restore but player " + PlayerUtil.getName(thePlayer) + " had no saved GC inventory items."); + return; + } + + CommandGCInv.doLoad(thePlayer); + } else if (args[0].equalsIgnoreCase("clear")) + { + InventoryExtended gcInventory = stats.getExtendedInventory(); + for (int i = 0; i < gcInventory.getSizeInventory(); i++) + { + gcInventory.setInventorySlotContents(i, ItemStack.EMPTY); + } + } else + { + throw new WrongUsageException("Invalid GCInv command. Usage: " + this.getUsage(sender)); + } + } else + { + // Special rule for 'restore' command if player not found - + // look to see if the player is offline (i.e. had a saved + // inventory already) + if (args[0].equalsIgnoreCase("restore")) + { + ItemStack[] saveinv = CommandGCInv.savedata.get(args[1].toLowerCase()); + if (saveinv != null) + { + System.out.println("[GCInv] Restore command for offline player " + args[1] + ", setting to restore GCInv on next login."); + CommandGCInv.dontload.remove(args[1].toLowerCase()); + // Now it can autoload on next player logon + return; + } + } + + // No player found, and not a 'restore' command + if (args[0].equalsIgnoreCase("clear") || args[0].equalsIgnoreCase("save") || args[0].equalsIgnoreCase("drop")) + { + System.out.println("GCInv command: player " + args[1] + " not found."); + } else + { + throw new WrongUsageException("Invalid GCInv command. Usage: " + this.getUsage(sender), new Object[0]); + } + } + } catch (final Exception e) + { + System.out.println(e.toString()); + e.printStackTrace(); + } + } else + { + throw new WrongUsageException("Not enough command arguments! Usage: " + this.getUsage(sender), new Object[0]); + } + } + + public static void doLoad(EntityPlayerMP thePlayer) + { + String theName = PlayerUtil.getName(thePlayer).toLowerCase(); + if (!CommandGCInv.dontload.contains(theName)) + // This is a simple flag: if the playername is in dontload then no + // restore command has yet been run. + // Dontload resets to nothing on server restart so that all will + // auto-restore on a server restart. + { + ItemStack[] saveinv = CommandGCInv.savedata.get(theName); + InventoryExtended gcInventory = GCPlayerStats.get(thePlayer).getExtendedInventory(); + for (int i = 0; i < gcInventory.getSizeInventory(); i++) + { + gcInventory.setInventorySlotContents(i, saveinv[i]); + } + CommandGCInv.savedata.remove(theName); + CommandGCInv.writefile(); + System.out.println("[GCInv] Restored GC inventory slots of " + PlayerUtil.getName(thePlayer)); + + } else + { + System.out.println("[GCInv] Player " + PlayerUtil.getName(thePlayer) + " was spawned without restoring the GCInv save. Run /gcinv restore playername to restore it."); + } + } + + private static void writefile() + { + CommandGCInv.savefile.writeToNBT(new NBTTagCompound()); + CommandGCInv.savefile.markDirty(); + } + + private static void initialise() + { + World world0 = WorldUtil.getWorldForDimensionServer(0); + if (world0 == null) + { + return; + } + CommandGCInv.savefile = (GCInvSaveData) world0.loadData(GCInvSaveData.class, GCInvSaveData.SAVE_ID); + if (CommandGCInv.savefile == null) + { + CommandGCInv.savefile = new GCInvSaveData(); + world0.setData(GCInvSaveData.SAVE_ID, CommandGCInv.savefile); + } + } + + public static ItemStack[] getSaveData(String p) + { + if (CommandGCInv.firstuse) + { + CommandGCInv.firstuse = false; + CommandGCInv.initialise(); + } + + return CommandGCInv.savedata.get(p); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCKit.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCKit.java new file mode 100644 index 00000000..534a236b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandGCKit.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.List; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.items.ItemHandlerHelper; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandGCKit extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " []"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public String getName() + { + return "gckit"; + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + return null; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = null; + + if (args.length < 2) + { + try + { + if (args.length == 1) + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[0], true); + } else + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + } + + if (playerBase != null) + { + ItemHandlerHelper.giveItemToPlayer(playerBase, new ItemStack(GCItems.emergencyKit), 0); + CommandBase.notifyCommandListener(sender, this, "commands.emergencykit", new Object[] + {String.valueOf(EnumColor.GREY + "[" + playerBase.getName()), "]"}); + } else + { + throw new Exception("Could not find player with name: " + args[0]); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.dimensiontp.too_many", this.getUsage(sender)), new Object[0]); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandJoinSpaceRace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandJoinSpaceRace.java new file mode 100644 index 00000000..65f0de4b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandJoinSpaceRace.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandJoinSpaceRace extends CommandBase +{ + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName(); + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "joinrace"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(server, sender.getName(), true); + + if (args.length == 0) + { + try + { + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (stats.getSpaceRaceInviteTeamID() > 0) + { + SpaceRaceManager.sendSpaceRaceData(server, playerBase, SpaceRaceManager.getSpaceRaceFromID(stats.getSpaceRaceInviteTeamID())); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_JOIN_RACE_GUI, GCCoreUtil.getDimensionID(playerBase.world), new Object[] + {stats.getSpaceRaceInviteTeamID()}), playerBase); + } else + { + throw new Exception("You haven't been invited to a space race team!"); + } + } else + { + throw new Exception("Could not find player with name: " + args[0]); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.joinrace.no_team", this.getUsage(sender)), new Object[0]); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandKeepDim.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandKeepDim.java new file mode 100644 index 00000000..987bb865 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandKeepDim.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandKeepDim extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 4; + } + + @Override + public String getName() + { + return "gckeeploaded"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase; + + if (args.length > 1) + { + throw new WrongUsageException("Too many command arguments! Usage: " + this.getUsage(sender), new Object[0]); + } else + { + try + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + + if (playerBase != null) + { + int dimID; + + if (args.length == 0) + { + dimID = playerBase.dimension; + } else + { + try + { + dimID = CommandBase.parseInt(args[0]); + } catch (Exception e) + { + throw new WrongUsageException("Needs a dimension number! Usage: " + this.getUsage(sender), new Object[0]); + } + } + + if (ConfigManagerCore.setLoaded(dimID)) + { + playerBase.sendMessage(new TextComponentString("[GCKeepLoaded] Successfully set dimension " + dimID + " to load staticly")); + } else + { + if (ConfigManagerCore.setUnloaded(dimID)) + { + playerBase.sendMessage(new TextComponentString("[GCKeepLoaded] Successfully set dimension " + dimID + " to not load staticly")); + } else + { + playerBase.sendMessage(new TextComponentString("[GCKeepLoaded] Failed to set dimension as not static")); + } + } + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandPlanetTeleport.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandPlanetTeleport.java new file mode 100644 index 00000000..839a34db --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandPlanetTeleport.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class CommandPlanetTeleport extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " []"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public String getName() + { + return "dimensiontp"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP playerBase = null; + + if (args.length < 2) + { + try + { + if (args.length == 1) + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(args[0], true); + } else + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + } + + if (playerBase != null) + { + WorldServer worldserver = server.getWorld(GCCoreUtil.getDimensionID(server.worlds[0])); + BlockPos spawnPoint = worldserver.getSpawnPoint(); + GCPlayerStats stats = GCPlayerStats.get(playerBase); + stats.setRocketStacks(NonNullList.withSize(2, ItemStack.EMPTY)); + stats.setRocketType(IRocketType.EnumRocketType.DEFAULT.ordinal()); + stats.setRocketItem(GCItems.rocketTier1); + stats.setFuelLevel(1000); + stats.setCoordsTeleportedFromX(spawnPoint.getX()); + stats.setCoordsTeleportedFromZ(spawnPoint.getZ()); + + try + { + WorldUtil.toCelestialSelection(playerBase, stats, Integer.MAX_VALUE); + } catch (Exception e) + { + e.printStackTrace(); + throw e; + } + + CommandBase.notifyCommandListener(sender, this, "commands.dimensionteleport", new Object[] + {String.valueOf(EnumColor.GREY + "[" + playerBase.getName()), "]"}); + } else + { + throw new Exception("Could not find player with name: " + args[0]); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.dimensiontp.too_many", this.getUsage(sender)), new Object[0]); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationAddOwner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationAddOwner.java new file mode 100644 index 00000000..f349eb42 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationAddOwner.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.List; +import java.util.Map; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class CommandSpaceStationAddOwner extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " [ | +all | -all ]"; + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "ssinvite"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + String var3 = null; + EntityPlayerMP playerBase = null; + + if (args.length > 0) + { + var3 = args[0]; + + try + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (stats.getSpaceStationDimensionData().isEmpty()) + { + throw new WrongUsageException(GCCoreUtil.translate("commands.ssinvite.not_found"), new Object[0]); + } else + { + for (Map.Entry ownedStations : stats.getSpaceStationDimensionData().entrySet()) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, ownedStations.getValue(), playerBase); + + if (var3.equalsIgnoreCase("+all")) + { + data.setAllowedAll(true); + playerBase.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.allow_all_true"))); + return; + } + if (var3.equalsIgnoreCase("-all")) + { + data.setAllowedAll(false); + playerBase.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.allow_all_false", var3))); + return; + } + + if (!data.getAllowedPlayers().contains(var3)) + { + data.getAllowedPlayers().add(var3); + data.markDirty(); + } + } + } + + final EntityPlayerMP playerToAdd = PlayerUtil.getPlayerBaseServerFromPlayerUsername(var3, true); + + if (playerToAdd != null) + { + playerToAdd.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.added", PlayerUtil.getName(playerBase)))); + } + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssinvite.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + if (playerBase != null) + { + playerBase.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.addsuccess", var3))); + } + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : null; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationChangeOwner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationChangeOwner.java new file mode 100644 index 00000000..9c228487 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationChangeOwner.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class CommandSpaceStationChangeOwner extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public String getName() + { + return "ssnewowner"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + String oldOwner = null; + String newOwner = "ERROR"; + int stationID = -1; + EntityPlayerMP playerAdmin = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), true); + + if (args.length > 1) + { + newOwner = args[1]; + + try + { + stationID = Integer.parseInt(args[0]); + } catch (final Exception var6) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssnewowner.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + if (stationID < 2) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssnewowner.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + try + { + SpaceStationWorldData stationData = SpaceStationWorldData.getMPSpaceStationData(null, stationID, null); + if (stationData == null) + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssnewowner.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + oldOwner = stationData.getOwner(); + stationData.getAllowedPlayers().remove(oldOwner); + if (stationData.getSpaceStationName().equals("Station: " + oldOwner)) + { + stationData.setSpaceStationName("Station: " + newOwner); + } + stationData.getAllowedPlayers().add(newOwner); + stationData.setOwner(newOwner); + + final EntityPlayerMP oldPlayer = PlayerUtil.getPlayerBaseServerFromPlayerUsername(oldOwner, true); + final EntityPlayerMP newPlayer = PlayerUtil.getPlayerBaseServerFromPlayerUsername(newOwner, true); + if (oldPlayer != null) + { + GCPlayerStats stats = GCPlayerStats.get(oldPlayer); + SpaceStationWorldData.updateSSOwnership(oldPlayer, oldOwner, stats, stationID, stationData); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_CLIENT_ID, GCCoreUtil.getDimensionID(oldPlayer.world), new Object[] + {WorldUtil.spaceStationDataToString(stats.getSpaceStationDimensionData())}), oldPlayer); + } + if (newPlayer != null) + { + GCPlayerStats stats = GCPlayerStats.get(newPlayer); + SpaceStationWorldData.updateSSOwnership(newPlayer, newOwner.replace(".", ""), stats, stationID, stationData); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_CLIENT_ID, GCCoreUtil.getDimensionID(oldPlayer.world), new Object[] + {WorldUtil.spaceStationDataToString(stats.getSpaceStationDimensionData())}), newPlayer); + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssinvite.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + if (playerAdmin != null) + { + playerAdmin.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.changesuccess", oldOwner, newOwner))); + } else + // Console + { + System.out.println(GCCoreUtil.translateWithFormat("gui.spacestation.changesuccess", oldOwner, newOwner)); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationRemoveOwner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationRemoveOwner.java new file mode 100644 index 00000000..09547fd2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/CommandSpaceStationRemoveOwner.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; + +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +import com.google.common.collect.Sets; + +public class CommandSpaceStationRemoveOwner extends CommandBase +{ + + @Override + public String getUsage(ICommandSender var1) + { + return "/" + this.getName() + " "; + } + + @Override + public int getRequiredPermissionLevel() + { + return 0; + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return true; + } + + @Override + public String getName() + { + return "ssuninvite"; + } + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + String var3 = null; + EntityPlayerMP playerBase = null; + + if (args.length > 0) + { + var3 = args[0]; + + try + { + playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (stats.getSpaceStationDimensionData().isEmpty()) + { + throw new WrongUsageException(GCCoreUtil.translate("commands.ssinvite.not_found"), new Object[0]); + } else + { + for (Map.Entry e : stats.getSpaceStationDimensionData().entrySet()) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, e.getValue(), playerBase); + + String str = null; + for (String name : data.getAllowedPlayers()) + { + if (name.equalsIgnoreCase(var3)) + { + str = name; + break; + } + } + + if (str != null) + { + data.getAllowedPlayers().remove(str); + data.markDirty(); + } else + { + throw new CommandException(GCCoreUtil.translateWithFormat("commands.ssuninvite.no_player", "\"" + var3 + "\""), new Object[0]); + } + } + } + } + } catch (final Exception var6) + { + throw new CommandException(var6.getMessage(), new Object[0]); + } + + } else + { + throw new WrongUsageException(GCCoreUtil.translateWithFormat("commands.ssinvite.wrong_usage", this.getUsage(sender)), new Object[0]); + } + + if (playerBase != null) + { + playerBase.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.spacestation.removesuccess", var3))); + } + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, this.getPlayers(server, sender)) : null; + } + + protected String[] getPlayers(MinecraftServer server, ICommandSender sender) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayerUsername(sender.getName(), false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + if (!stats.getSpaceStationDimensionData().isEmpty()) + { + String[] allNames = server.getOnlinePlayerNames(); + // data.getAllowedPlayers may include some in lowercase + // Convert to correct case at least for those players who are + // online + HashSet allowedNames = Sets.newHashSet(); + + for (Map.Entry e : stats.getSpaceStationDimensionData().entrySet()) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, e.getValue(), playerBase); + allowedNames.addAll(data.getAllowedPlayers()); + } + + Iterator itName = allowedNames.iterator(); + ArrayList replaceNames = new ArrayList(); + while (itName.hasNext()) + { + String name = itName.next(); + for (String allEntry : allNames) + { + if (name.equalsIgnoreCase(allEntry)) + { + itName.remove(); + replaceNames.add(allEntry); + } + } + } + // This does the conversion to correct case + allowedNames.addAll(replaceNames); + String[] rvsize = new String[allowedNames.size()]; + return allowedNames.toArray(rvsize); + } + } + + String[] returnvalue = + {""}; + return returnvalue; + } + + @Override + public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) + { + return par2 == 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/GCInvSaveData.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/GCInvSaveData.java new file mode 100644 index 00000000..cb1830d8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/command/GCInvSaveData.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.command; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.storage.WorldSavedData; + +import micdoodle8.mods.galacticraft.core.Constants; + +public class GCInvSaveData extends WorldSavedData +{ + + public static final String SAVE_ID = Constants.GCDATAFOLDER + "GCInv_savefile"; + + public GCInvSaveData() + { + super(SAVE_ID); + } + + public GCInvSaveData(String name) + { + super(name); + } + + @Override + public void readFromNBT(NBTTagCompound filedata) + { + for (Object obj : filedata.getKeySet()) + { + if (obj instanceof NBTTagList) + { + NBTTagList entry = (NBTTagList) obj; + String name = entry.toString(); // TODO See if this is + // equivilent to 1.6's getName + // function + ItemStack[] saveinv = new ItemStack[6]; + if (entry.tagCount() > 0) + { + for (int j = 0; j < entry.tagCount(); j++) + { + NBTTagCompound obj1 = entry.getCompoundTagAt(j); + + if (obj1 != null) + { + int i = obj1.getByte("Slot") & 7; + if (i >= 6) + { + System.out.println("GCInv error retrieving savefile: slot was outside range 0-5"); + return; + } + saveinv[i] = new ItemStack(obj1); + } + } + } + CommandGCInv.savedata.put(name.toLowerCase(), saveinv); + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound toSave) + { + for (String name : CommandGCInv.savedata.keySet()) + { + NBTTagList par1NBTTagList = new NBTTagList(); + ItemStack[] saveinv = CommandGCInv.savedata.get(name); + + for (int i = 0; i < 6; i++) + { + if (saveinv[i] != null) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) (i + 200)); + saveinv[i].writeToNBT(nbttagcompound); + par1NBTTagList.appendTag(nbttagcompound); + } + } + toSave.setTag(name, par1NBTTagList); + } + + return toSave; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/CoreTileEntityFixer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/CoreTileEntityFixer.java new file mode 100644 index 00000000..1d7904cb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/CoreTileEntityFixer.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.datafix.types.TileFixer; + +public class CoreTileEntityFixer extends TileFixer +{ + + protected CoreTileEntityFixer() + { + super(Constants.MOD_ID_CORE); + putFixEntry("GC Treasure Chest"); + putFixEntry("GC Air Distributor"); + putFixEntry("GC Air Collector"); + putFixEntry("GC Oxygen Pipe"); + putFixEntry("GC Air Lock Frame"); + putFixEntry("GC Refinery"); + putFixEntry("GC NASA Workbench"); + putFixEntry("GC Deconstructor"); + putFixEntry("GC Air Compressor"); + putFixEntry("GC Fuel Loader"); + putFixEntry("GC Landing Pad"); + putFixEntry("GC Landing Pad Full"); + putFixEntry("GC Space Station"); + putFixEntry("GC Dummy Block"); + putFixEntry("GC Air Sealer"); + putFixEntry("GC Dungeon Boss Spawner"); + putFixEntry("GC Oxygen Detector"); + putFixEntry("GC Buggy Fueler"); + putFixEntry("GC Buggy Fueler Single"); + putFixEntry("GC Cargo Loader"); + putFixEntry("GC Cargo Unloader"); + putFixEntry("GC Parachest Tile"); + putFixEntry("GC Solar Panel"); + putFixEntry("GC Radio Telescope"); + putFixEntry("GC Magnetic Crafting Table"); + putFixEntry("GC Energy Storage Module"); + putFixEntry("GC Coal Generator"); + putFixEntry("GC Electric Furnace"); + putFixEntry("GC Aluminum Wire"); + putFixEntry("GC Switchable Aluminum Wire"); + putFixEntry("GC Fallen Meteor"); + putFixEntry("GC Ingot Compressor"); + putFixEntry("GC Electric Ingot Compressor"); + putFixEntry("GC Circuit Fabricator"); + putFixEntry("GC Air Lock Controller"); + putFixEntry("GC Oxygen Storage Module"); + putFixEntry("GC Oxygen Decompressor"); + putFixEntry("GC Space Station Thruster"); + putFixEntry("GC Arc Lamp"); + putFixEntry("GC View Screen"); + putFixEntry("GC Panel Lighting"); + putFixEntry("GC Telemetry Unit"); + putFixEntry("GC Painter"); + putFixEntry("GC Fluid Tank"); + putFixEntry("GC Player Detector"); + putFixEntry("GC Platform"); + putFixEntry("GC Emergency Post"); + putFixEntry("GC Null Tile"); + putFixEntry("GC Sealed IC2 Cable"); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/GCCoreDataFixers.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/GCCoreDataFixers.java new file mode 100644 index 00000000..52b4b848 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/GCCoreDataFixers.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.datafix.base.AbstractFixer; + +public class GCCoreDataFixers extends AbstractFixer +{ + + private static final int VERSION = 1; + + public GCCoreDataFixers() + { + super(Constants.MOD_ID_CORE, VERSION); + } + + @Override + public void registerAll() + { + registerFixer(new CoreTileEntityFixer()); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixableData.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixableData.java new file mode 100644 index 00000000..57223828 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixableData.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix.base; + +import net.minecraft.util.datafix.IFixableData; + +public abstract class AbstractFixableData implements IFixableData +{ + + private final GCFix fix; + + protected AbstractFixableData(GCFix fix) + { + this.fix = fix; + } + + public GCFix getGCFix() + { + return this.fix; + } + + @Override + public int getFixVersion() + { + return this.fix.getVersion(); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixer.java new file mode 100644 index 00000000..f59df250 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/AbstractFixer.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix.base; + +import net.minecraftforge.common.util.CompoundDataFixer; +import net.minecraftforge.common.util.ModFixs; +import net.minecraftforge.fml.common.FMLCommonHandler; + +public abstract class AbstractFixer +{ + + protected CompoundDataFixer compoundDataFixer; + protected ModFixs modFixs; + + public AbstractFixer(String modId, int version) + { + this.compoundDataFixer = FMLCommonHandler.instance().getDataFixer(); + this.modFixs = compoundDataFixer.init(modId, version); + } + + public abstract void registerAll(); + + protected void registerFixer(AbstractFixableData fixer) + { + modFixs.registerFix(fixer.getGCFix().geFixType(), fixer); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/GCFix.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/GCFix.java new file mode 100644 index 00000000..58f00e23 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/base/GCFix.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix.base; + +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IFixType; + +public enum GCFix +{ + + TILE_ENTITIES(FixTypes.BLOCK_ENTITY); + + private IFixType fixType; + + GCFix(IFixType fixType) + { + this.fixType = fixType; + } + + public IFixType geFixType() + { + return fixType; + } + + public int getVersion() + { + return this.ordinal() + 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/types/TileFixer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/types/TileFixer.java new file mode 100644 index 00000000..c8c37833 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/datafix/types/TileFixer.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.datafix.types; + +import java.util.HashMap; +import java.util.Map; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.datafix.base.AbstractFixableData; +import micdoodle8.mods.galacticraft.core.datafix.base.GCFix; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.BlockPos; + +public class TileFixer extends AbstractFixableData +{ + + private final Map tileEntityNames = new HashMap<>(); + private final String modid; + + protected TileFixer(String modId) + { + super(GCFix.TILE_ENTITIES); + this.modid = modId; + } + + protected void putFixEntry(String from) + { + putFixEntry(from, from.replaceAll(" ", "_").toLowerCase()); + } + + protected void putFixEntry(String from, String to) + { + String toLocation = modid + ":" + to; + tileEntityNames.put("minecraft:" + from.toLowerCase(), toLocation); + } + + @Override + public NBTTagCompound fixTagCompound(NBTTagCompound nbt) + { + String loc = nbt.getString("id"); + + if (tileEntityNames.containsKey(loc)) + { + String id = tileEntityNames.get(loc); + nbt.setString("id", tileEntityNames.get(loc)); + if (ConfigManagerCore.enableDebug) + { + BlockPos p = new BlockPos(nbt.getInteger("x"), nbt.getInteger("y"), nbt.getInteger("z")); + GalacticraftCore.logger.info("DataFixer @ {} -> {}", p.toString(), p.toString(), id); + } + } + return nbt; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/GCDimensions.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/GCDimensions.java new file mode 100644 index 00000000..626ae93c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/GCDimensions.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import net.minecraft.world.DimensionType; + +public class GCDimensions +{ + + public static DimensionType MOON; + public static DimensionType ORBIT; + public static DimensionType ORBIT_KEEPLOADED; +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/OrbitSpinSaveData.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/OrbitSpinSaveData.java new file mode 100644 index 00000000..1431e31d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/OrbitSpinSaveData.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.storage.WorldSavedData; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class OrbitSpinSaveData extends WorldSavedData +{ + + public static final String saveDataID = Constants.GCDATAFOLDER + "GCSpinData"; + public NBTTagCompound datacompound; + private NBTTagCompound alldata; + private int dim = 0; + + public OrbitSpinSaveData(String s) + { + super(OrbitSpinSaveData.saveDataID); + this.datacompound = new NBTTagCompound(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + this.alldata = nbt; + // world.loadData calls this but can't extract from alldata until we + // know the dimension ID + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + if (this.dim != 0) + { + nbt.setTag("" + this.dim, this.datacompound); + } + + return nbt; + } + + public static OrbitSpinSaveData initWorldData(World world) + { + OrbitSpinSaveData worldData = (OrbitSpinSaveData) world.loadData(OrbitSpinSaveData.class, OrbitSpinSaveData.saveDataID); + + if (worldData == null) + { + worldData = new OrbitSpinSaveData(""); + world.setData(OrbitSpinSaveData.saveDataID, worldData); + if (world.provider instanceof WorldProviderSpaceStation) + { + worldData.dim = GCCoreUtil.getDimensionID(world); + ((WorldProviderSpaceStation) world.provider).getSpinManager().writeToNBT(worldData.datacompound); + } + worldData.markDirty(); + } else if (world.provider instanceof WorldProviderSpaceStation) + { + worldData.dim = GCCoreUtil.getDimensionID(world); + + worldData.datacompound = null; + if (worldData.alldata != null) + { + worldData.datacompound = worldData.alldata.getCompoundTag("" + worldData.dim); + } + if (worldData.datacompound == null) + { + worldData.datacompound = new NBTTagCompound(); + } + } + + return worldData; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRace.java new file mode 100644 index 00000000..904c6b43 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRace.java @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; + +public class SpaceRace +{ + + public static final String DEFAULT_NAME = "gui.space_race.unnamed"; + private static int lastSpaceRaceID = 0; + private int spaceRaceID; + private List playerNames = Lists.newArrayList(); + public String teamName; + private FlagData flagData; + private Vector3 teamColor; + private int ticksSpent; + private Map celestialBodyStatusList = new HashMap<>(4, 1F); + private Map> schematicsToUnlock = new HashMap<>(4, 1F); + + public SpaceRace() + { + } + + public SpaceRace(List playerNames, String teamName, FlagData flagData, Vector3 teamColor) + { + this.playerNames = playerNames; + this.teamName = teamName; + this.ticksSpent = 0; + this.flagData = flagData; + this.teamColor = teamColor; + this.spaceRaceID = ++SpaceRace.lastSpaceRaceID; + } + + public void loadFromNBT(NBTTagCompound nbt) + { + this.teamName = nbt.getString("TeamName"); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Loading spacerace data for team " + this.teamName); + } + this.spaceRaceID = nbt.getInteger("SpaceRaceID"); + this.ticksSpent = (int) nbt.getLong("TicksSpent"); // Deal with legacy + // error + this.flagData = FlagData.readFlagData(nbt); + this.teamColor = new Vector3(nbt.getDouble("teamColorR"), nbt.getDouble("teamColorG"), nbt.getDouble("teamColorB")); + + NBTTagList tagList = nbt.getTagList("PlayerList", 10); + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound tagAt = tagList.getCompoundTagAt(i); + this.playerNames.add(tagAt.getString("PlayerName")); + } + + tagList = nbt.getTagList("CelestialBodyList", 10); + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound tagAt = tagList.getCompoundTagAt(i); + + CelestialBody body = GalaxyRegistry.getPlanetOrMoonFromTranslationkey(tagAt.getString("CelestialBodyName")); + + if (body != null) + { + this.celestialBodyStatusList.put(body, tagAt.getInteger("TimeTaken")); + } + } + + tagList = nbt.getTagList("SchList", 10); + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound tagAt = tagList.getCompoundTagAt(i); + String name = tagAt.getString("Mem"); + if (name != null && this.playerNames.contains(name)) + { + final NBTTagList itemList = tagAt.getTagList("Sch", 10); + for (int j = 0; j < itemList.tagCount(); ++j) + { + addNewSchematic(name, new ItemStack(itemList.getCompoundTagAt(j))); + } + } + } + + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Loaded spacerace team data OK."); + } + } + + public void saveToNBT(NBTTagCompound nbt) + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Saving spacerace data for team " + this.teamName); + } + nbt.setString("TeamName", this.teamName); + nbt.setInteger("SpaceRaceID", this.spaceRaceID); + nbt.setLong("TicksSpent", this.ticksSpent); + this.flagData.saveFlagData(nbt); + nbt.setDouble("teamColorR", this.teamColor.x); + nbt.setDouble("teamColorG", this.teamColor.y); + nbt.setDouble("teamColorB", this.teamColor.z); + + NBTTagList tagList = new NBTTagList(); + for (String player : this.playerNames) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("PlayerName", player); + tagList.appendTag(tagComp); + } + + nbt.setTag("PlayerList", tagList); + + tagList = new NBTTagList(); + for (Entry celestialBody : this.celestialBodyStatusList.entrySet()) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("CelestialBodyName", celestialBody.getKey().getTranslationKey()); + tagComp.setInteger("TimeTaken", celestialBody.getValue()); + tagList.appendTag(tagComp); + } + nbt.setTag("CelestialBodyList", tagList); + + tagList = new NBTTagList(); + for (Entry> schematic : this.schematicsToUnlock.entrySet()) + { + if (this.playerNames.contains(schematic.getKey())) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("Mem", schematic.getKey()); + final NBTTagList itemList = new NBTTagList(); + for (ItemStack stack : schematic.getValue()) + { + final NBTTagCompound itemTag = new NBTTagCompound(); + stack.writeToNBT(itemTag); + itemList.appendTag(itemTag); + } + tagComp.setTag("Sch", itemList); + tagList.appendTag(tagComp); + } + } + nbt.setTag("SchList", tagList); + + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Saved spacerace team data OK."); + } + } + + public void tick() + { + this.ticksSpent++; + } + + public String getTeamName() + { + String ret = this.teamName; + if (SpaceRace.DEFAULT_NAME.equals(ret)) + { + ret = GCCoreUtil.translate(SpaceRace.DEFAULT_NAME); + } + return ret; + } + + public List getPlayerNames() + { + return this.playerNames; + } + + public FlagData getFlagData() + { + return this.flagData; + } + + public void setFlagData(FlagData flagData) + { + this.flagData = flagData; + } + + public Vector3 getTeamColor() + { + return this.teamColor; + } + + public void setTeamColor(Vector3 teamColor) + { + this.teamColor = teamColor; + } + + public void setTeamName(String teamName) + { + this.teamName = teamName; + } + + public void setPlayerNames(List playerNames) + { + this.playerNames = playerNames; + } + + public void setSpaceRaceID(int raceID) + { + this.spaceRaceID = raceID; + } + + public int getSpaceRaceID() + { + return this.spaceRaceID; + } + + public Map getCelestialBodyStatusList() + { + return ImmutableMap.copyOf(this.celestialBodyStatusList); + } + + public void setCelestialBodyReached(CelestialBody body) + { + this.celestialBodyStatusList.put(body, this.ticksSpent); + } + + public int getTicksSpent() + { + return this.ticksSpent; + } + + @Override + public int hashCode() + { + return this.spaceRaceID; + } + + @Override + public boolean equals(Object other) + { + if (other instanceof SpaceRace) + { + return ((SpaceRace) other).getSpaceRaceID() == this.getSpaceRaceID(); + } + + return false; + } + + /* + * Used to store schematics which need to be unlocked for offline players + */ + public void addNewSchematic(String member, ItemStack stack) + { + List list; + list = this.schematicsToUnlock.get(member); + if (list == null) + { + list = new ArrayList<>(1); + this.schematicsToUnlock.put(member, list); + } + list.add(stack); + } + + /* + * Used to give a stored schematic to a team player on next login + */ + public void updatePlayerSchematics(EntityPlayerMP player) + { + List list = this.schematicsToUnlock.get(PlayerUtil.getName(player)); + if (list != null) + { + for (ItemStack stack : list) + { + SchematicRegistry.unlockNewPage(player, stack); + } + this.schematicsToUnlock.remove(PlayerUtil.getName(player)); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRaceManager.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRaceManager.java new file mode 100644 index 00000000..9c191245 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceRaceManager.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; + +public class SpaceRaceManager +{ + + private static final Set spaceRaces = Sets.newHashSet(); + + public static SpaceRace addSpaceRace(SpaceRace spaceRace) + { + SpaceRaceManager.spaceRaces.remove(spaceRace); + SpaceRaceManager.spaceRaces.add(spaceRace); + return spaceRace; + } + + public static void removeSpaceRace(SpaceRace race) + { + SpaceRaceManager.spaceRaces.remove(race); + } + + public static void tick() + { + for (SpaceRace race : SpaceRaceManager.spaceRaces) + { + boolean playerOnline = false; + + for (EntityPlayerMP player : PlayerUtil.getPlayersOnline()) + { + if (race.getPlayerNames().contains(PlayerUtil.getName(player))) + { + CelestialBody body = GalaxyRegistry.getCelestialBodyFromDimensionID(player.world.provider.getDimension()); + + if (body != null) + { + if (!race.getCelestialBodyStatusList().containsKey(body)) + { + race.setCelestialBodyReached(body); + } + } + + playerOnline = true; + } + } + + if (playerOnline) + { + race.tick(); + } + } + } + + public static void loadSpaceRaces(NBTTagCompound nbt) + { + NBTTagList tagList = nbt.getTagList("SpaceRaceList", 10); + + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound nbt2 = tagList.getCompoundTagAt(i); + SpaceRace race = new SpaceRace(); + race.loadFromNBT(nbt2); + SpaceRaceManager.spaceRaces.add(race); + } + } + + public static NBTTagCompound saveSpaceRaces(NBTTagCompound nbt) + { + NBTTagList tagList = new NBTTagList(); + + for (SpaceRace race : SpaceRaceManager.spaceRaces) + { + NBTTagCompound nbt2 = new NBTTagCompound(); + race.saveToNBT(nbt2); + tagList.appendTag(nbt2); + } + + nbt.setTag("SpaceRaceList", tagList); + return nbt; + } + + public static SpaceRace getSpaceRaceFromPlayer(String username) + { + for (SpaceRace race : SpaceRaceManager.spaceRaces) + { + if (race.getPlayerNames().contains(username)) + { + return race; + } + } + + return null; + } + + public static SpaceRace getSpaceRaceFromID(int teamID) + { + for (SpaceRace race : SpaceRaceManager.spaceRaces) + { + if (race.getSpaceRaceID() == teamID) + { + return race; + } + } + + return null; + } + + public static void sendSpaceRaceData(MinecraftServer theServer, EntityPlayerMP toPlayer, SpaceRace spaceRace) + { + if (spaceRace != null) + { + List objList = new ArrayList(); + objList.add(spaceRace.getSpaceRaceID()); + objList.add(spaceRace.getTeamName()); + objList.add(spaceRace.getFlagData()); + objList.add(spaceRace.getTeamColor()); + objList.add(spaceRace.getPlayerNames().toArray(new String[spaceRace.getPlayerNames().size()])); + + if (toPlayer != null) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACE_RACE_DATA, GCCoreUtil.getDimensionID(toPlayer.world), objList), toPlayer); + spaceRace.updatePlayerSchematics(toPlayer); + } else + { + for (WorldServer server : theServer.worlds) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACE_RACE_DATA, GCCoreUtil.getDimensionID(server), objList), + GCCoreUtil.getDimensionID(server)); + } + } + } + } + + public static ImmutableSet getSpaceRaces() + { + return ImmutableSet.copyOf(new HashSet(SpaceRaceManager.spaceRaces)); + } + + public static void onPlayerRemoval(MinecraftServer server, String player, SpaceRace race) + { + for (String member : race.getPlayerNames()) + { + EntityPlayerMP memberObj = PlayerUtil.getPlayerForUsernameVanilla(server, member); + + if (memberObj != null) + { + memberObj.sendMessage(new TextComponentString(EnumColor.DARK_AQUA + GCCoreUtil.translateWithFormat("gui.space_race.chat.remove_success", EnumColor.RED + player + EnumColor.DARK_AQUA)) + .setStyle(new Style().setColor(TextFormatting.DARK_AQUA))); + } + } + + List playerList = new ArrayList(); + playerList.add(player); + SpaceRace newRace = SpaceRaceManager.addSpaceRace(new SpaceRace(playerList, SpaceRace.DEFAULT_NAME, new FlagData(48, 32), new Vector3(1, 1, 1))); + EntityPlayerMP playerToRemove = PlayerUtil.getPlayerBaseServerFromPlayerUsername(server, player, true); + + if (playerToRemove != null) + { + SpaceRaceManager.sendSpaceRaceData(server, playerToRemove, newRace); + SpaceRaceManager.sendSpaceRaceData(server, playerToRemove, race); + } + } + + public static void teamUnlockSchematic(EntityPlayerMP player, ItemStack stack) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(player)); + if (race == null) + return; + MinecraftServer server = player.server; + for (String member : race.getPlayerNames()) + { + if (player.getName().equalsIgnoreCase(member)) + continue; + + EntityPlayerMP memberObj = PlayerUtil.getPlayerForUsernameVanilla(server, member); + if (memberObj != null) + { + SchematicRegistry.unlockNewPage(memberObj, stack); + } else + { + race.addNewSchematic(member, stack); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceStationWorldData.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceStationWorldData.java new file mode 100644 index 00000000..10a487a1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpaceStationWorldData.java @@ -0,0 +1,395 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.DimensionType; +import net.minecraft.world.World; +import net.minecraft.world.storage.WorldSavedData; + +import net.minecraftforge.common.DimensionManager; + +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class SpaceStationWorldData extends WorldSavedData +{ + + private String spaceStationName = "NoName"; + private String owner = "NoOwner"; + private ArrayList allowedPlayers; + private boolean allowAllPlayers; + private int homePlanet; + private int dimensionIdDynamic; + private int dimensionIdStatic; + private NBTTagCompound dataCompound; + + public SpaceStationWorldData(String par1Str) + { + super(par1Str); + + this.allowedPlayers = new ArrayList() + { + + // Override contains so it ignores case. + @Override + public boolean contains(Object o) + { + if (o instanceof String) + { + String paramStr = (String) o; + + for (String s : this) + { + if (paramStr.equalsIgnoreCase(s)) + { + return true; + } + } + } + + return false; + } + }; + } + + public ArrayList getAllowedPlayers() + { + return this.allowedPlayers; + } + + public boolean getAllowedAll() + { + return this.allowAllPlayers; + } + + public void setAllowedAll(boolean b) + { + this.allowAllPlayers = b; + this.markDirty(); + } + + public String getOwner() + { + return this.owner; + } + + public void setOwner(String name) + { + this.owner = name.replace(".", ""); + this.markDirty(); + } + + public String getSpaceStationName() + { + return this.spaceStationName; + } + + public int getHomePlanet() + { + return homePlanet; + } + + public void setSpaceStationName(String string) + { + this.spaceStationName = string; + } + + public int getDimensionIdStatic() + { + return dimensionIdStatic; + } + + public void setDimensionIdStatic(int dimensionIdStatic) + { + this.dimensionIdStatic = dimensionIdStatic; + } + + public int getDimensionIdDynamic() + { + return dimensionIdDynamic; + } + + public void setDimensionIdDynamic(int dimensionIdDynamic) + { + this.dimensionIdDynamic = dimensionIdDynamic; + } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) + { + this.owner = nbttagcompound.getString("owner").replace(".", ""); + this.spaceStationName = nbttagcompound.getString("spaceStationName"); + + if (nbttagcompound.hasKey("dataCompound")) + { + this.dataCompound = nbttagcompound.getCompoundTag("dataCompound"); + } else + { + this.dataCompound = new NBTTagCompound(); + } + + if (nbttagcompound.hasKey("homePlanet")) + { + this.homePlanet = nbttagcompound.getInteger("homePlanet"); + } else + { + GalacticraftCore.logger.info("Home planet data not found in space station save file for \"" + this.spaceStationName + "\". Using default overworld."); + this.homePlanet = 0; // Overworld dimension ID + } + + if (nbttagcompound.hasKey("dimensionIdStatic")) + { + this.dimensionIdStatic = nbttagcompound.getInteger("dimensionIdStatic"); + } else + { + GalacticraftCore.logger.info("Static dimension ID not found in space station save file for \"" + this.spaceStationName + "\". Using default overworld."); + this.dimensionIdStatic = ConfigManagerCore.idDimensionOverworldOrbitStatic; + } + + if (nbttagcompound.hasKey("dimensionIdDynamic")) + { + this.dimensionIdDynamic = nbttagcompound.getInteger("dimensionIdDynamic"); + } else + { + GalacticraftCore.logger.info("Dynamic dimension ID not found in space station save file for \"" + this.spaceStationName + "\". Using default overworld."); + this.dimensionIdDynamic = ConfigManagerCore.idDimensionOverworldOrbit; + } + + this.allowAllPlayers = nbttagcompound.getBoolean("allowedAll"); + + final NBTTagList var2 = nbttagcompound.getTagList("allowedPlayers", 10); + this.allowedPlayers.clear(); + + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + final NBTTagCompound var4 = var2.getCompoundTagAt(var3); + final String var5 = var4.getString("allowedPlayer"); + + if (!this.allowedPlayers.contains(var5)) + { + this.allowedPlayers.add(var5); + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbttagcompound) + { + nbttagcompound.setString("owner", this.owner); + nbttagcompound.setString("spaceStationName", this.spaceStationName); + nbttagcompound.setInteger("homePlanet", this.homePlanet); + nbttagcompound.setInteger("dimensionIdDynamic", this.dimensionIdDynamic); + nbttagcompound.setInteger("dimensionIdStatic", this.dimensionIdStatic); + nbttagcompound.setTag("dataCompound", this.dataCompound); + nbttagcompound.setBoolean("allowedAll", this.allowAllPlayers); + + final NBTTagList var2 = new NBTTagList(); + + for (int var3 = 0; var3 < this.allowedPlayers.size(); ++var3) + { + final String player = this.allowedPlayers.get(var3); + + if (player != null) + { + final NBTTagCompound var4 = new NBTTagCompound(); + var4.setString("allowedPlayer", player); + var2.appendTag(var4); + } + } + + nbttagcompound.setTag("allowedPlayers", var2); + return nbttagcompound; + } + + /** + * Retrieve an already created space station date entry + */ + public static SpaceStationWorldData getStationData(World world, int stationID, EntityPlayer player) + { + return getStationData(world, stationID, -1, -1, -1, player); + } + + /** + * Retrieve a space station data entry, creating if necessary (with provided + * data) + */ + public static SpaceStationWorldData getStationData(World world, int stationID, int homeID, int providerIdDynamic, int providerIdStatic, EntityPlayer owner) + { + DimensionType providerType = DimensionManager.getProviderType(stationID); + + boolean foundMatch = false; + + // Loop through all registered satellites, checking for a provider ID + // match. If none is found, this method is + // being called on an incorrect + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + if (satellite.getDimensionIdStatic() == providerType.getId() || satellite.getDimensionID() == providerType.getId()) + { + foundMatch = true; + break; + } + } + + if (!foundMatch) + { + return null; + } else + { + final String stationIdentifier = SpaceStationWorldData.getSpaceStationID(stationID); + SpaceStationWorldData stationData = (SpaceStationWorldData) world.loadData(SpaceStationWorldData.class, Constants.GCDATAFOLDER + stationIdentifier); + + if (stationData == null) + { + stationData = new SpaceStationWorldData(stationIdentifier); + world.setData(Constants.GCDATAFOLDER + stationIdentifier, stationData); + stationData.dataCompound = new NBTTagCompound(); + + if (owner != null) + { + stationData.owner = PlayerUtil.getName(owner).replace(".", ""); + } + + stationData.spaceStationName = "Station: " + stationData.owner; + + if (owner != null) + { + stationData.allowedPlayers.add(PlayerUtil.getName(owner)); + } + + if (homeID == -1) + { + throw new RuntimeException("Space station being created on bad home planet ID!"); + } else + { + stationData.homePlanet = homeID; + } + + if (providerIdDynamic == -1 || providerIdStatic == -1) + { + throw new RuntimeException("Space station being created on bad provider IDs!"); + } else + { + stationData.dimensionIdDynamic = providerIdDynamic; + stationData.dimensionIdStatic = providerIdStatic; + } + + stationData.markDirty(); + } + + if (stationData.getSpaceStationName().replace(" ", "").isEmpty()) + { + stationData.setSpaceStationName("Station: " + stationData.owner); + stationData.markDirty(); + } + + return stationData; + } + } + + public static SpaceStationWorldData getMPSpaceStationData(World var0, int var1, EntityPlayer player) + { + final String var2 = SpaceStationWorldData.getSpaceStationID(var1); + if (var0 == null) + { + var0 = WorldUtil.getWorldForDimensionServer(0); + } + SpaceStationWorldData var3 = null; + + if (var0 != null) + { + var3 = (SpaceStationWorldData) var0.loadData(SpaceStationWorldData.class, Constants.GCDATAFOLDER + var2); + } else + { + GalacticraftCore.logger.error("No world for dimension 0? That should be unpossible! Please report at https://github.com/micdoodle8/Galacticraft/issues/2617"); + } + + if (var3 == null) + { + var3 = new SpaceStationWorldData(var2); + var0.setData(Constants.GCDATAFOLDER + var2, var3); + var3.dataCompound = new NBTTagCompound(); + + if (player != null) + { + var3.owner = PlayerUtil.getName(player).replace(".", ""); + } + + var3.spaceStationName = "Station: " + var3.owner; + + if (player != null) + { + var3.allowedPlayers.add(PlayerUtil.getName(player)); + } + + var3.markDirty(); + } + + if (var3.getSpaceStationName().replace(" ", "").isEmpty()) + { + var3.setSpaceStationName("Station: " + var3.owner); + var3.markDirty(); + } + + return var3; + } + + public static String getSpaceStationID(int dimID) + { + return "spacestation_" + dimID; + } + + public static void updateSSOwnership(EntityPlayerMP player, String playerName, GCPlayerStats stats, int stationID, SpaceStationWorldData stationData) + { + if (stationData == null) + { + stationData = SpaceStationWorldData.getMPSpaceStationData(null, stationID, null); + } + + if (stationData.owner.equals(playerName)) + { + // This player is the owner of the station - ensure stats data + // matches + if (!(stats.getSpaceStationDimensionData().values().contains(stationID))) + { + GalacticraftCore.logger.debug("Player owns station: " + stationData.getSpaceStationName() + " with home planet " + stationData.getHomePlanet()); + stats.getSpaceStationDimensionData().put(stationData.getHomePlanet(), stationID); + } + } else + { + // This player is the owner of the station - remove from stats data + Integer savedOwned = stats.getSpaceStationDimensionData().get(stationData.getHomePlanet()); + if (savedOwned != null && savedOwned == stationID) + { + GalacticraftCore.logger.debug("Player does not own station: " + stationData.getSpaceStationName() + " with home planet " + stationData.getHomePlanet()); + stats.getSpaceStationDimensionData().remove(savedOwned); + } + } + } + + public static void checkAllStations(EntityPlayerMP thePlayer, GCPlayerStats stats) + { + String name = PlayerUtil.getName(thePlayer).replace(".", ""); + for (int id : WorldUtil.registeredSpaceStations.keySet()) + { + SpaceStationWorldData.updateSSOwnership(thePlayer, name, stats, id, null); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpinManager.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpinManager.java new file mode 100644 index 00000000..9849bd6b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/SpinManager.java @@ -0,0 +1,905 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDynamicLiquid; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpinThruster; +import micdoodle8.mods.galacticraft.core.entities.ITumblable; +import micdoodle8.mods.galacticraft.core.entities.player.FreefallHandler; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +import com.google.common.collect.Lists; + +public class SpinManager +{ + + private static final float GFORCE = 9.81F / 400F; // gravity in metres per + // tick squared + public boolean doSpinning = true; + public float angularVelocityRadians = 0F; + public float skyAngularVelocity = this.angularVelocityRadians * Constants.RADIANS_TO_DEGREES; + public float angularVelocityTarget = 0F; + public float angularVelocityAccel = 0F; + public double spinCentreX; + public double spinCentreZ; + private float momentOfInertia; + private float massCentreX; + private float massCentreZ; + public int ssBoundsMaxX; + public int ssBoundsMinX; + public int ssBoundsMaxY; + public int ssBoundsMinY; + public int ssBoundsMaxZ; + public int ssBoundsMinZ; + + private OrbitSpinSaveData savefile; + + private LinkedList thrustersPlus = Lists.newLinkedList(); + private LinkedList thrustersMinus = Lists.newLinkedList(); + private BlockPos oneSSBlock; + // private HashSet stationBlocks = new HashSet<>(); + + private HashSet checked = new HashSet(); + + private float artificialG; + // Used to make continuous particles + thrust sounds at the spin thrusters + // in this dimension + // If false, make particles + sounds occasionally in small bursts, just for + // fun (micro attitude changes) + // see: BlockSpinThruster.randomDisplayTick() + public boolean thrustersFiring = false; + private boolean dataNotLoaded = true; + private List loadedEntities = Lists.newLinkedList(); + + private WorldProviderSpaceStation worldProvider; + private boolean clientSide = true; + + public SpinManager(WorldProviderSpaceStation provider) + { + this.worldProvider = provider; + } + + /** + * Called from WorldProviderOrbit when registering the worldObj + */ + public void registerServerSide() + { + if (!this.worldProvider.world.isRemote) + { + this.clientSide = false; + } + } + + public float getSpinRate() + { + return this.skyAngularVelocity; + } + + /** + * Sets the spin rate for the dimension in radians per tick For example, + * 0.031415 would be 1/200 revolution per tick So that would be 1 revolution + * every 10 seconds + */ + public void setSpinRate(float angle) + { + this.angularVelocityRadians = angle; + this.skyAngularVelocity = angle * 180F / 3.1415927F; + + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + this.updateSkyProviderSpinRate(); + } + } + + @SideOnly(Side.CLIENT) + private void updateSkyProviderSpinRate() + { + this.worldProvider.setSpinDeltaPerTick(this.skyAngularVelocity); + } + + public void setSpinRate(float angle, boolean firing) + { + this.angularVelocityRadians = angle; + this.skyAngularVelocity = angle * 180F / 3.1415927F; + this.worldProvider.setSpinDeltaPerTick(this.skyAngularVelocity); + this.thrustersFiring = firing; + } + + public void setSpinCentre(double x, double z) + { + this.spinCentreX = x; + this.spinCentreZ = z; + if (this.clientSide) + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Clientside update to spin centre: " + x + "," + z); + } + } + } + + public void setSpinBox(int mx, int xx, int my, int yy, int mz, int zz) + { + this.ssBoundsMinX = mx; + this.ssBoundsMaxX = xx; + this.ssBoundsMinY = my; + this.ssBoundsMaxY = yy; + this.ssBoundsMinZ = mz; + this.ssBoundsMaxZ = zz; + } + + public void removeThruster(BlockPos thruster, boolean positive) + { + if (positive) + { + this.thrustersPlus.remove(thruster); + } else + { + this.thrustersMinus.remove(thruster); + } + } + + /** + * This will check all blocks which are in contact with each other to find + * the shape of the spacestation. It also finds the centre of mass (to + * rotate around) and the moment of inertia (how easy/hard this is to + * rotate).

If placingThruster is true, it will return false if the + * thruster (at baseBlock) is not in contact with the "existing" + * spacestation - so the player cannot place thrusters on outlying + * disconnected blocks and expect them to have an effect.

Note: this + * check will briefly load, server-side, all chunks which have spacestation + * blocks in them or 1 block adjacent to those. + * + * @param baseBlock + * @return + */ + public boolean refresh(BlockPos baseBlock, boolean placingThruster) + { + if (this.oneSSBlock == null + || this.worldProvider.world.getBlockState(this.oneSSBlock).getBlock().isAir(this.worldProvider.world.getBlockState(this.oneSSBlock), this.worldProvider.world, this.oneSSBlock)) + { + if (baseBlock != null) + { + this.oneSSBlock = baseBlock; + } else + { + this.oneSSBlock = new BlockPos(0, 64, 0); + } + } + + // Find contiguous blocks using an algorithm like the oxygen sealer one + List currentLayer = new LinkedList(); + List nextLayer = new LinkedList(); + final List foundThrusters = new LinkedList(); + + this.checked.clear(); + currentLayer.add(new BlockVec3(this.oneSSBlock)); + this.checked.add(new BlockVec3(this.oneSSBlock)); + IBlockState bsStart = this.worldProvider.world.getBlockState(this.oneSSBlock); + Block bStart = bsStart.getBlock(); + if (bStart instanceof BlockSpinThruster) + { + foundThrusters.add(this.oneSSBlock); + } + + int thisssBoundsMaxX = this.oneSSBlock.getX(); + int thisssBoundsMinX = thisssBoundsMaxX; + int thisssBoundsMaxY = this.oneSSBlock.getY(); + int thisssBoundsMinY = thisssBoundsMaxY; + int thisssBoundsMaxZ = this.oneSSBlock.getZ(); + int thisssBoundsMinZ = thisssBoundsMaxZ; + float thismass = 0.1F; // Mass of a thruster + float thismassCentreX = 0.1F * thisssBoundsMaxX; + float thismassCentreY = 0.1F * thisssBoundsMaxY; + float thismassCentreZ = 0.1F * thisssBoundsMaxZ; + float thismoment = 0F; + + while (currentLayer.size() > 0) + { + int bits; + for (BlockVec3 vec : currentLayer) + { + bits = vec.sideDoneBits; + if (vec.x < thisssBoundsMinX) + { + thisssBoundsMinX = vec.x; + } + if (vec.y < thisssBoundsMinY) + { + thisssBoundsMinY = vec.y; + } + if (vec.z < thisssBoundsMinZ) + { + thisssBoundsMinZ = vec.z; + } + if (vec.x > thisssBoundsMaxX) + { + thisssBoundsMaxX = vec.x; + } + if (vec.y > thisssBoundsMaxY) + { + thisssBoundsMaxY = vec.y; + } + if (vec.z > thisssBoundsMaxZ) + { + thisssBoundsMaxZ = vec.z; + } + + for (int side = 0; side < 6; side++) + { + if ((bits & (1 << side)) == 1) + { + continue; + } + BlockVec3 sideVec = vec.newVecSide(side); + + if (sideVec != null && !this.checked.contains(sideVec)) + { + this.checked.add(sideVec); + IBlockState state = sideVec.getBlockState(this.worldProvider.world); + if (state == null) + { + continue; + } + Block b = state.getBlock(); + if (b != null && !b.isAir(state, this.worldProvider.world, sideVec.toBlockPos()) && !(b instanceof BlockDynamicLiquid)) + { + nextLayer.add(sideVec); + if (bStart.isAir(bsStart, this.worldProvider.world, this.oneSSBlock)) + { + this.oneSSBlock = sideVec.toBlockPos(); + bStart = b; + } + float m = 1.0F; + // Liquids have a mass of 1, stone, metal blocks etc + // will be heavier + if (!(b instanceof BlockLiquid)) + { + // For most blocks, hardness gives a good idea + // of mass + m = b.getBlockHardness(state, this.worldProvider.world, sideVec.toBlockPos()); + if (m < 0.1F) + { + m = 0.1F; + } else if (m > 30F) + { + m = 30F; + } + // Wood items have a high hardness compared with + // their presumed mass + if (b.getMaterial(state) == Material.WOOD) + { + m /= 4; + } + + // TODO: higher mass for future Galacticraft + // hi-density item like neutronium + // Maybe also check for things in other mods by + // name: lead, uranium blocks? + } + thismassCentreX += m * sideVec.x; + thismassCentreY += m * sideVec.y; + thismassCentreZ += m * sideVec.z; + thismass += m; + thismoment += m * (sideVec.x * sideVec.x + sideVec.z * sideVec.z); + if (b instanceof BlockSpinThruster && !RedstoneUtil.isBlockReceivingRedstone(this.worldProvider.world, sideVec.toBlockPos())) + { + foundThrusters.add(sideVec.toBlockPos()); + } + } + } + } + } + + currentLayer = nextLayer; + nextLayer = new LinkedList(); + } + + if (placingThruster && !this.checked.contains(new BlockVec3(baseBlock))) + { + if (foundThrusters.size() > 0) + { + // The thruster was not placed on the existing contiguous space + // station: it must be. + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Thruster placed on wrong part of space station: base at " + this.oneSSBlock + " - baseBlock was " + baseBlock + " - found " + foundThrusters.size()); + } + return false; + } + + // No thruster on the original space station - so assume the player + // made new station and start check again + // This offers players a reset option: just remove all thrusters + // from original station then starting adding to new one + // (This first check prevents an infinite loop) + if (!this.oneSSBlock.equals(baseBlock)) + { + this.oneSSBlock = baseBlock; + IBlockState state = this.worldProvider.world.getBlockState(this.oneSSBlock); + if (state.getMaterial() != Material.AIR) + { + return this.refresh(baseBlock, true); + } + } + + return false; + + } + + // Update thruster lists based on what was found + this.thrustersPlus.clear(); + this.thrustersMinus.clear(); + for (BlockPos thruster : foundThrusters) + { + IBlockState state = this.worldProvider.world.getBlockState(thruster); + boolean reversed = state.getValue(BlockSpinThruster.ORIENTATION); + if (reversed) + { + this.thrustersMinus.add(thruster); + } else + { + this.thrustersPlus.add(thruster); + } + } + + // Calculate centre of mass + float mass = thismass; + + this.massCentreX = thismassCentreX / thismass + 0.5F; + float massCentreY = thismassCentreY / thismass + 0.5F; + this.massCentreZ = thismassCentreZ / thismass + 0.5F; + // System.out.println("(X,Z) = "+this.massCentreX+","+this.massCentreZ); + + this.setSpinCentre(this.massCentreX, this.massCentreZ); + + // The boundary is at the outer edges of the blocks + this.ssBoundsMaxX = thisssBoundsMaxX + 1; + this.ssBoundsMinX = thisssBoundsMinX; + this.ssBoundsMaxY = thisssBoundsMaxY + 1; + this.ssBoundsMinY = thisssBoundsMinY; + this.ssBoundsMaxZ = thisssBoundsMaxZ + 1; + this.ssBoundsMinZ = thisssBoundsMinZ; + + // Calculate momentOfInertia + thismoment -= this.massCentreX * this.massCentreX * mass; + thismoment -= this.massCentreZ * this.massCentreZ * mass; + this.momentOfInertia = thismoment; + + // TODO + // TODO defy gravity + // TODO break blocks which are outside SS (not in checked) + // TODO prevent spin if there is a huge number of blocks outside SS + + GalacticraftCore.logger.debug("MoI = " + this.momentOfInertia + " CoMx = " + this.massCentreX + " CoMz = " + this.massCentreZ); + + // Send packets to clients in this dimension + List objList = new ArrayList(); + objList.add(Double.valueOf(this.spinCentreX)); + objList.add(Double.valueOf(this.spinCentreZ)); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_DATA, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + + objList = new ArrayList(); + objList.add(Integer.valueOf(this.ssBoundsMinX)); + objList.add(Integer.valueOf(this.ssBoundsMaxX)); + objList.add(Integer.valueOf(this.ssBoundsMinY)); + objList.add(Integer.valueOf(this.ssBoundsMaxY)); + objList.add(Integer.valueOf(this.ssBoundsMinZ)); + objList.add(Integer.valueOf(this.ssBoundsMaxZ)); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_BOX, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + + this.updateSpinSpeed(); + + return true; + } + + public void updateSpinSpeed() + { + if (this.momentOfInertia > 0F) + { + float netTorque = 0F; + int countThrusters = 0; + int countThrustersReverse = 0; + + for (BlockPos thruster : this.thrustersPlus) + { + float xx = thruster.getX() - this.massCentreX; + float zz = thruster.getZ() - this.massCentreZ; + netTorque += MathHelper.sqrt(xx * xx + zz * zz); + countThrusters++; + } + for (BlockPos thruster : this.thrustersMinus) + { + float xx = thruster.getX() - this.massCentreX; + float zz = thruster.getZ() - this.massCentreZ; + netTorque -= MathHelper.sqrt(xx * xx + zz * zz); + countThrustersReverse++; + } + + if (countThrusters == countThrustersReverse) + { + this.angularVelocityAccel = 0.000004F; + this.angularVelocityTarget = 0F; + } else + { + countThrusters += countThrustersReverse; + if (countThrusters > 4) + { + countThrusters = 4; + } + + float maxRx = Math.max(this.ssBoundsMaxX - this.massCentreX, this.massCentreX - this.ssBoundsMinX); + float maxRz = Math.max(this.ssBoundsMaxZ - this.massCentreZ, this.massCentreZ - this.ssBoundsMinZ); + float maxR = Math.max(maxRx, maxRz); + this.angularVelocityTarget = MathHelper.sqrt(GFORCE / maxR) / 2; + // The divide by 2 is not scientific but is a Minecraft factor + // as everything happens more quickly + float spinCap = 0.00125F * countThrusters; + + // TODO: increase this above 20F in release versions so + // everything happens more slowly + this.angularVelocityAccel = netTorque / this.momentOfInertia / 20F; + if (this.angularVelocityAccel < 0) + { + this.angularVelocityAccel = -this.angularVelocityAccel; + this.angularVelocityTarget = -this.angularVelocityTarget; + if (this.angularVelocityTarget < -spinCap) + { + this.angularVelocityTarget = -spinCap; + } + } else + // Do not make it spin too fast or players might get dizzy + // Also make it so players need minimum 4 thrusters for best + // spin + if (this.angularVelocityTarget > spinCap) + { + this.angularVelocityTarget = spinCap; + } + + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("MaxR = " + maxR + " Angular vel = " + this.angularVelocityTarget + " Angular accel = " + this.angularVelocityAccel); + } + } + } + + if (!this.clientSide) + { + // Save the updated data for the world + this.save(); + } + } + + public void updateSpin() + { + if (!this.clientSide) + { + if (this.dataNotLoaded) + { + this.savefile = OrbitSpinSaveData.initWorldData(this.worldProvider.world); + this.readFromNBT(this.savefile.datacompound); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Loading data from save: " + this.savefile.datacompound.getFloat("omegaSky")); + } + this.dataNotLoaded = false; + } + + if (this.doSpinning) + { + boolean updateNeeded = true; + if (this.angularVelocityTarget < this.angularVelocityRadians) + { + float newAngle = this.angularVelocityRadians - this.angularVelocityAccel; + if (newAngle < this.angularVelocityTarget) + { + newAngle = this.angularVelocityTarget; + } + this.setSpinRate(newAngle); + this.thrustersFiring = true; + } else if (this.angularVelocityTarget > this.angularVelocityRadians) + { + float newAngle = this.angularVelocityRadians + this.angularVelocityAccel; + if (newAngle > this.angularVelocityTarget) + { + newAngle = this.angularVelocityTarget; + } + this.setSpinRate(newAngle); + this.thrustersFiring = true; + } else if (this.thrustersFiring) + { + this.thrustersFiring = false; + } else + { + updateNeeded = false; + } + + if (updateNeeded) + { + this.writeToNBT(this.savefile.datacompound); + this.savefile.markDirty(); + List objList = new ArrayList(); + objList.add(Float.valueOf(this.angularVelocityRadians)); + objList.add(Boolean.valueOf(this.thrustersFiring)); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_SPIN, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + } + } + + // Update entity positions if in freefall + this.loadedEntities.clear(); + this.loadedEntities.addAll(this.worldProvider.world.loadedEntityList); + for (Entity e : this.loadedEntities) + { + // TODO: What about vehicles from GC (buggies) and other mods? + if ((e instanceof EntityItem || e instanceof EntityLivingBase && !(e instanceof EntityPlayer) || e instanceof EntityTNTPrimed || e instanceof EntityFallingBlock) && !e.onGround) + { + AxisAlignedBB entityBoundingBox = e.getEntityBoundingBox(); + boolean outsideStation = entityBoundingBox.maxX < this.ssBoundsMinX || entityBoundingBox.minX > this.ssBoundsMaxX || entityBoundingBox.maxY < this.ssBoundsMinY + || entityBoundingBox.minY > this.ssBoundsMaxY || entityBoundingBox.maxZ < this.ssBoundsMinZ || entityBoundingBox.minZ > this.ssBoundsMaxZ; + + if (outsideStation || FreefallHandler.testEntityFreefall(this.worldProvider.world, entityBoundingBox)) + { + if (this.doSpinning) + { + this.moveRotatedEntity(e, this.spinCentreX, this.spinCentreZ, this.angularVelocityRadians); + } + FreefallHandler.tickFreefallEntity(e); + if (e instanceof ITumblable) + { + ((ITumblable) e).setTumbling(3F); + } + } else + { + if (e instanceof ITumblable) + { + ((ITumblable) e).setTumbling(0F); + } + } + } + } + } + } + + private void moveRotatedEntity(Entity e, double rotationCentreX, double rotationCentreZ, float deltaTheta) + { + // Do the rotation + if (deltaTheta != 0F) + { + float angle; + final double xx = e.posX - rotationCentreX; + final double zz = e.posZ - rotationCentreZ; + double arc = Math.sqrt(xx * xx + zz * zz); + if (xx == 0D) + { + angle = zz > 0 ? 3.1415926535F / 2 : -3.1415926535F / 2; + } else + { + angle = (float) Math.atan(zz / xx); + } + if (xx < 0D) + { + angle += 3.1415926535F; + } + angle += deltaTheta / 3F; + arc = arc * deltaTheta; + final double offsetX = -arc * MathHelper.sin(angle); + final double offsetZ = arc * MathHelper.cos(angle); + e.posX += offsetX; + e.posZ += offsetZ; + e.lastTickPosX += offsetX; + e.lastTickPosZ += offsetZ; + + // Rotated into an unloaded chunk (probably also drifted out to + // there): byebye + if (!e.world.isBlockLoaded(new BlockPos(MathHelper.floor(e.posX), 64, MathHelper.floor(e.posZ)))) + { + e.setDead(); + return; + } + + e.setEntityBoundingBox(e.getEntityBoundingBox().offset(offsetX, 0.0D, offsetZ)); + // TODO check for block collisions here - if so move the entity + // appropriately and apply fall damage + // Moving the entity = slide along / down + e.rotationYaw += this.skyAngularVelocity; + while (e.rotationYaw > 360F) + { + e.rotationYaw -= 360F; + } + + // Rotate the motion vector (motionX, motionZ) by the angular + // rotation + double velocity = Math.sqrt(e.motionX * e.motionX + e.motionZ * e.motionZ); + if (e.motionX == 0D) + { + angle = e.motionZ > 0 ? 3.1415926535F / 2 : -3.1415926535F / 2; + } else + { + angle = (float) Math.atan(e.motionZ / e.motionX); + } + if (e.motionX < 0D) + { + angle += 3.1415926535F; + } + angle += deltaTheta; + e.motionX = velocity * MathHelper.cos(angle); + e.motionZ = velocity * MathHelper.sin(angle); + } + } + + @SideOnly(Side.CLIENT) + public boolean updatePlayerForSpin(EntityPlayerSP p, float partial) + { + float angleDelta = partial * this.angularVelocityRadians; + if (this.doSpinning && angleDelta != 0F) + { + // TODO maybe need to test to make sure xx and zz are not too large + // (outside sight range of SS) + // TODO think about server + network load (loading/unloading chunks) + // when movement is rapid + // Maybe reduce chunkloading radius? + + boolean doCentrifugal = false; + float angle; + final double xx = p.posX - this.spinCentreX; + final double zz = p.posZ - this.spinCentreZ; + double arc = Math.sqrt(xx * xx + zz * zz); + if (xx == 0D) + { + angle = zz > 0 ? 3.1415926535F / 2 : -3.1415926535F / 2; + } else + { + angle = (float) Math.atan(zz / xx); + } + if (xx < 0D) + { + angle += 3.1415926535F; + } + angle += angleDelta / 3F; + arc = arc * angleDelta; + double offsetX = -arc * Math.sin(angle); + double offsetZ = arc * Math.cos(angle); + + // Check for block collisions here - if so move the player + // appropriately + // First check that there are no existing collisions where the + // player is now (TODO: bounce the player away) + if (p.world.getCollisionBoxes(p, p.getEntityBoundingBox()).size() == 0) + { + // Now check for collisions in the new direction and if there + // are some, try reducing the movement + int collisions = 0; + do + { + List list = p.world.getCollisionBoxes(p, p.getEntityBoundingBox().expand(offsetX, 0.0D, offsetZ)); + collisions = list.size(); + if (collisions > 0) + { + if (!doCentrifugal) + { + p.motionX += -offsetX; + p.motionZ += -offsetZ; + } + offsetX /= 2D; + offsetZ /= 2D; + if (offsetX < 0.01D && offsetX > -0.01D) + { + offsetX = 0D; + } + if (offsetZ < 0.01D && offsetZ > -0.01D) + { + offsetZ = 0D; + } + doCentrifugal = true; + + } + } while (collisions > 0); + + p.posX += offsetX; + p.posZ += offsetZ; + p.setEntityBoundingBox(p.getEntityBoundingBox().offset(offsetX, 0.0D, offsetZ)); + } + + p.rotationYaw += this.skyAngularVelocity * partial; + p.renderYawOffset += this.skyAngularVelocity * partial; + while (p.rotationYaw > 360F) + { + p.rotationYaw -= 360F; + } + while (p.rotationYaw < 0F) + { + p.rotationYaw += 360F; + } + + return doCentrifugal; + } + + return false; + } + + @SideOnly(Side.CLIENT) + public void applyCentrifugalForce(EntityPlayerSP p) + { + int quadrant = 0; + double xd = p.posX - this.spinCentreX; + double zd = p.posZ - this.spinCentreZ; + double accel = Math.sqrt(xd * xd + zd * zd) * this.angularVelocityRadians * this.angularVelocityRadians * 4D; + + if (xd < 0) + { + if (xd < -Math.abs(zd)) + { + quadrant = 2; + } else + { + quadrant = zd < 0 ? 3 : 1; + } + } else if (xd > Math.abs(zd)) + { + quadrant = 0; + } else + { + quadrant = zd < 0 ? 3 : 1; + } + + switch (quadrant) + { + case 0: + p.motionX += accel; + break; + case 1: + p.motionZ += accel; + break; + case 2: + p.motionX -= accel; + break; + case 3: + default: + p.motionZ -= accel; + } + } + + /** + * Call this when player first login/transfer to this dimension

TODO + * how can this code be called by other mods / plugins with teleports (e.g. + * Bukkit)? See WorldUtil.teleportEntity() + * + * @param player + */ + public void sendPackets(EntityPlayerMP player) + { + List objList = new ArrayList(); + objList.add(this.angularVelocityRadians); + objList.add(this.thrustersFiring); + if (player == null) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_SPIN, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + } else + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_SPIN, GCCoreUtil.getDimensionID(player.world), objList), player); + } + + objList = new ArrayList<>(); + objList.add(this.spinCentreX); + objList.add(this.spinCentreZ); + if (player == null) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_DATA, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + } else + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_DATA, GCCoreUtil.getDimensionID(player.world), objList), player); + } + + objList = new ArrayList<>(); + objList.add(this.ssBoundsMinX); + objList.add(this.ssBoundsMaxX); + objList.add(this.ssBoundsMinY); + objList.add(this.ssBoundsMaxY); + objList.add(this.ssBoundsMinZ); + objList.add(this.ssBoundsMaxZ); + if (player == null) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_BOX, GCCoreUtil.getDimensionID(this.worldProvider), objList), + GCCoreUtil.getDimensionID(this.worldProvider)); + } else + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(PacketSimple.EnumSimplePacket.C_UPDATE_STATION_BOX, GCCoreUtil.getDimensionID(player.world), objList), player); + } + } + + private void save() + { + if (this.savefile == null) + { + this.savefile = OrbitSpinSaveData.initWorldData(this.worldProvider.world); + this.dataNotLoaded = false; + } else + { + this.writeToNBT(this.savefile.datacompound); + this.savefile.markDirty(); + } + } + + public void readFromNBT(NBTTagCompound nbt) + { + this.doSpinning = true;// nbt.getBoolean("doSpinning"); + this.angularVelocityRadians = nbt.getFloat("omegaRad"); + this.skyAngularVelocity = nbt.getFloat("omegaSky"); + this.angularVelocityTarget = nbt.getFloat("omegaTarget"); + this.angularVelocityAccel = nbt.getFloat("omegaAcc"); + + NBTTagCompound oneBlock = (NBTTagCompound) nbt.getTag("oneBlock"); + if (oneBlock != null) + { +// this.oneSSBlock = BlockVec3.readFromNBT(oneBlock); + this.oneSSBlock = new BlockPos(oneBlock.getInteger("x"), oneBlock.getInteger("y"), oneBlock.getInteger("z")); + } else + { + this.oneSSBlock = null; + } + + // A lot of the data can be refreshed by refresh + this.refresh(this.oneSSBlock, false); + + this.sendPackets(null); + } + + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + nbt.setBoolean("doSpinning", this.doSpinning); + nbt.setFloat("omegaRad", this.angularVelocityRadians); + nbt.setFloat("omegaSky", this.skyAngularVelocity); + nbt.setFloat("omegaTarget", this.angularVelocityTarget); + nbt.setFloat("omegaAcc", this.angularVelocityAccel); + if (this.oneSSBlock != null) + { + NBTTagCompound oneBlock = new NBTTagCompound(); + oneBlock.setInteger("x", this.oneSSBlock.getX()); + oneBlock.setInteger("y", this.oneSSBlock.getY()); + oneBlock.setInteger("z", this.oneSSBlock.getZ()); + nbt.setTag("oneBlock", oneBlock); + } + return nbt; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeMoon.java new file mode 100644 index 00000000..333bd5a5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeMoon.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class TeleportTypeMoon implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return ConfigManagerCore.disableLander; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + double x = stats.getCoordsTeleportedFromX(); + double z = stats.getCoordsTeleportedFromZ(); + int limit = ConfigManagerCore.otherPlanetWorldBorders - 2; + if (limit > 20) + { + if (x > limit) + { + z *= limit / x; + x = limit; + } else if (x < -limit) + { + z *= -limit / x; + x = -limit; + } + if (z > limit) + { + x *= limit / z; + z = limit; + } else if (z < -limit) + { + x *= -limit / z; + z = -limit; + } + } + return new Vector3(x, ConfigManagerCore.disableLander ? 250.0 : 900.0, z); + } + + return null; + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, ConfigManagerCore.disableLander ? 250.0 : 900.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + if (ConfigManagerCore.disableLander) + { + final double x = (rand.nextDouble() * 2 - 1.0D) * 4.0D; + final double z = (rand.nextDouble() * 2 - 1.0D) * 4.0D; + return new Vector3(player.posX + x, 220.0D, player.posZ + z); + } + + return null; + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + GCPlayerStats stats = GCPlayerStats.get(player); + if (!ridingAutoRocket && !ConfigManagerCore.disableLander && stats.getTeleportCooldown() <= 0) + { + if (player.capabilities.isFlying) + { + player.capabilities.isFlying = false; + } + + EntityLander lander = new EntityLander(player); + lander.setPosition(player.posX, player.posY, player.posZ); + + if (!newWorld.isRemote) + { + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) newWorld); + lander.forceSpawn = true; + newWorld.spawnEntity(lander); + lander.setWorld(newWorld); + newWorld.updateEntityWithOptionalForce(lander, true); + player.startRiding(lander); + CompatibilityManager.forceLoadChunksEnd((WorldServer) newWorld, previous); + GalacticraftCore.logger.debug("Entering lander at : " + player.posX + "," + player.posZ + " lander spawn at: " + lander.posX + "," + lander.posZ); + } + + stats.setTeleportCooldown(10); + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOrbit.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOrbit.java new file mode 100644 index 00000000..917f853a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOrbit.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; + +public class TeleportTypeOrbit implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + return new Vector3(0.5, 65.0, 0.5); + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity player) + { + return new Vector3(0.5, 65.0, 0.5); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return new Vector3(-8.5D, 90.0, -1.5D); + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOverworld.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOverworld.java new file mode 100644 index 00000000..d5197f86 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeOverworld.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; + +public class TeleportTypeOverworld implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return true; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + return new Vector3(stats.getCoordsTeleportedFromX(), 250.0, stats.getCoordsTeleportedFromZ()); + } + + return null; + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, 250.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + final double x = (rand.nextDouble() * 2 - 1.0D) * 5.0D; + final double z = (rand.nextDouble() * 2 - 1.0D) * 5.0D; + + return new Vector3(player.posX + x, 230.0D, player.posZ + z); + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeSpaceStation.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeSpaceStation.java new file mode 100644 index 00000000..3321e1a3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/TeleportTypeSpaceStation.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TeleportTypeSpaceStation implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + return new Vector3(0.5, 65.0, 0.5); + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity player) + { + return new Vector3(0.5, 65.0, 0.5); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return null; + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + if (ConfigManagerCore.spaceStationsRequirePermission && !newWorld.isRemote) + { + player.sendMessage(new TextComponentString(EnumColor.YELLOW + GCCoreUtil.translate("gui.spacestation.type_command") + " " + EnumColor.AQUA + "/ssinvite " + + GCCoreUtil.translate("gui.spacestation.playername") + " " + EnumColor.YELLOW + GCCoreUtil.translate("gui.spacestation.to_allow_entry"))); + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldDataSpaceRaces.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldDataSpaceRaces.java new file mode 100644 index 00000000..ec3f0bf9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldDataSpaceRaces.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.storage.WorldSavedData; + +import micdoodle8.mods.galacticraft.core.Constants; + +public class WorldDataSpaceRaces extends WorldSavedData +{ + + public static final String saveDataID = Constants.GCDATAFOLDER + "GCSpaceRaceData"; + private NBTTagCompound dataCompound; + + public WorldDataSpaceRaces(String id) + { + super(id); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + SpaceRaceManager.loadSpaceRaces(nbt); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + return SpaceRaceManager.saveSpaceRaces(nbt); + } + + public static WorldDataSpaceRaces initWorldData(World world) + { + WorldDataSpaceRaces worldData = (WorldDataSpaceRaces) world.loadData(WorldDataSpaceRaces.class, WorldDataSpaceRaces.saveDataID); + + if (worldData == null) + { + worldData = new WorldDataSpaceRaces(WorldDataSpaceRaces.saveDataID); + world.setData(WorldDataSpaceRaces.saveDataID, worldData); + worldData.dataCompound = new NBTTagCompound(); + worldData.markDirty(); + } + + return worldData; + } + + @Override + public boolean isDirty() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderMoon.java new file mode 100644 index 00000000..ad50d318 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderMoon.java @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; +import net.minecraft.world.gen.IChunkGenerator; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.world.gen.ChunkProviderMoon; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; + +public class WorldProviderMoon extends WorldProviderSpace implements IGalacticraftWorldProvider, ISolarLevel +{ + + @Override + public DimensionType getDimensionType() + { + return GCDimensions.MOON; + } + + @Override + public Vector3 getFogColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public Vector3 getSkyColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 192000L; + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderMoon.class; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + final float var2 = this.world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.cos(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 0.5F + 0.3F; + } + + @Override + public boolean isSkyColored() + { + return false; + } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 68; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + + // Overriding so that beds do not explode on Moon + @Override + public boolean canRespawnHere() + { + if (EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = false; + return true; + } + return false; + } + + @Override + public float getGravity() + { + return 0.062F; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.7D; + } + + @Override + public double getSolarEnergyMultiplier() + { + return 1.4D; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier > 0; + } + + @Override + public float getFallDamageModifier() + { + return 0.18F; + } + + @Override + public CelestialBody getCelestialBody() + { + return GalacticraftCore.moonMoon; + } + + @Override + public int getDungeonSpacing() + { + return 704; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasure.MOONCHEST; + } + + @Override + public List getSurfaceBlocks() + { + List list = new LinkedList<>(); + list.add(GCBlocks.blockMoon); + return list; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderOverworldOrbit.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderOverworldOrbit.java new file mode 100644 index 00000000..7c82c409 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderOverworldOrbit.java @@ -0,0 +1,272 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IExitHeight; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.client.SkyProviderOrbit; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; + +public class WorldProviderOverworldOrbit extends WorldProviderSpaceStation implements IOrbitDimension, IZeroGDimension, ISolarLevel, IExitHeight +{ + + Set freefallingEntities = new HashSet(); + + @Override + public DimensionType getDimensionType() + { + return GCDimensions.ORBIT; + } + + @Override + public Vector3 getFogColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public Vector3 getSkyColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 24000L; + } + + @Override + public boolean isDaytime() + { + final float a = this.world.getCelestialAngle(0F); + // TODO: adjust this according to size of planet below + return a < 0.42F || a > 0.58F; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + final float var2 = this.world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.cos(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 0.5F + 0.3F; + } + + @Override + public boolean isSkyColored() + { + return false; + } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 64; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + +// @Override +// public String getWelcomeMessage() +// { +// return "Entering Earth Orbit"; +// } +// +// @Override +// public String getDepartMessage() +// { +// return "Leaving Earth Orbit"; +// } + + @Override + public CelestialBody getCelestialBody() + { + return GalacticraftCore.satelliteSpaceStation; + } + + @Override + public float getGravity() + { + return 0.075F; + } + + @Override + public double getMeteorFrequency() + { + return 0; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.5D; + } + + @Override + @Deprecated + public String getPlanetToOrbit() + { + return "overworld"; + } + + @Override + public int getPlanetIdToOrbit() + { + return 0; + } + + @Override + public int getYCoordToTeleportToPlanet() + { + return 30; + } + + @Override + public String getSaveFolder() + { + return "DIM_SPACESTATION" + this.getDimension(); + } + + @Override + public double getSolarEnergyMultiplier() + { + return ConfigManagerCore.spaceStationEnergyScalar; + } + + @Override + public double getYCoordinateToTeleport() + { + return 750; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier > 0; + } + + @Override + public float getFallDamageModifier() + { + return 0.4F; + } + + @Override + public boolean inFreefall(Entity entity) + { + return freefallingEntities.contains(entity); + } + + @Override + public void setInFreefall(Entity entity) + { + freefallingEntities.add(entity); + } + + @Override + public void updateWeather() + { + freefallingEntities.clear(); + super.updateWeather(); + } + + @Override + @SideOnly(Side.CLIENT) + public void setSpinDeltaPerTick(float angle) + { + SkyProviderOrbit skyProvider = ((SkyProviderOrbit) this.getSkyRenderer()); + if (skyProvider != null) + skyProvider.spinDeltaPerTick = angle; + } + + @Override + @SideOnly(Side.CLIENT) + public float getSkyRotation() + { + SkyProviderOrbit skyProvider = ((SkyProviderOrbit) this.getSkyRenderer()); + return skyProvider.spinAngle; + } + + @Override + @SideOnly(Side.CLIENT) + public void createSkyProvider() + { + this.setSkyRenderer(new SkyProviderOrbit(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"), true, true)); + this.setSpinDeltaPerTick(this.getSpinManager().getSpinRate()); + + if (this.getCloudRenderer() == null) + this.setCloudRenderer(new CloudRenderer()); + } + + @Override + public int getDungeonSpacing() + { + return 0; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasure.MOONCHEST; + } + + @Override + public List getSurfaceBlocks() + { + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderSpaceStation.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderSpaceStation.java new file mode 100644 index 00000000..c378223f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/dimension/WorldProviderSpaceStation.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.dimension; + +import net.minecraft.world.gen.IChunkGenerator; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.core.world.gen.ChunkProviderOrbit; + +/*** + * Properties of a WorldProviderSpaceStation 1. Spinnable with Spin Thrusters + * (if you don't want spin, create your own SpinManager subclass which does + * nothing) (note: your SkyProvider needs to rotate according to + * setSpinDeltaPerTick() 2. Oregen from other mods is inhibited in this + * dimension 3. AstroMiner placement is inhibited in this dimension 4. The + * player on arrival into this dimension (after rocket flight) will be in 1st + * person view + * + */ +public abstract class WorldProviderSpaceStation extends WorldProviderSpace +{ + + private SpinManager spinManager = new SpinManager(this); + + public SpinManager getSpinManager() + { + return spinManager; + } + + @Override + public void setDimension(int var1) + { + super.setDimension(var1); + } + + /** + * Called only once from WorldProvider.registerWorld() so this provides a + * handy initialisation method + */ + @Override + protected void init() + { + super.init(); + this.getSpinManager().registerServerSide(); + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderOrbit.class; + } + + @Override + public void updateWeather() + { + super.updateWeather(); + spinManager.updateSpin(); + } + + @SideOnly(Side.CLIENT) + public abstract void setSpinDeltaPerTick(float angle); + + @SideOnly(Side.CLIENT) + public abstract float getSkyRotation(); + + @SideOnly(Side.CLIENT) + public abstract void createSkyProvider(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyConfigHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyConfigHandler.java new file mode 100644 index 00000000..ce3a3699 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyConfigHandler.java @@ -0,0 +1,421 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy; + +import java.io.File; +import java.util.ArrayList; + +import net.minecraftforge.common.config.Configuration; + +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; + +import buildcraft.api.mj.MjAPI; +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasRegistry; + +/** + * The universal energy compatibility module allows Galacticraft to be + * compatible with most other major power systems in Minecraft as well. + * + * @author Calclavia, Micdoodle, radfast + */ +public class EnergyConfigHandler +{ + + private static Configuration config; + + /** + * Ratio of Build craft(MJ) energy to Galacticraft energy(gJ). Multiply BC3 + * energy by this to convert to gJ. + */ + public static float BC3_RATIO = 16F; + private static float BC8_MICROJOULE_RATIO = 1000000F; + public static float BC8_INTERNAL_RATIO = BC3_RATIO / BC8_MICROJOULE_RATIO; + + // Note on energy equivalence: + // + // In BuildCraft, 1 lump of coal produces 1600 MJ (Minecraft Joules) + // in a Stirling Engine. This is by design: coal has 1600 ticks burn time + // in a vanilla Furnace, which corresponds with 1600 MJ in BuildCraft. + // + // In Galacticraft, 1 lump of coal produces 38,400 gJ + // in a coal generator operating at 100% hull heat (less efficient at lower + // hull heats). + + // If 1600 MJ = 38,400 gJ then strictly 1 MJ = 24 gJ. + // But, that feels imbalanced - for example redstone engines make too much + // gJ if the ratio is 24. + // So, the BC conversion ratio is set at 16. + // Think of it as the Galacticraft coal generator at full heat turning coal + // into + // electrical energy 50% more efficiently than BuildCraft's Stirling Engine + // can. + + /** + * Ratio of RF energy to Galacticraft energy(gJ). Multiply RF energy by this + * to convert to gJ. + */ + public static float RF_RATIO = EnergyConfigHandler.BC3_RATIO / 10F; + + /** + * Ratio of IC2 energy (EU) to Galacticraft energy(gJ). Multiply IC2 power + * by this to convert to gJ. + */ + public static float IC2_RATIO = EnergyConfigHandler.BC3_RATIO / 2.44F; + + public static float MEKANISM_RATIO = EnergyConfigHandler.IC2_RATIO / 10F; + + private static int conversionLossFactor = 100; + + /** + * Convert gJ back to Buildcraft MJ (microJoules) + */ + public static float TO_BC_RATIO = 1 / EnergyConfigHandler.BC3_RATIO * BC8_MICROJOULE_RATIO; + + /** + * Convert gJ back to RF + */ + public static float TO_RF_RATIO = 1 / EnergyConfigHandler.RF_RATIO; + + /** + * Convert gJ back to IC2 EU + */ + public static float TO_IC2_RATIO = 1 / EnergyConfigHandler.IC2_RATIO; + + public static float TO_MEKANISM_RATIO = 1 / EnergyConfigHandler.MEKANISM_RATIO; + + public static float TO_BC_RATIOdisp = 1 / EnergyConfigHandler.BC3_RATIO; + public static float TO_RF_RATIOdisp = 1 / EnergyConfigHandler.RF_RATIO; + public static float TO_IC2_RATIOdisp = 1 / EnergyConfigHandler.IC2_RATIO; + public static float TO_MEKANISM_RATIOdisp = 1 / EnergyConfigHandler.MEKANISM_RATIO; + + /** + * Oxygen gas used when Mekanism is loaded. Always null otherwise. + */ + public static Object gasOxygen = null; + public static Object gasHydrogen = null; + + public static boolean displayEnergyUnitsBC = false; + public static boolean displayEnergyUnitsIC2 = false; + public static boolean displayEnergyUnitsMek = false; + public static boolean displayEnergyUnitsRF = false; + + private static boolean cachedBCLoaded = false; + private static boolean cachedBCLoadedValue = false; + private static int cachedBCVersion = -1; + private static boolean cachedBCRLoaded = false; + private static boolean cachedBCRLoadedValue = false; + private static boolean cachedRFLoaded = false; + private static boolean cachedRFLoadedValue = false; + private static boolean cachedRF1LoadedValue = false; + private static boolean cachedRF2LoadedValue = false; + + private static boolean disableMJinterface = false; + + public static boolean disableBuildCraftInput = false; + public static boolean disableBuildCraftOutput = false; + public static boolean disableRFInput = false; + public static boolean disableRFOutput = false; + public static boolean disableFEInput = false; + public static boolean disableFEOutput = false; + public static boolean disableIC2Input = false; + public static boolean disableIC2Output = false; + public static boolean disableMekanismInput = false; + public static boolean disableMekanismOutput = false; + + /** + * You must call this function to enable the Universal Network module. + */ + public static void setDefaultValues(File file) + { + if (EnergyConfigHandler.config == null) + { + EnergyConfigHandler.config = new Configuration(file); + } + + EnergyConfigHandler.config.load(); + EnergyConfigHandler.IC2_RATIO = + (float) EnergyConfigHandler.config.get("Compatibility", "IndustrialCraft Conversion Ratio", EnergyConfigHandler.IC2_RATIO).getDouble(EnergyConfigHandler.IC2_RATIO); + EnergyConfigHandler.RF_RATIO = (float) EnergyConfigHandler.config.get("Compatibility", "RF Conversion Ratio", EnergyConfigHandler.RF_RATIO).getDouble(EnergyConfigHandler.RF_RATIO); + EnergyConfigHandler.BC3_RATIO = (float) EnergyConfigHandler.config.get("Compatibility", "BuildCraft Conversion Ratio", EnergyConfigHandler.BC3_RATIO).getDouble(EnergyConfigHandler.BC3_RATIO); + EnergyConfigHandler.MEKANISM_RATIO = + (float) EnergyConfigHandler.config.get("Compatibility", "Mekanism Conversion Ratio", EnergyConfigHandler.MEKANISM_RATIO).getDouble(EnergyConfigHandler.MEKANISM_RATIO); + EnergyConfigHandler.conversionLossFactor = + EnergyConfigHandler.config.get("Compatibility", "Loss factor when converting energy as a percentage (100 = no loss, 90 = 10% loss ...)", 100).getInt(100); + if (EnergyConfigHandler.conversionLossFactor > 100) + { + EnergyConfigHandler.conversionLossFactor = 100; + } + if (EnergyConfigHandler.conversionLossFactor < 5) + { + EnergyConfigHandler.conversionLossFactor = 5; + } + + updateRatios(); + + EnergyConfigHandler.displayEnergyUnitsBC = + EnergyConfigHandler.config.get("Display", "If BuildCraft is loaded, show Galacticraft machines energy as MJ instead of gJ?", false).getBoolean(false); + EnergyConfigHandler.displayEnergyUnitsIC2 = + EnergyConfigHandler.config.get("Display", "If IndustrialCraft2 is loaded, show Galacticraft machines energy as EU instead of gJ?", false).getBoolean(false); + EnergyConfigHandler.displayEnergyUnitsMek = + EnergyConfigHandler.config.get("Display", "If Mekanism is loaded, show Galacticraft machines energy as Joules (J) instead of gJ?", false).getBoolean(false); + EnergyConfigHandler.displayEnergyUnitsRF = EnergyConfigHandler.config.get("Display", "Show Galacticraft machines energy in RF instead of gJ?", false).getBoolean(false); + + EnergyConfigHandler.disableMJinterface = EnergyConfigHandler.config.get("Compatibility", "Disable old Buildcraft API (MJ) interfacing completely?", false).getBoolean(false); + + EnergyConfigHandler.disableBuildCraftInput = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of BuildCraft energy", false).getBoolean(false); + EnergyConfigHandler.disableBuildCraftOutput = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of BuildCraft energy", false).getBoolean(false); + EnergyConfigHandler.disableRFInput = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of RF energy", false).getBoolean(false); + EnergyConfigHandler.disableRFOutput = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of RF energy", false).getBoolean(false); + EnergyConfigHandler.disableFEInput = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of Forge Energy to GC machines", false).getBoolean(false); + EnergyConfigHandler.disableFEOutput = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of Forge Energy from GC machines", false).getBoolean(false); + EnergyConfigHandler.disableIC2Input = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of IC2 energy", false).getBoolean(false); + EnergyConfigHandler.disableIC2Output = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of IC2 energy", false).getBoolean(false); + EnergyConfigHandler.disableMekanismInput = EnergyConfigHandler.config.get("Compatibility", "Disable INPUT of Mekanism energy", false).getBoolean(false); + EnergyConfigHandler.disableMekanismOutput = EnergyConfigHandler.config.get("Compatibility", "Disable OUTPUT of Mekanism energy", false).getBoolean(false); + + if (!EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + } + if (!EnergyConfigHandler.isMekanismLoaded()) + { + EnergyConfigHandler.displayEnergyUnitsMek = false; + } + if (EnergyConfigHandler.displayEnergyUnitsIC2) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + } + if (EnergyConfigHandler.displayEnergyUnitsMek) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + } + if (EnergyConfigHandler.displayEnergyUnitsRF) + { + EnergyConfigHandler.displayEnergyUnitsBC = false; + EnergyConfigHandler.displayEnergyUnitsIC2 = false; + EnergyConfigHandler.displayEnergyUnitsMek = false; + } + + EnergyConfigHandler.config.save(); + } + + public static void initGas() + { + if (EnergyConfigHandler.isMekanismLoaded()) + { + Gas oxygen = GasRegistry.getGas("oxygen"); + + if (oxygen == null) + { + EnergyConfigHandler.gasOxygen = GasRegistry.register(new Gas(GCFluids.fluidOxygenGas)).registerFluid(); + } else + { + EnergyConfigHandler.gasOxygen = oxygen; + } + + Gas hydrogen = GasRegistry.getGas("hydrogen"); + + if (hydrogen == null) + { + EnergyConfigHandler.gasHydrogen = GasRegistry.register(new Gas(GCFluids.fluidHydrogenGas)).registerFluid(); + } else + { + EnergyConfigHandler.gasHydrogen = hydrogen; + } + } + } + + /** + * Checks using the FML loader too see if IC2 is loaded + */ + public static boolean isIndustrialCraft2Loaded() + { + return CompatibilityManager.isIc2Loaded(); + } + + public static boolean isBuildcraftLoaded() + { + if (!cachedBCRLoaded) + { + boolean mjAPIFound = false; + try + { + Class.forName("buildcraft.api.mj.MjAPI"); + mjAPIFound = true; + BC8_MICROJOULE_RATIO = MjAPI.MJ; + BC8_INTERNAL_RATIO = BC3_RATIO / BC8_MICROJOULE_RATIO; + TO_BC_RATIO = conversionLossFactor / 100F / EnergyConfigHandler.BC3_RATIO * BC8_MICROJOULE_RATIO; + } catch (Throwable ignore) + { + } + cachedBCRLoaded = true; + cachedBCRLoadedValue = mjAPIFound && CompatibilityManager.isBCraftEnergyLoaded() && CompatibilityManager.classBCTransportPipeTile != null; + } + + return cachedBCRLoadedValue; + } + + public static boolean isRFAPILoaded() + { + if (!cachedRFLoaded) + { + initialiseRF(); + } + + return cachedRFLoadedValue; + } + + public static boolean isRFAPIv1Loaded() + { + if (!cachedRFLoaded) + { + initialiseRF(); + } + + return cachedRF1LoadedValue; + } + + public static boolean isRFAPIv2Loaded() + { + if (!cachedRFLoaded) + { + initialiseRF(); + } + + return cachedRF2LoadedValue; + } + + private static void initialiseRF() + { + cachedRFLoaded = true; + cachedRFLoadedValue = false; + cachedRF2LoadedValue = false; + int count = 0; + int count2 = 0; + try + { + if (Class.forName("cofh.redstoneflux.api.IEnergyConnection") != null) + { + count++; + } + if (Class.forName("cofh.redstoneflux.api.IEnergyHandler") != null) + { + count += 2; + } + } catch (Exception e) + { + } + try + { + if (Class.forName("cofh.redstoneflux.api.IEnergyProvider") != null) + { + count2++; + } + } catch (Exception e) + { + } + try + { + if (Class.forName("cofh.redstoneflux.api.IEnergyReceiver") != null) + { + count2++; + } + } catch (Exception e) + { + } + + if ((count + count2 == 3 && count2 != 1) || count + count2 == 5) + { + cachedRFLoadedValue = true; + cachedRF1LoadedValue = (count == 3); + cachedRF2LoadedValue = (count2 == 2); + } else if (count > 0 || count2 > 0) + { + GalacticraftCore.logger.error("Incomplete Redstone Flux API detected: Galacticraft will not support RF energy connections until this is fixed."); + } + } + + public static boolean isMekanismLoaded() + { + return CompatibilityManager.isMekanismLoaded(); + } + + private static void updateRatios() + { + // Sense checks to avoid crazy large inverse ratios or ratios + if (EnergyConfigHandler.IC2_RATIO < 0.01F) + { + EnergyConfigHandler.IC2_RATIO = 0.01F; + } + if (EnergyConfigHandler.RF_RATIO < 0.001F) + { + EnergyConfigHandler.RF_RATIO = 0.001F; + } + if (EnergyConfigHandler.BC3_RATIO < 0.01F) + { + EnergyConfigHandler.BC3_RATIO = 0.01F; + } + if (EnergyConfigHandler.MEKANISM_RATIO < 0.001F) + { + EnergyConfigHandler.MEKANISM_RATIO = 0.001F; + } + if (EnergyConfigHandler.IC2_RATIO > 1000F) + { + EnergyConfigHandler.IC2_RATIO = 1000F; + } + if (EnergyConfigHandler.RF_RATIO > 100F) + { + EnergyConfigHandler.RF_RATIO = 100F; + } + if (EnergyConfigHandler.BC3_RATIO > 1000F) + { + EnergyConfigHandler.BC3_RATIO = 1000F; + } + if (EnergyConfigHandler.MEKANISM_RATIO > 100F) + { + EnergyConfigHandler.MEKANISM_RATIO = 100F; + } + + float factor = conversionLossFactor / 100F; + TO_BC_RATIO = factor / EnergyConfigHandler.BC3_RATIO * BC8_MICROJOULE_RATIO; + TO_RF_RATIO = factor / EnergyConfigHandler.RF_RATIO; + TO_IC2_RATIO = factor / EnergyConfigHandler.IC2_RATIO; + TO_MEKANISM_RATIO = factor / EnergyConfigHandler.MEKANISM_RATIO; + TO_BC_RATIOdisp = 1 / EnergyConfigHandler.BC3_RATIO; + TO_RF_RATIOdisp = 1 / EnergyConfigHandler.RF_RATIO; + TO_IC2_RATIOdisp = 1 / EnergyConfigHandler.IC2_RATIO; + TO_MEKANISM_RATIOdisp = 1 / EnergyConfigHandler.MEKANISM_RATIO; + EnergyConfigHandler.BC3_RATIO *= factor; + EnergyConfigHandler.RF_RATIO *= factor; + EnergyConfigHandler.IC2_RATIO *= factor; + EnergyConfigHandler.MEKANISM_RATIO *= factor; + } + + public static void serverConfigOverride(ArrayList returnList) + { + returnList.add(EnergyConfigHandler.BC3_RATIO); + returnList.add(EnergyConfigHandler.RF_RATIO); + returnList.add(EnergyConfigHandler.IC2_RATIO); + returnList.add(EnergyConfigHandler.MEKANISM_RATIO); + returnList.add(EnergyConfigHandler.conversionLossFactor); + } + + public static void setConfigOverride(float sBC3, float sRF, float sIC2, float sMEK, int sLossRatio) + { + EnergyConfigHandler.BC3_RATIO = sBC3; + EnergyConfigHandler.RF_RATIO = sRF; + EnergyConfigHandler.IC2_RATIO = sIC2; + EnergyConfigHandler.MEKANISM_RATIO = sMEK; + EnergyConfigHandler.conversionLossFactor = sLossRatio; + updateRatios(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyDisplayHelper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyDisplayHelper.java new file mode 100644 index 00000000..c8c43b12 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyDisplayHelper.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy; + +import java.util.List; + +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextFormatting; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class EnergyDisplayHelper +{ + + public static void getEnergyDisplayTooltip(float energyVal, float maxEnergy, List strList) + { + strList.add(TextFormatting.GREEN + GCCoreUtil.translate("gui.message.energy") + ": " + getEnergyDisplayS(energyVal)); + strList.add(TextFormatting.RED + GCCoreUtil.translate("gui.message.max_energy") + ": " + getEnergyDisplayS(maxEnergy)); + } + + public static String getEnergyDisplayS(float energyVal) + { + if (EnergyConfigHandler.displayEnergyUnitsIC2) + { + return getEnergyDisplayIC2(energyVal * EnergyConfigHandler.TO_IC2_RATIOdisp); + } else if (EnergyConfigHandler.displayEnergyUnitsBC) + { + return getEnergyDisplayBC(energyVal * EnergyConfigHandler.TO_BC_RATIOdisp); + } else if (EnergyConfigHandler.displayEnergyUnitsMek) + { + return getEnergyDisplayMek(energyVal * EnergyConfigHandler.TO_MEKANISM_RATIOdisp); + } else if (EnergyConfigHandler.displayEnergyUnitsRF) + { + return getEnergyDisplayRF(energyVal * EnergyConfigHandler.TO_RF_RATIOdisp); + } + String val = String.valueOf(getEnergyDisplayI(energyVal)); + String newVal = ""; + + for (int i = val.length() - 1; i >= 0; i--) + { + newVal += val.charAt(val.length() - 1 - i); + if (i % 3 == 0 && i != 0) + { + newVal += ','; + } + } + + return newVal + " gJ"; + } + + public static String getEnergyDisplayIC2(float energyVal) + { + String val = String.valueOf(getEnergyDisplayI(energyVal)); + String newVal = ""; + + for (int i = val.length() - 1; i >= 0; i--) + { + newVal += val.charAt(val.length() - 1 - i); + if (i % 3 == 0 && i != 0) + { + newVal += ','; + } + } + + return newVal + " EU"; + } + + public static String getEnergyDisplayBC(float energyVal) + { + String val = String.valueOf(getEnergyDisplayI(energyVal)); + + return val + " MJ"; + } + + public static String getEnergyDisplayMek(float energyVal) + { + if (energyVal < 1000) + { + String val = String.valueOf(getEnergyDisplayI(energyVal)); + return val + " J"; + } else if (energyVal < 1000000) + { + String val = getEnergyDisplay1DP(energyVal / 1000); + return val + " kJ"; + } else + { + String val = getEnergyDisplay1DP(energyVal / 1000000); + return val + " MJ"; + } + } + + public static String getEnergyDisplayRF(float energyVal) + { + String val = String.valueOf(getEnergyDisplayI(energyVal)); + + return val + " RF"; + } + + public static int getEnergyDisplayI(float energyVal) + { + return MathHelper.floor(energyVal); + } + + public static String getEnergyDisplay1DP(float energyVal) + { + return "" + MathHelper.floor(energyVal) + "." + (MathHelper.floor(energyVal * 10) % 10) + (MathHelper.floor(energyVal * 100) % 10); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyUtil.java new file mode 100644 index 00000000..35922bfd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/EnergyUtil.java @@ -0,0 +1,952 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.List; +import java.util.Set; + +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +import buildcraft.api.mj.IMjPassiveProvider; +import buildcraft.api.mj.IMjReceiver; +import buildcraft.api.mj.MjAPI; +import cofh.redstoneflux.api.IEnergyConnection; +import cofh.redstoneflux.api.IEnergyContainerItem; +import cofh.redstoneflux.api.IEnergyHandler; +import cofh.redstoneflux.api.IEnergyProvider; +import cofh.redstoneflux.api.IEnergyReceiver; +import ic2.api.energy.EnergyNet; +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyConductor; +import ic2.api.energy.tile.IEnergyEmitter; +import ic2.api.energy.tile.IEnergySink; +import ic2.api.energy.tile.IEnergySource; +import ic2.api.energy.tile.IEnergyTile; +import ic2.api.item.IElectricItem; +import ic2.api.item.ISpecialElectricItem; +import mekanism.api.energy.IEnergizedItem; +import mekanism.api.energy.IStrictEnergyAcceptor; +import mekanism.api.energy.IStrictEnergyOutputter; +import mekanism.api.energy.IStrictEnergyStorage; +import mekanism.api.gas.IGasHandler; +import mekanism.api.gas.ITubeConnection; + +public class EnergyUtil +{ + + private static boolean isMekLoaded = EnergyConfigHandler.isMekanismLoaded(); + private static boolean isRFLoaded = EnergyConfigHandler.isRFAPILoaded(); + private static boolean isRF1Loaded = EnergyConfigHandler.isRFAPIv1Loaded(); + private static boolean isRF2Loaded = EnergyConfigHandler.isRFAPIv2Loaded(); + private static boolean isIC2Loaded = EnergyConfigHandler.isIndustrialCraft2Loaded(); + private static boolean isIC2ClassicLoaded = CompatibilityManager.isIc2ClassicLoaded(); + private static boolean isIC2TileLoaded = false; + private static boolean isBCReallyLoaded = EnergyConfigHandler.isBuildcraftLoaded(); + + public static boolean voltageParameterIC2 = false; + public static Method demandedEnergyIC2 = null; + public static Method injectEnergyIC2 = null; + public static Method offeredEnergyIC2 = null; + public static Method drawEnergyIC2 = null; + public static Class clazzIC2EnergyTile = null; + public static Class clazzIC2Cable = null; + public static Class clazzMekCable = null; + public static Class clazzEnderIOCable = null; + public static Class clazzMFRRednetEnergyCable = null; + public static Class clazzRailcraftEngine = null; + private static Class clazzPipeTile = null; + private static Class clazzPipeWood = null; + public static boolean initialisedIC2Methods = EnergyUtil.initialiseIC2Methods(); + private static Field fieldCableAcceptor = null; + public static Field fieldEnergyStorage = null; + public static Field fieldCableOutput = null; + private static Capability mekCableAcceptor = null; + public static Capability mekEnergyStorage = null; + public static Capability mekCableOutput = null; + public static Capability mekTubeConnection = null; + public static Capability mekGasHandler = null; + public static Class mekCapabilities; + + public static TileEntity[] getAdjacentPowerConnections(TileEntity tile) + { + final TileEntity[] adjacentConnections = new TileEntity[6]; + + BlockVec3 thisVec = new BlockVec3(tile); + for (EnumFacing direction : EnumFacing.VALUES) + { + if (tile instanceof IConductor && !((IConductor) tile).canConnect(direction, NetworkType.POWER)) + { + continue; + } + + TileEntity tileEntity = thisVec.getTileEntityOnSide(tile.getWorld(), direction); + + if (tileEntity == null) + { + continue; + } + + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(direction.getOpposite(), NetworkType.POWER)) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + continue; + } + + if ((!EnergyConfigHandler.disableMekanismOutput || !EnergyConfigHandler.disableMekanismInput) && isMekLoaded && (tileEntity instanceof IStrictEnergyAcceptor || tileEntity instanceof IStrictEnergyOutputter)) + { + // Do not connect GC wires directly to Mek Universal Cables + try + { + if (clazzMekCable != null && clazzMekCable.isInstance(tileEntity)) + { + continue; + } + } catch (Exception e) + { + e.printStackTrace(); + } + + if (tileEntity instanceof IStrictEnergyAcceptor && ((IStrictEnergyAcceptor) tileEntity).canReceiveEnergy(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } else if (tileEntity instanceof IStrictEnergyOutputter && ((IStrictEnergyOutputter) tileEntity).canOutputEnergy(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + continue; + } + + if ((!EnergyConfigHandler.disableBuildCraftOutput || !EnergyConfigHandler.disableBuildCraftInput) && isBCReallyLoaded) + { + // Do not connect GC wires directly to BC pipes of any type + try + { + if (clazzPipeTile != null && clazzPipeTile.isInstance(tileEntity)) + { + continue; + } + } catch (Exception e) + { + } + + if (hasCapability(tileEntity, MjAPI.CAP_CONNECTOR, direction.getOpposite()) || hasCapability(tileEntity, MjAPI.CAP_RECEIVER, direction.getOpposite()) + || hasCapability(tileEntity, MjAPI.CAP_PASSIVE_PROVIDER, direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + continue; + } + } + + if ((!EnergyConfigHandler.disableRFOutput || !EnergyConfigHandler.disableRFInput) && isRFLoaded && tileEntity instanceof IEnergyConnection) + { + if (isRF2Loaded && (tileEntity instanceof IEnergyProvider || tileEntity instanceof IEnergyReceiver) || isRF1Loaded && tileEntity instanceof IEnergyHandler + || clazzRailcraftEngine != null && clazzRailcraftEngine.isInstance(tileEntity)) + { + if (clazzMFRRednetEnergyCable != null && clazzMFRRednetEnergyCable.isInstance(tileEntity)) + { + continue; + } + + if (((IEnergyConnection) tileEntity).canConnectEnergy(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + } + continue; + } + + if ((!EnergyConfigHandler.disableIC2Output || !EnergyConfigHandler.disableIC2Input) && isIC2Loaded && !isIC2ClassicLoaded) + { + if (tileEntity instanceof IEnergyConductor) + { + continue; + } + + if (!tile.getWorld().isRemote) + { + Object IC2tile = tileEntity; + BlockPos checkingIC2 = thisVec.toBlockPos().offset(direction); + try + { + IC2tile = EnergyNet.instance.getSubTile(tile.getWorld(), checkingIC2); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (IC2tile instanceof IEnergyAcceptor && tile instanceof IEnergyEmitter) + { + if (((IEnergyAcceptor) IC2tile).acceptsEnergyFrom((IEnergyEmitter) tile, direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + continue; + } + if (IC2tile instanceof IEnergyEmitter && tile instanceof IEnergyAcceptor) + { + if (((IEnergyEmitter) IC2tile).emitsEnergyTo((IEnergyAcceptor) tile, direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + continue; + } + } else + { + try + { + Class clazz = tileEntity.getClass(); + if (clazz.getName().startsWith("ic2")) + { + // Special case: IC2's transformers don't seem to + // setup their sink and source directions in Energy + // clientside + if (clazz.getName().startsWith("ic2.core.block.wiring.TileEntityTransformer")) + { + adjacentConnections[direction.ordinal()] = tileEntity; + continue; + } + + Field energyField = null; + fieldLoop: while (energyField == null && clazz != null) + { + for (Field f : clazz.getDeclaredFields()) + { + if (f.getName().equals("energy")) + { + energyField = f; + break fieldLoop; + } + } + clazz = clazz.getSuperclass(); + } + energyField.setAccessible(true); + Object energy = energyField.get(tileEntity); + Set connections; + if (tile instanceof IEnergyEmitter) + { + connections = (Set) energy.getClass().getMethod("getSinkDirs").invoke(energy); + if (connections.contains(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + continue; + } + } + if (tile instanceof IEnergyAcceptor) + { + connections = (Set) energy.getClass().getMethod("getSourceDirs").invoke(energy); + if (connections.contains(direction.getOpposite())) + { + adjacentConnections[direction.ordinal()] = tileEntity; + continue; + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + if (hasCapability(tileEntity, net.minecraftforge.energy.CapabilityEnergy.ENERGY, direction.getOpposite())) + { + // Do not connect GC wires directly to power conduits + if (clazzEnderIOCable != null && clazzEnderIOCable.isInstance(tileEntity)) + { + continue; + } + + net.minecraftforge.energy.IEnergyStorage forgeEnergy = getCapability(tileEntity, net.minecraftforge.energy.CapabilityEnergy.ENERGY, direction.getOpposite()); + if (forgeEnergy != null && (forgeEnergy.canReceive() && !EnergyConfigHandler.disableFEOutput || forgeEnergy.canExtract() && !EnergyConfigHandler.disableFEInput)) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + } + } + + return adjacentConnections; + } + + /** + * Similar to getAdjacentPowerConnections but specific to energy receivers + * only Adds the adjacent power connections found to the passed acceptors, + * directions parameter Lists (Note: an acceptor can therefore sometimes be + * entered in the Lists more than once, with a different direction each + * time: this would represent GC wires connected to the acceptor on more + * than one side.) + * + * @param conductor + * @param connectedAcceptors + * @param directions + * @throws Exception + */ + public static void setAdjacentPowerConnections(TileEntity conductor, List connectedAcceptors, List directions) throws Exception + { + final BlockVec3 thisVec = new BlockVec3(conductor); + final World world = conductor.getWorld(); + for (EnumFacing direction : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(world, direction); + + if (tileEntity == null || tileEntity instanceof IConductor) // world.getTileEntity + // will + // not + // have + // returned + // an + // invalid + // tile, + // invalid + // tiles + // are + // null + { + continue; + } + + EnumFacing sideFrom = direction.getOpposite(); + + if (tileEntity instanceof IElectrical) + { + if (((IElectrical) tileEntity).canConnect(sideFrom, NetworkType.POWER)) + { + connectedAcceptors.add(tileEntity); + directions.add(sideFrom); + } + continue; + } + + if (!EnergyConfigHandler.disableMekanismOutput && isMekLoaded && tileEntity instanceof IStrictEnergyAcceptor) + { + if (clazzMekCable != null && clazzMekCable.isInstance(tileEntity)) + { + continue; + } + if (((IStrictEnergyAcceptor) tileEntity).canReceiveEnergy(sideFrom)) + { + connectedAcceptors.add(tileEntity); + directions.add(sideFrom); + } + continue; + } + + if (!EnergyConfigHandler.disableIC2Output && isIC2Loaded && !world.isRemote) + { + IEnergyTile IC2tile = null; + BlockPos checkingIC2 = thisVec.toBlockPos().offset(direction); + try + { + IC2tile = EnergyNet.instance.getSubTile(world, checkingIC2); + } catch (Exception e) + { + e.printStackTrace(); + } + + if (IC2tile instanceof IEnergyConductor) + { + continue; + } + if (IC2tile instanceof IEnergyAcceptor) + { + if (((IEnergyAcceptor) IC2tile).acceptsEnergyFrom((IEnergyEmitter) conductor, sideFrom)) + { + connectedAcceptors.add(IC2tile); + directions.add(sideFrom); + } + continue; + } + } + + if (!EnergyConfigHandler.disableBuildCraftOutput && isBCReallyLoaded) + { + if (clazzPipeTile != null && clazzPipeTile.isInstance(tileEntity)) + { + continue; + } + + if (hasCapability(tileEntity, MjAPI.CAP_RECEIVER, sideFrom)) + { + IMjReceiver bcReceiver = getCapability(tileEntity, MjAPI.CAP_RECEIVER, sideFrom); + connectedAcceptors.add(bcReceiver); + directions.add(sideFrom); + continue; + } + } + + if (!EnergyConfigHandler.disableRFOutput && (isRF2Loaded && tileEntity instanceof IEnergyReceiver) || (isRF1Loaded && tileEntity instanceof IEnergyHandler)) + { + if (clazzMFRRednetEnergyCable != null && clazzMFRRednetEnergyCable.isInstance(tileEntity)) + { + continue; + } + + if (((IEnergyConnection) tileEntity).canConnectEnergy(sideFrom)) + { + connectedAcceptors.add(tileEntity); + directions.add(sideFrom); + } + continue; + } + + if (!EnergyConfigHandler.disableFEOutput && hasCapability(tileEntity, net.minecraftforge.energy.CapabilityEnergy.ENERGY, sideFrom)) + { + if (clazzEnderIOCable != null && clazzEnderIOCable.isInstance(tileEntity)) + { + continue; + } + + net.minecraftforge.energy.IEnergyStorage forgeEnergy = getCapability(tileEntity, net.minecraftforge.energy.CapabilityEnergy.ENERGY, sideFrom); + if (forgeEnergy != null && forgeEnergy.canReceive()) + { + connectedAcceptors.add(forgeEnergy); + directions.add(sideFrom); + } + } + } + return; + } + + public static float otherModsEnergyTransfer(TileEntity tileAdj, EnumFacing inputAdj, float toSend, boolean simulate) + { + if (isMekLoaded && !EnergyConfigHandler.disableMekanismOutput) + { + IStrictEnergyAcceptor tileMek = null; + if (EnergyUtil.mekCableAcceptor == null) + { + initialiseMekCapabilities(); + } + if (tileAdj instanceof IStrictEnergyAcceptor) + { + tileMek = (IStrictEnergyAcceptor) tileAdj; + } else if (mekCableAcceptor != null && hasCapability(tileAdj, mekCableAcceptor, inputAdj)) + { + tileMek = getCapability(tileAdj, mekCableAcceptor, inputAdj); + } + + if (tileMek != null && tileMek.canReceiveEnergy(inputAdj)) + { + float transferredMek = (float) tileMek.acceptEnergy(inputAdj, toSend * EnergyConfigHandler.TO_MEKANISM_RATIO, simulate); + return transferredMek / EnergyConfigHandler.TO_MEKANISM_RATIO; + } + } else if (isIC2Loaded && !EnergyConfigHandler.disableIC2Output && tileAdj instanceof IEnergySink) + { + // TODO: need to use new subTile system + double demanded = 0; + try + { + demanded = (Double) EnergyUtil.demandedEnergyIC2.invoke(tileAdj); + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + + if (simulate) + { + return Math.min(toSend, (float) demanded / EnergyConfigHandler.TO_IC2_RATIO); + } + + double energySendingIC2 = Math.min(toSend * EnergyConfigHandler.TO_IC2_RATIO, demanded); + if (energySendingIC2 >= 1D) + { + double result = 0; + try + { + if (EnergyUtil.voltageParameterIC2) + { + result = energySendingIC2 - (Double) EnergyUtil.injectEnergyIC2.invoke(tileAdj, inputAdj, energySendingIC2, 120D); + } else + { + result = energySendingIC2 - (Double) EnergyUtil.injectEnergyIC2.invoke(tileAdj, inputAdj, energySendingIC2); + } + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + if (result < 0D) + { + return 0F; + } + return (float) result / EnergyConfigHandler.TO_IC2_RATIO; + } + } else if (isBCReallyLoaded && !EnergyConfigHandler.disableBuildCraftOutput && hasCapability(tileAdj, MjAPI.CAP_RECEIVER, inputAdj)) + // MJ API + { + IMjReceiver bcReceiver = getCapability(tileAdj, MjAPI.CAP_RECEIVER, inputAdj); + long toSendBC = Math.min((long) (toSend * EnergyConfigHandler.TO_BC_RATIO), bcReceiver.getPowerRequested()); + float sent = (toSendBC - bcReceiver.receivePower(toSendBC, simulate)) / EnergyConfigHandler.TO_BC_RATIO; + return sent; + } else if (isRF2Loaded && !EnergyConfigHandler.disableRFOutput && tileAdj instanceof IEnergyReceiver) + { + float sent = ((IEnergyReceiver) tileAdj).receiveEnergy(inputAdj, (int) Math.floor(toSend * EnergyConfigHandler.TO_RF_RATIO), simulate) / EnergyConfigHandler.TO_RF_RATIO; +// GalacticraftCore.logger.debug("Beam/storage offering RF2 up to " + toSend + " into pipe, it accepted " + sent); + return sent; + } else if (!EnergyConfigHandler.disableFEOutput && hasCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj)) + { + net.minecraftforge.energy.IEnergyStorage forgeEnergy = getCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj); + if (forgeEnergy != null && forgeEnergy.canReceive()) + { + float sent = forgeEnergy.receiveEnergy((int) Math.floor(toSend * EnergyConfigHandler.TO_RF_RATIO), simulate) / EnergyConfigHandler.TO_RF_RATIO; + return sent; + } + } + + return 0F; + } + + public static float otherModsEnergyExtract(TileEntity tileAdj, EnumFacing inputAdj, float toPull, boolean simulate) + { + if (isIC2Loaded && !EnergyConfigHandler.disableIC2Input && tileAdj instanceof IEnergySource) + { + double offered = 0; + try + { + offered = (Double) EnergyUtil.offeredEnergyIC2.invoke(tileAdj); + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + + if (simulate) + { + return Math.min(toPull, (float) offered / EnergyConfigHandler.TO_IC2_RATIO); + } + + double energySendingIC2 = Math.min(toPull * EnergyConfigHandler.TO_IC2_RATIO, offered); + if (energySendingIC2 >= 1D) + { + double resultIC2 = 0; + try + { + resultIC2 = energySendingIC2 - (Double) EnergyUtil.drawEnergyIC2.invoke(tileAdj, energySendingIC2); + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + if (resultIC2 < 0D) + { + resultIC2 = 0D; + } + return (float) resultIC2 / EnergyConfigHandler.TO_IC2_RATIO; + } + } else if (isBCReallyLoaded && !EnergyConfigHandler.disableBuildCraftInput && hasCapability(tileAdj, MjAPI.CAP_PASSIVE_PROVIDER, inputAdj)) + { + IMjPassiveProvider bcEmitter = getCapability(tileAdj, MjAPI.CAP_PASSIVE_PROVIDER, inputAdj); + long toSendBC = (long) (toPull * EnergyConfigHandler.TO_BC_RATIO); + float sent = bcEmitter.extractPower(toSendBC, toSendBC, simulate) / EnergyConfigHandler.TO_BC_RATIO; + return sent; + } else if (isRF2Loaded && !EnergyConfigHandler.disableRFInput && tileAdj instanceof IEnergyProvider) + { + float sent = ((IEnergyProvider) tileAdj).extractEnergy(inputAdj, (int) Math.floor(toPull * EnergyConfigHandler.TO_RF_RATIO), simulate) / EnergyConfigHandler.TO_RF_RATIO; + return sent; + } else if (!EnergyConfigHandler.disableFEInput && hasCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj)) + { + net.minecraftforge.energy.IEnergyStorage forgeEnergy = getCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj); + if (forgeEnergy != null && forgeEnergy.canExtract()) + { + float sent = forgeEnergy.extractEnergy((int) Math.floor(toPull * EnergyConfigHandler.TO_RF_RATIO), simulate) / EnergyConfigHandler.TO_RF_RATIO; + return sent; + } + } + + return 0F; + } + + /** + * Test whether an energy connection can be made to a tile using other mods' + * energy methods.

Parameters: + * + * @param tileAdj - the tile under test, it might be an energy tile from + * another mod + * @param inputAdj - the energy input side for that tile which is under test + */ + public static boolean otherModCanReceive(TileEntity tileAdj, EnumFacing inputAdj) + { + if (tileAdj instanceof TileBaseConductor || tileAdj instanceof EnergyStorageTile) + { + return false; // Do not try using other mods' methods to connect to + // GC's own tiles + } + + if (isMekLoaded && tileAdj instanceof IStrictEnergyAcceptor) + { + return ((IStrictEnergyAcceptor) tileAdj).canReceiveEnergy(inputAdj); + } else if (isIC2Loaded && tileAdj instanceof IEnergyAcceptor) + { + return ((IEnergyAcceptor) tileAdj).acceptsEnergyFrom(null, inputAdj); + } else if (isBCReallyLoaded && hasCapability(tileAdj, MjAPI.CAP_RECEIVER, inputAdj)) + { + IMjReceiver bcReceiver = getCapability(tileAdj, MjAPI.CAP_RECEIVER, inputAdj); + return bcReceiver.canReceive(); + } else if (isRF1Loaded && tileAdj instanceof IEnergyHandler || isRF2Loaded && tileAdj instanceof IEnergyReceiver) + { + return ((IEnergyConnection) tileAdj).canConnectEnergy(inputAdj); + } else if (hasCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj)) + { + return (getCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, inputAdj).canReceive()); + } + + return false; + } + + /** + * Test whether a tile can output energy using other mods' energy methods. + * Currently restricted to IC2 and RF mods - Mekanism tiles do not provide + * an interface to "output" energy

Parameters: + * + * @param tileAdj - the tile under test, it might be an energy tile from + * another mod + * @param side - the energy output side for that tile which is under test + */ + public static boolean otherModCanProduce(TileEntity tileAdj, EnumFacing side) + { + if (tileAdj instanceof TileBaseConductor || tileAdj instanceof EnergyStorageTile) + { + return false; // Do not try using other mods' methods to connect to + // GC's own tiles + } + + if (isIC2Loaded && tileAdj instanceof IEnergyEmitter) + { + return ((IEnergyEmitter) tileAdj).emitsEnergyTo(null, side); + } + + if (isBCReallyLoaded && hasCapability(tileAdj, MjAPI.CAP_PASSIVE_PROVIDER, side)) + { + return true; + } + + if (hasCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, side)) + { + return (getCapability(tileAdj, net.minecraftforge.energy.CapabilityEnergy.ENERGY, side).canExtract()); + } + + return false; + } + + public static boolean initialiseIC2Methods() + { + // Initialise a couple of non-IC2 classes + try + { + clazzMekCable = Class.forName("mekanism.common.tile.transmitter.TileEntityUniversalCable"); + } catch (Exception e) + { + } + try + { + clazzEnderIOCable = Class.forName("crazypants.enderio.conduits.conduit.TileConduitBundle"); + } catch (Exception e) + { + } + try + { + clazzMFRRednetEnergyCable = Class.forName("powercrystals.minefactoryreloaded.tile.rednet.TileEntityRedNetEnergy"); + } catch (Exception e) + { + } + try + { + clazzRailcraftEngine = Class.forName("mods.railcraft.common.blocks.single.TileEngine"); + } catch (Exception e) + { + } + + clazzPipeTile = CompatibilityManager.classBCTransportPipeTile; + + try + { + clazzPipeWood = Class.forName("buildcraft.transport.pipes.PipePowerWood"); + } catch (Exception e) + { + } + + if (isMekLoaded) + { + try + { + EnergyUtil.mekCapabilities = Class.forName("mekanism.common.capabilities.Capabilities"); + } catch (Exception ignore) + { + } + } + + if (isIC2Loaded) + { + GalacticraftCore.logger.debug("Initialising IC2 methods OK"); + + try + { + clazzIC2EnergyTile = Class.forName("ic2.core.energy.Tile"); + if (clazzIC2EnergyTile != null) + isIC2TileLoaded = true; + } catch (Exception ignore) + { + } + + try + { + clazzIC2Cable = Class.forName("ic2.api.energy.tile.IEnergyConductor"); + Class clazz = Class.forName("ic2.api.energy.tile.IEnergySink"); + + GalacticraftCore.logger.debug("Found IC2 IEnergySink class OK"); + + try + { + EnergyUtil.demandedEnergyIC2 = clazz.getMethod("getDemandedEnergy"); + } catch (Exception e) + { + // if that fails, try legacy version + try + { + EnergyUtil.demandedEnergyIC2 = clazz.getMethod("demandedEnergyUnits"); + } catch (Exception ee) + { + ee.printStackTrace(); + } + } + + GalacticraftCore.logger.debug("Set IC2 demandedEnergy method OK"); + + try + { + EnergyUtil.injectEnergyIC2 = clazz.getMethod("injectEnergy", EnumFacing.class, double.class, double.class); + EnergyUtil.voltageParameterIC2 = true; + GalacticraftCore.logger.debug("Set IC2 injectEnergy method OK"); + } catch (Exception e) + { + // if that fails, try legacy version + try + { + EnergyUtil.injectEnergyIC2 = clazz.getMethod("injectEnergyUnits", EnumFacing.class, double.class); + GalacticraftCore.logger.debug("IC2 inject 1.7.2 succeeded"); + } catch (Exception ee) + { + ee.printStackTrace(); + } + } + + Class clazzSource = Class.forName("ic2.api.energy.tile.IEnergySource"); + EnergyUtil.offeredEnergyIC2 = clazzSource.getMethod("getOfferedEnergy"); + EnergyUtil.drawEnergyIC2 = clazzSource.getMethod("drawEnergy", double.class); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + return true; + } + + public static boolean isElectricItem(Item item) + { + if (item instanceof IItemElectric) + return true; + + if (item == null) + return false; + + if (EnergyConfigHandler.isRFAPILoaded()) + { + if (item instanceof IEnergyContainerItem) + return true; + } + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof IElectricItem) + return true; + if (item instanceof ISpecialElectricItem) + return true; + } + if (EnergyConfigHandler.isMekanismLoaded()) + { + if (item instanceof IEnergizedItem) + return true; + } + + return false; + } + + public static boolean isChargedElectricItem(ItemStack stack) + { + if (stack.isEmpty()) + return false; + + Item item = stack.getItem(); + if (item instanceof IItemElectric) + { + return ((IItemElectric) item).getElectricityStored(stack) > 0; + } + + if (item == Items.AIR) + return false; + + if (EnergyConfigHandler.isRFAPILoaded()) + { + if (item instanceof IEnergyContainerItem) + return ((IEnergyContainerItem) item).getEnergyStored(stack) > 0; + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ISpecialElectricItem) + { + ISpecialElectricItem electricItem = (ISpecialElectricItem) item; + return electricItem.getManager(stack).discharge(stack, Double.POSITIVE_INFINITY, 3, true, true, true) > 0.0D; + } else if (item instanceof IElectricItem) + { + IElectricItem electricItem = (IElectricItem) item; + return electricItem.canProvideEnergy(stack); + } + } + + if (EnergyConfigHandler.isMekanismLoaded()) + { + if (item instanceof IEnergizedItem) + return ((IEnergizedItem) item).getEnergy(stack) > 0; + } + + return false; + } + + public static boolean isFillableElectricItem(ItemStack stack) + { + if (stack.isEmpty()) + return false; + + Item item = stack.getItem(); + if (item instanceof IItemElectric) + { + return ((IItemElectric) item).getElectricityStored(stack) < ((IItemElectric) item).getMaxElectricityStored(stack); + } + + if (item == Items.AIR) + return false; + + if (EnergyConfigHandler.isRFAPILoaded()) + { + if (item instanceof IEnergyContainerItem) + return ((IEnergyContainerItem) item).getEnergyStored(stack) < ((IEnergyContainerItem) item).getMaxEnergyStored(stack); + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ISpecialElectricItem) + { + ISpecialElectricItem electricItem = (ISpecialElectricItem) item; + return electricItem.getManager(stack).charge(stack, Double.POSITIVE_INFINITY, 3, true, true) > 0.0D; + } else if (item instanceof IElectricItem) + { + IElectricItem electricItem = (IElectricItem) item; + return electricItem.canProvideEnergy(stack); + } + } + + if (EnergyConfigHandler.isMekanismLoaded()) + { + if (item instanceof IEnergizedItem) + return ((IEnergizedItem) item).getEnergy(stack) < ((IEnergizedItem) item).getMaxEnergy(stack); + } + + return false; + } + + public static boolean hasCapability(ICapabilityProvider provider, Capability capability, EnumFacing side) + { + return (provider == null || capability == null) ? false : provider.hasCapability(capability, side); + } + + public static T getCapability(ICapabilityProvider provider, Capability capability, EnumFacing side) + { + return (provider == null || capability == null) ? null : provider.getCapability(capability, side); + } + + public static void initialiseMekCapabilities() + { + try + { + EnergyUtil.fieldCableAcceptor = mekCapabilities.getField("ENERGY_ACCEPTOR_CAPABILITY"); + if (EnergyUtil.fieldCableAcceptor != null) + { + EnergyUtil.mekCableAcceptor = (Capability) fieldCableAcceptor.get(null); + } + EnergyUtil.fieldEnergyStorage = mekCapabilities.getField("ENERGY_STORAGE_CAPABILITY"); + if (EnergyUtil.fieldEnergyStorage != null) + { + EnergyUtil.mekEnergyStorage = (Capability) fieldEnergyStorage.get(null); + } + Field gasHandlerCapability = mekCapabilities.getField("GAS_HANDLER_CAPABILITY"); + if (gasHandlerCapability != null) + { + EnergyUtil.mekGasHandler = (Capability) gasHandlerCapability.get(null); + } + Field gasTubeConnection = mekCapabilities.getField("TUBE_CONNECTION_CAPABILITY"); + if (gasTubeConnection != null) + { + EnergyUtil.mekTubeConnection = (Capability) gasTubeConnection.get(null); + } + EnergyUtil.fieldCableOutput = mekCapabilities.getField("ENERGY_OUTPUTTER_CAPABILITY"); + if (EnergyUtil.fieldCableOutput != null) + { + EnergyUtil.mekCableOutput = (Capability) fieldCableOutput.get(null); + } + } catch (Exception e) + { + } + } + + public static boolean checkMekGasHandler(Capability capability) + { + if (!EnergyConfigHandler.isMekanismLoaded() || capability == null || EnergyUtil.mekCapabilities == null) + { + return false; + } + if (EnergyUtil.mekGasHandler == null) + { + initialiseMekCapabilities(); + } + return capability == EnergyUtil.mekGasHandler || capability == EnergyUtil.mekTubeConnection; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/ChunkPowerHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/ChunkPowerHandler.java new file mode 100644 index 00000000..f5e32465 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/ChunkPowerHandler.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.grid; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.ChunkEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class ChunkPowerHandler +{ + + private static boolean initiated = false; + + public static void initiate() + { + if (!ChunkPowerHandler.initiated) + { + ChunkPowerHandler.initiated = true; + MinecraftForge.EVENT_BUS.register(new ChunkPowerHandler()); + } + } + + @SubscribeEvent + public void onChunkLoad(ChunkEvent.Load event) + { + if (!event.getWorld().isRemote && event.getChunk() != null) + { + try + { + ArrayList tileList = Lists.newArrayList(); + tileList.addAll(event.getChunk().getTileEntityMap().values()); + + for (Object o : tileList) + { + if (o instanceof TileEntity) + { + TileEntity tile = (TileEntity) o; + + if (tile instanceof INetworkConnection) + { + ((INetworkConnection) tile).refresh(); + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + + if (ConfigManagerCore.retrogenOil && GCCoreUtil.getDimensionID(event.getWorld()) == 0) + { + EventHandlerGC.retrogenOil(event.getWorld(), event.getChunk()); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/EnergyNetwork.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/EnergyNetwork.java new file mode 100644 index 00000000..9b1a5f0a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/EnergyNetwork.java @@ -0,0 +1,804 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.grid; + +import buildcraft.api.mj.IMjReceiver; +import cofh.redstoneflux.api.IEnergyReceiver; +import ic2.api.energy.tile.IEnergySink; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import mekanism.api.energy.IStrictEnergyAcceptor; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +//import buildcraft.api.power.PowerHandler.Type; + +/** + * A universal network that works with multiple energy systems. + * + * @author radfast, micdoodle8, Calclavia, Aidancbrady + */ +public class EnergyNetwork implements IElectricityNetwork +{ + + private boolean isMekLoaded = EnergyConfigHandler.isMekanismLoaded() && !EnergyConfigHandler.disableMekanismOutput; + private boolean isRF1Loaded = EnergyConfigHandler.isRFAPIv1Loaded() && !EnergyConfigHandler.disableRFOutput; + private boolean isRF2Loaded = EnergyConfigHandler.isRFAPIv2Loaded() && !EnergyConfigHandler.disableRFOutput; + private boolean isIC2Loaded = EnergyConfigHandler.isIndustrialCraft2Loaded() && !EnergyConfigHandler.disableIC2Output; + private boolean isFELoaded = !EnergyConfigHandler.disableFEOutput; + private boolean isBCLoaded = EnergyConfigHandler.isBuildcraftLoaded() && !EnergyConfigHandler.disableBuildCraftOutput; + + /* + * Re-written by radfast for better performance Imagine a 30 producer, 80 + * acceptor network... Before: it would have called the inner loop in + * produce() 2400 times each tick. Not good! After: the inner loop runs 80 + * times - part of it is in doTickStartCalc() at/near the tick start, and + * part of it is in doProduce() at the end of the tick + */ + public static int tickCount = 0; + private int tickDone = -1; + private float totalRequested = 0F; + private float totalStorageExcess = 0F; + private float totalEnergy = 0F; + private float totalSent = 0F; + private boolean doneScheduled = false; + private boolean spamstop = false; + private boolean loopPrevention = false; + public int networkTierGC = 1; + private int producersTierGC = 1; + + /* + * connectedAcceptors is all the acceptors connected to this network + * connectedDirections is the directions of those connections (from the + * point of view of the acceptor tile) Note: each position in those two + * linked lists matches so, an acceptor connected on two sides will be in + * connectedAcceptors twice + */ + private List connectedAcceptors = new LinkedList<>(); + private List connectedDirections = new LinkedList<>(); + + /* + * availableAcceptors is the acceptors which can receive energy (this tick) + * availableconnectedDirections is a map of those acceptors and the + * directions they will receive from (from the point of view of the acceptor + * tile) Note: each acceptor will only be included once in these collections + * (there is no point trying to put power into a machine twice from two + * different sides) + */ + private Set availableAcceptors = new HashSet<>(); + private Map availableconnectedDirections = new HashMap<>(); + + private Map energyRequests = new HashMap<>(); + private List ignoreAcceptors = new LinkedList<>(); + + private final Set conductors = new HashSet<>(); + + // This is an energy per tick which exceeds what any normal machine will + // request, so the requester must be an energy storage - for example, a + // battery or an energy cube + private final static float ENERGY_STORAGE_LEVEL = 200F; + + @Override + public Set getTransmitters() + { + return this.conductors; + } + + /** + * Get the total energy request in this network + * + * @param ignoreTiles Tiles to ignore in the request calculations (NOTE: + * only used in initial (internal) check. + * @return Amount of energy requested in this network + */ + @Override + public float getRequest(TileEntity... ignoreTiles) + { + if (EnergyNetwork.tickCount != this.tickDone) + { + // Start the new tick - initialise everything + this.ignoreAcceptors.clear(); + this.ignoreAcceptors.addAll(Arrays.asList(ignoreTiles)); + this.doTickStartCalc(); + } + return this.totalRequested - this.totalEnergy - this.totalSent; + } + + /** + * Produce energy into the network + * + * @param energy Amount of energy to send into the network + * @param doReceive Whether to put energy into the network (true) or just + * simulate (false) + * @param ignoreTiles TileEntities to ignore for energy transfers. + * @return Amount of energy REMAINING from the passed energy parameter + */ + @Override + public float produce(float energy, boolean doReceive, int producerTier, TileEntity... ignoreTiles) + { + if (this.loopPrevention) + { + return energy; + } + + if (energy > 0F) + { + if (EnergyNetwork.tickCount != this.tickDone) + { + this.tickDone = EnergyNetwork.tickCount; + // Start the new tick - initialise everything + this.ignoreAcceptors.clear(); + this.ignoreAcceptors.addAll(Arrays.asList(ignoreTiles)); + this.producersTierGC = 1; + this.doTickStartCalc(); + } else + { + this.ignoreAcceptors.addAll(Arrays.asList(ignoreTiles)); + } + + if (!this.doneScheduled && this.totalRequested > 0.0F) + { + TickHandlerServer.scheduleNetworkTick(this); + this.doneScheduled = true; + } + + // On a regular mid-tick produce(), just figure out how much is + // totalEnergy this tick and return the used amount + // This will return 0 if totalRequested is 0 - for example a network + // with no acceptors + float totalEnergyLast = this.totalEnergy; + + // Add the energy for distribution by this grid later this tick + // Note: totalEnergy cannot exceed totalRequested + if (doReceive) + { + this.totalEnergy += Math.min(energy, this.totalRequested - totalEnergyLast); + // The field producersTierGC will be the *highest* of any + // producers putting energy into the network this tick + if (producerTier > this.producersTierGC) + { + this.producersTierGC = producerTier; + } + } + + if (this.totalRequested >= totalEnergyLast + energy) + { + return 0F; // All the electricity will be used + } + if (totalEnergyLast >= this.totalRequested) + { + return energy; // None of the electricity will be used + } + return totalEnergyLast + energy - this.totalRequested; // Some of + // the + // electricity + // will be + // used + } + return energy; + } + + /** + * Called on server tick end, from the Galacticraft Core tick handler. + */ + public void tickEnd() + { + this.doneScheduled = false; + this.loopPrevention = true; + + // Finish the last tick if there was some to send and something to + // receive it + if (this.totalEnergy > 0F) + { + // Call doTickStartCalc a second time in case anything has updated + // meanwhile + this.doTickStartCalc(); + + if (this.totalRequested > 0F) + { + this.totalSent = this.doProduce(); + if (this.totalSent < this.totalEnergy) + { + // Any spare energy left is retained for the next tick + this.totalEnergy -= this.totalSent; + } else + { + this.totalEnergy = 0F; + } + } else + { + this.totalEnergy = 0F; + } + } else + { + this.totalEnergy = 0F; + } + + this.loopPrevention = false; + } + + /** + * Refreshes all tiles in network, and updates requested energy + */ + private void doTickStartCalc() + { + this.tickDone = EnergyNetwork.tickCount; + this.totalSent = 0F; + this.refreshAcceptors(); + + if (!EnergyUtil.initialisedIC2Methods) + { + EnergyUtil.initialiseIC2Methods(); + } + + if (this.conductors.size() == 0) + { + return; + } + + this.loopPrevention = true; + + this.availableAcceptors.clear(); + this.availableconnectedDirections.clear(); + this.energyRequests.clear(); + this.totalRequested = 0.0F; + this.totalStorageExcess = 0F; + + if (!this.connectedAcceptors.isEmpty()) + { + float e; + final Iterator acceptorDirection = this.connectedDirections.iterator(); + for (Object acceptor : this.connectedAcceptors) + { + // This tries all sides of the acceptor which are connected (see + // refreshAcceptors()) + EnumFacing sideFrom = acceptorDirection.next(); + + // But the grid will only put energy into the acceptor from one + // side - once it's in availableAcceptors + if (!this.ignoreAcceptors.contains(acceptor) && !this.availableAcceptors.contains(acceptor)) + { + e = 0.0F; + + if (acceptor instanceof IElectrical) + { + e = ((IElectrical) acceptor).getRequest(sideFrom); + } else if (isMekLoaded && acceptor instanceof IStrictEnergyAcceptor) + { + e = (float) (((IStrictEnergyAcceptor) acceptor).acceptEnergy(sideFrom, 1000000D, true) / EnergyConfigHandler.TO_MEKANISM_RATIO); + } else if (isIC2Loaded && acceptor instanceof IEnergySink) + { + double result = 0; + try + { + result = (Double) EnergyUtil.demandedEnergyIC2.invoke(acceptor); + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + // Cap IC2 power transfer at 128EU/t for standard Alu + // wire, 256EU/t for heavy Alu wire + result = Math.min(result, this.networkTierGC * 128D); + e = (float) result / EnergyConfigHandler.TO_IC2_RATIO; + } else if (isBCLoaded && acceptor instanceof IMjReceiver) + { + long bcDemand = ((IMjReceiver) acceptor).getPowerRequested(); + bcDemand = Math.min(bcDemand, this.networkTierGC * this.networkTierGC * 16000000L); // Capped + // at + // 16 + // MJ/tick + // for + // standard + // Alu + // wire, + // 64 + // for + // heavy. + e = bcDemand / EnergyConfigHandler.TO_BC_RATIO; + } else if (isRF2Loaded && acceptor instanceof IEnergyReceiver) + { + e = ((IEnergyReceiver) acceptor).receiveEnergy(sideFrom, Integer.MAX_VALUE, true) / EnergyConfigHandler.TO_RF_RATIO; + } else if (isFELoaded && acceptor instanceof net.minecraftforge.energy.IEnergyStorage) + { + net.minecraftforge.energy.IEnergyStorage forgeEnergy = (net.minecraftforge.energy.IEnergyStorage) acceptor; + if (forgeEnergy.canReceive()) + { + e = forgeEnergy.receiveEnergy(Integer.MAX_VALUE, true) / EnergyConfigHandler.TO_RF_RATIO; + } + } + + if (e > 0.0F) + { + this.availableAcceptors.add(acceptor); + this.availableconnectedDirections.put(acceptor, sideFrom); + this.energyRequests.put(acceptor, e); + this.totalRequested += e; + if (e > EnergyNetwork.ENERGY_STORAGE_LEVEL) + { + this.totalStorageExcess += e - EnergyNetwork.ENERGY_STORAGE_LEVEL; + } + } + } + } + } + + this.loopPrevention = false; + } + + /** + * Complete the energy transfer. Called internally on server tick end. + * + * @return Amount of energy SENT to all acceptors + */ + private float doProduce() + { + float sent = 0.0F; + + if (!this.availableAcceptors.isEmpty()) + { + float energyNeeded = this.totalRequested; + float energyAvailable = this.totalEnergy; + float reducor = 1.0F; + float energyStorageReducor = 1.0F; + + if (energyNeeded > energyAvailable) + { + // If not enough energy, try reducing what goes into energy + // storage (if any) + energyNeeded -= this.totalStorageExcess; + // If there's still not enough, put the minimum into energy + // storage (if any) and, anyhow, reduce everything + // proportionately + if (energyNeeded > energyAvailable) + { + energyStorageReducor = 0F; + reducor = energyAvailable / energyNeeded; + } else + { + // Energyavailable exceeds the total needed but only if + // storage does not fill all in one go - this is a common + // situation + energyStorageReducor = (energyAvailable - energyNeeded) / this.totalStorageExcess; + } + } + + float currentSending; + float sentToAcceptor; + int tierProduced = Math.min(this.producersTierGC, this.networkTierGC); + + Object debugTE = null; + try + { + for (Object tileEntity : this.availableAcceptors) + { + debugTE = tileEntity; + // Exit the loop if there is no energy left at all (should + // normally not happen, should be some even for the last + // acceptor) + if (sent >= energyAvailable) + { + break; + } + + // The base case is to give each acceptor what it is + // requesting + currentSending = this.energyRequests.get(tileEntity); + + // If it's an energy store, we may need to damp it down if + // energyStorageReducor is less than 1 + if (currentSending > EnergyNetwork.ENERGY_STORAGE_LEVEL) + { + currentSending = EnergyNetwork.ENERGY_STORAGE_LEVEL + (currentSending - EnergyNetwork.ENERGY_STORAGE_LEVEL) * energyStorageReducor; + } + + // Reduce everything proportionately if there is not enough + // energy for all needs + currentSending *= reducor; + + if (currentSending > energyAvailable - sent) + { + currentSending = energyAvailable - sent; + } + + EnumFacing sideFrom = this.availableconnectedDirections.get(tileEntity); + + if (tileEntity instanceof IElectrical) + { + sentToAcceptor = ((IElectrical) tileEntity).receiveElectricity(sideFrom, currentSending, tierProduced, true); + } else if (isMekLoaded && tileEntity instanceof IStrictEnergyAcceptor) + { + sentToAcceptor = + (float) ((IStrictEnergyAcceptor) tileEntity).acceptEnergy(sideFrom, currentSending * EnergyConfigHandler.TO_MEKANISM_RATIO, false) / EnergyConfigHandler.TO_MEKANISM_RATIO; + } else if (isIC2Loaded && tileEntity instanceof IEnergySink) + { + double energySendingIC2 = currentSending * EnergyConfigHandler.TO_IC2_RATIO; + if (energySendingIC2 >= 1D) + { + double result = 0; + try + { + if (EnergyUtil.voltageParameterIC2) + { + result = (Double) EnergyUtil.injectEnergyIC2.invoke(tileEntity, sideFrom.getOpposite(), energySendingIC2, 120D); + } else + { + result = (Double) EnergyUtil.injectEnergyIC2.invoke(tileEntity, sideFrom.getOpposite(), energySendingIC2); + } + } catch (Exception ex) + { + if (ConfigManagerCore.enableDebug) + { + ex.printStackTrace(); + } + } + sentToAcceptor = currentSending - (float) result / EnergyConfigHandler.TO_IC2_RATIO; + if (sentToAcceptor < 0F) + { + sentToAcceptor = 0F; + } + } else + { + sentToAcceptor = 0F; + } + } else if (isBCLoaded && tileEntity instanceof IMjReceiver) + { + long toSendBC = (long) (currentSending * EnergyConfigHandler.TO_BC_RATIO); + sentToAcceptor = (toSendBC - ((IMjReceiver) tileEntity).receivePower(toSendBC, false)) / EnergyConfigHandler.TO_BC_RATIO; + } else if (isRF2Loaded && tileEntity instanceof IEnergyReceiver) + { + final int currentSendinginRF = + (currentSending >= Integer.MAX_VALUE / EnergyConfigHandler.TO_RF_RATIO) ? Integer.MAX_VALUE : (int) (currentSending * EnergyConfigHandler.TO_RF_RATIO); + sentToAcceptor = ((IEnergyReceiver) tileEntity).receiveEnergy(sideFrom, currentSendinginRF, false) / EnergyConfigHandler.TO_RF_RATIO; + } else if (isFELoaded && tileEntity instanceof net.minecraftforge.energy.IEnergyStorage) + { + final int currentSendinginRF = + (currentSending >= Integer.MAX_VALUE / EnergyConfigHandler.TO_RF_RATIO) ? Integer.MAX_VALUE : (int) (currentSending * EnergyConfigHandler.TO_RF_RATIO); + sentToAcceptor = ((net.minecraftforge.energy.IEnergyStorage) tileEntity).receiveEnergy(currentSendinginRF, false) / EnergyConfigHandler.TO_RF_RATIO; + } else + { + sentToAcceptor = 0F; + } + + if (sentToAcceptor / currentSending > 1.002F && sentToAcceptor > 0.01F) + { + if (!this.spamstop) + { + GalacticraftCore.logger.info("Energy network: acceptor took too much energy, offered " + currentSending + ", took " + sentToAcceptor + ". " + tileEntity.toString()); + this.spamstop = true; + } + sentToAcceptor = currentSending; + } + + sent += sentToAcceptor; + } + } catch (Exception e) + { + GalacticraftCore.logger.error("DEBUG Energy network loop issue, please report this"); + if (debugTE instanceof TileEntity) + { + GalacticraftCore.logger.error("Problem was likely caused by tile in dim " + GCCoreUtil.getDimensionID(((TileEntity) debugTE).getWorld()) + " at " + ((TileEntity) debugTE).getPos() + " Type:" + + debugTE.getClass().getSimpleName()); + } + } + } + + if (EnergyNetwork.tickCount % 200 == 0) + { + this.spamstop = false; + } + + float returnvalue = sent; + if (returnvalue > this.totalEnergy) + { + returnvalue = this.totalEnergy; + } + if (returnvalue < 0F) + { + returnvalue = 0F; + } + return returnvalue; + } + + /** + * Refresh validity of each conductor in the network + */ + public void refreshWithChecks() + { + int tierfound = Integer.MAX_VALUE; + Iterator it = this.conductors.iterator(); + while (it.hasNext()) + { + IConductor conductor = it.next(); + + if (conductor == null) + { + it.remove(); + continue; + } + + TileEntity tile = (TileEntity) conductor; + World world = tile.getWorld(); + // Remove any conductors in unloaded chunks + if (tile.isInvalid() || world == null || !world.isBlockLoaded(tile.getPos())) + { + it.remove(); + continue; + } + + if (conductor != world.getTileEntity(tile.getPos())) + { + it.remove(); + continue; + } + + if (conductor.getTierGC() < tierfound) + { + tierfound = conductor.getTierGC(); + } + + if (conductor.getNetwork() != this) + { + conductor.setNetwork(this); + conductor.onNetworkChanged(); + } + } + + // This will set the network tier to 2 if all the conductors are tier 2 + if (tierfound == Integer.MAX_VALUE) + { + tierfound = 1; + } + this.networkTierGC = tierfound; + } + + @Override + public void refresh() + { + int tierfound = Integer.MAX_VALUE; + Iterator it = this.conductors.iterator(); + while (it.hasNext()) + { + IConductor conductor = it.next(); + + if (conductor == null) + { + it.remove(); + continue; + } + + TileEntity tile = (TileEntity) conductor; + World world = tile.getWorld(); + // Remove any conductors in unloaded chunks + if (tile.isInvalid() || world == null) + { + it.remove(); + continue; + } + + if (conductor.getTierGC() < tierfound) + { + tierfound = conductor.getTierGC(); + } + + if (conductor.getNetwork() != this) + { + conductor.setNetwork(this); + conductor.onNetworkChanged(); + } + } + + // This will set the network tier to 2 if all the conductors are tier 2, + // etc + if (tierfound == Integer.MAX_VALUE) + { + tierfound = 1; + } + this.networkTierGC = tierfound; + } + + /** + * Refresh all energy acceptors in the network + */ + private void refreshAcceptors() + { + this.connectedAcceptors.clear(); + this.connectedDirections.clear(); + + this.refreshWithChecks(); + + try + { + LinkedList conductorsCopy = new LinkedList<>(); + conductorsCopy.addAll(this.conductors); + // This prevents concurrent modifications if something in the loop + // causes chunk loading + // (Chunk loading can change the network if new conductors are + // found) + for (IConductor conductor : conductorsCopy) + { + EnergyUtil.setAdjacentPowerConnections((TileEntity) conductor, this.connectedAcceptors, this.connectedDirections); + } + } catch (Exception e) + { + GalacticraftCore.logger.error("GC Aluminium Wire: Error when testing whether another mod's tileEntity can accept energy."); + e.printStackTrace(); + } + } + + /** + * Combine this network with another electricitynetwork + * + * @param network Network to merge with + * @return The final, joined network + */ + @Override + public IElectricityNetwork merge(IElectricityNetwork network) + { + if (network != null && network != this) + { + Set thisNetwork = this.conductors; + Set thatNetwork = network.getTransmitters(); + if (thisNetwork.size() < thatNetwork.size()) + { + thatNetwork.addAll(thisNetwork); + network.refresh(); + this.destroy(); + return network; + } + thisNetwork.addAll(thatNetwork); + this.refresh(); + if (network instanceof EnergyNetwork) + { + ((EnergyNetwork) network).destroy(); + } + } + + return this; + } + + private void destroy() + { + this.conductors.clear(); + this.connectedAcceptors.clear(); + this.availableAcceptors.clear(); + this.totalEnergy = 0F; + this.totalRequested = 0F; + TickHandlerServer.removeNetworkTick(this); + } + + @SuppressWarnings("unlikely-arg-type") + @Override + public void split(IConductor splitPoint) + { + if (splitPoint instanceof TileEntity) + { + this.getTransmitters().remove(splitPoint); + splitPoint.setNetwork(null); + + // If the size of the residual network is 1, it should simply be + // preserved + if (this.getTransmitters().size() > 1) + { + World world = ((TileEntity) splitPoint).getWorld(); + + if (this.getTransmitters().size() > 0) + { + TileEntity[] nextToSplit = new TileEntity[6]; + boolean[] toDo = + {true, true, true, true, true, true}; + TileEntity tileEntity; + + BlockPos pos = ((TileEntity) splitPoint).getPos(); + + for (int j = 0; j < 6; j++) + { + switch (j) + { + case 0: + tileEntity = world.getTileEntity(pos.down()); + break; + case 1: + tileEntity = world.getTileEntity(pos.up()); + break; + case 2: + tileEntity = world.getTileEntity(pos.north()); + break; + case 3: + tileEntity = world.getTileEntity(pos.south()); + break; + case 4: + tileEntity = world.getTileEntity(pos.west()); + break; + case 5: + tileEntity = world.getTileEntity(pos.east()); + break; + default: + // Not reachable, only to prevent uninitiated + // compile errors + tileEntity = null; + break; + } + + if (tileEntity instanceof IConductor && ((IConductor) tileEntity).canConnect(EnumFacing.byIndex(j ^ 1), NetworkType.POWER)) + { + nextToSplit[j] = tileEntity; + } else + { + toDo[j] = false; + } + } + + for (int i1 = 0; i1 < 6; i1++) + { + if (toDo[i1]) + { + TileEntity connectedBlockA = nextToSplit[i1]; + NetworkFinder finder = new NetworkFinder(world, new BlockVec3(connectedBlockA), new BlockVec3(pos)); + List partNetwork = finder.exploreNetwork(); + + // Mark any others still to do in the nextToSplit + // array which are connected to this, as dealt with + for (int i2 = i1 + 1; i2 < 6; i2++) + { + TileEntity connectedBlockB = nextToSplit[i2]; + + if (toDo[i2]) + { + if (partNetwork.contains(connectedBlockB)) + { + toDo[i2] = false; + } + } + } + + // Now make the new network from partNetwork + EnergyNetwork newNetwork = new EnergyNetwork(); + newNetwork.getTransmitters().addAll(partNetwork); + newNetwork.refreshWithChecks(); + } + } + + this.destroy(); + } + } + // Splitting a 1-block network leaves nothing + else if (this.getTransmitters().size() == 0) + { + this.destroy(); + } + } + } + + @Override + public String toString() + { + return "EnergyNetwork[" + this.hashCode() + "|Wires:" + this.getTransmitters().size() + "|Acceptors:" + this.connectedAcceptors.size() + "]"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/NetworkFinder.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/NetworkFinder.java new file mode 100644 index 00000000..1d2ce7a1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/grid/NetworkFinder.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.grid; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class NetworkFinder +{ + + public World worldObj; + public BlockVec3 start; + private int theDim; + private BlockVec3 toIgnore; + + private Set iterated = new HashSet(); + public List found = new LinkedList(); + + public NetworkFinder(World world, BlockVec3 location, BlockVec3 ignore) + { + worldObj = world; + start = location; + + toIgnore = ignore; + } + + private void loopAll(int x, int y, int z, int dirIn) + { + BlockVec3 obj = null; + for (int dir = 0; dir < 6; dir++) + { + if (dir == dirIn) + { + continue; + } + switch (dir) + { + case 0: + obj = new BlockVec3(x, y - 1, z); + break; + case 1: + obj = new BlockVec3(x, y + 1, z); + break; + case 2: + obj = new BlockVec3(x, y, z - 1); + break; + case 3: + obj = new BlockVec3(x, y, z + 1); + break; + case 4: + obj = new BlockVec3(x - 1, y, z); + break; + case 5: + obj = new BlockVec3(x + 1, y, z); + break; + } + + if (!iterated.contains(obj)) + { + iterated.add(obj); + + TileEntity tileEntity = worldObj.getTileEntity(new BlockPos(obj.x, obj.y, obj.z)); + + if (tileEntity instanceof IConductor && ((IConductor) tileEntity).canConnect(EnumFacing.byIndex(dir ^ 1), NetworkType.POWER)) + { + found.add((IConductor) tileEntity); + loopAll(obj.x, obj.y, obj.z, dir ^ 1); + } + } + } + } + + public List exploreNetwork() + { + if (start.getTileEntity(worldObj) instanceof IConductor) + { + iterated.add(start); + iterated.add(toIgnore); + found.add((IConductor) start.getTileEntity(worldObj)); + loopAll(start.x, start.y, start.z, 6); + } + + return found; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ElectricItemManagerIC2.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ElectricItemManagerIC2.java new file mode 100644 index 00000000..95b93c06 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ElectricItemManagerIC2.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.item; + +import ic2.api.item.IElectricItem; +import ic2.api.item.IElectricItemManager; +import micdoodle8.mods.galacticraft.api.item.IItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +/* + * Interface between Galacticraft electric items (batteries) and IC2. + * + * Galactricraft items implemented as Tier 1 items when recharging + * and for discharging purposes (so can power anything) + */ +public class ElectricItemManagerIC2 implements IElectricItemManager +{ + + @Override + public double charge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + IItemElectricBase item = (IItemElectricBase) itemStack.getItem(); + if (amount > ((IElectricItem) item).getMaxCharge(itemStack)) + { + amount = ((IElectricItem) item).getMaxCharge(itemStack); + } + float energy = (float) amount * EnergyConfigHandler.IC2_RATIO; + float rejectedElectricity = Math.max(item.getElectricityStored(itemStack) + energy - item.getMaxElectricityStored(itemStack), 0); + float energyToReceive = energy - rejectedElectricity; + if (!ignoreTransferLimit && energyToReceive > item.getMaxTransferGC(itemStack)) + { + energyToReceive = item.getMaxTransferGC(itemStack); + } + + if (!simulate) + { + item.setElectricity(itemStack, item.getElectricityStored(itemStack) + energyToReceive); + } + + return energyToReceive / EnergyConfigHandler.IC2_RATIO; + } + return 0D; + } + + @Override + public double discharge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + IItemElectricBase item = (IItemElectricBase) itemStack.getItem(); + float energy = (float) amount / EnergyConfigHandler.TO_IC2_RATIO; + float energyToTransfer = Math.min(item.getElectricityStored(itemStack), energy); + if (!ignoreTransferLimit) + { + energyToTransfer = Math.min(energyToTransfer, item.getMaxTransferGC(itemStack)); + } + + if (!simulate) + { + item.setElectricity(itemStack, item.getElectricityStored(itemStack) - energyToTransfer); + } + + return energyToTransfer * EnergyConfigHandler.TO_IC2_RATIO; + } + return 0D; + } + + @Override + public double getCharge(ItemStack itemStack) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + IItemElectricBase item = (IItemElectricBase) itemStack.getItem(); + return item.getElectricityStored(itemStack) * EnergyConfigHandler.TO_IC2_RATIO; + } + return 0D; + } + + @Override + public boolean canUse(ItemStack itemStack, double amount) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + return this.getCharge(itemStack) >= amount; + } + return false; + } + + @Override + public boolean use(ItemStack itemStack, double amount, EntityLivingBase entity) + { + if (itemStack.getItem() instanceof IItemElectricBase) + { + return this.discharge(itemStack, amount, 1, true, false, false) >= amount - 1; + } + return false; + } + + @Override + public void chargeFromArmor(ItemStack itemStack, EntityLivingBase entity) + { + } + + @Override + public String getToolTip(ItemStack itemStack) + { + return null; + } + + @Override + public double getMaxCharge(ItemStack stack) + { + if (stack.getItem() instanceof IItemElectricBase) + { + return ((IElectricItem) stack.getItem()).getMaxCharge(stack); + } + return 1; + } + + @Override + public int getTier(ItemStack stack) + { + if (stack.getItem() instanceof IItemElectricBase) + { + return ((IElectricItem) stack.getItem()).getTier(stack); + } + + return 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ItemElectricBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ItemElectricBase.java new file mode 100644 index 00000000..6deae74d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/item/ItemElectricBase.java @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.item; + +import ic2.api.item.IElectricItem; +import ic2.api.item.IElectricItemManager; +import ic2.api.item.ISpecialElectricItem; +import java.util.List; +import javax.annotation.Nullable; +import mekanism.api.energy.IEnergizedItem; +import micdoodle8.mods.galacticraft.api.item.ElectricItemHelper; +import micdoodle8.mods.galacticraft.api.item.IItemElectricBase; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.items.ItemBatteryInfinite; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagDouble; +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion; +import net.minecraftforge.fml.relauncher.FMLInjectionData; + +//@noformat +@InterfaceList(value = { + @Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.item.IElectricItem", modid = CompatibilityManager.modidIC2), + @Interface(iface = "mekanism.api.energy.IEnergizedItem", modid = CompatibilityManager.modidMekanism) +}) +public abstract class ItemElectricBase extends Item implements IItemElectricBase, ISpecialElectricItem, IElectricItem, IEnergizedItem +{ + + private static Object itemManagerIC2; + public float transferMax; + private DefaultArtifactVersion mcVersion = null; + private static final int DAMAGE_RANGE = 100; + + public ItemElectricBase() + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(DAMAGE_RANGE); + this.setNoRepair(); + this.setMaxTransfer(); + + this.mcVersion = new DefaultArtifactVersion((String) FMLInjectionData.data()[4]); + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + itemManagerIC2 = new ElectricItemManagerIC2(); + } + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + protected void setMaxTransfer() + { + this.transferMax = 200; + } + + @Override + public float getMaxTransferGC(ItemStack itemStack) + { + return this.transferMax; + } + + @Override + public void addInformation(ItemStack itemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + String color = ""; + float joules = this.getElectricityStored(itemStack); + + if (joules <= this.getMaxElectricityStored(itemStack) / 3) + { + color = "\u00a74"; + } else if (joules > this.getMaxElectricityStored(itemStack) * 2 / 3) + { + color = "\u00a72"; + } else + { + color = "\u00a76"; + } + + tooltip.add(color + EnergyDisplayHelper.getEnergyDisplayS(joules) + "/" + EnergyDisplayHelper.getEnergyDisplayS(this.getMaxElectricityStored(itemStack))); + } + + /** + * Makes sure the item is uncharged when it is crafted and not charged. + * Change this if you do not want this to happen! + */ + @Override + public void onCreated(ItemStack itemStack, World par2World, EntityPlayer par3EntityPlayer) + { + this.setElectricity(itemStack, 0); + } + + @Override + public float recharge(ItemStack itemStack, float energy, boolean doReceive) + { + float rejectedElectricity = Math.max(this.getElectricityStored(itemStack) + energy - this.getMaxElectricityStored(itemStack), 0); + float energyToReceive = energy - rejectedElectricity; + if (energyToReceive > this.transferMax) + { + rejectedElectricity += energyToReceive - this.transferMax; + energyToReceive = this.transferMax; + } + + if (doReceive) + { + this.setElectricity(itemStack, this.getElectricityStored(itemStack) + energyToReceive); + } + + return energyToReceive; + } + + @Override + public float discharge(ItemStack itemStack, float energy, boolean doTransfer) + { + float thisEnergy = this.getElectricityStored(itemStack); + float energyToTransfer = Math.min(Math.min(thisEnergy, energy), this.transferMax); + + if (doTransfer) + { + this.setElectricity(itemStack, thisEnergy - energyToTransfer); + } + + return energyToTransfer; + } + + @Override + public int getTierGC(ItemStack itemStack) + { + return 1; + } + + @Override + public void setElectricity(ItemStack itemStack, float joules) + { + // Saves the frequency in the ItemStack + if (itemStack.getTagCompound() == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + float electricityStored = Math.max(Math.min(joules, this.getMaxElectricityStored(itemStack)), 0); + if (joules > 0F || itemStack.getTagCompound().hasKey("electricity")) + { + itemStack.getTagCompound().setFloat("electricity", electricityStored); + } + + /** Sets the damage as a percentage to render the bar properly. */ + itemStack.setItemDamage(DAMAGE_RANGE - (int) (electricityStored / this.getMaxElectricityStored(itemStack) * DAMAGE_RANGE)); + } + + @Override + public float getTransfer(ItemStack itemStack) + { + return Math.min(this.transferMax, this.getMaxElectricityStored(itemStack) - this.getElectricityStored(itemStack)); + } + + /** + * Gets the energy stored in the item. Energy is stored using item NBT + */ + @Override + public float getElectricityStored(ItemStack itemStack) + { + if (itemStack.getTagCompound() == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + float energyStored = 0f; + if (itemStack.getTagCompound().hasKey("electricity")) + { + NBTBase obj = itemStack.getTagCompound().getTag("electricity"); + if (obj instanceof NBTTagDouble) + { + energyStored = ((NBTTagDouble) obj).getFloat(); + } else if (obj instanceof NBTTagFloat) + { + energyStored = ((NBTTagFloat) obj).getFloat(); + } + } else // First time check item - maybe from addInformation() in a JEI + // recipe display? + { + if (itemStack.getItemDamage() == DAMAGE_RANGE) + return 0F; + + energyStored = this.getMaxElectricityStored(itemStack) * (DAMAGE_RANGE - itemStack.getItemDamage()) / DAMAGE_RANGE; + itemStack.getTagCompound().setFloat("electricity", energyStored); + } + + /** Sets the damage as a percentage to render the bar properly. */ + itemStack.setItemDamage(DAMAGE_RANGE - (int) (energyStored / this.getMaxElectricityStored(itemStack) * DAMAGE_RANGE)); + return energyStored; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(ElectricItemHelper.getUncharged(new ItemStack(this))); + list.add(ElectricItemHelper.getWithCharge(new ItemStack(this), this.getMaxElectricityStored(new ItemStack(this)))); + } + } + + public static boolean isElectricItem(Item item) + { + if (item instanceof IItemElectricBase) + { + return true; + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ic2.api.item.ISpecialElectricItem) + { + return true; + } + } + + return false; + } + + public static boolean isElectricItemEmpty(ItemStack itemstack) + { + if (itemstack.isEmpty()) + { + return false; + } + Item item = itemstack.getItem(); + + if (item instanceof IItemElectricBase) + { + return ((IItemElectricBase) item).getElectricityStored(itemstack) <= 0; + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ic2.api.item.IElectricItem) + { + return !((ic2.api.item.IElectricItem) item).canProvideEnergy(itemstack); + } + } + + return false; + } + + public static boolean isElectricItemCharged(ItemStack itemstack) + { + if (itemstack == null) + return false; + Item item = itemstack.getItem(); + + if (item instanceof IItemElectricBase) + { + return ((IItemElectricBase) item).getElectricityStored(itemstack) > 0; + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ic2.api.item.IElectricItem) + { + return ((ic2.api.item.IElectricItem) item).canProvideEnergy(itemstack); + } + } + + return false; + } + + // For RF compatibility + + public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) + { + return (int) (this.recharge(container, maxReceive * EnergyConfigHandler.RF_RATIO, !simulate) / EnergyConfigHandler.RF_RATIO); + } + + public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) + { + return (int) (this.discharge(container, maxExtract / EnergyConfigHandler.TO_RF_RATIO, !simulate) * EnergyConfigHandler.TO_RF_RATIO); + } + + public int getEnergyStored(ItemStack container) + { + return (int) (this.getElectricityStored(container) * EnergyConfigHandler.TO_RF_RATIO); + } + + public int getMaxEnergyStored(ItemStack container) + { + return (int) (this.getMaxElectricityStored(container) * EnergyConfigHandler.TO_RF_RATIO); + } + + // The following seven methods are for Mekanism compatibility + + @Method(modid = CompatibilityManager.modidMekanism) + public double getEnergy(ItemStack itemStack) + { + return this.getElectricityStored(itemStack) * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public void setEnergy(ItemStack itemStack, double amount) + { + this.setElectricity(itemStack, (float) amount * EnergyConfigHandler.MEKANISM_RATIO); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxEnergy(ItemStack itemStack) + { + return this.getMaxElectricityStored(itemStack) * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxTransfer(ItemStack itemStack) + { + return this.transferMax * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canReceive(ItemStack itemStack) + { + return (itemStack != null && !(itemStack.getItem() instanceof ItemBatteryInfinite)); + } + + public boolean canSend(ItemStack itemStack) + { + return true; + } + + // All the following methods are for IC2 compatibility + + @Method(modid = CompatibilityManager.modidIC2) + public IElectricItemManager getManager(ItemStack itemstack) + { + return (IElectricItemManager) ItemElectricBase.itemManagerIC2; + } + + @Method(modid = CompatibilityManager.modidIC2) + public boolean canProvideEnergy(ItemStack itemStack) + { + return true; + } + + @Method(modid = CompatibilityManager.modidIC2) + public int getTier(ItemStack itemStack) + { + return 1; + } + + @Method(modid = CompatibilityManager.modidIC2) + public double getMaxCharge(ItemStack itemStack) + { + return this.getMaxElectricityStored(itemStack) / EnergyConfigHandler.IC2_RATIO; + } + + @Method(modid = CompatibilityManager.modidIC2) + public double getTransferLimit(ItemStack itemStack) + { + return this.transferMax * EnergyConfigHandler.TO_IC2_RATIO; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorage.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorage.java new file mode 100644 index 00000000..1b40750e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorage.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import micdoodle8.mods.galacticraft.api.power.IEnergyStorageGC; +import net.minecraft.nbt.NBTTagCompound; + +public class EnergyStorage implements IEnergyStorageGC +{ + + protected float energy; + protected float capacity; + protected float maxReceive; + protected float maxExtract; + protected float maxExtractRemaining; + + public EnergyStorage(float capacity) + { + this(capacity, 60, 30); + } + + public EnergyStorage(float capacity, float maxTransfer) + { + this(capacity, 2.5F * maxTransfer, maxTransfer); + } + + public EnergyStorage(float capacity, float maxReceive, float maxExtract) + { + this.capacity = capacity; + this.maxReceive = maxReceive; + this.maxExtract = maxExtract; + this.maxExtractRemaining = maxExtract; + } + + public EnergyStorage readFromNBT(NBTTagCompound nbt) + { + this.energy = nbt.getFloat("EnergyF"); + return this; + } + + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + if (this.energy < 0) + { + this.energy = 0; + } + + nbt.setFloat("EnergyF", Math.min(this.energy, this.capacity)); + return nbt; + } + + public void setCapacity(float capacity) + { + this.capacity = capacity; + + if (this.energy > capacity) + { + this.energy = capacity; + } + } + + /* + * Sets the maximum energy transfer rate on input Call this AFTER + * setMaxExtract(). + */ + public void setMaxReceive(float maxReceive) + { + this.maxReceive = maxReceive; + } + + /* + * Sets the energy consumption rate in gJ/t (For machines, this is the + * energy used per tick.) (For energy sources, this is the maximum output.) + * Also sets the receive rate at a default value of 2 * the energy + * consumption rate - so the machine's energy store can charge up even while + * it is working. If that is not required, call setMaxReceive() AFTER + * calling setMaxExtract(). + */ + public void setMaxExtract(float maxExtract) + { + this.maxExtract = maxExtract; + this.maxExtractRemaining = maxExtract; + this.maxReceive = 2.5F * maxExtract; + } + + public void setEnergyStored(float energy) + { + this.energy = Math.max(0, Math.min(energy, this.capacity)); + } + + public float getMaxReceive() + { + return this.maxReceive; + } + + public float getMaxExtract() + { + return this.maxExtract; + } + + @Override + public float receiveEnergyGC(float maxReceive, boolean simulate) + { + float energyReceived = Math.min(this.capacity - this.energy, Math.min(this.maxReceive, maxReceive)); + + if (!simulate) + { + this.energy += energyReceived; + } + + return energyReceived; + } + + public float receiveEnergyGC(float amount) + { + float energyReceived = Math.min(this.capacity - this.energy, Math.min(this.maxReceive, amount)); + this.energy += energyReceived; + return energyReceived; + } + + @Override + public float extractEnergyGC(float amount, boolean simulate) + { + float energyExtracted = Math.min(this.energy, Math.min(this.maxExtractRemaining, amount)); + + if (!simulate) + { + this.energy -= energyExtracted; + } + + return energyExtracted; + } + + public float extractEnergyGCnoMax(float amount, boolean simulate) + { + float energyExtracted = Math.min(this.energy, amount); + + if (!simulate) + { + this.energy -= energyExtracted; + } + + return energyExtracted; + } + + @Override + public float getEnergyStoredGC() + { + return this.energy; + } + + @Override + public float getCapacityGC() + { + return this.capacity; + } + + @Override + public boolean equals(Object obj) + { + if (obj == null) + { + return false; + } + if (obj instanceof EnergyStorage) + { + EnergyStorage storage = (EnergyStorage) obj; + return (storage.getEnergyStoredGC() == energy && storage.getCapacityGC() == capacity && storage.getMaxReceive() == maxReceive && storage.getMaxExtract() == maxExtract); + } + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorageTile.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorageTile.java new file mode 100644 index 00000000..6123e505 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/EnergyStorageTile.java @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import micdoodle8.mods.galacticraft.api.power.EnergySource; +import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceAdjacent; +import micdoodle8.mods.galacticraft.api.power.IEnergyHandlerGC; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.core.tile.ReceiverMode; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; + +public abstract class EnergyStorageTile extends TileEntityAdvanced implements IEnergyHandlerGC, IElectrical +{ + + public static final float STANDARD_CAPACITY = 16000F; + + @NetworkedField(targetSide = Side.CLIENT) + public EnergyStorage storage = new EnergyStorage(STANDARD_CAPACITY, 10); + public int tierGC = 1; + @NetworkedField(targetSide = Side.CLIENT) + public int poweredByTierGC = 1; + + public EnergyStorageTile(String tileName) + { + super(tileName); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + + super.readFromNBT(nbt); + this.storage.readFromNBT(nbt); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + this.storage.writeToNBT(nbt); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public abstract ReceiverMode getModeFromDirection(EnumFacing direction); + + @Override + public float receiveEnergyGC(EnergySource from, float amount, boolean simulate) + { + return this.storage.receiveEnergyGC(amount, simulate); + } + + @Override + public float extractEnergyGC(EnergySource from, float amount, boolean simulate) + { + return this.storage.extractEnergyGC(amount, simulate); + } + + @Override + public boolean nodeAvailable(EnergySource from) + { + if (!(from instanceof EnergySourceAdjacent)) + { + return false; + } + + return this.getModeFromDirection(((EnergySourceAdjacent) from).direction) != ReceiverMode.UNDEFINED; + } + + @Override + public float getEnergyStoredGC(EnergySource from) + { + return this.storage.getEnergyStoredGC(); + } + + public float getEnergyStoredGC() + { + return this.storage.getEnergyStoredGC(); + } + + @Override + public float getMaxEnergyStoredGC(EnergySource from) + { + return this.storage.getCapacityGC(); + } + + public float getMaxEnergyStoredGC() + { + return this.storage.getCapacityGC(); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return false; + } + + // Five methods for compatibility with basic electricity + @Override + public float receiveElectricity(EnumFacing from, float receive, int tier, boolean doReceive) + { + this.poweredByTierGC = (tier < 6) ? tier : 6; + return this.storage.receiveEnergyGC(receive, !doReceive); + } + + @Override + public float provideElectricity(EnumFacing from, float request, boolean doProvide) + { + return this.storage.extractEnergyGC(request, !doProvide); + } + + @Override + public float getRequest(EnumFacing direction) + { + return Math.min(this.storage.getCapacityGC() - this.storage.getEnergyStoredGC(), this.storage.getMaxReceive()); + } + + @Override + public float getProvide(EnumFacing direction) + { + return 0; + } + + @Override + public int getTierGC() + { + return this.tierGC; + } + + public void setTierGC(int newTier) + { + this.tierGC = newTier; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseConductor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseConductor.java new file mode 100644 index 00000000..3f89ede5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseConductor.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.energy.grid.EnergyNetwork; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/** + * This tile entity pre-fabricated for all conductors. + * + * @author Calclavia + */ +@SuppressWarnings( +{"rawtypes"}) +public abstract class TileBaseConductor extends TileEntity implements IConductor +{ + + protected IGridNetwork network; + + public TileEntity[] adjacentConnections = null; + + @Override + public void validate() + { + super.validate(); + if (!this.world.isRemote) + { + TickHandlerServer.energyTransmitterUpdates.add(this); + } + } + + @Override + public void invalidate() + { + if (!this.world.isRemote) + { + this.getNetwork().split(this); + } + + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + super.invalidate(); + super.onChunkUnload(); + } + + @Override + public IElectricityNetwork getNetwork() + { + if (this.network == null) + { + EnergyNetwork network = new EnergyNetwork(); + network.getTransmitters().add(this); + this.setNetwork(network); + } + + return (IElectricityNetwork) this.network; + } + + @Override + public void setNetwork(IGridNetwork network) + { + this.network = network; + } + + @Override + public void refresh() + { + if (!this.world.isRemote) + { + this.adjacentConnections = null; + + this.getNetwork().refresh(); + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity instanceof TileBaseConductor && ((TileBaseConductor) tileEntity).canConnect(side.getOpposite(), NetworkType.POWER)) + { + IGridNetwork otherNet = ((INetworkProvider) tileEntity).getNetwork(); + if (!this.getNetwork().equals(otherNet)) + { + if (!otherNet.getTransmitters().isEmpty()) + { + otherNet.merge(this.getNetwork()); + } + } + } + } + } + } + + @Override + public TileEntity[] getAdjacentConnections() + { + /** + * Cache the adjacentConnections. + */ + if (this.adjacentConnections == null) + { + this.adjacentConnections = new TileEntity[6]; + + BlockVec3 thisVec = new BlockVec3(this); + for (int i = 0; i < 6; i++) + { + EnumFacing side = EnumFacing.byIndex(i); + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(side.getOpposite(), NetworkType.POWER)) + { + this.adjacentConnections[i] = tileEntity; + } + } + } + } + + return this.adjacentConnections; + } + + @Override + public boolean hasNetwork() + { + return this.network != null; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.POWER; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getPos().getX() + 1, this.getPos().getY() + 1, this.getPos().getZ() + 1); + } + + @Override + public NetworkType getNetworkType() + { + return NetworkType.POWER; + } + + @Override + public boolean canTransmit() + { + return true; + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlock.java new file mode 100644 index 00000000..1f437be6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlock.java @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import com.google.common.collect.Lists; +import ic2.api.tile.IWrenchable; +import java.util.EnumSet; +import java.util.List; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; + +@Interface(iface = "ic2.api.tile.IWrenchable", modid = CompatibilityManager.modidIC2, striprefs = true) +public abstract class TileBaseElectricBlock extends TileBaseUniversalElectrical implements IDisableableMachine, IConnector, IWrenchable +{ + + @NetworkedField(targetSide = Side.CLIENT) + public boolean disabled = false; + @NetworkedField(targetSide = Side.CLIENT) + public int disableCooldown = 0; + @NetworkedField(targetSide = Side.CLIENT) + public boolean hasEnoughEnergyToRun = false; + public boolean noRedstoneControl = false; + + public TileBaseElectricBlock(String tileName) + { + super(tileName); + } + + public boolean shouldPullEnergy() + { + return this.shouldUseEnergy() || this.getEnergyStoredGC(null) < this.getMaxEnergyStoredGC(); + } + + public abstract boolean shouldUseEnergy(); + + public abstract EnumFacing getElectricInputDirection(); + + public abstract ItemStack getBatteryInSlot(); + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC(null) * i / this.getMaxEnergyStoredGC(null)); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + if (this.shouldPullEnergy() && this.getEnergyStoredGC(null) < this.getMaxEnergyStoredGC(null) && this.getBatteryInSlot() != null && this.getElectricInputDirection() != null) + { + this.discharge(this.getBatteryInSlot()); + } + + if (this.getEnergyStoredGC(null) > this.storage.getMaxExtract() && (this.noRedstoneControl || !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos()))) + { + this.hasEnoughEnergyToRun = true; + if (this.shouldUseEnergy()) + { + this.storage.extractEnergyGC(this.storage.getMaxExtract(), false); + } else + { + this.slowDischarge(); + } + } else + { + this.hasEnoughEnergyToRun = false; + this.slowDischarge(); + } + } + + super.update(); + + if (!this.world.isRemote) + { + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + } + } + + public void slowDischarge() + { + if (this.ticks % 10 == 0) + { + this.storage.extractEnergyGC(5F, false); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setBoolean("isDisabled", this.getDisabled(0)); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.setDisabled(0, nbt.getBoolean("isDisabled")); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + this.disabled = disabled; + this.disableCooldown = 10; + } + } + + public abstract EnumFacing getFront(); + + public EnumFacing byIndex() { + return getFront(); + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public EnumFacing getFacing(World world, BlockPos pos) + { + return this.getFront(); + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean setFacing(World world, BlockPos pos, EnumFacing newDirection, EntityPlayer player) + { + return false; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean wrenchCanRemove(World world, BlockPos pos, EntityPlayer player) + { + return false; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public List getWrenchDrops(World world, BlockPos pos, IBlockState state, TileEntity te, EntityPlayer player, int fortune) + { + List drops = Lists.newArrayList(); + drops.add(this.getBlockType().getPickBlock(state, null, this.world, this.getPos(), player)); + return drops; + } + + @Override + public EnumSet getElectricalInputDirections() + { + if (this.getElectricInputDirection() == null) + { + return EnumSet.noneOf(EnumFacing.class); + } + + return EnumSet.of(this.getElectricInputDirection()); + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return this.getWorld().getTileEntity(this.getPos()) == this && entityplayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + + return direction == this.getElectricInputDirection(); + } + + public String getGUIstatus() + { + if (!this.noRedstoneControl && RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.off.name"); + } + + if (this.getEnergyStoredGC() == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + if (this.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } + + if (this.getEnergyStoredGC() < this.storage.getMaxExtract()) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.active.name"); + } + + /** + * @param missingInput = dynamically: null if all inputs are present, or a + * string if an input (e.g. oxygen, fuel) is missing + * @param activeString = the specific 'Running' / 'Processing' etc string + * for this machine + * @return + */ + public String getGUIstatus(String missingInput, String activeString, boolean shorten) + { + if (!this.noRedstoneControl && RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.off.name"); + } + + if (this.getEnergyStoredGC() == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate(shorten ? "gui.status.missingpower.short.name" : "gui.status.missingpower.name"); + } + + if (missingInput != null) + { + return missingInput; + } + + if (this.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } + + if (this.getEnergyStoredGC() < this.storage.getMaxExtract()) + { + return EnumColor.ORANGE + GCCoreUtil.translate(shorten ? "gui.status.missingpower.short.name" : "gui.status.missingpower.name"); + } + + if (activeString != null) + { + return activeString; + } + + return EnumColor.RED + GCCoreUtil.translate("gui.status.unknown.name"); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlockWithInventory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlockWithInventory.java new file mode 100644 index 00000000..1af8b6af --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseElectricBlockWithInventory.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +public abstract class TileBaseElectricBlockWithInventory extends TileBaseElectricBlock implements ISidedInventory, IInventoryDefaults +{ + + public TileBaseElectricBlockWithInventory(String tileName) + { + super(tileName); + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.byHorizontalIndex(((this.getBlockMetadata() & 3) + 1) % 4); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalConductor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalConductor.java new file mode 100644 index 00000000..5d2aaecd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalConductor.java @@ -0,0 +1,494 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import buildcraft.api.mj.IMjConnector; +import buildcraft.api.mj.IMjReceiver; +import buildcraft.api.mj.MjAPI; +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyEmitter; +import ic2.api.energy.tile.IEnergySink; +import ic2.api.energy.tile.IEnergySource; +import ic2.api.energy.tile.IEnergyTile; +import javax.annotation.Nonnull; +import mekanism.api.energy.IStrictEnergyAcceptor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.common.eventhandler.Event; + +@InterfaceList(value = { + @Interface(iface = "net.minecraft.util.ITickable", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergyAcceptor", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergyEmitter", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = CompatibilityManager.modidIC2), + @Interface(iface = "mekanism.api.energy.IStrictEnergyAcceptor", modid = CompatibilityManager.modidMekanism), + @Interface(iface = "buildcraft.api.mj.IMjReceiver", modid = CompatibilityManager.modBCraftEnergy) +}) +public abstract class TileBaseUniversalConductor extends TileBaseConductor implements IEnergyStorage, ITickable, IMjReceiver, IEnergyAcceptor, IEnergyEmitter, IEnergySink, IStrictEnergyAcceptor +{ + + protected boolean isAddedToEnergyNet; + private float IC2surplusJoules = 0F; + + @Override + public void onNetworkChanged() + { + } + + @Override + public TileEntity[] getAdjacentConnections() + { + return EnergyUtil.getAdjacentPowerConnections(this); + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public void update() + { + if (!this.isAddedToEnergyNet) + { + if (!this.world.isRemote) + { + this.initIC(); + } + + this.isAddedToEnergyNet = true; + } + } + + @Override + public void invalidate() + { + this.IC2surplusJoules = 0F; + this.unloadTileIC2(); + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + this.unloadTileIC2(); + super.onChunkUnload(); + } + + protected void initIC() + { + if (EnergyConfigHandler.isIndustrialCraft2Loaded() && !this.world.isRemote) + { + try + { + Object o = CompatibilityManager.classIC2tileEventLoad.getConstructor(IEnergyTile.class).newInstance(this); + + if (o != null && o instanceof Event) + { + MinecraftForge.EVENT_BUS.post((Event) o); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + private void unloadTileIC2() + { + if (this.isAddedToEnergyNet && this.world != null) + { + if (!this.world.isRemote && EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + try + { + Object o = CompatibilityManager.classIC2tileEventUnload.getConstructor(IEnergyTile.class).newInstance(this); + + if (o != null && o instanceof Event) + { + MinecraftForge.EVENT_BUS.post((Event) o); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.isAddedToEnergyNet = false; + } + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double getDemandedEnergy() + { + if (this.getNetwork() == null) + { + return 0.0; + } + + if (this.IC2surplusJoules < 0.001F) + { + this.IC2surplusJoules = 0F; + return this.getNetwork().getRequest(this) / EnergyConfigHandler.IC2_RATIO; + } + + this.IC2surplusJoules = this.getNetwork().produce(this.IC2surplusJoules, true, 1, this); + if (this.IC2surplusJoules < 0.001F) + { + this.IC2surplusJoules = 0F; + return this.getNetwork().getRequest(this) / EnergyConfigHandler.IC2_RATIO; + } + return 0D; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double injectEnergy(EnumFacing directionFrom, double amount, double voltage) + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, directionFrom); + int tier = ((int) voltage > 120) ? 2 : 1; + if (tile instanceof IEnergySource && ((IEnergySource) tile).getOfferedEnergy() >= 128) + { + tier = 2; + } + float convertedEnergy = (float) amount * EnergyConfigHandler.IC2_RATIO; + float surplus = this.getNetwork().produce(convertedEnergy, true, tier, this, tile); + + if (surplus >= 0.001F) + { + this.IC2surplusJoules = surplus; + } + else + { + this.IC2surplusJoules = 0F; + } + + return 0D; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public int getSinkTier() + { + return 3; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean acceptsEnergyFrom(IEnergyEmitter emitter, EnumFacing side) + { + //Don't add connection to IC2 grid if it's a Galacticraft tile + if (emitter instanceof IElectrical || emitter instanceof IConductor) + { + return false; + } + + //Don't make connection with IC2 wires [don't want risk of multiple connections + there is a graphical glitch in IC2] + try + { + if (EnergyUtil.clazzIC2Cable != null && EnergyUtil.clazzIC2Cable.isInstance(emitter)) + { + return false; + } + } + catch (Exception e) + { + e.printStackTrace(); + } + + return true; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean emitsEnergyTo(IEnergyAcceptor receiver, EnumFacing side) + { + //Don't add connection to IC2 grid if it's a Galacticraft tile + if (receiver instanceof IElectrical || receiver instanceof IConductor) + { + return false; + } + + //Don't make connection with IC2 wires [don't want risk of multiple connections + there is a graphical glitch in IC2] + try + { + if (EnergyUtil.clazzIC2Cable != null && EnergyUtil.clazzIC2Cable.isInstance(receiver)) + { + return false; + } + } + catch (Exception e) + { + e.printStackTrace(); + } + + return true; + } + + // ForgeEnergy + @Override + public int receiveEnergy(int maxReceive, boolean simulate) + { + if (this.getNetwork() == null || EnergyConfigHandler.disableFEInput) + { + return 0; + } + + float receiveGC = maxReceive * EnergyConfigHandler.RF_RATIO; + float sentGC = receiveGC - this.getNetwork().produce(receiveGC, !simulate, 1); + return MathHelper.floor(sentGC / EnergyConfigHandler.RF_RATIO); + } + + // ForgeEnergy OR BuildCraft (method name clash!) + @Override + public boolean canReceive() + { + return !EnergyConfigHandler.disableBuildCraftInput || !EnergyConfigHandler.disableFEInput; + } + + // ForgeEnergy + @Override + public int getEnergyStored() + { + return 0; + } + + // ForgeEnergy + @Override + public int getMaxEnergyStored() + { + if (this.getNetwork() == null || EnergyConfigHandler.disableFEInput) + { + return 0; + } + + return MathHelper.floor(this.getNetwork().getRequest(this) / EnergyConfigHandler.RF_RATIO); + } + + // ForgeEnergy + @Override + public int extractEnergy(int maxExtract, boolean simulate) + { + return 0; + } + + // ForgeEnergy + @Override + public boolean canExtract() + { + return false; + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long getPowerRequested() + { + if (this.getNetwork() == null || EnergyConfigHandler.disableBuildCraftInput) + { + return 0L; + } + + return (long) (this.getNetwork().getRequest(this) / EnergyConfigHandler.BC8_INTERNAL_RATIO); + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long receivePower(long microJoules, boolean simulate) + { + if (this.getNetwork() == null || EnergyConfigHandler.disableBuildCraftInput) + { + return microJoules; + } + float receiveGC = microJoules * EnergyConfigHandler.BC8_INTERNAL_RATIO; + float sentGC = receiveGC - this.getNetwork().produce(receiveGC, !simulate, 1); + return (long) (sentGC / EnergyConfigHandler.BC8_INTERNAL_RATIO); + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public boolean canConnect(@Nonnull IMjConnector other) + { + return true; + } + + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) + { + if (this.getNetwork() == null) + { + return 0; + } + float receiveGC = maxReceive * EnergyConfigHandler.RF_RATIO; + float sentGC = receiveGC - this.getNetwork().produce(receiveGC, !simulate, 1); + return MathHelper.floor(sentGC / EnergyConfigHandler.RF_RATIO); + } + + public int extractEnergy(EnumFacing from, int maxExtract, boolean simulate) + { + return 0; + } + + public boolean canConnectEnergy(EnumFacing from) + { + // Do not form wire-to-wire connections with EnderIO conduits + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, from); + try + { + if (EnergyUtil.clazzMekCable != null && EnergyUtil.clazzMekCable.isInstance(tile)) + { + return false; + } + } catch (Exception e) + { + } + return true; + } + + public int getEnergyStored(EnumFacing from) + { + return 0; + } + + public int getMaxEnergyStored(EnumFacing from) + { + if (this.getNetwork() == null) + { + return 0; + } + + return MathHelper.floor(this.getNetwork().getRequest(this) / EnergyConfigHandler.RF_RATIO); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double transferEnergyToAcceptor(EnumFacing side, double amount) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0.0; + } + + if (!this.canReceiveEnergy(side)) + { + return 0.0; + } + + return amount - this.getNetwork().produce((float) amount * EnergyConfigHandler.MEKANISM_RATIO, true, 1, this) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double acceptEnergy(EnumFacing side, double amount, boolean simulate) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0.0; + } + + if (!this.canReceiveEnergy(side)) + { + return 0.0; + } + + return amount - this.getNetwork().produce((float) amount * EnergyConfigHandler.MEKANISM_RATIO, !simulate, 1, this) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canReceiveEnergy(EnumFacing side) + { + if (this.getNetwork() == null) + { + return false; + } + + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, side); + try + { + if (EnergyUtil.clazzMekCable != null && EnergyUtil.clazzMekCable.isInstance(te)) + { + return true; + } + } catch (Exception e) + { + e.printStackTrace(); + } + + return true; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getEnergy() + { + return 0; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public void setEnergy(double energy) + { + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxEnergy() + { + if (this.getNetwork() == null) + { + return 0; + } + return this.getNetwork().getRequest(this) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityEnergy.ENERGY) + { + return true; + } + if (EnergyConfigHandler.isBuildcraftLoaded() && (capability == MjAPI.CAP_RECEIVER || capability == MjAPI.CAP_CONNECTOR)) + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, facing); + return !(CompatibilityManager.classBCTransportPipeTile.isInstance(tile)); + } + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityEnergy.ENERGY) + { + if (EnergyUtil.clazzEnderIOCable == null) + return (T) this; + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, facing); + return EnergyUtil.clazzEnderIOCable.isInstance(tile) ? null : (T) this; + } + if (EnergyConfigHandler.isBuildcraftLoaded() && (capability == MjAPI.CAP_RECEIVER || capability == MjAPI.CAP_CONNECTOR)) + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, facing); + if (!(CompatibilityManager.classBCTransportPipeTile.isInstance(tile))) + { + return (T) this; + } + } + return super.getCapability(capability, facing); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectrical.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectrical.java new file mode 100644 index 00000000..eae9a472 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectrical.java @@ -0,0 +1,621 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import buildcraft.api.mj.IMjConnector; +import buildcraft.api.mj.IMjReceiver; +import buildcraft.api.mj.MjAPI; +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyEmitter; +import ic2.api.energy.tile.IEnergySink; +import ic2.api.energy.tile.IEnergyTile; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; +import ic2.api.item.ISpecialElectricItem; +import java.util.EnumSet; +import javax.annotation.Nonnull; +import mekanism.api.energy.EnergizedItemManager; +import mekanism.api.energy.IEnergizedItem; +import mekanism.api.energy.IStrictEnergyAcceptor; +import mekanism.api.energy.IStrictEnergyOutputter; +import micdoodle8.mods.galacticraft.api.item.ElectricItemHelper; +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.tile.ReceiverMode; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.items.CapabilityItemHandler; + +@InterfaceList(value = { + @Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergyAcceptor", modid = CompatibilityManager.modidIC2), + @Interface(iface = "buildcraft.api.mj.IMjReceiver", modid = CompatibilityManager.modBCraftEnergy), + @Interface(iface = "mekanism.api.energy.IStrictEnergyOutputter", modid = CompatibilityManager.modidMekanism), + @Interface(iface = "mekanism.api.energy.IStrictEnergyAcceptor", modid = CompatibilityManager.modidMekanism) +}) +public abstract class TileBaseUniversalElectrical extends EnergyStorageTile implements IEnergySink, IEnergyAcceptor, IMjReceiver, IStrictEnergyOutputter, IStrictEnergyAcceptor +{ + + protected boolean isAddedToEnergyNet; + protected Object powerHandlerBC; + + private float IC2surplusInGJ = 0F; + + public TileBaseUniversalElectrical(String tileName) + { + super(tileName); + } + + @Override + public double getPacketRange() + { + return 12.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + public EnumSet getElectricalInputDirections() + { + return EnumSet.allOf(EnumFacing.class); + } + + public EnumSet getElectricalOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public float getRequest(EnumFacing direction) + { + if (this.getElectricalInputDirections().contains(direction) || direction == null) + { + return super.getRequest(direction); + } + + return 0F; + } + + @Override + public float receiveElectricity(EnumFacing from, float receive, int tier, boolean doReceive) + { + if (this.getElectricalInputDirections().contains(from) || from == null) + { + return super.receiveElectricity(from, receive, tier, doReceive); + } + + return 0F; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + return nbt; + } + + public void discharge(ItemStack itemStack) + { + if (itemStack != null) + { + Item item = itemStack.getItem(); + float energyToDischarge = this.getRequest(null); + + if (item instanceof IItemElectric) + { + this.storage.receiveEnergyGC(ElectricItemHelper.dischargeItem(itemStack, energyToDischarge)); + this.poweredByTierGC = ((IItemElectric) item).getTierGC(itemStack); + } + else if (EnergyConfigHandler.isMekanismLoaded() && item instanceof IEnergizedItem && ((IEnergizedItem) item).canSend(itemStack)) + { + this.storage.receiveEnergyGC((float) EnergizedItemManager.discharge(itemStack, energyToDischarge / EnergyConfigHandler.MEKANISM_RATIO) * EnergyConfigHandler.MEKANISM_RATIO); + } else if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ISpecialElectricItem && item instanceof IElectricItem) + { + IElectricItem electricItem = (IElectricItem) item; + ISpecialElectricItem specialElectricItem = (ISpecialElectricItem) item; + if (electricItem.canProvideEnergy(itemStack)) + { + double energyDischargeIC2 = energyToDischarge / EnergyConfigHandler.IC2_RATIO; + double result = specialElectricItem.getManager(itemStack).discharge(itemStack, energyDischargeIC2, 4, false, false, false); + float energyDischarged = (float) result * EnergyConfigHandler.IC2_RATIO; + this.storage.receiveEnergyGC(energyDischarged); + } + } else if (item instanceof IElectricItem) + { + IElectricItem electricItem = (IElectricItem) item; + if (electricItem.canProvideEnergy(itemStack)) + { + double energyDischargeIC2 = energyToDischarge / EnergyConfigHandler.IC2_RATIO; + double result = ElectricItem.manager.discharge(itemStack, energyDischargeIC2, 4, false, false, false); + float energyDischarged = (float) result * EnergyConfigHandler.IC2_RATIO; + this.storage.receiveEnergyGC(energyDischarged); + } + } + + } + } + } + + @Override + public void initiate() + { + super.initiate(); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + if (!this.isAddedToEnergyNet) + { + // Register to the IC2 Network + this.initIC(); + } + + if (EnergyConfigHandler.isIndustrialCraft2Loaded() && this.IC2surplusInGJ >= 0.001F) + { + this.IC2surplusInGJ -= this.storage.receiveEnergyGC(this.IC2surplusInGJ); + if (this.IC2surplusInGJ < 0.001F) + { + this.IC2surplusInGJ = 0; + } + } + } + } + + /** + * IC2 Methods + */ + @Override + public void invalidate() + { + super.invalidate(); + this.unloadTileIC2(); + } + + @Override + public void onChunkUnload() + { + super.onChunkUnload(); + this.unloadTileIC2(); + } + + protected void initIC() + { + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + try + { + Object o = CompatibilityManager.classIC2tileEventLoad.getConstructor(IEnergyTile.class).newInstance(this); + + if (o instanceof Event) + { + MinecraftForge.EVENT_BUS.post((Event) o); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.isAddedToEnergyNet = true; + } + + private void unloadTileIC2() + { + if (this.isAddedToEnergyNet && this.world != null) + { + if (EnergyConfigHandler.isIndustrialCraft2Loaded() && !this.world.isRemote) + { + try + { + Object o = CompatibilityManager.classIC2tileEventUnload.getConstructor(IEnergyTile.class).newInstance(this); + + if (o instanceof Event) + { + MinecraftForge.EVENT_BUS.post((Event) o); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.isAddedToEnergyNet = false; + } + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double getDemandedEnergy() + { + if (EnergyConfigHandler.disableIC2Input) + { + return 0.0; + } + + try + { + if (this.IC2surplusInGJ < 0.001F) + { + this.IC2surplusInGJ = 0F; + return Math.ceil((this.storage.receiveEnergyGC(Integer.MAX_VALUE, true)) / EnergyConfigHandler.IC2_RATIO); + } + + float received = this.storage.receiveEnergyGC(this.IC2surplusInGJ, true); + if (received == this.IC2surplusInGJ) + { + return Math.ceil((this.storage.receiveEnergyGC(Integer.MAX_VALUE, true) - this.IC2surplusInGJ) / EnergyConfigHandler.IC2_RATIO); + } + } catch (Exception e) + { + e.printStackTrace(); + } + return 0D; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double injectEnergy(EnumFacing direction, double amount, double voltage) + { + // IC2 in 1.8.9 seems to have reversed the sense of direction here, but + // not in acceptsEnergyFrom. (Seriously?!) + if (!EnergyConfigHandler.disableIC2Input && (direction == null || this.getElectricalInputDirections().contains(direction.getOpposite()))) + { + float convertedEnergy = (float) amount * EnergyConfigHandler.IC2_RATIO; + int tierFromIC2 = ((int) voltage > 120) ? (((int) voltage > 256) ? 4 : 2) : 1; + float receive = this.receiveElectricity(direction == null ? null : direction.getOpposite(), convertedEnergy, tierFromIC2, true); + + if (convertedEnergy > receive) + { + this.IC2surplusInGJ = convertedEnergy - receive; + } else + { + this.IC2surplusInGJ = 0F; + } + + // injectEnergy returns left over energy but all is used or goes + // into 'surplus' + return 0D; + } + + return amount; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public int getSinkTier() + { + return 3; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean acceptsEnergyFrom(IEnergyEmitter emitter, EnumFacing direction) + { + if (this.tileEntityInvalid) + return false; + //Don't add connection to IC2 grid if it's a Galacticraft tile + if (emitter instanceof IElectrical || emitter instanceof IConductor || !(emitter instanceof IEnergyTile)) + { + return false; + } + + return this.getElectricalInputDirections().contains(direction); + } + + // BuildCraft + @Override + public boolean canReceive() + { + return !EnergyConfigHandler.disableBuildCraftInput; + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long getPowerRequested() + { + if (EnergyConfigHandler.disableBuildCraftInput) + { + return 0L; + } + + // Boost stated demand by factor of 30, otherwise Buildcraft seems to + // send only a trickle of power + return (long) (this.storage.receiveEnergyGC(Integer.MAX_VALUE, true) / EnergyConfigHandler.BC8_INTERNAL_RATIO * 30F); + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long receivePower(long microJoules, boolean simulate) + { + if (EnergyConfigHandler.disableBuildCraftInput) + { + return microJoules; + } + float receiveGC = microJoules * EnergyConfigHandler.BC8_INTERNAL_RATIO; + float sentGC = receiveGC - super.receiveElectricity(null, receiveGC, 1, !simulate); + return (long) (sentGC / EnergyConfigHandler.BC8_INTERNAL_RATIO); + } + + // Buildcraft 7 + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public boolean canConnect(@Nonnull IMjConnector other) + { + return true; + } + + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) + { + if (EnergyConfigHandler.disableRFInput) + { + return 0; + } + + if (!this.getElectricalInputDirections().contains(from)) + { + return 0; + } + + return MathHelper.floor(super.receiveElectricity(from, maxReceive * EnergyConfigHandler.RF_RATIO, 1, !simulate) / EnergyConfigHandler.RF_RATIO); + } + + public boolean canConnectEnergy(EnumFacing from) + { + return this.getElectricalInputDirections().contains(from) || this.getElectricalOutputDirections().contains(from); + } + + public int getEnergyStored(EnumFacing from) + { + return MathHelper.floor(this.getEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + public int getMaxEnergyStored(EnumFacing from) + { + return MathHelper.floor(this.getMaxEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double transferEnergyToAcceptor(EnumFacing from, double amount) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0; + } + + if (!this.getElectricalInputDirections().contains(from)) + { + return 0; + } + + return this.receiveElectricity(from, (float) amount * EnergyConfigHandler.MEKANISM_RATIO, 1, true) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canReceiveEnergy(EnumFacing side) + { + return this.getElectricalInputDirections().contains(side); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double acceptEnergy(EnumFacing side, double amount, boolean simulate) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0.0; + } + + if (!this.getElectricalInputDirections().contains(side)) + { + return 0; + } + + return this.receiveElectricity(side, (float) amount * EnergyConfigHandler.MEKANISM_RATIO, 1, simulate) / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Method(modid = CompatibilityManager.modidMekanism) + public void setEnergy(double energy) + { + if (EnergyConfigHandler.disableMekanismInput) + { + return; + } + + this.storage.setEnergyStored((float) energy * EnergyConfigHandler.MEKANISM_RATIO); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxEnergy() + { + if (EnergyConfigHandler.disableMekanismInput) + { + return 0.0; + } + + return this.getMaxEnergyStoredGC() / EnergyConfigHandler.MEKANISM_RATIO; + } + + @Override + public boolean canOutputEnergy(EnumFacing side) + { + return this.getElectricalOutputDirections().contains(side); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double pullEnergy(EnumFacing side, double amount, boolean simulate) + { + return 0D; + } + + @Override + public ReceiverMode getModeFromDirection(EnumFacing direction) + { + if (this.getElectricalInputDirections().contains(direction)) + { + return ReceiverMode.RECEIVE; + } else if (this.getElectricalOutputDirections().contains(direction)) + { + return ReceiverMode.EXTRACT; + } + + return null; + } + + /* + * Compatibility: call this if the facing metadata is updated + */ + public void updateFacing() + { + if (EnergyConfigHandler.isIndustrialCraft2Loaded() && !this.world.isRemote) + { + // This seems the only method to tell IC2 the connection sides have + // changed + // (Maybe there is an internal refresh() method but it's not in the + // API) + this.unloadTileIC2(); + // This will do an initIC2 on next tick update. + } + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityEnergy.ENERGY || (EnergyConfigHandler.isBuildcraftLoaded() && (capability == MjAPI.CAP_RECEIVER || capability == MjAPI.CAP_CONNECTOR))) + { + return this.getElectricalInputDirections().contains(facing); + } + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityEnergy.ENERGY || (EnergyConfigHandler.isBuildcraftLoaded() && (capability == MjAPI.CAP_RECEIVER || capability == MjAPI.CAP_CONNECTOR))) + { + return this.getElectricalInputDirections().contains(facing) ? (T) new ForgeReceiver(this) : null; + } + return super.getCapability(capability, facing); + } + + @Interface(modid = CompatibilityManager.modBCraftEnergy, iface = "buildcraft.api.mj.IMjReceiver") + private static class ForgeReceiver implements net.minecraftforge.energy.IEnergyStorage, IMjReceiver + { + + private TileBaseUniversalElectrical tile; + + public ForgeReceiver(TileBaseUniversalElectrical tileElectrical) + { + this.tile = tileElectrical; + } + + @Override + public int receiveEnergy(int maxReceive, boolean simulate) + { + if (EnergyConfigHandler.disableFEInput) + return 0; + + return MathHelper.floor(tile.receiveElectricity(null, maxReceive * EnergyConfigHandler.RF_RATIO, 1, !simulate) / EnergyConfigHandler.RF_RATIO); + } + + @Override + public boolean canReceive() + { + return !EnergyConfigHandler.disableFEInput; + } + + @Override + public int getEnergyStored() + { + if (EnergyConfigHandler.disableFEInput) + return 0; + + return MathHelper.floor(tile.getEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Override + public int getMaxEnergyStored() + { + if (EnergyConfigHandler.disableFEInput) + return 0; + + return MathHelper.floor(tile.getMaxEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate) + { + return 0; + } + + @Override + public boolean canExtract() + { + return false; + } + + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public boolean canConnect(@Nonnull IMjConnector other) + { + return true; + } + + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long getPowerRequested() + { + return tile.getPowerRequested(); + } + + @Override + @Method(modid = CompatibilityManager.modBCraftEnergy) + public long receivePower(long microJoules, boolean simulate) + { + return tile.receivePower(microJoules, simulate); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectricalSource.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectricalSource.java new file mode 100644 index 00000000..d0ccb330 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileBaseUniversalElectricalSource.java @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import buildcraft.api.mj.MjAPI; +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyEmitter; +import ic2.api.energy.tile.IEnergySource; +import ic2.api.energy.tile.IEnergyTile; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; +import ic2.api.item.IElectricItemManager; +import ic2.api.item.ISpecialElectricItem; +import java.util.EnumSet; +import mekanism.api.energy.EnergizedItemManager; +import mekanism.api.energy.IEnergizedItem; +import mekanism.api.energy.IStrictEnergyStorage; +import micdoodle8.mods.galacticraft.api.item.ElectricItemHelper; +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.transmission.tile.IElectrical; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; + +@InterfaceList(value = { + @Interface(iface = "ic2.api.energy.tile.IEnergyEmitter", modid = CompatibilityManager.modidIC2), + @Interface(iface = "ic2.api.energy.tile.IEnergySource", modid = CompatibilityManager.modidIC2), + @Interface(iface = "mekanism.api.energy.IStrictEnergyStorage", modid = CompatibilityManager.modidMekanism) +}) +public abstract class TileBaseUniversalElectricalSource extends TileBaseUniversalElectrical implements IEnergyEmitter, IEnergySource, IStrictEnergyStorage +{ + + public TileBaseUniversalElectricalSource(String tileName) + { + super(tileName); + } + + /* + * The main function to output energy each tick from a source. The source + * will attempt to produce into its outputDirections whatever energy it has + * available, and will reduce its stored energy by the amount which is in + * fact used. Max output = this.storage.maxExtract. + * @return The amount of energy that was used. + */ + public float produce() + { + this.storage.maxExtractRemaining = this.storage.maxExtract; + float produced = this.extractEnergyGC(null, this.produce(false), false); + this.storage.maxExtractRemaining -= produced; + if (this.storage.maxExtractRemaining < 0) + { + this.storage.maxExtractRemaining = 0; + } + return produced; + } + + /* + * Function to produce energy each tick into the outputs of a source. If + * simulate is true, no energy is in fact transferred. Note: even if + * simulate is false this does NOT reduce the source's own energy storage by + * the amount produced, that needs to be done elsewhere See this.produce() + * for an example. + */ + public float produce(boolean simulate) + { + float amountProduced = 0; + + if (!this.world.isRemote) + { + EnumSet outputDirections = this.getElectricalOutputDirections(); + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing direction : outputDirections) + { + TileEntity tileAdj = thisVec.getTileEntityOnSide(this.world, direction); + + if (tileAdj != null) + { + float toSend = this.extractEnergyGC(null, Math.min(this.getEnergyStoredGC() - amountProduced, this.getEnergyStoredGC() / outputDirections.size()), true); + if (toSend <= 0) + { + continue; + } + + if (tileAdj instanceof TileBaseConductor && ((TileBaseConductor) tileAdj).canConnect(direction.getOpposite(), NetworkType.POWER)) + { + IElectricityNetwork network = ((IConductor) tileAdj).getNetwork(); + if (network != null) + { + amountProduced += (toSend - network.produce(toSend, !simulate, this.tierGC, this)); + } + } else if (tileAdj instanceof TileBaseUniversalElectrical) + { + amountProduced += ((TileBaseUniversalElectrical) tileAdj).receiveElectricity(direction.getOpposite(), toSend, this.tierGC, !simulate); + } else + { + amountProduced += EnergyUtil.otherModsEnergyTransfer(tileAdj, direction.getOpposite(), toSend, simulate); + } + } + } + } + + return amountProduced; + } + + /** + * Recharges electric item. + */ + public void recharge(ItemStack itemStack) + { + if (itemStack != null && itemStack.getCount() == 1) + { + Item item = itemStack.getItem(); + float maxExtractSave = this.storage.getMaxExtract(); + if (this.tierGC > 1) + { + this.storage.setMaxExtract(maxExtractSave * 2.5F); + } + float energyToCharge = this.storage.extractEnergyGC(this.storage.getMaxExtract(), true); + + if (item instanceof IItemElectric) + { + this.storage.extractEnergyGC(ElectricItemHelper.chargeItem(itemStack, energyToCharge), false); + } + else if (EnergyConfigHandler.isMekanismLoaded() && item instanceof IEnergizedItem && ((IEnergizedItem) item).canReceive(itemStack)) + { + this.storage.extractEnergyGC((float) EnergizedItemManager.charge(itemStack, energyToCharge * EnergyConfigHandler.TO_MEKANISM_RATIO) / EnergyConfigHandler.TO_MEKANISM_RATIO, false); + } else if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + if (item instanceof ISpecialElectricItem) + { + ISpecialElectricItem specialElectricItem = (ISpecialElectricItem) item; + IElectricItemManager manager = specialElectricItem.getManager(itemStack); + double result = manager.charge(itemStack, energyToCharge * EnergyConfigHandler.TO_IC2_RATIO, this.tierGC + 1, false, false); + float energy = (float) result / EnergyConfigHandler.TO_IC2_RATIO; + this.storage.extractEnergyGC(energy, false); + } else if (item instanceof IElectricItem) + { + double result = ElectricItem.manager.charge(itemStack, energyToCharge * EnergyConfigHandler.TO_IC2_RATIO, this.tierGC + 1, false, false); + float energy = (float) result / EnergyConfigHandler.TO_IC2_RATIO; + this.storage.extractEnergyGC(energy, false); + } + } + if (this.tierGC > 1) + { + this.storage.setMaxExtract(maxExtractSave); + } + } + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public boolean emitsEnergyTo(IEnergyAcceptor receiver, EnumFacing direction) + { + if (this.tileEntityInvalid) + return false; + + //Don't add connection to IC2 grid if it's a Galacticraft tile + if (receiver instanceof IElectrical || receiver instanceof IConductor || !(receiver instanceof IEnergyTile)) + { + return false; + } + + return this.getElectricalOutputDirections().contains(direction); + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public double getOfferedEnergy() + { + if (EnergyConfigHandler.disableIC2Output) + { + return 0.0; + } + + return this.getProvide(null) * EnergyConfigHandler.TO_IC2_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public void drawEnergy(double amount) + { + if (EnergyConfigHandler.disableIC2Output) + { + return; + } + + this.storage.extractEnergyGC((float) amount / EnergyConfigHandler.TO_IC2_RATIO, false); + } + + @Override + @Method(modid = CompatibilityManager.modidIC2) + public int getSourceTier() + { + return this.tierGC + 1; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double pullEnergy(EnumFacing side, double amount, boolean simulate) + { + if (this.canOutputEnergy(side)) + { + float amountGC = (float) amount / EnergyConfigHandler.TO_MEKANISM_RATIO; + return this.storage.extractEnergyGC(amountGC, simulate) * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + return 0D; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double getEnergy() + { + return this.storage.getEnergyStoredGC() * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public double getMaxEnergy() + { + return this.storage.getCapacityGC() * EnergyConfigHandler.TO_MEKANISM_RATIO; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public void setEnergy(double energy) + { + this.storage.setEnergyStored((float) energy / EnergyConfigHandler.TO_MEKANISM_RATIO); + } + + @Override + public boolean hasCapability(Capability cap, EnumFacing side) + { + if (cap == CapabilityEnergy.ENERGY && this.canOutputEnergy(side)) + return true; + if (cap == EnergyUtil.mekCableOutput || cap == EnergyUtil.mekEnergyStorage) + { + return this.canOutputEnergy(side); + } + if (EnergyConfigHandler.isBuildcraftLoaded() && cap == MjAPI.CAP_CONNECTOR && this.canOutputEnergy(side)) + { + return true; + } + return super.hasCapability(cap, side); + } + + @Override + public T getCapability(Capability cap, EnumFacing side) + { + if (cap == CapabilityEnergy.ENERGY && this.getElectricalOutputDirections().contains(side)) + return (T) new ForgeEmitter(this); + if (cap != null && (cap == EnergyUtil.mekCableOutput || cap == EnergyUtil.mekEnergyStorage)) + { + return (T) this; + } + if (EnergyConfigHandler.isBuildcraftLoaded() && cap == MjAPI.CAP_CONNECTOR && this.canOutputEnergy(side)) + { + return (T) this; + } + return super.getCapability(cap, side); + } + + @Override + public float getProvide(EnumFacing direction) + { + if (direction == null && EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, this.getElectricOutputDirection()); + if (tile instanceof IConductor) + { + // No power provide to IC2 mod if it's a Galacticraft wire on + // the output. Galacticraft network will provide the power. + return 0.0F; + } + return this.storage.extractEnergyGC(Float.MAX_VALUE, true); + } + + if (this.getElectricalOutputDirections().contains(direction)) + { + return this.storage.extractEnergyGC(Float.MAX_VALUE, true); + } + + return 0F; + } + + public EnumFacing getElectricOutputDirection() + { + return null; + } + + public int extractEnergy(EnumFacing from, int maxExtract, boolean simulate) + { + if (EnergyConfigHandler.disableRFOutput) + { + return 0; + } + + if (!this.getElectricalOutputDirections().contains(from)) + { + return 0; + } + + return MathHelper.floor(this.storage.extractEnergyGC(maxExtract / EnergyConfigHandler.TO_RF_RATIO, !simulate) * EnergyConfigHandler.TO_RF_RATIO); + } + + private static class ForgeEmitter implements net.minecraftforge.energy.IEnergyStorage + { + + private TileBaseUniversalElectrical tile; + + public ForgeEmitter(TileBaseUniversalElectrical tileElectrical) + { + this.tile = tileElectrical; + } + + @Override + public int receiveEnergy(int maxReceive, boolean simulate) + { + return 0; + } + + @Override + public boolean canReceive() + { + return false; + } + + @Override + public int getEnergyStored() + { + if (EnergyConfigHandler.disableFEOutput) + return 0; + + return MathHelper.floor(tile.getEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Override + public int getMaxEnergyStored() + { + if (EnergyConfigHandler.disableFEOutput) + return 0; + + return MathHelper.floor(tile.getMaxEnergyStoredGC() / EnergyConfigHandler.RF_RATIO); + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate) + { + if (!canExtract()) + return 0; + + return MathHelper.floor(tile.storage.extractEnergyGC(maxExtract / EnergyConfigHandler.TO_RF_RATIO, !simulate) * EnergyConfigHandler.TO_RF_RATIO); + } + + @Override + public boolean canExtract() + { + return !EnergyConfigHandler.disableFEOutput; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileCableIC2Sealed.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileCableIC2Sealed.java new file mode 100644 index 00000000..b1700447 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/energy/tile/TileCableIC2Sealed.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.energy.tile; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.miccore.Annotations.RuntimeInterface; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class TileCableIC2Sealed extends TileEntity +{ + + private static boolean onLoadedDone = false; + private static boolean loadStateDone = false; + private static boolean rSWTDone = false; + private static boolean cableFieldsDone = false; + private static Method onLoaded = null; + private static Field loadState = null; + private static Method requestSingleWorldTick = null; + private static Field fieldInsulation = null; + private static Field fieldCableType = null; + + @RuntimeInterface(clazz = "ic2.core.block.wiring.TileEntityCable", modID = CompatibilityManager.modidIC2, deobfName = "EXTENDS") + public TileCableIC2Sealed setupInsulation(Object cableType, int insulation) + { + if (!cableFieldsDone) + getCableFields(); + try + { + if (fieldInsulation != null) + fieldInsulation.set(this, insulation); + if (cableType != null) + { + if (fieldCableType != null) + fieldCableType.set(this, cableType); + } + } catch (Exception ignore) + { + } + + return this; + } + + @Override + public void validate() + { + this.tileEntityInvalid = false; + World world = this.getWorld(); + if (world != null && this.pos != null) + { + try + { + if (!loadStateDone) + getLoadState(); + if (loadState != null) + loadState.set(this, (byte) 1); + Object tickHandler = CompatibilityManager.fieldIC2tickhandler.get(null); + if (!rSWTDone) + getRSWT(tickHandler); + if (requestSingleWorldTick != null) + requestSingleWorldTick.invoke(tickHandler, world, this); + } catch (Exception ignore) + { + } + } + } + + @RuntimeInterface(clazz = "ic2.core.IWorldTickCallback", modID = CompatibilityManager.modidIC2) + public void onTick(World worldIn) + { + if (!this.isInvalid() && world.isBlockLoaded(this.pos) && (world.getBlockState(this.pos)).getBlock() == GCBlocks.sealableBlock && world.getTileEntity(this.pos) == this) + { + if (!onLoadedDone) + getOnLoaded(); + if (onLoaded != null) + { + try + { + onLoaded.invoke(this); + } catch (Exception ignore) + { + } + } + } + } + + private void getOnLoaded() + { + Class ic2Tile = this.getClass().getSuperclass().getSuperclass(); + try + { + onLoaded = ic2Tile.getDeclaredMethod("onLoaded"); + } catch (NoSuchMethodException e) + { + ic2Tile = this.getClass().getSuperclass(); + try + { + onLoaded = ic2Tile.getDeclaredMethod("onLoaded"); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } catch (SecurityException e) + { + e.printStackTrace(); + } + onLoadedDone = true; + } + + private void getLoadState() + { + Class tileIC2 = this.getClass().getSuperclass().getSuperclass(); + try + { + loadState = tileIC2.getDeclaredField("loadState"); + loadState.setAccessible(true); + } catch (NoSuchFieldException e) + { + tileIC2 = this.getClass().getSuperclass(); + try + { + loadState = tileIC2.getDeclaredField("loadState"); + loadState.setAccessible(true); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } catch (SecurityException e) + { + e.printStackTrace(); + } + loadStateDone = true; + } + + private void getRSWT(Object tickHandler) + { + for (Method m : tickHandler.getClass().getMethods()) + { + if (m.getName().equals("requestSingleWorldTick")) + { + requestSingleWorldTick = m; + break; + } + } + rSWTDone = true; + } + + private void getCableFields() + { + Class tileIC2 = this.getClass().getSuperclass(); + try + { + fieldInsulation = tileIC2.getDeclaredField("insulation"); + fieldInsulation.setAccessible(true); + } catch (NoSuchFieldException | SecurityException e) + { + e.printStackTrace(); + } + try + { + fieldCableType = tileIC2.getDeclaredField("cableType"); + fieldCableType.setAccessible(true); + } catch (NoSuchFieldException | SecurityException e) + { + e.printStackTrace(); + } + cableFieldsDone = true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIArrowAttack.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIArrowAttack.java new file mode 100644 index 00000000..6fcd56f5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIArrowAttack.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.util.math.MathHelper; + +public class EntityAIArrowAttack extends EntityAIBase +{ + + private final EntityLiving entityHost; + + private final IRangedAttackMob rangedAttackEntityHost; + private EntityLivingBase attackTarget; + + private int rangedAttackTime; + private double entityMoveSpeed; + private int field_96561_g; + + private int maxRangedAttackTime; + private float field_96562_i; + private float field_82642_h; + + public EntityAIArrowAttack(IRangedAttackMob par1IRangedAttackMob, double par2, int par4, float par5) + { + this(par1IRangedAttackMob, par2, par4, par4, par5); + } + + public EntityAIArrowAttack(IRangedAttackMob par1IRangedAttackMob, double par2, int par4, int par5, float par6) + { + this.rangedAttackTime = -1; + + if (!(par1IRangedAttackMob instanceof EntityLivingBase)) + { + throw new IllegalArgumentException("ArrowAttackGoal requires Mob implements RangedAttackMob"); + } else + { + this.rangedAttackEntityHost = par1IRangedAttackMob; + this.entityHost = (EntityLiving) par1IRangedAttackMob; + this.entityMoveSpeed = par2; + this.field_96561_g = par4; + this.maxRangedAttackTime = par5; + this.field_96562_i = par6; + this.field_82642_h = par6 * par6; + this.setMutexBits(3); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + @Override + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.entityHost.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } else + { + this.attackTarget = entitylivingbase; + return true; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + @Override + public boolean shouldContinueExecuting() + { + return this.shouldExecute() || !this.entityHost.getNavigator().noPath(); + } + + /** + * Resets the task + */ + @Override + public void resetTask() + { + this.attackTarget = null; + this.rangedAttackTime = -1; + } + + /** + * Updates the task + */ + @Override + public void updateTask() + { + double d0 = this.entityHost.getDistanceSq(this.attackTarget.posX, this.attackTarget.getEntityBoundingBox().minY, this.attackTarget.posZ); + boolean flag = this.entityHost.getEntitySenses().canSee(this.attackTarget); + + this.entityHost.getNavigator().tryMoveToEntityLiving(this.attackTarget, this.entityMoveSpeed); + + this.entityHost.getLookHelper().setLookPositionWithEntity(this.attackTarget, 30.0F, 30.0F); + float f; + + if (--this.rangedAttackTime == 0) + { + if (d0 > this.field_82642_h || !flag) + { + return; + } + + f = MathHelper.sqrt(d0) / this.field_96562_i; + float f1 = f; + + if (f < 0.1F) + { + f1 = 0.1F; + } + + if (f1 > 1.0F) + { + f1 = 1.0F; + } + + this.rangedAttackEntityHost.attackEntityWithRangedAttack(this.attackTarget, f1); + this.rangedAttackTime = MathHelper.floor(f * (this.maxRangedAttackTime - this.field_96561_g) + this.field_96561_g); + } else if (this.rangedAttackTime < 0) + { + f = MathHelper.sqrt(d0) / this.field_96562_i; + this.rangedAttackTime = MathHelper.floor(f * (this.maxRangedAttackTime - this.field_96561_g) + this.field_96561_g); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAILookAtTradePlayerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAILookAtTradePlayerGC.java new file mode 100644 index 00000000..da115cc0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAILookAtTradePlayerGC.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; + +public class EntityAILookAtTradePlayerGC extends EntityAIWatchClosest +{ + + private final EntityAlienVillager theMerchant; + + public EntityAILookAtTradePlayerGC(EntityAlienVillager theMerchantIn) + { + super(theMerchantIn, EntityPlayer.class, 8.0F); + this.theMerchant = theMerchantIn; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + @Override + public boolean shouldExecute() + { + if (this.theMerchant.isTrading()) + { + this.closestEntity = this.theMerchant.getCustomer(); + return true; + } else + { + return false; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIThrowPlayer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIThrowPlayer.java new file mode 100644 index 00000000..1736ffc9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAIThrowPlayer.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; + +import micdoodle8.mods.galacticraft.core.Constants; + +public class EntityAIThrowPlayer extends EntityAIBase +{ + + EntitySkeletonBoss skeletonBoss; + + EntityPlayer targetPlayer; + + public EntityAIThrowPlayer(EntitySkeletonBoss boss) + { + this.skeletonBoss = boss; + this.setMutexBits(1); + } + + @Override + public boolean shouldExecute() + { + final EntityPlayer player = this.skeletonBoss.world.getClosestPlayerToEntity(this.skeletonBoss, 5.0F); + + if (player == null) + { + return false; + } else + { + this.targetPlayer = player; + return true; + } + } + + @Override + public void startExecuting() + { + this.skeletonBoss.setAttackTarget(this.targetPlayer); + + // if (this.skeletonBoss.getDistanceToEntity(this.targetPlayer) <= 5.0F) + { + double d0 = this.skeletonBoss.posX - this.targetPlayer.posX; + double d1; + + for (d1 = this.skeletonBoss.posZ - this.targetPlayer.posZ; d0 * d0 + d1 * d1 < 1.0E-4D; d1 = (Math.random() - Math.random()) * 0.01D) + { + d0 = (Math.random() - Math.random()) * 0.01D; + } + + this.targetPlayer.attackedAtYaw = (float) Math.atan2(d1, d0) * Constants.RADIANS_TO_DEGREES - this.targetPlayer.rotationYaw; + + this.targetPlayer.knockBack(this.skeletonBoss, 20, d0, d1); + } + + super.startExecuting(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAITradePlayerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAITradePlayerGC.java new file mode 100644 index 00000000..3ebe59b2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAITradePlayerGC.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; + +public class EntityAITradePlayerGC extends EntityAIBase +{ + + private EntityAlienVillager villager; + + public EntityAITradePlayerGC(EntityAlienVillager villagerIn) + { + this.villager = villagerIn; + this.setMutexBits(5); + } + + @Override + public boolean shouldExecute() + { + if (!this.villager.isEntityAlive()) + { + return false; + } else if (this.villager.isInWater()) + { + return false; + } else if (!this.villager.onGround) + { + return false; + } else if (this.villager.velocityChanged) + { + return false; + } else + { + EntityPlayer entityplayer = this.villager.getCustomer(); + return entityplayer == null ? false : (this.villager.getDistanceSq(entityplayer) > 16.0D ? false : entityplayer.openContainer instanceof Container); + } + } + + @Override + public void startExecuting() + { + this.villager.getNavigator().clearPath(); + } + + @Override + public void resetTask() + { + this.villager.setCustomer((EntityPlayer) null); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvanced.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvanced.java new file mode 100644 index 00000000..b92a0645 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvanced.java @@ -0,0 +1,299 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public abstract class EntityAdvanced extends Entity implements IPacketReceiver +{ + + protected long ticks = 0; + private LinkedHashSet fieldCacheClient; + private LinkedHashSet fieldCacheServer; + private Map lastSentData = new HashMap(); + private boolean networkDataChanged = false; + + public EntityAdvanced(World world) + { + super(world); + + if (world != null && world.isRemote) + { + // Empty packet client->server just to kickstart the server into + // sending this client an initial packet + this.fieldCacheServer = new LinkedHashSet(); + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + /** + * Whether or not this entity should be sending packets to/from server + * + * @return If the entity needs network capabilities + */ + public abstract boolean isNetworkedEntity(); + + /** + * Get the amount of ticks between each packet send + * + * @param side The target side. + * @return The amount of ticks to wait before sending another packet to this + * target + */ + public abstract int getPacketCooldown(Side side); + + /** + * Add any additional data to the stream (only effective if there are both + * CLIENT and SERVER targeted regular networked fields ... currently nothing + * in GC uses this) + * + * @param networkedList List of additional data + */ +// public void addExtraNetworkedData(List networkedList) +// { +// +// } + + /** + * Read any additional data from the stream + * + * @param stream The ByteBuf stream to read data from + */ +// public void readExtraNetworkedData(ByteBuf stream) +// { +// +// } + + /** + * Called after a packet is read, only on client side. + * + * @param player The player associated with the received packet + */ + public abstract void onPacketClient(EntityPlayer player); + + /** + * Called after a packet is read, only on server side. + * + * @param player The player associated with the received packet + */ + public abstract void onPacketServer(EntityPlayer player); + + /** + * Packets will be sent to all (client-side) players within this range + * + * @return Maximum distance to send packets to client players + */ + public abstract double getPacketRange(); + + @Override + public void onUpdate() + { + super.onUpdate(); + + this.ticks++; + + if (this.isNetworkedEntity()) + { + if (!this.world.isRemote && this.ticks % this.getPacketCooldown(Side.CLIENT) == 0) + { + if (this.fieldCacheClient == null) + { + try + { + this.initFieldCache(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + PacketDynamic packet = new PacketDynamic(this); + if (networkDataChanged) + { + GalacticraftCore.packetPipeline.sendToAllAround(packet, new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, this.getPacketRange())); + } + } + + if (this.world.isRemote && this.ticks % this.getPacketCooldown(Side.SERVER) == 0) + { + if (this.fieldCacheClient == null) // The target server cache + // may have been initialised + // to an empty set + { + try + { + this.initFieldCache(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + PacketDynamic packet = new PacketDynamic(this); + if (networkDataChanged) + { + GalacticraftCore.packetPipeline.sendToServer(packet); + } + } + } + } + + private void initFieldCache() throws IllegalArgumentException, IllegalAccessException + { + this.fieldCacheClient = new LinkedHashSet(); + this.fieldCacheServer = new LinkedHashSet(); + + for (Field field : this.getClass().getFields()) + { + if (field.isAnnotationPresent(NetworkedField.class)) + { + NetworkedField f = field.getAnnotation(NetworkedField.class); + + if (f.targetSide() == Side.CLIENT) + { + this.fieldCacheClient.add(field); + } else + { + this.fieldCacheServer.add(field); + } + } + } + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + Set fieldList = null; + boolean changed = false; + + if (this.world.isRemote) + { + fieldList = this.fieldCacheServer; + } else + { + fieldList = this.fieldCacheClient; + } + + for (Field f : fieldList) + { + boolean fieldChanged = false; + try + { + Object data = f.get(this); + Object lastData = lastSentData.get(f); + + if (!NetworkUtil.fuzzyEquals(lastData, data)) + { + fieldChanged = true; + } + + sendData.add(data); + + if (fieldChanged) + { + lastSentData.put(f, NetworkUtil.cloneNetworkedObject(data)); + } + } catch (Exception e) + { + e.printStackTrace(); + } + + changed |= fieldChanged; + } + +//Currently unused as there is no entity in Galacticraft with extraNetworkedData + +// if (changed) +// { +// this.addExtraNetworkedData(sendData); +// } +// else +// { +// ArrayList prevSendData = new ArrayList(sendData); +// +// this.addExtraNetworkedData(sendData); +// +// if (!prevSendData.equals(sendData)) +// { +// changed = true; +// } +// } + + networkDataChanged = changed; + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.fieldCacheClient == null || this.fieldCacheServer == null) + { + try + { + this.initFieldCache(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + +// if (this.world.isRemote && this.fieldCacheClient.size() == 0) +// { +// return; +// } +// else if (!this.world.isRemote && this.fieldCacheServer.size() == 0) +// { +// return; +// } + + Set fieldSet = null; + + if (this.world.isRemote) + { + fieldSet = this.fieldCacheClient; + } else + { + fieldSet = this.fieldCacheServer; + } + + for (Field field : fieldSet) + { + try + { + Object obj = NetworkUtil.getFieldValueFromStream(field, buffer, this.world); + field.set(this, obj); + } catch (Exception e) + { + e.printStackTrace(); + } + } + +// this.readExtraNetworkedData(buffer); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvancedMotion.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvancedMotion.java new file mode 100644 index 00000000..82d4aa57 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAdvancedMotion.java @@ -0,0 +1,422 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketEntityUpdate; +import micdoodle8.mods.galacticraft.core.network.PacketEntityUpdate.IEntityFullSync; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public abstract class EntityAdvancedMotion extends InventoryEntity implements IControllableEntity, IEntityFullSync +{ + + protected long ticks = 0; + + public float currentDamage; + public int timeSinceHit; + public int rockDirection; + + public double advancedPositionX; + public double advancedPositionY; + public double advancedPositionZ; + public double advancedYaw; + public double advancedPitch; + public int posRotIncrements; + + protected boolean lastOnGround; + + public EntityAdvancedMotion(World world) + { + super(world); + this.preventEntitySpawning = true; + this.ignoreFrustumCheck = true; + this.isImmuneToFire = true; + } + + public EntityAdvancedMotion(World world, double var2, double var4, double var6) + { + this(world); + this.setPosition(var2, var4, var6); + } + + @Override + protected void entityInit() + { + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public double getMountedYOffset() + { + return this.height - 1.0D; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + final double offsetx = Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D + 114.8) * -0.5D; + final double offsetz = Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D + 114.8) * -0.5D; + passenger.setPosition(this.posX + offsetx, this.posY + this.getMountedYOffset() + passenger.getYOffset(), this.posZ + offsetz); + } + } + + @Override + public void setPositionRotationAndMotion(double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ, boolean onGround) + { + if (this.world.isRemote) + { + this.advancedPositionX = x; + this.advancedPositionY = y; + this.advancedPositionZ = z; + this.advancedYaw = yaw; + this.advancedPitch = pitch; + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + this.posRotIncrements = 5; + } else + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + if (onGround || this.forceGroundUpdate()) + { + this.onGround = onGround; + } + } + } + + protected boolean forceGroundUpdate() + { + return true; + } + + @Override + public void performHurtAnimation() + { + this.rockDirection = -this.rockDirection; + this.timeSinceHit = 10; + this.currentDamage *= 5; + } + + @Override + public boolean attackEntityFrom(DamageSource var1, float var2) + { + if (this.isDead || var1.equals(DamageSource.CACTUS) || !this.allowDamageSource(var1)) + { + return true; + } else + { + Entity e = var1.getTrueSource(); + if (this.isEntityInvulnerable(var1) || this.posY > 300 || (e instanceof EntityLivingBase && !(e instanceof EntityPlayer))) + { + return false; + } else + { + this.rockDirection = -this.rockDirection; + this.timeSinceHit = 10; + this.currentDamage = this.currentDamage + var2 * 10; + this.markVelocityChanged(); + + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + this.currentDamage = 100; + } + + if (this.currentDamage > 70) + { + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + + return false; + } + + if (!this.world.isRemote) + { + this.dropItems(); + + this.setDead(); + } + } + + return true; + } + } + } + + public abstract List getItemsDropped(); + + public abstract boolean shouldMove(); + + public abstract boolean shouldSpawnParticles(); + + /** + * @return map of the particle vectors. Map key is the position and map + * value is the motion of the particles. Each entry will be spawned + * as a separate particle + */ + public abstract Map getParticleMap(); + + @SideOnly(Side.CLIENT) + public abstract Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ); + + public abstract void tickInAir(); + + public abstract void tickOnGround(); + + public abstract void onGroundHit(); + + public abstract Vector3 getMotionVec(); + + /** + * Can be called in the superclass init method before the subclass fields + * have been initialised! Therefore include null checks!!! + */ + public abstract ArrayList getNetworkedData(); + + /** + * @return ticks between packets being sent to client + */ + public abstract int getPacketTickSpacing(); + + /** + * @return players within this distance will recieve packets from this + * entity + */ + public abstract double getPacketSendDistance(); + + public abstract void readNetworkedData(ByteBuf buffer); + + public abstract boolean allowDamageSource(DamageSource damageSource); + + public void dropItems() + { + if (this.getItemsDropped() == null) + { + return; + } + + for (final ItemStack item : this.getItemsDropped()) + { + if (item != null && !item.isEmpty()) + { + this.entityDropItem(item, 0); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + if (!this.getPassengers().isEmpty()) + { + if (this.getPassengers().contains(FMLClientHandler.instance().getClient().player)) + { + } else + { + this.posRotIncrements = posRotationIncrements + 5; + this.advancedPositionX = x; + this.advancedPositionY = y; + this.advancedPositionZ = z; + this.advancedYaw = yaw; + this.advancedPitch = pitch; + } + } + } + + @Override + public void move(MoverType type, double x, double y, double z) + { + if (this.shouldMove()) + { + super.move(type, x, y, z); + } + } + + public abstract boolean canSetPositionClient(); + + public abstract boolean shouldSendAdvancedMotionPacket(); + + @Override + public void onUpdate() + { + this.ticks++; + + super.onUpdate(); + + if (this.canSetPositionClient() && this.world.isRemote && (this.getPassengers().isEmpty() || !this.getPassengers().contains(FMLClientHandler.instance().getClient().player))) + { + double x; + double y; + double var12; + double z; + if (this.posRotIncrements > 0) + { + x = this.posX + (this.advancedPositionX - this.posX) / this.posRotIncrements; + y = this.posY + (this.advancedPositionY - this.posY) / this.posRotIncrements; + z = this.posZ + (this.advancedPositionZ - this.posZ) / this.posRotIncrements; + var12 = MathHelper.wrapDegrees(this.advancedYaw - this.rotationYaw); + this.rotationYaw = (float) (this.rotationYaw + var12 / this.posRotIncrements); + this.rotationPitch = (float) (this.rotationPitch + (this.advancedPitch - this.rotationPitch) / this.posRotIncrements); + --this.posRotIncrements; + this.setPosition(x, y, z); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else + { +// x = this.posX + this.motionX; +// y = this.posY + this.motionY; +// z = this.posZ + this.motionZ; +// this.setPosition(x, y, z); + } + } + + if (this.timeSinceHit > 0) + { + this.timeSinceHit--; + } + + if (this.currentDamage > 0) + { + this.currentDamage--; + } + + if (this.shouldSpawnParticles() && this.world.isRemote) + { + this.spawnParticles(this.getParticleMap()); + } + + if (this.onGround) + { + this.tickOnGround(); + } else + { + this.tickInAir(); + } + + if (this.world.isRemote) + { + Vector3 mot = this.getMotionVec(); + this.motionX = mot.x; + this.motionY = mot.y; + this.motionZ = mot.z; + } + // Necessary on both server and client to achieve a correct + // this.onGround setting + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + + if (this.onGround && !this.lastOnGround) + { + this.onGroundHit(); + } + + if (shouldSendAdvancedMotionPacket()) + { + if (this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketEntityUpdate(this)); + } + + if (!this.world.isRemote && this.ticks % 5 == 0) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketEntityUpdate(this), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 50.0D)); + } + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.lastOnGround = this.onGround; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + sendData.addAll(this.getNetworkedData()); + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.readNetworkedData(buffer); + } + + @SideOnly(Side.CLIENT) + public void spawnParticles(Map points) + { + for (final Entry vec : points.entrySet()) + { + final Vector3 posVec = vec.getKey(); + final Vector3 motionVec = vec.getValue(); + + this.spawnParticle(this.getParticle(this.rand, posVec.x, posVec.y, posVec.z, motionVec.x, motionVec.y, motionVec.z)); + } + } + + @SideOnly(Side.CLIENT) + public void spawnParticle(Particle fx) + { + final Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + if (fx != null) + { + mc.effectRenderer.addEffect(fx); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAlienVillager.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAlienVillager.java new file mode 100644 index 00000000..422f6163 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityAlienVillager.java @@ -0,0 +1,858 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.Random; +import java.util.UUID; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.INpc; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAIMoveIndoors; +import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; +import net.minecraft.entity.ai.EntityAIOpenDoor; +import net.minecraft.entity.ai.EntityAIRestrictOpenDoor; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityAIWatchClosest2; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.monster.IMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.potion.PotionEffect; +import net.minecraft.stats.StatList; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.Tuple; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.village.MerchantRecipe; +import net.minecraft.village.MerchantRecipeList; +import net.minecraft.village.Village; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ItemBasic; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; + +public class EntityAlienVillager extends EntityAgeable implements IMerchant, INpc, IEntityBreathable +{ + + private int randomTickDivider; + private boolean isMating; + private boolean isPlaying; + private Village villageObj; + private EntityPlayer buyingPlayer; + private MerchantRecipeList buyingList; + private int timeUntilReset; + private boolean needsInitilization; + private int wealth; + private UUID lastBuyingPlayerUuid; + private boolean isLookingForHome; + private InventoryBasic villagerInventory; + private static final EntityAlienVillager.ITradeList[] DEFAULT_TRADE_LIST_MAP = new EntityAlienVillager.ITradeList[] + {new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.oxMask, 1, 0), new EntityAlienVillager.PriceInfo(1, 2)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.oxTankLight, 1, 235), new EntityAlienVillager.PriceInfo(3, 4)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.oxygenGear, 1, 0), new EntityAlienVillager.PriceInfo(3, 4)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.fuelCanister, 1, 317), new EntityAlienVillager.PriceInfo(3, 4)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.parachute, 1, 0), new EntityAlienVillager.PriceInfo(1, 2)), + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.battery, 1, 58), new EntityAlienVillager.PriceInfo(2, 4)), + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), new EntityAlienVillager.PriceInfo(1, 1), + new ItemStack(GCItems.foodItem, 1, 1)), // carrots + // = + // also + // yields + // a + // tin! + new EntityAlienVillager.ListItemForEmeralds(new ItemStack(GCItems.basicItem, 1, ItemBasic.WAFER_BASIC), new EntityAlienVillager.PriceInfo(3, 4)), + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.schematic, 1, 0), new EntityAlienVillager.PriceInfo(3, 5), new ItemStack(GCItems.schematic, 1, 1)), // Exchange + // buggy + // and + // rocket + // schematics + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.schematic, 1, 1), new EntityAlienVillager.PriceInfo(3, 5), new ItemStack(GCItems.schematic, 1, 0)), // Exchange + // buggy + // and + // rocket + // schematics + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.basicItem, 2, 3), new EntityAlienVillager.PriceInfo(1, 1), new ItemStack(GCItems.basicItem, 1, 6)), // Compressed + // Tin + // - + // needed + // to + // craft + // a + // Fuel + // Loader + new EntityAlienVillager.ItemAndEmeraldToItem(new ItemStack(GCItems.basicItem, 2, 4), new EntityAlienVillager.PriceInfo(1, 1), new ItemStack(GCItems.basicItem, 1, 7)), // Compressed + // Copper + // - + // needed + // to + // craft + // a + // Fuel + // Loader + new EntityAlienVillager.EmeraldForItems(new ItemStack(Blocks.SAPLING, 1, 3), new EntityAlienVillager.PriceInfo(11, 39)) // The + // one + // thing + // Alien + // Villagers + // don't + // have + // and + // can't + // get + // is + // jungle + // trees... + }; + + public EntityAlienVillager(World worldIn) + { + super(worldIn); + this.villagerInventory = new InventoryBasic("Items", false, 8); + this.setSize(0.6F, 1.8F); + ((PathNavigateGround) this.getNavigator()).setBreakDoors(true); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIAvoidEntity<>(this, EntityZombie.class, 8.0F, 0.6D, 0.6D)); + this.tasks.addTask(1, new EntityAITradePlayerGC(this)); + this.tasks.addTask(1, new EntityAILookAtTradePlayerGC(this)); + this.tasks.addTask(2, new EntityAIMoveIndoors(this)); + this.tasks.addTask(3, new EntityAIRestrictOpenDoor(this)); + this.tasks.addTask(4, new EntityAIOpenDoor(this, true)); + this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 0.6D)); + this.tasks.addTask(9, new EntityAIWatchClosest2(this, EntityPlayer.class, 3.0F, 1.0F)); + this.tasks.addTask(9, new EntityAIWander(this, 0.6D)); + this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityLiving.class, 8.0F)); + this.setCanPickUpLoot(true); + } + + @Override + protected void onGrowingAdult() + { + super.onGrowingAdult(); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D); + } + + @Override + protected void updateAITasks() + { + if (--this.randomTickDivider <= 0) + { + BlockPos blockpos = new BlockPos(this); + this.world.getVillageCollection().addToVillagerPositionList(blockpos); + this.randomTickDivider = 70 + this.rand.nextInt(50); + this.villageObj = this.world.getVillageCollection().getNearestVillage(blockpos, 32); + + if (this.villageObj == null) + { + this.detachHome(); + } else + { + BlockPos blockpos1 = this.villageObj.getCenter(); + this.setHomePosAndDistance(blockpos1, (int) ((float) this.villageObj.getVillageRadius() * 1.0F)); + + if (this.isLookingForHome) + { + this.isLookingForHome = false; + this.villageObj.setDefaultPlayerReputation(5); + } + } + } + + if (!this.isTrading() && this.timeUntilReset > 0) + { + --this.timeUntilReset; + + if (this.timeUntilReset <= 0) + { + if (this.needsInitilization) + { + for (MerchantRecipe merchantrecipe : this.buyingList) + { + if (merchantrecipe.isRecipeDisabled()) + { + merchantrecipe.increaseMaxTradeUses(this.rand.nextInt(6) + this.rand.nextInt(6) + 2); + } + } + + this.populateBuyingList(); + this.needsInitilization = false; + + if (this.villageObj != null && this.lastBuyingPlayerUuid != null) + { + this.world.setEntityState(this, (byte) 14); + this.villageObj.modifyPlayerReputation(this.lastBuyingPlayerUuid, 1); + } + } + + this.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 200, 0)); + } + } + + super.updateAITasks(); + } + + @Override + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.inventory.getCurrentItem(); + boolean flag = itemstack != null && itemstack.getItem() == Items.SPAWN_EGG; + + if (!flag && this.isEntityAlive() && !this.isTrading() && !this.isChild() && !player.isSneaking()) + { + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + if (!this.world.isRemote && (this.buyingList == null || this.buyingList.size() > 0)) + { + if (gearData != null && gearData.getFrequencyModule() != GCPlayerHandler.GEAR_NOT_PRESENT) + { + this.setCustomer(player); + player.displayVillagerTradeGui(this); + } else + { + if (player instanceof EntityPlayerMP) + { + EntityPlayerMP playerMP = (EntityPlayerMP) player; + GCPlayerStats stats = GCPlayerStats.get(playerMP); + if (stats.getChatCooldown() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.village.warning.no_freq_mod"))); + stats.setChatCooldown(20); + } + } + } + } + + player.addStat(StatList.TALKED_TO_VILLAGER); + return true; + } else + { + return super.processInteract(player, hand); + } + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + super.writeEntityToNBT(tagCompound); + tagCompound.setInteger("Riches", this.wealth); + + if (this.buyingList != null) + { + tagCompound.setTag("Offers", this.buyingList.getRecipiesAsTags()); + } + + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < this.villagerInventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.villagerInventory.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + nbttaglist.appendTag(itemstack.writeToNBT(new NBTTagCompound())); + } + } + + tagCompound.setTag("Inventory", nbttaglist); + } + + @Override + public void readEntityFromNBT(NBTTagCompound tagCompund) + { + super.readEntityFromNBT(tagCompund); + this.wealth = tagCompund.getInteger("Riches"); + + if (tagCompund.hasKey("Offers", 10)) + { + NBTTagCompound nbttagcompound = tagCompund.getCompoundTag("Offers"); + this.buyingList = new MerchantRecipeList(nbttagcompound); + } + + NBTTagList nbttaglist = tagCompund.getTagList("Inventory", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + ItemStack itemstack = new ItemStack(nbttaglist.getCompoundTagAt(i)); + + if (!itemstack.isEmpty()) + { + this.villagerInventory.addItem(itemstack); + } + } + + this.setCanPickUpLoot(true); + } + + @Override + protected boolean canDespawn() + { + return false; + } + + @Override + protected float getSoundPitch() + { + return (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 0.5F; + } + + @Override + protected SoundEvent getAmbientSound() + { + return this.isTrading() ? SoundEvents.ENTITY_VILLAGER_TRADING : SoundEvents.ENTITY_VILLAGER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_VILLAGER_HURT; + } + + @Override + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_VILLAGER_DEATH; + } + + public boolean isMating() + { + return this.isMating; + } + + public void setMating(boolean mating) + { + this.isMating = mating; + } + + public void setPlaying(boolean playing) + { + this.isPlaying = playing; + } + + public boolean isPlaying() + { + return this.isPlaying; + } + + @Override + public void setRevengeTarget(EntityLivingBase livingBase) + { + super.setRevengeTarget(livingBase); + + if (this.villageObj != null && livingBase != null) + { + this.villageObj.addOrRenewAgressor(livingBase); + + if (livingBase instanceof EntityPlayer) + { + int i = -1; + + if (this.isChild()) + { + i = -3; + } + + this.villageObj.modifyPlayerReputation(livingBase.getUniqueID(), i); + + if (this.isEntityAlive()) + { + this.world.setEntityState(this, (byte) 13); + } + } + } + } + + @Override + public void onDeath(DamageSource cause) + { + if (this.villageObj != null) + { + Entity entity = cause.getTrueSource(); + + if (entity != null) + { + if (entity instanceof EntityPlayer) + { + this.villageObj.modifyPlayerReputation(entity.getUniqueID(), -2); + } else if (entity instanceof IMob) + { + this.villageObj.endMatingSeason(); + } + } else + { + EntityPlayer entityplayer = this.world.getClosestPlayerToEntity(this, 16.0D); + + if (entityplayer != null) + { + this.villageObj.endMatingSeason(); + } + } + } + + super.onDeath(cause); + } + + @Override + public void setCustomer(EntityPlayer p_70932_1_) + { + this.buyingPlayer = p_70932_1_; + } + + @Override + public EntityPlayer getCustomer() + { + return this.buyingPlayer; + } + + public boolean isTrading() + { + return this.buyingPlayer != null; + } + + @Override + public void useRecipe(MerchantRecipe recipe) + { + recipe.incrementToolUses(); + this.livingSoundTime = -this.getTalkInterval(); + this.playSound(SoundEvents.ENTITY_VILLAGER_YES, this.getSoundVolume(), this.getSoundPitch()); + int i = 3 + this.rand.nextInt(4); + + if (recipe.getToolUses() == 1 || this.rand.nextInt(5) == 0) + { + this.timeUntilReset = 40; + this.needsInitilization = true; + + if (this.buyingPlayer != null) + { + this.lastBuyingPlayerUuid = this.buyingPlayer.getUniqueID(); + } else + { + this.lastBuyingPlayerUuid = null; + } + + i += 5; + } + + if (recipe.getItemToBuy().getItem() == Items.EMERALD) + { + this.wealth += recipe.getItemToBuy().getCount(); + } + + if (recipe.getRewardsExp()) + { + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY + 0.5D, this.posZ, i)); + } + } + + @Override + public void verifySellingItem(ItemStack stack) + { + if (!this.world.isRemote && this.livingSoundTime > -this.getTalkInterval() + 20) + { + this.livingSoundTime = -this.getTalkInterval(); + + if (!stack.isEmpty()) + { + this.playSound(SoundEvents.ENTITY_VILLAGER_YES, this.getSoundVolume(), this.getSoundPitch()); + } else + { + this.playSound(SoundEvents.ENTITY_VILLAGER_NO, this.getSoundVolume(), this.getSoundPitch()); + } + } + } + + @Override + public MerchantRecipeList getRecipes(EntityPlayer p_70934_1_) + { + if (this.buyingList == null) + { + this.populateBuyingList(); + } + + return this.buyingList; + } + + private void populateBuyingList() + { + if (this.buyingList == null) + { + this.buyingList = new MerchantRecipeList(); + } + + for (EntityAlienVillager.ITradeList tradeList : DEFAULT_TRADE_LIST_MAP) + { + tradeList.modifyMerchantRecipeList(this.buyingList, this.rand); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void setRecipes(MerchantRecipeList recipeList) + { + } + + @Override + public float getEyeHeight() + { + float f = 1.62F; + + if (this.isChild()) + { + f = (float) ((double) f - 0.81D); + } + + return f; + } + + @Override + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 12) + { + this.spawnParticles(EnumParticleTypes.HEART); + } else if (id == 13) + { + this.spawnParticles(EnumParticleTypes.VILLAGER_ANGRY); + } else if (id == 14) + { + this.spawnParticles(EnumParticleTypes.VILLAGER_HAPPY); + } else + { + super.handleStatusUpdate(id); + } + } + + @SideOnly(Side.CLIENT) + private void spawnParticles(EnumParticleTypes particleType) + { + for (int i = 0; i < 5; ++i) + { + double d0 = this.rand.nextGaussian() * 0.02D; + double d1 = this.rand.nextGaussian() * 0.02D; + double d2 = this.rand.nextGaussian() * 0.02D; + this.world.spawnParticle(particleType, this.posX + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, + this.posY + 1.0D + (double) (this.rand.nextFloat() * this.height), this.posZ + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, d0, d1, d2, new int[0]); + } + } + + @Override + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + return livingdata; + } + + @Override + public EntityAlienVillager createChild(EntityAgeable ageable) + { + EntityAlienVillager entityvillager = new EntityAlienVillager(this.world); + entityvillager.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(entityvillager)), (IEntityLivingData) null); + return entityvillager; + } + + @Override + public World getWorld() + { + return this.world; + } + + @Override + public BlockPos getPos() + { + return new BlockPos(this); + } + + @Override + public boolean canBeLeashedTo(EntityPlayer player) + { + return false; + } + + @Override + public void onStruckByLightning(EntityLightningBolt lightningBolt) + { + if (!this.world.isRemote && !this.isDead) + { + EntityWitch entitywitch = new EntityEvolvedWitch(this.world); + entitywitch.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + entitywitch.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(entitywitch)), (IEntityLivingData) null); + entitywitch.setNoAI(this.isAIDisabled()); + + if (this.hasCustomName()) + { + entitywitch.setCustomNameTag(this.getCustomNameTag()); + entitywitch.setAlwaysRenderNameTag(this.getAlwaysRenderNameTag()); + } + + this.world.spawnEntity(entitywitch); + this.setDead(); + } + } + + public InventoryBasic getVillagerInventory() + { + return this.villagerInventory; + } + + @Override + protected void updateEquipmentIfNeeded(EntityItem itemEntity) + { + ItemStack itemstack = itemEntity.getItem(); + Item item = itemstack.getItem(); + + if (this.canVillagerPickupItem(item)) + { + ItemStack itemstack1 = this.villagerInventory.addItem(itemstack); + + if (itemstack1.isEmpty()) + { + itemEntity.setDead(); + } else + { + itemstack.setCount(itemstack1.getCount()); + } + } + } + + private boolean canVillagerPickupItem(Item itemIn) + { + return itemIn == Items.BREAD || itemIn == Items.POTATO || itemIn == Items.CARROT || itemIn == Items.WHEAT || itemIn == Items.WHEAT_SEEDS; + } + + public boolean func_175553_cp() + { + return this.hasEnoughItems(1); + } + + public boolean canAbondonItems() + { + return this.hasEnoughItems(2); + } + + public boolean func_175557_cr() + { + return !this.hasEnoughItems(5); + } + + private boolean hasEnoughItems(int multiplier) + { + for (int i = 0; i < this.villagerInventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.villagerInventory.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + if (itemstack.getItem() == Items.BREAD && itemstack.getCount() >= 3 * multiplier || itemstack.getItem() == Items.POTATO && itemstack.getCount() >= 12 * multiplier + || itemstack.getItem() == Items.CARROT && itemstack.getCount() >= 12 * multiplier) + { + return true; + } + + if (itemstack.getItem() == Items.WHEAT && itemstack.getCount() >= 9 * multiplier) + { + return true; + } + } + } + + return false; + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) + { + if (super.replaceItemInInventory(inventorySlot, itemStackIn)) + { + return true; + } else + { + int i = inventorySlot - 300; + + if (i >= 0 && i < this.villagerInventory.getSizeInventory()) + { + this.villagerInventory.setInventorySlotContents(i, itemStackIn); + return true; + } else + { + return false; + } + } + } + + public static class EmeraldForItems implements EntityAlienVillager.ITradeList + { + + public ItemStack sellItem; + public EntityAlienVillager.PriceInfo price; + + public EmeraldForItems(ItemStack itemStack, EntityAlienVillager.PriceInfo priceIn) + { + this.sellItem = itemStack; + this.price = priceIn; + } + + @Override + public void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random) + { + int i = 1; + + if (this.price != null) + { + i = this.price.getPrice(random); + } + + ItemStack tradeStack = this.sellItem.copy(); + tradeStack.setCount(i); + + recipeList.add(new MerchantRecipe(tradeStack, new ItemStack(GCItems.itemBasicMoon, 1, 2))); + } + } + + public interface ITradeList + { + + void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random); + } + + public static class ItemAndEmeraldToItem implements EntityAlienVillager.ITradeList + { + + public ItemStack buyingItemStack; + public EntityAlienVillager.PriceInfo buyingPriceInfo; + public ItemStack sellingItemstack; + + public ItemAndEmeraldToItem(Item p_i45813_1_, EntityAlienVillager.PriceInfo p_i45813_2_, Item p_i45813_3_) + { + this.buyingItemStack = new ItemStack(p_i45813_1_); + this.buyingPriceInfo = p_i45813_2_; + this.sellingItemstack = new ItemStack(p_i45813_3_); + } + + public ItemAndEmeraldToItem(ItemStack p_i45813_1_, EntityAlienVillager.PriceInfo p_i45813_2_, ItemStack p_i45813_3_) + { + this.buyingItemStack = p_i45813_1_; + this.buyingPriceInfo = p_i45813_2_; + this.sellingItemstack = p_i45813_3_; + } + + @Override + public void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random) + { + int i = 1; + + if (this.buyingPriceInfo != null) + { + i = this.buyingPriceInfo.getPrice(random); + } + + recipeList.add(new MerchantRecipe(this.buyingItemStack.copy(), new ItemStack(GCItems.itemBasicMoon, i, 2), this.sellingItemstack.copy())); + } + } + + public static class ListItemForEmeralds implements EntityAlienVillager.ITradeList + { + + public ItemStack itemToBuy; + public EntityAlienVillager.PriceInfo priceInfo; + + public ListItemForEmeralds(ItemStack stack, EntityAlienVillager.PriceInfo priceInfo) + { + this.itemToBuy = stack; + this.priceInfo = priceInfo; + } + + @Override + public void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random) + { + int i = 1; + + if (this.priceInfo != null) + { + i = this.priceInfo.getPrice(random); + } + + ItemStack itemstack; + ItemStack itemstack1; + + if (i < 0) + { + itemstack = new ItemStack(GCItems.itemBasicMoon, 1, 2); + itemstack1 = new ItemStack(this.itemToBuy.getItem(), -i, this.itemToBuy.getMetadata()); + } else + { + itemstack = new ItemStack(GCItems.itemBasicMoon, i, 2); + itemstack1 = new ItemStack(this.itemToBuy.getItem(), 1, this.itemToBuy.getMetadata()); + } + + recipeList.add(new MerchantRecipe(itemstack, itemstack1)); + } + } + + public static class PriceInfo extends Tuple + { + + public PriceInfo(int p_i45810_1_, int p_i45810_2_) + { + super(Integer.valueOf(p_i45810_1_), Integer.valueOf(p_i45810_2_)); + } + + public int getPrice(Random rand) + { + return ((Integer) this.getFirst()).intValue() >= ((Integer) this.getSecond()).intValue() ? ((Integer) this.getFirst()).intValue() + : ((Integer) this.getFirst()).intValue() + rand.nextInt(((Integer) this.getSecond()).intValue() - ((Integer) this.getFirst()).intValue() + 1); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBossBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBossBase.java new file mode 100644 index 00000000..3ffa51d4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBossBase.java @@ -0,0 +1,247 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.BossInfo; +import net.minecraft.world.BossInfoServer; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class EntityBossBase extends EntityMob implements IBoss +{ + + protected TileEntityDungeonSpawner spawner; + public int deathTicks = 0; + + public int entitiesWithin; + public int entitiesWithinLast; + + private final BossInfoServer bossInfo = (BossInfoServer) (new BossInfoServer(this.getDisplayName(), getHealthBarColor(), BossInfo.Overlay.PROGRESS)); + + public EntityBossBase(World world) + { + super(world); + } + + public abstract int getChestTier(); + + public abstract ItemStack getGuaranteedLoot(Random rand); + + public abstract void dropKey(); + + public abstract BossInfo.Color getHealthBarColor(); + + @Override + protected void updateAITasks() + { + this.bossInfo.setPercent(this.getHealth() / this.getMaxHealth()); + super.updateAITasks(); + } + + @Override + protected void onDeathUpdate() + { + ++this.deathTicks; + + if (this.deathTicks >= 180 && this.deathTicks <= 200) + { + final float x = (this.rand.nextFloat() - 0.5F) * this.width; + final float y = (this.rand.nextFloat() - 0.5F) * (this.height / 2.0F); + final float z = (this.rand.nextFloat() - 0.5F) * this.width; + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_HUGE, this.posX + x, this.posY + 2.0D + y, this.posZ + z, 0.0D, 0.0D, 0.0D); + } + + int i; + int j; + + if (!this.world.isRemote) + { + if (this.deathTicks >= 180 && this.deathTicks % 5 == 0) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(PacketSimple.EnumSimplePacket.C_PLAY_SOUND_EXPLODE, GCCoreUtil.getDimensionID(this.world), new Object[] + {}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + } + + if (this.deathTicks > 150 && this.deathTicks % 5 == 0) + { + i = 30; + + while (i > 0) + { + j = EntityXPOrb.getXPSplit(i); + i -= j; + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY, this.posZ, j)); + } + } + } + + if (this.deathTicks == 200 && !this.world.isRemote) + { + i = 20; + + while (i > 0) + { + j = EntityXPOrb.getXPSplit(i); + i -= j; + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY, this.posZ, j)); + } + + TileEntityTreasureChest chest = null; + + if (this.spawner != null && this.spawner.getChestPos() != null) + { + TileEntity chestTest = this.world.getTileEntity(this.spawner.getChestPos()); + + if (chestTest != null && chestTest instanceof TileEntityTreasureChest) + { + chest = (TileEntityTreasureChest) chestTest; + } + } + + if (chest == null) + { + // Fallback to finding closest chest + chest = TileEntityTreasureChest.findClosest(this, this.getChestTier()); + } + + if (chest != null) + { + double dist = this.getDistanceSq(chest.getPos().getX() + 0.5, chest.getPos().getY() + 0.5, chest.getPos().getZ() + 0.5); + if (dist < 1000 * 1000) + { + if (!chest.locked) + { + chest.locked = true; + } + + for (int k = 0; k < chest.getSizeInventory(); k++) + { + chest.setInventorySlotContents(k, ItemStack.EMPTY); + } + + chest.fillWithLoot(null); + +// ChestGenHooks info = ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST); +// +// // Generate twice, since it's an extra special chest +// WeightedRandomChestContent.generateChestContents(this.rand, info.getItems(this.rand), chest, info.getCount(this.rand)); +// WeightedRandomChestContent.generateChestContents(this.rand, info.getItems(this.rand), chest, info.getCount(this.rand)); + + ItemStack schematic = this.getGuaranteedLoot(this.rand); + int slot = this.rand.nextInt(chest.getSizeInventory()); + chest.setInventorySlotContents(slot, schematic); + } + } + + this.dropKey(); + + super.setDead(); + + if (this.spawner != null) + { + // Note: spawner.isBossDefeated is true, so it's properly dead + this.spawner.isBossDefeated = true; + this.spawner.boss = null; + this.spawner.spawned = false; + + if (!this.world.isRemote) + { + this.spawner.lastKillTime = MinecraftServer.getCurrentTimeMillis(); + } + } + } + } + + @Override + public void onLivingUpdate() + { + if (this.world.isRemote) + { + this.setHealth(this.getHealth()); + } + + if (this.spawner != null) + { + List playersWithin = this.world.getEntitiesWithinAABB(EntityPlayer.class, this.spawner.getRangeBounds()); + + this.entitiesWithin = playersWithin.size(); + + if (this.entitiesWithin == 0 && this.entitiesWithinLast != 0) + { + List entitiesWithin2 = this.world.getEntitiesWithinAABB(EntityPlayer.class, this.spawner.getRangeBoundsPlus11()); + + for (EntityPlayer p : entitiesWithin2) + { + p.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.skeleton_boss.message"))); + } + + this.setDead(); + // Note: spawner.isBossDefeated is false, so the boss will + // respawn if any player comes back inside the room + + return; + } + + this.entitiesWithinLast = this.entitiesWithin; + } + + super.onLivingUpdate(); + } + + @Override + public void setDead() + { + if (this.spawner != null) + { + this.spawner.isBossDefeated = false; + this.spawner.boss = null; + this.spawner.spawned = false; + } + + super.setDead(); + } + + @Override + public void onBossSpawned(TileEntityDungeonSpawner spawner) + { + this.spawner = spawner; + } + + @Override + public void addTrackingPlayer(EntityPlayerMP player) + { + super.addTrackingPlayer(player); + this.bossInfo.addPlayer(player); + } + + @Override + public void removeTrackingPlayer(EntityPlayerMP player) + { + super.removeTrackingPlayer(player); + this.bossInfo.removePlayer(player); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBuggy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBuggy.java new file mode 100644 index 00000000..b371af38 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityBuggy.java @@ -0,0 +1,861 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.network.PacketEntityUpdate; +import micdoodle8.mods.galacticraft.core.network.PacketEntityUpdate.IEntityFullSync; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.tile.TileEntityBuggyFueler; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class EntityBuggy extends Entity implements IInventory, IPacketReceiver, IDockable, IControllableEntity, IEntityFullSync +{ + + private static final DataParameter CURRENT_DAMAGE = EntityDataManager.createKey(EntityBuggy.class, DataSerializers.VARINT); + private static final DataParameter TIME_SINCE_HIT = EntityDataManager.createKey(EntityBuggy.class, DataSerializers.VARINT); + private static final DataParameter ROCK_DIRECTION = EntityDataManager.createKey(EntityBuggy.class, DataSerializers.VARINT); + public static final int tankCapacity = 1000; + public FluidTank buggyFuelTank = new FluidTank(EntityBuggy.tankCapacity); + protected long ticks = 0; + public int buggyType; + public int currentDamage; + public int timeSinceHit; + public int rockDirection; + public double speed; + public float wheelRotationZ; + public float wheelRotationX; + float maxSpeed = 0.5F; + float accel = 0.2F; + float turnFactor = 3.0F; + public String texture; + private NonNullList stacks = NonNullList.withSize(60, ItemStack.EMPTY); + public double boatX; + public double boatY; + public double boatZ; + public double boatYaw; + public double boatPitch; + public int boatPosRotationIncrements; + private IFuelDock landingPad; + private int timeClimbing; + private boolean shouldClimb; + + public EntityBuggy(World var1) + { + super(var1); + this.setSize(1.4F, 0.6F); + this.speed = 0.0D; + this.preventEntitySpawning = true; + this.dataManager.register(CURRENT_DAMAGE, 0); + this.dataManager.register(TIME_SINCE_HIT, 0); + this.dataManager.register(ROCK_DIRECTION, 1); + this.ignoreFrustumCheck = true; + this.isImmuneToFire = true; + + if (var1 != null && var1.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + public EntityBuggy(World var1, double var2, double var4, double var6, int type) + { + this(var1); + this.setPosition(var2, var4, var6); + this.setBuggyType(type); + this.stacks = NonNullList.withSize(this.buggyType * 18, ItemStack.EMPTY); + } + + public int getScaledFuelLevel(int i) + { + final double fuelLevel = this.buggyFuelTank.getFluid() == null ? 0 : this.buggyFuelTank.getFluid().amount; + + return (int) (fuelLevel * i / EntityBuggy.tankCapacity); + } + + public ModelBase getModel() + { + return null; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(GCItems.buggy, 1, this.buggyType); + } + + public int getType() + { + return this.buggyType; + } + + @Override + protected void entityInit() + { + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public double getMountedYOffset() + { + return this.height - 3.0D; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + public void setBuggyType(int par1) + { + this.buggyType = par1; + } + + @Override + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + final double offsetX = Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D + 114.8) * -0.5D; + final double offsetZ = Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D + 114.8) * -0.5D; + passenger.setPosition(this.posX + offsetX, this.posY + 0.4F + passenger.getYOffset(), this.posZ + offsetZ); + } + } + + @Override + public void setPositionRotationAndMotion(double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ, boolean onGround) + { + if (this.world.isRemote) + { + this.boatX = x; + this.boatY = y; + this.boatZ = z; + this.boatYaw = yaw; + this.boatPitch = pitch; + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + this.boatPosRotationIncrements = 5; + } else + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + } + } + + @Override + public void performHurtAnimation() + { + this.dataManager.set(ROCK_DIRECTION, -this.dataManager.get(ROCK_DIRECTION)); + this.dataManager.set(TIME_SINCE_HIT, 10); + this.dataManager.set(CURRENT_DAMAGE, this.dataManager.get(CURRENT_DAMAGE) * 5); + } + + @Override + public boolean attackEntityFrom(DamageSource var1, float var2) + { + if (this.isDead || var1.equals(DamageSource.CACTUS)) + { + return true; + } else + { + Entity e = var1.getTrueSource(); + boolean flag = e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode; + + if (this.isEntityInvulnerable(var1) || (e instanceof EntityLivingBase && !(e instanceof EntityPlayer))) + { + return false; + } else + { + this.dataManager.set(ROCK_DIRECTION, -this.dataManager.get(ROCK_DIRECTION)); + this.dataManager.set(TIME_SINCE_HIT, 10); + this.dataManager.set(CURRENT_DAMAGE, (int) (this.dataManager.get(CURRENT_DAMAGE) + var2 * 10)); + this.markVelocityChanged(); + + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + this.dataManager.set(CURRENT_DAMAGE, 100); + } + + if (flag || this.dataManager.get(CURRENT_DAMAGE) > 2) + { + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + if (flag) + { + this.setDead(); + } else + { + this.setDead(); + if (!this.world.isRemote) + { + this.dropBuggyAsItem(); + } + } + this.setDead(); + } + + return true; + } + } + } + + public void dropBuggyAsItem() + { + List dropped = this.getItemsDropped(); + + if (dropped == null) + { + return; + } + + for (final ItemStack item : dropped) + { + EntityItem entityItem = this.entityDropItem(item, 0); + + if (item.hasTagCompound()) + { + entityItem.getItem().setTagCompound(item.getTagCompound().copy()); + } + } + } + + public List getItemsDropped() + { + final List items = new ArrayList(); + + ItemStack buggy = new ItemStack(GCItems.buggy, 1, this.buggyType); + buggy.setTagCompound(new NBTTagCompound()); + buggy.getTagCompound().setInteger("BuggyFuel", this.buggyFuelTank.getFluidAmount()); + items.add(buggy); + + for (ItemStack item : this.stacks) + { + if (!item.isEmpty()) + { + items.add(item); + } + } + + return items; + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + if (!this.getPassengers().isEmpty()) + { + if (!this.getPassengers().contains(FMLClientHandler.instance().getClient().player)) + { + this.boatPosRotationIncrements = posRotationIncrements + 5; + this.boatX = x; + this.boatY = y; + this.boatZ = z; + this.boatYaw = yaw; + this.boatPitch = pitch; + } + } + } + + @Override + public void onUpdate() + { + this.ticks++; + + super.onUpdate(); + + if (this.world.isRemote) + { + this.wheelRotationX += Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ) * 150.0F * (this.speed < 0 ? 1 : -1); + this.wheelRotationX %= 360; + this.wheelRotationZ = Math.max(-30.0F, Math.min(30.0F, this.wheelRotationZ * 0.9F)); + } + + if (this.world.isRemote && !FMLClientHandler.instance().getClient().player.equals(this.world.getClosestPlayerToEntity(this, -1))) + { + double x; + double y; + double var12; + double z; + if (this.boatPosRotationIncrements > 0) + { + x = this.posX + (this.boatX - this.posX) / this.boatPosRotationIncrements; + y = this.posY + (this.boatY - this.posY) / this.boatPosRotationIncrements; + z = this.posZ + (this.boatZ - this.posZ) / this.boatPosRotationIncrements; + var12 = MathHelper.wrapDegrees(this.boatYaw - this.rotationYaw); + this.rotationYaw = (float) (this.rotationYaw + var12 / this.boatPosRotationIncrements); + this.rotationPitch = (float) (this.rotationPitch + (this.boatPitch - this.rotationPitch) / this.boatPosRotationIncrements); + --this.boatPosRotationIncrements; + this.setPosition(x, y, z); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else + { + x = this.posX + this.motionX; + y = this.posY + this.motionY; + z = this.posZ + this.motionZ; + if (!this.getPassengers().isEmpty()) + { + this.setPosition(x, y, z); + } + + if (this.onGround) + { + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + + this.motionX *= 0.9900000095367432D; + this.motionY *= 0.949999988079071D; + this.motionZ *= 0.9900000095367432D; + } + return; + } + + if (this.dataManager.get(TIME_SINCE_HIT) > 0) + { + this.dataManager.set(TIME_SINCE_HIT, this.dataManager.get(TIME_SINCE_HIT) - 1); + } + + if (this.dataManager.get(CURRENT_DAMAGE) > 0) + { + this.dataManager.set(CURRENT_DAMAGE, this.dataManager.get(CURRENT_DAMAGE) - 1); + } + + if (!this.onGround) + { + this.motionY -= TransformerHooks.getGravityForEntity(this) * 0.5D; + } + + if (this.inWater && this.speed > 0.2D) + { + this.world.playSound(null, (float) this.posX, (float) this.posY, (float) this.posZ, SoundEvents.ENTITY_GENERIC_BURN, SoundCategory.NEUTRAL, 0.5F, + 2.6F + (this.world.rand.nextFloat() - this.world.rand.nextFloat()) * 0.8F); + } + + this.speed *= 0.98D; + + if (this.speed > this.maxSpeed) + { + this.speed = this.maxSpeed; + } + + if (this.collidedHorizontally && this.shouldClimb) + { + this.speed *= 0.9; + this.motionY = 0.15D * ((-Math.pow((this.timeClimbing) - 1, 2)) / 250.0F) + 0.15F; + this.motionY = Math.max(-0.15, this.motionY); + this.shouldClimb = false; + } + + if ((this.motionX == 0 || this.motionZ == 0) && !this.onGround) + { + this.timeClimbing++; + } else + { + this.timeClimbing = 0; + } + + if (this.world.isRemote && this.buggyFuelTank.getFluid() != null && this.buggyFuelTank.getFluid().amount > 0) + { + this.motionX = -(this.speed * Math.cos((this.rotationYaw - 90F) / Constants.RADIANS_TO_DEGREES_D)); + this.motionZ = -(this.speed * Math.sin((this.rotationYaw - 90F) / Constants.RADIANS_TO_DEGREES_D)); + } + + if (this.world.isRemote) + { + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + + if (!this.world.isRemote && Math.abs(this.motionX * this.motionZ) > 0.000001) + { + double d = this.motionX * this.motionX + this.motionZ * this.motionZ; + + if (d != 0 && this.ticks % (MathHelper.floor(2 / d) + 1) == 0) + { + this.removeFuel(1); + } + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketEntityUpdate(this)); + } else if (this.ticks % 5 == 0) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketEntityUpdate(this), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 50.0D)); + GalacticraftCore.packetPipeline.sendToAllAround(new PacketDynamic(this), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 50.0D)); + } + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.world.isRemote) + { + return; + } + sendData.add(this.buggyType); + sendData.add(this.buggyFuelTank); + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.buggyType = buffer.readInt(); + + try + { + this.buggyFuelTank = NetworkUtil.readFluidTank(buffer); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.buggyType = nbt.getInteger("buggyType"); + ItemStackHelper.loadAllItems(nbt, this.stacks); + + if (nbt.hasKey("fuelTank")) + { + this.buggyFuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("buggyType", this.buggyType); + final NBTTagList var2 = new NBTTagList(); + + if (this.buggyFuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.buggyFuelTank.writeToNBT(new NBTTagCompound())); + } + + ItemStackHelper.saveAllItems(nbt, stacks); + } + + @Override + public int getSizeInventory() + { + return this.buggyType * 18; + } + + @Override + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public String getName() + { + return "Buggy"; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer var1) + { + return !this.isDead && var1.getDistanceSq(this) <= 64.0D; + } + + @Override + public void markDirty() + { + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (this.getPassengers().isEmpty()) + { + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.leftKey.getKeyCode()) + " / " + + GameSettings.getKeyDisplayString(KeyHandlerClient.rightKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.buggy.turn.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.accelerateKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.buggy.accel.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.decelerateKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.buggy.decel.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.openFuelGui.getKeyCode()) + " - " + GCCoreUtil.translate("gui.buggy.inv.name"))); + } + + return true; + } else + { + if (this.getPassengers().contains(player)) + { + this.removePassenger(player); + + return true; + } else + { + player.startRiding(this); + return true; + } + } + } + + @Override + public boolean pressKey(int key) + { + if (this.world.isRemote && (key == 6 || key == 8 || key == 9)) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_CONTROL_ENTITY, GCCoreUtil.getDimensionID(this.world), new Object[] + {key})); + return true; + } + + switch (key) + { + case 0: // Accelerate + this.speed += this.accel / 20D; + this.shouldClimb = true; + return true; + case 1: // Deccelerate + this.speed -= this.accel / 20D; + this.shouldClimb = true; + return true; + case 2: // Left + this.rotationYaw -= 0.5F * this.turnFactor; + this.wheelRotationZ = Math.max(-30.0F, Math.min(30.0F, this.wheelRotationZ + 0.5F)); + return true; + case 3: // Right + this.rotationYaw += 0.5F * this.turnFactor; + this.wheelRotationZ = Math.max(-30.0F, Math.min(30.0F, this.wheelRotationZ - 0.5F)); + return true; + } + + return false; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public int addFuel(FluidStack liquid, boolean doDrain) + { + if (this.landingPad != null) + { + return FluidUtil.fillWithGCFuel(this.buggyFuelTank, liquid, doDrain); + } + + return 0; + } + + @Override + public FluidStack removeFuel(int amount) + { + return this.buggyFuelTank.drain(amount, true); + } + + @Override + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + if (this.buggyType == 0) + { + return EnumCargoLoadingState.NOINVENTORY; + } + + int count = 0; + + for (count = 0; count < this.stacks.size(); count++) + { + ItemStack stackAt = this.stacks.get(count); + + if (stackAt != null && stackAt.getItem() == stack.getItem() && stackAt.getItemDamage() == stack.getItemDamage() && stackAt.getCount() < stackAt.getMaxStackSize()) + { + if (stackAt.getCount() + stack.getCount() <= stackAt.getMaxStackSize()) + { + if (doAdd) + { + stackAt.grow(stack.getCount()); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } else + { + // Part of the stack can fill this slot but there will be + // some left over + int origSize = stackAt.getCount(); + int surplus = origSize + stack.getCount() - stackAt.getMaxStackSize(); + + if (doAdd) + { + stackAt.setCount(stackAt.getMaxStackSize()); + this.markDirty(); + } + + stack.setCount(surplus); + if (this.addCargo(stack, doAdd) == EnumCargoLoadingState.SUCCESS) + { + return EnumCargoLoadingState.SUCCESS; + } + + stackAt.setCount(origSize); + return EnumCargoLoadingState.FULL; + } + } + } + + for (count = 0; count < this.stacks.size(); count++) + { + ItemStack stackAt = this.stacks.get(count); + + if (!stackAt.isEmpty()) + { + if (doAdd) + { + this.stacks.set(count, stack); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + } + + return EnumCargoLoadingState.FULL; + } + + @Override + public RemovalResult removeCargo(boolean doRemove) + { + for (int i = 0; i < this.stacks.size(); i++) + { + ItemStack stackAt = this.getStackInSlot(i); + + if (stackAt != null) + { + ItemStack resultStack = stackAt.copy(); + resultStack.setCount(1); + + if (doRemove) + { + stackAt.shrink(1); + this.markDirty(); + } + + return new RemovalResult(EnumCargoLoadingState.SUCCESS, resultStack); + } + } + + return new RemovalResult(EnumCargoLoadingState.EMPTY, ItemStack.EMPTY); + } + + @Override + public void setPad(IFuelDock pad) + { + this.landingPad = pad; + } + + @Override + public IFuelDock getLandingPad() + { + return this.landingPad; + } + + @Override + public void onPadDestroyed() + { + + } + + @Override + public boolean isDockValid(IFuelDock dock) + { + return dock instanceof TileEntityBuggyFueler; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public UUID getOwnerUUID() + { + if (!this.getPassengers().isEmpty() && !(this.getPassengers().get(0) instanceof EntityPlayer)) + { + return null; + } + + return !this.getPassengers().isEmpty() ? this.getPassengers().get(0).getPersistentID() : null; + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + public boolean inFlight() + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityCelestialFake.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityCelestialFake.java new file mode 100644 index 00000000..d50a1a73 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityCelestialFake.java @@ -0,0 +1,393 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.UUID; + +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +import io.netty.buffer.ByteBuf; + +public class EntityCelestialFake extends EntityAdvancedMotion implements IIgnoreShift +{ + + private boolean lastShouldMove; + private UUID persistantRiderUUID; + private Boolean shouldMoveClient; + private Boolean shouldMoveServer; + private boolean hasReceivedPacket; + private ArrayList prevData; + private boolean networkDataChanged; + + public EntityCelestialFake(World var1) + { + super(var1); + this.setSize(3.0F, 1.0F); + } + + @Override + public boolean shouldSendAdvancedMotionPacket() + { + return this.shouldMoveClient != null && this.shouldMoveServer != null; + } + + @Override + public boolean canSetPositionClient() + { + return this.shouldSendAdvancedMotionPacket(); + } + + public EntityCelestialFake(World var1, double var2, double var4, double var6) + { + this(var1); + this.setPosition(var2, var4, var6); + } + + public EntityCelestialFake(EntityPlayerMP player) + { + this(player.world, player.posX, player.posY, player.posZ); + + this.setPositionAndRotation(player.posX, player.posY, player.posZ, 0, 0); + + player.startRiding(this, true); + } + + @Override + public void onUpdate() + { + if (this.getPassengers().isEmpty()) + { + this.setDead(); + return; + } + super.onUpdate(); + + if (this.ticks < 40 && this.posY > 150) + { + if (this.getPassengers().isEmpty()) + { + final EntityPlayer player = this.world.getClosestPlayerToEntity(this, 5); + + if (player != null && player.getRidingEntity() == null) + { + player.startRiding(this, true); + } + } + } + + AxisAlignedBB box = this.getEntityBoundingBox().grow(0.2D, 0.4D, 0.2D); + + final List var15 = this.world.getEntitiesWithinAABBExcludingEntity(this, box); + + if (var15 != null && !var15.isEmpty()) + { + for (Entity entity : var15) + { + if (!this.getPassengers().contains(entity)) + { + this.pushEntityAway(entity); + } + } + } + } + + private void pushEntityAway(Entity entityToPush) + { + if (!this.getPassengers().contains(entityToPush) && this.getRidingEntity() != entityToPush) + { + double d0 = this.posX - entityToPush.posX; + double d1 = this.posZ - entityToPush.posZ; + double d2 = MathHelper.absMax(d0, d1); + + if (d2 >= 0.009999999776482582D) + { + d2 = MathHelper.sqrt(d2); + d0 /= d2; + d1 /= d2; + double d3 = 1.0D / d2; + + if (d3 > 1.0D) + { + d3 = 1.0D; + } + + d0 *= d3; + d1 *= d3; + d0 *= 0.05000000074505806D; + d1 *= 0.05000000074505806D; + d0 *= 1.0F - entityToPush.entityCollisionReduction; + d1 *= 1.0F - entityToPush.entityCollisionReduction; + entityToPush.addVelocity(-d0, 0.0D, -d1); + } + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + if (nbt.hasKey("RiderUUID_LSB")) + { + this.persistantRiderUUID = new UUID(nbt.getLong("RiderUUID_LSB"), nbt.getLong("RiderUUID_MSB")); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + final NBTTagList nbttaglist = new NBTTagList(); + + UUID id = this.getOwnerUUID(); + + if (id != null) + { + nbt.setLong("RiderUUID_LSB", id.getLeastSignificantBits()); + nbt.setLong("RiderUUID_MSB", id.getMostSignificantBits()); + } + } + + @Override + public boolean shouldMove() + { + return false; + } + + @Override + public void tickInAir() + { + if (this.world.isRemote) + { + this.motionY = this.motionX = this.motionZ = 0.0F; + + this.lastShouldMove = false; + } + } + + @Override + public ArrayList getNetworkedData() + { + final ArrayList objList = new ArrayList(); + + if (this.world.isRemote) + { + this.shouldMoveClient = this.shouldMove(); + objList.add(this.shouldMoveClient); + } else + { + this.shouldMoveServer = this.shouldMove(); + objList.add(this.shouldMoveServer); + // Server send rider information for client to check + objList.add(this.getPassengers().isEmpty() ? -1 : this.getPassengers().get(0).getEntityId()); + } + + this.networkDataChanged = !objList.equals(this.prevData); + this.prevData = objList; + return objList; + } + + @Override + public boolean networkedDataChanged() + { + return this.networkDataChanged; + } + + @Override + public boolean canRiderInteract() + { + return true; + } + + @Override + public int getPacketTickSpacing() + { + return 2; + } + + @Override + public double getPacketSendDistance() + { + return 500.0D; + } + + @Override + public void readNetworkedData(ByteBuf buffer) + { + try + { + if (this.world.isRemote) + { + this.hasReceivedPacket = true; + this.shouldMoveServer = buffer.readBoolean(); + + // Check has correct rider on client + int shouldBeMountedId = buffer.readInt(); + if (this.getPassengers().isEmpty()) + { + if (shouldBeMountedId > -1) + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + e.startRiding(this, true); + } + } + } else if (this.getPassengers().get(0).getEntityId() != shouldBeMountedId) + { + if (shouldBeMountedId == -1) + { + this.removePassengers(); + } else + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + e.startRiding(this, true); + } + } + } + } else + { + this.shouldMoveClient = buffer.readBoolean(); + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + @Override + public boolean allowDamageSource(DamageSource damageSource) + { + return !damageSource.isExplosion(); + } + + @Override + public List getItemsDropped() + { + return null; + } + + @Override + public boolean isItemValidForSlot(int var1, ItemStack var2) + { + return false; + } + + @Override + public double getPacketRange() + { + return 50.0D; + } + + @Override + public UUID getOwnerUUID() + { + if (!this.getPassengers().isEmpty() && !(this.getPassengers().get(0) instanceof EntityPlayer)) + { + return null; + } + + UUID id; + + if (!this.getPassengers().isEmpty()) + { + id = this.getPassengers().get(0).getPersistentID(); + + this.persistantRiderUUID = id; + } else + { + id = this.persistantRiderUUID; + } + + return id; + } + + @Override + public boolean pressKey(int key) + { + return false; + } + + @Override + public int getSizeInventory() + { + return 0; + } + + @Override + public String getName() + { + return ""; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean shouldSpawnParticles() + { + return false; + } + + @Override + public Map getParticleMap() + { + return null; + } + + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + return null; + } + + @Override + public void tickOnGround() + { + this.tickInAir(); + } + + @Override + public void onGroundHit() + { + + } + + @Override + public Vector3 getMotionVec() + { + return new Vector3(0, 0, 0); + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedCreeper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedCreeper.java new file mode 100644 index 00000000..31287450 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedCreeper.java @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.UUID; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAICreeperSwell; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class EntityEvolvedCreeper extends EntityCreeper implements IEntityBreathable +{ + + private float sizeXBase = -1.0F; + private float sizeYBase; + private static final DataParameter IS_CHILD = EntityDataManager.createKey(EntityEvolvedCreeper.class, DataSerializers.BOOLEAN); + private static final UUID babySpeedBoostUUID = UUID.fromString("ef67a435-32a4-4efd-b218-e7431438b109"); + private static final AttributeModifier babySpeedBoostModifier = new AttributeModifier(babySpeedBoostUUID, "Baby speed boost evolved creeper", 0.5D, 1); + + public EntityEvolvedCreeper(World par1World) + { + super(par1World); + this.tasks.taskEntries.clear(); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAICreeperSwell(this)); + this.tasks.addTask(3, new EntityAIAvoidEntity<>(this, EntityOcelot.class, 6.0F, 1.0D, 1.2D)); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, false)); + this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); + this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0])); + this.setSize(0.7F, 2.2F); + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(IS_CHILD, false); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(25.0D); + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + + if (this.isChild()) + { + nbt.setBoolean("IsBaby", true); + } + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + + if (nbt.getBoolean("IsBaby")) + { + this.setChild(true); + } + } + + @Override + public boolean canBreath() + { + return true; + } + + public void setChildSize(boolean isChild) + { + this.setCreeperScale(isChild ? 0.5F : 1.0F); + } + + @Override + protected final void setSize(float sizeX, float sizeY) + { + boolean flag = this.sizeXBase > 0.0F && this.sizeYBase > 0.0F; + this.sizeXBase = sizeX; + this.sizeYBase = sizeY; + + if (!flag) + { + this.setCreeperScale(1.0F); + } + } + + protected final void setCreeperScale(float scale) + { + super.setSize(this.sizeXBase * scale, this.sizeYBase * scale); + // GalacticraftCore.logger.info("" + this.sizeYBase + " " + scale); + } + + @Override + public boolean isChild() + { + return this.dataManager.get(IS_CHILD); + } + + @Override + protected int getExperiencePoints(EntityPlayer p_70693_1_) + { + if (this.isChild()) + { + this.experienceValue = (this.experienceValue * 5) / 2; + } + + return super.getExperiencePoints(p_70693_1_); + } + + public void setChild(boolean isChild) + { + this.dataManager.set(IS_CHILD, isChild); + + if (this.world != null && !this.world.isRemote) + { + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + iattributeinstance.removeModifier(babySpeedBoostModifier); + + if (isChild) + { + iattributeinstance.applyModifier(babySpeedBoostModifier); + } + } + + this.setChildSize(isChild); + } + + @Override + protected void jump() + { + this.motionY = 0.45D / WorldUtil.getGravityFactor(this); + if (this.motionY < 0.22D) + { + this.motionY = 0.22D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } + + @Override + protected Item getDropItem() + { + if (this.isBurning()) + { + return Items.BLAZE_ROD; + } + return Items.REDSTONE; + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(12)) + { + case 0: + case 1: + case 2: + case 3: + this.entityDropItem(new ItemStack(Blocks.SAND), 0.0F); + break; + case 4: + case 5: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 6: + this.dropItem(GCItems.oxygenGear, 1); + break; + case 7: + case 8: + this.entityDropItem(new ItemStack(Blocks.ICE), 0.0F); + break; + default: + if (ConfigManagerCore.challengeMobDropsAndSpawning) + this.dropItem(Items.REEDS, 1); + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + // No loot table + this.dropFewItems(wasRecentlyHit, lootingModifier); + this.dropEquipment(wasRecentlyHit, lootingModifier); + } + + @Override + protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) + { + super.dropFewItems(wasRecentlyHit, lootingModifier); + + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.02F) + { + this.addRandomDrop(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedEnderman.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedEnderman.java new file mode 100644 index 00000000..69e6442f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedEnderman.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.GCItems; + +public class EntityEvolvedEnderman extends EntityEnderman implements IEntityBreathable +{ + + public EntityEvolvedEnderman(World world) + { + super(world); + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + super.dropLoot(wasRecentlyHit, lootingModifier, source); + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.015F) + { + this.addRandomDrop(); + } + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(10)) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + this.dropItem(Items.ENDER_PEARL, 1); + break; + case 6: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 7: + case 8: + this.dropItem(Items.ENDER_EYE, 1); + break; + case 9: + this.dropItem(GCItems.oxygenConcentrator, 1); + break; + case 10: + this.dropItem(GCItems.oxMask, 1); + break; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSkeleton.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSkeleton.java new file mode 100644 index 00000000..4420ef37 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSkeleton.java @@ -0,0 +1,261 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class EntityEvolvedSkeleton extends EntitySkeleton implements IEntityBreathable, ITumblable +{ + + private static final DataParameter SPIN_PITCH = EntityDataManager.createKey(EntityEvolvedSkeleton.class, DataSerializers.FLOAT); + private float tumbling = 0F; + private float tumbleAngle = 0F; + + public EntityEvolvedSkeleton(World worldIn) + { + super(worldIn); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(25); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.35F); + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + protected void jump() + { + this.motionY = 0.45D / WorldUtil.getGravityFactor(this); + if (this.motionY < 0.24D) + { + this.motionY = 0.24D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } + + protected void addRandomDrop() + { + int r = this.rand.nextInt(12); + switch (r) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + this.entityDropItem(new ItemStack(GCBlocks.oxygenPipe), 0.0F); + break; + case 6: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 7: + case 8: + this.dropItem(GCItems.canister, 1); + break; + default: + if (ConfigManagerCore.challengeMobDropsAndSpawning) + this.dropItem(Items.PUMPKIN_SEEDS, 1); + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + // No loot table + this.dropFewItems(wasRecentlyHit, lootingModifier); + this.dropEquipment(wasRecentlyHit, lootingModifier); + } + + @Override + protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) + { + Item item = Items.BONE; + + int j = this.rand.nextInt(3); + + if (item != null) + { + if (lootingModifier > 0) + { + j += this.rand.nextInt(lootingModifier + 1); + } + + for (int k = 1; k < j; ++k) + { + this.dropItem(item, 1); + } + } + + j = this.rand.nextInt(3 + lootingModifier); + if (j > 1) + this.dropItem(Items.BONE, 1); + + // Drop lapis as semi-rare drop if player hit and if dropping bones + if (wasRecentlyHit && (ConfigManagerCore.challengeMobDropsAndSpawning) && j > 1 && this.rand.nextInt(12) <= lootingModifier) + this.entityDropItem(new ItemStack(Items.DYE, 1, 4), 0.0F); + + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.02F) + { + this.addRandomDrop(); + } + } + + @Override + public void setTumbling(float value) + { + if (value != 0F) + { + if (this.tumbling == 0F) + this.tumbling = (this.world.rand.nextFloat() + 0.5F) * value; + } else + this.tumbling = 0F; + } + + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + if (!this.isDead) + { + if (this.tumbling != 0F) + { + if (this.onGround) + { + this.tumbling = 0F; + } + } + + if (!this.world.isRemote) + { + this.setSpinPitch(this.tumbling); + } else + { + this.tumbling = this.getSpinPitch(); + this.tumbleAngle -= this.tumbling; + if (this.tumbling == 0F && this.tumbleAngle != 0F) + { + this.tumbleAngle *= 0.8F; + if (Math.abs(this.tumbleAngle) < 1F) + this.tumbleAngle = 0F; + } + } + } + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.getDataManager().register(SPIN_PITCH, 0.0F); + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + this.tumbling = nbt.getFloat("tumbling"); + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + nbt.setFloat("tumbling", this.tumbling); + } + + public float getSpinPitch() + { + return this.getDataManager().get(SPIN_PITCH); + } + + public void setSpinPitch(float pitch) + { + this.getDataManager().set(SPIN_PITCH, pitch); + } + + @Override + public float getTumbleAngle(float partial) + { + float angle = this.tumbleAngle - partial * this.tumbling; + if (angle > 360F) + { + this.tumbleAngle -= 360F; + angle -= 360F; + } + if (angle < 0F) + { + this.tumbleAngle += 360F; + angle += 360F; + } + return angle; + } + + @Override + public float getTumbleAxisX() + { + double velocity2 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if (velocity2 == 0D) + return 1F; + return (float) (this.motionZ / MathHelper.sqrt(velocity2)); + } + + @Override + public float getTumbleAxisZ() + { + double velocity2 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if (velocity2 == 0D) + return 0F; + return (float) (this.motionX / MathHelper.sqrt(velocity2)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSpider.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSpider.java new file mode 100644 index 00000000..d6f42cb3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedSpider.java @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class EntityEvolvedSpider extends EntitySpider implements IEntityBreathable +{ + + public EntityEvolvedSpider(World par1World) + { + super(par1World); + this.setSize(1.5F, 1.0F); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(22.0D); + double difficulty = 0; + switch (this.world.getDifficulty()) + { + case HARD: + difficulty = 2D; + break; + case NORMAL: + difficulty = 1D; + break; + default: + break; + } + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.3 + 0.05 * difficulty); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(2D + difficulty); + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + + // onInitialSpawn is called for EntitySpider, which has a chance of + // adding a vanilla skeleton, remove these + for (Entity entity : getPassengers()) + { + entity.dismountRidingEntity(); + if (!(entity instanceof EntitySkeleton)) + { + GalacticraftCore.logger.error("Removed unexpected passenger from spider: " + entity); + } else + { + entity.setDead(); + } + } + + if (this.world.rand.nextInt(100) == 0) + { + EntityEvolvedSkeleton entityskeleton = new EntityEvolvedSkeleton(this.world); + entityskeleton.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + entityskeleton.onInitialSpawn(difficulty, (IEntityLivingData) null); + this.world.spawnEntity(entityskeleton); + entityskeleton.startRiding(this); + } + + if (livingdata == null) + { + livingdata = new EntitySpider.GroupData(); + + if (this.world.getDifficulty() == EnumDifficulty.HARD && this.world.rand.nextFloat() < 0.1F * difficulty.getClampedAdditionalDifficulty()) + { + ((EntitySpider.GroupData) livingdata).setRandomEffect(this.world.rand); + } + } + + if (livingdata instanceof EntitySpider.GroupData) + { + Potion potion = ((EntitySpider.GroupData) livingdata).effect; + + if (potion != null) + { + this.addPotionEffect(new PotionEffect(potion, Integer.MAX_VALUE)); + } + } + + return livingdata; + } + + @Override + protected void jump() + { + this.motionY = 0.52D / WorldUtil.getGravityFactor(this); + + if (this.motionY < 0.26D) + { + this.motionY = 0.26D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(14)) + { + case 0: + case 1: + case 2: + this.dropItem(GCItems.cheeseCurd, 1); + break; + case 3: + case 4: + case 5: + this.dropItem(Items.FERMENTED_SPIDER_EYE, 1); + break; + case 6: + case 7: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 8: + this.dropItem(GCItems.oxygenGear, 1); + break; + case 9: + this.dropItem(GCItems.oxygenConcentrator, 1); + break; + default: + if (ConfigManagerCore.challengeMobDropsAndSpawning) + { + this.dropItem(Items.NETHER_WART, 1); + } + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + super.dropLoot(wasRecentlyHit, lootingModifier > 1 ? lootingModifier - 1 : 0, source); + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.02F) + { + this.addRandomDrop(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedWitch.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedWitch.java new file mode 100644 index 00000000..da0c2bc8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedWitch.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.GCItems; + +public class EntityEvolvedWitch extends EntityWitch implements IEntityBreathable +{ + + public EntityEvolvedWitch(World world) + { + super(world); + } + + @Override + public boolean canBreath() + { + return true; + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(10)) + { + case 0: + case 1: + case 9: + // Dehydrated carrot + this.entityDropItem(new ItemStack(GCItems.foodItem, 1, 1), 0.0F); + break; + case 2: + case 3: + this.entityDropItem(new ItemStack(Blocks.GLOWSTONE, 1), 0.0F); + break; + case 4: + case 5: + this.entityDropItem(new ItemStack(GCItems.basicItem, 1, 20), 0.0F); + break; + case 6: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankHeavy, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 7: + this.dropItem(GCItems.oxMask, 1); + break; + case 8: + this.dropItem(GCItems.oxygenVent, 1); + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + super.dropLoot(wasRecentlyHit, lootingModifier, source); + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.015F) + { + this.addRandomDrop(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedZombie.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedZombie.java new file mode 100644 index 00000000..29e5b549 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityEvolvedZombie.java @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +public class EntityEvolvedZombie extends EntityZombie implements IEntityBreathable, ITumblable +{ + + private static final DataParameter SPIN_PITCH = EntityDataManager.createKey(EntityEvolvedZombie.class, DataSerializers.FLOAT); + private int conversionTime = 0; + private float tumbling = 0F; + private float tumbleAngle = 0F; + + public EntityEvolvedZombie(World par1World) + { + super(par1World); + this.setSize(0.6F, 1.95F); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D); + double difficulty = 0; + switch (this.world.getDifficulty()) + { + case HARD: + difficulty = 2D; + break; + case NORMAL: + difficulty = 1D; + break; + } + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.26D + 0.04D * difficulty); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(3D + difficulty); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(16D + difficulty * 2D); + } + + @Override + public boolean canBreath() + { + return true; + } + + public IAttribute getReinforcementsAttribute() + { + return EntityZombie.SPAWN_REINFORCEMENTS_CHANCE; + } + + @Override + protected void jump() + { + this.motionY = 0.48D / WorldUtil.getGravityFactor(this); + if (this.motionY < 0.24D) + { + this.motionY = 0.24D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } + + protected void addRandomDrop() + { + switch (this.rand.nextInt(16)) + { + case 0: + case 1: + case 2: + // Dehydrated carrot + this.entityDropItem(new ItemStack(GCItems.foodItem, 1, 1), 0.0F); + break; + case 3: + case 4: + this.dropItem(GCItems.meteoricIronRaw, 1); + break; + case 5: + case 6: + // Dehydrated potato + this.entityDropItem(new ItemStack(GCItems.foodItem, 1, 3), 0.0F); + break; + case 7: + case 8: + // Oxygen tank half empty or less + this.entityDropItem(new ItemStack(GCItems.oxTankMedium, 1, 901 + this.rand.nextInt(900)), 0.0F); + break; + case 9: + this.dropItem(GCItems.oxMask, 1); + break; + case 10: + this.dropItem(GCItems.oxygenVent, 1); + break; + case 11: + case 12: + this.dropItem(Items.CARROT, 1); + break; + case 13: + case 14: + case 15: + if (ConfigManagerCore.challengeMobDropsAndSpawning) + this.dropItem(Items.MELON_SEEDS, 1); + break; + } + } + + @Override + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + // No loot table + this.dropFewItems(wasRecentlyHit, lootingModifier); + this.dropEquipment(wasRecentlyHit, lootingModifier); + } + + @Override + protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) + { + Item item = Items.ROTTEN_FLESH; + + // Less rotten flesh than vanilla + int j = this.rand.nextInt(2); + + if (item != null) + { + if (lootingModifier > 0) + { + j += this.rand.nextInt(lootingModifier + 1); + } + + for (int k = 0; k < j; ++k) + { + this.dropItem(item, 1); + } + } + + // Drop copper ingot as semi-rare drop if player hit and if dropping + // rotten flesh (50% chance) + if (wasRecentlyHit && (ConfigManagerCore.challengeMobDropsAndSpawning) && j > 0 && this.rand.nextInt(6) <= (lootingModifier + 1) / 2) + this.entityDropItem(new ItemStack(GCItems.basicItem, 1, 3), 0.0F); + + if (wasRecentlyHit && this.rand.nextFloat() < 0.025F + (float) lootingModifier * 0.02F) + { + this.addRandomDrop(); + } + } + + @Override + public void setTumbling(float value) + { + if (value != 0F) + { + if (this.tumbling == 0F) + this.tumbling = (this.world.rand.nextFloat() + 0.5F) * value; + } else + this.tumbling = 0F; + } + + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + if (!this.isDead) + { + if (this.tumbling != 0F) + { + if (this.onGround) + { + this.tumbling = 0F; + } + } + + if (!this.world.isRemote) + { + this.setSpinPitch(this.tumbling); + } else + { + this.tumbling = this.getSpinPitch(); + this.tumbleAngle -= this.tumbling; + if (this.tumbling == 0F && this.tumbleAngle != 0F) + { + this.tumbleAngle *= 0.8F; + if (Math.abs(this.tumbleAngle) < 1F) + this.tumbleAngle = 0F; + } + } + } + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.getDataManager().register(SPIN_PITCH, 0.0F); + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + this.tumbling = nbt.getFloat("tumbling"); + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + nbt.setFloat("tumbling", this.tumbling); + } + + public float getSpinPitch() + { + return this.getDataManager().get(SPIN_PITCH); + } + + public void setSpinPitch(float pitch) + { + this.getDataManager().set(SPIN_PITCH, pitch); + } + + @Override + public float getTumbleAngle(float partial) + { + float angle = this.tumbleAngle - partial * this.tumbling; + if (angle > 360F) + { + this.tumbleAngle -= 360F; + angle -= 360F; + } + if (angle < 0F) + { + this.tumbleAngle += 360F; + angle += 360F; + } + return angle; + } + + @Override + public float getTumbleAxisX() + { + double velocity2 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if (velocity2 == 0D) + return 1F; + return (float) (this.motionZ / MathHelper.sqrt(velocity2)); + } + + @Override + public float getTumbleAxisZ() + { + double velocity2 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if (velocity2 == 0D) + return 0F; + return (float) (this.motionX / MathHelper.sqrt(velocity2)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityFlag.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityFlag.java new file mode 100644 index 00000000..c80bc720 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityFlag.java @@ -0,0 +1,270 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFence; +import net.minecraft.block.SoundType; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; + +public class EntityFlag extends Entity +{ + + private static final DataParameter OWNER = EntityDataManager.createKey(EntityFlag.class, DataSerializers.STRING); + private static final DataParameter DAMAGE = EntityDataManager.createKey(EntityFlag.class, DataSerializers.FLOAT); + private static final DataParameter TYPE = EntityDataManager.createKey(EntityFlag.class, DataSerializers.VARINT); + private static final DataParameter FACING_ANGLE = EntityDataManager.createKey(EntityFlag.class, DataSerializers.VARINT); + public double xPosition; + public double yPosition; + public double zPosition; + public boolean indestructable = false; + public FlagData flagData; + + public EntityFlag(World world) + { + super(world); + this.setSize(0.4F, 3F); + this.ignoreFrustumCheck = true; + } + + public EntityFlag(World par1World, double x, double y, double z, int dir) + { + this(par1World); + this.setFacingAngle(dir); + this.setPosition(x, y, z); + this.xPosition = x; + this.yPosition = y; + this.zPosition = z; + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + Entity e = par1DamageSource.getTrueSource(); + boolean flag = e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode; + + if (!this.world.isRemote && !this.isDead && !this.indestructable) + { + if (this.isEntityInvulnerable(par1DamageSource)) + { + return false; + } else + { + this.markVelocityChanged(); + this.setDamage(this.getDamage() + par2 * 10); + this.world.playSound(null, this.posX, this.posY, this.posZ, SoundType.METAL.getBreakSound(), SoundCategory.BLOCKS, SoundType.METAL.getVolume(), SoundType.METAL.getPitch() + 1.0F); + + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + this.setDamage(100.0F); + } + + if (flag || this.getDamage() > 40) + { + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + if (flag) + { + this.setDead(); + } else + { + this.setDead(); + this.dropItemStack(); + } + } + + return true; + } + } else + { + return true; + } + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(GCItems.flag, 1, this.getType()); + } + + public int getWidth() + { + return 25; + } + + public int getHeight() + { + return 40; + } + + @Override + public boolean canBeCollidedWith() + { + return true; + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return par1Entity.getCollisionBoundingBox(); + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + protected void entityInit() + { + this.dataManager.register(OWNER, ""); + this.dataManager.register(DAMAGE, 0.0F); + this.dataManager.register(TYPE, -1); + this.dataManager.register(FACING_ANGLE, -1); + } + + @Override + public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + this.setOwner(par1NBTTagCompound.getString("Owner")); + this.setType(par1NBTTagCompound.getInteger("Type")); + this.indestructable = par1NBTTagCompound.getBoolean("Indestructable"); + + this.xPosition = par1NBTTagCompound.getDouble("TileX"); + this.yPosition = par1NBTTagCompound.getDouble("TileY"); + this.zPosition = par1NBTTagCompound.getDouble("TileZ"); + this.setFacingAngle(par1NBTTagCompound.getInteger("AngleI")); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + par1NBTTagCompound.setString("Owner", String.valueOf(this.getOwner())); + par1NBTTagCompound.setInteger("Type", Integer.valueOf(this.getType())); + par1NBTTagCompound.setBoolean("Indestructable", this.indestructable); + par1NBTTagCompound.setInteger("AngleI", this.getFacingAngle()); + par1NBTTagCompound.setDouble("TileX", this.xPosition); + par1NBTTagCompound.setDouble("TileY", this.yPosition); + par1NBTTagCompound.setDouble("TileZ", this.zPosition); + } + + public void dropItemStack() + { + this.entityDropItem(new ItemStack(GCItems.flag, 1, this.getType()), 0.0F); + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if ((this.ticksExisted - 1) % 20 == 0 && this.world.isRemote) + { + this.flagData = ClientUtil.updateFlagData(this.getOwner(), Minecraft.getMinecraft().player.getDistance(this) < 50.0D); + } + + Vector3 vec = new Vector3(this.posX, this.posY, this.posZ); + vec = vec.translate(new Vector3(0, -1, 0)); + final Block blockAt = vec.getBlock(this.world); + + if (blockAt != null) + { + BlockPos pos = new BlockPos(vec.intX(), vec.intY(), vec.intZ()); + if (blockAt instanceof BlockFence) + { + + } else if (blockAt.isAir(this.world.getBlockState(pos), this.world, pos)) + { + this.motionY -= 0.02F; + } + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (!this.world.isRemote) + { + this.setFacingAngle(this.getFacingAngle() + 3); + } + + return true; + } + + public void setOwner(String par1) + { + this.dataManager.set(OWNER, String.valueOf(par1)); + } + + public String getOwner() + { + return this.dataManager.get(OWNER); + } + + public void setDamage(float par1) + { + this.dataManager.set(DAMAGE, Float.valueOf(par1)); + } + + public float getDamage() + { + return this.dataManager.get(DAMAGE); + } + + public void setType(int par1) + { + this.dataManager.set(TYPE, Integer.valueOf(par1)); + } + + public int getType() + { + return this.dataManager.get(TYPE); + } + + public void setFacingAngle(int par1) + { + this.dataManager.set(FACING_ANGLE, Integer.valueOf(par1)); + } + + public int getFacingAngle() + { + return this.dataManager.get(FACING_ANGLE); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityHangingSchematic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityHangingSchematic.java new file mode 100644 index 00000000..8c4e5fa6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityHangingSchematic.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityHanging; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class EntityHangingSchematic extends EntityHanging +{ + + public int schematic; + private boolean sendToClient; + + public EntityHangingSchematic(World worldIn) + { + super(worldIn); + } + + public EntityHangingSchematic(World worldIn, BlockPos pos, EnumFacing facing, int meta) + { + super(worldIn, pos); + this.schematic = meta; + this.updateFacingWithBoundingBox(facing); + } + + private int tickCounter1; + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.sendToClient) + { + this.sendToClient = false; + this.sendToClient(this.world, this.hangingPosition); + } + + if (this.tickCounter1++ == 10) + { + this.tickCounter1 = 0; + + if (!this.world.isRemote && !this.isDead && !this.onValidSurface()) + { + this.setDead(); + this.onBroken((Entity) null); + } + } + } + + @Override + public void setDead() + { + super.setDead(); + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + tagCompound.setInteger("schem", this.schematic); + super.writeEntityToNBT(tagCompound); + } + + @Override + public void readEntityFromNBT(NBTTagCompound tag) + { + this.schematic = tag.getInteger("schem"); + super.readEntityFromNBT(tag); + this.setSendToClient(); + } + + @Override + public int getWidthPixels() + { + return 32; + } + + @Override + public int getHeightPixels() + { + return 32; + } + + @Override + public void onBroken(Entity brokenEntity) + { + if (this.world.getGameRules().getBoolean("doEntityDrops")) + { + if (brokenEntity instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer) brokenEntity; + + if (entityplayer.capabilities.isCreativeMode) + { + return; + } + } + + this.entityDropItem(SchematicRegistry.getSchematicItem(this.schematic), 0.0F); + } + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return SchematicRegistry.getSchematicItem(this.schematic); + } + + @Override + public void setLocationAndAngles(double x, double y, double z, float yaw, float pitch) + { + BlockPos blockpos = this.hangingPosition.add(x - this.posX, y - this.posY, z - this.posZ); + this.setPosition((double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ()); + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + } + + public void sendToClient(World worldIn, BlockPos blockpos) + { + int dimID = GCCoreUtil.getDimensionID(worldIn); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_HANGING_SCHEMATIC, dimID, new Object[] + {blockpos, this.getEntityId(), this.facingDirection.ordinal(), this.schematic}), worldIn, dimID, blockpos, 150D); + } + + public void setSendToClient() + { + this.sendToClient = true; + } + + @Override + public void playPlaceSound() + { + this.playSound(SoundEvents.ENTITY_PAINTING_PLACE, 1.0F, 1.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLander.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLander.java new file mode 100644 index 00000000..f67530d8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLander.java @@ -0,0 +1,325 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.fx.ParticleLanderFlame; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class EntityLander extends EntityLanderBase implements IIgnoreShift, ICameraZoomEntity +{ + + private double lastMotionY; + + public EntityLander(World world) + { + super(world); + this.setSize(3.0F, 4.25F); + } + + public EntityLander(EntityPlayerMP player) + { + super(player, 0.0F); + } + + @Override + public double getMountedYOffset() + { + return 2.25; + } + + @Override + public float getRotateOffset() + { + return +0.0F; + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + this.lastMotionY = this.motionY; + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + + this.lastMotionY = this.motionY; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.lander.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (!this.onGround) + { + return false; + } + + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + return true; + } + + if (this.getPassengers().isEmpty() && player instanceof EntityPlayerMP) + { + GCCoreUtil.openParachestInv((EntityPlayerMP) player, this); + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + return true; + } else + { + return true; + } + } + + @Override + public boolean pressKey(int key) + { + if (this.onGround) + { + return false; + } + + float turnFactor = 2.0F; + float angle = 45; + + switch (key) + { + case 0: + this.rotationPitch = Math.min(Math.max(this.rotationPitch - 0.5F * turnFactor, -angle), angle); + return true; + case 1: + this.rotationPitch = Math.min(Math.max(this.rotationPitch + 0.5F * turnFactor, -angle), angle); + return true; + case 2: + this.rotationYaw -= 0.5F * turnFactor; + return true; + case 3: + this.rotationYaw += 0.5F * turnFactor; + return true; + case 4: + this.motionY = Math.min(this.motionY + 0.03F, this.posY < 90 ? -0.15 : -1.0); + return true; + case 5: + this.motionY = Math.min(this.motionY - 0.022F, -1.0); + return true; + } + + return false; + } + + @Override + public boolean shouldSpawnParticles() + { + return this.ticks > 40 && this.rotationPitch != 0.0000001F; + } + + @Override + public Map getParticleMap() + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + final double x1 = 4 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + final double z1 = 4 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + final double y1 = -4 * Math.abs(Math.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D)); + + new Vector3(this); + + final Map particleMap = new HashMap(); + particleMap.put(new Vector3(this.posX, this.posY + 1D + this.motionY / 2, this.posZ), new Vector3(x1, y1 + this.motionY / 2, z1)); + return particleMap; + } + + @SideOnly(Side.CLIENT) + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + EntityLivingBase passenger = this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof EntityLivingBase) ? null : (EntityLivingBase) this.getPassengers().get(0); + return new ParticleLanderFlame(this.world, x, y, z, motX, motY, motZ, passenger); + } + + @Override + public void tickInAir() + { + super.tickInAir(); + + if (this.world.isRemote) + { + if (!this.onGround) + { + this.motionY -= 0.008D; + } + + double motY = -1 * Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double motX = Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * motY; + double motZ = Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * motY; + this.motionX = motX / 2.0F; + this.motionZ = motZ / 2.0F; + } + } + + @Override + public void tickOnGround() + { + // Signal switch off flames + this.rotationPitch = 0.0000001F; + } + + @Override + public void onGroundHit() + { + if (!this.world.isRemote) + { + if (Math.abs(this.lastMotionY) > 2.0D) + { + for (Entity entity : this.getPassengers()) + { + entity.dismountRidingEntity(); + if (entity instanceof EntityPlayerMP) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(this.world), new Object[] + {}), (EntityPlayerMP) entity); + } + entity.motionX = 0; + entity.motionY = 0; + entity.motionZ = 0; + entity.setPosition(entity.posX, this.posY + this.getMountedYOffset(), entity.posZ); + this.world.updateEntityWithOptionalForce(entity, false); + } + this.world.createExplosion(this, this.posX, this.posY, this.posZ, 12, true); + + this.setDead(); + } + } + } + + @Override + public Vector3 getMotionVec() + { + if (this.onGround) + { + return new Vector3(0, 0, 0); + } + + if (this.ticks >= 40 && this.ticks < 45) + { + this.motionY = this.getInitialMotionY(); + } + + return new Vector3(this.motionX, this.ticks < 40 ? 0 : this.motionY, this.motionZ); + } + + @Override + public float getCameraZoom() + { + return 15; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return !this.onGround; + } + + @Override + public double getInitialMotionY() + { + return -2.5D; + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return null; + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLanderBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLanderBase.java new file mode 100644 index 00000000..6e71eb89 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityLanderBase.java @@ -0,0 +1,534 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.network.PacketDynamicInventory; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +import io.netty.buffer.ByteBuf; + +public abstract class EntityLanderBase extends EntityAdvancedMotion implements IInventorySettable, IScaleableFuelLevel +{ + + private final int FUEL_TANK_CAPACITY = 5000; + public FluidTank fuelTank = new FluidTank(this.FUEL_TANK_CAPACITY); + protected boolean hasReceivedPacket; + private boolean lastShouldMove; + private UUID persistantRiderUUID; + private Boolean shouldMoveClient; + private Boolean shouldMoveServer; + private ArrayList prevData; + private boolean networkDataChanged; + private boolean syncAdjustFlag = true; + + public EntityLanderBase(World var1) + { + super(var1); + this.setSize(3.0F, 3.0F); + } + + @Override + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + passenger.setPosition(this.posX, this.posY + this.getMountedYOffset() + passenger.getYOffset(), this.posZ); + } + } + + @Override + public boolean shouldSendAdvancedMotionPacket() + { + return this.shouldMoveClient != null && this.shouldMoveServer != null; + } + + @Override + public boolean canSetPositionClient() + { + return this.shouldSendAdvancedMotionPacket(); + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + super.setPositionAndRotationDirect(x, y, z, yaw, pitch, posRotationIncrements, b); + if (this.syncAdjustFlag && this.world.isBlockLoaded(new BlockPos(x, 255D, z))) + { + EntityPlayer p = FMLClientHandler.instance().getClientPlayerEntity(); + double dx = x - p.posX; + double dz = z - p.posZ; + if (dx * dx + dz * dz < 1024) + { + if (!this.world.loadedEntityList.contains(this)) + { + try + { + this.world.loadedEntityList.add(this); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.posX = x; + this.posY = y; + this.posZ = z; + + int cx = MathHelper.floor(x / 16.0D); + int cz = MathHelper.floor(z / 16.0D); + + if (!this.addedToChunk || this.chunkCoordX != cx || this.chunkCoordZ != cz) + { + if (this.addedToChunk && this.world.isBlockLoaded(new BlockPos(this.chunkCoordX << 4, 255, this.chunkCoordZ << 4), true)) + { + this.world.getChunk(this.chunkCoordX, this.chunkCoordZ).removeEntityAtIndex(this, this.chunkCoordY); + } + + this.addedToChunk = true; + this.world.getChunk(cx, cz).addEntity(this); + } + + this.syncAdjustFlag = false; + } + } + } + + @Override + public int getScaledFuelLevel(int i) + { + final double fuelLevel = this.fuelTank.getFluid() == null ? 0 : this.fuelTank.getFluid().amount; + + return (int) (fuelLevel * i / this.FUEL_TANK_CAPACITY); + } + + public EntityLanderBase(World var1, double var2, double var4, double var6, float yOffset) + { + this(var1); + this.setPosition(var2, var4, var6); + } + + public EntityLanderBase(EntityPlayerMP player, float yOffset) + { + this(player.world, player.posX, player.posY, player.posZ, yOffset); + + GCPlayerStats stats = GCPlayerStats.get(player); + this.stacks = NonNullList.withSize(stats.getRocketStacks().size() + 1, ItemStack.EMPTY); + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, stats.getFuelLevel())); + + for (int i = 0; i < stats.getRocketStacks().size(); i++) + { + if (!stats.getRocketStacks().get(i).isEmpty()) + { + this.stacks.set(i, stats.getRocketStacks().get(i).copy()); + } else + { + this.stacks.get(i).setCount(0); + } + } + + this.setPositionAndRotation(player.posX, player.posY, player.posZ, 0, 0); + + player.startRiding(this, true); + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (this.ticks < 40 && this.posY > 150) + { + if (this.getPassengers().isEmpty()) + { + final EntityPlayer player = this.world.getClosestPlayerToEntity(this, 5); + + if (player != null && player.getRidingEntity() == null) + { + player.startRiding(this); + } + } + } + + if (!this.world.isRemote) + { + this.checkFluidTankTransfer(this.stacks.size() - 1, this.fuelTank); + } + + AxisAlignedBB box = this.getEntityBoundingBox().grow(0.2D, 0.4D, 0.2D); + + final List var15 = this.world.getEntitiesWithinAABBExcludingEntity(this, box); + + if (var15 != null && !var15.isEmpty()) + { + for (Entity entity : var15) + { + if (!this.getPassengers().contains(entity)) + { + this.pushEntityAway(entity); + } + } + } + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + FluidUtil.tryFillContainerFuel(tank, this.stacks, slot); + } + + private void pushEntityAway(Entity entityToPush) + { + if (!this.getPassengers().contains(entityToPush) && this.getRidingEntity() != entityToPush) + { + double d0 = this.posX - entityToPush.posX; + double d1 = this.posZ - entityToPush.posZ; + double d2 = MathHelper.absMax(d0, d1); + + if (d2 >= 0.009999999776482582D) + { + d2 = MathHelper.sqrt(d2); + d0 /= d2; + d1 /= d2; + double d3 = 1.0D / d2; + + if (d3 > 1.0D) + { + d3 = 1.0D; + } + + d0 *= d3; + d1 *= d3; + d0 *= 0.05000000074505806D; + d1 *= 0.05000000074505806D; + d0 *= 1.0F - entityToPush.entityCollisionReduction; + d1 *= 1.0F - entityToPush.entityCollisionReduction; + entityToPush.addVelocity(-d0, 0.0D, -d1); + } + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + int invSize = nbt.getInteger("rocketStacksLength"); + if (invSize < 3) + { + invSize = 3; + } + this.stacks = NonNullList.withSize(invSize, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.stacks); + + if (nbt.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + + if (nbt.hasKey("RiderUUID_LSB")) + { + this.persistantRiderUUID = new UUID(nbt.getLong("RiderUUID_LSB"), nbt.getLong("RiderUUID_MSB")); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("rocketStacksLength", this.stacks.size()); + + ItemStackHelper.saveAllItems(nbt, this.stacks); + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + + UUID id = this.getOwnerUUID(); + + if (id != null) + { + nbt.setLong("RiderUUID_LSB", id.getLeastSignificantBits()); + nbt.setLong("RiderUUID_MSB", id.getMostSignificantBits()); + } + } + + @Override + public boolean shouldMove() + { + if (this.shouldMoveClient == null || this.shouldMoveServer == null) + { + return false; + } + + if (this.ticks < 40) + { + return false; + } + + return !this.onGround; + } + + public abstract double getInitialMotionY(); + + @Override + public void tickInAir() + { + if (this.world.isRemote) + { + if (!this.shouldMove()) + { + this.motionY = this.motionX = this.motionZ = 0.0F; + } + + if (this.shouldMove() && !this.lastShouldMove) + { + this.motionY = this.getInitialMotionY(); + } + + this.lastShouldMove = this.shouldMove(); + } + } + + @Override + public ArrayList getNetworkedData() + { + final ArrayList objList = new ArrayList(); + + if (!this.world.isRemote) + { + Integer cargoLength = this.stacks != null ? this.stacks.size() : 0; + objList.add(cargoLength); + objList.add(this.fuelTank.getFluid() == null ? 0 : this.fuelTank.getFluid().amount); + } + + if (this.world.isRemote) + { + this.shouldMoveClient = this.shouldMove(); + objList.add(this.shouldMoveClient); + } else + { + this.shouldMoveServer = this.shouldMove(); + objList.add(this.shouldMoveServer); + // Server send rider information for client to check + objList.add(this.getPassengers().isEmpty() ? -1 : this.getPassengers().get(0).getEntityId()); + } + + this.networkDataChanged = !objList.equals(this.prevData); + this.prevData = objList; + return objList; + } + + @Override + public boolean networkedDataChanged() + { + return this.networkDataChanged || this.shouldMoveClient == null || this.shouldMoveServer == null; + } + + @Override + public boolean canRiderInteract() + { + return true; + } + + @Override + public int getPacketTickSpacing() + { + return 2; + } + + @Override + public double getPacketSendDistance() + { + return 250.0D; + } + + @Override + public void readNetworkedData(ByteBuf buffer) + { + try + { + if (this.world.isRemote) + { + if (!this.hasReceivedPacket) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + this.hasReceivedPacket = true; + } + + int cargoLength = buffer.readInt(); + if (this.stacks == null || this.stacks.isEmpty()) + { + this.stacks = NonNullList.withSize(cargoLength, ItemStack.EMPTY); + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamicInventory(this)); + } + + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, buffer.readInt())); + + this.shouldMoveServer = buffer.readBoolean(); + + // Check has correct rider on client + int shouldBeMountedId = buffer.readInt(); + if (this.getPassengers().isEmpty()) + { + if (shouldBeMountedId > -1) + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + if (e.dimension != this.dimension) + { + if (e instanceof EntityPlayer) + { + e = WorldUtil.forceRespawnClient(this.dimension, e.world.getDifficulty().getId(), e.world.getWorldInfo().getTerrainType().getName(), + ((EntityPlayerMP) e).interactionManager.getGameType().getID()); + e.startRiding(this); + this.syncAdjustFlag = true; + } + } else + { + e.startRiding(this); + this.syncAdjustFlag = true; + } + } + } + } else if (this.getPassengers().get(0).getEntityId() != shouldBeMountedId) + { + if (shouldBeMountedId == -1) + { + this.removePassengers(); + } else + { + Entity e = FMLClientHandler.instance().getWorldClient().getEntityByID(shouldBeMountedId); + if (e != null) + { + if (e.dimension != this.dimension) + { + if (e instanceof EntityPlayer) + { + e = WorldUtil.forceRespawnClient(this.dimension, e.world.getDifficulty().getId(), e.world.getWorldInfo().getTerrainType().getName(), + ((EntityPlayerMP) e).interactionManager.getGameType().getID()); + e.startRiding(this, true); + this.syncAdjustFlag = true; + } + } else + { + e.startRiding(this, true); + this.syncAdjustFlag = true; + } + } + } + } + } else + { + this.shouldMoveClient = buffer.readBoolean(); + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + @Override + public boolean allowDamageSource(DamageSource damageSource) + { + return !damageSource.isExplosion(); + } + + @Override + public List getItemsDropped() + { + return this.stacks; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public void setSizeInventory(int size) + { + this.stacks = NonNullList.withSize(size, ItemStack.EMPTY); + } + + @Override + public boolean isItemValidForSlot(int var1, ItemStack var2) + { + return false; + } + + @Override + public double getPacketRange() + { + return 50.0D; + } + + @Override + public UUID getOwnerUUID() + { + if (!this.getPassengers().isEmpty() && !(this.getPassengers().get(0) instanceof EntityPlayer)) + { + return null; + } + + UUID id; + + if (!this.getPassengers().isEmpty()) + { + id = this.getPassengers().get(0).getPersistentID(); + + this.persistantRiderUUID = id; + } else + { + id = this.persistantRiderUUID; + } + + return id; + } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double height = this.posY + (double) this.getEyeHeight(); + if (height > 255D) + height = 255D; + BlockPos blockpos = new BlockPos(this.posX, height, this.posZ); + return this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteor.java new file mode 100644 index 00000000..7c521a8f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteor.java @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.Iterator; +import java.util.List; + +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSourceIndirect; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.entity.ILaserTrackableFast; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class EntityMeteor extends Entity implements ILaserTrackableFast +{ + + private static final DataParameter SIZE = EntityDataManager.createKey(EntityMeteor.class, DataSerializers.VARINT); + public EntityLiving shootingEntity; + public int size; + + public EntityMeteor(World world) + { + super(world); + this.setSize(1.0F, 1.0F); + } + + public EntityMeteor(World world, double x, double y, double z, double motX, double motY, double motZ, int size) + { + this(world); + this.size = size; + this.setSize(1.0F, 1.0F); + this.setLocationAndAngles(x, y, z, this.rotationYaw, this.rotationPitch); + this.setPosition(x, y, z); + this.motionX = motX; + this.motionY = motY; + this.motionZ = motZ; + this.setSize(size); + } + + @Override + public void onUpdate() + { + this.setRotation(this.rotationYaw + 2F, this.rotationPitch + 2F); + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= 0.03999999910593033D; + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + + if (this.world.isRemote) + { + this.spawnParticles(); + } + + Vec3d currentPosition = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d nextPosition = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult collisionIntercept = this.world.rayTraceBlocks(currentPosition, nextPosition, true, true, false); + currentPosition = new Vec3d(this.posX, this.posY, this.posZ); + nextPosition = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (collisionIntercept != null) + { + nextPosition = new Vec3d(collisionIntercept.hitVec.x, collisionIntercept.hitVec.y, collisionIntercept.hitVec.z); + } + + Entity collidingEntity = null; + final List nearbyEntities = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(2.0D, 2.0D, 2.0D)); + double distanceToCollidingEntityIntercept = 0.0D; + final Iterator nearbyEntitiesIterator = nearbyEntities.iterator(); + final double entityBBPadding = 0.01D; + + while (nearbyEntitiesIterator.hasNext()) + { + final Entity nearbyEntity = (Entity) nearbyEntitiesIterator.next(); + + if (nearbyEntity.canBeCollidedWith() && !nearbyEntity.isEntityEqual(this.shootingEntity)) + { + final AxisAlignedBB nearbyEntityPaddedBB = nearbyEntity.getEntityBoundingBox().grow(entityBBPadding, entityBBPadding, entityBBPadding); + final RayTraceResult nearbyEntityIntercept = nearbyEntityPaddedBB.calculateIntercept(currentPosition, nextPosition); + + if (nearbyEntityIntercept != null) + { + final double distanceToNearbyEntityIntercept = currentPosition.distanceTo(nearbyEntityIntercept.hitVec); + + if (distanceToNearbyEntityIntercept < distanceToCollidingEntityIntercept || distanceToCollidingEntityIntercept == 0.0D) + { + collidingEntity = nearbyEntity; + distanceToCollidingEntityIntercept = distanceToNearbyEntityIntercept; + } + } + } + } + + if (collidingEntity != null) + { + collisionIntercept = new RayTraceResult(collidingEntity); + } + + if (collisionIntercept != null) + { + this.onImpact(collisionIntercept); + } + + if (this.posY <= -20 || this.posY >= 400) + { + this.setDead(); + } + } + + protected void spawnParticles() + { + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX, this.posY + 1D + Math.random(), this.posZ), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX + Math.random() / 2, this.posY + 1D + Math.random() / 2, this.posZ), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX, this.posY + 1D + Math.random(), this.posZ + Math.random()), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX - Math.random() / 2, this.posY + 1D + Math.random() / 2, this.posZ), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + GalacticraftCore.proxy.spawnParticle("distanceSmoke", new Vector3(this.posX, this.posY + 1D + Math.random(), this.posZ - Math.random()), new Vector3(0.0D, 0.0D, 0.0D), new Object[] + {}); + } + + protected void onImpact(RayTraceResult movingObjPos) + { + if (!this.world.isRemote) + { + this.world.newExplosion(this, this.posX, this.posY, this.posZ, this.size / 3 + 2, false, true); + + if (movingObjPos != null) + { + BlockPos pos = movingObjPos.getBlockPos(); + if (pos == null) + { + if (movingObjPos.entityHit != null) + { + pos = this.world.getTopSolidOrLiquidBlock(movingObjPos.entityHit.getPosition()); + } else + { + pos = this.world.getTopSolidOrLiquidBlock(this.getPosition()); + } + } + BlockPos above = pos.up(); + if (this.world.getBlockState(above).getBlock() instanceof BlockAir) + { + this.world.setBlockState(above, GCBlocks.fallenMeteor.getDefaultState(), 3); + } + + if (movingObjPos.entityHit != null) + { + movingObjPos.entityHit.attackEntityFrom(EntityMeteor.causeMeteorDamage(this, this.shootingEntity), ConfigManagerCore.hardMode ? 12F : 6F); + } + } + } + + this.setDead(); + } + + @Override + public boolean canExplosionDestroyBlock(Explosion explosionIn, World worldIn, BlockPos pos, IBlockState blockStateIn, float p_174816_5_) + { + return ConfigManagerCore.meteorBlockDamageEnabled; + } + + public static DamageSource causeMeteorDamage(EntityMeteor par0EntityMeteor, Entity par1Entity) + { + if (par1Entity != null && par1Entity instanceof EntityPlayer) + { + I18n.translateToLocalFormatted("death." + "meteor", PlayerUtil.getName(((EntityPlayer) par1Entity)) + " was hit by a meteor! That's gotta hurt!"); + } + return new EntityDamageSourceIndirect("explosion", par0EntityMeteor, par1Entity).setProjectile(); + } + + @Override + protected void entityInit() + { + this.dataManager.register(SIZE, this.size); + this.noClip = true; + } + + public int getSize() + { + return this.dataManager.get(SIZE); + } + + /** + * Sets the state of creeper, -1 to idle and 1 to be 'in fuse' + */ + public void setSize(int par1) + { + this.dataManager.set(SIZE, Integer.valueOf(par1)); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound compound) + { + } + + @Override + protected void writeEntityToNBT(NBTTagCompound compound) + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteorChunk.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteorChunk.java new file mode 100644 index 00000000..fb725926 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityMeteorChunk.java @@ -0,0 +1,464 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSourceIndirect; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class EntityMeteorChunk extends Entity implements IProjectile +{ + + private static final DataParameter IS_HOT = EntityDataManager.createKey(EntityMeteorChunk.class, DataSerializers.BOOLEAN); + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private Block inTile; + private int inData; + + public int canBePickedUp; + public Entity shootingEntity; + private int ticksInGround; + private int ticksInAir; + private boolean inGround; + private float randYawInc; + private float randPitchInc; + + private int knockbackStrength; + + public boolean isHot; + + public EntityMeteorChunk(World world) + { + super(world); + this.setSize(0.25F, 0.25F); + this.randPitchInc = rand.nextFloat() * 20 - 10; + this.randYawInc = rand.nextFloat() * 20 - 10; + } + + public EntityMeteorChunk(World par1World, EntityLivingBase par2EntityLivingBase, float speed) + { + super(par1World); + this.randPitchInc = rand.nextFloat() * 20 - 10; + this.randYawInc = rand.nextFloat() * 20 - 10; + this.shootingEntity = par2EntityLivingBase; + + if (par2EntityLivingBase instanceof EntityPlayer) + { + this.canBePickedUp = 1; + } + + this.setSize(0.5F, 0.5F); + this.setLocationAndAngles(par2EntityLivingBase.posX, par2EntityLivingBase.posY + par2EntityLivingBase.getEyeHeight(), par2EntityLivingBase.posZ, par2EntityLivingBase.rotationYaw, + par2EntityLivingBase.rotationPitch); + this.posX -= MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * 0.16F; + this.posY -= 0.10000000149011612D; + this.posZ -= MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * 0.16F; + this.setPosition(this.posX, this.posY, this.posZ); + this.motionX = -MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.motionZ = MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.motionY = -MathHelper.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.shoot(this.motionX, this.motionY, this.motionZ, speed * 1.5F, 1.0F); + } + + @Override + public void shoot(double headingX, double headingY, double headingZ, float speed, float randMod) + { + float f2 = MathHelper.sqrt(headingX * headingX + headingY * headingY + headingZ * headingZ); + headingX /= f2; + headingY /= f2; + headingZ /= f2; + headingX += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * randMod; + headingY += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * randMod; + headingZ += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * randMod; + headingX *= speed; + headingY *= speed; + headingZ *= speed; + this.motionX = headingX; + this.motionY = headingY; + this.motionZ = headingZ; + float f3 = MathHelper.sqrt(headingX * headingX + headingZ * headingZ); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(headingX, headingZ) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(headingY, f3) * Constants.RADIANS_TO_DEGREES; + this.ticksInGround = 0; + } + + @Override + @SideOnly(Side.CLIENT) + public void setVelocity(double par1, double par3, double par5) + { + this.motionX = par1; + this.motionY = par3; + this.motionZ = par5; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(par1 * par1 + par5 * par5); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(par1, par5) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(par3, f) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.ticksInGround = 0; + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (this.ticksExisted > 400) + { + if (this.isHot) + { + this.isHot = false; + this.setHot(this.isHot); + } + } else if (!this.world.isRemote) + { + this.setHot(this.isHot); + } + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(this.motionY, f) * Constants.RADIANS_TO_DEGREES; + } + + BlockPos pos = new BlockPos(this.xTile, this.yTile, this.zTile); + IBlockState stateIn = this.world.getBlockState(pos); + + if (!stateIn.getBlock().isAir(this.world.getBlockState(pos), this.world, pos)) + { + AxisAlignedBB axisalignedbb = stateIn.getCollisionBoundingBox(this.world, pos); + + if (axisalignedbb != null && axisalignedbb.contains(new Vec3d(this.posX, this.posY, this.posZ))) + { + this.inGround = true; + } + } + + if (this.inGround) + { + Block j = this.world.getBlockState(pos).getBlock(); + int k = j.getMetaFromState(this.world.getBlockState(pos)); + + if (j == this.inTile && k == this.inData) + { + ++this.ticksInGround; + + if (this.ticksInGround == 1200) + { + this.setDead(); + } + } else + { + this.inGround = false; + this.motionX *= this.rand.nextFloat() * 0.2F; + this.motionY *= this.rand.nextFloat() * 0.2F; + this.motionZ *= this.rand.nextFloat() * 0.2F; + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } else + { + ++this.ticksInAir; + Vec3d vec3 = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec31 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult movingobjectposition = this.world.rayTraceBlocks(vec3, vec31, false, true, false); + vec3 = new Vec3d(this.posX, this.posY, this.posZ); + vec31 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (movingobjectposition != null) + { + vec31 = new Vec3d(movingobjectposition.hitVec.x, movingobjectposition.hitVec.y, movingobjectposition.hitVec.z); + } + + this.rotationPitch += 1F; + + Entity entity = null; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D, 1.0D, 1.0D)); + double d0 = 0.0D; + int l; + float f1; + final double border = 0.3D; + + for (l = 0; l < list.size(); ++l) + { + Entity entity1 = list.get(l); + + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) + { + AxisAlignedBB axisalignedbb1 = entity1.getEntityBoundingBox().grow(border, border, border); + RayTraceResult movingobjectposition1 = axisalignedbb1.calculateIntercept(vec3, vec31); + + if (movingobjectposition1 != null) + { + double d1 = vec3.distanceTo(movingobjectposition1.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) + { + movingobjectposition = new RayTraceResult(entity); + } + + if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer) movingobjectposition.entityHit; + + if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer) this.shootingEntity).canAttackPlayer(entityplayer)) + { + movingobjectposition = null; + } + } + + float f2; + float f3; + double damage = ConfigManagerCore.hardMode ? 3.2D : 1.6D; + + if (movingobjectposition != null) + { + if (movingobjectposition.entityHit != null) + { + f2 = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + int i1 = MathHelper.ceil(f2 * damage); + + DamageSource damagesource = null; + + if (this.shootingEntity == null) + { + damagesource = new EntityDamageSourceIndirect("meteor_chunk", this, this).setProjectile(); + } else + { + damagesource = new EntityDamageSourceIndirect("meteor_chunk", this, this.shootingEntity).setProjectile(); + } + + if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman)) + { + movingobjectposition.entityHit.setFire(2); + } + + if (movingobjectposition.entityHit.attackEntityFrom(damagesource, i1)) + { + if (movingobjectposition.entityHit instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase) movingobjectposition.entityHit; + + if (!this.world.isRemote) + { + entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1); + } + + if (this.knockbackStrength > 0) + { + f3 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (f3 > 0.0F) + { + movingobjectposition.entityHit.addVelocity(this.motionX * this.knockbackStrength * 0.6000000238418579D / f3, 0.1D, + this.motionZ * this.knockbackStrength * 0.6000000238418579D / f3); + } + } + + if (this.shootingEntity != null) + { + EnchantmentHelper.applyThornEnchantments(entitylivingbase, this.shootingEntity); + EnchantmentHelper.applyArthropodEnchantments((EntityLivingBase) this.shootingEntity, entitylivingbase); + } + + if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer + && this.shootingEntity instanceof EntityPlayerMP) + { + ((EntityPlayerMP) this.shootingEntity).connection.sendPacket(new SPacketChangeGameState(6, 0.0F)); + } + } + + if (!(movingobjectposition.entityHit instanceof EntityEnderman)) + { + this.setDead(); + } + } else + { + this.motionX *= -0.10000000149011612D; + this.motionY *= -0.10000000149011612D; + this.motionZ *= -0.10000000149011612D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } else + { + this.xTile = movingobjectposition.getBlockPos().getX(); + this.yTile = movingobjectposition.getBlockPos().getY(); + this.zTile = movingobjectposition.getBlockPos().getZ(); + IBlockState state = this.world.getBlockState(movingobjectposition.getBlockPos()); + this.inTile = state.getBlock(); + this.inData = this.inTile.getMetaFromState(state); + this.motionX = (float) (movingobjectposition.hitVec.x - this.posX); + this.motionY = (float) (movingobjectposition.hitVec.y - this.posY); + this.motionZ = (float) (movingobjectposition.hitVec.z - this.posZ); + f2 = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / f2 * 0.05000000074505806D; + this.posY -= this.motionY / f2 * 0.05000000074505806D; + this.posZ -= this.motionZ / f2 * 0.05000000074505806D; + this.inGround = true; + + IBlockState hitState = this.world.getBlockState(movingobjectposition.getBlockPos()); + if (!this.inTile.isAir(hitState, this.world, movingobjectposition.getBlockPos())) + { + this.inTile.onEntityCollision(this.world, movingobjectposition.getBlockPos(), hitState, this); + } + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + f2 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (!this.onGround) + { + this.rotationPitch += this.randPitchInc; + this.rotationYaw += this.randYawInc; + } + + float f4 = 0.99F; + f1 = 0.05F; + + if (this.isInWater()) + { + for (int j1 = 0; j1 < 4; ++j1) + { + f3 = 0.25F; + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * f3, this.posY - this.motionY * f3, this.posZ - this.motionZ * f3, this.motionX, this.motionY, + this.motionZ); + } + this.isHot = false; + f4 = 0.8F; + } + + this.motionX *= f4; + this.motionY *= f4; + this.motionZ *= f4; + this.motionY -= TransformerHooks.getGravityForEntity(this); + this.setPosition(this.posX, this.posY, this.posZ); + this.doBlockCollisions(); + } + } + + @Override + protected void entityInit() + { + this.dataManager.register(IS_HOT, false); + } + + public boolean isHot() + { + return this.dataManager.get(IS_HOT); + } + + public void setHot(boolean isHot) + { + this.dataManager.set(IS_HOT, isHot); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbttagcompound) + { + + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbttagcompound) + { + + } + + @Override + public void onCollideWithPlayer(EntityPlayer entityPlayer) + { + if (!this.world.isRemote && this.inGround) + { + boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && entityPlayer.capabilities.isCreativeMode; + + if (this.canBePickedUp == 1 && !entityPlayer.inventory.addItemStackToInventory(new ItemStack(GCItems.meteorChunk, 1, 0))) + { + flag = false; + } + + if (flag) + { + this.playSound(SoundEvents.ENTITY_ITEM_PICKUP, 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + entityPlayer.onItemPickup(this, 1); + this.setDead(); + } + } + } + + @Override + public boolean canBeAttackedWithItem() + { + return false; + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 10.0; + return distance < d0 * d0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityParachest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityParachest.java new file mode 100644 index 00000000..5fb1374f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityParachest.java @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.ArrayList; +import java.util.Collections; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.tile.TileEntityParaChest; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class EntityParachest extends Entity implements IPacketReceiver +{ + + public NonNullList cargo; + public int fuelLevel; + private boolean placedChest; + public EnumDyeColor color = EnumDyeColor.WHITE; + + public EntityParachest(World world, NonNullList cargo, int fuelLevel) + { + this(world); + this.cargo = NonNullList.withSize(cargo.size(), ItemStack.EMPTY); + Collections.copy(this.cargo, cargo); + this.placedChest = false; + this.fuelLevel = fuelLevel; + } + + public EntityParachest(World world) + { + super(world); + this.setSize(1.0F, 1.0F); + } + + @Override + protected void entityInit() + { + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + int size = 56; + if (nbt.hasKey("CargoLength")) + { + size = nbt.getInteger("CargoLength"); + } + this.cargo = NonNullList.withSize(size, ItemStack.EMPTY); + + ItemStackHelper.loadAllItems(nbt, this.cargo); + + this.placedChest = nbt.getBoolean("placedChest"); + this.fuelLevel = nbt.getInteger("FuelLevel"); + + if (nbt.hasKey("color")) + { + this.color = EnumDyeColor.byDyeDamage(nbt.getInteger("color")); + } + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("CargoLength", this.cargo.size()); + ItemStackHelper.saveAllItems(nbt, this.cargo); + + nbt.setBoolean("placedChest", this.placedChest); + nbt.setInteger("FuelLevel", this.fuelLevel); + nbt.setInteger("color", this.color.getDyeDamage()); + } + + @Override + public void onUpdate() + { + if (!this.placedChest) + { + if (this.onGround && !this.world.isRemote) + { + for (int i = 0; i < 100; i++) + { + final int x = MathHelper.floor(this.posX); + final int y = MathHelper.floor(this.posY); + final int z = MathHelper.floor(this.posZ); + + if (tryPlaceAtPos(new BlockPos(x, y + i, z))) + { + return; + } + } + + for (int size = 1; size < 5; ++size) + { + for (int xOff = -size; xOff <= size; xOff++) + { + for (int yOff = -size; yOff <= size; yOff++) + { + for (int zOff = -size; zOff <= size; zOff++) + { + final int x = MathHelper.floor(this.posX) + xOff; + final int y = MathHelper.floor(this.posY) + yOff; + final int z = MathHelper.floor(this.posZ) + zOff; + + if (tryPlaceAtPos(new BlockPos(x, y, z))) + { + return; + } + } + } + } + } + + if (this.cargo != null) + { + for (final ItemStack stack : this.cargo) + { + final EntityItem e = new EntityItem(this.world, this.posX, this.posY, this.posZ, stack); + this.world.spawnEntity(e); + } + } + + this.placedChest = true; + this.setDead(); + } else + { + this.motionY = -0.35; + } + + this.move(MoverType.SELF, 0, this.motionY, 0); + } + + if (!this.world.isRemote && this.ticksExisted % 5 == 0) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketDynamic(this), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 64.0)); + } + } + + private boolean tryPlaceAtPos(BlockPos pos) + { + IBlockState state = this.world.getBlockState(pos); + Block block = state.getBlock(); + + if (block.getMaterial(state).isReplaceable()) + { + if (this.placeChest(pos)) + { + this.placedChest = true; + this.setDead(); + return true; + } + } + return false; + } + + private boolean placeChest(BlockPos pos) + { + if (this.world.setBlockState(pos, GCBlocks.parachest.getDefaultState(), 3)) + { + if (this.cargo != null) + { + final TileEntity te = this.world.getTileEntity(pos); + + if (te instanceof TileEntityParaChest) + { + final TileEntityParaChest chest = (TileEntityParaChest) te; + + chest.inventory = NonNullList.withSize(this.cargo.size() + 1, ItemStack.EMPTY); + chest.color = this.color; + + Collections.copy(chest.getInventory(), this.cargo); + + chest.fuelTank.fill(FluidRegistry.getFluidStack(GCFluids.fluidFuel.getName().toLowerCase(), this.fuelLevel), true); + } else + { + for (ItemStack stack : this.cargo) + { + final EntityItem e = new EntityItem(this.world, this.posX, this.posY, this.posZ, stack); + this.world.spawnEntity(e); + } + } + } + return true; + } + + return false; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (!this.world.isRemote) + { + sendData.add(this.color.getDyeDamage()); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world.isRemote) + { + this.color = EnumDyeColor.byDyeDamage(buffer.readInt()); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntitySkeletonBoss.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntitySkeletonBoss.java new file mode 100644 index 00000000..a4c4d980 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntitySkeletonBoss.java @@ -0,0 +1,395 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.List; +import java.util.Random; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.BossInfo; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.advancement.GCTriggers; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class EntitySkeletonBoss extends EntityBossBase implements IEntityBreathable, IRangedAttackMob, IIgnoreShift +{ + + protected long ticks = 0; + private static final ItemStack defaultHeldItem = new ItemStack(Items.BOW, 1); + + public int throwTimer; + public int postThrowDelay = 20; + public Entity thrownEntity; + public Entity targetEntity; + + public EntitySkeletonBoss(World par1World) + { + super(par1World); + this.setSize(1.5F, 4.0F); + this.isImmuneToFire = true; + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIArrowAttack(this, 1.0D, 25, 10.0F)); + this.tasks.addTask(2, new EntityAIWander(this, 1.0D)); + this.tasks.addTask(3, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(3, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, false, true)); + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + double difficulty = 0; + switch (this.world.getDifficulty()) + { + case HARD: + difficulty = 2D; + break; + case NORMAL: + difficulty = 1D; + break; + } + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(150.0F * ConfigManagerCore.dungeonBossHealthMod); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D + 0.075 * difficulty); + } + + @Override + protected void onDeathUpdate() + { + super.onDeathUpdate(); + + if (!this.world.isRemote) + { + if (this.deathTicks == 100) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(PacketSimple.EnumSimplePacket.C_PLAY_SOUND_BOSS_DEATH, GCCoreUtil.getDimensionID(this.world), new Object[] + {1.5F}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + } + } + } + + @Override + public boolean isInWater() + { + return false; + } + + @Override + public boolean handleWaterMovement() + { + return false; + } + + @Override + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + final double offsetX = Math.sin(-this.rotationYawHead / Constants.RADIANS_TO_DEGREES_D); + final double offsetZ = Math.cos(this.rotationYawHead / Constants.RADIANS_TO_DEGREES_D); + final double offsetY = 2 * Math.cos((this.throwTimer + this.postThrowDelay) * 0.05F); + + passenger.setPosition(this.posX + offsetX, this.posY + this.getMountedYOffset() + passenger.getYOffset() + offsetY, this.posZ + offsetZ); + } + } + + @Override + public void knockBack(Entity par1Entity, float par2, double par3, double par5) + { + } + + @Override + public void onCollideWithPlayer(EntityPlayer entityPlayer) + { + if (!this.isAIDisabled() && this.getPassengers().isEmpty() && this.postThrowDelay == 0 && this.throwTimer == 0 && entityPlayer.equals(this.targetEntity) && this.deathTicks == 0) + { + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_PLAY_SOUND_BOSS_LAUGH, GCCoreUtil.getDimensionID(this.world), new Object[] + {}), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + entityPlayer.startRiding(this); + } + + this.throwTimer = 40; + } + + super.onCollideWithPlayer(entityPlayer); + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + this.playSound(GCSounds.bossOoh, this.getSoundVolume(), this.getSoundPitch() + 1.0F); + return null; + } + + @Override + protected SoundEvent getDeathSound() + { + return null; + } + +// @Override +// @SideOnly(Side.CLIENT) +// public ItemStack getHeldItem() +// { +// return EntitySkeletonBoss.defaultHeldItem; +// } + + @Override + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.UNDEAD; + } + + @Override + public void onLivingUpdate() + { + this.ticks++; + + for (int j2 = 0; j2 < world.playerEntities.size(); ++j2) // World#isAnyPlayerWithinRangeAt + { + EntityPlayer entityplayer = world.playerEntities.get(j2); + + if (EntitySelectors.NOT_SPECTATING.apply(entityplayer) && entityplayer instanceof EntityPlayerMP) + { + double d0 = entityplayer.getDistanceSq(this.posX, this.posY, this.posZ); + + if (d0 < 20 * 20) + { + GCTriggers.FIND_MOON_BOSS.trigger(((EntityPlayerMP) entityplayer)); + + } + } + } + + if (!this.world.isRemote && this.getHealth() <= 150.0F * ConfigManagerCore.dungeonBossHealthMod / 2) + { + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + } + + final EntityPlayer player = this.world.getClosestPlayer(this.posX, this.posY, this.posZ, 20.0, false); + + if (player != null && !player.equals(this.targetEntity)) + { + if (this.getDistanceSq(player) < 400.0D) + { + this.getNavigator().getPathToEntityLiving(player); + this.targetEntity = player; + } + } else + { + this.targetEntity = null; + } + + if (this.throwTimer > 0) + { + this.throwTimer--; + } + + if (this.postThrowDelay > 0) + { + this.postThrowDelay--; + } + + if (!this.getPassengers().isEmpty() && this.throwTimer == 0) + { + this.postThrowDelay = 20; + + this.thrownEntity = this.getPassengers().get(0); + + if (!this.world.isRemote) + { + this.removePassengers(); + } + } + + if (this.thrownEntity != null && this.postThrowDelay == 18) + { + double d0 = this.posX - this.thrownEntity.posX; + double d1; + + for (d1 = this.posZ - this.thrownEntity.posZ; d0 * d0 + d1 * d1 < 1.0E-4D; d1 = (Math.random() - Math.random()) * 0.01D) + { + d0 = (Math.random() - Math.random()) * 0.01D; + } + + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_PLAY_SOUND_BOW, GCCoreUtil.getDimensionID(this.world), new Object[] + {}), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + } + ((EntityPlayer) this.thrownEntity).attackedAtYaw = (float) Math.atan2(d1, d0) * Constants.RADIANS_TO_DEGREES - this.rotationYaw; + + this.thrownEntity.isAirBorne = true; + final float f = MathHelper.sqrt(d0 * d0 + d1 * d1); + final float f1 = 2.4F; + this.thrownEntity.motionX /= 2.0D; + this.thrownEntity.motionY /= 2.0D; + this.thrownEntity.motionZ /= 2.0D; + this.thrownEntity.motionX -= d0 / f * f1; + this.thrownEntity.motionY += (double) f1 / 5; + this.thrownEntity.motionZ -= d1 / f * f1; + + if (this.thrownEntity.motionY > 0.4000000059604645D) + { + this.thrownEntity.motionY = 0.4000000059604645D; + } + } + + super.onLivingUpdate(); + } + + @Override + protected Item getDropItem() + { + return Items.ARROW; + } + + @Override + public EntityItem entityDropItem(ItemStack par1ItemStack, float par2) + { + final EntityItem entityitem = new EntityItem(this.world, this.posX, this.posY + par2, this.posZ, par1ItemStack); + entityitem.motionY = -2.0D; + entityitem.setDefaultPickupDelay(); + if (this.captureDrops) + { + this.capturedDrops.add(entityitem); + } else + { + this.world.spawnEntity(entityitem); + } + return entityitem; + } + + @Override + protected void dropFewItems(boolean b, int i) + { + if (this.rand.nextInt(200) - i >= 5) + { + return; + } + + if (i > 0) + { + final ItemStack var2 = new ItemStack(Items.BOW); + EnchantmentHelper.addRandomEnchantment(this.rand, var2, 5, false); + this.entityDropItem(var2, 0.0F); + } else + { + this.dropItem(Items.BOW, 1); + } + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase target, float f) + { + if (!this.getPassengers().isEmpty()) + { + return; + } + + EntityTippedArrow arrow = new EntityTippedArrow(this.world, this); + double d0 = target.posX - this.posX; + double d1 = target.getEntityBoundingBox().minY + (double) (target.height / 3.0F) - arrow.posY; + double d2 = target.posZ - this.posZ; + double d3 = MathHelper.sqrt(d0 * d0 + d2 * d2); + arrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float) (14 - this.world.getDifficulty().getId() * 4)); + + this.playSound(SoundEvents.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); + this.world.spawnEntity(arrow); + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return true; + } + + @Override + public ItemStack getGuaranteedLoot(Random rand) + { + List stackList = GalacticraftRegistry.getDungeonLoot(1); + return stackList.get(rand.nextInt(stackList.size())).copy(); + } + + @Override + public int getChestTier() + { + return 1; + } + + @Override + public void dropKey() + { + this.entityDropItem(new ItemStack(GCItems.key, 1, 0), 0.5F); + } + + @Override + public BossInfo.Color getHealthBarColor() + { + return BossInfo.Color.GREEN; + } + + @Override + public void setSwingingArms(boolean swingingArms) + { + // TODO Auto-generated method stub + // Unused in this Galacticraft entity + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityTier1Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityTier1Rocket.java new file mode 100644 index 00000000..9aea380d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/EntityTier1Rocket.java @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +//import calclavia.api.icbm.IMissile; + +public class EntityTier1Rocket extends EntityTieredRocket +{ + + public EntityTier1Rocket(World par1World) + { + super(par1World); + this.setSize(1.2F, 3.5F); +// this.yOffset = 1.5F; + } + + public EntityTier1Rocket(World par1World, double par2, double par4, double par6, EnumRocketType rocketType) + { + super(par1World, par2, par4, par6); + this.rocketType = rocketType; + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + this.setSize(1.2F, 3.5F); +// this.yOffset = 1.5F; + } + + @Override + public double getMountedYOffset() + { + return 0.3D; + } + + @Override + public float getRotateOffset() + { + return -1.5F; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(GCItems.rocketTier1, 1, this.rocketType.getIndex()); + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + int i; + + if (this.timeUntilLaunch >= 100) + { + i = Math.abs(this.timeUntilLaunch / 100); + } else + { + i = 1; + } + + if ((this.getLaunched() || this.launchPhase == EnumLaunchPhase.IGNITED.ordinal() && this.rand.nextInt(i) == 0) && !ConfigManagerCore.disableSpaceshipParticles && this.hasValidFuel()) + { + if (this.world.isRemote) + { + this.spawnParticles(this.getLaunched()); + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal() && this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.LAUNCHED.ordinal()) + { + double d = this.timeSinceLaunch / 150; + + if (this.world.provider instanceof IGalacticraftWorldProvider && ((IGalacticraftWorldProvider) this.world.provider).hasNoAtmosphere()) + { + d = Math.min(d * 1.2, 1.6); + } else + { + d = Math.min(d, 1); + } + + if (d != 0.0) + { + this.motionY = -d * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + } + } else + { + this.motionY -= 0.008D; + } + + double multiplier = 1.0D; + + if (this.world.provider instanceof IGalacticraftWorldProvider) + { + multiplier = ((IGalacticraftWorldProvider) this.world.provider).getFuelUsageMultiplier(); + + if (multiplier <= 0) + { + multiplier = 1; + } + } + + if (this.timeSinceLaunch % MathHelper.floor(3 * (1 / multiplier)) == 0) + { + this.removeFuel(1); + if (!this.hasValidFuel()) + { + this.stopRocketSound(); + } + } + } else if (!this.hasValidFuel() && this.getLaunched() && !this.world.isRemote) + { + if (Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 10 != 0.0) + { + this.motionY -= Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 20; + } + } + } + + @Override + public void onTeleport(EntityPlayerMP player) + { + final EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + if (this.stacks == null || this.stacks.isEmpty()) + { + stats.setRocketStacks(NonNullList.withSize(2, ItemStack.EMPTY)); + } else + { + stats.setRocketStacks(this.stacks); + } + + stats.setRocketType(this.rocketType.getIndex()); + stats.setRocketItem(GCItems.rocketTier1); + stats.setFuelLevel(this.fuelTank.getFluidAmount()); + } + } + + protected void spawnParticles(boolean launched) + { + if (!this.isDead) + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double x1 = 2 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double z1 = 2 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double y1 = 2 * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null) + { + double modifier = this.posY - this.targetVec.getY(); + modifier = Math.min(Math.max(modifier, 120.0), 300.0); + x1 *= modifier / 100.0D; + y1 *= modifier / 100.0D; + z1 *= modifier / 100.0D; + } + + double y = this.prevPosY + (this.posY - this.prevPosY) + y1 - this.motionY + 1.2D; + + final double x2 = this.posX + x1 - this.motionX; + final double z2 = this.posZ + z1 - this.motionZ; + + EntityLivingBase riddenByEntity = !this.getPassengers().isEmpty() && this.getPassengers().get(0) instanceof EntityLivingBase ? (EntityLivingBase) this.getPassengers().get(0) : null; + + if (this.getLaunched()) + { + Vector3 motionVec = new Vector3(x1, y1, z1); + Object[] rider = {riddenByEntity}; + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y, z2 + 0.4 - this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y, z2 + 0.4 - this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y, z2 - 0.4 + this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y, z2 - 0.4 + this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y, z2 + 0.4D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y, z2 - 0.4D), motionVec, rider); + + } else if (this.ticksExisted % 2 == 0) + { + Object[] rider = {riddenByEntity}; + y += 0.6D; + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y, z2 + 0.4 - this.rand.nextDouble() / 10D), + new Vector3(this.rand.nextDouble() / 2.0 - 0.25, 0.0, this.rand.nextDouble() / 2.0 - 0.25), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y, z2 + 0.4 - this.rand.nextDouble() / 10D), + new Vector3(this.rand.nextDouble() / 2.0 - 0.25, 0.0, this.rand.nextDouble() / 2.0 - 0.25), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y, z2 - 0.4 + this.rand.nextDouble() / 10D), + new Vector3(this.rand.nextDouble() / 2.0 - 0.25, 0.0, this.rand.nextDouble() / 2.0 - 0.25), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y, z2 - 0.4 + this.rand.nextDouble() / 10D), + new Vector3(this.rand.nextDouble() / 2.0 - 0.25, 0.0, this.rand.nextDouble() / 2.0 - 0.25), rider); + } + } + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return !this.isDead && entityPlayer.getDistanceSq(this) <= 64.0D; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeEntityToNBT(par1NBTTagCompound); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readEntityFromNBT(par1NBTTagCompound); + } + + @Override + public int getPreLaunchWait() + { + return 400; + } + + @Override + public List getItemsDropped(List droppedItems) + { + super.getItemsDropped(droppedItems); + ItemStack rocket = new ItemStack(GCItems.rocketTier1, 1, this.rocketType.getIndex()); + rocket.setTagCompound(new NBTTagCompound()); + rocket.getTagCompound().setInteger("RocketFuel", this.fuelTank.getFluidAmount()); + droppedItems.add(rocket); + return droppedItems; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public boolean isDockValid(IFuelDock dock) + { + return dock instanceof TileEntityLandingPad; + } + + @Override + public int getRocketTier() + { + return 1; + } + + @Override + public int getFuelTankCapacity() + { + return 1000; + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public double getOnPadYOffset() + { + return 0.0D; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBoss.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBoss.java new file mode 100644 index 00000000..2bf6a949 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBoss.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; + +public interface IBoss +{ + + void onBossSpawned(TileEntityDungeonSpawner spawner); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProvider.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProvider.java new file mode 100644 index 00000000..64b4abec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProvider.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +public interface IBubbleProvider +{ + + float getBubbleSize(); + + void setBubbleVisible(boolean shouldRender); + + boolean getBubbleVisible(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProviderColored.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProviderColored.java new file mode 100644 index 00000000..286cabd2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IBubbleProviderColored.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +/** + * To be combined with IBubbleProvider in the next major update + */ +public interface IBubbleProviderColored extends IBubbleProvider +{ + + Vector3 getColor(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IControllableEntity.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IControllableEntity.java new file mode 100644 index 00000000..f3872794 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IControllableEntity.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +public interface IControllableEntity +{ + + boolean pressKey(int key); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IScaleableFuelLevel.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IScaleableFuelLevel.java new file mode 100644 index 00000000..5585910c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/IScaleableFuelLevel.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +public interface IScaleableFuelLevel +{ + + int getScaledFuelLevel(int scale); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/ITumblable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/ITumblable.java new file mode 100644 index 00000000..746c07ef --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/ITumblable.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +public interface ITumblable +{ + + public void setTumbling(float value); + + public float getTumbleAngle(float partial); + + public float getTumbleAxisX(); + + public float getTumbleAxisZ(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/InventoryEntity.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/InventoryEntity.java new file mode 100644 index 00000000..81742ba6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/InventoryEntity.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; + +public abstract class InventoryEntity extends NetworkedEntity implements IInventory +{ + + protected NonNullList stacks = NonNullList.withSize(0, ItemStack.EMPTY); + + public InventoryEntity(World par1World) + { + super(par1World); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + ItemStackHelper.loadAllItems(nbt, this.stacks); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + ItemStackHelper.saveAllItems(nbt, this.stacks); + } + + @Override + public ItemStack getStackInSlot(int var1) + { + return this.stacks.get(var1); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return true; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + for (int i = 0; i < this.stacks.size(); ++i) + { + this.stacks.set(i, ItemStack.EMPTY); + } + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/NetworkedEntity.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/NetworkedEntity.java new file mode 100644 index 00000000..04c1e8ed --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/NetworkedEntity.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class NetworkedEntity extends Entity implements IPacketReceiver +{ + + public NetworkedEntity(World par1World) + { + super(par1World); + + if (par1World != null && par1World.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + PacketDynamic packet = new PacketDynamic(this); + if (this.networkedDataChanged()) + { + if (!this.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToAllAround(packet, new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, this.getPacketRange())); + } else + { + GalacticraftCore.packetPipeline.sendToServer(packet); + } + } + } + + public abstract boolean networkedDataChanged(); + + public abstract double getPacketRange(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStats.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStats.java new file mode 100644 index 00000000..acc3b242 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStats.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.ref.WeakReference; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilitySerializable; + +public class CapabilityProviderStats implements ICapabilitySerializable +{ + + private EntityPlayerMP owner; + private GCPlayerStats statsCapability; + + public CapabilityProviderStats(EntityPlayerMP owner) + { + this.owner = owner; + this.statsCapability = GCCapabilities.GC_STATS_CAPABILITY.getDefaultInstance(); + this.statsCapability.setPlayer(new WeakReference<>(this.owner)); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + return capability == GCCapabilities.GC_STATS_CAPABILITY; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (GCCapabilities.GC_STATS_CAPABILITY != null && capability == GCCapabilities.GC_STATS_CAPABILITY) + { + return GCCapabilities.GC_STATS_CAPABILITY.cast(statsCapability); + } + + return null; + } + + @Override + public NBTTagCompound serializeNBT() + { + NBTTagCompound nbt = new NBTTagCompound(); + statsCapability.saveNBTData(nbt); + return nbt; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + statsCapability.loadNBTData(nbt); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStatsClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStatsClient.java new file mode 100644 index 00000000..737e9166 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/CapabilityProviderStatsClient.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; + +public class CapabilityProviderStatsClient implements ICapabilityProvider +{ + + private EntityPlayerSP owner; + private GCPlayerStatsClient statsCapability; + + public CapabilityProviderStatsClient(EntityPlayerSP owner) + { + this.owner = owner; + this.statsCapability = GCCapabilities.GC_STATS_CLIENT_CAPABILITY.getDefaultInstance(); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + return capability == GCCapabilities.GC_STATS_CLIENT_CAPABILITY; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (GCCapabilities.GC_STATS_CLIENT_CAPABILITY != null && capability == GCCapabilities.GC_STATS_CLIENT_CAPABILITY) + { + return GCCapabilities.GC_STATS_CLIENT_CAPABILITY.cast(statsCapability); + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/EnumGravity.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/EnumGravity.java new file mode 100644 index 00000000..59948053 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/EnumGravity.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +public enum EnumGravity +{ + + down(0, 1.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F), + up(1, 1.0F, 0.0F, 0.0F, -1.0F, 0.0F, -1.0F, 0.0F, 0.0F, -1.0F, 0.0F, 0.0F, 1.0F, 0.0F), + west(2, 0.0F, -1.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 0.0F, 0.0F, -1.0F, 1.0F, 0.0F), + east(3, 0.0F, 1.0F, -1.0F, 0.0F, 0.0F, 0.0F, -0.5F, -1.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.0F), + south(4, 1.0F, 0.0F, 0.0F, 0.0F, -1.0F, 0.5F, 0.0F, 0.0F, 0.0F, -1.0F, 0.0F, 1.0F, 1.0F), + north(5, 1.0F, 0.0F, 0.0F, 0.0F, 1.0F, -0.5F, 0.0F, 0.0F, 0.0F, 1.0F, 0.0F, 1.0F, -1.0F); + + private final int intValue; + private final float pitchGravityX; + private final float pitchGravityY; + private final float yawGravityX; + private final float yawGravityY; + private final float yawGravityZ; + private final float thetaX; + private final float thetaZ; + private final float sneakVecX; + private final float sneakVecY; + private final float sneakVecZ; + private final float eyeVecX; + private final float eyeVecY; + private final float eyeVecZ; + private final static EnumGravity[] GDirections = + {down, up, west, east, south, north}; + + EnumGravity(int value, float pitchX, float pitchY, float yawX, float yawY, float yawZ, float thetaX, float thetaZ, float sneakX, float sneakY, float sneakZ, float eyeX, float eyeY, float eyeZ) + { + this.intValue = value; + this.pitchGravityX = pitchX; + this.pitchGravityY = pitchY; + this.yawGravityX = yawX; + this.yawGravityY = yawY; + this.yawGravityZ = yawZ; + this.thetaX = thetaX; + this.thetaZ = thetaZ; + this.sneakVecX = sneakX; + this.sneakVecY = sneakY; + this.sneakVecZ = sneakZ; + this.eyeVecX = eyeX; + this.eyeVecY = eyeY; + this.eyeVecZ = eyeZ; + } + + public int getIntValue() + { + return intValue; + } + + public float getPitchGravityX() + { + return pitchGravityX; + } + + public float getPitchGravityY() + { + return pitchGravityY; + } + + public float getYawGravityX() + { + return yawGravityX; + } + + public float getYawGravityY() + { + return yawGravityY; + } + + public float getYawGravityZ() + { + return yawGravityZ; + } + + public float getThetaX() + { + return thetaX; + } + + public float getThetaZ() + { + return thetaZ; + } + + public float getSneakVecX() + { + return sneakVecX; + } + + public float getSneakVecY() + { + return sneakVecY; + } + + public float getSneakVecZ() + { + return sneakVecZ; + } + + public float getEyeVecX() + { + return eyeVecX; + } + + public float getEyeVecY() + { + return eyeVecY; + } + + public float getEyeVecZ() + { + return eyeVecZ; + } + + public static EnumGravity[] getGDirections() + { + return GDirections; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/FreefallHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/FreefallHandler.java new file mode 100644 index 00000000..e96f56ea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/FreefallHandler.java @@ -0,0 +1,673 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import micdoodle8.mods.galacticraft.api.event.ZeroGravityEvent; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.dimension.SpinManager; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityFlying; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class FreefallHandler +{ + + private double pPrevMotionX; + public double pPrevMotionY; + private double pPrevMotionZ; + private float jetpackBoost; + private double pPrevdY; + public boolean sneakLast; + public boolean onWall; + + public int pjumpticks = 0; + private GCPlayerStatsClient stats; + + public FreefallHandler(GCPlayerStatsClient statsClientCapability) + { + stats = statsClientCapability; + } + + public boolean testFreefall(EntityPlayer player) + { + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.InFreefall(player); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (zeroGEvent.isCanceled()) + { + return false; + } + + // Test whether feet are on a block, also stops the login glitch + int playerFeetOnY = (int) (player.getEntityBoundingBox().minY - 0.01D); + int xx = MathHelper.floor(player.posX); + int zz = MathHelper.floor(player.posZ); + BlockPos pos = new BlockPos(xx, playerFeetOnY, zz); + IBlockState state = player.world.getBlockState(pos); + Block b = state.getBlock(); + if (b.getMaterial(state) != Material.AIR && !(b instanceof BlockLiquid)) + { + double blockYmax; + if (b == GCBlocks.platform) + blockYmax = playerFeetOnY + 1.0D; + else + blockYmax = playerFeetOnY + b.getBoundingBox(state, player.world, pos).maxY; + if (player.getEntityBoundingBox().minY - blockYmax < 0.01D && player.getEntityBoundingBox().minY - blockYmax > -0.5D) + { + player.onGround = true; + if (player.getEntityBoundingBox().minY - blockYmax > 0D) + { + player.posY -= player.getEntityBoundingBox().minY - blockYmax; + player.setEntityBoundingBox(player.getEntityBoundingBox().offset(0, blockYmax - player.getEntityBoundingBox().minY, 0)); + } else if (b.canCollideCheck(player.world.getBlockState(new BlockPos(xx, playerFeetOnY, zz)), false)) + { + BlockPos offsetPos = new BlockPos(xx, playerFeetOnY, zz); + AxisAlignedBB collisionBox = b.getCollisionBoundingBox(player.world.getBlockState(offsetPos), player.world, offsetPos); + if (collisionBox != null && collisionBox.intersects(player.getEntityBoundingBox())) + { + player.posY -= player.getEntityBoundingBox().minY - blockYmax; + player.setEntityBoundingBox(player.getEntityBoundingBox().offset(0, blockYmax - player.getEntityBoundingBox().minY, 0)); + } + } + return false; + } + } + return true; + } + + @SideOnly(Side.CLIENT) + private boolean testFreefall(EntityPlayerSP p, boolean flag) + { + World world = p.world; + WorldProvider worldProvider = world.provider; + if (!(worldProvider instanceof IZeroGDimension)) + { + return false; + } + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.InFreefall(p); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (zeroGEvent.isCanceled()) + { + return false; + } + if (this.pjumpticks > 0 || (stats.isSsOnGroundLast() && p.movementInput.jump)) + { + return false; + } + + if (p.getRidingEntity() != null) + { + Entity e = p.getRidingEntity(); + if (e instanceof EntitySpaceshipBase) + { + return ((EntitySpaceshipBase) e).getLaunched(); + } + if (e instanceof EntityLanderBase) + { + return false; + } + // TODO: should check whether lander has landed (whatever that + // means) + // TODO: could check other ridden entities - every entity should + // have its own freefall check :( + } + + // This is an "on the ground" check + if (!flag) + { + return false; + } else + { + float rY = p.rotationYaw % 360F; + double zreach = 0D; + double xreach = 0D; + if (rY < 80F || rY > 280F) + { + zreach = 0.2D; + } + if (rY < 170F && rY > 10F) + { + xreach = 0.2D; + } + if (rY < 260F && rY > 100F) + { + zreach = -0.2D; + } + if (rY < 350F && rY > 190F) + { + xreach = -0.2D; + } + AxisAlignedBB playerReach = p.getEntityBoundingBox().expand(xreach, 0, zreach); + + boolean checkBlockWithinReach; + if (worldProvider instanceof WorldProviderSpaceStation) + { + SpinManager spinManager = ((WorldProviderSpaceStation) worldProvider).getSpinManager(); + checkBlockWithinReach = playerReach.maxX >= spinManager.ssBoundsMinX && playerReach.minX <= spinManager.ssBoundsMaxX && playerReach.maxY >= spinManager.ssBoundsMinY + && playerReach.minY <= spinManager.ssBoundsMaxY && playerReach.maxZ >= spinManager.ssBoundsMinZ && playerReach.minZ <= spinManager.ssBoundsMaxZ; + // Player is somewhere within the space station boundaries + } else + { + checkBlockWithinReach = true; + } + + if (checkBlockWithinReach) + { + // Check if the player's bounding box is in the same block + // coordinates as any non-vacuum block (including torches etc) + // If so, it's assumed the player has something close enough to + // grab onto, so is not in freefall + // Note: breatheable air here means the player is definitely not + // in freefall + int xm = MathHelper.floor(playerReach.minX); + int xx = MathHelper.floor(playerReach.maxX); + int ym = MathHelper.floor(playerReach.minY); + int yy = MathHelper.floor(playerReach.maxY); + int zm = MathHelper.floor(playerReach.minZ); + int zz = MathHelper.floor(playerReach.maxZ); + for (int x = xm; x <= xx; x++) + { + for (int y = ym; y <= yy; y++) + { + for (int z = zm; z <= zz; z++) + { + // Blocks.AIR is hard vacuum - we want to check for + // that, here + Block b = world.getBlockState(new BlockPos(x, y, z)).getBlock(); + if (Blocks.AIR != b && GCBlocks.brightAir != b) + { + this.onWall = true; + return false; + } + } + } + } + } + } + + /* + * if (freefall) { //If that check didn't produce a result, see if the + * player is inside the walls //TODO: could apply special weightless + * movement here like Coriolis force - the player is inside the walls, + * not touching them, and in a vacuum int quadrant = 0; double xd = + * p.posX - this.spinCentreX; double zd = p.posZ - this.spinCentreZ; if + * (xd<0) { if (xd<-Math.abs(zd)) { quadrant = 2; } else quadrant = + * (zd<0) ? 3 : 1; } else if (xd>Math.abs(zd)) { quadrant = 0; } else + * quadrant = (zd<0) ? 3 : 1; int ymin = + * MathHelper.floor(p.boundingBox.minY)-1; int ymax = + * MathHelper.floor(p.boundingBox.maxY); int xmin, xmax, zmin, zmax; + * switch (quadrant) { case 0: xmin = + * MathHelper.floor(p.boundingBox.maxX); xmax = this.ssBoundsMaxX - 1; + * zmin = MathHelper.floor(p.boundingBox.minZ)-1; zmax = + * MathHelper.floor(p.boundingBox.maxZ)+1; break; case 1: xmin = + * MathHelper.floor(p.boundingBox.minX)-1; xmax = + * MathHelper.floor(p.boundingBox.maxX)+1; zmin = + * MathHelper.floor(p.boundingBox.maxZ); zmax = this.ssBoundsMaxZ - 1; + * break; case 2: zmin = MathHelper.floor(p.boundingBox.minZ)-1; zmax = + * MathHelper.floor(p.boundingBox.maxZ)+1; xmin = this.ssBoundsMinX; + * xmax = MathHelper.floor(p.boundingBox.minX); break; case 3: default: + * xmin = MathHelper.floor(p.boundingBox.minX)-1; xmax = + * MathHelper.floor(p.boundingBox.maxX)+1; zmin = this.ssBoundsMinZ; + * zmax = MathHelper.floor(p.boundingBox.minZ); break; } //This block + * search could cost a lot of CPU (but client side) - maybe optimise + * later BLOCKCHECK0: for(int x = xmin; x <= xmax; x++) for (int z = + * zmin; z <= zmax; z++) for (int y = ymin; y <= ymax; y++) if + * (Blocks.AIR != this.worldProvider.world.getBlock(x, y, z)) { freefall + * = false; break BLOCKCHECK0; } } + */ + + this.onWall = false; + return true; + } + + @SideOnly(Side.CLIENT) + public void setupFreefallPre(EntityPlayerSP p) + { + double dY = p.motionY - pPrevMotionY; + jetpackBoost = 0F; + pPrevdY = dY; + pPrevMotionX = p.motionX; + pPrevMotionY = p.motionY; + pPrevMotionZ = p.motionZ; + } + + @SideOnly(Side.CLIENT) + public void freefallMotion(EntityPlayerSP p) + { + boolean jetpackUsed = false; + double dX = p.motionX - pPrevMotionX; + double dY = p.motionY - pPrevMotionY; + double dZ = p.motionZ - pPrevMotionZ; + + double posOffsetX = -p.motionX; + double posOffsetY = -p.motionY; + if (posOffsetY == -TransformerHooks.getGravityForEntity(p)) + posOffsetY = 0; + double posOffsetZ = -p.motionZ; + // if (p.capabilities.isFlying) + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(p); + /// Undo whatever vanilla tried to do to our y motion + if (dY < 0D && p.motionY != 0.0D) + { + p.motionY = pPrevMotionY; + } else if (dY > 0.01D && stats.isInFreefallLast()) + { + // Impulse upwards - it's probably a jetpack from another mod + if (dX < 0.01D && dZ < 0.01D) + { + float pitch = p.rotationPitch / Constants.RADIANS_TO_DEGREES; + jetpackBoost = (float) dY * MathHelper.cos(pitch) * 0.1F; + float factor = 1 + MathHelper.sin(pitch) / 5; + p.motionY -= dY * factor; + jetpackUsed = true; + } else + { + p.motionY -= dY / 2; + } + } + + p.motionX -= dX; +// p.motionY -= dY; //Enabling this will disable jetpacks + p.motionZ -= dZ; + + if (p.movementInput.moveForward != 0) + { + p.motionX -= p.movementInput.moveForward * MathHelper.sin(p.rotationYaw / Constants.RADIANS_TO_DEGREES) / (ConfigManagerCore.hardMode ? 600F : 200F); + p.motionZ += p.movementInput.moveForward * MathHelper.cos(p.rotationYaw / Constants.RADIANS_TO_DEGREES) / (ConfigManagerCore.hardMode ? 600F : 200F); + } + + if (jetpackBoost != 0) + { + p.motionX -= jetpackBoost * MathHelper.sin(p.rotationYaw / Constants.RADIANS_TO_DEGREES); + p.motionZ += jetpackBoost * MathHelper.cos(p.rotationYaw / Constants.RADIANS_TO_DEGREES); + } + + if (p.movementInput.sneak) + { + if (!sneakLast) + { +// posOffsetY += 0.0268; + sneakLast = true; + } + p.motionY -= ConfigManagerCore.hardMode ? 0.002D : 0.0032D; + } else if (sneakLast) + { + sneakLast = false; +// posOffsetY -= 0.0268; + } + + if (!jetpackUsed && p.movementInput.jump) + { + p.motionY += ConfigManagerCore.hardMode ? 0.002D : 0.0032D; + } + + float speedLimit = ConfigManagerCore.hardMode ? 0.9F : 0.7F; + + if (p.motionX > speedLimit) + { + p.motionX = speedLimit; + } + if (p.motionX < -speedLimit) + { + p.motionX = -speedLimit; + } + if (p.motionY > speedLimit) + { + p.motionY = speedLimit; + } + if (p.motionY < -speedLimit) + { + p.motionY = -speedLimit; + } + if (p.motionZ > speedLimit) + { + p.motionZ = speedLimit; + } + if (p.motionZ < -speedLimit) + { + p.motionZ = -speedLimit; + } + pPrevMotionX = p.motionX; + pPrevMotionY = p.motionY; + pPrevMotionZ = p.motionZ; + p.move(MoverType.SELF, p.motionX + posOffsetX, p.motionY + posOffsetY, p.motionZ + posOffsetZ); + } + + /* + * double dyaw = p.rotationYaw - p.prevRotationYaw; p.rotationYaw -= dyaw * + * 0.8D; double dyawh = p.rotationYawHead - p.prevRotationYawHead; + * p.rotationYawHead -= dyawh * 0.8D; while (p.rotationYaw > 360F) { + * p.rotationYaw -= 360F; } while (p.rotationYaw < 0F) { p.rotationYaw += + * 360F; } while (p.rotationYawHead > 360F) { p.rotationYawHead -= 360F; } + * while (p.rotationYawHead < 0F) { p.rotationYawHead += 360F; } + */ + + public void updateFreefall(EntityPlayer p) + { + pPrevMotionX = p.motionX; + pPrevMotionY = p.motionY; + pPrevMotionZ = p.motionZ; + } + + @SideOnly(Side.CLIENT) + public void preVanillaMotion(EntityPlayerSP p) + { + this.setupFreefallPre(p); + stats.setSsOnGroundLast(p.onGround); + } + + @SideOnly(Side.CLIENT) + public void postVanillaMotion(EntityPlayerSP p) + { + World world = p.world; + WorldProvider worldProvider = world.provider; + if (!(worldProvider instanceof IZeroGDimension)) + { + return; + } + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.Motion(p); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (zeroGEvent.isCanceled()) + { + return; + } + + boolean freefall = stats.isInFreefall(); + freefall = this.testFreefall(p, freefall); + stats.setInFreefall(freefall); + stats.setInFreefallFirstCheck(true); + + SpinManager spinManager = null; + if (worldProvider instanceof WorldProviderSpaceStation && !stats.getPlatformControlled()) + { + spinManager = ((WorldProviderSpaceStation) worldProvider).getSpinManager(); + } + boolean doCentrifugal = spinManager != null; + + if (freefall) + { + this.pjumpticks = 0; + // Reverse effects of deceleration + p.motionX /= 0.91F; + p.motionZ /= 0.91F; + p.motionY /= 0.9800000190734863D; + + if (spinManager != null) + { + doCentrifugal = spinManager.updatePlayerForSpin(p, 1F); + } + + // Do freefall motion + if (!p.capabilities.isCreativeMode) + { + this.freefallMotion(p); + } else + { + p.capabilities.isFlying = true; + // Half the normal acceleration in Creative mode + double dx = p.motionX - this.pPrevMotionX; + double dy = p.motionY - this.pPrevMotionY; + double dz = p.motionZ - this.pPrevMotionZ; + p.motionX -= dx / 2; + p.motionY -= dy / 2; + p.motionZ -= dz / 2; + + if (p.motionX > 1.2F) + { + p.motionX = 1.2F; + } + if (p.motionX < -1.2F) + { + p.motionX = -1.2F; + } + if (p.motionY > 0.7F) + { + p.motionY = 0.7F; + } + if (p.motionY < -0.7F) + { + p.motionY = -0.7F; + } + if (p.motionZ > 1.2F) + { + p.motionZ = 1.2F; + } + if (p.motionZ < -1.2F) + { + p.motionZ = -1.2F; + } + } + // TODO: Think about endless drift? + // Player may run out of oxygen - that will kill the player + // eventually if can't get back to SS + // Could auto-kill + respawn the player if floats too far away + // (config option whether to lose items or not) + // But we want players to be able to enjoy the view of the spinning + // space station from the outside + // Arm and leg movements could start tumbling the player? + } else + // Not freefall - within arm's length of something or jumping + { + double dy = p.motionY - this.pPrevMotionY; + // if (p.motionY < 0 && this.pPrevMotionY >= 0) p.posY -= p.motionY; + // if (p.motionY != 0) p.motionY = this.pPrevMotionY; + if (p.movementInput.jump) + { + if ((p.onGround || stats.isSsOnGroundLast()) && !p.capabilities.isCreativeMode) + { + if (this.pjumpticks < 25) + this.pjumpticks++; + p.motionY -= dy; + } else + { + p.motionY += 0.015D; + if (this.pjumpticks == 0) + { + p.motionY -= dy; + } + } + } else if (this.pjumpticks > 0) + { + p.motionY += 0.0145D * this.pjumpticks; + this.pjumpticks = 0; + } else if (p.movementInput.sneak) + { + if (!p.onGround) + { + p.motionY -= 0.015D; + } + this.pjumpticks = 0; + } + } + + // Artificial gravity + if (doCentrifugal && !p.onGround) + { + spinManager.applyCentrifugalForce(p); + } + + this.pPrevMotionX = p.motionX; + this.pPrevMotionY = p.motionY; + this.pPrevMotionZ = p.motionZ; + } + + /** + * Used for non-player entities in ZeroGDimensions + */ + public static boolean testEntityFreefall(World worldObj, AxisAlignedBB entityBoundingBox) + { + // Check if the entity's bounding box is in the same block coordinates + // as any non-vacuum block (including torches etc) + // If so, it's assumed the entity has something close enough to catch + // onto, so is not in freefall + // Note: breatheable air here means the entity is definitely not in + // freefall + int xmx = MathHelper.floor(entityBoundingBox.maxX + 0.2D); + int ym = MathHelper.floor(entityBoundingBox.minY - 0.1D); + int yy = MathHelper.floor(entityBoundingBox.maxY + 0.1D); + int zm = MathHelper.floor(entityBoundingBox.minZ - 0.2D); + int zz = MathHelper.floor(entityBoundingBox.maxZ + 0.2D); + if (ym < 0) + ym = 0; + if (yy > 255) + yy = 255; + + for (int x = MathHelper.floor(entityBoundingBox.minX - 0.2D); x <= xmx; x++) + { + for (int z = zm; z <= zz; z++) + { + if (!worldObj.isBlockLoaded(new BlockPos(x, 0, z), false)) + continue; + + for (int y = ym; y <= yy; y++) + { + if (Blocks.AIR != worldObj.getBlockState(new BlockPos(x, y, z)).getBlock()) + { + return false; + } + } + } + } + + return true; + } + + /** + * Call this on every freefalling non-player entity in a dimension either at + * the end of the world tick (ideal) or else during the start of the next + * world tick (e.g. during updateWeather()) + * + * May require iteration through the world's loadedEntityList See + * SpinManager.updateSpin() for an example + * + * @param e + */ + public static void tickFreefallEntity(Entity e) + { + if (e.world.provider instanceof IZeroGDimension) + ((IZeroGDimension) e.world.provider).setInFreefall(e); + + // Undo deceleration applied at the end of the previous tick + boolean warnLog = false; + if (e instanceof EntityLivingBase) + { + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.InFreefall((EntityLivingBase) e); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (!zeroGEvent.isCanceled()) + { + e.motionX /= (double) 0.91F; // 0.91F; + e.motionZ /= (double) 0.91F; // 0.91F; + e.motionY /= (e instanceof EntityFlying) ? 0.91F : 0.9800000190734863D; + + if (e.motionX > 10D) + { + warnLog = true; + e.motionX = 10D; + } else if (e.motionX < -10D) + { + warnLog = true; + e.motionX = -10D; + } + if (e.motionY > 10D) + { + warnLog = true; + e.motionY = 10D; + } else if (e.motionY < -10D) + { + warnLog = true; + e.motionY = -10D; + } + if (e.motionZ > 10D) + { + warnLog = true; + e.motionZ = 10D; + } else if (e.motionZ < -10D) + { + warnLog = true; + e.motionZ = -10D; + } + } + } else if (e instanceof EntityFallingBlock) + { + e.motionY /= 0.9800000190734863D; + // e.motionY += 0.03999999910593033D; + // e.posY += 0.03999999910593033D; + // e.lastTickPosY += 0.03999999910593033D; + if (e.motionY > 10D) + { + warnLog = true; + e.motionY = 10D; + } else if (e.motionY < -10D) + { + warnLog = true; + e.motionY = -10D; + } + } else + { + e.motionX /= 0.9800000190734863D; + e.motionY /= 0.9800000190734863D; + e.motionZ /= 0.9800000190734863D; + + if (e.motionX > 10D) + { + warnLog = true; + e.motionX = 10D; + } else if (e.motionX < -10D) + { + warnLog = true; + e.motionX = -10D; + } + if (e.motionY > 10D) + { + warnLog = true; + e.motionY = 10D; + } else if (e.motionY < -10D) + { + warnLog = true; + e.motionY = -10D; + } + if (e.motionZ > 10D) + { + warnLog = true; + e.motionZ = 10D; + } else if (e.motionZ < -10D) + { + warnLog = true; + e.motionZ = -10D; + } + } + + if (warnLog) + GalacticraftCore.logger.debug(e.getName() + " moving too fast"); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCCapabilities.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCCapabilities.java new file mode 100644 index 00000000..89b3e743 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCCapabilities.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; +import net.minecraftforge.common.capabilities.CapabilityManager; + +public class GCCapabilities +{ + + @CapabilityInject(GCPlayerStats.class) public static Capability GC_STATS_CAPABILITY = null; + + @CapabilityInject(GCPlayerStatsClient.class) public static Capability GC_STATS_CLIENT_CAPABILITY = null; + + public static final ResourceLocation GC_PLAYER_PROP = new ResourceLocation(Constants.ASSET_PREFIX, "player_stats"); + public static final ResourceLocation GC_PLAYER_CLIENT_PROP = new ResourceLocation(Constants.ASSET_PREFIX, "player_stats_client"); + + public static void register() + { + CapabilityManager.INSTANCE.register(GCPlayerStats.class, new Capability.IStorage() + { + + @Override + public NBTBase writeNBT(Capability capability, GCPlayerStats instance, EnumFacing side) + { + NBTTagCompound nbt = new NBTTagCompound(); + instance.saveNBTData(nbt); + return nbt; + } + + @Override + public void readNBT(Capability capability, GCPlayerStats instance, EnumFacing side, NBTBase nbt) + { + instance.loadNBTData((NBTTagCompound) nbt); + } + }, StatsCapability::new); + + CapabilityManager.INSTANCE.register(GCPlayerStatsClient.class, new Capability.IStorage() + { + + @Override + public NBTBase writeNBT(Capability capability, GCPlayerStatsClient instance, EnumFacing side) + { + return null; + } + + @Override + public void readNBT(Capability capability, GCPlayerStatsClient instance, EnumFacing side, NBTBase nbt) + { + } + }, StatsClientCapability::new); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityClientPlayerMP.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityClientPlayerMP.java new file mode 100644 index 00000000..3ea18860 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityClientPlayerMP.java @@ -0,0 +1,525 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.event.ZeroGravityEvent; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.RecipeBook; +import net.minecraft.stats.StatisticsManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GCEntityClientPlayerMP extends EntityPlayerSP +{ + + private boolean lastIsFlying; + private boolean sneakLast; + private int lastLandingTicks; + private boolean checkedCape = false; + private ResourceLocation galacticraftCape = null; + + public GCEntityClientPlayerMP(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandler, StatisticsManager statFileWriter, RecipeBook book) + { + super(mcIn, worldIn, netHandler, statFileWriter, book); + } + + @Override + public void wakeUpPlayer(boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + if (!ClientProxyCore.playerClientHandler.wakeUpPlayer(this, immediately, updateWorldFlag, setSpawn)) + { + super.wakeUpPlayer(immediately, updateWorldFlag, setSpawn); + } + } + + @Override + public boolean isEntityInsideOpaqueBlock() + { + return ClientProxyCore.playerClientHandler.isEntityInsideOpaqueBlock(this, super.isEntityInsideOpaqueBlock()); + } + + @Override + public boolean isServerWorld() + { + return true; + } + + @Override + public void onLivingUpdate() + { + ClientProxyCore.playerClientHandler.onLivingUpdatePre(this); + try + { + if (this.world.provider instanceof IZeroGDimension) + { + // from: EntityPlayerSP + if (this.sprintingTicksLeft > 0) + { + --this.sprintingTicksLeft; + + if (this.sprintingTicksLeft == 0) + { + this.setSprinting(false); + } + } + + if (this.sprintToggleTimer > 0) + { + --this.sprintToggleTimer; + } + + this.prevTimeInPortal = this.timeInPortal; + + if (this.inPortal) + { + if (this.mc.currentScreen != null && !this.mc.currentScreen.doesGuiPauseGame()) + { + this.mc.displayGuiScreen((GuiScreen) null); + } + + if (this.timeInPortal == 0.0F) + { + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.BLOCK_PORTAL_TRIGGER, this.rand.nextFloat() * 0.4F + 0.8F)); + } + + this.timeInPortal += 0.0125F; + + if (this.timeInPortal >= 1.0F) + { + this.timeInPortal = 1.0F; + } + + this.inPortal = false; + } else if (this.isPotionActive(MobEffects.NAUSEA) && this.getActivePotionEffect(MobEffects.NAUSEA).getDuration() > 60) + { + this.timeInPortal += 0.006666667F; + + if (this.timeInPortal > 1.0F) + { + this.timeInPortal = 1.0F; + } + } else + { + if (this.timeInPortal > 0.0F) + { + this.timeInPortal -= 0.05F; + } + + if (this.timeInPortal < 0.0F) + { + this.timeInPortal = 0.0F; + } + } + + if (this.timeUntilPortal > 0) + { + --this.timeUntilPortal; + } + + boolean flag1 = this.movementInput.sneak; + float sprintlevel = 0.8F; + boolean flag2 = this.movementInput.moveForward >= sprintlevel; + this.movementInput.updatePlayerMoveState(); + + if (this.isHandActive() && !this.isRiding()) + { + this.movementInput.moveStrafe *= 0.2F; + this.movementInput.moveForward *= 0.2F; + this.sprintToggleTimer = 0; + } + + // CUSTOM------------------- + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this); + if (stats.getLandingTicks() > 0) + { + this.movementInput.moveStrafe *= 0.5F; + this.movementInput.moveForward *= 0.5F; + } + // -----------END CUSTOM + + this.pushOutOfBlocks(this.posX - this.width * 0.35D, this.getEntityBoundingBox().minY + 0.5D, this.posZ + this.width * 0.35D); + this.pushOutOfBlocks(this.posX - this.width * 0.35D, this.getEntityBoundingBox().minY + 0.5D, this.posZ - this.width * 0.35D); + this.pushOutOfBlocks(this.posX + this.width * 0.35D, this.getEntityBoundingBox().minY + 0.5D, this.posZ - this.width * 0.35D); + this.pushOutOfBlocks(this.posX + this.width * 0.35D, this.getEntityBoundingBox().minY + 0.5D, this.posZ + this.width * 0.35D); + boolean flag4 = this.getFoodStats().getFoodLevel() > 6.0F || this.capabilities.allowFlying; + + if (this.onGround && !flag1 && !flag2 && this.movementInput.moveForward >= 0.8F && !this.isSprinting() && flag4 && !this.isHandActive() && !this.isPotionActive(MobEffects.BLINDNESS)) + { + if (this.sprintToggleTimer <= 0 && !this.mc.gameSettings.keyBindSprint.isKeyDown()) + { + this.sprintToggleTimer = 7; + } else + { + this.setSprinting(true); + } + } + + if (!this.isSprinting() && this.movementInput.moveForward >= sprintlevel && flag4 && !this.isHandActive() && !this.isPotionActive(MobEffects.BLINDNESS) && this.mc.gameSettings.keyBindSprint.isKeyDown()) + { + this.setSprinting(true); + } + + if (this.isSprinting() && (this.movementInput.moveForward < sprintlevel || this.collidedHorizontally || !flag4)) + { + this.setSprinting(false); + } + + // Omit flying toggles - flying will be controlled by freefall + // status + + if (this.capabilities.isFlying && this.isCurrentViewEntity()) + { + if (this.movementInput.sneak) + { + this.motionY -= this.capabilities.getFlySpeed() * 3.0F; + } + + if (this.movementInput.jump) + { + this.motionY += this.capabilities.getFlySpeed() * 3.0F; + } + } + + // Omit horse jumping - no horse jumping in space! + + // -from: EntityPlayer + + // Omit fly toggle timer + + if (this.world.getDifficulty() == EnumDifficulty.PEACEFUL && this.world.getGameRules().getBoolean("naturalRegeneration")) + { + if (this.getHealth() < this.getMaxHealth() && this.ticksExisted % 20 == 0) + { + this.heal(1.0F); + } + + if (this.foodStats.needFood() && this.ticksExisted % 10 == 0) + { + this.foodStats.setFoodLevel(this.foodStats.getFoodLevel() + 1); + } + } + + this.inventory.decrementAnimations(); + this.prevCameraYaw = this.cameraYaw; + + // from: EntityLivingBase + if (this.newPosRotationIncrements > 0) + { + double d0 = this.posX + (this.interpTargetX - this.posX) / this.newPosRotationIncrements; + double d1 = this.posY + (this.interpTargetY - this.posY) / this.newPosRotationIncrements; + double d2 = this.posZ + (this.interpTargetZ - this.posZ) / this.newPosRotationIncrements; + double d3 = MathHelper.wrapDegrees(this.interpTargetYaw - this.rotationYaw); + this.rotationYaw = (float) (this.rotationYaw + d3 / this.newPosRotationIncrements); + this.rotationPitch = (float) (this.rotationPitch + (this.interpTargetPitch - this.rotationPitch) / this.newPosRotationIncrements); + --this.newPosRotationIncrements; + this.setPosition(d0, d1, d2); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else if (!this.isServerWorld()) + { + this.motionX *= 0.98D; + this.motionY *= 0.98D; + this.motionZ *= 0.98D; + } + + if (Math.abs(this.motionX) < 0.005D) + { + this.motionX = 0.0D; + } + + if (Math.abs(this.motionY) < 0.005D) + { + this.motionY = 0.0D; + } + + if (Math.abs(this.motionZ) < 0.005D) + { + this.motionZ = 0.0D; + } + + this.world.profiler.startSection("ai"); + + if (this.isMovementBlocked()) + { + this.isJumping = false; + this.moveStrafing = 0.0F; + this.moveForward = 0.0F; + this.randomYawVelocity = 0.0F; + } else + this.updateEntityActionState(); + + this.world.profiler.endSection(); + this.world.profiler.startSection("travel"); + this.moveStrafing *= 0.98F; + this.moveForward *= 0.98F; + this.randomYawVelocity *= 0.9F; + + // CUSTOM-------------- + AxisAlignedBB aABB = this.getEntityBoundingBox(); + if ((aABB.minY % 1D) == 0.5D) + this.setEntityBoundingBox(aABB.offset(0D, 0.00001D, 0D)); + // -----------END CUSTOM + + // NOTE: No Elytra movement from this.updateElytra() in a zero G + // dimension + this.travel(this.moveStrafing, this.moveVertical, this.moveForward); + this.world.profiler.endSection(); + this.world.profiler.startSection("push"); + + if (!this.world.isRemote) + { + this.collideWithNearbyEntities(); + } + + this.world.profiler.endSection(); + + // -from: EntityPlayer + + // Omit IAttributeInstance - seems relevant only on server + + // Omit this.jumpMovementFactor = this.speedInAir; + // (no bounding in space) + + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + float f1 = (float) (Math.atan(-this.motionY * 0.20000000298023224D) * 15.0D); + + if (f > 0.1F) + { + f = 0.1F; + } + + if (!this.onGround || this.getHealth() <= 0.0F) + { + f = 0.0F; + } + + if (this.onGround || this.getHealth() <= 0.0F) + { + f1 = 0.0F; + } + + this.cameraYaw += (f - this.cameraYaw) * 0.4F; + this.cameraPitch += (f1 - this.cameraPitch) * 0.8F; + + if (this.getHealth() > 0.0F && !this.isSpectator()) + { + AxisAlignedBB axisalignedbb = null; + + if (this.getRidingEntity() != null && !this.getRidingEntity().isDead) + { + axisalignedbb = this.getEntityBoundingBox().union(this.getRidingEntity().getEntityBoundingBox()).grow(1.0D, 0.0D, 1.0D); + } else + { + axisalignedbb = this.getEntityBoundingBox().grow(1.0D, 0.5D, 1.0D); + } + + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, axisalignedbb); + + for (Entity entity : list) + { + if (!entity.isDead) + { + entity.onCollideWithPlayer(this); + } + } + } + + // from: EntityPlayerSP + // (modified CUSTOM) + if (this.lastIsFlying != this.capabilities.isFlying) + { + this.lastIsFlying = this.capabilities.isFlying; + this.sendPlayerAbilities(); + } + } else + { + super.onLivingUpdate(); + } + } catch (RuntimeException e) + { + GalacticraftCore.logger.error(e, + "A mod has crashed while Minecraft was doing a normal player tick update. See details below. GCEntityClientPlayerMP is in this because that is the player class name when Galacticraft is installed. This is =*NOT*= a bug in Galacticraft, please report it to the mod indicated by the first lines of the crash report."); + throw (e); + } + ClientProxyCore.playerClientHandler.onLivingUpdatePost(this); + } + + @Override + public void move(MoverType type, double x, double y, double z) + { + super.move(type, x, y, z); + ClientProxyCore.playerClientHandler.move(this, type, x, y, z); + } + + @Override + public void onUpdate() + { + ClientProxyCore.playerClientHandler.onUpdate(this); + super.onUpdate(); + } + + @Override + public boolean isSneaking() + { + if (this.world.provider instanceof IZeroGDimension) + { + ZeroGravityEvent zeroGEvent = new ZeroGravityEvent.SneakOverride(this); + MinecraftForge.EVENT_BUS.post(zeroGEvent); + if (zeroGEvent.isCanceled()) + { + return super.isSneaking(); + } + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this); + if (stats.getLandingTicks() > 0) + { + if (this.lastLandingTicks == 0) + this.lastLandingTicks = stats.getLandingTicks(); + + this.sneakLast = stats.getLandingTicks() < this.lastLandingTicks; + return sneakLast; + } + this.lastLandingTicks = 0; + if (stats.getFreefallHandler().pjumpticks > 0) + { + this.sneakLast = true; + return true; + } + if (EventHandlerClient.sneakRenderOverride) + { + if (this.movementInput != null && this.movementInput.sneak != this.sneakLast) + { + return false; + } + if (stats.isInFreefall() || stats.getFreefallHandler().onWall) + { + this.sneakLast = false; + return false; + } + } + this.sneakLast = this.movementInput == null ? false : this.movementInput.sneak; + } else + { + this.sneakLast = false; + if (EventHandlerClient.sneakRenderOverride && this.onGround && this.inventory.getCurrentItem() != null && this.inventory.getCurrentItem().getItem() instanceof IHoldableItem && !(this.getRidingEntity() instanceof ICameraZoomEntity)) + { + IHoldableItem holdableItem = (IHoldableItem) this.inventory.getCurrentItem().getItem(); + + if (holdableItem.shouldCrouch(this)) + { + return true; + } + } + } + return super.isSneaking(); + } + + @Override + public float getEyeHeight() + { + float f = eyeHeight; + + if (this.isPlayerSleeping()) + { + return 0.2F; + } + + float ySize = 0.0F; + if (this.world.provider instanceof IZeroGDimension) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this); + if (stats.getLandingTicks() > 0) + { + ySize = stats.getLandingYOffset()[stats.getLandingTicks()]; + if (this.movementInput.sneak && ySize < 0.08F) + { + ySize = 0.08F; + } + } else if (stats.getFreefallHandler().pjumpticks > 0) + { + ySize = 0.01F * stats.getFreefallHandler().pjumpticks; + } else if (this.isSneaking() && !stats.isInFreefall() && !stats.getFreefallHandler().onWall) + { + ySize = 0.08F; + } + } else if (this.isSneaking() && this.movementInput != null && this.movementInput.sneak) + { + ySize = 0.08F; + } + + return f - ySize; + } + + @Override + @SideOnly(Side.CLIENT) + public float getBedOrientationInDegrees() + { + return ClientProxyCore.playerClientHandler.getBedOrientationInDegrees(this, super.getBedOrientationInDegrees()); + } + + @Override + public ResourceLocation getLocationCape() + { + if (this.getRidingEntity() instanceof EntitySpaceshipBase) + { + // Don't draw any cape if riding a rocket (the cape renders outside the rocket model!) + return null; + } + + ResourceLocation vanillaCape = super.getLocationCape(); + + if (!this.checkedCape) + { + NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); + this.galacticraftCape = ClientProxyCore.capeMap.get(networkplayerinfo.getGameProfile().getId().toString().replace("-", "")); + this.checkedCape = true; + } + + if ((ConfigManagerCore.overrideCapes || vanillaCape == null) && galacticraftCape != null) + { + return galacticraftCape; + } + + return vanillaCape; + } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double offset = this.posY + this.getEyeHeight(); + if (offset > 255D) + offset = 255D; + BlockPos blockpos = new BlockPos(this.posX, offset, this.posZ); + return this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityOtherPlayerMP.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityOtherPlayerMP.java new file mode 100644 index 00000000..20a904d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityOtherPlayerMP.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import com.mojang.authlib.GameProfile; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.client.entity.EntityOtherPlayerMP; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GCEntityOtherPlayerMP extends EntityOtherPlayerMP +{ + + private boolean checkedCape = false; + private ResourceLocation galacticraftCape = null; + + public GCEntityOtherPlayerMP(World par1World, GameProfile profile) + { + super(par1World, profile); + } + + @Override + public ResourceLocation getLocationCape() + { + if (this.getRidingEntity() instanceof EntitySpaceshipBase) + { + // Don't draw any cape if riding a rocket (the cape renders outside the rocket model!) + return null; + } + + ResourceLocation vanillaCape = super.getLocationCape(); + + if (!this.checkedCape) + { + NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); + this.galacticraftCape = ClientProxyCore.capeMap.get(networkplayerinfo.getGameProfile().getId().toString().replace("-", "")); + this.checkedCape = true; + } + + if ((ConfigManagerCore.overrideCapes || vanillaCape == null) && galacticraftCape != null) + { + return galacticraftCape; + } + + return vanillaCape; + } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double h = this.posY + this.getEyeHeight(); + if (h > 255D) + h = 255D; + BlockPos blockpos = new BlockPos(this.posX, h, this.posZ); + return this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + } + + @Override + public boolean isSneaking() + { + if (EventHandlerClient.sneakRenderOverride && !(this.world.provider instanceof IZeroGDimension)) + { + if (this.onGround && this.inventory.getCurrentItem() != null && this.inventory.getCurrentItem().getItem() instanceof IHoldableItem + && !(this.getRidingEntity() instanceof ICameraZoomEntity)) + { + IHoldableItem holdableItem = (IHoldableItem) this.inventory.getCurrentItem().getItem(); + + if (holdableItem.shouldCrouch(this)) + { + return true; + } + } + } + return super.isSneaking(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java new file mode 100644 index 00000000..e388760d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import com.mojang.authlib.GameProfile; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.management.PlayerInteractionManager; +import net.minecraft.util.DamageSource; +import net.minecraft.world.WorldServer; + +/** + * This class provides various hooks which are missing from Forge or don't quite + * do what we need.

Do not reference this or test 'instance of' this in + * your code: if PlayerAPI is installed, GCEntityPlayerMP will not be used. + */ +public class GCEntityPlayerMP extends EntityPlayerMP +{ + + public GCEntityPlayerMP(MinecraftServer server, WorldServer world, GameProfile profile, PlayerInteractionManager interactionManager) + { + super(server, world, profile, interactionManager); +// if (this.world != world) +// { +// GCPlayerStats.get(this).setStartDimension(WorldUtil.getDimensionName(this.world.provider)); +// } + } + + @Override + public void updateRidden() + { + GalacticraftCore.proxy.player.updateRiddenPre(this); + super.updateRidden(); + GalacticraftCore.proxy.player.updateRiddenPost(this); + } + + @Override + public void dismountRidingEntity() + { + if (!GalacticraftCore.proxy.player.dismountEntity(this, this.getRidingEntity())) + { + super.dismountRidingEntity(); + } + } + + @Override + public void move(MoverType type, double x, double y, double z) + { + super.move(type, x, y, z); + GalacticraftCore.proxy.player.move(this, type, x, y, z); + } + + @Override + public void wakeUpPlayer(boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + if (GalacticraftCore.proxy.player.wakeUpPlayer(this, immediately, updateWorldFlag, setSpawn)) + { + return; + } + super.wakeUpPlayer(immediately, updateWorldFlag, setSpawn); + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + par2 = GalacticraftCore.proxy.player.attackEntityFrom(this, par1DamageSource, par2); + return par2 != -1F && super.attackEntityFrom(par1DamageSource, par2); + } + + @Override + public void knockBack(Entity p_70653_1_, float p_70653_2_, double impulseX, double impulseZ) + { + GalacticraftCore.proxy.player.knockBack(this, p_70653_1_, p_70653_2_, impulseX, impulseZ); + } + + @Override + public boolean isSpectator() + { + return GalacticraftCore.proxy.player.isSpectator(this) || super.isSpectator(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseMP.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseMP.java new file mode 100644 index 00000000..fd676f33 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseMP.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import api.player.server.ServerPlayerAPI; +import api.player.server.ServerPlayerBase; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.util.DamageSource; + +public class GCPlayerBaseMP extends ServerPlayerBase +{ + + public GCPlayerBaseMP(ServerPlayerAPI playerAPI) + { + super(playerAPI); + } + + private IPlayerServer getClientHandler() + { + return GalacticraftCore.proxy.player; + } + +// @Override +// public void updateRidden() +// { +// this.getClientHandler().updateRiddenPre(this); +// super.updateRidden(); +// this.getClientHandler().updateRiddenPost(this); +// } +// +// @Override +// public void mountEntity(Entity par1Entity) +// { +// if (!this.getClientHandler().mountEntity(this, par1Entity)) +// { +// super.mountEntity(par1Entity); +// } +// } + + @Override + public void moveEntity(MoverType moverType, double x, double y, double z) + { + super.moveEntity(moverType, x, y, z); + this.getClientHandler().move(this.player, moverType, x, y, z); + } + + @Override + public void wakeUpPlayer(boolean par1, boolean par2, boolean par3) + { + if (!this.getClientHandler().wakeUpPlayer(this.player, par1, par2, par3)) + { + super.wakeUpPlayer(par1, par2, par3); + } + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + par2 = this.getClientHandler().attackEntityFrom(this.player, par1DamageSource, par2); + + if (par2 == -1) + { + return false; + } + + return super.attackEntityFrom(par1DamageSource, par2); + } + + @Override + public void knockBack(Entity p_70653_1_, float p_70653_2_, double impulseX, double impulseZ) + { + this.getClientHandler().knockBack(this.player, p_70653_1_, p_70653_2_, impulseX, impulseZ); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseSP.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseSP.java new file mode 100644 index 00000000..20940a1d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerBaseSP.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import api.player.client.ClientPlayerAPI; +import api.player.client.ClientPlayerBase; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import net.minecraft.entity.MoverType; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class GCPlayerBaseSP extends ClientPlayerBase +{ + + boolean lastIsFlying; + int lastLandingTicks; + + public GCPlayerBaseSP(ClientPlayerAPI playerAPI) + { + super(playerAPI); + } + + private IPlayerClient getClientHandler() + { + return ClientProxyCore.playerClientHandler; + } + +// @Override +// public void wakeUpPlayer(boolean par1, boolean par2, boolean par3) +// { +// if (!this.getClientHandler().wakeUpPlayer(this, par1, par2, par3)) +// { +// super.wakeUpPlayer(par1, par2, par3); +// } +// } + + @Override + public boolean isEntityInsideOpaqueBlock() + { + return this.getClientHandler().isEntityInsideOpaqueBlock(this.player, super.isEntityInsideOpaqueBlock()); + } + + @Override + public void onLivingUpdate() + { + this.getClientHandler().onLivingUpdatePre(this.player); + super.onLivingUpdate(); + this.getClientHandler().onLivingUpdatePost(this.player); + } + + @Override + public void beforeUpdateEntityActionState() + { + if (this.player.world.provider instanceof IZeroGDimension) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this.player); + if (stats.getLandingTicks() > 0) + { + this.player.movementInput.moveStrafe *= 0.5F; + this.player.movementInput.moveForward *= 0.5F; + } + + // TODO: equivalent to getEyeHeight() in GCEntityClientPlayerMP + + // TODO: set this.player.flyToggleTimer = 0; + } + } + + @Override + public void afterUpdateEntityActionState() + { + if (this.player.world.provider instanceof IZeroGDimension) + { + this.player.setJumping(false); + AxisAlignedBB aABB = this.player.getEntityBoundingBox(); + if ((aABB.minY % 1D) == 0.5D) + this.player.setEntityBoundingBox(aABB.offset(0D, 0.00001D, 0D)); + } + } + + @Override + public void moveEntity(MoverType moverType, double x, double y, double z) + { + super.moveEntity(moverType, x, y, z); + this.getClientHandler().move(this.player, moverType, x, y, z); + } + + @Override + public void afterMoveEntityWithHeading(float paramFloat1, float paramFloat2, float paramFloat3) + { + super.afterMoveEntityWithHeading(paramFloat1, paramFloat2, paramFloat3); + + if (CompatibilityManager.isSmartMovingLoaded && !this.player.capabilities.isFlying) + { + this.player.motionY += 0.080000000000000002D; + this.player.motionY -= TransformerHooks.getGravityForEntity(this.player); + } + } + + @Override + public void onUpdate() + { + this.getClientHandler().onUpdate(this.player); + super.onUpdate(); + } + + @Override + public boolean isSneaking() + { + if (this.player.world.provider instanceof IZeroGDimension) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(this.player); + if (stats.getLandingTicks() > 0) + { + if (this.lastLandingTicks == 0) + this.lastLandingTicks = stats.getLandingTicks(); + + return stats.getLandingTicks() < this.lastLandingTicks; + } else + this.lastLandingTicks = 0; + + if (stats.getFreefallHandler().pjumpticks > 0) + return true; + + if (EventHandlerClient.sneakRenderOverride) + { + if (stats.getFreefallHandler().testFreefall(this.player)) + return false; + if (stats.isInFreefall()) + return false; + } + } + return super.isSneaking(); + } + +// @Override +// @SideOnly(Side.CLIENT) +// public float getBedOrientationInDegrees() +// { +// return this.getClientHandler().getBedOrientationInDegrees(this, super.getBedOrientationInDegrees()); +// } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + double height = this.player.posY + (double) this.player.getEyeHeight(); + if (height > 255D) + height = 255D; + BlockPos blockpos = new BlockPos(this.player.posX, height, this.player.posZ); + return this.player.world.isBlockLoaded(blockpos) ? this.player.world.getCombinedLight(blockpos, 0) : 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerHandler.java new file mode 100644 index 00000000..c94fbfa9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerHandler.java @@ -0,0 +1,1621 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.UUID; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.MobEffects; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.AttachCapabilitiesEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.server.permission.PermissionAPI; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.event.oxygen.GCCoreOxygenSuffocationEvent; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.item.IArmorCorrosionResistant; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.item.IItemThermal; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.entities.EntityParachest; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemArmorAsteroids; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +public class GCPlayerHandler +{ + + private static final int OXYGENHEIGHTLIMIT = 450; + public static final int GEAR_NOT_PRESENT = -1; + + private List torchItemsSpace = new ArrayList<>(2); + private List torchItemsRegular = new ArrayList<>(2); + private List itemChangesPre = new ArrayList<>(6); + private List itemChangesPost = new ArrayList<>(6); + private static HashMap deathTimes = new HashMap<>(); + + @SubscribeEvent + public void onPlayerLogin(PlayerLoggedInEvent event) + { + if (event.player instanceof EntityPlayerMP) + { + this.onPlayerLogin((EntityPlayerMP) event.player); + } + } + + @SubscribeEvent + public void onPlayerCloned(PlayerEvent.Clone event) + { + GCPlayerStats oldStats = GCPlayerStats.get(event.getOriginal()); + GCPlayerStats newStats = GCPlayerStats.get(event.getEntityPlayer()); + newStats.copyFrom(oldStats, !event.isWasDeath() || event.getOriginal().world.getGameRules().getBoolean("keepInventory")); + if (event.getOriginal() instanceof EntityPlayerMP && event.getEntityPlayer() instanceof EntityPlayerMP) + { + TileEntityTelemetry.updateLinkedPlayer((EntityPlayerMP) event.getOriginal(), (EntityPlayerMP) event.getEntityPlayer()); + } + if (event.isWasDeath() && event.getOriginal() instanceof EntityPlayerMP) + { + UUID uu = event.getOriginal().getPersistentID(); + if (event.getOriginal().world.provider instanceof IGalacticraftWorldProvider) + { + Integer timeA = deathTimes.get(uu); + int bb = ((EntityPlayerMP) event.getOriginal()).server.getTickCounter(); + if (timeA != null && (bb - timeA) < 1500) + { + String msg = EnumColor.YELLOW + GCCoreUtil.translate("commands.gchouston.help.1") + " " + EnumColor.WHITE + GCCoreUtil.translate("commands.gchouston.help.2"); + event.getOriginal().sendMessage(new TextComponentString(msg)); + } + deathTimes.put(uu, bb); + } + else + { + deathTimes.remove(uu); + } + } + } + + @SubscribeEvent + public void onAttachCapability(AttachCapabilitiesEvent event) + { + if (event.getObject() instanceof EntityPlayerMP) + { + event.addCapability(GCCapabilities.GC_PLAYER_PROP, new CapabilityProviderStats((EntityPlayerMP) event.getObject())); + } + else if (event.getObject() instanceof EntityPlayer && ((EntityPlayer) event.getObject()).world.isRemote) + { + this.onAttachCapabilityClient(event); + } + } + + @SideOnly(Side.CLIENT) + private void onAttachCapabilityClient(AttachCapabilitiesEvent event) + { + if (event.getObject() instanceof EntityPlayerSP) + { + event.addCapability(GCCapabilities.GC_PLAYER_CLIENT_PROP, new CapabilityProviderStatsClient((EntityPlayerSP) event.getObject())); + } + } + + // @SubscribeEvent + // public void onEntityConstructing(EntityEvent.EntityConstructing event) + // { + // if (event.getEntity() instanceof EntityPlayerMP && GCPlayerStats.get((EntityPlayerMP) event.getEntity()) == null) + // { + // GCPlayerStats.register((EntityPlayerMP) event.getEntity()); + // } + // + // if (event.entity instanceof EntityPlayer && event.entity.world.isRemote) + // { + // this.onEntityConstructingClient(event); + // } + // } + // + // @SideOnly(Side.CLIENT) + // public void onEntityConstructingClient(EntityEvent.EntityConstructing event) + // { + // if (event.getEntity() instanceof EntityPlayerSP) + // { + // if (GCPlayerStatsClient.get((EntityPlayerSP) event.getEntity()) == null) + // { + // GCPlayerStatsClient.register((EntityPlayerSP) event.getEntity()); + // } + // + // Minecraft.getMinecraft().gameSettings.sendSettingsToServer(); + // } + // } + + private void onPlayerLogin(EntityPlayerMP player) + { + // GCPlayerStats oldData = this.playerStatsMap.remove(player.getPersistentID()); + // if (oldData != null) + // { + // oldData.saveNBTData(player.getEntityData()); + // } + + GCPlayerStats stats = GCPlayerStats.get(player); + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_GET_CELESTIAL_BODY_LIST, GCCoreUtil.getDimensionID(player.world), new Object[] {}), player); + int repeatCount = stats.getBuildFlags() >> 9; + if (repeatCount < 3) + { + stats.setBuildFlags(stats.getBuildFlags() & 1536); + } + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_STATS, GCCoreUtil.getDimensionID(player.world), stats.getMiscNetworkedStats()), player); + ColorUtil.sendUpdatedColorsToPlayer(stats); + } + + // private void onPlayerLogout(EntityPlayerMP player) + // { + // } + // + // private void onPlayerRespawn(EntityPlayerMP player) + // { + // GCPlayerStats oldData = this.playerStatsMap.remove(player.getPersistentID()); + // GCPlayerStats stats = GCPlayerStats.get(player); + // + // if (oldData != null) + // { + // stats.copyFrom(oldData, false); + // } + // + // stats.player = new WeakReference(player); + // } + + public static void checkGear(EntityPlayerMP player, GCPlayerStats stats, boolean forceSend) + { + stats.setMaskInSlot(stats.getExtendedInventory().getStackInSlot(0)); + stats.setGearInSlot(stats.getExtendedInventory().getStackInSlot(1)); + stats.setTankInSlot1(stats.getExtendedInventory().getStackInSlot(2)); + stats.setTankInSlot2(stats.getExtendedInventory().getStackInSlot(3)); + stats.setParachuteInSlot(stats.getExtendedInventory().getStackInSlot(4)); + stats.setFrequencyModuleInSlot(stats.getExtendedInventory().getStackInSlot(5)); + stats.setThermalHelmetInSlot(stats.getExtendedInventory().getStackInSlot(6)); + stats.setThermalChestplateInSlot(stats.getExtendedInventory().getStackInSlot(7)); + stats.setThermalLeggingsInSlot(stats.getExtendedInventory().getStackInSlot(8)); + stats.setThermalBootsInSlot(stats.getExtendedInventory().getStackInSlot(9)); + stats.setShieldControllerInSlot(stats.getExtendedInventory().getStackInSlot(10)); + // + + if (stats.getFrequencyModuleInSlot() != stats.getLastFrequencyModuleInSlot() || forceSend) + { + if (player.server != null) + { + if (stats.getFrequencyModuleInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.FREQUENCY_MODULE); + TileEntityTelemetry.frequencyModulePlayer(stats.getLastFrequencyModuleInSlot(), player, true); + } + else if (stats.getLastFrequencyModuleInSlot().isEmpty()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getFrequencyModuleInSlot(), EnumExtendedInventorySlot.FREQUENCY_MODULE); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.FREQUENCY_MODULE, gearID); + TileEntityTelemetry.frequencyModulePlayer(stats.getFrequencyModuleInSlot(), player, false); + } + } + } + + stats.setLastFrequencyModuleInSlot(stats.getFrequencyModuleInSlot()); + } + + // + + if (stats.getMaskInSlot() != stats.getLastMaskInSlot() || forceSend) + { + if (stats.getMaskInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.MASK); + } + else if (stats.getLastMaskInSlot().isEmpty() || forceSend) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getMaskInSlot(), EnumExtendedInventorySlot.MASK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.MASK, gearID); + } + } + + stats.setLastMaskInSlot(stats.getMaskInSlot()); + } + + // + + if (stats.getGearInSlot() != stats.getLastGearInSlot() || forceSend) + { + if (stats.getGearInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.GEAR); + } + else if (stats.getGearInSlot().getItem() == GCItems.oxygenGear && (stats.getLastGearInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getGearInSlot(), EnumExtendedInventorySlot.GEAR); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.GEAR, gearID); + } + } + + stats.setLastGearInSlot(stats.getGearInSlot()); + } + + // + + if (stats.getTankInSlot1() != stats.getLastTankInSlot1() || forceSend) + { + if (stats.getTankInSlot1().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.LEFT_TANK); + stats.setAirRemaining(0); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + else if (stats.getLastTankInSlot1().isEmpty() || forceSend) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot1(), EnumExtendedInventorySlot.LEFT_TANK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.LEFT_TANK, gearID); + } + if (!stats.getMaskInSlot().isEmpty() && !stats.getGearInSlot().isEmpty()) + { + stats.setAirRemaining(stats.getTankInSlot1().getMaxDamage() - stats.getTankInSlot1().getItemDamage()); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + } + // if the else is reached then both tankInSlot and lastTankInSlot + // are non-null + else if (stats.getTankInSlot1().getItem() != stats.getLastTankInSlot1().getItem()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot1(), EnumExtendedInventorySlot.LEFT_TANK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.LEFT_TANK, gearID); + } + if (!stats.getMaskInSlot().isEmpty() && !stats.getGearInSlot().isEmpty()) + { + stats.setAirRemaining(stats.getTankInSlot1().getMaxDamage() - stats.getTankInSlot1().getItemDamage()); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + } + + stats.setLastTankInSlot1(stats.getTankInSlot1()); + } + + // + + if (stats.getTankInSlot2() != stats.getLastTankInSlot2() || forceSend) + { + if (stats.getTankInSlot2().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.RIGHT_TANK); + stats.setAirRemaining2(0); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + else if (stats.getLastTankInSlot2().isEmpty() || forceSend) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot2(), EnumExtendedInventorySlot.RIGHT_TANK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.RIGHT_TANK, gearID); + } + if (!stats.getMaskInSlot().isEmpty() && !stats.getGearInSlot().isEmpty()) + { + stats.setAirRemaining2(stats.getTankInSlot2().getMaxDamage() - stats.getTankInSlot2().getItemDamage()); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + } + // if the else is reached then both tankInSlot and lastTankInSlot + // are non-null + else if (stats.getTankInSlot2().getItem() != stats.getLastTankInSlot2().getItem()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot2(), EnumExtendedInventorySlot.RIGHT_TANK); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.RIGHT_TANK, gearID); + } + if (!stats.getMaskInSlot().isEmpty() && !stats.getGearInSlot().isEmpty()) + { + stats.setAirRemaining2(stats.getTankInSlot2().getMaxDamage() - stats.getTankInSlot2().getItemDamage()); + GCPlayerHandler.sendAirRemainingPacket(player, stats); + } + } + + stats.setLastTankInSlot2(stats.getTankInSlot2()); + } + + // + + if (stats.getParachuteInSlot() != stats.getLastParachuteInSlot() || forceSend) + { + if (stats.isUsingParachute()) + { + if (stats.getParachuteInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.PARACHUTE); + } + else if (forceSend || stats.getLastParachuteInSlot().isEmpty() || stats.getParachuteInSlot().getItemDamage() != stats.getLastParachuteInSlot().getItemDamage()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getParachuteInSlot(), EnumExtendedInventorySlot.PARACHUTE); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.PARACHUTE, stats.getParachuteInSlot().getItemDamage()); + } + } + } + + stats.setLastParachuteInSlot(stats.getParachuteInSlot()); + } + + // + + if (stats.getThermalHelmetInSlot() != stats.getLastThermalHelmetInSlot() || forceSend) + { + ThermalArmorEvent armorEvent = new ThermalArmorEvent(0, stats.getThermalHelmetInSlot()); + MinecraftForge.EVENT_BUS.post(armorEvent); + + if (armorEvent.armorResult != ThermalArmorEvent.ArmorAddResult.NOTHING) + { + if (stats.getThermalHelmetInSlot().isEmpty() || armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.REMOVE) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.THERMAL_HELMET); + } + else if (armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.ADD && (stats.getLastThermalHelmetInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getThermalHelmetInSlot(), EnumExtendedInventorySlot.THERMAL_HELMET); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.THERMAL_HELMET, gearID); + } + } + } + + stats.setLastThermalHelmetInSlot(stats.getThermalHelmetInSlot()); + } + + if (stats.getThermalChestplateInSlot() != stats.getLastThermalChestplateInSlot() || forceSend) + { + ThermalArmorEvent armorEvent = new ThermalArmorEvent(1, stats.getThermalChestplateInSlot()); + MinecraftForge.EVENT_BUS.post(armorEvent); + + if (armorEvent.armorResult != ThermalArmorEvent.ArmorAddResult.NOTHING) + { + if (stats.getThermalChestplateInSlot().isEmpty() || armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.REMOVE) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.THERMAL_CHESTPLATE); + } + else if (armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.ADD && (stats.getLastThermalChestplateInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getThermalChestplateInSlot(), EnumExtendedInventorySlot.THERMAL_CHESTPLATE); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.THERMAL_CHESTPLATE, gearID); + } + } + } + + stats.setLastThermalChestplateInSlot(stats.getThermalChestplateInSlot()); + } + + if (stats.getThermalLeggingsInSlot() != stats.getLastThermalLeggingsInSlot() || forceSend) + { + ThermalArmorEvent armorEvent = new ThermalArmorEvent(2, stats.getThermalLeggingsInSlot()); + MinecraftForge.EVENT_BUS.post(armorEvent); + + if (armorEvent.armorResult != ThermalArmorEvent.ArmorAddResult.NOTHING) + { + if (stats.getThermalLeggingsInSlot().isEmpty() || armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.REMOVE) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.THERMAL_LEGGINGS); + } + else if (armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.ADD && (stats.getLastThermalLeggingsInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getThermalLeggingsInSlot(), EnumExtendedInventorySlot.THERMAL_LEGGINGS); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.THERMAL_LEGGINGS, gearID); + } + } + } + + stats.setLastThermalLeggingsInSlot(stats.getThermalLeggingsInSlot()); + } + + if (stats.getThermalBootsInSlot() != stats.getLastThermalBootsInSlot() || forceSend) + { + ThermalArmorEvent armorEvent = new ThermalArmorEvent(3, stats.getThermalBootsInSlot()); + MinecraftForge.EVENT_BUS.post(armorEvent); + + if (armorEvent.armorResult != ThermalArmorEvent.ArmorAddResult.NOTHING) + { + if (stats.getThermalBootsInSlot().isEmpty() || armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.REMOVE) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.THERMAL_BOOTS); + } + else if (armorEvent.armorResult == ThermalArmorEvent.ArmorAddResult.ADD && (stats.getLastThermalBootsInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getThermalBootsInSlot(), EnumExtendedInventorySlot.THERMAL_BOOTS); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.THERMAL_BOOTS, gearID); + } + } + } + + stats.setLastThermalBootsInSlot(stats.getThermalBootsInSlot()); + } + + if ((stats.getShieldControllerInSlot() != stats.getLastShieldControllerInSlot() || forceSend)) + { + if (stats.getShieldControllerInSlot().isEmpty()) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.SHIELD_CONTROLLER); + } + else if (stats.getShieldControllerInSlot().getItem() == VenusItems.basicItem && (stats.getLastShieldControllerInSlot().isEmpty() || forceSend)) + { + int gearID = GalacticraftRegistry.findMatchingGearID(stats.getShieldControllerInSlot(), EnumExtendedInventorySlot.SHIELD_CONTROLLER); + + if (gearID >= 0) + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.SHIELD_CONTROLLER, gearID); + } + } + + stats.setLastShieldControllerInSlot(stats.getShieldControllerInSlot()); + } + } + + protected void checkThermalStatus(EntityPlayerMP player, GCPlayerStats playerStats) + { + if (player.world.provider instanceof IGalacticraftWorldProvider && !player.capabilities.isCreativeMode && !CompatibilityManager.isAndroid(player)) + { + final ItemStack thermalPaddingHelm = playerStats.getExtendedInventory().getStackInSlot(6); + final ItemStack thermalPaddingChestplate = playerStats.getExtendedInventory().getStackInSlot(7); + final ItemStack thermalPaddingLeggings = playerStats.getExtendedInventory().getStackInSlot(8); + final ItemStack thermalPaddingBoots = playerStats.getExtendedInventory().getStackInSlot(9); + float lowestThermalStrength = 0.0F; + if (!thermalPaddingHelm.isEmpty() && !thermalPaddingChestplate.isEmpty() && !thermalPaddingLeggings.isEmpty() && !thermalPaddingBoots.isEmpty()) + { + if (thermalPaddingHelm.getItem() instanceof IItemThermal) + { + lowestThermalStrength += ((IItemThermal) thermalPaddingHelm.getItem()).getThermalStrength(); + } + if (thermalPaddingChestplate.getItem() instanceof IItemThermal) + { + lowestThermalStrength += ((IItemThermal) thermalPaddingChestplate.getItem()).getThermalStrength(); + } + if (thermalPaddingLeggings.getItem() instanceof IItemThermal) + { + lowestThermalStrength += ((IItemThermal) thermalPaddingLeggings.getItem()).getThermalStrength(); + } + if (thermalPaddingBoots.getItem() instanceof IItemThermal) + { + lowestThermalStrength += ((IItemThermal) thermalPaddingBoots.getItem()).getThermalStrength(); + } + lowestThermalStrength /= 4.0F; + lowestThermalStrength = Math.abs(lowestThermalStrength); // It + // shouldn't + // be + // negative, + // but + // just + // in + // case! + } + + IGalacticraftWorldProvider provider = (IGalacticraftWorldProvider) player.world.provider; + float thermalLevelMod = provider.getThermalLevelModifier(); + float absThermalLevelMod = Math.abs(thermalLevelMod); + + if (absThermalLevelMod > 0D) + { + int thermalLevelCooldownBase = Math.abs(MathHelper.floor(200 / thermalLevelMod)); + int normaliseCooldown = MathHelper.floor(150 / lowestThermalStrength); + int thermalLevelTickCooldown = thermalLevelCooldownBase; + if (thermalLevelTickCooldown < 1) + { + thermalLevelTickCooldown = 1; // Prevent divide by zero + // errors + } + + if (!thermalPaddingHelm.isEmpty() && !thermalPaddingChestplate.isEmpty() && !thermalPaddingLeggings.isEmpty() && !thermalPaddingBoots.isEmpty()) + { + // If the thermal strength exceeds the dimension's thermal + // level mod, it can't improve the normalise + // This factor of 1.5F is chosen so that a combination of + // Tier 1 and Tier 2 thermal isn't enough to normalise on + // Venus (three Tier 2, one Tier 1 stays roughly constant) + float relativeFactor = Math.max(1.0F, absThermalLevelMod / lowestThermalStrength) / 1.5F; + normaliseCooldown = MathHelper.floor(normaliseCooldown / absThermalLevelMod * relativeFactor); + if (normaliseCooldown < 1) + { + normaliseCooldown = 1; // Prevent divide by zero errors + } + // Player is wearing all required thermal padding items + if ((player.ticksExisted - 1) % normaliseCooldown == 0) + { + this.normaliseThermalLevel(player, playerStats, 1); + } + thermalLevelMod /= Math.max(1.0F, lowestThermalStrength / 2.0F); + absThermalLevelMod = Math.abs(thermalLevelMod); + } + + if (OxygenUtil.isAABBInBreathableAirBlock(player, true)) + { + playerStats.setThermalLevelNormalising(true); + this.normaliseThermalLevel(player, playerStats, 1); + // If player is in ambient thermal area, slowly reset to + // normal + return; + } + + // For each piece of thermal equipment being used, slow down the + // the harmful thermal change slightly + if (!thermalPaddingHelm.isEmpty()) + { + thermalLevelTickCooldown += thermalLevelCooldownBase; + } + if (!thermalPaddingChestplate.isEmpty()) + { + thermalLevelTickCooldown += thermalLevelCooldownBase; + } + if (!thermalPaddingLeggings.isEmpty()) + { + thermalLevelTickCooldown += thermalLevelCooldownBase; + } + if (!thermalPaddingBoots.isEmpty()) + { + thermalLevelTickCooldown += thermalLevelCooldownBase; + } + + // Instead of increasing/decreasing the thermal level by a large + // amount every ~200 ticks, increase/decrease + // by a small amount each time (still the same average + // increase/decrease) + int thermalLevelTickCooldownSingle = MathHelper.floor(thermalLevelTickCooldown / absThermalLevelMod); + if (thermalLevelTickCooldownSingle < 1) + { + thermalLevelTickCooldownSingle = 1; // Prevent divide by + // zero errors + } + + if ((player.ticksExisted - 1) % thermalLevelTickCooldownSingle == 0) + { + int last = playerStats.getThermalLevel(); + playerStats.setThermalLevel(Math.min(Math.max(last + (thermalLevelMod < 0 ? -1 : 1), -22), 22)); + + if (playerStats.getThermalLevel() != last) + { + this.sendThermalLevelPacket(player, playerStats); + } + } + + // If the normalisation is outpacing the freeze/overheat + playerStats.setThermalLevelNormalising(thermalLevelTickCooldownSingle > normaliseCooldown && !thermalPaddingHelm.isEmpty() && !thermalPaddingChestplate.isEmpty() && !thermalPaddingLeggings.isEmpty() && !thermalPaddingBoots.isEmpty()); + + if (!playerStats.isThermalLevelNormalising()) + { + if ((player.ticksExisted - 1) % thermalLevelTickCooldown == 0) + { + if (Math.abs(playerStats.getThermalLevel()) >= 22) + { + player.attackEntityFrom(DamageSourceGC.thermal, 1.5F); + } + } + + if (playerStats.getThermalLevel() < -15) + { + player.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 5, 2, true, true)); + } + + if (playerStats.getThermalLevel() > 15) + { + player.addPotionEffect(new PotionEffect(MobEffects.NAUSEA, 5, 2, true, true)); + } + } + } + else + // Normalise thermal level if on Space Station or non-modifier + // planet + { + playerStats.setThermalLevelNormalising(true); + this.normaliseThermalLevel(player, playerStats, 2); + } + } + else + // Normalise thermal level if on Overworld or any non-GC dimension + { + playerStats.setThermalLevelNormalising(true); + this.normaliseThermalLevel(player, playerStats, 3); + } + } + + public void normaliseThermalLevel(EntityPlayerMP player, GCPlayerStats stats, int increment) + { + final int last = stats.getThermalLevel(); + + if (stats.getThermalLevel() < 0) + { + stats.setThermalLevel(stats.getThermalLevel() + Math.min(increment, -stats.getThermalLevel())); + } + else if (stats.getThermalLevel() > 0) + { + stats.setThermalLevel(stats.getThermalLevel() - Math.min(increment, stats.getThermalLevel())); + } + + if (stats.getThermalLevel() != last) + { + this.sendThermalLevelPacket(player, stats); + } + } + + protected void checkShield(EntityPlayerMP playerMP, GCPlayerStats playerStats) + { + if (playerMP.ticksExisted % 20 == 0 && playerMP.world.provider instanceof IGalacticraftWorldProvider) + { + if (((IGalacticraftWorldProvider) playerMP.world.provider).shouldCorrodeArmor()) + { + ItemStack shieldController = playerStats.getExtendedInventory().getStackInSlot(10); + boolean valid = false; + + if (!shieldController.isEmpty()) + { + int gearID = GalacticraftRegistry.findMatchingGearID(shieldController, EnumExtendedInventorySlot.SHIELD_CONTROLLER); + + if (gearID != -1) + { + valid = true; + } + } + + if (!valid) + { + for (ItemStack armor : playerMP.getArmorInventoryList()) + { + if (!armor.isEmpty() && armor.getItem() instanceof ItemArmor && !(armor.getItem() instanceof IArmorCorrosionResistant)) + { + armor.damageItem(1, playerMP); + } + } + } + } + } + } + + protected void checkOxygen(EntityPlayerMP player, GCPlayerStats stats) + { + if ((player.dimension == 0 || player.world.provider instanceof IGalacticraftWorldProvider) && (((player.dimension != 0) && !((IGalacticraftWorldProvider) player.world.provider).hasBreathableAtmosphere()) || player.posY > GCPlayerHandler.OXYGENHEIGHTLIMIT) && !player.capabilities.isCreativeMode && !(player.getRidingEntity() instanceof EntityLanderBase) && !(player.getRidingEntity() instanceof EntityAutoRocket) && !(player.getRidingEntity() instanceof EntityCelestialFake) && !CompatibilityManager.isAndroid(player)) + { + final ItemStack tankInSlot = stats.getExtendedInventory().getStackInSlot(2); + final ItemStack tankInSlot2 = stats.getExtendedInventory().getStackInSlot(3); + + final int drainSpacing = OxygenUtil.getDrainSpacing(tankInSlot, tankInSlot2); + + if (tankInSlot.isEmpty()) + { + stats.setAirRemaining(0); + } + else + { + stats.setAirRemaining(tankInSlot.getMaxDamage() - tankInSlot.getItemDamage()); + } + + if (tankInSlot2.isEmpty()) + { + stats.setAirRemaining2(0); + } + else + { + stats.setAirRemaining2(tankInSlot2.getMaxDamage() - tankInSlot2.getItemDamage()); + } + + if (drainSpacing > 0) + { + if ((player.ticksExisted - 1) % drainSpacing == 0 && !OxygenUtil.isAABBInBreathableAirBlock(player) && !stats.isUsingPlanetSelectionGui()) + { + int toTake = 1; + // Take 1 oxygen from Tank 1 + if (stats.getAirRemaining() > 0) + { + tankInSlot.damageItem(1, player); + stats.setAirRemaining(stats.getAirRemaining() - 1); + toTake = 0; + } + + // Alternatively, take 1 oxygen from Tank 2 + if (toTake > 0 && stats.getAirRemaining2() > 0) + { + tankInSlot2.damageItem(1, player); + stats.setAirRemaining2(stats.getAirRemaining2() - 1); + toTake = 0; + } + } + } + else + { + if ((player.ticksExisted - 1) % 60 == 0) + { + if (OxygenUtil.isAABBInBreathableAirBlock(player)) + { + if (stats.getAirRemaining() < 90 && !tankInSlot.isEmpty()) + { + stats.setAirRemaining(Math.min(stats.getAirRemaining() + 1, tankInSlot.getMaxDamage() - tankInSlot.getItemDamage())); + } + + if (stats.getAirRemaining2() < 90 && !tankInSlot2.isEmpty()) + { + stats.setAirRemaining2(Math.min(stats.getAirRemaining2() + 1, tankInSlot2.getMaxDamage() - tankInSlot2.getItemDamage())); + } + } + else + { + if (stats.getAirRemaining() > 0) + { + stats.setAirRemaining(stats.getAirRemaining() - 1); + } + + if (stats.getAirRemaining2() > 0) + { + stats.setAirRemaining2(stats.getAirRemaining2() - 1); + } + } + } + } + + final boolean airEmpty = stats.getAirRemaining() <= 0 && stats.getAirRemaining2() <= 0; + + if (player.isOnLadder()) + { + stats.setOxygenSetupValid(stats.isLastOxygenSetupValid()); + } + else + { + stats.setOxygenSetupValid(((OxygenUtil.hasValidOxygenSetup(player) && !airEmpty) || OxygenUtil.isAABBInBreathableAirBlock(player))); + } + + if (!player.world.isRemote && player.isEntityAlive()) + { + if (!stats.isOxygenSetupValid()) + { + GCCoreOxygenSuffocationEvent suffocationEvent = new GCCoreOxygenSuffocationEvent.Pre(player); + MinecraftForge.EVENT_BUS.post(suffocationEvent); + + if (!suffocationEvent.isCanceled()) + { + if (stats.getDamageCounter() == 0) + { + stats.setDamageCounter(ConfigManagerCore.suffocationCooldown); + + player.attackEntityFrom(DamageSourceGC.oxygenSuffocation, ConfigManagerCore.suffocationDamage * (2 + stats.getIncrementalDamage()) / 2); + if (ConfigManagerCore.hardMode) + stats.setIncrementalDamage(stats.getIncrementalDamage() + 1); + + GCCoreOxygenSuffocationEvent suffocationEventPost = new GCCoreOxygenSuffocationEvent.Post(player); + MinecraftForge.EVENT_BUS.post(suffocationEventPost); + } + } + else + stats.setOxygenSetupValid(true); + } + else + stats.setIncrementalDamage(0); + } + } + else if ((player.ticksExisted - 1) % 20 == 0 && !player.capabilities.isCreativeMode && stats.getAirRemaining() < 90) + { + stats.setAirRemaining(stats.getAirRemaining() + 1); + stats.setAirRemaining2(stats.getAirRemaining2() + 1); + } + else if (player.capabilities.isCreativeMode) + { + stats.setAirRemaining(90); + stats.setAirRemaining2(90); + } + else + { + stats.setOxygenSetupValid(true); + } + } + + protected void throwMeteors(EntityPlayerMP player) + { + World world = player.world; + if (world.provider instanceof IGalacticraftWorldProvider && !world.isRemote) + { + if (((IGalacticraftWorldProvider) world.provider).getMeteorFrequency() > 0 && ConfigManagerCore.meteorSpawnMod > 0.0) + { + final int f = (int) (((IGalacticraftWorldProvider) world.provider).getMeteorFrequency() * 750D * (1.0 / ConfigManagerCore.meteorSpawnMod)); + + if (world.rand.nextInt(f) == 0) + { + final EntityPlayer closestPlayer = world.getClosestPlayerToEntity(player, 100); + + if (closestPlayer == null || closestPlayer.getEntityId() <= player.getEntityId()) + { + int r = world.getMinecraftServer().getPlayerList().getViewDistance(); + int x, z; + double motX, motZ; + x = world.rand.nextInt(20) + 160; + z = world.rand.nextInt(20) - 10; + motX = world.rand.nextDouble() * 2 - 2.5D; + motZ = world.rand.nextDouble() * 5 - 2.5D; + int px = MathHelper.floor(player.posX); + if ((x + px >> 4) - (px >> 4) >= r) + { + x = ((px >> 4) + r << 4) - 1 - px; + } + + final EntityMeteor meteor = new EntityMeteor(world, player.posX + x, 355D, player.posZ + z, motX, 0, motZ, 1); + + if (!world.isRemote) + { + world.spawnEntity(meteor); + } + } + } + + if (world.rand.nextInt(f * 3) == 0) + { + final EntityPlayer closestPlayer = world.getClosestPlayerToEntity(player, 100); + + if (closestPlayer == null || closestPlayer.getEntityId() <= player.getEntityId()) + { + int r = world.getMinecraftServer().getPlayerList().getViewDistance(); + int x, z; + double motX, motZ; + x = world.rand.nextInt(20) + 160; + z = world.rand.nextInt(20) - 10; + motX = world.rand.nextDouble() * 2 - 2.5D; + motZ = world.rand.nextDouble() * 5 - 2.5D; + int px = MathHelper.floor(player.posX); + if ((x + px >> 4) - (px >> 4) >= r) + { + x = ((px >> 4) + r << 4) - 1 - px; + } + + final EntityMeteor meteor = new EntityMeteor(world, player.posX + x, 355D, player.posZ + z, motX, 0, motZ, 6); + + if (!world.isRemote) + { + world.spawnEntity(meteor); + } + } + } + } + } + } + + private void checkItemAndSwitch(ItemStack currentItem, EntityPlayerMP player, List sourceList, List replaceList, boolean offhand) + { + if (!currentItem.isEmpty() && sourceList.contains(currentItem.getItem())) + { + // Get space torch for this overworld torch + int torchItem = 0; + for (Item i : sourceList) + { + if (i == currentItem.getItem()) + { + ItemStack stack = new ItemStack(replaceList.get(torchItem), currentItem.getCount(), 0); + if (offhand) + { + player.inventory.offHandInventory.set(0, stack); + } + else + { + player.inventory.mainInventory.set(player.inventory.currentItem, stack); + } + break; + } + torchItem++; + } + } + } + + protected void checkCurrentItem(EntityPlayerMP player) + { + ItemStack theCurrentItem = player.inventory.getCurrentItem(); + ItemStack offHandItem = player.getHeldItemOffhand(); + + int postChangeItem = 0; + for (ItemStack i : itemChangesPre) + { + if (!theCurrentItem.isEmpty() && i.getItem() == theCurrentItem.getItem() && i.getItemDamage() == theCurrentItem.getItemDamage()) + { + ItemStack postChange = itemChangesPost.get(postChangeItem).copy(); + postChange.setCount(theCurrentItem.getCount()); + player.inventory.mainInventory.set(player.inventory.currentItem, postChange); + break; + } + if (!offHandItem.isEmpty() && i.getItem() == offHandItem.getItem() && i.getItemDamage() == offHandItem.getItemDamage()) + { + ItemStack postChange = itemChangesPost.get(postChangeItem).copy(); + postChange.setCount(offHandItem.getCount()); + player.inventory.offHandInventory.set(0, postChange); + break; + } + postChangeItem++; + } + if (OxygenUtil.noAtmosphericCombustion(player.world.provider)) + { + checkItemAndSwitch(theCurrentItem, player, torchItemsRegular, torchItemsSpace, false); + checkItemAndSwitch(offHandItem, player, torchItemsRegular, torchItemsSpace, true); + } + else + { + checkItemAndSwitch(theCurrentItem, player, torchItemsSpace, torchItemsRegular, false); + checkItemAndSwitch(offHandItem, player, torchItemsSpace, torchItemsRegular, true); + } + + // If the player is holding a two-handed item in both hands, switch the + // off-hand item out, or drop if necessary + if (!theCurrentItem.isEmpty() && !offHandItem.isEmpty()) + { + if (theCurrentItem.getItem() instanceof IHoldableItem && offHandItem.getItem() instanceof IHoldableItem) + { + int emptyStack = player.inventory.getFirstEmptyStack(); + + if (emptyStack >= 0) + { + ItemStack copyOffHandItem = offHandItem.copy(); + copyOffHandItem.setAnimationsToGo(5); + player.inventory.mainInventory.set(emptyStack, copyOffHandItem); + } + else + { + player.dropItem(offHandItem, false); + } + + player.setItemStackToSlot(EntityEquipmentSlot.OFFHAND, ItemStack.EMPTY); + } + } + } + + public void registerTorchTypes() + { + for (Entry type : BlockUnlitTorch.registeredTorches.entrySet()) + { + // Space Torch registration must be unique; there may be multiple + // mappings for vanillaTorch + torchItemsSpace.add(Item.getItemFromBlock(type.getKey())); + torchItemsRegular.add(Item.getItemFromBlock(type.getValue())); + } + } + + public void registerItemChanges() + { + for (Entry type : GCBlocks.itemChanges.entrySet()) + { + itemChangesPre.add(new ItemStack(type.getKey())); + itemChangesPost.add(new ItemStack(type.getValue())); + } + for (Entry type : GCItems.itemChanges.entrySet()) + { + itemChangesPre.add(type.getKey()); + itemChangesPost.add(type.getValue()); + } + } + + public static void setUsingParachute(EntityPlayerMP player, GCPlayerStats playerStats, boolean tf) + { + playerStats.setUsingParachute(tf); + + if (tf) + { + int subtype = GCPlayerHandler.GEAR_NOT_PRESENT; + + if (!playerStats.getParachuteInSlot().isEmpty()) + { + subtype = playerStats.getParachuteInSlot().getItemDamage(); + } + + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.ADD, EnumExtendedInventorySlot.PARACHUTE, subtype); + } + else + { + GCPlayerHandler.sendGearUpdatePacket(player, EnumModelPacketType.REMOVE, EnumExtendedInventorySlot.PARACHUTE); + } + } + + protected static void updateFeet(EntityPlayerMP player, double motionX, double motionZ) + { + double motionSqrd = motionX * motionX + motionZ * motionZ; + if (motionSqrd > 0.001D && !player.capabilities.isFlying) + { + int iPosX = MathHelper.floor(player.posX); + int iPosY = MathHelper.floor(player.posY - 0.05); + int iPosZ = MathHelper.floor(player.posZ); + + // If the block below is the moon block + IBlockState state = player.world.getBlockState(new BlockPos(iPosX, iPosY, iPosZ)); + if (state.getBlock() == GCBlocks.blockMoon) + { + // And is the correct metadata (moon turf) + if (state.getValue(BlockBasicMoon.BASIC_TYPE_MOON) == BlockBasicMoon.EnumBlockBasicMoon.MOON_TURF) + { + GCPlayerStats stats = GCPlayerStats.get(player); + // If it has been long enough since the last step + if (stats.getDistanceSinceLastStep() > 0.35D) + { + Vector3 pos = new Vector3(player); + // Set the footprint position to the block below and add + // random number to stop z-fighting + pos.y = MathHelper.floor(player.posY - 1D) + player.world.rand.nextFloat() / 100.0F; + + // Adjust footprint to left or right depending on step + // count + switch (stats.getLastStep()) + { + case 0: + float a = (-player.rotationYaw + 90F) / Constants.RADIANS_TO_DEGREES; + pos.translate(new Vector3(MathHelper.sin(a) * 0.25F, 0, MathHelper.cos(a) * 0.25F)); + break; + case 1: + a = (-player.rotationYaw - 90F) / Constants.RADIANS_TO_DEGREES; + pos.translate(new Vector3(MathHelper.sin(a) * 0.25, 0, MathHelper.cos(a) * 0.25)); + break; + } + + float rotation = player.rotationYaw - 180; + pos = WorldUtil.getFootprintPosition(player.world, rotation, pos, new BlockVec3(player)); + + long chunkKey = ChunkPos.asLong(pos.intX() >> 4, pos.intZ() >> 4); + TickHandlerServer.addFootprint(chunkKey, new Footprint(GCCoreUtil.getDimensionID(player.world), pos, rotation, player.getName(), -1), GCCoreUtil.getDimensionID(player.world)); + + // Increment and cap step counter at 1 + stats.setLastStep((stats.getLastStep() + 1) % 2); + stats.setDistanceSinceLastStep(0); + } + else + { + stats.setDistanceSinceLastStep(stats.getDistanceSinceLastStep() + motionSqrd); + } + } + } + } + } + + protected void updateSchematics(EntityPlayerMP player, GCPlayerStats stats) + { + SchematicRegistry.addUnlockedPage(player, SchematicRegistry.getMatchingRecipeForID(0)); + SchematicRegistry.addUnlockedPage(player, SchematicRegistry.getMatchingRecipeForID(Integer.MAX_VALUE)); + + Collections.sort(stats.getUnlockedSchematics()); + + if (player.connection != null && (stats.getUnlockedSchematics().size() != stats.getLastUnlockedSchematics().size() || (player.ticksExisted - 1) % 100 == 0)) + { + Integer[] iArray = new Integer[stats.getUnlockedSchematics().size()]; + + for (int i = 0; i < iArray.length; i++) + { + ISchematicPage page = stats.getUnlockedSchematics().get(i); + iArray[i] = page == null ? -2 : page.getPageID(); + } + + List objList = new ArrayList<>(); + objList.add(iArray); + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SCHEMATIC_LIST, GCCoreUtil.getDimensionID(player.world), objList), player); + } + } + + public static class ThermalArmorEvent extends Event + { + + public ArmorAddResult armorResult = ArmorAddResult.NOTHING; + public final int armorIndex; + public final ItemStack armorStack; + + public ThermalArmorEvent(int armorIndex, ItemStack armorStack) + { + this.armorIndex = armorIndex; + this.armorStack = armorStack; + } + + public void setArmorAddResult(ArmorAddResult result) + { + this.armorResult = result; + } + + public enum ArmorAddResult + { + ADD, REMOVE, NOTHING + } + } + + protected void sendPlanetList(EntityPlayerMP player, GCPlayerStats stats) + { + HashMap map; + if (player.ticksExisted % 50 == 0) + // Check for genuine update - e.g. maybe some other player created a + // space station or changed permissions + // CAUTION: possible server load due to dimension loading, if any + // planets or moons were (contrary to GC default) set to hotload + { + map = WorldUtil.getArrayOfPossibleDimensions(stats.getSpaceshipTier(), player); + } + else + { + map = WorldUtil.getArrayOfPossibleDimensionsAgain(stats.getSpaceshipTier(), player); + } + + String temp = ""; + int count = 0; + + for (Entry entry : map.entrySet()) + { + temp = temp.concat(entry.getKey() + (count < map.entrySet().size() - 1 ? "?" : "")); + count++; + } + + if (!temp.equals(stats.getSavedPlanetList()) || (player.ticksExisted % 100 == 0)) + { + boolean canCreateStations = PermissionAPI.hasPermission(player, Constants.PERMISSION_CREATE_STATION); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_DIMENSION_LIST, GCCoreUtil.getDimensionID(player.world), new Object[] {PlayerUtil.getName(player), temp, canCreateStations}), player); + stats.setSavedPlanetList(temp); + // GalacticraftCore.logger.debug("Sending to " + PlayerUtil.getName(player) + ": " + + // temp); + } + } + + protected static void sendAirRemainingPacket(EntityPlayerMP player, GCPlayerStats stats) + { + final float f1 = stats.getTankInSlot1().isEmpty() ? 0.0F : stats.getTankInSlot1().getMaxDamage() / 90.0F; + final float f2 = stats.getTankInSlot2().isEmpty() ? 0.0F : stats.getTankInSlot2().getMaxDamage() / 90.0F; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_AIR_REMAINING, GCCoreUtil.getDimensionID(player.world), new Object[] {MathHelper.floor(stats.getAirRemaining() / f1), MathHelper.floor(stats.getAirRemaining2() / f2), PlayerUtil.getName(player)}), player); + } + + protected void sendThermalLevelPacket(EntityPlayerMP player, GCPlayerStats stats) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_THERMAL_LEVEL, GCCoreUtil.getDimensionID(player.world), new Object[] {stats.getThermalLevel(), stats.isThermalLevelNormalising()}), player); + } + + protected void sendDungeonDirectionPacket(EntityPlayerMP player, GCPlayerStats stats) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_DUNGEON_DIRECTION, GCCoreUtil.getDimensionID(player.world), new Object[] {MapGenDungeon.directionToNearestDungeon(player.world, player.posX + player.motionX, player.posZ + player.motionZ)}), player); + } + + public static void sendGearUpdatePacket(EntityPlayerMP player, EnumModelPacketType packetType, EnumExtendedInventorySlot gearType) + { + GCPlayerHandler.sendGearUpdatePacket(player, packetType, gearType, GCPlayerHandler.GEAR_NOT_PRESENT); + } + + public static void sendGearUpdatePacket(EntityPlayerMP player, EnumModelPacketType packetType, EnumExtendedInventorySlot gearType, int gearID) + { + MinecraftServer theServer = player.server; + if (theServer != null && PlayerUtil.getPlayerForUsernameVanilla(theServer, PlayerUtil.getName(player)) != null) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_UPDATE_GEAR_SLOT, GCCoreUtil.getDimensionID(player.world), new Object[] {PlayerUtil.getName(player), packetType.ordinal(), gearType.ordinal(), gearID}), new TargetPoint(GCCoreUtil.getDimensionID(player.world), player.posX, player.posY, player.posZ, 50.0D)); + } + } + + public enum EnumModelPacketType + { + ADD, REMOVE + } + + public void onPlayerUpdate(EntityPlayerMP player) + { + int tick = player.ticksExisted - 1; + + // This will speed things up a little + GCPlayerStats stats = GCPlayerStats.get(player); + + if ((ConfigManagerCore.challengeSpawnHandling) && stats.getUnlockedSchematics().size() == 0) + { + if (stats.getStartDimension().length() > 0) + { + stats.setStartDimension(""); + } + else + { + // PlayerAPI is installed + WorldServer worldOld = (WorldServer) player.world; + try + { + worldOld.getPlayerChunkMap().removePlayer(player); + } catch (Exception e) + {} + worldOld.playerEntities.remove(player); + worldOld.updateAllPlayersSleepingFlag(); + worldOld.loadedEntityList.remove(player); + worldOld.onEntityRemoved(player); + worldOld.getEntityTracker().untrack(player); + if (player.addedToChunk && worldOld.getChunkProvider().chunkExists(player.chunkCoordX, player.chunkCoordZ)) + { + Chunk chunkOld = worldOld.getChunk(player.chunkCoordX, player.chunkCoordZ); + chunkOld.removeEntity(player); + chunkOld.setModified(true); + } + + WorldServer worldNew = WorldUtil.getStartWorld(worldOld); + int dimID = GCCoreUtil.getDimensionID(worldNew); + player.dimension = dimID; + GalacticraftCore.logger.debug("DEBUG: Sending respawn packet to player for dim " + dimID); + player.connection.sendPacket(new SPacketRespawn(dimID, player.world.getDifficulty(), player.world.getWorldInfo().getTerrainType(), player.interactionManager.getGameType())); + + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(player.world), new Object[] {}), player); + } + worldNew.spawnEntity(player); + player.setWorld(worldNew); + player.server.getPlayerList().preparePlayer(player, worldOld); + } + + // This is a mini version of the code at WorldUtil.teleportEntity + player.interactionManager.setWorld((WorldServer) player.world); + final ITeleportType type = GalacticraftRegistry.getTeleportTypeForDimension(player.world.provider.getClass()); + Vector3 spawnPos = type.getPlayerSpawnLocation((WorldServer) player.world, player); + ChunkPos pair = player.world.getChunk(spawnPos.intX() >> 4, spawnPos.intZ() >> 4).getPos(); + GalacticraftCore.logger.debug("Loading first chunk in new dimension."); + ((WorldServer) player.world).getChunkProvider().loadChunk(pair.x, pair.z); + player.setLocationAndAngles(spawnPos.x, spawnPos.y, spawnPos.z, player.rotationYaw, player.rotationPitch); + type.setupAdventureSpawn(player); + type.onSpaceDimensionChanged(player.world, player, false); + player.setSpawnChunk(new BlockPos(spawnPos.intX(), spawnPos.intY(), spawnPos.intZ()), true, GCCoreUtil.getDimensionID(player.world)); + stats.setNewAdventureSpawn(true); + } + final boolean isInGCDimension = player.world.provider instanceof IGalacticraftWorldProvider; + + if (tick >= 25) + { + if (ConfigManagerCore.enableSpaceRaceManagerPopup && !stats.hasOpenedSpaceRaceManager()) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(player)); + + if (race == null || race.teamName.equals(SpaceRace.DEFAULT_NAME)) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_SPACE_RACE_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] {}), player); + } + + stats.setOpenedSpaceRaceManager(true); + } + if (!stats.hasSentFlags()) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_STATS, GCCoreUtil.getDimensionID(player.world), stats.getMiscNetworkedStats()), player); + stats.setSentFlags(true); + } + } + + if (stats.getCryogenicChamberCooldown() > 0) + { + stats.setCryogenicChamberCooldown(stats.getCryogenicChamberCooldown() - 1); + } + + if (!player.onGround && stats.isLastOnGround()) + { + stats.setTouchedGround(true); + } + + if (stats.getTeleportCooldown() > 0) + { + stats.setTeleportCooldown(stats.getTeleportCooldown() - 1); + } + + if (stats.getChatCooldown() > 0) + { + stats.setChatCooldown(stats.getChatCooldown() - 1); + } + + if (stats.getOpenPlanetSelectionGuiCooldown() > 0) + { + stats.setOpenPlanetSelectionGuiCooldown(stats.getOpenPlanetSelectionGuiCooldown() - 1); + + if (stats.getOpenPlanetSelectionGuiCooldown() == 1 && !stats.hasOpenedPlanetSelectionGui()) + { + WorldUtil.toCelestialSelection(player, stats, stats.getSpaceshipTier()); + stats.setHasOpenedPlanetSelectionGui(true); + } + } + + if (stats.isUsingParachute()) + { + if (!stats.getLastParachuteInSlot().isEmpty()) + { + player.fallDistance = 0.0F; + } + if (player.onGround) + { + GCPlayerHandler.setUsingParachute(player, stats, false); + } + } + + this.checkCurrentItem(player); + + if (stats.isUsingPlanetSelectionGui()) + { + // This sends the planets list again periodically (forcing the + // Celestial Selection screen to open) in case of server/client lag + // #PACKETSPAM + this.sendPlanetList(player, stats); + } + + /* + * if (isInGCDimension || player.usingPlanetSelectionGui) { + * player.connection.ticksForFloatKick = 0; } + */ + if (stats.getDamageCounter() > 0) + { + stats.setDamageCounter(stats.getDamageCounter() - 1); + } + + if (isInGCDimension) + { + if (tick % 10 == 0) + { + boolean doneDungeon = false; + ItemStack current = player.inventory.getCurrentItem(); + if (current != null && current.getItem() == GCItems.dungeonFinder) + { + this.sendDungeonDirectionPacket(player, stats); + doneDungeon = true; + } + if (tick % 30 == 0) + { + GCPlayerHandler.sendAirRemainingPacket(player, stats); + this.sendThermalLevelPacket(player, stats); + + if (!doneDungeon) + { + for (ItemStack stack : player.inventory.mainInventory) + { + if (stack != null && stack.getItem() == GCItems.dungeonFinder) + { + this.sendDungeonDirectionPacket(player, stats); + break; + } + } + } + } + } + + if (player.getRidingEntity() instanceof EntityLanderBase) + { + stats.setInLander(true); + stats.setJustLanded(false); + } + else + { + if (stats.isInLander()) + { + stats.setJustLanded(true); + } + stats.setInLander(false); + } + + if (player.onGround && stats.hasJustLanded()) + { + stats.setJustLanded(false); + + // Set spawn point here if just descended from a lander for the + // first time + if (player.getBedLocation(GCCoreUtil.getDimensionID(player.world)) == null || stats.isNewAdventureSpawn()) + { + int i = 30000000; + int j = Math.min(i, Math.max(-i, MathHelper.floor(player.posX + 0.5D))); + int k = Math.min(256, Math.max(0, MathHelper.floor(player.posY + 1.5D))); + int l = Math.min(i, Math.max(-i, MathHelper.floor(player.posZ + 0.5D))); + BlockPos coords = new BlockPos(j, k, l); + player.setSpawnChunk(coords, true, GCCoreUtil.getDimensionID(player.world)); + stats.setNewAdventureSpawn(false); + } + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(player.world), new Object[] {}), player); + } + + if (player.world.provider instanceof WorldProviderSpaceStation || player.world.provider instanceof IZeroGDimension || player.world.provider instanceof WorldProviderAsteroids) + { + this.preventFlyingKicks(player); + if (player.world.provider instanceof WorldProviderSpaceStation && stats.isNewInOrbit()) + { + ((WorldProviderSpaceStation) player.world.provider).getSpinManager().sendPackets(player); + stats.setNewInOrbit(false); + } + } + else + { + stats.setNewInOrbit(true); + } + } + else + { + stats.setNewInOrbit(true); + } + + checkGear(player, stats, false); + + if (stats.getChestSpawnCooldown() > 0) + { + stats.setChestSpawnCooldown(stats.getChestSpawnCooldown() - 1); + + if (stats.getChestSpawnCooldown() == 180) + { + if (stats.getChestSpawnVector() != null) + { + EntityParachest chest = new EntityParachest(player.world, stats.getRocketStacks(), stats.getFuelLevel()); + + chest.setPosition(stats.getChestSpawnVector().x, stats.getChestSpawnVector().y, stats.getChestSpawnVector().z); + chest.color = stats.getParachuteInSlot().isEmpty() ? EnumDyeColor.WHITE : ItemParaChute.getDyeEnumFromParachuteDamage(stats.getParachuteInSlot().getItemDamage()); + + if (!player.world.isRemote) + { + player.world.spawnEntity(chest); + } + } + } + } + + // + + if (stats.getLaunchAttempts() > 0 && player.getRidingEntity() == null) + { + stats.setLaunchAttempts(0); + } + + this.checkThermalStatus(player, stats); + this.checkOxygen(player, stats); + this.checkShield(player, stats); + + if (isInGCDimension && (stats.isOxygenSetupValid() != stats.isLastOxygenSetupValid() || tick % 100 == 0)) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_OXYGEN_VALIDITY, player.world.provider.getDimension(), new Object[] {stats.isOxygenSetupValid()}), player); + } + + this.throwMeteors(player); + + this.updateSchematics(player, stats); + + if (tick % 250 == 0 && stats.getFrequencyModuleInSlot().isEmpty() && !stats.hasReceivedSoundWarning() && isInGCDimension && player.onGround && tick > 0 && ((IGalacticraftWorldProvider) player.world.provider).getSoundVolReductionAmount() > 1.0F) + { + String[] string2 = GCCoreUtil.translate("gui.frequencymodule.warning1").split(" "); + StringBuilder sb = new StringBuilder(); + for (String aString2 : string2) + { + sb.append(" ").append(EnumColor.YELLOW).append(aString2); + } + player.sendMessage(new TextComponentString(EnumColor.YELLOW + GCCoreUtil.translate("gui.frequencymodule.warning0") + " " + EnumColor.AQUA + GCItems.basicItem.getItemStackDisplayName(new ItemStack(GCItems.basicItem, 1, 19)) + sb.toString())); + stats.setReceivedSoundWarning(true); + } + + // Player moves and sprints 18% faster with full set of Titanium Armor + if (tick % 40 == 1 && player.inventory != null) + { + int titaniumCount = 0; + for (ItemStack armorPiece : player.getArmorInventoryList()) + { + if (armorPiece != null && armorPiece.getItem() instanceof ItemArmorAsteroids) + { + titaniumCount++; + } + } + if (stats.getSavedSpeed() == 0F) + { + if (titaniumCount == 4) + { + float speed = player.capabilities.getWalkSpeed(); + if (speed < 0.118F) + { + try + { + Field f = player.capabilities.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "walkSpeed" : "field_75097_g"); + f.setAccessible(true); + f.set(player.capabilities, 0.118F); + stats.setSavedSpeed(speed); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + else if (titaniumCount < 4) + { + try + { + Field f = player.capabilities.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "walkSpeed" : "field_75097_g"); + f.setAccessible(true); + f.set(player.capabilities, stats.getSavedSpeed()); + stats.setSavedSpeed(0F); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + stats.setLastOxygenSetupValid(stats.isOxygenSetupValid()); + stats.setLastUnlockedSchematics(stats.getUnlockedSchematics()); + stats.setLastOnGround(player.onGround); + } + + public void preventFlyingKicks(EntityPlayerMP player) + { + player.fallDistance = 0.0F; + player.connection.floatingTickCount = 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStats.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStats.java new file mode 100644 index 00000000..0d6c3dda --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStats.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.ref.WeakReference; +import java.util.HashMap; +import java.util.List; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; + +public abstract class GCPlayerStats +{ + + public static GCPlayerStats get(Entity entity) + { + return entity.getCapability(GCCapabilities.GC_STATS_CAPABILITY, null); + } + + public abstract void saveNBTData(NBTTagCompound nbt); + + public abstract void loadNBTData(NBTTagCompound nbt); + + public abstract void copyFrom(GCPlayerStats oldData, boolean keepInv); + + public abstract WeakReference getPlayer(); + + public abstract void setPlayer(WeakReference player); + + public abstract InventoryExtended getExtendedInventory(); + + public abstract void setExtendedInventory(InventoryExtended extendedInventory); + + public abstract int getAirRemaining(); + + public abstract void setAirRemaining(int airRemaining); + + public abstract int getAirRemaining2(); + + public abstract void setAirRemaining2(int airRemaining2); + + public abstract int getThermalLevel(); + + public abstract void setThermalLevel(int thermalLevel); + + public abstract boolean isThermalLevelNormalising(); + + public abstract void setThermalLevelNormalising(boolean thermalLevelNormalising); + + public abstract int getDamageCounter(); + + public abstract void setDamageCounter(int damageCounter); + + public abstract int getSpaceshipTier(); + + public abstract void setSpaceshipTier(int spaceshipTier); + + public abstract NonNullList getRocketStacks(); + + public abstract void setRocketStacks(NonNullList rocketStacks); + + public abstract int getRocketType(); + + public abstract void setRocketType(int rocketType); + + public abstract int getFuelLevel(); + + public abstract void setFuelLevel(int fuelLevel); + + public abstract Item getRocketItem(); + + public abstract void setRocketItem(Item rocketItem); + + public abstract ItemStack getLaunchpadStack(); + + public abstract void setLaunchpadStack(ItemStack launchpadStack); + + public abstract int getAstroMinerCount(); + + public abstract void setAstroMinerCount(int astroMinerCount); + + public abstract List getActiveAstroMinerChunks(); + + public abstract boolean isUsingParachute(); + + public abstract void setUsingParachute(boolean usingParachute); + + public abstract ItemStack getParachuteInSlot(); + + public abstract void setParachuteInSlot(ItemStack parachuteInSlot); + + public abstract ItemStack getLastParachuteInSlot(); + + public abstract void setLastParachuteInSlot(ItemStack lastParachuteInSlot); + + public abstract ItemStack getFrequencyModuleInSlot(); + + public abstract void setFrequencyModuleInSlot(ItemStack frequencyModuleInSlot); + + public abstract ItemStack getLastFrequencyModuleInSlot(); + + public abstract void setLastFrequencyModuleInSlot(ItemStack lastFrequencyModuleInSlot); + + public abstract ItemStack getMaskInSlot(); + + public abstract void setMaskInSlot(ItemStack maskInSlot); + + public abstract ItemStack getLastMaskInSlot(); + + public abstract void setLastMaskInSlot(ItemStack lastMaskInSlot); + + public abstract ItemStack getGearInSlot(); + + public abstract void setGearInSlot(ItemStack gearInSlot); + + public abstract ItemStack getLastGearInSlot(); + + public abstract void setLastGearInSlot(ItemStack lastGearInSlot); + + public abstract ItemStack getTankInSlot1(); + + public abstract void setTankInSlot1(ItemStack tankInSlot1); + + public abstract ItemStack getLastTankInSlot1(); + + public abstract void setLastTankInSlot1(ItemStack lastTankInSlot1); + + public abstract ItemStack getTankInSlot2(); + + public abstract void setTankInSlot2(ItemStack tankInSlot2); + + public abstract ItemStack getLastTankInSlot2(); + + public abstract void setLastTankInSlot2(ItemStack lastTankInSlot2); + + public abstract ItemStack getThermalHelmetInSlot(); + + public abstract void setThermalHelmetInSlot(ItemStack thermalHelmetInSlot); + + public abstract ItemStack getLastThermalHelmetInSlot(); + + public abstract void setLastThermalHelmetInSlot(ItemStack lastThermalHelmetInSlot); + + public abstract ItemStack getThermalChestplateInSlot(); + + public abstract void setThermalChestplateInSlot(ItemStack thermalChestplateInSlot); + + public abstract ItemStack getLastThermalChestplateInSlot(); + + public abstract void setLastThermalChestplateInSlot(ItemStack lastThermalChestplateInSlot); + + public abstract ItemStack getThermalLeggingsInSlot(); + + public abstract void setThermalLeggingsInSlot(ItemStack thermalLeggingsInSlot); + + public abstract ItemStack getLastThermalLeggingsInSlot(); + + public abstract void setLastThermalLeggingsInSlot(ItemStack lastThermalLeggingsInSlot); + + public abstract ItemStack getThermalBootsInSlot(); + + public abstract void setThermalBootsInSlot(ItemStack thermalBootsInSlot); + + public abstract ItemStack getLastThermalBootsInSlot(); + + public abstract void setLastThermalBootsInSlot(ItemStack lastThermalBootsInSlot); + + public abstract ItemStack getShieldControllerInSlot(); + + public abstract void setShieldControllerInSlot(ItemStack shieldControllerInSlot); + + public abstract ItemStack getLastShieldControllerInSlot(); + + public abstract void setLastShieldControllerInSlot(ItemStack lastShieldControllerInSlot); + + public abstract int getLaunchAttempts(); + + public abstract void setLaunchAttempts(int launchAttempts); + + public abstract int getSpaceRaceInviteTeamID(); + + public abstract void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID); + + public abstract boolean isUsingPlanetSelectionGui(); + + public abstract void setUsingPlanetSelectionGui(boolean usingPlanetSelectionGui); + + public abstract String getSavedPlanetList(); + + public abstract void setSavedPlanetList(String savedPlanetList); + + public abstract int getOpenPlanetSelectionGuiCooldown(); + + public abstract void setOpenPlanetSelectionGuiCooldown(int openPlanetSelectionGuiCooldown); + + public abstract boolean hasOpenedPlanetSelectionGui(); + + public abstract void setHasOpenedPlanetSelectionGui(boolean hasOpenedPlanetSelectionGui); + + public abstract int getChestSpawnCooldown(); + + public abstract void setChestSpawnCooldown(int chestSpawnCooldown); + + public abstract Vector3 getChestSpawnVector(); + + public abstract void setChestSpawnVector(Vector3 chestSpawnVector); + + public abstract int getTeleportCooldown(); + + public abstract void setTeleportCooldown(int teleportCooldown); + + public abstract int getChatCooldown(); + + public abstract void setChatCooldown(int chatCooldown); + + public abstract double getDistanceSinceLastStep(); + + public abstract void setDistanceSinceLastStep(double distanceSinceLastStep); + + public abstract int getLastStep(); + + public abstract void setLastStep(int lastStep); + + public abstract double getCoordsTeleportedFromX(); + + public abstract void setCoordsTeleportedFromX(double coordsTeleportedFromX); + + public abstract double getCoordsTeleportedFromZ(); + + public abstract void setCoordsTeleportedFromZ(double coordsTeleportedFromZ); + + public abstract HashMap getSpaceStationDimensionData(); + + public abstract void setSpaceStationDimensionData(HashMap spaceStationDimensionData); + + public abstract boolean isOxygenSetupValid(); + + public abstract void setOxygenSetupValid(boolean oxygenSetupValid); + + public abstract boolean isLastOxygenSetupValid(); + + public abstract void setLastOxygenSetupValid(boolean lastOxygenSetupValid); + + public abstract boolean isTouchedGround(); + + public abstract void setTouchedGround(boolean touchedGround); + + public abstract boolean isLastOnGround(); + + public abstract void setLastOnGround(boolean lastOnGround); + + public abstract boolean isInLander(); + + public abstract void setInLander(boolean inLander); + + public abstract boolean hasJustLanded(); + + public abstract void setJustLanded(boolean justLanded); + + public abstract List getUnlockedSchematics(); + + public abstract void setUnlockedSchematics(List unlockedSchematics); + + public abstract List getLastUnlockedSchematics(); + + public abstract void setLastUnlockedSchematics(List lastUnlockedSchematics); + + public abstract int getCryogenicChamberCooldown(); + + public abstract void setCryogenicChamberCooldown(int cryogenicChamberCooldown); + + public abstract boolean hasReceivedSoundWarning(); + + public abstract void setReceivedSoundWarning(boolean receivedSoundWarning); + + public abstract boolean hasReceivedBedWarning(); + + public abstract void setReceivedBedWarning(boolean receivedBedWarning); + + public abstract boolean hasOpenedSpaceRaceManager(); + + public abstract void setOpenedSpaceRaceManager(boolean openedSpaceRaceManager); + + public abstract boolean hasSentFlags(); + + public abstract void setSentFlags(boolean sentFlags); + + public abstract boolean isNewInOrbit(); + + public abstract void setNewInOrbit(boolean newInOrbit); + + public abstract boolean isNewAdventureSpawn(); + + public abstract void setNewAdventureSpawn(boolean newAdventureSpawn); + + public abstract int getBuildFlags(); + + public abstract void setBuildFlags(int buildFlags); + + public abstract int getIncrementalDamage(); + + public abstract void setIncrementalDamage(int incrementalDamage); + + public abstract String getStartDimension(); + + public abstract void setStartDimension(String startDimension); + + public abstract void setGlassColors(int color1, int color2, int color3); + + public abstract int getGlassColor1(); + + public abstract int getGlassColor2(); + + public abstract int getGlassColor3(); + + public abstract IBlockState[] getPanelLightingBases(); + + public abstract int getPanelLightingColor(); + + public abstract void setPanelLightingColor(int color); + + public abstract Object[] getMiscNetworkedStats(); + + public abstract void setSavedSpeed(float value); + + public abstract float getSavedSpeed(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStatsClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStatsClient.java new file mode 100644 index 00000000..42b13dfd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/GCPlayerStatsClient.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.AxisAlignedBB; + +public abstract class GCPlayerStatsClient +{ + + public static GCPlayerStatsClient get(Entity entity) + { + return entity.getCapability(GCCapabilities.GC_STATS_CLIENT_CAPABILITY, null); + } + + public abstract void setGravity(EnumGravity newGravity); + + public abstract boolean isUsingParachute(); + + public abstract void setUsingParachute(boolean usingParachute); + + public abstract boolean isLastUsingParachute(); + + public abstract void setLastUsingParachute(boolean lastUsingParachute); + + public abstract boolean isUsingAdvancedGoggles(); + + public abstract void setUsingAdvancedGoggles(boolean usingAdvancedGoggles); + + public abstract int getThermalLevel(); + + public abstract void setThermalLevel(int thermalLevel); + + public abstract boolean isThermalLevelNormalising(); + + public abstract void setThermalLevelNormalising(boolean thermalLevelNormalising); + + public abstract int getThirdPersonView(); + + public abstract void setThirdPersonView(int thirdPersonView); + + public abstract long getTick(); + + public abstract void setTick(long tick); + + public abstract boolean isOxygenSetupValid(); + + public abstract void setOxygenSetupValid(boolean oxygenSetupValid); + + public abstract AxisAlignedBB getBoundingBoxBefore(); + + public abstract void setBoundingBoxBefore(AxisAlignedBB boundingBoxBefore); + + public abstract boolean isLastOnGround(); + + public abstract void setLastOnGround(boolean lastOnGround); + + public abstract double getDistanceSinceLastStep(); + + public abstract void setDistanceSinceLastStep(double distanceSinceLastStep); + + public abstract int getLastStep(); + + public abstract void setLastStep(int lastStep); + + public abstract boolean isInFreefall(); + + public abstract void setInFreefall(boolean inFreefall); + + public abstract boolean isInFreefallLast(); + + public abstract void setInFreefallLast(boolean inFreefallLast); + + public abstract boolean isInFreefallFirstCheck(); + + public abstract void setInFreefallFirstCheck(boolean inFreefallFirstCheck); + + public abstract double getDownMotionLast(); + + public abstract void setDownMotionLast(double downMotionLast); + + public abstract boolean isLastRidingCameraZoomEntity(); + + public abstract void setLastRidingCameraZoomEntity(boolean lastRidingCameraZoomEntity); + + public abstract int getLandingTicks(); + + public abstract void setLandingTicks(int landingTicks); + + public abstract EnumGravity getGdir(); + + public abstract void setGdir(EnumGravity gdir); + + public abstract float getGravityTurnRate(); + + public abstract void setGravityTurnRate(float gravityTurnRate); + + public abstract float getGravityTurnRatePrev(); + + public abstract void setGravityTurnRatePrev(float gravityTurnRatePrev); + + public abstract float getGravityTurnVecX(); + + public abstract void setGravityTurnVecX(float gravityTurnVecX); + + public abstract float getGravityTurnVecY(); + + public abstract void setGravityTurnVecY(float gravityTurnVecY); + + public abstract float getGravityTurnVecZ(); + + public abstract void setGravityTurnVecZ(float gravityTurnVecZ); + + public abstract float getGravityTurnYaw(); + + public abstract void setGravityTurnYaw(float gravityTurnYaw); + + public abstract int getSpaceRaceInviteTeamID(); + + public abstract void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID); + + public abstract boolean isLastZoomed(); + + public abstract void setLastZoomed(boolean lastZoomed); + + public abstract int getBuildFlags(); + + public abstract void setBuildFlags(int buildFlags); + + public abstract boolean isSsOnGroundLast(); + + public abstract void setSsOnGroundLast(boolean ssOnGroundLast); + + public abstract FreefallHandler getFreefallHandler(); + + public abstract void setFreefallHandler(FreefallHandler freefallHandler); + + public abstract ArrayList getUnlockedSchematics(); + + public abstract void setUnlockedSchematics(ArrayList unlockedSchematics); + + public abstract int getMaxLandingticks(); + + public abstract float[] getLandingYOffset(); + + public abstract void setLandingYOffset(float[] landingYOffset); + + public abstract void setDungeonDirection(float dir); + + public abstract float getDungeonDirection(); + + public abstract void startPlatformAscent(TileEntityPlatform noCollide, TileEntityPlatform moving, double target); + + public abstract void finishPlatformAscent(); + + public abstract boolean getPlatformControlled(); + + public abstract double getPlatformVelocity(double posY); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerClient.java new file mode 100644 index 00000000..d47e50ec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerClient.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.MoverType; + +public interface IPlayerClient +{ + + void move(EntityPlayerSP player, MoverType type, double x, double y, double z); + + void onUpdate(EntityPlayerSP player); + + void onLivingUpdatePre(EntityPlayerSP player); + + void onLivingUpdatePost(EntityPlayerSP player); + + float getBedOrientationInDegrees(EntityPlayerSP player, float vanillaDegrees); + + boolean isEntityInsideOpaqueBlock(EntityPlayerSP player, boolean vanillaInside); + + boolean wakeUpPlayer(EntityPlayerSP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn); + + void onBuild(int i, EntityPlayerSP player); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerServer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerServer.java new file mode 100644 index 00000000..42bc52b8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IPlayerServer.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.DamageSource; + +public interface IPlayerServer +{ + + void updateRiddenPre(EntityPlayerMP player); + + void updateRiddenPost(EntityPlayerMP player); + + boolean dismountEntity(EntityPlayerMP player, Entity par1Entity); + + void move(EntityPlayerMP player, MoverType type, double x, double y, double z); + + boolean wakeUpPlayer(EntityPlayerMP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn); + + float attackEntityFrom(EntityPlayerMP player, DamageSource par1DamageSource, float par2); + + void knockBack(EntityPlayerMP player, Entity p_70653_1_, float p_70653_2_, double impulseX, double impulseZ); + + boolean isSpectator(EntityPlayerMP player); + + void setNoClip(EntityPlayerMP player, boolean noClip); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsCapability.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsCapability.java new file mode 100644 index 00000000..82985df4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsCapability.java @@ -0,0 +1,318 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; + +public interface IStatsCapability +{ + + void saveNBTData(NBTTagCompound nbt); + + void loadNBTData(NBTTagCompound nbt); + + void copyFrom(IStatsCapability oldData, boolean keepInv); + + WeakReference getPlayer(); + + void setPlayer(WeakReference player); + + InventoryExtended getExtendedInventory(); + + void setExtendedInventory(InventoryExtended extendedInventory); + + int getAirRemaining(); + + void setAirRemaining(int airRemaining); + + int getAirRemaining2(); + + void setAirRemaining2(int airRemaining2); + + int getThermalLevel(); + + void setThermalLevel(int thermalLevel); + + boolean isThermalLevelNormalising(); + + void setThermalLevelNormalising(boolean thermalLevelNormalising); + + int getDamageCounter(); + + void setDamageCounter(int damageCounter); + + int getSpaceshipTier(); + + void setSpaceshipTier(int spaceshipTier); + + NonNullList getRocketStacks(); + + void setRocketStacks(NonNullList rocketStacks); + + int getRocketType(); + + void setRocketType(int rocketType); + + int getFuelLevel(); + + void setFuelLevel(int fuelLevel); + + Item getRocketItem(); + + void setRocketItem(Item rocketItem); + + ItemStack getLaunchpadStack(); + + void setLaunchpadStack(ItemStack launchpadStack); + + int getAstroMinerCount(); + + void setAstroMinerCount(int astroMinerCount); + + boolean isUsingParachute(); + + void setUsingParachute(boolean usingParachute); + + ItemStack getParachuteInSlot(); + + void setParachuteInSlot(ItemStack parachuteInSlot); + + ItemStack getLastParachuteInSlot(); + + void setLastParachuteInSlot(ItemStack lastParachuteInSlot); + + ItemStack getFrequencyModuleInSlot(); + + void setFrequencyModuleInSlot(ItemStack frequencyModuleInSlot); + + ItemStack getLastFrequencyModuleInSlot(); + + void setLastFrequencyModuleInSlot(ItemStack lastFrequencyModuleInSlot); + + ItemStack getMaskInSlot(); + + void setMaskInSlot(ItemStack maskInSlot); + + ItemStack getLastMaskInSlot(); + + void setLastMaskInSlot(ItemStack lastMaskInSlot); + + ItemStack getGearInSlot(); + + void setGearInSlot(ItemStack gearInSlot); + + ItemStack getLastGearInSlot(); + + void setLastGearInSlot(ItemStack lastGearInSlot); + + ItemStack getTankInSlot1(); + + void setTankInSlot1(ItemStack tankInSlot1); + + ItemStack getLastTankInSlot1(); + + void setLastTankInSlot1(ItemStack lastTankInSlot1); + + ItemStack getTankInSlot2(); + + void setTankInSlot2(ItemStack tankInSlot2); + + ItemStack getLastTankInSlot2(); + + void setLastTankInSlot2(ItemStack lastTankInSlot2); + + ItemStack getThermalHelmetInSlot(); + + void setThermalHelmetInSlot(ItemStack thermalHelmetInSlot); + + ItemStack getLastThermalHelmetInSlot(); + + void setLastThermalHelmetInSlot(ItemStack lastThermalHelmetInSlot); + + ItemStack getThermalChestplateInSlot(); + + void setThermalChestplateInSlot(ItemStack thermalChestplateInSlot); + + ItemStack getLastThermalChestplateInSlot(); + + void setLastThermalChestplateInSlot(ItemStack lastThermalChestplateInSlot); + + ItemStack getThermalLeggingsInSlot(); + + void setThermalLeggingsInSlot(ItemStack thermalLeggingsInSlot); + + ItemStack getLastThermalLeggingsInSlot(); + + void setLastThermalLeggingsInSlot(ItemStack lastThermalLeggingsInSlot); + + ItemStack getThermalBootsInSlot(); + + void setThermalBootsInSlot(ItemStack thermalBootsInSlot); + + ItemStack getLastThermalBootsInSlot(); + + void setLastThermalBootsInSlot(ItemStack lastThermalBootsInSlot); + + ItemStack getShieldControllerInSlot(); + + void setShieldControllerInSlot(ItemStack shieldControllerInSlot); + + ItemStack getLastShieldControllerInSlot(); + + void setLastShieldControllerInSlot(ItemStack lastShieldControllerInSlot); + + int getLaunchAttempts(); + + void setLaunchAttempts(int launchAttempts); + + int getSpaceRaceInviteTeamID(); + + void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID); + + boolean isUsingPlanetSelectionGui(); + + void setUsingPlanetSelectionGui(boolean usingPlanetSelectionGui); + + String getSavedPlanetList(); + + void setSavedPlanetList(String savedPlanetList); + + int getOpenPlanetSelectionGuiCooldown(); + + void setOpenPlanetSelectionGuiCooldown(int openPlanetSelectionGuiCooldown); + + boolean hasOpenedPlanetSelectionGui(); + + void setHasOpenedPlanetSelectionGui(boolean hasOpenedPlanetSelectionGui); + + int getChestSpawnCooldown(); + + void setChestSpawnCooldown(int chestSpawnCooldown); + + Vector3 getChestSpawnVector(); + + void setChestSpawnVector(Vector3 chestSpawnVector); + + int getTeleportCooldown(); + + void setTeleportCooldown(int teleportCooldown); + + int getChatCooldown(); + + void setChatCooldown(int chatCooldown); + + double getDistanceSinceLastStep(); + + void setDistanceSinceLastStep(double distanceSinceLastStep); + + int getLastStep(); + + void setLastStep(int lastStep); + + double getCoordsTeleportedFromX(); + + void setCoordsTeleportedFromX(double coordsTeleportedFromX); + + double getCoordsTeleportedFromZ(); + + void setCoordsTeleportedFromZ(double coordsTeleportedFromZ); + + HashMap getSpaceStationDimensionData(); + + void setSpaceStationDimensionData(HashMap spaceStationDimensionData); + + boolean isOxygenSetupValid(); + + void setOxygenSetupValid(boolean oxygenSetupValid); + + boolean isLastOxygenSetupValid(); + + void setLastOxygenSetupValid(boolean lastOxygenSetupValid); + + boolean isTouchedGround(); + + void setTouchedGround(boolean touchedGround); + + boolean isLastOnGround(); + + void setLastOnGround(boolean lastOnGround); + + boolean isInLander(); + + void setInLander(boolean inLander); + + boolean hasJustLanded(); + + void setJustLanded(boolean justLanded); + + ArrayList getUnlockedSchematics(); + + void setUnlockedSchematics(ArrayList unlockedSchematics); + + ArrayList getLastUnlockedSchematics(); + + void setLastUnlockedSchematics(ArrayList lastUnlockedSchematics); + + int getCryogenicChamberCooldown(); + + void setCryogenicChamberCooldown(int cryogenicChamberCooldown); + + boolean hasReceivedSoundWarning(); + + void setReceivedSoundWarning(boolean receivedSoundWarning); + + boolean hasReceivedBedWarning(); + + void setReceivedBedWarning(boolean receivedBedWarning); + + boolean hasOpenedSpaceRaceManager(); + + void setOpenedSpaceRaceManager(boolean openedSpaceRaceManager); + + boolean hasSentFlags(); + + void setSentFlags(boolean sentFlags); + + boolean isNewInOrbit(); + + void setNewInOrbit(boolean newInOrbit); + + boolean isNewAdventureSpawn(); + + void setNewAdventureSpawn(boolean newAdventureSpawn); + + int getBuildFlags(); + + void setBuildFlags(int buildFlags); + + int getIncrementalDamage(); + + void setIncrementalDamage(int incrementalDamage); + + String getStartDimension(); + + void setStartDimension(String startDimension); + + void setGlassColors(int color1, int color2, int color3); + + int getGlassColor1(); + + int getGlassColor2(); + + int getGlassColor3(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsClientCapability.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsClientCapability.java new file mode 100644 index 00000000..7ceb2b40 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/IStatsClientCapability.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import net.minecraft.util.math.AxisAlignedBB; + +public interface IStatsClientCapability +{ + + void setGravity(EnumGravity newGravity); + + boolean isUsingParachute(); + + void setUsingParachute(boolean usingParachute); + + boolean isLastUsingParachute(); + + void setLastUsingParachute(boolean lastUsingParachute); + + boolean isUsingAdvancedGoggles(); + + void setUsingAdvancedGoggles(boolean usingAdvancedGoggles); + + int getThermalLevel(); + + void setThermalLevel(int thermalLevel); + + boolean isThermalLevelNormalising(); + + void setThermalLevelNormalising(boolean thermalLevelNormalising); + + int getThirdPersonView(); + + void setThirdPersonView(int thirdPersonView); + + long getTick(); + + void setTick(long tick); + + boolean isOxygenSetupValid(); + + void setOxygenSetupValid(boolean oxygenSetupValid); + + AxisAlignedBB getBoundingBoxBefore(); + + void setBoundingBoxBefore(AxisAlignedBB boundingBoxBefore); + + boolean isLastOnGround(); + + void setLastOnGround(boolean lastOnGround); + + double getDistanceSinceLastStep(); + + void setDistanceSinceLastStep(double distanceSinceLastStep); + + int getLastStep(); + + void setLastStep(int lastStep); + + boolean isInFreefall(); + + void setInFreefall(boolean inFreefall); + + boolean isInFreefallLast(); + + void setInFreefallLast(boolean inFreefallLast); + + boolean isInFreefallFirstCheck(); + + void setInFreefallFirstCheck(boolean inFreefallFirstCheck); + + double getDownMotionLast(); + + void setDownMotionLast(double downMotionLast); + + boolean isLastRidingCameraZoomEntity(); + + void setLastRidingCameraZoomEntity(boolean lastRidingCameraZoomEntity); + + int getLandingTicks(); + + void setLandingTicks(int landingTicks); + + EnumGravity getGdir(); + + void setGdir(EnumGravity gdir); + + float getGravityTurnRate(); + + void setGravityTurnRate(float gravityTurnRate); + + float getGravityTurnRatePrev(); + + void setGravityTurnRatePrev(float gravityTurnRatePrev); + + float getGravityTurnVecX(); + + void setGravityTurnVecX(float gravityTurnVecX); + + float getGravityTurnVecY(); + + void setGravityTurnVecY(float gravityTurnVecY); + + float getGravityTurnVecZ(); + + void setGravityTurnVecZ(float gravityTurnVecZ); + + float getGravityTurnYaw(); + + void setGravityTurnYaw(float gravityTurnYaw); + + int getSpaceRaceInviteTeamID(); + + void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID); + + boolean isLastZoomed(); + + void setLastZoomed(boolean lastZoomed); + + int getBuildFlags(); + + void setBuildFlags(int buildFlags); + + boolean isSsOnGroundLast(); + + void setSsOnGroundLast(boolean ssOnGroundLast); + + FreefallHandler getFreefallHandler(); + + void setFreefallHandler(FreefallHandler freefallHandler); + + ArrayList getUnlockedSchematics(); + + void setUnlockedSchematics(ArrayList unlockedSchematics); + + int getMaxLandingticks(); + + float[] getLandingYOffset(); + + void setLandingYOffset(float[] landingYOffset); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerClient.java new file mode 100644 index 00000000..89e4552f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerClient.java @@ -0,0 +1,435 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.client.FootprintRenderer; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.event.EventWakePlayer; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class PlayerClient implements IPlayerClient +{ + + private boolean saveSneak; + private double downMot2; + public static boolean startup; + + @Override + public void move(EntityPlayerSP player, MoverType type, double x, double y, double z) + { + this.updateFeet(player, x, z); + } + + @Override + public boolean wakeUpPlayer(EntityPlayerSP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + return this.wakeUpPlayer(player, immediately, updateWorldFlag, setSpawn, false); + } + + @Override + public void onUpdate(EntityPlayerSP player) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + stats.setTick(stats.getTick() + 1); + + if (stats.isUsingParachute() && !player.capabilities.isFlying && !player.handleWaterMovement()) + { + player.motionY = -0.5D; + player.motionX *= 0.5F; + player.motionZ *= 0.5F; + } + } + + @Override + public boolean isEntityInsideOpaqueBlock(EntityPlayerSP player, boolean vanillaInside) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + if (vanillaInside && stats.isInFreefall()) + { + stats.setInFreefall(false); + return false; + } + return !(player.getRidingEntity() instanceof EntityLanderBase) && vanillaInside; + } + + @Override + public void onLivingUpdatePre(EntityPlayerSP player) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + if (stats.getPlatformControlled() || player.world.provider instanceof IGalacticraftWorldProvider) + { + if (!startup) + { + stats.setInFreefallLast(stats.isInFreefall()); + stats.setInFreefall(stats.getPlatformControlled() || stats.getFreefallHandler().testFreefall(player)); + startup = true; + } + if (stats.getPlatformControlled() || player.world.provider instanceof IZeroGDimension) + { + stats.setInFreefallLast(stats.isInFreefall()); + stats.setInFreefall(stats.getPlatformControlled() || stats.getFreefallHandler().testFreefall(player)); + this.downMot2 = stats.getDownMotionLast(); + stats.setDownMotionLast(player.motionY); + stats.getFreefallHandler().preVanillaMotion(player); + if (stats.getPlatformControlled()) + { + player.motionY = stats.getPlatformVelocity(player.posY); + player.motionX = 0D; + player.motionZ = 0D; + } + } + } + +// if (player.boundingBox != null && stats.boundingBoxBefore == null) +// { +// GalacticraftCore.logger.debug("Changed player BB from " + player.boundingBox.minY); +// stats.boundingBoxBefore = player.boundingBox; +// player.boundingBox.setBounds(stats.boundingBoxBefore.minX + 0.4, stats.boundingBoxBefore.minY + 0.9, stats.boundingBoxBefore.minZ + 0.4, stats.boundingBoxBefore.maxX - 0.4, stats.boundingBoxBefore.maxY - 0.9, stats.boundingBoxBefore.maxZ - 0.4); +// GalacticraftCore.logger.debug("Changed player BB to " + player.boundingBox.minY); +// } +// else if (player.boundingBox != null && stats.boundingBoxBefore != null) +// { +// player.boundingBox.setBB(stats.boundingBoxBefore); +// GalacticraftCore.logger.debug("Changed player BB to " + player.boundingBox.minY); +// } + } + + public void cancelLimbSwing(EntityPlayerSP player) + { + player.limbSwing -= player.limbSwingAmount; + player.limbSwingAmount = player.prevLimbSwingAmount; + float adjust = Math.min(Math.abs(player.limbSwing), Math.abs(player.limbSwingAmount) / 3); + if (player.limbSwing < 0) + { + player.limbSwing += adjust; + } else if (player.limbSwing > 0) + { + player.limbSwing -= adjust; + } + player.limbSwingAmount *= 0.9; + } + + @Override + public void onLivingUpdatePost(EntityPlayerSP player) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + boolean ridingThirdPersonEntity = player.getRidingEntity() instanceof ICameraZoomEntity && ((ICameraZoomEntity) player.getRidingEntity()).defaultThirdPerson(); + + if (stats.getPlatformControlled() || player.world.provider instanceof IZeroGDimension) + { + stats.getFreefallHandler().postVanillaMotion(player); + + if (stats.isInFreefall() || ridingThirdPersonEntity) + { + this.cancelLimbSwing(player); + } else + { + if (stats.isInFreefallLast() && this.downMot2 < -0.008D) + { + stats.setLandingTicks(5 - (int) (Math.min(this.downMot2, stats.getDownMotionLast()) * 40)); + if (stats.getLandingTicks() > stats.getMaxLandingticks()) + { + if (stats.getLandingTicks() > stats.getMaxLandingticks() + 4) + { + stats.getFreefallHandler().pjumpticks = stats.getLandingTicks() - stats.getMaxLandingticks() - 5; + } + stats.setLandingTicks(stats.getMaxLandingticks()); + } + float dYmax = 0.3F * stats.getLandingTicks() / stats.getMaxLandingticks(); + float factor = 1F; + for (int i = 0; i <= stats.getLandingTicks(); i++) + { + stats.getLandingYOffset()[i] = dYmax * MathHelper.sin(i * 3.1415926F / stats.getLandingTicks()) * factor; + factor *= 0.97F; + } + } + } + + if (stats.getLandingTicks() > 0) + { + stats.setLandingTicks(stats.getLandingTicks() - 1); + player.limbSwing *= 0.8F; + player.limbSwingAmount = 0F; + } + } else + { + stats.setInFreefall(false); + if (ridingThirdPersonEntity) + { + this.cancelLimbSwing(player); + } + } + + if (ridingThirdPersonEntity && !stats.isLastRidingCameraZoomEntity()) + { + if (!ConfigManagerCore.disableVehicleCameraChanges) + FMLClientHandler.instance().getClient().gameSettings.thirdPersonView = 1; + } + + if (player.getRidingEntity() instanceof ICameraZoomEntity) + { + if (!ConfigManagerCore.disableVehicleCameraChanges) + { + stats.setLastZoomed(true); + TickHandlerClient.zoom(((ICameraZoomEntity) player.getRidingEntity()).getCameraZoom()); + } + } else if (stats.isLastZoomed()) + { + if (!ConfigManagerCore.disableVehicleCameraChanges) + { + stats.setLastZoomed(false); + TickHandlerClient.zoom(4.0F); + } + } + + stats.setLastRidingCameraZoomEntity(ridingThirdPersonEntity); + + if (stats.isUsingParachute()) + { + player.fallDistance = 0.0F; + } + + PlayerGearData gearData = GalacticraftCore.proxy.getGearData(player); + + stats.setUsingParachute(false); + + if (gearData != null) + { + stats.setUsingParachute(gearData.getParachute() != null); + if (!GalacticraftCore.isHeightConflictingModInstalled) + { + if (gearData.getMask() != GCPlayerHandler.GEAR_NOT_PRESENT) + { + player.height = 1.9375F; + } else + { + player.height = 1.8F; + } + AxisAlignedBB bounds = player.getEntityBoundingBox(); + player.setEntityBoundingBox(new AxisAlignedBB(bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.minY + (double) player.height, bounds.maxZ)); + } + } + + if (stats.isUsingParachute() && player.onGround) + { + stats.setUsingParachute(false); + stats.setLastUsingParachute(false); + FMLClientHandler.instance().getClient().gameSettings.thirdPersonView = stats.getThirdPersonView(); + } + + if (!stats.isLastUsingParachute() && stats.isUsingParachute()) + { + FMLClientHandler.instance().getClient().getSoundHandler().playSound( + new PositionedSoundRecord(GCSounds.parachute, SoundCategory.PLAYERS, 0.95F + player.getRNG().nextFloat() * 0.1F, 1.0F, (float) player.posX, (float) player.posY, (float) player.posZ)); + } + + stats.setLastUsingParachute(stats.isUsingParachute()); + stats.setLastOnGround(player.onGround); + } + + @Override + public float getBedOrientationInDegrees(EntityPlayerSP player, float vanillaDegrees) + { + if (player.bedLocation != null) + { + if (player.world.getTileEntity(player.bedLocation) instanceof TileEntityAdvanced) + { +// int j = player.world.getBlock(x, y, z).getBedDirection(player.world, x, y, z); + IBlockState state = player.world.getBlockState(player.bedLocation); + switch (state.getBlock().getMetaFromState(state) - 4) + { + case 0: + return 90.0F; + case 1: + return 270.0F; + case 2: + return 180.0F; + case 3: + return 0.0F; + } + } else + { + return vanillaDegrees; + } + } + + return vanillaDegrees; + } + + private void updateFeet(EntityPlayerSP player, double motionX, double motionZ) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + double motionSqrd = motionX * motionX + motionZ * motionZ; + + // If the player is on the moon, not airbourne and not riding anything + if (motionSqrd > 0.001 && player.world != null && player.world.provider instanceof WorldProviderMoon && player.getRidingEntity() == null && !player.capabilities.isFlying) + { + int iPosX = MathHelper.floor(player.posX); + int iPosY = MathHelper.floor(player.posY - 0.05); + int iPosZ = MathHelper.floor(player.posZ); + BlockPos pos1 = new BlockPos(iPosX, iPosY, iPosZ); + IBlockState state = player.world.getBlockState(pos1); + + // If the block below is the moon block + if (state.getBlock() == GCBlocks.blockMoon) + { + // And is the correct metadata (moon turf) + if (state.getValue(BlockBasicMoon.BASIC_TYPE_MOON) == BlockBasicMoon.EnumBlockBasicMoon.MOON_TURF) + { + // If it has been long enough since the last step + if (stats.getDistanceSinceLastStep() > 0.35) + { + Vector3 pos = new Vector3(player); + // Set the footprint position to the block below and add + // random number to stop z-fighting + pos.y = MathHelper.floor(player.posY) + player.getRNG().nextFloat() / 100.0F; + + // Adjust footprint to left or right depending on step + // count + switch (stats.getLastStep()) + { + case 0: + pos.translate(new Vector3(Math.sin(Math.toRadians(-player.rotationYaw + 90)) * 0.25, 0, Math.cos(Math.toRadians(-player.rotationYaw + 90)) * 0.25)); + break; + case 1: + pos.translate(new Vector3(Math.sin(Math.toRadians(-player.rotationYaw - 90)) * 0.25, 0, Math.cos(Math.toRadians(-player.rotationYaw - 90)) * 0.25)); + break; + } + + pos = WorldUtil.getFootprintPosition(player.world, player.rotationYaw - 180, pos, new BlockVec3(player)); + + long chunkKey = ChunkPos.asLong(pos.intX() >> 4, pos.intZ() >> 4); + int lightmapVal = player.world.getCombinedLight(new BlockPos(pos.intX(), pos.intY(), pos.intZ()), 0); + FootprintRenderer.addFootprint(chunkKey, GCCoreUtil.getDimensionID(player.world), pos, player.rotationYaw, player.getName(), lightmapVal); + + // Increment and cap step counter at 1 + stats.setLastStep((stats.getLastStep() + 1) % 2); + stats.setDistanceSinceLastStep(0); + } else + { + stats.setDistanceSinceLastStep(stats.getDistanceSinceLastStep() + motionSqrd); + } + } + } + } + } + + public boolean wakeUpPlayer(EntityPlayerSP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn, boolean bypass) + { + BlockPos c = player.bedLocation; + + if (c != null) + { + EventWakePlayer event = new EventWakePlayer(player, c, immediately, updateWorldFlag, setSpawn, bypass); + MinecraftForge.EVENT_BUS.post(event); + + if (bypass || event.result == null || event.result == EntityPlayer.SleepResult.OK) + { + return false; + } + } + + return true; + } + + @Override + public void onBuild(int i, EntityPlayerSP player) + { + // 0 : opened GC inventory tab + // 1,2,3 : Compressor, CF, Standard Wrench + // 4,5,6 : Fuel loader, Launchpad, NASA Workbench + // 7: oil found 8: placed rocket + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + int flag = stats.getBuildFlags(); + if (flag == -1) + { + flag = 0; + } + int repeatCount = flag >> 9; + if (repeatCount <= 3) + { + repeatCount++; + } + if ((flag & 1 << i) > 0) + { + return; + } + flag |= 1 << i; + stats.setBuildFlags((flag & 511) + (repeatCount << 9)); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_BUILDFLAGS_UPDATE, GCCoreUtil.getDimensionID(player.world), new Object[] + {stats.getBuildFlags()})); + switch (i) + { + case 0: + case 1: + case 2: + case 3: + player.sendMessage(ITextComponent.Serializer + .jsonToComponent("[{\"text\":\"" + GCCoreUtil.translate("gui.message.help1") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + Constants.PREFIX + + "com/wiki/1" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki/1" + "\"}}]")); + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.help1a") + EnumColor.AQUA + " /gchelp")); + break; + case 4: + case 5: + case 6: + player.sendMessage(ITextComponent.Serializer + .jsonToComponent("[{\"text\":\"" + GCCoreUtil.translate("gui.message.help2") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + Constants.PREFIX + + "com/wiki/2" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki/2" + "\"}}]")); + break; + case 7: + player.sendMessage(ITextComponent.Serializer + .jsonToComponent("[{\"text\":\"" + GCCoreUtil.translate("gui.message.help3") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + Constants.PREFIX + + "com/wiki/oil" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki/oil" + "\"}}]")); + break; + case 8: + player.sendMessage(ITextComponent.Serializer.jsonToComponent( + "[{\"text\":\"" + GCCoreUtil.translate("gui.message.prelaunch") + ": \",\"color\":\"white\"}," + "{\"text\":\" " + EnumColor.BRIGHT_GREEN + "wiki." + Constants.PREFIX + + "com/wiki/pre" + "\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":" + "{\"text\":\"" + GCCoreUtil.translate("gui.message.clicklink") + + "\",\"color\":\"yellow\"}}," + "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + "http://wiki." + Constants.PREFIX + "com/wiki/pre" + "\"}}]")); + break; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerServer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerServer.java new file mode 100644 index 00000000..f0b69ff1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/PlayerServer.java @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingKnockBackEvent; + +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.event.EventWakePlayer; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemArmorAsteroids; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemArmorMars; + +public class PlayerServer implements IPlayerServer +{ + + private boolean updatingRidden = false; + static List noClipList = new LinkedList<>(); + + @Override + public void updateRiddenPre(EntityPlayerMP player) + { + this.updatingRidden = true; + } + + @Override + public void updateRiddenPost(EntityPlayerMP player) + { + this.updatingRidden = false; + } + + @Override + public boolean dismountEntity(EntityPlayerMP player, Entity par1Entity) + { + return updatingRidden && player.getRidingEntity() instanceof IIgnoreShift && ((IIgnoreShift) player.getRidingEntity()).shouldIgnoreShiftExit(); + + } + + @Override + public void move(EntityPlayerMP player, MoverType type, double x, double y, double z) + { + // If the player is on the moon, not airbourne and not riding anything + if (player.world.provider instanceof WorldProviderMoon && !player.world.isRemote && player.getRidingEntity() == null) + { + GCPlayerHandler.updateFeet(player, x, z); + } + } + + @Override + public boolean wakeUpPlayer(EntityPlayerMP player, boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + BlockPos c = player.bedLocation; + + if (c != null) + { + EventWakePlayer event = new EventWakePlayer(player, c, immediately, updateWorldFlag, setSpawn, false); + MinecraftForge.EVENT_BUS.post(event); + + if (event.result == null || event.result == EntityPlayer.SleepResult.OK) + { + return false; + } + } + + return true; + } + + @Override + public float attackEntityFrom(EntityPlayerMP player, DamageSource par1DamageSource, float par2) + { + // No damage while in Celestial Selection screen + if (player.getRidingEntity() instanceof EntityCelestialFake) + { + return -1F; + } + + if (par1DamageSource == DamageSource.OUT_OF_WORLD) + { + if (player.world.provider instanceof WorldProviderAsteroids) + { + if (player.posY > -120D) + { + return -1F; + } + if (player.posY > -180D) + { + par2 /= 2; + } + } + } + else if (par1DamageSource == DamageSource.FALL || par1DamageSource == DamageSourceGC.spaceshipCrash) + { + int titaniumCount = 0; + if (player.inventory != null) + { + for (ItemStack armorPiece : player.getArmorInventoryList()) + { + if (armorPiece != null && armorPiece.getItem() instanceof ItemArmorAsteroids) + { + titaniumCount++; + } + } + } + if (titaniumCount == 4) + { + titaniumCount = 5; + } + + par2 *= (1 - 0.15D * titaniumCount); + } + + return (par2 == -1F) ? -0.9999F : par2; + } + + @Override + public void knockBack(EntityPlayerMP player, Entity entity, float strength, double impulseX, double impulseZ) + { + LivingKnockBackEvent event = ForgeHooks.onLivingKnockBack(player, entity, strength, impulseX, impulseZ); + if (event.isCanceled()) + return; + + int deshCount = 0; + if (player.inventory != null) + { + for (int i = 0; i < 4; i++) + { + for (ItemStack armorPiece : player.getArmorInventoryList()) + { + if (armorPiece != null && armorPiece.getItem() instanceof ItemArmorMars) + { + deshCount++; + } + } + } + } + + if (player.getRNG().nextDouble() >= player.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).getAttributeValue()) + { + player.isAirBorne = deshCount < 2; + float f1 = MathHelper.sqrt(impulseX * impulseX + impulseZ * impulseZ); + float f2 = 0.4F - deshCount * 0.05F; + double d1 = 2.0D - deshCount * 0.15D; + player.motionX /= d1; + player.motionY /= d1; + player.motionZ /= d1; + player.motionX -= f2 * impulseX / f1; + player.motionY += f2; + player.motionZ -= f2 * impulseZ / f1; + + if (player.motionY > 0.4D) + { + player.motionY = 0.4D; + } + } + } + + @Override + public boolean isSpectator(EntityPlayerMP player) + { + return noClipList.contains(player); + } + + @Override + public void setNoClip(EntityPlayerMP player, boolean noClip) + { + if (noClip) + { + if (!noClipList.contains(player)) + noClipList.add(player); + } + else + { + noClipList.remove(player); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsCapability.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsCapability.java new file mode 100644 index 00000000..3831be2a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsCapability.java @@ -0,0 +1,1420 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.command.CommandGCInv; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.tick.AsteroidsTickHandlerServer; + +import com.google.common.collect.Maps; + +public class StatsCapability extends GCPlayerStats +{ + + //@noformat + public WeakReference player; + + public InventoryExtended extendedInventory = new InventoryExtended(); + + public int airRemaining; + public int airRemaining2; + + public int thermalLevel; + public boolean thermalLevelNormalising; + + public int damageCounter; + + // temporary data while player is in planet selection GUI + public int spaceshipTier = 1; + public NonNullList stacks = NonNullList.withSize(2, ItemStack.EMPTY); + public int rocketType; + public int fuelLevel; + public Item rocketItem; + public ItemStack launchpadStack; + public int astroMinerCount = 0; + private List activeAstroMinerChunks = new LinkedList<>(); + + public boolean usingParachute; + + public ItemStack parachuteInSlot = ItemStack.EMPTY; + public ItemStack lastParachuteInSlot = ItemStack.EMPTY; + + public ItemStack frequencyModuleInSlot = ItemStack.EMPTY; + public ItemStack lastFrequencyModuleInSlot = ItemStack.EMPTY; + + public ItemStack maskInSlot = ItemStack.EMPTY; + public ItemStack lastMaskInSlot = ItemStack.EMPTY; + + public ItemStack gearInSlot = ItemStack.EMPTY; + public ItemStack lastGearInSlot = ItemStack.EMPTY; + + public ItemStack tankInSlot1 = ItemStack.EMPTY; + public ItemStack lastTankInSlot1 = ItemStack.EMPTY; + + public ItemStack tankInSlot2 = ItemStack.EMPTY; + public ItemStack lastTankInSlot2 = ItemStack.EMPTY; + + public ItemStack thermalHelmetInSlot = ItemStack.EMPTY; + public ItemStack lastThermalHelmetInSlot = ItemStack.EMPTY; + + public ItemStack thermalChestplateInSlot = ItemStack.EMPTY; + public ItemStack lastThermalChestplateInSlot = ItemStack.EMPTY; + + public ItemStack thermalLeggingsInSlot = ItemStack.EMPTY; + public ItemStack lastThermalLeggingsInSlot = ItemStack.EMPTY; + + public ItemStack thermalBootsInSlot = ItemStack.EMPTY; + public ItemStack lastThermalBootsInSlot = ItemStack.EMPTY; + + public ItemStack shieldControllerInSlot = ItemStack.EMPTY; + public ItemStack lastShieldControllerInSlot = ItemStack.EMPTY; + + public int launchAttempts = 0; + + public int spaceRaceInviteTeamID; + + public boolean usingPlanetSelectionGui; + public String savedPlanetList = ""; + public int openPlanetSelectionGuiCooldown; + public boolean hasOpenedPlanetSelectionGui = false; + + public int chestSpawnCooldown; + public Vector3 chestSpawnVector; + + public int teleportCooldown; + + public int chatCooldown; + + public double distanceSinceLastStep; + public int lastStep; + + public double coordsTeleportedFromX; + public double coordsTeleportedFromZ; + + public HashMap spaceStationDimensionData = Maps.newHashMap(); + + public boolean oxygenSetupValid; + public boolean lastOxygenSetupValid; + + public boolean touchedGround; + public boolean lastOnGround; + public boolean inLander; + public boolean justLanded; + + public List unlockedSchematics = new LinkedList<>(); + public List lastUnlockedSchematics = new LinkedList<>(); + + public int cryogenicChamberCooldown; + + public boolean receivedSoundWarning; + public boolean receivedBedWarning; + public boolean openedSpaceRaceManager = false; + public boolean sentFlags = false; + public boolean newInOrbit = true; + public boolean newAdventureSpawn; + public int buildFlags = 0; + + public int incrementalDamage = 0; + private float savedSpeed = 0F; // used by titanium armor + + public String startDimension = ""; + public int glassColor1 = -1; + public int glassColor2 = -1; + public int glassColor3 = -1; + + private IBlockState[] panelLightingBases = new IBlockState[BlockPanelLighting.PANELTYPES_LENGTH]; + private int panelLightingColor = 0xf0f0e0; + //@format + + @Override + public WeakReference getPlayer() + { + return player; + } + + @Override + public void setPlayer(WeakReference player) + { + this.player = player; + } + + @Override + public InventoryExtended getExtendedInventory() + { + return extendedInventory; + } + + @Override + public void setExtendedInventory(InventoryExtended extendedInventory) + { + this.extendedInventory = extendedInventory; + } + + @Override + public int getAirRemaining() + { + return airRemaining; + } + + @Override + public void setAirRemaining(int airRemaining) + { + this.airRemaining = airRemaining; + } + + @Override + public int getAirRemaining2() + { + return airRemaining2; + } + + @Override + public void setAirRemaining2(int airRemaining2) + { + this.airRemaining2 = airRemaining2; + } + + @Override + public int getThermalLevel() + { + return thermalLevel; + } + + @Override + public void setThermalLevel(int thermalLevel) + { + this.thermalLevel = thermalLevel; + } + + @Override + public boolean isThermalLevelNormalising() + { + return thermalLevelNormalising; + } + + @Override + public void setThermalLevelNormalising(boolean thermalLevelNormalising) + { + this.thermalLevelNormalising = thermalLevelNormalising; + } + + @Override + public int getDamageCounter() + { + return damageCounter; + } + + @Override + public void setDamageCounter(int damageCounter) + { + this.damageCounter = damageCounter; + } + + @Override + public int getSpaceshipTier() + { + return spaceshipTier; + } + + @Override + public void setSpaceshipTier(int spaceshipTier) + { + this.spaceshipTier = spaceshipTier; + } + + @Override + public NonNullList getRocketStacks() + { + return stacks; + } + + @Override + public void setRocketStacks(NonNullList rocketStacks) + { + this.stacks = rocketStacks; + } + + @Override + public int getRocketType() + { + return rocketType; + } + + @Override + public void setRocketType(int rocketType) + { + this.rocketType = rocketType; + } + + @Override + public int getFuelLevel() + { + return fuelLevel; + } + + @Override + public void setFuelLevel(int fuelLevel) + { + this.fuelLevel = fuelLevel; + } + + @Override + public Item getRocketItem() + { + return rocketItem; + } + + @Override + public void setRocketItem(Item rocketItem) + { + this.rocketItem = rocketItem; + } + + @Override + @Nullable + public ItemStack getLaunchpadStack() + { + return launchpadStack; + } + + @Override + public void setLaunchpadStack(ItemStack launchpadStack) + { + this.launchpadStack = launchpadStack; + } + + @Override + public int getAstroMinerCount() + { + return astroMinerCount; + } + + @Override + public void setAstroMinerCount(int astroMinerCount) + { + this.astroMinerCount = astroMinerCount; + } + + @Override + public List getActiveAstroMinerChunks() + { + return this.activeAstroMinerChunks; + } + + @Override + public boolean isUsingParachute() + { + return usingParachute; + } + + @Override + public void setUsingParachute(boolean usingParachute) + { + this.usingParachute = usingParachute; + } + + @Override + public ItemStack getParachuteInSlot() + { + return parachuteInSlot; + } + + @Override + public void setParachuteInSlot(ItemStack parachuteInSlot) + { + this.parachuteInSlot = parachuteInSlot; + } + + @Override + public ItemStack getLastParachuteInSlot() + { + return lastParachuteInSlot; + } + + @Override + public void setLastParachuteInSlot(ItemStack lastParachuteInSlot) + { + this.lastParachuteInSlot = lastParachuteInSlot; + } + + @Override + public ItemStack getFrequencyModuleInSlot() + { + return frequencyModuleInSlot; + } + + @Override + public void setFrequencyModuleInSlot(ItemStack frequencyModuleInSlot) + { + this.frequencyModuleInSlot = frequencyModuleInSlot; + } + + @Override + public ItemStack getLastFrequencyModuleInSlot() + { + return lastFrequencyModuleInSlot; + } + + @Override + public void setLastFrequencyModuleInSlot(ItemStack lastFrequencyModuleInSlot) + { + this.lastFrequencyModuleInSlot = lastFrequencyModuleInSlot; + } + + @Override + public ItemStack getMaskInSlot() + { + return maskInSlot; + } + + @Override + public void setMaskInSlot(ItemStack maskInSlot) + { + this.maskInSlot = maskInSlot; + } + + @Override + public ItemStack getLastMaskInSlot() + { + return lastMaskInSlot; + } + + @Override + public void setLastMaskInSlot(ItemStack lastMaskInSlot) + { + this.lastMaskInSlot = lastMaskInSlot; + } + + @Override + public ItemStack getGearInSlot() + { + return gearInSlot; + } + + @Override + public void setGearInSlot(ItemStack gearInSlot) + { + this.gearInSlot = gearInSlot; + } + + @Override + public ItemStack getLastGearInSlot() + { + return lastGearInSlot; + } + + @Override + public void setLastGearInSlot(ItemStack lastGearInSlot) + { + this.lastGearInSlot = lastGearInSlot; + } + + @Override + public ItemStack getTankInSlot1() + { + return tankInSlot1; + } + + @Override + public void setTankInSlot1(ItemStack tankInSlot1) + { + this.tankInSlot1 = tankInSlot1; + } + + @Override + public ItemStack getLastTankInSlot1() + { + return lastTankInSlot1; + } + + @Override + public void setLastTankInSlot1(ItemStack lastTankInSlot1) + { + this.lastTankInSlot1 = lastTankInSlot1; + } + + @Override + public ItemStack getTankInSlot2() + { + return tankInSlot2; + } + + @Override + public void setTankInSlot2(ItemStack tankInSlot2) + { + this.tankInSlot2 = tankInSlot2; + } + + @Override + public ItemStack getLastTankInSlot2() + { + return lastTankInSlot2; + } + + @Override + public void setLastTankInSlot2(ItemStack lastTankInSlot2) + { + this.lastTankInSlot2 = lastTankInSlot2; + } + + @Override + public ItemStack getThermalHelmetInSlot() + { + return thermalHelmetInSlot; + } + + @Override + public void setThermalHelmetInSlot(ItemStack thermalHelmetInSlot) + { + this.thermalHelmetInSlot = thermalHelmetInSlot; + } + + @Override + public ItemStack getLastThermalHelmetInSlot() + { + return lastThermalHelmetInSlot; + } + + @Override + public void setLastThermalHelmetInSlot(ItemStack lastThermalHelmetInSlot) + { + this.lastThermalHelmetInSlot = lastThermalHelmetInSlot; + } + + @Override + public ItemStack getThermalChestplateInSlot() + { + return thermalChestplateInSlot; + } + + @Override + public void setThermalChestplateInSlot(ItemStack thermalChestplateInSlot) + { + this.thermalChestplateInSlot = thermalChestplateInSlot; + } + + @Override + public ItemStack getLastThermalChestplateInSlot() + { + return lastThermalChestplateInSlot; + } + + @Override + public void setLastThermalChestplateInSlot(ItemStack lastThermalChestplateInSlot) + { + this.lastThermalChestplateInSlot = lastThermalChestplateInSlot; + } + + @Override + public ItemStack getThermalLeggingsInSlot() + { + return thermalLeggingsInSlot; + } + + @Override + public void setThermalLeggingsInSlot(ItemStack thermalLeggingsInSlot) + { + this.thermalLeggingsInSlot = thermalLeggingsInSlot; + } + + @Override + public ItemStack getLastThermalLeggingsInSlot() + { + return lastThermalLeggingsInSlot; + } + + @Override + public void setLastThermalLeggingsInSlot(ItemStack lastThermalLeggingsInSlot) + { + this.lastThermalLeggingsInSlot = lastThermalLeggingsInSlot; + } + + @Override + public ItemStack getThermalBootsInSlot() + { + return thermalBootsInSlot; + } + + @Override + public void setThermalBootsInSlot(ItemStack thermalBootsInSlot) + { + this.thermalBootsInSlot = thermalBootsInSlot; + } + + @Override + public ItemStack getLastThermalBootsInSlot() + { + return lastThermalBootsInSlot; + } + + @Override + public void setLastThermalBootsInSlot(ItemStack lastThermalBootsInSlot) + { + this.lastThermalBootsInSlot = lastThermalBootsInSlot; + } + + @Override + public ItemStack getShieldControllerInSlot() + { + return shieldControllerInSlot; + } + + @Override + public void setShieldControllerInSlot(ItemStack shieldControllerInSlot) + { + this.shieldControllerInSlot = shieldControllerInSlot; + } + + @Override + public ItemStack getLastShieldControllerInSlot() + { + return lastShieldControllerInSlot; + } + + @Override + public void setLastShieldControllerInSlot(ItemStack lastShieldControllerInSlot) + { + this.lastShieldControllerInSlot = lastShieldControllerInSlot; + } + + @Override + public int getLaunchAttempts() + { + return launchAttempts; + } + + @Override + public void setLaunchAttempts(int launchAttempts) + { + this.launchAttempts = launchAttempts; + } + + @Override + public int getSpaceRaceInviteTeamID() + { + return spaceRaceInviteTeamID; + } + + @Override + public void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID) + { + this.spaceRaceInviteTeamID = spaceRaceInviteTeamID; + } + + @Override + public boolean isUsingPlanetSelectionGui() + { + return usingPlanetSelectionGui; + } + + @Override + public void setUsingPlanetSelectionGui(boolean usingPlanetSelectionGui) + { + this.usingPlanetSelectionGui = usingPlanetSelectionGui; + } + + @Override + public String getSavedPlanetList() + { + return savedPlanetList; + } + + @Override + public void setSavedPlanetList(String savedPlanetList) + { + this.savedPlanetList = savedPlanetList; + } + + @Override + public int getOpenPlanetSelectionGuiCooldown() + { + return openPlanetSelectionGuiCooldown; + } + + @Override + public void setOpenPlanetSelectionGuiCooldown(int openPlanetSelectionGuiCooldown) + { + this.openPlanetSelectionGuiCooldown = openPlanetSelectionGuiCooldown; + } + + @Override + public boolean hasOpenedPlanetSelectionGui() + { + return hasOpenedPlanetSelectionGui; + } + + @Override + public void setHasOpenedPlanetSelectionGui(boolean hasOpenedPlanetSelectionGui) + { + this.hasOpenedPlanetSelectionGui = hasOpenedPlanetSelectionGui; + } + + @Override + public int getChestSpawnCooldown() + { + return chestSpawnCooldown; + } + + @Override + public void setChestSpawnCooldown(int chestSpawnCooldown) + { + this.chestSpawnCooldown = chestSpawnCooldown; + } + + @Override + public Vector3 getChestSpawnVector() + { + return chestSpawnVector; + } + + @Override + public void setChestSpawnVector(Vector3 chestSpawnVector) + { + this.chestSpawnVector = chestSpawnVector; + } + + @Override + public int getTeleportCooldown() + { + return teleportCooldown; + } + + @Override + public void setTeleportCooldown(int teleportCooldown) + { + this.teleportCooldown = teleportCooldown; + } + + @Override + public int getChatCooldown() + { + return chatCooldown; + } + + @Override + public void setChatCooldown(int chatCooldown) + { + this.chatCooldown = chatCooldown; + } + + @Override + public double getDistanceSinceLastStep() + { + return distanceSinceLastStep; + } + + @Override + public void setDistanceSinceLastStep(double distanceSinceLastStep) + { + this.distanceSinceLastStep = distanceSinceLastStep; + } + + @Override + public int getLastStep() + { + return lastStep; + } + + @Override + public void setLastStep(int lastStep) + { + this.lastStep = lastStep; + } + + @Override + public double getCoordsTeleportedFromX() + { + return coordsTeleportedFromX; + } + + @Override + public void setCoordsTeleportedFromX(double coordsTeleportedFromX) + { + this.coordsTeleportedFromX = coordsTeleportedFromX; + } + + @Override + public double getCoordsTeleportedFromZ() + { + return coordsTeleportedFromZ; + } + + @Override + public void setCoordsTeleportedFromZ(double coordsTeleportedFromZ) + { + this.coordsTeleportedFromZ = coordsTeleportedFromZ; + } + + @Override + public HashMap getSpaceStationDimensionData() + { + return spaceStationDimensionData; + } + + @Override + public void setSpaceStationDimensionData(HashMap spaceStationDimensionData) + { + this.spaceStationDimensionData = spaceStationDimensionData; + } + + @Override + public boolean isOxygenSetupValid() + { + return oxygenSetupValid; + } + + @Override + public void setOxygenSetupValid(boolean oxygenSetupValid) + { + this.oxygenSetupValid = oxygenSetupValid; + } + + @Override + public boolean isLastOxygenSetupValid() + { + return lastOxygenSetupValid; + } + + @Override + public void setLastOxygenSetupValid(boolean lastOxygenSetupValid) + { + this.lastOxygenSetupValid = lastOxygenSetupValid; + } + + @Override + public boolean isTouchedGround() + { + return touchedGround; + } + + @Override + public void setTouchedGround(boolean touchedGround) + { + this.touchedGround = touchedGround; + } + + @Override + public boolean isLastOnGround() + { + return lastOnGround; + } + + @Override + public void setLastOnGround(boolean lastOnGround) + { + this.lastOnGround = lastOnGround; + } + + @Override + public boolean isInLander() + { + return inLander; + } + + @Override + public void setInLander(boolean inLander) + { + this.inLander = inLander; + } + + @Override + public boolean hasJustLanded() + { + return justLanded; + } + + @Override + public void setJustLanded(boolean justLanded) + { + this.justLanded = justLanded; + } + + @Override + public List getUnlockedSchematics() + { + return unlockedSchematics; + } + + @Override + public void setUnlockedSchematics(List unlockedSchematics) + { + this.unlockedSchematics = unlockedSchematics; + } + + @Override + public List getLastUnlockedSchematics() + { + return lastUnlockedSchematics; + } + + @Override + public void setLastUnlockedSchematics(List lastUnlockedSchematics) + { + this.lastUnlockedSchematics = lastUnlockedSchematics; + } + + @Override + public int getCryogenicChamberCooldown() + { + return cryogenicChamberCooldown; + } + + @Override + public void setCryogenicChamberCooldown(int cryogenicChamberCooldown) + { + this.cryogenicChamberCooldown = cryogenicChamberCooldown; + } + + @Override + public boolean hasReceivedSoundWarning() + { + return receivedSoundWarning; + } + + @Override + public void setReceivedSoundWarning(boolean receivedSoundWarning) + { + this.receivedSoundWarning = receivedSoundWarning; + } + + @Override + public boolean hasReceivedBedWarning() + { + return receivedBedWarning; + } + + @Override + public void setReceivedBedWarning(boolean receivedBedWarning) + { + this.receivedBedWarning = receivedBedWarning; + } + + @Override + public boolean hasOpenedSpaceRaceManager() + { + return openedSpaceRaceManager; + } + + @Override + public void setOpenedSpaceRaceManager(boolean openedSpaceRaceManager) + { + this.openedSpaceRaceManager = openedSpaceRaceManager; + } + + @Override + public boolean hasSentFlags() + { + return sentFlags; + } + + @Override + public void setSentFlags(boolean sentFlags) + { + this.sentFlags = sentFlags; + } + + @Override + public boolean isNewInOrbit() + { + return newInOrbit; + } + + @Override + public void setNewInOrbit(boolean newInOrbit) + { + this.newInOrbit = newInOrbit; + } + + @Override + public boolean isNewAdventureSpawn() + { + return newAdventureSpawn; + } + + @Override + public void setNewAdventureSpawn(boolean newAdventureSpawn) + { + this.newAdventureSpawn = newAdventureSpawn; + } + + @Override + public int getBuildFlags() + { + return buildFlags; + } + + @Override + public void setBuildFlags(int buildFlags) + { + this.buildFlags = buildFlags; + } + + @Override + public int getIncrementalDamage() + { + return incrementalDamage; + } + + @Override + public void setIncrementalDamage(int incrementalDamage) + { + this.incrementalDamage = incrementalDamage; + } + + @Override + public String getStartDimension() + { + return startDimension; + } + + @Override + public void setStartDimension(String startDimension) + { + this.startDimension = startDimension; + } + + @Override + public void saveNBTData(NBTTagCompound nbt) + { + nbt.setTag("ExtendedInventoryGC", this.extendedInventory.writeToNBT(new NBTTagList())); + nbt.setInteger("playerAirRemaining", this.airRemaining); + nbt.setInteger("damageCounter", this.damageCounter); + nbt.setBoolean("OxygenSetupValid", this.oxygenSetupValid); + nbt.setBoolean("usingParachute2", this.usingParachute); + nbt.setBoolean("usingPlanetSelectionGui", this.usingPlanetSelectionGui); + nbt.setInteger("teleportCooldown", this.teleportCooldown); + nbt.setDouble("coordsTeleportedFromX", this.coordsTeleportedFromX); + nbt.setDouble("coordsTeleportedFromZ", this.coordsTeleportedFromZ); + nbt.setString("startDimension", this.startDimension); + nbt.setString("spaceStationDimensionInfo", WorldUtil.spaceStationDataToString(this.spaceStationDimensionData)); + nbt.setInteger("thermalLevel", this.thermalLevel); + + Collections.sort(this.unlockedSchematics); + + Arrays.sort(new int[6]); + + NBTTagList tagList = new NBTTagList(); + + for (ISchematicPage page : this.unlockedSchematics) + { + if (page != null) + { + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setInteger("UnlockedPage", page.getPageID()); + tagList.appendTag(nbttagcompound); + } + } + + nbt.setTag("Schematics", tagList); + + nbt.setInteger("rocketStacksLength", this.stacks.size()); + nbt.setInteger("SpaceshipTier", this.spaceshipTier); + nbt.setInteger("FuelLevel", this.fuelLevel); + if (this.rocketItem != null) + { + ItemStack returnRocket = new ItemStack(this.rocketItem, 1, this.rocketType); + nbt.setTag("ReturnRocket", returnRocket.writeToNBT(new NBTTagCompound())); + } + + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < this.stacks.size(); ++i) + { + ItemStack itemstack = this.stacks.get(i); + + if (!itemstack.isEmpty()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) i); + itemstack.writeToNBT(nbttagcompound); + nbttaglist.appendTag(nbttagcompound); + } + } + + if (!nbttaglist.isEmpty()) + { + nbt.setTag("RocketItems", nbttaglist); + } + + final NBTTagCompound var4 = new NBTTagCompound(); + if (this.launchpadStack != null) + { + nbt.setTag("LaunchpadStack", this.launchpadStack.writeToNBT(var4)); + } + else + { + nbt.setTag("LaunchpadStack", var4); + } + + nbt.setInteger("CryogenicChamberCooldown", this.cryogenicChamberCooldown); + nbt.setBoolean("ReceivedSoundWarning", this.receivedSoundWarning); + nbt.setBoolean("ReceivedBedWarning", this.receivedBedWarning); + nbt.setInteger("BuildFlags", this.buildFlags); + nbt.setBoolean("ShownSpaceRace", this.openedSpaceRaceManager); + nbt.setInteger("AstroMinerCount", this.astroMinerCount); + NBTTagList astroList = new NBTTagList(); + for (BlockVec3 data : this.activeAstroMinerChunks) + { + if (data != null) + { + astroList.appendTag(data.writeToNBT(new NBTTagCompound())); + } + } + nbt.setTag("AstroData", astroList); + + nbt.setInteger("GlassColor1", this.glassColor1); + nbt.setInteger("GlassColor2", this.glassColor2); + nbt.setInteger("GlassColor3", this.glassColor3); + + NBTTagList panelList = new NBTTagList(); + for (int i = 0; i < BlockPanelLighting.PANELTYPES_LENGTH; ++i) + { + final NBTTagCompound stateNBT = new NBTTagCompound(); + IBlockState bs = this.panelLightingBases[i]; + if (bs != null) + { + TileEntityPanelLight.writeBlockState(stateNBT, bs); + } + panelList.appendTag(stateNBT); + } + nbt.setTag("PanLi", panelList); + + nbt.setInteger("PanCo", this.panelLightingColor); + } + + @Override + public void loadNBTData(NBTTagCompound nbt) + { + try + { + this.airRemaining = nbt.getInteger("playerAirRemaining"); + this.damageCounter = nbt.getInteger("damageCounter"); + this.oxygenSetupValid = this.lastOxygenSetupValid = nbt.getBoolean("OxygenSetupValid"); + this.thermalLevel = nbt.getInteger("thermalLevel"); + + // Backwards compatibility + NBTTagList nbttaglist = nbt.getTagList("Inventory", 10); + this.extendedInventory.readFromNBTOld(nbttaglist); + + if (nbt.hasKey("ExtendedInventoryGC")) + { + this.extendedInventory.readFromNBT(nbt.getTagList("ExtendedInventoryGC", 10)); + } + + // Added for GCInv command - if tried to load an offline player's + // inventory, load it now + // (if there was no offline load, then the dontload flag in doLoad() + // will make sure nothing happens) + EntityPlayerMP p = this.player.get(); + if (p != null) + { + ItemStack[] saveinv = CommandGCInv.getSaveData(PlayerUtil.getName(p).toLowerCase()); + if (saveinv != null) + { + CommandGCInv.doLoad(p); + } + } + + if (nbt.hasKey("SpaceshipTier")) + { + this.spaceshipTier = nbt.getInteger("SpaceshipTier"); + } + + // New keys in version 3.0.5.220 + if (nbt.hasKey("FuelLevel")) + { + this.fuelLevel = nbt.getInteger("FuelLevel"); + } + if (nbt.hasKey("ReturnRocket")) + { + ItemStack returnRocket = new ItemStack(nbt.getCompoundTag("ReturnRocket")); + this.rocketItem = returnRocket.getItem(); + this.rocketType = returnRocket.getItemDamage(); + } + + this.usingParachute = nbt.getBoolean("usingParachute2"); + this.usingPlanetSelectionGui = nbt.getBoolean("usingPlanetSelectionGui"); + this.teleportCooldown = nbt.getInteger("teleportCooldown"); + this.coordsTeleportedFromX = nbt.getDouble("coordsTeleportedFromX"); + this.coordsTeleportedFromZ = nbt.getDouble("coordsTeleportedFromZ"); + this.startDimension = nbt.hasKey("startDimension") ? nbt.getString("startDimension") : ""; + if (nbt.hasKey("spaceStationDimensionID")) + { + // If loading from an old save file, the home space station is + // always the overworld, so use 0 as home planet + this.spaceStationDimensionData = WorldUtil.stringToSpaceStationData("0$" + nbt.getInteger("spaceStationDimensionID")); + } + else + { + this.spaceStationDimensionData = WorldUtil.stringToSpaceStationData(nbt.getString("spaceStationDimensionInfo")); + } + + if (nbt.getBoolean("usingPlanetSelectionGui")) + { + this.openPlanetSelectionGuiCooldown = 20; + } + + if (nbt.hasKey("RocketItems") && nbt.hasKey("rocketStacksLength")) + { + int length = nbt.getInteger("rocketStacksLength"); + + this.stacks = NonNullList.withSize(length, ItemStack.EMPTY); + + NBTTagList nbttaglist1 = nbt.getTagList("RocketItems", 10); + + for (int i = 0; i < nbttaglist1.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist1.getCompoundTagAt(i); + int j = nbttagcompound.getByte("Slot") & 255; + + if (j >= 0 && j < this.stacks.size()) + { + this.stacks.set(j, new ItemStack(nbttagcompound)); + } + } + } + + this.unlockedSchematics = new ArrayList<>(); + + if (p != null) + { + for (int i = 0; i < nbt.getTagList("Schematics", 10).tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = nbt.getTagList("Schematics", 10).getCompoundTagAt(i); + + final int j = nbttagcompound.getInteger("UnlockedPage"); + + SchematicRegistry.addUnlockedPage(p, SchematicRegistry.getMatchingRecipeForID(j)); + } + } + + Collections.sort(this.unlockedSchematics); + + this.cryogenicChamberCooldown = nbt.getInteger("CryogenicChamberCooldown"); + + if (nbt.hasKey("ReceivedSoundWarning")) + { + this.receivedSoundWarning = nbt.getBoolean("ReceivedSoundWarning"); + } + if (nbt.hasKey("ReceivedBedWarning")) + { + this.receivedBedWarning = nbt.getBoolean("ReceivedBedWarning"); + } + + if (nbt.hasKey("LaunchpadStack")) + { + this.launchpadStack = new ItemStack(nbt.getCompoundTag("LaunchpadStack")); + } + else + { + // for backwards compatibility with saves which don't have this + // tag - players can't lose launchpads + this.launchpadStack = new ItemStack(GCBlocks.landingPad, 9, 0); + } + + if (nbt.hasKey("BuildFlags")) + { + this.buildFlags = nbt.getInteger("BuildFlags"); + } + + if (nbt.hasKey("ShownSpaceRace")) + { + this.openedSpaceRaceManager = nbt.getBoolean("ShownSpaceRace"); + } + + if (nbt.hasKey("AstroMinerCount")) + { + this.astroMinerCount = nbt.getInteger("AstroMinerCount"); + } + if (nbt.hasKey("AstroData")) + { + this.activeAstroMinerChunks.clear(); + NBTTagList astroList = nbt.getTagList("AstroData", 10); + for (int i = 0; i < astroList.tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = astroList.getCompoundTagAt(i); + BlockVec3 data = BlockVec3.readFromNBT(nbttagcompound); + this.activeAstroMinerChunks.add(data); + } + AsteroidsTickHandlerServer.loadAstroChunkList(this.activeAstroMinerChunks); + } + + if (nbt.hasKey("GlassColor1")) + { + this.glassColor1 = nbt.getInteger("GlassColor1"); + this.glassColor2 = nbt.getInteger("GlassColor2"); + this.glassColor3 = nbt.getInteger("GlassColor3"); + } + + if (nbt.hasKey("PanLi")) + { + final NBTTagList panels = nbt.getTagList("PanLi", 10); + for (int i = 0; i < panels.tagCount(); ++i) + { + if (i == BlockPanelLighting.PANELTYPES_LENGTH) + break; + final NBTTagCompound stateNBT = panels.getCompoundTagAt(i); + IBlockState bs = TileEntityPanelLight.readBlockState(stateNBT); + this.panelLightingBases[i] = (bs.getBlock() == Blocks.AIR) ? null : bs; + } + } + + if (nbt.hasKey("PanCo")) + { + this.panelLightingColor = nbt.getInteger("PanCo"); + } + + GalacticraftCore.logger.debug("Loading GC player data for " + PlayerUtil.getName(player.get()) + " : " + this.buildFlags); + + this.sentFlags = false; + } catch (Exception e) + { + GalacticraftCore.logger.error("Found error in saved Galacticraft player data for " + PlayerUtil.getName(player.get()) + " - this should fix itself next relog."); + e.printStackTrace(); + } + + GalacticraftCore.logger.debug("Finished loading GC player data for " + PlayerUtil.getName(player.get()) + " : " + this.buildFlags); + } + + @Override + public void copyFrom(GCPlayerStats oldData, boolean keepInv) + { + if (keepInv) + { + this.extendedInventory.copyInventory(oldData.getExtendedInventory()); + } + + this.spaceStationDimensionData = oldData.getSpaceStationDimensionData(); + this.unlockedSchematics = oldData.getUnlockedSchematics(); + this.receivedSoundWarning = oldData.hasReceivedSoundWarning(); + this.receivedBedWarning = oldData.hasReceivedBedWarning(); + this.openedSpaceRaceManager = oldData.hasOpenedSpaceRaceManager(); + this.spaceRaceInviteTeamID = oldData.getSpaceRaceInviteTeamID(); + this.buildFlags = oldData.getBuildFlags(); + this.glassColor1 = oldData.getGlassColor1(); + this.glassColor2 = oldData.getGlassColor2(); + this.glassColor3 = oldData.getGlassColor3(); + this.panelLightingBases = oldData.getPanelLightingBases(); + this.panelLightingColor = oldData.getPanelLightingColor(); + this.astroMinerCount = oldData.getAstroMinerCount(); + this.activeAstroMinerChunks = oldData.getActiveAstroMinerChunks(); + this.sentFlags = false; + } + + @Override + public void setGlassColors(int color1, int color2, int color3) + { + boolean changes = false; + if (this.glassColor1 != color1) + { + changes = true; + this.glassColor1 = color1; + } + if (this.glassColor2 != color2) + { + changes = true; + this.glassColor2 = color2; + } + if (this.glassColor3 != color3) + { + changes = true; + this.glassColor3 = color3; + } + if (changes) + ColorUtil.sendUpdatedColorsToPlayer(this); + } + + @Override + public int getGlassColor1() + { + return glassColor1; + } + + @Override + public int getGlassColor2() + { + return glassColor2; + } + + @Override + public int getGlassColor3() + { + return glassColor3; + } + + @Override + public IBlockState[] getPanelLightingBases() + { + return panelLightingBases; + } + + @Override + public int getPanelLightingColor() + { + return panelLightingColor; + } + + @Override + public void setPanelLightingColor(int color) + { + panelLightingColor = color; + } + + @Override + public Object[] getMiscNetworkedStats() + { + int length = 2 + BlockPanelLighting.PANELTYPES_LENGTH * 2; + Object[] result = new Object[length]; + result[0] = this.getBuildFlags(); + BlockPanelLighting.getNetworkedData(result, this.panelLightingBases); + result[length - 1] = this.panelLightingColor; + return result; + } + + @Override + public void setSavedSpeed(float value) + { + this.savedSpeed = value; + } + + @Override + public float getSavedSpeed() + { + return this.savedSpeed; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsClientCapability.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsClientCapability.java new file mode 100644 index 00000000..aa04d070 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/entities/player/StatsClientCapability.java @@ -0,0 +1,716 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.entities.player; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.util.math.AxisAlignedBB; + +public class StatsClientCapability extends GCPlayerStatsClient +{ + + public boolean usingParachute; + public boolean lastUsingParachute; + public boolean usingAdvancedGoggles; + public int thermalLevel; + public boolean thermalLevelNormalising; + public int thirdPersonView = 0; + public long tick; + public boolean oxygenSetupValid = true; + AxisAlignedBB boundingBoxBefore; + public boolean lastOnGround; + + public double distanceSinceLastStep; + public int lastStep; + public boolean inFreefall; + public boolean inFreefallLast; + public boolean inFreefallFirstCheck; + public double downMotionLast; + public boolean lastRidingCameraZoomEntity; + public int landingTicks; + public static final int MAX_LANDINGTICKS = 15; + public float[] landingYOffset = new float[MAX_LANDINGTICKS + 1]; + + public boolean platformControlled; + private TileEntityPlatform platformTarget; + private TileEntityPlatform platformMoving; + private double platformTargetY; + private double platformVelocityTarget; + private double platformVelocityCurrent; + private boolean platformPacketSent; + + public EnumGravity gdir = EnumGravity.down; + public float gravityTurnRate; + public float gravityTurnRatePrev; + public float gravityTurnVecX; + public float gravityTurnVecY; + public float gravityTurnVecZ; + public float gravityTurnYaw; + + public int spaceRaceInviteTeamID; + public boolean lastZoomed; + public int buildFlags = -1; + + public boolean ssOnGroundLast; + private float dungeonDirection; + + public FreefallHandler freefallHandler = new FreefallHandler(this); + + public ArrayList unlockedSchematics = new ArrayList(); + + @Override + public void setGravity(EnumGravity newGravity) + { + if (this.gdir == newGravity) + { + return; + } + this.gravityTurnRatePrev = this.gravityTurnRate = 0.0F; + float turnSpeed = 0.05F; + this.gravityTurnVecX = 0.0F; + this.gravityTurnVecY = 0.0F; + this.gravityTurnVecZ = 0.0F; + this.gravityTurnYaw = 0.0F; + + switch (this.gdir.getIntValue()) + { + case 1: + switch (newGravity.getIntValue()) + { + case 1: + break; + case 2: + this.gravityTurnVecX = -2.0F; + break; + case 3: + this.gravityTurnVecY = -1.0F; + this.gravityTurnYaw = -90.0F; + break; + case 4: + this.gravityTurnVecY = 1.0F; + this.gravityTurnYaw = 90.0F; + break; + case 5: + this.gravityTurnVecX = 1.0F; + break; + case 6: + this.gravityTurnVecX = -1.0F; + } + + break; + case 2: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecX = -2.0F; + break; + case 2: + break; + case 3: + this.gravityTurnVecY = 1.0F; + this.gravityTurnYaw = 90.0F; + break; + case 4: + this.gravityTurnVecY = -1.0F; + this.gravityTurnYaw = -90.0F; + break; + case 5: + this.gravityTurnVecX = -1.0F; + break; + case 6: + this.gravityTurnVecX = 1.0F; + } + + break; + case 3: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecY = 1.0F; + this.gravityTurnYaw = 90.0F; + break; + case 2: + this.gravityTurnVecY = -1.0F; + this.gravityTurnYaw = -90.0F; + break; + case 3: + break; + case 4: + this.gravityTurnVecZ = -2.0F; + break; + case 5: + this.gravityTurnVecZ = -1.0F; + this.gravityTurnYaw = -180.0F; + break; + case 6: + this.gravityTurnVecZ = 1.0F; + } + + break; + case 4: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecY = -1.0F; + this.gravityTurnYaw = -90.0F; + break; + case 2: + this.gravityTurnVecY = 1.0F; + this.gravityTurnYaw = 90.0F; + break; + case 3: + this.gravityTurnVecZ = -2.0F; + break; + case 4: + break; + case 5: + this.gravityTurnVecZ = 1.0F; + this.gravityTurnYaw = -180.0F; + break; + case 6: + this.gravityTurnVecZ = -1.0F; + } + + break; + case 5: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecX = -1.0F; + break; + case 2: + this.gravityTurnVecX = 1.0F; + break; + case 3: + this.gravityTurnVecZ = 1.0F; + this.gravityTurnYaw = 180.0F; + break; + case 4: + this.gravityTurnVecZ = -1.0F; + this.gravityTurnYaw = 180.0F; + break; + case 5: + break; + case 6: + this.gravityTurnVecX = -2.0F; + } + + break; + case 6: + switch (newGravity.getIntValue()) + { + case 1: + this.gravityTurnVecX = 1.0F; + break; + case 2: + this.gravityTurnVecX = -1.0F; + break; + case 3: + this.gravityTurnVecZ = -1.0F; + break; + case 4: + this.gravityTurnVecZ = 1.0F; + break; + case 5: + this.gravityTurnVecX = -2.0F; + case 6: + } + break; + } + + this.gdir = newGravity; + } + + @Override + public boolean isUsingParachute() + { + return usingParachute; + } + + @Override + public void setUsingParachute(boolean usingParachute) + { + this.usingParachute = usingParachute; + } + + @Override + public boolean isLastUsingParachute() + { + return lastUsingParachute; + } + + @Override + public void setLastUsingParachute(boolean lastUsingParachute) + { + this.lastUsingParachute = lastUsingParachute; + } + + @Override + public boolean isUsingAdvancedGoggles() + { + return usingAdvancedGoggles; + } + + @Override + public void setUsingAdvancedGoggles(boolean usingAdvancedGoggles) + { + this.usingAdvancedGoggles = usingAdvancedGoggles; + } + + @Override + public int getThermalLevel() + { + return thermalLevel; + } + + @Override + public void setThermalLevel(int thermalLevel) + { + this.thermalLevel = thermalLevel; + } + + @Override + public boolean isThermalLevelNormalising() + { + return thermalLevelNormalising; + } + + @Override + public void setThermalLevelNormalising(boolean thermalLevelNormalising) + { + this.thermalLevelNormalising = thermalLevelNormalising; + } + + @Override + public int getThirdPersonView() + { + return thirdPersonView; + } + + @Override + public void setThirdPersonView(int thirdPersonView) + { + this.thirdPersonView = thirdPersonView; + } + + @Override + public long getTick() + { + return tick; + } + + @Override + public void setTick(long tick) + { + this.tick = tick; + } + + @Override + public boolean isOxygenSetupValid() + { + return oxygenSetupValid; + } + + @Override + public void setOxygenSetupValid(boolean oxygenSetupValid) + { + this.oxygenSetupValid = oxygenSetupValid; + } + + @Override + public AxisAlignedBB getBoundingBoxBefore() + { + return boundingBoxBefore; + } + + @Override + public void setBoundingBoxBefore(AxisAlignedBB boundingBoxBefore) + { + this.boundingBoxBefore = boundingBoxBefore; + } + + @Override + public boolean isLastOnGround() + { + return lastOnGround; + } + + @Override + public void setLastOnGround(boolean lastOnGround) + { + this.lastOnGround = lastOnGround; + } + + @Override + public double getDistanceSinceLastStep() + { + return distanceSinceLastStep; + } + + @Override + public void setDistanceSinceLastStep(double distanceSinceLastStep) + { + this.distanceSinceLastStep = distanceSinceLastStep; + } + + @Override + public int getLastStep() + { + return lastStep; + } + + @Override + public void setLastStep(int lastStep) + { + this.lastStep = lastStep; + } + + @Override + public boolean isInFreefall() + { + return inFreefall; + } + + @Override + public void setInFreefall(boolean inFreefall) + { + this.inFreefall = inFreefall; + } + + @Override + public boolean isInFreefallLast() + { + return inFreefallLast; + } + + @Override + public void setInFreefallLast(boolean inFreefallLast) + { + this.inFreefallLast = inFreefallLast; + } + + @Override + public boolean isInFreefallFirstCheck() + { + return inFreefallFirstCheck; + } + + @Override + public void setInFreefallFirstCheck(boolean inFreefallFirstCheck) + { + this.inFreefallFirstCheck = inFreefallFirstCheck; + } + + @Override + public double getDownMotionLast() + { + return downMotionLast; + } + + @Override + public void setDownMotionLast(double downMotionLast) + { + this.downMotionLast = downMotionLast; + } + + @Override + public boolean isLastRidingCameraZoomEntity() + { + return lastRidingCameraZoomEntity; + } + + @Override + public void setLastRidingCameraZoomEntity(boolean lastRidingCameraZoomEntity) + { + this.lastRidingCameraZoomEntity = lastRidingCameraZoomEntity; + } + + @Override + public int getLandingTicks() + { + return landingTicks; + } + + @Override + public void setLandingTicks(int landingTicks) + { + this.landingTicks = landingTicks; + } + + @Override + public EnumGravity getGdir() + { + return gdir; + } + + @Override + public void setGdir(EnumGravity gdir) + { + this.gdir = gdir; + } + + @Override + public float getGravityTurnRate() + { + return gravityTurnRate; + } + + @Override + public void setGravityTurnRate(float gravityTurnRate) + { + this.gravityTurnRate = gravityTurnRate; + } + + @Override + public float getGravityTurnRatePrev() + { + return gravityTurnRatePrev; + } + + @Override + public void setGravityTurnRatePrev(float gravityTurnRatePrev) + { + this.gravityTurnRatePrev = gravityTurnRatePrev; + } + + @Override + public float getGravityTurnVecX() + { + return gravityTurnVecX; + } + + @Override + public void setGravityTurnVecX(float gravityTurnVecX) + { + this.gravityTurnVecX = gravityTurnVecX; + } + + @Override + public float getGravityTurnVecY() + { + return gravityTurnVecY; + } + + @Override + public void setGravityTurnVecY(float gravityTurnVecY) + { + this.gravityTurnVecY = gravityTurnVecY; + } + + @Override + public float getGravityTurnVecZ() + { + return gravityTurnVecZ; + } + + @Override + public void setGravityTurnVecZ(float gravityTurnVecZ) + { + this.gravityTurnVecZ = gravityTurnVecZ; + } + + @Override + public float getGravityTurnYaw() + { + return gravityTurnYaw; + } + + @Override + public void setGravityTurnYaw(float gravityTurnYaw) + { + this.gravityTurnYaw = gravityTurnYaw; + } + + @Override + public int getSpaceRaceInviteTeamID() + { + return spaceRaceInviteTeamID; + } + + @Override + public void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID) + { + this.spaceRaceInviteTeamID = spaceRaceInviteTeamID; + } + + @Override + public boolean isLastZoomed() + { + return lastZoomed; + } + + @Override + public void setLastZoomed(boolean lastZoomed) + { + this.lastZoomed = lastZoomed; + } + + @Override + public int getBuildFlags() + { + return buildFlags; + } + + @Override + public void setBuildFlags(int buildFlags) + { + this.buildFlags = buildFlags; + } + + @Override + public boolean isSsOnGroundLast() + { + return ssOnGroundLast; + } + + @Override + public void setSsOnGroundLast(boolean ssOnGroundLast) + { + this.ssOnGroundLast = ssOnGroundLast; + } + + @Override + public FreefallHandler getFreefallHandler() + { + return freefallHandler; + } + + @Override + public void setFreefallHandler(FreefallHandler freefallHandler) + { + this.freefallHandler = freefallHandler; + } + + @Override + public ArrayList getUnlockedSchematics() + { + return unlockedSchematics; + } + + @Override + public void setUnlockedSchematics(ArrayList unlockedSchematics) + { + this.unlockedSchematics = unlockedSchematics; + } + + @Override + public int getMaxLandingticks() + { + return MAX_LANDINGTICKS; + } + + @Override + public float[] getLandingYOffset() + { + return landingYOffset; + } + + @Override + public void setLandingYOffset(float[] landingYOffset) + { + this.landingYOffset = landingYOffset; + } + + @Override + public void setDungeonDirection(float dir) + { + this.dungeonDirection = dir; + } + + @Override + public float getDungeonDirection() + { + return this.dungeonDirection; + } + + @Override + public boolean getPlatformControlled() + { + return this.platformControlled; + } + + @Override + public void startPlatformAscent(TileEntityPlatform noCollide, TileEntityPlatform moving, double target) + { + this.platformControlled = true; + this.platformTarget = noCollide; + this.platformMoving = moving; + noCollide.markNoCollide(0, true); + this.platformTargetY = target; + this.platformVelocityCurrent = 0D; + this.platformVelocityTarget = 0D; + this.platformPacketSent = false; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_NOCLIP_PLAYER, GCCoreUtil.getDimensionID(noCollide), new Object[] + {true})); + } + + @Override + public void finishPlatformAscent() + { + } + + @Override + public double getPlatformVelocity(double posY) + { + double delta = this.platformTargetY - posY + 0.03D; + if (Math.abs(delta) < 0.04D) + { + this.platformVelocityCurrent = 0D; + this.platformVelocityTarget = 0D; + this.platformTarget.markNoCollide(0, false); + this.platformControlled = false; + this.platformTarget.stopMoving(); + this.platformMoving.stopMoving(); + if (!this.platformPacketSent) + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_NOCLIP_PLAYER, GCCoreUtil.getDimensionID(this.platformTarget), new Object[] + {false})); + return 0D; + } else + { + if (delta > 0D) + { + this.platformVelocityTarget = (delta < 1.0D + 8 * this.platformVelocityCurrent * this.platformVelocityCurrent) ? 0.08D : 0.45D; + if (delta < 0.6D && !this.platformPacketSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_NOCLIP_PLAYER, GCCoreUtil.getDimensionID(this.platformTarget), new Object[] + {false})); + this.platformPacketSent = true; + } + } else if (delta < 0D) + { + this.platformVelocityTarget = (delta > -1.0D - 8 * this.platformVelocityCurrent * this.platformVelocityCurrent) ? -0.08D : -0.45D; + if (delta > -1.0D && !this.platformPacketSent) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_NOCLIP_PLAYER, GCCoreUtil.getDimensionID(this.platformTarget), new Object[] + {false})); + this.platformPacketSent = true; + } + } + if (this.platformVelocityCurrent < this.platformVelocityTarget) + { + this.platformVelocityCurrent += 0.036D; + if (this.platformVelocityCurrent > this.platformVelocityTarget) + { + this.platformVelocityCurrent = this.platformVelocityTarget; + } + } else if (this.platformVelocityCurrent > this.platformVelocityTarget) + { + this.platformVelocityCurrent -= 0.036D; + if (this.platformVelocityCurrent < this.platformVelocityTarget) + { + this.platformVelocityCurrent = this.platformVelocityTarget; + } + } + } + return this.platformVelocityCurrent; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventHandlerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventHandlerGC.java new file mode 100644 index 00000000..94a6366f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventHandlerGC.java @@ -0,0 +1,1018 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.event; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.SortedSet; +import java.util.TreeSet; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockGravel; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockSand; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.audio.PositionedSound; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Biomes; +import net.minecraft.init.Blocks; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBucket; +import net.minecraft.item.ItemFireball; +import net.minecraft.item.ItemFlintAndSteel; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDesert; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.client.event.EntityViewRenderEvent; +import net.minecraftforge.client.event.sound.PlaySoundEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.living.LivingFallEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.living.ZombieEvent; +import net.minecraftforge.event.entity.player.FillBucketEvent; +import net.minecraftforge.event.entity.player.PlayerDropsEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; +import net.minecraftforge.event.terraingen.TerrainGen; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.event.world.ChunkDataEvent; +import net.minecraftforge.event.world.ChunkEvent.Load; +import net.minecraftforge.event.world.WorldEvent.Save; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.event.ConfigChangedEvent; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.fml.common.eventhandler.Event.Result; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.event.oxygen.GCCoreOxygenSuffocationEvent; +import micdoodle8.mods.galacticraft.api.item.IKeyItem; +import micdoodle8.mods.galacticraft.api.item.IKeyable; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicEvent.FlipPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicEvent.Unlock; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.TransformerHooks; +import micdoodle8.mods.galacticraft.core.client.SkyProviderOverworld; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.ASMUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.world.ChunkLoadingCallback; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; + +public class EventHandlerGC +{ + + public static Map bucketList = new HashMap<>(4, 1F); + public static boolean bedActivated; + + @SubscribeEvent + public void onWorldSave(Save event) + { + ChunkLoadingCallback.save((WorldServer) event.getWorld()); + } + + @SubscribeEvent + public void onChunkDataLoad(ChunkDataEvent.Load event) + { + ChunkLoadingCallback.load((WorldServer) event.getWorld()); + } + + @SubscribeEvent + public void onWorldLoad(Load event) + { + if (!event.getWorld().isRemote) + { + ChunkLoadingCallback.load((WorldServer) event.getWorld()); + } + } + + @SubscribeEvent + public void playerJoinWorld(EntityJoinWorldEvent event) + { + TickHandlerServer.markWorldNeedsUpdate(GCCoreUtil.getDimensionID(event.getWorld())); + } + + @SubscribeEvent + public void onConfigChanged(ConfigChangedEvent event) + { + if (event.getModID().equals(Constants.MOD_ID_CORE)) + { + ConfigManagerCore.syncConfig(false); + } + } + + @SubscribeEvent + public void onPortalSpawn(BlockEvent.PortalSpawnEvent event) + { + WorldProvider provider = event.getWorld().provider; + if (provider instanceof IGalacticraftWorldProvider) + { + event.setCanceled(!((IGalacticraftWorldProvider) provider).netherPortalsOperational()); + } + } + + @SubscribeEvent + public void onEntityDamaged(LivingHurtEvent event) + { + if (event.getSource().damageType.equals(DamageSource.ON_FIRE.damageType)) + { + if (OxygenUtil.noAtmosphericCombustion(event.getEntityLiving().world.provider)) + { + if (OxygenUtil.isAABBInBreathableAirBlock(event.getEntityLiving().world, event.getEntityLiving().getEntityBoundingBox())) + { + return; + } + + if (event.getEntityLiving().world instanceof WorldServer) + { + ((WorldServer) event.getEntityLiving().world).spawnParticle(EnumParticleTypes.SMOKE_NORMAL, event.getEntityLiving().posX, event.getEntityLiving().posY + event.getEntityLiving().getEntityBoundingBox().maxY - event.getEntityLiving().getEntityBoundingBox().minY, event.getEntityLiving().posZ, 50, 0.0, 0.05, 0.0, 0.001); + } + + event.getEntityLiving().extinguish(); + } + } + } + + @SubscribeEvent + public void onEntityFall(LivingFallEvent event) + { + if (event.getEntityLiving() instanceof EntityPlayer) + { + EntityPlayer player = (EntityPlayer) event.getEntityLiving(); + if (player.getRidingEntity() instanceof EntityAutoRocket || player.getRidingEntity() instanceof EntityLanderBase) + { + event.setDistance(0.0F); + event.setCanceled(true); + return; + } + } + + if (event.getEntityLiving().world.provider instanceof IGalacticraftWorldProvider) + { + event.setDistance(event.getDistance() * ((IGalacticraftWorldProvider) event.getEntityLiving().world.provider).getFallDamageModifier()); + } + } + + @SubscribeEvent + public void blockBreakSpeed(PlayerEvent.BreakSpeed event) + { + EntityPlayer p = event.getEntityPlayer(); + if (!p.onGround && p.world.provider instanceof IZeroGDimension && !ConfigManagerCore.hardMode && event.getOriginalSpeed() < 5.0F) + { + event.setNewSpeed(event.getOriginalSpeed() * 5.0F); + } + } + + @SubscribeEvent + public void onPlayerLeftClickedBlock(PlayerInteractEvent.LeftClickBlock event) + { + // Skip events triggered from Thaumcraft Golems and other non-players + if (event.getEntityPlayer() == null || event.getEntityPlayer().inventory == null || event.getPos() == null || (event.getPos().getX() == 0 && event.getPos().getY() == 0 && event.getPos().getZ() == 0)) + { + return; + } + + final World worldObj = event.getEntityPlayer().world; + if (worldObj == null) + { + return; + } + + final ItemStack heldStack = event.getEntityPlayer().inventory.getCurrentItem(); + final TileEntity tileClicked = worldObj.getTileEntity(event.getPos()); + + if (!heldStack.isEmpty()) + { + if (tileClicked != null && tileClicked instanceof IKeyable) + { + event.setCanceled(!((IKeyable) tileClicked).canBreak() && !event.getEntityPlayer().capabilities.isCreativeMode); + } + } + else if (tileClicked != null && tileClicked instanceof IKeyable) + { + event.setCanceled(!((IKeyable) tileClicked).canBreak() && !event.getEntityPlayer().capabilities.isCreativeMode); + } + } + + @SubscribeEvent + public void onPlayerRightClickedBlock(PlayerInteractEvent.RightClickBlock event) + { + // Skip events triggered from Thaumcraft Golems and other non-players + if (event.getEntityPlayer() == null || event.getEntityPlayer().inventory == null || event.getPos() == null || (event.getPos().getX() == 0 && event.getPos().getY() == 0 && event.getPos().getZ() == 0)) + { + return; + } + + final World worldObj = event.getEntityPlayer().world; + if (worldObj == null) + { + return; + } + + final Block idClicked = worldObj.getBlockState(event.getPos()).getBlock(); + + if (idClicked == Blocks.BED && worldObj.provider instanceof IGalacticraftWorldProvider && !worldObj.isRemote && !((IGalacticraftWorldProvider) worldObj.provider).hasBreathableAtmosphere()) + { + GCPlayerStats stats = GCPlayerStats.get(event.getEntityPlayer()); + if (!stats.hasReceivedBedWarning()) + { + event.getEntityPlayer().sendMessage(new TextComponentString(GCCoreUtil.translate("gui.bed_fail.message"))); + stats.setReceivedBedWarning(true); + } + + if (worldObj.provider instanceof WorldProviderSpaceStation) + { + // On space stations simply block the bed activation => no + // explosion + event.setCanceled(true); + return; + } + + // Optionally prevent beds from exploding - depends on + // canRespawnHere() in the WorldProvider interacting with this + EventHandlerGC.bedActivated = true; + if (worldObj.provider.canRespawnHere() && !EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = true; + + // On planets allow the bed to be used to designate a player + // spawn point + event.getEntityPlayer().setSpawnChunk(event.getPos(), false, GCCoreUtil.getDimensionID(event.getWorld())); + } + else + { + EventHandlerGC.bedActivated = false; + } + } + + final ItemStack heldStack = event.getEntityPlayer().inventory.getCurrentItem(); + final TileEntity tileClicked = worldObj.getTileEntity(event.getPos()); + + if (!heldStack.isEmpty()) + { + if (tileClicked != null && tileClicked instanceof IKeyable) + { + if (heldStack.getItem() instanceof IKeyItem) + { + if (((IKeyItem) heldStack.getItem()).getTier(heldStack) == -1 || ((IKeyable) tileClicked).getTierOfKeyRequired() == -1 || ((IKeyItem) heldStack.getItem()).getTier(heldStack) == ((IKeyable) tileClicked).getTierOfKeyRequired()) + { + event.setCanceled(((IKeyable) tileClicked).onValidKeyActivated(event.getEntityPlayer(), heldStack, event.getFace())); + } + else if (!event.getEntityPlayer().isSneaking()) + { + event.setCanceled(((IKeyable) tileClicked).onActivatedWithoutKey(event.getEntityPlayer(), event.getFace())); + } + } + else + { + event.setCanceled(((IKeyable) tileClicked).onActivatedWithoutKey(event.getEntityPlayer(), event.getFace())); + } + } + + if (heldStack.getItem() instanceof ItemFlintAndSteel || heldStack.getItem() instanceof ItemFireball) + { + if (!worldObj.isRemote) + { + if (idClicked != Blocks.TNT && OxygenUtil.noAtmosphericCombustion(event.getEntityPlayer().world.provider) && !OxygenUtil.isAABBInBreathableAirBlock(event.getEntityLiving().world, new AxisAlignedBB(event.getPos().getX(), event.getPos().getY(), event.getPos().getZ(), event.getPos().getX() + 1, event.getPos().getY() + 2, event.getPos().getZ() + 1))) + { + event.setCanceled(true); + } + } + } + } + else if (tileClicked != null && tileClicked instanceof IKeyable) + { + event.setCanceled(((IKeyable) tileClicked).onActivatedWithoutKey(event.getEntityPlayer(), event.getFace())); + } + } + + @SubscribeEvent + public void entityLivingEvent(LivingEvent.LivingUpdateEvent event) + { + final EntityLivingBase entityLiving = event.getEntityLiving(); + if (entityLiving instanceof EntityPlayerMP) + { + GalacticraftCore.handler.onPlayerUpdate((EntityPlayerMP) entityLiving); + AsteroidsModule.playerHandler.onPlayerUpdate((EntityPlayerMP) entityLiving); + return; + } + + if (entityLiving.ticksExisted % ConfigManagerCore.suffocationCooldown == 0) + { + if (entityLiving.world.provider instanceof IGalacticraftWorldProvider) + { + if (!(entityLiving instanceof EntityPlayer) && (!(entityLiving instanceof IEntityBreathable) || !((IEntityBreathable) entityLiving).canBreath()) && !((IGalacticraftWorldProvider) entityLiving.world.provider).hasBreathableAtmosphere()) + { + if (!OxygenUtil.isAABBInBreathableAirBlock(entityLiving)) + { + GCCoreOxygenSuffocationEvent suffocationEvent = new GCCoreOxygenSuffocationEvent.Pre(entityLiving); + MinecraftForge.EVENT_BUS.post(suffocationEvent); + + if (suffocationEvent.isCanceled()) + { + return; + } + + entityLiving.attackEntityFrom(DamageSourceGC.oxygenSuffocation, Math.max(ConfigManagerCore.suffocationDamage / 2, 1)); + + GCCoreOxygenSuffocationEvent suffocationEventPost = new GCCoreOxygenSuffocationEvent.Post(entityLiving); + MinecraftForge.EVENT_BUS.post(suffocationEventPost); + } + } + } + } + } + + @SubscribeEvent + public void entityUpdateCancelInFreefall(EntityEvent.CanUpdate event) + { + if (event.getEntity() instanceof EntityMeteor) + { + event.setCanUpdate(true); + return; + } + + if (event.getEntity().world.provider instanceof IZeroGDimension) + { + if (((IZeroGDimension) event.getEntity().world.provider).inFreefall(event.getEntity())) + { + event.setCanUpdate(true); + // event.entity.move(event.entity.motionX, event.entity.motionY, event.entity.motionZ); + } + } + } + + private ItemStack fillBucket(World world, RayTraceResult position) + { + IBlockState state = world.getBlockState(position.getBlockPos()); + Block block = state.getBlock(); + + Item bucket = bucketList.get(block); + + if (bucket != null && block.getMetaFromState(state) == 0) + { + world.setBlockToAir(position.getBlockPos()); + return new ItemStack(bucket); + } + + return null; + } + + @SubscribeEvent + public void onBucketFill(FillBucketEvent event) + { + if (event.getEmptyBucket() == null || !(event.getEmptyBucket().getItem() instanceof ItemBucket)) + { + return; + } + RayTraceResult pos = event.getTarget(); + if (pos == null) + { + return; + } + + ItemStack ret = fillBucket(event.getWorld(), pos); + + if (ret == null) // Intentional null check - see fillBucket() + { + return; + } + + event.setFilledBucket(ret); + event.setResult(Result.ALLOW); + } + + @SubscribeEvent + public void populate(PopulateChunkEvent.Post event) + { + final boolean doGen = TerrainGen.populate(event.getGenerator(), event.getWorld(), event.getRand(), event.getChunkX(), event.getChunkZ(), event.isHasVillageGenerated(), PopulateChunkEvent.Populate.EventType.CUSTOM); + + if (!doGen) + { + return; + } + + final int worldX = event.getChunkX() << 4; + final int worldZ = event.getChunkZ() << 4; + + EventHandlerGC.generateOil(event.getWorld(), event.getRand(), worldX + 15, worldZ + 15, false); + } + + public static boolean oilPresent(World world, Random rand, int x, int z, BlockVec3 pos) + { + boolean doGen2 = false; + + for (Integer dim : ConfigManagerCore.externalOilGen) + { + if (dim == GCCoreUtil.getDimensionID(world)) + { + doGen2 = true; + break; + } + } + + if (!doGen2) + { + return false; + } + + final Biome biome = world.getBiome(new BlockPos(x + 8, 0, z + 8)); + + if (biome == Biomes.SKY || biome == Biomes.HELL) + { + return false; + } + + rand.setSeed(world.getSeed()); + long i1 = rand.nextInt() / 2L * 2L + 1L; + long j1 = rand.nextInt() / 2L * 2L + 1L; + rand.setSeed(x * i1 + z * j1 ^ world.getSeed()); + + double randMod = Math.min(0.2D, 0.05D * ConfigManagerCore.oilGenFactor); + + if (biome.getBaseHeight() >= 0.45F) + { + randMod /= 2; + } + if (biome.getBaseHeight() < -0.5F) + { + randMod *= 1.8; + } + if (biome instanceof BiomeDesert) + { + randMod *= 1.8; + } + + final boolean flag1 = rand.nextDouble() <= randMod; + final boolean flag2 = rand.nextDouble() <= randMod; + + if (flag1 || flag2) + { + pos.y = 17 + rand.nextInt(10) + rand.nextInt(5); + pos.x = x + 8 - rand.nextInt(16); // do not change without thinking + // about chunk loading, see notes + // in generateOil() + pos.z = z + 8 - rand.nextInt(16); // do not change without thinking + // about chunk loading, see notes + // in generateOil() + return true; + } + + return false; + } + + /** + * xx, zz are the central position of 4 chunks: the chunk currently being + * populated + 1 in the x,z plane We must not stray more than 1 chunk away + * from this position, that's 16 blocks + */ + public static void generateOil(World world, Random rand, int xx, int zz, boolean testFirst) + { + BlockVec3 pos = new BlockVec3(); + if (oilPresent(world, rand, xx, zz, pos)) + { + int x = pos.x; + int cy = pos.y; + int z = pos.z; + int r = 3 + rand.nextInt(5); + + // The method loads blocks in the range (x - r - 1) to (x + r + 1) - + // whatever the randoms, all these positions must be inside the +/-1 + // chunk range + // This can be minimum xx - 7 - 7 - 1, that's OK! + // This can be maximum xx + 8 + 7 + 1, that's also OK! + + if (testFirst && checkOilPresent(world, x, cy, z, r)) + { + return; + } + + final int r2 = r * r; + + IBlockState crudeOil = GCBlocks.crudeOil.getDefaultState(); + for (int bx = -r; bx <= r; bx++) + { + for (int by = -r + 2; by <= r - 2; by++) + { + int xySquared = bx * bx + by * by * 3; + for (int bz = -r; bz <= r; bz++) + { + if (xySquared + bz * bz <= r2) + { + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x - 1, by + cy, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x + 1, by + cy, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy - 1, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy, bz + z - 1))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy, bz + z + 1))) + { + continue; + } + if (EventHandlerGC.checkBlockAbove(world, new BlockPos(bx + x, by + cy + 1, bz + z))) + { + continue; + } + + world.setBlockState(new BlockPos(bx + x, by + cy, bz + z), crudeOil, 2); + } + } + } + } + } + } + + private static boolean checkOilPresent(World world, int x, int cy, int z, int r) + { + final int r2 = r * r; + + for (int bx = -r; bx <= r; bx++) + { + for (int by = -r + 2; by <= r - 2; by++) + { + int xySquared = bx * bx + by * by * 3; + for (int bz = -r; bz <= r; bz++) + { + if (xySquared + bz * bz <= r2) + { + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x - 1, by + cy, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x + 1, by + cy, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy - 1, bz + z))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy, bz + z - 1))) + { + continue; + } + if (EventHandlerGC.checkBlock(world, new BlockPos(bx + x, by + cy, bz + z + 1))) + { + continue; + } + if (EventHandlerGC.checkBlockAbove(world, new BlockPos(bx + x, by + cy + 1, bz + z))) + { + continue; + } + + if (world.getBlockState(new BlockPos(bx + x, by + cy, bz + z)).getBlock() == GCBlocks.crudeOil) + { + return true; + } + } + } + } + } + + return false; + } + + public static void retrogenOil(World world, Chunk chunk) + { + int cx = chunk.x; + int cz = chunk.z; + + generateOil(world, new Random(), cx << 4, cz << 4, true); + } + + private static boolean checkBlock(World w, BlockPos pos) + { + IBlockState state = w.getBlockState(pos); + Block b = state.getBlock(); + if (b.getMaterial(state) == Material.AIR) + { + return true; + } + return b instanceof BlockLiquid && b != GCBlocks.crudeOil; + } + + private static boolean checkBlockAbove(World w, BlockPos pos) + { + Block b = w.getBlockState(pos).getBlock(); + if (b instanceof BlockSand) + { + return true; + } + if (b instanceof BlockGravel) + { + return true; + } + return false; + } + + @SubscribeEvent + public void schematicUnlocked(Unlock event) + { + GCPlayerStats stats = GCPlayerStats.get(event.player); + + if (!stats.getUnlockedSchematics().contains(event.page)) + { + stats.getUnlockedSchematics().add(event.page); + Collections.sort(stats.getUnlockedSchematics()); + + if (event.player != null && event.player.connection != null) + { + Integer[] iArray = new Integer[stats.getUnlockedSchematics().size()]; + + for (int i = 0; i < iArray.length; i++) + { + ISchematicPage page = stats.getUnlockedSchematics().get(i); + iArray[i] = page == null ? -2 : page.getPageID(); + } + + List objList = new ArrayList<>(); + objList.add(iArray); + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SCHEMATIC_LIST, GCCoreUtil.getDimensionID(event.player.world), objList), event.player); + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void schematicFlipEvent(FlipPage event) + { + ISchematicPage page = null; + + switch (event.direction) + { + case 1: + page = EventHandlerGC.getNextSchematic(event.index); + break; + case -1: + page = EventHandlerGC.getLastSchematic(event.index); + break; + } + + if (page != null) + { + GuiScreen cs = event.currentGui; + int benchX = (int) FMLClientHandler.instance().getClient().player.posX; + int benchY = (int) FMLClientHandler.instance().getClient().player.posY; + int benchZ = (int) FMLClientHandler.instance().getClient().player.posZ; + if (cs instanceof GuiPositionedContainer) + { + benchX = ((GuiPositionedContainer) cs).getX(); + benchY = ((GuiPositionedContainer) cs).getY(); + benchZ = ((GuiPositionedContainer) cs).getZ(); + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_OPEN_SCHEMATIC_PAGE, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] {page.getPageID(), benchX, benchY, benchZ})); + FMLClientHandler.instance().getClient().player.openGui(GalacticraftCore.instance, page.getGuiID(), FMLClientHandler.instance().getClient().player.world, benchX, benchY, benchZ); + } + } + + @SideOnly(Side.CLIENT) + private static ISchematicPage getNextSchematic(int currentIndex) + { + EntityPlayerSP player = PlayerUtil.getPlayerBaseClientFromPlayer(FMLClientHandler.instance().getClient().player, false); + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + final int size = stats.getUnlockedSchematics().size(); + final HashMap idList = new HashMap<>(size, 1F); + for (int i = 0; i < size; i++) + { + idList.put(i, stats.getUnlockedSchematics().get(i).getPageID()); + } + + final SortedSet keys = new TreeSet<>(idList.keySet()); + final Iterator iterator = keys.iterator(); + + for (int count = 0; count < keys.size(); count++) + { + final int i = iterator.next(); + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForID(idList.get(i)); + + if (page.getPageID() == currentIndex) + { + if (count + 1 < stats.getUnlockedSchematics().size()) + { + return stats.getUnlockedSchematics().get(count + 1); + } + else + { + return null; + } + } + } + + return null; + } + + @SideOnly(Side.CLIENT) + private static ISchematicPage getLastSchematic(int currentIndex) + { + EntityPlayerSP player = PlayerUtil.getPlayerBaseClientFromPlayer(FMLClientHandler.instance().getClient().player, false); + GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); + + final int size = stats.getUnlockedSchematics().size(); + final HashMap idList = new HashMap<>(size, 1F); + for (int i = 0; i < size; i++) + { + idList.put(i, stats.getUnlockedSchematics().get(i).getPageID()); + } + + final SortedSet keys = new TreeSet<>(idList.keySet()); + final Iterator iterator = keys.iterator(); + + for (int count = 0; count < keys.size(); count++) + { + final int i = iterator.next(); + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForID(idList.get(i)); + + if (page.getPageID() == currentIndex) + { + if (count - 1 >= 0) + { + return stats.getUnlockedSchematics().get(count - 1); + } + else + { + return null; + } + } + } + + return null; + } + + @SubscribeEvent + public void onPlayerDeath(PlayerDropsEvent event) + { + if (event.getEntityLiving() instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(event.getEntityPlayer()); + if (!event.getEntityPlayer().world.getGameRules().getBoolean("keepInventory")) + { + event.getEntityPlayer().captureDrops = true; + for (int i = stats.getExtendedInventory().getSizeInventory() - 1; i >= 0; i--) + { + ItemStack stack = stats.getExtendedInventory().getStackInSlot(i); + + if (!stack.isEmpty()) + { + event.getEntityPlayer().dropItem(stack, true, false); + stats.getExtendedInventory().setInventorySlotContents(i, ItemStack.EMPTY); + } + } + event.getEntityLiving().captureDrops = false; + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onLeaveBedButtonClicked(SleepCancelledEvent event) + { + EntityPlayer player = FMLClientHandler.instance().getClient().player; + + BlockPos c = player.bedLocation; + + if (c != null) + { + EventWakePlayer event0 = new EventWakePlayer(player, c, true, true, false, true); + MinecraftForge.EVENT_BUS.post(event0); + player.wakeUpPlayer(true, true, false); + + if (player.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(PacketSimpleMars.EnumSimplePacketMars.S_WAKE_PLAYER, GCCoreUtil.getDimensionID(player.world), new Object[] {})); + } + } + } + + @SubscribeEvent + public void onZombieSummonAid(ZombieEvent.SummonAidEvent event) + { + if (event.getEntity() instanceof EntityEvolvedZombie) + { + event.setCustomSummonedAid(new EntityEvolvedZombie(event.getWorld())); + + if (((EntityLivingBase) event.getEntity()).getRNG().nextFloat() < ((EntityEvolvedZombie) event.getEntity()).getEntityAttribute(((EntityEvolvedZombie) event.getEntity()).getReinforcementsAttribute()).getAttributeValue()) + { + event.setResult(Result.ALLOW); + } + else + { + event.setResult(Result.DENY); + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void overrideSkyColor(EntityViewRenderEvent.FogColors event) + { + // Disable any night vision effects on the sky, if the planet has no + // atmosphere + if (event.getEntity() instanceof EntityLivingBase && ((EntityLivingBase) event.getEntity()).isPotionActive(MobEffects.NIGHT_VISION)) + { + WorldClient worldclient = Minecraft.getMinecraft().world; + + if (worldclient.provider instanceof IGalacticraftWorldProvider && ((IGalacticraftWorldProvider) worldclient.provider).hasNoAtmosphere() && event.getState().getMaterial() == Material.AIR && !((IGalacticraftWorldProvider) worldclient.provider).hasBreathableAtmosphere()) + { + Vec3d vec = worldclient.getFogColor(1.0F); + event.setRed((float) vec.x); + event.setGreen((float) vec.y); + event.setBlue((float) vec.z); + return; + } + + if (worldclient.provider.getSkyRenderer() instanceof SkyProviderOverworld && event.getEntity().posY > Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + Vec3d vec = TransformerHooks.getFogColorHook(event.getEntity().world); + event.setRed((float) vec.x); + event.setGreen((float) vec.y); + event.setBlue((float) vec.z); + return; + } + } + } + + private List soundPlayList = new ArrayList<>(); + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onSoundPlayed(PlaySoundEvent event) + { + // The event.result starts off equal to event.sound, but could have been + // altered or set to null by another mod + if (event.getResultSound() == null) + { + return; + } + + EntityPlayerSP player = FMLClientHandler.instance().getClient().player; + + if (player != null && player.world != null && player.world.provider instanceof IGalacticraftWorldProvider) + { + // Only modify standard game sounds, not music + if (event.getResultSound().getAttenuationType() != ISound.AttenuationType.NONE) + { + PlayerGearData gearData = ClientProxyCore.playerItemData.get(PlayerUtil.getName(player)); + + float x = event.getResultSound().getXPosF(); + float y = event.getResultSound().getYPosF(); + float z = event.getResultSound().getZPosF(); + + if (gearData == null || gearData.getFrequencyModule() == -1) + { + // If the player doesn't have a frequency module, and the + // player isn't in an oxygenated environment + // Note: this is a very simplistic approach, and nowhere + // near realistic, but required for performance reasons + AxisAlignedBB bb = new AxisAlignedBB(x - 0.0015D, y - 0.0015D, z - 0.0015D, x + 0.0015D, y + 0.0015D, z + 0.0015D); + boolean playerInAtmosphere = OxygenUtil.isAABBInBreathableAirBlock(player); + boolean soundInAtmosphere = OxygenUtil.isAABBInBreathableAirBlock(player.world, bb); + if ((!playerInAtmosphere || !soundInAtmosphere)) + { + float volume = 1.0F; + float pitch = 1.0F; + + if (event.getSound() instanceof PositionedSound) + { + volume = ASMUtil.getPrivateValue(PositionedSound.class, (PositionedSound) event.getSound(), "volume", "field_147662_b"); + pitch = ASMUtil.getPrivateValue(PositionedSound.class, (PositionedSound) event.getSound(), "pitch", "field_147663_c"); + } + + // First check for duplicate firing of PlaySoundEvent17 + // on this handler's own playing of a reduced volume + // sound (see below) + for (int i = 0; i < this.soundPlayList.size(); i++) + { + SoundPlayEntry entry = this.soundPlayList.get(i); + + if (entry.name.equals(event.getName()) && entry.x == x && entry.y == y && entry.z == z && entry.volume == volume) + { + this.soundPlayList.remove(i); + return; + } + } + + // If it's not a duplicate: play the same sound but at + // reduced volume + float newVolume = volume / Math.max(0.01F, ((IGalacticraftWorldProvider) player.world.provider).getSoundVolReductionAmount()); + + this.soundPlayList.add(new SoundPlayEntry(event.getName(), x, y, z, newVolume)); + SoundEvent soundEvent = SoundEvent.REGISTRY.getObject(event.getResultSound().getSoundLocation()); + if (soundEvent != null) + { + ISound newSound = new PositionedSoundRecord(soundEvent, SoundCategory.NEUTRAL, newVolume, pitch, x, y, z); + event.getManager().playSound(newSound); + event.setResultSound(null); + } + else + { + GalacticraftCore.logger.error("Sound event null! " + event.getName() + " " + event.getResultSound().getSoundLocation()); + } + } + } + } + } + } + + private static class SoundPlayEntry + { + + private final String name; + private final float x; + private final float y; + private final float z; + private final float volume; + + private SoundPlayEntry(String name, float x, float y, float z, float volume) + { + this.name = name; + this.volume = volume; + this.x = x; + this.y = y; + this.z = z; + } + } + + public static class SleepCancelledEvent extends Event + {} + + public static class OrientCameraEvent extends Event + {} + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventLandingPadRemoval.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventLandingPadRemoval.java new file mode 100644 index 00000000..c76430c2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventLandingPadRemoval.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.event; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public class EventLandingPadRemoval extends Event +{ + + public boolean allow = true; + public final BlockPos pos; + public final World world; + + public EventLandingPadRemoval(World world, BlockPos pos) + { + this.world = world; + this.pos = pos; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventWakePlayer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventWakePlayer.java new file mode 100644 index 00000000..2096ee8c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/EventWakePlayer.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.event; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.fml.common.eventhandler.Cancelable; + +@Cancelable +public class EventWakePlayer extends PlayerEvent +{ + + public EntityPlayer.SleepResult result = null; + public final BlockPos pos; + public final boolean immediately; + public final boolean updateWorld; + public final boolean setSpawn; + public final boolean bypassed; + + public EventWakePlayer(EntityPlayer player, BlockPos pos, boolean immediately, boolean updateWorld, boolean setSpawn, boolean bypassed) + { + super(player); + this.pos = pos; + this.immediately = immediately; + this.updateWorld = updateWorld; + this.setSpawn = setSpawn; + this.bypassed = bypassed; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/LootHandlerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/LootHandlerGC.java new file mode 100644 index 00000000..92845bd8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/event/LootHandlerGC.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.event; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.loot.LootTableList; + +import micdoodle8.mods.galacticraft.core.Constants; + +public class LootHandlerGC +{ + + public static ResourceLocation TABLE_CRASHED_PROBE; + + public static void registerAll() + { + TABLE_CRASHED_PROBE = register("crashed_probe"); + } + + private static ResourceLocation register(String table) + { + return LootTableList.register(new ResourceLocation(Constants.MOD_ID_CORE, table)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/FluidNetwork.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/FluidNetwork.java new file mode 100644 index 00000000..53829a27 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/FluidNetwork.java @@ -0,0 +1,736 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.fluid; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.grid.Pathfinder; +import micdoodle8.mods.galacticraft.api.transmission.grid.PathfinderChecker; +import micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacket; +import micdoodle8.mods.galacticraft.core.network.PacketFluidNetworkUpdate; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import org.apache.commons.lang3.tuple.Pair; + +/** + * Based heavily on Mekanism FluidNetwork + * + * @author aidancbrady + */ +public class FluidNetwork implements IGridNetwork, TileEntity> +{ + + public Map acceptors = Maps.newHashMap(); + public Map> acceptorDirections = Maps.newHashMap(); + public final Set> pipes = Sets.newHashSet(); + private Set> pipesAdded = Sets.newHashSet(); + private Set updateQueue = Sets.newLinkedHashSet(); + public FluidStack buffer; + private int capacity; + private World world; + private int prevBufferAmount; + private boolean needsUpdate; + public float fluidScale; + public Fluid refFluid; + public boolean didTransfer; + public boolean prevTransfer; + public int transferDelay = 0; + private int prevTransferAmount; + private int updateDelay; + private boolean firstUpdate = true; + + public FluidNetwork() + { + } + + public FluidNetwork(Collection toMerge) + { + for (FluidNetwork network : toMerge) + { + if (network != null) + { + if (network.buffer != null) + { + if (this.buffer == null) + { + this.buffer = network.buffer.copy(); + } else + { + if (buffer.getFluid() == network.buffer.getFluid()) + { + buffer.amount += network.buffer.amount; + } else if (network.buffer.amount > buffer.amount) + { + this.buffer = network.buffer.copy(); + } + } + + network.buffer = null; + } + + this.adoptNetwork(network); + network.unregister(); + } + } + + this.register(); + } + + public void adoptNetwork(FluidNetwork network) + { + for (IBufferTransmitter transmitter : network.pipes) + { + transmitter.setNetwork(this); + this.pipes.add(transmitter); + this.pipesAdded.add(transmitter); + this.updateDelay = this.firstUpdate ? 3 : 1; + } + + this.acceptors.putAll(network.acceptors); + + for (Map.Entry> e : network.acceptorDirections.entrySet()) + { + BlockPos pos = e.getKey(); + + if (this.acceptorDirections.containsKey(pos)) + { + this.acceptorDirections.get(pos).addAll(e.getValue()); + } else + { + this.acceptorDirections.put(pos, e.getValue()); + } + } + } + + public void register() + { + GalacticraftCore.proxy.registerNetwork(this); + } + + public void unregister() + { + GalacticraftCore.proxy.unregisterNetwork(this); + } + + public void addTransmitter(IBufferTransmitter transmitter) + { + this.pipes.add(transmitter); + this.pipesAdded.add(transmitter); + this.refresh(); + this.updateDelay = this.firstUpdate ? 20 : 1; + } + + public void removeTransmitter(IBufferTransmitter transmitter) + { + this.pipes.remove(transmitter); + this.updateCapacity(); + } + + public void onTransmitterAdded(IBufferTransmitter transmitter) + { + FluidStack stack = transmitter.getBuffer(); + + if (stack == null || stack.getFluid() == null || stack.amount == 0) + { + // Nothing to do + return; + } + + if (buffer == null || buffer.getFluid() == null || buffer.amount == 0) + { + // Set transmitter buffer to network buffer + buffer = stack.copy(); + stack.amount = 0; + return; + } + + if (buffer.isFluidEqual(stack)) + { + // Add transmitter fluid to network buffer + buffer.amount += stack.amount; + } + + stack.amount = 0; + } + + public void clamp() + { + if (buffer != null && buffer.amount > getCapacity()) + { + buffer.amount = this.capacity; + } + } + + public void updateCapacity() + { + this.capacity = 0; + + for (IBufferTransmitter transmitter : this.pipes) + { + this.capacity += transmitter.getCapacity(); + } + } + + public int getCapacity() + { + return capacity; + } + + public int getRequest() + { + return getCapacity() - (buffer != null ? buffer.amount : 0); + } + + private int emitToAcceptors(FluidStack toSend, boolean doTransfer) + { + List>> available = new ArrayList<>(); + available.addAll(this.getAcceptors(toSend)); + + Collections.shuffle(available); + + int totalSend = 0; + + if (!available.isEmpty()) + { + int divider = available.size(); + int remainder = toSend.amount % divider; + int each = (toSend.amount - remainder) / divider; + + for (Pair> pair : available) + { + int currentSend = each; + Map acceptors = pair.getRight(); + EnumSet sides = acceptorDirections.get(pair.getLeft()); + + if (remainder > 0) + { + currentSend++; + remainder--; + } + + for (EnumFacing side : sides) + { + int prev = totalSend; + IFluidHandler acceptor = acceptors.get(side); + + if (acceptor != null) + { + FluidStack copy = toSend.copy(); + copy.amount = currentSend; + totalSend += acceptor.fill(copy, doTransfer); + } + + if (totalSend > prev) + { + // If fluid was sent to this handler, continue to next + break; + } + } + } + } + + if (doTransfer && totalSend > 0 && GCCoreUtil.getEffectiveSide().isServer()) + { + this.didTransfer = true; + this.transferDelay = 2; + } + + return totalSend; + } + + public int emitToBuffer(FluidStack toSend, boolean doTransfer) + { + if (toSend == null || (buffer != null && buffer.getFluid() != toSend.getFluid())) + { + return 0; + } + + int toUse = Math.min(getRequest(), toSend.amount); + + if (doTransfer) + { + if (buffer == null) + { + // Copy + buffer = toSend.copy(); + buffer.amount = toUse; + } else + { + // Add + buffer.amount += toUse; + } + } + + return toUse; + } + + public void tickEnd() + { + this.onUpdate(); + } + + public void addUpdate(EntityPlayerMP player) + { + this.updateQueue.add(new DelayQueue(player)); + } + + private IPacket getAddTransmitterUpdate() + { + BlockPos pos = ((TileEntity) this.pipes.iterator().next()).getPos(); + return PacketFluidNetworkUpdate.getAddTransmitterUpdate(GCCoreUtil.getDimensionID(this.world), pos, this.firstUpdate, this.pipesAdded); + } + + public void onUpdate() + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + Iterator iterator = this.updateQueue.iterator(); + + try + { + while (iterator.hasNext()) + { + DelayQueue queue = iterator.next(); + + if (queue.delay > 0) + { + queue.delay--; + } else + { + this.pipesAdded.addAll(this.pipes); + GalacticraftCore.packetPipeline.sendTo(this.getAddTransmitterUpdate(), queue.player); + this.pipesAdded.clear(); + iterator.remove(); + } + } + } catch (Exception e) + { + + } + + if (this.updateDelay > 0) + { + this.updateDelay--; + + if (this.updateDelay == 0) + { + BlockPos pos = ((TileEntity) this.pipes.iterator().next()).getPos(); + GalacticraftCore.packetPipeline.sendToAllAround(this.getAddTransmitterUpdate(), + new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), pos.getX(), pos.getY(), pos.getZ(), 30.0)); + this.firstUpdate = false; + this.pipesAdded.clear(); + this.needsUpdate = true; + } + } + + this.prevTransferAmount = 0; + + if (this.transferDelay == 0) + { + this.didTransfer = false; + } else + { + this.transferDelay--; + } + + int stored = buffer != null ? buffer.amount : 0; + + if (stored != this.prevBufferAmount) + { + this.needsUpdate = true; + } + + this.prevBufferAmount = stored; + + if (this.didTransfer != this.prevTransfer || this.needsUpdate) + { + BlockPos pos = ((TileEntity) this.pipes.iterator().next()).getPos(); + GalacticraftCore.packetPipeline.sendToAllAround(PacketFluidNetworkUpdate.getFluidUpdate(GCCoreUtil.getDimensionID(this.world), pos, this.buffer, this.didTransfer), + new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), pos.getX(), pos.getY(), pos.getZ(), 20.0)); + this.needsUpdate = false; + } + + this.prevTransfer = this.didTransfer; + + if (buffer != null) + { + this.prevTransferAmount = this.emitToAcceptors(buffer, true); + if (buffer != null) + { + buffer.amount -= this.prevTransferAmount; + + if (buffer.amount <= 0) + { + this.buffer = null; + } + } + } + } + } + + public void clientTick() + { + this.fluidScale = Math.max(this.fluidScale, this.getScale()); + + if (this.didTransfer && this.fluidScale < 1.0F) + { + this.fluidScale = Math.max(this.getScale(), Math.min(1, fluidScale + 0.02F)); + } else if (!this.didTransfer && fluidScale > 0.0F) + { + this.fluidScale = this.getScale(); + + if (this.fluidScale == 0.0F) + { + this.buffer = null; + } + } + } + + public float getScale() + { + if (this.buffer == null || this.getCapacity() == 0) + { + return 0.0F; + } + + return Math.min(1.0F, this.buffer.amount / (float) this.getCapacity()); + } + + public List>> getAcceptors(FluidStack toSend) + { + List>> toReturn = new LinkedList<>(); + + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + return toReturn; + } + + if (this.acceptors == null || this.acceptors.isEmpty()) + { + this.refreshAcceptors(); + } + + List acceptorsCopy = new ArrayList<>(); + acceptorsCopy.addAll(acceptors.keySet()); + + for (BlockPos coords : acceptorsCopy) + { + EnumSet sides = acceptorDirections.get(coords); + if (sides == null || sides.isEmpty()) + { + continue; + } + + TileEntity tile = this.world.getTileEntity(coords); + + if (tile == null) + { + continue; + } + + Map handlers = Maps.newHashMap(); + + IFluidHandler handler; + Fluid fluidToSend = toSend.getFluid(); + for (EnumFacing side : sides) + { + handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); + if (handler != null && handler.fill(new FluidStack(fluidToSend, 1), false) > 0) + { + handlers.put(side, handler); + } + } + + toReturn.add(Pair.of(coords, handlers)); + } + + return toReturn; + } + + @Override + public void refresh() + { + if (this.acceptors != null) + { + this.acceptors.clear(); + } + + try + { + Iterator> it = this.pipes.iterator(); + + while (it.hasNext()) + { + ITransmitter transmitter = it.next(); + TileEntity tileTransmitter = (TileEntity) transmitter; + + if (transmitter == null) + { + it.remove(); + continue; + } + + transmitter.onNetworkChanged(); + + if (tileTransmitter.isInvalid() || tileTransmitter.getWorld() == null) + { + it.remove(); + continue; + } else + { + if (this.world == null) + { + this.world = tileTransmitter.getWorld(); + } + + transmitter.setNetwork(this); + } + } + + updateCapacity(); + clamp(); + } catch (Exception e) + { + GalacticraftCore.logger.error("Failed to refresh liquid pipe network."); + e.printStackTrace(); + } + } + + public void refreshAcceptors() + { + if (this.acceptors == null) + { + this.acceptors = Maps.newHashMap(); + } else + { + this.acceptors.clear(); + } + + try + { + Iterator> it = this.pipes.iterator(); + + while (it.hasNext()) + { + IBufferTransmitter transmitter = it.next(); + TileEntity tile = (TileEntity) transmitter; + + if (transmitter == null || tile.isInvalid() || tile.getWorld() == null) + { + it.remove(); + continue; + } + + if (!transmitter.canTransmit()) + { + continue; + } + + int i = 0; + for (TileEntity acceptor : transmitter.getAdjacentConnections()) + { + if (!(acceptor instanceof IBufferTransmitter) && acceptor != null) + { + EnumFacing facing = EnumFacing.byIndex(i).getOpposite(); + IFluidHandler handler = acceptor.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, facing); + if (handler != null) + { + BlockPos acceptorPos = tile.getPos().offset(facing.getOpposite()); + EnumSet facingSet = this.acceptorDirections.get(acceptorPos); + if (facingSet != null) + { + facingSet.add(facing); + } else + { + facingSet = EnumSet.of(facing); + } + this.acceptors.put(acceptorPos, handler); + this.acceptorDirections.put(acceptorPos, facingSet); + } + } + i++; + } + } + } catch (Exception e) + { + GalacticraftCore.logger.fatal("Failed to refresh liquid acceptors"); + e.printStackTrace(); + } + } + + @Override + public ImmutableSet> getTransmitters() + { + return ImmutableSet.copyOf(this.pipes); + } + + @Override + public FluidNetwork merge(FluidNetwork network) + { + if (network != null && network != this) + { + FluidNetwork newNetwork = new FluidNetwork(Lists.newArrayList(this, network)); + newNetwork.refresh(); + return newNetwork; + } + + return this; + } + + @SuppressWarnings({"unchecked", "unlikely-arg-type"}) + @Override + public void split(IBufferTransmitter splitPoint) + { + if (splitPoint instanceof TileEntity) + { + this.pipes.remove(splitPoint); + + /** + * Loop through the connected blocks and attempt to see if there are + * connections between the two points elsewhere. + */ + TileEntity[] connectedBlocks = splitPoint.getAdjacentConnections(); + + for (TileEntity connectedBlockA : connectedBlocks) + { + if (connectedBlockA instanceof INetworkConnection) + { + for (final TileEntity connectedBlockB : connectedBlocks) + { + if (connectedBlockA != connectedBlockB && connectedBlockB instanceof INetworkConnection) + { + Pathfinder finder = new PathfinderChecker(((TileEntity) splitPoint).getWorld(), (INetworkConnection) connectedBlockB, NetworkType.FLUID, splitPoint); + finder.init(new BlockVec3(connectedBlockA)); + + if (finder.results.size() > 0) + { + /** + * The connections A and B are still intact + * elsewhere. Set all references of wire + * connection into one network. + */ + + for (BlockVec3 node : finder.closedSet) + { + TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).getWorld()); + + if (nodeTile instanceof INetworkProvider) + { + if (nodeTile != splitPoint) + { + ((INetworkProvider) nodeTile).setNetwork(this); + } + } + } + } else + { + /** + * The connections A and B are not connected + * anymore. Give both of them a new network. + */ + FluidNetwork newNetwork = new FluidNetwork(); + + for (BlockVec3 node : finder.closedSet) + { + TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).getWorld()); + + if (nodeTile instanceof IBufferTransmitter) + { + if (nodeTile != splitPoint) + { + newNetwork.pipes.add((IBufferTransmitter) nodeTile); + newNetwork.pipesAdded.add((IBufferTransmitter) nodeTile); + newNetwork.onTransmitterAdded((IBufferTransmitter) nodeTile); + this.pipes.remove(nodeTile); + } + } + } + + newNetwork.refresh(); + newNetwork.register(); + } + } + } + } + } + + if (this.pipes.isEmpty()) + { + this.unregister(); + } else + { + this.updateCapacity(); + } + } + } + + @Override + public String toString() + { + return "FluidNetwork[" + this.hashCode() + "|Pipes:" + this.pipes.size() + "|Acceptors:" + (this.acceptors == null ? 0 : this.acceptors.size()) + "]"; + } + + public static class DelayQueue + { + + public EntityPlayerMP player; + public int delay; + + public DelayQueue(EntityPlayerMP player) + { + this.player = player; + this.delay = 5; + } + + @Override + public int hashCode() + { + return this.player.hashCode(); + } + + @Override + public boolean equals(Object obj) + { + return obj instanceof DelayQueue && ((DelayQueue) obj).player.equals(this.player); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/NetworkHelper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/NetworkHelper.java new file mode 100644 index 00000000..4b258425 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/NetworkHelper.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.fluid; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; + +/** + * A helper class that provides additional useful functions to interact with the + * ElectricityNetwork + * + * @author Calclavia + */ +public class NetworkHelper +{ + + public static EnumSet getDirections(TileEntity tileEntity, NetworkType type) + { + EnumSet possibleSides = EnumSet.noneOf(EnumFacing.class); + + if (tileEntity instanceof IConnector) + { + for (int i = 0; i < 6; i++) + { + EnumFacing direction = EnumFacing.byIndex(i); + if (((IConnector) tileEntity).canConnect(direction, type)) + { + possibleSides.add(direction); + } + } + } + + return possibleSides; + } + + /** + * @param tileEntity - The TileEntity's sides. + * @param approachingDirection - The directions that can be connected. + * @return A list of networks from all specified sides. There will be no + * repeated ElectricityNetworks and it will never return null. + */ + public static Set getNetworksFromMultipleSides(TileEntity tileEntity, EnumSet approachingDirection) + { + final Set connectedNetworks = new HashSet(); + + BlockVec3 tileVec = new BlockVec3(tileEntity); + for (EnumFacing side : EnumFacing.VALUES) + { + if (approachingDirection.contains(side)) + { + TileEntity outputConductor = tileVec.getTileEntityOnSide(tileEntity.getWorld(), side); + IElectricityNetwork electricityNetwork = NetworkHelper.getElectricalNetworkFromTileEntity(outputConductor, side); + + if (electricityNetwork != null) + { + connectedNetworks.add(electricityNetwork); + } + } + } + + return connectedNetworks; + } + + /** + * Tries to find the electricity network based in a tile entity and checks + * to see if it is a conductor. All machines should use this function to + * search for a connecting conductor around it. + * + * @param tileEntity - The TileEntity conductor + * @param approachDirection - The direction you are approaching this wire + * from. + * @return The ElectricityNetwork or null if not found. + */ + public static IElectricityNetwork getElectricalNetworkFromTileEntity(TileEntity tileEntity, EnumFacing approachDirection) + { + if (tileEntity != null) + { + if (tileEntity instanceof INetworkProvider) + { + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(approachDirection.getOpposite(), NetworkType.POWER)) + { + if (((INetworkProvider) tileEntity).getNetwork() instanceof IElectricityNetwork) + { + return (IElectricityNetwork) ((INetworkProvider) tileEntity).getNetwork(); + } + } + } else + { + if (((INetworkProvider) tileEntity).getNetwork() instanceof IElectricityNetwork) + { + return (IElectricityNetwork) ((INetworkProvider) tileEntity).getNetwork(); + } + } + } + } + + return null; + } + + public static FluidNetwork getFluidNetworkFromTile(TileEntity tileEntity, EnumFacing approachDirection) + { + if (tileEntity != null) + { + if (tileEntity instanceof INetworkProvider) + { + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(approachDirection.getOpposite(), NetworkType.FLUID)) + { + if (((INetworkProvider) tileEntity).getNetwork() instanceof FluidNetwork) + { + return (FluidNetwork) ((INetworkProvider) tileEntity).getNetwork(); + } + } + } else + { + if (((INetworkProvider) tileEntity).getNetwork() instanceof FluidNetwork) + { + return (FluidNetwork) ((INetworkProvider) tileEntity).getNetwork(); + } + } + } + } + + return null; + } + +// public static IHydrogenNetwork getHydrogenNetworkFromTileEntity(TileEntity tileEntity, EnumFacing approachDirection) +// { +// if (tileEntity != null) +// { +// if (tileEntity instanceof INetworkProvider) +// { +// if (tileEntity instanceof IConnector) +// { +// if (((IConnector) tileEntity).canConnect(approachDirection.getOpposite(), NetworkType.HYDROGEN)) +// { +// if (((INetworkProvider) tileEntity).getNetwork() instanceof IHydrogenNetwork) +// { +// return (IHydrogenNetwork) ((INetworkProvider) tileEntity).getNetwork(); +// } +// } +// } +// else +// { +// if (((INetworkProvider) tileEntity).getNetwork() instanceof IHydrogenNetwork) +// { +// return (IHydrogenNetwork) ((INetworkProvider) tileEntity).getNetwork(); +// } +// } +// } +// } +// +// return null; +// } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/OxygenPressureProtocol.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/OxygenPressureProtocol.java new file mode 100644 index 00000000..0001aec7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/OxygenPressureProtocol.java @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.fluid; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockEnchantmentTable; +import net.minecraft.block.BlockFarmland; +import net.minecraft.block.BlockGlass; +import net.minecraft.block.BlockGravel; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.BlockSponge; +import net.minecraft.block.BlockStainedGlass; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.util.BlockUtil; +import micdoodle8.mods.galacticraft.core.util.BlockUtil.MultiBlockStateHolder; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class OxygenPressureProtocol +{ + + //public final static Map> nonPermeableBlocks = new HashMap<>(); + public final static List newNonPermeableBlockStateList = new ArrayList<>(); + public final static List nonPermeableBlockList = new ArrayList<>(); + static + { + BlockUtil.getBlockStateHolderList(BlockUtil.getListFromStringArray(ConfigManagerCore.sealableIDs)).forEach(mbsh -> newNonPermeableBlockStateList.add(mbsh)); + newNonPermeableBlockStateList.forEach(mbsh -> nonPermeableBlockList.add(mbsh.getBlock())); + // for (final String s : ConfigManagerCore.sealableIDs) + // { + // try + // { + // BlockTuple bt = ConfigManagerCore.stringToBlock(s, "External Sealable IDs", true); + // if (bt == null) + // { + // continue; + // } + // + // int meta = bt.meta; + // + // if (OxygenPressureProtocol.nonPermeableBlocks.containsKey(bt.block)) + // { + // final ArrayList list = OxygenPressureProtocol.nonPermeableBlocks.get(bt.block); + // if (!list.contains(meta)) + // { + // list.add(meta); + // } else + // { + // GalacticraftCore.logger.info("[config] External Sealable IDs: skipping duplicate entry '" + s + "'."); + // } + // } else + // { + // final ArrayList list = new ArrayList<>(); + // list.add(meta); + // OxygenPressureProtocol.nonPermeableBlocks.put(bt.block, list); + // } + // } catch (final Exception e) + // { + // GalacticraftCore.logger.error("[config] External Sealable IDs: error parsing '" + s + "'. Must be in the form Blockname or BlockName:metadata"); + // } + // } + } + + public static void updateSealerStatus(TileEntityOxygenSealer head) + { + try + { + head.threadSeal = new ThreadFindSeal(head); + } catch (IllegalThreadStateException e) + { + + } + } + + public static void onEdgeBlockUpdated(World world, BlockPos vec) + { + if (ConfigManagerCore.enableSealerEdgeChecks) + { + TickHandlerServer.scheduleNewEdgeCheck(GCCoreUtil.getDimensionID(world), vec); + } + } + + @Deprecated + public static boolean canBlockPassAir(World world, Block block, BlockPos pos, EnumFacing side) + { + return canBlockPassAir(world, world.getBlockState(pos), pos, side); + } + + public static boolean canBlockPassAir(World world, IBlockState state, BlockPos pos, EnumFacing side) + { + Block block = state.getBlock(); + if (block == null) + { + return true; + } + + if (block instanceof IPartialSealableBlock) + { + return !((IPartialSealableBlock) block).isSealed(world, pos, side); + } + + // Check leaves first, because their isOpaqueCube() test depends on + // graphics settings + // (See net.minecraft.block.BlockLeaves.isOpaqueCube()!) + if (block instanceof BlockLeaves) + { + return true; + } + + if (block.isOpaqueCube(state)) + { + return block instanceof BlockGravel || block.getMaterial(state) == Material.CLOTH || block instanceof BlockSponge; + + } + + if (block instanceof BlockGlass || block instanceof BlockStainedGlass) + { + return false; + } + + for (MultiBlockStateHolder mbsh : OxygenPressureProtocol.newNonPermeableBlockStateList) + { + if (mbsh.getBlock().equals(block)) + { + if (mbsh.getBlockstateList().contains(state)) + { + return false; + } + } + } + // Solid but non-opaque blocks, for example special glass + // if (OxygenPressureProtocol.nonPermeableBlocks.containsKey(block)) + // { + // ArrayList metaList = OxygenPressureProtocol.nonPermeableBlocks.get(block); + // if (metaList.contains(Integer.valueOf(-1)) || metaList.contains(state.getBlock().getMetaFromState(state))) + // { + // return false; + // } + // } + + // Half slab seals on the top side or the bottom side according to its + // metadata + if (block instanceof BlockSlab) + { + int meta = state.getBlock().getMetaFromState(state); + return (((side != EnumFacing.DOWN) || ((meta & 8) != 8)) && ((side != EnumFacing.UP) || ((meta & 8) != 0))); + } + + // Farmland etc only seals on the solid underside + if (block instanceof BlockFarmland || block instanceof BlockEnchantmentTable || block instanceof BlockLiquid) + { + return side != EnumFacing.UP; + } + + if (block instanceof BlockPistonBase) + { + if (state.getValue(BlockPistonBase.EXTENDED)) + { + EnumFacing facing = state.getValue(BlockPistonBase.FACING); + return side != facing; + } + return false; + } + + // General case - this should cover any block which correctly implements + // isBlockSolidOnSide + // including most modded blocks - Forge microblocks in particular is + // covered by this. + // ### Any exceptions in mods should implement the IPartialSealableBlock + // interface ### + return !block.isSideSolid(state, world, pos, side.getOpposite()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/ThreadFindSeal.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/ThreadFindSeal.java new file mode 100644 index 00000000..74fa7fae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/fluid/ThreadFindSeal.java @@ -0,0 +1,1367 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.fluid; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockEnchantmentTable; +import net.minecraft.block.BlockFarmland; +import net.minecraft.block.BlockGlass; +import net.minecraft.block.BlockGravel; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.BlockSponge; +import net.minecraft.block.BlockStainedGlass; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.util.BlockUtil.MultiBlockStateHolder; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledBlockChange; + +public class ThreadFindSeal +{ + + public AtomicBoolean sealedFinal = new AtomicBoolean(); + public static AtomicBoolean anylooping = new AtomicBoolean(); + public AtomicBoolean looping = new AtomicBoolean(); + + private World world; + private BlockVec3 head; + private boolean sealed; + private List sealers; + private static intBucket[] buckets; + private static int checkedSize; + private int checkCount; + private HashMap sealersAround; + private List currentLayer; + private List airToReplace; + private List fireToReplace; + private List breatheableToReplace; + private List airToReplaceBright; + private List breatheableToReplaceBright; + private List ambientThermalTracked; + private List ambientThermalTrackedBright; + private List otherSealers; + private List torchesToUpdate; + private boolean foundAmbientThermal; + public List leakTrace; + + static + { + buckets = new intBucket[256]; + checkedInit(); + } + + public ThreadFindSeal(TileEntityOxygenSealer sealer) + { + this(sealer.getWorld(), sealer.getPos().up(), sealer.getFindSealChecks(), new ArrayList<>(Collections.singletonList(sealer))); + } + + public ThreadFindSeal(World world, BlockPos head, int checkCount, List sealers) + { + if (ThreadFindSeal.anylooping.getAndSet(true)) + { + return; + } + this.world = world; + this.head = new BlockVec3(head); + this.checkCount = checkCount; + this.sealers = sealers; + this.foundAmbientThermal = false; + checkedClear(); + checkedSize = 0; + this.torchesToUpdate = new LinkedList<>(); + + this.sealersAround = TileEntityOxygenSealer.getSealersAround(world, head, 1024 * 1024); + + // If called by a sealer test the head block and if partiallySealable + // mark its sides done as required + if (!sealers.isEmpty()) + { + if (checkCount > 0) + { + IBlockState headState = this.world.getBlockState(head); + if (!(headState.getBlock().isAir(headState, world, head))) + { + this.canBlockPassAirCheck(headState.getBlock(), this.head, 1); + // reset the checkCount as canBlockPassAirCheck might have + // changed it + this.checkCount = checkCount; + } + } + + this.looping.set(true); + for (TileEntityOxygenSealer eachSealer : sealers) + { + eachSealer.threadSeal = this; + } + +// if (ConfigManagerCore.enableSealerMultithreading) +// { +// new ThreadedFindSeal(); +// } +// else +// { + this.check(); +// } + } else + // If not called by a sealer, it's a breathable air edge check + { + // Run this in the main thread + this.check(); + } + ThreadFindSeal.anylooping.set(false); + } + + // Multi-threaded version of the code for sealer updates (not for edge + // checks). + public class ThreadedFindSeal extends Thread + { + + public ThreadedFindSeal() + { + super("GC Sealer Roomfinder Thread"); + + if (this.isAlive()) + { + this.interrupt(); + } + + // Run this as a separate thread + this.start(); + } + + @Override + public void run() + { + ThreadFindSeal.this.check(); + ThreadFindSeal.anylooping.set(false); + } + } + + public void check() + { + long time1 = System.nanoTime(); + + this.sealed = true; + TileEntity tile = this.head.getTileEntityOnSide(world, EnumFacing.DOWN); + this.foundAmbientThermal = tile instanceof TileEntityOxygenSealer && ((TileEntityOxygenSealer) tile).thermalControlEnabled(); + this.checkedAdd(this.head); + this.currentLayer = new LinkedList<>(); + this.airToReplace = new LinkedList<>(); + this.airToReplaceBright = new LinkedList<>(); + this.ambientThermalTracked = new LinkedList<>(); + this.ambientThermalTrackedBright = new LinkedList<>(); + + if (this.checkCount > 0) + { + this.currentLayer.add(this.head); + if (this.head.x < -29990000 || this.head.z < -29990000 || this.head.x >= 29990000 || this.head.z >= 29990000) + { + IBlockState state = this.head.getBlockState_noChunkLoad(this.world); + if (Blocks.AIR == state.getBlock()) + { + this.airToReplace.add(this.head.clone()); + } else if (state.getBlock() == GCBlocks.brightAir) + { + this.airToReplaceBright.add(this.head.clone()); + } + this.doLayerNearMapEdge(); + } else + { + IBlockState headState = this.head.getBlockStateSafe_noChunkLoad(this.world); + if (Blocks.AIR == headState.getBlock()) + { + this.airToReplace.add(this.head.clone()); + } else if (headState.getBlock() == GCBlocks.brightAir) + { + this.airToReplaceBright.add(this.head.clone()); + } + this.doLayer(); + } + } else + { + this.sealed = false; + } + + long time2 = System.nanoTime(); + + // Can only be properly sealed if there is at least one sealer here (on + // edge check) + if (this.sealers.isEmpty()) + { + this.sealed = false; + } + + if (this.sealed) + { + this.makeSealGood(this.foundAmbientThermal); + this.leakTrace = null; + } else + { + int checkedSave = checkedSize; + checkedClear(); + this.breatheableToReplace = new LinkedList<>(); + this.breatheableToReplaceBright = new LinkedList<>(); + this.fireToReplace = new LinkedList<>(); + this.otherSealers = new LinkedList<>(); + // unseal() will mark breatheableAir blocks for change as it + // finds them, also searches for unchecked sealers + this.currentLayer.clear(); + this.currentLayer.add(this.head); + this.torchesToUpdate.clear(); + if (this.head.x < -29990000 || this.head.z < -29990000 || this.head.x >= 29990000 || this.head.z >= 29990000) + { + this.unsealNearMapEdge(); + } else + { + this.unseal(); + } + + if (!this.otherSealers.isEmpty()) + { + // OtherSealers will have members if the space to be made + // unbreathable actually still has an unchecked sealer in it + List sealersSave = this.sealers; + List torchesSave = this.torchesToUpdate; + List sealersDone = new ArrayList<>(); + sealersDone.addAll(this.sealers); + for (TileEntityOxygenSealer otherSealer : this.otherSealers) + { + // If it hasn't already been counted, need to check the + // other sealer immediately in case it can keep the space + // sealed + if (!sealersDone.contains(otherSealer) && otherSealer.getFindSealChecks() > 0) + { + BlockVec3 newhead = new BlockVec3(otherSealer).translate(0, 1, 0); + this.sealed = true; + this.checkCount = otherSealer.getFindSealChecks(); + this.sealers = new LinkedList<>(); + this.sealers.add(otherSealer); + if (otherSealer.thermalControlEnabled()) + { + foundAmbientThermal = true; + } + checkedClear(); + this.checkedAdd(newhead); + this.currentLayer.clear(); + this.airToReplace.clear(); + this.airToReplaceBright.clear(); + this.torchesToUpdate = new LinkedList<>(); + this.currentLayer.add(newhead.clone()); + if (newhead.x < -29990000 || newhead.z < -29990000 || newhead.x >= 29990000 || newhead.z >= 29990000) + { + this.doLayerNearMapEdge(); + } else + { + this.doLayer(); + } + + // If found a sealer which can still seal the space, it + // should take over as head + if (this.sealed) + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Oxygen Sealer replacing head at x" + this.head.x + " y" + (this.head.y - 1) + " z" + this.head.z); + } + if (!sealersSave.isEmpty()) + { + TileEntityOxygenSealer oldHead = sealersSave.get(0); + if (!this.sealers.contains(oldHead)) + { + this.sealers.add(oldHead); + if (oldHead.thermalControlEnabled()) + { + foundAmbientThermal = true; + } + } + } + this.head = newhead.clone(); + otherSealer.threadSeal = this; + otherSealer.stopSealThreadCooldown = 75 + TileEntityOxygenSealer.countEntities; + checkedSave += checkedSize; + break; + } else + { + sealersDone.addAll(this.sealers); + } + + checkedSave += checkedSize; + } + } + + // Restore sealers to what it was, if this search did not + // result in a seal + if (!this.sealed) + { + this.sealers = sealersSave; + this.torchesToUpdate = torchesSave; + } else + { + // If the second search sealed the area, there may also be + // air or torches to update + this.makeSealGood(foundAmbientThermal); + } + } + checkedSize = checkedSave; + + if (!this.sealed) + { + Block block = this.head.getBlockState(this.world).getBlock(); + if (block == GCBlocks.breatheableAir) + { + this.breatheableToReplace.add(this.head); + } + if (block == GCBlocks.brightBreatheableAir) + { + this.breatheableToReplaceBright.add(this.head); + } + this.makeSealBad(); + } else + { + this.leakTrace = null; + } + } + + // Set any sealers found which are not the head sealer, not to run their + // own seal checks for a while + // (The player can control which is the head sealer in a space by + // enabling just that one and disabling all the others) + TileEntityOxygenSealer headSealer = this.sealersAround.get(this.head.clone().translate(0, -1, 0)); + + // TODO: if multi-threaded, this final code block giving access to the + // sealer tiles needs to be threadsafe + + // If it is sealed, cooldown can be extended as frequent checks are not + // needed + if (headSealer != null) + { + headSealer.stopSealThreadCooldown = 75 + TileEntityOxygenSealer.countEntities; + } + + for (TileEntityOxygenSealer sealer : this.sealers) + { + // Sealers which are not the head sealer: put them on cooldown so + // the inactive ones don't start their own threads and so unseal + // this volume + // and update threadSeal reference of all sealers found (even the + // inactive ones) + if (sealer != headSealer && headSealer != null) + { + sealer.threadSeal = this; + sealer.stopSealThreadCooldown = headSealer.stopSealThreadCooldown + 51; + } + } + + this.sealedFinal.set(this.sealed); + this.looping.set(false); + + if (ConfigManagerCore.enableDebug) + { + long time3 = System.nanoTime(); + float total = (time3 - time1) / 1000000.0F; + float looping = (time2 - time1) / 1000000.0F; + float replacing = (time3 - time2) / 1000000.0F; + GalacticraftCore.logger.info("Oxygen Sealer Check Completed at x" + this.head.x + " y" + this.head.y + " z" + this.head.z); + GalacticraftCore.logger.info(" Sealed: " + this.sealed + " ~ " + this.sealers.size() + " sealers ~ " + (checkedSize - 1) + " blocks"); + GalacticraftCore.logger.info(" Total Time taken: " + String.format("%.2f", total) + "ms ~ " + String.format("%.2f", looping) + " + " + String.format("%.2f", replacing) + ""); + } + } + + private void makeSealGood(boolean ambientThermal) + { + if (!this.airToReplace.isEmpty() || !this.airToReplaceBright.isEmpty() || !ambientThermalTracked.isEmpty() || !ambientThermalTracked.isEmpty()) + { + List changeList = new LinkedList<>(); + Block breatheableAirID = GCBlocks.breatheableAir; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + int metadata = ambientThermal ? 1 : 0; + // TODO: Can we somehow detect only changes in state of + // ambientThermal since last check? tricky... + for (BlockVec3 checkedVec : this.airToReplace) + { + // No block update for performance reasons; deal with unlit + // torches separately + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), breatheableAirID.getStateFromMeta(metadata), 0)); + } + for (BlockVec3 checkedVec : this.airToReplaceBright) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), breatheableAirIDBright.getStateFromMeta(metadata), 0)); + } + for (BlockVec3 checkedVec : this.ambientThermalTracked) + { + if (checkedVec.getBlockMetadata(this.world) != metadata) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), breatheableAirID.getStateFromMeta(metadata), 0)); + } + } + for (BlockVec3 checkedVec : this.ambientThermalTrackedBright) + { + if (checkedVec.getBlockMetadata(this.world) != metadata) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), breatheableAirIDBright.getStateFromMeta(metadata), 0)); + } + } + + TickHandlerServer.scheduleNewBlockChange(GCCoreUtil.getDimensionID(this.world), changeList); + } + if (!this.torchesToUpdate.isEmpty()) + { + TickHandlerServer.scheduleNewTorchUpdate(GCCoreUtil.getDimensionID(this.world), this.torchesToUpdate); + } + } + + private void makeSealBad() + { + if (!this.breatheableToReplace.isEmpty() || !this.breatheableToReplaceBright.isEmpty()) + { + List changeList = new LinkedList<>(); + for (BlockVec3 checkedVec : this.breatheableToReplace) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), Blocks.AIR.getDefaultState(), 0)); + } + for (BlockVec3 checkedVec : this.fireToReplace) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), Blocks.AIR.getDefaultState(), 2)); + } + for (BlockVec3 checkedVec : this.breatheableToReplaceBright) + { + changeList.add(new ScheduledBlockChange(checkedVec.toBlockPos(), GCBlocks.brightAir.getDefaultState(), 0)); + } + TickHandlerServer.scheduleNewBlockChange(GCCoreUtil.getDimensionID(this.world), changeList); + } + if (!this.torchesToUpdate.isEmpty()) + { + TickHandlerServer.scheduleNewTorchUpdate(GCCoreUtil.getDimensionID(this.world), this.torchesToUpdate); + } + } + + private void unseal() + { + // Local variables are fractionally faster than statics + Block breatheableAirID = GCBlocks.breatheableAir; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + Block oxygenSealerID = GCBlocks.oxygenSealer; + Block fireBlock = Blocks.FIRE; + Block airBlock = Blocks.AIR; + Block airBlockBright = GCBlocks.brightAir; + List toReplaceLocal = this.breatheableToReplace; + List toReplaceLocalBright = this.breatheableToReplaceBright; + LinkedList nextLayer = new LinkedList<>(); + World world = this.world; + int side, bits; + + while (this.currentLayer.size() > 0) + { + for (BlockVec3 vec : this.currentLayer) + { + side = 0; + bits = vec.sideDoneBits; + do + { + if ((bits & (1 << side)) == 0) + { + if (!checkedContains(vec, side)) + { + BlockVec3 sideVec = vec.newVecSide(side); + IBlockState state = sideVec.getBlockStateSafe_noChunkLoad(world); + Block block = state == null ? null : state.getBlock(); + + if (block == breatheableAirID) + { + toReplaceLocal.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == breatheableAirIDBright) + { + toReplaceLocalBright.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == fireBlock) + { + this.fireToReplace.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == oxygenSealerID) + { + TileEntityOxygenSealer sealer = this.sealersAround.get(sideVec); + + if (sealer != null && !this.sealers.contains(sealer)) + { + if (side == 0) + { + // Accessing the vent side of the + // sealer, so add it + this.otherSealers.add(sealer); + checkedAdd(sideVec); + } + // if side is not 0, do not add to checked + // so can be rechecked from other sides + } else + { + checkedAdd(sideVec); + } + } else + { + if (block != null && block != airBlock && block != airBlockBright) + { + // This test applies any necessary + // checkedAdd(); + if (this.canBlockPassAirCheck(block, sideVec, side)) + { + // Look outbound through partially + // sealable blocks in case there is + // breatheableAir to clear beyond + nextLayer.add(sideVec); + } + } else + { + if (state != null) + checkedAdd(sideVec); + } + } + } + } + side++; + } while (side < 6); + } + + // Set up the next layer as current layer for the while loop + this.currentLayer = nextLayer; + nextLayer = new LinkedList<>(); + } + } + + /** + * Literally the only difference from unseal() should be this: Block id = + * sideVec.getBlockID_noChunkLoad(world); + * + * In this code, there is a map edge check on the x, z coordinates (outside + * map edge at 30,000,000 blocks?) This check is skipped in the "safe" + * version of the same code, for higher performance because doing this check + * 50000 times when looking at blocks around a sealer at spawn is obviously + * dumb + */ + private void unsealNearMapEdge() + { + // Local variables are fractionally faster than statics + Block breatheableAirID = GCBlocks.breatheableAir; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + Block oxygenSealerID = GCBlocks.oxygenSealer; + Block fireBlock = Blocks.FIRE; + Block airBlock = Blocks.AIR; + Block airBlockBright = GCBlocks.brightAir; + List toReplaceLocal = this.breatheableToReplace; + LinkedList nextLayer = new LinkedList<>(); + World world = this.world; + int side, bits; + + while (this.currentLayer.size() > 0) + { + for (BlockVec3 vec : this.currentLayer) + { + side = 0; + bits = vec.sideDoneBits; + do + { + if ((bits & (1 << side)) == 0) + { + if (!checkedContains(vec, side)) + { + BlockVec3 sideVec = vec.newVecSide(side); + IBlockState state = sideVec.getBlockState_noChunkLoad(world); + Block block = state == null ? null : state.getBlock(); + + if (block == breatheableAirID) + { + toReplaceLocal.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == breatheableAirIDBright) + { + this.breatheableToReplaceBright.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == fireBlock) + { + this.fireToReplace.add(sideVec); + nextLayer.add(sideVec); + checkedAdd(sideVec); + } else if (block == oxygenSealerID) + { + TileEntityOxygenSealer sealer = this.sealersAround.get(sideVec); + + if (sealer != null && !this.sealers.contains(sealer)) + { + if (side == 0) + { + // Accessing the vent side of the + // sealer, so add it + this.otherSealers.add(sealer); + checkedAdd(sideVec); + } + // if side is not 0, do not add to checked + // so can be rechecked from other sides + } else + { + checkedAdd(sideVec); + } + } else + { + if (block != null && block != airBlock && block != airBlockBright) + { + // This test applies any necessary + // checkedAdd(); + if (this.canBlockPassAirCheck(block, sideVec, side)) + { + // Look outbound through partially + // sealable blocks in case there is + // breatheableAir to clear beyond + nextLayer.add(sideVec); + } + } else + { + if (block != null) + checkedAdd(sideVec); + } + } + } + } + side++; + } while (side < 6); + } + + // Set up the next layer as current layer for the while loop + this.currentLayer = nextLayer; + nextLayer = new LinkedList<>(); + } + } + + private void doLayer() + { + // Local variables are fractionally faster than statics + Block breatheableAirID = GCBlocks.breatheableAir; + Block airID = Blocks.AIR; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + Block airIDBright = GCBlocks.brightAir; + Block oxygenSealerID = GCBlocks.oxygenSealer; + LinkedList nextLayer = new LinkedList<>(); + World world = this.world; + int side, bits; + + while (this.sealed && this.currentLayer.size() > 0) + { + for (BlockVec3 vec : this.currentLayer) + { + // This is for side = 0 to 5 - but using do...while() is + // fractionally quicker + side = 0; + bits = vec.sideDoneBits; + do + { + // Skip the side which this was entered from + // This is also used to skip looking on the solid sides of + // partially sealable blocks + if ((bits & (1 << side)) == 0) + { + // The sides 0 to 5 correspond with the EnumFacings + // but saves a bit of time not to call EnumFacing + + if (!checkedContains(vec, side)) + { + BlockVec3 sideVec = vec.newVecSide(side); + if (this.checkCount > 0) + { + this.checkCount--; + + IBlockState state = sideVec.getBlockStateSafe_noChunkLoad(world); + Block block = state == null ? null : state.getBlock(); + // The most likely case + if (block == breatheableAirID) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.ambientThermalTracked.add(sideVec); + } else if (block == airID) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.airToReplace.add(sideVec); + } else if (block == breatheableAirIDBright) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.ambientThermalTrackedBright.add(sideVec); + } else if (block == airIDBright) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.airToReplaceBright.add(sideVec); + } else if (block == null) + { + // Broken through to the void or the + // stratosphere (above y==255) - set + // unsealed and abort + this.checkCount = 0; + this.sealed = false; + return; + } else if (block == oxygenSealerID) + { + TileEntityOxygenSealer sealer = this.sealersAround.get(sideVec); + + if (sealer != null && !this.sealers.contains(sealer)) + { + if (side == 0) + { + checkedAdd(sideVec); + this.sealers.add(sealer); + if (sealer.thermalControlEnabled()) + { + foundAmbientThermal = true; + } + this.checkCount += sealer.getFindSealChecks(); + } + // if side != 0, no checkedAdd() - + // allows this sealer to be checked + // again from other sides + } + } else if (this.canBlockPassAirCheck(block, sideVec, side)) + { + nextLayer.add(sideVec); + } + // If the chunk was unloaded, + // BlockVec3.getBlockID returns Blocks.bedrock + // which is a solid block, so the loop will + // treat that as a sealed edge + // and not iterate any further in that direction + } + // the if (this.isSealed) check here is unnecessary + // because of the returns + else + { + IBlockState state = sideVec.getBlockStateSafe_noChunkLoad(this.world); + Block block = state == null ? null : state.getBlock(); + // id == null means the void or height y>255, + // both + // of which are unsealed obviously + if (block == null || block == airID || block == breatheableAirID || block == airIDBright || block == breatheableAirIDBright + || this.canBlockPassAirCheck(block, sideVec, side)) + { + this.sealed = false; + if (this.sealers.size() > 0) + { + vec.sideDoneBits = side << 6; + traceLeak(vec); + } + return; + } + } + } + } + side++; + } while (side < 6); + } + + // Is there a further layer of air/permeable blocks to test? + this.currentLayer = nextLayer; + nextLayer = new LinkedList<>(); + } + } + + /** + * Again, literally the only difference from doLayer() should be these two + * lines: Block id = sideVec.getBlockID_noChunkLoad(world); + * + * In this code, there is a map edge check on the x, z coordinates (outside + * map edge at 30,000,000 blocks?) This check is skipped in the "safe" + * version of the same code, for higher performance because doing this check + * 50000 times when looking at blocks around a sealer at spawn is obviously + * dumb + */ + private void doLayerNearMapEdge() + { + // Local variables are fractionally faster than statics + Block breatheableAirID = GCBlocks.breatheableAir; + Block airID = Blocks.AIR; + Block breatheableAirIDBright = GCBlocks.brightBreatheableAir; + Block airIDBright = GCBlocks.brightAir; + Block oxygenSealerID = GCBlocks.oxygenSealer; + LinkedList nextLayer = new LinkedList<>(); + World world = this.world; + int side, bits; + + while (this.sealed && this.currentLayer.size() > 0) + { + for (BlockVec3 vec : this.currentLayer) + { + // This is for side = 0 to 5 - but using do...while() is + // fractionally quicker + side = 0; + bits = vec.sideDoneBits; + do + { + // Skip the side which this was entered from + // This is also used to skip looking on the solid sides of + // partially sealable blocks + if ((bits & (1 << side)) == 0) + { + // The sides 0 to 5 correspond with the EnumFacings + // but saves a bit of time not to call EnumFacing + + if (!checkedContains(vec, side)) + { + BlockVec3 sideVec = vec.newVecSide(side); + if (this.checkCount > 0) + { + this.checkCount--; + + IBlockState state = sideVec.getBlockState_noChunkLoad(world); + Block block = state == null ? null : state.getBlock(); + // The most likely case + if (block == breatheableAirID) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.ambientThermalTracked.add(sideVec); + } else if (block == airID) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.airToReplace.add(sideVec); + } else if (block == breatheableAirIDBright) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.ambientThermalTrackedBright.add(sideVec); + } else if (block == airIDBright) + { + checkedAdd(sideVec); + nextLayer.add(sideVec); + this.airToReplaceBright.add(sideVec); + } else if (block == null) + { + // Broken through to the void or the + // stratosphere (above y==255) - set + // unsealed and abort + this.checkCount = 0; + this.sealed = false; + return; + } else if (block == oxygenSealerID) + { + TileEntityOxygenSealer sealer = this.sealersAround.get(sideVec); + + if (sealer != null && !this.sealers.contains(sealer)) + { + if (side == 0) + { + checkedAdd(sideVec); + this.sealers.add(sealer); + if (sealer.thermalControlEnabled()) + { + foundAmbientThermal = true; + } + this.checkCount += sealer.getFindSealChecks(); + } + // if side != 0, no checkedAdd() - + // allows this sealer to be checked + // again from other sides + } + } else if (this.canBlockPassAirCheck(block, sideVec, side)) + { + nextLayer.add(sideVec); + } + // If the chunk was unloaded, + // BlockVec3.getBlockID returns Blocks.bedrock + // which is a solid block, so the loop will + // treat that as a sealed edge + // and not iterate any further in that direction + } + // the if (this.isSealed) check here is unnecessary + // because of the returns + else + { + IBlockState state = sideVec.getBlockState_noChunkLoad(this.world); + Block block = state == null ? null : state.getBlock(); + // id == null means the void or height y>255, + // both + // of which are unsealed obviously + if (block == null || block == airID || block == breatheableAirID || block == airIDBright || block == breatheableAirIDBright + || this.canBlockPassAirCheck(block, sideVec, side)) + { + this.sealed = false; + if (this.sealers.size() > 0) + { + vec.sideDoneBits = side << 6; + traceLeak(vec); + } + return; + } + } + } + } + side++; + } while (side < 6); + } + + // Is there a further layer of air/permeable blocks to test? + this.currentLayer = nextLayer; + nextLayer = new LinkedList<>(); + } + } + + private void checkedAdd(BlockVec3 vec) + { + int dx = this.head.x - vec.x; + int dz = this.head.z - vec.z; + if (dx < -8191 || dx > 8192) + return; + if (dz < -8191 || dz > 8192) + return; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + bucket.add(vec.y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) + ((vec.sideDoneBits & 0x1C0) << 18) << 4)); + } + + /** + * Currently unused - the sided implementation is used instead + */ + private boolean checkedContains(BlockVec3 vec) + { + int dx = this.head.x - vec.x; + int dz = this.head.z - vec.z; + if (dx < -8191 || dx > 8192) + return true; + if (dz < -8191 || dz > 8192) + return true; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + return bucket.contains(vec.y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + private boolean checkedContains(BlockVec3 vec, int side) + { + int y = vec.y; + int dx = this.head.x - vec.x; + int dz = this.head.z - vec.z; + switch (side) + { + case 0: + y--; + if (y < 0) + return false; + break; + case 1: + y++; + if (y > 255) + return false; + break; + case 2: + dz++; + break; + case 3: + dz--; + break; + case 4: + dx++; + break; + case 5: + dx--; + } + if (dx < -8191 || dx > 8192) + return true; + if (dz < -8191 || dz > 8192) + return true; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + return bucket.contains(y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + private BlockVec3 checkedContainsTrace(int x, int y, int z) + { + int dx = this.head.x - x; + int dz = this.head.z - z; + if (dx < -8191 || dx > 8192) + return null; + if (dz < -8191 || dz > 8192) + return null; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + int side = bucket.getMSB4shifted(y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + if (side >= 0) + { + BlockVec3 vec = new BlockVec3(x, y, z); + vec.sideDoneBits = side; + return vec; + } + return null; + } + + private static void checkedInit() + { + for (int i = 0; i < 256; i++) + { + buckets[i] = new intBucket(); + } + } + + private static void checkedClear() + { + for (int i = 0; i < 256; i++) + { + buckets[i].clear(); + } + checkedSize = 0; + } + + public List checkedAll() + { + List list = new LinkedList<>(); + int x = head.x; + int z = head.z; + for (int i = 0; i < 256; i++) + { + int size = this.buckets[i].size(); + if (size == 0) + continue; + int ddx = i >> 4; + int ddz = i & 15; + int[] ints = this.buckets[i].contents(); + for (int j = 0; j < size; j++) + { + int k = ints[j]; + int y = k & 255; + k >>= 4; + int dx = (k & 0x3FF0) + ddx; + int dz = ((k >> 10) & 0x3FF0) + ddz; + if (dx > 0x2000) + dx -= 0x4000; + if (dz > 0x2000) + dz -= 0x4000; + list.add(new BlockPos(x + dx, y, z + dz)); + } + } + return list; + } + + private void traceLeak(BlockVec3 tracer) + { + ArrayList route = new ArrayList<>(); + BlockVec3 start = this.head.clone().translate(0, 1, 0); + int count = 0; + int x = tracer.x; + int y = tracer.y; + int z = tracer.z; + while (!tracer.equals(start) && count < 90) + { + route.add(tracer); + switch (tracer.sideDoneBits >> 6) + { + case 1: + y--; + break; + case 0: + y++; + break; + case 3: + z--; + break; + case 2: + z++; + break; + case 5: + x--; + break; + case 4: + x++; + break; + } + tracer = checkedContainsTrace(x, y, z); + if (tracer == null) + { + return; + } + count++; + } + + this.leakTrace = new ArrayList<>(); + this.leakTrace.add(start); + for (int j = route.size() - 1; j >= 0; j--) + { + this.leakTrace.add(route.get(j)); + } + } + + private boolean canBlockPassAirCheck(Block block, BlockVec3 vec, int side) + { + if (block instanceof IPartialSealableBlock) + { + EnumFacing testSide = EnumFacing.byIndex(side); + IPartialSealableBlock blockPartial = (IPartialSealableBlock) block; + BlockPos vecPos = new BlockPos(vec.x, vec.y, vec.z); + if (blockPartial.isSealed(this.world, vecPos, testSide)) + { + // If a partial block checks as solid, allow it to be tested + // again from other directions + // This won't cause an endless loop, because the block won't + // be included in nextLayer if it checks as solid + this.checkCount--; + return false; + } + + // Find the solid sides so they don't get iterated into, when doing + // the next layer + for (EnumFacing face : EnumFacing.VALUES) + { + if (face == testSide) + { + continue; + } + if (blockPartial.isSealed(this.world, vecPos, face)) + { + vec.setSideDone(face.getIndex() ^ 1); + } + } + checkedAdd(vec); + return true; + } + + // Check leaves first, because their isOpaqueCube() test depends on + // graphics settings + // (See net.minecraft.block.BlockLeaves.isOpaqueCube()!) + if (block instanceof BlockLeaves) + { + checkedAdd(vec); + return true; + } + + IBlockState state = world.getBlockState(vec.toBlockPos()); + if (block.isOpaqueCube(state)) + { + checkedAdd(vec); + // Gravel, wool and sponge are porous + return block instanceof BlockGravel || block.getMaterial(state) == Material.CLOTH || block instanceof BlockSponge; + + } + + if (block instanceof BlockGlass || block instanceof BlockStainedGlass) + { + checkedAdd(vec); + return false; + } + + for (MultiBlockStateHolder mbsh : OxygenPressureProtocol.newNonPermeableBlockStateList) + { + if (mbsh.getBlock().equals(block)) + { + if (mbsh.getBlockstateList().contains(state)) + { + checkedAdd(vec); + return false; + } + } + } + + // Solid but non-opaque blocks, for example special glass + // if (OxygenPressureProtocol.nonPermeableBlocks.containsKey(block)) + // { + // ArrayList metaList = OxygenPressureProtocol.nonPermeableBlocks.get(block); + // if (metaList.contains(Integer.valueOf(-1)) || metaList.contains(vec.getBlockMetadata(this.world))) + // { + // checkedAdd(vec); + // return false; + // } + // } + + if (block instanceof BlockUnlitTorch) + { + this.torchesToUpdate.add(vec); + checkedAdd(vec); + return true; + } + + // Half slab seals on the top side or the bottom side according to its + // metadata + if (block instanceof BlockSlab) + { + boolean isTopSlab = (vec.getBlockMetadata(this.world) & 8) == 8; + // Looking down onto a top slab or looking up onto a bottom slab + if (side == 0 && isTopSlab || side == 1 && !isTopSlab) + { + // Sealed from that solid side but allow other sides still to be + // checked + this.checkCount--; + return false; + } + // Not sealed + vec.setSideDone(isTopSlab ? 1 : 0); + checkedAdd(vec); + return true; + } + + // Farmland etc only seals on the solid underside + if (block instanceof BlockFarmland || block instanceof BlockEnchantmentTable || block instanceof BlockLiquid) + { + if (side == 1) + { + // Sealed from the underside but allow other sides still to be + // checked + this.checkCount--; + return false; + } + // Not sealed + vec.setSideDone(0); + checkedAdd(vec); + return true; + } + + if (block instanceof BlockPistonBase) + { + BlockPistonBase piston = (BlockPistonBase) block; + if (state.getValue(BlockPistonBase.EXTENDED)) + { + int facing = state.getValue(BlockPistonBase.FACING).getIndex(); + if (side == facing) + { + this.checkCount--; + return false; + } + vec.setSideDone(facing ^ 1); + checkedAdd(vec); + return true; + } + checkedAdd(vec); + return false; + } + + // General case - this should cover any block which correctly implements + // isBlockSolidOnSide + // including most modded blocks - Forge microblocks in particular is + // covered by this. + // ### Any exceptions in mods should implement the IPartialSealableBlock + // interface ### + if (block.isSideSolid(state, this.world, vec.toBlockPos(), EnumFacing.byIndex(side ^ 1))) + { + // Solid on all sides + if (block.getMaterial(state).blocksMovement() && block.isFullCube(state)) + { + checkedAdd(vec); + return false; + } + // Sealed from this side but allow other sides still to be checked + this.checkCount--; + return false; + } + + // Easy case: airblock, return without checking other sides + if (block.getMaterial(state) == Material.AIR) + { + checkedAdd(vec); + return true; + } + + // Not solid on that side. + // Look to see if there is any other side which is solid in which case a + // check will not be needed next time + for (int i = 0; i < 6; i++) + { + if (i == (side ^ 1)) + { + continue; + } + if (block.isSideSolid(state, this.world, new BlockPos(vec.x, vec.y, vec.z), EnumFacing.byIndex(i))) + { + vec.setSideDone(i); + } + } + + // Not solid from this side, so this is not sealed + checkedAdd(vec); + return true; + } + + public static class intBucket + { + + private int maxSize = 64; // default size + private int size = 0; + private int[] table = new int[maxSize]; + + public void add(int i) + { + if (this.contains(i)) + return; + + if (size >= maxSize) + { + int[] newTable = new int[maxSize + maxSize]; + System.arraycopy(table, 0, newTable, 0, maxSize); + table = newTable; + maxSize += maxSize; + } + table[size] = i; + size++; + checkedSize++; + } + + public boolean contains(int test) + { + for (int i = size - 1; i >= 0; i--) + { + if ((table[i] & 0xFFFFFFF) == test) + return true; + } + return false; + } + + public int getMSB4shifted(int test) + { + for (int i = size - 1; i >= 0; i--) + { + if ((table[i] & 0xFFFFFFF) == test) + { + return (table[i] & 0xF0000000) >> 22; + } + } + return -1; + } + + public void clear() + { + size = 0; + } + + public int size() + { + return size; + } + + public int[] contents() + { + return table; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggy.java new file mode 100644 index 00000000..9de41e17 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggy.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerBuggy extends Container +{ + + private final IInventory lowerChestInventory; + private final IInventory spaceshipInv; + + public ContainerBuggy(IInventory par1IInventory, IInventory par2IInventory, int type, EntityPlayer player) + { + this.lowerChestInventory = par1IInventory; + this.spaceshipInv = par2IInventory; + par2IInventory.openInventory(player); + + int var4; + int var5; + + if (type != 0) + { + for (var4 = 0; var4 < type * 2; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.spaceshipInv, var5 + var4 * 9, 8 + var5 * 18, 50 + var4 * 18)); + } + } + } + + for (var4 = 0; var4 < 3; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var5 + var4 * 9 + 9, 8 + var5 * 18, 49 + var4 * 18 + 14 + type * 36)); + } + } + + for (var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var4, 8 + var4 * 18, 107 + 14 + type * 36)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.spaceshipInv.isUsableByPlayer(entityPlayer); + } + + /** + * Called when a player shift-clicks on a slot. You must override this or + * you will crash when someone does that. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot var4 = (Slot) this.inventorySlots.get(par2); + final int b = this.inventorySlots.size() - 36; + + if (var4 != null && var4.getHasStack()) + { + final ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 < b) + { + if (!this.mergeItemStack(var5, b, b + 36, true)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 0, b, false)) + { + return ItemStack.EMPTY; + } + + if (var5.getCount() == 0) + { + var4.putStack(ItemStack.EMPTY); + } else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + /** + * Callback for when the crafting gui is closed. + */ + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + this.lowerChestInventory.closeInventory(entityPlayer); + } + + /** + * Return this chest container's lower chest inventory. + */ + public IInventory getLowerChestInventory() + { + return this.lowerChestInventory; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggyBench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggyBench.java new file mode 100644 index 00000000..26a0e5d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerBuggyBench.java @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class ContainerBuggyBench extends Container +{ + + public InventoryBuggyBench craftMatrix = new InventoryBuggyBench(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerBuggyBench(InventoryPlayer par1InventoryPlayer, BlockPos pos, EntityPlayer player) + { + final int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 79 + change)); + int var6; + int var7; + + // Body + for (var6 = 0; var6 < 4; ++var6) + { + for (var7 = 0; var7 < 3; ++var7) + { + this.addSlotToContainer(new SlotBuggyBench(this.craftMatrix, var7 * 4 + var6 + 1, 39 + var7 * 18, 14 + var6 * 18 + change, pos, par1InventoryPlayer.player)); + } + } + + for (var6 = 0; var6 < 2; ++var6) + { + for (var7 = 0; var7 < 2; ++var7) + { + this.addSlotToContainer(new SlotBuggyBench(this.craftMatrix, var7 * 2 + var6 + 13, 21 + var7 * 72, 14 + var6 * 54 + change, pos, par1InventoryPlayer.player)); + } + } + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotBuggyBench(this.craftMatrix, 17 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 111 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack slot = this.craftMatrix.removeStackFromSlot(var2); + + if (!slot.isEmpty()) + { + entityPlayer.entityDropItem(slot, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtil.findMatchingBuggy(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = (Slot) this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < b - 36) + { + if (!this.mergeItemStack(var4, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 0) + { + slot.onSlotChange(var4, var2); + } + } else + { + Item i = var4.getItem(); + if (i == GCItems.heavyPlatingTier1 || i == GCItems.partBuggy) + { + for (int j = 1; j < 20; j++) + { + if (((Slot) this.inventorySlots.get(j)).isItemValid(var4)) + { + this.mergeOneItem(var4, j, j + 1, false); + } + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(var4, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (!this.mergeItemStack(var4, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onSlotChanged(); + slot.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (par1ItemStack.getCount() > 0) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCargoLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCargoLoader.java new file mode 100644 index 00000000..b33f21ef --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCargoLoader.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.tile.ILockable; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; + +public class ContainerCargoLoader extends Container +{ + + private TileBaseElectricBlock tileEntity; + private boolean locked; + + public ContainerCargoLoader(InventoryPlayer par1InventoryPlayer, IInventory cargoLoader) + { + this.tileEntity = (TileBaseElectricBlock) cargoLoader; + if (tileEntity instanceof ILockable) + { + this.locked = ((ILockable) tileEntity).getLocked(); + } + + this.addSlotToContainer(new SlotSpecific(cargoLoader, 0, 10, 27, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 2; ++var6) + { + for (var7 = 0; var7 < 7; ++var7) + { + this.addSlotToContainer(new Slot(cargoLoader, var7 + var6 * 7 + 1, 38 + var7 * 18, 27 + var6 * 18)); + } + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 124 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 66 + 116)); + } + } + + @Override + public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player) + { + if (this.locked && slotId > 0 && slotId < 15) + { + return ItemStack.EMPTY; + } + return super.slotClick(slotId, dragType, clickTypeIn, player); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par2); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var5 = slot.getStack(); + var3 = var5.copy(); + + if (par2 < 15) + { + if ((this.locked && par2 > 0) || !this.mergeItemStack(var5, 15, 51, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var5.getItem())) + { + if (!this.mergeItemStack(var5, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (par2 < 42) + { + if ((this.locked || !this.mergeItemStack(var5, 1, 15, false)) && !this.mergeItemStack(var5, 42, 51, false)) + { + return ItemStack.EMPTY; + } + } else if ((this.locked || !this.mergeItemStack(var5, 1, 15, false)) && !this.mergeItemStack(var5, 15, 42, false)) + { + return ItemStack.EMPTY; + } + } + + if (var5.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var5.getCount() == var3.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var5); + } + + return var3; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCircuitFabricator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCircuitFabricator.java new file mode 100644 index 00000000..e66f8e71 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCircuitFabricator.java @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotFurnaceOutput; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCircuitFabricator; + +public class ContainerCircuitFabricator extends Container +{ + + private TileEntityCircuitFabricator tileEntity; + + public ContainerCircuitFabricator(InventoryPlayer playerInv, TileEntityCircuitFabricator tileEntity) + { + this.tileEntity = tileEntity; + + // Energy slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 6, 69, IItemElectric.class)); + + // Diamond + ArrayList slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(0); + this.addSlotToContainer(new SlotSpecific(tileEntity, 1, 15, 17, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + + // Silicon + slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(1); + this.addSlotToContainer(new SlotSpecific(tileEntity, 2, 74, 46, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(2); + this.addSlotToContainer(new SlotSpecific(tileEntity, 3, 74, 64, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + + // Redstone + slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(3); + this.addSlotToContainer(new SlotSpecific(tileEntity, 4, 122, 46, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + + // Optional + slotContentsList = CircuitFabricatorRecipes.slotValidItems.get(4); + this.addSlotToContainer(new SlotSpecific(tileEntity, 5, 145, 20, slotContentsList.toArray(new ItemStack[slotContentsList.size()]))); + + // Smelting result + this.addSlotToContainer(new SlotFurnaceOutput(playerInv.player, tileEntity, 6, 152, 86)); + + int slot; + + for (slot = 0; slot < 3; ++slot) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(playerInv, var4 + slot * 9 + 9, 8 + var4 * 18, 110 + slot * 18)); + } + } + + for (slot = 0; slot < 9; ++slot) + { + this.addSlotToContainer(new Slot(playerInv, slot, 8 + slot * 18, 168)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + super.onCraftMatrixChanged(par1IInventory); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < b - 36) + { + if (!this.mergeItemStack(var4, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 6) + { + slot.onSlotChange(var4, var2); + } + } else + { + Item i = var4.getItem(); + if (EnergyUtil.isElectricItem(i)) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (i == Items.DIAMOND) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (this.isSilicon(var4)) + { + if (!this.mergeEven(var4, 2, 4)) + { + return ItemStack.EMPTY; + } + } else if (i == Items.REDSTONE) + { + if (!this.mergeItemStack(var4, 4, 5, false)) + { + return ItemStack.EMPTY; + } + } else if (i == Items.REPEATER || i == new ItemStack(Blocks.REDSTONE_TORCH).getItem() || i == Items.DYE && i.getDamage(var4) == 4) + { + if (!this.mergeItemStack(var4, 5, 6, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < b - 9) + { + if (!this.mergeItemStack(var4, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } + + private boolean mergeEven(ItemStack stack, int a, int b) + { + List acceptSlots = new LinkedList<>(); + List acceptQuantity = new LinkedList<>(); + int minQuantity = 64; + int acceptTotal = 0; + for (int i = a; i < b; i++) + { + Slot slot = (Slot) this.inventorySlots.get(i); + + if (slot != null) + { + ItemStack target = slot.getStack(); + if (matchingStacks(stack, target)) + { + acceptSlots.add(slot); + int availSpace = stack.getMaxStackSize() - target.getCount(); + acceptQuantity.add(availSpace); + acceptTotal += availSpace; + if (availSpace < minQuantity) + minQuantity = availSpace; + } + } + } + + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + if (target.isEmpty()) + { + target = stack.copy(); + target.setCount(1); + slot.putStack(target); + stack.shrink(1); + if (stack.isEmpty()) + { + return false; + } + } + } + + // The stack more than exceeds what the crafting inventory requires + if (stack.getCount() >= acceptTotal) + { + if (acceptTotal == 0) + return false; + + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + stack.shrink(target.getMaxStackSize() - target.getCount()); + target.setCount(target.getMaxStackSize()); + slot.onSlotChanged(); + } + return true; + } + + int uneven = 0; + for (int q : acceptQuantity) + { + uneven += q - minQuantity; + } + + // Use the whole stack to try to even up the neediest slots + if (stack.getCount() <= uneven) + { + do + { + Slot neediest = null; + int smallestStack = 64; + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + if (target.getCount() < smallestStack) + { + smallestStack = target.getCount(); + neediest = slot; + } + } + neediest.getStack().grow(1); + stack.shrink(1); + } while (!stack.isEmpty()); + for (Slot slot : acceptSlots) + { + slot.onSlotChanged(); + } + return true; + } + + // Use some of the stack to even things up + if (uneven > 0) + { + int targetSize = stack.getMaxStackSize() - minQuantity; + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + stack.shrink(targetSize - target.getCount()); + acceptTotal -= targetSize - target.getCount(); + target.setCount(targetSize); + slot.onSlotChanged(); + } + } + + // Spread the remaining stack over all slots evenly + int average = stack.getCount() / acceptSlots.size(); + int modulus = stack.getCount() - average * acceptSlots.size(); + for (Slot slot : acceptSlots) + { + if (slot != null) + { + ItemStack target = slot.getStack(); + int transfer = average; + if (modulus > 0) + { + transfer++; + modulus--; + } + if (transfer > stack.getCount()) + transfer = stack.getCount(); + stack.shrink(transfer); + target.grow(transfer); + if (target.getCount() > target.getMaxStackSize()) + { + GalacticraftCore.logger.info("Shift clicking - slot " + slot.slotNumber + " wanted more than it could accept:" + target.getCount()); + stack.grow(target.getCount() - target.getMaxStackSize()); + target.setCount(target.getMaxStackSize()); + } + slot.onSlotChanged(); + if (stack.isEmpty()) + break; + } + } + + return true; + } + + private boolean isSilicon(ItemStack test) + { + for (ItemStack stack : CircuitFabricatorRecipes.slotValidItems.get(1)) + { + if (stack.isItemEqual(test)) + return true; + } + return false; + } + + private boolean matchingStacks(ItemStack stack, ItemStack target) + { + return target.isEmpty() || target.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == target.getMetadata()) && ItemStack.areItemStackTagsEqual(stack, target) + && (target.isStackable() && target.getCount() < target.getMaxStackSize()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCoalGenerator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCoalGenerator.java new file mode 100644 index 00000000..02314a20 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCoalGenerator.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityCoalGenerator; + +public class ContainerCoalGenerator extends Container +{ + + private TileEntityCoalGenerator tileEntity; + + public ContainerCoalGenerator(InventoryPlayer inventoryPlayer, TileEntityCoalGenerator tileEntity) + { + this.tileEntity = tileEntity; + this.addSlotToContainer(new SlotCoalGenerator(tileEntity, 0, 33, 34)); + int i; + + for (i = 0; i < 3; ++i) + { + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(inventoryPlayer, k + i * 9 + 9, 8 + k * 18, 84 + i * 18)); + } + } + + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int index) + { + ItemStack stack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack var4 = slot.getStack(); + stack = var4.copy(); + + if (index != 0) + { + if (var4.getItem() == Items.COAL) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (index >= 28) + { + if (!this.mergeItemStack(var4, 1, 28, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 28, 37, false)) + { + return ItemStack.EMPTY; + } + + } else if (!this.mergeItemStack(var4, 1, 37, false)) + { + return ItemStack.EMPTY; + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == stack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return stack; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCrafting.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCrafting.java new file mode 100644 index 00000000..fe3c679e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerCrafting.java @@ -0,0 +1,378 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class ContainerCrafting extends Container +{ + + public TileEntityCrafting tileEntity; + public PersistantInventoryCrafting craftMatrix; + public IInventory craftResult = new InventoryCraftResult(); + private NonNullList memory = NonNullList.withSize(9, ItemStack.EMPTY); + + public ContainerCrafting(InventoryPlayer playerInventory, IInventory tile) + { + this.tileEntity = (TileEntityCrafting) tile; + this.craftMatrix = tileEntity.craftMatrix; + this.craftMatrix.eventHandler = this; + this.addSlotToContainer(new SlotCraftingMemory(playerInventory.player, this.craftMatrix, this.craftResult, 0, 124, 33, this.tileEntity)); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + this.addSlotToContainer(new Slot(this.craftMatrix, j + i * 3, 30 + j * 18, 17 + i * 18)); + } + } + + for (int k = 0; k < 3; ++k) + { + for (int i1 = 0; i1 < 9; ++i1) + { + this.addSlotToContainer(new Slot(playerInventory, i1 + k * 9 + 9, 8 + i1 * 18, 84 + k * 18)); + } + } + + for (int l = 0; l < 9; ++l) + { + this.addSlotToContainer(new Slot(playerInventory, l, 8 + l * 18, 142)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public NonNullList getInventory() + { + NonNullList list = NonNullList.create(); + + for (int i = 0; i < this.inventorySlots.size(); ++i) + { + list.add(this.inventorySlots.get(i).getStack()); + } + + // Override this method to trick vanilla networking into carrying our + // memory at end of its packets + for (int i = 0; i < 9; i++) + list.add(this.tileEntity.memory.get(i)); + + return list; + } + + @Override + public void setAll(List list) + { + for (int i = 0; i < list.size(); ++i) + { + if (i < 46) + this.getSlot(i).putStack(list.get(i)); + else if (i < 55) + // Read memory clientside from the end of the vanilla packet, + // see getInventory() + this.tileEntity.memory.set(i - 46, list.get(i)); + } + } + + /** + * Callback for when the crafting matrix is changed. + */ + @Override + public void onCraftMatrixChanged(IInventory inventoryIn) + { + this.craftResult.setInventorySlotContents(0, CraftingManager.findMatchingResult(this.craftMatrix, this.tileEntity.getWorld())); + } + + /** + * Called when the container is closed. + */ + @Override + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + if (!playerIn.world.isRemote) + { + craftMatrix.eventHandler = null; + } + } + + @Override + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.tileEntity.isUsableByPlayer(playerIn); + } + + /** + * Take a stack from the specified inventory slot. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack() && !slot.getStack().isEmpty()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 0) + { + if (!this.mergeItemStack(itemstack1, 10, 46, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } else if (index < 10) + { + if (!this.mergeItemStack(itemstack1, 10, 46, false)) + { + return ItemStack.EMPTY; + } + } else if (this.matchesCrafting(itemstack1)) + { + if (!this.mergeToCrafting(itemstack1, false)) + { + return ItemStack.EMPTY; + } + } else if (index >= 10 && index < 37) + { + if (!this.mergeItemStack(itemstack1, 37, 46, false)) + { + return ItemStack.EMPTY; + } + } else if (index >= 37 && index < 46) + { + if (!this.mergeItemStack(itemstack1, 10, 37, false)) + { + return ItemStack.EMPTY; + } + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } + + private boolean mergeToCrafting(ItemStack stack, boolean b) + { + if (stack.isEmpty()) + { + return false; + } + List acceptSlots = new LinkedList<>(); + List acceptQuantity = new LinkedList<>(); + int minQuantity = 64; + int acceptTotal = 0; + for (int i = 1; i < 10; i++) + { + Slot slot = this.inventorySlots.get(i); + + if (slot != null) + { + ItemStack target = slot.getStack(); + ItemStack target2 = this.memory.get(i - 1); + if (target2.isEmpty()) + continue; + if (target.isEmpty()) + { + target = target2.copy(); + } + if (matchingStacks(stack, target)) + { + acceptSlots.add(slot); + int availSpace = target.getMaxStackSize() - target.getCount(); + acceptQuantity.add(availSpace); + acceptTotal += availSpace; + if (availSpace < minQuantity) + minQuantity = availSpace; + } + } + } + + // First fill any empty slots + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + if (target.isEmpty()) + { + ItemStack target2 = this.memory.get(slot.slotNumber - 1); + this.craftMatrix.setInventorySlotContents(slot.slotNumber - 1, target2.copy()); + stack.shrink(1); + if (stack.isEmpty()) + { + return false; + } + } + } + + // The stack more than exceeds what the crafting inventory requires + if (stack.getCount() >= acceptTotal) + { + if (acceptTotal == 0) + return false; + + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + stack.shrink(target.getMaxStackSize() - target.getCount()); + target.setCount(target.getMaxStackSize()); + slot.onSlotChanged(); + } + return true; + } + + int uneven = 0; + for (int q : acceptQuantity) + { + uneven += q - minQuantity; + } + + // Use the whole stack to try to even up the neediest slots + if (stack.getCount() <= uneven) + { + do + { + Slot neediest = null; + int smallestStack = 64; + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + if (target.getCount() < smallestStack) + { + smallestStack = target.getCount(); + neediest = slot; + } + } + neediest.getStack().grow(1); + stack.shrink(1); + } while (!stack.isEmpty()); + for (Slot slot : acceptSlots) + { + slot.onSlotChanged(); + } + return true; + } + + // Use some of the stack to even things up + if (uneven > 0) + { + int targetSize = stack.getMaxStackSize() - minQuantity; + for (Slot slot : acceptSlots) + { + ItemStack target = slot.getStack(); + stack.shrink(targetSize - target.getCount()); + acceptTotal -= targetSize - target.getCount(); + target.setCount(targetSize); + slot.onSlotChanged(); + } + } + + // Spread the remaining stack over all slots evenly + int average = stack.getCount() / acceptSlots.size(); + int modulus = stack.getCount() - average * acceptSlots.size(); + for (Slot slot : acceptSlots) + { + if (slot != null) + { + ItemStack target = slot.getStack(); + int transfer = average; + if (modulus > 0) + { + transfer++; + modulus--; + } + if (transfer > stack.getCount()) + transfer = stack.getCount(); + stack.shrink(transfer); + target.grow(transfer); + if (target.getCount() > target.getMaxStackSize()) + { + GalacticraftCore.logger.info("Shift clicking - slot " + slot.slotNumber + " wanted more than it could accept:" + target.getCount()); + stack.grow(target.getCount() - target.getMaxStackSize()); + target.setCount(target.getMaxStackSize()); + } + slot.onSlotChanged(); + if (stack.isEmpty()) + break; + } + } + + return true; + } + + private boolean matchesCrafting(ItemStack itemstack1) + { + if (this.tileEntity.overrideMemory(itemstack1, this.memory)) + { + return true; + } + + for (int i = 0; i < 9; i++) + { + if (matchingStacks(itemstack1, this.tileEntity.getMemory(i)) + && (this.craftMatrix.getStackInSlot(i).isEmpty() || this.craftMatrix.getStackInSlot(i).getCount() < itemstack1.getMaxStackSize())) + { + for (int j = 0; j < 9; j++) + { + this.memory.set(j, this.tileEntity.getMemory(j)); + } + return true; + } + } + return false; + } + + private boolean matchingStacks(ItemStack stack, ItemStack target) + { + return !target.isEmpty() && target.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == target.getMetadata()) && RecipeUtil.areItemStackTagsEqual(stack, target) + && (!target.isStackable() || target.getCount() < target.getMaxStackSize()); + } + + /** + * Called to determine if the current slot is valid for the stack merging + * (double-click) code. The stack passed in is null for the initial slot + * that was double-clicked. + */ + @Override + public boolean canMergeSlot(ItemStack stack, Slot p_94530_2_) + { + return p_94530_2_.inventory != this.craftResult && super.canMergeSlot(stack, p_94530_2_); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerDeconstructor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerDeconstructor.java new file mode 100644 index 00000000..7ad5d084 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerDeconstructor.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; + +public class ContainerDeconstructor extends Container +{ + + private TileEntityDeconstructor tileEntity; + + public ContainerDeconstructor(InventoryPlayer par1InventoryPlayer, TileEntityDeconstructor tileEntity) + { + this.tileEntity = tileEntity; + + // Battery Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 55, 75, IItemElectric.class)); + + // Input slot + this.addSlotToContainer(new Slot(tileEntity, 1, 26, 36)); + + int count = 2; + for (int x = 0; x < 3; x++) + { + for (int y = 0; y < 3; y++) + { + this.addSlotToContainer(new Slot(tileEntity, count++, 112 + y * 18, 18 + x * 18)); + } + } + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 117 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 175)); + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot var3 = (Slot) this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + if (par1 <= 10) + { + if (!this.mergeItemStack(var4, 11, 47, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 38) + { + if (!this.mergeItemStack(var4, 1, 2, false) && !this.mergeItemStack(var4, 38, 47, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 1, 2, false) && !this.mergeItemStack(var4, 11, 38, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.getCount() == 0) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricFurnace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricFurnace.java new file mode 100644 index 00000000..933be2b8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricFurnace.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotFurnaceOutput; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricFurnace; + +public class ContainerElectricFurnace extends Container +{ + + private TileEntityElectricFurnace tileEntity; + + public ContainerElectricFurnace(InventoryPlayer par1InventoryPlayer, TileEntityElectricFurnace tileEntity) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 8, 49, IItemElectric.class)); + + // To be smelted + this.addSlotToContainer(new Slot(tileEntity, 1, 56, 25)); + + // Smelting result + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 2, 109, 25)); + if (tileEntity.tierGC == 2) + { + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 3, 127, 25)); + } + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + + tileEntity.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot var3 = this.inventorySlots.get(par1); + int off = this.tileEntity.tierGC == 2 ? 1 : 0; + + if (var3 != null && var3.getHasStack()) + { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + if (par1 >= 2 && par1 <= 2 + off) + { + if (!this.mergeItemStack(var4, 3 + off, 39 + off, true)) + { + return ItemStack.EMPTY; + } + + var3.onSlotChange(var4, var2); + } else if (par1 != 1 && par1 != 0) + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (!FurnaceRecipes.instance().getSmeltingResult(var4).isEmpty()) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 3 + off && par1 < 30 + off) + { + if (!this.mergeItemStack(var4, 30 + off, 39 + off, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 30 + off && par1 < 39 + off && !this.mergeItemStack(var4, 3 + off, 30 + off, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 3 + off, 39 + off, false)) + { + return ItemStack.EMPTY; + } + + if (var4.getCount() == 0) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricIngotCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricIngotCompressor.java new file mode 100644 index 00000000..7fe8b43e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerElectricIngotCompressor.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotFurnaceOutput; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityElectricIngotCompressor; + +public class ContainerElectricIngotCompressor extends Container +{ + + private TileEntityElectricIngotCompressor tileEntity; + + public ContainerElectricIngotCompressor(InventoryPlayer par1InventoryPlayer, TileEntityElectricIngotCompressor tileEntity) + { + this.tileEntity = tileEntity; + tileEntity.compressingCraftMatrix.eventHandler = this; + + for (int x = 0; x < 3; x++) + { + for (int y = 0; y < 3; y++) + { + this.addSlotToContainer(new Slot(tileEntity.compressingCraftMatrix, y + x * 3, 19 + y * 18, 18 + x * 18)); + } + } + + // Battery Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 55, 75, IItemElectric.class)); + + // Smelting result + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 1, 138, 30)); + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 2, 138, 48)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 117 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 175)); + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + super.onCraftMatrixChanged(par1IInventory); + this.tileEntity.updateInput(); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + if (par1 <= 11) + { + if (!this.mergeItemStack(var4, 12, 48, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 1 || par1 == 2) + { + var3.onSlotChange(var4, var2); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 9, 10, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 39) + { + if (!this.mergeItemStack(var4, 0, 9, false) && !this.mergeItemStack(var4, 39, 48, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 0, 9, false) && !this.mergeItemStack(var4, 12, 39, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.getCount() == 0) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerEnergyStorageModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerEnergyStorageModule.java new file mode 100644 index 00000000..9b0f8b94 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerEnergyStorageModule.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; + +public class ContainerEnergyStorageModule extends Container +{ + + private TileEntityEnergyStorageModule tileEntity; + + public ContainerEnergyStorageModule(InventoryPlayer par1InventoryPlayer, TileEntityEnergyStorageModule batteryBox) + { + this.tileEntity = batteryBox; + // Top slot for battery output + this.addSlotToContainer(new SlotSpecific(batteryBox, 0, 33, 24, IItemElectric.class)); + // Bottom slot for batter input + this.addSlotToContainer(new SlotSpecific(batteryBox, 1, 33, 48, IItemElectric.class)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + + this.tileEntity.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotID) + { + ItemStack returnStack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(slotID); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemStack = slot.getStack(); + returnStack = itemStack.copy(); + boolean movedToMachineSlot = false; + + if (slotID != 0 && slotID != 1) + { + if (EnergyUtil.isElectricItem(itemStack.getItem())) + { + if (EnergyUtil.isChargedElectricItem(itemStack)) + { + if (!this.mergeItemStack(itemStack, 1, 2, false)) + { + if (EnergyUtil.isFillableElectricItem(itemStack) && !this.mergeItemStack(itemStack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } + movedToMachineSlot = true; + } else + { + if (!this.mergeItemStack(itemStack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } + } else + { + if (slotID < b - 9) + { + if (!this.mergeItemStack(itemStack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemStack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } else if (!this.mergeItemStack(itemStack, 2, 38, false)) + { + return ItemStack.EMPTY; + } + + if (itemStack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && returnStack.getCount() > 1) + { + ItemStack remainder = returnStack.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (itemStack.getCount() == returnStack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, itemStack); + } + + return returnStack; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerExtendedInventory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerExtendedInventory.java new file mode 100644 index 00000000..8ba28ae4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerExtendedInventory.java @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; + +public class ContainerExtendedInventory extends Container +{ + + public InventoryPlayer inventoryPlayer; + public InventoryExtended extendedInventory; + + public ContainerExtendedInventory(EntityPlayer thePlayer, InventoryExtended extendedInventory) + { + this.inventoryPlayer = thePlayer.inventory; + this.extendedInventory = extendedInventory; + + int i; + int j; + + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(thePlayer.inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(thePlayer.inventory, i, 8 + i * 18, 142)); + } + + for (i = 0; i < 4; ++i) + { + this.addSlotToContainer(new SlotArmorGC(thePlayer, thePlayer.inventory, 39 - i, 61, 8 + i * 18, i)); + } + + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 0, 125, 26)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 1, 125, 44)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 2, 116, 62)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 3, 134, 62)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 4, 143, 26)); + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 5, 107, 26)); + + for (i = 0; i < 4; ++i) + { + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 6 + i, 79, 8 + i * 18)); + } + + this.addSlotToContainer(new SlotExtendedInventory(extendedInventory, 10, 125, 8)); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 >= 36) + { + if (!this.mergeItemStack(stack, 0, 36, true)) + { + return ItemStack.EMPTY; + } + } else + { + boolean flag = false; + for (int j = 36; j < 40; j++) + { + if (((SlotArmorGC) this.inventorySlots.get(j)).isItemValid(stack)) + { + if (!this.mergeOneItem(stack, j, j + 1, false)) + { + return ItemStack.EMPTY; + } + flag = true; + break; + } + } + + if (!flag) + { + if (stack.getItem() instanceof ItemOxygenTank || stack.getItem() instanceof ItemCanisterOxygenInfinite) + { + if (!this.mergeOneItem(stack, 42, 44, false)) + { + return ItemStack.EMPTY; + } + flag = true; + } else + { + for (int j = 40; j < 51; j++) + { + if (((SlotExtendedInventory) this.inventorySlots.get(j)).isItemValid(stack)) + { + if (!this.mergeOneItem(stack, j, j + 1, false)) + { + return ItemStack.EMPTY; + } + flag = true; + break; + } + } + } + } + + if (!flag) + { + if (par1 < 27) + { + if (!this.mergeItemStack(stack, 27, 36, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, 0, 27, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (par1ItemStack.getCount() > 0) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerFuelLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerFuelLoader.java new file mode 100644 index 00000000..c66148b4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerFuelLoader.java @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFuelLoader; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class ContainerFuelLoader extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerFuelLoader(InventoryPlayer par1InventoryPlayer, TileEntityFuelLoader fuelLoader) + { + this.tileEntity = fuelLoader; + this.addSlotToContainer(new SlotSpecific(fuelLoader, 0, 51, 55, IItemElectric.class)); + this.addSlotToContainer(new Slot(fuelLoader, 1, 7, 12)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 31 + 58 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 31 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par2); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var5 = slot.getStack(); + var3 = var5.copy(); + boolean movedToMachineSlot = false; + + if (par2 < 2) + { + if (!this.mergeItemStack(var5, 2, 38, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var5.getItem())) + { + if (!this.mergeItemStack(var5, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (FluidUtil.isFuelContainerAny(var5)) + { + if (!this.mergeItemStack(var5, 1, 2, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else if (par2 < 29) + { + if (!this.mergeItemStack(var5, 29, 38, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 2, 29, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var5.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var3.getCount() > 1) + { + ItemStack remainder = var3.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (var5.getCount() == var3.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var5); + } + + return var3; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerIngotCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerIngotCompressor.java new file mode 100644 index 00000000..42210730 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerIngotCompressor.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.inventory.SlotFurnaceOutput; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityFurnace; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityIngotCompressor; + +public class ContainerIngotCompressor extends Container +{ + + private TileEntityIngotCompressor tileEntity; + + public ContainerIngotCompressor(InventoryPlayer par1InventoryPlayer, TileEntityIngotCompressor tileEntity) + { + this.tileEntity = tileEntity; + tileEntity.compressingCraftMatrix.eventHandler = this; + + for (int x = 0; x < 3; x++) + { + for (int y = 0; y < 3; y++) + { + this.addSlotToContainer(new Slot(tileEntity.compressingCraftMatrix, y + x * 3, 19 + y * 18, 18 + x * 18)); + } + } + + // Coal slot + this.addSlotToContainer(new Slot(tileEntity, 0, 55, 75)); + + // Smelting result + this.addSlotToContainer(new SlotFurnaceOutput(par1InventoryPlayer.player, tileEntity, 1, 138, 38)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 110 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 168)); + } + + tileEntity.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + super.onCraftMatrixChanged(par1IInventory); + this.tileEntity.updateInput(); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 <= 10) + { + if (!this.mergeItemStack(var4, 11, 47, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 1) + { + slot.onSlotChange(var4, var2); + } + } else + { + if (TileEntityFurnace.getItemBurnTime(var4) > 0) + { + if (!this.mergeItemStack(var4, 9, 10, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 38) + { + if (!this.mergeItemStack(var4, 0, 9, false) && !this.mergeItemStack(var4, 38, 47, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 0, 9, false) && !this.mergeItemStack(var4, 11, 38, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } + + // Can only split-drag into the crafting table slots + @Override + public boolean canDragIntoSlot(Slot par1Slot) + { + return par1Slot.slotNumber < 9; + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCollector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCollector.java new file mode 100644 index 00000000..230a682f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCollector.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCollector; + +public class ContainerOxygenCollector extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenCollector(InventoryPlayer par1InventoryPlayer, TileEntityOxygenCollector collector) + { + this.tileEntity = collector; + this.addSlotToContainer(new SlotSpecific(collector, 0, 32, 27, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 46 + 58 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 46 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCompressor.java new file mode 100644 index 00000000..8d99c0d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenCompressor.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenCompressor; + +public class ContainerOxygenCompressor extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenCompressor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenCompressor compressor, EntityPlayer player) + { + this.tileEntity = compressor; + this.addSlotToContainer(new Slot(compressor, 0, 133, 71)); + this.addSlotToContainer(new SlotSpecific(compressor, 1, 47, 27, IItemElectric.class)); + this.addSlotToContainer(new SlotSpecific(compressor, 2, 17, 27, IItemOxygenSupply.class)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 20 + 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 20 + 142)); + } + + compressor.openInventory(player); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 < 3) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else if (stack.getItem() instanceof IItemOxygenSupply) + { + if (!this.mergeItemStack(stack, 2, 3, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else if (stack.getItem() instanceof ItemOxygenTank && stack.getItemDamage() > 0) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDecompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDecompressor.java new file mode 100644 index 00000000..0fabe0ab --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDecompressor.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDecompressor; + +public class ContainerOxygenDecompressor extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenDecompressor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenDecompressor compressor, EntityPlayer player) + { + this.tileEntity = compressor; + this.addSlotToContainer(new Slot(compressor, 0, 133, 71)); + this.addSlotToContainer(new SlotSpecific(compressor, 1, 32, 27, IItemElectric.class)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 20 + 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 20 + 142)); + } + + compressor.openInventory(player); + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 < 2) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else if (stack.getItem() instanceof ItemCanisterOxygenInfinite || (stack.getItem() instanceof ItemOxygenTank && stack.getItemDamage() < stack.getMaxDamage())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDistributor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDistributor.java new file mode 100644 index 00000000..bee20fe4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenDistributor.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; + +public class ContainerOxygenDistributor extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenDistributor(InventoryPlayer par1InventoryPlayer, TileEntityOxygenDistributor distributor) + { + this.tileEntity = distributor; + this.addSlotToContainer(new SlotSpecific(distributor, 0, 47, 27, IItemElectric.class)); + this.addSlotToContainer(new SlotSpecific(distributor, 1, 17, 27, IItemOxygenSupply.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 46 + 58 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 46 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = (Slot) this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 < 2) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (stack.getItem() instanceof IItemOxygenSupply) + { + if (!this.mergeItemStack(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else + + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenSealer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenSealer.java new file mode 100644 index 00000000..409b9cf1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenSealer.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; + +public class ContainerOxygenSealer extends Container +{ + + private TileBaseElectricBlock tileEntity; + + public ContainerOxygenSealer(InventoryPlayer par1InventoryPlayer, TileEntityOxygenSealer sealer) + { + this.tileEntity = sealer; + this.addSlotToContainer(new SlotSpecific(sealer, 0, 33, 27, IItemElectric.class)); + this.addSlotToContainer(new SlotSpecific(sealer, 1, 10, 27, IItemOxygenSupply.class)); + this.addSlotToContainer(new SlotSpecific(sealer, 2, 56, 27, new ItemStack(GCItems.basicItem, 1, 20))); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 46 + 78 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 46 + 136)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 <= 2) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (stack.getItem() instanceof IItemOxygenSupply) + { + if (!this.mergeItemStack(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (stack.getItem() == GCItems.basicItem && stack.getItemDamage() == 20) + { + if (!this.mergeItemStack(stack, 2, 3, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenStorageModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenStorageModule.java new file mode 100644 index 00000000..ecc76221 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerOxygenStorageModule.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; + +public class ContainerOxygenStorageModule extends Container +{ + + private TileEntityOxygenStorageModule tileEntity; + + public ContainerOxygenStorageModule(InventoryPlayer par1InventoryPlayer, TileEntityOxygenStorageModule storageModule) + { + this.tileEntity = storageModule; + this.addSlotToContainer(new SlotSpecific(storageModule, 0, 17, 22, IItemOxygenSupply.class)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + + this.tileEntity.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 < 1) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (stack.getItem() instanceof IItemOxygenSupply) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerPainter.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerPainter.java new file mode 100644 index 00000000..3027446a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerPainter.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IPaintable; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; + +public class ContainerPainter extends Container +{ + + private TileEntityPainter tileEntity; + + public ContainerPainter(InventoryPlayer par1InventoryPlayer, TileEntityPainter tileEntity2) + { + this.tileEntity = tileEntity2; + + // To be painted + this.addSlotToContainer(new Slot(tileEntity2, 0, 40, 25)); + // TODO: slots which can only accept one item + + // For dyes and other colour giving items + this.addSlotToContainer(new Slot(tileEntity2, 1, 122, 25)); + + int i; + for (i = 0; i < 3; ++i) + { + for (int j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); + } + } + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 162)); + } + + tileEntity2.playersUsing.add(par1InventoryPlayer.player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.playersUsing.remove(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int index) + { + ItemStack stackOrig = ItemStack.EMPTY; + Slot slot = (Slot) this.inventorySlots.get(index); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + ItemStack stack = slot.getStack(); + stackOrig = stack.copy(); + + if (index < 2) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + slot.onSlotChange(stack, stackOrig); + } else if (index != 1 && index != 0) + { + Item item = stack.getItem(); + if (item instanceof IPaintable || (item instanceof ItemBlock && ((ItemBlock) item).getBlock() instanceof IPaintable)) + { + if (!this.mergeOneItem(stack, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (index < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + + if (stack.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == stackOrig.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return stackOrig; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (par1ItemStack.getCount() > 0) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = (Slot) this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerParaChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerParaChest.java new file mode 100644 index 00000000..4c3ac198 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerParaChest.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerParaChest extends Container +{ + + private IInventory parachestInventory; + public int numRows; + + public ContainerParaChest(IInventory par1IInventory, IInventory par2IInventory, EntityPlayer player) + { + this.parachestInventory = par2IInventory; + this.numRows = (par2IInventory.getSizeInventory() - 3) / 9; + par2IInventory.openInventory(player); + int i = (this.numRows - 4) * 18 + 19; + int j; + int k; + + for (j = 0; j < this.numRows; ++j) + { + for (k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(par2IInventory, k + j * 9, 8 + k * 18, 18 + j * 18)); + } + } + + this.addSlotToContainer(new Slot(par2IInventory, par2IInventory.getSizeInventory() - 3, 125 + 0 * 18, (this.numRows == 0 ? 24 : 26) + this.numRows * 18)); + this.addSlotToContainer(new Slot(par2IInventory, par2IInventory.getSizeInventory() - 2, 125 + 1 * 18, (this.numRows == 0 ? 24 : 26) + this.numRows * 18)); + this.addSlotToContainer(new Slot(par2IInventory, par2IInventory.getSizeInventory() - 1, 75, (this.numRows == 0 ? 24 : 26) + this.numRows * 18)); + + for (j = 0; j < 3; ++j) + { + for (k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(par1IInventory, k + j * 9 + 9, 8 + k * 18, (this.numRows == 0 ? 116 : 118) + j * 18 + i)); + } + } + + for (j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(par1IInventory, j, 8 + j * 18, (this.numRows == 0 ? 174 : 176) + i)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.parachestInventory.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(par2); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (par2 < this.parachestInventory.getSizeInventory()) + { + if (!this.mergeItemStack(itemstack1, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(itemstack1, 0, this.parachestInventory.getSizeInventory(), false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + } + + return itemstack; + } + + /** + * Callback for when the crafting gui is closed. + */ + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + this.parachestInventory.closeInventory(entityPlayer); + } + + /** + * Return this chest container's lower chest inventory. + */ + public IInventory getparachestInventory() + { + return this.parachestInventory; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRefinery.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRefinery.java new file mode 100644 index 00000000..5d1894c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRefinery.java @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class ContainerRefinery extends Container +{ + + private final TileEntityRefinery tileEntity; + + public ContainerRefinery(InventoryPlayer par1InventoryPlayer, TileEntityRefinery tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 38, 51, IItemElectric.class)); + + // To be smelted + this.addSlotToContainer(new Slot(tileEntity, 1, 7, 7)); + + // Smelting result + this.addSlotToContainer(new Slot(tileEntity, 2, 153, 7)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 104 + var3 * 18 - 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 144)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < 3) + { + if (!this.mergeItemStack(var4, 3, 39, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 2) + { + slot.onSlotChange(var4, var2); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (FluidUtil.isOilContainerAny(var4)) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (FluidUtil.isPartialContainer(var4, GCItems.fuelCanister)) + { + if (!this.mergeItemStack(var4, 2, 3, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 30) + { + if (!this.mergeItemStack(var4, 30, 39, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 3, 30, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.getCount() == 0) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRocketInventory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRocketInventory.java new file mode 100644 index 00000000..ea4232ab --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerRocketInventory.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; + +public class ContainerRocketInventory extends Container +{ + + private final IInventory lowerChestInventory; + private final IInventory spaceshipInv; + private final EnumRocketType rocketType; + + public ContainerRocketInventory(IInventory par1IInventory, IInventory par2IInventory, EnumRocketType rocketType, EntityPlayer player) + { + this.lowerChestInventory = par1IInventory; + this.spaceshipInv = par2IInventory; + this.rocketType = rocketType; + par2IInventory.openInventory(player); + + switch (rocketType.getInventorySpace() - 2) + { + case 0: + this.addSlotsNoInventory(); + break; + case 18: + this.addSlotsWithInventory(rocketType.getInventorySpace()); + break; + case 36: + this.addSlotsWithInventory(rocketType.getInventorySpace()); + break; + case 54: + this.addSlotsWithInventory(rocketType.getInventorySpace()); + break; + } + } + + private void addSlotsNoInventory() + { + int var4; + int var5; + + for (var4 = 0; var4 < 3; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var5 + (var4 + 1) * 9, 8 + var5 * 18, 84 + var4 * 18 - 34)); + } + } + + for (var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var4, 8 + var4 * 18, 142 - 34)); + } + } + + private void addSlotsWithInventory(int slotCount) + { + int var4; + int var5; + int lastRow = slotCount / 9; + int ySize = 145 + (this.rocketType.getInventorySpace() - 2) * 2; + + for (var4 = 0; var4 < lastRow; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.spaceshipInv, var5 + var4 * 9, 8 + var5 * 18, 50 + var4 * 18)); + } + } + + for (var4 = 0; var4 < 3; ++var4) + { + for (var5 = 0; var5 < 9; ++var5) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var5 + var4 * 9 + 9, 8 + var5 * 18, ySize - 82 + var4 * 18)); + } + } + + for (var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(this.lowerChestInventory, var4, 8 + var4 * 18, ySize - 24)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.spaceshipInv.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot var4 = this.inventorySlots.get(par2); + final int b = this.inventorySlots.size() - 36; + + if (var4 != null && var4.getHasStack()) + { + final ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 < b) + { + if (!this.mergeItemStack(var5, b, b + 36, true)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 0, b, false)) + { + return ItemStack.EMPTY; + } + + if (var5.getCount() == 0) + { + var4.putStack(ItemStack.EMPTY); + } else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + /** + * Callback for when the crafting gui is closed. + */ + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + this.lowerChestInventory.closeInventory(entityPlayer); + } + + /** + * Return this chest container's lower chest inventory. + */ + public IInventory getLowerChestInventory() + { + return this.lowerChestInventory; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematic.java new file mode 100644 index 00000000..abccb061 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematic.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicItem; + +public class ContainerSchematic extends Container +{ + + public InventorySchematic craftMatrix = new InventorySchematic(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematic(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotSpecific(this.craftMatrix, 0, 80, 1, ISchematicItem.class)); + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 111 + var6 * 18 - 59 + 16)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 169 - 59 + 16)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 0; var2 < 1; ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot var4 = (Slot) this.inventorySlots.get(par2); + + if (var4 != null && var4.getHasStack()) + { + final ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 < 1) + { + if (!this.mergeItemStack(var5, 1, this.inventorySlots.size(), true)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 0, 1, false)) + { + return ItemStack.EMPTY; + } + + if (var5.getCount() == 0) + { + var4.putStack(ItemStack.EMPTY); + } else + { + var4.onSlotChanged(); + } + } + + return var3; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematicTier1Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematicTier1Rocket.java new file mode 100644 index 00000000..fca16dfe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSchematicTier1Rocket.java @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class ContainerSchematicTier1Rocket extends Container +{ + + public InventoryRocketBench craftMatrix = new InventoryRocketBench(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicTier1Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + final int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 69 + change)); + int var6; + int var7; + + // Cone + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 1, 48, -8 + change, pos, par1InventoryPlayer.player)); + + // Body + for (var6 = 0; var6 < 4; ++var6) + { + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 2 + var6, 39, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Body Right + for (var6 = 0; var6 < 4; ++var6) + { + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 6 + var6, 57, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Left fins + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 10, 21, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 11, 21, 82 + change, pos, par1InventoryPlayer.player)); + + // Engine + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 12, 48, 82 + change, pos, par1InventoryPlayer.player)); + + // Right fins + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 13, 75, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 14, 75, 82 + change, pos, par1InventoryPlayer.player)); + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotRocketBench(this.craftMatrix, 15 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 111 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < 18; ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtil.findMatchingSpaceshipRecipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = (Slot) this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + if (par1 <= 17) + { + if (!this.mergeItemStack(var4, 18, 54, false)) + { + return ItemStack.EMPTY; + } + + if (par1 == 0) + { + var3.onSlotChange(var4, var2); + } + } else if (var2.getItem() == GCItems.partNoseCone) + { + if (!this.mergeOneItem(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == GCItems.heavyPlatingTier1) + { + if (!this.mergeOneItem(var4, 2, 10, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == GCItems.partFins) + { + if (!this.mergeOneItem(var4, 10, 12, false) && !this.mergeOneItem(var4, 13, 15, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == GCItems.rocketEngine) + { + if (!this.mergeOneItem(var4, 12, 13, false)) + { + return ItemStack.EMPTY; + } + } else + { + boolean foundChest = false; + for (ItemStack woodChest : OreDictionary.getOres("chestWood")) + { + if (var2.getItem() == woodChest.getItem()) + { + foundChest = true; + break; + } + } + if (foundChest) + { + if (!this.mergeOneItem(var4, 15, 18, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 18 && par1 < 45) + { + if (!this.mergeItemStack(var4, 45, 54, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 45 && par1 < 54) + { + if (!this.mergeItemStack(var4, 18, 45, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.getCount() == 0) + { + if (par1 == 0) + { + var3.onTake(entityPlayer, var4); + } + var3.putStack(ItemStack.EMPTY); + return var2; + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + if (par1 == 0) + { + var3.onSlotChanged(); + } + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (par1ItemStack.getCount() > 0) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSolar.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSolar.java new file mode 100644 index 00000000..017ed8d7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/ContainerSolar.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; + +public class ContainerSolar extends Container +{ + + private TileEntitySolar tileEntity; + + public ContainerSolar(InventoryPlayer par1InventoryPlayer, TileEntitySolar solarGen) + { + this.tileEntity = solarGen; + this.addSlotToContainer(new SlotSpecific(solarGen, 0, 152, 83, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 51 + 68 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 61 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventoryDefaults.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventoryDefaults.java new file mode 100644 index 00000000..53338b96 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventoryDefaults.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +/* + * IInventory providing defaults for the eight methods + * which we normally don't use in tiles and entities. + * + * (It's not necessary to use the fields system where + * we use a Container for the inventory.) + * + * Override .hasCustomName() if true is required. + */ +public interface IInventoryDefaults extends ISidedInventory +{ + + // We don't use these because we use forge containers + @Override + public default void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public default void closeInventory(EntityPlayer player) + { + } + + @Override + public default int getField(int id) + { + return 0; + } + + @Override + public default void setField(int id, int value) + { + } + + @Override + public default int getFieldCount() + { + return 0; + } + + @Override + public default void clear() + { + + } + + /** + * Override this and return true IF the inventory .getName() is ALREADY a + * localized name e.g. by GCCoreUtil.translate() + * + **/ + @Override + public default boolean hasCustomName() + { + return false; + } + + @Override + public default ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventorySettable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventorySettable.java new file mode 100644 index 00000000..396b412a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/IInventorySettable.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; + +public interface IInventorySettable extends IInventory +{ + + void setSizeInventory(int size); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryBuggyBench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryBuggyBench.java new file mode 100644 index 00000000..3fe56d0f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryBuggyBench.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventoryBuggyBench implements IInventory +{ + + private final NonNullList stackList; + private final int inventoryWidth; + private final Container eventHandler; + + public InventoryBuggyBench(Container par1Container) + { + final int size = 32; + this.stackList = NonNullList.withSize(size, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stackList.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stackList.get(par1); + } + + public ItemStack getStackInRowAndColumn(int par1, int par2) + { + if (par1 >= 0 && par1 < this.inventoryWidth) + { + final int var3 = par1 + par2 * this.inventoryWidth; + return this.getStackInSlot(var3); + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stackList, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stackList, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stackList.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public void openInventory(EntityPlayer player) + { + } + + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stackList) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryExtended.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryExtended.java new file mode 100644 index 00000000..bd364b27 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryExtended.java @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; + +import micdoodle8.mods.galacticraft.api.inventory.IInventoryGC; + +public class InventoryExtended implements IInventoryGC +{ + + public NonNullList stacks = NonNullList.withSize(11, ItemStack.EMPTY); + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + @Nonnull + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public String getName() + { + return "Galacticraft Player Inventory"; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return true; + } + + @Override + public void openInventory(EntityPlayer player) + { + + } + + @Override + public void closeInventory(EntityPlayer player) + { + + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public void dropExtendedItems(EntityPlayer player) + { + for (int i = 0; i < this.stacks.size(); i++) + { + ItemStack stack = this.stacks.get(i); + + if (!stack.isEmpty()) + { + player.dropItem(stack, true); + } + + this.stacks.set(i, ItemStack.EMPTY); + } + } + + // Backwards compatibility for old inventory + public void readFromNBTOld(NBTTagList par1NBTTagList) + { + this.stacks = NonNullList.withSize(11, ItemStack.EMPTY); + + for (int i = 0; i < par1NBTTagList.tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = par1NBTTagList.getCompoundTagAt(i); + final int j = nbttagcompound.getByte("Slot") & 255; + final ItemStack itemstack = new ItemStack(nbttagcompound); + + if (!itemstack.isEmpty()) + { + if (j >= 200 && j < this.stacks.size() + 200 - 1) + { + this.stacks.set(j - 200, itemstack); + } + } + } + } + + public void readFromNBT(NBTTagList tagList) + { + this.stacks = NonNullList.withSize(11, ItemStack.EMPTY); + + for (int i = 0; i < tagList.tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = tagList.getCompoundTagAt(i); + final int j = nbttagcompound.getByte("Slot") & 255; + final ItemStack itemstack = new ItemStack(nbttagcompound); + + if (!itemstack.isEmpty()) + { + this.stacks.set(j, itemstack); + } + } + } + + public NBTTagList writeToNBT(NBTTagList tagList) + { + NBTTagCompound nbttagcompound; + + for (int i = 0; i < this.stacks.size(); ++i) + { + if (!this.stacks.get(i).isEmpty()) + { + nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) i); + this.stacks.get(i).writeToNBT(nbttagcompound); + tagList.appendTag(nbttagcompound); + } + } + + return tagList; + } + + @Override + public void copyInventory(IInventoryGC par1InventoryPlayer) + { + InventoryExtended toCopy = (InventoryExtended) par1InventoryPlayer; + for (int i = 0; i < this.stacks.size(); ++i) + { + this.stacks.set(i, toCopy.stacks.get(i).copy()); + } + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public ITextComponent getDisplayName() + { + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryRocketBench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryRocketBench.java new file mode 100644 index 00000000..cfa33271 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryRocketBench.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventoryRocketBench implements IInventory +{ + + public NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventoryRocketBench(Container par1Container) + { + final int size = 18; + this.stacks = NonNullList.withSize(size, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + public ItemStack getStackInRowAndColumn(int par1, int par2) + { + if (par1 >= 0 && par1 < this.inventoryWidth) + { + final int var3 = par1 + par2 * this.inventoryWidth; + if (var3 >= 18) + { + return ItemStack.EMPTY; + } + return this.getStackInSlot(var3); + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventorySchematic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventorySchematic.java new file mode 100644 index 00000000..72dd54c8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventorySchematic.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematic implements IInventory +{ + + public NonNullList stacks; + protected final Container eventHandler; + + public InventorySchematic(Container par1Container) + { + this.stacks = NonNullList.withSize(1, ItemStack.EMPTY); + this.eventHandler = par1Container; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryTreasureChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryTreasureChest.java new file mode 100644 index 00000000..799b2789 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/InventoryTreasureChest.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventoryTreasureChest implements IInventory +{ + + private String name; + private IInventory upperChest; + private IInventory lowerChest; + + public InventoryTreasureChest(String name, IInventory upper, IInventory lower) + { + this.name = name; + + if (upper == null) + { + upper = lower; + } + + if (lower == null) + { + lower = upper; + } + + this.upperChest = upper; + this.lowerChest = lower; + } + + @Override + public int getSizeInventory() + { + return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory(); + } + + @Override + public String getName() + { + return this.upperChest.hasCustomName() ? this.upperChest.getName() : (this.lowerChest.hasCustomName() ? this.lowerChest.getName() : this.name); + } + + @Override + public boolean hasCustomName() + { + return this.upperChest.hasCustomName() || this.lowerChest.hasCustomName(); + } + + @Override + public ItemStack getStackInSlot(int p_70301_1_) + { + return p_70301_1_ >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlot(p_70301_1_ - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlot(p_70301_1_); + } + + @Override + public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) + { + return p_70298_1_ >= this.upperChest.getSizeInventory() ? this.lowerChest.decrStackSize(p_70298_1_ - this.upperChest.getSizeInventory(), p_70298_2_) + : this.upperChest.decrStackSize(p_70298_1_, p_70298_2_); + } + + @Override + public ItemStack removeStackFromSlot(int p_70304_1_) + { + return p_70304_1_ >= this.upperChest.getSizeInventory() ? this.lowerChest.removeStackFromSlot(p_70304_1_ - this.upperChest.getSizeInventory()) + : this.upperChest.removeStackFromSlot(p_70304_1_); + } + + @Override + public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) + { + if (p_70299_1_ >= this.upperChest.getSizeInventory()) + { + this.lowerChest.setInventorySlotContents(p_70299_1_ - this.upperChest.getSizeInventory(), p_70299_2_); + } else + { + this.upperChest.setInventorySlotContents(p_70299_1_, p_70299_2_); + } + } + + @Override + public int getInventoryStackLimit() + { + return this.upperChest.getInventoryStackLimit(); + } + + @Override + public void markDirty() + { + this.upperChest.markDirty(); + this.lowerChest.markDirty(); + } + + @Override + public boolean isUsableByPlayer(EntityPlayer p_70300_1_) + { + return this.upperChest.isUsableByPlayer(p_70300_1_) && this.lowerChest.isUsableByPlayer(p_70300_1_); + } + + @Override + public void openInventory(EntityPlayer player) + { + this.upperChest.openInventory(player); + this.lowerChest.openInventory(player); + } + + @Override + public void closeInventory(EntityPlayer player) + { + this.upperChest.closeInventory(player); + this.lowerChest.closeInventory(player); + } + + @Override + public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) + { + return true; + } + + @Override + public void clear() + { + this.upperChest.clear(); + this.lowerChest.clear(); + } + + @Override + public boolean isEmpty() + { + return this.upperChest.isEmpty() && this.lowerChest.isEmpty(); + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/PersistantInventoryCrafting.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/PersistantInventoryCrafting.java new file mode 100644 index 00000000..87fb807c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/PersistantInventoryCrafting.java @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; + +public class PersistantInventoryCrafting extends InventoryCrafting +{ + + public NonNullList stacks; + + private int inventoryWidth; + private int inventoryHeight; + + public Container eventHandler; + + public PersistantInventoryCrafting() + { + super(null, 3, 3); + int k = 9; + this.stacks = NonNullList.withSize(k, ItemStack.EMPTY); + this.inventoryWidth = 3; + this.inventoryHeight = 3; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + @Nonnull + public ItemStack getStackInSlot(int index) + { + return this.stacks.get(index); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + if (this.eventHandler != null) + { + this.eventHandler.onCraftMatrixChanged(this); + } + } + + return itemstack; + } + + @Override + public ItemStack getStackInRowAndColumn(int row, int column) + { + return row >= 0 && row < this.inventoryWidth && column >= 0 && column < this.inventoryHeight ? this.getStackInSlot(row + column * this.inventoryWidth) : ItemStack.EMPTY; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stacks, index); + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + if (this.eventHandler != null) + { + this.eventHandler.onCraftMatrixChanged(this); + } + } + + public void setInventorySlotContentsNoUpdate(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public void openInventory(EntityPlayer player) + { + } + + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public boolean isItemValidForSlot(int par1, ItemStack par2ItemStack) + { + return true; + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public ITextComponent getDisplayName() + { + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotArmorGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotArmorGC.java new file mode 100644 index 00000000..9b017119 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotArmorGC.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SlotArmorGC extends Slot +{ + + private static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[] + {EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; + final int armorType; + final EntityPlayer thePlayer; + + public SlotArmorGC(EntityPlayer thePlayer, IInventory par2IInventory, int par3, int par4, int par5, int par6) + { + super(par2IInventory, par3, par4, par5); + this.thePlayer = thePlayer; + this.armorType = par6; + } + + @Override + public int getSlotStackLimit() + { + return 1; + } + + @Override + public boolean canTakeStack(EntityPlayer playerIn) { + ItemStack item = this.inventory.getStackInSlot(getSlotIndex()); + if(EnchantmentHelper.hasBindingCurse(item)) { + return false; + } + return super.canTakeStack(playerIn); + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + final Item item = par1ItemStack.isEmpty() ? null : par1ItemStack.getItem(); + return item != null && item.isValidArmor(par1ItemStack, VALID_EQUIPMENT_SLOTS[this.armorType], this.thePlayer); + } + + @Override + @SideOnly(Side.CLIENT) + public String getSlotTexture() + { + return ItemArmor.EMPTY_SLOT_NAMES[VALID_EQUIPMENT_SLOTS[this.armorType].getIndex()]; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotBuggyBench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotBuggyBench.java new file mode 100644 index 00000000..a2d8981c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotBuggyBench.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class SlotBuggyBench extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotBuggyBench(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getBuggyBenchRecipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCoalGenerator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCoalGenerator.java new file mode 100644 index 00000000..c3b0bbe7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCoalGenerator.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.util.ItemUtil; + +public class SlotCoalGenerator extends Slot +{ + public SlotCoalGenerator(IInventory inventoryIn, int index, int xPosition, int yPosition) + { + super(inventoryIn, index, xPosition, yPosition); + } + + //@noformat + @Override + public boolean isItemValid(ItemStack stack) + { + return ( + ItemUtil.hasOreDictSuffix(stack, "coal") || + ItemUtil.hasOreDictSuffix(stack, "charcoal") || + stack.getItem() == Items.COAL + ) && stack.getItem() != Item.getItemFromBlock(Blocks.COAL_ORE); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCompressor.java new file mode 100644 index 00000000..447106f5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCompressor.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; + +public class SlotCompressor extends Slot +{ + + public SlotCompressor(IInventory par1iInventory, int par2, int par3, int par4) + { + super(par1iInventory, par2, par3, par4); + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + return par1ItemStack.getItem() instanceof ItemOxygenTank; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCraftingMemory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCraftingMemory.java new file mode 100644 index 00000000..fa4c7734 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotCraftingMemory.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.SlotCrafting; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; + +public class SlotCraftingMemory extends SlotCrafting +{ + + public TileEntityCrafting tileEntity; + + public SlotCraftingMemory(EntityPlayer player, InventoryCrafting craftingInventory, IInventory p_i45790_3_, int slotIndex, int xPosition, int yPosition, TileEntityCrafting tile) + { + super(player, craftingInventory, p_i45790_3_, slotIndex, xPosition, yPosition); + this.tileEntity = tile; + } + + @Override + public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) + { + if (!stack.isEmpty()) + this.tileEntity.updateMemory(stack); + return super.onTake(thePlayer, stack); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotExtendedInventory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotExtendedInventory.java new file mode 100644 index 00000000..8c2e0fe4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotExtendedInventory.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; + +public class SlotExtendedInventory extends Slot +{ + + public SlotExtendedInventory(IInventory par2IInventory, int par3, int par4, int par5) + { + super(par2IInventory, par3, par4, par5); + } + + @Override + public int getSlotStackLimit() + { + return 1; + } + + @Override + public boolean isItemValid(ItemStack itemstack) + { + int gearID = GalacticraftRegistry.findMatchingGearID(itemstack, getTypeFromSlot()); + + if (gearID >= 0) + { + return true; + } + + return false; + } + + private EnumExtendedInventorySlot getTypeFromSlot() + { + switch (this.getSlotIndex()) + { + case 0: + return EnumExtendedInventorySlot.MASK; + case 1: + return EnumExtendedInventorySlot.GEAR; + case 2: + return EnumExtendedInventorySlot.LEFT_TANK; + case 3: + return EnumExtendedInventorySlot.RIGHT_TANK; + case 4: + return EnumExtendedInventorySlot.PARACHUTE; + case 5: + return EnumExtendedInventorySlot.FREQUENCY_MODULE; + case 6: + return EnumExtendedInventorySlot.THERMAL_HELMET; + case 7: + return EnumExtendedInventorySlot.THERMAL_CHESTPLATE; + case 8: + return EnumExtendedInventorySlot.THERMAL_LEGGINGS; + case 9: + return EnumExtendedInventorySlot.THERMAL_BOOTS; + case 10: + return EnumExtendedInventorySlot.SHIELD_CONTROLLER; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotFuelCanister.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotFuelCanister.java new file mode 100644 index 00000000..de952a8f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotFuelCanister.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.items.ItemFuelCanister; + +public class SlotFuelCanister extends Slot +{ + + public SlotFuelCanister(IInventory par1iInventory, int par2, int par3, int par4) + { + super(par1iInventory, par2, par3, par4); + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + return par1ItemStack.getItem() instanceof ItemFuelCanister && par1ItemStack.getItemDamage() > 0; + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRefinery.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRefinery.java new file mode 100644 index 00000000..26bd6338 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRefinery.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class SlotRefinery extends Slot +{ + + public SlotRefinery(IInventory par1iInventory, int par2, int par3, int par4) + { + super(par1iInventory, par2, par3, par4); + } + + @Override + public boolean isItemValid(ItemStack stack) + { + return FluidUtil.isOilContainerAny(stack); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBench.java new file mode 100644 index 00000000..66125c51 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBench.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class SlotRocketBench extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotRocketBench(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getRocketT1Recipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBenchResult.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBenchResult.java new file mode 100644 index 00000000..06ed6e96 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotRocketBenchResult.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class SlotRocketBenchResult extends Slot +{ + + private final IInventory craftMatrix; + private final EntityPlayer thePlayer; + + public SlotRocketBenchResult(EntityPlayer entityPlayer, IInventory par2IInventory, IInventory par3IInventory, int par4, int par5, int par6) + { + super(par3IInventory, par4, par5, par6); + this.thePlayer = entityPlayer; + this.craftMatrix = par2IInventory; + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + return false; + } + + @Override + public ItemStack onTake(EntityPlayer entityPlayer, ItemStack stack) + { + for (int var2 = 0; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.getStackInSlot(var2); + + if (!var3.isEmpty()) + { + this.craftMatrix.decrStackSize(var2, 1); + + if (var3.getItem().hasContainerItem(var3)) + { + final ItemStack var4 = new ItemStack(var3.getItem().getContainerItem()); + + if (!this.thePlayer.inventory.addItemStackToInventory(var4)) + { + if (this.craftMatrix.getStackInSlot(var2).isEmpty()) + { + this.craftMatrix.setInventorySlotContents(var2, var4); + } else + { + this.thePlayer.entityDropItem(var4, 0.0F); + } + } + } + } + } + + return stack; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotSpecific.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotSpecific.java new file mode 100644 index 00000000..97f1e5d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotSpecific.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import java.util.ArrayList; +import java.util.Arrays; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; + +/** + * Creates a slot with a specific amount of items that matches the slot's + * requirements. Allows easy shift right clicking management and slot blocking + * in classes. In your container you can use this.getSlot(i).isItemValid to + * justify the player's shift clicking actions to match the slot. + * + * @author Calclavia + */ +public class SlotSpecific extends Slot +{ + + public ItemStack[] validItemStacks = new ItemStack[0]; + public Class[] validClasses = new Class[0]; + + public boolean isInverted = false; + public boolean isMetadataSensitive = false; + + public SlotSpecific(IInventory inventory, int par3, int par4, int par5, ItemStack... itemStacks) + { + super(inventory, par3, par4, par5); + this.setItemStacks(itemStacks); + } + + @SafeVarargs + public SlotSpecific(IInventory inventory, int par3, int par4, int par5, Class... validClasses) + { + super(inventory, par3, par4, par5); + if (validClasses != null && Arrays.asList(validClasses).contains(IItemElectric.class)) + { + try + { + if (EnergyConfigHandler.isRFAPILoaded()) + { + ArrayList> existing = new ArrayList<>(Arrays.asList(validClasses)); + existing.add(cofh.redstoneflux.api.IEnergyContainerItem.class); + validClasses = existing.toArray(new Class[existing.size()]); + } + if (EnergyConfigHandler.isIndustrialCraft2Loaded()) + { + ArrayList> existing = new ArrayList<>(Arrays.asList(validClasses)); + existing.add(ic2.api.item.IElectricItem.class); + existing.add(ic2.api.item.ISpecialElectricItem.class); + validClasses = existing.toArray(new Class[existing.size()]); + } + if (EnergyConfigHandler.isMekanismLoaded()) + { + ArrayList> existing = new ArrayList<>(Arrays.asList(validClasses)); + existing.add(mekanism.api.energy.IEnergizedItem.class); + validClasses = existing.toArray(new Class[existing.size()]); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + this.validClasses = validClasses; + } + + public SlotSpecific setMetadataSensitive() + { + this.isMetadataSensitive = true; + return this; + } + + public SlotSpecific setItemStacks(ItemStack... validItemStacks) + { + this.validItemStacks = validItemStacks; + return this; + } + + public SlotSpecific toggleInverted() + { + this.isInverted = !this.isInverted; + return this; + } + + /** + * Check if the stack is a valid item for this slot. Always true beside for + * the armor slots. + */ + @Override + public boolean isItemValid(ItemStack compareStack) + { + boolean returnValue = false; + + for (ItemStack itemStack : this.validItemStacks) + { + if (compareStack.isItemEqual(itemStack) || !this.isMetadataSensitive && compareStack.getItem() == itemStack.getItem()) + { + returnValue = true; + break; + } + } + + if (!returnValue) + { + for (Class clazz : this.validClasses) + { + if (clazz.isInstance(compareStack.getItem())) + { + returnValue = true; + break; + } + } + } + + if (this.isInverted) + { + return !returnValue; + } + + return returnValue; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotTankRefill.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotTankRefill.java new file mode 100644 index 00000000..98271fb9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/inventory/SlotTankRefill.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.inventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; + +public class SlotTankRefill extends Slot +{ + + public SlotTankRefill(IInventory par3IInventory, int par4, int par5, int par6) + { + super(par3IInventory, par4, par5, par6); + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (this.slotNumber == 49) + { + return par1ItemStack.getItem() instanceof ItemParaChute; + } + + return OxygenUtil.isItemValidForPlayerTankInv(this.slotNumber - 45, par1ItemStack); + } + + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IClickableItem.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IClickableItem.java new file mode 100644 index 00000000..a8719ec9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IClickableItem.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface IClickableItem +{ + + /** + * Use to replicate ItemStack version of onItemRightClick as in MC1.10 + */ + ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IShiftDescription.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IShiftDescription.java new file mode 100644 index 00000000..d2ba03d3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/IShiftDescription.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +public interface IShiftDescription +{ + + String getShiftDescription(int meta); + + boolean showDescription(int meta); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ISortableItem.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ISortableItem.java new file mode 100644 index 00000000..8a16202f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ISortableItem.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public interface ISortableItem +{ + + EnumSortCategoryItem getCategory(int meta); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemArmorGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemArmorGC.java new file mode 100644 index 00000000..b4f36177 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemArmorGC.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemArmorGC extends ItemArmor implements ISortableItem, GCRarity +{ + + public ItemArmorGC(EntityEquipmentSlot armorIndex, String assetSuffix) + { + super(GCItems.ARMOR_STEEL, 0, armorIndex); + this.setTranslationKey("steel_" + assetSuffix); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) + { + if (this.getArmorMaterial() == GCItems.ARMOR_STEEL) + { + if (stack.getItem() == GCItems.steelHelmet) + { + return Constants.TEXTURE_PREFIX + "textures/model/armor/steel_1.png"; + } else if (stack.getItem() == GCItems.steelChestplate || stack.getItem() == GCItems.steelBoots) + { + return Constants.TEXTURE_PREFIX + "textures/model/armor/steel_2.png"; + } else if (stack.getItem() == GCItems.steelLeggings) + { + return Constants.TEXTURE_PREFIX + "textures/model/armor/steel_3.png"; + } + } + + return null; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return repair.getItem() == GCItems.basicItem && repair.getItemDamage() == 9; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemAxeGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemAxeGC.java new file mode 100644 index 00000000..427c1307 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemAxeGC.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +import com.google.common.collect.Sets; + +public class ItemAxeGC extends ItemTool implements ISortableItem, GCRarity +{ + + private static final Set EFFECTIVE_ON = Sets.newHashSet(new Block[] + {Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER, Blocks.WOODEN_BUTTON, + Blocks.WOODEN_PRESSURE_PLATE}); + + public ItemAxeGC(String assetName) + { + super(GCItems.TOOL_STEEL, EFFECTIVE_ON); + this.setTranslationKey(assetName); + this.attackDamage = 6.0F; + this.attackSpeed = -3.0F; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Material material = state.getMaterial(); + return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getDestroySpeed(stack, state) : this.efficiency; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBase.java new file mode 100644 index 00000000..a8c68c1b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBase.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBase extends Item implements ISortableItem, GCRarity +{ + + float smeltingXP = -1F; + + public ItemBase(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack != null && this == GCItems.heavyPlatingTier1) + { + tooltip.add(GCCoreUtil.translate("item.tier1.desc")); + } else if (par1ItemStack != null && this == GCItems.dungeonFinder) + { + tooltip.add(EnumColor.RED + GCCoreUtil.translate("gui.creative_only.desc")); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } + + public Item setSmeltingXP(float f) + { + this.smeltingXP = f; + return this; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + return this.smeltingXP; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBasic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBasic.java new file mode 100644 index 00000000..11d2d1c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBasic.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBasic extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"solar_module_0", "solar_module_1", "raw_silicon", "ingot_copper", "ingot_tin", "ingot_aluminum", "compressed_copper", "compressed_tin", "compressed_aluminum", "compressed_steel", + "compressed_bronze", "compressed_iron", "wafer_solar", "wafer_basic", "wafer_advanced", "dehydrated_apple", "dehydrated_carrot", "dehydrated_melon", "dehydrated_potato", + "frequency_module", "ambient_thermal_controller"}; + public static final int WAFER_BASIC = 13; + public static final int WAFER_ADVANCED = 14; + + public ItemBasic(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getItemDamage() > 14 && itemStack.getItemDamage() < 19) + { + return this.getTranslationKey() + ".canned_food"; + } + + return this.getTranslationKey() + "." + ItemBasic.names[itemStack.getItemDamage()]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 15; i++) + { + list.add(new ItemStack(this, 1, i)); + } + for (int i = 19; i < ItemBasic.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getItemDamage() > 14 && par1ItemStack.getItemDamage() < 19) + { + tooltip.add(EnumColor.BRIGHT_GREEN + GCCoreUtil.translate(this.getTranslationKey() + "." + ItemBasic.names[par1ItemStack.getItemDamage()] + ".name")); + } else if (par1ItemStack.getItemDamage() == 19) + { + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate("gui.frequency_module.desc.0")); + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate("gui.frequency_module.desc.1")); + } + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + ItemStack itemStackIn = playerIn.getHeldItem(hand); + if (itemStackIn.getItemDamage() == 19) + { + if (playerIn instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(playerIn); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(5); + + if (gear.isEmpty() && itemStackIn.getTagCompound() == null) + { + stats.getExtendedInventory().setInventorySlotContents(5, itemStackIn.copy()); + itemStackIn = ItemStack.EMPTY; + } + } + } + + return new ActionResult<>(EnumActionResult.FAIL, itemStackIn); + } + + @Override + public boolean onLeftClickEntity(ItemStack itemStack, EntityPlayer player, Entity entity) + { + if (itemStack.getItemDamage() != 19) + { + return false; + } + + // Frequency module + if (!player.world.isRemote && entity != null && !(entity instanceof EntityPlayer)) + { + if (itemStack.getTagCompound() == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + + itemStack.getTagCompound().setLong("linkedUUIDMost", entity.getUniqueID().getMostSignificantBits()); + itemStack.getTagCompound().setLong("linkedUUIDLeast", entity.getUniqueID().getLeastSignificantBits()); + + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.tracking.message"))); + return true; + } + return false; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 3: + case 4: + case 5: + return EnumSortCategoryItem.INGOT; + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + return EnumSortCategoryItem.PLATE; + case 19: + return EnumSortCategoryItem.GEAR; + } + return EnumSortCategoryItem.GENERAL; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + switch (item.getItemDamage()) + { + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + return 1F; + } + return -1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBattery.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBattery.java new file mode 100644 index 00000000..29591a87 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBattery.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemBattery extends ItemElectricBase implements ISortableItem, GCRarity +{ + + public ItemBattery(String assetName) + { + super(); + this.setMaxStackSize(4); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public float getMaxElectricityStored(ItemStack itemStack) + { + return 15000; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } + + @Override + public int getItemStackLimit(ItemStack stack) + { + if (stack.getItemDamage() < 100 || stack.hasTagCompound() && stack.getTagCompound().hasKey("electricity")) + { + return 1; + } + return this.getItemStackLimit(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBatteryInfinite.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBatteryInfinite.java new file mode 100644 index 00000000..66c31f9b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBatteryInfinite.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBatteryInfinite extends ItemElectricBase implements ISortableItem, GCRarity +{ + + public ItemBatteryInfinite(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public boolean hasEffect(ItemStack stack) + { + return true; + } + + @Override + protected void setMaxTransfer() + { + this.transferMax = 1000; + } + + @Override + public int getTierGC(ItemStack itemStack) + { + return 3; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.infinite_item.desc")); + tooltip.add(EnumColor.RED + GCCoreUtil.translate("gui.creative_only.desc")); + } + + @Override + public float getElectricityStored(ItemStack itemStack) + { + return this.getMaxElectricityStored(itemStack); + } + + @Override + public void setElectricity(ItemStack itemStack, float joules) + { + } + + @Override + public float getMaxElectricityStored(ItemStack itemStack) + { + return Float.POSITIVE_INFINITY; + } + + @Override + public float getTransfer(ItemStack itemStack) + { + return 0.0F; + } + + @Override + public float recharge(ItemStack theItem, float energy, boolean doReceive) + { + return 0F; + } + + @Override + public float discharge(ItemStack theItem, float energy, boolean doTransfer) + { + return energy; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAirLock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAirLock.java new file mode 100644 index 00000000..82b4e890 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAirLock.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockAirLock extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockAirLock(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = ""; + + switch (itemstack.getItemDamage()) + { + case 0: + { + name = "air_lock_frame"; + break; + } + case 1: + { + name = "air_lock_controller"; + break; + } + default: + name = "null"; + } + + return "tile" + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAluminumWire.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAluminumWire.java new file mode 100644 index 00000000..144900c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockAluminumWire.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockAluminumWire; + +public class ItemBlockAluminumWire extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockAluminumWire(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockAluminumWire.EnumWireType.values()[itemstack.getItemDamage()].getName(); + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockArclamp.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockArclamp.java new file mode 100644 index 00000000..a5d2e916 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockArclamp.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockArclamp extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockArclamp(Block b) + { + super(b); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockBase.java new file mode 100644 index 00000000..56436779 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockBase.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasic; + +public class ItemBlockBase extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockBase(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockBasic.EnumBlockBasic.values()[Math.min(Math.max(itemstack.getItemDamage() - 3, 0), 10)].getName(); + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCargoLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCargoLoader.java new file mode 100644 index 00000000..04771f74 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCargoLoader.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockCargoLoader extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockCargoLoader(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + String name = ""; + + if (par1ItemStack.getItemDamage() < 4) + { + name = "loader"; + } else + { + name = "unloader"; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCheese.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCheese.java new file mode 100644 index 00000000..9ee1e8a1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCheese.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +public class ItemBlockCheese extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockCheese(Block par2Block) + { + super(par2Block); + this.setMaxStackSize(1); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCreativeGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCreativeGC.java new file mode 100644 index 00000000..f9a5cb47 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockCreativeGC.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBlockCreativeGC extends ItemBlock implements GCRarity +{ + + public ItemBlockCreativeGC(Block block) + { + super(block); + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(EnumColor.RED + GCCoreUtil.translate("gui.creative_only.desc")); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDesc.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDesc.java new file mode 100644 index 00000000..28fe8257 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDesc.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvancedTile; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBlockDesc extends ItemBlockGC +{ + + public ItemBlockDesc(Block block) + { + super(block); + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) + { + if (!world.isRemote) + { + return; + } + + // The player could be a FakePlayer made by another mod e.g. + // LogisticsPipes + if (player instanceof EntityPlayerSP) + { + if (this.getBlock() == GCBlocks.fuelLoader) + { + ClientProxyCore.playerClientHandler.onBuild(4, (EntityPlayerSP) player); + } else if (this.getBlock() == GCBlocks.fuelLoader) + { + ClientProxyCore.playerClientHandler.onBuild(6, (EntityPlayerSP) player); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List info, ITooltipFlag flagIn) + { + if (this.getBlock() instanceof IShiftDescription && ((IShiftDescription) this.getBlock()).showDescription(stack.getItemDamage())) + { + if (ClientUtil.isKeyPressed(Minecraft.getMinecraft().gameSettings.keyBindSneak)) + { + info.addAll(FMLClientHandler.instance().getClient().fontRenderer.listFormattedStringToWidth(((IShiftDescription) this.getBlock()).getShiftDescription(stack.getItemDamage()), 150)); + } else + { + if (this.getBlock() instanceof BlockTileGC) + { + TileEntity te = ((BlockTileGC) this.getBlock()).createTileEntity(null, getBlock().getStateFromMeta(stack.getItemDamage() & 12)); + if (te instanceof TileBaseElectricBlock) + { + float powerDrawn = ((TileBaseElectricBlock) te).storage.getMaxExtract(); + if (powerDrawn > 0) + { + info.add(TextFormatting.GREEN + GCCoreUtil.translateWithFormat("item_desc.powerdraw.name", EnergyDisplayHelper.getEnergyDisplayS(powerDrawn * 20))); + } + } + } else if (this.getBlock() instanceof BlockAdvancedTile) + { + TileEntity te = ((BlockAdvancedTile) this.getBlock()).createTileEntity(worldIn, getBlock().getStateFromMeta(stack.getItemDamage() & 12)); + if (te instanceof TileBaseElectricBlock) + { + float powerDrawn = ((TileBaseElectricBlock) te).storage.getMaxExtract(); + if (powerDrawn > 0) + { + info.add(TextFormatting.GREEN + GCCoreUtil.translateWithFormat("item_desc.powerdraw.name", EnergyDisplayHelper.getEnergyDisplayS(powerDrawn * 20))); + } + } + } + info.add(GCCoreUtil.translateWithFormat("item_desc.shift.name", GameSettings.getKeyDisplayString(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode()))); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDummy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDummy.java new file mode 100644 index 00000000..fb779a8f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockDummy.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockDummy extends ItemBlock implements GCRarity +{ + + public ItemBlockDummy(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int metadata = itemstack.getItemDamage(); + String blockName = ""; + + switch (metadata) + { + case 1: + blockName = "spaceStationBase"; + break; + case 2: + blockName = "launchPad"; + break; + case 3: + blockName = "nasaWorkbench"; + break; + case 4: + blockName = "solar"; + break; + case 5: + blockName = "cryogenicChamber"; + break; + default: + blockName = null; + break; + } + + return this.getBlock().getTranslationKey() + "." + blockName; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEmergencyBox.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEmergencyBox.java new file mode 100644 index 00000000..20cbf614 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEmergencyBox.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockEmergencyBox extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockEmergencyBox(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (par1ItemStack.getItemDamage() == 1) + { + return this.getBlock().getTranslationKey() + ".filled"; + } + + return this.getBlock().getTranslationKey(); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEnclosed.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEnclosed.java new file mode 100644 index 00000000..bd8ea05a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockEnclosed.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.lang.reflect.Method; + +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed.EnumEnclosedBlockType; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; + +import appeng.api.AEApi; +import appeng.api.util.AEColor; + +public class ItemBlockEnclosed extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockEnclosed(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + String name; + + try + { + name = BlockEnclosed.EnumEnclosedBlockType.byMetadata(par1ItemStack.getItemDamage()).getName(); + name = name.substring(9, name.length()); // Remove "enclosed_" + } catch (Exception e) + { + name = "null"; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = playerIn.getHeldItem(hand); + int metadata = this.getMetadata(itemstack.getItemDamage()); + if (metadata == EnumEnclosedBlockType.ME_CABLE.getMeta() && CompatibilityManager.isAppEngLoaded()) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + BlockPos origPos = pos; + + if (!block.isReplaceable(worldIn, pos)) + { + pos = pos.offset(side); + } + + if (itemstack.getCount() == 0) + { + return EnumActionResult.FAIL; + } else if (!playerIn.canPlayerEdit(pos, side, itemstack)) + { + return EnumActionResult.FAIL; + } else if (worldIn.mayPlace(this.block, pos, false, side, null)) + { + int i = this.getMetadata(itemstack.getMetadata()); + IBlockState iblockstate1 = this.block.getStateForPlacement(worldIn, pos, side, hitX, hitY, hitZ, i, playerIn); + + if (placeBlockAt(itemstack, playerIn, worldIn, pos, side, hitX, hitY, hitZ, iblockstate1)) + { + SoundType soundType = this.getBlock().getSoundType(iblockstate, worldIn, pos, playerIn); + worldIn.playSound(playerIn, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, soundType.getPlaceSound(), SoundCategory.BLOCKS, (soundType.getVolume() + 1.0F) / 2.0F, + soundType.getPitch() * 0.8F); + itemstack.shrink(1); + + ItemStack itemME = AEApi.instance().definitions().parts().cableGlass().stack(AEColor.TRANSPARENT, 1); + itemME.setCount(2); // Fool AppEng into not destroying + // anything in the player inventory + AEApi.instance().partHelper().placeBus(itemME, origPos, side, playerIn, hand, worldIn); + // Emulate appeng.parts.PartPlacement.place( is, pos, side, + // player, w, PartPlacement.PlaceType.INTERACT_SECOND_PASS, + // 0 ); + try + { + Class clazzpp = Class.forName("appeng.parts.PartPlacement"); + Class enumPlaceType = Class.forName("appeng.parts.PartPlacement$PlaceType"); + Method methPl = clazzpp.getMethod("place", ItemStack.class, BlockPos.class, EnumFacing.class, EntityPlayer.class, EnumHand.class, World.class, enumPlaceType, int.class); + methPl.invoke(null, itemME, origPos, side, playerIn, hand, worldIn, enumPlaceType.getEnumConstants()[2], 0); + } catch (Exception e) + { + e.printStackTrace(); + } + } + return EnumActionResult.SUCCESS; + } else + { + return EnumActionResult.FAIL; + } + } else + { + return super.onItemUse(playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); + } + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGC.java new file mode 100644 index 00000000..02c17ffa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGC.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockGC extends ItemBlock implements GCRarity +{ + + public ItemBlockGC(Block block) + { + super(block); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGlassGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGlassGC.java new file mode 100644 index 00000000..5c9ebc25 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockGlassGC.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockGlassGC extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockGlassGC(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) + { + if (!world.setBlockState(pos, newState, 3)) + return false; + + IBlockState state = world.getBlockState(pos); + if (state.getBlock().getClass() == this.block.getClass()) + { + setTileEntityNBT(world, player, pos, stack); + this.block.onBlockPlacedBy(world, pos, state, player, stack); + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockLandingPad.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockLandingPad.java new file mode 100644 index 00000000..5f68248d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockLandingPad.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; + +public class ItemBlockLandingPad extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockLandingPad(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + String name = ""; + + switch (par1ItemStack.getItemDamage()) + { + case 0: + name = "landing_pad"; + break; + case 1: + name = "buggy_fueler"; + break; + case 2: + name = "cargo_pad"; + break; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) + { + if (world.isRemote && stack.getItemDamage() == 0 && player instanceof EntityPlayerSP) + { + ClientProxyCore.playerClientHandler.onBuild(5, (EntityPlayerSP) player); + } + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMachine.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMachine.java new file mode 100644 index 00000000..458623da --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMachine.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; + +public class ItemBlockMachine extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockMachine(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int index = 0; + int typenum = itemstack.getItemDamage() & 12; + + if (this.getBlock() instanceof BlockMachineBase) + { + return ((BlockMachineBase) this.getBlock()).getTranslationKey(typenum); + } + return "tile.machine.0"; + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) + { + if (!world.isRemote) + { + return; + } + + int typenum = stack.getItemDamage() & 12; + + // The player could be a FakePlayer made by another mod e.g. + // LogisticsPipes + if (player instanceof EntityPlayerSP) + { + if (this.getBlock() == GCBlocks.machineBase && typenum == BlockMachine.EnumMachineType.COMPRESSOR.getMetadata()) + { + ClientProxyCore.playerClientHandler.onBuild(1, (EntityPlayerSP) player); + } else if (this.getBlock() == GCBlocks.machineBase2 && typenum == BlockMachine2.EnumMachineExtendedType.CIRCUIT_FABRICATOR.getMetadata()) + { + ClientProxyCore.playerClientHandler.onBuild(2, (EntityPlayerSP) player); + } + } + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMoon.java new file mode 100644 index 00000000..ade2c94d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockMoon.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockMoon extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockMoon(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name; + + switch (itemstack.getItemDamage()) + { + case 0: + { + name = "coppermoon"; + break; + } + case 1: + { + name = "tinmoon"; + break; + } + case 2: + { + name = "cheesestone"; + break; + } + case 3: + { + name = "moondirt"; + break; + } + case 4: + { + name = "moonstone"; + break; + } + case 5: + { + name = "moongrass"; + break; + } + case 6: + { + name = "sapphiremoon"; + break; + } + case 14: + { + name = "bricks"; + break; + } + default: + name = "null"; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockNasaWorkbench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockNasaWorkbench.java new file mode 100644 index 00000000..669a2865 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockNasaWorkbench.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBlockNasaWorkbench extends ItemBlockDesc +{ + + public ItemBlockNasaWorkbench(Block block) + { + super(block); + } + + @Override + public boolean placeBlockAt(ItemStack itemStack, EntityPlayer player, World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, IBlockState state) + { + for (int x = -1; x < 2; x++) + { + for (int y = 0; y < 4; y++) + { + for (int z = -1; z < 2; z++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + if (Math.abs(x) != 1 || Math.abs(z) != 1) + { + IBlockState stateAt = world.getBlockState(new BlockPos(pos.getX() + x, pos.getY() + y, pos.getZ() + z)); + + if ((y == 0 || y == 3) && x == 0 && z == 0) + { + if (!stateAt.getMaterial().isReplaceable()) + { + if (world.isRemote) + { + FMLClientHandler.instance().getClient().ingameGUI.setOverlayMessage( + new TextComponentString(GCCoreUtil.translate("gui.warning.noroom")).setStyle(new Style().setColor(TextFormatting.RED)).getFormattedText(), false); + } + return false; + } + } else if (y != 0 && y != 3) + { + if (!stateAt.getMaterial().isReplaceable()) + { + if (world.isRemote) + { + FMLClientHandler.instance().getClient().ingameGUI.setOverlayMessage( + new TextComponentString(GCCoreUtil.translate("gui.warning.noroom")).setStyle(new Style().setColor(TextFormatting.RED)).getFormattedText(), false); + } + return false; + } + } + } + } + } + } + } + return super.placeBlockAt(itemStack, player, world, pos, facing, hitX, hitY, hitZ, state); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockOxygenCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockOxygenCompressor.java new file mode 100644 index 00000000..9bffa657 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockOxygenCompressor.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCompressor; + +public class ItemBlockOxygenCompressor extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockOxygenCompressor(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int metadata = 0; + + if (itemstack.getItemDamage() >= BlockOxygenCompressor.OXYGEN_DECOMPRESSOR_METADATA) + { + metadata = 1; + } else if (itemstack.getItemDamage() >= BlockOxygenCompressor.OXYGEN_COMPRESSOR_METADATA) + { + metadata = 0; + } + + return this.getBlock().getTranslationKey() + "." + metadata; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockPanel.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockPanel.java new file mode 100644 index 00000000..23a2c58b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockPanel.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; + +public class ItemBlockPanel extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockPanel(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + String name = ""; + + int meta = par1ItemStack.getItemDamage(); + if (meta >= BlockPanelLighting.PANELTYPES_LENGTH) + { + meta = 0; + } + + return this.getBlock().getTranslationKey() + "_" + meta; + } + + @Override + public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + { + if (!player.isSneaking()) + { + return EnumActionResult.PASS; + } + IBlockState state = world.getBlockState(pos); + if (state.getBlock().isOpaqueCube(state) && !(state.getBlock() instanceof BlockPanelLighting)) + { + ItemStack stack; + if (hand == EnumHand.OFF_HAND) + { + stack = player.inventory.offHandInventory.get(0); + } else + { + stack = player.inventory.getStackInSlot(player.inventory.currentItem); + } + if (stack.getItem() != this) + { + return EnumActionResult.FAIL; + } + if (world.isRemote) + { + BlockPanelLighting.updateClient(stack.getItemDamage(), state); + } else + { + int meta = stack.getItemDamage(); + if (meta >= BlockPanelLighting.PANELTYPES_LENGTH) + meta = 0; + GCPlayerStats stats = GCPlayerStats.get(player); + IBlockState[] panels = stats.getPanelLightingBases(); + panels[meta] = state; + } + } + + return EnumActionResult.PASS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSlabGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSlabGC.java new file mode 100644 index 00000000..15c60688 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSlabGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemSlab; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockDoubleSlabGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockSlabGC; + +public class ItemBlockSlabGC extends ItemSlab implements GCRarity +{ + + public ItemBlockSlabGC(Block block, BlockSlabGC singleSlab, BlockDoubleSlabGC doubleSlab) + { + super(block, singleSlab, doubleSlab); + } + + @Override + public int getMetadata(int meta) + { + return meta & 7; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + BlockSlabGC slab = (BlockSlabGC) Block.getBlockFromItem(itemStack.getItem()); + return super.getTranslationKey() + "." + slab.getTranslationKey(itemStack.getItemDamage()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSolar.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSolar.java new file mode 100644 index 00000000..ef1e2e64 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockSolar.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockSolar; + +public class ItemBlockSolar extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockSolar(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + int index = Math.min(Math.max(par1ItemStack.getItemDamage() / 4, 0), BlockSolar.EnumSolarType.values().length); + + String name = BlockSolar.EnumSolarType.values()[index].getName(); + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public int getMetadata(int damage) + { + return damage; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockThruster.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockThruster.java new file mode 100644 index 00000000..af710479 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockThruster.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockThruster extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockThruster(Block block) + { + super(block); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockWallGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockWallGC.java new file mode 100644 index 00000000..05114141 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBlockWallGC.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemBlockWallGC extends ItemBlock implements GCRarity +{ + + private static final String[] types = new String[] + {"tin", "tin", "moon", "moon_bricks", "mars", "mars_bricks"}; + + public ItemBlockWallGC(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int meta = itemstack.getItemDamage(); + + if (meta < 0 || meta >= types.length) + { + meta = 0; + } + return super.getTranslationKey() + "." + types[meta]; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBucketGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBucketGC.java new file mode 100644 index 00000000..e7c997d3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBucketGC.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.HashMap; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.ItemBucket; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.FluidTankProperties; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.capability.IFluidTankProperties; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class ItemBucketGC extends ItemBucket implements ISortableItem, ICapabilityProvider, GCRarity +{ + + public Fluid accepts; + private static HashMap allFluids = new HashMap<>(); + + public ItemBucketGC(Block block, Fluid fluid) + { + super(block); + this.setContainerItem(Items.BUCKET); + this.accepts = fluid; + allFluids.put(fluid.getName(), this); + } + + public static ItemBucketGC getBucketForFluid(Fluid fluid) + { + return allFluids.get(fluid.getName()); + } + + public static ItemStack fillBucketFrom(IFluidHandler fluidHandler) + { + FluidStack liquid = fluidHandler.drain(Fluid.BUCKET_VOLUME, false); + if (liquid != null && liquid.amount == Fluid.BUCKET_VOLUME) + { + ItemBucketGC test = ItemBucketGC.getBucketForFluid(liquid.getFluid()); + if (test != null) + { + fluidHandler.drain(Fluid.BUCKET_VOLUME, true); + return new ItemStack(test); + } + } + return null; + } + + public ItemStack drainBucketTo(IFluidHandler fluidHandler) + { + FluidStack fs = new FluidStack(this.accepts, Fluid.BUCKET_VOLUME); + int transferred = fluidHandler.fill(fs, false); + if (transferred == Fluid.BUCKET_VOLUME) + { + fluidHandler.fill(fs, true); + return new ItemStack(Items.BUCKET); + } + return ItemStack.EMPTY; + } + + @Override + @SideOnly(Side.CLIENT) + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.BUCKET; + } + + @Override + public net.minecraftforge.common.capabilities.ICapabilityProvider initCapabilities(ItemStack stack, net.minecraft.nbt.NBTTagCompound nbt) + { + return new FluidHandlerBucketGC(stack); + } + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY; + } + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY ? (T) this : null; + } + + public static class FluidHandlerBucketGC implements IFluidHandlerItem, ICapabilityProvider + { + + public static final String FLUID_NBT_KEY = "Fluid"; + + @Nonnull protected ItemStack container; + protected int capacity; + private ItemBucketGC item; + + public FluidHandlerBucketGC(@Nonnull ItemStack container) + { + container.setCount(1); + this.container = container; + this.item = (ItemBucketGC) container.getItem(); + this.capacity = Fluid.BUCKET_VOLUME; + } + + @Nonnull + @Override + public ItemStack getContainer() + { + return container; + } + + @Nullable + public FluidStack getFluid() + { + return new FluidStack(item.accepts, this.capacity); + } + + protected void setFluid(FluidStack fluid) + { + } + + @Override + public IFluidTankProperties[] getTankProperties() + { + return new IFluidTankProperties[] + {new FluidTankProperties(getFluid(), capacity)}; + } + + @Override + public int fill(FluidStack resource, boolean doFill) + { + // This is a full bucket already, can't be filled + return 0; + } + + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) + { + if (resource == null || !this.canDrainFluidType(resource)) + { + return null; + } + return drain(resource.amount, doDrain); + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) + { + if (maxDrain < this.capacity) + { + return null; + } + if (doDrain) + { + container = new ItemStack(Items.BUCKET); + } + return this.getFluid(); + } + + public boolean canFillFluidType(FluidStack fluid) + { + return false; + } + + public boolean canDrainFluidType(FluidStack fluid) + { + return FluidUtil.fluidsSame(item.accepts, fluid.getFluid(), true); + } + + protected void setContainerToEmpty() + { + container = new ItemStack(Items.BUCKET); + } + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY; + } + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY ? (T) this : null; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggy.java new file mode 100644 index 00000000..275f8107 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggy.java @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemBuggy extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemBuggy(String assetName) + { + super(); + this.setTranslationKey(assetName); + this.setMaxStackSize(1); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 4; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + ItemStack itemstack = playerIn.getHeldItem(hand); + final float var4 = 1.0F; + final float var5 = playerIn.prevRotationPitch + (playerIn.rotationPitch - playerIn.prevRotationPitch) * var4; + final float var6 = playerIn.prevRotationYaw + (playerIn.rotationYaw - playerIn.prevRotationYaw) * var4; + final double var7 = playerIn.prevPosX + (playerIn.posX - playerIn.prevPosX) * var4; + final double var9 = playerIn.prevPosY + (playerIn.posY - playerIn.prevPosY) * var4 + 1.62D - playerIn.getYOffset(); + final double var11 = playerIn.prevPosZ + (playerIn.posZ - playerIn.prevPosZ) * var4; + final Vec3d var13 = new Vec3d(var7, var9, var11); + final float var14 = MathHelper.cos(-var6 / Constants.RADIANS_TO_DEGREES - (float) Math.PI); + final float var15 = MathHelper.sin(-var6 / Constants.RADIANS_TO_DEGREES - (float) Math.PI); + final float var16 = -MathHelper.cos(-var5 / Constants.RADIANS_TO_DEGREES); + final float var17 = MathHelper.sin(-var5 / Constants.RADIANS_TO_DEGREES); + final float var18 = var15 * var16; + final float var20 = var14 * var16; + final double var21 = 5.0D; + final Vec3d var23 = var13.add(var18 * var21, var17 * var21, var20 * var21); + final RayTraceResult var24 = worldIn.rayTraceBlocks(var13, var23, true); + + if (var24 == null) + { + return new ActionResult<>(EnumActionResult.PASS, itemstack); + } else + { + final Vec3d var25 = playerIn.getLook(var4); + boolean var26 = false; + final float var27 = 1.0F; + final List var28 = + worldIn.getEntitiesWithinAABBExcludingEntity(playerIn, playerIn.getEntityBoundingBox().grow(var25.x * var21, var25.y * var21, var25.z * var21).expand(var27, var27, var27)); + int var29; + + for (var29 = 0; var29 < var28.size(); ++var29) + { + final Entity var30 = (Entity) var28.get(var29); + + if (var30.canBeCollidedWith()) + { + final float var31 = var30.getCollisionBorderSize(); + final AxisAlignedBB var32 = var30.getEntityBoundingBox().expand(var31, var31, var31); + + if (var32.contains(var13)) + { + var26 = true; + } + } + } + + if (var26) + { + return new ActionResult<>(EnumActionResult.PASS, itemstack); + } else + { + if (var24.typeOfHit == RayTraceResult.Type.BLOCK) + { + var29 = var24.getBlockPos().getX(); + int var33 = var24.getBlockPos().getY(); + final int var34 = var24.getBlockPos().getZ(); + + if (worldIn.getBlockState(new BlockPos(var29, var33, var34)).getBlock() == Blocks.SNOW) + { + --var33; + } + + final EntityBuggy var35 = new EntityBuggy(worldIn, var29 + 0.5F, var33 + 1.0F, var34 + 0.5F, itemstack.getItemDamage()); + + if (!worldIn.getCollisionBoxes(var35, var35.getEntityBoundingBox().expand(-0.1D, -0.1D, -0.1D)).isEmpty()) + { + return new ActionResult<>(EnumActionResult.PASS, itemstack); + } + + if (itemstack.hasTagCompound() && itemstack.getTagCompound().hasKey("BuggyFuel")) + { + var35.buggyFuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, itemstack.getTagCompound().getInteger("BuggyFuel"))); + } + + if (!worldIn.isRemote) + { + worldIn.spawnEntity(var35); + } + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + } + + return new ActionResult<>(EnumActionResult.SUCCESS, itemstack); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getItemDamage() != 0) + { + tooltip.add(GCCoreUtil.translate("gui.buggy.storage_space") + ": " + par1ItemStack.getItemDamage() * 18); + } + + if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("BuggyFuel")) + { + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + par1ItemStack.getTagCompound().getInteger("BuggyFuel") + " / " + EntityBuggy.tankCapacity); + } + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggyMaterial.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggyMaterial.java new file mode 100644 index 00000000..0274cb79 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemBuggyMaterial.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemBuggyMaterial extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"wheel", // 0 + "seat", // 1 + "storage"}; // 2 + + public ItemBuggyMaterial(String assetName) + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + "." + ItemBuggyMaterial.names[itemStack.getItemDamage()]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemBuggyMaterial.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanister.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanister.java new file mode 100644 index 00000000..c3e817b3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanister.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemCanister extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"tin", // 0 + "copper"}; // 1 + + public ItemCanister(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + "." + ItemCanister.names[itemStack.getItemDamage()]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 2; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGeneric.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGeneric.java new file mode 100644 index 00000000..3caa7147 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGeneric.java @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.ItemFluidContainer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.JavaUtil; + +public abstract class ItemCanisterGeneric extends ItemFluidContainer implements GCRarity +{ + + public final static int EMPTY = Fluid.BUCKET_VOLUME + 1; + private static boolean isTELoaded = CompatibilityManager.isTELoaded(); + + private String allowedFluid = null; + + public ItemCanisterGeneric(String assetName) + { + super(Fluid.BUCKET_VOLUME); + this.setMaxDamage(ItemCanisterGeneric.EMPTY); + this.setMaxStackSize(1); + this.setNoRepair(); + this.setTranslationKey(assetName); + this.setContainerItem(GCItems.oilCanister); + this.setHasSubtypes(true); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) + { + return new ItemCanisterGenericHandler(stack); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 1)); + } + } + + @Override + public ItemStack getContainerItem(ItemStack itemStack) + { + // Workaround for strange behaviour in TE Transposer + if (isTELoaded) + { + if (JavaUtil.instance.isCalledBy("thermalexpansion.block.machine.TileTransposer")) + { + return ItemStack.EMPTY; + } + } + + return new ItemStack(this.getContainerItem(), 1, ItemCanisterGeneric.EMPTY); + } + + @Override + public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) + { + if (ItemCanisterGeneric.EMPTY == par1ItemStack.getItemDamage()) + { + if (par1ItemStack.getItem() != GCItems.oilCanister) + { + this.replaceEmptyCanisterItem(par1ItemStack, GCItems.oilCanister); + } + par1ItemStack.setTagCompound(null); + } else if (par1ItemStack.getItemDamage() <= 0) + { + par1ItemStack.setItemDamage(1); + } + } + + public void setAllowedFluid(String name) + { + this.allowedFluid = name; + } + + public String getAllowedFluid() + { + return this.allowedFluid; + } + + public int fill(ItemStack container, FluidStack resource, boolean doFill) + { + if (resource == null || resource.getFluid() == null || resource.amount <= 0 || container == null || container.getItemDamage() <= 1 || !(container.getItem() instanceof ItemCanisterGeneric)) + { + return 0; + } + String fluidName = resource.getFluid().getName(); + + int capacityPlusOne = container.getItemDamage(); + if (capacityPlusOne <= 1) + { + if (capacityPlusOne < 1) + { + // It shouldn't be possible, but just in case, set this to a + // proper filled item + container.setItemDamage(1); + } + return 0; + } + if (capacityPlusOne >= ItemCanisterGeneric.EMPTY) + { + // Empty canister - find a new canister to match the fluid + for (ItemCanisterGeneric i : GCItems.canisterTypes) + { + if (fluidName.equalsIgnoreCase(i.allowedFluid)) + { + if (!doFill) + { + return Math.min(resource.amount, this.capacity); + } + + this.replaceEmptyCanisterItem(container, i); + break; + } + } + if (capacityPlusOne > ItemCanisterGeneric.EMPTY) + { + // It shouldn't be possible, but just in case, set this to a + // proper empty item + capacityPlusOne = ItemCanisterGeneric.EMPTY; + container.setItemDamage(capacityPlusOne); + } + } + + if (fluidName.equalsIgnoreCase(((ItemCanisterGeneric) container.getItem()).allowedFluid)) + { + int added = Math.min(resource.amount, capacityPlusOne - 1); + if (doFill && added > 0) + { + container.setItemDamage(Math.max(1, container.getItemDamage() - added)); + } + return added; + } + + return 0; + } + + public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) + { + if (this.allowedFluid == null || container.getItemDamage() >= ItemCanisterGeneric.EMPTY) + { + return null; + } + + FluidStack used = this.getFluid(container); + if (used != null && used.amount > maxDrain) + used.amount = maxDrain; + if (doDrain && used != null && used.amount > 0) + { + this.setNewDamage(container, container.getItemDamage() + used.amount); + } + return used; + } + + protected void setNewDamage(ItemStack container, int newDamage) + { + newDamage = Math.min(newDamage, ItemCanisterGeneric.EMPTY); + container.setItemDamage(newDamage); + if (newDamage == ItemCanisterGeneric.EMPTY) + { + if (container.getItem() != GCItems.oilCanister) + { + this.replaceEmptyCanisterItem(container, GCItems.oilCanister); + return; + } + } + } + + private void replaceEmptyCanisterItem(ItemStack container, Item newItem) + { + try + { + Class itemStack = container.getClass(); + Field itemId = itemStack.getDeclaredField(GCCoreUtil.isDeobfuscated() ? "item" : "field_151002_e"); + itemId.setAccessible(true); + itemId.set(container, newItem); + Method forgeInit = itemStack.getDeclaredMethod("forgeInit"); + forgeInit.setAccessible(true); + forgeInit.invoke(container); + } catch (Exception ignore) + { + } + } + + public FluidStack getFluid(ItemStack container) + { + String fluidName = ((ItemCanisterGeneric) container.getItem()).allowedFluid; + if (fluidName == null || container.getItemDamage() >= ItemCanisterGeneric.EMPTY) + { + return null; + } + + Fluid fluid = FluidRegistry.getFluid(fluidName); + if (fluid == null) + { + return null; + } + + return new FluidStack(fluid, ItemCanisterGeneric.EMPTY - container.getItemDamage()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGenericHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGenericHandler.java new file mode 100644 index 00000000..7187ac64 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterGenericHandler.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.FluidTankProperties; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.capability.IFluidTankProperties; + +public class ItemCanisterGenericHandler implements IFluidHandlerItem, ICapabilityProvider +{ + + @Nonnull protected ItemStack container; + + public ItemCanisterGenericHandler(@Nonnull ItemStack container) + { + this.container = container; + } + + @Nonnull + @Override + public ItemStack getContainer() + { + return container; // never varies + } + + @Nullable + public FluidStack getFluid() + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + return ((ItemCanisterGeneric) container.getItem()).getFluid(container); + } + return null; + } + + protected void setFluid(FluidStack fluid) + { + if (this.canFillFluidType(fluid)) + { + ((ItemCanisterGeneric) container.getItem()).setDamage(container, ItemCanisterGeneric.EMPTY - fluid.amount); + } + } + + @Override + public IFluidTankProperties[] getTankProperties() + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + return new FluidTankProperties[] + {new FluidTankProperties(getFluid(), ItemCanisterGeneric.EMPTY - 1)}; + } + return new FluidTankProperties[0]; + } + + @Override + public int fill(FluidStack resource, boolean doFill) + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + return ((ItemCanisterGeneric) container.getItem()).fill(container, resource, doFill); + } + return 0; + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + return ((ItemCanisterGeneric) container.getItem()).drain(container, maxDrain, doDrain); + } + return null; + } + + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) + { + if (this.canDrainFluidType(resource)) + { + return ((ItemCanisterGeneric) container.getItem()).drain(container, resource.amount, doDrain); + } + return null; + } + + public boolean canFillFluidType(FluidStack fluid) + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric && fluid != null && fluid.getFluid() != null) + { + return ((ItemCanisterGeneric) container.getItem()).getAllowedFluid().equalsIgnoreCase(fluid.getFluid().getName()); + } + return false; + } + + public boolean canDrainFluidType(FluidStack fluid) + { + return this.canFillFluidType(fluid); + } + + protected void setContainerToEmpty() + { + if (container.getCount() > 0 && container.getItem() instanceof ItemCanisterGeneric) + { + ((ItemCanisterGeneric) container.getItem()).setDamage(container, ItemCanisterGeneric.EMPTY); + ; + } + } + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY; + } + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY ? (T) this : null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterOxygenInfinite.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterOxygenInfinite.java new file mode 100644 index 00000000..dcdcfc66 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCanisterOxygenInfinite.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemCanisterOxygenInfinite extends Item implements IItemOxygenSupply, ISortableItem, GCRarity +{ + + public ItemCanisterOxygenInfinite(String assetName) + { + super(); + this.setMaxDamage(ItemCanisterGeneric.EMPTY); + this.setMaxStackSize(1); + this.setNoRepair(); + this.setTranslationKey(assetName); + this.setContainerItem(GCItems.oilCanister); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public boolean hasEffect(ItemStack stack) + { + return true; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.infinite_item.desc")); + tooltip.add(EnumColor.RED + GCCoreUtil.translate("gui.creative_only.desc")); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public ItemStack getContainerItem(ItemStack itemstack) + { + if (super.getContainerItem(itemstack).isEmpty()) + { + return ItemStack.EMPTY; + } + return itemstack; + } + + @Override + public int discharge(ItemStack itemStack, int amount) + { + return amount; + } + + @Override + public int getOxygenStored(ItemStack par1ItemStack) + { + return par1ItemStack.getMaxDamage(); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(2); + ItemStack gear1 = stats.getExtendedInventory().getStackInSlot(3); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(2, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } else if (gear1.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(3, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + } + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCheese.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCheese.java new file mode 100644 index 00000000..58db6b91 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemCheese.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemFood; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemCheese extends ItemFood implements ISortableItem, GCRarity +{ + + public ItemCheese(int par1, float par2, boolean par3) + { + super(par1, par2, par3); + this.setTranslationKey("cheese_curd"); + } + + public ItemCheese(int par1, boolean par2) + { + this(par1, 0.6F, par2); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemDesc.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemDesc.java new file mode 100644 index 00000000..9ea7e6a6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemDesc.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class ItemDesc extends Item implements IShiftDescription +{ + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List info, ITooltipFlag flagIn) + { + if (this.showDescription(stack.getItemDamage())) + { + if (ClientUtil.isKeyPressed(Minecraft.getMinecraft().gameSettings.keyBindSneak)) + { + info.addAll(FMLClientHandler.instance().getClient().fontRenderer.listFormattedStringToWidth(this.getShiftDescription(stack.getItemDamage()), 150)); + } else + { + info.add(GCCoreUtil.translateWithFormat("item_desc.shift.name", GameSettings.getKeyDisplayString(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode()))); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemEmergencyKit.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemEmergencyKit.java new file mode 100644 index 00000000..f3e856a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemEmergencyKit.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import net.minecraftforge.items.ItemHandlerHelper; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemEmergencyKit extends ItemDesc implements ISortableItem, GCRarity +{ + + private static final int SIZE = 9; + + public ItemEmergencyKit(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(false); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + for (int i = 0; i < SIZE; i++) + { + ItemStack newGear = getContents(i); + if (newGear.getItem() instanceof IClickableItem) + { + newGear = ((IClickableItem) newGear.getItem()).onItemRightClick(newGear, worldIn, player); + } + if (newGear.getCount() >= 1) + { + ItemHandlerHelper.giveItemToPlayer(player, newGear, 0); + } + } + + itemStack.setCount(0); + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + public static ItemStack getContents(int slot) + { + switch (slot) + { + case 0: + return new ItemStack(GCItems.oxMask); + case 1: + return new ItemStack(GCItems.oxygenGear); + case 2: + return new ItemStack(GCItems.oxTankLight); + case 3: + return new ItemStack(GCItems.oxTankLight); + case 4: + return new ItemStack(GCItems.steelPickaxe); + case 5: + return new ItemStack(GCItems.foodItem, 1, 3); + case 6: + return PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.HEALING); + case 7: + return PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.LONG_NIGHT_VISION); + case 8: + return new ItemStack(GCItems.parachute, 1, 13); + default: + return null; + } + } + + public static Object[] getRecipe() + { + Object[] result = new Object[] + {"EAB", "CID", "FGH", 'A', null, 'B', null, 'C', null, 'D', null, 'E', null, 'F', null, 'G', null, 'H', null, 'I', null}; + for (int i = 0; i < SIZE; i++) + { + result[i * 2 + 4] = getContents(i); + } + return result; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate("item.emergency_kit.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFlag.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFlag.java new file mode 100644 index 00000000..66150268 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFlag.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.block.SoundType; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItemCustom; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class ItemFlag extends Item implements IHoldableItemCustom, ISortableItem, GCRarity +{ + + public int placeProgress; + + public ItemFlag(String assetName) + { + super(); + this.setMaxDamage(0); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entity, int timeLeft) + { + final int useTime = this.getMaxItemUseDuration(stack) - timeLeft; + + boolean placed = false; + + if (!(entity instanceof EntityPlayer)) + { + return; + } + + EntityPlayer player = (EntityPlayer) entity; + + final RayTraceResult var12 = this.rayTrace(worldIn, player, true); + + float var7 = useTime / 20.0F; + var7 = (var7 * var7 + var7 * 2.0F) / 3.0F; + + if (var7 > 1.0F) + { + var7 = 1.0F; + } + + if (var7 == 1.0F && var12 != null && var12.typeOfHit == RayTraceResult.Type.BLOCK) + { + final BlockPos pos = var12.getBlockPos(); + + if (!worldIn.isRemote) + { + final EntityFlag flag = new EntityFlag(worldIn, pos.getX() + 0.5F, pos.getY() + 1.0F, pos.getZ() + 0.5F, (int) (entity.rotationYaw - 90)); + + if (worldIn.getEntitiesWithinAABB(EntityFlag.class, new AxisAlignedBB(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 3, pos.getZ() + 1)).isEmpty()) + { + worldIn.spawnEntity(flag); + flag.setType(stack.getItemDamage()); + flag.setOwner(PlayerUtil.getName(player)); + worldIn.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundType.METAL.getBreakSound(), SoundCategory.BLOCKS, SoundType.METAL.getVolume(), SoundType.METAL.getPitch() + 2.0F); + placed = true; + } else + { + entity.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.flag.already_placed"))); + } + } + + if (placed) + { + final int var2 = this.getInventorySlotContainItem(player, stack); + + if (var2 >= 0 && !player.capabilities.isCreativeMode) + { + player.inventory.mainInventory.get(var2).shrink(1); + } + } + } + } + + private int getInventorySlotContainItem(EntityPlayer player, ItemStack stack) + { + for (int var2 = 0; var2 < player.inventory.mainInventory.size(); ++var2) + { + if (!player.inventory.mainInventory.get(var2).isEmpty() && player.inventory.mainInventory.get(var2).isItemEqual(stack)) + { + return var2; + } + } + + return -1; + } + + @Override + public int getMaxItemUseDuration(ItemStack par1ItemStack) + { + return 72000; + } + + @Override + public EnumAction getItemUseAction(ItemStack par1ItemStack) + { + return EnumAction.NONE; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + playerIn.setActiveHand(hand); + return new ActionResult<>(EnumActionResult.SUCCESS, playerIn.getHeldItem(hand)); + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return "item.flag"; + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public Vector3 getLeftHandRotation(EntityPlayer player) + { + return new Vector3((float) Math.PI + 1.3F, 0.5F, (float) Math.PI / 5.0F); + } + + @Override + public Vector3 getRightHandRotation(EntityPlayer player) + { + return new Vector3((float) Math.PI + 1.3F, -0.5F, (float) Math.PI / 5.0F); + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return false; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFood.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFood.java new file mode 100644 index 00000000..e7e4a860 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFood.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemFood extends net.minecraft.item.ItemFood implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"dehydrated_apple", "dehydrated_carrot", "dehydrated_melon", "dehydrated_potato", "cheese_slice", "burger_bun", "beef_patty_raw", "beef_patty_cooked", "cheeseburger", "canned_beef"}; + + public ItemFood(String assetName) + { + super(2, 0.3F, false); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getItemDamage() < 4) + { + return "item.basic_item.canned_food"; + } else + { + return "item.food." + ItemFood.names[itemStack.getItemDamage()]; + } + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 4; i++) + { + list.add(new ItemStack(this, 1, i)); + } + list.add(new ItemStack(this, 1, 9)); + for (int i = 4; i < 9; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getItemDamage() < 4) + { + tooltip.add(EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("item.basic_item." + ItemFood.names[par1ItemStack.getItemDamage()] + ".name")); + } else if (par1ItemStack.getItemDamage() == 8) + { + tooltip.add(EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("item.food.cheeseburger.desc")); + } + } + + @Override + public int getHealAmount(ItemStack par1ItemStack) + { + switch (par1ItemStack.getItemDamage()) + { + case 0: + return 8; + case 1: + return 8; + case 2: + return 4; + case 3: + return 2; + case 4: + return 2; + case 5: + return 4; + case 6: + return 2; + case 7: + return 4; + case 8: + return 14; + case 9: + return 8; + default: + return 0; + } + } + + @Override + public float getSaturationModifier(ItemStack par1ItemStack) + { + switch (par1ItemStack.getItemDamage()) + { + case 0: + return 0.3F; + case 1: + return 0.6F; + case 2: + return 0.3F; + case 3: + return 0.3F; + case 4: + return 0.1F; + case 5: + return 0.8F; + case 6: + return 0.3F; + case 7: + return 0.6F; + case 8: + return 1.0F; + case 9: + return 0.6F; + default: + return 0.0F; + } + } + + @Override + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) + { + if (entityLiving instanceof EntityPlayer) + { + ((EntityPlayer) entityLiving).getFoodStats().addStats(this, stack); + } + worldIn.playSound(null, entityLiving.posX, entityLiving.posY, entityLiving.posZ, SoundEvents.ENTITY_PLAYER_BURP, SoundCategory.PLAYERS, 0.5F, worldIn.rand.nextFloat() * 0.1F + 0.9F); + if (!worldIn.isRemote && (stack.getItemDamage() < 4 || stack.getItemDamage() == 9)) + { + entityLiving.entityDropItem(new ItemStack(GCItems.canister, 1, 0), 0.0F); + } + stack.shrink(1); + return stack; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuel.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuel.java new file mode 100644 index 00000000..49ac6d94 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuel.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.item.Item; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; + +public class ItemFuel extends Item implements GCRarity +{ + + public ItemFuel(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuelCanister.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuelCanister.java new file mode 100644 index 00000000..dd26d61d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemFuelCanister.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemFuelCanister extends ItemCanisterGeneric implements ISortableItem, GCRarity +{ + + public ItemFuelCanister(String assetName) + { + super(assetName); + this.setAllowedFluid(ConfigManagerCore.useOldFuelFluidID ? "fuelgc" : "fuel"); + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getItemDamage() == 1) + { + return "item.fuel_canister"; + } + + return "item.fuel_canister_partial"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemHoeGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemHoeGC.java new file mode 100644 index 00000000..ff6aa443 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemHoeGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemHoe; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemHoeGC extends ItemHoe implements ISortableItem, GCRarity +{ + + public ItemHoeGC(String assetName) + { + super(GCItems.TOOL_STEEL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemIC2Compat.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemIC2Compat.java new file mode 100644 index 00000000..f7d1aacd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemIC2Compat.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemIC2Compat extends Item implements ISortableItem, GCRarity +{ + + public static final String[] types = + {"dust", "ore_purified", "ore_crushed", "dust_small"}; + public static final String[] names = + {"alu", "titanium"}; + + public ItemIC2Compat(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(CompatibilityManager.isIc2Loaded()); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + int meta = itemStack.getItemDamage(); + if (!CompatibilityManager.isIc2Loaded()) + meta = 0; + return this.getTranslationKey() + "." + ItemIC2Compat.types[meta % 4] + "_" + ItemIC2Compat.names[meta / 4]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList par3List) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + par3List.add(new ItemStack(this, 1, 0)); + if (CompatibilityManager.isIc2Loaded()) + { + par3List.add(new ItemStack(this, 1, 1)); + par3List.add(new ItemStack(this, 1, 2)); + par3List.add(new ItemStack(this, 1, 7)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemKey.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemKey.java new file mode 100644 index 00000000..28effc80 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemKey.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IKeyItem; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemKey extends Item implements IKeyItem, ISortableItem, GCRarity +{ + + public ItemKey(String assetName) + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + ".t1"; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getTier(ItemStack keyStack) + { + return 1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.KEYS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteorChunk.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteorChunk.java new file mode 100644 index 00000000..f62237db --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteorChunk.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemMeteorChunk extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"meteor_chunk", "meteor_chunk_hot"}; + + public static final int METEOR_BURN_TIME = 45 * 20; + + public ItemMeteorChunk(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.MATERIALS); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void onUpdate(ItemStack itemstack, World world, Entity entity, int par4, boolean par5) + { + if (itemstack.getItemDamage() == 1 && !world.isRemote) + { + if (itemstack.hasTagCompound()) + { + float meteorBurnTime = itemstack.getTagCompound().getFloat("MeteorBurnTimeF"); + + if (meteorBurnTime >= 0.5F) + { + meteorBurnTime -= 0.5F; + itemstack.getTagCompound().setFloat("MeteorBurnTimeF", meteorBurnTime); + } else + { + itemstack.setItemDamage(0); + itemstack.setTagCompound(null); + } + } else + { + itemstack.setTagCompound(new NBTTagCompound()); + itemstack.getTagCompound().setFloat("MeteorBurnTimeF", ItemMeteorChunk.METEOR_BURN_TIME); + } + } + } + + @Override + public void onCreated(ItemStack itemstack, World world, EntityPlayer entityPlayer) + { + super.onCreated(itemstack, world, entityPlayer); + + if (itemstack.getItemDamage() == 1) + { + if (!itemstack.hasTagCompound()) + { + itemstack.setTagCompound(new NBTTagCompound()); + } + + itemstack.getTagCompound().setFloat("MeteorBurnTimeF", ItemMeteorChunk.METEOR_BURN_TIME); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack itemstack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (itemstack.getItemDamage() > 0) + { + float burnTime = 0.0F; + + if (itemstack.hasTagCompound()) + { + float meteorBurnTime = itemstack.getTagCompound().getFloat("MeteorBurnTimeF"); + burnTime = Math.round(meteorBurnTime / 10.0F) / 2.0F; + } else + { + burnTime = 45.0F; + } + + tooltip.add(GCCoreUtil.translate("item.hot_description.name") + " " + burnTime + GCCoreUtil.translate("gui.seconds")); + } + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return "item." + ItemMeteorChunk.names[itemStack.getItemDamage()]; + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (!player.capabilities.isCreativeMode) + { + itemStack.shrink(1); + } + + world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.NEUTRAL, 1.0F, 0.0001F / (Item.itemRand.nextFloat() * 0.1F)); + + if (!world.isRemote) + { + EntityMeteorChunk meteor = new EntityMeteorChunk(world, player, 1.0F); + + if (itemStack.getItemDamage() > 0) + { + meteor.setFire(20); + meteor.isHot = true; + } + meteor.canBePickedUp = player.capabilities.isCreativeMode ? 2 : 1; + world.spawnEntity(meteor); + } + + player.swingArm(hand); + + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteoricIron.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteoricIron.java new file mode 100644 index 00000000..1a54bf9f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMeteoricIron.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemMeteoricIron extends Item implements ISortableItem, GCRarity +{ + + public ItemMeteoricIron(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMoon.java new file mode 100644 index 00000000..a38de1cb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemMoon.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemMoon extends ItemDesc implements ISortableItem, GCRarity +{ + + public static String[] names = + {"meteoric_iron_ingot", "compressed_meteoric_iron", "lunar_sapphire"}; + + public ItemMoon(String str) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(str); + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemMoon.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemMoon.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 0: + return EnumSortCategoryItem.INGOT; + case 2: + return EnumSortCategoryItem.GENERAL; + default: + return EnumSortCategoryItem.PLATE; + } + } + + @Override + public String getShiftDescription(int meta) + { + if (meta == 2) + { + return GCCoreUtil.translate("item.lunar_sapphire.description"); + } + + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return meta == 2; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + switch (item.getItemDamage()) + { + case 1: + return 1F; + } + return -1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOilCanister.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOilCanister.java new file mode 100644 index 00000000..25c13233 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOilCanister.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemOilCanister extends ItemCanisterGeneric implements ISortableItem +{ + + public ItemOilCanister(String assetName) + { + super(assetName); + this.setAllowedFluid(ConfigManagerCore.useOldOilFluidID ? "oilgc" : "oil"); + this.setContainerItem(this); + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getMaxDamage() - itemStack.getItemDamage() == 0) + { + return "item.empty_liquid_canister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.oil_canister"; + } + + return "item.oil_canister_partial"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("gui.message.oil.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, this.getMaxDamage())); + list.add(new ItemStack(this, 1, 1)); + } + } + + @Override + public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) + { + if (ItemCanisterGeneric.EMPTY == par1ItemStack.getItemDamage()) + { + par1ItemStack.setTagCompound(null); + } else if (par1ItemStack.getItemDamage() <= 0) + { + par1ItemStack.setItemDamage(1); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenGear.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenGear.java new file mode 100644 index 00000000..7b4fb113 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenGear.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemOxygenGear extends Item implements ISortableItem, IClickableItem, GCRarity +{ + + public ItemOxygenGear(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + if (itemStack.getItem() instanceof IClickableItem) + { + itemStack = ((IClickableItem) itemStack.getItem()).onItemRightClick(itemStack, worldIn, player); + } + + if (itemStack.isEmpty()) + { + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(1); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(1, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + + return itemStack; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenMask.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenMask.java new file mode 100644 index 00000000..0c16b2b1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenMask.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemOxygenMask extends Item implements ISortableItem, IClickableItem, GCRarity +{ + + public ItemOxygenMask(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + if (itemStack.getItem() instanceof IClickableItem) + { + itemStack = ((IClickableItem) itemStack.getItem()).onItemRightClick(itemStack, worldIn, player); + } + + if (itemStack.isEmpty()) + { + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(0); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(0, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + + return itemStack; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenTank.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenTank.java new file mode 100644 index 00000000..8784a5a7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemOxygenTank.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemOxygenTank extends Item implements ISortableItem, IClickableItem, GCRarity +{ + + public ItemOxygenTank(int tier, String assetName) + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(tier * 900); + this.setTranslationKey(assetName); + this.setNoRepair(); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, this.getMaxDamage())); + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(GCCoreUtil.translate("gui.tank.oxygen_remaining") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + if (itemStack.getItem() instanceof IClickableItem) + { + itemStack = ((IClickableItem) itemStack.getItem()).onItemRightClick(itemStack, worldIn, player); + } + + if (itemStack.isEmpty()) + { + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(2); + ItemStack gear1 = stats.getExtendedInventory().getStackInSlot(3); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(2, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } else if (gear1.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(3, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + + return itemStack; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemParaChute.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemParaChute.java new file mode 100644 index 00000000..6372f352 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemParaChute.java @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +import static net.minecraft.item.EnumDyeColor.BLACK; +import static net.minecraft.item.EnumDyeColor.BLUE; +import static net.minecraft.item.EnumDyeColor.BROWN; +import static net.minecraft.item.EnumDyeColor.CYAN; +import static net.minecraft.item.EnumDyeColor.GRAY; +import static net.minecraft.item.EnumDyeColor.GREEN; +import static net.minecraft.item.EnumDyeColor.LIGHT_BLUE; +import static net.minecraft.item.EnumDyeColor.LIME; +import static net.minecraft.item.EnumDyeColor.MAGENTA; +import static net.minecraft.item.EnumDyeColor.ORANGE; +import static net.minecraft.item.EnumDyeColor.PINK; +import static net.minecraft.item.EnumDyeColor.PURPLE; +import static net.minecraft.item.EnumDyeColor.RED; +import static net.minecraft.item.EnumDyeColor.SILVER; +import static net.minecraft.item.EnumDyeColor.WHITE; +import static net.minecraft.item.EnumDyeColor.YELLOW; + +public class ItemParaChute extends Item implements ISortableItem, IClickableItem, GCRarity +{ + + public static final String[] names = + {"plain", // 0 + "black", // 1 + "blue", // 2 + "lime", // 3 + "brown", // 4 + "darkblue", // 5 + "darkgray", // 6 + "darkgreen", // 7 + "gray", // 8 + "magenta", // 9 + "orange", // 10 + "pink", // 11 + "purple", // 12 + "red", // 13 + "teal", // 14 + "yellow"}; // 15 + + public ItemParaChute(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemParaChute.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + "_" + ItemParaChute.names[itemStack.getItemDamage()]; + } + + public static EnumDyeColor getDyeEnumFromParachuteDamage(int damage) + { + switch (damage) + { + case 1: + return BLACK; + case 13: + return RED; + case 7: + return GREEN; + case 4: + return BROWN; + case 5: + return BLUE; + case 12: + return PURPLE; + case 14: + return CYAN; + case 8: + return SILVER; + case 6: + return GRAY; + case 11: + return PINK; + case 3: + return LIME; + case 15: + return YELLOW; + case 2: + return LIGHT_BLUE; + case 9: + return MAGENTA; + case 10: + return ORANGE; + case 0: + return WHITE; + } + + return WHITE; + } + + public static int getParachuteDamageValueFromDyeEnum(EnumDyeColor color) + { + switch (color) + { + case BLACK: + return 1; + case RED: + return 13; + case GREEN: + return 7; + case BROWN: + return 4; + case BLUE: + return 5; + case PURPLE: + return 12; + case CYAN: + return 14; + case SILVER: + return 8; + case GRAY: + return 6; + case PINK: + return 11; + case LIME: + return 3; + case YELLOW: + return 15; + case LIGHT_BLUE: + return 2; + case MAGENTA: + return 9; + case ORANGE: + return 10; + case WHITE: + return 0; + } + + return -1; + } + + public static int getParachuteDamageValueFromDye(int meta) + { + return getParachuteDamageValueFromDyeEnum(EnumDyeColor.byDyeDamage(meta)); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + if (itemStack.getItem() instanceof IClickableItem) + { + itemStack = ((IClickableItem) itemStack.getItem()).onItemRightClick(itemStack, worldIn, player); + } + + if (itemStack.isEmpty()) + { + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + public ItemStack onItemRightClick(ItemStack itemStack, World worldIn, EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(4); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(4, itemStack.copy()); + itemStack = ItemStack.EMPTY; + } + + return itemStack; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPickaxeGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPickaxeGC.java new file mode 100644 index 00000000..1d339c5e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPickaxeGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemPickaxe; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemPickaxeGC extends ItemPickaxe implements ISortableItem, GCRarity +{ + + public ItemPickaxeGC(String assetName) + { + super(GCItems.TOOL_STEEL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPreLaunchChecklist.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPreLaunchChecklist.java new file mode 100644 index 00000000..090cacc5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemPreLaunchChecklist.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemPreLaunchChecklist extends Item implements ISortableItem, GCRarity +{ + + public ItemPreLaunchChecklist(String assetName) + { + super(); + this.setTranslationKey(assetName); + this.setMaxStackSize(1); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack != null && this == GCItems.heavyPlatingTier1) + { + tooltip.add(GCCoreUtil.translate("item.tier1.desc")); + } + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + ItemStack itemStack = playerIn.getHeldItem(hand); + + if (worldIn.isRemote) + { + playerIn.openGui(GalacticraftCore.instance, GuiIdsCore.PRE_LAUNCH_CHECKLIST, playerIn.world, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ); + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemRocketEngineGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemRocketEngineGC.java new file mode 100644 index 00000000..4a3d8a28 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemRocketEngineGC.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemRocketEngineGC extends Item implements ISortableItem, GCRarity +{ + + public static final String[] names = + {"tier1engine", // 0 + "tier1booster"}; // 1 + + public ItemRocketEngineGC(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return this.getTranslationKey() + "." + ItemRocketEngineGC.names[itemStack.getItemDamage()]; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemRocketEngineGC.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSchematic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSchematic.java new file mode 100644 index 00000000..566eedd6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSchematic.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemHangingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicItem; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemSchematic extends ItemHangingEntity implements ISchematicItem, ISortableItem, GCRarity +{ + + public ItemSchematic(String assetName) + { + super(EntityHangingSchematic.class); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 2; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + switch (par1ItemStack.getItemDamage()) + { + case 0: + tooltip.add(GCCoreUtil.translate("schematic.moonbuggy.name")); + break; + case 1: + tooltip.add(GCCoreUtil.translate("schematic.rocket_t2.name")); + break; + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.SCHEMATIC; + } + + @Override + public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack stack = playerIn.getHeldItem(hand); + BlockPos blockpos = pos.offset(facing); + + if (facing != EnumFacing.DOWN && facing != EnumFacing.UP && playerIn.canPlayerEdit(blockpos, facing, stack)) + { + EntityHangingSchematic entityhanging = this.createEntity(worldIn, blockpos, facing, this.getIndex(stack.getItemDamage())); + + if (entityhanging != null && entityhanging.onValidSurface()) + { + if (!worldIn.isRemote) + { + entityhanging.playPlaceSound(); + worldIn.spawnEntity(entityhanging); + entityhanging.sendToClient(worldIn, blockpos); + } + + stack.shrink(1); + } + + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.FAIL; + } + } + + private EntityHangingSchematic createEntity(World worldIn, BlockPos pos, EnumFacing clickedSide, int index) + { + return new EntityHangingSchematic(worldIn, pos, clickedSide, index); + } + + /** + * Higher tiers should override - see ItemSchematicTier2 for example + **/ + protected int getIndex(int damage) + { + return damage; + } + + /** + * Make sure the number of these will match the index values + */ + public static void registerSchematicItems() + { + SchematicRegistry.registerSchematicItem(new ItemStack(GCItems.schematic, 1, 0)); + SchematicRegistry.registerSchematicItem(new ItemStack(GCItems.schematic, 1, 1)); + } + + /** + * Make sure the order of these will match the index values + */ + @SideOnly(value = Side.CLIENT) + public static void registerTextures() + { + SchematicRegistry.registerTexture(new ResourceLocation(Constants.ASSET_PREFIX, "textures/items/schematic_buggy.png")); + SchematicRegistry.registerTexture(new ResourceLocation(Constants.ASSET_PREFIX, "textures/items/schematic_rocket_t2.png")); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSensorGlasses.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSensorGlasses.java new file mode 100644 index 00000000..217bed41 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSensorGlasses.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.ISensorGlassesArmor; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemSensorGlasses extends ItemArmor implements ISortableItem, ISensorGlassesArmor, GCRarity +{ + + public ItemSensorGlasses(String assetName) + { + super(GCItems.ARMOR_SENSOR_GLASSES, 0, EntityEquipmentSlot.HEAD); + this.setTranslationKey(assetName); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) + { + return Constants.TEXTURE_PREFIX + "textures/model/armor/sensor_1.png"; + } + + @Override + @SideOnly(Side.CLIENT) + public void renderHelmetOverlay(ItemStack stack, EntityPlayer player, ScaledResolution resolution, float partialTicks) + { + OverlaySensorGlasses.renderSensorGlassesMain(stack, player, resolution, partialTicks); + OverlaySensorGlasses.renderSensorGlassesValueableBlocks(stack, player, resolution, partialTicks); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GEAR; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSpadeGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSpadeGC.java new file mode 100644 index 00000000..ab106d19 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSpadeGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemSpade; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemSpadeGC extends ItemSpade implements ISortableItem, GCRarity +{ + + public ItemSpadeGC(String assetName) + { + super(GCItems.TOOL_STEEL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSwordGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSwordGC.java new file mode 100644 index 00000000..bdc5c0b5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemSwordGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemSword; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemSwordGC extends ItemSword implements ISortableItem, GCRarity +{ + + public ItemSwordGC(String assetName) + { + super(GCItems.TOOL_STEEL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemTier1Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemTier1Rocket.java new file mode 100644 index 00000000..0d73789a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemTier1Rocket.java @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class ItemTier1Rocket extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemTier1Rocket(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack stack = playerIn.getHeldItem(hand); + boolean padFound = false; + TileEntity tile = null; + + if (worldIn.isRemote && playerIn instanceof EntityPlayerSP) + { + ClientProxyCore.playerClientHandler.onBuild(8, (EntityPlayerSP) playerIn); + return EnumActionResult.PASS; + } else + { + float centerX = -1; + float centerY = -1; + float centerZ = -1; + + for (int i = -1; i < 2; i++) + { + for (int j = -1; j < 2; j++) + { + BlockPos pos1 = pos.add(i, 0, j); + IBlockState state = worldIn.getBlockState(pos1); + final Block id = state.getBlock(); + int meta = id.getMetaFromState(state); + + if (id == GCBlocks.landingPadFull && meta == 0) + { + padFound = true; + tile = worldIn.getTileEntity(pos.add(i, 0, j)); + + centerX = pos.getX() + i + 0.5F; + centerY = pos.getY() + 0.4F; + centerZ = pos.getZ() + j + 0.5F; + + break; + } + } + + if (padFound) + { + break; + } + } + + if (padFound) + { + if (!placeRocketOnPad(stack, worldIn, tile, centerX, centerY, centerZ)) + { + return EnumActionResult.FAIL; + } + + if (!playerIn.capabilities.isCreativeMode) + { + stack.shrink(1); + } + return EnumActionResult.SUCCESS; + } else + { + return EnumActionResult.PASS; + } + } + } + + public static boolean placeRocketOnPad(ItemStack stack, World worldIn, TileEntity tile, float centerX, float centerY, float centerZ) + { + // Check whether there is already a rocket on the pad + if (tile instanceof TileEntityLandingPad) + { + if (((TileEntityLandingPad) tile).getDockedEntity() != null) + { + return false; + } + } else + { + return false; + } + + final EntityTier1Rocket spaceship = new EntityTier1Rocket(worldIn, centerX, centerY, centerZ, EnumRocketType.values()[stack.getItemDamage()]); + + spaceship.setPosition(spaceship.posX, spaceship.posY + spaceship.getOnPadYOffset(), spaceship.posZ); + worldIn.spawnEntity(spaceship); + + if (spaceship.rocketType.getPreFueled()) + { + spaceship.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, spaceship.getMaxFuel()), true); + } else if (stack.hasTagCompound() && stack.getTagCompound().hasKey("RocketFuel")) + { + spaceship.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, stack.getTagCompound().getInteger("RocketFuel")), true); + } + + return true; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < EnumRocketType.values().length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + EnumRocketType type = EnumRocketType.values()[par1ItemStack.getItemDamage()]; + + if (!type.getTooltip().isEmpty()) + { + tooltip.add(type.getTooltip()); + } + + if (type.getPreFueled()) + { + tooltip.add(EnumColor.RED + "\u00a7o" + GCCoreUtil.translate("gui.creative_only.desc")); + } + + if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("RocketFuel")) + { + EntityTier1Rocket rocket = new EntityTier1Rocket(FMLClientHandler.instance().getWorldClient(), 0, 0, 0, EnumRocketType.values()[par1ItemStack.getItemDamage()]); + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + par1ItemStack.getTagCompound().getInteger("RocketFuel") + " / " + rocket.fuelTank.getCapacity()); + } + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ROCKET; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemUniversalWrench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemUniversalWrench.java new file mode 100644 index 00000000..ba6d8c40 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/items/ItemUniversalWrench.java @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.items; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.Optional; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvanced; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectrical; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; + +public class ItemUniversalWrench extends Item implements ISortableItem, GCRarity +{ + + public ItemUniversalWrench(String assetName) + { + super(); + this.setTranslationKey(assetName); + this.setMaxStackSize(1); + this.setMaxDamage(256); + } + + @Optional.Method(modid = "buildcraftcore") + public boolean canWrench(EntityPlayer player, EnumHand hand, ItemStack wrench, RayTraceResult rayTrace) + { + return true; + } + + @Optional.Method(modid = "buildcraftcore") + public void wrenchUsed(EntityPlayer player, EnumHand hand, ItemStack wrench, RayTraceResult rayTrace) + { + ItemStack stack = player.inventory.getCurrentItem(); + + if (!stack.isEmpty()) + { + stack.damageItem(1, player); + + if (stack.getItemDamage() >= stack.getMaxDamage()) + { + stack.shrink(1); + } + + if (stack.getCount() <= 0) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + } + } + } + + public void wrenchUsed(EntityPlayer entityPlayer, BlockPos pos) + { + + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public boolean doesSneakBypassUse(ItemStack stack, IBlockAccess world, BlockPos pos, EntityPlayer player) + { + return true; + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) + { + if (world.isRemote && player instanceof EntityPlayerSP) + { + ClientProxyCore.playerClientHandler.onBuild(3, (EntityPlayerSP) player); + } + } + + @Override + public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + { + if (world.isRemote || player.isSneaking()) + { + return EnumActionResult.PASS; + } + + IBlockState state = world.getBlockState(pos); + + if (state.getBlock() instanceof BlockAdvanced) + { + if (((BlockAdvanced) state.getBlock()).onUseWrench(world, pos, player, hand, player.getHeldItem(hand), side, hitX, hitY, hitZ)) + { + return EnumActionResult.SUCCESS; + } + } + + for (Map.Entry, Comparable> entry : state.getProperties().entrySet()) + { + IProperty iProperty = entry.getKey(); + if (iProperty instanceof PropertyEnum && iProperty.getName().equals("facing") && state.getValue(iProperty) instanceof EnumFacing) + { + PropertyEnum property = (PropertyEnum) iProperty; + Collection values = property.getAllowedValues(); + if (values.size() > 0) + { + boolean done = false; + EnumFacing currentFacing = state.getValue(property); + + // Special case: horizontal facings should be rotated around + // the Y axis - this includes most of GC's own blocks + if (values.size() == 4 && !values.contains(EnumFacing.UP) && !values.contains(EnumFacing.DOWN)) + { + EnumFacing newFacing = currentFacing.rotateY(); + if (values.contains(newFacing)) + { + world.setBlockState(pos, state.withProperty(property, newFacing)); + done = true; + } + } + if (!done) + { + // General case: rotation will follow the order in + // FACING (may be a bit jumpy) + List list = Arrays.asList(values.toArray(new EnumFacing[0])); + int i = list.indexOf(currentFacing) + 1; + EnumFacing newFacing = list.get(i >= list.size() ? 0 : i); + world.setBlockState(pos, state.withProperty(property, newFacing)); + } + + ItemStack stack = player.getHeldItem(hand).copy(); + stack.damageItem(1, player); + player.setHeldItem(hand, stack); + + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileBaseUniversalElectrical) + ((TileBaseUniversalElectrical) tile).updateFacing(); + + return EnumActionResult.SUCCESS; + } + return EnumActionResult.PASS; + } + } + + return EnumActionResult.PASS; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionEvents.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionEvents.java new file mode 100644 index 00000000..cd193b1f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionEvents.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.EnumPacketDirection; +import net.minecraft.network.INetHandler; +import net.minecraft.network.Packet; + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; +import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent; +import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientDisconnectionFromServerEvent; +import net.minecraftforge.fml.common.network.FMLNetworkEvent.ServerConnectionFromClientEvent; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.world.ChunkLoadingCallback; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +import org.apache.logging.log4j.LogManager; + +public class ConnectionEvents +{ + + private static boolean clientConnected = false; + + static + { + EnumConnectionState.STATES_BY_CLASS.put(PacketSimple.class, EnumConnectionState.PLAY); + registerPacket(EnumPacketDirection.CLIENTBOUND, PacketSimple.class); + } + + protected static EnumConnectionState registerPacket(EnumPacketDirection direction, Class> packetClass) + { + BiMap>> bimap = (BiMap>>) EnumConnectionState.PLAY.directionMaps.get(direction); + + if (bimap == null) + { + bimap = HashBiMap.create(); + EnumConnectionState.PLAY.directionMaps.put(direction, bimap); + } + + if (bimap.containsValue(packetClass)) + { + String s = direction + " packet " + packetClass + " is already known to ID " + bimap.inverse().get(packetClass); + LogManager.getLogger().fatal(s); + throw new IllegalArgumentException(s); + } else + { + bimap.put(Integer.valueOf(bimap.size()), packetClass); + return EnumConnectionState.PLAY; + } + } + + @SubscribeEvent + public void onPlayerLogin(PlayerLoggedInEvent event) + { + ChunkLoadingCallback.onPlayerLogin(event.player); + + if (event.player instanceof EntityPlayerMP) + { + EntityPlayerMP thePlayer = (EntityPlayerMP) event.player; + GCPlayerStats stats = GCPlayerStats.get(thePlayer); + SpaceStationWorldData.checkAllStations(thePlayer, stats); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_CLIENT_ID, GCCoreUtil.getDimensionID(thePlayer.world), new Object[] + {WorldUtil.spaceStationDataToString(stats.getSpaceStationDimensionData())}), thePlayer); + SpaceRace raceForPlayer = SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(thePlayer)); + if (raceForPlayer != null) + { + SpaceRaceManager.sendSpaceRaceData(thePlayer.server, thePlayer, raceForPlayer); + } + } + + if (event.player.world.provider instanceof WorldProviderSpaceStation && event.player instanceof EntityPlayerMP) + { + ((WorldProviderSpaceStation) event.player.world.provider).getSpinManager().sendPackets((EntityPlayerMP) event.player); + } + } + + @SubscribeEvent + public void onConnectionReceived(ServerConnectionFromClientEvent event) + { + if (ConfigManagerCore.enableDebug) + { + Integer[] idList = (Integer[]) WorldUtil.getPlanetList().get(0); + String ids = ""; + for (int j = 0; j < idList.length; j++) + { + ids += idList[j].toString() + " "; + } + GalacticraftCore.logger.info("Galacticraft server sending dimension IDs to connecting client: " + ids); + } + event.getManager().sendPacket(ConnectionPacket.createDimPacket(WorldUtil.getPlanetListInts())); + event.getManager().sendPacket(ConnectionPacket.createSSPacket(WorldUtil.getSpaceStationListInts())); + event.getManager().sendPacket(ConnectionPacket.createConfigPacket(ConfigManagerCore.getServerConfigOverride())); + } + + @SubscribeEvent + public void onConnectionOpened(ClientConnectedToServerEvent event) + { + if (!event.isLocal()) + { + ConnectionEvents.clientConnected = true; + } + } + + @SubscribeEvent + public void onConnectionClosed(ClientDisconnectionFromServerEvent event) + { + TickHandlerClient.menuReset = true; + if (ConnectionEvents.clientConnected) + { + ConnectionEvents.clientConnected = false; + WorldUtil.unregisterPlanets(); + WorldUtil.unregisterSpaceStations(); + ConfigManagerCore.restoreClientConfigOverrideable(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionPacket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionPacket.java new file mode 100644 index 00000000..03f801dc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/ConnectionPacket.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.PacketBuffer; + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.network.FMLEventChannel; +import net.minecraftforge.fml.common.network.FMLNetworkEvent; +import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +public class ConnectionPacket +{ + + public static final String CHANNEL = "galacticraft"; + public static FMLEventChannel bus; + + public void handle(ByteBuf payload, EntityPlayer player) + { + int packetId = payload.readByte(); + List data = new ArrayList(); + switch (packetId) + { + case 101: + int length = payload.readInt(); + for (int i = 0; i < length; i++) + { + data.add(payload.readInt()); + } + WorldUtil.decodePlanetsListClient(data); + break; + case 102: + int llength = payload.readInt(); + for (int i = 0; i < llength; i++) + { + data.add(payload.readInt()); + } + WorldUtil.decodeSpaceStationListClient(data); + break; + case 103: + try + { + data = NetworkUtil.decodeData(EnumSimplePacket.C_UPDATE_CONFIGS.getDecodeClasses(), payload); + ConfigManagerCore.saveClientConfigOverrideable(); + ConfigManagerCore.setConfigOverride(data); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("Server-set configs received OK on client."); + } + } catch (Exception e) + { + System.err.println("[Galacticraft] Error handling connection packet - maybe the player's Galacticraft version does not match the server version?"); + e.printStackTrace(); + } + break; + default: + } + if (payload.readInt() != 3519) + { + GalacticraftCore.logger.error("Packet completion problem for connection packet " + packetId + " - maybe the player's Galacticraft version does not match the server version?"); + } + } + + public static FMLProxyPacket createDimPacket(Integer[] dims) + { + ArrayList data = new ArrayList<>(); + for (Integer dim : dims) + { + data.add(dim); + } + return createPacket((byte) 101, data); + } + + public static FMLProxyPacket createSSPacket(Integer[] dims) + { + ArrayList data = new ArrayList<>(); + Collections.addAll(data, dims); + return createPacket((byte) 102, data); + } + + public static FMLProxyPacket createPacket(byte packetId, Collection data) + { + PacketBuffer payload = new PacketBuffer(Unpooled.buffer()); + + payload.writeByte(packetId); + payload.writeInt(data.size()); + for (Integer i : data) + { + payload.writeInt(i.intValue()); + } + payload.writeInt(3519); // signature + return new FMLProxyPacket(payload, CHANNEL); + } + + public static FMLProxyPacket createConfigPacket(List data) + { + PacketBuffer payload = new PacketBuffer(Unpooled.buffer()); + payload.writeByte(103); + try + { + NetworkUtil.encodeData(payload, data); + } catch (IOException e) + { + e.printStackTrace(); + } + payload.writeInt(3519); // signature + return new FMLProxyPacket(payload, CHANNEL); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onPacketData(FMLNetworkEvent.ClientCustomPacketEvent event) + { + FMLProxyPacket pkt = event.getPacket(); + + onFMLProxyPacketData(event.getManager(), pkt, Minecraft.getMinecraft().player); + } + + @SubscribeEvent + public void onPacketData(FMLNetworkEvent.ServerCustomPacketEvent event) + { + FMLProxyPacket pkt = event.getPacket(); + + onFMLProxyPacketData(event.getManager(), pkt, ((NetHandlerPlayServer) event.getHandler()).player); + } + + public void onFMLProxyPacketData(NetworkManager manager, FMLProxyPacket packet, EntityPlayer player) + { + try + { + if ((packet == null) || (packet.payload() == null)) + { + throw new RuntimeException("Empty packet sent to Galacticraft channel"); + } + ByteBuf data = packet.payload(); + this.handle(data, player); + } catch (Exception e) + { + GalacticraftCore.logger.error("GC login packet handler: Failed to read packet"); + GalacticraftCore.logger.error(e.toString()); + e.printStackTrace(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftChannelHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftChannelHandler.java new file mode 100644 index 00000000..b0077f97 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftChannelHandler.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.EnumMap; + +import net.minecraft.entity.player.EntityPlayerMP; + +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.network.FMLEmbeddedChannel; +import net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec; +import net.minecraftforge.fml.common.network.FMLOutboundHandler; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; + +public class GalacticraftChannelHandler extends FMLIndexedMessageToMessageCodec +{ + + private EnumMap channels; + + private GalacticraftChannelHandler() + { + this.addDiscriminator(0, PacketSimple.class); + this.addDiscriminator(1, PacketRotateRocket.class); + this.addDiscriminator(2, PacketDynamic.class); + this.addDiscriminator(3, PacketFluidNetworkUpdate.class); + this.addDiscriminator(4, PacketEntityUpdate.class); + this.addDiscriminator(5, PacketDynamicInventory.class); + } + + public static GalacticraftChannelHandler init() + { + GalacticraftChannelHandler channelHandler = new GalacticraftChannelHandler(); + channelHandler.channels = NetworkRegistry.INSTANCE.newChannel(Constants.MOD_ID_CORE, channelHandler, new GalacticraftPacketHandler()); + return channelHandler; + } + + @Override + public void encodeInto(ChannelHandlerContext ctx, IPacket msg, ByteBuf target) throws Exception + { + msg.encodeInto(target); + } + + @Override + public void decodeInto(ChannelHandlerContext ctx, ByteBuf source, IPacket msg) + { + try + { + msg.decodeInto(source); + } catch (IndexOutOfBoundsException ex) + { + GalacticraftCore.logger.error("Incomplete Galacticraft entity packet: dimension " + msg.getDimensionID()); + } + } + + /** + * Send this message to everyone.

Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + */ + public void sendToAll(IPacket message) + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALL); + this.channels.get(Side.SERVER).writeOutbound(message); + } + + /** + * Send this message to the specified player.

Adapted from CPW's code + * in cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + * @param player The player to send it to + */ + public void sendTo(IPacket message, EntityPlayerMP player) + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.PLAYER); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(player); + this.channels.get(Side.SERVER).writeOutbound(message); + } + + /** + * Send this message to everyone within a certain range of a point.

+ * Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + * @param point The + * {@link net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint} + * around which to send + */ + public void sendToAllAround(IPacket message, NetworkRegistry.TargetPoint point) + { + try + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(point); + this.channels.get(Side.SERVER).writeOutbound(message); + } catch (Exception e) + { + GalacticraftCore.logger.error("Forge error when sending network packet to nearby players - this is not a Galacticraft bug, does another mod make fake players?"); + e.printStackTrace(); + } + } + + /** + * Send this message to everyone within the supplied dimension.

Adapted + * from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + * @param dimensionID The dimension id to target + */ + public void sendToDimension(IPacket message, int dimensionID) + { + try + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.DIMENSION); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(dimensionID); + this.channels.get(Side.SERVER).writeOutbound(message); + } catch (Exception e) + { + GalacticraftCore.logger.error("Forge error when sending network packet to all players in dimension - this is not a Galacticraft bug, does another mod make fake players?"); + e.printStackTrace(); + } + } + + /** + * Send this message to the server.

Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + */ + public void sendToServer(IPacket message) + { + if (FMLCommonHandler.instance().getSide() != Side.CLIENT) + { + return; + } + this.channels.get(Side.CLIENT).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.TOSERVER); + this.channels.get(Side.CLIENT).writeOutbound(message); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftPacketHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftPacketHandler.java new file mode 100644 index 00000000..0476b5f3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/GalacticraftPacketHandler.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.Map; +import java.util.Queue; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.INetHandler; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.google.common.collect.Queues; + +import io.netty.channel.ChannelHandler.Sharable; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; + +@Sharable +public class GalacticraftPacketHandler extends SimpleChannelInboundHandler +{ + + private final Map>> packetMap; + private static volatile int livePacketCount = 0; + + public GalacticraftPacketHandler() + { + Map>> map = Maps.newHashMap(); + for (Side side : Side.values()) + { + Map> sideMap = new ConcurrentHashMap>(); + map.put(side, sideMap); + } + + packetMap = ImmutableMap.copyOf(map); + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + TickHandlerClient.addPacketHandler(this); + } + TickHandlerServer.addPacketHandler(this); + } + + public void unload(World world) + { + Side side = world.isRemote ? Side.CLIENT : Side.SERVER; + int dimId = GCCoreUtil.getDimensionID(world); + Queue queue = getQueue(side, dimId); + queue.clear(); + } + + public void tick(World world) + { + PacketPlayerPair pair; + Side side = world.isRemote ? Side.CLIENT : Side.SERVER; + int dimID = GCCoreUtil.getDimensionID(world); + Queue queue = getQueue(side, dimID); + while ((pair = queue.poll()) != null) + { + switch (side) + { + case CLIENT: + pair.getPacket().handleClientSide(pair.getPlayer()); + break; + case SERVER: + pair.getPacket().handleServerSide(pair.getPlayer()); + break; + } + } + } + + @Override + protected void channelRead0(ChannelHandlerContext ctx, IPacket msg) throws Exception + { + INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get(); + Side side = ctx.channel().attr(NetworkRegistry.CHANNEL_SOURCE).get(); + EntityPlayer player = GalacticraftCore.proxy.getPlayerFromNetHandler(netHandler); + + if (player == null) + { + return; + } + + if (side != null) + { + getQueue(side, msg.getDimensionID()).add(new PacketPlayerPair(msg, player)); + livePacketCount++; + } + } + + private Queue getQueue(Side side, int dimID) + { + Map> map = packetMap.get(side); + if (!map.containsKey(dimID)) + { + map.put(dimID, Queues.newConcurrentLinkedQueue()); + } + return map.get(dimID); + } + + private final class PacketPlayerPair + { + + private IPacket packet; + private EntityPlayer player; + + public PacketPlayerPair(IPacket packet, EntityPlayer player) + { + this.packet = packet; + this.player = player; + } + + public IPacket getPacket() + { + return packet; + } + + public void setPacket(IPacket packet) + { + this.packet = packet; + } + + public EntityPlayer getPlayer() + { + return player; + } + + public void setPlayer(EntityPlayer player) + { + this.player = player; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacket.java new file mode 100644 index 00000000..f63b987a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacket.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import net.minecraft.entity.player.EntityPlayer; + +import io.netty.buffer.ByteBuf; + +public interface IPacket +{ + + void encodeInto(ByteBuf buffer); + + void decodeInto(ByteBuf buffer); + + void handleClientSide(EntityPlayer player); + + void handleServerSide(EntityPlayer player); + + int getDimensionID(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacketReceiver.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacketReceiver.java new file mode 100644 index 00000000..d1bc472f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/IPacketReceiver.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.ArrayList; + +import io.netty.buffer.ByteBuf; + +public interface IPacketReceiver +{ + + /** + * Note this can be called during the init constructor of the entity's + * superclass, if this is a subclass of the IPacketReceiver entity. So make + * sure any fields referenced in getNetworkedData() are either in the + * superclass, or add some null checks!! + */ + void getNetworkedData(ArrayList sendData); + + void decodePacketdata(ByteBuf buffer); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/NetworkUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/NetworkUtil.java new file mode 100644 index 00000000..6140c150 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/NetworkUtil.java @@ -0,0 +1,603 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collection; +import java.util.UUID; + +import net.minecraft.entity.Entity; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.common.network.ByteBufUtils; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorage; +import micdoodle8.mods.galacticraft.core.tile.FluidTankGC; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; + +import com.google.common.math.DoubleMath; + +import io.netty.buffer.ByteBuf; + +public class NetworkUtil +{ + + public static void encodeData(ByteBuf buffer, Collection sendData) throws IOException + { + for (Object dataValue : sendData) + { + if (dataValue instanceof Integer) + { + buffer.writeInt((Integer) dataValue); + } else if (dataValue instanceof Float) + { + buffer.writeFloat((Float) dataValue); + } else if (dataValue instanceof Double) + { + buffer.writeDouble((Double) dataValue); + } else if (dataValue instanceof Byte) + { + buffer.writeByte((Byte) dataValue); + } else if (dataValue instanceof Boolean) + { + buffer.writeBoolean((Boolean) dataValue); + } else if (dataValue instanceof String) + { + ByteBufUtils.writeUTF8String(buffer, (String) dataValue); + } else if (dataValue instanceof Short) + { + buffer.writeShort((Short) dataValue); + } else if (dataValue instanceof Long) + { + buffer.writeLong((Long) dataValue); + } else if (dataValue instanceof EnergyStorage) + { + EnergyStorage storage = (EnergyStorage) dataValue; + buffer.writeFloat(storage.getCapacityGC()); + buffer.writeFloat(storage.getMaxReceive()); + buffer.writeFloat(storage.getMaxExtract()); + buffer.writeFloat(storage.getEnergyStoredGC()); + } else if (dataValue instanceof NBTTagCompound) + { + NetworkUtil.writeNBTTagCompound((NBTTagCompound) dataValue, buffer); + } else if (dataValue instanceof FluidTankGC) + { + FluidTankGC tankGC = (FluidTankGC) dataValue; + BlockPos pos = tankGC.getTilePosition(); + buffer.writeInt(pos.getX()); + buffer.writeInt(pos.getY()); + buffer.writeInt(pos.getZ()); + NetworkUtil.writeFluidTank((FluidTank) dataValue, buffer); + } else if (dataValue instanceof FluidTank) + { + NetworkUtil.writeFluidTank((FluidTank) dataValue, buffer); + } else if (dataValue instanceof Entity) + { + buffer.writeInt(((Entity) dataValue).getEntityId()); + } else if (dataValue instanceof Vector3) + { + buffer.writeDouble(((Vector3) dataValue).x); + buffer.writeDouble(((Vector3) dataValue).y); + buffer.writeDouble(((Vector3) dataValue).z); + } else if (dataValue instanceof BlockVec3) + { + buffer.writeInt(((BlockVec3) dataValue).x); + buffer.writeInt(((BlockVec3) dataValue).y); + buffer.writeInt(((BlockVec3) dataValue).z); + } else if (dataValue instanceof byte[]) + { + int size = ((byte[]) dataValue).length; + buffer.writeInt(size); + int pos = buffer.writerIndex(); + buffer.capacity(pos + size); + buffer.setBytes(pos, (byte[]) dataValue); + buffer.writerIndex(pos + size); + } else if (dataValue instanceof UUID) + { + buffer.writeLong(((UUID) dataValue).getMostSignificantBits()); + buffer.writeLong(((UUID) dataValue).getLeastSignificantBits()); + } else if (dataValue instanceof Collection) + { + NetworkUtil.encodeData(buffer, (Collection) dataValue); + } else if (dataValue instanceof FlagData) + { + buffer.writeInt(((FlagData) dataValue).getWidth()); + buffer.writeInt(((FlagData) dataValue).getHeight()); + + for (int i = 0; i < ((FlagData) dataValue).getWidth(); i++) + { + for (int j = 0; j < ((FlagData) dataValue).getHeight(); j++) + { + Vector3 vec = ((FlagData) dataValue).getColorAt(i, j); + buffer.writeByte((byte) (vec.x * 256 - 128)); + buffer.writeByte((byte) (vec.y * 256 - 128)); + buffer.writeByte((byte) (vec.z * 256 - 128)); + } + } + } else if (dataValue instanceof Integer[]) + { + Integer[] array = (Integer[]) dataValue; + buffer.writeInt(array.length); + + for (int i = 0; i < array.length; i++) + { + buffer.writeInt(array[i]); + } + } else if (dataValue instanceof String[]) + { + String[] array = (String[]) dataValue; + buffer.writeInt(array.length); + + for (int i = 0; i < array.length; i++) + { + ByteBufUtils.writeUTF8String(buffer, array[i]); + } + } else if (dataValue instanceof Footprint[]) + { + Footprint[] array = (Footprint[]) dataValue; + buffer.writeInt(array.length); + + for (int i = 0; i < array.length; i++) + { + buffer.writeInt(array[i].dimension); + buffer.writeFloat((float) array[i].position.x); + buffer.writeFloat((float) array[i].position.y + 1); + buffer.writeFloat((float) array[i].position.z); + buffer.writeFloat(array[i].rotation); + buffer.writeShort(array[i].age); + ByteBufUtils.writeUTF8String(buffer, array[i].owner); + } + } else if (dataValue instanceof EnumFacing) + { + buffer.writeInt(((EnumFacing) dataValue).getIndex()); + } else if (dataValue instanceof BlockPos) + { + BlockPos pos = (BlockPos) dataValue; + buffer.writeInt(pos.getX()); + buffer.writeInt(pos.getY()); + buffer.writeInt(pos.getZ()); + } else if (dataValue instanceof EnumDyeColor) + { + buffer.writeInt(((EnumDyeColor) dataValue).getDyeDamage()); + } else + { + if (dataValue == null) + { + GalacticraftCore.logger.error("Cannot construct PacketSimple with null data, this is a bug."); + } + GalacticraftCore.logger.info("Could not find data type to encode!: " + dataValue); + } + } + } + + public static ArrayList decodeData(Class[] types, ByteBuf buffer) + { + ArrayList objList = new ArrayList(); + + for (Class clazz : types) + { + if (clazz.equals(Integer.class)) + { + objList.add(buffer.readInt()); + } else if (clazz.equals(Float.class)) + { + objList.add(buffer.readFloat()); + } else if (clazz.equals(Double.class)) + { + objList.add(buffer.readDouble()); + } else if (clazz.equals(Byte.class)) + { + objList.add(buffer.readByte()); + } else if (clazz.equals(Boolean.class)) + { + objList.add(buffer.readBoolean()); + } else if (clazz.equals(String.class)) + { + objList.add(ByteBufUtils.readUTF8String(buffer)); + } else if (clazz.equals(Short.class)) + { + objList.add(buffer.readShort()); + } else if (clazz.equals(Long.class)) + { + objList.add(buffer.readLong()); + } else if (clazz.equals(byte[].class)) + { + int size = buffer.readInt(); + byte[] bytes = new byte[size]; + buffer.readBytes(bytes, 0, size); + objList.add(bytes); + } else if (clazz.equals(EnergyStorage.class)) + { + EnergyStorage storage = new EnergyStorage(buffer.readFloat(), buffer.readFloat(), buffer.readFloat()); + storage.setEnergyStored(buffer.readFloat()); + objList.add(storage); + } else if (clazz.equals(NBTTagCompound.class)) + { + try + { + objList.add(NetworkUtil.readNBTTagCompound(buffer)); + } catch (IOException e) + { + e.printStackTrace(); + } + } else if (clazz.equals(BlockVec3.class)) + { + objList.add(new BlockVec3(buffer.readInt(), buffer.readInt(), buffer.readInt())); + } else if (clazz.equals(UUID.class)) + { + objList.add(new UUID(buffer.readLong(), buffer.readLong())); + } else if (clazz.equals(Vector3.class)) + { + objList.add(new Vector3(buffer.readDouble(), buffer.readDouble(), buffer.readDouble())); + } else if (clazz.equals(FlagData.class)) + { + int width = buffer.readInt(); + int height = buffer.readInt(); + FlagData flagData = new FlagData(width, height); + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + flagData.setColorAt(i, j, new Vector3(buffer.readByte() + 128, buffer.readByte() + 128, buffer.readByte() + 128)); + } + } + + objList.add(flagData); + } else if (clazz.equals(Integer[].class)) + { + int size = buffer.readInt(); + + for (int i = 0; i < size; i++) + { + objList.add(buffer.readInt()); + } + } else if (clazz.equals(String[].class)) + { + int size = buffer.readInt(); + + for (int i = 0; i < size; i++) + { + objList.add(ByteBufUtils.readUTF8String(buffer)); + } + } else if (clazz.equals(Footprint[].class)) + { + int size = buffer.readInt(); + + for (int i = 0; i < size; i++) + { + objList.add(new Footprint(buffer.readInt(), new Vector3(buffer.readFloat(), buffer.readFloat(), buffer.readFloat()), buffer.readFloat(), buffer.readShort(), + ByteBufUtils.readUTF8String(buffer), -1)); + } + } else if (clazz.equals(EnumFacing.class)) + { + objList.add(EnumFacing.byIndex(buffer.readInt())); + } else if (clazz.equals(BlockPos.class)) + { + objList.add(new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt())); + } else if (clazz.equals(EnumDyeColor.class)) + { + objList.add(EnumDyeColor.byDyeDamage(buffer.readInt())); + } + } + + return objList; + } + + public static Object getFieldValueFromStream(Field field, ByteBuf buffer, World world) throws IOException + { + Class dataValue = field.getType(); + + if (dataValue.equals(int.class)) + { + return buffer.readInt(); + } else if (dataValue.equals(float.class)) + { + return buffer.readFloat(); + } else if (dataValue.equals(double.class)) + { + return buffer.readDouble(); + } else if (dataValue.equals(byte.class)) + { + return buffer.readByte(); + } else if (dataValue.equals(boolean.class)) + { + return buffer.readBoolean(); + } else if (dataValue.equals(String.class)) + { + return ByteBufUtils.readUTF8String(buffer); + } else if (dataValue.equals(short.class)) + { + return buffer.readShort(); + } else if (dataValue.equals(Long.class)) + { + return buffer.readLong(); + } else if (dataValue.equals(NBTTagCompound.class)) + { + return NetworkUtil.readNBTTagCompound(buffer); + } else if (dataValue.equals(FluidTankGC.class)) + { + return NetworkUtil.readFluidTankGC(buffer, world); + } else if (dataValue.equals(FluidTank.class)) + { + return NetworkUtil.readFluidTank(buffer); + } else if (dataValue.equals(Vector3.class)) + { + return new Vector3(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()); + } else if (dataValue.equals(BlockVec3.class)) + { + return new BlockVec3(buffer.readInt(), buffer.readInt(), buffer.readInt()); + } else if (dataValue.equals(UUID.class)) + { + return new UUID(buffer.readLong(), buffer.readLong()); + } else if (dataValue.equals(byte[].class)) + { + byte[] bytes = new byte[buffer.readInt()]; + for (int i = 0; i < bytes.length; i++) + { + bytes[i] = buffer.readByte(); + } + return bytes; + } else if (dataValue.equals(EnergyStorage.class)) + { + float capacity = buffer.readFloat(); + float maxReceive = buffer.readFloat(); + float maxExtract = buffer.readFloat(); + EnergyStorage storage = new EnergyStorage(capacity, maxReceive, maxExtract); + storage.setEnergyStored(buffer.readFloat()); + return storage; + } else if (dataValue.equals(EnumFacing.class)) + { + return EnumFacing.byIndex(buffer.readInt()); + } else if (dataValue.equals(BlockPos.class)) + { + return new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + } else if (dataValue.equals(EnumDyeColor.class)) + { + return EnumDyeColor.byDyeDamage(buffer.readInt()); + } else + { + Class c = dataValue; + + while (c != null) + { + if (c.equals(Entity.class)) + { + return world.getEntityByID(buffer.readInt()); + } + + c = c.getSuperclass(); + } + } + + throw new NullPointerException("Field type not found: " + field.getType().getSimpleName()); + } + + public static ItemStack readItemStack(ByteBuf buffer) throws IOException + { + ItemStack itemstack = ItemStack.EMPTY; + short itemID = buffer.readShort(); + + if (itemID >= 0) + { + byte stackSize = buffer.readByte(); + short meta = buffer.readShort(); + itemstack = new ItemStack(Item.getItemById(itemID), stackSize, meta); + if (buffer.readBoolean()) + { + itemstack.setTagCompound(readNBTTagCompound(buffer)); + } + } + + return itemstack; + } + + public static void writeItemStack(ItemStack itemStack, ByteBuf buffer) throws IOException + { + if (itemStack.isEmpty()) + { + buffer.writeShort(-1); + } else + { + buffer.writeShort(Item.getIdFromItem(itemStack.getItem())); + buffer.writeByte(itemStack.getCount()); + buffer.writeShort(itemStack.getItemDamage()); + NBTTagCompound nbttagcompound = null; + + if (itemStack.getItem().isDamageable() || itemStack.getItem().getShareTag()) + { + nbttagcompound = itemStack.getTagCompound(); + } + + buffer.writeBoolean(nbttagcompound != null); + if (nbttagcompound != null) + { + NetworkUtil.writeNBTTagCompound(nbttagcompound, buffer); + } + } + } + + public static NBTTagCompound readNBTTagCompound(ByteBuf buffer) throws IOException + { + try + { + int length = buffer.readInt(); + byte[] compressed = new byte[length]; + buffer.readBytes(compressed); + ByteArrayInputStream bais = new ByteArrayInputStream(compressed); + return CompressedStreamTools.readCompressed(bais); + } catch (Exception e) + { + e.printStackTrace(); + return null; + } + } + + public static void writeNBTTagCompound(NBTTagCompound nbt, ByteBuf buffer) throws IOException + { + try + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + CompressedStreamTools.writeCompressed(nbt, baos); + byte[] compressed = baos.toByteArray(); + buffer.writeInt(compressed.length); + buffer.writeBytes(compressed); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + public static void writeFluidTank(FluidTank fluidTank, ByteBuf buffer) throws IOException + { + if (fluidTank == null) + { + buffer.writeInt(0); + ByteBufUtils.writeUTF8String(buffer, ""); + buffer.writeInt(0); + } else + { + buffer.writeInt(fluidTank.getCapacity()); + ByteBufUtils.writeUTF8String(buffer, fluidTank.getFluid() == null ? "" : fluidTank.getFluid().getFluid().getName()); + buffer.writeInt(fluidTank.getFluidAmount()); + } + } + + public static FluidTankGC readFluidTankGC(ByteBuf buffer, World world) throws IOException + { + BlockPos pos = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + TileEntity tile = world.getTileEntity(pos); + int capacity = buffer.readInt(); + String fluidName = ByteBufUtils.readUTF8String(buffer); + FluidTankGC fluidTank = new FluidTankGC(capacity, tile); + int amount = buffer.readInt(); + + if (fluidName.equals("")) + { + fluidTank.setFluid(null); + } else + { + Fluid fluid = FluidRegistry.getFluid(fluidName); + fluidTank.setFluid(new FluidStack(fluid, amount)); + } + + return fluidTank; + } + + public static FluidTank readFluidTank(ByteBuf buffer) throws IOException + { + int capacity = buffer.readInt(); + String fluidName = ByteBufUtils.readUTF8String(buffer); + FluidTank fluidTank = new FluidTank(capacity); + int amount = buffer.readInt(); + + if (fluidName.equals("")) + { + fluidTank.setFluid(null); + } else + { + Fluid fluid = FluidRegistry.getFluid(fluidName); + fluidTank.setFluid(new FluidStack(fluid, amount)); + } + + return fluidTank; + } + + public static boolean fuzzyEquals(Object a, Object b) + { + if ((a == null) != (b == null)) + { + return false; + } else if (a == null) + { + return true; + } else if (a instanceof Float && b instanceof Float) + { + float af = (Float) a; + float bf = (Float) b; + return af == bf || Math.abs(af - bf) < 0.01F; + } else if (a instanceof Double && b instanceof Double) + { + return DoubleMath.fuzzyEquals((Double) a, (Double) b, 0.01); + } else if (a instanceof Entity && b instanceof Entity) + { + Entity a2 = (Entity) a; + Entity b2 = (Entity) b; + return fuzzyEquals(a2.getEntityId(), b2.getEntityId()); + } else if (a instanceof Vector3 && b instanceof Vector3) + { + Vector3 a2 = (Vector3) a; + Vector3 b2 = (Vector3) b; + return fuzzyEquals(a2.x, b2.x) && fuzzyEquals(a2.y, b2.y) && fuzzyEquals(a2.z, b2.z); + } else if (a instanceof EnergyStorage && b instanceof EnergyStorage) + { + EnergyStorage a2 = (EnergyStorage) a; + EnergyStorage b2 = (EnergyStorage) b; + return fuzzyEquals(a2.getEnergyStoredGC(), b2.getEnergyStoredGC()) && fuzzyEquals(a2.getCapacityGC(), b2.getCapacityGC()) && fuzzyEquals(a2.getMaxReceive(), b2.getMaxReceive()) + && fuzzyEquals(a2.getMaxExtract(), b2.getMaxExtract()); + } else if (a instanceof FluidTank && b instanceof FluidTank) + { + FluidTank a2 = (FluidTank) a; + FluidTank b2 = (FluidTank) b; + FluidStack fluidA = a2.getFluid(); + FluidStack fluidB = b2.getFluid(); + return fuzzyEquals(a2.getCapacity(), b2.getCapacity()) && fuzzyEquals(fluidA != null ? fluidA.getFluid().getName() : "", fluidB != null ? fluidB.getFluid().getName() : "") + && fuzzyEquals(a2.getFluidAmount(), b2.getFluidAmount()); + } else + { + return a.equals(b); + } + } + + public static Object cloneNetworkedObject(Object a) + { + // We only need to clone mutable objects + if (a instanceof EnergyStorage) + { + EnergyStorage prevStorage = (EnergyStorage) a; + EnergyStorage storage = new EnergyStorage(prevStorage.getCapacityGC(), prevStorage.getMaxReceive(), prevStorage.getMaxExtract()); + storage.setEnergyStored(prevStorage.getEnergyStoredGC()); + return storage; + } else if (a instanceof FluidTankGC) + { + FluidTankGC prevTank = (FluidTankGC) a; + FluidTankGC tank = new FluidTankGC(prevTank.getFluid(), prevTank.getCapacity(), prevTank.getTile()); + return tank; + } else if (a instanceof FluidTank) + { + FluidTank prevTank = (FluidTank) a; + FluidStack prevFluid = prevTank.getFluid(); + prevFluid = prevFluid == null ? null : prevFluid.copy(); + FluidTank tank = new FluidTank(prevFluid, prevTank.getCapacity()); + return tank; + } else + { + return a; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketBase.java new file mode 100644 index 00000000..0779109c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketBase.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import io.netty.buffer.ByteBuf; + +public abstract class PacketBase implements IPacket +{ + + public static final int INVALID_DIMENSION_ID = Integer.MIN_VALUE + 12; + private int dimensionID; + + public PacketBase() + { + this.dimensionID = INVALID_DIMENSION_ID; + } + + public PacketBase(int dimensionID) + { + this.dimensionID = dimensionID; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + if (dimensionID == INVALID_DIMENSION_ID) + { + throw new IllegalStateException("Invalid Dimension ID! [GC]"); + } + buffer.writeInt(this.dimensionID); + } + + @Override + public void decodeInto(ByteBuf buffer) + { + this.dimensionID = buffer.readInt(); + } + + @Override + public int getDimensionID() + { + return dimensionID; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamic.java new file mode 100644 index 00000000..aed31999 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamic.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.IOException; +import java.util.ArrayList; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +/** + * PacketDynamic is used for updating data for regularly updating Entities and + * TileEntities Two types of PacketDynamic: Type 0: the identifier is an Entity + * ID Type 1: the identifier is a TileEntity's BlockPos + */ +public class PacketDynamic extends PacketBase +{ + + private int type; + private Object identifier; + private ArrayList sendData; + private ByteBuf payloadData; + + public PacketDynamic() + { + super(); + } + + public PacketDynamic(Entity entity) + { + super(GCCoreUtil.getDimensionID(entity.world)); + assert entity instanceof IPacketReceiver : "Entity does not implement " + IPacketReceiver.class.getSimpleName(); + this.type = 0; + this.identifier = new Integer(entity.getEntityId()); + this.sendData = new ArrayList(); + ((IPacketReceiver) entity).getNetworkedData(this.sendData); + } + + public PacketDynamic(TileEntity tile) + { + super(GCCoreUtil.getDimensionID(tile.getWorld())); + assert tile instanceof IPacketReceiver : "TileEntity does not implement " + IPacketReceiver.class.getSimpleName(); + this.type = 1; + this.identifier = tile.getPos(); + this.sendData = new ArrayList(); + ((IPacketReceiver) tile).getNetworkedData(this.sendData); + } + + public boolean isEmpty() + { + return sendData.isEmpty(); + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type); + + switch (this.type) + { + case 0: + buffer.writeInt((Integer) this.identifier); + break; + case 1: + BlockPos bp = (BlockPos) this.identifier; + buffer.writeInt(bp.getX()); + buffer.writeInt(bp.getY()); + buffer.writeInt(bp.getZ()); + break; + } + + ByteBuf payloadData = Unpooled.buffer(); + + try + { + NetworkUtil.encodeData(payloadData, this.sendData); + } catch (IOException e) + { + e.printStackTrace(); + } + + int readableBytes = payloadData.readableBytes(); + buffer.writeInt(readableBytes); + buffer.writeBytes(payloadData); + } + + @Override + public void decodeInto(ByteBuf buffer) throws IndexOutOfBoundsException + { + super.decodeInto(buffer); + this.type = buffer.readInt(); +// World world = GalacticraftCore.proxy.getWorldForID(this.getDimensionID()); +// +// if (world == null) +// { +// GalacticraftCore.logger.error("Failed to get world for dimension ID: " + this.getDimensionID()); +// } +// + switch (this.type) + { + case 0: + this.identifier = new Integer(buffer.readInt()); + + int length = buffer.readInt(); + payloadData = Unpooled.copiedBuffer(buffer.readBytes(length)); +// if (entity instanceof IPacketReceiver && buffer.readableBytes() > 0) + break; + case 1: + this.identifier = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + + length = buffer.readInt(); + payloadData = Unpooled.copiedBuffer(buffer.readBytes(length)); + + break; + } + } + + @Override + public void handleClientSide(EntityPlayer player) + { + this.handleData(Side.CLIENT, player); + } + + @Override + public void handleServerSide(EntityPlayer player) + { + this.handleData(Side.SERVER, player); + } + + private void handleData(Side side, EntityPlayer player) + { + switch (this.type) + { + case 0: + Entity entity = player.world.getEntityByID((Integer) this.identifier); + + if (entity instanceof IPacketReceiver) + { + if (this.payloadData.readableBytes() > 0) + { + ((IPacketReceiver) entity).decodePacketdata(payloadData); + } + + // Treat any packet received by a server from a client as an + // update request specifically to that client + if (side == Side.SERVER && player instanceof EntityPlayerMP && entity != null) + { + GalacticraftCore.packetPipeline.sendTo(new PacketDynamic(entity), (EntityPlayerMP) player); + } + } + break; + + case 1: + BlockPos bp = (BlockPos) this.identifier; + if (player.world.isBlockLoaded(bp, false)) + { + TileEntity tile = player.world.getTileEntity(bp); + + if (tile instanceof IPacketReceiver) + { + if (this.payloadData.readableBytes() > 0) + { + ((IPacketReceiver) tile).decodePacketdata(payloadData); + } + + // Treat any packet received by a server from a client + // as an update request specifically to that client + if (side == Side.SERVER && player instanceof EntityPlayerMP && tile != null) + { + GalacticraftCore.packetPipeline.sendTo(new PacketDynamic(tile), (EntityPlayerMP) player); + } + } + } + break; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamicInventory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamicInventory.java new file mode 100644 index 00000000..6a14f56a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketDynamicInventory.java @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.IOException; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class PacketDynamicInventory extends PacketBase +{ + + private int type; + private Object identifier; + private ItemStack[] stacks; + + public PacketDynamicInventory() + { + super(); + } + + public PacketDynamicInventory(Entity entity) + { + super(GCCoreUtil.getDimensionID(entity.world)); + assert entity instanceof IInventory : "Entity does not implement " + IInventory.class.getSimpleName(); + this.type = 0; + this.identifier = new Integer(entity.getEntityId()); + this.stacks = new ItemStack[((IInventory) entity).getSizeInventory()]; + + for (int i = 0; i < this.stacks.length; i++) + { + this.stacks[i] = ((IInventory) entity).getStackInSlot(i); + } + } + + public PacketDynamicInventory(TileEntity tile) + { + super(GCCoreUtil.getDimensionID(tile.getWorld())); + assert tile instanceof IInventory : "Tile does not implement " + IInventory.class.getSimpleName(); + IInventory chest = ((IInventory) tile); + this.type = 1; + this.identifier = tile.getPos(); + int size = chest.getSizeInventory(); + if (chest instanceof TileEntityCrafting) + { + this.stacks = new ItemStack[size + 1]; + this.stacks[size] = ((TileEntityCrafting) chest).getMemoryHeld(); + } else + this.stacks = new ItemStack[size]; + + for (int i = 0; i < size; i++) + { + this.stacks[i] = chest.getStackInSlot(i); + } + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type); + + switch (this.type) + { + case 0: + buffer.writeInt((Integer) this.identifier); + break; + case 1: + BlockPos pos = (BlockPos) this.identifier; + buffer.writeInt(pos.getX()); + buffer.writeInt(pos.getY()); + buffer.writeInt(pos.getZ()); + break; + } + + buffer.writeInt(this.stacks.length); + + for (int i = 0; i < this.stacks.length; i++) + { + try + { + NetworkUtil.writeItemStack(this.stacks[i], buffer); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = buffer.readInt(); + + switch (this.type) + { + case 0: + this.identifier = new Integer(buffer.readInt()); + break; + case 1: + this.identifier = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + break; + } + + this.stacks = new ItemStack[buffer.readInt()]; + + for (int i = 0; i < this.stacks.length; i++) + { + try + { + this.stacks[i] = NetworkUtil.readItemStack(buffer); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + + @Override + public void handleClientSide(EntityPlayer player) + { + if (player.world == null) + { + return; + } + + switch (this.type) + { + case 0: + Entity entity = player.world.getEntityByID((Integer) this.identifier); + + if (entity instanceof IInventorySettable) + { + this.setInventoryStacks((IInventorySettable) entity); + } + + break; + case 1: + TileEntity tile = player.world.getTileEntity((BlockPos) this.identifier); + + if (tile instanceof TileEntityCrafting) + { + ((TileEntityCrafting) tile).setStacksClientSide(this.stacks); + } else if (tile instanceof IInventorySettable) + { + this.setInventoryStacks((IInventorySettable) tile); + } + + break; + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + switch (this.type) + { + case 0: + Entity entity = player.world.getEntityByID((Integer) this.identifier); + + if (entity instanceof IInventorySettable) + { + GalacticraftCore.packetPipeline.sendTo(new PacketDynamicInventory(entity), (EntityPlayerMP) player); + } + + break; + case 1: + TileEntity tile = player.world.getTileEntity((BlockPos) this.identifier); + + if (tile instanceof IInventorySettable) + { + GalacticraftCore.packetPipeline.sendTo(new PacketDynamicInventory(tile), (EntityPlayerMP) player); + } + + break; + } + } + + private void setInventoryStacks(IInventorySettable inv) + { + inv.setSizeInventory(this.stacks.length); + + for (int i = 0; i < this.stacks.length; i++) + { + inv.setInventorySlotContents(i, this.stacks[i]); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketEntityUpdate.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketEntityUpdate.java new file mode 100644 index 00000000..61fad1e2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketEntityUpdate.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.UUID; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; + +import micdoodle8.mods.galacticraft.api.vector.Vector2; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class PacketEntityUpdate extends PacketBase +{ + + private int entityID; + private Vector3 position; + private float rotationYaw; + private float rotationPitch; + private Vector3 motion; + private boolean onGround; + + public PacketEntityUpdate() + { + super(); + } + + public PacketEntityUpdate(int entityID, Vector3 position, Vector2 rotation, Vector3 motion, boolean onGround, int dimID) + { + super(dimID); + this.entityID = entityID; + this.position = position; + this.rotationYaw = (float) rotation.x; + this.rotationPitch = (float) rotation.y; + this.motion = motion; + this.onGround = onGround; + } + + public PacketEntityUpdate(Entity entity) + { + this(entity.getEntityId(), new Vector3(entity.posX, entity.posY, entity.posZ), new Vector2(entity.rotationYaw, entity.rotationPitch), + new Vector3(entity.motionX, entity.motionY, entity.motionZ), entity.onGround, GCCoreUtil.getDimensionID(entity.world)); + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.entityID); + buffer.writeDouble(this.position.x); + buffer.writeDouble(this.position.y); + buffer.writeDouble(this.position.z); + buffer.writeFloat(this.rotationYaw); + buffer.writeFloat(this.rotationPitch); + buffer.writeDouble(this.motion.x); + buffer.writeDouble(this.motion.y); + buffer.writeDouble(this.motion.z); + buffer.writeBoolean(this.onGround); + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.entityID = buffer.readInt(); + this.position = new Vector3(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()); + this.rotationYaw = buffer.readFloat(); + this.rotationPitch = buffer.readFloat(); + this.motion = new Vector3(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()); + this.onGround = buffer.readBoolean(); + } + + @Override + public void handleClientSide(EntityPlayer player) + { + this.setEntityData(player); + } + + @Override + public void handleServerSide(EntityPlayer player) + { + this.setEntityData(player); + } + + private void setEntityData(EntityPlayer player) + { + Entity entity = player.world.getEntityByID(this.entityID); + + if (entity instanceof IEntityFullSync) + { + if (player.world.isRemote || player.getUniqueID().equals(((IEntityFullSync) entity).getOwnerUUID()) || ((IEntityFullSync) entity).getOwnerUUID() == null) + { + IEntityFullSync controllable = (IEntityFullSync) entity; + controllable.setPositionRotationAndMotion(this.position.x, this.position.y, this.position.z, this.rotationYaw, this.rotationPitch, this.motion.x, this.motion.y, this.motion.z, + this.onGround); + } + } + } + + public interface IEntityFullSync + { + + void setPositionRotationAndMotion(double x, double y, double z, float yaw, float pitch, double motX, double motY, double motZ, boolean onGround); + + UUID getOwnerUUID(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketFluidNetworkUpdate.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketFluidNetworkUpdate.java new file mode 100644 index 00000000..a90421bd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketFluidNetworkUpdate.java @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.util.Collection; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.common.network.ByteBufUtils; + +import micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; + +import com.google.common.collect.Sets; + +import io.netty.buffer.ByteBuf; + +public class PacketFluidNetworkUpdate extends PacketBase +{ + + private PacketType type; + private BlockPos pos; + + private FluidStack stack; + private Fluid fluidType; + private boolean didTransfer; + + private boolean newNetwork; + private Collection> transmittersAdded; + private Collection transmittersCoords; + + public PacketFluidNetworkUpdate() + { + } + + public static PacketFluidNetworkUpdate getFluidUpdate(int dimensionID, BlockPos pos, FluidStack stack, boolean didTransfer) + { + return new PacketFluidNetworkUpdate(PacketType.FLUID, dimensionID, pos, stack, didTransfer); + } + + public static PacketFluidNetworkUpdate getAddTransmitterUpdate(int dimensionID, BlockPos pos, boolean newNetwork, Collection> transmittersAdded) + { + return new PacketFluidNetworkUpdate(PacketType.ADD_TRANSMITTER, dimensionID, pos, newNetwork, transmittersAdded); + } + + private PacketFluidNetworkUpdate(PacketType type, int dimensionID, BlockPos pos, FluidStack stack, boolean didTransfer) + { + super(dimensionID); + this.type = type; + this.pos = pos; + this.stack = stack; + this.didTransfer = didTransfer; + } + + private PacketFluidNetworkUpdate(PacketType type, int dimensionID, BlockPos pos, boolean newNetwork, Collection> transmittersAdded) + { + super(dimensionID); + this.type = type; + this.pos = pos; + this.newNetwork = newNetwork; + this.transmittersAdded = transmittersAdded; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.pos.getX()); + buffer.writeInt(this.pos.getY()); + buffer.writeInt(this.pos.getZ()); + buffer.writeInt(this.type.ordinal()); + + switch (this.type) + { + case ADD_TRANSMITTER: + buffer.writeBoolean(this.newNetwork); + buffer.writeInt(this.transmittersAdded.size()); + + for (IBufferTransmitter transmitter : this.transmittersAdded) + { + TileEntity tile = (TileEntity) transmitter; + buffer.writeInt(tile.getPos().getX()); + buffer.writeInt(tile.getPos().getY()); + buffer.writeInt(tile.getPos().getZ()); + } + break; + case FLUID: + if (this.stack != null) + { + buffer.writeBoolean(true); + ByteBufUtils.writeUTF8String(buffer, FluidRegistry.getFluidName(this.stack)); + buffer.writeInt(this.stack.amount); + } else + { + buffer.writeBoolean(false); + } + + buffer.writeBoolean(this.didTransfer); + break; + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.pos = new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt()); + this.type = PacketType.values()[buffer.readInt()]; + + switch (this.type) + { + case ADD_TRANSMITTER: + this.newNetwork = buffer.readBoolean(); + this.transmittersCoords = Sets.newHashSet(); + int transmitterCount = buffer.readInt(); + + for (int i = 0; i < transmitterCount; ++i) + { + this.transmittersCoords.add(new BlockPos(buffer.readInt(), buffer.readInt(), buffer.readInt())); + } + break; + case FLUID: + if (buffer.readBoolean()) + { + this.fluidType = FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buffer)); + if (this.fluidType != null) + { + this.stack = new FluidStack(this.fluidType, buffer.readInt()); + } + } else + { + this.fluidType = null; + this.stack = null; + } + + this.didTransfer = buffer.readBoolean(); + break; + } + } + + @Override + public void handleClientSide(EntityPlayer player) + { + TileEntity tile = player.world.getTileEntity(this.pos); + + if (tile instanceof IBufferTransmitter) + { + IBufferTransmitter transmitter = (IBufferTransmitter) tile; + + switch (this.type) + { + case ADD_TRANSMITTER: + { + FluidNetwork network = transmitter.hasNetwork() && !this.newNetwork ? (FluidNetwork) transmitter.getNetwork() : new FluidNetwork(); + network.register(); + transmitter.setNetwork(network); + + for (BlockPos pos : this.transmittersCoords) + { + TileEntity transmitterTile = player.world.getTileEntity(pos); + + if (transmitterTile instanceof IBufferTransmitter) + { + ((IBufferTransmitter) transmitterTile).setNetwork(network); + } + } + + network.updateCapacity(); + } + break; + case FLUID: + if (transmitter.getNetwork() != null) + { + FluidNetwork network = (FluidNetwork) transmitter.getNetwork(); + + if (this.fluidType != null) + { + network.refFluid = this.fluidType; + } + + network.buffer = this.stack; + network.didTransfer = this.didTransfer; + } + break; + } + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + + } + + public enum PacketType + { + ADD_TRANSMITTER, FLUID, + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketRotateRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketRotateRocket.java new file mode 100644 index 00000000..5b70cfdc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketRotateRocket.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class PacketRotateRocket extends PacketBase +{ + + private int entityID; + private float entityPitch; + private float entityYaw; + + public PacketRotateRocket() + { + super(); + } + + public PacketRotateRocket(Entity rotateableEntity) + { + super(GCCoreUtil.getDimensionID(rotateableEntity.world)); + this.entityID = rotateableEntity.getEntityId(); + this.entityPitch = rotateableEntity.rotationPitch; + this.entityYaw = rotateableEntity.rotationYaw; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.entityID); + buffer.writeFloat(this.entityPitch); + buffer.writeFloat(this.entityYaw); + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.entityID = buffer.readInt(); + this.entityPitch = buffer.readFloat(); + this.entityYaw = buffer.readFloat(); + } + + @Override + public void handleClientSide(EntityPlayer player) + { + + } + + @Override + public void handleServerSide(EntityPlayer player) + { + Entity entity = player.world.getEntityByID(this.entityID); + + if (entity != null) + { + entity.rotationPitch = this.entityPitch; + entity.rotationYaw = this.entityYaw; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketSimple.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketSimple.java new file mode 100644 index 00000000..0b17f5d4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/network/PacketSimple.java @@ -0,0 +1,1422 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.network; + +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.INetHandler; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.GameType; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.advancement.GCTriggers; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.client.FootprintRenderer; +import micdoodle8.mods.galacticraft.core.client.fx.ParticleSparks; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiBuggy; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiParaChest; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.command.CommandGCEnergyUnits; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProvider; +import micdoodle8.mods.galacticraft.core.entities.IControllableEntity; +import micdoodle8.mods.galacticraft.core.entities.player.GCEntityPlayerMP; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematic; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledDimensionChange; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import io.netty.buffer.ByteBuf; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; + +public class PacketSimple extends PacketBase implements Packet +{ + + public enum EnumSimplePacket + { + + // SERVER + S_RESPAWN_PLAYER(Side.SERVER, String.class), + S_TELEPORT_ENTITY(Side.SERVER, Integer.class), + S_IGNITE_ROCKET(Side.SERVER), + S_OPEN_SCHEMATIC_PAGE(Side.SERVER, Integer.class, Integer.class, Integer.class, Integer.class), + S_OPEN_FUEL_GUI(Side.SERVER, String.class), + S_UPDATE_SHIP_YAW(Side.SERVER, Float.class), + S_UPDATE_SHIP_PITCH(Side.SERVER, Float.class), + S_SET_ENTITY_FIRE(Side.SERVER, Integer.class), + S_BIND_SPACE_STATION_ID(Side.SERVER, Integer.class), + S_UNLOCK_NEW_SCHEMATIC(Side.SERVER), + S_UPDATE_DISABLEABLE_BUTTON(Side.SERVER, BlockPos.class, Integer.class), + S_ON_FAILED_CHEST_UNLOCK(Side.SERVER, Integer.class), + S_RENAME_SPACE_STATION(Side.SERVER, String.class, Integer.class), + S_OPEN_EXTENDED_INVENTORY(Side.SERVER), + S_ON_ADVANCED_GUI_CLICKED_INT(Side.SERVER, Integer.class, BlockPos.class, Integer.class), + S_ON_ADVANCED_GUI_CLICKED_STRING(Side.SERVER, Integer.class, BlockPos.class, String.class), + S_UPDATE_SHIP_MOTION_Y(Side.SERVER, Integer.class, Boolean.class), + S_START_NEW_SPACE_RACE(Side.SERVER, Integer.class, String.class, FlagData.class, Vector3.class, String[].class), + S_REQUEST_FLAG_DATA(Side.SERVER, String.class), + S_INVITE_RACE_PLAYER(Side.SERVER, String.class, Integer.class), + S_REMOVE_RACE_PLAYER(Side.SERVER, String.class, Integer.class), + S_ADD_RACE_PLAYER(Side.SERVER, String.class, Integer.class), + S_COMPLETE_CBODY_HANDSHAKE(Side.SERVER, String[].class), + S_REQUEST_GEAR_DATA1(Side.SERVER, UUID.class), + S_REQUEST_GEAR_DATA2(Side.SERVER, UUID.class), + S_REQUEST_OVERWORLD_IMAGE(Side.SERVER), + S_REQUEST_MAP_IMAGE(Side.SERVER, Integer.class, Integer.class, Integer.class), + S_REQUEST_PLAYERSKIN(Side.SERVER, String.class), + S_BUILDFLAGS_UPDATE(Side.SERVER, Integer.class), + S_CONTROL_ENTITY(Side.SERVER, Integer.class), + S_NOCLIP_PLAYER(Side.SERVER, Boolean.class), + S_REQUEST_DATA(Side.SERVER, Integer.class, BlockPos.class), + S_UPDATE_CHECKLIST(Side.SERVER, NBTTagCompound.class), + S_REQUEST_MACHINE_DATA(Side.SERVER, BlockPos.class), + S_REQUEST_CONTAINER_SLOT_REFRESH(Side.SERVER, Integer.class), + // CLIENT + C_AIR_REMAINING(Side.CLIENT, Integer.class, Integer.class, String.class), + C_UPDATE_DIMENSION_LIST(Side.CLIENT, String.class, String.class, Boolean.class), + C_SPAWN_SPARK_PARTICLES(Side.CLIENT, BlockPos.class), + C_UPDATE_GEAR_SLOT(Side.CLIENT, String.class, Integer.class, Integer.class, Integer.class), + C_CLOSE_GUI(Side.CLIENT), + C_RESET_THIRD_PERSON(Side.CLIENT), + C_UPDATE_SPACESTATION_LIST(Side.CLIENT, Integer[].class), + C_UPDATE_SPACESTATION_DATA(Side.CLIENT, Integer.class, NBTTagCompound.class), + C_UPDATE_SPACESTATION_CLIENT_ID(Side.CLIENT, String.class), + C_UPDATE_PLANETS_LIST(Side.CLIENT, Integer[].class), + C_UPDATE_CONFIGS( + Side.CLIENT, + Integer.class, + Double.class, + Integer.class, + Integer.class, + Integer.class, + String.class, + Float.class, + Float.class, + Float.class, + Float.class, + Integer.class, + String[].class), + C_UPDATE_STATS( + Side.CLIENT, + Integer.class, + String.class, + Integer.class, + String.class, + Integer.class, + String.class, + Integer.class, + String.class, + Integer.class, + String.class, + Integer.class, + Integer.class), // Note: + // Integer, + // PANELTYPES_LENGTH + // * + // , + // Integer + // - + // see + // StatsCapability.getMiscNetworkedStats() + C_ADD_NEW_SCHEMATIC(Side.CLIENT, Integer.class), + C_UPDATE_SCHEMATIC_LIST(Side.CLIENT, Integer[].class), + C_PLAY_SOUND_BOSS_DEATH(Side.CLIENT, Float.class), + C_PLAY_SOUND_EXPLODE(Side.CLIENT), + C_PLAY_SOUND_BOSS_LAUGH(Side.CLIENT), + C_PLAY_SOUND_BOW(Side.CLIENT), + C_UPDATE_OXYGEN_VALIDITY(Side.CLIENT, Boolean.class), + C_OPEN_PARACHEST_GUI(Side.CLIENT, Integer.class, Integer.class, Integer.class), + C_UPDATE_WIRE_BOUNDS(Side.CLIENT, BlockPos.class), + C_OPEN_SPACE_RACE_GUI(Side.CLIENT), + C_UPDATE_SPACE_RACE_DATA(Side.CLIENT, Integer.class, String.class, FlagData.class, Vector3.class, String[].class), + C_OPEN_JOIN_RACE_GUI(Side.CLIENT, Integer.class), + C_UPDATE_FOOTPRINT_LIST(Side.CLIENT, Long.class, Footprint[].class), + C_UPDATE_DUNGEON_DIRECTION(Side.CLIENT, Float.class), + C_FOOTPRINTS_REMOVED(Side.CLIENT, Long.class, BlockVec3.class), + C_UPDATE_STATION_SPIN(Side.CLIENT, Float.class, Boolean.class), + C_UPDATE_STATION_DATA(Side.CLIENT, Double.class, Double.class), + C_UPDATE_STATION_BOX(Side.CLIENT, Integer.class, Integer.class, Integer.class, Integer.class, Integer.class, Integer.class), + C_UPDATE_THERMAL_LEVEL(Side.CLIENT, Integer.class, Boolean.class), + C_DISPLAY_ROCKET_CONTROLS(Side.CLIENT), + C_GET_CELESTIAL_BODY_LIST(Side.CLIENT), + C_UPDATE_ENERGYUNITS(Side.CLIENT, Integer.class), + C_RESPAWN_PLAYER(Side.CLIENT, String.class, Integer.class, String.class, Integer.class), + C_UPDATE_TELEMETRY(Side.CLIENT, BlockPos.class, String.class, Integer.class, Integer.class, Integer.class, Integer.class, Integer.class, String.class), + C_SEND_PLAYERSKIN(Side.CLIENT, String.class, String.class, String.class, String.class), + C_SEND_OVERWORLD_IMAGE(Side.CLIENT, Integer.class, Integer.class, byte[].class), + C_RECOLOR_PIPE(Side.CLIENT, BlockPos.class), + C_RECOLOR_ALL_GLASS(Side.CLIENT, Integer.class, Integer.class, Integer.class), // Number + // of + // integers + // to + // match + // number + // of + // different + // blocks + // of + // PLAIN + // glass + // individually + // instanced + // and + // registered + // in + // GCBlocks + C_UPDATE_MACHINE_DATA(Side.CLIENT, BlockPos.class, Integer.class, Integer.class, Integer.class, Integer.class), + C_SPAWN_HANGING_SCHEMATIC(Side.CLIENT, BlockPos.class, Integer.class, Integer.class, Integer.class), + C_LEAK_DATA(Side.CLIENT, BlockPos.class, Integer[].class); + + private Side targetSide; + private Class[] decodeAs; + + EnumSimplePacket(Side targetSide, Class... decodeAs) + { + this.targetSide = targetSide; + this.decodeAs = decodeAs; + } + + public Side getTargetSide() + { + return this.targetSide; + } + + public Class[] getDecodeClasses() + { + return this.decodeAs; + } + } + + private EnumSimplePacket type; + private List data; + static private String spamCheckString; + static private Map savedSettings = new HashMap<>(); + + public PacketSimple() + { + super(); + } + + public PacketSimple(EnumSimplePacket packetType, int dimID, Object[] data) + { + this(packetType, dimID, Arrays.asList(data)); + } + + public PacketSimple(EnumSimplePacket packetType, World world, Object[] data) + { + this(packetType, GCCoreUtil.getDimensionID(world), Arrays.asList(data)); + } + + public PacketSimple(EnumSimplePacket packetType, int dimID, List data) + { + super(dimID); + if (packetType.getDecodeClasses().length != data.size()) + { + GalacticraftCore.logger.info("Simple Packet Core found data length different than packet type"); + new RuntimeException().printStackTrace(); + } + + this.type = packetType; + this.data = data; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type.ordinal()); + + try + { + NetworkUtil.encodeData(buffer, this.data); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = EnumSimplePacket.values()[buffer.readInt()]; + + try + { + if (this.type.getDecodeClasses().length > 0) + { + this.data = NetworkUtil.decodeData(this.type.getDecodeClasses(), buffer); + } + if (buffer.readableBytes() > 0 && buffer.writerIndex() < 0xfff00) + { + GalacticraftCore.logger.error("Galacticraft packet length problem for packet type " + this.type.toString()); + } + } catch (Exception e) + { + System.err.println("[Galacticraft] Error handling simple packet type: " + this.type.toString() + " " + buffer.toString()); + e.printStackTrace(); + throw e; + } + } + + @SideOnly(Side.CLIENT) + @Override + public void handleClientSide(EntityPlayer player) + { + EntityPlayerSP playerBaseClient = null; + GCPlayerStatsClient stats = null; + + if (player instanceof EntityPlayerSP) + { + playerBaseClient = (EntityPlayerSP) player; + stats = GCPlayerStatsClient.get(playerBaseClient); + } else + { + if (type != EnumSimplePacket.C_UPDATE_SPACESTATION_LIST && type != EnumSimplePacket.C_UPDATE_PLANETS_LIST && type != EnumSimplePacket.C_UPDATE_CONFIGS) + { + return; + } + } + + switch (this.type) + { + case C_AIR_REMAINING: + if (String.valueOf(this.data.get(2)).equals(String.valueOf(PlayerUtil.getName(player)))) + { + TickHandlerClient.airRemaining = (Integer) this.data.get(0); + TickHandlerClient.airRemaining2 = (Integer) this.data.get(1); + } + break; + case C_UPDATE_DIMENSION_LIST: + if (String.valueOf(this.data.get(0)).equals(PlayerUtil.getName(player))) + { + String dimensionList = (String) this.data.get(1); + if (ConfigManagerCore.enableDebug) + { + if (!dimensionList.equals(PacketSimple.spamCheckString)) + { + GalacticraftCore.logger.info("DEBUG info: " + dimensionList); + PacketSimple.spamCheckString = dimensionList; + } + } + final String[] destinations = dimensionList.split("\\?"); + List possibleCelestialBodies = Lists.newArrayList(); + Map> spaceStationData = Maps.newHashMap(); +// Map spaceStationNames = Maps.newHashMap(); +// Map spaceStationIDs = Maps.newHashMap(); +// Map spaceStationHomes = Maps.newHashMap(); + + for (String str : destinations) + { + CelestialBody celestialBody = WorldUtil.getReachableCelestialBodiesForName(str); + + if (celestialBody == null && str.contains("$")) + { + String[] values = str.split("\\$"); + + int homePlanetID = Integer.parseInt(values[4]); + + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + if (satellite.getParentPlanet().getDimensionID() == homePlanetID) + { + celestialBody = satellite; + break; + } + } + + if (!spaceStationData.containsKey(homePlanetID)) + { + spaceStationData.put(homePlanetID, new HashMap()); + } + + spaceStationData.get(homePlanetID).put(values[1], new GuiCelestialSelection.StationDataGUI(values[2], Integer.parseInt(values[3]))); + +// spaceStationNames.put(values[1], values[2]); +// spaceStationIDs.put(values[1], Integer.parseInt(values[3])); +// spaceStationHomes.put(values[1], Integer.parseInt(values[4])); + } + + if (celestialBody != null) + { + possibleCelestialBodies.add(celestialBody); + } + } + + if (FMLClientHandler.instance().getClient().world != null) + { + if (!(FMLClientHandler.instance().getClient().currentScreen instanceof GuiCelestialSelection)) + { + GuiCelestialSelection gui = new GuiCelestialSelection(false, possibleCelestialBodies, (Boolean) this.data.get(2)); + gui.spaceStationMap = spaceStationData; +// gui.spaceStationNames = spaceStationNames; +// gui.spaceStationIDs = spaceStationIDs; + FMLClientHandler.instance().getClient().displayGuiScreen(gui); + } else + { + ((GuiCelestialSelection) FMLClientHandler.instance().getClient().currentScreen).possibleBodies = possibleCelestialBodies; + ((GuiCelestialSelection) FMLClientHandler.instance().getClient().currentScreen).spaceStationMap = spaceStationData; +// ((GuiCelestialSelection) FMLClientHandler.instance().getClient().currentScreen).spaceStationNames = spaceStationNames; +// ((GuiCelestialSelection) FMLClientHandler.instance().getClient().currentScreen).spaceStationIDs = spaceStationIDs; + } + } + } + break; + case C_SPAWN_SPARK_PARTICLES: + BlockPos pos = (BlockPos) this.data.get(0); + Minecraft mc = Minecraft.getMinecraft(); + + for (int i = 0; i < 4; i++) + { + if (mc.getRenderViewEntity() != null && mc.effectRenderer != null && mc.world != null) + { + final ParticleSparks fx = new ParticleSparks(mc.world, pos.getX() - 0.15 + 0.5, pos.getY() + 1.2, pos.getZ() + 0.15 + 0.5, + mc.world.rand.nextDouble() / 20 - mc.world.rand.nextDouble() / 20, mc.world.rand.nextDouble() / 20 - mc.world.rand.nextDouble() / 20); + + mc.effectRenderer.addEffect(fx); + } + } + break; + case C_UPDATE_GEAR_SLOT: + int subtype = (Integer) this.data.get(3); + String gearName = (String) this.data.get(0); + + EntityPlayer gearDataPlayer = player.world.getPlayerEntityByName(gearName); + + if (gearDataPlayer != null) + { + PlayerGearData gearData = ClientProxyCore.playerItemData.get(PlayerUtil.getName(gearDataPlayer)); + UUID gearDataPlayerID = gearDataPlayer.getUniqueID(); + + if (gearData == null) + { + gearData = new PlayerGearData(player); + if (!ClientProxyCore.gearDataRequests.contains(gearDataPlayerID)) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_GEAR_DATA1, getDimensionID(), new Object[] + {gearDataPlayerID})); + ClientProxyCore.gearDataRequests.add(gearDataPlayerID); + } + } else + { + ClientProxyCore.gearDataRequests.remove(gearDataPlayerID); + } + + EnumExtendedInventorySlot type = EnumExtendedInventorySlot.values()[(Integer) this.data.get(2)]; + GCPlayerHandler.EnumModelPacketType typeChange = GCPlayerHandler.EnumModelPacketType.values()[(Integer) this.data.get(1)]; + + switch (type) + { + case MASK: + gearData.setMask(subtype); + break; + case GEAR: + gearData.setGear(subtype); + break; + case LEFT_TANK: + gearData.setLeftTank(subtype); + break; + case RIGHT_TANK: + gearData.setRightTank(subtype); + break; + case PARACHUTE: + if (typeChange == GCPlayerHandler.EnumModelPacketType.ADD) + { + String name; + + if (subtype != -1) + { + name = ItemParaChute.names[subtype]; + gearData.setParachute(new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/" + name + ".png")); + } + } else + { + gearData.setParachute(null); + } + break; + case FREQUENCY_MODULE: + gearData.setFrequencyModule(subtype); + break; + case THERMAL_HELMET: + gearData.setThermalPadding(0, subtype); + break; + case THERMAL_CHESTPLATE: + gearData.setThermalPadding(1, subtype); + break; + case THERMAL_LEGGINGS: + gearData.setThermalPadding(2, subtype); + break; + case THERMAL_BOOTS: + gearData.setThermalPadding(3, subtype); + break; + case SHIELD_CONTROLLER: + gearData.setShieldController(subtype); + break; + default: + break; + } + + ClientProxyCore.playerItemData.put(gearName, gearData); + } + + break; + case C_CLOSE_GUI: + FMLClientHandler.instance().getClient().displayGuiScreen(null); + break; + case C_RESET_THIRD_PERSON: + FMLClientHandler.instance().getClient().gameSettings.thirdPersonView = stats.getThirdPersonView(); + break; + case C_UPDATE_SPACESTATION_LIST: + WorldUtil.decodeSpaceStationListClient(data); + break; + case C_UPDATE_SPACESTATION_DATA: + SpaceStationWorldData var4 = SpaceStationWorldData.getMPSpaceStationData(player.world, (Integer) this.data.get(0), player); + var4.readFromNBT((NBTTagCompound) this.data.get(1)); + break; + case C_UPDATE_SPACESTATION_CLIENT_ID: + ClientProxyCore.clientSpaceStationID = WorldUtil.stringToSpaceStationData((String) this.data.get(0)); + break; + case C_UPDATE_PLANETS_LIST: + WorldUtil.decodePlanetsListClient(data); + break; + case C_UPDATE_CONFIGS: + ConfigManagerCore.saveClientConfigOverrideable(); + ConfigManagerCore.setConfigOverride(data); + break; + case C_ADD_NEW_SCHEMATIC: + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForID((Integer) this.data.get(0)); + if (!stats.getUnlockedSchematics().contains(page)) + { + stats.getUnlockedSchematics().add(page); + } + break; + case C_UPDATE_SCHEMATIC_LIST: + for (Object o : this.data) + { + Integer schematicID = (Integer) o; + + if (schematicID != -2) + { + Collections.sort(stats.getUnlockedSchematics()); + + if (!stats.getUnlockedSchematics().contains(SchematicRegistry.getMatchingRecipeForID(schematicID))) + { + stats.getUnlockedSchematics().add(SchematicRegistry.getMatchingRecipeForID(schematicID)); + } + } + } + break; + case C_PLAY_SOUND_BOSS_DEATH: + player.playSound(GCSounds.bossDeath, 10.0F, (Float) this.data.get(0)); + break; + case C_PLAY_SOUND_EXPLODE: + player.playSound(SoundEvents.ENTITY_GENERIC_EXPLODE, 10.0F, 0.7F); + break; + case C_PLAY_SOUND_BOSS_LAUGH: + player.playSound(GCSounds.bossLaugh, 10.0F, 0.2F); + break; + case C_PLAY_SOUND_BOW: + player.playSound(SoundEvents.ENTITY_ARROW_SHOOT, 10.0F, 0.2F); + break; + case C_UPDATE_OXYGEN_VALIDITY: + stats.setOxygenSetupValid((Boolean) this.data.get(0)); + break; + case C_OPEN_PARACHEST_GUI: + switch ((Integer) this.data.get(1)) + { + case 0: + if (player.getRidingEntity() instanceof EntityBuggy) + { + FMLClientHandler.instance().getClient() + .displayGuiScreen(new GuiBuggy(player.inventory, (EntityBuggy) player.getRidingEntity(), ((EntityBuggy) player.getRidingEntity()).getType())); + player.openContainer.windowId = (Integer) this.data.get(0); + } + break; + case 1: + int entityID = (Integer) this.data.get(2); + Entity entity = player.world.getEntityByID(entityID); + + if (entity != null && entity instanceof IInventorySettable) + { + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiParaChest(player.inventory, (IInventorySettable) entity)); + } + + player.openContainer.windowId = (Integer) this.data.get(0); + break; + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_CONTAINER_SLOT_REFRESH, GCCoreUtil.getDimensionID(player.world), new Object[] + {player.openContainer.windowId})); + break; + case C_UPDATE_WIRE_BOUNDS: + TileEntity tile = player.world.getTileEntity((BlockPos) this.data.get(0)); + + if (tile instanceof TileBaseConductor) + { + ((TileBaseConductor) tile).adjacentConnections = null; + } + break; + case C_OPEN_SPACE_RACE_GUI: + if (Minecraft.getMinecraft().currentScreen == null) + { + TickHandlerClient.spaceRaceGuiScheduled = false; + player.openGui(GalacticraftCore.instance, GuiIdsCore.SPACE_RACE_START, player.world, (int) player.posX, (int) player.posY, (int) player.posZ); + } else + { + TickHandlerClient.spaceRaceGuiScheduled = true; + } + break; + case C_UPDATE_SPACE_RACE_DATA: + Integer teamID = (Integer) this.data.get(0); + String teamName = (String) this.data.get(1); + FlagData flagData = (FlagData) this.data.get(2); + Vector3 teamColor = (Vector3) this.data.get(3); + List playerList = new ArrayList<>(); + + for (int i = 4; i < this.data.size(); i++) + { + String playerName = (String) this.data.get(i); + ClientProxyCore.flagRequestsSent.remove(playerName); + playerList.add(playerName); + } + + SpaceRace race = new SpaceRace(playerList, teamName, flagData, teamColor); + race.setSpaceRaceID(teamID); + SpaceRaceManager.addSpaceRace(race); + break; + case C_OPEN_JOIN_RACE_GUI: + stats.setSpaceRaceInviteTeamID((Integer) this.data.get(0)); + player.openGui(GalacticraftCore.instance, GuiIdsCore.SPACE_RACE_JOIN, player.world, (int) player.posX, (int) player.posY, (int) player.posZ); + break; + case C_UPDATE_DUNGEON_DIRECTION: + stats.setDungeonDirection((Float) this.data.get(0)); + break; + case C_UPDATE_FOOTPRINT_LIST: + List printList = new ArrayList<>(); + long chunkKey = (Long) this.data.get(0); + for (int i = 1; i < this.data.size(); i++) + { + Footprint print = (Footprint) this.data.get(i); + if (!print.owner.equals(player.getName())) + { + printList.add(print); + } + } + FootprintRenderer.setFootprints(chunkKey, printList); + break; + case C_FOOTPRINTS_REMOVED: + long chunkKey0 = (Long) this.data.get(0); + BlockVec3 position = (BlockVec3) this.data.get(1); + List footprintList = FootprintRenderer.footprints.get(chunkKey0); + List toRemove = new ArrayList<>(); + + if (footprintList != null) + { + for (Footprint footprint : footprintList) + { + if (footprint.position.x > position.x && footprint.position.x < position.x + 1 && footprint.position.z > position.z && footprint.position.z < position.z + 1) + { + toRemove.add(footprint); + } + } + } + + if (!toRemove.isEmpty()) + { + footprintList.removeAll(toRemove); + FootprintRenderer.footprints.put(chunkKey0, footprintList); + } + break; + case C_UPDATE_STATION_SPIN: + if (playerBaseClient.world.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) playerBaseClient.world.provider).getSpinManager().setSpinRate((Float) this.data.get(0), (Boolean) this.data.get(1)); + } + break; + case C_UPDATE_STATION_DATA: + if (playerBaseClient.world.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) playerBaseClient.world.provider).getSpinManager().setSpinCentre((Double) this.data.get(0), (Double) this.data.get(1)); + } + break; + case C_UPDATE_STATION_BOX: + if (playerBaseClient.world.provider instanceof WorldProviderSpaceStation) + { + ((WorldProviderSpaceStation) playerBaseClient.world.provider).getSpinManager().setSpinBox((Integer) this.data.get(0), (Integer) this.data.get(1), (Integer) this.data.get(2), + (Integer) this.data.get(3), (Integer) this.data.get(4), (Integer) this.data.get(5)); + } + break; + case C_UPDATE_THERMAL_LEVEL: + stats.setThermalLevel((Integer) this.data.get(0)); + stats.setThermalLevelNormalising((Boolean) this.data.get(1)); + break; + case C_DISPLAY_ROCKET_CONTROLS: + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.spaceKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.rocket.launch.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.leftKey.getKeyCode()) + " / " + + GameSettings.getKeyDisplayString(KeyHandlerClient.rightKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.rocket.turn.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.accelerateKey.getKeyCode()) + " / " + + GameSettings.getKeyDisplayString(KeyHandlerClient.decelerateKey.getKeyCode()) + " - " + GCCoreUtil.translate("gui.rocket.updown.name"))); + player.sendMessage(new TextComponentString(GameSettings.getKeyDisplayString(KeyHandlerClient.openFuelGui.getKeyCode()) + " - " + GCCoreUtil.translate("gui.rocket.inv.name"))); + break; + case C_GET_CELESTIAL_BODY_LIST: + String[] objKeys = GalaxyRegistry.getAllTransltionKeys(); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_COMPLETE_CBODY_HANDSHAKE, getDimensionID(), new Object[] {objKeys})); + break; + case C_UPDATE_ENERGYUNITS: + CommandGCEnergyUnits.handleParamClientside((Integer) this.data.get(0)); + break; + case C_RESPAWN_PLAYER: + final WorldProvider provider = WorldUtil.getProviderForNameClient((String) this.data.get(0)); + final int dimID = GCCoreUtil.getDimensionID(provider); + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("DEBUG: Client receiving respawn packet for dim " + dimID); + } + int par2 = (Integer) this.data.get(1); + String par3 = (String) this.data.get(2); + int par4 = (Integer) this.data.get(3); + WorldUtil.forceRespawnClient(dimID, par2, par3, par4); + break; + case C_UPDATE_STATS: + stats.setBuildFlags((Integer) this.data.get(0)); + BlockPanelLighting.updateClient(this.data); + break; + case C_UPDATE_TELEMETRY: + tile = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tile instanceof TileEntityTelemetry) + { + ((TileEntityTelemetry) tile).receiveUpdate(data, this.getDimensionID()); + } + break; + case C_SEND_PLAYERSKIN: + String strName = (String) this.data.get(0); + String s1 = (String) this.data.get(1); + String s2 = (String) this.data.get(2); + String strUUID = (String) this.data.get(3); + GameProfile gp = PlayerUtil.getOtherPlayerProfile(strName); + if (gp == null) + { + gp = PlayerUtil.makeOtherPlayerProfile(strName, strUUID); + } + gp.getProperties().put("textures", new Property("textures", s1, s2)); + break; + case C_SEND_OVERWORLD_IMAGE: + try + { + int cx = (Integer) this.data.get(0); + int cz = (Integer) this.data.get(1); + byte[] bytes = (byte[]) this.data.get(2); + MapUtil.receiveOverworldImageCompressed(cx, cz, bytes); + } catch (Exception e) + { + e.printStackTrace(); + } + break; + case C_RECOLOR_PIPE: + TileEntity tileEntity = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tileEntity instanceof TileEntityFluidPipe) + { + TileEntityFluidPipe pipe = (TileEntityFluidPipe) tileEntity; + pipe.getNetwork().split(pipe); + pipe.setNetwork(null); + } + break; + case C_RECOLOR_ALL_GLASS: + BlockSpaceGlass.updateGlassColors((Integer) this.data.get(0), (Integer) this.data.get(1), (Integer) this.data.get(2)); + break; + case C_UPDATE_MACHINE_DATA: + TileEntity tile3 = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tile3 instanceof ITileClientUpdates) + { + ((ITileClientUpdates) tile3).updateClient(this.data); + } + break; + case C_LEAK_DATA: + TileEntity tile4 = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tile4 instanceof TileEntityOxygenSealer) + { + ((ITileClientUpdates) tile4).updateClient(this.data); + } + break; + case C_SPAWN_HANGING_SCHEMATIC: + EntityHangingSchematic entity = new EntityHangingSchematic(player.world, (BlockPos) this.data.get(0), EnumFacing.byIndex((Integer) this.data.get(2)), (Integer) this.data.get(3)); + ((WorldClient) player.world).addEntityToWorld((Integer) this.data.get(1), entity); + break; + default: + break; + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + final EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase == null) + { + return; + } + + final MinecraftServer server = playerBase.server; + final GCPlayerStats stats = GCPlayerStats.get(playerBase); + + switch (this.type) + { + case S_RESPAWN_PLAYER: + playerBase.connection + .sendPacket(new SPacketRespawn(player.dimension, player.world.getDifficulty(), player.world.getWorldInfo().getTerrainType(), playerBase.interactionManager.getGameType())); + break; + case S_TELEPORT_ENTITY: + TickHandlerServer.scheduleNewDimensionChange(new ScheduledDimensionChange(playerBase, (int) PacketSimple.this.data.get(0))); + break; + case S_IGNITE_ROCKET: + if (!player.world.isRemote && !player.isDead && player.getRidingEntity() != null && !player.getRidingEntity().isDead && player.getRidingEntity() instanceof EntityTieredRocket) + { + final EntityTieredRocket ship = (EntityTieredRocket) player.getRidingEntity(); + + if (ship.launchPhase != EnumLaunchPhase.LANDING.ordinal()) + { + if (ship.hasValidFuel()) + { + ItemStack stack2 = stats.getExtendedInventory().getStackInSlot(4); + + if (stack2 != null && stack2.getItem() instanceof ItemParaChute || stats.getLaunchAttempts() > 0) + { + ship.igniteCheckingCooldown(); + stats.setLaunchAttempts(0); + } else if (stats.getChatCooldown() == 0 && stats.getLaunchAttempts() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.noparachute"))); + stats.setChatCooldown(80); + stats.setLaunchAttempts(1); + } + } else if (stats.getChatCooldown() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.rocket.warning.nofuel"))); + stats.setChatCooldown(250); + } + } + } + break; + case S_OPEN_SCHEMATIC_PAGE: + if (player != null) + { + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForID((Integer) this.data.get(0)); + + player.openGui(GalacticraftCore.instance, page.getGuiID(), player.world, (Integer) this.data.get(1), (Integer) this.data.get(2), (Integer) this.data.get(3)); + } + break; + case S_OPEN_FUEL_GUI: + if (player.getRidingEntity() instanceof EntityBuggy) + { + GCCoreUtil.openBuggyInv(playerBase, (EntityBuggy) player.getRidingEntity(), ((EntityBuggy) player.getRidingEntity()).getType()); + } else if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + player.openGui(GalacticraftCore.instance, GuiIdsCore.ROCKET_INVENTORY, player.world, (int) player.posX, (int) player.posY, (int) player.posZ); + } + break; + case S_UPDATE_SHIP_YAW: + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + final EntitySpaceshipBase ship = (EntitySpaceshipBase) player.getRidingEntity(); + + if (ship != null) + { + ship.rotationYaw = (Float) this.data.get(0); + } + } + break; + case S_UPDATE_SHIP_PITCH: + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + final EntitySpaceshipBase ship = (EntitySpaceshipBase) player.getRidingEntity(); + + if (ship != null) + { + ship.rotationPitch = (Float) this.data.get(0); + } + } + break; + case S_SET_ENTITY_FIRE: + Entity entity = player.world.getEntityByID((Integer) this.data.get(0)); + + if (entity instanceof EntityLivingBase) + { + ((EntityLivingBase) entity).setFire(3); + } + break; + case S_BIND_SPACE_STATION_ID: + int homeID = (Integer) this.data.get(0); + if ((!stats.getSpaceStationDimensionData().containsKey(homeID) || stats.getSpaceStationDimensionData().get(homeID) == -1 || stats.getSpaceStationDimensionData().get(homeID) == 0) + && !ConfigManagerCore.disableSpaceStationCreation) + { + if (playerBase.capabilities.isCreativeMode || WorldUtil.getSpaceStationRecipe(homeID).matches(playerBase, true)) + { + GCTriggers.CREATE_SPACE_STATION.trigger(playerBase); + WorldUtil.bindSpaceStationToNewDimension(playerBase.world, playerBase, homeID); + } + } + break; + case S_UNLOCK_NEW_SCHEMATIC: + final Container container = player.openContainer; + + if (container instanceof ContainerSchematic) + { + final ContainerSchematic schematicContainer = (ContainerSchematic) container; + + ItemStack stack = schematicContainer.craftMatrix.getStackInSlot(0); + + if (!stack.isEmpty()) + { + final ISchematicPage page = SchematicRegistry.getMatchingRecipeForItemStack(stack); + + if (page != null) + { + SchematicRegistry.unlockNewPage(playerBase, stack); + SpaceRaceManager.teamUnlockSchematic(playerBase, stack); + stack.shrink(1); + + schematicContainer.craftMatrix.setInventorySlotContents(0, stack); + schematicContainer.craftMatrix.markDirty(); + + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_ADD_NEW_SCHEMATIC, getDimensionID(), new Object[] + {page.getPageID()}), playerBase); + } + } + } + break; + case S_UPDATE_DISABLEABLE_BUTTON: + final TileEntity tileAt = player.world.getTileEntity((BlockPos) this.data.get(0)); + + if (tileAt instanceof IDisableableMachine) + { + final IDisableableMachine machine = (IDisableableMachine) tileAt; + + machine.setDisabled((Integer) this.data.get(1), !machine.getDisabled((Integer) this.data.get(1))); + } + break; + case S_ON_FAILED_CHEST_UNLOCK: + if (stats.getChatCooldown() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.chest.warning.wrongkey", this.data.get(0)))); + stats.setChatCooldown(100); + } + break; + case S_RENAME_SPACE_STATION: + final SpaceStationWorldData ssdata = SpaceStationWorldData.getStationData(playerBase.world, (Integer) this.data.get(1), playerBase); + + if (ssdata != null && ssdata.getOwner().equalsIgnoreCase(PlayerUtil.getName(player))) + { + ssdata.setSpaceStationName((String) this.data.get(0)); + ssdata.setDirty(true); + } + break; + case S_OPEN_EXTENDED_INVENTORY: + player.openGui(GalacticraftCore.instance, GuiIdsCore.EXTENDED_INVENTORY, player.world, 0, 0, 0); + break; + case S_ON_ADVANCED_GUI_CLICKED_INT: + TileEntity tile1 = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.redstoneActivation = (Integer) this.data.get(2) == 1; + } + break; + case 1: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.playerDistanceActivation = (Integer) this.data.get(2) == 1; + } + break; + case 2: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.playerDistanceSelection = (Integer) this.data.get(2); + } + break; + case 3: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.playerNameMatches = (Integer) this.data.get(2) == 1; + } + break; + case 4: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.invertSelection = (Integer) this.data.get(2) == 1; + } + break; + case 5: + if (tile1 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile1; + airlockController.lastHorizontalModeEnabled = airlockController.horizontalModeEnabled; + airlockController.horizontalModeEnabled = (Integer) this.data.get(2) == 1; + } + break; + case 6: + if (tile1 instanceof IBubbleProvider) + { + IBubbleProvider distributor = (IBubbleProvider) tile1; + distributor.setBubbleVisible((Integer) this.data.get(2) == 1); + } + break; + default: + break; + } + break; + case S_ON_ADVANCED_GUI_CLICKED_STRING: + TileEntity tile2 = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile2 instanceof TileEntityAirLockController) + { + TileEntityAirLockController airlockController = (TileEntityAirLockController) tile2; + airlockController.playerToOpenFor = (String) this.data.get(2); + } + break; + default: + break; + } + break; + case S_UPDATE_SHIP_MOTION_Y: + int entityID = (Integer) this.data.get(0); + boolean up = (Boolean) this.data.get(1); + + Entity entity2 = player.world.getEntityByID(entityID); + + if (entity2 instanceof EntityAutoRocket) + { + EntityAutoRocket autoRocket = (EntityAutoRocket) entity2; + autoRocket.motionY += up ? 0.02F : -0.02F; + } + + break; + case S_START_NEW_SPACE_RACE: + Integer teamID = (Integer) this.data.get(0); + String teamName = (String) this.data.get(1); + FlagData flagData = (FlagData) this.data.get(2); + Vector3 teamColor = (Vector3) this.data.get(3); + List playerList = new ArrayList<>(); + + for (int i = 4; i < this.data.size(); i++) + { + playerList.add((String) this.data.get(i)); + } + + boolean previousData = SpaceRaceManager.getSpaceRaceFromID(teamID) != null; + + SpaceRace newRace = new SpaceRace(playerList, teamName, flagData, teamColor); + + if (teamID > 0) + { + newRace.setSpaceRaceID(teamID); + } + + SpaceRaceManager.addSpaceRace(newRace); + + if (previousData) + { + SpaceRaceManager.sendSpaceRaceData(server, null, SpaceRaceManager.getSpaceRaceFromPlayer(PlayerUtil.getName(playerBase))); + } + break; + case S_REQUEST_FLAG_DATA: + SpaceRaceManager.sendSpaceRaceData(server, playerBase, SpaceRaceManager.getSpaceRaceFromPlayer((String) this.data.get(0))); + break; + case S_INVITE_RACE_PLAYER: + EntityPlayerMP playerInvited = PlayerUtil.getPlayerBaseServerFromPlayerUsername(server, (String) this.data.get(0), true); + if (playerInvited != null) + { + Integer teamInvitedTo = (Integer) this.data.get(1); + SpaceRace race = SpaceRaceManager.getSpaceRaceFromID(teamInvitedTo); + + if (race != null) + { + GCPlayerStats.get(playerInvited).setSpaceRaceInviteTeamID(teamInvitedTo); + String dA = EnumColor.DARK_AQUA.getCode(); + String bG = EnumColor.BRIGHT_GREEN.getCode(); + String dB = EnumColor.PURPLE.getCode(); + String teamNameTotal = ""; + String[] teamNameSplit = race.getTeamName().split(" "); + for (String teamNamePart : teamNameSplit) + { + teamNameTotal = teamNameTotal.concat(dB + teamNamePart + " "); + } + playerInvited.sendMessage(new TextComponentString(dA + GCCoreUtil.translateWithFormat("gui.space_race.chat.invite_received", bG + PlayerUtil.getName(player) + dA) + " " + + GCCoreUtil.translateWithFormat("gui.space_race.chat.to_join", teamNameTotal, EnumColor.AQUA + "/joinrace" + dA)) + .setStyle(new Style().setColor(TextFormatting.DARK_AQUA))); + } + } + break; + case S_REMOVE_RACE_PLAYER: + Integer teamInvitedTo = (Integer) this.data.get(1); + SpaceRace race = SpaceRaceManager.getSpaceRaceFromID(teamInvitedTo); + + if (race != null) + { + String playerToRemove = (String) this.data.get(0); + + if (!race.getPlayerNames().remove(playerToRemove)) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.space_race.chat.not_found", playerToRemove))); + } else + { + SpaceRaceManager.onPlayerRemoval(server, playerToRemove, race); + } + } + break; + case S_ADD_RACE_PLAYER: + Integer teamToAddPlayer = (Integer) this.data.get(1); + SpaceRace spaceRaceToAddPlayer = SpaceRaceManager.getSpaceRaceFromID(teamToAddPlayer); + + if (spaceRaceToAddPlayer != null) + { + String playerToAdd = (String) this.data.get(0); + + if (!spaceRaceToAddPlayer.getPlayerNames().contains(playerToAdd)) + { + SpaceRace oldRace = null; + while ((oldRace = SpaceRaceManager.getSpaceRaceFromPlayer(playerToAdd)) != null) + { + SpaceRaceManager.removeSpaceRace(oldRace); + } + + spaceRaceToAddPlayer.getPlayerNames().add(playerToAdd); + SpaceRaceManager.sendSpaceRaceData(server, null, spaceRaceToAddPlayer); + + for (String member : spaceRaceToAddPlayer.getPlayerNames()) + { + EntityPlayerMP memberObj = PlayerUtil.getPlayerForUsernameVanilla(server, member); + + if (memberObj != null) + { + memberObj.sendMessage(new TextComponentString( + EnumColor.DARK_AQUA + GCCoreUtil.translateWithFormat("gui.space_race.chat.add_success", EnumColor.BRIGHT_GREEN + playerToAdd + EnumColor.DARK_AQUA)) + .setStyle(new Style().setColor(TextFormatting.DARK_AQUA))); + } + } + } else + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.space_race.chat.already_part")).setStyle(new Style().setColor(TextFormatting.DARK_RED))); + } + } + break; + case S_COMPLETE_CBODY_HANDSHAKE: + List clientObjects = new ArrayList<>(); + for (int i = 0; i < this.data.size(); i++) + { + clientObjects.add(GalaxyRegistry.getCelestialObjectFromTranslationKey((String) this.data.get(i))); + } + List serverObjects = GalaxyRegistry.getAllRegisteredObjects(); + String missingObjects = ""; + + for (CelestialObject celestialObject : serverObjects) + { + if (!clientObjects.contains(celestialObject)) + { + missingObjects = missingObjects.concat(celestialObject.getName() + "\n"); + } + } + + if (missingObjects.length() > 0) + { + playerBase.connection.disconnect(new TextComponentString("Missing Galacticraft Celestial Objects:\n\n " + missingObjects)); + } + + break; + case S_REQUEST_GEAR_DATA1: + case S_REQUEST_GEAR_DATA2: + UUID id = (UUID) this.data.get(0); + if (id != null) + { + EntityPlayer otherPlayer = player.world.getPlayerEntityByUUID(id); + if (otherPlayer instanceof EntityPlayerMP) + { + GCPlayerHandler.checkGear((EntityPlayerMP) otherPlayer, GCPlayerStats.get(otherPlayer), true); + } + } + break; + case S_BUILDFLAGS_UPDATE: + stats.setBuildFlags((Integer) this.data.get(0)); + break; + case S_REQUEST_OVERWORLD_IMAGE: + MapUtil.sendOverworldToClient(playerBase); + break; + case S_REQUEST_MAP_IMAGE: + int dim = (Integer) this.data.get(0); + int cx = (Integer) this.data.get(1); + int cz = (Integer) this.data.get(2); + MapUtil.sendOrCreateMap(WorldUtil.getProviderForDimensionServer(dim).world, cx, cz, playerBase); + break; + case S_REQUEST_PLAYERSKIN: + String strName = (String) this.data.get(0); + EntityPlayerMP playerRequested = server.getPlayerList().getPlayerByUsername(strName); + + // Player not online + if (playerRequested == null) + { + return; + } + + GameProfile gp = playerRequested.getGameProfile(); + if (gp == null) + { + return; + } + + Property property = (Property) Iterables.getFirst(gp.getProperties().get("textures"), (Object) null); + if (property == null) + { + return; + } + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_SEND_PLAYERSKIN, getDimensionID(), new Object[] + {strName, property.getValue(), property.getSignature(), playerRequested.getUniqueID().toString()}), playerBase); + break; + case S_CONTROL_ENTITY: + if (player.getRidingEntity() != null && player.getRidingEntity() instanceof IControllableEntity) + { + ((IControllableEntity) player.getRidingEntity()).pressKey((Integer) this.data.get(0)); + } + break; + case S_NOCLIP_PLAYER: + boolean noClip = (Boolean) this.data.get(0); + if (player instanceof GCEntityPlayerMP) + { + GalacticraftCore.proxy.player.setNoClip((EntityPlayerMP) player, noClip); + if (noClip == false) + { + player.fallDistance = 0.0F; + ((EntityPlayerMP) player).connection.floatingTickCount = 0; + } + } else if (player instanceof EntityPlayerMP) + { + EntityPlayerMP emp = ((EntityPlayerMP) player); + try + { + Field f = emp.interactionManager.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "gameType" : "field_73091_c"); + f.setAccessible(true); + if (noClip == false) + { + emp.fallDistance = 0.0F; + emp.connection.floatingTickCount = 0; + GameType gt = savedSettings.get(emp); + if (gt != null) + { + savedSettings.remove(emp); + f.set(emp.interactionManager, gt); + } + } else + { + savedSettings.put(emp, emp.interactionManager.getGameType()); + f.set(emp.interactionManager, GameType.SPECTATOR); + } + } catch (Exception ee) + { + ee.printStackTrace(); + } + } + break; + case S_REQUEST_DATA: + WorldServer worldServer = server.getWorld((Integer) this.data.get(0)); + if (worldServer != null) + { + TileEntity requestedTile = worldServer.getTileEntity((BlockPos) this.data.get(1)); + if (requestedTile instanceof INetworkProvider) + { + if (((INetworkProvider) requestedTile).getNetwork() instanceof FluidNetwork) + { + FluidNetwork network = (FluidNetwork) ((INetworkProvider) requestedTile).getNetwork(); + network.addUpdate(playerBase); + } + } + } + break; + case S_UPDATE_CHECKLIST: + for (EnumHand enumhand : EnumHand.values()) + { + ItemStack stack = player.getHeldItem(enumhand); + if (stack != null && stack.getItem() == GCItems.prelaunchChecklist) + { + NBTTagCompound tagCompound = stack.getTagCompound(); + if (tagCompound == null) + { + tagCompound = new NBTTagCompound(); + } + NBTTagCompound tagCompoundRead = (NBTTagCompound) this.data.get(0); + tagCompound.setTag("checklistData", tagCompoundRead); + stack.setTagCompound(tagCompound); + } + } + break; + case S_REQUEST_MACHINE_DATA: + TileEntity tile3 = player.world.getTileEntity((BlockPos) this.data.get(0)); + if (tile3 instanceof ITileClientUpdates) + { + ((ITileClientUpdates) tile3).sendUpdateToClient(playerBase); + } + break; + case S_REQUEST_CONTAINER_SLOT_REFRESH: + // It seems as though "Update slot" packets sent internally on + // the minecraft network packets are sent and + // received before our custom gui open packets are handled. This + // causes slots to not update, because from + // the client's perspective the gui isn't open yet. Sending this + // to the server causes all slots to be updated + // server -> client + if (player.openContainer.windowId == (Integer) this.data.get(0)) + { + for (int i = 0; i < player.openContainer.inventoryItemStacks.size(); ++i) + { + player.openContainer.inventoryItemStacks.set(i, ItemStack.EMPTY); + } + } + break; + default: + break; + } + } + + /* + * BEGIN "net.minecraft.network.Packet" IMPLEMENTATION This is for handling + * server->client packets before the player has joined the world + */ + + @Override + public void readPacketData(PacketBuffer var1) + { + this.decodeInto(var1); + } + + @Override + public void writePacketData(PacketBuffer var1) + { + this.encodeInto(var1); + } + + @SideOnly(Side.CLIENT) + @Override + public void processPacket(INetHandler var1) + { + if (this.type != EnumSimplePacket.C_UPDATE_SPACESTATION_LIST && this.type != EnumSimplePacket.C_UPDATE_PLANETS_LIST && this.type != EnumSimplePacket.C_UPDATE_CONFIGS) + { + return; + } + + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + this.handleClientSide(FMLClientHandler.instance().getClientPlayerEntity()); + } + } + + /* + * END "net.minecraft.network.Packet" IMPLEMENTATION This is for handling + * server->client packets before the player has joined the world + */ +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/Evaluator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/Evaluator.java new file mode 100644 index 00000000..d9403193 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/Evaluator.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin; + +public interface Evaluator +{ + + double evalNoise(double x); + + double evalNoise(double x, double y); + + double evalNoise(double x, double y, double z); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/FishyNoise.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/FishyNoise.java new file mode 100644 index 00000000..44340d71 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/FishyNoise.java @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin; + +import java.util.Random; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; + +public class FishyNoise +{ + + int[] perm = new int[512]; + + //@noformat + public double[][] grad2d = new double[][] + { + { 1.0D, 0.0D }, + { 0.9239000082015991D, 0.38269999623298645D }, + { 0.7071070075035095D, 0.7071070075035095D }, + { 0.38269999623298645D, 0.9239000082015991D }, + { 0.0D, 1.0D }, + { -0.38269999623298645D, 0.9239000082015991D }, + { -0.7071070075035095D, 0.7071070075035095D }, + { -0.9239000082015991D, 0.38269999623298645D }, + { -1.0D, 0.0D }, + { -0.9239000082015991D, -0.38269999623298645D }, + { -0.7071070075035095D, -0.7071070075035095D }, + { -0.38269999623298645D, -0.9239000082015991D }, + { 0.0D, -1.0D }, + { 0.38269999623298645D, -0.9239000082015991D }, + { 0.7071070075035095D, -0.7071070075035095D }, + { 0.9239000082015991D, -0.38269999623298645D } + }; + + private float[][] grad2f = new float[][] + { + {1, 0}, + {.9239F, .3827F}, + {.707107F, 0.707107F}, + {.3827F, .9239F}, + {0, 1}, + {-.3827F, .9239F}, + {-.707107F, 0.707107F}, + {-.9239F, .3827F}, + {-1, 0}, + {-.9239F, -.3827F}, + {-.707107F, -0.707107F}, + {-.3827F, -.9239F}, + {0, -1}, + {.3827F, -.9239F}, + {.707107F, -0.707107F}, + {.9239F, -.3827F}}; + + private int[][] grad3i = new int[][] + { + {1, 1, 0}, + {-1, 1, 0}, + {1, -1, 0}, + {-1, -1, 0}, + {1, 0, 1}, + {-1, 0, 1}, + {1, 0, -1}, + {-1, 0, -1}, + {0, 1, 1}, + {0, -1, 1}, + {0, 1, -1}, + {0, -1, -1}, + {1, 1, 0}, + {-1, 1, 0}, + {0, -1, 1}, + {0, -1, -1}}; + //@format + + public FishyNoise(long seed) + { + final Random rand = new Random(seed); + // Fill up the random array with numbers 0-256 + for (int i = 0; i < 256; i++) + { + this.perm[i] = i; + } + // Shuffle those numbers for the random effect + for (int i = 0; i < 256; i++) + { + final int j = rand.nextInt(256); + this.perm[i] = this.perm[i] ^ this.perm[j]; + this.perm[j] = this.perm[i] ^ this.perm[j]; + this.perm[i] = this.perm[i] ^ this.perm[j]; + } + + System.arraycopy(this.perm, 0, this.perm, 256, 256); + } + + public double eval(double x, double y) + { + int largeX = (x > 0.0D) ? (int) x : ((int) x - 1); + int largeY = (y > 0.0D) ? (int) y : ((int) y - 1); + x -= largeX; + y -= largeY; + largeX &= 0xFF; + largeY &= 0xFF; + double u = x * x * x * (x * (x * 6.0D - 15.0D) + 10.0D); + double v = y * y * y * (y * (y * 6.0D - 15.0D) + 10.0D); + int randY = this.perm[largeY] + largeX; + int randY1 = this.perm[largeY + 1] + largeX; + double[] grad2 = this.grad2d[this.perm[randY] & 0xF]; + double grad00 = grad2[0] * x + grad2[1] * y; + grad2 = this.grad2d[this.perm[randY1] & 0xF]; + double grad01 = grad2[0] * x + grad2[1] * (y - 1.0D); + grad2 = this.grad2d[this.perm[1 + randY1] & 0xF]; + double grad11 = grad2[0] * (x - 1.0D) + grad2[1] * (y - 1.0D); + grad2 = this.grad2d[this.perm[1 + randY] & 0xF]; + double grad10 = grad2[0] * (x - 1.0D) + grad2[1] * y; + double lerpX0 = grad00 + u * (grad10 - grad00); + return lerpX0 + v * (grad01 + u * (grad11 - grad01) - lerpX0); + } + + public double eval(double x, double y, double z) + { + int unitX = (x > 0.0D) ? (int) x : ((int) x - 1); + int unitY = (y > 0.0D) ? (int) y : ((int) y - 1); + int unitZ = (z > 0.0D) ? (int) z : ((int) z - 1); + x -= unitX; + y -= unitY; + z -= unitZ; + unitX &= 0xFF; + unitY &= 0xFF; + unitZ &= 0xFF; + double u = x * x * x * (x * (x * 6.0D - 15.0D) + 10.0D); + double v = y * y * y * (y * (y * 6.0D - 15.0D) + 10.0D); + double w = z * z * z * (z * (z * 6.0D - 15.0D) + 10.0D); + int randZ = this.perm[unitZ] + unitY; + int randZ1 = this.perm[unitZ + 1] + unitY; + int randYZ = this.perm[randZ] + unitX; + int randY1Z = this.perm[1 + randZ] + unitX; + int randYZ1 = this.perm[randZ1] + unitX; + int randY1Z1 = this.perm[1 + randZ1] + unitX; + int[] grad3 = this.grad3i[this.perm[randYZ] & 0xF]; + double grad000 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randYZ] & 0xF]; + double grad100 = grad3[0] * (x - 1.0D) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[randY1Z] & 0xF]; + double grad010 = grad3[0] * x + grad3[1] * (y - 1.0D) + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randY1Z] & 0xF]; + double grad110 = grad3[0] * (x - 1.0D) + grad3[1] * (y - 1.0D) + grad3[2] * z; + z--; + grad3 = this.grad3i[this.perm[randYZ1] & 0xF]; + double grad001 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randYZ1] & 0xF]; + double grad101 = grad3[0] * (x - 1.0D) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[randY1Z1] & 0xF]; + double grad011 = grad3[0] * x + grad3[1] * (y - 1.0D) + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randY1Z1] & 0xF]; + double grad111 = grad3[0] * (x - 1.0D) + grad3[1] * (y - 1.0D) + grad3[2] * z; + double f1 = grad000 + u * (grad100 - grad000); + double f2 = grad010 + u * (grad110 - grad010); + double f3 = grad001 + u * (grad101 - grad001); + double f4 = grad011 + u * (grad111 - grad011); + double lerp1 = f1 + v * (f2 - f1); + return lerp1 + w * (f3 + v * (f4 - f3) - lerp1); + } + + @Deprecated + @ReplaceWith("evalNoise(double x, double y)") + public float noise2d(float x, float y) + { + int largeX = x > 0 ? (int) x : (int) x - 1; + int largeY = y > 0 ? (int) y : (int) y - 1; + x -= largeX; + y -= largeY; + largeX &= 255; + largeY &= 255; + + final float u = x * x * x * (x * (x * 6 - 15) + 10); + final float v = y * y * y * (y * (y * 6 - 15) + 10); + + int randY = this.perm[largeY] + largeX; + int randY1 = this.perm[largeY + 1] + largeX; + float[] grad2 = this.grad2f[this.perm[randY] & 15]; + final float grad00 = grad2[0] * x + grad2[1] * y; + grad2 = this.grad2f[this.perm[randY1] & 15]; + final float grad01 = grad2[0] * x + grad2[1] * (y - 1); + grad2 = this.grad2f[this.perm[1 + randY1] & 15]; + final float grad11 = grad2[0] * (x - 1) + grad2[1] * (y - 1); + grad2 = this.grad2f[this.perm[1 + randY] & 15]; + final float grad10 = grad2[0] * (x - 1) + grad2[1] * y; + + final float lerpX0 = grad00 + u * (grad10 - grad00); + return lerpX0 + v * (grad01 + u * (grad11 - grad01) - lerpX0); + } + + @Deprecated + @ReplaceWith("evalNoise(double x, double y, double z)") + public float noise3d(float x, float y, float z) + { + int unitX = x > 0 ? (int) x : (int) x - 1; + int unitY = y > 0 ? (int) y : (int) y - 1; + int unitZ = z > 0 ? (int) z : (int) z - 1; + + x -= unitX; + y -= unitY; + z -= unitZ; + + unitX &= 255; + unitY &= 255; + unitZ &= 255; + + final float u = x * x * x * (x * (x * 6 - 15) + 10); + final float v = y * y * y * (y * (y * 6 - 15) + 10); + final float w = z * z * z * (z * (z * 6 - 15) + 10); + + int randZ = this.perm[unitZ] + unitY; + int randZ1 = this.perm[unitZ + 1] + unitY; + int randYZ = this.perm[randZ] + unitX; + int randY1Z = this.perm[1 + randZ] + unitX; + int randYZ1 = this.perm[randZ1] + unitX; + int randY1Z1 = this.perm[1 + randZ1] + unitX; + int[] grad3 = this.grad3i[this.perm[randYZ] & 15]; + final float grad000 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randYZ] & 15]; + final float grad100 = grad3[0] * (x - 1) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[randY1Z] & 15]; + final float grad010 = grad3[0] * x + grad3[1] * (y - 1) + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randY1Z] & 15]; + final float grad110 = grad3[0] * (x - 1) + grad3[1] * (y - 1) + grad3[2] * z; + z--; + grad3 = this.grad3i[this.perm[randYZ1] & 15]; + final float grad001 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randYZ1] & 15]; + final float grad101 = grad3[0] * (x - 1) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3i[this.perm[randY1Z1] & 15]; + final float grad011 = grad3[0] * x + grad3[1] * (y - 1) + grad3[2] * z; + grad3 = this.grad3i[this.perm[1 + randY1Z1] & 15]; + final float grad111 = grad3[0] * (x - 1) + grad3[1] * (y - 1) + grad3[2] * z; + + float f1 = grad000 + u * (grad100 - grad000); + float f2 = grad010 + u * (grad110 - grad010); + float f3 = grad001 + u * (grad101 - grad001); + float f4 = grad011 + u * (grad111 - grad011); + float lerp1 = f1 + v * (f2 - f1); + return lerp1 + w * (f3 + v * (f4 - f3) - lerp1); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/NoiseModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/NoiseModule.java new file mode 100644 index 00000000..d87e2574 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/NoiseModule.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin; + +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; + +public abstract class NoiseModule +{ + + public double freqX = 1.0D; + public double freqY = 1.0D; + public double freqZ = 1.0D; + public double ampl = 1.0D; + + public void setFrequencyAll(double frequency) + { + this.freqX = frequency; + this.freqY = frequency; + this.freqZ = frequency; + } + + @Deprecated + @ReplaceWith("freqX") + public float frequencyX = 1; + @Deprecated + @ReplaceWith("freqY") + public float frequencyY = 1; + @Deprecated + @ReplaceWith("freqZ") + public float frequencyZ = 1; + @Deprecated + @ReplaceWith("ampl") + public float amplitude = 1; + + @Deprecated + @ReplaceWith("evalNoise(double x)") + public float getNoise(float i) + { + return i; + } + + @Deprecated + @ReplaceWith("evalNoise(double x, double y)") + public float getNoise(float i, float j) + { + return i; + } + + @Deprecated + @ReplaceWith("evalNoise(double x, double y, double z)") + public float getNoise(float i, float j, float k) + { + return i; + } + + @Deprecated + @ReplaceWith("setFrequencyAll(double frequency)") + public void setFrequency(float frequency) + { + this.frequencyX = frequency; + this.frequencyY = frequency; + this.frequencyZ = frequency; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/SimplexNoise.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/SimplexNoise.java new file mode 100644 index 00000000..fec13877 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/SimplexNoise.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin; + +import java.util.Random; + +public class SimplexNoise +{ + + int[] perm = new int[512]; + + public int[][] grad2d = new int[][] + { + {0, 0}, + {0, 1}, + {1, 1}, + {1, 0}}; + + public SimplexNoise(long seed) + { + final Random rand = new Random(seed); + for (int i = 0; i < 256; i++) + { + this.perm[i] = i; // Fill up the random array with numbers 0-256 + } + + for (int i = 0; i < 256; i++) // Shuffle those numbers for the random + // effect + { + final int j = rand.nextInt(256); + this.perm[i] = this.perm[i] ^ this.perm[j]; + this.perm[j] = this.perm[i] ^ this.perm[j]; + this.perm[i] = this.perm[i] ^ this.perm[j]; + } + + System.arraycopy(this.perm, 0, this.perm, 256, 256); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Billowed.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Billowed.java new file mode 100644 index 00000000..bdfa1956 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Billowed.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin.generator; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.perlin.FishyNoise; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; + +public class Billowed extends NoiseModule +{ + + private final FishyNoise noiseGen; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final int numOctaves; + private final float persistance; + + public Billowed(long seed, int nOctaves, float p) + { + this.numOctaves = nOctaves; + this.persistance = p; + final Random rand = new Random(seed); + this.offsetX = rand.nextFloat() / 2 + 0.01F; + this.offsetY = rand.nextFloat() / 2 + 0.01F; + this.offsetZ = rand.nextFloat() / 2 + 0.01F; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public float getNoise(float i) + { + i *= this.frequencyX; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += Math.abs(this.noiseGen.noise2d(i + this.offsetX, this.offsetY) * curAmplitude); + i *= 2; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j) + { + i *= this.frequencyX; + j *= this.frequencyY; + if (this.numOctaves == 2) + { + return Math.abs(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * this.amplitude) + + Math.abs(this.noiseGen.noise2d(i + i + this.offsetX, j + j + this.offsetY) * this.amplitude * this.persistance); + } + + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += Math.abs(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * curAmplitude); + i += i; + j += j; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j, float k) + { + i *= this.frequencyX; + j *= this.frequencyY; + k *= this.frequencyZ; + float val = 0; + for (int n = 0; n < this.numOctaves; n++) + { + val += Math.abs(this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ) * this.amplitude); + i *= 2; + j *= 2; + k *= 2; + } + return val; + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Gradient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Gradient.java new file mode 100644 index 00000000..54df4ecd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/Gradient.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin.generator; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.perlin.FishyNoise; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; + +public class Gradient extends NoiseModule +{ + + private final FishyNoise noiseGen; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final int numOctaves; + private final float persistance; + + public Gradient(long seed, int nOctaves, float p) + { + this.numOctaves = nOctaves; + this.persistance = p; + final Random rand = new Random(seed); + this.offsetX = rand.nextFloat() / 2 + 0.01F; + this.offsetY = rand.nextFloat() / 2 + 0.01F; + this.offsetZ = rand.nextFloat() / 2 + 0.01F; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public float getNoise(float i) + { + i *= this.frequencyX; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.noise2d(i + this.offsetX, this.offsetY) * curAmplitude; + i *= 2; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j) + { + if (this.numOctaves == 1) + { + return this.noiseGen.noise2d(i * this.frequencyX + this.offsetX, j * this.frequencyY + this.offsetY) * this.amplitude; + } + + i *= this.frequencyX; + j *= this.frequencyY; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * curAmplitude; + i *= 2; + j *= 2; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j, float k) + { + if (this.numOctaves == 1) + { + return this.noiseGen.noise3d(i * this.frequencyX + this.offsetX, j * this.frequencyY + this.offsetY, k * this.frequencyZ + this.offsetZ) * this.amplitude; + } + + i *= this.frequencyX; + j *= this.frequencyY; + k *= this.frequencyZ; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ) * curAmplitude; + i *= 2; + j *= 2; + k *= 2; + curAmplitude *= this.persistance; + } + return val; + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/GradientNoise.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/GradientNoise.java new file mode 100644 index 00000000..43fd1354 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/GradientNoise.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin.generator; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.perlin.Evaluator; +import micdoodle8.mods.galacticraft.core.perlin.FishyNoise; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; + +public class GradientNoise extends NoiseModule implements Evaluator +{ + + private final FishyNoise noiseGen; + private final double offsetX; + private final double offsetY; + private final double offsetZ; + private final int numOctaves; + private final double persistance; + + public GradientNoise(long seed, int nOctaves, double p) + { + this.numOctaves = nOctaves; + this.persistance = p; + Random rand = new Random(seed); + this.offsetX = (rand.nextFloat() / 2.0F) + 0.0D; + this.offsetY = (rand.nextFloat() / 2.0F) + 0.0D; + this.offsetZ = (rand.nextFloat() / 2.0F) + 0.0D; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public double evalNoise(double i) + { + i *= this.freqX; + double val = 0.0D; + double curAmplitude = this.ampl; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.eval(i + this.offsetX, this.offsetY) * curAmplitude; + i *= 2.0D; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public double evalNoise(double i, double j) + { + if (this.numOctaves == 1) + return this.noiseGen.eval(i * this.freqX + this.offsetX, j * this.freqY + this.offsetY) * this.ampl; + i *= this.freqX; + j *= this.freqY; + double val = 0.0D; + double curAmplitude = this.ampl; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.eval(i + this.offsetX, j + this.offsetY) * curAmplitude; + i *= 2.0D; + j *= 2.0D; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public double evalNoise(double i, double j, double k) + { + if (this.numOctaves == 1) + return this.noiseGen.eval(i * this.freqX + this.offsetX, j * this.freqY + this.offsetY, k * this.freqZ + this.offsetZ) * this.ampl; + i *= this.freqX; + j *= this.freqY; + k *= this.freqZ; + double val = 0.0D; + double curAmplitude = this.ampl; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.eval(i + this.offsetX, j + this.offsetY, k + this.offsetZ) * curAmplitude; + i *= 2.0D; + j *= 2.0D; + k *= 2.0D; + curAmplitude *= this.persistance; + } + return val; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/RidgedMulti.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/RidgedMulti.java new file mode 100644 index 00000000..0cbc1a92 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/perlin/generator/RidgedMulti.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.perlin.generator; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.perlin.FishyNoise; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; + +public class RidgedMulti extends NoiseModule +{ + + private final FishyNoise noiseGen; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final int numOctaves; + + public RidgedMulti(long seed, int nOctaves) + { + this.numOctaves = nOctaves; + final Random rand = new Random(seed); + this.offsetX = rand.nextFloat() / 2 + 0.01F; + this.offsetY = rand.nextFloat() / 2 + 0.01F; + this.offsetZ = rand.nextFloat() / 2 + 0.01F; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public float getNoise(float i) + { + i *= this.frequencyX; + float val = 0; + float weight = 1.0F; + final float offset = 1.0F; + final float gain = 2.0F; + for (int n = 0; n < this.numOctaves; n++) + { + float noise = this.absolute(this.noiseGen.noise2d(i + this.offsetX, this.offsetY)); + noise = offset - noise; + noise *= noise; + noise *= weight; + + weight = noise * gain; + + if (weight > 1F) + { + weight = 1F; + } + + if (weight < 0F) + { + weight = 0F; + } + + val += noise; + + i *= 2; + } + return val; + } + + @Override + public float getNoise(float i, float j) + { + i *= this.frequencyX; + j *= this.frequencyY; + float val = 0; + float weight = 1.0F; + final float offset = 1.0F; + final float gain = 2.0F; + for (int n = 0; n < this.numOctaves; n++) + { + float noise = this.absolute(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY)); + noise = offset - noise; + noise *= noise; + noise *= weight; + + weight = noise * gain; + + if (weight > 1F) + { + weight = 1F; + } + + if (weight < 0F) + { + weight = 0F; + } + + val += noise; + + i *= 2; + j *= 2; + } + return val; + } + + @Override + public float getNoise(float i, float j, float k) + { + i *= this.frequencyX; + j *= this.frequencyY; + k *= this.frequencyZ; + float val = 0F; + float weight = 1.0F; + final float offset = 1.0F; + final float gain = 2.0F; + for (int n = 0; n < this.numOctaves; n++) + { + float noise = this.absolute(this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ)); + noise = offset - noise; + noise *= noise; + noise *= weight; + + weight = noise * gain; + + if (weight > 1F) + { + weight = 1F; + } + + if (weight < 0F) + { + weight = 0F; + } + + val += noise; + + i *= 2; + j *= 2; + k *= 2; + } + return val; + } + + private float absolute(float d) + { + if (d < 0) + { + d = -d; + } + return d; + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/ClientProxyCore.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/ClientProxyCore.java new file mode 100644 index 00000000..1d64130e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/ClientProxyCore.java @@ -0,0 +1,1005 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.proxy; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.function.Predicate; + +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.MusicTicker; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMap; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.resources.IReloadableResourceManager; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.client.resource.IResourceType; +import net.minecraftforge.client.resource.ISelectiveResourceReloadListener; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.model.IModelState; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.client.IItemMeshDefinitionCustom; +import micdoodle8.mods.galacticraft.api.client.tabs.InventoryTabVanilla; +import micdoodle8.mods.galacticraft.api.client.tabs.TabRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedDetector; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedRedstone; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedRepeater; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.blocks.BlockFallenMeteor; +import micdoodle8.mods.galacticraft.core.blocks.BlockGrating; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDetector; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.client.DynamicTextureProper; +import micdoodle8.mods.galacticraft.core.client.EventHandlerClient; +import micdoodle8.mods.galacticraft.core.client.fx.EffectHandler; +import micdoodle8.mods.galacticraft.core.client.gui.screen.InventoryTabGalacticraft; +import micdoodle8.mods.galacticraft.core.client.model.ModelRocketTier1; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelGrating; +import micdoodle8.mods.galacticraft.core.client.model.block.ModelPanelLightBase; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderAlienVillager; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderBuggy; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEntityFake; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedSkeletonBoss; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedSpider; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedWitch; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderEvolvedZombie; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderFlag; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderLander; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderMeteor; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderMeteorChunk; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderParaChest; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderSchematic; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderTier1Rocket; +import micdoodle8.mods.galacticraft.core.client.render.item.ItemModelBuggy; +import micdoodle8.mods.galacticraft.core.client.render.item.ItemModelFlag; +import micdoodle8.mods.galacticraft.core.client.render.item.ItemModelRocket; +import micdoodle8.mods.galacticraft.core.client.render.item.ItemModelWorkbench; +import micdoodle8.mods.galacticraft.core.client.render.item.TextureDungeonFinder; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityArclampRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityDishRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityEmergencyBoxRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityFluidPipeRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityFluidTankRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityPanelLightRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityPlatformRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityScreenRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntitySolarPanelRenderer; +import micdoodle8.mods.galacticraft.core.client.render.tile.TileEntityTreasureChestRenderer; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.client.sounds.MusicTickerGC; +import micdoodle8.mods.galacticraft.core.entities.EntityAlienVillager; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedWitch; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.EntityFlag; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteorChunk; +import micdoodle8.mods.galacticraft.core.entities.EntityParachest; +import micdoodle8.mods.galacticraft.core.entities.EntitySkeletonBoss; +import micdoodle8.mods.galacticraft.core.entities.EntityTier1Rocket; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerBaseSP; +import micdoodle8.mods.galacticraft.core.entities.player.IPlayerClient; +import micdoodle8.mods.galacticraft.core.entities.player.PlayerClient; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; +import micdoodle8.mods.galacticraft.core.items.ItemFood; +import micdoodle8.mods.galacticraft.core.items.ItemSchematic; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.tick.KeyHandlerClient; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.tile.TileEntityArclamp; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDish; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEmergencyBox; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPlatform; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.util.ASMUtil; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.BlockMetaList; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.PartialCanister; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import api.player.client.ClientPlayerAPI; + +public class ClientProxyCore extends CommonProxyCore implements ISelectiveResourceReloadListener +{ + + public static List flagRequestsSent = new ArrayList<>(); + public static Set valueableBlocks = Sets.newHashSet(); + public static HashSet detectableBlocks = Sets.newHashSet(); + public static List leakTrace = null; + public static Map playerItemData = Maps.newHashMap(); + public static double playerPosX; + public static double playerPosY; + public static double playerPosZ; + public static float playerRotationYaw; + public static float playerRotationPitch; + public static boolean lastSpacebarDown; + + public static HashMap clientSpaceStationID = Maps.newHashMap(); + public static MusicTicker.MusicType MUSIC_TYPE_MARS; + public static InventoryExtended dummyInventory = new InventoryExtended(); + public static Map submergedTextures = Maps.newHashMap(); + public static IPlayerClient playerClientHandler = new PlayerClient(); + public static Minecraft mc = FMLClientHandler.instance().getClient(); + public static List gearDataRequests = Lists.newArrayList(); + public static DynamicTextureProper overworldTextureClient; + public static DynamicTextureProper overworldTextureWide; + public static DynamicTextureProper overworldTextureLarge; + public static boolean overworldTextureRequestSent; + public static boolean overworldTexturesValid; + public static float PLAYER_Y_OFFSET = 1.6200000047683716F; + public static ResourceLocation playerHead = null; + public static final ResourceLocation saturnRingTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/saturn_rings.png"); + public static final ResourceLocation uranusRingTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/uranus_rings.png"); + private static List itemsToRegisterJson = Lists.newArrayList(); + private static ModelResourceLocation fuelLocation = new ModelResourceLocation(Constants.TEXTURE_PREFIX + "fuel", "fluid"); + private static ModelResourceLocation oilLocation = new ModelResourceLocation(Constants.TEXTURE_PREFIX + "oil", "fluid"); + private static List canisters = Lists.newArrayList(); + public static Map capeMap = new HashMap<>(); + + @Deprecated + public static EnumRarity galacticraftItem = EnumHelper.addRarity("GCRarity", TextFormatting.BLUE, "Space"); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + ClientProxyCore.registerEntityRenderers(); + ModelLoaderRegistry.registerLoader(OBJLoaderGC.instance); + OBJLoaderGC.instance.addDomain(Constants.ASSET_PREFIX); + + if (CompatibilityManager.PlayerAPILoaded) + { + ClientPlayerAPI.register(Constants.MOD_ID_CORE, GCPlayerBaseSP.class); + } + MinecraftForge.EVENT_BUS.register(this); + ClientProxyCore.registerHandlers(); + } + + @Override + public void init(FMLInitializationEvent event) + { + MUSIC_TYPE_MARS = EnumHelper.addEnum(MusicTicker.MusicType.class, "MARS_JC", new Class[] {SoundEvent.class, Integer.TYPE, Integer.TYPE}, GCSounds.music, 12000, 24000); + ClientProxyCore.registerTileEntityRenderers(); + ClientProxyCore.updateCapeList(); + ClientProxyCore.registerInventoryJsons(); + + Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler((state, world, pos, tintIndex) -> + { + return BlockFallenMeteor.colorMultiplier(world, pos); + }, GCBlocks.fallenMeteor); + + Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler((state, world, pos, tintIndex) -> + { + Block b = state.getBlock(); + return (b instanceof BlockSpaceGlass) ? ((BlockSpaceGlass) b).color : 0xFFFFFF; + }, GCBlocks.spaceGlassVanilla, GCBlocks.spaceGlassClear, GCBlocks.spaceGlassStrong); + + Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler((state, world, pos, tintIndex) -> + { + if (world != null && pos != null) + { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileEntityPanelLight) + { + IBlockState baseState = ((TileEntityPanelLight) tile).getBaseBlock(); + return Minecraft.getMinecraft().getBlockColors().colorMultiplier(baseState, world, pos, tintIndex); + } + } + return 0xFFFFFF; + }, GCBlocks.panelLighting); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + ClientProxyCore.registerInventoryTabs(); + ItemSchematic.registerTextures(); + + MinecraftForge.EVENT_BUS.register(new TabRegistry()); + + if (!CompatibilityManager.RenderPlayerAPILoaded) + { + try + { + RenderManager renderManager = FMLClientHandler.instance().getClient().getRenderManager(); + ASMUtil.setPrivateValue(RenderManager.class, renderManager, new RenderPlayerGC(), "playerRenderer", "field_178637_m"); + + Map skinMap = ASMUtil.getPrivateValue(RenderManager.class, renderManager, "skinMap", "field_178636_l"); + skinMap.put("default", new RenderPlayerGC(skinMap.get("default"), false)); + skinMap.put("slim", new RenderPlayerGC(skinMap.get("slim"), true)); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + ((IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager()).registerReloadListener(this); + + try + { + ASMUtil.setPrivateValue(Minecraft.class, Minecraft.getMinecraft(), new MusicTickerGC(Minecraft.getMinecraft()), "musicTicker", "field_147126_aw"); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + @Override + public void onResourceManagerReload(IResourceManager resourceManager, Predicate resourcePredicate) + { + //NOOP + } + + @Override + public void postRegisterItem(Item item) + { + if (!item.getHasSubtypes()) + { + ClientProxyCore.itemsToRegisterJson.add(item); + } + } + + @Override + public void registerVariants() + { + ClientProxyCore.addVariants(); + + Item fuel = Item.getItemFromBlock(GCBlocks.fuel); + ModelBakery.registerItemVariants(fuel, new ResourceLocation("galacticraftcore:fuel")); + ModelLoader.setCustomMeshDefinition(fuel, IItemMeshDefinitionCustom.create((ItemStack stack) -> fuelLocation)); + ModelLoader.setCustomStateMapper(GCBlocks.fuel, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return fuelLocation; + } + }); + Item oil = Item.getItemFromBlock(GCBlocks.crudeOil); + ModelBakery.registerItemVariants(oil, new ResourceLocation("galacticraftcore:oil")); + ModelLoader.setCustomMeshDefinition(oil, IItemMeshDefinitionCustom.create((ItemStack stack) -> oilLocation)); + ModelLoader.setCustomStateMapper(GCBlocks.crudeOil, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return oilLocation; + } + }); + + Item nasaWorkbench = Item.getItemFromBlock(GCBlocks.nasaWorkbench); + ModelResourceLocation modelResourceLocation = new ModelResourceLocation("galacticraftcore:rocket_workbench", "inventory"); + ModelLoader.setCustomModelResourceLocation(nasaWorkbench, 0, modelResourceLocation); + + modelResourceLocation = new ModelResourceLocation("galacticraftcore:rocket_t1", "inventory"); + for (int i = 0; i < 5; ++i) + { + ModelLoader.setCustomModelResourceLocation(GCItems.rocketTier1, i, modelResourceLocation); + } + + for (int i = 0; i < 4; ++i) + { + modelResourceLocation = new ModelResourceLocation("galacticraftcore:buggy" + (i > 0 ? "_" + i : ""), "inventory"); + ModelLoader.setCustomModelResourceLocation(GCItems.buggy, i, modelResourceLocation); + } + + modelResourceLocation = new ModelResourceLocation("galacticraftcore:flag", "inventory"); + ModelLoader.setCustomModelResourceLocation(GCItems.flag, 0, modelResourceLocation); + ModelLoader.setCustomStateMapper(GCBlocks.oxygenDetector, new StateMap.Builder().ignore(BlockOxygenDetector.ACTIVE).build()); + ModelLoader.setCustomStateMapper(GCBlocks.panelLighting, new StateMap.Builder().ignore(BlockPanelLighting.TYPE).build()); + ModelLoader.setCustomStateMapper(GCBlocks.grating, new StateMap.Builder().ignore(BlockLiquid.LEVEL).ignore(BlockFluidBase.LEVEL).build()); + BlockGrating.remapVariant(GCBlocks.gratingWater); + BlockGrating.remapVariant(GCBlocks.gratingLava); + BlockGrating.remapForgeVariants(); + ModelLoader.setCustomStateMapper(GCBlocks.concealedRedstone, new StateMap.Builder().ignore(BlockConcealedRedstone.POWER).build()); + ModelLoader.setCustomStateMapper(GCBlocks.concealedRepeater_Powered, new StateMap.Builder().ignore(BlockConcealedRepeater.FACING, BlockConcealedRepeater.DELAY, BlockConcealedRepeater.LOCKED).build()); + ModelLoader.setCustomStateMapper(GCBlocks.concealedRepeater_Unpowered, new StateMap.Builder().ignore(BlockConcealedRepeater.FACING, BlockConcealedRepeater.DELAY, BlockConcealedRepeater.LOCKED).build()); + ModelLoader.setCustomStateMapper(GCBlocks.concealedDetector, new StateMap.Builder().ignore(BlockConcealedDetector.FACING, BlockConcealedDetector.DETECTED).build()); + } + + @Override + public World getClientWorld() + { + return ClientProxyCore.mc.world; + } + + @Override + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object[] otherInfo) + { + EffectHandler.spawnParticle(particleID, position, motion, otherInfo); + } + + @Override + public World getWorldForID(int dimensionID) + { + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + return WorldUtil.getWorldForDimensionServer(dimensionID); + } + + World world = ClientProxyCore.mc.world; + + if (world != null && GCCoreUtil.getDimensionID(world) == dimensionID) + { + return world; + } + + return null; + } + + @Override + public EntityPlayer getPlayerFromNetHandler(INetHandler handler) + { + if (handler instanceof NetHandlerPlayServer) + { + return ((NetHandlerPlayServer) handler).player; + } + return FMLClientHandler.instance().getClientPlayerEntity(); + } + + @Override + public void unregisterNetwork(FluidNetwork fluidNetwork) + { + super.unregisterNetwork(fluidNetwork); + + if (!GCCoreUtil.getEffectiveSide().isServer()) + { + TickHandlerClient.removeFluidNetwork(fluidNetwork); + } + } + + @Override + public void registerNetwork(FluidNetwork fluidNetwork) + { + super.registerNetwork(fluidNetwork); + + if (!GCCoreUtil.getEffectiveSide().isServer()) + { + TickHandlerClient.addFluidNetwork(fluidNetwork); + } + } + + @Override + public boolean isPaused() + { + if (FMLClientHandler.instance().getClient().isSingleplayer() && !FMLClientHandler.instance().getClient().getIntegratedServer().getPublic()) + { + GuiScreen screen = FMLClientHandler.instance().getClient().currentScreen; + + if (screen != null) + { + return screen.doesGuiPauseGame(); + } + } + + return false; + } + + @SubscribeEvent + public void onTextureStitchedPre(TextureStitchEvent.Pre event) + { + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:blocks/assembly")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/rocket_t1")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/buggy_main")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/buggy_storage")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/buggy_wheels")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/flag0")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:model/frequency_module")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:blocks/fluids/oxygen_gas")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:blocks/fluids/hydrogen_gas")); + event.getMap().registerSprite(new ResourceLocation("galacticraftcore:blocks/bubble")); + new TextureDungeonFinder("galacticraftcore:items/dungeonfinder").register(event.getMap()); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onModelBakeEvent(ModelBakeEvent event) + { + // Specified transformations only take effect on the "inventory" + // variant, not other variants. + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + replaceModelDefault(event, "rocket_workbench", "block/workbench.obj", ImmutableList.of("Cube"), ItemModelWorkbench.class, new TRSRTransformation(new javax.vecmath.Vector3f(0.7F, 0.1F, 0.0F), rot, new javax.vecmath.Vector3f(0.2604F, 0.2604F, 0.2604F), new javax.vecmath.Quat4f()), "inventory", "normal"); + replaceModelDefault(event, "rocket_t1", "rocket_t1.obj", ImmutableList.of("Rocket"), ItemModelRocket.class, TRSRTransformation.identity()); + + for (int i = 0; i < 4; ++i) + { + ImmutableList objects = ImmutableList.of("MainBody", "RadarDish_Dish", "Wheel_Back_Left", "Wheel_Back_Right", "Wheel_Front_Left", "Wheel_Front_Right"); + switch (i) + { + case 0: + break; + case 1: + objects = ImmutableList.of("MainBody", "RadarDish_Dish", "Wheel_Back_Left", "Wheel_Back_Right", "Wheel_Front_Left", "Wheel_Front_Right", "CargoLeft"); + break; + case 2: + objects = ImmutableList.of("MainBody", "RadarDish_Dish", "Wheel_Back_Left", "Wheel_Back_Right", "Wheel_Front_Left", "Wheel_Front_Right", "CargoLeft", "CargoMid"); + break; + case 3: + objects = ImmutableList.of("MainBody", "RadarDish_Dish", "Wheel_Back_Left", "Wheel_Back_Right", "Wheel_Front_Left", "Wheel_Front_Right", "CargoLeft", "CargoMid", "CargoRight"); + break; + } + replaceModelDefault(event, "buggy" + (i > 0 ? "_" + i : ""), "buggy_inv.obj", objects, ItemModelBuggy.class, TRSRTransformation.identity()); + } + + replaceModelDefault(event, "flag", "flag.obj", ImmutableList.of("Flag", "Pole"), ItemModelFlag.class, TRSRTransformation.identity()); + ModelResourceLocation blockLoc = new ModelResourceLocation(Constants.ASSET_PREFIX + ":panel_lighting", "normal"); + ModelResourceLocation defaultLoc; + defaultLoc = new ModelResourceLocation(GalacticraftPlanets.ASSET_PREFIX + ":asteroids_block", "basictypeasteroids=asteroid_deco"); + event.getModelRegistry().putObject(blockLoc, new ModelPanelLightBase(defaultLoc)); + defaultLoc = new ModelResourceLocation(Constants.ASSET_PREFIX + ":grating", "normal"); + event.getModelRegistry().putObject(defaultLoc, new ModelGrating(defaultLoc, event.getModelManager())); + for (int i = 1; i < BlockGrating.number; i++) + { + blockLoc = new ModelResourceLocation(Constants.ASSET_PREFIX + ":grating" + i, "normal"); + event.getModelRegistry().putObject(blockLoc, new ModelGrating(defaultLoc, event.getModelManager())); + } + } + + /** + * Specified parentState transformations only take effect on the "inventory" + * variant, not other variants Make sure that identity gives the correct + * model for other variants! Used for example by the NASA Workbench: + * transform the model for inventory but not for normal model + */ + private void replaceModelDefault(ModelBakeEvent event, String resLoc, String objLoc, List visibleGroups, Class clazz, IModelState parentState, String... variants) + { + ClientUtil.replaceModel(Constants.ASSET_PREFIX, event, resLoc, objLoc, visibleGroups, clazz, parentState, variants); + } + + public static void registerEntityRenderers() + { + RenderingRegistry.registerEntityRenderingHandler(EntityTier1Rocket.class, (RenderManager manager) -> new RenderTier1Rocket(manager, new ModelRocketTier1(), Constants.ASSET_PREFIX, "rocket_t1")); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedSpider.class, (RenderManager manager) -> new RenderEvolvedSpider(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedZombie.class, (RenderManager manager) -> new RenderEvolvedZombie(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedCreeper.class, (RenderManager manager) -> new RenderEvolvedCreeper(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedSkeleton.class, (RenderManager manager) -> new RenderEvolvedSkeleton(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntitySkeletonBoss.class, (RenderManager manager) -> new RenderEvolvedSkeletonBoss(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityMeteor.class, (RenderManager manager) -> new RenderMeteor(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityFlag.class, (RenderManager manager) -> new RenderFlag(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityParachest.class, (RenderManager manager) -> new RenderParaChest(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityAlienVillager.class, (RenderManager manager) -> new RenderAlienVillager(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityLander.class, (RenderManager manager) -> new RenderLander(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityCelestialFake.class, (RenderManager manager) -> new RenderEntityFake(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityBuggy.class, (RenderManager manager) -> new RenderBuggy(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityMeteorChunk.class, (RenderManager manager) -> new RenderMeteorChunk(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityHangingSchematic.class, (RenderManager manager) -> new RenderSchematic(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedEnderman.class, (RenderManager manager) -> new RenderEvolvedEnderman(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEvolvedWitch.class, (RenderManager manager) -> new RenderEvolvedWitch(manager)); + } + + private static void registerHandlers() + { + TickHandlerClient tickHandlerClient = new TickHandlerClient(); + MinecraftForge.EVENT_BUS.register(tickHandlerClient); + MinecraftForge.EVENT_BUS.register(new KeyHandlerClient()); + ClientRegistry.registerKeyBinding(KeyHandlerClient.galaxyMap); + ClientRegistry.registerKeyBinding(KeyHandlerClient.openFuelGui); + ClientRegistry.registerKeyBinding(KeyHandlerClient.toggleAdvGoggles); + MinecraftForge.EVENT_BUS.register(new EventHandlerClient()); + } + + private static void registerTileEntityRenderers() + { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTreasureChest.class, new TileEntityTreasureChestRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySolar.class, new TileEntitySolarPanelRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityScreen.class, new TileEntityScreenRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluidTank.class, new TileEntityFluidTankRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluidPipe.class, new TileEntityFluidPipeRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDish.class, new TileEntityDishRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityArclamp.class, new TileEntityArclampRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPanelLight.class, new TileEntityPanelLightRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPlatform.class, new TileEntityPlatformRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEmergencyBox.class, new TileEntityEmergencyBoxRenderer()); + } + + private static void registerInventoryJsons() + { + for (Item toReg : ClientProxyCore.itemsToRegisterJson) + { + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, toReg); + } + + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.canister, 0, "canister"); // This + // was + // canister_tin + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.canister, 1, "canister_copper"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.rocketEngine, 0, "engine"); // This + // was + // tier1engine + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.rocketEngine, 1, "tier1booster"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 0, "parachute"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 1, "parachute_black"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 2, "parachute_blue"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 3, "parachute_lime"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 4, "parachute_brown"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 5, "parachute_darkblue"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 6, "parachute_darkgray"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 7, "parachute_darkgreen"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 8, "parachute_gray"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 9, "parachute_magenta"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 10, "parachute_orange"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 11, "parachute_pink"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 12, "parachute_purple"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 13, "parachute_red"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 14, "parachute_teal"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.parachute, 15, "parachute_yellow"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.schematic, 0, "schematic"); // This + // was + // schematic_buggy + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.schematic, 1, "schematic_rocket_t2"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.key, 0, "key"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.partBuggy, 0, "buggymat"); // This + // was + // wheel + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.partBuggy, 1, "seat"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.partBuggy, 2, "storage"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 0, "basic_item"); // This + // was + // solar_module_0 + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 1, "solar_module_1"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 2, "raw_silicon"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 3, "ingot_copper"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 4, "ingot_tin"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 5, "ingot_aluminum"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 6, "compressed_copper"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 7, "compressed_tin"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 8, "compressed_aluminum"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 9, "compressed_steel"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 10, "compressed_bronze"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 11, "compressed_iron"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 12, "wafer_solar"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 13, "wafer_basic"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 14, "wafer_advanced"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 15, "food"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 16, "dehydrated_carrot"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 17, "dehydrated_melon"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 18, "dehydrated_potato"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 19, "frequency_module"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.basicItem, 20, "ambient_thermal_controller"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.foodItem, 0, "food"); + for (int j = 1; j < ItemFood.names.length; j++) + { + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.foodItem, j, ItemFood.names[j]); + } + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.itemBasicMoon, 0, "item_basic_moon"); // This + // was + // meteoric_iron_ingot + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.itemBasicMoon, 1, "compressed_meteoric_iron"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.itemBasicMoon, 2, "lunar_sapphire"); + if (CompatibilityManager.isIc2Loaded()) + { + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.ic2compat, 0, "ic2compat"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.ic2compat, 1, "ic2_ore_purified_alu"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.ic2compat, 2, "ic2_ore_crushed_alu"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.ic2compat, 7, "ic2_dust_small_titanium"); + } + + for (PartialCanister container : ClientProxyCore.canisters) + { + for (int i = 0; i <= container.getItem().getMaxDamage(); ++i) + { + final int levels = container.getTextureCount() - 1; + final int fillLevel = levels - levels * i / container.getItem().getMaxDamage(); + ClientUtil.registerItemJson(container.getModID() + ":", container.getItem(), i, container.getBaseName() + (fillLevel > 0 ? "_" + fillLevel : "")); + } + } + + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.meteorChunk, 0, "meteor_chunk"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.meteorChunk, 1, "meteor_chunk_hot"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.buggy, 0, "buggy"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.buggy, 1, "buggy_1"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.buggy, 2, "buggy_2"); + ClientUtil.registerItemJson(Constants.TEXTURE_PREFIX, GCItems.buggy, 3, "buggy_3"); + + // Blocks + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.breatheableAir); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.brightAir); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.brightBreatheableAir); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.brightLamp); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.treasureChestTier1); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.landingPad, 0, "landing_pad"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.landingPad, 1, "buggy_pad"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.unlitTorch); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.unlitTorchLit); + for (Block torch : GCBlocks.otherModTorchesLit) + { + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, torch); + } + for (Block torch : GCBlocks.otherModTorchesUnlit) + { + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, torch); + } + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenDistributor); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenPipe); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenPipePull); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenCollector); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenCompressor, 0, "oxygen_compressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenCompressor, 4, "oxygen_decompressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenSealer); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.oxygenDetector); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.nasaWorkbench); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.compactNasaWorkbench); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.radioTelescope); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.fallenMeteor); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 3, "deco_block_0"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 4, "deco_block_1"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 5, "ore_copper_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 6, "ore_tin_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 7, "ore_aluminum_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 8, "ore_silicon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 9, "block_copper_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 10, "block_tin_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 11, "block_aluminum_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 12, "block_meteoric_iron_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.basicBlock, 13, "block_silicon_gc"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.airLockFrame, 0, "air_lock_frame"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.airLockFrame, 1, "air_lock_controller"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.airLockSeal, 0, "air_lock_seal"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassClear, 0, "space_glass_clear"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassVanilla, 0, "space_glass_vanilla"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassStrong, 0, "space_glass_strong"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassClear, 1, "space_glass_tin_clear"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassVanilla, 1, "space_glass_tin_vanilla"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceGlassStrong, 1, "space_glass_tin_strong"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.crafting); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.refinery); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.fuelLoader); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.landingPadFull, 0, "landing_pad_full"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.landingPadFull, 1, "buggy_pad_full"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spaceStationBase); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.fakeBlock); + for (BlockEnclosed.EnumEnclosedBlockType type : BlockEnclosed.EnumEnclosedBlockType.values()) + { + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.sealableBlock, type.getMeta(), type == BlockEnclosed.EnumEnclosedBlockType.ALUMINUM_WIRE ? "enclosed" : type.getName()); + } + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.cargoLoader, 0, "cargo"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.cargoLoader, 4, "cargo_unloader"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.parachest); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.solarPanel, 0, "solar"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.solarPanel, 4, "advanced_solar"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase, 0, "coal_generator"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase, 12, "ingot_compressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase2, 0, "electric_ingot_compressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase2, 4, "circuit_fabricator"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase2, 8, "oxygen_storage_module"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase2, 12, "deconstructor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineTiered, 0, "energy_storage"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineTiered, 4, "electric_furnace"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineTiered, 8, "cluster_storage"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineTiered, 12, "arc_furnace"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase3, 0, "painter"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.machineBase4, 0, "advanced_compressor"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.aluminumWire, 0, "aluminum_wire"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.aluminumWire, 1, "aluminum_wire_heavy"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.aluminumWire, 2, "aluminum_wire_switch"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.aluminumWire, 3, "aluminum_wire_switch_heavy"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 0, "panel_lighting"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 1, "panel_lighting_1"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 2, "panel_lighting_2"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 3, "panel_lighting_3"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.panelLighting, 4, "panel_lighting_4"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.platform); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.emergencyBox, 0, "emergency_box"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.emergencyBox, 1, "emergency_box_full"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.grating); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.glowstoneTorch); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 0, "ore_copper_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 1, "ore_tin_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 2, "ore_cheese_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 3, "moon_dirt_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 4, "basic_block_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 5, "moon_turf"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 6, "ore_sapphire_moon"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.blockMoon, 14, "moon_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.cheeseBlock); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.spinThruster); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.screen); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.telemetry); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.fluidTank); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 0, "slab_tin_1"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 1, "slab_tin_2"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 2, "slab_moon_stone"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 3, "slab_moon_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 4, "slab_mars_cobblestone"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 5, "slab_mars_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.slabGCHalf, 6, "slab_asteroid"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.tinStairs1); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.tinStairs2); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.moonStoneStairs); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.moonBricksStairs); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 0, "wall_tin_1"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 1, "wall_tin_2"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 2, "wall_moon_stone"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 3, "wall_moon_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 4, "wall_mars_cobblestone"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.wallGC, 5, "wall_mars_dungeon_brick"); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.bossSpawner); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.concealedRedstone); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.concealedRepeater_Powered); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.concealedRepeater_Unpowered); + ClientUtil.registerBlockJson(Constants.TEXTURE_PREFIX, GCBlocks.concealedDetector); + // TODO: doubleslabs, fluids - and all the remaining meta-dependent + // block models (e.g. machine, machine2) have no 'inventory' variant for + // the meta-less block... + } + + private static void addVariants() + { + // BlockItem variants: + addCoreVariant("air_lock_frame", "air_lock_frame", "air_lock_controller"); + addCoreVariant("basic_block_core", "deco_block_0", "deco_block_1", "ore_copper_gc", "ore_tin_gc", "ore_aluminum_gc", "ore_silicon", "block_copper_gc", "block_tin_gc", "block_aluminum_gc", "block_meteoric_iron_gc", "block_silicon_gc"); + addCoreVariant("air_lock_frame", "air_lock_frame", "air_lock_controller"); + addCoreVariant("landing_pad", "landing_pad", "buggy_pad"); + addCoreVariant("oxygen_compressor", "oxygen_compressor", "oxygen_decompressor"); + addCoreVariant("cargo", "cargo", "cargo_unloader"); + addCoreVariant("enclosed", "enclosed_hv_cable", "enclosed_fluid_pipe", "enclosed_copper_cable", "enclosed_gold_cable", "enclosed_te_conduit", "enclosed_glass_fibre_cable", "enclosed_lv_cable", "enclosed_pipe_items_stone", "enclosed_pipe_items_cobblestone", "enclosed_pipe_fluids_stone", "enclosed_pipe_fluids_cobblestone", "enclosed_pipe_power_stone", "enclosed_pipe_power_gold", "enclosed_me_cable", "enclosed", "enclosed_heavy_aluminum_wire"); + addCoreVariant("solar", "advanced_solar", "solar"); + addCoreVariant("machine", "coal_generator", "ingot_compressor"); + addCoreVariant("machine2", "circuit_fabricator", "oxygen_storage_module", "electric_ingot_compressor", "deconstructor"); + addCoreVariant("machine3", "painter"); + addCoreVariant("machine4", "advanced_compressor"); + addCoreVariant("machine_tiered", "energy_storage", "electric_furnace", "cluster_storage", "arc_furnace"); + addCoreVariant("basic_block_moon", "ore_copper_moon", "ore_tin_moon", "ore_cheese_moon", "moon_dirt_moon", "basic_block_moon", "moon_turf", "ore_sapphire_moon", "moon_dungeon_brick"); + addCoreVariant("aluminum_wire", "aluminum_wire", "aluminum_wire_heavy", "aluminum_wire_switch", "aluminum_wire_switch_heavy"); + addCoreVariant("slab_gc_half", "slab_tin_1", "slab_tin_2", "slab_moon_stone", "slab_moon_dungeon_brick", "slab_mars_cobblestone", "slab_mars_dungeon_brick", "slab_asteroid"); + addCoreVariant("wall_gc", "wall_tin_1", "wall_tin_2", "wall_moon_stone", "wall_moon_dungeon_brick", "wall_mars_cobblestone", "wall_mars_dungeon_brick"); + addCoreVariant("space_glass_clear", "space_glass_clear", "space_glass_tin_clear"); + addCoreVariant("space_glass_vanilla", "space_glass_vanilla", "space_glass_tin_vanilla"); + addCoreVariant("space_glass_strong", "space_glass_strong", "space_glass_tin_strong"); + addCoreVariant("panel_lighting", "panel_lighting", "panel_lighting_1", "panel_lighting_2", "panel_lighting_3", "panel_lighting_4"); + addCoreVariant("emergency_box", "emergency_box", "emergency_box_full"); + + // Item variants: best if the damage=0 variant has the registered item + // name, to avoid ModelLoader errors for the #inventory variant + addCoreVariant("canister", "canister", "canister_copper"); + addCoreVariant("engine", "engine", "tier1booster"); + addCoreVariant("parachute", "parachute", "parachute_black", "parachute_blue", "parachute_lime", "parachute_brown", "parachute_darkblue", "parachute_darkgray", "parachute_darkgreen", "parachute_gray", "parachute_magenta", "parachute_orange", "parachute_pink", "parachute_purple", "parachute_red", "parachute_teal", "parachute_yellow"); + addCoreVariant("schematic", "schematic", "schematic_rocket_t2"); + addCoreVariant("key", "key"); + addCoreVariant("buggymat", "buggymat", "seat", "storage"); + addCoreVariant("basic_item", "basic_item", "solar_module_1", "raw_silicon", "ingot_copper", "ingot_tin", "ingot_aluminum", "compressed_copper", "compressed_tin", "compressed_aluminum", "compressed_steel", "compressed_bronze", "compressed_iron", "wafer_solar", "wafer_basic", "wafer_advanced", "food", "dehydrated_carrot", "dehydrated_melon", "dehydrated_potato", "frequency_module", "ambient_thermal_controller"); + addCoreVariant("food", "food", "dehydrated_carrot", "dehydrated_melon", "dehydrated_potato", ItemFood.names[4], ItemFood.names[5], ItemFood.names[6], ItemFood.names[7], ItemFood.names[8], ItemFood.names[9]); + addCoreVariant("item_basic_moon", "item_basic_moon", "compressed_meteoric_iron", "lunar_sapphire"); + addCoreVariant("meteor_chunk", "meteor_chunk", "meteor_chunk_hot"); + addCoreVariant("buggy", "buggy", "buggy_1", "buggy_2", "buggy_3"); + if (CompatibilityManager.isIc2Loaded()) + addCoreVariant("ic2compat", "ic2compat", "ic2_ore_purified_alu", "ic2_ore_crushed_alu", "ic2_dust_small_titanium"); + + for (PartialCanister container : ClientProxyCore.canisters) + { + String[] variants = new String[container.getTextureCount()]; + for (int i = 0; i < container.getTextureCount(); ++i) + { + variants[i] = container.getBaseName() + (i > 0 ? "_" + i : ""); + } + ClientUtil.addVariant(container.getModID(), container.getBaseName(), variants); + } + } + + private static void addCoreVariant(String name, String... variants) + { + ClientUtil.addVariant(Constants.MOD_ID_CORE, name, variants); + } + + public static void registerInventoryTabs() + { + if (TabRegistry.getTabList().size() == 0) + { + TabRegistry.registerTab(new InventoryTabVanilla()); + } + + TabRegistry.registerTab(new InventoryTabGalacticraft()); + } + + @Override + public void registerCanister(PartialCanister container) + { + ClientProxyCore.canisters.add(container); + } + + @Override + public void registerFluidTexture(Fluid fluid, ResourceLocation submergedTexture) + { + ClientProxyCore.submergedTextures.put(fluid, submergedTexture); + } + + private static void updateCapeList() + { + int timeout = 10000; + URL capeListUrl; + + try + { + capeListUrl = new URL("https://raw.github.com/micdoodle8/Galacticraft/master/capes-uuid.txt"); + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.noticableWarning(e, "Error getting capes list URL"); + } + else + { + GalacticraftCore.logger.warn("Error getting capes list URL"); + } + return; + } + + URLConnection connection; + + try + { + connection = capeListUrl.openConnection(); + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + e.printStackTrace(); + return; + } + + connection.setConnectTimeout(timeout); + connection.setReadTimeout(timeout); + InputStream stream; + + try + { + stream = connection.getInputStream(); + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + e.printStackTrace(); + return; + } + + InputStreamReader streamReader = new InputStreamReader(stream); + BufferedReader reader = new BufferedReader(streamReader); + + String line; + try + { + while ((line = reader.readLine()) != null) + { + if (line.contains(":")) + { + capeMap.put(line.split(":")[0], new ResourceLocation(Constants.MOD_ID_CORE, "textures/misc/capes/cape_" + line.split(":")[1].split(" ")[0].substring(4).toLowerCase() + ".png")); + } + } + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + e.printStackTrace(); + } finally + { + try + { + reader.close(); + } catch (IOException e) + { + if (ConfigManagerCore.enableDebug) + e.printStackTrace(); + } + } + } + + public static class EventSpecialRender extends Event + { + + public final float partialTicks; + + public EventSpecialRender(float partialTicks) + { + this.partialTicks = partialTicks; + } + } + + @Override + public PlayerGearData getGearData(EntityPlayer player) + { + PlayerGearData gearData = ClientProxyCore.playerItemData.get(player.getName()); + + if (gearData == null) + { + UUID id = player.getUniqueID(); + + if (!ClientProxyCore.gearDataRequests.contains(id)) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_GEAR_DATA2, GCCoreUtil.getDimensionID(player.world), new Object[] {id})); + ClientProxyCore.gearDataRequests.add(id); + } + } + + return gearData; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/CommonProxyCore.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/CommonProxyCore.java new file mode 100644 index 00000000..9aadba14 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/proxy/CommonProxyCore.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.proxy; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.entities.player.IPlayerServer; +import micdoodle8.mods.galacticraft.core.entities.player.PlayerServer; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PartialCanister; +import micdoodle8.mods.galacticraft.core.wrappers.PlayerGearData; + +public class CommonProxyCore +{ + + public IPlayerServer player = new PlayerServer(); + + public void preInit(FMLPreInitializationEvent event) + { + } + + public void registerVariants() + { + + } + + public void init(FMLInitializationEvent event) + { + } + + public void postInit(FMLPostInitializationEvent event) + { + } + + public void registerCanister(PartialCanister container) + { + } + + public void registerFluidTexture(Fluid fluid, ResourceLocation submergedTexture) + { + } + + public World getClientWorld() + { + return null; + } + + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object[] otherInfo) + { + } + + public World getWorldForID(int dimensionID) + { + return WorldUtil.getWorldForDimensionServer(dimensionID); + } + + public EntityPlayer getPlayerFromNetHandler(INetHandler handler) + { + if (handler instanceof NetHandlerPlayServer) + { + return ((NetHandlerPlayServer) handler).player; + } else + { + return null; + } + } + + public void postRegisterItem(Item item) + { + } + + public void unregisterNetwork(FluidNetwork fluidNetwork) + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + TickHandlerServer.removeFluidNetwork(fluidNetwork); + } + } + + public void registerNetwork(FluidNetwork fluidNetwork) + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + TickHandlerServer.addFluidNetwork(fluidNetwork); + } + } + + public boolean isPaused() + { + return false; + } + + public PlayerGearData getGearData(EntityPlayer player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + int mask = stats.getMaskInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getMaskInSlot(), EnumExtendedInventorySlot.MASK); + int gear = stats.getGearInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getGearInSlot(), EnumExtendedInventorySlot.GEAR); + int leftTank = stats.getTankInSlot1() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot1(), EnumExtendedInventorySlot.LEFT_TANK); + int rightTank = stats.getTankInSlot2() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getTankInSlot2(), EnumExtendedInventorySlot.RIGHT_TANK); + int frequencyModule = stats.getFrequencyModuleInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT + : GalacticraftRegistry.findMatchingGearID(stats.getFrequencyModuleInSlot(), EnumExtendedInventorySlot.FREQUENCY_MODULE); + int[] thermalPadding = new int[4]; + thermalPadding[0] = stats.getThermalHelmetInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT + : GalacticraftRegistry.findMatchingGearID(stats.getThermalHelmetInSlot(), EnumExtendedInventorySlot.THERMAL_HELMET); + thermalPadding[1] = stats.getThermalChestplateInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT + : GalacticraftRegistry.findMatchingGearID(stats.getThermalChestplateInSlot(), EnumExtendedInventorySlot.THERMAL_CHESTPLATE); + thermalPadding[2] = stats.getThermalLeggingsInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT + : GalacticraftRegistry.findMatchingGearID(stats.getThermalLeggingsInSlot(), EnumExtendedInventorySlot.THERMAL_LEGGINGS); + thermalPadding[3] = + stats.getThermalBootsInSlot() == null ? GCPlayerHandler.GEAR_NOT_PRESENT : GalacticraftRegistry.findMatchingGearID(stats.getThermalBootsInSlot(), EnumExtendedInventorySlot.THERMAL_BOOTS); + // TODO: Parachute + return new PlayerGearData(player, mask, gear, leftTank, rightTank, frequencyModule, thermalPadding); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleActuallyAdditions.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleActuallyAdditions.java new file mode 100644 index 00000000..9aa699d1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleActuallyAdditions.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; + +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; + +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; + +public class CompatModuleActuallyAdditions +{ + + public static void addRecipes() + { + ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("oreAluminum"), OreDictionary.getOres("dustAluminum"), 2, new ArrayList(0), 0, 0); + // Silicon ore :- gives 5 silicon (normally 1-5 depending on fortune enchantment) + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(GCBlocks.basicBlock, 1, 8), new ItemStack(GCItems.basicItem, 5, 2), ItemStack.EMPTY, 0); + // Cheese ore :- gives 2 cheese curd (normally 1, fortune enchantment gives chance of 2) + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(GCBlocks.blockMoon, 1, 2), new ItemStack(GCItems.cheeseCurd, 2, 0), ItemStack.EMPTY, 0); + // Desh ore :- gives 2 raw desh (normally 1, fortune enchantment gives chance of 2) + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 2), new ItemStack(MarsItems.marsItemBasic, 2, 0), ItemStack.EMPTY, 0); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleIC2.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleIC2.java new file mode 100644 index 00000000..73322543 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/CompatModuleIC2.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.nbt.NBTTagCompound; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +import ic2.api.item.IC2Items; +import ic2.api.recipe.Recipes; + +public class CompatModuleIC2 +{ + + public static void addIndustrialCraft2Recipes() + { + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.ic2compat, 1, 1), new ItemStack(GCItems.basicItem, 1, 5), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.ic2compat, 1, 2), new ItemStack(GCItems.basicItem, 1, 5), 1.0F); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCBlocks.basicBlock, 1, 7), 1), null, false, new ItemStack(GCItems.ic2compat, 2, 2)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.basicItem, 1, 5), 1), null, false, new ItemStack(GCItems.ic2compat, 1, 0)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.basicItem, 1, 8), 1), null, false, new ItemStack(GCItems.ic2compat, 1, 0)); + ItemStack dustSmallIron = IC2Items.getItem("dust", "small_iron").copy(); + ItemStack dustStone = IC2Items.getItem("dust", "stone").copy(); + NBTTagCompound amountTag = new NBTTagCompound(); + amountTag.setInteger("amount", 1000); + ItemStack dustSmallTitanium = new ItemStack(GCItems.ic2compat, 1, 7); + NBTTagCompound heatTag1 = new NBTTagCompound(); + heatTag1.setInteger("minHeat", 2000); + Recipes.centrifuge.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.ic2compat, 1, 1), 1), heatTag1, false, new ItemStack[] + {dustSmallTitanium, new ItemStack(GCItems.ic2compat, 1, 0)}); + NBTTagCompound heatTag2 = new NBTTagCompound(); + heatTag2.setInteger("minHeat", 750); + Recipes.centrifuge.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.ic2compat, 1, 2), 1), heatTag1, false, new ItemStack[] + {dustSmallIron, new ItemStack(GCItems.ic2compat, 1, 0), dustStone}); + dustSmallIron = dustSmallIron.copy(); + dustSmallIron.setCount(2); + Recipes.oreWashing.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.ic2compat, 1, 2), 1), amountTag, false, new ItemStack[] + {new ItemStack(GCItems.ic2compat, 1, 1), dustSmallIron, dustStone}); + + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_COPPER_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:copper,insulation:0"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_GOLD_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:gold,insulation:1"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_HV_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:iron,insulation:1"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_GLASS_FIBRE_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:glass,insulation:0"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, BlockEnclosed.EnumEnclosedBlockType.IC2_LV_CABLE.getMeta()), new Object[] + {"XYX", 'Y', RecipeUtil.getIndustrialCraftItem("cable", "type:tin,insulation:1"), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ConditionEnabled.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ConditionEnabled.java new file mode 100644 index 00000000..72caf488 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ConditionEnabled.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.function.BooleanSupplier; + +import net.minecraft.util.JsonUtils; + +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.IConditionFactory; +import net.minecraftforge.common.crafting.JsonContext; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +import com.google.gson.JsonObject; + +public class ConditionEnabled implements IConditionFactory +{ + + @Override + public BooleanSupplier parse(JsonContext context, JsonObject json) + { + if (JsonUtils.hasField(json, "data")) + { + String data = JsonUtils.getString(json, "data"); + if (data.equals("can_default")) + { + return () -> !ConfigManagerCore.alternateCanisterRecipe; + } + if (data.equals("can_alt")) + { + return () -> ConfigManagerCore.alternateCanisterRecipe; + } + if (data.equals("aa_loaded")) + { + return () -> !CompatibilityManager.modAALoaded; + } + GalacticraftCore.logger.error("Unrecognised condition data: " + data); + } + + throw new IllegalStateException("Galacticraft recipe JSON condition error in recipe for " + CraftingHelper.getItemStack(json, context)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientAdvancedMetal.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientAdvancedMetal.java new file mode 100644 index 00000000..e7e8bdfc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientAdvancedMetal.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.JsonUtils; + +import net.minecraftforge.common.crafting.IIngredientFactory; +import net.minecraftforge.common.crafting.JsonContext; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +import com.google.gson.JsonObject; + +public class IngredientAdvancedMetal implements IIngredientFactory +{ + + @Nonnull + @Override + public Ingredient parse(JsonContext context, JsonObject json) + { + String metal = JsonUtils.getString(json, "metal"); + if (metal.equals("meteoric_iron_ingot")) + { + return Ingredient.fromStacks(new ItemStack(GCItems.itemBasicMoon, 1, 0)); + } + if (metal.equals("meteoric_iron_plate")) + { + return Ingredient.fromStacks(new ItemStack(GCItems.itemBasicMoon, 1, 1)); + } + if (metal.equals("desh_ingot")) + { + return Ingredient.fromStacks(new ItemStack(MarsItems.marsItemBasic, 1, 2)); + } + if (metal.equals("desh_plate")) + { + return Ingredient.fromStacks(new ItemStack(MarsItems.marsItemBasic, 1, 5)); + } + if (metal.equals("titanium_ingot")) + { + return Ingredient.fromStacks(new ItemStack(AsteroidsItems.basicItem, 1, 0)); + } + if (metal.equals("titanium_plate")) + { + return Ingredient.fromStacks(new ItemStack(AsteroidsItems.basicItem, 1, 6)); + } + if (metal.equals("lead_ingot")) + { + return Ingredient.fromStacks(new ItemStack(VenusItems.basicItem, 1, 1)); + } + return Ingredient.fromItem(GCItems.infiniteBatery); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientSilicon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientSilicon.java new file mode 100644 index 00000000..6389aaa8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/IngredientSilicon.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import javax.annotation.Nonnull; + +import net.minecraft.item.crafting.Ingredient; + +import net.minecraftforge.common.crafting.IIngredientFactory; +import net.minecraftforge.common.crafting.JsonContext; +import net.minecraftforge.oredict.OreIngredient; + +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +import com.google.gson.JsonObject; + +public class IngredientSilicon implements IIngredientFactory +{ + + @Nonnull + @Override + public Ingredient parse(JsonContext context, JsonObject json) + { + return new OreIngredient(ConfigManagerCore.otherModsSilicon); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/NasaWorkbenchRecipe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/NasaWorkbenchRecipe.java new file mode 100644 index 00000000..e3351be5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/NasaWorkbenchRecipe.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.HashMap; +import java.util.Map.Entry; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; + +public class NasaWorkbenchRecipe implements INasaWorkbenchRecipe +{ + + private ItemStack output; + private HashMap input; + + public NasaWorkbenchRecipe(ItemStack output, HashMap input) + { + this.output = output; + this.input = input; + + for (Entry entry : this.input.entrySet()) + { + if (entry.getValue() == null) + { + throw new IllegalArgumentException("Recipe contains null ingredient!"); + } + } + } + + @Override + public boolean matches(IInventory inventory) + { + for (Entry entry : this.input.entrySet()) + { + ItemStack stackAt = inventory.getStackInSlot(entry.getKey()); + + if (!this.checkItemEquals(stackAt, entry.getValue())) + { + return false; + } + } + + return true; + } + + private boolean checkItemEquals(ItemStack target, ItemStack input) + { + if (input.isEmpty() && !target.isEmpty() || !input.isEmpty() && target.isEmpty()) + { + return false; + } + return target.isEmpty() && input.isEmpty() + || target.getItem() == input.getItem() && (target.getItemDamage() == OreDictionary.WILDCARD_VALUE || target.getItemDamage() == input.getItemDamage()); + } + + @Override + public int getRecipeSize() + { + return this.input.size(); + } + + @Override + public ItemStack getRecipeOutput() + { + return this.output.copy(); + } + + @Override + public HashMap getRecipeInput() + { + return this.input; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/OreRecipeUpdatable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/OreRecipeUpdatable.java new file mode 100644 index 00000000..94bbe394 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/OreRecipeUpdatable.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.CraftingHelper.ShapedPrimer; +import net.minecraftforge.common.crafting.IRecipeFactory; +import net.minecraftforge.common.crafting.JsonContext; +import net.minecraftforge.oredict.OreIngredient; +import net.minecraftforge.oredict.ShapedOreRecipe; + +import micdoodle8.mods.galacticraft.api.recipe.IRecipeUpdatable; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; + +public class OreRecipeUpdatable extends ShapedOreRecipe implements IRecipeUpdatable +{ + + public OreRecipeUpdatable(ResourceLocation group, Block result, Object... recipe) + { + super(group, new ItemStack(result), recipe); + } + + public OreRecipeUpdatable(ResourceLocation group, Item result, Object... recipe) + { + super(group, new ItemStack(result), recipe); + } + + public OreRecipeUpdatable(ResourceLocation group, @Nonnull ItemStack result, Object... recipe) + { + super(group, result, CraftingHelper.parseShaped(recipe)); + } + + public OreRecipeUpdatable(ResourceLocation group, @Nonnull ItemStack result, ShapedPrimer primer) + { + super(group, result, primer); + } + + @Override + public void replaceInput(ItemStack inputA, List inputB) + { + if (inputB.isEmpty()) + return; + + for (int i = 0; i < this.input.size(); i++) + { + Ingredient test = this.input.get(i); + if (test.apply(inputA)) + { + this.input.set(i, Ingredient.fromStacks(inputB.toArray(new ItemStack[inputB.size()]))); + } + } + } + + @Override + public void replaceInput(ItemStack inputB) + { + for (int i = 0; i < this.input.size(); i++) + { + Ingredient test = this.input.get(i); + if (test instanceof OreIngredient && test.apply(inputB)) + { + this.input.set(i, Ingredient.fromStacks(inputB)); + } + } + } + + public static boolean itemListContains(List test, ItemStack stack) + { + for (Object b : test) + { + if (b instanceof ItemStack && ItemStack.areItemsEqual(stack, (ItemStack) b) && RecipeUtil.areItemStackTagsEqual(stack, (ItemStack) b)) + return true; + } + return false; + } + + public static OreRecipeUpdatable factory(JsonContext context, JsonObject json) + { + String group = JsonUtils.getString(json, "group", ""); + Map ingMap = Maps.newHashMap(); + for (Entry entry : JsonUtils.getJsonObject(json, "key").entrySet()) + { + if (entry.getKey().length() != 1) + throw new JsonSyntaxException("Invalid key entry: '" + entry.getKey() + "' is an invalid symbol (must be 1 character only)."); + if (" ".equals(entry.getKey())) + throw new JsonSyntaxException("Invalid key entry: ' ' is a reserved symbol."); + + ingMap.put(entry.getKey().toCharArray()[0], CraftingHelper.getIngredient(entry.getValue(), context)); + } + + ingMap.put(' ', Ingredient.EMPTY); + + JsonArray patternJ = JsonUtils.getJsonArray(json, "pattern"); + + if (patternJ.size() == 0) + throw new JsonSyntaxException("Invalid pattern: empty pattern not allowed"); + + String[] pattern = new String[patternJ.size()]; + for (int x = 0; x < pattern.length; ++x) + { + String line = JsonUtils.getString(patternJ.get(x), "pattern[" + x + "]"); + if (x > 0 && pattern[0].length() != line.length()) + throw new JsonSyntaxException("Invalid pattern: each row must be the same width"); + pattern[x] = line; + } + + ShapedPrimer primer = new ShapedPrimer(); + primer.width = pattern[0].length(); + primer.height = pattern.length; + primer.mirrored = JsonUtils.getBoolean(json, "mirrored", true); + primer.input = NonNullList.withSize(primer.width * primer.height, Ingredient.EMPTY); + + Set keys = Sets.newHashSet(ingMap.keySet()); + keys.remove(' '); + + int x = 0; + for (String line : pattern) + { + for (char chr : line.toCharArray()) + { + Ingredient ing = ingMap.get(chr); + if (ing == null) + throw new JsonSyntaxException("Pattern references symbol '" + chr + "' but it's not defined in the key"); + primer.input.set(x++, ing); + keys.remove(chr); + } + } + + if (!keys.isEmpty()) + throw new JsonSyntaxException("Key defines symbols that aren't used in pattern: " + keys); + + ItemStack result = CraftingHelper.getItemStack(JsonUtils.getJsonObject(json, "result"), context); + return new OreRecipeUpdatable(group.isEmpty() ? null : new ResourceLocation(group), result, primer); + } + + public static class RecipeFactory implements IRecipeFactory + { + + @Override + public IRecipe parse(JsonContext context, JsonObject json) + { + return OreRecipeUpdatable.factory(context, json); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/RecipeManagerGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/RecipeManagerGC.java new file mode 100644 index 00000000..4553bd4b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/RecipeManagerGC.java @@ -0,0 +1,567 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Optional; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.IRecipeUpdatable; +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; +import micdoodle8.mods.galacticraft.api.world.SpaceStationType; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed.EnumEnclosedBlockType; +import micdoodle8.mods.galacticraft.core.items.ItemBasic; +import micdoodle8.mods.galacticraft.core.items.ItemEmergencyKit; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; + +import appeng.api.AEApi; +import appeng.api.features.IGrinderRegistry; +import appeng.api.util.AEColor; + +public class RecipeManagerGC +{ + + public static ArrayList aluminumIngots = new ArrayList<>(); + private static boolean configSaved_RequireGCmetals = true; + private static boolean configSaved_QuickMode = false; + private static String configSaved_Silicon = "-"; + + public static void loadCompatibilityRecipes() + { + if (CompatibilityManager.isBCraftTransportLoaded()) + { + RecipeManagerGC.addBuildCraftCraftingRecipes(); + } + + if (CompatibilityManager.isIc2Loaded()) + { + CompatModuleIC2.addIndustrialCraft2Recipes(); + } + + if (CompatibilityManager.isAppEngLoaded()) + { + RecipeManagerGC.addAppEngRecipes(); + } + + if (CompatibilityManager.modAALoaded) + { + CompatModuleActuallyAdditions.addRecipes(); + } + + RecipeManagerGC.addExNihiloHeatSource(); + } + + public static void addUniversalRecipes() + { + // Look im just following orders here + //RecipeSorter.register("galacticraftcore:shapedore", OreRecipeUpdatable.class, Category.SHAPED, "after:minecraft:shaped before:minecraft:shapeless"); + + Object meteoricIronIngot = new ItemStack(GCItems.itemBasicMoon, 1, 0); + Object meteoricIronPlate = new ItemStack(GCItems.itemBasicMoon, 1, 1); + Object deshIngot = new ItemStack(MarsItems.marsItemBasic, 1, 2); + + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.basicBlock, 1, 5), new ItemStack(GCItems.basicItem, 1, 3), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.basicBlock, 1, 6), new ItemStack(GCItems.basicItem, 1, 4), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.basicBlock, 1, 7), new ItemStack(GCItems.basicItem, 1, 5), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.meteorChunk, 1, 0), new ItemStack(GCItems.meteorChunk, 1, 1), 0.1F); + FurnaceRecipes.instance().addSmelting(GCItems.meteoricIronRaw, new ItemStack(GCItems.itemBasicMoon), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.blockMoon, 1, 0), new ItemStack(GCItems.basicItem, 1, 3), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.blockMoon, 1, 1), new ItemStack(GCItems.basicItem, 1, 4), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.blockMoon, 1, 2), new ItemStack(GCItems.cheeseCurd), 1.0F); + // Recycling: smelt tin/copper canisters back into ingots + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.canister, 1, 0), new ItemStack(GCItems.basicItem, 3, 4), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.canister, 1, 1), new ItemStack(GCItems.basicItem, 3, 3), 1.0F); + if (CompatibilityManager.useAluDust()) + { + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.ic2compat, 1, 0), new ItemStack(GCItems.basicItem, 1, 5), 1.0F); + } + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCItems.foodItem, 1, 6), new ItemStack(GCItems.foodItem, 1, 7), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(GCBlocks.blockMoon, 1, 6), new ItemStack(GCItems.itemBasicMoon, 1, 2), 1.0F); + + HashMap input = new HashMap<>(); + input.put(1, new ItemStack(GCItems.partNoseCone)); + input.put(2, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(3, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(4, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(5, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(6, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(7, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(8, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(9, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(10, new ItemStack(GCItems.partFins)); + input.put(11, new ItemStack(GCItems.partFins)); + input.put(12, new ItemStack(GCItems.rocketEngine)); + input.put(13, new ItemStack(GCItems.partFins)); + input.put(14, new ItemStack(GCItems.partFins)); + input.put(15, ItemStack.EMPTY); + input.put(16, ItemStack.EMPTY); + input.put(17, ItemStack.EMPTY); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 0), input); + + NonNullList woodChests = OreDictionary.getOres("chestWood"); + HashMap input2; + + for (ItemStack woodChest : woodChests) + { + input2 = new HashMap<>(input); + input2.put(15, woodChest); + input2.put(16, ItemStack.EMPTY); + input2.put(17, ItemStack.EMPTY); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(15, ItemStack.EMPTY); + input2.put(16, woodChest); + input2.put(17, ItemStack.EMPTY); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(15, ItemStack.EMPTY); + input2.put(16, ItemStack.EMPTY); + input2.put(17, woodChest); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(15, woodChest); + input2.put(16, woodChest); + input2.put(17, ItemStack.EMPTY); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(15, woodChest); + input2.put(16, ItemStack.EMPTY); + input2.put(17, woodChest); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(15, ItemStack.EMPTY); + input2.put(16, woodChest); + input2.put(17, woodChest); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(15, woodChest); + input2.put(16, woodChest); + input2.put(17, woodChest); + RecipeUtil.addRocketBenchRecipe(new ItemStack(GCItems.rocketTier1, 1, 3), input2); + } + + // + + input = new HashMap<>(); + input.put(1, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(2, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(3, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(4, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(5, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(6, new ItemStack(GCItems.partBuggy, 1, 1)); + input.put(7, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(8, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(9, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(10, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(11, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(12, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(13, new ItemStack(GCItems.partBuggy)); + input.put(14, new ItemStack(GCItems.partBuggy)); + input.put(15, new ItemStack(GCItems.partBuggy)); + input.put(16, new ItemStack(GCItems.partBuggy)); + input.put(17, ItemStack.EMPTY); + input.put(18, ItemStack.EMPTY); + input.put(19, ItemStack.EMPTY); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 0), input); + + input2 = new HashMap<>(input); + input2.put(17, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(18, ItemStack.EMPTY); + input2.put(19, ItemStack.EMPTY); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(17, ItemStack.EMPTY); + input2.put(18, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(19, ItemStack.EMPTY); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(17, ItemStack.EMPTY); + input2.put(18, ItemStack.EMPTY); + input2.put(19, new ItemStack(GCItems.partBuggy, 1, 2)); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(17, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(18, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(19, ItemStack.EMPTY); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(17, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(18, ItemStack.EMPTY); + input2.put(19, new ItemStack(GCItems.partBuggy, 1, 2)); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(17, ItemStack.EMPTY); + input2.put(18, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(19, new ItemStack(GCItems.partBuggy, 1, 2)); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(17, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(18, new ItemStack(GCItems.partBuggy, 1, 2)); + input2.put(19, new ItemStack(GCItems.partBuggy, 1, 2)); + RecipeUtil.addBuggyBenchRecipe(new ItemStack(GCItems.buggy, 1, 3), input2); + + aluminumIngots.addAll(OreDictionary.getOres("ingotAluminum")); + ArrayList addedList = new ArrayList<>(); + for (ItemStack ingotNew : OreDictionary.getOres("ingotAluminium")) + { + boolean flag = false; + for (ItemStack ingotDone : aluminumIngots) + { + if (ItemStack.areItemStacksEqual(ingotNew, ingotDone)) + { + flag = true; + break; + } + } + if (!flag) + { + addedList.add(ingotNew); + OreDictionary.registerOre("ingotAluminum", ingotNew); + } + } + if (addedList.size() > 0) + { + aluminumIngots.addAll(addedList); + addedList.clear(); + } + for (ItemStack ingotNew : OreDictionary.getOres("ingotNaturalAluminum")) + { + for (ItemStack ingotDone : aluminumIngots) + { + if (!ItemStack.areItemStacksEqual(ingotNew, ingotDone)) + { + addedList.add(ingotNew); + } + } + } + if (addedList.size() > 0) + { + aluminumIngots.addAll(addedList); + } + + final HashMap spaceStationRequirements = new HashMap<>(4, 1.0F); + spaceStationRequirements.put("ingotTin", 32); + spaceStationRequirements.put(aluminumIngots, 16); + spaceStationRequirements.put(new ItemStack(GCItems.basicItem, 1, ItemBasic.WAFER_ADVANCED), 1); + spaceStationRequirements.put(Items.IRON_INGOT, 24); + GalacticraftRegistry.registerSpaceStation(new SpaceStationType(ConfigManagerCore.idDimensionOverworldOrbit, ConfigManagerCore.idDimensionOverworld, new SpaceStationRecipe(spaceStationRequirements))); + + // EmergencyKit + RecipeUtil.addCustomRecipe(new ShapedRecipeNBT(new ItemStack(GCItems.emergencyKit), ItemEmergencyKit.getRecipe())); + + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 6), "ingotCopper", "ingotCopper"); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 7), "ingotTin", "ingotTin"); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 8), "ingotAluminum", "ingotAluminum"); + + /* + * // Support for all the spellings of Aluminum for (ItemStack stack : + * aluminumIngots) { CompressorRecipes.addShapelessRecipe(new + * ItemStack(GCItems.basicItem, 1, 8), stack, stack); } + */ + if (OreDictionary.getOres("ingotBronze").size() > 0) + { + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 10), "ingotBronze", "ingotBronze"); + } + if (OreDictionary.getOres("ingotSteel").size() > 0) + { + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 9), "ingotSteel", "ingotSteel"); + CompressorRecipes.steelIngotsPresent = true; + } + CompressorRecipes.steelRecipeGC = Arrays.asList(new ItemStack(Items.COAL), new ItemStack(GCItems.basicItem, 1, 11), new ItemStack(Items.COAL)); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 9), Items.COAL, new ItemStack(GCItems.basicItem, 1, 11), Items.COAL); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 10), new ItemStack(GCItems.basicItem, 1, 6), new ItemStack(GCItems.basicItem, 1, 7)); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.basicItem, 1, 11), Items.IRON_INGOT, Items.IRON_INGOT); + CompressorRecipes.addShapelessRecipe(new ItemStack(GCItems.itemBasicMoon, 1, 1), meteoricIronIngot); + CompressorRecipes.addRecipe(new ItemStack(GCItems.heavyPlatingTier1, 2, 0), "XYZ", "XYZ", 'X', new ItemStack(GCItems.basicItem, 1, 9), 'Y', new ItemStack(GCItems.basicItem, 1, 8), 'Z', new ItemStack(GCItems.basicItem, 1, 10)); + + ItemStack solarPanels = new ItemStack(GCItems.basicItem, 9, 12); + ItemStack basicWafers = new ItemStack(GCItems.basicItem, 3, 13); + ItemStack advancedWafers = new ItemStack(GCItems.basicItem, 1, 14); + ItemStack silicon = new ItemStack(GCItems.basicItem, 1, 2); + CircuitFabricatorRecipes.addRecipe(solarPanels, Arrays.asList(new ItemStack(Items.DIAMOND), silicon, silicon, new ItemStack(Items.REDSTONE), new ItemStack(Items.DYE, 1, 4))); + CircuitFabricatorRecipes.addRecipe(basicWafers, Arrays.asList(new ItemStack(Items.DIAMOND), silicon, silicon, new ItemStack(Items.REDSTONE), new ItemStack(Blocks.REDSTONE_TORCH))); + CircuitFabricatorRecipes.addRecipe(advancedWafers, Arrays.asList(new ItemStack(Items.DIAMOND), silicon, silicon, new ItemStack(Items.REDSTONE), new ItemStack(Items.REPEATER))); + } + + public static void setConfigurableRecipes() + { + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT && CompatibilityManager.modJEILoaded) + TickHandlerClient.updateJEIhiding = true; + + // Update Aluminium Wire and Battery crafting recipes and GC Advanced + // Metals recipes + ItemStack aluWire = new ItemStack(GCBlocks.aluminumWire, ConfigManagerCore.quickMode ? 9 : 6, 0); + ItemStack battery = new ItemStack(GCItems.battery, ConfigManagerCore.quickMode ? 3 : 2, 100); + boolean doQuickMode = ConfigManagerCore.quickMode != configSaved_QuickMode; + configSaved_QuickMode = ConfigManagerCore.quickMode; + + ItemStack meteoricIronIngot = new ItemStack(GCItems.itemBasicMoon, 1, 0); + ItemStack meteoricIronPlate = new ItemStack(GCItems.itemBasicMoon, 1, 1); + boolean doMetalsToOreDict = configSaved_RequireGCmetals && !ConfigManagerCore.recipesRequireGCAdvancedMetals; + boolean doMetalsToGC = !configSaved_RequireGCmetals && ConfigManagerCore.recipesRequireGCAdvancedMetals; + configSaved_RequireGCmetals = ConfigManagerCore.recipesRequireGCAdvancedMetals; + + boolean doSilicon = !ConfigManagerCore.otherModsSilicon.equals(configSaved_Silicon); + configSaved_Silicon = ConfigManagerCore.otherModsSilicon; + + if (doQuickMode || doMetalsToOreDict || doMetalsToGC) + { + for (IRecipe recipe : ForgeRegistries.RECIPES) + { + if (recipe instanceof IRecipeUpdatable) + { + if (doQuickMode) + { + ItemStack test = recipe.getRecipeOutput(); + if (ItemStack.areItemsEqual(test, aluWire)) + { + test.setCount(aluWire.getCount()); + } + else if (ItemStack.areItemsEqual(test, battery)) + { + test.setCount(battery.getCount()); + } + } + if (doMetalsToOreDict) + { + ((IRecipeUpdatable) recipe).replaceInput(meteoricIronIngot, OreDictionary.getOres("ingotMeteoricIron")); + ((IRecipeUpdatable) recipe).replaceInput(meteoricIronPlate, OreDictionary.getOres("compressedMeteoricIron")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(MarsItems.marsItemBasic, 1, 2), OreDictionary.getOres("ingotDesh")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(MarsItems.marsItemBasic, 1, 5), OreDictionary.getOres("compressedDesh")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(AsteroidsItems.basicItem, 1, 0), OreDictionary.getOres("ingotTitanium")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(AsteroidsItems.basicItem, 1, 6), OreDictionary.getOres("compressedTitanium")); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(VenusItems.basicItem, 1, 1), OreDictionary.getOres("ingotLead")); + } + else if (doMetalsToGC) + { + ((IRecipeUpdatable) recipe).replaceInput(meteoricIronIngot); + ((IRecipeUpdatable) recipe).replaceInput(meteoricIronPlate); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(MarsItems.marsItemBasic, 1, 2)); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(MarsItems.marsItemBasic, 1, 5)); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(AsteroidsItems.basicItem, 1, 0)); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(AsteroidsItems.basicItem, 1, 6)); + ((IRecipeUpdatable) recipe).replaceInput(new ItemStack(VenusItems.basicItem, 1, 1)); + } + } + } + } + + if (doSilicon) + { + ItemStack siliconGC = new ItemStack(GCItems.basicItem, 1, 2); + boolean needNewList = true; + List silicons = OreDictionary.getOres(ConfigManagerCore.otherModsSilicon); + if (silicons.size() > 0) + { + for (ItemStack s : silicons) + { + if (ItemStack.areItemsEqual(s, siliconGC)) + { + needNewList = false; + break; + } + } + } + if (needNewList) + { + List newList = new ArrayList<>(1 + silicons.size()); + newList.add(siliconGC); + if (silicons.size() > 0) + newList.addAll(silicons); + silicons = newList; + } + CircuitFabricatorRecipes.replaceRecipeIngredient(siliconGC, silicons); + } + + if (doMetalsToOreDict || doMetalsToGC) + { + if (ConfigManagerCore.recipesRequireGCAdvancedMetals) + { + CompressorRecipes.replaceRecipeIngredient(meteoricIronIngot); + } + else + { + CompressorRecipes.replaceRecipeIngredient(meteoricIronIngot, OreDictionary.getOres("ingotMeteoricIron")); + } + setConfigurableRecipesPlanets(); + + // Update Advanced Wafer in space station recipe + ItemStack sswafer = new ItemStack(GCItems.basicItem, 1, ItemBasic.WAFER_ADVANCED); + for (SpaceStationType station : GalacticraftRegistry.getSpaceStationData()) + { + HashMap ssrecipe = station.getRecipeForSpaceStation().getInput(); + if (doMetalsToOreDict) + { + ItemStack found = null; + for (Object test : ssrecipe.keySet()) + { + if (test instanceof ItemStack && ItemStack.areItemsEqual((ItemStack) test, sswafer)) + { + found = (ItemStack) test; + break; + } + } + if (found != null) + { + ssrecipe.remove(found); + ssrecipe.put(OreDictionary.getOres("waferAdvanced"), 1); + } + } + else if (doMetalsToGC) + { + Object found = null; + for (Object test : ssrecipe.keySet()) + { + if (test instanceof List && OreRecipeUpdatable.itemListContains((List) test, sswafer)) + { + found = test; + break; + } + } + if (found != null) + { + ssrecipe.remove(found); + ssrecipe.put(sswafer, 1); + } + } + } + } + } + + private static void setConfigurableRecipesPlanets() + { + if (ConfigManagerCore.recipesRequireGCAdvancedMetals) + { + CompressorRecipes.replaceRecipeIngredient(new ItemStack(MarsItems.marsItemBasic, 1, 2)); + CompressorRecipes.replaceRecipeIngredient(new ItemStack(AsteroidsItems.basicItem, 1, 0)); + } + else + { + CompressorRecipes.replaceRecipeIngredient(new ItemStack(MarsItems.marsItemBasic, 1, 2), OreDictionary.getOres("ingotDesh")); + CompressorRecipes.replaceRecipeIngredient(new ItemStack(AsteroidsItems.basicItem, 1, 0), OreDictionary.getOres("ingotTitanium")); + } + } + + private static void addBuildCraftCraftingRecipes() + { + boolean refineryDone = false; + try + { + // BuildcraftRecipeRegistry.refinery.addRecipe("buildcraft:fuel", new FluidStack(GCFluids.fluidOil, 1), new FluidStack(FluidRegistry.getFluid("fuel"), 1), 120, 1); + // refineryDone = true; + } catch (Exception e) + {} + + if (refineryDone) + { + GalacticraftCore.logger.info("Successfully added GC oil to Buildcraft Refinery recipes."); + } + + try + { + if (CompatibilityManager.classBCTransport != null) + { + // TODO: Add the two Power pipes once they are included in + // Buildcraft 8.0.x + for (int i = BlockEnclosed.EnumEnclosedBlockType.BC_ITEM_STONEPIPE.getMeta(); i <= BlockEnclosed.EnumEnclosedBlockType.BC_FLUIDS_COBBLESTONEPIPE.getMeta(); i++) + { + String pipeName = EnumEnclosedBlockType.values()[i].getBCPipeType(); + Object pipeItemBC = CompatibilityManager.classBCTransport.getField(pipeName).get(null); + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, i), new Object[] {"XYX", 'Y', pipeItemBC, 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + private static void addAppEngRecipes() + { + RecipeUtil.addRecipe(new ItemStack(GCBlocks.sealableBlock, 1, EnumEnclosedBlockType.ME_CABLE.getMeta()), new Object[] {"XYX", 'Y', AEApi.instance().definitions().parts().cableGlass().stack(AEColor.TRANSPARENT, 1), 'X', new ItemStack(GCBlocks.basicBlock, 1, 4)}); + IGrinderRegistry a = AEApi.instance().registries().grinder(); + boolean officialAE2API = false; + try + { + officialAE2API = a.getClass().getMethod("builder") != null; + } catch (Exception ignore) + {} + if (officialAE2API) + { + a.addRecipe(a.builder().withInput(new ItemStack(GCBlocks.basicBlock, 1, 7)).withOutput(new ItemStack(GCItems.ic2compat, 1, 0)).withFirstOptional(new ItemStack(GCItems.ic2compat, 1, 0), 0.8F).withTurns(8).build()); + a.addRecipe(a.builder().withInput(new ItemStack(AsteroidBlocks.blockBasic, 1, 3)).withOutput(new ItemStack(GCItems.ic2compat, 1, 0)).withFirstOptional(new ItemStack(GCItems.ic2compat, 1, 0), 0.9F).withTurns(8).build()); + a.addRecipe(a.builder().withInput(new ItemStack(VenusBlocks.venusBlock, 1, 6)).withOutput(new ItemStack(GCItems.ic2compat, 1, 0)).withFirstOptional(new ItemStack(GCItems.ic2compat, 1, 0), 1.0F).withTurns(8).build()); + // Grind Ilmenite Ore for 1 Titanium Dust, 1 Iron Dust + Optional ironDust = AEApi.instance().definitions().materials().ironDust().maybeStack(1); + ironDust.ifPresent(dustStack -> a.addRecipe(a.builder().withInput(new ItemStack(AsteroidBlocks.blockBasic, 1, 4)).withOutput(new ItemStack(AsteroidsItems.basicItem, 1, 9)).withFirstOptional(dustStack, 1.0F).withTurns(8).build())); + } + else + { + GalacticraftCore.logger.debug("Failed to add Applied Energistics 2 Recipes"); + } + } + + private static void addExNihiloHeatSource() + { + try + { + Class registry = Class.forName("exnihilo.registries.HeatRegistry"); + Method m = registry.getMethod("register", Block.class, float.class); + m.invoke(null, GCBlocks.unlitTorchLit, 0.1F); + for (Block torch : GCBlocks.otherModTorchesLit) + { + m.invoke(null, torch, 0.1F); + } + GalacticraftCore.logger.info("Successfully added space torches as heat sources for Ex Nihilo crucibles etc"); + } catch (Throwable e) + {} + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ShapedRecipeNBT.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ShapedRecipeNBT.java new file mode 100644 index 00000000..a47554f6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/recipe/ShapedRecipeNBT.java @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.recipe; + +import java.util.HashMap; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.registries.IForgeRegistryEntry; + +public class ShapedRecipeNBT extends IForgeRegistryEntry.Impl implements IRecipe +{ + + public int recipeWidth; + public int recipeHeight; + public final ItemStack[] recipeItems; + private final ItemStack recipeOutput; + private boolean copyIngredientNBT; + + public ShapedRecipeNBT(ItemStack output, Object[] layout) + { + this.recipeOutput = output; + String shape = ""; + int idx = 0; + + int width = 0; + int height = 0; + while (layout[idx] instanceof String) + { + String s = (String) layout[idx++]; + shape += s; + width = s.length(); + height++; + } + if (width * height != shape.length()) + { + String ret = "Invalid shaped recipe: "; + for (Object tmp : layout) + { + ret += tmp + ", "; + } + throw new RuntimeException(ret); + } + + HashMap itemMap = new HashMap<>(); + + for (; idx < layout.length; idx += 2) + { + Character chr = (Character) layout[idx]; + Object in = layout[idx + 1]; + + if (in instanceof ItemStack) + { + itemMap.put(chr, ((ItemStack) in).copy()); + } else if (in instanceof Item) + { + itemMap.put(chr, new ItemStack((Item) in)); + } else if (in instanceof Block) + { + itemMap.put(chr, new ItemStack((Block) in, 1, OreDictionary.WILDCARD_VALUE)); + } else + { + String ret = "Invalid shaped recipe: "; + for (Object tmp : layout) + { + ret += tmp + ", "; + } + throw new RuntimeException(ret); + } + } + + this.recipeWidth = width; + this.recipeHeight = height; + this.recipeItems = new ItemStack[width * height]; + int x = 0; + for (char chr : shape.toCharArray()) + { + this.recipeItems[x++] = itemMap.get(chr); + } + } + + @Override + @Nullable + public ItemStack getRecipeOutput() + { + return this.recipeOutput; + } + + @Override + public NonNullList getRemainingItems(InventoryCrafting inv) + { + return ForgeHooks.defaultRecipeGetRemainingItems(inv); + } + + @Override + public boolean matches(InventoryCrafting inv, World worldIn) + { + for (int i = 0; i <= 3 - this.recipeWidth; ++i) + { + for (int j = 0; j <= 3 - this.recipeHeight; ++j) + { + if (this.checkMatch(inv, i, j, false)) + { + return true; + } + + if (this.checkMatch(inv, i, j, true)) + { + return true; + } + } + } + + return false; + } + + private boolean checkMatch(InventoryCrafting inv, int x, int z, boolean mirror) + { + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + int k = i - x; + int l = j - z; + ItemStack target = null; + + if (k >= 0 && l >= 0 && k < this.recipeWidth && l < this.recipeHeight) + { + if (mirror) + { + target = this.recipeItems[this.recipeWidth - k - 1 + l * this.recipeWidth]; + } else + { + target = this.recipeItems[k + l * this.recipeWidth]; + } + } + + ItemStack itemstack1 = inv.getStackInRowAndColumn(i, j); + + if (!itemstack1.isEmpty() || target != null) + { + if (itemstack1.isEmpty() || target == null) + { + return false; + } + + if (target.getItem() != itemstack1.getItem()) + { + return false; + } + + if (target.getMetadata() != 32767 && target.getMetadata() != itemstack1.getMetadata()) + { + return false; + } + + if (!ItemStack.areItemStackTagsEqual(target, itemstack1)) + { + return false; + } + } + } + } + + return true; + } + + @Override + @Nullable + public ItemStack getCraftingResult(InventoryCrafting inv) + { + return this.getRecipeOutput().copy(); + } + + @Override + public boolean canFit(int width, int height) + { + return width >= this.recipeWidth && height >= this.recipeHeight; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicAdd.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicAdd.java new file mode 100644 index 00000000..a8ad1529 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicAdd.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.schematic; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicPage; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiSchematicInput; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematic; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class SchematicAdd extends SchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerCore.idSchematicAddSchematic; + } + + @Override + public int getGuiID() + { + return GuiIdsCore.NASA_WORKBENCH_NEW_SCHEMATIC; + } + + @Override + public ItemStack getRequiredItem() + { + return null; // This null is OK, it's used only as a flag by + // SchematicRegistry calling code + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicInput(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematic(player.inventory, pos); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicMoonBuggy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicMoonBuggy.java new file mode 100644 index 00000000..7744c05a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicMoonBuggy.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.schematic; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicPage; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiSchematicBuggy; +import micdoodle8.mods.galacticraft.core.inventory.ContainerBuggyBench; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class SchematicMoonBuggy extends SchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerCore.idSchematicMoonBuggy; + } + + @Override + public int getGuiID() + { + return GuiIdsCore.NASA_WORKBENCH_BUGGY; + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(GCItems.schematic, 1, 0); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicBuggy(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerBuggyBench(player.inventory, pos, player); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicRocketT1.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicRocketT1.java new file mode 100644 index 00000000..f9d3e8ae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/schematic/SchematicRocketT1.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.schematic; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.recipe.SchematicPage; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiSchematicTier1Rocket; +import micdoodle8.mods.galacticraft.core.inventory.ContainerSchematicTier1Rocket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; + +public class SchematicRocketT1 extends SchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerCore.idSchematicRocketT1; + } + + @Override + public int getGuiID() + { + return GuiIdsCore.NASA_WORKBENCH_ROCKET; + } + + @Override + public ItemStack getRequiredItem() + { + return null; // This null is OK, it's used only as a flag by the calling + // code in SchematicRegistry + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicTier1Rocket(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicTier1Rocket(player.inventory, pos); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/KeyHandlerClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/KeyHandlerClient.java new file mode 100644 index 00000000..bcc0428e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/KeyHandlerClient.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tick; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.entity.Entity; + +import net.minecraftforge.fml.common.gameevent.TickEvent.Type; + +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.KeyHandler; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.entities.EntityBuggy; +import micdoodle8.mods.galacticraft.core.entities.IControllableEntity; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +import org.lwjgl.input.Keyboard; + +public class KeyHandlerClient extends KeyHandler +{ + + public static KeyBinding galaxyMap; + public static KeyBinding openFuelGui; + public static KeyBinding toggleAdvGoggles; + + static + { + galaxyMap = new KeyBinding(GCCoreUtil.translate("keybind.map.name"), ConfigManagerCore.keyOverrideMapI == 0 ? Keyboard.KEY_M : ConfigManagerCore.keyOverrideMapI, Constants.MOD_NAME_SIMPLE); + openFuelGui = new KeyBinding(GCCoreUtil.translate("keybind.spaceshipinv.name"), ConfigManagerCore.keyOverrideFuelLevelI == 0 ? Keyboard.KEY_F : ConfigManagerCore.keyOverrideFuelLevelI, + Constants.MOD_NAME_SIMPLE); + toggleAdvGoggles = new KeyBinding(GCCoreUtil.translate("keybind.sensortoggle.name"), + ConfigManagerCore.keyOverrideToggleAdvGogglesI == 0 ? Keyboard.KEY_K : ConfigManagerCore.keyOverrideToggleAdvGogglesI, Constants.MOD_NAME_SIMPLE); + // See ConfigManagerCore.class for actual defaults. These do nothing + } + + public static KeyBinding accelerateKey; + public static KeyBinding decelerateKey; + public static KeyBinding leftKey; + public static KeyBinding rightKey; + public static KeyBinding upKey; + public static KeyBinding downKey; + public static KeyBinding spaceKey; + public static KeyBinding leftShiftKey; + private static Minecraft mc = Minecraft.getMinecraft(); + + public KeyHandlerClient() + { + super(new KeyBinding[] + {KeyHandlerClient.galaxyMap, KeyHandlerClient.openFuelGui, KeyHandlerClient.toggleAdvGoggles}, new boolean[] + {false, false, false}, KeyHandlerClient.getVanillaKeyBindings(), new boolean[] + {false, true, true, true, true, true, true}); + } + + private static KeyBinding[] getVanillaKeyBindings() + { + KeyBinding invKey = KeyHandlerClient.mc.gameSettings.keyBindInventory; + KeyHandlerClient.accelerateKey = KeyHandlerClient.mc.gameSettings.keyBindForward; + KeyHandlerClient.decelerateKey = KeyHandlerClient.mc.gameSettings.keyBindBack; + KeyHandlerClient.leftKey = KeyHandlerClient.mc.gameSettings.keyBindLeft; + KeyHandlerClient.rightKey = KeyHandlerClient.mc.gameSettings.keyBindRight; + KeyHandlerClient.upKey = KeyHandlerClient.mc.gameSettings.keyBindForward; + KeyHandlerClient.downKey = KeyHandlerClient.mc.gameSettings.keyBindBack; + KeyHandlerClient.spaceKey = KeyHandlerClient.mc.gameSettings.keyBindJump; + KeyHandlerClient.leftShiftKey = KeyHandlerClient.mc.gameSettings.keyBindSneak; + return new KeyBinding[] + {invKey, KeyHandlerClient.accelerateKey, KeyHandlerClient.decelerateKey, KeyHandlerClient.leftKey, KeyHandlerClient.rightKey, KeyHandlerClient.spaceKey, KeyHandlerClient.leftShiftKey}; + } + + @Override + public void keyDown(Type types, KeyBinding kb, boolean tickEnd, boolean isRepeat) + { + if (KeyHandlerClient.mc.player != null && tickEnd) + { + EntityPlayerSP playerBase = PlayerUtil.getPlayerBaseClientFromPlayer(KeyHandlerClient.mc.player, false); + + if (playerBase == null) + { + return; + } + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(playerBase); + + if (kb.getKeyCode() == KeyHandlerClient.galaxyMap.getKeyCode()) + { + if (KeyHandlerClient.mc.currentScreen == null) + { + KeyHandlerClient.mc.player.openGui(GalacticraftCore.instance, GuiIdsCore.GALAXY_MAP, KeyHandlerClient.mc.world, (int) KeyHandlerClient.mc.player.posX, + (int) KeyHandlerClient.mc.player.posY, (int) KeyHandlerClient.mc.player.posZ); + } + } else if (kb.getKeyCode() == KeyHandlerClient.openFuelGui.getKeyCode()) + { + if (playerBase.getRidingEntity() instanceof EntitySpaceshipBase || playerBase.getRidingEntity() instanceof EntityBuggy) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_OPEN_FUEL_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {PlayerUtil.getName(playerBase)})); + } + } else if (kb.getKeyCode() == KeyHandlerClient.toggleAdvGoggles.getKeyCode()) + { + if (playerBase != null) + { + stats.setUsingAdvancedGoggles(!stats.isUsingAdvancedGoggles()); + } + } + } + + if (KeyHandlerClient.mc.player != null && KeyHandlerClient.mc.currentScreen == null) + { + int keyNum = -1; + + if (kb == KeyHandlerClient.accelerateKey) + { + keyNum = 0; + } else if (kb == KeyHandlerClient.decelerateKey) + { + keyNum = 1; + } else if (kb == KeyHandlerClient.leftKey) + { + keyNum = 2; + } else if (kb == KeyHandlerClient.rightKey) + { + keyNum = 3; + } else if (kb == KeyHandlerClient.spaceKey) + { + keyNum = 4; + } else if (kb == KeyHandlerClient.leftShiftKey) + { + keyNum = 5; + } + + Entity entityTest = KeyHandlerClient.mc.player.getRidingEntity(); + if (entityTest != null && entityTest instanceof IControllableEntity && keyNum != -1) + { + IControllableEntity entity = (IControllableEntity) entityTest; + + if (kb.getKeyCode() == KeyHandlerClient.mc.gameSettings.keyBindInventory.getKeyCode()) + { + KeyBinding.setKeyBindState(KeyHandlerClient.mc.gameSettings.keyBindInventory.getKeyCode(), false); + } + + entity.pressKey(keyNum); + } else if (entityTest != null && entityTest instanceof EntityAutoRocket) + { + EntityAutoRocket autoRocket = (EntityAutoRocket) entityTest; + + if (autoRocket.launchPhase == EnumLaunchPhase.LANDING.ordinal()) + { + if (kb == KeyHandlerClient.leftShiftKey) + { + autoRocket.motionY -= 0.02D; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_SHIP_MOTION_Y, GCCoreUtil.getDimensionID(mc.world), new Object[] + {autoRocket.getEntityId(), false})); + } + + if (kb == KeyHandlerClient.spaceKey) + { + autoRocket.motionY += 0.02D; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_SHIP_MOTION_Y, GCCoreUtil.getDimensionID(mc.world), new Object[] + {autoRocket.getEntityId(), true})); + } + } + } + } + } + + @Override + public void keyUp(Type types, KeyBinding kb, boolean tickEnd) + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerClient.java new file mode 100644 index 00000000..72cb25d6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerClient.java @@ -0,0 +1,739 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tick; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiIngameMenu; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldProviderSurface; + +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.common.gameevent.TickEvent.RenderTickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.entity.IEntityNoisy; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.item.ISensorGlassesArmor; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.vector.BlockTuple; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.BubbleRenderer; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.client.FootprintRenderer; +import micdoodle8.mods.galacticraft.core.client.SkyProviderMoon; +import micdoodle8.mods.galacticraft.core.client.SkyProviderOverworld; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayDockingRocket; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayLander; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayLaunchCountdown; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayOxygenTanks; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayOxygenWarning; +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlayRocket; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiNewSpaceRace; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiTeleporting; +import micdoodle8.mods.galacticraft.core.client.jei.GalacticraftJEI; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProviderColored; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.network.GalacticraftPacketHandler; +import micdoodle8.mods.galacticraft.core.network.PacketRotateRocket; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityScreen; +import micdoodle8.mods.galacticraft.core.util.BlockUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.wrappers.BlockMetaList; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public class TickHandlerClient +{ + + public static int airRemaining; + public static int airRemaining2; + private static boolean lastInvKeyPressed; + private static long tickCount; + public static boolean spaceRaceGuiScheduled = false; + private static List packetHandlers = Lists.newCopyOnWriteArrayList(); + private static Set fluidNetworks = Sets.newHashSet(); + public static GuiTeleporting teleportingGui; + public static volatile boolean menuReset = true; + public static volatile boolean updateJEIhiding = false; + + public static void resetClient() + { + ClientProxyCore.playerItemData.clear(); + ClientProxyCore.overworldTextureRequestSent = false; + ClientProxyCore.flagRequestsSent.clear(); + TickHandlerClient.clearLiquidNetworks(); + ClientProxyCore.clientSpaceStationID.clear(); + ConfigManagerCore.challengeModeUpdate(); + + MapUtil.resetClient(); + GCBlocks.spaceGlassVanilla.resetColor(); + GCBlocks.spaceGlassClear.resetColor(); + GCBlocks.spaceGlassStrong.resetColor(); + GCBlocks.spaceGlassTinVanilla.resetColor(); + GCBlocks.spaceGlassTinClear.resetColor(); + GCBlocks.spaceGlassTinStrong.resetColor(); + } + + public static void addFluidNetwork(FluidNetwork network) + { + fluidNetworks.add(network); + } + + public static void removeFluidNetwork(FluidNetwork network) + { + fluidNetworks.remove(network); + } + + public static void clearLiquidNetworks() + { + fluidNetworks.clear(); + } + + public static void addPacketHandler(GalacticraftPacketHandler handler) + { + TickHandlerClient.packetHandlers.add(handler); + } + + @SubscribeEvent + public void worldUnloadEvent(WorldEvent.Unload event) + { + for (GalacticraftPacketHandler packetHandler : packetHandlers) + { + packetHandler.unload(event.getWorld()); + } + } + + public static HashSet screenConnectionsUpdateList = new HashSet<>(); + + static + { + registerDetectableBlocks(true); + } + + public static void registerDetectableBlocks(boolean logging) + { + ClientProxyCore.detectableBlocks.clear(); + + for (final String s : ConfigManagerCore.detectableIDs) + { + //BlockTuple bt = ConfigManagerCore.stringToBlock(s, "External Detectable IDs", logging); + BlockTuple bt = BlockUtil.getBlockTupleFromString(s); + if (bt == null) + { + continue; + } + + int meta = bt.meta; + if (meta == -1) + { + meta = 0; + } + + boolean flag = false; + for (BlockMetaList blockMetaList : ClientProxyCore.detectableBlocks) + { + if (blockMetaList.getBlock() == bt.block) + { + if (!blockMetaList.getMetaList().contains(meta)) + { + blockMetaList.getMetaList().add(meta); + } + flag = true; + break; + } + } + + if (!flag) + { + List metaList = Lists.newArrayList(); + metaList.add(meta); + ClientProxyCore.detectableBlocks.add(new BlockMetaList(bt.block, metaList)); + } + } + } + + @SubscribeEvent + public void onRenderTick(RenderTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final EntityPlayerSP player = minecraft.player; + final EntityPlayerSP playerBaseClient = PlayerUtil.getPlayerBaseClientFromPlayer(player, false); + if (player == null || playerBaseClient == null) + { + return; + } + + GCPlayerStatsClient stats = GCPlayerStatsClient.get(playerBaseClient); + + if (event.phase == Phase.END) + { + if (minecraft.currentScreen instanceof GuiIngameMenu) + { + int i = Mouse.getEventX() * minecraft.currentScreen.width / minecraft.displayWidth; + int j = minecraft.currentScreen.height - Mouse.getEventY() * minecraft.currentScreen.height / minecraft.displayHeight - 1; + + int k = Mouse.getEventButton(); + + int deltaColor = 0; + + if (i > minecraft.currentScreen.width - 100 && j > minecraft.currentScreen.height - 35) + { + deltaColor = 20; + + if (k == 0) + { + if (Mouse.getEventButtonState()) + { + minecraft.displayGuiScreen(new GuiNewSpaceRace(playerBaseClient)); + } + } + } + + this.drawGradientRect(minecraft.currentScreen.width - 100, minecraft.currentScreen.height - 35, minecraft.currentScreen.width, minecraft.currentScreen.height, + ColorUtil.to32BitColor(150, 10 + deltaColor, 10 + deltaColor, 10 + deltaColor), ColorUtil.to32BitColor(250, 10 + deltaColor, 10 + deltaColor, 10 + deltaColor)); + minecraft.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.title.name.0"), + minecraft.currentScreen.width - 50 - minecraft.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.title.name.0")) / 2, minecraft.currentScreen.height - 26, + ColorUtil.to32BitColor(255, 240, 240, 240)); + minecraft.fontRenderer.drawString(GCCoreUtil.translate("gui.space_race.create.title.name.1"), + minecraft.currentScreen.width - 50 - minecraft.fontRenderer.getStringWidth(GCCoreUtil.translate("gui.space_race.create.title.name.1")) / 2, minecraft.currentScreen.height - 16, + ColorUtil.to32BitColor(255, 240, 240, 240)); + Gui.drawRect(minecraft.currentScreen.width - 100, minecraft.currentScreen.height - 35, minecraft.currentScreen.width - 99, minecraft.currentScreen.height, + ColorUtil.to32BitColor(255, 0, 0, 0)); + Gui.drawRect(minecraft.currentScreen.width - 100, minecraft.currentScreen.height - 35, minecraft.currentScreen.width, minecraft.currentScreen.height - 34, + ColorUtil.to32BitColor(255, 0, 0, 0)); + } + + ClientProxyCore.playerPosX = player.prevPosX + (player.posX - player.prevPosX) * event.renderTickTime; + ClientProxyCore.playerPosY = player.prevPosY + (player.posY - player.prevPosY) * event.renderTickTime; + ClientProxyCore.playerPosZ = player.prevPosZ + (player.posZ - player.prevPosZ) * event.renderTickTime; + ClientProxyCore.playerRotationYaw = player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * event.renderTickTime; + ClientProxyCore.playerRotationPitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * event.renderTickTime; + + if (minecraft.currentScreen == null && minecraft.gameSettings.thirdPersonView != 0 && !minecraft.gameSettings.hideGUI) + { + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + OverlayRocket.renderSpaceshipOverlay(minecraft, ((EntitySpaceshipBase) player.getRidingEntity()).getSpaceshipGui()); + } + + if (player.getRidingEntity() instanceof EntityLander) + { + OverlayLander.renderLanderOverlay(minecraft, TickHandlerClient.tickCount); + } + + if (player.getRidingEntity() instanceof EntityAutoRocket) + { + OverlayDockingRocket.renderDockingOverlay(minecraft, TickHandlerClient.tickCount); + } + + if (player.getRidingEntity() instanceof EntitySpaceshipBase && !((EntitySpaceshipBase) minecraft.player.getRidingEntity()).getLaunched()) + { + OverlayLaunchCountdown.renderCountdownOverlay(minecraft); + } + } + + if (player.world.provider instanceof IGalacticraftWorldProvider && OxygenUtil.shouldDisplayTankGui(minecraft.currentScreen) && OxygenUtil.noAtmosphericCombustion(player.world.provider) + && (!playerBaseClient.isCreative() && !playerBaseClient.isSpectator()) && !minecraft.gameSettings.showDebugInfo) + { + int var6 = (TickHandlerClient.airRemaining - 90) * -1; + + if (TickHandlerClient.airRemaining <= 0) + { + var6 = 90; + } + + int var7 = (TickHandlerClient.airRemaining2 - 90) * -1; + + if (TickHandlerClient.airRemaining2 <= 0) + { + var7 = 90; + } + + int thermalLevel = stats.getThermalLevel() + 22; + OverlayOxygenTanks.renderOxygenTankIndicator(minecraft, thermalLevel, var6, var7, !ConfigManagerCore.oxygenIndicatorLeft, !ConfigManagerCore.oxygenIndicatorBottom, + Math.abs(thermalLevel - 22) >= 10 && !stats.isThermalLevelNormalising()); + } + + if (playerBaseClient != null && player.world.provider instanceof IGalacticraftWorldProvider && !stats.isOxygenSetupValid() && OxygenUtil.noAtmosphericCombustion(player.world.provider) + && minecraft.currentScreen == null && !minecraft.gameSettings.hideGUI && (!playerBaseClient.isCreative() && !playerBaseClient.isSpectator())) + { + OverlayOxygenWarning.renderOxygenWarningOverlay(minecraft, TickHandlerClient.tickCount); + } + } + } + + @SubscribeEvent + public void onPreGuiRender(RenderGameOverlayEvent.Pre event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final EntityPlayerSP player = minecraft.player; + + if (event.getType() == RenderGameOverlayEvent.ElementType.ALL) + { + if (player != null && player.getRidingEntity() != null && player.getRidingEntity() instanceof IIgnoreShift && ((IIgnoreShift) player.getRidingEntity()).shouldIgnoreShiftExit()) + { + // Remove "Press shift to dismount" message when shift-exiting + // is disabled (not ideal, but the only option) + String str = I18n.format("mount.onboard", new Object[] + {GameSettings.getKeyDisplayString(minecraft.gameSettings.keyBindSneak.getKeyCode())}); + if (minecraft.ingameGUI.overlayMessage.equals(str)) + { + minecraft.ingameGUI.overlayMessage = ""; + } + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTick(ClientTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final WorldClient world = minecraft.world; + final EntityPlayerSP player = minecraft.player; + + if (teleportingGui != null) + { + if (minecraft.currentScreen != teleportingGui) + { + minecraft.currentScreen = teleportingGui; + } + } + + if (menuReset) + { + TickHandlerClient.resetClient(); + menuReset = false; + } + + if (event.phase == Phase.START && player != null) + { + if (ClientProxyCore.playerHead == null && player.getGameProfile() != null) + { + Map map = minecraft.getSkinManager().loadSkinFromCache(player.getGameProfile()); + + if (map.containsKey(Type.SKIN)) + { + ClientProxyCore.playerHead = minecraft.getSkinManager().loadSkin(map.get(Type.SKIN), Type.SKIN); + } else + { + ClientProxyCore.playerHead = DefaultPlayerSkin.getDefaultSkin(EntityPlayer.getUUID(player.getGameProfile())); + } + } + + TickHandlerClient.tickCount++; + + if (!GalacticraftCore.proxy.isPaused()) + { + Iterator it = TickHandlerClient.fluidNetworks.iterator(); + while (it.hasNext()) + { + FluidNetwork network = it.next(); + + if (network.getTransmitters().size() == 0) + { + it.remove(); + } else + { + network.clientTick(); + } + } + } + + if (TickHandlerClient.tickCount % 20 == 0) + { + BubbleRenderer.clearBubbles(); + + for (TileEntity tile : player.world.tickableTileEntities) + { + if (tile instanceof IBubbleProviderColored) + { + BubbleRenderer.addBubble((IBubbleProviderColored) tile); + } + } + + if (updateJEIhiding) + { + updateJEIhiding = false; + // Update JEI to hide the ingot compressor recipe for GC + // steel in hard mode + // Update JEI to hide adventure mode recipes when not in + // adventure mode + GalacticraftJEI.updateHidden(CompressorRecipes.steelIngotsPresent && ConfigManagerCore.hardMode && !ConfigManagerCore.challengeRecipes, !ConfigManagerCore.challengeRecipes); + } + + for (List fpList : FootprintRenderer.footprints.values()) + { + Iterator fpIt = fpList.iterator(); + while (fpIt.hasNext()) + { + Footprint fp = fpIt.next(); + fp.age += 20; + fp.lightmapVal = player.world.getCombinedLight(new BlockPos(fp.position.x, fp.position.y, fp.position.z), 0); + + if (fp.age >= Footprint.MAX_AGE) + { + fpIt.remove(); + } + } + } + + if (!player.inventory.armorItemInSlot(3).isEmpty() && player.inventory.armorItemInSlot(3).getItem() instanceof ISensorGlassesArmor) + { + ClientProxyCore.valueableBlocks.clear(); + + for (int i = -4; i < 5; i++) + { + int x = MathHelper.floor(player.posX + i); + for (int j = -4; j < 5; j++) + { + int y = MathHelper.floor(player.posY + j); + for (int k = -4; k < 5; k++) + { + int z = MathHelper.floor(player.posZ + k); + BlockPos pos = new BlockPos(x, y, z); + + IBlockState state = player.world.getBlockState(pos); + final Block block = state.getBlock(); + + if (block.getMaterial(state) != Material.AIR) + { + int metadata = block.getMetaFromState(state); + boolean isDetectable = false; + + for (BlockMetaList blockMetaList : ClientProxyCore.detectableBlocks) + { + if (blockMetaList.getBlock() == block && blockMetaList.getMetaList().contains(metadata)) + { + isDetectable = true; + break; + } + } + + if (isDetectable || (block instanceof IDetectableResource && ((IDetectableResource) block).isValueable(state))) + { + ClientProxyCore.valueableBlocks.add(new BlockVec3(x, y, z)); + } + } + } + } + } + + TileEntityOxygenSealer nearestSealer = TileEntityOxygenSealer.getNearestSealer(world, MathHelper.floor(player.posX), MathHelper.floor(player.posY), MathHelper.floor(player.posZ)); + if (nearestSealer != null && !nearestSealer.sealed) + { + ClientProxyCore.leakTrace = nearestSealer.getLeakTraceClient(); + } else + { + ClientProxyCore.leakTrace = null; + } + } else + { + ClientProxyCore.leakTrace = null; + } + + if (world != null) + { + if (MapUtil.resetClientFlag.getAndSet(false)) + { + MapUtil.resetClientBody(); + } + } + } + + if (ClientProxyCore.leakTrace != null) + this.spawnLeakParticles(); + + if (world != null && TickHandlerClient.spaceRaceGuiScheduled && minecraft.currentScreen == null && ConfigManagerCore.enableSpaceRaceManagerPopup) + { + player.openGui(GalacticraftCore.instance, GuiIdsCore.SPACE_RACE_START, player.world, (int) player.posX, (int) player.posY, (int) player.posZ); + TickHandlerClient.spaceRaceGuiScheduled = false; + } + + boolean inSpaceShip = false; + if (player.getRidingEntity() instanceof EntitySpaceshipBase) + { + inSpaceShip = true; + EntitySpaceshipBase rocket = (EntitySpaceshipBase) player.getRidingEntity(); + if (rocket.prevRotationPitch != rocket.rotationPitch || rocket.prevRotationYaw != rocket.rotationYaw) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketRotateRocket(player.getRidingEntity())); + } + } + + if (world != null) + { + if (world.provider instanceof WorldProviderSurface) + { + if (world.provider.getSkyRenderer() == null && inSpaceShip && player.getRidingEntity().posY > Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + world.provider.setSkyRenderer(new SkyProviderOverworld()); + } else if (world.provider.getSkyRenderer() instanceof SkyProviderOverworld && player.posY <= Constants.OVERWORLD_SKYPROVIDER_STARTHEIGHT) + { + world.provider.setSkyRenderer(null); + } + } else if (world.provider instanceof WorldProviderSpaceStation) + { + if (world.provider.getSkyRenderer() == null) + { + ((WorldProviderSpaceStation) world.provider).createSkyProvider(); + } + } else if (world.provider instanceof WorldProviderMoon) + { + if (world.provider.getSkyRenderer() == null) + { + world.provider.setSkyRenderer(new SkyProviderMoon()); + } + + if (world.provider.getCloudRenderer() == null) + { + world.provider.setCloudRenderer(new CloudRenderer()); + } + } + } + + if (inSpaceShip) + { + final EntitySpaceshipBase ship = (EntitySpaceshipBase) player.getRidingEntity(); + boolean hasChanged = false; + + if (minecraft.gameSettings.keyBindLeft.isKeyDown()) + { + ship.turnYaw(-1.0F); + hasChanged = true; + } + + if (minecraft.gameSettings.keyBindRight.isKeyDown()) + { + ship.turnYaw(1.0F); + hasChanged = true; + } + + if (minecraft.gameSettings.keyBindForward.isKeyDown()) + { + if (ship.getLaunched()) + { + ship.turnPitch(-0.7F); + hasChanged = true; + } + } + + if (minecraft.gameSettings.keyBindBack.isKeyDown()) + { + if (ship.getLaunched()) + { + ship.turnPitch(0.7F); + hasChanged = true; + } + } + + if (hasChanged) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketRotateRocket(ship)); + } + } + + if (world != null) + { + List entityList = world.loadedEntityList; + for (Object e : entityList) + { + if (e instanceof IEntityNoisy) + { + IEntityNoisy vehicle = (IEntityNoisy) e; + if (vehicle.getSoundUpdater() == null) + { + ISound noise = vehicle.setSoundUpdater(FMLClientHandler.instance().getClient().player); + if (noise != null) + { + FMLClientHandler.instance().getClient().getSoundHandler().playSound(noise); + } + } + } + } + } + + if (FMLClientHandler.instance().getClient().currentScreen instanceof GuiCelestialSelection) + { + player.motionY = 0; + } + + if (world != null && world.provider instanceof IGalacticraftWorldProvider && OxygenUtil.noAtmosphericCombustion(world.provider) + && ((IGalacticraftWorldProvider) world.provider).shouldDisablePrecipitation()) + { + world.setRainStrength(0.0F); + } + + boolean isPressed = KeyHandlerClient.spaceKey.isKeyDown(); + + if (!isPressed) + { + ClientProxyCore.lastSpacebarDown = false; + } + + if (player.getRidingEntity() != null && isPressed && !ClientProxyCore.lastSpacebarDown) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_IGNITE_ROCKET, GCCoreUtil.getDimensionID(player.world), new Object[] + {})); + ClientProxyCore.lastSpacebarDown = true; + } + + if (!(TickHandlerClient.screenConnectionsUpdateList.isEmpty())) + { + HashSet updateListCopy = (HashSet) screenConnectionsUpdateList.clone(); + screenConnectionsUpdateList.clear(); + for (TileEntityScreen te : updateListCopy) + { + if (te.getWorld().getBlockState(te.getPos()).getBlock() == GCBlocks.screen) + { + if (te.refreshOnUpdate) + { + te.refreshConnections(true); + } + te.getWorld().markBlockRangeForRenderUpdate(te.getPos(), te.getPos()); + } + } + } + } else if (event.phase == Phase.END) + { + if (world != null) + { + for (GalacticraftPacketHandler handler : packetHandlers) + { + handler.tick(world); + } + } + } + } + + private void spawnLeakParticles() + { + Random rand = new Random(); + for (int i = ClientProxyCore.leakTrace.size() - 1; i >= 0; i--) + { + if (i == 1) + continue; + BlockVec3 curr = ClientProxyCore.leakTrace.get(i); + int nx = i - 2; + if (i > 2 && rand.nextInt(3) == 0) + nx--; + BlockVec3 vec; + if (i > 1) + vec = ClientProxyCore.leakTrace.get(nx).clone(); + else + { + vec = curr.clone().translate(0, -2, 0); + } + Vector3 mot = new Vector3(vec.subtract(curr)); + Vector3 rnd = new Vector3(rand.nextDouble() / 2 - 0.25, rand.nextDouble() / 2 - 0.25, rand.nextDouble() / 2 - 0.25); + GalacticraftCore.proxy.spawnParticle("oxygen", curr.midPoint().add(rnd), mot, new Object[] + {new Vector3(0.7D, 0.7D, 1.0D)}); + } + } + + private boolean alreadyContainsBlock(int x1, int y1, int z1) + { + return ClientProxyCore.valueableBlocks.contains(new BlockVec3(x1, y1, z1)); + } + + public static void zoom(float value) + { +// FMLClientHandler.instance().getClient().entityRenderer.thirdPersonDistance = value; +// FMLClientHandler.instance().getClient().entityRenderer.thirdPersonDistancePrev = value; + } + + private void drawGradientRect(int par1, int par2, int par3, int par4, int par5, int par6) + { + float f = (par5 >> 24 & 255) / 255.0F; + float f1 = (par5 >> 16 & 255) / 255.0F; + float f2 = (par5 >> 8 & 255) / 255.0F; + float f3 = (par5 & 255) / 255.0F; + float f4 = (par6 >> 24 & 255) / 255.0F; + float f5 = (par6 >> 16 & 255) / 255.0F; + float f6 = (par6 >> 8 & 255) / 255.0F; + float f7 = (par6 & 255) / 255.0F; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(par3, par2, 0.0D).color(f1, f2, f3, f).endVertex(); + worldRenderer.pos(par1, par2, 0.0D).color(f1, f2, f3, f).endVertex(); + worldRenderer.pos(par1, par4, 0.0D).color(f5, f6, f7, f4).endVertex(); + worldRenderer.pos(par3, par4, 0.0D).color(f5, f6, f7, f4).endVertex(); + tessellator.draw(); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerServer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerServer.java new file mode 100644 index 00000000..447de937 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tick/TickHandlerServer.java @@ -0,0 +1,689 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tick; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.ChunkProviderServer; + +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.common.gameevent.TickEvent.ServerTickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.WorldTickEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import micdoodle8.mods.galacticraft.core.command.CommandGCHouston; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.dimension.WorldDataSpaceRaces; +import micdoodle8.mods.galacticraft.core.energy.grid.EnergyNetwork; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.ThreadFindSeal; +import micdoodle8.mods.galacticraft.core.network.GalacticraftPacketHandler; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTransmitter; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenSealer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityPainter; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.MapUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.wrappers.Footprint; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledBlockChange; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledDimensionChange; + +import com.google.common.collect.Lists; + +public class TickHandlerServer +{ + + private static Map> scheduledBlockChanges = new ConcurrentHashMap>(); + private static Map> scheduledTorchUpdates = new ConcurrentHashMap>(); + private static Map> edgeChecks = new TreeMap>(); + private static LinkedList networkTicks = new LinkedList(); + public static Map>> serverFootprintMap = new TreeMap>>(); + public static List footprintBlockChanges = Lists.newArrayList(); + public static WorldDataSpaceRaces spaceRaceData = null; + public static ArrayList playersRequestingMapData = Lists.newArrayList(); + private static long tickCount; + public static LinkedList oxygenTransmitterUpdates = new LinkedList(); + public static LinkedList energyTransmitterUpdates = new LinkedList(); + private static CopyOnWriteArrayList scheduledDimensionChanges = new CopyOnWriteArrayList(); + private final int MAX_BLOCKS_PER_TICK = 50000; + private static List packetHandlers = Lists.newCopyOnWriteArrayList(); + private static List fluidNetworks = Lists.newArrayList(); + public static int timerHoustonCommand; + + public static void addFluidNetwork(FluidNetwork network) + { + fluidNetworks.add(network); + } + + public static void removeFluidNetwork(FluidNetwork network) + { + fluidNetworks.remove(network); + } + + public static void addPacketHandler(GalacticraftPacketHandler handler) + { + TickHandlerServer.packetHandlers.add(handler); + } + + @SubscribeEvent + public void worldUnloadEvent(WorldEvent.Unload event) + { + for (GalacticraftPacketHandler packetHandler : packetHandlers) + { + packetHandler.unload(event.getWorld()); + } + } + + public static void restart() + { + TickHandlerServer.scheduledBlockChanges.clear(); + TickHandlerServer.scheduledTorchUpdates.clear(); + TickHandlerServer.edgeChecks.clear(); + TickHandlerServer.networkTicks.clear(); + TickHandlerServer.serverFootprintMap.clear(); + TickHandlerServer.oxygenTransmitterUpdates.clear(); +// TickHandlerServer.hydrogenTransmitterUpdates.clear(); + TickHandlerServer.energyTransmitterUpdates.clear(); + TickHandlerServer.playersRequestingMapData.clear(); + TickHandlerServer.networkTicks.clear(); + + for (SpaceRace race : SpaceRaceManager.getSpaceRaces()) + { + SpaceRaceManager.removeSpaceRace(race); + } + + TickHandlerServer.spaceRaceData = null; + TickHandlerServer.tickCount = 0L; + TickHandlerServer.fluidNetworks.clear(); + MapUtil.reset(); + TileEntityPainter.loadedTilesForDim.clear(); + } + + public static void addFootprint(long chunkKey, Footprint print, int dimID) + { + Map> footprintMap = TickHandlerServer.serverFootprintMap.get(dimID); + List footprints; + + if (footprintMap == null) + { + footprintMap = new HashMap>(); + TickHandlerServer.serverFootprintMap.put(dimID, footprintMap); + footprints = new ArrayList(); + footprintMap.put(chunkKey, footprints); + } else + { + footprints = footprintMap.get(chunkKey); + + if (footprints == null) + { + footprints = new ArrayList(); + footprintMap.put(chunkKey, footprints); + } + } + + footprints.add(print); + } + + public static void scheduleNewBlockChange(int dimID, ScheduledBlockChange change) + { + CopyOnWriteArrayList changeList = TickHandlerServer.scheduledBlockChanges.get(dimID); + + if (changeList == null) + { + changeList = new CopyOnWriteArrayList(); + } + + changeList.add(change); + TickHandlerServer.scheduledBlockChanges.put(dimID, changeList); + } + + /** + * Only use this for AIR blocks (any type of BlockAir) + * + * @param dimID + * @param changeAdd List of + */ + public static void scheduleNewBlockChange(int dimID, List changeAdd) + { + CopyOnWriteArrayList changeList = TickHandlerServer.scheduledBlockChanges.get(dimID); + + if (changeList == null) + { + changeList = new CopyOnWriteArrayList(); + } + + changeList.addAll(changeAdd); + TickHandlerServer.scheduledBlockChanges.put(dimID, changeList); + } + + public static void scheduleNewDimensionChange(ScheduledDimensionChange change) + { + scheduledDimensionChanges.add(change); + } + + public static void scheduleNewTorchUpdate(int dimID, List torches) + { + CopyOnWriteArrayList updateList = TickHandlerServer.scheduledTorchUpdates.get(dimID); + + if (updateList == null) + { + updateList = new CopyOnWriteArrayList(); + } + + updateList.addAll(torches); + TickHandlerServer.scheduledTorchUpdates.put(dimID, updateList); + } + + public static void scheduleNewEdgeCheck(int dimID, BlockPos edgeBlock) + { + Set updateList = TickHandlerServer.edgeChecks.get(dimID); + + if (updateList == null) + { + updateList = new HashSet(); + } + + updateList.add(edgeBlock); + TickHandlerServer.edgeChecks.put(dimID, updateList); + } + + public static boolean scheduledForChange(int dimID, BlockPos test) + { + CopyOnWriteArrayList changeList = TickHandlerServer.scheduledBlockChanges.get(dimID); + + if (changeList != null) + { + for (ScheduledBlockChange change : changeList) + { + if (test.equals(change.getChangePosition())) + { + return true; + } + } + } + return false; + } + + public static void scheduleNetworkTick(EnergyNetwork grid) + { + TickHandlerServer.networkTicks.add(grid); + } + + public static void removeNetworkTick(EnergyNetwork grid) + { + TickHandlerServer.networkTicks.remove(grid); + } + + @SubscribeEvent + public void onServerTick(ServerTickEvent event) + { + MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); + // Prevent issues when clients switch to LAN servers + if (server == null) + { + return; + } + + if (event.phase == Phase.START) + { + if (timerHoustonCommand > 0) + { + if (--timerHoustonCommand == 0) + { + CommandGCHouston.reset(); + } + } + + for (ScheduledDimensionChange change : TickHandlerServer.scheduledDimensionChanges) + { + try + { + GCPlayerStats stats = GCPlayerStats.get(change.getPlayer()); + final WorldProvider provider = WorldUtil.getProviderForDimensionServer(change.getDimensionId()); + if (provider != null) + { + final int dim = GCCoreUtil.getDimensionID(provider); + GalacticraftCore.logger.info("Found matching world (" + dim + ") for name: " + change.getDimensionId()); + + if (change.getPlayer().world instanceof WorldServer) + { + final WorldServer world = (WorldServer) change.getPlayer().world; + + WorldUtil.transferEntityToDimension(change.getPlayer(), dim, world); + } + } else + { + GalacticraftCore.logger.error("World not found when attempting to transfer entity to dimension: " + change.getDimensionId()); + } + + stats.setTeleportCooldown(10); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_CLOSE_GUI, GCCoreUtil.getDimensionID(change.getPlayer().world), new Object[] + {}), change.getPlayer()); + } catch (Exception e) + { + GalacticraftCore.logger.error("Error occurred when attempting to transfer entity to dimension: " + change.getDimensionId()); + e.printStackTrace(); + } + } + + TickHandlerServer.scheduledDimensionChanges.clear(); + + if (MapUtil.calculatingMap.get()) + { + MapUtil.BiomeMapNextTick_MultiThreaded(); + } else if (!MapUtil.doneOverworldTexture) + { + MapUtil.makeOverworldTexture(); + } + + if (TickHandlerServer.spaceRaceData == null) + { + World world = server.getWorld(0); + TickHandlerServer.spaceRaceData = (WorldDataSpaceRaces) world.getMapStorage().getOrLoadData(WorldDataSpaceRaces.class, WorldDataSpaceRaces.saveDataID); + + if (TickHandlerServer.spaceRaceData == null) + { + TickHandlerServer.spaceRaceData = new WorldDataSpaceRaces(WorldDataSpaceRaces.saveDataID); + world.getMapStorage().setData(WorldDataSpaceRaces.saveDataID, TickHandlerServer.spaceRaceData); + } + } + + SpaceRaceManager.tick(); + + TileEntityOxygenSealer.onServerTick(); + + if (TickHandlerServer.tickCount % 33 == 0) + { + WorldServer[] worlds = server.worlds; + + for (int i = worlds.length - 1; i >= 0; i--) + { + WorldServer world = worlds[i]; + TileEntityPainter.onServerTick(world); + } + } + if (TickHandlerServer.tickCount % 100 == 0) + { + WorldServer[] worlds = server.worlds; + + for (int i = 0; i < worlds.length; i++) + { + WorldServer world = worlds[i]; + ChunkProviderServer chunkProviderServer = world.getChunkProvider(); + + Map> footprintMap = TickHandlerServer.serverFootprintMap.get(GCCoreUtil.getDimensionID(world)); + + if (footprintMap != null) + { + boolean mapChanged = false; + + if (chunkProviderServer != null) + { + Iterator iterator = chunkProviderServer.getLoadedChunks().iterator(); + + while (iterator.hasNext()) + { + Chunk chunk = (Chunk) iterator.next(); + long chunkKey = ChunkPos.asLong(chunk.x, chunk.z); + + List footprints = footprintMap.get(chunkKey); + + if (footprints != null) + { + List toRemove = new ArrayList(); + + for (int j = 0; j < footprints.size(); j++) + { + footprints.get(j).age += 100; + + if (footprints.get(j).age >= Footprint.MAX_AGE) + { + toRemove.add(footprints.get(j)); + } + } + + if (!toRemove.isEmpty()) + { + footprints.removeAll(toRemove); + } + + footprintMap.put(chunkKey, footprints); + mapChanged = true; + + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(EnumSimplePacket.C_UPDATE_FOOTPRINT_LIST, worlds[i].provider.getDimension(), new Object[] + {chunkKey, footprints.toArray(new Footprint[footprints.size()])}), worlds[i].provider.getDimension()); + } + } + } + + if (mapChanged) + { + TickHandlerServer.serverFootprintMap.put(GCCoreUtil.getDimensionID(world), footprintMap); + } + } + } + } + + if (!footprintBlockChanges.isEmpty()) + { + for (BlockVec3Dim targetPoint : footprintBlockChanges) + { + WorldServer[] worlds = server.worlds; + + for (int i = 0; i < worlds.length; i++) + { + WorldServer world = worlds[i]; + + if (GCCoreUtil.getDimensionID(world) == targetPoint.dim) + { + long chunkKey = ChunkPos.asLong((int) targetPoint.x >> 4, (int) targetPoint.z >> 4); + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_FOOTPRINTS_REMOVED, GCCoreUtil.getDimensionID(world), new Object[] + {chunkKey, new BlockVec3(targetPoint.x, targetPoint.y, targetPoint.z)}), new NetworkRegistry.TargetPoint(targetPoint.dim, targetPoint.x, targetPoint.y, targetPoint.z, 50)); + +// Map> footprintMap = TickHandlerServer.serverFootprintMap.get(world.provider.dimensionId); +// +// if (footprintMap != null && !footprintMap.isEmpty()) +// { +// List footprints = footprintMap.get(chunkKey); +// if (footprints != null) +// GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_UPDATE_FOOTPRINT_LIST, new Object[] { chunkKey, footprints.toArray(new Footprint[footprints.size()]) }), new NetworkRegistry.TargetPoint(targetPoint.dim, targetPoint.x, targetPoint.y, targetPoint.z, 50)); +// } + } + } + } + + footprintBlockChanges.clear(); + } + + if (tickCount % 20 == 0) + { + if (!playersRequestingMapData.isEmpty()) + { + File baseFolder = new File(DimensionManager.getCurrentSaveRootDirectory(), "galacticraft/overworldMap"); + if (!baseFolder.exists() && !baseFolder.mkdirs()) + { + + GalacticraftCore.logger.error("Base folder(s) could not be created: " + baseFolder.getAbsolutePath()); + } else + { + ArrayList copy = new ArrayList(playersRequestingMapData); + BufferedImage reusable = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB); + for (EntityPlayerMP playerMP : copy) + { + GCPlayerStats stats = GCPlayerStats.get(playerMP); + MapUtil.makeVanillaMap(playerMP.dimension, (int) Math.floor(stats.getCoordsTeleportedFromZ()) >> 4, (int) Math.floor(stats.getCoordsTeleportedFromZ()) >> 4, baseFolder, + reusable); + } + playersRequestingMapData.removeAll(copy); + } + } + } + + TickHandlerServer.tickCount++; + + EnergyNetwork.tickCount++; + } else if (event.phase == Phase.END) + { + for (FluidNetwork network : new ArrayList<>(fluidNetworks)) + { + if (!network.pipes.isEmpty()) + { + network.tickEnd(); + } else + { + fluidNetworks.remove(network); + } + } + + int maxPasses = 10; + while (!TickHandlerServer.networkTicks.isEmpty()) + { + LinkedList pass = new LinkedList<>(); + pass.addAll(TickHandlerServer.networkTicks); + TickHandlerServer.networkTicks.clear(); + for (EnergyNetwork grid : pass) + { + grid.tickEnd(); + } + + if (--maxPasses <= 0) + { + break; + } + } + + maxPasses = 10; + while (!TickHandlerServer.oxygenTransmitterUpdates.isEmpty()) + { + LinkedList pass = new LinkedList<>(); + pass.addAll(TickHandlerServer.oxygenTransmitterUpdates); + TickHandlerServer.oxygenTransmitterUpdates.clear(); + for (TileEntityFluidTransmitter newTile : pass) + { + if (!newTile.isInvalid()) + { + newTile.refresh(); + } + } + + if (--maxPasses <= 0) + { + break; + } + } + + maxPasses = 10; + while (!TickHandlerServer.energyTransmitterUpdates.isEmpty()) + { + LinkedList pass = new LinkedList<>(); + pass.addAll(TickHandlerServer.energyTransmitterUpdates); + TickHandlerServer.energyTransmitterUpdates.clear(); + for (TileBaseConductor newTile : pass) + { + // I'm not sure why this would be null, but apparently it + // can be + // See + // https://github.com/micdoodle8/Galacticraft/issues/3700 + if (newTile != null && !newTile.isInvalid()) + { + newTile.refresh(); + } + } + + if (--maxPasses <= 0) + { + break; + } + } + } + } + + private static Set worldsNeedingUpdate = new HashSet(); + + public static void markWorldNeedsUpdate(int dimension) + { + worldsNeedingUpdate.add(dimension); + } + + @SubscribeEvent + public void onWorldTick(WorldTickEvent event) + { + if (event.phase == Phase.START) + { + final WorldServer world = (WorldServer) event.world; + + CopyOnWriteArrayList changeList = TickHandlerServer.scheduledBlockChanges.get(GCCoreUtil.getDimensionID(world)); + + if (changeList != null && !changeList.isEmpty()) + { + int blockCount = 0; + int blockCountMax = Math.max(this.MAX_BLOCKS_PER_TICK, changeList.size() / 4); + List newList = new ArrayList(Math.max(0, changeList.size() - blockCountMax)); + + for (ScheduledBlockChange change : changeList) + { + if (++blockCount > blockCountMax) + { + newList.add(change); + } else + { + if (change != null) + { + BlockPos changePosition = change.getChangePosition(); + Block block = world.getBlockState(changePosition).getBlock(); + // Only replace blocks of type BlockAir or fire - + // this is to prevent accidents where other mods + // have moved blocks + if (changePosition != null && (block instanceof BlockAir || block == Blocks.FIRE)) + { + world.setBlockState(changePosition, change.getChangeState(), change.getChangeUpdateFlag()); + } + } + } + } + + changeList.clear(); + TickHandlerServer.scheduledBlockChanges.remove(GCCoreUtil.getDimensionID(world)); + if (newList.size() > 0) + { + TickHandlerServer.scheduledBlockChanges.put(GCCoreUtil.getDimensionID(world), new CopyOnWriteArrayList(newList)); + } + } + + CopyOnWriteArrayList torchList = TickHandlerServer.scheduledTorchUpdates.get(GCCoreUtil.getDimensionID(world)); + + if (torchList != null && !torchList.isEmpty()) + { + for (BlockVec3 torch : torchList) + { + if (torch != null) + { + BlockPos pos = new BlockPos(torch.x, torch.y, torch.z); + Block b = world.getBlockState(pos).getBlock(); + if (b instanceof BlockUnlitTorch) + { + world.scheduleUpdate(pos, b, 2 + world.rand.nextInt(30)); + } + } + } + + torchList.clear(); + TickHandlerServer.scheduledTorchUpdates.remove(GCCoreUtil.getDimensionID(world)); + } + + if (world.provider instanceof IOrbitDimension) + { + try + { + int dim = ((IOrbitDimension) world.provider).getPlanetIdToOrbit(); + if (dim == Integer.MIN_VALUE) + dim = GCCoreUtil.getDimensionID(WorldUtil.getProviderForNameServer(((IOrbitDimension) world.provider).getPlanetToOrbit())); + int minY = ((IOrbitDimension) world.provider).getYCoordToTeleportToPlanet(); + + final Entity[] entityList = world.loadedEntityList.toArray(new Entity[world.loadedEntityList.size()]); + for (final Entity e : entityList) + { + if (e.posY <= minY && e.world == world) + { + WorldUtil.transferEntityToDimension(e, dim, world, false, null); + } + } + } catch (Exception ex) + { + } + } + + int dimensionID = GCCoreUtil.getDimensionID(world); + if (worldsNeedingUpdate.contains(dimensionID)) + { + worldsNeedingUpdate.remove(dimensionID); + for (Object obj : event.world.loadedTileEntityList) + { + TileEntity tile = (TileEntity) obj; + if (tile instanceof TileEntityFluidTank) + { + ((TileEntityFluidTank) tile).updateClient = true; + } + } + } + } else if (event.phase == Phase.END) + { + final WorldServer world = (WorldServer) event.world; + + for (GalacticraftPacketHandler handler : packetHandlers) + { + handler.tick(world); + } + + int dimID = GCCoreUtil.getDimensionID(world); + Set edgesList = TickHandlerServer.edgeChecks.get(dimID); + final HashSet checkedThisTick = new HashSet<>(); + + if (edgesList != null && !edgesList.isEmpty()) + { + List edgesListCopy = new ArrayList<>(); + edgesListCopy.addAll(edgesList); + for (BlockPos edgeBlock : edgesListCopy) + { + if (edgeBlock != null && !checkedThisTick.contains(edgeBlock)) + { + if (TickHandlerServer.scheduledForChange(dimID, edgeBlock)) + { + continue; + } + + ThreadFindSeal done = new ThreadFindSeal(world, edgeBlock, 0, new ArrayList()); + checkedThisTick.addAll(done.checkedAll()); + } + } + + TickHandlerServer.edgeChecks.remove(GCCoreUtil.getDimensionID(world)); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/AirLockProtocol.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/AirLockProtocol.java new file mode 100644 index 00000000..cc8212bb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/AirLockProtocol.java @@ -0,0 +1,322 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +class AirLockProtocol +{ + + private ArrayList adjacentAirLocks; + private HashSet checked; + private final World world; + private final TileEntity head; + private final int maxLoops; + + private int airLocksDimension1Min = 0; + private int airLocksDimension1Max = 0; + private int airLocksDimension2Min = 0; + private int airLocksDimension2Max = 0; + + public int minX = 6000000; + public int maxX = -6000000; + public int minY = 6000000; + public int maxY = -6000000; + public int minZ = 6000000; + public int maxZ = -6000000; + + public AirLockProtocol(TileEntity head) + { + this.adjacentAirLocks = new ArrayList(); + this.checked = new HashSet(); + this.world = head.getWorld(); + this.head = head; + this.maxLoops = 26; + } + + private void loopThrough(BlockPos pos, int loops) + { + int xAligned = this.head.getPos().getX(); + int zAligned = this.head.getPos().getZ(); + for (int x = -1; x <= 1; x++) + { + int xTest = pos.getX() + x; + for (int z = -1; z <= 1; z++) + { + int zTest = pos.getZ() + z; + + if ((xTest == xAligned || zTest == zAligned)) + { + for (int y = -1; y <= 1; y++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + final BlockPos testPos = new BlockPos(xTest, pos.getY() + y, zTest); + if (!this.checked.contains(testPos)) + { + this.checked.add(testPos); + if (this.world.getTileEntity(testPos) instanceof TileEntityAirLock) + { + this.adjacentAirLocks.add(testPos); + if (loops > 1) + { + this.loopThrough(testPos, loops - 1); + } + } + } + } + } + } + } + } + } + + private void loopThroughHorizontal(BlockPos pos, int loops) + { + int yTest = pos.getY(); + for (int x = -1; x <= 1; x++) + { + int xTest = pos.getX() + x; + for (int z = -1; z <= 1; z++) + { + if (!(x == 0 && z == 0)) + { + final BlockPos testPos = new BlockPos(xTest, yTest, pos.getZ() + z); + if (!this.checked.contains(testPos)) + { + this.checked.add(testPos); + if (this.world.getTileEntity(testPos) instanceof TileEntityAirLock) + { + this.adjacentAirLocks.add(testPos); + if (loops > 1) + { + this.loopThroughHorizontal(testPos, loops - 1); + } + } + } + } + } + } + } + + public int calculate(boolean horizontal) + { + if (this.world.isRemote) + { + return -1; + } + + this.minX = 6000000; + this.maxX = -6000000; + this.minY = 6000000; + this.maxY = -6000000; + this.minZ = 6000000; + this.maxZ = -6000000; + + this.adjacentAirLocks = new ArrayList(); + this.checked.clear(); + final BlockPos headPos = this.head.getPos(); + this.checked.add(headPos); + this.adjacentAirLocks.add(headPos); + + if (horizontal) + { + this.loopThroughHorizontal(headPos, this.maxLoops); + } else + { + this.loopThrough(headPos, this.maxLoops); + } + + for (final BlockPos airLock : this.adjacentAirLocks) + { + if (airLock.getX() < this.minX) + { + this.minX = airLock.getX(); + } + + if (airLock.getX() > this.maxX) + { + this.maxX = airLock.getX(); + } + + if (airLock.getY() < this.minY) + { + this.minY = airLock.getY(); + } + + if (airLock.getY() > this.maxY) + { + this.maxY = airLock.getY(); + } + + if (airLock.getZ() < this.minZ) + { + this.minZ = airLock.getZ(); + } + + if (airLock.getZ() > this.maxZ) + { + this.maxZ = airLock.getZ(); + } + } + + final int count = this.maxX - this.minX + this.maxZ - this.minZ + this.maxY - this.minY; + + if (count > 24 || this.maxX - this.minX <= 1 && this.maxZ - this.minZ <= 1 || !horizontal && this.maxY - this.minY <= 1) + { + return -1; + } + + if (horizontal && (this.maxX - this.minX <= 1 || this.maxZ - this.minZ <= 1)) + { + return -1; + } + + this.airLocksDimension1Min = 0; + this.airLocksDimension1Max = 0; + this.airLocksDimension2Min = 0; + this.airLocksDimension2Max = 0; + + if (horizontal) + { + this.checkDimensionsHorizontal(); + } else + { + this.checkDimensions(); + } + + if (this.airLocksDimension2Max == 0 || this.airLocksDimension2Min == 0 || (this.airLocksDimension1Min == 0 || this.airLocksDimension1Max == 0) + || this.airLocksDimension2Max != this.airLocksDimension2Min || this.airLocksDimension1Max != this.airLocksDimension1Min) + { + return -1; + } + + return this.adjacentAirLocks.size(); + } + + private void checkDimensions() + { + for (int y = this.minY; y <= this.maxY; y++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.minX, y, this.minZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension1Min++; + } + } + + for (int y = this.minY; y <= this.maxY; y++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.maxX, y, this.maxZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension1Max++; + } + } + + if (this.minX != this.maxX) + { + for (int x = this.minX; x <= this.maxX; x++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(x, this.maxY, this.maxZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Max++; + } + } + + for (int x = this.minX; x <= this.maxX; x++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(x, this.minY, this.maxZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Min++; + } + } + } else if (this.minZ != this.maxZ) + { + for (int z = this.minZ; z <= this.maxZ; z++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.maxX, this.maxY, z)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Max++; + } + } + + for (int z = this.minZ; z <= this.maxZ; z++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.maxX, this.minY, z)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Min++; + } + } + } + } + + private void checkDimensionsHorizontal() + { + if (this.minX != this.maxX) + { + for (int x = this.minX; x <= this.maxX; x++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(x, this.minY, this.maxZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension1Max++; + } + } + + for (int x = this.minX; x <= this.maxX; x++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(x, this.minY, this.minZ)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension1Min++; + } + } + } + + if (this.minZ != this.maxZ) + { + for (int z = this.minZ; z <= this.maxZ; z++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.maxX, this.minY, z)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Max++; + } + } + + for (int z = this.minZ; z <= this.maxZ; z++) + { + final TileEntity tileAt = this.world.getTileEntity(new BlockPos(this.minX, this.minY, z)); + + if (tileAt instanceof TileEntityAirLock) + { + this.airLocksDimension2Min++; + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/FluidTankGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/FluidTankGC.java new file mode 100644 index 00000000..d2bf05f6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/FluidTankGC.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; + +public class FluidTankGC extends FluidTank +{ + + public FluidTankGC(int capacity, TileEntity tile) + { + super(capacity); + this.tile = tile; + } + + public FluidTankGC(FluidStack stack, int capacity, TileEntity tile) + { + super(stack, capacity); + this.tile = tile; + } + + public BlockPos getTilePosition() + { + return this.tile.getPos(); + } + + public TileEntity getTile() + { + return this.tile; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSides.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSides.java new file mode 100644 index 00000000..9a845008 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSides.java @@ -0,0 +1,594 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties.MachineSidesModel; + +/** + * Used as a common interface for any TileEntity with configurable power, pipe, + * etc sides + * + */ +public interface IMachineSides extends ITileClientUpdates +{ + + /** + * The different sides which a MachineSide (e.g. electric input) can be set + * to. These are relative to the front of the machine (looking at the + * machine from the normal front). + */ + public enum Face + { + + LEFT("l", 2, 1), RIGHT("r", 0, 2), REAR("b", 1, 0), TOP("u", 4, 4), BOTTOM("d", 3, 3), NOT_SET("n", 5, 5), NOT_CONFIGURABLE("fail", 6, 6); + + private final String name; + private final int next; + private final int prior; + public static Face[] Horizontals = new Face[] + {Face.LEFT, Face.REAR, Face.RIGHT}; + public static Face[] AllAvailable = new Face[] + {Face.LEFT, Face.REAR, Face.RIGHT, Face.TOP, Face.BOTTOM}; + + Face(String newname, int theNext, int thePrior) + { + this.name = newname; + this.next = theNext; + this.prior = thePrior; + } + + public String getName() + { + return this.name; + } + + public Face next() + { + return Face.values()[this.next]; + } + + public Face prior() + { + return Face.values()[this.prior]; + } + } + + /* + * All the different possible types of configurable side. Each of these can + * correspond to a texture and a function according to the block type. Many + * may be unused. this.listConfigurableSides() provides a list of which ones + * the tile actually uses. + */ + public enum MachineSide + { + + FRONT("front"), REARDECO("reardeco"), PLAIN("plain"), TOP("top"), BASE("bottom"), ELECTRIC_IN("elec_in"), ELECTRIC_OUT("elec_out"), PIPE_IN("pipe_in"), PIPE_OUT("pipe_out"), CUSTOM("custom"); + + private final String name; + + MachineSide(String newname) + { + this.name = newname; + } + } + + // --------------METHODS-------------- + /** + * The front of this machine, with the graphic. This CANNOT be set: use a + * wrench to change the block's facing to change it (If player wants to + * change the front then rotate the block's facing and all other sides) + */ + public EnumFacing byIndex(); + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getElectricInputDirection() + { + return null; + } + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getElectricOutputDirection() + { + return null; + } + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getPipeInputDirection() + { + return null; + } + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getPipeOutputDirection() + { + return null; + } + + /** + * Used internally by tileEntity logic + */ + public default EnumFacing getCustomDirection() + { + return null; + } + + /* + * Returns true if the setting succeeded (Also returns true if it is an + * attempt to set it to the same value as it is currently.) Returns false if + * the MachineSide is not configurable. Use isValidForSide() first to test + * whether the setting is valid for the side here. + */ + public default boolean setSide(MachineSide sideToSet, Face newSide) + { + if (this.getConfigurationType() == IMachineSidesProperties.NOT_CONFIGURABLE) + { + return false; + } + + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.test(sideToSet)) + { + msp.set(newSide); + return true; + } + } + + return false; + } + + /** + * Like setSide() but using index for performance - for internal use + * + * index matches the index in getConfigurableSides() + */ + public default boolean setSide(int index, Face newSide) + { + if (this.getConfigurationType() == IMachineSidesProperties.NOT_CONFIGURABLE) + { + return false; + } + + MachineSidePack[] msps = this.getAllMachineSides(); + if (index >= 0 && index < msps.length) + { + msps[index].set(newSide); + return true; + } + + return false; + } + + /** + * Like getSide(MachineSide) but using index for performance - for internal + * use + * + * index matches the index in getConfigurableSides() + */ + public default Face getSide(int index) + { + MachineSidePack[] msps = this.getAllMachineSides(); + if (index >= 0 && index < msps.length) + return msps[index].get(); + + return Face.NOT_CONFIGURABLE; + } + + public default Face getSide(MachineSide sideToGet) + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.test(sideToGet)) + { + return msp.get(); + } + } + return Face.NOT_CONFIGURABLE; + } + + /* + * Like getSide() but results limited to sides which the blockstate is + * allowed to render index matches the index in getConfigurableSides() + */ + public default Face getAllowedSide(int index) + { + Face test = this.getSide(index); + for (Face face : this.allowableFaces()) + { + if (face == test) + return test; + } + return this.listDefaultFaces()[index]; + } + + /** + * Returns true if the machine side can be set to this face + * + * By default, returns all allowable configurable faces + * + * Overide this for special tile logic for specific sides + */ + public default boolean isValidForSide(MachineSide sideToSet, Face newSide) + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.test(sideToSet)) + { + return Arrays.asList(this.allowableFaces()).contains(newSide); + } + } + + // TODO: could maybe return true for default settings for + // this.getConfigurationType() + // e.g. front == front, top == top, base == bottom + return false; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeLeft() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.LEFT) + { + return msp.getRenderType(); + } + } + + return MachineSide.PLAIN; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeRight() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.RIGHT) + { + return msp.getRenderType(); + } + } + + return MachineSide.PLAIN; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeRear() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.REAR) + { + return msp.getRenderType(); + } + } + return MachineSide.PLAIN; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeTop() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.TOP) + { + return msp.getRenderType(); + } + } + return MachineSide.TOP; + } + + /** + * Can be used for rendering this machine in a GUI + */ + public default MachineSide textureTypeBase() + { + for (MachineSidePack msp : this.getAllMachineSides()) + { + if (msp.get() == Face.BOTTOM) + { + return msp.getRenderType(); + } + } + + return MachineSide.BASE; + } + + /** + * Essential for block rendering - use in getActualState() Automatically + * returns a valid property as long as getConfigurationType() matches the + * property (see BlockMachineTiered for an example) + * + * Override this if you want more options. + */ + public default IMachineSidesProperties.MachineSidesModel buildBlockStateProperty() + { + int length = listConfigurableSides().length; + switch (length) + { + case 1: + return IMachineSidesProperties.getModelForOneFace(this.getAllowedSide(0)).validFor(getConfigurationType()); + case 2: + default: + return IMachineSidesProperties.getModelForTwoFaces(this.getAllowedSide(0), this.getAllowedSide(1)).validFor(getConfigurationType()); + } + } + + /** + * Call this from a Block's getActualState() method + * + * @param state The blockstate prior to addition of this property + * @param tile The tile entity matching the block position (null will return + * a default value) + * @param renderType The calling block's MACHINESIDES_RENDERTYPE + * @param key The name given to the machine sides property in the calling + * block e.g. SIDES + * + * @return A blockstate with the property added + */ + public static IBlockState addPropertyForTile(IBlockState state, TileEntity tile, IMachineSidesProperties renderType, PropertyEnum key) + { + if (tile instanceof IMachineSides) + { + IMachineSides tileSides = (IMachineSides) tile; + return state.withProperty(key, tileSides.buildBlockStateProperty()); + } else + return state.withProperty(key, renderType.getDefault()); + } + + /** + * For testing purposes - Sneak Wrench to activate this + */ + public default void nextSideConfiguration(TileEntity te) + { + if (this.getConfigurationType() == IMachineSidesProperties.NOT_CONFIGURABLE) + { + return; + } + + int length = listConfigurableSides().length; + + // TODO: adapt result of Face.next() and Face.prior() according to Horiz + // or All models + switch (length) + { + case 1: + this.setSide(0, this.getSide(0).next()); + break; + case 2: + Face leadingSide = this.getSide(0); + if (this.getSide(1) != leadingSide.next()) + { + this.setSide(1, leadingSide.prior()); + this.setSide(0, leadingSide.next()); + } else + { + this.setSide(1, leadingSide.prior()); + } + break; + default: + // Override this for 3 or more configurable sides! + } + + if (te.getWorld().isRemote) + { + te.getWorld().markBlockRangeForRenderUpdate(te.getPos(), te.getPos()); + } else + { + this.updateAllInDimension(); + } + } + + /** + * Array with all the configurable sides for this machine (not including the + * front) + * + * Any sides not included in this list are defaults: PLAIN for left, right + * and rear sides TOP for top BASE for bottom + */ + public MachineSide[] listConfigurableSides(); + + /** + * Array with the default faces to match entries in listConfigurableSides() + */ + public Face[] listDefaultFaces(); + + /** + * All the different allowable faces which the configurable sides can be + * configured to (for example it might be horizontal faces only, for this + * machine) + */ + public default Face[] allowableFaces() + { + return this.getConfigurationType().allowableFaces(); + } + + /** + * The type of configuration (one or two sides to configure, only horizontal + * settings or all allowed) - this needs to match the blockstate model + * implementation, take it from the Block. (Look at TileEnergyStorageModule + * for an example.) + */ + public IMachineSidesProperties getConfigurationType(); + + /** + * Call this in getAllMachineSides() or else in the class constructor + */ + public default void initialiseSides() + { + int length = listConfigurableSides().length; + this.setupMachineSides(length); + for (int i = 0; i < length; i++) + { + this.getAllMachineSides()[i] = new MachineSidePack(listConfigurableSides()[i], listDefaultFaces()[i]); + } + } + + /** + * The array storing all configurable machine sides and their current + * settings in this tile. + * + * IMPORTANT: Run initialiseSides() in the first call to this if it would + * otherwise be null - see examples in GC code + */ + public MachineSidePack[] getAllMachineSides(); + + /** + * Create an array of MachineSidePack[length] which can later be get using + * getAllMachineSides() + */ + public void setupMachineSides(int length); + + public default void addMachineSidesToNBT(NBTTagCompound par1nbtTagCompound) + { + NBTTagList tagList = new NBTTagList(); + for (MachineSidePack msp : this.getAllMachineSides()) + { + NBTTagCompound tag = new NBTTagCompound(); + msp.writeToNBT(tag); + tagList.appendTag(tag); + } + par1nbtTagCompound.setTag("macsides", tagList); + } + + public default void readMachineSidesFromNBT(NBTTagCompound par1nbtTagCompound) + { + NBTTagList tagList = par1nbtTagCompound.getTagList("macsides", 10); + MachineSidePack[] msps = this.getAllMachineSides(); + if (tagList.tagCount() == msps.length) + { + for (int i = 0; i < tagList.tagCount(); ++i) + { + msps[i].readFromNBT(tagList.getCompoundTagAt(i)); + } + } + } + + @Override + public default void buildDataPacket(int[] data) + { + MachineSidePack[] msps = this.getAllMachineSides(); + for (int i = 0; i < msps.length; ++i) + { + data[i] = msps[i].get().ordinal(); + } + } + + @Override + @SideOnly(Side.CLIENT) + public default void updateClient(List data) + { + MachineSidePack[] msps = this.getAllMachineSides(); + for (int i = 0; i < msps.length; ++i) + { + msps[i].set((Integer) data.get(i + 1)); + } + BlockPos pos = ((TileEntity) this).getPos(); + ((TileEntity) this).getWorld().markBlockRangeForRenderUpdate(pos, pos); + } + + /** + * A container object for Machine Sides settings This should be implemented + * in an array by each TileEntity + * + */ + public class MachineSidePack + { + + private MachineSide theSide; + private Face currentFace; + + public MachineSidePack(MachineSide type, Face defaultFace) + { + assert (type != null); + this.theSide = type; + this.set(defaultFace); + } + + public void writeToNBT(NBTTagCompound tag) + { + tag.setInteger("ts", this.theSide.ordinal()); + tag.setInteger("cf", this.currentFace.ordinal()); + } + + public void readFromNBT(NBTTagCompound tag) + { + int ts = -1; + int cf = -1; + if (tag.hasKey("ts")) + { + ts = tag.getInteger("ts"); + } + if (tag.hasKey("cf")) + { + cf = tag.getInteger("cf"); + } + if (ts == theSide.ordinal() && cf >= 0 && cf < Face.values().length) + { + this.currentFace = Face.values()[cf]; + } + } + + public void set(Face face) + { + this.currentFace = (face == null) ? Face.NOT_SET : face; + } + + public void set(int index) + { + if (index >= 0 && index < Face.values().length) + this.currentFace = Face.values()[index]; + } + + public Face get() + { + return this.currentFace; + } + + public MachineSide getRenderType() + { + return this.theSide; + } + + public boolean test(MachineSide type) + { + return this.theSide == type; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSidesProperties.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSidesProperties.java new file mode 100644 index 00000000..f06ca453 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMachineSidesProperties.java @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.util.IStringSerializable; + +import micdoodle8.mods.galacticraft.core.tile.IMachineSides.Face; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; + +/** + * Used to create the blockState property corresponding to the machine sides, + * and to correspondingly constrain the allowable faces. + * + * It's not compulsory to use this, a block could create its blockState model + * from the machine sides in some different way. + */ +public class IMachineSidesProperties +{ + + public static IMachineSidesProperties NOT_CONFIGURABLE = new IMachineSidesProperties(MachineSidesModel.noneConfigurable(), Face.Horizontals); + public static IMachineSidesProperties ONEFACE_HORIZ = new IMachineSidesProperties(MachineSidesModel.oneFacedHoriz(), Face.Horizontals); + public static IMachineSidesProperties ONEFACE = new IMachineSidesProperties(MachineSidesModel.oneFacedAll(), Face.AllAvailable); + public static IMachineSidesProperties TWOFACES_HORIZ = new IMachineSidesProperties(MachineSidesModel.twoFacedHoriz(), Face.Horizontals); + public static IMachineSidesProperties TWOFACES_ALL = new IMachineSidesProperties(MachineSidesModel.twoFacedAll(), Face.AllAvailable); + + public PropertyEnum asProperty; + private Predicate filter; + private Face[] toFaces; + + public IMachineSidesProperties(Predicate theFilter, Face[] faces) + { + this.asProperty = PropertyEnum.create("msm", MachineSidesModel.class, theFilter); + this.filter = theFilter; + this.toFaces = faces; + } + + /** + * Default blockState model to use if the tile can't be read + */ + public MachineSidesModel getDefault() + { + return MachineSidesModel.LEFT1; + } + + /** + * Allowable faces for the configurable sides, consistent with the + * blockState variants + */ + public Face[] allowableFaces() + { + return this.toFaces; + } + + public boolean isValidFor(MachineSidesModel machineSidesModel) + { + return filter.apply(machineSidesModel); + } + + public static MachineSidesModel getModelForTwoFaces(Face faceA, Face faceB) + { + String result = faceA.getName() + faceB.getName(); + for (MachineSidesModel test : MachineSidesModel.values()) + { + if (result.equals(test.name)) + return test; + } + return MachineSidesModel.RIGHT1; + } + + /** + * The return results will all be allowed by the oneFacedAll predicate + */ + public static MachineSidesModel getModelForOneFace(Face allowedSide) + { + switch (allowedSide) + { + case RIGHT: + return MachineSidesModel.RIGHT1; + case REAR: + return MachineSidesModel.REAR1; + case TOP: + return MachineSidesModel.TOP1; + case BOTTOM: + return MachineSidesModel.BOTTOM1; + case LEFT: + default: + return MachineSidesModel.LEFT1; + } + } + + /** + * The strings match the blockState model implementation for rendering + */ + public static enum MachineSidesModel implements IStringSerializable + { + + // Don't change the order, the ordinal is important for the predicate + // definitions + LEFT1("lr"), + LEFT2("lb"), + LEFT3("lu"), + LEFT4("ld"), + RIGHT1("rl"), + RIGHT2("rb"), + RIGHT3("ru"), + RIGHT4("rd"), + REAR1("bl"), + REAR2("br"), + REAR3("bu"), + REAR4("bd"), + TOP1("ul"), + TOP2("ur"), + TOP3("ub"), + TOP4("ud"), + BOTTOM1("dl"), + BOTTOM2("dr"), + BOTTOM3("db"), + BOTTOM4("du"); + + private final String name; + + MachineSidesModel(String newname) + { + this.name = newname; + } + + @Override + public String getName() + { + return this.name; + } + + public MachineSidesModel validFor(IMachineSidesProperties configurationType) + { + if (configurationType.isValidFor(this)) + { + return this; + } + return configurationType.getDefault(); + } + + private static Predicate oneFacedAll() + { + return new Predicate() + { + + @Override + public boolean apply(MachineSidesModel msm) + { + return (msm.ordinal() % 4) == 0; + } + }; + } + + private static Predicate twoFacedAll() + { + return Predicates.alwaysTrue(); + } + + private static Predicate oneFacedHoriz() + { + return new Predicate() + { + + @Override + public boolean apply(MachineSidesModel msm) + { + return msm.ordinal() < 12 && (msm.ordinal() % 4) == 0; + } + }; + } + + private static Predicate twoFacedHoriz() + { + return new Predicate() + { + + @Override + public boolean apply(MachineSidesModel msm) + { + return msm.ordinal() < 12 && (msm.ordinal() % 4) < 2; + } + }; + } + + private static Predicate noneConfigurable() + { + return new Predicate() + { + + @Override + public boolean apply(MachineSidesModel msm) + { + return msm == LEFT1; + } + }; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMultiBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMultiBlock.java new file mode 100644 index 00000000..d7b79bdb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/IMultiBlock.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; + +public interface IMultiBlock extends ITickable +{ + + /** + * Called when activated + */ + boolean onActivated(EntityPlayer entityPlayer); + + /** + * Called when this multiblock is created + * + * @param placedPosition - The position the block was placed at + */ + void onCreate(World world, BlockPos placedPosition); + + /** + * Called when one of the multiblocks of this block is destroyed + * + * @param callingBlock - The tile entity who called the onDestroy function + */ + void onDestroy(TileEntity callingBlock); + + void getPositions(BlockPos placedPosition, List positions); + + BlockMulti.EnumBlockMultiType getMultiType(); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/ReceiverMode.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/ReceiverMode.java new file mode 100644 index 00000000..4565b508 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/ReceiverMode.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +public enum ReceiverMode +{ + EXTRACT, RECEIVE, UNDEFINED +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAdvanced.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAdvanced.java new file mode 100644 index 00000000..ee4f82c8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAdvanced.java @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public abstract class TileEntityAdvanced extends TileEntityInventory implements IPacketReceiver, ITickable +{ + + public int ticks = 0; + private LinkedHashSet fieldCacheClient; + private LinkedHashSet fieldCacheServer; + private Map lastSentData = new HashMap(4, 1F); + private boolean networkDataChanged = false; + + public TileEntityAdvanced(String tileName) + { + super(tileName); + } + + @Override + public void update() + { + if (this.ticks == 0) + { + this.initiate(); + + if (this.isNetworkedTile()) + { + if (this.fieldCacheClient == null || this.fieldCacheServer == null) + { + this.initFieldCache(); + } + + if (this.world != null && this.world.isRemote && this.fieldCacheClient.size() > 0) + { + // Request any networked information from server on first + // client update (maybe client just logged on, but server + // networkdata didn't change recently) + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + } + + this.ticks++; + + if (this.isNetworkedTile() && this.ticks % this.getPacketCooldown() == 0) + { + if (this.world.isRemote && this.fieldCacheServer.size() > 0) + { + PacketDynamic packet = new PacketDynamic(this); + if (networkDataChanged) + { + GalacticraftCore.packetPipeline.sendToServer(packet); + } + } else if (!this.world.isRemote && this.fieldCacheClient.size() > 0) + { + PacketDynamic packet = new PacketDynamic(this); + if (networkDataChanged) + { + GalacticraftCore.packetPipeline.sendToAllAround(packet, + new TargetPoint(GCCoreUtil.getDimensionID(this.world), getPos().getX(), getPos().getY(), getPos().getZ(), this.getPacketRange())); + } + } + } + } + + private void initFieldCache() + { + try + { + this.fieldCacheClient = new LinkedHashSet(); + this.fieldCacheServer = new LinkedHashSet(); + + for (Field field : this.getClass().getFields()) + { + if (field.isAnnotationPresent(NetworkedField.class)) + { + NetworkedField f = field.getAnnotation(NetworkedField.class); + + if (f.targetSide() == Side.CLIENT) + { + this.fieldCacheClient.add(field); + } else + { + this.fieldCacheServer.add(field); + } + } + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + + public abstract double getPacketRange(); + + public abstract int getPacketCooldown(); + + public abstract boolean isNetworkedTile(); + + public void addExtraNetworkedData(List networkedList) + { + } + + public void readExtraNetworkedData(ByteBuf dataStream) + { + } + + public void initiate() + { + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + Set fieldList = null; + boolean changed = false; + + if (this.fieldCacheClient == null || this.fieldCacheServer == null) + { + this.initFieldCache(); + } + + if (this.world.isRemote) + { + fieldList = this.fieldCacheServer; + } else + { + fieldList = this.fieldCacheClient; + } + + for (Field f : fieldList) + { + boolean fieldChanged = false; + try + { + Object data = f.get(this); + Object lastData = lastSentData.get(f); + + if (!NetworkUtil.fuzzyEquals(lastData, data)) + { + fieldChanged = true; + } + + sendData.add(data); + + if (fieldChanged) + { + lastSentData.put(f, NetworkUtil.cloneNetworkedObject(data)); + } + } catch (Exception e) + { + e.printStackTrace(); + } + + changed |= fieldChanged; + } + + if (changed) + { + this.addExtraNetworkedData(sendData); + } else + { + ArrayList prevSendData = new ArrayList(sendData); + + this.addExtraNetworkedData(sendData); + + if (!prevSendData.equals(sendData)) + { + changed = true; + } + } + + networkDataChanged = changed; + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world == null) + { + GalacticraftCore.logger.error("World is NULL! Connot decode packet data!"); + return; + } + + if (this.fieldCacheClient == null || this.fieldCacheServer == null) + { + this.initFieldCache(); + } + Set fieldSet = null; + + if (this.world.isRemote) + { + fieldSet = this.fieldCacheClient; + } else + { + fieldSet = this.fieldCacheServer; + } + + for (Field field : fieldSet) + { + try + { + Object obj = NetworkUtil.getFieldValueFromStream(field, buffer, this.world); + field.set(this, obj); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + this.readExtraNetworkedData(buffer); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLock.java new file mode 100644 index 00000000..abb90b0a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLock.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.util.EnumFacing; + +public class TileEntityAirLock extends TileEntityAdvanced +{ + + public TileEntityAirLock() + { + super("tile.air_lock_seal.name"); + } + + @Override + public void update() + { + super.update(); + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLockController.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLockController.java new file mode 100644 index 00000000..b1529a2c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAirLockController.java @@ -0,0 +1,447 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class TileEntityAirLockController extends TileEntityAirLock +{ + + @NetworkedField(targetSide = Side.CLIENT) public boolean redstoneActivation; + @NetworkedField(targetSide = Side.CLIENT) public boolean playerDistanceActivation = true; + @NetworkedField(targetSide = Side.CLIENT) public int playerDistanceSelection; + @NetworkedField(targetSide = Side.CLIENT) public boolean playerNameMatches; + @NetworkedField(targetSide = Side.CLIENT) public String playerToOpenFor = ""; + @NetworkedField(targetSide = Side.CLIENT) public boolean invertSelection; + @NetworkedField(targetSide = Side.CLIENT) public boolean horizontalModeEnabled; + public boolean lastHorizontalModeEnabled; + @NetworkedField(targetSide = Side.CLIENT) public String ownerName = ""; + + @NetworkedField(targetSide = Side.CLIENT) public boolean active; + public boolean lastActive; + private int otherAirLocks; + private int lastOtherAirLocks; + private AirLockProtocol protocol; + private AirLockProtocol lastProtocol; + + public TileEntityAirLockController() + { + this.lastProtocol = this.protocol; + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + this.active = false; + + if (this.redstoneActivation) + { + this.active = this.world.getRedstonePowerFromNeighbors(this.getPos()) > 0; + } + + if ((this.active || !this.redstoneActivation) && this.playerDistanceActivation) + { + double distance = 0D; + + switch (this.playerDistanceSelection) + { + case 0: + distance = 1.0D; + break; + case 1: + distance = 2.0D; + break; + case 2: + distance = 5.0D; + break; + case 3: + distance = 10.0D; + break; + } + + Vector3 minPos = new Vector3(this).translate(0.5D - distance); + Vector3 maxPos = new Vector3(this).translate(0.5D + distance); + AxisAlignedBB matchingRegion = new AxisAlignedBB(minPos.x, minPos.y, minPos.z, maxPos.x, maxPos.y, maxPos.z); + List playersWithin = this.world.getEntitiesWithinAABB(EntityPlayer.class, matchingRegion); + + if (this.playerNameMatches) + { + boolean foundPlayer = false; + for (EntityPlayer p : playersWithin) + { + if (PlayerUtil.getName(p).equalsIgnoreCase(this.playerToOpenFor)) + { + foundPlayer = true; + break; + } + } + this.active = foundPlayer; + } else + { + this.active = !playersWithin.isEmpty(); + } + } + + if (!this.invertSelection) + { + this.active = !this.active; + } + + if (this.protocol == null) + { + this.protocol = this.lastProtocol = new AirLockProtocol(this); + } + + if (this.ticks % 5 == 0) + { + if (this.horizontalModeEnabled != this.lastHorizontalModeEnabled) + { + this.unsealAirLock(); + } else if (this.active || this.lastActive) + { + this.lastOtherAirLocks = this.otherAirLocks; + this.otherAirLocks = this.protocol.calculate(this.horizontalModeEnabled); + + if (this.active) + { + if (this.otherAirLocks != this.lastOtherAirLocks || !this.lastActive) + { + this.unsealAirLock(); + if (this.otherAirLocks >= 0) + { + this.sealAirLock(); + } + } + } else + { + if (this.lastActive) + { + this.unsealAirLock(); + } + } + } + + if (this.active != this.lastActive) + { + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + } + + this.lastActive = this.active; + this.lastProtocol = this.protocol; + this.lastHorizontalModeEnabled = this.horizontalModeEnabled; + } + } + } + + private void sealAirLock() + { + int x = (this.lastProtocol.maxX + this.lastProtocol.minX) / 2; + int y = (this.lastProtocol.maxY + this.lastProtocol.minY) / 2; + int z = (this.lastProtocol.maxZ + this.lastProtocol.minZ) / 2; + + if (this.world.getBlockState(new BlockPos(x, y, z)).getBlock() != GCBlocks.airLockSeal) + { + this.world.playSound(null, x, y, z, GCSounds.openAirLock, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + + if (this.horizontalModeEnabled) + { + if (this.protocol.minY == this.protocol.maxY && this.protocol.minX != this.protocol.maxX && this.protocol.minZ != this.protocol.maxZ) + { + for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) + { + for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) + { + BlockPos pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock().isAir(this.world.getBlockState(pos), this.world, pos)) + { + this.world.setBlockState(pos, GCBlocks.airLockSeal.getDefaultState(), 3); + } + } + } + } + } else + { + if (this.protocol.minX != this.protocol.maxX) + { + for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) + { + for (y = this.protocol.minY + 1; y <= this.protocol.maxY - 1; y++) + { + BlockPos pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock().isAir(this.world.getBlockState(pos), this.world, pos)) + { + this.world.setBlockState(pos, GCBlocks.airLockSeal.getDefaultState(), 3); + } + } + } + } else if (this.protocol.minZ != this.protocol.maxZ) + { + for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) + { + for (y = this.protocol.minY + 1; y <= this.protocol.maxY - 1; y++) + { + BlockPos pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock().isAir(this.world.getBlockState(pos), this.world, pos)) + { + this.world.setBlockState(pos, GCBlocks.airLockSeal.getDefaultState(), 3); + } + } + } + } + } + } + + public void unsealAirLock() + { + if (this.lastProtocol == null) + { + return; + } + + int x = this.lastProtocol.minX + (this.lastProtocol.maxX - this.lastProtocol.minX) / 2; + int y = this.lastProtocol.minY + (this.lastProtocol.maxY - this.lastProtocol.minY) / 2; + int z = this.lastProtocol.minZ + (this.lastProtocol.maxZ - this.lastProtocol.minZ) / 2; + + BlockPos pos = new BlockPos(x, y, z); + IBlockState state = this.world.getBlockState(pos); + + if (state.getMaterial() != Material.AIR) + { + this.world.playSound(null, x, y, z, GCSounds.closeAirLock, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + + boolean sealedSide = false; + Block b; + if (this.lastHorizontalModeEnabled) + { + if (this.protocol.minY == this.protocol.maxY && this.protocol.minX != this.protocol.maxX && this.protocol.minZ != this.protocol.maxZ) + { + // First test if there is sealed air to either side + for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) + { + for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) + { + pos = new BlockPos(x, y, z); + b = this.world.getBlockState(pos.up()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + continue; + } + b = this.world.getBlockState(pos.down()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + } + } + if (sealedSide) + break; + } + // Now replace the airlock blocks with either air, or sealed air + for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) + { + for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) + { + pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + if (sealedSide) + this.world.setBlockState(pos, GCBlocks.breatheableAir.getDefaultState(), 3); + else + this.world.setBlockToAir(pos); + } + } + } + } + } else + { + if (this.lastProtocol.minX != this.lastProtocol.maxX) + { + // First test if there is sealed air to either side + for (x = this.lastProtocol.minX + 1; x <= this.lastProtocol.maxX - 1; x++) + { + for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) + { + pos = new BlockPos(x, y, z); + b = this.world.getBlockState(pos.north()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + continue; + } + b = this.world.getBlockState(pos.south()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + } + } + if (sealedSide) + break; + } + // Now replace the airlock blocks with either air, or sealed air + for (x = this.lastProtocol.minX + 1; x <= this.lastProtocol.maxX - 1; x++) + { + for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) + { + pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + if (sealedSide) + this.world.setBlockState(pos, GCBlocks.breatheableAir.getDefaultState(), 3); + else + this.world.setBlockToAir(pos); + } + } + } + } else if (this.lastProtocol.minZ != this.lastProtocol.maxZ) + { + // First test if there is sealed air to either side + for (z = this.lastProtocol.minZ + 1; z <= this.lastProtocol.maxZ - 1; z++) + { + for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) + { + pos = new BlockPos(x, y, z); + b = this.world.getBlockState(pos.west()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + continue; + } + b = this.world.getBlockState(pos.east()).getBlock(); + if (b == GCBlocks.breatheableAir || b == GCBlocks.brightBreatheableAir) + { + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + sealedSide = true; + break; + } + } + } + if (sealedSide) + break; + } + // Now replace the airlock blocks with either air, or sealed air + for (z = this.lastProtocol.minZ + 1; z <= this.lastProtocol.maxZ - 1; z++) + { + for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) + { + pos = new BlockPos(x, y, z); + if (this.world.getBlockState(pos).getBlock() == GCBlocks.airLockSeal) + { + if (sealedSide) + this.world.setBlockState(pos, GCBlocks.breatheableAir.getDefaultState(), 3); + else + this.world.setBlockToAir(pos); + } + } + } + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.ownerName = nbt.getString("OwnerName"); + this.redstoneActivation = nbt.getBoolean("RedstoneActivation"); + this.playerDistanceActivation = nbt.getBoolean("PlayerDistanceActivation"); + this.playerDistanceSelection = nbt.getInteger("PlayerDistanceSelection"); + this.playerNameMatches = nbt.getBoolean("PlayerNameMatches"); + this.playerToOpenFor = nbt.getString("PlayerToOpenFor"); + this.invertSelection = nbt.getBoolean("InvertSelection"); + this.active = nbt.getBoolean("active"); + this.lastActive = nbt.getBoolean("lastActive"); + this.horizontalModeEnabled = nbt.getBoolean("HorizontalModeEnabled"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setString("OwnerName", this.ownerName); + nbt.setBoolean("RedstoneActivation", this.redstoneActivation); + nbt.setBoolean("PlayerDistanceActivation", this.playerDistanceActivation); + nbt.setInteger("PlayerDistanceSelection", this.playerDistanceSelection); + nbt.setBoolean("PlayerNameMatches", this.playerNameMatches); + nbt.setString("PlayerToOpenFor", this.playerToOpenFor); + nbt.setBoolean("InvertSelection", this.invertSelection); + nbt.setBoolean("active", this.active); + nbt.setBoolean("lastActive", this.lastActive); + nbt.setBoolean("HorizontalModeEnabled", this.horizontalModeEnabled); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public double getPacketRange() + { + return 20.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWire.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWire.java new file mode 100644 index 00000000..a1a809f2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWire.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.nbt.NBTTagCompound; + +import net.minecraftforge.fml.common.Optional.Interface; + +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalConductor; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; + +import buildcraft.api.mj.IMjReceiver; + +@Interface(iface = "buildcraft.api.mj.IMjReceiver", modid = CompatibilityManager.modBCraftEnergy) +public class TileEntityAluminumWire extends TileBaseUniversalConductor implements IMjReceiver +{ + + public int tier; + + public TileEntityAluminumWire() + { + this(1); + } + + public TileEntityAluminumWire(int theTier) + { + this.tier = theTier; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.tier = nbt.getInteger("tier"); + // For legacy worlds (e.g. converted from 1.6.4) + if (this.tier == 0) + { + this.tier = 1; + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("tier", this.tier); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public int getTierGC() + { + return this.tier; + } + + @Override + public long getPowerRequested() + { + // TODO Auto-generated method stub + return super.getPowerRequested(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWireSwitch.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWireSwitch.java new file mode 100644 index 00000000..043c7d18 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityAluminumWireSwitch.java @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IElectricityNetwork; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.energy.grid.EnergyNetwork; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalConductor; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +import ic2.api.energy.tile.IEnergyAcceptor; +import ic2.api.energy.tile.IEnergyEmitter; + +public class TileEntityAluminumWireSwitch extends TileBaseUniversalConductor +{ + + public int tier; + private boolean disableConnections; + + public TileEntityAluminumWireSwitch() + { + this(1); + } + + public TileEntityAluminumWireSwitch(int theTier) + { + this.tier = theTier; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.tier = nbt.getInteger("tier"); + // For legacy worlds (e.g. converted from 1.6.4) + if (this.tier == 0) + { + this.tier = 1; + } + this.disableConnections = this.disableConnections(); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("tier", this.tier); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public int getTierGC() + { + return this.tier; + } + + @Override + public void refresh() + { + boolean newDisableConnections = this.disableConnections(); + if (newDisableConnections && !this.disableConnections) + { + this.disableConnections = newDisableConnections; + if (!this.world.isRemote) + { + this.disConnect(); + } + } else if (!newDisableConnections && this.disableConnections) + { + this.disableConnections = newDisableConnections; + if (!this.world.isRemote) + { + this.setNetwork(null); // Force a full network refresh of this + // and conductors either side + } + } + + if (!this.world.isRemote) + { + this.adjacentConnections = null; + if (!this.disableConnections) + { + this.getNetwork().refresh(); + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing side : EnumFacing.VALUES) + { + if (this.canConnect(side, NetworkType.POWER)) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity instanceof TileBaseConductor && ((TileBaseConductor) tileEntity).canConnect(side.getOpposite(), NetworkType.POWER)) + { + IGridNetwork otherNet = ((INetworkProvider) tileEntity).getNetwork(); + if (!this.getNetwork().equals(otherNet)) + { + if (!otherNet.getTransmitters().isEmpty()) + { + otherNet.merge(this.getNetwork()); + } + } + } + } + } + } + } + } + + private void disConnect() + { + EnergyNetwork net = (EnergyNetwork) this.getNetwork(); + if (net != null) + { + net.split(this); + } + } + + private boolean disableConnections() + { + return RedstoneUtil.isBlockReceivingRedstone(this.world, this.pos); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.POWER && !this.disableConnections(); + } + + @Override + public IElectricityNetwork getNetwork() + { + if (this.network == null) + { + EnergyNetwork network = new EnergyNetwork(); + if (!this.disableConnections) + network.getTransmitters().add(this); + this.setNetwork(network); + } + + return (IElectricityNetwork) this.network; + } + + @Override + public TileEntity[] getAdjacentConnections() + { + if (this.adjacentConnections == null) + { + this.adjacentConnections = new TileEntity[6]; + + if (!this.disableConnections) + { + BlockVec3 thisVec = new BlockVec3(this); + for (int i = 0; i < 6; i++) + { + EnumFacing side = EnumFacing.byIndex(i); + if (this.canConnect(side, NetworkType.POWER)) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity instanceof IConnector) + { + if (((IConnector) tileEntity).canConnect(side.getOpposite(), NetworkType.POWER)) + { + this.adjacentConnections[i] = tileEntity; + } + } + } + } + } + } + + return this.adjacentConnections; + } + + // IC2 + @Override + public boolean acceptsEnergyFrom(IEnergyEmitter emitter, EnumFacing side) + { + return this.disableConnections() ? false : super.acceptsEnergyFrom(emitter, side); + } + + // IC2 + @Override + public double injectEnergy(EnumFacing directionFrom, double amount, double voltage) + { + return this.disableConnections ? amount : super.injectEnergy(directionFrom, amount, voltage); + } + + // IC2 + @Override + public boolean emitsEnergyTo(IEnergyAcceptor receiver, EnumFacing side) + { + return this.disableConnections() ? false : super.emitsEnergyTo(receiver, side); + } + + // RF + @Override + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) + { + return this.disableConnections ? 0 : super.receiveEnergy(from, maxReceive, simulate); + } + + // RF + @Override + public boolean canConnectEnergy(EnumFacing from) + { + return this.disableConnections() ? false : super.canConnectEnergy(from); + } + + // Mekanism + @Override + public boolean canReceiveEnergy(EnumFacing side) + { + return this.disableConnections() ? false : super.canReceiveEnergy(side); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityArclamp.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityArclamp.java new file mode 100644 index 00000000..307d297d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityArclamp.java @@ -0,0 +1,1191 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.ai.RandomPositionGenerator; +import net.minecraft.entity.monster.IMob; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; + +import io.netty.buffer.ByteBuf; + +//ITileClientUpdates for changing in facing; IPacketReceiver for initial transfer of NBT Data (airToRestore) +public class TileEntityArclamp extends TileEntity implements ITickable, ITileClientUpdates, IPacketReceiver +{ + + private static final int LIGHTRANGE = 14; + private int ticks = 0; + private int sideRear = 0; + public int facing = 0; + private HashSet airToRestore = new HashSet<>(); + private intBucket[] buckets; + private static intBucket[] bucketsServer; + private static intBucket[] bucketsClient; + private static AtomicBoolean usingBucketsServer = new AtomicBoolean(); + private static AtomicBoolean usingBucketsClient = new AtomicBoolean(); + private AtomicBoolean usingBuckets; + private static final int SIZELIST = 65536; + private int[] lightUpdateBlockList; + private static int[] lightUpdateBlockListServer = null; + private static int[] lightUpdateBlockListClient = null; + private static AtomicBoolean usingLightListServer = new AtomicBoolean(); + private static AtomicBoolean usingLightListClient = new AtomicBoolean(); + private AtomicBoolean usingLightList; + private boolean isActive = false; + private AxisAlignedBB thisAABB; + private AxisAlignedBB renderAABB; + private Vec3d thisPos; + private int facingSide = 0; + + static + { + bucketsServer = new intBucket[256]; + bucketsClient = new intBucket[256]; + checkedInit(bucketsServer); + checkedInit(bucketsClient); + } + + @Override + public void update() + { + boolean initialLight = false; + + if (RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + if (this.isActive) + { + this.isActive = false; + this.revertAir(); + this.markDirty(); + } + } else if (!this.isActive && this.pos.getX() >= -30000000 + 32 && this.pos.getZ() >= -30000000 + 32 && this.pos.getX() < 30000000 - 32 && this.pos.getZ() < 30000000 - 32) + { + this.isActive = true; + initialLight = true; + } + + if (this.isActive) + { + // Test for first tick after placement + if (this.thisAABB == null) + { + initialLight = true; + int side = this.getBlockMetadata(); + switch (side) + { + case 0: + this.sideRear = side; // Down + this.facingSide = this.facing + 2; + break; + case 1: + this.sideRear = side; // Up + this.facingSide = this.facing + 2; + break; + case 2: + this.sideRear = side; // North + this.facingSide = this.facing; + if (this.facing > 1) + { + this.facingSide = 7 - this.facing; + } + break; + case 3: + this.sideRear = side; // South + this.facingSide = this.facing; + if (this.facing > 1) + { + this.facingSide += 2; + } + break; + case 4: + this.sideRear = side; // West + this.facingSide = this.facing; + break; + case 5: + this.sideRear = side; // East + this.facingSide = this.facing; + if (this.facing > 1) + { + this.facingSide = 5 - this.facing; + } + break; + default: + } + + this.thisAABB = getAABBforSideAndFacing(); + } + + if (initialLight || this.ticks % 100 == 0) + { + this.lightArea(); + } + + if (!this.world.isRemote && this.world.rand.nextInt(20) == 0) + { + List moblist = this.world.getEntitiesInAABBexcluding(null, this.thisAABB, IMob.MOB_SELECTOR); + + if (!moblist.isEmpty()) + { + Vec3d thisVec3 = new Vec3d(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + for (Entity entry : moblist) + { + if (!(entry instanceof EntityCreature)) + { + continue; + } + EntityCreature mob = (EntityCreature) entry; + // Check whether the mob can actually *see* the arclamp + // tile + // if (this.world.func_147447_a(thisPos, new + // Vec3(entry.posX, entry.posY, entry.posZ), true, true, + // false) != null) continue; + + PathNavigate nav = mob.getNavigator(); + if (nav == null) + { + continue; + } + + Vec3d vecNewTarget = RandomPositionGenerator.findRandomTargetBlockAwayFrom(mob, 28, 11, this.thisPos); + if (vecNewTarget == null) + { + continue; + } + + double distanceNew = vecNewTarget.squareDistanceTo(thisVec3); + double distanceCurrent = thisVec3.squareDistanceTo(new Vec3d(mob.posX, mob.posY, mob.posZ)); + if (distanceNew > distanceCurrent) + { + Vec3d vecOldTarget = null; + if (nav.getPath() != null && !nav.getPath().isFinished()) + { + vecOldTarget = nav.getPath().getPosition(mob); + } + if (vecOldTarget == null || distanceCurrent > vecOldTarget.squareDistanceTo(thisVec3)) + { + nav.tryMoveToXYZ(vecNewTarget.x, vecNewTarget.y, vecNewTarget.z, 1.3D); + } + } + } + } + } + } + + this.ticks++; + } + + private AxisAlignedBB getAABBforSideAndFacing() + { + int x = this.pos.getX(); + int y = this.pos.getY(); + int z = this.pos.getZ(); + int rangeForSide[] = new int[6]; + for (int i = 0; i < 6; i++) + { + rangeForSide[i] = (i == this.sideRear) ? 2 : (i == (this.facingSide ^ 1)) ? 4 : 25; + } + return new AxisAlignedBB(x - rangeForSide[4], y - rangeForSide[0], z - rangeForSide[2], x + rangeForSide[5], y + rangeForSide[1], z + rangeForSide[3]); + } + + @Override + public void onLoad() + { + this.thisPos = new Vec3d(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D); + this.ticks = 0; + this.thisAABB = null; + if (this.world.isRemote) + { + this.buckets = bucketsClient; + this.usingBuckets = usingBucketsClient; + if (lightUpdateBlockListClient == null) + { + lightUpdateBlockListClient = new int[SIZELIST]; + } + this.lightUpdateBlockList = lightUpdateBlockListClient; + this.usingLightList = usingLightListClient; + this.clientOnLoad(); + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } else + { + this.buckets = bucketsServer; + this.usingBuckets = usingBucketsServer; + if (lightUpdateBlockListServer == null) + { + lightUpdateBlockListServer = new int[SIZELIST]; + } + this.lightUpdateBlockList = lightUpdateBlockListServer; + this.usingLightList = usingLightListServer; + this.isActive = this.pos.getX() >= -30000000 + 32 && this.pos.getZ() >= -30000000 + 32 && this.pos.getX() < 30000000 - 32 && this.pos.getZ() < 30000000 - 32; + } + } + + @Override + public void invalidate() + { + if (this.lightUpdateBlockList == null) + { + if (this.world.isRemote) + { + this.buckets = bucketsClient; + this.usingBuckets = usingBucketsClient; + if (lightUpdateBlockListClient == null) + { + lightUpdateBlockListClient = new int[SIZELIST]; + } + this.lightUpdateBlockList = lightUpdateBlockListClient; + this.usingLightList = usingLightListClient; + } else + { + this.buckets = bucketsServer; + this.usingBuckets = usingBucketsServer; + if (lightUpdateBlockListServer == null) + { + lightUpdateBlockListServer = new int[SIZELIST]; + } + this.lightUpdateBlockList = lightUpdateBlockListServer; + this.usingLightList = usingLightListServer; + } + } + this.revertAir(); + this.isActive = false; + super.invalidate(); + } + + public void lightArea() + { + if (this.usingBuckets.getAndSet(true) || this.usingLightList.getAndSet(true)) + { + return; + } +// long time1 = System.nanoTime(); + int index = 0; + Block air = Blocks.AIR; + Block breatheableAirID = GCBlocks.breatheableAir; + IBlockState brightAir = GCBlocks.brightAir.getDefaultState(); + IBlockState brightBreatheableAir = GCBlocks.brightBreatheableAir.getDefaultState(); + boolean dirty = false; + checkedClear(); + HashSet airToRevert = new HashSet<>(); + airToRevert.addAll(airToRestore); + LinkedList airNew = new LinkedList<>(); + LinkedList currentLayer = new LinkedList<>(); + LinkedList nextLayer = new LinkedList<>(); + BlockVec3 thisvec = new BlockVec3(this); + currentLayer.add(thisvec); + World world = this.world; + int sideskip1 = this.sideRear; + int sideskip2 = this.facingSide ^ 1; + int side, bits; + for (int i = 0; i < 6; i++) + { + if (i != sideskip1 && i != sideskip2 && i != (sideskip1 ^ 1) && i != (sideskip2 ^ 1)) + { + BlockVec3 onEitherSide = thisvec.newVecSide(i); + IBlockState state = onEitherSide.getBlockStateSafe_noChunkLoad(world); + if (state != null && state.getBlock().getLightOpacity(state) < 15) + { + currentLayer.add(onEitherSide); + } + } + } + BlockVec3 inFront = new BlockVec3(this); + for (int i = 0; i < 4; i++) + { + inFront = inFront.newVecSide(this.facingSide); + IBlockState state = inFront.getBlockStateSafe_noChunkLoad(world); + if (state != null && state.getBlock().getLightOpacity(state) == 15) + { + break; + } + inFront = inFront.newVecSide(sideskip1 ^ 1); + state = inFront.getBlockStateSafe_noChunkLoad(world); + if (state != null && state.getBlock().getLightOpacity(state) < 15) + { + currentLayer.add(inFront); + } else + { + break; + } + } + + inFront = new BlockVec3(this).newVecSide(this.facingSide); + + for (int count = 0; count < LIGHTRANGE; count++) + { + for (BlockVec3 vec : currentLayer) + { + // Shape the arc lamp lighted area to more of a cone in front of + // it + if (count > 1) + { + int offset = 0; + switch (this.facingSide) + { + case 0: + offset = inFront.y - vec.y; + break; + case 1: + offset = vec.y - inFront.y; + break; + case 2: + offset = inFront.z - vec.z; + break; + case 3: + offset = vec.z - inFront.z; + break; + case 4: + offset = inFront.x - vec.x; + break; + case 5: + offset = vec.x - inFront.x; + break; + } + int offset2 = 0; + switch (this.sideRear ^ 1) + { + case 0: + offset2 = inFront.y - vec.y; + break; + case 1: + offset2 = vec.y - inFront.y; + break; + case 2: + offset2 = inFront.z - vec.z; + break; + case 3: + offset2 = vec.z - inFront.z; + break; + case 4: + offset2 = inFront.x - vec.x; + break; + case 5: + offset2 = vec.x - inFront.x; + break; + } + if (offset2 - 2 > offset) + offset = offset2 - 2; + if (Math.abs(vec.x - inFront.x) > offset + 2) + continue; + if (Math.abs(vec.y - inFront.y) > offset + 2) + continue; + if (Math.abs(vec.z - inFront.z) > offset + 2) + continue; + } + + // Now process each layer outwards from the source, finding new + // blocks to light (similar to ThreadFindSeal) + // This is high performance code using our own custom HashSet + // (that's intBucket) + side = 0; + bits = vec.sideDoneBits; + boolean doShine = false; + do + { + // Skip the side which this was entered from + // and never go 'backwards' + if ((bits & (1 << side)) == 0) + { + BlockVec3 sideVec = vec.newVecSide(side); + boolean toAdd = false; + if (!checkedContains(vec, side)) + { + checkedAdd(sideVec); + toAdd = true; + } + + IBlockState bs = sideVec.getBlockStateSafe_noChunkLoad(world); + if (bs == null) + { + side++; + continue; + } + Block b = bs.getBlock(); + if (b instanceof BlockAir) + { + if (toAdd && side != sideskip1 && side != sideskip2) + { + nextLayer.add(sideVec); + } + } else + { + doShine = true; + // Glass blocks go through to the next layer as well + if (side != sideskip1 && side != sideskip2) + { + if (toAdd && b != null && b.getLightOpacity(bs, world, sideVec.toBlockPos()) == 0) + { + nextLayer.add(sideVec); + } + } + } + } + side++; + } while (side < 6); + + if (doShine) + { + airNew.add(vec); + Block id = vec.getBlockStateSafe_noChunkLoad(world).getBlock(); + if (Blocks.AIR == id) + { + this.brightenAir(world, vec, brightAir); + index = this.checkLightPartA(EnumSkyBlock.BLOCK, vec.toBlockPos(), index); + dirty = true; + } else if (id == breatheableAirID) + { + this.brightenAir(world, vec, brightBreatheableAir); + index = this.checkLightPartA(EnumSkyBlock.BLOCK, vec.toBlockPos(), index); + dirty = true; + } + } + } + if (nextLayer.size() == 0) + { + break; + } + currentLayer = nextLayer; + nextLayer = new LinkedList(); + } + + if (dirty) + { + this.markDirty(); + this.checkLightPartB(EnumSkyBlock.BLOCK, index); + } + + // Look for any holdover bright blocks which are no longer lit (e.g. + // because the Arc Lamp became blocked in a tunnel) + airToRevert.removeAll(airNew); + index = 0; + dirty = false; + for (Object obj : airToRevert) + { + BlockVec3 vec = (BlockVec3) obj; + this.setDarkerAir(vec); + index = this.checkLightPartA(EnumSkyBlock.BLOCK, vec.toBlockPos(), index); + this.airToRestore.remove(vec); + dirty = true; + } + + if (dirty) + { + this.markDirty(); + this.checkLightPartB(EnumSkyBlock.BLOCK, index); + } + +// long time3 = System.nanoTime(); +// float total = (time3 - time1) / 1000000.0F; +// GalacticraftCore.logger.info(" Total Time taken: " + String.format("%.2f", total) + "ms"); + + this.usingBuckets.set(false); + this.usingLightList.set(false); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.facing = nbt.getInteger("Facing"); + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.airToRestore.clear(); + NBTTagList airBlocks = nbt.getTagList("AirBlocks", 10); + if (airBlocks.tagCount() > 0) + { + for (int j = airBlocks.tagCount() - 1; j >= 0; j--) + { + NBTTagCompound tag1 = airBlocks.getCompoundTagAt(j); + if (tag1 != null) + { + this.airToRestore.add(BlockVec3.readFromNBT(tag1)); + } + } + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setInteger("Facing", this.facing); + + NBTTagList airBlocks = new NBTTagList(); + + for (BlockVec3 vec : this.airToRestore) + { + NBTTagCompound tag = new NBTTagCompound(); + vec.writeToNBT(tag); + airBlocks.appendTag(tag); + } + nbt.setTag("AirBlocks", airBlocks); + return nbt; + } + + public void facingChanged() + { + this.facing -= 2; + if (this.facing < 0) + { + this.facing = 1 - this.facing; + // facing sequence: 0 - 3 - 1 - 2 + } + + this.updateAllInDimension(); + this.thisAABB = null; + this.revertAir(); + this.markDirty(); + this.ticks = 91; + } + + private void brightenAir(World world, BlockVec3 vec, IBlockState newState) + { + BlockPos blockpos = vec.toBlockPos(); + Chunk chunk = this.world.getChunk(blockpos); + IBlockState oldState = chunk.setBlockState(blockpos, newState); + if (this.world.isRemote && oldState != null) + this.world.markAndNotifyBlock(blockpos, chunk, oldState, newState, 2); + // No block update on server - not necessary for changing air to air + // (also must not trigger a sealer edge check!) + this.airToRestore.add(vec); + } + + private void setDarkerAir(BlockVec3 vec) + { + BlockPos blockpos = vec.toBlockPos(); + Block b = this.world.getBlockState(blockpos).getBlock(); + IBlockState newState; + if (b == GCBlocks.brightAir) + { + newState = Blocks.AIR.getDefaultState(); + } else if (b == GCBlocks.brightBreatheableAir) + { + newState = GCBlocks.breatheableAir.getDefaultState(); + } else + { + return; + } + +// Roughly similar to: this.worldObj.setBlockState(pos, newState, (this.worldObj.isRemote) ? 2 : 0); + + Chunk chunk = this.world.getChunk(blockpos); + IBlockState oldState = chunk.setBlockState(blockpos, newState); + if (this.world.isRemote && oldState != null) + this.world.markAndNotifyBlock(blockpos, chunk, oldState, newState, 2); + // No block update on server - not necessary for changing air to air + // (also must not trigger a sealer edge check!) + } + + private void revertAir() + { + if (this.airToRestore.isEmpty()) + return; + + if (this.usingLightList == null) + { + this.usingLightList = this.world.isRemote ? usingLightListClient : usingLightListServer; + } + + int index = 0; + for (BlockVec3 vec : this.airToRestore) + { + this.setDarkerAir(vec); + } + if (!this.usingLightList.getAndSet(true)) + { + for (BlockVec3 vec : this.airToRestore) + { + index = this.checkLightPartA(EnumSkyBlock.BLOCK, vec.toBlockPos(), index); + } + this.checkLightPartB(EnumSkyBlock.BLOCK, index); + this.usingLightList.set(false); + } + this.airToRestore.clear(); + this.checkLightFor(EnumSkyBlock.BLOCK, this.pos); + } + + public boolean checkLightFor(EnumSkyBlock lightType, BlockPos bp) + { + if (!this.world.isAreaLoaded(bp, 17, false)) + { + return false; + } + + World world = this.world; + BlockPos blockpos; + int i = 0; + int index = 0; + int savedLight = world.getLightFor(lightType, bp); + int rawLight = this.getRawLight(bp, lightType); + int testx = bp.getX(); + int testy = bp.getY(); + int testz = bp.getZ(); + int x = testx - 32; + int y = testy - 32; + int z = testz - 32; + int value, opacity, arraylight; + int xx, yy, zz, range; + LinkedList result = new LinkedList<>(); + + if (rawLight > savedLight) // Light switched on + { + lightUpdateBlockList[index++] = 133152; // 32, 32, 32 = the 0 + // position + } else if (rawLight < savedLight) // Light switched off ? + { + lightUpdateBlockList[index++] = 133152 | savedLight << 18; + + while (i < index) // This becomes CRAZY LARGE + { + value = lightUpdateBlockList[i++]; + xx = (value & 63) + x; + yy = (value >> 6 & 63) + y; + zz = (value >> 12 & 63) + z; + arraylight = value >> 18 & 15; + + if (arraylight > 0) + { + blockpos = new BlockPos(xx, yy, zz); + if (world.getLightFor(lightType, blockpos) == arraylight) // Only + // gonna + // happen + // once + // (definitely + // will + // happen + // the + // first + // iteration) + { + this.setLightFor_preChecked(lightType, blockpos, 0); // = + // flagdone + + range = MathHelper.abs(xx - testx) + MathHelper.abs(yy - testy) + MathHelper.abs(zz - testz); + if (range < 17) + { + GCCoreUtil.getPositionsAdjoining(xx, yy, zz, result); + for (BlockPos vec : result) + { + savedLight = world.getLightFor(lightType, vec); + if (savedLight == 0) + continue; // eliminate backtracking + IBlockState bs = world.getBlockState(vec); + opacity = bs.getBlock().getLightOpacity(bs, world, vec); + if (opacity <= 0) + opacity = 1; + // Tack positions onto the list as long as it + // looks like lit from here. i.e. saved light is + // adjacent light - opacity! + // There will be some errors due to coincidence + // / equality of light levels from 2 sources + if (savedLight == arraylight - opacity && index < SIZELIST) + { + lightUpdateBlockList[index++] = vec.getX() - x + (((savedLight << 6) + vec.getZ() - z << 6) + vec.getY() - y << 6); + } + } + } + } + } + } + + i = 0; + } + + while (i < index) + { + value = lightUpdateBlockList[i++]; + xx = (value & 63) + x; + yy = (value >> 6 & 63) + y; + zz = (value >> 12 & 63) + z; + blockpos = new BlockPos(xx, yy, zz); + savedLight = world.getLightFor(lightType, blockpos); + rawLight = this.getRawLight(blockpos, lightType); + + if (rawLight != savedLight) + { + this.setLightFor_preChecked(lightType, blockpos, rawLight); // <-------the + // light + // setting + if (world.isRemote) + world.notifyLightSet(blockpos); + + if (rawLight > savedLight) + { + range = MathHelper.abs(xx - testx) + MathHelper.abs(yy - testy) + MathHelper.abs(zz - testz); + if (range < 17 && index < SIZELIST - 6) + { + GCCoreUtil.getPositionsAdjoining(xx, yy, zz, result); + for (BlockPos vec : result) + { + if (world.getLightFor(lightType, vec) < rawLight - 1) // -1 + // here + // because + // opacity + // can't + // be + // less + // than + // 1 + // in + // getRawLight + { + // Tack even more positions on to the end of the + // list - this propagates each time we find a + // light source block... including going back + // over old positions + lightUpdateBlockList[index++] = vec.getX() - x + ((vec.getZ() - z << 6) + vec.getY() - y << 6); + } + } + } + } + } else if (world.isRemote && savedLight != ((value >> 21) & 15)) + { + world.notifyLightSet(blockpos); + } + } + + return true; + } + + public int checkLightPartA(EnumSkyBlock lightType, BlockPos bp, int indexIn) + { + if (indexIn >= SIZELIST) + { + return indexIn; + } + + World world = this.world; + BlockPos blockpos; + int i = indexIn; + int iNextStart = 0; + int index = indexIn; + int savedLight = world.getLightFor(lightType, bp); + int rawLight = this.getRawLight(bp, lightType); + int x = this.pos.getX() - 64; + int y = this.pos.getY() - 64; + int z = this.pos.getZ() - 64; + int testx = bp.getX(); + int testy = bp.getY(); + int testz = bp.getZ(); + int value, opacity, arraylight; + int xx, yy, zz, range; + LinkedList neighbours = new LinkedList<>(); + + if (rawLight > savedLight) // Light switched on + { + lightUpdateBlockList[index++] = ((testz - z << 7) + testy - y << 7) + testx - x; + } else if (rawLight < savedLight) // Light switched off: savedLight + // cannot be 0 here + { + lightUpdateBlockList[index++] = ((testz - z << 7) + testy - y << 7) + testx - x | savedLight << 21; + this.setLightFor_preChecked(lightType, bp, 0); + + while (i < index) + { + value = lightUpdateBlockList[i++]; + xx = (value & 127) + x; + yy = (value >> 7 & 127) + y; + zz = (value >> 14 & 127) + z; + range = MathHelper.abs(xx - testx) + MathHelper.abs(yy - testy) + MathHelper.abs(zz - testz); + if (range < 17) + { + arraylight = value >> 21 & 15; + GCCoreUtil.getPositionsAdjoiningLoaded(xx, yy, zz, neighbours, world); + for (BlockPos vec : neighbours) + { + savedLight = world.getLightFor(lightType, vec); + if (savedLight == 0) + continue; // eliminate backtracking + IBlockState bs = world.getBlockState(vec); + opacity = bs.getBlock().getLightOpacity(bs, world, vec); + if (opacity <= 0) + opacity = 1; + // Tack positions onto the list as long as it looks like + // lit from here. i.e. saved light is adjacent light - + // opacity! + // There will be some errors due to coincidence / + // equality of light levels from 2 sources + if (savedLight == arraylight - opacity && index < SIZELIST) + { + lightUpdateBlockList[index++] = vec.getX() - x + (((savedLight << 7) + vec.getZ() - z << 7) + vec.getY() - y << 7); + this.setLightFor_preChecked(lightType, vec, 0); // darken + // everything + // ready + // for + // re-light + } + } + } + } + + i = indexIn; + } + return index; + } + + public boolean checkLightPartB(EnumSkyBlock lightType, int index) + { + World world = this.world; + BlockPos blockpos; + int i = 0; + int savedLight, rawLight; + int testx = this.pos.getX(); + int testy = this.pos.getY(); + int testz = this.pos.getZ(); + int x = testx - 64; + int y = testy - 64; + int z = testz - 64; + int value; + int xx, yy, zz, range; + LinkedList neighbours = new LinkedList<>(); + + while (i < index) + { + value = lightUpdateBlockList[i++]; + xx = (value & 127) + x; + yy = (value >> 7 & 127) + y; + zz = (value >> 14 & 127) + z; + blockpos = new BlockPos(xx, yy, zz); + savedLight = world.getLightFor(lightType, blockpos); + rawLight = this.getRawLight(blockpos, lightType); + + if (rawLight != savedLight) + { + this.setLightFor_preChecked(lightType, blockpos, rawLight); // <-------the + // light + // setting + if (world.isRemote) + world.notifyLightSet(blockpos); + + if (rawLight > savedLight) + { + range = MathHelper.abs(xx - testx) + MathHelper.abs(yy - testy) + MathHelper.abs(zz - testz); + if (range < 34 && index < SIZELIST - 6) + { + GCCoreUtil.getPositionsAdjoiningLoaded(xx, yy, zz, neighbours, world); + for (BlockPos vec : neighbours) + { + if (world.getLightFor(lightType, vec) < rawLight - 1) // -1 + // here + // because + // opacity + // can't + // be + // less + // than + // 1 + // in + // getRawLight + { + // Tack even more positions on to the end of the + // list - this propagates each time we find a + // light source block... including going back + // over old positions + lightUpdateBlockList[index++] = vec.getX() - x + ((vec.getZ() - z << 7) + vec.getY() - y << 7); + } + } + } + } + } else if (world.isRemote && savedLight != ((value >> 21) & 15)) + { + world.notifyLightSet(blockpos); + } + } + return true; + } + + /** + * From vanilla. This is buggy, gets confused if two low opacity blocks + * adjacent (e.g. redstone wire, stairs) if those blocks are receiving + * similar light levels from another source + */ + private int getRawLight(BlockPos pos, EnumSkyBlock lightType) + { + IBlockState bs = this.world.getBlockState(pos); + Block block = bs.getBlock(); + int blockLight = block.getLightValue(bs, this.world, pos); + int light = lightType == EnumSkyBlock.SKY ? 0 : blockLight; + + if (light < 14) + { + int opacity = block.getLightOpacity(bs, this.world, pos); + if (opacity < 1) + { + opacity = 1; + } else if (opacity >= 15) + { + if (blockLight > 0) + { + opacity = 1; + } else + { + return 0; + } + } + + for (BlockPos blockpos : GCCoreUtil.getPositionsAdjoining(pos)) + { + int neighbourLight = this.world.getLightFor(lightType, blockpos) - opacity; // Easily + // picks + // up + // neighbour + // lighting + // if + // opacity + // is + // low... + if (neighbourLight > light) + { + if (neighbourLight >= 14) + { + return neighbourLight; + } + light = neighbourLight; + } + } + } + + return light; + } + + private void setLightFor_preChecked(EnumSkyBlock type, BlockPos pos, int lightValue) + { + this.world.getChunk(pos.getX() >> 4, pos.getZ() >> 4).setLightFor(type, pos, lightValue); + } + + public boolean getEnabled() + { + return !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos()); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } + + private void checkedAdd(BlockVec3 vec) + { + int dx = this.pos.getX() - vec.x; + int dz = this.pos.getZ() - vec.z; + if (dx < -8191 || dx > 8192) + return; + if (dz < -8191 || dz > 8192) + return; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + bucket.add(vec.y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + /** + * Currently unused - the sided implementation is used instead + */ + private boolean checkedContains(BlockVec3 vec) + { + int dx = this.pos.getX() - vec.x; + int dz = this.pos.getZ() - vec.z; + if (dx < -8191 || dx > 8192) + return true; + if (dz < -8191 || dz > 8192) + return true; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + return bucket.contains(vec.y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + private boolean checkedContains(BlockVec3 vec, int side) + { + int y = vec.y; + int dx = this.pos.getX() - vec.x; + int dz = this.pos.getZ() - vec.z; + switch (side) + { + case 0: + y--; + if (y < 0) + return true; + break; + case 1: + y++; + if (y > 255) + return true; + break; + case 2: + dz++; + break; + case 3: + dz--; + break; + case 4: + dx++; + break; + case 5: + dx--; + } + if (dx < -8191 || dx > 8192) + return true; + if (dz < -8191 || dz > 8192) + return true; + intBucket bucket = buckets[((dx & 15) << 4) + (dz & 15)]; + return bucket.contains(y + ((dx & 0x3FF0) + ((dz & 0x3FF0) << 10) << 4)); + } + + private static void checkedInit(intBucket[] buckets) + { + for (int i = 0; i < 256; i++) + { + buckets[i] = new intBucket(); + } + } + + private void checkedClear() + { + for (int i = 0; i < 256; i++) + { + this.buckets[i].clear(); + } + } + + public static class intBucket + { + + private int maxSize = 12; // default size + private int size = 0; + private int[] table = new int[maxSize]; + + public void add(int i) + { + if (this.contains(i)) + return; + + if (size >= maxSize) + { + int[] newTable = new int[maxSize + maxSize]; + System.arraycopy(table, 0, newTable, 0, maxSize); + table = newTable; + maxSize += maxSize; + } + table[size] = i; + size++; + } + + public boolean contains(int test) + { + for (int i = size - 1; i >= 0; i--) + { + if (table[i] == test) + return true; + } + return false; + } + + public void clear() + { + size = 0; + } + + public int size() + { + return size; + } + + public int[] contents() + { + return table; + } + } + + @Override + public void buildDataPacket(int[] data) + { + data[0] = this.facing; + } + + @Override + public void updateClient(List data) + { + this.facing = (Integer) data.get(1); + this.revertAir(); + this.thisAABB = null; + this.ticks = 86; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + for (BlockVec3 vec : this.airToRestore) + { + sendData.add(vec); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + while (buffer.readableBytes() >= 12) + { + int x = buffer.readInt(); + int y = buffer.readInt(); + int z = buffer.readInt(); + this.airToRestore.add(new BlockVec3(x, y, z)); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFueler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFueler.java new file mode 100644 index 00000000..829b8d32 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFueler.java @@ -0,0 +1,258 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; + +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.entity.IFuelable; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; + +import com.google.common.base.Predicate; + +public class TileEntityBuggyFueler extends TileEntityMulti implements IMultiBlock, IFuelable, IFuelDock, ICargoEntity +{ + + public TileEntityBuggyFueler() + { + super(null); + } + + private IDockable dockedEntity; + private boolean initialised; + + @Override + public void update() + { + if (!this.initialised) + { + if (!this.world.isRemote) + this.onCreate(this.world, this.getPos()); + this.initialiseMultiTiles(this.getPos(), this.world); + this.initialised = true; + } + + if (!this.world.isRemote) + { + final List list = this.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(this.getPos().getX() - 1.5D, this.getPos().getY() - 2.0, this.getPos().getZ() - 1.5D, + this.getPos().getX() + 1.5D, this.getPos().getY() + 4.0, this.getPos().getZ() + 1.5D), (Predicate) input -> input instanceof IFuelable); + + boolean changed = false; + + for (final Object o : list) + { + if (o != null && o instanceof IDockable && !this.world.isRemote) + { + final IDockable fuelable = (IDockable) o; + + if (fuelable.isDockValid(this)) + { + this.dockedEntity = fuelable; + + this.dockedEntity.setPad(this); + + changed = true; + } + } + } + + if (!changed) + { + if (this.dockedEntity != null) + { + this.dockedEntity.setPad(null); + } + + this.dockedEntity = null; + } + } + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + + List positions = new ArrayList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.BUGGY_FUEL_PAD; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int y = placedPosition.getY(); + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + if (x == 0 && z == 0) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && (EnumBlockMultiType) stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.BUGGY_FUEL_PAD) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + + if (this.dockedEntity != null) + { + this.dockedEntity.onPadDestroyed(); + this.dockedEntity = null; + } + } + + @Override + public int addFuel(FluidStack liquid, boolean doFill) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.addFuel(liquid, doFill); + } + + return 0; + } + + @Override + public FluidStack removeFuel(int amount) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.removeFuel(amount); + } + + return null; + } + + @Override + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.addCargo(stack, doAdd); + } + + return EnumCargoLoadingState.NOTARGET; + } + + @Override + public RemovalResult removeCargo(boolean doRemove) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.removeCargo(doRemove); + } + + return new RemovalResult(EnumCargoLoadingState.NOTARGET, ItemStack.EMPTY); + } + + @Override + public HashSet getConnectedTiles() + { + HashSet connectedTiles = new HashSet(); + + for (int x = -2; x < 3; x++) + { + for (int z = -2; z < 3; z++) + { + if (x == -2 || x == 2 || z == -2 || z == 2) + { + if (Math.abs(x) != Math.abs(z)) + { + final TileEntity tile = this.world.getTileEntity(new BlockPos(this.getPos().getX() + x, this.getPos().getY(), this.getPos().getZ() + z)); + + if (tile != null && tile instanceof ILandingPadAttachable && ((ILandingPadAttachable) tile).canAttachToLandingPad(this.world, this.getPos())) + { + connectedTiles.add((ILandingPadAttachable) tile); + } + } + } + } + } + + return connectedTiles; + } + + @Override + public boolean isBlockAttachable(IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile != null && tile instanceof ILandingPadAttachable) + { + return ((ILandingPadAttachable) tile).canAttachToLandingPad(world, this.getPos()); + } + + return false; + } + + @Override + public IDockable getDockedEntity() + { + return this.dockedEntity; + } + + @Override + public void dockEntity(IDockable entity) + { + this.dockedEntity = entity; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFuelerSingle.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFuelerSingle.java new file mode 100644 index 00000000..45752cbb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityBuggyFuelerSingle.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPadFull; + +public class TileEntityBuggyFuelerSingle extends TileEntity implements ITickable +{ + + private int corner = 0; + + @Override + public void update() + { + if (!this.world.isRemote && this.corner == 0) + { + final ArrayList attachedLaunchPads = new ArrayList(); + + for (int x = this.getPos().getX() - 1; x < this.getPos().getX() + 2; x++) + { + for (int z = this.getPos().getZ() - 1; z < this.getPos().getZ() + 2; z++) + { + final TileEntity tile = this.world.getTileEntity(new BlockPos(x, this.getPos().getY(), z)); + + if (tile instanceof TileEntityBuggyFuelerSingle && !tile.isInvalid() && ((TileEntityBuggyFuelerSingle) tile).corner == 0) + { + attachedLaunchPads.add(tile); + } + } + } + + if (attachedLaunchPads.size() == 9) + { + for (final TileEntity tile : attachedLaunchPads) + { + this.world.markTileEntityForRemoval(tile); + ((TileEntityBuggyFuelerSingle) tile).corner = 1; + } + + this.world.setBlockState(this.getPos(), GCBlocks.landingPadFull.getStateFromMeta(BlockLandingPadFull.EnumLandingPadFullType.BUGGY_PAD.getMeta()), 2); + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoLoader.java new file mode 100644 index 00000000..19b491b9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoLoader.java @@ -0,0 +1,345 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity.EnumCargoLoadingState; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity.RemovalResult; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.api.tile.ILockable; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.blocks.BlockCargoLoader; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class TileEntityCargoLoader extends TileBaseElectricBlockWithInventory implements ISidedInventory, ILandingPadAttachable, ILockable +{ + + public boolean outOfItems; + @NetworkedField(targetSide = Side.CLIENT) public boolean targetFull; + @NetworkedField(targetSide = Side.CLIENT) public boolean targetNoInventory; + @NetworkedField(targetSide = Side.CLIENT) public boolean noTarget; + @NetworkedField(targetSide = Side.CLIENT) public boolean locked; + + public ICargoEntity attachedFuelable; + + public TileEntityCargoLoader() + { + super("container.cargoloader.name"); + this.storage.setMaxExtract(45); + this.inventory = NonNullList.withSize(15, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.getWorld().isRemote) + { + if (this.ticks % 100 == 0) + { + this.checkForCargoEntity(); + } + + if (this.attachedFuelable != null) + { + this.noTarget = false; + ItemStack stack = this.removeCargo(false).resultStack; + + if (!stack.isEmpty()) + { + this.outOfItems = false; + + EnumCargoLoadingState state = this.attachedFuelable.addCargo(stack, false); + + this.targetFull = state == EnumCargoLoadingState.FULL; + this.targetNoInventory = state == EnumCargoLoadingState.NOINVENTORY; + this.noTarget = state == EnumCargoLoadingState.NOTARGET; + + if (this.ticks % (this.poweredByTierGC > 1 ? 9 : 15) == 0 && state == EnumCargoLoadingState.SUCCESS && !this.disabled && this.hasEnoughEnergyToRun) + { + this.attachedFuelable.addCargo(this.removeCargo(true).resultStack, true); + } + } else + { + this.outOfItems = true; + } + } else + { + this.noTarget = true; + } + } + } + + public void checkForCargoEntity() + { + boolean foundFuelable = false; + + BlockVec3 thisVec = new BlockVec3(this); + for (final EnumFacing dir : EnumFacing.VALUES) + { + final TileEntity pad = thisVec.getTileEntityOnSide(this.getWorld(), dir); + + if (pad != null && pad instanceof TileEntityMulti) + { + final TileEntity mainTile = ((TileEntityMulti) pad).getMainBlockTile(); + + if (mainTile instanceof ICargoEntity) + { + this.attachedFuelable = (ICargoEntity) mainTile; + foundFuelable = true; + break; + } + } else if (pad != null && pad instanceof ICargoEntity) + { + this.attachedFuelable = (ICargoEntity) pad; + foundFuelable = true; + break; + } + } + + if (!foundFuelable) + { + this.attachedFuelable = null; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.locked = nbt.getBoolean("locked"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("locked", this.locked); + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return side != this.getElectricInputDirection() ? new int[] + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14} : new int[] + {}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (side != this.getElectricInputDirection()) + { + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } else + { + return true; + } + } + + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } else + { + return true; + } + } + + @Override + public boolean shouldUseEnergy() + { + return !this.getDisabled(0); + } + + public RemovalResult removeCargo(boolean doRemove) + { + for (int i = 1; i < this.getInventory().size(); i++) + { + ItemStack stackAt = this.getInventory().get(i); + + if (!stackAt.isEmpty()) + { + ItemStack resultStack = stackAt.copy(); + resultStack.setCount(1); + + if (doRemove) + { + stackAt.shrink(1); + if (stackAt.isEmpty()) + { + this.getInventory().set(i, ItemStack.EMPTY); + } + } + + if (doRemove) + { + this.markDirty(); + } + + return new RemovalResult(EnumCargoLoadingState.SUCCESS, resultStack); + } + } + + return new RemovalResult(EnumCargoLoadingState.EMPTY, ItemStack.EMPTY); + } + + // Used by Abandoned Base worldgen + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + int count = 1; + + for (count = 1; count < this.getInventory().size(); count++) + { + ItemStack stackAt = this.getInventory().get(count); + + if (RecipeUtil.stacksMatch(stack, stackAt) && stackAt.getCount() < stackAt.getMaxStackSize()) + { + if (stackAt.getCount() + stack.getCount() <= stackAt.getMaxStackSize()) + { + if (doAdd) + { + stackAt.grow(stack.getCount()); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } else + { + // Part of the stack can fill this slot but there will be + // some left over + int origSize = stackAt.getCount(); + int surplus = origSize + stack.getCount() - stackAt.getMaxStackSize(); + + if (doAdd) + { + stackAt.setCount(stackAt.getMaxStackSize()); + this.markDirty(); + } + + stack.setCount(surplus); + if (this.addCargo(stack, doAdd) == EnumCargoLoadingState.SUCCESS) + { + return EnumCargoLoadingState.SUCCESS; + } + + stackAt.setCount(origSize); + return EnumCargoLoadingState.FULL; + } + } + } + + int size = this.getInventory().size(); + for (count = 1; count < size; count++) + { + ItemStack stackAt = this.getInventory().get(count); + + if (stackAt.isEmpty()) + { + if (doAdd) + { + this.getInventory().set(count, stack); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + } + + return EnumCargoLoadingState.FULL; + } + + @Override + public boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockCargoLoader) + { + return (state.getValue(BlockCargoLoader.FACING)); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public void clearLockedInventory() + { + for (int i = 1; i < 15; i++) + { + this.getInventory().set(i, ItemStack.EMPTY); + } + } + + @Override + public boolean getLocked() + { + return this.locked; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoUnloader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoUnloader.java new file mode 100644 index 00000000..1661437b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCargoUnloader.java @@ -0,0 +1,277 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity.EnumCargoLoadingState; +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity.RemovalResult; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.blocks.BlockCargoLoader; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class TileEntityCargoUnloader extends TileBaseElectricBlockWithInventory implements ILandingPadAttachable +{ + + @NetworkedField(targetSide = Side.CLIENT) public boolean targetEmpty; + @NetworkedField(targetSide = Side.CLIENT) public boolean targetNoInventory; + @NetworkedField(targetSide = Side.CLIENT) public boolean noTarget; + + public ICargoEntity attachedFuelable; + + public TileEntityCargoUnloader() + { + super("container.cargounloader.name"); + this.storage.setMaxExtract(45); + this.inventory = NonNullList.withSize(15, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + if (this.ticks % 100 == 0) + { + this.checkForCargoEntity(); + } + + if (this.attachedFuelable != null) + { + this.noTarget = false; + RemovalResult result = this.attachedFuelable.removeCargo(false); + + if (!result.resultStack.isEmpty()) + { + this.targetEmpty = false; + + EnumCargoLoadingState state = this.addCargo(result.resultStack, false); + + this.targetEmpty = state == EnumCargoLoadingState.EMPTY; + + if (this.ticks % (this.poweredByTierGC > 1 ? 9 : 15) == 0 && state == EnumCargoLoadingState.SUCCESS && !this.disabled && this.hasEnoughEnergyToRun) + { + this.addCargo(this.attachedFuelable.removeCargo(true).resultStack, true); + } + } else + { + this.targetNoInventory = result.resultState == EnumCargoLoadingState.NOINVENTORY; + this.noTarget = result.resultState == EnumCargoLoadingState.NOTARGET; + this.targetEmpty = true; + } + } else + { + this.noTarget = true; + } + } + } + + public void checkForCargoEntity() + { + boolean foundFuelable = false; + + BlockVec3 thisVec = new BlockVec3(this); + for (final EnumFacing dir : EnumFacing.VALUES) + { + final TileEntity pad = thisVec.getTileEntityOnSide(this.world, dir); + + if (pad != null && pad instanceof TileEntityMulti) + { + final TileEntity mainTile = ((TileEntityMulti) pad).getMainBlockTile(); + + if (mainTile instanceof ICargoEntity) + { + this.attachedFuelable = (ICargoEntity) mainTile; + foundFuelable = true; + break; + } + } else if (pad != null && pad instanceof ICargoEntity) + { + this.attachedFuelable = (ICargoEntity) pad; + foundFuelable = true; + break; + } + } + + if (!foundFuelable) + { + this.attachedFuelable = null; + } + } + + @Override + public boolean hasCustomName() + { + return false; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return side != this.getElectricInputDirection() ? new int[] + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14} : new int[] + {}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (side != this.getElectricInputDirection()) + { + if (slotID == 0) + { + return ItemElectricBase.isElectricItemEmpty(itemstack); + } else + { + return true; + } + } + + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } else + { + return true; + } + } + + @Override + public boolean shouldUseEnergy() + { + return !this.getDisabled(0); + } + + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + int count = 1; + + for (count = 1; count < this.getInventory().size(); count++) + { + ItemStack stackAt = this.getInventory().get(count); + + if (RecipeUtil.stacksMatch(stack, stackAt) && stackAt.getCount() < stackAt.getMaxStackSize()) + { + if (stackAt.getCount() + stack.getCount() <= stackAt.getMaxStackSize()) + { + if (doAdd) + { + stackAt.grow(stack.getCount()); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } else + { + // Part of the stack can fill this slot but there will be + // some left over + int origSize = stackAt.getCount(); + int surplus = origSize + stack.getCount() - stackAt.getMaxStackSize(); + + if (doAdd) + { + stackAt.setCount(stackAt.getMaxStackSize()); + this.markDirty(); + } + + stack.setCount(surplus); + if (this.addCargo(stack, doAdd) == EnumCargoLoadingState.SUCCESS) + { + return EnumCargoLoadingState.SUCCESS; + } + + stackAt.setCount(origSize); + return EnumCargoLoadingState.FULL; + } + } + } + + int size = this.getInventory().size(); + for (count = 1; count < size; count++) + { + ItemStack stackAt = this.getInventory().get(count); + + if (stackAt.isEmpty()) + { + if (doAdd) + { + this.getInventory().set(count, stack); + this.markDirty(); + } + + return EnumCargoLoadingState.SUCCESS; + } + } + + return EnumCargoLoadingState.FULL; + } + + @Override + public boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockCargoLoader) + { + return (state.getValue(BlockCargoLoader.FACING)); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCircuitFabricator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCircuitFabricator.java new file mode 100644 index 00000000..056456a9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCircuitFabricator.java @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; + +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.items.ItemBasic; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityCircuitFabricator extends TileBaseElectricBlockWithInventory implements ISidedInventory, IMachineSides +{ + + public static final int PROCESS_TIME_REQUIRED = 300; + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + private ItemStack producingStack = ItemStack.EMPTY; + private long ticks; + + public TileEntityCircuitFabricator() + { + super("tile.machine2.5.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 40 : 20); + this.inventory = NonNullList.withSize(7, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + this.updateInput(); + + if (!this.world.isRemote) + { + boolean updateInv = false; + + if (this.hasEnoughEnergyToRun) + { + if (this.canCompress()) + { + ++this.processTicks; + + if (this.processTicks >= this.getProcessTimeRequired()) + { + this.world.playSound(null, this.getPos(), SoundEvents.BLOCK_ANVIL_LAND, SoundCategory.BLOCKS, 0.3F, this.world.rand.nextFloat() * 0.1F + 0.9F); + this.processTicks = 0; + this.compressItems(); + updateInv = true; + } + } else + { + this.processTicks = 0; + } + } else + { + this.processTicks = 0; + } + + if (updateInv) + { + this.markDirty(); + } + } + + this.ticks++; + } + + public int getProcessTimeRequired() + { + return TileEntityCircuitFabricator.PROCESS_TIME_REQUIRED * 2 / (1 + this.poweredByTierGC); + } + + public void updateInput() + { + this.producingStack = CircuitFabricatorRecipes.getOutputForInput(this.getInventory().subList(1, 6)); + } + + private boolean canCompress() + { + if (this.producingStack.isEmpty()) + { + return false; + } + if (this.getInventory().get(6).isEmpty()) + { + return true; + } + if (!this.getInventory().get(6).isEmpty() && !this.getInventory().get(6).isItemEqual(this.producingStack)) + { + return false; + } + int result = this.getInventory().get(6).isEmpty() ? 0 : this.getInventory().get(6).getCount() + this.producingStack.getCount(); + return result <= this.getInventoryStackLimit() && result <= this.producingStack.getMaxStackSize(); + } + + public void compressItems() + { + if (this.canCompress()) + { + ItemStack resultItemStack = this.producingStack.copy(); + if (this.world.provider instanceof IZeroGDimension) + { + if (resultItemStack.getItem() == GCItems.basicItem) + { + if (resultItemStack.getItemDamage() == ItemBasic.WAFER_BASIC) + { + resultItemStack.setCount(5); + } else if (resultItemStack.getItemDamage() == 12) // Solar + // panels + { + resultItemStack.setCount(15); + } else + { + resultItemStack.setCount(resultItemStack.getCount() * 2); + } + } + } + + if (this.getInventory().get(6).isEmpty()) + { + this.getInventory().set(6, resultItemStack); + } else if (this.getInventory().get(6).isItemEqual(resultItemStack)) + { + if (this.getInventory().get(6).getCount() + resultItemStack.getCount() > 64) + { + resultItemStack.setCount(this.getInventory().get(6).getCount() + resultItemStack.getCount() - 64); + GCCoreUtil.spawnItem(this.world, this.getPos(), resultItemStack); + this.getInventory().get(6).setCount(64); + } else + { + this.getInventory().get(6).grow(resultItemStack.getCount()); + } + } + } + + for (int i = 1; i < 6; i++) + { + this.decrStackSize(i, 1); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + return nbt; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (slotID == 0) + { + return itemStack != null && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + if (slotID > 5) + { + return false; + } + + ArrayList list = CircuitFabricatorRecipes.slotValidItems.get(slotID - 1); + + for (ItemStack test : list) + { + if (test.isItemEqual(itemStack)) + { + return true; + } + } + + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return new int[] + {6}; + } + + // Offer whichever silicon slot has less silicon + boolean siliconFlag = !this.getInventory().get(2).isEmpty() && (this.getInventory().get(3).isEmpty() || this.getInventory().get(3).getCount() < this.getInventory().get(2).getCount()); + return siliconFlag ? new int[] + {0, 1, 3, 4, 5} : new int[] + {0, 1, 2, 4, 5}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID < 6 && this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 6; + } + + @Override + public boolean shouldUseEnergy() + { + return this.processTicks > 0; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachine2.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCoalGenerator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCoalGenerator.java new file mode 100644 index 00000000..a0d6372b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCoalGenerator.java @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.util.ItemUtil; + +public class TileEntityCoalGenerator extends TileBaseUniversalElectricalSource implements IInventoryDefaults, ISidedInventory, IConnector +{ + private final int dustCoalCookTime = 220; + private final int itemCoalCookTime = 320; + private final int blockCoalCookTime = 3200; + // + private final int dustCharcoalCookTime = 120; + private final int itemCharcoalCookTime = 160; + private final int blockCharcoalCookTime = 1600; + // New energy rates: + // + // Tier 1 machine typically consumes 600 gJ/s = 30 gJ/t + // Coal generator on max heat can power up to 4 Tier 1 machines + // (fewer if one of them is an Electric Furnace) + // Basic solar gen in full sun can power 1 Tier 1 machine + // 1 lump of coal is equivalent to 38400 gJ + // because on max heat it produces 120 gJ/t over 320 ticks + // Below the min_generate, all heat is wasted + // At max generate, 100% efficient conversion coal energy -> electric makes + // 120 gJ/t + public static final int MAX_GENERATE_GJ_PER_TICK = 150; + public static final int MIN_GENERATE_GJ_PER_TICK = 30; + private static final float BASE_ACCELERATION = 0.3f; + public float prevGenerateWatts = 0; + @NetworkedField(targetSide = Side.CLIENT) + public float heatGJperTick = 0; + @NetworkedField(targetSide = Side.CLIENT) + public int itemCookTime = 0; + + public TileEntityCoalGenerator() + { + super("tile.machine.0.name"); + this.storage.setMaxExtract(TileEntityCoalGenerator.MAX_GENERATE_GJ_PER_TICK - TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK); + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.world.isRemote && this.heatGJperTick - TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK > 0) + { + this.receiveEnergyGC(null, (this.heatGJperTick - TileEntityCoalGenerator.MIN_GENERATE_GJ_PER_TICK), false); + } + super.update(); + if (!this.world.isRemote) + { + if (this.itemCookTime > 0) + { + this.itemCookTime--; + this.heatGJperTick = Math.min(this.heatGJperTick + Math.max(this.heatGJperTick * 0.005F, TileEntityCoalGenerator.BASE_ACCELERATION), TileEntityCoalGenerator.MAX_GENERATE_GJ_PER_TICK); + } + if (this.itemCookTime <= 0 && !this.getInventory().get(0).isEmpty()) + { + ItemStack stack = this.getInventory().get(0); + if (stack.getCount() > 0) + { + if (ItemUtil.hasOreDictSuffix(stack, "charcoal")) + { + if (ItemUtil.isBlock(stack)) + { + this.handleFuel(blockCharcoalCookTime); + } else if (ItemUtil.isDust(stack)) + { + this.handleFuel(dustCharcoalCookTime); + } else + { + this.handleFuel(itemCharcoalCookTime); + } + } else if (ItemUtil.hasOreDictSuffix(stack, "coal")) + { + if (ItemUtil.isBlock(stack)) + { + this.handleFuel(blockCoalCookTime); + } else if (ItemUtil.isDust(stack)) + { + this.handleFuel(dustCoalCookTime); + } else + { + this.handleFuel(itemCoalCookTime); + } + } else + { + if (stack.getItem() == Items.COAL) + { + this.itemCookTime = 320; + this.decrStackSize(0, 1); + } else if (stack.getItem() == Item.getItemFromBlock(Blocks.COAL_BLOCK) && stack.getCount() > 0) + { + this.itemCookTime = 320 * 10; + this.decrStackSize(0, 1); + } + } + } + } + this.produce(); + if (this.itemCookTime <= 0) + { + this.heatGJperTick = Math.max(this.heatGJperTick - 0.3F, 0); + } + this.heatGJperTick = Math.min(Math.max(this.heatGJperTick, 0.0F), this.getMaxEnergyStoredGC()); + } + } + + private void handleFuel(int cookTime) + { + this.itemCookTime = cookTime; + this.decrStackSize(0, 1); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.itemCookTime = nbt.getInteger("itemCookTime"); + this.heatGJperTick = nbt.getInteger("generateRateInt"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("itemCookTime", this.itemCookTime); + nbt.setFloat("generateRate", this.heatGJperTick); + return nbt; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + // if (itemstack.getItem() != Items.COAL || itemstack.getItem() != Item.getItemFromBlock(Blocks.COAL_BLOCK)) + // { + // return ItemUtil.hasOreDictSuffix(itemstack, "coal") || ItemUtil.hasOreDictSuffix(itemstack, "charcoal"); + // } else + // { + // return itemstack.getItem() == Item.getItemFromBlock(Blocks.COAL_BLOCK); + // } + return true; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing direction) + { + return slotID == 0; + } + + @Override + public float receiveElectricity(EnumFacing from, float energy, int tier, boolean doReceive) + { + return 0; + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(this.getElectricOutputDirection()); + } + + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricOutputDirection() + { + return byIndex().rotateY(); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + return direction == this.getElectricOutputDirection(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCompactNasaWorkbench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCompactNasaWorkbench.java new file mode 100644 index 00000000..923ec659 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCompactNasaWorkbench.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; + +public class TileEntityCompactNasaWorkbench extends TileEntity +{ + + public TileEntityCompactNasaWorkbench() + { + } + + public boolean onActivated(EntityPlayer entityPlayer) + { + entityPlayer.openGui(GalacticraftCore.instance, GuiIdsCore.NASA_WORKBENCH_ROCKET, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCrafting.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCrafting.java new file mode 100644 index 00000000..5f68db10 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityCrafting.java @@ -0,0 +1,611 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Random; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.inventory.PersistantInventoryCrafting; +import micdoodle8.mods.galacticraft.core.network.PacketDynamicInventory; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; + +public class TileEntityCrafting extends TileEntity implements IInventoryDefaults, ISidedInventory, IInventorySettable +{ + + private static final int SIZEINVENTORY = 9; + public PersistantInventoryCrafting craftMatrix = new PersistantInventoryCrafting(); + public NonNullList memory = NonNullList.withSize(SIZEINVENTORY, ItemStack.EMPTY); + private ItemStack hiddenOutputBuffer = ItemStack.EMPTY; // Used for + // Buildcraft pipes + // and other + // inventory-slot + // setters which do + // not fully clear + // the results slot + // - see + // setInventorySlotContents() + private Boolean overriddenStatus; + private ItemStack memoryResult; + + public TileEntityCrafting() + { + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request size + contents information from server + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamicInventory(this)); + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } + + public void updateMemory(ItemStack craftingResult) + { + if (CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()) == ItemStack.EMPTY) + return; + this.setMemoryHeld(craftingResult); + for (int i = 0; i < SIZEINVENTORY; i++) + { + ItemStack stack = this.craftMatrix.getStackInSlot(i); + if (stack.isEmpty()) + { + this.memory.set(i, ItemStack.EMPTY); + } else + { + ItemStack stack2 = stack.copy(); + stack2.setCount(1); + this.memory.set(i, stack2.copy()); + } + } + } + + public ItemStack getMemory(int i) + { + return this.memory.get(i); + } + + @Override + public int getSizeInventory() + { + return SIZEINVENTORY; + } + + @Override + public ItemStack getStackInSlot(int par1) + { + if (par1 < SIZEINVENTORY) + return this.craftMatrix.getStackInSlot(par1); + + // Results slot + // First, try to clear the hidden output buffer before generating new + // results items + if (!this.hiddenOutputBuffer.isEmpty()) + { + return this.hiddenOutputBuffer; + } + + // Crafting Manager can produce concurrent modification exception in + // single player + // if a server-side tick (e.g. from a Hopper) calls this while + // client-side is still initialising recipes + try + { + return CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()); + } catch (Exception ignore) + { + } + return ItemStack.EMPTY; + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (par1 >= 0 && par1 < SIZEINVENTORY) + { + ItemStack result = this.craftMatrix.decrStackSize(par1, par2); + this.markDirty(); + this.updateOverriddenStatus(); + return result; + } else if (par1 == SIZEINVENTORY) + { + if (!this.hiddenOutputBuffer.isEmpty()) + { + return this.hiddenOutputBuffer.splitStack(par2); + } + if (this.stillMatchesRecipe()) + { + ItemStack craftingResult = CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()); + if (!craftingResult.isEmpty()) + { + this.pullOneResultStack(); + this.markDirty(); + this.updateOverriddenStatus(); + ItemStack result = craftingResult.splitStack(par2); + this.hiddenOutputBuffer = craftingResult; // save any + // balance + return result; + } + } + } + return ItemStack.EMPTY; + } + + private void pullOneResultStack() + { +// Thread.dumpStack(); + NonNullList aitemstack = CraftingManager.getRemainingItems(this.craftMatrix, this.world); + + for (int i = 0; i < aitemstack.size(); ++i) + { + ItemStack itemstack = this.craftMatrix.getStackInSlot(i); + ItemStack itemstack1 = aitemstack.get(i); + + if (!itemstack.isEmpty()) + { + this.craftMatrix.decrStackSize(i, 1); + } + + if (!itemstack1.isEmpty()) + { + if (this.craftMatrix.getStackInSlot(i).isEmpty()) + { + this.craftMatrix.setInventorySlotContents(i, itemstack1); + } else + { + // TODO - things like buckets which can't go back into this + // - drop? + } + } + } + } + + protected boolean stillMatchesRecipe() + { + int emptyCount = 0; + for (int i = 0; i < SIZEINVENTORY; i++) + { + ItemStack stack = this.craftMatrix.getStackInSlot(i); + ItemStack targetOther = this.memory.get(i); + if (targetOther.isEmpty() && stack.isEmpty()) + continue; + + if (targetOther.isEmpty() || stack.isEmpty() || !sameItem(targetOther, stack)) + { + return false; + } + } + return emptyCount < SIZEINVENTORY; + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.memory) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (par1 >= 0) + { + this.markDirty(); + this.updateOverriddenStatus(); + return this.craftMatrix.removeStackFromSlot(par1); + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public void setInventorySlotContents(int par1, ItemStack stack) + { + if (par1 >= 0 && par1 < SIZEINVENTORY) + { + this.craftMatrix.setInventorySlotContents(par1, stack); + } else if (par1 == SIZEINVENTORY) + { + if (stack.isEmpty()) + { + if (this.hiddenOutputBuffer.isEmpty()) + { + // Standard behaviour: hiddenOutputBuffer not in use + this.craftOutput(); + } + } else + // Buildcraft pipes and some other extractors may not fully clear + // the results slot, but instead set it to partial contents + { + if (!stack.isItemEqual(this.hiddenOutputBuffer)) // also true if + // hiddenOutputBuffer + // is empty, + // e.g. craft 9 + // new items + // and pipe + // takes 4, + // setting + // output stack + // to 5 items + { + this.dropHiddenOutputBuffer(this.world, this.pos); + this.craftOutput(); + } + } + this.hiddenOutputBuffer = stack; + } + this.markDirty(); + this.updateOverriddenStatus(); + } + + private void craftOutput() + { + if (this.stillMatchesRecipe()) + { + ItemStack craftingResult = CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()); + if (!craftingResult.isEmpty()) + { + this.pullOneResultStack(); + } + } + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.magneticcrafting.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.craftMatrix.clear(); + for (int i = 0; i < SIZEINVENTORY; ++i) + this.memory.set(i, ItemStack.EMPTY); + NBTTagList contents = nbt.getTagList("Items", 10); + if (contents != null && contents.tagCount() > 0) + { + for (int i = 0; i < contents.tagCount(); ++i) + { + NBTTagCompound var4 = contents.getCompoundTagAt(i); + int slot = var4.getByte("Slot") & 255; + + if (slot < SIZEINVENTORY) + { + this.craftMatrix.setInventorySlotContents(slot, new ItemStack(var4)); + } else if (slot < 18) + { + this.memory.set(slot - SIZEINVENTORY, new ItemStack(var4)); + } + } + } + NBTTagCompound buffer = nbt.getCompoundTag("buf"); + this.hiddenOutputBuffer = new ItemStack(buffer); + this.updateMemoryItem(); + } + this.updateOverriddenStatus(); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + NBTTagList var2 = new NBTTagList(); + for (int i = 0; i < SIZEINVENTORY; ++i) + { + if (!this.craftMatrix.getStackInSlot(i).isEmpty()) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte) (i)); + this.craftMatrix.getStackInSlot(i).writeToNBT(var4); + var2.appendTag(var4); + } + } + for (int i = 0; i < SIZEINVENTORY; ++i) + { + if (!this.memory.get(i).isEmpty()) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte) (i + SIZEINVENTORY)); + this.memory.get(i).writeToNBT(var4); + var2.appendTag(var4); + } + } + + nbt.setTag("Items", var2); + NBTTagCompound buffer = new NBTTagCompound(); + this.hiddenOutputBuffer.writeToNBT(buffer); + nbt.setTag("buf", buffer); + return nbt; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer player) + { + return this.world.getTileEntity(this.getPos()) == this && player.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + + @Override + public boolean isItemValidForSlot(int par1, ItemStack par2ItemStack) + { + return true; + } + + @Override + public void invalidate() + { + super.invalidate(); + this.updateContainingBlockInfo(); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + } + + @Override + public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction) + { + if (index >= SIZEINVENTORY || stack.isEmpty()) + return false; + boolean override = this.overriddenMemory(); + ItemStack target = override ? this.craftMatrix.getStackInSlot(index) : this.memory.get(index); + + if (!target.isEmpty() && sameItem(target, stack)) + { + ItemStack is3 = this.getStackInSlot(index); + if (is3.isEmpty()) + return true; + int currentSize = is3.getCount(); + + // If any other slot matching this item has a smaller stacksize, + // return false (and hopefully that slot will be filled instead) + for (int i = 0; i < SIZEINVENTORY; i++) + { + if (i == index) + continue; + ItemStack targetOther = override ? this.craftMatrix.getStackInSlot(i) : this.memory.get(i); + + // It's another memory slot matching this item, and may be a + // more suitable recipient if the stack count is lower + if (!targetOther.isEmpty() && sameItem(targetOther, stack)) + { + ItemStack itemstack2; + if (override) + { + itemstack2 = targetOther; // Performance shortcut as we + // already know that + // targetOther is not empty + } else + { + itemstack2 = this.craftMatrix.getStackInSlot(i); + if (itemstack2.isEmpty()) + return false; // A totally empty slot in the recipe + // needs this item + } + + if (override || sameItem(stack, itemstack2)) + { + if (itemstack2.getCount() < currentSize) + return false; // A less well-filled slot in the + // recipe needs this item + } + } + } + + return true; + } + return false; + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return index == SIZEINVENTORY && (!this.hiddenOutputBuffer.isEmpty() || this.stillMatchesRecipe()); + } + + /** + * Does not include a null check, do a null check first + */ + private boolean sameItem(ItemStack target, ItemStack stack) + { + return target.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == target.getMetadata()) && RecipeUtil.areItemStackTagsEqual(stack, target); + } + + public boolean overrideMemory(ItemStack itemstack1, NonNullList memory2) + { + boolean allEmpty = true; + for (int i = 0; i < 9; i++) + { + if (!this.craftMatrix.getStackInSlot(i).isEmpty()) + { + allEmpty = false; + break; + } + } + if (allEmpty) + return false; + if (!CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()).isEmpty()) + { + // Valid recipe on the table. Does it fuzzy match this tile's memory + // (empty slots which should have recipe components are OK) + boolean fuzzyMatch = true; + for (int i = 0; i < 9; i++) + { + if (!this.craftMatrix.getStackInSlot(i).isEmpty() && !matchingStacks(this.craftMatrix.getStackInSlot(i), this.getMemory(i))) + { + fuzzyMatch = false; + break; + } + } + + // If it's a valid recipe and CAN'T match the memory, then override + // the remembered recipe + if (!fuzzyMatch) + { + for (int i = 0; i < 9; i++) + { + if (matchingStacks(itemstack1, this.craftMatrix.getStackInSlot(i))) + { + for (int j = 0; j < 9; j++) + { + memory2.set(j, this.craftMatrix.getStackInSlot(j).copy()); + } + return true; + } + } + } + } + return false; + } + + public boolean overriddenMemory() + { + if (this.overriddenStatus != null) + return this.overriddenStatus; + if (!CraftingManager.findMatchingResult(this.craftMatrix, this.getWorld()).isEmpty()) + { + // Valid recipe on the table. Does it fuzzy match this tile's memory + // (empty slots which should have recipe components are OK) + for (int i = 0; i < 9; i++) + { + if (!this.craftMatrix.getStackInSlot(i).isEmpty() && !matchingStacks(this.craftMatrix.getStackInSlot(i), this.getMemory(i))) + { + this.overriddenStatus = true; + return true; + } + } + } + this.overriddenStatus = false; + return false; + } + + private void updateOverriddenStatus() + { + this.overriddenStatus = null; + } + + private boolean matchingStacks(ItemStack stack, ItemStack target) + { + return !target.isEmpty() && target.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == target.getMetadata()) && RecipeUtil.areItemStackTagsEqual(stack, target) + && target.isStackable() && target.getCount() < target.getMaxStackSize(); + } + + public void dropHiddenOutputBuffer(World worldIn, BlockPos pos) + { + ItemStack var7 = this.hiddenOutputBuffer; + + if (var7 != null && !var7.isEmpty()) + { + Random syncRandom = GCCoreUtil.getRandom(pos); + + float var8 = syncRandom.nextFloat() * 0.8F + 0.1F; + float var9 = syncRandom.nextFloat() * 0.8F + 0.1F; + float var10 = syncRandom.nextFloat() * 0.8F + 0.1F; + + while (!var7.isEmpty()) + { + EntityItem var12 = new EntityItem(worldIn, pos.getX() + var8, pos.getY() + var9, pos.getZ() + var10, var7.splitStack(syncRandom.nextInt(21) + 10)); + float var13 = 0.05F; + var12.motionX = (float) syncRandom.nextGaussian() * var13; + var12.motionY = (float) syncRandom.nextGaussian() * var13 + 0.2F; + var12.motionZ = (float) syncRandom.nextGaussian() * var13; + worldIn.spawnEntity(var12); + } + } + } + + public void setMemoryHeld(ItemStack stack) + { + this.memoryResult = stack.copy(); + } + + public ItemStack getMemoryHeld() + { + return this.memoryResult == null ? ItemStack.EMPTY : this.memoryResult; + } + + private void updateMemoryItem() + { + PersistantInventoryCrafting memCopy = new PersistantInventoryCrafting(); + for (int i = 0; i < SIZEINVENTORY; i++) + { + memCopy.setInventorySlotContents(i, this.getMemory(i)); + } + ItemStack stack = CraftingManager.findMatchingResult(memCopy, this.getWorld()); + if (!stack.isEmpty()) + this.setMemoryHeld(stack); + } + + public void setStacksClientSide(ItemStack[] stacks) + { + for (int i = 0; i < SIZEINVENTORY; i++) + { + this.setInventorySlotContents(i, stacks[i]); + } + if (stacks.length > SIZEINVENTORY) + this.setMemoryHeld(stacks[SIZEINVENTORY]); + } + + @Override + public void setSizeInventory(int size) + { + // Intentionally no operation + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDeconstructor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDeconstructor.java new file mode 100644 index 00000000..ccf3f51a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDeconstructor.java @@ -0,0 +1,594 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; + +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; + +public class TileEntityDeconstructor extends TileBaseElectricBlock implements IInventoryDefaults, ISidedInventory, IMachineSides +{ + + public static final float SALVAGE_CHANCE = 0.75F; + public static final int PROCESS_TIME_REQUIRED_BASE = 250; + public int processTimeRequired = PROCESS_TIME_REQUIRED_BASE; + @NetworkedField(targetSide = Side.CLIENT) + public int processTicks = 0; + private ItemStack producingStack = ItemStack.EMPTY; + private long ticks; + + public static List salvageable = new LinkedList<>(); + public static List knownRecipes = new LinkedList<>(); + private int recursiveCount; + + static + { + initialiseItemList(); + } + + private static void initialiseItemList() + { + addSalvage(new ItemStack(AsteroidsItems.basicItem, 1, 5)); // T3 plate + addSalvage(new ItemStack(AsteroidsItems.basicItem, 1, 6)); // Compressed titanium + addSalvage(new ItemStack(AsteroidsItems.basicItem, 1, 0)); // Titanium ingot + addSalvage(new ItemStack(MarsItems.marsItemBasic, 1, 3)); // T2 plate + addSalvage(new ItemStack(MarsItems.marsItemBasic, 1, 5)); // Compressed desh + addSalvage(new ItemStack(MarsItems.marsItemBasic, 1, 2)); // Desh ingot + addSalvage(new ItemStack(GCItems.flagPole)); + addSalvage(new ItemStack(GCItems.heavyPlatingTier1)); + addSalvage(new ItemStack(GCItems.itemBasicMoon, 1, 1)); // Compressed meteoric iron + addSalvage(new ItemStack(GCItems.itemBasicMoon, 1, 0)); // Meteoric iron ingot + addSalvage(new ItemStack(GCItems.basicItem, 1, 9)); // Compressed steel + addSalvage(new ItemStack(GCItems.basicItem, 1, 10)); // Compressed bronze + addSalvage(new ItemStack(GCItems.basicItem, 1, 6)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 7)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 8)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 11)); // Compressed iron + addSalvage(new ItemStack(GCItems.basicItem, 1, 3)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 4)); + addSalvage(new ItemStack(GCItems.basicItem, 1, 5)); + addSalvage(new ItemStack(Items.IRON_INGOT)); + addSalvage(new ItemStack(Items.GOLD_INGOT)); + addSalvage(new ItemStack(Items.GOLD_NUGGET)); + addSalvage(new ItemStack(Items.DIAMOND)); + } + + public static void initialiseRecipeList() + { + knownRecipes.addAll(GalacticraftRegistry.getRocketT1Recipes()); + knownRecipes.addAll(GalacticraftRegistry.getBuggyBenchRecipes()); + } + + public static void initialiseRecipeListPlanets() + { + knownRecipes.addAll(GalacticraftRegistry.getRocketT2Recipes()); + knownRecipes.addAll(GalacticraftRegistry.getCargoRocketRecipes()); + knownRecipes.addAll(GalacticraftRegistry.getRocketT3Recipes()); + knownRecipes.addAll(GalacticraftRegistry.getAstroMinerRecipes()); + } + + public TileEntityDeconstructor() + { + super("tile.machine2.10.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 75); + this.setTierGC(2); + this.inventory = NonNullList.withSize(11, ItemStack.EMPTY); + } + + public static void addSalvage(ItemStack itemStack) + { + for (ItemStack inList : salvageable) + { + if (ItemStack.areItemsEqual(inList, itemStack)) + return; + } + salvageable.add(itemStack.copy()); + } + + public static boolean isSalvage(ItemStack stack) + { + for (ItemStack inList : salvageable) + { + if (ItemStack.areItemsEqual(inList, stack)) + return true; + } + return false; + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + boolean updateInv = false; + + if (this.hasEnoughEnergyToRun) + { + if (this.canDeconstruct()) + { + ++this.processTicks; + + if ((this.processTicks * 5) % this.processTimeRequired == 5) + { + this.world.playSound(null, this.getPos(), GCSounds.deconstructor, SoundCategory.BLOCKS, 0.25F, this.world.rand.nextFloat() * 0.04F + 0.38F); + } + + if (this.processTicks >= this.processTimeRequired) + { + this.processTicks = 0; + this.deconstruct(); + updateInv = true; + } + } + else + { + this.processTicks = 0; + } + } + else + { + this.processTicks = 0; + } + + if (updateInv) + { + this.markDirty(); + } + } + + this.ticks++; + } + + private boolean canDeconstruct() + { + return !this.getInventory().get(1).isEmpty(); + } + + public void deconstruct() + { + List ingredients = new LinkedList<>(); + ingredients.add(new ItemStack(this.getInventory().get(1).getItem(), 1, this.getInventory().get(1).getItemDamage())); + this.recursiveCount = 0; + List salvaged = this.getSalvageable(ingredients, null); + salvaged = this.squashList(salvaged); + salvaged = this.randomChanceList(salvaged); + if (salvaged != null) + { + for (ItemStack output : salvaged) + { + this.addToOutputMatrix(output); + } + } + this.decrStackSize(1, 1); + } + + private List getSalvageable(List ingredients, ItemStack done) + { + if (ingredients == null || ingredients.isEmpty()) + { + return null; + } + if (this.recursiveCount++ > 10) + { + return null; + } + + List ret = new LinkedList<>(); + for (ItemStack stack : ingredients) + { + if (isSalvage(stack)) + { + ret.add(stack); + } + else + { + GalacticraftCore.logger.debug("Trying to " + this.recursiveCount + " break down " + stack.toString()); + List ingredients2 = this.getIngredients(stack); + if (ingredients2 != null) + { + if (done != null) + { + Iterator it = ingredients2.iterator(); + while (it.hasNext()) + { + if (ItemStack.areItemStacksEqual(it.next(), done)) + it.remove(); // prevent recursive A->{B} B->{A} + // type recipe chains + } + } + List recursive = this.getSalvageable(ingredients2, stack); + if (recursive != null && !recursive.isEmpty()) + { + ret.addAll(recursive); + } + } + } + } + this.recursiveCount--; + return ret; + } + + private List squashList(List ingredients) + { + if (ingredients == null || ingredients.isEmpty()) + { + return null; + } + List ret = new LinkedList<>(); + for (ItemStack stack : ingredients) + { + boolean matched = false; + for (ItemStack stack1 : ret) + { + if (ItemStack.areItemsEqual(stack, stack1)) + { + matched = true; + stack1.grow(stack.getCount()); + break; + } + } + if (!matched) + { + ret.add(stack); + } + } + return ret; + } + + private List randomChanceList(List ingredients) + { + if (ingredients == null || ingredients.isEmpty()) + { + return null; + } + List ret = new LinkedList<>(); + for (ItemStack stack : ingredients) + { + int count = stack.getCount(); + int result = 0; + for (int i = 0; i < count; i++) + { + if (this.world.rand.nextFloat() < SALVAGE_CHANCE) + { + result++; + } + } + if (result > 0) + { + stack.setCount(result); + ret.add(stack); + } + } + return ret; + } + + private List getIngredients(ItemStack stack) + { + for (INasaWorkbenchRecipe recipe : knownRecipes) + { + ItemStack test = recipe.getRecipeOutput(); + if (ItemStack.areItemsEqual(test, stack) && test.getCount() == 1) + { + return toItemStackList(recipe.getRecipeInput().values()); + } + } + for (IRecipe recipe : ForgeRegistries.RECIPES) + { + ItemStack test = recipe.getRecipeOutput(); + if (ItemStack.areItemsEqual(test, stack) && test.getCount() == 1) + { + if (recipe instanceof ShapedRecipes) + { + return expandRecipeInputs(((ShapedRecipes) recipe).recipeItems); + } + else if (recipe instanceof ShapelessRecipes) + { + return expandRecipeInputs(((ShapelessRecipes) recipe).recipeItems); + } + else if (recipe instanceof ShapedOreRecipe) + { + return expandRecipeInputs(((ShapedOreRecipe) recipe).getIngredients()); + } + else if (recipe instanceof ShapelessOreRecipe) + { + return expandRecipeInputs(((ShapelessOreRecipe) recipe).getIngredients()); + } + } + } + return null; + } + + private List expandRecipeInputs(List inputs) + { + List ret = new LinkedList<>(); + for (Object input : inputs) + { + ItemStack toAdd = parseRecipeInput(input); + if (toAdd != null && !toAdd.isEmpty()) + { + ret.add(toAdd); + } + } + return ret; + } + + private ItemStack parseRecipeInput(Object input) + { + if (input instanceof Ingredient) + { + for (ItemStack obj : ((Ingredient) input).getMatchingStacks()) + { + ItemStack ret = parseRecipeInput(obj); + if (ret != null) + { + return ret; + } + } + } + else if (input instanceof ItemStack) + { + ItemStack stack = (ItemStack) input; + if (stack.getMetadata() == OreDictionary.WILDCARD_VALUE) + { + return new ItemStack(stack.getItem(), stack.getCount(), 0); + } + else + { + return stack.copy(); + } + } + else if (input instanceof String) + { + List stacks = OreDictionary.getOres((String) input); + if (stacks.isEmpty()) + { + return null; + } + for (ItemStack stack : stacks) + { + if (isSalvage(stack)) + { + return stack.copy(); + } + } + return stacks.get(0) == null ? null : stacks.get(0).copy(); + } + else if (input instanceof Iterable) + { + for (Object obj : (Iterable) input) + { + ItemStack ret = parseRecipeInput(obj); + if (ret != null) + { + return ret; + } + } + } + + return null; + } + + private List toItemStackList(Collection inputs) + { + List ret = new LinkedList<>(); + for (ItemStack o : inputs) + { + if (o != null && !o.isEmpty()) + { + ret.add(o.copy()); + } + } + return ret; + } + + private void addToOutputMatrix(ItemStack stack) + { + for (int i = 2; i < 11; i++) + { + if (this.getInventory().get(i).isEmpty()) + { + this.getInventory().set(i, stack); + return; + } + if (!(ItemStack.areItemsEqual(stack, this.getInventory().get(i)))) + { + continue; + } + int size = this.getInventory().get(i).getCount(); + if (size + stack.getCount() < this.getInventoryStackLimit()) + { + this.getInventory().get(i).grow(stack.getCount()); + return; + } + this.getInventory().get(i).setCount(this.getInventoryStackLimit()); + stack.shrink(this.getInventoryStackLimit() - size); + } + GCCoreUtil.spawnItem(this.world, this.getPos(), stack); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.processTicks = par1NBTTagCompound.getInteger("smeltingTicks"); + + this.readMachineSidesFromNBT(par1NBTTagCompound); // Needed by + // IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + return nbt; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (slotID == 0) + { + return itemStack != null && !itemStack.isEmpty() && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + return slotID == 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return new int[] {2, 3, 4, 5, 6, 7, 8, 9, 10}; + } + + return new int[] {1}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID >= 2; + } + + @Override + public boolean shouldUseEnergy() + { + return this.processTicks > 0; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachine2.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDish.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDish.java new file mode 100644 index 00000000..0c438370 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDish.java @@ -0,0 +1,367 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectrical; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; + +public class TileEntityDish extends TileBaseUniversalElectrical implements IMultiBlock, IDisableableMachine, IInventoryDefaults, ISidedInventory, IConnector +{ + + public float targetAngle; + public float currentAngle; + @NetworkedField(targetSide = Side.CLIENT) public boolean disabled = false; + @NetworkedField(targetSide = Side.CLIENT) public int disableCooldown = 0; + + private boolean initialised = false; + private AxisAlignedBB renderAABB; + + public TileEntityDish() + { + super("tile.satellitedish.name"); + this.storage.setMaxExtract(100); + this.setTierGC(1); + inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + public float rotation(float partial) + { + return (this.ticks + partial) / 12; + } + + public float elevation(float partial) + { + return (MathHelper.sin(rotation(partial) / 40) + 1.0F) * 22.5F; + } + + @Override + public void update() + { + super.update(); + + if (!this.initialised) + { + this.initialised = this.initialiseMultiTiles(this.getPos(), this.world); + } + + if (!this.world.isRemote) + { + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + } + + float angle = this.world.getCelestialAngle(1.0F) - 0.7845194F < 0 ? 1.0F - 0.7845194F : -0.7845194F; + float celestialAngle = (this.world.getCelestialAngle(1.0F) + angle) * 360.0F; + + celestialAngle %= 360; + + { + if (celestialAngle > 30 && celestialAngle < 150) + { + float difference = this.targetAngle - celestialAngle; + + this.targetAngle -= difference / 20.0F; + } else if (!this.world.isDaytime() || this.world.isRaining() || this.world.isThundering()) + { + this.targetAngle = 77.5F + 180.0F; + } else if (celestialAngle < 50) + { + this.targetAngle = 50; + } else if (celestialAngle > 150) + { + this.targetAngle = 150; + } + } + + float difference = this.targetAngle - this.currentAngle; + + this.currentAngle += difference / 20.0F; + } + + protected boolean initialiseMultiTiles(BlockPos pos, World world) + { + // Client can create its own fake blocks and tiles - no need for + // networking in 1.8+ + if (world.isRemote) + this.onCreate(world, pos); + + List positions = new ArrayList<>(); + this.getPositions(pos, positions); + boolean result = true; + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMulti) + { + ((TileEntityMulti) tile).mainBlockPosition = pos; + } else + { + result = false; + } + } + return result; + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.DISH_LARGE; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + int y = placedPosition.getY(); + + if (++y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + + if (++y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + + if (++y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + + if (++y > buildHeight) + { + return; + } + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + if (++y > buildHeight) + { + return; + } + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + if (++y > buildHeight) + { + return; + } + for (int x = -3; x < 4; x++) + { + for (int z = -3; z < 4; z++) + { + if (Math.abs(x) + Math.abs(z) == 6) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + if (++y > buildHeight) + { + return; + } + for (int x = -3; x < 4; x++) + { + for (int z = -3; z < 4; z++) + { + if (Math.abs(x) + Math.abs(z) == 6) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + if (++y > buildHeight) + { + return; + } + for (int x = -2; x < 3; x++) + { + for (int z = -2; z < 3; z++) + { + if (Math.abs(x) + Math.abs(z) == 4) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new LinkedList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && (EnumBlockMultiType) stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.DISH_LARGE) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.05D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.setBlockToAir(pos); + } + } + this.world.destroyBlock(thisBlock, true); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.storage.setCapacity(nbt.getFloat("maxEnergy")); + this.currentAngle = nbt.getFloat("currentAngle"); + this.targetAngle = nbt.getFloat("targetAngle"); + this.setDisabled(0, nbt.getBoolean("disabled")); + this.disableCooldown = nbt.getInteger("disabledCooldown"); + + this.initialised = false; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setFloat("maxEnergy", this.getMaxEnergyStoredGC()); + nbt.setFloat("currentAngle", this.currentAngle); + nbt.setFloat("targetAngle", this.targetAngle); + nbt.setInteger("disabledCooldown", this.disableCooldown); + nbt.setBoolean("disabled", this.getDisabled(0)); + + return nbt; + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos.add(-3, 0, -3), pos.add(3, 8, 3)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + this.disabled = disabled; + this.disableCooldown = 20; + } + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC() * i / this.getMaxEnergyStoredGC()); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDungeonSpawner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDungeonSpawner.java new file mode 100644 index 00000000..616100c3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityDungeonSpawner.java @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.entities.IBoss; + +public class TileEntityDungeonSpawner extends TileEntityAdvanced +{ + + public Class bossClass; + public IBoss boss; + public boolean spawned; + public boolean isBossDefeated; + public boolean playerInRange; + public boolean lastPlayerInRange; + private Vector3 roomCoords; + private Vector3 roomSize; + public long lastKillTime; + private BlockPos chestPos; + private AxisAlignedBB range15 = null; + private AxisAlignedBB rangeBounds = null; + private AxisAlignedBB rangeBoundsPlus3 = null; + private AxisAlignedBB rangeBoundsPlus11 = null; + + public TileEntityDungeonSpawner() + { + this(null); + } + + public TileEntityDungeonSpawner(Class bossClass) + { + super("tile.gcdungeonspawner.name"); + this.bossClass = bossClass; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public void update() + { + super.update(); + + if (this.roomCoords == null) + { + return; + } + + if (!this.world.isRemote) + { + if (this.range15 == null) + { + final Vector3 thisVec = new Vector3(this); + this.range15 = new AxisAlignedBB(thisVec.x - 15, thisVec.y - 15, thisVec.z - 15, thisVec.x + 15, thisVec.y + 15, thisVec.z + 15); + this.rangeBounds = new AxisAlignedBB(this.roomCoords.intX(), this.roomCoords.intY(), this.roomCoords.intZ(), this.roomCoords.intX() + this.roomSize.intX(), + this.roomCoords.intY() + this.roomSize.intY(), this.roomCoords.intZ() + this.roomSize.intZ()); + this.rangeBoundsPlus3 = this.rangeBounds.grow(3, 3, 3); + } + + if (this.lastKillTime > 0 && MinecraftServer.getCurrentTimeMillis() - lastKillTime > 900000) // 15 + // minutes + { + this.lastKillTime = 0; + this.isBossDefeated = false; + // After 15 minutes a new boss is able to be spawned + } + + final List l = this.world.getEntitiesWithinAABB(bossClass, this.range15); + + for (final Entity e : l) + { + if (!e.isDead) + { + this.boss = (IBoss) e; + this.spawned = true; + this.isBossDefeated = false; + this.boss.onBossSpawned(this); + } + } + + List entitiesWithin = this.world.getEntitiesWithinAABB(EntityMob.class, this.rangeBoundsPlus3); + + for (Entity mob : entitiesWithin) + { + if (this.getDisabledCreatures().contains(mob.getClass())) + { + mob.setDead(); + } + } + + List playersWithin = this.world.getEntitiesWithinAABB(EntityPlayer.class, this.rangeBounds); + + this.playerInRange = !playersWithin.isEmpty(); + + if (this.playerInRange) + { + if (!this.lastPlayerInRange && !this.spawned) + { + // Try to create a boss entity + if (this.boss == null && !this.isBossDefeated) + { + try + { + Constructor c = this.bossClass.getConstructor(World.class); + this.boss = (IBoss) c.newInstance(this.world); + ((Entity) this.boss).setPosition(this.getPos().getX() + 0.5, this.getPos().getY() + 1.0, this.getPos().getZ() + 0.5); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + // Now spawn the boss + if (this.boss != null) + { + if (this.boss instanceof EntityLiving) + { + EntityLiving bossLiving = (EntityLiving) this.boss; + bossLiving.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(bossLiving)), null); + this.world.spawnEntity(bossLiving); + this.playSpawnSound(bossLiving); + this.spawned = true; + } + } + } + } + + this.lastPlayerInRange = this.playerInRange; + } + } + + public void playSpawnSound(Entity entity) + { + + } + + public List> getDisabledCreatures() + { + List> list = new ArrayList>(); + list.add(EntityEvolvedSkeleton.class); + list.add(EntityEvolvedCreeper.class); + list.add(EntityEvolvedZombie.class); + list.add(EntityEvolvedSpider.class); + return list; + } + + public void setRoom(Vector3 coords, Vector3 size) + { + this.roomCoords = coords; + this.roomSize = size; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.playerInRange = this.lastPlayerInRange = nbt.getBoolean("playerInRange"); + this.isBossDefeated = nbt.getBoolean("defeated"); + + try + { + this.bossClass = (Class) Class.forName(nbt.getString("bossClass")); + } catch (Exception e) + { + // This exception will be thrown when read is called from + // TileEntity.handleUpdateTag + // but we only care if an exception is thrown on server side read + if (!this.world.isRemote) + { + e.printStackTrace(); + } + } + + this.roomCoords = new Vector3(); + this.roomCoords.x = nbt.getDouble("roomCoordsX"); + this.roomCoords.y = nbt.getDouble("roomCoordsY"); + this.roomCoords.z = nbt.getDouble("roomCoordsZ"); + this.roomSize = new Vector3(); + this.roomSize.x = nbt.getDouble("roomSizeX"); + this.roomSize.y = nbt.getDouble("roomSizeY"); + this.roomSize.z = nbt.getDouble("roomSizeZ"); + + if (nbt.hasKey("lastKillTime")) + { + this.lastKillTime = nbt.getLong("lastKillTime"); + } else if (nbt.hasKey("lastKillTimeNew")) + { + long savedTime = nbt.getLong("lastKillTimeNew"); + this.lastKillTime = savedTime == 0 ? 0 : savedTime + MinecraftServer.getCurrentTimeMillis(); + } + + if (nbt.hasKey("chestPosNull") && !nbt.getBoolean("chestPosNull")) + { + this.chestPos = new BlockPos(nbt.getInteger("chestX"), nbt.getInteger("chestY"), nbt.getInteger("chestZ")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setBoolean("playerInRange", this.playerInRange); + nbt.setBoolean("defeated", this.isBossDefeated); + nbt.setString("bossClass", this.bossClass.getCanonicalName()); + + if (this.roomCoords != null) + { + nbt.setDouble("roomCoordsX", this.roomCoords.x); + nbt.setDouble("roomCoordsY", this.roomCoords.y); + nbt.setDouble("roomCoordsZ", this.roomCoords.z); + nbt.setDouble("roomSizeX", this.roomSize.x); + nbt.setDouble("roomSizeY", this.roomSize.y); + nbt.setDouble("roomSizeZ", this.roomSize.z); + } + + nbt.setLong("lastKillTimeNew", this.lastKillTime == 0 ? 0 : this.lastKillTime - MinecraftServer.getCurrentTimeMillis()); + + nbt.setBoolean("chestPosNull", this.chestPos == null); + if (this.chestPos != null) + { + nbt.setInteger("chestX", this.chestPos.getX()); + nbt.setInteger("chestY", this.chestPos.getY()); + nbt.setInteger("chestZ", this.chestPos.getZ()); + } + return nbt; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + public BlockPos getChestPos() + { + return chestPos; + } + + public void setChestPos(BlockPos chestPos) + { + this.chestPos = chestPos; + } + + public AxisAlignedBB getRangeBounds() + { + if (this.rangeBounds == null) + this.rangeBounds = new AxisAlignedBB(this.roomCoords.intX(), this.roomCoords.intY(), this.roomCoords.intZ(), this.roomCoords.intX() + this.roomSize.intX(), + this.roomCoords.intY() + this.roomSize.intY(), this.roomCoords.intZ() + this.roomSize.intZ()); + + return this.rangeBounds; + } + + public AxisAlignedBB getRangeBoundsPlus11() + { + if (this.rangeBoundsPlus11 == null) + this.rangeBoundsPlus11 = this.getRangeBounds().grow(11, 11, 11); + + return this.rangeBoundsPlus11; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricFurnace.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricFurnace.java new file mode 100644 index 00000000..e78295ff --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricFurnace.java @@ -0,0 +1,449 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineTiered; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; + +public class TileEntityElectricFurnace extends TileBaseElectricBlockWithInventory implements ISidedInventory, IMachineSides +{ + // The electric furnace is 50% faster than a vanilla Furnace + // but at a cost of some inefficiency: + // It uses 46800 gJ to smelt 8 ingots quickly + // compared with the energy generated by 1 coal which is 38400 gJ + // + // The efficiency can be increased using a Tier 2 furnace + + public static int PROCESS_TIME_REQUIRED = 130; + + @NetworkedField(targetSide = Side.CLIENT) public int processTimeRequired = PROCESS_TIME_REQUIRED; + + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + + public final Set playersUsing = new HashSet(); + + private boolean initialised = false; + + public TileEntityElectricFurnace() + { + this(1); + } + + /* + * @param tier: 1 = Electric Furnace 2 = Electric Arc Furnace + */ + public TileEntityElectricFurnace(int tier) + { + super(tier == 1 ? "tile.machine.2.name" : "tile.machine.7.name"); + this.initialised = true; + this.inventory = NonNullList.withSize(4, ItemStack.EMPTY); + if (tier == 1) + { + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 60 : 45); + return; + } + + this.setTier2(); + } + + private void setTier2() + { + this.storage.setCapacity(25000); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 60); + this.processTimeRequired = 100; + this.setTierGC(2); + } + + @Override + public void update() + { + if (!this.initialised) + { + int metadata = this.getBlockMetadata(); + // for version update compatibility + Block b = this.world.getBlockState(this.getPos()).getBlock(); + if (b == GCBlocks.machineBase) + { + this.world.setBlockState(this.getPos(), + GCBlocks.machineTiered.getDefaultState()/* + * ,s 4 + */, 2); + } else if (metadata >= 8) + { + this.setTier2(); + } + this.initialised = true; + } + + super.update(); + + if (!this.world.isRemote) + { + if (this.canProcess()) + { + if (this.hasEnoughEnergyToRun) + { + // 100% extra speed boost for Tier 2 machine if powered by + // Tier 2 power + if (this.tierGC >= 2) + { + this.processTimeRequired = PROCESS_TIME_REQUIRED / 2 / this.poweredByTierGC; + } + + if (this.processTicks == 0) + { + this.processTicks = this.processTimeRequired; + } else + { + if (--this.processTicks <= 0) + { + this.smeltItem(); + this.processTicks = this.canProcess() ? this.processTimeRequired : 0; + } + } + } else if (this.processTicks > 0 && this.processTicks < this.processTimeRequired) + { + // Apply a "cooling down" process if the electric furnace + // runs out of energy while smelting + if (this.world.rand.nextInt(4) == 0) + { + this.processTicks++; + } + } + } else + { + this.processTicks = 0; + } + } else + { + // Smoother client side animation before the networked fields get + // updated + if (this.processTicks > 0 && this.processTicks < this.processTimeRequired) + { + this.processTicks--; + } + } + } + + /** + * @return Is this machine able to process its specific task? + */ + public boolean canProcess() + { + ItemStack stack = this.getInventory().get(1); + if (stack.isEmpty()) + { + return false; + } + ItemStack result = FurnaceRecipes.instance().getSmeltingResult(stack); + if (result.isEmpty()) + { + int burnable = TileEntityFurnace.getItemBurnTime(stack); + if (burnable >= 200 && burnable < 400) + result = new ItemStack(MarsItems.carbonFragments); // this + // includes + // most + // wooden + // tools, + // doors, + // stairs, + // boats etc + // but not + // saplings + // and sticks + else + return false; + } + + if (this.tierGC == 1) + { + if (!this.getInventory().get(2).isEmpty()) + { + return (this.getInventory().get(2).isItemEqual(result) && this.getInventory().get(2).getCount() < 64); + } + } + + // Electric Arc Furnace + if (this.getInventory().get(2).isEmpty() || this.getInventory().get(3).isEmpty()) + { + return true; + } + int space = 0; + if (this.getInventory().get(2).isItemEqual(result)) + { + space = 64 - this.getInventory().get(2).getCount(); + } + if (this.getInventory().get(3).isItemEqual(result)) + { + space += 64 - this.getInventory().get(3).getCount(); + } + return space >= 2; + } + + /** + * Turn one item from the furnace source stack into the appropriate smelted + * item in the furnace result stack + */ + public void smeltItem() + { + if (this.canProcess()) + { + ItemStack resultItemStack = FurnaceRecipes.instance().getSmeltingResult(this.getInventory().get(1)); + boolean doubleResult = false; + if (this.tierGC > 1) + { + String nameSmelted = this.getInventory().get(1).getTranslationKey().toLowerCase(); + if ((resultItemStack.getTranslationKey().toLowerCase().contains("ingot") || resultItemStack.getItem() == Items.QUARTZ) + && (nameSmelted.contains("ore") || nameSmelted.contains("raw") || nameSmelted.contains("moon") || nameSmelted.contains("mars") || nameSmelted.contains("shard"))) + { + doubleResult = true; + } + } + + if (doubleResult) + { + int space2 = 0; + int space3 = 0; + if (this.getInventory().get(2).isEmpty()) + { + this.getInventory().set(2, resultItemStack.copy()); + this.getInventory().get(2).grow(resultItemStack.getCount()); + space2 = 2; + } else if (this.getInventory().get(2).isItemEqual(resultItemStack)) + { + space2 = (64 - this.getInventory().get(2).getCount()) / resultItemStack.getCount(); + if (space2 > 2) + space2 = 2; + this.getInventory().get(2).grow(resultItemStack.getCount() * space2); + } + if (space2 < 2) + { + if (this.getInventory().get(3).isEmpty()) + { + this.getInventory().set(3, resultItemStack.copy()); + if (space2 == 0) + { + this.getInventory().get(3).grow(resultItemStack.getCount()); + } + } else if (this.getInventory().get(3).isItemEqual(resultItemStack)) + { + space3 = (64 - this.getInventory().get(3).getCount()) / resultItemStack.getCount(); + if (space3 > 2 - space2) + space3 = 2 - space2; + this.getInventory().get(3).grow(resultItemStack.getCount() * space3); + } + } + } else if (this.getInventory().get(2).isEmpty()) + { + this.getInventory().set(2, resultItemStack.copy()); + } else if (this.getInventory().get(2).isItemEqual(resultItemStack)) + { + this.getInventory().get(2).grow(resultItemStack.getCount()); + } + + this.getInventory().get(1).shrink(1); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (this.storage.getEnergyStoredGC() > EnergyStorageTile.STANDARD_CAPACITY) + { + this.setTier2(); + this.initialised = true; + } else + { + this.initialised = false; + } + this.processTicks = nbt.getInteger("smeltingTicks"); + + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + if (this.tierGC == 1 && this.storage.getEnergyStoredGC() > EnergyStorageTile.STANDARD_CAPACITY) + { + this.storage.setEnergyStored(EnergyStorageTile.STANDARD_CAPACITY); + } + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + + return nbt; + } + +// @Override +// public boolean hasCustomName() +// { +// return true; +// } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring + * stack size) into the given slot. + */ + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (itemStack.isEmpty()) + { + return false; + } + return slotID == 1 ? !FurnaceRecipes.instance().getSmeltingResult(itemStack).isEmpty() : slotID == 0 && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (this.tierGC == 2) + { + return new int[] + {0, 1, 2, 3}; + } + return new int[] + {0, 1, 2}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 2 || this.tierGC == 2 && slotID == 3; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachineTiered.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricIngotCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricIngotCompressor.java new file mode 100644 index 00000000..438c73a0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityElectricIngotCompressor.java @@ -0,0 +1,699 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.ShapedRecipesGC; +import micdoodle8.mods.galacticraft.api.recipe.ShapelessOreRecipeGC; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine4; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.inventory.PersistantInventoryCrafting; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityElectricIngotCompressor extends TileBaseElectricBlock implements IInventoryDefaults, ISidedInventory, IMachineSides +{ + + private static final int PROCESS_TIME_REQUIRED_BASE = 200; + private int processTimeRequiredBase; + @NetworkedField(targetSide = Side.CLIENT) public int processTimeRequired = PROCESS_TIME_REQUIRED_BASE; + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + private ItemStack producingStack = ItemStack.EMPTY; + private long ticks; + private static final int[] allSlots = new int[] + {0, 3, 4, 5, 6, 7, 8, 9, 10, 11}; + private boolean advanced; + + public PersistantInventoryCrafting compressingCraftMatrix = new PersistantInventoryCrafting(); + private static Random randnum = new Random(); + + public TileEntityElectricIngotCompressor() + { + super("tile.machine2.4.name"); + this.processTimeRequiredBase = PROCESS_TIME_REQUIRED_BASE; + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 75); + this.setTierGC(2); + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + public TileEntityElectricIngotCompressor(boolean advanced) + { + super("tile.machine4.11.name"); + this.processTimeRequiredBase = PROCESS_TIME_REQUIRED_BASE * 3 / 5; + this.processTimeRequired = processTimeRequiredBase; + this.advanced = true; + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 75); + this.setTierGC(3); + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + boolean updateInv = false; + + if (this.hasEnoughEnergyToRun) + { + if (this.canCompress()) + { + ++this.processTicks; + + this.processTimeRequired = this.processTimeRequiredBase / (1 + this.poweredByTierGC * 2); + + if (this.processTicks >= this.processTimeRequired) + { + if (this.advanced) + this.world.playSound(null, this.getPos(), GCSounds.advanced_compressor, SoundCategory.BLOCKS, 0.23F, this.world.rand.nextFloat() * 0.1F + 9.5F); + else + this.world.playSound(null, this.getPos(), SoundEvents.BLOCK_ANVIL_LAND, SoundCategory.BLOCKS, 0.12F, this.world.rand.nextFloat() * 0.1F - 9.5F); + this.processTicks = 0; + this.compressItems(); + updateInv = true; + } + } else + { + this.processTicks = 0; + } + } else + { + this.processTicks = 0; + } + + if (updateInv) + { + this.markDirty(); + } + } + + this.ticks++; + } + + private boolean canCompress() + { + ItemStack itemstack = this.producingStack; + if (itemstack.isEmpty()) + { + return false; + } + if (this.getInventory().get(1).isEmpty() && this.getInventory().get(2).isEmpty()) + { + return true; + } + if (!this.getInventory().get(1).isEmpty() && !this.getInventory().get(1).isItemEqual(itemstack) || !this.getInventory().get(2).isEmpty() && !this.getInventory().get(2).isItemEqual(itemstack)) + { + return false; + } + int contents1 = this.getInventory().get(1).getCount(); + int contents2 = this.getInventory().get(2).getCount(); + int result = itemstack.getCount(); + if (ConfigManagerCore.quickMode && itemstack.getItem().getTranslationKey(itemstack).contains("compressed")) + { + result += result; + } + result += (contents2 < contents1) ? contents2 : contents1; + return result <= this.getInventoryStackLimit() && result <= itemstack.getMaxStackSize(); + } + + public void updateInput() + { + this.producingStack = CompressorRecipes.findMatchingRecipe(this.compressingCraftMatrix, this.world); + } + + public void compressItems() + { + int stackSize1 = this.getInventory().get(1).isEmpty() ? 0 : this.getInventory().get(1).getCount(); + int stackSize2 = this.getInventory().get(2).isEmpty() ? 0 : this.getInventory().get(2).getCount(); + + if (stackSize1 <= stackSize2) + { + this.compressIntoSlot(1); + this.compressIntoSlot(2); + } else + { + this.compressIntoSlot(2); + this.compressIntoSlot(1); + } + } + + private void compressIntoSlot(int slot) + { + if (this.canCompress()) + { + ItemStack resultItemStack = this.producingStack.copy(); + if (ConfigManagerCore.quickMode) + { + if (resultItemStack.getItem().getTranslationKey(resultItemStack).contains("compressed")) + { + resultItemStack.grow(resultItemStack.getCount()); + } + } + + if (this.getInventory().get(slot).isEmpty()) + { + this.getInventory().set(slot, resultItemStack); + } else if (this.getInventory().get(slot).isItemEqual(resultItemStack)) + { + if (this.getInventory().get(slot).getCount() + resultItemStack.getCount() > resultItemStack.getMaxStackSize()) + { + resultItemStack.grow(this.getInventory().get(slot).getCount() - resultItemStack.getMaxStackSize()); + GCCoreUtil.spawnItem(this.world, this.getPos(), resultItemStack); + this.getInventory().get(slot).setCount(resultItemStack.getMaxStackSize()); + } else + { + this.getInventory().get(slot).grow(resultItemStack.getCount()); + } + } + + for (int i = 0; i < this.compressingCraftMatrix.getSizeInventory(); i++) + { + if (!this.compressingCraftMatrix.getStackInSlot(i).isEmpty() && this.compressingCraftMatrix.getStackInSlot(i).getItem() == Items.WATER_BUCKET) + { + this.compressingCraftMatrix.setInventorySlotContentsNoUpdate(i, new ItemStack(Items.BUCKET)); + } else + { + this.compressingCraftMatrix.decrStackSize(i, 1); + } + } + + this.updateInput(); + } + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.advanced = nbt.getBoolean("adv"); + if (this.advanced) + { + this.processTimeRequiredBase = PROCESS_TIME_REQUIRED_BASE * 3 / 5; + this.processTimeRequired = processTimeRequiredBase; + this.setTierGC(3); + } + this.processTicks = nbt.getInteger("smeltingTicks"); + + this.inventory = NonNullList.withSize(this.getSizeInventory() - this.compressingCraftMatrix.getSizeInventory(), ItemStack.EMPTY); + NBTTagList nbttaglist = nbt.getTagList("Items", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + int j = nbttagcompound.getByte("Slot") & 255; + + if (j >= 0 && j < this.inventory.size()) + { + this.inventory.set(j, new ItemStack(nbttagcompound)); + } else if (j < this.inventory.size() + this.compressingCraftMatrix.getSizeInventory()) + { + this.compressingCraftMatrix.setInventorySlotContents(j - this.inventory.size(), new ItemStack(nbttagcompound)); + } + } + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + this.updateInput(); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("adv", this.advanced); + nbt.setInteger("smeltingTicks", this.processTicks); + NBTTagList items = new NBTTagList(); + int i; + + for (i = 0; i < this.inventory.size(); ++i) + { + if (!this.inventory.get(i).isEmpty()) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte) i); + this.inventory.get(i).writeToNBT(var4); + items.appendTag(var4); + } + } + + for (i = 0; i < this.compressingCraftMatrix.getSizeInventory(); ++i) + { + if (!this.compressingCraftMatrix.getStackInSlot(i).isEmpty()) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte) (i + this.inventory.size())); + this.compressingCraftMatrix.getStackInSlot(i).writeToNBT(var4); + items.appendTag(var4); + } + } + nbt.setTag("Items", items); + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + return nbt; + } + + @Override + public int getSizeInventory() + { + return super.getSizeInventory() + this.compressingCraftMatrix.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + if (par1 >= this.getInventory().size()) + { + return this.compressingCraftMatrix.getStackInSlot(par1 - this.inventory.size()); + } + + return this.inventory.get(par1); + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (par1 >= this.inventory.size()) + { + ItemStack result = this.compressingCraftMatrix.decrStackSize(par1 - this.inventory.size(), par2); + if (!result.isEmpty()) + { + this.updateInput(); + } + this.markDirty(); + return result; + } + + if (!this.inventory.get(par1).isEmpty()) + { + ItemStack var3; + + if (this.inventory.get(par1).getCount() <= par2) + { + var3 = this.inventory.get(par1); + this.inventory.set(par1, ItemStack.EMPTY); + this.markDirty(); + return var3; + } else + { + var3 = this.inventory.get(par1).splitStack(par2); + + if (this.inventory.get(par1).isEmpty()) + { + this.inventory.set(par1, ItemStack.EMPTY); + } + + this.markDirty(); + return var3; + } + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (par1 >= this.inventory.size()) + { + this.markDirty(); + return this.compressingCraftMatrix.removeStackFromSlot(par1 - this.inventory.size()); + } + + if (!this.inventory.get(par1).isEmpty()) + { + ItemStack var2 = this.inventory.get(par1); + this.inventory.set(par1, ItemStack.EMPTY); + this.markDirty(); + return var2; + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public void setInventorySlotContents(int par1, ItemStack stack) + { + if (par1 >= this.inventory.size()) + { + this.compressingCraftMatrix.setInventorySlotContents(par1 - this.inventory.size(), stack); + this.updateInput(); + } else + { + this.inventory.set(par1, stack); + + if (!stack.isEmpty() && stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + } + this.markDirty(); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityplayer) + { + return this.world.getTileEntity(this.getPos()) == this && entityplayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + +// @Override +// public boolean hasCustomName() +// { +// return true; +// } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (slotID == 0) + { + return itemStack != null && !itemStack.isEmpty() && ItemElectricBase.isElectricItem(itemStack.getItem()); + } else if (slotID >= 3) + { + if (!this.producingStack.isEmpty()) + { + ItemStack stackInSlot = this.getStackInSlot(slotID); + return !stackInSlot.isEmpty() && stackInSlot.isItemEqual(itemStack); + } + return this.isItemCompressorInput(itemStack, slotID - 3); + } + + return false; + } + + public boolean isItemCompressorInput(ItemStack stack, int id) + { + for (IRecipe recipe : CompressorRecipes.getRecipeList()) + { + if (recipe instanceof ShapedRecipesGC) + { + if (id >= ((ShapedRecipesGC) recipe).recipeItems.length) + continue; + ItemStack itemstack1 = ((ShapedRecipesGC) recipe).recipeItems[id]; + if (stack.getItem() == itemstack1.getItem() && (itemstack1.getItemDamage() == 32767 || stack.getItemDamage() == itemstack1.getItemDamage())) + { + for (int i = 0; i < ((ShapedRecipesGC) recipe).recipeItems.length; i++) + { + if (i == id) + continue; + ItemStack itemstack2 = ((ShapedRecipesGC) recipe).recipeItems[i]; + if (stack.getItem() == itemstack2.getItem() && (itemstack2.getItemDamage() == 32767 || stack.getItemDamage() == itemstack2.getItemDamage())) + { + ItemStack is3 = this.getStackInSlot(id + 3); + ItemStack is4 = this.getStackInSlot(i + 3); + return is3.isEmpty() || !is4.isEmpty() && is3.getCount() < is4.getCount(); + } + } + return true; + } + } else if (recipe instanceof ShapelessOreRecipeGC) + { + ArrayList required = new ArrayList(((ShapelessOreRecipeGC) recipe).getInput()); + + Iterator req = required.iterator(); + + int match = 0; + + while (req.hasNext()) + { + Object next = req.next(); + + if (next instanceof ItemStack) + { + if (OreDictionary.itemMatches((ItemStack) next, stack, false)) + match++; + } else if (next instanceof List) + { + Iterator itr = ((List) next).iterator(); + while (itr.hasNext()) + { + if (OreDictionary.itemMatches(itr.next(), stack, false)) + { + match++; + break; + } + } + } + } + + if (match == 0) + continue; + + if (match == 1) + return true; + + // Shapeless recipe can go into (match) number of slots + int slotsFilled = 0; + for (int i = 3; i < 12; i++) + { + ItemStack inMatrix = this.getStackInSlot(i); + if (!inMatrix.isEmpty() && inMatrix.isItemEqual(stack)) + slotsFilled++; + } + if (slotsFilled < match) + { + return this.getStackInSlot(id + 3).isEmpty(); + } + + return randnum.nextInt(match) == 0; + } + } + + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return new int[] + {1, 2}; + } + ArrayList removeSlots = new ArrayList<>(); + ArrayList doneSlots = new ArrayList<>(); + + for (int i = 3; i < 12; i++) + { + if (doneSlots.contains(i)) + { + continue; + } + ItemStack stack1 = this.getStackInSlot(i); + if (stack1.isEmpty()) + { + continue; + } + + int lowestCount = stack1.getCount(); + int lowestSlot = i; + ArrayList slotsWithSameItem = new ArrayList<>(); + for (int j = i + 1; j < 12; j++) + { + if (doneSlots.contains(j)) + { + continue; + } + ItemStack stack2 = this.getStackInSlot(j); + if (stack2.isEmpty()) + { + continue; + } + + if (stack1.isItemEqual(stack2)) + { + slotsWithSameItem.add(j); + if (stack2.getCount() < lowestCount) + { + lowestCount = stack2.getCount(); + lowestSlot = j; + } + } + } + if (!slotsWithSameItem.isEmpty()) + { + if (lowestSlot != i) + removeSlots.add(i); + for (Integer k : slotsWithSameItem) + { + doneSlots.add(k); + if (k.intValue() != lowestSlot) + removeSlots.add(k); + } + } + } + + if (removeSlots.size() > 0) + { + int[] returnSlots = new int[10 - removeSlots.size()]; + returnSlots[0] = 0; + int j = 1; + for (int i = 3; i < 12; i++) + { + if (removeSlots.contains(i)) + { + continue; + } + returnSlots[j++] = i; + } + + return returnSlots; + } + + return allSlots; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 1 || slotID == 2; + } + + @Override + public boolean shouldUseEnergy() + { + return this.processTicks > 0; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return this.advanced ? BlockMachine4.MACHINESIDES_RENDERTYPE : BlockMachine2.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEmergencyBox.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEmergencyBox.java new file mode 100644 index 00000000..6f7f517a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEmergencyBox.java @@ -0,0 +1,673 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.ai.RandomPositionGenerator; +import net.minecraft.entity.monster.IMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.items.ItemHandlerHelper; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ItemEmergencyKit; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +import io.netty.buffer.ByteBuf; + +public class TileEntityEmergencyBox extends TileEntity implements ITickable, IPacketReceiver +{ + + private static final float SPEED = 4F; + public float angleA = 0F; + public float angleB = 0F; + public float angleC = 0F; + public float angleD = 0F; + public float lastAngleA = 0F; + public float lastAngleB = 0F; + public float lastAngleC = 0F; + public float lastAngleD = 0F; + + private boolean openN = false; + private boolean openW = false; + private boolean openS = false; + private boolean openE = false; + private int cooldown = 0; + + private HashSet airToRestore = new HashSet<>(); + private boolean activated = false; + private Vec3d vec3Centre; + private Vec3d thisVec3; + private AxisAlignedBB mobsAABB; + + @Override + public void update() + { + if (!this.activated) + { + this.activated = true; + this.setLightBlocks(); + this.thisVec3 = new Vec3d(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + this.vec3Centre = new Vec3d(this.pos.getX() + 0.5D, this.pos.getY() + 0.5D, this.pos.getZ() + 0.5D); + this.mobsAABB = new AxisAlignedBB(this.pos.getX() - 14, this.pos.getY() - 7, this.pos.getZ() - 14, this.pos.getX() + 14, this.pos.getY() + 7, this.pos.getZ() + 14); + } + + if (this.world.isRemote) + { + if (this.openN && this.angleA < 90F) + { + this.lastAngleA = this.angleA; + this.angleA += SPEED; + if (this.angleA > 90F) + this.angleA = 90F; + } + if (this.openW && this.angleB < 90F) + { + this.lastAngleB = this.angleB; + this.angleB += SPEED; + if (this.angleB > 90F) + this.angleB = 90F; + } + if (this.openS && this.angleC < 90F) + { + this.lastAngleC = this.angleC; + this.angleC += SPEED; + if (this.angleC > 90F) + this.angleC = 90F; + } + if (this.openE && this.angleD < 90F) + { + this.lastAngleD = this.angleD; + this.angleD += SPEED; + if (this.angleD > 90F) + this.angleD = 90F; + } + + if (!this.openN && this.angleA > 0F) + { + this.lastAngleA = this.angleA; + this.angleA -= SPEED; + if (this.angleA < 0F) + this.angleA = 0F; + } + if (!this.openW && this.angleB > 0F) + { + this.lastAngleB = this.angleB; + this.angleB -= SPEED; + if (this.angleB < 0F) + this.angleB = 0F; + } + if (!this.openS && this.angleC > 0F) + { + this.lastAngleC = this.angleC; + this.angleC -= SPEED; + if (this.angleC < 0F) + this.angleC = 0F; + } + if (!this.openE && this.angleD > 0F) + { + this.lastAngleD = this.angleD; + this.angleD -= SPEED; + if (this.angleD < 0F) + this.angleD = 0F; + } + } else + { + if (this.cooldown > 0) + { + this.cooldown--; + } + + boolean updateRequired = false; + if (this.openN) + { + boolean clash = false; + BlockPos testPos = this.pos.north(1); + IBlockState bs = this.world.getBlockState(testPos); + if (!(bs.getBlock() instanceof BlockAir)) + { + if (bs.isFullBlock()) + { + clash = true; + } else + { + AxisAlignedBB check = new AxisAlignedBB(0.125D, 0.125D, 11 / 16D, 0.875D, 0.875D, 1D); + AxisAlignedBB neighbour = bs.getCollisionBoundingBox(this.world, testPos); + if (neighbour != null) + { + clash = check.intersects(neighbour); + } + } + } + if (clash) + { + this.openN = false; + updateRequired = true; + } + } + if (this.openS) + { + boolean clash = false; + BlockPos testPos = this.pos.south(1); + IBlockState bs = this.world.getBlockState(testPos); + if (!(bs.getBlock() instanceof BlockAir)) + { + if (bs.isFullBlock()) + { + clash = true; + } else + { + AxisAlignedBB check = new AxisAlignedBB(0.125D, 0.125D, 0D, 0.875D, 0.875D, 5 / 16D); + AxisAlignedBB neighbour = bs.getCollisionBoundingBox(this.world, testPos); + if (neighbour != null) + { + clash = check.intersects(neighbour); + } + } + } + if (clash) + { + this.openS = false; + updateRequired = true; + } + } + if (this.openW) + { + boolean clash = false; + BlockPos testPos = this.pos.west(1); + IBlockState bs = this.world.getBlockState(testPos); + if (!(bs.getBlock() instanceof BlockAir)) + { + if (bs.isFullBlock()) + { + clash = true; + } else + { + AxisAlignedBB check = new AxisAlignedBB(11 / 16D, 0.125D, 0.125D, 1D, 0.875D, 0.875D); + AxisAlignedBB neighbour = bs.getCollisionBoundingBox(this.world, testPos); + if (neighbour != null) + { + clash = check.intersects(neighbour); + } + } + } + if (clash) + { + this.openW = false; + updateRequired = true; + } + } + if (this.openE) + { + boolean clash = false; + BlockPos testPos = this.pos.east(1); + IBlockState bs = this.world.getBlockState(testPos); + if (!(bs.getBlock() instanceof BlockAir)) + { + if (bs.isFullBlock()) + { + clash = true; + } else + { + AxisAlignedBB check = new AxisAlignedBB(0D, 0.125D, 0.125D, 5 / 16D, 0.875D, 0.875D); + AxisAlignedBB neighbour = bs.getCollisionBoundingBox(this.world, testPos); + if (neighbour != null) + { + clash = check.intersects(neighbour); + } + } + } + if (clash) + { + this.openE = false; + updateRequired = true; + } + } + + if (updateRequired) + { + this.updateClients(); + } + + if (this.world.rand.nextInt(15) == 0) + { + this.scareMobs(); + } + } + } + + private void scareMobs() + { + List moblist = this.world.getEntitiesInAABBexcluding(null, mobsAABB, IMob.MOB_SELECTOR); + if (!moblist.isEmpty()) + { + for (Entity entry : moblist) + { + if (!(entry instanceof EntityCreature && entry instanceof IEntityBreathable)) + { + continue; + } + EntityCreature mob = (EntityCreature) entry; + PathNavigate nav = mob.getNavigator(); + if (nav == null) + { + continue; + } + + Vec3d vecNewTarget = RandomPositionGenerator.findRandomTargetBlockAwayFrom(mob, 12, 5, vec3Centre); + if (vecNewTarget == null) + { + vecNewTarget = RandomPositionGenerator.findRandomTargetBlockAwayFrom(mob, 14, 7, vec3Centre); + if (vecNewTarget == null) + continue; + } + double distanceNew = vecNewTarget.squareDistanceTo(thisVec3); + double distanceCurrent = thisVec3.squareDistanceTo(new Vec3d(mob.posX, mob.posY, mob.posZ)); + if (distanceNew > distanceCurrent) + { + Vec3d vecOldTarget = null; + if (nav.getPath() != null && !nav.getPath().isFinished()) + { + vecOldTarget = nav.getPath().getPosition(mob); + } + if (vecOldTarget == null || distanceCurrent > vecOldTarget.squareDistanceTo(thisVec3)) + { + nav.tryMoveToXYZ(vecNewTarget.x, vecNewTarget.y, vecNewTarget.z, 1.1D); + } + } + } + } + } + + public float getAngleA(float f) + { + float result = this.angleA + (this.angleA - this.lastAngleA) * f; + if (result > 90F) + result = 90F; + if (result < 0F) + result = 0F; + return result; + } + + public float getAngleB(float f) + { + float result = this.angleB + (this.angleB - this.lastAngleB) * f; + if (result > 90F) + result = 90F; + if (result < 0F) + result = 0F; + return result; + } + + public float getAngleC(float f) + { + float result = this.angleC + (this.angleC - this.lastAngleC) * f; + if (result > 90F) + result = 90F; + if (result < 0F) + result = 0F; + return result; + } + + public float getAngleD(float f) + { + float result = this.angleD + (this.angleD - this.lastAngleD) * f; + if (result > 90F) + result = 90F; + if (result < 0F) + result = 0F; + return result; + } + + public void click(EntityPlayer player, EnumFacing side, boolean kitted) + { + switch (side) + { + case NORTH: + if (this.openN && this.cooldown == 0) + { + if (kitted) + { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(GCItems.emergencyKit), 0); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getDefaultState(), 3); + break; + } else + { + ItemStack stack = player.inventory.getCurrentItem(); + if (!stack.isEmpty() && stack.getItem() instanceof ItemEmergencyKit) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getStateFromMeta(1), 3); + this.openW = false; + this.openS = false; + this.openE = false; + } + } + } + this.cooldown = 12; + this.openN = !this.openN; + this.updateClients(); + break; + case WEST: + if (this.openW && this.cooldown == 0) + { + if (kitted) + { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(GCItems.emergencyKit), 0); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getDefaultState(), 3); + break; + } else + { + ItemStack stack = player.inventory.getCurrentItem(); + if (!stack.isEmpty() && stack.getItem() instanceof ItemEmergencyKit) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getStateFromMeta(1), 3); + this.openN = false; + this.openS = false; + this.openE = false; + } + } + } + this.cooldown = 12; + this.openW = !this.openW; + this.updateClients(); + break; + case SOUTH: + if (this.openS && this.cooldown == 0) + { + if (kitted) + { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(GCItems.emergencyKit), 0); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getDefaultState(), 3); + break; + } else + { + ItemStack stack = player.inventory.getCurrentItem(); + if (!stack.isEmpty() && stack.getItem() instanceof ItemEmergencyKit) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getStateFromMeta(1), 3); + this.openN = false; + this.openW = false; + this.openE = false; + } + } + } + this.cooldown = 12; + this.openS = !this.openS; + this.updateClients(); + break; + case EAST: + if (this.openE && this.cooldown == 0) + { + if (kitted) + { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(GCItems.emergencyKit), 0); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getDefaultState(), 3); + break; + } else + { + ItemStack stack = player.inventory.getCurrentItem(); + if (!stack.isEmpty() && stack.getItem() instanceof ItemEmergencyKit) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + this.world.setBlockState(this.pos, GCBlocks.emergencyBox.getStateFromMeta(1), 3); + this.openN = false; + this.openW = false; + this.openS = false; + } + } + } + this.cooldown = 12; + this.openE = !this.openE; + this.updateClients(); + break; + default: + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + int data = nbt.getInteger("open"); + this.openN = (data & 1) == 1; + this.openW = (data & 2) == 2; + this.openS = (data & 4) == 4; + this.openE = (data & 8) == 8; + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.airToRestore.clear(); + NBTTagList airBlocks = nbt.getTagList("air", 10); + if (airBlocks.tagCount() > 0) + { + for (int j = airBlocks.tagCount() - 1; j >= 0; j--) + { + NBTTagCompound tag1 = airBlocks.getCompoundTagAt(j); + if (tag1 != null) + { + this.airToRestore.add(BlockVec3.readFromNBT(tag1)); + } + } + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + int data = (this.openN ? 1 : 0) + (this.openW ? 2 : 0) + (this.openS ? 4 : 0) + (this.openE ? 8 : 0); + nbt.setInteger("open", data); + + NBTTagList airBlocks = new NBTTagList(); + for (BlockVec3 vec : this.airToRestore) + { + NBTTagCompound tag = new NBTTagCompound(); + vec.writeToNBT(tag); + airBlocks.appendTag(tag); + } + nbt.setTag("air", airBlocks); + return nbt; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.world.isRemote) + { + return; + } + + int data = (this.openN ? 1 : 0) + (this.openW ? 2 : 0) + (this.openS ? 4 : 0) + (this.openE ? 8 : 0); + sendData.add((byte) data); + for (BlockVec3 vec : this.airToRestore) + { + sendData.add(vec); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world.isRemote) + { + try + { + int data = buffer.readByte(); + this.openN = (data & 1) == 1; + this.openW = (data & 2) == 2; + this.openS = (data & 4) == 4; + this.openE = (data & 8) == 8; + while (buffer.readableBytes() >= 12) + { + int x = buffer.readInt(); + int y = buffer.readInt(); + int z = buffer.readInt(); + this.airToRestore.add(new BlockVec3(x, y, z)); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request any networked information from server on first client + // update + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + private void updateClients() + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketDynamic(this), + new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), getPos().getX(), getPos().getY(), getPos().getZ(), 128)); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) + { + return oldState.getBlock() != newState.getBlock(); + } + + private void brightenAir(BlockPos blockpos, IBlockState newState) + { + Chunk chunk = this.world.getChunk(blockpos); + IBlockState oldState = chunk.setBlockState(blockpos, newState); + if (this.world.isRemote && oldState != null) + { + this.world.markAndNotifyBlock(blockpos, chunk, oldState, newState, 2); + } + // No block update on server - not necessary for changing air to air + // (also must not trigger a sealer edge check!) + this.airToRestore.add(new BlockVec3(blockpos)); + this.world.checkLightFor(EnumSkyBlock.BLOCK, blockpos); + this.markDirty(); + } + + private void setDarkerAir(BlockVec3 vec) + { + BlockPos blockpos = vec.toBlockPos(); + Block b = this.world.getBlockState(blockpos).getBlock(); + IBlockState newState; + if (b == GCBlocks.brightAir) + { + newState = Blocks.AIR.getDefaultState(); + } else if (b == GCBlocks.brightBreatheableAir) + { + newState = GCBlocks.breatheableAir.getDefaultState(); + } else + { + return; + } + + Chunk chunk = this.world.getChunk(blockpos); + IBlockState oldState = chunk.setBlockState(blockpos, newState); + if (this.world.isRemote && oldState != null) + this.world.markAndNotifyBlock(blockpos, chunk, oldState, newState, 2); + this.world.checkLightFor(EnumSkyBlock.BLOCK, blockpos); + } + + private void revertAir() + { + if (this.airToRestore.isEmpty()) + return; + + int index = 0; + for (BlockVec3 vec : this.airToRestore) + { + this.setDarkerAir(vec); + } + this.airToRestore.clear(); + this.markDirty(); + } + + @Override + public void invalidate() + { + this.revertAir(); + super.invalidate(); + } + + private void setLightBlocks() + { + this.setLightBlock(new BlockPos(this.pos.getX() - 6, this.pos.getY(), this.pos.getZ())); + this.setLightBlock(new BlockPos(this.pos.getX() + 6, this.pos.getY(), this.pos.getZ())); + this.setLightBlock(new BlockPos(this.pos.getX(), this.pos.getY(), this.pos.getZ() - 6)); + this.setLightBlock(new BlockPos(this.pos.getX(), this.pos.getY(), this.pos.getZ() + 6)); + this.setLightBlock(new BlockPos(this.pos.getX() - 5, this.pos.getY(), this.pos.getZ() - 5)); + this.setLightBlock(new BlockPos(this.pos.getX() - 5, this.pos.getY(), this.pos.getZ() + 5)); + this.setLightBlock(new BlockPos(this.pos.getX() + 5, this.pos.getY(), this.pos.getZ() + 5)); + this.setLightBlock(new BlockPos(this.pos.getX() + 5, this.pos.getY(), this.pos.getZ() - 5)); + } + + private boolean setLightBlock(BlockPos blockPos) + { + IBlockState bs = this.world.getBlockState(blockPos); + if (bs.getBlock() == Blocks.AIR) + { + this.brightenAir(blockPos, GCBlocks.brightAir.getDefaultState()); + return true; + } else if (bs.getBlock() == GCBlocks.breatheableAir) + { + this.brightenAir(blockPos, GCBlocks.brightBreatheableAir.getDefaultState()); + return true; + } + + blockPos = blockPos.up(1); + bs = this.world.getBlockState(blockPos); + if (bs.getBlock() == Blocks.AIR) + { + this.brightenAir(blockPos, GCBlocks.brightAir.getDefaultState()); + return true; + } else if (bs.getBlock() == GCBlocks.breatheableAir) + { + this.brightenAir(blockPos, GCBlocks.brightBreatheableAir.getDefaultState()); + return true; + } + + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEnergyStorageModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEnergyStorageModule.java new file mode 100644 index 00000000..356b2e60 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityEnergyStorageModule.java @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.api.item.IItemElectricBase; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineTiered; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; + +public class TileEntityEnergyStorageModule extends TileBaseUniversalElectricalSource implements ISidedInventory, IInventoryDefaults, IConnector, IMachineSides +{ + + private final static float BASE_CAPACITY = 500000; + private final static float TIER2_CAPACITY = 2500000; + + public final Set playersUsing = new HashSet(); + public int scaledEnergyLevel; + public int lastScaledEnergyLevel; + private float lastEnergy = 0; + + private boolean initialised = false; + + public TileEntityEnergyStorageModule() + { + this(1); + } + + /* + * @param tier: 1 = Electric Furnace 2 = Electric Arc Furnace + */ + public TileEntityEnergyStorageModule(int tier) + { + super(tier == 1 ? "tile.machine.1.name" : "tile.machine.8.name"); + this.initialised = true; + this.inventory = NonNullList.withSize(2, ItemStack.EMPTY); + if (tier == 1) + { + // Designed so that Tier 1 Energy Storage can power up to 10 Tier 1 + // machines + this.storage.setCapacity(BASE_CAPACITY); + this.storage.setMaxExtract(300); + return; + } + + this.setTier2(); + } + + private void setTier2() + { + this.storage.setCapacity(TIER2_CAPACITY); + this.storage.setMaxExtract(1800); + this.setTierGC(2); + } + + @Override + public void update() + { + if (!this.initialised) + { + int metadata = this.getBlockMetadata(); + + // for version update compatibility + Block b = this.world.getBlockState(this.getPos()).getBlock(); + if (b == GCBlocks.machineBase) + { + this.world.setBlockState(this.getPos(), GCBlocks.machineTiered.getDefaultState(), 2); + } else if (metadata >= 8) + { + this.setTier2(); + } + this.initialised = true; + } + + float energy = this.storage.getEnergyStoredGC(); + if (this.getTierGC() == 1 && !this.world.isRemote) + { + if (this.lastEnergy - energy > this.storage.getMaxExtract() - 1) + { + // Deplete faster if being drained at maximum output + this.storage.extractEnergyGC(25, false); + } + } + this.lastEnergy = energy; + + super.update(); + + this.scaledEnergyLevel = (int) Math.floor((this.getEnergyStoredGC() + 49) * 16 / this.getMaxEnergyStoredGC()); + + if (this.scaledEnergyLevel != this.lastScaledEnergyLevel) + { + this.world.notifyLightSet(this.getPos()); + } + + if (!this.world.isRemote) + { + this.recharge(this.getInventory().get(0)); + this.discharge(this.getInventory().get(1)); + } + + if (!this.world.isRemote) + { + this.produce(); + } + + this.lastScaledEnergyLevel = this.scaledEnergyLevel; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (this.storage.getEnergyStoredGC() > BASE_CAPACITY) + { + this.setTier2(); + this.initialised = true; + } else + { + this.initialised = false; + } + + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + if (this.tierGC == 1 && this.storage.getEnergyStoredGC() > BASE_CAPACITY) + { + this.storage.setEnergyStored(BASE_CAPACITY); + } + + super.writeToNBT(nbt); + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + + return nbt; + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } + +// @Override +// public int[] getAccessibleSlotsFromSide(int slotID) +// { +// return new int[] { 0, 1 }; +// } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (itemstack.getItem() instanceof IItemElectricBase) + { + if (slotID == 0) + { + return ((IItemElectricBase) itemstack.getItem()).getTransfer(itemstack) > 0; + } else if (slotID == 1) + { + return ((IItemElectricBase) itemstack.getItem()).getElectricityStored(itemstack) > 0; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (itemstack.getItem() instanceof IItemElectricBase) + { + if (slotID == 0) + { + return ((IItemElectricBase) itemstack.getItem()).getTransfer(itemstack) <= 0; + } else if (slotID == 1) + { + return ((IItemElectricBase) itemstack.getItem()).getElectricityStored(itemstack) <= 0 || this.getEnergyStoredGC() >= this.getMaxEnergyStoredGC(); + } + } + + return false; + + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.of(getElectricInputDirection()); + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(getElectricOutputDirection()); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + + return getElectricalInputDirections().contains(direction) || getElectricalOutputDirections().contains(direction); + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case LEFT: + return byIndex().rotateY(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case RIGHT: + default: + return byIndex().rotateYCCW(); + } + } + + @Override + public EnumFacing getElectricOutputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_OUT)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN, MachineSide.ELECTRIC_OUT}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.RIGHT, Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachineTiered.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFallenMeteor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFallenMeteor.java new file mode 100644 index 00000000..d7900c43 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFallenMeteor.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.List; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import io.netty.buffer.ByteBuf; + +public class TileEntityFallenMeteor extends TileEntityAdvanced +{ + + public static final int MAX_HEAT_LEVEL = 5000; + @NetworkedField(targetSide = Side.CLIENT) public int heatLevel = TileEntityFallenMeteor.MAX_HEAT_LEVEL; + private boolean sentOnePacket = false; + + public TileEntityFallenMeteor() + { + super("tile.fallenmeteor.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote && this.heatLevel > 0) + { + this.heatLevel--; + } + } + + public int getHeatLevel() + { + return this.heatLevel; + } + + public void setHeatLevel(int heatLevel) + { + this.heatLevel = heatLevel; + } + + public float getScaledHeatLevel() + { + return (float) this.heatLevel / TileEntityFallenMeteor.MAX_HEAT_LEVEL; + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + if (this.world.isRemote) + { + this.world.notifyLightSet(this.getPos()); + } + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + this.sentOnePacket = true; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.heatLevel = nbt.getInteger("MeteorHeatLevel"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("MeteorHeatLevel", this.heatLevel); + return nbt; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public double getPacketRange() + { + return 50; + } + + @Override + public int getPacketCooldown() + { + return this.sentOnePacket ? 100 : 1; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidPipe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidPipe.java new file mode 100644 index 00000000..28a15361 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidPipe.java @@ -0,0 +1,425 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.tile.IColorable; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidPipe; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; + +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.common.capabilities.Capabilities; + +@Interface(iface = "mekanism.api.gas.IGasHandler", modid = "mekanism") +public class TileEntityFluidPipe extends TileEntityFluidTransmitter implements IColorable, IGasHandler +{ + + public FluidTankGC buffer = new FluidTankGC(1000, this); + private boolean dataRequest = false; + private AxisAlignedBB renderAABB; + + public TileEntityFluidPipe() + { + super("tile.fluid_pipe.name", 100); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) + { + // Do not re-create tile entity if only the pipe's color changed! + if (oldState != newState) + { + return oldState.getBlock() != newState.getBlock(); + } + + return super.shouldRefresh(world, pos, oldState, newState); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + TileEntity adjacentTile = new BlockVec3(this).getTileEntityOnSide(this.world, direction); + + if (type == NetworkType.FLUID) + { + if (adjacentTile instanceof IColorable) + { + IBlockState state = this.world.getBlockState(this.getPos()); + IBlockState adjacentTileState = adjacentTile.getWorld().getBlockState(adjacentTile.getPos()); + byte thisCol = this.getColor(state); + byte otherCol = ((IColorable) adjacentTile).getColor(adjacentTileState); + return thisCol == otherCol || thisCol == EnumDyeColor.WHITE.getDyeDamage() || otherCol == EnumDyeColor.WHITE.getDyeDamage(); + } + + return true; + } + + return false; + } + + @Override + public double getPacketRange() + { + return 12.0D; + } + + @Override + public int getPacketCooldown() + { + return 5; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + this.world.notifyLightSet(getPos()); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_DATA, GCCoreUtil.getDimensionID(this.world), new Object[] {GCCoreUtil.getDimensionID(this.world), this.getPos()})); + } + } + + @Override + public void onColorUpdate() + { + if (this.world != null) + { + if (this.world.isRemote) + { + this.world.notifyLightSet(getPos()); + } else + { + this.getNetwork().split(this); + this.resetNetwork(); + } + } + } + + @Override + public byte getColor(IBlockState state) + { + if (state.getBlock() instanceof BlockFluidPipe) + { + return (byte) state.getValue(BlockFluidPipe.COLOR).getDyeDamage(); + } + return 15; + } + + @Override + public void onAdjacentColorChanged(EnumFacing direction) + { + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + + if (!this.world.isRemote) + { + this.refresh(); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) + { + super.writeToNBT(tagCompound); + if (this.buffer.getFluid() != null) + { + tagCompound.setTag("buff", this.buffer.writeToNBT(new NBTTagCompound())); + } + return tagCompound; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) + { + super.readFromNBT(tagCompound); + + if (tagCompound.hasKey("pipeColor")) + { + // Backwards compatibility + this.world.setBlockState(getPos(), this.world.getBlockState(getPos()).withProperty(BlockFluidPipe.COLOR, EnumDyeColor.byDyeDamage(tagCompound.getByte("pipeColor")))); + } + + if (tagCompound.hasKey("buff")) + { + this.buffer.readFromNBT(tagCompound.getCompoundTag("buff")); + } + } + + @Override + public FluidStack getBuffer() + { + return buffer.getFluid() == null ? null : buffer.getFluid(); + } + + @Override + public int getCapacity() + { + return 200; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + IGridNetwork network = this.getNetwork(); + if (network instanceof FluidNetwork) + { + FluidNetwork fluidNetwork = (FluidNetwork) network; + return fluidNetwork.emitToBuffer(resource, doFill); + } else + { + return this.buffer.fill(resource, doFill); + } + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + return true; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + return new FluidTankInfo[0]; + } + + public boolean switchType() + { + if (this.ticks < 10) + { + return false; + } + + Block block; + Block currentType = this.getBlockType(); + + if (!(currentType instanceof BlockFluidPipe)) + { + return false; + } + + switch (((BlockFluidPipe) currentType).getMode()) + { + case NORMAL: + block = GCBlocks.oxygenPipePull; + break; + default: + block = GCBlocks.oxygenPipe; + break; + } + + BlockFluidPipe.ignoreDrop = true; + this.world.setBlockState(pos, block.getStateFromMeta(currentType.getMetaFromState(this.world.getBlockState(pos)))); + BlockFluidPipe.ignoreDrop = false; + if (this.hasNetwork()) + { + this.refresh(); + this.getNetwork().refresh(); + } + + return true; + } + + @Override + public boolean canTransmit() + { + Block currentType = this.getBlockType(); + + if (!(currentType instanceof BlockFluidPipe)) + { + // Walkway blocks, etc + return true; + } + + return ((BlockFluidPipe) currentType).getMode() != BlockFluidPipe.EnumPipeMode.PULL; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 16384; // 128 squared + } + + @Override + @Optional.Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + String mekGas = stack.getGas().getName(); + if (mekGas == null) + { + return 0; + } + FluidStack mekEquivalent = null; + if (mekGas.equals("oxygen")) + { + mekEquivalent = new FluidStack(GCFluids.fluidOxygenGas, stack.amount); + } else if (mekGas.equals("hydrogen")) + { + mekEquivalent = new FluidStack(GCFluids.fluidHydrogenGas, stack.amount); + } else + { + return 0; + } + return this.fill(side, mekEquivalent, doTransfer); + } + + @Override + @Optional.Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Override + @Optional.Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return null; + } + + @Override + @Optional.Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount) + { + return null; + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return type.getName().equals("oxygen") || type.getName().equals("hydrogen"); + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing side, Gas type) + { + return false; + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing side) + { + return false; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (EnergyUtil.checkMekGasHandler(capability)) + return true; + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (EnergyUtil.checkMekGasHandler(capability)) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + + return super.getCapability(capability, facing); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTank.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTank.java new file mode 100644 index 00000000..c6086b1f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTank.java @@ -0,0 +1,444 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidEvent; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.DelayTimer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.ScheduledBlockChange; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +public class TileEntityFluidTank extends TileEntityAdvanced implements IFluidHandlerWrapper +{ + + public FluidTankGC fluidTank = new FluidTankGC(16000, this); + public boolean updateClient = false; + private DelayTimer delayTimer = new DelayTimer(1); + private AxisAlignedBB renderAABB; + + public TileEntityFluidTank() + { + super("tile.fluid_tank.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + public void onBreak() + { + if (fluidTank.getFluidAmount() > 0) + { + FluidEvent.fireEvent(new FluidEvent.FluidSpilledEvent(fluidTank.getFluid(), world, pos)); + if (!this.world.isRemote && fluidTank.getFluidAmount() > 1000) + { + Block b = fluidTank.getFluid().getFluid().getBlock(); + if (!(b == null || b instanceof BlockAir)) + { + TickHandlerServer.scheduleNewBlockChange(GCCoreUtil.getDimensionID(this.world), new ScheduledBlockChange(pos, b.getStateFromMeta(0), 3)); + } + } + } + } + + @Override + public void update() + { + super.update(); + + if (fluidTank.getFluid() != null) + { + moveFluidDown(); + } + + if (!this.world.isRemote && updateClient && delayTimer.markTimeIfDelay(this.world)) + { + PacketDynamic packet = new PacketDynamic(this); + GalacticraftCore.packetPipeline.sendToAllAround(packet, + new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), getPos().getX(), getPos().getY(), getPos().getZ(), this.getPacketRange())); + this.updateClient = false; + } + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + if (resource == null) + { + return 0; + } + + FluidStack copy = resource.copy(); + int totalUsed = 0; + TileEntityFluidTank toFill = getLastTank(); + + FluidStack fluid = toFill.fluidTank.getFluid(); + if (fluid != null && fluid.amount > 0 && !fluid.isFluidEqual(copy)) + { + return 0; + } + + while (toFill != null && copy.amount > 0) + { + int used = toFill.fluidTank.fill(copy, doFill); + if (used > 0) + { + toFill.updateClient = true; + } + copy.amount -= used; + totalUsed += used; + toFill = getNextTank(toFill.getPos()); + } + + return totalUsed; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + if (resource == null) + { + return null; + } + TileEntityFluidTank last = getLastTank(); + if (!resource.isFluidEqual(last.fluidTank.getFluid())) + { + return null; + } + return drain(from, resource.amount, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + TileEntityFluidTank last = getLastTank(); + FluidStack stack = last.fluidTank.drain(maxDrain, doDrain); + if (doDrain && stack != null && stack.amount > 0) + { + last.updateClient = true; + } + return stack; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + return fluidTank.getFluid() == null || fluidTank.getFluid().getFluid() == null || fluid == null || fluidTank.getFluid().getFluid() == fluid; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return fluid == null || fluidTank.getFluid() != null && fluidTank.getFluid().getFluid() == fluid; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTank compositeTank = new FluidTank(fluidTank.getCapacity()); + TileEntityFluidTank last = getLastTank(); + + if (last != null && last.fluidTank.getFluid() != null) + { + compositeTank.setFluid(last.fluidTank.getFluid().copy()); + } else + { + return new FluidTankInfo[] + {compositeTank.getInfo()}; + } + + int capacity = last.fluidTank.getCapacity(); + last = getNextTank(last.getPos()); + + while (last != null) + { + FluidStack fluid = last.fluidTank.getFluid(); + if (fluid == null || fluid.amount == 0) + { + + } else if (!compositeTank.getFluid().isFluidEqual(fluid)) + { + break; + } else + { + compositeTank.getFluid().amount += fluid.amount; + } + + capacity += last.fluidTank.getCapacity(); + last = getNextTank(last.getPos()); + } + + compositeTank.setCapacity(capacity); + return new FluidTankInfo[] + {compositeTank.getInfo()}; + } + + public void moveFluidDown() + { + TileEntityFluidTank next = getPreviousTank(this.getPos()); + if (next != null) + { + int used = next.fluidTank.fill(fluidTank.getFluid(), true); + + if (used > 0) + { + this.updateClient = true; + next.updateClient = true; + fluidTank.drain(used, true); + } + } + } + + public TileEntityFluidTank getLastTank() + { + TileEntityFluidTank lastTank = this; + + while (true) + { + TileEntityFluidTank tank = getPreviousTank(lastTank.getPos()); + if (tank != null) + { + lastTank = tank; + } else + { + break; + } + } + + return lastTank; + } + + public TileEntityFluidTank getNextTank(BlockPos current) + { + TileEntity above = this.world.getTileEntity(current.up()); + if (above instanceof TileEntityFluidTank) + { + return (TileEntityFluidTank) above; + } + return null; + } + + public TileEntityFluidTank getPreviousTank(BlockPos current) + { + TileEntity below = this.world.getTileEntity(current.down()); + if (below instanceof TileEntityFluidTank) + { + return (TileEntityFluidTank) below; + } + return null; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if (nbt.hasKey("fluidTank")) + { + fluidTank.readFromNBT(nbt.getCompoundTag("fluidTank")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + if (fluidTank.getFluid() != null) { + nbt.setTag("fluidTank", fluidTank.writeToNBT(new NBTTagCompound())); + } + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public SPacketUpdateTileEntity getUpdatePacket() + { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("net-type", "desc-packet"); + PacketDynamic packet = new PacketDynamic(this); + ByteBuf buf = Unpooled.buffer(); + packet.encodeInto(buf); + byte[] bytes = new byte[buf.readableBytes()]; + buf.readBytes(bytes); + nbt.setByteArray("net-data", bytes); + SPacketUpdateTileEntity tileUpdate = new SPacketUpdateTileEntity(getPos(), 0, nbt); + return tileUpdate; + } + + @Override + @SideOnly(Side.CLIENT) + public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) + { + if (!this.world.isRemote) + { + return; + } + if (pkt.getNbtCompound() == null) + { + throw new RuntimeException("[GC] Missing NBTTag compound!"); + } + NBTTagCompound nbt = pkt.getNbtCompound(); + try + { + if ("desc-packet".equals(nbt.getString("net-type"))) + { + byte[] bytes = nbt.getByteArray("net-data"); + ByteBuf data = Unpooled.wrappedBuffer(bytes); + PacketDynamic packet = new PacketDynamic(); + packet.decodeInto(data); + packet.handleClientSide(FMLClientHandler.instance().getClientPlayerEntity()); + } + } catch (Throwable t) + { + throw new RuntimeException("[GC] Failed to read a packet! (" + nbt.getTag("net-type") + ", " + nbt.getTag("net-data"), t); + } + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + if (!this.world.isRemote) + { + if (fluidTank == null) + { + networkedList.add(0); + networkedList.add(""); + networkedList.add(0); + } else + { + networkedList.add(fluidTank.getCapacity()); + networkedList.add(fluidTank.getFluid() == null ? "" : fluidTank.getFluid().getFluid().getName()); + networkedList.add(fluidTank.getFluidAmount()); + } + } + } + + @Override + public void readExtraNetworkedData(ByteBuf buffer) + { + if (this.world.isRemote) + { + int capacity = buffer.readInt(); + String fluidName = ByteBufUtils.readUTF8String(buffer); + FluidTankGC fluidTank = new FluidTankGC(capacity, this); + int amount = buffer.readInt(); + + if (fluidName.equals("")) + { + fluidTank.setFluid(null); + } else + { + Fluid fluid = FluidRegistry.getFluid(fluidName); + fluidTank.setFluid(new FluidStack(fluid, amount)); + } + + this.fluidTank = fluidTank; + } + } + + @Override + public double getPacketRange() + { + return 40; + } + + @Override + public int getPacketCooldown() + { + return 1; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } + + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTransmitter.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTransmitter.java new file mode 100644 index 00000000..5c14afbd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFluidTransmitter.java @@ -0,0 +1,329 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.grid.IOxygenNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.blocks.BlockFluidPipe; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerServer; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; + +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; + +public abstract class TileEntityFluidTransmitter extends TileEntityAdvanced implements IBufferTransmitter, IFluidHandlerWrapper +{ + + private IGridNetwork network; + public TileEntity[] adjacentConnections = null; + private int pullAmount; + private boolean validated = true; + + public TileEntityFluidTransmitter(String tileName, int pullAmount) + { + super(tileName); + this.pullAmount = pullAmount; + } + + @Override + public void validate() + { + this.validated = false; + super.validate(); + } + + @Override + public void invalidate() + { + if (!BlockFluidPipe.ignoreDrop) + { + this.getNetwork().split(this); + } + + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + super.invalidate(); + super.onChunkUnload(); + } + + @Override + public IGridNetwork getNetwork() + { + if (this.network == null) + { + this.resetNetwork(); + } + + return this.network; + } + + @Override + public boolean hasNetwork() + { + return this.network != null; + } + + @Override + public void onNetworkChanged() + { + this.world.markBlockRangeForRenderUpdate(this.getPos(), this.getPos()); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + if (!this.validated) + { + TickHandlerServer.oxygenTransmitterUpdates.add(this); + this.validated = true; + } + + Block blockType = this.getBlockType(); + if (blockType instanceof BlockFluidPipe && ((BlockFluidPipe) blockType).getMode() == BlockFluidPipe.EnumPipeMode.PULL) + { + TileEntity[] tiles = OxygenUtil.getAdjacentFluidConnections(this); + + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity sideTile = tiles[side.ordinal()]; + + if (sideTile != null && !(sideTile instanceof IBufferTransmitter)) + { + IFluidHandler handler = sideTile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side.getOpposite()); + + if (handler != null) + { + FluidStack received = handler.drain(this.pullAmount, false); + + if (received != null && received.amount != 0) + { + handler.drain(this.fill(EnumFacing.DOWN, received, true), true); + } + } + } + } + } + } + + super.update(); + } + + protected void resetNetwork() + { + FluidNetwork network = new FluidNetwork(); + network.addTransmitter(this); + network.register(); + this.setNetwork(network); + } + + @Override + public void setNetwork(IGridNetwork network) + { + if (this.network == network) + { + return; + } + + if (this.world.isRemote && this.network != null) + { + FluidNetwork fluidNetwork = (FluidNetwork) this.network; + fluidNetwork.removeTransmitter(this); + + if (fluidNetwork.getTransmitters().isEmpty()) + { + fluidNetwork.unregister(); + } + } + + this.network = network; + + if (this.world.isRemote && this.network != null) + { + ((FluidNetwork) this.network).pipes.add(this); + } + } + + @Override + public void refresh() + { + if (!this.world.isRemote) + { + this.adjacentConnections = null; + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity != null) + { + if (tileEntity.getClass() == this.getClass() && tileEntity instanceof INetworkProvider && ((INetworkProvider) tileEntity).hasNetwork()) + { + if (!(tileEntity instanceof ITransmitter) || (((ITransmitter) tileEntity).canConnect(side.getOpposite(), ((ITransmitter) tileEntity).getNetworkType()))) + { + if (!this.hasNetwork()) + { + this.setNetwork(((INetworkProvider) tileEntity).getNetwork()); + ((FluidNetwork) this.getNetwork()).addTransmitter(this); + ((FluidNetwork) this.getNetwork()).onTransmitterAdded(this); + } else if (this.hasNetwork() && !this.getNetwork().equals(((INetworkProvider) tileEntity).getNetwork())) + { + this.setNetwork((IGridNetwork) this.getNetwork().merge(((INetworkProvider) tileEntity).getNetwork())); + } + } + } + } + } + + this.getNetwork().refresh(); + } + } + + @Override + public TileEntity[] getAdjacentConnections() + { + /** + * Cache the adjacentConnections. + */ + if (this.adjacentConnections == null) + { + this.adjacentConnections = OxygenUtil.getAdjacentFluidConnections(this, this.world.isRemote); + } + + return this.adjacentConnections; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.FLUID; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getPos().getX() + 1, this.getPos().getY() + 1, this.getPos().getZ() + 1); + } + + @Override + public NetworkType getNetworkType() + { + return NetworkType.FLUID; + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + if (!stack.getGas().getName().equals("oxygen")) + { + return 0; + } + return stack.amount - (int) Math.floor(((IOxygenNetwork) this.getNetwork()).produce(stack.amount, this)); + } + + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return null; + } + + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount) + { + return null; + } + + @Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing side, Gas type) + { + return false; + } + + @Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return type.getName().equals("oxygen"); + } + + @Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing side) + { + return this.canConnect(side, NetworkType.FLUID); + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFuelLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFuelLoader.java new file mode 100644 index 00000000..5a34886c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityFuelLoader.java @@ -0,0 +1,406 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import javax.annotation.Nullable; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.IFuelable; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockFuelLoader; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; + +public class TileEntityFuelLoader extends TileBaseElectricBlockWithInventory implements ISidedInventory, IFluidHandlerWrapper, ILandingPadAttachable, IMachineSides +{ + + private final int tankCapacity = 12000; + @NetworkedField(targetSide = Side.CLIENT) public FluidTank fuelTank = new FluidTank(this.tankCapacity); + public IFuelable attachedFuelable; + private boolean loadedFuelLastTick = false; + + public TileEntityFuelLoader() + { + super("container.fuelloader.name"); + this.storage.setMaxExtract(30); + this.inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + public int getScaledFuelLevel(int i) + { + final double fuelLevel = this.fuelTank.getFluid() == null ? 0 : this.fuelTank.getFluid().amount; + + return (int) (fuelLevel * i / this.tankCapacity); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + this.loadedFuelLastTick = false; + + final FluidStack liquidContained = FluidUtil.getFluidContained(this.getInventory().get(1)); + if (FluidUtil.isFuel(liquidContained)) + { + FluidUtil.loadFromContainer(this.fuelTank, GCFluids.fluidFuel, this.getInventory(), 1, liquidContained.amount); + } + + if (this.ticks % 100 == 0) + { + this.attachedFuelable = null; + + BlockVec3 thisVec = new BlockVec3(this); + for (final EnumFacing dir : EnumFacing.VALUES) + { + final TileEntity pad = thisVec.getTileEntityOnSide(this.world, dir); + + if (pad instanceof TileEntityMulti) + { + final TileEntity mainTile = ((TileEntityMulti) pad).getMainBlockTile(); + + if (mainTile instanceof IFuelable) + { + this.attachedFuelable = (IFuelable) mainTile; + break; + } + } else if (pad instanceof IFuelable) + { + this.attachedFuelable = (IFuelable) pad; + break; + } + } + + } + + if (this.fuelTank != null && this.fuelTank.getFluid() != null && this.fuelTank.getFluid().amount > 0) + { + final FluidStack liquid = new FluidStack(GCFluids.fluidFuel, 2); + + if (this.attachedFuelable != null && this.hasEnoughEnergyToRun && !this.disabled) + { + int filled = this.attachedFuelable.addFuel(liquid, true); + this.loadedFuelLastTick = filled > 0; + this.fuelTank.drain(filled, true); + } + } + } + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + + if (par1NBTTagCompound.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(par1NBTTagCompound.getCompoundTag("fuelTank")); + } + + this.readMachineSidesFromNBT(par1NBTTagCompound); // Needed by + // IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + + return nbt; + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return this.isItemValidForSlot(slotID, itemstack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (slotID == 1 && !itemstack.isEmpty()) + { + return FluidUtil.isEmptyContainer(itemstack); + } + return false; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return (slotID == 1 && itemstack != null && itemstack.getItem() == GCItems.fuelCanister) || (slotID == 0 ? ItemElectricBase.isElectricItem(itemstack.getItem()) : false); + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (this.getPipeInputDirection().equals(from)) + { + return this.fuelTank.getFluid() == null || this.fuelTank.getFluidAmount() < this.fuelTank.getCapacity(); + } + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (this.getPipeInputDirection().equals(from) && resource != null) + { + if (FluidUtil.testFuel(FluidRegistry.getFluidName(resource))) + { + used = this.fuelTank.fill(resource, doFill); + } + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + if (this.getPipeInputDirection().equals(from)) + { + return new FluidTankInfo[] + {new FluidTankInfo(this.fuelTank)}; + } + return null; + } + + @Override + public boolean shouldUseEnergy() + { + return this.fuelTank.getFluid() != null && this.fuelTank.getFluid().amount > 0 && !this.getDisabled(0) && loadedFuelLastTick; + } + + @Override + public boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockFuelLoader) + { + return state.getValue(BlockFuelLoader.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + if (type == NetworkType.FLUID) + { + return direction == this.getPipeInputDirection(); + } + return false; + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + @Override + public EnumFacing getPipeInputDirection() + { + switch (this.getSide(MachineSide.PIPE_IN)) + { + case RIGHT: + default: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + return byIndex().rotateY(); + } + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN, MachineSide.PIPE_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT, Face.RIGHT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockFuelLoader.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityIngotCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityIngotCompressor.java new file mode 100644 index 00000000..5606c77c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityIngotCompressor.java @@ -0,0 +1,578 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.api.recipe.ShapedRecipesGC; +import micdoodle8.mods.galacticraft.api.recipe.ShapelessOreRecipeGC; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.inventory.PersistantInventoryCrafting; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityIngotCompressor extends TileEntityAdvanced implements IInventoryDefaults, ISidedInventory +{ + + public static final int PROCESS_TIME_REQUIRED = 200; + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + @NetworkedField(targetSide = Side.CLIENT) public int furnaceBurnTime = 0; + @NetworkedField(targetSide = Side.CLIENT) public int currentItemBurnTime = 0; + private long ticks; + + private ItemStack producingStack = ItemStack.EMPTY; + public PersistantInventoryCrafting compressingCraftMatrix = new PersistantInventoryCrafting(); + public final Set playersUsing = new HashSet(); + private static Random random = new Random(); + + public TileEntityIngotCompressor() + { + super("tile.machine.3.name"); + inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + boolean updateInv = false; + boolean flag = this.furnaceBurnTime > 0; + + if (this.furnaceBurnTime > 0) + { + --this.furnaceBurnTime; + } + + if (this.furnaceBurnTime == 0 && this.canSmelt()) + { + ItemStack fuel = this.getInventory().get(0); + this.currentItemBurnTime = this.furnaceBurnTime = TileEntityFurnace.getItemBurnTime(fuel); + + if (this.furnaceBurnTime > 0) + { + updateInv = true; + + if (!fuel.isEmpty()) + { + fuel.shrink(1); + + if (fuel.getCount() == 0) + { + this.getInventory().set(0, fuel.getItem().getContainerItem(fuel)); + } + } + } + } + + if (this.furnaceBurnTime > 0 && this.canSmelt()) + { + ++this.processTicks; + + if (this.processTicks % 40 == 0 && this.processTicks > TileEntityIngotCompressor.PROCESS_TIME_REQUIRED / 2) + { + this.world.playSound(null, this.getPos(), SoundEvents.BLOCK_ANVIL_LAND, SoundCategory.BLOCKS, 0.3F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.processTicks == TileEntityIngotCompressor.PROCESS_TIME_REQUIRED) + { + this.processTicks = 0; + this.smeltItem(); + updateInv = true; + } + } else + { + this.processTicks = 0; + } + + if (flag != this.furnaceBurnTime > 0) + { + updateInv = true; + } + + if (updateInv) + { + this.markDirty(); + } + } + + this.ticks++; + } + + public void updateInput() + { + this.producingStack = CompressorRecipes.findMatchingRecipe(this.compressingCraftMatrix, this.world); + } + + private boolean canSmelt() + { + ItemStack itemstack = this.producingStack; + if (itemstack.isEmpty()) + { + return false; + } + if (this.getInventory().get(1).isEmpty()) + { + return true; + } + if (!this.getInventory().get(1).isItemEqual(itemstack)) + { + return false; + } + int result = this.getInventory().get(1).getCount() + itemstack.getCount(); + return result <= this.getInventoryStackLimit() && result <= itemstack.getMaxStackSize(); + } + + public static boolean isItemCompressorInput(ItemStack stack) + { + for (IRecipe recipe : CompressorRecipes.getRecipeList()) + { + if (recipe instanceof ShapedRecipesGC) + { + for (ItemStack itemstack1 : ((ShapedRecipesGC) recipe).recipeItems) + { + if (stack.getItem() == itemstack1.getItem() && (itemstack1.getItemDamage() == 32767 || stack.getItemDamage() == itemstack1.getItemDamage())) + { + return true; + } + } + } else if (recipe instanceof ShapelessOreRecipeGC) + { + ArrayList required = new ArrayList(((ShapelessOreRecipeGC) recipe).getInput()); + + Iterator req = required.iterator(); + + int match = 0; + + while (req.hasNext()) + { + Object next = req.next(); + + if (next instanceof ItemStack) + { + if (OreDictionary.itemMatches((ItemStack) next, stack, false)) + { + match++; + } + } else if (next instanceof List) + { + for (ItemStack itemStack : ((List) next)) + { + if (OreDictionary.itemMatches(itemStack, stack, false)) + { + match++; + break; + } + } + } + } + + if (match == 0) + { + continue; + } + + if (match == 1) + { + return true; + } + + return random.nextInt(match) == 0; + } + } + + return false; + } + + private void smeltItem() + { + if (this.canSmelt()) + { + ItemStack resultItemStack = this.producingStack; + if (ConfigManagerCore.quickMode) + { + if (resultItemStack.getItem().getTranslationKey(resultItemStack).contains("compressed")) + { + resultItemStack.grow(resultItemStack.getCount()); + } + } + + if (this.getInventory().get(1).isEmpty()) + { + this.getInventory().set(1, resultItemStack.copy()); + } else if (this.getInventory().get(1).isItemEqual(resultItemStack)) + { + if (this.getInventory().get(1).getCount() + resultItemStack.getCount() > 64) + { + resultItemStack.grow(this.getInventory().get(1).getCount() - 64); + GCCoreUtil.spawnItem(this.world, this.getPos(), resultItemStack); + this.getInventory().get(1).setCount(64); + } else + { + this.getInventory().get(1).grow(resultItemStack.getCount()); + } + } + + for (int i = 0; i < this.compressingCraftMatrix.getSizeInventory(); i++) + { + if (!this.compressingCraftMatrix.getStackInSlot(i).isEmpty() && this.compressingCraftMatrix.getStackInSlot(i).getItem() == Items.WATER_BUCKET) + { + this.compressingCraftMatrix.setInventorySlotContentsNoUpdate(i, new ItemStack(Items.BUCKET)); + } else + { + this.compressingCraftMatrix.decrStackSize(i, 1); + } + } + this.updateInput(); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + NBTTagList var2 = nbt.getTagList("Items", 10); + + this.inventory = NonNullList.withSize(this.getSizeInventory() - this.compressingCraftMatrix.getSizeInventory(), ItemStack.EMPTY); + + NBTTagList nbttaglist = nbt.getTagList("Items", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + int j = nbttagcompound.getByte("Slot") & 255; + + if (j >= 0 && j < this.getInventory().size()) + { + this.getInventory().set(j, new ItemStack(nbttagcompound)); + } else if (j < this.getInventory().size() + this.compressingCraftMatrix.getSizeInventory()) + { + this.compressingCraftMatrix.setInventorySlotContents(j - this.getInventory().size(), new ItemStack(nbttagcompound)); + } + } + + this.updateInput(); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + NBTTagList var2 = new NBTTagList(); + int i; + + for (i = 0; i < this.getInventory().size(); ++i) + { + if (!this.getInventory().get(i).isEmpty()) + { + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setByte("Slot", (byte) i); + this.getInventory().get(i).writeToNBT(tagCompound); + var2.appendTag(tagCompound); + } + } + + for (i = 0; i < this.compressingCraftMatrix.getSizeInventory(); ++i) + { + if (!this.compressingCraftMatrix.getStackInSlot(i).isEmpty()) + { + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setByte("Slot", (byte) (i + this.getInventory().size())); + this.compressingCraftMatrix.getStackInSlot(i).writeToNBT(tagCompound); + var2.appendTag(tagCompound); + } + } + + nbt.setTag("Items", var2); + return nbt; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public int getSizeInventory() + { + return super.getSizeInventory() + this.compressingCraftMatrix.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + if (par1 >= this.getInventory().size()) + { + return this.compressingCraftMatrix.getStackInSlot(par1 - this.getInventory().size()); + } + + return this.getInventory().get(par1); + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (par1 >= this.getInventory().size()) + { + ItemStack result = this.compressingCraftMatrix.decrStackSize(par1 - this.getInventory().size(), par2); + if (!result.isEmpty()) + { + this.updateInput(); + } + this.markDirty(); + return result; + } + + if (!this.getInventory().get(par1).isEmpty()) + { + ItemStack var3; + + if (this.getInventory().get(par1).getCount() <= par2) + { + var3 = this.getInventory().get(par1); + this.getInventory().set(par1, ItemStack.EMPTY); + this.markDirty(); + return var3; + } else + { + var3 = this.getInventory().get(par1).splitStack(par2); + + if (this.getInventory().get(par1).isEmpty()) + { + this.getInventory().set(par1, ItemStack.EMPTY); + } + + this.markDirty(); + return var3; + } + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (par1 >= this.getInventory().size()) + { + this.markDirty(); + return this.compressingCraftMatrix.removeStackFromSlot(par1 - this.getInventory().size()); + } + + if (!this.getInventory().get(par1).isEmpty()) + { + ItemStack var2 = this.getInventory().get(par1); + this.getInventory().set(par1, ItemStack.EMPTY); + this.markDirty(); + return var2; + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public void setInventorySlotContents(int par1, ItemStack stack) + { + if (par1 >= this.getInventory().size()) + { + this.compressingCraftMatrix.setInventorySlotContents(par1 - this.getInventory().size(), stack); + this.updateInput(); + } else + { + this.getInventory().set(par1, stack); + + if (!stack.isEmpty() && stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + } + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.getInventory()) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return this.world.getTileEntity(this.getPos()) == this && entityPlayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + +// @Override +// public boolean hasCustomName() +// { +// return true; +// } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + if (slotID == 0) + { + return TileEntityFurnace.getItemBurnTime(itemStack) > 0; + } else if (slotID >= 2) + { + if (!this.producingStack.isEmpty()) + { + ItemStack stackInSlot = this.getStackInSlot(slotID); + return !stackInSlot.isEmpty() && stackInSlot.isItemEqual(itemStack); + } + return TileEntityIngotCompressor.isItemCompressorInput(itemStack); + } + + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return new int[] + {1}; + } + int[] slots = new int[] + {0, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + ArrayList removeSlots = new ArrayList<>(); + + for (int i = 2; i < 11; i++) + { + if (removeSlots.contains(i)) + { + continue; + } + ItemStack stack1 = this.getStackInSlot(i); + if (stack1.isEmpty()) + { + continue; + } + + for (int j = i + 1; j < 11; j++) + { + if (removeSlots.contains(j)) + { + continue; + } + ItemStack stack2 = this.getStackInSlot(j); + if (stack2.isEmpty()) + { + continue; + } + + if (stack1.isItemEqual(stack2)) + { + if (stack2.getCount() >= stack1.getCount()) + { + removeSlots.add(j); + } else + { + removeSlots.add(i); + } + break; + } + } + } + + if (removeSlots.size() > 0) + { + int[] returnSlots = new int[slots.length - removeSlots.size()]; + int j = 0; + for (int i = 0; i < slots.length; i++) + { + if (i > 0 && removeSlots.contains(slots[i])) + { + continue; + } + returnSlots[j] = slots[i]; + j++; + } + + return returnSlots; + } + + return slots; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 1; + } + + @Override + public double getPacketRange() + { + return 12.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityInventory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityInventory.java new file mode 100644 index 00000000..c1cf5c80 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityInventory.java @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.HashMap; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.SidedInvWrapper; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public abstract class TileEntityInventory extends TileEntity implements ISidedInventory +{ + + public NonNullList inventory; + private HashMap itemHandlers = new HashMap<>(); + private String tileName; + + public TileEntityInventory(String tileName) + { + this.tileName = tileName; + } + + public NonNullList getInventory() + { + return inventory; + } + + protected boolean handleInventory() + { + return true; + } + + @Override + public boolean isEmpty() + { + if(inventory == null) { return true; } + return getInventory().isEmpty(); + } + + @Override + public void readFromNBT(NBTTagCompound tags) + { + super.readFromNBT(tags); + + if (handleInventory()) + { + NonNullList stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(tags, stacks); + inventory = stacks; + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tags) + { + super.writeToNBT(tags); + + if (handleInventory()) + { + ItemStackHelper.saveAllItems(tags, getInventory()); + } + + return tags; + } + + @Override + public int getSizeInventory() + { + return getInventory() == null ? 0 : getInventory().size(); + } + + @Override + public ItemStack getStackInSlot(int slot) + { + return getInventory() == null ? ItemStack.EMPTY : getInventory().get(slot); + } + + @Override + public ItemStack decrStackSize(int slot, int amount) + { + if (getInventory() == null) + { + return ItemStack.EMPTY; + } + + return ItemStackHelper.getAndSplit(getInventory(), slot, amount); + } + + @Override + public ItemStack removeStackFromSlot(int slot) + { + if (getInventory() == null) + { + return ItemStack.EMPTY; + } + + return ItemStackHelper.getAndRemove(getInventory(), slot); + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + getInventory().set(slot, stack); + if (!stack.isEmpty() && stack.getCount() > getInventoryStackLimit()) + { + stack.setCount(getInventoryStackLimit()); + } + markDirty(); + } + + @Override + public boolean isUsableByPlayer(EntityPlayer player) + { + return !isInvalid() && this.world.isBlockLoaded(this.pos); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) + { + return true; + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side) + { + return isItemValidForSlot(slot, stack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side) + { + return true; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing side) + { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, side); + } + + @Override + public T getCapability(Capability capability, EnumFacing side) + { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + IItemHandler handler = itemHandlers.get(side); + if (handler == null) + { + handler = new SidedInvWrapper(this, side); + itemHandlers.put(side, handler); + } + return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(handler); + } + + return super.getCapability(capability, side); + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + for (int i = 0; i < this.getInventory().size(); ++i) + { + this.getInventory().set(i, ItemStack.EMPTY); + } + } + + /** + * Override this and return true IF the inventory .getName() is ALREADY a + * localized name e.g. by GCCoreUtil.translate() + * + **/ + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } + + @Override + public String getName() + { + return GCCoreUtil.translate(tileName); + } + + @Override + public synchronized void handleUpdateTag(NBTTagCompound tag) + { + this.readFromNBT(tag); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPad.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPad.java new file mode 100644 index 00000000..bed93dea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPad.java @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.ICargoEntity; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.entity.IFuelable; +import micdoodle8.mods.galacticraft.api.entity.ILandable; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; + +public class TileEntityLandingPad extends TileEntityMulti implements IMultiBlock, IFuelable, IFuelDock, ICargoEntity +{ + + public TileEntityLandingPad() + { + super(null); + } + + private IDockable dockedEntity; + private boolean initialised; + + @Override + public void update() + { + if (!this.initialised) + { + if (!this.world.isRemote) + this.onCreate(this.world, this.getPos()); + this.initialiseMultiTiles(this.getPos(), this.world); + this.initialised = true; + } + + if (!this.world.isRemote) + { + final List list = this.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(this.getPos().getX() - 0.5D, this.getPos().getY(), this.getPos().getZ() - 0.5D, this.getPos().getX() + 0.5D, this.getPos().getY() + 1.0D, this.getPos().getZ() + 0.5D)); + + boolean docked = false; + + for (final Object o : list) + { + if (o instanceof IDockable && !((Entity) o).isDead) + { + final IDockable fuelable = (IDockable) o; + + if (!fuelable.inFlight()) + { + docked = true; + + if (fuelable != this.dockedEntity && fuelable.isDockValid(this)) + { + if (fuelable instanceof ILandable) + { + ((ILandable) fuelable).landEntity(this.getPos()); + } + else + { + fuelable.setPad(this); + } + } + + break; + } + } + } + + if (!docked) + { + this.dockedEntity = null; + } + } + } + + // @Override + // public boolean canUpdate() + // { + // return true; + // } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + + List positions = new ArrayList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.ROCKET_PAD; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int y = placedPosition.getY(); + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + if (x == 0 && z == 0) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.ROCKET_PAD) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + + if (this.dockedEntity != null) + { + this.dockedEntity.onPadDestroyed(); + this.dockedEntity = null; + } + + } + + @Override + public int addFuel(FluidStack liquid, boolean doFill) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.addFuel(liquid, doFill); + } + + return 0; + } + + @Override + public FluidStack removeFuel(int amount) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.removeFuel(amount); + } + + return null; + } + + @Override + public HashSet getConnectedTiles() + { + HashSet connectedTiles = new HashSet<>(); + + for (int x = this.getPos().getX() - 1; x < this.getPos().getX() + 2; x++) + { + this.testConnectedTile(x, this.getPos().getZ() - 2, connectedTiles); + this.testConnectedTile(x, this.getPos().getZ() + 2, connectedTiles); + } + + for (int z = this.getPos().getZ() - 1; z < this.getPos().getZ() + 2; z++) + { + this.testConnectedTile(this.getPos().getX() - 2, z, connectedTiles); + this.testConnectedTile(this.getPos().getX() + 2, z, connectedTiles); + } + + return connectedTiles; + } + + private void testConnectedTile(int x, int z, HashSet connectedTiles) + { + BlockPos testPos = new BlockPos(x, this.getPos().getY(), z); + if (!this.world.isBlockLoaded(testPos, false)) + return; + + final TileEntity tile = this.world.getTileEntity(testPos); + + if (tile instanceof ILandingPadAttachable && ((ILandingPadAttachable) tile).canAttachToLandingPad(this.world, this.getPos())) + { + connectedTiles.add((ILandingPadAttachable) tile); + if (tile instanceof TileEntityLaunchController) + { + ((TileEntityLaunchController) tile).setAttachedPad(this); + } + } + } + + @Override + public EnumCargoLoadingState addCargo(ItemStack stack, boolean doAdd) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.addCargo(stack, doAdd); + } + + return EnumCargoLoadingState.NOTARGET; + } + + @Override + public RemovalResult removeCargo(boolean doRemove) + { + if (this.dockedEntity != null) + { + return this.dockedEntity.removeCargo(doRemove); + } + + return new RemovalResult(EnumCargoLoadingState.NOTARGET, ItemStack.EMPTY); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(getPos().getX() - 1, getPos().getY(), getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 0.4D, getPos().getZ() + 2); + } + + @Override + public boolean isBlockAttachable(IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile != null && tile instanceof ILandingPadAttachable) + { + return ((ILandingPadAttachable) tile).canAttachToLandingPad(world, this.getPos()); + } + + return false; + } + + @Override + public IDockable getDockedEntity() + { + return this.dockedEntity; + } + + @Override + public void dockEntity(IDockable entity) + { + this.dockedEntity = entity; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPadSingle.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPadSingle.java new file mode 100644 index 00000000..a3776f75 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityLandingPadSingle.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; + +public class TileEntityLandingPadSingle extends TileEntity implements ITickable +{ + + private int corner = 0; + + @Override + public void update() + { + if (!this.world.isRemote && this.corner == 0) + { + final ArrayList attachedLaunchPads = new ArrayList<>(); + + for (int x = this.getPos().getX() - 1; x < this.getPos().getX() + 2; x++) + { + for (int z = this.getPos().getZ() - 1; z < this.getPos().getZ() + 2; z++) + { + final TileEntity tile = this.world.getTileEntity(new BlockPos(x, this.getPos().getY(), z)); + + if (tile instanceof TileEntityLandingPadSingle && !tile.isInvalid() && ((TileEntityLandingPadSingle) tile).corner == 0) + { + attachedLaunchPads.add(tile); + } + } + } + + if (attachedLaunchPads.size() == 9) + { + for (final TileEntity tile : attachedLaunchPads) + { + this.world.markTileEntityForRemoval(tile); + ((TileEntityLandingPadSingle) tile).corner = 1; + } + + this.world.setBlockState(this.getPos(), GCBlocks.landingPadFull.getDefaultState(), 2); + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityMulti.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityMulti.java new file mode 100644 index 00000000..12700357 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityMulti.java @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvanced; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; + +public class TileEntityMulti extends TileEntity +{ + // NOTE: No need for networking in 1.8+: see comment in + // initialiseMultiTiles() + + // The the position of the main block + public BlockPos mainBlockPosition; + + public TileEntityMulti() + { + + } + + public TileEntityMulti(BlockPos mainBlockPosition) + { + this.mainBlockPosition = mainBlockPosition; + } + + public void onBlockRemoval() + { + if (this.mainBlockPosition != null) + { + TileEntity tileEntity = this.world.getTileEntity(this.mainBlockPosition); + + if (tileEntity instanceof IMultiBlock) + { + IMultiBlock mainBlock = (IMultiBlock) tileEntity; + mainBlock.onDestroy(this); + } + } + } + + public boolean onBlockActivated(World worldIn, BlockPos pos, EntityPlayer player) + { + if (this.mainBlockPosition != null) + { + TileEntity tileEntity = this.world.getTileEntity(this.mainBlockPosition); + + if (tileEntity instanceof IMultiBlock) + { + return ((IMultiBlock) tileEntity).onActivated(player); + } + } + + return false; + } + + public boolean onBlockWrenched(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (this.mainBlockPosition != null) + { + IBlockState state = this.world.getBlockState(this.mainBlockPosition); + + if (state.getBlock() instanceof BlockAdvanced) + { + return ((BlockAdvanced) state.getBlock()).onBlockActivated(world, this.mainBlockPosition, state, entityPlayer, hand, side, hitX, hitY, hitZ); + } + } + + return false; + } + + public TileEntity getMainBlockTile() + { + if (this.mainBlockPosition != null) + { + return this.world.getTileEntity(this.mainBlockPosition); + } + + return null; + } + + /** + * Reads a tile entity from NBT. + */ + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + NBTTagCompound tag = nbt.getCompoundTag("mainBlockPosition"); + this.mainBlockPosition = new BlockPos(tag.getInteger("x"), tag.getInteger("y"), tag.getInteger("z")); + } + + /** + * Writes a tile entity to NBT. + */ + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + if (this.mainBlockPosition != null) + { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("x", this.mainBlockPosition.getX()); + tag.setInteger("y", this.mainBlockPosition.getY()); + tag.setInteger("z", this.mainBlockPosition.getZ()); + nbt.setTag("mainBlockPosition", tag); + } + + return nbt; + } + + protected boolean initialiseMultiTiles(BlockPos pos, World world) + { + IMultiBlock thisTile = (IMultiBlock) this; + + // Client can create its own fake blocks and tiles - no need for + // networking in 1.8+ + if (world.isRemote) + { + thisTile.onCreate(world, pos); + } + + List positions = new ArrayList<>(); + thisTile.getPositions(pos, positions); + boolean result = true; + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMulti) + { + ((TileEntityMulti) tile).mainBlockPosition = pos; + } else if (tile == null) + { + Block b = world.getBlockState(vecToAdd).getBlock(); + if (!(b instanceof BlockMulti)) + { + world.setBlockState(vecToAdd, GCBlocks.fakeBlock.getDefaultState().withProperty(BlockMulti.MULTI_TYPE, thisTile.getMultiType()), 2); + } + world.setTileEntity(vecToAdd, new TileEntityMulti(pos)); + } else + { + result = false; + } + } + if (result == false && !world.isRemote) + { +// //Try again to create all the multiblocks - currently disabled because making new tiles here interferes with server->client tileEntity sync during worldgen (Abandoned Base) +// thisTile.onCreate(world, pos); + } + + return result; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNasaWorkbench.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNasaWorkbench.java new file mode 100644 index 00000000..cf493b8c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNasaWorkbench.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.client.gui.GuiIdsCore; + +public class TileEntityNasaWorkbench extends TileEntityMulti implements IMultiBlock +{ + + private boolean initialised; + + public TileEntityNasaWorkbench() + { + super(null); + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + entityPlayer.openGui(GalacticraftCore.instance, GuiIdsCore.NASA_WORKBENCH_ROCKET, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + return true; + } + + @Override + public void update() + { + if (!this.initialised) + { + this.initialised = this.initialiseMultiTiles(this.getPos(), this.world); + } + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + List positions = new ArrayList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.NASA_WORKBENCH; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + + for (int y = 1; y < 3; y++) + { + if (placedPosition.getY() + y > buildHeight) + { + return; + } + + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + if (Math.abs(x) != 1 || Math.abs(z) != 1) + { + positions.add(new BlockPos(placedPosition.getX() + x, placedPosition.getY() + y, placedPosition.getZ() + z)); + } + } + } + } + + if (placedPosition.getY() + 3 <= buildHeight) + { + positions.add(new BlockPos(placedPosition.getX(), placedPosition.getY() + 3, placedPosition.getZ())); + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.NASA_WORKBENCH) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.05D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(thisBlock)); + } + this.world.setBlockToAir(pos); + } + } + this.world.destroyBlock(thisBlock, true); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(getPos().getX() - 1, getPos().getY() - 1, getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 5, getPos().getZ() + 2); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNull.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNull.java new file mode 100644 index 00000000..3ff6a7c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityNull.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.tileentity.TileEntity; + +public class TileEntityNull extends TileEntity +{ +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygen.java new file mode 100644 index 00000000..2560e7fb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygen.java @@ -0,0 +1,487 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.InterfaceList; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenReceiver; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenStorage; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.NetworkHelper; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; + +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.api.gas.ITubeConnection; +import mekanism.common.capabilities.Capabilities; + +@InterfaceList({ + @Interface(iface = "mekanism.api.gas.IGasHandler", modid = CompatibilityManager.modidMekanism), + @Interface(iface = "mekanism.api.gas.ITubeConnection", modid = CompatibilityManager.modidMekanism) +}) +public abstract class TileEntityOxygen extends TileBaseElectricBlock implements IOxygenReceiver, IOxygenStorage, IFluidHandlerWrapper, IGasHandler, ITubeConnection +{ + + public int oxygenPerTick; + @NetworkedField(targetSide = Side.CLIENT) + public FluidTankGC tank; + public float lastStoredOxygen; + public static int timeSinceOxygenRequest; + + public TileEntityOxygen(String tileName, int maxOxygen, int oxygenPerTick) + { + super(tileName); + this.tank = new FluidTankGC(maxOxygen, this); + this.oxygenPerTick = oxygenPerTick; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + return true; + } + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + } + + return super.getCapability(capability, facing); + } + + public int getScaledOxygenLevel(int scale) + { + return (int) Math.floor(this.getOxygenStored() * scale / (this.getMaxOxygenStored() - this.oxygenPerTick)); + } + + public abstract boolean shouldUseOxygen(); + + public int getCappedScaledOxygenLevel(int scale) + { + return (int) Math.max(Math.min(Math.floor((double) this.tank.getFluidAmount() / (double) this.tank.getCapacity() * scale), scale), 0); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + if (TileEntityOxygen.timeSinceOxygenRequest > 0) + { + TileEntityOxygen.timeSinceOxygenRequest--; + } + + if (this.shouldUseOxygen()) + { + if (this.tank.getFluid() != null) + { + FluidStack fluid = this.tank.getFluid().copy(); + fluid.amount = Math.max(fluid.amount - this.oxygenPerTick, 0); + this.tank.setFluid(fluid); + } + } + } + + this.lastStoredOxygen = this.tank.getFluidAmount(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if (nbt.hasKey("storedOxygen")) + { + this.tank.setFluid(new FluidStack(GCFluids.fluidOxygenGas, nbt.getInteger("storedOxygen"))); + } else if (nbt.hasKey("storedOxygenF")) + { + int oxygen = (int) nbt.getFloat("storedOxygenF"); + oxygen = Math.min(this.tank.getCapacity(), oxygen); + this.tank.setFluid(new FluidStack(GCFluids.fluidOxygenGas, oxygen)); + } else + { + this.tank.readFromNBT(nbt); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + this.tank.writeToNBT(nbt); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void setOxygenStored(int oxygen) + { + this.tank.setFluid(new FluidStack(GCFluids.fluidOxygenGas, Math.max(Math.min(oxygen, this.getMaxOxygenStored()), 0))); + } + + @Override + public int getOxygenStored() + { + return this.tank.getFluidAmount(); + } + + @Override + public int getMaxOxygenStored() + { + return this.tank.getCapacity(); + } + + public EnumSet getOxygenInputDirections() + { + return EnumSet.allOf(EnumFacing.class); + } + + public EnumSet getOxygenOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + + if (type == NetworkType.FLUID) + { + return this.getOxygenInputDirections().contains(direction) || this.getOxygenOutputDirections().contains(direction); + } + if (type == NetworkType.POWER) + // return this.nodeAvailable(new EnergySourceAdjacent(direction)); + { + return super.canConnect(direction, type); + } + + return false; + } + + @Override + public int receiveOxygen(EnumFacing from, int receive, boolean doReceive) + { + if (this.getOxygenInputDirections().contains(from)) + { + if (!doReceive) + { + return this.getOxygenRequest(from); + } + + return this.receiveOxygen(receive, doReceive); + } + + return 0; + } + + public int receiveOxygen(int receive, boolean doReceive) + { + if (receive > 0) + { + int prevOxygenStored = this.getOxygenStored(); + int newStoredOxygen = Math.min(prevOxygenStored + receive, this.getMaxOxygenStored()); + + if (doReceive) + { + TileEntityOxygen.timeSinceOxygenRequest = 20; + this.setOxygenStored(newStoredOxygen); + } + + return Math.max(newStoredOxygen - prevOxygenStored, 0); + } + + return 0; + } + + @Override + public int provideOxygen(EnumFacing from, int request, boolean doProvide) + { + if (this.getOxygenOutputDirections().contains(from)) + { + return this.drawOxygen(request, doProvide); + } + + return 0; + } + + public int drawOxygen(int request, boolean doProvide) + { + if (request > 0) + { + int requestedOxygen = Math.min(request, this.getOxygenStored()); + + if (doProvide) + { + this.setOxygenStored(this.getOxygenStored() - requestedOxygen); + } + + return requestedOxygen; + } + + return 0; + } + + public void produceOxygen() + { + if (!this.world.isRemote) + { + for (EnumFacing direction : this.getOxygenOutputDirections()) + { + if (direction != null) + { + this.produceOxygen(direction); + } + } + } + } + + public boolean produceOxygen(EnumFacing outputDirection) + { + int provide = this.getOxygenProvide(outputDirection); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).getTileEntityOnSide(this.world, outputDirection); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int gasRequested = outputNetwork.getRequest(); + + if (gasRequested > 0) + { + int usedGas = outputNetwork.emitToBuffer(new FluidStack(GCFluids.fluidOxygenGas, Math.min(gasRequested, provide)), true); + + this.drawOxygen(usedGas, true); + return true; + } + } else if (outputTile instanceof IOxygenReceiver) + { + float requestedOxygen = ((IOxygenReceiver) outputTile).getOxygenRequest(outputDirection.getOpposite()); + + if (requestedOxygen > 0) + { + int acceptedOxygen = ((IOxygenReceiver) outputTile).receiveOxygen(outputDirection.getOpposite(), provide, true); + this.drawOxygen(acceptedOxygen, true); + return true; + } + } + // else if (EnergyConfigHandler.isMekanismLoaded()) + // { + // //TODO Oxygen item handling - internal tank (IGasItem) + // //int acceptedOxygen = GasTransmission.addGas(itemStack, type, amount); + // //this.drawOxygen(acceptedOxygen, true); + // + // if (outputTile instanceof IGasHandler && ((IGasHandler) outputTile).canReceiveGas(outputDirection.getOpposite(), (Gas) EnergyConfigHandler.gasOxygen)) + // { + // GasStack toSend = new GasStack((Gas) EnergyConfigHandler.gasOxygen, (int) Math.floor(provide)); + // int acceptedOxygen = 0; + // try { + // acceptedOxygen = ((IGasHandler) outputTile).receiveGas(outputDirection.getOpposite(), toSend); + // } catch (Exception e) { } + // this.drawOxygen(acceptedOxygen, true); + // return true; + // } + // } + } + + return false; + } + + @Override + public int getOxygenRequest(EnumFacing direction) + { + if (this.shouldPullOxygen()) + { + return Math.min(this.oxygenPerTick * 2, this.getMaxOxygenStored() - this.getOxygenStored()); + } else + { + return 0; + } + } + + @Override + public boolean shouldPullOxygen() + { + return this.getOxygenStored() < this.getMaxOxygenStored(); + } + + /** + * Make sure this does not exceed the oxygen stored. This should return 0 if + * no oxygen is stored. Implementing tiles must respect this or you will + * generate infinite oxygen. + */ + @Override + public int getOxygenProvide(EnumFacing direction) + { + return 0; + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + if (!stack.getGas().getName().equals("oxygen")) + { + return 0; + } + return (int) Math.floor(this.receiveOxygen(stack.amount, doTransfer)); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return new GasStack((Gas) EnergyConfigHandler.gasOxygen, (int) Math.floor(this.drawOxygen(amount, doTransfer))); + } + + @Method(modid = CompatibilityManager.modidMekanism) + public GasStack drawGas(EnumFacing side, int amount) + { + return this.drawGas(side, amount, true); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return type.getName().equals("oxygen") && this.getOxygenInputDirections().contains(side); + } + + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canDrawGas(EnumFacing side, Gas type) + { + return type.getName().equals("oxygen") && this.getOxygenOutputDirections().contains(side); + } + + @Deprecated + @Override + @Method(modid = CompatibilityManager.modidMekanism) + public boolean canTubeConnect(EnumFacing side) + { + return this.canConnect(side, NetworkType.FLUID); + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + if (this.getOxygenInputDirections().contains(from) && resource != null) + { + if (!doFill) + { + return this.getOxygenRequest(from); + } + + return this.receiveOxygen(resource.amount, doFill); + } + + return 0; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return resource == null ? null : drain(from, resource.amount, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + if (this.getOxygenOutputDirections().contains(from)) + { + return new FluidStack(GCFluids.fluidOxygenGas, this.drawOxygen(maxDrain, doDrain)); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + return this.getOxygenInputDirections().contains(from) && (fluid == null || fluid.getName().equals("oxygen")); + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return this.getOxygenOutputDirections().contains(from) && (fluid == null || fluid.getName().equals("oxygen")); + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + if (canConnect(from, NetworkType.FLUID)) + { + return new FluidTankInfo[] {this.tank.getInfo()}; + } + + return new FluidTankInfo[] {}; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCollector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCollector.java new file mode 100644 index 00000000..16a54aa9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCollector.java @@ -0,0 +1,264 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.common.EnumPlantType; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCollector; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; + +public class TileEntityOxygenCollector extends TileEntityOxygen +{ + + public boolean active; + public static final int OUTPUT_PER_TICK = 100; + public static float OXYGEN_PER_PLANT = 0.75F; + @NetworkedField(targetSide = Side.CLIENT) public float lastOxygenCollected; + private boolean noAtmosphericOxygen = true; + private boolean isInitialised = false; + private boolean producedLastTick = false; + + public TileEntityOxygenCollector() + { + super("container.oxygencollector.name", 6000, 0); + this.noRedstoneControl = true; + inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public int getCappedScaledOxygenLevel(int scale) + { + return (int) Math.max(Math.min(Math.floor((double) this.getOxygenStored() / (double) this.getMaxOxygenStored() * scale), scale), 0); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + producedLastTick = this.getOxygenStored() < this.getMaxOxygenStored(); + + this.produceOxygen(); + + // Approximately once every 40 ticks, search out oxygen producing + // blocks + if (this.world.rand.nextInt(10) == 0) + { + if (this.hasEnoughEnergyToRun) + { + // The later calculations are more efficient if power is a + // float, so + // there are fewer casts + float nearbyLeaves = 0; + + if (!this.isInitialised) + { + this.noAtmosphericOxygen = + (this.world.provider instanceof IGalacticraftWorldProvider && !((IGalacticraftWorldProvider) this.world.provider).isGasPresent(EnumAtmosphericGas.OXYGEN)); + this.isInitialised = true; + } + + if (this.noAtmosphericOxygen) + { + // Pre-test to see if close to the map edges, so code + // doesn't have to continually test for map edges inside + // the + // loop + if (this.getPos().getX() > -29999995 && this.getPos().getY() < 2999995 && this.getPos().getZ() > -29999995 && this.getPos().getZ() < 29999995) + { + // Test the y coordinates, so code doesn't have to + // keep + // testing that either + int miny = this.getPos().getY() - 5; + int maxy = this.getPos().getY() + 5; + if (miny < 0) + { + miny = 0; + } + if (maxy >= this.world.getHeight()) + { + maxy = this.world.getHeight() - 1; + } + + // Loop the x and the z first, so the y loop will be + // at + // fixed (x,z) coordinates meaning fixed chunk + // coordinates + for (int x = this.getPos().getX() - 5; x <= this.getPos().getX() + 5; x++) + { + int chunkx = x >> 4; + int intrachunkx = x & 15; + // Preload the first chunk for the z loop - + // there + // can be a maximum of 2 chunks in the z loop + int chunkz = this.getPos().getZ() - 5 >> 4; + Chunk chunk = this.world.getChunk(chunkx, chunkz); + for (int z = this.getPos().getZ() - 5; z <= this.getPos().getZ() + 5; z++) + { + if (z >> 4 != chunkz) + { + // moved across z chunk boundary into a + // new + // chunk, so load the new chunk + chunkz = z >> 4; + chunk = this.world.getChunk(chunkx, chunkz); + } + for (int y = miny; y <= maxy; y++) + { + // chunk.getBlockID is like + // world.getBlock + // but faster - needs to be given + // intra-chunk coordinates though + final IBlockState state = chunk.getBlockState(intrachunkx, y, z & 15); + // Test for the two most common blocks + // (air + // and breatheable air) without looking + // up + // in the blocksList + if (!(state.getBlock() instanceof BlockAir)) + { + BlockPos pos = new BlockPos(x, y, z); + if (state.getBlock().isLeaves(state, this.world, pos) + || state.getBlock() instanceof IPlantable && ((IPlantable) state.getBlock()).getPlantType(this.world, pos) == EnumPlantType.Crop) + { + nearbyLeaves += OXYGEN_PER_PLANT; + } + } + } + } + } + } + } else + { + nearbyLeaves = 9.3F * 10F; + } + + nearbyLeaves = (float) Math.floor(nearbyLeaves); + + this.lastOxygenCollected = nearbyLeaves / 10F; + + this.tank.setFluid(new FluidStack(GCFluids.fluidOxygenGas, (int) Math.max(Math.min(this.getOxygenStored() + nearbyLeaves, this.getMaxOxygenStored()), 0))); + } else + { + this.lastOxygenCollected = 0; + } + } + } + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + @Override + public boolean shouldUseEnergy() + { + return this.getOxygenStored() > 0F && producedLastTick; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenCollector) + { + return state.getValue(BlockOxygenCollector.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + @Override + public boolean shouldPullOxygen() + { + return false; + } + + @Override + public boolean shouldUseOxygen() + { + return false; + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return this.getOxygenOutputDirections().contains(direction) ? Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.getOxygenStored()) : 0; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCompressor.java new file mode 100644 index 00000000..ccadbea6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenCompressor.java @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCompressor; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class TileEntityOxygenCompressor extends TileEntityOxygen +{ + + public static final int TANK_TRANSFER_SPEED = 2; + private boolean usingEnergy = false; + + public TileEntityOxygenCompressor() + { + super("container.oxygencompressor.name", 1200, 16); + this.storage.setMaxExtract(15); + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + ItemStack oxygenItemStack = this.getStackInSlot(2); + if (oxygenItemStack != null && oxygenItemStack.getItem() instanceof IItemOxygenSupply) + { + IItemOxygenSupply oxygenItem = (IItemOxygenSupply) oxygenItemStack.getItem(); + int oxygenDraw = (int) Math.floor(Math.min(this.oxygenPerTick * 2.5F, this.getMaxOxygenStored() - this.getOxygenStored())); + this.setOxygenStored(getOxygenStored() + oxygenItem.discharge(oxygenItemStack, oxygenDraw)); + if (this.getOxygenStored() > this.getMaxOxygenStored()) + { + this.setOxygenStored(this.getOxygenStored()); + } + } + } + + super.update(); + + if (!this.world.isRemote) + { + this.usingEnergy = false; + if (this.getOxygenStored() > 0 && this.hasEnoughEnergyToRun) + { + ItemStack tank0 = this.getInventory().get(0); + + if (!tank0.isEmpty()) + { + if (tank0.getItem() instanceof ItemOxygenTank && tank0.getItemDamage() > 0) + { + tank0.setItemDamage(tank0.getItemDamage() - TileEntityOxygenCompressor.TANK_TRANSFER_SPEED); + this.setOxygenStored(this.getOxygenStored() - TileEntityOxygenCompressor.TANK_TRANSFER_SPEED); + this.usingEnergy = true; + } + } + } + } + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return itemstack.getItemDamage() > 1; + case 1: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 2: + return itemstack.getItemDamage() < itemstack.getItem().getMaxDamage(); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + switch (slotID) + { + case 0: + return itemstack.getItem() instanceof ItemOxygenTank && itemstack.getItemDamage() == 0; + case 1: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 2: + return FluidUtil.isEmptyContainer(itemstack); + default: + return false; + } + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return itemstack.getItem() instanceof ItemOxygenTank; + case 1: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + case 2: + return itemstack.getItem() instanceof IItemOxygenSupply; + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.usingEnergy; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenCompressor) + { + return state.getValue(BlockOxygenCompressor.FACING).rotateY(); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return this.byIndex(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(1); + } + + @Override + public boolean shouldUseOxygen() + { + return false; + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDecompressor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDecompressor.java new file mode 100644 index 00000000..8a9475c2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDecompressor.java @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenCompressor; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; + +public class TileEntityOxygenDecompressor extends TileEntityOxygen implements IInventoryDefaults, ISidedInventory +{ + + public static final int OUTPUT_PER_TICK = 100; + private boolean usingEnergy = false; + + public TileEntityOxygenDecompressor() + { + super("container.oxygendecompressor.name", 1200, 0); + inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + this.usingEnergy = false; + ItemStack tank1 = this.getInventory().get(0); + + if (!tank1.isEmpty() && this.hasEnoughEnergyToRun && this.getOxygenStored() < this.getMaxOxygenStored()) + { + if (tank1.getItem() instanceof ItemOxygenTank && tank1.getItemDamage() < tank1.getMaxDamage()) + { + tank1.setItemDamage(tank1.getItemDamage() + 1); + this.receiveOxygen(1, true); + this.usingEnergy = true; + } else if (tank1.getItem() instanceof ItemCanisterOxygenInfinite) + { + this.receiveOxygen(1, true); + this.usingEnergy = true; + } + } + + this.produceOxygen(); + } + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return itemstack.getItemDamage() < itemstack.getMaxDamage(); + case 1: + return ItemElectricBase.isElectricItemCharged(itemstack); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return itemstack.getItemDamage() == itemstack.getMaxDamage(); + case 1: + return ItemElectricBase.isElectricItemEmpty(itemstack); + default: + return false; + } + } + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return itemstack.getItem() instanceof ItemOxygenTank; + case 1: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.usingEnergy; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenCompressor) + { + return state.getValue(BlockOxygenCompressor.FACING).rotateY(); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return this.byIndex(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(1); + } + + public EnumFacing getOxygenOutputDirection() + { + return this.getElectricInputDirection().getOpposite(); + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public boolean shouldPullOxygen() + { + return false; + } + + @Override + public boolean shouldUseOxygen() + { + return false; + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return this.getOxygenOutputDirections().contains(direction) ? Math.min(TileEntityOxygenDecompressor.OUTPUT_PER_TICK, this.getOxygenStored()) : 0; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDetector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDetector.java new file mode 100644 index 00000000..ecd5961c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDetector.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDetector; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; + +public class TileEntityOxygenDetector extends TileEntity implements ITickable +{ + + private int ticks = 49; + private AxisAlignedBB oxygenSearch; + + @Override + public void update() + { + if (!this.world.isRemote && ++this.ticks == 50) + { + this.ticks = 0; + if (this.getBlockType() instanceof BlockOxygenDetector) + { + boolean oxygenFound = false; + if (this.world.provider instanceof IGalacticraftWorldProvider && !((IGalacticraftWorldProvider) this.world.provider).hasBreathableAtmosphere()) + { + oxygenFound = OxygenUtil.isAABBInBreathableAirBlock(this.world, this.oxygenSearch, false); + } else + { + for (EnumFacing side : EnumFacing.VALUES) + { + BlockPos offset = this.pos.offset(side, 1); + IBlockState bs = this.world.getBlockState(offset); + if (!bs.getBlock().isSideSolid(bs, world, offset, side.getOpposite())) + { + oxygenFound = true; + break; + } + } + } + ((BlockOxygenDetector) this.blockType).updateOxygenState(this.world, this.getPos(), oxygenFound); + } + } + } + + @Override + public void onLoad() + { + this.oxygenSearch = + new AxisAlignedBB(this.getPos().getX() - 0.6, this.getPos().getY() - 0.6, this.getPos().getZ() - 0.6, this.getPos().getX() + 1.6, this.getPos().getY() + 1.6, this.getPos().getZ() + 1.6); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDistributor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDistributor.java new file mode 100644 index 00000000..22f7ade0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenDistributor.java @@ -0,0 +1,494 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.block.IOxygenReliantBlock; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenDistributor; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProviderColored; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +import io.netty.buffer.ByteBuf; + +public class TileEntityOxygenDistributor extends TileEntityOxygen implements IBubbleProviderColored +{ + + public boolean active; + public boolean lastActive; + + public static HashSet loadedTiles = new HashSet<>(); + public float bubbleSize; + @NetworkedField(targetSide = Side.CLIENT) public boolean shouldRenderBubble = true; + + public TileEntityOxygenDistributor() + { + super("container.oxygendistributor.name", 6000, 8); +// this.oxygenBubble = null; + this.inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + @Override + public void onLoad() + { + if (!this.world.isRemote) + TileEntityOxygenDistributor.loadedTiles.add(new BlockVec3Dim(this)); + } + + @Override + public void onChunkUnload() + { + if (!this.world.isRemote) + TileEntityOxygenDistributor.loadedTiles.remove(new BlockVec3Dim(this)); + super.onChunkUnload(); + } + + @Override + public void invalidate() + { + if (!this.world.isRemote) + { + int bubbleR = MathHelper.ceil(bubbleSize); + int bubbleR2 = (int) (bubbleSize * bubbleSize); + final int xMin = this.getPos().getX() - bubbleR; + final int xMax = this.getPos().getX() + bubbleR; + final int yMin = this.getPos().getY() - bubbleR; + final int yMax = this.getPos().getY() + bubbleR; + final int zMin = this.getPos().getZ() - bubbleR; + final int zMax = this.getPos().getZ() + bubbleR; + for (int x = xMin; x < xMax; x++) + { + for (int z = zMin; z < zMax; z++) + { + // Doing y as the inner loop allows BlockVec3 to cache the + // chunks more efficiently + for (int y = yMin; y < yMax; y++) + { + IBlockState state = new BlockVec3(x, y, z).getBlockState(this.world); + + if (state != null && state.getBlock() instanceof IOxygenReliantBlock && this.getDistanceFromServer(x, y, z) <= bubbleR2) + { + this.world.scheduleUpdate(new BlockPos(x, y, z), state.getBlock(), 0); + } + } + } + } +// this.oxygenBubble.setDead(); + TileEntityOxygenDistributor.loadedTiles.remove(new BlockVec3Dim(this)); + } + + super.invalidate(); + } + + @Override + public double getPacketRange() + { + return 64.0F; + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + if (!this.world.isRemote && !this.isInvalid()) + { +// networkedList.add(this.oxygenBubble != null); +// if (this.oxygenBubble != null) +// { +// networkedList.add(this.oxygenBubble.getEntityId()); +// } + if (this.world.getMinecraftServer().isDedicatedServer()) + { + networkedList.add(loadedTiles.size()); + // TODO: Limit this to ones in the same dimension as this tile? + for (BlockVec3Dim distributor : loadedTiles) + { + if (distributor == null) + { + networkedList.add(-1); + networkedList.add(-1); + networkedList.add(-1); + networkedList.add(-1); + } else + { + networkedList.add(distributor.x); + networkedList.add(distributor.y); + networkedList.add(distributor.z); + networkedList.add(distributor.dim); + } + } + } else + // Signal integrated server, do not clear loadedTiles + { + networkedList.add(-1); + } + networkedList.add(this.bubbleSize); + } + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(this.getPos().getX() - this.bubbleSize, this.getPos().getY() - this.bubbleSize, this.getPos().getZ() - this.bubbleSize, this.getPos().getX() + this.bubbleSize, + this.getPos().getY() + this.bubbleSize, this.getPos().getZ() + this.bubbleSize); + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + if (this.world.isRemote) + { +// if (dataStream.readBoolean()) +// { +// this.oxygenBubble = (EntityBubble) worldObj.getEntityByID(dataStream.readInt()); +// } + int size = dataStream.readInt(); + if (size >= 0) + { + loadedTiles.clear(); + for (int i = 0; i < size; ++i) + { + int i1 = dataStream.readInt(); + int i2 = dataStream.readInt(); + int i3 = dataStream.readInt(); + int i4 = dataStream.readInt(); + if (i1 == -1 && i2 == -1 && i3 == -1 && i4 == -1) + { + continue; + } + loadedTiles.add(new BlockVec3Dim(i1, i2, i3, i4)); + } + } + this.bubbleSize = dataStream.readFloat(); + } + } + + public int getDistanceFromServer(int par1, int par3, int par5) + { + final int d3 = this.getPos().getX() - par1; + final int d4 = this.getPos().getY() - par3; + final int d5 = this.getPos().getZ() - par5; + return d3 * d3 + d4 * d4 + d5 * d5; + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + ItemStack oxygenItemStack = this.getStackInSlot(1); + if (oxygenItemStack != null && oxygenItemStack.getItem() instanceof IItemOxygenSupply) + { + IItemOxygenSupply oxygenItem = (IItemOxygenSupply) oxygenItemStack.getItem(); + int oxygenDraw = (int) Math.floor(Math.min(this.oxygenPerTick * 2.5F, this.getMaxOxygenStored() - this.getOxygenStored())); + this.setOxygenStored(getOxygenStored() + oxygenItem.discharge(oxygenItemStack, oxygenDraw)); + if (this.getOxygenStored() > this.getMaxOxygenStored()) + { + this.setOxygenStored(this.getOxygenStored()); + } + } + } + + super.update(); + + if (!this.world.isRemote) + { + if (this.getEnergyStoredGC() > 0.0F && this.hasEnoughEnergyToRun && this.getOxygenStored() > this.oxygenPerTick) + { + this.bubbleSize += 0.01F; + } else + { + this.bubbleSize -= 0.1F; + } + + this.bubbleSize = Math.min(Math.max(this.bubbleSize, 0.0F), 10.0F); + } + +// if (!hasValidBubble && !this.world.isRemote && (this.oxygenBubble == null || this.ticks < 25)) +// { +// //Check it's a world without a breathable atmosphere +// if (this.oxygenBubble == null && this.world.provider instanceof IGalacticraftWorldProvider && !((IGalacticraftWorldProvider)this.world.provider).hasBreathableAtmosphere()) +// { +// this.oxygenBubble = new EntityBubble(this.world, new Vector3(this), this); +// this.hasValidBubble = true; +// this.world.spawnEntity(this.oxygenBubble); +// } +// } + + if (!this.world.isRemote) + { + this.active = bubbleSize >= 1 && this.hasEnoughEnergyToRun && this.getOxygenStored() > this.oxygenPerTick; + + if (this.ticks % (this.active ? 20 : 4) == 0) + { + double size = bubbleSize; + int bubbleR = MathHelper.floor(size) + 4; + int bubbleR2 = (int) (size * size); + for (int x = this.getPos().getX() - bubbleR; x <= this.getPos().getX() + bubbleR; x++) + { + for (int y = this.getPos().getY() - bubbleR; y <= this.getPos().getY() + bubbleR; y++) + { + for (int z = this.getPos().getZ() - bubbleR; z <= this.getPos().getZ() + bubbleR; z++) + { + BlockPos pos = new BlockPos(x, y, z); + IBlockState state = this.world.getBlockState(pos); + Block block = state.getBlock(); + + if (block instanceof IOxygenReliantBlock) + { + if (this.getDistanceFromServer(x, y, z) <= bubbleR2) + { + ((IOxygenReliantBlock) block).onOxygenAdded(this.world, pos, state); + } else + { + // Do not necessarily extinguish it - it + // might be inside another oxygen system + this.world.scheduleUpdate(pos, block, 0); + } + } + } + } + } + } + } + + this.lastActive = this.active; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if (nbt.hasKey("bubbleVisible")) + { + this.setBubbleVisible(nbt.getBoolean("bubbleVisible")); + } + + if (nbt.hasKey("bubbleSize")) + { + this.bubbleSize = nbt.getFloat("bubbleSize"); + } +// this.hasValidBubble = nbt.getBoolean("hasValidBubble"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setBoolean("bubbleVisible", this.shouldRenderBubble); + nbt.setFloat("bubbleSize", this.bubbleSize); +// nbt.setBoolean("hasValidBubble", this.hasValidBubble); + return nbt; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return itemstack.getItemDamage() < itemstack.getItem().getMaxDamage(); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 1: + return FluidUtil.isEmptyContainer(itemstack); + default: + return false; + } + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (itemstack.isEmpty()) + { + return false; + } + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } + if (slotID == 1) + { + return itemstack.getItem() instanceof IItemOxygenSupply; + } + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.getOxygenStored() > this.oxygenPerTick; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenDistributor) + { + return state.getValue(BlockOxygenDistributor.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + @Override + public boolean shouldUseOxygen() + { + return this.hasEnoughEnergyToRun; + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + +// @Override +// public IBubble getBubble() +// { +// return this.oxygenBubble; +// } + + public boolean inBubble(double pX, double pY, double pZ) + { + double r = bubbleSize; + r *= r; + double d3 = this.getPos().getX() + 0.5D - pX; + d3 *= d3; + if (d3 > r) + { + return false; + } + double d4 = this.getPos().getZ() + 0.5D - pZ; + d4 *= d4; + if (d3 + d4 > r) + { + return false; + } + double d5 = this.getPos().getY() + 0.5D - pY; + return d3 + d4 + d5 * d5 < r; + } + + @Override + public void setBubbleVisible(boolean shouldRender) + { + this.shouldRenderBubble = shouldRender; +// this.oxygenBubble.setShouldRender(shouldRender); + } + + @Override + public float getBubbleSize() + { + return this.bubbleSize; + } + + @Override + public boolean getBubbleVisible() + { + return this.shouldRenderBubble; + } + + @Override + public Vector3 getColor() + { + return new Vector3(0.125F, 0.125F, 0.5F); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenSealer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenSealer.java new file mode 100644 index 00000000..973d2c8d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenSealer.java @@ -0,0 +1,455 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockOxygenSealer; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; +import micdoodle8.mods.galacticraft.core.fluid.ThreadFindSeal; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityOxygenSealer extends TileEntityOxygen implements ITileClientUpdates +{ + + @NetworkedField(targetSide = Side.CLIENT) public boolean sealed; + public boolean lastSealed = false; + + public boolean lastDisabled = false; + + @NetworkedField(targetSide = Side.CLIENT) public boolean active; + public ThreadFindSeal threadSeal; + @NetworkedField(targetSide = Side.CLIENT) public int stopSealThreadCooldown; + @NetworkedField(targetSide = Side.CLIENT) public int threadCooldownTotal; + @NetworkedField(targetSide = Side.CLIENT) public boolean calculatingSealed; + public static int countEntities = 0; + private static int countTemp = 0; + private static boolean sealerCheckedThisTick = false; + public static ArrayList loadedTiles = new ArrayList<>(); + private static final int UNSEALED_OXYGENPERTICK = 12; + public List leaksClient; + + public TileEntityOxygenSealer() + { + super("container.oxygensealer.name", 10000, UNSEALED_OXYGENPERTICK); + this.noRedstoneControl = true; + this.storage.setMaxExtract(5.0F); // Half of a standard machine's power + // draw + this.storage.setMaxReceive(25.0F); + this.storage.setCapacity(EnergyStorageTile.STANDARD_CAPACITY * 2); + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void onLoad() + { + if (!this.world.isRemote) + { + if (!TileEntityOxygenSealer.loadedTiles.contains(this)) + { + TileEntityOxygenSealer.loadedTiles.add(this); + } + this.stopSealThreadCooldown = 126 + countEntities; + } else + { + this.clientOnLoad(); + } + } + + @Override + public void invalidate() + { + if (!this.world.isRemote) + { + TileEntityOxygenSealer.loadedTiles.remove(this); + } + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + if (!this.world.isRemote) + { + TileEntityOxygenSealer.loadedTiles.remove(this); + } + super.onChunkUnload(); + } + + public int getScaledThreadCooldown(int i) + { + if (this.active) + { + return Math.min(i, (int) Math.floor(this.stopSealThreadCooldown * i / (double) this.threadCooldownTotal)); + } + return 0; + } + + public int getFindSealChecks() + { + if (!this.active || this.getOxygenStored() < this.oxygenPerTick || !this.hasEnoughEnergyToRun) + { + return 0; + } + BlockPos posAbove = new BlockPos(this.getPos().getX(), this.getPos().getY() + 1, this.getPos().getZ()); + IBlockState stateAbove = this.world.getBlockState(posAbove); + if (!(stateAbove.getBlock().isAir(stateAbove, this.world, posAbove)) && !OxygenPressureProtocol.canBlockPassAir(this.world, stateAbove, this.getPos().up(), EnumFacing.UP)) + { + // The vent is blocked + return 0; + } + + return 1250; + } + + public boolean thermalControlEnabled() + { + ItemStack oxygenItemStack = this.getStackInSlot(2); + return oxygenItemStack != null && oxygenItemStack.getItem() == GCItems.basicItem && oxygenItemStack.getItemDamage() == 20 && this.hasEnoughEnergyToRun && !this.disabled; + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + ItemStack oxygenItemStack = this.getStackInSlot(1); + if (oxygenItemStack != null && oxygenItemStack.getItem() instanceof IItemOxygenSupply) + { + IItemOxygenSupply oxygenItem = (IItemOxygenSupply) oxygenItemStack.getItem(); + int oxygenDraw = (int) Math.floor(Math.min(UNSEALED_OXYGENPERTICK * 2.5F, this.getMaxOxygenStored() - this.getOxygenStored())); + this.setOxygenStored(getOxygenStored() + oxygenItem.discharge(oxygenItemStack, oxygenDraw)); + if (this.getOxygenStored() > this.getMaxOxygenStored()) + { + this.setOxygenStored(this.getOxygenStored()); + } + } + + if (this.thermalControlEnabled()) + { + if (this.storage.getMaxExtract() != 20.0F) + { + this.storage.setMaxExtract(20.0F); + } + } else if (this.storage.getMaxExtract() != 5.0F) + { + this.storage.setMaxExtract(5.0F); + this.storage.setMaxReceive(25.0F); + } + } + + this.oxygenPerTick = this.sealed ? 2 : UNSEALED_OXYGENPERTICK; + super.update(); + + if (!this.world.isRemote) + { + // Some code to count the number of Oxygen Sealers being updated, + // tick by tick - needed for queueing + TileEntityOxygenSealer.countTemp++; + + this.active = this.getOxygenStored() >= 1 && this.hasEnoughEnergyToRun && !this.disabled; + if (this.disabled != this.lastDisabled) + { + this.lastDisabled = this.disabled; + if (!this.disabled) + this.stopSealThreadCooldown = this.threadCooldownTotal * 3 / 5; + } + + // TODO: if multithreaded, this codeblock should not run if the + // current threadSeal is flagged looping + if (this.stopSealThreadCooldown > 0) + { + this.stopSealThreadCooldown--; + } else if (!TileEntityOxygenSealer.sealerCheckedThisTick) + { + // This puts any Sealer which is updated to the back of the + // queue for updates + this.threadCooldownTotal = this.stopSealThreadCooldown = 75 + TileEntityOxygenSealer.countEntities; + if (this.active || this.sealed) + { + TileEntityOxygenSealer.sealerCheckedThisTick = true; + OxygenPressureProtocol.updateSealerStatus(this); + } + } + + // TODO: if multithreaded, this.threadSeal needs to be atomic + if (this.threadSeal != null) + { + if (this.threadSeal.looping.get()) + { + this.calculatingSealed = this.active; + } else + { + this.calculatingSealed = false; + this.sealed = this.threadSeal.sealedFinal.get(); + } + } else + { + this.calculatingSealed = true; // Give an initial 'Check + // pending' in GUI when first + // placed + } + + this.lastSealed = this.sealed; + } + } + + public static void onServerTick() + { + TileEntityOxygenSealer.countEntities = TileEntityOxygenSealer.countTemp; + TileEntityOxygenSealer.countTemp = 0; + TileEntityOxygenSealer.sealerCheckedThisTick = false; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return itemstack.getItemDamage() < itemstack.getItem().getMaxDamage(); + case 2: + return itemstack.getItem() == GCItems.basicItem && itemstack.getItemDamage() == 20; + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 1: + return FluidUtil.isEmptyContainer(itemstack); + default: + return false; + } + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (itemstack.isEmpty()) + { + return false; + } + if (slotID == 0) + { + return ItemElectricBase.isElectricItem(itemstack.getItem()); + } + if (slotID == 1) + { + return itemstack.getItem() instanceof IItemOxygenSupply; + } + if (slotID == 2) + { + return itemstack.getItem() == GCItems.basicItem && itemstack.getItemDamage() == 20; + } + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.getOxygenStored() > this.oxygenPerTick && !this.getDisabled(0); + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockOxygenSealer) + { + return state.getValue(BlockOxygenSealer.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + @Override + public boolean shouldUseOxygen() + { + return this.hasEnoughEnergyToRun && this.active; + } + + @Override + public EnumSet getOxygenInputDirections() + { + return EnumSet.of(this.getElectricInputDirection().getOpposite()); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + public static HashMap getSealersAround(World world, BlockPos pos, int rSquared) + { + HashMap ret = new HashMap<>(); + + for (TileEntityOxygenSealer tile : new ArrayList<>(TileEntityOxygenSealer.loadedTiles)) + { + if (tile != null && tile.getWorld() == world && tile.getDistanceSq(pos.getX(), pos.getY(), pos.getZ()) < rSquared) + { + ret.put(new BlockVec3(tile.getPos()), tile); + } + } + + return ret; + } + + public static TileEntityOxygenSealer getNearestSealer(World world, double x, double y, double z) + { + TileEntityOxygenSealer ret = null; + double dist = 96 * 96D; + + for (Object tile : world.loadedTileEntityList) + { + if (tile instanceof TileEntityOxygenSealer) + { + double testDist = ((TileEntityOxygenSealer) tile).getDistanceSq(x, y, z); + if (testDist < dist) + { + dist = testDist; + ret = (TileEntityOxygenSealer) tile; + } + } + } + + return ret; + } + + @Override + public void sendUpdateToClient(EntityPlayerMP player) + { + if (this.sealed || this.threadSeal == null || this.threadSeal.leakTrace == null || this.threadSeal.leakTrace.isEmpty()) + { + return; + } + Integer[] data = new Integer[this.threadSeal.leakTrace.size()]; + int index = 0; + for (BlockVec3 vec : this.threadSeal.leakTrace) + { + int dx = vec.x - this.pos.getX() + 128; + int dz = vec.z - this.pos.getZ() + 128; + int dy = vec.y; + int composite; + if (dx < 0 || dx > 255 || dz < 0 || dz > 255 || dy < 0) + composite = -1; + else + composite = dz + ((dy + (dx << 8)) << 8); + data[index++] = composite; + } + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_LEAK_DATA, GCCoreUtil.getDimensionID(player.world), new Object[] + {this.getPos(), data}), player); + } + + @Override + public void buildDataPacket(int[] data) + { + // unused + } + + @Override + public void updateClient(List data) + { + this.leaksClient = new ArrayList<>(); + if (data.size() > 1) + { + for (int i = 1; i < data.size(); i++) + { + int comp = (Integer) data.get(i); + if (comp >= 0) + { + int dx = (comp >> 16) - 128; + int dy = (comp >> 8) & 255; + int dz = (comp & 255) - 128; + this.leaksClient.add(new BlockVec3(this.pos.getX() + dx, dy, this.pos.getZ() + dz)); + } + } + } + } + + public List getLeakTraceClient() + { + this.clientOnLoad(); + return this.leaksClient; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenStorageModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenStorageModule.java new file mode 100644 index 00000000..6444d35a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityOxygenStorageModule.java @@ -0,0 +1,357 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachine2; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +public class TileEntityOxygenStorageModule extends TileEntityOxygen implements IInventoryDefaults, ISidedInventory, IMachineSides +{ + + public final Set playersUsing = new HashSet<>(); + public int scaledOxygenLevel; + private int lastScaledOxygenLevel; + + public static final int OUTPUT_PER_TICK = 500; + public static final int OXYGEN_CAPACITY = 60000; + + public TileEntityOxygenStorageModule() + { + super("tile.machine2.6.name", OXYGEN_CAPACITY, 40); + this.storage.setCapacity(0); + this.storage.setMaxExtract(0); + inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + ItemStack oxygenItemStack = this.getStackInSlot(0); + if (oxygenItemStack != null && oxygenItemStack.getItem() instanceof IItemOxygenSupply) + { + IItemOxygenSupply oxygenItem = (IItemOxygenSupply) oxygenItemStack.getItem(); + int oxygenDraw = (int) Math.floor(Math.min(this.oxygenPerTick * 2.5F, this.getMaxOxygenStored() - this.getOxygenStored())); + this.setOxygenStored(getOxygenStored() + oxygenItem.discharge(oxygenItemStack, oxygenDraw)); + if (this.getOxygenStored() > this.getMaxOxygenStored()) + { + this.setOxygenStored(this.getOxygenStored()); + } + } + } + + super.update(); + + this.scaledOxygenLevel = this.getScaledOxygenLevel(16); + + if (this.scaledOxygenLevel != this.lastScaledOxygenLevel) + { + this.world.notifyLightSet(this.getPos()); + } + + this.lastScaledOxygenLevel = this.scaledOxygenLevel; + + this.produceOxygen(byIndex().rotateY().getOpposite()); + + this.lastScaledOxygenLevel = this.scaledOxygenLevel; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + return nbt; + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public boolean shouldPullEnergy() + { + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return false; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return null; + } + + @Override + public ItemStack getBatteryInSlot() + { + return ItemStack.EMPTY; + } + + @Override + public boolean shouldUseOxygen() + { + return false; + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return this.getOxygenOutputDirections().contains(direction) ? Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.getOxygenStored()) : 0; + } + + @Override + public EnumFacing byIndex() + { + return BlockMachineBase.byIndex(this.world.getBlockState(getPos())); + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && itemstack != null && itemstack.getItem() instanceof IItemOxygenSupply; + } + + // ISidedInventory + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (slotID == 0 && this.isItemValidForSlot(slotID, itemstack)) + { + return itemstack.getItemDamage() < itemstack.getItem().getMaxDamage(); + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (slotID == 0 && !itemstack.isEmpty()) + { + return FluidUtil.isEmptyContainer(itemstack); + } + return false; + } + + // IFluidHandler methods - to allow this to accept Liquid Oxygen + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return super.canDrain(from, fluid); + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return super.drain(from, resource, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + return super.drain(from, maxDrain, doDrain); + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { +// if (from.ordinal() == this.getBlockMetadata() - BlockMachine2.OXYGEN_STORAGE_MODULE_METADATA + 2 && GalacticraftCore.isPlanetsLoaded) +// { +// //Can fill with LOX only +// return fluid != null && fluid.getName().equals(AsteroidsModule.fluidLiquidOxygen.getName()); +// } + + return super.canFill(from, fluid); + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { +// int used = 0; +// +// if (resource != null && this.canFill(from, resource.getFluid())) +// { +// used = (int) (this.receiveOxygen((int) Math.floor(resource.amount / Constants.LOX_GAS_RATIO), doFill) * Constants.LOX_GAS_RATIO); +// } + + return super.fill(from, resource, doFill); + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { +// FluidTankInfo[] tankInfo = new FluidTankInfo[] {}; +// int metaside = this.getBlockMetadata() - BlockMachine2.OXYGEN_STORAGE_MODULE_METADATA + 2; +// int side = from.ordinal(); +// +// if (metaside == side && GalacticraftCore.isPlanetsLoaded) +// { +// tankInfo = new FluidTankInfo[] { new FluidTankInfo(new FluidStack(AsteroidsModule.fluidLiquidOxygen, (int) (this.getOxygenStored() * Constants.LOX_GAS_RATIO)), (int) (OXYGEN_CAPACITY * Constants.LOX_GAS_RATIO)) }; +// } +// return tankInfo; + return super.getTankInfo(from); + } + + @Override + public EnumSet getOxygenInputDirections() + { + EnumFacing dir; + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case REAR: + dir = byIndex().getOpposite(); + break; + case TOP: + dir = EnumFacing.UP; + break; + case BOTTOM: + dir = EnumFacing.DOWN; + break; + case RIGHT: + dir = byIndex().rotateYCCW(); + break; + case LEFT: + default: + dir = byIndex().rotateY(); + } + return EnumSet.of(dir); + } + + @Override + public EnumSet getOxygenOutputDirections() + { + EnumFacing dir; + switch (this.getSide(MachineSide.PIPE_OUT)) + { + case REAR: + dir = byIndex().getOpposite(); + break; + case TOP: + dir = EnumFacing.UP; + break; + case BOTTOM: + dir = EnumFacing.DOWN; + break; + case LEFT: + dir = byIndex().rotateY(); + break; + case RIGHT: + default: + dir = byIndex().rotateYCCW(); + } + return EnumSet.of(dir); + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + // Have to use Electric_In for compatibility with other BlockMachine2, + // as all use same blockstate + return new MachineSide[] + {MachineSide.ELECTRIC_IN, MachineSide.PIPE_OUT}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT, Face.RIGHT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (this.machineSides == null) + { + this.initialiseSides(); + } + + return this.machineSides; + } + + @Override + public void setupMachineSides(int length) + { + this.machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachine2.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPainter.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPainter.java new file mode 100644 index 00000000..bf4005ca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPainter.java @@ -0,0 +1,390 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.api.item.IPaintable; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +import io.netty.buffer.ByteBuf; + +import biomesoplenty.api.item.BOPItems; +import ic2.api.item.IC2Items; + +//import net.minecraft.item.EnumDyeColor; + +public class TileEntityPainter extends TileEntityInventory implements IDisableableMachine, IPacketReceiver +{ + + private static final int RANGE_DEFAULT = 96; + public static Map> loadedTilesForDim = new HashMap>(); + + public int range = RANGE_DEFAULT; // currently unused + + public int[] glassColor = new int[] + {-1, -1, -1}; // Size of this array must + // match GlassType enum + public final Set playersUsing = new HashSet(); + + public int guiColor = 0xffffff; + + public TileEntityPainter() + { + super("tile.machine3.9.name"); + inventory = NonNullList.withSize(2, ItemStack.EMPTY); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + public void takeColorFromItem(ItemStack itemStack) + { + if (itemStack == null) + { + return; + } + + Item item = itemStack.getItem(); + int color = -1; + if (item == Items.DYE) + { + color = ItemDye.DYE_COLORS[itemStack.getItemDamage()]; + } else if (item instanceof ItemBlock) + { + Block b = ((ItemBlock) item).getBlock(); + IBlockState bs = b.getStateFromMeta(itemStack.getItemDamage()); + try + { + MapColor mc = b.getMapColor(bs, null, null); + color = mc.colorValue; + } catch (Exception e) + { + } + } else + { + color = tryOtherModDyes(itemStack); + } + + if (color >= 0) + { + color = ColorUtil.addColorsBasic(color, this.guiColor); + this.guiColor = color; + } + } + + private void applyColorToItem(ItemStack itemStack, int color, Side side, EntityPlayer player) + { + if (itemStack == null) + { + return; + } + + Item item = itemStack.getItem(); + + if (item instanceof IPaintable) + { + // TODO e.g. flags, eggs, rockets??? + } else if (item instanceof ItemBlock) + { + color = ColorUtil.lighten(color, 0.03F); + Block b = ((ItemBlock) item).getBlock(); + int result = 0; + if (b instanceof IPaintable) + { + result = ((IPaintable) b).setColor(color, player, side); + } + if (b instanceof BlockSpaceGlass) + { + int type = ((BlockSpaceGlass) b).type.ordinal(); + this.glassColor[type] = color; + if (result > 0 && side == Side.CLIENT) + { + BlockSpaceGlass.updateClientRender(); + } + } + } + } + + private void setGlassColors(int color1, int color2, int color3) + { + boolean changes = false; + if (this.glassColor[0] != color1) + { + changes = true; + this.glassColor[0] = color1; + } + if (this.glassColor[1] != color2) + { + changes = true; + this.glassColor[1] = color2; + } + if (this.glassColor[2] != color3) + { + changes = true; + this.glassColor[2] = color3; + } + +// if (changes) +// ColorUtil.updateColorsForArea(this.world), this.pos, this.range, this.glassColor[0], this.glassColor[1], this.glassColor[2]);; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (nbt.hasKey("guic")) + { + this.glassColor[0] = nbt.getInteger("G1"); + this.glassColor[1] = nbt.getInteger("G2"); + this.glassColor[2] = nbt.getInteger("G3"); + this.range = nbt.getInteger("rge"); + this.guiColor = nbt.getInteger("guic"); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("G1", this.glassColor[0]); + nbt.setInteger("G2", this.glassColor[1]); + nbt.setInteger("G3", this.glassColor[2]); + nbt.setInteger("guic", this.guiColor); + nbt.setInteger("rge", this.range); + + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + private static Set getLoadedTiles(World world) + { + int dimID = GCCoreUtil.getDimensionID(world); + Set loaded = loadedTilesForDim.get(dimID); + + if (loaded == null) + { + loaded = new HashSet(); + loadedTilesForDim.put(dimID, loaded); + } + + return loaded; + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request any networked information from server on first client + // update + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } else + { + this.getLoadedTiles(this.world).add(new BlockVec3(this.pos)); + } + } + + @Override + public void onChunkUnload() + { + this.getLoadedTiles(this.world).remove(new BlockVec3(this.pos)); + super.onChunkUnload(); + } + + @Override + public void invalidate() + { + if (!this.world.isRemote) + this.getLoadedTiles(this.world).remove(new BlockVec3(this.pos)); + super.invalidate(); + } + + public static void onServerTick(World world) + { + Set loaded = getLoadedTiles(world); + int dimID = GCCoreUtil.getDimensionID(world); + List allPlayers = PlayerUtil.getPlayersOnline(); + for (final EntityPlayerMP player : allPlayers) + { + if (player.dimension != dimID) + continue; + + BlockVec3 playerPos = new BlockVec3(player); + BlockVec3 nearest = null; + int shortestDistance = RANGE_DEFAULT * RANGE_DEFAULT; + for (final BlockVec3 bv : loaded) + { + int distance = bv.distanceSquared(playerPos); + if (distance < shortestDistance) + { + shortestDistance = distance; + nearest = bv; + } + } + + if (nearest != null) + { + TileEntity te = nearest.getTileEntity(world); + if (te instanceof TileEntityPainter) + { + ((TileEntityPainter) te).dominantToPlayer(player); + } + } + + // TODO + // Make sure this works in a way so that the nearest Painter quickly + // takes priority, but there is no race condition... + // Also maybe some hysteresis? + } + } + + private void dominantToPlayer(EntityPlayerMP player) + { + GCPlayerStats.get(player).setGlassColors(this.glassColor[0], this.glassColor[1], this.glassColor[2]); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + // Used to do the painting! + for (EntityPlayer entityPlayer : playersUsing) + { + this.buttonPressed(index, entityPlayer, Side.SERVER); + } + } + + public void buttonPressed(int index, EntityPlayer player, Side side) + { + switch (index) + { + case 0: // Apply Paint + this.applyColorToItem(this.getStackInSlot(1), this.guiColor, side, player); + break; + case 1: // Mix Colors + this.takeColorFromItem(this.getStackInSlot(0)); + break; + case 2: // Reset Colors + this.guiColor = 0xffffff; + break; + } + } + + @Override + public boolean getDisabled(int index) + { + return false; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.world.isRemote) + { + return; + } + + sendData.add(this.guiColor); + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world.isRemote) + { + try + { + this.guiColor = buffer.readInt(); + } catch (Exception ignore) + { + ignore.printStackTrace(); + } + } + } + + // Any special cases go here, e.g. coloured dye or paint items added by + // other mods + private static int tryOtherModDyes(ItemStack itemStack) + { + Item item = itemStack.getItem(); + + if (CompatibilityManager.isIc2Loaded()) + { + ItemStack ic2paintbrush = IC2Items.getItem("painter"); + if (ic2paintbrush != null && item == ic2paintbrush.getItem()) + { + return ItemDye.DYE_COLORS[itemStack.getItemDamage()]; + } + } + + if (CompatibilityManager.isBOPLoaded()) + { + if (item == BOPItems.black_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.BLACK.getDyeDamage()]; + if (item == BOPItems.blue_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.BLUE.getDyeDamage()]; + if (item == BOPItems.brown_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.BROWN.getDyeDamage()]; + if (item == BOPItems.green_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.GREEN.getDyeDamage()]; + if (item == BOPItems.white_dye) + return ItemDye.DYE_COLORS[EnumDyeColor.WHITE.getDyeDamage()]; + } + + return -1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPanelLight.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPanelLight.java new file mode 100644 index 00000000..d0531efa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPanelLight.java @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; + +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; + +import io.netty.buffer.ByteBuf; + +public class TileEntityPanelLight extends TileEntity implements IPacketReceiver +{ + + public int meta; + private IBlockState superState; + private static IBlockState defaultLook = AsteroidBlocks.blockBasic.getStateFromMeta(6); + public int color = 0xf0f0e0; + @SideOnly(Side.CLIENT) private AxisAlignedBB renderAABB; + + public TileEntityPanelLight() + { + } + + public void initialise(int type, EnumFacing facing, EntityPlayer player, boolean isRemote, IBlockState superStateClient) + { + this.meta = facing.ordinal(); + if (isRemote) + { + this.superState = superStateClient; + this.color = BlockPanelLighting.color; + } else + { + GCPlayerStats stats = GCPlayerStats.get(player); + this.superState = stats.getPanelLightingBases()[type]; + this.color = stats.getPanelLightingColor(); + } + } + + public IBlockState getBaseBlock() + { + if (this.superState != null && this.superState.getBlock() == Blocks.AIR) + { + this.superState = null; + } + return this.superState == null ? defaultLook : this.superState; + } + + public BlockPanelLighting.PanelType getType() + { + if (this.world != null) + { + IBlockState b = this.world.getBlockState(this.pos); + if (b.getBlock() instanceof BlockPanelLighting) + { + return b.getValue(BlockPanelLighting.TYPE); + } + } + return BlockPanelLighting.PanelType.SQUARE; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.meta = nbt.getInteger("meta"); + if (nbt.hasKey("col")) + { + this.color = nbt.getInteger("col"); + } + NBTTagCompound tag = nbt.getCompoundTag("sust"); + if (!tag.isEmpty()) + { + this.superState = readBlockState(tag); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("meta", this.meta); + nbt.setInteger("col", this.color); + if (this.superState != null) + { + NBTTagCompound tag = new NBTTagCompound(); + writeBlockState(tag, this.superState); + nbt.setTag("sust", tag); + } + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + //TODO Create datafixer to transition to NBTUtil methods + + /** + * Reads a blockstate from the given tag. In MC1.10+ use NBTUtil instead! + */ + public static IBlockState readBlockState(NBTTagCompound tag) + { + if (!tag.hasKey("Name", 8)) + { + return Blocks.AIR.getDefaultState(); + } else + { + Block block = Block.REGISTRY.getObject(new ResourceLocation(tag.getString("Name"))); + + if (tag.hasKey("Meta")) + { + int meta = tag.getInteger("Meta"); + if (meta >= 0 && meta < 16) + { + return block.getStateFromMeta(meta); + } + } + + return block.getDefaultState(); + } + } + + /** + * Writes the given blockstate to the given tag. In MC1.10+ use NBTUtil + * instead! + */ + public static NBTTagCompound writeBlockState(NBTTagCompound tag, IBlockState state) + { + + tag.setString("Name", Block.REGISTRY.getNameForObject(state.getBlock()).toString()); + tag.setInteger("Meta", state.getBlock().getMetaFromState(state)); + return tag; + } + + public static IBlockState readBlockState(String name, Integer meta) + { + Block block = Block.REGISTRY.getObject(new ResourceLocation(name)); + if (block == null) + { + return Blocks.AIR.getDefaultState(); + } + return block.getStateFromMeta(meta); + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request any networked information from server on first client update + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.world.isRemote) + { + return; + } + + sendData.add((byte) this.meta); + sendData.add(this.color); + if (this.superState != null) + { + Block block = this.superState.getBlock(); + if (block == Blocks.AIR) + { + this.superState = null; + return; + } + + sendData.add(Block.REGISTRY.getNameForObject(block).toString()); + sendData.add((byte) block.getMetaFromState(this.superState)); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + if (this.world.isRemote) + { + try + { + this.meta = buffer.readByte(); + this.color = buffer.readInt(); + if (buffer.readableBytes() > 0) + { + String name = ByteBufUtils.readUTF8String(buffer); + int otherMeta = buffer.readByte(); + this.superState = readBlockState(name, otherMeta); + this.world.markBlockRangeForRenderUpdate(this.pos, this.pos); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + public boolean getEnabled() + { + return !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityParaChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityParaChest.java new file mode 100644 index 00000000..904b8fde --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityParaChest.java @@ -0,0 +1,313 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Iterator; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; + +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockParaChest; +import micdoodle8.mods.galacticraft.core.entities.IScaleableFuelLevel; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.inventory.IInventorySettable; +import micdoodle8.mods.galacticraft.core.network.PacketDynamicInventory; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; + +import io.netty.buffer.ByteBuf; + +public class TileEntityParaChest extends TileEntityAdvanced implements IInventorySettable, IScaleableFuelLevel +{ + + private final int tankCapacity = 5000; + @NetworkedField(targetSide = Side.CLIENT) public FluidTank fuelTank = new FluidTank(this.tankCapacity); + + public boolean adjacentChestChecked = false; + public float lidAngle; + public float prevLidAngle; + public int numUsingPlayers; + @NetworkedField(targetSide = Side.CLIENT) public EnumDyeColor color = EnumDyeColor.RED; + + public TileEntityParaChest() + { + super("container.parachest.name"); + this.color = EnumDyeColor.RED; + inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + // Request size + contents information from server + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamicInventory(this)); + } + } + + @Override + public int getScaledFuelLevel(int i) + { + final double fuelLevel = this.fuelTank.getFluid() == null ? 0 : this.fuelTank.getFluid().amount; + + return (int) (fuelLevel * i / this.tankCapacity); + } + + @Override + public void setSizeInventory(int size) + { + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + // Custom size loading, so handle in this class + return false; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + int size = nbt.getInteger("chestContentLength"); + if ((size - 3) % 18 != 0) + { + size += 18 - ((size - 3) % 18); + } + this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); + + ItemStackHelper.loadAllItems(nbt, this.getInventory()); + + if (nbt.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + + if (nbt.hasKey("color")) + { + this.color = EnumDyeColor.byDyeDamage(nbt.getInteger("color")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setInteger("chestContentLength", this.getInventory().size()); + ItemStackHelper.saveAllItems(nbt, this.getInventory()); + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + + nbt.setInteger("color", this.color.getDyeDamage()); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void updateContainingBlockInfo() + { + super.updateContainingBlockInfo(); + this.adjacentChestChecked = false; + } + + @Override + public void update() + { + super.update(); + float f; + + if (!this.world.isRemote && this.numUsingPlayers != 0 && (this.ticks + this.getPos().getX() + this.getPos().getY() + this.getPos().getZ()) % 200 == 0) + { + this.numUsingPlayers = 0; + f = 5.0F; + List list = this.world.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB(this.getPos().getX() - f, this.getPos().getY() - f, this.getPos().getZ() - f, + this.getPos().getX() + 1 + f, this.getPos().getY() + 1 + f, this.getPos().getZ() + 1 + f)); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) + { + EntityPlayer entityplayer = (EntityPlayer) iterator.next(); + + if (entityplayer.openContainer instanceof ContainerParaChest) + { + ++this.numUsingPlayers; + } + } + } + + this.prevLidAngle = this.lidAngle; + f = 0.1F; + double d0; + + if (this.numUsingPlayers > 0 && this.lidAngle == 0.0F) + { + double d1 = this.getPos().getX() + 0.5D; + d0 = this.getPos().getZ() + 0.5D; + + this.world.playSound(null, d1, this.getPos().getY() + 0.5D, d0, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.numUsingPlayers == 0 && this.lidAngle > 0.0F || this.numUsingPlayers > 0 && this.lidAngle < 1.0F) + { + float f1 = this.lidAngle; + + if (this.numUsingPlayers > 0) + { + this.lidAngle += f; + } else + { + this.lidAngle -= f; + } + + if (this.lidAngle > 1.0F) + { + this.lidAngle = 1.0F; + } + + float f2 = 0.5F; + + if (this.lidAngle < f2 && f1 >= f2) + { + d0 = this.getPos().getX() + 0.5D; + double d2 = this.getPos().getZ() + 0.5D; + + this.world.playSound(null, d0, this.getPos().getY() + 0.5D, d2, SoundEvents.BLOCK_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.lidAngle < 0.0F) + { + this.lidAngle = 0.0F; + } + } + + if (!this.world.isRemote) + { + this.checkFluidTankTransfer(this.getInventory().size() - 1, this.fuelTank); + } + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + FluidUtil.tryFillContainerFuel(tank, this.getInventory(), slot); + } + + @Override + public boolean receiveClientEvent(int par1, int par2) + { + if (par1 == 1) + { + this.numUsingPlayers = par2; + return true; + } else + { + return super.receiveClientEvent(par1, par2); + } + } + + @Override + public void openInventory(EntityPlayer player) + { + if (this.numUsingPlayers < 0) + { + this.numUsingPlayers = 0; + } + + ++this.numUsingPlayers; + this.world.addBlockEvent(this.getPos(), this.getBlockType(), 1, this.numUsingPlayers); + this.world.notifyNeighborsOfStateChange(this.getPos(), this.getBlockType(), false); + this.world.notifyNeighborsOfStateChange(this.getPos().down(), this.getBlockType(), false); + } + + @Override + public void closeInventory(EntityPlayer player) + { + if (this.getBlockType() != null && this.getBlockType() instanceof BlockParaChest) + { + --this.numUsingPlayers; + this.world.addBlockEvent(this.getPos(), this.getBlockType(), 1, this.numUsingPlayers); + this.world.notifyNeighborsOfStateChange(this.getPos(), this.getBlockType(), false); + this.world.notifyNeighborsOfStateChange(this.getPos().down(), this.getBlockType(), false); + } + } + + @Override + public boolean isItemValidForSlot(int par1, ItemStack par2ItemStack) + { + return true; + } + + @Override + public void invalidate() + { + super.invalidate(); + this.updateContainingBlockInfo(); + } + + @Override + public double getPacketRange() + { + return 12.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + EnumDyeColor color = this.color; + + super.decodePacketdata(buffer); + + if (this.world.isRemote && color != this.color) + { + this.world.markBlockRangeForRenderUpdate(getPos(), getPos()); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlatform.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlatform.java new file mode 100644 index 00000000..ba473c0d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlatform.java @@ -0,0 +1,553 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockPlatform; +import micdoodle8.mods.galacticraft.core.blocks.BlockPlatform.EnumCorner; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; + +public class TileEntityPlatform extends TileEntity implements ITickable +{ + + private static final int MAXRANGE = 16; + private int corner = 0; + private AxisAlignedBB detection = null; + private boolean noCollide; + private boolean moving; + private boolean lightOn = false; + private int colorState = 0; // 0 = green 1 = red + private int colorTicks = 0; + private AxisAlignedBB renderAABB; + private int lightA; + private int lightB; + private int deltaY; + private boolean firstTickCheck; + + public TileEntityPlatform() + { + } + + public TileEntityPlatform(int meta) + { + this.corner = (meta > 4 || meta < 0) ? 0 : meta; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.corner = nbt.getInteger("co"); + if (this.corner != 0) + { + this.firstTickCheck = true; + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("co", this.corner); + return nbt; + } + + @Override + public void update() + { + if (this.firstTickCheck && !this.world.isRemote) + { + this.firstTickCheck = !this.checkIntact(); + } + + if (this.corner == 0 && !this.world.isRemote) + { + final List adjacentPlatforms = new LinkedList<>(); + final int thisX = this.getPos().getX(); + final int thisY = this.getPos().getY(); + final int thisZ = this.getPos().getZ(); + + for (int x = -1; x < 1; x++) + { + for (int z = -1; z < 1; z++) + { + BlockPos pos = new BlockPos(x + thisX, thisY, z + thisZ); + final TileEntity tile = this.world.isBlockLoaded(pos, false) ? this.world.getTileEntity(pos) : null; + + if (tile instanceof TileEntityPlatform && !tile.isInvalid() && ((TileEntityPlatform) tile).corner == 0) + { + final TileEntity tileUp = this.world.getTileEntity(pos.up()); + final TileEntity tileDown = this.world.getTileEntity(pos.down()); + if (!(tileUp instanceof TileEntityPlatform) && !(tileDown instanceof TileEntityPlatform)) + { + adjacentPlatforms.add((TileEntityPlatform) tile); + } + } + } + } + + if (adjacentPlatforms.size() == 4) + { + int index = 1; + for (final TileEntityPlatform tile : adjacentPlatforms) + { + tile.setWhole(index++); + ; + } + } + } else if (this.world.isRemote) + { + this.updateClient(); + } + } + + @SideOnly(Side.CLIENT) + private void updateClient() + { + this.lightOn = false; + if (this.colorTicks > 0) + { + if (--this.colorTicks == 0) + { + this.colorState = 0; + } + } + + IBlockState b = this.world.getBlockState(this.getPos()); + if (b.getBlock() == GCBlocks.platform && b.getValue(BlockPlatform.CORNER) == BlockPlatform.EnumCorner.NW) + { + // Scan area for player entities and light up + if (this.detection == null) + { + this.detection = new AxisAlignedBB(this.getPos().getX() + 0.9D, this.getPos().getY() + 0.75D, this.getPos().getZ() + 0.9D, this.getPos().getX() + 1.1D, this.getPos().getY() + 1.85D, + this.getPos().getZ() + 1.1D); + } + final List list = this.world.getEntitiesWithinAABB(EntityPlayer.class, detection); + + if (list.size() > 0) + { + // Light up the platform + this.lightOn = true; + + // If this player is within the box + EntityPlayerSP p = FMLClientHandler.instance().getClientPlayerEntity(); + GCPlayerStatsClient stats = GCPlayerStatsClient.get(p); + if (list.contains(p) && !stats.getPlatformControlled() && p.getRidingEntity() == null) + { + if (p.movementInput.sneak) + { + int canDescend = this.checkNextPlatform(-1); + if (canDescend == -1) + { + this.colorState = 1; + this.colorTicks = 16; + } else if (canDescend > 0) + { + TileEntity te = this.world.getTileEntity(this.pos.down(canDescend)); + if (te instanceof TileEntityPlatform) + { + TileEntityPlatform tep = (TileEntityPlatform) te; + stats.startPlatformAscent(this, tep, this.pos.getY() - canDescend + (this.world.provider instanceof IZeroGDimension ? 0.97D : (double) BlockPlatform.HEIGHT)); + this.startMove(tep); + tep.startMove(this); + } + } + } else if (p.movementInput.jump) + { + int canAscend = this.checkNextPlatform(1); + if (canAscend == -1) + { + this.colorState = 1; + this.colorTicks = 16; + } else if (canAscend > 0) + { + TileEntity te = this.world.getTileEntity(this.pos.up(canAscend)); + if (te instanceof TileEntityPlatform) + { + p.motionY = 0D; + TileEntityPlatform tep = (TileEntityPlatform) te; + stats.startPlatformAscent(tep, this, this.pos.getY() + canAscend + BlockPlatform.HEIGHT + 0.01D); + this.startMove(tep); + tep.startMove(this); + } + } + } + } + } + } + } + + @SideOnly(Side.CLIENT) + private void startMove(TileEntityPlatform te) + { + this.moving = true; + this.lightA = this.getBlendedLight(); + this.lightB = te.getBlendedLight(); + this.deltaY = te.getPos().getY() - this.getPos().getY(); + } + + /** + * @return 0 for no platform, range for good platform, -1 for blocked + * platform + */ + private int checkNextPlatform(int dir) + { + final int thisX = this.getPos().getX(); + final int thisY = this.getPos().getY(); + final int thisZ = this.getPos().getZ(); + int maxY = thisY + MAXRANGE * dir; + if (maxY > 255) + maxY = 255; + if (maxY < 0) + maxY = 0; + + for (int y = thisY + dir; y != maxY; y += dir) + { + int c1 = this.checkCorner(new BlockPos(thisX, y, thisZ), BlockPlatform.EnumCorner.NW); + if (c1 >= 2) + return c1 - 3; + c1 += this.checkCorner(new BlockPos(thisX + 1, y, thisZ), BlockPlatform.EnumCorner.NE) * 4; + if (c1 >= 8) + return c1 - 3; + c1 += this.checkCorner(new BlockPos(thisX, y, thisZ + 1), BlockPlatform.EnumCorner.SW) * 16; + if (c1 >= 32) + return c1 - 3; + c1 += this.checkCorner(new BlockPos(thisX + 1, y, thisZ + 1), BlockPlatform.EnumCorner.SE) * 64; + if (c1 >= 128) + return c1 - 3; + // Good platform on all four corners + if (c1 == 0) + continue; + if (this.motionObstructed(thisY + 1, y - thisY)) + { + return -1; + } + return (y - thisY) * dir; + } + return 0; + } + + /** + * @return 0 for air, 1 for good platform, 2 for blocked platform, 3 for + * block + */ + private int checkCorner(BlockPos blockPos, EnumCorner corner) + { + IBlockState b = this.world.getBlockState(blockPos); + if (b.getBlock() instanceof BlockAir) + { + return 0; + } + if (b.getBlock() == GCBlocks.platform && b.getValue(BlockPlatform.CORNER) == corner) + { + return (this.world.getBlockState(blockPos.up(1)).causesSuffocation() || this.world.getBlockState(blockPos.up(2)).causesSuffocation()) ? 2 : 1; + } + if (b.causesSuffocation() || b.getBlock().isFullBlock(b)) + { + return 3; + } + return 0; + } + + private void setWhole(int index) + { + this.corner = index; + this.world.setBlockState(this.getPos(), GCBlocks.platform.getDefaultState().withProperty(BlockPlatform.CORNER, EnumCorner.byMetadata(index))); + } + + public void onDestroy(TileEntity callingBlock) + { + if (this.corner > 0) + { + resetBlocks(); + } + this.world.destroyBlock(this.pos, true); + } + + private void resetBlocks() + { + List positions = new ArrayList<>(); + this.getPositions(this.pos, positions); + + for (BlockPos pos : positions) + { + if (this.world.isBlockLoaded(pos, false) && this.world.getBlockState(pos).getBlock() == GCBlocks.platform) + { + final TileEntity tile = this.world.getTileEntity(pos); + if (tile instanceof TileEntityPlatform) + { + ((TileEntityPlatform) tile).setWhole(0); + } + } + } + } + + public void getPositions(BlockPos blockPos, List positions) + { + int x = blockPos.getX(); + int y = blockPos.getY(); + int z = blockPos.getZ(); + switch (this.corner) + { + case 0: + break; + case 1: + positions.add(new BlockPos(x + 1, y, z)); + positions.add(new BlockPos(x, y, z + 1)); + positions.add(new BlockPos(x + 1, y, z + 1)); + break; + case 2: + positions.add(new BlockPos(x + 1, y, z)); + positions.add(new BlockPos(x, y, z - 1)); + positions.add(new BlockPos(x + 1, y, z - 1)); + break; + case 3: + positions.add(new BlockPos(x - 1, y, z)); + positions.add(new BlockPos(x, y, z + 1)); + positions.add(new BlockPos(x - 1, y, z + 1)); + break; + case 4: + positions.add(new BlockPos(x - 1, y, z)); + positions.add(new BlockPos(x, y, z - 1)); + positions.add(new BlockPos(x - 1, y, z - 1)); + break; + } + } + + private boolean checkIntact() + { + IBlockState bs = this.world.getBlockState(this.pos); + if (bs.getBlock() != GCBlocks.platform || ((BlockPlatform.EnumCorner) bs.getValue(BlockPlatform.CORNER)).getMeta() != this.corner) + { + this.resetBlocks(); + return false; + } + int x = this.pos.getX(); + int y = this.pos.getY(); + int z = this.pos.getZ(); + int count = 0; + switch (this.corner) + { + case 0: + count = 3; + break; + case 1: + count += checkState(new BlockPos(x + 1, y, z), 3); + count += checkState(new BlockPos(x, y, z + 1), 2); + count += checkState(new BlockPos(x + 1, y, z + 1), 4); + break; + case 2: + count += checkState(new BlockPos(x + 1, y, z), 4); + count += checkState(new BlockPos(x, y, z - 1), 1); + count += checkState(new BlockPos(x + 1, y, z - 1), 3); + break; + case 3: + count += checkState(new BlockPos(x - 1, y, z), 1); + count += checkState(new BlockPos(x, y, z + 1), 4); + count += checkState(new BlockPos(x - 1, y, z + 1), 2); + break; + case 4: + count += checkState(new BlockPos(x - 1, y, z), 2); + count += checkState(new BlockPos(x, y, z - 1), 3); + count += checkState(new BlockPos(x - 1, y, z - 1), 1); + break; + } + + if (count >= 3) + { + return count == 3; + } + + this.resetBlocks(); + return true; + } + + private int checkState(BlockPos blockPos, int meta) + { + if (!this.world.isBlockLoaded(blockPos, false)) + return 4; + + IBlockState bs = this.world.getBlockState(blockPos); + if (bs.getBlock() == GCBlocks.platform && ((BlockPlatform.EnumCorner) bs.getValue(BlockPlatform.CORNER)).getMeta() == meta) + { + final TileEntity tile = this.world.getTileEntity(blockPos); + if (tile instanceof TileEntityPlatform) + { + ((TileEntityPlatform) tile).corner = meta; + ((TileEntityPlatform) tile).firstTickCheck = false; + return 1; + } + } + + return 0; + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) + { + return oldState.getBlock() != newState.getBlock(); + } + + public boolean noCollide() + { + return this.noCollide; + } + + public void markNoCollide(int y, boolean b) + { + TileEntity te; + final int x = this.getPos().getX(); + final int z = this.getPos().getZ(); + y += this.getPos().getY(); + te = this.world.getTileEntity(new BlockPos(x, y, z)); + if (te instanceof TileEntityPlatform) + { + ((TileEntityPlatform) te).noCollide = b; + } + te = this.world.getTileEntity(new BlockPos(x + 1, y, z)); + if (te instanceof TileEntityPlatform) + { + ((TileEntityPlatform) te).noCollide = b; + } + te = this.world.getTileEntity(new BlockPos(x, y, z + 1)); + if (te instanceof TileEntityPlatform) + { + ((TileEntityPlatform) te).noCollide = b; + } + te = this.world.getTileEntity(new BlockPos(x + 1, y, z + 1)); + if (te instanceof TileEntityPlatform) + { + ((TileEntityPlatform) te).noCollide = b; + } + } + + public boolean lightEnabled() + { + return this.lightOn; + } + + public int lightColor() + { + return this.colorState; + } + + public boolean isMoving() + { + return this.moving; + } + + public void stopMoving() + { + this.moving = false; + } + + @SideOnly(Side.CLIENT) + public float getYOffset(float partialTicks) + { + if (this.moving) + { + EntityPlayerSP p = FMLClientHandler.instance().getClientPlayerEntity(); + float playerY = (float) (p.lastTickPosY + (p.posY - p.lastTickPosY) * (double) partialTicks); + return (playerY - this.pos.getY() - BlockPlatform.HEIGHT); + } else + return 0.0F; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(this.pos.add(-1, -18, -1), this.pos.add(1, 18, 1)); + } + return this.renderAABB; + } + + @SideOnly(Side.CLIENT) + public int getBlendedLight() + { + int j = 0, k = 0; + int light = this.world.getCombinedLight(this.getPos().up(), 0); + j += light % 65536; + k += light / 65536; + light = this.world.getCombinedLight(this.getPos().add(1, 1, 0), 0); + j += light % 65536; + k += light / 65536; + light = this.world.getCombinedLight(this.getPos().add(0, 1, 1), 0); + j += light % 65536; + k += light / 65536; + light = this.world.getCombinedLight(this.getPos().add(1, 1, 1), 0); + j += light % 65536; + k += light / 65536; + return j / 4 + k * 16384; + } + + @SideOnly(Side.CLIENT) + public float getMeanLightX(float yOffset) + { + float a = (float) (this.lightA % 65536); + float b = (float) (this.lightB % 65536); + float f = yOffset / deltaY; + return (1 - f) * a + f * b; + } + + @SideOnly(Side.CLIENT) + public float getMeanLightZ(float yOffset) + { + float a = (float) (this.lightA / 65536); + float b = (float) (this.lightB / 65536); + float f = yOffset / deltaY; + return (1 - f) * a + f * b; + } + + @SideOnly(Side.CLIENT) + public boolean motionObstructed(double y, double velocityY) + { + EntityPlayerSP p = FMLClientHandler.instance().getClientPlayerEntity(); + int x = this.pos.getX() + 1; + int z = this.pos.getZ() + 1; + double size = 9 / 16D; + double height = p.height + velocityY; + double depth = velocityY < 0D ? 0.179D : 0D; + AxisAlignedBB bb = new AxisAlignedBB(x - size, y - depth, z - size, x + size, y + height, z + size); + BlockPlatform.ignoreCollisionTests = true; + boolean obstructed = !this.world.getCollisionBoxes(p, bb).isEmpty(); + BlockPlatform.ignoreCollisionTests = false; + return obstructed; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlayerDetector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlayerDetector.java new file mode 100644 index 00000000..3e4fc9be --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityPlayerDetector.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockConcealedDetector; + +public class TileEntityPlayerDetector extends TileEntity implements ITickable +{ + + private int ticks = 24; + private AxisAlignedBB playerSearch; + private boolean result = false; + + @Override + public void update() + { + if (!this.world.isRemote && ++this.ticks >= 25) + { + this.ticks = 0; + int facing = 0; + IBlockState state = this.world.getBlockState(this.pos); + if (state.getBlock() == GCBlocks.concealedDetector) + { + facing = state.getValue(BlockConcealedDetector.FACING); + } + int x = this.getPos().getX(); + double y = this.getPos().getY(); + int z = this.getPos().getZ(); + double range = 14D; + double hysteresis = result ? 3D : 0D; + switch (facing) + { + case 0: + this.playerSearch = + new AxisAlignedBB(x - range / 2 + 0.5D - hysteresis, y - 6 - hysteresis, z - range - hysteresis, x + range / 2 + 0.5D + hysteresis, y + 2 + hysteresis, z + hysteresis); + break; + case 1: + this.playerSearch = + new AxisAlignedBB(x + 1 - hysteresis, y - 6 - hysteresis, z - range / 2 + 0.5D - hysteresis, x + range + 1 + hysteresis, y + 2 + hysteresis, z + range / 2 + 0.5D + hysteresis); + break; + case 2: + // South + this.playerSearch = new AxisAlignedBB(x - range / 2 + 0.5D - hysteresis, y - 6 - hysteresis, z + 1 - hysteresis, x + range / 2 + 0.5D + hysteresis, y + 2 + hysteresis, + z + range + 1D + hysteresis); + break; + case 3: + this.playerSearch = + new AxisAlignedBB(x - range - hysteresis, y - 6 - hysteresis, z - range / 2 + 0.5D - hysteresis, x + hysteresis, y + 2 + hysteresis, z + range / 2 + 0.5D + hysteresis); + } + result = !this.world.getEntitiesWithinAABB(EntityPlayer.class, playerSearch).isEmpty(); + if (this.getBlockType() instanceof BlockConcealedDetector) + { + ((BlockConcealedDetector) this.blockType).updateState(this.world, this.getPos(), result); + } + } + } + + public boolean detectingPlayer() + { + return result; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityRefinery.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityRefinery.java new file mode 100644 index 00000000..296d343e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityRefinery.java @@ -0,0 +1,425 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import javax.annotation.Nullable; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockRefinery; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; + +public class TileEntityRefinery extends TileBaseElectricBlockWithInventory implements ISidedInventory, IFluidHandlerWrapper +{ + + private final int tankCapacity = 24000; + @NetworkedField(targetSide = Side.CLIENT) public FluidTank oilTank = new FluidTank(this.tankCapacity); + @NetworkedField(targetSide = Side.CLIENT) public FluidTank fuelTank = new FluidTank(this.tankCapacity); + + public static final int PROCESS_TIME_REQUIRED = 2; + public static final int OUTPUT_PER_SECOND = 1; + @NetworkedField(targetSide = Side.CLIENT) public int processTicks = 0; + + public TileEntityRefinery() + { + super("container.refinery.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 60); + this.oilTank.setFluid(new FluidStack(GCFluids.fluidOil, 0)); + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, 0)); + this.inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + final FluidStack liquid = FluidUtil.getFluidContained(this.getInventory().get(1)); + if (FluidUtil.isOil(liquid)) + { + FluidUtil.loadFromContainer(this.oilTank, GCFluids.fluidOil, this.getInventory(), 1, liquid.amount); + } + + checkFluidTankTransfer(2, this.fuelTank); + + if (this.canProcess() && this.hasEnoughEnergyToRun) + { + if (this.processTicks == 0) + { + this.processTicks = this.getProcessTimeRequired(); + } else + { + if (--this.processTicks <= 0) + { + this.smeltItem(); + this.processTicks = this.canProcess() ? this.getProcessTimeRequired() : 0; + } + } + } else + { + this.processTicks = 0; + } + } + } + + private int getProcessTimeRequired() + { + return (this.poweredByTierGC > 1) ? 1 : TileEntityRefinery.PROCESS_TIME_REQUIRED; + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + FluidUtil.tryFillContainerFuel(tank, this.getInventory(), slot); + } + + public int getScaledOilLevel(int i) + { + return this.oilTank.getFluidAmount() * i / this.oilTank.getCapacity(); + } + + public int getScaledFuelLevel(int i) + { + return this.fuelTank.getFluidAmount() * i / this.fuelTank.getCapacity(); + } + + public boolean canProcess() + { + if (this.oilTank.getFluidAmount() <= 0) + { + return false; + } + + if (this.fuelTank.getFluidAmount() >= this.fuelTank.getCapacity()) + { + return false; + } + + return !this.getDisabled(0); + + } + + public void smeltItem() + { + if (this.canProcess()) + { + final int oilAmount = this.oilTank.getFluidAmount(); + final int fuelSpace = this.fuelTank.getCapacity() - this.fuelTank.getFluidAmount(); + + final int amountToDrain = Math.min(Math.min(oilAmount, fuelSpace), TileEntityRefinery.OUTPUT_PER_SECOND); + + this.oilTank.drain(amountToDrain, true); + this.fuelTank.fill(FluidRegistry.getFluidStack(ConfigManagerCore.useOldFuelFluidID ? "fuelgc" : "fuel", amountToDrain), true); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + + if (nbt.hasKey("oilTank")) + { + this.oilTank.readFromNBT(nbt.getCompoundTag("oilTank")); + } + if (this.oilTank.getFluid() != null && this.oilTank.getFluid().getFluid() != GCFluids.fluidOil) + { + this.oilTank.setFluid(new FluidStack(GCFluids.fluidOil, this.oilTank.getFluidAmount())); + } + + if (nbt.hasKey("fuelTank")) + { + this.fuelTank.readFromNBT(nbt.getCompoundTag("fuelTank")); + } + if (this.fuelTank.getFluid() != null && this.fuelTank.getFluid().getFluid() != GCFluids.fluidFuel) + { + this.fuelTank.setFluid(new FluidStack(GCFluids.fluidFuel, this.fuelTank.getFluidAmount())); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + if (this.oilTank.getFluid() != null) + { + nbt.setTag("oilTank", this.oilTank.writeToNBT(new NBTTagCompound())); + } + + if (this.fuelTank.getFluid() != null) + { + nbt.setTag("fuelTank", this.fuelTank.writeToNBT(new NBTTagCompound())); + } + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (!itemstack.isEmpty() && this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return FluidUtil.isOilContainerAny(itemstack); + case 2: + return FluidUtil.isPartialContainer(itemstack, GCItems.fuelCanister); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (!itemstack.isEmpty() && this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack) || !this.shouldPullEnergy(); + case 1: + return FluidUtil.isEmptyContainer(itemstack); + case 2: + return FluidUtil.isFullContainer(itemstack); + default: + return false; + } + } + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return !itemstack.isEmpty() && ItemElectricBase.isElectricItem(itemstack.getItem()); + case 1: + case 2: + return FluidUtil.isValidContainer(itemstack); + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.UP; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockRefinery) + { + return state.getValue(BlockRefinery.FACING); + } + return EnumFacing.NORTH; + } + + private EnumFacing getOilPipe() + { + return byIndex().rotateY(); + } + + private EnumFacing getFuelPipe() + { + return byIndex().rotateYCCW(); + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + if (from == getFuelPipe()) + { + return this.fuelTank.getFluid() != null && this.fuelTank.getFluidAmount() > 0; + } + + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + if (from == getFuelPipe() && resource != null) + { + return this.fuelTank.drain(resource.amount, doDrain); + } + + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + if (from == getFuelPipe()) + { + return this.drain(from, new FluidStack(GCFluids.fluidFuel, maxDrain), doDrain); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (from == getOilPipe()) + { + return this.oilTank.getFluid() == null || this.oilTank.getFluidAmount() < this.oilTank.getCapacity(); + } + + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (from == getOilPipe() && resource != null) + { + final String liquidName = FluidRegistry.getFluidName(resource); + + if (liquidName != null && FluidUtil.testOil(liquidName)) + { + if (liquidName.equals(GCFluids.fluidOil.getName())) + { + used = this.oilTank.fill(resource, doFill); + } else + { + used = this.oilTank.fill(new FluidStack(GCFluids.fluidOil, resource.amount), doFill); + } + } + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTankInfo[] tankInfo = new FluidTankInfo[] + {}; + + if (from == getOilPipe()) + { + tankInfo = new FluidTankInfo[] + {new FluidTankInfo(this.oilTank)}; + } else if (from == getFuelPipe()) + { + tankInfo = new FluidTankInfo[] + {new FluidTankInfo(this.fuelTank)}; + } + + return tankInfo; + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + if (type == NetworkType.FLUID) + { + EnumFacing pipeSide = getFuelPipe(); + return direction == pipeSide || direction == pipeSide.getOpposite(); + } + return false; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityScreen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityScreen.java new file mode 100644 index 00000000..b1d6f237 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityScreen.java @@ -0,0 +1,1413 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.tile.ITileClientUpdates; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockScreen; +import micdoodle8.mods.galacticraft.core.client.screen.DrawGameScreen; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; + +public class TileEntityScreen extends TileEntityAdvanced implements ITileClientUpdates +{ + + public static float FRAMEBORDER = 0.098F; // used for rendering + public int imageType; + public DrawGameScreen screen; + public boolean connectedUp; + public boolean connectedDown; + public boolean connectedLeft; + public boolean connectedRight; + public int connectionsUp; + public int connectionsDown; + public int connectionsLeft; + public int connectionsRight; + public boolean isMultiscreen; + + public int screenOffsetx = 0; + public int screenOffsetz = 0; + + private int requiresUpdate = 0; + private boolean doneClientUpdate = false; + // Used on client side only + public boolean refreshOnUpdate = false; + private AxisAlignedBB renderAABB; + private static final boolean LOGGING = false; + + public TileEntityScreen() + { + super("tile.view_screen.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + public void setConnectedUp(boolean connectedUpL) + { + this.connectedUp = connectedUpL; + } + + public void setConnectedDown(boolean connectedDownL) + { + this.connectedDown = connectedDownL; + } + + public void setConnectedLeft(boolean connectedLeftL) + { + this.connectedLeft = connectedLeftL; + } + + public void setConnectedRight(boolean connectedRightL) + { + this.connectedRight = connectedRightL; + } + + public TileEntity setVerifiedConnectedUp(BlockVec3 vec, int meta) + { + TileEntity tileUp = vec.getTileEntityOnSide(this.world, 1); + this.setConnectedUp(tileUp instanceof TileEntityScreen && tileUp.getBlockMetadata() == meta && !tileUp.isInvalid()); + return tileUp; + } + + public TileEntity setVerifiedConnectedDown(BlockVec3 vec, int meta) + { + TileEntity tileDown = vec.getTileEntityOnSide(this.world, 0); + this.setConnectedDown(tileDown instanceof TileEntityScreen && tileDown.getBlockMetadata() == meta && !tileDown.isInvalid()); + return tileDown; + } + + public TileEntity setVerifiedConnectedLeft(BlockVec3 vec, int meta) + { + int side = this.getLeft(meta); + TileEntity tileLeft = vec.getTileEntityOnSide(this.world, side); + this.setConnectedLeft(tileLeft instanceof TileEntityScreen && tileLeft.getBlockMetadata() == meta && !tileLeft.isInvalid()); + return tileLeft; + } + + public TileEntity setVerifiedConnectedRight(BlockVec3 vec, int meta) + { + int side = this.getRight(meta); + TileEntity tileRight = vec.getTileEntityOnSide(this.world, side); + this.setConnectedRight(tileRight instanceof TileEntityScreen && tileRight.getBlockMetadata() == meta && !tileRight.isInvalid()); + return tileRight; + } + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + this.clientOnLoad(); + this.screen = new DrawGameScreen(1.0F, 1.0F, this); + } + } + + @Override + public void buildDataPacket(int[] data) + { + data[0] = this.imageType; + int connectedFlags = 0; + if (this.connectedUp) + { + connectedFlags += 8; + } + if (this.connectedDown) + { + connectedFlags += 4; + } + if (this.connectedLeft) + { + connectedFlags += 2; + } + if (this.connectedRight) + { + connectedFlags += 1; + } + data[1] = connectedFlags; + } + + public EnumFacing byIndex() + { + return this.getFacing(this.world.getBlockState(getPos())); + } + + private EnumFacing getFacing(IBlockState state) + { + return state.getValue(BlockScreen.FACING); + } + + /** + * Call when a screen (which maybe part of a multiscreen) is either broken + * or rotated. + * + * @param state The state of the screen prior to breaking or rotation + */ + public void breakScreen(IBlockState state) + { + BlockVec3 vec = new BlockVec3(this); + int meta = state.getBlock().getMetaFromState(state); + TileEntity tile; + EnumFacing facingRight = getFacing(state).rotateY(); + + int left = this.connectionsLeft; + int right = this.connectionsRight; + int up = this.connectionsUp; + int down = this.connectionsDown; + + boolean doUp = this.connectedUp; + boolean doDown = this.connectedDown; + boolean doLeft = this.connectedLeft; + boolean doRight = this.connectedRight; + + for (int x = -left; x <= right; x++) + { + for (int z = -up; z <= down; z++) + { + if (x == 0 && z == 0) + { + this.resetToSingle(); + } else + { + BlockVec3 newVec = vec.clone().modifyPositionFromSide(facingRight, x).modifyPositionFromSide(EnumFacing.DOWN, z); + tile = newVec.getTileEntity(this.world); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta) + { + ((TileEntityScreen) tile).resetToSingle(); + } + } + } + } + + // TODO Try to generate largest screen possible out of remaining blocks + + this.setConnectedDown(false); + this.setConnectedUp(false); + this.setConnectedLeft(false); + this.setConnectedRight(false); + + if (doUp) + { + tile = vec.getTileEntityOnSide(this.world, 1); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + if (doLeft) + { + ((TileEntityScreen) tile).setConnectedLeft(true); + } + if (doRight) + { + ((TileEntityScreen) tile).setConnectedRight(true); + } + ((TileEntityScreen) tile).setConnectedUp(true); +// if (doLeft) ((TileEntityScreen)tile).connectedLeft = true; +// if (doRight) ((TileEntityScreen)tile).connectedRight = true; +// ((TileEntityScreen)tile).connectedUp = true; + ((TileEntityScreen) tile).refreshConnections(true); + } + } + if (doDown) + { + tile = vec.getTileEntityOnSide(this.world, 0); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + if (doLeft) + { + ((TileEntityScreen) tile).setConnectedLeft(true); + } + if (doRight) + { + ((TileEntityScreen) tile).setConnectedRight(true); + } + ((TileEntityScreen) tile).setConnectedDown(true); +// if (doLeft) ((TileEntityScreen)tile).connectedLeft = true; +// if (doRight) ((TileEntityScreen)tile).connectedRight = true; +// ((TileEntityScreen)tile).connectedDown = true; + ((TileEntityScreen) tile).refreshConnections(true); + } + } + if (doLeft) + { + tile = vec.getTileEntityOnSide(this.world, this.getLeft(meta)); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + if (doUp) + { + ((TileEntityScreen) tile).setConnectedUp(true); + } + if (doDown) + { + ((TileEntityScreen) tile).setConnectedDown(true); + } + ((TileEntityScreen) tile).setConnectedLeft(true); +// if (doUp) ((TileEntityScreen)tile).connectedUp = true; +// if (doDown) ((TileEntityScreen)tile).connectedDown = true; +// ((TileEntityScreen)tile).connectedLeft = true; + ((TileEntityScreen) tile).refreshConnections(true); + } + } + if (doRight) + { + tile = vec.getTileEntityOnSide(this.world, this.getRight(meta)); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + if (doUp) + { + ((TileEntityScreen) tile).setConnectedUp(true); + } + if (doDown) + { + ((TileEntityScreen) tile).setConnectedDown(true); + } + ((TileEntityScreen) tile).setConnectedRight(true); +// if (doUp) ((TileEntityScreen)tile).connectedUp = true; +// if (doDown) ((TileEntityScreen)tile).connectedDown = true; +// ((TileEntityScreen)tile).connectedRight = true; + ((TileEntityScreen) tile).refreshConnections(true); + } + } + } + + /** + * Check whether the screen can sustain 'multi-screen' connections on each + * of its 4 sides (note: this can be called recursively from inside itself) + * + * @param doScreen If true, build a new multi-screen if connections are + * found + */ + public void refreshConnections(boolean doScreen) + { + if (LOGGING) + this.log("Starting connection check"); + + IBlockState iblockstate = this.world.getBlockState(this.pos); + EnumFacing facing = iblockstate.getValue(BlockScreen.FACING); + + int meta = this.getBlockMetadata() & 7; + if (meta < 2) + { + // TODO System.out.println("Up/down oriented screens cannot be + // multiscreen"); + this.resetToSingle(); + return; + } + + TileEntity tileUp = null; + TileEntity tileDown = null; + TileEntity tileLeft = null; + TileEntity tileRight = null; + BlockVec3 vec = new BlockVec3(this); + + // First, basic check that a neighbour is there and in the same + // orientation + if (this.connectedUp) + { + tileUp = this.setVerifiedConnectedUp(vec, meta); + } + if (this.connectedDown) + { + tileDown = this.setVerifiedConnectedDown(vec, meta); + } + if (this.connectedLeft) + { + tileLeft = this.setVerifiedConnectedLeft(vec, meta); + } + if (this.connectedRight) + { + tileRight = this.setVerifiedConnectedRight(vec, meta); + } + + // Now test whether a connection can be sustained with that other tile + if (this.connectedUp) + { + this.setConnectedUp(this.tryConnectUp((TileEntityScreen) tileUp)); + } + + if (this.connectedDown) + { + this.setConnectedDown(this.tryConnectDown((TileEntityScreen) tileDown)); + } + + if (this.connectedLeft) + { + this.setConnectedLeft(this.tryConnectLeft((TileEntityScreen) tileLeft)); + } + + if (this.connectedRight) + { + this.setConnectedRight(this.tryConnectRight((TileEntityScreen) tileRight)); + } + if (LOGGING) + this.log("Ending connection check"); + if (doScreen) + { + this.checkScreenSize(); + this.markDirty(); + } + } + +// @Override +// public boolean canUpdate() +// { +// return false; +// } + + /** + * Cycle through different screen contents + */ + public void changeChannel() + { + if (!this.world.isRemote) + { + if (++this.imageType >= GalacticraftRegistry.getMaxScreenTypes()) + { + this.imageType = 0; + } + + boolean flag = false; + + if (!this.connectedRight && this.canJoinRight()) + { + this.joinRight(); + flag = true; + } else if (!this.connectedLeft && this.canJoinLeft()) + { + this.joinLeft(); + flag = true; + } else if (!this.connectedUp && this.canJoinUp()) + { + this.joinUp(); + flag = true; + } else if (!this.connectedDown && this.canJoinDown()) + { + this.joinDown(); + flag = true; + } + + this.doneClientUpdate = false; + this.refreshConnections(true); + this.markDirty(); + + if (!this.doneClientUpdate) + { + this.updateAllInDimension(); + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.imageType = nbt.getInteger("type"); + this.connectionsDown = nbt.getInteger("connectionsDown"); + this.connectionsUp = nbt.getInteger("connectionsUp"); + this.connectionsLeft = nbt.getInteger("connectionsLeft"); + this.connectionsRight = nbt.getInteger("connectionsRight"); + this.isMultiscreen = nbt.getBoolean("multiscreen"); + this.setConnectedUp(this.connectionsUp > 0); + this.setConnectedDown(this.connectionsDown > 0); + this.setConnectedLeft(this.connectionsLeft > 0); + this.setConnectedRight(this.connectionsRight > 0); +// this.connectedUp = (this.connectionsUp > 0); +// this.connectedDown = (this.connectionsDown > 0); +// this.connectedLeft = (this.connectionsLeft > 0); +// this.connectedRight = (this.connectionsRight > 0); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("type", this.imageType); + nbt.setInteger("connectionsDown", this.connectionsDown); + nbt.setInteger("connectionsUp", this.connectionsUp); + nbt.setInteger("connectionsLeft", this.connectionsLeft); + nbt.setInteger("connectionsRight", this.connectionsRight); + nbt.setBoolean("multiscreen", this.isMultiscreen); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public void checkScreenSize() + { + if (LOGGING) + this.log("Checking screen size"); + int up = 0; + int down = 0; + int left = 0; + int right = 0; + int meta = this.getBlockMetadata() & 7; + + BlockVec3 vec = new BlockVec3(this); + TileEntityScreen tile = this; + while (up < 8) + { + if (tile.connectedUp) + { + up++; + TileEntity newTile = vec.getTileEntityOnSide(this.world, 1); + if (newTile instanceof TileEntityScreen) + { + tile = (TileEntityScreen) newTile; + vec.translate(0, 1, 0); + } else + { + System.out.println("Debug - connected up to a non-screen tile"); +// tile.connectedUp = false; + this.setConnectedUp(false); + tile.markDirty(); + up--; + break; + } + } else + { + break; + } + } + + vec = new BlockVec3(this); + tile = this; + while (down < 8 - up) + { + if (tile.connectedDown) + { + down++; + TileEntity newTile = vec.getTileEntityOnSide(this.world, 0); + if (newTile instanceof TileEntityScreen) + { + tile = (TileEntityScreen) newTile; + vec.translate(0, -1, 0); + } else + { + System.out.println("Debug - connected down to a non-screen tile"); +// tile.connectedDown = false; + this.setConnectedDown(false); + tile.markDirty(); + down--; + break; + } + } else + { + break; + } + } + + vec = new BlockVec3(this); + tile = this; + int leftside = this.getLeft(meta); + while (left < ((up + down == 0) ? 1 : 8)) + { + if (tile.connectedLeft) + { + left++; + TileEntity newTile = vec.getTileEntityOnSide(this.world, leftside); + if (newTile instanceof TileEntityScreen) + { + tile = (TileEntityScreen) newTile; + vec = vec.newVecSide(leftside); + } else + { + System.out.println("Debug - connected left to a non-screen tile"); +// tile.connectedLeft = false; + this.setConnectedLeft(false); + tile.markDirty(); + left--; + break; + } + } else + { + break; + } + } + + vec = new BlockVec3(this); + tile = this; + int rightside = this.getRight(meta); + while (right < ((up + down == 0) ? 1 : 8) - left) + { + if (tile.connectedRight) + { + right++; + TileEntity newTile = vec.getTileEntityOnSide(this.world, rightside); + if (newTile instanceof TileEntityScreen) + { + tile = (TileEntityScreen) newTile; + vec = vec.newVecSide(rightside); + } else + { + System.out.println("Debug - connected right to a non-screen tile"); +// tile.connectedRight = false; + this.setConnectedRight(false); + tile.markDirty(); + right--; + break; + } + } else + { + break; + } + } + + if (LOGGING) + this.log("Screen size check midpoint " + up + " " + down + " " + left + " " + right + " "); + + vec = new BlockVec3(this); + TileEntity newtile = vec.getTileEntityOnSide(this.world, 1); + TileEntityScreen tileUp = (newtile instanceof TileEntityScreen) ? (TileEntityScreen) newtile : null; + newtile = vec.getTileEntityOnSide(this.world, 0); + TileEntityScreen tileDown = (newtile instanceof TileEntityScreen) ? (TileEntityScreen) newtile : null; + newtile = vec.getTileEntityOnSide(this.world, leftside); + TileEntityScreen tileLeft = (newtile instanceof TileEntityScreen) ? (TileEntityScreen) newtile : null; + newtile = vec.getTileEntityOnSide(this.world, rightside); + TileEntityScreen tileRight = (newtile instanceof TileEntityScreen) ? (TileEntityScreen) newtile : null; + // Prevent 3 x 1 and longer + if (left + right == 0 && up + down >= 1) + { + if (up > 0 && !tileUp.connectedUp) // No need for null check if up > + // 0 + { + up = 1; + down = 0; + } else + { + up = 0; + if (tileDown != null && !tileDown.connectedDown) + { + down = 1; + } else + { + down = 0; + } + } + } + if (up + down == 0 && left + right >= 1) + { + if (left > 0 && !tileLeft.connectedLeft) // No need for null check + // if right > 0 + { + if (right == 0 || tileRight == null || tileRight.connectionsLeft == 0) + { + left = 1; + right = 0; + } else + { + left = 0; + right = 1; + } + } else + { + left = 0; + if (tileRight != null && !tileRight.connectedRight) + { + right = 1; + } else + { + right = 0; + } + } + } + + if (up == 0) + { + this.setConnectedUp(false); + if (tileUp != null) + { + tileUp.setConnectedDown(false); + } +// this.connectedUp = false; +// if (tileUp != null) tileUp.connectedDown = false; + } + if (down == 0) + { + this.setConnectedDown(false); + if (tileUp != null) + { + tileUp.setConnectedUp(false); + } +// this.connectedDown = false; +// if (tileDown != null) tileDown.connectedUp = false; + } + if (left == 0) + { + this.setConnectedLeft(false); + if (tileUp != null) + { + tileUp.setConnectedRight(false); + } +// this.connectedLeft = false; +// if (tileLeft != null) tileLeft.connectedRight = false; + } + if (right == 0) + { + this.setConnectedRight(false); + if (tileUp != null) + { + tileUp.setConnectedLeft(false); + } +// this.connectedRight = false; +// if (tileRight != null) tileRight.connectedLeft = false; + } + + if (LOGGING) + this.log("Finished screen size check"); + + this.checkWholeScreen(up, down, left, right); + } + + /** + * After figuring out the screen edges (overall screen dimensions) check + * that the screen is a whole A x B rectangle with no tiles missing

If + * it is whole, set all tiles in the screen to match this screen type + * + * @param up Number of blocks the screen edge is away from this in the up + * direction + * @param down Number of blocks the screen edge is away from this in the + * down direction + * @param left Number of blocks the screen edge is away from this in the + * left direction + * @param right Number of blocks the screen edge is away from this in the + * right direction + * @return True if the screen was whole + */ + private boolean checkWholeScreen(int up, int down, int left, int right) + { + if (up + down + left + right == 0 || up < 0 || down < 0 || left < 0 || right < 0) + { + this.doneClientUpdate = true; + this.resetToSingle(); + return true; + } + + // System.out.println("Checking screen size at + // "+this.getPos().getX()+","+this.getPos().getZ()+": Up "+up+" Dn + // "+down+" Lf "+left+" Rg "+right); + + boolean screenWhole = true; + boolean existingScreen = false; + int barrierUp = up; + int barrierDown = down; + int barrierLeft = left; + int barrierRight = right; + + int meta = this.getBlockMetadata() & 7; + BlockVec3 vec = new BlockVec3(this); + ArrayList screenList = new ArrayList(); + +// int side = this.getRight(meta); + EnumFacing side = byIndex().rotateY(); + + for (int x = -left; x <= right; x++) + { + for (int z = -up; z <= down; z++) + { + BlockVec3 newVec = vec.clone().modifyPositionFromSide(side, x).modifyPositionFromSide(EnumFacing.DOWN, z); + TileEntity tile = newVec.getTileEntity(this.world); + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; + screenList.add(screenTile); + + if (screenTile.isMultiscreen) + { + if (screenTile.connectionsUp > z + up) + { + barrierUp = -z - 1; + existingScreen = true; + } + if (screenTile.connectionsDown > down - z) + { + barrierDown = z - 1; + existingScreen = true; + } + if (screenTile.connectionsLeft > x + left) + { + barrierLeft = -x - 1; + existingScreen = true; + } + if (screenTile.connectionsRight > right - x) + { + barrierRight = x - 1; + existingScreen = true; + } + } + } else + { + screenWhole = false; + } + } + } + + if (!screenWhole) + { + for (TileEntityScreen scr : screenList) + { + scr.resetToSingle(); + } + + return false; + } + + if (existingScreen) + { + return this.checkWholeScreen(barrierUp, barrierDown, barrierLeft, barrierRight); + } + + DrawGameScreen newScreen = null; + boolean serverside = true; + TileEntity bottomLeft = vec.clone().modifyPositionFromSide(side, -left).modifyPositionFromSide(EnumFacing.DOWN, down).getTileEntity(this.world); + if (this.world.isRemote) + { + if (bottomLeft instanceof TileEntityScreen) // It always will be if + // reached this far + { + newScreen = ((TileEntityScreen) bottomLeft).screen; + if (!newScreen.check(1.0F + left + right, 1.0F + up + down)) + { + newScreen = new DrawGameScreen(1.0F + left + right, 1.0F + up + down, bottomLeft); + } + } + serverside = false; + } + + Iterator it = screenList.iterator(); + for (int x = -left; x <= right; x++) + { + for (int z = -up; z <= down; z++) + { + TileEntityScreen screenTile = it.next(); + screenTile.screenOffsetx = x + left; + screenTile.screenOffsetz = z + up; + screenTile.screen = newScreen; + screenTile.connectionsLeft = x + left; + screenTile.connectionsRight = right - x; + screenTile.connectionsUp = z + up; + screenTile.connectionsDown = down - z; + screenTile.isMultiscreen = true; + screenTile.refreshOnUpdate = false; + if (serverside) + { + screenTile.imageType = this.imageType; + screenTile.markDirty(); + screenTile.updateAllInDimension(); + } + screenTile.refreshConnections(false); + } + } + + this.connectionsUp = up; + this.connectionsDown = down; + this.connectionsLeft = left; + this.connectionsRight = right; + + return true; + } + + /** + * Reset the screen to a 1x1 size, not part of a 'multi-screen' + */ + public void resetToSingle() + { + this.screenOffsetx = 0; + this.screenOffsetz = 0; + this.connectionsUp = 0; + this.connectionsDown = 0; + this.connectionsLeft = 0; + this.connectionsRight = 0; + this.isMultiscreen = false; +// this.connectedDown = this.connectedLeft = this.connectedRight = this.connectedUp = false; + this.setConnectedLeft(false); + this.setConnectedRight(false); + this.setConnectedUp(false); + this.setConnectedDown(false); + this.refreshOnUpdate = false; + this.markDirty(); + if (this.world.isRemote) + { + this.screen = new DrawGameScreen(1.0F, 1.0F, this); + } else + { + this.updateAllInDimension(); + } + } + + /** + * Get the Minecraft direction which is on the left side for the block + * orientation given by metadata + */ + private int getLeft(int meta) + { + switch (meta) + { + case 2: + return 4; + case 3: + return 5; + case 4: + return 3; + case 5: + return 2; + } + return 4; + } + + /** + * Get the Minecraft direction which is on the right side for the block + * orientation given by metadata + */ + private int getRight(int meta) + { + switch (meta) + { + case 2: + return 5; + case 3: + return 4; + case 4: + return 2; + case 5: + return 3; + } + return 5; + } + + private boolean canJoinRight() + { + int meta = this.getBlockMetadata(); + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, this.getRight(meta)); + if (!(te instanceof TileEntityScreen)) + { + return false; + } + TileEntityScreen screenTile = (TileEntityScreen) te; + if (screenTile.getBlockMetadata() != meta) + { + return false; + } + if (screenTile.connectionsUp != this.connectionsUp) + { + return false; + } + if (screenTile.connectionsDown != this.connectionsDown) + { + return false; + } + if (this.connectionsUp + this.connectionsDown > 0) + { + return true; + } + if (this.connectionsLeft > 0) + { + return false; + } + if (screenTile.connectionsRight > 0) + { + return false; + } + return true; + } + + private boolean canJoinLeft() + { + int meta = this.getBlockMetadata(); + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, this.getLeft(meta)); + if (!(te instanceof TileEntityScreen)) + { + return false; + } + TileEntityScreen screenTile = (TileEntityScreen) te; + if (screenTile.getBlockMetadata() != meta) + { + return false; + } + if (screenTile.connectionsUp != this.connectionsUp) + { + return false; + } + if (screenTile.connectionsDown != this.connectionsDown) + { + return false; + } + if (this.connectionsUp + this.connectionsDown > 0) + { + return true; + } + if (this.connectionsRight > 0) + { + return false; + } + if (screenTile.connectionsLeft > 0) + { + return false; + } + return true; + } + + private boolean canJoinUp() + { + int meta = this.getBlockMetadata(); + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, 1); + if (!(te instanceof TileEntityScreen)) + { + return false; + } + TileEntityScreen screenTile = (TileEntityScreen) te; + if (screenTile.getBlockMetadata() != meta) + { + return false; + } + if (screenTile.connectionsLeft != this.connectionsLeft) + { + return false; + } + if (screenTile.connectionsRight != this.connectionsRight) + { + return false; + } + if (this.connectionsLeft + this.connectionsRight > 0) + { + return true; + } + if (this.connectionsDown > 0) + { + return false; + } + if (screenTile.connectionsUp > 0) + { + return false; + } + return true; + } + + private boolean canJoinDown() + { + int meta = this.getBlockMetadata(); + TileEntity te = new BlockVec3(this).getTileEntityOnSide(this.world, 0); + if (!(te instanceof TileEntityScreen)) + { + return false; + } + TileEntityScreen screenTile = (TileEntityScreen) te; + if (screenTile.getBlockMetadata() != meta) + { + return false; + } + if (screenTile.connectionsLeft != this.connectionsLeft) + { + return false; + } + if (screenTile.connectionsRight != this.connectionsRight) + { + return false; + } + if (this.connectionsLeft + this.connectionsRight > 0) + { + return true; + } + if (this.connectionsUp > 0) + { + return false; + } + if (screenTile.connectionsDown > 0) + { + return false; + } + return true; + } + + private void joinRight() + { + int meta = this.getBlockMetadata(); + int side = this.getRight(meta); + BlockVec3 vec = new BlockVec3(this); + for (int z = -this.connectionsUp; z <= this.connectionsDown; z++) + { + TileEntity tile; + BlockVec3 newVec = vec.clone().modifyPositionFromSide(EnumFacing.DOWN, z); + if (z == 0) + { + tile = this; + } else + { + tile = newVec.getTileEntity(this.world); + } + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; +// screenTile.connectedRight = true; + screenTile.setConnectedRight(true); + TileEntity te2 = newVec.getTileEntityOnSide(this.world, side); + if (te2 instanceof TileEntityScreen && te2.getBlockMetadata() == meta && !te2.isInvalid()) + { + screenTile.tryConnectRight((TileEntityScreen) te2); + } + } + } + } + + private void joinLeft() + { + int meta = this.getBlockMetadata(); + int side = this.getLeft(meta); + BlockVec3 vec = new BlockVec3(this); + for (int z = -this.connectionsUp; z <= this.connectionsDown; z++) + { + TileEntity tile; + BlockVec3 newVec = vec.clone().modifyPositionFromSide(EnumFacing.DOWN, z); + if (z == 0) + { + tile = this; + } else + { + tile = newVec.getTileEntity(this.world); + } + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; +// screenTile.connectedLeft = true; + screenTile.setConnectedLeft(true); + TileEntity te2 = newVec.getTileEntityOnSide(this.world, side); + if (te2 instanceof TileEntityScreen && te2.getBlockMetadata() == meta && !te2.isInvalid()) + { + screenTile.tryConnectLeft((TileEntityScreen) te2); + } + } + } + } + + private void joinUp() + { + int meta = this.getBlockMetadata(); +// EnumFacing side = EnumFacing.byIndex(this.getRight(meta)); + EnumFacing side = byIndex().rotateY(); + BlockVec3 vec = new BlockVec3(this); + for (int x = -this.connectionsLeft; x <= this.connectionsRight; x++) + { + TileEntity tile; + BlockVec3 newVec = vec.clone().modifyPositionFromSide(side, x); + if (x == 0) + { + tile = this; + } else + { + tile = newVec.getTileEntity(this.world); + } + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; +// screenTile.connectedUp = true; + screenTile.setConnectedUp(true); + TileEntity te2 = newVec.getTileEntityOnSide(this.world, 1); + if (te2 instanceof TileEntityScreen && te2.getBlockMetadata() == meta && !te2.isInvalid()) + { + screenTile.tryConnectUp((TileEntityScreen) te2); + } + } + } + } + + private void joinDown() + { + int meta = this.getBlockMetadata(); +// EnumFacing side = EnumFacing.byIndex(this.getRight(meta)); + EnumFacing side = byIndex().rotateY(); + BlockVec3 vec = new BlockVec3(this); + for (int x = -this.connectionsLeft; x <= this.connectionsRight; x++) + { + TileEntity tile; + BlockVec3 newVec = vec.clone().modifyPositionFromSide(side, x); + if (x == 0) + { + tile = this; + } else + { + tile = newVec.getTileEntity(this.world); + } + if (tile instanceof TileEntityScreen && tile.getBlockMetadata() == meta && !tile.isInvalid()) + { + TileEntityScreen screenTile = (TileEntityScreen) tile; +// screenTile.connectedDown = true; + screenTile.setConnectedDown(true); + TileEntity te2 = newVec.getTileEntityOnSide(this.world, 0); + if (te2 instanceof TileEntityScreen && te2.getBlockMetadata() == meta && !te2.isInvalid()) + { + screenTile.tryConnectDown((TileEntityScreen) te2); + } + } + } + } + + private boolean tryConnectUp(TileEntityScreen screenTile) + { + if (screenTile.connectedDown) + { + return true; // No checks? + } + +// screenTile.connectedDown = true; +// if (this.connectedLeft) screenTile.connectedLeft = true; +// if (this.connectedRight) screenTile.connectedRight = true; + screenTile.setConnectedDown(true); + BlockVec3 vec = null; + int meta = this.getBlockMetadata() & 7; + if (this.connectedLeft) + { + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedLeft(vec, meta); + } + if (this.connectedRight) + { + if (vec == null) + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedRight(vec, meta); + } + screenTile.refreshConnections(false); + // Undo if the neighbour could not maintain the same left-right + // connections + if ((this.connectedLeft ^ screenTile.connectedLeft) || (this.connectedRight ^ screenTile.connectedRight)) + { + screenTile.setConnectedDown(false); +// screenTile.connectedDown = false; + return false; + } + + return true; + } + + private boolean tryConnectDown(TileEntityScreen screenTile) + { + if (screenTile.connectedUp) + { + return true; // No checks? + } + +// screenTile.connectedUp = true; +// if (this.connectedLeft) screenTile.connectedLeft = true; +// if (this.connectedRight) screenTile.connectedRight = true; + screenTile.setConnectedUp(true); + BlockVec3 vec = null; + int meta = this.getBlockMetadata() & 7; + if (this.connectedLeft) + { + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedLeft(vec, meta); + } + if (this.connectedRight) + { + if (vec == null) + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedRight(vec, meta); + } + screenTile.refreshConnections(false); + // Undo if the neighbour could not maintain the same left-right + // connections + if ((this.connectedLeft ^ screenTile.connectedLeft) || (this.connectedRight ^ screenTile.connectedRight)) + { + screenTile.setConnectedUp(false); +// screenTile.connectedUp = false; + return false; + } + + return true; + } + + private boolean tryConnectLeft(TileEntityScreen screenTile) + { + if (screenTile.connectedRight) + { + return true; // No checks? + } + + if ((screenTile.connectedUp && !this.connectedUp) || (screenTile.connectedDown && !this.connectedDown)) + { + return false; + } + +// screenTile.connectedRight = true; +// if (this.connectedUp) screenTile.connectedUp = true; +// if (this.connectedDown) screenTile.connectedDown = true; + screenTile.setConnectedRight(true); + BlockVec3 vec = null; + int meta = this.getBlockMetadata() & 7; + if (this.connectedUp) + { + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedUp(vec, meta); + } + if (this.connectedDown) + { + if (vec == null) + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedDown(vec, meta); + } + screenTile.refreshConnections(false); + // Undo if the neighbour could not maintain the same up-down connections + if ((this.connectedUp ^ screenTile.connectedUp) || (this.connectedDown ^ screenTile.connectedDown)) + { + screenTile.setConnectedRight(false); +// screenTile.connectedRight = false; + return false; + } + + return true; + } + + private boolean tryConnectRight(TileEntityScreen screenTile) + { + if (screenTile.connectedLeft) + { + return true; // No checks? + } + + if ((screenTile.connectedUp && !this.connectedUp) || (screenTile.connectedDown && !this.connectedDown)) + { + return false; + } + +// screenTile.connectedLeft = true; +// if (this.connectedUp) screenTile.connectedUp = true; +// if (this.connectedDown) screenTile.connectedDown = true; + screenTile.setConnectedLeft(true); + BlockVec3 vec = null; + int meta = this.getBlockMetadata() & 7; + if (this.connectedUp) + { + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedUp(vec, meta); + } + if (this.connectedDown) + { + if (vec == null) + vec = new BlockVec3(screenTile); + screenTile.setVerifiedConnectedDown(vec, meta); + } + screenTile.refreshConnections(false); + // Undo if the neighbour could not maintain the same up-down connections + if ((this.connectedUp ^ screenTile.connectedUp) || (this.connectedDown ^ screenTile.connectedDown)) + { + screenTile.setConnectedLeft(false); +// screenTile.connectedLeft = false; + return false; + } + + return true; + } + + private void log(String msg) + { + String connections = ""; + String strSide = "S"; + if (this.connectedUp) + { + connections = "U"; + } + if (this.connectedDown) + { + connections += "D"; + } + if (this.connectedLeft) + { + connections += "L"; + } + if (this.connectedRight) + { + connections += "R"; + } + if (this.world.isRemote) + { + strSide = "C"; + } + // System.out.println(strSide + ":" + msg + " at + // "+this.getPos().getX()+","+this.getPos().getZ()+" "+connections); + } + + @SideOnly(Side.CLIENT) + public void refreshNextTick(boolean b) + { + this.refreshOnUpdate = true; + TickHandlerClient.screenConnectionsUpdateList.add(this); + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void updateClient(List data) + { + int screenType = (Integer) data.get(1); + int flags = (Integer) data.get(2); + this.imageType = screenType; + this.connectedUp = (flags & 8) != 0; + this.connectedDown = (flags & 4) != 0; + this.connectedLeft = (flags & 2) != 0; + this.connectedRight = (flags & 1) != 0; + this.refreshNextTick(true); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySolar.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySolar.java new file mode 100644 index 00000000..40b8f907 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySolar.java @@ -0,0 +1,552 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.blocks.BlockSolar; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.planets.venus.dimension.WorldProviderVenus; + +public class TileEntitySolar extends TileBaseUniversalElectricalSource implements IMultiBlock, IDisableableMachine, IInventoryDefaults, ISidedInventory, IConnector +{ + + @NetworkedField(targetSide = Side.CLIENT) + public int solarStrength = 0; + public float targetAngle; + public float currentAngle; + @NetworkedField(targetSide = Side.CLIENT) + public boolean disabled = false; + @NetworkedField(targetSide = Side.CLIENT) + public int disableCooldown = 0; + public static final int MAX_GENERATE_WATTS = 200; + @NetworkedField(targetSide = Side.CLIENT) + public int generateWatts = 0; + + private boolean initialised = false; + private boolean initialisedMulti = false; + private AxisAlignedBB renderAABB; + + public TileEntitySolar() + { + this(1); + } + + /* + * @param tier: 1 = Basic Solar 2 = Advanced Solar + */ + public TileEntitySolar(int tier) + { + super(tier == 1 ? "container.solarbasic.name" : "container.solaradvanced.name"); + this.storage.setMaxExtract(TileEntitySolar.MAX_GENERATE_WATTS); + this.storage.setMaxReceive(TileEntitySolar.MAX_GENERATE_WATTS); + if (tier == 2) + { + this.storage.setCapacity(30000); + } + this.setTierGC(tier); + this.initialised = true; + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.initialised) + { + int metadata = this.getBlockMetadata(); + if (metadata >= BlockSolar.ADVANCED_METADATA) + { + this.storage.setCapacity(30000); + this.setTierGC(2); + } + this.initialised = true; + } + + if (!this.initialisedMulti) + { + this.initialisedMulti = this.initialiseMultiTiles(this.getPos(), this.world); + } + + if (!this.world.isRemote) + { + this.receiveEnergyGC(null, this.generateWatts, false); + } + + super.update(); + + if (!this.world.isRemote) + { + this.recharge(this.getInventory().get(0)); + + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + + if (!this.getDisabled(0) && this.ticks % 20 == 0) + { + this.solarStrength = 0; + + if (this.world.isDaytime() && (this.world.provider instanceof IGalacticraftWorldProvider || !this.world.isRaining() && !this.world.isThundering())) + { + double distance = 100.0D; + double sinA = -Math.sin((this.currentAngle - 77.5D) / Constants.RADIANS_TO_DEGREES_D); + double cosA = Math.abs(Math.cos((this.currentAngle - 77.5D) / Constants.RADIANS_TO_DEGREES_D)); + + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + if (this.tierGC == 1) + { + if (this.world.canBlockSeeSky(this.getPos().add(x, 2, z))) + { + boolean valid = true; + + for (int y = this.getPos().getY() + 3; y < 256; y++) + { + IBlockState state = this.world.getBlockState(new BlockPos(this.getPos().getX() + x, y, this.getPos().getZ() + z)); + + if (state.getBlock().isOpaqueCube(state)) + { + valid = false; + break; + } + } + + if (valid) + { + this.solarStrength++; + } + } + } else + { + boolean valid = true; + + BlockVec3 blockVec = new BlockVec3(this).translate(x, 3, z); + for (double d = 0.0D; d < distance; d++) + { + BlockVec3 blockAt = blockVec.clone().translate((int) (d * sinA), (int) (d * cosA), 0); + IBlockState state = blockAt.getBlockState(this.world); + + if (state == null) + { + break; + } + + if (state.getBlock().isOpaqueCube(state)) + { + valid = false; + break; + } + } + + if (valid) + { + this.solarStrength++; + } + } + } + } + } + } + } + + float angle = this.world.getCelestialAngle(1.0F) - 0.7845194F < 0 ? 1.0F - 0.7845194F : -0.7845194F; + float celestialAngle = (this.world.getCelestialAngle(1.0F) + angle) * 360.0F; + if (!(this.world.provider instanceof WorldProviderSpaceStation)) + celestialAngle += 12.5F; + if (this.world.provider instanceof WorldProviderVenus) + celestialAngle = 180F - celestialAngle; + celestialAngle %= 360; + boolean isDaytime = this.world.isDaytime() && (celestialAngle < 180.5F || celestialAngle > 359.5F) || this.world.provider instanceof WorldProviderSpaceStation; + + if (this.tierGC == 1) + { + if (!isDaytime || this.world.isRaining() || this.world.isThundering()) + { + this.targetAngle = 77.5F + 180.0F; + } else + { + this.targetAngle = 77.5F; + } + } else + { + if (!isDaytime || this.world.isRaining() || this.world.isThundering()) + { + this.targetAngle = 77.5F + 180F; + } else if (celestialAngle > 27.5F && celestialAngle < 152.5F) + { + float difference = this.targetAngle - celestialAngle + 12.5F; + + this.targetAngle -= difference / 20.0F; + } else if (celestialAngle <= 27.5F || celestialAngle > 270F) + { + this.targetAngle = 15F; + } else if (celestialAngle >= 152.5F) + { + this.targetAngle = 140F; + } + } + + float difference = this.targetAngle - this.currentAngle; + + this.currentAngle += difference / 20.0F; + + if (!this.world.isRemote) + { + int generated = this.getGenerate(); + if (generated > 0) + { + this.generateWatts = Math.min(Math.max(generated, 0), TileEntitySolar.MAX_GENERATE_WATTS); + } else + { + this.generateWatts = 0; + } + } + + this.produce(); + } + + protected boolean initialiseMultiTiles(BlockPos pos, World world) + { + // Client can create its own fake blocks and tiles - no need for + // networking in 1.8+ + if (world.isRemote) + this.onCreate(world, pos); + + List positions = new ArrayList<>(); + this.getPositions(pos, positions); + boolean result = true; + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMulti) + { + ((TileEntityMulti) tile).mainBlockPosition = pos; + } else + { + result = false; + } + } + return result; + } + + public int getGenerate() + { + if (this.getDisabled(0)) + { + return 0; + } + + float angle = this.world.getCelestialAngle(1.0F) - 0.784690560F < 0 ? 1.0F - 0.784690560F : -0.784690560F; + float celestialAngle = (this.world.getCelestialAngle(1.0F) + angle) * 360.0F; + if (!(this.world.provider instanceof WorldProviderSpaceStation)) + celestialAngle += 12.5F; + + if (this.world.provider instanceof WorldProviderVenus) + celestialAngle = 180F - celestialAngle; + celestialAngle %= 360F; + + float difference = (180.0F - Math.abs((this.currentAngle + 12.5F) % 180F - celestialAngle)) / 180.0F; + + return MathHelper.floor(0.01F * difference * difference * (this.solarStrength * (Math.abs(difference) * 500.0F)) * this.getSolarBoost()); + } + + public float getSolarBoost() + { + float result = (float) (this.world.provider instanceof ISolarLevel ? ((ISolarLevel) this.world.provider).getSolarEnergyMultiplier() : 1.0F); + if (this.world.provider instanceof WorldProviderVenus) + { + if (this.pos.getY() > 90) + { + // Small improvement on Venus at higher altitudes + result += (this.pos.getY() - 90) / 1000F; + } + } + return result; + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + if (positions.size() > 0) + { + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions.get(0), placedPosition, EnumBlockMultiType.SOLAR_PANEL_0.getMeta()); + positions.remove(0); + } + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return (this.getTierGC() == 1) ? EnumBlockMultiType.SOLAR_PANEL_1 : EnumBlockMultiType.SOLAR_PANEL_0; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + int y = placedPosition.getY() + 1; + if (y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + + y++; + if (y > buildHeight) + { + return; + } + for (int x = -1; x < 2; x++) + { + for (int z = -1; z < 2; z++) + { + positions.add(new BlockPos(placedPosition.getX() + x, y, placedPosition.getZ() + z)); + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock) + { + EnumBlockMultiType type = stateAt.getValue(BlockMulti.MULTI_TYPE); + if ((type == EnumBlockMultiType.SOLAR_PANEL_0 || type == EnumBlockMultiType.SOLAR_PANEL_1)) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, GCBlocks.solarPanel.getDefaultState()); + } + + this.world.setBlockToAir(pos); + } + } + } + + this.world.destroyBlock(getPos(), true); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.storage.setCapacity(nbt.getFloat("maxEnergy")); + this.currentAngle = nbt.getFloat("currentAngle"); + this.targetAngle = nbt.getFloat("targetAngle"); + this.setDisabled(0, nbt.getBoolean("disabled")); + this.disableCooldown = nbt.getInteger("disabledCooldown"); + + this.initialised = false; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setFloat("maxEnergy", this.getMaxEnergyStoredGC()); + nbt.setFloat("currentAngle", this.currentAngle); + nbt.setFloat("targetAngle", this.targetAngle); + nbt.setInteger("disabledCooldown", this.disableCooldown); + nbt.setBoolean("disabled", this.getDisabled(0)); + + return nbt; + } + + /* + * @Override public float getRequest(EnumFacing direction) { return 0; } + */ + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockSolar) + { + return state.getValue(BlockSolar.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(byIndex()); + } + + @Override + public EnumFacing getElectricOutputDirection() + { + return this.byIndex(); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(getPos().getX() - 1, getPos().getY(), getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 4, getPos().getZ() + 2); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + this.disabled = disabled; + this.disableCooldown = 20; + } + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC() * i / this.getMaxEnergyStoredGC()); + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + // @Override + // public boolean hasCapability(Capability cap, EnumFacing side) + // { + // if (cap == Capabilities.ENERGY_OUTPUTTER_CAPABILITY && this.canOutputEnergy(side)) + // { + // return true; + // } + // + // return super.hasCapability(cap, side); + // } + // + // @Override + // public T getCapability(Capability cap, EnumFacing side) + // { + // if (CompatibilityManager.isMekanismLoaded()) + // { + // if (cap != null && (cap == EnergyUtil.mekCableOutput)) + // { + // return Capabilities.ENERGY_OUTPUTTER_CAPABILITY.cast(this); + // } + // } + // + // return super.getCapability(cap, side); + // } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + + return direction == this.getElectricOutputDirection(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySpaceStationBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySpaceStationBase.java new file mode 100644 index 00000000..d0848c04 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntitySpaceStationBase.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; + +public class TileEntitySpaceStationBase extends TileEntityMulti implements IMultiBlock +{ + + public TileEntitySpaceStationBase() + { + super(null); + } + + private boolean initialised; + + @Override + public void update() + { + if (!this.initialised) + { + this.initialised = this.initialiseMultiTiles(this.getPos(), this.world); + } + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + return false; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.SPACE_STATION_BASE; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + + for (int y = 1; y < 3; y++) + { + if (placedPosition.getY() + y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), placedPosition.getY() + y, placedPosition.getZ())); + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new LinkedList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && (EnumBlockMultiType) stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.SPACE_STATION_BASE) + { + this.world.setBlockToAir(pos); + } + } + this.world.destroyBlock(this.getPos(), false); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTelemetry.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTelemetry.java new file mode 100644 index 00000000..e585297c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTelemetry.java @@ -0,0 +1,407 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.HashSet; +import java.util.List; +import java.util.UUID; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraftforge.fml.common.registry.EntityEntry; +import net.minecraftforge.fml.common.registry.EntityRegistry; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.entity.ITelemetry; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; + +import com.mojang.authlib.GameProfile; + +public class TileEntityTelemetry extends TileEntity implements ITickable +{ + + public Class clientClass; + public int[] clientData = + {-1}; + public String clientName; + public GameProfile clientGameProfile = null; + + public static HashSet loadedList = new HashSet(); + public Entity linkedEntity; + private UUID toUpdate = null; + private int pulseRate = 400; + private int lastHurttime = 0; + private int ticks = 0; + + @Override + public void onLoad() + { + if (this.world.isRemote) + { + loadedList.add(new BlockVec3Dim(this)); + } + } + + @Override + public void invalidate() + { + super.invalidate(); + if (this.world.isRemote) + { + loadedList.remove(new BlockVec3Dim(this)); + } + } + + @Override + public void update() + { + if (!this.world.isRemote && ++this.ticks % 2 == 0) + { + if (this.toUpdate != null) + { + this.addTrackedEntity(this.toUpdate); + this.toUpdate = null; + } + + String name = null; + int[] data = + {-1, -1, -1, -1, -1}; + String strUUID = ""; + + if (linkedEntity != null) + { + // Help the Garbage Collector + if (linkedEntity.isDead) + { + linkedEntity = null; + name = ""; + // TODO: track players after death and respawn? or not? + } else + { + if (linkedEntity instanceof EntityPlayerMP) + { + name = "$" + linkedEntity.getName(); + } else + { + EntityEntry entityEntry = EntityRegistry.getEntry(linkedEntity.getClass()); + if (entityEntry != null && entityEntry.getRegistryName() != null) + { + name = entityEntry.getRegistryName().toString(); + } + } + + if (name == null) + { + GalacticraftCore.logger.info("Telemetry Unit: Error finding name for " + linkedEntity.getClass().getSimpleName()); + name = ""; + } + + double xmotion = linkedEntity.motionX; + double ymotion = linkedEntity instanceof EntityLivingBase ? linkedEntity.motionY + 0.078D : linkedEntity.motionY; + double zmotion = linkedEntity.motionZ; + data[2] = (int) (MathHelper.sqrt(xmotion * xmotion + ymotion * ymotion + zmotion * zmotion) * 2000D); + + if (linkedEntity instanceof ITelemetry) + { + ((ITelemetry) linkedEntity).transmitData(data); + } else if (linkedEntity instanceof EntityLivingBase) + { + EntityLivingBase eLiving = (EntityLivingBase) linkedEntity; + data[0] = eLiving.hurtTime; + + // Calculate a "pulse rate" based on motion and taking + // damage + this.pulseRate--; + if (eLiving.hurtTime > this.lastHurttime) + { + this.pulseRate += 100; + } + this.lastHurttime = eLiving.hurtTime; + if (eLiving.getRidingEntity() != null) + { + data[2] /= 4; // reduced pulse effect if riding a + // vehicle + } else if (data[2] > 1) + { + this.pulseRate += 2; + } + this.pulseRate += Math.max(data[2] - pulseRate, 0) / 4; + if (this.pulseRate > 2000) + { + this.pulseRate = 2000; + } + if (this.pulseRate < 400) + { + this.pulseRate = 400; + } + data[2] = this.pulseRate / 10; + + data[1] = (int) (eLiving.getHealth() * 100 / eLiving.getMaxHealth()); + if (eLiving instanceof EntityPlayerMP) + { + data[3] = ((EntityPlayerMP) eLiving).getFoodStats().getFoodLevel() * 5; + GCPlayerStats stats = GCPlayerStats.get(eLiving); + data[4] = stats.getAirRemaining() * 4096 + stats.getAirRemaining2(); + UUID uuid = ((EntityPlayerMP) eLiving).getUniqueID(); + if (uuid != null) + { + strUUID = uuid.toString(); + } + } else if (eLiving instanceof EntityHorse) + { +// data[3] = ((EntityHorse) eLiving).getType().ordinal(); + data[4] = ((EntityHorse) eLiving).getHorseVariant(); + } else if (eLiving instanceof EntityVillager) + { + data[3] = ((EntityVillager) eLiving).getProfession(); + data[4] = ((EntityVillager) eLiving).getGrowingAge(); + } else if (eLiving instanceof EntityWolf) + { + data[3] = ((EntityWolf) eLiving).getCollarColor().getDyeDamage(); + data[4] = ((EntityWolf) eLiving).isBegging() ? 1 : 0; + } else if (eLiving instanceof EntitySheep) + { + data[3] = ((EntitySheep) eLiving).getFleeceColor().getDyeDamage(); + data[4] = ((EntitySheep) eLiving).getSheared() ? 1 : 0; + } else if (eLiving instanceof EntityOcelot) + { + data[3] = ((EntityOcelot) eLiving).getTameSkin(); + } else if (eLiving instanceof EntitySkeleton) + { +// data[3] = ((EntitySkeleton) eLiving).getSkeletonType().ordinal(); + } else if (eLiving instanceof EntityZombie) + { +// data[3] = ((EntityZombie) eLiving).isVillager() ? 1 : 0; TODO Fix for MC 1.10 + data[4] = ((EntityZombie) eLiving).isChild() ? 1 : 0; + } + } + } + } else + { + name = ""; + } + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_UPDATE_TELEMETRY, this.world.provider.getDimension(), new Object[] + {this.getPos(), name, data[0], data[1], data[2], data[3], data[4], strUUID}), + new TargetPoint(this.world.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 320D)); + } + } + + @SideOnly(Side.CLIENT) + public void receiveUpdate(List data, int dimID) + { + String name = (String) data.get(1); + if (name.startsWith("$")) + { + // It's a player name + this.clientClass = EntityPlayerMP.class; + String strName = name.substring(1); + this.clientName = strName; + this.clientGameProfile = PlayerUtil.getSkinForName(strName, (String) data.get(7), dimID); + } else + { + EntityEntry entityEntry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(name)); + this.clientClass = entityEntry == null ? null : entityEntry.getEntityClass(); + } + this.clientData = new int[5]; + for (int i = 2; i < 7; i++) + { + this.clientData[i - 2] = (Integer) data.get(i); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + Long msb = nbt.getLong("entityUUIDMost"); + Long lsb = nbt.getLong("entityUUIDLeast"); + this.toUpdate = new UUID(msb, lsb); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + if (this.linkedEntity != null && !this.linkedEntity.isDead) + { + nbt.setLong("entityUUIDMost", this.linkedEntity.getUniqueID().getMostSignificantBits()); + nbt.setLong("entityUUIDLeast", this.linkedEntity.getUniqueID().getLeastSignificantBits()); + } + return nbt; + } + + public void addTrackedEntity(UUID uuid) + { + this.pulseRate = 400; + this.lastHurttime = 0; + List eList = this.world.loadedEntityList; + for (Entity e : eList) + { + if (e.getUniqueID().equals(uuid)) + { + this.linkedEntity = e; + if (e instanceof EntitySpaceshipBase) + { + ((EntitySpaceshipBase) e).addTelemetry(this); + } + return; + } + } + // TODO Add some kind of watcher to add the entity when next loaded + this.linkedEntity = null; + } + + public void addTrackedEntity(Entity e) + { + this.pulseRate = 400; + this.lastHurttime = 0; + this.linkedEntity = e; + if (e instanceof EntitySpaceshipBase) + { + ((EntitySpaceshipBase) e).addTelemetry(this); + } + } + + public void removeTrackedEntity() + { + this.pulseRate = 400; + this.linkedEntity = null; + } + + public static TileEntityTelemetry getNearest(TileEntity te) + { + if (te == null) + { + return null; + } + BlockVec3 target = new BlockVec3(te); + + int distSq = 1025; + BlockVec3Dim nearest = null; + int dim = GCCoreUtil.getDimensionID(te.getWorld()); + for (BlockVec3Dim telemeter : loadedList) + { + if (telemeter.dim != dim) + { + continue; + } + int dist = telemeter.distanceSquared(target); + if (dist < distSq) + { + distSq = dist; + nearest = telemeter; + } + } + + if (nearest == null) + { + return null; + } + TileEntity result = te.getWorld().getTileEntity(new BlockPos(nearest.x, nearest.y, nearest.z)); + if (result instanceof TileEntityTelemetry) + { + return (TileEntityTelemetry) result; + } + return null; + } + + /** + * Call this when a player wears a frequency module to check whether it has + * been linked with a Telemetry Unit. + * + * @param held The frequency module + * @param player + */ + public static void frequencyModulePlayer(ItemStack held, EntityPlayerMP player, boolean remove) + { + if (held == null) + { + return; + } + NBTTagCompound fmData = held.getTagCompound(); + if (fmData != null && fmData.hasKey("teDim")) + { + int dim = fmData.getInteger("teDim"); + int x = fmData.getInteger("teCoordX"); + int y = fmData.getInteger("teCoordY"); + int z = fmData.getInteger("teCoordZ"); + WorldProvider wp = WorldUtil.getProviderForDimensionServer(dim); + // TODO + if (wp == null || wp.world == null) + { + GalacticraftCore.logger.debug("Frequency module worn: world provider is null. This is a bug. " + dim); + } else + { + TileEntity te = wp.world.getTileEntity(new BlockPos(x, y, z)); + if (te instanceof TileEntityTelemetry) + { + if (remove) + { + if (((TileEntityTelemetry) te).linkedEntity == player) + ((TileEntityTelemetry) te).removeTrackedEntity(); + } else + { + ((TileEntityTelemetry) te).addTrackedEntity(player.getUniqueID()); + } + } + } + } + } + + public static void updateLinkedPlayer(EntityPlayerMP playerOld, EntityPlayerMP playerNew) + { + for (BlockVec3Dim telemeter : loadedList) + { + TileEntity te = telemeter.getTileEntityNoLoad(); + if (te instanceof TileEntityTelemetry) + { + if (((TileEntityTelemetry) te).linkedEntity == playerOld) + { + ((TileEntityTelemetry) te).linkedEntity = playerNew; + } + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityThruster.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityThruster.java new file mode 100644 index 00000000..e231b4e2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityThruster.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileEntityThruster extends TileEntity +{ +// @Override +// public boolean canUpdate() +// { +// return false; +// } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTreasureChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTreasureChest.java new file mode 100644 index 00000000..18121493 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/tile/TileEntityTreasureChest.java @@ -0,0 +1,491 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.tile; + +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerChest; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.InventoryLargeChest; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTable; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.miccore.Annotations; + +import micdoodle8.mods.galacticraft.api.item.IKeyable; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; + +public class TileEntityTreasureChest extends TileEntityAdvanced implements ITickable, IInventory, IKeyable, ISidedInventory +{ + + public boolean adjacentChestChecked; + public float lidAngle; + public float prevLidAngle; + public int numPlayersUsing; + private int ticksSinceSync; + private AxisAlignedBB renderAABB; + + protected ResourceLocation lootTable; + protected long lootTableSeed; + + @Annotations.NetworkedField(targetSide = Side.CLIENT) public boolean locked = true; + @Annotations.NetworkedField(targetSide = Side.CLIENT) public int tier = 1; + + public TileEntityTreasureChest() + { + this(1); + } + + public TileEntityTreasureChest(int tier) + { + super("container.treasurechest.name"); + this.tier = tier; + inventory = NonNullList.withSize(27, ItemStack.EMPTY); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.locked = nbt.getBoolean("isLocked"); + this.tier = nbt.getInteger("tier"); + + checkLootAndRead(nbt); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("isLocked", this.locked); + nbt.setInteger("tier", this.tier); + + checkLootAndWrite(nbt); + + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public void updateContainingBlockInfo() + { + super.updateContainingBlockInfo(); + this.adjacentChestChecked = false; + } + + /** + * Updates the JList with a new model. + */ + @Override + public void update() + { + int i = this.pos.getX(); + int j = this.pos.getY(); + int k = this.pos.getZ(); + ++this.ticksSinceSync; + float f; + + if (this.locked) + { + this.numPlayersUsing = 0; + } + + if (!this.world.isRemote && this.numPlayersUsing != 0 && (this.ticksSinceSync + i + j + k) % 200 == 0) + { + this.numPlayersUsing = 0; + f = 5.0F; + List list = this.world.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB((double) ((float) i - f), (double) ((float) j - f), (double) ((float) k - f), + (double) ((float) (i + 1) + f), (double) ((float) (j + 1) + f), (double) ((float) (k + 1) + f))); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) + { + EntityPlayer entityplayer = (EntityPlayer) iterator.next(); + + if (entityplayer.openContainer instanceof ContainerChest) + { + IInventory iinventory = ((ContainerChest) entityplayer.openContainer).getLowerChestInventory(); + + if (iinventory == this || iinventory instanceof InventoryLargeChest && ((InventoryLargeChest) iinventory).isPartOfLargeChest(this)) + { + ++this.numPlayersUsing; + } + } + } + } + + this.prevLidAngle = this.lidAngle; + f = 0.1F; + double d2; + + if (this.numPlayersUsing > 0 && this.lidAngle == 0.0F) + { + double d1 = (double) i + 0.5D; + d2 = (double) k + 0.5D; + + this.world.playSound(null, d1, (double) j + 0.5D, d2, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (((this.numPlayersUsing == 0 || this.locked) && this.lidAngle > 0.0F) || this.numPlayersUsing > 0 && this.lidAngle < 1.0F) + { + float f1 = this.lidAngle; + + if (this.numPlayersUsing == 0 || this.locked) + { + this.lidAngle -= f; + } else + { + this.lidAngle += f; + } + + if (this.lidAngle > 1.0F) + { + this.lidAngle = 1.0F; + } + + float f2 = 0.5F; + + if (this.lidAngle < f2 && f1 >= f2) + { + d2 = (double) i + 0.5D; + double d0 = (double) k + 0.5D; + + this.world.playSound(null, d2, (double) j + 0.5D, d0, SoundEvents.BLOCK_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.lidAngle < 0.0F) + { + this.lidAngle = 0.0F; + } + } + + super.update(); + } + + @Override + public boolean receiveClientEvent(int id, int type) + { + if (id == 1) + { + this.numPlayersUsing = type; + return true; + } else + { + return super.receiveClientEvent(id, type); + } + } + + @Override + public void openInventory(EntityPlayer player) + { + if (!player.isSpectator()) + { + if (this.numPlayersUsing < 0) + { + this.numPlayersUsing = 0; + } + + ++this.numPlayersUsing; + this.world.addBlockEvent(this.pos, this.getBlockType(), 1, this.numPlayersUsing); + this.world.notifyNeighborsOfStateChange(this.pos, this.getBlockType(), false); + this.world.notifyNeighborsOfStateChange(this.pos.down(), this.getBlockType(), false); + } + } + + @Override + public void closeInventory(EntityPlayer player) + { + if (!player.isSpectator()) + { +// --this.numPlayersUsing; +// this.world.addBlockEvent(this.pos, this.getBlockType(), 1, this.numPlayersUsing); +// this.world.notifyNeighborsOfStateChange(this.pos, this.getBlockType()); +// this.world.notifyNeighborsOfStateChange(this.pos.down(), this.getBlockType()); + } + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring + * stack size) into the given slot. + */ + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + /** + * invalidates a tile entity + */ + @Override + public void invalidate() + { + super.invalidate(); + this.updateContainingBlockInfo(); + } + + public String getGuiID() + { + return "minecraft:chest"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerChest(playerInventory, this, playerIn); + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public double getPacketRange() + { + return 20.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public int getTierOfKeyRequired() + { + return this.tier; + } + + @Override + public boolean onValidKeyActivated(EntityPlayer player, ItemStack key, EnumFacing face) + { + if (this.locked) + { + this.locked = false; + + if (this.world.isRemote) + { + // player.playSound("galacticraft.player.unlockchest", 1.0F, + // 1.0F); + } else + { + if (!player.capabilities.isCreativeMode) + { + player.inventory.getCurrentItem().shrink(1); + } + + return true; + } + } + + return false; + } + + @Override + public boolean onActivatedWithoutKey(EntityPlayer player, EnumFacing face) + { + if (this.locked) + { + if (player.world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_ON_FAILED_CHEST_UNLOCK, GCCoreUtil.getDimensionID(this.world), new Object[] + {this.getTierOfKeyRequired()})); + } + return true; + } + + return false; + } + + @Override + public boolean canBreak() + { + return false; + } + + public static TileEntityTreasureChest findClosest(Entity entity, int tier) + { + double distance = Double.MAX_VALUE; + TileEntityTreasureChest chest = null; + for (final TileEntity tile : entity.world.loadedTileEntityList) + { + if (tile instanceof TileEntityTreasureChest && ((TileEntityTreasureChest) tile).getTierOfKeyRequired() == tier) + { + double dist = entity.getDistanceSq(tile.getPos().getX() + 0.5, tile.getPos().getY() + 0.5, tile.getPos().getZ() + 0.5); + if (dist < distance) + { + distance = dist; + chest = (TileEntityTreasureChest) tile; + } + } + } + + if (chest != null) + { + GalacticraftCore.logger.debug("Found chest to generate boss loot in: " + chest.pos); + } else + { + GalacticraftCore.logger.debug("Could not find chest to generate boss loot in!"); + } + + return chest; + } + + protected boolean checkLootAndRead(NBTTagCompound compound) + { + if (compound.hasKey("LootTable", 8)) + { + this.lootTable = new ResourceLocation(compound.getString("LootTable")); + this.lootTableSeed = compound.getLong("LootTableSeed"); + return true; + } else + { + return false; + } + } + + protected boolean checkLootAndWrite(NBTTagCompound compound) + { + if (this.lootTable != null) + { + compound.setString("LootTable", this.lootTable.toString()); + + if (this.lootTableSeed != 0L) + { + compound.setLong("LootTableSeed", this.lootTableSeed); + } + + return true; + } else + { + return false; + } + } + + public void fillWithLoot(EntityPlayer player) + { + if (this.lootTable != null) + { + LootTable loottable = this.world.getLootTableManager().getLootTableFromLocation(this.lootTable); + this.lootTable = null; + Random random; + + if (this.lootTableSeed == 0L) + { + random = new Random(); + } else + { + random = new Random(this.lootTableSeed); + } + + LootContext.Builder builder = new LootContext.Builder((WorldServer) this.world); + + if (player != null) + { + builder.withLuck(player.getLuck()); + } + + loottable.fillInventory(this, random, builder.build()); + } + } + + public ResourceLocation getLootTable() + { + return this.lootTable; + } + + public void setLootTable(ResourceLocation lootTable, long lootTableSeed) + { + this.lootTable = lootTable; + this.lootTableSeed = lootTableSeed; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 2, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { + return false; + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ASMUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ASMUtil.java new file mode 100644 index 00000000..951329d5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ASMUtil.java @@ -0,0 +1,413 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.HashMap; +import java.util.Optional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.launchwrapper.Launch; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.BiomeProperties; + +import net.minecraftforge.fml.relauncher.FMLLaunchHandler; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; + +import org.apache.commons.lang3.StringUtils; + +public class ASMUtil { + + private static HashMap sFieldCache = new HashMap<>(); + + /** + * Creates a new instance with the provided constructor and arguments. + * + * @param constructor The constructor of the class for which a new instance should be created. + * @param arguments Array of objects to be passed as arguments to the constructor call. + * @return A new object created by calling the constructor. + */ + public static T getInstance(Constructor constructor, Object... arguments) { + try { + return constructor.newInstance(arguments); + } catch (Exception e) { + GalacticraftCore.logger.error("Exception creating instance of " + constructor.getClass().getName()); + } + return null; + } + + @SuppressWarnings("unchecked") + public static T getInstance(String className, Class assignable) { + try { + Class clazz = Class.forName(className); + if (!assignable.isAssignableFrom(assignable)) { + throw new RuntimeException("Class '" + className + "' is not assignable from " + assignable.getSimpleName()); + } + return (T) clazz.newInstance(); + } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { + GalacticraftCore.logger.error("Exception creating instance of " + className); + } + return null; + } + + /** + * Obtains the constructor for the named class identified by the parameter types. + * + * @param className The fully qualified name of the class. + * @param argumentTypes Parameter types to identify the constructor. + * @return Constructor object representing the declared constructor for the parameter types. + */ + public static Constructor getConstructor(final String className, final Class... argumentTypes) { + if (className == null || argumentTypes == null) { + GalacticraftCore.logger.error("The provided class name or arguments can't be null."); + return null; + } + try { + Class clazz = Class.forName(className); + Constructor constructor = clazz.getDeclaredConstructor(argumentTypes); + constructor.setAccessible(true); + return constructor; + } catch (Exception ex) { + GalacticraftCore.logger.error("Exception getting constructor of " + className); + } + return null; + } + + /** + * Obtains the constructor for the class identified by the parameter types. + * + * @param clazz The Class for which the constructor should be obtained. + * @param types Parameter types to identify the constructor. + * @return Constructor object representing the declared constructor for the parameter types. + */ + public static Constructor getConstructor(Class clazz, Class... types) { + try { + Constructor constructor = clazz.getDeclaredConstructor(types); + constructor.setAccessible(true); + return constructor; + } catch (Exception ex) { + GalacticraftCore.logger.error("Exception getting constructor of " + clazz.getName()); + } + return null; + } + + /** + * Returns the value of a private field for an object instance. + * + * @param object An object instance from which the field value is to be extracted. + * @param fieldNames A list of field names for which the value should be extracted. The functions returns value of the first field found. + * @return The value of the provided field name. + */ + @SuppressWarnings("unchecked") + public static T getObject(Object object, String... fieldNames) { + Class cls = object.getClass(); + for (String field : fieldNames) { + try { + Field result = cls.getDeclaredField(field); + result.setAccessible(true); + return (T) result.get(object); + } catch (Exception ex) { + GalacticraftCore.logger.error("Exception in getObject()"); + } + } + GalacticraftCore.logger.error("Could not retrieve any object for the provided field names."); + + return null; + } + + /** + * Returns the value of a private final field for an object instance and removes the final modifier. + * + * @param object An object instance from which the field value is to be extracted. + * @param fieldNames A list of field names for which the value should be extracted. The functions returns value of the first field found. + * @return The value of the provided field name. + */ + @SuppressWarnings("unchecked") + public static T getFinalObject(Object object, String... fieldNames) { + Class cls = object.getClass(); + for (String field : fieldNames) { + try { + Field result = cls.getDeclaredField(field); + result.setAccessible(true); + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(result, result.getModifiers() & ~Modifier.FINAL); + return (T) result.get(object); + } catch (Exception ex) { + GalacticraftCore.logger.error("Exception in getFinalObject()"); + } + } + GalacticraftCore.logger.error("Could not retrieve any final object for the provided field names."); + + return null; + } + + /** + * Returns the value of a private static field for a class. + * + * @param clazz The class for which the field value is to be extracted. + * @param fieldNames A list of field names for which the value should be extracted. + * @return The value of the provided field name. + */ + @SuppressWarnings("unchecked") + public static Optional getStaticObject(Class clazz, String fieldName) { + Optional object = Optional.empty(); + try { + Field result = clazz.getDeclaredField(fieldName); + result.setAccessible(true); + object = Optional.of((T) result.get(null)); + } catch (Exception e) { + } + return object; + } + + /** + * Finds a method with the specified name and parameters in the given class and makes it accessible.

Throws an exception if the method is not found. + * + * @param clazz The class to find the method on. + * @param methodName The name of the method to find (used in developer environments, i.e. "getWorldTime"). + * @param parameterTypes The parameter types of the method to find. + * + * @return The method with the specified name and parameters in the given class. + */ + @Nonnull + public static Method findMethod(@Nonnull Class clazz, @Nonnull String methodName, Class... parameterTypes) + { + Preconditions.checkNotNull(clazz); + Preconditions.checkArgument(StringUtils.isNotEmpty(methodName), "Method name cannot be empty"); + try + { + Method m = clazz.getDeclaredMethod(methodName, parameterTypes); + m.setAccessible(true); + return m; + } catch (Exception e) + { + throw new ReflectionThrows.UnableToFindMethodException(e); + } + } + + /** + * Finds a method with the specified name and parameters in the given class and makes it accessible. Note: for performance, store the returned value and avoid calling this repeatedly.

Throws an exception if the method is not found. + * + * @param clazz The class to find the method on. + * @param methodName The name of the method to find (used in developer environments, i.e. "getWorldTime"). + * @param methodObfName The obfuscated name of the method to find (used in obfuscated environments, i.e. "getWorldTime"). If the name you are looking for is on a class that is never obfuscated, this should be null. + * @param parameterTypes The parameter types of the method to find. + * + * @return The method with the specified name and parameters in the given class. + */ + @Nonnull + public static Method findMethod(@Nonnull Class clazz, @Nonnull String methodName, @Nullable String methodObfName, Class... parameterTypes) + { + Preconditions.checkNotNull(clazz); + Preconditions.checkArgument(StringUtils.isNotEmpty(methodName), "Method name cannot be empty"); + + String nameToFind = FMLLaunchHandler.isDeobfuscatedEnvironment() ? methodName : MoreObjects.firstNonNull(methodObfName, methodName); + + try + { + Method m = clazz.getDeclaredMethod(nameToFind, parameterTypes); + m.setAccessible(true); + return m; + } catch (Exception e) + { + throw new ReflectionThrows.UnableToFindMethodException(e); + } + } + + @SuppressWarnings("unchecked") + public static T getPrivateValue(Class classToAccess, @Nullable E instance, String fieldName) { + try { + return (T) findField(classToAccess, fieldName, null).get(instance); + } catch (Exception e) { + e.getStackTrace(); + } + return null; + } + + @SuppressWarnings("unchecked") + public static T getPrivateValue(Class classToAccess, @Nullable E instance, String fieldName, @Nullable String fieldObfName) { + try { + return (T) findField(classToAccess, fieldName, fieldObfName).get(instance); + } catch (Exception e) { + e.getStackTrace(); + } + return null; + } + + public static void setPrivateValue(Class classToAccess, @Nullable T instance, @Nullable E value, String fieldName) { + try { + findField(classToAccess, fieldName, null).set(instance, value); + } catch (Exception e) { + e.getStackTrace(); + } + } + + public static void setPrivateValue(Class classToAccess, @Nullable T instance, @Nullable E value, String fieldName, @Nullable String fieldObfName) { + try { + findField(classToAccess, fieldName, fieldObfName).set(instance, value); + } catch (Exception e) { + e.getStackTrace(); + } + } + + public static Field findField(@Nonnull Class clazz, @Nonnull String fieldName, @Nullable String fieldObfName) { + Preconditions.checkNotNull(clazz); + Preconditions.checkArgument(StringUtils.isNotEmpty(fieldName), "Field name cannot be empty"); + + String nameToFind = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment") ? fieldName : MoreObjects.firstNonNull(fieldObfName, fieldName); + try { + Field f = clazz.getDeclaredField(nameToFind); + f.setAccessible(true); + return f; + } catch (Exception e) { + e.getStackTrace(); + } + return null; + } + + public static void setStaticFieldObject(Class clazz, String fieldName, Object value) { + Field field = getStaticField(clazz, fieldName); + try { + field.set(clazz, value); + } catch (IllegalArgumentException | IllegalAccessException e) { + GalacticraftCore.logger.error("An error occured when attempting to set static Field [ " + fieldName + " ]"); + } + } + + private static Field getStaticField(Class clazz, String fieldName) { + Preconditions.checkNotNull(clazz); + Preconditions.checkArgument(StringUtils.isNotEmpty(fieldName), "Field name cannot be empty"); + + String fullFieldName = genFieldFullName(clazz, fieldName); + if (sFieldCache.containsKey(fullFieldName)) { + return sFieldCache.get(fullFieldName); + } + Field field = null; + try { + field = clazz.getField(fieldName); + } catch (NoSuchFieldException e) { + } + if (field == null) { + try { + field = clazz.getDeclaredField(fieldName); + field.setAccessible(true); + } catch (NoSuchFieldException e) { + } + } + if (field == null) { + for (clazz = clazz.getSuperclass(); clazz != Object.class; clazz = clazz.getSuperclass()) { + try { + field = clazz.getDeclaredField(fieldName); + field.setAccessible(true); + } catch (NoSuchFieldException e) { + } + } + } + if (field == null) { + GalacticraftCore.logger.error("Can't get [ " + fieldName + " ] Field from Class [ " + clazz.getSimpleName() + " ]"); + } + sFieldCache.put(fullFieldName, field); + return field; + } + + private static String genFieldFullName(Class clazz, String fieldName) { + StringBuilder name = new StringBuilder(); + name.append(clazz.getName()); + name.append(":"); + name.append(fieldName); + return name.toString(); + } + + public static String getBiomeName(BiomeProperties instance) { + return ASMUtil.getPrivateValue(Biome.BiomeProperties.class, instance, "biomeName", "field_185412_a"); + } + + static class ReflectionThrows + { + + public static class UnableToFindMethodException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnableToFindMethodException(String[] methodNames, Exception failed) + { + super(failed); + } + + public UnableToFindMethodException(Throwable failed) + { + super(failed); + } + } + + public static class UnableToFindClassException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnableToFindClassException(String[] classNames, @Nullable Exception err) + { + super(err); + } + } + + public static class UnableToAccessFieldException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnableToAccessFieldException(String[] fieldNames, Exception e) + { + super(e); + } + + public UnableToAccessFieldException(Exception e) + { + super(e); + } + } + + public static class UnableToFindFieldException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnableToFindFieldException(String[] fieldNameList, Exception e) + { + super(e); + } + + public UnableToFindFieldException(Exception e) + { + super(e); + } + } + + public static class UnknownConstructorException extends RuntimeException + { + + private static final long serialVersionUID = 1L; + + public UnknownConstructorException(final String message) + { + super(message); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/BlockUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/BlockUtil.java new file mode 100644 index 00000000..aeda9b11 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/BlockUtil.java @@ -0,0 +1,244 @@ +package micdoodle8.mods.galacticraft.core.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.api.vector.BlockTuple; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import lombok.Getter; + +public class BlockUtil +{ + + public static final String FULL_ID_MATCHER = "^(?(?[a-z\\d\\._-]+):(?[a-z\\d\\._-]+))(?::(?[0-9\\*]{1,}))?$"; + public static final String SHORTHAND_MATCHER = "^(?[a-z\\d\\._-]+)(?::(?[0-9\\*]{1,}))?$"; + + public static final Pattern FULL_ID_REGEX = Pattern.compile(FULL_ID_MATCHER); + public static final Pattern SHORTHAND_REGEX = Pattern.compile(SHORTHAND_MATCHER); + + public static NonNullList getListFromStringArray(String[] strArr) + { + NonNullList nnl = NonNullList.create(); + for (String str : strArr) + { + addToBlockStackList(getResloc(str), nnl); + } + return nnl; + } + + public static NonNullList getBlockStateHolderList(NonNullList itemStacks) + { + final Map> stateList = new HashMap<>(); + for (ItemStack stack : itemStacks) + { + Block b = ((ItemBlock) stack.getItem()).getBlock(); + IBlockState state = b.getStateFromMeta(stack.getItem().getMetadata(stack.getMetadata())); + if (stateList.keySet().contains(b)) + { + if (!stateList.get(b).contains(state)) + { + stateList.get(b).add(state); + } + } else + { + List list = new ArrayList<>(); + list.add(state); + stateList.put(b, list); + } + } + + NonNullList mbsl = NonNullList.create(); + for (Entry> e : stateList.entrySet()) + { + mbsl.add(new MultiBlockStateHolder(e.getKey(), e.getValue())); + } + return mbsl; + } + + public static BlockTuple getBlockTupleFromString(String string) + { + Block oldFormat = parseBlockFromOldConfigFormat(string); + if (oldFormat != null) + { + GalacticraftCore.logger.debug("oldFormat: " + string); + return new BlockTuple(oldFormat, parseMetaFromOldConfigFormat(string)); + } + + ItemStack s = getItemStackFromString(string); + return new BlockTuple(((ItemBlock) s.getItem()).getBlock(), s.getMetadata()); + } + + @Nullable + private static Block parseBlockFromOldConfigFormat(String string) + { + return Block.getBlockFromName(string); + } + + private static int parseMetaFromOldConfigFormat(String string) + { + int lastColon = string.lastIndexOf(':'); + int meta = -1; + if (lastColon > 0) + { + try + { + meta = Integer.parseInt(string.substring(lastColon + 1, string.length())); + } catch (NumberFormatException ex) + { + } + } + return meta; + } + + public static ItemStack getItemStackFromString(String string) + { + return getItemStackFromResloc(getResloc(string)); + } + + private static void addToBlockStackList(Resloc resloc, NonNullList nnl) + { + GalacticraftCore.logger.debug("Attempting to locate Block with ResourceLocation: " + resloc.toString() + " | Input: " + resloc.rawInput); + Block block = Block.REGISTRY.getObject(resloc); + if (resloc.isBlock(block)) + { + ItemStack i = resloc.toItemStack(block); + if (resloc.isWildcard() && i.getHasSubtypes()) + { + i.getItem().getSubItems(CreativeTabs.SEARCH, nnl); + } else + { + nnl.add(i); + } + } else + { + GalacticraftCore.logger.error("No block with ResourceLocation (" + resloc.rawInput + ") could be located. Skipping"); + } + } + + private static ItemStack getItemStackFromResloc(Resloc resloc) + { + NonNullList nnl = NonNullList.create(); + addToBlockStackList(resloc, nnl); + return nnl.get(0); + } + + public static Resloc getResloc(String string) + { + boolean isShorthand = string.matches(SHORTHAND_MATCHER); + Matcher m = isShorthand ? SHORTHAND_REGEX.matcher(string) : FULL_ID_REGEX.matcher(string); + boolean found = m.find(); + if (found) + { + if (m.group("meta") != null) + { + return Resloc.of(m.group("resloc"), m.group("meta")); + } + + return Resloc.of(m.group("resloc")); + } + return Resloc.of("null"); + } + + + public static class Resloc extends ResourceLocation + { + + private String rawInput; + private int meta; + + public static Resloc of(String resourceName, String meta) + { + return new Resloc(resourceName, meta); + } + + public static Resloc of(String resourceName) + { + return new Resloc(resourceName); + } + + public Resloc(String resourceName) + { + this(resourceName, ""); + } + + public Resloc(String resourceName, String meta) + { + super(resourceName); + this.rawInput = resourceName; + setMetaValue(meta); + } + + private void setMetaValue(String meta) + { + this.rawInput = meta.isEmpty() ? rawInput : rawInput + ":" + meta; + this.meta = (meta.equals("*")) ? OreDictionary.WILDCARD_VALUE : safeParse(meta); + } + + public boolean isBlock(Block block) + { + return block.getRegistryName().equals(this); + } + + private int safeParse(String str) + { + try + { + return Integer.parseInt(str); + } catch (NumberFormatException e) + { + return 0; + } + } + + public int getMeta() + { + return this.meta; + } + + public boolean isWildcard() + { + return this.meta == OreDictionary.WILDCARD_VALUE; + } + + public ItemStack toItemStack(Block block) + { + return meta > 0 ? new ItemStack(block, 1, this.meta) : new ItemStack(block); + } + } + + @Getter + public static class MultiBlockStateHolder + { + + private Block block; + private List blockstateList = new ArrayList<>(); + + private MultiBlockStateHolder() + { + } + + public MultiBlockStateHolder(Block block, List blockstateList) + { + this.block = block; + this.blockstateList = blockstateList; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ClientUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ClientUtil.java new file mode 100644 index 00000000..5eee4151 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ClientUtil.java @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.io.IOException; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.common.model.IModelState; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.wrappers.FlagData; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +/** + * Starting with Release 4.1.0 this class will be removed and all methods + * moved to a dedicated utility class. At this time all planned utility classes + * will be internal and non-accessible. + *

+ * ADDON DEVELOPERS THAT MAKE CALLS TO ANY METHOD IN THIS CLASS ARE ADVISED + * TO MOVE TO THEIR OWN IMPLEMENTATIONS + * + */ +@ForRemoval(deadline = "4.1.0") +@SideOnly(Side.CLIENT) +public class ClientUtil +{ + + @Deprecated + @ReplaceWith("getClientTimeTotal()") + public static long getMilliseconds() + { + return getClientTimeTotal(); + } + + public static long getClientTimeTotal() + { + return (long) (Minecraft.getMinecraft().world.getTotalWorldTime() * 66.666666666666); + } + + public static void addVariant(String modID, String name, String... variants) + { + Item itemBlockVariants = Item.REGISTRY.getObject(new ResourceLocation(modID, name)); + ResourceLocation[] variants0 = new ResourceLocation[variants.length]; + for (int i = 0; i < variants.length; ++i) + { + variants0[i] = new ResourceLocation(modID + ":" + variants[i]); + } + ModelBakery.registerItemVariants(itemBlockVariants, variants0); + } + + public static void registerBlockJson(String texturePrefix, Block block) + { + registerBlockJson(texturePrefix, block, 0, block.getTranslationKey().substring(5)); + } + + public static void registerBlockJson(String texturePrefix, Block block, int meta, String name) + { + FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), meta, new ModelResourceLocation(texturePrefix + name, "inventory")); + } + + public static void registerItemJson(String texturePrefix, Item item) + { + registerItemJson(texturePrefix, item, 0, item.getTranslationKey().substring(5)); + } + + public static void registerItemJson(String texturePrefix, Item item, int meta, String name) + { + FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().register(item, meta, new ModelResourceLocation(texturePrefix + name, "inventory")); + } + + public static ScaledResolution getScaledRes(Minecraft minecraft, int width, int height) + { + return new ScaledResolution(minecraft); + } + + public static FlagData updateFlagData(String playerName, boolean sendPacket) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(playerName); + + if (race != null) + { + return race.getFlagData(); + } + if (!ClientProxyCore.flagRequestsSent.contains(playerName) && sendPacket) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REQUEST_FLAG_DATA, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {playerName})); + ClientProxyCore.flagRequestsSent.add(playerName); + } + + return FlagData.DEFAULT; + } + + public static Vector3 updateTeamColor(String playerName, boolean sendPacket) + { + SpaceRace race = SpaceRaceManager.getSpaceRaceFromPlayer(playerName); + + if (race != null) + { + return race.getTeamColor(); + } + if (!ClientProxyCore.flagRequestsSent.contains(playerName) && sendPacket) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REQUEST_FLAG_DATA, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {playerName})); + ClientProxyCore.flagRequestsSent.add(playerName); + } + + return new Vector3(1, 1, 1); + } + + public static void replaceModel(String modid, ModelBakeEvent event, String resLoc, String objLoc, List visibleGroups, Class clazz, IModelState parentState, String... variants) + { + OBJModel model; + try + { + model = (OBJModel) OBJLoaderGC.instance.loadModel(new ResourceLocation(modid, objLoc)); + } catch (Exception e) + { + throw new RuntimeException(e); + } + + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + IBakedModel newModelBase = model.bake(new OBJModel.OBJState(visibleGroups, false, parentState), DefaultVertexFormats.ITEM, spriteFunction); + IBakedModel newModelAlt = null; + if (variants.length == 0) + { + variants = new String[] + {"inventory"}; + } else if (variants.length > 1 || !variants[0].equals("inventory")) + { + newModelAlt = model.bake(new OBJModel.OBJState(visibleGroups, false, TRSRTransformation.identity()), DefaultVertexFormats.ITEM, spriteFunction); + } + + for (String variant : variants) + { + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(modid + ":" + resLoc, variant); + IBakedModel object = event.getModelRegistry().getObject(modelResourceLocation); + if (object != null) + { + IBakedModel newModel = variant.equals("inventory") ? newModelBase : newModelAlt; + if (clazz != null) + { + try + { + newModel = clazz.getConstructor(IBakedModel.class).newInstance(newModel); + } catch (Exception e) + { + GalacticraftCore.logger.error("ItemModel constructor problem for " + modelResourceLocation); + e.printStackTrace(); + } + } + event.getModelRegistry().putObject(modelResourceLocation, newModel); + } + } + } + + public static IBakedModel modelFromOBJ(ResourceLocation loc) throws IOException + { + return modelFromOBJ(loc, ImmutableList.of("main")); + } + + public static IBakedModel modelFromOBJ(ResourceLocation loc, List visibleGroups) throws IOException + { + return modelFromOBJ(loc, visibleGroups, TRSRTransformation.identity()); + } + + public static IBakedModel modelFromOBJ(ResourceLocation loc, List visibleGroups, IModelState parentState) throws IOException + { + IModel model = OBJLoaderGC.instance.loadModel(loc); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + return model.bake(new OBJModel.OBJState(visibleGroups, false, parentState), DefaultVertexFormats.ITEM, spriteFunction); + } + + public static void drawBakedModel(IBakedModel model) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM); + + for (BakedQuad bakedquad : model.getQuads(null, null, 0)) + { + worldrenderer.addVertexData(bakedquad.getVertexData()); + } + + tessellator.draw(); + } + + public static void drawBakedModelColored(IBakedModel model, int color) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM); + + for (BakedQuad bakedquad : model.getQuads(null, null, 0)) + { + int[] data = bakedquad.getVertexData(); + data[3] = color; + data[10] = color; + data[17] = color; + data[24] = color; + worldrenderer.addVertexData(data); + } + + tessellator.draw(); + } + + public static boolean isKeyPressed(KeyBinding keyBinding) + { + try + { + int key = keyBinding.getKeyCode(); + return key < 0 ? Mouse.isButtonDown(key + 100) : Keyboard.isKeyDown(key); + } catch (Exception e) + { + return false; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ColorUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ColorUtil.java new file mode 100644 index 00000000..37760723 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ColorUtil.java @@ -0,0 +1,345 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; + +public class ColorUtil +{ + // Credit to Mark Ransom @ StackOverflow for the colorwheel idea + + static Vector3 red = new Vector3(255, 0, 0); + static Vector3 orange = new Vector3(255, 160, 0); + static Vector3 yellow = new Vector3(255, 255, 0); + static Vector3 green = new Vector3(0, 255, 0); + static Vector3 cyan = new Vector3(0, 255, 255); + static Vector3 blue = new Vector3(0, 0, 255); + static Vector3 magenta = new Vector3(255, 0, 255); + static Vector3 white = new Vector3(255, 255, 255); + static Vector3 black = new Vector3(0, 0, 0); + static Vector3 mud = new Vector3(94, 81, 74); + + static double[] colorwheelAngles = + {-110D, -30D, 0D, 60D, 120D, 180D, 215D, 250D, 330D, 360D, 420D, 480D}; + static Vector3[] colorwheelColors = + {blue, magenta, red, orange, yellow, green, cyan, blue, magenta, red, orange, yellow}; + + private static Vector3 hue_to_rgb(double deg) + { + deg = deg % 360; + + double previous_angle = colorwheelAngles[1]; + + for (int i = 2; i < colorwheelAngles.length - 2; i++) + { + Double angle = colorwheelAngles[i]; + if (deg <= angle) + { + return interpolateInArray(colorwheelColors, i, (angle - deg) / (angle - previous_angle)); + } + previous_angle = angle; + } + + return null; + } + + private static double rgb_to_hue(Vector3 input) + { + double maxCol = Math.max(Math.max(input.x, input.y), input.z); + if (maxCol <= 0) + { + return 0; + } + Vector3 rgb = input.scale(255D / maxCol); + + double mindist = 1024; + int mini = 0; + + for (int i = 2; i < colorwheelAngles.length - 2; i++) + { + Vector3 color = colorwheelColors[i]; + double separation = color.distance(rgb); + if (separation < mindist) + { + mindist = separation; + mini = i; + } + } + + double separation1; + double separation2; + separation1 = colorwheelColors[mini - 1].distance(rgb); + separation2 = colorwheelColors[mini + 1].distance(rgb); + + double hue; + if (separation1 < separation2) + { + double separationtot = colorwheelColors[mini - 1].distance(colorwheelColors[mini]); + hue = interpolateInArray(colorwheelAngles, mini, mindist / separationtot); + if (hue < 0) + { + hue += 360D; + } + } else + { + double separationtot = colorwheelColors[mini + 1].distance(colorwheelColors[mini]); + hue = interpolateInArray(colorwheelAngles, mini + 1, separation2 / separationtot); + if (hue > 360D) + { + hue -= 360D; + } + } + + return hue; + } + + private static double cubicInterpolate(double y0, double y1, double y2, double y3, double mu) + { + double a0, a1, a2, a3, mu2; + + mu2 = mu * mu; + a3 = y3 - y2 - y0 + y1; + a2 = y0 - y1 - a3; + a1 = y2 - y0; + a0 = y1; + + return (a3 * mu * mu2 + a2 * mu2 + a1 * mu + a0); + } + + private static Vector3 interpolateInArray(Vector3[] array, int i, double mu) + { + Vector3 point0 = array[i + 1]; + Vector3 point1 = array[i]; + Vector3 point2 = array[i - 1]; + Vector3 point3 = array[i - 2]; + + double x = cubicInterpolate(point0.x, point1.x, point2.x, point3.x, mu); + double y = cubicInterpolate(point0.y, point1.y, point2.y, point3.y, mu); + double z = cubicInterpolate(point0.z, point1.z, point2.z, point3.z, mu); + + return new Vector3(x, y, z); + } + + private static double interpolateInArray(double[] array, int i, double mu) + { + return cubicInterpolate(array[i + 1], array[i], array[i - 1], array[i - 2], mu); + } + + public static Vector3 addColorsRealistically(Vector3 color1, Vector3 color2) + { + double hue1 = ColorUtil.rgb_to_hue(color1); + double hue2 = ColorUtil.rgb_to_hue(color2); + if (hue1 - hue2 > 180D) + { + hue2 += 360D; + } + if (hue2 - hue1 > 180D) + { + hue1 += 360D; + } + double hueresult = (hue1 + hue2) / 2; + if (hueresult > 360D) + { + hueresult -= 360D; + } + // TODO: if hue1 and hue2 differ by close to 180degrees, add in some + // 'mud' color + // TODO: add greyscale here + + return ColorUtil.hue_to_rgb(hueresult).scale(1 / 255D); + } + + public static int addColorsRealistically(int color1, int color2) + { + Vector3 result = addColorsRealistically(toVec3(color1), toVec3(color2)); + return fromVec3(result); + } + + public static int addColorsBasic(int color1, int color2) + { + int g = color1 >> 8; + int r = g >> 8; + g &= 255; + int b = color1 & 255; + int gg = color2 >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = color2 & 255; + + r = (r + rr) / 2; + g = (g + gg) / 2; + b = (b + bb) / 2; + + r = r << 16; + g = g << 8; + return r | g | b; + } + + public static Vector3 toVec3(int col) + { + int gg = col >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = col & 255; + return new Vector3(rr / 255F, gg / 255F, bb / 255F); + } + + public static int fromVec3(Vector3 result) + { + int r = (int) (result.x * 255D + 0.499D); + int g = (int) (result.y * 255D + 0.499D); + int b = (int) (result.z * 255D + 0.499D); + r = r << 16; + g = g << 8; + return r | g | b; + } + + public static int to32BitColor(int a, int r, int g, int b) + { + a = a << 24; + r = r << 16; + g = g << 8; + + return a | r | g | b; + } + + public static int to32BitColorB(byte r, byte g, byte b) + { + int rr = (r & 255) << 16; + int gg = (g & 255) << 8; + + return rr | gg | (b & 255); + } + + public static int lighten(int col, float factor) + { + int gg = col >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = col & 255; + rr *= (1F + factor); + gg *= (1F + factor); + bb *= (1F + factor); + if (rr > 255) + { + rr = 255; + } + if (gg > 255) + { + gg = 255; + } + if (bb > 255) + { + bb = 255; + } + return rr << 16 | gg << 8 | bb; + } + + /** + * Lighten to the specified intensity + * + * @param col + * @return + */ + public static int lightenFully(int col, int intensity) + { + if (intensity == 0) + return 0; + int gg = col >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = col & 255; + rr = 255 - rr; + gg = 255 - gg; + bb = 255 - bb; + double greyInvert = Math.min(rr, Math.min(gg, bb)); + double delta = Math.max(rr, Math.max(gg, bb)); + delta = (delta - greyInvert) / delta; + if (greyInvert >= intensity) + { + return col; + } + double factor = (intensity - greyInvert) / intensity / Math.pow(delta, 0.6); + rr -= 24; // this -24 and math.pow(delta 0.6) found empirically, there's + // no science here! + gg -= 24; + bb -= 24; + rr *= factor; + gg *= factor; + bb *= factor; + if (rr > 255) + { + rr = 255; + } + if (gg > 255) + { + gg = 255; + } + if (bb > 255) + { + bb = 255; + } + rr = 255 - rr; + gg = 255 - gg; + bb = 255 - bb; + if (rr > 255) + { + rr = 255; + } + if (gg > 255) + { + gg = 255; + } + if (bb > 255) + { + bb = 255; + } + return rr << 16 | gg << 8 | bb; + } + + public static int toGreyscale(int col) + { + int gg = col >> 8; + int grey = gg >> 8; + grey += gg & 255; + grey += col & 255; + grey /= 3; + return grey << 16 | grey << 8 | (grey & 255); + } + + public static void sendUpdatedColorsToPlayer(GCPlayerStats stats) + { + int dimID = stats.getPlayer().get().dimension; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RECOLOR_ALL_GLASS, dimID, new Object[] + {Integer.valueOf(stats.getGlassColor1()), Integer.valueOf(stats.getGlassColor2()), Integer.valueOf(stats.getGlassColor3())}), stats.getPlayer().get()); + } + + public static void updateColorsForArea(int dimID, BlockPos pos, int range, int color1, int color2, int color3) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_RECOLOR_ALL_GLASS, dimID, new Object[] + {color1, color2, color3}), new TargetPoint(dimID, pos.getX(), pos.getY(), pos.getZ(), range)); + } + + public static void setGLColor(int col) + { + int gg = col >> 8; + int rr = gg >> 8; + gg &= 255; + int bb = col & 255; + GlStateManager.color(rr / 255F, gg / 255F, bb / 255F, 1.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/Compatibility.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/Compatibility.java new file mode 100644 index 00000000..1886ee85 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/Compatibility.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Optional; + +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; + +public enum Compatibility +{ + + ACTUALLYADDITIONS("actuallyadditions"), + APPLIEDENERGISTICS2("appliedenergistics2"), + BIOMESOPLENTY("biomesoplenty"), + BUILDCRAFT("buildcraftcore"), + BUILDCRAFT_TRANSPORT("buildcrafttransport"), + BUILDCRAFT_ENERGY("buildcraftenergy"), + CUBIC_CHUNKS("cubicchunks"), + ENDERIO("enderio"), + GRECHTECH("gregtech", "gregtech_addon"), + INDUSTRIALCRAFT("ic2"), + JEI("jei"), + MATTEROVERDRIVE("matteroverdrive"), + MEKANISM("mekanism"), + PLAYER_API("PlayerAPI"), + RENDER_PLAYER_API("RenderPlayerAPI"), + PNEUMATICCRAFT("pneumaticcraft"), + SPONGEFORGE("spongeforge"), + TINKERS_CONSTRUCT("tconstruct"), + WAILA("waila"); + + + private final String modid; + private final String displayName; + private final boolean isLoaded; + private final Optional modContainer; + + Compatibility(String modid, String altModid) + { + final boolean loaded = (Loader.isModLoaded(modid) || Loader.isModLoaded(altModid)); + this.modid = modid; + this.isLoaded = loaded; + this.modContainer = Loader.instance().getModList().stream().filter(m -> m.getModId().equals(modid)).findFirst(); + this.displayName = loaded ? modContainer.get().getName() : ""; + } + + Compatibility(String modid) + { + final boolean loaded = Loader.isModLoaded(modid); + this.modid = modid; + this.isLoaded = loaded; + this.modContainer = Loader.instance().getModList().stream().filter(m -> m.getModId().equals(modid)).findFirst(); + this.displayName = loaded ? modContainer.get().getName() : ""; + } + + public String modid() + { + return modid; + } + + public String displayName() + { + return displayName; + } + + public boolean isLoaded() + { + return isLoaded; + } + + public String getVersion() + { + if (modContainer.isPresent()) + { + return modContainer.get().getVersion(); + } + return "unspecified"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CompatibilityManager.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CompatibilityManager.java new file mode 100644 index 00000000..ab6f989d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CompatibilityManager.java @@ -0,0 +1,465 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ +package micdoodle8.mods.galacticraft.core.util; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +//import cpw.mods.fml.common.Loader; +//import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; +import net.minecraft.world.WorldType; +import net.minecraft.world.gen.ChunkProviderServer; + +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.oredict.OreDictionary; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed; + +@SuppressWarnings({"rawtypes", "unchecked"}) +public class CompatibilityManager +{ + public final static String modidIC2 = "ic2"; + public final static String modidMekanism = "mekanism"; + public final static String modidBuildcraft = "buildcraftcore"; + public final static String modBCraftTransport = "buildcrafttransport"; + public final static String modBCraftEnergy = "buildcraftenergy"; + public static boolean PlayerAPILoaded = Loader.isModLoaded("PlayerAPI"); + public static boolean RenderPlayerAPILoaded = Loader.isModLoaded("RenderPlayerAPI"); + public static boolean modJEILoaded = Loader.isModLoaded("jei"); + private static boolean modIc2Loaded = Loader.isModLoaded(modidIC2); + private static boolean modICClassicLoaded; + public static boolean modBCraftLoaded = Loader.isModLoaded(modidBuildcraft); + private static boolean modBCraftEnergyLoaded = Loader.isModLoaded(modBCraftEnergy); + private static boolean modBCraftTransportLoaded; + private static boolean modGTLoaded; + private static boolean modTELoaded = Loader.isModLoaded("thermalexpansion"); + private static boolean modMekLoaded = Loader.isModLoaded(modidMekanism); + private static boolean modAetherIILoaded; + private static boolean modAppEngLoaded; + private static boolean modPneumaticCraftLoaded; + private static boolean modBOPLoaded = Loader.isModLoaded("biomesoplenty"); + private static boolean modEIOLoaded = Loader.isModLoaded("enderio"); + public static boolean modAALoaded = Loader.isModLoaded("actuallyadditions"); + private static boolean spongeLoaded; + private static boolean modMatterOverdriveLoaded; + private static boolean wailaLoaded; + public static boolean isSmartMovingLoaded = Loader.isModLoaded("smartmoving"); + public static boolean isTConstructLoaded = Loader.isModLoaded("tconstruct"); + public static boolean isWitcheryLoaded = Loader.isModLoaded("witchery"); + public static boolean isCubicChunksLoaded; + public static Class classGTOre = null; + private static Method spongeOverrideSet = null; + private static Method spongeOverrideGet = null; + public static Class classBCTransport; + public static Class classBCTransportPipeTile; + public static Class classBOPWorldType = null; + public static Class classBOPws = null; + public static Class classBOPwcm = null; + public static Class classIC2wrench = null; + public static Class classIC2wrenchElectric = null; + public static Class classIC2tileEventLoad; + public static Class classIC2tileEventUnload; + public static Field fieldIC2tickhandler; + public static Field fieldIC2networkManager; + public static Class classIc2ClassicNetworkManager; + public static Class classIC2cableType = null; + public static Constructor constructorIC2cableTE = null; + private static Method androidPlayerGet; + private static Method androidPlayerIsAndroid; + public static Class classIc2ClassicTileCable; + + public static void checkForCompatibleMods() + { + if (Loader.isModLoaded("gregtech") || Loader.isModLoaded("gregtech_addon")) + { + CompatibilityManager.modGTLoaded = true; + } + if (CompatibilityManager.modMekLoaded) + { + GalacticraftCore.logger.info("Activating Mekanism compatibility."); + } + if (CompatibilityManager.modTELoaded) + { + GalacticraftCore.logger.info("Activating ThermalExpansion compatibility features."); + } + if (CompatibilityManager.isTConstructLoaded) + { + GalacticraftCore.logger.info("Activating Tinker's Construct compatibility features."); + } + if (CompatibilityManager.modIc2Loaded) + { + if (tryClass("ic2.api.classic.addon.IC2Plugin") != null) + { + modICClassicLoaded = true; + classIc2ClassicTileCable = tryClass("ic2.core.block.wiring.tile.TileEntityCable"); + classIc2ClassicNetworkManager = tryClass("ic2.core.network.NetworkManager"); + } else + { + classIC2cableType = tryClass("ic2.core.block.wiring.CableType"); + } + try + { + classIC2wrench = tryClass("ic2.core.item.tool.ItemToolWrench"); + classIC2wrenchElectric = tryClass("ic2.core.item.tool.ItemToolWrenchElectric"); + classIC2tileEventLoad = tryClass("ic2.api.energy.event.EnergyTileLoadEvent"); + classIC2tileEventUnload = tryClass("ic2.api.energy.event.EnergyTileUnloadEvent"); + Class clazzIC2 = tryClass("ic2.core.IC2"); + fieldIC2networkManager = clazzIC2.getDeclaredField("network"); + fieldIC2tickhandler = clazzIC2.getDeclaredField("tickHandler"); + Class classIC2cable; + try + { + classIC2cable = Class.forName("ic2.core.block.wiring.TileEntityCable"); + } catch (ClassNotFoundException e) + { + try + { + classIC2cable = Class.forName("ic2.core.block.wiring.tile.TileEntityCable"); + } catch (Exception e1) + { + classIC2cable = null; + } + } + if (classIC2cable != null) + { + try + { + BlockEnclosed.onBlockNeighbourChangeIC2a = classIC2cable.getMethod("onNeighborChange", Block.class); + } catch (Exception e) + { + try + { + BlockEnclosed.onBlockNeighbourChangeIC2b = classIC2cable.getMethod("onNeighborChange", Block.class, BlockPos.class); + } catch (Exception e1) + { + BlockEnclosed.onBlockNeighbourChangeIC2a = classIC2cable.getMethod("onBlockUpdate", Block.class); + } + } + Constructor[] constructors = classIC2cable.getDeclaredConstructors(); + for (Constructor constructor2 : constructors) + { + if (constructor2.getGenericParameterTypes().length == 2) + { + constructorIC2cableTE = constructor2; + break; + } + } + } + GalacticraftCore.logger.info("Activating IndustrialCraft2 compatibility features."); + } catch (Exception e) + { + e.printStackTrace(); + } + } + if (Loader.isModLoaded(modBCraftTransport)) + { + CompatibilityManager.modBCraftTransportLoaded = true; + try + { + classBCTransport = Class.forName("buildcraft.transport.BCTransportItems"); + classBCTransportPipeTile = Class.forName("buildcraft.transport.tile.TilePipeHolder"); + } catch (Exception e) + { + e.printStackTrace(); + } + BlockEnclosed.initialiseBC(); + if (CompatibilityManager.classBCTransportPipeTile == null) + { + CompatibilityManager.modBCraftTransportLoaded = false; + } else + { + GalacticraftCore.logger.info("Activating BuildCraft Transport (Pipes) compatibility features."); + } + } + if (CompatibilityManager.modBOPLoaded) + { + try + { + classBOPWorldType = Class.forName("biomesoplenty.common.world.WorldTypeBOP"); + classBOPws = Class.forName("biomesoplenty.common.world.BOPWorldSettings"); + classBOPwcm = Class.forName("biomesoplenty.common.world.BiomeProviderBOP"); + GalacticraftCore.logger.info("Activating Biomes O'Plenty compatibility feature."); + } catch (Exception e) + { + e.printStackTrace(); + } + } + if (Loader.isModLoaded("aetherii")) + { + CompatibilityManager.modAetherIILoaded = true; + GalacticraftCore.logger.info("Activating AetherII compatibility feature."); + } + if (Loader.isModLoaded("appliedenergistics2")) + { + CompatibilityManager.modAppEngLoaded = true; + GalacticraftCore.logger.info("Activating AppliedEnergistics2 compatibility features."); + } + if (Loader.isModLoaded("pneumaticcraft")) + { + CompatibilityManager.modPneumaticCraftLoaded = true; + GalacticraftCore.logger.info("Activating PneumaticCraft compatibility features."); + } + if (Loader.isModLoaded("waila")) + { + CompatibilityManager.wailaLoaded = true; + GalacticraftCore.logger.info("Activating WAILA compatibility features."); + } + if (Loader.isModLoaded("sponge")) + { + try + { + Class clazz = Class.forName("org.spongepowered.common.interfaces.world.gen.IMixinChunkProviderServer"); + spongeOverrideSet = clazz.getMethod("setForceChunkRequests", boolean.class); + spongeOverrideGet = clazz.getMethod("getForceChunkRequests"); + spongeLoaded = true; + } catch (Exception e) + { + try + { + Class clazz = Class.forName("org.spongepowered.common.bridge.world.chunk.ChunkProviderServerBridge"); + spongeOverrideSet = clazz.getMethod("bridge$setForceChunkRequests", boolean.class); + spongeOverrideGet = clazz.getMethod("bridge$getForceChunkRequests"); + spongeLoaded = true; + } catch (Exception enew) + { + enew.printStackTrace(); + } + } + } + if (Loader.isModLoaded("cubicchunks")) + { + CompatibilityManager.isCubicChunksLoaded = true; + } + if (Loader.isModLoaded("matteroverdrive")) + { + try + { + Class androidPlayer = Class.forName("matteroverdrive.entity.android_player.AndroidPlayer"); + Class androidCapability = Class.forName("matteroverdrive.entity.player.MOPlayerCapabilityProvider"); + CompatibilityManager.androidPlayerGet = androidCapability.getMethod("GetAndroidCapability", Entity.class); + CompatibilityManager.androidPlayerIsAndroid = androidPlayer.getMethod("isAndroid"); + CompatibilityManager.modMatterOverdriveLoaded = true; + } catch (Exception e) + { + e.printStackTrace(); + } + } + if (CompatibilityManager.isIc2ClassicLoaded()) + { + Item ic2Coal = ForgeRegistries.ITEMS.getValue(new ResourceLocation("ic2", "itemmisc")); + // Coal Chunk + OreDictionary.registerOre("coal", new ItemStack(ic2Coal, 1, 252)); + // Coal Ball + OreDictionary.registerOre("coal", new ItemStack(ic2Coal, 1, 250)); + // Compressed Coal Ball + OreDictionary.registerOre("compressedCoal", new ItemStack(ic2Coal, 1, 251)); + // Charcoal Block + OreDictionary.registerOre("blockCharcoal", new ItemStack(ic2Coal, 1, 250)); + } else if (CompatibilityManager.isIc2Loaded()) + { + Item ic2Coal = ForgeRegistries.ITEMS.getValue(new ResourceLocation("ic2", "crafting")); + // Coal Chunk + OreDictionary.registerOre("coal", new ItemStack(ic2Coal, 1, 18)); + // Coal Ball + OreDictionary.registerOre("coal", new ItemStack(ic2Coal, 1, 16)); + // Compressed Coal Ball + OreDictionary.registerOre("compressedCoal", new ItemStack(ic2Coal, 1, 17)); + } + OreDictionary.registerOre("charcoal", new ItemStack(Items.COAL, 1, 1)); + } + + @Nullable + private static Class tryClass(String name) + { + try + { + return Class.forName(name); + } catch (ClassNotFoundException e) + { + return null; + } + } + + public static boolean isIc2Loaded() + { + return CompatibilityManager.modIc2Loaded; + } + + public static boolean isIc2ClassicLoaded() + { + return CompatibilityManager.modICClassicLoaded; + } + + public static boolean isBCraftTransportLoaded() + { + return CompatibilityManager.modBCraftTransportLoaded; + } + + public static boolean isBCraftEnergyLoaded() + { + return CompatibilityManager.modBCraftEnergyLoaded; + } + + public static boolean isTELoaded() + { + return CompatibilityManager.modTELoaded; + } + + public static boolean isMekanismLoaded() + { + return CompatibilityManager.modMekLoaded; + } + + public static boolean isGTLoaded() + { + return CompatibilityManager.modGTLoaded; + } + + public static boolean isAIILoaded() + { + return CompatibilityManager.modAetherIILoaded; + } + + public static boolean isAppEngLoaded() + { + return CompatibilityManager.modAppEngLoaded; + } + + public static boolean isBOPLoaded() + { + return CompatibilityManager.modBOPLoaded; + } + + public static boolean isBOPWorld(WorldType worldType) + { + if (modBOPLoaded && classBOPWorldType != null && classBOPws != null && classBOPwcm != null) + { + return classBOPWorldType.isInstance(worldType); + } + return false; + } + + public static boolean isPneumaticCraftLoaded() + { + return CompatibilityManager.modPneumaticCraftLoaded; + } + + public static boolean isWailaLoaded() + { + return CompatibilityManager.wailaLoaded; + } + + public static void spongeOverrideStart(WorldServer w) + { + } + + public static boolean forceLoadChunks(WorldServer w) + { + Boolean spongeForceChunksPrevious = null; + if (spongeLoaded) + { + ChunkProviderServer cps = w.getChunkProvider(); + try + { + spongeForceChunksPrevious = (Boolean) spongeOverrideGet.invoke(cps); + spongeOverrideSet.invoke(cps, true); + } catch (Exception ignore) + { + } + } + return Boolean.TRUE.equals(spongeForceChunksPrevious); + } + + public static void forceLoadChunksEnd(WorldServer w, boolean previous) + { + if (spongeLoaded) + { + try + { + spongeOverrideSet.invoke(w.getChunkProvider(), previous); + } catch (Exception ignore) + { + } + } + } + + public static void registerMicroBlocks() + { + try + { + Class clazz = Class.forName("codechicken.microblock.MicroMaterialRegistry"); + if (clazz != null) + { + Method registerMethod = null; + Method[] methodz = clazz.getMethods(); + for (Method m : methodz) + { + if (m.getName().equals("registerMaterial")) + { + registerMethod = m; + break; + } + } + Class clazzbm = Class.forName("codechicken.microblock.BlockMicroMaterial"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 3), "tile.gcBlockCore.decoblock1"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 4), "tile.gcBlockCore.decoblock2"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 9), "tile.gcBlockCore.copperBlock"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 10), "tile.gcBlockCore.tinBlock"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 11), "tile.gcBlockCore.aluminumBlock"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.basicBlock, 12), "tile.gcBlockCore.meteorironBlock"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.blockMoon, 3), "tile.moonBlock.moondirt"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.blockMoon, 4), "tile.moonBlock.moonstone"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.blockMoon, 5), "tile.moonBlock.moongrass"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(GCBlocks.blockMoon, 14), "tile.moonBlock.bricks"); + GalacticraftCore.logger.info("Activating CodeChicken Microblocks compatibility."); + } + } catch (Exception e) + { + } + } + + public static boolean isAndroid(EntityPlayer player) + { + if (CompatibilityManager.modMatterOverdriveLoaded) + { + // Equivalent to: + // AndroidPlayer androidPlayer = AndroidPlayer.get(player); + // return (androidPlayer != null && androidPlayer.isAndroid()); + try + { + Object androidPlayer = CompatibilityManager.androidPlayerGet.invoke(null, player); + if (androidPlayer != null) + { + return (Boolean) CompatibilityManager.androidPlayerIsAndroid.invoke(androidPlayer); + } + } catch (Exception ignore) + { + } + } + return false; + } + + public static boolean useAluDust() + { + return modIc2Loaded || modAppEngLoaded || modTELoaded || modEIOLoaded || modAALoaded; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ConfigManagerCore.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ConfigManagerCore.java new file mode 100644 index 00000000..810269af --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ConfigManagerCore.java @@ -0,0 +1,1112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; + +import net.minecraftforge.common.config.ConfigCategory; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; +import net.minecraftforge.fml.client.config.IConfigElement; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.recipe.RecipeManagerGC; +import micdoodle8.mods.galacticraft.core.tick.TickHandlerClient; + +import com.google.common.primitives.Ints; + +import org.lwjgl.input.Keyboard; + +public class ConfigManagerCore +{ + + static Configuration config; + + // GAME CONTROL + public static boolean forceOverworldRespawn; + public static boolean hardMode; + public static boolean quickMode; + public static boolean challengeMode; + private static int challengeFlags; + public static boolean challengeRecipes; + public static boolean challengeMobDropsAndSpawning; + public static boolean challengeSpawnHandling; + public static boolean challengeAsteroidPopulation; + public static boolean disableRocketsToOverworld; + public static boolean disableSpaceStationCreation; + public static boolean spaceStationsRequirePermission; + public static boolean disableUpdateCheck; + public static boolean enableSpaceRaceManagerPopup; + public static boolean enableDebug; + public static boolean enableSealerEdgeChecks; + public static boolean disableLander; + public static boolean recipesRequireGCAdvancedMetals = true; + public static boolean allowLiquidGratings; + + // DIMENSIONS + public static int idDimensionOverworld; + public static int idDimensionOverworldOrbit; + public static int idDimensionOverworldOrbitStatic; + public static int idDimensionMoon; + public static int biomeIDbase = 102; + public static boolean disableBiomeTypeRegistrations; + public static int[] staticLoadDimensions = {}; + public static int[] disableRocketLaunchDimensions = {-1, 1}; + public static boolean disableRocketLaunchAllNonGC; + public static int otherPlanetWorldBorders = 0; + public static boolean keepLoadedNewSpaceStations; + + // SCHEMATICS + public static int idSchematicRocketT1; + public static int idSchematicMoonBuggy; + public static int idSchematicAddSchematic; + + // ACHIEVEMENTS + public static int idAchievBase; + + // CLIENT / VISUAL FX + public static boolean moreStars; + public static boolean disableSpaceshipParticles; + public static boolean disableVehicleCameraChanges; + public static boolean oxygenIndicatorLeft; + public static boolean oxygenIndicatorBottom; + public static boolean overrideCapes; + public static boolean disableRocketIconRotation; + + // DIFFICULTY + public static double dungeonBossHealthMod; + public static int suffocationCooldown; + public static int suffocationDamage; + public static int rocketFuelFactor; + public static double meteorSpawnMod; + public static boolean meteorBlockDamageEnabled; + public static boolean disableSpaceshipGrief; + public static double spaceStationEnergyScalar; + + // WORLDGEN + public static boolean enableCopperOreGen; + public static boolean enableTinOreGen; + public static boolean enableAluminumOreGen; + public static boolean enableSiliconOreGen; + public static boolean disableCheeseMoon; + public static boolean disableTinMoon; + public static boolean disableCopperMoon; + public static boolean disableMoonVillageGen; + public static boolean disableSapphireMoon; + public static int[] externalOilGen; + public static double oilGenFactor; + public static boolean retrogenOil; + public static String[] oregenIDs = {}; + public static boolean enableOtherModsFeatures; + public static boolean whitelistCoFHCoreGen; + public static boolean enableThaumCraftNodes; + + // COMPATIBILITY + public static String[] sealableIDs = {}; + public static String[] detectableIDs = {}; + public static boolean alternateCanisterRecipe; + public static String otherModsSilicon; + public static boolean useOldOilFluidID; + public static boolean useOldFuelFluidID; + + // KEYBOARD AND MOUSE + public static String keyOverrideMap; + public static String keyOverrideFuelLevel; + public static String keyOverrideToggleAdvGoggles; + public static int keyOverrideMapI; + public static int keyOverrideFuelLevelI; + public static int keyOverrideToggleAdvGogglesI; + public static float mapMouseScrollSensitivity; + public static boolean invertMapMouseScroll; + + // CHUNKLOADING + public static boolean loadOnLogin; + + public static ArrayList clientSave = null; + private static Map> propOrder = new TreeMap<>(); + private static String currentCat; + + public static void initialize(File file) + { + ConfigManagerCore.config = new Configuration(file); + ConfigManagerCore.syncConfig(true); + } + + public static void forceSave() + { + ConfigManagerCore.config.save(); + } + + public static void syncConfig(boolean load) + { + try + { + propOrder.clear(); + Property prop; + + if (!config.isChild) + { + if (load) + { + config.load(); + } + } + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Enable Debug Messages", false); + prop.setComment("If this is enabled, debug messages will appear in the console. This is useful for finding bugs in the mod."); + prop.setLanguageKey("gc.configgui.enable_debug"); + enableDebug = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "idDimensionOverworld", 0); + prop.setComment("Dimension ID for the Overworld (as seen in the Celestial Map)"); + prop.setLanguageKey("gc.configgui.id_dimension_overworld").setRequiresMcRestart(true); + idDimensionOverworld = prop.getInt(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "idDimensionMoon", -28); + prop.setComment("Dimension ID for the Moon"); + prop.setLanguageKey("gc.configgui.id_dimension_moon").setRequiresMcRestart(true); + idDimensionMoon = prop.getInt(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "idDimensionOverworldOrbit", -27); + prop.setComment("WorldProvider ID for Overworld Space Stations (advanced: do not change unless you have conflicts)"); + prop.setLanguageKey("gc.configgui.id_dimension_overworld_orbit").setRequiresMcRestart(true); + idDimensionOverworldOrbit = prop.getInt(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "idDimensionOverworldOrbitStatic", -26); + prop.setComment("WorldProvider ID for Static Space Stations (advanced: do not change unless you have conflicts)"); + prop.setLanguageKey("gc.configgui.id_dimension_overworld_orbit_static").setRequiresMcRestart(true); + idDimensionOverworldOrbitStatic = prop.getInt(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "biomeIDBase", 102); + prop.setComment("Biome ID base. GC will use biome IDs from this to this + 3, or more with addons. Allowed 40-250. Default 102."); + prop.setLanguageKey("gc.configgui.biome_id_base").setRequiresMcRestart(true); + biomeIDbase = prop.getInt(); + if (biomeIDbase < 40 || biomeIDbase > 250) + { + biomeIDbase = 102; + } + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "Static Loaded Dimensions", ConfigManagerCore.staticLoadDimensions); + prop.setComment("IDs to load at startup, and keep loaded until server stops. Can be added via /gckeeploaded"); + prop.setLanguageKey("gc.configgui.static_loaded_dimensions"); + staticLoadDimensions = prop.getIntList(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "Set new Space Stations to be static loaded", true); + prop.setComment("Set this to true to have an automatic /gckeeploaded for any new Space Station created."); + prop.setLanguageKey("gc.configgui.static_loaded_new_ss"); + keepLoadedNewSpaceStations = prop.getBoolean(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "Dimensions where rockets cannot launch", new String[] {"1", "-1"}); + prop.setComment("IDs of dimensions where rockets should not launch - this should always include the Nether."); + prop.setLanguageKey("gc.configgui.rocket_disabled_dimensions"); + disableRocketLaunchDimensions = prop.getIntList(); + disableRocketLaunchAllNonGC = searchAsterisk(prop.getStringList()); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIMENSIONS, "Disable rockets from returning to Overworld", false); + prop.setComment("If true, rockets will be unable to reach the Overworld (only use this in special modpacks!)"); + prop.setLanguageKey("gc.configgui.rocket_disable_overworld_return"); + disableRocketsToOverworld = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SERVER, "World border for landing location on other planets (Moon, Mars, etc)", 0); + prop.setComment("Set this to 0 for no borders (default). If set to e.g. 2000, players will land on the Moon inside the x,z range -2000 to 2000.)"); + prop.setLanguageKey("gc.configgui.planet_worldborders"); + otherPlanetWorldBorders = prop.getInt(0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Force Overworld Spawn", false); + prop.setComment("By default, you will respawn on Galacticraft dimensions if you die. If you are dying over and over on a planet, set this to true, and you will respawn back on the Overworld."); + prop.setLanguageKey("gc.configgui.force_overworld_respawn"); + forceOverworldRespawn = prop.getBoolean(false); + finishProp(prop); + + // + + prop = getConfig(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicRocketT1", 0); + prop.setComment("Schematic ID for Tier 1 Rocket, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_rocket_t1"); + idSchematicRocketT1 = prop.getInt(0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicMoonBuggy", 1); + prop.setComment("Schematic ID for Moon Buggy, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_moon_buggy"); + idSchematicMoonBuggy = prop.getInt(1); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicAddSchematic", Integer.MAX_VALUE); + prop.setComment("Schematic ID for \"Add Schematic\" Page, must be unique"); + prop.setLanguageKey("gc.configgui.id_schematic_add_schematic"); + idSchematicAddSchematic = prop.getInt(Integer.MAX_VALUE); + finishProp(prop); + + // + + prop = getConfig(Constants.CONFIG_CATEGORY_ACHIEVEMENTS, "idAchievBase", 1784); + prop.setComment("Base Achievement ID. All achievement IDs will start at this number."); + prop.setLanguageKey("gc.configgui.id_achiev_base"); + idAchievBase = prop.getInt(1784); + finishProp(prop); + + //Client side + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "More Stars", true); + prop.setComment("Setting this to false will revert night skies back to default minecraft star count"); + prop.setLanguageKey("gc.configgui.more_stars"); + moreStars = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Disable Spaceship Particles", false); + prop.setComment("If you have FPS problems, setting this to true will help if rocket particles are in your sights"); + prop.setLanguageKey("gc.configgui.disable_spaceship_particles"); + disableSpaceshipParticles = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Disable Vehicle Third-Person and Zoom", false); + prop.setComment("If you're using this mod in virtual reality, or if you don't want the camera changes when entering a Galacticraft vehicle, set this to true."); + prop.setLanguageKey("gc.configgui.disable_vehicle_camera_changes"); + disableVehicleCameraChanges = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Minimap Left", false); + prop.setComment("If true, this will move the Oxygen Indicator to the left side. You can combine this with \"Minimap Bottom\""); + prop.setLanguageKey("gc.configgui.oxygen_indicator_left"); + oxygenIndicatorLeft = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Minimap Bottom", false); + prop.setComment("If true, this will move the Oxygen Indicator to the bottom. You can combine this with \"Minimap Left\""); + prop.setLanguageKey("gc.configgui.oxygen_indicator_bottom"); + oxygenIndicatorBottom = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Disable Rocket Icon Rotation", false); + prop.setComment("If you have FPS problems, setting this to true will disable GC Rocket icons from rotating in GUI's"); + prop.setLanguageKey("gc.configgui.disable_rocket_icon_rotation"); + disableRocketIconRotation = prop.getBoolean(false); + finishProp(prop); + + //World gen + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Oil Generation Factor", 1.8); + prop.setComment("Increasing this will increase amount of oil that will generate in each chunk."); + prop.setLanguageKey("gc.configgui.oil_gen_factor"); + oilGenFactor = prop.getDouble(1.8); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Oil gen in external dimensions", new int[] {0}); + prop.setComment("List of non-galacticraft dimension IDs to generate oil in."); + prop.setLanguageKey("gc.configgui.external_oil_gen"); + externalOilGen = prop.getIntList(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Retro Gen of GC Oil in existing map chunks", false); + prop.setComment("If this is enabled, GC oil will be added to existing Overworld maps where possible."); + prop.setLanguageKey("gc.configgui.enable_retrogen_oil"); + retrogenOil = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Enable Copper Ore Gen", true); + prop.setComment("If this is enabled, copper ore will generate on the overworld."); + prop.setLanguageKey("gc.configgui.enable_copper_ore_gen").setRequiresMcRestart(true); + enableCopperOreGen = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Enable Tin Ore Gen", true); + prop.setComment("If this is enabled, tin ore will generate on the overworld."); + prop.setLanguageKey("gc.configgui.enable_tin_ore_gen").setRequiresMcRestart(true); + enableTinOreGen = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Enable Aluminum Ore Gen", true); + prop.setComment("If this is enabled, aluminum ore will generate on the overworld."); + prop.setLanguageKey("gc.configgui.enable_aluminum_ore_gen").setRequiresMcRestart(true); + enableAluminumOreGen = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Enable Silicon Ore Gen", true); + prop.setComment("If this is enabled, silicon ore will generate on the overworld."); + prop.setLanguageKey("gc.configgui.enable_silicon_ore_gen").setRequiresMcRestart(true); + enableSiliconOreGen = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Cheese Ore Gen on Moon", false); + prop.setComment("Disable Cheese Ore Gen on Moon."); + prop.setLanguageKey("gc.configgui.disable_cheese_moon"); + disableCheeseMoon = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Tin Ore Gen on Moon", false); + prop.setComment("Disable Tin Ore Gen on Moon."); + prop.setLanguageKey("gc.configgui.disable_tin_moon"); + disableTinMoon = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Copper Ore Gen on Moon", false); + prop.setComment("Disable Copper Ore Gen on Moon."); + prop.setLanguageKey("gc.configgui.disable_copper_moon"); + disableCopperMoon = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Sapphire Ore Gen on Moon", false); + prop.setComment("Disable Sapphire Ore Gen on Moon."); + prop.setLanguageKey("gc.configgui.disable_sapphire_moon"); + disableSapphireMoon = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Moon Village Gen", false); + prop.setComment("If true, moon villages will not generate."); + prop.setLanguageKey("gc.configgui.disable_moon_village_gen"); + disableMoonVillageGen = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Generate all other mods features on planets", false); + prop.setComment("If this is enabled, other mods' standard ores and all other features (eg. plants) can generate on the Moon and planets. Apart from looking wrong, this make cause 'Already Decorating!' type crashes. NOT RECOMMENDED! See Wiki."); + prop.setLanguageKey("gc.configgui.enable_other_mods_features"); + enableOtherModsFeatures = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Whitelist CoFHCore worldgen to generate its ores and lakes on planets", false); + prop.setComment("If generate other mods features is disabled as recommended, this setting can whitelist CoFHCore custom worldgen on planets."); + prop.setLanguageKey("gc.configgui.whitelist_co_f_h_core_gen"); + whitelistCoFHCoreGen = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Generate ThaumCraft wild nodes on planetary surfaces", true); + prop.setComment("If ThaumCraft is installed, ThaumCraft wild nodes can generate on the Moon and planets."); + prop.setLanguageKey("gc.configgui.enable_thaum_craft_nodes"); + enableThaumCraftNodes = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Other mods ores for GC to generate on the Moon and planets", new String[] {}); + prop.setComment( + "Enter IDs of other mods' ores here for Galacticraft to generate them on the Moon and other planets. Format is BlockName or BlockName:metadata. Use optional parameters at end of each line: /RARE /UNCOMMON or /COMMON for rarity in a chunk; /DEEP /SHALLOW or /BOTH for height; /SINGLE /STANDARD or /LARGE for clump size; /XTRARANDOM for ores sometimes there sometimes not at all. /ONLYMOON or /ONLYMARS if wanted on one planet only. If nothing specified, defaults are /COMMON, /BOTH and /STANDARD. Repeat lines to generate a huge quantity of ores."); + prop.setLanguageKey("gc.configgui.other_mod_ore_gen_i_ds"); + oregenIDs = prop.getStringList(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Use legacy oilgc fluid registration", false); + prop.setComment("Set to true to make Galacticraft oil register as oilgc, for backwards compatibility with previously generated worlds."); + prop.setLanguageKey("gc.configgui.use_old_oil_fluid_i_d"); + useOldOilFluidID = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Use legacy fuelgc fluid registration", false); + prop.setComment("Set to true to make Galacticraft fuel register as fuelgc, for backwards compatibility with previously generated worlds."); + prop.setLanguageKey("gc.configgui.use_old_fuel_fluid_i_d"); + useOldFuelFluidID = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Disable lander on Moon and other planets", false); + prop.setComment("If this is true, the player will parachute onto the Moon instead - use only in debug situations."); + prop.setLanguageKey("gc.configgui.disable_lander"); + disableLander = prop.getBoolean(false); + finishProp(prop); + + //Server side + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Disable Spaceship Explosion", false); + prop.setComment("Spaceships will not explode on contact if set to true."); + prop.setLanguageKey("gc.configgui.disable_spaceship_grief"); + disableSpaceshipGrief = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SERVER, "Space Stations Require Permission", true); + prop.setComment("While true, space stations require you to invite other players using /ssinvite "); + prop.setLanguageKey("gc.configgui.space_stations_require_permission"); + spaceStationsRequirePermission = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SERVER, "Disable Space Station creation", false); + prop.setComment("If set to true on a server, players will be completely unable to create space stations."); + prop.setLanguageKey("gc.configgui.disable_space_station_creation"); + disableSpaceStationCreation = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CLIENT, "Override Capes", true); + prop.setComment("By default, Galacticraft will override capes with the mod's donor cape. Set to false to disable."); + prop.setLanguageKey("gc.configgui.override_capes"); + overrideCapes = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Space Station Solar Energy Multiplier", 2.0); + prop.setComment("Solar panels will work (default 2x) more effective on space stations."); + prop.setLanguageKey("gc.configgui.space_station_energy_scalar"); + spaceStationEnergyScalar = prop.getDouble(2.0); + finishProp(prop); + + try + { + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "External Sealable IDs", new String[] {"glass_pane"}); + prop.setComment( + "List non-opaque blocks from other mods (for example, special types of glass) that the Oxygen Sealer should recognize as solid seals. Format is 'modid:blockname:meta'\n'modid' is optional but will default to 'minecraft'\n'meta' can be '*' and will be all variants of that block if any"); + prop.setLanguageKey("gc.configgui.sealable_i_ds").setRequiresMcRestart(true); + sealableIDs = prop.getStringList(); + finishProp(prop); + } catch (Exception e) + { + GalacticraftCore.logger.error("[Galacticraft] It appears you have installed the 'Dev' version of Galacticraft instead of the regular version (or vice versa). Please re-install."); + } + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "External Detectable IDs", new String[] {Block.REGISTRY.getNameForObject(Blocks.COAL_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.DIAMOND_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.GOLD_ORE) + .getPath(), Block.REGISTRY.getNameForObject(Blocks.IRON_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.LAPIS_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.REDSTONE_ORE).getPath(), Block.REGISTRY.getNameForObject(Blocks.LIT_REDSTONE_ORE).getPath()}); + prop.setComment("List blocks from other mods that the Sensor Glasses should recognize as solid blocks. Format is 'modid:blockname:meta'\n'modid' is optional but will default to 'minecraft'\n'meta' can be '*' and will be all variants of that block if any"); + prop.setLanguageKey("gc.configgui.detectable_i_ds").setRequiresMcRestart(true); + detectableIDs = prop.getStringList(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Quick Game Mode", false); + prop.setComment("Set this to true for less metal use in Galacticraft recipes (makes the game easier)."); + prop.setLanguageKey("gc.configgui.quick_mode"); + quickMode = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Harder Difficulty", false); + prop.setComment("Set this to true for increased difficulty in modpacks (see forum for more info)."); + prop.setLanguageKey("gc.configgui.hard_mode"); + hardMode = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Adventure Game Mode", false); + prop.setComment("Set this to true for a challenging adventure where the player starts the game stranded in the Asteroids dimension with low resources (only effective if Galacticraft Planets installed)."); + prop.setLanguageKey("gc.configgui.asteroids_start"); + challengeMode = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Adventure Game Mode Flags", 15); + prop.setComment("Add together flags 8, 4, 2, 1 to enable the four elements of adventure game mode. Default 15. 1 = extended compressor recipes. 2 = mob drops and spawning. 4 = more trees in hollow asteroids. 8 = start stranded in Asteroids."); + prop.setLanguageKey("gc.configgui.asteroids_flags"); + challengeFlags = prop.getInt(15); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Suffocation Cooldown", 100); + prop.setComment("Lower/Raise this value to change time between suffocation damage ticks (allowed range 50-250)"); + prop.setLanguageKey("gc.configgui.suffocation_cooldown"); + suffocationCooldown = Math.min(Math.max(50, prop.getInt(100)), 250); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Suffocation Damage", 2); + prop.setComment("Change this value to modify the damage taken per suffocation tick"); + prop.setLanguageKey("gc.configgui.suffocation_damage"); + suffocationDamage = prop.getInt(2); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Dungeon Boss Health Modifier", 1.0); + prop.setComment("Change this if you wish to balance the mod (if you have more powerful weapon mods)."); + prop.setLanguageKey("gc.configgui.dungeon_boss_health_mod"); + dungeonBossHealthMod = prop.getDouble(1.0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_SERVER, "Enable Sealed edge checks", true); + prop.setComment("If this is enabled, areas sealed by Oxygen Sealers will run a seal check when the player breaks or places a block (or on block updates). This should be enabled for a 100% accurate sealed status, but can be disabled on servers for performance reasons."); + prop.setLanguageKey("gc.configgui.enable_sealer_edge_checks"); + enableSealerEdgeChecks = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Alternate recipe for canisters", false); + prop.setComment("Enable this if the standard canister recipe causes a conflict."); + prop.setLanguageKey("gc.configgui.alternate_canister_recipe").setRequiresMcRestart(true); + alternateCanisterRecipe = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "OreDict name of other mod's silicon", "itemSilicon"); + prop.setComment("This needs to match the OreDictionary name used in the other mod. Set a nonsense name to disable."); + prop.setLanguageKey("gc.configgui.ore_dict_silicon"); + otherModsSilicon = prop.getString(); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Must use GC's own space metals in recipes", true); + prop.setComment("Should normally be true. If you set this to false, in a modpack with other mods with the same metals, players may be able to craft advanced GC items without travelling to Moon, Mars, Asteroids etc."); + prop.setLanguageKey("gc.configgui.disable_ore_dict_space_metals"); + recipesRequireGCAdvancedMetals = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_KEYS, "Open Galaxy Map", "KEY_M"); + prop.setComment("Default Map key on first Galacticraft run only. After first run, change keys by Minecraft in-game Controls menu. Valid settings: KEY_ followed by 0-9 or A-Z."); + prop.setLanguageKey("gc.configgui.override_map").setRequiresMcRestart(true); + keyOverrideMap = prop.getString(); + keyOverrideMapI = parseKeyValue(keyOverrideMap); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_KEYS, "Open Rocket GUI", "KEY_G"); + prop.setComment("Default Rocket/Fuel key on first Galacticraft run only. After first run, change keys by Minecraft in-game Controls menu. Valid settings: KEY_ followed by 0-9 or A-Z."); + prop.setLanguageKey("gc.configgui.key_override_fuel_level").setRequiresMcRestart(true); + keyOverrideFuelLevel = prop.getString(); + keyOverrideFuelLevelI = parseKeyValue(keyOverrideFuelLevel); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_KEYS, "Toggle Advanced Goggles", "KEY_K"); + prop.setComment("Default Goggles key on first Galacticraft run only. After first run, change keys by Minecraft in-game Controls menu. Valid settings: KEY_ followed by 0-9 or A-Z."); + prop.setLanguageKey("gc.configgui.key_override_toggle_adv_goggles").setRequiresMcRestart(true); + keyOverrideToggleAdvGoggles = prop.getString(); + keyOverrideToggleAdvGogglesI = parseKeyValue(keyOverrideToggleAdvGoggles); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_COMPATIBILITY, "Rocket fuel factor", 1); + prop.setComment("The normal factor is 1. Increase this to 2 - 5 if other mods with a lot of oil (e.g. BuildCraft) are installed to increase GC rocket fuel requirement."); + prop.setLanguageKey("gc.configgui.rocket_fuel_factor"); + rocketFuelFactor = prop.getInt(1); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CONTROLS, "Map Scroll Mouse Sensitivity", 1.0); + prop.setComment("Increase to make the mouse drag scroll more sensitive, decrease to lower sensitivity."); + prop.setLanguageKey("gc.configgui.map_scroll_sensitivity"); + mapMouseScrollSensitivity = (float) prop.getDouble(1.0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_CONTROLS, "Map Scroll Mouse Invert", false); + prop.setComment("Set to true to invert the mouse scroll feature on the galaxy map."); + prop.setLanguageKey("gc.configgui.map_scroll_invert"); + invertMapMouseScroll = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Meteor Spawn Modifier", 1.0); + prop.setComment("Set to a value between 0.0 and 1.0 to decrease meteor spawn chance (all dimensions)."); + prop.setLanguageKey("gc.configgui.meteor_spawn_mod"); + meteorSpawnMod = prop.getDouble(1.0); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_DIFFICULTY, "Meteor Block Damage Enabled", true); + prop.setComment("Set to false to stop meteors from breaking blocks on contact."); + prop.setLanguageKey("gc.configgui.meteor_block_damage"); + meteorBlockDamageEnabled = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Disable Update Check", false); + prop.setComment("Update check will not run if this is set to true."); + prop.setLanguageKey("gc.configgui.disable_update_check"); + disableUpdateCheck = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Allow liquids into Gratings", true); + prop.setComment("Liquids will not flow into Grating block if this is set to false."); + prop.setLanguageKey("gc.configgui.allow_liquids_grating").setRequiresMcRestart(true); + allowLiquidGratings = prop.getBoolean(true); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Biome Type Registrations", false); + prop.setComment("Biome Types will not be registered in the BiomeDictionary if this is set to true."); + prop.setLanguageKey("gc.configgui.disable_biome_type_registrations"); + disableBiomeTypeRegistrations = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig(Constants.CONFIG_CATEGORY_GENERAL, "Enable Space Race Manager Popup", false); + prop.setComment("Space Race Manager will show on-screen after login, if enabled."); + prop.setLanguageKey("gc.configgui.enable_space_race_manager_popup"); + enableSpaceRaceManagerPopup = prop.getBoolean(false); + finishProp(prop); + + prop = getConfig("chunkloading", "LoadOnLogin", true); + prop.setComment("If you don't want each player's chunks to load when they log in, set to false"); + loadOnLogin = prop.getBoolean(false); + finishProp(prop); + + // Cleanup older GC config files + cleanConfig(config, propOrder); + + if (config.hasChanged()) + { + config.save(); + } + + challengeModeUpdate(); + } catch (final Exception e) + { + GalacticraftCore.logger.error("Problem loading core config (\"core.conf\")"); + e.printStackTrace(); + } + } + + public static void cleanConfig(Configuration config, Map> propOrder) + { + List categoriesToRemove = new LinkedList<>(); + for (String catName : config.getCategoryNames()) + { + List newProps = propOrder.get(catName); + if (newProps == null) + { + categoriesToRemove.add(catName); + } + else + { + ConfigCategory cat = config.getCategory(catName); + List toRemove = new LinkedList<>(); + for (String oldprop : cat.keySet()) + { + if (!newProps.contains(oldprop)) + { + toRemove.add(oldprop); + } + } + for (String removeMe : toRemove) + { + cat.remove(removeMe); + } + config.setCategoryPropertyOrder(catName, propOrder.get(catName)); + } + } + for (String catName : categoriesToRemove) + { + config.removeCategory(config.getCategory(catName)); + } + } + + private static Property getConfig(String cat, String key, int defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, double defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, boolean defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, String defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + config.moveProperty(Constants.CONFIG_CATEGORY_CONTROLS, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, String[] defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static Property getConfig(String cat, String key, int[] defaultValue) + { + config.moveProperty(Constants.CONFIG_CATEGORY_GENERAL, key, cat); + currentCat = cat; + return config.get(cat, key, defaultValue); + } + + private static void finishProp(Property prop) + { + if (propOrder.get(currentCat) == null) + { + propOrder.put(currentCat, new ArrayList<>()); + } + propOrder.get(currentCat).add(prop.getName()); + } + + public static boolean setLoaded(int newID) + { + boolean found = false; + + for (int staticLoadDimension : ConfigManagerCore.staticLoadDimensions) + { + if (staticLoadDimension == newID) + { + found = true; + break; + } + } + + if (!found) + { + int[] oldIDs = ConfigManagerCore.staticLoadDimensions; + ConfigManagerCore.staticLoadDimensions = new int[ConfigManagerCore.staticLoadDimensions.length + 1]; + System.arraycopy(oldIDs, 0, staticLoadDimensions, 0, oldIDs.length); + + ConfigManagerCore.staticLoadDimensions[ConfigManagerCore.staticLoadDimensions.length - 1] = newID; + String[] values = new String[ConfigManagerCore.staticLoadDimensions.length]; + Arrays.sort(ConfigManagerCore.staticLoadDimensions); + + for (int i = 0; i < values.length; i++) + { + values[i] = String.valueOf(ConfigManagerCore.staticLoadDimensions[i]); + } + + Property prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "Static Loaded Dimensions", ConfigManagerCore.staticLoadDimensions); + prop.setComment("IDs to load at startup, and keep loaded until server stops. Can be added via /gckeeploaded"); + prop.setLanguageKey("gc.configgui.static_loaded_dimensions"); + prop.set(values); + + ConfigManagerCore.config.save(); + } + + return !found; + } + + public static boolean setUnloaded(int idToRemove) + { + int foundCount = 0; + + for (int staticLoadDimension : ConfigManagerCore.staticLoadDimensions) + { + if (staticLoadDimension == idToRemove) + { + foundCount++; + } + } + + if (foundCount > 0) + { + List idArray = new ArrayList<>(Ints.asList(ConfigManagerCore.staticLoadDimensions)); + idArray.removeAll(Collections.singleton(idToRemove)); + + ConfigManagerCore.staticLoadDimensions = new int[idArray.size()]; + + for (int i = 0; i < idArray.size(); i++) + { + ConfigManagerCore.staticLoadDimensions[i] = idArray.get(i); + } + + String[] values = new String[ConfigManagerCore.staticLoadDimensions.length]; + Arrays.sort(ConfigManagerCore.staticLoadDimensions); + + for (int i = 0; i < values.length; i++) + { + values[i] = String.valueOf(ConfigManagerCore.staticLoadDimensions[i]); + } + + Property prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "Static Loaded Dimensions", ConfigManagerCore.staticLoadDimensions); + prop.setComment("IDs to load at startup, and keep loaded until server stops. Can be added via /gckeeploaded"); + prop.setLanguageKey("gc.configgui.static_loaded_dimensions"); + prop.set(values); + + ConfigManagerCore.config.save(); + } + + return foundCount > 0; + } + + public static void challengeModeUpdate() + { + if (challengeMode) + { + challengeRecipes = (challengeFlags & 1) > 0; + challengeMobDropsAndSpawning = (challengeFlags & 2) > 0; + challengeAsteroidPopulation = (challengeFlags & 4) > 0; + challengeSpawnHandling = (challengeFlags & 8) > 0; + } + else + { + challengeRecipes = false; + challengeMobDropsAndSpawning = false; + challengeAsteroidPopulation = false; + challengeSpawnHandling = false; + } + } + + /** + * Note for this to be effective, the prop = config.get() call has to + * provide a String[] as the default values If you use an Integer[] then the + * config parser deletes all non-numerical lines from the config before GC + * even sees them + */ + private static boolean searchAsterisk(String[] strings) + { + for (String s : strings) + { + if (s != null && "*".equals(s.trim())) + { + return true; + } + } + return false; + } + + public static List getConfigElements() + { + List list = new ArrayList<>(); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_DIFFICULTY)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_GENERAL)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_CLIENT)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_CONTROLS)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_COMPATIBILITY)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_WORLDGEN)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_SERVER)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_DIMENSIONS)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_SCHEMATIC)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_ACHIEVEMENTS)).getChildElements()); + list.addAll(new ConfigElement(config.getCategory(Constants.CONFIG_CATEGORY_ENTITIES)).getChildElements()); + + return list; + } + + public static List getServerConfigOverride() + { + ArrayList returnList = new ArrayList<>(); + int modeFlags = ConfigManagerCore.hardMode ? 1 : 0; + modeFlags += ConfigManagerCore.quickMode ? 2 : 0; + modeFlags += ConfigManagerCore.challengeMode ? 4 : 0; + modeFlags += ConfigManagerCore.disableSpaceStationCreation ? 8 : 0; + modeFlags += ConfigManagerCore.recipesRequireGCAdvancedMetals ? 16 : 0; + modeFlags += ConfigManagerCore.challengeRecipes ? 32 : 0; + modeFlags += ConfigManagerCore.allowLiquidGratings ? 64 : 0; + returnList.add(modeFlags); + returnList.add(ConfigManagerCore.dungeonBossHealthMod); + returnList.add(ConfigManagerCore.suffocationDamage); + returnList.add(ConfigManagerCore.suffocationCooldown); + returnList.add(ConfigManagerCore.rocketFuelFactor); + returnList.add(ConfigManagerCore.otherModsSilicon); + // If changing this, update definition of + // EnumSimplePacket.C_UPDATE_CONFIGS - see comment in + // setConfigOverride() below + EnergyConfigHandler.serverConfigOverride(returnList); + + returnList.add(ConfigManagerCore.detectableIDs.clone()); + // TODO Should this include any other client-side configurables too? + return returnList; + } + + @SideOnly(Side.CLIENT) + public static void setConfigOverride(List configs) + { + int dataCount = 0; + int modeFlag = (Integer) configs.get(dataCount++); + ConfigManagerCore.hardMode = (modeFlag & 1) != 0; + ConfigManagerCore.quickMode = (modeFlag & 2) != 0; + ConfigManagerCore.challengeMode = (modeFlag & 4) != 0; + ConfigManagerCore.disableSpaceStationCreation = (modeFlag & 8) != 0; + ConfigManagerCore.recipesRequireGCAdvancedMetals = (modeFlag & 16) != 0; + ConfigManagerCore.challengeRecipes = (modeFlag & 32) != 0; + ConfigManagerCore.allowLiquidGratings = (modeFlag & 64) != 0; + ConfigManagerCore.dungeonBossHealthMod = (Double) configs.get(dataCount++); + ConfigManagerCore.suffocationDamage = (Integer) configs.get(dataCount++); + ConfigManagerCore.suffocationCooldown = (Integer) configs.get(dataCount++); + ConfigManagerCore.rocketFuelFactor = (Integer) configs.get(dataCount++); + ConfigManagerCore.otherModsSilicon = (String) configs.get(dataCount++); + // If adding any additional data objects here, also remember to update + // the packet definition of EnumSimplePacket.C_UPDATE_CONFIGS in + // PacketSimple + // Current working packet definition: Integer.class, Double.class, + // Integer.class, Integer.class, Integer.class, String.class, + // Float.class, Float.class, Float.class, Float.class, Integer.class, + // String[].class + + EnergyConfigHandler.setConfigOverride((Float) configs.get(dataCount++), (Float) configs.get(dataCount++), (Float) configs.get(dataCount++), (Float) configs.get(dataCount++), (Integer) configs.get(dataCount++)); + + int sizeIDs = configs.size() - dataCount; + if (sizeIDs > 0) + { + Object dataLast = configs.get(dataCount); + if (dataLast instanceof String) + { + ConfigManagerCore.detectableIDs = new String[sizeIDs]; + for (int j = 0; j < sizeIDs; j++) + ConfigManagerCore.detectableIDs[j] = new String((String) configs.get(dataCount++)); + } + else if (dataLast instanceof String[]) + { + ConfigManagerCore.detectableIDs = ((String[]) dataLast); + } + TickHandlerClient.registerDetectableBlocks(false); + } + + challengeModeUpdate(); + RecipeManagerGC.setConfigurableRecipes(); + } + + public static void saveClientConfigOverrideable() + { + if (ConfigManagerCore.clientSave == null) + { + ConfigManagerCore.clientSave = (ArrayList) ConfigManagerCore.getServerConfigOverride(); + } + } + + public static void restoreClientConfigOverrideable() + { + if (ConfigManagerCore.clientSave != null) + { + ConfigManagerCore.setConfigOverride(clientSave); + } + } + + private static int parseKeyValue(String key) + { + if (key.equals("KEY_A")) + { + return Keyboard.KEY_A; + } + else if (key.equals("KEY_B")) + { + return Keyboard.KEY_B; + } + else if (key.equals("KEY_C")) + { + return Keyboard.KEY_C; + } + else if (key.equals("KEY_D")) + { + return Keyboard.KEY_D; + } + else if (key.equals("KEY_E")) + { + return Keyboard.KEY_E; + } + else if (key.equals("KEY_F")) + { + return Keyboard.KEY_F; + } + else if (key.equals("KEY_G")) + { + return Keyboard.KEY_G; + } + else if (key.equals("KEY_H")) + { + return Keyboard.KEY_H; + } + else if (key.equals("KEY_I")) + { + return Keyboard.KEY_I; + } + else if (key.equals("KEY_J")) + { + return Keyboard.KEY_J; + } + else if (key.equals("KEY_K")) + { + return Keyboard.KEY_K; + } + else if (key.equals("KEY_L")) + { + return Keyboard.KEY_L; + } + else if (key.equals("KEY_M")) + { + return Keyboard.KEY_M; + } + else if (key.equals("KEY_N")) + { + return Keyboard.KEY_N; + } + else if (key.equals("KEY_O")) + { + return Keyboard.KEY_O; + } + else if (key.equals("KEY_P")) + { + return Keyboard.KEY_P; + } + else if (key.equals("KEY_Q")) + { + return Keyboard.KEY_Q; + } + else if (key.equals("KEY_R")) + { + return Keyboard.KEY_R; + } + else if (key.equals("KEY_S")) + { + return Keyboard.KEY_S; + } + else if (key.equals("KEY_T")) + { + return Keyboard.KEY_T; + } + else if (key.equals("KEY_U")) + { + return Keyboard.KEY_U; + } + else if (key.equals("KEY_V")) + { + return Keyboard.KEY_V; + } + else if (key.equals("KEY_W")) + { + return Keyboard.KEY_W; + } + else if (key.equals("KEY_X")) + { + return Keyboard.KEY_X; + } + else if (key.equals("KEY_Y")) + { + return Keyboard.KEY_Y; + } + else if (key.equals("KEY_Z")) + { + return Keyboard.KEY_Z; + } + else if (key.equals("KEY_1")) + { + return Keyboard.KEY_1; + } + else if (key.equals("KEY_2")) + { + return Keyboard.KEY_2; + } + else if (key.equals("KEY_3")) + { + return Keyboard.KEY_3; + } + else if (key.equals("KEY_4")) + { + return Keyboard.KEY_4; + } + else if (key.equals("KEY_5")) + { + return Keyboard.KEY_5; + } + else if (key.equals("KEY_6")) + { + return Keyboard.KEY_6; + } + else if (key.equals("KEY_7")) + { + return Keyboard.KEY_7; + } + else if (key.equals("KEY_8")) + { + return Keyboard.KEY_8; + } + else if (key.equals("KEY_9")) + { + return Keyboard.KEY_9; + } + else if (key.equals("KEY_0")) + { + return Keyboard.KEY_0; + } + + GalacticraftCore.logger.error("Failed to parse keyboard key: " + key + "... Use values A-Z or 0-9"); + + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CreativeTabGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CreativeTabGC.java new file mode 100644 index 00000000..25cb22b5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/CreativeTabGC.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Collections; +import java.util.Comparator; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CreativeTabGC extends CreativeTabs +{ + + private ItemStack itemForTab; + private Comparator tabSorter; + + public CreativeTabGC(int par1, String par2Str, ItemStack itemForTab, Comparator tabSorter) + { + super(par1, par2Str); + this.itemForTab = itemForTab; + this.tabSorter = tabSorter; + } + + @Override + @SideOnly(Side.CLIENT) + public ItemStack createIcon() + { + return this.itemForTab; + } + + public void setItemForTab(ItemStack itemForTab) + { + this.itemForTab = itemForTab; + } + + @Override + @SideOnly(Side.CLIENT) + public String getTranslationKey() + { + return "item_group." + this.getTabLabel(); + } + + @Override + public void displayAllRelevantItems(NonNullList list) + { + super.displayAllRelevantItems(list); + if (this.tabSorter != null) + { + try + { + Collections.sort(list, tabSorter); + } catch (Exception ingored) + { + } + } + } + + public void setTabSorter(Comparator tabSorter) + { + this.tabSorter = tabSorter; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DamageSourceGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DamageSourceGC.java new file mode 100644 index 00000000..5f294103 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DamageSourceGC.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.util.DamageSource; + +public class DamageSourceGC extends DamageSource +{ + + public static final DamageSourceGC spaceshipCrash = (DamageSourceGC) new DamageSourceGC("spaceship_crash").setDamageBypassesArmor().setExplosion(); + public static final DamageSourceGC oxygenSuffocation = (DamageSourceGC) new DamageSourceGC("oxygen_suffocation").setDamageBypassesArmor().setDamageIsAbsolute(); + public static final DamageSourceGC thermal = (DamageSourceGC) new DamageSourceGC("thermal").setDamageBypassesArmor().setDamageIsAbsolute(); + public static final DamageSourceGC acid = (DamageSourceGC) new DamageSourceGC("sulphuric_acid"); + public static final DamageSourceGC laserTurret = new DamageSourceGC("laser_turret"); + + public DamageSourceGC(String damageType) + { + super(damageType); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DelayTimer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DelayTimer.java new file mode 100644 index 00000000..48c0bbcb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/DelayTimer.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.world.World; + +public class DelayTimer +{ + + private long lastMark = Long.MIN_VALUE; + private long internalDelay = 1; + + public DelayTimer(long delay) + { + internalDelay = delay; + } + + public boolean markTimeIfDelay(World world) + { + return markTimeIfDelay(world, internalDelay); + } + + public boolean markTimeIfDelay(World world, long delay) + { + if (world == null) + { + return false; + } + + long currentTime = world.getTotalWorldTime(); + + if (currentTime < lastMark) + { + lastMark = currentTime; + return false; + } else if (lastMark + delay <= currentTime) + { + lastMark = currentTime; + return true; + } else + { + return false; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumColor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumColor.java new file mode 100644 index 00000000..165aa609 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumColor.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +/** + * Simple color enum for adding colors to in-game GUI strings of text. + * + * @author AidanBrady + */ +public enum EnumColor +{ + + BLACK("\u00a70", "black", new int[] + {0, 0, 0}), DARK_BLUE("\u00a71", "darkBlue", new int[] + {0, 0, 170}), DARK_GREEN("\u00a72", "darkGreen", new int[] + {0, 170, 0}), DARK_AQUA("\u00a73", "darkAqua", new int[] + {0, 170, 170}), DARK_RED("\u00a74", "darkRed", new int[] + {170, 0, 0}), PURPLE("\u00a75", "purple", new int[] + {170, 0, 170}), ORANGE("\u00a76", "orange", new int[] + {255, 170, 0}), GREY("\u00a77", "grey", new int[] + {170, 170, 170}), DARK_GREY("\u00a78", "darkGrey", new int[] + {85, 85, 85}), INDIGO("\u00a79", "indigo", new int[] + {85, 85, 255}), BRIGHT_GREEN("\u00a7a", "brightGreen", new int[] + {85, 255, 85}), AQUA("\u00a7b", "aqua", new int[] + {85, 255, 255}), RED("\u00a7c", "red", new int[] + {255, 85, 85}), PINK("\u00a7d", "pink", new int[] + {255, 85, 255}), YELLOW("\u00a7e", "yellow", new int[] + {255, 255, 85}), WHITE("\u00a7f", "white", new int[] + {255, 255, 255}); + + /** + * The color code that will be displayed + */ + private final String code; + + private final int[] rgbCode; + + /** + * A friendly name of the color. + */ + private final String unlocalizedName; + + EnumColor(String s, String n, int[] rgb) + { + this.code = s; + this.unlocalizedName = n; + this.rgbCode = rgb; + } + + public String getCode() + { + return code; + } + + public String getLocalizedName() + { + return GCCoreUtil.translate("color." + this.unlocalizedName); + } + + public String getName() + { + return this.code + this.getLocalizedName(); + } + + public float getColor(int index) + { + return this.rgbCode[index] / 255F; + } + + @Override + public String toString() + { + return this.code; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryBlock.java new file mode 100644 index 00000000..efbbe558 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryBlock.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +public enum EnumSortCategoryBlock +{ + PAD, TRANSMITTER, MACHINE, GENERAL, BRICKS, ORE, DECORATION, TREASURE, EGG, INGOT_BLOCK, STAIRS, SLABS, WALLS +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryItem.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryItem.java new file mode 100644 index 00000000..df523430 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/EnumSortCategoryItem.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +public enum EnumSortCategoryItem +{ + GEAR, ROCKET, CANISTER, GENERAL, KEYS, BUCKET, SCHEMATIC, ARMOR, PLATE, INGOT, TOOLS +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/FluidUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/FluidUtil.java new file mode 100644 index 00000000..73c75ac8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/FluidUtil.java @@ -0,0 +1,891 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidActionResult; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; + +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.items.ItemBucketGC; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; + +public class FluidUtil +{ + + private static boolean oldFluidIDMethod = true; + private static Class fluidStackClass = null; + private static Method getFluidMethod = null; + private static Field fluidIdField = null; + + /** + * This looks for any type of filled or partly filled container of "fuel" + * + * @param var4 The ItemStack being examined + * @return True if it's a container with "fuel" + */ + public static boolean isFuelContainerAny(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItem() == GCItems.fuelCanister && var4.getItemDamage() < var4.getMaxDamage(); + } + + if (var4.getItem() == GCItems.bucketFuel) + { + return true; + } + + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return liquid != null && FluidUtil.testFuel(FluidRegistry.getFluidName(liquid)); + } + + /** + * Tests whether the named liquid is fuel / fuelgc or rocket fuel from + * another mod, for compatibility (includes RotaryCraft Jet Fuel) + * + * @param name - which MUST be in lowercase, as always returned by + * FluidRegistry.getFluidName + * @return true if a type of recognised fuel, false if not + */ + public static boolean testFuel(String name) + { + if (name == null) + return false; + + if (name.equals("fuel") || name.equals("fuelgc") || name.equals("fuel_light")) + { + return true; + } + + if (name.contains("rocket") && name.contains("fuel")) // from EnderIO + { + return true; + } + + if (name.equals("rc jet fuel")) // from RotaryCraft + { + return true; + } + + if (name.startsWith("fuel")) + { + return !name.contains("dense") && !name.contains("heavy") && !name.contains("mixed") && !name.contains("gaseous"); + } + + return name.equals("refined_fuel"); // from Thermal Expansion + } + + public static boolean testOil(String name) + { + if (name == null) + return false; + + if (name.equals("oil") || name.equals("oilgc")) + { + return true; + } + + if (name.equals("crude_oil")) + { + return true; + } + + if (name.startsWith("oil")) + { + return !name.contains("dense") && !name.contains("residue"); + } + + return false; + } + + public static boolean isFuel(FluidStack fluid) + { + return fluid != null && testFuel(FluidRegistry.getFluidName(fluid)); + } + + public static boolean isOil(FluidStack fluid) + { + return fluid != null && testOil(FluidRegistry.getFluidName(fluid)); + } + + public static boolean isFluidFuzzy(FluidStack fluid, String name) + { + return fluid != null && fluid.getFluid() != null && fluid.getFluid().getName().startsWith(name); + } + + public static boolean isFluidStrict(FluidStack fluid, String name) + { + return fluid != null && fluid.getFluid() != null && fluid.getFluid().getName().equals(name); + } + + /** + * Fill Galacticraft entities (e.g. rockets, buggies) with Galacticraft + * fuel. For legacy reasons, accepts either "fuel" or "fuelgc". + * Auto-converts either one to the same type of fuel as is already + * contained. + * + * @param tank The tank + * @param liquid A FluidStack being the fuel offered + * @param doFill True if this is not a simulation / tank capacity test + * @return The amount filled + */ + public static int fillWithGCFuel(FluidTank tank, FluidStack liquid, boolean doFill) + { + if (liquid != null && testFuel(FluidRegistry.getFluidName(liquid))) + { + final FluidStack liquidInTank = tank.getFluid(); + + // If the tank is empty, fill it with the current type of GC fuel + if (liquidInTank == null) + { + return tank.fill(new FluidStack(GCFluids.fluidFuel, liquid.amount), doFill); + } + + // If the tank already contains something, fill it with more of the + // same + if (liquidInTank.amount < tank.getCapacity()) + { + return tank.fill(new FluidStack(liquidInTank, liquid.amount), doFill); + } + } + + return 0; + } + + /** + * This looks for any type of filled or partly filled container of "oil" or + * the alternative fluid "oilgc" which may be present if Buildcraft was + * installed on top of a GC world + * + * @param var4 The ItemStack being examined + * @return True if it's a container with "oil" + */ + public static boolean isOilContainerAny(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItem() == GCItems.oilCanister && var4.getItemDamage() < var4.getMaxDamage(); + } + + if (var4.getItem() == GCItems.bucketOil) + { + return true; + } + + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return isOil(liquid); + } + + /** + * This looks for any type of filled or partly filled container of "methane" + * gas + * + * @param var4 The ItemStack being examined + * @return True if it's a container with "methane" + */ + public static boolean isMethaneContainerAny(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItem() == AsteroidsItems.methaneCanister && var4.getItemDamage() < var4.getMaxDamage(); + } + + FluidStack stack = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return stack != null && stack.getFluid() != null && stack.getFluid().getName().toLowerCase().contains("methane"); + } + + /** + * This looks for any type of completely full container Used, for example, + * in canExtractItem() logic + * + * @param var4 The ItemStack being examined + * @return True if it's a full container + */ + public static boolean isFullContainer(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItemDamage() == 1; + } + + if (var4.getItem() instanceof ItemBucketGC) + { + return true; + } + + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return liquid != null; + } + + /** + * This tries to fill the given container (at inventory[slot]) with fluid + * from the specified tank If successful, it places the resulting filled + * container in inventory[slot]

+ * + * @param tank The tank to take the fluid from + * @param liquid The type of liquid in that tank (the calling method will + * normally have checked this already) + * @param inventory + * @param slot + * @param canisterType The type of canister to return, if it's a canister + * being filled (pre-matched with the liquid type) + */ + public static void tryFillContainer(FluidTank tank, FluidStack liquid, NonNullList inventory, int slot, Item canisterType) + { + ItemStack slotItem = inventory.get(slot); + if (liquid.amount <= 0 || slotItem.isEmpty()) + { + return; + } + + if (slotItem.getItem() instanceof ItemCanisterGeneric) + { + if (slotItem.getCount() != 1 || slotItem.getItem() != canisterType && slotItem.getItemDamage() != ItemCanisterGeneric.EMPTY) + { + return; + } + + final int used = Math.min(liquid.amount, slotItem.getItemDamage() - 1); + if (used > 0) + { + inventory.set(slot, new ItemStack(canisterType, 1, slotItem.getItemDamage() - used)); + tank.drain(used, true); + } + return; + } else if (slotItem.getCount() == 1) + { + ItemBucketGC bucketGC; + if (slotItem.getItem() == Items.BUCKET && liquid.amount >= Fluid.BUCKET_VOLUME && (bucketGC = ItemBucketGC.getBucketForFluid(liquid.getFluid())) != null) + { + inventory.set(slot, new ItemStack(bucketGC)); + tank.drain(Fluid.BUCKET_VOLUME, true); + return; + } + + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(inventory.get(slot)); + if (handler != null) + { + final int used = handler.fill(liquid, true); + if (used > 0) + { + inventory.set(slot, handler.getContainer()); + tank.drain(used, true); + } + } + } + } + + /** + * @param tank + * @param inventory + * @param slot + */ + public static void tryFillContainerFuel(FluidTank tank, NonNullList inventory, int slot) + { + if (FluidUtil.isValidContainer(inventory.get(slot))) + { + FluidStack liquid = tank.getFluid(); + + if (liquid != null && liquid.amount > 0) + { + String liquidname = liquid.getFluid().getName(); + + // Test for the GC fuels (though anything similarly named would + // also pass here) + if (liquidname.startsWith("fuel")) + { + // Make sure it is the current GC fuel + if (!liquidname.equals(GCFluids.fluidFuel.getName())) + { + liquid = new FluidStack(GCFluids.fluidFuel, liquid.amount); + } + + // But match any existing fuel fluid in the container + ItemStack stack = inventory.get(slot); + Item item = stack.isEmpty() ? null : stack.getItem(); + if (!(item instanceof ItemCanisterGeneric || item instanceof ItemBucketGC)) + { + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(stack); + if (handler != null) + { + FluidStack existingFluid = net.minecraftforge.fluids.FluidUtil.getFluidContained(stack); + if (existingFluid != null && !existingFluid.getFluid().getName().equals(GCFluids.fluidFuel.getName())) + { + liquid = new FluidStack(existingFluid, liquid.amount); + } + } + } + + FluidUtil.tryFillContainer(tank, liquid, inventory, slot, GCItems.fuelCanister); + } + } + } + } + + /** + * This tries to empty the container (at inventory[slot]) into the specified + * tank forcing the tank contents to Fluid: desiredLiquid even if the + * container had something different (useful for different types of fuel, + * for example). If successful, it replaces inventory[slot] with the + * corresponding empty container

+ * + * @param tank The tank to fill with the fluid + * @param desiredLiquid The type of liquid intended for that tank + * @param stacks + * @param slot + * @param amountOffered The amount in the container being offered + */ + public static void loadFromContainer(FluidTank tank, Fluid desiredLiquid, NonNullList stacks, int slot, int amountOffered) + { + ItemStack slotItem = stacks.get(slot); + + if (slotItem.getItem() instanceof ItemCanisterGeneric) + { + int originalDamage = slotItem.getItemDamage(); + int used = tank.fill(new FluidStack(desiredLiquid, ItemCanisterGeneric.EMPTY - originalDamage), true); + if (originalDamage + used >= ItemCanisterGeneric.EMPTY) + { + stacks.set(slot, new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY)); + } else + { + stacks.set(slot, new ItemStack(slotItem.getItem(), 1, originalDamage + used)); + } + } else if (slotItem.getItem() instanceof ItemBucketGC && amountOffered == Fluid.BUCKET_VOLUME) + { + ItemBucketGC bucket = (ItemBucketGC) slotItem.getItem(); + if (fluidsSame(bucket.accepts, desiredLiquid, true)) + { + tank.fill(new FluidStack(desiredLiquid, amountOffered), true); + stacks.set(slot, new ItemStack(Items.BUCKET)); + } + } else + { + if (tank.getFluid() == null || amountOffered <= tank.getCapacity() - tank.getFluid().amount) + { + // Now deal with the resulting container + if (FluidUtil.isFilledContainer(slotItem)) + { + final int itemCount = slotItem.getCount(); + if (FluidUtil.isBucket(slotItem)) + { + int used = tank.fill(new FluidStack(desiredLiquid, amountOffered), true); + if (itemCount > 1) + { + tank.fill(new FluidStack(desiredLiquid, (itemCount - 1) * Fluid.BUCKET_VOLUME), true); + } + stacks.set(slot, new ItemStack(Items.BUCKET, itemCount)); + return; + } else if (itemCount == 1) + { + IFluidHandlerItem handlerItem = net.minecraftforge.fluids.FluidUtil.getFluidHandler(slotItem); + if (handlerItem != null) + { + int used = tank.fill(new FluidStack(desiredLiquid, amountOffered), false); + FluidStack given = handlerItem.drain(used, true); + if (given != null) + { + tank.fill(new FluidStack(desiredLiquid, given.amount), true); + stacks.set(slot, handlerItem.getContainer()); + } + return; + } + // Fallback basic treatment + ItemStack emptyStack = FluidUtil.getUsedContainer(slotItem); + tank.fill(new FluidStack(desiredLiquid, FluidUtil.getContainerCapacity(slotItem)), true); + stacks.set(slot, emptyStack); + return; + } + } + } + } + } + + /** + * Tests for any type of container with some space in it It can be either an + * empty container, or a Galacticraft canister of the appropriate type, + * either empty or at least with some capacity remaining Will return true + * for any type of empty Forge fluid container including vanilla buckets + * + * @param var4 + * @param canisterType + * @return + */ + public static boolean isPartialContainer(ItemStack var4, Item canisterType) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItemDamage() == ItemCanisterGeneric.EMPTY || (var4.getItem() == canisterType && var4.getItemDamage() > 1); + } + + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(var4); + FluidStack containedFluid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + + if (handler != null) + { + if (containedFluid == null) + { + return true; + } + + // Check that there is at least some space in container + containedFluid = containedFluid.copy(); + containedFluid.amount = 1; + if (handler.fill(containedFluid, false) > 0) + { + return true; + } + } + + return false; + } + + /** + * Tests for any empty container which can accept the specified fluid Either + * Galacticraft canisters or Forge containers + * + * @param var4 + * @param targetFluid + * @return + */ + public static boolean isEmptyContainerFor(ItemStack var4, FluidStack targetFluid) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + if (var4.getItemDamage() == ItemCanisterGeneric.EMPTY) + { + return true; + } + if (var4.getItemDamage() == 1) + { + return false; + } + + return fluidsSame(FluidUtil.getFluidContained(var4), targetFluid); + } + + if (isEmptyContainer(var4)) + { + return true; + } + + return fluidsSame(net.minecraftforge.fluids.FluidUtil.getFluidContained(var4), targetFluid); + } + + /** + * Returns the amount of fluid this container can provide in its current + * state (Similar to Forge's FluidUtil.getFluidContained()) + * + * @param container + * @return + */ + public static int getContainerCapacity(ItemStack container) + { + if (container.getItem() instanceof ItemCanisterGeneric) + { + return container.getItemDamage() - 1; + } + if (!container.isEmpty()) + { + container = container.copy(); + container.setCount(1); + IFluidHandlerItem fluidHandler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(container); + if (fluidHandler != null) + { + FluidStack drain = fluidHandler.drain(Integer.MAX_VALUE, false); + return drain == null ? 0 : drain.amount; + } + } + return 0; + } + + /** + * @param fs1 First FluidStack to compare + * @param fs2 Second FluidStack to compare + * @return True if the FluidStacks are both not null and the same fluid type + * False otherwise + */ + public static boolean fluidsSame(FluidStack fs1, FluidStack fs2) + { + if (fs1 == null || fs2 == null) + { + return false; + } + Fluid f1 = fs1.getFluid(); + Fluid f2 = fs2.getFluid(); + if (f1 == null || f2 == null || f1.getName() == null) + { + return false; + } + return f1.getName().equals(f2.getName()); + } + + public static boolean fluidsSame(Fluid f1, Fluid f2, boolean fuzzy) + { + if (f1 == null || f2 == null || f1.getName() == null) + { + return false; + } + if (fuzzy) + { + if (f1.getName().startsWith("fuel")) + { + return testFuel(f2.getName()); + } + if (f1.getName().startsWith("oil")) + { + return f2.getName().startsWith("oil"); + } + if (f1.getName().startsWith("water")) + { + return f2.getName().startsWith("water"); + } + } + return f1.getName().equals(f2.getName()); + } + + public static boolean fluidsSame(Fluid f1, String name2, boolean fuzzy) + { + if (f1 == null || name2 == null || f1.getName() == null) + { + return false; + } + if (fuzzy) + { + if (name2.equals("fuel")) + { + return testFuel(f1.getName()); + } + + return f1.getName().startsWith(name2); + } + return f1.getName().equals(name2); + } + + /** + * Test for any completely empty container of either type Used, for example, + * in canExtractItem() logic + * + * @param var4 The ItemStack being tested + * @return True if the container is empty + */ + public static boolean isEmptyContainer(ItemStack var4) + { + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItemDamage() == ItemCanisterGeneric.EMPTY; + } + + if (var4.getItem() == Items.BUCKET) + { + return true; + } + + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(var4); + FluidStack containedFluid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return handler != null && (containedFluid == null || containedFluid.amount == 0); + } + + /** + * Test for any empty specialist gas container For future use, e.g. for + * compatibility with Mekanism tank items + * + * @param var4 The ItemStack being tested + * @return True if the container is empty + */ + public static boolean isEmptyGasContainer(ItemStack var4) + { + return false; + } + + /** + * Test for any container with some level of contents Used, for example, in + * shift-clicking items into input item slots + * + * @param var4 The ItemStack being tested + * @return True if the container contains something + */ + public static boolean isFilledContainer(ItemStack var4) + { + if (net.minecraftforge.fluids.FluidUtil.getFluidHandler(var4) == null) + { + return false; + } + if (var4.getItem() instanceof ItemCanisterGeneric) + { + return var4.getItemDamage() < ItemCanisterGeneric.EMPTY; + } + return net.minecraftforge.fluids.FluidUtil.getFluidContained(var4) != null; + } + + /** + * Test for any container with water (vanilla or Forge items only, + * Galacticraft does not have a water container) + * + * @param var4 The ItemStack being tested + * @return True if the container contains water + */ + public static boolean isWaterContainer(ItemStack var4) + { + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(var4); + return liquid != null && liquid.getFluid() != null && liquid.getFluid().getName().equals("water"); + } + + public static FluidStack getFluidContained(ItemStack container) + { + if (container == null) + { + return null; + } + + if (container.getItem() instanceof ItemCanisterGeneric) + { + ItemCanisterGeneric canister = (ItemCanisterGeneric) container.getItem(); + return canister.getFluid(container); + } + + if (container.getItem() instanceof ItemBucketGC) + { + return new FluidStack(((ItemBucketGC) container.getItem()).accepts, Fluid.BUCKET_VOLUME); + } + + return net.minecraftforge.fluids.FluidUtil.getFluidContained(container); + } + + /** + * Test for any container type at all Used, for example, in + * isItemValidForSlot() logic + * + * @param slotItem + * @return True if it is a container; False if it is null or not a container + */ + public static boolean isValidContainer(ItemStack slotItem) + { + return slotItem != null && slotItem.getCount() == 1 + && (slotItem.getItem() instanceof ItemCanisterGeneric || slotItem.getItem() instanceof ItemBucketGC || net.minecraftforge.fluids.FluidUtil.getFluidHandler(slotItem) != null); + } + + /** + * Returns the used (empty) container, for example an empty bucket Used, for + * example, in isItemValidForSlot() logic + * + * @param container + * @return True if it is a container; False if it is null or not a container + */ + public static ItemStack getUsedContainer(ItemStack container) + { + IFluidHandlerItem handler = net.minecraftforge.fluids.FluidUtil.getFluidHandler(container); + if (FluidUtil.isBucket(container) && handler != null) + { + return new ItemStack(Items.BUCKET, container.getCount()); + } else if (handler != null) + { + handler.drain(Integer.MAX_VALUE, true); + return handler.getContainer(); + } else + { + container.shrink(1); + + if (!container.isEmpty()) + { + return ItemStack.EMPTY; + } + + return container; + } + } + + @SideOnly(Side.CLIENT) + public static boolean isInsideOfFluid(Entity entity, Fluid fluid) + { + double d0 = entity.posY + entity.getEyeHeight(); + int i = MathHelper.floor(entity.posX); + int j = MathHelper.floor(MathHelper.floor(d0)); + int k = MathHelper.floor(entity.posZ); + BlockPos pos = new BlockPos(i, j, k); + Block block = entity.world.getBlockState(pos).getBlock(); + + if (block != null && block instanceof IFluidBlock && ((IFluidBlock) block).getFluid() != null && ((IFluidBlock) block).getFluid().getName().equals(fluid.getName())) + { + double filled = ((IFluidBlock) block).getFilledPercentage(entity.world, pos); + if (filled < 0) + { + filled *= -1; + return d0 > j + (1 - filled); + } else + { + return d0 < j + filled; + } + } else + { + return false; + } + } + + public static boolean isBucket(ItemStack container) + { + if (container == null) + { + return false; + } + + IFluidHandlerItem handlerItem = net.minecraftforge.fluids.FluidUtil.getFluidHandler(container); + if (handlerItem != null) + { + if (container.getItem() == Items.BUCKET) + { + return true; + } + + if (handlerItem.getContainer().getItem() == Items.BUCKET) + { + return true; + } + } + + return false; + } + + @Nonnull + public static FluidActionResult interactWithFluidHandler(@Nonnull ItemStack container, IFluidHandler fluidHandler, EntityPlayer player) + { + if (container.isEmpty() || fluidHandler == null || player == null) + { + return FluidActionResult.FAILURE; + } + + // -----------Special code for canisters onto FluidTanks------------ + // This is NOT strictly necessary, as our 1.11 code for canisters + // implements IFluidHandler 100% correctly + // + // But our code offers three improvements over Forge: + // 1: Performance :) + // 2: Tries to empty partial canister BEFORE filling it, that seems more + // natural + // 3: Forge's behaviour in Creative Mode with partial canisters is not a + // bug, but it still feels wrong + // + if (container.getItem() instanceof ItemCanisterGeneric) + { + ItemStack result; + if ((result = FluidUtil.tryEmptyCanister(container, fluidHandler, player.capabilities.isCreativeMode)) != ItemStack.EMPTY + || (result = FluidUtil.tryFillCanister(container, fluidHandler, player.capabilities.isCreativeMode)) != ItemStack.EMPTY) + { + // send inventory updates to client + if (player.inventoryContainer != null) + { + player.inventoryContainer.detectAndSendChanges(); + } + return new FluidActionResult(result); + } + + return FluidActionResult.FAILURE; + } + + // Forge's UniversalBucket appears to be non-functional, currently, for + // FILLING modded buckets + // Try to fill an empty vanilla bucket: + if (container.getItem() == Items.BUCKET) + { + ItemStack result = ItemBucketGC.fillBucketFrom(fluidHandler); + if (result != null) + { + // Handle stacks of buckets: insert the filled bucket into + // another inventory slot or drop it + if (container.getCount() > 1) + { + ItemStack remainder = ItemHandlerHelper.insertItemStacked(new PlayerMainInvWrapper(player.inventory), result, false); + if (!remainder.isEmpty() && player != null) + { + ItemHandlerHelper.giveItemToPlayer(player, remainder); + } + result = container.copy(); + result.shrink(1); + } + return new FluidActionResult(result); + } + // If failure, fall through to other Forge methods + } + + // ---------the rest of this is standard Forge code from + // interactWithFluidHandler()--------- + // -----------(but without the InvWrapper bug which could put fluids in + // armor slots!)------- + IItemHandler playerInventory = new PlayerMainInvWrapper(player.inventory); + + FluidActionResult fillResult = net.minecraftforge.fluids.FluidUtil.tryFillContainerAndStow(container, fluidHandler, playerInventory, Integer.MAX_VALUE, player); + if (fillResult.isSuccess()) + { + return fillResult; + } else + { + return net.minecraftforge.fluids.FluidUtil.tryEmptyContainerAndStow(container, fluidHandler, playerInventory, Integer.MAX_VALUE, player); + } + } + + private static ItemStack tryFillCanister(ItemStack canister, IFluidHandler tank, boolean isCreativeMode) + { + int currCapacity = canister.getItemDamage() - 1; + if (currCapacity <= 0) + { + return ItemStack.EMPTY; + } + FluidStack liquid = tank.drain(currCapacity, false); + int transferred = ((ItemCanisterGeneric) canister.getItem()).fill(canister, liquid, !isCreativeMode); + if (transferred > 0) + { + liquid = tank.drain(transferred, true); + return canister; + } + return ItemStack.EMPTY; + } + + private static ItemStack tryEmptyCanister(ItemStack canister, IFluidHandler tank, boolean isCreativeMode) + { + int currContents = ItemCanisterGeneric.EMPTY - canister.getItemDamage(); + if (currContents <= 0) + { + return ItemStack.EMPTY; + } + FluidStack liquid = ((ItemCanisterGeneric) canister.getItem()).drain(canister, currContents, false); + int transferred = tank.fill(liquid, true); + if (transferred > 0) + { + ((ItemCanisterGeneric) canister.getItem()).drain(canister, transferred, !isCreativeMode); + return canister; + } + return ItemStack.EMPTY; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCCoreUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCCoreUtil.java new file mode 100644 index 00000000..76ff5df3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCCoreUtil.java @@ -0,0 +1,442 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.resources.Language; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.launchwrapper.Launch; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; + +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.registry.EntityRegistry; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.inventory.ContainerBuggy; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; + +/** + * Starting with Release 4.1.0 this class will be removed and all methods moved + * to a dedicated utility class. At this time all planned utility classes will + * be internal and non-accessible. + * + */ +@ForRemoval(deadline = "4.1.0") +public class GCCoreUtil +{ + + public static int nextID = 0; + private static boolean deobfuscated; + private static String lastLang = ""; + public static boolean langDisable; + private static MinecraftServer serverCached; + + static + { + try + { + deobfuscated = Launch.classLoader.getClassBytes("net.minecraft.world.World") != null; + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + public static boolean isDeobfuscated() + { + return deobfuscated; + } + + public static void openBuggyInv(EntityPlayerMP player, IInventory buggyInv, int type) + { + player.getNextWindowId(); + player.closeContainer(); + int id = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_PARACHEST_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] {id, 0, 0}), player); + player.openContainer = new ContainerBuggy(player.inventory, buggyInv, type, player); + player.openContainer.windowId = id; + player.openContainer.addListener(player); + } + + public static void openParachestInv(EntityPlayerMP player, EntityLanderBase landerInv) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_PARACHEST_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] {windowId, 1, landerInv.getEntityId()}), player); + player.openContainer = new ContainerParaChest(player.inventory, landerInv, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } + + public static int nextInternalID() + { + GCCoreUtil.nextID++; + return GCCoreUtil.nextID - 1; + } + + public static void registerGalacticraftCreature(Class clazz, String name, int back, int fore) + { + registerGalacticraftNonMobEntity(clazz, name, 80, 3, true); + int nextEggID = getNextValidID(); + if (nextEggID < 65536) + { + ResourceLocation resourcelocation = new ResourceLocation(Constants.MOD_ID_CORE, name); + EntityList.ENTITY_EGGS.put(resourcelocation, new EntityList.EntityEggInfo(resourcelocation, back, fore)); + } + } + + public static int getNextValidID() + { + int eggID = 255; + + // Non-global entity IDs - for egg ID purposes - can be greater than 255 + // The spawn egg will have this metadata. Metadata up to 65535 is + // acceptable (see potions). + + do + { + eggID++; + } while (net.minecraftforge.registries.GameData.getEntityRegistry().getValue(eggID) != null); + + return eggID; + } + + public static void registerGalacticraftNonMobEntity(Class var0, String var1, int trackingDistance, int updateFreq, boolean sendVel) + { + ResourceLocation registryName = new ResourceLocation(Constants.MOD_ID_CORE, var1); + EntityRegistry.registerModEntity(registryName, var0, var1, nextInternalID(), GalacticraftCore.instance, trackingDistance, updateFreq, sendVel); + } + + public static void registerGalacticraftItem(String key, Item item) + { + registerGalacticraftItem(key, new ItemStack(item)); + } + + public static void registerGalacticraftItem(String key, Item item, int metadata) + { + registerGalacticraftItem(key, new ItemStack(item, 1, metadata)); + } + + public static void registerGalacticraftItem(String key, ItemStack stack) + { + GalacticraftCore.itemList.add(stack); + } + + public static void registerGalacticraftBlock(String key, Block block) + { + GalacticraftCore.blocksList.add(block); + } + + public static String translate(String key) + { + String result = I18n.translateToLocal(key); + int comment = result.indexOf('#'); + String ret = (comment > 0) ? result.substring(0, comment).trim() : result; + for (int i = 0; i < key.length(); ++i) + { + Character c = key.charAt(i); + if (Character.isUpperCase(c)) + { + System.err.println(ret); + } + } + return ret; + } + + public static List translateWithSplit(String key) + { + String translated = translate(key); + int comment = translated.indexOf('#'); + translated = (comment > 0) ? translated.substring(0, comment).trim() : translated; + return Arrays.asList(translated.split("\\$")); + } + + public static String translateWithFormat(String key, Object... values) + { + String result = I18n.translateToLocalFormatted(key, values); + int comment = result.indexOf('#'); + String ret = (comment > 0) ? result.substring(0, comment).trim() : result; + for (int i = 0; i < key.length(); ++i) + { + Character c = key.charAt(i); + if (Character.isUpperCase(c)) + { + System.err.println(ret); + } + } + return ret; + } + + public static void drawStringRightAligned(String string, int x, int y, int color, FontRenderer fontRendererObj) + { + fontRendererObj.drawString(string, x - fontRendererObj.getStringWidth(string), y, color); + } + + public static void drawStringCentered(String string, int x, int y, int color, FontRenderer fontRendererObj) + { + fontRendererObj.drawString(string, x - fontRendererObj.getStringWidth(string) / 2, y, color); + } + + public static String lowerCaseNoun(String string) + { + Language l = Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage(); + if (l.getLanguageCode().equals("de_DE")) + { + return string; + } + return GCCoreUtil.translate(string).toLowerCase(); + } + + public static int getDimensionID(World world) + { + return world.provider.getDimension(); + } + + public static int getDimensionID(WorldProvider provider) + { + return provider.getDimension(); + } + + public static int getDimensionID(TileEntity tileEntity) + { + return tileEntity.getWorld().provider.getDimension(); + } + + public static WorldServer[] getWorldServerList() + { + MinecraftServer server = getServer(); + if (server != null) + { + return server.worlds; + } + return new WorldServer[0]; + } + + public static WorldServer[] getWorldServerList(World world) + { + if (world instanceof WorldServer) + { + return ((WorldServer) world).getMinecraftServer().worlds; + } + return GCCoreUtil.getWorldServerList(); + } + + public static void sendToAllDimensions(EnumSimplePacket packetType, Object[] data) + { + for (WorldServer world : GCCoreUtil.getWorldServerList()) + { + int id = getDimensionID(world); + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(packetType, id, data), id); + } + } + + public static void sendToAllAround(PacketSimple packet, World world, int dimID, BlockPos pos, double radius) + { + double x = pos.getX() + 0.5D; + double y = pos.getY() + 0.5D; + double z = pos.getZ() + 0.5D; + double r2 = radius * radius; + for (EntityPlayer playerMP : world.playerEntities) + { + if (playerMP.dimension == dimID) + { + final double dx = x - playerMP.posX; + final double dy = y - playerMP.posY; + final double dz = z - playerMP.posZ; + + if (dx * dx + dy * dy + dz * dz < r2) + { + GalacticraftCore.packetPipeline.sendTo(packet, (EntityPlayerMP) playerMP); + } + } + } + } + + /** + * Call this to obtain a seeded random which will be the SAME on client and + * server. This means EntityItems won't jump position, for example. + */ + public static Random getRandom(BlockPos pos) + { + long blockSeed = ((pos.getY() << 28) + pos.getX() + 30000000 << 28) + pos.getZ() + 30000000; + return new Random(blockSeed); + } + + /** + * Returns the angle of the compass (0 - 360 degrees) needed to reach the + * given position offset + */ + public static float getAngleForRelativePosition(double nearestX, double nearestZ) + { + return ((float) MathHelper.atan2(nearestX, -nearestZ) * Constants.RADIANS_TO_DEGREES + 360F) % 360F; + } + + /** + * Custom getEffectiveSide method, covering more cases than FMLCommonHandler + */ + public static Side getEffectiveSide() + { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER || Thread.currentThread().getName().startsWith("Netty Epoll Server IO")) + { + return Side.SERVER; + } + + return Side.CLIENT; + } + + public static MinecraftServer getServer() + { + MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); + if (server == null) + { + // This may be called from a different thread e.g. MapUtil + // If on a different thread, + // FMLCommonHandler.instance().getMinecraftServerInstance() can + // return null on LAN servers + // (I think because the FMLCommonHandler wrongly picks the client + // proxy if it's not in the Integrated Server thread) + return serverCached; + } + return server; + } + + public static ItemStack getMatchingItemEitherHand(EntityPlayer player, Item item) + { + ItemStack stack = player.inventory.getStackInSlot(player.inventory.currentItem); + if (stack != null && stack.getItem() == item) + { + return stack; + } + stack = player.inventory.offHandInventory.get(0); + if (stack != null && stack.getItem() == item) + { + return stack; + } + return null; + } + + // For performance + public static List getPositionsAdjoining(BlockPos pos) + { + LinkedList result = new LinkedList<>(); + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + if (y > 0) + result.add(new BlockPos(x, y - 1, z)); + if (y < 255) + result.add(new BlockPos(x, y + 1, z)); + result.add(new BlockPos(x, y, z - 1)); + result.add(new BlockPos(x, y, z + 1)); + result.add(new BlockPos(x - 1, y, z)); + result.add(new BlockPos(x + 1, y, z)); + return result; + } + + // For performance + public static void getPositionsAdjoining(int x, int y, int z, List result) + { + result.clear(); + if (y > 0) + result.add(new BlockPos(x, y - 1, z)); + if (y < 255) + result.add(new BlockPos(x, y + 1, z)); + result.add(new BlockPos(x, y, z - 1)); + result.add(new BlockPos(x, y, z + 1)); + result.add(new BlockPos(x - 1, y, z)); + result.add(new BlockPos(x + 1, y, z)); + } + + public static void getPositionsAdjoiningLoaded(int x, int y, int z, List result, World world) + { + result.clear(); + if (y > 0) + result.add(new BlockPos(x, y - 1, z)); + if (y < 255) + result.add(new BlockPos(x, y + 1, z)); + BlockPos pos = new BlockPos(x, y, z - 1); + if ((z & 15) > 0 || world.isBlockLoaded(pos, false)) + result.add(pos); + pos = new BlockPos(x, y, z + 1); + if ((z & 15) < 15 || world.isBlockLoaded(pos, false)) + result.add(pos); + pos = new BlockPos(x - 1, y, z); + if ((x & 15) > 0 || world.isBlockLoaded(pos, false)) + result.add(pos); + pos = new BlockPos(x + 1, y, z); + if ((x & 15) < 15 || world.isBlockLoaded(pos, false)) + result.add(pos); + } + + // For performance + public static void getPositionsAdjoining(BlockPos pos, List result) + { + result.clear(); + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + if (y > 0) + result.add(new BlockPos(x, y - 1, z)); + if (y < 255) + result.add(new BlockPos(x, y + 1, z)); + result.add(new BlockPos(x, y, z - 1)); + result.add(new BlockPos(x, y, z + 1)); + result.add(new BlockPos(x - 1, y, z)); + result.add(new BlockPos(x + 1, y, z)); + } + + public static void spawnItem(World world, BlockPos pos, ItemStack stack) + { + float var = 0.7F; + while (!stack.isEmpty()) + { + double dx = world.rand.nextFloat() * var + (1.0F - var) * 0.5D; + double dy = world.rand.nextFloat() * var + (1.0F - var) * 0.5D; + double dz = world.rand.nextFloat() * var + (1.0F - var) * 0.5D; + EntityItem entityitem = new EntityItem(world, pos.getX() + dx, pos.getY() + dy, pos.getZ() + dz, stack.splitStack(world.rand.nextInt(21) + 10)); + + entityitem.setPickupDelay(10); + + world.spawnEntity(entityitem); + } + } + + public static void notifyStarted(MinecraftServer server) + { + serverCached = server; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCLog.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCLog.java new file mode 100644 index 00000000..ce55e32a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GCLog.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@Deprecated +@ForRemoval(deadline = "4.1.0") +public class GCLog +{ + + private static Logger log = LogManager.getFormatterLogger("Deprecated-GCLog"); + + public static void info(String message) + { + log.info(message); + } + + public static void info(String message, Object... args) + { + log.info(message, args); + } + + public static void error(String message) + { + log.error(message); + } + + public static void error(Exception e, String message) + { + log.error(message, e); + } + + public static void debug(String message) + { + if (ConfigManagerCore.enableDebug) + { + log.debug(message); + } + } + + public static void exception(Exception e) + { + log.catching(e); + } + + public static void severe(String message) + { + error(message); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GalacticLog.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GalacticLog.java new file mode 100644 index 00000000..52e65010 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/GalacticLog.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.google.common.collect.ImmutableList; + +import lombok.Getter; +//import lombok.Getter; +import org.apache.commons.lang3.SystemUtils; +import org.apache.commons.lang3.text.WordUtils; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class GalacticLog +{ + + @Getter + private final Logger logger; + + public GalacticLog(Object modClass) + { + this.logger = LogManager.getLogger(modClass.getClass().getSimpleName()); + } + + public void catching(Throwable t) + { + this.logger.catching(t); + } + + public void debug(String msg, Object... params) + { + if (ConfigManagerCore.enableDebug || GCCoreUtil.isDeobfuscated()) + { + this.logger.info("[GCDebug] " + msg, params); + } + } + + public void error(String msg, Object... params) + { + this.logger.error(msg, params); + } + + public void error(Throwable t, String msg) + { + this.logger.error(msg, t); + } + + public void fatal(String msg, Object... params) + { + this.logger.fatal(msg, params); + } + + public void info(String msg, Object... params) + { + this.logger.info(msg, params); + } + + public void log(Level level, String msg, Object... params) + { + this.logger.log(level, msg, params); + } + + public void trace(String msg, Object... params) + { + this.logger.trace(msg, params); + } + + public void warn(String msg, Object... params) + { + this.logger.warn(msg, params); + } + + public void warn(Throwable t, String msg, Object... params) + { + this.logger.warn(msg, params); + this.logger.catching(t); + } + + public void noticableWarning(String... strings) + { + noticableWarning(true, ImmutableList.copyOf(strings)); + } + + public void noticableWarning(Throwable t, String... strings) + { + noticableWarning(true, ImmutableList.copyOf(strings), t.getStackTrace()); + } + + public void noticableWarningNoTrace(String... strings) + { + noticableWarning(false, ImmutableList.copyOf(strings)); + } + + private void noticableWarning(boolean trace, List lines) + { + this.noticableWarning(trace, lines, Thread.currentThread().getStackTrace()); + } + + private void noticableWarning(boolean trace, List lines, StackTraceElement[] elements) + { + this.error("********************************************************************************"); + for (final String line : lines) + { + for (final String subline : wrapString(line, 78, false, new ArrayList<>())) + { + this.error("* " + subline); + } + } + if (trace) + { + final StackTraceElement[] stackTrace = elements; + for (int i = 2; i < 8 && i < stackTrace.length; i++) + { + this.warn("* at {}{}", stackTrace[i].toString(), i == 7 ? "..." : ""); + } + } + this.error("********************************************************************************"); + } + + private static List wrapString(String string, int lnLength, boolean wrapLongWords, List list) + { + final String lines[] = WordUtils.wrap(string, lnLength, null, wrapLongWords).split(SystemUtils.LINE_SEPARATOR); + Collections.addAll(list, lines); + return list; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/I18nUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/I18nUtil.java new file mode 100644 index 00000000..2e6bf953 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/I18nUtil.java @@ -0,0 +1,101 @@ +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Locale; +import java.util.Objects; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.block.Block; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.registries.IForgeRegistryEntry; + +@ParametersAreNonnullByDefault +public final class I18nUtil +{ + + public static final I18nUtil instance = new I18nUtil(); + + public String getKey(String prefix, ResourceLocation name) + { + return prefix + "." + name.getNamespace() + "." + name.getPath(); + } + + public String getKey(IForgeRegistryEntry object, String key) + { + String prefix = getPrefixFor(object); + ResourceLocation name = Objects.requireNonNull(object.getRegistryName()); + return prefix + "." + name.getNamespace() + "." + name.getPath() + "." + key; + } + + /** + * Check whether or not the key is in the translation file. You do not need to call this in most + * cases, translation attempts just return the key if it is not found. + * + * @param key The key, checked as-is + * @return If the key exists + */ + public boolean hasKey(String key) + { + return I18n.hasKey(key); + } + + public String translate(String key, Object... params) + { + if (!FMLCommonHandler.instance().getSide().isClient()) + { + // Go ahead and translate text with deprecated I18n on the server for now... + return net.minecraft.util.text.translation.I18n.translateToLocalFormatted(key, params); + } + + return I18n.format(key, params); + } + + public String translatedName(Block block) + { + return translate(block.getTranslationKey() + ".name"); + } + + public String translatedName(Item item) + { + return translate(item.getTranslationKey() + ".name"); + } + + public String translatedName(ItemStack stack) + { + return translate(stack.getTranslationKey() + ".name"); + } + + /** + * Translates the text with key "(prefix).registry_name.key". This uses the object's registry + * name namespace instead of {@link #modId}. Prefix is determined by the object's type. + * + * @param object An {@link IForgeRegistryEntry} of some kind, such as a {@link Block} or {@link + * Item} + * @param key Key suffix + * @param params Optional parameters to format into translation + * @return Translation result, or {@code key} if the key is not found + */ + public String subText(IForgeRegistryEntry object, String key, Object... params) + { + return translate(getKey(object, key), params); + } + + public String miscText(String key, Object... params) + { + return translate("misc", key, params); + } + + private String getPrefixFor(IForgeRegistryEntry object) + { + if (object instanceof Item) + return "item"; + if (object instanceof Block) + return "tile"; + return object.getClass().getName().toLowerCase(Locale.ROOT); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ItemUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ItemUtil.java new file mode 100644 index 00000000..08dca7eb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/ItemUtil.java @@ -0,0 +1,330 @@ +package micdoodle8.mods.galacticraft.core.util; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.oredict.OreDictionary; + +import com.google.common.base.Strings; +import com.google.common.primitives.Ints; + +public final class ItemUtil +{ + // Dictionary prefix's + public static final String BLOCK = "block"; + public static final String ORE = "ore"; + public static final String CLUSTER = "cluster"; + public static final String DUST = "dust"; + public static final String DUST_SMALL = "dustSmall"; + public static final String DUST_TINY = "dustTiny"; + public static final String INGOT = "ingot"; + public static final String PLATE = "plate"; + public static final String COIN = "coin"; + public static final String NUGGET = "nugget"; + public static final String LOG = "log"; + public static final String GEM = "gem"; + public static final String COVER = "cover"; + public static final String ROD = "rod"; + public static final String COMPRESSED = "compressed"; + public static final String CROP = "crop"; + private static final OreDictProxy PROXY = new OreDictProxy(); + + //@noformat + public static final String[] ALL_TYPES = { + BLOCK, ORE, CLUSTER, DUST, DUST_SMALL, DUST_TINY, + INGOT, PLATE, COIN, NUGGET, LOG, GEM, COVER, ROD, + COMPRESSED, CROP + }; + //@format + + public static boolean isPlayerHoldingSomething(EntityPlayer player) + { + return !player.getHeldItemMainhand().isEmpty() || !player.getHeldItemOffhand().isEmpty(); + } + + public static ItemStack getHeldStack(EntityPlayer player) + { + if (isPlayerHoldingSomething(player)) + { + ItemStack stack = player.getHeldItemMainhand(); + if (stack.isEmpty()) + { + stack = player.getHeldItemOffhand(); + } + return stack; + } + return ItemStack.EMPTY; + } + + public static ItemStack cloneStack(Item item) + { + return cloneStack(item, 1); + } + + public static ItemStack cloneStack(Block block) + { + return cloneStack(block, 1); + } + + public static ItemStack cloneStack(Item item, int stackSize) + { + if (item == null) + { + return ItemStack.EMPTY; + } + return new ItemStack(item, stackSize); + } + + public static ItemStack cloneStack(Block block, int stackSize) + { + if (block == null) + { + return ItemStack.EMPTY; + } + return new ItemStack(block, stackSize); + } + + public static ItemStack cloneStack(ItemStack stack, int stackSize) + { + if (stack.isEmpty()) + { + return ItemStack.EMPTY; + } + ItemStack retStack = stack.copy(); + retStack.setCount(stackSize); + return retStack; + } + + public static ItemStack cloneStack(ItemStack stack) + { + return stack.isEmpty() ? ItemStack.EMPTY : stack.copy(); + } + + public static ItemStack readItemStackFromNBT(NBTTagCompound nbt) + { + ItemStack stack = new ItemStack(Item.getItemById(nbt.getShort("id"))); + stack.setCount(nbt.getInteger("Count")); + stack.setItemDamage(Math.max(0, nbt.getShort("Damage"))); + if (nbt.hasKey("tag", 10)) + { + stack.setTagCompound(nbt.getCompoundTag("tag")); + } + return stack; + } + + public static NBTTagCompound writeItemStackToNBT(ItemStack stack, NBTTagCompound nbt) + { + nbt.setShort("id", (short) Item.getIdFromItem(stack.getItem())); + nbt.setInteger("Count", stack.getCount()); + nbt.setShort("Damage", (short) getItemDamage(stack)); + if (stack.hasTagCompound()) + { + nbt.setTag("tag", stack.getTagCompound()); + } + return nbt; + } + + public static NBTTagCompound writeItemStackToNBT(ItemStack stack, int amount, NBTTagCompound nbt) + { + nbt.setShort("id", (short) Item.getIdFromItem(stack.getItem())); + nbt.setInteger("Count", amount); + nbt.setShort("Damage", (short) getItemDamage(stack)); + if (stack.hasTagCompound()) + { + nbt.setTag("tag", stack.getTagCompound()); + } + return nbt; + } + + public static String getNameFromItemStack(ItemStack stack) + { + if (stack.isEmpty() || !stack.hasTagCompound() || !stack.getTagCompound().hasKey("display")) + { + return ""; + } + return stack.getTagCompound().getCompoundTag("display").getString("Name"); + } + + public static int getItemDamage(ItemStack stack) + { + return Items.DIAMOND.getMetadata(stack); + } + + public static boolean hasOreDictSuffix(ItemStack stack, String oreDictSuffix) + { + return PROXY.getOreName(stack).toLowerCase().endsWith(oreDictSuffix.toLowerCase()); + } + + public static ItemStack getOre(String oreName) + { + return getOre(oreName, 1); + } + + public static ItemStack getOre(String oreName, int amount) + { + return PROXY.getOre(oreName, amount); + } + + public static String getOreName(ItemStack stack) + { + return PROXY.getOreName(stack); + } + + public static boolean isOreIDEqual(ItemStack stack, int oreID) + { + return PROXY.isOreIDEqual(stack, oreID); + } + + public static boolean isOreNameEqual(ItemStack stack, String oreName) + { + return PROXY.isOreNameEqual(stack, oreName); + } + + public static boolean oreNameExists(String oreName) + { + return PROXY.oreNameExists(oreName); + } + + public static boolean hasOreName(ItemStack stack) + { + return !getOreName(stack).equals("Unknown"); + } + + public static boolean isBlock(ItemStack stack) + { + return getOreName(stack).startsWith(BLOCK); + } + + public static boolean isOre(ItemStack stack) + { + return getOreName(stack).startsWith(ORE); + } + + public static boolean isCluster(ItemStack stack) + { + return getOreName(stack).startsWith(CLUSTER); + } + + public static boolean isDust(ItemStack stack) + { + return getOreName(stack).startsWith(DUST); + } + + public static boolean isIngot(ItemStack stack) + { + return getOreName(stack).startsWith(INGOT); + } + + public static boolean isPlate(ItemStack stack) + { + return getOreName(stack).startsWith(PLATE); + } + + public static boolean isCoin(ItemStack stack) + { + return getOreName(stack).startsWith(COIN); + } + + public static boolean isNugget(ItemStack stack) + { + return getOreName(stack).startsWith(NUGGET); + } + + public static boolean isLog(ItemStack stack) + { + return getOreName(stack).startsWith(LOG); + } + + public static boolean doOreIDsMatch(ItemStack stackA, ItemStack stackB) + { + int id = PROXY.getOreID(stackA); + return id >= 0 && id == PROXY.getOreID(stackB); + } + + public static NonNullList getOres(String oreName) + { + return PROXY.getOres(oreName); + } + + public static NonNullList getOresThatContain(String oreName) + { + return PROXY.getOres(oreName); + } + + static class OreDictProxy + { + public ItemStack getOre(String oreName, int amount) + { + if (!oreNameExists(oreName)) + { + return ItemStack.EMPTY; + } + return ItemUtil.cloneStack(OreDictionary.getOres(oreName, false).get(0), amount); + } + + public NonNullList getOres(String oreName) + { + if (!oreNameExists(oreName)) + { + return NonNullList.create(); + } + return OreDictionary.getOres(oreName, false); + } + + public int getOreID(ItemStack stack) + { + return getOreID(getOreName(stack)); + } + + public int getOreID(String oreName) + { + if (Strings.isNullOrEmpty(oreName)) + { + return -1; + } + return OreDictionary.getOreID(oreName); + } + + public List getAllOreIDs(ItemStack stack) + { + return Ints.asList(OreDictionary.getOreIDs(stack)); + } + + public String getOreName(ItemStack stack) + { + int[] ids = OreDictionary.getOreIDs(stack); + if (ids != null && ids.length >= 1) + { + return OreDictionary.getOreName(ids[0]); + } + return ""; + } + + public String getOreName(int oreID) + { + return OreDictionary.getOreName(oreID); + } + + public boolean isOreIDEqual(ItemStack stack, int oreID) + { + return getOreID(stack) == oreID; + } + + public boolean isOreNameEqual(ItemStack stack, String oreName) + { + return OreDictionary.getOreName(getOreID(stack)).equals(oreName); + } + + public boolean oreNameExists(String oreName) + { + return OreDictionary.doesOreNameExist(oreName) && OreDictionary.getOres(oreName, false).size() > 0; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/JavaUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/JavaUtil.java new file mode 100644 index 00000000..563efd34 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/JavaUtil.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +public class JavaUtil extends SecurityManager +{ + + public static JavaUtil instance = new JavaUtil(); + + public Class getCaller() + { + return getClassContext()[2]; + } + + public boolean isCalledBy(Class clazz) + { + Class[] context = getClassContext(); + + int imax = Math.min(context.length, 6); + for (int i = 2; i < imax; i++) + { + if (clazz == context[i]) + { + return true; + } + } + return false; + } + + public boolean isCalledBy(Class clazz1, Class clazz2) + { + Class[] context = getClassContext(); + + int imax = Math.min(context.length, 7); + for (int i = 2; i < imax; i++) + { + Class test = context[i]; + if (test == clazz1 || test == clazz2) + { + return true; + } + } + return false; + } + + public boolean isCalledBy(Class clazz1, Class clazz2, Class clazz3) + { + Class[] context = getClassContext(); + + int imax = Math.min(context.length, 6); + for (int i = 2; i < imax; i++) + { + Class test = context[i]; + if (test == clazz1 || test == clazz2 || test == clazz3) + { + return true; + } + } + return false; + } + + public boolean isCalledBy(String name) + { + Class[] context = getClassContext(); + + int imax = Math.min(context.length, 6); + for (int i = 2; i < imax; i++) + { + if (context[i].getName().equals(name)) + { + return true; + } + } + return false; + } + + public boolean isCalledBySpecific(Class clazz) + { + Class[] context = getClassContext(); + if (context.length < 6) + return false; + return (clazz == context[3] && !clazz.isAssignableFrom(context[4])); + } + + public int isCalledBySecond(Class clazz1, Class clazz2, Class clazz3) + { + Class[] context = getClassContext(); + if (context.length < 4) + return 0; + Class test = context[3]; + if (test == clazz1) + return 1; + if (test == clazz2) + return 2; + if (test == clazz3) + return 3; + return 0; + } + + public boolean isCalledByThird(Class clazz) + { + Class[] context = getClassContext(); + if (context.length < 5) + return false; + return (context[4] == clazz); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapGen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapGen.java new file mode 100644 index 00000000..3d5b3344 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapGen.java @@ -0,0 +1,775 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Method; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.channels.FileChannel; +import java.util.ArrayList; +import java.util.Random; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +import net.minecraft.init.Biomes; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeCache; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.ChunkGeneratorSettings; +import net.minecraft.world.gen.NoiseGeneratorOctaves; +import net.minecraft.world.gen.NoiseGeneratorPerlin; +import net.minecraft.world.gen.layer.GenLayer; +import net.minecraft.world.storage.WorldInfo; + +import micdoodle8.mods.miccore.IntCache; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +import org.apache.commons.io.FileUtils; + +public class MapGen extends BiomeProvider implements Runnable +{ + + public static boolean disabled; + private static final float[] parabolicField = new float[25]; + + public boolean mapNeedsCalculating = false; + public AtomicBoolean finishedCalculating; + private AtomicBoolean paused; + private AtomicBoolean aborted; + + private AtomicInteger progressX; + private int progressZ; + private int biomeMapX; + private int biomeMapZ; + private int biomeMap0; + private int biomeMapCx; + private int biomeMapCz; + private final int biomeMapFactor; + private final int tickLimit; + private int imagefactor; + + private BiomeCache biomeCache; + private GenLayer genBiomes; + private GenLayer biomeIndexLayer; + public File biomeMapFile; + private byte[] biomeAndHeightArray = null; + private int biomeMapSizeX; + private int biomeMapSizeZ; + + private Random rand; + private int[] heights; + private double[] heighttemp; + private World world; + private WorldType worldType; + private WorldInfo worldInfo; + private ChunkGeneratorSettings settings = null; + + private int[] biomesGrid = null; // Memory efficient to keep re-using the + // same one. + private Biome[] biomesGridHeights = null; + private int[] biomeCount = null; + private final int dimID; + + static + { + for (int j = -2; j <= 2; ++j) + { + for (int k = -2; k <= 2; ++k) + { + float f = 10.0F / MathHelper.sqrt(j * j + k * k + 0.2F); + parabolicField[j + 2 + (k + 2) * 5] = f; + } + } + } + + public MapGen(World worldIn, int sx, int sz, int cx, int cz, int scale, File file) + { + this.dimID = GCCoreUtil.getDimensionID(worldIn); + this.biomeMapFactor = scale; + this.tickLimit = Math.min(scale, 16); + if (MapGen.disabled) + { + this.mapNeedsCalculating = false; + return; + } + this.biomeMapSizeX = sx; + this.biomeMapSizeZ = sz; + int progress = this.checkProgress(file); + if (progress < 0) + { + this.mapNeedsCalculating = false; + return; + } + this.mapNeedsCalculating = true; + + this.rand = new Random(); + this.finishedCalculating = new AtomicBoolean(); + this.paused = new AtomicBoolean(); + this.aborted = new AtomicBoolean(); + + this.biomeMapCx = cx >> 4; + this.biomeMapCz = cz >> 4; + this.biomeMapFile = file; + this.imagefactor = 16 / biomeMapFactor; + if (this.imagefactor < 1) + { + this.imagefactor = 1; + } + int limitX = biomeMapSizeX * biomeMapFactor / 32; + int limitZ = biomeMapSizeZ * biomeMapFactor / 32; + this.biomeMap0 = -limitZ; + this.biomeMapX = -limitX; + this.biomeMapZ = this.biomeMap0; + this.progressX = new AtomicInteger(); + this.progressZ = 0; + this.world = worldIn; + this.worldInfo = worldIn.getWorldInfo(); + this.worldType = worldInfo.getTerrainType(); + long seed = worldInfo.getSeed(); + this.biomeCache = new BiomeCache(this); + String options = worldInfo.getGeneratorOptions(); + GenLayer[] agenlayer; + try + { + if (options != null) + { + this.settings = ChunkGeneratorSettings.Factory.jsonToFactory(options).build(); + } + if (CompatibilityManager.isBOPWorld(this.worldType)) + { + Object settingsBOP = CompatibilityManager.classBOPws.getConstructor(String.class).newInstance(options); + Method bopSetup = CompatibilityManager.classBOPwcm.getMethod("setupBOPGenLayers", long.class, settingsBOP.getClass()); + agenlayer = (GenLayer[]) bopSetup.invoke(null, seed, settingsBOP); + } else + { + agenlayer = GenLayer.initializeAllBiomeGenerators(seed, worldType, this.settings); + } + agenlayer = getModdedBiomeGenerators(worldType, seed, agenlayer); + } catch (Exception e) + { + GalacticraftCore.logger.error("Galacticraft background map image generator not able to run (probably a mod conflict?)"); + GalacticraftCore.logger.error("Please report this at https://github.com/micdoodle8/Galacticraft/issues/2481"); + e.printStackTrace(); + this.mapNeedsCalculating = false; + MapGen.disabled = true; + return; + } + this.genBiomes = agenlayer[0]; + this.biomeIndexLayer = agenlayer[1]; + + GalacticraftCore.logger.debug("Starting map generation " + file.getName() + " top left " + ((biomeMapCx - limitX) * 16) + "," + ((biomeMapCz - limitZ) * 16)); + if (progress > 0) + { + this.resumeProgress(progress); + } + } + + /** + * Returns -1 if the map file saved by the server on disk is already + * complete. Returns 0 if a new file is needed Returns >0 if an existing + * file is in progress (in this case, initialises biomeAndHeightArray and + * smaller arrays to match that existing file. + */ + private int checkProgress(File file) + { + if (!file.exists()) + return 0; + + if (file.length() != biomeMapSizeX * biomeMapSizeZ * 2) + { + return 0; + } + + int progress = 0; + if (file.getName().equals("Overworld" + MapUtil.OVERWORLD_LARGEMAP_WIDTH + ".bin")) + { + int len = (int) file.length(); + FileChannel fc; + try + { + fc = (FileChannel.open(file.toPath())); + fc.position(len - 8); + byte[] flagdata = new byte[8]; + ByteBuffer databuff = ByteBuffer.wrap(flagdata); + fc.read(databuff); + if (testFlag(flagdata)) + { + databuff.order(ByteOrder.BIG_ENDIAN); + databuff.position(0); + progress = databuff.getInt(); + } else + { + // No progress flag data, therefore the file must be + // complete + return -1; + } + fc.close(); + } catch (IOException e) + { + e.printStackTrace(); + } + + if (progress > 0 && progress <= biomeMapSizeX - imagefactor) + { + try + { + this.biomeAndHeightArray = FileUtils.readFileToByteArray(file); + this.initialiseSmallerArrays(); + return progress; + } catch (IOException e) + { + e.printStackTrace(); + this.biomeAndHeightArray = null; + } + } + + return 0; + } + + // Smaller files are always complete, if present and name and size match + return -1; + } + + @Override + public void run() + { + // Allow some time for the pause on any other map gen thread to become + // effective + try + { + Thread.sleep(90); + } catch (InterruptedException e) + { + } + + long seed = worldInfo.getSeed(); + this.initialise(seed); + + // Generate this map from start to finish within the thread + while (!this.aborted.get()) + { + if (this.paused.get()) + { + try + { + // Sleep for a bit, next time around maybe will not be + // paused? + Thread.sleep(1211); + } catch (InterruptedException e) + { + } + } else + { + // Do the actual work of the thread + if (this.BiomeMapOneTick()) + { + break; // finished! + } + } + } + + this.finishedCalculating.set(true); + } + + public void pause() + { + this.paused.set(true); + } + + public void resume() + { + this.paused.set(false); + } + + public void abort() + { + this.aborted.set(true); + } + + private void flagProgress() + { + int progX = this.progressX.get(); + if (progX > biomeMapSizeX - imagefactor) + return; + + GalacticraftCore.logger.debug("Saving partial map image progress " + progX); + int offset = this.biomeAndHeightArray.length; + this.biomeAndHeightArray[offset - 1] = (byte) 0xFE; + this.biomeAndHeightArray[offset - 2] = (byte) 0x06; + this.biomeAndHeightArray[offset - 3] = (byte) 0x03; + this.biomeAndHeightArray[offset - 4] = (byte) 0x0E; + this.biomeAndHeightArray[offset - 5] = (byte) (progX & 0xFF); + this.biomeAndHeightArray[offset - 6] = (byte) (progX >> 8 & 0xFF); + this.biomeAndHeightArray[offset - 7] = (byte) (progX >> 16 & 0xFF); + this.biomeAndHeightArray[offset - 8] = (byte) (progX >> 24 & 0xFF); + } + + public static boolean testFlag(byte[] bb) + { + return (bb[7] & 0xFF) == 0xFE && bb[6] == 0x06 && bb[5] == 0x03 && bb[4] == 0x0E; + } + + private void resumeProgress(int progress) + { + int multifactor = biomeMapFactor >> 4; + if (multifactor < 1) + { + multifactor = 1; + } + int progCount = progress / imagefactor; + + progressX.set(progress); + biomeMapX = multifactor * progCount - (biomeMapSizeX * biomeMapFactor / 32); + if (biomeMapX > -biomeMap0 * 4) + { + biomeMapX += biomeMap0 * 8; + } + } + + /** + * This is outside the multithreaded portion of the code This should be + * called after the finishedCalculating flag is set. + */ + public void writeOutputFile(boolean sendToClientImmediately) + { + if (this.biomeAndHeightArray == null) + return; + + if (!this.aborted.get()) // It should be error-free if it wasn't aborted + { + try + { + if (!this.biomeMapFile.exists() || (this.biomeMapFile.canWrite() && this.biomeMapFile.canRead())) + { + this.flagProgress(); + FileUtils.writeByteArrayToFile(this.biomeMapFile, this.biomeAndHeightArray); + } + } catch (IOException ex) + { + ex.printStackTrace(); + } + + if (sendToClientImmediately) + { + MapUtil.sendMapPacketToAll(this.biomeMapCx << 4, this.biomeMapCz << 4, this.biomeAndHeightArray); + } + } + + this.biomeAndHeightArray = null; + } + + private void initialiseSmallerArrays() + { + this.heights = new int[256]; + this.heighttemp = new double[825]; + this.biomeCount = new int[this.tickLimit * this.tickLimit]; + } + + public static void arrayClear(int[] array, int len) + { + int lenB = len < 16 ? len : 16; + for (int i = 0; i < lenB; i++) + { + array[i] = 0; + } + for (int i = 16; i < len; i += i) + { + System.arraycopy(array, 0, array, i, i + i > len ? i : len - i); + } + } + + /* + * Return false while there are further ticks to carry out Return true when + * completed + */ + public boolean BiomeMapOneTick() + { + if (this.biomeAndHeightArray == null) + { + this.biomeAndHeightArray = new byte[biomeMapSizeX * biomeMapSizeZ * 2]; + this.initialiseSmallerArrays(); + } + int multifactor = biomeMapFactor >> 4; + if (multifactor < 1) + { + multifactor = 1; + } + int progX = this.progressX.get(); + try + { + biomeMapOneChunk(biomeMapCx + biomeMapX, biomeMapCz + biomeMapZ, progX, progressZ, tickLimit); + } catch (Exception e) + { + GalacticraftCore.logger.error("Galacticraft background map image generator hit an error (probably a mod conflict?)"); + GalacticraftCore.logger.error("--> Please report this at https://github.com/micdoodle8/Galacticraft/issues/2544 <--"); + e.printStackTrace(); + MapGen.disabled = true; + this.aborted.set(true); + return true; + } + biomeMapZ += multifactor; + progressZ += imagefactor; + if (progressZ > biomeMapSizeZ - imagefactor) + { + progressZ = 0; +// if (progX % 3 == 0) +// { +// System.out.println("Finished map column " + progX + " at " + (biomeMapCx + biomeMapX) + "," + (biomeMapCz + biomeMapZ)); +// } + this.progressX.set(progX + imagefactor); + biomeMapZ = biomeMap0; + biomeMapX += multifactor; + if (biomeMapX > -biomeMap0 * 4) + { + biomeMapX += biomeMap0 * 8; + } + return progX > biomeMapSizeX - imagefactor - imagefactor; + } + return false; + } + + private void biomeMapOneChunk(int x0, int z0, int ix, int iz, int limit) + { + biomesGrid = this.getBiomeGenAt(biomesGrid, x0 << 4, z0 << 4, 16, 16); + if (biomesGrid == null) + { + return; + } + this.getHeightMap(x0, z0); + int factor = this.biomeMapFactor; + int halfFactor = limit * limit / 2; + ArrayList cols = new ArrayList<>(); + for (int j = 0; j < biomeCount.length; j++) + { + biomeCount[j] = 0; + } + for (int x = 0; x < 16; x += factor) + { + int izstore = iz; + for (int z = 0; z < 16; z += factor) + { + cols.clear(); + int maxcount = 0; + int maxindex = -1; + int biome = -1; + int lastcol = -1; + int idx = 0; + int avgHeight = 0; + int divisor = 0; + // TODO: start in centre instead of top left + BIOMEDONE: for (int xx = 0; xx < limit; xx++) + { + int hidx = ((xx + x) << 4) + z; + for (int zz = 0; zz < limit; zz++) + { + int height = heights[hidx + zz]; + avgHeight += height; + divisor++; + biome = biomesGrid[xx + x + ((zz + z) << 4)]; + if (biome != lastcol) + { + idx = cols.indexOf(biome); + if (idx == -1) + { + idx = cols.size(); + cols.add(biome); + } + lastcol = biome; + } + biomeCount[idx]++; + if (biomeCount[idx] > maxcount) + { + maxcount = biomeCount[idx]; + maxindex = idx; + if (maxcount > halfFactor) + { + break BIOMEDONE; + } + } + } + } + // Clear the array for next time + arrayClear(biomeCount, cols.size()); + + int arrayIndex = (ix * biomeMapSizeZ + iz) * 2; + this.biomeAndHeightArray[arrayIndex] = (byte) (cols.get(maxindex).intValue()); + this.biomeAndHeightArray[arrayIndex + 1] = (byte) ((avgHeight + (divisor + 1) / 2) / divisor); + iz++; + } + iz = izstore; + ix++; + } + } + + public void getHeightMap(int cx, int cz) + { + rand.setSeed(cx * 341873128712L + cz * 132897987541L); + biomesGridHeights = this.getBiomesForGeneration(biomesGridHeights, cx * 4 - 2, cz * 4 - 2, 10, 10); + this.generateHeightMap(cx * 4, 0, cz * 4); + + final double d0 = 0.125D; + final double d9 = 0.25D; + + for (int xx = 0; xx < 4; ++xx) + { + int xa = xx * 5; + int xb = xa + 5; + + for (int zz = 0; zz < 4; ++zz) + { + int aa = (xa + zz) * 33; + int ab = aa + 33; + int ba = (xb + zz) * 33; + int bb = ba + 33; + + for (int yy = 2; yy < 18; ++yy) + { + double d1 = heighttemp[aa + yy]; + double d2 = heighttemp[ab + yy]; + double d3 = heighttemp[ba + yy]; + double d4 = heighttemp[bb + yy]; + double d5 = (heighttemp[aa + yy + 1] - d1) * d0; + double d6 = (heighttemp[ab + yy + 1] - d2) * d0; + double d7 = (heighttemp[ba + yy + 1] - d3) * d0; + double d8 = (heighttemp[bb + yy + 1] - d4) * d0; + + for (int y = 0; y < 8; ++y) + { + double d10 = d1; + double d11 = d2; + double d12 = (d3 - d1) * d9; + double d13 = (d4 - d2) * d9; + + int truey = yy * 8 + y; + for (int x = 0; x < 4; ++x) + { + int idx = x + xx * 4 << 4 | zz * 4; + double d16 = (d11 - d10) * d9; + double d15 = d10 - d16; + + for (int z = 0; z < 4; ++z) + { + if ((d15 += d16) > 0.0D) + { + heights[idx + z] = truey; + } + } + + d10 += d12; + d11 += d13; + } + + d1 += d5; + d2 += d6; + d3 += d7; + d4 += d8; + } + } + } + } + } + + static double[] mainNoiseRegion; + static double[] minLimitRegion; + static double[] maxLimitRegion; + static double[] depthRegion; + private NoiseGeneratorOctaves noiseGen1; + private NoiseGeneratorOctaves noiseGen2; + private NoiseGeneratorOctaves noiseGen3; + public NoiseGeneratorOctaves noiseGen4; + + public void initialise(long seed) + { + rand = new Random(seed); + noiseGen1 = new NoiseGeneratorOctaves(rand, 16); + noiseGen2 = new NoiseGeneratorOctaves(rand, 16); + noiseGen3 = new NoiseGeneratorOctaves(rand, 8); + NoiseGeneratorPerlin ignore1 = new NoiseGeneratorPerlin(this.rand, 4); + NoiseGeneratorOctaves ignore2 = new NoiseGeneratorOctaves(this.rand, 10); + noiseGen4 = new NoiseGeneratorOctaves(rand, 16); + NoiseGeneratorOctaves ignore3 = new NoiseGeneratorOctaves(this.rand, 8); + net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextOverworld ctx = + new net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextOverworld(noiseGen1, noiseGen2, noiseGen3, ignore1, ignore2, noiseGen4, ignore3); + ctx = net.minecraftforge.event.terraingen.TerrainGen.getModdedNoiseGenerators(this.world, this.rand, ctx); + noiseGen1 = ctx.getLPerlin1(); + noiseGen2 = ctx.getLPerlin2(); + noiseGen3 = ctx.getPerlin(); + noiseGen4 = ctx.getDepth(); + } + + private void generateHeightMap(int cx, int cy, int cz) + { + float f = this.settings.coordinateScale; + float f1 = this.settings.heightScale; + depthRegion = + noiseGen4.generateNoiseOctaves(depthRegion, cx, cz, 5, 5, this.settings.depthNoiseScaleX, this.settings.depthNoiseScaleZ, this.settings.depthNoiseScaleExponent); + mainNoiseRegion = noiseGen3.generateNoiseOctaves(mainNoiseRegion, cx, cy, cz, 5, 33, 5, f / this.settings.mainNoiseScaleX, f1 / this.settings.mainNoiseScaleY, + f / this.settings.mainNoiseScaleZ); + minLimitRegion = noiseGen1.generateNoiseOctaves(minLimitRegion, cx, cy, cz, 5, 33, 5, f, f1, f); + maxLimitRegion = noiseGen2.generateNoiseOctaves(maxLimitRegion, cx, cy, cz, 5, 33, 5, f, f1, f); + boolean amplified = this.worldType == WorldType.AMPLIFIED; + double minLimitScale = this.settings.lowerLimitScale; + double maxLimitScale = this.settings.upperLimitScale; + double stretchY = this.settings.stretchY * 128.0D / 256.0D; + double baseSize = this.settings.baseSize; + int i = 2; // start at 2 and later skip 19-33 - because these heightMap + // entries are never referenced in our code in this class + int j = 0; + + for (int xx = 0; xx < 5; ++xx) + { + for (int zz = 0; zz < 5; ++zz) + { + float f2 = 0.0F; + float f3 = 0.0F; + float f4 = 0.0F; + float theMinHeight = biomesGridHeights[xx + 22 + zz * 10].getBaseHeight(); + + for (int x = -2; x <= 2; ++x) + { + int baseIndex = xx + x + 22; + for (int z = -2; z <= 2; ++z) + { + Biome biomegenbase1 = biomesGridHeights[baseIndex + (zz + z) * 10]; + float f5 = this.settings.biomeDepthOffSet + biomegenbase1.getBaseHeight() * this.settings.biomeDepthWeight; + float f6 = this.settings.biomeScaleOffset + biomegenbase1.getHeightVariation() * this.settings.biomeScaleWeight; + + if (amplified && f5 > 0.0F) + { + f5 = 1.0F + f5 + f5; + f6 = 1.0F + f6 * 4.0F; + } + + float f7 = parabolicField[x + 12 + z * 5] / (f5 + 2.0F); + + if (biomegenbase1.getBaseHeight() > theMinHeight) + { + f7 /= 2.0F; + } + + f2 += f6 * f7; + f3 += f5 * f7; + f4 += f7; + } + } + + f2 = f2 / f4; + f3 = f3 / f4; + f2 = f2 * 0.9F + 0.1F; + f3 = (f3 * 4.0F - 1.0F) / 8.0F; + double d7 = this.depthRegion[j] / 8000.0D; + + if (d7 < 0.0D) + { + d7 = -d7 * 0.3D; + } + + d7 = d7 * 3.0D - 2.0D; + + if (d7 < 0.0D) + { + d7 = d7 / 2.0D; + + if (d7 < -1.0D) + { + d7 = -1.0D; + } + + d7 = d7 / 1.4D; + d7 = d7 / 2.0D; + } else + { + if (d7 > 1.0D) + { + d7 = 1.0D; + } + + d7 = d7 / 8.0D; + } + + ++j; + double d8 = f3; + double d9 = f2; + d8 = d8 + d7 * 0.2D; + d8 = d8 * baseSize / 8.0D; + double d0 = baseSize + d8 * 4.0D; + + for (int j2 = 2; j2 < 19; ++j2) + { + double d1 = (j2 - d0) * stretchY / d9; + if (d1 < 0.0D) + { + d1 *= 4.0D; + } + + double d2 = this.minLimitRegion[i] / minLimitScale; + double d3 = this.maxLimitRegion[i] / maxLimitScale; + double d4 = (this.mainNoiseRegion[i] / 10.0D + 1.0D) / 2.0D; + double d5 = MathHelper.clampedLerp(d2, d3, d4) - d1; + heighttemp[i] = d5; + ++i; + } + i += 16; // We skip j2 = 0-1 and 19-32 + } + } + } + + /** + * REPLICATES method in WorldChunkManager Returns an array of biomes for the + * location input, used for generating the height map + */ + @Override + public Biome[] getBiomesForGeneration(Biome[] biomes, int x, int z, int width, int height) + { + IntCache.resetIntCacheGC(); + int[] aint = this.genBiomes.getInts(x, z, width, height); + + int size = width * height; + if (biomes == null || biomes.length < size) + { + biomes = new Biome[size]; + } + for (int i = 0; i < size; ++i) + { + int biomeId = aint[i]; + Biome biomegenbase = Biome.getBiome(biomeId, Biomes.DEFAULT); +// else +// System.err.println("MapGen: Biome ID is out of bounds: " + biomeId + ", defaulting to 0 (Ocean)"); + biomes[i] = biomegenbase == null ? Biomes.OCEAN : biomegenbase; + } + + return biomes; + } + + /** + * REPLICATES method in WorldChunkManager (with higher performance!) Return + * a list of ints representing mapgen biomes at the specified coordinates. + * Args: listToReuse, x, y, width, height This is after all genlayers + * (oceans, islands, hills, rivers, etc) + */ + public int[] getBiomeGenAt(int[] listToReuse, int x, int z, int width, int height) + { + IntCache.resetIntCacheGC(); + int[] aint = this.biomeIndexLayer.getInts(x, z, width, height); + + int size = width * height; + if (listToReuse == null || listToReuse.length < size) + { + listToReuse = new int[size]; + } + System.arraycopy(aint, 0, listToReuse, 0, size); + + return listToReuse; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapUtil.java new file mode 100644 index 00000000..1472e352 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/MapUtil.java @@ -0,0 +1,1341 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Random; +import java.util.TreeMap; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.zip.DataFormatException; +import java.util.zip.Deflater; +import java.util.zip.Inflater; + +import javax.imageio.IIOImage; +import javax.imageio.ImageIO; +import javax.imageio.ImageReadParam; +import javax.imageio.ImageReader; +import javax.imageio.ImageTypeSpecifier; +import javax.imageio.stream.FileImageOutputStream; +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.ImageOutputStream; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Biomes; +import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderSurface; +import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; + +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.DynamicTextureProper; +import micdoodle8.mods.galacticraft.core.client.screen.DrawGameScreen; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; + +import org.apache.commons.io.FileUtils; + +public class MapUtil +{ + + // Mapgen management + public static AtomicBoolean calculatingMap = new AtomicBoolean(); + public static AtomicBoolean resetClientFlag = new AtomicBoolean(); + private static MapGen currentMap = null; + private static MapGen slowMap = null; + private static Thread threadCurrentMap = null; + private static Thread threadSlowMap = null; + public static boolean doneOverworldTexture = false; + private static LinkedList queuedMaps = new LinkedList<>(); + public static LinkedList clientRequests = new LinkedList<>(); + + public static ArrayList biomeColours = new ArrayList(40); + private static Random rand = new Random(); + private static byte[] overworldImageBytesPart; // Used client side only + private static byte[] overworldImageCompressed = null; + + // Map size definitions + private static final int SIZE_STD = 176; + public static final int SIZE_STD2 = SIZE_STD * 2; + public static final int OVERWORLD_LARGEMAP_WIDTH = 1536; + private static final int OVERWORLD_LARGEMAP_HEIGHT = 960; + private static final int OVERWORLD_MAP_SCALE = 4; + private static final int OVERWORLD_TEXTURE_WIDTH = 192; + private static final int OVERWORLD_TEXTURE_HEIGHT = 48; + private static final int OVERWORLD_TEXTURE_SCALE = 7; + private static final int LARGEMAP_MARKER = 30000001; + + // Color related constants + private static final int OCEAN_HEIGHT = 63; + private static final int DEEP_OCEAN = 56; + + static + { + // TODO: Deal with mods like ExtraBiomes + setupColours(); + } + + public static void reset() + { + if (currentMap != null) + currentMap.abort(); + currentMap = null; + saveMapProgress(); + threadCurrentMap = null; + threadSlowMap = null; + queuedMaps.clear(); + calculatingMap.set(false); + doneOverworldTexture = false; + overworldImageCompressed = null; + } + + @SideOnly(Side.CLIENT) + public static void resetClient() + { + resetClientFlag.set(true); + // Threadsafe + } + + @SideOnly(Side.CLIENT) + public static void resetClientBody() + { + ClientProxyCore.overworldTexturesValid = false; + clientRequests.clear(); + overworldImageBytesPart = null; + File baseFolder = new File(FMLClientHandler.instance().getClient().gameDir, "assets/galacticraftMaps"); + if (baseFolder.exists() && baseFolder.isDirectory()) + { + for (File f : baseFolder.listFiles()) + { + if (f.isFile()) + { + f.delete(); + } + } + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] {})); + ClientProxyCore.overworldTextureRequestSent = true; + DrawGameScreen.reusableMap = new DynamicTexture(MapUtil.SIZE_STD2, MapUtil.SIZE_STD2); + MapUtil.biomeColours.clear(); + setupColours(); + } + + /** + * The BufferedImage needs to be already set up as a sized image of + * TYPE_INT_RGB + */ + public static void getLocalMap(World world, int chunkXPos, int chunkZPos, BufferedImage image) + { + for (int x0 = -12; x0 <= 12; x0++) + { + for (int z0 = -12; z0 <= 12; z0++) + { + Chunk chunk = world.getChunk(chunkXPos + x0, chunkZPos + z0); + BlockPos pos = null; + + if (chunk != null) + { + for (int z = 0; z < 16; z++) + { + for (int x = 0; x < 16; x++) + { + int l4 = chunk.getHeight(new BlockPos(x, 0, z)) + 1; + IBlockState state = Blocks.AIR.getDefaultState(); + + if (l4 > 1) + { + do + { + --l4; + state = chunk.getBlockState(x, l4, z); + } while (state.getMapColor(world, pos) == MapColor.AIR && l4 > 0); + } + + int col = pos != null ? state.getMapColor(world, pos).colorValue : 0; + image.setRGB(x + (x0 + 12) * 16, z + (z0 + 12) * 16, col); + } + } + } + } + } + } + + public static void makeOverworldTexture() + { + if (doneOverworldTexture) + { + return; + } + World overworld = WorldUtil.getProviderForDimensionServer(ConfigManagerCore.idDimensionOverworld).world; + if (overworld == null) + { + return; + } + + if (overworld.getWorldType() == WorldType.FLAT || !(overworld.provider instanceof WorldProviderSurface)) + { + doneOverworldTexture = true; + return; + } + + File baseFolder = MapUtil.getBaseFolder(); + ; + if (!baseFolder.exists() && !baseFolder.mkdirs()) + { + GalacticraftCore.logger.error("Base folder(s) could not be created: " + baseFolder.getAbsolutePath()); + doneOverworldTexture = true; + return; + } + + if (MapUtil.getBiomeMapForCoords(overworld, 0, 0, OVERWORLD_TEXTURE_SCALE, OVERWORLD_TEXTURE_WIDTH, OVERWORLD_TEXTURE_HEIGHT, baseFolder)) + { + doneOverworldTexture = true; + } + + // This will make the 'slow map', a map covering a large part of the + // world around spawn + // (On a typical modern PC, this should take 20-30 minutes to generate + // in its own thread) + // MapUtil.getBiomeMapForCoords(overworld, 0, 0, OVERWORLD_MAP_SCALE, + // OVERWORLD_LARGEMAP_WIDTH, OVERWORLD_LARGEMAP_HEIGHT, baseFolder); + } + + public static void sendOverworldToClient(EntityPlayerMP client) + { + if (doneOverworldTexture) + { + try + { + File baseFolder = MapUtil.getBaseFolder(); + ; + if (!baseFolder.exists()) + { + GalacticraftCore.logger.error("Base folder missing: " + baseFolder.getAbsolutePath()); + return; + } + File file = new File(baseFolder, "Overworld" + OVERWORLD_TEXTURE_WIDTH + ".bin"); + if (file.exists()) + { + sendMapPacket(0, 0, client, FileUtils.readFileToByteArray(file)); + } + file = new File(baseFolder, "Overworld" + OVERWORLD_LARGEMAP_WIDTH + ".bin"); + if (file.exists()) + { + sendMapPacket(LARGEMAP_MARKER, 0, client, FileUtils.readFileToByteArray(file)); + } + } + catch (Exception ex) + { + System.err.println("Error sending overworld image to player."); + ex.printStackTrace(); + } + } + } + + public static void sendOrCreateMap(World world, int cx, int cz, EntityPlayerMP client) + { + + if (world.getWorldType() == WorldType.FLAT || !(world.provider instanceof WorldProviderSurface)) + { + doneOverworldTexture = true; + return; + } + + try + { + File baseFolder = MapUtil.getBaseFolder(); + ; + if (!baseFolder.exists()) + { + GalacticraftCore.logger.error("Base folder missing: " + baseFolder.getAbsolutePath()); + return; + } + File file = makeFileName(baseFolder, cx, cz); + if (!file.exists()) + { + getBiomeMapForCoords(world, cx, cz, 1, SIZE_STD, SIZE_STD, baseFolder); + return; + } + sendMapPacket(cx, cz, client, FileUtils.readFileToByteArray(file)); + } + catch (Exception ex) + { + System.err.println("Error sending map image to player."); + ex.printStackTrace(); + } + } + + public static void sendMapPacket(int cx, int cz, EntityPlayerMP client, byte[] largeMap) throws IOException + { + byte[] compressed; + if (cx == LARGEMAP_MARKER) + { + if (overworldImageCompressed == null) + { + overworldImageCompressed = zipCompress(largeMap); + } + compressed = overworldImageCompressed; + } + else + { + compressed = zipCompress(largeMap); + } + sendMapPacketCompressed(cx, cz, client, compressed); + } + + public static void sendMapPacketToAll(int cx, int cz, byte[] largeMap) + { + byte[] compressed; + if (cx == LARGEMAP_MARKER) + { + if (overworldImageCompressed == null) + { + overworldImageCompressed = zipCompress(largeMap); + } + compressed = overworldImageCompressed; + } + else + { + compressed = zipCompress(largeMap); + } + sendMapPacketAllCompressed(cx, cz, compressed); + } + + private static void sendMapPacketCompressed(int cx, int cz, EntityPlayerMP client, byte[] map) throws IOException + { + if (cx == LARGEMAP_MARKER && map.length < 2080000) + { + int halfSize = map.length / 2; + byte[] largeMapPartA = Arrays.copyOf(map, halfSize); + byte[] largeMapPartB = Arrays.copyOfRange(map, halfSize, map.length); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(client.world), new Object[] + {cx, map.length, largeMapPartA}), client); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(client.world), new Object[] + {cx + 1, map.length, largeMapPartB}), client); + } + else if (map.length < 1040000) // That's about the limit on a Forge + // packet length + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(client.world), new Object[] + {cx, cz, map}), client); + } + } + + private static void sendMapPacketAllCompressed(int cx, int cz, byte[] map) + { + if (cx == LARGEMAP_MARKER && map.length < 2080000) + { + int halfSize = map.length / 2; + byte[] largeMapPartA = Arrays.copyOf(map, halfSize); + byte[] largeMapPartB = Arrays.copyOfRange(map, halfSize, map.length); + GCCoreUtil.sendToAllDimensions(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, new Object[] + {cx, map.length, largeMapPartA}); + GCCoreUtil.sendToAllDimensions(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, new Object[] + {cx + 1, map.length, largeMapPartB}); + } + else if (map.length < 1040000) // That's about the limit on a Forge + // packet length + { + GCCoreUtil.sendToAllDimensions(EnumSimplePacket.C_SEND_OVERWORLD_IMAGE, new Object[] + {cx, cz, map}); + } + } + + /** + * On a server, build any needed patchwork map files around co-ordinates (x, + * z) The needed files may already have been generated by previous calls on + * the same server Files are stored in the world save folder, subfolder + * galacticraft/overworldMap + */ + public static boolean buildMaps(World world, int x, int z) + { + if (world.getWorldType() == WorldType.FLAT || !(world.provider instanceof WorldProviderSurface)) + { + return false; + } + + File baseFolder = MapUtil.getBaseFolder(); + ; + if (!baseFolder.exists() && !baseFolder.mkdirs()) + { + GalacticraftCore.logger.error("Base folder(s) could not be created: " + baseFolder.getAbsolutePath()); + return false; + } + int cx = convertMap(x); + int cz = convertMap(z); + getBiomeMapForCoords(world, cx, cz, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx + SIZE_STD2, cz, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx, cz + SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx - SIZE_STD2, cz, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx, cz - SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx + SIZE_STD2, cz + SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx - SIZE_STD2, cz + SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx - SIZE_STD2, cz - SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + getBiomeMapForCoords(world, cx + SIZE_STD2, cz - SIZE_STD2, 1, SIZE_STD, SIZE_STD, baseFolder); + return true; + } + + private static File getBaseFolder() + { + return new File(DimensionManager.getCurrentSaveRootDirectory(), "galacticraft/overworldMap"); + } + + private static int convertMap(int x) + { + int cx = x + SIZE_STD; + if (cx < 0) + { + cx -= SIZE_STD2 - 1; + } + cx /= SIZE_STD2; + return cx * SIZE_STD2; + } + + public static boolean getBiomeMapForCoords(World world, int cx, int cz, int scale, int sizeX, int sizeZ, File baseFolder) + { + File outputFile; + if (sizeX != sizeZ) + { + outputFile = new File(baseFolder, "Overworld" + sizeX + ".bin"); + if (sizeX == OVERWORLD_LARGEMAP_WIDTH) + { + MapGen newGen = new MapGen(world, sizeX, sizeZ, cx, cz, 1 << scale, outputFile); + if (newGen.mapNeedsCalculating) + { + slowMap = newGen; + calculatingMap.set(true); + } + return false; + } + } + else + { + outputFile = makeFileName(baseFolder, cx, cz); + } + + MapGen newGen = new MapGen(world, sizeX, sizeZ, cx, cz, 1 << scale, outputFile); + if (newGen.mapNeedsCalculating) + { + if (calculatingMap.getAndSet(true)) + { + queuedMaps.add(newGen); + } + else + { + currentMap = newGen; + } + return false; + } + return true; + } + + public static void saveMapProgress() + { + if (slowMap != null) + { + slowMap.abort(); + try + { + Thread.sleep(90); + } + catch (InterruptedException e) + {} + slowMap.writeOutputFile(false); + slowMap = null; + } + } + + /** + * Poll any map threads to see if they need starting or if they're finished + * + * Multi-threaded version - runs each MapGen in its own thread, polls + * MapGen.finishedCalculatingMap to know when finished + */ + public static void BiomeMapNextTick_MultiThreaded() + { + if (currentMap != null) + { + if (threadCurrentMap == null) + { + // Create the current map thread, pausing any slow map thread + if (slowMap != null) + { + slowMap.pause(); + } + // TODO = should it use a re-usable thread pool? + threadCurrentMap = new Thread(currentMap); + threadCurrentMap.setName("Background world mapping"); + threadCurrentMap.setPriority(Thread.NORM_PRIORITY - 1); + threadCurrentMap.start(); + } + else if (currentMap.finishedCalculating.get()) + { + // Finished the current map + threadCurrentMap = null; + currentMap.writeOutputFile(true); + + if (queuedMaps.size() > 0) + { + currentMap = queuedMaps.removeFirst(); + } + else + { + currentMap = null; + + if (slowMap == null) + calculatingMap.set(false); + else + { + if (slowMap != null) + { + slowMap.resume(); + } + } + } + } + + return; + } + + if (!queuedMaps.isEmpty()) + { + if (slowMap != null) + { + slowMap.pause(); + } + + currentMap = queuedMaps.removeFirst(); + return; + } + + if (slowMap != null) + { + if (threadSlowMap == null) + { + // Create the slow map thread + threadSlowMap = new Thread(slowMap); + threadSlowMap.setName("Background world mapping"); + threadSlowMap.setPriority(Thread.NORM_PRIORITY - 1); + threadSlowMap.start(); + } + else if (slowMap.finishedCalculating.get()) + { + // Finished the current map + threadSlowMap = null; + slowMap.writeOutputFile(true); + slowMap = null; + calculatingMap.set(false); + } + + return; + } + } + + // Single Threaded Version of the same code + // (Currently unused) + public static void BiomeMapNextTick_SingleThreaded() + { + MapGen map; + boolean doingSlow = false; + if (currentMap != null) + { + map = currentMap; + } + else if (slowMap != null) + { + map = slowMap; + doingSlow = true; + } + else + { + return; + } + + // If single threade, allow GC background mapping around 9% of the + // server tick time if server running at full speed + // (on a slow server, it will be proportionately lower %) + long end = System.nanoTime() + 4500000L; + while (System.nanoTime() < end) + { + if (map.BiomeMapOneTick()) + { + // Finished + map.writeOutputFile(true); + if (doingSlow) + { + slowMap = null; + } + else + { + currentMap = null; + if (queuedMaps.size() > 0) + { + currentMap = queuedMaps.removeFirst(); + } + } + if (currentMap == null && slowMap == null) + { + calculatingMap.set(false); + } + return; + } + } + } + + public static boolean backgroundMapping(Thread currentThread) + { + return currentThread == threadSlowMap || currentThread == threadCurrentMap; + } + + /** + * Converts a 48px high image to a 12px high image with a palette chosen + * only from the colours in the paletteImage + * + * @param overworldImage Output image already created as a blank image, + * dimensions biomeMapSizeX x biomeMapSizeY + * @param paletteImage Palette image, dimensions must be a square with + * sides biomeMapSizeZ / 4 + */ + public static BufferedImage convertTo12pxTexture(BufferedImage overworldImage, BufferedImage paletteImage) + { + BufferedImage result = new BufferedImage(overworldImage.getWidth(), overworldImage.getHeight(), BufferedImage.TYPE_INT_RGB); + TreeMap mapColPos = new TreeMap<>(); + TreeMap mapColPosB = new TreeMap<>(); + int count = 0; + for (int x = 0; x < overworldImage.getWidth(); x += 4) + { + for (int z = 0; z < overworldImage.getHeight(); z += 4) + { + //int r = 0; + int g = 0; + int b = 0; + for (int xx = 0; xx < 4; xx++) + { + for (int zz = 0; zz < 4; zz++) + { + int col = overworldImage.getRGB(xx + x, zz + z); + //r += (col >> 16); + g += (col >> 8) & 255; + b += col & 255; + } + } + while (mapColPos.containsKey(g - b)) + { + g++; + } + mapColPos.put(g - b, count); + if (x < overworldImage.getHeight()) + { + int col = paletteImage.getRGB(x + 1, z + 1); + //r = (col >> 16); + g = (col >> 8) & 255; + b = col & 255; + while (mapColPosB.containsKey(g - b)) + { + g++; + } + mapColPosB.put(g - b, col); + } + count++; + } + } + + count = 0; + int newCol = 0; + Iterator it = mapColPosB.keySet().iterator(); + Iterator itt = mapColPos.keySet().iterator(); + int modulus = overworldImage.getHeight() / 4; + int mod2 = overworldImage.getWidth() / overworldImage.getHeight(); + for (int x = 0; x < overworldImage.getWidth() / 4; x++) + { + for (int z = 0; z < modulus; z++) + { + if (count % mod2 == 0) + { + newCol = mapColPosB.get(it.next()); + } + int position = mapColPos.get(itt.next()); + int xx = position / modulus; + int zz = position % modulus; + for (int xxx = 0; xxx < 4; xxx++) + { + for (int zzz = 0; zzz < 4; zzz++) + { + result.setRGB(xx * 4 + xxx, zz * 4 + zzz, newCol); + } + } + count++; + } + } + + return result; + } + + // Unused + public static BufferedImage readImage(Object source) throws IOException + { + ImageInputStream stream = ImageIO.createImageInputStream(source); + ImageReader reader = ImageIO.getImageReaders(stream).next(); + reader.setInput(stream); + ImageReadParam param = reader.getDefaultReadParam(); + + ImageTypeSpecifier typeToUse = null; + for (Iterator i = reader.getImageTypes(0); i.hasNext();) + { + ImageTypeSpecifier type = (ImageTypeSpecifier) i.next(); + if (type.getColorModel().getColorSpace().isCS_sRGB()) + { + typeToUse = type; + } + } + if (typeToUse != null) + { + param.setDestinationType(typeToUse); + } + + BufferedImage b = reader.read(0, param); + reader.dispose(); + stream.close(); + return b; + } + + @SideOnly(Side.CLIENT) + public static void writeImgToFile(BufferedImage img, String name) + { + if (GalacticraftCore.enableJPEG) + { + File folder = new File(FMLClientHandler.instance().getClient().gameDir, "assets/galacticraftMaps"); + + try + { + ImageOutputStream outputStreamA = new FileImageOutputStream(new File(folder, name)); + GalacticraftCore.jpgWriter.setOutput(outputStreamA); + GalacticraftCore.jpgWriter.write(null, new IIOImage(img, null, null), GalacticraftCore.writeParam); + outputStreamA.close(); + } + catch (Exception e) + {} + } + } + + public static byte[] zipCompress(byte[] data) + { + Deflater deflater = new Deflater(); + deflater.setLevel(Deflater.BEST_SPEED); + deflater.setInput(data); + deflater.finish(); + ByteArrayOutputStream compressed = new ByteArrayOutputStream(data.length * 2 / 3); + byte[] miniBuffer = new byte[4096]; + while (!deflater.finished()) + { + int count = deflater.deflate(miniBuffer); + compressed.write(miniBuffer, 0, count); + } + return compressed.toByteArray(); + } + + private static byte[] zipDeCompress(byte[] data) throws DataFormatException + { + Inflater inflater = new Inflater(); + inflater.setInput(data); + ByteArrayOutputStream deCompressed = new ByteArrayOutputStream(data.length * 2); + byte[] miniBuffer = new byte[4096]; + while (!inflater.finished()) + { + int count = inflater.inflate(miniBuffer); + deCompressed.write(miniBuffer, 0, count); + } + return deCompressed.toByteArray(); + } + + @SideOnly(Side.CLIENT) + public static void receiveOverworldImageCompressed(int cx, int cz, byte[] raw) throws IOException + { + if (cx == LARGEMAP_MARKER) + { + // Received large map part A + if (overworldImageBytesPart == null) + { + overworldImageBytesPart = raw; + return; + } + else + { + byte[] overWorldImageComplete = Arrays.copyOf(raw, cz); + int offsetPartB = cz / 2; + for (int i = offsetPartB; i < cz; i++) + overWorldImageComplete[i] = overworldImageBytesPart[i - offsetPartB]; + overworldImageBytesPart = null; + raw = overWorldImageComplete; + } + } + else if (cx == LARGEMAP_MARKER + 1) + { + // Received large map part B + if (overworldImageBytesPart == null) + { + overworldImageBytesPart = raw; + return; + } + else + { + byte[] overWorldImageComplete = Arrays.copyOf(overworldImageBytesPart, cz); + int offsetPartB = cz / 2; + for (int i = offsetPartB; i < cz; i++) + overWorldImageComplete[i] = raw[i - offsetPartB]; + overworldImageBytesPart = null; + raw = overWorldImageComplete; + } + } + + try + { + getOverworldImageFromRaw(cx, cz, zipDeCompress(raw)); + } + catch (DataFormatException e) + { + GalacticraftCore.logger.debug(e.toString()); + GalacticraftCore.logger.debug("Client received a corrupted map image data packet from server " + cx + "_" + cz); + } + } + + @SideOnly(Side.CLIENT) + public static void getOverworldImageFromRaw(int cx, int cz, byte[] raw) throws IOException + { + File folder = MapUtil.getClientMapsFolder(); + + if (raw.length == OVERWORLD_LARGEMAP_WIDTH * OVERWORLD_LARGEMAP_HEIGHT * 2) + { + if (folder != null) + { + File file0 = new File(folder, "overworldRaw.bin"); + + if (!file0.exists() || (file0.canRead() && file0.canWrite())) + { + FileUtils.writeByteArrayToFile(file0, raw); + } + else + { + System.err.println("Cannot write to file %minecraft%/assets/galacticraftMaps/overworldRaw.bin"); + } + } + else + { + System.err.println("No folder for file %minecraft%/assets/galacticraftMaps/overworldRaw.bin"); + } + + // raw is a WIDTH_WORLD x HEIGHT_WORLD array of 2 byte entries: + // biome type followed by height + // Here we will make a texture from that, but twice as large: 4 + // pixels for each data point, it just looks better that way when + // the texture is used + BufferedImage worldImageLarge = new BufferedImage(OVERWORLD_LARGEMAP_WIDTH * 2, OVERWORLD_LARGEMAP_HEIGHT * 2, BufferedImage.TYPE_INT_RGB); + + for (int x = 0; x < OVERWORLD_LARGEMAP_WIDTH; x++) + { + for (int z = 0; z < OVERWORLD_LARGEMAP_HEIGHT; z++) + { + int arrayIndex = (x * OVERWORLD_LARGEMAP_HEIGHT + z) * 2; + int biome = ((int) raw[arrayIndex]) & 255; + int height = ((int) raw[arrayIndex + 1]) & 255; + + if (height < OCEAN_HEIGHT && biome != 2 && biome != 10) + { + // Includes ponds, lakes and rivers in other biomes + biome = 0; + } + if (height < DEEP_OCEAN && biome == 0) + { + biome = 24; + } + + worldImageLarge.setRGB(x * 2, z * 2, convertBiomeColour(biome, height)); + worldImageLarge.setRGB(x * 2, z * 2 + 1, convertBiomeColour(biome, height)); + worldImageLarge.setRGB(x * 2 + 1, z * 2, convertBiomeColour(biome, height)); + worldImageLarge.setRGB(x * 2 + 1, z * 2 + 1, convertBiomeColour(biome, height)); + } + } + + // Write it to a .jpg file on client for beta preview + if (GalacticraftCore.enableJPEG && folder != null) + { + ImageOutputStream outputStream = new FileImageOutputStream(new File(folder, "large.jpg")); + GalacticraftCore.jpgWriter.setOutput(outputStream); + GalacticraftCore.jpgWriter.write(null, new IIOImage(worldImageLarge, null, null), GalacticraftCore.writeParam); + outputStream.close(); + } + } + // This is the dimensions of the Overworld texture map + else if (raw.length == OVERWORLD_TEXTURE_WIDTH * OVERWORLD_TEXTURE_HEIGHT * 2) + { + // raw is a WIDTH_STD x HEIGHT_STD array of 2 byte entries: biome + // type followed by height + BufferedImage worldImage = new BufferedImage(OVERWORLD_TEXTURE_WIDTH, OVERWORLD_TEXTURE_HEIGHT, BufferedImage.TYPE_INT_RGB); + + for (int x = 0; x < OVERWORLD_TEXTURE_WIDTH; x++) + { + for (int z = 0; z < OVERWORLD_TEXTURE_HEIGHT; z++) + { + int arrayIndex = (x * OVERWORLD_TEXTURE_HEIGHT + z) * 2; + int biome = ((int) raw[arrayIndex]) & 255; + int height = ((int) raw[arrayIndex + 1]) & 255; + + if (height < OCEAN_HEIGHT && biome != 2 && biome != 10) + { + // Includes ponds, lakes and rivers in other biomes + biome = 0; + } + if (height < DEEP_OCEAN && biome == 0) + { + biome = 24; + } + + worldImage.setRGB(x, z, convertBiomeColour(biome, height)); + } + } + + IResourceManager rm = Minecraft.getMinecraft().getResourceManager(); + BufferedImage paletteImage = null; + try + { + InputStream in = rm.getResource(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png")).getInputStream(); + paletteImage = ImageIO.read(in); + in.close(); + paletteImage.getHeight(); + } + catch (Exception e) + { + e.printStackTrace(); + return; + } + + BufferedImage result = convertTo12pxTexture(worldImage, paletteImage); + + if (result != null) + { + if (ClientProxyCore.overworldTextureWide == null) + { + ClientProxyCore.overworldTextureWide = new DynamicTextureProper(OVERWORLD_TEXTURE_WIDTH, OVERWORLD_TEXTURE_HEIGHT); + } + if (ClientProxyCore.overworldTextureClient == null) + { + ClientProxyCore.overworldTextureClient = new DynamicTextureProper(OVERWORLD_TEXTURE_HEIGHT, OVERWORLD_TEXTURE_HEIGHT); + } + ClientProxyCore.overworldTextureWide.update(result); + ClientProxyCore.overworldTextureClient.update(result); + ClientProxyCore.overworldTexturesValid = true; + } + } + else if (folder != null) + { + File file0 = makeFileName(folder, cx, cz); + + if (!file0.exists() || (file0.canRead() && file0.canWrite())) + { + FileUtils.writeByteArrayToFile(file0, raw); + } + } + else + { + System.err.println("No folder %minecraft%/assets/galacticraftMaps for local map file."); + } + } + + @SideOnly(Side.CLIENT) + public static boolean getMap(int[] image, World world, BlockPos pos) + { + int xCoord = pos.getX(); + int zCoord = pos.getZ(); + int cx = convertMap(xCoord); + int cz = convertMap(zCoord); + + File baseFolder = new File(FMLClientHandler.instance().getClient().gameDir, "assets/galacticraftMaps"); + if (!baseFolder.exists() && !baseFolder.mkdirs()) + { + GalacticraftCore.logger.error("Base folder(s) could not be created: " + baseFolder.getAbsolutePath()); + return false; + } + + int dim = GCCoreUtil.getDimensionID(world); + boolean result = true; + if (makeRGBimage(image, baseFolder, cx - SIZE_STD2, cz - SIZE_STD2, 0, 0, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx - SIZE_STD2, cz, 0, SIZE_STD, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx - SIZE_STD2, cz + SIZE_STD2, 0, SIZE_STD2, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx, cz - SIZE_STD2, SIZE_STD, 0, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx, cz, SIZE_STD, SIZE_STD, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx, cz + SIZE_STD2, SIZE_STD, SIZE_STD2, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx + SIZE_STD2, cz - SIZE_STD2, SIZE_STD2, 0, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx + SIZE_STD2, cz, SIZE_STD2, SIZE_STD, xCoord, zCoord, dim, result)) + { + result = false; + } + if (makeRGBimage(image, baseFolder, cx + SIZE_STD2, cz + SIZE_STD2, SIZE_STD2, SIZE_STD2, xCoord, zCoord, dim, result)) + { + result = false; + } + return result; + } + + @SideOnly(Side.CLIENT) + private static boolean makeRGBimage(int[] array, File baseFolder, int cx, int cz, int offsetX, int offsetZ, int xCoord, int zCoord, int dim, boolean prevResult) + { + File filename = makeFileName(baseFolder, cx, cz); + if (!filename.exists()) + { + if (clientRequests.contains(filename.getName())) + { + // GalacticraftCore.logger.debug("Info: Server not yet ready to send map file " + + // baseFolder.getName() + "/" + filename.getName()); + } + else + { + clientRequests.add(filename.getName()); + // GalacticraftCore.logger.debug("Info: Client requested map file" + + // filename.getName()); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_MAP_IMAGE, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().world), new Object[] + {dim, cx, cz})); + } + return true; + } + + if (!prevResult) + { + return true; + } + + int ox = (convertMap(xCoord) - xCoord - SIZE_STD) / 2; + int oz = (convertMap(zCoord) - zCoord - SIZE_STD) / 2; + + byte[] raw = null; + try + { + raw = FileUtils.readFileToByteArray(filename); + } + catch (IOException e) + { + GalacticraftCore.logger.error("Problem reading map file: " + baseFolder.getAbsolutePath() + filename.getName()); + return true; + } + if (raw == null || raw.length != SIZE_STD * SIZE_STD * 2) + { + GalacticraftCore.logger.debug("Warning: unexpected map size is " + raw.length + " for file " + filename.toString()); + return true; + } + + int xstart = Math.max(0, -offsetX - ox); + int zstart = Math.max(0, -offsetZ - oz); + for (int x = xstart; x < SIZE_STD; x++) + { + int imagex = x + offsetX + ox; + if (imagex >= SIZE_STD2) + { + break; + } + for (int z = zstart; z < SIZE_STD; z++) + { + int imageZ = z + oz + offsetZ;// + SIZE_STD - 1 - z; + if (imageZ >= SIZE_STD2) + { + break; + } + + int arrayIndex = (x * SIZE_STD + z) * 2; + int biome = ((int) raw[arrayIndex]) & 255; + int height = ((int) raw[arrayIndex + 1]) & 255; + + if (height < OCEAN_HEIGHT && biome != 2 && biome != 10) + { + // Includes ponds, lakes and rivers in other biomes + biome = 0; + } + if (height < DEEP_OCEAN && biome == 0) + { + biome = 24; + } + + if (imagex < 0 || imageZ < 0) + { + GalacticraftCore.logger.debug("Outside image " + imagex + "," + imageZ + " - " + "x=" + x + " z=" + z + " offsetX=" + offsetX + " offsetZ = " + offsetZ + " ox=" + ox + " oz=" + oz); + } + else + { + array[imagex + SIZE_STD2 * imageZ] = convertBiomeColour(biome, height) + 0xff000000; + } + } + } + return false; + } + + private static File makeFileName(File folder, int cx, int cz) + { + return new File(folder, "overworld" + cx / SIZE_STD2 + "_" + cz / SIZE_STD2 + ".bin"); + } + + private static int getBiomeBaseColour(int biomeId) + { + Biome biomegenbase = Biome.REGISTRY.getObjectById(biomeId); + return biomegenbase == null ? Biomes.OCEAN.getWaterColor() : biomegenbase.getWaterColor(); + } + + public static int convertBiomeColour(int in, int height) + { + int rv; + int s = MapUtil.biomeColours.size(); + if (in >= 128 && in < 128 + s) + { + in -= 128; + } + if (in >= s) + { + rv = getBiomeBaseColour(in); + } + else + { + BlockVec3 bv = MapUtil.biomeColours.get(in); + if (bv == null) + { + rv = getBiomeBaseColour(in); + } + else + { + if (bv.z > 0 && MapUtil.rand.nextInt(100) < bv.z) + { + rv = bv.y; + } + else + { + rv = bv.x; + } + } + } + if (rv == 0x9c2424 && MapUtil.rand.nextInt(2) == 0) + { + rv = 0xbfa384; + } + if (height < OCEAN_HEIGHT) + { + return rv; + } + if (height > 92 && (in == 3 || in == 20 || in == 31 || in == 33 || in == 34)) + { + if (MapUtil.rand.nextInt(8) > 98 - height) + { + rv = Material.SNOW.getMaterialMapColor().colorValue; + } + } + float factor = (height - 68F) / 94F; + return ColorUtil.lighten(rv, factor); + } + + private static void setupColours() + { + // ocean = Ocean(0) colour(112) "Ocean" + MapUtil.biomeColours.add(new BlockVec3(Material.WATER.getMaterialMapColor().colorValue, 0, 0)); + // plains = Plains(1) colour(9286496) "Plains" + MapUtil.biomeColours.add(new BlockVec3(0x497436, 0, 0)); + // desert = Desert(2) colour(16421912) "Desert" + MapUtil.biomeColours.add(new BlockVec3(0xd4cd98, Material.CACTUS.getMaterialMapColor().colorValue, 3)); + // extremeHills = Hills(3, false) colour(6316128) "Extreme Hills" + MapUtil.biomeColours.add(new BlockVec3(0x4d654c, Material.ROCK.getMaterialMapColor().colorValue, 15)); + // forest = Forest(4, 0) colour(353825) "Forest" + MapUtil.biomeColours.add(new BlockVec3(0x3c7521, 0x295416, 45)); + // taiga = Taiga(5, 0) colour(747097) "Taiga" + MapUtil.biomeColours.add(new BlockVec3(0x627e61, 0x172a17, 18)); + // swampland = Swamp(6) colour(522674) "Swampland" + MapUtil.biomeColours.add(new BlockVec3(0x43541b, 0x111309, 25)); + // river = River(7) colour(255) "River" + MapUtil.biomeColours.add(new BlockVec3(0x497436, 0, 0)); + MapUtil.biomeColours.add(new BlockVec3(0, 0, 0)); + MapUtil.biomeColours.add(new BlockVec3(0, 0, 0)); + // frozenOcean = Ocean(10) colour(9474208) "FrozenOcean" + MapUtil.biomeColours.add(new BlockVec3(Material.ICE.getMaterialMapColor().colorValue, 0, 0)); + // frozenRiver = River(11) colour(10526975) "FrozenRiver" + MapUtil.biomeColours.add(new BlockVec3(Material.ICE.getMaterialMapColor().colorValue, 0, 0)); + // icePlains = Snow(12, false) colour(16777215) "Ice Plains" + MapUtil.biomeColours.add(new BlockVec3(Material.SNOW.getMaterialMapColor().colorValue, 0x497436, 3)); + // iceMountains = Snow(13, false) colour(10526880) "Ice Mountains" + MapUtil.biomeColours.add(new BlockVec3(Material.SNOW.getMaterialMapColor().colorValue, Material.ICE.getMaterialMapColor().colorValue, 5)); + // mushroomIsland = MushroomIsland(14) colour(16711935) "MushroomIsland" + MapUtil.biomeColours.add(new BlockVec3(0x63565f, 0x7c1414, 10)); + // mushroomIslandShore = MushroomIsland(15) colour(10486015) + // "MushroomIslandShore" + MapUtil.biomeColours.add(new BlockVec3(0x6a6066, 0, 0)); + // beach = Beach(16) colour(16440917) "Beach" + MapUtil.biomeColours.add(new BlockVec3(Material.SAND.getMaterialMapColor().colorValue, 0, 0)); + // desertHills = Desert(17) colour(13786898) "DesertHills" + MapUtil.biomeColours.add(new BlockVec3(0xd4cd98, 0, 0)); + // forestHills = Forest(18, 0) colour(2250012) "ForestHills" + MapUtil.biomeColours.add(new BlockVec3(0x3c7521, 0x295416, 35)); + // taigaHills = Taiga(19, 0) colour(1456435) "TaigaHills" + MapUtil.biomeColours.add(new BlockVec3(0x627e61, 0x172a17, 14)); + // extremeHillsEdge = Hills(20, true) colour(7501978) "Extreme Hills + // Edge" + MapUtil.biomeColours.add(new BlockVec3(0x4d654c, 0x497436, 50)); + // jungle = Jungle(21, false) colour(5470985) "Jungle" + MapUtil.biomeColours.add(new BlockVec3(0x176c03, 0x0f4502, 25)); + // jungleHills = Jungle(22, false) colour(2900485) "JungleHills" + MapUtil.biomeColours.add(new BlockVec3(0x176c03, 0x0f4502, 25)); + // jungleEdge = Jungle(23, true) colour(6458135) "JungleEdge" + MapUtil.biomeColours.add(new BlockVec3(0x176c03, 0x0f4502, 25)); + // deepOcean = Ocean(24) colour(48) "Deep Ocean" + MapUtil.biomeColours.add(new BlockVec3(0x2f2fd4, 0, 0)); + // stoneBeach = StoneBeach(25) colour(10658436) "Stone Beach" + MapUtil.biomeColours.add(new BlockVec3(Material.ROCK.getMaterialMapColor().colorValue, 0, 0)); + // coldBeach = Beach(26) colour(16445632) "Cold Beach" + MapUtil.biomeColours.add(new BlockVec3(Material.SAND.getMaterialMapColor().colorValue, Material.SNOW.getMaterialMapColor().colorValue, 75)); + // birchForest = Forest(27, 2)) colour(3175492) "Birch Forest" + MapUtil.biomeColours.add(new BlockVec3(0x516b36, 0x497436, 65)); + // birchForestHills = Forest(28, 2)) colour(2055986) "Birch Forest + // Hills" + MapUtil.biomeColours.add(new BlockVec3(0x516b36, 0x497436, 55)); + // roofedForest = Forest(29, 3) colour(4215066) "Roofed Forest" + MapUtil.biomeColours.add(new BlockVec3(0x9c2424, 0x1e2e18, 98)); + // coldTaiga = Taiga(30, 0) colour(3233098) "Cold Taiga" + MapUtil.biomeColours.add(new BlockVec3(Material.SNOW.getMaterialMapColor().colorValue, 0x172a17, 12)); + // coldTaigaHills = Taiga(31, 0) colour(2375478) "Cold Taiga Hills" + MapUtil.biomeColours.add(new BlockVec3(Material.SNOW.getMaterialMapColor().colorValue, 0x172a17, 12)); + // megaTaiga = Taiga(32, 1) colour(5858897) "Mega Taiga" + MapUtil.biomeColours.add(new BlockVec3(0x172a17, 0x6e4e35, 12)); + // megaTaigaHills = Taiga(33, 1) colour(4542270) "Mega Taiga Hills" + MapUtil.biomeColours.add(new BlockVec3(0x172a17, 0x6e4e35, 12)); + // extremeHillsPlus = Hills(34, true) colour(5271632) "Extreme Hills+" + MapUtil.biomeColours.add(new BlockVec3(0x7b7978, 0x497436, 10)); + // savanna = Savanna(35) colour(12431967) "Savanna" + MapUtil.biomeColours.add(new BlockVec3(0x565529, 0x262304, 20)); + // savannaPlateau = Savanna(36) colour(10984804) "Savanna Plateau" + MapUtil.biomeColours.add(new BlockVec3(0x565529, 0x262304, 14)); + // mesa = Mesa(37, false, false) colour(14238997) "Mesa" + MapUtil.biomeColours.add(new BlockVec3(0xa0521f, 0x712f23, 14)); + // mesaPlateau_F = Mesa(38, false, true) colour(11573093) "Mesa Plateau + // F" + MapUtil.biomeColours.add(new BlockVec3(0xa0521f, 0x712f23, 17)); + // mesaPlateau = Mesa(39, false, false) colour(13274213) "Mesa Plateau" + MapUtil.biomeColours.add(new BlockVec3(0xa0521f, 0x712f23, 20)); + } + + public static void makeVanillaMap(int dim, int chunkXPos, int chunkZPos, File baseFolder, BufferedImage image) + { + World world = WorldUtil.getWorldForDimensionServer(dim); + for (int x0 = -12; x0 <= 12; x0++) + { + for (int z0 = -12; z0 <= 12; z0++) + { + Chunk chunk = world.getChunk(chunkXPos + x0, chunkZPos + z0); + + if (chunk != null) + { + for (int z = 0; z < 16; z++) + { + for (int x = 0; x < 16; x++) + { + int l4 = chunk.getHeightValue(x, z) + 1; + IBlockState state = Blocks.AIR.getDefaultState(); + BlockPos pos = null; + + if (l4 > 1) + { + do + { + --l4; + pos = new BlockPos(x, l4, z); + state = chunk.getBlockState(pos); + } while (state.getMapColor(world, pos) == MapColor.AIR && l4 > 0); + } + + int col = pos != null ? state.getMapColor(world, pos).colorValue : 0; + image.setRGB(x + (x0 + 12) * 16, z + (z0 + 12) * 16, col); + } + } + } + } + } + + try + { + File outputFile = new File(baseFolder, dim + "_" + chunkXPos + "_" + chunkZPos + ".jpg"); + + if (!outputFile.exists() || (outputFile.canWrite() && outputFile.canRead())) + { + ImageIO.write(image, "jpg", outputFile); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + @SideOnly(Side.CLIENT) + public static File getClientMapsFolder() + { + File folder = new File(FMLClientHandler.instance().getClient().gameDir, "assets/galacticraftMaps"); + try + { + if (folder.exists() || folder.mkdirs()) + { + return folder; + } + else + { + System.err.println("Cannot create directory %minecraft%/assets/galacticraftMaps! : " + folder.toString()); + } + } + catch (Exception e) + { + System.err.println(folder.toString()); + e.printStackTrace(); + } + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/OxygenUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/OxygenUtil.java new file mode 100644 index 00000000..a7a68e12 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/OxygenUtil.java @@ -0,0 +1,559 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.HashSet; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockEnchantmentTable; +import net.minecraft.block.BlockFarmland; +import net.minecraft.block.BlockGlass; +import net.minecraft.block.BlockGravel; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.BlockSponge; +import net.minecraft.block.BlockStainedGlass; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.inventory.GuiInventory; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; + +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.item.IBreathableArmor; +import micdoodle8.mods.galacticraft.api.item.IBreathableArmor.EnumGearType; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3Dim; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.fluid.OxygenPressureProtocol; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterOxygenInfinite; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenGear; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenMask; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenDistributor; +import micdoodle8.mods.galacticraft.core.util.BlockUtil.MultiBlockStateHolder; + +public class OxygenUtil +{ + + private static HashSet checked; + + @SideOnly(Side.CLIENT) + public static boolean shouldDisplayTankGui(GuiScreen gui) + { + if (FMLClientHandler.instance().getClient().gameSettings.hideGUI) + { + return false; + } + + if (gui == null) + { + return true; + } + + if (gui instanceof GuiInventory) + { + return false; + } + + return gui instanceof GuiChat; + + } + + public static boolean isAABBInBreathableAirBlock(EntityLivingBase entity) + { + return isAABBInBreathableAirBlock(entity, false); + } + + public static boolean isAABBInBreathableAirBlock(EntityLivingBase entity, boolean testThermal) + { + double y = entity.posY + entity.getEyeHeight(); + double x = entity.posX; + double z = entity.posZ; + + double sx = entity.getEntityBoundingBox().maxX - entity.getEntityBoundingBox().minX; + double sy = entity.getEntityBoundingBox().maxY - entity.getEntityBoundingBox().minY; + double sz = entity.getEntityBoundingBox().maxZ - entity.getEntityBoundingBox().minZ; + + // A good first estimate of head size is that it's the smallest of the + // entity's 3 dimensions (e.g. front to back, for Steve) + double smin = Math.min(sx, Math.min(sy, sz)) / 2; + double offsetXZ = 0.0; + + // If entity is within air lock wall, check adjacent blocks for oxygen + // The value is equal to the max distance from an adjacent oxygen block + // to the edge of a sealer wall + if (entity.world.getBlockState(entity.getPosition()).getBlock() == GCBlocks.airLockSeal) + { + offsetXZ = 0.75F; + } + + return OxygenUtil.isAABBInBreathableAirBlock(entity.world, new AxisAlignedBB(x - smin - offsetXZ, y - smin, z - smin - offsetXZ, x + smin + offsetXZ, y + smin, z + smin + offsetXZ), + testThermal); + } + + public static boolean isAABBInBreathableAirBlock(World world, AxisAlignedBB bb) + { + return isAABBInBreathableAirBlock(world, bb, false); + } + + public static boolean isAABBInBreathableAirBlock(World world, AxisAlignedBB bb, boolean testThermal) + { + final double avgX = (bb.minX + bb.maxX) / 2.0D; + final double avgY = (bb.minY + bb.maxY) / 2.0D; + final double avgZ = (bb.minZ + bb.maxZ) / 2.0D; + + if (testThermal) + { + return OxygenUtil.isInOxygenAndThermalBlock(world, bb); + } + + if (OxygenUtil.inOxygenBubble(world, avgX, avgY, avgZ)) + { + return true; + } + + return OxygenUtil.isInOxygenBlock(world, bb); + } + + public static boolean isInOxygenBlock(World world, AxisAlignedBB bb) + { + int xm = MathHelper.floor(bb.minX + 0.001D); + int xx = MathHelper.floor(bb.maxX - 0.001D); + int ym = MathHelper.floor(bb.minY + 0.001D); + int yy = MathHelper.floor(bb.maxY - 0.001D); + int zm = MathHelper.floor(bb.minZ + 0.001D); + int zz = MathHelper.floor(bb.maxZ - 0.001D); + + OxygenUtil.checked = new HashSet<>(); + if (world.isAreaLoaded(new BlockPos(xm, ym, zm), new BlockPos(xx, yy, zz))) + { + for (int x = xm; x <= xx; ++x) + { + for (int z = zm; z <= zz; ++z) + { + for (int y = ym; y <= yy; ++y) + { + BlockPos pos = new BlockPos(x, y, z); + Block block = world.getBlockState(pos).getBlock(); + if (OxygenUtil.testContactWithBreathableAir(world, block, pos, 0) >= 0) + { + return true; + } + } + } + } + } + + return false; + } + + public static boolean isInOxygenAndThermalBlock(World world, AxisAlignedBB bb) + { + int i = MathHelper.floor(bb.minX + 0.001D); + int j = MathHelper.floor(bb.maxX - 0.001D); + int k = MathHelper.floor(bb.minY + 0.001D); + int l = MathHelper.floor(bb.maxY - 0.001D); + int i1 = MathHelper.floor(bb.minZ + 0.001D); + int j1 = MathHelper.floor(bb.maxZ - 0.001D); + + OxygenUtil.checked = new HashSet<>(); + if (world.isAreaLoaded(new BlockPos(i, k, i1), new BlockPos(j, l, j1))) + { + for (int x = i; x <= j; ++x) + { + for (int y = k; y <= l; ++y) + { + for (int z = i1; z <= j1; ++z) + { + BlockPos pos = new BlockPos(x, y, z); + Block block = world.getBlockState(pos).getBlock(); + if (OxygenUtil.testContactWithBreathableAir(world, block, pos, 0) == 1) // Thermal + // air + // has + // metadata + // 1 + { + return true; + } + } + } + } + } + + return false; + } + + /* + * A simplified version of the breathable air check which checks all 6 sides + * of the given block (because a torch can pass air on all sides) Used in + * BlockUnlitTorch. + */ + public static boolean checkTorchHasOxygen(World world, BlockPos pos) + { + if (OxygenUtil.inOxygenBubble(world, pos.getX() + 0.5D, pos.getY() + 0.6D, pos.getZ() + 0.5D)) + { + return true; + } + OxygenUtil.checked = new HashSet<>(); + BlockVec3 vec = new BlockVec3(pos); + for (int side = 0; side < 6; side++) + { + BlockVec3 sidevec = vec.newVecSide(side); + IBlockState state = sidevec.getBlockState_noChunkLoad(world); + if (OxygenUtil.testContactWithBreathableAir(world, state.getBlock(), sidevec.toBlockPos(), 1) >= 0) + { + return true; + } + } + return false; + } + + /* + * Test whether the given block at (x,y,z) coordinates is either: - + * breathable air (returns true) - solid, or air which is not breathable + * (returns false) - an air-permeable block, for example a torch, in which + * case test the surrounding air-reachable blocks (up to 5 blocks away) and + * return true if breathable air is found in one of them, or false if not. + */ + private static synchronized int testContactWithBreathableAir(World world, Block block, BlockPos pos, int limitCount) + { + checked.add(pos); + if (block == GCBlocks.breatheableAir || block == GCBlocks.brightBreatheableAir) + { + return block.getMetaFromState(world.getBlockState(pos)); + } + + IBlockState state = world.getBlockState(pos); + if (block == null || block.getMaterial(state) == Material.AIR) + { + return -1; + } + + // Test for non-sided permeable or solid blocks first + boolean permeableFlag = false; + if (!(block instanceof BlockLeaves)) + { + if (block.isOpaqueCube(state)) + { + if (block instanceof BlockGravel || block.getMaterial(state) == Material.CLOTH || block instanceof BlockSponge) + { + permeableFlag = true; + } else + { + return -1; + } + } else if (block instanceof BlockGlass || block instanceof BlockStainedGlass) + { + return -1; + } else if (block instanceof BlockLiquid) + { + return -1; + } + for (MultiBlockStateHolder mbsh : OxygenPressureProtocol.newNonPermeableBlockStateList) + { + if (mbsh.getBlock().equals(block)) + { + if (mbsh.getBlockstateList().contains(state)) + { + return -1; + } + } + } + } else + { + permeableFlag = true; + } + + // Testing a non-air, permeable block (for example a torch or a ladder) + if (limitCount < 5) + { + for (EnumFacing side : EnumFacing.VALUES) + { + if (permeableFlag || OxygenUtil.canBlockPassAirOnSide(world, block, pos, side)) + { + BlockPos sidevec = pos.add(side.getXOffset(), side.getYOffset(), side.getZOffset()); + if (!checked.contains(sidevec)) + { + Block newblock = world.getBlockState(sidevec).getBlock(); + int adjResult = OxygenUtil.testContactWithBreathableAir(world, newblock, sidevec, limitCount + 1); + if (adjResult >= 0) + { + return adjResult; + } + } + } + } + } + + return -1; + } + // TODO - performance, could add a 'safe' version of this code (inside world + // borders) + + // TODO - add more performance increase, these sided checks could be done + // once only + private static boolean canBlockPassAirOnSide(World world, Block block, BlockPos vec, EnumFacing side) + { + if (block instanceof IPartialSealableBlock) + { + return !((IPartialSealableBlock) block).isSealed(world, vec, side); + } + + // Half slab seals on the top side or the bottom side according to its + // metadata + if (block instanceof BlockSlab) + { + IBlockState state = world.getBlockState(vec); + int meta = state.getBlock().getMetaFromState(state); + return (((side != EnumFacing.DOWN) || ((meta & 8) != 8)) && ((side != EnumFacing.UP) || ((meta & 8) != 0))); + } + + // Farmland etc only seals on the solid underside + if (block instanceof BlockFarmland || block instanceof BlockEnchantmentTable || block instanceof BlockLiquid) + { + return side != EnumFacing.UP; + } + + if (block instanceof BlockPistonBase) + { + IBlockState state = world.getBlockState(vec); + if (state.getValue(BlockPistonBase.EXTENDED)) + { + int meta0 = state.getBlock().getMetaFromState(state); + EnumFacing facing = BlockPistonBase.getFacing(meta0); + return side != facing; + } + return false; + } + + return !block.isSideSolid(world.getBlockState(vec), world, vec, EnumFacing.byIndex(side.getIndex() ^ 1)); + } + + public static int getDrainSpacing(ItemStack tank, ItemStack tank2) + { + boolean tank1Valid = !tank.isEmpty() && tank.getItem() instanceof ItemOxygenTank && tank.getMaxDamage() - tank.getItemDamage() > 0; + boolean tank2Valid = !tank2.isEmpty() && tank2.getItem() instanceof ItemOxygenTank && tank2.getMaxDamage() - tank2.getItemDamage() > 0; + + if (!tank1Valid && !tank2Valid) + { + return 0; + } + + return 9; + } + + public static boolean hasValidOxygenSetup(EntityPlayerMP player) + { + boolean missingComponent = false; + + GCPlayerStats stats = GCPlayerStats.get(player); + + if (!OxygenUtil.isItemValidForPlayerTankInv(0, stats.getExtendedInventory().getStackInSlot(0))) + { + boolean handled = false; + + for (final ItemStack armorStack : player.inventory.armorInventory) + { + if (!armorStack.isEmpty() && armorStack.getItem() instanceof IBreathableArmor) + { + final IBreathableArmor breathableArmor = (IBreathableArmor) armorStack.getItem(); + + if (breathableArmor.handleGearType(EnumGearType.HELMET)) + { + if (breathableArmor.canBreathe(armorStack, player, EnumGearType.HELMET)) + { + handled = true; + } + } + } + } + + if (!handled) + { + missingComponent = true; + } + } + + if (!OxygenUtil.isItemValidForPlayerTankInv(1, stats.getExtendedInventory().getStackInSlot(1))) + { + boolean handled = false; + + for (final ItemStack armorStack : player.inventory.armorInventory) + { + if (!armorStack.isEmpty() && armorStack.getItem() instanceof IBreathableArmor) + { + final IBreathableArmor breathableArmor = (IBreathableArmor) armorStack.getItem(); + + if (breathableArmor.handleGearType(EnumGearType.GEAR)) + { + if (breathableArmor.canBreathe(armorStack, player, EnumGearType.GEAR)) + { + handled = true; + } + } + } + } + + if (!handled) + { + missingComponent = true; + } + } + + if (!OxygenUtil.isItemValidForPlayerTankInv(2, stats.getExtendedInventory().getStackInSlot(2)) && !OxygenUtil.isItemValidForPlayerTankInv(3, stats.getExtendedInventory().getStackInSlot(3))) + { + boolean handled = false; + + for (final ItemStack armorStack : player.inventory.armorInventory) + { + if (!armorStack.isEmpty() && armorStack.getItem() instanceof IBreathableArmor) + { + final IBreathableArmor breathableArmor = (IBreathableArmor) armorStack.getItem(); + + if (breathableArmor.handleGearType(EnumGearType.TANK1)) + { + if (breathableArmor.canBreathe(armorStack, player, EnumGearType.TANK1)) + { + handled = true; + } + } + + if (breathableArmor.handleGearType(EnumGearType.TANK2)) + { + if (breathableArmor.canBreathe(armorStack, player, EnumGearType.TANK2)) + { + handled = true; + } + } + } + } + + if (!handled) + { + missingComponent = true; + } + } + + return !missingComponent; + } + + public static boolean isItemValidForPlayerTankInv(int slotIndex, ItemStack stack) + { + switch (slotIndex) + { + case 0: + return stack.getItem() instanceof ItemOxygenMask; + case 1: + return stack.getItem() instanceof ItemOxygenGear; + case 2: + case 3: + return stack.getItem() instanceof ItemOxygenTank || stack.getItem() instanceof ItemCanisterOxygenInfinite; + } + + return false; + } + + public static TileEntity[] getAdjacentFluidConnections(TileEntity tile) + { + return getAdjacentFluidConnections(tile, false); + } + + public static TileEntity[] getAdjacentFluidConnections(TileEntity tile, boolean ignoreConnect) + { + TileEntity[] adjacentConnections = new TileEntity[EnumFacing.VALUES.length]; + + if (tile == null) + { + return adjacentConnections; + } + + boolean isMekLoaded = EnergyConfigHandler.isMekanismLoaded(); + + BlockVec3 thisVec = new BlockVec3(tile); + for (EnumFacing direction : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(tile.getWorld(), direction); + + boolean connectable = false; + if (tileEntity instanceof IConnector) + { + connectable = ignoreConnect || ((IConnector) tileEntity).canConnect(direction.getOpposite(), NetworkType.FLUID); + } else if (tileEntity != null) + { + connectable = tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction.getOpposite()) != null; + } + + if (connectable) + { + adjacentConnections[direction.ordinal()] = tileEntity; + } + } + + return adjacentConnections; + } + + public static boolean noAtmosphericCombustion(World world) + { + return noAtmosphericCombustion(world.provider); + } + + public static boolean noAtmosphericCombustion(WorldProvider provider) + { + if (provider instanceof IGalacticraftWorldProvider) + { + return (!((IGalacticraftWorldProvider) provider).isGasPresent(EnumAtmosphericGas.OXYGEN) && !((IGalacticraftWorldProvider) provider).hasBreathableAtmosphere()); + } + + return false; + } + + public static boolean inOxygenBubble(World worldObj, double avgX, double avgY, double avgZ) + { + int dimID = GCCoreUtil.getDimensionID(worldObj); + for (final BlockVec3Dim blockVec : TileEntityOxygenDistributor.loadedTiles) + { + if (blockVec != null && blockVec.dim == dimID) + { + TileEntity tile = blockVec.getTileEntity(); + if (tile instanceof TileEntityOxygenDistributor) + { + if (((TileEntityOxygenDistributor) tile).inBubble(avgX, avgY, avgZ)) + { + return true; + } + } + } + } + + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PlayerUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PlayerUtil.java new file mode 100644 index 00000000..af0f4f2c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PlayerUtil.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; + +import com.mojang.authlib.GameProfile; + +public class PlayerUtil +{ + + public static HashMap knownSkins = new HashMap<>(); + + public static EntityPlayerMP getPlayerForUsernameVanilla(MinecraftServer server, String username) + { + return server.getPlayerList().getPlayerByUsername(username); + } + + public static EntityPlayerMP getPlayerBaseServerFromPlayerUsername(String username, boolean ignoreCase) + { + MinecraftServer server = GCCoreUtil.getServer(); + return getPlayerBaseServerFromPlayerUsername(server, username, ignoreCase); + } + + public static EntityPlayerMP getPlayerBaseServerFromPlayerUsername(MinecraftServer server, String username, boolean ignoreCase) + { + if (server != null) + { + if (ignoreCase) + { + return getPlayerForUsernameVanilla(server, username); + } else + { + Iterator iterator = server.getPlayerList().getPlayers().iterator(); + EntityPlayerMP entityplayermp; + + do + { + if (!iterator.hasNext()) + { + return null; + } + + entityplayermp = (EntityPlayerMP) iterator.next(); + } while (!entityplayermp.getName().equalsIgnoreCase(username)); + + return entityplayermp; + } + } + + GalacticraftCore.logger.error("Warning: Could not find player base server instance for player " + username); + + return null; + } + + public static EntityPlayerMP getPlayerBaseServerFromPlayer(EntityPlayer player, boolean ignoreCase) + { + if (player == null) + { + return null; + } + + if (player instanceof EntityPlayerMP) + { + return (EntityPlayerMP) player; + } + + return PlayerUtil.getPlayerBaseServerFromPlayerUsername(player.getName(), ignoreCase); + } + + @SideOnly(Side.CLIENT) + public static EntityPlayerSP getPlayerBaseClientFromPlayer(EntityPlayer player, boolean ignoreCase) + { + EntityPlayerSP clientPlayer = FMLClientHandler.instance().getClientPlayerEntity(); + + if (clientPlayer == null && player != null) + { + GalacticraftCore.logger.error("Warning: Could not find player base client instance for player " + PlayerUtil.getName(player)); + } + + return clientPlayer; + } + + @SideOnly(Side.CLIENT) + public static GameProfile getOtherPlayerProfile(String name) + { + return knownSkins.get(name); + } + + @SideOnly(Side.CLIENT) + public static GameProfile makeOtherPlayerProfile(String strName, String strUUID) + { + GameProfile profile = null; + for (Object e : FMLClientHandler.instance().getWorldClient().getLoadedEntityList()) + { + if (e instanceof AbstractClientPlayer) + { + GameProfile gp2 = ((AbstractClientPlayer) e).getGameProfile(); + if (gp2.getName().equals(strName)) + { + profile = gp2; + break; + } + } + } + if (profile == null) + { + UUID uuid = strUUID.isEmpty() ? UUID.randomUUID() : UUID.fromString(strUUID); + profile = new GameProfile(uuid, strName); + } + + PlayerUtil.knownSkins.put(strName, profile); + return profile; + } + + @SideOnly(Side.CLIENT) + public static GameProfile getSkinForName(String strName, String strUUID, int dimID) + { + GameProfile profile = FMLClientHandler.instance().getClientPlayerEntity().getGameProfile(); + if (!strName.equals(profile.getName())) + { + profile = PlayerUtil.getOtherPlayerProfile(strName); + if (profile == null) + { + profile = PlayerUtil.makeOtherPlayerProfile(strName, strUUID); + } + if (!profile.getProperties().containsKey("textures")) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_REQUEST_PLAYERSKIN, dimID, new Object[] + {strName})); + } + } + return profile; + } + + public static EntityPlayerMP getPlayerByUUID(UUID theUUID) + { + List players = PlayerUtil.getPlayersOnline(); + EntityPlayerMP entityplayermp; + for (int i = players.size() - 1; i >= 0; --i) + { + entityplayermp = (EntityPlayerMP) players.get(i); + + if (entityplayermp.getUniqueID().equals(theUUID)) + { + return entityplayermp; + } + } + return null; + } + + public static List getPlayersOnline() + { + return GCCoreUtil.getServer().getPlayerList().getPlayers(); + } + + public static boolean isPlayerOnline(EntityPlayerMP player) + { + return player.server.getPlayerList().getPlayers().contains(player); + } + + public static String getName(EntityPlayer player) + { + if (player == null) + return null; + + if (player.getGameProfile() == null) + return null; + + return player.getGameProfile().getName(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PropertyObject.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PropertyObject.java new file mode 100644 index 00000000..519c7001 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/PropertyObject.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.Objects; + +import net.minecraftforge.common.property.IUnlistedProperty; + +/** + * This class was originally created by as + * part of the Botania mod API. Original source: + * https://raw.githubusercontent.com/williewillus/Botania/MC18/src/main/java/vazkii/botania/api/state/PropertyObject.java + *

+ * Use in Galacticraft is permitted under the Botania License: + * http://botaniamod.net/license.php + */ + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; + +public class PropertyObject implements IUnlistedProperty +{ + + private final String name; + private final Class clazz; + private final Predicate validator; + private final Function stringFunction; + + public PropertyObject(String name, Class clazz, Predicate validator, Function stringFunction) + { + this.name = name; + this.clazz = clazz; + this.validator = validator; + this.stringFunction = stringFunction; + } + + public PropertyObject(String name, Class clazz) + { + this(name, clazz, Predicates.alwaysTrue(), new Function() + { + + @Override + public String apply(T input) + { + return Objects.toString(input); + } + }); + } + + @Override + public String getName() + { + return name; + } + + @Override + public boolean isValid(T value) + { + return validator.apply(value); + } + + @Override + public Class getType() + { + return clazz; + } + + @Override + public String valueToString(T value) + { + return stringFunction.apply(value); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RecipeUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RecipeUtil.java new file mode 100644 index 00000000..ba7fb1f0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RecipeUtil.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.util.HashMap; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; + +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.registries.GameData; + +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.inventory.InventoryBuggyBench; +import micdoodle8.mods.galacticraft.core.inventory.InventoryRocketBench; +import micdoodle8.mods.galacticraft.core.recipe.NasaWorkbenchRecipe; + +import ic2.api.item.IC2Items; + +public class RecipeUtil +{ + + @Nonnull + public static ItemStack findMatchingBuggy(InventoryBuggyBench benchStacks) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getBuggyBenchRecipes()) + { + if (recipe.matches(benchStacks)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + @Nonnull + public static ItemStack findMatchingSpaceshipRecipe(InventoryRocketBench inventoryRocketBench) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT1Recipes()) + { + if (recipe.matches(inventoryRocketBench)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + public static void addRecipe(ItemStack result, Object[] obj) + { + CraftingHelper.ShapedPrimer pattern = CraftingHelper.parseShaped(obj); + addCustomRecipe(new ShapedRecipes(result.getItem().getRegistryName().toString(), pattern.width, pattern.height, pattern.input, result)); + } + + public static void addCustomRecipe(IRecipe rec) + { + String modID = Loader.instance().activeModContainer().getModId(); + ResourceLocation newLocation = new ResourceLocation(modID, rec.getRecipeOutput().getItem().getRegistryName().getPath()); + if (CraftingManager.REGISTRY.containsKey(newLocation)) + { + int count = 1; + String newNameBase = newLocation.getPath() + "_"; + while (CraftingManager.REGISTRY.containsKey(newLocation)) + { + newLocation = new ResourceLocation(modID, newNameBase + count++); + } + } + rec.setRegistryName(newLocation); + + GameData.register_impl(rec); + } + + public static void addRocketBenchRecipe(ItemStack result, HashMap input) + { + GalacticraftRegistry.addT1RocketRecipe(new NasaWorkbenchRecipe(result, input)); + } + + public static void addBuggyBenchRecipe(ItemStack result, HashMap input) + { + GalacticraftRegistry.addMoonBuggyRecipe(new NasaWorkbenchRecipe(result, input)); + } + + public static ItemStack getIndustrialCraftItem(String indentifier, String variant) + { + return IC2Items.getItem(indentifier, variant); + } + + /** + * An extended version of areItemStackTagsEqual which ignores LevelUp's + * "NoPlacing" tag on mined blocks + */ + public static boolean areItemStackTagsEqual(ItemStack stackA, ItemStack stackB) + { + if (ItemStack.areItemStackTagsEqual(stackA, stackB)) + return true; + + NBTTagCompound query = null; + if (stackA.getTagCompound() == null && stackB.getTagCompound() != null) + { + query = stackB.getTagCompound(); + } else if (stackA.getTagCompound() != null && stackB.getTagCompound() == null) + { + query = stackA.getTagCompound(); + } + if (query != null) + { + if (query.getKeySet().size() == 1 && query.hasKey("NoPlacing")) + return true; + } + + return false; + } + + /** + * + * @param itemstack - it is assumed this one is not null in calling code + * @param itemstack1 + * @return + */ + public static boolean stacksMatch(ItemStack itemstack, ItemStack itemstack1) + { + return !itemstack1.isEmpty() && itemstack1.getItem() == itemstack.getItem() && (!itemstack.getHasSubtypes() || itemstack.getItemDamage() == itemstack1.getItemDamage()) + && RecipeUtil.areItemStackTagsEqual(itemstack, itemstack1); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RedstoneUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RedstoneUtil.java new file mode 100644 index 00000000..cceb8bf1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/RedstoneUtil.java @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class RedstoneUtil +{ + + /** + * Returns true if the block is being directly powered with a redstone wire, + * lever, etc (generally only used by actual redstone components for onward + * transmission of redstone signal) + */ + public static boolean isBlockReceivingDirectRedstone(World w, BlockPos pos) + { + if (w == null) + { + return false; + } + + // Check up/down without chunk load test first + if (getStrongPower(w, pos.down(), EnumFacing.DOWN) > 0) + { + return true; + } + if (getStrongPower(w, pos.up(), EnumFacing.UP) > 0) + { + return true; + } + + for (EnumFacing facing : EnumFacing.HORIZONTALS) + { + if (getStrongPower_NoChunkLoad(w, pos.offset(facing, 1), facing) > 0) + { + return true; + } + } + + return false; + } + + /** + * Is this block powering in the specified direction Args: x, y, z, + * direction + */ + public static int getStrongPower(World w, BlockPos pos, EnumFacing side) + { + IBlockState bs = w.getBlockState(pos); + return bs.getBlock().getStrongPower(bs, w, pos, side); + } + + public static int getStrongPower_NoChunkLoad(World w, BlockPos pos, EnumFacing side) + { + if (!w.isBlockLoaded(pos, false)) + { + return 0; + } + IBlockState bs = w.getBlockState(pos); + return bs.getBlock().getStrongPower(bs, w, pos, side); + } + + /** + * Returns true if the block is being INDIRECTLY powered e.g by redstone + * passing through another block (similar to how a vanilla piston or + * redstone lamp responds) + * + * INEFFICIENT: (almost as bad as Vanilla!) examines redstone status of 30 + * nearby blocks if there is no redstone power + * + * Note: if the calling block is itself a redstone emitter (!!) its redstone + * output to neighbours will be ignored + */ + public static boolean isBlockReceivingRedstone(World w, BlockPos pos) + { + if (w == null) + { + return false; + } + + // Check up/down without chunk load test first + if (getRedstonePowerIndirect(w, pos.up(1), EnumFacing.UP) > 0) + { + return true; + } + if (getRedstonePowerIndirect(w, pos.down(1), EnumFacing.DOWN) > 0) + { + return true; + } + + for (EnumFacing facing : EnumFacing.HORIZONTALS) + { + if (getRedstonePowerIndirect_NoChunkLoad(w, pos.offset(facing, 1), facing) > 0) + { + return true; + } + } + return false; + } + + public static int getRedstonePowerIndirect_NoChunkLoad(World w, BlockPos pos, EnumFacing side) + { + if (!w.isBlockLoaded(pos, false)) + { + return 0; + } + return getRedstonePowerIndirect(w, pos, side); + } + + public static int getRedstonePowerIndirect(World w, BlockPos pos, EnumFacing facing) + { + IBlockState bs = w.getBlockState(pos); + Block block = bs.getBlock(); + if (block instanceof BlockAir) + { + return 0; + } + return block.shouldCheckWeakPower(bs, w, pos, facing) ? getNeighbourPower_NoChunkLoad(w, pos, facing.getOpposite()) : bs.getWeakPower(w, pos, facing); + } + + /** + * Similar to the vanilla method getStrongPower(BlockPos pos) but more + * efficient - doesn't backtrack, so 15% faster (also the low level code + * here is faster...) + */ + public static int getNeighbourPower_NoChunkLoad(World w, BlockPos pos, EnumFacing skip) + { + int i = 0; + int p; + IBlockState bs; + BlockPos sidePos; + + if (skip != EnumFacing.DOWN) + { + sidePos = pos.add(0, -1, 0); + bs = w.getBlockState(sidePos); + i = bs.getBlock().getStrongPower(bs, w, sidePos, EnumFacing.DOWN); + if (i >= 15) + { + return i; + } + } + + if (skip != EnumFacing.UP) + { + sidePos = pos.add(0, 1, 0); + bs = w.getBlockState(sidePos); + p = bs.getBlock().getStrongPower(bs, w, sidePos, EnumFacing.UP); + if (p >= 15) + { + return p; + } + if (p > i) + i = p; + } + + for (EnumFacing side : EnumFacing.HORIZONTALS) + { + if (side == skip) + { + continue; + } + // This is a slightly faster pos.offset(side) + sidePos = pos.add(side.getXOffset(), 0, side.getZOffset()); + if (!w.isBlockLoaded(sidePos, false)) + { + continue; + } + + bs = w.getBlockState(sidePos); + p = bs.getBlock().getStrongPower(bs, w, sidePos, side); + if (p >= 15) + { + return p; + } + if (p > i) + i = p; + } + + return i; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/StackSorted.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/StackSorted.java new file mode 100644 index 00000000..09d26117 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/StackSorted.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; + +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +public class StackSorted +{ + + private final Item item; + private final int meta; + + public StackSorted(Block block, int meta) + { + this(Item.getItemFromBlock(block), meta); + } + + public StackSorted(Item item, int meta) + { + this.item = item; + this.meta = meta; + } + + public Item getItem() + { + return item; + } + + public int getMeta() + { + return meta; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof StackSorted)) + { + return false; + } + if (obj == this) + { + return true; + } + + StackSorted other = (StackSorted) obj; + return new EqualsBuilder().append(item, other.item).append(meta, other.meta).isEquals(); + } + + @Override + public int hashCode() + { + return new HashCodeBuilder().append(item).append(meta).toHashCode(); + } + + @Override + public String toString() + { + return "Item:(" + item + "),Meta:(" + meta + ")"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/WorldUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/WorldUtil.java new file mode 100644 index 00000000..8666bd81 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/WorldUtil.java @@ -0,0 +1,1675 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util; + +import java.io.File; +import java.io.FileInputStream; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; +import java.util.TreeMap; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketEntityEffect; +import net.minecraft.network.play.server.SPacketPlayerAbilities; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.network.play.server.SPacketSetExperience; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.WorldType; + +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.server.permission.PermissionAPI; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IAntiGrav; +import micdoodle8.mods.galacticraft.api.entity.IWorldTransferCallback; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Moon; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.galaxies.Satellite; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.recipe.SpaceStationRecipe; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.IOrbitDimension; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.api.world.SpaceStationType; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.SpaceStationWorldData; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.EntityCelestialFake; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ItemParaChute; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTelemetry; + +import com.google.common.collect.Lists; +import com.google.common.collect.MapMaker; +import com.google.common.collect.Maps; + +import it.unimi.dsi.fastutil.ints.Int2ReferenceMap; +import org.apache.commons.lang3.ArrayUtils; + +/** + * This class will be removed and all methods + * moved to a dedicated utility class. At this time all planned utility classes + * will be internal and non-accessible. + *

+ * Certain methods commonly used will be moved into the API package for use by addon developers. + * When more information is available each method will be annotated accordingly with {@link ReplaceWith} + *

+ * + */ +@ForRemoval(deadline = "4.1.0") +public class WorldUtil +{ + + /** + * Dimension IDs and providers (providers are -26 or -27 by default) + */ + public static HashMap registeredSpaceStations; + + /** + * Dimension IDs and provider names + */ + public static Map dimNames = new TreeMap<>(); + public static Map> celestialMapCache = new MapMaker().weakKeys().makeMap(); + public static List registeredPlanets; + + public static float getGravityFactor(Entity entity) + { + if (entity.world.provider instanceof IGalacticraftWorldProvider) + { + final IGalacticraftWorldProvider customProvider = (IGalacticraftWorldProvider) entity.world.provider; + float returnValue = MathHelper.sqrt(0.08F / (0.08F - customProvider.getGravity())); + if (returnValue > 2.5F) + { + returnValue = 2.5F; + } + if (returnValue < 0.75F) + { + returnValue = 0.75F; + } + return returnValue; + } + if (entity instanceof IAntiGrav) + { + } + return 1F; + } + + public static Vector3 getWorldColor(World world) + { + return new Vector3(1, 1, 1); + } + + public static WorldProvider getProviderForNameServer(String par1String) + { + String nameToFind = par1String; + if (par1String.contains("$")) + { + final String[] twoDimensions = par1String.split("\\$"); + nameToFind = twoDimensions[0]; + } + if (nameToFind == null) + { + return null; + } + + for (Map.Entry element : WorldUtil.dimNames.entrySet()) + { + if (nameToFind.equalsIgnoreCase(element.getValue())) + { + return WorldUtil.getProviderForDimensionServer(element.getKey()); + } + } + + GalacticraftCore.logger.info("Failed to find matching world for '" + par1String + "'"); + return null; + } + + @SideOnly(Side.CLIENT) + public static WorldProvider getProviderForNameClient(String par1String) + { + String nameToFind = par1String; + if (par1String.contains("$")) + { + final String[] twoDimensions = par1String.split("\\$"); + nameToFind = twoDimensions[0]; + } + if (nameToFind == null) + { + return null; + } + + for (Map.Entry element : WorldUtil.dimNames.entrySet()) + { + if (nameToFind.equalsIgnoreCase(element.getValue())) + { + return WorldUtil.getProviderForDimensionClient(element.getKey()); + } + } + + GalacticraftCore.logger.info("Failed to find matching world for '" + par1String + "'"); + return null; + } + + public static void initialiseDimensionNames() + { + WorldProvider provider = WorldUtil.getProviderForDimensionServer(ConfigManagerCore.idDimensionOverworld); + WorldUtil.dimNames.put(ConfigManagerCore.idDimensionOverworld, provider.getDimensionType().getName()); + } + + /** + * This will *load* all the GC dimensions which the player has access to + * (taking account of space station permissions). Loading the dimensions + * through Forge activates any chunk loaders or forced chunks in that + * dimension, if the dimension was not previously loaded. This may place + * load on the server. + * + * @param tier - the rocket tier to test + * @param playerBase - the player who will be riding the rocket (needed for + * space station permissions) + * @return a List of integers which are the dimension IDs + */ + public static List getPossibleDimensionsForSpaceshipTier(int tier, EntityPlayerMP playerBase) + { + List temp = new ArrayList<>(); + + if (!ConfigManagerCore.disableRocketsToOverworld) + { + temp.add(ConfigManagerCore.idDimensionOverworld); + } + + for (Integer element : WorldUtil.registeredPlanets) + { + if (element == ConfigManagerCore.idDimensionOverworld) + { + continue; + } + WorldProvider provider = WorldUtil.getProviderForDimensionServer(element); + + if (provider != null) + { + if (provider instanceof IGalacticraftWorldProvider) + { + if (((IGalacticraftWorldProvider) provider).canSpaceshipTierPass(tier)) + { + temp.add(element); + } + } else + { + temp.add(element); + } + } + } + + for (Integer element : WorldUtil.registeredSpaceStations.keySet()) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, element, null); + + if (!ConfigManagerCore.spaceStationsRequirePermission || data.getAllowedAll() || data.getAllowedPlayers().contains(PlayerUtil.getName(playerBase)) + || ArrayUtils.contains(playerBase.server.getPlayerList().getOppedPlayerNames(), playerBase.getName())) + { + // Satellites always reachable from their own homeworld or from + // its other satellites + if (playerBase != null) + { + int currentWorld = playerBase.dimension; + // Player is on homeworld + if (currentWorld == data.getHomePlanet()) + { + temp.add(element); + continue; + } + if (playerBase.world.provider instanceof IOrbitDimension) + { + // Player is currently on another space station around + // the same planet + final SpaceStationWorldData dataCurrent = SpaceStationWorldData.getStationData(playerBase.world, playerBase.dimension, null); + if (dataCurrent.getHomePlanet() == data.getHomePlanet()) + { + temp.add(element); + continue; + } + } + } + + // Testing dimension is a satellite, but with a different + // homeworld - test its tier + WorldProvider homeWorld = WorldUtil.getProviderForDimensionServer(data.getHomePlanet()); + + if (homeWorld != null) + { + if (homeWorld instanceof IGalacticraftWorldProvider) + { + if (((IGalacticraftWorldProvider) homeWorld).canSpaceshipTierPass(tier)) + { + temp.add(element); + } + } else + { + temp.add(element); + } + } + } + } + + return temp; + } + + public static CelestialBody getReachableCelestialBodiesForDimensionID(int id) + { + List celestialBodyList = Lists.newArrayList(); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredMoons().values()); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredPlanets().values()); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredSatellites().values()); + + for (CelestialBody cBody : celestialBodyList) + { + if (cBody.isReachable()) + { + if (cBody.getDimensionID() == id) + { + return cBody; + } + } + } + + return null; + } + + public static CelestialBody getReachableCelestialBodiesForName(String name) + { + List celestialBodyList = Lists.newArrayList(); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredMoons().values()); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredPlanets().values()); + celestialBodyList.addAll(GalaxyRegistry.getRegisteredSatellites().values()); + + for (CelestialBody cBody : celestialBodyList) + { + if (cBody.isReachable()) + { + if (cBody.getName().equals(name)) + { + return cBody; + } + } + } + + return null; + } + + /** + * CAUTION: this loads the dimension if it is not already loaded. This can + * cause server load if used too frequently or with a list of multiple + * dimensions. + * + * @param id + * @return + */ + public static World getWorldForDimensionServer(int id) + { + MinecraftServer theServer = GCCoreUtil.getServer(); + if (theServer == null) + { + GalacticraftCore.logger.debug("Called WorldUtil server side method but FML returned no server - is this a bug?"); + return null; + } + return theServer.getWorld(id); + } + + /** + * CAUTION: this loads the dimension if it is not already loaded. This can + * cause server load if used too frequently or with a list of multiple + * dimensions. + * + * @param id + * @return + */ + public static WorldProvider getProviderForDimensionServer(int id) + { + World ws = getWorldForDimensionServer(id); + if (ws != null) + { + return ws.provider; + } + return null; + } + + @SideOnly(Side.CLIENT) + public static WorldProvider getProviderForDimensionClient(int id) + { + World ws = ClientProxyCore.mc.world; + if (ws != null && GCCoreUtil.getDimensionID(ws) == id) + { + return ws.provider; + } + return DimensionManager.createProviderFor(id); + } + + /** + * This will *load* all the GC dimensions which the player has access to + * (taking account of space station permissions). Loading the dimensions + * through Forge activates any chunk loaders or forced chunks in that + * dimension, if the dimension was not previously loaded. This may place + * load on the server. + * + * @param tier - the rocket tier to test + * @param playerBase - the player who will be riding the rocket (needed for + * checking space station permissions) + * @return a Map of the names of the dimension vs. the dimension IDs + */ + public static HashMap getArrayOfPossibleDimensions(int tier, EntityPlayerMP playerBase) + { + List ids = WorldUtil.getPossibleDimensionsForSpaceshipTier(tier, playerBase); + final HashMap map = new HashMap<>(ids.size(), 1F); + + for (Integer id : ids) + { + CelestialBody celestialBody = getReachableCelestialBodiesForDimensionID(id); + + // It's a space station + if (id > 0 && celestialBody == null) + { + celestialBody = GalacticraftCore.satelliteSpaceStation; + // This no longer checks whether a WorldProvider can be created, + // for performance reasons (that causes the dimension to load + // unnecessarily at map building stage) + if (playerBase != null) + { + final SpaceStationWorldData data = SpaceStationWorldData.getStationData(playerBase.world, id, null); + map.put(celestialBody.getName() + "$" + data.getOwner() + "$" + data.getSpaceStationName() + "$" + id + "$" + data.getHomePlanet(), id); + } + } else if (celestialBody == GalacticraftCore.planetOverworld) + { + map.put(celestialBody.getName(), id); + } else + { + WorldProvider provider = WorldUtil.getProviderForDimensionServer(id); + if (celestialBody != null && provider != null) + { + if (provider instanceof IGalacticraftWorldProvider && !(provider instanceof IOrbitDimension) || GCCoreUtil.getDimensionID(provider) == 0) + { + map.put(celestialBody.getName(), GCCoreUtil.getDimensionID(provider)); + } + } + } + } + + ArrayList cBodyList = new ArrayList<>(); + cBodyList.addAll(GalaxyRegistry.getRegisteredPlanets().values()); + cBodyList.addAll(GalaxyRegistry.getRegisteredMoons().values()); + + for (CelestialBody body : cBodyList) + { + if (!body.isReachable()) + { + map.put(body.getTranslatedName() + "*", body.getDimensionID()); + } + } + + WorldUtil.celestialMapCache.put(playerBase, map); + return map; + } + + /** + * Get the cached version of getArrayOfPossibleDimensions() to reduce server + * load + unwanted dimension loading The cache will be updated every time + * the 'proper' version of getArrayOfPossibleDimensions is called. + * + * @param tier - the rocket tier to test + * @param playerBase - the player who will be riding the rocket (needed for + * checking space station permissions) + * @return a Map of the names of the dimension vs. the dimension IDs + */ + public static HashMap getArrayOfPossibleDimensionsAgain(int tier, EntityPlayerMP playerBase) + { + HashMap map = WorldUtil.celestialMapCache.get(playerBase); + if (map != null) + { + return map; + } + return getArrayOfPossibleDimensions(tier, playerBase); + } + + public static void unregisterSpaceStations() + { + if (WorldUtil.registeredSpaceStations != null) + { + for (Integer registeredID : WorldUtil.registeredSpaceStations.keySet()) + { + DimensionManager.unregisterDimension(registeredID); + } + + WorldUtil.registeredSpaceStations = null; + } + } + + public static void registerSpaceStations(MinecraftServer theServer, File spaceStationList) + { + // WorldUtil.registeredSpaceStations = WorldUtil.getExistingSpaceStationList(spaceStationList); + WorldUtil.registeredSpaceStations = Maps.newHashMap(); + if (theServer == null || !spaceStationList.exists() && !spaceStationList.isDirectory()) + { + return; + } + + final File[] var2 = spaceStationList.listFiles(); + + if (var2 != null) + { + for (File var5 : var2) + { + if (var5.getName().startsWith("spacestation_") && var5.getName().endsWith(".dat")) + { + try + { + // Note: this is kind of a hacky way of doing this, + // loading the NBT from each space station file + // during dimension registration, to find out what each + // space station's provider IDs are. + + String name = var5.getName(); + SpaceStationWorldData worldDataTemp = new SpaceStationWorldData(name); + name = name.substring(13, name.length() - 4); + int registeredID = Integer.parseInt(name); + + FileInputStream fileinputstream = new FileInputStream(var5); + NBTTagCompound nbttagcompound = CompressedStreamTools.readCompressed(fileinputstream); + fileinputstream.close(); + worldDataTemp.readFromNBT(nbttagcompound.getCompoundTag("data")); + + // Search for id in server-defined statically loaded + // dimensions + int index = Arrays.binarySearch(ConfigManagerCore.staticLoadDimensions, registeredID); + + int providerID = index >= 0 ? worldDataTemp.getDimensionIdStatic() : worldDataTemp.getDimensionIdDynamic(); + boolean registrationOK = false; + if (!DimensionManager.isDimensionRegistered(registeredID)) + { + DimensionManager.registerDimension(registeredID, WorldUtil.getDimensionTypeById(providerID)); + registrationOK = true; + } else if (GalacticraftRegistry.isDimensionTypeIDRegistered(providerID)) + { + registrationOK = DimensionManager.getProviderType(registeredID).getId() == providerID; + if (!registrationOK) + { + try + { + Class sponge = Class.forName("org.spongepowered.common.world.WorldManager"); + Field dtDI = sponge.getDeclaredField("dimensionTypeByDimensionId"); + dtDI.setAccessible(true); + Int2ReferenceMap result = (Int2ReferenceMap) dtDI.get(null); + if (result != null) + { + result.put(registeredID, WorldUtil.getDimensionTypeById(providerID)); + GalacticraftCore.logger.info("Re-registered dimension type " + providerID); + } + registrationOK = true; + } catch (ClassNotFoundException ignore) + { + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + if (registrationOK) + { + WorldUtil.registeredSpaceStations.put(registeredID, providerID); + if (index >= 0) + { + theServer.getWorld(registeredID); + } + WorldUtil.dimNames.put(registeredID, "Space Station " + registeredID); + } else + { + GalacticraftCore.logger.error("Dimension already registered to another mod: unable to register space station dimension " + registeredID); + } + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + + // for (Integer registeredID : WorldUtil.registeredSpaceStations) + // { + // int id = Arrays.binarySearch(ConfigManagerCore.staticLoadDimensions, registeredID); + // + // if (!DimensionManager.isDimensionRegistered(registeredID)) + // { + // if (id >= 0) + // { + // DimensionManager.registerDimension(registeredID, ConfigManagerCore.idDimensionOverworldOrbitStatic); + // theServer.getWorld(registeredID); + // } + // else + // { + // DimensionManager.registerDimension(registeredID, ConfigManagerCore.idDimensionOverworldOrbit); + // } + // } + // else + // { + // GCLog.severe("Dimension already registered to another mod: unable to register space station dimension " + registeredID); + // } + // } + } + + /** + * Call this on FMLServerStartingEvent to register a planet which has a + * dimension ID. Now returns a boolean to indicate whether registration was + * successful.

NOTE: Planets and Moons dimensions should normally be + * initialised at server init If you do not do this, you must find your own + * way to register the dimension in DimensionManager and you must find your + * own way to include the cached provider name in WorldUtil.dimNames

+ * IMPORTANT: GalacticraftRegistry.registerDimension() must always be called + * in parallel with this meaning the CelestialBodies are iterated in the + * same order when registered there and here. + * + * The defaultID should be 0, and the id should be both a dimension ID and a + * DimensionType id. + */ + public static boolean registerPlanet(int id, boolean initialiseDimensionAtServerInit, int defaultID) + { + if (WorldUtil.registeredPlanets == null) + { + WorldUtil.registeredPlanets = new ArrayList<>(); + } + + if (initialiseDimensionAtServerInit) + { + if (!DimensionManager.isDimensionRegistered(id)) + { + DimensionManager.registerDimension(id, WorldUtil.getDimensionTypeById(id)); + GalacticraftCore.logger.info("Registered Dimension: " + id); + WorldUtil.registeredPlanets.add(id); + } else if (DimensionManager.getProviderType(id).getId() == id && GalacticraftRegistry.isDimensionTypeIDRegistered(id)) + { + GalacticraftCore.logger.info("Re-registered dimension: " + id); + WorldUtil.registeredPlanets.add(id); + } else + { + GalacticraftCore.logger.error("Dimension already registered: unable to register planet dimension " + id); + // Add 0 to the list to preserve the correct order of the + // other planets (e.g. if server/client initialise with + // different dimension IDs in configs, the order becomes + // important for figuring out what is going on) + WorldUtil.registeredPlanets.add(defaultID); + return false; + } + DimensionType dt = WorldUtil.getDimensionTypeById(id); + WorldProvider wp = dt.createDimension(); + WorldUtil.dimNames.put(id, WorldUtil.getDimensionName(wp)); + return true; + } + + // Not to be initialised - still add to the registered planets list (for + // hotloading later?) + WorldUtil.registeredPlanets.add(id); + return true; + } + + public static void unregisterPlanets() + { + if (WorldUtil.registeredPlanets != null) + { + for (Integer var1 : WorldUtil.registeredPlanets) + { + DimensionManager.unregisterDimension(var1); + GalacticraftCore.logger.info("Unregistered Dimension: " + var1); + } + + WorldUtil.registeredPlanets = null; + } + WorldUtil.dimNames.clear(); + } + + public static void registerPlanetClient(Integer dimID, int providerIndex) + { + int typeID = GalacticraftRegistry.getDimensionTypeID(providerIndex); + + if (typeID == 0) + { + GalacticraftCore.logger.error("Server dimension " + dimID + " has no match on client due to earlier registration problem."); + } else if (dimID == 0) + { + GalacticraftCore.logger.error("Client dimension " + providerIndex + " has no match on server - probably a server dimension ID conflict problem."); + } else if (!WorldUtil.registeredPlanets.contains(dimID)) + { + WorldUtil.registeredPlanets.add(dimID); + DimensionManager.registerDimension(dimID, WorldUtil.getDimensionTypeById(typeID)); + } else + { + GalacticraftCore.logger.error("Dimension already registered to another mod: unable to register planet dimension " + dimID); + } + } + + public static SpaceStationWorldData bindSpaceStationToNewDimension(World world, EntityPlayerMP player, int homePlanetID) + { + int dynamicProviderID = -1; + int staticProviderID = -1; + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + if (satellite.getParentPlanet().getDimensionID() == homePlanetID) + { + dynamicProviderID = satellite.getDimensionID(); + staticProviderID = satellite.getDimensionIdStatic(); + } + } + if (dynamicProviderID == -1 || staticProviderID == -1) + { + throw new RuntimeException("Space station being bound on bad provider IDs!"); + } + int newID = DimensionManager.getNextFreeDimId(); + SpaceStationWorldData data = WorldUtil.createSpaceStation(world, newID, homePlanetID, dynamicProviderID, staticProviderID, player); + dimNames.put(newID, "Space Station " + newID); + GCPlayerStats stats = GCPlayerStats.get(player); + stats.getSpaceStationDimensionData().put(homePlanetID, newID); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_CLIENT_ID, GCCoreUtil.getDimensionID(player.world), new Object[] + {WorldUtil.spaceStationDataToString(stats.getSpaceStationDimensionData())}), player); + return data; + } + + public static SpaceStationWorldData createSpaceStation(World world, int dimID, int homePlanetID, int dynamicProviderID, int staticProviderID, EntityPlayerMP player) + { + if (!DimensionManager.isDimensionRegistered(dimID)) + { + if (ConfigManagerCore.keepLoadedNewSpaceStations) + { + ConfigManagerCore.setLoaded(dimID); + } + + int id = Arrays.binarySearch(ConfigManagerCore.staticLoadDimensions, dimID); + + if (id >= 0) + { + DimensionManager.registerDimension(dimID, WorldUtil.getDimensionTypeById(staticProviderID)); + WorldUtil.registeredSpaceStations.put(dimID, staticProviderID); + } else + { + DimensionManager.registerDimension(dimID, WorldUtil.getDimensionTypeById(dynamicProviderID)); + WorldUtil.registeredSpaceStations.put(dimID, dynamicProviderID); + } + } else + { + GalacticraftCore.logger.error("Dimension already registered to another mod: unable to register space station dimension " + dimID); + } + + for (WorldServer server : world.getMinecraftServer().worlds) + { + GalacticraftCore.packetPipeline.sendToDimension(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_LIST, GCCoreUtil.getDimensionID(server), WorldUtil.getSpaceStationList()), + GCCoreUtil.getDimensionID(server)); + } + return SpaceStationWorldData.getStationData(world, dimID, homePlanetID, dynamicProviderID, staticProviderID, player); + } + + public static Entity transferEntityToDimension(Entity entity, int dimensionID, WorldServer world) + { + return WorldUtil.transferEntityToDimension(entity, dimensionID, world, true, null); + } + + /** + * It is not necessary to use entity.setDead() following calling this + * method. If the entity left the old world it was in, it will now + * automatically be removed from that old world before the next update tick. + * (See WorldUtil.removeEntityFromWorld()) + */ + public static Entity transferEntityToDimension(Entity entity, int dimensionID, WorldServer world, boolean transferInv, EntityAutoRocket ridingRocket) + { + if (!world.isRemote) + { + MinecraftServer mcServer = world.getMinecraftServer(); + + if (mcServer != null) + { + final WorldServer var6 = mcServer.getWorld(dimensionID); + + if (var6 == null) + { + GalacticraftCore.logger.error("Cannot Transfer Entity to Dimension: Could not get World for Dimension " + dimensionID); + return null; + } + + final ITeleportType type = GalacticraftRegistry.getTeleportTypeForDimension(var6.provider.getClass()); + + if (type != null) + { + return WorldUtil.teleportEntity(var6, entity, dimensionID, type, transferInv, ridingRocket); + } + } + } + + return null; + } + + private static Entity teleportEntity(World worldNew, Entity entity, int dimID, ITeleportType type, boolean transferInv, EntityAutoRocket ridingRocket) + { + Entity otherRiddenEntity = null; + if (entity.getRidingEntity() != null) + { + if (entity.getRidingEntity() instanceof EntitySpaceshipBase) + { + entity.startRiding(entity.getRidingEntity()); + } else if (entity.getRidingEntity() instanceof EntityCelestialFake) + { + Entity e = entity.getRidingEntity(); + e.removePassengers(); + e.setDead(); + } else + { + otherRiddenEntity = entity.getRidingEntity(); + entity.dismountRidingEntity(); + } + } + + boolean dimChange = entity.world != worldNew; + // Make sure the entity is added to the correct chunk in the OLD world + // so that it will be properly removed later if it needs to be unloaded + // from that world + entity.world.updateEntityWithOptionalForce(entity, false); + EntityPlayerMP player = null; + Vector3 spawnPos = null; + int oldDimID = GCCoreUtil.getDimensionID(entity.world); + + if (ridingRocket != null) + { + NBTTagCompound nbt = new NBTTagCompound(); + ridingRocket.isDead = false; + ridingRocket.removePassengers(); + ridingRocket.writeToNBTOptional(nbt); + + ((WorldServer) ridingRocket.world).getEntityTracker().untrack(ridingRocket); + removeEntityFromWorld(ridingRocket.world, ridingRocket, true); + + ridingRocket = (EntityAutoRocket) EntityList.createEntityFromNBT(nbt, worldNew); + + if (ridingRocket != null) + { + ridingRocket.setWaitForPlayer(true); + + if (ridingRocket instanceof IWorldTransferCallback) + { + ((IWorldTransferCallback) ridingRocket).onWorldTransferred(worldNew); + } + } + } + + if (dimChange) + { + if (entity instanceof EntityPlayerMP) + { + player = (EntityPlayerMP) entity; + World worldOld = player.world; + + GCPlayerStats stats = GCPlayerStats.get(player); + stats.setUsingPlanetSelectionGui(false); + + player.dimension = dimID; + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("DEBUG: Sending respawn packet to player for dim " + dimID); + } + player.connection.sendPacket(new SPacketRespawn(dimID, worldNew.getDifficulty(), worldNew.getWorldInfo().getTerrainType(), player.interactionManager.getGameType())); + player.server.getPlayerList().updatePermissionLevel(player); + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + if (WorldUtil.registeredSpaceStations.containsKey(dimID)) + // TODO This has never been effective before due to the + // earlier bug - what does it actually do? + { + NBTTagCompound var2 = new NBTTagCompound(); + SpaceStationWorldData.getStationData(worldNew, dimID, player).writeToNBT(var2); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_DATA, GCCoreUtil.getDimensionID(player.world), new Object[] + {dimID, var2}), player); + } + } + + removeEntityFromWorld(worldOld, player, true); + + if (ridingRocket != null) + { + spawnPos = new Vector3(ridingRocket); + } else + { + spawnPos = type.getPlayerSpawnLocation((WorldServer) worldNew, player); + } + forceMoveEntityToPos(entity, (WorldServer) worldNew, spawnPos, true); + + GalacticraftCore.logger.info("Server attempting to transfer player " + PlayerUtil.getName(player) + " to dimension " + GCCoreUtil.getDimensionID(worldNew)); + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(worldNew), new Object[] + {}), player); + } + player.capabilities.isFlying = false; + + player.server.getPlayerList().preparePlayer(player, (WorldServer) worldOld); + player.interactionManager.setWorld((WorldServer) worldNew); + player.connection.sendPacket(new SPacketPlayerAbilities(player.capabilities)); + player.server.getPlayerList().updateTimeAndWeatherForPlayer(player, (WorldServer) worldNew); + player.server.getPlayerList().syncPlayerInventory(player); + + for (Object o : player.getActivePotionEffects()) + { + PotionEffect var10 = (PotionEffect) o; + player.connection.sendPacket(new SPacketEntityEffect(player.getEntityId(), var10)); + } + + player.connection.sendPacket(new SPacketSetExperience(player.experience, player.experienceTotal, player.experienceLevel)); + } else + // Non-player entity transfer i.e. it's an EntityCargoRocket or an + // empty rocket + { + ArrayList tList = null; + if (entity instanceof EntitySpaceshipBase) + { + tList = ((EntitySpaceshipBase) entity).getTelemetry(); + } + WorldUtil.removeEntityFromWorld(entity.world, entity, true); + + NBTTagCompound nbt = new NBTTagCompound(); + entity.isDead = false; + entity.writeToNBTOptional(nbt); + entity = EntityList.createEntityFromNBT(nbt, worldNew); + + if (entity == null) + { + return null; + } + + if (entity instanceof IWorldTransferCallback) + { + ((IWorldTransferCallback) entity).onWorldTransferred(worldNew); + } + + forceMoveEntityToPos(entity, (WorldServer) worldNew, new Vector3(entity), true); + + if (tList != null && tList.size() > 0) + { + for (TileEntityTelemetry t : tList) + { + t.addTrackedEntity(entity); + } + } + } + } else // Same dimension player transfer + if (entity instanceof EntityPlayerMP) + { + player = (EntityPlayerMP) entity; + player.closeScreen(); + GCPlayerStats stats = GCPlayerStats.get(player); + stats.setUsingPlanetSelectionGui(false); + + if (ridingRocket != null) + { + spawnPos = new Vector3(ridingRocket); + } else + { + spawnPos = type.getPlayerSpawnLocation((WorldServer) entity.world, (EntityPlayerMP) entity); + } + forceMoveEntityToPos(entity, (WorldServer) worldNew, spawnPos, false); + + GalacticraftCore.logger.info("Server attempting to transfer player " + PlayerUtil.getName(player) + " within same dimension " + GCCoreUtil.getDimensionID(worldNew)); + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(worldNew), new Object[] + {}), player); + } + player.capabilities.isFlying = false; + } + + // Update PlayerStatsGC + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + if (ridingRocket == null && type.useParachute() && stats.getExtendedInventory().getStackInSlot(4) != null + && stats.getExtendedInventory().getStackInSlot(4).getItem() instanceof ItemParaChute) + { + GCPlayerHandler.setUsingParachute(player, stats, true); + } else + { + GCPlayerHandler.setUsingParachute(player, stats, false); + } + + if (stats.getRocketStacks() != null && !stats.getRocketStacks().isEmpty()) + { + for (int stack = 0; stack < stats.getRocketStacks().size(); stack++) + { + if (transferInv) + { + if (stats.getRocketStacks().get(stack).isEmpty()) + { + if (stack == stats.getRocketStacks().size() - 1) + { + if (stats.getRocketItem() != null) + { + stats.getRocketStacks().set(stack, new ItemStack(stats.getRocketItem(), 1, stats.getRocketType())); + } + } else if (stack == stats.getRocketStacks().size() - 2) + { + ItemStack launchpad = stats.getLaunchpadStack(); + stats.getRocketStacks().set(stack, launchpad == null ? ItemStack.EMPTY : launchpad); + stats.setLaunchpadStack(null); + } + } + } else + { + stats.getRocketStacks().set(stack, ItemStack.EMPTY); + } + } + } + + if (transferInv && stats.getChestSpawnCooldown() == 0) + { + stats.setChestSpawnVector(type.getParaChestSpawnLocation((WorldServer) entity.world, player, new Random())); + stats.setChestSpawnCooldown(200); + } + } + + if (ridingRocket != null) + { + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) worldNew); + ridingRocket.forceSpawn = true; + worldNew.spawnEntity(ridingRocket); + ridingRocket.setWorld(worldNew); + worldNew.updateEntityWithOptionalForce(ridingRocket, true); + CompatibilityManager.forceLoadChunksEnd((WorldServer) worldNew, previous); + entity.startRiding(ridingRocket); + GalacticraftCore.logger.debug("Entering rocket at : " + entity.posX + "," + entity.posZ + " rocket at: " + ridingRocket.posX + "," + ridingRocket.posZ); + } else if (otherRiddenEntity != null) + { + if (dimChange) + { + World worldOld = otherRiddenEntity.world; + NBTTagCompound nbt = new NBTTagCompound(); + otherRiddenEntity.writeToNBTOptional(nbt); + removeEntityFromWorld(worldOld, otherRiddenEntity, true); + otherRiddenEntity = EntityList.createEntityFromNBT(nbt, worldNew); + worldNew.spawnEntity(otherRiddenEntity); + otherRiddenEntity.setWorld(worldNew); + } + otherRiddenEntity.setPositionAndRotation(entity.posX, entity.posY - 10, entity.posZ, otherRiddenEntity.rotationYaw, otherRiddenEntity.rotationPitch); + worldNew.updateEntityWithOptionalForce(otherRiddenEntity, true); + } + + if (entity instanceof EntityPlayerMP) + { + if (dimChange) + FMLCommonHandler.instance().firePlayerChangedDimensionEvent((EntityPlayerMP) entity, oldDimID, dimID); + + // Spawn in a lander if appropriate + type.onSpaceDimensionChanged(worldNew, (EntityPlayerMP) entity, ridingRocket != null); + } + + return entity; + } + + public static Entity teleportEntitySimple(World worldNew, int dimID, EntityPlayerMP player, Vector3 spawnPos) + { + if (player.getRidingEntity() != null) + { + player.getRidingEntity().setDead(); + player.dismountRidingEntity(); + } + + World worldOld = player.world; + int oldDimID = GCCoreUtil.getDimensionID(worldOld); + boolean dimChange = worldOld != worldNew; + // Make sure the entity is added to the correct chunk in the OLD world + // so that it will be properly removed later if it needs to be unloaded + // from that world + worldOld.updateEntityWithOptionalForce(player, false); + + if (dimChange) + { + player.dimension = dimID; + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("DEBUG: Sending respawn packet to player for dim " + dimID); + } + player.connection.sendPacket(new SPacketRespawn(dimID, player.world.getDifficulty(), player.world.getWorldInfo().getTerrainType(), player.interactionManager.getGameType())); + if (worldNew.provider instanceof WorldProviderSpaceStation) + { + if (WorldUtil.registeredSpaceStations.containsKey(dimID)) + // TODO This has never been effective before due to the earlier + // bug - what does it actually do? + { + NBTTagCompound var2 = new NBTTagCompound(); + SpaceStationWorldData.getStationData(worldNew, dimID, player).writeToNBT(var2); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_SPACESTATION_DATA, GCCoreUtil.getDimensionID(player.world), new Object[] + {dimID, var2}), player); + } + } + removeEntityFromWorld(worldOld, player, true); + forceMoveEntityToPos(player, (WorldServer) worldNew, spawnPos, true); + GalacticraftCore.logger.info("Server attempting to transfer player " + PlayerUtil.getName(player) + " to dimension " + GCCoreUtil.getDimensionID(worldNew)); + + player.server.getPlayerList().preparePlayer(player, (WorldServer) worldOld); + player.interactionManager.setWorld((WorldServer) worldNew); + player.server.getPlayerList().updateTimeAndWeatherForPlayer(player, (WorldServer) worldNew); + player.server.getPlayerList().syncPlayerInventory(player); + + for (Object o : player.getActivePotionEffects()) + { + PotionEffect var10 = (PotionEffect) o; + player.connection.sendPacket(new SPacketEntityEffect(player.getEntityId(), var10)); + } + + player.connection.sendPacket(new SPacketSetExperience(player.experience, player.experienceTotal, player.experienceLevel)); + FMLCommonHandler.instance().firePlayerChangedDimensionEvent(player, oldDimID, dimID); + } else + { + forceMoveEntityToPos(player, (WorldServer) worldNew, spawnPos, false); + GalacticraftCore.logger.info("Server attempting to transfer player " + PlayerUtil.getName(player) + " within same dimension " + GCCoreUtil.getDimensionID(worldNew)); + } + player.capabilities.isFlying = false; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_RESET_THIRD_PERSON, GCCoreUtil.getDimensionID(player.world), new Object[] + {}), player); + + // Update PlayerStatsGC + GCPlayerStats stats = GCPlayerStats.get(player); + GCPlayerHandler.setUsingParachute(player, stats, false); + + return player; + } + + /** + * This correctly positions an entity at spawnPos in worldNew loading and + * adding it to the chunk as required. + * + * @param entity + * @param worldNew + * @param spawnPos + * @param spawnRequired - set this to true if the entity changed dimension + * so that a spawn in the new world is needed + */ + public static void forceMoveEntityToPos(Entity entity, WorldServer worldNew, Vector3 spawnPos, boolean spawnRequired) + { + boolean previous = CompatibilityManager.forceLoadChunks(worldNew); + ChunkPos pair = worldNew.getChunk(spawnPos.intX() >> 4, spawnPos.intZ() >> 4).getPos(); + GalacticraftCore.logger.debug("Loading first chunk in new dimension at " + pair.x + "," + pair.z); + worldNew.getChunkProvider().loadChunk(pair.x, pair.z); + entity.setLocationAndAngles(spawnPos.x, spawnPos.y, spawnPos.z, entity.rotationYaw, entity.rotationPitch); + WorldServer fromWorld = ((WorldServer) entity.world); + if (spawnRequired) + { + ((WorldServer) entity.world).getEntityTracker().untrack(entity); + entity.forceSpawn = true; + worldNew.spawnEntity(entity); + entity.setWorld(worldNew); + } + worldNew.updateEntityWithOptionalForce(entity, true); + if (entity instanceof EntityPlayerMP) + { + ((EntityPlayerMP) entity).connection.setPlayerLocation(spawnPos.x, spawnPos.y, spawnPos.z, entity.rotationYaw, entity.rotationPitch); + } + CompatibilityManager.forceLoadChunksEnd(worldNew, previous); + } + + public static WorldServer getStartWorld(WorldServer unchanged) + { + if (ConfigManagerCore.challengeSpawnHandling) + { + WorldProvider wp = WorldUtil.getProviderForNameServer("planet.asteroids"); + WorldServer worldNew = (wp == null) ? null : (WorldServer) wp.world; + if (worldNew != null) + { + return worldNew; + } + } + return unchanged; + } + + @SideOnly(Side.CLIENT) + public static EntityPlayer forceRespawnClient(int dimID, int par2, String par3, int par4) + { + SPacketRespawn fakePacket = new SPacketRespawn(dimID, EnumDifficulty.byId(par2), WorldType.byName(par3), WorldSettings.getGameTypeById(par4)); + FMLClientHandler.instance().getClient().player.connection.handleRespawn(fakePacket); + return FMLClientHandler.instance().getClientPlayerEntity(); + } + + /** + * This is similar to World.removeEntityDangerously() but without the risk + * of concurrent modification error + */ + private static void removeEntityFromWorld(World var0, Entity var1, boolean directlyRemove) + { + if (var1 instanceof EntityPlayer) + { + final EntityPlayer var2 = (EntityPlayer) var1; + var2.closeScreen(); + var0.playerEntities.remove(var2); + var0.updateAllPlayersSleepingFlag(); + } + + int i = var1.chunkCoordX; + int j = var1.chunkCoordZ; + + if (var1.addedToChunk && var0.isBlockLoaded(new BlockPos(i << 4, 63, j << 4), true)) + { + var0.getChunk(i, j).removeEntity(var1); + } + + if (directlyRemove) + { + List l = new ArrayList<>(); + l.add(var1); + var0.unloadEntities(l); + // This will automatically remove the entity from the world and the + // chunk prior to the world's next update entities tick + // It is important NOT to directly modify World.loadedEntityList + // here, as the World will be currently iterating through that list + // when updating each entity (see the line + // "this.loadedEntityList.remove(i--);" in World.updateEntities() + } + + var1.isDead = false; + } + + public static SpaceStationRecipe getSpaceStationRecipe(int planetID) + { + for (SpaceStationType type : GalacticraftRegistry.getSpaceStationData()) + { + if (type.getWorldToOrbitID() == planetID) + { + return type.getRecipeForSpaceStation(); + } + } + + return null; + } + + /** + * This must return planets in the same order their provider IDs were + * registered in GalacticraftRegistry by GalacticraftCore. + */ + public static List getPlanetList() + { + List objList = new ArrayList<>(); + objList.add(getPlanetListInts()); + return objList; + } + + public static Integer[] getPlanetListInts() + { + Integer[] iArray = new Integer[WorldUtil.registeredPlanets.size()]; + + for (int i = 0; i < iArray.length; i++) + { + iArray[i] = WorldUtil.registeredPlanets.get(i); + } + + return iArray; + } + + /** + * What's important here is that Galacticraft and the server both register + * the same reachable Galacticraft planets (and their provider types) in the + * same order. See WorldUtil.registerPlanet(). + * + * Even if there are dimension conflicts or other problems, the planets must + * be registered in the same order on both client and server. This should + * happen automatically if Galacticraft versions match, and if planets + * modules match (including Galacticraft-Planets and any other sub-mods). + * + * It is NOT a good idea for sub-mods to make the registration order of + * planets variable or dependent on configs. + */ + public static void decodePlanetsListClient(List data) + { + try + { + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.info("GC connecting to server: received planets dimension ID list."); + } + if (WorldUtil.registeredPlanets != null) + { + for (Integer registeredID : WorldUtil.registeredPlanets) + { + if (DimensionManager.isDimensionRegistered(registeredID)) + { + DimensionManager.unregisterDimension(registeredID); + } + } + } + WorldUtil.registeredPlanets = new ArrayList<>(); + + String ids = ""; + if (data.size() > 0) + { + // Start the provider index at offset 2 to skip the two + // Overworld Orbit dimensions + // (this will be iterating through + // GalacticraftRegistry.worldProviderIDs) + int providerIndex = GalaxyRegistry.getRegisteredSatellites().size() * 2; + if (data.get(0) instanceof Integer) + { + for (Object o : data) + { + WorldUtil.registerPlanetClient((Integer) o, providerIndex); + providerIndex++; + ids += ((Integer) o).toString() + " "; + } + } else if (data.get(0) instanceof Integer[]) + { + for (Object o : (Integer[]) data.get(0)) + { + WorldUtil.registerPlanetClient((Integer) o, providerIndex); + providerIndex++; + ids += ((Integer) o).toString() + " "; + } + } + } + if (ConfigManagerCore.enableDebug) + { + GalacticraftCore.logger.debug("GC clientside planet dimensions registered: " + ids); + WorldProvider dimMoon = WorldUtil.getProviderForNameClient("moon.moon"); + if (dimMoon != null) + { + GalacticraftCore.logger.debug("Crosscheck: Moon is " + GCCoreUtil.getDimensionID(dimMoon)); + } + WorldProvider dimMars = WorldUtil.getProviderForNameClient("planet.mars"); + if (dimMars != null) + { + GalacticraftCore.logger.debug("Crosscheck: Mars is " + GCCoreUtil.getDimensionID(dimMars)); + } + WorldProvider dimAst = WorldUtil.getProviderForNameClient("planet.asteroids"); + if (dimAst != null) + { + GalacticraftCore.logger.debug("Crosscheck: Asteroids is " + GCCoreUtil.getDimensionID(dimAst)); + } + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + public static List getSpaceStationList() + { + List objList = new ArrayList<>(); + objList.add(getSpaceStationListInts()); + return objList; + } + + public static Integer[] getSpaceStationListInts() + { + Integer[] iArray = new Integer[WorldUtil.registeredSpaceStations.size() * 2]; + + int i = 0; + for (Map.Entry e : WorldUtil.registeredSpaceStations.entrySet()) + { + iArray[i] = e.getKey(); + iArray[i + 1] = e.getValue(); + i += 2; + } + + // for (int i = 0; i < iArray.length; i++) + // { + // iArray[i] = WorldUtil.registeredSpaceStations.get(i); + // } + + return iArray; + } + + public static void decodeSpaceStationListClient(List data) + { + try + { + if (WorldUtil.registeredSpaceStations != null) + { + for (Integer registeredID : WorldUtil.registeredSpaceStations.keySet()) + { + DimensionManager.unregisterDimension(registeredID); + } + } + WorldUtil.registeredSpaceStations = Maps.newHashMap(); + + if (data.size() > 0) + { + if (data.get(0) instanceof Integer) + { + for (int i = 0; i < data.size(); i += 2) + { + registerSSdim((Integer) data.get(i), (Integer) data.get(i + 1)); + } + // for (Object dimID : data) + // { + // registerSSdim((Integer) dimID); + // } + } else if (data.get(0) instanceof Integer[]) + { + Integer[] array = ((Integer[]) data.get(0)); + for (int i = 0; i < array.length; i += 2) + { + registerSSdim(array[i], array[i + 1]); + } + // for (Object dimID : (Integer[]) data.get(0)) + // { + // registerSSdim((Integer) dimID); + // } + } + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + private static void registerSSdim(Integer dimID, Integer providerKey) + { + if (!WorldUtil.registeredSpaceStations.containsKey(dimID)) + { + if (!DimensionManager.isDimensionRegistered(dimID)) + { + WorldUtil.registeredSpaceStations.put(dimID, providerKey); + DimensionManager.registerDimension(dimID, WorldUtil.getDimensionTypeById(providerKey)); + } else + { + GalacticraftCore.logger.error("Dimension already registered on client: unable to register space station dimension " + dimID); + } + } + } + + public static void toCelestialSelection(EntityPlayerMP player, GCPlayerStats stats, int tier) + { + player.dismountRidingEntity(); + stats.setSpaceshipTier(tier); + + HashMap map = WorldUtil.getArrayOfPossibleDimensions(tier, player); + String dimensionList = ""; + int count = 0; + for (Entry entry : map.entrySet()) + { + dimensionList = dimensionList.concat(entry.getKey() + (count < map.entrySet().size() - 1 ? "?" : "")); + count++; + } + + boolean canCreateStations = PermissionAPI.hasPermission(player, Constants.PERMISSION_CREATE_STATION); + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_UPDATE_DIMENSION_LIST, GCCoreUtil.getDimensionID(player.world), new Object[] + {PlayerUtil.getName(player), dimensionList, canCreateStations}), player); + stats.setUsingPlanetSelectionGui(true); + stats.setSavedPlanetList(dimensionList); + Entity fakeEntity = new EntityCelestialFake(player.world, player.posX, player.posY, player.posZ); + player.world.spawnEntity(fakeEntity); + player.startRiding(fakeEntity); + } + + public static Vector3 getFootprintPosition(World world, float rotation, Vector3 startPosition, BlockVec3 playerCenter) + { + Vector3 position = startPosition.clone(); + float footprintScale = 0.375F; + + int mainPosX = position.intX(); + int mainPosY = position.intY(); + int mainPosZ = position.intZ(); + BlockPos posMain = new BlockPos(mainPosX, mainPosY, mainPosZ); + + // If the footprint is hovering over air... + if (world.getBlockState(posMain).getBlock().isAir(world.getBlockState(posMain), world, posMain)) + { + position.x += (playerCenter.x - mainPosX); + position.z += (playerCenter.z - mainPosZ); + + BlockPos pos1 = new BlockPos(position.intX(), position.intY(), position.intZ()); + // If the footprint is still over air.... + Block b2 = world.getBlockState(pos1).getBlock(); + if (b2 != null && b2.isAir(world.getBlockState(pos1), world, pos1)) + { + for (EnumFacing direction : EnumFacing.VALUES) + { + BlockPos offsetPos = posMain.offset(direction); + if (direction != EnumFacing.DOWN && direction != EnumFacing.UP) + { + if (!world.getBlockState(offsetPos).getBlock().isAir(world.getBlockState(offsetPos), world, offsetPos)) + { + position.x += direction.getXOffset(); + position.z += direction.getZOffset(); + break; + } + } + } + } + } + + mainPosX = position.intX(); + mainPosZ = position.intZ(); + + double x0 = (Math.sin((45 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.x; + double x1 = (Math.sin((135 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.x; + double x2 = (Math.sin((225 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.x; + double x3 = (Math.sin((315 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.x; + double z0 = (Math.cos((45 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.z; + double z1 = (Math.cos((135 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.z; + double z2 = (Math.cos((225 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.z; + double z3 = (Math.cos((315 - rotation) / Constants.RADIANS_TO_DEGREES_D) * footprintScale) + position.z; + + double xMin = Math.min(Math.min(x0, x1), Math.min(x2, x3)); + double xMax = Math.max(Math.max(x0, x1), Math.max(x2, x3)); + double zMin = Math.min(Math.min(z0, z1), Math.min(z2, z3)); + double zMax = Math.max(Math.max(z0, z1), Math.max(z2, z3)); + + if (xMin < mainPosX) + { + position.x += mainPosX - xMin; + } + + if (xMax > mainPosX + 1) + { + position.x -= xMax - (mainPosX + 1); + } + + if (zMin < mainPosZ) + { + position.z += mainPosZ - zMin; + } + + if (zMax > mainPosZ + 1) + { + position.z -= zMax - (mainPosZ + 1); + } + + return position; + } + + public static String spaceStationDataToString(HashMap data) + { + StringBuilder builder = new StringBuilder(); + Iterator> it = data.entrySet().iterator(); + while (it.hasNext()) + { + Map.Entry e = it.next(); + builder.append(e.getKey()); + builder.append("$"); + builder.append(e.getValue()); + if (it.hasNext()) + { + builder.append("?"); + } + } + return builder.toString(); + } + + public static HashMap stringToSpaceStationData(String input) + { + HashMap data = Maps.newHashMap(); + if (!input.isEmpty()) + { + String[] str0 = input.split("\\?"); + for (String element : str0) + { + String[] str1 = element.split("\\$"); + data.put(Integer.parseInt(str1[0]), Integer.parseInt(str1[1])); + } + } + return data; + } + + public static String getDimensionName(WorldProvider wp) + { + if (wp instanceof IGalacticraftWorldProvider) + { + CelestialBody cb = ((IGalacticraftWorldProvider) wp).getCelestialBody(); + if (cb != null && !(cb instanceof Satellite)) + { + return cb.getTranslationKey(); + } + } + + if (GCCoreUtil.getDimensionID(wp) == ConfigManagerCore.idDimensionOverworld) + { + return "overworld"; + } + + return wp.getDimensionType().getName(); + } + + private static void insertChecklistEntries(CelestialBody body, List bodiesDone, List> checklistValues) + { + if (body.isReachable()) + { + int insertPos = 0; + for (CelestialBody prevBody : bodiesDone) + { + if (body.getTierRequirement() >= prevBody.getTierRequirement()) + { + insertPos++; + } + } + List checklist = Lists.newArrayList(); + checklist.add(body.getTranslationKey()); + checklist.addAll(body.getChecklistKeys()); + checklistValues.add(insertPos, checklist); + bodiesDone.add(body); + } + } + + public static List> getAllChecklistKeys() + { + List> checklistValues = Lists.newArrayList(); + List bodiesDone = Lists.newArrayList(); + + for (Planet planet : GalaxyRegistry.getRegisteredPlanets().values()) + { + insertChecklistEntries(planet, bodiesDone, checklistValues); + } + + for (Moon moon : GalaxyRegistry.getRegisteredMoons().values()) + { + insertChecklistEntries(moon, bodiesDone, checklistValues); + } + + for (Satellite satellite : GalaxyRegistry.getRegisteredSatellites().values()) + { + insertChecklistEntries(satellite, bodiesDone, checklistValues); + } + + return checklistValues; + } + + public static DimensionType getDimensionTypeById(int id) + { + for (DimensionType dimensiontype : DimensionType.values()) + { + if (dimensiontype.getId() == id) + { + return dimensiontype; + } + } + + GalacticraftCore.logger.error("There was a problem getting WorldProvider type " + id); + GalacticraftCore.logger.error("(possibly this is a conflict, check Galacticraft config.)"); + return null; + } + + public static void markAdjacentPadForUpdate(World worldIn, BlockPos pos) + { + BlockPos offsetPos; + for (int dX = -2; dX <= 2; dX++) + { + for (int dZ = -2; dZ <= 2; dZ++) + { + offsetPos = pos.add(dX, 0, dZ); + final IBlockState blockState = worldIn.getBlockState(offsetPos); + + if (blockState.getBlock() == GCBlocks.landingPadFull) + { + worldIn.notifyBlockUpdate(offsetPos, blockState, blockState, 3); + } + } + } + } + + public static void setNextMorning(WorldServer world) + { + if (world.provider instanceof WorldProviderSpace) + { + long current = ((WorldProviderSpace) world.provider).preTickTime; + long dayLength = ((WorldProviderSpace) world.provider).getDayLength(); + if (dayLength <= 0) + return; + world.setWorldTime(current - current % dayLength + dayLength); + } else + { + long newTime = world.getWorldTime(); + for (WorldServer worldServer : GCCoreUtil.getWorldServerList(world)) + { + if (worldServer == world) + continue; + if (worldServer.provider instanceof WorldProviderSpace) + { + ((WorldProviderSpace) worldServer.provider).adjustTime(newTime); + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/CelestialList.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/CelestialList.java new file mode 100644 index 00000000..da1729ec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/CelestialList.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util.list; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; + +import com.google.common.collect.ImmutableMap; + +public class CelestialList extends ArrayList +{ + + private static final long serialVersionUID = 1L; + private Map celestialListMap; + + public static CelestialList create() + { + return new CelestialList<>(); + } + + @SafeVarargs + public static CelestialList of(CelestialList... lists) + { + List temp = new ArrayList<>(); + for (List l : lists) + { + temp.addAll(l); + } + return new CelestialList<>(temp); + } + + public CelestialList(Collection s) + { + super(s); + } + + public CelestialList() + { + super(); + this.celestialListMap = new HashMap<>(); + } + + private T mapPut(String name, T t) + {//@noformat + if (celestialListMap.containsKey(name)) { return celestialListMap.get(name); } + return celestialListMap.put(name, t); + } + + @Override + public boolean add(T e) + {//@noformat + if (this.contains(e)) { return false; } + mapPut(e.getName(), e); + return super.add(e); + } + + @Override + public boolean addAll(Collection c) + {//@noformat + for (T t : c) { add(t); } + return true; + } + + public Map getRegistered() + { + return ImmutableMap.copyOf(this.celestialListMap); + } + + public ImmutableCelestialList toUnmodifiableList() + { + return ImmutableCelestialList.unmodifiable(this); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/Immutable.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/Immutable.java new file mode 100644 index 00000000..89f7bfe9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/Immutable.java @@ -0,0 +1,287 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util.list; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ListIterator; +import java.util.NoSuchElementException; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.function.Predicate; + +import com.google.common.collect.ObjectArrays; + +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkPositionIndex; + +abstract class Immutable extends ArrayList implements Serializable +{ + + private static final long serialVersionUID = -3175142460104260006L; + static final int SPLITERATOR_CHARACTERISTICS = Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED; + static final Object[] EMPTY_ARRAY = new Object[0]; + + public Immutable() + {} + + public Immutable(Collection collection) + { + super(collection); + } + + /** + * Returns an unmodifiable iterator across the elements in this collection. + */ + @Override + public abstract Immutable.Iterator iterator(); + + @Override + public Spliterator spliterator() + { + return Spliterators.spliterator(this, SPLITERATOR_CHARACTERISTICS); + } + + @Override + public final Object[] toArray() + { + int size = size(); + if (size == 0) + { + return EMPTY_ARRAY; + } + Object[] result = new Object[size]; + copyIntoArray(result, 0); + return result; + } + + @Override + public final T[] toArray(T[] other) + { + checkNotNull(other); + int size = size(); + if (other.length < size) + { + other = ObjectArrays.newArray(other, size); + } + else if (other.length > size) + { + other[size] = null; + } + copyIntoArray(other, 0); + return other; + } + + int copyIntoArray(Object[] dst, int offset) + { + for (E e : this) + { + dst[offset++] = e; + } + return offset; + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean add(E e) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean remove(Object object) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean addAll(Collection newElements) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean removeAll(Collection oldElements) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean removeIf(Predicate filter) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final boolean retainAll(Collection elementsToKeep) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the collection unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final void clear() + { + throw new UnsupportedOperationException(); + } + + public static abstract class Iterator implements ListIterator + { + + private final int size; + private int position; + + /** + * Returns the element with the specified index. This method is called + * by {@link #next()}. + */ + protected abstract E get(int index); + + protected Iterator(int size) + { + this(size, 0); + } + + protected Iterator(int size, int position) + { + checkPositionIndex(position, size); + this.size = size; + this.position = position; + } + + protected Iterator() + { + this.size = 0; + this.position = 0; + } + + @Override + public final boolean hasNext() + { + return position < size; + } + + @Override + public final E next() + { + if (!hasNext()) + { + throw new NoSuchElementException(); + } + return get(position++); + } + + @Override + public final int nextIndex() + { + return position; + } + + @Override + public final boolean hasPrevious() + { + return position > 0; + } + + @Override + public final E previous() + { + if (!hasPrevious()) + { + throw new NoSuchElementException(); + } + return get(--position); + } + + @Override + public final int previousIndex() + { + return position - 1; + } + + /** + * Guaranteed to throw an exception and leave the underlying data + * unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final void add(E e) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the underlying data + * unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final void set(E e) + { + throw new UnsupportedOperationException(); + } + + /** + * Guaranteed to throw an exception and leave the underlying data + * unmodified. + * + * @throws UnsupportedOperationException always + */ + @Deprecated + @Override + public final void remove() + { + throw new UnsupportedOperationException(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/ImmutableCelestialList.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/ImmutableCelestialList.java new file mode 100644 index 00000000..2c4e79b8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/util/list/ImmutableCelestialList.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.util.list; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import micdoodle8.mods.galacticraft.api.galaxies.CelestialObject; + +public class ImmutableCelestialList extends Immutable +{ + + private static final long serialVersionUID = -186156409078238142L; + + @SafeVarargs + public static ImmutableCelestialList from(CelestialList... lists) + { + List temp = new ArrayList<>(); + for (List l : lists) + { + temp.addAll(l); + } + return new ImmutableCelestialList<>(temp); + } + + public static ImmutableCelestialList of(Collection collection) + { + return new ImmutableCelestialList<>(collection); + } + + static ImmutableCelestialList unmodifiable(CelestialList celestialList) + { + return new ImmutableCelestialList<>(celestialList); + } + + public ImmutableCelestialList() + { + super(); + } + + public ImmutableCelestialList(Collection collection) + { + super(collection); + } + + @Override + public Immutable.Iterator iterator() + { + return listIterator(); + } + + @Override + public Immutable.Iterator listIterator() + { + return listIterator(0); + } + + @Override + public Immutable.Iterator listIterator(int index) + { + return new Immutable.Iterator(size(), index) + { + + @Override + protected E get(int index) + { + return ImmutableCelestialList.this.get(index); + } + }; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/ChunkLoadingCallback.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/ChunkLoadingCallback.java new file mode 100644 index 00000000..20c9d3bc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/ChunkLoadingCallback.java @@ -0,0 +1,320 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map.Entry; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.ForgeChunkManager.LoadingCallback; +import net.minecraftforge.common.ForgeChunkManager.Ticket; +import net.minecraftforge.common.config.Configuration; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.GCLog; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; + +public class ChunkLoadingCallback implements LoadingCallback +{ + private static HashMap>> chunkLoaderList = new HashMap<>(); + + + private static boolean loaded; + private static boolean configLoaded; + private static Configuration config; + private static boolean loadOnLogin; + private static boolean dirtyData; + + @Override + public void ticketsLoaded(List tickets, World world) + { + for (Ticket ticket : tickets) + { + NBTTagCompound nbt = ticket.getModData(); + + if (nbt != null) + { + int tileX = nbt.getInteger("ChunkLoaderTileX"); + int tileY = nbt.getInteger("ChunkLoaderTileY"); + int tileZ = nbt.getInteger("ChunkLoaderTileZ"); + TileEntity tile = world.getTileEntity(new BlockPos(tileX, tileY, tileZ)); + + if (tile instanceof IChunkLoader) + { + ((IChunkLoader) tile).onTicketLoaded(ticket, false); + } + } + } + } + + public static void loadConfig(File file) + { + if (!ChunkLoadingCallback.configLoaded) + { + ChunkLoadingCallback.config = new Configuration(file); + } + + try + { + ChunkLoadingCallback.loadOnLogin = ChunkLoadingCallback.config.get("CHUNKLOADING", "LoadOnLogin", true, "If you don't want each player's chunks to load when they log in, set to false.").getBoolean(true); + } catch (final Exception e) + { + GCLog.severe("Problem loading chunkloading config (\"core.conf\")"); + } finally + { + if (ChunkLoadingCallback.config.hasChanged()) + { + ChunkLoadingCallback.config.save(); + } + + ChunkLoadingCallback.configLoaded = true; + } + } + + public static void addToList(World world, int x, int y, int z, String playerName) + { + HashMap> dimensionMap = ChunkLoadingCallback.chunkLoaderList.get(playerName); + + if (dimensionMap == null) + { + dimensionMap = new HashMap<>(); + ChunkLoadingCallback.chunkLoaderList.put(playerName, dimensionMap); + } + + HashSet chunkLoaders = dimensionMap.get(world.provider.getDimension()); + + if (chunkLoaders == null) + { + chunkLoaders = new HashSet<>(); + } + + chunkLoaders.add(new BlockPos(x, y, z)); + dimensionMap.put(GCCoreUtil.getDimensionID(world), chunkLoaders); + ChunkLoadingCallback.chunkLoaderList.put(playerName, dimensionMap); + ChunkLoadingCallback.dirtyData = true; + } + + public static void forceChunk(Ticket ticket, World world, int x, int y, int z, String playerName) + { + ChunkLoadingCallback.addToList(world, x, y, z, playerName); + ChunkPos chunkPos = new ChunkPos(x >> 4, z >> 4); + ForgeChunkManager.forceChunk(ticket, chunkPos); + } + + public static void save(WorldServer world) + { + if (!ChunkLoadingCallback.dirtyData) + { + return; + } + + File saveDir = ChunkLoadingCallback.getSaveDir(); + + if (saveDir != null) + { + File saveFile = new File(saveDir, "chunkloaders.dat"); + + if (!saveFile.exists()) + { + try + { + if (!saveFile.createNewFile()) + { + GCLog.severe("Could not create chunk loader data file: " + saveFile.getAbsolutePath()); + } + } catch (IOException e) + { + GCLog.severe("Could not create chunk loader data file: " + saveFile.getAbsolutePath()); + e.printStackTrace(); + } + } + + FileOutputStream fos = null; + try + { + fos = new FileOutputStream(saveFile); + } catch (FileNotFoundException e) + { + e.printStackTrace(); + } + if (fos != null) + { + DataOutputStream dataStream = new DataOutputStream(fos); + try + { + dataStream.writeInt(ChunkLoadingCallback.chunkLoaderList.size()); + + for (Entry>> playerEntry : ChunkLoadingCallback.chunkLoaderList.entrySet()) + { + dataStream.writeUTF(playerEntry.getKey()); + dataStream.writeInt(playerEntry.getValue().size()); + + for (Entry> dimensionEntry : playerEntry.getValue().entrySet()) + { + dataStream.writeInt(dimensionEntry.getKey()); + dataStream.writeInt(dimensionEntry.getValue().size()); + + for (BlockPos coords : dimensionEntry.getValue()) + { + dataStream.writeInt(coords.getX()); + dataStream.writeInt(coords.getY()); + dataStream.writeInt(coords.getZ()); + } + } + } + } catch (IOException e) + { + e.printStackTrace(); + } + try + { + dataStream.close(); + fos.close(); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + ChunkLoadingCallback.dirtyData = false; + } + + private static File getSaveDir() + { + if (DimensionManager.getWorld(0) != null) + { + File saveDir = new File(DimensionManager.getCurrentSaveRootDirectory(), "galacticraft"); + + if (!saveDir.exists()) + { + if (!saveDir.mkdirs()) + { + GCLog.severe("Could not create chunk loader save data folder: " + saveDir.getAbsolutePath()); + } + } + + return saveDir; + } + + return null; + } + + public static void load(WorldServer world) + { + if (ChunkLoadingCallback.loaded) + { + return; + } + + DataInputStream dataStream = null; + + try + { + File saveDir = ChunkLoadingCallback.getSaveDir(); + + if (saveDir != null) + { + if (!saveDir.exists()) + { + if (!saveDir.mkdirs()) + { + GCLog.severe("Could not create chunk loader save data folder: " + saveDir.getAbsolutePath()); + } + } + + File saveFile = new File(saveDir, "chunkloaders.dat"); + + if (saveFile.exists()) + { + dataStream = new DataInputStream(new FileInputStream(saveFile)); + + int playerCount = dataStream.readInt(); + + for (int l = 0; l < playerCount; l++) + { + String ownerName = dataStream.readUTF(); + + int mapSize = dataStream.readInt(); + HashMap> dimensionMap = new HashMap<>(); + + for (int i = 0; i < mapSize; i++) + { + int dimensionID = dataStream.readInt(); + HashSet coords = new HashSet<>(); + dimensionMap.put(dimensionID, coords); + int coordSetSize = dataStream.readInt(); + + for (int j = 0; j < coordSetSize; j++) + { + coords.add(new BlockPos(dataStream.readInt(), dataStream.readInt(), dataStream.readInt())); + } + } + + ChunkLoadingCallback.chunkLoaderList.put(ownerName, dimensionMap); + } + + dataStream.close(); + } + } + } catch (Exception e) + { + e.printStackTrace(); + + if (dataStream != null) + { + try + { + dataStream.close(); + } catch (IOException e1) + { + e1.printStackTrace(); + } + } + } + + ChunkLoadingCallback.loaded = true; + ChunkLoadingCallback.dirtyData = false; + } + + public static void onPlayerLogin(EntityPlayer player) + { + for (Entry>> playerEntry : ChunkLoadingCallback.chunkLoaderList.entrySet()) + { + if (PlayerUtil.getName(player).equals(playerEntry.getKey())) + { + for (Entry> dimensionEntry : playerEntry.getValue().entrySet()) + { + int dimID = dimensionEntry.getKey(); + + if (ChunkLoadingCallback.loadOnLogin) + { + player.world.getMinecraftServer().getWorld(dimID); + } + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/IChunkLoader.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/IChunkLoader.java new file mode 100644 index 00000000..3ad03fd4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/IChunkLoader.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import net.minecraftforge.common.ForgeChunkManager.Ticket; + +public interface IChunkLoader +{ + + void onTicketLoaded(Ticket ticket, boolean placed); + + Ticket getTicket(); + + World getWorld(); + + BlockPos getCoords(); + + String getOwnerName(); + + void setOwnerName(String ownerName); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeDecoratorMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeDecoratorMoon.java new file mode 100644 index 00000000..e0021b4d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeDecoratorMoon.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockMatcher; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.MinecraftForge; + +public class BiomeDecoratorMoon extends BiomeDecorator +{ + + private World world; + private Random randomGenerator; + + private WorldGenerator dirtGen; + private WorldGenerator cheeseGen; + private WorldGenerator copperGen; + private WorldGenerator tinGen; + + public BiomeDecoratorMoon() + { + this.copperGen = new WorldGenMinableMeta(GCBlocks.blockMoon, 4, 0, true, GCBlocks.blockMoon, 4); + this.tinGen = new WorldGenMinableMeta(GCBlocks.blockMoon, 4, 1, true, GCBlocks.blockMoon, 4); + this.cheeseGen = new WorldGenMinableMeta(GCBlocks.blockMoon, 3, 2, true, GCBlocks.blockMoon, 4); + this.dirtGen = new WorldGenMinableMeta(GCBlocks.blockMoon, 32, 3, true, GCBlocks.blockMoon, 4); + } + + @Override + public void decorate(World worldIn, Random random, Biome p_180292_3_, BlockPos pos) + { + if (this.world != null) + { + throw new RuntimeException("Already decorating!!"); + } else + { + this.world = worldIn; + this.randomGenerator = random; + this.chunkPos = pos; + this.generateMoon(); + this.world = null; + this.randomGenerator = null; + } + } + + private void genStandardOre(int amountPerChunk, WorldGenerator worldGenerator, int minY, int maxY) + { + for (int var5 = 0; var5 < amountPerChunk; ++var5) + { + BlockPos blockpos = this.chunkPos.add(this.randomGenerator.nextInt(16), this.randomGenerator.nextInt(maxY - minY) + minY, this.randomGenerator.nextInt(16)); + worldGenerator.generate(this.world, this.randomGenerator, blockpos); + } + } + + private void generateMoon() + { + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Pre(this.world, this.randomGenerator, chunkPos)); + this.genStandardOre(20, this.dirtGen, 0, 200); + if (!ConfigManagerCore.disableCopperMoon) + { + this.genStandardOre(26, this.copperGen, 0, 60); + } + if (!ConfigManagerCore.disableTinMoon) + { + this.genStandardOre(23, this.tinGen, 0, 60); + } + if (!ConfigManagerCore.disableCheeseMoon) + { + this.genStandardOre(14, this.cheeseGen, 0, 85); + } + if (!ConfigManagerCore.disableSapphireMoon) + { + int count = 3 + this.randomGenerator.nextInt(6); + IBlockState sapphire = GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.ORE_SAPPHIRE); + for (int i = 0; i < count; i++) + { + BlockPos blockpos = this.chunkPos.add(this.randomGenerator.nextInt(16) + 8, this.randomGenerator.nextInt(28) + 4, this.randomGenerator.nextInt(16) + 8); + + IBlockState toReplace = this.world.getBlockState(blockpos); + + if (toReplace.getBlock() == GCBlocks.blockMoon && toReplace.getBlock().isReplaceableOreGen(toReplace, this.world, blockpos, BlockMatcher.forBlock(Blocks.STONE))) + { + this.world.setBlockState(blockpos, sapphire, 2); + } + } + } + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Post(this.world, this.randomGenerator, chunkPos)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeFlatMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeFlatMoon.java new file mode 100644 index 00000000..9af21699 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeFlatMoon.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeFlatMoon extends BiomeMoon +{ + + public BiomeFlatMoon(BiomeData properties) + { + super(properties); + } + + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.COLD, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeMoon.java new file mode 100644 index 00000000..c225bf12 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeMoon.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.chunk.ChunkPrimer; + +public class BiomeMoon extends BiomeGenBaseGC +{ + + public static final Biome moonFlat = new BiomeFlatMoon(BiomeData.builder().biomeName("Moon").baseHeight(1.5F).heightVariation(0.4F).build()); + + BiomeMoon(BiomeData properties) + { + super(properties, true); + } + + @Override + public BiomeDecorator createBiomeDecorator() + { + return getModdedBiomeDecorator(new BiomeDecoratorMoon()); + } + + @Override + public float getSpawningChance() + { + return 0.1F; + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal) + { + this.fillerBlock = ChunkProviderMoon.BLOCK_LOWER; + this.topBlock = ChunkProviderMoon.BLOCK_TOP; + super.genTerrainBlocks(worldIn, rand, chunkPrimerIn, x, z, noiseVal); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeOrbit.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeOrbit.java new file mode 100644 index 00000000..b1fd4051 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeOrbit.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeOrbit extends BiomeGenBaseGC +{ + + public static final Biome space = new BiomeOrbit(BiomeData.builder().biomeName("Space").build()); + + private BiomeOrbit(BiomeData properties) + { + super(properties, true); + this.spawnableMonsterList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableCaveCreatureList.clear(); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedZombie.class, 10, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedSpider.class, 10, 4, 4)); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SPARSE, BiomeDictionary.Type.SPOOKY); + } + + @Override + public float getSpawningChance() + { + return 0.01F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderMoon.java new file mode 100644 index 00000000..844b224c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderMoon.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeProviderSpace; +import net.minecraft.world.biome.Biome; + +public class BiomeProviderMoon extends BiomeProviderSpace +{ + + @Override + public Biome getBiome() + { + return BiomeMoon.moonFlat; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderOrbit.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderOrbit.java new file mode 100644 index 00000000..37dc65be --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/BiomeProviderOrbit.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeProviderSpace; +import net.minecraft.world.biome.Biome; + +public class BiomeProviderOrbit extends BiomeProviderSpace +{ + + @Override + public Biome getBiome() + { + return BiomeOrbit.space; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderMoon.java new file mode 100644 index 00000000..3bc362b5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderMoon.java @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.BlockFalling; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; + +import net.minecraftforge.event.ForgeEventFactory; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockBasicMoon; +import micdoodle8.mods.galacticraft.core.perlin.generator.GradientNoise; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomBoss; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; + +public class ChunkProviderMoon extends ChunkProviderBase +{ + + public static final IBlockState BLOCK_TOP = GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_TURF); + public static final IBlockState BLOCK_FILL = GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_DIRT); + public static final IBlockState BLOCK_LOWER = GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_STONE); + + private final Random rand; + + private final GradientNoise noiseGen1; + private final GradientNoise noiseGen2; + private final GradientNoise noiseGen3; + private final GradientNoise noiseGen4; + + private final World world; + private final MapGenVillageMoon villageGenerator = new MapGenVillageMoon(); + + private final MapGenDungeon dungeonGeneratorMoon = + new MapGenDungeon(new DungeonConfiguration(GCBlocks.blockMoon.getDefaultState().withProperty(BlockBasicMoon.BASIC_TYPE_MOON, BlockBasicMoon.EnumBlockBasicMoon.MOON_DUNGEON_BRICK), 25, 8, 16, + 5, 6, RoomBoss.class, RoomTreasure.class)); + + private final MapGenBaseMeta caveGenerator = new MapGenCavesMoon(); + + private static final int CRATER_PROB = 300; + + // DO NOT CHANGE + private static final int MID_HEIGHT = 63; + private static final int CHUNK_SIZE_X = 16; + private static final int CHUNK_SIZE_Y = 128; + private static final int CHUNK_SIZE_Z = 16; + + public ChunkProviderMoon(World worldIn, long seed, boolean mapFeaturesEnabled) + { + this.world = worldIn; + this.rand = new Random(seed); + this.noiseGen1 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen2 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.noiseGen3 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + this.noiseGen4 = new GradientNoise(this.rand.nextLong(), 1, 0.25D); + } + + public void setBlocksInChunk(int chunkX, int chunkZ, ChunkPrimer primer) + { + this.noiseGen1.setFrequencyAll(0.012500000186264515D); + this.noiseGen2.setFrequencyAll(0.014999999664723873D); + this.noiseGen3.setFrequencyAll(0.0D); + this.noiseGen4.setFrequencyAll(0.019999999552965164D); + + for (int x = 0; x < ChunkProviderMoon.CHUNK_SIZE_X; x++) + { + for (int z = 0; z < ChunkProviderMoon.CHUNK_SIZE_Z; z++) + { + final double d = this.noiseGen1.evalNoise(x + chunkX * 16, z + chunkZ * 16) * 8; + final double d2 = this.noiseGen2.evalNoise(x + chunkX * 16, z + chunkZ * 16) * 24; + double d3 = this.noiseGen3.evalNoise(x + chunkX * 16, z + chunkZ * 16) - 0.1; + d3 *= 4; + + double yDev; + + if (d3 < 0.0D) + { + yDev = d; + } else if (d3 > 1.0D) + { + yDev = d2; + } else + { + yDev = d + (d2 - d) * d3; + } + + for (int y = 0; y < ChunkProviderMoon.CHUNK_SIZE_Y; y++) + { + if (y < ChunkProviderMoon.MID_HEIGHT + yDev) + { + primer.setBlockState(x, y, z, BLOCK_LOWER); + } + } + } + } + } + + public void replaceBlocksForBiome(int x, int z, ChunkPrimer primer, Biome[] biomes) + { + final int var5 = 20; + for (int i = 0; i < 16; ++i) + { + for (int j = 0; j < 16; ++j) + { + final int var12 = (int) (this.noiseGen4.evalNoise(i + x * 16, j * z * 16) / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D); + int var13 = -1; + IBlockState state0 = BLOCK_TOP; + IBlockState state1 = BLOCK_FILL; + + for (int var16 = 127; var16 >= 0; --var16) + { + if (var16 <= this.rand.nextInt(5)) + { + primer.setBlockState(i, var16, j, Blocks.BEDROCK.getDefaultState()); + } else + { + IBlockState var18 = primer.getBlockState(i, var16, j); + if (Blocks.AIR == var18.getBlock()) + { + var13 = -1; + } else if (var18 == BLOCK_LOWER) + { + if (var13 == -1) + { + if (var12 <= 0) + { + state0 = Blocks.AIR.getDefaultState(); + state1 = BLOCK_LOWER; + } else if (var16 >= var5 - -16 && var16 <= var5 + 1) + { + state0 = BLOCK_FILL; + } + + var13 = var12; + + if (var16 >= var5 - 1) + { + primer.setBlockState(i, var16, j, state0); + } else if (var16 < var5 - 1 && var16 >= var5 - 2) + { + primer.setBlockState(i, var16, j, state1); + } + } else if (var13 > 0) + { + --var13; + primer.setBlockState(i, var16, j, state1); + } + } + } + } + } + } + } + + @Override + public Chunk generateChunk(int x, int z) + { + this.rand.setSeed(x * 341873128712L + z * 132897987541L); + ChunkPrimer chunkprimer = new ChunkPrimer(); + this.setBlocksInChunk(x, z, chunkprimer); + this.createCraters(x, z, chunkprimer); + this.replaceBlocksForBiome(x, z, chunkprimer, null); + + this.caveGenerator.generate(this.world, x, z, chunkprimer); + + this.dungeonGeneratorMoon.generate(this.world, x, z, chunkprimer); + this.villageGenerator.generate(this.world, x, z, chunkprimer); + + Chunk chunk = new Chunk(this.world, chunkprimer, x, z); + byte[] abyte = chunk.getBiomeArray(); + final byte b = (byte) Biome.getIdForBiome(BiomeAdaptive.biomeDefault); + for (int i = 0; i < abyte.length; ++i) + { + abyte[i] = b; + } + + chunk.generateSkylightMap(); + return chunk; + } + + private void createCraters(int chunkX, int chunkZ, ChunkPrimer primer) + { + for (int cx = chunkX - 2; cx <= chunkX + 2; cx++) + { + for (int cz = chunkZ - 2; cz <= chunkZ + 2; cz++) + { + for (int x = 0; x < ChunkProviderMoon.CHUNK_SIZE_X; x++) + { + for (int z = 0; z < ChunkProviderMoon.CHUNK_SIZE_Z; z++) + { + if (Math.abs(this.randFromPoint(cx * 16 + x, (cz * 16 + z) * 1000)) < this.noiseGen4.evalNoise(x * ChunkProviderMoon.CHUNK_SIZE_X + x, cz * ChunkProviderMoon.CHUNK_SIZE_Z + z) + / ChunkProviderMoon.CRATER_PROB) + { + final Random random = new Random(cx * 16 + x + (cz * 16 + z) * 5000); + final EnumCraterSize cSize = EnumCraterSize.sizeArray[random.nextInt(EnumCraterSize.sizeArray.length)]; + final int size = random.nextInt(cSize.MAX_SIZE - cSize.MIN_SIZE) + cSize.MIN_SIZE; + this.makeCrater(cx * 16 + x, cz * 16 + z, chunkX * 16, chunkZ * 16, size, primer); + } + } + } + } + } + } + + private void makeCrater(int craterX, int craterZ, int chunkX, int chunkZ, int size, ChunkPrimer primer) + { + for (int x = 0; x < ChunkProviderMoon.CHUNK_SIZE_X; x++) + { + for (int z = 0; z < ChunkProviderMoon.CHUNK_SIZE_Z; z++) + { + double xDev = craterX - (chunkX + x); + double zDev = craterZ - (chunkZ + z); + if (xDev * xDev + zDev * zDev < size * size) + { + xDev /= size; + zDev /= size; + final double sqrtY = xDev * xDev + zDev * zDev; + double yDev = sqrtY * sqrtY * 6; + yDev = 5 - yDev; + int helper = 0; + for (int y = 127; y > 0; y--) + { + if (Blocks.AIR != primer.getBlockState(x, y, z).getBlock() && helper <= yDev) + { + primer.setBlockState(x, y, z, Blocks.AIR.getDefaultState()); + helper++; + } + if (helper > yDev) + { + break; + } + } + } + } + } + } + + private double randFromPoint(int x, int z) + { + int n; + n = x + z * 57; + n = n << 13 ^ n; + return 1.0 - (n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff) / 1073741824.0; + } + + @Override + public void populate(int x, int z) + { + BlockFalling.fallInstantly = true; + int i = x * 16; + int j = z * 16; + BlockPos blockpos = new BlockPos(i, 0, j); + Biome biomegenbase = this.world.getBiome(blockpos.add(16, 0, 16)); + this.rand.setSeed(this.world.getSeed()); + long k = this.rand.nextLong() / 2L * 2L + 1L; + long l = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(x * k + z * l ^ this.world.getSeed()); + boolean flag = false; + ForgeEventFactory.onChunkPopulate(true, this, this.world, this.rand, x, z, flag); + if (!ConfigManagerCore.disableMoonVillageGen) + { + flag = this.villageGenerator.generateStructure(this.world, this.rand, new ChunkPos(x, z)); + } + + this.dungeonGeneratorMoon.generateStructure(this.world, this.rand, new ChunkPos(x, z)); + + biomegenbase.decorate(this.world, this.rand, new BlockPos(i, 0, j)); + ForgeEventFactory.onChunkPopulate(false, this, this.world, this.rand, x, z, flag); + BlockFalling.fallInstantly = false; + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + Biome biomegenbase = this.world.getBiome(pos); + return biomegenbase.getSpawnableList(creatureType); + } + + @Override + public void recreateStructures(Chunk chunk, int x, int z) + { + if (!ConfigManagerCore.disableMoonVillageGen) + { + this.villageGenerator.generate(this.world, x, z, null); + } + + this.dungeonGeneratorMoon.generate(this.world, x, z, null); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderOrbit.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderOrbit.java new file mode 100644 index 00000000..53bd0e4d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/ChunkProviderOrbit.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import net.minecraft.block.BlockFalling; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.SpawnListEntry; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; + +public class ChunkProviderOrbit extends ChunkProviderBase +{ + + private final Random rand; + + private final World world; + + public ChunkProviderOrbit(World world, long seed, boolean mapFeaturesEnabled) + { + this.rand = new Random(seed); + this.world = world; + } + + @Override + public Chunk generateChunk(int par1, int par2) + { + ChunkPrimer chunkprimer = new ChunkPrimer(); + this.rand.setSeed(par1 * 341873128712L + par2 * 132897987541L); + + final Chunk var4 = new Chunk(this.world, chunkprimer, par1, par2); + + final byte b = (byte) Biome.getIdForBiome(BiomeAdaptive.biomeDefault); + final byte[] biomesArray = var4.getBiomeArray(); + for (int i = 0; i < biomesArray.length; ++i) + { + biomesArray[i] = b; + } + + var4.generateSkylightMap(); + return var4; + } + + @Override + public void populate(int x, int z) + { + BlockFalling.fallInstantly = true; + final int k = x * 16; + final int l = z * 16; + this.rand.setSeed(this.world.getSeed()); + final long i1 = this.rand.nextLong() / 2L * 2L + 1L; + final long j1 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(x * i1 + z * j1 ^ this.world.getSeed()); + if (k == 0 && l == 0) + { + BlockPos pos = new BlockPos(k, 64, l); + this.world.setBlockState(pos, GCBlocks.spaceStationBase.getDefaultState(), 2); + + final TileEntity var8 = this.world.getTileEntity(pos); + + if (var8 instanceof IMultiBlock) + { + ((IMultiBlock) var8).onCreate(this.world, pos); + } + + new WorldGenSpaceStation().generate(this.world, this.rand, new BlockPos(k - 10, 62, l - 3)); + } + BlockFalling.fallInstantly = false; + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + return null; + } + + @Override + public void recreateStructures(Chunk p_180514_1_, int p_180514_2_, int p_180514_3_) + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/EnumCraterSize.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/EnumCraterSize.java new file mode 100644 index 00000000..58183679 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/EnumCraterSize.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +public enum EnumCraterSize +{ + + SMALL(8, 12, 14), MEDIUM(13, 17, 8), LARGE(18, 25, 2), EXTREME(26, 30, 1); + + public final int MIN_SIZE; + public final int MAX_SIZE; + private final int PROBABILITY; + + public static EnumCraterSize[] sizeArray; + + EnumCraterSize(int min, int max, int prob) + { + this.MIN_SIZE = min; + this.MAX_SIZE = max; + this.PROBABILITY = prob; + } + + static + { + int amount = 0; + for (final EnumCraterSize c : EnumCraterSize.values()) + { + amount += c.PROBABILITY; + } + EnumCraterSize.sizeArray = new EnumCraterSize[amount]; + int pointer = 0; + for (final EnumCraterSize c : EnumCraterSize.values()) + { + for (int i = 0; i < c.PROBABILITY; i++) + { + EnumCraterSize.sizeArray[pointer] = c; + pointer++; + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenCavesMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenCavesMoon.java new file mode 100644 index 00000000..63fcf7ef --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenCavesMoon.java @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenCavesMoon extends MapGenBaseMeta +{ + + public static final int BREAK_THROUGH_CHANCE = 25; // 1 in n chance + + protected void generateLargeCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10) + { + this.generateCaveNode(par1, par3, par4, primer, par6, par8, par10, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10, float par12, float par13, float par14, int par15, int par16, double par17) + { + final double d4 = par3 * 16 + 8; + final double d5 = par4 * 16 + 8; + float f3 = 0.0F; + float f4 = 0.0F; + final Random random = new Random(par1); + + if (par16 <= 0) + { + final int j1 = this.range * 16 - 16; + par16 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (par15 == -1) + { + par15 = par16 / 2; + flag = true; + } + + final int k1 = random.nextInt(par16 / 2) + par16 / 4; + + for (final boolean flag1 = random.nextInt(6) == 0; par15 < par16; ++par15) + { + final double d6 = 1.5D + MathHelper.sin(par15 * (float) Math.PI / par16) * par12 * 1.0F; + final double d7 = d6 * par17; + final float f5 = MathHelper.cos(par14); + final float f6 = MathHelper.sin(par14); + par6 += MathHelper.cos(par13) * f5; + par8 += f6; + par10 += MathHelper.sin(par13) * f5; + + if (flag1) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += f4 * 0.1F; + par13 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + + if (!flag && par15 == k1 && par12 > 1.0F && par16 > 0) + { + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 - Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 + Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) + { + final double d8 = par6 - d4; + final double d9 = par10 - d5; + final double d10 = par16 - par15; + final double d11 = par12 + 2.0F + 16.0F; + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) + { + return; + } + + if (par6 >= d4 - 16.0D - d6 * 2.0D && par10 >= d5 - 16.0D - d6 * 2.0D && par6 <= d4 + 16.0D + d6 * 2.0D && par10 <= d5 + 16.0D + d6 * 2.0D) + { + int l1 = MathHelper.floor(par6 - d6) - par3 * 16 - 1; + int i2 = MathHelper.floor(par6 + d6) - par3 * 16 + 1; + int j2 = MathHelper.floor(par8 - d7) - 1; + int k2 = MathHelper.floor(par8 + d7) + 1; + int l2 = MathHelper.floor(par10 - d6) - par4 * 16 - 1; + int i3 = MathHelper.floor(par10 + d6) - par4 * 16 + 1; + + if (l1 < 0) + { + l1 = 0; + } + + if (i2 > 16) + { + i2 = 16; + } + + if (j2 < 1) + { + j2 = 1; + } + + if (k2 > 120) + { + k2 = 120; + } + + if (l2 < 0) + { + l2 = 0; + } + + if (i3 > 16) + { + i3 = 16; + } + + int j3; + for (j3 = l1; j3 < i2; ++j3) + { + for (int l3 = l2; l3 < i3; ++l3) + { + for (int i4 = k2 + 1; i4 >= j2 - 1; --i4) + { + if (i4 >= 0 && i4 < 128) + { + if (i4 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && l3 != l2 && l3 != i3 - 1) + { + i4 = j2; + } + } + } + } + } + + if (true) + { + Block testBlock = GCBlocks.blockMoon; + for (int localY = j2; localY < k2; localY++) + { + final double yfactor = (localY + 0.5D - par8) / d7; + final double yfactorSq = yfactor * yfactor; + + for (int localX = l1; localX < i2; localX++) + { + final double zfactor = (localX + par3 * 16 + 0.5D - par6) / d6; + final double zfactorSq = zfactor * zfactor; + + for (int localZ = l2; localZ < i3; localZ++) + { + final double xfactor = (localZ + par4 * 16 + 0.5D - par10) / d6; + final double xfactorSq = xfactor * xfactor; + + if (xfactorSq + zfactorSq < 1.0D) + { + if (yfactor > -0.7D && xfactorSq + yfactorSq + zfactorSq < 1.0D) + { + IBlockState state = primer.getBlockState(localX, localY, localZ); + if (state.getBlock() == testBlock) + { + int meta = state.getBlock().getMetaFromState(state); + if (meta == 3 || meta == 4 || meta == 5) + { + primer.setBlockState(localX, localY, localZ, Blocks.AIR.getDefaultState()); + } + } + } + } + } + } + } + + if (flag) + { + break; + } + } + } + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int par2, int par3, int par4, int par5, ChunkPrimer primer) + { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + + if (this.rand.nextInt(15) != 0) + { + var7 = 0; + } + + for (int var8 = 0; var8 < var7; ++var8) + { + final double var9 = par2 * 16 + this.rand.nextInt(16); + final double var11 = this.rand.nextInt(this.rand.nextInt(120) + 8); + final double var13 = par3 * 16 + this.rand.nextInt(16); + int var15 = 1; + + if (this.rand.nextInt(4) == 0) + { + this.generateLargeCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for (int var16 = 0; var16 < var15; ++var16) + { + final float var17 = this.rand.nextFloat() * Constants.twoPI; + final float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + + if (this.rand.nextInt(10) == 0) + { + var19 *= this.rand.nextFloat() * this.rand.nextFloat() * 3.0F + 1.0F; + } + + this.generateCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenVillageMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenVillageMoon.java new file mode 100644 index 00000000..37decddf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/MapGenVillageMoon.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.structure.MapGenStructure; +import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraft.world.gen.structure.StructureStart; + +public class MapGenVillageMoon extends MapGenStructure +{ + + public static List villageSpawnBiomes = Arrays.asList(new Biome[] + {BiomeAdaptive.biomeDefault}); + private final int terrainType; + private static boolean initialized; + + static + { + try + { + MapGenVillageMoon.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenVillageMoon.initialized) + { + MapGenStructureIO.registerStructure(StructureVillageStartMoon.class, "MoonVillage"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageField.class, "MoonField1"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageField2.class, "MoonField2"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageHouse.class, "MoonHouse"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageRoadPiece.class, "MoonRoadPiece"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillagePathGen.class, "MoonPath"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageTorch.class, "MoonTorch"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageStartPiece.class, "MoonWell"); + MapGenStructureIO.registerStructureComponent(StructureComponentVillageWoodHut.class, "MoonWoodHut"); + } + + MapGenVillageMoon.initialized = true; + } + + public MapGenVillageMoon() + { + this.terrainType = 0; + } + + @Override + protected boolean canSpawnStructureAtCoords(int i, int j) + { + final byte numChunks = 32; + final byte offsetChunks = 8; + final int oldi = i; + final int oldj = j; + + if (i < 0) + { + i -= numChunks - 1; + } + + if (j < 0) + { + j -= numChunks - 1; + } + + int randX = i / numChunks; + int randZ = j / numChunks; + final Random var7 = this.world.setRandomSeed(i, j, 10387312); + randX *= numChunks; + randZ *= numChunks; + randX += var7.nextInt(numChunks - offsetChunks); + randZ += var7.nextInt(numChunks - offsetChunks); + + return oldi == randX && oldj == randZ; + } + + @Override + public BlockPos getNearestStructurePos(World worldIn, BlockPos pos, boolean p_180706_3_) + { + this.world = worldIn; + return findNearestStructurePosBySpacing(worldIn, this, pos, 32, 8, 10387312, false, 100, p_180706_3_); + } + + @Override + protected StructureStart getStructureStart(int par1, int par2) + { + GalacticraftCore.logger.debug("Generating Moon Village at x" + par1 * 16 + " z" + par2 * 16); + return new StructureVillageStartMoon(this.world, this.rand, par1, par2, this.terrainType); + } + + @Override + public String getStructureName() + { + return "MoonVillage"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OreGenOtherMods.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OreGenOtherMods.java new file mode 100644 index 00000000..171b06c3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OreGenOtherMods.java @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.ArrayList; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.gen.feature.WorldGenerator; + +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import micdoodle8.mods.galacticraft.api.vector.BlockTuple; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderMoon; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.util.BlockUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.dimension.WorldProviderMars; + +//TODO: Seriously redo this +public class OreGenOtherMods +{ + + private World world; + private Random randomGenerator; + private BlockPos pos; + private WorldGenerator oreGen; + public static ArrayList data = new ArrayList<>(); + static + { + for (final String str : ConfigManagerCore.oregenIDs) + { + try + { + int slash = str.indexOf('/'); + String s; + int rarity = 0; // 0 = common 1 = uncommon 2 = rare + int depth = 0; // 0 = even 1 = deep 2 = shallow + int size = 1; // 0 = single 1 = standard 2 = large + boolean extraRandom = false; + int dim = 0; + if (slash >= 0) + { + s = str.substring(0, slash).trim(); + String params = str.substring(slash).toUpperCase(); + if (params.contains("UNCOMMON")) + { + rarity = 1; + } + else if (params.contains("RARE")) + { + rarity = 2; + } + if (params.contains("DEEP")) + { + depth = 1; + } + else if (params.contains("SHALLOW")) + { + depth = 2; + } + if (params.contains("SINGLE")) + { + size = 0; + } + else if (params.contains("LARGE")) + { + size = 2; + } + if (params.contains("XTRARANDOM")) + { + extraRandom = true; + } + if (params.contains("ONLYMOON")) + { + dim = 1; + } + else if (params.contains("ONLYMARS")) + { + dim = 2; + } + } + else + { + s = str; + } + BlockTuple bt = BlockUtil.getBlockTupleFromString(s); + if (bt == null) + { + continue; + } + int meta = bt.meta; + if (meta == -1) + { + meta = 0; + } + OreGenOtherMods.addOre(bt.block, meta, rarity, depth, size, extraRandom, dim); + } catch (final Exception e) + { + GalacticraftCore.logger.error("[config] External Sealable IDs: error parsing '" + str + "'. Must be in the form Blockname or BlockName:metadata followed by / parameters "); + } + } + } + + public static void addOre(Block block, int meta, int rarity, int depth, int clumpSize, boolean extraRandom, int dim) + { + int clusters = 12; + int size = 4; + int min = 0; + int max = 64; + switch (depth) + { + case 0: + // Evenly distributed + size = 6; + clusters = 20; + max = 80; + if (rarity == 1) + { + clusters = 9; + size = 4; + } + else if (rarity == 2) + { + clusters = 6; + size = 3; + max = 96; + } + break; + case 1: + // Deep + size = 5; + clusters = 12; + max = 32; + if (rarity == 1) + { + clusters = 6; + size = 4; + max = 20; + } + else if (rarity == 2) + { + clusters = 2; + size = 3; + max = 16; + } + break; + case 2: + // Shallow + size = 6; + clusters = 15; + min = 32; + max = 80; + if (rarity == 1) + { + clusters = 8; + size = 4; + min = 32; + max = 72; + } + else if (rarity == 2) + { + clusters = 3; + size = 3; + min = 40; + max = 64; + } + } + if (clumpSize == 0) + { + size = 1; + clusters = (3 * clusters) / 2; + } + else if (clumpSize == 2) + { + size *= 4; + clusters /= 2; + } + if (extraRandom) + { + if (depth == 1) + { + min = -max * 3; + } + else + { + max *= 4; + } + } + OreGenData ore = new OreGenData(block, meta, clusters, size, min, max, dim); + OreGenOtherMods.data.add(ore); + } + + @SubscribeEvent + public void onPlanetDecorated(GCCoreEventPopulate.Post event) + { + this.world = event.world; + this.randomGenerator = event.rand; + this.pos = event.pos; + int dimDetected = 0; + WorldProvider prov = world.provider; + if (!(prov instanceof IGalacticraftWorldProvider) || (prov instanceof WorldProviderSpaceStation)) + { + return; + } + Block stoneBlock = null; + int stoneMeta = 0; + if (prov instanceof WorldProviderMoon) + { + stoneBlock = GCBlocks.blockMoon; + stoneMeta = 4; + dimDetected = 1; + } + else if (prov instanceof WorldProviderMars) + { + stoneBlock = MarsBlocks.marsBlock; + stoneMeta = 9; + dimDetected = 2; + } + if (stoneBlock == null) + { + return; + } + for (OreGenData ore : OreGenOtherMods.data) + { + if (ore.dimRestrict == 0 || ore.dimRestrict == dimDetected) + { + this.oreGen = new WorldGenMinableMeta(ore.oreBlock, ore.sizeCluster, ore.oreMeta, true, stoneBlock, stoneMeta); + this.genStandardOre1(ore.numClusters, this.oreGen, ore.minHeight, ore.maxHeight); + } + } + } + + void genStandardOre1(int amountPerChunk, WorldGenerator worldGenerator, int minY, int maxY) + { + for (int var5 = 0; var5 < amountPerChunk; ++var5) + { + BlockPos blockpos = this.pos.add(this.randomGenerator.nextInt(16), this.randomGenerator.nextInt(maxY - minY) + minY, this.randomGenerator.nextInt(16)); + worldGenerator.generate(this.world, this.randomGenerator, blockpos); + } + } + + public static class OreGenData + { + + public Block oreBlock = GCBlocks.blockMoon; + public int oreMeta = 0; + public int sizeCluster = 4; + public int numClusters = 8; + public int minHeight = 0; + public int maxHeight = 128; + public int dimRestrict = 0; + + public OreGenData(Block block, int meta, int num, int cluster, int min, int max, int dim) + { + this.oreBlock = block; + this.oreMeta = meta; + this.sizeCluster = cluster; + this.numClusters = num; + this.minHeight = min; + this.maxHeight = max; + this.dimRestrict = dim; + } + + public OreGenData(Block block, int meta, int num, int cluster) + { + this.oreBlock = block; + this.oreMeta = meta; + this.sizeCluster = cluster; + this.numClusters = num; + this.minHeight = 0; + this.maxHeight = 128; + } + + public OreGenData(Block block, int meta, int num) + { + this.oreBlock = block; + this.oreMeta = meta; + this.sizeCluster = 4; + this.numClusters = num; + this.minHeight = 0; + this.maxHeight = 128; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OverworldGenerator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OverworldGenerator.java new file mode 100644 index 00000000..f1561ac8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/OverworldGenerator.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockMatcher; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.common.IWorldGenerator; + +public class OverworldGenerator implements IWorldGenerator +{ + + private final int amountPerChunk; + private final int maxGenerateLevel; + private final int minGenerateLevel; + private final int amountPerVein; + private final Block oreBlock; + private final int metadata; + + public OverworldGenerator(Block oreBlock, int metadata, int amountPerChunk, int minGenLevel, int maxGenLevel, int amountPerVein) + { + this.oreBlock = oreBlock; + this.metadata = metadata; + this.amountPerChunk = amountPerChunk; + this.minGenerateLevel = minGenLevel; + this.maxGenerateLevel = maxGenLevel; + this.amountPerVein = amountPerVein; + } + + @Override + public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) + { + if (!(world.provider instanceof IGalacticraftWorldProvider)) + { + for (int i = 0; i < this.amountPerChunk; i++) + { + int x = chunkX * 16 + random.nextInt(16); + int z = chunkZ * 16 + random.nextInt(16); + int y = random.nextInt(Math.max(this.maxGenerateLevel - this.minGenerateLevel, 0)) + this.minGenerateLevel; + this.generateOre(world, random, x, y, z); + } + } + } + + private boolean generateOre(World par1World, Random par2Random, int par3, int par4, int par5) + { + float var6 = par2Random.nextFloat() * (float) Math.PI; + double var7 = par3 + 8 + MathHelper.sin(var6) * this.amountPerVein / 8.0F; + double var9 = par3 + 8 - MathHelper.sin(var6) * this.amountPerVein / 8.0F; + double var11 = par5 + 8 + MathHelper.cos(var6) * this.amountPerVein / 8.0F; + double var13 = par5 + 8 - MathHelper.cos(var6) * this.amountPerVein / 8.0F; + double var15 = par4 + par2Random.nextInt(3) - 2; + double var17 = par4 + par2Random.nextInt(3) - 2; + + for (int var19 = 0; var19 <= this.amountPerVein; ++var19) + { + double var20 = var7 + (var9 - var7) * var19 / this.amountPerVein; + double var22 = var15 + (var17 - var15) * var19 / this.amountPerVein; + double var24 = var11 + (var13 - var11) * var19 / this.amountPerVein; + double var26 = par2Random.nextDouble() * this.amountPerVein / 16.0D; + double var28 = (MathHelper.sin(var19 * (float) Math.PI / this.amountPerVein) + 1.0F) * var26 + 1.0D; + double var30 = (MathHelper.sin(var19 * (float) Math.PI / this.amountPerVein) + 1.0F) * var26 + 1.0D; + int var32 = MathHelper.floor(var20 - var28 / 2.0D); + int var33 = MathHelper.floor(var22 - var30 / 2.0D); + int var34 = MathHelper.floor(var24 - var28 / 2.0D); + int var35 = MathHelper.floor(var20 + var28 / 2.0D); + int var36 = MathHelper.floor(var22 + var30 / 2.0D); + int var37 = MathHelper.floor(var24 + var28 / 2.0D); + + for (int var38 = var32; var38 <= var35; ++var38) + { + double var39 = (var38 + 0.5D - var20) / (var28 / 2.0D); + + if (var39 * var39 < 1.0D) + { + for (int var41 = var33; var41 <= var36; ++var41) + { + double var42 = (var41 + 0.5D - var22) / (var30 / 2.0D); + + if (var39 * var39 + var42 * var42 < 1.0D) + { + for (int var44 = var34; var44 <= var37; ++var44) + { + double var45 = (var44 + 0.5D - var24) / (var28 / 2.0D); + + BlockPos pos = new BlockPos(var38, var41, var44); + IBlockState state = par1World.getBlockState(pos); + if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && state.getBlock().isReplaceableOreGen(state, par1World, pos, BlockMatcher.forBlock(Blocks.STONE))) + { + par1World.setBlockState(new BlockPos(var38, var41, var44), this.oreBlock.getStateFromMeta(this.metadata), 2); + } + } + } + } + } + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentGC.java new file mode 100644 index 00000000..4fd96f5a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentGC.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public abstract class StructureComponentGC extends StructureComponent +{ + + public StructureComponentGC(int var1) + { + super(var1); + } + + public static StructureBoundingBox getComponentToAddBoundingBox(int x, int y, int z, int lengthOffset, int heightOffset, int widthOffset, int length, int height, int width, EnumFacing coordBaseMode) + { + if (coordBaseMode != null) + { + switch (SwitchEnumFacing.field_176064_a[coordBaseMode.ordinal()]) + { + case 0: + return new StructureBoundingBox(x + lengthOffset, y + heightOffset, z + widthOffset, x + length + lengthOffset, y + height + heightOffset, z + width + widthOffset); + case 1: + return new StructureBoundingBox(x - width + widthOffset, y + heightOffset, z + lengthOffset, x + widthOffset, y + height + heightOffset, z + length + lengthOffset); + case 2: + return new StructureBoundingBox(x - length - lengthOffset, y + heightOffset, z - width - widthOffset, x - lengthOffset, y + height + heightOffset, z - widthOffset); + case 3: + return new StructureBoundingBox(x + widthOffset, y + heightOffset, z - length, x + width + widthOffset, y + height + heightOffset, z + lengthOffset); + } + } + return new StructureBoundingBox(x + lengthOffset, y + heightOffset, z + widthOffset, x + length + lengthOffset, y + height + heightOffset, z + width + widthOffset); + } + + protected void placeSpawnerAtCurrentPosition(World var1, Random var2, int var3, int var4, int var5, ResourceLocation var6, StructureBoundingBox var7) + { + final int var8 = this.getXWithOffset(var3, var5); + final int var9 = this.getYWithOffset(var4); + final int var10 = this.getZWithOffset(var3, var5); + + BlockPos pos = new BlockPos(var8, var9, var10); + if (var7.isVecInside(pos) && var1.getBlockState(pos).getBlock() != Blocks.MOB_SPAWNER) + { + var1.setBlockState(pos, Blocks.MOB_SPAWNER.getDefaultState(), 2); + final TileEntityMobSpawner var11 = (TileEntityMobSpawner) var1.getTileEntity(pos); + + if (var11 != null) + { + var11.getSpawnerBaseLogic().setEntityId(var6); + } + } + } + + protected int[] offsetTowerCoords(int var1, int var2, int var3, int var4, int var5) + { + final int var6 = this.getXWithOffset(var1, var3); + final int var7 = this.getYWithOffset(var2); + final int var8 = this.getZWithOffset(var1, var3); + return var5 == 0 ? new int[] + {var6 + 1, var7 - 1, var8 - var4 / 2} : var5 == 1 ? new int[] + {var6 + var4 / 2, var7 - 1, var8 + 1} : var5 == 2 ? new int[] + {var6 - 1, var7 - 1, var8 + var4 / 2} : var5 == 3 ? new int[] + {var6 - var4 / 2, var7 - 1, var8 - 1} : new int[] + {var1, var2, var3}; + } + + public int[] getOffsetAsIfRotated(int[] var1, EnumFacing var2) + { + final EnumFacing var3 = getCoordBaseMode(); + final int[] var4 = new int[3]; + this.setCoordBaseMode(var2); + var4[0] = this.getXWithOffset(var1[0], var1[2]); + var4[1] = this.getYWithOffset(var1[1]); + var4[2] = this.getZWithOffset(var1[0], var1[2]); + this.setCoordBaseMode(var3); + return var4; + } + + @Override + protected int getXWithOffset(int var1, int var2) + { + switch (getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return this.boundingBox.minX + var1; + + case 1: + return this.boundingBox.maxX - var2; + + case 2: + return this.boundingBox.maxX - var1; + + case 3: + return this.boundingBox.minX + var2; + + default: + return var1; + } + } + + @Override + protected int getZWithOffset(int var1, int var2) + { + switch (getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return this.boundingBox.minZ + var2; + + case 1: + return this.boundingBox.minZ + var1; + + case 2: + return this.boundingBox.maxZ - var2; + + case 3: + return this.boundingBox.maxZ - var1; + + default: + return var2; + } + } + + @Override + protected int getYWithOffset(int var1) + { + return super.getYWithOffset(var1); + } + + protected static class SwitchEnumFacing + { + + protected static int[] field_176064_a = new int[EnumFacing.VALUES.length]; + + static + { + try + { + field_176064_a[EnumFacing.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError var4) + { + } + + try + { + field_176064_a[EnumFacing.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError var3) + { + } + + try + { + field_176064_a[EnumFacing.WEST.ordinal()] = 3; + } catch (NoSuchFieldError var2) + { + } + + try + { + field_176064_a[EnumFacing.EAST.ordinal()] = 4; + } catch (NoSuchFieldError var1) + { + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentMoon.java new file mode 100644 index 00000000..7dc82430 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentMoon.java @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public abstract class StructureComponentMoon extends StructureComponent +{ + + public StructureComponentMoon() + { + } + + public StructureComponentMoon(int var1) + { + super(var1); + } + + public static StructureBoundingBox getComponentToAddBoundingBox(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9) + { + switch (var9) + { + case 0: + return new StructureBoundingBox(var0 + var3, var1 + var4, var2 + var5, var0 + var6 + var3, var1 + var7 + var4, var2 + var8 + var5); + + case 1: + return new StructureBoundingBox(var0 - var8 + var5, var1 + var4, var2 + var3, var0 + var5, var1 + var7 + var4, var2 + var6 + var3); + + case 2: + return new StructureBoundingBox(var0 - var6 - var3, var1 + var4, var2 - var8 - var5, var0 - var3, var1 + var7 + var4, var2 - var5); + + case 3: + return new StructureBoundingBox(var0 + var5, var1 + var4, var2 - var6, var0 + var8 + var5, var1 + var7 + var4, var2 + var3); + + default: + return new StructureBoundingBox(var0 + var3, var1 + var4, var2 + var5, var0 + var6 + var3, var1 + var7 + var4, var2 + var8 + var5); + } + } + + protected TileEntityMobSpawner placeSpawnerAtCurrentPosition(World var1, Random var2, int var3, int var4, int var5, ResourceLocation var6, StructureBoundingBox var7) + { + TileEntityMobSpawner var8 = null; + final int var9 = this.getXWithOffset(var3, var5); + final int var10 = this.getYWithOffset(var4); + final int var11 = this.getZWithOffset(var3, var5); + + if (var7.isVecInside(new BlockPos(var9, var10, var11)) && var1.getBlockState(new BlockPos(var9, var10, var11)).getBlock() != Blocks.MOB_SPAWNER) + { + var1.setBlockState(new BlockPos(var9, var10, var11), Blocks.MOB_SPAWNER.getDefaultState(), 2); + var8 = (TileEntityMobSpawner) var1.getTileEntity(new BlockPos(var9, var10, var11)); + + if (var8 != null) + { + var8.getSpawnerBaseLogic().setEntityId(var6); + } + } + + return var8; + } + + protected int[] offsetTowerCoords(int var1, int var2, int var3, int var4, int var5) + { + final int var6 = this.getXWithOffset(var1, var3); + final int var7 = this.getYWithOffset(var2); + final int var8 = this.getZWithOffset(var1, var3); + return var5 == 0 ? new int[] + {var6 + 1, var7 - 1, var8 - var4 / 2} : var5 == 1 ? new int[] + {var6 + var4 / 2, var7 - 1, var8 + 1} : var5 == 2 ? new int[] + {var6 - 1, var7 - 1, var8 + var4 / 2} : var5 == 3 ? new int[] + {var6 - var4 / 2, var7 - 1, var8 - 1} : new int[] + {var1, var2, var3}; + } + + @Override + protected int getXWithOffset(int var1, int var2) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return this.boundingBox.minX + var1; + + case 1: + return this.boundingBox.maxX - var2; + + case 2: + return this.boundingBox.maxX - var1; + + case 3: + return this.boundingBox.minX + var2; + + default: + return var1; + } + } + + @Override + protected int getYWithOffset(int var1) + { + return super.getYWithOffset(var1); + } + + @Override + protected int getZWithOffset(int var1, int var2) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return this.boundingBox.minZ + var2; + + case 1: + return this.boundingBox.minZ + var1; + + case 2: + return this.boundingBox.maxZ - var2; + + case 3: + return this.boundingBox.maxZ - var1; + + default: + return var2; + } + } + + protected int getXWithOffsetAsIfRotated(int var1, int var2, int var3) + { + if (this.getCoordBaseMode().getHorizontalIndex() < 0) + { + return var1; + } else + { + switch ((this.getCoordBaseMode().getHorizontalIndex() + var3) % 4) + { + case 0: + return this.boundingBox.minX + var1; + + case 1: + return this.boundingBox.maxX - var2; + + case 2: + return this.boundingBox.maxX - var1; + + case 3: + return this.boundingBox.minX + var2; + + default: + return var1; + } + } + } + + protected int getZWithOffsetAsIfRotated(int var1, int var2, int var3) + { + if (this.getCoordBaseMode().getHorizontalIndex() < 0) + { + return var1; + } else + { + switch ((this.getCoordBaseMode().getHorizontalIndex() + var3) % 4) + { + case 0: + return this.boundingBox.minZ + var2; + + case 1: + return this.boundingBox.minZ + var1; + + case 2: + return this.boundingBox.maxZ - var2; + + case 3: + return this.boundingBox.maxZ - var1; + + default: + return var2; + } + } + } + + protected void placeBlockRotated(World var1, Block var2, int var3, int var4, int var5, int var6, int var7, StructureBoundingBox var8) + { + final int var9 = this.getXWithOffsetAsIfRotated(var4, var6, var7); + final int var10 = this.getYWithOffset(var5); + final int var11 = this.getZWithOffsetAsIfRotated(var4, var6, var7); + + if (var8.isVecInside(new BlockPos(var9, var10, var11))) + { + var1.setBlockState(new BlockPos(var9, var10, var11), var2.getStateFromMeta(var3), 2); + } + } + + protected void fillBlocksRotated(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8, Block var9, int var10, int var11) + { + for (int var12 = var4; var12 <= var7; ++var12) + { + for (int var13 = var3; var13 <= var6; ++var13) + { + for (int var14 = var5; var14 <= var8; ++var14) + { + this.placeBlockRotated(var1, var9, var10, var13, var12, var14, var11, var2); + } + } + } + } + + protected void fillAirRotated(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9) + { + this.fillBlocksRotated(var1, var2, var3, var4, var5, var6, var7, var8, Blocks.AIR, 0, var9); + } + + protected int getStairMeta(int var1) + { + switch ((this.getCoordBaseMode().getHorizontalIndex() + var1) % 4) + { + case 0: + return 0; + + case 1: + return 2; + + case 2: + return 1; + + case 3: + return 3; + + default: + return -1; + } + } + + protected int getLadderMeta(int var1) + { + switch ((this.getCoordBaseMode().getHorizontalIndex() + var1) % 4) + { + case 0: + return 4; + + case 1: + return 2; + + case 2: + return 5; + + case 3: + return 3; + + default: + return -1; + } + } + + protected int getLadderMeta(int var1, int var2) + { + return this.getLadderMeta(var1 + var2); + } + + public void nullifySkyLightForBoundingBox(World var1) + { + this.nullifySkyLight(var1, this.boundingBox.minX - 1, this.boundingBox.minY - 1, this.boundingBox.minZ - 1, this.boundingBox.maxX + 1, this.boundingBox.maxY + 1, this.boundingBox.maxZ + 1); + } + + public void nullifySkyLightAtCurrentPosition(World var1, int var2, int var3, int var4, int var5, int var6, int var7) + { + this.nullifySkyLight(var1, this.getXWithOffset(var2, var4), this.getYWithOffset(var3), this.getZWithOffset(var2, var4), this.getXWithOffset(var5, var7), this.getYWithOffset(var6), + this.getZWithOffset(var5, var7)); + } + + public void nullifySkyLight(World var1, int var2, int var3, int var4, int var5, int var6, int var7) + { + for (int var8 = var2; var8 <= var5; ++var8) + { + for (int var9 = var4; var9 <= var7; ++var9) + { + for (int var10 = var3; var10 <= var6; ++var10) + { + var1.setLightFor(EnumSkyBlock.SKY, new BlockPos(var8, var10, var9), 0); + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillage.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillage.java new file mode 100644 index 00000000..4af98e1a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillage.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.entities.EntityAlienVillager; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class StructureComponentVillage extends StructureComponent +{ + + static + { + try + { + MapGenVillageMoon.initiateStructures(); + } catch (Throwable e) + { + + } + } + + private int villagersSpawned; + protected StructureComponentVillageStartPiece startPiece; + + public StructureComponentVillage() + { + } + + protected StructureComponentVillage(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2) + { + super(par2); + this.startPiece = par1ComponentVillageStartPiece; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbttagcompound) + { + nbttagcompound.setInteger("VCount", this.villagersSpawned); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + this.villagersSpawned = nbt.getInteger("VCount"); + } + + protected StructureComponent getNextComponentNN(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, List par2List, Random par3Random, int par4, int par5) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY + par4, + this.boundingBox.minZ + par5, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + case 1: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, + this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + case 2: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY + par4, + this.boundingBox.minZ + par5, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + case 3: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, + this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + default: + return null; + } + } + + protected StructureComponent getNextComponentPP(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, List par2List, Random par3Random, int par4, int par5) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY + par4, + this.boundingBox.minZ + par5, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + case 1: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, + this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + case 2: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY + par4, + this.boundingBox.minZ + par5, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + case 3: + return StructureVillagePiecesMoon.getNextStructureComponent(par1ComponentVillageStartPiece, par2List, par3Random, this.boundingBox.minX + par5, this.boundingBox.minY + par4, + this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + default: + return null; + } + } + + protected int getAverageGroundLevel(World world, StructureBoundingBox boundingBox) + { + int i = 0; + int j = 0; + BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(); + + for (int k = this.boundingBox.minZ; k <= this.boundingBox.maxZ; ++k) + { + for (int l = this.boundingBox.minX; l <= this.boundingBox.maxX; ++l) + { + mutableBlockPos.setPos(l, 64, k); + + if (boundingBox.isVecInside(mutableBlockPos)) + { + i += world.getTopSolidOrLiquidBlock(mutableBlockPos).getY(); + ++j; + } + } + } + + if (j == 0) + { + return -1; + } else + { + return i / j; + } + } + + protected static boolean canVillageGoDeeper(StructureBoundingBox par0StructureBoundingBox) + { + return par0StructureBoundingBox != null && par0StructureBoundingBox.minY > 10; + } + + protected void spawnVillagers(World par1World, StructureBoundingBox par2StructureBoundingBox, int par3, int par4, int par5, int par6) + { + if (this.villagersSpawned < par6) + { + for (int var7 = this.villagersSpawned; var7 < par6; ++var7) + { + int var8 = this.getXWithOffset(par3 + var7, par5); + final int var9 = this.getYWithOffset(par4); + int var10 = this.getZWithOffset(par3 + var7, par5); + + var8 += par1World.rand.nextInt(3) - 1; + var10 += par1World.rand.nextInt(3) - 1; + + if (!par2StructureBoundingBox.isVecInside(new BlockPos(var8, var9, var10))) + { + break; + } + + ++this.villagersSpawned; + final EntityAlienVillager var11 = new EntityAlienVillager(par1World); + var11.setLocationAndAngles(var8 + 0.5D, var9, var10 + 0.5D, 0.0F, 0.0F); + par1World.spawnEntity(var11); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField.java new file mode 100644 index 00000000..a127f52a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageField extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageField() + { + } + + public StructureComponentVillageField(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + public static StructureComponentVillageField func_74900_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 13, 4, 9, par6); + return StructureComponent.findIntersecting(par1List, var8) == null ? new StructureComponentVillageField(par0ComponentVillageStartPiece, par7, par2Random, var8, par6) : null; + } + + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 7 - 1, 0); + } + + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 1, 0, 12, 4, 8, Blocks.AIR.getDefaultState(), Blocks.AIR.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 1, 2, 0, 7, Blocks.DIRT.getDefaultState(), Blocks.DIRT.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 4, 0, 1, 5, 0, 7, Blocks.DIRT.getDefaultState(), Blocks.DIRT.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 7, 0, 1, 8, 0, 7, Blocks.DIRT.getDefaultState(), Blocks.DIRT.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 10, 0, 1, 11, 0, 7, Blocks.DIRT.getDefaultState(), Blocks.DIRT.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 0, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 6, 0, 0, 6, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 12, 0, 0, 12, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 0, 11, 0, 0, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 8, 11, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 3, 0, 1, 3, 0, 7, Blocks.FLOWING_WATER.getDefaultState(), Blocks.FLOWING_WATER.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 9, 0, 1, 9, 0, 7, Blocks.FLOWING_WATER.getDefaultState(), Blocks.FLOWING_WATER.getDefaultState(), false); + int var4; + + for (var4 = 1; var4 <= 7; ++var4) + { + for (int i = 1; i < 12; i++) + { + if (i % 3 != 0) + { + if (par2Random.nextInt(3) == 0) + { + this.setBlockState(par1World, Blocks.SAPLING.getStateFromMeta(MathHelper.getInt(par2Random, 0, 2)), i, 1, var4, par3StructureBoundingBox); + } + } + } + } + + for (var4 = 0; var4 < 9; ++var4) + { + for (int var5 = 0; var5 < 13; ++var5) + { + this.clearCurrentPositionBlocksUpwards(par1World, var5, 4, var4, par3StructureBoundingBox); + this.replaceAirAndLiquidDownwards(par1World, Blocks.DIRT.getDefaultState(), var5, -1, var4, par3StructureBoundingBox); + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField2.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField2.java new file mode 100644 index 00000000..2452d3ab --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageField2.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageField2 extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + private Block cropTypeA; + private Block cropTypeB; + private Block cropTypeC; + private Block cropTypeD; + + public StructureComponentVillageField2() + { + } + + public StructureComponentVillageField2(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + this.cropTypeA = this.getRandomCrop(par3Random); + this.cropTypeB = this.getRandomCrop(par3Random); + this.cropTypeC = this.getRandomCrop(par3Random); + this.cropTypeD = this.getRandomCrop(par3Random); + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + nbt.setInteger("CropTypeA", Block.getIdFromBlock(this.cropTypeA)); + nbt.setInteger("CropTypeB", Block.getIdFromBlock(this.cropTypeB)); + nbt.setInteger("CropTypeC", Block.getIdFromBlock(this.cropTypeC)); + nbt.setInteger("CropTypeD", Block.getIdFromBlock(this.cropTypeD)); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + this.cropTypeA = Block.getBlockById(nbt.getInteger("CropTypeA")); + this.cropTypeB = Block.getBlockById(nbt.getInteger("CropTypeB")); + this.cropTypeC = Block.getBlockById(nbt.getInteger("CropTypeC")); + this.cropTypeD = Block.getBlockById(nbt.getInteger("CropTypeD")); + } + + private Block getRandomCrop(Random par1Random) + { + switch (par1Random.nextInt(5)) + { + case 0: + return Blocks.CARROTS; + case 1: + return Blocks.POTATOES; + default: + return Blocks.WHEAT; + } + } + + public static StructureComponentVillageField2 func_74900_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final StructureBoundingBox structureboundingbox = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 13, 4, 9, par6); + return StructureComponentVillage.canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(par1List, structureboundingbox) == null + ? new StructureComponentVillageField2(par0ComponentVillageStartPiece, par7, par2Random, structureboundingbox, par6) : null; + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 4 - 1, 0); + } + + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 1, 0, 12, 4, 8, Blocks.AIR.getDefaultState(), Blocks.AIR.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 1, 2, 0, 7, Blocks.FARMLAND.getDefaultState(), Blocks.FARMLAND.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 4, 0, 1, 5, 0, 7, Blocks.FARMLAND.getDefaultState(), Blocks.FARMLAND.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 7, 0, 1, 8, 0, 7, Blocks.FARMLAND.getDefaultState(), Blocks.FARMLAND.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 10, 0, 1, 11, 0, 7, Blocks.FARMLAND.getDefaultState(), Blocks.FARMLAND.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 0, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 6, 0, 0, 6, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 12, 0, 0, 12, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 0, 11, 0, 0, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 8, 11, 0, 8, Blocks.LOG.getDefaultState(), Blocks.LOG.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 3, 0, 1, 3, 0, 7, Blocks.FLOWING_WATER.getDefaultState(), Blocks.FLOWING_WATER.getDefaultState(), false); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 9, 0, 1, 9, 0, 7, Blocks.FLOWING_WATER.getDefaultState(), Blocks.FLOWING_WATER.getDefaultState(), false); + int i; + + for (i = 1; i <= 7; ++i) + { + this.setBlockState(par1World, this.cropTypeA.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 1, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeA.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 2, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeB.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 4, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeB.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 5, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeC.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 7, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeC.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 8, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeD.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 10, 1, i, par3StructureBoundingBox); + this.setBlockState(par1World, this.cropTypeD.getStateFromMeta(MathHelper.getInt(par2Random, 2, 7)), 11, 1, i, par3StructureBoundingBox); + } + + for (i = 0; i < 9; ++i) + { + for (int j = 0; j < 13; ++j) + { + this.clearCurrentPositionBlocksUpwards(par1World, j, 4, i, par3StructureBoundingBox); + this.replaceAirAndLiquidDownwards(par1World, Blocks.DIRT.getDefaultState(), j, -1, i, par3StructureBoundingBox); + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageHouse.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageHouse.java new file mode 100644 index 00000000..a221713b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageHouse.java @@ -0,0 +1,472 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockGlowstoneTorch; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageHouse extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageHouse() + { + } + + public StructureComponentVillageHouse(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + } + + public static StructureComponentVillageHouse func_74921_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 17, 9, 17, par6); + return StructureComponent.findIntersecting(par1List, var8) == null ? new StructureComponentVillageHouse(par0ComponentVillageStartPiece, par7, par2Random, var8, par6) : null; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 9 - 1, 0); + } + + this.fillWithAir(par1World, par3StructureBoundingBox, 3, 0, 3, 13, 9, 13); + this.fillWithAir(par1World, par3StructureBoundingBox, 5, 0, 2, 11, 9, 14); + this.fillWithAir(par1World, par3StructureBoundingBox, 2, 0, 5, 14, 9, 11); + + for (int i = 3; i <= 13; i++) + { + for (int j = 3; j <= 13; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + for (int i = 5; i <= 11; i++) + { + for (int j = 2; j <= 14; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + for (int i = 2; i <= 14; i++) + { + for (int j = 5; j <= 11; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + int yLevel = 0; + + for (yLevel = -8; yLevel < 4; yLevel++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 11, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 15, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 1, par3StructureBoundingBox); + } + + yLevel = 4; + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 11, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 15, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 1, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode()), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateY()), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().getOpposite()), 8, yLevel, 14, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateYCCW()), 2, yLevel, 8, par3StructureBoundingBox); + + yLevel = 5; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 5, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 14, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 11, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 2, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + + yLevel = 6; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 4, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 11, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 13, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 14, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 12, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 5, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 3, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 2, par3StructureBoundingBox); + + yLevel = 7; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 6, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 9, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 13, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 14, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 10, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 7, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 3, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 2, par3StructureBoundingBox); + + yLevel = 8; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 6, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 9, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 12, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 13, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 10, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 7, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 4, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 3, par3StructureBoundingBox); + + // extras + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 9, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 9, par3StructureBoundingBox); + + yLevel = 9; + + for (int i = 5; i <= 11; i++) + { + for (int j = 5; j <= 11; j++) + { + if (!(j == 5 && i == 5 || j == 5 && i == 11 || j == 11 && i == 5 || j == 11 && i == 11)) + { + if (i >= 7 && i <= 9 && j >= 7 && j <= 9) + { + this.setBlockState(par1World, Blocks.GLASS.getDefaultState(), i, yLevel, j, par3StructureBoundingBox); + } else + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), i, yLevel, j, par3StructureBoundingBox); + } + } + } + } + + this.spawnVillagers(par1World, par3StructureBoundingBox, 6, 5, 6, 4); + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillagePathGen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillagePathGen.java new file mode 100644 index 00000000..79cfe413 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillagePathGen.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillagePathGen extends StructureComponentVillageRoadPiece +{ + + private int averageGroundLevel; + + public StructureComponentVillagePathGen() + { + } + + public StructureComponentVillagePathGen(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + this.averageGroundLevel = Math.max(par4StructureBoundingBox.getXSize(), par4StructureBoundingBox.getZSize()); + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + @Override + public void buildComponent(StructureComponent par1StructureComponent, List par2List, Random par3Random) + { + boolean var4 = false; + int var5; + StructureComponent var6; + + for (var5 = par3Random.nextInt(5); var5 < this.averageGroundLevel - 8; var5 += 2 + par3Random.nextInt(5)) + { + var6 = this.getNextComponentNN((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, 0, var5); + + if (var6 != null) + { + var5 += Math.max(var6.getBoundingBox().getXSize(), var6.getBoundingBox().getZSize()); + var4 = true; + } + } + + for (var5 = par3Random.nextInt(5); var5 < this.averageGroundLevel - 8; var5 += 2 + par3Random.nextInt(5)) + { + var6 = this.getNextComponentPP((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, 0, var5); + + if (var6 != null) + { + var5 += Math.max(var6.getBoundingBox().getXSize(), var6.getBoundingBox().getZSize()); + var4 = true; + } + } + + if (var4 && par3Random.nextInt(3) > 0) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, + this.boundingBox.minY, this.boundingBox.maxZ - 2, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + break; + case 1: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX, + this.boundingBox.minY, this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + break; + case 2: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, + this.boundingBox.minY, this.boundingBox.minZ, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + break; + case 3: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX - 2, + this.boundingBox.minY, this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + } + } + + if (var4 && par3Random.nextInt(3) > 0) + { + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, + this.boundingBox.minY, this.boundingBox.maxZ - 2, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + break; + case 1: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX, + this.boundingBox.minY, this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + break; + case 2: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, + this.boundingBox.minY, this.boundingBox.minZ, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + break; + case 3: + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX - 2, + this.boundingBox.minY, this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + } + } + } + + public static StructureBoundingBox func_74933_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6) + { + for (int var7 = 7 * MathHelper.getInt(par2Random, 3, 5); var7 >= 7; var7 -= 7) + { + final StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 3, 3, var7, par6); + + if (StructureComponent.findIntersecting(par1List, var8) == null) + { + return var8; + } + } + + return null; + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + final Block var4 = Blocks.PLANKS; + + for (int var5 = this.boundingBox.minX; var5 <= this.boundingBox.maxX; ++var5) + { + for (int var6 = this.boundingBox.minZ; var6 <= this.boundingBox.maxZ; ++var6) + { + BlockPos pos = new BlockPos(var5, par1World.getTopSolidOrLiquidBlock(new BlockPos(var5, 0, var6)).getY() - 1, var6); + IBlockState state = par1World.getBlockState(pos); + if (par3StructureBoundingBox.isVecInside(new BlockPos(var5, 64, var6)) + && (state.getBlock() == GCBlocks.blockMoon && state.getBlock().getMetaFromState(state) == 5 || Blocks.AIR == state.getBlock())) + { + final int var7 = par1World.getTopSolidOrLiquidBlock(new BlockPos(var5, 0, var6)).getY() - 1; + par1World.setBlockState(new BlockPos(var5, var7, var6), var4.getStateFromMeta(1), 2); + } + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageRoadPiece.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageRoadPiece.java new file mode 100644 index 00000000..cf655c7a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageRoadPiece.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +public abstract class StructureComponentVillageRoadPiece extends StructureComponentVillage +{ + + public StructureComponentVillageRoadPiece() + { + } + + protected StructureComponentVillageRoadPiece(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2) + { + super(par1ComponentVillageStartPiece, par2); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageStartPiece.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageStartPiece.java new file mode 100644 index 00000000..07c2d470 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageStartPiece.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.ArrayList; +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageStartPiece extends StructureComponentVillageWell +{ + + public BiomeProvider biomeProvider; + public int terrainType; + public StructureVillagePieceWeightMoon structVillagePieceWeight; + public ArrayList structureVillageWeightedPieceList; + public ArrayList pendingHouses = new ArrayList(); + public ArrayList pendingRoads = new ArrayList(); + + public StructureComponentVillageStartPiece() + { + } + + public StructureComponentVillageStartPiece(BiomeProvider biomeProvider, int par2, Random par3Random, int par4, int par5, ArrayList par6ArrayList, int par7) + { + super(null, 0, par3Random, par4, par5); + this.biomeProvider = biomeProvider; + this.structureVillageWeightedPieceList = par6ArrayList; + this.terrainType = par7; + this.startPiece = this; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("TerrainType", this.terrainType); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.terrainType = nbt.getInteger("TerrainType"); + } + + public BiomeProvider getBiomeProvider() + { + return this.biomeProvider; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageTorch.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageTorch.java new file mode 100644 index 00000000..eb2e0307 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageTorch.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockGlowstoneTorch; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageTorch extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageTorch() + { + } + + public StructureComponentVillageTorch(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + public static StructureBoundingBox func_74904_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6) + { + final StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 3, 4, 2, par6); + return StructureComponent.findIntersecting(par1List, var7) != null ? null : var7; + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 4 - 1, 0); + } + + this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 2, 3, 1, Blocks.AIR.getDefaultState(), Blocks.AIR.getDefaultState(), false); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 0, 0, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 1, 0, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 2, 0, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.WOOL.getStateFromMeta(15), 1, 3, 0, par3StructureBoundingBox); + boolean flag = this.getCoordBaseMode() == EnumFacing.EAST || this.getCoordBaseMode() == EnumFacing.NORTH; + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateY()), flag ? 2 : 0, 3, 0, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode()), 1, 3, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateYCCW()), flag ? 0 : 2, 3, 0, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().getOpposite()), 1, 3, -1, par3StructureBoundingBox); + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWell.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWell.java new file mode 100644 index 00000000..058b5979 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWell.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import net.minecraft.block.BlockPlanks; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageWell extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageWell() + { + } + + public StructureComponentVillageWell(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, int par4, int par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(EnumFacing.byIndex(par3Random.nextInt(4))); + + switch (this.getCoordBaseMode().getHorizontalIndex()) + { + case 0: + case 2: + this.boundingBox = new StructureBoundingBox(par4, 64, par5, par4 + 6 - 1, 78, par5 + 6 - 1); + break; + default: + this.boundingBox = new StructureBoundingBox(par4, 64, par5, par4 + 6 - 1, 78, par5 + 6 - 1); + } + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + @Override + public void buildComponent(StructureComponent par1StructureComponent, List par2List, Random par3Random) + { + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, + this.boundingBox.maxY - 4, this.boundingBox.minZ + 1, EnumFacing.byHorizontalIndex(1), this.getComponentType()); + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, + this.boundingBox.maxY - 4, this.boundingBox.minZ + 1, EnumFacing.byHorizontalIndex(3), this.getComponentType()); + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX + 1, + this.boundingBox.maxY - 4, this.boundingBox.minZ - 1, EnumFacing.byHorizontalIndex(2), this.getComponentType()); + StructureVillagePiecesMoon.getNextStructureComponentVillagePath((StructureComponentVillageStartPiece) par1StructureComponent, par2List, par3Random, this.boundingBox.minX + 1, + this.boundingBox.maxY - 4, this.boundingBox.maxZ + 1, EnumFacing.byHorizontalIndex(0), this.getComponentType()); + } + + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 3, 0); + } + + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 1, 4, 12, 4, GCBlocks.basicBlock.getStateFromMeta(4), Blocks.FLOWING_WATER.getDefaultState(), false); + this.setBlockState(par1World, Blocks.AIR.getDefaultState(), 2, 12, 2, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.AIR.getDefaultState(), 3, 12, 2, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.AIR.getDefaultState(), 2, 12, 3, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.AIR.getDefaultState(), 3, 12, 3, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 13, 1, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 14, 1, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 4, 13, 1, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 4, 14, 1, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 13, 4, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 1, 14, 4, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 4, 13, 4, par3StructureBoundingBox); + this.setBlockState(par1World, Blocks.DARK_OAK_FENCE.getDefaultState(), 4, 14, 4, par3StructureBoundingBox); + this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 15, 1, 4, 15, 4, GCBlocks.basicBlock.getStateFromMeta(4), GCBlocks.basicBlock.getStateFromMeta(4), false); + + for (int var4 = 0; var4 <= 5; ++var4) + { + for (int var5 = 0; var5 <= 5; ++var5) + { + if (var5 == 0 || var5 == 5 || var4 == 0 || var4 == 5) + { + this.setBlockState(par1World, Blocks.PLANKS.getDefaultState().withProperty(BlockPlanks.VARIANT, BlockPlanks.EnumType.SPRUCE), var5, 11, var4, par3StructureBoundingBox); + this.clearCurrentPositionBlocksUpwards(par1World, var5, 12, var4, par3StructureBoundingBox); + } + } + } + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWoodHut.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWoodHut.java new file mode 100644 index 00000000..c8f9ff26 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureComponentVillageWoodHut.java @@ -0,0 +1,473 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockGlowstoneTorch; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class StructureComponentVillageWoodHut extends StructureComponentVillage +{ + + private int averageGroundLevel = -1; + + public StructureComponentVillageWoodHut() + { + } + + public StructureComponentVillageWoodHut(StructureComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, EnumFacing par5) + { + super(par1ComponentVillageStartPiece, par2); + this.setCoordBaseMode(par5); + this.boundingBox = par4StructureBoundingBox; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound nbt) + { + super.writeStructureToNBT(nbt); + + nbt.setInteger("AvgGroundLevel", this.averageGroundLevel); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.averageGroundLevel = nbt.getInteger("AvgGroundLevel"); + } + + public static StructureComponentVillageWoodHut func_74908_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 17, 9, 17, par6); + return StructureComponent.findIntersecting(par1List, var8) == null ? new StructureComponentVillageWoodHut(par0ComponentVillageStartPiece, par7, par2Random, var8, par6) : null; + } + + /** + * second Part of Structure generating, this for example places Spiderwebs, + * Mob Spawners, it closes Mineshafts at the end, it adds Fences... + */ + @Override + public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) + { + if (this.averageGroundLevel < 0) + { + this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox); + + if (this.averageGroundLevel < 0) + { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 9 - 1, 0); + } + + this.fillWithAir(par1World, par3StructureBoundingBox, 3, 0, 3, 13, 9, 13); + this.fillWithAir(par1World, par3StructureBoundingBox, 5, 0, 2, 11, 9, 14); + this.fillWithAir(par1World, par3StructureBoundingBox, 2, 0, 5, 14, 9, 11); + + for (int i = 3; i <= 13; i++) + { + for (int j = 3; j <= 13; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + for (int i = 5; i <= 11; i++) + { + for (int j = 2; j <= 14; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + for (int i = 2; i <= 14; i++) + { + for (int j = 5; j <= 11; j++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(3), i, 0, j, par3StructureBoundingBox); + } + } + + int yLevel = 0; + + for (yLevel = -8; yLevel < 4; yLevel++) + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 11, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 15, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, yLevel <= 1 ? GCBlocks.basicBlock.getStateFromMeta(4) : Blocks.AIR.getDefaultState(), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 1, par3StructureBoundingBox); + } + + yLevel = 4; + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 11, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 15, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 1, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode()), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateYCCW()), 14, yLevel, 8, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().getOpposite()), 8, yLevel, 14, + par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.glowstoneTorch.getDefaultState().withProperty(BlockGlowstoneTorch.FACING, this.getCoordBaseMode().rotateY()), 2, yLevel, 8, par3StructureBoundingBox); + + yLevel = 5; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 5, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 1, yLevel, 10, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 14, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 15, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 15, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 11, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 15, yLevel, 6, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 2, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 1, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 1, par3StructureBoundingBox); + + yLevel = 6; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 4, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 11, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 13, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 14, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 12, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 5, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 3, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 2, par3StructureBoundingBox); + + yLevel = 7; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 6, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 2, yLevel, 9, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 13, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 14, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 14, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 10, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 14, yLevel, 7, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 3, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 2, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 2, par3StructureBoundingBox); + + yLevel = 8; + + // corner 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 6, par3StructureBoundingBox); + + // side 1 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 3, yLevel, 9, par3StructureBoundingBox); + + // corner 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 10, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 6, yLevel, 12, par3StructureBoundingBox); + + // side 2 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 13, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 13, par3StructureBoundingBox); + + // corner 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 10, par3StructureBoundingBox); + + // side 3 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 9, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 13, yLevel, 7, par3StructureBoundingBox); + + // corner 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 6, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 10, yLevel, 4, par3StructureBoundingBox); + + // side 4 + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 3, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 3, par3StructureBoundingBox); + + // extras + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 5, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 5, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 11, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 11, yLevel, 5, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 4, yLevel, 9, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 12, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 12, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 9, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 8, yLevel, 4, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 7, yLevel, 4, par3StructureBoundingBox); + + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 7, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 8, par3StructureBoundingBox); + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), 12, yLevel, 9, par3StructureBoundingBox); + + yLevel = 9; + + for (int i = 5; i <= 11; i++) + { + for (int j = 5; j <= 11; j++) + { + if (!(j == 5 && i == 5 || j == 5 && i == 11 || j == 11 && i == 5 || j == 11 && i == 11)) + { + if (i >= 7 && i <= 9 && j >= 7 && j <= 9) + { + this.setBlockState(par1World, Blocks.GLASS.getDefaultState(), i, yLevel, j, par3StructureBoundingBox); + } else + { + this.setBlockState(par1World, GCBlocks.basicBlock.getStateFromMeta(4), i, yLevel, j, par3StructureBoundingBox); + } + } + } + } + + this.spawnVillagers(par1World, par3StructureBoundingBox, 6, 5, 6, 4); + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePieceWeightMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePieceWeightMoon.java new file mode 100644 index 00000000..bd1e9631 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePieceWeightMoon.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +public class StructureVillagePieceWeightMoon +{ + + public Class villagePieceClass; + public final int villagePieceWeight; + public int villagePiecesSpawned; + public int villagePiecesLimit; + + public StructureVillagePieceWeightMoon(Class par1Class, int par2, int par3) + { + this.villagePieceClass = par1Class; + this.villagePieceWeight = par2; + this.villagePiecesLimit = (int) (par3 / 1.5D); + } + + public boolean canSpawnMoreVillagePiecesOfType(int par1) + { + return this.villagePiecesLimit == 0 || this.villagePiecesSpawned < this.villagePiecesLimit; + } + + public boolean canSpawnMoreVillagePieces() + { + return this.villagePiecesLimit == 0 || this.villagePiecesSpawned < this.villagePiecesLimit; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePiecesMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePiecesMoon.java new file mode 100644 index 00000000..8b98bdf3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillagePiecesMoon.java @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public class StructureVillagePiecesMoon +{ + + public static ArrayList getStructureVillageWeightedPieceList(Random par0Random, int par1) + { + final ArrayList var2 = new ArrayList(); + var2.add(new StructureVillagePieceWeightMoon(StructureComponentVillageWoodHut.class, 5, MathHelper.getInt(par0Random, 2 + par1, 5 + par1 * 3))); + var2.add(new StructureVillagePieceWeightMoon(StructureComponentVillageField.class, 5, MathHelper.getInt(par0Random, 3 + par1, 5 + par1))); + var2.add(new StructureVillagePieceWeightMoon(StructureComponentVillageField2.class, 5, MathHelper.getInt(par0Random, 3 + par1, 5 + par1))); + var2.add(new StructureVillagePieceWeightMoon(StructureComponentVillageHouse.class, 5, MathHelper.getInt(par0Random, 3 + par1, 4 + par1 * 2))); + + final Iterator var3 = var2.iterator(); + + while (var3.hasNext()) + { + if (var3.next().villagePiecesLimit == 0) + { + var3.remove(); + } + } + + return var2; + } + + private static int func_75079_a(List par0List) + { + boolean var1 = false; + int var2 = 0; + StructureVillagePieceWeightMoon var4; + + for (final Iterator var3 = par0List.iterator(); var3.hasNext(); var2 += var4.villagePieceWeight) + { + var4 = var3.next(); + + if (var4.villagePiecesLimit > 0 && var4.villagePiecesSpawned < var4.villagePiecesLimit) + { + var1 = true; + } + } + + return var1 ? var2 : -1; + } + + private static StructureComponentVillage func_75083_a(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, StructureVillagePieceWeightMoon par1StructureVillagePieceWeight, List par2List, Random par3Random, int par4, int par5, int par6, EnumFacing par7, int par8) + { + final Class var9 = par1StructureVillagePieceWeight.villagePieceClass; + Object var10 = null; + + if (var9 == StructureComponentVillageWoodHut.class) + { + var10 = StructureComponentVillageWoodHut.func_74908_a(par0ComponentVillageStartPiece, par2List, par3Random, par4, par5, par6, par7, par8); + } else if (var9 == StructureComponentVillageField.class) + { + var10 = StructureComponentVillageField.func_74900_a(par0ComponentVillageStartPiece, par2List, par3Random, par4, par5, par6, par7, par8); + } else if (var9 == StructureComponentVillageField2.class) + { + var10 = StructureComponentVillageField2.func_74900_a(par0ComponentVillageStartPiece, par2List, par3Random, par4, par5, par6, par7, par8); + } else if (var9 == StructureComponentVillageHouse.class) + { + var10 = StructureComponentVillageHouse.func_74921_a(par0ComponentVillageStartPiece, par2List, par3Random, par4, par5, par6, par7, par8); + } + + return (StructureComponentVillage) var10; + } + + private static StructureComponentVillage getNextVillageComponent(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + final int var8 = StructureVillagePiecesMoon.func_75079_a(par0ComponentVillageStartPiece.structureVillageWeightedPieceList); + + if (var8 <= 0) + { + return null; + } else + { + int var9 = 0; + + while (var9 < 5) + { + ++var9; + int var10 = par2Random.nextInt(var8); + final Iterator var11 = par0ComponentVillageStartPiece.structureVillageWeightedPieceList.iterator(); + + while (var11.hasNext()) + { + final StructureVillagePieceWeightMoon var12 = var11.next(); + var10 -= var12.villagePieceWeight; + + if (var10 < 0) + { + if (!var12.canSpawnMoreVillagePiecesOfType(par7) + || var12 == par0ComponentVillageStartPiece.structVillagePieceWeight && par0ComponentVillageStartPiece.structureVillageWeightedPieceList.size() > 1) + { + break; + } + + final StructureComponentVillage var13 = StructureVillagePiecesMoon.func_75083_a(par0ComponentVillageStartPiece, var12, par1List, par2Random, par3, par4, par5, par6, par7); + + if (var13 != null) + { + ++var12.villagePiecesSpawned; + par0ComponentVillageStartPiece.structVillagePieceWeight = var12; + + if (!var12.canSpawnMoreVillagePieces()) + { + par0ComponentVillageStartPiece.structureVillageWeightedPieceList.remove(var12); + } + + return var13; + } + } + } + } + + final StructureBoundingBox var14 = StructureComponentVillageTorch.func_74904_a(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6); + + if (var14 != null) + { + return new StructureComponentVillageTorch(par0ComponentVillageStartPiece, par7, par2Random, var14, par6); + } else + { + return null; + } + } + } + + /** + * attempts to find a next Structure Component to be spawned, private + * Village function + */ + private static StructureComponent getNextVillageStructureComponent(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + if (par7 > 50) + { + return null; + } else if (Math.abs(par3 - par0ComponentVillageStartPiece.getBoundingBox().minX) <= 112 && Math.abs(par5 - par0ComponentVillageStartPiece.getBoundingBox().minZ) <= 112) + { + final StructureComponentVillage var8 = StructureVillagePiecesMoon.getNextVillageComponent(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6, par7 + 1); + + if (var8 != null) + { + par1List.add(var8); + par0ComponentVillageStartPiece.pendingHouses.add(var8); + return var8; + } + + return null; + } else + { + return null; + } + } + + private static StructureComponent getNextComponentVillagePath(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + if (par7 > 3 + par0ComponentVillageStartPiece.terrainType) + { + return null; + } else if (Math.abs(par3 - par0ComponentVillageStartPiece.getBoundingBox().minX) <= 112 && Math.abs(par5 - par0ComponentVillageStartPiece.getBoundingBox().minZ) <= 112) + { + final StructureBoundingBox var8 = StructureComponentVillagePathGen.func_74933_a(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6); + + if (var8 != null && var8.minY > 10) + { + final StructureComponentVillagePathGen var9 = new StructureComponentVillagePathGen(par0ComponentVillageStartPiece, par7, par2Random, var8, par6); + + par1List.add(var9); + par0ComponentVillageStartPiece.pendingRoads.add(var9); + return var9; + } + + return null; + } else + { + return null; + } + } + + /** + * attempts to find a next Structure Component to be spawned + */ + static StructureComponent getNextStructureComponent(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + return StructureVillagePiecesMoon.getNextVillageStructureComponent(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6, par7); + } + + static StructureComponent getNextStructureComponentVillagePath(StructureComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, EnumFacing par6, int par7) + { + return StructureVillagePiecesMoon.getNextComponentVillagePath(par0ComponentVillageStartPiece, par1List, par2Random, par3, par4, par5, par6, par7); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillageStartMoon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillageStartMoon.java new file mode 100644 index 00000000..7ef7aa1f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/StructureVillageStartMoon.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Random; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.StructureStart; + +public class StructureVillageStartMoon extends StructureStart +{ + + public StructureVillageStartMoon() + { + } + + public StructureVillageStartMoon(World par1World, Random par2Random, int par3, int par4, int par5) + { + super(par3, par4); + + final ArrayList var6 = StructureVillagePiecesMoon.getStructureVillageWeightedPieceList(par2Random, par5); + final StructureComponentVillageStartPiece var7 = new StructureComponentVillageStartPiece(par1World.getBiomeProvider(), 0, par2Random, (par3 << 4) + 2, (par4 << 4) + 2, var6, par5); + this.components.add(var7); + var7.buildComponent(var7, this.components, par2Random); + final ArrayList var8 = var7.pendingRoads; + final ArrayList var9 = var7.pendingHouses; + int var10; + + while (!var8.isEmpty() || !var9.isEmpty()) + { + StructureComponent var11; + + if (var8.isEmpty()) + { + var10 = par2Random.nextInt(var9.size()); + var11 = (StructureComponent) var9.remove(var10); + var11.buildComponent(var7, this.components, par2Random); + } else + { + var10 = par2Random.nextInt(var8.size()); + var11 = (StructureComponent) var8.remove(var10); + var11.buildComponent(var7, this.components, par2Random); + } + } + + this.updateBoundingBox(); + var10 = 0; + final Iterator var13 = this.components.iterator(); + + while (var13.hasNext()) + { + final StructureComponent var12 = var13.next(); + + if (!(var12 instanceof StructureComponentVillageRoadPiece)) + { + ++var10; + } + } + } + + /** + * currently only defined for Villages, returns true if Village has more + * than 2 non-road components + */ + @Override + public boolean isSizeableStructure() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenMinableMeta.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenMinableMeta.java new file mode 100644 index 00000000..46bd4ff1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenMinableMeta.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockMatcher; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenMinable; + +public class WorldGenMinableMeta extends WorldGenMinable +{ + + private final Block minableBlockId; + + private final int numberOfBlocks; + + private final int metadata; + + private boolean usingMetadata = false; + + private final Block fillerID; + + private final int fillerMetadata; + + public WorldGenMinableMeta(Block placeBlock, int blockCount, int placeMeta, boolean metaActive, Block replaceBlock, int replaceMeta) + { + super(placeBlock.getStateFromMeta(placeMeta), blockCount, BlockMatcher.forBlock(replaceBlock)); + this.minableBlockId = placeBlock; + this.numberOfBlocks = blockCount; + this.metadata = placeMeta; + this.usingMetadata = metaActive; + this.fillerID = replaceBlock; + this.fillerMetadata = replaceMeta; + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + float f = rand.nextFloat() * (float) Math.PI; + float sinFvalue = MathHelper.sin(f) * (float) this.numberOfBlocks / 8.0F; + float cosFvalue = MathHelper.cos(f) * (float) this.numberOfBlocks / 8.0F; + float chunkCentreX = (float) (position.getX() + 8); + float chunkCentreZ = (float) (position.getZ() + 8); + double clumpXa = (double) (chunkCentreX + sinFvalue); + double clumpXb = (double) (chunkCentreX - sinFvalue) - clumpXa; + double clumpZa = (double) (chunkCentreZ + cosFvalue); + double clumpZb = (double) (chunkCentreZ - cosFvalue) - clumpZa; + double clumpYa = (double) (position.getY() + rand.nextInt(3) - 2); + double clumpYb = (double) (position.getY() + rand.nextInt(3) - 2) - clumpYa; + + final IBlockState oreState = this.minableBlockId.getStateFromMeta(this.usingMetadata ? this.metadata : 0); + float concentricRadius = this.numberOfBlocks; + double size = (rand.nextDouble() * (double) this.numberOfBlocks + 1D) / 16.0D; + + for (int i = 0; i < this.numberOfBlocks; ++i) + { + float f1 = (float) i / concentricRadius; + double centreX = clumpXa + clumpXb * (double) f1; + double centreY = clumpYa + clumpYb * (double) f1; + double centreZ = clumpZa + clumpZb * (double) f1; + double sizeXZ = ((double) (MathHelper.sin((float) Math.PI * f1) + 1.0F) * size + 1.0D) / 2.0D; + double sizeY = sizeXZ; + int xmin = MathHelper.floor(centreX - sizeXZ); + int xmax = MathHelper.floor(centreX + sizeXZ); + int ymin = MathHelper.floor(centreY - sizeY); + int ymax = MathHelper.floor(centreY + sizeY); + int zmin = MathHelper.floor(centreZ - sizeXZ); + int zmax = MathHelper.floor(centreZ + sizeXZ); + centreX -= 0.5D; + centreY -= 0.5D; + centreZ -= 0.5D; + + for (int x = xmin; x <= xmax; ++x) + { + double dx = ((double) x - centreX) / sizeXZ; + + if (dx * dx < 1.0D) + { + for (int y = ymin; y <= ymax; ++y) + { + double dy = ((double) y - centreY) / sizeY; + double xySquared = dx * dx + dy * dy; + + if (xySquared < 1.0D) + { + for (int z = zmin; z <= zmax; ++z) + { + double dz = ((double) z - centreZ) / sizeXZ; + + if (xySquared + dz * dz < 1.0D) + { + BlockPos blockpos = new BlockPos(x, y, z); + IBlockState state = worldIn.getBlockState(blockpos); + + if (state.getBlock() == this.fillerID && state.getBlock().getMetaFromState(state) == this.fillerMetadata) + { + worldIn.setBlockState(blockpos, oreState, 2); + } + } + } + } + } + } + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenSpaceStation.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenSpaceStation.java new file mode 100644 index 00000000..ea290f36 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/WorldGenSpaceStation.java @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenSpaceStation extends WorldGenerator +{ + + @Override + public boolean generate(World world, Random rand, BlockPos pos) + { + world.setBlockState(pos.add(0, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(0, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(1, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(2, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(3, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + + world.setBlockState(pos.add(3, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(4, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 0, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(5, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 3, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 3, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(6, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 2, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 2, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 3, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 3, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 3, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 3, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 4, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 4, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(7, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 3, 0), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(8, 3, 6), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(8, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(8, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(9, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + + // world.setBlockState(pos.add(10, 2, 3, 3, 0), 3); + + world.setBlockState(pos.add(10, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(10, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(11, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 3, 0), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(12, 3, 6), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(12, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(12, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 1, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 2, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 2, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 2, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 2, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 3, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 3, 1), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(13, 3, 5), Blocks.GLASS_PANE.getDefaultState(), 3); + world.setBlockState(pos.add(13, 3, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 4, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 4, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 4, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 4, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 5, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 0), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 1), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 2), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 3), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 4), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 5), GCBlocks.basicBlock.getStateFromMeta(4), 2); + world.setBlockState(pos.add(13, 6, 6), GCBlocks.basicBlock.getStateFromMeta(4), 2); + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Corridor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Corridor.java new file mode 100644 index 00000000..2720fb28 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Corridor.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.lang.reflect.Constructor; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockUnlitTorch; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class Corridor extends SizedPiece +{ + + public Corridor() + { + } + + public Corridor(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, sizeX, sizeY, sizeZ, direction); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.boundingBox = new StructureBoundingBox(blockPosX, configuration.getYPosition(), blockPosZ, blockPosX + sizeX, configuration.getYPosition() + sizeY, blockPosZ + sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i < this.boundingBox.getXSize(); i++) + { + for (int j = 0; j < this.boundingBox.getYSize(); j++) + { + for (int k = 0; k < this.boundingBox.getZSize(); k++) + { + if ((this.getDirection().getAxis() == EnumFacing.Axis.Z && (i == 0 || i == this.boundingBox.getXSize() - 1)) || j == 0 || j == this.boundingBox.getYSize() - 1 + || (this.getDirection().getAxis() == EnumFacing.Axis.X && (k == 0 || k == this.boundingBox.getZSize() - 1))) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, this.boundingBox); + } else + { + if (j == this.boundingBox.getYSize() - 2) + { + if (this.getDirection().getAxis() == EnumFacing.Axis.Z && (k + 1) % 4 == 0 && (i == 1 || i == this.boundingBox.getXSize() - 2)) + { + this.setBlockState(worldIn, + GCBlocks.unlitTorch.getDefaultState().withProperty(BlockUnlitTorch.FACING, i == 1 ? EnumFacing.WEST.getOpposite() : EnumFacing.EAST.getOpposite()), i, j, k, + this.boundingBox); + continue; + } else if (this.getDirection().getAxis() == EnumFacing.Axis.X && (i + 1) % 4 == 0 && (k == 1 || k == this.boundingBox.getZSize() - 2)) + { + this.setBlockState(worldIn, + GCBlocks.unlitTorch.getDefaultState().withProperty(BlockUnlitTorch.FACING, k == 1 ? EnumFacing.NORTH.getOpposite() : EnumFacing.SOUTH.getOpposite()), i, j, k, + this.boundingBox); + continue; + } + } + + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } + } + } + + return true; + } + + private T getRoom(Class clazz, DungeonStart startPiece, Random rand) + { + try + { + Constructor c0 = clazz.getConstructor(DungeonConfiguration.class, Random.class, Integer.TYPE, Integer.TYPE, EnumFacing.class); + T dummy = (T) c0.newInstance(this.configuration, rand, 0, 0, this.getDirection().getOpposite()); + StructureBoundingBox extension = getExtension(this.getDirection(), getDirection().getAxis() == EnumFacing.Axis.X ? dummy.getSizeX() : dummy.getSizeZ(), + getDirection().getAxis() == EnumFacing.Axis.X ? dummy.getSizeZ() : dummy.getSizeX()); + if (startPiece.checkIntersection(extension)) + { + return null; + } + int sizeX = extension.maxX - extension.minX; + int sizeZ = extension.maxZ - extension.minZ; + int sizeY = dummy.sizeY; + int blockX = extension.minX; + int blockZ = extension.minZ; + Constructor c1 = clazz.getConstructor(DungeonConfiguration.class, Random.class, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, EnumFacing.class); + return (T) c1.newInstance(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + int pieceCount = startPiece.attachedComponents.size(); + if (pieceCount > 10 && startPiece.attachedComponents.get(pieceCount - 2) instanceof RoomBoss) + { + try + { + return getRoom(this.configuration.getTreasureRoom(), startPiece, rand); + } catch (Exception e) + { + e.printStackTrace(); + } + } else + { + int bossRoomChance = Math.max((int) (20.0 / (pieceCount - 10)), 1); + boolean bossRoom = pieceCount > 25 || (pieceCount > 10 && rand.nextInt(bossRoomChance) == 0); + if (bossRoom) + { + try + { + return getRoom(this.configuration.getBossRoom(), startPiece, rand); + } catch (Exception e) + { + e.printStackTrace(); + return null; + } + } else + { + StructureBoundingBox extension = getExtension(this.getDirection(), rand.nextInt(4) + 6, rand.nextInt(4) + 6); + + if (startPiece.checkIntersection(extension)) + { + return null; + } + + int sizeX = extension.maxX - extension.minX; + int sizeZ = extension.maxZ - extension.minZ; + int sizeY = configuration.getRoomHeight(); + int blockX = extension.minX; + int blockZ = extension.minZ; + + if (Math.abs(startPiece.getBoundingBox().maxZ - boundingBox.minZ) > 200) + { + return null; + } + + if (Math.abs(startPiece.getBoundingBox().maxX - boundingBox.minX) > 200) + { + return null; + } + + switch (rand.nextInt(3)) + { + case 0: + return new RoomSpawner(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + case 1: + return new RoomChest(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + default: + case 2: + return new RoomEmpty(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } + } + + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DirectionalPiece.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DirectionalPiece.java new file mode 100644 index 00000000..2620577f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DirectionalPiece.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class DirectionalPiece extends Piece +{ + + private EnumFacing direction; + + public DirectionalPiece() + { + } + + public DirectionalPiece(DungeonConfiguration configuration, EnumFacing direction) + { + super(configuration); + this.direction = direction; + } + + public EnumFacing getDirection() + { + return direction; + } + + public void setDirection(EnumFacing direction) + { + this.direction = direction; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("direction", this.direction.ordinal()); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + if (nbt.hasKey("direction")) + { + this.direction = EnumFacing.byIndex(nbt.getInteger("direction")); + } else + { + this.direction = EnumFacing.NORTH; + } + } + + public Piece getCorridor(Random rand, DungeonStart startPiece, int maxAttempts, boolean small) + { + EnumFacing randomDir; + int blockX; + int blockZ; + int sizeX; + int sizeZ; + boolean valid; + int attempts = maxAttempts; + int randDir = rand.nextInt(3); + do + { + randomDir = EnumFacing.byHorizontalIndex((getDirection().getOpposite().getHorizontalIndex() + 1 + randDir) % 4); + StructureBoundingBox extension = + getExtension(randomDir, this.configuration.getHallwayLengthMin() + rand.nextInt(this.configuration.getHallwayLengthMax() - this.configuration.getHallwayLengthMin()), 3); + blockX = extension.minX; + blockZ = extension.minZ; + sizeX = extension.maxX - extension.minX; + sizeZ = extension.maxZ - extension.minZ; + valid = !startPiece.checkIntersection(extension); + attempts--; + randDir++; + } while (!valid && attempts > 0); + + if (!valid) + { + return null; + } + + return new Corridor(this.configuration, rand, blockX, blockZ, sizeX, small ? 3 : this.configuration.getHallwayHeight(), sizeZ, randomDir); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonConfiguration.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonConfiguration.java new file mode 100644 index 00000000..6cc80ba9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonConfiguration.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; + +public class DungeonConfiguration +{ + + private IBlockState brickBlock; + private int yPosition; + private int hallwayLengthMin; + private int hallwayLengthMax; + private int hallwayHeight; + private int roomHeight; + private Class bossRoom; + private Class treasureRoom; + + public DungeonConfiguration() + { + } + + public DungeonConfiguration(IBlockState brickBlock, int yPosition, int hallwayLengthMin, int hallwayLengthMax, int hallwayHeight, int roomHeight, Class bossRoom, Class treasureRoom) + { + this.brickBlock = brickBlock; + this.yPosition = yPosition; + this.hallwayLengthMin = hallwayLengthMin; + this.hallwayLengthMax = hallwayLengthMax; + this.hallwayHeight = hallwayHeight; + this.roomHeight = roomHeight; + this.bossRoom = bossRoom; + this.treasureRoom = treasureRoom; + } + + public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) + { + tagCompound.setString("brickBlock", Block.REGISTRY.getNameForObject(this.brickBlock.getBlock()).toString()); + tagCompound.setInteger("brickBlockMeta", this.brickBlock.getBlock().getMetaFromState(this.brickBlock)); + tagCompound.setInteger("yPosition", this.yPosition); + tagCompound.setInteger("hallwayLengthMin", this.hallwayLengthMin); + tagCompound.setInteger("hallwayLengthMax", this.hallwayLengthMax); + tagCompound.setInteger("hallwayHeight", this.hallwayHeight); + tagCompound.setInteger("roomHeight", this.roomHeight); + tagCompound.setString("bossRoom", this.bossRoom.getName()); + tagCompound.setString("treasureRoom", this.treasureRoom.getName()); + return tagCompound; + } + + public void readFromNBT(NBTTagCompound tagCompound) + { + try + { + this.brickBlock = Block.getBlockFromName(tagCompound.getString("brickBlock")).getStateFromMeta(tagCompound.getInteger("brickBlockMeta")); + this.yPosition = tagCompound.getInteger("yPosition"); + this.hallwayLengthMin = tagCompound.getInteger("hallwayLengthMin"); + this.hallwayLengthMax = tagCompound.getInteger("hallwayLengthMax"); + this.hallwayHeight = tagCompound.getInteger("hallwayHeight"); + this.roomHeight = tagCompound.getInteger("roomHeight"); + this.bossRoom = Class.forName(tagCompound.getString("bossRoom")); + this.treasureRoom = Class.forName(tagCompound.getString("treasureRoom")); + } catch (Exception e) + { + System.err.println("Failed to read dungeon configuration from NBT"); + e.printStackTrace(); + } + } + + public IBlockState getBrickBlock() + { + return brickBlock; + } + + public int getYPosition() + { + return yPosition; + } + + public int getHallwayLengthMin() + { + return hallwayLengthMin; + } + + public int getHallwayLengthMax() + { + return hallwayLengthMax; + } + + public int getHallwayHeight() + { + return hallwayHeight; + } + + public int getRoomHeight() + { + return roomHeight; + } + + public Class getBossRoom() + { + return bossRoom; + } + + public Class getTreasureRoom() + { + return treasureRoom; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonStart.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonStart.java new file mode 100644 index 00000000..c111a89e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/DungeonStart.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public class DungeonStart extends EntranceCrater +{ + + public List attachedComponents = Lists.newArrayList(); + public List componentBounds = Lists.newArrayList(); + + public DungeonStart() + { + } + + public DungeonStart(World world, DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ) + { + super(world, configuration, rand, blockPosX, blockPosZ); + } + + @Override + public void buildComponent(StructureComponent componentIn, List listIn, Random rand) + { + boolean validAttempt = false; + final int maxAttempts = 10; + int attempts = 0; + while (!validAttempt && attempts < maxAttempts) + { + attachedComponents.clear(); + componentBounds.clear(); + componentBounds.add(this.boundingBox); + listIn.clear(); + listIn.add(this); + Piece next = getNextPiece(this, rand); + while (next != null) + { + listIn.add(next); + attachedComponents.add(next); + componentBounds.add(next.getBoundingBox()); + + next = next.getNextPiece(this, rand); + } + if (attachedComponents.size() >= 3 && attachedComponents.get(attachedComponents.size() - 1) instanceof RoomTreasure + && attachedComponents.get(attachedComponents.size() - 3) instanceof RoomBoss) + { + validAttempt = true; + } + attempts++; + } + + GalacticraftCore.logger.debug("Dungeon generation took " + attempts + " attempt(s)"); + + if (!validAttempt) + { + int xPos = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2; + int zPos = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2; + System.err.println("Could not find valid dungeon layout! This is a bug, please report it, including your world seed (/seed) and dungeon location (" + xPos + ", " + zPos + ")"); + } + + super.buildComponent(componentIn, listIn, rand); + } + + public boolean checkIntersection(int blockX, int blockZ, int sizeX, int sizeZ) + { + return this.checkIntersection(new StructureBoundingBox(blockX, blockZ, blockX + sizeX, blockZ + sizeZ)); + } + + public boolean checkIntersection(StructureBoundingBox bounds) + { + for (int i = 0; i < componentBounds.size() - 1; ++i) + { + StructureBoundingBox boundingBox = componentBounds.get(i); + if (boundingBox.intersectsWith(bounds)) + { + return true; + } + } + + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/EntranceCrater.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/EntranceCrater.java new file mode 100644 index 00000000..b6aea594 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/EntranceCrater.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class EntranceCrater extends SizedPiece +{ + + private final int range = 16; + + public EntranceCrater() + { + } + + public EntranceCrater(World world, DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand.nextInt(4) + 6, 12, rand.nextInt(4) + 6, EnumFacing.Plane.HORIZONTAL.random(rand)); + this.setCoordBaseMode(EnumFacing.SOUTH); + + this.boundingBox = new StructureBoundingBox(blockPosX - range, configuration.getYPosition() + 11, blockPosZ - range, blockPosX + range, 150, blockPosZ + range); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + IBlockState block1; + + int maxLevel = 0; + + for (int i = -range; i <= range; i++) + { + for (int k = -range; k <= range; k++) + { + int j = 150; + int x = this.getXWithOffset(i + range, k + range); + int z = this.getZWithOffset(i + range, k + range); + + while (j >= 0) + { + j--; + + int y = this.getYWithOffset(j); + BlockPos blockpos = new BlockPos(x, y, z); + Block block = worldIn.getBlockState(blockpos).getBlock(); + + if (Blocks.AIR != block) + { + break; + } + } + + maxLevel = Math.max(maxLevel, j + 3); + } + } + + Mirror mirror = Mirror.NONE; + Rotation rotation = Rotation.NONE; + if (this.getCoordBaseMode() != null) + { + switch (this.getCoordBaseMode()) + { + case SOUTH: + mirror = Mirror.LEFT_RIGHT; + break; + case WEST: + mirror = Mirror.LEFT_RIGHT; + rotation = Rotation.CLOCKWISE_90; + break; + case EAST: + rotation = Rotation.CLOCKWISE_90; + break; + default: + break; + } + } + + for (int i = -range; i < range; i++) + { + for (int k = -range; k < range; k++) + { + final double xDev = i / 20D; + final double zDev = k / 20D; + final double distance = xDev * xDev + zDev * zDev; + final int depth = (int) Math.abs(0.5 / (distance + .00001D)); + int helper = 0; + for (int j = maxLevel; j > 1 && helper <= depth; j--) + { + block1 = this.getBlockStateFromPos(worldIn, i + range, j, k + range, boundingBox); +// if (block1 == this.configuration.getBrickBlock() || j != this.sizeY) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i + range, k + range), this.getYWithOffset(j), this.getZWithOffset(i + range, k + range)); + IBlockState state = Blocks.AIR.getDefaultState(); + + if (mirror != Mirror.NONE) + { + state = state.withMirror(mirror); + } + + if (rotation != Rotation.NONE) + { + state = state.withRotation(rotation); + } + + worldIn.setBlockState(blockpos, state, 2); +// this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i + range, j, k + range, boundingBox); + helper++; + } + } + } + } + + return true; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + return new RoomEntrance(this.configuration, rand, this.boundingBox.minX + this.boundingBox.getXSize() / 2, this.boundingBox.minZ + this.boundingBox.getZSize() / 2); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/MapGenDungeon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/MapGenDungeon.java new file mode 100644 index 00000000..c0685b93 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/MapGenDungeon.java @@ -0,0 +1,290 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import com.google.common.collect.Lists; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.GridLayout; +import java.util.List; +import java.util.Random; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.MapGenStructure; +import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.StructureStart; + +public class MapGenDungeon extends MapGenStructure +{ + + private static boolean initialized; + private DungeonConfiguration configuration; + + static + { + try + { + MapGenDungeon.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public MapGenDungeon(DungeonConfiguration configuration) + { + this.configuration = configuration; + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenDungeon.initialized) + { + MapGenStructureIO.registerStructure(MapGenDungeon.Start.class, "MoonDungeon"); + MapGenStructureIO.registerStructureComponent(DungeonStart.class, "MoonDungeonStart"); + MapGenStructureIO.registerStructureComponent(Corridor.class, "MoonDungeonCorridor"); + MapGenStructureIO.registerStructureComponent(RoomEmpty.class, "MoonDungeonEmptyRoom"); + MapGenStructureIO.registerStructureComponent(RoomBoss.class, "MoonDungeonBossRoom"); + MapGenStructureIO.registerStructureComponent(RoomTreasure.class, "MoonDungeonTreasureRoom"); + MapGenStructureIO.registerStructureComponent(RoomSpawner.class, "MoonDungeonSpawnerRoom"); + MapGenStructureIO.registerStructureComponent(RoomChest.class, "MoonDungeonChestRoom"); + MapGenStructureIO.registerStructureComponent(RoomEntrance.class, "MoonDungeonEntranceRoom"); + } + + MapGenDungeon.initialized = true; + } + + @Override + public String getStructureName() + { + return "GC_Dungeon"; + } + + @Override + protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ) + { + long dungeonPos = getDungeonPosForCoords(this.world, chunkX, chunkZ, ((IGalacticraftWorldProvider) this.world.provider).getDungeonSpacing()); + int i = (int) (dungeonPos >> 32); + int j = (int) dungeonPos; // Java automatically gives the 32 least + // significant bits + return i == chunkX && j == chunkZ; + } + + public static long getDungeonPosForCoords(World world, int chunkX, int chunkZ, int spacing) + { + final int numChunks = spacing / 16; + if (chunkX < 0) + { + chunkX -= numChunks - 1; + } + + if (chunkZ < 0) + { + chunkZ -= numChunks - 1; + } + + int k = chunkX / numChunks; + int l = chunkZ / numChunks; + long seed = (long) k * 341873128712L + (long) l * 132897987541L + world.getWorldInfo().getSeed() + (long) (10387340 + world.provider.getDimension()); + Random random = new Random(); + random.setSeed(seed); + k = k * numChunks + random.nextInt(numChunks); + l = l * numChunks + random.nextInt(numChunks); + return (((long) k) << 32) + l; + } + + /** + * This returns an angle between 0 and 360 degrees. 0 degrees means due + * North from the current (x, z) position Only provides meaningful results + * in worlds with dungeon generation using this class! + */ + public static float directionToNearestDungeon(World world, double xpos, double zpos) + { + int spacing = ((IGalacticraftWorldProvider) world.provider).getDungeonSpacing(); + if (spacing == 0) + return 0F; + int x = MathHelper.floor(xpos); + int z = MathHelper.floor(zpos); + int quadrantX = x % spacing; + int quadrantZ = z % spacing; + int searchOffsetX = quadrantX / (spacing / 2); // 0 or 1 + int searchOffsetZ = quadrantZ / (spacing / 2); // 0 or 1 + double nearestX = 0; + double nearestZ = 0; + double nearestDistance = Double.MAX_VALUE; + for (int cx = searchOffsetX - 1; cx < searchOffsetX + 1; cx++) + { + for (int cz = searchOffsetZ - 1; cz < searchOffsetZ + 1; cz++) + { + long dungeonPos = getDungeonPosForCoords(world, (x + cx * spacing) / 16, (z + cz * spacing) / 16, spacing); + int i = 2 + (((int) (dungeonPos >> 32)) << 4); + int j = 2 + (((int) dungeonPos) << 4); // Java automatically + // gives the 32 least + // significant bits + double oX = i - xpos; + double oZ = j - zpos; + double distanceSq = oX * oX + oZ * oZ; + if (distanceSq < nearestDistance) + { + nearestDistance = distanceSq; + nearestX = oX; + nearestZ = oZ; + } + } + } + + return GCCoreUtil.getAngleForRelativePosition(nearestX, nearestZ); + } + + @Override + protected StructureStart getStructureStart(int chunkX, int chunkZ) + { + return new MapGenDungeon.Start(this.world, this.rand, chunkX, chunkZ, this.configuration); + } + + @Override + public BlockPos getNearestStructurePos(World worldIn, BlockPos pos, boolean p_180706_3_) + { + return null; + } + + public static class Start extends StructureStart + { + + private DungeonConfiguration configuration; + DungeonStart startPiece; + + public Start() + { + } + + public Start(World worldIn, Random rand, int chunkX, int chunkZ, DungeonConfiguration configuration) + { + super(chunkX, chunkZ); + this.configuration = configuration; + startPiece = new DungeonStart(worldIn, configuration, rand, (chunkX << 4) + 2, (chunkZ << 4) + 2); + startPiece.buildComponent(startPiece, this.components, rand); + List list = startPiece.attachedComponents; + + while (!list.isEmpty()) + { + int i = rand.nextInt(list.size()); + StructureComponent structurecomponent = list.remove(i); + structurecomponent.buildComponent(startPiece, this.components, rand); + } + + this.updateBoundingBox(); + } + } + + public static void main(String args[]) + { + Random rand = new Random(); + Start start = new Start(null, rand, 0, 0, new DungeonConfiguration(null, 25, 8, 16, 5, 6, RoomBoss.class, RoomTreasure.class)); + + EventQueue.invokeLater(() -> + { + try + { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) + { + ex.printStackTrace(); + } + + JFrame frame = new JFrame("Dungeon Test"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.add(new DungeonGenPanel(start.startPiece.componentBounds)); + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + }); + } + + public static class DungeonGenPanel extends JPanel + { + + DungeonGenPanel(List componentBounds) + { + int absMinX = Integer.MAX_VALUE; + int absMinZ = Integer.MAX_VALUE; + int absMaxX = Integer.MIN_VALUE; + int absMaxZ = Integer.MIN_VALUE; + for (StructureBoundingBox b : componentBounds) + { + if (b.minX < absMinX) + { + absMinX = b.minX; + } + if (b.minZ < absMinZ) + { + absMinZ = b.minZ; + } + if (b.maxX > absMaxX) + { + absMaxX = b.maxX; + } + if (b.maxZ > absMaxZ) + { + absMaxZ = b.maxZ; + } + } + setLayout(new GridLayout(absMaxX - absMinX, absMaxZ - absMinZ, 0, 0)); + + Color[] colors = new Color[] + {Color.GREEN, Color.BLUE, Color.RED, Color.MAGENTA}; + List> cells = Lists.newArrayList(); + for (int row = 0; row < absMaxX - absMinX; row++) + { + List rowCells = Lists.newArrayList(); + for (int col = 0; col < absMaxZ - absMinZ; col++) + { + JPanel cell = new JPanel() + { + + @Override + public Dimension getPreferredSize() + { + return new Dimension(8, 8); + } + }; + cell.setBackground(Color.GRAY); + add(cell); + rowCells.add(cell); + } + cells.add(rowCells); + } + + int color = 0; + // X is rows, Z is cols + for (StructureBoundingBox bb : componentBounds) + { + color = ++color % colors.length; + + for (int i = bb.minX; i < bb.maxX; ++i) + { + for (int j = bb.minZ; j < bb.maxZ; ++j) + { + cells.get(i - absMinX).get(j - absMinZ).setBackground(colors[color]); + } + } + } + } + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Piece.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Piece.java new file mode 100644 index 00000000..3b8bedfd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/Piece.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class Piece extends StructureComponent +{ + protected DungeonConfiguration configuration; + + public Piece() + { + } + + public Piece(DungeonConfiguration configuration) + { + this.configuration = configuration; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + this.configuration.writeToNBT(tagCompound); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + if (this.configuration == null) + { + this.configuration = new DungeonConfiguration(); + this.configuration.readFromNBT(tagCompound); + } + } + + protected StructureBoundingBox getExtension(EnumFacing direction, int length, int width) + { + int blockX, blockZ, sizeX, sizeZ; + switch (direction) + { + case NORTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.minZ - sizeZ; + break; + case EAST: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.maxX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + case SOUTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.maxZ; + break; + case WEST: + default: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.minX - sizeX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + } + return new StructureBoundingBox(blockX, this.configuration.getYPosition(), blockZ, blockX + sizeX, this.configuration.getYPosition() + this.configuration.getHallwayHeight(),blockZ + sizeZ); + } + + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + return null; + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomBoss.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomBoss.java new file mode 100644 index 00000000..1244c651 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomBoss.java @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class RoomBoss extends SizedPiece +{ + private BlockPos chestPos; + + public RoomBoss() + { + } + + public RoomBoss(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + this(configuration, rand, blockPosX, blockPosZ, rand.nextInt(6) + 14, rand.nextInt(2) + 8, rand.nextInt(6) + 14, entranceDir); + } + + public RoomBoss(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.sizeX = sizeX; + this.sizeZ = sizeZ; + this.sizeY = sizeY; + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } + else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } + else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } + else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + else if ((i == 1 && k == 1) || (i == 1 && k == this.sizeZ - 1) || (i == this.sizeX - 1 && k == 1) || (i == this.sizeX - 1 && k == this.sizeZ - 1)) + { + this.setBlockState(worldIn, Blocks.FLOWING_LAVA.getDefaultState(), i, j, k, chunkBox); + } + else if (j % 3 == 0 && j >= 2 && ((i == 1 || i == this.sizeX - 1 || k == 1 || k == this.sizeZ - 1) || (i == 2 && k == 2) || (i == 2 && k == this.sizeZ - 2) || (i == this.sizeX - 2 && k == 2) || (i == this.sizeX - 2 && k == this.sizeZ - 2))) + { + // Horizontal bars + this.setBlockState(worldIn, Blocks.IRON_BARS.getDefaultState(), i, j, k, chunkBox); + } + else if ((i == 1 && k == 2) || (i == 2 && k == 1) || + (i == 1 && k == this.sizeZ - 2) || (i == 2 && k == this.sizeZ - 1) || + (i == this.sizeX - 1 && k == 2) || (i == this.sizeX - 2 && k == 1) || + (i == this.sizeX - 1 && k == this.sizeZ - 2) || (i == this.sizeX - 2 && k == this.sizeZ - 1)) + { + // Vertical bars + this.setBlockState(worldIn, Blocks.IRON_BARS.getDefaultState(), i, j, k, chunkBox); + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + + int spawnerX = this.sizeX / 2; + int spawnerY = 1; + int spawnerZ = this.sizeZ / 2; + BlockPos blockpos = new BlockPos(this.getXWithOffset(spawnerX, spawnerZ), this.getYWithOffset(spawnerY), this.getZWithOffset(spawnerX, spawnerZ)); + //Is this position inside the chunk currently being generated? + if (chunkBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, GCBlocks.bossSpawner.getDefaultState(), 2); + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) worldIn.getTileEntity(blockpos); + if (spawner != null) + { + spawner.setRoom(new Vector3(this.boundingBox.minX + 1, this.boundingBox.minY + 1, this.boundingBox.minZ + 1), new Vector3(this.sizeX - 1, this.sizeY - 1, this.sizeZ - 1)); + spawner.setChestPos(this.chestPos); + } + } + + return true; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + if(this.chestPos != null) + { + tagCompound.setInteger("chestX", this.chestPos.getX()); + tagCompound.setInteger("chestY", this.chestPos.getY()); + tagCompound.setInteger("chestZ", this.chestPos.getZ()); + } + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + this.chestPos = new BlockPos(nbt.getInteger("chestX"), nbt.getInteger("chestY"), nbt.getInteger("chestZ")); + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + return getCorridor(rand, startPiece, 10, true); + } + + public BlockPos getChestPos() + { + return chestPos; + } + + public void setChestPos(BlockPos chestPos) + { + this.chestPos = chestPos; + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomChest.java new file mode 100644 index 00000000..92cc7288 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomChest.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomChest extends RoomEmpty +{ + public RoomChest() + { + } + + public RoomChest(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random rand, StructureBoundingBox boundingBox) + { + if (super.addComponentParts(worldIn, rand, boundingBox)) + { + int chestX = this.sizeX / 2; + int chestY = 1; + int chestZ = this.sizeZ / 2; + this.setBlockState(worldIn, Blocks.CHEST.getDefaultState().withProperty(BlockTier1TreasureChest.FACING, this.getDirection().getOpposite()), chestX, chestY, chestZ, boundingBox); + + BlockPos blockpos = new BlockPos(this.getXWithOffset(chestX, chestZ), this.getYWithOffset(chestY), this.getZWithOffset(chestX, chestZ)); + TileEntityChest chest = (TileEntityChest) worldIn.getTileEntity(blockpos); + + if (chest != null) + { + ResourceLocation chesttype = RoomTreasure.MOONCHEST; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + chest.setLootTable(chesttype, rand.nextLong()); + } + + return true; + } + + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEmpty.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEmpty.java new file mode 100644 index 00000000..605cb973 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEmpty.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomEmpty extends SizedPiece +{ + public RoomEmpty() + { + } + + public RoomEmpty(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < this.configuration.getHallwayHeight() && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } + else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } + else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < this.configuration.getHallwayHeight() && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } + else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, boundingBox); + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + if (Math.abs(startPiece.getBoundingBox().maxZ - boundingBox.minZ) > 200) + { + return null; + } + + if (Math.abs(startPiece.getBoundingBox().maxX - boundingBox.minX) > 200) + { + return null; + } + + return getCorridor(rand, startPiece, 10, false); + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEntrance.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEntrance.java new file mode 100644 index 00000000..0201fa2d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomEntrance.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomEntrance extends SizedPiece +{ + public RoomEntrance() + { + } + + public RoomEntrance(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand.nextInt(4) + 6, 12, rand.nextInt(4) + 6, EnumFacing.Plane.HORIZONTAL.random(rand)); + this.setCoordBaseMode(EnumFacing.SOUTH); + int sX = this.sizeX / 2; + int sZ = this.sizeZ / 2; + + this.boundingBox = new StructureBoundingBox(blockPosX - sX, configuration.getYPosition(), blockPosZ - sZ, blockPosX - sX + this.sizeX, configuration.getYPosition() + this.sizeY, blockPosZ - sZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 /*|| j == this.sizeY*/ || k == 0 || k == this.sizeZ) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, boundingBox); + } + else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + return getCorridor(rand, startPiece, 10, false); + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomSpawner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomSpawner.java new file mode 100644 index 00000000..0565b507 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomSpawner.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomSpawner extends RoomEmpty +{ + public RoomSpawner() + { + } + + public RoomSpawner(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + if (super.addComponentParts(worldIn, random, boundingBox)) + { + for (int i = 1; i <= this.sizeX - 1; ++i) + { + for (int j = 1; j <= this.sizeY - 1; ++j) + { + for (int k = 1; k <= this.sizeZ - 1; ++k) + { + if (random.nextFloat() < 0.05F) + { + this.setBlockState(worldIn, Blocks.WEB.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + this.setBlockState(worldIn, Blocks.MOB_SPAWNER.getDefaultState(), 1, 0, 1, boundingBox); + this.setBlockState(worldIn, Blocks.MOB_SPAWNER.getDefaultState(), this.sizeX - 1, 0, this.sizeZ - 1, boundingBox); + + BlockPos blockpos = new BlockPos(this.getXWithOffset(1, 1), this.getYWithOffset(0), this.getZWithOffset(1, 1)); + TileEntityMobSpawner spawner = (TileEntityMobSpawner) worldIn.getTileEntity(blockpos); + + if (spawner != null) + { + spawner.getSpawnerBaseLogic().setEntityId(getMob(random)); + } + + blockpos = new BlockPos(this.getXWithOffset(this.sizeX - 1, this.sizeZ - 1), this.getYWithOffset(0), this.getZWithOffset(this.sizeX - 1, this.sizeZ - 1)); + spawner = (TileEntityMobSpawner) worldIn.getTileEntity(blockpos); + + if (spawner != null) + { + spawner.getSpawnerBaseLogic().setEntityId(getMob(random)); + } + + return true; + } + + return false; + } + + private static ResourceLocation getMob(Random rand) + { + switch (rand.nextInt(4)) + { + case 0: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_spider"); + case 1: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_creeper"); + case 2: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_skeleton"); + case 3: + default: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_zombie"); + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomTreasure.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomTreasure.java new file mode 100644 index 00000000..db732052 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/RoomTreasure.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.storage.loot.LootTableList; + +public class RoomTreasure extends SizedPiece +{ + + public static ResourceLocation MOONCHEST = new ResourceLocation(Constants.ASSET_PREFIX, "dungeon_tier_1"); + public static final ResourceLocation TABLE_TIER_1_DUNGEON = LootTableList.register(MOONCHEST); + + public RoomTreasure() + { + } + + public RoomTreasure(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + this(configuration, rand, blockPosX, blockPosZ, rand.nextInt(4) + 6, configuration.getRoomHeight(), rand.nextInt(4) + 6, entranceDir); + } + + public RoomTreasure(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } else if ((i == 1 && k == 1) || (i == 1 && k == this.sizeZ - 1) || (i == this.sizeX - 1 && k == 1) || (i == this.sizeX - 1 && k == this.sizeZ - 1)) + { + this.setBlockState(worldIn, Blocks.GLOWSTONE.getDefaultState(), i, j, k, chunkBox); + } else if (i == this.sizeX / 2 && j == 1 && k == this.sizeZ / 2) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i, k), this.getYWithOffset(j), this.getZWithOffset(i, k)); + if (chunkBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, GCBlocks.treasureChestTier1.getDefaultState().withProperty(BlockTier1TreasureChest.FACING, this.getDirection().getOpposite()), 2); + TileEntityTreasureChest treasureChest = (TileEntityTreasureChest) worldIn.getTileEntity(blockpos); + if (treasureChest != null) + { + ResourceLocation chesttype = TABLE_TIER_1_DUNGEON; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + treasureChest.setLootTable(chesttype, random.nextLong()); + } + } + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + + return true; + } + + @Override + public Piece getNextPiece(DungeonStart startPiece, Random rand) + { + if (startPiece.attachedComponents.size() > 2) + { + StructureComponent component = startPiece.attachedComponents.get(startPiece.attachedComponents.size() - 3); + if (component instanceof RoomBoss) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(this.sizeX / 2, this.sizeZ / 2), this.getYWithOffset(1), this.getZWithOffset(this.sizeX / 2, this.sizeZ / 2)); + ((RoomBoss) component).setChestPos(new BlockPos(blockpos)); + } + } + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/SizedPiece.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/SizedPiece.java new file mode 100644 index 00000000..4147f782 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/world/gen/dungeon/SizedPiece.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.world.gen.dungeon; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class SizedPiece extends DirectionalPiece +{ + + protected int sizeX; + protected int sizeY; + protected int sizeZ; + + public SizedPiece() + { + } + + public SizedPiece(DungeonConfiguration configuration, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, direction); + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("sizeX", this.sizeX); + tagCompound.setInteger("sizeY", this.sizeY); + tagCompound.setInteger("sizeZ", this.sizeZ); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound nbt, TemplateManager manager) + { + super.readStructureFromNBT(nbt, manager); + + this.sizeX = nbt.getInteger("sizeX"); + this.sizeY = nbt.getInteger("sizeY"); + this.sizeZ = nbt.getInteger("sizeZ"); + } + + public int getSizeX() + { + return sizeX; + } + + public int getSizeY() + { + return sizeY; + } + + public int getSizeZ() + { + return sizeZ; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/BlockMetaList.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/BlockMetaList.java new file mode 100644 index 00000000..049f90d8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/BlockMetaList.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import java.util.Arrays; +import java.util.List; +import net.minecraft.block.Block; + +public class BlockMetaList +{ + + private Block block; + private List metaList; + + public BlockMetaList(Block blockID, Integer... metadata) + { + this(blockID, Arrays.asList(metadata)); + } + + public BlockMetaList(Block blockID, List metadata) + { + this.block = blockID; + this.metaList = metadata; + } + + public Block getBlock() + { + return this.block; + } + + public List getMetaList() + { + return this.metaList; + } + + public void addMetadata(int meta) + { + this.metaList.add(meta); + } + + public void removeMetadata(int meta) + { + this.metaList.remove(meta); + } + + @Override + public int hashCode() + { + return this.block.hashCode(); + } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof BlockMetaList) + { + return (BlockMetaList) obj == this; + } + + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FlagData.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FlagData.java new file mode 100644 index 00000000..009e2459 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FlagData.java @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import java.awt.image.BufferedImage; +import java.util.Arrays; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import net.minecraft.nbt.NBTTagCompound; + +public class FlagData +{ + + public static FlagData DEFAULT = new FlagData(48, 32); + private int height; + private int width; + private byte[][][] color; + + public FlagData(int width, int height) + { + this.height = height; + this.width = width; + this.color = new byte[width][height][3]; + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + this.color[i][j][0] = 127; + this.color[i][j][1] = 127; + this.color[i][j][2] = 127; + } + } + } + + public int getHeight() + { + return this.height; + } + + public void setHeight(int height) + { + this.height = height; + } + + public int getWidth() + { + return this.width; + } + + public void setWidth(int width) + { + this.width = width; + } + + /** + * Returns the color, normalized, at the flag coordinates.

0, 0 is the + * top left. + * + * @param posX x-position of the flag + * @param posY y-position of the flag + * @return The color vector, capped from 0-1 + */ + public Vector3 getColorAt(int posX, int posY) + { + if (posX >= this.width || posY >= this.height) + { + return new Vector3(0, 0, 0); + } + + return new Vector3((this.color[posX][posY][0] + 128) / 256.0D, (this.color[posX][posY][1] + 128) / 256.0D, (this.color[posX][posY][2] + 128) / 256.0D); + } + + /** + * Set the color at the designated flag coordinates + * + * @param posX The x-position of the flag + * @param posY The y-position of the flag + * @param colorVec The color vector, values from 0-256 + */ + public void setColorAt(int posX, int posY, Vector3 colorVec) + { + this.color[posX][posY][0] = (byte) (colorVec.intX() - 128); + this.color[posX][posY][1] = (byte) (colorVec.intY() - 128); + this.color[posX][posY][2] = (byte) (colorVec.intZ() - 128); + } + + public static FlagData readFlagData(NBTTagCompound nbt) + { + if (nbt.hasKey("FlagWidth")) + { + // Legacy saves + int width = nbt.getInteger("FlagWidth"); + int height = nbt.getInteger("FlagHeight"); + + FlagData flagData = new FlagData(width, height); + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + flagData.color[i][j][0] = nbt.getByte("ColorR-X" + i + "-Y" + j); + flagData.color[i][j][1] = nbt.getByte("ColorG-X" + i + "-Y" + j); + flagData.color[i][j][2] = nbt.getByte("ColorB-X" + i + "-Y" + j); + } + } + + return flagData; + } + + // New more compact flag save style + int width = nbt.getInteger("FWidth"); + int height = nbt.getInteger("FHeight"); + + FlagData flagData = new FlagData(width, height); + for (int i = 0; i < height; i++) + { + int[] colorRow = nbt.getIntArray("FRow" + i); + for (int j = 0; j < width; j++) + { + int color = colorRow[j]; + flagData.color[j][i][0] = (byte) (color >> 16); + flagData.color[j][i][1] = (byte) ((color >> 8) & 255); + flagData.color[j][i][2] = (byte) (color & 255); + } + } + return flagData; + } + + public void saveFlagData(NBTTagCompound nbt) + { + nbt.setInteger("FWidth", this.width); + nbt.setInteger("FHeight", this.height); + + for (int i = 0; i < this.height; i++) + { + int[] colorRow = new int[this.width]; + for (int j = 0; j < this.width; j++) + { + byte[] arrayColor = this.color[j][i]; + colorRow[j] = ColorUtil.to32BitColorB(arrayColor[0], arrayColor[1], arrayColor[2]); + } + nbt.setIntArray("FRow" + i, colorRow); + } + } + + public BufferedImage toBufferedImage() + { + BufferedImage image = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_RGB); + for (int i = 0; i < this.width; i++) + { + for (int j = 0; j < this.height; j++) + { + int col = ((this.color[i][j][0] + 128) << 16) | ((this.color[i][j][1] + 128) << 8) | (this.color[i][j][2] + 128); + image.setRGB(i, j, col); + } + } + return image; + } + + @Override + public boolean equals(Object o) + { + if (this == o) + { + return true; + } + if (o == null || getClass() != o.getClass()) + { + return false; + } + + FlagData flagData = (FlagData) o; + + if (height != flagData.height) + { + return false; + } + if (width != flagData.width) + { + return false; + } + return Arrays.deepEquals(color, flagData.color); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FluidHandlerWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FluidHandlerWrapper.java new file mode 100644 index 00000000..140adb63 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/FluidHandlerWrapper.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.FluidTankProperties; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; + +public class FluidHandlerWrapper implements IFluidHandler +{ + + public IFluidHandlerWrapper wrapper; + + public EnumFacing side; + + public FluidHandlerWrapper(IFluidHandlerWrapper w, EnumFacing s) + { + wrapper = w; + side = s; + } + + @Override + public IFluidTankProperties[] getTankProperties() + { + FluidTankInfo[] infos = wrapper.getTankInfo(side); + if (infos != null) + { + FluidTankProperties[] properties = new FluidTankProperties[infos.length]; + for (int i = 0; i < infos.length; i++) + { + FluidTankInfo info = infos[i]; + properties[i] = new FluidTankProperties(info.fluid, info.capacity, this.wrapper.canFill(side, null), this.wrapper.canDrain(side, null)); + } + return properties; + } + return new IFluidTankProperties[] + {}; + } + + @Override + public int fill(FluidStack resource, boolean doFill) + { + if (wrapper.canFill(side, resource != null ? resource.getFluid() : null)) + { + return wrapper.fill(side, resource, doFill); + } + + return 0; + } + + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) + { + if (wrapper.canDrain(side, resource != null ? resource.getFluid() : null)) + { + return wrapper.drain(side, resource, doDrain); + } + + return null; + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) + { + if (wrapper.canDrain(side, null)) + { + return wrapper.drain(side, maxDrain, doDrain); + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/Footprint.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/Footprint.java new file mode 100644 index 00000000..c12e4e29 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/Footprint.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +public class Footprint +{ + + public static final short MAX_AGE = 3200; + public final int dimension; + public final float rotation; + public final Vector3 position; + public short age; + public final String owner; + public int lightmapVal; + + public Footprint(int dimension, Vector3 position, float rotation, String ownerUUID, int lightmapVal) + { + this(dimension, position, rotation, (short) 0, ownerUUID, lightmapVal); + } + + public Footprint(int dimension, Vector3 position, float rotation, short age, String ownerUUID, int lightmapVal) + { + this.dimension = dimension; + this.position = position; + this.rotation = rotation; + this.age = age; + this.owner = ownerUUID; + this.lightmapVal = lightmapVal; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/IFluidHandlerWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/IFluidHandlerWrapper.java new file mode 100644 index 00000000..0c43816e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/IFluidHandlerWrapper.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +public interface IFluidHandlerWrapper +{ + + int fill(EnumFacing from, FluidStack resource, boolean doFill); + + FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain); + + FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain); + + boolean canFill(EnumFacing from, Fluid fluid); + + boolean canDrain(EnumFacing from, Fluid fluid); + + FluidTankInfo[] getTankInfo(EnumFacing from); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ModelTransformWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ModelTransformWrapper.java new file mode 100644 index 00000000..c48a2dea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ModelTransformWrapper.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import java.util.List; +import javax.annotation.Nullable; +import javax.vecmath.Matrix4f; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.model.TRSRTransformation; +import org.apache.commons.lang3.tuple.Pair; + +abstract public class ModelTransformWrapper implements IBakedModel +{ + + private final IBakedModel parent; + + public ModelTransformWrapper(IBakedModel parent) + { + this.parent = parent; + } + + public boolean isAmbientOcclusion() + { + return parent.isAmbientOcclusion(); + } + + public boolean isGui3d() + { + return parent.isGui3d(); + } + + public boolean isBuiltInRenderer() + { + return parent.isBuiltInRenderer(); + } + + public TextureAtlasSprite getParticleTexture() + { + return parent.getParticleTexture(); + } + + @SuppressWarnings("deprecation") + public ItemCameraTransforms getItemCameraTransforms() + { + return parent.getItemCameraTransforms(); + } + + public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) + { + return parent.getQuads(state, side, rand); + } + + public ItemOverrideList getOverrides() + { + return parent.getOverrides(); + } + + @Override + public Pair handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) + { + Matrix4f matrix4f = getTransformForPerspective(cameraTransformType); + + if (matrix4f == null) + { + return Pair.of(this, TRSRTransformation.blockCornerToCenter(TRSRTransformation.identity()).getMatrix()); + } + + return Pair.of(this, matrix4f); + } + + abstract protected Matrix4f getTransformForPerspective(TransformType cameraTransformType); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PartialCanister.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PartialCanister.java new file mode 100644 index 00000000..a728f73b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PartialCanister.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import net.minecraft.item.Item; + +/** + * Used to register canisters with partially filled textures + */ +public class PartialCanister +{ + + private Item item; + private String modID; + private String baseName; + private int textureCount; + + public PartialCanister(Item item, String modID, String baseName, int textureCount) + { + this.item = item; + this.modID = modID; + this.baseName = baseName; + this.textureCount = textureCount; + } + + public Item getItem() + { + return item; + } + + public String getModID() + { + return modID; + } + + public String getBaseName() + { + return baseName; + } + + public int getTextureCount() + { + return textureCount; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PlayerGearData.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PlayerGearData.java new file mode 100644 index 00000000..5ca2f097 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/PlayerGearData.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; + +public class PlayerGearData +{ + + private final EntityPlayer player; + private int mask; + private int gear; + private int leftTank; + private int rightTank; + private int[] thermalPadding; + private ResourceLocation parachute; + private int frequencyModule; + private int shieldController; + + public PlayerGearData(EntityPlayer player) + { + this(player, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, new int[] + {GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT, GCPlayerHandler.GEAR_NOT_PRESENT}); + } + + public PlayerGearData(EntityPlayer player, int mask, int gear, int leftTank, int rightTank, int frequencyModule, int[] thermalPadding) + { + this.player = player; + this.mask = mask; + this.gear = gear; + this.leftTank = leftTank; + this.rightTank = rightTank; + this.frequencyModule = frequencyModule; + this.thermalPadding = thermalPadding; + } + + public int getMask() + { + return this.mask; + } + + public void setMask(int mask) + { + this.mask = mask; + } + + public int getGear() + { + return this.gear; + } + + public void setGear(int gear) + { + this.gear = gear; + } + + public int getLeftTank() + { + return this.leftTank; + } + + public void setLeftTank(int leftTank) + { + this.leftTank = leftTank; + } + + public int getRightTank() + { + return this.rightTank; + } + + public void setRightTank(int rightTank) + { + this.rightTank = rightTank; + } + + public EntityPlayer getPlayer() + { + return this.player; + } + + public ResourceLocation getParachute() + { + return this.parachute; + } + + public void setParachute(ResourceLocation parachute) + { + this.parachute = parachute; + } + + public int getFrequencyModule() + { + return this.frequencyModule; + } + + public void setFrequencyModule(int frequencyModule) + { + this.frequencyModule = frequencyModule; + } + + public int getThermalPadding(int slot) + { + if (slot >= 0 && slot < this.thermalPadding.length) + { + return this.thermalPadding[slot]; + } + + return -1; + } + + public void setThermalPadding(int slot, int thermalPadding) + { + if (slot >= 0 && slot < this.thermalPadding.length) + { + this.thermalPadding[slot] = thermalPadding; + } + } + + public int getShieldController() + { + return shieldController; + } + + public void setShieldController(int shieldController) + { + this.shieldController = shieldController; + } + + @Override + public int hashCode() + { + return PlayerUtil.getName(this.player).hashCode(); + } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof PlayerGearData) + { + return PlayerUtil.getName(((PlayerGearData) obj).player).equals(PlayerUtil.getName(this.player)); + } + + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledBlockChange.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledBlockChange.java new file mode 100644 index 00000000..b9a2308b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledBlockChange.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; + +public class ScheduledBlockChange +{ + + private BlockPos changePosition; + private IBlockState change; + private int changeUpdateFlag; + + public ScheduledBlockChange(BlockVec3 changePosition, IBlockState change) + { + this(changePosition.toBlockPos(), change, 3); + } + + public ScheduledBlockChange(BlockPos pos, IBlockState change, int changeUpdateFlag) + { + this.changePosition = pos; + this.change = change; + this.changeUpdateFlag = changeUpdateFlag; + } + + public BlockPos getChangePosition() + { + return this.changePosition; + } + + public void setChangePosition(BlockPos changePosition) + { + this.changePosition = changePosition; + } + + public IBlockState getChangeState() + { + return this.change; + } + + public void setChangeState(IBlockState change) + { + this.change = change; + } + + public int getChangeUpdateFlag() + { + return changeUpdateFlag; + } + + public void setChangeUpdateFlag(int changeUpdateFlag) + { + this.changeUpdateFlag = changeUpdateFlag; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledDimensionChange.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledDimensionChange.java new file mode 100644 index 00000000..bf3bdaad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/core/wrappers/ScheduledDimensionChange.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.core.wrappers; + +import net.minecraft.entity.player.EntityPlayerMP; + +public class ScheduledDimensionChange +{ + + private EntityPlayerMP player; + private int dimensionName; + + public ScheduledDimensionChange(EntityPlayerMP player, int dimensionName) + { + this.player = player; + this.dimensionName = dimensionName; + } + + public EntityPlayerMP getPlayer() + { + return player; + } + + public int getDimensionId() + { + return dimensionName; + } + + public void setPlayer(EntityPlayerMP player) + { + this.player = player; + } + + public void setDimensionName(int dimensionName) + { + this.dimensionName = dimensionName; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/ConfigGuiFactoryPlanets.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/ConfigGuiFactoryPlanets.java new file mode 100644 index 00000000..7bae6fb6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/ConfigGuiFactoryPlanets.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.util.Set; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.fml.client.IModGuiFactory; +import net.minecraftforge.fml.client.config.GuiConfig; + +public class ConfigGuiFactoryPlanets implements IModGuiFactory +{ + + public static class PlanetsConfigGUI extends GuiConfig + { + + public PlanetsConfigGUI(GuiScreen parent) + { + super(parent, GalacticraftPlanets.getConfigElements(), Constants.MOD_ID_PLANETS, false, false, GCCoreUtil.translate("gc.configgui.planets.title")); + } + } + + @Override + public void initialize(Minecraft minecraftInstance) + { + + } + + @Override + public Set runtimeGuiCategories() + { + return null; + } + + public GuiScreen createConfigGui(GuiScreen arg0) + { + // TODO Forge 2282 addition! + return new PlanetsConfigGUI(arg0); + } + + public boolean hasConfigGui() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GCPlanetDimensions.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GCPlanetDimensions.java new file mode 100644 index 00000000..254eead2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GCPlanetDimensions.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import net.minecraft.world.DimensionType; + +public class GCPlanetDimensions +{ + + public static DimensionType ASTEROIDS; + public static DimensionType MARS; + public static DimensionType VENUS; +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GalacticraftPlanets.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GalacticraftPlanets.java new file mode 100644 index 00000000..bdb301c5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GalacticraftPlanets.java @@ -0,0 +1,223 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.common.config.Property; +import net.minecraftforge.fml.client.config.IConfigElement; +import net.minecraftforge.fml.client.event.ConfigChangedEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.Mod.Instance; +import net.minecraftforge.fml.common.ModMetadata; +import net.minecraftforge.fml.common.SidedProxy; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDeconstructor; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GalacticLog; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.datafix.GCPlanetsDataFixers; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import micdoodle8.mods.galacticraft.planets.venus.ConfigManagerVenus; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; + +@Mod(modid = Constants.MOD_ID_PLANETS, + name = GalacticraftPlanets.NAME, + version = Constants.VERSION, + dependencies = "required-after:galacticraftcore;", + useMetadata = false, + acceptedMinecraftVersions = "[1.12, 1.13)", + guiFactory = "micdoodle8.mods.galacticraft.planets.ConfigGuiFactoryPlanets") +public class GalacticraftPlanets +{ + + public static final String NAME = "Galacticraft Planets"; + private File GCPlanetsSource; + + @Instance(Constants.MOD_ID_PLANETS) + public static GalacticraftPlanets instance; + + public static List commonModules = new ArrayList<>(); + public static List clientModules = new ArrayList<>(); + + public static final String ASSET_PREFIX = "galacticraftplanets"; + public static final String TEXTURE_PREFIX = ASSET_PREFIX + ":"; + + @SidedProxy(clientSide = "micdoodle8.mods.galacticraft.planets.PlanetsProxyClient", serverSide = "micdoodle8.mods.galacticraft.planets.PlanetsProxy") + public static PlanetsProxy proxy; + + public static Map> propOrder = new TreeMap<>(); + + public static GalacticLog logger; + + public GalacticraftPlanets() + { + logger = new GalacticLog(this); + } + + @EventHandler + public void preInit(FMLPreInitializationEvent event) + { + GCPlanetsSource = event.getSourceFile(); + this.initModInfo(event.getModMetadata()); + MinecraftForge.EVENT_BUS.register(this); + + // Initialise configs, converting mars.conf + asteroids.conf to + // planets.conf if necessary + File oldMarsConf = new File(event.getModConfigurationDirectory(), "Galacticraft/mars.conf"); + File newPlanetsConf = new File(event.getModConfigurationDirectory(), "Galacticraft/planets.conf"); + boolean update = false; + if (oldMarsConf.exists()) + { + oldMarsConf.renameTo(newPlanetsConf); + update = true; + } + + File planetsConfig = new File(event.getModConfigurationDirectory(), Constants.PLANETS_CONFIG_FILE); + + if (newPlanetsConf.exists()) + { + newPlanetsConf.renameTo(planetsConfig); + } + + this.configSyncStart(); + new ConfigManagerMars(planetsConfig, update); + new ConfigManagerAsteroids(new File(event.getModConfigurationDirectory(), "Galacticraft/asteroids.conf")); + new ConfigManagerVenus(new File(event.getModConfigurationDirectory(), "Galacticraft/venus.conf")); + this.configSyncEnd(true); + + GalacticraftPlanets.commonModules.add(new MarsModule()); + GalacticraftPlanets.commonModules.add(new AsteroidsModule()); + GalacticraftPlanets.commonModules.add(new VenusModule()); + GalacticraftPlanets.proxy.preInit(event); + } + + @EventHandler + public void init(FMLInitializationEvent event) + { + GalacticraftPlanets.proxy.init(event); + NetworkRegistry.INSTANCE.registerGuiHandler(GalacticraftPlanets.instance, GalacticraftPlanets.proxy); + + new GCPlanetsDataFixers().registerAll(); + } + + @EventHandler + public void postInit(FMLPostInitializationEvent event) + { + GalacticraftPlanets.proxy.postInit(event); + TileEntityDeconstructor.initialiseRecipeListPlanets(); + } + + @EventHandler + public void serverStarting(FMLServerStartingEvent event) + { + GalacticraftPlanets.proxy.serverStarting(event); + } + + @EventHandler + public void serverInit(FMLServerStartedEvent event) + { + GalacticraftPlanets.proxy.serverInit(event); + } + + public static void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData) + { + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.spawnParticle(particleID, position, motion, extraData); + } + } + + public static List getConfigElements() + { + List list = new ArrayList<>(); + + // Get the last planet to be configured only, as all will reference and + // re-use the same planets.conf config file + IPlanetsModule module = GalacticraftPlanets.commonModules.get(GalacticraftPlanets.commonModules.size() - 1); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_ENTITIES)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_ACHIEVEMENTS)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_GENERAL)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_WORLDGEN)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_DIMENSIONS)).getChildElements()); + list.addAll(new ConfigElement(module.getConfiguration().getCategory(Constants.CONFIG_CATEGORY_SCHEMATIC)).getChildElements()); + + return list; + } + + @SubscribeEvent + public void onConfigChanged(ConfigChangedEvent event) + { + if (event.getModID().equals(Constants.MOD_ID_PLANETS)) + { + this.configSyncStart(); + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.syncConfig(); + } + this.configSyncEnd(false); + } + } + + private void configSyncEnd(boolean load) + { + // Cleanup older GC config files + ConfigManagerCore.cleanConfig(ConfigManagerMars.config, propOrder); + + // Always save - this is last to be called both at load time and at + // mid-game + if (ConfigManagerMars.config.hasChanged()) + { + ConfigManagerMars.config.save(); + } + } + + private void configSyncStart() + { + propOrder.clear(); + } + + public static void finishProp(Property prop, String currentCat) + { + if (propOrder.get(currentCat) == null) + { + propOrder.put(currentCat, new ArrayList<>()); + } + propOrder.get(currentCat).add(prop.getName()); + } + + private void initModInfo(ModMetadata info) + { + info.autogenerated = false; + info.modId = Constants.MOD_ID_PLANETS; + info.name = GalacticraftPlanets.NAME; + info.version = Constants.VERSION; + info.description = "Planets addon for Galacticraft."; + info.authorList = Arrays.asList("micdoodle8", "radfast", "EzerArch", "fishtaco", "SpaceViking", "SteveKunG"); + info.logoFile = "assets/galacticraftplanets/planets-logo.png"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GuiIdsPlanets.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GuiIdsPlanets.java new file mode 100644 index 00000000..a46ab6cf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/GuiIdsPlanets.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +public class GuiIdsPlanets +{ + + // MARS + public static final int NASA_WORKBENCH_CARGO_ROCKET = 0; + public static final int NASA_WORKBENCH_TIER_2_ROCKET = 1; + public static final int MACHINE_MARS = 2; + + // ASTEROIDS + public static final int MACHINE_ASTEROIDS = 3; + public static final int NASA_WORKBENCH_TIER_3_ROCKET = 4; + public static final int NASA_WORKBENCH_ASTRO_MINER = 5; + + // VENUS + public static final int MACHINE_VENUS = 6; +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModule.java new file mode 100644 index 00000000..9c269a70 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModule.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; + +public interface IPlanetsModule +{ + + public void preInit(FMLPreInitializationEvent event); + + public void init(FMLInitializationEvent event); + + public void postInit(FMLPostInitializationEvent event); + + public void serverInit(FMLServerStartedEvent event); + + public void serverStarting(FMLServerStartingEvent event); + + public void getGuiIDs(List idList); + + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z); + + public Configuration getConfiguration(); + + public void syncConfig(); + + public default void register(Class tileEntityClass, String key) + { + GameRegistry.registerTileEntity(tileEntityClass, new ResourceLocation(Constants.MOD_ID_PLANETS, key)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModuleClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModuleClient.java new file mode 100644 index 00000000..971562f4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/IPlanetsModuleClient.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.relauncher.Side; + +public interface IPlanetsModuleClient +{ + + public void preInit(FMLPreInitializationEvent event); + + public void registerVariants(); + + public void init(FMLInitializationEvent event); + + public void postInit(FMLPostInitializationEvent event); + + public void getGuiIDs(List idList); + + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z); + + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData); +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxy.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxy.java new file mode 100644 index 00000000..38742327 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxy.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.venus.tick.VenusTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.venus.tile.SolarModuleNetwork; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.network.IGuiHandler; +import net.minecraftforge.fml.relauncher.Side; + +public class PlanetsProxy implements IGuiHandler +{ + + public void preInit(FMLPreInitializationEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.preInit(event); + } + } + + public void registerVariants() + { + + } + + public void init(FMLInitializationEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.init(event); + } + } + + public void postInit(FMLPostInitializationEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.postInit(event); + } + } + + public void serverStarting(FMLServerStartingEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.serverStarting(event); + } + } + + public void serverInit(FMLServerStartedEvent event) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + module.serverInit(event); + } + } + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + for (IPlanetsModule module : GalacticraftPlanets.commonModules) + { + List guiIDs = new ArrayList(); + module.getGuiIDs(guiIDs); + if (guiIDs.contains(ID)) + { + return module.getGuiElement(Side.SERVER, ID, player, world, x, y, z); + } + } + + return null; + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + List guiIDs = new ArrayList(); + module.getGuiIDs(guiIDs); + if (guiIDs.contains(ID)) + { + return module.getGuiElement(Side.CLIENT, ID, player, world, x, y, z); + } + } + + return null; + } + + public void postRegisterItem(Item item) + { + } + + public void unregisterNetwork(SolarModuleNetwork solarNetwork) + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + VenusTickHandlerServer.removeSolarNetwork(solarNetwork); + } + } + + public void registerNetwork(SolarModuleNetwork solarNetwork) + { + if (GCCoreUtil.getEffectiveSide().isServer()) + { + VenusTickHandlerServer.addSolarNetwork(solarNetwork); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxyClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxyClient.java new file mode 100644 index 00000000..6e03a51c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/PlanetsProxyClient.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets; + +import com.google.common.collect.Lists; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModuleClient; +import micdoodle8.mods.galacticraft.planets.mars.MarsModuleClient; +import micdoodle8.mods.galacticraft.planets.venus.VenusModuleClient; +import net.minecraft.item.Item; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; + +public class PlanetsProxyClient extends PlanetsProxy +{ + + private List itemsToRegisterJson = Lists.newArrayList(); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + OBJLoaderGC.instance.addDomain(GalacticraftPlanets.ASSET_PREFIX); + GalacticraftPlanets.clientModules.add(new MarsModuleClient()); + GalacticraftPlanets.clientModules.add(new AsteroidsModuleClient()); + GalacticraftPlanets.clientModules.add(new VenusModuleClient()); + + super.preInit(event); + + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.preInit(event); + } + } + + @Override + public void registerVariants() + { + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.registerVariants(); + } + } + + @Override + public void init(FMLInitializationEvent event) + { + super.init(event); + + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.init(event); + } + + for (Item toReg : itemsToRegisterJson) + { + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, toReg); + } + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + super.postInit(event); + + for (IPlanetsModuleClient module : GalacticraftPlanets.clientModules) + { + module.postInit(event); + } + } + + @Override + public void serverStarting(FMLServerStartingEvent event) + { + super.serverStarting(event); + } + + @Override + public void postRegisterItem(Item item) + { + if (!item.getHasSubtypes()) + { + itemsToRegisterJson.add(item); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModule.java new file mode 100644 index 00000000..ad7834e3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModule.java @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids; + +import java.lang.reflect.Method; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.command.CommandGCAstroMiner; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.TeleportTypeAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntitySmallAsteroid; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.player.AsteroidsPlayerHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.event.AsteroidsEventHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerAstroMinerDock; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.network.PacketSimpleAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.recipe.CanisterRecipes; +import micdoodle8.mods.galacticraft.planets.asteroids.recipe.RecipeManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.schematic.SchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.schematic.SchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.tick.AsteroidsTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReceiver; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReflector; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBaseSingle; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityTelepadFake; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.BiomeAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.ChunkProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.RecipeSorter; + +public class AsteroidsModule implements IPlanetsModule +{ + + public static Planet planetAsteroids; + + public static AsteroidsPlayerHandler playerHandler; + public static Fluid fluidMethaneGas; + public static Fluid fluidOxygenGas; + public static Fluid fluidNitrogenGas; + public static Fluid fluidLiquidMethane; + public static Fluid fluidLiquidOxygen; + public static Fluid fluidLiquidNitrogen; + public static Fluid fluidLiquidArgon; + public static Fluid fluidAtmosphericGases; + + private Fluid registerFluid(String fluidName, int density, int viscosity, int temperature, boolean gaseous) + { + Fluid returnFluid = FluidRegistry.getFluid(fluidName); + if (returnFluid == null) + { + ResourceLocation texture = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/" + fluidName); + FluidRegistry.registerFluid(new Fluid(fluidName, texture, texture).setDensity(density).setViscosity(viscosity).setTemperature(temperature).setGaseous(gaseous)); + returnFluid = FluidRegistry.getFluid(fluidName); + } + return returnFluid; + } + + @Override + public void preInit(FMLPreInitializationEvent event) + { + AsteroidsModule.planetAsteroids = new Planet("asteroids").setParentSolarSystem(GalacticraftCore.solarSystemSol); + + playerHandler = new AsteroidsPlayerHandler(); + MinecraftForge.EVENT_BUS.register(playerHandler); + AsteroidsEventHandler eventHandler = new AsteroidsEventHandler(); + MinecraftForge.EVENT_BUS.register(eventHandler); + RecipeSorter.register("galacticraftplanets:canisterRecipe", CanisterRecipes.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless"); + + registerFluid("methane", 1, 11, 295, true); + registerFluid("atmosphericgases", 1, 13, 295, true); + registerFluid("liquidmethane", 450, 120, 109, false); + // Data source for liquid methane: + // http://science.nasa.gov/science-news/science-at-nasa/2005/25feb_titan2/ + registerFluid("liquidoxygen", 1141, 140, 90, false); + registerFluid("liquidnitrogen", 808, 130, 90, false); + registerFluid("nitrogen", 1, 12, 295, true); + registerFluid("carbondioxide", 2, 20, 295, true); + registerFluid("argon", 1, 4, 295, true); + registerFluid("liquidargon", 900, 100, 87, false); + registerFluid("helium", 1, 1, 295, true); + AsteroidsModule.fluidMethaneGas = FluidRegistry.getFluid("methane"); + AsteroidsModule.fluidAtmosphericGases = FluidRegistry.getFluid("atmosphericgases"); + AsteroidsModule.fluidLiquidMethane = FluidRegistry.getFluid("liquidmethane"); + AsteroidsModule.fluidLiquidOxygen = FluidRegistry.getFluid("liquidoxygen"); + AsteroidsModule.fluidOxygenGas = FluidRegistry.getFluid("oxygen"); + AsteroidsModule.fluidLiquidNitrogen = FluidRegistry.getFluid("liquidnitrogen"); + AsteroidsModule.fluidLiquidArgon = FluidRegistry.getFluid("liquidargon"); + AsteroidsModule.fluidNitrogenGas = FluidRegistry.getFluid("nitrogen"); + + AsteroidBlocks.initBlocks(); + AsteroidBlocks.registerBlocks(); + AsteroidBlocks.setHarvestLevels(); + + AsteroidsItems.initItems(); + + AsteroidsModule.planetAsteroids.setBiomeInfo(BiomeAsteroids.asteroid); + // This enables Endermen on Asteroids in Asteroids Challenge mode + ((BiomeAsteroids) BiomeAsteroids.asteroid).resetMonsterListByMode(ConfigManagerCore.challengeMobDropsAndSpawning); + } + + @Override + public void init(FMLInitializationEvent event) + { + AsteroidBlocks.oreDictRegistration(); + AsteroidsItems.oreDictRegistrations(); + + // Set creative tab item to AstroMiner + GalacticraftCore.galacticraftItemsTab.setItemForTab(new ItemStack(AsteroidsItems.astroMiner)); + + this.registerMicroBlocks(); + SchematicRegistry.registerSchematicRecipe(new SchematicTier3Rocket()); + SchematicRegistry.registerSchematicRecipe(new SchematicAstroMiner()); + + GalacticraftCore.packetPipeline.addDiscriminator(7, PacketSimpleAsteroids.class); + + AsteroidsTickHandlerServer eventHandler = new AsteroidsTickHandlerServer(); + MinecraftForge.EVENT_BUS.register(eventHandler); + + this.registerEntities(); + + RecipeManagerAsteroids.loadCompatibilityRecipes(); + + AsteroidsModule.planetAsteroids.setDimensionInfo(ConfigManagerAsteroids.dimensionIDAsteroids, WorldProviderAsteroids.class).setTierRequired(3); + AsteroidsModule.planetAsteroids.setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.375F, 1.375F)).setRelativeOrbitTime(45.0F).setPhaseShift((float) (Math.random() * (2 * Math.PI))); + AsteroidsModule.planetAsteroids.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/asteroid.png")); + AsteroidsModule.planetAsteroids.setAtmosphere(new AtmosphereInfo(false, false, false, -1.5F, 0.05F, 0.0F)); + AsteroidsModule.planetAsteroids.addChecklistKeys("equip_oxygen_suit", "craft_grapple_hook", "thermal_padding"); + + GalaxyRegistry.register(AsteroidsModule.planetAsteroids); + GalacticraftRegistry.registerTeleportType(WorldProviderAsteroids.class, new TeleportTypeAsteroids()); + + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T1_HELMET, EnumExtendedInventorySlot.THERMAL_HELMET, new ItemStack(AsteroidsItems.thermalPadding, 1, 0)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T1_CHESTPLATE, EnumExtendedInventorySlot.THERMAL_CHESTPLATE, new ItemStack(AsteroidsItems.thermalPadding, 1, 1)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T1_LEGGINGS, EnumExtendedInventorySlot.THERMAL_LEGGINGS, new ItemStack(AsteroidsItems.thermalPadding, 1, 2)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T1_BOOTS, EnumExtendedInventorySlot.THERMAL_BOOTS, new ItemStack(AsteroidsItems.thermalPadding, 1, 3)); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + GCPlanetDimensions.ASTEROIDS = WorldUtil.getDimensionTypeById(ConfigManagerAsteroids.dimensionIDAsteroids); + } + + @Override + public void serverStarting(FMLServerStartingEvent event) + { + event.registerServerCommand(new CommandGCAstroMiner()); + ChunkProviderAsteroids.reset(); + } + + @Override + public void serverInit(FMLServerStartedEvent event) + { + AsteroidsTickHandlerServer.restart(); + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_ASTEROIDS); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (side == Side.SERVER) + { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + + switch (ID) + { + case GuiIdsPlanets.MACHINE_ASTEROIDS: + + if (tile instanceof TileEntityShortRangeTelepad) + { + return new ContainerShortRangeTelepad(player.inventory, ((TileEntityShortRangeTelepad) tile), player); + } + if (tile instanceof TileEntityMinerBase) + { + return new ContainerAstroMinerDock(player.inventory, (TileEntityMinerBase) tile); + } + + break; + } + } + + return null; + } + + private void registerEntities() + { + this.registerCreatures(); + this.registerNonMobEntities(); + this.registerTileEntities(); + } + + private void registerCreatures() + { + + } + + private void registerNonMobEntities() + { + MarsModule.registerGalacticraftNonMobEntity(EntitySmallAsteroid.class, "small_asteroid", 150, 3, true); + MarsModule.registerGalacticraftNonMobEntity(EntityGrapple.class, "grapple_hook", 150, 1, true); + MarsModule.registerGalacticraftNonMobEntity(EntityTier3Rocket.class, "rocket_t3", 150, 1, false); + MarsModule.registerGalacticraftNonMobEntity(EntityEntryPod.class, "entry_pod", 150, 1, true); + MarsModule.registerGalacticraftNonMobEntity(EntityAstroMiner.class, "astro_miner", 80, 1, true); + } + + private void registerMicroBlocks() + { + try + { + Class clazz = Class.forName("codechicken.microblock.MicroMaterialRegistry"); + if (clazz != null) + { + Method registerMethod = null; + Method[] methodz = clazz.getMethods(); + for (Method m : methodz) + { + if (m.getName().equals("registerMaterial")) + { + registerMethod = m; + break; + } + } + Class clazzbm = Class.forName("codechicken.microblock.BlockMicroMaterial"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(AsteroidBlocks.blockBasic, 0), "tile.asteroids_block.asteroid_rock_0"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(AsteroidBlocks.blockBasic, 1), "tile.asteroids_block.asteroid_rock_1"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(AsteroidBlocks.blockBasic, 2), "tile.asteroids_block.asteroid_rock_2"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(AsteroidBlocks.blockDenseIce, 0), "tile.dense_ice"); + } + } + catch (Exception e) + {} + } + + private void registerTileEntities() + { + register(TileEntityBeamReflector.class, "gc_beam_reflector"); + register(TileEntityBeamReceiver.class, "gc_beam_receiver"); + register(TileEntityShortRangeTelepad.class, "gc_short_range_telepad"); + register(TileEntityTelepadFake.class, "gc_fake_short_range_telepad"); + register(TileEntityMinerBaseSingle.class, "gc_astro_miner_base_builder"); + register(TileEntityMinerBase.class, "gc_astro_miner_base"); + } + + @Override + public Configuration getConfiguration() + { + return ConfigManagerAsteroids.config; + } + + @Override + public void syncConfig() + { + ConfigManagerAsteroids.syncConfig(false, false); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModuleClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModuleClient.java new file mode 100644 index 00000000..ab08720c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/AsteroidsModuleClient.java @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModuleClient; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.client.FluidTexturesGC; +import micdoodle8.mods.galacticraft.planets.asteroids.client.fx.EntityFXTeleport; +import micdoodle8.mods.galacticraft.planets.asteroids.client.gui.GuiAstroMinerDock; +import micdoodle8.mods.galacticraft.planets.asteroids.client.gui.GuiShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderEntryPod; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderSmallAsteroid; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity.RenderTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelBeamReceiver; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelBeamReflector; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelRocketT3; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile.TileEntityBeamReceiverRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile.TileEntityBeamReflectorRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile.TileEntityMinerBaseRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile.TileEntityShortRangeTelepadRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntitySmallAsteroid; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.event.AsteroidsEventHandlerClient; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReceiver; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReflector; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.mars.client.fx.EntityCryoFX; +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.model.IModelState; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class AsteroidsModuleClient implements IPlanetsModuleClient +{ + + @Override + public void preInit(FMLPreInitializationEvent event) + { + RenderingRegistry.registerEntityRenderingHandler(EntitySmallAsteroid.class, (RenderManager manager) -> new RenderSmallAsteroid(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrapple.class, (RenderManager manager) -> new RenderGrapple(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEntryPod.class, (RenderManager manager) -> new RenderEntryPod(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityTier3Rocket.class, (RenderManager manager) -> new RenderTier3Rocket(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityAstroMiner.class, (RenderManager manager) -> new RenderAstroMiner(manager)); + MinecraftForge.EVENT_BUS.register(this); + } + + @Override + public void registerVariants() + { + addPlanetVariants("asteroids_block", "asteroids_block", "asteroid_rock_1", "asteroid_rock_2", "ore_aluminum_asteroids", "ore_ilmenite_asteroids", "ore_iron_asteroids", "asteroid_deco", + "titanium_block"); + addPlanetVariants("thermal_padding", "thermal_padding", "thermal_chestplate", "thermal_leggings", "thermal_boots"); + addPlanetVariants("item_basic_asteroids", "item_basic_asteroids", "engine_t2", "rocket_fins_t2", "shard_iron", "shard_titanium", "ingot_titanium", "compressed_titanium", "thermal_cloth", + "beam_core", "dust_titanium"); + addPlanetVariants("walkway", "walkway", "walkway_wire", "walkway_pipe"); + addPlanetVariants("strange_seed", "strange_seed", "strange_seed1"); + + Item receiver = Item.getItemFromBlock(AsteroidBlocks.beamReceiver); + ModelResourceLocation modelResourceLocation = new ModelResourceLocation("galacticraftplanets:beam_receiver", "inventory"); + ModelLoader.setCustomModelResourceLocation(receiver, 0, modelResourceLocation); + + Item reflector = Item.getItemFromBlock(AsteroidBlocks.beamReflector); + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:beam_reflector", "inventory"); + ModelLoader.setCustomModelResourceLocation(reflector, 0, modelResourceLocation); + + Item teleporter = Item.getItemFromBlock(AsteroidBlocks.shortRangeTelepad); + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:telepad_short", "inventory"); + ModelLoader.setCustomModelResourceLocation(teleporter, 0, modelResourceLocation); + + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:grapple", "inventory"); + ModelLoader.setCustomModelResourceLocation(AsteroidsItems.grapple, 0, modelResourceLocation); + + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:rocket_t3", "inventory"); + for (int i = 0; i < 5; ++i) + { + ModelLoader.setCustomModelResourceLocation(AsteroidsItems.tier3Rocket, i, modelResourceLocation); + } + + modelResourceLocation = new ModelResourceLocation("galacticraftplanets:astro_miner", "inventory"); + ModelLoader.setCustomModelResourceLocation(AsteroidsItems.astroMiner, 0, modelResourceLocation); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onModelBakeEvent(ModelBakeEvent event) + { + replaceModelDefault(event, "beam_receiver", "block/receiver.obj", ImmutableList.of("Main", "Receiver", "Ring"), ItemModelBeamReceiver.class, TRSRTransformation.identity(), "inventory", + "facing=up", "facing=down", "facing=north", "facing=west", "facing=east", "facing=south"); + replaceModelDefault(event, "beam_reflector", "block/reflector.obj", ImmutableList.of("Base", "Axle", "EnergyBlaster", "Ring"), ItemModelBeamReflector.class, TRSRTransformation.identity(), + "inventory", "normal"); + replaceModelDefault(event, "telepad_short", "block/telepad_short.obj", ImmutableList.of("Top", "Bottom", "Connector"), ItemModelTelepad.class, TRSRTransformation.identity(), "inventory", + "normal"); + replaceModelDefault(event, "grapple", "grapple.obj", ImmutableList.of("Grapple"), ItemModelGrapple.class, TRSRTransformation.identity()); + replaceModelDefault(event, "rocket_t3", "tier3rocket.obj", ImmutableList.of("Boosters", "Cube", "NoseCone", "Rocket"), ItemModelRocketT3.class, TRSRTransformation.identity()); + replaceModelDefault(event, "astro_miner", "astro_miner_inv.obj", ImmutableList.of("Hull_Center"), ItemModelAstroMiner.class, TRSRTransformation.identity()); + } + + private void replaceModelDefault(ModelBakeEvent event, String resLoc, String objLoc, List visibleGroups, Class clazz, IModelState parentState, String... variants) + { + ClientUtil.replaceModel(GalacticraftPlanets.ASSET_PREFIX, event, resLoc, objLoc, visibleGroups, clazz, parentState, variants); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void loadTextures(TextureStitchEvent.Pre event) + { + registerTexture(event, "minerbase"); + registerTexture(event, "beam_reflector"); + registerTexture(event, "beam_receiver"); + registerTexture(event, "telepad_short"); + registerTexture(event, "telepad_short0"); + registerTexture(event, "grapple"); + registerTexture(event, "tier3rocket"); + registerTexture(event, "astro_miner"); + registerTexture(event, "astro_miner_off"); + registerTexture(event, "astro_miner_fx"); + registerTexture(event, "space_pod"); + registerTexture(event, "fluids/argon"); + registerTexture(event, "fluids/atmosphericgases"); + registerTexture(event, "fluids/carbondioxide"); + registerTexture(event, "fluids/helium"); + registerTexture(event, "fluids/liquidargon"); + registerTexture(event, "fluids/liquidmethane"); + registerTexture(event, "fluids/liquidnitrogen"); + registerTexture(event, "fluids/liquidoxygen"); + registerTexture(event, "fluids/methane"); + registerTexture(event, "fluids/nitrogen"); + } + + private void registerTexture(TextureStitchEvent.Pre event, String texture) + { + event.getMap().registerSprite(new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/" + texture)); + } + + @Override + public void init(FMLInitializationEvent event) + { + AsteroidsEventHandlerClient clientEventHandler = new AsteroidsEventHandlerClient(); + MinecraftForge.EVENT_BUS.register(clientEventHandler); + FluidTexturesGC.init(); + AsteroidsModuleClient.registerBlockRenderers(); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { +// RenderingRegistry.registerEntityRenderingHandler(EntityAstroMiner.class, (RenderManager manager) -> new RenderAstroMiner()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBeamReflector.class, new TileEntityBeamReflectorRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBeamReceiver.class, new TileEntityBeamReceiverRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMinerBase.class, new TileEntityMinerBaseRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityShortRangeTelepad.class, new TileEntityShortRangeTelepadRenderer()); + +// if (Loader.isModLoaded("craftguide")) +// { +// CraftGuideIntegration.register(); +// } + } + + public static void registerBlockRenderers() + { + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 0, "asteroids_block"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 1, "asteroid_rock_1"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 2, "asteroid_rock_2"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 3, "ore_aluminum_asteroids"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 4, "ore_ilmenite_asteroids"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 5, "ore_iron_asteroids"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 6, "asteroid_deco"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockBasic, 7, "titanium_block"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockWalkway, 0, "walkway"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockWalkway, 1, "walkway_wire"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockWalkway, 2, "walkway_pipe"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockDenseIce); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.blockMinerBase); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidBlocks.minerBaseFull); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.thermalPadding, 0, "thermal_padding"); // helm + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.thermalPadding, 1, "thermal_chestplate"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.thermalPadding, 2, "thermal_leggings"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.thermalPadding, 3, "thermal_boots"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 5, "item_basic_asteroids"); // reinforced_plate_t3 + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 1, "engine_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 2, "rocket_fins_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 3, "shard_iron"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 4, "shard_titanium"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 0, "ingot_titanium"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 6, "compressed_titanium"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 7, "thermal_cloth"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 8, "beam_core"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.basicItem, 9, "dust_titanium"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.heavyNoseCone, 0, "heavy_nose_cone"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.strangeSeed, 0, "strange_seed"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, AsteroidsItems.strangeSeed, 1, "strange_seed1"); + } + + private void addPlanetVariants(String name, String... variants) + { + Item itemBlockVariants = Item.REGISTRY.getObject(new ResourceLocation(Constants.MOD_ID_PLANETS, name)); + ResourceLocation[] variants0 = new ResourceLocation[variants.length]; + for (int i = 0; i < variants.length; ++i) + { + variants0[i] = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + variants[i]); + } + ModelBakery.registerItemVariants(itemBlockVariants, variants0); + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_ASTEROIDS); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + + switch (ID) + { + case GuiIdsPlanets.MACHINE_ASTEROIDS: + + if (tile instanceof TileEntityShortRangeTelepad) + { + return new GuiShortRangeTelepad(player.inventory, ((TileEntityShortRangeTelepad) tile)); + } + if (tile instanceof TileEntityMinerBase) + { + return new GuiAstroMinerDock(player.inventory, (TileEntityMinerBase) tile); + } + + break; + } + + return null; + } + + @Override + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData) + { + Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + double dX = mc.getRenderViewEntity().posX - position.x; + double dY = mc.getRenderViewEntity().posY - position.y; + double dZ = mc.getRenderViewEntity().posZ - position.z; + Particle particle = null; + double viewDistance = 64.0D; + + if (dX * dX + dY * dY + dZ * dZ < viewDistance * viewDistance) + { + if (particleID.equals("portalBlue")) + { + particle = new EntityFXTeleport(mc.world, position, motion, (TileEntityShortRangeTelepad) extraData[0], (Boolean) extraData[1]); + } else if (particleID.equals("cryoFreeze")) + { + particle = new EntityCryoFX(mc.world, position, motion); + } + } + + if (particle != null) + { + mc.effectRenderer.addEffect(particle); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/ConfigManagerAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/ConfigManagerAsteroids.java new file mode 100644 index 00000000..2eb8e09f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/ConfigManagerAsteroids.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids; + +import java.io.File; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +public class ConfigManagerAsteroids +{ + + public static boolean loaded; + + static Configuration config; + + public ConfigManagerAsteroids(File file) + { + if (!ConfigManagerAsteroids.loaded) + { + if (file.exists()) + { + ConfigManagerAsteroids.config = new Configuration(file); + ConfigManagerAsteroids.syncConfig(true, true); + file.delete(); + config = ConfigManagerMars.config; + } else + { + config = ConfigManagerMars.config; + ConfigManagerAsteroids.syncConfig(true, false); + } + } + } + + // DIMENSIONS + public static int dimensionIDAsteroids; + + // GUI + + // SCHEMATIC + public static int idSchematicRocketT3; + + // GENERAL + public static boolean disableGalacticraftHelium; + public static boolean disableSmallAsteroids; + public static int astroMinerMax; + + public static boolean disableIlmeniteGen; + public static boolean disableIronGen; + public static boolean disableAluminumGen; + + public static void syncConfig(boolean load, boolean update) + { + try + { + Property prop; + Property propCopy; + + if (!config.isChild) + { + if (update) + { + config.load(); + } + } + + prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "dimensionIDAsteroids", -30); + prop.setComment("Dimension ID for Asteroids"); + prop.setLanguageKey("gc.configgui.dimension_id_asteroids").setRequiresMcRestart(true); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, prop.getName(), prop.getInt(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + propCopy.setRequiresMcRestart(prop.requiresMcRestart()); + } + dimensionIDAsteroids = prop.getInt(); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_DIMENSIONS); + + // + + prop = config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicRocketT3", 4); + prop.setComment("Schematic ID for Tier 3 Rocket, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_rocket_t3"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, prop.getName(), prop.getInt(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + idSchematicRocketT3 = prop.getInt(4); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_SCHEMATIC); + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "disableGalacticraftHelium", false); + prop.setComment("Option to disable Helium gas in Galacticraft (because it will be registered by another mod eg GregTech)."); + prop.setLanguageKey("gc.configgui.disable_galacticraft_helium"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_GENERAL, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableGalacticraftHelium = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "maximumAstroMiners", 6); + prop.setComment("Maximum number of Astro Miners each player is allowed to have active (default 6)."); + prop.setLanguageKey("gc.configgui.astro_miners_max"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_GENERAL, prop.getName(), prop.getInt(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + astroMinerMax = prop.getInt(6); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "disableSmallAsteroids", false); + prop.setComment("Option to disable small asteroids from spawning in the Asteroids Dimension."); + prop.setLanguageKey("gc.configgui.disable_small_asteroids"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_GENERAL, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableSmallAsteroids = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Iron Ore Gen on Asteroids", false); + prop.setComment("Disable Iron Ore Gen on Asteroids."); + prop.setLanguageKey("gc.configgui.disable_iron_gen_asteroids"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableIronGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Aluminum Ore Gen on Asteroids", false); + prop.setComment("Disable Aluminum Ore Gen on Asteroids."); + prop.setLanguageKey("gc.configgui.disable_aluminum_gen_asteroids"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableAluminumGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Ilmenite Ore Gen on Asteroids", false); + prop.setComment("Disable Ilmenite Ore Gen on Asteroids."); + prop.setLanguageKey("gc.configgui.disable_ilmenite_gen_asteroids"); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + } + disableIlmeniteGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + } catch (final Exception e) + { + GalacticraftPlanets.logger.error(e, "Galacticraft Asteroids (Planets) has a problem loading its config"); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/AsteroidBlocks.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/AsteroidBlocks.java new file mode 100644 index 00000000..5bc8c36e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/AsteroidBlocks.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGC; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemBlockAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemBlockShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemBlockWalkway; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public class AsteroidBlocks +{ + + public static Block blockWalkway; + public static Block blockBasic; + // public static Block machineFrame; + public static Block beamReflector; + public static Block beamReceiver; + public static Block shortRangeTelepad; + public static Block fakeTelepad; + public static Block blockDenseIce; + public static Block blockMinerBase; + public static Block minerBaseFull; + public static Block spaceWart; + + public static void initBlocks() + { + AsteroidBlocks.blockWalkway = new BlockWalkway("walkway"); + AsteroidBlocks.blockBasic = new BlockBasicAsteroids("asteroids_block"); + AsteroidBlocks.beamReflector = new BlockBeamReflector("beam_reflector"); + AsteroidBlocks.beamReceiver = new BlockBeamReceiver("beam_receiver"); + AsteroidBlocks.shortRangeTelepad = new BlockShortRangeTelepad("telepad_short"); + AsteroidBlocks.fakeTelepad = new BlockTelepadFake("telepad_fake"); + AsteroidBlocks.blockDenseIce = new BlockIceAsteroids("dense_ice"); + AsteroidBlocks.blockMinerBase = new BlockMinerBase("miner_base"); + AsteroidBlocks.minerBaseFull = new BlockMinerBaseFull("miner_base_full"); + AsteroidBlocks.spaceWart = new BlockSpaceWart("spacewart"); + } + + public static void registerBlock(Block block, Class itemClass) + { + GCBlocks.register(Constants.MOD_ID_PLANETS, block, itemClass); + } + + public static void registerBlocks() + { + registerBlock(AsteroidBlocks.blockBasic, ItemBlockAsteroids.class); + registerBlock(AsteroidBlocks.blockWalkway, ItemBlockWalkway.class); + registerBlock(AsteroidBlocks.beamReflector, ItemBlockDesc.class); + registerBlock(AsteroidBlocks.beamReceiver, ItemBlockDesc.class); + registerBlock(AsteroidBlocks.shortRangeTelepad, ItemBlockShortRangeTelepad.class); + registerBlock(AsteroidBlocks.fakeTelepad, null); + registerBlock(AsteroidBlocks.blockDenseIce, ItemBlockGC.class); + registerBlock(AsteroidBlocks.blockMinerBase, ItemBlockDesc.class); + registerBlock(AsteroidBlocks.minerBaseFull, null); + registerBlock(AsteroidBlocks.spaceWart, null); + } + + private static void setHarvestLevel(Block block, String toolClass, int level, int meta) + { + block.setHarvestLevel(toolClass, level, block.getStateFromMeta(meta)); + } + + private static void setHarvestLevel(Block block, String toolClass, int level) + { + block.setHarvestLevel(toolClass, level); + } + + public static void setHarvestLevels() + { + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 0, 0); // Rock + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 0, 1); // Rock + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 0, 2); // Rock + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 2, 3); // Aluminium + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 3, 4); // Ilmenite + setHarvestLevel(AsteroidBlocks.blockBasic, "pickaxe", 2, 5); // Iron + } + + public static void oreDictRegistration() + { + OreDictionary.registerOre("oreAluminum", new ItemStack(AsteroidBlocks.blockBasic, 1, 3)); + OreDictionary.registerOre("oreAluminium", new ItemStack(AsteroidBlocks.blockBasic, 1, 3)); + OreDictionary.registerOre("oreNaturalAluminum", new ItemStack(AsteroidBlocks.blockBasic, 1, 3)); + OreDictionary.registerOre("oreIlmenite", new ItemStack(AsteroidBlocks.blockBasic, 1, 4)); + OreDictionary.registerOre("oreIron", new ItemStack(AsteroidBlocks.blockBasic, 1, 5)); + + OreDictionary.registerOre("blockTitanium", new ItemStack(AsteroidBlocks.blockBasic, 1, 7)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBasicAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBasicAsteroids.java new file mode 100644 index 00000000..270e5a13 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBasicAsteroids.java @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.block.IPlantableBlock; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBasicAsteroids extends Block implements IDetectableResource, IPlantableBlock, ITerraformableBlock, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE = PropertyEnum.create("basictypeasteroids", EnumBlockBasic.class); + + public enum EnumBlockBasic implements IStringSerializable + { + + ASTEROID_0(0, "asteroid_rock_0"), + ASTEROID_1(1, "asteroid_rock_1"), + ASTEROID_2(2, "asteroid_rock_2"), + ORE_ALUMINUM(3, "ore_aluminum_asteroids"), + ORE_ILMENITE(4, "ore_ilmenite_asteroids"), + ORE_IRON(5, "ore_iron_asteroids"), + DECO(6, "asteroid_deco"), + TITANIUM_BLOCK(7, "titanium_block"); + + private final int meta; + private final String name; + + private EnumBlockBasic(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockBasic[] values = values(); + + public static EnumBlockBasic byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockBasicAsteroids(String assetName) + { + super(Material.ROCK); + this.blockHardness = 3.0F; + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_ILMENITE && world instanceof World) + { + ArrayList ret = new ArrayList(); + + int count = quantityDropped(state, fortune, ((World) world).rand); + for (int i = 0; i < count; i++) + { + ret.add(new ItemStack(AsteroidsItems.basicItem, 1, 3)); + } + count = quantityDropped(state, fortune, ((World) world).rand); + for (int i = 0; i < count; i++) + { + ret.add(new ItemStack(AsteroidsItems.basicItem, 1, 4)); + } + return ret; + } + + return super.getDrops(world, pos, state, fortune); + } + + @Override + public int damageDropped(IBlockState state) + { + switch (getMetaFromState(state)) + { + case 4: + return 0; + default: + return getMetaFromState(state); + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + switch (getMetaFromState(state)) + { + case 4: + if (fortune >= 1) + { + return (random.nextFloat() < fortune * 0.29F - 0.25F) ? 2 : 1; + } + default: + return 1; + } + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + int var4; + + for (var4 = 0; var4 < EnumBlockBasic.values().length; ++var4) + { + list.add(new ItemStack(this, 1, var4)); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + switch (this.getMetaFromState(state)) + { + case 3: + case 4: + case 5: + return true; + default: + return false; + } + } + + @Override + public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) + { + return false; + } + + @Override + public int requiredLiquidBlocksNearby() + { + return 4; + } + + @Override + public boolean isPlantable(IBlockState state) + { + return false; + } + + @Override + public boolean isTerraformable(World world, BlockPos pos) + { + return false; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_ILMENITE) + { + return new ItemStack(Item.getItemFromBlock(this), 1, getMetaFromState(state)); + } + + return super.getPickBlock(state, target, world, pos, player); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE, EnumBlockBasic.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasic) state.getValue(BASIC_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + switch (meta) + { + case 3: + case 4: + case 5: + return EnumSortCategoryBlock.ORE; + case 6: + return EnumSortCategoryBlock.DECORATION; + case 7: + return EnumSortCategoryBlock.INGOT_BLOCK; + } + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + int meta = this.getMetaFromState(state); + if (meta == 4) + { + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 2, 3); + } + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReceiver.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReceiver.java new file mode 100644 index 00000000..93d31a24 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReceiver.java @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReceiver; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBeamReceiver extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing"); + protected static final AxisAlignedBB UP_AABB = new AxisAlignedBB(0.3F, 0.3F, 0.3F, 0.7F, 1.0F, 0.7F); + protected static final AxisAlignedBB DOWN_AABB = new AxisAlignedBB(0.2F, 0.0F, 0.2F, 0.8F, 0.42F, 0.8F); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.58F, 0.2F, 0.2F, 1.0F, 0.8F, 0.8F); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.0F, 0.2F, 0.2F, 0.42F, 0.8F, 0.8F); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.0F, 0.8F, 0.8F, 0.42F); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.2F, 0.2F, 0.58F, 0.8F, 0.8F, 1.0F); + + public BlockBeamReceiver(String assetName) + { + super(Material.IRON); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (state.getValue(FACING)) + { + case UP: + return UP_AABB; + case DOWN: + return DOWN_AABB; + case EAST: + return EAST_AABB; + case WEST: + return WEST_AABB; + case SOUTH: + return SOUTH_AABB; + default: + case NORTH: + return NORTH_AABB; + } + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + int oldMeta = getMetaFromState(state); + int meta = this.getMetadataFromAngle(worldIn, pos, EnumFacing.byIndex(oldMeta).getOpposite()); + + if (meta == -1) + { + worldIn.destroyBlock(pos, true); + } else if (meta != oldMeta) + { + worldIn.setBlockState(pos, getStateFromMeta(meta), 3); + TileEntity thisTile = worldIn.getTileEntity(pos); + if (thisTile instanceof TileEntityBeamReceiver) + { + TileEntityBeamReceiver thisReceiver = (TileEntityBeamReceiver) thisTile; + thisReceiver.setFacing(EnumFacing.byIndex(meta)); + thisReceiver.invalidateReflector(); + thisReceiver.initiateReflector(); + } + } + + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } + + @Override + public void onBlockAdded(World world, BlockPos pos, IBlockState state) + { + TileEntity thisTile = world.getTileEntity(pos); + if (thisTile instanceof TileEntityBeamReceiver) + { + ((TileEntityBeamReceiver) thisTile).setFacing(EnumFacing.byIndex(getMetaFromState(state))); + } + } + + private int getMetadataFromAngle(World world, BlockPos pos, EnumFacing side) + { + EnumFacing direction = side.getOpposite(); + + TileEntity tileAt = world.getTileEntity(pos.add(direction.getXOffset(), direction.getYOffset(), direction.getZOffset())); + + if (tileAt instanceof EnergyStorageTile) + { + if (((EnergyStorageTile) tileAt).getModeFromDirection(direction.getOpposite()) != null) + { + return direction.ordinal(); + } else + { + return -1; + } + } + + if (EnergyUtil.otherModCanReceive(tileAt, direction.getOpposite())) + { + return direction.ordinal(); + } + + for (EnumFacing adjacentDir : EnumFacing.VALUES) + { + if (adjacentDir == direction) + { + continue; + } + tileAt = world.getTileEntity(pos.add(adjacentDir.getXOffset(), adjacentDir.getYOffset(), adjacentDir.getZOffset())); + + if (tileAt instanceof IConductor) + { + continue; + } + + if (tileAt instanceof EnergyStorageTile && ((EnergyStorageTile) tileAt).getModeFromDirection(adjacentDir.getOpposite()) != null) + { + return adjacentDir.ordinal(); + } + + if (EnergyUtil.otherModCanReceive(tileAt, adjacentDir.getOpposite())) + { + return adjacentDir.ordinal(); + } + } + + return -1; + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + return getStateFromMeta(this.getMetadataFromAngle(world, pos, facing)); + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + if (this.getMetadataFromAngle(worldIn, pos, side) != -1) + { + return true; + } + + if (worldIn.isRemote) + { + this.sendIncorrectSideMessage(); + } + + return false; + } + + @SideOnly(Side.CLIENT) + private void sendIncorrectSideMessage() + { + FMLClientHandler.instance().getClient().player.sendMessage(new TextComponentString(EnumColor.RED + GCCoreUtil.translate("gui.receiver.cannot_attach"))); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public int damageDropped(IBlockState metadata) + { + return 0; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState metadata) + { + return new TileEntityBeamReceiver(); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityBeamReceiver) + { + return ((TileEntityBeamReceiver) tile).onMachineActivated(worldIn, pos, state, playerIn, hand, heldItem, side, hitX, hitY, hitZ); + } + + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byIndex(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReflector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReflector.java new file mode 100644 index 00000000..76143307 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockBeamReflector.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReflector; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBeamReflector extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.25, 0.0, 0.25, 0.75, 0.8, 0.75); + + public BlockBeamReflector(String assetName) + { + super(Material.IRON); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityBeamReflector(); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + } + + @Override + public boolean onSneakMachineActivated(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntityBeamReflector) + { + return ((TileEntityBeamReflector) tile).onMachineActivated(world, pos, world.getBlockState(pos), entityPlayer, hand, heldItem, side, hitX, hitY, hitZ); + } + + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockIceAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockIceAsteroids.java new file mode 100644 index 00000000..59421551 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockIceAsteroids.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBreakable; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockIceAsteroids extends BlockBreakable implements ISortableBlock +{ + + public BlockIceAsteroids(String assetName) + { + super(Material.ICE, false); + this.slipperiness = 0.98F; + this.setTickRandomly(true); + this.setHardness(0.5F); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.GLASS); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te, ItemStack tool) + { + player.addStat(StatList.getBlockStats(this)); + player.addExhaustion(0.025F); + + if (this.canSilkHarvest(worldIn, pos, state, player) && EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) + { + ArrayList items = new ArrayList(); + items.add(this.getSilkTouchDrop(state)); + + ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player); + for (ItemStack is : items) + { + Block.spawnAsEntity(worldIn, pos, is); + } + } else + { + if (worldIn.provider.getDimension() == -1 || worldIn.provider instanceof IGalacticraftWorldProvider) + { + worldIn.setBlockToAir(pos); + return; + } + + int i1 = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, tool); + harvesters.set(player); + this.dropBlockAsItem(worldIn, pos, state, i1); + harvesters.set(null); + IBlockState state1 = worldIn.getBlockState(pos.down()); + Material material = state1.getMaterial(); + + if (material.blocksMovement() || material.isLiquid()) + { + worldIn.setBlockState(pos, Blocks.FLOWING_WATER.getDefaultState()); + } + } + } + + @Override + public int quantityDropped(Random rand) + { + return 0; + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (worldIn.getLightFor(EnumSkyBlock.BLOCK, pos) > 13 - this.getLightOpacity(state)) + { + if (GCCoreUtil.getDimensionID(worldIn) == -1 || worldIn.provider instanceof IGalacticraftWorldProvider) + { + worldIn.setBlockToAir(pos); + return; + } + + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockState(pos, Blocks.WATER.getDefaultState()); + } + } + + @Override + public EnumPushReaction getPushReaction(IBlockState state) + { + return EnumPushReaction.NORMAL; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBase.java new file mode 100644 index 00000000..b0569a0a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBase.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBaseSingle; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockMinerBase extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + public BlockMinerBase(String assetName) + { + super(Material.ROCK); + this.blockHardness = 3.0F; + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public Item getItemDropped(IBlockState state, Random random, int par3) + { + return super.getItemDropped(state, random, par3); + } + + @Override + public int damageDropped(IBlockState state) + { + return 0; + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + return 1; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState metadata) + { + return new TileEntityMinerBaseSingle(); + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + return getStateFromMeta(0); + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBaseFull.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBaseFull.java new file mode 100644 index 00000000..9fa083a3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockMinerBaseFull.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockMinerBaseFull extends BlockTileGC +{ + + public BlockMinerBaseFull(String assetName) + { + super(Material.ROCK); + this.blockHardness = 3.0F; + this.setResistance(35F); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public int damageDropped(IBlockState state) + { + return 0; + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + return 1; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntityMinerBase(); + } + + @Override + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tileEntity).onBlockRemoval(); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + if (tileEntity instanceof TileEntityMinerBase) + { + return ((TileEntityMinerBase) tileEntity).onActivated(playerIn); + } else + { + return false; + } + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(AsteroidBlocks.blockMinerBase); + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(Item.getItemFromBlock(AsteroidBlocks.blockMinerBase), 8, 0)); + return ret; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(AsteroidBlocks.blockMinerBase), 1, 0); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntity te = world.getTileEntity(pos); + if (te instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) te).updateFacing(); + } + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockShortRangeTelepad.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockShortRangeTelepad.java new file mode 100644 index 00000000..93e7f221 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockShortRangeTelepad.java @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.ShortRangeTelepadHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockShortRangeTelepad extends BlockTileGC implements IShiftDescription, ISortableBlock +{ + + protected static final AxisAlignedBB AABB_TELEPAD = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 0.45F, 1.0F); + + protected BlockShortRangeTelepad(String assetName) + { + super(Material.IRON); + this.blockHardness = 3.0F; + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityShortRangeTelepad(); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB_TELEPAD; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + + TileEntity tile = worldIn.getTileEntity(pos); + + boolean validSpot = true; + + for (int x = -1; x <= 1; x++) + { + for (int y = 0; y < 3; y += 2) + { + for (int z = -1; z <= 1; z++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + IBlockState stateAt = worldIn.getBlockState(pos.add(x, y, z)); + + if (!stateAt.getMaterial().isReplaceable()) + { + validSpot = false; + } + } + } + } + } + + if (!validSpot) + { + worldIn.setBlockToAir(pos); + + if (placer instanceof EntityPlayer) + { + if (!worldIn.isRemote) + { + ((EntityPlayer) placer).sendMessage(new TextComponentString(EnumColor.RED + GCCoreUtil.translate("gui.warning.noroom"))); + } + ((EntityPlayer) placer).inventory.addItemStackToInventory(new ItemStack(Item.getItemFromBlock(this), 1, 0)); + } + + return; + } + + if (tile instanceof TileEntityShortRangeTelepad) + { + ((TileEntityShortRangeTelepad) tile).onCreate(worldIn, pos); + ((TileEntityShortRangeTelepad) tile).setOwner(PlayerUtil.getName(((EntityPlayer) placer))); + } + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + return ((IMultiBlock) worldIn.getTileEntity(pos)).onActivated(playerIn); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity tileAt = worldIn.getTileEntity(pos); + + int fakeBlockCount = 0; + + for (int x = -1; x <= 1; x++) + { + for (int y = 0; y < 3; y += 2) + { + for (int z = -1; z <= 1; z++) + { + if (!(x == 0 && y == 0 && z == 0)) + { + if (worldIn.getBlockState(pos.add(x, y, z)).getBlock() == AsteroidBlocks.fakeTelepad) + { + fakeBlockCount++; + } + } + } + } + } + + if (tileAt instanceof TileEntityShortRangeTelepad) + { + if (fakeBlockCount > 0) + { + ((TileEntityShortRangeTelepad) tileAt).onDestroy(tileAt); + } + ShortRangeTelepadHandler.removeShortRangeTeleporter((TileEntityShortRangeTelepad) tileAt); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + final TileEntity tileAt = worldIn.getTileEntity(pos); + + if (tileAt instanceof TileEntityShortRangeTelepad) + { + TileEntityShortRangeTelepad telepad = (TileEntityShortRangeTelepad) tileAt; + float teleportTimeScaled = Math.min(1.0F, telepad.teleportTime / (float) TileEntityShortRangeTelepad.MAX_TELEPORT_TIME); + float f; + float r; + float g; + float b; + + for (int i = 0; i < 6; i++) + { + for (int j = 0; j < 4; j++) + { + f = rand.nextFloat() * 0.6F + 0.4F; + r = f * 0.3F; + g = f * (0.3F + (teleportTimeScaled * 0.7F)); + b = f * (1.0F - (teleportTimeScaled * 0.7F)); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + 0.2 + rand.nextDouble() * 0.6, pos.getY() + 0.1, pos.getZ() + 0.2 + rand.nextDouble() * 0.6), + new Vector3(0.0, 1.4, 0.0), telepad, false); + } + + f = rand.nextFloat() * 0.6F + 0.4F; + r = f * 0.3F; + g = f * (0.3F + (teleportTimeScaled * 0.7F)); + b = f * (1.0F - (teleportTimeScaled * 0.7F)); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + 0.0 + rand.nextDouble() * 0.2, pos.getY() + 2.9, pos.getZ() + rand.nextDouble()), new Vector3(0.0, -2.95, 0.0), + telepad, true); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + 0.8 + rand.nextDouble() * 0.2, pos.getY() + 2.9, pos.getZ() + rand.nextDouble()), new Vector3(0.0, -2.95, 0.0), + telepad, true); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + rand.nextDouble(), pos.getY() + 2.9, pos.getZ() + 0.2 + rand.nextDouble() * 0.2), new Vector3(0.0, -2.95, 0.0), + telepad, true); + GalacticraftPlanets.spawnParticle("portalBlue", new Vector3(pos.getX() + rand.nextDouble(), pos.getY() + 2.9, pos.getZ() + 0.8 + rand.nextDouble() * 0.2), new Vector3(0.0, -2.95, 0.0), + telepad, true); + } + } + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockSpaceWart.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockSpaceWart.java new file mode 100644 index 00000000..6197ba94 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockSpaceWart.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import net.minecraft.block.BlockNetherWart; + +public class BlockSpaceWart extends BlockNetherWart +{ + + public BlockSpaceWart(String assetName) + { + super(); + this.setTickRandomly(false); + this.setTranslationKey(assetName); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockTelepadFake.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockTelepadFake.java new file mode 100644 index 00000000..c83b39ab --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockTelepadFake.java @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvancedTile; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityTelepadFake; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDirectional; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.ParticleManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import java.util.Random; + +public class BlockTelepadFake extends BlockAdvancedTile implements ITileEntityProvider +{ + + public static final PropertyBool TOP = PropertyBool.create("top"); + public static final PropertyBool CONNECTABLE = PropertyBool.create("connectable"); + protected static final AxisAlignedBB AABB_TOP = new AxisAlignedBB(0.0F, 0.55F, 0.0F, 1.0F, 1.0F, 1.0F); + protected static final AxisAlignedBB AABB_BOTTOM = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 0.2F, 1.0F); + + public BlockTelepadFake(String assetName) + { + super(GCBlocks.machine); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + this.setResistance(1000000000000000.0F); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return state.getValue(TOP) ? AABB_TOP : AABB_BOTTOM; + } + + @Override + public boolean canDropFromExplosion(Explosion par1Explosion) + { + return false; + } + + public void makeFakeBlock(World worldObj, BlockPos pos, BlockPos mainBlock, IBlockState state) + { + worldObj.setBlockState(pos, state, 3); + ((TileEntityTelepadFake) worldObj.getTileEntity(pos)).setMainBlock(mainBlock); + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityTelepadFake) + { + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + return worldIn.getBlockState(mainBlockPosition).getBlockHardness(worldIn, mainBlockPosition); + } + } + + return this.blockHardness; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + + if (tileEntity instanceof TileEntityTelepadFake) + { + ((TileEntityTelepadFake) tileEntity).onBlockRemoval(); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + TileEntityTelepadFake tileEntity = (TileEntityTelepadFake) worldIn.getTileEntity(pos); + return tileEntity.onActivated(playerIn); + } + + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public TileEntity createNewTileEntity(World var1, int meta) + { + return new TileEntityTelepadFake(); + } + + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + IBlockState mainBlockState = world.getBlockState(mainBlockPosition); + Block mainBlockID = mainBlockState.getBlock(); + + if (Blocks.AIR != mainBlockID) + { + return mainBlockID.getPickBlock(mainBlockState, target, world, mainBlockPosition, player); + } + } + + return ItemStack.EMPTY; + } + + @Override + public EnumFacing getBedDirection(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + IBlockState mainBlockState = world.getBlockState(mainBlockPosition); + return mainBlockState.getBlock().getBedDirection(mainBlockState, world, mainBlockPosition); + } + + return getActualState(world.getBlockState(pos), world, pos).getValue(BlockDirectional.FACING); + } + + @Override + public boolean isBed(IBlockState state, IBlockAccess world, BlockPos pos, Entity player) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + return world.getBlockState(pos).getBlock().isBed(world.getBlockState(mainBlockPosition), world, mainBlockPosition, player); + } + + return super.isBed(state, world, pos, player); + } + + @Override + public void setBedOccupied(IBlockAccess world, BlockPos pos, EntityPlayer player, boolean occupied) + { + TileEntity tileEntity = world.getTileEntity(pos); + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + world.getBlockState(pos).getBlock().setBedOccupied(world, mainBlockPosition, player, occupied); + } else + { + super.setBedOccupied(world, pos, player, occupied); + } + } + + @Override + public boolean addHitEffects(IBlockState state, World worldObj, RayTraceResult target, ParticleManager manager) + { + TileEntity tileEntity = worldObj.getTileEntity(target.getBlockPos()); + + if (tileEntity instanceof TileEntityTelepadFake) + { + BlockPos mainBlockPosition = ((TileEntityTelepadFake) tileEntity).mainBlockPosition; + + if (mainBlockPosition != null) + { + manager.addBlockHitEffects(mainBlockPosition, target); + } + } + + return super.addHitEffects(state, worldObj, target, manager); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, TOP, CONNECTABLE); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(TOP, meta % 2 == 1).withProperty(CONNECTABLE, meta > 1); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(TOP) ? 1 : 0) + (state.getValue(CONNECTABLE) ? 2 : 0); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockWalkway.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockWalkway.java new file mode 100644 index 00000000..fa6eb7ca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/blocks/BlockWalkway.java @@ -0,0 +1,291 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.blocks; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTransmitter; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAluminumWire; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidPipe; +import micdoodle8.mods.galacticraft.core.tile.TileEntityNull; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockWalkway extends BlockTransmitter implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum WALKWAY_TYPE = PropertyEnum.create("type", EnumWalkwayType.class); + protected static final AxisAlignedBB AABB_UNCONNECTED = new AxisAlignedBB(0.0, 0.32, 0.0, 1.0, 1.0, 1.0); + protected static final AxisAlignedBB AABB_CONNECTED_DOWN = new AxisAlignedBB(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + + public enum EnumWalkwayType implements IStringSerializable + { + + WALKWAY(0, "walkway"), WALKWAY_WIRE(1, "walkway_wire"), WALKWAY_PIPE(2, "walkway_pipe"); + + private final int meta; + private final String name; + + private EnumWalkwayType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumWalkwayType[] values = values(); + + public static EnumWalkwayType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + protected BlockWalkway(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setTranslationKey(assetName); + this.setSoundType(SoundType.METAL); + this.hasTileEntity = true; + this.setDefaultState(this.blockState.getBaseState().withProperty(WALKWAY_TYPE, EnumWalkwayType.WALKWAY)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + + if (state.getValue(DOWN)) + { + return AABB_CONNECTED_DOWN; + } + + return AABB_UNCONNECTED; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public boolean isNormalCube(IBlockState state) + { + return state.getMaterial().blocksMovement() && state.getBlock().isFullCube(state); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int metadata) + { + if (metadata == EnumWalkwayType.WALKWAY_PIPE.getMeta()) + { + return new TileEntityFluidPipe(); + } + + if (metadata == EnumWalkwayType.WALKWAY_WIRE.getMeta()) + { + return new TileEntityAluminumWire(2); + } + + return new TileEntityNull(); + } + + @Override + public NetworkType getNetworkType(IBlockState state) + { + if (state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY_PIPE) + { + return NetworkType.FLUID; + } + + if (state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY_PIPE) + { + return NetworkType.POWER; + } + + return null; + } + + @Override + public String getShiftDescription(int meta) + { + if (meta == EnumWalkwayType.WALKWAY.getMeta()) + { + return GCCoreUtil.translate("tile.walkway.walkway.description"); + } else if (meta == EnumWalkwayType.WALKWAY_WIRE.getMeta()) + { + return GCCoreUtil.translate("tile.walkway.walkway_wire.description"); + } else if (meta == EnumWalkwayType.WALKWAY_PIPE.getMeta()) + { + return GCCoreUtil.translate("tile.walkway.walkway_pipe.description"); + } + + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, WALKWAY_TYPE, NORTH, EAST, SOUTH, WEST, DOWN); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + Object[] connectable = new Object[EnumFacing.VALUES.length]; + + TileEntity tileEntity = null; + + if (state.getValue(WALKWAY_TYPE) != EnumWalkwayType.WALKWAY) + { + tileEntity = worldIn.getTileEntity(pos); + } + for (EnumFacing direction : EnumFacing.VALUES) + { + if (direction == EnumFacing.UP || (direction == EnumFacing.DOWN && tileEntity == null)) + { + continue; + } + + if (state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY) + { + BlockPos neighbour = pos.offset(direction); + Block block = worldIn.getBlockState(neighbour).getBlock(); + + if (block == this || block.isSideSolid(worldIn.getBlockState(neighbour), worldIn, neighbour, direction.getOpposite())) + { + connectable[direction.ordinal()] = block; + } + } else if (tileEntity != null && state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY_PIPE) + { + connectable = OxygenUtil.getAdjacentFluidConnections(tileEntity); + } else if (tileEntity != null && state.getValue(WALKWAY_TYPE) == EnumWalkwayType.WALKWAY_WIRE) + { + connectable = EnergyUtil.getAdjacentPowerConnections(tileEntity); + } + } + + return state.withProperty(NORTH, Boolean.valueOf(connectable[EnumFacing.NORTH.ordinal()] != null)).withProperty(EAST, Boolean.valueOf(connectable[EnumFacing.EAST.ordinal()] != null)) + .withProperty(SOUTH, Boolean.valueOf(connectable[EnumFacing.SOUTH.ordinal()] != null)).withProperty(WEST, Boolean.valueOf(connectable[EnumFacing.WEST.ordinal()] != null)) + .withProperty(DOWN, Boolean.valueOf(connectable[EnumFacing.DOWN.ordinal()] != null)); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(WALKWAY_TYPE, EnumWalkwayType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumWalkwayType) state.getValue(WALKWAY_TYPE)).getMeta(); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + list.add(new ItemStack(this, 1, 2)); + } + + @Override + public int damageDropped(IBlockState state) + { + return this.getMetaFromState(state); + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/FluidTexturesGC.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/FluidTexturesGC.java new file mode 100644 index 00000000..f11f3c1f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/FluidTexturesGC.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class FluidTexturesGC +{ + public static void init() + { + MinecraftForge.EVENT_BUS.register(new FluidTexturesGC()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/SkyProviderAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/SkyProviderAsteroids.java new file mode 100644 index 00000000..ed847dfe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/SkyProviderAsteroids.java @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class SkyProviderAsteroids extends IRenderHandler +{ + + private static final ResourceLocation overworldTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + private static final ResourceLocation galaxyTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/planets/galaxy.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/orbitalsun.png"); + + public int starGLCallList = GLAllocation.generateDisplayLists(3); + public int glSkyList; + public int glSkyList2; + + private float sunSize; + + public SkyProviderAsteroids(IGalacticraftWorldProvider asteroidsProvider) + { + this.sunSize = 17.5F * asteroidsProvider.getSolarSize(); + + GL11.glPushMatrix(); + GL11.glNewList(this.starGLCallList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + this.glSkyList = this.starGLCallList + 1; + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j + 0, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j + 0, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + this.glSkyList2 = this.starGLCallList + 2; + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + float var10; + float var11; + float var12; + final Tessellator var23 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var23.getBuffer(); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + GL11.glColor3f(1F, 1F, 1F); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(0, 0, 0); + GL11.glCallList(this.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.7F, 0.7F, 0.7F, 0.7F); + GL11.glCallList(this.starGLCallList); + + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + // Sun: + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + var12 = this.sunSize / 4.2F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(-var12, 90.0D, -var12).endVertex(); + worldRenderer.pos(var12, 90.0D, -var12).endVertex(); + worldRenderer.pos(var12, 90.0D, var12).endVertex(); + worldRenderer.pos(-var12, 90.0D, var12).endVertex(); + var23.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var12 = this.sunSize / 1.2F; + // 110 distance instead of the normal 100, because there is no + // atmosphere to make the disk seem larger + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderAsteroids.sunTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, 90.0D, -var12).tex(0.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 90.0D, -var12).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(var12, 90.0D, var12).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(-var12, 90.0D, var12).tex(0.0D, 1.0D).endVertex(); + var23.draw(); + + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + + // HOME: + var12 = 0.5F; + GL11.glScalef(0.6F, 0.6F, 0.6F); + GL11.glRotatef(40.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(200F, 1.0F, 0.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1F); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderAsteroids.overworldTexture); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-var12, -100.0D, var12).tex(0, 1.0).endVertex(); + worldRenderer.pos(var12, -100.0D, var12).tex(1.0, 1.0).endVertex(); + worldRenderer.pos(var12, -100.0D, -var12).tex(1.0, 0).endVertex(); + worldRenderer.pos(-var12, -100.0D, -var12).tex(0, 0).endVertex(); + var23.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + final double var25 = mc.player.getPosition().getY() - world.getHorizon(); + + GL11.glColor3f(70F / 256F, 70F / 256F, 70F / 256F); + + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random var1 = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var2.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int var3 = 0; var3 < (ConfigManagerCore.moreStars ? 35000 : 6000); ++var3) + { + double var4 = var1.nextFloat() * 2.0F - 1.0F; + double var6 = var1.nextFloat() * 2.0F - 1.0F; + double var8 = var1.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.08F + var1.nextFloat() * 0.07F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double pX = var4 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 75D + 65D : 80.0D); + final double pY = var6 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 75D + 65D : 80.0D); + final double pZ = var8 * (ConfigManagerCore.moreStars ? var1.nextDouble() * 75D + 65D : 80.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = var1.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int i = 0; i < 4; ++i) + { + final double i1 = ((i & 2) - 1) * var10; + final double i2 = ((i + 1 & 2) - 1) * var10; + final double var47 = i1 * var36 - i2 * var34; + final double var49 = i2 * var36 + i1 * var34; + final double var55 = -var47 * var30; + final double dX = var55 * var22 - var49 * var24; + final double dZ = var49 * var22 + var55 * var24; + final double dY = var47 * var28; + worldRenderer.pos(pX + dX, pY + dY, pZ + dZ).endVertex(); + } + } + } + + var2.draw(); + } + + private Vec3d getCustomSkyColor() + { + return new Vec3d(0.26796875D, 0.1796875D, 0.0D); + } + + public float getSkyBrightness(float par1) + { + final float var2 = FMLClientHandler.instance().getClient().world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.sin(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/fx/EntityFXTeleport.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/fx/EntityFXTeleport.java new file mode 100644 index 00000000..c9a00de7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/fx/EntityFXTeleport.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.fx; + +import java.lang.ref.WeakReference; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class EntityFXTeleport extends Particle +{ + + private float portalParticleScale; + private double portalPosX; + private double portalPosY; + private double portalPosZ; + private WeakReference telepad; + private boolean direction; + + public EntityFXTeleport(World par1World, Vector3 position, Vector3 motion, TileEntityShortRangeTelepad telepad, boolean direction) + { + super(par1World, position.x, position.y, position.z, motion.x, motion.y, motion.z); + this.motionX = motion.x; + this.motionY = motion.y; + this.motionZ = motion.z; + this.portalPosX = this.posX = position.x; + this.portalPosY = this.posY = position.y; + this.portalPosZ = this.posZ = position.z; + this.portalParticleScale = this.particleScale = this.rand.nextFloat() * 0.2F + 0.5F; + this.particleMaxAge = (int) (Math.random() * 10.0D) + 40; + this.canCollide = false; + this.canCollide = false; + this.setParticleTextureIndex((int) (Math.random() * 8.0D)); + this.telepad = new WeakReference(telepad); + this.direction = direction; + } + + @Override + public void renderParticle(BufferBuilder worldRenderer, Entity entity, float f0, float f1, float f2, float f3, float f4, float f5) + { + float f6 = (this.particleAge + f0) / this.particleMaxAge; + f6 = 1.0F - f6; + f6 *= f6; + f6 = 1.0F - f6; + this.particleScale = this.portalParticleScale * f6; + super.renderParticle(worldRenderer, entity, f0, f1, f2, f3, f4, f5); + } + + @Override + public int getBrightnessForRender(float par1) + { + int i = super.getBrightnessForRender(par1); + float f1 = (float) this.particleAge / (float) this.particleMaxAge; + f1 *= f1; + f1 *= f1; + int j = i & 255; + int k = i >> 16 & 255; + k += (int) (f1 * 15.0F * 16.0F); + + if (k > 240) + { + k = 240; + } + + return j | k << 16; + } + + @Override + public void onUpdate() + { + TileEntityShortRangeTelepad telepad1 = this.telepad.get(); + + if (telepad1 != null) + { + Vector3 color = telepad1.getParticleColor(this.rand, this.direction); + this.particleRed = color.floatX(); + this.particleGreen = color.floatY(); + this.particleBlue = color.floatZ(); + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + float f = (float) this.particleAge / (float) this.particleMaxAge; + float f1 = f; + f = -f + f * f * 2.0F; + f = 1.0F - f; + this.posX = this.portalPosX + this.motionX * f; + this.posY = this.portalPosY + this.motionY * f + (1.0F - f1); + this.posZ = this.portalPosZ + this.motionZ * f; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiAstroMinerDock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiAstroMinerDock.java new file mode 100644 index 00000000..f539e27d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiAstroMinerDock.java @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiCargoLoader; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerAstroMinerDock; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiAstroMinerDock extends GuiContainerGC +{ + + private static final ResourceLocation dockGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gui_astro_miner_dock.png"); + private final TileEntityMinerBase tile; + private GuiButton recallButton; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 233, (this.height - this.ySize) / 2 + 31, 10, 68, new ArrayList(), this.width, this.height, this); + private boolean extraLines; + + public GuiAstroMinerDock(InventoryPlayer playerInventory, TileEntityMinerBase dock) + { + super(new ContainerAstroMinerDock(playerInventory, dock)); + this.xSize = 256; + this.ySize = 221; + this.tile = dock; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.recallButton.enabled = true; + + if (this.tile.linkedMinerID == null) + { + this.recallButton.enabled = false; + } else + { + if (this.tile.linkedMinerDataAIState < EntityAstroMiner.AISTATE_TRAVELLING || this.tile.linkedMinerDataAIState == EntityAstroMiner.AISTATE_DOCKING) + { + this.recallButton.enabled = false; + } + } + this.recallButton.displayString = GCCoreUtil.translate("gui.button.recall.name"); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @Override + public void initGui() + { + super.initGui(); + int xPos = (this.width - this.xSize) / 2; + int yPos = (this.height - this.ySize) / 2; + List electricityDesc = new ArrayList<>(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc + .add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.tile.getEnergyStoredGC()) + " / " + (int) Math.floor(this.tile.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = xPos + 233; + this.electricInfoRegion.yPosition = yPos + 29; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList<>(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(xPos + 230, yPos + 108, 18, 18, batterySlotDesc, this.width, this.height, this)); + this.buttonList.add(this.recallButton = new GuiButton(0, xPos + 173, yPos + 195, 76, 20, GCCoreUtil.translate("gui.button.recall.name"))); + } + + @Override + protected void actionPerformed(GuiButton button) + { + if (button.enabled) + { + switch (button.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.tile.getPos(), 0})); + break; + default: + break; + } + } + } + + private String getDeltaString(int num) + { + return num > 0 ? "+" + num : "" + num; + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(this.tile.getName(), 7, 6, 4210752); + this.fontRenderer.drawString(this.getStatus(), 177, 141, 4210752); + + if (this.extraLines) + { + this.fontRenderer.drawString("\u0394x: " + this.getDeltaString(this.tile.linkedMinerDataDX), 186, 152, 2536735); + } + if (this.extraLines) + { + this.fontRenderer.drawString("\u0394y: " + this.getDeltaString(this.tile.linkedMinerDataDY), 186, 162, 2536735); + } + if (this.extraLines) + { + this.fontRenderer.drawString("\u0394z: " + this.getDeltaString(this.tile.linkedMinerDataDZ), 186, 172, 2536735); + } + if (this.extraLines) + { + this.fontRenderer.drawString(GCCoreUtil.translate("gui.miner.mined") + ": " + this.tile.linkedMinerDataCount, 177, 183, 2536735); + } + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 7, this.ySize - 92, 4210752); + } + + private String getStatus() + { + this.extraLines = false; + + switch (this.tile.linkedMinerDataAIState) + { + case -3: // no linked miner + return ""; + case -2: + return EnumColor.ORANGE + GCCoreUtil.translate("gui.miner.out_of_range"); + case EntityAstroMiner.AISTATE_OFFLINE: + return EnumColor.ORANGE + GCCoreUtil.translate("gui.miner.offline"); + case EntityAstroMiner.AISTATE_STUCK: + this.extraLines = true; + return EnumColor.RED + GCCoreUtil.translate("gui.miner.stuck"); + case EntityAstroMiner.AISTATE_ATBASE: + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.docked"); + case EntityAstroMiner.AISTATE_TRAVELLING: + this.extraLines = true; + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.travelling"); + case EntityAstroMiner.AISTATE_MINING: + this.extraLines = true; + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.mining"); + case EntityAstroMiner.AISTATE_RETURNING: + this.extraLines = true; + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.returning"); + case EntityAstroMiner.AISTATE_DOCKING: + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.miner.docking"); + } + return ""; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int xPos = (this.width - this.xSize) / 2; + int yPos = (this.height - this.ySize) / 2; + this.mc.getTextureManager().bindTexture(GuiAstroMinerDock.dockGui); + this.drawTexturedModalRect(xPos, yPos, 0, 0, this.xSize, this.ySize); + List electricityDesc = new ArrayList<>(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tile.getEnergyStoredGC(), this.tile.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + this.mc.getTextureManager().bindTexture(GuiCargoLoader.loaderTexture); + + if (this.tile.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(xPos + 233, yPos + 17, 176, 0, 11, 10); + } + + int level = Math.min(this.tile.getScaledElecticalLevel(66), 66); + this.drawColorModalRect(xPos + 234, yPos + 29 + 66 - level, 8, level, 0xc1aa24); + } + + private void drawColorModalRect(int x, int y, int width, int height, int color) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GlStateManager.enableBlend(); + GlStateManager.disableTexture2D(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer.pos(x + 0, y + height, this.zLevel).color((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, 1.0F).endVertex(); + worldRenderer.pos(x + width, y + height, this.zLevel).color((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, 1.0F).endVertex(); + worldRenderer.pos(x + width, y + 0, this.zLevel).color((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, 1.0F).endVertex(); + worldRenderer.pos(x + 0, y + 0, this.zLevel).color((color >> 16 & 255) / 255.0F, (color >> 8 & 255) / 255.0F, (color & 255) / 255.0F, 1.0F).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + GlStateManager.blendFunc(770, 771); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicAstroMiner.java new file mode 100644 index 00000000..07098bd6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicAstroMiner.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.gui; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerSchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicAstroMiner extends GuiPositionedContainer implements ISchematicResultPage +{ + + public static final ResourceLocation schematicTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_astro_miner.png"); + + private int pageIndex; + + public GuiSchematicAstroMiner(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicAstroMiner(par1InventoryPlayer, pos), pos); + this.ySize = 221; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(AsteroidsItems.astroMiner.getItemStackDisplayName(new ItemStack(AsteroidsItems.astroMiner, 1, 0)), 7, -20 + 25, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 220 - 104 + 2 - 16, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicAstroMiner.schematicTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 26, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicTier3Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicTier3Rocket.java new file mode 100644 index 00000000..9f635944 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiSchematicTier3Rocket.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.gui; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerSchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicTier3Rocket extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation tier2SchematicTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_t3.png"); + + private int pageIndex; + + public GuiSchematicTier3Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicTier3Rocket(par1InventoryPlayer, pos), pos); + this.ySize = 238; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(AsteroidsItems.tier3Rocket.getItemStackDisplayName(new ItemStack(AsteroidsItems.tier3Rocket, 1, 0)), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 220 - 104 + 2 + 27, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicTier3Rocket.tier2SchematicTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiShortRangeTelepad.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiShortRangeTelepad.java new file mode 100644 index 00000000..215fea52 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/gui/GuiShortRangeTelepad.java @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.gui; + +import com.google.common.collect.Maps; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerShortRangeTelepad; +import micdoodle8.mods.galacticraft.planets.asteroids.network.PacketSimpleAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiShortRangeTelepad extends GuiContainerGC implements ITextBoxCallback +{ + + private static final ResourceLocation launchControllerGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/short_range_telepad.png"); + + private TileEntityShortRangeTelepad telepad; + + private GuiButton enableControllerButton; + private GuiElementTextBox address; + private GuiElementTextBox targetAddress; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 52, 9, null, 0, 0, this); + + private Map cannotEditMap = Maps.newHashMap(); + + public GuiShortRangeTelepad(InventoryPlayer playerInventory, TileEntityShortRangeTelepad telepad) + { + super(new ContainerShortRangeTelepad(playerInventory, telepad, FMLClientHandler.instance().getClient().player)); + this.ySize = 209; + this.telepad = telepad; + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + if (this.telepad.disableCooldown > 0) + { + this.enableControllerButton.enabled = false; + } else + { + this.enableControllerButton.enabled = true; + } + + this.enableControllerButton.displayString = this.telepad.getDisabled(0) ? GCCoreUtil.translate("gui.button.enable.name") : GCCoreUtil.translate("gui.button.disable.name"); + + super.drawScreen(par1, par2, par3); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (keyID != Keyboard.KEY_ESCAPE && keyID != this.mc.gameSettings.keyBindInventory.getKeyCode()) + { + if (this.address.keyTyped(keyChar, keyID)) + { + return; + } + + if (this.targetAddress.keyTyped(keyChar, keyID)) + { + return; + } + } + + super.keyTyped(keyChar, keyID); + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.enableControllerButton = new GuiButton(0, var5 + 70 + 124 - 72, var6 + 16, 48, 20, GCCoreUtil.translate("gui.button.enable.name")); + this.address = new GuiElementTextBox(1, this, var5 + 66, var6 + 16, 48, 20, "", true, 6, false); + this.targetAddress = new GuiElementTextBox(2, this, var5 + 122, var6 + 16 + 22, 48, 20, "", true, 6, false); + this.buttonList.add(this.enableControllerButton); + this.buttonList.add(this.address); + this.buttonList.add(this.targetAddress); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 98; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 113; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 104, 18, 18, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.telepad.desc.0")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 5, (this.height - this.ySize) / 2 + 20, 59, 13, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.telepad.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 5, (this.height - this.ySize) / 2 + 42, 117, 13, batterySlotDesc, this.width, this.height, this)); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.telepad.getPos(), 0})); + break; + default: + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = this.telepad.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, 4210752); + + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 115, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.address.name") + ":", 7, 22, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.dest_address.name") + ":", 7, 44, 4210752); + this.fontRenderer.drawString(this.telepad.getReceivingStatus(), 7, 66, 4210752); + if (!this.telepad.getReceivingStatus().equals(this.telepad.getSendingStatus())) + { + this.fontRenderer.drawString(this.telepad.getSendingStatus(), 7, 88, 4210752); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiShortRangeTelepad.launchControllerGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.telepad.getEnergyStoredGC(), this.telepad.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (this.telepad.getEnergyStoredGC() > 0) + { + int scale = this.telepad.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 99, var6 + 114, 176, 0, Math.min(scale, 54), 7); + } + + GL11.glPopMatrix(); + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.telepad.getOwner()); + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + if (textBox.equals(this.address)) + { + this.telepad.address = textBox.getIntegerValue(); + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleAsteroids(PacketSimpleAsteroids.EnumSimplePacketAsteroids.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {0, this.telepad.getPos(), this.telepad.address})); + } else if (textBox.equals(this.targetAddress)) + { + this.telepad.targetAddress = textBox.getIntegerValue(); + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleAsteroids(PacketSimpleAsteroids.EnumSimplePacketAsteroids.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {1, this.telepad.getPos(), this.telepad.targetAddress})); + } + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + if (textBox.equals(this.address)) + { + return String.valueOf(this.telepad.address); + } else if (textBox.equals(this.targetAddress)) + { + return String.valueOf(this.telepad.targetAddress); + } + + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + if (textBox.equals(this.address)) + { + return this.telepad.addressValid ? ColorUtil.to32BitColor(255, 20, 255, 20) : ColorUtil.to32BitColor(255, 255, 25, 25); + } else if (textBox.equals(this.targetAddress)) + { + if (this.telepad.targetAddressResult == TileEntityShortRangeTelepad.EnumTelepadSearchResult.VALID) + { + return ColorUtil.to32BitColor(255, 20, 255, 20); + } else if (this.telepad.targetAddressResult == TileEntityShortRangeTelepad.EnumTelepadSearchResult.TARGET_DISABLED) + { + return ColorUtil.to32BitColor(255, 255, 170, 25); + } else + { + return ColorUtil.to32BitColor(255, 255, 25, 25); + } + } + + return 0; + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + this.cannotEditMap.put(textBox.id, 50); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/GalacticraftAsteroidsJEI.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/GalacticraftAsteroidsJEI.java new file mode 100644 index 00000000..685e0236 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/GalacticraftAsteroidsJEI.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei; + +import javax.annotation.Nonnull; +import mezz.jei.api.BlankModPlugin; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.IModRegistry; +import mezz.jei.api.JEIPlugin; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer.AstroMinerRecipeCategory; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer.AstroMinerRecipeWrapper; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket.Tier3RocketRecipeCategory; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket.Tier3RocketRecipeMaker; +import micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket.Tier3RocketRecipeWrapper; +import net.minecraft.item.ItemStack; + +@JEIPlugin +public class GalacticraftAsteroidsJEI extends BlankModPlugin +{ + + @Override + public void register(@Nonnull IModRegistry registry) + { + registry.handleRecipes(INasaWorkbenchRecipe.class, Tier3RocketRecipeWrapper::new, RecipeCategories.ROCKET_T3_ID); + registry.handleRecipes(INasaWorkbenchRecipe.class, AstroMinerRecipeWrapper::new, RecipeCategories.ASTRO_MINER_ID); + + registry.addRecipes(Tier3RocketRecipeMaker.getRecipesList(), RecipeCategories.ROCKET_T3_ID); + registry.addRecipes(GalacticraftRegistry.getAstroMinerRecipes(), RecipeCategories.ASTRO_MINER_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.nasaWorkbench), RecipeCategories.ROCKET_T3_ID, RecipeCategories.ASTRO_MINER_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.compactNasaWorkbench), RecipeCategories.ROCKET_T3_ID, RecipeCategories.ASTRO_MINER_ID); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registry) + { + IGuiHelper guiHelper = registry.getJeiHelpers().getGuiHelper(); + registry.addRecipeCategories(new Tier3RocketRecipeCategory(guiHelper), new AstroMinerRecipeCategory(guiHelper)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeCategory.java new file mode 100644 index 00000000..e29eb0cd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeCategory.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.util.ResourceLocation; + +public class AstroMinerRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation astroMinerGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_astro_miner.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public AstroMinerRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(astroMinerGuiTexture, 3, 39, 168, 91); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ASTRO_MINER_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 23, 21); + itemstacks.init(1, true, 41, 21); + itemstacks.init(2, true, 59, 21); + itemstacks.init(3, true, 77, 21); + itemstacks.init(4, true, 12, 39); + itemstacks.init(5, true, 30, 39); + itemstacks.init(6, true, 48, 39); + itemstacks.init(7, true, 66, 39); + itemstacks.init(8, true, 84, 39); + itemstacks.init(9, true, 40, 57); + itemstacks.init(10, true, 58, 57); + itemstacks.init(11, true, 76, 57); + itemstacks.init(12, true, 4, 63); + itemstacks.init(13, true, 22, 63); + itemstacks.init(14, false, 138, 58); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeMaker.java new file mode 100644 index 00000000..5acf085a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeMaker.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; + +public class AstroMinerRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getAstroMinerRecipes()) + { + AstroMinerRecipeWrapper wrapper = new AstroMinerRecipeWrapper(recipe); + recipes.add(wrapper); + } + + return recipes; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeWrapper.java new file mode 100644 index 00000000..0a5e02d1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/astrominer/AstroMinerRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.astrominer; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class AstroMinerRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public AstroMinerRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(this.recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeCategory.java new file mode 100644 index 00000000..58394d62 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeCategory.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.util.ResourceLocation; + +public class Tier3RocketRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation rocketGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_t3_recipe.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public Tier3RocketRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(rocketGuiTexture, 0, 0, 168, 126); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ROCKET_T3_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 44, 0); + itemstacks.init(1, true, 35, 18); + itemstacks.init(2, true, 35, 36); + itemstacks.init(3, true, 35, 54); + itemstacks.init(4, true, 35, 72); + itemstacks.init(5, true, 35, 90); + itemstacks.init(6, true, 53, 18); + itemstacks.init(7, true, 53, 36); + itemstacks.init(8, true, 53, 54); + itemstacks.init(9, true, 53, 72); + itemstacks.init(10, true, 53, 90); + itemstacks.init(11, true, 17, 72); // Booster left + itemstacks.init(12, true, 17, 90); + itemstacks.init(13, true, 71, 90); + itemstacks.init(14, true, 44, 108); // Rocket + itemstacks.init(15, true, 71, 72); // Booster right + itemstacks.init(16, true, 17, 108); + itemstacks.init(17, true, 71, 108); + itemstacks.init(18, true, 89, 7); + itemstacks.init(19, true, 115, 7); + itemstacks.init(20, true, 141, 7); + itemstacks.init(21, false, 138, 95); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeMaker.java new file mode 100644 index 00000000..9223bdd7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeMaker.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeMaker; + +public class Tier3RocketRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT3Recipes()) + { + int chests = Tier1RocketRecipeMaker.countChests(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeWrapper.java new file mode 100644 index 00000000..bd34f963 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/jei/tier3rocket/Tier3RocketRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.jei.tier3rocket; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class Tier3RocketRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public Tier3RocketRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(this.recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/NetworkRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/NetworkRenderer.java new file mode 100644 index 00000000..7185c78d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/NetworkRenderer.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamOutput; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class NetworkRenderer +{ + + public static void renderNetworks(World world, float partialTicks) + { + List nodes = new ArrayList(); + + for (Object o : new ArrayList(world.loadedTileEntityList)) + { + if (o instanceof TileEntityBeamOutput) + { + nodes.add((TileEntityBeamOutput) o); + } + } + + if (nodes.isEmpty()) + { + return; + } + + Tessellator tess = Tessellator.getInstance(); + EntityPlayerSP player = FMLClientHandler.instance().getClient().player; + double interpPosX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; + double interpPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; + double interpPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; + + GL11.glDisable(GL11.GL_TEXTURE_2D); + + for (TileEntityBeamOutput tileEntity : nodes) + { + if (tileEntity.getTarget() == null) + { + continue; + } + + GL11.glPushMatrix(); + + Vector3 outputPoint = tileEntity.getOutputPoint(true); + Vector3 targetInputPoint = tileEntity.getTarget().getInputPoint(); + + Vector3 direction = Vector3.subtract(outputPoint, targetInputPoint); + float directionLength = (float) direction.getMagnitude(); + + float posX = (float) (tileEntity.getPos().getX() - interpPosX); + float posY = (float) (tileEntity.getPos().getY() - interpPosY); + float posZ = (float) (tileEntity.getPos().getZ() - interpPosZ); + GL11.glTranslatef(posX, posY, posZ); + + GL11.glTranslatef(outputPoint.floatX() - tileEntity.getPos().getX(), outputPoint.floatY() - tileEntity.getPos().getY(), outputPoint.floatZ() - tileEntity.getPos().getZ()); + GL11.glRotatef(tileEntity.yaw + 180, 0, 1, 0); + GL11.glRotatef(-tileEntity.pitch, 1, 0, 0); + GL11.glRotatef(tileEntity.ticks * 10, 0, 0, 1); + + tess.getBuffer().begin(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR); + + for (EnumFacing dir : EnumFacing.VALUES) + { + tess.getBuffer().pos(dir.getXOffset() / 40.0F, dir.getYOffset() / 40.0F, dir.getZOffset() / 40.0F) + .color(tileEntity.getColor().floatX(), tileEntity.getColor().floatY(), tileEntity.getColor().floatZ(), 1.0F).endVertex(); + tess.getBuffer().pos(dir.getXOffset() / 40.0F, dir.getYOffset() / 40.0F, directionLength + dir.getZOffset() / 40.0F) + .color(tileEntity.getColor().floatX(), tileEntity.getColor().floatY(), tileEntity.getColor().floatZ(), 1.0F).endVertex(); + } + + tess.draw(); + + GL11.glPopMatrix(); + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glColor4f(1, 1, 1, 1); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderAstroMiner.java new file mode 100644 index 00000000..1c3cd8ad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderAstroMiner.java @@ -0,0 +1,601 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import java.util.ArrayList; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; +import micdoodle8.mods.galacticraft.core.perlin.generator.Gradient; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class RenderAstroMiner extends Render +{ + + private static final float LSIZE = 0.12F; + private static final float RETRACTIONSPEED = 0.02F; + private float lastPartTime; + + public static ResourceLocation scanTexture; + private OBJModel.OBJBakedModel mainModel; + private OBJModel.OBJBakedModel hoverPadMain; + private OBJModel.OBJBakedModel hoverPadGlow; + private OBJModel.OBJBakedModel mainModelInactive; + private OBJModel.OBJBakedModel modellaser1; + private OBJModel.OBJBakedModel modellaser3; + private OBJModel.OBJBakedModel modellasergl; + + private final NoiseModule wobbleX; + private final NoiseModule wobbleY; + private final NoiseModule wobbleZ; + private final NoiseModule wobbleXX; + private final NoiseModule wobbleYY; + private final NoiseModule wobbleZZ; + + private void updateModels() + { + if (this.mainModel == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "astro_miner_full.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + this.mainModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Hull", "Lasers"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.hoverPadMain = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("HoverPad"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.hoverPadGlow = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Glow"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.modellaser1 = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main_Laser_Front"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.modellaser3 = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main_Laser_Center"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.modellasergl = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main_Laser_Left_Guard"), false), DefaultVertexFormats.ITEM, spriteFunction); + + model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "astro_miner_full_off.obj")); + this.mainModelInactive = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Hull", "Lasers", "HoverPad"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + static + { + scanTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/misc/gradient.png"); + } + + public RenderAstroMiner(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 2F; + + Random rand = new Random(); + this.wobbleX = new Gradient(rand.nextLong(), 2, 1); + this.wobbleX.amplitude = 0.5F; + this.wobbleX.frequencyX = 0.025F; + + this.wobbleY = new Gradient(rand.nextLong(), 2, 1); + this.wobbleY.amplitude = 0.6F; + this.wobbleY.frequencyX = 0.025F; + + this.wobbleZ = new Gradient(rand.nextLong(), 2, 1); + this.wobbleZ.amplitude = 0.1F; + this.wobbleZ.frequencyX = 0.025F; + + this.wobbleXX = new Gradient(rand.nextLong(), 2, 1); + this.wobbleXX.amplitude = 0.1F; + this.wobbleXX.frequencyX = 0.8F; + + this.wobbleYY = new Gradient(rand.nextLong(), 2, 1); + this.wobbleYY.amplitude = 0.15F; + this.wobbleYY.frequencyX = 0.8F; + + this.wobbleZZ = new Gradient(rand.nextLong(), 2, 1); + this.wobbleZZ.amplitude = 0.04F; + this.wobbleZZ.frequencyX = 0.8F; + } + + @Override + public void doRender(EntityAstroMiner astroMiner, double x, double y, double z, float f, float partialTickTime) + { + int ais = astroMiner.AIstate; + boolean active = ais > EntityAstroMiner.AISTATE_ATBASE; + float time = astroMiner.ticksExisted + partialTickTime; + float sinOfTheTime = (MathHelper.sin(time / 4) + 1F) / 4F + 0.5F; + float wx = active ? this.wobbleX.getNoise(time) + this.wobbleXX.getNoise(time) : 0F; + float wy = active ? this.wobbleY.getNoise(time) + this.wobbleYY.getNoise(time) : 0F; + float wz = active ? this.wobbleZ.getNoise(time) + this.wobbleZZ.getNoise(time) : 0F; + float partTime = partialTickTime - this.lastPartTime; + this.lastPartTime = partialTickTime; + + while (partTime < 0) + { + partTime += 1F; + } + + this.updateModels(); + this.bindEntityTexture(astroMiner); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + + final float rotPitch = astroMiner.prevRotationPitch + (astroMiner.rotationPitch - astroMiner.prevRotationPitch) * partialTickTime; + final float rotYaw = astroMiner.prevRotationYaw + (astroMiner.rotationYaw - astroMiner.prevRotationYaw) * partialTickTime; + + GlStateManager.translate((float) x, (float) y + 1.4F, (float) z); + float partBlock; + + switch (astroMiner.facing) + { + case DOWN: + partBlock = (float) (astroMiner.posY % 2D); + break; + case UP: + partBlock = 1F - (float) (astroMiner.posY % 2D); + break; + case NORTH: + partBlock = (float) (astroMiner.posZ % 2D); + break; + case SOUTH: + partBlock = 1F - (float) (astroMiner.posZ % 2D); + break; + case WEST: + partBlock = (float) (astroMiner.posX % 2D); + break; + case EAST: + partBlock = 1F - (float) (astroMiner.posX % 2D); + break; + default: + partBlock = 0F; + } + partBlock /= 0.06F; + + GlStateManager.rotate(rotYaw + 180F, 0, 1, 0); + + if (rotPitch != 0F) + { + GlStateManager.translate(-0.65F, -0.65F, 0); + GlStateManager.rotate(rotPitch / 4F, 1, 0, 0); + GlStateManager.translate(0.65F, 0.65F, 0); + } + + GlStateManager.translate(0F, -0.42F, 0.28F); + GlStateManager.scale(0.0495F, 0.0495F, 0.0495F); + GlStateManager.translate(wx, wy, wz); + + if (active) + { + ClientUtil.drawBakedModel(this.mainModel); + this.renderLaserModel(astroMiner.retraction); + + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GlStateManager.disableLighting(); + GlStateManager.color(sinOfTheTime, sinOfTheTime, sinOfTheTime, 1.0F); + ClientUtil.drawBakedModel(this.hoverPadMain); + + GlStateManager.disableCull(); + GlStateManager.disableAlpha(); + GlStateManager.depthMask(false); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GlStateManager.enableBlend(); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GlStateManager.color(sinOfTheTime, sinOfTheTime, sinOfTheTime, 0.6F); + ClientUtil.drawBakedModel(this.hoverPadGlow); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); + + if (ais < EntityAstroMiner.AISTATE_DOCKING) + { + // This is the scanning lasers: + FMLClientHandler.instance().getClient().renderEngine.bindTexture(scanTexture); + final Tessellator tess = Tessellator.getInstance(); + GlStateManager.color(0, 0.6F, 1.0F, 0.2F); + BufferBuilder worldRenderer = tess.getBuffer(); + float scanProgress = (MathHelper.cos(partBlock * 0.012F * 6.283F)) * 0.747F; + float scanAngle = 0.69866F - scanProgress * scanProgress; + float scanEndX = 38.77F * MathHelper.sin(scanAngle); + float scanEndY = 32F; + float scanEndZ = 38.77F * MathHelper.cos(scanAngle); + scanEndZ += 20F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(15.6F, -0.6F, -20F).tex(0D, 0D).endVertex(); + worldRenderer.pos(15.6F + scanEndX, scanEndY - 0.6F, -scanEndZ).tex(1D, 0D).endVertex(); + worldRenderer.pos(15.6F + scanEndX, -0.6F - scanEndY, -scanEndZ).tex(1D, 1D).endVertex(); + worldRenderer.pos(15.6F, -0.7F, -20F).tex(0D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-15.6F, -0.6F, -20F).tex(0D, 0D).endVertex(); + worldRenderer.pos(-15.6F - scanEndX, scanEndY - 0.6F, -scanEndZ).tex(1D, 0D).endVertex(); + worldRenderer.pos(-15.6F - scanEndX, -0.6F - scanEndY, -scanEndZ).tex(1D, 1D).endVertex(); + worldRenderer.pos(-15.6F, -0.7F, -20F).tex(0D, 1D).endVertex(); + tess.draw(); + + int removeCount = 0; + int afterglowCount = 0; + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) (x - astroMiner.posX), (float) (y - astroMiner.posY), (float) (z - astroMiner.posZ)); + + for (Integer blockTime : new ArrayList(astroMiner.laserTimes)) + { + if (blockTime < astroMiner.ticksExisted - 19) + { + removeCount++; + } else if (blockTime < astroMiner.ticksExisted - 3) + { + afterglowCount++; + } + } + if (removeCount > 0) + { + astroMiner.removeLaserBlocks(removeCount); + } + int count = 0; + for (BlockVec3 blockLaser : new ArrayList(astroMiner.laserBlocks)) + { + if (count < afterglowCount) + { + int fade = astroMiner.ticksExisted - astroMiner.laserTimes.get(count) - 8; + if (fade < 0) + { + fade = 0; + } + this.doAfterGlow(blockLaser, fade); + } else + { + this.doLaser(astroMiner, blockLaser); + } + count++; + } + if (astroMiner.retraction > 0F) + { + astroMiner.retraction -= RETRACTIONSPEED * partTime; + if (astroMiner.retraction < 0F) + { + astroMiner.retraction = 0F; + } + } + GlStateManager.popMatrix(); + } else + { + if (astroMiner.retraction < 1F) + { + astroMiner.retraction += RETRACTIONSPEED * partTime; + if (astroMiner.retraction > 1F) + { + astroMiner.retraction = 1F; + } + } + GlStateManager.popMatrix(); + } + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.enableCull(); + GlStateManager.enableAlpha(); + GlStateManager.enableLighting(); + GlStateManager.depthMask(true); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + } else + { + this.bindEntityTexture(astroMiner); + ClientUtil.drawBakedModel(this.mainModelInactive); + this.renderLaserModel(astroMiner.retraction); + if (astroMiner.retraction < 1F) + { + astroMiner.retraction += RETRACTIONSPEED * partTime; + if (astroMiner.retraction > 1F) + { + astroMiner.retraction = 1F; + } + } + GlStateManager.popMatrix(); + } + } + + private void doAfterGlow(BlockVec3 blockLaser, int level) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(blockLaser.x, blockLaser.y, blockLaser.z); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(1.0F, 0.7F, 0.7F, 0.016667F * (12 - level)); + float cA = -0.01F; + float cB = 1.01F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cB, cA).tex(0D, 1D).endVertex(); + worldRenderer.pos(cB, cB, cA).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cB, cB).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cB).tex(0D, 0D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(cA, cA, cB).tex(0D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cB).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cA).tex(1D, 0D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cB).tex(0D, 1D).endVertex(); + worldRenderer.pos(cA, cA, cB).tex(1D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cB, cA, cA).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cB).tex(1D, 0D).endVertex(); + worldRenderer.pos(cB, cB, cB).tex(0D, 0D).endVertex(); + worldRenderer.pos(cB, cB, cA).tex(0D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(1D, 0D).endVertex(); + worldRenderer.pos(1F, cA, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(1F, 1F, cA).tex(0D, 1D).endVertex(); + worldRenderer.pos(cA, 1F, cA).tex(1D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(1F, cA, 1F).tex(1D, 1D).endVertex(); + worldRenderer.pos(cA, cA, 1F).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, 1F, 1F).tex(0D, 0D).endVertex(); + worldRenderer.pos(1F, 1F, 1F).tex(0D, 1D).endVertex(); + tess.draw(); + GlStateManager.popMatrix(); + } + + private void doLaser(EntityAstroMiner entity, BlockVec3 blockLaser) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(blockLaser.x, blockLaser.y, blockLaser.z); + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + GlStateManager.color(1.0F, 0.7F, 0.7F, 0.2F); + float cA = -0.01F; + float cB = 1.01F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cB, cA).tex(0D, 1D).endVertex(); + worldRenderer.pos(cB, cB, cA).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cB, cB).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cB).tex(0D, 0D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(cA, cA, cB).tex(0D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cB).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cA).tex(1D, 0D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(cA, cB, cB).tex(0D, 1D).endVertex(); + worldRenderer.pos(cA, cA, cB).tex(1D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cB, cA, cA).tex(1D, 1D).endVertex(); + worldRenderer.pos(cB, cA, cB).tex(1D, 0D).endVertex(); + worldRenderer.pos(cB, cB, cB).tex(0D, 0D).endVertex(); + worldRenderer.pos(cB, cB, cA).tex(0D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(cA, cA, cA).tex(1D, 0D).endVertex(); + worldRenderer.pos(1F, cA, cA).tex(0D, 0D).endVertex(); + worldRenderer.pos(1F, 1F, cA).tex(0D, 1D).endVertex(); + worldRenderer.pos(cA, 1F, cA).tex(1D, 1D).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(1F, cA, 1F).tex(1D, 1D).endVertex(); + worldRenderer.pos(cA, cA, 1F).tex(1D, 0D).endVertex(); + worldRenderer.pos(cA, 1F, 1F).tex(0D, 0D).endVertex(); + worldRenderer.pos(1F, 1F, 1F).tex(0D, 1D).endVertex(); + tess.draw(); + + GlStateManager.color(1.0F, 0.79F, 0.79F, 0.17F); + float bb = 1.7F; + float cc = 0.4F; + float radiansYaw = entity.rotationYaw / Constants.RADIANS_TO_DEGREES; + float radiansPitch = entity.rotationPitch / Constants.RADIANS_TO_DEGREES / 4F; + float mainLaserX = bb * MathHelper.sin(radiansYaw) * MathHelper.cos(radiansPitch); + float mainLaserY = cc + bb * MathHelper.sin(radiansPitch); + float mainLaserZ = bb * MathHelper.cos(radiansYaw) * MathHelper.cos(radiansPitch); + + mainLaserX += entity.posX - blockLaser.x; + mainLaserY += entity.posY - blockLaser.y; + mainLaserZ += entity.posZ - blockLaser.z; + + float xD = mainLaserX - 0.5F; + float yD = mainLaserY - 0.5F; + float zD = mainLaserZ - 0.5F; + float xx, yy, zz; + + if (entity.facing.getIndex() > EnumFacing.SOUTH.getIndex()) + { + xx = xD < 0 ? cA : cB; + this.drawLaserX(mainLaserX, mainLaserY, mainLaserZ, xx, 0.5F, 0.5F); + } else if (entity.facing.getIndex() <= EnumFacing.UP.getIndex()) + { + yy = yD < 0 ? cA : cB; + this.drawLaserY(mainLaserX, mainLaserY, mainLaserZ, 0.5F, yy, 0.5F); + } else + { + zz = zD < 0 ? cA : cB; + this.drawLaserZ(mainLaserX, mainLaserY, mainLaserZ, 0.5F, 0.5F, zz); + } + + GlStateManager.popMatrix(); + } + + private void drawLaserX(float x1, float y1, float z1, float x2, float y2, float z2) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 - 0.01F, z1 - 0.01F).endVertex(); + worldRenderer.pos(x2, y2 - LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1, y1 + 0.01F, z1 - 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 - 0.01F, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2, y2 - LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x1, y1 + 0.01F, z1 + 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 - 0.01F, z1 - 0.01F).endVertex(); + worldRenderer.pos(x2, y2 - LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x2, y2 - LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x1, y1 - 0.01F, z1 + 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 + 0.01F, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1, y1 + 0.01F, z1 - 0.01F).endVertex(); + tess.draw(); + } + + private void drawLaserY(float x1, float y1, float z1, float x2, float y2, float z2) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1, z1 - 0.01F).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2, z2 - LSIZE).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1, z1 - 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2, z2 + LSIZE).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1, z1 + 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1, z1 - 0.01F).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2, z2 - LSIZE).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2, z2 + LSIZE).endVertex(); + worldRenderer.pos(x1 - 0.01F, y1, z1 + 0.01F).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 + 0.01F, y1, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1, z1 - 0.01F).endVertex(); + tess.draw(); + } + + private void drawLaserZ(float x1, float y1, float z1, float x2, float y2, float z2) + { + final Tessellator tess = Tessellator.getInstance(); + BufferBuilder worldRenderer = tess.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1 - 0.01F, z1).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2 - LSIZE, z2).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2 + LSIZE, z2).endVertex(); + worldRenderer.pos(x1 - 0.01F, y1 + 0.01F, z1).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 + 0.01F, y1 - 0.01F, z1).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2 - LSIZE, z2).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2 + LSIZE, z2).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1 + 0.01F, z1).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1 - 0.01F, y1 - 0.01F, z1).endVertex(); + worldRenderer.pos(x2 - LSIZE, y2 - LSIZE, z2).endVertex(); + worldRenderer.pos(x2 + LSIZE, y2 - LSIZE, z2).endVertex(); + worldRenderer.pos(x1 + 0.01F, y1 - 0.01F, z1).endVertex(); + tess.draw(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(x1, y1 + 0.01F, z1 + 0.01F).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 + LSIZE).endVertex(); + worldRenderer.pos(x2, y2 + LSIZE, z2 - LSIZE).endVertex(); + worldRenderer.pos(x1, y1 + 0.01F, z1 - 0.01F).endVertex(); + tess.draw(); + } + + private void renderLaserModel(float retraction) + { + float laserretraction = retraction / 0.8F; + if (laserretraction > 1F) + { + laserretraction = 1F; + } + float guardmovement = (retraction - 0.6F) / 0.4F * 1.875F; + if (guardmovement < 0F) + { + guardmovement = 0F; + } + GlStateManager.pushMatrix(); + float zadjust = laserretraction * 5F; + float yadjust = zadjust; + + if (yadjust > 0.938F) + { + yadjust = 0.938F; + zadjust = (zadjust - yadjust) * 2.5F + yadjust; + } + GlStateManager.translate(0F, yadjust, zadjust); + ClientUtil.drawBakedModel(this.modellaser1); + if (yadjust == 0.938F) + { + // Do not move laser centre into body + GlStateManager.translate(0F, 0F, -zadjust + 0.938F); + } + ClientUtil.drawBakedModel(this.modellaser3); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.translate(guardmovement, 0F, 0F); + ClientUtil.drawBakedModel(this.modellasergl); + GlStateManager.translate(-2 * guardmovement + 8.75F, 0F, 0F); + ClientUtil.drawBakedModel(this.modellasergl); + GlStateManager.popMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityAstroMiner entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public boolean shouldRender(EntityAstroMiner miner, ICamera camera, double camX, double camY, double camZ) + { + return miner.isInRangeToRender3d(camX, camY, camZ); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderEntryPod.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderEntryPod.java new file mode 100644 index 00000000..9b43f2be --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderEntryPod.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import org.lwjgl.opengl.GL11; + +public class RenderEntryPod extends Render +{ + + private IBakedModel modelEntryPod; + + public RenderEntryPod(RenderManager manager) + { + super(manager); + } + + private void updateModels() + { + if (this.modelEntryPod == null) + { + try + { + this.modelEntryPod = ClientUtil.modelFromOBJ(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "pod.obj"), ImmutableList.of("PodBody")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void doRender(EntityEntryPod entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + float yaw = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F - pitch, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(-yaw, 0.0F, 1.0F, 0.0F); + + this.updateModels(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.65F, 0.6F, 0.65F); + ClientUtil.drawBakedModel(this.modelEntryPod); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEntryPod entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public boolean shouldRender(EntityEntryPod lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(1D, 2D, 1D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderGrapple.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderGrapple.java new file mode 100644 index 00000000..72fe72d1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderGrapple.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import com.google.common.base.Function; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderGrapple extends Render +{ + + private ItemModelGrapple grappleModel; + + public RenderGrapple(RenderManager manager) + { + super(manager); + } + + private void updateModel() + { + if (grappleModel == null) + { + Function TEXTUREGETTER = input -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(input.toString()); + + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "grapple", "inventory"); + grappleModel = (ItemModelGrapple) FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().getModelManager().getModel(modelResourceLocation); + } + } + + @Override + public void doRender(EntityGrapple grapple, double x, double y, double z, float par8, float partialTicks) + { + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPushMatrix(); + + Vec3d vec3 = new Vec3d(0.0D, -0.2D, 0.0D); + EntityPlayer shootingEntity = grapple.getShootingEntity(); + + if (shootingEntity != null && grapple.getPullingEntity()) + { + double d3 = shootingEntity.prevPosX + (shootingEntity.posX - shootingEntity.prevPosX) * partialTicks + vec3.x; + double d4 = shootingEntity.prevPosY + (shootingEntity.posY - shootingEntity.prevPosY) * partialTicks + vec3.y; + double d5 = shootingEntity.prevPosZ + (shootingEntity.posZ - shootingEntity.prevPosZ) * partialTicks + vec3.z; + + Tessellator tessellator = Tessellator.getInstance(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + tessellator.getBuffer().begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR); + byte b2 = 16; + + double d14 = grapple.prevPosX + (grapple.posX - grapple.prevPosX) * partialTicks; + double d8 = grapple.prevPosY + (grapple.posY - grapple.prevPosY) * partialTicks + 0.25D; + double d10 = grapple.prevPosZ + (grapple.posZ - grapple.prevPosZ) * partialTicks; + double d11 = (float) (d3 - d14); + double d12 = (float) (d4 - d8); + double d13 = (float) (d5 - d10); + tessellator.getBuffer().setTranslation(0, -0.2F, 0); + + for (int i = 0; i <= b2; ++i) + { + float f12 = (float) i / (float) b2; + tessellator.getBuffer().pos(x + d11 * f12, y + d12 * (f12 * f12 + f12) * 0.5D + 0.15D, z + d13 * f12).color(203.0F / 255.0F, 203.0F / 255.0F, 192.0F / 255.0F, 1.0F).endVertex(); + } + + tessellator.draw(); + tessellator.getBuffer().setTranslation(0, 0, 0); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + GL11.glTranslatef((float) x, (float) y, (float) z); + GL11.glRotatef(grapple.prevRotationYaw + (grapple.rotationYaw - grapple.prevRotationYaw) * partialTicks - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(grapple.prevRotationPitch + (grapple.rotationPitch - grapple.prevRotationPitch) * partialTicks - 180, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(grapple.prevRotationRoll + (grapple.rotationRoll - grapple.prevRotationRoll) * partialTicks, 1.0F, 0.0F, 0.0F); + + updateModel(); + + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + ClientUtil.drawBakedModel(grappleModel); + +// this.bindEntityTexture(grapple); +// ItemRendererGrappleHook.modelGrapple.renderAll(); TODO + + GL11.glPopMatrix(); + } + +// protected ResourceLocation getEntityTexture(EntityGrapple grapple) +// { +//// return ItemRendererGrappleHook.grappleTexture; +// } + + @Override + protected ResourceLocation getEntityTexture(EntityGrapple entity) + { + return new ResourceLocation("missing"); + } + + @Override + public boolean shouldRender(EntityGrapple entity, ICamera camera, double camX, double camY, double camZ) + { + return entity.isInRangeToRender3d(camX, camY, camZ); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderSmallAsteroid.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderSmallAsteroid.java new file mode 100644 index 00000000..d38139ab --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderSmallAsteroid.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import static micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockBasicAsteroids.EnumBlockBasic.ASTEROID_0; + +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockBasicAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntitySmallAsteroid; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderSmallAsteroid extends Render +{ + + public RenderSmallAsteroid(RenderManager manager) + { + super(manager); + } + + @Override + public void doRender(EntitySmallAsteroid asteroid, double x, double y, double z, float f, float partialTickTime) + { + BlockRendererDispatcher dispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + + GL11.glPushMatrix(); + GL11.glTranslatef((float) x, (float) y + 0.5F, (float) z); + GL11.glRotatef(asteroid.rotationPitch, 1, 0, 0); + GL11.glRotatef(asteroid.rotationYaw, 0, 1, 0); + + this.bindEntityTexture(asteroid); + dispatcher.renderBlockBrightness(AsteroidBlocks.blockBasic.getDefaultState().withProperty(BlockBasicAsteroids.BASIC_TYPE, ASTEROID_0), 1.0F); + + GL11.glPopMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(EntitySmallAsteroid entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderTier3Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderTier3Rocket.java new file mode 100644 index 00000000..11778e2e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/entity/RenderTier3Rocket.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.entity; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import java.io.IOException; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityTier3Rocket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderTier3Rocket extends Render +{ + + private OBJModel.OBJBakedModel rocketModel; + private OBJModel.OBJBakedModel coneModel; + private OBJModel.OBJBakedModel cubeModel; + + public RenderTier3Rocket(RenderManager manager) + { + super(manager); + this.shadowSize = 2F; + } + + private void updateModel() + { + if (this.rocketModel == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "tier3rocket.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + this.rocketModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Boosters", "Rocket"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.coneModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("NoseCone"), false), DefaultVertexFormats.ITEM, spriteFunction); + this.cubeModel = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Cube"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (IOException e) + { + throw new RuntimeException(e); + } + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityTier3Rocket entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityTier3Rocket entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks + 180; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-pitch, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, entity.getRenderOffsetY(), 0.0F); + float rollAmplitude = entity.rollAmplitude / 3 - partialTicks; + + if (rollAmplitude > 0.0F) + { + final float i = entity.getLaunched() ? (5 - MathHelper.floor(entity.timeUntilLaunch / 85)) / 10F : 0.3F; + GlStateManager.rotate(MathHelper.sin(rollAmplitude) * rollAmplitude * i * partialTicks, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(MathHelper.sin(rollAmplitude) * rollAmplitude * i * partialTicks, 1.0F, 0.0F, 1.0F); + } + + this.updateModel(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.8F, 0.8F, 0.8F); + ClientUtil.drawBakedModel(this.rocketModel); + + Vector3 teamColor = ClientUtil.updateTeamColor(PlayerUtil.getName(FMLClientHandler.instance().getClient().player), true); + + if (teamColor != null) + { + int color = ColorUtil.to32BitColor(255, (int) (teamColor.floatZ() * 255), (int) (teamColor.floatY() * 255), (int) (teamColor.floatX() * 255)); + GlStateManager.disableTexture2D(); + ClientUtil.drawBakedModelColored(coneModel, color); + } else + { + ClientUtil.drawBakedModel(coneModel); + GlStateManager.disableTexture2D(); + } + + GlStateManager.disableLighting(); + + boolean red = FMLClientHandler.instance().getClient().player.ticksExisted / 10 % 2 < 1; + int color = ColorUtil.to32BitColor(255, 0, red ? 0 : 255, red ? 255 : 0); + ClientUtil.drawBakedModelColored(cubeModel, color); + + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); + + GlStateManager.color(1F, 1F, 1F); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityTier3Rocket rocket, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = rocket.getEntityBoundingBox().grow(0.5D, 0, 0.5D); + return rocket.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelAstroMiner.java new file mode 100644 index 00000000..31d88755 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelAstroMiner.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelAstroMiner extends ModelTransformWrapper +{ + + public ItemModelAstroMiner(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.17F, 0.0F, -0.17F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.85F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.36F, 0.3F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, 0.0F, -1.7F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(4.0F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) -(Math.PI / 2.0F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-0.2F, -0.0F, 1.1F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 15, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.8F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.2F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ(-0.65F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) -(Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (Math.PI)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.2F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 1.0F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.5F, 0.6F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReceiver.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReceiver.java new file mode 100644 index 00000000..9cd88f21 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReceiver.java @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelBeamReceiver extends ModelTransformWrapper +{ + + public ItemModelBeamReceiver(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, -45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.75F)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.0F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -0.5F : 0.5F; + float zTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 0.3F : 0.7F; + int yRot = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -90 : 90; + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, yRot, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(xTran, 0.4F, zTran)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? -0.4F : 0.4F; + float zTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.5F : 0.5F; + int yRot = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? -45 : -225; + Vector3f trans = new Vector3f(xTran, 0.0F, zTran); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(70, yRot, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.1F, 0.25F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.6F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.565F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.4F, -0.2F, 0.45F)); + ret.mul(mul); + return ret; + } + return null; + } + + @Override + public TextureAtlasSprite getParticleTexture() + { + return super.getParticleTexture(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReflector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReflector.java new file mode 100644 index 00000000..5bb91967 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelBeamReflector.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelBeamReflector extends ModelTransformWrapper +{ + + public ItemModelBeamReflector(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.55F, 0.15F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.6F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -0.5F : 0.5F; + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, -90, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(xTran, 0.5F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? -0.3F : 0.6F; + float zTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.3F : 0.3F; + Vector3f trans = new Vector3f(xTran, 0.3F, zTran); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(70, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.25F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.25F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.4F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.565F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelCargoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelCargoRocket.java new file mode 100644 index 00000000..20e2fd53 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelCargoRocket.java @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelCargoRocket extends ModelTransformWrapper +{ + public ItemModelCargoRocket(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.15F, 0.0F, -0.15F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.3F, -0.4F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + if(!ConfigManagerCore.disableRocketIconRotation) { + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + } + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-2.5F, 1.8F, -3.0F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(4.0F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-0.65F + Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(1.2F, -2.7F, 1.0F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(65, 15, -3)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 3.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (Math.PI / 4.0F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(0.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -2.75F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelGrapple.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelGrapple.java new file mode 100644 index 00000000..f03e8831 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelGrapple.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelGrapple extends ModelTransformWrapper +{ + + public ItemModelGrapple(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.7F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.3F, 1.15F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.3F : 0.3F; + float yTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.2F : -0.2F; + float zTran = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 0.2F : 0.8F; + int xRot = cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND ? 180 : 0; + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(xRot, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(xTran, yTran, zTran)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (-Math.PI / 2.0F)); + mul.rotZ((float) (-Math.PI / 2.0F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + float xTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -0.275F : 0.5F; + float yTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 0.925F : 0.05F; + float zTran = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 0.2F : -0.2F; + int xRot = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? -180 : 0; + int yRot = cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND ? 75 : 45; + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(xRot, yRot, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(1.6F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(xTran, yTran, zTran)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) (-Math.PI / 1.2F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.35F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.65F, 0.35F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.6F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(3.15F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.8F, 0.5F, 0.525F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelRocketT3.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelRocketT3.java new file mode 100644 index 00000000..fd3d8ee9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelRocketT3.java @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelRocketT3 extends ModelTransformWrapper +{ + public ItemModelRocketT3(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.15F, 0.0F, -0.15F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.61F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.25F, -0.35F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + if(!ConfigManagerCore.disableRocketIconRotation) { + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + } + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, 3.2F, -3.6F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.45F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-0.65F + Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(1.0F, -2.5F, 1.05F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 15, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.6F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 3.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 1.5F, 0.5F)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(3.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -1.5F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelTelepad.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelTelepad.java new file mode 100644 index 00000000..8634b55e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/item/ItemModelTelepad.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelTelepad extends ModelTransformWrapper +{ + + public ItemModelTelepad(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(8, 0, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.12F, -0.2F, 0.24F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) Math.PI / 12.0F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY((float) Math.PI / 5.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.1625F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(-0.6F, 0.1F, 1.6F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(80, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, 1.0F, 0.7F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(-12, 20, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.15F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(1.575F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -1.0F, 0.5F)); + ret.mul(mul); + return ret; + } + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReceiverRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReceiverRenderer.java new file mode 100644 index 00000000..841ba6fc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReceiverRenderer.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.tile.ReceiverMode; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReceiver; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityBeamReceiverRenderer extends TileEntitySpecialRenderer +{ + + private static OBJModel.OBJBakedModel reflectorModelMain; + private static OBJModel.OBJBakedModel reflectorModelReceiver; + private static OBJModel.OBJBakedModel reflectorModelRing; + + private void updateModels() + { + if (reflectorModelMain == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "block/receiver.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + reflectorModelMain = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Main"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelReceiver = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Receiver"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelRing = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Ring"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void render(TileEntityBeamReceiver tile, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (tile.facing == null) + { + return; + } + + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x + 0.5F, (float) y, (float) z + 0.5F); + GlStateManager.scale(0.85F, 0.85F, 0.85F); + + switch (tile.facing) + { + case DOWN: + GlStateManager.translate(0.7F, -0.15F, 0.0F); + GlStateManager.rotate(90, 0, 0, 1); + break; + case UP: + GlStateManager.translate(-0.7F, 1.3F, 0.0F); + GlStateManager.rotate(-90, 0, 0, 1); + break; + case EAST: + GlStateManager.translate(0.7F, -0.15F, 0.0F); + GlStateManager.rotate(180, 0, 1, 0); + break; + case SOUTH: + GlStateManager.translate(0.0F, -0.15F, 0.7F); + GlStateManager.rotate(90, 0, 1, 0); + break; + case WEST: + GlStateManager.translate(-0.7F, -0.15F, 0.0F); + GlStateManager.rotate(0, 0, 1, 0); + break; + case NORTH: + GlStateManager.translate(0.0F, -0.15F, -0.7F); + GlStateManager.rotate(270, 0, 1, 0); + break; + default: + GlStateManager.popMatrix(); + return; + } + + this.updateModels(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + ClientUtil.drawBakedModel(reflectorModelMain); + + int color; + + if (tile.modeReceive == ReceiverMode.RECEIVE.ordinal()) + { + color = ColorUtil.to32BitColor(255, 0, 204, 0); + } else if (tile.modeReceive == ReceiverMode.EXTRACT.ordinal()) + { + color = ColorUtil.to32BitColor(255, 0, 0, 153); + } else + { + color = ColorUtil.to32BitColor(255, 25, 25, 25); + } + + GlStateManager.disableTexture2D(); + GlStateManager.disableCull(); + ClientUtil.drawBakedModelColored(reflectorModelReceiver, color); + GlStateManager.enableTexture2D(); + GlStateManager.enableCull(); + float dX = 0.34772F; + float dY = 0.75097F; + float dZ = 0.0F; + GlStateManager.translate(dX, dY, dZ); + + if (tile.modeReceive != ReceiverMode.UNDEFINED.ordinal()) + { + GlStateManager.rotate(-tile.ticks * 50, 1, 0, 0); + } + + GlStateManager.translate(-dX, -dY, -dZ); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + ClientUtil.drawBakedModel(reflectorModelRing); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReflectorRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReflectorRenderer.java new file mode 100644 index 00000000..03f11584 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityBeamReflectorRenderer.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReflector; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityBeamReflectorRenderer extends TileEntitySpecialRenderer +{ + + private static OBJModel.OBJBakedModel reflectorModelBase; + private static OBJModel.OBJBakedModel reflectorModelAxle; + private static OBJModel.OBJBakedModel reflectorModelEnergyBlaster; + private static OBJModel.OBJBakedModel reflectorModelRing; + + private void updateModels() + { + if (reflectorModelBase == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "block/reflector.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + reflectorModelBase = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Base"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelAxle = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Axle"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelEnergyBlaster = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("EnergyBlaster"), false), DefaultVertexFormats.ITEM, spriteFunction); + reflectorModelRing = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Ring"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void render(TileEntityBeamReflector tile, double d, double d1, double d2, float f, int i, float alpha) + { + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) d + 0.5F, (float) d1, (float) d2 + 0.5F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + this.updateModels(); + ClientUtil.drawBakedModel(reflectorModelBase); + GlStateManager.rotate(tile.yaw, 0, 1, 0); + ClientUtil.drawBakedModel(reflectorModelAxle); + float dX = 0.0F; + float dY = 1.13228F; + float dZ = 0.0F; + GlStateManager.translate(dX, dY, dZ); + GlStateManager.rotate(tile.pitch, 1, 0, 0); + GlStateManager.translate(-dX, -dY, -dZ); + ClientUtil.drawBakedModel(reflectorModelEnergyBlaster); + GlStateManager.translate(dX, dY, dZ); + GlStateManager.rotate(tile.ticks * 5, 0, 0, 1); + GlStateManager.translate(-dX, -dY, -dZ); + ClientUtil.drawBakedModel(reflectorModelRing); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityMinerBaseRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityMinerBaseRenderer.java new file mode 100644 index 00000000..13d0844d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityMinerBaseRenderer.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableMap; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityMinerBaseRenderer extends TileEntitySpecialRenderer +{ + + public static OBJModel.OBJBakedModel minerBaseModelBaked; + + public IBakedModel getBakedModel() + { + if (minerBaseModelBaked == null) + { + OBJModel minerBaseModel; + try + { + minerBaseModel = (OBJModel) OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "minerbase0.obj")); + minerBaseModel = (OBJModel) minerBaseModel.process(ImmutableMap.of("ambient", "false")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + minerBaseModelBaked = (OBJModel.OBJBakedModel) minerBaseModel.bake(TRSRTransformation.identity(), DefaultVertexFormats.ITEM, spriteFunction); + } + return minerBaseModelBaked; + } + + @Override + public void render(TileEntityMinerBase tile, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (!tile.isMaster) + { + return; + } + + int j = 0, k = 0; + int light = tile.getWorld().getCombinedLight(tile.getPos(), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(1, 0, 0), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(0, 0, 1), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(1, 0, 1), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().up(), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(1, 1, 0), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(0, 1, 1), 0); + j += light % 65536; + k += light / 65536; + light = tile.getWorld().getCombinedLight(tile.getPos().add(1, 1, 1), 0); + j += light % 65536; + k += light / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j / 8.0F, k / 8.0F); + + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + GL11.glTranslatef((float) x + 1F, (float) y + 1F, (float) z + 1F); + GL11.glScalef(0.05F, 0.05F, 0.05F); + + switch (tile.facing) + { + case SOUTH: + GL11.glRotatef(180F, 0, 1F, 0); + break; + case WEST: + GL11.glRotatef(90F, 0, 1F, 0); + break; + case NORTH: + break; + case EAST: + GL11.glRotatef(270F, 0, 1F, 0); + break; + } + + RenderHelper.disableStandardItemLighting(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + Tessellator tessellator = Tessellator.getInstance(); + tessellator.getBuffer().begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); + GlStateManager.translate(-tile.getPos().getX(), -tile.getPos().getY(), -tile.getPos().getZ()); + Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelRenderer().renderModel(tile.getWorld(), getBakedModel(), tile.getWorld().getBlockState(tile.getPos()), tile.getPos(), + tessellator.getBuffer(), false); + tessellator.draw(); + + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityShortRangeTelepadRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityShortRangeTelepadRenderer.java new file mode 100644 index 00000000..036a56b3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/render/tile/TileEntityShortRangeTelepadRenderer.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityShortRangeTelepadRenderer extends TileEntitySpecialRenderer +{ + + private static OBJModel.OBJBakedModel teleporterTop; + private static OBJModel.OBJBakedModel teleporterBottom; + + private void updateModels() + { + if (teleporterTop == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "block/telepad_short.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + teleporterTop = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Top", "Connector"), false), DefaultVertexFormats.ITEM, spriteFunction); + teleporterBottom = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Bottom"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void render(TileEntityShortRangeTelepad te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + GL11.glPushMatrix(); + + RenderHelper.disableStandardItemLighting(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + updateModels(); + + GL11.glTranslatef((float) x + 0.5F, (float) y, (float) z + 0.5F); + + GL11.glScalef(0.745F, 1.0F, 0.745F); + + ClientUtil.drawBakedModel(teleporterBottom); + GL11.glTranslatef(0.0F, -0.7F, 0.0F); + ClientUtil.drawBakedModel(teleporterTop); + + GL11.glPopMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/sounds/SoundUpdaterMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/sounds/SoundUpdaterMiner.java new file mode 100644 index 00000000..ceff89d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/client/sounds/SoundUpdaterMiner.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.client.sounds; + +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import net.minecraft.client.audio.MovingSound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.util.SoundCategory; + +/** + * This file is part of the Galacticraft project + * + * @author micdoodle8, radfast + */ +public class SoundUpdaterMiner extends MovingSound +{ + + private final EntityPlayerSP thePlayer; + private final EntityAstroMiner theRocket; + private boolean soundStopped; + private float targetVolume; + private float targetPitch; + + public SoundUpdaterMiner(EntityPlayerSP entityPlayerSP, EntityAstroMiner par2Entity) + { + super(GCSounds.astroMiner, SoundCategory.AMBIENT); + this.theRocket = par2Entity; + this.thePlayer = entityPlayerSP; + this.volume = 0.00001F; // If it's zero it won't start playing + this.targetVolume = 0.6F; + this.targetPitch = 1.0F; + this.pitch = 1.0F; // pitch + this.repeat = true; + this.repeatDelay = 0; // repeat delay + this.updateSoundLocation(par2Entity); + } + + /** + * Updates the JList with a new model. + */ + @Override + public void update() + { + if (!this.theRocket.isDead) + { + if (this.theRocket.AIstate == EntityAstroMiner.AISTATE_ATBASE || this.theRocket.AIstate == EntityAstroMiner.AISTATE_DOCKING) + { + this.targetVolume = 0.6F; + this.targetPitch = 0.1F; + } else + { + this.targetVolume = 1.0F; + this.targetPitch = 1.0F; + } + if (this.volume < this.targetVolume) + { + this.volume += 0.1F; + if (this.volume > this.targetVolume) + { + this.volume = this.targetVolume; + } + } else if (this.volume > this.targetVolume) + { + this.volume -= 0.1F; + if (this.volume < this.targetVolume) + { + this.volume = this.targetVolume; + } + } + if (this.pitch < this.targetPitch) + { + this.pitch += 0.05F; + if (this.pitch > this.targetPitch) + { + this.pitch = this.targetPitch; + } + } else if (this.pitch > this.targetPitch) + { + this.pitch -= 0.05F; + if (this.pitch < this.targetPitch) + { + this.pitch = this.targetPitch; + } + } + this.updateSoundLocation(this.theRocket); + } else + { + this.donePlaying = true; + } + } + + public void stopRocketSound() + { + this.donePlaying = true; + this.soundStopped = true; + } + + public void updateSoundLocation(Entity e) + { + this.xPosF = (float) e.posX; + this.yPosF = (float) e.posY; + this.zPosF = (float) e.posZ; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/AsteroidSaveData.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/AsteroidSaveData.java new file mode 100644 index 00000000..8d66f060 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/AsteroidSaveData.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.dimension; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.storage.WorldSavedData; + +public class AsteroidSaveData extends WorldSavedData +{ + + public static final String saveDataID = Constants.GCDATAFOLDER + "GCAsteroidData"; + public NBTTagCompound datacompound; + + public AsteroidSaveData(String s) + { + super(AsteroidSaveData.saveDataID); + this.datacompound = new NBTTagCompound(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + this.datacompound = nbt.getCompoundTag("asteroids"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + nbt.setTag("asteroids", this.datacompound); + return nbt; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/ShortRangeTelepadHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/ShortRangeTelepadHandler.java new file mode 100644 index 00000000..fed8ee66 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/ShortRangeTelepadHandler.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.dimension; + +import com.google.common.collect.Maps; +import java.util.Map; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.planets.asteroids.tick.AsteroidsTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.storage.WorldSavedData; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +public class ShortRangeTelepadHandler extends WorldSavedData +{ + + public static final String saveDataID = "ShortRangeTelepads"; + private static Map tileMap = Maps.newHashMap(); + + public ShortRangeTelepadHandler(String saveDataID) + { + super(saveDataID); + } + + public static class TelepadEntry + { + + public int dimensionID; + public BlockVec3 position; + public boolean enabled; + + public TelepadEntry(int dimID, BlockVec3 position, boolean enabled) + { + this.dimensionID = dimID; + this.position = position; + this.enabled = enabled; + } + + @Override + public int hashCode() + { + return new HashCodeBuilder().append(dimensionID).append(position.hashCode()).append(enabled).toHashCode(); + } + + @Override + public boolean equals(Object other) + { + if (other instanceof TelepadEntry) + { + return new EqualsBuilder().append(((TelepadEntry) other).dimensionID, this.dimensionID).append(((TelepadEntry) other).position, this.position) + .append(((TelepadEntry) other).enabled, this.enabled).isEquals(); + } + + return false; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + NBTTagList tagList = nbt.getTagList("TelepadList", 10); + tileMap.clear(); + + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound nbt2 = tagList.getCompoundTagAt(i); + int address = nbt2.getInteger("Address"); + int dimID = nbt2.getInteger("DimID"); + int posX = nbt2.getInteger("PosX"); + int posY = nbt2.getInteger("PosY"); + int posZ = nbt2.getInteger("PosZ"); + boolean enabled = true; + if (nbt2.hasKey("Enabled")) + { + enabled = nbt2.getBoolean("Enabled"); + } + tileMap.put(address, new TelepadEntry(dimID, new BlockVec3(posX, posY, posZ), enabled)); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + NBTTagList tagList = new NBTTagList(); + + for (Map.Entry e : tileMap.entrySet()) + { + NBTTagCompound nbt2 = new NBTTagCompound(); + nbt2.setInteger("Address", e.getKey()); + nbt2.setInteger("DimID", e.getValue().dimensionID); + nbt2.setInteger("PosX", e.getValue().position.x); + nbt2.setInteger("PosY", e.getValue().position.y); + nbt2.setInteger("PosZ", e.getValue().position.z); + nbt2.setBoolean("Enabled", e.getValue().enabled); + tagList.appendTag(nbt2); + } + + nbt.setTag("TelepadList", tagList); + return nbt; + } + + public static void addShortRangeTelepad(TileEntityShortRangeTelepad telepad) + { + if (!telepad.getWorld().isRemote) + { + if (telepad.addressValid) + { + TelepadEntry newEntry = new TelepadEntry(telepad.getWorld().provider.getDimension(), new BlockVec3(telepad), !telepad.getDisabled(0)); + TelepadEntry previous = tileMap.put(telepad.address, newEntry); + + if (previous == null || !previous.equals(newEntry)) + { + AsteroidsTickHandlerServer.spaceRaceData.setDirty(true); + } + } + } + } + + public static void removeShortRangeTeleporter(TileEntityShortRangeTelepad telepad) + { + if (!telepad.getWorld().isRemote) + { + if (telepad.addressValid) + { + tileMap.remove(telepad.address); + AsteroidsTickHandlerServer.spaceRaceData.setDirty(true); + } + } + } + + public static TelepadEntry getLocationFromAddress(int address) + { + return tileMap.get(address); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/TeleportTypeAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/TeleportTypeAsteroids.java new file mode 100644 index 00000000..be4e4a58 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/TeleportTypeAsteroids.java @@ -0,0 +1,407 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.dimension; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.ItemMonsterPlacer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.gen.ChunkProviderServer; + +public class TeleportTypeAsteroids implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + int x = MathHelper.floor(stats.getCoordsTeleportedFromX()); + int z = MathHelper.floor(stats.getCoordsTeleportedFromZ()); + int limit = ConfigManagerCore.otherPlanetWorldBorders - 2; + if (limit > 20) + { + if (x > limit) + { + z *= limit / x; + x = limit; + } else if (x < -limit) + { + z *= -limit / x; + x = -limit; + } + if (z > limit) + { + x *= limit / z; + z = limit; + } else if (z < -limit) + { + x *= -limit / z; + z = -limit; + } + } + + int attemptCount = 0; + + // Small pre-generate with a chunk loading radius of 3, to make sure + // some asteroids get generated + // (if the world is already generated here, this will be very quick) + this.preGenChunks(world, x >> 4, z >> 4); + + do + { + BlockVec3 bv3 = null; + if (world.provider instanceof WorldProviderAsteroids) + { + bv3 = ((WorldProviderAsteroids) world.provider).getClosestAsteroidXZ(x, 0, z, true); + } + + if (bv3 != null) + { + // Check whether the returned asteroid is too far from the + // desired entry location in which case, give up + if (bv3.distanceSquared(new BlockVec3(x, 128, z)) > 25600) + { + break; + } + + if (ConfigManagerCore.enableDebug) + { + GalacticraftPlanets.logger.info("Testing asteroid at x" + (bv3.x) + " y" + (bv3.y) + " z" + bv3.z); + } + this.loadChunksAround(bv3.x, bv3.z, 2, world.getChunkProvider()); + this.loadChunksAround(bv3.x, bv3.z, -3, world.getChunkProvider()); + + if (goodAsteroidEntry(world, bv3.x, bv3.y, bv3.z)) + { + return new Vector3(bv3.x, 310, bv3.z); + } + if (goodAsteroidEntry(world, bv3.x + 2, bv3.y, bv3.z + 2)) + { + return new Vector3(bv3.x + 2, 310, bv3.z + 2); + } + if (goodAsteroidEntry(world, bv3.x + 2, bv3.y, bv3.z - 2)) + { + return new Vector3(bv3.x + 2, 310, bv3.z - 2); + } + if (goodAsteroidEntry(world, bv3.x - 2, bv3.y, bv3.z - 2)) + { + return new Vector3(bv3.x - 2, 310, bv3.z - 2); + } + if (goodAsteroidEntry(world, bv3.x - 2, bv3.y, bv3.z + 2)) + { + return new Vector3(bv3.x - 2, 310, bv3.z + 2); + } + + // Failed to find an asteroid even though there should be + // one there + if (ConfigManagerCore.enableDebug) + { + GalacticraftPlanets.logger.info("Removing drilled out asteroid at x" + (bv3.x) + " z" + (bv3.z)); + } + ((WorldProviderAsteroids) world.provider).removeAsteroid(bv3.x, bv3.y, bv3.z); + } + + attemptCount++; + } while (attemptCount < 5); + + GalacticraftPlanets.logger.info("Failed to find good large asteroid landing spot! Falling back to making a small one."); + this.makeSmallLandingSpot(world, x, z); + return new Vector3(x, 310, z); + } + + GalacticraftPlanets.logger.error("Null player when teleporting to Asteroids!"); + return new Vector3(0, 310, 0); + } + + private boolean goodAsteroidEntry(World world, int x, int yorig, int z) + { + for (int k = 208; k > 48; k--) + { + if (!world.isAirBlock(new BlockPos(x, k, z))) + { + if (Math.abs(k - yorig) > 20) + { + continue; + } + // Clear the downward path of small asteroids and any other + // asteroid rock + for (int y = k + 2; y < 256; y++) + { + if (world.getBlockState(new BlockPos(x, y, z)).getBlock() == AsteroidBlocks.blockBasic) + { + world.setBlockToAir(new BlockPos(x, y, z)); + } + if (world.getBlockState(new BlockPos(x - 1, y, z)).getBlock() == AsteroidBlocks.blockBasic) + { + world.setBlockToAir(new BlockPos(x - 1, y, z)); + } + if (world.getBlockState(new BlockPos(x, y, z - 1)).getBlock() == AsteroidBlocks.blockBasic) + { + world.setBlockToAir(new BlockPos(x, y, z - 1)); + } + if (world.getBlockState(new BlockPos(x - 1, y, z - 1)).getBlock() == AsteroidBlocks.blockBasic) + { + world.setBlockToAir(new BlockPos(x - 1, y, z - 1)); + } + } + if (ConfigManagerCore.enableDebug) + { + GalacticraftPlanets.logger.info("Found asteroid at x" + (x) + " z" + (z)); + } + return true; + } + } + return false; + } + + private void makeSmallLandingSpot(World world, int x, int z) + { + this.loadChunksAround(x, z, -1, (ChunkProviderServer) world.getChunkProvider()); + + for (int k = 255; k > 48; k--) + { + if (!world.isAirBlock(new BlockPos(x, k, z))) + { + this.makePlatform(world, x, k - 1, z); + return; + } + if (!world.isAirBlock(new BlockPos(x - 1, k, z))) + { + this.makePlatform(world, x - 1, k - 1, z); + return; + } + if (!world.isAirBlock(new BlockPos(x - 1, k, z - 1))) + { + this.makePlatform(world, x - 1, k - 1, z - 1); + return; + } + if (!world.isAirBlock(new BlockPos(x, k, z - 1))) + { + this.makePlatform(world, x, k - 1, z - 1); + return; + } + } + + this.makePlatform(world, x, 48 + world.rand.nextInt(128), z); + return; + } + + private void loadChunksAround(int x, int z, int i, ChunkProviderServer cp) + { + cp.loadChunk(x >> 4, z >> 4); + if ((x + i) >> 4 != x >> 4) + { + cp.loadChunk((x + i) >> 4, z >> 4); + if ((z + i) >> 4 != z >> 4) + { + cp.loadChunk(x >> 4, (z + i) >> 4); + cp.loadChunk((x + i) >> 4, (z + i) >> 4); + } + } else if ((z + i) >> 4 != z >> 4) + { + cp.loadChunk(x >> 4, (z + i) >> 4); + } + } + + private void makePlatform(World world, int x, int y, int z) + { + for (int xx = -3; xx < 3; xx++) + { + for (int zz = -3; zz < 3; zz++) + { + if (xx == -3 && (zz == -3 || zz == 2)) + { + continue; + } + if (xx == 2 && (zz == -3 || zz == 2)) + { + continue; + } + doBlock(world, x + xx, y, z + zz); + } + } + for (int xx = -2; xx < 2; xx++) + { + for (int zz = -2; zz < 2; zz++) + { + doBlock(world, x + xx, y - 1, z + zz); + } + } + doBlock(world, x - 1, y - 2, z - 1); + doBlock(world, x - 1, y - 2, z); + doBlock(world, x, y - 2, z); + doBlock(world, x, y - 2, z - 1); + } + + private void doBlock(World world, int x, int y, int z) + { + int meta = (int) (world.rand.nextFloat() * 1.5F); + if (world.isAirBlock(new BlockPos(x, y, z))) + { + world.setBlockState(new BlockPos(x, y, z), AsteroidBlocks.blockBasic.getStateFromMeta(meta), 2); + } + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, ConfigManagerCore.disableLander ? 250.0 : 900.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return null; + } + + private void preGenChunks(World w, int cx, int cz) + { + this.preGenChunk(w, cx, cz); + for (int r = 1; r < 3; r++) + { + int xmin = cx - r; + int xmax = cx + r; + int zmin = cz - r; + int zmax = cz + r; + for (int i = -r; i < r; i++) + { + this.preGenChunk(w, xmin, cz + i); + this.preGenChunk(w, xmax, cz - i); + this.preGenChunk(w, cx - i, zmin); + this.preGenChunk(w, cx + i, zmax); + } + } + } + + private void preGenChunk(World w, int chunkX, int chunkZ) + { + w.getChunk(chunkX, chunkZ); + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + if (!ridingAutoRocket && player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + if (stats.getTeleportCooldown() <= 0) + { + if (player.capabilities.isFlying) + { + player.capabilities.isFlying = false; + } + + if (!newWorld.isRemote) + { + EntityEntryPod entryPod = new EntityEntryPod(player); + + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) newWorld); + entryPod.forceSpawn = true; + newWorld.spawnEntity(entryPod); + CompatibilityManager.forceLoadChunksEnd((WorldServer) newWorld, previous); + } + + stats.setTeleportCooldown(10); + } + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + GCPlayerStats stats = GCPlayerStats.get(player); + SchematicRegistry.unlockNewPage(player, new ItemStack(GCItems.schematic, 1, 1)); // Knows + // how + // to + // build + // T2 + // rocket + SchematicRegistry.unlockNewPage(player, new ItemStack(MarsItems.schematic, 1, 0)); // Knows + // how + // to + // build + // T3 + // rocket + SchematicRegistry.unlockNewPage(player, new ItemStack(MarsItems.schematic, 1, 2)); // Knows + // how + // to + // build + // Astro + // Miner + NonNullList rocketStacks = NonNullList.create(); + stats.setFuelLevel(1000); + rocketStacks.add(new ItemStack(GCItems.oxMask)); + rocketStacks.add(new ItemStack(GCItems.oxygenGear)); + rocketStacks.add(new ItemStack(GCItems.oxTankMedium)); + rocketStacks.add(new ItemStack(GCItems.oxTankHeavy)); + rocketStacks.add(new ItemStack(GCItems.oxTankHeavy)); + rocketStacks.add(new ItemStack(AsteroidsItems.canisterLOX)); + rocketStacks.add(new ItemStack(AsteroidsItems.canisterLOX)); + rocketStacks.add(new ItemStack(AsteroidsItems.canisterLOX)); + rocketStacks.add(new ItemStack(AsteroidsItems.basicItem, 32, 7)); + rocketStacks.add(new ItemStack(Blocks.GLASS_PANE, 16)); + rocketStacks.add(new ItemStack(Blocks.PLANKS, 32, 2)); + rocketStacks.add(new ItemStack(MarsItems.marsItemBasic, 16, 2)); // Desh + // ingot + rocketStacks.add(new ItemStack(GCItems.basicItem, 8, 13)); // Basic + // Wafer + rocketStacks.add(new ItemStack(GCItems.basicItem, 2, 1)); // Solar + // Panels + rocketStacks.add(new ItemStack(GCItems.foodItem, 16, 0)); // Canned food + rocketStacks.add(new ItemStack(Items.EGG, 12)); + + ItemStack spawnEgg = new ItemStack(Items.SPAWN_EGG, 2); + ResourceLocation name = EntityList.getKey(EntityCow.class); + ItemMonsterPlacer.applyEntityIdToItemStack(spawnEgg, name); + rocketStacks.add(spawnEgg); + rocketStacks.add(PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM, 4), PotionTypes.LONG_NIGHT_VISION)); // Night + // Vision + // Potion + rocketStacks.add(new ItemStack(MarsBlocks.machine, 1, 4)); // Cryogenic + // Chamber + rocketStacks.add(new ItemStack(MarsItems.rocketMars, 1, IRocketType.EnumRocketType.INVENTORY36.ordinal())); + stats.setRocketStacks(rocketStacks); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/WorldProviderAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/WorldProviderAsteroids.java new file mode 100644 index 00000000..9c7d7f1c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/dimension/WorldProviderAsteroids.java @@ -0,0 +1,551 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.dimension; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.TreeMap; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.ChunkProviderAsteroids; +import net.minecraft.block.Block; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.DimensionType; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class WorldProviderAsteroids extends WorldProviderSpace implements ISolarLevel +{ + + // Used to list asteroid centres to external code that needs to know them + private HashSet asteroids = new HashSet<>(); + private boolean dataNotLoaded = true; + private AsteroidSaveData datafile; + private double solarMultiplier = -1D; + + // @Override +// public void registerWorldChunkManager() +// { +// this.worldChunkMgr = new WorldChunkManagerAsteroids(this.world, 0F); +// } + + @Override + public CelestialBody getCelestialBody() + { + return AsteroidsModule.planetAsteroids; + } + + @Override + public Vector3 getFogColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public Vector3 getSkyColor() + { + return new Vector3(0, 0, 0); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 0; + } + + @Override + public boolean isDaytime() + { + return true; + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderAsteroids.class; + } + + @Override + public float calculateCelestialAngle(long par1, float par3) + { + return 0.25F; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + return 1.0F; + } + +// @Override +// public IChunkProvider createChunkGenerator() +// { +// return new ChunkProviderAsteroids(this.world, this.world.getSeed(), this.world.getWorldInfo().isMapFeaturesEnabled()); +// } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 96; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + + // Overriding so that beds do not explode on Asteroids + @Override + public boolean canRespawnHere() + { + if (EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = false; + return true; + } + return false; + } + + @Override + public float getGravity() + { + return 0.072F; + } + + @Override + public double getMeteorFrequency() + { + return 10.0D; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.9D; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier >= 3; + } + + @Override + public float getFallDamageModifier() + { + return 0.1F; + } + + public void addAsteroid(int x, int y, int z, int size, int core) + { + AsteroidData coords = new AsteroidData(x, y, z, size, core); + if (!this.asteroids.contains(coords)) + { + if (this.dataNotLoaded) + { + this.loadAsteroidSavedData(); + } + if (!this.asteroids.contains(coords)) + { + this.addToNBT(this.datafile.datacompound, coords); + this.asteroids.add(coords); + } + } + } + + public void removeAsteroid(int x, int y, int z) + { + AsteroidData coords = new AsteroidData(x, y, z); + if (this.asteroids.contains(coords)) + { + this.asteroids.remove(coords); + + if (this.dataNotLoaded) + { + this.loadAsteroidSavedData(); + } + this.writeToNBT(this.datafile.datacompound); + } + } + + private void loadAsteroidSavedData() + { + this.datafile = (AsteroidSaveData) this.world.loadData(AsteroidSaveData.class, AsteroidSaveData.saveDataID); + + if (this.datafile == null) + { + this.datafile = new AsteroidSaveData(""); + this.world.setData(AsteroidSaveData.saveDataID, this.datafile); + this.writeToNBT(this.datafile.datacompound); + } else + { + this.readFromNBT(this.datafile.datacompound); + } + + this.dataNotLoaded = false; + } + + private void readFromNBT(NBTTagCompound nbt) + { + NBTTagList coordList = nbt.getTagList("coords", 10); + if (coordList.tagCount() > 0) + { + for (int j = 0; j < coordList.tagCount(); j++) + { + NBTTagCompound tag1 = coordList.getCompoundTagAt(j); + + if (tag1 != null) + { + this.asteroids.add(AsteroidData.readFromNBT(tag1)); + } + } + } + } + + private void writeToNBT(NBTTagCompound nbt) + { + NBTTagList coordList = new NBTTagList(); + for (AsteroidData coords : this.asteroids) + { + NBTTagCompound tag = new NBTTagCompound(); + coords.writeToNBT(tag); + coordList.appendTag(tag); + } + nbt.setTag("coords", coordList); + this.datafile.markDirty(); + } + + private void addToNBT(NBTTagCompound nbt, AsteroidData coords) + { + NBTTagList coordList = nbt.getTagList("coords", 10); + NBTTagCompound tag = new NBTTagCompound(); + coords.writeToNBT(tag); + coordList.appendTag(tag); + nbt.setTag("coords", coordList); + this.datafile.markDirty(); + } + + public boolean checkHasAsteroids() + { + if (this.dataNotLoaded) + { + this.loadAsteroidSavedData(); + } + + if (this.asteroids.size() == 0) + { + return false; + } + + return true; + } + + public BlockVec3 getClosestAsteroidXZ(int x, int y, int z, boolean mark) + { + if (!this.checkHasAsteroids()) + { + return null; + } + + BlockVec3 result = null; + AsteroidData resultRoid = null; + int lowestDistance = Integer.MAX_VALUE; + + for (AsteroidData test : this.asteroids) + { + if (mark && (test.sizeAndLandedFlag & 128) > 0) + { + continue; + } + + int dx = x - test.centre.x; + int dz = z - test.centre.z; + int a = dx * dx + dz * dz; + if (a < lowestDistance) + { + lowestDistance = a; + result = test.centre; + resultRoid = test; + } + } + + if (result == null) + { + return null; + } + + if (mark) + { + resultRoid.sizeAndLandedFlag |= 128; + this.writeToNBT(this.datafile.datacompound); + } + result = result.clone(); + result.sideDoneBits = resultRoid.sizeAndLandedFlag & 127; + return result; + } + + public ArrayList getClosestAsteroidsXZ(int x, int y, int z, int facing, int count) + { + if (!this.checkHasAsteroids()) + { + return null; + } + + TreeMap targets = new TreeMap<>(); + + for (AsteroidData roid : this.asteroids) + { + BlockVec3 test = roid.centre; + switch (facing) + { + case 2: + if (z - 16 < test.z) + { + continue; + } + break; + case 3: + if (z + 16 > test.z) + { + continue; + } + break; + case 4: + if (x - 16 < test.x) + { + continue; + } + break; + case 5: + if (x + 16 > test.x) + { + continue; + } + break; + } + int dx = x - test.x; + int dz = z - test.z; + int a = dx * dx + dz * dz; + if (a < 262144) + { + targets.put(a, test); + } + } + + int max = Math.max(count, targets.size()); + if (max <= 0) + { + return null; + } + + ArrayList returnValues = new ArrayList<>(); + int i = 0; + int offset = EntityAstroMiner.MINE_LENGTH_AST / 2; + for (BlockVec3 target : targets.values()) + { + BlockVec3 coords = target.clone(); + GalacticraftPlanets.logger.debug("Found nearby asteroid at " + target.toString()); + switch (facing) + { + case 2: + coords.z += offset; + break; + case 3: + coords.z -= offset; + break; + case 4: + coords.x += offset; + break; + case 5: + coords.x -= offset; + break; + } + returnValues.add(coords); + if (++i >= count) + { + break; + } + } + + return returnValues; + } + + @Override + public int getActualHeight() + { + return 256; + } + + @Override + protected void init() + { + super.init(); + this.nether = true; + } + + @Override + public double getSolarEnergyMultiplier() + { + if (this.solarMultiplier < 0D) + { + double s = this.getSolarSize(); + this.solarMultiplier = s * s * s * ConfigManagerCore.spaceStationEnergyScalar; + } + return this.solarMultiplier; + } + + private static class AsteroidData + { + + protected BlockVec3 centre; + protected int sizeAndLandedFlag = 15; + protected int coreAndSpawnedFlag = -2; + + public AsteroidData(int x, int y, int z) + { + this.centre = new BlockVec3(x, y, z); + } + + public AsteroidData(int x, int y, int z, int size, int core) + { + this.centre = new BlockVec3(x, y, z); + this.sizeAndLandedFlag = size; + this.coreAndSpawnedFlag = core; + } + + public AsteroidData(BlockVec3 bv) + { + this.centre = bv; + } + + @Override + public int hashCode() + { + if (this.centre != null) + { + return this.centre.hashCode(); + } else + { + return 0; + } + } + + @Override + public boolean equals(Object o) + { + if (o instanceof AsteroidData) + { + BlockVec3 vector = ((AsteroidData) o).centre; + return this.centre.x == vector.x && this.centre.y == vector.y && this.centre.z == vector.z; + } + + if (o instanceof BlockVec3) + { + BlockVec3 vector = (BlockVec3) o; + return this.centre.x == vector.x && this.centre.y == vector.y && this.centre.z == vector.z; + } + + return false; + } + + public NBTTagCompound writeToNBT(NBTTagCompound tag) + { + tag.setInteger("x", this.centre.x); + tag.setInteger("y", this.centre.y); + tag.setInteger("z", this.centre.z); + tag.setInteger("coreAndFlag", this.coreAndSpawnedFlag); + tag.setInteger("sizeAndFlag", this.sizeAndLandedFlag); + return tag; + } + + public static AsteroidData readFromNBT(NBTTagCompound tag) + { + BlockVec3 tempVector = new BlockVec3(); + tempVector.x = tag.getInteger("x"); + tempVector.y = tag.getInteger("y"); + tempVector.z = tag.getInteger("z"); + + AsteroidData roid = new AsteroidData(tempVector); + if (tag.hasKey("coreAndFlag")) + { + roid.coreAndSpawnedFlag = tag.getInteger("coreAndFlag"); + } + if (tag.hasKey("sizeAndFlag")) + { + roid.sizeAndLandedFlag = tag.getInteger("sizeAndFlag"); + } + + return roid; + } + } + + @Override + public int getDungeonSpacing() + { + return 576; + // Used for generating Abandoned Base + } + + @Override + public DimensionType getDimensionType() + { + return GCPlanetDimensions.ASTEROIDS; + } + + @Override + public float getArrowGravity() + { + return 0.002F; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasure.MOONCHEST; + } + + @Override + public boolean hasSkyLight() + { + return false; + } + + @Override + public List getSurfaceBlocks() + { + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityAstroMiner.java new file mode 100644 index 00000000..1e69794f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityAstroMiner.java @@ -0,0 +1,2594 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; +import micdoodle8.mods.galacticraft.api.entity.IAntiGrav; +import micdoodle8.mods.galacticraft.api.entity.IEntityNoisy; +import micdoodle8.mods.galacticraft.api.entity.ITelemetry; +import micdoodle8.mods.galacticraft.api.vector.BlockTuple; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockSpaceGlass; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.IPacketReceiver; +import micdoodle8.mods.galacticraft.core.network.PacketDynamic; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.client.sounds.SoundUpdaterMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.tick.AsteroidsTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.block.Block; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockReed; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +public class EntityAstroMiner extends Entity implements IInventory, IPacketReceiver, IEntityNoisy, IAntiGrav, ITelemetry +{ + + private static final DataParameter DAMAGE = EntityDataManager.createKey(EntityAstroMiner.class, DataSerializers.FLOAT); + + public static final int MINE_LENGTH = 24; + public static final int MINE_LENGTH_AST = 12; + private static final int MAXENERGY = 12000; + private static final int RETURNENERGY = 1000; + private static final int RETURNDROPS = 10; + private static final int INV_SIZE = 227; + private static final float cLENGTH = 2.6F; + private static final float cWIDTH = 1.8F; + private static final float cHEIGHT = 1.7F; + private static final double SPEEDUP = 2.5D; + + public static final int AISTATE_OFFLINE = -1; + public static final int AISTATE_STUCK = 0; + public static final int AISTATE_ATBASE = 1; + public static final int AISTATE_TRAVELLING = 2; + public static final int AISTATE_MINING = 3; + public static final int AISTATE_RETURNING = 4; + public static final int AISTATE_DOCKING = 5; + + public static final int FAIL_BASEDESTROYED = 3; + public static final int FAIL_OUTOFENERGY = 4; + public static final int FAIL_RETURNPATHBLOCKED = 5; + public static final int FAIL_ANOTHERWASLINKED = 8; + + private boolean TEMPDEBUG = false; + private boolean TEMPFAST = false; + + public boolean serverTick = false; + public int serverTickSave; + public NonNullList stacks; + + public int energyLevel; + public int mineCount = 0; + public float targetYaw; + public float targetPitch; + + public int AIstate; + public int timeInCurrentState = 0; + public EntityPlayerMP playerMP = null; + private UUID playerUUID; + private BlockVec3 posTarget; + private BlockVec3 posBase; + private BlockVec3 waypointBase; + private LinkedList wayPoints = new LinkedList<>(); + private LinkedList minePoints = new LinkedList<>(); + private BlockVec3 minePointCurrent = null; + private EnumFacing baseFacing; + public EnumFacing facing; + private EnumFacing facingAI; + private EnumFacing lastFacing; + private static BlockVec3[] headings = + {new BlockVec3(0, -1, 0), new BlockVec3(0, 1, 0), new BlockVec3(0, 0, -1), new BlockVec3(0, 0, 1), new BlockVec3(-1, 0, 0), new BlockVec3(1, 0, 0)}; + private static BlockVec3[] headings2 = + {new BlockVec3(0, -3, 0), new BlockVec3(0, 2, 0), new BlockVec3(0, 0, -3), new BlockVec3(0, 0, 2), new BlockVec3(-3, 0, 0), new BlockVec3(2, 0, 0)}; + + private final int baseSafeRadius = 32; + private final double speedbase = TEMPFAST ? 0.16D : 0.022D; + private double speed = speedbase; + private final float rotSpeedBase = TEMPFAST ? 8F : 1.5F; + private float rotSpeed = rotSpeedBase; + private double speedup = SPEEDUP; + private boolean noSpeedup = false; // This stops the miner getting stuck at + // turning points + public float shipDamage; + public int currentDamage; + public int timeSinceHit; + private boolean flagLink = false; + private boolean flagCheckPlayer = false; + private boolean toAddToServer = AsteroidsTickHandlerServer.loadingSavedChunks.get(); + + // To do: + // break the entity drops it as an item + + private int turnProgress; + private double minecartX; + private double minecartY; + private double minecartZ; + private double minecartYaw; + private double minecartPitch; + @SideOnly(Side.CLIENT) private double velocityX; + @SideOnly(Side.CLIENT) private double velocityY; + @SideOnly(Side.CLIENT) private double velocityZ; + + private int tryBlockLimit; + private int inventoryDrops; + public boolean stopForTurn; + + private static ArrayList noMineList = new ArrayList<>(); + public static BlockTuple blockingBlock = new BlockTuple(Blocks.AIR, 0); + private int givenFailMessage = 0; + private BlockVec3 mineLast = null; + private int mineCountDown = 0; + private int pathBlockedCount = 0; + public LinkedList laserBlocks = new LinkedList<>(); + public LinkedList laserTimes = new LinkedList<>(); + public float retraction = 1F; + protected ITickable soundUpdater; + private boolean soundToStop = false; + private boolean spawnedInCreative = false; + private int serverIndex; + + static + { + // Avoid: + // Overworld: avoid lava source blocks, mossy cobble, End Portal and + // Fortress blocks + // railtrack, levers, redstone dust, GC walkways, + // Anything with a tileEntity will also be avoided: + // spawners, chests, oxygen pipes, hydrogen pipes, wires + noMineList.add(Blocks.BEDROCK); + noMineList.add(Blocks.MOSSY_COBBLESTONE); + noMineList.add(Blocks.END_PORTAL); + noMineList.add(Blocks.END_PORTAL_FRAME); + noMineList.add(Blocks.PORTAL); + noMineList.add(Blocks.STONEBRICK); + noMineList.add(Blocks.FARMLAND); + noMineList.add(Blocks.RAIL); + noMineList.add(Blocks.LEVER); + noMineList.add(Blocks.REDSTONE_WIRE); + noMineList.add(AsteroidBlocks.blockWalkway); + // TODO: + // Add configurable blacklist + } + + public EntityAstroMiner(World world, NonNullList cargo, int energy) + { + this(world); + this.toAddToServer = true; + this.stacks = cargo; + this.energyLevel = energy; + } + + public EntityAstroMiner(World world) + { + super(world); + this.facing = EnumFacing.NORTH; + this.preventEntitySpawning = true; + this.ignoreFrustumCheck = true; + this.isImmuneToFire = true; + this.width = cLENGTH; + this.height = cWIDTH; + this.setSize(cLENGTH, cWIDTH); +// this.myEntitySize = Entity.EnumEntitySize.SIZE_6; +// this.dataManager.addObject(this.currentDamage, new Integer(0)); +// this.dataManager.addObject(this.timeSinceHit, new Integer(0)); + this.noClip = true; + + if (world != null && world.isRemote) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketDynamic(this)); + } + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 5.0; + return distance < d0 * d0; + } + + @Override + protected void entityInit() + { + this.dataManager.register(DAMAGE, 0.0F); + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int var1) + { + return this.stacks.get(var1); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + } + return oldstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public String getName() + { + return GCCoreUtil.translate("entity.astro_miner.name"); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer var1) + { + return !this.isDead && var1.getDistanceSq(this) <= 64.0D; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + private boolean emptyInventory(TileEntityMinerBase minerBase) + { + boolean doneOne = false; + for (int i = 0; i < this.stacks.size(); i++) + { + ItemStack stack = this.stacks.get(i); + if (stack.isEmpty()) + { + continue; + } + int sizeprev = stack.getCount(); + minerBase.addToInventory(stack); + if (stack.isEmpty()) + { + this.stacks.set(i, ItemStack.EMPTY); + this.markDirty(); + return true; + } else if (stack.getCount() < sizeprev) + { + this.stacks.set(i, stack); + this.markDirty(); + // Something was transferred although some stacks remaining + return true; + } + } + // No stacks were transferred + return false; + } + + @Override + public void onUpdate() + { + this.serverTick = false; + if (this.posY < -64.0D) + { + this.setDead(); + return; + } + + if (this.getDamage() > 0.0F) + { + this.setDamage(this.getDamage() - 1.0F); + } + + stopForTurn = !this.checkRotation(); + this.facing = this.getFacingFromRotation(); + this.setBoundingBoxForFacing(); + + if (this.world.isRemote) + { + // CLIENT CODE + if (this.turnProgress == 0) + { + this.turnProgress++; + if (this.AIstate < AISTATE_TRAVELLING) + { + // It should be stationary, so this deals with the spooky + // movement (due to minor differences between server and + // client position) + this.posX = this.minecartX; + this.posY = this.minecartY; + this.posZ = this.minecartZ; + } else + { + double diffX = this.minecartX - this.posX; + double diffY = this.minecartY - this.posY; + double diffZ = this.minecartZ - this.posZ; + if (Math.abs(diffX) > 1.0D || Math.abs(diffY) > 1.0D || Math.abs(diffZ) > 1.0D) + { + this.posX = this.minecartX; + this.posY = this.minecartY; + this.posZ = this.minecartZ; + } else + { + if (Math.abs(diffX) > Math.abs(this.motionX)) + { + this.motionX += diffX / 10D; + } + if (Math.abs(diffY) > Math.abs(this.motionY)) + { + this.motionY += diffY / 10D; + } + if (Math.abs(diffZ) > Math.abs(this.motionZ)) + { + this.motionZ += diffZ / 10D; + } + } + } + } + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + setEntityBoundingBox(getEntityBoundingBox().offset(this.motionX, this.motionY, this.motionZ)); + this.setRotation(this.rotationYaw, this.rotationPitch); + if (this.AIstate == AISTATE_MINING && this.ticksExisted % 2 == 0) + { + this.prepareMoveClient(TEMPFAST ? 8 : 1, 2); + } + + // Sound updates on client + if (this.AIstate < AISTATE_ATBASE) + { + this.stopRocketSound(); + } + return; + } + + if (this.toAddToServer) + { + this.toAddToServer = false; + this.serverIndex = AsteroidsTickHandlerServer.monitorMiner(this); + } + + // SERVER CODE + if (this.ticksExisted % 10 == 0 || this.flagLink) + { + this.flagLink = false; + this.checkPlayer(); + if (posBase.blockExists(this.world)) + { + TileEntity tileEntity = posBase.getTileEntity(this.world); + if (tileEntity instanceof TileEntityMinerBase && ((TileEntityMinerBase) tileEntity).isMaster && !tileEntity.isInvalid()) + { + // Create link with base on loading the EntityAstroMiner + UUID linker = ((TileEntityMinerBase) tileEntity).getLinkedMiner(); + if (!this.getUniqueID().equals(linker)) + { + if (linker == null) + { + ((TileEntityMinerBase) tileEntity).linkMiner(this); + } else + { + this.freeze(FAIL_ANOTHERWASLINKED); + return; + } + } else if (((TileEntityMinerBase) tileEntity).linkedMiner != this) + { + ((TileEntityMinerBase) tileEntity).linkMiner(this); + } + } else + { + if (this.playerMP != null && (this.givenFailMessage & (1 << FAIL_BASEDESTROYED)) == 0) + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner" + FAIL_BASEDESTROYED + ".fail"))); + this.givenFailMessage += (1 << FAIL_BASEDESTROYED); + // Continue mining even though base was destroyed - + // maybe it will be replaced + } + } + } + } else if (this.flagCheckPlayer) + { + this.checkPlayer(); + } + + if (this.playerMP == null) + { + // Go into dormant state if player is offline + // but do not actually set the dormant state on the server, so can + // resume immediately if player comes online + if (this.motionX != 0 || this.motionY != 0 || this.motionZ != 0) + { + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + GalacticraftCore.packetPipeline.sendToDimension(new PacketDynamic(this), GCCoreUtil.getDimensionID(this.world)); + } + return; + } + + if (this.lastFacing != this.facingAI) + { + this.lastFacing = this.facingAI; + this.prepareMove(12, 0); + this.prepareMove(12, 1); + this.prepareMove(12, 2); + } + + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + + if (this.AIstate > AISTATE_ATBASE) + { + if (this.energyLevel <= 0) + { + this.freeze(FAIL_OUTOFENERGY); + } else if (!(this.world.provider instanceof WorldProviderAsteroids) && this.ticksExisted % 2 == 0) + { + this.energyLevel--; + } + // No energy consumption when moving in space in Asteroids dimension + // (this reduces the risk of the Astro Miner becoming stranded!) + } + + switch (this.AIstate) + { + case AISTATE_STUCK: + // TODO blinking distress light or something? + // Attempt to re-start every 30 seconds or so + if (this.ticksExisted % 600 == 0) + { + if ((this.givenFailMessage & 8) > 0) + { + // The base was destroyed - see if it has been replaced? + this.atBase(); + } else + { + // See if the return path has been unblocked, and give a + // small amount of backup energy to try to get home + this.AIstate = AISTATE_RETURNING; + if (this.energyLevel <= 0) + { + this.energyLevel = 20; + } + } + } + break; + case AISTATE_ATBASE: + this.atBase(); + break; + case AISTATE_TRAVELLING: + if (!this.moveToTarget()) + { + this.prepareMove(TEMPFAST ? 8 : 2, 2); + } + break; + case AISTATE_MINING: + if (!this.doMining() && this.ticksExisted % 2 == 0) + { + this.energyLevel--; + this.prepareMove(TEMPFAST ? 8 : 1, 2); + } + break; + case AISTATE_RETURNING: + this.moveToBase(); + this.prepareMove(TEMPFAST ? 8 : 4, 1); + break; + case AISTATE_DOCKING: + if (this.waypointBase != null) + { + this.speed = speedbase / 1.6; + this.rotSpeed = rotSpeedBase / 1.6F; + if (this.moveToPos(this.waypointBase, true)) + { + this.AIstate = AISTATE_ATBASE; + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + this.speed = speedbase; + this.rotSpeed = rotSpeedBase; + } + } else + { + GalacticraftPlanets.logger.error("AstroMiner missing base position: this is a bug."); + this.AIstate = AISTATE_STUCK; + } + break; + } + + GalacticraftCore.packetPipeline.sendToDimension(new PacketDynamic(this), GCCoreUtil.getDimensionID(this.world)); + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + setEntityBoundingBox(getEntityBoundingBox().offset(this.motionX, this.motionY, this.motionZ)); + + /* + * if (this.dataManager.get(this.timeSinceHit) > 0) { + * this.dataManager.set(this.timeSinceHit, + * Integer.valueOf(this.dataManager.get(this.timeSinceHit) - 1)); } if + * (this.dataManager.get(this.currentDamage) > 0) { + * this.dataManager.set(this.currentDamage, + * Integer.valueOf(this.dataManager.get(this.currentDamage) - 1)); } + */ + } + + private void checkPlayer() + { + if (this.playerMP == null) + { + if (this.playerUUID != null) + { + this.playerMP = PlayerUtil.getPlayerByUUID(this.playerUUID); + } + } else + { + if (!PlayerUtil.isPlayerOnline(this.playerMP)) + { + this.playerMP = null; + } + } + } + + private void freeze(int i) + { + this.AIstate = AISTATE_STUCK; + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + if (this.playerMP != null && (this.givenFailMessage & (1 << i)) == 0) + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner" + i + ".fail"))); + this.givenFailMessage += (1 << i); + } + } + + // packet with AIstate, energy, rotationP + Y, mining data count + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.AIstate = buffer.readInt(); + this.energyLevel = buffer.readInt(); + this.targetPitch = buffer.readFloat(); + this.targetYaw = buffer.readFloat(); + this.mineCount = buffer.readInt(); + int x = buffer.readInt(); + int y = buffer.readInt(); + int z = buffer.readInt(); + BlockPos pos = new BlockPos(x, y, z); + if (this.world.isBlockLoaded(pos)) + { + TileEntity tile = this.world.getTileEntity(pos); + if (tile instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tile).linkedMiner = this; + ((TileEntityMinerBase) tile).linkCountDown = 20; + } + } + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + return; + } + list.add(this.playerMP == null ? AISTATE_OFFLINE : this.AIstate); + list.add(this.energyLevel); + list.add(this.targetPitch); + list.add(this.targetYaw); + list.add(this.mineCount); + list.add(this.posBase.x); + list.add(this.posBase.y); + list.add(this.posBase.z); + } + + public void recall() + { + if (this.AIstate > this.AISTATE_ATBASE && this.AIstate < this.AISTATE_RETURNING) + { + AIstate = AISTATE_RETURNING; + this.pathBlockedCount = 0; + } + } + + private EnumFacing getFacingFromRotation() + { + if (this.rotationPitch > 45F) + { + return EnumFacing.UP; + } + if (this.rotationPitch < -45F) + { + return EnumFacing.DOWN; + } + float rY = this.rotationYaw % 360F; + // rotationYaw 5 90 4 270 2 180 3 0 + if (rY < 45F || rY > 315F) + { + return EnumFacing.SOUTH; + } + if (rY < 135F) + { + return EnumFacing.EAST; + } + if (rY < 225F) + { + return EnumFacing.NORTH; + } + return EnumFacing.WEST; + } + + private void atBase() + { + TileEntity tileEntity = posBase.getTileEntity(this.world); + + if (!(tileEntity instanceof TileEntityMinerBase) || tileEntity.isInvalid() || !((TileEntityMinerBase) tileEntity).isMaster) + { + this.freeze(FAIL_BASEDESTROYED); + return; + } + + TileEntityMinerBase minerBase = (TileEntityMinerBase) tileEntity; + // If it's successfully reached its base, clear all fail messages except + // number 6, which is that all mining areas are finished (see below) + this.givenFailMessage &= 64; + this.wayPoints.clear(); + + boolean somethingTransferred = true; + if (this.ticksExisted % 5 == 0) + { + somethingTransferred = this.emptyInventory(minerBase); + } + this.inventoryDrops = 0; + + // Recharge + if (minerBase.hasEnoughEnergyToRun && this.energyLevel < MAXENERGY) + { + this.energyLevel += 16; + minerBase.storage.extractEnergyGC(minerBase.storage.getMaxExtract(), false); + } + + // When fully charged, set off again + if (this.energyLevel >= MAXENERGY && !somethingTransferred && this.hasHoldSpace()) + { + this.energyLevel = MAXENERGY; + if (this.findNextTarget(minerBase)) + { + this.AIstate = AISTATE_TRAVELLING; + this.wayPoints.add(this.waypointBase.clone()); + this.mineCount = 0; + } else + { + if (this.playerMP != null && (this.givenFailMessage & 64) == 0) + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner6.fail"))); + this.givenFailMessage += 64; + } + } + } + } + + private boolean hasHoldSpace() + { + for (int i = 0; i < this.getSizeInventory(); i++) + { + if (this.stacks.get(i).isEmpty()) + { + return true; + } + } + return false; + } + + private boolean findNextTarget(TileEntityMinerBase minerBase) + { + // If mining has finished, or path has been blocked two or more times, + // try mining elsewhere + if (!this.minePoints.isEmpty() && this.pathBlockedCount < 2) + { + this.posTarget = this.minePoints.getFirst().clone(); + GalacticraftPlanets.logger.debug("Still mining at: " + posTarget.toString() + " Remaining shafts: " + this.minePoints.size()); + return true; + } + + // Target is completely mined: change target + this.posTarget = minerBase.findNextTarget(); + this.pathBlockedCount = 0; + + // No more mining targets, the whole area is mined + if (this.posTarget == null) + { + return false; + } + + GalacticraftPlanets.logger.debug("Miner target: " + posTarget.toString()); + + return true; + } + + /** + * @return True if reached a turning point + */ + private boolean moveToTarget() + { + if (this.energyLevel < this.RETURNENERGY || this.inventoryDrops > this.RETURNDROPS) + { + AIstate = AISTATE_RETURNING; + this.pathBlockedCount = 0; + return true; + } + + if (this.posTarget == null) + { + GalacticraftPlanets.logger.error("AstroMiner missing target: this is a bug."); + AIstate = AISTATE_STUCK; + return true; + } + + if (this.moveToPos(this.posTarget, false)) + { + AIstate = AISTATE_MINING; + wayPoints.add(this.posTarget.clone()); + this.setMinePoints(); + return true; + } + + return false; + } + + private void moveToBase() + { + if (this.wayPoints.size() == 0) + { + // When it gets there: stop and reverse in! + AIstate = AISTATE_DOCKING; + if (this.waypointBase != null) + { + // Teleport back to base in case of any serious problem + this.setPosition(this.waypointBase.x, this.waypointBase.y, this.waypointBase.z); + this.facingAI = this.baseFacing; + } + return; + } + + if (this.moveToPos(this.wayPoints.getLast(), true)) + { + this.wayPoints.removeLast(); + } + } + + private void setMinePoints() + { + // Still some areas left to mine from last visit (maybe it was full or + // out of power?) + if (this.minePoints.size() > 0) + { + return; + } + + BlockVec3 inFront = new BlockVec3(MathHelper.floor(this.posX + 0.5D), MathHelper.floor(this.posY + 1.5D), MathHelper.floor(this.posZ + 0.5D)); + int otherEnd = (this.world.provider instanceof WorldProviderAsteroids) ? this.MINE_LENGTH_AST : this.MINE_LENGTH; + if (this.baseFacing == EnumFacing.NORTH || this.baseFacing == EnumFacing.WEST) + { + otherEnd = -otherEnd; + } + switch (this.baseFacing) + { + case NORTH: + case SOUTH: + this.minePoints.add(inFront.clone().translate(0, 0, otherEnd)); + this.minePoints.add(inFront.clone().translate(4, 0, otherEnd)); + this.minePoints.add(inFront.clone().translate(4, 0, 0)); + this.minePoints.add(inFront.clone().translate(2, 3, 0)); + this.minePoints.add(inFront.clone().translate(2, 3, otherEnd)); + this.minePoints.add(inFront.clone().translate(-2, 3, otherEnd)); + this.minePoints.add(inFront.clone().translate(-2, 3, 0)); + this.minePoints.add(inFront.clone().translate(-4, 0, 0)); + this.minePoints.add(inFront.clone().translate(-4, 0, otherEnd)); + this.minePoints.add(inFront.clone().translate(-2, -3, otherEnd)); + this.minePoints.add(inFront.clone().translate(-2, -3, 0)); + this.minePoints.add(inFront.clone().translate(2, -3, 0)); + this.minePoints.add(inFront.clone().translate(2, -3, otherEnd)); + this.minePoints.add(inFront.clone().translate(0, 0, otherEnd)); + break; + case WEST: + case EAST: + this.minePoints.add(inFront.clone().translate(otherEnd, 0, 0)); + this.minePoints.add(inFront.clone().translate(otherEnd, 0, 4)); + this.minePoints.add(inFront.clone().translate(0, 0, 4)); + this.minePoints.add(inFront.clone().translate(0, 3, 2)); + this.minePoints.add(inFront.clone().translate(otherEnd, 3, 2)); + this.minePoints.add(inFront.clone().translate(otherEnd, 3, -2)); + this.minePoints.add(inFront.clone().translate(0, 3, -2)); + this.minePoints.add(inFront.clone().translate(0, 0, -4)); + this.minePoints.add(inFront.clone().translate(otherEnd, 0, -4)); + this.minePoints.add(inFront.clone().translate(otherEnd, -3, -2)); + this.minePoints.add(inFront.clone().translate(0, -3, -2)); + this.minePoints.add(inFront.clone().translate(0, -3, 2)); + this.minePoints.add(inFront.clone().translate(otherEnd, -3, 2)); + this.minePoints.add(inFront.clone().translate(otherEnd, 0, 0)); + break; + } + } + + /** + * @return True if reached a turning point + */ + private boolean doMining() + { + if (this.energyLevel < this.RETURNENERGY || this.inventoryDrops > this.RETURNDROPS || this.minePoints.size() == 0) + { + if (this.minePoints.size() > 0 && this.minePointCurrent != null) + { + this.minePoints.addFirst(this.minePointCurrent); + } + AIstate = AISTATE_RETURNING; + this.pathBlockedCount = 0; + GalacticraftPlanets.logger.debug("Miner going home: " + this.posBase.toString() + " " + this.minePoints.size() + " shafts still to be mined"); + return true; + } + + if (this.moveToPos(this.minePoints.getFirst(), false)) + { + this.minePointCurrent = this.minePoints.removeFirst(); + GalacticraftPlanets.logger.debug("Miner mid mining: " + this.minePointCurrent.toString() + " " + this.minePoints.size() + " shafts still to be mined"); + return true; + } + return false; + } + + private void tryBackIn() + { + if (this.waypointBase.distanceSquared(new BlockVec3(this)) <= 9.1D) + { + this.AIstate = AISTATE_DOCKING; + switch (this.baseFacing) + { + case NORTH: + this.targetYaw = 180; + break; + case SOUTH: + this.targetYaw = 0; + break; + case WEST: + this.targetYaw = 270; + break; + case EAST: + this.targetYaw = 90; + break; + } + } else + { + this.freeze(FAIL_RETURNPATHBLOCKED); + } + } + + /** + * Mine out the area in front of the miner (dist blocks from miner centre) + * + * @param limit Maximum block count to be mined this tick + * @param dist + * @return True if the mining failed (meaning the miner's path is blocked) + */ + private boolean prepareMove(int limit, int dist) + { + if (this.mineCountDown > 0) + { + this.mineCountDown--; + return false; + } + BlockVec3 inFront = new BlockVec3(MathHelper.floor(this.posX + 0.5D), MathHelper.floor(this.posY + 1.5D), MathHelper.floor(this.posZ + 0.5D)); + if (dist == 2) + { + inFront.translate(headings2[this.facingAI.getIndex()]); + } else + { + if ((this.facingAI.getIndex() & 1) == EnumFacing.DOWN.getIndex()) + { + dist++; + } + if (dist > 0) + { + inFront.translate(headings[this.facingAI.getIndex()].clone().scale(dist)); + } + } + + if (!inFront.equals(this.mineLast) && this.AIstate != AISTATE_ATBASE) + { + this.mineCountDown = 3; + this.mineLast = inFront; + return false; + } + + int x = inFront.x; + int y = inFront.y; + int z = inFront.z; + + // Test not trying to mine own dock! + if (y == this.waypointBase.y && x == this.waypointBase.x - ((this.baseFacing == EnumFacing.EAST) ? 1 : 0) && z == this.waypointBase.z - ((this.baseFacing == EnumFacing.SOUTH) ? 1 : 0)) + { + this.tryBackIn(); + return false; + } + boolean wayBarred = false; + this.tryBlockLimit = limit; + + // Check not obstructed by something immovable e.g. bedrock + // Mine out the 12 blocks in front of it in direction of travel when + // getting close + // There are 12 blocks around ... and 12 in front. One block per tick? + // (That means can move at 5/6 block per second when mining, and 1.67 + // bps when traveling) + BlockPos pos = new BlockPos(x, y, z); + switch (EnumFacing.byIndex(this.facingAI.getIndex() & 6)) + { + case DOWN: + if (tryMineBlock(pos)) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(1, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(1, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, -2))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, -2))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-2, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-2, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, 1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, 1))) + { + wayBarred = true; + } + break; + case NORTH: + if (tryMineBlock(pos.add(0, -2, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, -2, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(1, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-2, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(1, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-2, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos)) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 0, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(-1, 1, 0))) + { + wayBarred = true; + } + break; + case WEST: + if (tryMineBlock(pos.add(0, -2, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, +1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -1, -2))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, 1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, -2))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 0, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, -2, 0))) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 1, -1))) + { + wayBarred = true; + } + if (tryMineBlock(pos)) + { + wayBarred = true; + } + if (tryMineBlock(pos.add(0, 1, 0))) + { + wayBarred = true; + } + break; + } + + // If it is obstructed, return to base, or stand still if that is + // impossible + if (wayBarred) + { + if (this.playerMP != null && blockingBlock.block != Blocks.AIR) + { + if (blockingBlock.block == Blocks.STONE) + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner1_a.fail") + " " + GCCoreUtil.translate("gui.message.astro_miner1_b.fail"))); + } else + { + this.playerMP.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner1_a.fail") + " " + GCCoreUtil.translate(EntityAstroMiner.blockingBlock.toString()))); + } + } + this.motionX = 0; + this.motionY = 0; + this.motionZ = 0; + this.tryBlockLimit = 0; + if (this.AIstate == AISTATE_TRAVELLING) + { + this.AIstate = AISTATE_RETURNING; + } else if (AIstate == AISTATE_MINING) + { + this.pathBlockedCount++; + this.AIstate = AISTATE_RETURNING; + } else if (this.AIstate == AISTATE_RETURNING) + { + this.tryBackIn(); + } else + { + this.freeze(FAIL_RETURNPATHBLOCKED); + } + blockingBlock = new BlockTuple(Blocks.AIR, 0); + } + + if (this.tryBlockLimit == limit && !this.noSpeedup) + { + this.motionX *= this.speedup; + this.motionY *= this.speedup; + this.motionZ *= this.speedup; + } + + return wayBarred; + } + + private boolean prepareMoveClient(int limit, int dist) + { + BlockVec3 inFront = new BlockVec3(MathHelper.floor(this.posX + 0.5D), MathHelper.floor(this.posY + 1.5D), MathHelper.floor(this.posZ + 0.5D)); + if (dist == 2) + { + inFront.translate(headings2[this.facing.getIndex()]); + } else + { + if ((this.facing.getIndex() & 1) == EnumFacing.DOWN.getIndex()) + { + dist++; + } + if (dist > 0) + { + inFront.translate(headings[this.facing.getIndex()].clone().scale(dist)); + } + } + if (inFront.equals(this.mineLast)) + { + return false; + } + + int x = inFront.x; + int y = inFront.y; + int z = inFront.z; + + boolean wayBarred = false; + this.tryBlockLimit = limit; + + // Check not obstructed by something immovable e.g. bedrock + // Mine out the 12 blocks in front of it in direction of travel when + // getting close + // There are 12 blocks around ... and 12 in front. One block per tick? + // (That means can move at 5/6 block per second when mining, and 1.67 + // bps when traveling) + BlockPos pos = new BlockPos(x, y, z); + switch (EnumFacing.byIndex(this.facing.getIndex() & 6)) + { + case DOWN: + if (tryBlockClient(pos)) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(1, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(1, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, -2))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, -2))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-2, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-2, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, 1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, 1))) + { + wayBarred = true; + } + break; + case NORTH: + if (tryBlockClient(pos.add(0, -2, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, -2, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(1, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-2, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(1, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-2, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos)) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 0, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(-1, 1, 0))) + { + wayBarred = true; + } + break; + case WEST: + if (tryBlockClient(pos.add(0, -2, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, +1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -1, -2))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, 1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, -2))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 0, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, -2, 0))) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 1, -1))) + { + wayBarred = true; + } + if (tryBlockClient(pos)) + { + wayBarred = true; + } + if (tryBlockClient(pos.add(0, 1, 0))) + { + wayBarred = true; + } + break; + } + + // If it is obstructed, return to base, or stand still if that is + // impossible + if (wayBarred) + { + this.tryBlockLimit = 0; + } + + if (this.tryBlockLimit == limit) + { + this.mineLast = inFront; + } + + return wayBarred; + } + + private boolean tryMineBlock(BlockPos pos) + { + // Check things to avoid in front of it (see static list for list) + // including base type things + // Can move through liquids including flowing lava + IBlockState state = this.world.getBlockState(pos); + Block b = state.getBlock(); + if (b.getMaterial(state) == Material.AIR) + { + return false; + } + if (noMineList.contains(b)) + { + blockingBlock.block = b; + blockingBlock.meta = b.getMetaFromState(state); + return true; + } + if (b instanceof BlockLiquid) + { + if ((b == Blocks.LAVA || b == Blocks.FLOWING_LAVA) && state.getValue(BlockLiquid.LEVEL) == 0 && this.AIstate != AISTATE_RETURNING) + { + blockingBlock.block = Blocks.LAVA; + blockingBlock.meta = 0; + return true; + } + return false; + } + if (b instanceof IFluidBlock) + { + return false; + } + + boolean gtFlag = false; + if (b != GCBlocks.fallenMeteor) + { + if (b instanceof IPlantable && b != Blocks.TALLGRASS && b != Blocks.DEADBUSH && b != Blocks.DOUBLE_PLANT && b != Blocks.WATERLILY && !(b instanceof BlockFlower) && b != Blocks.REEDS) + { + blockingBlock.block = b; + blockingBlock.meta = b.getMetaFromState(state); + return true; + } + int meta = b.getMetaFromState(state); + if (b.getBlockHardness(state, this.world, pos) < 0) + { + blockingBlock.block = b; + blockingBlock.meta = meta; + return true; + } + if (b.hasTileEntity(state)) + { + if (CompatibilityManager.isGTLoaded() && gregTechCheck(b)) + { + gtFlag = true; + } else + { + blockingBlock.block = b; + blockingBlock.meta = meta; + return true; + } + } + } + + if (this.tryBlockLimit == 0) + { + return false; + } + int result = ForgeHooks.onBlockBreakEvent(this.world, this.playerMP.interactionManager.getGameType(), this.playerMP, pos); + if (result < 0) + { + blockingBlock.block = Blocks.STONE; + blockingBlock.meta = 0; + return true; + } + + this.tryBlockLimit--; + + // Collect the mined block - unless it's a plant or leaves in which case + // just break it + if (!((b instanceof IPlantable && !(b instanceof BlockReed)) || b instanceof BlockLeaves)) + { + ItemStack drops = gtFlag ? getGTDrops(this.world, pos, b) : getPickBlock(this.world, pos, b); + if (drops != null && !this.addToInventory(drops)) + { + // drop itemstack if AstroMiner can't hold it + dropStack(pos, drops); + } + } + + this.world.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); + return false; + } + + private void dropStack(BlockPos pos, ItemStack drops) + { + float f = 0.7F; + double d0 = this.world.rand.nextFloat() * f + (1.0F - f) * 0.5D; + double d1 = this.world.rand.nextFloat() * f + (1.0F - f) * 0.5D; + double d2 = this.world.rand.nextFloat() * f + (1.0F - f) * 0.5D; + EntityItem entityitem = new EntityItem(this.world, pos.getX() + d0, pos.getY() + d1, pos.getZ() + d2, drops); + entityitem.setDefaultPickupDelay(); + this.world.spawnEntity(entityitem); + this.inventoryDrops++; + } + + private boolean gregTechCheck(Block b) + { + Class clazz = CompatibilityManager.classGTOre; + return clazz != null && clazz.isInstance(b); + } + + private ItemStack getGTDrops(World w, BlockPos pos, Block b) + { + List array = b.getDrops(w, pos, b.getDefaultState(), 1); + if (array != null && array.size() > 0) + { + return array.get(0); + } + return ItemStack.EMPTY; + } + + private boolean tryBlockClient(BlockPos pos) + { + BlockVec3 bv = new BlockVec3(pos.getX(), pos.getY(), pos.getZ()); + if (this.laserBlocks.contains(bv)) + { + return false; + } + + // Add minable blocks to the laser fx list + IBlockState state = this.world.getBlockState(pos); + Block b = state.getBlock(); + if (b.getMaterial(state) == Material.AIR) + { + return false; + } + if (noMineList.contains(b)) + { + return true; + } + if (b instanceof BlockLiquid) + { + return false; + } + if (b instanceof IFluidBlock) + { + return false; + } + if (b instanceof IPlantable) + { + return true; + } + if (b.hasTileEntity(state) || b.getBlockHardness(state, this.world, pos) < 0) + { + return true; + } + if (this.tryBlockLimit == 0) + { + return false; + } + + this.tryBlockLimit--; + + this.laserBlocks.add(bv); + this.laserTimes.add(this.ticksExisted); + return false; + } + + public void removeLaserBlocks(int removeCount) + { + for (int i = 0; i < removeCount; i++) + { + this.laserBlocks.removeFirst(); + this.laserTimes.removeFirst(); + } + } + + private ItemStack getPickBlock(World world, BlockPos pos, Block b) + { + if (b == GCBlocks.fallenMeteor) + { + return new ItemStack(GCItems.meteoricIronRaw); + } + if (b instanceof BlockSpaceGlass) + { + return b.getDrops(world, pos, b.getDefaultState(), 0).get(0); + } + + int i = 0; + Item item = Item.getItemFromBlock(b); + + if (item == null) + { + GalacticraftPlanets.logger.info("AstroMiner was unable to mine anything from: " + b.getTranslationKey()); + return null; + } + + if (item.getHasSubtypes()) + { + i = b.getMetaFromState(world.getBlockState(pos)); + } + + return new ItemStack(item, 1, i); + } + + private boolean addToInventory(ItemStack itemstack) + { + boolean flag1 = false; + int k = 0; + int invSize = this.getSizeInventory(); + + ItemStack itemstack1; + + if (itemstack.isStackable()) + { + while (!itemstack.isEmpty() && k < invSize) + { + itemstack1 = this.stacks.get(k); + + if (RecipeUtil.stacksMatch(itemstack, itemstack1)) + { + int l = itemstack1.getCount() + itemstack.getCount(); + + if (l <= itemstack.getMaxStackSize()) + { + itemstack.setCount(0); + itemstack1.setCount(l); + flag1 = true; + } else if (itemstack1.getCount() < itemstack.getMaxStackSize()) + { + itemstack.shrink(itemstack.getMaxStackSize() - itemstack1.getCount()); + itemstack1.setCount(itemstack.getMaxStackSize()); + flag1 = true; + } + } + + ++k; + } + } + + if (!itemstack.isEmpty()) + { + k = 0; + + while (k < invSize) + { + itemstack1 = this.stacks.get(k); + + if (itemstack1.isEmpty()) + { + this.stacks.set(k, itemstack.copy()); + itemstack.setCount(0); + flag1 = true; + break; + } + + ++k; + } + } + + if (flag1) + { + this.markDirty(); + this.mineCount++; + } + return flag1; + } + + /** + * Logic to move the miner to a given position + * + * @param pos + * @param reverse True if returning home (re-use same tunnels) + * @return False while the miner is en route, True when the position is + * reached + */ + private boolean moveToPos(BlockVec3 pos, boolean reverse) + { + this.noSpeedup = false; + + if (reverse != (this.baseFacing.getIndex() < 4)) + { + if (this.posZ > pos.z + 0.0001D || this.posZ < pos.z - 0.0001D) + { + this.moveToPosZ(pos.z, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving Z to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else if (this.posY > pos.y - 0.9999D || this.posY < pos.y - 1.0001D) + { + this.moveToPosY(pos.y - 1, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving Y to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else if (this.posX > pos.x + 0.0001D || this.posX < pos.x - 0.0001D) + { + this.moveToPosX(pos.x, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving X to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else + { + return true; + } + // got there + } else + { + if (this.posX > pos.x + 0.0001D || this.posX < pos.x - 0.0001D) + { + this.moveToPosX(pos.x, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving X to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else if (this.posY > pos.y - 0.9999D || this.posY < pos.y - 1.0001D) + { + this.moveToPosY(pos.y - 1, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving Y to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else if (this.posZ > pos.z + 0.0001D || this.posZ < pos.z - 0.0001D) + { + this.moveToPosZ(pos.z, stopForTurn); + if (TEMPDEBUG) + { + GalacticraftPlanets.logger.debug("At " + posX + "," + posY + "," + posZ + "Moving Z to " + pos.toString() + + (stopForTurn ? " : Stop for turn " + this.rotationPitch + "," + this.rotationYaw + " | " + this.targetPitch + "," + this.targetYaw : "")); + } + } else + { + return true; + } + // got there + } + + return false; + } + + private void moveToPosX(int x, boolean stopForTurn) + { + this.targetPitch = 0; + + if (this.posX > x) + { + if (this.AIstate != AISTATE_DOCKING) + { + this.targetYaw = 270; + } + this.motionX = -this.speed; + // TODO some acceleration and deceleration + if (this.motionX * speedup <= x - this.posX) + { + this.motionX = x - this.posX; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.WEST; + } else + { + if (this.AIstate != AISTATE_DOCKING) + { + this.targetYaw = 90; + } + this.motionX = this.speed; + if (this.motionX * speedup >= x - this.posX) + { + this.motionX = x - this.posX; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.EAST; + } + + if (stopForTurn) + { + this.motionX = 0; + } + + this.motionY = 0; + this.motionZ = 0; + } + + private void moveToPosY(int y, boolean stopForTurn) + { + if (this.posY > y) + { + this.targetPitch = -90; + this.motionY = -this.speed; + if (this.motionY * speedup <= y - this.posY) + { + this.motionY = y - this.posY; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.DOWN; + } else + { + this.targetPitch = 90; + this.motionY = this.speed; + if (this.motionY * speedup >= y - this.posY) + { + this.motionY = y - this.posY; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.UP; + } + + if (stopForTurn) + { + this.motionY = 0; + } + + this.motionX = 0; + this.motionZ = 0; + } + + private void moveToPosZ(int z, boolean stopForTurn) + { + this.targetPitch = 0; + + if (this.posZ > z) + { + if (this.AIstate != AISTATE_DOCKING) + { + this.targetYaw = 180; + } + this.motionZ = -this.speed; + // TODO some acceleration and deceleration + if (this.motionZ * speedup <= z - this.posZ) + { + this.motionZ = z - this.posZ; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.NORTH; + } else + { + if (this.AIstate != AISTATE_DOCKING) + { + this.targetYaw = 0; + } + this.motionZ = this.speed; + if (this.motionZ * speedup >= z - this.posZ) + { + this.motionZ = z - this.posZ; + this.noSpeedup = true; + } + this.facingAI = EnumFacing.SOUTH; + } + + if (stopForTurn) + { + this.motionZ = 0; + } + + this.motionY = 0; + this.motionX = 0; + } + + private boolean checkRotation() + { + boolean flag = true; + // Handle the turns when it changes direction + if (this.rotationPitch > this.targetPitch + 0.001F || this.rotationPitch < this.targetPitch - 0.001F) + { + if (this.rotationPitch > this.targetPitch + 180) + { + this.rotationPitch -= 360; + } else if (this.rotationPitch < this.targetPitch - 180) + { + this.rotationPitch += 360; + } + + if (this.rotationPitch > this.targetPitch) + { + this.rotationPitch -= this.rotSpeed; + if (this.rotationPitch < this.targetPitch) + { + this.rotationPitch = this.targetPitch; + } + } else + { + this.rotationPitch += this.rotSpeed; + if (this.rotationPitch > this.targetPitch) + { + this.rotationPitch = this.targetPitch; + } + } + } + + if (this.rotationYaw > this.targetYaw + 0.001F || this.rotationYaw < this.targetYaw - 0.001F) + { + if (this.rotationYaw > this.targetYaw + 180) + { + this.rotationYaw -= 360; + } else if (this.rotationYaw < this.targetYaw - 180) + { + this.rotationYaw += 360; + } + + if (this.rotationYaw > this.targetYaw) + { + this.rotationYaw -= this.rotSpeed; + if (this.rotationYaw < this.targetYaw) + { + this.rotationYaw = this.targetYaw; + } + } else + { + this.rotationYaw += this.rotSpeed; + if (this.rotationYaw > this.targetYaw) + { + this.rotationYaw = this.targetYaw; + } + } + flag = false; + } + + return flag; + } + + /** + * x y z should be the mid-point of the 4 base blocks + * + * @param world + * @param x + * @param y + * @param z + * @param facing + * @param base + * @return + */ + public static boolean spawnMinerAtBase(World world, int x, int y, int z, EnumFacing facing, BlockVec3 base, EntityPlayerMP player) + { + if (world.isRemote) + { + return true; + } + final EntityAstroMiner miner = new EntityAstroMiner(world, NonNullList.withSize(EntityAstroMiner.INV_SIZE, ItemStack.EMPTY), 0); + miner.setPlayer(player); + if (player.capabilities.isCreativeMode) + { + miner.spawnedInCreative = true; + } + miner.waypointBase = new BlockVec3(x, y, z).modifyPositionFromSide(facing, 1); + miner.setPosition(miner.waypointBase.x, miner.waypointBase.y - 1, miner.waypointBase.z); + miner.baseFacing = facing; + miner.facingAI = facing; + miner.lastFacing = facing; + miner.motionX = 0; + miner.motionY = 0; + miner.motionZ = 0; + miner.targetPitch = 0; + switch (facing) + { + case NORTH: + miner.targetYaw = 180; + break; + case SOUTH: + miner.targetYaw = 0; + break; + case WEST: + miner.targetYaw = 270; + break; + case EAST: + miner.targetYaw = 90; + break; + } + miner.rotationPitch = miner.targetPitch; + miner.rotationYaw = miner.targetYaw; + miner.setBoundingBoxForFacing(); + miner.AIstate = AISTATE_ATBASE; + miner.posBase = base; + + // Increase motion speed when moving in empty space between asteroids + miner.speedup = (world.provider instanceof WorldProviderAsteroids) ? SPEEDUP * 2.2D : SPEEDUP; + + // Clear blocks, and test to see if its movement area in front of the + // base is blocked + if (miner.prepareMove(12, 0)) + { + miner.isDead = true; + return false; + } + if (miner.prepareMove(12, 1)) + { + miner.isDead = true; + return false; + } + if (miner.prepareMove(12, 2)) + { + miner.isDead = true; + return false; + } + + world.spawnEntity(miner); + miner.flagLink = true; + return true; + } + + public void setPlayer(EntityPlayerMP player) + { + this.playerMP = player; + this.playerUUID = player.getUniqueID(); + } + + private void setBoundingBoxForFacing() + { + float xsize = cWIDTH; + float ysize = cWIDTH; + float zsize = cWIDTH; + switch (this.facing) + { + case DOWN: + case UP: + ysize = cLENGTH; + break; + case NORTH: + case SOUTH: + ysize = cHEIGHT; + zsize = cLENGTH; + break; + case WEST: + case EAST: + ysize = cHEIGHT; + xsize = cLENGTH; + break; + } + this.width = Math.max(xsize, zsize); + this.height = ysize; + this.setEntityBoundingBox( + new AxisAlignedBB(this.posX - xsize / 2D, this.posY + 1D - ysize / 2D, this.posZ - zsize / 2D, this.posX + xsize / 2D, this.posY + 1D + ysize / 2D, this.posZ + zsize / 2D)); + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + if (this.isDead || par1DamageSource.equals(DamageSource.CACTUS)) + { + return true; + } + + if (!this.world.isRemote) + { + Entity e = par1DamageSource.getTrueSource(); + + // If creative mode player, kill the entity (even if player owner is + // offline) and drop nothing + if (e instanceof EntityPlayer && ((EntityPlayer) e).capabilities.isCreativeMode) + { + if (this.playerMP == null && !this.spawnedInCreative) + { + ((EntityPlayer) e).sendMessage(new TextComponentString("WARNING: that Astro Miner belonged to an offline player, cannot reset player's Astro Miner count.")); + } + this.setDead(); + return true; + } + + // Invulnerable to mobs + if (this.isEntityInvulnerable() || (e instanceof EntityLivingBase && !(e instanceof EntityPlayer))) + { + return false; + } else + { + this.markVelocityChanged(); +// this.dataManager.set(this.timeSinceHit, Integer.valueOf(10)); +// this.dataManager.set(this.currentDamage, Integer.valueOf((int) (this.dataManager.get(this.currentDamage) + par2 * 10))); + this.shipDamage += par2 * 10; + + if (e instanceof EntityPlayer) + { + this.shipDamage += par2 * 21; +// this.dataManager.set(this.currentDamage, 100); + } + + if (this.shipDamage > 90) + { + this.setDead(); + this.dropShipAsItem(); + return true; + } + + return true; + } + } else + { + return true; + } + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; // AstroMiners aren't stopped by any other entity + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return this.getEntityBoundingBox().shrink(0.1D); + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public void performHurtAnimation() + { +// this.dataManager.set(this.timeSinceHit, Integer.valueOf(10)); +// this.dataManager.set(this.currentDamage, Integer.valueOf(this.dataManager.get(this.currentDamage) * 5)); + } + + public float getDamage() + { + return this.dataManager.get(DAMAGE); + } + + public void setDamage(float p_70492_1_) + { + this.dataManager.set(DAMAGE, Float.valueOf(p_70492_1_)); + } + + @Override + public void setLocationAndAngles(double x, double y, double z, float rotYaw, float rotPitch) + { + this.minecartX = x; + this.minecartY = y; + this.minecartZ = z; + super.setLocationAndAngles(x, y, z, rotYaw, rotPitch); + } + + @SideOnly(Side.CLIENT) + @Override + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + this.minecartX = x; + this.minecartY = y; + this.minecartZ = z; + this.minecartYaw = y; + this.minecartPitch = pitch; + this.turnProgress = 0; + this.motionX = this.velocityX; + this.motionY = this.velocityY; + this.motionZ = this.velocityZ; + } + + @Override + @SideOnly(Side.CLIENT) + public void setVelocity(double p_70016_1_, double p_70016_3_, double p_70016_5_) + { + this.velocityX = this.motionX = p_70016_1_; + this.velocityY = this.motionY = p_70016_3_; + this.velocityZ = this.motionZ = p_70016_5_; + this.turnProgress = 0; + } + + @Override + protected void setSize(float p_70105_1_, float p_70105_2_) + { + this.setBoundingBoxForFacing(); + } + + @Override + public void setPosition(double p_70107_1_, double p_70107_3_, double p_70107_5_) + { + this.setEntityBoundingBox(this.getEntityBoundingBox().offset(p_70107_1_ - this.posX, p_70107_3_ - this.posY, p_70107_5_ - this.posZ)); + this.posX = p_70107_1_; + this.posY = p_70107_3_; + this.posZ = p_70107_5_; + } + + @Override + public void setDead() + { + if (!this.world.isRemote && this.playerMP != null) + { + GCPlayerStats stats = GCPlayerStats.get(this.playerMP); + if (!this.spawnedInCreative) + { + int astroCount = stats.getAstroMinerCount(); + if (astroCount > 0) + { + stats.setAstroMinerCount(stats.getAstroMinerCount() - 1); + } + } + AsteroidsTickHandlerServer.removeChunkData(stats, this); + } + + super.setDead(); + if (posBase != null) + { + TileEntity tileEntity = posBase.getTileEntity(this.world); + if (tileEntity instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tileEntity).unlinkMiner(); + } + } + + if (this.soundUpdater != null) + { + this.soundUpdater.update(); + } + } + + public boolean isEntityInvulnerable() + { + // Can't be damaged if its player is offline - it's in a fully dormant + // state + return this.playerMP == null; + } + + public List getItemsDropped(List droppedItems) + { + ItemStack rocket = new ItemStack(AsteroidsItems.astroMiner, 1, 0); + droppedItems.add(rocket); + for (int i = 0; i < this.stacks.size(); i++) + { + if (!this.stacks.get(i).isEmpty()) + { + droppedItems.add(this.stacks.get(i)); + } + this.stacks.set(i, ItemStack.EMPTY); + } + return droppedItems; + } + + public void dropShipAsItem() + { + if (this.world.isRemote) + { + return; + } + + for (final ItemStack item : this.getItemsDropped(new ArrayList())) + { + EntityItem entityItem = this.entityDropItem(item, 0); + + if (item.hasTagCompound()) + { + entityItem.getItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public ITickable getSoundUpdater() + { + return this.soundUpdater; + } + + @Override + @SideOnly(Side.CLIENT) + public ISound setSoundUpdater(EntityPlayerSP player) + { + this.soundUpdater = new SoundUpdaterMiner(player, this); + return (ISound) this.soundUpdater; + } + + public void stopRocketSound() + { + if (this.soundUpdater != null) + { + ((SoundUpdaterMiner) this.soundUpdater).stopRocketSound(); + } + this.soundToStop = false; + } + + @Override + public void transmitData(int[] data) + { + data[0] = (int) (this.posX); + data[1] = (int) (this.posY); + data[2] = (int) (this.posZ); + data[3] = this.energyLevel; + data[4] = this.AIstate; + } + + @Override + public void receiveData(int[] data, String[] str) + { + str[0] = ""; + str[1] = "x: " + data[0]; + str[2] = "y: " + data[1]; + str[3] = "z: " + data[2]; + int energyPerCent = data[3] / 120; + str[4] = GCCoreUtil.translate("gui.energy_storage.desc.1") + ": " + energyPerCent + "%"; + switch (data[4]) + { + case EntityAstroMiner.AISTATE_STUCK: + str[0] = GCCoreUtil.translate("gui.message.no_energy.name"); + break; + case EntityAstroMiner.AISTATE_ATBASE: + str[0] = GCCoreUtil.translate("gui.miner.docked"); + break; + case EntityAstroMiner.AISTATE_TRAVELLING: + str[0] = GCCoreUtil.translate("gui.miner.travelling"); + break; + case EntityAstroMiner.AISTATE_MINING: + str[0] = GCCoreUtil.translate("gui.miner.mining"); + break; + case EntityAstroMiner.AISTATE_RETURNING: + str[0] = GCCoreUtil.translate("gui.miner.returning"); + break; + case EntityAstroMiner.AISTATE_DOCKING: + str[0] = GCCoreUtil.translate("gui.miner.docking"); + break; + case EntityAstroMiner.AISTATE_OFFLINE: + str[0] = GCCoreUtil.translate("gui.miner.offline"); + break; + } + } + + @Override + public void adjustDisplay(int[] data) + { + GL11.glScalef(0.9F, 0.9F, 0.9F); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.stacks = NonNullList.withSize(INV_SIZE, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.stacks); + int itemCount = 0; + for (ItemStack stack : this.stacks) + { + itemCount += stack.getCount(); + } + this.mineCount = itemCount; + + if (nbt.hasKey("sindex")) + { + this.serverIndex = nbt.getInteger("sindex"); + } else + { + this.serverIndex = -1; + } + + if (nbt.hasKey("Energy")) + { + this.energyLevel = nbt.getInteger("Energy"); + } + if (nbt.hasKey("BaseX")) + { + this.posBase = new BlockVec3(nbt.getInteger("BaseX"), nbt.getInteger("BaseY"), nbt.getInteger("BaseZ")); + this.flagLink = true; + } + if (nbt.hasKey("TargetX")) + { + this.posTarget = new BlockVec3(nbt.getInteger("TargetX"), nbt.getInteger("TargetY"), nbt.getInteger("TargetZ")); + } + if (nbt.hasKey("WBaseX")) + { + this.waypointBase = new BlockVec3(nbt.getInteger("WBaseX"), nbt.getInteger("WBaseY"), nbt.getInteger("WBaseZ")); + } + if (nbt.hasKey("BaseFacing")) + { + this.baseFacing = EnumFacing.byIndex(nbt.getInteger("BaseFacing")); + } + if (nbt.hasKey("AIState")) + { + this.AIstate = nbt.getInteger("AIState"); + } + if (nbt.hasKey("Facing")) + { + this.facingAI = EnumFacing.byIndex(nbt.getInteger("Facing")); + switch (this.facingAI) + { + case NORTH: + this.targetYaw = 180; + break; + case SOUTH: + this.targetYaw = 0; + break; + case WEST: + this.targetYaw = 270; + break; + case EAST: + this.targetYaw = 90; + break; + } + } + this.lastFacing = null; + if (nbt.hasKey("WayPoints")) + { + this.wayPoints.clear(); + final NBTTagList wpList = nbt.getTagList("WayPoints", 10); + for (int j = 0; j < wpList.tagCount(); j++) + { + NBTTagCompound bvTag = wpList.getCompoundTagAt(j); + this.wayPoints.add(BlockVec3.readFromNBT(bvTag)); + } + } + if (nbt.hasKey("MinePoints")) + { + this.minePoints.clear(); + final NBTTagList mpList = nbt.getTagList("MinePoints", 10); + for (int j = 0; j < mpList.tagCount(); j++) + { + NBTTagCompound bvTag = mpList.getCompoundTagAt(j); + this.minePoints.add(BlockVec3.readFromNBT(bvTag)); + } + } + if (nbt.hasKey("MinePointCurrent")) + { + this.minePointCurrent = BlockVec3.readFromNBT(nbt.getCompoundTag("MinePointCurrent")); + } else + { + this.minePointCurrent = null; + } + if (nbt.hasKey("playerUUIDMost", 4) && nbt.hasKey("playerUUIDLeast", 4)) + { + this.playerUUID = new UUID(nbt.getLong("playerUUIDMost"), nbt.getLong("playerUUIDLeast")); + } else + { + this.playerUUID = null; + } + if (nbt.hasKey("speedup")) + { + this.speedup = nbt.getDouble("speedup"); + } else + { + this.speedup = (WorldUtil.getProviderForDimensionServer(this.dimension) instanceof WorldProviderAsteroids) ? SPEEDUP * 1.6D : SPEEDUP; + } + + this.pathBlockedCount = nbt.getInteger("pathBlockedCount"); + this.spawnedInCreative = nbt.getBoolean("spawnedInCreative"); + this.flagCheckPlayer = true; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + final NBTTagList var2 = new NBTTagList(); + + ItemStackHelper.saveAllItems(nbt, this.stacks); + + nbt.setTag("Items", var2); + nbt.setInteger("sindex", this.serverIndex); + nbt.setInteger("Energy", this.energyLevel); + if (this.posBase != null) + { + nbt.setInteger("BaseX", this.posBase.x); + nbt.setInteger("BaseY", this.posBase.y); + nbt.setInteger("BaseZ", this.posBase.z); + } + if (this.posTarget != null) + { + nbt.setInteger("TargetX", this.posTarget.x); + nbt.setInteger("TargetY", this.posTarget.y); + nbt.setInteger("TargetZ", this.posTarget.z); + } + if (this.waypointBase != null) + { + nbt.setInteger("WBaseX", this.waypointBase.x); + nbt.setInteger("WBaseY", this.waypointBase.y); + nbt.setInteger("WBaseZ", this.waypointBase.z); + } + nbt.setInteger("BaseFacing", this.baseFacing.getIndex()); + nbt.setInteger("AIState", this.AIstate); + nbt.setInteger("Facing", this.facingAI.getIndex()); + if (this.wayPoints.size() > 0) + { + NBTTagList wpList = new NBTTagList(); + for (int j = 0; j < this.wayPoints.size(); j++) + { + wpList.appendTag(this.wayPoints.get(j).writeToNBT(new NBTTagCompound())); + } + nbt.setTag("WayPoints", wpList); + } + if (this.minePoints.size() > 0) + { + NBTTagList mpList = new NBTTagList(); + for (int j = 0; j < this.minePoints.size(); j++) + { + mpList.appendTag(this.minePoints.get(j).writeToNBT(new NBTTagCompound())); + } + nbt.setTag("MinePoints", mpList); + } + if (this.minePointCurrent != null) + { + nbt.setTag("MinePointCurrent", this.minePointCurrent.writeToNBT(new NBTTagCompound())); + } + if (this.playerUUID != null) + { + nbt.setLong("playerUUIDMost", this.playerUUID.getMostSignificantBits()); + nbt.setLong("playerUUIDLeast", this.playerUUID.getLeastSignificantBits()); + } + nbt.setDouble("speedup", this.speedup); + nbt.setInteger("pathBlockedCount", this.pathBlockedCount); + nbt.setBoolean("spawnedInCreative", this.spawnedInCreative); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityEntryPod.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityEntryPod.java new file mode 100644 index 00000000..7ecd2f25 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityEntryPod.java @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import java.util.Map; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.entities.IScaleableFuelLevel; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityEntryPod extends EntityLanderBase implements IScaleableFuelLevel, ICameraZoomEntity, IIgnoreShift +{ + + public EntityEntryPod(World var1) + { + super(var1); + this.setSize(1.5F, 3.0F); + } + + public EntityEntryPod(EntityPlayerMP player) + { + super(player, 0.0F); + this.setSize(1.5F, 3.0F); + } + + @Override + public double getInitialMotionY() + { + return -0.5F; + } + + @Override + public double getMountedYOffset() + { + return this.height - 2.0D; + } + + @Override + public float getRotateOffset() + { + // Signal no rotate + return -20.0F; + } + + @Override + public boolean shouldSpawnParticles() + { + return false; + } + + @Override + public Map getParticleMap() + { + return null; + } + + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + return null; + } + + @Override + public void tickOnGround() + { + + } + + @Override + public void tickInAir() + { + super.tickInAir(); + + if (this.world.isRemote) + { + if (!this.onGround) + { + this.motionY -= 0.002D; + } + } + } + + @Override + public void onGroundHit() + { + BlockPos pos = new BlockPos(this).up(2); + this.world.setBlockState(pos, GCBlocks.brightAir.getDefaultState(), 2); + } + + @Override + public Vector3 getMotionVec() + { + if (this.onGround) + { + return new Vector3(0, 0, 0); + } + + if (this.ticks >= 40 && this.ticks < 45) + { + this.motionY = this.getInitialMotionY(); + } + + return new Vector3(this.motionX, this.motionY, this.motionZ); + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public boolean pressKey(int key) + { + return false; + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.entry_pod.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return null; + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (!this.onGround) + { + return false; + } + + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + return true; + } + + if (this.getPassengers().isEmpty() && player instanceof EntityPlayerMP) + { + GCCoreUtil.openParachestInv((EntityPlayerMP) player, this); + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + return true; + } else + { + return true; + } + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return !this.onGround; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityGrapple.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityGrapple.java new file mode 100644 index 00000000..2f16d6c5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityGrapple.java @@ -0,0 +1,582 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import java.util.List; +import java.util.Objects; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IZeroGDimension; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStatsClient; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.network.PacketSimpleAsteroids; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityGrapple extends Entity implements IProjectile +{ + + private static final DataParameter PULLING_ENTITY_ID = EntityDataManager.createKey(EntityGrapple.class, DataSerializers.VARINT); + private static final DataParameter IS_PULLING = EntityDataManager.createKey(EntityGrapple.class, DataSerializers.BOOLEAN); + private static final DataParameter STRING_ITEM_STACK = EntityDataManager.createKey(EntityGrapple.class, DataSerializers.ITEM_STACK); + private BlockPos hitVec; + private Block hitBlock; + private int inData; + private boolean inGround; + public int canBePickedUp; + public int arrowShake; + public EntityPlayer shootingEntity; + private int ticksInGround; + private int ticksInAir; + public float rotationRoll; + public float prevRotationRoll; + public boolean pullingPlayer; + + public EntityGrapple(World par1World) + { + super(par1World); + this.ignoreFrustumCheck = false; +// this.yOffset = -1.5F; + this.setSize(0.75F, 0.75F); + } + + public EntityGrapple(World par1World, EntityPlayer shootingEntity, float par3, ItemStack stringStack) + { + super(par1World); + this.shootingEntity = shootingEntity; + this.setSize(0.75F, 0.75F); + + if (shootingEntity != null) + { + this.canBePickedUp = 1; + this.setLocationAndAngles(shootingEntity.posX, shootingEntity.posY + shootingEntity.getEyeHeight(), shootingEntity.posZ, shootingEntity.rotationYaw, shootingEntity.rotationPitch); + } + + this.motionX = -MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.motionZ = MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.motionY = -MathHelper.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES); + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; +// this.yOffset = -1.5F; + this.setPosition(this.posX, this.posY, this.posZ); + this.shoot(this.motionX, this.motionY, this.motionZ, par3 * 1.5F, 1.0F); + this.updateStringStack(stringStack); + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 10.0; + return distance < d0 * d0; + } + + @Override + public double getYOffset() + { + return -1.5F; + } + + @Override + protected void entityInit() + { + this.dataManager.register(PULLING_ENTITY_ID, 0); + this.dataManager.register(IS_PULLING, false); + this.dataManager.register(STRING_ITEM_STACK, new ItemStack(Items.STRING)); + } + + @Override + public void shoot(double par1, double par3, double par5, float par7, float par8) + { + float f2 = MathHelper.sqrt(par1 * par1 + par3 * par3 + par5 * par5); + par1 /= f2; + par3 /= f2; + par5 /= f2; + par1 += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * par8; + par3 += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * par8; + par5 += this.rand.nextGaussian() * (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * par8; + par1 *= par7; + par3 *= par7; + par5 *= par7; + this.motionX = par1; + this.motionY = par3; + this.motionZ = par5; + float f3 = MathHelper.sqrt(par1 * par1 + par5 * par5); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(par1, par5) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(par3, f3) * Constants.RADIANS_TO_DEGREES; + this.ticksInGround = 0; + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean b) + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + } + + @Override + public void setPosition(double x, double y, double z) + { + super.setPosition(x, y, z); + } + + @Override + @SideOnly(Side.CLIENT) + public void setVelocity(double par1, double par3, double par5) + { + this.motionX = par1; + this.motionY = par3; + this.motionZ = par5; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(par1 * par1 + par5 * par5); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(par1, par5) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(par3, f) * Constants.RADIANS_TO_DEGREES; + this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.ticksInGround = 0; + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + this.prevRotationRoll = this.rotationRoll; + + if (!this.world.isRemote) + { + this.updateShootingEntity(); + + if (this.getPullingEntity()) + { + EntityPlayer shootingEntity = this.getShootingEntity(); + if (shootingEntity != null) + { + double deltaPosition = this.getDistanceSq(shootingEntity); + + Vector3 mot = new Vector3(shootingEntity.motionX, shootingEntity.motionY, shootingEntity.motionZ); + + if (mot.getMagnitudeSquared() < 0.01 && this.pullingPlayer) + { + if (deltaPosition < 10) + { + this.onCollideWithPlayer(shootingEntity); + } + this.updatePullingEntity(false); + this.setDead(); + } + + this.pullingPlayer = true; + } + } + } else + { + if (this.getPullingEntity()) + { + EntityPlayer shootingEntity = this.getShootingEntity(); + if (shootingEntity != null) + { + shootingEntity.setVelocity((this.posX - shootingEntity.posX) / 12.0F, (this.posY - shootingEntity.posY) / 12.0F, (this.posZ - shootingEntity.posZ) / 12.0F); + if (shootingEntity.world.isRemote && shootingEntity.world.provider instanceof IZeroGDimension) + { + GCPlayerStatsClient stats = GCPlayerStatsClient.get(shootingEntity); + if (stats != null) + { + stats.getFreefallHandler().updateFreefall(shootingEntity); + } + } + } + } + } + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float) Math.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) Math.atan2(this.motionY, f) * Constants.RADIANS_TO_DEGREES; + } + + if (this.hitVec != null) + { + IBlockState state = this.world.getBlockState(this.hitVec); + + if (state.getMaterial() != Material.AIR) + { + AxisAlignedBB axisalignedbb = state.getBlock().getCollisionBoundingBox(state, this.world, this.hitVec); + + if (axisalignedbb != null && axisalignedbb.contains(new Vec3d(this.posX, this.posY, this.posZ))) + { + this.inGround = true; + } + } + } + + if (this.arrowShake > 0) + { + --this.arrowShake; + } + + if (this.inGround) + { + if (this.hitVec != null) + { + IBlockState state = this.world.getBlockState(this.hitVec); + Block block = state.getBlock(); + int j = block.getMetaFromState(state); + + if (block == this.hitBlock && j == this.inData) + { + if (this.shootingEntity != null) + { + this.shootingEntity.motionX = (this.posX - this.shootingEntity.posX) / 16.0F; + this.shootingEntity.motionY = (this.posY - this.shootingEntity.posY) / 16.0F; + this.shootingEntity.motionZ = (this.posZ - this.shootingEntity.posZ) / 16.0F; + if (this.shootingEntity instanceof EntityPlayerMP) + GalacticraftCore.handler.preventFlyingKicks((EntityPlayerMP) this.shootingEntity); + } + + if (!this.world.isRemote && this.ticksInGround < 5) + { + this.updatePullingEntity(true); + } + + ++this.ticksInGround; + + if (this.ticksInGround == 1200) + { + this.setDead(); + } + } else + { + this.inGround = false; + this.motionX *= this.rand.nextFloat() * 0.2F; + this.motionY *= this.rand.nextFloat() * 0.2F; + this.motionZ *= this.rand.nextFloat() * 0.2F; + this.ticksInGround = 0; + this.ticksInAir = 0; + } + } + } else + { + this.rotationRoll += 5; + ++this.ticksInAir; + + if (!this.world.isRemote) + { + this.updatePullingEntity(false); + } + + if (this.shootingEntity != null && this.getDistanceSq(this.shootingEntity) >= 40 * 40) + { + this.setDead(); + } + + Vec3d vec31 = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec3 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult movingobjectposition = this.world.rayTraceBlocks(vec31, vec3, false, true, false); + vec31 = new Vec3d(this.posX, this.posY, this.posZ); + vec3 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (movingobjectposition != null) + { + vec3 = new Vec3d(movingobjectposition.hitVec.x, movingobjectposition.hitVec.y, movingobjectposition.hitVec.z); + } + + Entity entity = null; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D, 1.0D, 1.0D)); + double d0 = 0.0D; + int i; + final double border = 0.3D; + + for (i = 0; i < list.size(); ++i) + { + Entity entity1 = list.get(i); + + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) + { + AxisAlignedBB axisalignedbb1 = entity1.getEntityBoundingBox().grow(border, border, border); + RayTraceResult movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3); + + if (movingobjectposition1 != null) + { + double d1 = vec31.distanceTo(movingobjectposition1.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) + { + movingobjectposition = new RayTraceResult(entity); + } + + if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer) movingobjectposition.entityHit; + + if (entityplayer.capabilities.disableDamage || this.shootingEntity != null && !this.shootingEntity.canAttackPlayer(entityplayer)) + { + movingobjectposition = null; + } + } + + float motion; + + if (movingobjectposition != null) + { + if (movingobjectposition.entityHit == null) + { + this.hitVec = movingobjectposition.getBlockPos(); + IBlockState state = this.world.getBlockState(this.hitVec); + this.hitBlock = state.getBlock(); + this.inData = state.getBlock().getMetaFromState(state); + this.motionX = (float) (movingobjectposition.hitVec.x - this.posX); + this.motionY = (float) (movingobjectposition.hitVec.y - this.posY); + this.motionZ = (float) (movingobjectposition.hitVec.z - this.posZ); + motion = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / motion * 0.05000000074505806D; + this.posY -= this.motionY / motion * 0.05000000074505806D; + this.posZ -= this.motionZ / motion * 0.05000000074505806D; + this.playSound(SoundEvents.ENTITY_ARROW_HIT, 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + + if (this.hitBlock.getMaterial(state) != Material.AIR) + { + this.hitBlock.onEntityCollision(this.world, this.hitVec, state, this); + } + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + motion = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float) Math.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + this.rotationPitch = (float) Math.atan2(this.motionY, motion) * Constants.RADIANS_TO_DEGREES; + + while (this.rotationPitch - this.prevRotationPitch < -180.0F) + { + this.prevRotationPitch -= 360.0F; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + + if (this.isInWater()) + { + float f4 = 0.25F; + for (int l = 0; l < 4; ++l) + { + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * f4, this.posY - this.motionY * f4, this.posZ - this.motionZ * f4, this.motionX, this.motionY, + this.motionZ); + } + + } + + if (this.isWet()) + { + this.extinguish(); + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.doBlockCollisions(); + } + + if (!this.world.isRemote && (this.ticksInGround - 1) % 10 == 0) + { + GalacticraftCore.packetPipeline + .sendToAllAround(new PacketSimpleAsteroids(PacketSimpleAsteroids.EnumSimplePacketAsteroids.C_UPDATE_GRAPPLE_POS, GCCoreUtil.getDimensionID(this.world), new Object[] + {this.getEntityId(), new Vector3(this)}), new NetworkRegistry.TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 150)); + } + } + + @Override + public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + if (this.hitVec != null) + { + par1NBTTagCompound.setShort("xTile", (short) this.hitVec.getX()); + par1NBTTagCompound.setShort("yTile", (short) this.hitVec.getY()); + par1NBTTagCompound.setShort("zTile", (short) this.hitVec.getZ()); + } + par1NBTTagCompound.setShort("life", (short) this.ticksInGround); + par1NBTTagCompound.setByte("inTile", (byte) Block.getIdFromBlock(this.hitBlock)); + par1NBTTagCompound.setByte("inData", (byte) this.inData); + par1NBTTagCompound.setByte("shake", (byte) this.arrowShake); + par1NBTTagCompound.setByte("inGround", (byte) (this.inGround ? 1 : 0)); + par1NBTTagCompound.setByte("pickup", (byte) this.canBePickedUp); + par1NBTTagCompound.setString("stringStack", Objects.requireNonNull(getStringItemStack().getItem().getRegistryName()).toString()); + } + + @Override + public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + if (par1NBTTagCompound.hasKey("xTile")) + { + this.hitVec = new BlockPos(par1NBTTagCompound.getShort("xTile"), par1NBTTagCompound.getShort("yTile"), par1NBTTagCompound.getShort("zTile")); + } + + this.ticksInGround = par1NBTTagCompound.getShort("life"); + this.hitBlock = Block.getBlockById(par1NBTTagCompound.getByte("inTile") & 255); + this.inData = par1NBTTagCompound.getByte("inData") & 255; + this.arrowShake = par1NBTTagCompound.getByte("shake") & 255; + this.inGround = par1NBTTagCompound.getByte("inGround") == 1; + + if (par1NBTTagCompound.hasKey("pickup", 99)) + { + this.canBePickedUp = par1NBTTagCompound.getByte("pickup"); + } else if (par1NBTTagCompound.hasKey("player", 99)) + { + this.canBePickedUp = par1NBTTagCompound.getBoolean("player") ? 1 : 0; + } + + if (par1NBTTagCompound.hasKey("stringStack")) + { + this.updateStringStack(new ItemStack(Objects.requireNonNull(ForgeRegistries.ITEMS.getValue(new ResourceLocation(par1NBTTagCompound.getString("stringStack")))))); + } else + { + this.updateStringStack(new ItemStack(Items.STRING)); + } + } + + @Override + public void onCollideWithPlayer(EntityPlayer entityPlayer) + { + if (!this.world.isRemote && this.inGround && this.arrowShake <= 0) + { + boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && entityPlayer.capabilities.isCreativeMode; + + if (this.canBePickedUp == 1 && getStringItemStack() != ItemStack.EMPTY && !entityPlayer.inventory.addItemStackToInventory(getStringItemStack())) + { + flag = false; + } + + if (flag) + { + this.playSound(SoundEvents.ENTITY_ITEM_PICKUP, 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + entityPlayer.onItemPickup(this, 1); + this.setDead(); + } + } + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + +// @Override +// @SideOnly(Side.CLIENT) +// public float getShadowSize() +// { +// return 0.0F; +// } + + @Override + public boolean canBeAttackedWithItem() + { + return false; + } + + private void updateShootingEntity() + { + if (this.shootingEntity != null) + { + this.dataManager.set(PULLING_ENTITY_ID, this.shootingEntity.getEntityId()); + } + } + + public EntityPlayer getShootingEntity() + { + Entity entity = this.world.getEntityByID(this.dataManager.get(PULLING_ENTITY_ID)); + + if (entity instanceof EntityPlayer) + { + return (EntityPlayer) entity; + } + + return null; + } + + public void updatePullingEntity(boolean pulling) + { + this.dataManager.set(IS_PULLING, pulling); + } + + public void updateStringStack(ItemStack stringStack) + { + this.dataManager.set(STRING_ITEM_STACK, stringStack); + } + + public boolean getPullingEntity() + { + return this.dataManager.get(IS_PULLING); + } + + public ItemStack getStringItemStack() + { + return this.dataManager.get(STRING_ITEM_STACK); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntitySmallAsteroid.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntitySmallAsteroid.java new file mode 100644 index 00000000..47a4e30c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntitySmallAsteroid.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.world.World; + +public class EntitySmallAsteroid extends Entity +{ + + private static final DataParameter SPIN_PITCH = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.FLOAT); + private static final DataParameter SPIN_YAW = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.FLOAT); + private static final DataParameter ASTEROID_TYPE = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.VARINT); + public float spinPitch; + public float spinYaw; + public int type; + private boolean firstUpdate = true; + + public EntitySmallAsteroid(World world) + { + super(world); + this.setSize(1.0F, 1.0F); + this.isImmuneToFire = true; + } + + @Override + public void onEntityUpdate() + { + if (!this.firstUpdate) + { + // Kill non-moving entities + if (Math.abs(this.posX - this.prevPosX) + Math.abs(this.posZ - this.prevPosZ) <= 0) + { + this.setDead(); + } + + // Remove entities far outside the build range, or too old (to stop + // accumulations) + else if (this.posY > 288D || this.posY < -32D || this.ticksExisted > 3000) + { + this.setDead(); + } + } + + super.onEntityUpdate(); + + if (!this.world.isRemote) + { + this.setSpinPitch(this.spinPitch); + this.setSpinYaw(this.spinYaw); + this.setAsteroidType(this.type); + this.rotationPitch += this.spinPitch; + this.rotationYaw += this.spinYaw; + } else + { + this.rotationPitch += this.getSpinPitch(); + this.rotationYaw += this.getSpinYaw(); + } + + double sqrdMotion = this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ; + + if (sqrdMotion < 0.05) + { + // If the motion is too low (for some odd reason), speed it back up + // slowly. + this.motionX *= 1.001D; + this.motionY *= 1.001D; + this.motionZ *= 1.001D; + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.firstUpdate = false; + } + + @Override + protected void entityInit() + { + this.dataManager.register(SPIN_PITCH, 0.0F); + this.dataManager.register(SPIN_YAW, 0.0F); + this.dataManager.register(ASTEROID_TYPE, 0); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + return compound; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + } + + public float getSpinPitch() + { + return this.dataManager.get(SPIN_PITCH); + } + + public float getSpinYaw() + { + return this.dataManager.get(SPIN_YAW); + } + + public void setSpinPitch(float pitch) + { + this.dataManager.set(SPIN_PITCH, pitch); + } + + public void setSpinYaw(float yaw) + { + this.dataManager.set(SPIN_YAW, yaw); + } + + public int getAsteroidType() + { + return this.dataManager.get(ASTEROID_TYPE); + } + + public void setAsteroidType(int type) + { + this.dataManager.set(ASTEROID_TYPE, type); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityTier3Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityTier3Rocket.java new file mode 100644 index 00000000..a6bf4fdc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/EntityTier3Rocket.java @@ -0,0 +1,328 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class EntityTier3Rocket extends EntityTieredRocket +{ + + public EntityTier3Rocket(World par1World) + { + super(par1World); + this.setSize(1.8F, 6F); + } + + public EntityTier3Rocket(World par1World, double par2, double par4, double par6, EnumRocketType rocketType) + { + super(par1World, par2, par4, par6); + this.rocketType = rocketType; + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + } + + public EntityTier3Rocket(World par1World, double par2, double par4, double par6, boolean reversed, EnumRocketType rocketType, NonNullList inv) + { + this(par1World, par2, par4, par6, rocketType); + this.stacks = inv; + } + + @Override + public double getYOffset() + { + return 1.5F; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(AsteroidsItems.tier3Rocket, 1, this.rocketType.getIndex()); + } + + @Override + protected void entityInit() + { + super.entityInit(); + } + + @Override + public double getMountedYOffset() + { + return 1.75D; + } + + @Override + public float getRotateOffset() + { + return 1.5F; + } + + @Override + public double getOnPadYOffset() + { + return 0.0D; + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + int i; + + if (this.timeUntilLaunch >= 100) + { + i = Math.abs(this.timeUntilLaunch / 100); + } else + { + i = 1; + } + + if ((this.getLaunched() || this.launchPhase == EnumLaunchPhase.IGNITED.ordinal() && this.rand.nextInt(i) == 0) && !ConfigManagerCore.disableSpaceshipParticles && this.hasValidFuel()) + { + if (this.world.isRemote) + { + this.spawnParticles(this.getLaunched()); + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal() && this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.LAUNCHED.ordinal()) + { + double d = this.timeSinceLaunch / 150; + + if (this.world.provider instanceof IGalacticraftWorldProvider && ((IGalacticraftWorldProvider) this.world.provider).hasNoAtmosphere()) + { + d = Math.min(d * 1.2, 2); + } else + { + d = Math.min(d, 1.4); + } + + if (d != 0.0) + { + this.motionY = -d * 2.5D * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES); + } + } else + { + this.motionY -= 0.008D; + } + + double multiplier = 1.0D; + + if (this.world.provider instanceof IGalacticraftWorldProvider) + { + multiplier = ((IGalacticraftWorldProvider) this.world.provider).getFuelUsageMultiplier(); + + if (multiplier <= 0) + { + multiplier = 1; + } + } + + if (this.timeSinceLaunch % MathHelper.floor(2 * (1 / multiplier)) == 0) + { + this.removeFuel(1); + if (!this.hasValidFuel()) + { + this.stopRocketSound(); + } + } + } else if (!this.hasValidFuel() && this.getLaunched() && !this.world.isRemote) + { + if (Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 10 != 0.0) + { + this.motionY -= Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 20; + } + } + } + + @Override + public void onTeleport(EntityPlayerMP player) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (this.stacks == null || this.stacks.isEmpty()) + { + stats.setRocketStacks(NonNullList.withSize(2, ItemStack.EMPTY)); + } else + { + stats.setRocketStacks(this.stacks); + } + + stats.setRocketType(this.rocketType.getIndex()); + stats.setRocketItem(AsteroidsItems.tier3Rocket); + stats.setFuelLevel(this.fuelTank.getFluidAmount()); + } + } + + protected void spawnParticles(boolean launched) + { + if (!this.isDead) + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double x1 = 3.2 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double z1 = 3.2 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double y1 = 3.2 * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null) + { + double modifier = this.posY - this.targetVec.getY(); + modifier = Math.max(modifier, 180.0); + x1 *= modifier / 200.0D; + y1 *= Math.min(modifier / 200.0D, 2.5D); + z1 *= modifier / 200.0D; + } + + final double y2 = this.prevPosY + (this.posY - this.prevPosY) + y1 - 0.75 * this.motionY - 0.3 + 1.2D; + + final double x2 = this.posX + x1 + this.motionX; + final double z2 = this.posZ + z1 + this.motionZ; + Vector3 motionVec = new Vector3(x1 + this.motionX, y1 + this.motionY, z1 + this.motionZ); + Vector3 d1 = new Vector3(y1 * 0.1D, -x1 * 0.1D, z1 * 0.1D).rotate(315 - this.rotationYaw, motionVec); + Vector3 d2 = new Vector3(x1 * 0.1D, -z1 * 0.1D, y1 * 0.1D).rotate(315 - this.rotationYaw, motionVec); + Vector3 d3 = new Vector3(-y1 * 0.1D, x1 * 0.1D, z1 * 0.1D).rotate(315 - this.rotationYaw, motionVec); + Vector3 d4 = new Vector3(x1 * 0.1D, z1 * 0.1D, -y1 * 0.1D).rotate(315 - this.rotationYaw, motionVec); + Vector3 mv1 = motionVec.clone().translate(d1); + Vector3 mv2 = motionVec.clone().translate(d2); + Vector3 mv3 = motionVec.clone().translate(d3); + Vector3 mv4 = motionVec.clone().translate(d4); + // T3 - Four flameballs which spread + EntityLivingBase riddenByEntity = this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof EntityLivingBase) ? null : (EntityLivingBase) this.getPassengers().get(0); + Object[] rider = new Object[] + {riddenByEntity}; + makeFlame(x2 + d1.x, y2 + d1.y, z2 + d1.z, mv1, this.getLaunched(), rider); + makeFlame(x2 + d2.x, y2 + d2.y, z2 + d2.z, mv2, this.getLaunched(), rider); + makeFlame(x2 + d3.x, y2 + d3.y, z2 + d3.z, mv3, this.getLaunched(), rider); + makeFlame(x2 + d4.x, y2 + d4.y, z2 + d4.z, mv4, this.getLaunched(), rider); + } + } + + private void makeFlame(double x2, double y2, double z2, Vector3 motionVec, boolean getLaunched, Object[] rider) + { + if (getLaunched) + { + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y2, z2 + 0.4 - this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y2, z2 + 0.4 - this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y2, z2 - 0.4 + this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y2, z2 - 0.4 + this.rand.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y2, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 + 0.4, y2, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2 - 0.4, y2, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y2, z2 + 0.4D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle("launchFlameLaunched", new Vector3(x2, y2, z2 - 0.4D), motionVec, rider); + return; + } + + if (this.ticksExisted % 2 == 0) + return; + + y2 += 1.6D; + double x1 = motionVec.x; + double y1 = motionVec.y; + double z1 = motionVec.z; + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y2, z2 + 0.4 - this.rand.nextDouble() / 10D), + new Vector3(x1 + 0.1D + this.rand.nextDouble() / 10D, y1 - 0.3D, z1 + 0.1D + this.rand.nextDouble() / 10D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y2, z2 + 0.4 - this.rand.nextDouble() / 10D), + new Vector3(x1 - 0.1D - this.rand.nextDouble() / 10D, y1 - 0.3D, z1 + 0.1D + this.rand.nextDouble() / 10D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4 + this.rand.nextDouble() / 10D, y2, z2 - 0.4 + this.rand.nextDouble() / 10D), + new Vector3(x1 - 0.1D - this.rand.nextDouble() / 10D, y1 - 0.3D, z1 - 0.1D - this.rand.nextDouble() / 10D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4 - this.rand.nextDouble() / 10D, y2, z2 - 0.4 + this.rand.nextDouble() / 10D), + new Vector3(x1 + 0.1D + this.rand.nextDouble() / 10D, y1 - 0.3D, z1 - 0.1D - this.rand.nextDouble() / 10D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 + 0.4, y2, z2), new Vector3(x1 + 0.3D, y1 - 0.3D, z1), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2 - 0.4, y2, z2), new Vector3(x1 - 0.3D, y1 - 0.3D, z1), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2, y2, z2 + 0.4D), new Vector3(x1, y1 - 0.3D, z1 + 0.3D), rider); + GalacticraftCore.proxy.spawnParticle("launchFlameIdle", new Vector3(x2, y2, z2 - 0.4D), new Vector3(x1, y1 - 0.3D, z1 - 0.3D), rider); + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return !this.isDead && entityPlayer.getDistanceSq(this) <= 64.0D; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeEntityToNBT(par1NBTTagCompound); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readEntityFromNBT(par1NBTTagCompound); + } + + @Override + public int getRocketTier() + { + return 3; + } + + @Override + public int getFuelTankCapacity() + { + return 1500; + } + + @Override + public int getPreLaunchWait() + { + return 400; + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public List getItemsDropped(List droppedItems) + { + super.getItemsDropped(droppedItems); + ItemStack rocket = new ItemStack(AsteroidsItems.tier3Rocket, 1, this.rocketType.getIndex()); + rocket.setTagCompound(new NBTTagCompound()); + rocket.getTagCompound().setInteger("RocketFuel", this.fuelTank.getFluidAmount()); + droppedItems.add(rocket); + return droppedItems; + } + + @Override + public float getRenderOffsetY() + { + return -1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/player/AsteroidsPlayerHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/player/AsteroidsPlayerHandler.java new file mode 100644 index 00000000..43e5f4e1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/entities/player/AsteroidsPlayerHandler.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.entities.player; + +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntitySmallAsteroid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedOutEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent; + +public class AsteroidsPlayerHandler +{ + + @SubscribeEvent + public void onPlayerLogin(PlayerLoggedInEvent event) + { + if (event.player instanceof EntityPlayerMP) + { + this.onPlayerLogin((EntityPlayerMP) event.player); + } + } + + @SubscribeEvent + public void onPlayerLogout(PlayerLoggedOutEvent event) + { + if (event.player instanceof EntityPlayerMP) + { + this.onPlayerLogout((EntityPlayerMP) event.player); + } + } + + @SubscribeEvent + public void onPlayerRespawn(PlayerRespawnEvent event) + { + if (event.player instanceof EntityPlayerMP) + { + this.onPlayerRespawn((EntityPlayerMP) event.player); + } + } + +// @SubscribeEvent +// public void onEntityConstructing(EntityEvent.EntityConstructing event) +// { +// if (event.getEntity() instanceof EntityPlayerMP && GCPlayerStats.get((EntityPlayerMP) event.entity) == null) +// { +// GCPlayerStats.register((EntityPlayerMP) event.entity); +// } +// } + + private void onPlayerLogin(EntityPlayerMP player) + { + } + + private void onPlayerLogout(EntityPlayerMP player) + { + + } + + private void onPlayerRespawn(EntityPlayerMP player) + { + } + + public void onPlayerUpdate(EntityPlayerMP player) + { + if (!ConfigManagerAsteroids.disableSmallAsteroids) + { + if (!player.world.isRemote && player.world.provider instanceof WorldProviderAsteroids) + { + final int f = 50; + + if (player.world.rand.nextInt(f) == 0 && player.posY < 260D) + { + final EntityPlayer closestPlayer = player.world.getClosestPlayerToEntity(player, 100); + + if (closestPlayer == null || closestPlayer.getEntityId() <= player.getEntityId()) + { + double x, y, z; + double motX, motY, motZ; + double r = player.world.rand.nextInt(60) + 30D; + double theta = Math.PI * 2.0 * player.world.rand.nextDouble(); + x = player.posX + Math.cos(theta) * r; + y = player.posY + player.world.rand.nextInt(5); + z = player.posZ + Math.sin(theta) * r; + motX = (player.posX - x + (player.world.rand.nextDouble() - 0.5) * 40) / 400.0F; + motY = (player.world.rand.nextDouble() - 0.5) * 0.4; + motZ = (player.posZ - z + (player.world.rand.nextDouble() - 0.5) * 40) / 400.0F; + + final EntitySmallAsteroid smallAsteroid = new EntitySmallAsteroid(player.world); + smallAsteroid.setPosition(x, y, z); + smallAsteroid.motionX = motX; + smallAsteroid.motionY = motY; + smallAsteroid.motionZ = motZ; + smallAsteroid.spinYaw = player.world.rand.nextFloat() * 4; + smallAsteroid.spinPitch = player.world.rand.nextFloat() * 2; + + player.world.spawnEntity(smallAsteroid); + } + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandler.java new file mode 100644 index 00000000..d7d16e88 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandler.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.event; + +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler.ThermalArmorEvent; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class AsteroidsEventHandler +{ + + @SubscribeEvent + public void onThermalArmorEvent(ThermalArmorEvent event) + { + if (event.armorStack.isEmpty()) + { + event.setArmorAddResult(ThermalArmorEvent.ArmorAddResult.REMOVE); + } else if (event.armorStack.getItem() == AsteroidsItems.thermalPadding && event.armorStack.getItemDamage() == event.armorIndex) + { + event.setArmorAddResult(ThermalArmorEvent.ArmorAddResult.ADD); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandlerClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandlerClient.java new file mode 100644 index 00000000..9ee37250 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/event/AsteroidsEventHandlerClient.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.event; + +import micdoodle8.mods.galacticraft.api.event.client.CelestialBodyRenderEvent; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.client.gui.screen.GuiCelestialSelection; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore.EventSpecialRender; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.client.SkyProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.NetworkRenderer; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +public class AsteroidsEventHandlerClient +{ + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTick(ClientTickEvent event) + { + Minecraft minecraft = Minecraft.getMinecraft(); + WorldClient world = minecraft.world; + + if (world != null) + { + if (world.provider instanceof WorldProviderAsteroids) + { + if (world.provider.getSkyRenderer() == null) + { + world.provider.setSkyRenderer(new SkyProviderAsteroids((IGalacticraftWorldProvider) world.provider)); + } + + if (world.provider.getCloudRenderer() == null) + { + world.provider.setCloudRenderer(new CloudRenderer()); + } + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onRingRender(CelestialBodyRenderEvent.CelestialRingRenderEvent.Pre renderEvent) + { + if (renderEvent.celestialBody.equals(AsteroidsModule.planetAsteroids)) + { + float alpha = 1.0F; + GuiScreen screen = FMLClientHandler.instance().getClient().currentScreen; + if (screen instanceof GuiCelestialSelection) + { + alpha = ((GuiCelestialSelection) screen).getAlpha(renderEvent.celestialBody); + GL11.glColor4f(0.7F, 0.0F, 0.0F, alpha / 2.0F); + } else + { + GL11.glColor4f(0.3F, 0.1F, 0.1F, 1.0F); + } + renderEvent.setCanceled(true); + GL11.glBegin(GL11.GL_LINE_LOOP); + + final float theta = Constants.twoPI / 90; + final float cos = MathHelper.cos(theta); + final float sin = MathHelper.sin(theta); + + float min = 72.0F; + float max = 78.0F; + + float x = max * renderEvent.celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + float y = 0; + + float temp; + for (int i = 0; i < 90; i++) + { + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + } + + GL11.glEnd(); + GL11.glBegin(GL11.GL_LINE_LOOP); + + x = min * renderEvent.celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + y = 0; + + for (int i = 0; i < 90; i++) + { + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + } + + GL11.glEnd(); + GL11.glColor4f(0.7F, 0.0F, 0.0F, alpha / 10.0F); + GL11.glBegin(GL11.GL_QUADS); + + x = min * renderEvent.celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + y = 0; + float x2 = max * renderEvent.celestialBody.getRelativeDistanceFromCenter().unScaledDistance; + float y2 = 0; + + for (int i = 0; i < 90; i++) + { + GL11.glVertex2f(x2, y2); + GL11.glVertex2f(x, y); + + temp = x; + x = cos * x - sin * y; + y = sin * temp + cos * y; + temp = x2; + x2 = cos * x2 - sin * y2; + y2 = sin * temp + cos * y2; + + GL11.glVertex2f(x, y); + GL11.glVertex2f(x2, y2); + } + + GL11.glEnd(); + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onBodyRender(CelestialBodyRenderEvent.Pre renderEvent) + { + if (renderEvent.celestialBody.equals(AsteroidsModule.planetAsteroids)) + { + GL11.glRotatef(ClientUtil.getClientTimeTotal() / 10.0F % 360, 0, 0, 1); + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onSpecialRender(EventSpecialRender event) + { + NetworkRenderer.renderNetworks(FMLClientHandler.instance().getClient().world, event.partialTicks); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerAstroMinerDock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerAstroMinerDock.java new file mode 100644 index 00000000..d0a242f1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerAstroMinerDock.java @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerAstroMinerDock extends Container +{ + + private TileEntityMinerBase tileEntity; + + public ContainerAstroMinerDock(InventoryPlayer par1InventoryPlayer, IInventory tile) + { + this.tileEntity = (TileEntityMinerBase) tile; + this.addSlotToContainer(new SlotSpecific(tile, 0, 230, 108, IItemElectric.class)); + + int i; + int j; + + for (i = 0; i < 6; ++i) + { + for (j = 0; j < 12; ++j) + { + this.addSlotToContainer(new Slot(tile, j + i * 12 + 1, 8 + j * 18, 18 + i * 18)); + } + } + + // Player inv: + + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 139 + i * 18)); + } + } + + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 58 + 139)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par2) + { + ItemStack var3 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par2); + int b = TileEntityMinerBase.HOLDSIZE + 1; + + if (slot != null && slot.getHasStack()) + { + final ItemStack var5 = slot.getStack(); + var3 = var5.copy(); + + if (par2 < b) + { + if (!this.mergeItemStack(var5, b, b + 36, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var5.getItem())) + { + if (!this.mergeItemStack(var5, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (par2 < b + 27) + { + if (!this.mergeItemStack(var5, 1, b, false) && !this.mergeItemStack(var5, b + 27, b + 36, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var5, 1, b, false) && !this.mergeItemStack(var5, b, b + 27, false)) + { + return ItemStack.EMPTY; + } + } + + if (var5.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var5.getCount() == var3.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var5); + } + + return var3; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicAstroMiner.java new file mode 100644 index 00000000..79221626 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicAstroMiner.java @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import micdoodle8.mods.galacticraft.core.inventory.SlotRocketBenchResult; +import micdoodle8.mods.galacticraft.planets.mars.util.RecipeUtilMars; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ContainerSchematicAstroMiner extends Container +{ + + public InventorySchematicAstroMiner craftMatrix = new InventorySchematicAstroMiner(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicAstroMiner(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 72)); + int i; + int j; + int count = 1; + + // Miner top layer + for (i = 0; i < 4; i++) + { + this.addSlotToContainer(new SlotSchematicAstroMiner(this.craftMatrix, count++, 27 + i * 18, 35, pos, par1InventoryPlayer.player)); + } + + // Miner mid layer + for (i = 0; i < 5; i++) + { + this.addSlotToContainer(new SlotSchematicAstroMiner(this.craftMatrix, count++, 16 + i * 18, 53, pos, par1InventoryPlayer.player)); + } + + // Miner bottom layer + for (i = 0; i < 3; i++) + { + this.addSlotToContainer(new SlotSchematicAstroMiner(this.craftMatrix, count++, 44 + i * 18, 71, pos, par1InventoryPlayer.player)); + } + + // Laser + for (i = 0; i < 2; ++i) + { + this.addSlotToContainer(new SlotSchematicAstroMiner(this.craftMatrix, count++, 8 + i * 18, 77, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (i = 0; i < 3; ++i) + { + for (j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 140 + i * 18 - 26)); + } + } + + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 144 + 54 - 26)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtilMars.findMatchingAstroMinerRecipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + boolean done = false; + if (par1 <= 14) + { + if (!this.mergeItemStack(var4, 15, 51, false)) + { + return ItemStack.EMPTY; + } + + var3.onSlotChange(var4, var2); + } else + { + boolean valid = false; + for (int i = 1; i < 15; i++) + { + Slot testSlot = this.inventorySlots.get(i); + if (!testSlot.getHasStack() && testSlot.isItemValid(var2)) + { + valid = true; + break; + } + } + if (valid) + { + if (!this.mergeOneItemTestValid(var4, 1, 15, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 >= 15 && par1 < 42) + { + if (!this.mergeItemStack(var4, 42, 51, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 42 && par1 < 51) + { + if (!this.mergeItemStack(var4, 15, 42, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 15, 51, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItemTestValid(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (!par1ItemStack.isEmpty()) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty() && slot.isItemValid(par1ItemStack)) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicTier3Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicTier3Rocket.java new file mode 100644 index 00000000..554b9fa7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerSchematicTier3Rocket.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import micdoodle8.mods.galacticraft.core.inventory.SlotRocketBenchResult; +import micdoodle8.mods.galacticraft.planets.mars.util.RecipeUtilMars; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; + +public class ContainerSchematicTier3Rocket extends Container +{ + + public InventorySchematicTier3Rocket craftMatrix = new InventorySchematicTier3Rocket(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicTier3Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + final int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 18 + 69 + change)); + int var6; + int var7; + + // Cone + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 1, 48, -8 + change, pos, par1InventoryPlayer.player)); + + // Body + for (var6 = 0; var6 < 5; ++var6) + { + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 2 + var6, 39, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Body Right + for (var6 = 0; var6 < 5; ++var6) + { + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 7 + var6, 57, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Left fins + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 12, 21, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 13, 21, 82 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 14, 21, 100 + change, pos, par1InventoryPlayer.player)); + + // Engine + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 15, 48, 100 + change, pos, par1InventoryPlayer.player)); + + // Right fins + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 16, 75, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 17, 75, 82 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 18, 75, 100 + change, pos, par1InventoryPlayer.player)); + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotSchematicTier3Rocket(this.craftMatrix, 19 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 129 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 18 + 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtilMars.findMatchingSpaceshipT3Recipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + boolean done = false; + if (par1 <= 21) + { + if (!this.mergeItemStack(var4, 22, 58, false)) + { + return ItemStack.EMPTY; + } + + var3.onSlotChange(var4, var2); + } else + { + boolean valid = false; + for (int i = 1; i < 19; i++) + { + Slot testSlot = this.inventorySlots.get(i); + if (!testSlot.getHasStack() && testSlot.isItemValid(var2)) + { + valid = true; + break; + } + } + if (valid) + { + if (!this.mergeOneItemTestValid(var4, 1, 19, false)) + { + return ItemStack.EMPTY; + } + } else + { + boolean foundChest = false; + for (ItemStack woodChest : OreDictionary.getOres("chestWood")) + { + if (var2.getItem() == woodChest.getItem()) + { + foundChest = true; + break; + } + } + if (foundChest) + { + if (!this.mergeOneItemTestValid(var4, 19, 22, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 22 && par1 < 49) + { + if (!this.mergeItemStack(var4, 49, 58, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 49 && par1 < 58) + { + if (!this.mergeItemStack(var4, 22, 49, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 22, 58, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItemTestValid(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (!par1ItemStack.isEmpty()) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty() && slot.isItemValid(par1ItemStack)) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerShortRangeTelepad.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerShortRangeTelepad.java new file mode 100644 index 00000000..749b341a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/ContainerShortRangeTelepad.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerShortRangeTelepad extends Container +{ + + private final TileEntityShortRangeTelepad tileEntity; + + public ContainerShortRangeTelepad(InventoryPlayer par1InventoryPlayer, TileEntityShortRangeTelepad tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 152, 105, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 127 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 185)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicAstroMiner.java new file mode 100644 index 00000000..c64d3805 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicAstroMiner.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematicAstroMiner implements IInventory +{ + + private final NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventorySchematicAstroMiner(Container par1Container) + { + this.stacks = NonNullList.withSize(15, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicTier3Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicTier3Rocket.java new file mode 100644 index 00000000..2b1c8153 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/InventorySchematicTier3Rocket.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematicTier3Rocket implements IInventory +{ + + private final NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventorySchematicTier3Rocket(Container par1Container) + { + this.stacks = NonNullList.withSize(22, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicAstroMiner.java new file mode 100644 index 00000000..8ad29169 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicAstroMiner.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +public class SlotSchematicAstroMiner extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotSchematicAstroMiner(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getAstroMinerRecipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicTier3Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicTier3Rocket.java new file mode 100644 index 00000000..7c7d0189 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/inventory/SlotSchematicTier3Rocket.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.inventory; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +public class SlotSchematicTier3Rocket extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotSchematicTier3Rocket(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getRocketT3Recipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/AsteroidsItems.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/AsteroidsItems.java new file mode 100644 index 00000000..9c66556e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/AsteroidsItems.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.wrappers.PartialCanister; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.oredict.OreDictionary; + +public class AsteroidsItems +{ + + public static Item grapple; + public static Item tier3Rocket; + public static Item astroMiner; + public static Item thermalPadding; + public static Item basicItem; + public static Item methaneCanister; + public static Item canisterLOX; + public static Item canisterLN2; + // public static Item canisterLAr; + public static Item atmosphericValve; + public static ItemHeavyNoseCone heavyNoseCone; + public static Item orionDrive; + public static Item titaniumHelmet; + public static Item titaniumChestplate; + public static Item titaniumLeggings; + public static Item titaniumBoots; + public static Item titaniumAxe; + public static Item titaniumPickaxe; + public static Item titaniumSpade; + public static Item titaniumHoe; + public static Item titaniumSword; + public static Item strangeSeed; + + public static Item.ToolMaterial TOOL_TITANIUM = EnumHelper.addToolMaterial("titanium", 4, 760, 14.0F, 4.0F, 16); + public static ItemArmor.ArmorMaterial ARMOR_TITANIUM = EnumHelper.addArmorMaterial("titanium", "", 26, new int[] + {5, 7, 10, 5}, 20, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 1.0F); + + public static void initItems() + { + AsteroidsItems.grapple = new ItemGrappleHook("grapple"); + AsteroidsItems.tier3Rocket = new ItemTier3Rocket("rocket_t3"); + AsteroidsItems.astroMiner = new ItemAstroMiner("astro_miner"); + AsteroidsItems.thermalPadding = new ItemThermalPadding("thermal_padding"); + AsteroidsItems.basicItem = new ItemBasicAsteroids("item_basic_asteroids"); + AsteroidsItems.methaneCanister = new ItemCanisterMethane("methane_canister_partial"); + AsteroidsItems.canisterLOX = new ItemCanisterLiquidOxygen("canister_partial_lox"); + AsteroidsItems.canisterLN2 = new ItemCanisterLiquidNitrogen("canister_partial_ln2"); + // AsteroidsItems.canisterLAr = new + // ItemCanisterLiquidArgon("canisterPartialLAr"); + AsteroidsItems.atmosphericValve = new ItemAtmosphericValve("atmospheric_valve"); + AsteroidsItems.heavyNoseCone = new ItemHeavyNoseCone("heavy_nose_cone"); + AsteroidsItems.orionDrive = new ItemOrionDrive("orion_drive"); + AsteroidsItems.titaniumHelmet = new ItemArmorAsteroids(EntityEquipmentSlot.HEAD, "helmet"); + AsteroidsItems.titaniumChestplate = new ItemArmorAsteroids(EntityEquipmentSlot.CHEST, "chestplate"); + AsteroidsItems.titaniumLeggings = new ItemArmorAsteroids(EntityEquipmentSlot.LEGS, "leggings"); + AsteroidsItems.titaniumBoots = new ItemArmorAsteroids(EntityEquipmentSlot.FEET, "boots"); + AsteroidsItems.titaniumAxe = new ItemAxeAsteroids("titanium_axe"); + AsteroidsItems.titaniumPickaxe = new ItemPickaxeAsteroids("titanium_pickaxe"); + AsteroidsItems.titaniumSpade = new ItemSpadeAsteroids("titanium_shovel"); + AsteroidsItems.titaniumHoe = new ItemHoeAsteroids("titanium_hoe"); + AsteroidsItems.titaniumSword = new ItemSwordAsteroids("titanium_sword"); + AsteroidsItems.strangeSeed = new ItemStrangeSeed("strange_seed"); + + AsteroidsItems.registerItems(); + + AsteroidsItems.registerHarvestLevels(); + + GalacticraftCore.proxy.registerCanister(new PartialCanister(AsteroidsItems.methaneCanister, Constants.MOD_ID_PLANETS, "methane_canister_partial", 7)); + GalacticraftCore.proxy.registerCanister(new PartialCanister(AsteroidsItems.canisterLOX, Constants.MOD_ID_PLANETS, "canister_partial_lox", 7)); + GalacticraftCore.proxy.registerCanister(new PartialCanister(AsteroidsItems.canisterLN2, Constants.MOD_ID_PLANETS, "canister_partial_ln2", 7)); + } + + public static void oreDictRegistrations() + { + OreDictionary.registerOre("compressedTitanium", new ItemStack(AsteroidsItems.basicItem, 1, 6)); + OreDictionary.registerOre("ingotTitanium", new ItemStack(AsteroidsItems.basicItem, 1, 0)); + OreDictionary.registerOre("shardTitanium", new ItemStack(AsteroidsItems.basicItem, 1, 4)); + OreDictionary.registerOre("shardIron", new ItemStack(AsteroidsItems.basicItem, 1, 3)); + OreDictionary.registerOre("dustTitanium", new ItemStack(AsteroidsItems.basicItem, 1, 9)); + } + + public static void registerHarvestLevels() + { + AsteroidsItems.titaniumPickaxe.setHarvestLevel("pickaxe", 5); + AsteroidsItems.titaniumAxe.setHarvestLevel("axe", 5); + AsteroidsItems.titaniumSpade.setHarvestLevel("shovel", 5); + } + + private static void registerItems() + { + registerItem(AsteroidsItems.grapple); + registerItem(AsteroidsItems.tier3Rocket); + registerItem(AsteroidsItems.astroMiner); + registerItem(AsteroidsItems.thermalPadding); + registerItem(AsteroidsItems.basicItem); + registerItem(AsteroidsItems.methaneCanister); + registerItem(AsteroidsItems.canisterLOX); + registerItem(AsteroidsItems.canisterLN2); + // registerItem(AsteroidsItems.canisterLAr); + registerItem(AsteroidsItems.atmosphericValve); + registerItem(AsteroidsItems.heavyNoseCone); + registerItem(AsteroidsItems.orionDrive); + registerItem(AsteroidsItems.titaniumHelmet); + registerItem(AsteroidsItems.titaniumChestplate); + registerItem(AsteroidsItems.titaniumLeggings); + registerItem(AsteroidsItems.titaniumBoots); + registerItem(AsteroidsItems.titaniumAxe); + registerItem(AsteroidsItems.titaniumPickaxe); + registerItem(AsteroidsItems.titaniumSpade); + registerItem(AsteroidsItems.titaniumHoe); + registerItem(AsteroidsItems.titaniumSword); + registerItem(AsteroidsItems.strangeSeed); + + ARMOR_TITANIUM.setRepairItem(new ItemStack(AsteroidsItems.basicItem, 1, 0)); + + GCItems.canisterTypes.add((ItemCanisterGeneric) AsteroidsItems.canisterLOX); + GCItems.canisterTypes.add((ItemCanisterGeneric) AsteroidsItems.methaneCanister); + GCItems.canisterTypes.add((ItemCanisterGeneric) AsteroidsItems.canisterLN2); + } + + public static void registerItem(Item item) + { + String name = item.getTranslationKey().substring(5); + GCCoreUtil.registerGalacticraftItem(name, item); + GalacticraftCore.itemListTrue.add(item); + item.setRegistryName(name); + GalacticraftPlanets.proxy.postRegisterItem(item); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemArmorAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemArmorAsteroids.java new file mode 100644 index 00000000..174a6291 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemArmorAsteroids.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +public class ItemArmorAsteroids extends ItemArmor implements ISortableItem, GCRarity +{ + + public ItemArmorAsteroids(EntityEquipmentSlot armorIndex, String assetSuffix) + { + super(AsteroidsItems.ARMOR_TITANIUM, 0, armorIndex); + this.setTranslationKey("titanium_" + assetSuffix); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) + { + if (this.getArmorMaterial() == AsteroidsItems.ARMOR_TITANIUM) + { + if (stack.getItem() == AsteroidsItems.titaniumHelmet) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/titanium_1.png"; + } else if (stack.getItem() == AsteroidsItems.titaniumChestplate || stack.getItem() == AsteroidsItems.titaniumBoots) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/titanium_2.png"; + } else if (stack.getItem() == AsteroidsItems.titaniumLeggings) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/titanium_3.png"; + } + } + + return null; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return repair.getItem() == AsteroidsItems.basicItem && repair.getItemDamage() == 6; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAstroMiner.java new file mode 100644 index 00000000..647a98d5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAstroMiner.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemAstroMiner extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemAstroMiner(String assetName) + { + super(); + this.setMaxDamage(0); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + // this.setTextureName("arrow"); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumActionResult onItemUseFirst(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + { + TileEntity tile = null; + + if (playerIn == null) + { + return EnumActionResult.PASS; + } else + { + final Block id = worldIn.getBlockState(pos).getBlock(); + + if (id == GCBlocks.fakeBlock) + { + tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityMulti) + { + tile = ((TileEntityMulti) tile).getMainBlockTile(); + } + } + + if (id == AsteroidBlocks.minerBaseFull) + { + tile = worldIn.getTileEntity(pos); + } + + if (tile instanceof TileEntityMinerBase) + { + // Don't open GUI on client + if (worldIn.isRemote) + { + return EnumActionResult.FAIL; + } + + if (worldIn.provider instanceof WorldProviderSpaceStation) + { + playerIn.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner7.fail"))); + return EnumActionResult.FAIL; + } + + if (((TileEntityMinerBase) tile).getLinkedMiner() != null) + { + playerIn.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner.fail"))); + return EnumActionResult.FAIL; + } + + // Gives a chance for any loaded Astro Miner to link itself + if (((TileEntityMinerBase) tile).ticks < 15) + { + return EnumActionResult.FAIL; + } + + EntityPlayerMP playerMP = (EntityPlayerMP) playerIn; + GCPlayerStats stats = GCPlayerStats.get(playerIn); + + int astroCount = stats.getAstroMinerCount(); + if (astroCount >= ConfigManagerAsteroids.astroMinerMax && (!playerIn.capabilities.isCreativeMode)) + { + playerIn.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner2.fail"))); + return EnumActionResult.FAIL; + } + + if (!((TileEntityMinerBase) tile).spawnMiner(playerMP)) + { + playerIn.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.astro_miner1.fail") + " " + GCCoreUtil.translate(EntityAstroMiner.blockingBlock.toString()))); + return EnumActionResult.FAIL; + } + + if (!playerIn.capabilities.isCreativeMode) + { + stats.setAstroMinerCount(stats.getAstroMinerCount() + 1); + playerIn.getHeldItem(hand).shrink(1); + } + return EnumActionResult.SUCCESS; + } + } + return EnumActionResult.PASS; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + // TODO + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAtmosphericValve.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAtmosphericValve.java new file mode 100644 index 00000000..d997f584 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAtmosphericValve.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemAtmosphericValve extends Item implements ISortableItem, GCRarity +{ + + public ItemAtmosphericValve(String assetName) + { + super(); + this.setMaxDamage(0); + this.setTranslationKey(assetName); + this.setMaxStackSize(64); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAxeAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAxeAsteroids.java new file mode 100644 index 00000000..879162c9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemAxeAsteroids.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import com.google.common.collect.Sets; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; + +public class ItemAxeAsteroids extends ItemTool implements ISortableItem, GCRarity +{ + + private static final Set EFFECTIVE_ON = Sets.newHashSet(new Block[] + {Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER, Blocks.WOODEN_BUTTON, + Blocks.WOODEN_PRESSURE_PLATE}); + + public ItemAxeAsteroids(String assetName) + { + super(GCItems.TOOL_STEEL, EFFECTIVE_ON); + this.setTranslationKey(assetName); + this.attackDamage = 6.0F; + this.attackSpeed = -3.0F; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Material material = state.getMaterial(); + return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getDestroySpeed(stack, state) : this.efficiency; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBasicAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBasicAsteroids.java new file mode 100644 index 00000000..514f4232 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBasicAsteroids.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBasicAsteroids extends Item implements ISortableItem, GCRarity +{ + + public static String[] names = + {"ingot_titanium", "engine_t2", "rocket_fins_t2", "shard_iron", "shard_titanium", "reinforced_plate_t3", "compressed_titanium", "thermal_cloth", "beam_core", "dust_titanium"}; + + public ItemBasicAsteroids(String name) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(name); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemBasicAsteroids.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (ItemBasicAsteroids.names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemBasicAsteroids.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack != null && par1ItemStack.getItemDamage() == 5) + { + tooltip.add(GCCoreUtil.translate("item.tier3.desc")); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 0: + return EnumSortCategoryItem.INGOT; + case 5: + case 6: + return EnumSortCategoryItem.PLATE; + } + return EnumSortCategoryItem.GENERAL; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + switch (item.getItemDamage()) + { + case 5: + return 2F; + case 6: + return 1F; + } + return -1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockAsteroids.java new file mode 100644 index 00000000..f3b1f2ce --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockAsteroids.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockBasicAsteroids; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockAsteroids extends ItemBlock implements GCRarity +{ + + public ItemBlockAsteroids(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockBasicAsteroids.EnumBlockBasic.values()[itemstack.getItemDamage()].getName(); + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockLaser.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockLaser.java new file mode 100644 index 00000000..56660b44 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockLaser.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +public class ItemBlockLaser extends ItemBlockDesc +{ + + public ItemBlockLaser(Block block) + { + super(block); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List info, ITooltipFlag flagIn) + { + super.addInformation(stack, worldIn, info, flagIn); + + info.add(TextFormatting.DARK_RED + "BETA Testing Phase"); + info.add(TextFormatting.DARK_RED + "Please Report Bugs"); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockShortRangeTelepad.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockShortRangeTelepad.java new file mode 100644 index 00000000..8fc50059 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockShortRangeTelepad.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBlockShortRangeTelepad extends ItemBlockDesc +{ + + public ItemBlockShortRangeTelepad(Block block) + { + super(block); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + super.addInformation(par1ItemStack, worldIn, tooltip, flagIn); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockWalkway.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockWalkway.java new file mode 100644 index 00000000..1a51eaba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemBlockWalkway.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockWalkway; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBlockWalkway extends ItemBlockDesc +{ + + public ItemBlockWalkway(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack itemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (itemStack.getItemDamage() == BlockWalkway.EnumWalkwayType.WALKWAY_WIRE.getMeta()) + { + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate("tile.aluminum_wire.alu_wire.name")); + } else if (itemStack.getItemDamage() == BlockWalkway.EnumWalkwayType.WALKWAY_PIPE.getMeta()) + { + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate(GCBlocks.oxygenPipe.getTranslationKey() + ".name")); + } + + super.addInformation(itemStack, worldIn, tooltip, flagIn); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockWalkway.EnumWalkwayType.values()[itemstack.getItemDamage()].getName(); + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidArgon.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidArgon.java new file mode 100644 index 00000000..a0c174e8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidArgon.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCanisterLiquidArgon extends ItemCanisterGeneric +{ +// protected IIcon[] icons = new IIcon[7]; + + public ItemCanisterLiquidArgon(String assetName) + { + super(assetName); + this.setAllowedFluid("liquidargon"); + // this.setTextureName(GalacticraftPlanets.TEXTURE_PREFIX + assetName); + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister + * iconRegister) { for (int i = 0; i < this.icons.length; i++) { + * this.icons[i] = iconRegister.registerIcon(this.getIconString() + "_" + + * i); } } + */ + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getMaxDamage() - itemStack.getItemDamage() == 0) + { + return "item.emptyGasCanister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.canister.liquidArgon.full"; + } + + return "item.canister.liquidArgon.partial"; + } + + /* + * @Override public IIcon getIconFromDamage(int par1) { final int damage = 6 + * * par1 / this.getMaxDamage(); if (this.icons.length > damage) { return + * this.icons[this.icons.length - damage - 1]; } return + * super.getIconFromDamage(damage); } + */ + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("item.canister.liquid_argon.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidNitrogen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidNitrogen.java new file mode 100644 index 00000000..16163ec5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidNitrogen.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCanisterLiquidNitrogen extends ItemCanisterGeneric implements ISortableItem +{ + + public ItemCanisterLiquidNitrogen(String assetName) + { + super(assetName); + this.setAllowedFluid("liquidnitrogen"); + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getMaxDamage() - itemStack.getItemDamage() == 0) + { + return "item.empty_gas_canister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.canister.liquid_nitrogen.full"; + } + + return "item.canister.liquid_nitrogen.partial"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("item.canister.liquid_nitrogen.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } + + private Block canFreeze(Block b) + { + if (b == Blocks.WATER) + { + return Blocks.ICE; + } + if (b == Blocks.LAVA) + { + return Blocks.OBSIDIAN; + } + return null; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + ItemStack itemStack = playerIn.getHeldItem(hand); + + int damage = itemStack.getItemDamage() + 125; + if (damage > itemStack.getMaxDamage()) + { + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + RayTraceResult movingobjectposition = this.rayTrace(worldIn, playerIn, true); + + if (movingobjectposition == null || movingobjectposition.typeOfHit == RayTraceResult.Type.MISS) + { + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } else + { + if (movingobjectposition.typeOfHit == RayTraceResult.Type.BLOCK) + { + BlockPos pos = movingobjectposition.getBlockPos(); + + if (!worldIn.canMineBlockBody(playerIn, pos)) + { + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + if (!playerIn.canPlayerEdit(pos, movingobjectposition.sideHit, itemStack)) + { + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + + IBlockState state = worldIn.getBlockState(pos); + Block b = state.getBlock(); + + Block result = this.canFreeze(b); + if (result != null) + { + this.setNewDamage(itemStack, damage); + worldIn.playSound(null, pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.NEUTRAL, 1.0F, Item.itemRand.nextFloat() * 0.4F + 0.8F); + worldIn.setBlockState(pos, result.getDefaultState(), 3); + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + } + + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidOxygen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidOxygen.java new file mode 100644 index 00000000..8f2ff0ad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterLiquidOxygen.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.HashMap; +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.IItemOxygenSupply; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCanisterLiquidOxygen extends ItemCanisterGeneric implements IItemOxygenSupply, ISortableItem +{ + + // protected IIcon[] icons = new IIcon[7]; + private static HashMap craftingvalues = new HashMap<>(); + + public ItemCanisterLiquidOxygen(String assetName) + { + super(assetName); + this.setAllowedFluid("liquidoxygen"); + // this.setTextureName(GalacticraftPlanets.TEXTURE_PREFIX + assetName); + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister + * iconRegister) { for (int i = 0; i < this.icons.length; i++) { + * this.icons[i] = iconRegister.registerIcon(this.getIconString() + "_" + + * i); } } + */ + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (ItemCanisterGeneric.EMPTY - itemStack.getItemDamage() == 0) + { + return "item.empty_gas_canister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.canister.lox.full"; + } + + return "item.canister.lox.partial"; + } + + /* + * @Override public IIcon getIconFromDamage(int par1) { final int damage = 6 + * * par1 / ItemCanisterGeneric.EMPTY; if (this.icons.length > damage) { + * return this.icons[this.icons.length - damage - 1]; } return + * super.getIconFromDamage(damage); } + */ + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (ItemCanisterGeneric.EMPTY - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("item.canister.lox.name") + ": " + (ItemCanisterGeneric.EMPTY - par1ItemStack.getItemDamage())); + } + } + + public static void saveDamage(ItemStack itemstack, int damage) + { + ItemCanisterLiquidOxygen.craftingvalues.put(itemstack, Integer.valueOf(damage)); + } + + @Override + public ItemStack getContainerItem(ItemStack itemstack) + { + Integer saved = ItemCanisterLiquidOxygen.craftingvalues.get(itemstack); + if (saved != null) + { + if (saved < ItemCanisterGeneric.EMPTY) + { + ItemCanisterLiquidOxygen.craftingvalues.remove(itemstack); + itemstack.setItemDamage(saved); + return itemstack.copy(); + } + return new ItemStack(this.getContainerItem(), 1, ItemCanisterGeneric.EMPTY); + } + if (GCCoreUtil.getEffectiveSide() == Side.CLIENT) + { + return itemstack.copy(); + } + return super.getContainerItem(itemstack); + } + + @Override + public int discharge(ItemStack itemStack, int amount) + { + int damage = itemStack.getItemDamage(); + int used = Math.min((int) (amount * Constants.LOX_GAS_RATIO), ItemCanisterGeneric.EMPTY - damage); + this.setNewDamage(itemStack, damage + used); + return (int) Math.floor(used / Constants.LOX_GAS_RATIO); + } + + @Override + public int getOxygenStored(ItemStack par1ItemStack) + { + return ItemCanisterGeneric.EMPTY - par1ItemStack.getItemDamage(); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterMethane.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterMethane.java new file mode 100644 index 00000000..b2bcf12e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemCanisterMethane.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCanisterMethane extends ItemCanisterGeneric implements ISortableItem +{ +// protected IIcon[] icons = new IIcon[7]; + + public ItemCanisterMethane(String assetName) + { + super(assetName); + this.setAllowedFluid("methane"); + // this.setTextureName(GalacticraftPlanets.TEXTURE_PREFIX + assetName); + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister + * iconRegister) { for (int i = 0; i < this.icons.length; i++) { + * this.icons[i] = iconRegister.registerIcon(this.getIconString() + "_" + + * i); } } + */ + + @Override + public String getTranslationKey(ItemStack itemStack) + { + if (itemStack.getMaxDamage() - itemStack.getItemDamage() == 0) + { + return "item.empty_gas_canister"; + } + + if (itemStack.getItemDamage() == 1) + { + return "item.methane_canister"; + } + + return "item.methane_canister_partial"; + } + + /* + * @Override public IIcon getIconFromDamage(int par1) { final int damage = 6 + * * par1 / this.getMaxDamage(); if (this.icons.length > damage) { return + * this.icons[this.icons.length - damage - 1]; } return + * super.getIconFromDamage(damage); } + */ + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage() > 0) + { + tooltip.add(GCCoreUtil.translate("item.canister.gas.name") + ": " + (par1ItemStack.getMaxDamage() - par1ItemStack.getItemDamage())); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.CANISTER; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemGrappleHook.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemGrappleHook.java new file mode 100644 index 00000000..09dc2f65 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemGrappleHook.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Enchantments; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBow; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.oredict.OreDictionary; + +public class ItemGrappleHook extends ItemBow implements ISortableItem, GCRarity +{ + + private static NonNullList stringEntries = null; + + public ItemGrappleHook(String assetName) + { + super(); + this.setTranslationKey(assetName); + this.setMaxStackSize(1); + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entity, int timeLeft) + { + if (!(entity instanceof EntityPlayer)) + { + return; + } + + EntityPlayer player = (EntityPlayer) entity; + + boolean canShoot = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantments.INFINITY, stack) > 0; + ItemStack string = ItemStack.EMPTY; + + if (stringEntries == null) + stringEntries = OreDictionary.getOres("string"); + + for (ItemStack itemstack : player.inventory.mainInventory) + { + if (!canShoot && OreDictionary.containsMatch(false, stringEntries, itemstack)) + { + string = itemstack; + canShoot = true; + } + } + + if (canShoot) + { + ItemStack pickupString = string == ItemStack.EMPTY ? ItemStack.EMPTY : new ItemStack(string.getItem(), 1, string.getItemDamage(), string.getTagCompound()); + EntityGrapple grapple = new EntityGrapple(worldIn, player, 2.0F, pickupString); + + worldIn.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.NEUTRAL, 1.0F, 1.0F / (Item.itemRand.nextFloat() * 0.4F + 1.2F) + 0.5F); + + if (!worldIn.isRemote) + { + worldIn.spawnEntity(grapple); + } + + stack.damageItem(1, player); + grapple.canBePickedUp = player.capabilities.isCreativeMode ? 2 : 1; + + if (!player.capabilities.isCreativeMode) + { + string.shrink(1); + + if (string.isEmpty()) + { + player.inventory.deleteStack(string); + } + } + } else if (worldIn.isRemote) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.grapple.fail"))); + } + } + + @Override + public int getMaxItemUseDuration(ItemStack par1ItemStack) + { + return 72000; + } + + @Override + public EnumAction getItemUseAction(ItemStack par1ItemStack) + { + return EnumAction.BOW; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + playerIn.setActiveHand(hand); + return new ActionResult<>(EnumActionResult.SUCCESS, playerIn.getHeldItem(hand)); + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHeavyNoseCone.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHeavyNoseCone.java new file mode 100644 index 00000000..1d6362c9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHeavyNoseCone.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +public class ItemHeavyNoseCone extends Item implements ISortableItem, GCRarity +{ + + public ItemHeavyNoseCone(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHoeAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHoeAsteroids.java new file mode 100644 index 00000000..684b1c2d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemHoeAsteroids.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemHoe; + +public class ItemHoeAsteroids extends ItemHoe implements ISortableItem, GCRarity +{ + + public ItemHoeAsteroids(String assetName) + { + super(AsteroidsItems.TOOL_TITANIUM); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemOrionDrive.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemOrionDrive.java new file mode 100644 index 00000000..a55a0379 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemOrionDrive.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +public class ItemOrionDrive extends Item implements ISortableItem, GCRarity +{ + + public ItemOrionDrive(String assetName) + { + super(); + this.setMaxDamage(0); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemPickaxeAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemPickaxeAsteroids.java new file mode 100644 index 00000000..252926a4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemPickaxeAsteroids.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemPickaxe; + +public class ItemPickaxeAsteroids extends ItemPickaxe implements ISortableItem, GCRarity +{ + + public ItemPickaxeAsteroids(String assetName) + { + super(AsteroidsItems.TOOL_TITANIUM); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSpadeAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSpadeAsteroids.java new file mode 100644 index 00000000..5e6fd638 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSpadeAsteroids.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemSpade; + +public class ItemSpadeAsteroids extends ItemSpade implements ISortableItem, GCRarity +{ + + public ItemSpadeAsteroids(String assetName) + { + super(AsteroidsItems.TOOL_TITANIUM); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemStrangeSeed.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemStrangeSeed.java new file mode 100644 index 00000000..8e718252 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemStrangeSeed.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +public class ItemStrangeSeed extends Item implements ISortableItem, GCRarity +{ + + public ItemStrangeSeed(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSwordAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSwordAsteroids.java new file mode 100644 index 00000000..ce311058 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemSwordAsteroids.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import com.google.common.collect.Multimap; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemSwordAsteroids extends ItemSword implements ISortableItem, GCRarity +{ + + private double attackDamageD; + + public ItemSwordAsteroids(String assetName) + { + super(AsteroidsItems.TOOL_TITANIUM); + this.setTranslationKey(assetName); + this.attackDamageD = 9.0D; + } + + @Override + public float getAttackDamage() + { + return 6.0F; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public Multimap getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) + { + Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); + + if (equipmentSlot == EntityEquipmentSlot.MAINHAND) + { + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", this.attackDamageD, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.8D, 0)); + } + + return multimap; + } + + @Override + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + float hardness = state.getBlockHardness(worldIn, pos); + if (hardness > 0F) + { + stack.damageItem(hardness > 0.2001F ? 2 : 1, entityLiving); + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemThermalPadding.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemThermalPadding.java new file mode 100644 index 00000000..ab55ce2e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemThermalPadding.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IItemThermal; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemThermalPadding extends Item implements IItemThermal, ISortableItem, GCRarity +{ + + public static String[] names = + {"thermal_helm", "thermal_chestplate", "thermal_leggings", "thermal_boots", "thermal_helm0", "thermal_chestplate0", "thermal_leggings0", "thermal_boots0"}; + + public ItemThermalPadding(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemThermalPadding.names.length / 2; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemThermalPadding.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getThermalStrength() + { + return 1; + } + + @Override + public boolean isValidForSlot(ItemStack stack, int armorSlot) + { + return stack.getItemDamage() == armorSlot; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(6); + ItemStack gear1 = stats.getExtendedInventory().getStackInSlot(7); + ItemStack gear2 = stats.getExtendedInventory().getStackInSlot(8); + ItemStack gear3 = stats.getExtendedInventory().getStackInSlot(9); + + if (itemStack.getItemDamage() == 0) + { + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(6, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 1) + { + if (gear1.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(7, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 2) + { + if (gear2.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(8, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 3) + { + if (gear3.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(9, itemStack.copy()); + itemStack.setCount(0); + } + } + } + return new ActionResult<>(EnumActionResult.PASS, itemStack); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemTier3Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemTier3Rocket.java new file mode 100644 index 00000000..f5414353 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/items/ItemTier3Rocket.java @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityTier3Rocket; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemTier3Rocket extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemTier3Rocket(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + boolean padFound = false; + TileEntity tile = null; + ItemStack stack = playerIn.getHeldItem(hand); + + if (worldIn.isRemote) + { + return EnumActionResult.PASS; + } else + { + float centerX = -1; + float centerY = -1; + float centerZ = -1; + + for (int i = -1; i < 2; i++) + { + for (int j = -1; j < 2; j++) + { + BlockPos pos1 = pos.add(i, 0, j); + IBlockState state = worldIn.getBlockState(pos1); + final Block id = state.getBlock(); + int meta = id.getMetaFromState(state); + + if (id == GCBlocks.landingPadFull && meta == 0) + { + padFound = true; + tile = worldIn.getTileEntity(pos1); + + centerX = pos.getX() + i + 0.5F; + centerY = pos.getY() + 0.4F; + centerZ = pos.getZ() + j + 0.5F; + + break; + } + } + + if (padFound) + { + break; + } + } + + if (padFound) + { + if (!placeRocketOnPad(stack, worldIn, tile, centerX, centerY, centerZ)) + { + return EnumActionResult.FAIL; + } + + if (!playerIn.capabilities.isCreativeMode) + { + stack.shrink(1); + } + return EnumActionResult.SUCCESS; + } else + { + return EnumActionResult.PASS; + } + } + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < EnumRocketType.values().length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + EnumRocketType type; + + if (par1ItemStack.getItemDamage() < 10) + { + type = EnumRocketType.values()[par1ItemStack.getItemDamage()]; + } else + { + type = EnumRocketType.values()[par1ItemStack.getItemDamage() - 10]; + } + + if (!type.getTooltip().isEmpty()) + { + tooltip.add(type.getTooltip()); + } + + if (type.getPreFueled()) + { + tooltip.add(EnumColor.RED + "\u00a7o" + GCCoreUtil.translate("gui.creative_only.desc")); + } + + if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("RocketFuel")) + { + EntityTier3Rocket rocket = new EntityTier3Rocket(FMLClientHandler.instance().getWorldClient(), 0, 0, 0, EnumRocketType.values()[par1ItemStack.getItemDamage()]); + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + par1ItemStack.getTagCompound().getInteger("RocketFuel") + " / " + rocket.fuelTank.getCapacity()); + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + return super.getTranslationKey(par1ItemStack) + ".t3Rocket"; + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ROCKET; + } + + public static boolean placeRocketOnPad(ItemStack stack, World worldIn, TileEntity tile, float centerX, float centerY, float centerZ) + { + // Check whether there is already a rocket on the pad + if (tile instanceof TileEntityLandingPad) + { + if (((TileEntityLandingPad) tile).getDockedEntity() != null) + { + return false; + } + } else + { + return false; + } + + EntityTier3Rocket rocket = new EntityTier3Rocket(worldIn, centerX, centerY, centerZ, EnumRocketType.values()[stack.getItemDamage()]); + + rocket.rotationYaw += 45; + rocket.setPosition(rocket.posX, rocket.posY + rocket.getOnPadYOffset(), rocket.posZ); + worldIn.spawnEntity(rocket); + + if (rocket.getType().getPreFueled()) + { + rocket.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, rocket.getMaxFuel()), true); + } else if (stack.hasTagCompound() && stack.getTagCompound().hasKey("RocketFuel")) + { + rocket.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, stack.getTagCompound().getInteger("RocketFuel")), true); + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/network/PacketSimpleAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/network/PacketSimpleAsteroids.java new file mode 100644 index 00000000..39d8499d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/network/PacketSimpleAsteroids.java @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.network; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketBase; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityGrapple; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityShortRangeTelepad; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PacketSimpleAsteroids extends PacketBase +{ + + public static enum EnumSimplePacketAsteroids + { + + // SERVER + S_UPDATE_ADVANCED_GUI(Side.SERVER, Integer.class, BlockPos.class, Integer.class), + // CLIENT + C_TELEPAD_SEND(Side.CLIENT, BlockVec3.class, Integer.class), + C_UPDATE_GRAPPLE_POS(Side.CLIENT, Integer.class, Vector3.class); + + private Side targetSide; + private Class[] decodeAs; + + private EnumSimplePacketAsteroids(Side targetSide, Class... decodeAs) + { + this.targetSide = targetSide; + this.decodeAs = decodeAs; + } + + public Side getTargetSide() + { + return this.targetSide; + } + + public Class[] getDecodeClasses() + { + return this.decodeAs; + } + } + + private EnumSimplePacketAsteroids type; + private List data; + + public PacketSimpleAsteroids() + { + super(); + } + + public PacketSimpleAsteroids(EnumSimplePacketAsteroids packetType, int dimID, Object[] data) + { + this(packetType, dimID, Arrays.asList(data)); + } + + public PacketSimpleAsteroids(EnumSimplePacketAsteroids packetType, int dimID, List data) + { + super(dimID); + + if (packetType.getDecodeClasses().length != data.size()) + { + GalacticraftPlanets.logger.info("Asteroids Simple Packet found data length different than packet type: " + packetType.name()); + } + + this.type = packetType; + this.data = data; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type.ordinal()); + + try + { + NetworkUtil.encodeData(buffer, this.data); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = EnumSimplePacketAsteroids.values()[buffer.readInt()]; + + if (this.type.getDecodeClasses().length > 0) + { + this.data = NetworkUtil.decodeData(this.type.getDecodeClasses(), buffer); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void handleClientSide(EntityPlayer player) + { + EntityPlayerSP playerBaseClient = null; + + if (player instanceof EntityPlayerSP) + { + playerBaseClient = (EntityPlayerSP) player; + } + + TileEntity tile; + switch (this.type) + { + case C_TELEPAD_SEND: + Entity entity = playerBaseClient.world.getEntityByID((Integer) this.data.get(1)); + + if (entity != null && entity instanceof EntityLivingBase) + { + BlockVec3 pos = (BlockVec3) this.data.get(0); + entity.setPosition(pos.x + 0.5, pos.y + 2.2, pos.z + 0.5); + } + break; + case C_UPDATE_GRAPPLE_POS: + entity = playerBaseClient.world.getEntityByID((Integer) this.data.get(0)); + if (entity != null && entity instanceof EntityGrapple) + { + Vector3 vec = (Vector3) this.data.get(1); + entity.setPosition(vec.x, vec.y, vec.z); + } + break; + default: + break; + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + switch (this.type) + { + case S_UPDATE_ADVANCED_GUI: + TileEntity tile = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile instanceof TileEntityShortRangeTelepad) + { + TileEntityShortRangeTelepad launchController = (TileEntityShortRangeTelepad) tile; + launchController.setAddress((Integer) this.data.get(2)); + } + break; + case 1: + if (tile instanceof TileEntityShortRangeTelepad) + { + TileEntityShortRangeTelepad launchController = (TileEntityShortRangeTelepad) tile; + launchController.setTargetAddress((Integer) this.data.get(2)); + } + break; + default: + break; + } + break; + default: + break; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CanisterRecipes.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CanisterRecipes.java new file mode 100644 index 00000000..c49794ce --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CanisterRecipes.java @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.recipe; + +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.items.ItemOxygenTank; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemCanisterLiquidOxygen; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class CanisterRecipes extends ShapelessRecipes +{ + + public CanisterRecipes(ItemStack stack, NonNullList list) + { + super("canisters", stack, list); + } + + /** + * Used to check if a recipe matches current crafting inventory + */ + @Override + public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_) + { + ItemStack itemCanister = ItemStack.EMPTY; + ItemStack itemTank = ItemStack.EMPTY; + + for (int i = 0; i < p_77569_1_.getSizeInventory(); ++i) + { + ItemStack itemstack1 = p_77569_1_.getStackInSlot(i); + + if (!itemstack1.isEmpty()) + { + Item testItem = itemstack1.getItem(); + if (testItem instanceof ItemCanisterLiquidOxygen || testItem == GCItems.oxygenCanisterInfinite) + { + if (!itemCanister.isEmpty()) + { + // Two canisters + return false; + } + + itemCanister = itemstack1; + } else + { + if (!(testItem instanceof ItemOxygenTank) || !itemTank.isEmpty()) + { + // Something other than an oxygen tank + return false; + } + + itemTank = itemstack1; + } + } + } + + // Need one canister + one tank + if (itemCanister.isEmpty() || itemTank.isEmpty()) + { + return false; + } + + // Empty canister + if (itemCanister.getItemDamage() >= itemCanister.getMaxDamage()) + { + return false; + } + + // Full tank + if (itemTank.getItemDamage() <= 0) + { + return false; + } + + return true; + } + + /** + * Returns an Item that is the result of this recipe + */ + @Override + public ItemStack getCraftingResult(InventoryCrafting inv) + { + ItemStack itemTank = null; // Intentionally null - internal use only + ItemStack itemCanister = null; // Intentionally null - internal use only + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack1 = inv.getStackInSlot(i); + + if (!itemstack1.isEmpty()) + { + Item testItem = itemstack1.getItem(); + if (testItem instanceof ItemCanisterLiquidOxygen || testItem == GCItems.oxygenCanisterInfinite) + { + // Intentional item null check + if (itemCanister != null) + { + // Two canisters + return ItemStack.EMPTY; + } + + itemCanister = itemstack1; + } else + { + // Intentional item null check + if (!(testItem instanceof ItemOxygenTank) || itemTank != null) + { + // Something other than an oxygen tank + return ItemStack.EMPTY; + } + + itemTank = itemstack1; + } + } + } + + // Need one canister + one tank (intentional item null check) + if (itemCanister == null || itemTank == null) + { + return ItemStack.EMPTY; + } + + // Empty canister + if (itemCanister.getItemDamage() >= itemCanister.getMaxDamage()) + { + return ItemStack.EMPTY; + } + + // Full tank + if (itemTank.getItemDamage() <= 0) + { + return ItemStack.EMPTY; + } + + int oxygenAvail = itemCanister.getMaxDamage() - itemCanister.getItemDamage(); + int oxygenToFill = itemTank.getItemDamage() * 5 / 54; + + if (oxygenAvail >= oxygenToFill) + { + ItemStack result = itemTank.copy(); + result.setItemDamage(0); + if (itemCanister.getItem() instanceof ItemCanisterLiquidOxygen) + { + ItemCanisterLiquidOxygen.saveDamage(itemCanister, itemCanister.getItemDamage() + oxygenToFill); + } + return result; + } + + int tankDamageNew = (oxygenToFill - oxygenAvail) * 54 / 5; + ItemStack result = itemTank.copy(); + result.setItemDamage(tankDamageNew); + if (itemCanister.getItem() instanceof ItemCanisterLiquidOxygen) + { + ItemCanisterLiquidOxygen.saveDamage(itemCanister, itemCanister.getMaxDamage()); + } + return result; + } + + @Override + public boolean canFit(int width, int height) + { + return width * height >= 2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CompatModuleIC2Asteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CompatModuleIC2Asteroids.java new file mode 100644 index 00000000..6673afeb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/CompatModuleIC2Asteroids.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.recipe; + +import ic2.api.recipe.Recipes; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import net.minecraft.item.ItemStack; + +public class CompatModuleIC2Asteroids +{ + + public static void addIC2Recipes(ItemStack titaniumIngot, ItemStack titaniumDust) + { + // Titanium dust from small dust + RecipeUtil.addRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 9), new Object[] + {"XXX", "XXX", "XXX", 'X', new ItemStack(GCItems.ic2compat, 1, 7)}); + Recipes.compressor.addRecipe(Recipes.inputFactory.forStack(new ItemStack(GCItems.ic2compat, 1, 7), 9), null, false, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(titaniumIngot, 1), null, false, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(AsteroidsItems.basicItem, 1, 4), 1), null, false, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(AsteroidsItems.basicItem, 1, 6), 1), null, false, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + // Asteroids and Venus versions of aluminium ore (because IC2 oredicting + // or .ini will not pick up aluminium ores) + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(AsteroidBlocks.blockBasic, 1, 3), 1), null, false, new ItemStack(GCItems.ic2compat, 2, 2)); + Recipes.macerator.addRecipe(Recipes.inputFactory.forStack(new ItemStack(VenusBlocks.venusBlock, 1, 6), 1), null, false, new ItemStack(GCItems.ic2compat, 2, 2)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/RecipeManagerAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/RecipeManagerAsteroids.java new file mode 100644 index 00000000..7cf86991 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/recipe/RecipeManagerAsteroids.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.recipe; + +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.recipe.NasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.NonNullList; +import net.minecraftforge.oredict.OreDictionary; + +public class RecipeManagerAsteroids +{ + + public static void addUniversalRecipes() + { + ItemStack titaniumIngot = new ItemStack(AsteroidsItems.basicItem, 1, 0); + ItemStack platingTier3 = new ItemStack(AsteroidsItems.basicItem, 1, 5); + + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidBlocks.blockBasic, 1, 3), new ItemStack(GCItems.basicItem, 1, 5), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidBlocks.blockBasic, 1, 4), new ItemStack(AsteroidsItems.basicItem, 1, 0), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidBlocks.blockBasic, 1, 5), new ItemStack(Items.IRON_INGOT), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 3), new ItemStack(Items.IRON_INGOT), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 4), new ItemStack(AsteroidsItems.basicItem, 1, 0), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 9), new ItemStack(AsteroidsItems.basicItem, 1, 0), 0.5F); + + // Cobblestone->Gravel, Gravel->Sand, Sand->Clay + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.GRAVEL, 9, 0), "XXX", "XXX", "XXX", 'X', new ItemStack(Blocks.COBBLESTONE, 1)); + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.SAND, 9, 0), "XXX", "XXX", "XXX", 'X', new ItemStack(Blocks.GRAVEL, 1)); + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.CLAY, 8, 0), "XXX", "XBX", "XXX", 'X', new ItemStack(Blocks.SAND), 'B', new ItemStack(Items.WATER_BUCKET)); + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.SOUL_SAND, 4, 0), "XFX", "FEF", "XFX", 'X', new ItemStack(Blocks.SAND), 'F', new ItemStack(Items.ROTTEN_FLESH), 'E', + new ItemStack(Items.FERMENTED_SPIDER_EYE)); + CompressorRecipes.addRecipeAdventure(new ItemStack(Blocks.OBSIDIAN, 1, 0), "XXX", "XBX", "XXX", 'X', new ItemStack(Blocks.STONE), 'B', new ItemStack(Items.BLAZE_POWDER)); + // Charcoal into coal + CompressorRecipes.addShapelessAdventure(new ItemStack(Items.COAL, 2, 0), new ItemStack(Items.COAL, 1, 1), new ItemStack(AsteroidBlocks.blockBasic, 1, 0), new ItemStack(Items.COAL, 1, 1)); + CompressorRecipes.addShapelessAdventure(new ItemStack(Items.COAL, 2, 0), new ItemStack(Items.COAL, 1, 1), new ItemStack(AsteroidBlocks.blockBasic, 1, 1), new ItemStack(Items.COAL, 1, 1)); + CompressorRecipes.addShapelessAdventure(new ItemStack(Items.COAL, 2, 0), new ItemStack(Items.COAL, 1, 1), new ItemStack(AsteroidBlocks.blockBasic, 1, 2), new ItemStack(Items.COAL, 1, 1)); + // Splintered ice into Ice + CompressorRecipes.addShapelessRecipe(new ItemStack(Blocks.ICE), new ItemStack(AsteroidBlocks.blockDenseIce), new ItemStack(AsteroidBlocks.blockDenseIce)); + + CompressorRecipes.addShapelessRecipe(new ItemStack(AsteroidsItems.basicItem, 1, 6), titaniumIngot, titaniumIngot); + CompressorRecipes.addShapelessRecipe(platingTier3, new ItemStack(MarsItems.marsItemBasic, 1, 3), new ItemStack(MarsItems.marsItemBasic, 1, 5)); + + HashMap input = new HashMap<>(); + ItemStack plateTier3 = new ItemStack(AsteroidsItems.basicItem, 1, 5); + ItemStack rocketFinsTier2 = new ItemStack(AsteroidsItems.basicItem, 1, 2); + input.put(1, new ItemStack(AsteroidsItems.heavyNoseCone)); + input.put(2, plateTier3); + input.put(3, plateTier3); + input.put(4, plateTier3); + input.put(5, plateTier3); + input.put(6, plateTier3); + input.put(7, plateTier3); + input.put(8, plateTier3); + input.put(9, plateTier3); + input.put(10, plateTier3); + input.put(11, plateTier3); + input.put(12, new ItemStack(GCItems.rocketEngine, 1, 1)); + input.put(13, rocketFinsTier2); + input.put(14, rocketFinsTier2); + input.put(15, new ItemStack(AsteroidsItems.basicItem, 1, 1)); + input.put(16, new ItemStack(GCItems.rocketEngine, 1, 1)); + input.put(17, rocketFinsTier2); + input.put(18, rocketFinsTier2); + input.put(19, ItemStack.EMPTY); + input.put(20, ItemStack.EMPTY); + input.put(21, ItemStack.EMPTY); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 0), input)); + + NonNullList woodChests = OreDictionary.getOres("chestWood"); + HashMap input2; + + for (ItemStack woodChest : woodChests) + { + input2 = new HashMap(input); + input2.put(19, woodChest); + input2.put(20, ItemStack.EMPTY); + input2.put(21, ItemStack.EMPTY); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 1), input2)); + + input2 = new HashMap(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, woodChest); + input2.put(21, ItemStack.EMPTY); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 1), input2)); + + input2 = new HashMap(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, ItemStack.EMPTY); + input2.put(21, woodChest); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 1), input2)); + + input2 = new HashMap(input); + input2.put(19, woodChest); + input2.put(20, woodChest); + input2.put(21, ItemStack.EMPTY); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 2), input2)); + + input2 = new HashMap(input); + input2.put(19, woodChest); + input2.put(20, ItemStack.EMPTY); + input2.put(21, woodChest); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 2), input2)); + + input2 = new HashMap(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, woodChest); + input2.put(21, woodChest); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 2), input2)); + + input2 = new HashMap(input); + input2.put(19, woodChest); + input2.put(20, woodChest); + input2.put(21, woodChest); + GalacticraftRegistry.addT3RocketRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.tier3Rocket, 1, 3), input2)); + } + + for (ItemStack woodChest : woodChests) + { + input = new HashMap(); + input.put(1, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(3, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(5, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(11, new ItemStack(GCItems.heavyPlatingTier1)); + input.put(2, new ItemStack(AsteroidsItems.orionDrive)); + input.put(4, new ItemStack(AsteroidsItems.orionDrive)); + input.put(9, new ItemStack(AsteroidsItems.orionDrive)); + input.put(10, new ItemStack(AsteroidsItems.orionDrive)); + input.put(12, new ItemStack(AsteroidsItems.orionDrive)); + input.put(6, new ItemStack(GCItems.basicItem, 1, 14)); + input.put(7, woodChest); + input.put(8, woodChest); + input.put(13, new ItemStack(AsteroidsItems.basicItem, 1, 8)); + input.put(14, new ItemStack(GCItems.flagPole)); + GalacticraftRegistry.addAstroMinerRecipe(new NasaWorkbenchRecipe(new ItemStack(AsteroidsItems.astroMiner, 1, 0), input)); + } + + // All this is for NEI's benefit + NonNullList list1 = NonNullList.create(); + NonNullList list2 = NonNullList.create(); + NonNullList list3 = NonNullList.create(); + list1.add(Ingredient.fromStacks(new ItemStack(AsteroidsItems.canisterLOX, 1, 751))); + list2.add(Ingredient.fromStacks(new ItemStack(AsteroidsItems.canisterLOX, 1, 834))); + list3.add(Ingredient.fromStacks(new ItemStack(AsteroidsItems.canisterLOX, 1, 918))); + list1.add(Ingredient.fromStacks(new ItemStack(GCItems.oxTankHeavy, 1, 2700))); + list2.add(Ingredient.fromStacks(new ItemStack(GCItems.oxTankMedium, 1, 1800))); + list3.add(Ingredient.fromStacks(new ItemStack(GCItems.oxTankLight, 1, 900))); + RecipeUtil.addCustomRecipe(new CanisterRecipes(new ItemStack(GCItems.oxTankHeavy, 1, 0), list1)); + RecipeUtil.addCustomRecipe(new CanisterRecipes(new ItemStack(GCItems.oxTankMedium, 1, 0), list2)); + RecipeUtil.addCustomRecipe(new CanisterRecipes(new ItemStack(GCItems.oxTankLight, 1, 0), list3)); + } + + public static void loadCompatibilityRecipes() + { + ItemStack titaniumIngot = new ItemStack(AsteroidsItems.basicItem, 1, 0); + if (CompatibilityManager.isIc2Loaded()) + { + CompatModuleIC2Asteroids.addIC2Recipes(titaniumIngot, new ItemStack(AsteroidsItems.basicItem, 1, 9)); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicAstroMiner.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicAstroMiner.java new file mode 100644 index 00000000..1b8d19d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicAstroMiner.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.schematic; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.client.gui.GuiSchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerSchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicAstroMiner implements ISchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerAsteroids.idSchematicRocketT3 + 1; + } + + @Override + public int getGuiID() + { + return GuiIdsPlanets.NASA_WORKBENCH_ASTRO_MINER + Constants.MOD_ID_PLANETS.hashCode(); + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(MarsItems.schematic, 1, 2); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicAstroMiner(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicAstroMiner(player.inventory, pos); + } + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicTier3Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicTier3Rocket.java new file mode 100644 index 00000000..c95859ad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/schematic/SchematicTier3Rocket.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.schematic; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.client.gui.GuiSchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.ContainerSchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicTier3Rocket implements ISchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerAsteroids.idSchematicRocketT3; + } + + @Override + public int getGuiID() + { + return GuiIdsPlanets.NASA_WORKBENCH_TIER_3_ROCKET + Constants.MOD_ID_PLANETS.hashCode(); + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(MarsItems.schematic, 1, 0); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicTier3Rocket(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicTier3Rocket(player.inventory, pos); + } + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tick/AsteroidsTickHandlerServer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tick/AsteroidsTickHandlerServer.java new file mode 100644 index 00000000..42a97346 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tick/AsteroidsTickHandlerServer.java @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tick; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.ASMUtil; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.ShortRangeTelepadHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityMinerBase; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; +import net.minecraft.world.gen.ChunkProviderServer; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.common.gameevent.TickEvent.WorldTickEvent; + +public class AsteroidsTickHandlerServer +{ + + public static ShortRangeTelepadHandler spaceRaceData = null; + public static List activeMiners = new ArrayList<>(); + public static AtomicBoolean loadingSavedChunks = new AtomicBoolean(); + + public static void restart() + { + spaceRaceData = null; + activeMiners.clear(); + } + + @SubscribeEvent + public void onServerTick(TickEvent.ServerTickEvent event) + { + MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); + // Prevent issues when clients switch to LAN servers + if (server == null) + { + return; + } + + if (event.phase == TickEvent.Phase.START) + { + TileEntityMinerBase.checkNewMinerBases(); + + if (AsteroidsTickHandlerServer.spaceRaceData == null) + { + World world = server.getWorld(0); + AsteroidsTickHandlerServer.spaceRaceData = (ShortRangeTelepadHandler) world.getMapStorage().getOrLoadData(ShortRangeTelepadHandler.class, ShortRangeTelepadHandler.saveDataID); + + if (AsteroidsTickHandlerServer.spaceRaceData == null) + { + AsteroidsTickHandlerServer.spaceRaceData = new ShortRangeTelepadHandler(ShortRangeTelepadHandler.saveDataID); + world.getMapStorage().setData(ShortRangeTelepadHandler.saveDataID, AsteroidsTickHandlerServer.spaceRaceData); + } + } + + int index = -1; + for (EntityAstroMiner miner : activeMiners) + { + index++; + if (miner.isDead) + { +// minerIt.remove(); Don't remove it, we want the index number to be static for the others + continue; + } + + if (miner.playerMP != null) + { + GCPlayerStats stats = GCPlayerStats.get(miner.playerMP); + if (stats != null) + { + List list = stats.getActiveAstroMinerChunks(); + boolean inListAlready = false; + Iterator it = list.iterator(); + while (it.hasNext()) + { + BlockVec3 data = it.next(); + if (data.sideDoneBits == index) // SideDoneBits + // won't be saved to + // NBT, but during + // an active server + // session we can + // use it as a + // cross-reference + // to the index here + // - it's a 4th data + // int hidden inside + // a BlockVec3 + { + if (miner.isDead) + { + it.remove(); // Player stats should not save + // position of dead AstroMiner + // entity (probably broken by + // player deliberately breaking + // it) + } else + { + data.x = miner.chunkCoordX; + data.z = miner.chunkCoordZ; + } + inListAlready = true; + break; + } + } + if (!inListAlready) + { + BlockVec3 data = new BlockVec3(miner.chunkCoordX, miner.dimension, miner.chunkCoordZ); + data.sideDoneBits = index; + list.add(data); + } + } + } + + } + } + } + + @SubscribeEvent + public void onWorldTick(WorldTickEvent event) + { + if (event.phase == Phase.START) + { + for (EntityAstroMiner miner : activeMiners) + { + if (miner.playerMP != null && miner.world == event.world && !miner.isDead) + { + miner.serverTick = true; + miner.serverTickSave = miner.ticksExisted; + } + } + } else if (event.phase == Phase.END) + { + for (EntityAstroMiner miner : activeMiners) + { + if (miner.isDead) + { +// minerIt.remove(); Don't remove it, we want the index number to be static for the others + continue; + } + if (miner.playerMP != null && miner.world == event.world) + { + if (miner.serverTick) + { + // Force an entity update tick, if it didn't happen + // already (mainly needed on Sponge servers - entities + // not super close to players seem to be not updated at + // all on Sponge even if the chunk is active, see issue + // #3307) + miner.ticksExisted = miner.serverTickSave + 1; + miner.onUpdate(); + } + + try + { + Set undrop = ASMUtil.getPrivateValue(ChunkProviderServer.class, ((WorldServer) miner.world).getChunkProvider(), "droppedChunks", "field_73248_b"); + undrop.remove(ChunkPos.asLong(miner.chunkCoordX, miner.chunkCoordZ)); + } catch (Exception ignore) + { + } + } + } + } + } + + public static void removeChunkData(GCPlayerStats stats, EntityAstroMiner entityToRemove) + { + int index = 0; + for (EntityAstroMiner miner : activeMiners) + { + if (miner == entityToRemove) // Found it in the list here + { + List list = stats.getActiveAstroMinerChunks(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + BlockVec3 data = it.next(); + if (data.sideDoneBits == index) // Found it in the player's + // stats + { + it.remove(); + return; + } + } + return; + } + index++; + } + } + + /** + * How this works: every spawned or saved (in player stats) miner is added + * to the activeMiners list here. Once per server tick its position will be + * saved to player stats. When the player quits, the saved miner positions + * will be saved with the player's stats NBT When the player next loads, + * loadAstroChunkList will force load those chunks, therefore reactivating + * AstroMiners if those chunks weren't already loaded. + */ + public static void loadAstroChunkList(List activeChunks) + { + List copyList = new LinkedList<>(activeChunks); + activeChunks.clear(); + if (!(AsteroidsTickHandlerServer.loadingSavedChunks.getAndSet(true))) + { + for (BlockVec3 data : copyList) + { + WorldProvider p = WorldUtil.getProviderForDimensionServer(data.y); + if (p != null && p.world != null) + { + GalacticraftPlanets.logger.debug("Loading chunk " + data.y + ": " + data.x + "," + data.z + " - should contain a miner!"); + WorldServer w = (WorldServer) p.world; + boolean previous = CompatibilityManager.forceLoadChunks(w); + w.getChunkProvider().loadChunk(data.x, data.z); + CompatibilityManager.forceLoadChunksEnd(w, previous); + } + } + AsteroidsTickHandlerServer.loadingSavedChunks.set(false); + } + } + + public static int monitorMiner(EntityAstroMiner entityAstroMiner) + { + int result = activeMiners.size(); + activeMiners.add(entityAstroMiner); + GalacticraftPlanets.logger.debug("Monitoring miner " + result); + return result; + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamOutput.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamOutput.java new file mode 100644 index 00000000..6c61719d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamOutput.java @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import java.util.LinkedList; +import micdoodle8.mods.galacticraft.api.power.ILaserNode; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.relauncher.Side; + +public abstract class TileEntityBeamOutput extends TileEntityAdvanced implements ILaserNode +{ + + public LinkedList nodeList = new LinkedList(); + @NetworkedField(targetSide = Side.CLIENT) public BlockPos targetVec = new BlockPos(-1, -1, -1); + public float pitch; + public float yaw; + private BlockPos preLoadTarget = null; + private BlockPos lastTargetVec = new BlockPos(-1, -1, -1); + + public TileEntityBeamOutput(String tileName) + { + super(tileName); + } + + @Override + public void update() + { + if (this.preLoadTarget != null) + { + TileEntity tileAtTarget = this.world.getTileEntity(this.preLoadTarget); + + if (tileAtTarget != null && tileAtTarget instanceof ILaserNode) + { + this.setTarget((ILaserNode) tileAtTarget); + this.preLoadTarget = null; + } + } + + super.update(); + + if (!this.targetVec.equals(this.lastTargetVec)) + { + this.markDirty(); + } + + this.lastTargetVec = this.targetVec; + + if (this.world.isRemote) + { + this.updateOrientation(); + } else if (this.targetVec.getX() == -1 && this.targetVec.getY() == -1 && this.targetVec.getZ() == -1) + { + this.initiateReflector(); + } + + } + + @Override + public void invalidate() + { + super.invalidate(); + this.invalidateReflector(); + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public void onLoad() + { + } + + @Override + public void onChunkUnload() + { + this.invalidateReflector(); + } + + public void invalidateReflector() + { + for (ILaserNode node : this.nodeList) + { + node.removeNode(this); + } + + this.nodeList.clear(); + } + + public void initiateReflector() + { + this.nodeList.clear(); + + int chunkXMin = this.getPos().getX() - 15 >> 4; + int chunkZMin = this.getPos().getZ() - 15 >> 4; + int chunkXMax = this.getPos().getX() + 15 >> 4; + int chunkZMax = this.getPos().getZ() + 15 >> 4; + + for (int cX = chunkXMin; cX <= chunkXMax; cX++) + { + for (int cZ = chunkZMin; cZ <= chunkZMax; cZ++) + { + if (this.world.getChunkProvider().getLoadedChunk(cX, cZ) != null) + { + Chunk chunk = this.world.getChunk(cX, cZ); + + for (Object obj : chunk.getTileEntityMap().values()) + { + if (obj != this && obj instanceof ILaserNode) + { + BlockVec3 deltaPos = new BlockVec3(this).subtract(new BlockVec3(((ILaserNode) obj).getTile())); + + if (deltaPos.x < 16 && deltaPos.y < 16 && deltaPos.z < 16) + { + ILaserNode laserNode = (ILaserNode) obj; + + if (this.canConnectTo(laserNode) && laserNode.canConnectTo(this)) + { + this.addNode(laserNode); + laserNode.addNode(this); + } + } + } + } + } + } + } + + this.setTarget(this.nodeList.peekFirst()); + } + + @Override + public void addNode(ILaserNode node) + { + int index = -1; + + for (int i = 0; i < this.nodeList.size(); i++) + { + if (new BlockVec3(this.nodeList.get(i).getTile()).equals(new BlockVec3(node.getTile()))) + { + index = i; + break; + } + } + + if (index != -1) + { + this.nodeList.set(index, node); + return; + } + + if (this.nodeList.isEmpty()) + { + this.nodeList.add(node); + } else + { + int nodeCompare = this.nodeList.get(0).compareTo(node, new BlockVec3(this)); + + if (nodeCompare <= 0) + { + this.nodeList.addFirst(node); + return; + } + + nodeCompare = this.nodeList.get(this.nodeList.size() - 1).compareTo(node, new BlockVec3(this)); + + if (nodeCompare >= 0) + { + this.nodeList.addLast(node); + return; + } + + index = 1; + + while (index < this.nodeList.size()) + { + index++; + } + + this.nodeList.add(index, node); + } + } + + @Override + public void removeNode(ILaserNode node) + { + int index = -1; + + for (int i = 0; i < this.nodeList.size(); i++) + { + if (new BlockVec3(this.nodeList.get(i).getTile()).equals(new BlockVec3(node.getTile()))) + { + index = i; + break; + } + } + + if (new BlockVec3(node.getTile()).equals(new BlockVec3(this.targetVec))) + { + if (index == 0) + { + if (this.nodeList.size() > 1) + { + this.setTarget(this.nodeList.get(index + 1)); + } else + { + this.setTarget(null); + } + } else if (index > 0) + { + this.setTarget(this.nodeList.get(index - 1)); + } else + { + this.setTarget(null); + } + } + + if (index != -1) + { + this.nodeList.remove(index); + } + } + + public void updateOrientation() + { + if (this.getTarget() != null) + { + Vector3 direction = Vector3.subtract(this.getOutputPoint(false), this.getTarget().getInputPoint()).normalize(); + this.pitch = (float) -Vector3.getAngle(new Vector3(-direction.x, -direction.y, -direction.z), new Vector3(0, 1, 0)) * Constants.RADIANS_TO_DEGREES + 90; + this.yaw = (float) -(Math.atan2(direction.z, direction.x) * Constants.RADIANS_TO_DEGREES) + 90; + } + } + + @Override + public TileEntity getTile() + { + return this; + } + + @Override + public int compareTo(ILaserNode otherNode, BlockVec3 origin) + { + int thisDistance = new BlockVec3(this).subtract(origin).getMagnitudeSquared(); + int otherDistance = new BlockVec3(otherNode.getTile()).subtract(origin).getMagnitudeSquared(); + + if (thisDistance < otherDistance) + { + return 1; + } else if (thisDistance > otherDistance) + { + return -1; + } + + return 0; + } + + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (this.nodeList.size() > 1) + { + int index = -1; + + if (this.getTarget() != null) + { + for (int i = 0; i < this.nodeList.size(); i++) + { + if (new BlockVec3(this.nodeList.get(i).getTile()).equals(new BlockVec3(this.getTarget().getTile()))) + { + index = i; + break; + } + } + } + + if (index == -1) + { + // This shouldn't happen, but just in case... + this.initiateReflector(); + } else + { + index++; + index %= this.nodeList.size(); + this.setTarget(this.nodeList.get(index)); + return true; + } + } + + return false; + } + + @Override + public ILaserNode getTarget() + { + if (this.targetVec.getX() != -1 || this.targetVec.getY() != -1 || this.targetVec.getZ() != -1) + { + TileEntity tileAtTarget = this.world.getTileEntity(this.targetVec); + + if (tileAtTarget != null && tileAtTarget instanceof ILaserNode) + { + return (ILaserNode) tileAtTarget; + } + + return null; + } + + return null; + } + + public void setTarget(ILaserNode target) + { + if (target != null) + { + this.targetVec = target.getTile().getPos(); + } else + { + this.targetVec = new BlockPos(-1, -1, -1); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if (nbt.getBoolean("HasTarget")) + { + this.preLoadTarget = new BlockPos(nbt.getInteger("TargetX"), nbt.getInteger("TargetY"), nbt.getInteger("TargetZ")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setBoolean("HasTarget", this.getTarget() != null); + + if (this.getTarget() != null) + { + nbt.setInteger("TargetX", this.getTarget().getTile().getPos().getX()); + nbt.setInteger("TargetY", this.getTarget().getTile().getPos().getY()); + nbt.setInteger("TargetZ", this.getTarget().getTile().getPos().getZ()); + } + + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReceiver.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReceiver.java new file mode 100644 index 00000000..b539f7d7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReceiver.java @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import com.google.common.collect.Lists; +import micdoodle8.mods.galacticraft.api.power.EnergySource; +import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceAdjacent; +import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceWireless; +import micdoodle8.mods.galacticraft.api.power.IEnergyHandlerGC; +import micdoodle8.mods.galacticraft.api.power.ILaserNode; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConductor; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorage; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorageTile; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseConductor; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectrical; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.tile.ReceiverMode; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityBeamReceiver extends TileEntityBeamOutput implements IEnergyHandlerGC, ILaserNode +{ + + @NetworkedField(targetSide = Side.CLIENT) public EnumFacing facing = null; + private int preLoadFacing = -1; + private float maxRate = 1500; + private EnergyStorage storage = new EnergyStorage(10 * maxRate, maxRate); // In + // broken + // circuits, + // Beam + // Receiver + // will + // accept + // energy + // for + // 0.5s + // (15000gJ + // max) + // then + // stop + @NetworkedField(targetSide = Side.CLIENT) public int modeReceive = ReceiverMode.UNDEFINED.ordinal(); + public Vector3 color = new Vector3(0, 1, 0); + + public TileEntityBeamReceiver() + { + super("container.beam_receiver.name"); + } + + @Override + public void update() + { + super.update(); + + if (this.preLoadFacing != -1) + { + this.setFacing(EnumFacing.byIndex(this.preLoadFacing)); + this.preLoadFacing = -1; + } + + if (!this.world.isRemote) + { + if (this.getTarget() != null && this.modeReceive == ReceiverMode.EXTRACT.ordinal() && this.facing != null) + { + TileEntity tile = this.getAttachedTile(); + + if (tile instanceof TileBaseUniversalElectricalSource) + { + // GC energy source + TileBaseUniversalElectricalSource electricalTile = (TileBaseUniversalElectricalSource) tile; + + if (electricalTile.storage.getEnergyStoredGC() > 0) + { + EnergySourceAdjacent source = new EnergySourceAdjacent(EnumFacing.byIndex(this.facing.getIndex() ^ 1)); + float toSend = Math.min(electricalTile.storage.getMaxExtract(), electricalTile.storage.getEnergyStoredGC()); + float transmitted = this.getTarget().receiveEnergyGC(new EnergySourceWireless(Lists.newArrayList((ILaserNode) this)), toSend, false); + electricalTile.extractEnergyGC(source, transmitted, false); + } + } else if (!(tile instanceof EnergyStorageTile) && !(tile instanceof TileBaseConductor)) + // Another mod's energy source + // But don't use other mods methods to connect Beam Receivers to + // GC's own wires or machines + { + float availableToSend = EnergyUtil.otherModsEnergyExtract(tile, this.facing, this.maxRate, true); + if (availableToSend > 0F) + { + float transmitted = this.getTarget().receiveEnergyGC(new EnergySourceWireless(Lists.newArrayList((ILaserNode) this)), availableToSend, false); + EnergyUtil.otherModsEnergyExtract(tile, this.facing, transmitted, false); + } + } + } else if (this.modeReceive == ReceiverMode.RECEIVE.ordinal() && this.storage.getEnergyStoredGC() > 0) + { + // One Beam Receiver might be powered by multiple transmitters - + // allow for 5 at maximum transfer rate + float maxTransfer = Math.min(this.storage.getEnergyStoredGC(), maxRate * 5); + + if (maxTransfer < 0.01F) + // Stop updating this when de minimis energy remains + { + this.storage.extractEnergyGCnoMax(maxTransfer, false); + } else + { + TileEntity tileAdj = this.getAttachedTile(); + + if (tileAdj instanceof TileBaseUniversalElectrical) + { + TileBaseUniversalElectrical electricalTile = (TileBaseUniversalElectrical) tileAdj; + EnergySourceAdjacent source = new EnergySourceAdjacent(this.facing.getOpposite()); + this.storage.extractEnergyGCnoMax(electricalTile.receiveEnergyGC(source, maxTransfer, false), false); + } else if (!(tileAdj instanceof EnergyStorageTile) && !(tileAdj instanceof TileBaseConductor)) + // Dont use other mods methods to connect Beam Receivers to + // GC's own wires or machines + { + float otherModTransferred = EnergyUtil.otherModsEnergyTransfer(tileAdj, this.facing, maxTransfer, false); + if (otherModTransferred > 0F) + { + this.storage.extractEnergyGCnoMax(otherModTransferred, false); + } + } + } + } + } + } + + @Override + public double getPacketRange() + { + return 24.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public Vector3 getInputPoint() + { + Vector3 headVec = new Vector3(this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5); + if (this.facing != null) + { + headVec.x += this.facing.getXOffset() * 0.1F; + headVec.y += this.facing.getYOffset() * 0.1F; + headVec.z += this.facing.getZOffset() * 0.1F; + } + return headVec; + } + + @Override + public Vector3 getOutputPoint(boolean offset) + { + Vector3 headVec = new Vector3(this.getPos().getX() + 0.5, this.getPos().getY() + 0.5, this.getPos().getZ() + 0.5); + if (this.facing != null) + { + headVec.x += this.facing.getXOffset() * 0.1F; + headVec.y += this.facing.getYOffset() * 0.1F; + headVec.z += this.facing.getZOffset() * 0.1F; + } + return headVec; + } + + @Override + public TileEntity getTile() + { + return this; + } + + public TileEntity getAttachedTile() + { + if (this.facing == null) + { + return null; + } + + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, this.facing); + + if (tile == null || tile.isInvalid()) + { + this.setFacing(null); + } + + if (tile instanceof IConductor) + { + this.setFacing(null ); + return null; + } + + if (tile instanceof EnergyStorageTile) + { + EnergyStorage attachedStorage = ((EnergyStorageTile) tile).storage; + this.storage.setCapacity(attachedStorage.getCapacityGC() - attachedStorage.getEnergyStoredGC()); + this.storage.setMaxExtract(attachedStorage.getMaxExtract()); + this.storage.setMaxReceive(attachedStorage.getMaxReceive()); + } + + return tile; + } + + @Override + public float receiveEnergyGC(EnergySource from, float amount, boolean simulate) + { + if (this.modeReceive != ReceiverMode.RECEIVE.ordinal()) + { + return 0; + } + + this.getAttachedTile(); + + if (this.facing == null) + { + return 0; + } + + // if (received < amount) + // { + // if (tile instanceof EnergyStorageTile) + // { + // received += ((EnergyStorageTile) tile).storage.receiveEnergyGC(amount + // - received, simulate); + // } + // } + + return this.storage.receiveEnergyGC(amount, simulate); + } + + @Override + public float extractEnergyGC(EnergySource from, float amount, boolean simulate) + { + if (this.modeReceive != ReceiverMode.EXTRACT.ordinal()) + { + return 0; + } + + TileEntity tile = this.getAttachedTile(); + + if (this.facing == null) + { + return 0; + } + + float extracted = this.storage.extractEnergyGC(amount, simulate); + + if (extracted < amount) + { + if (tile instanceof EnergyStorageTile) + { + extracted += ((EnergyStorageTile) tile).storage.extractEnergyGC(amount - extracted, simulate); + } + } + + return extracted; + } + + @Override + public float getEnergyStoredGC(EnergySource from) + { + TileEntity tile = this.getAttachedTile(); + + if (this.facing == null) + { + return 0; + } + + return this.storage.getEnergyStoredGC(); + } + + @Override + public float getMaxEnergyStoredGC(EnergySource from) + { + TileEntity tile = this.getAttachedTile(); + + if (this.facing == null) + { + return 0; + } + + return this.storage.getCapacityGC(); + } + + @Override + public boolean nodeAvailable(EnergySource from) + { + TileEntity tile = this.getAttachedTile(); + + return this.facing != null; + + } + + public void setFacing(EnumFacing newDirection) + { + if (newDirection != this.facing) + { + if (newDirection == null) + { + this.modeReceive = ReceiverMode.UNDEFINED.ordinal(); + } else + { + TileEntity tile = new BlockVec3(this).getTileEntityOnSide(this.world, newDirection); + + if (tile == null) + { + this.modeReceive = ReceiverMode.UNDEFINED.ordinal(); + } else if (tile instanceof EnergyStorageTile) + { + ReceiverMode mode = ((EnergyStorageTile) tile).getModeFromDirection(newDirection.getOpposite()); + + if (mode != null) + { + this.modeReceive = mode.ordinal(); + } else + { + this.modeReceive = ReceiverMode.UNDEFINED.ordinal(); + } + } else if (EnergyUtil.otherModCanReceive(tile, newDirection.getOpposite())) + { + this.modeReceive = ReceiverMode.RECEIVE.ordinal(); + } else if (EnergyUtil.otherModCanProduce(tile, newDirection.getOpposite())) + { + this.modeReceive = ReceiverMode.EXTRACT.ordinal(); + } + } + } + + this.facing = newDirection; + } + + @Override + public boolean canConnectTo(ILaserNode laserNode) + { + if (this.modeReceive != ReceiverMode.UNDEFINED.ordinal() && this.color.equals(laserNode.getColor())) + { + if (laserNode instanceof TileEntityBeamReceiver) + { + return ((TileEntityBeamReceiver) laserNode).modeReceive != this.modeReceive; + } + + return true; + } + + return false; + } + + @Override + public Vector3 getColor() + { + return new Vector3(0, 1, 0); + } + + @Override + public ILaserNode getTarget() + { + if (this.modeReceive == ReceiverMode.EXTRACT.ordinal()) + { + return super.getTarget(); + } + + return null; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.preLoadFacing = nbt.getInteger("FacingSide"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("FacingSide", this.facing == null ? this.preLoadFacing : this.facing.ordinal()); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + private AxisAlignedBB renderAABB; + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 2, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_SHORT; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReflector.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReflector.java new file mode 100644 index 00000000..9b2428e1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityBeamReflector.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import micdoodle8.mods.galacticraft.api.power.EnergySource; +import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceWireless; +import micdoodle8.mods.galacticraft.api.power.ILaserNode; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.energy.tile.EnergyStorage; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityBeamReflector extends TileEntityBeamOutput implements ILaserNode +{ + + public Vector3 color = new Vector3(0, 1, 0); + private EnergyStorage storage = new EnergyStorage(10, 1); + +// @Override +// public void update() +// { +// super.update(); +// } + + public TileEntityBeamReflector() + { + super("container.beam_reflector.name"); + } + + @Override + public Vector3 getInputPoint() + { + float distance = 0.15F; + Vector3 deviation = new Vector3(Math.sin(Math.toRadians(this.yaw - 180)) * distance, 0, Math.cos(Math.toRadians(this.yaw - 180)) * distance); + Vector3 headVec = new Vector3(this.getPos().getX() + 0.5, this.getPos().getY() + 1.13228 / 2.0, this.getPos().getZ() + 0.5); + headVec.translate(deviation.clone().invert()); + return headVec; + } + + @Override + public Vector3 getOutputPoint(boolean offset) + { + return new Vector3(this.getPos().getX() + 0.5, this.getPos().getY() + 1.13228 / 2.0, this.getPos().getZ() + 0.5); + } + + @Override + public double getPacketRange() + { + return 24.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public Vector3 getColor() + { + return this.color; + } + + @Override + public boolean canConnectTo(ILaserNode laserNode) + { + return this.color.equals(laserNode.getColor()); + } + + @Override + public float receiveEnergyGC(EnergySource from, float amount, boolean simulate) + { + if (this.getTarget() != null) + { + if (from instanceof EnergySourceWireless) + { + if (((EnergySourceWireless) from).nodes.contains(this.getTarget())) + { + return 0; + } + + ((EnergySourceWireless) from).nodes.add(this); + + return this.getTarget().receiveEnergyGC(from, amount, simulate); + } else + { + return 0; + } + } + + return this.storage.receiveEnergyGC(amount, simulate); + } + + @Override + public float extractEnergyGC(EnergySource from, float amount, boolean simulate) + { + return 0; + } + + @Override + public boolean nodeAvailable(EnergySource from) + { + return from instanceof EnergySourceWireless; + } + + @Override + public float getEnergyStoredGC(EnergySource from) + { + return this.storage.getEnergyStoredGC(); + } + + @Override + public float getMaxEnergyStoredGC(EnergySource from) + { + return this.storage.getCapacityGC(); + } + + @Override + public void setTarget(ILaserNode target) + { + super.setTarget(target); + } + + private AxisAlignedBB renderAABB; + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(1, 2, 1)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_SHORT; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBase.java new file mode 100644 index 00000000..0cfe9350 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBase.java @@ -0,0 +1,1121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import com.google.common.collect.Lists; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RecipeUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumFacing.Axis; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityMinerBase extends TileBaseElectricBlockWithInventory implements ISidedInventory, IMultiBlock, IMachineSides +{ + + public static final int HOLDSIZE = 72; + private int[] slotArray; + public boolean isMaster = false; + public EnumFacing facing = EnumFacing.NORTH; + private BlockPos mainBlockPosition; + private LinkedList targetPoints = new LinkedList<>(); + private WeakReference masterTile = null; + public boolean updateClientFlag; + public boolean findTargetPointsFlag; + public int linkCountDown = 0; + public static Map> newMinerBases = new HashMap>(); + private AxisAlignedBB renderAABB; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataAIState; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataDX; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataDY; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataDZ; + @NetworkedField(targetSide = Side.CLIENT) public int linkedMinerDataCount; + + public void setMainBlockPosition(BlockPos mainBlockPosition) + { + this.mainBlockPosition = mainBlockPosition; + } + + /** + * The number of players currently using this chest + */ + public int numUsingPlayers; + + /** + * Server sync counter (once per 20 ticks) + */ + private int ticksSinceSync; + + private boolean spawnedMiner = false; + + public EntityAstroMiner linkedMiner = null; + public UUID linkedMinerID = null; + private boolean initialised; + + public TileEntityMinerBase() + { + super("tile.miner_base.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 20 : 12); + this.slotArray = new int[HOLDSIZE]; + for (int i = 0; i < HOLDSIZE; i++) + { + this.slotArray[i] = i + 1; + } + this.inventory = NonNullList.withSize(HOLDSIZE + 1, ItemStack.EMPTY); + } + + public static void checkNewMinerBases() + { + Iterator>> entries = newMinerBases.entrySet().iterator(); + while (entries.hasNext()) + { + Entry> entry = entries.next(); + if (entry.getValue().isEmpty()) + continue; + + World w = WorldUtil.getWorldForDimensionServer(entry.getKey()); + if (w == null) + { + GalacticraftPlanets.logger.error("Astro Miner Base placement: Unable to find server world for dim " + entry.getKey()); + entries.remove(); + continue; + } + + for (BlockPos posMain : entry.getValue()) + { + BlockPos master = new BlockPos(posMain); + for (int x = 0; x < 2; x++) + { + for (int y = 0; y < 2; y++) + { + for (int z = 0; z < 2; z++) + { + BlockPos pos = posMain.add(x, y, z); + w.setBlockState(pos, AsteroidBlocks.minerBaseFull.getDefaultState(), 2); + final TileEntity tile = w.getTileEntity(pos); + + if (tile instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tile).setMainBlockPos(master); + ((TileEntityMinerBase) tile).updateClientFlag = true; + } + } + } + } + } + + entry.getValue().clear(); + } + } + + public static void addNewMinerBase(int dimID, BlockPos blockPos) + { + if (newMinerBases.containsKey(dimID)) + { + newMinerBases.get(dimID).add(blockPos); + } else + { + List blockPositions = Lists.newArrayList(); + newMinerBases.put(dimID, blockPositions); + blockPositions.add(blockPos); + } + } + + @Override + public void update() + { + super.update(); + + if (!this.initialised) + { + this.initialised = true; + if (!this.world.isRemote && !this.isMaster) + { + if (this.getMaster() == null) + { + this.world.setBlockState(this.getPos(), AsteroidBlocks.blockMinerBase.getDefaultState(), 2); + } + } + } + + if (this.updateClientFlag) + { + assert (!this.world.isRemote); // Just checking: updateClientFlag + // should not be capable of being set + // on clients + this.updateAllInDimension(); + this.updateClientFlag = false; + } + + if (this.findTargetPointsFlag) + { + if (this.isMaster && this.linkedMiner != null) + { + this.findTargetPoints(); + } + this.findTargetPointsFlag = false; + } + + // TODO: Find linkedminer by UUID and update it if not chunkloaded? + + if (!this.isMaster) + { + TileEntityMinerBase master = this.getMaster(); + + if (master != null) + { + float energyLimit = master.storage.getCapacityGC() - master.storage.getEnergyStoredGC(); + if (energyLimit < 0F) + { + energyLimit = 0F; + } + this.storage.setCapacity(energyLimit); + this.storage.setMaxExtract(energyLimit); + this.storage.setMaxReceive(energyLimit); + float hasEnergy = this.getEnergyStoredGC(); + if (hasEnergy > 0F) + { + this.extractEnergyGC(null, master.receiveEnergyGC(null, hasEnergy, false), false); + } + } + } + + // Used for refreshing client with linked miner position data + if (this.linkCountDown > 0) + { + this.linkCountDown--; + } + + if (this.isMaster && !this.world.isRemote) + { + this.updateGUIstate(); + // System.out.println("Miner base state " + + // this.linkedMinerDataAIState); + } + } + + public void updateGUIstate() + { + if (this.linkedMinerID == null) + { + this.linkedMinerDataAIState = -3; + return; + } + EntityAstroMiner miner = this.linkedMiner; + if (miner == null || miner.isDead) + { + this.linkedMinerDataAIState = -3; + return; + } + if (this.linkCountDown > 0) + { + this.linkedMinerDataAIState = -2; + return; + } + + this.linkedMinerDataAIState = miner.AIstate; + this.linkedMinerDataDX = (MathHelper.floor(this.linkedMiner.posX) - this.getPos().getX() - 1); + this.linkedMinerDataDY = (MathHelper.floor(this.linkedMiner.posY) - this.getPos().getY() - 1); + this.linkedMinerDataDZ = (MathHelper.floor(this.linkedMiner.posZ) - this.getPos().getZ() - 1); + this.linkedMinerDataCount = miner.mineCount; + } + + // TODO - currently unused, the master position replaces this? + protected void initialiseMultiTiles(BlockPos pos, World world) + { + List positions = new ArrayList<>(); + this.getPositions(pos, positions); + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMinerBase) + { + ((TileEntityMinerBase) tile).mainBlockPosition = pos; + } + } + } + + public boolean spawnMiner(EntityPlayerMP player) + { + if (this.isMaster) + { + if (this.linkedMiner != null) + { + if (this.linkedMiner.isDead) + { + this.unlinkMiner(); + } + } + if (this.linkedMinerID == null) + { +// System.err.println("" + this.facing); + if (EntityAstroMiner.spawnMinerAtBase(this.world, this.getPos().getX() + 1, this.getPos().getY() + 1, this.getPos().getZ() + 1, this.facing, new BlockVec3(this), player)) + { + this.findTargetPoints(); + return true; + } + } + return false; + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.spawnMiner(player); + } + return false; + } + + public TileEntityMinerBase getMaster() + { + if (this.mainBlockPosition == null) + { + return null; + } + + if (masterTile == null) + { + TileEntity tileEntity = this.world.getTileEntity(this.mainBlockPosition); + + if (tileEntity instanceof TileEntityMinerBase) + { + masterTile = new WeakReference(((TileEntityMinerBase) tileEntity)); + } + + if (masterTile == null) + { + return null; + } + } + + TileEntityMinerBase master = this.masterTile.get(); + + if (master != null && master.isMaster) + { + return master; + } + + return null; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.facing = EnumFacing.byHorizontalIndex(nbt.getInteger("facing")); + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.isMaster = nbt.getBoolean("isMaster"); + if (this.isMaster) + { + this.updateClientFlag = true; + } else + { + NBTTagCompound tagCompound = nbt.getCompoundTag("masterpos"); + if (tagCompound.getKeySet().isEmpty()) + this.setMainBlockPosition(null); + else + { + this.setMainBlockPosition(new BlockPos(tagCompound.getInteger("x"), tagCompound.getInteger("y"), tagCompound.getInteger("z"))); + this.updateClientFlag = true; + } + } + if (nbt.hasKey("LinkedUUIDMost", 4) && nbt.hasKey("LinkedUUIDLeast", 4)) + { + this.linkedMinerID = new UUID(nbt.getLong("LinkedUUIDMost"), nbt.getLong("LinkedUUIDLeast")); + } else + { + this.linkedMinerID = null; + } + if (nbt.hasKey("TargetPoints")) + { + this.targetPoints.clear(); + final NBTTagList mpList = nbt.getTagList("TargetPoints", 10); + for (int j = 0; j < mpList.tagCount(); j++) + { + NBTTagCompound bvTag = mpList.getCompoundTagAt(j); + this.targetPoints.add(BlockVec3.readFromNBT(bvTag)); + } + } else + { + this.findTargetPointsFlag = this.isMaster; + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("isMaster", this.isMaster); + if (!this.isMaster && this.mainBlockPosition != null) + { + NBTTagCompound masterTag = new NBTTagCompound(); + masterTag.setInteger("x", this.mainBlockPosition.getX()); + masterTag.setInteger("y", this.mainBlockPosition.getY()); + masterTag.setInteger("z", this.mainBlockPosition.getZ()); + nbt.setTag("masterpos", masterTag); + } + nbt.setInteger("facing", this.facing.getHorizontalIndex()); + if (this.isMaster && this.linkedMinerID != null) + { + nbt.setLong("LinkedUUIDMost", this.linkedMinerID.getMostSignificantBits()); + nbt.setLong("LinkedUUIDLeast", this.linkedMinerID.getLeastSignificantBits()); + } + NBTTagList mpList = new NBTTagList(); + for (int j = 0; j < this.targetPoints.size(); j++) + { + mpList.appendTag(this.targetPoints.get(j).writeToNBT(new NBTTagCompound())); + } + nbt.setTag("TargetPoints", mpList); + return nbt; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return this.world.getTileEntity(this.getPos()) == this && entityPlayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + public boolean addToInventory(ItemStack itemstack) + { + // TODO - add test for is container open and if so use + // Container.mergeItemStack + + boolean flag1 = false; + int k = 1; + int invSize = this.getSizeInventory(); + + ItemStack existingStack; + + if (itemstack.isStackable()) + { + while (!itemstack.isEmpty() && k < invSize) + { + existingStack = this.getInventory().get(k); + + if (RecipeUtil.stacksMatch(itemstack, existingStack)) + { + int combined = existingStack.getCount() + itemstack.getCount(); + + if (combined <= itemstack.getMaxStackSize()) + { + itemstack.setCount(0); + existingStack.setCount(combined); + flag1 = true; + } else if (existingStack.getCount() < itemstack.getMaxStackSize()) + { + itemstack.shrink(itemstack.getMaxStackSize() - existingStack.getCount()); + existingStack.setCount(itemstack.getMaxStackSize()); + flag1 = true; + } + } + + ++k; + } + } + + if (!itemstack.isEmpty()) + { + k = 1; + + while (k < invSize) + { + existingStack = this.getInventory().get(k); + + if (existingStack.isEmpty()) + { + this.getInventory().set(k, itemstack.copy()); + itemstack.setCount(0); + flag1 = true; + break; + } + + ++k; + } + } + + this.markDirty(); + return flag1; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + /** + * invalidates a tile entity + */ + @Override + public void invalidate() + { + super.invalidate(); + this.updateContainingBlockInfo(); + } + + @Override + public double getPacketRange() + { + return 20.0D; + } + + @Override + public int getPacketCooldown() + { + return 3; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public NonNullList getInventory() + { + if (this.isMaster) + { + return super.getInventory(); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.getInventory(); + } + + return super.getInventory(); + } + + @Override + public boolean shouldUseEnergy() + { + return false; + } + + public void setMainBlockPos(BlockPos master) + { + this.masterTile = null; + if (this.getPos().equals(master)) + { + this.isMaster = true; + this.setMainBlockPosition(null); + return; + } + this.isMaster = false; + this.setMainBlockPosition(master); + this.markDirty(); + } + + public void onBlockRemoval() + { + if (this.isMaster) + { + this.invalidate(); + this.onDestroy(this); + return; + } + + TileEntityMinerBase master = this.getMaster(); + + if (master != null && !master.isInvalid()) + { + this.world.destroyBlock(master.getPos(), false); + } + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + if (this.isMaster) + { + ItemStack holding = entityPlayer.getActiveItemStack(); + if (holding != null && holding.getItem() == AsteroidsItems.astroMiner) + { + return false; + } + + entityPlayer.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_ASTEROIDS, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + return true; + } else + { + TileEntityMinerBase master = this.getMaster(); + return master != null && master.onActivated(entityPlayer); + } + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.MINER_BASE; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + for (int y = 0; y < 2; y++) + { + if (placedPosition.getY() + y >= this.world.getHeight()) + break; + for (int x = 0; x < 2; x++) + { + for (int z = 0; z < 2; z++) + { + if (x + y + z == 0) + continue; + positions.add(new BlockPos(placedPosition.getX() + x, placedPosition.getY() + y, placedPosition.getZ() + z)); + } + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == AsteroidBlocks.minerBaseFull) // GCBlocks.fakeBlock + // && + // (EnumBlockMultiType) + // stateAt.getValue(BlockMulti.MULTI_TYPE) + // == + // EnumBlockMultiType.MINER_BASE) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + } + + // TODO + // maybe 2 electrical inputs are needed? + // chest goes above (could be 2 chests or other mods storage) + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(pos, pos.add(2, 2, 2)); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public void updateFacing() + { + if (this.isMaster && this.linkedMinerID == null) + { + // Re-orient the block + switch (this.facing) + { + case SOUTH: + this.facing = EnumFacing.WEST; + break; + case EAST: + this.facing = EnumFacing.SOUTH; + break; + case WEST: + this.facing = EnumFacing.NORTH; + break; + case NORTH: + this.facing = EnumFacing.EAST; + break; + } + + super.updateFacing(); + } else + { + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + master.updateFacing(); + } + } + + if (!this.world.isRemote) + { + this.updateAllInDimension(); + } + + for (EnumFacing facing : EnumFacing.VALUES) + { + BlockPos offset = this.getPos().offset(facing); + TileEntity tileOffset = this.world.getTileEntity(offset); + if (tileOffset != null && !(tileOffset instanceof TileEntityMinerBase)) + { + IBlockState state = this.world.getBlockState(offset); + state.getBlock().neighborChanged(state, this.world, offset, this.world.getBlockState(this.getPos()).getBlock(), this.getPos()); + world.markBlockRangeForRenderUpdate(offset, offset); + } + } + + this.markDirty(); + } + + @Override + public void buildDataPacket(int[] data) + { + int x, y, z; + if (this.mainBlockPosition != null) + { + x = this.mainBlockPosition.getX(); + y = this.mainBlockPosition.getY(); + z = this.mainBlockPosition.getZ(); + } else + { + x = this.getPos().getX(); + y = this.getPos().getY(); + z = this.getPos().getZ(); + } + int link = (this.linkedMinerID != null) ? 8 : 0; + data[0] = link + this.facing.ordinal(); + data[1] = x; + data[2] = y; + data[3] = z; + } + + @Override + public EnumFacing getElectricInputDirection() + { + if (this.isMaster) + { + return this.facing.getOpposite(); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.facing.getOpposite(); + } + return null; + } + + public void linkMiner(EntityAstroMiner entityAstroMiner) + { + this.linkedMiner = entityAstroMiner; + this.linkedMinerID = this.linkedMiner.getUniqueID(); + this.updateClientFlag = true; + this.markDirty(); + } + + public void unlinkMiner() + { + this.linkedMiner = null; + this.linkedMinerID = null; + this.updateClientFlag = true; + this.markDirty(); + } + + public UUID getLinkedMiner() + { + if (this.isMaster) + { + return this.linkedMinerID; + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.linkedMinerID; + } + return null; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (this.isMaster) + { + return side != this.facing ? slotArray : new int[] + {}; + } + + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.getSlotsForFace(side); + } + + return new int[] + {}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isMaster) + { + if (side != this.facing) + { + return slotID > 0 || ItemElectricBase.isElectricItemEmpty(itemstack); + } + + return false; + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.canExtractItem(slotID, itemstack, side); + } + + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if (this.isMaster) + { + return slotID > 0 || ItemElectricBase.isElectricItem(itemstack.getItem()); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.isItemValidForSlot(slotID, itemstack); + } + + return false; + } + + @Override + public ItemStack getStackInSlot(int par1) + { + if (this.isMaster) + { + return super.getStackInSlot(par1); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.getStackInSlot(par1); + } + + return ItemStack.EMPTY; + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.isMaster) + { + return super.decrStackSize(par1, par2); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.decrStackSize(par1, par2); + } + + return ItemStack.EMPTY; + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (this.isMaster) + { + return super.removeStackFromSlot(par1); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + return master.removeStackFromSlot(par1); + } + + return ItemStack.EMPTY; + } + + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + if (this.isMaster) + { + super.setInventorySlotContents(par1, par2ItemStack); + return; + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + master.setInventorySlotContents(par1, par2ItemStack); + } + + return; + } + + @Override + public ItemStack getBatteryInSlot() + { + if (this.isMaster) + { + return this.getStackInSlot(0); + } + TileEntityMinerBase master = this.getMaster(); + if (master != null) + { + master.getBatteryInSlot(); + } + + return null; + } + + @Override + public int getSizeInventory() + { + return HOLDSIZE + 1; + } + + public BlockVec3 findNextTarget() + { + if (!this.targetPoints.isEmpty()) + { + BlockVec3 pos = this.targetPoints.removeFirst(); + this.markDirty(); + if (pos != null) + { + return pos.clone(); + } + } + + // No more mining targets, the whole area is mined + return null; + } + + private void findTargetPoints() + { + this.targetPoints.clear(); + BlockVec3 posnTarget = new BlockVec3(this); + + if (this.world.provider instanceof WorldProviderAsteroids) + { + ArrayList roids = ((WorldProviderAsteroids) this.world.provider).getClosestAsteroidsXZ(posnTarget.x, posnTarget.y, posnTarget.z, this.facing.getIndex(), 100); + if (roids != null && roids.size() > 0) + { + this.targetPoints.addAll(roids); + return; + } + } + + posnTarget.modifyPositionFromSide(this.facing, this.world.rand.nextInt(16) + 32); + int miny = Math.min(this.getPos().getY() * 2 - 90, this.getPos().getY() - 22); + if (miny < 5) + { + miny = 5; + } + posnTarget.y = miny + 5 + this.world.rand.nextInt(4); + + this.targetPoints.add(posnTarget); + + EnumFacing lateral = EnumFacing.NORTH; + EnumFacing inLine = this.facing; + if (inLine.getAxis() == Axis.Z) + { + lateral = EnumFacing.WEST; + } + + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 13)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -13)); + if (posnTarget.y > 17) + { + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 7).modifyPositionFromSide(EnumFacing.DOWN, 11)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -7).modifyPositionFromSide(EnumFacing.DOWN, 11)); + } else + { + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 26)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -26)); + } + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 7).modifyPositionFromSide(EnumFacing.UP, 11)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -7).modifyPositionFromSide(EnumFacing.UP, 11)); + if (posnTarget.y < this.getPos().getY() - 38) + { + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, 13).modifyPositionFromSide(EnumFacing.UP, 22)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(EnumFacing.UP, 22)); + this.targetPoints.add(posnTarget.clone().modifyPositionFromSide(lateral, -13).modifyPositionFromSide(EnumFacing.UP, 22)); + } + + int s = this.targetPoints.size(); + for (int i = 0; i < s; i++) + { + this.targetPoints.add(this.targetPoints.get(i).clone().modifyPositionFromSide(inLine, EntityAstroMiner.MINE_LENGTH + 6)); + } + + this.markDirty(); + return; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + // Used to recall miner + TileEntityMinerBase master; + if (!this.isMaster) + { + master = this.getMaster(); + if (master == null) + { + return; + } + } else + { + master = this; + } + if (master.linkedMiner != null) + { + master.linkedMiner.recall(); + } + } + + @Override + public EnumFacing byIndex() + { + return this.facing; + } + + /** + * This would normally be used by IMachineSides but here it's overridden to + * get at the same facing packet for the MinerBase's own purposes + * (IMachineSides won't be using it because as implemented here, extending + * TileEntityElectricBlock, sides are not configurable) + */ + + @Override + public void updateClient(List data) + { + int data1 = (Integer) data.get(1); + this.facing = EnumFacing.byIndex(data1 & 7); + this.setMainBlockPos(new BlockPos((Integer) data.get(2), (Integer) data.get(3), (Integer) data.get(4))); + if (data1 > 7) + { + this.linkedMinerID = UUID.randomUUID(); + } else + { + this.linkedMinerID = null; + } + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return IMachineSidesProperties.NOT_CONFIGURABLE; + } + + @Override + public MachineSide[] listConfigurableSides() + { + return null; + } + + @Override + public Face[] listDefaultFaces() + { + return null; + } + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + return null; + } + + @Override + public void setupMachineSides(int length) + { + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBaseSingle.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBaseSingle.java new file mode 100644 index 00000000..f3bec3f3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityMinerBaseSingle.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileEntityMinerBaseSingle extends TileEntity implements ITickable +{ + + private int corner = 0; + + @Override + public void update() + { + if (!this.world.isRemote && this.corner == 0) + { + final ArrayList attachedBaseBlocks = new ArrayList(); + + final int thisX = this.getPos().getX(); + final int thisY = this.getPos().getY(); + final int thisZ = this.getPos().getZ(); + + boolean success = true; + SEARCH: for (int x = 0; x < 2; x++) + { + for (int y = 0; y < 2; y++) + { + for (int z = 0; z < 2; z++) + { + BlockPos pos = new BlockPos(x + thisX, y + thisY, z + thisZ); + final TileEntity tile = this.world.isBlockLoaded(pos, false) ? this.world.getTileEntity(pos) : null; + + if (tile instanceof TileEntityMinerBaseSingle && !tile.isInvalid() && ((TileEntityMinerBaseSingle) tile).corner == 0) + { + attachedBaseBlocks.add(tile); + } else + { + success = false; + break SEARCH; + } + } + } + } + + if (success) + { + TileEntityMinerBase.addNewMinerBase(GCCoreUtil.getDimensionID(this), this.getPos()); + for (final TileEntity tile : attachedBaseBlocks) + { + ((TileEntityMinerBaseSingle) tile).corner = 1; + this.world.setBlockToAir(this.getPos()); + } + // Don't try setting a new block with a TileEntity, because new + // tiles can + // get removed after the end of this tileEntity.update() tick - + // setting a new block + // here would automatically invalidate this tile. + // + // (It's because if this tileEntity is now invalid, + // World.updateEntities() removes + // *any* tileEntity at this position - see call to + // Chunk.removeTileEntity(pos)nee!) + // + // Equally if any others of these TileEntityMinerBaseSingle are + // ticked AFTER this + // in the same server update tick, then those new ones will also + // be removed + // because their TileEntityMinerBaseSingle is now, inevitably, + // invalid! + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityShortRangeTelepad.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityShortRangeTelepad.java new file mode 100644 index 00000000..b54cb781 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityShortRangeTelepad.java @@ -0,0 +1,675 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import io.netty.buffer.ByteBuf; +import java.util.EnumSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.BlockTelepadFake; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.ShortRangeTelepadHandler; +import micdoodle8.mods.galacticraft.planets.asteroids.network.PacketSimpleAsteroids; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityShortRangeTelepad extends TileBaseElectricBlock implements IMultiBlock, IInventoryDefaults, ISidedInventory +{ + + public enum EnumTelepadSearchResult + { + VALID, NOT_FOUND, TOO_FAR, WRONG_DIM, TARGET_DISABLED + } + + public static final int MAX_TELEPORT_TIME = 150; + public static final int TELEPORTER_RANGE = 256; + public static final int ENERGY_USE_ON_TELEPORT = 2500; + + @NetworkedField(targetSide = Side.CLIENT) public int address = -1; + @NetworkedField(targetSide = Side.CLIENT) public boolean addressValid = false; + @NetworkedField(targetSide = Side.CLIENT) public int targetAddress = -1; + public EnumTelepadSearchResult targetAddressResult = EnumTelepadSearchResult.NOT_FOUND; + @NetworkedField(targetSide = Side.CLIENT) public int teleportTime = 0; + @NetworkedField(targetSide = Side.CLIENT) public String owner = ""; + @NetworkedField(targetSide = Side.CLIENT) public boolean teleporting; + private AxisAlignedBB renderAABB; + + public TileEntityShortRangeTelepad() + { + super("container.short_range_telepad.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 115 : 50); + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + public int canTeleportHere() + { + if (this.world.isRemote) + { + return -1; + } + + this.setAddress(this.address); + this.setTargetAddress(this.targetAddress); + + if (!this.addressValid) + { + return 1; + } + + if (this.getEnergyStoredGC() < ENERGY_USE_ON_TELEPORT) + { + return 2; + } + + return 0; // GOOD + } + + @Override + public void update() + { + if (this.ticks % 40 == 0 && !this.world.isRemote) + { + this.setAddress(this.address); + this.setTargetAddress(this.targetAddress); + } + + if (!this.world.isRemote) + { + if (!this.getDisabled(0) && this.targetAddressResult == EnumTelepadSearchResult.VALID && (this.ticks % 5 == 0 || teleporting)) + { + List containedEntities = this.world.getEntitiesWithinAABB(EntityLivingBase.class, + new AxisAlignedBB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getPos().getX() + 1, this.getPos().getY() + 2, this.getPos().getZ() + 1)); + + if (containedEntities.size() > 0 && this.getEnergyStoredGC() >= ENERGY_USE_ON_TELEPORT) + { + ShortRangeTelepadHandler.TelepadEntry entry = ShortRangeTelepadHandler.getLocationFromAddress(this.targetAddress); + + if (entry != null) + { + teleporting = true; + } + } else + { + teleporting = false; + } + } + + if (this.teleporting) + { + this.teleportTime++; + + if (teleportTime >= MAX_TELEPORT_TIME) + { + ShortRangeTelepadHandler.TelepadEntry entry = ShortRangeTelepadHandler.getLocationFromAddress(this.targetAddress); + + BlockVec3 finalPos = (entry == null) ? null : entry.position; + + if (finalPos != null) + { + TileEntity tileAt = finalPos.getTileEntity(this.world); + List containedEntities = this.world.getEntitiesWithinAABB(EntityLivingBase.class, + new AxisAlignedBB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getPos().getX() + 1, this.getPos().getY() + 2, this.getPos().getZ() + 1)); + + if (tileAt instanceof TileEntityShortRangeTelepad) + { + TileEntityShortRangeTelepad destTelepad = (TileEntityShortRangeTelepad) tileAt; + int teleportResult = destTelepad.canTeleportHere(); + if (teleportResult == 0) + { + for (EntityLivingBase e : containedEntities) + { + e.setPosition(finalPos.x + 0.5F, finalPos.y + 0.08F, finalPos.z + 0.5F); + this.world.updateEntityWithOptionalForce(e, true); + if (e instanceof EntityPlayerMP) + { + ((EntityPlayerMP) e).connection.setPlayerLocation(finalPos.x, finalPos.y, finalPos.z, e.rotationYaw, e.rotationPitch); + } + GalacticraftCore.packetPipeline + .sendToDimension(new PacketSimpleAsteroids(PacketSimpleAsteroids.EnumSimplePacketAsteroids.C_TELEPAD_SEND, GCCoreUtil.getDimensionID(this.world), new Object[] + {finalPos, e.getEntityId()}), GCCoreUtil.getDimensionID(this.world)); + } + + if (containedEntities.size() > 0) + { + this.storage.setEnergyStored(this.storage.getEnergyStoredGC() - ENERGY_USE_ON_TELEPORT); + destTelepad.storage.setEnergyStored(this.storage.getEnergyStoredGC() - ENERGY_USE_ON_TELEPORT); + } + } else + { + switch (teleportResult) + { + case -1: + for (EntityLivingBase e : containedEntities) + { + if (e instanceof EntityPlayer) + { + e.sendMessage(new TextComponentString("Cannot Send client-side")); // No + // need + // for + // translation, + // since + // this + // should + // never + // happen + } + } + break; + case 1: + for (EntityLivingBase e : containedEntities) + { + if (e instanceof EntityPlayer) + { + e.sendMessage(new TextComponentString("Target address invalid")); // No + // need + // for + // translation, + // since + // this + // should + // never + // happen + } + } + break; + case 2: + for (EntityLivingBase e : containedEntities) + { + if (e instanceof EntityPlayer) + { + e.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.message.target_no_energy.name"))); + } + } + break; + } + } + } + } + + this.teleportTime = 0; + this.teleporting = false; + } + } else + { + this.teleportTime = Math.max(--this.teleportTime, 0); + } + } + + super.update(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.inventory = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.getInventory()); + + if (GCCoreUtil.getEffectiveSide() == Side.SERVER) + { + this.setAddress(nbt.getInteger("Address")); + } + this.targetAddress = nbt.getInteger("TargetAddress"); + this.owner = nbt.getString("Owner"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + ItemStackHelper.saveAllItems(nbt, this.getInventory()); + + nbt.setInteger("TargetAddress", this.targetAddress); + nbt.setInteger("Address", this.address); + nbt.setString("Owner", this.owner); + return nbt; + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + super.addExtraNetworkedData(networkedList); + networkedList.add(targetAddressResult.ordinal()); + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + super.readExtraNetworkedData(dataStream); + targetAddressResult = EnumTelepadSearchResult.values()[dataStream.readInt()]; + } + + @Override + public double getPacketRange() + { + return 24.0D; + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + entityPlayer.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_ASTEROIDS, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + return true; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + for (BlockPos vecToAdd : positions) + ((BlockTelepadFake) AsteroidBlocks.fakeTelepad).makeFakeBlock(world, vecToAdd, placedPosition, + AsteroidBlocks.fakeTelepad.getDefaultState().withProperty(BlockTelepadFake.TOP, vecToAdd.getY() == placedPosition.getY() + 2)); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + // Not actually used - maybe this shouldn't be an IMultiBlock at all? + return EnumBlockMultiType.MINER_BASE; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + for (int y = 0; y < 3; y += 2) + { + if (placedPosition.getY() + y > buildHeight) + { + return; + } + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + if (x == 0 && y == 0 && z == 0) + continue; + positions.add(placedPosition.add(x, y, z)); + } + } + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new LinkedList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == AsteroidBlocks.fakeTelepad) + { + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(getPos().getX() - 1, getPos().getY(), getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 4, getPos().getZ() + 2); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_MEDIUM; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return this.world.getTileEntity(getPos()) == this && entityPlayer.getDistanceSq(this.getPos().getX() + 0.5D, this.getPos().getY() + 0.5D, this.getPos().getZ() + 0.5D) <= 64.0D; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return index == 0; + } + + @Override + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { + return this.isItemValidForSlot(index, itemStackIn); + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + @Override + public boolean shouldUseEnergy() + { + return !this.getDisabled(0); + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.byIndex((this.getBlockMetadata() & 3) + 2); + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(0); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + switch (index) + { + case 0: + this.disabled = disabled; + this.disableCooldown = 10; + if (world != null && !world.isRemote) + { + ShortRangeTelepadHandler.addShortRangeTelepad(this); + } + break; + default: + break; + } + } + } + + @Override + public boolean getDisabled(int index) + { + switch (index) + { + case 0: + return this.disabled; + default: + break; + } + + return true; + } + + public void setAddress(int address) + { + if (this.world != null && address != this.address) + { + ShortRangeTelepadHandler.removeShortRangeTeleporter(this); + } + + this.address = address; + + if (this.address >= 0) + { + ShortRangeTelepadHandler.TelepadEntry entry = ShortRangeTelepadHandler.getLocationFromAddress(this.address); + this.addressValid = entry == null || (this.world != null && (entry.dimensionID == GCCoreUtil.getDimensionID(this.world) && entry.position.x == this.getPos().getX() + && entry.position.y == this.getPos().getY() && entry.position.z == this.getPos().getZ())); + } else + { + this.addressValid = false; + } + + if (this.world != null && !this.world.isRemote) + { + ShortRangeTelepadHandler.addShortRangeTelepad(this); + } + } + + public boolean updateTarget() + { + if (this.targetAddress >= 0 && !this.world.isRemote) + { + this.targetAddressResult = EnumTelepadSearchResult.NOT_FOUND; + + ShortRangeTelepadHandler.TelepadEntry addressResult = ShortRangeTelepadHandler.getLocationFromAddress(this.targetAddress); + + if (addressResult != null) + { + if (GCCoreUtil.getDimensionID(this.world) == addressResult.dimensionID) + { + double distance = this.getDistanceSq(addressResult.position.x + 0.5F, addressResult.position.y + 0.5F, addressResult.position.z + 0.5F); + + if (distance < Math.pow(TELEPORTER_RANGE, 2)) + { + if (!addressResult.enabled) + { + this.targetAddressResult = EnumTelepadSearchResult.TARGET_DISABLED; + return false; + } + + this.targetAddressResult = EnumTelepadSearchResult.VALID; + return true; + } else + { + this.targetAddressResult = EnumTelepadSearchResult.TOO_FAR; + return false; + } + } else + { + this.targetAddressResult = EnumTelepadSearchResult.WRONG_DIM; + return false; + } + } else + { + this.targetAddressResult = EnumTelepadSearchResult.NOT_FOUND; + return false; + } + } else + { + this.targetAddressResult = EnumTelepadSearchResult.NOT_FOUND; + return false; + } + } + + public void setTargetAddress(int address) + { + this.targetAddress = address; + this.updateTarget(); + } + + public void setOwner(String owner) + { + this.owner = owner; + } + + public String getOwner() + { + return this.owner; + } + + @SideOnly(Side.CLIENT) + public String getReceivingStatus() + { + if (!this.addressValid) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.invalid_address.name"); + } + + if (this.getEnergyStoredGC() <= 0.0F) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_energy.name"); + } + + if (this.getEnergyStoredGC() <= ENERGY_USE_ON_TELEPORT) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.not_enough_energy.name"); + } + + if (this.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.message.receiving_active.name"); + } + + @SideOnly(Side.CLIENT) + public String getSendingStatus() + { + if (!this.addressValid) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.invalid_target_address.name"); + } + + if (this.targetAddressResult == EnumTelepadSearchResult.TOO_FAR) + { + return EnumColor.RED + GCCoreUtil.translateWithFormat("gui.message.telepad_too_far.name", TELEPORTER_RANGE); + } + + if (this.targetAddressResult == EnumTelepadSearchResult.WRONG_DIM) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.telepad_wrong_dim.name"); + } + + if (this.targetAddressResult == EnumTelepadSearchResult.NOT_FOUND) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.telepad_not_found.name"); + } + + if (this.targetAddressResult == EnumTelepadSearchResult.TARGET_DISABLED) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.message.telepad_target_disabled.name"); + } + + if (this.getEnergyStoredGC() <= 0.0F) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_energy.name"); + } + + if (this.getEnergyStoredGC() <= ENERGY_USE_ON_TELEPORT) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.not_enough_energy.name"); + } + + if (this.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.message.sending_active.name"); + } + + @SideOnly(Side.CLIENT) + public Vector3 getParticleColor(Random rand, boolean sending) + { + float teleportTimeScaled = Math.min(1.0F, this.teleportTime / (float) TileEntityShortRangeTelepad.MAX_TELEPORT_TIME); + float f; + f = rand.nextFloat() * 0.6F + 0.4F; + + if (sending && this.targetAddressResult != EnumTelepadSearchResult.VALID) + { + return new Vector3(f, f * 0.3F, f * 0.3F); + } + + if (!sending && !this.addressValid) + { + return new Vector3(f, f * 0.3F, f * 0.3F); + } + + if (this.getEnergyStoredGC() < ENERGY_USE_ON_TELEPORT) + { + return new Vector3(f, f * 0.6F, f * 0.3F); + } + + float r = f * 0.3F; + float g = f * (0.3F + (teleportTimeScaled * 0.7F)); + float b = f * (1.0F - (teleportTimeScaled * 0.7F)); + + return new Vector3(r, g, b); + } + + @Override + public EnumFacing byIndex() + { + return EnumFacing.NORTH; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityTelepadFake.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityTelepadFake.java new file mode 100644 index 00000000..8f5ebc50 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/tile/TileEntityTelepadFake.java @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.tile; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlock; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; + +public class TileEntityTelepadFake extends TileBaseElectricBlock +{ + + // The the position of the main block + @NetworkedField(targetSide = Side.CLIENT) public BlockPos mainBlockPosition; + private WeakReference mainTelepad = null; + @NetworkedField(targetSide = Side.CLIENT) private boolean canConnect = false; + + public TileEntityTelepadFake() + { + super("tile.telepadfake.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + protected boolean handleInventory() + { + return false; + } + + public void setMainBlock(BlockPos mainBlock) + { + this.setMainBlockInternal(mainBlock); + + if (!this.world.isRemote) + { + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + } + } + + private void setMainBlockInternal(BlockPos mainBlock) + { + this.mainBlockPosition = mainBlock; + this.updateConnectable(); + } + + public void onBlockRemoval() + { + TileEntityShortRangeTelepad telepad = this.getBaseTelepad(); + + if (telepad != null) + { + telepad.onDestroy(this); + } + } + + public boolean onActivated(EntityPlayer par5EntityPlayer) + { + TileEntityShortRangeTelepad telepad = this.getBaseTelepad(); + return telepad != null && telepad.onActivated(par5EntityPlayer); + } + + @Override + public void update() + { + super.update(); + + TileEntityShortRangeTelepad telepad = this.getBaseTelepad(); + + if (telepad != null) + { + this.storage.setCapacity(telepad.storage.getCapacityGC()); + this.storage.setMaxExtract(telepad.storage.getMaxExtract()); + this.storage.setMaxReceive(telepad.storage.getMaxReceive()); + this.extractEnergyGC(null, telepad.receiveEnergyGC(null, this.getEnergyStoredGC(), false), false); + } + } + + private TileEntityShortRangeTelepad getBaseTelepad() + { + if (this.mainBlockPosition == null) + { + return null; + } + + if (mainTelepad == null) + { + TileEntity tileEntity = this.world.getTileEntity(this.mainBlockPosition); + + if (tileEntity != null) + { + if (tileEntity instanceof TileEntityShortRangeTelepad) + { + mainTelepad = new WeakReference(((TileEntityShortRangeTelepad) tileEntity)); + } + } + } + + if (mainTelepad == null) + { + this.world.setBlockToAir(this.mainBlockPosition); + } else + { + TileEntityShortRangeTelepad telepad = this.mainTelepad.get(); + + if (telepad != null) + { + return telepad; + } else + { + this.world.removeTileEntity(this.getPos()); + } + } + + return null; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + NBTTagCompound tagCompound = nbt.getCompoundTag("mainBlockPosition"); + this.setMainBlockInternal(new BlockPos(tagCompound.getInteger("x"), tagCompound.getInteger("y"), tagCompound.getInteger("z"))); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + if (this.mainBlockPosition != null) + { + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setInteger("x", this.mainBlockPosition.getX()); + tagCompound.setInteger("y", this.mainBlockPosition.getY()); + tagCompound.setInteger("z", this.mainBlockPosition.getZ()); + nbt.setTag("mainBlockPosition", tagCompound); + } + + return nbt; + } + + @Override + public double getPacketRange() + { + return 30.0D; + } + + @Override + public int getPacketCooldown() + { + return 50; + } + + @Override + public boolean isNetworkedTile() + { + return true; + } + + @Override + public void getNetworkedData(ArrayList sendData) + { + if (this.mainBlockPosition == null) + { + if (this.world.isRemote || !this.resetMainBlockPosition()) + { + return; + } + } + super.getNetworkedData(sendData); + } + + private boolean resetMainBlockPosition() + { + for (int x = -1; x <= 1; x++) + { + for (int z = -1; z <= 1; z++) + { + for (int y = -2; y < 1; y += 2) + { + final BlockPos vecToCheck = this.getPos().add(x, y, z); + if (this.world.getTileEntity(vecToCheck) instanceof TileEntityShortRangeTelepad) + { + this.setMainBlock(vecToCheck); + return true; + } + } + } + } + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return false; + } + + @Override + public EnumFacing getElectricInputDirection() + { + if (!this.canConnect) + { + return null; + } + + return EnumFacing.UP; + } + + @Override + public EnumFacing byIndex() + { + return EnumFacing.NORTH; + } + + @Override + public ItemStack getBatteryInSlot() + { + return ItemStack.EMPTY; + } + + private void updateConnectable() + { + if (this.mainBlockPosition != null) + { + if (this.getPos().getX() == mainBlockPosition.getX() && this.getPos().getZ() == mainBlockPosition.getZ()) + { + if (this.getPos().getY() > mainBlockPosition.getY()) + { + // If the block has the same x- and y- coordinates, but is + // above the base block, this is the + // connectable tile + this.canConnect = true; + return; + } + } + } + + this.canConnect = false; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeAsteroids.java new file mode 100644 index 00000000..421637b8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeAsteroids.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import java.util.LinkedList; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeAsteroids extends BiomeGenBaseGC +{ + + public static final Biome asteroid = new BiomeAsteroids(BiomeData.builder().biomeName("Asteroids").build()); + + private BiomeAsteroids(BiomeData properties) + { + super(properties, true); + this.spawnableMonsterList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableCaveCreatureList.clear(); + this.resetMonsterListByMode(ConfigManagerCore.challengeMobDropsAndSpawning); + } + + @Override + public void registerTypes(Biome b) + { + // Currently unused for Asteroids due to adaptive biomes system + BiomeDictionary.addTypes(b, BiomeDictionary.Type.COLD, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SPOOKY); + } + + public void resetMonsterListByMode(boolean challengeMode) + { + this.spawnableMonsterList.clear(); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedZombie.class, 3000, 1, 3)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedSpider.class, 2000, 1, 2)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedSkeleton.class, 1500, 1, 1)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedCreeper.class, 2000, 1, 1)); + if (challengeMode) + this.spawnableMonsterList.add(new SpawnListEntry(EntityEvolvedEnderman.class, 250, 1, 1)); + } + + @Override + public void initialiseMobLists(LinkedList mobInfo) + { + } + + @Override + public float getSpawningChance() + { + return 0.01F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeProviderAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeProviderAsteroids.java new file mode 100644 index 00000000..8a452a6e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/BiomeProviderAsteroids.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeProviderSpace; +import net.minecraft.world.biome.Biome; + +public class BiomeProviderAsteroids extends BiomeProviderSpace +{ + + @Override + public Biome getBiome() + { + return BiomeAsteroids.asteroid; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/ChunkProviderAsteroids.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/ChunkProviderAsteroids.java new file mode 100644 index 00000000..84e36370 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/ChunkProviderAsteroids.java @@ -0,0 +1,1109 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; +import micdoodle8.mods.galacticraft.core.perlin.generator.Billowed; +import micdoodle8.mods.galacticraft.core.perlin.generator.Gradient; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base.MapGenAbandonedBase; +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.BlockFlower.EnumFlowerType; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockOldLeaf; +import net.minecraft.block.BlockOldLog; +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.BlockTallGrass; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import net.minecraft.world.gen.feature.WorldGenFlowers; +import net.minecraft.world.gen.feature.WorldGenLakes; +import net.minecraft.world.gen.feature.WorldGenTallGrass; +import net.minecraft.world.gen.feature.WorldGenTrees; + +public class ChunkProviderAsteroids extends ChunkProviderBase +{ + + final Block ASTEROID_STONE = AsteroidBlocks.blockBasic; + final byte ASTEROID_STONE_META_0 = 0; + final byte ASTEROID_STONE_META_1 = 1; + final byte ASTEROID_STONE_META_2 = 2; + + final Block DIRT = Blocks.DIRT; + final byte DIRT_META = 0; + final Block GRASS = Blocks.GRASS; + final byte GRASS_META = 0; + final Block LIGHT = Blocks.GLOWSTONE; + final byte LIGHT_META = 0; + BlockTallGrass.EnumType GRASS_TYPE = BlockTallGrass.EnumType.GRASS; + final BlockFlower FLOWER = Blocks.RED_FLOWER; + + final Block LAVA = Blocks.LAVA; + final byte LAVA_META = 0; + final Block WATER = Blocks.WATER; + final byte WATER_META = 0; + + private final Random rand; + + private final World world; + + private final NoiseModule asteroidDensity; + + private final NoiseModule asteroidTurbulance; + + private final NoiseModule asteroidSkewX; + private final NoiseModule asteroidSkewY; + private final NoiseModule asteroidSkewZ; + + private final SpecialAsteroidBlockHandler coreHandler; + private final SpecialAsteroidBlockHandler shellHandler; + + // DO NOT CHANGE + private static final int CHUNK_SIZE_X = 16; + private static final int CHUNK_SIZE_Y = 256; + private static final int CHUNK_SIZE_Z = 16; + + private static final int MAX_ASTEROID_RADIUS = 25; + private static final int MIN_ASTEROID_RADIUS = 5; + + private static final int MAX_ASTEROID_SKEW = 8; + + private static final int MIN_ASTEROID_Y = 48; + private static final int MAX_ASTEROID_Y = ChunkProviderAsteroids.CHUNK_SIZE_Y - 48; + + private static final int ASTEROID_CHANCE = 800; // About 1 / n chance per XZ + // pair + + private static final int ASTEROID_CORE_CHANCE = 2; // 1 / n chance per + // asteroid + private static final int ASTEROID_SHELL_CHANCE = 2; // 1 / n chance per + // asteroid + + private static final int MIN_BLOCKS_PER_CHUNK = 50; + private static final int MAX_BLOCKS_PER_CHUNK = 200; + + private static final int ILMENITE_CHANCE = 400; + private static final int IRON_CHANCE = 300; + private static final int ALUMINUM_CHANCE = 250; + + private static final int RANDOM_BLOCK_FADE_SIZE = 32; + private static final int FADE_BLOCK_CHANCE = 5; // 1 / n chance of a block + // being in the fade zone + + private static final int NOISE_OFFSET_SIZE = 256; + + private static final float MIN_HOLLOW_SIZE = .6F; + private static final float MAX_HOLLOW_SIZE = .8F; + private static final int HOLLOW_CHANCE = 10; // 1 / n chance per asteroid + private static final int MIN_RADIUS_FOR_HOLLOW = 15; + private static final float HOLLOW_LAVA_SIZE = .12F; + + // Per chunk per asteroid + private static final int TREE_CHANCE = 2; + private static final int TALL_GRASS_CHANCE = 2; + private static final int FLOWER_CHANCE = 2; + private static final int WATER_CHANCE = 2; + private static final int LAVA_CHANCE = 2; + private static final int GLOWSTONE_CHANCE = 20; + + private LinkedList largeAsteroids = new LinkedList(); + private int largeCount = 0; + private static HashSet chunksDone = new HashSet(); + private int largeAsteroidsLastChunkX; + private int largeAsteroidsLastChunkZ; + private final MapGenAbandonedBase dungeonGenerator = new MapGenAbandonedBase(); + + public ChunkProviderAsteroids(World par1World, long par2, boolean par4) + { + this.world = par1World; + this.rand = new Random(par2); + + this.asteroidDensity = new Billowed(this.rand.nextLong(), 2, .25F); + this.asteroidDensity.setFrequency(.009F); + this.asteroidDensity.amplitude = .6F; + + this.asteroidTurbulance = new Gradient(this.rand.nextLong(), 1, .2F); + this.asteroidTurbulance.setFrequency(.08F); + this.asteroidTurbulance.amplitude = .5F; + + this.asteroidSkewX = new Gradient(this.rand.nextLong(), 1, 1); + this.asteroidSkewX.amplitude = ChunkProviderAsteroids.MAX_ASTEROID_SKEW; + this.asteroidSkewX.frequencyX = 0.005F; + + this.asteroidSkewY = new Gradient(this.rand.nextLong(), 1, 1); + this.asteroidSkewY.amplitude = ChunkProviderAsteroids.MAX_ASTEROID_SKEW; + this.asteroidSkewY.frequencyY = 0.005F; + + this.asteroidSkewZ = new Gradient(this.rand.nextLong(), 1, 1); + this.asteroidSkewZ.amplitude = ChunkProviderAsteroids.MAX_ASTEROID_SKEW; + this.asteroidSkewZ.frequencyZ = 0.005F; + + this.coreHandler = new SpecialAsteroidBlockHandler(); + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_2, 5, .3)); + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_1, 7, .3)); + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_0, 11, .25)); + + if (!ConfigManagerAsteroids.disableAluminumGen) + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, (byte) 3, 5, .2)); + if (!ConfigManagerAsteroids.disableIlmeniteGen) + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, (byte) 4, 4, .15)); + if (!ConfigManagerAsteroids.disableIronGen) + this.coreHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, (byte) 5, 3, .2)); + if (ConfigManagerCore.enableSiliconOreGen) + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.basicBlock, (byte) 8, 2, .15)); // TODO: + // Asteroids + // version + // of + // silicon + // ore + // Solid Meteoric Iron - has no config to disable + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.basicBlock, (byte) 12, 2, .13)); + // Diamond ore - has no config to disable + this.coreHandler.addBlock(new SpecialAsteroidBlock(Blocks.DIAMOND_ORE, (byte) 0, 1, .1)); // TODO: + // Asteroids + // version + // of + // diamond + // ore + + this.shellHandler = new SpecialAsteroidBlockHandler(); + this.shellHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_0, 1, .15)); + this.shellHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_1, 3, .15)); + this.shellHandler.addBlock(new SpecialAsteroidBlock(this.ASTEROID_STONE, this.ASTEROID_STONE_META_2, 1, .15)); + this.shellHandler.addBlock(new SpecialAsteroidBlock(AsteroidBlocks.blockDenseIce, (byte) 0, 1, .15)); + } + + public void generateTerrain(int chunkX, int chunkZ, ChunkPrimer primer, boolean flagDataOnly) + { + this.largeAsteroids.clear(); + this.largeCount = 0; + final Random random = new Random(); + final int asteroidChance = ChunkProviderAsteroids.ASTEROID_CHANCE; + final int rangeY = ChunkProviderAsteroids.MAX_ASTEROID_Y - ChunkProviderAsteroids.MIN_ASTEROID_Y; + final int rangeSize = ChunkProviderAsteroids.MAX_ASTEROID_RADIUS - ChunkProviderAsteroids.MIN_ASTEROID_RADIUS; + + // If there is an asteroid centre nearby, it might need to generate some + // asteroid parts in this chunk + for (int i = chunkX - 3; i < chunkX + 3; i++) + { + int minX = i * 16; + int maxX = minX + ChunkProviderAsteroids.CHUNK_SIZE_X; + for (int k = chunkZ - 3; k < chunkZ + 3; k++) + { + int minZ = k * 16; + int maxZ = minZ + ChunkProviderAsteroids.CHUNK_SIZE_Z; + + // NOTE: IF UPDATING THIS CODE also update addLargeAsteroids() + // which is the same algorithm + // ??? ^^ this now seems redundant + for (int x = minX; x < maxX; x += 2) + { + for (int z = minZ; z < maxZ; z += 2) + { + // The next line is called 3136 times per chunk + // generated. getNoise is a little slow. + if (this.randFromPointPos(x, z) < (this.asteroidDensity.getNoise(x, z) + .4) / asteroidChance) + { + random.setSeed(x + z * 3067); + int y = random.nextInt(rangeY) + ChunkProviderAsteroids.MIN_ASTEROID_Y; + int size = random.nextInt(rangeSize) + ChunkProviderAsteroids.MIN_ASTEROID_RADIUS; + + // Generate the parts of the asteroid which are in + // this chunk + this.generateAsteroid(random, x, y, z, chunkX << 4, chunkZ << 4, size, primer, flagDataOnly); + this.largeCount++; + } + } + } + } + } + } + + private void generateAsteroid(Random rand, int asteroidX, int asteroidY, int asteroidZ, int chunkX, int chunkZ, int size, ChunkPrimer primer, boolean flagDataOnly) + { + SpecialAsteroidBlock core = this.coreHandler.getBlock(rand, size); + + SpecialAsteroidBlock shell = null; + if (rand.nextInt(ChunkProviderAsteroids.ASTEROID_SHELL_CHANCE) == 0) + { + shell = this.shellHandler.getBlock(rand, size); + } + + boolean isHollow = false; + final float hollowSize = rand.nextFloat() * (ChunkProviderAsteroids.MAX_HOLLOW_SIZE - ChunkProviderAsteroids.MIN_HOLLOW_SIZE) + ChunkProviderAsteroids.MIN_HOLLOW_SIZE; + if (rand.nextInt(ChunkProviderAsteroids.HOLLOW_CHANCE) == 0 && size >= ChunkProviderAsteroids.MIN_RADIUS_FOR_HOLLOW) + { + isHollow = true; + shell = new SpecialAsteroidBlock(AsteroidBlocks.blockDenseIce, (byte) 0, 1, .15); + } + + // Add to the list of asteroids for external use + ((WorldProviderAsteroids) this.world.provider).addAsteroid(asteroidX, asteroidY, asteroidZ, size, isHollow ? -1 : core.index); + + final int xMin = this.clamp(Math.max(chunkX, asteroidX - size - ChunkProviderAsteroids.MAX_ASTEROID_SKEW - 2) - chunkX, 0, 16); + final int zMin = this.clamp(Math.max(chunkZ, asteroidZ - size - ChunkProviderAsteroids.MAX_ASTEROID_SKEW - 2) - chunkZ, 0, 16); + final int yMin = asteroidY - size - ChunkProviderAsteroids.MAX_ASTEROID_SKEW - 2; + final int yMax = asteroidY + size + ChunkProviderAsteroids.MAX_ASTEROID_SKEW + 2; + final int xMax = this.clamp(Math.min(chunkX + 16, asteroidX + size + ChunkProviderAsteroids.MAX_ASTEROID_SKEW + 2) - chunkX, 0, 16); + final int zMax = this.clamp(Math.min(chunkZ + 16, asteroidZ + size + ChunkProviderAsteroids.MAX_ASTEROID_SKEW + 2) - chunkZ, 0, 16); + final int xSize = xMax - xMin; + final int ySize = yMax - yMin; + final int zSize = zMax - zMin; + + if (xSize <= 0 || ySize <= 0 || zSize <= 0) + { + return; + } + + final float noiseOffsetX = this.randFromPoint(asteroidX, asteroidY, asteroidZ) * ChunkProviderAsteroids.NOISE_OFFSET_SIZE + chunkX; + final float noiseOffsetY = this.randFromPoint(asteroidX * 7, asteroidY * 11, asteroidZ * 13) * ChunkProviderAsteroids.NOISE_OFFSET_SIZE; + final float noiseOffsetZ = this.randFromPoint(asteroidX * 17, asteroidY * 23, asteroidZ * 29) * ChunkProviderAsteroids.NOISE_OFFSET_SIZE + chunkZ; + this.setOtherAxisFrequency(1F / (size * 2F / 2F)); + + float[] sizeXArray = new float[ySize * zSize]; + float[] sizeZArray = new float[xSize * ySize]; + float[] sizeYArray = new float[xSize * zSize]; + + for (int x = 0; x < xSize; x++) + { + int xx = x * zSize; + float xxx = x + noiseOffsetX; + for (int z = 0; z < zSize; z++) + { + sizeYArray[xx + z] = this.asteroidSkewY.getNoise(xxx, z + noiseOffsetZ); + } + } + + AsteroidData asteroidData = new AsteroidData(isHollow, sizeYArray, xMin, zMin, xMax, zMax, zSize, size, asteroidX, asteroidY, asteroidZ); + this.largeAsteroids.add(asteroidData); + this.largeAsteroidsLastChunkX = chunkX; + this.largeAsteroidsLastChunkZ = chunkZ; + + if (flagDataOnly) + { + return; + } + + for (int y = 0; y < ySize; y++) + { + int yy = y * zSize; + float yyy = y + noiseOffsetY; + for (int z = 0; z < zSize; z++) + { + sizeXArray[yy + z] = this.asteroidSkewX.getNoise(yyy, z + noiseOffsetZ); + } + } + + for (int x = 0; x < xSize; x++) + { + int xx = x * ySize; + float xxx = x + noiseOffsetX; + for (int y = 0; y < ySize; y++) + { + sizeZArray[xx + y] = this.asteroidSkewZ.getNoise(xxx, y + noiseOffsetY); + } + } + + double shellThickness = 0; + int terrainY = 0; + int terrainYY = 0; + + IBlockState asteroidShell = null; + if (shell != null) + { + asteroidShell = shell.block.getStateFromMeta(shell.meta); + shellThickness = 1.0 - shell.thickness; + } + + IBlockState asteroidCore = core.block.getStateFromMeta(core.meta); + IBlockState asteroidRock0 = this.ASTEROID_STONE.getStateFromMeta(this.ASTEROID_STONE_META_0); + IBlockState asteroidRock1 = this.ASTEROID_STONE.getStateFromMeta(this.ASTEROID_STONE_META_1); + IBlockState airBlock = Blocks.AIR.getDefaultState(); + IBlockState dirtBlock = this.DIRT.getStateFromMeta(this.DIRT_META); + IBlockState grassBlock = this.GRASS.getStateFromMeta(this.GRASS_META); + + for (int x = xMax - 1; x >= xMin; x--) + { + int indexXY = (x - xMin) * ySize - yMin; + int indexXZ = (x - xMin) * zSize - zMin; + int distanceX = asteroidX - (x + chunkX); + int indexBaseX = x * ChunkProviderAsteroids.CHUNK_SIZE_Y << 4; + float xx = x + chunkX; + + for (int z = zMin; z < zMax; z++) + { + if (isHollow) + { + float sizeModY = sizeYArray[indexXZ + z]; + terrainY = this.getTerrainHeightFor(sizeModY, asteroidY, size); + terrainYY = this.getTerrainHeightFor(sizeModY, asteroidY - 1, size); + } + + float sizeY = size + sizeYArray[indexXZ + z]; + sizeY *= sizeY; + int distanceZ = asteroidZ - (z + chunkZ); + int indexBase = indexBaseX | z * ChunkProviderAsteroids.CHUNK_SIZE_Y; + float zz = z + chunkZ; + + for (int y = yMin; y < yMax; y++) + { + float dSizeX = distanceX / (size + sizeXArray[(y - yMin) * zSize + z - zMin]); + float dSizeZ = distanceZ / (size + sizeZArray[indexXY + y]); + dSizeX *= dSizeX; + dSizeZ *= dSizeZ; + int distanceY = asteroidY - y; + distanceY *= distanceY; + float distance = dSizeX + distanceY / sizeY + dSizeZ; + float distanceAbove = distance; + distance += this.asteroidTurbulance.getNoise(xx, y, zz); + + if (isHollow && distance <= hollowSize) + { + distanceAbove += this.asteroidTurbulance.getNoise(xx, y + 1, zz); + if (distanceAbove <= 1) + { + if ((y - 1) == terrainYY) + { + int index = indexBase | (y + 1); + primer.setBlockState(x, y + 1, z, this.LIGHT.getStateFromMeta(this.LIGHT_META)); +// blockArray[index] = this.LIGHT; +// metaArray[index] = this.LIGHT_META; + } + } + } + + if (distance <= 1) + { + int index = indexBase | y; + if (isHollow && distance <= hollowSize) + { + if (y == terrainY) + { + primer.setBlockState(x, y, z, grassBlock); +// blockArray[index] = this.GRASS; +// metaArray[index] = this.GRASS_META; + } else if (y < terrainY) + { + primer.setBlockState(x, y, z, dirtBlock); +// blockArray[index] = this.DIRT; +// metaArray[index] = this.DIRT_META; + } else + { + primer.setBlockState(x, y, z, airBlock); +// blockArray[index] = Blocks.air; +// metaArray[index] = 0; + } + } else if (distance <= core.thickness) + { + if (rand.nextBoolean()) + { + primer.setBlockState(x, y, z, asteroidCore); +// blockArray[index] = core.block; +// metaArray[index] = core.meta; + } else + { + primer.setBlockState(x, y, z, asteroidRock0); +// blockArray[index] = this.ASTEROID_STONE; +// metaArray[index] = this.ASTEROID_STONE_META_0; + } + } else if (shell != null && distance >= shellThickness) + { + primer.setBlockState(x, y, z, asteroidShell); +// blockArray[index] = shell.block; +// metaArray[index] = shell.meta; + } else + { + primer.setBlockState(x, y, z, asteroidRock1); +// blockArray[index] = this.ASTEROID_STONE; +// metaArray[index] = this.ASTEROID_STONE_META_1; + } + } + } + } + } + + if (isHollow) + { + shellThickness = 0; + if (shell != null) + { + shellThickness = 1.0 - shell.thickness; + } + for (int x = xMin; x < xMax; x++) + { + int indexXY = (x - xMin) * ySize - yMin; + int indexXZ = (x - xMin) * zSize - zMin; + int distanceX = asteroidX - (x + chunkX); + distanceX *= distanceX; + + for (int z = zMin; z < zMax; z++) + { + float sizeModY = sizeYArray[indexXZ + z]; + float sizeY = size + sizeYArray[indexXZ + z]; + sizeY *= sizeY; + int distanceZ = asteroidZ - (z + chunkZ); + distanceZ *= distanceZ; + + for (int y = yMin; y < yMax; y++) + { + float sizeX = size + sizeXArray[(y - yMin) * zSize + z - zMin]; + float sizeZ = size + sizeZArray[indexXY + y]; + sizeX *= sizeX; + sizeZ *= sizeZ; + int distanceY = asteroidY - y; + distanceY *= distanceY; + float distance = distanceX / sizeX + distanceY / sizeY + distanceZ / sizeZ; + distance += this.asteroidTurbulance.getNoise(x + chunkX, y, z + chunkZ); + + if (distance <= 1) + { + IBlockState state = primer.getBlockState(x, y, z); + IBlockState stateAbove = primer.getBlockState(x, y + 1, z); + if (Blocks.AIR == stateAbove.getBlock() && (state.getBlock() == ASTEROID_STONE || state.getBlock() == GRASS)) + { + if (this.rand.nextInt(GLOWSTONE_CHANCE) == 0) + { + primer.setBlockState(x, y, z, this.LIGHT.getStateFromMeta(this.LIGHT_META)); +// blockArray[index] = this.LIGHT; +// metaArray[index] = this.LIGHT_META; + } + } + } + } + } + } + } + } + + private final void setOtherAxisFrequency(float frequency) + { + this.asteroidSkewX.frequencyY = frequency; + this.asteroidSkewX.frequencyZ = frequency; + + this.asteroidSkewY.frequencyX = frequency; + this.asteroidSkewY.frequencyZ = frequency; + + this.asteroidSkewZ.frequencyX = frequency; + this.asteroidSkewZ.frequencyY = frequency; + } + + private final int clamp(int x, int min, int max) + { + if (x < min) + { + x = min; + } else if (x > max) + { + x = max; + } + return x; + } + + private final double clamp(double x, double min, double max) + { + if (x < min) + { + x = min; + } else if (x > max) + { + x = max; + } + return x; + } + + private final int getTerrainHeightFor(float yMod, int asteroidY, int asteroidSize) + { + return (int) (asteroidY - asteroidSize / 4 + yMod * 1.5F); + } + + private final int getTerrainHeightAt(int x, int z, float[] yModArray, int xMin, int zMin, int zSize, int asteroidY, int asteroidSize) + { + final int index = (x - xMin) * zSize - zMin; + if (index < yModArray.length && index >= 0) + { + final float yMod = yModArray[index]; + return this.getTerrainHeightFor(yMod, asteroidY, asteroidSize); + } + return 1; + } + + @Override + public Chunk generateChunk(int par1, int par2) + { + ChunkPrimer primer = new ChunkPrimer(); +// long time1 = System.nanoTime(); + this.rand.setSeed(par1 * 341873128712L + par2 * 132897987541L); +// final Block[] ids = new Block[65536]; +// final byte[] meta = new byte[65536]; + this.generateTerrain(par1, par2, primer, false); + // this.biomesForGeneration = + // this.world.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, + // par1 * 16, par2 * 16, 16, 16); + + if (this.world.provider instanceof WorldProviderAsteroids && ((WorldProviderAsteroids) this.world.provider).checkHasAsteroids()) + { + this.dungeonGenerator.generate(this.world, par1, par2, primer); + } + +// long time2 = System.nanoTime(); + final Chunk var4 = new Chunk(this.world, primer, par1, par2); + final byte[] biomesArray = var4.getBiomeArray(); + + final byte b = (byte) Biome.getIdForBiome(BiomeAdaptive.biomeDefault); + for (int i = 0; i < biomesArray.length; ++i) + { + biomesArray[i] = b; + } + +// long time3 = System.nanoTime(); + this.generateSkylightMap(var4, par1, par2); +// long time4 = System.nanoTime(); +// if (ConfigManagerCore.enableDebug) +// { +// BlockVec3 vec = new BlockVec3(par1, par2, 0); +// if (chunksDone.contains(vec)) System.out.println("Done chunk already at "+par1+","+par2); +// else chunksDone.add(vec); +// System.out.println("Chunk gen: " + timeString(time1, time4) + " at "+par1+","+par2 + " - L"+this.largeCount+ " H"+this.largeAsteroids.size()+ " Terrain:"+timeString(time1, time2)+ " Biomes:"+timeString(time2,time3)+ " Light:"+timeString(time3, time4)); +// } + return var4; + } + + private int getIndex(int x, int y, int z) + { + return x * ChunkProviderAsteroids.CHUNK_SIZE_Y * 16 | z * ChunkProviderAsteroids.CHUNK_SIZE_Y | y; + } + + private String timeString(long time1, long time2) + { + int ms100 = (int) ((time2 - time1) / 10000); + int msdecimal = ms100 % 100; + String msd = ((ms100 < 10) ? "0" : "") + ms100; + return "" + ms100 / 100 + "." + msd + "ms"; + } + + private float randFromPoint(int x, int y, int z) + { + int n = x + z * 57 + y * 571; + n ^= n << 13; + n = n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff; + return 1.0F - n / 1073741824.0F; + } + + private float randFromPoint(int x, int z) + { + int n = x + z * 57; + n ^= n << 13; + n = n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff; + return 1.0F - n / 1073741824.0F; + } + + private float randFromPointPos(int x, int z) + { + int n = x + z * 57; + n ^= n << 13; + n = n * (n * n * 15731 + 789221) + 1376312589 & 0x3fffffff; + return 1.0F - n / 1073741824.0F; + } + + @Override + public void populate(int chunkX, int chunkZ) + { + int x = chunkX << 4; + int z = chunkZ << 4; + if (!ChunkProviderAsteroids.chunksDone.add(new BlockVec3(x, 0, z))) + { + return; + } + +// BlockFalling.fallInstantly = true; +// this.world.getBiome(new BlockPos(x + 16, 0, z + 16)); +// BlockFalling.fallInstantly = false; + + this.rand.setSeed(this.world.getSeed()); + long var7 = this.rand.nextLong() / 2L * 2L + 1L; + long var9 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(chunkX * var7 + chunkZ * var9 ^ this.world.getSeed()); + + // 50:50 chance to include small blocks each chunk + if (this.rand.nextBoolean()) + { + double density = this.asteroidDensity.getNoise(chunkX * 16, chunkZ * 16) * 0.54; + double numOfBlocks = this.clamp(this.randFromPoint(chunkX, chunkZ), .4, 1) * ChunkProviderAsteroids.MAX_BLOCKS_PER_CHUNK * density + ChunkProviderAsteroids.MIN_BLOCKS_PER_CHUNK; + int y0 = this.rand.nextInt(2); + Block block; + int meta; + int yRange = ChunkProviderAsteroids.MAX_ASTEROID_Y - ChunkProviderAsteroids.MIN_ASTEROID_Y; + x += 4; + z += 4; + + for (int i = 0; i < numOfBlocks; i++) + { + int y = this.rand.nextInt(yRange) + ChunkProviderAsteroids.MIN_ASTEROID_Y; + + // 50:50 chance vertically as well + if (y0 == (y / 16) % 2) + { + int px = x + this.rand.nextInt(ChunkProviderAsteroids.CHUNK_SIZE_X); + int pz = z + this.rand.nextInt(ChunkProviderAsteroids.CHUNK_SIZE_Z); + + block = this.ASTEROID_STONE; + meta = this.ASTEROID_STONE_META_1; + + if (this.rand.nextInt(ILMENITE_CHANCE) == 0) + { + meta = 4; + + if (ConfigManagerAsteroids.disableIlmeniteGen) + { + continue; + } + } else if (this.rand.nextInt(IRON_CHANCE) == 0) + { + meta = 5; + + if (ConfigManagerAsteroids.disableIronGen) + { + continue; + } + } else if (this.rand.nextInt(ALUMINUM_CHANCE) == 0) + { + meta = 3; + + if (ConfigManagerAsteroids.disableAluminumGen) + { + continue; + } + } + + world.setBlockState(new BlockPos(px, y, pz), block.getStateFromMeta(meta), 2); + int count = 9; + if (!(world.getBlockState(new BlockPos(px - 1, y, pz)).getBlock() instanceof BlockAir)) + { + count = 1; + } else if (!(world.getBlockState(new BlockPos(px - 2, y, pz)).getBlock() instanceof BlockAir)) + { + count = 3; + } else if (!(world.getBlockState(new BlockPos(px - 3, y, pz)).getBlock() instanceof BlockAir)) + { + count = 5; + } else if (!(world.getBlockState(new BlockPos(px - 4, y, pz)).getBlock() instanceof BlockAir)) + { + count = 7; + } +//LIGHTEMP world.setLightFor(EnumSkyBlock.BLOCK, new BlockPos(px - (count > 1 ? 1 : 0), y, pz), count); + } + } + } + + if (this.largeAsteroidsLastChunkX != chunkX || this.largeAsteroidsLastChunkZ != chunkZ) + { + this.generateTerrain(chunkX, chunkZ, null, true); + } + + this.rand.setSeed(chunkX * var7 + chunkZ * var9 ^ this.world.getSeed()); + + // Look for hollow asteroids to populate + if (!this.largeAsteroids.isEmpty()) + { + for (AsteroidData asteroidIndex : new ArrayList(this.largeAsteroids)) + { + if (!asteroidIndex.isHollow) + { + continue; + } + + float[] sizeYArray = asteroidIndex.sizeYArray; + int xMin = asteroidIndex.xMinArray; + int zMin = asteroidIndex.zMinArray; + int zSize = asteroidIndex.zSizeArray; + int asteroidY = asteroidIndex.asteroidYArray; + int asteroidSize = asteroidIndex.asteroidSizeArray; + boolean treesdone = false; + + if (ConfigManagerCore.challengeAsteroidPopulation || rand.nextInt(ChunkProviderAsteroids.TREE_CHANCE) == 0) + { + int treeType = rand.nextInt(3); + if (treeType == 1) + { + treeType = 0; + } + IBlockState log = Blocks.LOG.getDefaultState().withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.OAK); + IBlockState leaves = Blocks.LEAVES.getDefaultState().withProperty(BlockOldLeaf.VARIANT, BlockPlanks.EnumType.OAK).withProperty(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + WorldGenTrees wg = new WorldGenTrees(false, 2, log, leaves, false); + for (int tries = 0; tries < 5; tries++) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + if (wg.generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k))) + { + break; + } + } + treesdone = true; + } + if (!treesdone || rand.nextInt(ChunkProviderAsteroids.TALL_GRASS_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + new WorldGenTallGrass(GRASS_TYPE).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + if (rand.nextInt(ChunkProviderAsteroids.FLOWER_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + int[] types = new int[] + {2, 4, 5, 7}; + new WorldGenFlowers(this.FLOWER, EnumFlowerType.getType(BlockFlower.EnumFlowerColor.RED, types[rand.nextInt(types.length)])).generate(world, rand, + new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + if (rand.nextInt(ChunkProviderAsteroids.LAVA_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + new WorldGenLakes(this.LAVA).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + if (rand.nextInt(ChunkProviderAsteroids.WATER_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + new WorldGenLakes(this.WATER).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + } + } + + // Update all block lighting + for (int xx = 0; xx < 16; xx++) + { + int xPos = x + xx; + for (int zz = 0; zz < 16; zz++) + { + int zPos = z + zz; + + // Asteroid at min height 48, size 20, can't have lit blocks + // below 16 + for (int y = 16; y < 240; y++) + { +//LIGHTTEMP world.checkLightFor(EnumSkyBlock.BLOCK, new BlockPos(xPos, y, zPos)); + } + } + } + + this.dungeonGenerator.generateStructure(this.world, this.rand, new ChunkPos(chunkX, chunkZ)); + } + + @Override + public void recreateStructures(Chunk chunk, int x, int z) + { + this.dungeonGenerator.generate(this.world, x, z, null); + } + + public void generateSkylightMap(Chunk chunk, int cx, int cz) + { +// World w = chunk.getWorld(); +// boolean flagXChunk = w.getChunkProvider().chunkExists(cx - 1, cz); +// boolean flagZUChunk = w.getChunkProvider().chunkExists(cx, cz + 1); +// boolean flagZDChunk = w.getChunkProvider().chunkExists(cx, cz - 1); +// boolean flagXZUChunk = w.getChunkProvider().chunkExists(cx - 1, cz + 1); +// boolean flagXZDChunk = w.getChunkProvider().chunkExists(cx - 1, cz - 1); + + boolean flag = world.provider.hasSkyLight(); + for (int j = 0; j < 16; j++) + { + if (chunk.getBlockStorageArray()[j] == null) + { + chunk.getBlockStorageArray()[j] = new ExtendedBlockStorage(j << 4, flag); + } + } + + int i = chunk.getTopFilledSegment(); + chunk.heightMapMinimum = Integer.MAX_VALUE; + + for (int j = 0; j < 16; ++j) + { + int k = 0; + + while (k < 16) + { + chunk.precipitationHeightMap[j + (k << 4)] = -999; + int y = i + 15; + + while (true) + { + if (y > 0) + { + if (chunk.getBlockLightOpacity(new BlockPos(j, y - 1, k)) == 0) + { + --y; + continue; + } + + chunk.heightMap[k << 4 | j] = y; + + if (y < chunk.heightMapMinimum) + { + chunk.heightMapMinimum = y; + } + } + + ++k; + break; + } + } + } + + for (AsteroidData a : this.largeAsteroids) + { + int yMin = a.asteroidYArray - a.asteroidSizeArray; + int yMax = a.asteroidYArray + a.asteroidSizeArray; + int xMin = a.xMinArray; + if (yMin < 0) + { + yMin = 0; + } + if (yMax > 255) + { + yMax = 255; + } + if (xMin == 0) + { + xMin = 1; + } + for (int x = a.xMax - 1; x >= xMin; x--) + { + for (int z = a.zMinArray; z < a.zMax; z++) + { + for (int y = yMin; y < yMax; y++) + { + if (chunk.getBlockState(x - 1, y, z).getBlock() instanceof BlockAir && !(chunk.getBlockState(x, y, z).getBlock() instanceof BlockAir)) + { + int count = 2; + + if (x > 1) + { + if ((chunk.getBlockState(x - 2, y, z).getBlock() instanceof BlockAir)) + { + count += 2; + } + } + if (x > 2) + { + if ((chunk.getBlockState(x - 3, y, z).getBlock() instanceof BlockAir)) + { + count += 2; + } + if ((chunk.getBlockState(x - 3, y + 1, z).getBlock() instanceof BlockAir)) + { + count++; + } + if ((chunk.getBlockState(x - 3, y + 1, z).getBlock() instanceof BlockAir)) + { + count++; + } + if ((z > 0 /* + * || ((xPos & 15) > 2 ? flagZDChunk + * : flagXZDChunk) + */) && (chunk.getBlockState(x - 3, y, z - 1).getBlock() instanceof BlockAir)) + { + count++; + } + if ((z < 15/* + * || ((xPos & 15) > 2 ? flagZUChunk + * : flagXZUChunk) + */) && (chunk.getBlockState(x - 3, y, z + 1).getBlock() instanceof BlockAir)) + { + count++; + } + } + if (x > 3) + { + if ((chunk.getBlockState(x - 4, y, z).getBlock() instanceof BlockAir)) + { + count += 2; + } + if ((chunk.getBlockState(x - 4, y + 1, z).getBlock() instanceof BlockAir)) + { + count++; + } + if ((chunk.getBlockState(x - 4, y + 1, z).getBlock() instanceof BlockAir)) + { + count++; + } + if ((z > 0/* + * || ((xPos & 15) > 3 ? flagZDChunk : + * flagXZDChunk) + */) && !(chunk.getBlockState(x - 4, y, z - 1).getBlock() instanceof BlockAir)) + { + count++; + } + if ((z < 15/* + * || ((xPos & 15) > 3 ? flagZUChunk + * : flagXZUChunk) + */) && !(chunk.getBlockState(x - 4, y, z + 1).getBlock() instanceof BlockAir)) + { + count++; + } + } + if (count > 12) + { + count = 12; + } + if (count > 12) + count = 12; + chunk.setBlockState(new BlockPos(x - 1, y, z), GCBlocks.brightAir.getStateFromMeta(13 - count)); + ExtendedBlockStorage extendedblockstorage = chunk.getBlockStorageArray()[y >> 4]; + if (extendedblockstorage != null) + { + extendedblockstorage.setBlockLight(x - 1, y & 15, z, count + 2); + } + } + } + } + } + } + + chunk.setModified(true); + } + + public void resetBase() + { + this.dungeonGenerator.reset(); + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + Biome biome = this.world.getBiome(pos); + return biome.getSpawnableList(creatureType); + } + + /** + * Whether a large asteroid is located the provided coordinates + * + * @param x0 X-Coordinate to check, in Block Coords + * @param z0 Z-Coordinate to check, in Block Coords + * @return True if large asteroid is located here, False if not + */ + public BlockVec3 isLargeAsteroidAt(int x0, int z0) + { + int xToCheck; + int zToCheck; + for (int i0 = 0; i0 <= 32; i0++) + { + for (int i1 = -i0; i1 <= i0; i1++) + { + xToCheck = (x0 >> 4) + i0; + zToCheck = (z0 >> 4) + i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + + xToCheck = (x0 >> 4) + i0; + zToCheck = (z0 >> 4) - i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + + xToCheck = (x0 >> 4) - i0; + zToCheck = (z0 >> 4) + i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + + xToCheck = (x0 >> 4) - i0; + zToCheck = (z0 >> 4) - i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + } + } + + return null; + } + + private boolean isLargeAsteroidAt0(int x0, int z0) + { + for (int x = x0; x < x0 + ChunkProviderAsteroids.CHUNK_SIZE_X; x += 2) + { + for (int z = z0; z < z0 + ChunkProviderAsteroids.CHUNK_SIZE_Z; z += 2) + { + if ((Math.abs(this.randFromPoint(x, z)) < (this.asteroidDensity.getNoise(x, z) + .4) / ChunkProviderAsteroids.ASTEROID_CHANCE)) + { + return true; + } + } + } + + return false; + } + + public static void reset() + { + chunksDone.clear(); + } + + private class AsteroidData + { + + public boolean isHollow; + public float[] sizeYArray; + public int xMinArray; + public int zMinArray; + public int xMax; + public int zMax; + public int zSizeArray; + public int asteroidSizeArray; + public int asteroidXArray; + public int asteroidYArray; + public int asteroidZArray; + + public AsteroidData(boolean hollow, float[] sizeYArray2, int xMin, int zMin, int xmax, int zmax, int zSize, int size, int asteroidX, int asteroidY, int asteroidZ) + { + this.isHollow = hollow; + this.sizeYArray = sizeYArray2.clone(); + this.xMinArray = xMin; + this.zMinArray = zMin; + this.xMax = xmax; + this.zMax = zmax; + this.zSizeArray = zSize; + this.asteroidSizeArray = size; + this.asteroidXArray = asteroidX; + this.asteroidYArray = asteroidY; + this.asteroidZArray = asteroidZ; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlock.java new file mode 100644 index 00000000..6eb022e2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlock.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import java.util.ArrayList; +import net.minecraft.block.Block; + +public class SpecialAsteroidBlock +{ + + public Block block; + public byte meta; + public int probability; + public double thickness; // Arbitrary scale from 0 to 1; + public int index; + public static ArrayList register = new ArrayList<>(); + + public SpecialAsteroidBlock(Block block, byte meta, int probability, double thickness) + { + this.block = block; + this.meta = meta; + this.probability = probability; + this.thickness = thickness; + this.index = register.size(); + register.add(this); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlockHandler.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlockHandler.java new file mode 100644 index 00000000..3f25f203 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/SpecialAsteroidBlockHandler.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen; + +import java.util.ArrayList; +import java.util.Random; + +public class SpecialAsteroidBlockHandler +{ + + ArrayList asteroidBlocks; + + public SpecialAsteroidBlockHandler(SpecialAsteroidBlock... asteroidBlocks) + { + this.asteroidBlocks = new ArrayList(); + for (SpecialAsteroidBlock asteroidBlock : this.asteroidBlocks) + { + for (int i = 0; i < asteroidBlock.probability; i++) + { + this.asteroidBlocks.add(asteroidBlock); + } + } + } + + public SpecialAsteroidBlockHandler() + { + this.asteroidBlocks = new ArrayList(); + } + + public void addBlock(SpecialAsteroidBlock asteroidBlock) + { + for (int i = 0; i < asteroidBlock.probability; i++) + { + this.asteroidBlocks.add(asteroidBlock); + } + } + + public SpecialAsteroidBlock getBlock(Random rand, int size) + { + int s = this.asteroidBlocks.size(); + if (s < 10) + { + return this.asteroidBlocks.get(rand.nextInt(s)); + } + + Double r = rand.nextDouble(); + int index = (int) (s * Math.pow(r, (size + 5) * 0.05D)); + return this.asteroidBlocks.get(index); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseConfiguration.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseConfiguration.java new file mode 100644 index 00000000..042fff6b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseConfiguration.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base.BaseDeck.EnumBaseType; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base.BaseRoom.EnumRoomType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; + +public class BaseConfiguration +{ + + private final static int HANGAR_AIRLOCK_HEIGHT = 6; + private final static int HANGAR_AIRLOCK_WIDTH = 7; + private int yPosition; + private int baseType; + private boolean hangar; + private int roomHeight; + private int roomDepth; + private IBlockState wallBlock; + private int roomsNo; + private int[] randomRoomTypes; + private EnumRoomType[] roomTypes = EnumRoomType.values(); + + public BaseConfiguration() + { + } + + public BaseConfiguration(int yPosition, Random rand) + { + BaseDeck.EnumBaseType[] types = BaseDeck.EnumBaseType.values(); + this.yPosition = yPosition - 2 + rand.nextInt(5); + this.baseType = rand.nextInt(types.length); + this.hangar = rand.nextInt(3) == 0; + this.roomHeight = types[this.baseType].height; + this.roomDepth = this.hangar ? 7 : rand.nextInt(3) + 5; + this.wallBlock = types[this.baseType].wall; + this.roomsNo = rand.nextInt(2) + 2; + this.createRandomRoomList(rand); + } + + private void createRandomRoomList(Random rand) + { + int range = this.roomTypes.length; + int size = this.hangar ? 8 : this.roomsNo * 6; + this.randomRoomTypes = new int[size]; + for (int i = 0; i < size; i++) + { + this.randomRoomTypes[i] = i % range; + } + int index, temp; + for (int i = size - 1; i > 0; i--) + { + index = rand.nextInt(i + 1); + if (i == index) + continue; + temp = this.randomRoomTypes[index]; + this.randomRoomTypes[index] = this.randomRoomTypes[i]; + this.randomRoomTypes[i] = temp; + } + + // Make sure there's a Cargo Loader on lower tier (50/50 chance this + // causes one other room to be missed completely, that's OK!) + if (this.hangar) + { + boolean storeFound = false; + for (int i = 0; i < 4; i++) + { + if (this.randomRoomTypes[i] == EnumRoomType.STORE.ordinal()) + { + storeFound = true; + break; + } + } + if (!storeFound) + { + this.randomRoomTypes[rand.nextInt(4)] = EnumRoomType.STORE.ordinal(); + } + } + } + + public void writeToNBT(NBTTagCompound tagCompound) + { + tagCompound.setInteger("yPos", this.yPosition); + tagCompound.setInteger("dT", this.baseType + (this.hangar ? 16 : 0)); + tagCompound.setInteger("rmD", this.roomDepth); + tagCompound.setInteger("rmN", this.roomsNo); + } + + public void readFromNBT(NBTTagCompound tagCompound) + { + try + { + this.yPosition = tagCompound.getInteger("yPos"); + this.baseType = tagCompound.getInteger("dT"); + this.hangar = false; + if (this.baseType >= 16) + { + this.hangar = true; + this.baseType -= 16; + } + this.roomDepth = tagCompound.getInteger("rmD"); + this.roomsNo = tagCompound.getInteger("rmN"); + this.roomHeight = BaseDeck.EnumBaseType.values()[this.baseType].height; + this.wallBlock = BaseDeck.EnumBaseType.values()[this.baseType].wall; + } catch (Exception e) + { + System.err.println("Failed to read Abandoned Base configuration from NBT"); + System.err.println(tagCompound.toString()); + } + } + + public int getYPosition() + { + return this.yPosition; + } + + public IBlockState getWallBlock() + { + return this.wallBlock; + } + + public int getRoomHeight() + { + return hangar ? HANGAR_AIRLOCK_HEIGHT : this.roomHeight; + } + + public int getRoomDepth() + { + return this.roomDepth; + } + + public EnumBaseType getDeckType() + { + return BaseDeck.EnumBaseType.values()[this.baseType]; + } + + public boolean isHangarDeck() + { + return hangar; + } + + public int getCorridorWidth() + { + return hangar ? HANGAR_AIRLOCK_WIDTH : this.getDeckType().width; + } + + public int getRoomsNo() + { + return hangar ? 2 : roomsNo; + } + + public int getCorridorLength() + { + if (getRoomsNo() == 1) + return BaseDeck.ROOMLARGE; + + if (getRoomsNo() == 2) + return BaseDeck.ROOMLARGE + BaseDeck.ROOMLARGE; + + return getRoomsNo() * BaseDeck.ROOMSMALL + 2 * (BaseDeck.ROOMLARGE - BaseDeck.ROOMSMALL); + } + + public EnumRoomType getRandomRoom(int i) + { + return roomTypes[this.randomRoomTypes[i % this.randomRoomTypes.length]]; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseDeck.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseDeck.java new file mode 100644 index 00000000..a31e929f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseDeck.java @@ -0,0 +1,734 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class BaseDeck extends SizedPiece +{ + + static final int ROOMSMALL = 6; + static final int ROOMLARGE = 8; + protected int roomsOnSide; + protected int roomDepth; + protected int largeRoomPosA; + protected int largeRoomPosB; + protected int deckTier; // flag 1 means lowest deck in a stack, flag 2 is + // for highest deck, 0 is for middle decks - flag 4 + // is for control room + private ArrayList otherDecks = null; + + public enum EnumBaseType + { + + HUMANOID(5, 3, GCBlocks.basicBlock.getStateFromMeta(4), new ItemStack(Items.GHAST_TEAR, 3, 0)), + AVIAN(4, 3, GCBlocks.blockMoon.getStateFromMeta(4), new ItemStack(AsteroidsItems.strangeSeed, 1, 1)), + TUNNELER(4, 4, GCBlocks.blockMoon.getStateFromMeta(4), new ItemStack(AsteroidsItems.strangeSeed, 1, 0)); + + public final int height; + public final int width; + public final IBlockState wall; + public final ItemStack treasure; + + EnumBaseType(int height, int width, IBlockState wallBlock, ItemStack treasure) + { + this.height = height; + this.width = width; + this.wall = wallBlock; + this.treasure = treasure; + } + } + + public BaseDeck() + { + } + + public BaseDeck(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosY, int blockPosZ, int tier, EnumFacing dir) + { + super(configuration, configuration.getCorridorWidth() + 1, configuration.getRoomHeight() + 1, configuration.getCorridorLength(), dir); + this.roomsOnSide = configuration.getRoomsNo(); + this.roomDepth = configuration.getRoomDepth() + (tier == 0 ? 1 : 0); + this.deckTier = tier; + this.setCoordBaseMode(EnumFacing.NORTH); + if (this.getDirection().getAxis() == EnumFacing.Axis.X) + { + int w = this.sizeX; + this.sizeX = this.sizeZ; + this.sizeZ = w; + } + int xMin = blockPosX - this.sizeX / 2; + int zMin = blockPosZ - this.sizeZ / 2; + this.boundingBox = new StructureBoundingBox(xMin, blockPosY, zMin, xMin + this.sizeX, blockPosY + this.sizeY, zMin + this.sizeZ); + if (this.roomsOnSide <= 1) + { + largeRoomPosA = 0; + largeRoomPosB = 2; + } else + { + largeRoomPosA = rand.nextInt(this.roomsOnSide - 1); + largeRoomPosB = largeRoomPosA + 1 + rand.nextInt(this.roomsOnSide - largeRoomPosA - 1); + } + + if (tier == 1) // 1 means lowest tier and there are going to be some + // higher ones + { + this.createOtherDecks(configuration, rand, blockPosX, blockPosY, blockPosZ); + } + + // Special settings for Control Room + if ((tier & 4) == 4) + { + this.roomDepth -= 2; + if (this.getDirection().getAxis() == EnumFacing.Axis.X) + { + this.sizeZ += 4; + } else + { + this.sizeX += 4; + } + xMin = blockPosX - this.sizeX / 2; + zMin = blockPosZ - this.sizeZ / 2; + switch (this.getDirection()) + { + case NORTH: + this.sizeZ++; + break; + case SOUTH: + zMin--; + this.sizeZ++; + break; + case WEST: + this.sizeX++; + break; + case EAST: + default: + xMin--; + this.sizeX++; + break; + } + this.boundingBox = new StructureBoundingBox(xMin, blockPosY, zMin, xMin + this.sizeX, blockPosY + this.sizeY, zMin + this.sizeZ); + } + } + + private void createOtherDecks(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosY, int blockPosZ) + { + this.otherDecks = new ArrayList(); + if (this.configuration.isHangarDeck()) + { + this.otherDecks.add(new BaseDeck(configuration, rand, blockPosX, blockPosY + this.sizeY + 1, blockPosZ, 6, this.direction)); + } else + { + this.otherDecks.add(new BaseDeck(configuration, rand, blockPosX, blockPosY + this.sizeY, blockPosZ, 0, this.direction)); + this.otherDecks.add(new BaseDeck(configuration, rand, blockPosX, blockPosY + this.sizeY + this.sizeY, blockPosZ, 2, this.direction)); + } + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + int details = this.deckTier + (this.largeRoomPosA << 4) + (this.largeRoomPosB << 8); + tagCompound.setInteger("dD", details); + if (this.otherDecks != null) + { + NBTTagList tagList = new NBTTagList(); + for (BaseDeck deck : this.otherDecks) + { + NBTTagCompound tag1 = new NBTTagCompound(); + deck.writeStructureToNBT(tag1); + tagList.appendTag(tag1); + } + tagCompound.setTag("oD", tagList); + } + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + try + { + int details = tagCompound.getInteger("dD"); + this.deckTier = details & 15; + this.largeRoomPosB = details >> 8; + this.largeRoomPosA = (details >> 4) & 15; + this.roomsOnSide = configuration.getRoomsNo(); + this.roomDepth = configuration.getRoomDepth() + (this.deckTier == 0 ? 1 : 0) - ((this.deckTier & 4) == 4 ? 3 : 0); + + if (tagCompound.hasKey("oD")) + { + NBTTagList tagList = tagCompound.getTagList("oD", 10); + this.otherDecks = new ArrayList(); + for (int i = 0; i < tagList.tagCount(); i++) + { + NBTTagCompound tagAt = tagList.getCompoundTagAt(i); + BaseDeck deck = new BaseDeck(); + deck.readStructureFromNBT(tagAt, manager); + this.otherDecks.add(deck); + } + } + } catch (Exception e) + { + System.err.println("Failed to read Abandoned Base configuration from NBT"); + System.err.println(tagCompound.toString()); + } + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox chunkBounds) + { + IBlockState block1; + IBlockState blockWall = this.configuration.getWallBlock(); + IBlockState blockGrid = AsteroidBlocks.blockWalkway.getDefaultState(); + Block blockStair = GCBlocks.moonStoneStairs; + IBlockState blockAir = Blocks.AIR.getDefaultState(); + boolean directionNS = this.getDirection().getAxis() == EnumFacing.Axis.Z; + int ceilingSpacer = (directionNS ? this.sizeZ : this.sizeX) / this.roomsOnSide + 1; + int ceilingDeco = ceilingSpacer; + + int startX = 0; + int startZ = 0; + int endX = this.sizeX; + int endZ = this.sizeZ; + int endY = this.sizeY; + if (this.configuration.getDeckType() == EnumBaseType.AVIAN && !this.configuration.isHangarDeck()) + endY--; + + // This is the central corridor of every base + for (int x = startX; x <= endX; x++) + { + for (int z = startZ; z <= endZ; z++) + { + for (int y = 0; y <= endY; y++) + { + if (x == startX || x == endX || y == 0 || y == endY || z == startZ || z == endZ) + { + boolean skipCap = false; + if (this.configuration.isHangarDeck() && this.deckTier == 1 && (this.getDirection() == EnumFacing.NORTH && z == endZ || this.getDirection() == EnumFacing.SOUTH && z == startZ + || this.getDirection() == EnumFacing.WEST && x == endX || this.getDirection() == EnumFacing.EAST && x == startX)) + { + // Make airlock at the hangar end, if it's a hangar + // deck + IBlockState blockLintel = GCBlocks.airLockFrame.getDefaultState(); + IBlockState blockAirlock = GCBlocks.airLockFrame.getStateFromMeta(1); + if ((!directionNS && (z == startZ + 1 || z == endZ - 1) || directionNS && (x == startX + 1 || x == endX - 1)) && y < sizeY - 1) + { + this.setBlockState(worldIn, blockLintel, x, y, z, chunkBounds); + } else if (y >= endY - 1 || directionNS && (x == startX || x == endX) || !directionNS && (z == startZ || z == endZ)) + { + this.setBlockState(worldIn, blockWall, x, y, z, chunkBounds); + } else if (y == 0 || y == endY - 2) + { + // Test mid point bottom + if (y == 0 && (!directionNS && z == (startZ + endZ) / 2 || directionNS && x == (startX + endX) / 2)) + this.setBlockState(worldIn, blockAirlock, x, y, z, chunkBounds); + else + this.setBlockState(worldIn, blockLintel, x, y, z, chunkBounds); + skipCap = true; + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } + // Skip certain blocks at top and bottom to give + // chamfered edge + else if (!((y == 0 && (this.deckTier & 1) == 1 || y == endY && (this.deckTier & 1) == 2) + && (directionNS && (z == startZ || z == endZ) || !directionNS && (x == startX || x == endX)))) + { + if (y == 0 && (this.deckTier & 1) == 1 && this.configuration.getDeckType() == EnumBaseType.HUMANOID + && (directionNS && (x == startX + 2 + (this.configuration.isHangarDeck() ? 1 : 0) || x == startX + 4 + (this.configuration.isHangarDeck() ? 1 : 0)) + || !directionNS && (z == startZ + 2 + (this.configuration.isHangarDeck() ? 1 : 0) || z == startZ + 4 + (this.configuration.isHangarDeck() ? 1 : 0)))) + { + this.setBlockState(worldIn, blockGrid, x, y, z, chunkBounds); + } else if (!this.configuration.isHangarDeck() && (this.getDirection() == EnumFacing.SOUTH && z == endZ || this.getDirection() == EnumFacing.NORTH && z == startZ + || this.getDirection() == EnumFacing.EAST && x == endX || this.getDirection() == EnumFacing.WEST && x == startX)) + { + // Some end windows at the ends of the corridors + IBlockState windowOrWall = blockWall; + IBlockState blockGlass; + switch (this.configuration.getDeckType()) + { + case AVIAN: + blockGlass = GCBlocks.spaceGlassTinVanilla.getDefaultState(); + break; + case TUNNELER: + blockGlass = GCBlocks.spaceGlassTinStrong.getDefaultState(); + break; + case HUMANOID: + default: + blockGlass = GCBlocks.spaceGlassTinClear.getDefaultState(); + break; + } + + int w, startW, endW; + if (directionNS) + { + w = x; + startW = startX; + endW = endX; + } else + { + w = z; + startW = startZ; + endW = endZ; + } + + if (this.configuration.getDeckType() == EnumBaseType.AVIAN) + { + if (y == 2 && w == startW + 2) + { + windowOrWall = blockGlass; + } + } else + { + int edge = this.configuration.getDeckType() == EnumBaseType.TUNNELER ? 1 : 0; + if ((y == 2 || y == 3) && w > startW + edge && w < endW - edge) + { + windowOrWall = blockGlass; + } + } + + this.setBlockState(worldIn, windowOrWall, x, y, z, chunkBounds); + } else + { + this.setBlockState(worldIn, blockWall, x, y, z, chunkBounds); + } + } + + // Special case: cap the grid ends + int hangarOffset = (this.configuration.isHangarDeck() ? 1 : 0); + if (y == 0 && (this.deckTier & 1) == 1 && this.configuration.getDeckType() == EnumBaseType.HUMANOID + && (directionNS && (x >= startX + 2 + hangarOffset && x <= startX + 4 + hangarOffset) + || !directionNS && (z >= startZ + 2 + hangarOffset && z <= startZ + 4 + hangarOffset))) + { + if (directionNS && (z == startZ || z == endZ) || !directionNS && (x == startX || x == endX)) + { + if (!skipCap) + { + this.setBlockState(worldIn, blockWall, x, y, z, chunkBounds); + } + } + } + + } else if (this.configuration.getDeckType().ordinal() >= EnumBaseType.AVIAN.ordinal() && (y == 1 || y == endY - 1)) + { + // Internal decoration - deck corridor corners + int top = (y == 1) ? 0 : 4; + if (this.configuration.getDeckType() == EnumBaseType.TUNNELER) + top++; + + if (directionNS) + { + if (x == startX + 1) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(0 ^ top), x, y, z, chunkBounds); + } else if (x == endX - 1) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(1 ^ top), x, y, z, chunkBounds); + } else if (this.configuration.getDeckType() == EnumBaseType.AVIAN) + { + if (z == ceilingDeco && top >= 4) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(3 ^ top), x, y, z, chunkBounds); + } else if (z == ceilingDeco + 1 && top >= 4) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(2 ^ top), x, y, z, chunkBounds); + if (x >= endX - 2) + ceilingDeco += ceilingSpacer; + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } else + { + if (z == startZ + 1) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(2 ^ top), x, y, z, chunkBounds); + } else if (z == endZ - 1) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(3 ^ top), x, y, z, chunkBounds); + } else if (this.configuration.getDeckType() == EnumBaseType.AVIAN) + { + if (x == ceilingDeco && top == 4) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(1 ^ top), x, y, z, chunkBounds); + } else if (x == ceilingDeco + 1 && top == 4) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(top), x, y, z, chunkBounds); + if (z >= endZ - 2) + ceilingDeco += ceilingSpacer; + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } + } else + { + this.setBlockState(worldIn, blockAir, x, y, z, chunkBounds); + } + } + + // Infill for the extra height layer + if (endY != this.sizeY) + { + this.setBlockState(worldIn, blockWall, x, this.sizeY, z, chunkBounds); + } + } + } + + int leftX = ((this.deckTier & 4) == 4 && (this.direction == EnumFacing.SOUTH || this.direction == EnumFacing.EAST)) ? 3 : 2; + int rightX = leftX; + int leftZ = leftX; + int rightZ = rightX; + for (int i = 0; i < this.roomsOnSide; i++) + { + boolean largeRoom = (i == largeRoomPosA || i == largeRoomPosB); + int roomsize = largeRoom ? ROOMLARGE : ROOMSMALL; + int largeRoomOffset = largeRoom ? 2 : 1; + + if (directionNS) + { + this.makeDoorway(worldIn, this.sizeX, leftZ + largeRoomOffset, directionNS, chunkBounds); + this.makeDoorway(worldIn, 0, rightZ + largeRoomOffset, directionNS, chunkBounds); + + leftZ += roomsize; + rightZ += roomsize; + } else + { + this.makeDoorway(worldIn, leftX + largeRoomOffset, this.sizeZ, directionNS, chunkBounds); + this.makeDoorway(worldIn, rightX + largeRoomOffset, 0, directionNS, chunkBounds); + + leftX += roomsize; + rightX += roomsize; + } + } + + if (directionNS) + { + this.setCoordBaseMode(this.direction); + } else + { + this.setCoordBaseMode(this.direction.getOpposite()); // bug in + // Vanilla? + } + if (this.configuration.isHangarDeck() && this.deckTier == 1) + { + // Create an access hole between the floors + int width = directionNS ? this.sizeX : this.sizeZ; + this.setBlockState(worldIn, blockAir, 0, this.sizeY, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 1, this.sizeY, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 1, this.sizeY - 1, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, width - 1, this.sizeY - 1, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, width - 1, this.sizeY, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, width, this.sizeY, 1, chunkBounds); + } + + // Special settings for Control Room + if ((this.deckTier & 4) == 4) + { + IBlockState blockGlass; + switch (this.configuration.getDeckType()) + { + case AVIAN: + blockGlass = GCBlocks.spaceGlassTinVanilla.getDefaultState(); + break; + case TUNNELER: + blockGlass = GCBlocks.spaceGlassTinStrong.getDefaultState(); + break; + case HUMANOID: + default: + blockGlass = GCBlocks.spaceGlassTinClear.getDefaultState(); + break; + } + if (!directionNS) + { + int w = endX; + endX = endZ; + endZ = w; + } + for (int y = 1; y < 5; y++) + { + for (int x = 2; x < endX - 1; x++) + { + this.setBlockState(worldIn, blockGlass, x, y, endZ, chunkBounds); + } + } + + // Create two levers + int facing = 0; + switch (this.direction) + { + case NORTH: + break; + case SOUTH: + facing = 2; + break; + case EAST: + facing = 1; + break; + case WEST: + facing = 3; + } + + IBlockState lever = GCBlocks.concealedDetector.getStateFromMeta(8 + facing + (this.configuration.getDeckType() == EnumBaseType.HUMANOID ? 0 : 4)); + this.setBlockState(worldIn, lever, endX / 2 - 2, this.sizeY - 1, endZ, chunkBounds); + this.setBlockState(worldIn, lever, endX / 2 + 2, this.sizeY - 1, endZ, chunkBounds); + lever = Blocks.LEVER.getStateFromMeta(this.direction.getAxis() == EnumFacing.Axis.Z ? 4 : 3); + this.setBlockState(worldIn, lever, endX / 2 - 2, this.sizeY - 1, endZ - 1, chunkBounds); + this.setBlockState(worldIn, lever, endX / 2 + 2, this.sizeY - 1, endZ - 1, chunkBounds); + + // Create two redstone blocks + this.setBlockState(worldIn, GCBlocks.concealedRedstone.getStateFromMeta(15), endX / 2 - 2, this.sizeY, endZ, chunkBounds); + this.setBlockState(worldIn, GCBlocks.concealedRedstone.getStateFromMeta(15), endX / 2 + 2, this.sizeY, endZ, chunkBounds); + + // Create an access hole between the floors + this.setBlockState(worldIn, blockAir, 2, 0, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 3, 0, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 11, 0, 1, chunkBounds); + this.setBlockState(worldIn, blockAir, 12, 0, 1, chunkBounds); + } + this.setCoordBaseMode(EnumFacing.NORTH); + + return true; + } + + public List getRooms(int roomIndex, BaseStart startPiece, Random rand) + { + List rooms = new ArrayList(); + + boolean directionNS = this.getDirection().getAxis() == EnumFacing.Axis.Z; + EnumFacing left = directionNS ? EnumFacing.WEST : EnumFacing.SOUTH; + EnumFacing right = directionNS ? EnumFacing.EAST : EnumFacing.NORTH; + int leftX = directionNS ? this.boundingBox.maxX + 1 : this.boundingBox.minX; + int leftZ = directionNS ? this.boundingBox.minZ : this.boundingBox.maxZ + 1; + int rightX = directionNS ? this.boundingBox.minX - this.roomDepth - 1 : this.boundingBox.minX; + int rightZ = directionNS ? this.boundingBox.minZ : this.boundingBox.minZ - this.roomDepth - 1; + // now offset effect of moving control room 1 position North or West, in + // two cases + if ((this.deckTier & 4) == 4 && this.direction == EnumFacing.SOUTH) + { + rightZ++; + leftZ++; + } + if ((this.deckTier & 4) == 4 && this.direction == EnumFacing.EAST) + { + rightX++; + leftX++; + } + + for (int i = 0; i < this.roomsOnSide; i++) + { + boolean largeRoom = (i == largeRoomPosA || i == largeRoomPosB); + int roomsize = largeRoom ? ROOMLARGE : ROOMSMALL; + rooms.add(this.getRoom(roomIndex++, left, leftX, leftZ, largeRoom, true, rand)); + rooms.add(this.getRoom(roomIndex++, right, rightX, rightZ, largeRoom, false, rand)); + if (directionNS) + { + leftZ += roomsize; + rightZ += roomsize; + } else + { + leftX += roomsize; + rightX += roomsize; + } + } + + if (this.configuration.isHangarDeck() && (this.deckTier & 1) == 1) + { + int blockX = 0; + int blockZ = 0; + switch (this.direction) + { + case NORTH: + blockX = this.boundingBox.minX + (this.sizeX - BaseHangar.HANGARWIDTH) / 2; + blockZ = this.boundingBox.maxZ + 1; + break; + case SOUTH: + blockX = this.boundingBox.minX + (this.sizeX - BaseHangar.HANGARWIDTH) / 2; + blockZ = this.boundingBox.minZ - 1 - BaseHangar.HANGARLENGTH; + break; + case WEST: + blockX = this.boundingBox.maxX + 1; + blockZ = this.boundingBox.minZ + (this.sizeZ - BaseHangar.HANGARWIDTH) / 2; + break; + case EAST: + default: + blockX = this.boundingBox.minX - 1 - BaseHangar.HANGARLENGTH; + blockZ = this.boundingBox.minZ + (this.sizeZ - BaseHangar.HANGARWIDTH) / 2; + } + + rooms.add(new BaseHangar(this.configuration, rand, blockX, blockZ, this.direction.getOpposite())); + } + + if ((this.configuration.isHangarDeck() || this.configuration.getDeckType() == EnumBaseType.HUMANOID) && (this.deckTier & 1) == 1) + { + int blockX = this.boundingBox.minX; + int blockZ = this.boundingBox.minZ; + int sX = this.sizeX; + int sZ = this.sizeZ; + switch (this.direction) + { + case NORTH: + blockZ++; + sZ--; + if (!this.configuration.isHangarDeck()) + sZ--; + break; + case SOUTH: + sZ--; + if (!this.configuration.isHangarDeck()) + { + blockZ++; + sZ--; + } + break; + case WEST: + blockX++; + sX--; + if (!this.configuration.isHangarDeck()) + sX--; + break; + case EAST: + default: + sX--; + if (!this.configuration.isHangarDeck()) + { + blockX++; + sX--; + } + } + rooms.add(new BasePlate(this.configuration, blockX, this.boundingBox.minY - 1, blockZ, sX, sZ, this.direction)); + } + + if (this.otherDecks != null) + { + for (BaseDeck deck : this.otherDecks) + { + rooms.add(deck); + List newRooms = deck.getRooms(roomIndex, startPiece, rand); + rooms.addAll(newRooms); + roomIndex += newRooms.size(); + } + } + + return rooms; + } + + protected void makeDoorway(World worldIn, int x, int z, boolean directionNS, StructureBoundingBox chunkBounds) + { +// System.out.println("Making doorway at " + x + "," + z + " NS:" + directionNS + " Tier " + this.deckTier); + IBlockState blockLintel = GCBlocks.airLockFrame.getDefaultState(); + IBlockState blockAirlock = GCBlocks.airLockFrame.getStateFromMeta(1); + Block blockStair = GCBlocks.moonStoneStairs; + IBlockState blockAir = Blocks.AIR.getDefaultState(); + int meta = directionNS ? 2 : 0; + + switch (this.configuration.getDeckType()) + { + case HUMANOID: + if (directionNS) + z--; + else + x--; + this.setBlockState(worldIn, blockLintel, x, 1, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 3, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockAir, x, 1, z, chunkBounds); + this.setBlockState(worldIn, blockAir, x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockAirlock, x, 0, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 3, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockLintel, x, 1, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockLintel, x, 3, z, chunkBounds); + break; + case AVIAN: + this.setBlockState(worldIn, blockStair.getStateFromMeta(0 + meta), x, this.sizeY - 4, z, chunkBounds); + this.setBlockState(worldIn, blockAir, x, this.sizeY - 3, z, chunkBounds); + this.setBlockState(worldIn, blockStair.getStateFromMeta(4 + meta), x, this.sizeY - 2, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockStair.getStateFromMeta(1 + meta), x, this.sizeY - 4, z, chunkBounds); + this.setBlockState(worldIn, blockAir, x, this.sizeY - 3, z, chunkBounds); + this.setBlockState(worldIn, blockStair.getStateFromMeta(5 + meta), x, this.sizeY - 2, z, chunkBounds); + break; + case TUNNELER: + if (directionNS) + z--; + else + x--; + this.setBlockState(worldIn, blockStair.getStateFromMeta(1 + meta), x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockStair.getStateFromMeta(5 + meta), x, 3, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockAir, x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockAir, x, 3, z, chunkBounds); + if (directionNS) + z++; + else + x++; + this.setBlockState(worldIn, blockStair.getStateFromMeta(0 + meta), x, 2, z, chunkBounds); + this.setBlockState(worldIn, blockStair.getStateFromMeta(4 + meta), x, 3, z, chunkBounds); + break; + default: + } + + } + + protected Piece getRoom(int i, EnumFacing dir, int blockX, int blockZ, boolean large, boolean left, Random rand) + { + int sX = large ? ROOMLARGE : ROOMSMALL; + int sZ = sX; + if (dir.getAxis() == EnumFacing.Axis.Z) + { + sZ = this.roomDepth; + } else + { + sX = this.roomDepth; + } + int sY = this.sizeY; + return new BaseRoom(this.configuration, rand, blockX, this.boundingBox.minY, blockZ, sX, sY, sZ, dir, this.configuration.getRandomRoom(i), left ? (i == 0) : (i == this.roomsOnSide - 1), + left ? (i == this.roomsOnSide - 1) : (i == 0), this.deckTier); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseHangar.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseHangar.java new file mode 100644 index 00000000..cabd3be0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseHangar.java @@ -0,0 +1,462 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class BaseHangar extends SizedPiece +{ + + public static final int HANGARWIDTH = 26; + public static final int HANGARLENGTH = 42; + public static final int HANGARHEIGHT = 15; + + public BaseHangar() + { + } + + public BaseHangar(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing direction) + { + super(configuration, HANGARWIDTH, HANGARHEIGHT, HANGARLENGTH, direction); + if (direction.getAxis() == EnumFacing.Axis.X) + { + int w = this.sizeX; + this.sizeX = this.sizeZ; + this.sizeZ = w; + this.setCoordBaseMode(direction.getOpposite()); // Maybe a bug in + // vanilla here? + } else + this.setCoordBaseMode(direction); + int yPos = configuration.getYPosition(); + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + // TODO check save nbt + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + IBlockState blockAir = Blocks.AIR.getDefaultState(); + IBlockState blockPlain = GCBlocks.basicBlock.getStateFromMeta(4); + IBlockState blockPattern = GCBlocks.basicBlock.getStateFromMeta(3); + IBlockState blockGrid = AsteroidBlocks.blockWalkway.getDefaultState(); + IBlockState blockSlab = GCBlocks.slabGCHalf.getStateFromMeta(1); + IBlockState upsideSlab = GCBlocks.slabGCHalf.getStateFromMeta(9); + IBlockState blockWall = GCBlocks.wallGC.getStateFromMeta(1); + IBlockState decoWall = GCBlocks.wallGC.getStateFromMeta(0); + IBlockState moonWall = GCBlocks.wallGC.getStateFromMeta(2); + IBlockState blockBars = Blocks.IRON_BARS.getDefaultState(); + IBlockState blockDesh = MarsBlocks.marsBlock.getStateFromMeta(8); + IBlockState blockRedstone = GCBlocks.concealedRedstone.getDefaultState(); + Block blockStair = GCBlocks.tinStairs2; + Block arcLamp = GCBlocks.brightLamp; + int stairmeta = 1; + int stairmetaB = 2; + int lampmeta = 3; + int lampmeta2 = 5; + if (direction == EnumFacing.SOUTH) + { + stairmeta ^= 1; + stairmetaB ^= 1; + lampmeta ^= 1; + lampmeta2 ^= 1; + } else if (direction == EnumFacing.EAST) + { + stairmeta ^= 2; + stairmetaB ^= 3; + lampmeta = 4; + lampmeta2 = 3; + } else if (direction == EnumFacing.WEST) + { + stairmeta ^= 3; + stairmetaB ^= 2; + lampmeta = 5; + lampmeta2 = 2; + } + + int maxX = HANGARWIDTH; + int maxZ = HANGARLENGTH; + int maxY = this.sizeY; + int midPoint = HANGARLENGTH - 22; + + // AIR + for (int zz = HANGARLENGTH; zz >= 0; zz--) + { + for (int xx = 0; xx <= maxX; xx++) + { + for (int y = 0; y <= maxY; y++) + { + if (y <= 1 && (xx == 0 || xx == maxX)) + continue; + if (y == maxY && (xx < 4 || xx > maxX - 4)) + continue; + if (y == maxY - 1 && (xx < 2 || xx > maxX - 2)) + continue; + this.setBlockState(worldIn, blockAir, xx, y, zz, structureBoundingBoxIn); + } + } + } + + // endwall + for (int y = 7; y <= 8; y++) + { + this.setBlockState(worldIn, blockWall, 1, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 2, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 3, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 23, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 24, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 25, y, HANGARLENGTH, structureBoundingBoxIn); + + for (int x = 5; x < 22; x++) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), x, y, HANGARLENGTH, structureBoundingBoxIn); + if (y == 7 && (x < 9 || x > 17)) + this.setBlockState(worldIn, this.configuration.getWallBlock(), x, maxY, HANGARLENGTH, structureBoundingBoxIn); + } + } + + for (int y = 7; y <= maxY; y++) + { + this.setBlockState(worldIn, blockPlain, 4, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 22, y, HANGARLENGTH, structureBoundingBoxIn); + } + for (int y = 9; y <= maxY; y++) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), 6, y, HANGARLENGTH, structureBoundingBoxIn); + this.setBlockState(worldIn, this.configuration.getWallBlock(), 20, y, HANGARLENGTH, structureBoundingBoxIn); + } + + for (int xx = 0; xx <= 3; xx++) + this.setBlockState(worldIn, moonWall, xx, 1, HANGARLENGTH, structureBoundingBoxIn); + for (int xx = maxX - 3; xx <= maxX; xx++) + this.setBlockState(worldIn, moonWall, xx, 1, HANGARLENGTH, structureBoundingBoxIn); + + this.setBlockState(worldIn, blockDesh, 9, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 11, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 13, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 15, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockDesh, 17, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, upsideSlab, 10, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, upsideSlab, 12, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, upsideSlab, 14, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, upsideSlab, 16, maxY, HANGARLENGTH - 1, structureBoundingBoxIn); + + // Ceiling struts + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 4, maxY - 1, HANGARLENGTH - 3, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 4, maxY - 2, HANGARLENGTH - 2, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 4, maxY - 3, HANGARLENGTH - 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 22, maxY - 1, HANGARLENGTH - 3, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 22, maxY - 2, HANGARLENGTH - 2, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB + 4), 22, maxY - 3, HANGARLENGTH - 1, structureBoundingBoxIn); + +// this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta), 5, maxY - 3, HANGARLENGTH, structureBoundingBoxIn); +// this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta), 5, maxY - 6, HANGARLENGTH, structureBoundingBoxIn); +// this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta), 21, maxY - 3, HANGARLENGTH, structureBoundingBoxIn); +// this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta), 21, maxY - 6, HANGARLENGTH, structureBoundingBoxIn); + + // FIRST SECTION + for (int zz = HANGARLENGTH; zz > HANGARLENGTH - 5; zz--) + { + for (int xx = 0; xx <= maxX; xx += maxX) + { + this.setBlockState(worldIn, moonWall, xx, 1, zz, structureBoundingBoxIn); + for (int y = 2; y < 7; y++) + { + this.setBlockState(worldIn, blockAir, xx, y, zz, structureBoundingBoxIn); + } + for (int y = 9; y < maxY - 1; y++) + { + this.setBlockState(worldIn, blockAir, xx, y, zz, structureBoundingBoxIn); + } + this.setBlockState(worldIn, blockWall, xx, 7, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 8, zz, structureBoundingBoxIn); + } + + if (zz % 3 == 1) + { + this.setBlockState(worldIn, blockPlain, 4, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 22, maxY, zz, structureBoundingBoxIn); + } else + { + this.setBlockState(worldIn, blockPattern, 4, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 22, maxY, zz, structureBoundingBoxIn); + } + + // Top middle + if (zz < HANGARLENGTH - 1) + { + this.setBlockState(worldIn, blockGrid, 9, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 11, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 13, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 15, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 17, maxY, zz, structureBoundingBoxIn); + } + + // Floor + this.setBlockState(worldIn, blockPattern, 7, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 9, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 19, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 17, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 8, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 18, 0, zz, structureBoundingBoxIn); + + if (zz > HANGARLENGTH - 5) + { + this.setBlockState(worldIn, blockPlain, 10, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 16, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 11, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 15, 0, zz, structureBoundingBoxIn); + } + + if (zz > HANGARLENGTH - 4) + { + this.setBlockState(worldIn, blockPlain, 12, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 14, 0, zz, structureBoundingBoxIn); + } + if (zz > HANGARLENGTH - 3) + this.setBlockState(worldIn, blockPlain, 13, 0, zz, structureBoundingBoxIn); + } + + // Floor end + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 10, 0, HANGARLENGTH - 6, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 16, 0, HANGARLENGTH - 6, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 11, 0, HANGARLENGTH - 5, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 15, 0, HANGARLENGTH - 5, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 12, 0, HANGARLENGTH - 4, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 14, 0, HANGARLENGTH - 4, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmetaB), 13, 0, HANGARLENGTH - 3, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 10, 0, HANGARLENGTH - 5, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 16, 0, HANGARLENGTH - 5, structureBoundingBoxIn); + + // Join first and second sections + this.setBlockState(worldIn, moonWall, 0, 1, HANGARLENGTH - 5, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, maxX, 1, HANGARLENGTH - 5, structureBoundingBoxIn); + + this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta2 ^ 1), 12, maxY, HANGARLENGTH - 3, structureBoundingBoxIn); + this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta2), 14, maxY, HANGARLENGTH - 3, structureBoundingBoxIn); + + // SECOND SECTION + for (int zz = HANGARLENGTH - 5; zz > midPoint; zz--) + { + // Top sides + if (zz % 3 == 1) + { + this.setBlockState(worldIn, blockSlab, 3, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 4, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, 22, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockSlab, 23, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmeta + 4), 2, maxY - 1, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmeta + 4), 1, maxY - 2, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta((stairmeta ^ 1) + 4), 24, maxY - 1, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta((stairmeta ^ 1) + 4), 25, maxY - 2, zz, structureBoundingBoxIn); + if (zz != HANGARLENGTH - 11) + { + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmeta), 1, 1, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockStair.getStateFromMeta(stairmeta ^ 1), 25, 1, zz, structureBoundingBoxIn); + floorStrut(worldIn, blockWall, decoWall, zz, structureBoundingBoxIn); + } + } else + { + this.setBlockState(worldIn, blockPattern, 22, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 4, maxY, zz, structureBoundingBoxIn); + } + + // Top middle + if (zz == midPoint + 1) + { + this.setBlockState(worldIn, blockDesh, 9, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 11, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockDesh, 13, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPattern, 15, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockDesh, 17, maxY, zz, structureBoundingBoxIn); + } else + { + this.setBlockState(worldIn, blockGrid, 9, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 13, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 17, maxY, zz, structureBoundingBoxIn); + if (zz == HANGARLENGTH - 12) + { + IBlockState repeater = GCBlocks.concealedRepeater_Powered.getStateFromMeta(direction.getAxis() == EnumFacing.Axis.Z ? 0 : 2); // Rotation + // will + // be + // taken + // care + // of + // by + // getRotation() + // but + // seems + // to + // be + // bugged + // in + // vanilla + this.setBlockState(worldIn, repeater, 11, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, repeater, 15, maxY, zz, structureBoundingBoxIn); + } else + { + this.setBlockState(worldIn, blockRedstone, 11, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockRedstone, 15, maxY, zz, structureBoundingBoxIn); + } + } + if ((zz - midPoint - 1) % 6 == 0) + { + this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta2), 10, maxY, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, arcLamp.getStateFromMeta(lampmeta2 ^ 1), 16, maxY, zz, structureBoundingBoxIn); + } + + // Walls + for (int xx = 0; xx <= maxX; xx += maxX) + { + this.setBlockState(worldIn, blockPlain, xx, maxY - 2, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, xx, maxY - 4, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, xx, 2, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, xx, 4, zz, structureBoundingBoxIn); + if (zz % 3 == 1) + { + this.setBlockState(worldIn, blockPattern, xx, maxY - 3, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockPlain, xx, 3, zz, structureBoundingBoxIn); + + this.setBlockState(worldIn, blockWall, xx, 5, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 6, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 9, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 10, zz, structureBoundingBoxIn); + } + this.setBlockState(worldIn, blockWall, xx, 7, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 8, zz, structureBoundingBoxIn); + } + + // Floor + IBlockState blockBeam = (zz % 2 == 0) ? blockPattern : blockPlain; + this.setBlockState(worldIn, blockBeam, 7, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBeam, 9, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBeam, 19, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBeam, 17, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 8, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 18, 0, zz, structureBoundingBoxIn); + } + + // THIRD SECTION + int zz = midPoint; + + // Top sides + extrudeTrioOff(worldIn, randomIn, 2, blockPlain, blockPattern, 4, maxY, zz, structureBoundingBoxIn); + extrudeTrioOff(worldIn, randomIn, 2, blockPlain, blockPattern, 22, maxY, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 23, maxY, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 3, maxY, zz, structureBoundingBoxIn); + + // Walls + for (int xx = 0; xx <= maxX; xx += maxX) + { + extrudeTrio(worldIn, randomIn, 1, blockPlain, blockPattern, xx, maxY - 2, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 1, blockPlain, blockPattern, xx, maxY - 4, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 1, blockPlain, blockPattern, xx, 2, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 1, blockPlain, blockPattern, xx, 4, zz, structureBoundingBoxIn); + + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 5, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 6, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 7, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 8, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 9, zz, structureBoundingBoxIn); + extrudeTrio(worldIn, randomIn, 0, blockBars, blockAir, xx, 10, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockBars, xx, maxY - 3, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockBars, xx, 3, zz, structureBoundingBoxIn); + } + + // Floor + extrude(worldIn, randomIn, 2, blockGrid, 1, 1, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 2, 1, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 24, 1, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 25, 1, zz, structureBoundingBoxIn); + extrudeDuo(worldIn, randomIn, 3, blockPlain, blockPattern, 7, 0, zz, structureBoundingBoxIn); + extrudeDuo(worldIn, randomIn, 3, blockPlain, blockPattern, 9, 0, zz, structureBoundingBoxIn); + extrudeDuo(worldIn, randomIn, 3, blockPlain, blockPattern, 19, 0, zz, structureBoundingBoxIn); + extrudeDuo(worldIn, randomIn, 3, blockPlain, blockPattern, 17, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 3, blockGrid, 8, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 3, blockGrid, 18, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 3, blockGrid, 5, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 3, blockGrid, 21, 0, zz, structureBoundingBoxIn); + + this.setBlockState(worldIn, moonWall, 10, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 11, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 12, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 13, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 14, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 15, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, moonWall, 16, 0, zz, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 10, 0, zz - 1, structureBoundingBoxIn); + extrude(worldIn, randomIn, 2, blockGrid, 16, 0, zz - 1, structureBoundingBoxIn); + + // WHERE SECOND AND THIRD SECTION MEET + // Extend the mid-side walls a little way past the midPoint + for (int xx = 0; xx <= maxX; xx += maxX) + { + this.setBlockState(worldIn, blockWall, xx, 7, midPoint, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, xx, 8, midPoint, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBars, xx, 3, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockBars, xx, maxY - 3, midPoint + 1, structureBoundingBoxIn); + } + // Extend the walkways a little way also + this.setBlockState(worldIn, blockGrid, 1, 1, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 2, 1, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 5, 0, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 21, 0, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 24, 1, midPoint + 1, structureBoundingBoxIn); + this.setBlockState(worldIn, blockGrid, 25, 1, midPoint + 1, structureBoundingBoxIn); + + return true; + } + + private void floorStrut(World worldIn, IBlockState blockWall, IBlockState decoWall, int zz, StructureBoundingBox structureBoundingBoxIn) + { + this.setBlockState(worldIn, blockWall, 1, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 2, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 3, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 4, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 5, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 6, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 20, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 21, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 22, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 23, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, decoWall, 24, 0, zz, structureBoundingBoxIn); + this.setBlockState(worldIn, blockWall, 25, 0, zz, structureBoundingBoxIn); + } + + private void extrude(World worldIn, Random rand, int solid, IBlockState blockstateIn, int x, int y, int z, StructureBoundingBox boundingBoxIn) + { + for (int zz = z; zz >= rand.nextInt(4 * (4 - solid)); zz--) + this.setBlockState(worldIn, blockstateIn, x, y, zz, boundingBoxIn); + } + + private void extrudeDuo(World worldIn, Random rand, int solid, IBlockState blockA, IBlockState blockB, int x, int y, int z, StructureBoundingBox boundingBoxIn) + { + for (int zz = z; zz >= rand.nextInt(4 * (4 - solid)); zz--) + this.setBlockState(worldIn, (zz % 2 == 0) ? blockA : blockB, x, y, zz, boundingBoxIn); + } + + private void extrudeTrio(World worldIn, Random rand, int solid, IBlockState blockA, IBlockState blockB, int x, int y, int z, StructureBoundingBox boundingBoxIn) + { + for (int zz = z; zz >= rand.nextInt(4 * (4 - solid)); zz--) + this.setBlockState(worldIn, (zz % 3 == 0) ? blockA : blockB, x, y, zz, boundingBoxIn); + } + + private void extrudeTrioOff(World worldIn, Random rand, int solid, IBlockState blockA, IBlockState blockB, int x, int y, int z, StructureBoundingBox boundingBoxIn) + { + for (int zz = z; zz >= rand.nextInt(4 * (4 - solid)); zz--) + this.setBlockState(worldIn, (zz % 3 == 1) ? blockA : blockB, x, y, zz, boundingBoxIn); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseLinking.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseLinking.java new file mode 100644 index 00000000..4dd553fc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseLinking.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class BaseLinking extends SizedPiece +{ + + public BaseLinking() + { + } + + public BaseLinking(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosY, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, sizeX, sizeY, sizeZ, direction); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.boundingBox = new StructureBoundingBox(blockPosX, blockPosY, blockPosZ, blockPosX + sizeX, blockPosY + sizeY, blockPosZ + sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i < this.boundingBox.getXSize(); i++) + { + for (int j = 0; j < this.boundingBox.getYSize(); j++) + { + for (int k = 0; k < this.boundingBox.getZSize(); k++) + { + if ((this.getDirection().getAxis() == EnumFacing.Axis.Z && (i == 0 || i == this.boundingBox.getXSize() - 1)) || j == 0 || j == this.boundingBox.getYSize() - 1 + || (this.getDirection().getAxis() == EnumFacing.Axis.X && (k == 0 || k == this.boundingBox.getZSize() - 1))) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), i, j, k, this.boundingBox); + } else + { + if (j == this.boundingBox.getYSize() - 2) + { + if (this.getDirection().getAxis() == EnumFacing.Axis.Z && (k + 1) % 4 == 0 && (i == 1 || i == this.boundingBox.getXSize() - 2)) + { + // TODO: windows or decor +// this.setBlockState(worldIn, GCBlocks.unlitTorch.getDefaultState().withProperty(BlockUnlitTorch.FACING, i == 1 ? EnumFacing.WEST.getOpposite() : EnumFacing.EAST.getOpposite()), i, j, k, this.boundingBox); + continue; + } else if (this.getDirection().getAxis() == EnumFacing.Axis.X && (i + 1) % 4 == 0 && (k == 1 || k == this.boundingBox.getZSize() - 2)) + { +// this.setBlockState(worldIn, GCBlocks.unlitTorch.getDefaultState().withProperty(BlockUnlitTorch.FACING, k == 1 ? EnumFacing.NORTH.getOpposite() : EnumFacing.SOUTH.getOpposite()), i, j, k, this.boundingBox); + continue; + } + } + + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BasePlate.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BasePlate.java new file mode 100644 index 00000000..aa75a5f3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BasePlate.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class BasePlate extends SizedPiece +{ + + public BasePlate() + { + } + + public BasePlate(BaseConfiguration configuration, int blockPosX, int yPos, int blockPosZ, int sizeX, int sizeZ, EnumFacing dir) + { + super(configuration, sizeX, 1, sizeZ, dir); + this.setCoordBaseMode(dir); + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + IBlockState blockWall = this.configuration.getWallBlock(); + boolean axisEW = getDirection().getAxis() == EnumFacing.Axis.X; + int maxX = axisEW ? this.sizeZ : this.sizeX; + int maxZ = axisEW ? this.sizeX : this.sizeZ; + for (int xx = 0; xx <= maxX; xx++) + { + for (int zz = 0; zz <= maxZ; zz++) + { + this.setBlockState(worldIn, blockWall, xx, 0, zz, boundingBox); + } + } + + return true; + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseRoom.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseRoom.java new file mode 100644 index 00000000..2f8ea0e0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseRoom.java @@ -0,0 +1,632 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.entities.EntityHangingSchematic; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCargoLoader; +import micdoodle8.mods.galacticraft.core.tile.TileEntityCrafting; +import micdoodle8.mods.galacticraft.core.tile.TileEntityEnergyStorageModule; +import micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank; +import micdoodle8.mods.galacticraft.planets.asteroids.blocks.AsteroidBlocks; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base.BaseDeck.EnumBaseType; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionUtils; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBrewingStand; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; +import net.minecraftforge.fluids.FluidStack; + +public class BaseRoom extends SizedPiece +{ + + private EnumRoomType type; + private boolean nearEnd; + private boolean farEnd; + private int deckTier; + + public BaseRoom() + { + } + + public BaseRoom(BaseConfiguration configuration, Random rand, int blockPosX, int yPos, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir, EnumRoomType roomType, boolean near, boolean far, int deckTier) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(this.direction); + this.type = roomType; + this.nearEnd = near; + this.farEnd = far; + this.deckTier = deckTier; + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + int details = this.deckTier + (this.nearEnd ? 16 : 0) + (this.farEnd ? 32 : 0); + tagCompound.setInteger("brT", type.ordinal()); + tagCompound.setInteger("brD", details); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + try + { + int typeNo = tagCompound.getInteger("brT"); + if (typeNo < EnumRoomType.values().length) + { + this.type = EnumRoomType.values()[typeNo]; + } else + this.type = EnumRoomType.EMPTY; + + int details = tagCompound.getInteger("brD"); + this.deckTier = details & 15; + this.nearEnd = (details & 16) == 16; + this.farEnd = (details & 32) == 32; + } catch (Exception e) + { + System.err.println("Failed to read Abandoned Base configuration from NBT"); + System.err.println(tagCompound.toString()); + } + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBoundary) + { + IBlockState blockAir = Blocks.AIR.getDefaultState(); + Block blockStair = GCBlocks.moonStoneStairs; + + boolean axisEW = getDirection().getAxis() == EnumFacing.Axis.X; + int maxX = axisEW ? this.sizeZ : this.sizeX; + int maxZ = axisEW ? this.sizeX : this.sizeZ; + int randomInt = random.nextInt(99); + for (int xx = 0; xx <= maxX; xx++) + { + boolean near = this.nearEnd && xx == maxX; + boolean far = this.farEnd && xx == 0; + for (int yy = 0; yy <= this.sizeY; yy++) + { + for (int zz = 0; zz <= maxZ; zz++) + { + // 5 outer walls of the room + if (xx == 0 || xx == maxX || yy == 0 || yy == this.sizeY || zz == maxZ) + { + boolean xEntrance = maxX > 6 ? (xx > 2 && xx < maxX - 2) : (xx > 1 && xx < maxX - 1); + if (this.type.blockEntrance != null && yy == 0 && zz == 0 && xEntrance && this.configuration.getDeckType() != EnumBaseType.TUNNELER) + { + this.setBlockState(worldIn, this.type.blockEntrance, xx, yy, zz, chunkBoundary); + this.setBlockState(worldIn, this.configuration.getWallBlock(), xx, yy - 1, zz, chunkBoundary); + } + // Shave the top and bottom corners + else if (!((zz == maxZ || near || far) && (yy == 0 && (this.deckTier & 1) == 1 || yy == this.sizeY && (this.deckTier & 2) == 2 || (zz == maxZ && (near || far)))) + || zz == 0 && yy == 0) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), xx, yy, zz, chunkBoundary); + } + // Special case, fill in some corners on hangardeck top + // deck + else if (yy == this.sizeY && (this.deckTier & 2) == 2 && this.configuration.isHangarDeck() && zz < 3) + { + if (xx == 0 || xx == maxX) + { + this.setBlockState(worldIn, this.configuration.getWallBlock(), xx, yy, zz, chunkBoundary); + } + } + } else + { + // Room internals + if ((xx > 1 && xx < maxX - 1) && (zz > 0 && zz < maxZ - 1) || (yy > 1 && yy < this.sizeY - 1) || this.type.doEntryWallsToo) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(xx, zz), this.getYWithOffset(yy), this.getZWithOffset(xx, zz)); + if (chunkBoundary.isVecInside(blockpos)) + { + this.buildRoomContents(worldIn, xx, yy, zz, maxX - 1, maxZ - 1, blockpos, randomInt); + } + } else if (this.configuration.getDeckType() == EnumBaseType.TUNNELER && (yy == 1 || yy == this.sizeY - 1)) + { + int meta = 1; + if (xx == 1) + meta = 3; + else if (xx == maxX - 1) + meta = 2; + else if (zz == 0) + meta = 0; + if (this.direction == EnumFacing.NORTH) + { + meta ^= 3 ^ meta / 2; + } else if (this.direction == EnumFacing.SOUTH) + { + meta ^= 2 + meta / 2; + } else if (this.direction == EnumFacing.EAST) + meta ^= 1; + meta += (yy == 1) ? 0 : 4; + this.setBlockState(worldIn, blockStair.getStateFromMeta(meta), xx, yy, zz, chunkBoundary); + } else if (yy == 1 && this.type.blockFloor != null) + { + boolean xEntrance = maxX > 6 ? (xx > 2 && xx < maxX - 2) : (xx > 1 && xx < maxX - 1); + if (zz == 0 && (this.type.blockEntrance != null && xEntrance)) + { + this.setBlockState(worldIn, blockAir, xx, yy, zz, chunkBoundary); + } else + { + this.setBlockState(worldIn, this.type.blockFloor, xx, yy, zz, chunkBoundary); + } + } else + { + this.setBlockState(worldIn, blockAir, xx, yy, zz, chunkBoundary); + } + } + } + } + } + + return true; + } + + /** + * Room contents boundaries are: x from 1 to maxX y from 1 to this.sizeY - 1 + * z from 1 to maxZ + */ + private void buildRoomContents(World worldIn, int x, int y, int z, int maxX, int maxZ, BlockPos blockpos, int randomInt) + { + IBlockState state = Blocks.AIR.getDefaultState(); + int semirand = ((blockpos.getY() * 379 + blockpos.getX()) * 373 + blockpos.getZ()) * 7 & 15; + + int facing = 0; + int facing1 = 0; + int facing2 = 0; + int facingLamp = 2; + int facingScreen = 2; + switch (this.direction) + { + case WEST: + facing1 = 3; + facing2 = 2; + facingLamp = 3; + facingScreen = 5; + break; + case EAST: + facing = 2; + facing1 = 1; + facing2 = 0; + facingLamp = 2; + facingScreen = 4; + break; + case NORTH: + facing = 3; + facing1 = 2; + facing2 = 1; + facingLamp = 5; + facingScreen = 2; + break; + case SOUTH: + facing = 1; + facing1 = 0; + facing2 = 3; + facingLamp = 4; + facingScreen = 3; + } + + // Offset from centre - used for some rooms + int ox = maxX / 2 - 3; + int xx = x - ox; + + switch (this.type) + { + case EMPTY: + // Pillars in corners + if ((z == 1 || z == maxZ - 1) && (x == 2 || x == maxX - 1)) + { + state = GCBlocks.wallGC.getStateFromMeta(2); + } else if (y == 1) + { + // Some random Netherwart + if (semirand < 2) + { + state = AsteroidBlocks.spaceWart.getStateFromMeta(semirand); + } + } + break; + case STORE: + if (maxX >= 6 && y == 1 && maxZ >= 5) + { + // An actual landing pad (indoors!) + if (xx >= 3 && xx <= 5 && z >= 2 && z <= 4) + { + state = GCBlocks.landingPad.getDefaultState(); + } else if (xx == 2) + { + // Cargo loaders and unloaders, these will contain + // treasure items but only accessible when powered + switch (z) + { + case 2: + state = GCBlocks.cargoLoader.getStateFromMeta(facing); + break; + case 3: + state = GCBlocks.aluminumWire.getStateFromMeta(1); + break; + case 4: + state = GCBlocks.cargoLoader.getStateFromMeta(4 + (facing ^ 2)); + break; + default: + } + } + } + break; + case POWER: + facing = (facing + 1) % 4; + switch (y) + { + case 1: + // Layer 1: wall blocks with sealable alu wire in the + // centre + if (z == 3 && xx >= 4 && x <= maxX - 2) + state = GCBlocks.sealableBlock.getStateFromMeta(14); + else if (xx >= 3 && z > 1 && (z < maxZ - 1 || z == 4)) + state = this.configuration.getWallBlock(); + break; + case 2: + // Layer 2: tier 1 storage and alu wire and a switch + if (z == 2) + { + if (xx == 3) + state = GCBlocks.machineTiered.getStateFromMeta(0 + facing); + else if (xx > 3 && x < maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(0); + else if (x == maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(2); + else if ((xx == 3 || x == maxX - 1)) + state = AsteroidBlocks.blockMinerBase.getDefaultState(); + } else if (z == 3 && x == maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(0); + // An industrial looking frame for the whole structure + else if (z == 4 && (xx == 3 || x == maxX - 1)) + state = AsteroidBlocks.blockMinerBase.getDefaultState(); + break; + case 3: + // Layer 3: tier 2 storage and alu wire + if (z == 2 && xx == 4) + state = GCBlocks.aluminumWire.getStateFromMeta(0); + else if (z == 3 && x == maxX - 2) + state = GCBlocks.machineTiered.getStateFromMeta(8 + (facing ^ 2)); + else if (z == 3 && x == maxX - 1) + state = GCBlocks.aluminumWire.getStateFromMeta(1); + else if (z == 3 && xx >= 4 && x < maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(0); + // An industrial looking frame for the whole structure + else if ((z == 2 || z == 4) && (xx == 3 || x == maxX - 1)) + state = AsteroidBlocks.blockMinerBase.getDefaultState(); + break; + case 4: + // Layer 4: tier 2 storage and alu wire + if (z == 3) + { + if (x == maxX - 3) + state = GCBlocks.machineTiered.getStateFromMeta(8 + facing); + else if (x == maxX - 1 || x == maxX - 2) + state = GCBlocks.aluminumWire.getStateFromMeta(1); + } + // An industrial looking frame for the whole structure + else if ((z == 2 || z == 4) && xx >= 3 && x < maxX) + state = AsteroidBlocks.blockMinerBase.getDefaultState(); + break; + } + break; + case ENGINEERING: + if (y == 1) + { + int closerz = (maxZ <= 5) ? 2 : 3; + if ((z == maxZ - 2 && x == maxX / 2 + 1 || (z == closerz && (x == 2 || x == maxX - 1) && maxX > 5)) && maxZ > 3) + { + state = GCBlocks.nasaWorkbench.getDefaultState(); + } else + { + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } + } + break; + case MEDICAL: + int zTable = maxZ - 3; + int zTank = maxZ - 1; + int zLight = zTable; + if (zTable <= 1) + { + if (zTable < 0) + { + // Too small to build the room + break; + } + + // Small medical room: bring everything closer together + zTable++; + zLight++; + zTank = maxZ; + } + if (y == 1) + { + // Operating table at y == 1 + if (z == zTable && x <= maxX - 1 && x >= maxX - 3) + { + state = GCBlocks.crafting.getStateFromMeta(1); + } else + // Tiled floor + state = Blocks.IRON_TRAPDOOR.getDefaultState(); + } else if (y == 2 || y == 3) + { + // Operating table at y == 2 + if (y == 2 && z == zTable && x <= maxX - 1 && x >= maxX - 3) + { + state = GCBlocks.landingPad.getDefaultState(); + } else if (z == zTank) + { + // Fluid tanks, 2 tanks high - these will be filled with + // Bacterial Sludge below + if ((maxX - x) % 2 == 1) + { + state = GCBlocks.fluidTank.getDefaultState(); + } + } + } else if ((y == 4 || y == 5) && (z == zLight || z == zLight - 1)) + { + // Lighting + if (x == maxX) + state = GCBlocks.concealedDetector.getStateFromMeta(8 + facing + (this.configuration.getDeckType() == EnumBaseType.HUMANOID ? 0 : 4)); + else if (x == maxX - 1) + state = GCBlocks.brightLamp.getStateFromMeta(facingLamp); + } + break; + case CREW: + if (y == 1) + { + if (x == 2 || x == maxX - 1) + { + if ((z % 2) == 1) + { + state = GCBlocks.wallGC.getStateFromMeta((z == 1) ? 3 : 2); + } + } else + { + state = Blocks.CARPET.getStateFromMeta(7); + } + } else if (y == 2) + { + if (x == 2 || x == maxX - 1) + { + if (z == 1) + { + state = Blocks.BREWING_STAND.getDefaultState(); + } else if (z > 2 && z < maxZ) + { + state = GCBlocks.landingPad.getStateFromMeta(1); + } + } + } + break; + case CONTROL: + if (y == 1) + { + if (x == maxX / 2 + 1 && z == maxZ - 2) + { + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } else + { + state = GCBlocks.slabGCHalf.getStateFromMeta(6); + } + } else if (y <= 3) + { + if ((x == 1 || x == maxX) && !(z == 0 || z == maxZ)) + { + state = GCBlocks.telemetry.getDefaultState(); + } else if ((x == 2 || x == maxX - 1) && !(z == 0 || z == maxZ)) + { + state = GCBlocks.screen.getStateFromMeta((x == 2 ? facingLamp : facingLamp ^ 1)); + } else if (z == maxZ && x > 2 && x < maxX - 1) + { + state = GCBlocks.screen.getStateFromMeta(facingScreen); + } else if (x == maxX / 2 + 1 && z == maxZ - 2 && y == 2) + { + state = GCBlocks.landingPad.getStateFromMeta(1); + } + } + break; + case CRYO: + boolean xEntrance = maxX > 5 ? (x > 2 && x < maxX - 1) : (x > 1 && x < maxX); + boolean highEntrance = this.configuration.isHangarDeck() && this.configuration.getDeckType() == EnumBaseType.AVIAN; + if (y == 1) + { + // Build a dark plinth for it all at y == 1 + if (z == 1 && x > 1 && x < maxX) + { + state = GCBlocks.slabGCHalf.getStateFromMeta(6); + } else if (z != 0 || !xEntrance || highEntrance) + { + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } + } else if (z == 0 && (y > (highEntrance ? 5 : 3) || !xEntrance)) + { + // Dark ceiling and entrance wall + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } else if (y <= 4 && (z == maxZ || x == 1 || x == maxX)) + { + // Around the walls: Cryo Chambers alternated with dark + // blocks + if (z == maxZ && x % 2 == 0 && x < maxX) + { + if (y == 2) + { + state = MarsBlocks.machine.getStateFromMeta(BlockMachineMars.CRYOGENIC_CHAMBER_METADATA + facing1); + } + } else if (z < maxZ && z > 1 && (maxZ - z) % 2 == 0) + { + if (y == 2) + { + state = MarsBlocks.machine.getStateFromMeta(BlockMachineMars.CRYOGENIC_CHAMBER_METADATA + (x == 1 ? facing : facing2)); + } + } else + { + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } + } else if (y > 5 || y == this.configuration.getRoomHeight() || (z == maxZ || x == 1 || x == maxX)) + { + // Dark top section of walls and ceiling + state = AsteroidBlocks.blockBasic.getStateFromMeta(6); + } + break; + default: + } + + worldIn.setBlockState(blockpos, state, 2); + if (state.getBlock() instanceof ITileEntityProvider) + { + TileEntity tile = worldIn.getTileEntity(blockpos); + + if (tile instanceof IMultiBlock) + { + List positions = new LinkedList<>(); + ((IMultiBlock) tile).getPositions(blockpos, positions); + for (BlockPos pos : positions) + { + worldIn.setBlockState(pos, GCBlocks.fakeBlock.getDefaultState().withProperty(BlockMulti.MULTI_TYPE, ((IMultiBlock) tile).getMultiType()), 2); + } + } + + if (tile instanceof TileEntityFluidTank) + { + ((TileEntityFluidTank) tile).fill(null, new FluidStack(MarsModule.sludge, 16000), true); + } else if (tile instanceof TileEntityCargoLoader) + { + TileEntityCargoLoader loader = (TileEntityCargoLoader) tile; + loader.locked = true; + // Looks like the food supplies have gone off! + loader.addCargo(new ItemStack(Items.POISONOUS_POTATO, 64, 0), true); + loader.addCargo(new ItemStack(Items.POISONOUS_POTATO, 64, 0), true); + loader.addCargo(new ItemStack(Items.POISONOUS_POTATO, 64, 0), true); + loader.addCargo(new ItemStack(Items.POISONOUS_POTATO, 64, 0), true); + loader.addCargo(new ItemStack(Items.ROTTEN_FLESH, 64, 0), true); + loader.addCargo(new ItemStack(GCItems.flagPole, semirand % 31 + 2, 0), true); + loader.addCargo(new ItemStack(MarsItems.marsItemBasic, semirand % 2 + 1, 4), true); // Slimeling + // Inventory + // Bag + loader.addCargo(new ItemStack(AsteroidsItems.basicItem, semirand % 23 + 41, 7), true); // Thermal + // cloth + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY), true); + loader.addCargo(this.configuration.getDeckType().treasure.copy(), true); + } else if (tile instanceof TileEntityCrafting) + { + switch (semirand % 4) + { + case 0: + break; + case 1: + ((TileEntityCrafting) tile).setInventorySlotContents(1, new ItemStack(Items.IRON_INGOT)); + ((TileEntityCrafting) tile).setInventorySlotContents(3, new ItemStack(Items.IRON_INGOT)); + break; + case 2: + // Creeper or Zombie head + int slot = semirand % 9; + ((TileEntityCrafting) tile).setInventorySlotContents(slot, new ItemStack(Items.SKULL, 1, (semirand % 13 < 6) ? 4 : 2)); + break; + case 3: + ((TileEntityCrafting) tile).setInventorySlotContents(0, new ItemStack(Items.IRON_INGOT)); + ((TileEntityCrafting) tile).setInventorySlotContents(1, new ItemStack(Items.IRON_INGOT)); + ((TileEntityCrafting) tile).setInventorySlotContents(3, new ItemStack(Items.IRON_INGOT)); + ((TileEntityCrafting) tile).setInventorySlotContents(4, new ItemStack(Items.STICK)); + ((TileEntityCrafting) tile).setInventorySlotContents(7, new ItemStack(Items.STICK)); + break; + } + } else if (tile instanceof TileEntityBrewingStand) + { + TileEntityBrewingStand stand = (TileEntityBrewingStand) tile; + stand.setInventorySlotContents(0, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.POISON)); + stand.setInventorySlotContents(1, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.WEAKNESS)); + stand.setInventorySlotContents(2, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.HARMING)); + } else if (tile instanceof TileEntityEnergyStorageModule) + { + TileEntityEnergyStorageModule store = (TileEntityEnergyStorageModule) tile; + if (semirand % 3 == 1) + { + store.setInventorySlotContents(1, new ItemStack(GCItems.battery, 1, 100)); + } + } + } + + if (this.type == EnumRoomType.ENGINEERING && y == (this.configuration.getRoomHeight() <= 4 ? 2 : 3) && z == maxZ && (x == 3 || x == 6)) + { + EnumFacing hangingDirection = this.direction; + if (hangingDirection == EnumFacing.WEST || hangingDirection == EnumFacing.EAST) + { + // Apparently we have our North and our South reversed ? So we + // don't want the opposite for North and South! + hangingDirection = hangingDirection.getOpposite(); + } + EntityHangingSchematic entityhanging = new EntityHangingSchematic(worldIn, blockpos, hangingDirection, x / 3 - 1); + if (entityhanging != null) + { + worldIn.spawnEntity(entityhanging); + entityhanging.setSendToClient(); + } + } + } + + public enum EnumRoomType + { + + ENGINEERING(AsteroidBlocks.blockBasic.getStateFromMeta(6), AsteroidBlocks.blockBasic.getStateFromMeta(6), false), + POWER(null, null, false), + STORE(null, null, false), + EMPTY(null, null, false), + MEDICAL(Blocks.IRON_TRAPDOOR.getDefaultState(), Blocks.IRON_TRAPDOOR.getStateFromMeta(8), false), + CREW(null, null, false), + CRYO(AsteroidBlocks.blockBasic.getStateFromMeta(6), AsteroidBlocks.blockBasic.getStateFromMeta(6), true), + CONTROL(GCBlocks.slabGCHalf.getStateFromMeta(6), AsteroidBlocks.blockBasic.getStateFromMeta(6), false); + + public final IBlockState blockFloor; + public final IBlockState blockEntrance; + public final boolean doEntryWallsToo; + + EnumRoomType(IBlockState floorBlock, IBlockState entrance, boolean doWalls) + { + this.blockFloor = floorBlock; + this.blockEntrance = entrance; + this.doEntryWallsToo = doWalls; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseStart.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseStart.java new file mode 100644 index 00000000..0585239c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/BaseStart.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public class BaseStart extends BaseDeck +{ + + public List attachedComponents = Lists.newArrayList(); + public List componentBounds = Lists.newArrayList(); + + public BaseStart() + { + } + + public BaseStart(BaseConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing direction) + { + super(configuration, rand, blockPosX, configuration.getYPosition(), blockPosZ, 1, direction); + } + + @Override + public void buildComponent(StructureComponent componentIn, List listIn, Random rand) + { + attachedComponents.clear(); + componentBounds.clear(); + componentBounds.add(this.boundingBox); + listIn.clear(); + listIn.add(this); + List rooms = getRooms(0, this, rand); + for (Piece next : rooms) + { + listIn.add(next); + attachedComponents.add(next); + componentBounds.add(next.getBoundingBox()); + } + + // TODO applyAsteroidDamage(); + + super.buildComponent(componentIn, listIn, rand); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/MapGenAbandonedBase.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/MapGenAbandonedBase.java new file mode 100644 index 00000000..cd0bcc5b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/MapGenAbandonedBase.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import micdoodle8.mods.galacticraft.planets.asteroids.dimension.WorldProviderAsteroids; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.gen.structure.MapGenStructure; +import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.StructureStart; + +public class MapGenAbandonedBase extends MapGenStructure +{ + + private static boolean initialized; + + static + { + try + { + MapGenAbandonedBase.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public MapGenAbandonedBase() + { + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenAbandonedBase.initialized) + { + MapGenStructureIO.registerStructure(MapGenAbandonedBase.Start.class, "AbandonedBase"); + MapGenStructureIO.registerStructureComponent(BaseStart.class, "AbandonedBaseStart"); + MapGenStructureIO.registerStructureComponent(BaseRoom.class, "AbandonedBaseRoom"); + MapGenStructureIO.registerStructureComponent(BaseDeck.class, "AbandonedBaseDeck"); + MapGenStructureIO.registerStructureComponent(BasePlate.class, "AbandonedBasePlate"); + MapGenStructureIO.registerStructureComponent(BaseHangar.class, "AbandonedBaseHangar"); + + // Currently in fact unused, but just in case... + MapGenStructureIO.registerStructureComponent(BaseLinking.class, "AbandonedBaseCorridor"); + } + + MapGenAbandonedBase.initialized = true; + } + + @Override + public BlockPos getNearestStructurePos(World worldIn, BlockPos pos, boolean p_180706_3_) + { + return null; + } + + @Override + public String getStructureName() + { + return "GC_AbandonedBase"; + } + + @Override + protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ) + { + long dungeonPos = MapGenDungeon.getDungeonPosForCoords(this.world, chunkX, chunkZ, ((IGalacticraftWorldProvider) this.world.provider).getDungeonSpacing()); + int i = (int) (dungeonPos >> 32); + int j = (int) dungeonPos; + return i == chunkX && j == chunkZ; + } + + @Override + public void generate(World worldIn, int x, int z, ChunkPrimer chunkPrimerIn) + { + int i = this.range; + this.world = worldIn; + this.rand.setSeed(worldIn.getSeed()); + long j = this.rand.nextLong(); + long k = this.rand.nextLong(); + + for (int l = x - i; l <= x + i; ++l) + { + for (int i1 = z - i; i1 <= z + i; ++i1) + { + long j1 = (long) l * j; + long k1 = (long) i1 * k; + this.rand.setSeed(j1 ^ k1 ^ worldIn.getSeed()); + this.recursiveGenerate(worldIn, l, i1, x, z, chunkPrimerIn); + } + } + } + + public void reset() + { + this.structureMap.clear(); + } + + @Override + protected StructureStart getStructureStart(int chunkX, int chunkZ) + { + BlockVec3 asteroid = ((WorldProviderAsteroids) this.world.provider).getClosestAsteroidXZ((chunkX << 4) + 8, 0, (chunkZ << 4) + 8, false); + if (asteroid == null) + { + return new MapGenAbandonedBase.Start(this.world, this.rand, (chunkX << 4) + 8, (chunkZ << 4) + 8, 15, new BaseConfiguration(148, this.rand)); + } + return new MapGenAbandonedBase.Start(this.world, this.rand, asteroid.x, asteroid.z, asteroid.sideDoneBits - 5, new BaseConfiguration(asteroid.y - 10, this.rand)); + } + + public static class Start extends StructureStart + { + + private BaseConfiguration configuration; + + public Start() + { + } + + public Start(World worldIn, Random rand, int posX, int posZ, int size, BaseConfiguration configuration) + { + super(posX >> 4, posZ >> 4); + this.configuration = configuration; + if (size < 1) + size = 1; + size = size * (int) MathHelper.sqrt(size) / 4; + if (configuration.isHangarDeck()) + size -= 6; + int xoffset = 0; + int zoffset = 0; + EnumFacing direction = EnumFacing.Plane.HORIZONTAL.random(rand); + switch (direction) + { + case NORTH: + zoffset = -size; + break; + case SOUTH: + zoffset = size; + break; + case WEST: + xoffset = -size; + break; + case EAST: + xoffset = size; + break; + } + BaseStart startPiece = new BaseStart(configuration, rand, posX + xoffset, posZ + zoffset, direction); + startPiece.buildComponent(startPiece, this.components, rand); + List list = startPiece.attachedComponents; + + while (!list.isEmpty()) + { + int i = rand.nextInt(list.size()); + StructureComponent structurecomponent = list.remove(i); + structurecomponent.buildComponent(startPiece, this.components, rand); + } + + this.updateBoundingBox(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/Piece.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/Piece.java new file mode 100644 index 00000000..66ed2c6d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/Piece.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class Piece extends StructureComponent +{ + + protected BaseConfiguration configuration; + + public Piece() + { + } + + public Piece(BaseConfiguration configuration) + { + this.configuration = configuration; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + this.configuration.writeToNBT(tagCompound); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + if (this.configuration == null) + { + this.configuration = new BaseConfiguration(); + this.configuration.readFromNBT(tagCompound); + } + } + + protected StructureBoundingBox getExtension(EnumFacing direction, int length, int width) + { + int blockX, blockZ, sizeX, sizeZ; + switch (direction) + { + case NORTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.minZ - sizeZ; + break; + case EAST: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.maxX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + case SOUTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.maxZ; + break; + case WEST: + default: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.minX - sizeX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + } + return new StructureBoundingBox(blockX, blockZ, blockX + sizeX, blockZ + sizeZ); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/SizedPiece.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/SizedPiece.java new file mode 100644 index 00000000..5f67e43b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/asteroids/world/gen/base/SizedPiece.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.asteroids.world.gen.base; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class SizedPiece extends Piece +{ + + protected EnumFacing direction; + protected int sizeX; + protected int sizeY; + protected int sizeZ; + + public SizedPiece() + { + } + + public SizedPiece(BaseConfiguration configuration, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration); + this.direction = direction; + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + } + + public EnumFacing getDirection() + { + return direction; + } + + public void setDirection(EnumFacing direction) + { + this.direction = direction; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("dir", this.direction.ordinal()); + tagCompound.setInteger("sX", this.sizeX); + tagCompound.setInteger("sY", this.sizeY); + tagCompound.setInteger("sZ", this.sizeZ); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + + this.sizeX = tagCompound.getInteger("sX"); + this.sizeY = tagCompound.getInteger("sY"); + this.sizeZ = tagCompound.getInteger("sZ"); + + if (tagCompound.hasKey("dir")) + { + this.direction = EnumFacing.byIndex(tagCompound.getInteger("dir")); + } else + { + this.direction = EnumFacing.NORTH; + } + } + + public int getSizeX() + { + return sizeX; + } + + public int getSizeY() + { + return sizeY; + } + + public int getSizeZ() + { + return sizeZ; + } + + @Override + protected int getXWithOffset(int x, int z) + { + if (this.getCoordBaseMode() == null) + { + return x; + } else + { + switch (this.getCoordBaseMode()) + { + case NORTH: + return this.boundingBox.minX + x; + case SOUTH: + return this.boundingBox.maxX - x; + case WEST: + return this.boundingBox.maxX - z; + case EAST: + return this.boundingBox.minX + z; + default: + return x; + } + } + } + + @Override + protected int getZWithOffset(int x, int z) + { + if (this.getCoordBaseMode() == null) + { + return z; + } else + { + switch (this.getCoordBaseMode()) + { + case NORTH: + return this.boundingBox.minZ + z; + case SOUTH: + return this.boundingBox.maxZ - z; + case WEST: + return this.boundingBox.minZ + x; + case EAST: + return this.boundingBox.maxZ - x; + default: + return z; + } + } + } + + // Unused currently + public Piece getDoorway(Random rand, BaseStart startPiece, int maxAttempts, boolean small) + { + EnumFacing randomDir; + int blockX; + int blockZ; + int sizeX; + int sizeZ; + boolean valid; + int attempts = maxAttempts; + do + { + int randDir = rand.nextInt(4); + randomDir = EnumFacing.byHorizontalIndex((randDir == getDirection().getOpposite().getHorizontalIndex() ? randDir + 1 : randDir) % 4); + StructureBoundingBox extension = getExtension(randomDir, 1, 3); + blockX = extension.minX; + blockZ = extension.minZ; + sizeX = extension.maxX - extension.minX; + sizeZ = extension.maxZ - extension.minZ; + valid = true; + attempts--; + } while (!valid && attempts > 0); + + if (!valid) + { + return null; + } + + return new BaseLinking(this.configuration, rand, blockX, this.boundingBox.minY, blockZ, sizeX, 3, sizeZ, randomDir); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/GCPlanetsDataFixers.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/GCPlanetsDataFixers.java new file mode 100644 index 00000000..114f2b08 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/GCPlanetsDataFixers.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.datafix; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.datafix.base.AbstractFixer; + +public class GCPlanetsDataFixers extends AbstractFixer +{ + + private static final int VERSION = 1; + + public GCPlanetsDataFixers() + { + super(Constants.MOD_ID_PLANETS, VERSION); + } + + @Override + public void registerAll() + { + registerFixer(new PlanetsTileEntityFixer()); + } + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/PlanetsTileEntityFixer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/PlanetsTileEntityFixer.java new file mode 100644 index 00000000..bddff5d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/datafix/PlanetsTileEntityFixer.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.datafix; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.datafix.types.TileFixer; + +public class PlanetsTileEntityFixer extends TileFixer +{ + + public PlanetsTileEntityFixer() + { + super(Constants.MOD_ID_PLANETS); + putFixEntry("GC Beam Reflector"); + putFixEntry("GC Beam Receiver"); + putFixEntry("GC Short Range Telepad"); + putFixEntry("GC Fake Short Range Telepad"); + putFixEntry("GC Astro Miner Base Builder"); + putFixEntry("GC Astro Miner Base"); + putFixEntry("GC Venus Spout"); + putFixEntry("GC Venus Dungeon Spawner"); + putFixEntry("GC Tier 3 Treasure Chest"); + putFixEntry("GC Geothermal Generator"); + putFixEntry("GC Crashed Probe"); + putFixEntry("GC Solar Array Module"); + putFixEntry("GC Solar Array Controller"); + putFixEntry("GC Laser Turret"); + putFixEntry("GC Slimeling Egg"); + putFixEntry("GC Tier 2 Treasure Chest"); + putFixEntry("GC Planet Terraformer"); + putFixEntry("GC Cryogenic Chamber"); + putFixEntry("GC Gas Liquefier"); + putFixEntry("GC Methane Synthesizer"); + putFixEntry("GC Water Electrolyzer"); + putFixEntry("GC Mars Dungeon Spawner"); + putFixEntry("GC Launch Controller"); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/ConfigManagerMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/ConfigManagerMars.java new file mode 100644 index 00000000..7254720e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/ConfigManagerMars.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars; + +import java.io.File; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +public class ConfigManagerMars +{ + + public static boolean loaded; + + public static Configuration config; + + public ConfigManagerMars(File file, boolean update) + { + if (!ConfigManagerMars.loaded) + { + ConfigManagerMars.config = new Configuration(file); + ConfigManagerMars.syncConfig(true, update); + } + } + + // DIMENSIONS + public static int dimensionIDMars; + + // SCHEMATIC + public static int idSchematicRocketT2; + public static int idSchematicCargoRocket; + + // GENERAL + public static boolean launchControllerChunkLoad; + public static boolean launchControllerAllDims; + + // WGEN + public static boolean disableDeshGen; + public static boolean disableTinGen; + public static boolean disableCopperGen; + public static boolean disableIronGen; + + public static void syncConfig(boolean load, boolean update) + { + try + { + Property prop; + + if (!config.isChild && load) + { + config.load(); + } + + prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "dimensionIDMars", -29); + prop.setComment("Dimension ID for Mars"); + prop.setLanguageKey("gc.configgui.dimension_id_mars").setRequiresMcRestart(true); + dimensionIDMars = prop.getInt(); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_DIMENSIONS); + + // + + prop = config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicRocketT2", 2); + prop.setComment("Schematic ID for Tier 2 Rocket, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_rocket_t2"); + idSchematicRocketT2 = prop.getInt(2); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_SCHEMATIC); + + prop = config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, "idSchematicCargoRocket", 3); + prop.setComment("Schematic ID for Cargo Rocket, must be unique."); + prop.setLanguageKey("gc.configgui.id_schematic_cargo_rocket"); + idSchematicCargoRocket = prop.getInt(3); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_SCHEMATIC); + + // + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "launchControllerChunkLoad", true); + prop.setComment("Whether or not the launch controller acts as a chunk loader. Will cause issues if disabled!"); + prop.setLanguageKey("gc.configgui.launch_controller_chunk_load"); + launchControllerChunkLoad = prop.getBoolean(true); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "launchControllerAllDims", false); + prop.setComment("May rarely cause issues if enabled, depends on how the other mod's dimensions are."); + prop.setLanguageKey("gc.configgui.launch_controller_all_dims"); + launchControllerAllDims = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Iron Ore Gen on Mars", false); + prop.setComment("Disable Iron Ore Gen on Mars."); + prop.setLanguageKey("gc.configgui.disable_iron_gen_mars"); + if (update) + { + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + prop.setLanguageKey(prop.getLanguageKey()); + config.getCategory(Constants.CONFIG_CATEGORY_GENERAL).remove(prop.getName()); + } + disableIronGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Copper Ore Gen on Mars", false); + prop.setComment("Disable Copper Ore Gen on Mars."); + prop.setLanguageKey("gc.configgui.disable_copper_gen_mars"); + if (update) + { + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + prop.setLanguageKey(prop.getLanguageKey()); + config.getCategory(Constants.CONFIG_CATEGORY_GENERAL).remove(prop.getName()); + } + disableCopperGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Tin Ore Gen on Mars", false); + prop.setComment("Disable Tin Ore Gen on Mars."); + prop.setLanguageKey("gc.configgui.disable_tin_gen_mars"); + if (update) + { + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + prop.setLanguageKey(prop.getLanguageKey()); + config.getCategory(Constants.CONFIG_CATEGORY_GENERAL).remove(prop.getName()); + } + disableTinGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(update ? Constants.CONFIG_CATEGORY_GENERAL : Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Desh Ore Gen on Mars", false); + prop.setComment("Disable Desh Ore Gen on Mars."); + prop.setLanguageKey("gc.configgui.disable_desh_gen_mars"); + if (update) + { + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, prop.getName(), prop.getBoolean(), prop.getComment()); + prop.setLanguageKey(prop.getLanguageKey()); + config.getCategory(Constants.CONFIG_CATEGORY_GENERAL).remove(prop.getName()); + } + disableDeshGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + } catch (final Exception e) + { + GalacticraftPlanets.logger.error(e, "Galacticraft Mars (Planets) has a problem loading its config"); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/EventHandlerMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/EventHandlerMars.java new file mode 100644 index 00000000..101e472e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/EventHandlerMars.java @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars; + +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.client.render.entities.RenderPlayerGC; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC.OrientCameraEvent; +import micdoodle8.mods.galacticraft.core.event.EventLandingPadRemoval; +import micdoodle8.mods.galacticraft.core.event.EventWakePlayer; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars.EnumMachineType; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.dimension.WorldProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityCryogenicChamber; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.world.gen.WorldGenEggs; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldServer; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.living.LivingDeathEvent; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +public class EventHandlerMars +{ + + @SubscribeEvent + public void onLivingDeath(LivingDeathEvent event) + { + if (event.getSource().damageType.equals("slimeling") && event.getSource() instanceof EntityDamageSource) + { + EntityDamageSource source = (EntityDamageSource) event.getSource(); + + if (source.getTrueSource() instanceof EntitySlimeling && !source.getTrueSource().world.isRemote) + { + ((EntitySlimeling) source.getTrueSource()).kills++; + } + } + } + + @SubscribeEvent + public void onLivingAttacked(LivingAttackEvent event) + { + if (!event.getEntity().isEntityInvulnerable(event.getSource()) && !event.getEntity().world.isRemote && event.getEntityLiving().getHealth() <= 0.0F + && !(event.getSource().isFireDamage() && event.getEntityLiving().isPotionActive(MobEffects.FIRE_RESISTANCE))) + { + Entity entity = event.getSource().getTrueSource(); + + if (entity instanceof EntitySlimeling) + { + EntitySlimeling entitywolf = (EntitySlimeling) entity; + + if (entitywolf.isTamed()) + { +// event.entityLiving.recentlyHit = 100; +// event.entityLiving.attackingPlayer = null; TODO + } + } + } + } + + @SubscribeEvent + public void onPlayerWakeUp(EventWakePlayer event) + { + EntityPlayer player = event.getEntityPlayer(); + BlockPos c = player.bedLocation; + IBlockState state = player.getEntityWorld().getBlockState(c); + Block blockID = state.getBlock(); + + if (blockID == MarsBlocks.machine && state.getValue(BlockMachineMars.TYPE) == EnumMachineType.CRYOGENIC_CHAMBER) + { + if (!event.immediately && event.updateWorld && event.setSpawn) + { + event.result = EntityPlayer.SleepResult.NOT_POSSIBLE_HERE; + } else if (!event.immediately && !event.updateWorld && event.setSpawn) + { + if (!player.world.isRemote) + { + player.heal(5.0F); + GCPlayerStats.get(player).setCryogenicChamberCooldown(6000); + + WorldServer ws = (WorldServer) player.world; + ws.updateAllPlayersSleepingFlag(); + if (ws.areAllPlayersAsleep() && ws.getGameRules().getBoolean("doDaylightCycle")) + { + WorldUtil.setNextMorning(ws); + } + } + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRotate(RenderPlayerGC.RotatePlayerEvent event) + { + BlockPos blockPos = event.getEntityPlayer().bedLocation; + if (blockPos != null) + { + IBlockState state = event.getEntityPlayer().world.getBlockState(blockPos); + if (state.getBlock() == GCBlocks.fakeBlock && state.getValue(BlockMulti.MULTI_TYPE) == BlockMulti.EnumBlockMultiType.CRYO_CHAMBER) + { + TileEntity tile = event.getEntityPlayer().world.getTileEntity(blockPos); + if (tile instanceof TileEntityMulti) + { + state = event.getEntityPlayer().world.getBlockState(((TileEntityMulti) tile).mainBlockPosition); + } + } + + if (state.getBlock() == MarsBlocks.machine && state.getValue(BlockMachineMars.TYPE) == BlockMachineMars.EnumMachineType.CRYOGENIC_CHAMBER) + { + event.shouldRotate = true; + event.vanillaOverride = true; + } + } + } + + private WorldGenerator eggGenerator; + + @SubscribeEvent + public void onPlanetDecorated(GCCoreEventPopulate.Post event) + { + if (this.eggGenerator == null) + { + this.eggGenerator = new WorldGenEggs(MarsBlocks.rock); + } + + if (event.world.provider instanceof WorldProviderMars) + { + int eggsPerChunk = 2; + BlockPos blockpos; + + for (int eggCount = 0; eggCount < eggsPerChunk; ++eggCount) + { + blockpos = event.pos.add(event.rand.nextInt(16) + 8, event.rand.nextInt(104) + 24, event.rand.nextInt(16) + 8); + this.eggGenerator.generate(event.world, event.rand, blockpos); + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void orientCamera(OrientCameraEvent event) + { + EntityPlayer entity = Minecraft.getMinecraft().player; + + if (entity != null) + { + int x = MathHelper.floor(entity.posX); + int y = MathHelper.floor(entity.posY); + int z = MathHelper.floor(entity.posZ); + TileEntity tile = Minecraft.getMinecraft().world.getTileEntity(new BlockPos(x, y - 1, z)); + + if (tile instanceof TileEntityMulti) + { + tile = ((TileEntityMulti) tile).getMainBlockTile(); + } + + if (tile instanceof TileEntityCryogenicChamber) + { + GL11.glRotatef(180, 0.0F, 1.0F, 0.0F); + + switch (tile.getBlockMetadata() & 3) + { + case 0: + GL11.glTranslatef(-0.4F, -0.5F, 4.1F); + break; + case 1: + GL11.glTranslatef(0, -0.5F, 4.1F); + break; + case 2: + GL11.glTranslatef(0, -0.5F, 4.1F); + break; + case 3: + GL11.glTranslatef(0.0F, -0.5F, 4.1F); + break; + } + + GL11.glRotatef(-180, 0.0F, 1.0F, 0.0F); + + GL11.glRotatef(FMLClientHandler.instance().getClientPlayerEntity().sleepTimer - 50, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.3F, 0.0F); + } + } + } + + @SubscribeEvent + public void onLandingPadRemoved(EventLandingPadRemoval event) + { + TileEntity tile = event.world.getTileEntity(event.pos); + + if (tile instanceof IFuelDock) + { + IFuelDock dock = (IFuelDock) tile; + + for (ILandingPadAttachable connectedTile : dock.getConnectedTiles()) + { + if (connectedTile instanceof TileEntityLaunchController) + { + final TileEntityLaunchController launchController = (TileEntityLaunchController) connectedTile; + if (launchController.getEnergyStoredGC() > 0.0F && launchController.launchPadRemovalDisabled && !launchController.getDisabled(0)) + { + event.allow = false; + return; + } + break; + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModule.java new file mode 100644 index 00000000..2d1f50c9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModule.java @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars; + +import java.lang.reflect.Method; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBucketGC; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModule; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockSludge; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.dimension.TeleportTypeMars; +import micdoodle8.mods.galacticraft.planets.mars.dimension.WorldProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityProjectileTNT; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySludgeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemSchematicTier2; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.recipe.RecipeManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.schematic.SchematicCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.schematic.SchematicTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityCryogenicChamber; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityDungeonSpawnerMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntitySlimelingEgg; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTreasureChestMars; +import micdoodle8.mods.galacticraft.planets.mars.world.gen.BiomeMars; +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialLiquid; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.registry.EntityRegistry; +import net.minecraftforge.fml.relauncher.Side; + +public class MarsModule implements IPlanetsModule +{ + + public static Fluid sludge; + public static Fluid sludgeGC; + public static Material sludgeMaterial = new MaterialLiquid(MapColor.FOLIAGE); + + public static Planet planetMars; + + @Override + public void preInit(FMLPreInitializationEvent event) + { + MarsModule.planetMars = (Planet) new Planet("mars").setParentSolarSystem(GalacticraftCore.solarSystemSol).setRingColorRGB(0.67F, 0.1F, 0.1F).setPhaseShift(0.1667F).setRelativeSize(0.5319F) + .setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(1.25F, 1.25F)).setRelativeOrbitTime(1.8811610076670317634173055859803F); + + MinecraftForge.EVENT_BUS.register(new EventHandlerMars()); + + if (!FluidRegistry.isFluidRegistered("bacterialsludge")) + { + ResourceLocation stillIcon = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/sludge_still"); + ResourceLocation flowingIcon = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/sludge_flow"); + sludgeGC = new Fluid("bacterialsludge", stillIcon, flowingIcon).setDensity(800).setViscosity(1500); + FluidRegistry.registerFluid(sludgeGC); + } else + { + GalacticraftPlanets.logger.info("Galacticraft sludge is not default, issues may occur."); + } + + sludge = FluidRegistry.getFluid("bacterialsludge"); + + if (sludge.getBlock() == null) + { + MarsBlocks.blockSludge = new BlockSludge("sludge"); + ((BlockSludge) MarsBlocks.blockSludge).setQuantaPerBlock(3); + MarsBlocks.registerBlock(MarsBlocks.blockSludge, ItemBlockDesc.class); + sludge.setBlock(MarsBlocks.blockSludge); + } else + { + MarsBlocks.blockSludge = sludge.getBlock(); + } + + if (MarsBlocks.blockSludge != null) + { + FluidRegistry.addBucketForFluid(sludge); // Create a Universal + // Bucket AS WELL AS our + // type, this is needed to + // pull fluids out of other + // mods tanks + MarsItems.bucketSludge = new ItemBucketGC(MarsBlocks.blockSludge, sludge).setTranslationKey("bucket_sludge"); + MarsItems.registerItem(MarsItems.bucketSludge); + EventHandlerGC.bucketList.put(MarsBlocks.blockSludge, MarsItems.bucketSludge); + } + + MarsBlocks.initBlocks(); + MarsItems.initItems(); + + MarsModule.planetMars.setBiomeInfo(BiomeMars.marsFlat); + } + + @Override + public void init(FMLInitializationEvent event) + { + MarsBlocks.oreDictRegistration(); + this.registerMicroBlocks(); + SchematicRegistry.registerSchematicRecipe(new SchematicTier2Rocket()); + SchematicRegistry.registerSchematicRecipe(new SchematicCargoRocket()); + + GalacticraftCore.packetPipeline.addDiscriminator(6, PacketSimpleMars.class); + + this.registerTileEntities(); + this.registerCreatures(); + this.registerOtherEntities(); + + MarsModule.planetMars.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/mars.png")); + MarsModule.planetMars.setDimensionInfo(ConfigManagerMars.dimensionIDMars, WorldProviderMars.class).setTierRequired(2); + MarsModule.planetMars.setAtmosphere(new AtmosphereInfo(false, false, false, -1.0F, 0.3F, 0.1F)); + MarsModule.planetMars.atmosphereComponent(EnumAtmosphericGas.CO2).atmosphereComponent(EnumAtmosphericGas.ARGON).atmosphereComponent(EnumAtmosphericGas.NITROGEN); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedZombie.class, 8, 2, 3)); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedSpider.class, 8, 2, 3)); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedSkeleton.class, 8, 2, 3)); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedCreeper.class, 8, 2, 3)); + MarsModule.planetMars.addMobInfo(new Biome.SpawnListEntry(EntityEvolvedEnderman.class, 10, 1, 4)); + MarsModule.planetMars.addChecklistKeys("equip_oxygen_suit", "thermal_padding"); + + GalaxyRegistry.register(MarsModule.planetMars); + GalacticraftRegistry.registerTeleportType(WorldProviderMars.class, new TeleportTypeMars()); + GalacticraftRegistry.registerRocketGui(WorldProviderMars.class, new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/mars_rocket_gui.png")); + GalacticraftRegistry.addDungeonLoot(2, new ItemStack(MarsItems.schematic, 1, 0)); + GalacticraftRegistry.addDungeonLoot(2, new ItemStack(MarsItems.schematic, 1, 1)); + GalacticraftRegistry.addDungeonLoot(2, new ItemStack(MarsItems.schematic, 1, 2)); + + GalacticraftCore.proxy.registerFluidTexture(MarsModule.sludge, new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/misc/underbecterial.png")); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + RecipeManagerMars.loadCompatibilityRecipes(); + GCPlanetDimensions.MARS = WorldUtil.getDimensionTypeById(ConfigManagerMars.dimensionIDMars); + ItemSchematicTier2.registerSchematicItems(); + } + + @Override + public void serverStarting(FMLServerStartingEvent event) + { + } + + @Override + public void serverInit(FMLServerStartedEvent event) + { + + } + + private void registerMicroBlocks() + { + try + { + Class clazz = Class.forName("codechicken.microblock.MicroMaterialRegistry"); + if (clazz != null) + { + Method registerMethod = null; + Method[] methodz = clazz.getMethods(); + for (Method m : methodz) + { + if (m.getName().equals("registerMaterial")) + { + registerMethod = m; + break; + } + } + Class clazzbm = Class.forName("codechicken.microblock.BlockMicroMaterial"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 4), "tile.mars.marscobblestone"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 5), "tile.mars.marsgrass"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 6), "tile.mars.marsdirt"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 7), "tile.mars.marsdungeon"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 8), "tile.mars.marsdeco"); + registerMethod.invoke(null, clazzbm.getConstructor(Block.class, int.class).newInstance(MarsBlocks.marsBlock, 9), "tile.mars.marsstone"); + } + } catch (Exception e) + { + } + } + + public void registerTileEntities() + { + register(TileEntitySlimelingEgg.class, "gc_slimeling_egg"); + register(TileEntityTreasureChestMars.class, "gc_tier_2_treasure_chest"); + register(TileEntityTerraformer.class, "gc_planet_terraformer"); + register(TileEntityCryogenicChamber.class, "gc_cryogenic_chamber"); + register(TileEntityGasLiquefier.class, "gc_gas_liquefier"); + register(TileEntityMethaneSynthesizer.class, "gc_methane_synthesizer"); + register(TileEntityElectrolyzer.class, "gc_water_electrolyzer"); + register(TileEntityDungeonSpawnerMars.class, "gc_mars_dungeon_spawner"); + register(TileEntityLaunchController.class, "gc_launch_controller"); + } + + public void registerCreatures() + { + this.registerGalacticraftCreature(EntitySludgeling.class, "sludgeling", ColorUtil.to32BitColor(255, 0, 50, 0), ColorUtil.to32BitColor(255, 0, 150, 0)); + this.registerGalacticraftCreature(EntitySlimeling.class, "slimeling", ColorUtil.to32BitColor(255, 0, 50, 0), ColorUtil.to32BitColor(255, 0, 150, 0)); + this.registerGalacticraftCreature(EntityCreeperBoss.class, "creeper_boss", ColorUtil.to32BitColor(255, 0, 50, 0), ColorUtil.to32BitColor(255, 0, 150, 0)); + } + + public void registerOtherEntities() + { + MarsModule.registerGalacticraftNonMobEntity(EntityTier2Rocket.class, "rocket_t2", 150, 1, false); + MarsModule.registerGalacticraftNonMobEntity(EntityProjectileTNT.class, "projectile_tnt", 150, 1, true); + MarsModule.registerGalacticraftNonMobEntity(EntityLandingBalloons.class, "landing_balloons", 150, 5, true); + MarsModule.registerGalacticraftNonMobEntity(EntityCargoRocket.class, "rocket_cargo", 150, 1, false); + } + + public void registerGalacticraftCreature(Class clazz, String name, int back, int fore) + { + MarsModule.registerGalacticraftNonMobEntity(clazz, name, 80, 3, true); + int nextEggID = GCCoreUtil.getNextValidID(); + if (nextEggID < 65536) + { + ResourceLocation resourcelocation = new ResourceLocation(Constants.MOD_ID_PLANETS, name); + // name = Constants.MOD_ID_PLANETS + "." + name; + // net.minecraftforge.fml.common.registry.EntityEntry entry = new net.minecraftforge.fml.common.registry.EntityEntry(clazz, name); + // net.minecraftforge.fml.common.registry.GameData.getEntityRegistry().register(nextEggID, resourcelocation, entry); + EntityList.ENTITY_EGGS.put(resourcelocation, new EntityList.EntityEggInfo(resourcelocation, back, fore)); + } + } + + public static void registerGalacticraftNonMobEntity(Class var0, String var1, int trackingDistance, int updateFreq, boolean sendVel) + { + ResourceLocation registryName = new ResourceLocation(Constants.MOD_ID_PLANETS, var1); + EntityRegistry.registerModEntity(registryName, var0, var1, GCCoreUtil.nextInternalID(), GalacticraftPlanets.instance, trackingDistance, updateFreq, sendVel); + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_MARS); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (side == Side.SERVER) + { + BlockPos pos = new BlockPos(x, y, z); + TileEntity tile = world.getTileEntity(pos); + + if (ID == GuiIdsPlanets.MACHINE_MARS) + { + if (tile instanceof TileEntityTerraformer) + { + return new ContainerTerraformer(player.inventory, (TileEntityTerraformer) tile, player); + } + if (tile instanceof TileEntityLaunchController) + { + return new ContainerLaunchController(player.inventory, (TileEntityLaunchController) tile, player); + } else if (tile instanceof TileEntityElectrolyzer) + { + return new ContainerElectrolyzer(player.inventory, (TileEntityElectrolyzer) tile, player); + } else if (tile instanceof TileEntityGasLiquefier) + { + return new ContainerGasLiquefier(player.inventory, (TileEntityGasLiquefier) tile, player); + } else if (tile instanceof TileEntityMethaneSynthesizer) + { + return new ContainerMethaneSynthesizer(player.inventory, (TileEntityMethaneSynthesizer) tile, player); + } + } + } + + return null; + } + + @Override + public Configuration getConfiguration() + { + return ConfigManagerMars.config; + } + + @Override + public void syncConfig() + { + ConfigManagerMars.syncConfig(false, false); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModuleClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModuleClient.java new file mode 100644 index 00000000..ac784067 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/MarsModuleClient.java @@ -0,0 +1,360 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.client.IItemMeshDefinitionCustom; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModuleClient; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockBasicMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockCavernousVine; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.client.SkyProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.client.fx.ParticleDrip; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSlimelingFeed; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiWaterElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderCreeperBoss; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderLandingBalloons; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderProjectileTNT; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderSludgeling; +import micdoodle8.mods.galacticraft.planets.mars.client.render.entity.RenderTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.client.render.item.ItemModelRocketT2; +import micdoodle8.mods.galacticraft.planets.mars.client.render.tile.TileEntityTreasureChestRenderer; +import micdoodle8.mods.galacticraft.planets.mars.dimension.WorldProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityProjectileTNT; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySludgeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemSchematicTier2; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTreasureChestMars; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.model.IModelState; +import net.minecraftforge.common.model.TRSRTransformation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class MarsModuleClient implements IPlanetsModuleClient +{ + + private static ModelResourceLocation sludgeLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "sludge", "fluid"); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + MinecraftForge.EVENT_BUS.register(this); + + RenderingRegistry.registerEntityRenderingHandler(EntitySludgeling.class, (RenderManager manager) -> new RenderSludgeling(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntitySlimeling.class, (RenderManager manager) -> new RenderSlimeling(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityCreeperBoss.class, (RenderManager manager) -> new RenderCreeperBoss(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityProjectileTNT.class, (RenderManager manager) -> new RenderProjectileTNT(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityCargoRocket.class, (RenderManager manager) -> new RenderCargoRocket(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityLandingBalloons.class, (RenderManager manager) -> new RenderLandingBalloons(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityTier2Rocket.class, (RenderManager manager) -> new RenderTier2Rocket(manager)); + } + + private void addPlanetVariants(String name, String... variants) + { + Item itemBlockVariants = Item.REGISTRY.getObject(new ResourceLocation(Constants.MOD_ID_PLANETS, name)); + ResourceLocation[] variants0 = new ResourceLocation[variants.length]; + for (int i = 0; i < variants.length; ++i) + { + variants0[i] = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + variants[i]); + } + ModelBakery.registerItemVariants(itemBlockVariants, variants0); + } + + @Override + public void registerVariants() + { + addPlanetVariants("mars", "ore_copper_mars", "ore_tin_mars", "ore_desh_mars", "ore_iron_mars", "cobblestone", "mars_surface", "mars_middle", "dungeon_brick", "desh_block", "mars_stone"); + addPlanetVariants("cavern_vines", "vine_0", "vine_1", "vine_2"); + addPlanetVariants("item_basic_mars", "raw_desh", "desh_stick", "ingot_desh", "reinforced_plate_t2", "slimeling_cargo", "compressed_desh", "fluid_manip"); + addPlanetVariants("schematic", "schematic_rocket_t3", "schematic_rocket_cargo", "schematic_astro_miner"); + addPlanetVariants("slimeling_egg", "slimeling_egg_red", "slimeling_egg_blue", "slimeling_egg_yellow"); + addPlanetVariants("mars_machine", "terraformer", "cryogenic_chamber", "launch_controller"); + addPlanetVariants("mars_machine_t2", "gas_liquefier", "methane_synthesizer", "electrolyzer"); + + Item sludge = Item.getItemFromBlock(MarsBlocks.blockSludge); + ModelBakery.registerItemVariants(sludge, new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "sludge")); + ModelLoader.setCustomMeshDefinition(sludge, IItemMeshDefinitionCustom.create((ItemStack stack) -> sludgeLocation)); + ModelLoader.setCustomStateMapper(MarsBlocks.blockSludge, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return sludgeLocation; + } + }); + + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "rocket_t2", "inventory"); + for (int i = 0; i < 5; ++i) + { + ModelLoader.setCustomModelResourceLocation(MarsItems.rocketMars, i, modelResourceLocation); + } + + modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "rocket_cargo", "inventory"); + for (int i = 11; i < 15; ++i) + { + ModelLoader.setCustomModelResourceLocation(MarsItems.rocketMars, i, modelResourceLocation); + } + } + + @Override + public void init(FMLInitializationEvent event) + { + MinecraftForge.EVENT_BUS.register(new TickHandlerClient()); + MarsModuleClient.registerBlockRenderers(); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void loadTextures(TextureStitchEvent.Pre event) + { + registerTexture(event, "rocket_t2"); + registerTexture(event, "cargo_rocket"); + registerTexture(event, "landing_balloon"); + } + + private void registerTexture(TextureStitchEvent.Pre event, String texture) + { + event.getMap().registerSprite(new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/" + texture)); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onModelBakeEvent(ModelBakeEvent event) + { + replaceModelDefault(event, "rocket_t2", "rocket_t2.obj", ImmutableList.of("Rocket"), ItemModelRocketT2.class, TRSRTransformation.identity()); + replaceModelDefault(event, "rocket_cargo", "cargo_rocket.obj", ImmutableList.of("Rocket"), ItemModelCargoRocket.class, TRSRTransformation.identity()); + } + + private void replaceModelDefault(ModelBakeEvent event, String resLoc, String objLoc, List visibleGroups, Class clazz, IModelState parentState, String... variants) + { + ClientUtil.replaceModel(GalacticraftPlanets.ASSET_PREFIX, event, resLoc, objLoc, visibleGroups, clazz, parentState, variants); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { +// IModelCustom chamberModel = AdvancedModelLoader.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "models/chamber.obj")); +// IModelCustom cargoRocketModel = AdvancedModelLoader.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "models/cargoRocket.obj")); +// +// // Tile Entity Renderers + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTreasureChestMars.class, new TileEntityTreasureChestRenderer()); +// ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCryogenicChamber.class, new TileEntityCryogenicChamberRenderer(chamberModel)); +// ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTerraformer.class, new TileEntityBubbleProviderRenderer<>(0.25F, 1.0F, 0.25F)); +// +// // Entities + + // Add Armor Renderer Prefix +// RenderingRegistry.addNewArmourRendererPrefix("desh"); + + ItemSchematicTier2.registerTextures(); + } + + public static void registerBlockRenderers() + { + for (BlockBasicMars.EnumBlockBasic blockBasic : BlockBasicMars.EnumBlockBasic.values()) + { + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.marsBlock, blockBasic.getMeta(), blockBasic.getName()); + } + + for (BlockCavernousVine.EnumVineType vineType : BlockCavernousVine.EnumVineType.values()) + { + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.vine, vineType.getMeta(), vineType.getName()); + } + + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.rock, 0, "slimeling_egg_red"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.rock, 1, "slimeling_egg_blue"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.rock, 2, "slimeling_egg_yellow"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.creeperEgg); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machine, 0, "terraformer"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machine, 4, "cryogenic_chamber"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machine, 8, "launch_controller"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machineT2, 0, "gas_liquefier"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machineT2, 4, "methane_synthesizer"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.machineT2, 8, "electrolyzer"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.treasureChestTier2); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.marsBricksStairs); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.marsCobblestoneStairs); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsBlocks.bossSpawner); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 0, "raw_desh"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 1, "desh_stick"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 2, "ingot_desh"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 3, "reinforced_plate_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 4, "slimeling_cargo"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 5, "compressed_desh"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.marsItemBasic, 6, "fluid_manip"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.key, 0, "key"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.schematic, 0, "schematic_rocket_t3"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.schematic, 1, "schematic_rocket_cargo"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, MarsItems.schematic, 2, "schematic_astro_miner"); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (side == Side.CLIENT) + { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + + if (ID == GuiIdsPlanets.MACHINE_MARS) + { + if (tile instanceof TileEntityTerraformer) + { + return new GuiTerraformer(player.inventory, (TileEntityTerraformer) tile); + } else if (tile instanceof TileEntityLaunchController) + { + return new GuiLaunchController(player.inventory, (TileEntityLaunchController) tile); + } else if (tile instanceof TileEntityElectrolyzer) + { + return new GuiWaterElectrolyzer(player.inventory, (TileEntityElectrolyzer) tile); + } else if (tile instanceof TileEntityGasLiquefier) + { + return new GuiGasLiquefier(player.inventory, (TileEntityGasLiquefier) tile); + } else if (tile instanceof TileEntityMethaneSynthesizer) + { + return new GuiMethaneSynthesizer(player.inventory, (TileEntityMethaneSynthesizer) tile); + } + } + } + + return null; + } + + @Override + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData) + { + Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + final double dPosX = mc.getRenderViewEntity().posX - position.x; + final double dPosY = mc.getRenderViewEntity().posY - position.y; + final double dPosZ = mc.getRenderViewEntity().posZ - position.z; + Particle particle = null; + final double maxDistSqrd = 64.0D; + + if (dPosX * dPosX + dPosY * dPosY + dPosZ * dPosZ < maxDistSqrd * maxDistSqrd) + { + if (particleID.equals("sludgeDrip")) + { +// particle = new EntityDropParticleFX(mc.world, position.x, position.y, position.z, Material.WATER); TODO + } else if (particleID.equals("bacterialDrip")) + { + particle = new ParticleDrip(mc.world, position.x, position.y, position.z); + } + } + + if (particle != null) + { + mc.effectRenderer.addEffect(particle); + } + } + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_MARS); + } + + public static void openSlimelingGui(EntitySlimeling slimeling, int gui) + { + switch (gui) + { + case 0: + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiSlimeling(slimeling)); + break; + case 1: + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiSlimelingFeed(slimeling)); + break; + } + } + + public static class TickHandlerClient + { + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTick(ClientTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + + final WorldClient world = minecraft.world; + + if (world != null) + { + if (world.provider instanceof WorldProviderMars) + { + if (world.provider.getSkyRenderer() == null) + { + world.provider.setSkyRenderer(new SkyProviderMars((IGalacticraftWorldProvider) world.provider)); + } + + if (world.provider.getCloudRenderer() == null) + { + world.provider.setCloudRenderer(new CloudRenderer()); + } + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBasicMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBasicMars.java new file mode 100644 index 00000000..6bc93fe9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBasicMars.java @@ -0,0 +1,324 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import com.google.common.base.Predicate; +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.block.IPlantableBlock; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.Random; + +public class BlockBasicMars extends Block implements IDetectableResource, IPlantableBlock, ITerraformableBlock, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE = PropertyEnum.create("basictypemars", EnumBlockBasic.class); + + public enum EnumBlockBasic implements IStringSerializable + { + + ORE_COPPER(0, "ore_copper_mars"), + ORE_TIN(1, "ore_tin_mars"), + ORE_DESH(2, "ore_desh_mars"), + ORE_IRON(3, "ore_iron_mars"), + COBBLESTONE(4, "cobblestone"), + SURFACE(5, "mars_surface"), + MIDDLE(6, "mars_middle"), + DUNGEON_BRICK(7, "dungeon_brick"), + DESH_BLOCK(8, "desh_block"), + MARS_STONE(9, "mars_stone"); + + private final int meta; + private final String name; + + private EnumBlockBasic(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockBasic[] values = values(); + + public static EnumBlockBasic byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockBasicMars(String assetName) + { + super(Material.ROCK); + this.setTranslationKey(assetName); + } + + @Override + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.DUNGEON_BRICK) + { + return MapColor.GREEN; + } else if (state.getValue(BASIC_TYPE) == EnumBlockBasic.SURFACE) + { + return MapColor.DIRT; + } + + return MapColor.RED; + } + + @Override + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) + { + EnumBlockBasic type = world.getBlockState(pos).getValue(BASIC_TYPE); + + if (type == EnumBlockBasic.DUNGEON_BRICK) + { + return 40.0F; + } else if (type == EnumBlockBasic.DESH_BLOCK) + { + return 60.0F; + } + + return super.getExplosionResistance(world, pos, exploder, explosion); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + if (blockState.getValue(BASIC_TYPE) == EnumBlockBasic.DUNGEON_BRICK) + { + return 4.0F; + } + + return this.blockHardness; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_DESH) + { + return MarsItems.marsItemBasic; + } + + return Item.getItemFromBlock(this); + } + + @Override + public int damageDropped(IBlockState state) + { + int meta = state.getBlock().getMetaFromState(state); + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.MARS_STONE) + { + return 4; + } else if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_DESH) + { + return 0; + } else + { + return meta; + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + if (state.getValue(BASIC_TYPE) == EnumBlockBasic.ORE_DESH && fortune >= 1) + { + return (random.nextFloat() < fortune * 0.29F - 0.25F) ? 2 : 1; + } + + return 1; + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (EnumBlockBasic blockBasic : EnumBlockBasic.values()) + { + list.add(new ItemStack(this, 1, blockBasic.getMeta())); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + switch (this.getMetaFromState(state)) + { + case 0: + case 1: + case 2: + case 3: + return true; + default: + return false; + } + } + + @Override + public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) + { + return false; + } + + @Override + public int requiredLiquidBlocksNearby() + { + return 4; + } + + @Override + public boolean isPlantable(IBlockState state) + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState state, World worldIn, BlockPos pos, Random rand) + { + if (rand.nextInt(10) == 0) + { + if (state.getBlock() == this && state.getValue(BASIC_TYPE) == EnumBlockBasic.DUNGEON_BRICK) + { + GalacticraftPlanets.spawnParticle("sludgeDrip", new Vector3(pos.getX() + rand.nextDouble(), pos.getY(), pos.getZ() + rand.nextDouble()), new Vector3(0, 0, 0)); + + if (rand.nextInt(100) == 0) + { + worldIn.playSound(null, pos.getX(), pos.getY(), pos.getZ(), GCSounds.singleDrip, SoundCategory.AMBIENT, 1, 0.8F + rand.nextFloat() / 5.0F); + } + } + } + } + + @Override + public boolean isTerraformable(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + IBlockState stateAbove = world.getBlockState(pos.up()); + return state.getValue(BASIC_TYPE) == EnumBlockBasic.SURFACE && !stateAbove.getBlock().isFullCube(stateAbove); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state)); + } + + @Override + public boolean isReplaceableOreGen(IBlockState state, IBlockAccess world, BlockPos pos, Predicate target) + { + return (state.getValue(BASIC_TYPE) == EnumBlockBasic.MIDDLE || state.getValue(BASIC_TYPE) == EnumBlockBasic.MARS_STONE); + } + + @Override + public boolean hasTileEntity(IBlockState state) + { + return state.getBlock().getMetaFromState(state) == 10; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE, EnumBlockBasic.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasic) state.getValue(BASIC_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + switch (meta) + { + case 0: + case 1: + case 2: + case 3: + return EnumSortCategoryBlock.ORE; + case 7: + return EnumSortCategoryBlock.BRICKS; + case 8: + return EnumSortCategoryBlock.INGOT_BLOCK; + } + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + if (state.getBlock() != this) + return 0; + + int meta = this.getMetaFromState(state); + if (meta == 2) + { + Random rand = world instanceof World ? ((World) world).rand : new Random(); + return MathHelper.getInt(rand, 2, 5); + } + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBossSpawnerMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBossSpawnerMars.java new file mode 100644 index 00000000..cc453e15 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockBossSpawnerMars.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.core.blocks.BlockBossSpawner; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityDungeonSpawnerMars; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockBossSpawnerMars extends BlockBossSpawner +{ + + public BlockBossSpawnerMars(String assetName) + { + super(assetName); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityDungeonSpawnerMars(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCavernousVine.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCavernousVine.java new file mode 100644 index 00000000..32997fbf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCavernousVine.java @@ -0,0 +1,327 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IShearable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCavernousVine extends Block implements IShearable, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum VINE_TYPE = PropertyEnum.create("vinetype", EnumVineType.class); + + public enum EnumVineType implements IStringSerializable + { + + VINE_0(0, "vine_0"), VINE_1(1, "vine_1"), VINE_2(2, "vine_2"); + + private final int meta; + private final String name; + + private EnumVineType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumVineType[] values = values(); + + public static EnumVineType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockCavernousVine(String assetName) + { + super(Material.VINE); + this.setLightLevel(1.0F); + this.setTickRandomly(true); + this.setSoundType(SoundType.PLANT); + this.setTranslationKey(assetName); + } + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + if (world.setBlockToAir(pos)) + { + int y2 = pos.getY() - 1; + while (world.getBlockState(new BlockPos(pos.getX(), y2, pos.getZ())).getBlock() == this) + { + world.setBlockToAir(new BlockPos(pos.getX(), y2, pos.getZ())); + y2--; + } + + return true; + } + + return false; + } + + public boolean canBlockStay(World worldIn, BlockPos pos) + { + IBlockState stateAbove = worldIn.getBlockState(pos.up()); + return (stateAbove.getBlock() == this || stateAbove.getMaterial().isSolid()); + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + + if (!this.canBlockStay(worldIn, pos)) + { + worldIn.setBlockToAir(pos); + } + } + + @Override + public void onEntityCollision(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (entityIn instanceof EntityLivingBase) + { + if (entityIn instanceof EntityPlayer && ((EntityPlayer) entityIn).capabilities.isFlying) + { + return; + } + + entityIn.motionY = 0.06F; + entityIn.rotationYaw += 0.4F; + + ((EntityLivingBase) entityIn).addPotionEffect(new PotionEffect(MobEffects.POISON, 5, 20, false, true)); + } + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + return this.getVineLight(world, pos); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return null; + } + + @Override + public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing facing) + { + return facing == EnumFacing.DOWN && world.getBlockState(pos.up()).getBlockFaceShape(world, pos.up(), facing) == BlockFaceShape.SOLID; + } + + public int getVineLength(IBlockAccess world, BlockPos pos) + { + int vineCount = 0; + int y2 = pos.getY(); + + while (world.getBlockState(new BlockPos(pos.getX(), y2, pos.getZ())).getBlock() == MarsBlocks.vine) + { + vineCount++; + y2++; + } + + return vineCount; + } + + public int getVineLight(IBlockAccess world, BlockPos pos) + { + int vineCount = 0; + int y2 = pos.getY(); + + while (world.getBlockState(new BlockPos(pos.getX(), y2, pos.getZ())).getBlock() == MarsBlocks.vine) + { + vineCount += 4; + y2--; + } + + return Math.max(19 - vineCount, 0); + } + + @Override + public int tickRate(World par1World) + { + return 50; + } + + @Override + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + for (int y2 = pos.getY() - 1; y2 >= pos.getY() - 2; y2--) + { + BlockPos pos1 = new BlockPos(pos.getX(), y2, pos.getZ()); + Block blockID = worldIn.getBlockState(pos1).getBlock(); + + if (!blockID.isAir(worldIn.getBlockState(pos1), worldIn, pos1)) + { + return; + } + } + + worldIn.setBlockState(pos.down(), this.getStateFromMeta(this.getVineLength(worldIn, pos) % 3), 2); + worldIn.checkLight(pos); + } + + } + +// @Override +// public void onBlockAdded(World world, int x, int y, int z) +// { +// if (!world.isRemote) +// { +// // world.scheduleBlockUpdate(x, y, z, this, +// // this.tickRate(world) + world.rand.nextInt(10)); +// } +// } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public int quantityDropped(Random par1Random) + { + return 0; + } + + @Override + public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this, 1, 0)); + return ret; + } + + @Override + public boolean isLadder(IBlockState state, IBlockAccess world, BlockPos pos, EntityLivingBase entity) + { + return true; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VINE_TYPE, EnumVineType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumVineType) state.getValue(VINE_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, VINE_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCreeperEgg.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCreeperEgg.java new file mode 100644 index 00000000..308a1a88 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockCreeperEgg.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.block.BlockDragonEgg; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCreeperEgg extends BlockDragonEgg implements IShiftDescription, ISortableBlock +{ + + protected static final AxisAlignedBB DRAGON_EGG_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 1.0D, 0.9375D); + + public BlockCreeperEgg(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return DRAGON_EGG_AABB; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + return false; + } + + @Override + public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + + } + + @Override + @SideOnly(Side.CLIENT) + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return ItemStack.EMPTY; + } + + @Override + public void onBlockExploded(World world, BlockPos pos, Explosion explosion) + { + if (!world.isRemote) + { + EntityEvolvedCreeper creeper = new EntityEvolvedCreeper(world); + creeper.setPosition(pos.getX() + 0.5, pos.getY() + 3, pos.getZ() + 0.5); + creeper.setChild(true); + world.spawnEntity(creeper); + } + + world.setBlockToAir(pos); + this.onExplosionDestroy(world, pos, explosion); + } + + @Override + public boolean canDropFromExplosion(Explosion explose) + { + return false; + } + + // Can only be harvested with a Sticky Desh Pickaxe + @Override + public boolean canHarvestBlock(IBlockAccess world, BlockPos pos, EntityPlayer player) + { + ItemStack stack = player.inventory.getCurrentItem(); + if (stack.isEmpty()) + { + return player.canHarvestBlock(world.getBlockState(pos)); + } + return stack.getItem() == MarsItems.deshPickSlime; + } + + @SuppressWarnings("deprecation") + @Override + public float getPlayerRelativeBlockHardness(IBlockState state, EntityPlayer player, World worldIn, BlockPos pos) + { + ItemStack stack = player.inventory.getCurrentItem(); + if (stack != null && stack.getItem() == MarsItems.deshPickSlime) + { + return 0.2F; + } + + return super.getPlayerRelativeBlockHardness(state, player, worldIn, pos); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.EGG; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMars.java new file mode 100644 index 00000000..95e75e24 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMars.java @@ -0,0 +1,371 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.core.world.IChunkLoader; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityCryogenicChamber; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.ForgeChunkManager.Type; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.Random; + +public class BlockMachineMars extends BlockTileGC implements IShiftDescription, ISortableBlock, IPartialSealableBlock +{ + + public static final int TERRAFORMER_METADATA = 0; + public static final int CRYOGENIC_CHAMBER_METADATA = 4; + public static final int LAUNCH_CONTROLLER_METADATA = 8; + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineType.class); + + public enum EnumMachineType implements IStringSerializable + { + + TERRAFORMER(0, "terraformer"), CRYOGENIC_CHAMBER(1, "cryogenic_chamber"), LAUNCH_CONTROLLER(2, "launch_controller"); + + private final int meta; + private final String name; + + EnumMachineType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + public static EnumMachineType byMetadata(int meta) + { + return values()[meta % 3]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockMachineMars(String assetName) + { + super(GCBlocks.machine); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity var9 = worldIn.getTileEntity(pos); + + if (var9 instanceof IMultiBlock) + { + ((IMultiBlock) var9).onDestroy(var9); + } + + super.breakBlock(worldIn, pos, state); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int metadata = getMetaFromState(state); + + final int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + + worldIn.setBlockState(pos, getStateFromMeta((metadata & 12) + change), 3); + + switch (metadata & 12) + { + + case BlockMachineMars.CRYOGENIC_CHAMBER_METADATA: + BlockMulti.onPlacement(worldIn, pos, placer, this); + break; + + case BlockMachineMars.LAUNCH_CONTROLLER_METADATA: + WorldUtil.markAdjacentPadForUpdate(worldIn, pos); + TileEntity var8 = worldIn.getTileEntity(pos); + if (var8 instanceof IChunkLoader && !worldIn.isRemote && ConfigManagerMars.launchControllerChunkLoad && placer instanceof EntityPlayer) + { + ((IChunkLoader) var8).setOwnerName(placer.getName()); + ((IChunkLoader) var8).onTicketLoaded(ForgeChunkManager.requestTicket(GalacticraftCore.instance, var8.getWorld(), Type.NORMAL), true); + } else if (var8 instanceof TileEntityLaunchController && placer instanceof EntityPlayer) + { + ((TileEntityLaunchController) var8).setOwnerName(placer.getName()); + } + break; + } + } + + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + EnumMachineType type = state.getValue(TYPE); + if (type == EnumMachineType.LAUNCH_CONTROLLER) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_MARS, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } else if (type == EnumMachineType.CRYOGENIC_CHAMBER) + { + ((IMultiBlock) worldIn.getTileEntity(pos)).onActivated(playerIn); + return true; + } else + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_MARS, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + EnumMachineType type = state.getValue(TYPE); + return type == EnumMachineType.CRYOGENIC_CHAMBER ? BlockFaceShape.UNDEFINED : BlockFaceShape.SOLID; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + EnumMachineType type = state.getValue(TYPE); + if (type == EnumMachineType.LAUNCH_CONTROLLER) + { + return new TileEntityLaunchController(); + } + if (type == EnumMachineType.CRYOGENIC_CHAMBER) + { + return new TileEntityCryogenicChamber(); + } else + { + return new TileEntityTerraformer(); + } + } + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + if (getMetaFromState(state) >= BlockMachineMars.LAUNCH_CONTROLLER_METADATA) + { + WorldUtil.markAdjacentPadForUpdate(world, pos); + } + + return super.removedByPlayer(state, world, pos, player, willHarvest); + } + + public ItemStack getTerraformer() + { + return new ItemStack(this, 1, BlockMachineMars.TERRAFORMER_METADATA); + } + + public ItemStack getChamber() + { + return new ItemStack(this, 1, BlockMachineMars.CRYOGENIC_CHAMBER_METADATA); + } + + public ItemStack getLaunchController() + { + return new ItemStack(this, 1, BlockMachineMars.LAUNCH_CONTROLLER_METADATA); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(this.getTerraformer()); + list.add(this.getChamber()); + list.add(this.getLaunchController()); + } + + @Override + public int damageDropped(IBlockState state) + { + EnumMachineType type = state.getValue(TYPE); + if (type == EnumMachineType.LAUNCH_CONTROLLER) + { + return BlockMachineMars.LAUNCH_CONTROLLER_METADATA; + } else if (type == EnumMachineType.CRYOGENIC_CHAMBER) + { + return BlockMachineMars.CRYOGENIC_CHAMBER_METADATA; + } else + { + return BlockMachineMars.TERRAFORMER_METADATA; + } + } + + @Override + public boolean isBed(IBlockState state, IBlockAccess world, BlockPos pos, Entity player) + { + return state.getValue(TYPE) == EnumMachineType.CRYOGENIC_CHAMBER; + } + + @Override + public BlockPos getBedSpawnPosition(IBlockState state, IBlockAccess world, BlockPos pos, EntityPlayer player) + { + return pos.up(); + } + + @Override + public void setBedOccupied(IBlockAccess world, BlockPos pos, EntityPlayer player, boolean occupied) + { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntityCryogenicChamber) + { + ((TileEntityCryogenicChamber) tile).isOccupied = occupied; + } + } + + @Override + public EnumFacing getBedDirection(IBlockState state, IBlockAccess world, BlockPos pos) + { + return state.getValue(FACING); + } + + @Override + public String getShiftDescription(int meta) + { + switch (meta) + { + case CRYOGENIC_CHAMBER_METADATA: + return GCCoreUtil.translate("tile.cryo_chamber.description"); + case LAUNCH_CONTROLLER_METADATA: + return GCCoreUtil.translate("tile.launch_controller.description"); + case TERRAFORMER_METADATA: + return GCCoreUtil.translate("tile.terraformer.description"); + } + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @SideOnly(Side.CLIENT) + @Override + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineType type = EnumMachineType.byMetadata((int) Math.floor(meta / 4.0)); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + state.getValue(TYPE).getMeta() * 4; + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState state, World worldIn, BlockPos pos, Random rand) + { + if (state.getValue(TYPE) == EnumMachineType.CRYOGENIC_CHAMBER) + { + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY(), pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, 0.05 + rand.nextDouble() * 0.01, 0.0)); + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY(), pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, 0.05 + rand.nextDouble() * 0.01, 0.0)); + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY(), pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, 0.05 + rand.nextDouble() * 0.01, 0.0)); + + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY() + 2.9F, pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, -0.05 - rand.nextDouble() * 0.01, 0.0)); + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY() + 2.9F, pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, -0.05 - rand.nextDouble() * 0.01, 0.0)); + GalacticraftPlanets.spawnParticle("cryoFreeze", new Vector3(pos.getX() + 0.3 + rand.nextDouble() * 0.4, pos.getY() + 2.9F, pos.getZ() + 0.3 + rand.nextDouble() * 0.4), + new Vector3(0.0, -0.05 - rand.nextDouble() * 0.01, 0.0)); + } + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public boolean isSealed(World world, BlockPos pos, EnumFacing direction) + { + return world.getBlockState(pos).getValue(TYPE) != EnumMachineType.CRYOGENIC_CHAMBER; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMarsT2.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMarsT2.java new file mode 100644 index 00000000..f9ed5873 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockMachineMarsT2.java @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockMachineMarsT2 extends BlockMachineBase +{ + + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumMachineType.class); + + public enum EnumMachineType implements EnumMachineBase, IStringSerializable + { + + GAS_LIQUEFIER(0, "gas_liquefier", TileEntityGasLiquefier::new, "tile.gas_liquefier.description", "tile.mars_machine.4"), + METHANE_SYNTHESIZER(4, "methane_synthesizer", TileEntityMethaneSynthesizer::new, "tile.methane_synthesizer.description", "tile.mars_machine.5"), + ELECTROLYZER(8, "electrolyzer", TileEntityElectrolyzer::new, "tile.electrolyzer.description", "tile.mars_machine.6"); + + private final int meta; + private final String name; + private final TileConstructor tile; + private final String shiftDescriptionKey; + private final String blockName; + + EnumMachineType(int meta, String name, TileConstructor tile, String key, String blockName) + { + this.meta = meta; + this.name = name; + this.tile = tile; + this.shiftDescriptionKey = key; + this.blockName = blockName; + } + + @Override + public int getMetadata() + { + return this.meta; + } + + private final static EnumMachineType[] values = values(); + + @Override + public EnumMachineType fromMetadata(int meta) + { + return values[(meta / 4) % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + @Override + public TileEntity tileConstructor() + { + return this.tile.create(); + } + + @FunctionalInterface + private static interface TileConstructor + { + + TileEntity create(); + } + + @Override + public String getShiftDescriptionKey() + { + return this.shiftDescriptionKey; + } + + @Override + public String getTranslationKey() + { + return this.blockName; + } + } + + public BlockMachineMarsT2(String assetName) + { + super(assetName); + } + + @Override + protected void initialiseTypes() + { + this.types = EnumMachineType.values; + this.typeBase = EnumMachineType.values[0]; + } + + /** + * Called when the block is right clicked by the player + */ + @Override + public boolean onMachineActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_MARS, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + int metadata = this.getMetaFromState(state) & BlockMachineBase.METADATA_MASK; + return new ItemStack(this, 1, metadata); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + final TileEntity te = worldIn.getTileEntity(pos); + + if (te instanceof TileEntityGasLiquefier) + { + final TileEntityGasLiquefier tileEntity = (TileEntityGasLiquefier) te; + + if (tileEntity.processTicks > 0) + { + final float x = pos.getX() + 0.5F; + final float y = pos.getY() + 0.8F + 0.05F * rand.nextInt(3); + final float z = pos.getZ() + 0.5F; + + for (float i = -0.41F + 0.16F * rand.nextFloat(); i < 0.5F; i += 0.167F) + { + if (rand.nextInt(3) == 0) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeTiny", new Vector3(x + i, y, z - 0.41F), new Vector3(0.0D, -0.015D, -0.0015D), new Object[] + {}); + } + if (rand.nextInt(3) == 0) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeTiny", new Vector3(x + i, y, z + 0.537F), new Vector3(0.0D, -0.015D, 0.0015D), new Object[] + {}); + } + if (rand.nextInt(3) == 0) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeTiny", new Vector3(x - 0.41F, y, z + i), new Vector3(-0.0015D, -0.015D, 0.0D), new Object[] + {}); + } + if (rand.nextInt(3) == 0) + { + GalacticraftCore.proxy.spawnParticle("whiteSmokeTiny", new Vector3(x + 0.537F, y, z + i), new Vector3(0.0015D, -0.015D, 0.0D), new Object[] + {}); + } + } + } + } + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + EnumMachineType type = (EnumMachineType) typeBase.fromMetadata(meta); + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(TYPE, type); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return (state.getValue(FACING)).getHorizontalIndex() + ((EnumMachineType) state.getValue(TYPE)).getMetadata(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, TYPE); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSlimelingEgg.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSlimelingEgg.java new file mode 100644 index 00000000..89aa50aa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSlimelingEgg.java @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntitySlimelingEgg; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Enchantments; +import net.minecraft.item.Item; +import net.minecraft.item.ItemPickaxe; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSlimelingEgg extends Block implements ITileEntityProvider, IShiftDescription, ISortableBlock +{ + + // private IIcon[] icons; + public static final PropertyEnum EGG_COLOR = PropertyEnum.create("eggcolor", EnumEggColor.class); + public static final PropertyBool BROKEN = PropertyBool.create("broken"); + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.25, 0.0, 0.25, 0.75, 0.625, 0.75); + + public enum EnumEggColor implements IStringSerializable + { + + RED(0, "red"), BLUE(1, "blue"), YELLOW(2, "yellow"); + + private final int meta; + private final String name; + + private EnumEggColor(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockSlimelingEgg(String assetName) + { + super(Material.ROCK); +// this.setBlockBounds(0.25F, 0.0F, 0.25F, 0.75F, 0.625F, 0.75F); + this.setTranslationKey(assetName); + this.setDefaultState(this.blockState.getBaseState().withProperty(EGG_COLOR, EnumEggColor.RED).withProperty(BROKEN, false)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); + } + +// @Override +// public boolean canBlockStay(World par1World, int par2, int par3, int par4) +// { +// Block block = par1World.getBlock(par2, par3 - 1, par4); +// return block.isSideSolid(par1World, par2, par3, par4, ForgeDirection.UP); +// } + + private boolean beginHatch(World world, BlockPos pos, EntityPlayer player, int time) + { + IBlockState state = world.getBlockState(pos); + int l = state.getBlock().getMetaFromState(state); + + if (l < 3) + { + world.setBlockState(pos, state.getBlock().getStateFromMeta(l + 3), 2); + + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileEntitySlimelingEgg) + { + ((TileEntitySlimelingEgg) tile).timeToHatch = world.rand.nextInt(30 + time) + time; + ((TileEntitySlimelingEgg) tile).lastTouchedPlayerUUID = player.getUniqueID().toString(); + ((TileEntitySlimelingEgg) tile).lastTouchedPlayerName = player.getName(); + } + + world.markBlockRangeForRenderUpdate(pos, pos); + + return true; + } else + { + world.markBlockRangeForRenderUpdate(pos, pos); + return false; + } + } + + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + ItemStack currentStack = player.getHeldItemMainhand(); + if (currentStack != null && currentStack.getItem() instanceof ItemPickaxe) + { + return world.setBlockToAir(pos); + } else if (player.capabilities.isCreativeMode) + { + return world.setBlockToAir(pos); + } else + { + beginHatch(world, pos, player, 0); + return false; + } + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + return beginHatch(worldIn, pos, playerIn, 20); + } + + @Override + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, @Nullable ItemStack currentStack) + { + if (!currentStack.isEmpty() && currentStack.getItem() instanceof ItemPickaxe) + { + player.addStat(StatList.getBlockStats(this)); + player.addExhaustion(0.025F); + this.dropBlockAsItem(worldIn, pos, state.getBlock().getStateFromMeta(state.getBlock().getMetaFromState(state) % 3), 0); + if (currentStack.getItem() == MarsItems.deshPickaxe && EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, currentStack) > 0) + { + ItemStack itemstack = new ItemStack(MarsItems.deshPickSlime, 1, currentStack.getItemDamage()); + if (currentStack.getTagCompound() != null) + { + itemstack.setTagCompound(currentStack.getTagCompound().copy()); + } + player.inventory.setInventorySlotContents(player.inventory.currentItem, itemstack); + } + } + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata) { + * return this.icons[metadata % 6]; } + */ + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + +// @Override +// public Item getItemDropped(int meta, Random random, int par3) +// { +// return Item.getItemFromBlock(this); +// } + + @Override + public int damageDropped(IBlockState state) + { + return getMetaFromState(state); + } + +// @Override +// public int quantityDropped(int meta, int fortune, Random random) +// { +// return 1; +// } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (int var4 = 0; var4 < EnumEggColor.values().length; ++var4) + { + list.add(new ItemStack(this, 1, var4)); + } + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntitySlimelingEgg(); + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + int metadata = state.getBlock().getMetaFromState(state); + + if (metadata == 3) + { + return new ItemStack(Item.getItemFromBlock(this), 1, 0); + } + if (metadata == 4) + { + return new ItemStack(Item.getItemFromBlock(this), 1, 1); + } + if (metadata == 5) + { + return new ItemStack(Item.getItemFromBlock(this), 1, 2); + } + return super.getPickBlock(state, target, world, pos, player); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(EGG_COLOR, EnumEggColor.values()[meta % 3]).withProperty(BROKEN, meta - 3 >= 0); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumEggColor) state.getValue(EGG_COLOR)).getMeta() + (state.getValue(BROKEN) ? 3 : 0); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, EGG_COLOR, BROKEN); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.EGG; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSludge.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSludge.java new file mode 100644 index 00000000..b62c999d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockSludge.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySludgeling; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSludge extends BlockFluidClassic +{ +// @SideOnly(Side.CLIENT) +// IIcon stillIcon; +// @SideOnly(Side.CLIENT) +// IIcon flowingIcon; + + @Override + public void onEntityCollision(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (!worldIn.isRemote) + { + if (entityIn instanceof EntityPlayer && ((EntityPlayer) entityIn).capabilities.isFlying || entityIn instanceof EntitySludgeling) + { + return; + } + + int range = 5; + List l = worldIn.getEntitiesWithinAABB(EntitySludgeling.class, + new AxisAlignedBB(pos.getX() - range, pos.getY() - range, pos.getZ() - range, pos.getX() + range, pos.getY() + range, pos.getZ() + range)); + + if (l.size() < 3) + { + EntitySludgeling sludgeling = new EntitySludgeling(worldIn); + sludgeling.setPosition(pos.getX() + worldIn.rand.nextInt(5) - 2, pos.getY(), pos.getZ() + worldIn.rand.nextInt(5) - 2); + worldIn.spawnEntity(sludgeling); + } + } + + super.onEntityCollision(worldIn, pos, state, entityIn); + } + + @Override + @Nullable + public Boolean isEntityInsideMaterial(IBlockAccess world, BlockPos pos, IBlockState state, Entity entity, double yToTest, Material material, boolean testingHead) + { + return true; + } + + public BlockSludge(String assetName) + { + super(MarsModule.sludge, MarsModule.sludgeMaterial); + this.setQuantaPerBlock(9); + this.setLightLevel(1.0F); + this.needsRandomTick = true; + this.setTranslationKey(assetName); + } + + /* + * @Override + * @SideOnly(Side.CLIENT) public IIcon getIcon(int par1, int par2) { return + * par1 != 0 && par1 != 1 ? this.flowingIcon : this.stillIcon; } + * @Override + * @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister + * par1IconRegister) { this.stillIcon = + * par1IconRegister.registerIcon(MarsModule.TEXTURE_PREFIX + + * "sludge_still"); this.flowingIcon = + * par1IconRegister.registerIcon(MarsModule.TEXTURE_PREFIX + "sludge_flow"); + * MarsModule.SLUDGE.setStillIcon(this.stillIcon); + * MarsModule.SLUDGE.setFlowingIcon(this.flowingIcon); } + */ + + @Override + public boolean canDisplace(IBlockAccess world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + return super.canDisplace(world, pos); + } + + @Override + public boolean displaceIfPossible(World world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + return super.displaceIfPossible(world, pos); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + super.randomDisplayTick(stateIn, worldIn, pos, rand); + + if (rand.nextInt(1200) == 0) + { + worldIn.playSound(null, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, SoundEvents.BLOCK_LAVA_AMBIENT, SoundCategory.BLOCKS, rand.nextFloat() * 0.25F + 0.75F, + 0.00001F + rand.nextFloat() * 0.5F); + } + if (rand.nextInt(10) == 0) + { + BlockPos below = pos.down(); + IBlockState state = worldIn.getBlockState(below); + if (state.getBlock().isSideSolid(state, worldIn, below, EnumFacing.UP) && !worldIn.getBlockState(pos.down(2)).getMaterial().blocksMovement()) + { + GalacticraftPlanets.spawnParticle("bacterialDrip", new Vector3(pos.getX() + rand.nextFloat(), pos.getY() - 1.05D, pos.getZ() + rand.nextFloat()), new Vector3(0, 0, 0)); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockTier2TreasureChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockTier2TreasureChest.java new file mode 100644 index 00000000..b22db6d7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/BlockTier2TreasureChest.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTreasureChestMars; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockTier2TreasureChest extends BlockTier1TreasureChest +{ + + public BlockTier2TreasureChest(String assetName) + { + super(assetName); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityTreasureChestMars(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/MarsBlocks.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/MarsBlocks.java new file mode 100644 index 00000000..b765763b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/blocks/MarsBlocks.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.blocks; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockStairsGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGC; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemBlockEgg; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemBlockMachine; +import micdoodle8.mods.galacticraft.planets.mars.items.ItemBlockMars; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public class MarsBlocks +{ + + public static Block marsBlock; + public static Block blockSludge; + public static Block vine; + public static Block rock; + public static Block treasureChestTier2; + public static Block machine; + public static Block machineT2; + public static Block creeperEgg; + public static Block marsCobblestoneStairs; + public static Block marsBricksStairs; + public static Block bossSpawner; + + public static void initBlocks() + { + MarsBlocks.marsBlock = new BlockBasicMars("mars").setHardness(2.2F); + MarsBlocks.vine = new BlockCavernousVine("cavern_vines").setHardness(0.1F); + MarsBlocks.rock = new BlockSlimelingEgg("slimeling_egg").setHardness(0.75F); + MarsBlocks.treasureChestTier2 = new BlockTier2TreasureChest("treasure_t2"); + MarsBlocks.machine = new BlockMachineMars("mars_machine").setHardness(1.8F); + MarsBlocks.machineT2 = new BlockMachineMarsT2("mars_machine_t2").setHardness(1.8F); + MarsBlocks.creeperEgg = new BlockCreeperEgg("creeper_egg").setHardness(-1.0F); + MarsBlocks.bossSpawner = new BlockBossSpawnerMars("boss_spawner_mars"); + MarsBlocks.marsCobblestoneStairs = + new BlockStairsGC("mars_stairs_cobblestone", marsBlock.getDefaultState().withProperty(BlockBasicMars.BASIC_TYPE, BlockBasicMars.EnumBlockBasic.COBBLESTONE)).setHardness(1.5F); + MarsBlocks.marsBricksStairs = + new BlockStairsGC("mars_stairs_brick", marsBlock.getDefaultState().withProperty(BlockBasicMars.BASIC_TYPE, BlockBasicMars.EnumBlockBasic.DUNGEON_BRICK)).setHardness(4.0F); + + GCBlocks.hiddenBlocks.add(MarsBlocks.bossSpawner); + + MarsBlocks.registerBlocks(); + MarsBlocks.setHarvestLevels(); + } + + private static void setHarvestLevel(Block block, String toolClass, int level, int meta) + { + block.setHarvestLevel(toolClass, level, block.getStateFromMeta(meta)); + } + + private static void setHarvestLevel(Block block, String toolClass, int level) + { + block.setHarvestLevel(toolClass, level); + } + + public static void setHarvestLevels() + { + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 1, 0); // Copper ore + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 1, 1); // Tin ore + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 3, 2); // Desh ore + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 1, 3); // Iron ore + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 0, 4); // Cobblestone + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 3, 7); // Dungeon brick + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 0, 8); // Decoration + // block + setHarvestLevel(MarsBlocks.marsBlock, "pickaxe", 1, 9); // Stone + setHarvestLevel(MarsBlocks.marsBlock, "shovel", 0, 5); // Top dirt + setHarvestLevel(MarsBlocks.marsBlock, "shovel", 0, 6); // Dirt + setHarvestLevel(MarsBlocks.rock, "pickaxe", 3); + // setHarvestLevel(MarsBlocks.marsCobblestoneStairs, "pickaxe", 0); + // setHarvestLevel(MarsBlocks.marsBricksStairs, "pickaxe", 3); + } + + public static void registerBlock(Block block, Class itemClass) + { + GCBlocks.register(Constants.MOD_ID_PLANETS, block, itemClass); + } + + public static void registerBlocks() + { + registerBlock(MarsBlocks.treasureChestTier2, ItemBlockDesc.class); + registerBlock(MarsBlocks.marsBlock, ItemBlockMars.class); + registerBlock(MarsBlocks.vine, ItemBlockDesc.class); + registerBlock(MarsBlocks.rock, ItemBlockEgg.class); + registerBlock(MarsBlocks.creeperEgg, ItemBlockDesc.class); + registerBlock(MarsBlocks.machine, ItemBlockMachine.class); + registerBlock(MarsBlocks.machineT2, ItemBlockMachine.class); + registerBlock(MarsBlocks.bossSpawner, ItemBlockGC.class); + registerBlock(MarsBlocks.marsCobblestoneStairs, ItemBlockGC.class); + registerBlock(MarsBlocks.marsBricksStairs, ItemBlockGC.class); + } + + public static void oreDictRegistration() + { + OreDictionary.registerOre("oreCopper", new ItemStack(MarsBlocks.marsBlock, 1, 0)); + OreDictionary.registerOre("oreTin", new ItemStack(MarsBlocks.marsBlock, 1, 1)); + OreDictionary.registerOre("oreIron", new ItemStack(MarsBlocks.marsBlock, 1, 3)); + OreDictionary.registerOre("oreDesh", new ItemStack(MarsBlocks.marsBlock, 1, 2)); + OreDictionary.registerOre("blockDesh", new ItemStack(MarsBlocks.marsBlock, 1, 8)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/SkyProviderMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/SkyProviderMars.java new file mode 100644 index 00000000..c64784a6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/SkyProviderMars.java @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +/** + * SkyProviderMars.java

This file is part of the Galacticraft project + * + * @author micdoodle8 + */ +@SideOnly(Side.CLIENT) +public class SkyProviderMars extends IRenderHandler +{ + + private static final ResourceLocation overworldTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/atmosphericsun.png"); + + public int starList; + public int glSkyList; + public int glSkyList2; + private float sunSize; + + public SkyProviderMars(IGalacticraftWorldProvider marsProvider) + { + this.sunSize = 17.5F * marsProvider.getSolarSize(); + + int displayLists = GLAllocation.generateDisplayLists(3); + this.starList = displayLists; + this.glSkyList = displayLists + 1; + this.glSkyList2 = displayLists + 2; + + // Bind stars to display list + GL11.glPushMatrix(); + GL11.glNewList(this.starList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j, f, l).endVertex(); + worldRenderer.pos(j + byte2, f, l).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1).endVertex(); + worldRenderer.pos(k, f, i1).endVertex(); + worldRenderer.pos(k, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + Vec3d vec3 = world.getSkyColor(mc.getRenderViewEntity(), partialTicks); + float f1 = (float) vec3.x; + float f2 = (float) vec3.y; + float f3 = (float) vec3.z; + float f6; + + if (mc.gameSettings.anaglyph) + { + float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F; + float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F; + f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F; + f1 = f4; + f2 = f5; + f3 = f6; + } + + GL11.glColor3f(f1, f2, f3); + Tessellator tessellator1 = Tessellator.getInstance(); + BufferBuilder worldRenderer1 = tessellator1.getBuffer(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(f1, f2, f3); + GL11.glCallList(this.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + RenderHelper.disableStandardItemLighting(); + float f7; + float f8; + float f9; + float f10; + + float f18 = world.getStarBrightness(partialTicks); + + if (f18 > 0.0F) + { + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-19.0F, 0, 1.0F, 0); + GL11.glColor4f(f18, f18, f18, f18); + GL11.glCallList(this.starList); + GL11.glPopMatrix(); + } + + float[] afloat = new float[4]; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + afloat[0] = 255 / 255.0F; + afloat[1] = 194 / 255.0F; + afloat[2] = 180 / 255.0F; + afloat[3] = 0.3F; + f6 = afloat[0]; + f7 = afloat[1]; + f8 = afloat[2]; + float f11; + + if (mc.gameSettings.anaglyph) + { + f9 = (f6 * 30.0F + f7 * 59.0F + f8 * 11.0F) / 100.0F; + f10 = (f6 * 30.0F + f7 * 70.0F) / 100.0F; + f11 = (f6 * 30.0F + f8 * 70.0F) / 100.0F; + f6 = f9; + f7 = f10; + f8 = f11; + } + + f18 = 1.0F - f18; + + worldRenderer1.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + float r = f6 * f18; + float g = f7 * f18; + float b = f8 * f18; + float a = afloat[3] * 2 / f18; + worldRenderer1.pos(0.0D, 100.0D, 0.0D).color(r, g, b, a).endVertex(); + byte b0 = 16; + r = afloat[0] * f18; + g = afloat[1] * f18; + b = afloat[2] * f18; + a = 0.0F; + + // Render sun aura + f10 = 20.0F; + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) -f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) -f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + + tessellator1.draw(); + worldRenderer1.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + r = f6 * f18; + g = f7 * f18; + b = f8 * f18; + a = afloat[3] * f18; + worldRenderer1.pos(0.0D, 100.0D, 0.0D).color(r, g, b, a).endVertex(); + r = afloat[0] * f18; + g = afloat[1] * f18; + b = afloat[2] * f18; + a = 0.0F; + + // Render larger sun aura + f10 = 40.0F; + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) -f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) -f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + + tessellator1.draw(); + GL11.glPopMatrix(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE, GL11.GL_ZERO); + GL11.glPushMatrix(); + f7 = 0.0F; + f8 = 0.0F; + f9 = 0.0F; + GL11.glTranslatef(f7, f8, f9); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + // Render sun + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + // Some blanking to conceal the stars + f10 = this.sunSize / 3.5F; + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer1.pos(-f10, 99.9D, -f10).endVertex(); + worldRenderer1.pos(f10, 99.9D, -f10).endVertex(); + worldRenderer1.pos(f10, 99.9D, f10).endVertex(); + worldRenderer1.pos(-f10, 99.9D, f10).endVertex(); + tessellator1.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + f10 = this.sunSize; + mc.renderEngine.bindTexture(SkyProviderMars.sunTexture); + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer1.pos(-f10, 100.0D, -f10).tex(0.0D, 0.0D).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).tex(1.0D, 0.0D).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).tex(1.0D, 1.0D).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).tex(0.0D, 1.0D).endVertex(); + tessellator1.draw(); + + // Render earth + f10 = 0.5F; + GL11.glScalef(0.6F, 0.6F, 0.6F); + GL11.glRotatef(40.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(200F, 1.0F, 0.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1F); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(SkyProviderMars.overworldTexture); + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldRenderer1.pos(-f10, -100.0D, f10).tex(0, 1.0).endVertex(); + worldRenderer1.pos(f10, -100.0D, f10).tex(1.0, 1.0).endVertex(); + worldRenderer1.pos(f10, -100.0D, -f10).tex(1.0, 0).endVertex(); + worldRenderer1.pos(-f10, -100.0D, -f10).tex(0, 0).endVertex(); + tessellator1.draw(); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + double d0 = mc.player.getPosition().getY() - world.getHorizon(); + + if (d0 < 0.0D) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 12.0F, 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + f8 = 1.0F; + f9 = -((float) (d0 + 65.0D)); + f10 = -f8; + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer1.pos(-f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + tessellator1.draw(); + } + + if (world.provider.isSkyColored()) + { + GL11.glColor3f(f1 * 0.2F + 0.04F, f2 * 0.2F + 0.04F, f3 * 0.6F + 0.1F); + } else + { + GL11.glColor3f(f1, f2, f3); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -((float) (d0 - 16.0D)), 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); + GL11.glDepthMask(true); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random rand = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var2.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int starIndex = 0; starIndex < (ConfigManagerCore.moreStars ? 35000 : 6000); ++starIndex) + { + double var4 = rand.nextFloat() * 2.0F - 1.0F; + double var6 = rand.nextFloat() * 2.0F - 1.0F; + double var8 = rand.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.15F + rand.nextFloat() * 0.1F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double var14 = var4 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var16 = var6 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var18 = var8 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = rand.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int var38 = 0; var38 < 4; ++var38) + { + final double var39 = 0.0D; + final double var41 = ((var38 & 2) - 1) * var10; + final double var43 = ((var38 + 1 & 2) - 1) * var10; + final double var47 = var41 * var36 - var43 * var34; + final double var49 = var43 * var36 + var41 * var34; + final double var53 = var47 * var28 + var39 * var30; + final double var55 = var39 * var28 - var47 * var30; + final double var57 = var55 * var22 - var49 * var24; + final double var61 = var49 * var22 + var55 * var24; + worldRenderer.pos(var14 + var57, var16 + var53, var18 + var61).endVertex(); + } + } + } + + var2.draw(); + } + + private Vec3d getCustomSkyColor() + { + return new Vec3d(0.26796875D, 0.1796875D, 0.0D); + } + + public float getSkyBrightness(float par1) + { + final float var2 = FMLClientHandler.instance().getClient().world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.sin(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/EntityCryoFX.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/EntityCryoFX.java new file mode 100644 index 00000000..d67e1e99 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/EntityCryoFX.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.fx; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class EntityCryoFX extends Particle +{ + + float oSize; + + public EntityCryoFX(World worldIn, Vector3 position, Vector3 motion) + { + super(worldIn, position.x, position.y, position.z, 0.0D, 0.0D, 0.0D); + float f = 2.5F; + this.motionX *= 0.0; + this.motionY *= 0.10000000149011612; + this.motionZ *= 0.0; + this.motionX += motion.x; + this.motionY += motion.y; + this.motionZ += motion.z; + this.particleRed = this.particleGreen = this.particleBlue = 1.0F - (float) (Math.random() * 0.30000001192092896D); + this.particleRed *= 0.8F; + this.particleGreen *= 0.8F; + this.particleScale *= 0.25F; + this.particleScale *= f; + this.oSize = this.particleScale; + this.particleMaxAge = (int) (8.0D / (Math.random() * 0.8D + 0.3D)); + this.particleMaxAge = (int) ((float) this.particleMaxAge * f); + this.canCollide = false; + } + + /** + * Renders the particle + */ + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float p_180434_4_, float p_180434_5_, float p_180434_6_, float p_180434_7_, float p_180434_8_) + { + float f = ((float) this.particleAge + partialTicks) / (float) this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.oSize * f; + super.renderParticle(worldRendererIn, entityIn, partialTicks, p_180434_4_, p_180434_5_, p_180434_6_, p_180434_7_, p_180434_8_); + } + + /** + * Called to update the entity's position/logic. + */ + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + EntityPlayer entityplayer = this.world.getClosestPlayer(this.posX, this.posY, this.posZ, 2.0D, false); + + if (entityplayer != null && this.posY > entityplayer.getEntityBoundingBox().minY) + { + this.posY += (entityplayer.getEntityBoundingBox().minY - this.posY) * 0.2D; + this.motionY += (entityplayer.motionY - this.motionY) * 0.2D; + this.setPosition(this.posX, this.posY, this.posZ); + } + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/ParticleDrip.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/ParticleDrip.java new file mode 100644 index 00000000..46502efe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/fx/ParticleDrip.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.fx; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.particle.Particle; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleDrip extends Particle +{ + + private int bobTimer; + + public ParticleDrip(World world, double x, double y, double z) + { + super(world, x, y, z, 0.0D, 0.0D, 0.0D); + this.motionX = this.motionY = this.motionZ = 0.0D; + this.setParticleTextureIndex(113); + this.setSize(0.01F, 0.01F); + this.particleGravity = 0.06F; + this.bobTimer = 40; + this.particleMaxAge = (int) (64.0D / (Math.random() * 0.8D + 0.2D)); + this.motionX = this.motionY = this.motionZ = 0.0D; + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.particleRed = 0.0F; + this.particleGreen = 0.2F; + this.particleBlue = 0.1F; + this.motionY -= this.particleGravity; + + if (this.bobTimer-- > 0) + { + this.motionX *= 0.02D; + this.motionY *= 0.02D; + this.motionZ *= 0.02D; + this.setParticleTextureIndex(113); + } else + { + this.setParticleTextureIndex(112); + } + + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + + if (this.onGround) + { + this.setExpired(); + } + + BlockPos pos = new BlockPos(this.posX, this.posY, this.posZ); + IBlockState state = this.world.getBlockState(pos); + Material material = state.getMaterial(); + + if (material.isLiquid() || material.isSolid()) + { + double d0 = 0.0D; + + if (state.getBlock() instanceof BlockLiquid) + { + d0 = BlockLiquid.getLiquidHeightPercent(((Integer) state.getValue(BlockLiquid.LEVEL)).intValue()); + } + + double d1 = MathHelper.floor(this.posY) + 1 - d0; + + if (this.posY < d1) + { + this.setExpired(); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiCargoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiCargoRocket.java new file mode 100644 index 00000000..26fa50c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiCargoRocket.java @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntitySpaceshipBase.EnumLaunchPhase; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRocketInventory; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiCargoRocket extends GuiContainerGC +{ + + private static ResourceLocation[] rocketTextures = new ResourceLocation[4]; + + static + { + for (int i = 0; i < 4; i++) + { + GuiCargoRocket.rocketTextures[i] = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/rocket_" + i * 18 + ".png"); + } + } + + private final IInventory upperChestInventory; + private final EnumRocketType rocketType; + private EntityCargoRocket rocket; + private GuiButton launchButton; + + public GuiCargoRocket(IInventory par1IInventory, EntityCargoRocket rocket) + { + this(par1IInventory, rocket, rocket.rocketType); + } + + public GuiCargoRocket(IInventory par1IInventory, EntityCargoRocket rocket, EnumRocketType rocketType) + { + super(new ContainerRocketInventory(par1IInventory, rocket, rocketType, FMLClientHandler.instance().getClient().player)); + this.upperChestInventory = par1IInventory; + this.rocket = rocket; + this.allowUserInput = false; + this.ySize = rocketType.getInventorySpace() <= 3 ? 132 : 145 + rocketType.getInventorySpace() * 2; + this.rocketType = rocketType; + } + + @Override + protected void actionPerformed(GuiButton button) + { + switch (button.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_CARGO_ROCKET_STATUS, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.rocket.getEntityId(), 0})); + break; + default: + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + final int var6 = (this.height - this.ySize) / 2; + final int var7 = (this.width - this.xSize) / 2; + this.launchButton = new GuiButton(0, var7 + 116, var6 + 26, 50, 20, GCCoreUtil.translate("gui.message.launch.name")); + this.buttonList.add(this.launchButton); + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.0")); + fuelTankDesc.add(GCCoreUtil.translate("gui.fuel_tank.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + (this.rocket.rocketType.getInventorySpace() == 2 ? 70 : 71), (this.height - this.ySize) / 2 + 6, 36, 40, + fuelTankDesc, this.width, this.height, this)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + if (this.rocket.rocketType.getInventorySpace() == 2) + { + this.fontRenderer.drawString(GCCoreUtil.translate(this.upperChestInventory.getName()), 8, 76 + (this.rocket.rocketType.getInventorySpace() - 20) / 9 * 18, 4210752); + } else + { + this.fontRenderer.drawString(GCCoreUtil.translate(this.upperChestInventory.getName()), 8, 89 + (this.rocket.rocketType.getInventorySpace() - 20) / 9 * 18, 4210752); + } + + String str = GCCoreUtil.translate("gui.message.fuel.name") + ":"; + this.fontRenderer.drawString(str, 140 - this.fontRenderer.getStringWidth(str) / 2, 5, 4210752); + final double percentage = this.rocket.getScaledFuelLevel(100); + String color = percentage > 80.0D ? EnumColor.BRIGHT_GREEN.getCode() : percentage > 40.0D ? EnumColor.ORANGE.getCode() : EnumColor.RED.getCode(); + str = percentage + "% " + GCCoreUtil.translate("gui.message.full.name"); + this.fontRenderer.drawString(color + str, 140 - this.fontRenderer.getStringWidth(str) / 2, 15, 4210752); + str = GCCoreUtil.translate("gui.message.status.name") + ":"; + this.fontRenderer.drawString(str, 40 - this.fontRenderer.getStringWidth(str) / 2, 9, 4210752); + + String[] spltString = + {""}; + String colour = EnumColor.YELLOW.toString(); + + if (this.rocket.statusMessageCooldown == 0 || this.rocket.statusMessage == null) + { + spltString = new String[2]; + spltString[0] = GCCoreUtil.translate("gui.cargorocket.status.waiting.0"); + spltString[1] = GCCoreUtil.translate("gui.cargorocket.status.waiting.1"); + + if (this.rocket.launchPhase != EnumLaunchPhase.UNIGNITED.ordinal()) + { + spltString = new String[2]; + spltString[0] = GCCoreUtil.translate("gui.cargorocket.status.launched.0"); + spltString[1] = GCCoreUtil.translate("gui.cargorocket.status.launched.1"); + this.launchButton.enabled = false; + } + } else + { + spltString = this.rocket.statusMessage.split("#"); + colour = this.rocket.statusColour; + } + + int y = 2; + for (String splitString : spltString) + { + this.fontRenderer.drawString(colour + splitString, 35 - this.fontRenderer.getStringWidth(splitString) / 2, 9 * y, 4210752); + y++; + } + + if (this.rocket.statusValid && this.rocket.statusMessageCooldown > 0 && this.rocket.statusMessageCooldown < 4) + { + this.mc.displayGuiScreen(null); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.getTextureManager().bindTexture(GuiCargoRocket.rocketTextures[(this.rocketType.getInventorySpace() - 2) / 18]); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, 176, this.ySize); + + final int fuelLevel = this.rocket.getScaledFuelLevel(38); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + (this.rocket.rocketType.getInventorySpace() == 2 ? 71 : 72), (this.height - this.ySize) / 2 + 45 - fuelLevel, 176, 38 - fuelLevel, + 42, fuelLevel); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiGasLiquefier.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiGasLiquefier.java new file mode 100644 index 00000000..9cd4723e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiGasLiquefier.java @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerGasLiquefier; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiGasLiquefier extends GuiContainerGC +{ + + private static final ResourceLocation refineryTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gas_liquefier_m.png"); + + private static final ResourceLocation gasTextures = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + private final TileEntityGasLiquefier tileEntity; + + private GuiButton buttonDisable; + + private GuiElementInfoRegion fuelTankRegion = new GuiElementInfoRegion((this.width - this.xSize) / 2 + 132, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + + private GuiElementInfoRegion gasTankRegion = new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion((this.width - this.xSize) / 2 + 62, (this.height - this.ySize) / 2 + 16, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiGasLiquefier(InventoryPlayer par1InventoryPlayer, TileEntityGasLiquefier tileEntity) + { + super(new ContainerGasLiquefier(par1InventoryPlayer, tileEntity, FMLClientHandler.instance().getClient().player)); + this.tileEntity = tileEntity; + this.ySize = 168; + } + + @Override + public void initGui() + { + super.initGui(); + + this.gasTankRegion.xPosition = (this.width - this.xSize) / 2 + 7; + this.gasTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.gasTankRegion.parentWidth = this.width; + this.gasTankRegion.parentHeight = this.height; + this.infoRegions.add(this.gasTankRegion); + + List batterySlotDesc = new ArrayList<>(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 33, (this.height - this.ySize) / 2 + 49, 18, 18, batterySlotDesc, this.width, this.height, this)); + + this.fuelTankRegion.xPosition = (this.width - this.xSize) / 2 + 132; + this.fuelTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.fuelTankRegion.parentWidth = this.width; + this.fuelTankRegion.parentHeight = this.height; + this.infoRegions.add(this.fuelTankRegion); + + List fuelSlotDesc = new ArrayList<>(); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.0")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.1")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.liquid_output.desc.2")); + + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 131, (this.height - this.ySize) / 2 + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + fuelSlotDesc = new ArrayList<>(); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.gas_input.desc.0")); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.gas_input.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 6, (this.height - this.ySize) / 2 + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 42; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 16; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + + this.addToolTips(); + + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 49, this.height / 2 - 56, 76, 20, GCCoreUtil.translate("gui.button.liquefy.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.tileEntity.getWorld()), new Object[] {this.tileEntity.getPos(), 0})); + break; + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 40, 5, 4210752); + String displayText = ""; + int yOffset = -18; + + if (RedstoneUtil.isBlockReceivingRedstone(this.tileEntity.getWorld(), this.tileEntity.getPos())) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.off.name"); + } else if (!this.tileEntity.hasEnoughEnergyToRun) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.message.low_energy.name"); + } else if ((this.tileEntity.processTicks > -10 || this.tileEntity.canProcess())) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.liquefying.name"); + } else if (this.tileEntity.gasTank.getFluid() == null || this.tileEntity.gasTank.getFluidAmount() <= 0) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.nogas.name"); + } else if (this.tileEntity.gasTank.getFluidAmount() > 0 && this.tileEntity.disabled) + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } else if (this.tileEntity.liquidTank.getFluidAmount() == this.tileEntity.liquidTank.getCapacity()) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.tanksfull.name"); + } else + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.unknown.name"); + } + + this.buttonDisable.enabled = this.tileEntity.disableCooldown == 0; + this.buttonDisable.displayString = this.tileEntity.processTicks <= -10 ? GCCoreUtil.translate("gui.button.liquefy.name") : GCCoreUtil.translate("gui.button.liquefy_stop.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ":", 56, 45 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(displayText, 62, 45 + 33 + yOffset, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 23, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiGasLiquefier.refineryTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int edgeLeft = (this.width - this.xSize) / 2; + int edgeTop = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(edgeLeft, edgeTop, 0, 0, this.xSize, this.ySize); + + // Fluid tank 1 + // 0 for fuel, 1 for oxygen, 2 for atmospheric gases + int liquidType = this.tileEntity.fluidTankType; + if (liquidType == 0) + { + int displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect(edgeLeft + 132, edgeTop + 17 + 49 - displayInt, 176 + 16, 38 - displayInt, 16, displayInt); + } + + this.mc.renderEngine.bindTexture(GuiGasLiquefier.gasTextures); + int displayInt = this.tileEntity.getScaledGasLevel(38); + // 0 for methane, 1 for oxygen, 2 for atmospheric gases + int gasType = this.tileEntity.gasTankType; + if (gasType > 2) + { + gasType = 2; + } + if (gasType >= 0) + { + this.drawTexturedModalRect(edgeLeft + 7, edgeTop + 17 + 49 - displayInt, 1 + gasType * 17, 38 - displayInt, 16, displayInt); + } + if (liquidType > 0) + { + displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect(edgeLeft + 132, edgeTop + 17 + 49 - displayInt, (liquidType + 2) * 17 + 1, 38 - displayInt, 16, displayInt); + } + + this.addToolTips(); + + this.mc.renderEngine.bindTexture(GuiGasLiquefier.refineryTexture); + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(edgeLeft + 28, edgeTop + 16, 208, 0, 11, 10); + } + + this.drawTexturedModalRect(edgeLeft + 42, edgeTop + 17, 176, 38, Math.min(this.tileEntity.getScaledElecticalLevel(54), 54), 7); + } + + private void addToolTips() + { + List gasTankDesc = new ArrayList<>(); + gasTankDesc.add(GCCoreUtil.translate("gui.gas_tank_compressed.desc.0")); + FluidStack gasTankContents = this.tileEntity.gasTank != null ? this.tileEntity.gasTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + gasTankDesc.add("(" + gasname + ")"); + } else + { + gasTankDesc.add(" "); + } + int gasLevel = gasTankContents != null ? gasTankContents.amount : 0; + int gasCapacity = this.tileEntity.gasTank != null ? this.tileEntity.gasTank.getCapacity() : 0; + gasTankDesc.add(EnumColor.YELLOW + " " + gasLevel + " / " + gasCapacity); + this.gasTankRegion.tooltipStrings = gasTankDesc; + + List fuelTankDesc = new ArrayList<>(); + fuelTankDesc.add(GCCoreUtil.translate("gui.liquid_tank.desc.0")); + gasTankContents = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + int fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + int fuelCapacity = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + " " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + + fuelTankDesc = new ArrayList<>(); + fuelTankDesc.add(GCCoreUtil.translate("gui.liquid_tank.desc.0")); + + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + + List electricityDesc = new ArrayList<>(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchController.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchController.java new file mode 100644 index 00000000..ce02ee99 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchController.java @@ -0,0 +1,408 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox.ITextBoxCallback; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiLabel; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiLaunchController extends GuiContainerGC implements ITextBoxCallback +{ + + private static final ResourceLocation launchControllerGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/launch_controller.png"); + + private TileEntityLaunchController launchController; + + private GuiButton enableControllerButton; + private GuiButton hideDestinationFrequency; + private GuiButton openAdvancedConfig; + private GuiElementTextBox frequency; + private GuiElementTextBox destinationFrequency; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 52, 9, null, 0, 0, this); + private GuiElementInfoRegion waterTankInfoRegion = new GuiElementInfoRegion(0, 0, 41, 28, null, 0, 0, this); + + private int cannotEditTimer; + + public GuiLaunchController(InventoryPlayer playerInventory, TileEntityLaunchController launchController) + { + super(new ContainerLaunchController(playerInventory, launchController, FMLClientHandler.instance().getClient().player)); + this.ySize = 209; + this.launchController = launchController; + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + if (this.launchController.disableCooldown > 0) + { + this.enableControllerButton.enabled = false; + this.hideDestinationFrequency.enabled = false; + } else + { + boolean isOwner = PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName()); + this.enableControllerButton.enabled = isOwner; + this.hideDestinationFrequency.enabled = isOwner; + } + + this.enableControllerButton.displayString = this.launchController.getDisabled(0) ? GCCoreUtil.translate("gui.button.enable.name") : GCCoreUtil.translate("gui.button.disable.name"); + this.hideDestinationFrequency.displayString = !this.launchController.getDisabled(2) ? GCCoreUtil.translate("gui.button.unhide_dest.name") : GCCoreUtil.translate("gui.button.hide_dest.name"); + // Hacky way of rendering buttons properly, possibly bugs here: + List buttonList = new ArrayList<>(this.buttonList); + List labelList = new ArrayList<>(this.labelList); + List infoRegions = new ArrayList<>(this.infoRegions); + this.buttonList.clear(); + this.labelList.clear(); + this.infoRegions.clear(); + super.drawScreen(par1, par2, par3); + + GL11.glColor3f(1, 1, 1); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + int k; + for (k = 0; k < buttonList.size(); ++k) + { + ((GuiButton) buttonList.get(k)).drawButton(this.mc, par1, par2, par3); + } + + for (k = 0; k < labelList.size(); ++k) + { + ((GuiLabel) labelList.get(k)).drawLabel(this.mc, par1, par2); + } + + for (k = 0; k < infoRegions.size(); ++k) + { + infoRegions.get(k).drawRegion(par1, par2); + } + + this.buttonList = buttonList; + this.labelList = labelList; + this.infoRegions = infoRegions; + +// GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + + if (Math.random() < 0.025 && !destinationFrequency.isTextFocused) + { + if (!PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName()) && !this.launchController.getDisabled(2)) + { + // in case the player is not equal to the owner of the + // controller, + // scramble the destination number such that other players can't + // fly to it directly + Random r = new Random(); + String fakefrequency = ""; + for (int i = 0; i < this.destinationFrequency.getMaxLength(); i++) + { + fakefrequency += (char) (r.nextInt(126 - 33) + 33); + } + destinationFrequency.text = fakefrequency; + } else + { + destinationFrequency.text = String.valueOf(this.launchController.destFrequency); + } + } + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (keyID != Keyboard.KEY_ESCAPE && keyID != this.mc.gameSettings.keyBindInventory.getKeyCode()) + { + if (this.frequency.keyTyped(keyChar, keyID)) + { + return; + } + + if (this.destinationFrequency.keyTyped(keyChar, keyID)) + { + return; + } + } + + super.keyTyped(keyChar, keyID); + } + + public boolean isValid(String string) + { + if (string.length() > 0 && ChatAllowedCharacters.isAllowedCharacter(string.charAt(string.length() - 1))) + { + try + { + Integer.parseInt(string); + return true; + } catch (Exception e) + { + return false; + } + } else + { + return false; + } + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int xLeft = (this.width - this.xSize) / 2; + final int yTop = (this.height - this.ySize) / 2; + this.enableControllerButton = new GuiButton(0, xLeft + 70 + 124 - 72, yTop + 16, 48, 20, GCCoreUtil.translate("gui.button.enable.name")); + this.frequency = new GuiElementTextBox(4, this, xLeft + 66, yTop + 16, 48, 20, "", true, 6, false); + this.destinationFrequency = new GuiElementTextBox(5, this, xLeft + 45, yTop + 16 + 22, 48, 20, "", true, 6, false); + this.hideDestinationFrequency = new GuiButton(6, xLeft + 95, yTop + 16 + 22, 39, 20, GCCoreUtil.translate("gui.button.hide_dest.name")); + this.openAdvancedConfig = new GuiButton(7, xLeft + 48, yTop + 62, 80, 20, GCCoreUtil.translate("gui.launch_controller.advanced") + "..."); + this.buttonList.add(this.enableControllerButton); + this.buttonList.add(this.frequency); + this.buttonList.add(this.destinationFrequency); + this.buttonList.add(this.hideDestinationFrequency); + this.buttonList.add(this.openAdvancedConfig); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = xLeft + 98; + this.electricInfoRegion.yPosition = yTop + 113; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 151, yTop + 104, 18, 18, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.0")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 5, yTop + 20, 109, 13, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 5, yTop + 42, 87, 13, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.4")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 95, yTop + 38, 38, 20, batterySlotDesc, this.width, this.height, this)); + } + + @Override + protected void mouseClicked(int px, int py, int par3) throws IOException + { + super.mouseClicked(px, py, par3); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (!PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName())) + { + this.cannotEditTimer = 50; + return; + } + + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, mc.world.provider.getDimension(), new Object[] + {this.launchController.getPos(), 0})); + break; + case 6: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, mc.world.provider.getDimension(), new Object[] + {this.launchController.getPos(), 2})); + break; + case 7: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_SWITCH_LAUNCH_CONTROLLER_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.launchController.getPos(), 0})); + break; + default: + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = this.launchController.getOwnerName() + "\'s " + this.launchController.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, 4210752); + + if (this.cannotEditTimer > 0) + { + this.fontRenderer.drawString(this.launchController.getOwnerName(), this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, + this.cannotEditTimer % 30 < 15 ? ColorUtil.to32BitColor(255, 255, 100, 100) : 4210752); + this.cannotEditTimer--; + } + + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 115, 4210752); + displayString = this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 86, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.launchController.ueWattsPerTick * + // 20, ElectricUnit.WATT); + // this.fontRenderer.drawString(displayString, this.xSize - 26 - + // this.fontRenderer.getStringWidth(displayString), 94, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.launchController.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(displayString, this.xSize - 26 - + // this.fontRenderer.getStringWidth(displayString), 104, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.frequency.name") + ":", 7, 22, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.dest_frequency.name") + ":", 7, 44, 4210752); + + } + + private String getStatus() + { + if (!this.launchController.frequencyValid) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.invalid_freq.name"); + } + + if (this.launchController.getEnergyStoredGC() <= 0.0F) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_energy.name"); + } + + if (this.launchController.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.active.name"); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiLaunchController.launchControllerGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.launchController.getEnergyStoredGC(), this.launchController.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (this.launchController.getEnergyStoredGC() > 0) + { + int scale = this.launchController.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 99, var6 + 114, 176, 0, Math.min(scale, 54), 7); + } + + GL11.glPopMatrix(); + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.launchController.getOwnerName()); + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + if (PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName())) + { + if (textBox.equals(this.frequency)) + { + this.launchController.frequency = textBox.getIntegerValue(); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {0, this.launchController.getPos(), this.launchController.frequency})); + } else if (textBox.equals(this.destinationFrequency)) + { + this.launchController.destFrequency = textBox.getIntegerValue(); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {2, this.launchController.getPos(), this.launchController.destFrequency})); + } + } + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + if (textBox.equals(this.frequency)) + { + return String.valueOf(this.launchController.frequency); + } else if (textBox.equals(this.destinationFrequency)) + { + if (PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName()) || this.launchController.getDisabled(2)) + { + return String.valueOf(this.launchController.destFrequency); + } else + { + // in case the player is not equal to the owner of the + // controller, + // scramble the destination number such that other players can't + // fly to it directly + Random r = new Random(); + String fakefrequency = ""; + for (int i = 0; i < this.destinationFrequency.getMaxLength(); i++) + { + fakefrequency += (char) (r.nextInt(126 - 33) + 33); + } + return fakefrequency; + } + } + + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + if (textBox.equals(this.frequency)) + { + return this.launchController.frequencyValid ? ColorUtil.to32BitColor(255, 20, 255, 20) : ColorUtil.to32BitColor(255, 255, 25, 25); + } else if (textBox.equals(this.destinationFrequency)) + { + return this.launchController.destFrequencyValid ? ColorUtil.to32BitColor(255, 20, 255, 20) : ColorUtil.to32BitColor(255, 255, 25, 25); + } + + return 0; + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + this.cannotEditTimer = 50; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchControllerAdvanced.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchControllerAdvanced.java new file mode 100644 index 00000000..7e39cc96 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiLaunchControllerAdvanced.java @@ -0,0 +1,275 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket.EnumAutoLaunch; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementDropdown; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementDropdown.IDropboxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiLabel; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiLaunchControllerAdvanced extends GuiContainerGC implements IDropboxCallback, ICheckBoxCallback +{ + + private static final ResourceLocation launchControllerGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/launch_controller.png"); + + private TileEntityLaunchController launchController; + + private GuiElementCheckbox enablePadRemovalButton; + private GuiElementCheckbox launchWhenCheckbox; + private GuiElementDropdown dropdownTest; + private GuiButton closeAdvancedConfig; + + private int cannotEditTimer; + + public GuiLaunchControllerAdvanced(InventoryPlayer playerInventory, TileEntityLaunchController launchController) + { + super(new ContainerLaunchController(playerInventory, launchController, FMLClientHandler.instance().getClient().player)); + this.ySize = 209; + this.launchController = launchController; + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + if (this.launchController.disableCooldown > 0) + { + this.enablePadRemovalButton.enabled = false; + } else + { + boolean isOwner = PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName()); + this.enablePadRemovalButton.enabled = isOwner; + } + + // Hacky way of rendering buttons properly, possibly bugs here: + List buttonList = new ArrayList<>(this.buttonList); + List labelList = new ArrayList<>(this.labelList); + List infoRegions = new ArrayList<>(this.infoRegions); + this.buttonList.clear(); + this.labelList.clear(); + this.infoRegions.clear(); + super.drawScreen(par1, par2, par3); + + GL11.glColor3f(1, 1, 1); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + + int k; + for (k = 0; k < buttonList.size(); ++k) + { + ((GuiButton) buttonList.get(k)).drawButton(this.mc, par1, par2, par3); + } + + for (k = 0; k < labelList.size(); ++k) + { + ((GuiLabel) labelList.get(k)).drawLabel(this.mc, par1, par2); + } + + for (k = 0; k < infoRegions.size(); ++k) + { + infoRegions.get(k).drawRegion(par1, par2); + } + + this.buttonList = buttonList; + this.labelList = labelList; + this.infoRegions = infoRegions; + +// GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int xLeft = (this.width - this.xSize) / 2; + final int yTop = (this.height - this.ySize) / 2; + this.enablePadRemovalButton = new GuiElementCheckbox(1, this, this.width / 2 - 61, yTop + 20, GCCoreUtil.translate("gui.message.remove_pad.name")); + this.launchWhenCheckbox = new GuiElementCheckbox(2, this, this.width / 2 - 61, yTop + 38, GCCoreUtil.translate("gui.message.launch_when.name") + ": "); + this.dropdownTest = new GuiElementDropdown(3, this, xLeft + 52, yTop + 52, EnumAutoLaunch.CARGO_IS_UNLOADED.getTitle(), EnumAutoLaunch.CARGO_IS_FULL.getTitle(), + EnumAutoLaunch.ROCKET_IS_FUELED.getTitle(), EnumAutoLaunch.INSTANT.getTitle(), EnumAutoLaunch.TIME_10_SECONDS.getTitle(), EnumAutoLaunch.TIME_30_SECONDS.getTitle(), + EnumAutoLaunch.TIME_1_MINUTE.getTitle(), EnumAutoLaunch.REDSTONE_SIGNAL.getTitle()); + this.closeAdvancedConfig = new GuiButton(4, xLeft + 5, yTop + 5, 20, 20, "<"); + this.buttonList.add(this.enablePadRemovalButton); + this.buttonList.add(this.launchWhenCheckbox); + this.buttonList.add(this.dropdownTest); + this.buttonList.add(this.closeAdvancedConfig); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 151, yTop + 104, 18, 18, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.2")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 27, yTop + 20, 13, 13, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.launch_controller.desc.3")); + this.infoRegions.add(new GuiElementInfoRegion(xLeft + 52, yTop + 53, 99, 13, batterySlotDesc, this.width, this.height, this)); + } + + @Override + protected void actionPerformed(GuiButton button) + { + if (!PlayerUtil.getName(this.mc.player).equals(this.launchController.getOwnerName())) + { + this.cannotEditTimer = 50; + return; + } + + if (button.enabled) + { + switch (button.id) + { + case 4: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_SWITCH_LAUNCH_CONTROLLER_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.launchController.getPos(), 1})); + break; + default: + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = GCCoreUtil.translate("gui.launch_controller.owner") + ": " + this.launchController.getOwnerName(); + this.fontRenderer.drawString(displayString, this.xSize - this.fontRenderer.getStringWidth(displayString) - 5, 5, 4210752); + + if (this.cannotEditTimer > 0) + { + this.fontRenderer.drawString(this.launchController.getOwnerName(), this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, + this.cannotEditTimer % 30 < 15 ? ColorUtil.to32BitColor(255, 255, 100, 100) : 4210752); + this.cannotEditTimer--; + } + + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 115, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiLaunchControllerAdvanced.launchControllerGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + if (this.launchController.getEnergyStoredGC() > 0) + { + int scale = this.launchController.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 99, var6 + 114, 176, 0, Math.min(scale, 54), 7); + } + + GL11.glPopMatrix(); + } + + @Override + public boolean canBeClickedBy(GuiElementDropdown dropdown, EntityPlayer player) + { + if (dropdown.equals(this.dropdownTest)) + { + return PlayerUtil.getName(player).equals(this.launchController.getOwnerName()); + } + + return false; + } + + @Override + public void onSelectionChanged(GuiElementDropdown dropdown, int selection) + { + if (dropdown.equals(this.dropdownTest)) + { + this.launchController.launchDropdownSelection = selection; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {1, this.launchController.getPos(), this.launchController.launchDropdownSelection})); + } + } + + @Override + public int getInitialSelection(GuiElementDropdown dropdown) + { + if (dropdown.equals(this.dropdownTest)) + { + return this.launchController.launchDropdownSelection; + } + + return 0; + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + if (checkbox.equals(this.enablePadRemovalButton)) + { + this.launchController.launchPadRemovalDisabled = !newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {3, this.launchController.getPos(), this.launchController.launchPadRemovalDisabled ? 1 : 0})); + } else if (checkbox.equals(this.launchWhenCheckbox)) + { + this.launchController.launchSchedulingEnabled = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {4, this.launchController.getPos(), this.launchController.launchSchedulingEnabled ? 1 : 0})); + } + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return PlayerUtil.getName(player).equals(this.launchController.getOwnerName()); + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + if (checkbox.equals(this.enablePadRemovalButton)) + { + return !this.launchController.launchPadRemovalDisabled; + } else if (checkbox.equals(this.launchWhenCheckbox)) + { + return this.launchController.launchSchedulingEnabled; + } + + return false; + } + + @Override + public void onIntruderInteraction() + { + this.cannotEditTimer = 50; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiMethaneSynthesizer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiMethaneSynthesizer.java new file mode 100644 index 00000000..871d0eaf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiMethaneSynthesizer.java @@ -0,0 +1,275 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerMethaneSynthesizer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiMethaneSynthesizer extends GuiContainerGC +{ + + private static final ResourceLocation refineryTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/methane_synthesizer.png"); + + private static final ResourceLocation gasTextures = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + private final TileEntityMethaneSynthesizer tileEntity; + + private GuiButton buttonDisable; + + private GuiElementInfoRegion fuelTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion gasTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion gasTank2Region = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 20, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 62, (this.height - this.ySize) / 2 + 16, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiMethaneSynthesizer(InventoryPlayer par1InventoryPlayer, TileEntityMethaneSynthesizer tileEntity) + { + super(new ContainerMethaneSynthesizer(par1InventoryPlayer, tileEntity, FMLClientHandler.instance().getClient().player)); + this.tileEntity = tileEntity; + this.ySize = 168; + } + + @Override + public void initGui() + { + super.initGui(); + + int edgeLeft = (this.width - this.xSize) / 2; + int edgeTop = (this.height - this.ySize) / 2; + + this.gasTankRegion.xPosition = edgeLeft + 7; + this.gasTankRegion.yPosition = edgeTop + 28; + this.gasTankRegion.parentWidth = this.width; + this.gasTankRegion.parentHeight = this.height; + this.infoRegions.add(this.gasTankRegion); + + this.gasTank2Region.xPosition = edgeLeft + 28; + this.gasTank2Region.yPosition = edgeTop + 28; + this.gasTank2Region.parentWidth = this.width; + this.gasTank2Region.parentHeight = this.height; + this.infoRegions.add(this.gasTank2Region); + + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 53, edgeTop + 53, 18, 18, batterySlotDesc, this.width, this.height, this)); + List carbonSlotDesc = new ArrayList(); + carbonSlotDesc.add(GCCoreUtil.translate("gui.carbon_slot.desc.0")); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 27, edgeTop + 53, 18, 18, carbonSlotDesc, this.width, this.height, this)); + + this.fuelTankRegion.xPosition = edgeLeft + 153; + this.fuelTankRegion.yPosition = edgeTop + 28; + this.fuelTankRegion.parentWidth = this.width; + this.fuelTankRegion.parentHeight = this.height; + this.infoRegions.add(this.fuelTankRegion); + + List fuelSlotDesc = new ArrayList(); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.0")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.fuel_output.desc.1")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.methane_output.desc.2")); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 152, edgeTop + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + fuelSlotDesc = new ArrayList(); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.hydrogen_input.desc.0")); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.hydrogen_input.desc.1")); + fuelSlotDesc.add("(" + GCCoreUtil.translate("gui.message.with_atmosphere0.name")); + fuelSlotDesc.add(GCCoreUtil.lowerCaseNoun("fluid.hydrogen")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.message.with_atmosphere1.name") + ")"); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 6, edgeTop + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + fuelSlotDesc = new ArrayList(); + fuelSlotDesc.add(GCCoreUtil.translate("item.atmospheric_valve.name")); + fuelSlotDesc.add("(" + GCCoreUtil.translate("gui.message.with_atmosphere0.name")); + fuelSlotDesc.add(GCCoreUtil.lowerCaseNoun("gas.carbondioxide.name")); + fuelSlotDesc.add(GCCoreUtil.translate("gui.message.with_atmosphere1.name") + ")"); + this.infoRegions.add(new GuiElementInfoRegion(edgeLeft + 27, edgeTop + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + this.electricInfoRegion.xPosition = edgeLeft + 66; + this.electricInfoRegion.yPosition = edgeTop + 16; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + + this.addToolTips(); + + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 28, this.height / 2 - 56, 76, 20, GCCoreUtil.translate("gui.button.liquefy.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.tileEntity.getWorld()), new Object[] + {this.tileEntity.getPos(), 0})); + break; + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 47, 5, 4210752); + String displayText = ""; + int yOffset = -18; + + if (RedstoneUtil.isBlockReceivingRedstone(this.tileEntity.getWorld(), this.tileEntity.getPos())) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.off.name"); + } else if (!this.tileEntity.hasEnoughEnergyToRun) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.message.low_energy.name"); + } else if ((this.tileEntity.processTicks > -8 || this.tileEntity.canProcess())) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.processing.name"); + } else if (this.tileEntity.gasTank.getFluid() == null || this.tileEntity.gasTank.getFluidAmount() == 0) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.nogas.name"); + } else if (this.tileEntity.gasTank.getFluidAmount() > 0 && this.tileEntity.disabled) + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } else if (this.tileEntity.liquidTank.getFluidAmount() == this.tileEntity.liquidTank.getCapacity()) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.tankfull.name"); + } else + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.needs_carbon.name"); + } + + this.buttonDisable.enabled = this.tileEntity.disableCooldown == 0; + this.buttonDisable.displayString = this.tileEntity.processTicks <= -8 ? GCCoreUtil.translate("gui.button.liquefy.name") : GCCoreUtil.translate("gui.button.liquefy_stop.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ":", 72, 45 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(displayText, 75, 45 + 33 + yOffset, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 23, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiMethaneSynthesizer.refineryTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int edgeLeft = (this.width - this.xSize) / 2; + int edgeTop = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(edgeLeft, edgeTop, 0, 0, this.xSize, this.ySize); + + this.mc.renderEngine.bindTexture(GuiMethaneSynthesizer.gasTextures); + int displayInt = this.tileEntity.getScaledGasLevel(38); + this.drawTexturedModalRect(edgeLeft + 7, edgeTop + 17 + 49 - displayInt, 1 + 17, 38 - displayInt, 16, displayInt); + displayInt = this.tileEntity.getScaledGasLevel2(20); + this.drawTexturedModalRect(edgeLeft + 28, edgeTop + 48 - displayInt, 1 + 2 * 17, 38 - displayInt, 16, displayInt); + displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect(edgeLeft + 153, edgeTop + 17 + 49 - displayInt, 1 + 2 * 17, 38 - displayInt, 16, displayInt); + + this.addToolTips(); + + this.mc.renderEngine.bindTexture(GuiMethaneSynthesizer.refineryTexture); + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(edgeLeft + 52, edgeTop + 16, 208, 0, 11, 10); + } + + this.drawTexturedModalRect(edgeLeft + 66, edgeTop + 17, 176, 38, Math.min(this.tileEntity.getScaledElecticalLevel(54), 54), 7); + } + + private void addToolTips() + { + List gasTankDesc = new ArrayList(); + gasTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + FluidStack gasTankContents = this.tileEntity.gasTank != null ? this.tileEntity.gasTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = FluidRegistry.getFluid("hydrogen").getUnlocalizedName(); + if (gasname == null || gasname.equals("fluid.hydrogen")) + { + gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + } + gasTankDesc.add("(" + gasname + ")"); + } else + { + gasTankDesc.add(" "); + } + int gasLevel = gasTankContents != null ? gasTankContents.amount : 0; + int gasCapacity = this.tileEntity.gasTank != null ? this.tileEntity.gasTank.getCapacity() : 0; + gasTankDesc.add(EnumColor.YELLOW + " " + gasLevel + " / " + gasCapacity); + this.gasTankRegion.tooltipStrings = gasTankDesc; + + gasTankDesc = new ArrayList(); + gasTankDesc.add(GCCoreUtil.translate("gas.carbondioxide.name")); + gasTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + gasTankContents = this.tileEntity.gasTank2 != null ? this.tileEntity.gasTank2.getFluid() : null; + if (gasTankContents != null) + { + String gasname = FluidRegistry.getFluid("carbondioxide").getUnlocalizedName(); + if (gasname == null || gasname.equals("fluid.carbondioxide")) + { + gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + } + gasTankDesc.add("(" + gasname + ")"); + } else + { + gasTankDesc.add(" "); + } + gasLevel = gasTankContents != null ? gasTankContents.amount : 0; + gasCapacity = this.tileEntity.gasTank2 != null ? this.tileEntity.gasTank2.getCapacity() : 0; + gasTankDesc.add(EnumColor.YELLOW + " " + gasLevel + " / " + gasCapacity); + this.gasTank2Region.tooltipStrings = gasTankDesc; + + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + gasTankContents = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = FluidRegistry.getFluid("methane").getUnlocalizedName(); + if (gasname == null || gasname.equals("fluid.methane")) + { + gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + } + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + int fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + int fuelCapacity = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + " " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicCargoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicCargoRocket.java new file mode 100644 index 00000000..defd87fe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicCargoRocket.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSchematicCargoRocket; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicCargoRocket extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation cargoRocketTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_cargo.png"); + + private int pageIndex; + + public GuiSchematicCargoRocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicCargoRocket(par1InventoryPlayer, pos), pos); + this.ySize = 220; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(GCCoreUtil.translate("item.rocket_t2.cargo_rocket.name"), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 220 - 104 + 2 + 9, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicCargoRocket.cargoRocketTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicTier2Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicTier2Rocket.java new file mode 100644 index 00000000..02cc74df --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSchematicTier2Rocket.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicResultPage; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiPositionedContainer; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSchematicTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; + +public class GuiSchematicTier2Rocket extends GuiPositionedContainer implements ISchematicResultPage +{ + + private static final ResourceLocation tier2SchematicTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_t2.png"); + + private int pageIndex; + + public GuiSchematicTier2Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + super(new ContainerSchematicTier2Rocket(par1InventoryPlayer, pos), pos); + this.ySize = 238; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 130, this.height / 2 - 110, 40, 20, GCCoreUtil.translate("gui.button.back.name"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 130, this.height / 2 - 110 + 25, 40, 20, GCCoreUtil.translate("gui.button.next.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + SchematicRegistry.flipToLastPage(this, this.pageIndex); + break; + case 1: + SchematicRegistry.flipToNextPage(this, this.pageIndex); + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(MarsItems.rocketMars.getItemStackDisplayName(new ItemStack(MarsItems.rocketMars, 1, 0)), 7, -20 + 27, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 220 - 104 + 2 + 27, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiSchematicTier2Rocket.tier2SchematicTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + public void setPageIndex(int index) + { + this.pageIndex = index; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimeling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimeling.java new file mode 100644 index 00000000..2ee568b5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimeling.java @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.input.Keyboard; + +public class GuiSlimeling extends GuiScreen +{ + + private final int xSize; + private final int ySize; + private static final ResourceLocation slimelingPanelGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/slimeling_panel0.png"); + private final EntitySlimeling slimeling; + + public GuiTextField nameField; + public GuiButton stayButton; + + public static boolean renderingOnGui = false; + + private int invX; + private int invY; + private final int invWidth = 18; + private final int invHeight = 18; + + public GuiSlimeling(EntitySlimeling slimeling) + { + this.slimeling = slimeling; + this.xSize = 176; + this.ySize = 147; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.stayButton = new GuiButton(0, i + 120, j + 122, 50, 20, ""); + this.stayButton.enabled = this.slimeling.isOwner(this.mc.player); + this.stayButton.displayString = this.slimeling.isSitting() ? GCCoreUtil.translate("gui.slimeling.button.follow") : GCCoreUtil.translate("gui.slimeling.button.sit"); + this.buttonList.add(this.stayButton); + this.nameField = new GuiTextField(0, this.fontRenderer, i + 44, j + 59, 103, 12); + this.nameField.setText(this.slimeling.getName()); + this.nameField.setEnableBackgroundDrawing(false); + this.nameField.setMaxStringLength(30); + this.nameField.setFocused(this.slimeling.isOwner(this.mc.player)); + this.nameField.setCanLoseFocus(false); + this.invX = i + 151; + this.invY = j + 76; + } + + @Override + public void updateScreen() + { + if (this.slimeling.isOwner(this.mc.player)) + { + this.nameField.updateCursorCounter(); + } + this.stayButton.displayString = this.slimeling.isSitting() ? GCCoreUtil.translate("gui.slimeling.button.follow") : GCCoreUtil.translate("gui.slimeling.button.sit"); + } + + @Override + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (this.slimeling.isOwner(this.mc.player)) + { + if (this.nameField.textboxKeyTyped(typedChar, keyCode)) + { + this.slimeling.setName(this.nameField.getText()); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(this.slimeling.world), new Object[] + {this.slimeling.getEntityId(), 1, this.slimeling.getName()})); + } + } + super.keyTyped(typedChar, keyCode); + } + + @Override + protected void actionPerformed(GuiButton button) + { + if (button.enabled) + { + switch (button.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(this.slimeling.world), new Object[] + {this.slimeling.getEntityId(), 0, ""})); + break; + } + } + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (this.slimeling.isOwner(this.mc.player)) + { + this.nameField.mouseClicked(mouseX, mouseY, mouseButton); + } + if (mouseX >= this.invX && mouseX < this.invX + this.invWidth && mouseY >= this.invY && mouseY < this.invY + this.invHeight) + { + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(this.slimeling.world), new Object[] + {this.slimeling.getEntityId(), 6, ""})); + } + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + + GlStateManager.pushMatrix(); + GlStateManager.translate(0, 0, -70.0F); + Gui.drawRect(i, j, i + this.xSize, j + this.ySize - 20, 0xFF000000); + GlStateManager.popMatrix(); + + int yOffset = (int) Math.floor(30.0D * (1.0F - this.slimeling.getScale())); + + GuiSlimeling.drawSlimelingOnGui(this.slimeling, this.width / 2, j + 62 - yOffset, 70, i + 51 - mouseX, j + 75 - 50 - mouseY); + + GlStateManager.pushMatrix(); + GlStateManager.translate(0, 0, 150.0F); + this.mc.renderEngine.bindTexture(GuiSlimeling.slimelingPanelGui); + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + this.drawTexturedModalRect(i + this.xSize - 15, j + 9, 176, 0, 9, 9); + this.drawTexturedModalRect(i + this.xSize - 15, j + 22, 185, 0, 9, 9); + this.drawTexturedModalRect(i + this.xSize - 15, j + 35, 194, 0, 9, 9); + String str = "" + Math.round(this.slimeling.getColorRed() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, i + this.xSize - 15 - this.fontRenderer.getStringWidth(str), j + 10, ColorUtil.to32BitColor(255, 255, 0, 0)); + str = "" + Math.round(this.slimeling.getColorGreen() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, i + this.xSize - 15 - this.fontRenderer.getStringWidth(str), j + 23, ColorUtil.to32BitColor(255, 0, 255, 0)); + str = "" + Math.round(this.slimeling.getColorBlue() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, i + this.xSize - 15 - this.fontRenderer.getStringWidth(str), j + 36, ColorUtil.to32BitColor(255, 0, 0, 255)); + + this.mc.renderEngine.bindTexture(GuiSlimeling.slimelingPanelGui); + GlStateManager.color(1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(this.invX, this.invY, 176, 9, this.invWidth, this.invHeight); + + super.drawScreen(mouseX, mouseY, partialTicks); + + int dX = -45; + int dY = 65; + int startX = -20 + i + 60; + int startY = dY + j - 10; + int width = this.xSize - 60; + int height = 15; + Gui.drawRect(startX, startY, startX + width, startY + height, 0xffA0A0A0); + Gui.drawRect(startX + 1, startY + 1, startX + width - 1, startY + height - 1, 0xFF000000); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.slimeling.name") + ": ", dX + i + 55, dY + j - 6, 0x404040); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.slimeling.owner") + ": " + this.slimeling.getOwnerUsername(), dX + i + 55, dY + j + 7, 0x404040); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.slimeling.kills") + ": " + this.slimeling.getKillCount(), dX + i + 55, dY + j + 20, 0x404040); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.slimeling.scale") + ": " + Math.round(this.slimeling.getAge() / (float) this.slimeling.MAX_AGE * 1000.0F) / 10.0F + "%", dX + i + 55, + dY + j + 33, 0x404040); + str = "" + (this.slimeling.isSitting() ? GCCoreUtil.translate("gui.slimeling.sitting") : GCCoreUtil.translate("gui.slimeling.following")); + this.fontRenderer.drawString(str, i + 145 - this.fontRenderer.getStringWidth(str) / 2, j + 112, 0x404040); + str = GCCoreUtil.translate("gui.slimeling.damage") + ": " + Math.round(this.slimeling.getDamage() * 100.0F) / 100.0F; + this.fontRenderer.drawString(str, dX + i + 55, dY + j + 33 + 13, 0x404040); + str = GCCoreUtil.translate("gui.slimeling.food") + ": "; + this.fontRenderer.drawString(str, dX + i + 55, dY + j + 46 + 13, 0x404040); + + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.enableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableRescaleNormal(); + this.mc.getRenderItem().renderItemAndEffectIntoGUI(new ItemStack(this.slimeling.getFavoriteFood()), dX + i + 55 + this.fontRenderer.getStringWidth(str), dY + j + 41 + 14); + GlStateManager.disableLighting(); + GlStateManager.disableBlend(); + this.nameField.drawTextBox(); + GlStateManager.popMatrix(); + ItemStack foodStack = new ItemStack(this.slimeling.getFavoriteFood()); + + if (!foodStack.isEmpty() && mouseX >= this.invX - 66 && mouseX < this.invX + this.invWidth - 68 && mouseY >= this.invY + 44 && mouseY < this.invY + this.invHeight + 42) + { + this.renderToolTip(foodStack, mouseX, mouseY); + } + } + + public static void drawSlimelingOnGui(EntitySlimeling slimeling, int x, int y, int scale, float mouseX, float mouseY) + { + GuiSlimeling.renderingOnGui = true; + GlStateManager.enableColorMaterial(); + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, 50.0F); + GlStateManager.scale(-scale / 2.0F, scale / 2.0F, scale / 2.0F); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + float f2 = slimeling.renderYawOffset; + float f3 = slimeling.rotationYaw; + float f4 = slimeling.rotationPitch; + mouseX += 40; + mouseY -= 20; + GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-((float) Math.atan(mouseY / 40.0F)) * 20.0F, 1.0F, 0.0F, 0.0F); + slimeling.renderYawOffset = (float) Math.atan(mouseX / 40.0F) * 20.0F; + slimeling.rotationYaw = (float) Math.atan(mouseX / 40.0F) * 40.0F; + slimeling.rotationPitch = -((float) Math.atan(mouseY / 40.0F)) * 20.0F; + slimeling.rotationYawHead = slimeling.rotationYaw; + GlStateManager.translate(0.0F, (float) slimeling.getYOffset(), 0.0F); + FMLClientHandler.instance().getClient().getRenderManager().playerViewY = 180.0F; + FMLClientHandler.instance().getClient().getRenderManager().renderEntity(slimeling, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F, false); + slimeling.renderYawOffset = f2; + slimeling.rotationYaw = f3; + slimeling.rotationPitch = f4; + GlStateManager.popMatrix(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.color(1.0F, 1.0F, 1.0F); + GuiSlimeling.renderingOnGui = false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingFeed.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingFeed.java new file mode 100644 index 00000000..b973355c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingFeed.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class GuiSlimelingFeed extends GuiScreen +{ + + private final int xSize; + private final int ySize; + private static final ResourceLocation slimelingPanelGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/slimeling_panel1.png"); + private final EntitySlimeling slimeling; + + public long timeBackspacePressed; + public int cursorPulse; + public int backspacePressed; + public boolean isTextFocused = false; + + public GuiButton buttonGrowSlimeling; + public GuiButton buttonBreedSlimeling; + public GuiButton buttonStrengthenSlimeling; + public GuiButton buttonHealSlimeling; + + public GuiSlimelingFeed(EntitySlimeling slimeling) + { + this.slimeling = slimeling; + this.xSize = 138; + this.ySize = 51; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int var6 = (this.height - this.ySize) / 2; + this.buttonGrowSlimeling = new GuiButton(0, this.width / 2 - 65, var6 - 15, 64, 20, GCCoreUtil.translate("gui.message.grow.name")); + this.buttonList.add(this.buttonGrowSlimeling); + this.buttonBreedSlimeling = new GuiButton(1, this.width / 2 + 1, var6 - 15, 64, 20, GCCoreUtil.translate("gui.message.breed.name")); + this.buttonList.add(this.buttonBreedSlimeling); + this.buttonStrengthenSlimeling = new GuiButton(2, this.width / 2 - 65, var6 + 7, 64, 20, GCCoreUtil.translate("gui.message.strengthen.name")); + this.buttonList.add(this.buttonStrengthenSlimeling); + this.buttonHealSlimeling = new GuiButton(3, this.width / 2 + 1, var6 + 7, 64, 20, GCCoreUtil.translate("gui.message.heal.name")); + this.buttonList.add(this.buttonHealSlimeling); + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (!this.buttonGrowSlimeling.enabled && !this.buttonBreedSlimeling.enabled && !this.buttonStrengthenSlimeling.enabled && !this.buttonHealSlimeling.enabled) + { + super.keyTyped(keyChar, keyID); + } + return; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.slimeling.getEntityId(), 2, ""})); + break; + case 1: + if (!this.slimeling.isInLove() && this.slimeling.isOwner(this.mc.player) && this.slimeling.world.isRemote) + { + this.slimeling.setInLove(this.mc.player); + } + + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.slimeling.getEntityId(), 3, ""})); + break; + case 2: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.slimeling.getEntityId(), 4, ""})); + break; + case 3: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_SLIMELING_DATA, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.slimeling.getEntityId(), 5, ""})); + break; + } + + FMLClientHandler.instance().getClient().displayGuiScreen(null); + } + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + this.mc.renderEngine.bindTexture(GuiSlimelingFeed.slimelingPanelGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6 - 20, 0, 0, this.xSize, this.ySize); + + super.drawScreen(par1, par2, par3); + + this.buttonHealSlimeling.enabled = this.slimeling.getHealth() < Math.floor(this.slimeling.getMaxHealth()); + this.buttonGrowSlimeling.enabled = this.slimeling.getScale() < 1.0F; + this.buttonStrengthenSlimeling.enabled = this.slimeling.getAttackDamage() < 1.0; + this.buttonBreedSlimeling.enabled = !this.slimeling.isInLove() && !this.slimeling.isChild(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingInventory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingInventory.java new file mode 100644 index 00000000..19b43673 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiSlimelingInventory.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class GuiSlimelingInventory extends GuiContainer +{ + + private static final ResourceLocation slimelingPanelGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/slimeling_panel2.png"); + private final EntitySlimeling slimeling; + + private int invX; + private int invY; + private final int invWidth = 18; + private final int invHeight = 18; + + public GuiSlimelingInventory(EntityPlayer player, EntitySlimeling slimeling) + { + super(new ContainerSlimeling(player.inventory, slimeling, FMLClientHandler.instance().getClient().player)); + this.slimeling = slimeling; + this.xSize = 176; + this.ySize = 210; + } + + @Override + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.invX = var5 + 151; + this.invY = var6 + 108; + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + break; + } + } + } + + @Override + protected void mouseClicked(int px, int py, int par3) throws IOException + { + if (px >= this.invX && px < this.invX + this.invWidth && py >= this.invY && py < this.invY + this.invHeight) + { + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + this.mc.displayGuiScreen(new GuiSlimeling(this.slimeling)); + } + + super.mouseClicked(px, py, par3); + } + + @Override + public void drawDefaultBackground() + { + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f, int i, int j) + { + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + + GlStateManager.pushMatrix(); + Gui.drawRect(var5, var6, var5 + this.xSize, var6 + this.ySize, 0xFF000000); + GlStateManager.popMatrix(); + + int yOffset = (int) Math.floor(30.0D * (1.0F - this.slimeling.getScale())); + + GuiSlimeling.drawSlimelingOnGui(this.slimeling, this.width / 2, var6 + 62 - yOffset, 70, var5 + 51 - i, var6 + 75 - 50 - j); + + GlStateManager.translate(0, 0, 100); + + GlStateManager.pushMatrix(); + this.mc.renderEngine.bindTexture(GuiSlimelingInventory.slimelingPanelGui); + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + this.drawTexturedModalRect(var5 + this.xSize - 15, var6 + 9, 176, 0, 9, 9); + this.drawTexturedModalRect(var5 + this.xSize - 15, var6 + 22, 185, 0, 9, 9); + this.drawTexturedModalRect(var5 + this.xSize - 15, var6 + 35, 194, 0, 9, 9); + String str = "" + Math.round(this.slimeling.getColorRed() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, var5 + this.xSize - 15 - this.fontRenderer.getStringWidth(str), var6 + 10, ColorUtil.to32BitColor(255, 255, 0, 0)); + str = "" + Math.round(this.slimeling.getColorGreen() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, var5 + this.xSize - 15 - this.fontRenderer.getStringWidth(str), var6 + 23, ColorUtil.to32BitColor(255, 0, 255, 0)); + str = "" + Math.round(this.slimeling.getColorBlue() * 1000) / 10.0F + "% "; + this.drawString(this.fontRenderer, str, var5 + this.xSize - 15 - this.fontRenderer.getStringWidth(str), var6 + 36, ColorUtil.to32BitColor(255, 0, 0, 255)); + + this.mc.renderEngine.bindTexture(GuiSlimelingInventory.slimelingPanelGui); + GlStateManager.color(1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(this.invX, this.invY, 176, 27, this.invWidth, this.invHeight); + this.drawTexturedModalRect(var5 + 8, var6 + 8, 176, 9, 18, 18); + this.drawTexturedModalRect(var5 + 8, var6 + 29, 176, 9, 18, 18); + + ItemStack stack = this.slimeling.slimelingInventory.getStackInSlot(1); + + if (stack != null && stack.getItem() == MarsItems.marsItemBasic && stack.getItemDamage() == 4) + { + int offsetX = 7; + int offsetY = 53; + + for (int y = 0; y < 3; ++y) + { + for (int x = 0; x < 9; ++x) + { + this.drawTexturedModalRect(var5 + offsetX + x * 18, var6 + offsetY + y * 18, 176, 9, 18, 18); + } + } + } + + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiTerraformer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiTerraformer.java new file mode 100644 index 00000000..64c27e38 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiTerraformer.java @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox.ICheckBoxCallback; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerTerraformer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiTerraformer extends GuiContainerGC implements ICheckBoxCallback +{ + + private static final ResourceLocation terraformerGui = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/terraformer.png"); + private TileEntityTerraformer terraformer; + private GuiButton enableTreesButton; + private GuiButton enableGrassButton; + private GuiElementCheckbox checkboxRenderBubble; + private GuiElementInfoRegion electricInfoRegion = new GuiElementInfoRegion(0, 0, 52, 9, null, 0, 0, this); + private GuiElementInfoRegion waterTankInfoRegion = new GuiElementInfoRegion(0, 0, 41, 28, null, 0, 0, this); + + public GuiTerraformer(InventoryPlayer par1InventoryPlayer, TileEntityTerraformer terraformer) + { + super(new ContainerTerraformer(par1InventoryPlayer, terraformer, FMLClientHandler.instance().getClient().player)); + this.ySize = 237; + this.terraformer = terraformer; + } + + @Override + public void drawScreen(int par1, int par2, float par3) + { + if (this.terraformer.disableCooldown > 0) + { + this.enableTreesButton.enabled = false; + this.enableGrassButton.enabled = false; + } else + { + this.enableTreesButton.enabled = true; + this.enableGrassButton.enabled = true; + } + + this.enableTreesButton.displayString = + GCCoreUtil.translate(this.terraformer.treesDisabled ? "gui.button.enable.name" : "gui.button.disable.name") + " " + GCCoreUtil.translate("gui.message.trees.name"); + this.enableGrassButton.displayString = + GCCoreUtil.translate(this.terraformer.grassDisabled ? "gui.button.enable.name" : "gui.button.disable.name") + " " + GCCoreUtil.translate("gui.message.grass.name"); + + super.drawScreen(par1, par2, par3); + } + + @Override + public void initGui() + { + super.initGui(); + this.electricInfoRegion.tooltipStrings = new ArrayList(); + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 44; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 47; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 24, (this.height - this.ySize) / 2 + 38, 18, 18, batterySlotDesc, this.width, this.height, this)); + batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.show_bubble.desc.0")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 85, (this.height - this.ySize) / 2 + 132, 85, 13, batterySlotDesc, this.width, this.height, this)); + this.waterTankInfoRegion.tooltipStrings = new ArrayList(); + this.waterTankInfoRegion.xPosition = (this.width - this.xSize) / 2 + 55; + this.waterTankInfoRegion.yPosition = (this.height - this.ySize) / 2 + 17; + this.waterTankInfoRegion.parentWidth = this.width; + this.waterTankInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.waterTankInfoRegion); + this.buttonList.clear(); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.enableTreesButton = new GuiButton(0, var5 + 98, var6 + 85, 72, 20, GCCoreUtil.translate("gui.message.enable_trees.name")); + this.enableGrassButton = new GuiButton(1, var5 + 98, var6 + 109, 72, 20, GCCoreUtil.translate("gui.message.enable_grass.name")); + this.buttonList.add(this.enableTreesButton); + this.buttonList.add(this.enableGrassButton); + this.checkboxRenderBubble = new GuiElementCheckbox(2, this, var5 + 85, var6 + 132, GCCoreUtil.translate("gui.message.bubble_visible.name")); + this.buttonList.add(this.checkboxRenderBubble); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + if (par1GuiButton.enabled) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.terraformer.getPos(), 0})); + break; + case 1: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(mc.world), new Object[] + {this.terraformer.getPos(), 1})); + break; + case 2: + break; + default: + break; + } + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = terraformer.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 5, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, 144, 4210752); + this.fontRenderer.drawSplitString(this.getStatus(), 105, 24, this.xSize - 105, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.terraformer.ueWattsPerTick + // * 20, ElectricUnit.WATT), 105, 56, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.terraformer.getVoltage(), + // ElectricUnit.VOLTAGE), 105, 68, 4210752); + } + + private String getStatus() + { + if (RedstoneUtil.isBlockReceivingRedstone(this.terraformer.getWorld(), this.terraformer.getPos())) + { + return EnumColor.RED + GCCoreUtil.translate("gui.status.off.name"); + } + + if (this.terraformer.getEnergyStoredGC() <= 0.0F) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_energy.name"); + } + + if (this.terraformer.grassDisabled && this.terraformer.treesDisabled) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (this.terraformer.waterTank.getFluid() == null || this.terraformer.waterTank.getFluid().amount <= 0) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_water.name"); + } + + if (this.terraformer.getFirstBonemealStack().isEmpty()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_bonemeal.name"); + } + + if (!this.terraformer.grassDisabled && this.terraformer.getFirstSeedStack().isEmpty()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_seeds.name"); + } + + if (!this.terraformer.treesDisabled && this.terraformer.getFirstSaplingStack().isEmpty()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.no_saplings.name"); + } + + if (this.terraformer.getBubbleSize() < this.terraformer.MAX_SIZE - 0.5) + { + return EnumColor.YELLOW + GCCoreUtil.translate("gui.message.bubble_exp.name"); + } + + if (!this.terraformer.treesDisabled && this.terraformer.grassBlocksListSize <= 0) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.trees.name") + ": " + GCCoreUtil.translate("gui.message.no_valid_blocks.name"); + } else if (!this.terraformer.grassDisabled && this.terraformer.terraformableBlocksListSize <= 0) + { + return EnumColor.RED + GCCoreUtil.translate("gui.message.grass.name") + ": " + GCCoreUtil.translate("gui.message.no_valid_blocks.name"); + } + + return EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.message.terraforming.name"); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(GuiTerraformer.terraformerGui); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int scale = this.terraformer.getScaledElecticalLevel(54); + this.drawTexturedModalRect(var5 + 45, var6 + 48, 176, 26, Math.min(scale, 54), 7); + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.terraformer.getEnergyStoredGC(), this.terraformer.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + int waterLevel = this.terraformer.getScaledWaterLevel(100); + List processDesc = new ArrayList(); + processDesc.clear(); + processDesc.add(GCCoreUtil.translate("gui.terraformer.desc.0") + ": " + waterLevel + "%"); + this.waterTankInfoRegion.tooltipStrings = processDesc; + + waterLevel = this.terraformer.getScaledWaterLevel(26); + this.drawTexturedModalRect((this.width - this.xSize) / 2 + 56, (this.height - this.ySize) / 2 + 17 + 27 - waterLevel, 176, 26 - waterLevel, 39, waterLevel); + + this.checkboxRenderBubble.isSelected = this.terraformer.shouldRenderBubble; + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + this.terraformer.shouldRenderBubble = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_ON_ADVANCED_GUI_CLICKED_INT, GCCoreUtil.getDimensionID(mc.world), new Object[] + {6, this.terraformer.getPos(), newSelected ? 1 : 0})); + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return true; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return this.terraformer.shouldRenderBubble; + } + + @Override + public void onIntruderInteraction() + { + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiWaterElectrolyzer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiWaterElectrolyzer.java new file mode 100644 index 00000000..5def9320 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/gui/GuiWaterElectrolyzer.java @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerElectrolyzer; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiWaterElectrolyzer extends GuiContainerGC +{ + + private static final ResourceLocation refineryTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gas_liquefier.png"); + + private static final ResourceLocation gasTextures = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + private final TileEntityElectrolyzer tileEntity; + + private GuiButton buttonDisable; + + private GuiElementInfoRegion fuelTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion fuelTank2Region = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 153, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion gasTankRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 7, (this.height - this.ySize) / 2 + 28, 16, 38, new ArrayList(), this.width, this.height, this); + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 62, (this.height - this.ySize) / 2 + 16, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiWaterElectrolyzer(InventoryPlayer par1InventoryPlayer, TileEntityElectrolyzer tileEntity) + { + super(new ContainerElectrolyzer(par1InventoryPlayer, tileEntity, FMLClientHandler.instance().getClient().player)); + this.tileEntity = tileEntity; + this.ySize = 168; + } + + @Override + public void initGui() + { + super.initGui(); + + this.gasTankRegion.xPosition = (this.width - this.xSize) / 2 + 7; + this.gasTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.gasTankRegion.parentWidth = this.width; + this.gasTankRegion.parentHeight = this.height; + this.infoRegions.add(this.gasTankRegion); + + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 33, (this.height - this.ySize) / 2 + 49, 18, 18, batterySlotDesc, this.width, this.height, this)); + + this.fuelTankRegion.xPosition = (this.width - this.xSize) / 2 + 132; + this.fuelTankRegion.yPosition = (this.height - this.ySize) / 2 + 28; + this.fuelTankRegion.parentWidth = this.width; + this.fuelTankRegion.parentHeight = this.height; + this.infoRegions.add(this.fuelTankRegion); + + this.fuelTank2Region.xPosition = (this.width - this.xSize) / 2 + 153; + this.fuelTank2Region.yPosition = (this.height - this.ySize) / 2 + 28; + this.fuelTank2Region.parentWidth = this.width; + this.fuelTank2Region.parentHeight = this.height; + this.infoRegions.add(this.fuelTank2Region); + + List fuelSlotDesc = new ArrayList(); + fuelSlotDesc.addAll(GCCoreUtil.translateWithSplit("gui.water_bucket_slot.desc")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 6, (this.height - this.ySize) / 2 + 6, 18, 18, fuelSlotDesc, this.width, this.height, this)); + + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 42; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 16; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + + this.addToolTips(); + + this.buttonList.add(this.buttonDisable = new GuiButton(0, this.width / 2 - 49, this.height / 2 - 56, 76, 20, GCCoreUtil.translate("gui.button.liquefy.name"))); + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.tileEntity.getWorld()), new Object[] + {this.tileEntity.getPos(), 0})); + break; + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString(this.tileEntity.getName(), 30, 5, 4210752); + String displayText = ""; + int yOffset = -18; + + if (RedstoneUtil.isBlockReceivingRedstone(this.tileEntity.getWorld(), this.tileEntity.getPos())) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.off.name"); + } else if (!this.tileEntity.hasEnoughEnergyToRun) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.message.low_energy.name"); + } else if (this.tileEntity.waterTank.getFluid() == null || this.tileEntity.waterTank.getFluidAmount() == 0) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.message.zero_water.name"); + } else if (this.tileEntity.waterTank.getFluidAmount() > 0 && this.tileEntity.disabled) + { + displayText = EnumColor.ORANGE + GCCoreUtil.translate("gui.status.ready.name"); + } else if (this.tileEntity.canProcess()) + { + displayText = EnumColor.BRIGHT_GREEN + GCCoreUtil.translate("gui.status.running.name"); + } else if (this.tileEntity.liquidTank.getFluidAmount() == this.tileEntity.liquidTank.getCapacity() && this.tileEntity.liquidTank2.getFluidAmount() == this.tileEntity.liquidTank2.getCapacity()) + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.tanksfull.name"); + } else + { + displayText = EnumColor.RED + GCCoreUtil.translate("gui.status.unknown.name"); + } + + this.buttonDisable.enabled = this.tileEntity.disableCooldown == 0; + this.buttonDisable.displayString = this.tileEntity.processTicks == 0 ? GCCoreUtil.translate("gui.button.liquefy.name") : GCCoreUtil.translate("gui.button.liquefy_stop.name"); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.status.name") + ":", 56, 45 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(displayText, 62, 45 + 33 + yOffset, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.tileEntity.ueWattsPerTick + // * 20, ElectricUnit.WATT), 72, 56 + 23 + yOffset, 4210752); + // this.fontRenderer.drawString(ElectricityDisplay.getDisplay(this.tileEntity.getVoltage(), + // ElectricUnit.VOLTAGE), 72, 68 + 23 + yOffset, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 118 + 2 + 23, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + this.mc.renderEngine.bindTexture(GuiWaterElectrolyzer.refineryTexture); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int edgeLeft = (this.width - this.xSize) / 2; + int edgeTop = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(edgeLeft, edgeTop, 0, 0, this.xSize, this.ySize); + + int waterLevel = this.tileEntity.getScaledGasLevel(38); + // Water + this.mc.renderEngine.bindTexture(GuiWaterElectrolyzer.gasTextures); + this.drawTexturedModalRect(edgeLeft + 7, edgeTop + 17 + 49 - waterLevel, 1 + 4 * 17, 38 - waterLevel, 16, waterLevel); + // Oxygen + int displayInt = this.tileEntity.getScaledFuelLevel(38); + this.drawTexturedModalRect(edgeLeft + 132, edgeTop + 17 + 49 - displayInt, 34 + 1, 38 - displayInt, 16, displayInt); + // Hydrogen + displayInt = this.tileEntity.getScaledFuelLevel2(38); + this.drawTexturedModalRect(edgeLeft + 153, edgeTop + 17 + 49 - displayInt, 17 + 1, 38 - displayInt, 16, displayInt); + + this.addToolTips(); + + this.mc.renderEngine.bindTexture(GuiWaterElectrolyzer.refineryTexture); + + if (this.tileEntity.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(edgeLeft + 28, edgeTop + 16, 208, 0, 11, 10); + } + + this.drawTexturedModalRect(edgeLeft + 42, edgeTop + 17, 176, 38, Math.min(this.tileEntity.getScaledElecticalLevel(54), 54), 7); + } + + private void addToolTips() + { + List gasTankDesc = new ArrayList(); + gasTankDesc.add(GCCoreUtil.translate("gui.terraformer.desc.0")); + this.gasTankRegion.tooltipStrings = gasTankDesc; + + List fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + FluidStack gasTankContents = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getFluid() : null; + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + int fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + int fuelCapacity = this.tileEntity.liquidTank != null ? this.tileEntity.liquidTank.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + " " + fuelLevel + " / " + fuelCapacity); + this.fuelTankRegion.tooltipStrings = fuelTankDesc; + + fuelTankDesc = new ArrayList(); + fuelTankDesc.add(GCCoreUtil.translate("gui.gas_tank.desc.0")); + gasTankContents = this.tileEntity.liquidTank2 != null ? this.tileEntity.liquidTank2.getFluid() : null; + if (gasTankContents != null) + { + String gasname = GCCoreUtil.translate(gasTankContents.getFluid().getUnlocalizedName()); + fuelTankDesc.add("(" + gasname + ")"); + } else + { + fuelTankDesc.add(" "); + } + fuelLevel = gasTankContents != null ? gasTankContents.amount : 0; + fuelCapacity = this.tileEntity.liquidTank2 != null ? this.tileEntity.liquidTank2.getCapacity() : 0; + fuelTankDesc.add(EnumColor.YELLOW + " " + fuelLevel + " / " + fuelCapacity); + this.fuelTank2Region.tooltipStrings = fuelTankDesc; + + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.tileEntity.getEnergyStoredGC(), this.tileEntity.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/GalacticraftMarsJEI.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/GalacticraftMarsJEI.java new file mode 100644 index 00000000..a1cd1040 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/GalacticraftMarsJEI.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei; + +import javax.annotation.Nonnull; +import mezz.jei.api.BlankModPlugin; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.IModRegistry; +import mezz.jei.api.JEIPlugin; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket.CargoRocketRecipeCategory; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket.CargoRocketRecipeMaker; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket.CargoRocketRecipeWrapper; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier.GasLiquefierRecipeCategory; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier.GasLiquefierRecipeMaker; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier.GasLiquefierRecipeWrapper; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth.MethaneSynthRecipeCategory; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth.MethaneSynthRecipeMaker; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth.MethaneSynthRecipeWrapper; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket.Tier2RocketRecipeCategory; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket.Tier2RocketRecipeMaker; +import micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket.Tier2RocketRecipeWrapper; +import net.minecraft.item.ItemStack; + +@JEIPlugin +public class GalacticraftMarsJEI extends BlankModPlugin +{ + + @Override + public void register(@Nonnull IModRegistry registry) + { + registry.handleRecipes(INasaWorkbenchRecipe.class, Tier2RocketRecipeWrapper::new, RecipeCategories.ROCKET_T2_ID); + registry.handleRecipes(GasLiquefierRecipeWrapper.class, recipe -> recipe, RecipeCategories.GAS_LIQUEFIER_ID); + registry.handleRecipes(INasaWorkbenchRecipe.class, CargoRocketRecipeWrapper::new, RecipeCategories.ROCKET_CARGO_ID); + registry.handleRecipes(MethaneSynthRecipeWrapper.class, recipe -> recipe, RecipeCategories.METHANE_SYNTHESIZER_ID); + + registry.addRecipes(Tier2RocketRecipeMaker.getRecipesList(), RecipeCategories.ROCKET_T2_ID); + registry.addRecipes(GasLiquefierRecipeMaker.getRecipesList(), RecipeCategories.GAS_LIQUEFIER_ID); + registry.addRecipes(CargoRocketRecipeMaker.getRecipesList(), RecipeCategories.ROCKET_CARGO_ID); + registry.addRecipes(MethaneSynthRecipeMaker.getRecipesList(), RecipeCategories.METHANE_SYNTHESIZER_ID); + + registry.addRecipeCatalyst(new ItemStack(GCBlocks.nasaWorkbench), RecipeCategories.ROCKET_T2_ID, RecipeCategories.ROCKET_CARGO_ID); + registry.addRecipeCatalyst(new ItemStack(GCBlocks.compactNasaWorkbench), RecipeCategories.ROCKET_T2_ID, RecipeCategories.ROCKET_CARGO_ID); + registry.addRecipeCatalyst(new ItemStack(MarsBlocks.machineT2), RecipeCategories.GAS_LIQUEFIER_ID); + registry.addRecipeCatalyst(new ItemStack(MarsBlocks.machineT2, 1, 4), RecipeCategories.METHANE_SYNTHESIZER_ID); + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registry) + { + IGuiHelper guiHelper = registry.getJeiHelpers().getGuiHelper(); + registry.addRecipeCategories(new Tier2RocketRecipeCategory(guiHelper), new GasLiquefierRecipeCategory(guiHelper), new CargoRocketRecipeCategory(guiHelper), + new MethaneSynthRecipeCategory(guiHelper)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeCategory.java new file mode 100644 index 00000000..19ef66cf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeCategory.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.util.ResourceLocation; + +public class CargoRocketRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation rocketGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_cargo.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public CargoRocketRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(rocketGuiTexture, 3, 4, 168, 125); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ROCKET_CARGO_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 44, 13); + itemstacks.init(1, true, 44, 31); + itemstacks.init(2, true, 35, 49); + itemstacks.init(3, true, 35, 67); + itemstacks.init(4, true, 35, 85); + itemstacks.init(5, true, 53, 49); + itemstacks.init(6, true, 53, 67); + itemstacks.init(7, true, 53, 85); + itemstacks.init(8, true, 17, 85); + itemstacks.init(9, true, 71, 85); + itemstacks.init(10, true, 44, 103); + itemstacks.init(11, true, 17, 103); + itemstacks.init(12, true, 71, 103); + itemstacks.init(13, true, 89, 7); + itemstacks.init(14, true, 115, 7); + itemstacks.init(15, true, 141, 7); + itemstacks.init(16, false, 138, 91); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeMaker.java new file mode 100644 index 00000000..fc4cf3b4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeMaker.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeMaker; + +public class CargoRocketRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getCargoRocketRecipes()) + { + int chests = Tier1RocketRecipeMaker.countChests(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeWrapper.java new file mode 100644 index 00000000..f11002e8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/cargorocket/CargoRocketRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.cargorocket; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class CargoRocketRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public CargoRocketRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(this.recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeCategory.java new file mode 100644 index 00000000..3e1a2071 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeCategory.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier; + +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.client.Minecraft; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class GasLiquefierRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation refineryGuiTex = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gas_liquefier_recipe.png"); + private static final ResourceLocation gasesTex = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated methaneBarInput; + @Nonnull private final IDrawableAnimated oxygenBarInput; + @Nonnull private final IDrawableAnimated nitrogenBarInput; + @Nonnull private final IDrawableAnimated fuelBarOutput; + @Nonnull private final IDrawableAnimated oxygenBarOutput; + @Nonnull private final IDrawableAnimated nitrogenBarOutput; + + private int inputGas = 2; + private int outputGas = 2; + + public GasLiquefierRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(refineryGuiTex, 3, 4, 168, 64); + this.localizedName = GCCoreUtil.translate("tile.mars_machine.4.name"); + + IDrawableStatic methaneBar = guiHelper.createDrawable(gasesTex, 1, 0, 16, 38); + this.methaneBarInput = guiHelper.createAnimatedDrawable(methaneBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic oxygenBar = guiHelper.createDrawable(gasesTex, 18, 0, 16, 38); + this.oxygenBarInput = guiHelper.createAnimatedDrawable(oxygenBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic atmosphereBar = guiHelper.createDrawable(gasesTex, 34, 0, 16, 38); + this.nitrogenBarInput = guiHelper.createAnimatedDrawable(atmosphereBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic fuelBar = guiHelper.createDrawable(refineryGuiTex, 176, 0, 16, 38); + this.fuelBarOutput = guiHelper.createAnimatedDrawable(fuelBar, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + this.oxygenBarOutput = guiHelper.createAnimatedDrawable(oxygenBar, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + IDrawableStatic nitrogenBar = guiHelper.createDrawable(gasesTex, 68, 0, 16, 38); + this.nitrogenBarOutput = guiHelper.createAnimatedDrawable(nitrogenBar, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.GAS_LIQUEFIER_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + IDrawableAnimated input; + IDrawableAnimated output; + + switch (this.inputGas) + { + case 0: + input = this.methaneBarInput; + break; + case 1: + input = this.oxygenBarInput; + break; + default: + input = this.nitrogenBarInput; + break; + } + + switch (this.outputGas) + { + case 0: + output = this.fuelBarOutput; + break; + case 3: + output = this.oxygenBarOutput; + break; + default: + output = this.nitrogenBarOutput; + break; + } + + input.draw(minecraft, 40, 24); + output.draw(minecraft, this.outputGas == 0 || this.outputGas == 3 ? 124 : 105, 24); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 39, 2); + itemstacks.init(1, false, 104, 2); + itemstacks.init(2, false, 123, 2); + + if (recipeWrapper instanceof GasLiquefierRecipeWrapper) + { + GasLiquefierRecipeWrapper gasLiquefierRecipeWrapper = (GasLiquefierRecipeWrapper) recipeWrapper; + List input = ingredients.getInputs(ItemStack.class).get(0); + List output = ingredients.getOutputs(ItemStack.class).get(0); + itemstacks.set(0, input); + + Item inputItem = input.get(0).getItem(); + if (inputItem == AsteroidsItems.methaneCanister) + { + this.inputGas = 0; + } else if (inputItem == AsteroidsItems.canisterLOX) + { + this.inputGas = 1; + } + + Item outputItem = output.get(0).getItem(); + if (outputItem == GCItems.fuelCanister) + { + this.outputGas = 0; + } else if (outputItem == AsteroidsItems.canisterLOX) + { + this.outputGas = 3; + } else + { + this.outputGas = 4; + } + + itemstacks.set(this.outputGas == 0 || this.outputGas == 3 ? 2 : 1, output); + } + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeMaker.java new file mode 100644 index 00000000..88c2911c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeMaker.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.item.ItemStack; + +public class GasLiquefierRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.methaneCanister, 1, 1), new ItemStack(GCItems.fuelCanister, 1, 1))); + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.atmosphericValve), new ItemStack(AsteroidsItems.canisterLN2, 1, 1))); + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.atmosphericValve), new ItemStack(AsteroidsItems.canisterLOX, 1, 1))); + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.canisterLN2, 1, 501), new ItemStack(AsteroidsItems.canisterLN2, 1, 1))); + recipes.add(new GasLiquefierRecipeWrapper(new ItemStack(AsteroidsItems.canisterLOX, 1, 501), new ItemStack(AsteroidsItems.canisterLOX, 1, 1))); + + return recipes; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeWrapper.java new file mode 100644 index 00000000..b93c65a5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/gasliquefier/GasLiquefierRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.gasliquefier; + +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class GasLiquefierRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ItemStack input; + @Nonnull private final ItemStack output; + + public GasLiquefierRecipeWrapper(@Nonnull ItemStack input, @Nonnull ItemStack output) + { + this.input = input; + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInput(ItemStack.class, this.input); + ingredients.setOutput(ItemStack.class, this.output); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeCategory.java new file mode 100644 index 00000000..69da0705 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeCategory.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth; + +import java.util.List; +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import net.minecraft.client.Minecraft; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class MethaneSynthRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation refineryGuiTex = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/methane_synthesizer_recipe.png"); + private static final ResourceLocation gasesTex = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/gases_methane_oxygen_nitrogen.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + @Nonnull private final IDrawableAnimated hydrogenBarInput; + @Nonnull private final IDrawableAnimated carbonDioxideBarInput; + @Nonnull private final IDrawableAnimated methaneBarOutput; + + boolean fillAtmos = false; + + public MethaneSynthRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(refineryGuiTex, 3, 4, 168, 66); + this.localizedName = GCCoreUtil.translate("tile.mars_machine.5.name"); + + IDrawableStatic hydrogenBar = guiHelper.createDrawable(gasesTex, 35, 0, 16, 38); + this.hydrogenBarInput = guiHelper.createAnimatedDrawable(hydrogenBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic carbonDioxideBar = guiHelper.createDrawable(gasesTex, 35, 0, 16, 20); + this.carbonDioxideBarInput = guiHelper.createAnimatedDrawable(carbonDioxideBar, 70, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic methaneBar = guiHelper.createDrawable(gasesTex, 1, 0, 16, 38); + this.methaneBarOutput = guiHelper.createAnimatedDrawable(methaneBar, 70, IDrawableAnimated.StartDirection.BOTTOM, false); + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.METHANE_SYNTHESIZER_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void drawExtras(@Nonnull Minecraft minecraft) + { + if (this.fillAtmos) + { + this.hydrogenBarInput.draw(minecraft, 29, 24); + this.carbonDioxideBarInput.draw(minecraft, 50, 24); + } else + { + this.hydrogenBarInput.draw(minecraft, 29, 24); + } + this.methaneBarOutput.draw(minecraft, 114, 24); + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 28, 2); + itemstacks.init(1, true, 49, 2); + itemstacks.init(2, true, 49, 48); + itemstacks.init(3, false, 113, 2); + + if (recipeWrapper instanceof MethaneSynthRecipeWrapper) + { + MethaneSynthRecipeWrapper gasLiquefierRecipeWrapper = (MethaneSynthRecipeWrapper) recipeWrapper; + List input = ingredients.getInputs(ItemStack.class).get(0); + + Item inputItem = input.get(0).getItem(); + if (inputItem == AsteroidsItems.atmosphericValve) + { + this.fillAtmos = true; + itemstacks.set(1, input); + } else + { + this.fillAtmos = false; + itemstacks.set(2, input); + } + + itemstacks.set(3, ingredients.getOutputs(ItemStack.class).get(0)); + } + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeMaker.java new file mode 100644 index 00000000..14885241 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeMaker.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.item.ItemStack; + +public class MethaneSynthRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + recipes.add(new MethaneSynthRecipeWrapper(new ItemStack(AsteroidsItems.atmosphericValve), new ItemStack(AsteroidsItems.methaneCanister, 1, 1))); + recipes.add(new MethaneSynthRecipeWrapper(new ItemStack(MarsItems.carbonFragments, 25, 0), new ItemStack(AsteroidsItems.methaneCanister, 1, 1))); + + return recipes; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeWrapper.java new file mode 100644 index 00000000..ad578ce9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/methanesynth/MethaneSynthRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.methanesynth; + +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.item.ItemStack; + +public class MethaneSynthRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final ItemStack input; + @Nonnull private final ItemStack output; + + public MethaneSynthRecipeWrapper(@Nonnull ItemStack input, @Nonnull ItemStack output) + { + this.input = input; + this.output = output; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInput(ItemStack.class, this.input); + ingredients.setOutput(ItemStack.class, this.output); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeCategory.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeCategory.java new file mode 100644 index 00000000..e823f729 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeCategory.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket; + +import javax.annotation.Nonnull; +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.core.client.jei.RecipeCategories; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.util.ResourceLocation; + +public class Tier2RocketRecipeCategory implements IRecipeCategory +{ + + private static final ResourceLocation rocketGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/schematic_rocket_t2_recipe.png"); + + @Nonnull private final IDrawable background; + @Nonnull private final String localizedName; + + public Tier2RocketRecipeCategory(IGuiHelper guiHelper) + { + this.background = guiHelper.createDrawable(rocketGuiTexture, 0, 0, 168, 126); + this.localizedName = GCCoreUtil.translate("tile.rocket_workbench.name"); + + } + + @Nonnull + @Override + public String getUid() + { + return RecipeCategories.ROCKET_T2_ID; + } + + @Nonnull + @Override + public String getTitle() + { + return this.localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() + { + return this.background; + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) + { + IGuiItemStackGroup itemstacks = recipeLayout.getItemStacks(); + + itemstacks.init(0, true, 44, 0); + itemstacks.init(1, true, 35, 18); + itemstacks.init(2, true, 35, 36); + itemstacks.init(3, true, 35, 54); + itemstacks.init(4, true, 35, 72); + itemstacks.init(5, true, 35, 90); + itemstacks.init(6, true, 53, 18); + itemstacks.init(7, true, 53, 36); + itemstacks.init(8, true, 53, 54); + itemstacks.init(9, true, 53, 72); + itemstacks.init(10, true, 53, 90); + itemstacks.init(11, true, 17, 72); // Booster left + itemstacks.init(12, true, 17, 90); + itemstacks.init(13, true, 71, 90); + itemstacks.init(14, true, 44, 108); // Rocket + itemstacks.init(15, true, 71, 72); // Booster right + itemstacks.init(16, true, 17, 108); + itemstacks.init(17, true, 71, 108); + itemstacks.init(18, true, 89, 7); + itemstacks.init(19, true, 115, 7); + itemstacks.init(20, true, 141, 7); + itemstacks.init(21, false, 138, 95); + + itemstacks.set(ingredients); + } + + @Override + public String getModName() + { + return GalacticraftPlanets.NAME; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeMaker.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeMaker.java new file mode 100644 index 00000000..6dab5a30 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeMaker.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.client.jei.tier1rocket.Tier1RocketRecipeMaker; + +public class Tier2RocketRecipeMaker +{ + + public static List getRecipesList() + { + List recipes = new ArrayList<>(); + + int chestCount = -1; + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT2Recipes()) + { + int chests = Tier1RocketRecipeMaker.countChests(recipe); + if (chests == chestCount) + continue; + chestCount = chests; + recipes.add(recipe); + } + + return recipes; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeWrapper.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeWrapper.java new file mode 100644 index 00000000..7d9534af --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/jei/tier2rocket/Tier2RocketRecipeWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.jei.tier2rocket; + +import com.google.common.collect.Lists; +import javax.annotation.Nonnull; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import net.minecraft.item.ItemStack; + +public class Tier2RocketRecipeWrapper implements IRecipeWrapper +{ + + @Nonnull private final INasaWorkbenchRecipe recipe; + + public Tier2RocketRecipeWrapper(@Nonnull INasaWorkbenchRecipe recipe) + { + this.recipe = recipe; + } + + @Override + public void getIngredients(IIngredients ingredients) + { + ingredients.setInputs(ItemStack.class, Lists.newArrayList(this.recipe.getRecipeInput().values())); + ingredients.setOutput(ItemStack.class, this.recipe.getRecipeOutput()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelBalloonParachute.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelBalloonParachute.java new file mode 100644 index 00000000..c5b770c9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelBalloonParachute.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class ModelBalloonParachute extends ModelBase +{ + + private static final ResourceLocation grayParachuteTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/parachute/gray.png"); + + public ModelRenderer[] parachute = new ModelRenderer[3]; + public ModelRenderer[] parachuteStrings = new ModelRenderer[4]; + + public ModelBalloonParachute() + { + this(0.0F); + } + + public ModelBalloonParachute(float par1) + { + super(); + + this.parachute[0] = new ModelRenderer(this, 0, 0).setTextureSize(512, 256); + this.parachute[0].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, par1); + this.parachute[0].setRotationPoint(15.0F, 4.0F, 0.0F); + this.parachute[1] = new ModelRenderer(this, 0, 42).setTextureSize(512, 256); + this.parachute[1].addBox(-20.0F, -45.0F, -20.0F, 40, 2, 40, par1); + this.parachute[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachute[2] = new ModelRenderer(this, 0, 0).setTextureSize(512, 256); + this.parachute[2].addBox(-20.0F, -45.0F, -20.0F, 10, 2, 40, par1); + this.parachute[2].setRotationPoint(11F, -11, 0.0F); + + this.parachuteStrings[0] = new ModelRenderer(this, 100, 0).setTextureSize(512, 256); + this.parachuteStrings[0].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[0].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[1] = new ModelRenderer(this, 100, 0).setTextureSize(512, 256); + this.parachuteStrings[1].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[1].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[2] = new ModelRenderer(this, 100, 0).setTextureSize(512, 256); + this.parachuteStrings[2].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[2].setRotationPoint(0.0F, 0.0F, 0.0F); + this.parachuteStrings[3] = new ModelRenderer(this, 100, 0).setTextureSize(512, 256); + this.parachuteStrings[3].addBox(-0.5F, 0.0F, -0.5F, 1, 40, 1, par1); + this.parachuteStrings[3].setRotationPoint(0.0F, 0.0F, 0.0F); + } + + public void renderAll() + { + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelBalloonParachute.grayParachuteTexture); + + int i; + + for (i = 0; i < this.parachute.length; i++) + { + this.parachute[i].render(0.0625F); + } + + for (i = 0; i < this.parachuteStrings.length; i++) + { + this.parachuteStrings[i].render(0.0625F); + } + + this.parachute[0].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleY = (float) (0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleY = (float) -(0 / Constants.RADIANS_TO_DEGREES); + + this.parachute[0].setRotationPoint(-5.85F, -11.0F, 2.0F); + this.parachute[1].setRotationPoint(9F, -7F, 2.0F); + this.parachute[2].setRotationPoint(-2.15F, 4.0F, 2.0F); + this.parachute[0].rotateAngleZ = (float) (210F / Constants.RADIANS_TO_DEGREES); + this.parachute[1].rotateAngleZ = (float) (180F / Constants.RADIANS_TO_DEGREES); + this.parachute[2].rotateAngleZ = (float) -(210F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleZ = (float) ((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[0].setRotationPoint(9.0F, 3.0F, 2.0F); + this.parachuteStrings[1].rotateAngleZ = (float) ((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[1].setRotationPoint(9.0F, 3.0F, 2.0F); + + this.parachuteStrings[2].rotateAngleZ = (float) -((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].rotateAngleX = (float) (23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[2].setRotationPoint(9.0F, 3.0F, 2.0F); + this.parachuteStrings[3].rotateAngleZ = (float) -((155F + 180F) / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].rotateAngleX = (float) -(23F / Constants.RADIANS_TO_DEGREES); + this.parachuteStrings[3].setRotationPoint(9.0F, 3.0F, 2.0F); + } + + public void renderParachute() + { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelCreeperBoss.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelCreeperBoss.java new file mode 100644 index 00000000..898a1cdc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelCreeperBoss.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelCreeperBoss extends ModelBase +{ + + ModelRenderer headMain; + ModelRenderer bodyMain; + ModelRenderer rightLegFront; + ModelRenderer leftLegFront; + ModelRenderer rightLeg; + ModelRenderer leftLeg; + ModelRenderer oxygenTank; + ModelRenderer headLeft; + ModelRenderer headRight; + ModelRenderer neckRight; + ModelRenderer neckLeft; + + public ModelCreeperBoss() + { + this(0.0F); + } + + public ModelCreeperBoss(float scale) + { + this.textureWidth = 128; + this.textureHeight = 64; + this.neckRight = new ModelRenderer(this, 16, 20); + this.neckRight.mirror = true; + this.neckRight.addBox(-2.5F, -9F, -1.5F, 5, 9, 3, scale); + this.neckRight.setRotationPoint(-3F, 10F, 0F); + this.neckRight.setTextureSize(128, 64); + this.neckRight.mirror = true; + this.setRotation(this.neckRight, 0F, 0F, -1.169371F); + this.neckRight.mirror = false; + this.neckLeft = new ModelRenderer(this, 16, 20); + this.neckLeft.addBox(-2.5F, -9F, -1.5F, 5, 9, 3, scale); + this.neckLeft.setRotationPoint(3F, 10F, 0F); + this.neckLeft.setTextureSize(128, 64); + this.neckLeft.mirror = true; + this.setRotation(this.neckLeft, 0F, 0F, 1.169371F); + this.headMain = new ModelRenderer(this, 0, 0); + this.headMain.addBox(-4F, -8F, -4F, 8, 8, 8, scale); + this.headMain.setRotationPoint(0F, 6F, 0F); + this.headMain.setTextureSize(128, 64); + this.headMain.mirror = true; + this.setRotation(this.headMain, 0F, 0F, 0F); + this.bodyMain = new ModelRenderer(this, 16, 16); + this.bodyMain.addBox(-4F, 0F, -2F, 8, 12, 4, scale); + this.bodyMain.setRotationPoint(0F, 6F, 0F); + this.bodyMain.setTextureSize(128, 64); + this.bodyMain.mirror = true; + this.setRotation(this.bodyMain, 0F, 0F, 0F); + this.rightLegFront = new ModelRenderer(this, 0, 16); + this.rightLegFront.addBox(-2F, 0F, -2F, 4, 6, 4, scale); + this.rightLegFront.setRotationPoint(-2F, 18F, -4F); + this.rightLegFront.setTextureSize(128, 64); + this.rightLegFront.mirror = true; + this.setRotation(this.rightLegFront, 0F, 0F, 0F); + this.leftLegFront = new ModelRenderer(this, 0, 16); + this.leftLegFront.addBox(-2F, 0F, -2F, 4, 6, 4, scale); + this.leftLegFront.setRotationPoint(2F, 18F, -4F); + this.leftLegFront.setTextureSize(128, 64); + this.leftLegFront.mirror = true; + this.setRotation(this.leftLegFront, 0F, 0F, 0F); + this.rightLeg = new ModelRenderer(this, 0, 16); + this.rightLeg.addBox(0F, 0F, -2F, 4, 6, 4, scale); + this.rightLeg.setRotationPoint(-4F, 18F, 4F); + this.rightLeg.setTextureSize(128, 64); + this.rightLeg.mirror = true; + this.setRotation(this.rightLeg, 0F, 0F, 0F); + this.leftLeg = new ModelRenderer(this, 0, 16); + this.leftLeg.addBox(-2F, 0F, -2F, 4, 6, 4, scale); + this.leftLeg.setRotationPoint(2F, 18F, 4F); + this.leftLeg.setTextureSize(128, 64); + this.leftLeg.mirror = true; + this.setRotation(this.leftLeg, 0F, 0F, 0F); + this.oxygenTank = new ModelRenderer(this, 40, 0); + this.oxygenTank.addBox(-5F, -9F, -5F, 10, 10, 10, scale); + this.oxygenTank.setRotationPoint(0F, 6F, 0F); + this.oxygenTank.setTextureSize(128, 64); + this.oxygenTank.mirror = true; + this.setRotation(this.oxygenTank, 0F, 0F, 0F); + this.headLeft = new ModelRenderer(this, 0, 0); + this.headLeft.addBox(1F, -9F, -4F, 8, 8, 8, scale); + this.headLeft.setRotationPoint(3F, 6F, 0.1F); + this.headLeft.setTextureSize(128, 64); + this.headLeft.mirror = true; + this.setRotation(this.headLeft, 0F, 0F, 0.7853982F); + this.headRight = new ModelRenderer(this, 0, 0); + this.headRight.addBox(-9F, -9F, -4F, 8, 8, 8, scale); + this.headRight.setRotationPoint(-3F, 6F, -0.1F); + this.headRight.setTextureSize(128, 64); + this.headRight.mirror = true; + this.setRotation(this.headRight, 0F, 0F, -0.7853982F); + + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + final EntityCreeperBoss creeper = (EntityCreeperBoss) entity; + + if (creeper.headsRemaining > 2) + { + this.headLeft.render(f5); + this.neckLeft.render(f5); + this.headRight.render(f5); + this.neckRight.render(f5); + this.headMain.render(f5); + this.oxygenTank.render(f5); + } else if (creeper.headsRemaining > 1) + { + this.headRight.render(f5); + this.neckRight.render(f5); + this.headMain.render(f5); + this.oxygenTank.render(f5); + } else if (creeper.headsRemaining > 0) + { + this.headMain.render(f5); + this.oxygenTank.render(f5); + } + + this.bodyMain.render(f5); + this.rightLegFront.render(f5); + this.leftLegFront.render(f5); + this.rightLeg.render(f5); + this.leftLeg.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.headMain.rotateAngleY = f3 / Constants.RADIANS_TO_DEGREES; + this.headMain.rotateAngleX = f4 / Constants.RADIANS_TO_DEGREES; + this.oxygenTank.rotateAngleY = f3 / Constants.RADIANS_TO_DEGREES; + this.oxygenTank.rotateAngleX = f4 / Constants.RADIANS_TO_DEGREES; + this.rightLegFront.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; + this.leftLegFront.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 2F * f1; + this.leftLeg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 2F * f1; + this.rightLeg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 2F * f1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSlimeling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSlimeling.java new file mode 100644 index 00000000..b1ee733c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSlimeling.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelSlimeling extends ModelBase +{ + + ModelRenderer tail3; + ModelRenderer tail2; + ModelRenderer tail1; + ModelRenderer bodyMain; + ModelRenderer neck; + ModelRenderer head; + + public ModelSlimeling(float scale) + { + this.textureWidth = 256; + this.textureHeight = 128; + + this.head = new ModelRenderer(this, 196, 25); + this.head.addBox(-4.5F, -15.7F, 0.5F, 9, 9, 9); + this.head.setRotationPoint(0F, 0F, 0F); + this.head.setTextureSize(256, 128); + this.head.mirror = true; + this.setRotation(this.head, 0F, 0F, 0F); + this.tail3 = new ModelRenderer(this, 0, 25); + this.tail3.addBox(-3.5F, 1F, -17F, 7, 5, 7); + this.tail3.setRotationPoint(0F, 0F, 0F); + this.tail3.setTextureSize(256, 128); + this.tail3.mirror = true; + this.setRotation(this.tail3, 0F, 0F, 0F); + this.tail2 = new ModelRenderer(this, 28, 25); + this.tail2.addBox(-4.5F, -1F, -15F, 9, 7, 9); + this.tail2.setRotationPoint(0F, 0F, 0F); + this.tail2.setTextureSize(256, 128); + this.tail2.mirror = true; + this.setRotation(this.tail2, 0F, 0F, 0F); + this.tail1 = new ModelRenderer(this, 64, 25); + this.tail1.addBox(-5.5F, -3F, -11F, 11, 9, 10); + this.tail1.setRotationPoint(0F, 0F, 0F); + this.tail1.setTextureSize(256, 128); + this.tail1.mirror = true; + this.setRotation(this.tail1, 0F, 0F, 0F); + this.bodyMain = new ModelRenderer(this, 106, 25); + this.bodyMain.addBox(-6F, -6F, -6F, 12, 12, 12); + this.bodyMain.setRotationPoint(0F, 0F, 0F); + this.bodyMain.setTextureSize(256, 128); + this.bodyMain.mirror = true; + this.setRotation(this.bodyMain, 0F, 0F, 0F); + this.neck = new ModelRenderer(this, 154, 25); + this.neck.addBox(-5.5F, -10.5F, -3F, 11, 11, 10); + this.neck.setRotationPoint(0F, 0F, 0F); + this.neck.setTextureSize(256, 128); + this.neck.mirror = true; + this.setRotation(this.neck, 0F, 0F, 0F); + + if (scale > 0) + { + this.head = new ModelRenderer(this, 156, 0); + this.head.addBox(-3.5F, -14.7F, 1.5F, 7, 7, 7); + this.head.setRotationPoint(0F, 0F, 0F); + this.head.setTextureSize(256, 128); + this.head.mirror = true; + this.setRotation(this.head, 0F, 0F, 0F); + this.neck = new ModelRenderer(this, 122, 0); + this.neck.addBox(-4.5F, -9.5F, -2F, 9, 9, 8); + this.neck.setRotationPoint(0F, 0F, 0F); + this.neck.setTextureSize(256, 128); + this.neck.mirror = true; + this.setRotation(this.neck, 0F, 0F, 0F); + this.bodyMain = new ModelRenderer(this, 82, 0); + this.bodyMain.addBox(-5F, -5F, -5F, 10, 10, 10); + this.bodyMain.setRotationPoint(0F, 0F, 0F); + this.bodyMain.setTextureSize(256, 128); + this.bodyMain.mirror = true; + this.setRotation(this.bodyMain, 0F, 0F, 0F); + this.tail1 = new ModelRenderer(this, 48, 0); + this.tail1.addBox(-4.5F, -2F, -10F, 9, 7, 8); + this.tail1.setRotationPoint(0F, 0F, 0F); + this.tail1.setTextureSize(256, 128); + this.tail1.mirror = true; + this.setRotation(this.tail1, 0F, 0F, 0F); + this.tail2 = new ModelRenderer(this, 20, 0); + this.tail2.addBox(-3.5F, 0F, -14F, 7, 5, 7); + this.tail2.setRotationPoint(0F, 0F, 0F); + this.tail2.setTextureSize(256, 128); + this.tail2.mirror = true; + this.setRotation(this.tail2, 0F, 0F, 0F); + this.tail3 = new ModelRenderer(this, 0, 0); + this.tail3.addBox(-2.5F, 2F, -16F, 5, 3, 5); + this.tail3.setRotationPoint(0F, 0F, 0F); + this.tail3.setTextureSize(256, 128); + this.tail3.mirror = true; + this.setRotation(this.tail3, 0F, 0F, 0F); + } + + this.bodyMain.addChild(this.tail1); + this.neck.addChild(this.head); + this.tail1.addChild(this.tail2); + this.tail2.addChild(this.tail3); + this.bodyMain.addChild(this.neck); + } + + @Override + public void render(Entity entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + super.render(entity, par2, par3, par4, par5, par6, par7); + this.setRotationAngles(par2, par3, par4, par5, par6, par7, entity); + this.bodyMain.render(par7); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity par7Entity) + { + this.tail1.rotateAngleY = MathHelper.cos(par1 * 0.6662F) * 0.2F * par2; + this.tail2.rotateAngleY = MathHelper.cos(par1 * 0.6662F) * 0.2F * par2; + this.tail3.rotateAngleY = MathHelper.cos(par1 * 0.6662F) * 0.2F * par2; + this.tail1.offsetZ = MathHelper.cos(0.5F * par1 * 0.6662F) * 0.2F * par2; + this.tail2.offsetZ = MathHelper.cos(0.5F * par1 * 0.6662F) * 0.2F * par2; + this.tail3.offsetZ = MathHelper.cos(0.5F * par1 * 0.6662F) * 0.2F * par2; + this.neck.offsetZ = -MathHelper.cos(0.5F * par1 * 0.6662F) * 0.1F * par2; + this.head.offsetZ = -MathHelper.cos(0.5F * par1 * 0.6662F) * 0.1F * par2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSludgeling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSludgeling.java new file mode 100644 index 00000000..ca585f1e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelSludgeling.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelSludgeling extends ModelBase +{ + + ModelRenderer tail4; + ModelRenderer body; + ModelRenderer tail1; + ModelRenderer tail2; + ModelRenderer tail3; + + public ModelSludgeling() + { + this.textureWidth = 64; + this.textureHeight = 32; + + this.tail4 = new ModelRenderer(this, 0, 0); + this.tail4.addBox(-0.5F, 0.3F, 4.5F, 1, 1, 1); + this.tail4.setRotationPoint(0F, 23.5F, -2F); + this.tail4.setTextureSize(64, 32); + this.tail4.mirror = true; + this.setRotation(this.tail4, 0F, 0F, 0F); + this.body = new ModelRenderer(this, 4, 0); + this.body.addBox(-1F, -0.5F, -1.5F, 2, 1, 3); + this.body.setRotationPoint(0F, 23.5F, -2F); + this.body.setTextureSize(64, 32); + this.body.mirror = true; + this.setRotation(this.body, 0F, 0F, 0F); + this.tail1 = new ModelRenderer(this, 0, 0); + this.tail1.addBox(-0.5F, -0.3F, 1.5F, 1, 1, 1); + this.tail1.setRotationPoint(0F, 23.5F, -2F); + this.tail1.setTextureSize(64, 32); + this.tail1.mirror = true; + this.setRotation(this.tail1, 0F, 0F, 0F); + this.tail2 = new ModelRenderer(this, 0, 0); + this.tail2.addBox(-0.5F, -0.1F, 2.5F, 1, 1, 1); + this.tail2.setRotationPoint(0F, 23.5F, -2F); + this.tail2.setTextureSize(64, 32); + this.tail2.mirror = true; + this.setRotation(this.tail2, 0F, 0F, 0F); + this.tail3 = new ModelRenderer(this, 0, 0); + this.tail3.addBox(-0.5F, 0.1F, 3.5F, 1, 1, 1); + this.tail3.setRotationPoint(0F, 23.5F, -2F); + this.tail3.setTextureSize(64, 32); + this.tail3.mirror = true; + this.setRotation(this.tail3, 0F, 0F, 0F); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.body.render(f5); + this.tail1.render(f5); + this.tail2.render(f5); + this.tail3.render(f5); + this.tail4.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.tail1.rotateAngleY = MathHelper.cos(f2 * 0.3F + 0 * 0.15F * (float) Math.PI) * (float) Math.PI * 0.025F * (1 + Math.abs(0 - 2)); + this.tail2.rotateAngleY = MathHelper.cos(f2 * 0.3F + 1 * 0.15F * (float) Math.PI) * (float) Math.PI * 0.025F * (1 + Math.abs(1 - 2)); + this.tail3.rotateAngleY = MathHelper.cos(f2 * 0.3F + 2 * 0.15F * (float) Math.PI) * (float) Math.PI * 0.025F * (1 + Math.abs(1 - 2)); + this.tail4.rotateAngleY = MathHelper.cos(f2 * 0.3F + 3 * 0.15F * (float) Math.PI) * (float) Math.PI * 0.025F * (1 + Math.abs(1 - 2)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelTier2Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelTier2Rocket.java new file mode 100644 index 00000000..7208d62d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/model/ModelTier2Rocket.java @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelTier2Rocket extends ModelBase +{ + + // Roof, Floor, Bottom + ModelRenderer[] inside = new ModelRenderer[3]; + // 4 sets of 5 fin parts + ModelRenderer[][] fins = new ModelRenderer[4][5]; + // 8 parts to the top of the rocket, last is the long center piece + ModelRenderer[] top = new ModelRenderer[8]; + // 4 sets of 3 booster parts (attachment, main, top) + ModelRenderer[][] boosters = new ModelRenderer[4][3]; + // 3 booster base parts, starting from bottom + ModelRenderer[] base = new ModelRenderer[3]; + // 7 side pars, first four are the front, then right, and so on + ModelRenderer[] sides = new ModelRenderer[7]; + + public ModelTier2Rocket() + { + this(0.0F); + } + + public ModelTier2Rocket(float var1) + { + this.textureWidth = 256; + this.textureHeight = 256; + + float halfPI = (float) (Math.PI / 2.0); + float fullPI = (float) (Math.PI); + + this.inside[0] = new ModelRenderer(this, 0, 59); + this.inside[0].addBox(-9F, -57F, -9F, 18, 1, 18, var1); + this.inside[0].setRotationPoint(0F, 23F, 0F); + this.inside[0].setTextureSize(256, 256); + this.inside[0].mirror = true; + this.setStartingAngles(this.inside[0], 0F, 0F, 0F); + this.inside[1] = new ModelRenderer(this, 0, 78); + this.inside[1].addBox(-8.5F, -16F, -8.5F, 17, 1, 17, var1); + this.inside[1].setRotationPoint(0F, 23F, 0F); + this.inside[1].setTextureSize(256, 256); + this.inside[1].mirror = true; + this.setStartingAngles(this.inside[1], 0F, 0F, 0F); + this.inside[2] = new ModelRenderer(this, 0, 40); + this.inside[2].addBox(-9F, -4F, -9F, 18, 1, 18, var1); + this.inside[2].setRotationPoint(0F, 23F, 0F); + this.inside[2].setTextureSize(256, 256); + this.inside[2].mirror = true; + this.setStartingAngles(this.inside[2], 0F, 0F, 0F); + + this.fins[0][1] = new ModelRenderer(this, 66, 0); + this.fins[0][1].addBox(-1F, -9F, -19.4F, 2, 8, 2, var1); + this.fins[0][1].setRotationPoint(0F, 24F, 0F); + this.fins[0][1].setTextureSize(256, 256); + this.fins[0][1].mirror = true; + this.setStartingAngles(this.fins[0][1], 0F, 0.7853982F, 0F); + this.fins[0][2] = new ModelRenderer(this, 66, 0); + this.fins[0][2].addBox(-1F, -12F, -17.4F, 2, 8, 2, var1); + this.fins[0][2].setRotationPoint(0F, 24F, 0F); + this.fins[0][2].setTextureSize(256, 256); + this.fins[0][2].mirror = true; + this.setStartingAngles(this.fins[0][2], 0F, 0.7853982F, 0F); + this.fins[0][3] = new ModelRenderer(this, 66, 0); + this.fins[0][3].addBox(-1F, -14F, -15.4F, 2, 8, 2, var1); + this.fins[0][3].setRotationPoint(0F, 24F, 0F); + this.fins[0][3].setTextureSize(256, 256); + this.fins[0][3].mirror = true; + this.setStartingAngles(this.fins[0][3], 0F, 0.7853982F, 0F); + this.fins[0][4] = new ModelRenderer(this, 66, 0); + this.fins[0][4].addBox(-1F, -15F, -13.5F, 2, 8, 2, var1); + this.fins[0][4].setRotationPoint(0F, 24F, 0F); + this.fins[0][4].setTextureSize(256, 256); + this.fins[0][4].mirror = true; + this.setStartingAngles(this.fins[0][4], 0F, 0.7853982F, 0F); + + this.fins[0][0] = new ModelRenderer(this, 60, 0); + this.fins[0][0].addBox(-1F, -14F, -20.4F, 2, 15, 1, var1); + this.fins[0][0].setRotationPoint(0F, 24F, 0F); + this.fins[0][0].setTextureSize(256, 256); + this.fins[0][0].mirror = true; + this.setStartingAngles(this.fins[0][0], 0F, 0.7853982F, 0F); + + this.fins[1][0] = new ModelRenderer(this, 74, 0); + this.fins[1][0].addBox(-20.4F, -14F, -1F, 1, 15, 2, var1); + this.fins[1][0].setRotationPoint(0F, 24F, 0F); + this.fins[1][0].setTextureSize(256, 256); + this.fins[1][0].mirror = true; + this.setStartingAngles(this.fins[1][0], 0F, 0.7853982F, 0F); + this.fins[1][1] = new ModelRenderer(this, 66, 0); + this.fins[1][1].addBox(-19.4F, -9F, -1F, 2, 8, 2, var1); + this.fins[1][1].setRotationPoint(0F, 24F, 0F); + this.fins[1][1].setTextureSize(256, 256); + this.fins[1][1].mirror = true; + this.setStartingAngles(this.fins[1][1], 0F, 0.7853982F, 0F); + this.fins[1][2] = new ModelRenderer(this, 66, 0); + this.fins[1][2].addBox(-17.4F, -12F, -1F, 2, 8, 2, var1); + this.fins[1][2].setRotationPoint(0F, 24F, 0F); + this.fins[1][2].setTextureSize(256, 256); + this.fins[1][2].mirror = true; + this.setStartingAngles(this.fins[1][2], 0F, 0.7853982F, 0F); + this.fins[1][3] = new ModelRenderer(this, 66, 0); + this.fins[1][3].addBox(-15.4F, -14F, -1F, 2, 8, 2, var1); + this.fins[1][3].setRotationPoint(0F, 24F, 0F); + this.fins[1][3].setTextureSize(256, 256); + this.fins[1][3].mirror = true; + this.setStartingAngles(this.fins[1][3], 0F, 0.7853982F, 0F); + this.fins[1][4] = new ModelRenderer(this, 66, 0); + this.fins[1][4].addBox(-13.5F, -15F, -1F, 2, 8, 2, var1); + this.fins[1][4].setRotationPoint(0F, 24F, 0F); + this.fins[1][4].setTextureSize(256, 256); + this.fins[1][4].mirror = true; + this.setStartingAngles(this.fins[1][4], 0F, 0.7853982F, 0F); + + this.fins[2][0] = new ModelRenderer(this, 60, 0); + this.fins[2][0].addBox(-1F, -14F, 19.5F, 2, 15, 1, var1); + this.fins[2][0].setRotationPoint(0F, 24F, 0F); + this.fins[2][0].setTextureSize(256, 256); + this.fins[2][0].mirror = true; + this.setStartingAngles(this.fins[2][0], 0F, 0.7853982F, 0F); + this.fins[2][1] = new ModelRenderer(this, 66, 0); + this.fins[2][1].addBox(-1F, -9F, 17.5F, 2, 8, 2, var1); + this.fins[2][1].setRotationPoint(0F, 24F, 0F); + this.fins[2][1].setTextureSize(256, 256); + this.fins[2][1].mirror = true; + this.setStartingAngles(this.fins[2][1], 0F, 0.7853982F, 0F); + this.fins[2][2] = new ModelRenderer(this, 66, 0); + this.fins[2][2].addBox(-1F, -12F, 15.5F, 2, 8, 2, var1); + this.fins[2][2].setRotationPoint(0F, 24F, 0F); + this.fins[2][2].setTextureSize(256, 256); + this.fins[2][2].mirror = true; + this.setStartingAngles(this.fins[2][2], 0F, 0.7853982F, 0F); + this.fins[2][3] = new ModelRenderer(this, 66, 0); + this.fins[2][3].addBox(-1F, -14F, 13.5F, 2, 8, 2, var1); + this.fins[2][3].setRotationPoint(0F, 24F, 0F); + this.fins[2][3].setTextureSize(256, 256); + this.fins[2][3].mirror = true; + this.setStartingAngles(this.fins[2][3], 0F, 0.7853982F, 0F); + this.fins[2][4] = new ModelRenderer(this, 66, 0); + this.fins[2][4].addBox(-1F, -15F, 11.6F, 2, 8, 2, var1); + this.fins[2][4].setRotationPoint(0F, 24F, 0F); + this.fins[2][4].setTextureSize(256, 256); + this.fins[2][4].mirror = true; + this.setStartingAngles(this.fins[2][4], 0F, 0.7853982F, 0F); + + this.fins[3][0] = new ModelRenderer(this, 74, 0); + this.fins[3][0].addBox(19.5F, -14F, -1F, 1, 15, 2, var1); + this.fins[3][0].setRotationPoint(0F, 24F, 0F); + this.fins[3][0].setTextureSize(256, 256); + this.fins[3][0].mirror = true; + this.setStartingAngles(this.fins[3][0], 0F, 0.7853982F, 0F); + this.fins[3][1] = new ModelRenderer(this, 66, 0); + this.fins[3][1].addBox(17.5F, -9F, -1F, 2, 8, 2, var1); + this.fins[3][1].setRotationPoint(0F, 24F, 0F); + this.fins[3][1].setTextureSize(256, 256); + this.fins[3][1].mirror = true; + this.setStartingAngles(this.fins[3][1], 0F, 0.7853982F, 0F); + this.fins[3][2] = new ModelRenderer(this, 66, 0); + this.fins[3][2].addBox(15.5F, -12F, -1F, 2, 8, 2, var1); + this.fins[3][2].setRotationPoint(0F, 24F, 0F); + this.fins[3][2].setTextureSize(256, 256); + this.fins[3][2].mirror = true; + this.setStartingAngles(this.fins[3][2], 0F, 0.7853982F, 0F); + this.fins[3][3] = new ModelRenderer(this, 66, 0); + this.fins[3][3].addBox(13.5F, -14F, -1F, 2, 8, 2, var1); + this.fins[3][3].setRotationPoint(0F, 24F, 0F); + this.fins[3][3].setTextureSize(256, 256); + this.fins[3][3].mirror = true; + this.setStartingAngles(this.fins[3][3], 0F, 0.7853982F, 0F); + this.fins[3][4] = new ModelRenderer(this, 66, 0); + this.fins[3][4].addBox(11.6F, -15F, -1F, 2, 8, 2, var1); + this.fins[3][4].setRotationPoint(0F, 24F, 0F); + this.fins[3][4].setTextureSize(256, 256); + this.fins[3][4].mirror = true; + this.setStartingAngles(this.fins[3][4], 0F, 0.7853982F, 0F); + + this.top[0] = new ModelRenderer(this, 192, 60); + this.top[0].addBox(-8F, -60F, -8F, 16, 2, 16, var1); + this.top[0].setRotationPoint(0F, 24F, 0F); + this.top[0].setTextureSize(256, 256); + this.top[0].mirror = true; + this.setStartingAngles(this.top[0], 0F, 0F, 0F); + this.top[1] = new ModelRenderer(this, 200, 78); + this.top[1].addBox(-7F, -62F, -7F, 14, 2, 14, var1); + this.top[1].setRotationPoint(0F, 24F, 0F); + this.top[1].setTextureSize(256, 256); + this.top[1].mirror = true; + this.setStartingAngles(this.top[1], 0F, 0F, 0F); + this.top[2] = new ModelRenderer(this, 208, 94); + this.top[2].addBox(-6F, -64F, -6F, 12, 2, 12, var1); + this.top[2].setRotationPoint(0F, 24F, 0F); + this.top[2].setTextureSize(256, 256); + this.top[2].mirror = true; + this.setStartingAngles(this.top[2], 0F, 0F, 0F); + this.top[3] = new ModelRenderer(this, 216, 108); + this.top[3].addBox(-5F, -66F, -5F, 10, 2, 10, var1); + this.top[3].setRotationPoint(0F, 24F, 0F); + this.top[3].setTextureSize(256, 256); + this.top[3].mirror = true; + this.setStartingAngles(this.top[3], 0F, 0F, 0F); + this.top[4] = new ModelRenderer(this, 224, 120); + this.top[4].addBox(-4F, -68F, -4F, 8, 2, 8, var1); + this.top[4].setRotationPoint(0F, 24F, 0F); + this.top[4].setTextureSize(256, 256); + this.top[4].mirror = true; + this.setStartingAngles(this.top[4], 0F, 0F, 0F); + this.top[5] = new ModelRenderer(this, 232, 130); + this.top[5].addBox(-3F, -70F, -3F, 6, 2, 6, var1); + this.top[5].setRotationPoint(0F, 24F, 0F); + this.top[5].setTextureSize(256, 256); + this.top[5].mirror = true; + this.setStartingAngles(this.top[5], 0F, 0F, 0F); + this.top[6] = new ModelRenderer(this, 240, 138); + this.top[6].addBox(-2F, -72F, -2F, 4, 2, 4, var1); + this.top[6].setRotationPoint(0F, 24F, 0F); + this.top[6].setTextureSize(256, 256); + this.top[6].mirror = true; + this.setStartingAngles(this.top[6], 0F, 0F, 0F); + this.top[7] = new ModelRenderer(this, 248, 144); + this.top[7].addBox(-1F, -88F, -1F, 2, 18, 2, var1); + this.top[7].setRotationPoint(0F, 24F, 0F); + this.top[7].setTextureSize(256, 256); + this.top[7].mirror = true; + this.setStartingAngles(this.top[7], 0F, 0F, 0F); + + this.base[0] = new ModelRenderer(this, 0, 0); + this.base[0].addBox(-7F, -1F, -7F, 14, 1, 14, var1); + this.base[0].setRotationPoint(0F, 24F, 0F); + this.base[0].setTextureSize(256, 256); + this.base[0].mirror = true; + this.setStartingAngles(this.base[0], 0F, 0F, 0F); + this.base[1] = new ModelRenderer(this, 0, 15); + this.base[1].addBox(-6F, -2F, -6F, 12, 1, 12, var1); + this.base[1].setRotationPoint(0F, 24F, 0F); + this.base[1].setTextureSize(256, 256); + this.base[1].mirror = true; + this.setStartingAngles(this.base[1], 0F, 0F, 0F); + this.base[2] = new ModelRenderer(this, 0, 28); + this.base[2].addBox(-5F, -4F, -5F, 10, 2, 10, var1); + this.base[2].setRotationPoint(0F, 24F, 0F); + this.base[2].setTextureSize(256, 256); + this.base[2].mirror = true; + this.setStartingAngles(this.base[2], 0F, 0F, 0F); + + this.sides[0] = new ModelRenderer(this, 85, 0); + this.sides[0].addBox(-3.9F, -58F, -8.9F, 8, 17, 1, var1); + this.sides[0].setRotationPoint(0F, 24F, 0F); + this.sides[0].setTextureSize(256, 256); + this.sides[0].mirror = true; + this.setStartingAngles(this.sides[0], 0F, 0F, 0F); + this.sides[1] = new ModelRenderer(this, 103, 0); + this.sides[1].addBox(3.9F, -58F, -8.9F, 5, 54, 1, var1); + this.sides[1].setRotationPoint(0F, 24F, 0F); + this.sides[1].setTextureSize(256, 256); + this.sides[1].mirror = true; + this.setStartingAngles(this.sides[1], 0F, 0F, 0F); + this.sides[2] = new ModelRenderer(this, 85, 18); + this.sides[2].addBox(-3.9F, -34F, -8.9F, 8, 30, 1, var1); + this.sides[2].setRotationPoint(0F, 24F, 0F); + this.sides[2].setTextureSize(256, 256); + this.sides[2].mirror = true; + this.setStartingAngles(this.sides[2], 0F, 0F, 0F); + this.sides[3] = new ModelRenderer(this, 103, 55); + this.sides[3].addBox(-8.9F, -58F, -8.9F, 5, 54, 1, var1); + this.sides[3].setRotationPoint(0F, 24F, 0F); + this.sides[3].setTextureSize(256, 256); + this.sides[3].mirror = true; + this.setStartingAngles(this.sides[3], 0F, 0F, 0F); + + this.sides[4] = new ModelRenderer(this, 120, 0); + this.sides[4].addBox(-8.9F, -58F, -7.9F, 1, 54, 16, var1); + this.sides[4].setRotationPoint(0F, 24F, 0F); + this.sides[4].setTextureSize(256, 256); + this.sides[4].mirror = true; + this.setStartingAngles(this.sides[4], 0F, 0F, 0F); + this.sides[5] = new ModelRenderer(this, 120, 141); + this.sides[5].addBox(-8.9F, -58F, 8.1F, 17, 54, 1, var1); + this.sides[5].setRotationPoint(0F, 24F, 0F); + this.sides[5].setTextureSize(256, 256); + this.sides[5].mirror = true; + this.setStartingAngles(this.sides[5], 0F, 0F, 0F); + this.sides[6] = new ModelRenderer(this, 119, 70); + this.sides[6].addBox(8.1F, -58F, -7.9F, 1, 54, 17, var1); + this.sides[6].setRotationPoint(0F, 24F, 0F); + this.sides[6].setTextureSize(256, 256); + this.sides[6].mirror = true; + this.setStartingAngles(this.sides[6], 0F, 0F, 0F); + + this.boosters[0][0] = new ModelRenderer(this, 154, 19); + this.boosters[0][0].addBox(-10.9F, -10F, -0.5F, 3, 5, 1, var1); + this.boosters[0][0].setRotationPoint(0F, 24F, 0F); + this.boosters[0][0].setTextureSize(256, 256); + this.boosters[0][0].mirror = true; + this.setStartingAngles(this.boosters[0][0], 0F, -halfPI, 0F); + this.boosters[0][1] = new ModelRenderer(this, 154, 6); + this.boosters[0][1].addBox(-14.9F, -11F, -2.5F, 5, 8, 5, var1); + this.boosters[0][1].setRotationPoint(0F, 24F, 0F); + this.boosters[0][1].setTextureSize(256, 256); + this.boosters[0][1].mirror = true; + this.setStartingAngles(this.boosters[0][1], 0F, -halfPI, 0F); + this.boosters[0][2] = new ModelRenderer(this, 154, 0); + this.boosters[0][2].addBox(-14.4F, -13F, -2F, 4, 2, 4, var1); + this.boosters[0][2].setRotationPoint(0F, 24F, 0F); + this.boosters[0][2].setTextureSize(256, 256); + this.boosters[0][2].mirror = true; + this.setStartingAngles(this.boosters[0][2], 0F, -halfPI, 0F); + + this.boosters[1][0] = new ModelRenderer(this, 154, 19); + this.boosters[1][0].addBox(-10.9F, -10F, -0.5F, 3, 5, 1, var1); + this.boosters[1][0].setRotationPoint(0F, 24F, 0F); + this.boosters[1][0].setTextureSize(256, 256); + this.boosters[1][0].mirror = true; + this.setStartingAngles(this.boosters[1][0], 0F, 0F, 0F); + this.boosters[1][1] = new ModelRenderer(this, 154, 6); + this.boosters[1][1].addBox(-14.9F, -11F, -2.5F, 5, 8, 5, var1); + this.boosters[1][1].setRotationPoint(0F, 24F, 0F); + this.boosters[1][1].setTextureSize(256, 256); + this.boosters[1][1].mirror = true; + this.setStartingAngles(this.boosters[1][1], 0F, 0F, 0F); + this.boosters[1][2] = new ModelRenderer(this, 154, 0); + this.boosters[1][2].addBox(-14.4F, -13F, -2F, 4, 2, 4, var1); + this.boosters[1][2].setRotationPoint(0F, 24F, 0F); + this.boosters[1][2].setTextureSize(256, 256); + this.boosters[1][2].mirror = true; + this.setStartingAngles(this.boosters[1][2], 0F, 0F, 0F); + + this.boosters[2][0] = new ModelRenderer(this, 154, 19); + this.boosters[2][0].addBox(-10.9F, -10F, -0.5F, 3, 5, 1, var1); + this.boosters[2][0].setRotationPoint(0F, 24F, 0F); + this.boosters[2][0].setTextureSize(256, 256); + this.boosters[2][0].mirror = true; + this.setStartingAngles(this.boosters[2][0], 0F, halfPI, 0F); + this.boosters[2][1] = new ModelRenderer(this, 154, 6); + this.boosters[2][1].addBox(-14.9F, -11F, -2.5F, 5, 8, 5, var1); + this.boosters[2][1].setRotationPoint(0F, 24F, 0F); + this.boosters[2][1].setTextureSize(256, 256); + this.boosters[2][1].mirror = true; + this.setStartingAngles(this.boosters[2][1], 0F, halfPI, 0F); + this.boosters[2][2] = new ModelRenderer(this, 154, 0); + this.boosters[2][2].addBox(-14.4F, -13F, -2F, 4, 2, 4, var1); + this.boosters[2][2].setRotationPoint(0F, 24F, 0F); + this.boosters[2][2].setTextureSize(256, 256); + this.boosters[2][2].mirror = true; + this.setStartingAngles(this.boosters[2][2], 0F, halfPI, 0F); + + this.boosters[3][0] = new ModelRenderer(this, 154, 19); + this.boosters[3][0].addBox(-10.9F, -10F, -0.5F, 3, 5, 1, var1); + this.boosters[3][0].setRotationPoint(0F, 24F, 0F); + this.boosters[3][0].setTextureSize(256, 256); + this.boosters[3][0].mirror = true; + this.setStartingAngles(this.boosters[3][0], 0F, fullPI, 0F); + this.boosters[3][1] = new ModelRenderer(this, 154, 6); + this.boosters[3][1].addBox(-14.9F, -11F, -2.5F, 5, 8, 5, var1); + this.boosters[3][1].setRotationPoint(0F, 24F, 0F); + this.boosters[3][1].setTextureSize(256, 256); + this.boosters[3][1].mirror = true; + this.setStartingAngles(this.boosters[3][1], 0F, fullPI, 0F); + this.boosters[3][2] = new ModelRenderer(this, 154, 0); + this.boosters[3][2].addBox(-14.4F, -13F, -2F, 4, 2, 4, var1); + this.boosters[3][2].setRotationPoint(0F, 24F, 0F); + this.boosters[3][2].setTextureSize(256, 256); + this.boosters[3][2].mirror = true; + this.setStartingAngles(this.boosters[3][2], 0F, fullPI, 0F); + } + + @Override + public void render(Entity entity, float par2, float par3, float par4, float par5, float par6, float par7) + { + for (final ModelRenderer model : this.inside) + { + model.render(par7); + } + + for (final ModelRenderer model : this.top) + { + model.render(par7); + } + + for (final ModelRenderer model : this.base) + { + model.render(par7); + } + + for (final ModelRenderer model : this.sides) + { + model.render(par7); + } + + int var1 = 0; + int var2 = 0; + + for (var1 = 0; var1 < this.fins.length; var1++) + { + for (var2 = 0; var2 < this.fins[var1].length; var2++) + { + this.fins[var1][var2].render(par7); + } + } + + for (var1 = 0; var1 < this.boosters.length; var1++) + { + for (var2 = 0; var2 < this.boosters[var1].length; var2++) + { + this.boosters[var1][var2].render(par7); + } + } + } + + private void setStartingAngles(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity entity) + { + super.setRotationAngles(par1, par2, par3, par4, par5, par6, entity); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCargoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCargoRocket.java new file mode 100644 index 00000000..bef60b51 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCargoRocket.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.asteroids.client.render.item.ItemModelCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderCargoRocket extends Render +{ + + private ItemModelCargoRocket rocketModel; + + public RenderCargoRocket(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 0.5F; + } + + private void updateModel() + { + if (this.rocketModel == null) + { + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "rocket_cargo", "inventory"); + this.rocketModel = (ItemModelCargoRocket) FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().getModelManager().getModel(modelResourceLocation); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityCargoRocket entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityCargoRocket entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y + entity.getRenderOffsetY(), (float) z); + GlStateManager.scale(0.4F, 0.4F, 0.4F); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-pitch, 0.0F, 0.0F, 1.0F); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + this.updateModel(); + ClientUtil.drawBakedModel(this.rocketModel); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityCargoRocket rocket, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = rocket.getEntityBoundingBox(); + return rocket.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCreeperBoss.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCreeperBoss.java new file mode 100644 index 00000000..1b3fd2db --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderCreeperBoss.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelCreeperBoss; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class RenderCreeperBoss extends RenderLiving +{ + + private static final ResourceLocation creeperTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/creeper.png"); + private static final ResourceLocation powerTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/model/power.png"); + private final ModelBase creeperModel = new ModelCreeperBoss(2.0F); + + public RenderCreeperBoss(RenderManager renderManager) + { + super(renderManager, new ModelCreeperBoss(), 1.0F); + } + + @Override + protected ResourceLocation getEntityTexture(EntityCreeperBoss entity) + { + return RenderCreeperBoss.creeperTexture; + } + +// protected int func_27006_a(EntityCreeperBoss par1EntityCreeper, int par2, float par3) +// { +// if (par1EntityCreeper.headsRemaining == 1) +// { +// if (par2 == 1) +// { +// final float var4 = par1EntityCreeper.ticksExisted + par3; +// this.bindTexture(RenderCreeperBoss.powerTexture); +// GL11.glMatrixMode(GL11.GL_TEXTURE); +// GL11.glLoadIdentity(); +// final float var5 = var4 * 0.01F; +// final float var6 = var4 * 0.01F; +// GL11.glTranslatef(var5, var6, 0.0F); +// this.setRenderPassModel(this.creeperModel); +// GL11.glMatrixMode(GL11.GL_MODELVIEW); +// GL11.glEnable(GL11.GL_BLEND); +// final float var7 = 0.5F; +// GL11.glColor4f(var7, var7, var7, 1.0F); +// GL11.glDisable(GL11.GL_LIGHTING); +// GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); +// return 1; +// } +// +// if (par2 == 2) +// { +// GL11.glMatrixMode(GL11.GL_TEXTURE); +// GL11.glLoadIdentity(); +// GL11.glMatrixMode(GL11.GL_MODELVIEW); +// GL11.glEnable(GL11.GL_LIGHTING); +// GL11.glDisable(GL11.GL_BLEND); +// } +// } +// +// return -1; +// } + + @Override + protected void preRenderCallback(EntityCreeperBoss par1EntityLiving, float par2) + { + GL11.glScalef(4.0F, 4.0F, 4.0F); + GL11.glRotatef((float) (Math.pow(par1EntityLiving.deathTicks, 2) / 5.0F + (Math.pow(par1EntityLiving.deathTicks, 2) / 5.0F - Math.pow(par1EntityLiving.deathTicks - 1, 2) / 5.0F) * par2), 0.0F, + 1.0F, 0.0F); + } + + @Override + protected int getColorMultiplier(EntityCreeperBoss par1EntityLivingBase, float par2, float par3) + { + return super.getColorMultiplier(par1EntityLivingBase, par2, par3); + } + +// @Override +// protected int shouldRenderPass(EntityLivingBase par1EntityLivingBase, int par2, float par3) +// { +// return this.func_27006_a((EntityCreeperBoss) par1EntityLivingBase, par2, par3); +// } +// +// @Override +// protected int inheritRenderPass(EntityLivingBase par1EntityLivingBase, int par2, float par3) +// { +// return -1; +// } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderLandingBalloons.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderLandingBalloons.java new file mode 100644 index 00000000..26e0adce --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderLandingBalloons.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelBalloonParachute; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderLandingBalloons extends Render +{ + + private IBakedModel balloonModel; + protected ModelBalloonParachute parachuteModel = new ModelBalloonParachute(); + + public RenderLandingBalloons(RenderManager manager) + { + super(manager); + this.shadowSize = 1.2F; + } + + private void updateModels() + { + if (this.balloonModel == null) + { + try + { + this.balloonModel = ClientUtil.modelFromOBJ(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "landing_balloon.obj"), ImmutableList.of("Sphere")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityLandingBalloons entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityLandingBalloons entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y + 0.8F, (float) z); + GlStateManager.rotate(entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(pitch, 0.0F, 0.0F, 1.0F); + + this.updateModels(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + ClientUtil.drawBakedModel(this.balloonModel); + GlStateManager.popMatrix(); + + if (entity.posY >= 500.0F) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x - 1.25F, (float) y - 0.93F, (float) z - 0.3F); + GlStateManager.scale(2.5F, 3.0F, 2.5F); + this.parachuteModel.renderAll(); + GlStateManager.popMatrix(); + } + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityLandingBalloons lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(2D, 1D, 2D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderProjectileTNT.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderProjectileTNT.java new file mode 100644 index 00000000..05ffaea4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderProjectileTNT.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityProjectileTNT; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderProjectileTNT extends Render +{ + + public RenderProjectileTNT(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 0.5F; + } + + @Override + public void doRender(EntityProjectileTNT entity, double x, double y, double z, float par8, float partialTicks) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y + 0.5F, (float) z); + + float f2 = (1.0F - ((float) entity.ticksExisted - partialTicks + 1.0F) / 100.0F) * 0.1F; + this.bindEntityTexture(entity); + GlStateManager.translate(-0.5F, -0.5F, 0.5F); + blockrendererdispatcher.renderBlockBrightness(Blocks.TNT.getDefaultState(), entity.getBrightness()); + GlStateManager.translate(0.0F, 0.0F, 1.0F); + + if (entity.ticksExisted % 2 == 0) + { + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(770, 772); + GlStateManager.color(1.0F, 1.0F, 1.0F, f2); + GlStateManager.doPolygonOffset(-3.0F, -3.0F); + GlStateManager.enablePolygonOffset(); + blockrendererdispatcher.renderBlockBrightness(Blocks.TNT.getDefaultState(), 0.2F); + GlStateManager.doPolygonOffset(0.0F, 0.0F); + GlStateManager.disablePolygonOffset(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + } + + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, par8, partialTicks); + } + + @Override + protected ResourceLocation getEntityTexture(EntityProjectileTNT entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSlimeling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSlimeling.java new file mode 100644 index 00000000..618942bd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSlimeling.java @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderSlimeling extends RenderLiving +{ + + private static final ResourceLocation landerTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/slimeling/green.png"); + private boolean texSwitch; + + public RenderSlimeling(RenderManager renderManager) + { + super(renderManager, new ModelSlimeling(16), 0.5F); + +// this.renderPassModel = new ModelSlimeling(0.0F); + } + + @Override + protected ResourceLocation getEntityTexture(EntitySlimeling par1EntityArrow) + { + return texSwitch ? OverlaySensorGlasses.altTexture : RenderSlimeling.landerTexture; + } + + @Override + protected void preRenderCallback(EntitySlimeling slimeling, float par2) + { + super.preRenderCallback(slimeling, par2); + + GL11.glRotatef(180.0F, 0F, 1F, 0F); + + GL11.glColor3f(slimeling.getColorRed(), slimeling.getColorGreen(), slimeling.getColorBlue()); + GL11.glScalef(slimeling.getScale(), slimeling.getScale(), slimeling.getScale()); + GL11.glTranslatef(0.0F, 1.10F, 0.0F); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntitySlimeling entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected void renderLayers(EntitySlimeling slimeling, float p_177093_2_, float p_177093_3_, float partialTicks, float p_177093_5_, float p_177093_6_, float p_177093_7_, float p_177093_8_) + { + super.renderLayers(slimeling, p_177093_2_, p_177093_3_, partialTicks, p_177093_5_, p_177093_6_, p_177093_7_, p_177093_8_); + + // After rendering the slimeling, reset the color tint to none + GL11.glColor3f(1F, 1F, 1F); + } + +// @Override +// protected int shouldRenderPass(EntityLivingBase par1EntityLivingBase, int par2, float par3) +// { +// if (par1EntityLivingBase.isInvisible()) +// { +// return 0; +// } +// else if (par2 == 0) +// { +// this.setRenderPassModel(this.renderPassModel); +// GL11.glEnable(GL11.GL_NORMALIZE); +// GL11.glEnable(GL11.GL_BLEND); +// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); +// return 1; +// } +// else +// { +// if (par2 == 1) +// { +// GL11.glDisable(GL11.GL_BLEND); +// GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); +// } +// +// return -1; +// } +// } +// +// @Override +// protected void passSpecialRender(EntityLivingBase par1EntityLivingBase, double par2, double par4, double par6) +// { +// Minecraft mc = FMLClientHandler.instance().getClient(); +// +// if (!mc.gameSettings.hideGUI && !par1EntityLivingBase.isInvisible() && (mc.currentScreen == null || !((mc.currentScreen instanceof GuiSlimeling || mc.currentScreen instanceof GuiSlimelingInventory) && GuiSlimeling.renderingOnGui))) +// { +// this.renderLivingLabelWithColor(par1EntityLivingBase, ((EntitySlimeling) par1EntityLivingBase).getName(), par2, par4 + 0.33, par6, 64, 0, 0, 0); +// int health = (int) Math.floor(((EntitySlimeling) par1EntityLivingBase).getHealth() + 0.6D); +// int maxHealth = (int) ((EntitySlimeling) par1EntityLivingBase).getMaxHealth(); +// if (health > maxHealth) +// { +// health = maxHealth; +// } +// float difference = health / (float)maxHealth; +// +// if (difference < 0.33333F) +// { +// this.renderLivingLabelWithColor(par1EntityLivingBase, "" + health + " / " + maxHealth, par2, par4, par6, 64, 1, 0, 0); +// } +// else if (difference < 0.66666F) +// { +// this.renderLivingLabelWithColor(par1EntityLivingBase, "" + health + " / " + maxHealth, par2, par4, par6, 64, 1, 1, 0); +// } +// else +// { +// this.renderLivingLabelWithColor(par1EntityLivingBase, "" + health + " / " + maxHealth, par2, par4, par6, 64, 0, 1, 0); +// } +// } +// +// super.passSpecialRender(par1EntityLivingBase, par2, par4, par6); +// GL11.glDisable(GL11.GL_NORMALIZE); +// GL11.glDisable(GL11.GL_BLEND); +// } +// +// protected void renderLivingLabelWithColor(EntityLivingBase par1EntityLivingBase, String par2Str, double par3, double par5, double par7, int par9, float cR, float cG, float cB) +// { +// double d3 = par1EntityLivingBase.getDistanceSq(this.renderManager.livingPlayer); +// +// if (d3 <= par9 * par9) +// { +// FontRenderer fontrenderer = this.getFontRendererFromRenderManager(); +// float f = 1.6F; +// float f1 = 0.016666668F * f; +// GL11.glPushMatrix(); +// GL11.glTranslatef((float) par3 + 0.0F, (float) par5 + par1EntityLivingBase.height + 0.55F, (float) par7); +// GL11.glNormal3f(0.0F, 1.0F, 0.0F); +// GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); +// GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); +// GL11.glScalef(-f1, -f1, f1); +// GL11.glDisable(GL11.GL_LIGHTING); +// GL11.glDepthMask(false); +// GL11.glDisable(GL11.GL_DEPTH_TEST); +// GL11.glEnable(GL11.GL_BLEND); +// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); +// Tessellator tessellator = Tessellator.instance; +// byte b0 = 0; +// +// if (par2Str.equals("deadmau5")) +// { +// b0 = -10; +// } +// +// GL11.glDisable(GL11.GL_TEXTURE_2D); +// tessellator.startDrawingQuads(); +// int j = fontrenderer.getStringWidth(par2Str) / 2; +// tessellator.setColorRGBA_F(cR, cG, cB, 0.25F); +// tessellator.addVertex(-j - 1, -1 + b0, 0.0D); +// tessellator.addVertex(-j - 1, 8 + b0, 0.0D); +// tessellator.addVertex(j + 1, 8 + b0, 0.0D); +// tessellator.addVertex(j + 1, -1 + b0, 0.0D); +// tessellator.draw(); +// GL11.glEnable(GL11.GL_TEXTURE_2D); +// fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, 553648127); +// GL11.glEnable(GL11.GL_DEPTH_TEST); +// GL11.glDepthMask(true); +// fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, -1); +// GL11.glEnable(GL11.GL_LIGHTING); +// GL11.glDisable(GL11.GL_BLEND); +// GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); +// GL11.glPopMatrix(); +// } +// } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSludgeling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSludgeling.java new file mode 100644 index 00000000..75e93aba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderSludgeling.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelSludgeling; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySludgeling; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSludgeling extends RenderLiving +{ + + private static final ResourceLocation sludgelingTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/sludgeling.png"); + private boolean texSwitch; + + public RenderSludgeling(RenderManager renderManager) + { + super(renderManager, new ModelSludgeling(), 0.3F); + } + + @Override + protected float getDeathMaxRotation(EntitySludgeling par1EntityLiving) + { + return 180.0F; + } + + @Override + public void doRender(EntitySludgeling entity, double par2, double par4, double par6, float par8, float par9) + { + super.doRender(entity, par2, par4, par6, par8, par9); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, par2, par4, par6, par8, par9); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntitySludgeling entity) + { + return texSwitch ? OverlaySensorGlasses.altTexture : sludgelingTexture; + } + + @Override + protected void preRenderCallback(EntitySludgeling entity, float par2) + { + super.preRenderCallback(entity, par2); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderTier2Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderTier2Rocket.java new file mode 100644 index 00000000..062efffc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/entity/RenderTier2Rocket.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.entity; + +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.render.item.ItemModelRocketT2; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityTier2Rocket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderTier2Rocket extends Render +{ + + private ItemModelRocketT2 rocketModel; + + public RenderTier2Rocket(RenderManager manager) + { + super(manager); + this.shadowSize = 2F; + } + + private void updateModel() + { + if (this.rocketModel == null) + { + ModelResourceLocation modelResourceLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "rocket_t2", "inventory"); + this.rocketModel = (ItemModelRocketT2) FMLClientHandler.instance().getClient().getRenderItem().getItemModelMesher().getModelManager().getModel(modelResourceLocation); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityTier2Rocket entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + @Override + public void doRender(EntityTier2Rocket entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks + 180; + float rollAmplitude = entity.rollAmplitude / 3 - partialTicks; + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-pitch, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, entity.getRenderOffsetY(), 0.0F); + + if (rollAmplitude > 0.0F) + { + final float i = entity.getLaunched() ? (5 - MathHelper.floor(entity.timeUntilLaunch / 85)) / 10F : 0.3F; + GlStateManager.rotate(MathHelper.sin(rollAmplitude) * rollAmplitude * i * partialTicks, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(MathHelper.sin(rollAmplitude) * rollAmplitude * i * partialTicks, 1.0F, 0.0F, 1.0F); + } + + this.updateModel(); + this.bindEntityTexture(entity); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.8F, 0.8F, 0.8F); + ClientUtil.drawBakedModel(this.rocketModel); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + public boolean shouldRender(EntityTier2Rocket rocket, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = rocket.getEntityBoundingBox().grow(0.6D, 1D, 0.6D); + return rocket.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/item/ItemModelRocketT2.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/item/ItemModelRocketT2.java new file mode 100644 index 00000000..a0bcd4c1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/item/ItemModelRocketT2.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.item; + +import javax.vecmath.Matrix4f; +import javax.vecmath.Quat4f; +import javax.vecmath.Vector3f; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.wrappers.ModelTransformWrapper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraftforge.common.model.TRSRTransformation; + +public class ItemModelRocketT2 extends ModelTransformWrapper +{ + public ItemModelRocketT2(IBakedModel modelToWrap) + { + super(modelToWrap); + } + + @Override + protected Matrix4f getTransformForPerspective(TransformType cameraTransformType) + { + if (cameraTransformType == TransformType.GUI) + { + Vector3f trans = new Vector3f(-0.15F, 0.0F, -0.15F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(30, 225, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(-0.6F, -0.7F, 0.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 4.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + if(!ConfigManagerCore.disableRocketIconRotation) { + mul.rotY(ClientUtil.getClientTimeTotal() / 1000.0F); + } + ret.mul(mul); + mul.setIdentity(); + trans.scale(-1.0F); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.3F); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.FIRST_PERSON_RIGHT_HAND || cameraTransformType == TransformType.FIRST_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.5F, 4.2F, -3.6F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(0, 45, 0)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(Constants.halfPI); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-0.65F + Math.PI)); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI)); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.THIRD_PERSON_RIGHT_HAND || cameraTransformType == TransformType.THIRD_PERSON_LEFT_HAND) + { + Vector3f trans = new Vector3f(0.0F, -3.9F, 1.45F); + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + Quat4f rot = TRSRTransformation.quatFromXYZDegrees(new Vector3f(75, 15, 5)); + mul.setRotation(rot); + ret.mul(mul); + mul.setIdentity(); + mul.setScale(0.5F); + ret.mul(mul); + mul.setIdentity(); + mul.rotX((float) (Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotZ((float) (-Math.PI / 2.0F)); + ret.mul(mul); + mul.setIdentity(); + mul.rotX(0.3F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(trans); + ret.mul(mul); + return ret; + } + + if (cameraTransformType == TransformType.GROUND) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.1F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, 0.0F, 0.5F)); + ret.mul(mul); + return ret; + } + if (cameraTransformType == TransformType.FIXED) + { + Matrix4f ret = new Matrix4f(); + ret.setIdentity(); + Matrix4f mul = new Matrix4f(); + mul.setIdentity(); + mul.setScale(0.135F); + ret.mul(mul); + mul.setIdentity(); + mul.rotY(0.0F); + ret.mul(mul); + mul.setIdentity(); + mul.setTranslation(new Vector3f(0.5F, -2.75F, 0.5F)); + ret.mul(mul); + return ret; + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/tile/TileEntityTreasureChestRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/tile/TileEntityTreasureChestRenderer.java new file mode 100644 index 00000000..bcb26fe2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/client/render/tile/TileEntityTreasureChestRenderer.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.client.render.tile; + +import micdoodle8.mods.galacticraft.core.client.model.block.ModelTreasureChest; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTreasureChestMars; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@SideOnly(Side.CLIENT) +public class TileEntityTreasureChestRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation treasureChestTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/treasure.png"); + + private final ModelTreasureChest chestModel = new ModelTreasureChest(); + + @Override + public void render(TileEntityTreasureChestMars chest, double x, double y, double z, float par7, int par8, float alpha) + { + int var9; + + if (!chest.hasWorld()) + { + var9 = 0; + } else + { + var9 = chest.getBlockMetadata(); + } + + this.bindTexture(TileEntityTreasureChestRenderer.treasureChestTexture); + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + short var11 = 0; + + if (var9 == 2) + { + var11 = 180; + } + + if (var9 == 3) + { + var11 = 0; + } + + if (var9 == 4) + { + var11 = 90; + } + + if (var9 == 5) + { + var11 = -90; + } + + GL11.glRotatef(var11, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float var12 = chest.prevLidAngle + (chest.lidAngle - chest.prevLidAngle) * par8; + + var12 = 1.0F - var12; + var12 = 1.0F - var12 * var12 * var12; + + this.chestModel.chestLid.rotateAngleX = -(var12 * (float) Math.PI / 4.0F); + this.chestModel.renderAll(!chest.locked); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/TeleportTypeMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/TeleportTypeMars.java new file mode 100644 index 00000000..fcf5018b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/TeleportTypeMars.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.dimension; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +public class TeleportTypeMars implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + double x = stats.getCoordsTeleportedFromX(); + double z = stats.getCoordsTeleportedFromZ(); + int limit = ConfigManagerCore.otherPlanetWorldBorders - 2; + if (limit > 20) + { + if (x > limit) + { + z *= limit / x; + x = limit; + } else if (x < -limit) + { + z *= -limit / x; + x = -limit; + } + if (z > limit) + { + x *= limit / z; + z = limit; + } else if (z < -limit) + { + x *= -limit / z; + z = -limit; + } + } + return new Vector3(x, ConfigManagerCore.disableLander ? 250.0 : 900.0, z); + } + + return null; + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, ConfigManagerCore.disableLander ? 250.0 : 900.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return null; + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + if (!ridingAutoRocket && player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + if (stats.getTeleportCooldown() <= 0) + { + if (player.capabilities.isFlying) + { + player.capabilities.isFlying = false; + } + + EntityLandingBalloons lander = new EntityLandingBalloons(player); + + if (!newWorld.isRemote) + { + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) newWorld); + lander.forceSpawn = true; + newWorld.spawnEntity(lander); + CompatibilityManager.forceLoadChunksEnd((WorldServer) newWorld, previous); + } + + stats.setTeleportCooldown(10); + } + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/WorldProviderMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/WorldProviderMars.java new file mode 100644 index 00000000..4f234017 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/dimension/WorldProviderMars.java @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.dimension; + +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.mars.MarsModule; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.world.gen.ChunkProviderMars; +import micdoodle8.mods.galacticraft.planets.mars.world.gen.RoomTreasureMars; +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class WorldProviderMars extends WorldProviderSpace implements IGalacticraftWorldProvider, ISolarLevel +{ + + private double solarMultiplier = -1D; + + @Override + public Vector3 getFogColor() + { + float f = 1.0F - this.getStarBrightness(1.0F); + return new Vector3(210F / 255F * f, 120F / 255F * f, 59F / 255F * f); + } + + @Override + public Vector3 getSkyColor() + { + float f = 1.0F - this.getStarBrightness(1.0F); + return new Vector3(154 / 255.0F * f, 114 / 255.0F * f, 66 / 255.0F * f); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 24660L; + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderMars.class; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + float f1 = this.world.getCelestialAngle(par1); + float f2 = 1.0F - (MathHelper.cos(f1 * Constants.twoPI) * 2.0F + 0.25F); + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + return f2 * f2 * 0.75F; + } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 76; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + + // Overriding so that beds do not explode on Mars + @Override + public boolean canRespawnHere() + { + if (EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = false; + return true; + } + return false; + } + + @Override + public float getGravity() + { + return 0.058F; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.9D; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier >= 2; + } + + @Override + public float getFallDamageModifier() + { + return 0.38F; + } + + @Override + public CelestialBody getCelestialBody() + { + return MarsModule.planetMars; + } + + @Override + public double getSolarEnergyMultiplier() + { + if (this.solarMultiplier < 0D) + { + double s = this.getSolarSize(); + this.solarMultiplier = s * s * s; + } + return this.solarMultiplier; + } + + @Override + public int getDungeonSpacing() + { + return 704; + } + + @Override + public DimensionType getDimensionType() + { + return GCPlanetDimensions.MARS; + } + + @Override + public float getArrowGravity() + { + return 0.015F; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasureMars.MARSCHEST; + } + + @Override + public List getSurfaceBlocks() + { + List list = new LinkedList<>(); + list.add(MarsBlocks.marsBlock); + return list; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCargoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCargoRocket.java new file mode 100644 index 00000000..4a2670be --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCargoRocket.java @@ -0,0 +1,411 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.entity.IWorldTransferCallback; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.util.MarsUtil; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; + +public class EntityCargoRocket extends EntityAutoRocket implements IRocketType, IInventory, IWorldTransferCallback +{ + + public EnumRocketType rocketType; + public float rumble; + + public EntityCargoRocket(World par1World) + { + super(par1World); + this.setSize(0.98F, 2F); + } + + public EntityCargoRocket(World par1World, double par2, double par4, double par6, EnumRocketType rocketType) + { + super(par1World, par2, par4, par6); + this.rocketType = rocketType; + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + this.setSize(0.98F, 2F); + } + + @Override + public int getFuelTankCapacity() + { + return 2000; + } + + public float getCargoFilledAmount() + { + float weight = 1; + + for (ItemStack stack : this.stacks) + { + if (stack != null && !stack.isEmpty()) + { + weight += 0.1D; + } + } + + return weight; + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(MarsItems.rocketMars, 1, this.rocketType.getIndex() + 10); + } + + @Override + public void onUpdate() + { + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal() && this.hasValidFuel()) + { + double motionScalar = this.timeSinceLaunch / 250; + + motionScalar = Math.min(motionScalar, 1); + + double modifier = this.getCargoFilledAmount(); + motionScalar *= 5.0D / modifier; + + if (this.launchPhase != EnumLaunchPhase.LANDING.ordinal()) + { + if (motionScalar != 0.0) + { + this.motionY = -motionScalar * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + } + } + + double multiplier = 1.0D; + + if (this.world.provider instanceof IGalacticraftWorldProvider) + { + multiplier = ((IGalacticraftWorldProvider) this.world.provider).getFuelUsageMultiplier(); + + if (multiplier <= 0) + { + multiplier = 1; + } + } + + if (this.timeSinceLaunch % MathHelper.floor(3 * (1 / multiplier)) == 0) + { + this.removeFuel(1); + if (!this.hasValidFuel()) + { + this.stopRocketSound(); + } + } + } else if (!this.hasValidFuel() && this.getLaunched()) + { + if (Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 10 != 0.0) + { + this.motionY -= Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 20; + } + } + + super.onUpdate(); + + if (this.rumble > 0) + { + this.rumble--; + } + + if (this.rumble < 0) + { + this.rumble++; + } + + if (this.launchPhase >= EnumLaunchPhase.IGNITED.ordinal()) + { + this.performHurtAnimation(); + + this.rumble = (float) this.rand.nextInt(3) - 3; + } + + int i; + + if (this.timeUntilLaunch >= 100) + { + i = Math.abs(this.timeUntilLaunch / 100); + } else + { + i = 1; + } + + if ((this.getLaunched() || this.launchPhase == EnumLaunchPhase.IGNITED.ordinal() && this.rand.nextInt(i) == 0) && !ConfigManagerCore.disableSpaceshipParticles && this.hasValidFuel()) + { + if (this.world.isRemote) + { + this.spawnParticles(this.getLaunched()); + } + } + } + + @Override + protected boolean shouldMoveClientSide() + { + return true; + } + + protected void spawnParticles(boolean launched) + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double x1 = 2 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double z1 = 2 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double y1 = 2 * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null) + { + double modifier = this.posY - this.targetVec.getY(); + modifier = Math.max(modifier, 1.0); + x1 *= modifier / 60.0D; + y1 *= modifier / 60.0D; + z1 *= modifier / 60.0D; + } + + final double y = this.prevPosY + (this.posY - this.prevPosY) - 0.4; + + if (!this.isDead) + { + EntityLivingBase riddenByEntity = this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof EntityLivingBase) ? null : (EntityLivingBase) this.getPassengers().get(0); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", + new Vector3(this.posX + 0.2 - this.rand.nextDouble() / 10 + x1, y, this.posZ + 0.2 - this.rand.nextDouble() / 10 + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", + new Vector3(this.posX - 0.2 + this.rand.nextDouble() / 10 + x1, y, this.posZ + 0.2 - this.rand.nextDouble() / 10 + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", + new Vector3(this.posX - 0.2 + this.rand.nextDouble() / 10 + x1, y, this.posZ - 0.2 + this.rand.nextDouble() / 10 + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", + new Vector3(this.posX + 0.2 - this.rand.nextDouble() / 10 + x1, y, this.posZ - 0.2 + this.rand.nextDouble() / 10 + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX + x1, y, this.posZ + z1), new Vector3(x1, y1, z1), new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX + 0.2 + x1, y, this.posZ + z1), new Vector3(x1, y1, z1), + new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX - 0.2 + x1, y, this.posZ + z1), new Vector3(x1, y1, z1), + new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX + x1, y, this.posZ + 0.2D + z1), new Vector3(x1, y1, z1), + new Object[] + {riddenByEntity}); + GalacticraftCore.proxy.spawnParticle(this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle", new Vector3(this.posX + x1, y, this.posZ - 0.2D + z1), new Vector3(x1, y1, z1), + new Object[] + {riddenByEntity}); + } + } + + @Override + public void decodePacketdata(ByteBuf buffer) + { + this.rocketType = EnumRocketType.values()[buffer.readInt()]; + super.decodePacketdata(buffer); + this.posX = buffer.readDouble() / 8000.0D; + this.posY = buffer.readDouble() / 8000.0D; + this.posZ = buffer.readDouble() / 8000.0D; + } + + @Override + public void getNetworkedData(ArrayList list) + { + if (this.world.isRemote) + { + return; + } + list.add(this.rocketType != null ? this.rocketType.getIndex() : 0); + super.getNetworkedData(list); + list.add(this.posX * 8000.0D); + list.add(this.posY * 8000.0D); + list.add(this.posZ * 8000.0D); + } + + @Override + public void onReachAtmosphere() + { + if (this.world.isRemote) + { + // stop the sounds on the client - but do not reset, the rocket may + // start again + this.stopRocketSound(); + return; + } + + GalacticraftPlanets.logger.debug("[Serverside] Cargo rocket reached space, heading to " + this.destinationFrequency); + this.setTarget(true, this.destinationFrequency); + + if (this.targetVec != null) + { + GalacticraftPlanets.logger.debug("Destination location = " + this.targetVec.toString()); + if (this.targetDimension != GCCoreUtil.getDimensionID(this.world)) + { + GalacticraftPlanets.logger.debug("Destination is in different dimension: " + this.targetDimension); + WorldProvider targetDim = WorldUtil.getProviderForDimensionServer(this.targetDimension); + if (targetDim != null && targetDim.world instanceof WorldServer) + { + GalacticraftPlanets.logger.debug("Loaded destination dimension " + this.targetDimension); + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + Entity e = WorldUtil.transferEntityToDimension(this, this.targetDimension, (WorldServer) targetDim.world, false, null); + + if (e instanceof EntityCargoRocket) + { + GalacticraftPlanets.logger.debug("Cargo rocket arrived at destination dimension, going into landing mode."); + e.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + ((EntityCargoRocket) e).setLaunchPhase(EnumLaunchPhase.LANDING); + // No setDead() following successful + // transferEntityToDimension() - see javadoc on that + } else + { + GalacticraftPlanets.logger.info("Error: failed to recreate the cargo rocket in landing mode on target planet."); + e.setDead(); + this.setDead(); + } + return; + } + GalacticraftPlanets.logger.info("Error: the server failed to load the dimension the cargo rocket is supposed to land in. Destroying rocket!"); + this.setDead(); + return; + } else + { + GalacticraftPlanets.logger.debug("Cargo rocket going into landing mode in same destination."); + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + this.setLaunchPhase(EnumLaunchPhase.LANDING); + return; + } + } else + { + GalacticraftPlanets.logger.info("Error: the cargo rocket failed to find a valid landing spot when it reached space."); + this.setDead(); + } + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (!this.world.isRemote && player instanceof EntityPlayerMP) + { + MarsUtil.openCargoRocketInventory((EntityPlayerMP) player, this); + } + + return false; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + if (world.isRemote) + return; + nbt.setInteger("Type", this.rocketType.getIndex()); + + super.writeEntityToNBT(nbt); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + this.rocketType = EnumRocketType.values()[nbt.getInteger("Type")]; + + super.readEntityFromNBT(nbt); + } + + @Override + public EnumRocketType getType() + { + return this.rocketType; + } + + @Override + public int getSizeInventory() + { + if (this.rocketType == null) + { + return 0; + } + return this.rocketType.getInventorySpace(); + } + + @Override + public void onWorldTransferred(World world) + { + if (this.targetVec != null) + { + this.setPosition(this.targetVec.getX() + 0.5F, this.targetVec.getY() + 800, this.targetVec.getZ() + 0.5F); + this.setLaunchPhase(EnumLaunchPhase.LANDING); + } else + { + this.setDead(); + } + } + + @Override + public int getRocketTier() + { + return Integer.MAX_VALUE; + } + + @Override + public int getPreLaunchWait() + { + return 20; + } + + @Override + public List getItemsDropped(List droppedItemList) + { + super.getItemsDropped(droppedItemList); + ItemStack rocket = new ItemStack(MarsItems.rocketMars, 1, this.rocketType.getIndex() + 10); + rocket.setTagCompound(new NBTTagCompound()); + rocket.getTagCompound().setInteger("RocketFuel", this.fuelTank.getFluidAmount()); + droppedItemList.add(rocket); + return droppedItemList; + } + + @Override + public boolean isPlayerRocket() + { + return false; + } + + @Override + public double getOnPadYOffset() + { + return -0.05D; + } + + @Override + public float getRenderOffsetY() + { + return -0.1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCreeperBoss.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCreeperBoss.java new file mode 100644 index 00000000..c996c58f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityCreeperBoss.java @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.entities.EntityAIArrowAttack; +import micdoodle8.mods.galacticraft.core.entities.EntityBossBase; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.ConfigManagerAsteroids; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BossInfo; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; + +public class EntityCreeperBoss extends EntityBossBase implements IEntityBreathable, IRangedAttackMob +{ + + protected long ticks = 0; + public int headsRemaining = 3; + private Entity targetEntity; + + public EntityCreeperBoss(World par1World) + { + super(par1World); + this.setSize(2.0F, 7.0F); + this.isImmuneToFire = true; + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIArrowAttack(this, 1.0D, 25, 20.0F)); + this.tasks.addTask(2, new EntityAIWander(this, 1.0D)); + this.tasks.addTask(3, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(3, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, 0, true, false, null)); + } + + @Override + public boolean attackEntityFrom(DamageSource damageSource, float damage) + { + if (damageSource.getDamageType().equals("fireball")) + { + if (this.isEntityInvulnerable(damageSource)) + { + return false; + } else if (super.attackEntityFrom(damageSource, damage)) + { + Entity entity = damageSource.getTrueSource(); + + if (this.getPassengers().contains(entity) && this.getRidingEntity() != entity) + { + if (entity != this && entity instanceof EntityLivingBase) + { + this.setAttackTarget((EntityLivingBase) entity); + } + + return true; + } else + { + return true; + } + } else + { + return false; + } + } + + return false; + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(200.0F * ConfigManagerCore.dungeonBossHealthMod); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.05F); + } + + @Override + public void knockBack(Entity par1Entity, float par2, double par3, double par5) + { + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + protected SoundEvent getAmbientSound() + { + return null; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + this.playSound(GCSounds.bossOuch, this.getSoundVolume(), this.getSoundPitch() - 0.15F); + return null; + } + + @Override + protected SoundEvent getDeathSound() + { + return null; + } + + // @Override +// protected String getHurtSound() +// { +// this.playSound(Constants.TEXTURE_PREFIX + "entity.ouch", this.getSoundVolume(), this.getSoundPitch() - 0.15F); +// return null; +// } +// +// @Override +// protected String getDeathSound() +// { +// return null; +// } + + @Override + protected void onDeathUpdate() + { + super.onDeathUpdate(); + + if (!this.world.isRemote) + { + if (this.deathTicks == 1) + { + GalacticraftCore.packetPipeline.sendToAllAround(new PacketSimple(EnumSimplePacket.C_PLAY_SOUND_BOSS_DEATH, GCCoreUtil.getDimensionID(this.world), new Object[] + {getSoundPitch() - 0.1F}), new TargetPoint(GCCoreUtil.getDimensionID(this.world), this.posX, this.posY, this.posZ, 40.0D)); + } + } + } + + @Override + public void onLivingUpdate() + { + this.ticks++; + + if (this.getHealth() <= 0) + { + this.headsRemaining = 0; + } else if (this.getHealth() <= this.getMaxHealth() / 3.0) + { + this.headsRemaining = 1; + } else if (this.getHealth() <= 2 * (this.getMaxHealth() / 3.0)) + { + this.headsRemaining = 2; + } + + final EntityPlayer player = this.world.getClosestPlayer(this.posX, this.posY, this.posZ, 20.0, false); + + if (player != null && !player.equals(this.targetEntity)) + { + if (this.getDistanceSq(player) < 400.0D) + { + this.getNavigator().getPathToEntityLiving(player); + this.targetEntity = player; + } + } else + { + this.targetEntity = null; + } + + super.onLivingUpdate(); + } + + @Override + protected Item getDropItem() + { + return Items.ARROW; + } + + @Override + public EntityItem entityDropItem(ItemStack par1ItemStack, float par2) + { + final EntityItem entityitem = new EntityItem(this.world, this.posX, this.posY + par2, this.posZ, par1ItemStack); + entityitem.motionY = -2.0D; + entityitem.setDefaultPickupDelay(); + if (this.captureDrops) + { + this.capturedDrops.add(entityitem); + } else + { + this.world.spawnEntity(entityitem); + } + return entityitem; + } + + @Override + protected void dropFewItems(boolean b, int i) + { + if (this.rand.nextInt(200) - i >= 5) + { + return; + } + + if (i > 0) + { + final ItemStack var2 = new ItemStack(Items.BOW); + EnchantmentHelper.addRandomEnchantment(this.rand, var2, 5, false); + this.entityDropItem(var2, 0.0F); + } else + { + this.dropItem(Items.BOW, 1); + } + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public ItemStack getGuaranteedLoot(Random rand) + { + List stackList = new LinkedList<>(); + stackList.addAll(GalacticraftRegistry.getDungeonLoot(2)); + boolean hasT3Rocket = false; + boolean hasAstroMiner = false; + // Check if player seems to have Tier 3 rocket or Astro Miner already - + // in that case we don't want more + // (we don't really want him giving powerful schematics to his friends + // who are still on Overworld) + final EntityPlayer player = this.world.getClosestPlayer(this.posX, this.posY, this.posZ, 20.0, false); + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + if (stats != null) + { + for (ISchematicPage page : stats.getUnlockedSchematics()) + { + if (page.getPageID() == ConfigManagerAsteroids.idSchematicRocketT3) + { + hasT3Rocket = true; + } else if (page.getPageID() == ConfigManagerAsteroids.idSchematicRocketT3 + 1) + { + hasAstroMiner = true; + } + } + } + } + // The following code assumes the list start is hard coded to: Cargo + // Rocket, T3 Rocket, Astro Miner in that order + // (see MarsModule.init()) + // + // Remove schematics which he already has + if (hasT3Rocket && hasAstroMiner) + { + // (but do not remove both, otherwise the list is too short) + if (stackList.size() == 3) + { + stackList.remove(1 + rand.nextInt(2)); + } else + { + stackList.remove(2); + stackList.remove(1); + } + } else if (hasT3Rocket) + { + stackList.remove(1); + } else if (hasAstroMiner) + { + stackList.remove(2); + } + // If he does not yet have the T3 rocket, limit the list size to 2 so + // 50% chance of getting it + // otherwise return the full list (note: addons could have added more + // schematics to the list) + int range = (!hasT3Rocket) ? 2 : stackList.size(); + return stackList.get(rand.nextInt(range)).copy(); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase entitylivingbase, float f) + { + this.world.playEvent(null, 1024, new BlockPos(this), 0); + double d3 = this.posX; + double d4 = this.posY + 5.5D; + double d5 = this.posZ; + double d6 = entitylivingbase.posX - d3; + double d7 = entitylivingbase.posY + entitylivingbase.getEyeHeight() * 0.5D - d4; + double d8 = entitylivingbase.posZ - d5; + EntityProjectileTNT projectileTNT = new EntityProjectileTNT(this.world, this, d6 * 0.5D, d7 * 0.5D, d8 * 0.5D); + + projectileTNT.posY = d4; + projectileTNT.posX = d3; + projectileTNT.posZ = d5; + this.world.spawnEntity(projectileTNT); + } + + @Override + public int getChestTier() + { + return 2; + } + + @Override + public void dropKey() + { + this.entityDropItem(new ItemStack(MarsItems.key, 1, 0), 0.5F); + } + + @Override + public BossInfo.Color getHealthBarColor() + { + return BossInfo.Color.YELLOW; + } + + @Override + public void setSwingingArms(boolean swingingArms) + { + } + + @Override + public void onKillCommand() + { + this.setHealth(0.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityLandingBalloons.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityLandingBalloons.java new file mode 100644 index 00000000..6310328f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityLandingBalloons.java @@ -0,0 +1,346 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.Map; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.util.MarsUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityLandingBalloons extends EntityLanderBase implements IIgnoreShift, ICameraZoomEntity +{ + + private int groundHitCount; + private float rotationPitchSpeed; + private float rotationYawSpeed; + + public EntityLandingBalloons(World world) + { + super(world); + this.setSize(2.0F, 2.0F); + this.rotationPitchSpeed = this.rand.nextFloat(); + this.rotationYawSpeed = this.rand.nextFloat(); + } + + public EntityLandingBalloons(EntityPlayerMP player) + { + super(player, 0F); + this.setSize(2.0F, 2.0F); + } + + @Override + public double getMountedYOffset() + { + return super.getMountedYOffset() - 0.9; + } + + @Override + public float getRotateOffset() + { + // Signal no rotate + return -20.0F; + } + + @Override + public void onUpdate() + { + if (!this.getPassengers().isEmpty()) + { + for (Entity entity : this.getPassengers()) + { + entity.onGround = false; + } + } + + super.onUpdate(); + + if (!this.getPassengers().isEmpty()) + { + for (Entity entity : this.getPassengers()) + { + entity.onGround = false; + } + } + + if (!this.onGround) + { + this.rotationPitch += this.rotationPitchSpeed; + this.rotationYaw += this.rotationYawSpeed; + } + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + this.groundHitCount = nbt.getInteger("GroundHitCount"); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + nbt.setInteger("GroundHitCount", this.groundHitCount); + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.mars_lander.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + + return true; + } else if (this.getPassengers().isEmpty() && this.groundHitCount >= 14 && player instanceof EntityPlayerMP) + { + MarsUtil.openParachestInventory((EntityPlayerMP) player, this); + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + return true; + } else + { + return true; + } + } + + @Override + public boolean pressKey(int key) + { + if (this.onGround) + { + return false; + } + +// switch (key) +// { +// case 0: // Accelerate +// { +// this.rotationPitchSpeed -= 0.5F * TURN_FACTOR; +// return true; +// } +// case 1: // Deccelerate +// { +// this.rotationPitchSpeed += 0.5F * TURN_FACTOR; +// return true; +// } +// case 2: // Left +// this.rotationYawSpeed -= 0.5F * TURN_FACTOR; +// return true; +// case 3: // Right +// this.rotationYawSpeed += 0.5F * TURN_FACTOR; +// return true; +// } + + return false; + } + + @Override + public boolean shouldMove() + { + if (this.ticks < 40 || !this.hasReceivedPacket) + { + return false; + } + + return ((!this.getPassengers().isEmpty() && this.groundHitCount < 14) || !this.onGround); + } + + @Override + public boolean shouldSpawnParticles() + { + return false; + } + + @Override + public Map getParticleMap() + { + return null; + } + + @SideOnly(Side.CLIENT) + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + return null; + } + + @Override + public void tickInAir() + { + if (this.world.isRemote) + { + if (this.groundHitCount == 0) + { + this.motionY = -this.posY / 50.0D; + } else if (this.groundHitCount < 14 || this.shouldMove()) + { + this.motionY *= 0.95D; + this.motionY -= 0.08D; + } else + { + if (!this.shouldMove()) + { + this.motionY = this.motionX = this.motionZ = this.rotationPitchSpeed = this.rotationYawSpeed = 0.0F; + } + } + } + } + + @Override + public void tickOnGround() + { + } + + @Override + public void onGroundHit() + { + } + + @Override + public Vector3 getMotionVec() + { + if (this.onGround) + { + if (this.groundHitCount < 14) + { + this.groundHitCount++; + double mag = (1.0D / this.groundHitCount) * 4.0D; + double mX = this.rand.nextDouble() - 0.5; + double mY = 1.0D; + double mZ = this.rand.nextDouble() - 0.5; + mX *= mag / 3.0D; + mY *= mag; + mZ *= mag / 3.0D; + return new Vector3(mX, mY, mZ); + } + } + + if (this.ticks >= 40 && this.ticks < 45) + { + this.motionY = this.getInitialMotionY(); + } + + if (!this.shouldMove()) + { + return new Vector3(0, 0, 0); + } + + return new Vector3(this.motionX, this.ticks < 40 ? 0 : this.motionY, this.motionZ); + } + + @Override + public ArrayList getNetworkedData() + { + ArrayList objList = new ArrayList(); + objList.addAll(super.getNetworkedData()); + if ((this.world.isRemote && this.hasReceivedPacket && this.groundHitCount <= 14) || (!this.world.isRemote && this.groundHitCount == 14)) + { + objList.add(this.groundHitCount); + } + return objList; + } + + @Override + public int getPacketTickSpacing() + { + return 5; + } + + @Override + public double getPacketSendDistance() + { + return 50.0D; + } + + @Override + public void readNetworkedData(ByteBuf buffer) + { + try + { + super.readNetworkedData(buffer); + + if (buffer.readableBytes() > 0) + { + this.groundHitCount = buffer.readInt(); + } + } catch (final Exception e) + { + e.printStackTrace(); + } + } + + @Override + public boolean allowDamageSource(DamageSource damageSource) + { + return this.groundHitCount > 0 && super.allowDamageSource(damageSource); + } + + @Override + public double getInitialMotionY() + { + return 0; + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return this.groundHitCount < 14 || !this.onGround; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityProjectileTNT.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityProjectileTNT.java new file mode 100644 index 00000000..6ff9abf9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityProjectileTNT.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.projectile.EntityFireball; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityProjectileTNT extends EntityFireball +{ + + public EntityProjectileTNT(World par1World) + { + super(par1World); + this.setSize(1.0F, 1.0F); + } + + public EntityProjectileTNT(World par1World, EntityLivingBase par2EntityLivingBase, double par3, double par5, double par7) + { + super(par1World, par2EntityLivingBase, par3, par5, par7); + this.setSize(1.0F, 1.0F); + } + + @SideOnly(Side.CLIENT) + public EntityProjectileTNT(World par1World, double par2, double par4, double par6, double par8, double par10, double par12) + { + super(par1World, par2, par4, par6, par8, par10, par12); + this.setSize(0.3125F, 0.3125F); + } + + @Override + public boolean isBurning() + { + return false; + } + + @Override + protected void onImpact(RayTraceResult movingObjectPosition) + { + if (!this.world.isRemote) + { + if (movingObjectPosition.entityHit != null && !(movingObjectPosition.entityHit instanceof EntityCreeper)) + { + float difficulty = 0; + switch (this.world.getDifficulty()) + { + case HARD: + difficulty = 2F; + break; + case NORMAL: + difficulty = 1F; + break; + } + movingObjectPosition.entityHit.attackEntityFrom(DamageSource.causeFireballDamage(this, this.shootingEntity), 6.0F + 3.0F * difficulty); + } + + this.world.newExplosion((Entity) null, this.posX, this.posY, this.posZ, 1.0F, false, this.world.getGameRules().getBoolean("mobGriefing")); + this.setDead(); + } + } + + @Override + public boolean canBeCollidedWith() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySlimeling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySlimeling.java new file mode 100644 index 00000000..1e77da52 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySlimeling.java @@ -0,0 +1,801 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import java.util.UUID; +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.mars.MarsModuleClient; +import micdoodle8.mods.galacticraft.planets.mars.inventory.InventorySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIFollowOwner; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILeapAtTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; +import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; +import net.minecraft.entity.ai.EntityAISit; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITargetNonTamed; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; + +public class EntitySlimeling extends EntityTameable implements IEntityBreathable +{ + + public InventorySlimeling slimelingInventory = new InventorySlimeling(this); + + private static final DataParameter HEALTH = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter COLOR_RED = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter COLOR_GREEN = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter COLOR_BLUE = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter AGE = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.VARINT); + private static final DataParameter NAME = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.STRING); + private static final DataParameter FAV_FOOD_ID = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.VARINT); + private static final DataParameter ATTACK_DAMAGE = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.FLOAT); + private static final DataParameter KILLS = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.VARINT); + private static final DataParameter OWNER_USERNAME = EntityDataManager.createKey(EntitySlimeling.class, DataSerializers.STRING); + + public float colorRed; + public float colorGreen; + public float colorBlue; + public long ticksAlive; + public int age = 0; + public final int MAX_AGE = 100000; + public String slimelingName = GCCoreUtil.translate("gui.message.unnamed.name"); + public int favFoodID = 1; + public float attackDamage = 0.05F; + public int kills; + + public EntitySlimeling(World par1World) + { + super(par1World); + this.setSize(0.45F, 0.7F); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.aiSit = new EntityAISitGC(this); + this.tasks.addTask(2, this.aiSit); + this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F)); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, true)); + this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); + this.tasks.addTask(6, new EntityAIMate(this, 1.0D)); + this.tasks.addTask(7, new EntityAIWander(this, 1.0D)); + this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(9, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); + this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); + this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true)); + this.targetTasks.addTask(4, new EntityAITargetNonTamed(this, EntitySludgeling.class, false, p_apply_1_ -> p_apply_1_ instanceof EntitySludgeling)); + this.setTamed(false); + + switch (this.rand.nextInt(3)) + { + case 0: + this.colorRed = 1.0F; + break; + case 1: + this.colorBlue = 1.0F; + break; + case 2: + this.colorRed = 1.0F; + this.colorGreen = 1.0F; + break; + } + + this.setRandomFavFood(); + } + + @Override + public EntityLivingBase getOwner() + { + EntityLivingBase owner = super.getOwner(); + if (owner == null) + { + String ownerName = getOwnerUsername(); + if (ownerName != null) + { + return this.world.getPlayerEntityByName(ownerName); + } + } + return owner; + } + + @Override + public boolean isOwner(EntityLivingBase entityLivingBase) + { + return entityLivingBase == this.getOwner(); + } + + @Override + public boolean canBreatheUnderwater() + { + return true; + } + + public float getSlimelingSize() + { + return this.getScale() * 2.0F; + } + + @Override + public void setScaleForAge(boolean par1) + { + this.setScale(this.getSlimelingSize()); + } + + @Override + public boolean isChild() + { + return this.getAge() / (float) this.MAX_AGE < 0.33F; + } + + private void setRandomFavFood() + { + switch (this.rand.nextInt(10)) + { + case 0: + this.favFoodID = Item.getIdFromItem(Items.GOLD_INGOT); + break; + case 1: + this.favFoodID = Item.getIdFromItem(Items.FLINT_AND_STEEL); + break; + case 2: + this.favFoodID = Item.getIdFromItem(Items.BAKED_POTATO); + break; + case 3: + this.favFoodID = Item.getIdFromItem(Items.STONE_SWORD); + break; + case 4: + this.favFoodID = Item.getIdFromItem(Items.GUNPOWDER); + break; + case 5: + this.favFoodID = Item.getIdFromItem(Items.WOODEN_HOE); + break; + case 6: + this.favFoodID = Item.getIdFromItem(Items.EMERALD); + break; + case 7: + this.favFoodID = Item.getIdFromItem(Items.FISH); + break; + case 8: + this.favFoodID = Item.getIdFromItem(Items.REPEATER); + break; + case 9: + this.favFoodID = Item.getIdFromItem(Items.BOAT); + break; + } + } + + public EntitySlimeling(World par1World, float red, float green, float blue) + { + this(par1World); + this.colorRed = red; + this.colorGreen = green; + this.colorBlue = blue; + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(this.getMaxHealthSlimeling()); + } + +// @Override +// public boolean isAIEnabled() +// { +// return true; +// } + + @Override + protected void updateAITasks() + { + this.dataManager.set(HEALTH, this.getHealth()); + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(HEALTH, this.getHealth()); + this.dataManager.register(COLOR_RED, this.colorRed); + this.dataManager.register(COLOR_GREEN, this.colorGreen); + this.dataManager.register(COLOR_BLUE, this.colorBlue); + this.dataManager.register(AGE, this.age); + this.dataManager.register(NAME, ""); + this.dataManager.register(FAV_FOOD_ID, this.favFoodID); + this.dataManager.register(ATTACK_DAMAGE, this.attackDamage); + this.dataManager.register(KILLS, this.kills); + this.dataManager.register(OWNER_USERNAME, ""); + this.setName(GCCoreUtil.translate("gui.message.unnamed.name")); + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) + { + super.writeEntityToNBT(nbt); + nbt.setTag("SlimelingInventory", this.slimelingInventory.writeToNBT(new NBTTagList())); + nbt.setFloat("SlimeRed", this.colorRed); + nbt.setFloat("SlimeGreen", this.colorGreen); + nbt.setFloat("SlimeBlue", this.colorBlue); + nbt.setInteger("SlimelingAge", this.age); + nbt.setString("SlimelingName", this.slimelingName); + nbt.setInteger("FavFoodID", this.favFoodID); + nbt.setFloat("SlimelingDamage", this.attackDamage); + nbt.setInteger("SlimelingKills", this.kills); + nbt.setString("OwnerUsername", this.getOwnerUsername()); + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) + { + super.readEntityFromNBT(nbt); + this.slimelingInventory.readFromNBT(nbt.getTagList("SlimelingInventory", 10)); + this.colorRed = nbt.getFloat("SlimeRed"); + this.colorGreen = nbt.getFloat("SlimeGreen"); + this.colorBlue = nbt.getFloat("SlimeBlue"); + this.age = nbt.getInteger("SlimelingAge"); + this.slimelingName = nbt.getString("SlimelingName"); + this.favFoodID = nbt.getInteger("FavFoodID"); + this.attackDamage = nbt.getFloat("SlimelingDamage"); + this.kills = nbt.getInteger("SlimelingKills"); + this.setOwnerUsername(nbt.getString("OwnerUsername")); + this.setColorRed(this.colorRed); + this.setColorGreen(this.colorGreen); + this.setColorBlue(this.colorBlue); + this.setAge(this.age); + this.setName(this.slimelingName); + this.setKillCount(this.kills); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + this.playSound(SoundEvents.BLOCK_SLIME_STEP, this.getSoundVolume(), 1.1F); + return null; + } + + @Override + protected SoundEvent getDeathSound() + { + this.playSound(GCSounds.slimeDeath, this.getSoundVolume(), 0.8F); + return null; + } + + @Override + protected Item getDropItem() + { + return Items.SLIME_BALL; + } + + @Override + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (!this.world.isRemote) + { + if (this.ticksAlive <= 0) + { + this.setColorRed(this.colorRed); + this.setColorGreen(this.colorGreen); + this.setColorBlue(this.colorBlue); + } + + this.ticksAlive++; + + if (this.ticksAlive % 2 == 0) + { + if (this.age < this.MAX_AGE) + { + this.age++; + } + + this.setAge(Math.min(this.age, this.MAX_AGE)); + } + + this.setFavoriteFood(this.favFoodID); + this.setAttackDamage(this.attackDamage); + this.setKillCount(this.kills); +// this.setCargoSlot(this.slimelingInventory.getStackInSlot(1)); + } + + if (!this.world.isRemote) + { + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(this.getMaxHealthSlimeling()); + + if (this.getOwnerUsername().isEmpty()) + { + Entity owner = this.getOwner(); + + if (owner != null) + { + this.setOwnerUsername(owner.getName()); + } + } + } + } + + private double getMaxHealthSlimeling() + { + if (this.isTamed()) + { + return 20.001D + 30.0 * ((double) this.age / (double) this.MAX_AGE); + } else + { + return 8.0D; + } + } + + @Override + public float getEyeHeight() + { + return this.height * 0.8F; + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + if (this.isEntityInvulnerable(par1DamageSource)) + { + return false; + } else + { + Entity entity = par1DamageSource.getTrueSource(); + this.setSittingAI(false); + + if (entity != null && !(entity instanceof EntityPlayer)) + { + par2 = (par2 + 1.0F) / 2.0F; + } + + return super.attackEntityFrom(par1DamageSource, par2); + } + } + + @Override + public boolean attackEntityAsMob(Entity par1Entity) + { + return par1Entity.attackEntityFrom(new EntityDamageSource("slimeling", this), this.getDamage()); + } + + public float getDamage() + { + int i = this.isTamed() ? 5 : 2; + return i * this.getAttackDamage(); + } + + @Override + public void setTamed(boolean par1) + { + super.setTamed(par1); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(this.getMaxHealthSlimeling()); + } + + @Override + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.inventory.getCurrentItem(); + + if (this.isTamed()) + { + if (!itemstack.isEmpty()) + { + if (itemstack.getItem() == this.getFavoriteFood()) + { + if (this.isOwner(player)) + { + itemstack.shrink(1); + + if (itemstack.isEmpty()) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + } + + if (this.world.isRemote) + { + MarsModuleClient.openSlimelingGui(this, 1); + } + + if (this.rand.nextInt(3) == 0) + { + this.setRandomFavFood(); + } + } else + { + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + if (stats.getChatCooldown() == 0) + { + player.sendMessage(new TextComponentString(GCCoreUtil.translate("gui.slimeling.chat.wrong_player"))); + stats.setChatCooldown(100); + } + } + } + } else + { + if (this.world.isRemote) + { + MarsModuleClient.openSlimelingGui(this, 0); + } + } + } else + { + if (this.world.isRemote) + { + MarsModuleClient.openSlimelingGui(this, 0); + } + } + + return true; + } else if (!itemstack.isEmpty() && itemstack.getItem() == Items.SLIME_BALL) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + if (itemstack.isEmpty()) + { + player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); + } + + if (!this.world.isRemote) + { + if (this.rand.nextInt(3) == 0) + { + this.setTamed(true); + this.getNavigator().clearPath(); + this.setAttackTarget(null); + this.setSittingAI(true); + this.setHealth(20.0F); + this.setOwnerId(player.getUniqueID()); + this.setOwnerUsername(player.getName()); + this.playTameEffect(true); + this.world.setEntityState(this, (byte) 7); + } else + { + this.playTameEffect(false); + this.world.setEntityState(this, (byte) 6); + } + } + + return true; + } + + return super.processInteract(player, hand); + } + + public void setSittingAI(boolean sitting) + { + this.aiSit.setSitting(sitting); + } + + public String getOwnerUsername() + { + String s = this.dataManager.get(OWNER_USERNAME); + return s == null || s.length() == 0 ? "" : s; + } + + public void setOwnerUsername(String username) + { + this.dataManager.set(OWNER_USERNAME, username); + } + + @Override + public boolean isBreedingItem(ItemStack par1ItemStack) + { + return false; + } + + public EntitySlimeling spawnBabyAnimal(EntityAgeable par1EntityAgeable) + { + if (par1EntityAgeable instanceof EntitySlimeling) + { + EntitySlimeling otherSlimeling = (EntitySlimeling) par1EntityAgeable; + + Vector3 colorParentA = new Vector3(this.getColorRed(), this.getColorGreen(), this.getColorBlue()); + Vector3 colorParentB = new Vector3(otherSlimeling.getColorRed(), otherSlimeling.getColorGreen(), otherSlimeling.getColorBlue()); + Vector3 newColor = ColorUtil.addColorsRealistically(colorParentA, colorParentB); + newColor.x = Math.max(Math.min(newColor.x, 1.0F), 0); + newColor.y = Math.max(Math.min(newColor.y, 1.0F), 0); + newColor.z = Math.max(Math.min(newColor.z, 1.0F), 0); + EntitySlimeling newSlimeling = new EntitySlimeling(this.world, (float) newColor.x, (float) newColor.y, (float) newColor.z); + + UUID s = this.getOwnerId(); + + if (s != null) + { + newSlimeling.setOwnerId(s); + newSlimeling.setTamed(true); + } + + return newSlimeling; + } + + return null; + } + + @Override + public boolean canMateWith(EntityAnimal par1EntityAnimal) + { + if (par1EntityAnimal == this) + { + return false; + } else if (!this.isTamed()) + { + return false; + } else if (!(par1EntityAnimal instanceof EntitySlimeling)) + { + return false; + } else + { + EntitySlimeling slimeling = (EntitySlimeling) par1EntityAnimal; + return slimeling.isTamed() && !slimeling.isSitting() && this.isInLove() && slimeling.isInLove(); + } + } + + @Override + public boolean shouldAttackEntity(EntityLivingBase toAttack, EntityLivingBase owner) + { + if (!(toAttack instanceof EntityCreeper) && !(toAttack instanceof EntityGhast)) + { + if (toAttack instanceof EntitySlimeling) + { + EntitySlimeling slimeling = (EntitySlimeling) toAttack; + + if (slimeling.isTamed() && slimeling.getOwner() == owner) + { + return false; + } + } + + return !(toAttack instanceof EntityPlayer && owner instanceof EntityPlayer && !((EntityPlayer) owner).canAttackPlayer((EntityPlayer) toAttack)) + && (!(toAttack instanceof EntityHorse) || !((EntityHorse) toAttack).isTame()); + } else + { + return false; + } + } + + @Override + public EntityAgeable createChild(EntityAgeable par1EntityAgeable) + { + return this.spawnBabyAnimal(par1EntityAgeable); + } + + public float getColorRed() + { + return this.dataManager.get(COLOR_RED); + } + + public void setColorRed(float color) + { + this.dataManager.set(COLOR_RED, color); + } + + public float getColorGreen() + { + return this.dataManager.get(COLOR_GREEN); + } + + public void setColorGreen(float color) + { + this.dataManager.set(COLOR_GREEN, color); + } + + public float getColorBlue() + { + return this.dataManager.get(COLOR_BLUE); + } + + public void setColorBlue(float color) + { + this.dataManager.set(COLOR_BLUE, color); + } + + public int getAge() + { + return this.dataManager.get(AGE); + } + + public void setAge(int age) + { + this.dataManager.set(AGE, age); + } + + @Override + public String getName() + { + return this.dataManager.get(NAME); + } + + public void setName(String name) + { + this.dataManager.set(NAME, name); + } + + public Item getFavoriteFood() + { + return Item.getItemById(this.dataManager.get(FAV_FOOD_ID)); + } + + public void setFavoriteFood(int foodID) + { + this.dataManager.set(FAV_FOOD_ID, foodID); + } + + public float getAttackDamage() + { + return this.dataManager.get(ATTACK_DAMAGE); + } + + public void setAttackDamage(float damage) + { + this.dataManager.set(ATTACK_DAMAGE, damage); + } + + public int getKillCount() + { + return this.dataManager.get(KILLS); + } + + public void setKillCount(int damage) + { + this.dataManager.set(KILLS, damage); + } + + @Override + public boolean canBreath() + { + return true; + } + + public float getScale() + { + return this.getAge() / (float) this.MAX_AGE * 0.5F + 0.5F; + } + + public EntityAISit getAiSit() + { + return this.aiSit; + } + + @Override + public void onDeath(DamageSource p_70645_1_) + { + super.onDeath(p_70645_1_); + + if (!this.world.isRemote) + { + ItemStack bag = this.slimelingInventory.getStackInSlot(1); + if (bag != null && bag.getItem() == MarsItems.marsItemBasic && bag.getItemDamage() == 4) + { + this.slimelingInventory.decrStackSize(1, 64); + this.entityDropItem(bag, 0.5F); + } + } + } + + public static class EntityAISitGC extends EntityAISit + { + + private EntityTameable theEntity; + private boolean isSitting; + + public EntityAISitGC(EntityTameable theEntity) + { + super(theEntity); + this.theEntity = theEntity; + this.setMutexBits(5); + } + + @Override + public boolean shouldExecute() + { + if (!this.theEntity.isTamed()) + { + return false; + } else if (this.theEntity.isInWater()) + { + return false; + } else + { + Entity e = this.theEntity.getOwner(); + if (e instanceof EntityLivingBase) + { + EntityLivingBase living = (EntityLivingBase) e; + return living == null ? true : (this.theEntity.getDistanceSq(living) < 144.0D && living.getRevengeTarget() != null ? false : this.isSitting); + } + return false; + } + } + + @Override + public void startExecuting() + { + this.theEntity.getNavigator().clearPath(); + this.theEntity.setSitting(true); + } + + @Override + public void resetTask() + { + this.theEntity.setSitting(false); + } + + @Override + public void setSitting(boolean isSitting) + { + this.isSitting = isSitting; + } + } + + @Override + protected void jump() + { + this.motionY = 0.48D / WorldUtil.getGravityFactor(this); + if (this.motionY < 0.28D) + { + this.motionY = 0.28D; + } + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F; + } + + if (this.isSprinting()) + { + float f = this.rotationYaw / Constants.RADIANS_TO_DEGREES; + this.motionX -= MathHelper.sin(f) * 0.2F; + this.motionZ += MathHelper.cos(f) * 0.2F; + } + + this.isAirBorne = true; + ForgeHooks.onLivingJump(this); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySludgeling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySludgeling.java new file mode 100644 index 00000000..eac1d6d6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntitySludgeling.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import net.minecraft.block.Block; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.util.DamageSource; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntitySludgeling extends EntityMob implements IEntityBreathable +{ + + public EntitySludgeling(World par1World) + { + super(par1World); + this.setSize(0.3F, 0.2F); + this.tasks.taskEntries.clear(); + this.targetTasks.taskEntries.clear(); + this.tasks.addTask(1, new EntityAIAttackMelee(this, 0.25F, true)); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, false)); + this.targetTasks.addTask(1, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, 0, false, true, null)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityEvolvedZombie.class, 0, false, true, null)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityEvolvedSkeleton.class, 0, false, true, null)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityEvolvedSpider.class, 0, false, true, null)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityEvolvedCreeper.class, 0, false, true, null)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget<>(this, EntitySlimeling.class, 200, false, true, null)); + } + + @Override + public boolean canBreatheUnderwater() + { + return true; + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(7.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(1.0F); + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SILVERFISH_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SILVERFISH_HURT; + } + + @Override + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SILVERFISH_DEATH; + } + + public EntityPlayer getClosestEntityToAttack(double par1, double par3, double par5, double par7) + { + double var9 = -1.0D; + EntityPlayer var11 = null; + + for (int var12 = 0; var12 < this.world.loadedEntityList.size(); ++var12) + { + EntityPlayer var13 = (EntityPlayer) this.world.loadedEntityList.get(var12); + double var14 = var13.getDistanceSq(par1, par3, par5); + + if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) + { + var9 = var14; + var11 = var13; + } + } + + return var11; + } + + @Override + protected void playStepSound(BlockPos pos, Block block) + { + this.playSound(SoundEvents.ENTITY_SILVERFISH_STEP, 0.15F, 1.0F); + } + + @Override + protected Item getDropItem() + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public void onUpdate() + { + this.renderYawOffset = this.rotationYaw; + super.onUpdate(); + } + + @Override + protected boolean isValidLightLevel() + { + return true; + } + + @Override + public boolean getCanSpawnHere() + { + if (super.getCanSpawnHere()) + { + EntityPlayer var1 = this.world.getClosestPlayerToEntity(this, 5.0D); + return var1 == null; + } else + { + return false; + } + } + + @Override + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ARTHROPOD; + } + + @Override + public boolean canBreath() + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityTier2Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityTier2Rocket.java new file mode 100644 index 00000000..e0eed43e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/entities/EntityTier2Rocket.java @@ -0,0 +1,350 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.entities; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class EntityTier2Rocket extends EntityTieredRocket +{ + + public EntityTier2Rocket(World par1World) + { + super(par1World); + this.setSize(1.2F, 4.5F); + } + + public EntityTier2Rocket(World par1World, double par2, double par4, double par6, EnumRocketType rocketType) + { + super(par1World, par2, par4, par6); + this.rocketType = rocketType; + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + this.setSize(1.2F, 4.5F); + } + + public EntityTier2Rocket(World par1World, double par2, double par4, double par6, boolean reversed, EnumRocketType rocketType, NonNullList inv) + { + this(par1World, par2, par4, par6, rocketType); + this.stacks = inv; + } + + @Override + public double getYOffset() + { + return 1.5F; + } + + @Override + protected void entityInit() + { + super.entityInit(); + } + + @Override + public ItemStack getPickedResult(RayTraceResult target) + { + return new ItemStack(MarsItems.rocketMars, 1, this.rocketType.getIndex()); + } + + @Override + public double getMountedYOffset() + { + return 1.6D; + } + + @Override + public float getRotateOffset() + { + return 1.25F; + } + + @Override + public double getOnPadYOffset() + { + return -0.2D; + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + int i; + + if (this.timeUntilLaunch >= 100) + { + i = Math.abs(this.timeUntilLaunch / 100); + } else + { + i = 1; + } + + if ((this.getLaunched() || this.launchPhase == EnumLaunchPhase.IGNITED.ordinal() && this.rand.nextInt(i) == 0) && !ConfigManagerCore.disableSpaceshipParticles && this.hasValidFuel()) + { + if (this.world.isRemote) + { + this.spawnParticles(this.getLaunched()); + } + } + + if (this.launchPhase >= EnumLaunchPhase.LAUNCHED.ordinal() && this.hasValidFuel()) + { + if (this.launchPhase == EnumLaunchPhase.LAUNCHED.ordinal()) + { + double d = this.timeSinceLaunch / 150; + + if (this.world.provider instanceof IGalacticraftWorldProvider && ((IGalacticraftWorldProvider) this.world.provider).hasNoAtmosphere()) + { + d = Math.min(d * 1.2, 1.8); + } else + { + d = Math.min(d, 1.2); + } + + if (d != 0.0) + { + this.motionY = -d * 2.0D * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + } + } else + { + this.motionY -= 0.008D; + } + + double multiplier = 1.0D; + + if (this.world.provider instanceof IGalacticraftWorldProvider) + { + multiplier = ((IGalacticraftWorldProvider) this.world.provider).getFuelUsageMultiplier(); + + if (multiplier <= 0) + { + multiplier = 1; + } + } + + if (this.timeSinceLaunch % MathHelper.floor(2 * (1 / multiplier)) == 0) + { + this.removeFuel(1); + if (!this.hasValidFuel()) + { + this.stopRocketSound(); + } + } + } else if (!this.hasValidFuel() && this.getLaunched() && !this.world.isRemote) + { + if (Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 10 != 0.0) + { + this.motionY -= Math.abs(Math.sin(this.timeSinceLaunch / 1000)) / 20; + } + } + } + + @Override + public void onTeleport(EntityPlayerMP player) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + if (playerBase != null) + { + GCPlayerStats stats = GCPlayerStats.get(playerBase); + + if (this.stacks == null || this.stacks.size() == 0) + { + stats.setRocketStacks(NonNullList.withSize(2, ItemStack.EMPTY)); + } else + { + stats.setRocketStacks(this.stacks); + } + + stats.setRocketType(this.rocketType.getIndex()); + stats.setRocketItem(MarsItems.rocketMars); + stats.setFuelLevel(this.fuelTank.getFluidAmount()); + } + } + + protected void spawnParticles(boolean launched) + { + if (!this.isDead) + { + double sinPitch = Math.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES_D); + double x1 = 2.9 * Math.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double z1 = 2.9 * Math.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES_D) * sinPitch; + double y1 = 2.9 * Math.cos((this.rotationPitch - 180) / Constants.RADIANS_TO_DEGREES_D); + if (this.launchPhase == EnumLaunchPhase.LANDING.ordinal() && this.targetVec != null) + { + double modifier = this.posY - this.targetVec.getY(); + modifier = Math.min(Math.max(modifier, 80.0), 200.0); + x1 *= modifier / 100.0D; + y1 *= modifier / 100.0D; + z1 *= modifier / 100.0D; + } + + final double y = this.prevPosY + (this.posY - this.prevPosY) + y1 - this.motionY + (!this.getLaunched() ? 2.5D : 1D); + ; + + final double x2 = this.posX + x1 - this.motionX; + final double z2 = this.posZ + z1 - this.motionZ; + final double x3 = x2 + x1 / 2D; + final double y3 = y + y1 / 2D; + final double z3 = z2 + z1 / 2D; + Vector3 motionVec = new Vector3(x1, y1, z1); + + if (this.ticksExisted % 2 == 0 && !this.getLaunched()) + return; + + String flame = this.getLaunched() ? "launchFlameLaunched" : "launchFlameIdle"; + + EntityLivingBase riddenByEntity = this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof EntityLivingBase) ? null : (EntityLivingBase) this.getPassengers().get(0); + Object[] rider = new Object[] + {riddenByEntity}; + Object[] none = new Object[] + {}; + Random random = this.rand; + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 + 0.4 - random.nextDouble() / 10D, y, z2 + 0.4 - random.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 - 0.4 + random.nextDouble() / 10D, y, z2 + 0.4 - random.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 - 0.4 + random.nextDouble() / 10D, y, z2 - 0.4 + random.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 + 0.4 - random.nextDouble() / 10D, y, z2 - 0.4 + random.nextDouble() / 10D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 + 0.4, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2 - 0.4, y, z2), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2, y, z2 + 0.4D), motionVec, rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x2, y, z2 - 0.4D), motionVec, rider); + // Larger flameball for T2 - positioned behind the smaller one + double a = 4D; + double bx = motionVec.x + 0.5D / a; + double bz = motionVec.z + 0.5D / a; + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.2 - random.nextDouble() / 6D, y3 + 0.4, z3 + 0.2 - random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.2 + random.nextDouble() / 6D, y3 + 0.4, z3 + 0.2 - random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.2 + random.nextDouble() / 6D, y3 + 0.4, z3 - 0.2 + random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.2 - random.nextDouble() / 6D, y3 + 0.4, z3 - 0.2 + random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.2 - random.nextDouble() / 6D, y3 - 0.4, z3 + 0.2 - random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.2 + random.nextDouble() / 6D, y3 - 0.4, z3 + 0.2 - random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.2 + random.nextDouble() / 6D, y3 - 0.4, z3 - 0.2 + random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.2 - random.nextDouble() / 6D, y3 - 0.4, z3 - 0.2 + random.nextDouble() / 6D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.7 - random.nextDouble() / 8D, y3, z3 + 0.7 - random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.7 + random.nextDouble() / 8D, y3, z3 + 0.7 - random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.7 + random.nextDouble() / 8D, y3, z3 - 0.7 + random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.7 - random.nextDouble() / 8D, y3, z3 - 0.7 + random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + 0.7 - random.nextDouble() / 8D, y3, z3 - random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - 0.7 + random.nextDouble() / 8D, y3, z3 - random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 + random.nextDouble() / 8D, y3, z3 + 0.7 + random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle(flame, new Vector3(x3 - random.nextDouble() / 8D, y3, z3 - 0.7 + random.nextDouble() / 8D), + new Vector3(bx - random.nextDouble() / a, motionVec.y, bz - random.nextDouble() / a), rider); + GalacticraftCore.proxy.spawnParticle("blueflame", new Vector3(x2 - 0.8, y, z2), motionVec, none); + GalacticraftCore.proxy.spawnParticle("blueflame", new Vector3(x2 + 0.8, y, z2), motionVec, none); + GalacticraftCore.proxy.spawnParticle("blueflame", new Vector3(x2, y, z2 - 0.8), motionVec, none); + GalacticraftCore.proxy.spawnParticle("blueflame", new Vector3(x2, y, z2 + 0.8), motionVec, none); + } + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return !this.isDead && entityPlayer.getDistanceSq(this) <= 64.0D; + } + + @Override + protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeEntityToNBT(par1NBTTagCompound); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readEntityFromNBT(par1NBTTagCompound); + } + + @Override + public boolean isDockValid(IFuelDock dock) + { + return dock instanceof TileEntityLandingPad; + } + + @Override + public int getRocketTier() + { + return 2; + } + + @Override + public int getFuelTankCapacity() + { + return 1500; + } + + @Override + public int getPreLaunchWait() + { + return 400; + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public List getItemsDropped(List droppedItems) + { + super.getItemsDropped(droppedItems); + ItemStack rocket = new ItemStack(MarsItems.rocketMars, 1, this.rocketType.getIndex()); + rocket.setTagCompound(new NBTTagCompound()); + rocket.getTagCompound().setInteger("RocketFuel", this.fuelTank.getFluidAmount()); + droppedItems.add(rocket); + return droppedItems; + } + + @Override + public float getRenderOffsetY() + { + return -0.1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerElectrolyzer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerElectrolyzer.java new file mode 100644 index 00000000..6b48915a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerElectrolyzer.java @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityElectrolyzer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerElectrolyzer extends Container +{ + + private final TileEntityElectrolyzer tileEntity; + + public ContainerElectrolyzer(InventoryPlayer par1InventoryPlayer, TileEntityElectrolyzer tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 34, 50, IItemElectric.class)); + + // Input slot + this.addSlotToContainer(new Slot(tileEntity, 1, 7, 7)); + + // 2 output slots + this.addSlotToContainer(new Slot(tileEntity, 2, 132, 7)); + this.addSlotToContainer(new Slot(tileEntity, 3, 153, 7)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 104 + var3 * 18 - 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 144)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < 4) + { + if (!this.mergeItemStack(var4, 4, 40, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 2) + { + slot.onSlotChange(var4, var2); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (FluidUtil.isWaterContainer(var4)) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (FluidUtil.isEmptyGasContainer(var4)) + { + if (!this.mergeItemStack(var4, 2, 4, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 31) + { + if (!this.mergeItemStack(var4, 31, 40, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 4, 31, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerGasLiquefier.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerGasLiquefier.java new file mode 100644 index 00000000..92c06f5c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerGasLiquefier.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityGasLiquefier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerGasLiquefier extends Container +{ + + private final TileEntityGasLiquefier tileEntity; + + public ContainerGasLiquefier(InventoryPlayer par1InventoryPlayer, TileEntityGasLiquefier tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 34, 50, IItemElectric.class)); + + // Input slot + this.addSlotToContainer(new Slot(tileEntity, 1, 7, 7)); + + // 1 output slot + this.addSlotToContainer(new Slot(tileEntity, 2, 132, 7)); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 104 + var3 * 18 - 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 144)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack itemStack1 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + itemStack1 = var4.copy(); + + if (par1 < this.tileEntity.getSizeInventory()) + { + + if (!this.mergeItemStack(var4, this.tileEntity.getSizeInventory(), this.tileEntity.getSizeInventory() + 36, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 2) + { + slot.onSlotChange(var4, itemStack1); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + boolean outputTankSlotsSuccess = false; + + if (!outputTankSlotsSuccess && FluidUtil.isEmptyContainerFor(var4, this.tileEntity.liquidTank.getFluid())) + { + if (this.mergeItemStack(var4, 2, 3, false)) + { + outputTankSlotsSuccess = true; + } + } + + if (!outputTankSlotsSuccess) + { + if (FluidUtil.isFilledContainer(var4) || var4.getItem() instanceof ItemAtmosphericValve) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 31) + { + + if (!this.mergeItemStack(var4, 31, 39, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 4, 31, false)) + { + return ItemStack.EMPTY; + } + } + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == itemStack1.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return itemStack1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchController.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchController.java new file mode 100644 index 00000000..c21f277b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchController.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerLaunchController extends Container +{ + + private final TileEntityLaunchController tileEntity; + + public ContainerLaunchController(InventoryPlayer par1InventoryPlayer, TileEntityLaunchController tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + tileEntity.checkDestFrequencyValid(); + + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 152, 105, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 127 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 185)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchControllerAdvanced.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchControllerAdvanced.java new file mode 100644 index 00000000..691f6d00 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerLaunchControllerAdvanced.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerLaunchControllerAdvanced extends Container +{ + + private final TileEntityLaunchController tileEntity; + + public ContainerLaunchControllerAdvanced(InventoryPlayer par1InventoryPlayer, TileEntityLaunchController tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + tileEntity.checkDestFrequencyValid(); + + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 152, 105, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 127 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 185)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerMethaneSynthesizer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerMethaneSynthesizer.java new file mode 100644 index 00000000..68348ea9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerMethaneSynthesizer.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityMethaneSynthesizer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMethaneSynthesizer extends Container +{ + + private final TileEntityMethaneSynthesizer tileEntity; + + public ContainerMethaneSynthesizer(InventoryPlayer par1InventoryPlayer, TileEntityMethaneSynthesizer tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + // Electric Input Slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 53, 53, IItemElectric.class)); + + // Input slot - hydrogen + this.addSlotToContainer(new Slot(tileEntity, 1, 7, 7)); + + // Input slot - CO2 + this.addSlotToContainer(new Slot(tileEntity, 2, 28, 7)); + + // Carbon slot + this.addSlotToContainer(new SlotSpecific(tileEntity, 3, 28, 53, new ItemStack(MarsItems.carbonFragments, 1, 0))); + + // Output slot + this.addSlotToContainer(new Slot(tileEntity, 4, 153, 7)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 104 + var3 * 18 - 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 144)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift + * clicking. + */ + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < 5) + { + if (!this.mergeItemStack(var4, 5, 41, true)) + { + return ItemStack.EMPTY; + } + + if (par1 == 2) + { + slot.onSlotChange(var4, var2); + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (var4.getItem() instanceof ItemAtmosphericValve) + { + if (!this.mergeItemStack(var4, 2, 3, false)) + { + return ItemStack.EMPTY; + } + } else if (var4.getItem() == MarsItems.carbonFragments) + { + if (!this.mergeItemStack(var4, 3, 4, false)) + { + return ItemStack.EMPTY; + } + } else if (FluidUtil.isPartialContainer(var4, AsteroidsItems.methaneCanister)) + { + if (!this.mergeItemStack(var4, 4, 5, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < 32) + { + if (!this.mergeItemStack(var4, 32, 41, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 5, 32, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicCargoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicCargoRocket.java new file mode 100644 index 00000000..b0a958a3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicCargoRocket.java @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.core.inventory.SlotRocketBenchResult; +import micdoodle8.mods.galacticraft.planets.mars.util.RecipeUtilMars; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ContainerSchematicCargoRocket extends Container +{ + + public InventorySchematicCargoRocket craftMatrix = new InventorySchematicCargoRocket(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicCargoRocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 69 + change)); + int var6; + int var7; + + // Cone + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 1, 48, -9 + change, pos, par1InventoryPlayer.player)); + + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 2, 48, -9 + 18 + change, pos, par1InventoryPlayer.player)); + + // Body + for (var6 = 0; var6 < 3; ++var6) + { + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 3 + var6, 39, -7 + var6 * 18 + 16 + 18 + change, pos, par1InventoryPlayer.player)); + } + + // Body Right + for (var6 = 0; var6 < 3; ++var6) + { + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 6 + var6, 57, -7 + var6 * 18 + 16 + 18 + change, pos, par1InventoryPlayer.player)); + } + + // Left fins + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 9, 21, 63 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 10, 21, 81 + change, pos, par1InventoryPlayer.player)); + + // Engine + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 11, 48, 81 + change, pos, par1InventoryPlayer.player)); + + // Right fins + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 12, 75, 63 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 13, 75, 81 + change, pos, par1InventoryPlayer.player)); + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotSchematicCargoRocket(this.craftMatrix, 14 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + change = 9; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 129 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 18 + 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtilMars.findMatchingCargoRocketRecipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + boolean done = false; + if (par1 <= 16) + { + if (!this.mergeItemStack(var4, 17, 53, false)) + { + return ItemStack.EMPTY; + } + + if (par1 == 0) + { + var3.onSlotChange(var4, var2); + } + } else + { + for (int i = 1; i < 14; i++) + { + Slot testSlot = this.inventorySlots.get(i); + if (!testSlot.getHasStack() && testSlot.isItemValid(var2)) + { + if (!this.mergeOneItem(var4, i, i + 1, false)) + { + return ItemStack.EMPTY; + } + done = true; + break; + } + } + + if (!done) + { + if (var2.getItem() == Item.getItemFromBlock(Blocks.CHEST) && !((Slot) this.inventorySlots.get(14)).getHasStack()) + { + if (!this.mergeOneItem(var4, 14, 15, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == Item.getItemFromBlock(Blocks.CHEST) && !((Slot) this.inventorySlots.get(15)).getHasStack()) + { + if (!this.mergeOneItem(var4, 15, 16, false)) + { + return ItemStack.EMPTY; + } + } else if (var2.getItem() == Item.getItemFromBlock(Blocks.CHEST) && !((Slot) this.inventorySlots.get(16)).getHasStack()) + { + if (!this.mergeOneItem(var4, 16, 17, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 17 && par1 < 44) + { + if (!this.mergeItemStack(var4, 44, 53, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 44 && par1 < 53) + { + if (!this.mergeItemStack(var4, 17, 44, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 17, 53, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (!par1ItemStack.isEmpty()) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicTier2Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicTier2Rocket.java new file mode 100644 index 00000000..78a2a73f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSchematicTier2Rocket.java @@ -0,0 +1,258 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.core.inventory.SlotRocketBenchResult; +import micdoodle8.mods.galacticraft.planets.mars.util.RecipeUtilMars; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; + +public class ContainerSchematicTier2Rocket extends Container +{ + + public InventorySchematicTier2Rocket craftMatrix = new InventorySchematicTier2Rocket(this); + public IInventory craftResult = new InventoryCraftResult(); + private final World world; + + public ContainerSchematicTier2Rocket(InventoryPlayer par1InventoryPlayer, BlockPos pos) + { + final int change = 27; + this.world = par1InventoryPlayer.player.world; + this.addSlotToContainer(new SlotRocketBenchResult(par1InventoryPlayer.player, this.craftMatrix, this.craftResult, 0, 142, 18 + 69 + change)); + int var6; + int var7; + + // Cone + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 1, 48, -8 + change, pos, par1InventoryPlayer.player)); + + // Body + for (var6 = 0; var6 < 5; ++var6) + { + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 2 + var6, 39, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Body Right + for (var6 = 0; var6 < 5; ++var6) + { + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 7 + var6, 57, -6 + var6 * 18 + 16 + change, pos, par1InventoryPlayer.player)); + } + + // Left fins + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 12, 21, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 13, 21, 82 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 14, 21, 100 + change, pos, par1InventoryPlayer.player)); + + // Engine + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 15, 48, 100 + change, pos, par1InventoryPlayer.player)); + + // Right fins + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 16, 75, 64 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 17, 75, 82 + change, pos, par1InventoryPlayer.player)); + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 18, 75, 100 + change, pos, par1InventoryPlayer.player)); + + // Addons + for (int var8 = 0; var8 < 3; var8++) + { + this.addSlotToContainer(new SlotSchematicTier2Rocket(this.craftMatrix, 19 + var8, 93 + var8 * 26, -15 + change, pos, par1InventoryPlayer.player)); + } + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 129 + var6 * 18 + change)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 18 + 169 + change)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + @Override + public void onContainerClosed(EntityPlayer entityPlayer) + { + super.onContainerClosed(entityPlayer); + + if (!this.world.isRemote) + { + for (int var2 = 1; var2 < this.craftMatrix.getSizeInventory(); ++var2) + { + final ItemStack var3 = this.craftMatrix.removeStackFromSlot(var2); + + if (!var3.isEmpty()) + { + entityPlayer.entityDropItem(var3, 0.0F); + } + } + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) + { + this.craftResult.setInventorySlotContents(0, RecipeUtilMars.findMatchingSpaceshipT2Recipe(this.craftMatrix)); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot var3 = this.inventorySlots.get(par1); + + if (var3 != null && var3.getHasStack()) + { + final ItemStack var4 = var3.getStack(); + var2 = var4.copy(); + + boolean done = false; + if (par1 <= 21) + { + if (!this.mergeItemStack(var4, 22, 58, false)) + { + return ItemStack.EMPTY; + } + + if (par1 == 0) + { + var3.onSlotChange(var4, var2); + } + } else + { + for (int i = 1; i < 19; i++) + { + Slot testSlot = (Slot) this.inventorySlots.get(i); + if (!testSlot.getHasStack() && testSlot.isItemValid(var2)) + { + if (!this.mergeOneItem(var4, i, i + 1, false)) + { + return ItemStack.EMPTY; + } + done = true; + break; + } + } + + if (!done) + { + boolean foundChest = false; + for (ItemStack woodChest : OreDictionary.getOres("chestWood")) + { + if (var2.getItem() == woodChest.getItem()) + { + foundChest = true; + break; + } + } + if (foundChest) + { + if (!((Slot) this.inventorySlots.get(19)).getHasStack()) + { + if (!this.mergeOneItem(var4, 19, 20, false)) + { + return ItemStack.EMPTY; + } + } else if (!((Slot) this.inventorySlots.get(20)).getHasStack()) + { + if (!this.mergeOneItem(var4, 20, 21, false)) + { + return ItemStack.EMPTY; + } + } else if (!((Slot) this.inventorySlots.get(21)).getHasStack()) + { + if (!this.mergeOneItem(var4, 21, 22, false)) + { + return ItemStack.EMPTY; + } + } + } else if (par1 >= 22 && par1 < 49) + { + if (!this.mergeItemStack(var4, 49, 58, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 >= 49 && par1 < 58) + { + if (!this.mergeItemStack(var4, 22, 49, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, 22, 58, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (var4.isEmpty()) + { + var3.putStack(ItemStack.EMPTY); + } else + { + var3.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + var3.onTake(entityPlayer, var4); + } + + return var2; + } + + protected boolean mergeOneItem(ItemStack par1ItemStack, int par2, int par3, boolean par4) + { + boolean flag1 = false; + if (!par1ItemStack.isEmpty()) + { + Slot slot; + ItemStack slotStack; + + for (int k = par2; k < par3; k++) + { + slot = this.inventorySlots.get(k); + slotStack = slot.getStack(); + + if (slotStack.isEmpty()) + { + ItemStack stackOneItem = par1ItemStack.copy(); + stackOneItem.setCount(1); + par1ItemStack.shrink(1); + slot.putStack(stackOneItem); + slot.onSlotChanged(); + flag1 = true; + break; + } + } + } + + return flag1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSlimeling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSlimeling.java new file mode 100644 index 00000000..b4f8a0e8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerSlimeling.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import java.util.Collections; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerSlimeling extends Container +{ + + private final InventorySlimeling slimelingInventory; + + public ContainerSlimeling(InventoryPlayer playerInventory, EntitySlimeling slimeling, EntityPlayer player) + { + this.slimelingInventory = slimeling.slimelingInventory; + this.slimelingInventory.currentContainer = this; + + ContainerSlimeling.addSlots(this, playerInventory, slimeling); + ContainerSlimeling.addAdditionalSlots(this, slimeling, this.slimelingInventory.getStackInSlot(1)); + + this.slimelingInventory.openInventory(player); + } + + public static void addSlots(ContainerSlimeling container, InventoryPlayer playerInventory, EntitySlimeling slimeling) + { + Slot slot = new SlotSpecific(slimeling.slimelingInventory, 1, 9, 30, new ItemStack(MarsItems.marsItemBasic, 1, 4)); + container.addSlotToContainer(slot); + + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + slot = new Slot(playerInventory, var4 + var3 * 9 + 9, 8 + var4 * 18, 129 + var3 * 18); + container.addSlotToContainer(slot); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + slot = new Slot(playerInventory, var3, 8 + var3 * 18, 187); + container.addSlotToContainer(slot); + } + } + + public static void removeSlots(ContainerSlimeling container) + { + Collections.copy(container.inventoryItemStacks, container.inventoryItemStacks.subList(0, 37)); + container.inventorySlots = container.inventorySlots.subList(0, 37); + } + + public static void addAdditionalSlots(ContainerSlimeling container, EntitySlimeling slimeling, ItemStack stack) + { + if (!stack.isEmpty() && stack.getItem() == MarsItems.marsItemBasic && stack.getItemDamage() == 4) + { + // Note that if NEI is installed, this can be called by + // InventorySlimeling.setInventorySlotContents even if the container + // already has the slots + if (container.inventorySlots.size() < 63) + { + for (int var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + Slot slot = new Slot(slimeling.slimelingInventory, var4 + var3 * 9 + 2, 8 + var4 * 18, 54 + var3 * 18); + slot.slotNumber = container.inventorySlots.size(); + container.inventorySlots.add(slot); + container.inventoryItemStacks.add(ItemStack.EMPTY); + } + } + } + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + this.slimelingInventory.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.slimelingInventory.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = (Slot) this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (b < 39) + { + if (par1 < b - 36) + { + if (!this.mergeItemStack(var4, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (var4.getItem() == MarsItems.marsItemBasic && var4.getItemDamage() == 4) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < b - 9) + { + if (!this.mergeItemStack(var4, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } else + { + // With inventory bag, slot 0 is a bag slot + // Slots 1-36 are regular inventory (27 inventory, 9 hotbar) + // Slots 37-63 are the inventory bag slots + if (par1 == 0) + { + return ItemStack.EMPTY; + } + + if (par1 > 36) + { + if (!this.mergeItemStack(var4, 1, 37, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < 28) + { + if (!this.mergeItemStack(var4, 37, 64, false)) + { + if (!this.mergeItemStack(var4, 28, 37, false)) + { + return ItemStack.EMPTY; + } + } + } else if (!this.mergeItemStack(var4, 37, 64, false)) + { + if (!this.mergeItemStack(var4, 1, 28, false)) + { + return ItemStack.EMPTY; + } + } + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerTerraformer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerTerraformer.java new file mode 100644 index 00000000..35108fbf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/ContainerTerraformer.java @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityTerraformer; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBush; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.registry.ForgeRegistries; + +public class ContainerTerraformer extends Container +{ + + private final TileEntityTerraformer tileEntity; + private static LinkedList saplingList = null; + + public ContainerTerraformer(InventoryPlayer par1InventoryPlayer, TileEntityTerraformer tileEntity, EntityPlayer player) + { + this.tileEntity = tileEntity; + + this.addSlotToContainer(new SlotSpecific(tileEntity, 0, 25, 19, new ItemStack(Items.WATER_BUCKET), new ItemStack(Items.BUCKET))); + + this.addSlotToContainer(new SlotSpecific(tileEntity, 1, 25, 39, IItemElectric.class)); + + int var6; + int var7; + + for (var6 = 0; var6 < 3; ++var6) + { + List stacks = new ArrayList(); + + if (var6 == 0) + { + stacks.add(new ItemStack(Items.DYE, 1, 15)); + } else if (var6 == 1) + { + if (ContainerTerraformer.saplingList == null) + { + initSaplingList(); + } + + stacks.addAll(ContainerTerraformer.saplingList); + } else if (var6 == 2) + { + stacks.add(new ItemStack(Items.WHEAT_SEEDS)); + } + + for (var7 = 0; var7 < 4; ++var7) + { + this.addSlotToContainer(new SlotSpecific(tileEntity, var7 + var6 * 4 + 2, 25 + var7 * 18, 63 + var6 * 24, stacks.toArray(new ItemStack[stacks.size()]))); + } + } + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 155 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 213)); + } + + tileEntity.openInventory(player); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + this.tileEntity.closeInventory(entityplayer); + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntity.isUsableByPlayer(entityPlayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack var4 = slot.getStack(); + var2 = var4.copy(); + + if (par1 < b - 36) + { + if (!this.mergeItemStack(var4, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(var4.getItem())) + { + if (!this.mergeItemStack(var4, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } else if (var4.getItem() == Items.WATER_BUCKET) + { + if (!this.mergeItemStack(var4, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else if (var4.getItem() == Items.DYE && var4.getItemDamage() == 15) + { + if (!this.mergeItemStack(var4, 2, 6, false)) + { + return ItemStack.EMPTY; + } + } else if (this.getSlot(6).isItemValid(var4)) + { + if (!this.mergeItemStack(var4, 6, 10, false)) + { + return ItemStack.EMPTY; + } + } else if (var4.getItem() == Items.WHEAT_SEEDS) + { + if (!this.mergeItemStack(var4, 10, 14, false)) + { + return ItemStack.EMPTY; + } + } else if (par1 < b - 9) + { + if (!this.mergeItemStack(var4, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(var4, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + + if (var4.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (var4.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, var4); + } + + return var2; + } + + public static boolean isOnSaplingList(ItemStack stack) + { + if (saplingList == null) + { + initSaplingList(); + } + + for (ItemStack sapling : saplingList) + { + if (sapling.isItemEqual(stack)) + { + return true; + } + } + + return false; + } + + private static void initSaplingList() + { + ContainerTerraformer.saplingList = new LinkedList<>(); + + for (Block b : ForgeRegistries.BLOCKS) + { + if (b instanceof BlockBush) + { + try + { + Item item = Item.getItemFromBlock(b); + if (item != Items.AIR) + { + // item.getSubItems(item, null, subItemsList); - can't + // use because clientside only + ContainerTerraformer.saplingList.add(new ItemStack(item, 1, 0)); + String basicName = item.getTranslationKey(new ItemStack(item, 1, 0)); + for (int i = 1; i < 16; i++) + { + ItemStack testStack = new ItemStack(item, 1, i); + String testName = item.getTranslationKey(testStack); + if (testName.equals("") || testName.equals(basicName)) + { + break; + } + ContainerTerraformer.saplingList.add(testStack); + } + } + } catch (Exception e) + { + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicCargoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicCargoRocket.java new file mode 100644 index 00000000..251dfdae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicCargoRocket.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematicCargoRocket implements IInventory +{ + + private final NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventorySchematicCargoRocket(Container par1Container) + { + this.stacks = NonNullList.withSize(17, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicTier2Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicTier2Rocket.java new file mode 100644 index 00000000..65277c94 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySchematicTier2Rocket.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySchematicTier2Rocket implements IInventory +{ + + private final NonNullList stacks; + private final int inventoryWidth; + private final Container eventHandler; + + public InventorySchematicTier2Rocket(Container par1Container) + { + this.stacks = NonNullList.withSize(22, ItemStack.EMPTY); + this.eventHandler = par1Container; + this.inventoryWidth = 5; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return "container.crafting"; + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack oldstack = ItemStackHelper.getAndRemove(this.stacks, index); + if (!oldstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + return oldstack; + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stacks, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) + { + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.stacks.set(index, stack); + this.markDirty(); + this.eventHandler.onCraftMatrixChanged(this); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return true; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySlimeling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySlimeling.java new file mode 100644 index 00000000..09fdabba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/InventorySlimeling.java @@ -0,0 +1,264 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventorySlimeling implements IInventory +{ + + private NonNullList stacks = NonNullList.withSize(30, ItemStack.EMPTY); + private EntitySlimeling slimeling; + public Container currentContainer; + + public InventorySlimeling(EntitySlimeling slimeling) + { + this.slimeling = slimeling; + } + + @Override + public int getSizeInventory() + { + return this.stacks.size(); + } + + @Override + public ItemStack getStackInSlot(int par1) + { + return par1 >= this.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(par1); + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.slimeling_inventory.name"); + } + + @Override + public ItemStack removeStackFromSlot(int par1) + { + if (!this.stacks.get(par1).isEmpty()) + { + final ItemStack var2 = this.stacks.get(par1); + this.stacks.set(par1, ItemStack.EMPTY); + this.markDirty(); + return var2; + } else + { + return ItemStack.EMPTY; + } + } + + private void removeInventoryBagContents() + { + if (this.currentContainer instanceof ContainerSlimeling) + { + ContainerSlimeling.removeSlots((ContainerSlimeling) this.currentContainer); + } + + for (int i = 2; i < this.stacks.size(); i++) + { + if (!this.stacks.get(i).isEmpty()) + { + if (!this.slimeling.world.isRemote) + { + this.slimeling.entityDropItem(this.stacks.get(i), 0.5F); + } + + this.stacks.set(i, ItemStack.EMPTY); + } + } + } + + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (!this.stacks.get(par1).isEmpty()) + { + ItemStack var3; + + // It's a removal of the Slimeling Inventory Bag + if (par1 == 1 && this.stacks.get(par1).getCount() <= par2) + { + this.removeInventoryBagContents(); + var3 = this.stacks.get(par1); + this.stacks.set(par1, ItemStack.EMPTY); + this.markDirty(); + return var3; + } else + // Normal case of decrStackSize for a slot + { + var3 = this.stacks.get(par1).splitStack(par2); + + if (this.stacks.get(par1).isEmpty()) + { + // Not sure if this is necessary again, given the above? + if (par1 == 1) + { + this.removeInventoryBagContents(); + } + + this.stacks.set(par1, ItemStack.EMPTY); + } + + this.markDirty(); + return var3; + } + } else + { + return ItemStack.EMPTY; + } + } + + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + if (par1 == 1 && (par2ItemStack.isEmpty() && !this.stacks.get(par1).isEmpty() || !ItemStack.areItemStacksEqual(par2ItemStack, this.stacks.get(par1)))) + { + ContainerSlimeling.addAdditionalSlots((ContainerSlimeling) this.currentContainer, this.slimeling, par2ItemStack); + } + + this.stacks.set(par1, par2ItemStack); + this.markDirty(); + } + + @Override + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + public void readFromNBT(NBTTagList tagList) + { + if (tagList == null || tagList.tagCount() <= 0) + { + return; + } + + this.stacks = NonNullList.withSize(this.stacks.size(), ItemStack.EMPTY); + + for (int i = 0; i < tagList.tagCount(); ++i) + { + final NBTTagCompound nbttagcompound = tagList.getCompoundTagAt(i); + final int j = nbttagcompound.getByte("Slot") & 255; + final ItemStack itemstack = new ItemStack(nbttagcompound); + + if (!itemstack.isEmpty()) + { + this.stacks.set(j, itemstack); + } + } + } + + public NBTTagList writeToNBT(NBTTagList tagList) + { + NBTTagCompound nbttagcompound; + + for (int i = 0; i < this.stacks.size(); ++i) + { + if (!this.stacks.get(i).isEmpty()) + { + nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) i); + this.stacks.get(i).writeToNBT(nbttagcompound); + tagList.appendTag(nbttagcompound); + } + } + + return tagList; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + } + + @Override + public boolean isUsableByPlayer(EntityPlayer entityPlayer) + { + return !this.slimeling.isDead && entityPlayer.getDistanceSq(this.slimeling) <= 64.0D; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return false; + } + + // We don't use these because we use forge containers + @Override + public void openInventory(EntityPlayer player) + { + } + + // We don't use these because we use forge containers + @Override + public void closeInventory(EntityPlayer player) + { + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public ITextComponent getDisplayName() + { + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0]); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicCargoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicCargoRocket.java new file mode 100644 index 00000000..71c0f9d4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicCargoRocket.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +public class SlotSchematicCargoRocket extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotSchematicCargoRocket(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getCargoRocketRecipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicTier2Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicTier2Rocket.java new file mode 100644 index 00000000..1fa2217b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/inventory/SlotSchematicTier2Rocket.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.inventory; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; + +public class SlotSchematicTier2Rocket extends Slot +{ + + private final int index; + private final BlockPos pos; + private final EntityPlayer player; + + public SlotSchematicTier2Rocket(IInventory par2IInventory, int par3, int par4, int par5, BlockPos pos, EntityPlayer player) + { + super(par2IInventory, par3, par4, par5); + this.index = par3; + this.pos = pos; + this.player = player; + } + + @Override + public void onSlotChanged() + { + if (this.player instanceof EntityPlayerMP) + { + int dimID = GCCoreUtil.getDimensionID(this.player.world); + GCCoreUtil.sendToAllAround(new PacketSimple(EnumSimplePacket.C_SPAWN_SPARK_PARTICLES, dimID, new Object[] + {this.pos}), this.player.world, dimID, this.pos, 20); + } + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + if (par1ItemStack == null) + return false; + + List recipes = GalacticraftRegistry.getRocketT2Recipes(); + for (INasaWorkbenchRecipe recipe : recipes) + { + if (ItemStack.areItemsEqual(par1ItemStack, recipe.getRecipeInput().get(this.index))) + return true; + } + return false; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as + * getInventoryStackLimit(), but 1 in the case of armor slots) + */ + @Override + public int getSlotStackLimit() + { + return 1; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemArmorMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemArmorMars.java new file mode 100644 index 00000000..33612493 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemArmorMars.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemArmorMars extends ItemArmor implements ISortableItem, GCRarity +{ + + private final ArmorMaterial material; + + public ItemArmorMars(ArmorMaterial par2EnumArmorMaterial, int par3, EntityEquipmentSlot par4) + { + super(par2EnumArmorMaterial, par3, par4); + this.material = par2EnumArmorMaterial; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) + { + if (this.material == MarsItems.ARMORDESH) + { + if (stack.getItem() == MarsItems.deshHelmet) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/desh_1.png"; + } else if (stack.getItem() == MarsItems.deshChestplate || stack.getItem() == MarsItems.deshBoots) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/desh_2.png"; + } else if (stack.getItem() == MarsItems.deshLeggings) + { + return GalacticraftPlanets.TEXTURE_PREFIX + "textures/model/armor/desh_3.png"; + } + } + + return null; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return repair.getItem() == MarsItems.marsItemBasic && repair.getItemDamage() == 2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemAxeMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemAxeMars.java new file mode 100644 index 00000000..7b7f7150 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemAxeMars.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import com.google.common.collect.Sets; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemAxeMars extends ItemTool implements ISortableItem, GCRarity +{ + + private static final Set EFFECTIVE_ON = Sets.newHashSet(new Block[] + {Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER, Blocks.WOODEN_BUTTON, + Blocks.WOODEN_PRESSURE_PLATE}); + + public ItemAxeMars(ToolMaterial material) + { + super(material, EFFECTIVE_ON); + this.attackDamage = 6.0F; + this.attackSpeed = -3.0F; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Material material = state.getMaterial(); + return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getDestroySpeed(stack, state) : this.efficiency; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBasicMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBasicMars.java new file mode 100644 index 00000000..bd1e6afb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBasicMars.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBasicMars extends Item implements ISortableItem, GCRarity +{ + + public static String[] names = + {"raw_desh", "desh_stick", "ingot_desh", "reinforced_plate_t2", "slimeling_cargo", "compressed_desh", "fluid_manip"}; + + public ItemBasicMars(String name) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(name); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemBasicMars.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemBasicMars.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (par1ItemStack != null && par1ItemStack.getItemDamage() == 3) + { + tooltip.add(GCCoreUtil.translate("item.tier2.desc")); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 2: + return EnumSortCategoryItem.INGOT; + case 3: + case 5: + return EnumSortCategoryItem.PLATE; + } + return EnumSortCategoryItem.GENERAL; + } + + @Override + public float getSmeltingExperience(ItemStack item) + { + switch (item.getItemDamage()) + { + case 3: + return 1.5F; + case 5: + return 1F; + } + return -1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockEgg.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockEgg.java new file mode 100644 index 00000000..40575ff3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockEgg.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockSlimelingEgg; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +public class ItemBlockEgg extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockEgg(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockSlimelingEgg.EnumEggColor.values()[itemstack.getItemDamage() % 3].getName(); + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMachine.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMachine.java new file mode 100644 index 00000000..2698bc82 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMachine.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineBase; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; + +public class ItemBlockMachine extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockMachine(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public boolean placeBlockAt(ItemStack itemStack, EntityPlayer player, World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, IBlockState state) + { + int metaAt = itemStack.getItemDamage(); + + // If it is a Cryogenic Chamber, check the space + if (metaAt == BlockMachineMars.CRYOGENIC_CHAMBER_METADATA) + { + for (int y = 0; y < 3; y++) + { + IBlockState stateAt = world.getBlockState(pos.add(0, y, 0)); + + if (this.getBlock() == MarsBlocks.machine) + { + if (!stateAt.getMaterial().isReplaceable()) + { + if (world.isRemote) + { + FMLClientHandler.instance().getClient().ingameGUI + .setOverlayMessage(new TextComponentString(GCCoreUtil.translate("gui.warning.noroom")).setStyle(new Style().setColor(TextFormatting.RED)).getFormattedText(), false); + } + return false; + } + } + } + } + return super.placeBlockAt(itemStack, player, world, pos, facing, hitX, hitY, hitZ, state); + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + int index = 0; + int typenum = itemstack.getItemDamage() & 12; + + if (this.getBlock() == MarsBlocks.machine) + { + if (typenum == BlockMachineMars.LAUNCH_CONTROLLER_METADATA) + { + index = 2; + } else if (typenum == BlockMachineMars.CRYOGENIC_CHAMBER_METADATA) + { + index = 1; + } + } else if (this.getBlock() == MarsBlocks.machineT2) + { + return ((BlockMachineBase) MarsBlocks.machineT2).getTranslationKey(typenum); + } + + return this.getBlock().getTranslationKey() + "." + index; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMars.java new file mode 100644 index 00000000..c7b20a60 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockMars.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockMars extends ItemBlock implements GCRarity +{ + + public ItemBlockMars(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = ""; + + switch (itemstack.getItemDamage()) + { + case 0: + { + name = "coppermars"; + break; + } + case 1: + { + name = "tinmars"; + break; + } + case 3: + { + name = "ironmars"; + break; + } + case 2: + { + name = "deshmars"; + break; + } + case 4: + { + name = "marscobblestone"; + break; + } + case 5: + { + name = "marsgrass"; + break; + } + case 6: + { + name = "marsdirt"; + break; + } + case 7: + { + name = "marsdungeon"; + break; + } + case 8: + { + name = "marsdeco"; + break; + } + case 9: + { + name = "marsstone"; + break; + } + default: + name = "null"; + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockTintedGlassPane.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockTintedGlassPane.java new file mode 100644 index 00000000..78c1f4b1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemBlockTintedGlassPane.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; + +public class ItemBlockTintedGlassPane extends ItemBlock implements GCRarity +{ + + public ItemBlockTintedGlassPane(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int damage) + { + return damage; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + return this.getBlock().getTranslationKey() + "." + ItemDye.DYE_COLORS[~itemstack.getItemDamage() & 15]; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemCarbonFragments.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemCarbonFragments.java new file mode 100644 index 00000000..6a108855 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemCarbonFragments.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCarbonFragments extends Item implements ISortableItem, GCRarity +{ + + public ItemCarbonFragments() + { + super(); + this.setMaxStackSize(64); + this.setMaxDamage(0); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } + + @Override + public int getItemBurnTime(ItemStack itemStack) + { + return 200; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemHoeMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemHoeMars.java new file mode 100644 index 00000000..a00653cb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemHoeMars.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemHoe; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemHoeMars extends ItemHoe implements ISortableItem, GCRarity +{ + + public ItemHoeMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemKeyMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemKeyMars.java new file mode 100644 index 00000000..d059d92b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemKeyMars.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IKeyItem; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemKeyMars extends Item implements IKeyItem, ISortableItem, GCRarity +{ + + public ItemKeyMars() + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return "item.key.t2"; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getTier(ItemStack keyStack) + { + return 2; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.KEYS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeMars.java new file mode 100644 index 00000000..19b59a29 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeMars.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemPickaxe; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemPickaxeMars extends ItemPickaxe implements ISortableItem, GCRarity +{ + + public ItemPickaxeMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeStickyMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeStickyMars.java new file mode 100644 index 00000000..ab6a2936 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemPickaxeStickyMars.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemPickaxe; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemPickaxeStickyMars extends ItemPickaxe implements ISortableItem, GCRarity +{ + + public ItemPickaxeStickyMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSchematicTier2.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSchematicTier2.java new file mode 100644 index 00000000..cde9643f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSchematicTier2.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.recipe.ISchematicItem; +import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemSchematic; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemSchematicTier2 extends ItemSchematic implements ISchematicItem, ISortableItem +{ + + private static int indexOffset = 0; + + public ItemSchematicTier2() + { + super("schematic"); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < 3; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + switch (par1ItemStack.getItemDamage()) + { + case 0: + tooltip.add(GCCoreUtil.translate("schematic.rocket_t3.name")); + break; + case 1: + tooltip.add(GCCoreUtil.translate("schematic.cargo_rocket.name")); + break; + case 2: + tooltip.add(GCCoreUtil.translate("schematic.astro_miner.name")); + break; + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.SCHEMATIC; + } + + /** + * Higher tiers should use this form and make sure they have set up the + * indexOffset correctly in registerSchematicItems() + */ + @Override + protected int getIndex(int damage) + { + return damage + indexOffset; + } + + /** + * Make sure the number of these will match the index values + */ + public static void registerSchematicItems() + { + indexOffset = SchematicRegistry.registerSchematicItem(new ItemStack(MarsItems.schematic, 1, 0)); + SchematicRegistry.registerSchematicItem(new ItemStack(MarsItems.schematic, 1, 1)); + SchematicRegistry.registerSchematicItem(new ItemStack(MarsItems.schematic, 1, 2)); + } + + /** + * Make sure the order of these will match the index values + */ + @SideOnly(value = Side.CLIENT) + public static void registerTextures() + { + SchematicRegistry.registerTexture(new ResourceLocation("galacticraftplanets", "textures/items/schematic_rocket_t3.png")); + SchematicRegistry.registerTexture(new ResourceLocation("galacticraftplanets", "textures/items/schematic_rocket_cargo.png")); + SchematicRegistry.registerTexture(new ResourceLocation("galacticraftplanets", "textures/items/schematic_astro_miner.png")); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSpadeMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSpadeMars.java new file mode 100644 index 00000000..ea363f22 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSpadeMars.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemSpade; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemSpadeMars extends ItemSpade implements ISortableItem, GCRarity +{ + + public ItemSpadeMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSwordMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSwordMars.java new file mode 100644 index 00000000..82ec95b2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemSwordMars.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemSwordMars extends ItemSword implements ISortableItem, GCRarity +{ + + public ItemSwordMars(ToolMaterial par2EnumToolMaterial) + { + super(par2EnumToolMaterial); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + if (state.getBlockHardness(worldIn, pos) > 0.2001F) + { + stack.damageItem(2, entityLiving); + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemTier2Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemTier2Rocket.java new file mode 100644 index 00000000..a056180a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/ItemTier2Rocket.java @@ -0,0 +1,263 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.entity.IRocketType.EnumRocketType; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IHoldableItem; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityTier2Rocket; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemTier2Rocket extends Item implements IHoldableItem, ISortableItem, GCRarity +{ + + public ItemTier2Rocket() + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + { + ItemStack stack = player.getHeldItem(hand); + boolean padFound = false; + TileEntity tile = null; + + if (world.isRemote) + { + return EnumActionResult.PASS; + } else + { + float centerX = -1; + float centerY = -1; + float centerZ = -1; + + for (int i = -1; i < 2; i++) + { + for (int j = -1; j < 2; j++) + { + BlockPos pos1 = pos.add(i, 0, j); + IBlockState state = world.getBlockState(pos1); + final Block id = state.getBlock(); + int meta = id.getMetaFromState(state); + + if (id == GCBlocks.landingPadFull && meta == 0) + { + padFound = true; + tile = world.getTileEntity(pos1); + + centerX = pos.getX() + i + 0.5F; + centerY = pos.getY() + 0.4F; + centerZ = pos.getZ() + j + 0.5F; + + break; + } + } + + if (padFound) + { + break; + } + } + + if (padFound) + { + if (!placeRocketOnPad(stack, world, tile, centerX, centerY, centerZ)) + { + return EnumActionResult.FAIL; + } + + if (!player.capabilities.isCreativeMode) + { + stack.shrink(1); + } + return EnumActionResult.SUCCESS; + } else + { + return EnumActionResult.PASS; + } + } + } + + public static boolean placeRocketOnPad(ItemStack stack, World world, TileEntity tile, float centerX, float centerY, float centerZ) + { + // Check whether there is already a rocket on the pad + if (tile instanceof TileEntityLandingPad) + { + if (((TileEntityLandingPad) tile).getDockedEntity() != null) + { + return false; + } + } else + { + return false; + } + + EntityAutoRocket rocket; + + if (stack.getItemDamage() < 10) + { + rocket = new EntityTier2Rocket(world, centerX, centerY, centerZ, EnumRocketType.values()[stack.getItemDamage()]); + } else + { + rocket = new EntityCargoRocket(world, centerX, centerY, centerZ, EnumRocketType.values()[stack.getItemDamage() - 10]); + } + + rocket.setPosition(rocket.posX, rocket.posY + rocket.getOnPadYOffset(), rocket.posZ); + world.spawnEntity(rocket); + + if (((IRocketType) rocket).getType().getPreFueled()) + { + if (rocket instanceof EntityTieredRocket) + { + ((EntityTieredRocket) rocket).fuelTank.fill(new FluidStack(GCFluids.fluidFuel, rocket.getMaxFuel()), true); + } else + { + ((EntityCargoRocket) rocket).fuelTank.fill(new FluidStack(GCFluids.fluidFuel, rocket.getMaxFuel()), true); + } + } else if (stack.hasTagCompound() && stack.getTagCompound().hasKey("RocketFuel")) + { + rocket.fuelTank.fill(new FluidStack(GCFluids.fluidFuel, stack.getTagCompound().getInteger("RocketFuel")), true); + } + + return true; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < EnumRocketType.values().length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + + for (int i = 11; i < 10 + EnumRocketType.values().length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + EnumRocketType type; + + if (par1ItemStack.getItemDamage() < 10) + { + type = EnumRocketType.values()[par1ItemStack.getItemDamage()]; + } else + { + type = EnumRocketType.values()[par1ItemStack.getItemDamage() - 10]; + } + + if (!type.getTooltip().isEmpty()) + { + tooltip.add(type.getTooltip()); + } + + if (type.getPreFueled()) + { + tooltip.add(EnumColor.RED + "\u00a7o" + GCCoreUtil.translate("gui.creative_only.desc")); + } + + if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("RocketFuel")) + { + EntityAutoRocket rocket; + + if (par1ItemStack.getItemDamage() < 10) + { + rocket = new EntityTier2Rocket(FMLClientHandler.instance().getWorldClient(), 0, 0, 0, EnumRocketType.values()[par1ItemStack.getItemDamage()]); + } else + { + rocket = new EntityCargoRocket(FMLClientHandler.instance().getWorldClient(), 0, 0, 0, EnumRocketType.values()[par1ItemStack.getItemDamage() - 10]); + } + + tooltip.add(GCCoreUtil.translate("gui.message.fuel.name") + ": " + par1ItemStack.getTagCompound().getInteger("RocketFuel") + " / " + rocket.fuelTank.getCapacity()); + } + + if (par1ItemStack.getItemDamage() >= 10) + { + tooltip.add(EnumColor.AQUA + GCCoreUtil.translate("gui.requires_controller.desc")); + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + return super.getTranslationKey(par1ItemStack) + (par1ItemStack.getItemDamage() < 10 ? ".t2Rocket" : ".cargo_rocket"); + } + + @Override + public boolean shouldHoldLeftHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldHoldRightHandUp(EntityPlayer player) + { + return true; + } + + @Override + public boolean shouldCrouch(EntityPlayer player) + { + return true; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ROCKET; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/MarsItems.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/MarsItems.java new file mode 100644 index 00000000..eae7a8ed --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/items/MarsItems.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.items; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.Item.ToolMaterial; +import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraftforge.common.util.EnumHelper; + +public class MarsItems +{ + + public static Item marsItemBasic; + public static Item deshPickaxe; + public static Item deshPickSlime; + public static Item deshAxe; + public static Item deshHoe; + public static Item deshSpade; + public static Item deshSword; + public static Item deshHelmet; + public static Item deshChestplate; + public static Item deshLeggings; + public static Item deshBoots; + public static Item rocketMars; + public static Item key; + public static Item schematic; + public static Item carbonFragments; + public static Item bucketSludge; + + public static ArmorMaterial ARMORDESH = EnumHelper.addArmorMaterial("DESH", "", 42, new int[] + {4, 7, 9, 4}, 12, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 3.0F); + public static ToolMaterial TOOLDESH = EnumHelper.addToolMaterial("DESH", 3, 1024, 5.0F, 2.5F, 10); + + public static void initItems() + { + MarsItems.marsItemBasic = new ItemBasicMars("item_basic_mars"); + MarsItems.deshPickaxe = new ItemPickaxeMars(MarsItems.TOOLDESH).setTranslationKey("desh_pick"); + MarsItems.deshPickSlime = new ItemPickaxeStickyMars(MarsItems.TOOLDESH).setTranslationKey("desh_pick_slime"); + MarsItems.deshAxe = new ItemAxeMars(MarsItems.TOOLDESH).setTranslationKey("desh_axe"); + MarsItems.deshHoe = new ItemHoeMars(MarsItems.TOOLDESH).setTranslationKey("desh_hoe"); + MarsItems.deshSpade = new ItemSpadeMars(MarsItems.TOOLDESH).setTranslationKey("desh_spade"); + MarsItems.deshSword = new ItemSwordMars(MarsItems.TOOLDESH).setTranslationKey("desh_sword"); + MarsItems.deshHelmet = new ItemArmorMars(MarsItems.ARMORDESH, 7, EntityEquipmentSlot.HEAD).setTranslationKey("desh_helmet"); + MarsItems.deshChestplate = new ItemArmorMars(MarsItems.ARMORDESH, 7, EntityEquipmentSlot.CHEST).setTranslationKey("desh_chestplate"); + MarsItems.deshLeggings = new ItemArmorMars(MarsItems.ARMORDESH, 7, EntityEquipmentSlot.LEGS).setTranslationKey("desh_leggings"); + MarsItems.deshBoots = new ItemArmorMars(MarsItems.ARMORDESH, 7, EntityEquipmentSlot.FEET).setTranslationKey("desh_boots"); + MarsItems.rocketMars = new ItemTier2Rocket().setTranslationKey("rocket_t2"); + MarsItems.key = new ItemKeyMars().setTranslationKey("key"); + MarsItems.schematic = new ItemSchematicTier2().setTranslationKey("schematic"); + MarsItems.carbonFragments = new ItemCarbonFragments().setTranslationKey("carbon_fragments"); + + MarsItems.registerItems(); + MarsItems.registerHarvestLevels(); + } + + public static void registerHarvestLevels() + { + MarsItems.deshPickaxe.setHarvestLevel("pickaxe", 4); + MarsItems.deshPickSlime.setHarvestLevel("pickaxe", 4); + MarsItems.deshAxe.setHarvestLevel("axe", 4); + MarsItems.deshSpade.setHarvestLevel("shovel", 4); + } + + private static void registerItems() + { + MarsItems.registerItem(MarsItems.carbonFragments); + MarsItems.registerItem(MarsItems.marsItemBasic); + MarsItems.registerItem(MarsItems.deshPickaxe); + MarsItems.registerItem(MarsItems.deshPickSlime); + MarsItems.registerItem(MarsItems.deshAxe); + MarsItems.registerItem(MarsItems.deshHoe); + MarsItems.registerItem(MarsItems.deshSpade); + MarsItems.registerItem(MarsItems.deshSword); + MarsItems.registerItem(MarsItems.deshHelmet); + MarsItems.registerItem(MarsItems.deshChestplate); + MarsItems.registerItem(MarsItems.deshLeggings); + MarsItems.registerItem(MarsItems.deshBoots); + MarsItems.registerItem(MarsItems.rocketMars); + MarsItems.registerItem(MarsItems.key); + MarsItems.registerItem(MarsItems.schematic); + } + + public static void registerItem(Item item) + { + String name = item.getTranslationKey().substring(5); + GCCoreUtil.registerGalacticraftItem(name, item); + GalacticraftCore.itemListTrue.add(item); + item.setRegistryName(name); + GalacticraftPlanets.proxy.postRegisterItem(item); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/network/PacketSimpleMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/network/PacketSimpleMars.java new file mode 100644 index 00000000..af9b819e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/network/PacketSimpleMars.java @@ -0,0 +1,378 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.network; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.event.EventWakePlayer; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketBase; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.PlayerUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiLaunchControllerAdvanced; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSlimelingInventory; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityCryogenicChamber; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import micdoodle8.mods.galacticraft.planets.mars.util.MarsUtil; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PacketSimpleMars extends PacketBase +{ + + public static enum EnumSimplePacketMars + { + + // SERVER + S_UPDATE_SLIMELING_DATA(Side.SERVER, Integer.class, Integer.class, String.class), + S_WAKE_PLAYER(Side.SERVER), + S_UPDATE_ADVANCED_GUI(Side.SERVER, Integer.class, BlockPos.class, Integer.class), + S_UPDATE_CARGO_ROCKET_STATUS(Side.SERVER, Integer.class, Integer.class), + S_SWITCH_LAUNCH_CONTROLLER_GUI(Side.SERVER, BlockPos.class, Integer.class), + // CLIENT + C_OPEN_CUSTOM_GUI(Side.CLIENT, Integer.class, Integer.class, Integer.class), + C_OPEN_CUSTOM_GUI_TILE(Side.CLIENT, Integer.class, Integer.class, BlockPos.class), + C_BEGIN_CRYOGENIC_SLEEP(Side.CLIENT, BlockPos.class); + + private Side targetSide; + private Class[] decodeAs; + + private EnumSimplePacketMars(Side targetSide, Class... decodeAs) + { + this.targetSide = targetSide; + this.decodeAs = decodeAs; + } + + public Side getTargetSide() + { + return this.targetSide; + } + + public Class[] getDecodeClasses() + { + return this.decodeAs; + } + } + + private EnumSimplePacketMars type; + private List data; + + public PacketSimpleMars() + { + super(); + } + + public PacketSimpleMars(EnumSimplePacketMars packetType, int dimID, Object[] data) + { + this(packetType, dimID, Arrays.asList(data)); + } + + public PacketSimpleMars(EnumSimplePacketMars packetType, int dimID, List data) + { + super(dimID); + + if (packetType.getDecodeClasses().length != data.size()) + { + GalacticraftPlanets.logger.info("Mars Simple Packet found data length different than packet type: " + packetType.name()); + } + + this.type = packetType; + this.data = data; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type.ordinal()); + + try + { + NetworkUtil.encodeData(buffer, this.data); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = EnumSimplePacketMars.values()[buffer.readInt()]; + + if (this.type.getDecodeClasses().length > 0) + { + this.data = NetworkUtil.decodeData(this.type.getDecodeClasses(), buffer); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void handleClientSide(EntityPlayer player) + { + EntityPlayerSP playerBaseClient = null; + + if (player instanceof EntityPlayerSP) + { + playerBaseClient = (EntityPlayerSP) player; + } + + switch (this.type) + { + case C_OPEN_CUSTOM_GUI: + int entityID = 0; + Entity entity = null; + + switch ((Integer) this.data.get(1)) + { + case 0: + entityID = (Integer) this.data.get(2); + entity = player.world.getEntityByID(entityID); + + if (entity != null && entity instanceof EntitySlimeling) + { + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiSlimelingInventory(player, (EntitySlimeling) entity)); + } + + player.openContainer.windowId = (Integer) this.data.get(0); + break; + case 1: + entityID = (Integer) this.data.get(2); + entity = player.world.getEntityByID(entityID); + + if (entity != null && entity instanceof EntityCargoRocket) + { + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiCargoRocket(player.inventory, (EntityCargoRocket) entity)); + } + + player.openContainer.windowId = (Integer) this.data.get(0); + break; + } + + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_CONTAINER_SLOT_REFRESH, GCCoreUtil.getDimensionID(player.world), new Object[] + {player.openContainer.windowId})); + break; + case C_OPEN_CUSTOM_GUI_TILE: + BlockPos pos; + TileEntity tile; + + switch ((Integer) this.data.get(1)) + { + case 0: + pos = (BlockPos) this.data.get(2); + tile = player.world.getTileEntity(pos); + + if (tile != null && tile instanceof TileEntityLaunchController) + { + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiLaunchControllerAdvanced(player.inventory, (TileEntityLaunchController) tile)); + } + + player.openContainer.windowId = (Integer) this.data.get(0); + break; + } + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_CONTAINER_SLOT_REFRESH, GCCoreUtil.getDimensionID(player.world), new Object[] + {player.openContainer.windowId})); + break; + case C_BEGIN_CRYOGENIC_SLEEP: + pos = (BlockPos) this.data.get(0); + tile = player.world.getTileEntity(pos); + + if (tile instanceof TileEntityCryogenicChamber) + { + ((TileEntityCryogenicChamber) tile).sleepInBedAt(player, pos.getX(), pos.getY(), pos.getZ()); + } + default: + break; + } + } + + @Override + public void handleServerSide(EntityPlayer player) + { + EntityPlayerMP playerBase = PlayerUtil.getPlayerBaseServerFromPlayer(player, false); + + switch (this.type) + { + case S_UPDATE_SLIMELING_DATA: + Entity entity = player.world.getEntityByID((Integer) this.data.get(0)); + + if (entity instanceof EntitySlimeling) + { + EntitySlimeling slimeling = (EntitySlimeling) entity; + + int subType = (Integer) this.data.get(1); + + switch (subType) + { + case 0: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.setSittingAI(!slimeling.isSitting()); + slimeling.setJumping(false); + slimeling.getNavigator().clearPath(); + slimeling.setAttackTarget(null); + } + break; + case 1: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.slimelingName = (String) this.data.get(2); + slimeling.setName(slimeling.slimelingName); + } + break; + case 2: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.age += 5000; + } + break; + case 3: + if (!slimeling.isInLove() && player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.setInLove(playerBase); + } + break; + case 4: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.attackDamage = Math.min(slimeling.attackDamage + 0.1F, 1.0F); + } + break; + case 5: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + slimeling.setHealth(slimeling.getHealth() + 5.0F); + } + break; + case 6: + if (player == slimeling.getOwner() && !slimeling.world.isRemote) + { + MarsUtil.openSlimelingInventory(playerBase, slimeling); + } + break; + } + } + break; + case S_WAKE_PLAYER: + BlockPos c = playerBase.bedLocation; + + if (c != null) + { + EventWakePlayer event = new EventWakePlayer(playerBase, c, true, true, false, true); + MinecraftForge.EVENT_BUS.post(event); + playerBase.wakeUpPlayer(true, true, false); + } + break; + case S_UPDATE_ADVANCED_GUI: + TileEntity tile = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.setFrequency((Integer) this.data.get(2)); + } + break; + case 1: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.setLaunchDropdownSelection((Integer) this.data.get(2)); + } + break; + case 2: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.setDestinationFrequency((Integer) this.data.get(2)); + } + break; + case 3: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.launchPadRemovalDisabled = (Integer) this.data.get(2) == 1; + } + break; + case 4: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.setLaunchSchedulingEnabled((Integer) this.data.get(2) == 1); + } + break; + case 5: + if (tile instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile; + launchController.requiresClientUpdate = true; + } + break; + default: + break; + } + break; + case S_UPDATE_CARGO_ROCKET_STATUS: + Entity entity2 = player.world.getEntityByID((Integer) this.data.get(0)); + + if (entity2 instanceof EntityCargoRocket) + { + EntityCargoRocket rocket = (EntityCargoRocket) entity2; + + int subType = (Integer) this.data.get(1); + + switch (subType) + { + default: + rocket.statusValid = rocket.checkLaunchValidity(); + break; + } + } + break; + case S_SWITCH_LAUNCH_CONTROLLER_GUI: + BlockPos pos = (BlockPos) this.data.get(0); + TileEntity tile1 = player.world.getTileEntity(pos); + if (tile1 instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController = (TileEntityLaunchController) tile1; + switch ((Integer) this.data.get(1)) + { + case 0: + MarsUtil.openAdvancedLaunchController(playerBase, launchController); + break; + case 1: + player.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_MARS, player.world, pos.getX(), pos.getY(), pos.getZ()); + break; + } + } + break; + default: + break; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/recipe/RecipeManagerMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/recipe/RecipeManagerMars.java new file mode 100644 index 00000000..83ecd48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/recipe/RecipeManagerMars.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.recipe; + +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.recipe.CompressorRecipes; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.galacticraft.planets.mars.util.MarsUtil; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.util.NonNullList; +import net.minecraftforge.oredict.OreDictionary; + +public class RecipeManagerMars +{ + + public static void loadCompatibilityRecipes() + { + } + + public static void addUniversalRecipes() + { + OreDictionary.registerOre("ingotDesh", new ItemStack(MarsItems.marsItemBasic, 1, 2)); + OreDictionary.registerOre("compressedDesh", new ItemStack(MarsItems.marsItemBasic, 1, 5)); + + CompressorRecipes.addShapelessRecipe(new ItemStack(MarsItems.marsItemBasic, 1, 3), new ItemStack(GCItems.heavyPlatingTier1), new ItemStack(GCItems.itemBasicMoon, 1, 1)); + CompressorRecipes.addShapelessRecipe(new ItemStack(MarsItems.marsItemBasic, 1, 5), new ItemStack(MarsItems.marsItemBasic, 1, 2)); + + // Smelting + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsItems.marsItemBasic, 1, 0), new ItemStack(MarsItems.marsItemBasic, 1, 2), 0.2F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 4), new ItemStack(MarsBlocks.marsBlock, 1, 9), 0.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 0), new ItemStack(GCItems.basicItem, 1, 3), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 1), new ItemStack(GCItems.basicItem, 1, 4), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 2), new ItemStack(MarsItems.marsItemBasic, 1, 2), 0.2F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(MarsBlocks.marsBlock, 1, 3), new ItemStack(Items.IRON_INGOT), 0.2F); + FurnaceRecipes.instance().addSmeltingRecipeForBlock(Blocks.PLANKS, new ItemStack(MarsItems.carbonFragments), 0.0F); + + // Schematic + HashMap input = new HashMap<>(); + input.put(1, new ItemStack(GCItems.partNoseCone)); + input.put(2, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(3, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(4, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(5, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(6, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(7, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(8, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(9, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(10, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(11, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(12, new ItemStack(GCItems.rocketEngine, 1, 1)); + input.put(13, new ItemStack(GCItems.partFins)); + input.put(14, new ItemStack(GCItems.partFins)); + input.put(15, new ItemStack(GCItems.rocketEngine)); + input.put(16, new ItemStack(GCItems.rocketEngine, 1, 1)); + input.put(17, new ItemStack(GCItems.partFins)); + input.put(18, new ItemStack(GCItems.partFins)); + input.put(19, ItemStack.EMPTY); + input.put(20, ItemStack.EMPTY); + input.put(21, ItemStack.EMPTY); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 0), input); + + NonNullList woodChests = OreDictionary.getOres("chestWood"); + HashMap input2; + + for (ItemStack woodChest : woodChests) + { + input2 = new HashMap<>(input); + input2.put(19, woodChest); + input2.put(20, ItemStack.EMPTY); + input2.put(21, ItemStack.EMPTY); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, woodChest); + input2.put(21, ItemStack.EMPTY); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, ItemStack.EMPTY); + input2.put(21, woodChest); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 1), input2); + + input2 = new HashMap<>(input); + input2.put(19, woodChest); + input2.put(20, woodChest); + input2.put(21, ItemStack.EMPTY); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(19, woodChest); + input2.put(20, ItemStack.EMPTY); + input2.put(21, woodChest); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(19, ItemStack.EMPTY); + input2.put(20, woodChest); + input2.put(21, woodChest); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 2), input2); + + input2 = new HashMap<>(input); + input2.put(19, woodChest); + input2.put(20, woodChest); + input2.put(21, woodChest); + MarsUtil.addRocketBenchT2Recipe(new ItemStack(MarsItems.rocketMars, 1, 3), input2); + } + + // + + input = new HashMap<>(); + input.put(1, new ItemStack(GCItems.partNoseCone)); + input.put(2, new ItemStack(GCItems.basicItem, 1, 14)); + input.put(3, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(4, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(5, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(6, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(7, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(8, new ItemStack(MarsItems.marsItemBasic, 1, 3)); + input.put(9, new ItemStack(GCItems.partFins)); + input.put(10, new ItemStack(GCItems.partFins)); + input.put(11, new ItemStack(GCItems.rocketEngine)); + input.put(12, new ItemStack(GCItems.partFins)); + input.put(13, new ItemStack(GCItems.partFins)); + + for (ItemStack woodChest : woodChests) + { + input2 = new HashMap<>(input); + input2.put(14, woodChest); + input2.put(15, ItemStack.EMPTY); + input2.put(16, ItemStack.EMPTY); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 11), input2); + + input2 = new HashMap<>(input); + input2.put(14, ItemStack.EMPTY); + input2.put(15, woodChest); + input2.put(16, ItemStack.EMPTY); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 11), input2); + + input2 = new HashMap<>(input); + input2.put(14, ItemStack.EMPTY); + input2.put(15, ItemStack.EMPTY); + input2.put(16, woodChest); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 11), input2); + + input2 = new HashMap<>(input); + input2.put(14, woodChest); + input2.put(15, woodChest); + input2.put(16, ItemStack.EMPTY); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 12), input2); + + input2 = new HashMap<>(input); + input2.put(14, woodChest); + input2.put(15, ItemStack.EMPTY); + input2.put(16, woodChest); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 12), input2); + + input2 = new HashMap<>(input); + input2.put(14, ItemStack.EMPTY); + input2.put(15, woodChest); + input2.put(16, woodChest); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 12), input2); + + input2 = new HashMap<>(input); + input2.put(14, woodChest); + input2.put(15, woodChest); + input2.put(16, woodChest); + MarsUtil.adCargoRocketRecipe(new ItemStack(MarsItems.rocketMars, 1, 13), input2); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicCargoRocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicCargoRocket.java new file mode 100644 index 00000000..ed634dff --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicCargoRocket.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.schematic; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSchematicCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSchematicCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicCargoRocket implements ISchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerMars.idSchematicCargoRocket; + } + + @Override + public int getGuiID() + { + return GuiIdsPlanets.NASA_WORKBENCH_CARGO_ROCKET + Constants.MOD_ID_PLANETS.hashCode(); + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(MarsItems.schematic, 1, 1); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicCargoRocket(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicCargoRocket(player.inventory, pos); + } + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicTier2Rocket.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicTier2Rocket.java new file mode 100644 index 00000000..9614297c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/schematic/SchematicTier2Rocket.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.schematic; + +import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.client.gui.GuiSchematicTier2Rocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSchematicTier2Rocket; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SchematicTier2Rocket implements ISchematicPage +{ + + @Override + public int getPageID() + { + return ConfigManagerMars.idSchematicRocketT2; + } + + @Override + public int getGuiID() + { + return GuiIdsPlanets.NASA_WORKBENCH_TIER_2_ROCKET + Constants.MOD_ID_PLANETS.hashCode(); + } + + @Override + public ItemStack getRequiredItem() + { + return new ItemStack(GCItems.schematic, 1, 1); + } + + @SideOnly(Side.CLIENT) + @Override + public GuiScreen getResultScreen(EntityPlayer player, BlockPos pos) + { + return new GuiSchematicTier2Rocket(player.inventory, pos); + } + + @Override + public Container getResultContainer(EntityPlayer player, BlockPos pos) + { + return new ContainerSchematicTier2Rocket(player.inventory, pos); + } + + @Override + public int compareTo(ISchematicPage o) + { + if (this.getPageID() > o.getPageID()) + { + return 1; + } else + { + return -1; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityCryogenicChamber.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityCryogenicChamber.java new file mode 100644 index 00000000..d51a4bc1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityCryogenicChamber.java @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti.EnumBlockMultiType; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Biomes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityCryogenicChamber extends TileEntityMulti implements IMultiBlock +{ + + public boolean isOccupied; + private boolean initialised; + + public TileEntityCryogenicChamber() + { + super(null); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(getPos().getX() - 1, getPos().getY(), getPos().getZ() - 1, getPos().getX() + 2, getPos().getY() + 3, getPos().getZ() + 2); + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + if (this.world.isRemote) + { + return false; + } + + EntityPlayer.SleepResult enumstatus = this.sleepInBedAt(entityPlayer, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + + switch (enumstatus) + { + case OK: + ((EntityPlayerMP) entityPlayer).connection.setPlayerLocation(entityPlayer.posX, entityPlayer.posY, entityPlayer.posZ, entityPlayer.rotationYaw, entityPlayer.rotationPitch); + GalacticraftCore.packetPipeline.sendTo(new PacketSimpleMars(EnumSimplePacketMars.C_BEGIN_CRYOGENIC_SLEEP, GCCoreUtil.getDimensionID(entityPlayer.world), new Object[] + {this.getPos()}), (EntityPlayerMP) entityPlayer); + return true; + case NOT_POSSIBLE_NOW: + GCPlayerStats stats = GCPlayerStats.get(entityPlayer); + entityPlayer.sendMessage(new TextComponentString(GCCoreUtil.translateWithFormat("gui.cryogenic.chat.cant_use", stats.getCryogenicChamberCooldown() / 20))); + return false; + default: + return false; + } + } + + public EntityPlayer.SleepResult sleepInBedAt(EntityPlayer entityPlayer, int par1, int par2, int par3) + { + if (!this.world.isRemote) + { + if (entityPlayer.isPlayerSleeping() || !entityPlayer.isEntityAlive()) + { + return EntityPlayer.SleepResult.OTHER_PROBLEM; + } + + if (this.world.getBiome(new BlockPos(par1, par2, par3)) == Biomes.HELL) + { + return EntityPlayer.SleepResult.NOT_POSSIBLE_HERE; + } + + GCPlayerStats stats = GCPlayerStats.get(entityPlayer); + if (stats.getCryogenicChamberCooldown() > 0) + { + return EntityPlayer.SleepResult.NOT_POSSIBLE_NOW; + } + } + + if (entityPlayer.isRiding()) + { + entityPlayer.dismountRidingEntity(); + } + + entityPlayer.setPosition(this.getPos().getX() + 0.5F, this.getPos().getY() + 1.9F, this.getPos().getZ() + 0.5F); + + entityPlayer.sleeping = true; + entityPlayer.sleepTimer = 0; + entityPlayer.bedLocation = new BlockPos(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + entityPlayer.motionX = entityPlayer.motionZ = entityPlayer.motionY = 0.0D; + + if (!this.world.isRemote) + { + this.world.updateAllPlayersSleepingFlag(); + } + + return EntityPlayer.SleepResult.OK; + } + +// @Override +// public boolean canUpdate() +// { +// return true; +// } + + @Override + public void update() + { + if (!this.initialised) + { + this.initialised = this.initialiseMultiTiles(this.getPos(), this.world); + } + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + this.mainBlockPosition = placedPosition; + this.markDirty(); + + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return EnumBlockMultiType.CRYO_CHAMBER; + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + + for (int y = 1; y < 3; y++) + { + if (placedPosition.getY() + y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), placedPosition.getY() + y, placedPosition.getZ())); + } + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + final BlockPos thisBlock = getPos(); + List positions = new LinkedList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock && (EnumBlockMultiType) stateAt.getValue(BlockMulti.MULTI_TYPE) == EnumBlockMultiType.CRYO_CHAMBER) + { + if (this.world.isRemote && this.world.rand.nextDouble() < 0.1D) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, this.world.getBlockState(pos)); + } + this.world.destroyBlock(pos, false); + } + } + this.world.destroyBlock(thisBlock, true); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.isOccupied = nbt.getBoolean("IsChamberOccupied"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("IsChamberOccupied", this.isOccupied); + return nbt; + } + + @Override + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityDungeonSpawnerMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityDungeonSpawnerMars.java new file mode 100644 index 00000000..ac490bc1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityDungeonSpawnerMars.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCreeperBoss; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.SoundCategory; + +public class TileEntityDungeonSpawnerMars extends TileEntityDungeonSpawner +{ + + public TileEntityDungeonSpawnerMars() + { + super(EntityCreeperBoss.class); + } + + @Override + public List> getDisabledCreatures() + { + List> list = new ArrayList>(); + list.add(EntityEvolvedSkeleton.class); + list.add(EntityEvolvedZombie.class); + list.add(EntityEvolvedSpider.class); + return list; + } + + @Override + public void playSpawnSound(Entity entity) + { + this.world.playSound(null, entity.posX, entity.posY, entity.posZ, GCSounds.scaryScape, SoundCategory.AMBIENT, 9.0F, 1.4F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityElectrolyzer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityElectrolyzer.java new file mode 100644 index 00000000..bdb0e9d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityElectrolyzer.java @@ -0,0 +1,763 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; + +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.relauncher.Side; + +import micdoodle8.mods.miccore.Annotations.NetworkedField; + +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenReceiver; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenStorage; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.GCFluids; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.NetworkHelper; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMarsT2; + +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.common.capabilities.Capabilities; + +@Interface(iface = "mekanism.api.gas.IGasHandler", modid = "mekanism") +public class TileEntityElectrolyzer extends TileBaseElectricBlockWithInventory implements ISidedInventory, IDisableableMachine, IFluidHandlerWrapper, IOxygenStorage, IOxygenReceiver, IGasHandler +{ + + private final int tankCapacity = 4000; + + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank waterTank = new FluidTank(this.tankCapacity); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank liquidTank = new FluidTank(this.tankCapacity); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank liquidTank2 = new FluidTank(this.tankCapacity); + + public int processTimeRequired = 3; + @NetworkedField(targetSide = Side.CLIENT) + public int processTicks = 0; + + public TileEntityElectrolyzer() + { + super("tile.mars_machine.6.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 150 : 120); + this.setTierGC(2); + this.inventory = NonNullList.withSize(4, ItemStack.EMPTY); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (EnergyUtil.checkMekGasHandler(capability)) + return true; + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (EnergyUtil.checkMekGasHandler(capability)) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + + return super.getCapability(capability, facing); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + final FluidStack liquid = FluidUtil.getFluidContained(this.getInventory().get(1)); + if (FluidUtil.isFluidStrict(liquid, FluidRegistry.WATER.getName())) + { + FluidUtil.loadFromContainer(waterTank, FluidRegistry.WATER, this.getInventory(), 1, liquid.amount); + } + + // Only drain with atmospheric valve + checkFluidTankTransfer(2, this.liquidTank); + checkFluidTankTransfer(3, this.liquidTank2); + + if (this.hasEnoughEnergyToRun && this.canProcess()) + { + // 50% extra speed boost for Tier 2 machine if powered by Tier 2 + // power + if (this.tierGC == 2) + { + this.processTimeRequired = Math.max(1, 4 - this.poweredByTierGC); + } + + if (this.processTicks == 0) + { + this.processTicks = this.processTimeRequired; + } + else + { + if (--this.processTicks <= 0) + { + this.doElectrolysis(); + this.processTicks = this.canProcess() ? this.processTimeRequired : 0; + } + } + } + else + { + this.processTicks = 0; + } + + this.produceOxygen(this.getOxygenOutputDirection()); + this.produceHydrogen(this.getHydrogenOutputDirection()); + } + } + + private void doElectrolysis() + { + // Can't be called if the gasTank fluid is null + final int waterAmount = this.waterTank.getFluid().amount; + if (waterAmount == 0) + { + return; + } + + this.placeIntoFluidTanks(2); + this.waterTank.drain(1, true); + } + + private int placeIntoFluidTanks(int amountToDrain) + { + final int fuelSpace = this.liquidTank.getCapacity() - this.liquidTank.getFluidAmount(); + final int fuelSpace2 = this.liquidTank2.getCapacity() - this.liquidTank2.getFluidAmount(); + int amountToDrain2 = amountToDrain * 2; + + if (amountToDrain > fuelSpace) + { + amountToDrain = fuelSpace; + } + this.liquidTank.fill(FluidRegistry.getFluidStack("oxygen", amountToDrain), true); + + if (amountToDrain2 > fuelSpace2) + { + amountToDrain2 = fuelSpace2; + } + this.liquidTank2.fill(FluidRegistry.getFluidStack("hydrogen", amountToDrain2), true); + + return amountToDrain; + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + if (!this.getInventory().get(slot).isEmpty() && this.getInventory().get(slot).getItem() instanceof ItemAtmosphericValve) + { + tank.drain(4, true); + } + } + + public int getScaledGasLevel(int i) + { + return this.waterTank.getFluid() != null ? this.waterTank.getFluid().amount * i / this.waterTank.getCapacity() : 0; + } + + public int getScaledFuelLevel(int i) + { + return this.liquidTank.getFluid() != null ? this.liquidTank.getFluid().amount * i / this.liquidTank.getCapacity() : 0; + } + + public int getScaledFuelLevel2(int i) + { + return this.liquidTank2.getFluid() != null ? this.liquidTank2.getFluid().amount * i / this.liquidTank2.getCapacity() : 0; + } + + public boolean canProcess() + { + if (this.waterTank.getFluid() == null || this.waterTank.getFluid().amount <= 0 || this.getDisabled(0)) + { + return false; + } + + boolean tank1HasSpace = this.liquidTank.getFluidAmount() < this.liquidTank.getCapacity(); + boolean tank2HasSpace = this.liquidTank2.getFluidAmount() < this.liquidTank2.getCapacity(); + + return tank1HasSpace || tank2HasSpace; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("processTicks"); + + if (nbt.hasKey("waterTank")) + { + this.waterTank.readFromNBT(nbt.getCompoundTag("waterTank")); + } + + if (nbt.hasKey("gasTank")) + { + this.liquidTank.readFromNBT(nbt.getCompoundTag("gasTank")); + } + if (nbt.hasKey("gasTank2")) + { + this.liquidTank2.readFromNBT(nbt.getCompoundTag("gasTank2")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("processTicks", this.processTicks); + + if (this.waterTank.getFluid() != null) + { + nbt.setTag("waterTank", this.waterTank.writeToNBT(new NBTTagCompound())); + } + + if (this.liquidTank.getFluid() != null) + { + nbt.setTag("gasTank", this.liquidTank.writeToNBT(new NBTTagCompound())); + } + if (this.liquidTank2.getFluid() != null) + { + nbt.setTag("gasTank2", this.liquidTank2.writeToNBT(new NBTTagCompound())); + } + + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] {0, 1}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return itemstack.getItem() == Items.WATER_BUCKET; + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 1: + return itemstack.getItem() == Items.BUCKET; + default: + return false; + } + } + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + Item item = itemstack.getItem(); + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItem(item); + case 1: + return item == Items.BUCKET || item == Items.WATER_BUCKET; + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public double getPacketRange() + { + return 320.0D; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.DOWN; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + if (from == this.getHydrogenOutputDirection()) + { + return this.liquidTank2.getFluid() != null && this.liquidTank2.getFluidAmount() > 0; + } + if (from == this.getOxygenOutputDirection()) + { + return this.liquidTank.getFluid() != null && this.liquidTank.getFluidAmount() > 0; + } + + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + if (from == this.getHydrogenOutputDirection()) + { + if (resource != null && resource.isFluidEqual(this.liquidTank2.getFluid())) + { + return this.liquidTank2.drain(resource.amount, doDrain); + } + } + + if (from == this.getOxygenOutputDirection()) + { + if (resource != null && resource.isFluidEqual(this.liquidTank.getFluid())) + { + return this.liquidTank.drain(resource.amount, doDrain); + } + } + + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + if (from == this.getHydrogenOutputDirection()) + { + return this.liquidTank2.drain(maxDrain, doDrain); + } + + if (from == this.getOxygenOutputDirection()) + { + return this.liquidTank.drain(maxDrain, doDrain); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (from == this.byIndex().rotateY()) + { + // Can fill with water + return fluid == null || fluid.getName().equals(FluidRegistry.WATER.getName()); + } + + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (resource != null && this.canFill(from, resource.getFluid())) + { + used = this.waterTank.fill(resource, doFill); + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTankInfo[] tankInfo = new FluidTankInfo[] {}; + + if (from == this.byIndex().rotateY()) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.waterTank)}; + } + else if (from == this.getHydrogenOutputDirection()) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.liquidTank2)}; + } + else if (from == this.getOxygenOutputDirection()) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.liquidTank)}; + } + + return tankInfo; + } + + @Override + public int getBlockMetadata() + { + return getBlockType().getMetaFromState(this.world.getBlockState(getPos())); + } + + @Override + @Optional.Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + return 0; + } + + @Optional.Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return 0; + } + + @Override + @Optional.Method(modid = "mekanism") + public GasStack drawGas(EnumFacing from, int amount, boolean doTransfer) + { + if (from == this.getHydrogenOutputDirection() && this.liquidTank2.getFluid() != null) + { + int amountH = Math.min(8, this.liquidTank2.getFluidAmount()); + amountH = this.liquidTank2.drain(amountH, doTransfer).amount; + return new GasStack((Gas) EnergyConfigHandler.gasHydrogen, amountH); + } + else if (from == this.getOxygenOutputDirection() && this.liquidTank.getFluid() != null) + { + int amountO = Math.min(8, this.liquidTank.getFluidAmount()); + amountO = this.liquidTank.drain(amountO, doTransfer).amount; + return new GasStack((Gas) EnergyConfigHandler.gasOxygen, amountO); + } + return null; + } + + @Optional.Method(modid = "mekanism") + public GasStack drawGas(EnumFacing from, int amount) + { + return this.drawGas(from, amount, true); + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return false; + } + + @Override + @Optional.Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing from, Gas type) + { + if (from == this.getHydrogenOutputDirection()) + { + return type.getName().equals("hydrogen"); + } + else if (from == this.getOxygenOutputDirection()) + { + return type.getName().equals("oxygen"); + } + return false; + } + + @Optional.Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing from) + { + if (from == this.getHydrogenOutputDirection()) + { + return true; + } + else if (from == this.getOxygenOutputDirection()) + { + return true; + } + return false; + } + + @Override + public void setOxygenStored(int amount) + { + this.liquidTank.setFluid(new FluidStack(AsteroidsModule.fluidOxygenGas, amount)); + } + + @Override + public int getOxygenStored() + { + return this.liquidTank.getFluidAmount(); + } + + public int getHydrogenStored() + { + return this.liquidTank2.getFluidAmount(); + } + + @Override + public int getMaxOxygenStored() + { + return this.liquidTank.getCapacity(); + } + + private EnumFacing getOxygenOutputDirection() + { + return this.byIndex().getOpposite(); + } + + private EnumFacing getHydrogenOutputDirection() + { + return this.byIndex().rotateYCCW(); + } + + private boolean produceOxygen(EnumFacing outputDirection) + { + int provide = this.getOxygenProvide(outputDirection); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).modifyPositionFromSide(outputDirection).getTileEntity(this.world); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int gasRequested = outputNetwork.getRequest(); + + if (gasRequested > 0) + { + int usedGas = outputNetwork.emitToBuffer(new FluidStack(GCFluids.fluidOxygenGas, Math.min(gasRequested, provide)), true); + + this.drawOxygen(usedGas, true); + return true; + } + } + else if (outputTile instanceof IOxygenReceiver) + { + float requestedOxygen = ((IOxygenReceiver) outputTile).getOxygenRequest(outputDirection.getOpposite()); + + if (requestedOxygen > 0) + { + int toSend = Math.min(this.getOxygenStored(), provide); + int acceptedOxygen = ((IOxygenReceiver) outputTile).receiveOxygen(outputDirection.getOpposite(), toSend, true); + this.drawOxygen(acceptedOxygen, true); + return true; + } + } + } + + return false; + } + + private boolean produceHydrogen(EnumFacing outputDirection) + { + int provide = this.getHydrogenProvide(outputDirection); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).modifyPositionFromSide(outputDirection).getTileEntity(this.world); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int gasRequested = outputNetwork.getRequest(); + + if (gasRequested > 0) + { + int usedGas = outputNetwork.emitToBuffer(new FluidStack(FluidRegistry.getFluid("hydrogen"), Math.min(gasRequested, provide)), true); + + this.drawHydrogen(usedGas, true); + return true; + } + } + else if (outputTile instanceof TileEntityMethaneSynthesizer) + { + float requestedHydrogen = ((TileEntityMethaneSynthesizer) outputTile).getHydrogenRequest(outputDirection.getOpposite()); + + if (requestedHydrogen > 0) + { + int toSend = Math.min(this.getHydrogenStored(), provide); + int acceptedHydrogen = ((TileEntityMethaneSynthesizer) outputTile).receiveHydrogen(outputDirection.getOpposite(), toSend, true); + this.drawHydrogen(acceptedHydrogen, true); + return true; + } + } + } + + return false; + } + + @Override + public int provideOxygen(EnumFacing from, int request, boolean doProvide) + { + if (this.getOxygenOutputDirection() == from) + { + return this.drawOxygen(request, doProvide); + } + + return 0; + } + + public int drawOxygen(int request, boolean doProvide) + { + if (request > 0) + { + int requestedOxygen = Math.min(request, this.liquidTank.getFluidAmount()); + + if (doProvide) + { + this.setOxygenStored(this.liquidTank.getFluidAmount() - requestedOxygen); + } + + return requestedOxygen; + } + + return 0; + } + + public int drawHydrogen(int request, boolean doProvide) + { + if (request > 0) + { + int currentHydrogen = this.liquidTank2.getFluidAmount(); + int requestedHydrogen = Math.min(request, currentHydrogen); + + if (doProvide) + { + this.liquidTank2.setFluid(new FluidStack(FluidRegistry.getFluid("hydrogen"), currentHydrogen - requestedHydrogen)); + } + + return requestedHydrogen; + } + + return 0; + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return this.getOxygenOutputDirection() == direction ? Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.getOxygenStored()) : 0; + } + + public int getHydrogenProvide(EnumFacing direction) + { + return this.getHydrogenOutputDirection() == direction ? Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.getHydrogenStored()) : 0; + } + + @Override + public boolean shouldPullOxygen() + { + return false; + } + + @Override + public int receiveOxygen(EnumFacing from, int receive, boolean doReceive) + { + return 0; + } + + @Override + public int getOxygenRequest(EnumFacing direction) + { + return 0; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + + if (type == NetworkType.FLUID) + { + return this.getOxygenOutputDirection() == direction || this.getHydrogenOutputDirection() == direction || direction == this.byIndex().rotateY(); + } + + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + + return false; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMarsT2) + { + return state.getValue(BlockMachineMarsT2.FACING); + } + return EnumFacing.NORTH; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityGasLiquefier.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityGasLiquefier.java new file mode 100644 index 00000000..1f44d124 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityGasLiquefier.java @@ -0,0 +1,896 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.ArrayList; +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.common.capabilities.Capabilities; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IOxygenReceiver; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.NetworkHelper; +import micdoodle8.mods.galacticraft.core.items.ItemCanisterGeneric; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMarsT2; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; + +@Interface(modid = CompatibilityManager.modidMekanism, iface = "mekanism.api.gas.IGasHandler") +public class TileEntityGasLiquefier extends TileBaseElectricBlockWithInventory implements IDisableableMachine, IFluidHandlerWrapper, IOxygenReceiver, IGasHandler +{ + + private final int tankCapacity = 2000; + public static final int OUTPUT_PER_SECOND = 1; + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank gasTank = new FluidTank(this.tankCapacity * 2); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank liquidTank = new FluidTank(this.tankCapacity); + + public int processTimeRequired = 3; + @NetworkedField(targetSide = Side.CLIENT) + public int processTicks = -10; + private int airProducts = -1; + + @NetworkedField(targetSide = Side.CLIENT) + public int gasTankType = -1; + @NetworkedField(targetSide = Side.CLIENT) + public int fluidTankType = -1; + + public enum TankGases + { + + METHANE(0, "methane", ConfigManagerCore.useOldFuelFluidID ? "fuelgc" : "fuel"), OXYGEN(1, "oxygen", "liquidoxygen"), NITROGEN(2, "nitrogen", "liquidnitrogen"), ARGON(3, "argon", "liquidargon"), AIR(4, "atmosphericgases", "xxyyzz"); + + int index; + String gas; + String liquid; + + TankGases(int id, String fluidname, String outputname) + { + this.index = id; + this.gas = fluidname; + this.liquid = outputname; + } + } + + public TileEntityGasLiquefier() + { + super("tile.mars_machine.4.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 60); + this.setTierGC(2); + this.inventory = NonNullList.withSize(3, ItemStack.EMPTY); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + return true; + } + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + } + + return super.getCapability(capability, facing); + } + + @Override + public void invalidate() + { + super.invalidate(); + } + + @Override + public void update() + { + super.update(); + + if (this.airProducts == -1) + { + this.airProducts = this.getAirProducts(); + } + + if (!this.world.isRemote) + { + FluidStack currentgas = this.gasTank.getFluid(); + if (currentgas == null || currentgas.amount <= 0) + { + this.gasTankType = -1; + } else + { + this.gasTankType = this.getIdFromName(currentgas.getFluid().getName()); + } + + // If somehow it has air in an airless dimension, flush it out + if (this.airProducts == 0 && this.gasTankType == TankGases.AIR.index) + { + this.gasTank.drain(this.gasTank.getFluidAmount(), true); + } + + FluidStack currentLiquid = this.liquidTank.getFluid(); + if (currentLiquid == null || currentLiquid.amount == 0) + { + this.fluidTankType = -1; + } else + { + this.fluidTankType = this.getProductIdFromName(currentLiquid.getFluid().getName()); + } + + // First, see if any gas needs to be put into the gas storage + ItemStack inputCanister = getInventory().get(1); + if (!inputCanister.isEmpty()) + { + if (inputCanister.getItem() instanceof ItemAtmosphericValve && this.airProducts > 0) + { + // Air -> Air tank + if (this.gasTankType == -1 || (this.gasTankType == TankGases.AIR.index && this.gasTank.getFluid().amount < this.gasTank.getCapacity())) + { + IBlockState stateAbove = this.world.getBlockState(getPos().up()); + if (stateAbove.getMaterial() == Material.AIR && stateAbove.getBlock() != GCBlocks.breatheableAir && stateAbove.getBlock() != GCBlocks.brightBreatheableAir) + { + FluidStack gcAtmosphere = FluidRegistry.getFluidStack(TankGases.AIR.gas, 4); + this.gasTank.fill(gcAtmosphere, true); + this.gasTankType = TankGases.AIR.index; + } + } + } else if (inputCanister.getItem() instanceof ItemCanisterGeneric) + { + int amount = ItemCanisterGeneric.EMPTY - inputCanister.getItemDamage(); + if (amount > 0) + { + Item canisterType = inputCanister.getItem(); + FluidStack canisterGas = null; + int factor = 1; + if (this.gasTankType <= 0 && canisterType == AsteroidsItems.methaneCanister) + { + this.gasTankType = TankGases.METHANE.index; + canisterGas = FluidRegistry.getFluidStack(TankGases.METHANE.gas, amount); + } + if ((this.gasTankType == TankGases.OXYGEN.index || this.gasTankType == -1) && canisterType == AsteroidsItems.canisterLOX) + { + this.gasTankType = TankGases.OXYGEN.index; + canisterGas = FluidRegistry.getFluidStack(TankGases.OXYGEN.gas, amount * 2); + factor = 2; + } + if ((this.gasTankType == TankGases.NITROGEN.index || this.gasTankType == -1) && canisterType == AsteroidsItems.canisterLN2) + { + this.gasTankType = TankGases.NITROGEN.index; + canisterGas = FluidRegistry.getFluidStack(TankGases.NITROGEN.gas, amount * 2); + factor = 2; + } + + if (canisterGas != null) + { + int used = this.gasTank.fill(canisterGas, true) / factor; + if (used == amount) + { + getInventory().set(1, new ItemStack(GCItems.oilCanister, 1, ItemCanisterGeneric.EMPTY)); + } else + { + getInventory().set(1, new ItemStack(canisterType, 1, ItemCanisterGeneric.EMPTY - amount + used)); + } + } + } + } else + { + FluidStack liquid = net.minecraftforge.fluids.FluidUtil.getFluidContained(inputCanister); + if (liquid != null && liquid.amount > 0) + { + String inputName = FluidRegistry.getFluidName(liquid); + // Methane -> Methane tank + if (this.gasTankType <= 0 && inputName.contains("methane")) + { + if (currentgas == null || currentgas.amount + liquid.amount <= this.gasTank.getCapacity()) + { + FluidStack gcMethane = FluidRegistry.getFluidStack(TankGases.METHANE.gas, liquid.amount); + this.gasTank.fill(gcMethane, true); + this.gasTankType = 0; + ItemStack stack = FluidUtil.getUsedContainer(inputCanister); + getInventory().set(1, stack == null ? ItemStack.EMPTY : stack); + } + // Oxygen -> Oxygen tank + } else if ((this.gasTankType == TankGases.OXYGEN.index || this.gasTankType == -1) && inputName.contains("oxygen")) + { + int tankedAmount = liquid.amount * (inputName.contains("liquid") ? 2 : 1); + if (currentgas == null || currentgas.amount + tankedAmount <= this.gasTank.getCapacity()) + { + FluidStack gcgas = FluidRegistry.getFluidStack(TankGases.OXYGEN.gas, tankedAmount); + this.gasTank.fill(gcgas, true); + this.gasTankType = TankGases.OXYGEN.index; + ItemStack stack = FluidUtil.getUsedContainer(inputCanister); + getInventory().set(1, stack == null ? ItemStack.EMPTY : stack); + } + // Nitrogen -> Nitrogen tank + } else if ((this.gasTankType == TankGases.NITROGEN.index || this.gasTankType == -1) && inputName.contains("nitrogen")) + { + int tankedAmount = liquid.amount * (inputName.contains("liquid") ? 2 : 1); + if (currentgas == null || currentgas.amount + tankedAmount <= this.gasTank.getCapacity()) + { + FluidStack gcgas = FluidRegistry.getFluidStack(TankGases.NITROGEN.gas, tankedAmount); + this.gasTank.fill(gcgas, true); + this.gasTankType = TankGases.NITROGEN.index; + ItemStack stack = FluidUtil.getUsedContainer(inputCanister); + getInventory().set(1, stack == null ? ItemStack.EMPTY : stack); + } + } + } + } + } + + // Now see if any liquids from the output tanks need to be put into the output slot + checkFluidTankTransfer(2, this.liquidTank); + + if (this.hasEnoughEnergyToRun && this.canProcess()) + { + // 50% extra speed boost for Tier 2 machine if powered by Tier 2 power + if (this.tierGC == 2) + { + this.processTimeRequired = Math.max(1, 4 - this.poweredByTierGC); + } + + if (this.processTicks <= 0) + { + this.processTicks = this.processTimeRequired; + } else + { + if (--this.processTicks <= 0) + { + this.doLiquefaction(); + this.processTicks = this.canProcess() ? this.processTimeRequired : 0; + } + } + } else + { + if (this.processTicks > 0) + { + this.processTicks = 0; + } else if (--this.processTicks <= -10) + { + this.processTicks = -10; + } + } + this.produceOutput(this.getGasInputDirection().getOpposite()); + + } + + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + if (FluidUtil.isValidContainer(this.getInventory().get(slot))) + { + final FluidStack liquid = tank.getFluid(); + + if (liquid != null && liquid.amount > 0) + { + String liquidname = liquid.getFluid().getName(); + if (liquidname.startsWith("fuel")) + { + FluidUtil.tryFillContainerFuel(tank, this.getInventory(), slot); + } else if (liquidname.equals(TankGases.OXYGEN.liquid)) + { + FluidUtil.tryFillContainer(tank, liquid, this.getInventory(), slot, AsteroidsItems.canisterLOX); + } else if (liquidname.equals(TankGases.NITROGEN.liquid)) + { + FluidUtil.tryFillContainer(tank, liquid, this.getInventory(), slot, AsteroidsItems.canisterLN2); + } + } + } else if (!this.getInventory().get(slot).isEmpty() && this.getInventory().get(slot).getItem() instanceof ItemAtmosphericValve) + { + tank.drain(4, true); + } + } + + public int getIdFromName(String gasname) + { + for (TankGases type : TankGases.values()) + { + if (type.gas.equals(gasname)) + { + return type.index; + } + } + + return -1; + } + + public int getProductIdFromName(String gasname) + { + for (TankGases type : TankGases.values()) + { + if (type.liquid.equals(gasname)) + { + return type.index; + } + } + + return -1; + } + + public int getScaledGasLevel(int i) + { + return this.gasTank.getFluid() != null ? this.gasTank.getFluid().amount * i / this.gasTank.getCapacity() : 0; + } + + public int getScaledFuelLevel(int i) + { + return this.liquidTank.getFluid() != null ? this.liquidTank.getFluid().amount * i / this.liquidTank.getCapacity() : 0; + } + + public boolean canProcess() + { + if (this.gasTank.getFluid() == null || this.gasTank.getFluid().amount <= 0 || this.getDisabled(0)) + { + return false; + } + + if (this.fluidTankType == -1) + { + return true; + } + + boolean tank1HasSpace = this.liquidTank.getFluidAmount() < this.liquidTank.getCapacity(); + + if (this.gasTankType == TankGases.AIR.index) + { + int airProducts = this.airProducts; + do + { + int thisProduct = (airProducts & 15) - 1; + if (thisProduct == this.fluidTankType && tank1HasSpace) + { + return true; + } + airProducts = airProducts >> 4; + } while (airProducts > 0); + return false; + } + + return (this.gasTankType == this.fluidTankType && tank1HasSpace); + } + + public int getAirProducts() + { + WorldProvider WP = this.world.provider; + if (WP instanceof IGalacticraftWorldProvider) + { + int result = 0; + ArrayList atmos = ((IGalacticraftWorldProvider) WP).getCelestialBody().atmosphere.composition; + if (atmos.size() > 0) + { + result = this.getIdFromName(atmos.get(0).name().toLowerCase()) + 1; + } + if (atmos.size() > 1) + { + result += 16 * (this.getIdFromName(atmos.get(1).name().toLowerCase()) + 1); + } + if (atmos.size() > 2) + { + result += 256 * (this.getIdFromName(atmos.get(2).name().toLowerCase()) + 1); + } + + return result; + } + + return 35; + } + + public void doLiquefaction() + { + // Can't be called if the gasTank fluid is null + final int gasAmount = this.gasTank.getFluid().amount; + if (gasAmount == 0) + { + return; + } + + if (this.gasTankType == TankGases.AIR.index) + { + int airProducts = this.airProducts; + int amountToDrain = Math.min(gasAmount / 2, (airProducts > 15) ? 2 : 3); + if (amountToDrain == 0) + { + amountToDrain = 1; + } + + do + { + int thisProduct = (airProducts & 15) - 1; + // -1 indicates a gas which can't be liquefied (e.g. Carbon Dioxide) + if (thisProduct >= 0) + { + this.gasTank.drain(this.placeIntoFluidTanks(thisProduct, amountToDrain) * 2, true); + } + airProducts = airProducts >> 4; + amountToDrain = amountToDrain >> 1; + if (amountToDrain == 0) + { + amountToDrain = 1; + } + } while (airProducts > 0); + } else + { + if (gasAmount == 1) + { + this.gasTank.drain(this.placeIntoFluidTanks(this.gasTankType, 1), true); + } else + { + this.gasTank.drain(this.placeIntoFluidTanks(this.gasTankType, Math.min(gasAmount / 2, 3)) * 2, true); + } + } + } + + private int placeIntoFluidTanks(int thisProduct, int amountToDrain) + { + final int fuelSpace = this.liquidTank.getCapacity() - this.liquidTank.getFluidAmount(); + + if ((thisProduct == this.fluidTankType || this.fluidTankType == -1) && fuelSpace > 0) + { + if (amountToDrain > fuelSpace) + { + amountToDrain = fuelSpace; + } + this.liquidTank.fill(FluidRegistry.getFluidStack(TankGases.values()[thisProduct].liquid, amountToDrain), true); + this.fluidTankType = thisProduct; + } else + { + amountToDrain = 0; + } + return amountToDrain; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + + if (nbt.hasKey("gasTank")) + { + this.gasTank.readFromNBT(nbt.getCompoundTag("gasTank")); + } + + if (nbt.hasKey("liquidTank")) + { + this.liquidTank.readFromNBT(nbt.getCompoundTag("liquidTank")); + } + + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + if (this.gasTank.getFluid() != null) + { + nbt.setTag("gasTank", this.gasTank.writeToNBT(new NBTTagCompound())); + } + + if (this.liquidTank.getFluid() != null) + { + nbt.setTag("liquidTank", this.liquidTank.writeToNBT(new NBTTagCompound())); + } + + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + + + return side == EnumFacing.UP ? new int[] { 0 } : new int[] { 0, 1, 2 }; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 1: + return FluidUtil.isMethaneContainerAny(itemstack); + case 2: + return FluidUtil.isEmptyContainerFor(itemstack, this.liquidTank.getFluid()); + + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack); + case 1: + return FluidUtil.isEmptyContainer(itemstack); + case 2: + + return FluidUtil.isFullContainer(itemstack); + + default: + return false; + } + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + case 1: + case 2: + + return FluidUtil.isValidContainer(itemstack); + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public double getPacketRange() + { + return 320.0D; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.DOWN; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + + + if (from == getGasInputDirection().getOpposite()) + { + return this.liquidTank.getFluid() != null && this.liquidTank.getFluidAmount() > 0; + } + + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + + + if (from == getGasInputDirection().getOpposite()) + { + if (resource != null && resource.isFluidEqual(this.liquidTank.getFluid())) + { + return this.liquidTank.drain(resource.amount, doDrain); + } + } + + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + + + if (from == getGasInputDirection().getOpposite()) + { + return this.liquidTank.drain(maxDrain, doDrain); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (from.equals(this.getGasInputDirection())) + { + // Can fill with gases + return fluid == null || this.getIdFromName(fluid.getName()) > -1; + } + + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (resource != null && this.canFill(from, resource.getFluid())) + { + int type = this.getIdFromName(FluidRegistry.getFluidName(resource)); + + if (this.gasTankType == -1 || (this.gasTankType == type && this.gasTank.getFluidAmount() < this.gasTank.getCapacity())) + { + used = this.gasTank.fill(resource, doFill); + } + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTankInfo[] tankInfo = new FluidTankInfo[] {}; + + if (from == this.getGasInputDirection()) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.gasTank)}; + } + + if (getGasInputDirection().getOpposite() == from) + { + tankInfo = new FluidTankInfo[] {new FluidTankInfo(this.liquidTank)}; + } + + return tankInfo; + } + + @Override + public int getBlockMetadata() + { + return getBlockType().getMetaFromState(this.world.getBlockState(getPos())) & 3; + } + + @Override + public boolean shouldPullOxygen() + { + return this.gasTankType == -1 || (this.gasTankType == 1 && this.gasTank.getFluidAmount() < this.gasTank.getCapacity()); + } + + @Override + public int receiveOxygen(EnumFacing from, int receive, boolean doReceive) + { + if (from == this.getGasInputDirection() && this.shouldPullOxygen()) + { + // Special conversion ratio for breathable air + float conversion = 2F * Constants.LOX_GAS_RATIO; + FluidStack fluidToFill = new FluidStack(AsteroidsModule.fluidOxygenGas, (int) (receive * conversion)); + int used = MathHelper.ceil(this.gasTank.fill(fluidToFill, doReceive) / conversion); + return used; + } + + return 0; + } + + @Override + public int provideOxygen(EnumFacing from, int request, boolean doProvide) + { + return 0; + } + + @Override + public int getOxygenRequest(EnumFacing direction) + { + return this.receiveOxygen(direction, 1000000, false); + } + + @Override + public int getOxygenProvide(EnumFacing direction) + { + return 0; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + + if (type == NetworkType.FLUID) + { + return direction == getGasInputDirection() || direction == this.getGasInputDirection().getOpposite() || direction == this.getGasInputDirection().rotateY(); + } + + if (type == NetworkType.POWER) + { + return direction == EnumFacing.DOWN; + } + + return false; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMarsT2) + { + return state.getValue(BlockMachineMarsT2.FACING); + } + return EnumFacing.NORTH; + } + + public EnumFacing getGasInputDirection() + { + return this.byIndex().rotateY(); + } + + private boolean produceOutput(EnumFacing outputDirection) + { + // Used produceOutput() function from TileEntityMethaneSynthesizer as reference for this one + + int provide = Math.min(this.liquidTank.getFluidAmount(), TileEntityGasLiquefier.OUTPUT_PER_SECOND); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).getTileEntityOnSide(this.world, outputDirection); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int fuelRequested = outputNetwork.getRequest(); + + if (fuelRequested > 0) + { + int usedFuel = outputNetwork.emitToBuffer(new FluidStack(this.liquidTank.getFluid(), provide), true); + this.liquidTank.drain(usedFuel, true); + + return true; + } + } + } + + return false; + } + + @Override + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + if (!stack.getGas().getName().equals("oxygen") || !this.shouldPullOxygen()) + { + return 0; + } + int used = 0; + if (this.gasTank.getFluidAmount() < this.gasTank.getCapacity()) + { + used = this.gasTank.fill(FluidRegistry.getFluidStack("oxygen", stack.amount), doTransfer); + } + return used; + } + + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Override + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return null; + } + + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount) + { + return null; + } + + @Override + @Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + return this.shouldPullOxygen() && type.getName().equals("oxygen") && side.equals(this.getGasInputDirection()); + } + + @Override + @Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing side, Gas type) + { + return false; + } + + @Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing side) + { + return side.equals(this.getGasInputDirection()); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityLaunchController.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityLaunchController.java new file mode 100644 index 00000000..9440a9a0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityLaunchController.java @@ -0,0 +1,503 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.ArrayList; +// import java.util.HashMap; +import java.util.List; +// import java.util.Map; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.IDockable; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.tile.IFuelDock; +import micdoodle8.mods.galacticraft.api.tile.ILandingPadAttachable; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockLandingPadFull; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.tile.TileEntityLandingPad; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.world.ChunkLoadingCallback; +import micdoodle8.mods.galacticraft.core.world.IChunkLoader; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.ForgeChunkManager.Ticket; +import net.minecraftforge.fml.relauncher.Side; + +public class TileEntityLaunchController extends TileBaseElectricBlockWithInventory implements IChunkLoader, ISidedInventory, ILandingPadAttachable +{ + + public static final int WATTS_PER_TICK = 1; + @NetworkedField(targetSide = Side.CLIENT) + public boolean launchPadRemovalDisabled = true; + private Ticket chunkLoadTicket; + private List connectedPads = new ArrayList(); + @NetworkedField(targetSide = Side.CLIENT) + public int frequency = -1; + @NetworkedField(targetSide = Side.CLIENT) + public int destFrequency = -1; + @NetworkedField(targetSide = Side.CLIENT) + public String ownerName = ""; + @NetworkedField(targetSide = Side.CLIENT) + public boolean frequencyValid; + @NetworkedField(targetSide = Side.CLIENT) + public boolean destFrequencyValid; + @NetworkedField(targetSide = Side.CLIENT) + public int launchDropdownSelection; + @NetworkedField(targetSide = Side.CLIENT) + public boolean launchSchedulingEnabled; + @NetworkedField(targetSide = Side.CLIENT) + public boolean controlEnabled; + public boolean hideTargetDestination = true; + public boolean requiresClientUpdate; + public Object attachedDock = null; + private boolean frequencyCheckNeeded = false; + + public TileEntityLaunchController() + { + super("container.launchcontroller.name"); + this.storage.setMaxExtract(6); + this.noRedstoneControl = true; + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + this.controlEnabled = this.launchSchedulingEnabled && this.hasEnoughEnergyToRun && !this.getDisabled(0); + + if (this.frequencyCheckNeeded) + { + this.checkDestFrequencyValid(); + this.frequencyCheckNeeded = false; + } + + if (this.requiresClientUpdate) + { + // PacketDispatcher.sendPacketToAllPlayers(this.getPacket()); + // TODO + this.requiresClientUpdate = false; + } + + if (this.ticks % 40 == 0) + { + this.setFrequency(this.frequency); + this.setDestinationFrequency(this.destFrequency); + } + + if (this.ticks % 20 == 0) + { + if (this.chunkLoadTicket != null) + { + for (int i = 0; i < this.connectedPads.size(); i++) + { + BlockPos coords = this.connectedPads.get(i); + Block block = this.world.getBlockState(coords).getBlock(); + + if (block != GCBlocks.landingPadFull) + { + this.connectedPads.remove(i); + ForgeChunkManager.unforceChunk(this.chunkLoadTicket, new ChunkPos(coords.getX() >> 4, coords.getZ() >> 4)); + } + } + } + } + } + else + { + if (this.frequency == -1 && this.destFrequency == -1) + { + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleMars(EnumSimplePacketMars.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(this.world), new Object[] + {5, this.getPos(), 0})); + } + } + } + + @Override + public String getOwnerName() + { + return this.ownerName; + } + + @Override + public void setOwnerName(String ownerName) + { + this.ownerName = ownerName; + } + + @Override + public void invalidate() + { + super.invalidate(); + + if (this.chunkLoadTicket != null) + { + ForgeChunkManager.releaseTicket(this.chunkLoadTicket); + } + } + + @Override + public void onTicketLoaded(Ticket ticket, boolean placed) + { + if (!this.world.isRemote && ConfigManagerMars.launchControllerChunkLoad) + { + if (ticket == null) + { + return; + } + + if (this.chunkLoadTicket == null) + { + this.chunkLoadTicket = ticket; + } + + NBTTagCompound nbt = this.chunkLoadTicket.getModData(); + nbt.setInteger("ChunkLoaderTileX", this.getPos().getX()); + nbt.setInteger("ChunkLoaderTileY", this.getPos().getY()); + nbt.setInteger("ChunkLoaderTileZ", this.getPos().getZ()); + + for (int x = -2; x <= 2; x++) + { + for (int z = -2; z <= 2; z++) + { + Block blockID = this.world.getBlockState(this.getPos().add(x, 0, z)).getBlock(); + + if (blockID instanceof BlockLandingPadFull) + { + if (this.getPos().getX() + x >> 4 != this.getPos().getX() >> 4 || this.getPos().getZ() + z >> 4 != this.getPos().getZ() >> 4) + { + this.connectedPads.add(new BlockPos(this.getPos().getX() + x, this.getPos().getY(), this.getPos().getZ() + z)); + + if (placed) + { + ChunkLoadingCallback.forceChunk(this.chunkLoadTicket, this.world, this.getPos().getX() + x, this.getPos().getY(), this.getPos().getZ() + z, this.getOwnerName()); + } + else + { + ChunkLoadingCallback.addToList(this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getOwnerName()); + } + } + } + } + } + + ChunkLoadingCallback.forceChunk(this.chunkLoadTicket, this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.getOwnerName()); + } + } + + @Override + public Ticket getTicket() + { + return this.chunkLoadTicket; + } + + @Override + public BlockPos getCoords() + { + return new BlockPos(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.ownerName = nbt.getString("OwnerName"); + this.launchDropdownSelection = nbt.getInteger("LaunchSelection"); + this.frequency = nbt.getInteger("ControllerFrequency"); + this.destFrequency = nbt.getInteger("TargetFrequency"); + this.frequencyCheckNeeded = true; + this.launchPadRemovalDisabled = nbt.getBoolean("LaunchPadRemovalDisabled"); + this.launchSchedulingEnabled = nbt.getBoolean("LaunchPadSchedulingEnabled"); + this.hideTargetDestination = nbt.getBoolean("HideTargetDestination"); + this.requiresClientUpdate = GCCoreUtil.getEffectiveSide() == Side.SERVER; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setString("OwnerName", this.ownerName); + nbt.setInteger("LaunchSelection", this.launchDropdownSelection); + nbt.setInteger("ControllerFrequency", this.frequency); + nbt.setInteger("TargetFrequency", this.destFrequency); + nbt.setBoolean("LaunchPadRemovalDisabled", this.launchPadRemovalDisabled); + nbt.setBoolean("LaunchPadSchedulingEnabled", this.launchSchedulingEnabled); + nbt.setBoolean("HideTargetDestination", this.hideTargetDestination); + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemStack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemStack.getItem()); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return slotID == 0; + } + + @Override + public boolean shouldUseEnergy() + { + return !this.getDisabled(0); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + switch (index) + { + case 0: + this.disabled = disabled; + this.disableCooldown = 10; + break; + case 1: + this.launchSchedulingEnabled = disabled; + break; + case 2: + this.hideTargetDestination = disabled; + this.disableCooldown = 10; + break; + } + } + } + + @Override + public boolean getDisabled(int index) + { + switch (index) + { + case 0: + return this.disabled; + case 1: + return this.launchSchedulingEnabled; + case 2: + return this.hideTargetDestination; + } + + return true; + } + + @Override + public boolean canAttachToLandingPad(IBlockAccess world, BlockPos pos) + { + TileEntity tile = world.getTileEntity(pos); + + return tile instanceof TileEntityLandingPad; + } + + public void setFrequency(int frequency) + { + this.frequency = frequency; + + if (this.frequency >= 0) + { + this.frequencyValid = true; + WorldServer[] servers = GCCoreUtil.getWorldServerList(this.world); + + worldLoop: for (int i = 0; i < servers.length; i++) + { + WorldServer world = servers[i]; + + for (TileEntity tile2 : new ArrayList(world.loadedTileEntityList)) + { + if (this != tile2) + { + tile2 = world.getTileEntity(tile2.getPos()); + if (tile2 == null) + { + continue; + } + + if (tile2 instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController2 = (TileEntityLaunchController) tile2; + + if (launchController2.frequency == this.frequency) + { + GalacticraftPlanets.logger.debug("Launch Controller frequency conflict at " + tile2.getPos() + " on dim: " + GCCoreUtil.getDimensionID(tile2)); + this.frequencyValid = false; + break worldLoop; + } + } + } + } + } + } + else + { + this.frequencyValid = false; + } + } + + public void setDestinationFrequency(int frequency) + { + if (frequency != this.destFrequency) + { + this.destFrequency = frequency; + this.checkDestFrequencyValid(); + this.updateRocketOnDockSettings(); + } + } + + public void checkDestFrequencyValid() + { + if (!this.world.isRemote) + { + this.destFrequencyValid = false; + if (this.destFrequency >= 0) + { + WorldServer[] servers = GCCoreUtil.getWorldServerList(this.world); + for (int i = 0; i < servers.length; i++) + { + WorldServer world = servers[i]; + + for (TileEntity tile2 : new ArrayList(world.loadedTileEntityList)) + { + if (this != tile2) + { + tile2 = world.getTileEntity(tile2.getPos()); + if (tile2 == null) + { + continue; + } + + if (tile2 instanceof TileEntityLaunchController) + { + TileEntityLaunchController launchController2 = (TileEntityLaunchController) tile2; + + if (launchController2.frequency == this.destFrequency) + { + this.destFrequencyValid = true; + return; + } + } + } + } + } + } + } + } + + public boolean validFrequency() + { + this.checkDestFrequencyValid(); + return !this.getDisabled(0) && this.hasEnoughEnergyToRun && this.frequencyValid && this.destFrequencyValid; + } + + public void setLaunchDropdownSelection(int newvalue) + { + if (newvalue != this.launchDropdownSelection) + { + this.launchDropdownSelection = newvalue; + this.checkDestFrequencyValid(); + this.updateRocketOnDockSettings(); + } + } + + public void setLaunchSchedulingEnabled(boolean newvalue) + { + if (newvalue != this.launchSchedulingEnabled) + { + this.launchSchedulingEnabled = newvalue; + this.checkDestFrequencyValid(); + this.updateRocketOnDockSettings(); + } + } + + public void updateRocketOnDockSettings() + { + if (this.attachedDock instanceof TileEntityLandingPad) + { + TileEntityLandingPad pad = ((TileEntityLandingPad) this.attachedDock); + IDockable rocket = pad.getDockedEntity(); + if (rocket instanceof EntityAutoRocket) + { + ((EntityAutoRocket) rocket).updateControllerSettings(pad); + } + } + } + + public void setAttachedPad(IFuelDock pad) + { + this.attachedDock = pad; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMars) + { + return state.getValue(BlockMachineMars.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityMethaneSynthesizer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityMethaneSynthesizer.java new file mode 100644 index 00000000..ce2f75f7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityMethaneSynthesizer.java @@ -0,0 +1,702 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.ArrayList; +import mekanism.api.gas.Gas; +import mekanism.api.gas.GasStack; +import mekanism.api.gas.IGasHandler; +import mekanism.common.capabilities.Capabilities; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.fluid.FluidNetwork; +import micdoodle8.mods.galacticraft.core.fluid.NetworkHelper; +import micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.util.OxygenUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.planets.asteroids.AsteroidsModule; +import micdoodle8.mods.galacticraft.planets.asteroids.items.AsteroidsItems; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemAtmosphericValve; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMarsT2; +import micdoodle8.mods.galacticraft.planets.mars.items.MarsItems; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.world.WorldProvider; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.Optional.Method; +import net.minecraftforge.fml.relauncher.Side; + +@Interface(modid = CompatibilityManager.modidMekanism, iface = "mekanism.api.gas.IGasHandler") +public class TileEntityMethaneSynthesizer extends TileBaseElectricBlockWithInventory implements IDisableableMachine, IFluidHandlerWrapper, IGasHandler +{ + + private final int tankCapacity = 4000; + + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank gasTank = new FluidTank(this.tankCapacity); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank gasTank2 = new FluidTank(this.tankCapacity / 2); + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank liquidTank = new FluidTank(this.tankCapacity / 2); + + public int processTimeRequired = 3; + @NetworkedField(targetSide = Side.CLIENT) + public int processTicks = -8; + private int hasCO2 = -1; + private boolean noCoal = true; + private int coalPartial = 0; + + public TileEntityMethaneSynthesizer() + { + super("tile.mars_machine.5.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 90 : 45); + this.setTierGC(2); + this.inventory = NonNullList.withSize(5, ItemStack.EMPTY); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return true; + + if (CompatibilityManager.isMekanismLoaded()) + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + return true; + + return super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + + if (CompatibilityManager.isMekanismLoaded()) + { + if (capability == Capabilities.GAS_HANDLER_CAPABILITY) + { + return Capabilities.GAS_HANDLER_CAPABILITY.cast(this); + } + } + + return super.getCapability(capability, facing); + } + + @Override + public void update() + { + super.update(); + + if (this.hasCO2 == -1) + { + this.hasCO2 = this.getAirProducts(); + } + + if (!this.world.isRemote) + { + // If somehow it has CO2 in a CO2-free dimension, flush it out + if (this.hasCO2 == 0 && this.gasTank2.getFluidAmount() > 0) + { + this.gasTank2.drain(this.gasTank2.getFluidAmount(), true); + } + + // Now check the CO2 storage + ItemStack inputCanister = this.getInventory().get(2); + if (!inputCanister.isEmpty()) + { + if (inputCanister.getItem() instanceof ItemAtmosphericValve && this.hasCO2 > 0) + { + // CO2 -> CO2 tank + if (this.gasTank2.getFluidAmount() < this.gasTank2.getCapacity()) + { + IBlockState stateAbove = this.world.getBlockState(this.getPos().up()); + Block blockAbove = stateAbove.getBlock(); + if (blockAbove.getMaterial(stateAbove) == Material.AIR && blockAbove != GCBlocks.breatheableAir && blockAbove != GCBlocks.brightBreatheableAir) + { + if (!OxygenUtil.inOxygenBubble(this.world, this.getPos().getX() + 0.5D, this.getPos().getY() + 1D, this.getPos().getZ() + 0.5D)) + { + FluidStack gcAtmosphere = FluidRegistry.getFluidStack("carbondioxide", 4); + this.gasTank2.fill(gcAtmosphere, true); + } + } + } + } + } + + // Now see if any methane from the methane tank needs to be put into + // the output slot + checkFluidTankTransfer(4, this.liquidTank); + + if (this.hasEnoughEnergyToRun && this.canProcess()) + { + // 50% extra speed boost for Tier 2 machine if powered by Tier 2 + // power + if (this.tierGC == 2) + { + this.processTimeRequired = Math.max(1, 4 - this.poweredByTierGC); + } + + if (this.processTicks <= 0) + { + this.processTicks = this.processTimeRequired; + } + else + { + if (--this.processTicks <= 0) + { + this.doLiquefaction(); + this.processTicks = this.canProcess() ? this.processTimeRequired : 0; + } + } + } + else + { + if (this.processTicks > 0) + { + this.processTicks = 0; + } + else if (--this.processTicks <= -8) + { + this.processTicks = -8; + } + } + + this.produceOutput(this.getHydrogenInputDirection().getOpposite()); + } + } + + private void checkFluidTankTransfer(int slot, FluidTank tank) + { + if (FluidUtil.isValidContainer(this.getInventory().get(slot))) + { + final FluidStack liquid = tank.getFluid(); + + if (liquid != null) + { + FluidUtil.tryFillContainer(tank, liquid, this.getInventory(), slot, AsteroidsItems.methaneCanister); + } + } + else if (!this.getInventory().get(slot).isEmpty() && this.getInventory().get(slot).getItem() instanceof ItemAtmosphericValve) + { + tank.drain(4, true); + } + } + + public int getScaledGasLevel(int i) + { + return this.gasTank.getFluid() != null ? this.gasTank.getFluid().amount * i / this.gasTank.getCapacity() : 0; + } + + public int getScaledGasLevel2(int i) + { + return this.gasTank2.getFluid() != null ? this.gasTank2.getFluid().amount * i / this.gasTank2.getCapacity() : 0; + } + + public int getScaledFuelLevel(int i) + { + return this.liquidTank.getFluid() != null ? this.liquidTank.getFluid().amount * i / this.liquidTank.getCapacity() : 0; + } + + public boolean canProcess() + { + if (this.gasTank.getFluid() == null || this.gasTank.getFluid().amount <= 0 || this.getDisabled(0)) + { + return false; + } + + this.noCoal = this.getInventory().get(3).isEmpty() || this.getInventory().get(3).getItem() != MarsItems.carbonFragments; + + if (this.noCoal && this.coalPartial == 0 && (this.gasTank2.getFluid() == null || this.gasTank2.getFluidAmount() <= 0)) + { + return false; + } + + return this.liquidTank.getFluidAmount() < this.liquidTank.getCapacity(); + } + + public int getAirProducts() + { + WorldProvider WP = this.world.provider; + if (WP instanceof IGalacticraftWorldProvider) + { + ArrayList atmos = ((IGalacticraftWorldProvider) WP).getCelestialBody().atmosphere.composition; + if (atmos.size() > 0) + { + if (atmos.get(0) == EnumAtmosphericGas.CO2) + { + return 1; + } + } + if (atmos.size() > 1) + { + if (atmos.get(1) == EnumAtmosphericGas.CO2) + { + return 1; + } + } + if (atmos.size() > 2) + { + if (atmos.get(2) == EnumAtmosphericGas.CO2) + { + return 1; + } + } + + return 0; + } + + return 0; + } + + public void doLiquefaction() + { + if (this.noCoal && this.coalPartial == 0) + { + if (this.gasTank2.getFluid() == null || this.gasTank2.drain(1, true).amount < 1) + { + return; + } + } + else + { + if (this.coalPartial == 0) + { + this.decrStackSize(3, 1); + } + this.coalPartial++; + if (this.coalPartial == 40) + { + this.coalPartial = 0; + } + } + this.gasTank.drain(this.placeIntoFluidTanks(2) * 8, true); + } + + private int placeIntoFluidTanks(int amountToDrain) + { + final int fuelSpace = this.liquidTank.getCapacity() - this.liquidTank.getFluidAmount(); + + if (fuelSpace > 0) + { + if (amountToDrain > fuelSpace) + { + amountToDrain = fuelSpace; + } + this.liquidTank.fill(FluidRegistry.getFluidStack("methane", amountToDrain), true); + } + else + { + amountToDrain = 0; + } + + return amountToDrain; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.processTicks = nbt.getInteger("smeltingTicks"); + + if (nbt.hasKey("gasTank")) + { + this.gasTank.readFromNBT(nbt.getCompoundTag("gasTank")); + } + + if (nbt.hasKey("gasTank2")) + { + this.gasTank2.readFromNBT(nbt.getCompoundTag("gasTank2")); + } + + if (nbt.hasKey("liquidTank")) + { + this.liquidTank.readFromNBT(nbt.getCompoundTag("liquidTank")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("smeltingTicks", this.processTicks); + + if (this.gasTank.getFluid() != null) + { + nbt.setTag("gasTank", this.gasTank.writeToNBT(new NBTTagCompound())); + } + + if (this.gasTank2.getFluid() != null) + { + nbt.setTag("gasTank2", this.gasTank2.writeToNBT(new NBTTagCompound())); + } + + if (this.liquidTank.getFluid() != null) + { + nbt.setTag("liquidTank", this.liquidTank.writeToNBT(new NBTTagCompound())); + } + + return nbt; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2, 3, 4}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemCharged(itemstack); + case 3: + return itemstack.getItem() == MarsItems.carbonFragments; + case 4: + return FluidUtil.isPartialContainer(itemstack, AsteroidsItems.methaneCanister); + default: + return false; + } + } + return false; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (this.isItemValidForSlot(slotID, itemstack)) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItemEmpty(itemstack) || !this.shouldPullEnergy(); + case 4: + return FluidUtil.isFullContainer(itemstack); + default: + return false; + } + } + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + case 1: + return false; + case 2: + return itemstack.getItem() instanceof ItemAtmosphericValve; + case 3: + return itemstack.getItem() == MarsItems.carbonFragments; + case 4: + return FluidUtil.isValidContainer(itemstack); + } + + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return this.canProcess(); + } + + @Override + public double getPacketRange() + { + return 320.0D; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return EnumFacing.DOWN; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + if (from == this.getHydrogenInputDirection().getOpposite()) + { + return this.liquidTank.getFluid() != null && this.liquidTank.getFluidAmount() > 0; + } + + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + if (from == this.getHydrogenInputDirection().getOpposite()) + { + if (resource != null && resource.isFluidEqual(this.liquidTank.getFluid())) + { + return this.liquidTank.drain(resource.amount, doDrain); + } + } + + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + if (from == getHydrogenInputDirection().getOpposite()) + { + return this.liquidTank.drain(maxDrain, doDrain); + } + + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + if (from == this.getHydrogenInputDirection()) + { + return fluid == null || "hydrogen".equals(fluid.getName()); + } + + return false; + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (resource != null && this.canFill(from, resource.getFluid())) + { + if (this.gasTank.getFluidAmount() < this.gasTank.getCapacity()) + { + used = this.gasTank.fill(resource, doFill); + } + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + FluidTankInfo[] tankInfo = new FluidTankInfo[] {}; + + if (from == this.getHydrogenInputDirection()) + { + tankInfo = new FluidTankInfo[] + {new FluidTankInfo(this.gasTank)}; + } + else if (from == this.getHydrogenInputDirection().getOpposite()) + { + tankInfo = new FluidTankInfo[] + {new FluidTankInfo(this.liquidTank)}; + } + + return tankInfo; + } + + @Override + public int getBlockMetadata() + { + return this.getBlockType().getMetaFromState(this.world.getBlockState(getPos())); + } + + @Override + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack, boolean doTransfer) + { + if (!stack.getGas().getName().equals("hydrogen")) + { + return 0; + } + int used = 0; + if (this.gasTank.getFluidAmount() < this.gasTank.getCapacity()) + { + used = this.gasTank.fill(FluidRegistry.getFluidStack("hydrogen", stack.amount), doTransfer); + } + return used; + } + + @Method(modid = "mekanism") + public int receiveGas(EnumFacing side, GasStack stack) + { + return this.receiveGas(side, stack, true); + } + + @Override + @Method(modid = "mekanism") + public GasStack drawGas(EnumFacing side, int amount, boolean doTransfer) + { + return null; + } + + @Override + @Method(modid = "mekanism") + public boolean canReceiveGas(EnumFacing side, Gas type) + { + // System.out.println("Testing receipt of gas "+type.getName()); + return type.getName().equals("hydrogen") && side.equals(this.getHydrogenInputDirection()); + } + + @Override + @Method(modid = "mekanism") + public boolean canDrawGas(EnumFacing side, Gas type) + { + return gasTank.canDrain(); + } + + @Method(modid = "mekanism") + public boolean canTubeConnect(EnumFacing side) + { + return side.equals(this.getHydrogenInputDirection()); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + + // Hydrogen pipe + if (type == NetworkType.FLUID) + { + return direction == this.getHydrogenInputDirection() || direction == this.getHydrogenInputDirection().getOpposite(); + } + + return false; + } + + public int getHydrogenRequest(EnumFacing direction) + { + return this.receiveHydrogen(direction, 1000000F, false); + } + + public boolean shouldPullHydrogen() + { + return this.gasTank.getFluidAmount() < this.gasTank.getCapacity(); + } + + public int receiveHydrogen(EnumFacing from, float receive, boolean doReceive) + { + if (from == this.getHydrogenInputDirection() && this.shouldPullHydrogen()) + { + FluidStack fluidToFill = FluidRegistry.getFluidStack("hydrogen", (int) (receive)); + return this.gasTank.fill(fluidToFill, doReceive); + } + + return 0; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMarsT2) + { + return state.getValue(BlockMachineMarsT2.FACING); + } + return EnumFacing.NORTH; + } + + public EnumFacing getHydrogenInputDirection() + { + return this.byIndex().rotateY(); + } + + private boolean produceOutput(EnumFacing outputDirection) + { + int provide = this.getMethaneProvide(); + + if (provide > 0) + { + TileEntity outputTile = new BlockVec3(this).getTileEntityOnSide(this.world, outputDirection); + FluidNetwork outputNetwork = NetworkHelper.getFluidNetworkFromTile(outputTile, outputDirection); + + if (outputNetwork != null) + { + int gasRequested = outputNetwork.getRequest(); + + if (gasRequested > 0) + { + int usedGas = outputNetwork.emitToBuffer(new FluidStack(AsteroidsModule.fluidMethaneGas, Math.min(gasRequested, provide)), true); + this.liquidTank.drain(usedGas, true); + return true; + } + } + } + + return false; + } + + private int getMethaneProvide() + { + return Math.min(TileEntityOxygenStorageModule.OUTPUT_PER_TICK, this.liquidTank.getFluidAmount()); + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntitySlimelingEgg.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntitySlimelingEgg.java new file mode 100644 index 00000000..8309cf8a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntitySlimelingEgg.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import java.util.UUID; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.management.PreYggdrasilConverter; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileEntitySlimelingEgg extends TileEntity implements ITickable +{ + + public int timeToHatch = -1; + public String lastTouchedPlayerUUID = ""; + public String lastTouchedPlayerName = ""; + + @Override + public void update() + { + if (!this.world.isRemote) + { + if (this.timeToHatch > 0) + { + this.timeToHatch--; + } else if (this.timeToHatch == 0 && lastTouchedPlayerUUID != null && lastTouchedPlayerUUID.length() > 0) + { + IBlockState state = this.world.getBlockState(this.getPos()); + int metadata = state.getBlock().getMetaFromState(state) % 3; + + float colorRed = 0.0F; + float colorGreen = 0.0F; + float colorBlue = 0.0F; + + switch (metadata) + { + case 0: + colorRed = 1.0F; + break; + case 1: + colorBlue = 1.0F; + break; + case 2: + colorRed = 1.0F; + colorGreen = 1.0F; + break; + } + + EntitySlimeling slimeling = new EntitySlimeling(this.world, colorRed, colorGreen, colorBlue); + + slimeling.setPosition(this.getPos().getX() + 0.5, this.getPos().getY() + 1.0, this.getPos().getZ() + 0.5); + slimeling.setOwnerId(UUID.fromString(this.lastTouchedPlayerUUID)); + slimeling.setOwnerUsername(this.lastTouchedPlayerName); + + if (!this.world.isRemote) + { + this.world.spawnEntity(slimeling); + } + + slimeling.setTamed(true); + slimeling.getNavigator().clearPath(); + slimeling.setAttackTarget((EntityLivingBase) null); + slimeling.setHealth(20.0F); + + this.world.setBlockToAir(this.getPos()); + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.timeToHatch = nbt.getInteger("TimeToHatch"); + + String uuid; + if (nbt.hasKey("OwnerUUID", 8)) + { + uuid = nbt.getString("OwnerUUID"); + } else + { + uuid = PreYggdrasilConverter.convertMobOwnerIfNeeded(this.world.getMinecraftServer(), nbt.getString("Owner")); + } + + if (uuid.length() > 0) + { + lastTouchedPlayerUUID = uuid; + } + + this.lastTouchedPlayerName = nbt.getString("OwnerUsername"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("TimeToHatch", this.timeToHatch); + nbt.setString("OwnerUUID", this.lastTouchedPlayerUUID); + nbt.setString("OwnerUsername", this.lastTouchedPlayerName); + return nbt; + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTerraformer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTerraformer.java new file mode 100644 index 00000000..57f668e7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTerraformer.java @@ -0,0 +1,732 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.entities.IBubbleProviderColored; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.core.util.FluidUtil; +import micdoodle8.mods.galacticraft.core.wrappers.FluidHandlerWrapper; +import micdoodle8.mods.galacticraft.core.wrappers.IFluidHandlerWrapper; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMars; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerTerraformer; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBush; +import net.minecraft.block.BlockSapling; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityTerraformer extends TileBaseElectricBlockWithInventory implements ISidedInventory, IDisableableMachine, IBubbleProviderColored, IFluidHandlerWrapper +{ + + private final int tankCapacity = 2000; + @NetworkedField(targetSide = Side.CLIENT) + public FluidTank waterTank = new FluidTank(this.tankCapacity); + public boolean active; + public boolean lastActive; + public static final int WATTS_PER_TICK = 1; + private ArrayList terraformableBlocksList = new ArrayList<>(); + private ArrayList grassBlockList = new ArrayList<>(); + private ArrayList grownTreesList = new ArrayList<>(); + @NetworkedField(targetSide = Side.CLIENT) + public int terraformableBlocksListSize = 0; + @NetworkedField(targetSide = Side.CLIENT) + public int grassBlocksListSize = 0; + @NetworkedField(targetSide = Side.CLIENT) + public boolean treesDisabled; + @NetworkedField(targetSide = Side.CLIENT) + public boolean grassDisabled; + public final double MAX_SIZE = 15.0D; + private int[] useCount = new int[2]; + private int saplingIndex = 6; + public float bubbleSize; + @NetworkedField(targetSide = Side.CLIENT) + public boolean shouldRenderBubble = true; + + public TileEntityTerraformer() + { + super("container.tile_terraformer.name"); + this.storage.setMaxExtract(ConfigManagerCore.hardMode ? 60 : 30); + this.inventory = NonNullList.withSize(14, ItemStack.EMPTY); + } + + public int getScaledWaterLevel(int i) + { + final double fuelLevel = this.waterTank.getFluid() == null ? 0 : this.waterTank.getFluid().amount; + + return (int) (fuelLevel * i / this.tankCapacity); + } + + @Override + public void invalidate() + { + super.invalidate(); + } + + public double getDistanceFromServer(double par1, double par3, double par5) + { + final double d3 = this.getPos().getX() + 0.5D - par1; + final double d4 = this.getPos().getY() + 0.5D - par3; + final double d5 = this.getPos().getZ() + 0.5D - par5; + return d3 * d3 + d4 * d4 + d5 * d5; + } + + @Override + public void update() + { + super.update(); + + if (!this.world.isRemote) + { + final FluidStack liquid = FluidUtil.getFluidContained(this.getInventory().get(0)); + if (FluidUtil.isFluidStrict(liquid, FluidRegistry.WATER.getName())) + { + FluidUtil.loadFromContainer(waterTank, FluidRegistry.WATER, this.getInventory(), 0, liquid.amount); + } + + this.active = this.bubbleSize == this.MAX_SIZE && this.hasEnoughEnergyToRun && !this.getFirstBonemealStack().isEmpty() && this.waterTank.getFluid() != null && this.waterTank.getFluid().amount > 0; + } + + if (!this.world.isRemote && (this.active != this.lastActive || this.ticks % 60 == 0)) + { + this.terraformableBlocksList.clear(); + this.grassBlockList.clear(); + + if (this.active) + { + int bubbleSize = (int) Math.ceil(this.bubbleSize); + double bubbleSizeSq = this.bubbleSize; + bubbleSizeSq *= bubbleSizeSq; + boolean doGrass = !this.grassDisabled && !this.getFirstSeedStack().isEmpty(); + boolean doTrees = !this.treesDisabled && !this.getFirstSaplingStack().isEmpty(); + for (int x = this.getPos().getX() - bubbleSize; x < this.getPos().getX() + bubbleSize; x++) + { + for (int y = this.getPos().getY() - bubbleSize; y < this.getPos().getY() + bubbleSize; y++) + { + for (int z = this.getPos().getZ() - bubbleSize; z < this.getPos().getZ() + bubbleSize; z++) + { + BlockPos pos = new BlockPos(x, y, z); + Block blockID = this.world.getBlockState(pos).getBlock(); + if (blockID == null) + { + continue; + } + + if (!(blockID.isAir(this.world.getBlockState(pos), this.world, pos)) && this.getDistanceFromServer(x, y, z) < bubbleSizeSq) + { + if (doGrass && blockID instanceof ITerraformableBlock && ((ITerraformableBlock) blockID).isTerraformable(this.world, pos)) + { + this.terraformableBlocksList.add(new BlockPos(x, y, z)); + } + else if (doTrees) + { + Block blockIDAbove = this.world.getBlockState(pos.up()).getBlock(); + if (blockID == Blocks.GRASS && blockIDAbove.isAir(this.world.getBlockState(pos.up()), this.world, pos.up())) + { + this.grassBlockList.add(new BlockPos(x, y, z)); + } + } + } + } + } + } + } + } + + if (!this.world.isRemote && this.terraformableBlocksList.size() > 0 && this.ticks % 15 == 0) + { + ArrayList terraformableBlocks2 = new ArrayList<>(this.terraformableBlocksList); + + int randomIndex = this.world.rand.nextInt(this.terraformableBlocksList.size()); + BlockPos vec = terraformableBlocks2.get(randomIndex); + + if (this.world.getBlockState(vec).getBlock() instanceof ITerraformableBlock) + { + Block id; + + switch (this.world.rand.nextInt(40)) + { + case 0: + if (this.world.isBlockFullCube(new BlockPos(vec.getX() - 1, vec.getY(), vec.getZ())) && this.world.isBlockFullCube(new BlockPos(vec.getX() + 1, vec.getY(), vec.getZ())) && this.world.isBlockFullCube(new BlockPos(vec.getX(), vec.getY(), vec.getZ() - 1)) + && this.world.isBlockFullCube(new BlockPos(vec.getX(), vec.getY(), vec.getZ() + 1))) + { + id = Blocks.FLOWING_WATER; + } + else + { + id = Blocks.GRASS; + } + break; + default: + id = Blocks.GRASS; + break; + } + + this.world.setBlockState(vec, id.getDefaultState()); + + if (id == Blocks.GRASS) + { + this.useCount[0]++; + this.waterTank.drain(1, true); + this.checkUsage(1); + } + else if (id == Blocks.FLOWING_WATER) + { + this.checkUsage(2); + } + } + + this.terraformableBlocksList.remove(randomIndex); + } + + if (!this.world.isRemote && !this.treesDisabled && this.grassBlockList.size() > 0 && this.ticks % 50 == 0) + { + int randomIndex = this.world.rand.nextInt(this.grassBlockList.size()); + BlockPos vecGrass = grassBlockList.get(randomIndex); + + if (this.world.getBlockState(vecGrass).getBlock() == Blocks.GRASS) + { + BlockPos vecSapling = vecGrass.add(0, 1, 0); + ItemStack sapling = this.getFirstSaplingStack(); + boolean flag = false; + + // Attempt to prevent placement too close to other trees + for (BlockPos testVec : this.grownTreesList) + { + if (testVec.distanceSq(vecSapling) < 9) + { + flag = true; + break; + } + } + + if (!flag && sapling != null) + { + Block b = Block.getBlockFromItem(sapling.getItem()); + this.world.setBlockState(vecSapling, b.getStateFromMeta(sapling.getItemDamage()), 3); + if (b instanceof BlockSapling) + { + if (this.world.getLightFromNeighbors(vecSapling) >= 9) + { + ((BlockSapling) b).grow(this.world, vecSapling, this.world.getBlockState(vecSapling), this.world.rand); + this.grownTreesList.add(new BlockPos(vecSapling.getX(), vecSapling.getY(), vecSapling.getZ())); + } + } + else if (b instanceof BlockBush) + { + if (this.world.getLightFromNeighbors(vecSapling) >= 5) + // Hammer the update tick a few times to try to get it + // to grow - it won't always + { + for (int j = 0; j < 12; j++) + { + if (this.world.getBlockState(vecSapling).getBlock() == b) + { + ((BlockBush) b).updateTick(this.world, vecSapling, this.world.getBlockState(vecSapling), this.world.rand); + } + else + { + this.grownTreesList.add(new BlockPos(vecSapling.getX(), vecSapling.getY(), vecSapling.getZ())); + break; + } + } + } + } + + this.useCount[1]++; + this.waterTank.drain(50, true); + this.checkUsage(0); + } + } + + this.grassBlockList.remove(randomIndex); + } + + if (!this.world.isRemote) + { + this.terraformableBlocksListSize = this.terraformableBlocksList.size(); + this.grassBlocksListSize = this.grassBlockList.size(); + } + + if (this.hasEnoughEnergyToRun && (!this.grassDisabled || !this.treesDisabled)) + { + this.bubbleSize = (float) Math.min(Math.max(0, this.bubbleSize + 0.1F), this.MAX_SIZE); + } + else + { + this.bubbleSize = (float) Math.min(Math.max(0, this.bubbleSize - 0.1F), this.MAX_SIZE); + } + + this.lastActive = this.active; + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + if (!this.world.isRemote) + { + networkedList.add(this.bubbleSize); + } + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + if (this.world.isRemote) + { + this.bubbleSize = dataStream.readFloat(); + } + } + + private void checkUsage(int type) + { + ItemStack stack = null; + + if ((this.useCount[0] + this.useCount[1]) % 4 == 0) + { + stack = this.getFirstBonemealStack(); + + if (!stack.isEmpty()) + { + stack.shrink(1); + } + } + + switch (type) + { + case 0: + stack = this.getInventory().get(this.saplingIndex); + + if (!stack.isEmpty()) + { + stack.shrink(1); + } + break; + case 1: + if (this.useCount[0] % 4 == 0) + { + stack = this.getFirstSeedStack(); + + if (!stack.isEmpty()) + { + stack.shrink(1); + } + } + break; + case 2: + this.waterTank.drain(50, true); + break; + } + } + + private int getSelectiveStack(int start, int end) + { + for (int i = start; i < end; i++) + { + ItemStack stack = this.getInventory().get(i); + + if (!stack.isEmpty()) + { + return i; + } + } + + return -1; + } + + private int getRandomStack(int start, int end) + { + int stackcount = 0; + for (int i = start; i < end; i++) + { + if (!this.getInventory().get(i).isEmpty()) + { + stackcount++; + } + } + + if (stackcount == 0) + { + return -1; + } + + int random = this.world.rand.nextInt(stackcount); + for (int i = start; i < end; i++) + { + if (!this.getInventory().get(i).isEmpty()) + { + if (random == 0) + { + return i; + } + random--; + } + } + + return -1; + } + + public ItemStack getFirstBonemealStack() + { + int index = this.getSelectiveStack(2, 6); + + if (index != -1) + { + return this.getInventory().get(index); + } + + return ItemStack.EMPTY; + } + + public ItemStack getFirstSaplingStack() + { + int index = this.getRandomStack(6, 10); + + if (index != -1) + { + this.saplingIndex = index; + return this.getInventory().get(index); + } + + return ItemStack.EMPTY; + } + + public ItemStack getFirstSeedStack() + { + int index = this.getSelectiveStack(10, 14); + + if (index != -1) + { + return this.getInventory().get(index); + } + + return ItemStack.EMPTY; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + this.bubbleSize = nbt.getFloat("BubbleSize"); + this.useCount = nbt.getIntArray("UseCountArray"); + + if (this.useCount.length == 0) + { + this.useCount = new int[2]; + } + + if (nbt.hasKey("waterTank")) + { + this.waterTank.readFromNBT(nbt.getCompoundTag("waterTank")); + } + + if (nbt.hasKey("bubbleVisible")) + { + this.setBubbleVisible(nbt.getBoolean("bubbleVisible")); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setFloat("BubbleSize", this.bubbleSize); + nbt.setIntArray("UseCountArray", this.useCount); + + if (this.waterTank.getFluid() != null) + { + nbt.setTag("waterTank", this.waterTank.writeToNBT(new NBTTagCompound())); + } + + nbt.setBoolean("bubbleVisible", this.shouldRenderBubble); + return nbt; + } + + // ISidedInventory Implementation: + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return this.isItemValidForSlot(slotID, itemstack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + if (slotID == 0) + { + return FluidUtil.isEmptyContainer(itemstack); + } + if (slotID == 1) + { + return ItemElectricBase.isElectricItemEmpty(itemstack); + } + + return false; + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + switch (slotID) + { + case 0: + FluidStack stack = net.minecraftforge.fluids.FluidUtil.getFluidContained(itemstack); + return stack != null && stack.getFluid() == FluidRegistry.WATER; + case 1: + return ItemElectricBase.isElectricItem(itemstack.getItem()); + case 2: + case 3: + case 4: + case 5: + return itemstack.getItem() == Items.DYE && itemstack.getItemDamage() == 15; + case 6: + case 7: + case 8: + case 9: + return ContainerTerraformer.isOnSaplingList(itemstack); + case 10: + case 11: + case 12: + case 13: + return itemstack.getItem() == Items.WHEAT_SEEDS; + } + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return !this.grassDisabled || !this.treesDisabled; + } + + @Override + public ItemStack getBatteryInSlot() + { + return this.getStackInSlot(1); + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown <= 0) + { + switch (index) + { + case 0: + this.treesDisabled = !this.treesDisabled; + break; + case 1: + this.grassDisabled = !this.grassDisabled; + break; + } + + this.disableCooldown = 10; + } + } + + @Override + public boolean getDisabled(int index) + { + switch (index) + { + case 0: + return this.treesDisabled; + case 1: + return this.grassDisabled; + } + + return false; + } + + @Override + public void setBubbleVisible(boolean shouldRender) + { + this.shouldRenderBubble = shouldRender; + } + + @Override + public double getPacketRange() + { + return 64.0F; + } + + // Pipe handling + @Override + public boolean canDrain(EnumFacing from, Fluid fluid) + { + return false; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) + { + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) + { + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid) + { + return (fluid == null || "water".equals(fluid.getName())) && from != this.getElectricInputDirection(); + } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill) + { + int used = 0; + + if (resource != null && this.canFill(from, resource.getFluid())) + { + used = this.waterTank.fill(resource, doFill); + } + + return used; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from) + { + return new FluidTankInfo[] + {new FluidTankInfo(this.waterTank)}; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return new AxisAlignedBB(this.getPos().getX() - this.bubbleSize, this.getPos().getY() - this.bubbleSize, this.getPos().getZ() - this.bubbleSize, this.getPos().getX() + this.bubbleSize, this.getPos().getY() + this.bubbleSize, this.getPos().getZ() + this.bubbleSize); + } + + @Override + public float getBubbleSize() + { + return this.bubbleSize; + } + + @Override + public boolean getBubbleVisible() + { + return this.shouldRenderBubble; + } + + @Override + public Vector3 getColor() + { + return new Vector3(0.125F, 0.5F, 0.125F); + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockMachineMars) + { + return state.getValue(BlockMachineMars.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + return byIndex().rotateY(); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(new FluidHandlerWrapper(this, facing)); + } + return super.getCapability(capability, facing); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null) + { + return false; + } + if (type == NetworkType.POWER) + { + return direction == this.getElectricInputDirection(); + } + if (type == NetworkType.FLUID) + { + return direction != this.getElectricInputDirection(); + } + return false; + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTreasureChestMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTreasureChestMars.java new file mode 100644 index 00000000..e7737df9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/tile/TileEntityTreasureChestMars.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.tile; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; + +public class TileEntityTreasureChestMars extends TileEntityTreasureChest +{ + + public TileEntityTreasureChestMars() + { + super(2); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/MarsUtil.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/MarsUtil.java new file mode 100644 index 00000000..591528c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/MarsUtil.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.util; + +import java.util.HashMap; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.inventory.ContainerParaChest; +import micdoodle8.mods.galacticraft.core.inventory.ContainerRocketInventory; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.recipe.NasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntitySlimeling; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerLaunchControllerAdvanced; +import micdoodle8.mods.galacticraft.planets.mars.inventory.ContainerSlimeling; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars; +import micdoodle8.mods.galacticraft.planets.mars.network.PacketSimpleMars.EnumSimplePacketMars; +import micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityLaunchController; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; + +public class MarsUtil +{ + + public static void addRocketBenchT2Recipe(ItemStack result, HashMap input) + { + GalacticraftRegistry.addT2RocketRecipe(new NasaWorkbenchRecipe(result, input)); + } + + public static void adCargoRocketRecipe(ItemStack result, HashMap input) + { + GalacticraftRegistry.addCargoRocketRecipe(new NasaWorkbenchRecipe(result, input)); + } + + public static void openParachestInventory(EntityPlayerMP player, EntityLandingBalloons landerInv) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimple(EnumSimplePacket.C_OPEN_PARACHEST_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] + {windowId, 1, landerInv.getEntityId()}), player); + player.openContainer = new ContainerParaChest(player.inventory, landerInv, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } + + public static void openSlimelingInventory(EntityPlayerMP player, EntitySlimeling slimeling) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimpleMars(EnumSimplePacketMars.C_OPEN_CUSTOM_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] + {windowId, 0, slimeling.getEntityId()}), player); + player.openContainer = new ContainerSlimeling(player.inventory, slimeling, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } + + public static void openCargoRocketInventory(EntityPlayerMP player, EntityCargoRocket rocket) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimpleMars(EnumSimplePacketMars.C_OPEN_CUSTOM_GUI, GCCoreUtil.getDimensionID(player.world), new Object[] + {windowId, 1, rocket.getEntityId()}), player); + player.openContainer = new ContainerRocketInventory(player.inventory, rocket, rocket.rocketType, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } + + public static void openAdvancedLaunchController(EntityPlayerMP player, TileEntityLaunchController launchController) + { + player.getNextWindowId(); + player.closeContainer(); + int windowId = player.currentWindowId; + GalacticraftCore.packetPipeline.sendTo(new PacketSimpleMars(EnumSimplePacketMars.C_OPEN_CUSTOM_GUI_TILE, GCCoreUtil.getDimensionID(player.world), new Object[] + {windowId, 0, launchController.getPos()}), player); + player.openContainer = new ContainerLaunchControllerAdvanced(player.inventory, launchController, player); + player.openContainer.windowId = windowId; + player.openContainer.addListener(player); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/RecipeUtilMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/RecipeUtilMars.java new file mode 100644 index 00000000..81231b3a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/util/RecipeUtilMars.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.util; + +import javax.annotation.Nonnull; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.recipe.INasaWorkbenchRecipe; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.InventorySchematicAstroMiner; +import micdoodle8.mods.galacticraft.planets.asteroids.inventory.InventorySchematicTier3Rocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.InventorySchematicCargoRocket; +import micdoodle8.mods.galacticraft.planets.mars.inventory.InventorySchematicTier2Rocket; +import net.minecraft.item.ItemStack; + +public class RecipeUtilMars +{ + + @Nonnull + public static ItemStack findMatchingSpaceshipT2Recipe(InventorySchematicTier2Rocket inventoryRocketBench) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT2Recipes()) + { + if (recipe.matches(inventoryRocketBench)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + @Nonnull + public static ItemStack findMatchingCargoRocketRecipe(InventorySchematicCargoRocket inventoryRocketBench) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getCargoRocketRecipes()) + { + if (recipe.matches(inventoryRocketBench)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + @Nonnull + public static ItemStack findMatchingSpaceshipT3Recipe(InventorySchematicTier3Rocket inventoryRocketBench) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getRocketT3Recipes()) + { + if (recipe.matches(inventoryRocketBench)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } + + @Nonnull + public static ItemStack findMatchingAstroMinerRecipe(InventorySchematicAstroMiner craftMatrix) + { + for (INasaWorkbenchRecipe recipe : GalacticraftRegistry.getAstroMinerRecipes()) + { + if (recipe.matches(craftMatrix)) + { + return recipe.getRecipeOutput(); + } + } + + return ItemStack.EMPTY; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeDecoratorMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeDecoratorMars.java new file mode 100644 index 00000000..b9d55561 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeDecoratorMars.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeDecoratorSpace; +import micdoodle8.mods.galacticraft.core.world.gen.WorldGenMinableMeta; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class BiomeDecoratorMars extends BiomeDecoratorSpace +{ + + private WorldGenerator dirtGen; + private WorldGenerator deshGen; + private WorldGenerator tinGen; + private WorldGenerator copperGen; + private WorldGenerator ironGen; + private WorldGenerator iceGen; + private World currentWorld; + + public BiomeDecoratorMars() + { + this.copperGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 4, 0, true, MarsBlocks.marsBlock, 9); + this.tinGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 4, 1, true, MarsBlocks.marsBlock, 9); + this.deshGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 6, 2, true, MarsBlocks.marsBlock, 9); + this.ironGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 8, 3, true, MarsBlocks.marsBlock, 9); + this.dirtGen = new WorldGenMinableMeta(MarsBlocks.marsBlock, 32, 6, true, MarsBlocks.marsBlock, 9); + this.iceGen = new WorldGenMinableMeta(Blocks.ICE, 18, 0, true, MarsBlocks.marsBlock, 6); + } + + @Override + protected void decorate() + { + this.generateOre(4, this.iceGen, 60, 120); + this.generateOre(20, this.dirtGen, 0, 200); + if (!ConfigManagerMars.disableDeshGen) + { + this.generateOre(15, this.deshGen, 20, 64); + } + if (!ConfigManagerMars.disableCopperGen) + { + this.generateOre(26, this.copperGen, 0, 60); + } + if (!ConfigManagerMars.disableTinGen) + { + this.generateOre(23, this.tinGen, 0, 60); + } + if (!ConfigManagerMars.disableIronGen) + { + this.generateOre(20, this.ironGen, 0, 64); + } + } + + @Override + protected void setCurrentWorld(World world) + { + this.currentWorld = world; + } + + @Override + protected World getCurrentWorld() + { + return this.currentWorld; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeGenFlatMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeGenFlatMars.java new file mode 100644 index 00000000..1db33e19 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeGenFlatMars.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeGenFlatMars extends BiomeMars +{ + + public BiomeGenFlatMars(BiomeData properties) + { + super(properties); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.COLD, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SANDY); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeMars.java new file mode 100644 index 00000000..dce63a70 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeMars.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.core.BlockMetaPair; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.ChunkPrimer; + +public class BiomeMars extends BiomeGenBaseGC +{ + + public static final Biome marsFlat = new BiomeGenFlatMars(BiomeData.builder().biomeName("Mars Flat").baseHeight(2.5F).heightVariation(0.4F).build()); + + public static final BlockMetaPair BLOCK_TOP = new BlockMetaPair(MarsBlocks.marsBlock, (byte) 5); + public static final BlockMetaPair BLOCK_FILL = new BlockMetaPair(MarsBlocks.marsBlock, (byte) 6); + public static final BlockMetaPair BLOCK_LOWER = new BlockMetaPair(MarsBlocks.marsBlock, (byte) 9); + + BiomeMars(BiomeData properties) + { + super(properties, true); + } + + @Override + public float getSpawningChance() + { + return 0.01F; + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal) + { + this.fillerBlock = BLOCK_LOWER.getBlockState(); + this.topBlock = BLOCK_TOP.getBlockState(); + super.genTerrainBlocks(worldIn, rand, chunkPrimerIn, x, z, noiseVal); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeProviderMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeProviderMars.java new file mode 100644 index 00000000..6f7300bc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/BiomeProviderMars.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeProviderSpace; +import net.minecraft.world.biome.Biome; + +public class BiomeProviderMars extends BiomeProviderSpace +{ + + @Override + public Biome getBiome() + { + return BiomeMars.marsFlat; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/ChunkProviderMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/ChunkProviderMars.java new file mode 100644 index 00000000..05b711a6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/ChunkProviderMars.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import com.google.common.collect.Lists; +import java.util.List; +import micdoodle8.mods.galacticraft.api.prefab.core.BlockMetaPair; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeDecoratorSpace; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.ChunkProviderSpace; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockBasicMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; + +public class ChunkProviderMars extends ChunkProviderSpace +{ + + private final BiomeDecoratorMars marsBiomeDecorator = new BiomeDecoratorMars(); + private final MapGenCavernMars caveGenerator = new MapGenCavernMars(); + private final MapGenCaveMars cavernGenerator = new MapGenCaveMars(); + + private final MapGenDungeon dungeonGenerator = + new MapGenDungeonMars(new DungeonConfiguration(MarsBlocks.marsBlock.getDefaultState().withProperty(BlockBasicMars.BASIC_TYPE, BlockBasicMars.EnumBlockBasic.DUNGEON_BRICK), 30, 8, 16, 7, 7, + RoomBossMars.class, RoomTreasureMars.class)); + + public ChunkProviderMars(World par1World, long seed, boolean mapFeaturesEnabled) + { + super(par1World, seed, mapFeaturesEnabled); + } + + @Override + protected BiomeDecoratorSpace getBiomeGenerator() + { + return this.marsBiomeDecorator; + } + + @Override + protected Biome[] getBiomesForGeneration() + { + return new Biome[] + {BiomeAdaptive.biomeDefault}; + } + + @Override + protected int getSeaLevel() + { + return 93; + } + + @Override + protected List getWorldGenerators() + { + List generators = Lists.newArrayList(); + generators.add(this.caveGenerator); + generators.add(this.cavernGenerator); + return generators; + } + + @Override + protected BlockMetaPair getGrassBlock() + { + return BiomeMars.BLOCK_TOP; + } + + @Override + protected BlockMetaPair getDirtBlock() + { + return BiomeMars.BLOCK_FILL; + } + + @Override + protected BlockMetaPair getStoneBlock() + { + return BiomeMars.BLOCK_LOWER; + } + + @Override + public double getHeightModifier() + { + return 12; + } + + @Override + public double getSmallFeatureHeightModifier() + { + return 26; + } + + @Override + public double getMountainHeightModifier() + { + return 95; + } + + @Override + public double getValleyHeightModifier() + { + return 50; + } + + @Override + public int getCraterProbability() + { + return 2000; + } + + @Override + public void onChunkProvide(int cX, int cZ, ChunkPrimer primer) + { + this.dungeonGenerator.generate(this.world, cX, cZ, primer); + } + + @Override + public void onPopulate(int cX, int cZ) + { + this.dungeonGenerator.generateStructure(this.world, this.rand, new ChunkPos(cX, cZ)); + } + + @Override + public void recreateStructures(Chunk chunk, int x, int z) + { + this.dungeonGenerator.generate(this.world, x, z, null); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCaveMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCaveMars.java new file mode 100644 index 00000000..a3384265 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCaveMars.java @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenCaveMars extends MapGenBaseMeta +{ + + public static final int BREAK_THROUGH_CHANCE = 25; // 1 in n chance + + protected void generateLargeCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10) + { + this.generateCaveNode(par1, par3, par4, primer, par6, par8, par10, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10, float par12, float par13, float par14, int par15, int par16, double par17) + { + final double d4 = par3 * 16 + 8; + final double d5 = par4 * 16 + 8; + float f3 = 0.0F; + float f4 = 0.0F; + final Random random = new Random(par1); + + if (par16 <= 0) + { + final int j1 = this.range * 16 - 16; + par16 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (par15 == -1) + { + par15 = par16 / 2; + flag = true; + } + + final int k1 = random.nextInt(par16 / 2) + par16 / 4; + + for (final boolean flag1 = random.nextInt(6) == 0; par15 < par16; ++par15) + { + final double d6 = 1.5D + MathHelper.sin(par15 * (float) Math.PI / par16) * par12 * 1.0F; + final double d7 = d6 * par17; + final float f5 = MathHelper.cos(par14); + final float f6 = MathHelper.sin(par14); + par6 += MathHelper.cos(par13) * f5; + par8 += f6; + par10 += MathHelper.sin(par13) * f5; + + if (flag1) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += f4 * 0.1F; + par13 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + + if (!flag && par15 == k1 && par12 > 1.0F && par16 > 0) + { + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 - Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 + Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) + { + final double d8 = par6 - d4; + final double d9 = par10 - d5; + final double d10 = par16 - par15; + final double d11 = par12 + 2.0F + 16.0F; + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) + { + return; + } + + if (par6 >= d4 - 16.0D - d6 * 2.0D && par10 >= d5 - 16.0D - d6 * 2.0D && par6 <= d4 + 16.0D + d6 * 2.0D && par10 <= d5 + 16.0D + d6 * 2.0D) + { + int l1 = MathHelper.floor(par6 - d6) - par3 * 16 - 1; + int i2 = MathHelper.floor(par6 + d6) - par3 * 16 + 1; + int j2 = MathHelper.floor(par8 - d7) - 1; + int k2 = MathHelper.floor(par8 + d7) + 1; + int l2 = MathHelper.floor(par10 - d6) - par4 * 16 - 1; + int i3 = MathHelper.floor(par10 + d6) - par4 * 16 + 1; + + if (l1 < 0) + { + l1 = 0; + } + + if (i2 > 16) + { + i2 = 16; + } + + if (j2 < 1) + { + j2 = 1; + } + + if (k2 > 120) + { + k2 = 120; + } + + if (l2 < 0) + { + l2 = 0; + } + + if (i3 > 16) + { + i3 = 16; + } + + final boolean flag2 = false; + int j3; + for (j3 = l1; j3 < i2; ++j3) + { + for (int l3 = l2; l3 < i3; ++l3) + { + for (int i4 = k2 + 1; i4 >= j2 - 1; --i4) + { + if (i4 >= 0 && i4 < 128) + { + if (i4 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && l3 != l2 && l3 != i3 - 1) + { + i4 = j2; + } + } + } + } + } + + if (true) + { + + for (int localY = j2; localY < k2; localY++) + { + final double yfactor = (localY + 0.5D - par8) / d7; + final double yfactorSq = yfactor * yfactor; + + for (int localX = l1; localX < i2; localX++) + { + final double zfactor = (localX + par3 * 16 + 0.5D - par6) / d6; + final double zfactorSq = zfactor * zfactor; + + for (int localZ = l2; localZ < i3; localZ++) + { + final double xfactor = (localZ + par4 * 16 + 0.5D - par10) / d6; + final double xfactorSq = xfactor * xfactor; + + if (xfactorSq + zfactorSq < 1.0D) + { + if (yfactor > -0.7D && xfactorSq + yfactorSq + zfactorSq < 1.0D) + { + IBlockState state = primer.getBlockState(localX, localY, localZ); + Block block = state.getBlock(); + int metadata = state.getBlock().getMetaFromState(state); + if (block == MarsBlocks.marsBlock) + { + if (metadata == 6 || metadata == 9) + { + primer.setBlockState(localX, localY, localZ, Blocks.AIR.getDefaultState()); +// blockIdArray[coords] = Blocks.AIR; + } else if (metadata == 5 && random.nextInt(MapGenCaveMars.BREAK_THROUGH_CHANCE) == 0) + { + primer.setBlockState(localX, localY, localZ, Blocks.AIR.getDefaultState()); +// blockIdArray[coords] = Blocks.AIR; + } + } + } + } + } + } + } + + if (flag) + { + break; + } + } + } + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int par2, int par3, int par4, int par5, ChunkPrimer primer) + { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + + if (this.rand.nextInt(15) != 0) + { + var7 = 0; + } + + for (int var8 = 0; var8 < var7; ++var8) + { + final double var9 = par2 * 16 + this.rand.nextInt(16); + final double var11 = this.rand.nextInt(this.rand.nextInt(120) + 8); + final double var13 = par3 * 16 + this.rand.nextInt(16); + int var15 = 1; + + if (this.rand.nextInt(4) == 0) + { + this.generateLargeCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for (int var16 = 0; var16 < var15; ++var16) + { + final float var17 = this.rand.nextFloat() * Constants.twoPI; + final float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + + if (this.rand.nextInt(10) == 0) + { + var19 *= this.rand.nextFloat() * this.rand.nextFloat() * 3.0F + 1.0F; + } + + this.generateCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCavernMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCavernMars.java new file mode 100644 index 00000000..b5e468e0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenCavernMars.java @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenCavernMars extends MapGenBaseMeta +{ + + @Override + public void generate(World world, int chunkX, int chunkZ, ChunkPrimer primer) + { + final int var6 = this.range; + this.world = world; + this.rand.setSeed(world.getSeed()); + final long var7 = this.rand.nextLong(); + final long var9 = this.rand.nextLong(); + + for (int var11 = chunkX - var6; var11 <= chunkX + var6; ++var11) + { + for (int var12 = chunkZ - var6; var12 <= chunkZ + var6; ++var12) + { + final long var13 = var11 * var7; + final long var15 = var12 * var9; + this.rand.setSeed(var13 ^ var15 ^ world.getSeed()); + this.recursiveGenerate(world, var11, var12, chunkX, chunkZ, primer); + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int xChunkCoord, int zChunkCoord, int origXChunkCoord, int origZChunkCoord, ChunkPrimer primer) + { + if (this.rand.nextInt(100) == 0) + { + final double xPos = xChunkCoord * 16 + this.rand.nextInt(16); + final double yPos = 25; + final double zPos = zChunkCoord * 16 + this.rand.nextInt(16); + this.generateLargeCaveNode(this.rand.nextLong(), origXChunkCoord, origZChunkCoord, primer, xPos, yPos, zPos); + } + } + + protected void generateLargeCaveNode(long par1, int origXChunkCoord, int origZChunkCoord, ChunkPrimer primer, double xPos, double yPos, double zPos) + { + this.generateCaveNode(par1, origXChunkCoord, origZChunkCoord, primer, xPos, yPos, zPos, 1.0F + this.rand.nextFloat() * 6.0F, 10.0F, 10.0F, -1, -1, 0.2D); + } + + protected void generateCaveNode(long par1, int origXChunkCoord, int origZChunkCoord, ChunkPrimer primer, double xPos, double yPos, double zPos, float par12, float par13, float par14, int par15, int par16, double heightMultiplier) + { + final double var19 = origXChunkCoord * 16 + 8; + final double var21 = origZChunkCoord * 16 + 8; + float var23 = 0.0F; + float var24 = 0.0F; + final Random var25 = new Random(par1); + + if (par16 <= 0) + { + final int var26 = this.range * 16 - 16; + par16 = var26 - var25.nextInt(var26 / 4); + } + + boolean var54 = false; + + if (par15 == -1) + { + par15 = par16 / 2; + var54 = true; + } + + final int var27 = var25.nextInt(par16 / 2) + par16 / 4; + + for (final boolean var28 = var25.nextInt(6) == 0; par15 < par16; ++par15) + { + final double caveWidth = 40; + final double caveHeight = caveWidth * heightMultiplier; + + if (var28) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += var24 * 0.1F; + par13 += var23 * 0.1F; + var24 *= 0.9F; + var23 *= 0.75F; + var24 += (var25.nextFloat() - var25.nextFloat()) * var25.nextFloat() * 2.0F; + var23 += (var25.nextFloat() - var25.nextFloat()) * var25.nextFloat() * 4.0F; + + if (!var54 && par15 == var27 && par12 > 1.0F && par16 > 0) + { + return; + } + + if (var54 || var25.nextInt(4) != 0) + { + final double var35 = xPos - var19; + final double var37 = zPos - var21; + final double var39 = par16 - par15; + final double var41 = par12 + 2.0F + 16.0F; + + if (var35 * var35 + var37 * var37 - var39 * var39 > var41 * var41) + { + return; + } + + if (xPos >= var19 - 16.0D - caveWidth * 2.0D && zPos >= var21 - 16.0D - caveWidth * 2.0D && xPos <= var19 + 16.0D + caveWidth * 2.0D && zPos <= var21 + 16.0D + caveWidth * 2.0D) // CHECKED + { + int caveMinX = MathHelper.floor(xPos - caveWidth) - origXChunkCoord * 16 - 1; + int caveMaxX = MathHelper.floor(xPos + caveWidth) - origXChunkCoord * 16 + 1; + int caveMinY = MathHelper.floor(yPos - caveHeight) - 1; + int caveMaxY = MathHelper.floor(yPos + caveHeight) + 1; + int caveMinZ = MathHelper.floor(zPos - caveWidth) - origZChunkCoord * 16 - 1; + int caveMaxZ = MathHelper.floor(zPos + caveWidth) - origZChunkCoord * 16 + 1; + + if (caveMinX < 0) + { + caveMinX = 0; + } + + if (caveMaxX > 16) + { + caveMaxX = 16; + } + + if (caveMinY < 1) + { + caveMinY = 1; + } + + if (caveMaxY > 65) + { + caveMaxY = 65; + } + + if (caveMinZ < 0) + { + caveMinZ = 0; + } + + if (caveMaxZ > 16) + { + caveMaxZ = 16; + } + + boolean isBlockWater = false; + int var42; + int var45; + + for (var42 = caveMinX; !isBlockWater && var42 < caveMaxX; ++var42) + { + for (int var43 = caveMinZ; !isBlockWater && var43 < caveMaxZ; ++var43) + { + for (int var44 = caveMaxY + 1; !isBlockWater && var44 >= caveMinY - 1; --var44) + { + var45 = (var42 * 16 + var43) * 128 + var44; + + if (var44 >= 0 && var44 < 128) + { + if (var44 != caveMinY - 1 && var42 != caveMinX && var42 != caveMaxX - 1 && var43 != caveMinZ && var43 != caveMaxZ - 1) + { + var44 = caveMinY; + } + } + } + } + } + + for (var42 = caveMinX; var42 < caveMaxX; ++var42) + { + final double var59 = (var42 + origXChunkCoord * 16 + 0.5D - xPos) / caveWidth; + + for (var45 = caveMinZ; var45 < caveMaxZ; ++var45) + { + final double var46 = (var45 + origZChunkCoord * 16 + 0.5D - zPos) / caveWidth; + + if (var59 * var59 + var46 * var46 < 1.0D) + { + for (int var50 = caveMaxY - 1; var50 >= caveMinY; --var50) + { + final double var51 = (var50 + 0.5D - yPos) / caveHeight; + + if (var59 * var59 + var51 * var51 + var46 * var46 < 1.0D) + { + if (var51 > -0.7D) + { + Block block = primer.getBlockState(var42, var50, var45).getBlock(); + + if (block == MarsBlocks.marsBlock || block == MarsBlocks.blockSludge || block == MarsBlocks.vine) + { + primer.setBlockState(var42, var50, var45, Blocks.AIR.getDefaultState()); + } + } + } + } + } + } + } + + for (var42 = caveMinX; var42 < caveMaxX; ++var42) + { + final double var59 = (var42 + origXChunkCoord * 16 + 0.5D - xPos) / caveWidth; + + for (var45 = caveMinZ; var45 < caveMaxZ; ++var45) + { + final double var46 = (var45 + origZChunkCoord * 16 + 0.5D - zPos) / caveWidth; + + if (var59 * var59 + var46 * var46 < 1.0D) + { + for (int var50 = caveMaxY - 1; var50 >= caveMinY; --var50) + { + final double var51 = (var50 + 0.5D - yPos) / caveHeight; + + if (var59 * var59 + var51 * var51 + var46 * var46 < 1.0D) + { + if (var51 > -0.7D) + { + Block block = primer.getBlockState(var42, var50, var45).getBlock(); + Block blockAbove = primer.getBlockState(var42, var50 + 1, var45).getBlock(); + Block blockBelow = primer.getBlockState(var42, var50 - 1, var45).getBlock(); + + if (Blocks.AIR == block) + { + if (blockAbove == MarsBlocks.marsBlock && this.rand.nextInt(200) == 0) + { + int modifier = 0; + + while (Blocks.AIR == block && var50 + modifier > 0) + { + primer.setBlockState(var42, var50 + modifier, var45, MarsBlocks.vine.getStateFromMeta(Math.abs(modifier) % 3)); +// arrayOfIDs[coordsBelow] = MarsBlocks.vine; +// arrayOfMeta[coordsBelow] = (byte) (Math.abs(modifier) % 3); + modifier--; + block = primer.getBlockState(var42, var50 + modifier, var45).getBlock(); + } + } else if (blockBelow == MarsBlocks.marsBlock && this.rand.nextInt(200) == 0) + { + primer.setBlockState(var42, var50, var45, MarsBlocks.blockSludge.getStateFromMeta(0)); +// arrayOfIDs[coords] = MarsBlocks.blockSludge; +// arrayOfMeta[coords] = 0; + } + } + } + } + } + } + } + } + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenDungeonMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenDungeonMars.java new file mode 100644 index 00000000..538a5a69 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/MapGenDungeonMars.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import net.minecraft.world.gen.structure.MapGenStructureIO; + +public class MapGenDungeonMars extends MapGenDungeon +{ + + private static boolean initialized; + + static + { + try + { + MapGenDungeonMars.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public MapGenDungeonMars(DungeonConfiguration configuration) + { + super(configuration); + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenDungeonMars.initialized) + { + MapGenStructureIO.registerStructureComponent(RoomBossMars.class, "MarsDungeonBossRoom"); + MapGenStructureIO.registerStructureComponent(RoomTreasureMars.class, "MarsDungeonTreasureRoom"); + } + + MapGenDungeonMars.initialized = true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomBossMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomBossMars.java new file mode 100644 index 00000000..4c6ae0dd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomBossMars.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomBoss; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomBossMars extends RoomBoss +{ + + public RoomBossMars() + { + } + + public RoomBossMars(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + public RoomBossMars(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, 24, 11, 24, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } else if (j == this.sizeY) + { + if ((i <= 2 || k <= 2 || i >= this.sizeX - 2 || k >= this.sizeZ - 2) && random.nextInt(4) == 0) + { + this.setBlockState(worldIn, Blocks.GLOWSTONE.getDefaultState(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } + } else if (j == 1 && (i <= 2 || k <= 2 || i >= this.sizeX - 2 || k >= this.sizeZ - 2) && random.nextInt(6) == 0) + { + this.setBlockState(worldIn, MarsBlocks.creeperEgg.getDefaultState(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + + int spawnerX = this.sizeX / 2; + int spawnerY = 1; + int spawnerZ = this.sizeZ / 2; + BlockPos blockpos = new BlockPos(this.getXWithOffset(spawnerX, spawnerZ), this.getYWithOffset(spawnerY), this.getZWithOffset(spawnerX, spawnerZ)); + // Is this position inside the chunk currently being generated? + if (chunkBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, MarsBlocks.bossSpawner.getDefaultState(), 2); + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) worldIn.getTileEntity(blockpos); + if (spawner != null) + { + spawner.setRoom(new Vector3(this.boundingBox.minX + 1, this.boundingBox.minY + 1, this.boundingBox.minZ + 1), new Vector3(this.sizeX - 1, this.sizeY - 1, this.sizeZ - 1)); + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomTreasureMars.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomTreasureMars.java new file mode 100644 index 00000000..c902fc58 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/RoomTreasureMars.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.RoomTreasure; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockTier2TreasureChest; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.storage.loot.LootTableList; + +public class RoomTreasureMars extends RoomTreasure +{ + + public static ResourceLocation MARSCHEST = new ResourceLocation(Constants.ASSET_PREFIX, "dungeon_tier_2"); + public static final ResourceLocation TABLE_TIER_2_DUNGEON = LootTableList.register(MARSCHEST); + + public RoomTreasureMars() + { + } + + public RoomTreasureMars(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, rand.nextInt(4) + 6, configuration.getRoomHeight(), rand.nextInt(4) + 6, entranceDir); + } + + public RoomTreasureMars(DungeonConfiguration configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } else if ((i == 1 && k == 1) || (i == 1 && k == this.sizeZ - 1) || (i == this.sizeX - 1 && k == 1) || (i == this.sizeX - 1 && k == this.sizeZ - 1)) + { + this.setBlockState(worldIn, Blocks.GLOWSTONE.getDefaultState(), i, j, k, boundingBox); + } else if (i == this.sizeX / 2 && j == 1 && k == this.sizeZ / 2) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i, k), this.getYWithOffset(j), this.getZWithOffset(i, k)); + if (boundingBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, MarsBlocks.treasureChestTier2.getDefaultState().withProperty(BlockTier2TreasureChest.FACING, this.getDirection().getOpposite()), 2); + TileEntityTreasureChest treasureChest = (TileEntityTreasureChest) worldIn.getTileEntity(blockpos); + if (treasureChest != null) + { + ResourceLocation chesttype = TABLE_TIER_2_DUNGEON; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + treasureChest.setLootTable(chesttype, random.nextLong()); + } + } + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenEggs.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenEggs.java new file mode 100644 index 00000000..3e3347bb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenEggs.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.mars.blocks.BlockBasicMars; +import micdoodle8.mods.galacticraft.planets.mars.blocks.MarsBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenEggs extends WorldGenerator +{ + + private Block eggBlock; + + public WorldGenEggs(Block egg) + { + this.eggBlock = egg; + } + + @Override + public boolean generate(World par1World, Random par2Random, BlockPos pos) + { + int i1 = pos.getX() + par2Random.nextInt(8) - par2Random.nextInt(8); + int j1 = pos.getY() + par2Random.nextInt(4) - par2Random.nextInt(4); + int k1 = pos.getZ() + par2Random.nextInt(8) - par2Random.nextInt(8); + BlockPos newPos = new BlockPos(i1, j1, k1); + + if (!par1World.isBlockLoaded(newPos.add(1, 0, 1))) + return false; + + if (par1World.isAirBlock(newPos) && (j1 < 127 || !par1World.provider.isNether())) + { + IBlockState below = par1World.getBlockState(newPos.down()); + if (below.getBlock() == MarsBlocks.marsBlock && below.getValue(BlockBasicMars.BASIC_TYPE) == BlockBasicMars.EnumBlockBasic.SURFACE) + { + par1World.setBlockState(newPos, this.eggBlock.getStateFromMeta(par2Random.nextInt(3)), 2); + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenTerraformTree.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenTerraformTree.java new file mode 100644 index 00000000..2c0459a6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/mars/world/gen/WorldGenTerraformTree.java @@ -0,0 +1,280 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.mars.world.gen; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCocoa; +import net.minecraft.block.BlockVine; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenTerraformTree extends WorldGenerator +{ + + private final int minTreeHeight; + private final boolean vinesGrow; + private final int metaWood; + private final int metaLeaves; + + public WorldGenTerraformTree(boolean par1, ItemStack sapling) + { + this(par1, 4, 0, 0, false); + } + + public WorldGenTerraformTree(boolean par1, int par2, int par3, int par4, boolean vines) + { + super(par1); + this.minTreeHeight = par2; + this.metaWood = par3; + this.metaLeaves = par4; + this.vinesGrow = vines; + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + int i = rand.nextInt(3) + this.minTreeHeight; + boolean flag = true; + + if (position.getY() >= 1 && position.getY() + i + 1 <= 256) + { + byte b0; + int l; + + for (int j = position.getY(); j <= position.getY() + 1 + i; ++j) + { + b0 = 1; + + if (j == position.getY()) + { + b0 = 0; + } + + if (j >= position.getY() + 1 + i - 2) + { + b0 = 2; + } + + for (int k = position.getX() - b0; k <= position.getX() + b0 && flag; ++k) + { + for (l = position.getZ() - b0; l <= position.getZ() + b0 && flag; ++l) + { + if (j >= 0 && j < 256) + { + if (!this.isReplaceable(worldIn, new BlockPos(k, j, l))) + { + flag = false; + } + } else + { + flag = false; + } + } + } + } + + if (!flag) + { + return false; + } else + { + BlockPos down = position.down(); + Block block1 = worldIn.getBlockState(down).getBlock(); + boolean isSoil = block1.canSustainPlant(worldIn.getBlockState(down), worldIn, down, net.minecraft.util.EnumFacing.UP, (net.minecraft.block.BlockSapling) Blocks.SAPLING); + + if (isSoil && position.getY() < 256 - i - 1) + { + block1.onPlantGrow(worldIn.getBlockState(down), worldIn, down, position); + b0 = 3; + byte b1 = 0; + int i1; + int j1; + int k1; + int l1; + BlockPos blockpos1; + + for (l = position.getY() - b0 + i; l <= position.getY() + i; ++l) + { + i1 = l - (position.getY() + i); + j1 = b1 + 1 - i1 / 2; + + for (k1 = position.getX() - j1; k1 <= position.getX() + j1; ++k1) + { + l1 = k1 - position.getX(); + + for (int i2 = position.getZ() - j1; i2 <= position.getZ() + j1; ++i2) + { + int j2 = i2 - position.getZ(); + + if (Math.abs(l1) != j1 || Math.abs(j2) != j1 || rand.nextInt(2) != 0 && i1 != 0) + { + blockpos1 = new BlockPos(k1, l, i2); + IBlockState state = worldIn.getBlockState(blockpos1); + Block block = state.getBlock(); + + if (block.isAir(state, worldIn, blockpos1) || block.isLeaves(state, worldIn, blockpos1) || block.getMaterial(state) == Material.VINE) + { + this.setBlockAndNotifyAdequately(worldIn, blockpos1, Blocks.LEAVES.getStateFromMeta(this.metaLeaves)); + } + } + } + } + } + + for (l = 0; l < i; ++l) + { + BlockPos upN = position.up(l); + IBlockState state2 = worldIn.getBlockState(upN); + Block block2 = state2.getBlock(); + + if (block2.isAir(state2, worldIn, upN) || block2.isLeaves(state2, worldIn, upN) || block2.getMaterial(state2) == Material.VINE) + { + this.setBlockAndNotifyAdequately(worldIn, position.up(l), Blocks.LOG.getStateFromMeta(this.metaWood)); + + if (this.vinesGrow && l > 0) + { + if (rand.nextInt(3) > 0 && worldIn.isAirBlock(position.add(-1, l, 0))) + { + this.func_181647_a(worldIn, position.add(-1, l, 0), BlockVine.EAST); + } + + if (rand.nextInt(3) > 0 && worldIn.isAirBlock(position.add(1, l, 0))) + { + this.func_181647_a(worldIn, position.add(1, l, 0), BlockVine.WEST); + } + + if (rand.nextInt(3) > 0 && worldIn.isAirBlock(position.add(0, l, -1))) + { + this.func_181647_a(worldIn, position.add(0, l, -1), BlockVine.SOUTH); + } + + if (rand.nextInt(3) > 0 && worldIn.isAirBlock(position.add(0, l, 1))) + { + this.func_181647_a(worldIn, position.add(0, l, 1), BlockVine.NORTH); + } + } + } + } + + if (this.vinesGrow) + { + for (l = position.getY() - 3 + i; l <= position.getY() + i; ++l) + { + i1 = l - (position.getY() + i); + j1 = 2 - i1 / 2; + + for (k1 = position.getX() - j1; k1 <= position.getX() + j1; ++k1) + { + for (l1 = position.getZ() - j1; l1 <= position.getZ() + j1; ++l1) + { + BlockPos blockpos3 = new BlockPos(k1, l, l1); + + IBlockState state3 = worldIn.getBlockState(blockpos3); + if (state3.getBlock().isLeaves(state3, worldIn, blockpos3)) + { + BlockPos blockpos4 = blockpos3.west(); + blockpos1 = blockpos3.east(); + BlockPos blockpos5 = blockpos3.north(); + BlockPos blockpos2 = blockpos3.south(); + + IBlockState state4 = worldIn.getBlockState(blockpos4); + if (rand.nextInt(4) == 0 && state4.getBlock().isAir(state4, worldIn, blockpos4)) + { + this.func_181647_a(worldIn, blockpos4, BlockVine.EAST); + } + + IBlockState state1 = worldIn.getBlockState(blockpos1); + if (rand.nextInt(4) == 0 && state1.getBlock().isAir(state1, worldIn, blockpos1)) + { + this.func_181647_a(worldIn, blockpos1, BlockVine.WEST); + } + + IBlockState state5 = worldIn.getBlockState(blockpos5); + if (rand.nextInt(4) == 0 && state5.getBlock().isAir(state5, worldIn, blockpos5)) + { + this.func_181647_a(worldIn, blockpos5, BlockVine.SOUTH); + } + + IBlockState state2 = worldIn.getBlockState(blockpos2); + if (rand.nextInt(4) == 0 && state2.getBlock().isAir(state2, worldIn, blockpos2)) + { + this.func_181647_a(worldIn, blockpos2, BlockVine.NORTH); + } + } + } + } + } + + if (rand.nextInt(5) == 0 && i > 5) + { + for (l = 0; l < 2; ++l) + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (rand.nextInt(4 - l) == 0) + { + j1 = rand.nextInt(3); + this.func_181652_a(worldIn, rand.nextInt(3), position.add(enumfacing.getXOffset(), i - 5 + l, enumfacing.getZOffset()), enumfacing); + } + } + } + } + } + + return true; + } else + { + return false; + } + } + } else + { + return false; + } + } + + private void func_181647_a(World world, BlockPos pos, PropertyBool facing) + { + IBlockState iblockstate = Blocks.VINE.getDefaultState().withProperty(facing, Boolean.valueOf(true)); + this.setBlockAndNotifyAdequately(world, pos, iblockstate); + int i = 4; + + for (pos = pos.down(); world.getBlockState(pos).getBlock().isAir(world.getBlockState(pos), world, pos) && i > 0; --i) + { + this.setBlockAndNotifyAdequately(world, pos, iblockstate); + pos = pos.down(); + } + } + + private void func_181652_a(World p_181652_1_, int p_181652_2_, BlockPos p_181652_3_, EnumFacing p_181652_4_) + { + this.setBlockAndNotifyAdequately(p_181652_1_, p_181652_3_, + Blocks.COCOA.getDefaultState().withProperty(BlockCocoa.AGE, Integer.valueOf(p_181652_2_)).withProperty(BlockCocoa.FACING, p_181652_4_)); + } + + protected boolean func_150523_a(IBlockState state) + { + Block block = state.getBlock(); + return block.getMaterial(state) == Material.AIR || block.getMaterial(state) == Material.LEAVES || block == Blocks.GRASS || block == Blocks.DIRT || block == Blocks.LOG || block == Blocks.LOG2 + || block == Blocks.SAPLING || block == Blocks.VINE; + } + + public boolean isReplaceable(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + return state.getBlock().isAir(state, world, pos) || state.getBlock().isLeaves(state, world, pos) || state.getBlock().isWood(world, pos) || func_150523_a(state); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/ConfigManagerVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/ConfigManagerVenus.java new file mode 100644 index 00000000..2fc3e578 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/ConfigManagerVenus.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import java.io.File; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.ConfigManagerMars; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +public class ConfigManagerVenus +{ + + public static boolean loaded; + + static Configuration config; + + public ConfigManagerVenus(File file) + { + if (!ConfigManagerVenus.loaded) + { + if (file.exists()) + { + ConfigManagerVenus.config = new Configuration(file); + ConfigManagerVenus.syncConfig(true, true); + file.delete(); + config = ConfigManagerMars.config; + } else + { + config = ConfigManagerMars.config; + ConfigManagerVenus.syncConfig(true, false); + } + } + } + + // DIMENSIONS + public static int dimensionIDVenus; + + public static boolean disableAmbientLightning; + + public static boolean disableAluminumGen; + public static boolean disableCopperGen; + public static boolean disableGalenaGen; + public static boolean disableQuartzGen; + public static boolean disableSiliconGen; + public static boolean disableTinGen; + public static boolean disableSolarGen; + + public static void syncConfig(boolean load, boolean update) + { + try + { + Property prop; + Property propCopy; + + if (!config.isChild) + { + if (update) + { + config.load(); + } + } + + prop = config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, "dimensionIDVenus", -31); + prop.setComment("Dimension ID for Venus"); + prop.setLanguageKey("gc.configgui.dimension_id_venus").setRequiresMcRestart(true); + if (update) + { + propCopy = ConfigManagerMars.config.get(Constants.CONFIG_CATEGORY_DIMENSIONS, prop.getName(), prop.getInt(), prop.getComment()); + propCopy.setLanguageKey(prop.getLanguageKey()); + propCopy.setRequiresMcRestart(prop.requiresMcRestart()); + } + dimensionIDVenus = prop.getInt(); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_DIMENSIONS); + + boolean oldLightning = false; + if (config.hasKey(Constants.CONFIG_CATEGORY_SCHEMATIC, "disableAmbientLightning")) + { + oldLightning = config.get(Constants.CONFIG_CATEGORY_SCHEMATIC, "disableAmbientLightning", false).getBoolean(false); + } + prop = config.get(Constants.CONFIG_CATEGORY_GENERAL, "disableAmbientLightning", oldLightning); + prop.setComment("Disables background thunder and lightning."); + prop.setLanguageKey("gc.configgui.disable_ambient_lightning"); + disableAmbientLightning = prop.getBoolean(oldLightning); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_GENERAL); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Aluminum Ore Gen on Venus", false); + prop.setComment("Disable Aluminum Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_aluminum_gen"); + disableAluminumGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Copper Ore Gen on Venus", false); + prop.setComment("Disable Copper Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_copper_gen"); + disableCopperGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Galena Ore Gen on Venus", false); + prop.setComment("Disable Galena Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_galena_gen"); + disableGalenaGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Quartz Ore Gen on Venus", false); + prop.setComment("Disable Quartz Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_quartz_gen"); + disableQuartzGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Silicon Ore Gen on Venus", false); + prop.setComment("Disable Silicon Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_silicon_gen"); + disableSiliconGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Tin Ore Gen on Venus", false); + prop.setComment("Disable Tin Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_tin_gen"); + disableTinGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + prop = config.get(Constants.CONFIG_CATEGORY_WORLDGEN, "Disable Solar Ore Gen on Venus", false); + prop.setComment("Disable Solar Ore Gen on Venus."); + prop.setLanguageKey("gc.configgui.disable_venus_solar_gen"); + disableSolarGen = prop.getBoolean(false); + GalacticraftPlanets.finishProp(prop, Constants.CONFIG_CATEGORY_WORLDGEN); + + } catch (final Exception e) + { + GalacticraftPlanets.logger.error(e, "Galacticraft Venus (Planets) has a problem loading its config"); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusBlocks.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusBlocks.java new file mode 100644 index 00000000..f9c1521a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusBlocks.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBlockGC; +import micdoodle8.mods.galacticraft.planets.asteroids.items.ItemBlockLaser; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBossSpawnerVenus; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockGeothermalGenerator; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockScorchedRock; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSolarArrayModule; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSpout; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTier3TreasureChest; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTorchWeb; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemBlockBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemBlockTorchWeb; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraftforge.oredict.OreDictionary; + +public class VenusBlocks +{ + + public static Block venusBlock; + public static Block spout; + public static Block bossSpawner; + public static Block treasureChestTier3; + public static Block torchWeb; + public static Block sulphuricAcid; + public static Block geothermalGenerator; + public static Block crashedProbe; + public static Block scorchedRock; + public static Block solarArrayModule; + public static Block solarArrayController; + public static Block laserTurret; + + public static void initBlocks() + { + VenusBlocks.venusBlock = new BlockBasicVenus("venus"); + VenusBlocks.spout = new BlockSpout("spout"); + VenusBlocks.bossSpawner = new BlockBossSpawnerVenus("boss_spawner_venus"); + VenusBlocks.treasureChestTier3 = new BlockTier3TreasureChest("treasure_t3"); + VenusBlocks.torchWeb = new BlockTorchWeb("web_torch"); + VenusBlocks.geothermalGenerator = new BlockGeothermalGenerator("geothermal_generator"); + VenusBlocks.crashedProbe = new BlockCrashedProbe("crashed_probe"); + VenusBlocks.scorchedRock = new BlockScorchedRock("venus_rock_scorched"); + VenusBlocks.solarArrayModule = new BlockSolarArrayModule("solar_array_module"); + VenusBlocks.solarArrayController = new BlockSolarArrayController("solar_array_controller"); + VenusBlocks.laserTurret = new BlockLaserTurret("laser_turret"); + + GCBlocks.hiddenBlocks.add(VenusBlocks.bossSpawner); + + VenusBlocks.registerBlocks(); + VenusBlocks.setHarvestLevels(); + } + + private static void setHarvestLevel(Block block, String toolClass, int level, int meta) + { + block.setHarvestLevel(toolClass, level, block.getStateFromMeta(meta)); + } + + private static void setHarvestLevel(Block block, String toolClass, int level) + { + block.setHarvestLevel(toolClass, level); + } + + public static void setHarvestLevels() + { + setHarvestLevel(VenusBlocks.venusBlock, "pickaxe", 1, 0); + setHarvestLevel(VenusBlocks.venusBlock, "pickaxe", 1, 1); + setHarvestLevel(VenusBlocks.venusBlock, "pickaxe", 1, 2); + setHarvestLevel(VenusBlocks.venusBlock, "pickaxe", 1, 3); + setHarvestLevel(VenusBlocks.spout, "pickaxe", 1); + } + + public static void registerBlock(Block block, Class itemClass) + { + GCBlocks.register(Constants.MOD_ID_PLANETS, block, itemClass); + } + + public static void registerBlocks() + { + registerBlock(VenusBlocks.venusBlock, ItemBlockBasicVenus.class); + registerBlock(VenusBlocks.spout, ItemBlockGC.class); + registerBlock(VenusBlocks.bossSpawner, ItemBlockGC.class); + registerBlock(VenusBlocks.treasureChestTier3, ItemBlockDesc.class); + registerBlock(VenusBlocks.torchWeb, ItemBlockTorchWeb.class); + registerBlock(VenusBlocks.geothermalGenerator, ItemBlockDesc.class); + registerBlock(VenusBlocks.crashedProbe, ItemBlockDesc.class); + registerBlock(VenusBlocks.scorchedRock, ItemBlockGC.class); + registerBlock(VenusBlocks.solarArrayModule, ItemBlockDesc.class); + registerBlock(VenusBlocks.solarArrayController, ItemBlockDesc.class); + registerBlock(VenusBlocks.laserTurret, ItemBlockLaser.class); + } + + public static void oreDictRegistration() + { + OreDictionary.registerOre("oreCopper", BlockBasicVenus.EnumBlockBasicVenus.ORE_COPPER.getItemStack()); + OreDictionary.registerOre("oreTin", BlockBasicVenus.EnumBlockBasicVenus.ORE_TIN.getItemStack()); + OreDictionary.registerOre("oreAluminum", BlockBasicVenus.EnumBlockBasicVenus.ORE_ALUMINUM.getItemStack()); + OreDictionary.registerOre("oreAluminium", BlockBasicVenus.EnumBlockBasicVenus.ORE_ALUMINUM.getItemStack()); + OreDictionary.registerOre("oreNaturalAluminum", BlockBasicVenus.EnumBlockBasicVenus.ORE_ALUMINUM.getItemStack()); + OreDictionary.registerOre("oreQuartz", BlockBasicVenus.EnumBlockBasicVenus.ORE_QUARTZ.getItemStack()); + OreDictionary.registerOre("oreLead", BlockBasicVenus.EnumBlockBasicVenus.ORE_GALENA.getItemStack()); + OreDictionary.registerOre("oreSilicon", BlockBasicVenus.EnumBlockBasicVenus.ORE_SILICON.getItemStack()); + OreDictionary.registerOre("oreSolar", BlockBasicVenus.EnumBlockBasicVenus.ORE_SOLAR_DUST.getItemStack()); + + OreDictionary.registerOre("blockLead", BlockBasicVenus.EnumBlockBasicVenus.LEAD_BLOCK.getItemStack()); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusItems.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusItems.java new file mode 100644 index 00000000..525cb044 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusItems.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemBatteryAtomic; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemKeyVenus; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemThermalPaddingTier2; +import micdoodle8.mods.galacticraft.planets.venus.items.ItemVolcanicPickaxe; +import net.minecraft.item.Item; +import net.minecraftforge.common.util.EnumHelper; + +public class VenusItems +{ + + public static Item thermalPaddingTier2; + public static Item basicItem; + public static Item volcanicPickaxe; + public static Item key; + public static Item bucketSulphuricAcid; + public static Item atomicBattery; + + public static Item.ToolMaterial TOOL_VOLCANIC = EnumHelper.addToolMaterial("volcanic", 3, 1561, 32.0F, 1.5F, 10); + + public static void initItems() + { + VenusItems.thermalPaddingTier2 = new ItemThermalPaddingTier2("thermal_padding_t2"); + VenusItems.basicItem = new ItemBasicVenus("basic_item_venus"); + VenusItems.volcanicPickaxe = new ItemVolcanicPickaxe("volcanic_pickaxe"); + VenusItems.key = new ItemKeyVenus("key_t3"); + VenusItems.atomicBattery = new ItemBatteryAtomic("atomic_battery"); + + VenusItems.registerItems(); + } + + private static void registerItems() + { + VenusItems.registerItem(VenusItems.thermalPaddingTier2); + VenusItems.registerItem(VenusItems.basicItem); + VenusItems.registerItem(VenusItems.volcanicPickaxe); + VenusItems.registerItem(VenusItems.key); + VenusItems.registerItem(VenusItems.atomicBattery); + } + + public static void registerItem(Item item) + { + String name = item.getTranslationKey().substring(5); + GCCoreUtil.registerGalacticraftItem(name, item); + GalacticraftCore.itemListTrue.add(item); + item.setRegistryName(name); + GalacticraftPlanets.proxy.postRegisterItem(item); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModule.java new file mode 100644 index 00000000..de1ce760 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModule.java @@ -0,0 +1,283 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.item.EnumExtendedInventorySlot; +import micdoodle8.mods.galacticraft.api.world.AtmosphereInfo; +import micdoodle8.mods.galacticraft.api.world.EnumAtmosphericGas; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedCreeper; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedEnderman; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.items.ItemBucketGC; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.core.util.WorldUtil; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModule; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSulphuricAcid; +import micdoodle8.mods.galacticraft.planets.venus.dimension.TeleportTypeVenus; +import micdoodle8.mods.galacticraft.planets.venus.dimension.WorldProviderVenus; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityEntryPodVenus; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntitySpiderQueen; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityWebShot; +import micdoodle8.mods.galacticraft.planets.venus.event.EventHandlerVenus; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerGeothermal; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.network.PacketSimpleVenus; +import micdoodle8.mods.galacticraft.planets.venus.recipe.RecipeManagerVenus; +import micdoodle8.mods.galacticraft.planets.venus.tick.VenusTickHandlerServer; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityDungeonSpawnerVenus; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayModule; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySpout; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityTreasureChestVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.BiomeVenus; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialLiquid; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome.SpawnListEntry; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.registry.EntityRegistry; +import net.minecraftforge.fml.relauncher.Side; + +public class VenusModule implements IPlanetsModule +{ + + public static Planet planetVenus; + public static Fluid sulphuricAcid; + public static Fluid sulphuricAcidGC; + public static Material acidMaterial = new MaterialLiquid(MapColor.EMERALD); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + VenusModule.planetVenus = (Planet) new Planet("venus").setParentSolarSystem(GalacticraftCore.solarSystemSol).setRingColorRGB(0.1F, 0.9F, 0.6F).setPhaseShift(2.0F) + .setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(0.75F, 0.75F)).setRelativeOrbitTime(0.61527929901423877327491785323111F); + MinecraftForge.EVENT_BUS.register(new EventHandlerVenus()); + + if (!FluidRegistry.isFluidRegistered("sulphuricacid")) + { + ResourceLocation stillIcon = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/sulphuric_acid_still"); + ResourceLocation flowingIcon = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/fluids/sulphuric_acid_flow"); + sulphuricAcidGC = new Fluid("sulphuricacid", stillIcon, flowingIcon).setDensity(6229).setViscosity(1400); + FluidRegistry.registerFluid(sulphuricAcidGC); + } else + { + GalacticraftPlanets.logger.info("Galacticraft sulphuric acid is not default, issues may occur."); + } + + sulphuricAcid = FluidRegistry.getFluid("sulphuricacid"); + + if (sulphuricAcid.getBlock() == null) + { + VenusBlocks.sulphuricAcid = new BlockSulphuricAcid("sulphuric_acid"); + ((BlockSulphuricAcid) VenusBlocks.sulphuricAcid).setQuantaPerBlock(5); + VenusBlocks.registerBlock(VenusBlocks.sulphuricAcid, ItemBlockDesc.class); + sulphuricAcid.setBlock(VenusBlocks.sulphuricAcid); + } else + { + VenusBlocks.sulphuricAcid = sulphuricAcid.getBlock(); + } + + if (VenusBlocks.sulphuricAcid != null) + { + FluidRegistry.addBucketForFluid(sulphuricAcid); + VenusItems.bucketSulphuricAcid = new ItemBucketGC(VenusBlocks.sulphuricAcid, VenusModule.sulphuricAcid).setTranslationKey("bucket_sulphuric_acid"); + VenusItems.registerItem(VenusItems.bucketSulphuricAcid); + EventHandlerGC.bucketList.put(VenusBlocks.sulphuricAcid, VenusItems.bucketSulphuricAcid); + } + + VenusBlocks.initBlocks(); + VenusItems.initItems(); + + VenusModule.planetVenus.setBiomeInfo(BiomeVenus.venusFlat, BiomeVenus.venusMountain, BiomeVenus.venusValley); + } + + @Override + public void init(FMLInitializationEvent event) + { + VenusBlocks.oreDictRegistration(); + this.registerMicroBlocks(); + + GalacticraftCore.packetPipeline.addDiscriminator(8, PacketSimpleVenus.class); + + this.registerTileEntities(); + this.registerCreatures(); + this.registerOtherEntities(); + + VenusModule.planetVenus.setBodyIcon(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/venus.png")); + VenusModule.planetVenus.setDimensionInfo(ConfigManagerVenus.dimensionIDVenus, WorldProviderVenus.class).setTierRequired(3); + VenusModule.planetVenus.setAtmosphere(new AtmosphereInfo(false, true, true, 5.0F, 0.3F, 54.0F)); + VenusModule.planetVenus.atmosphereComponent(EnumAtmosphericGas.CO2).atmosphereComponent(EnumAtmosphericGas.NITROGEN); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedZombie.class, 8, 2, 3)); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedSpider.class, 8, 2, 3)); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedSkeleton.class, 8, 2, 3)); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedCreeper.class, 8, 2, 3)); + VenusModule.planetVenus.addMobInfo(new SpawnListEntry(EntityEvolvedEnderman.class, 10, 1, 4)); + VenusModule.planetVenus.addChecklistKeys("equip_oxygen_suit", "equip_shield_controller", "thermal_padding_t2"); + + GalaxyRegistry.register(VenusModule.planetVenus); + GalacticraftRegistry.registerTeleportType(WorldProviderVenus.class, new TeleportTypeVenus()); + GalacticraftRegistry.registerRocketGui(WorldProviderVenus.class, new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/venus_rocket_gui.png")); + GalacticraftRegistry.addDungeonLoot(3, new ItemStack(VenusItems.volcanicPickaxe, 1, 0)); + GalacticraftRegistry.addDungeonLoot(3, new ItemStack(VenusItems.basicItem, 1, 0)); + + GalacticraftRegistry.registerGear(Constants.GEAR_ID_SHIELD_CONTROLLER, EnumExtendedInventorySlot.SHIELD_CONTROLLER, new ItemStack(VenusItems.basicItem, 1, 0)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T2_HELMET, EnumExtendedInventorySlot.THERMAL_HELMET, new ItemStack(VenusItems.thermalPaddingTier2, 1, 0)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T2_CHESTPLATE, EnumExtendedInventorySlot.THERMAL_CHESTPLATE, new ItemStack(VenusItems.thermalPaddingTier2, 1, 1)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T2_LEGGINGS, EnumExtendedInventorySlot.THERMAL_LEGGINGS, new ItemStack(VenusItems.thermalPaddingTier2, 1, 2)); + GalacticraftRegistry.registerGear(Constants.GEAR_ID_THERMAL_PADDING_T2_BOOTS, EnumExtendedInventorySlot.THERMAL_BOOTS, new ItemStack(VenusItems.thermalPaddingTier2, 1, 3)); + + GalacticraftCore.proxy.registerFluidTexture(VenusModule.sulphuricAcid, new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/misc/underacid.png")); + + MinecraftForge.EVENT_BUS.register(new VenusTickHandlerServer()); + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + RecipeManagerVenus.loadCompatibilityRecipes(); + + GCPlanetDimensions.VENUS = WorldUtil.getDimensionTypeById(ConfigManagerVenus.dimensionIDVenus); + } + + @Override + public void serverStarting(FMLServerStartingEvent event) + { + } + + @Override + public void serverInit(FMLServerStartedEvent event) + { + + } + + private void registerMicroBlocks() + { + } + + public void registerTileEntities() + { + register(TileEntitySpout.class, "gc_venus_spout"); + register(TileEntityDungeonSpawnerVenus.class, "gc_venus_dungeon_spawner"); + register(TileEntityTreasureChestVenus.class, "gc_tier_3_treasure_chest"); + register(TileEntityGeothermalGenerator.class, "gc_geothermal_generator"); + register(TileEntityCrashedProbe.class, "gc_crashed_probe"); + register(TileEntitySolarArrayModule.class, "gc_solar_array_module"); + register(TileEntitySolarArrayController.class, "gc_solar_array_controller"); + register(TileEntityLaserTurret.class, "gc_laser_turret"); + } + + public void registerCreatures() + { + this.registerGalacticraftCreature(EntityJuicer.class, "juicer", ColorUtil.to32BitColor(180, 180, 50, 0), ColorUtil.to32BitColor(255, 0, 2, 0)); + this.registerGalacticraftCreature(EntitySpiderQueen.class, "spider_queen", ColorUtil.to32BitColor(180, 180, 50, 0), ColorUtil.to32BitColor(255, 0, 2, 0)); + } + + public void registerOtherEntities() + { + VenusModule.registerGalacticraftNonMobEntity(EntityEntryPodVenus.class, "entry_pod_venus", 150, 1, true); + VenusModule.registerGalacticraftNonMobEntity(EntityWebShot.class, "web_shot", 150, 1, true); + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_VENUS); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + BlockPos pos = new BlockPos(x, y, z); + TileEntity tile = world.getTileEntity(pos); + + if (ID == GuiIdsPlanets.MACHINE_VENUS) + { + if (tile instanceof TileEntityGeothermalGenerator) + { + return new ContainerGeothermal(player.inventory, (TileEntityGeothermalGenerator) tile); + } else if (tile instanceof TileEntityCrashedProbe) + { + return new ContainerCrashedProbe(player.inventory, (TileEntityCrashedProbe) tile); + } else if (tile instanceof TileEntitySolarArrayController) + { + return new ContainerSolarArrayController(player.inventory, (TileEntitySolarArrayController) tile); + } else if (tile instanceof TileEntityLaserTurret) + { + return new ContainerLaserTurret(player.inventory, (TileEntityLaserTurret) tile); + } + } + + return null; + } + + @Override + public Configuration getConfiguration() + { + return ConfigManagerVenus.config; + } + + @Override + public void syncConfig() + { + ConfigManagerVenus.syncConfig(false, false); + } + + public void registerGalacticraftCreature(Class clazz, String name, int back, int fore) + { + VenusModule.registerGalacticraftNonMobEntity(clazz, name, 80, 3, true); + int nextEggID = GCCoreUtil.getNextValidID(); + if (nextEggID < 65536) + { + ResourceLocation resourcelocation = new ResourceLocation(Constants.MOD_ID_PLANETS, name); + EntityList.ENTITY_EGGS.put(resourcelocation, new EntityList.EntityEggInfo(resourcelocation, back, fore)); + } + } + + public static void registerGalacticraftNonMobEntity(Class var0, String var1, int trackingDistance, int updateFreq, boolean sendVel) + { + ResourceLocation registryName = new ResourceLocation(Constants.MOD_ID_PLANETS, var1); + EntityRegistry.registerModEntity(registryName, var0, var1, GCCoreUtil.nextInternalID(), GalacticraftPlanets.instance, trackingDistance, updateFreq, sendVel); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModuleClient.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModuleClient.java new file mode 100644 index 00000000..ae088071 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/VenusModuleClient.java @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus; + +import java.util.List; +import micdoodle8.mods.galacticraft.api.client.IItemMeshDefinitionCustom; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.IPlanetsModuleClient; +import micdoodle8.mods.galacticraft.planets.venus.client.TickHandlerClientVenus; +import micdoodle8.mods.galacticraft.planets.venus.client.fx.ParticleAcidExhaust; +import micdoodle8.mods.galacticraft.planets.venus.client.fx.ParticleAcidVapor; +import micdoodle8.mods.galacticraft.planets.venus.client.gui.GuiCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.client.gui.GuiGeothermal; +import micdoodle8.mods.galacticraft.planets.venus.client.gui.GuiLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.client.gui.GuiSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.client.render.entity.RenderEntryPodVenus; +import micdoodle8.mods.galacticraft.planets.venus.client.render.entity.RenderJuicer; +import micdoodle8.mods.galacticraft.planets.venus.client.render.entity.RenderSpiderQueen; +import micdoodle8.mods.galacticraft.planets.venus.client.render.entity.RenderWebShot; +import micdoodle8.mods.galacticraft.planets.venus.client.render.tile.TileEntityLaserTurretRenderer; +import micdoodle8.mods.galacticraft.planets.venus.client.render.tile.TileEntityTreasureChestRenderer; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityEntryPodVenus; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntitySpiderQueen; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityWebShot; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityTreasureChestVenus; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.client.registry.RenderingRegistry; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class VenusModuleClient implements IPlanetsModuleClient +{ + + private static ModelResourceLocation sulphuricAcidLocation = new ModelResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "sulphuric_acid", "fluid"); + + @Override + public void preInit(FMLPreInitializationEvent event) + { + MinecraftForge.EVENT_BUS.register(this); + RenderingRegistry.registerEntityRenderingHandler(EntityJuicer.class, (RenderManager manager) -> new RenderJuicer(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityEntryPodVenus.class, (RenderManager manager) -> new RenderEntryPodVenus(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntitySpiderQueen.class, (RenderManager manager) -> new RenderSpiderQueen(manager)); + RenderingRegistry.registerEntityRenderingHandler(EntityWebShot.class, (RenderManager manager) -> new RenderWebShot(manager)); + } + + private void addPlanetVariants(String name, String... variants) + { + Item itemBlockVariants = Item.REGISTRY.getObject(new ResourceLocation(Constants.MOD_ID_PLANETS, name)); + ResourceLocation[] variants0 = new ResourceLocation[variants.length]; + for (int i = 0; i < variants.length; ++i) + { + variants0[i] = new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + variants[i]); + } + ModelBakery.registerItemVariants(itemBlockVariants, variants0); + } + + @Override + public void registerVariants() + { + addPlanetVariants("venus", "venus_rock_0", "venus_rock_1", "venus_rock_2", "venus_rock_3", "dungeon_brick_venus_1", "dungeon_brick_venus_2", "venus_ore_aluminum", "venus_ore_copper", + "venus_ore_galena", "venus_ore_quartz", "venus_ore_silicon", "venus_ore_tin", "lead_block", "venus_ore_solar"); + addPlanetVariants("thermal_padding_t2", "thermal_helm_t2", "thermal_chestplate_t2", "thermal_leggings_t2", "thermal_boots_t2"); + addPlanetVariants("basic_item_venus", "shield_controller", "ingot_lead", "radioisotope_core", "thermal_fabric", "solar_dust", "solar_module_2", "thin_solar_wafer"); + addPlanetVariants("web_torch", "web_torch_0", "web_torch_1"); + + Item sludge = Item.getItemFromBlock(VenusBlocks.sulphuricAcid); + ModelBakery.registerItemVariants(sludge, new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "sulphuric_acid")); + ModelLoader.setCustomMeshDefinition(sludge, IItemMeshDefinitionCustom.create((ItemStack stack) -> sulphuricAcidLocation)); + ModelLoader.setCustomStateMapper(VenusBlocks.sulphuricAcid, new StateMapperBase() + { + + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return sulphuricAcidLocation; + } + }); + } + + @Override + public void init(FMLInitializationEvent event) + { + MinecraftForge.EVENT_BUS.register(new TickHandlerClientVenus()); + VenusModuleClient.registerBlockRenderers(); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void loadTextures(TextureStitchEvent.Pre event) + { + registerTexture(event, "pod_flame"); + registerTexture(event, "web"); + registerTexture(event, "laser"); + registerTexture(event, "laser_off"); + registerTexture(event, "orb"); + } + + private void registerTexture(TextureStitchEvent.Pre event, String texture) + { + event.getMap().registerSprite(new ResourceLocation(GalacticraftPlanets.TEXTURE_PREFIX + "blocks/" + texture)); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onModelBakeEvent(ModelBakeEvent event) + { + } + + @Override + public void postInit(FMLPostInitializationEvent event) + { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTreasureChestVenus.class, new TileEntityTreasureChestRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaserTurret.class, new TileEntityLaserTurretRenderer()); + } + + public static void registerBlockRenderers() + { + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 0, "venus_rock_0"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 1, "venus_rock_1"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 2, "venus_rock_2"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 3, "venus_rock_3"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 4, "dungeon_brick_venus_1"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 5, "dungeon_brick_venus_2"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 6, "venus_ore_aluminum"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 7, "venus_ore_copper"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 8, "venus_ore_galena"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 9, "venus_ore_quartz"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 10, "venus_ore_silicon"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 11, "venus_ore_tin"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 12, "lead_block"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.venusBlock, 13, "venus_ore_solar"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.spout, 0, "spout"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.treasureChestTier3, 0, "treasure_t3"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.torchWeb, 0, "web_torch_0"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.torchWeb, 1, "web_torch_1"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.geothermalGenerator, 0, "geothermal_generator"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.crashedProbe); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.scorchedRock); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.bossSpawner); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.solarArrayModule); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.solarArrayController, 0, "solar_array_controller"); + ClientUtil.registerBlockJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusBlocks.laserTurret); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.thermalPaddingTier2, 0, "thermal_helm_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.thermalPaddingTier2, 1, "thermal_chestplate_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.thermalPaddingTier2, 2, "thermal_leggings_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.thermalPaddingTier2, 3, "thermal_boots_t2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 0, "shield_controller"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 1, "ingot_lead"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 2, "radioisotope_core"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 3, "thermal_fabric"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 4, "solar_dust"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 5, "solar_module_2"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.basicItem, 6, "thin_solar_wafer"); + ClientUtil.registerItemJson(GalacticraftPlanets.TEXTURE_PREFIX, VenusItems.key, 0, "key_t3"); + } + + @Override + public Object getGuiElement(Side side, int ID, EntityPlayer player, World world, int x, int y, int z) + { + if (side == Side.CLIENT) + { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + + if (ID == GuiIdsPlanets.MACHINE_VENUS) + { + if (tile instanceof TileEntityGeothermalGenerator) + { + return new GuiGeothermal(player.inventory, (TileEntityGeothermalGenerator) tile); + } else if (tile instanceof TileEntityCrashedProbe) + { + return new GuiCrashedProbe(player.inventory, (TileEntityCrashedProbe) tile); + } else if (tile instanceof TileEntitySolarArrayController) + { + return new GuiSolarArrayController(player.inventory, (TileEntitySolarArrayController) tile); + } else if (tile instanceof TileEntityLaserTurret) + { + return new GuiLaserTurret(player.inventory, (TileEntityLaserTurret) tile); + } + } + } + + return null; + } + + @Override + public void spawnParticle(String particleID, Vector3 position, Vector3 motion, Object... extraData) + { + Minecraft mc = FMLClientHandler.instance().getClient(); + + if (mc != null && mc.getRenderViewEntity() != null && mc.effectRenderer != null) + { + double dX = mc.getRenderViewEntity().posX - position.x; + double dY = mc.getRenderViewEntity().posY - position.y; + double dZ = mc.getRenderViewEntity().posZ - position.z; + Particle particle = null; + double viewDistance = 64.0D; + + if (particleID.equals("acidVapor")) + { + particle = new ParticleAcidVapor(mc.world, position.x, position.y, position.z, motion.x, motion.y, motion.z, 2.5F); + } + + if (dX * dX + dY * dY + dZ * dZ < viewDistance * viewDistance) + { + if (particleID.equals("acidExhaust")) + { + particle = new ParticleAcidExhaust(mc.world, position.x, position.y, position.z, motion.x, motion.y, motion.z, 0.5F); + } + } + + if (particle != null) + { + mc.effectRenderer.addEffect(particle); + } + } + } + + @Override + public void getGuiIDs(List idList) + { + idList.add(GuiIdsPlanets.MACHINE_VENUS); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBasicVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBasicVenus.java new file mode 100644 index 00000000..ff6f3f23 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBasicVenus.java @@ -0,0 +1,401 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import com.google.common.base.Predicate; +import micdoodle8.mods.galacticraft.api.block.IDetectableResource; +import micdoodle8.mods.galacticraft.api.block.IPlantableBlock; +import micdoodle8.mods.galacticraft.api.block.ITerraformableBlock; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockBasicVenus extends Block implements IDetectableResource, IPlantableBlock, ITerraformableBlock, ISortableBlock +{ + + public static final PropertyEnum BASIC_TYPE_VENUS = PropertyEnum.create("basictypevenus", EnumBlockBasicVenus.class); + + public enum EnumBlockBasicVenus implements IStringSerializable + { + + ROCK_SOFT(0, "venus_rock_0"), + ROCK_HARD(1, "venus_rock_1"), + ROCK_MAGMA(2, "venus_rock_2"), + ROCK_VOLCANIC_DEPOSIT(3, "venus_rock_3"), + DUNGEON_BRICK_1(4, "dungeon_brick_venus_1"), + DUNGEON_BRICK_2(5, "dungeon_brick_venus_2"), + ORE_ALUMINUM(6, "venus_ore_aluminum"), + ORE_COPPER(7, "venus_ore_copper"), + ORE_GALENA(8, "venus_ore_galena"), + ORE_QUARTZ(9, "venus_ore_quartz"), + ORE_SILICON(10, "venus_ore_silicon"), + ORE_TIN(11, "venus_ore_tin"), + LEAD_BLOCK(12, "lead_block"), + ORE_SOLAR_DUST(13, "venus_ore_solar"); + + private final int meta; + private final String name; + + EnumBlockBasicVenus(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumBlockBasicVenus[] values = values(); + + public static EnumBlockBasicVenus byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + + public ItemStack getItemStack() + { + return new ItemStack(VenusBlocks.venusBlock, 1, this.meta); + } + } + + public BlockBasicVenus(String assetName) + { + super(Material.ROCK); + this.blockHardness = 2.2F; + this.blockResistance = 2.5F; + this.setDefaultState(this.blockState.getBaseState().withProperty(BASIC_TYPE_VENUS, EnumBlockBasicVenus.ROCK_SOFT)); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te, ItemStack tool) + { + player.addStat(StatList.getBlockStats(this)); + player.addExhaustion(0.025F); + + if (this.canSilkHarvest(worldIn, pos, state, player) && EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) + { + ArrayList items = new ArrayList(); + items.add(this.getSilkTouchDrop(state)); + + net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player); + + for (ItemStack is : items) + { + spawnAsEntity(worldIn, pos, is); + } + } else + { + int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, tool); + harvesters.set(player); + this.dropBlockAsItem(worldIn, pos, state, i); + harvesters.set(null); + if ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS) == EnumBlockBasicVenus.ROCK_MAGMA) + { + worldIn.setBlockState(pos, Blocks.FLOWING_LAVA.getDefaultState()); + } + } + } + + @Override + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) + { + EnumBlockBasicVenus type = world.getBlockState(pos).getValue(BASIC_TYPE_VENUS); + + if (type == EnumBlockBasicVenus.ROCK_HARD) + { + return 6.0F; + } else if (type == EnumBlockBasicVenus.DUNGEON_BRICK_1 || type == EnumBlockBasicVenus.DUNGEON_BRICK_2) + { + return 40.0F; + } else if (type == EnumBlockBasicVenus.ORE_ALUMINUM || type == EnumBlockBasicVenus.ORE_COPPER || type == EnumBlockBasicVenus.ORE_GALENA || type == EnumBlockBasicVenus.ORE_QUARTZ + || type == EnumBlockBasicVenus.ORE_SILICON || type == EnumBlockBasicVenus.ORE_TIN || type == EnumBlockBasicVenus.ORE_SOLAR_DUST) + { + return 3.0F; + } + + return this.blockResistance / 5.0F; + } + + @Override + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + EnumBlockBasicVenus type = blockState.getValue(BASIC_TYPE_VENUS); + + if (type == EnumBlockBasicVenus.ROCK_HARD) + { + return 1.5F; + } + + if (type == EnumBlockBasicVenus.ROCK_SOFT) + { + return 0.9F; + } + + if (type == EnumBlockBasicVenus.DUNGEON_BRICK_1 || type == EnumBlockBasicVenus.DUNGEON_BRICK_2) + { + return 4.0F; + } + + if (type == EnumBlockBasicVenus.ORE_ALUMINUM || type == EnumBlockBasicVenus.ORE_COPPER || type == EnumBlockBasicVenus.ORE_GALENA || type == EnumBlockBasicVenus.ORE_QUARTZ + || type == EnumBlockBasicVenus.ORE_SILICON || type == EnumBlockBasicVenus.ORE_TIN || type == EnumBlockBasicVenus.ORE_SOLAR_DUST) + { + return 5.0F; + } + + return this.blockHardness; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_SILICON: + return GCItems.basicItem; + case ORE_QUARTZ: + return Items.QUARTZ; + case ORE_SOLAR_DUST: + return VenusItems.basicItem; + default: + return Item.getItemFromBlock(this); + } + } + + @Override + public int damageDropped(IBlockState state) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_SILICON: + return 2; + case ORE_QUARTZ: + return 0; + case ORE_SOLAR_DUST: + return 4; + default: + return getMetaFromState(state); + } + } + + @Override + public int quantityDropped(IBlockState state, int fortune, Random random) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_SILICON: + if (fortune > 0) + { + int j = random.nextInt(fortune + 2) - 1; + + if (j < 0) + { + j = 0; + } + + return this.quantityDropped(random) * (j + 1); + } + default: + return this.quantityDropped(random); + } + } + + @Override + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + Random rand = world instanceof World ? ((World) world).rand : new Random(); + if (this.getItemDropped(state, rand, fortune) != Item.getItemFromBlock(this)) + { + int i; + + switch (type) + { + case ORE_QUARTZ: + case ORE_SILICON: + i = MathHelper.getInt(rand, 2, 5); + break; + default: + i = 0; + break; + } + + return i; + } + return 0; + } + + @Override + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state)); + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + for (EnumBlockBasicVenus type : EnumBlockBasicVenus.values()) + { + list.add(new ItemStack(this, 1, type.getMeta())); + } + } + + @Override + public boolean isValueable(IBlockState state) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_ALUMINUM: + case ORE_COPPER: + case ORE_GALENA: + case ORE_QUARTZ: + case ORE_SILICON: + case ORE_TIN: + case ORE_SOLAR_DUST: + return true; + default: + return false; + } + } + + @Override + public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) + { + return false; + } + + @Override + public int requiredLiquidBlocksNearby() + { + return 4; + } + + @Override + public boolean isPlantable(IBlockState state) + { + return false; + } + + @Override + public boolean isTerraformable(World world, BlockPos pos) + { + EnumBlockBasicVenus type = world.getBlockState(pos).getValue(BASIC_TYPE_VENUS); + + if (type == EnumBlockBasicVenus.ROCK_HARD || type == EnumBlockBasicVenus.ROCK_SOFT) + { + BlockPos above = pos.offset(EnumFacing.UP); + IBlockState stateAbove = world.getBlockState(above); + return stateAbove.getBlock().isAir(stateAbove, world, above); + } + + return false; + } + + @Override + public boolean isReplaceableOreGen(IBlockState state, IBlockAccess world, BlockPos pos, Predicate target) + { + EnumBlockBasicVenus type = state.getValue(BASIC_TYPE_VENUS); + return type == EnumBlockBasicVenus.ROCK_HARD; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BASIC_TYPE_VENUS, EnumBlockBasicVenus.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumBlockBasicVenus) state.getValue(BASIC_TYPE_VENUS)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, BASIC_TYPE_VENUS); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + EnumBlockBasicVenus type = ((EnumBlockBasicVenus) getStateFromMeta(meta).getValue(BASIC_TYPE_VENUS)); + switch (type) + { + case ORE_ALUMINUM: + case ORE_COPPER: + case ORE_GALENA: + case ORE_QUARTZ: + case ORE_SILICON: + case ORE_TIN: + case ORE_SOLAR_DUST: + return EnumSortCategoryBlock.ORE; + case DUNGEON_BRICK_1: + case DUNGEON_BRICK_2: + return EnumSortCategoryBlock.BRICKS; + case LEAD_BLOCK: + return EnumSortCategoryBlock.INGOT_BLOCK; + default: + return EnumSortCategoryBlock.GENERAL; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBossSpawnerVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBossSpawnerVenus.java new file mode 100644 index 00000000..0022b3c9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockBossSpawnerVenus.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.core.blocks.BlockBossSpawner; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityDungeonSpawnerVenus; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockBossSpawnerVenus extends BlockBossSpawner +{ + + public BlockBossSpawnerVenus(String assetName) + { + super(assetName); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityDungeonSpawnerVenus(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockCrashedProbe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockCrashedProbe.java new file mode 100644 index 00000000..34776806 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockCrashedProbe.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCrashedProbe extends BlockTileGC implements ISortableBlock, ITileEntityProvider +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockCrashedProbe(String assetName) + { + super(Material.IRON); + this.blockHardness = 4.5F; + this.blockResistance = 2.5F; + this.setSoundType(SoundType.METAL); + this.setTickRandomly(true); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityCrashedProbe(); + } + + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 0.65, pos.getY() + 1.0, pos.getZ() + 0.9, 0.0, 0.0, 0.0); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 0.2, pos.getY() + 1.0, pos.getZ() + 0.2, 0.0, 0.0, 0.0); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 1.0, pos.getY() + 0.25, pos.getZ() + 0.5, 0.0, 0.0, 0.0); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, worldIn, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + final TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityCrashedProbe && ((TileEntityCrashedProbe) tile).getDropCore()) + { + spawnItem(worldIn, pos); + } + + super.breakBlock(worldIn, pos, state); + } + + // Drops a Radioisotope Core as well as the Crashed Probe block + private void spawnItem(World worldIn, BlockPos pos) + { + final float f = 0.7F; + Random syncRandom = GCCoreUtil.getRandom(pos); + final double d0 = syncRandom.nextFloat() * f + (1.0F - f) * 0.5D; + final double d1 = syncRandom.nextFloat() * f + (1.0F - f) * 0.2D + 0.6D; + final double d2 = syncRandom.nextFloat() * f + (1.0F - f) * 0.5D; + final EntityItem entityitem = new EntityItem(worldIn, pos.getX() + d0, pos.getY() + d1, pos.getZ() + d2, new ItemStack(VenusItems.basicItem, 1, 2)); + entityitem.setDefaultPickupDelay(); + worldIn.spawnEntity(entityitem); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockGeothermalGenerator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockGeothermalGenerator.java new file mode 100644 index 00000000..475fa456 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockGeothermalGenerator.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockGeothermalGenerator extends BlockTileGC implements ITileEntityProvider, IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyBool ACTIVE = PropertyBool.create("active"); + + public BlockGeothermalGenerator(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + int change = world.getBlockState(pos).getValue(FACING).rotateY().getHorizontalIndex(); + world.setBlockState(pos, this.getStateFromMeta(change), 3); + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityGeothermalGenerator(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING, ACTIVE); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (!(tile instanceof TileEntityGeothermalGenerator)) + { + return state; + } + TileEntityGeothermalGenerator generator = (TileEntityGeothermalGenerator) tile; + return state.withProperty(ACTIVE, generator.hasValidSpout() && !generator.getDisabled(0)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockLaserTurret.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockLaserTurret.java new file mode 100644 index 00000000..c91f0ad9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockLaserTurret.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class BlockLaserTurret extends BlockTileGC implements ITileEntityProvider, IShiftDescription, IPartialSealableBlock, ISortableBlock +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + public BlockLaserTurret(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + playerIn.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile).setOwnerUUID(placer.getUniqueID()); + ((TileEntityLaserTurret) tile).addPlayer(placer.getName()); + } + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + BlockMulti.onPlacement(worldIn, pos, placer, this); + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile).onDestroy(tile); + } + + super.breakBlock(worldIn, pos, state); + } + + @Override + public boolean onUseWrench(World world, BlockPos pos, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + int change = world.getBlockState(pos).getValue(FACING).rotateY().getHorizontalIndex(); + world.setBlockState(pos, this.getStateFromMeta(change), 3); + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileEntityLaserTurret(); + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockScorchedRock.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockScorchedRock.java new file mode 100644 index 00000000..6331137f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockScorchedRock.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockScorchedRock extends Block implements ISortableBlock +{ + + public BlockScorchedRock(String assetName) + { + super(Material.ROCK); + this.blockHardness = 0.9F; + this.blockResistance = 2.5F; + this.setTickRandomly(true); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + rand.nextDouble(), pos.getY() + 1.0, pos.getZ() + rand.nextDouble(), 0.0, 0.0, 0.0); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayController.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayController.java new file mode 100644 index 00000000..a4762648 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayController.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockTileGC; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockSolarArrayController extends BlockTileGC implements IShiftDescription, IPartialSealableBlock, ISortableBlock, ITileEntityProvider +{ + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0, 0.25, 0.0, 1.0, 0.78125, 1.0); + + public BlockSolarArrayController(String assetName) + { + super(Material.IRON); + this.setHardness(1.0F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + int angle = MathHelper.floor(placer.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int change = EnumFacing.byHorizontalIndex(angle).getOpposite().getHorizontalIndex(); + worldIn.setBlockState(pos, getStateFromMeta(change), 3); + } + + @Override + public boolean onMachineActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) + { + entityPlayer.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileEntitySolarArrayController(); + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return true; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.byHorizontalIndex(meta % 4); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return state.getValue(FACING).getHorizontalIndex(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, FACING); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayModule.java new file mode 100644 index 00000000..b35bbf8a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSolarArrayModule.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.api.block.IPartialSealableBlock; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.BlockAdvanced; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayModule; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSolarArrayModule extends BlockAdvanced implements IShiftDescription, IPartialSealableBlock, ISortableBlock, ITileEntityProvider +{ + + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0, 0.375, 0.0, 1.0, 0.625, 1.0); + + public BlockSolarArrayModule(String assetName) + { + super(Material.IRON); + this.setHardness(2.5F); + this.setSoundType(SoundType.METAL); + this.setTranslationKey(assetName); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + @Override + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + + TileEntity tile = worldIn.getTileEntity(pos); + + if (tile instanceof INetworkConnection) + { + ((INetworkConnection) tile).refresh(); + } + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntitySolarArrayModule(); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + public boolean isSealed(World worldIn, BlockPos pos, EnumFacing direction) + { + return direction.getAxis() == EnumFacing.Axis.Y; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.MACHINE; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSpout.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSpout.java new file mode 100644 index 00000000..2b8e4251 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSpout.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySpout; +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSpout extends Block implements ISortableBlock, ITileEntityProvider +{ + + public BlockSpout(String assetName) + { + super(Material.ROCK); + this.blockHardness = 4.5F; + this.blockResistance = 2.5F; + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntitySpout(); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(VenusBlocks.venusBlock); + } + + @Override + public int damageDropped(IBlockState state) + { + return BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT.getMeta(); + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + return super.getDrops(world, pos, state, fortune); + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return (face == EnumFacing.UP) ? BlockFaceShape.BOWL : BlockFaceShape.SOLID; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSulphuricAcid.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSulphuricAcid.java new file mode 100644 index 00000000..7cffa061 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockSulphuricAcid.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.Random; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSulphuricAcid extends BlockFluidClassic +{ + + public BlockSulphuricAcid(String assetName) + { + super(VenusModule.sulphuricAcid, VenusModule.acidMaterial); + this.setQuantaPerBlock(9); + this.setLightLevel(0.1F); + this.needsRandomTick = true; + this.setTranslationKey(assetName); + } + + @Override + @Nullable + public Boolean isEntityInsideMaterial(IBlockAccess world, BlockPos pos, IBlockState state, Entity entity, double yToTest, Material material, boolean testingHead) + { + return true; + } + + @Override + public boolean canDisplace(IBlockAccess world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + return super.canDisplace(world, pos); + } + + @Override + public boolean displaceIfPossible(World world, BlockPos pos) + { + if (world.getBlockState(pos).getMaterial().isLiquid()) + { + return false; + } + return super.displaceIfPossible(world, pos); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + super.randomDisplayTick(stateIn, worldIn, pos, rand); + + if (rand.nextInt(1200) == 0) + { + worldIn.playSound(null, pos.getX() + 0.5F, pos.getY() + 0.5F, pos.getZ() + 0.5F, SoundEvents.BLOCK_LAVA_AMBIENT, SoundCategory.BLOCKS, rand.nextFloat() * 0.25F + 0.75F, + 0.00001F + rand.nextFloat() * 0.5F); + } + if (rand.nextInt(10) == 0) + { + BlockPos below = pos.down(); + IBlockState state = worldIn.getBlockState(below); + if (state.getBlock().isSideSolid(state, worldIn, below, EnumFacing.UP) && !worldIn.getBlockState(pos.down(2)).getMaterial().blocksMovement()) + { + GalacticraftPlanets.spawnParticle("bacterialDrip", new Vector3(pos.getX() + rand.nextFloat(), pos.getY() - 1.05D, pos.getZ() + rand.nextFloat()), new Vector3(0, 0, 0)); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTier3TreasureChest.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTier3TreasureChest.java new file mode 100644 index 00000000..67dd4c05 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTier3TreasureChest.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityTreasureChestVenus; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockTier3TreasureChest extends BlockTier1TreasureChest +{ + + public BlockTier3TreasureChest(String assetName) + { + super(assetName); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityTreasureChestVenus(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTorchWeb.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTorchWeb.java new file mode 100644 index 00000000..8253bf12 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/blocks/BlockTorchWeb.java @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.blocks.ISortableBlock; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryBlock; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.IShearable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockTorchWeb extends Block implements IShearable, IShiftDescription, ISortableBlock +{ + + public static final PropertyEnum WEB_TYPE = PropertyEnum.create("webtype", EnumWebType.class); + protected static final AxisAlignedBB AABB_WEB = new AxisAlignedBB(0.35, 0.0, 0.35, 0.65, 1.0, 0.65); + protected static final AxisAlignedBB AABB_WEB_TORCH = new AxisAlignedBB(0.35, 0.25, 0.35, 0.65, 1.0, 0.65); + + public enum EnumWebType implements IStringSerializable + { + + WEB_0(0, "web_torch_0"), WEB_1(1, "web_torch_1"); + + private final int meta; + private final String name; + + EnumWebType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + private final static EnumWebType[] values = values(); + + public static EnumWebType byMetadata(int meta) + { + return values[meta % values.length]; + } + + @Override + public String getName() + { + return this.name; + } + } + + public BlockTorchWeb(String assetName) + { + super(Material.CIRCUITS); + this.setLightLevel(1.0F); + this.setTranslationKey(assetName); + } + + @Override + public void getSubBlocks(CreativeTabs tab, NonNullList list) + { + list.add(new ItemStack(this, 1, 0)); + list.add(new ItemStack(this, 1, 1)); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + if (state.getValue(WEB_TYPE) == EnumWebType.WEB_1) + { + return AABB_WEB_TORCH; + } + + return AABB_WEB; + } + + @Override + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + if (state.getValue(WEB_TYPE) == EnumWebType.WEB_1) + { + return 15; + } + + return 0; + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftBlocksTab; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return null; + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + if (world.getBlockState(pos).getBlock().isReplaceable(world, pos) && this.canBlockStay(world, pos, this.getStateFromMeta(meta))) + { + return super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand); + } + return world.getBlockState(pos); + } + + private boolean canBlockStay(World world, BlockPos pos, IBlockState state) + { + IBlockState blockUp = world.getBlockState(pos.up()); + return blockUp.getMaterial().isSolid() || blockUp.getBlock() == this && blockUp.getValue(WEB_TYPE) == EnumWebType.WEB_0; + } + + @Override + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.checkAndDropBlock(world, pos, state); + } + + @Override + public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) + { + this.checkAndDropBlock(world, pos, state); + } + + protected void checkAndDropBlock(World world, BlockPos pos, IBlockState state) + { + if (!this.canBlockStay(world, pos, state)) + { + this.dropBlockAsItem(world, pos, state, 0); + world.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); + } + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public int quantityDropped(Random rand) + { + return 0; + } + + @Override + public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos) + { + return true; + } + + @Override + public List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this, 1, this.getMetaFromState(world.getBlockState(pos)))); + return ret; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate(this.getTranslationKey() + ".description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public BlockRenderLayer getRenderLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(WEB_TYPE, EnumWebType.byMetadata(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) + { + return ((EnumWebType) state.getValue(WEB_TYPE)).getMeta(); + } + + @Override + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, WEB_TYPE); + } + + @Override + public EnumSortCategoryBlock getCategory(int meta) + { + return EnumSortCategoryBlock.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/FakeLightningBoltRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/FakeLightningBoltRenderer.java new file mode 100644 index 00000000..b08d2d32 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/FakeLightningBoltRenderer.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client; + +import java.util.Random; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import org.lwjgl.opengl.GL11; + +public class FakeLightningBoltRenderer +{ + + public static void renderBolt(long boltVertex, double x, double y, double z) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + double[] adouble = new double[8]; + double[] adouble1 = new double[8]; + double d0 = 0.0D; + double d1 = 0.0D; + Random random = new Random(boltVertex); + + for (int i = 7; i >= 0; --i) + { + adouble[i] = d0; + adouble1[i] = d1; + d0 += (double) (random.nextInt(11) - 5); + d1 += (double) (random.nextInt(11) - 5); + } + + for (int k1 = 0; k1 < 4; ++k1) + { + Random random1 = new Random(boltVertex); + + for (int j = 0; j < 3; ++j) + { + int k = 7; + int l = 0; + + if (j > 0) + { + k = 7 - j; + } + + if (j > 0) + { + l = k - 2; + } + + double d2 = adouble[k] - d0; + double d3 = adouble1[k] - d1; + + for (int i1 = k; i1 >= l; --i1) + { + double d4 = d2; + double d5 = d3; + + if (j == 0) + { + d2 += (double) (random1.nextInt(11) - 5); + d3 += (double) (random1.nextInt(11) - 5); + } else + { + d2 += (double) (random1.nextInt(31) - 15); + d3 += (double) (random1.nextInt(31) - 15); + } + + worldrenderer.begin(5, DefaultVertexFormats.POSITION_COLOR); + double d6 = 0.1D + (double) k1 * 0.2D; + + if (j == 0) + { + d6 *= (double) i1 * 0.1D + 1.0D; + } + + double d7 = 0.1D + (double) k1 * 0.2D; + + if (j == 0) + { + d7 *= (double) (i1 - 1) * 0.1D + 1.0D; + } + + for (int j1 = 0; j1 < 5; ++j1) + { + double d8 = x + 0.5D - d6; + double d9 = z + 0.5D - d6; + + if (j1 == 1 || j1 == 2) + { + d8 += d6 * 2.0D; + } + + if (j1 == 2 || j1 == 3) + { + d9 += d6 * 2.0D; + } + + double d10 = x + 0.5D - d7; + double d11 = z + 0.5D - d7; + + if (j1 == 1 || j1 == 2) + { + d10 += d7 * 2.0D; + } + + if (j1 == 2 || j1 == 3) + { + d11 += d7 * 2.0D; + } + + worldrenderer.pos(d10 + d2, y + (double) (i1 * 16), d11 + d3).color(0.45F, 0.45F, 0.5F, 0.3F).endVertex(); + worldrenderer.pos(d8 + d4, y + (double) ((i1 + 1) * 16), d9 + d5).color(0.45F, 0.45F, 0.5F, 0.3F).endVertex(); + } + + tessellator.draw(); + } + } + } + + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/SkyProviderVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/SkyProviderVenus.java new file mode 100644 index 00000000..44b23d35 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/SkyProviderVenus.java @@ -0,0 +1,385 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.client.IRenderHandler; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class SkyProviderVenus extends IRenderHandler +{ + + private static final ResourceLocation overworldTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"); + private static final ResourceLocation sunTexture = new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/planets/atmosphericsun.png"); + + public int starList; + public int glSkyList; + public int glSkyList2; + private float sunSize; + + public SkyProviderVenus(IGalacticraftWorldProvider worldProvider) + { + this.sunSize = 30.0F * worldProvider.getSolarSize(); + + int displayLists = GLAllocation.generateDisplayLists(3); + this.starList = displayLists; + this.glSkyList = displayLists + 1; + this.glSkyList2 = displayLists + 2; + + // Bind stars to display list + GL11.glPushMatrix(); + GL11.glNewList(this.starList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + + final Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldRenderer = tessellator.getBuffer(); + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + final byte byte2 = 64; + final int i = 256 / byte2 + 2; + float f = 16F; + + for (int j = -byte2 * i; j <= byte2 * i; j += byte2) + { + for (int l = -byte2 * i; l <= byte2 * i; l += byte2) + { + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer.pos(j + 0, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + 0).endVertex(); + worldRenderer.pos(j + byte2, f, l + byte2).endVertex(); + worldRenderer.pos(j + 0, f, l + byte2).endVertex(); + tessellator.draw(); + } + } + + GL11.glEndList(); + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + f = -16F; + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int k = -byte2 * i; k <= byte2 * i; k += byte2) + { + for (int i1 = -byte2 * i; i1 <= byte2 * i; i1 += byte2) + { + worldRenderer.pos(k + byte2, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + 0).endVertex(); + worldRenderer.pos(k + 0, f, i1 + byte2).endVertex(); + worldRenderer.pos(k + byte2, f, i1 + byte2).endVertex(); + } + } + + tessellator.draw(); + GL11.glEndList(); + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GlStateManager.disableRescaleNormal(); + Vec3d vec3 = world.getSkyColor(mc.getRenderViewEntity(), partialTicks); + float f1 = (float) vec3.x; + float f2 = (float) vec3.y; + float f3 = (float) vec3.z; + float f6; + + if (mc.gameSettings.anaglyph) + { + float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F; + float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F; + f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F; + f1 = f4; + f2 = f5; + f3 = f6; + } + + GL11.glColor3f(f1, f2, f3); + Tessellator tessellator1 = Tessellator.getInstance(); + BufferBuilder worldRenderer1 = tessellator1.getBuffer(); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(f1, f2, f3); + GL11.glCallList(this.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + RenderHelper.disableStandardItemLighting(); + float f7; + float f8; + float f9; + float f10; + + float f18 = world.getStarBrightness(partialTicks); + + if (f18 > 0.0F) + { + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-19.0F, 0, 1.0F, 0); + GL11.glColor4f(f18, f18, f18, f18); + GL11.glCallList(this.starList); + GL11.glPopMatrix(); + } + + float[] afloat = new float[4]; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glPushMatrix(); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + afloat[0] = 255 / 255.0F; + afloat[1] = 194 / 255.0F; + afloat[2] = 180 / 255.0F; + afloat[3] = 0.3F; + f6 = afloat[0]; + f7 = afloat[1]; + f8 = afloat[2]; + float f11; + + if (mc.gameSettings.anaglyph) + { + f9 = (f6 * 30.0F + f7 * 59.0F + f8 * 11.0F) / 100.0F; + f10 = (f6 * 30.0F + f7 * 70.0F) / 100.0F; + f11 = (f6 * 30.0F + f8 * 70.0F) / 100.0F; + f6 = f9; + f7 = f10; + f8 = f11; + } + + f18 = 1.0F - f18; + + worldRenderer1.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + float r = f6 * f18; + float g = f7 * f18; + float b = f8 * f18; + float a = afloat[3] * 2 / f18; + worldRenderer1.pos(0.0D, 100.0D, 0.0D).color(r, g, b, a).endVertex(); + r = afloat[0] * f18; + g = afloat[1] * f18; + b = afloat[2] * f18 / 20.0F; + a = 0.0F; + + // Render sun aura + f10 = 20.0F; + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) -f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) -f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + + tessellator1.draw(); + worldRenderer1.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR); + r = f6 * f18; + g = f7 * f18; + b = f8 * f18; + a = afloat[3] * f18; + worldRenderer1.pos(0.0D, 100.0D, 0.0D).color(r, g, b, a).endVertex(); + r = afloat[0] * f18; + g = afloat[1] * f18; + b = afloat[2] * f18; + a = 0.0F; + + // Render larger sun aura + f10 = 20.0F; + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) -f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos(0, 100.0D, (double) f10 * 1.5F).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, f10).color(r, g, b, a).endVertex(); + worldRenderer1.pos((double) -f10 * 1.5F, 100.0D, 0).color(r, g, b, a).endVertex(); + worldRenderer1.pos(-f10, 100.0D, -f10).color(r, g, b, a).endVertex(); + + tessellator1.draw(); + GL11.glPopMatrix(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE, GL11.GL_ZERO); + GL11.glPushMatrix(); + f7 = 0.0F; + f8 = 0.0F; + f9 = 0.0F; + GL11.glTranslatef(f7, f8, f9); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + // Render sun + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 1.0F); + // Some blanking to conceal the stars + f10 = this.sunSize / 3.5F; + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + worldRenderer1.pos(-f10, 99.9D, -f10).endVertex(); + worldRenderer1.pos(f10, 99.9D, -f10).endVertex(); + worldRenderer1.pos(f10, 99.9D, f10).endVertex(); + worldRenderer1.pos(-f10, 99.9D, f10).endVertex(); + tessellator1.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.1F); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + double d0 = mc.player.getPosition().getY() - world.getHorizon(); + + if (d0 < 0.0D) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 12.0F, 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + f8 = 1.0F; + f9 = -((float) (d0 + 65.0D)); + f10 = -f8; + worldRenderer1.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + worldRenderer1.pos(-f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f9, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(-f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, f8).color(0, 0, 0, 1.0F).endVertex(); + worldRenderer1.pos(f8, f10, -f8).color(0, 0, 0, 1.0F).endVertex(); + tessellator1.draw(); + } + + if (world.provider.isSkyColored()) + { + GL11.glColor3f(f1 * 0.2F + 0.04F, f2 * 0.2F + 0.04F, f3 * 0.6F + 0.1F); + } else + { + GL11.glColor3f(f1, f2, f3); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -((float) (d0 - 16.0D)), 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GlStateManager.enableRescaleNormal(); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); + GL11.glDepthMask(true); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderStars() + { + final Random rand = new Random(10842L); + final Tessellator var2 = Tessellator.getInstance(); + BufferBuilder worldRenderer = var2.getBuffer(); + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + + for (int starIndex = 0; starIndex < (ConfigManagerCore.moreStars ? 35000 : 6000); ++starIndex) + { + double var4 = rand.nextFloat() * 2.0F - 1.0F; + double var6 = rand.nextFloat() * 2.0F - 1.0F; + double var8 = rand.nextFloat() * 2.0F - 1.0F; + final double var10 = 0.15F + rand.nextFloat() * 0.1F; + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + + if (var12 < 1.0D && var12 > 0.01D) + { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + final double var14 = var4 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var16 = var6 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var18 = var8 * (ConfigManagerCore.moreStars ? rand.nextDouble() * 150D + 130D : 100.0D); + final double var20 = Math.atan2(var4, var8); + final double var22 = Math.sin(var20); + final double var24 = Math.cos(var20); + final double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + final double var28 = Math.sin(var26); + final double var30 = Math.cos(var26); + final double var32 = rand.nextDouble() * Math.PI * 2.0D; + final double var34 = Math.sin(var32); + final double var36 = Math.cos(var32); + + for (int var38 = 0; var38 < 4; ++var38) + { + final double var39 = 0.0D; + final double var41 = ((var38 & 2) - 1) * var10; + final double var43 = ((var38 + 1 & 2) - 1) * var10; + final double var47 = var41 * var36 - var43 * var34; + final double var49 = var43 * var36 + var41 * var34; + final double var53 = var47 * var28 + var39 * var30; + final double var55 = var39 * var28 - var47 * var30; + final double var57 = var55 * var22 - var49 * var24; + final double var61 = var49 * var22 + var55 * var24; + worldRenderer.pos(var14 + var57, var16 + var53, var18 + var61).endVertex(); + } + } + } + + var2.draw(); + } + + public float getSkyBrightness(float par1) + { + final float var2 = FMLClientHandler.instance().getClient().world.getCelestialAngle(par1); + float var3 = 1.0F - (MathHelper.sin(var2 * Constants.twoPI) * 2.0F + 0.25F); + + if (var3 < 0.0F) + { + var3 = 0.0F; + } + + if (var3 > 1.0F) + { + var3 = 1.0F; + } + + return var3 * var3 * 1F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/TickHandlerClientVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/TickHandlerClientVenus.java new file mode 100644 index 00000000..8f0d46fd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/TickHandlerClientVenus.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client; + +import java.util.Iterator; +import java.util.Map; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.client.CloudRenderer; +import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; +import micdoodle8.mods.galacticraft.planets.venus.ConfigManagerVenus; +import micdoodle8.mods.galacticraft.planets.venus.dimension.WorldProviderVenus; + +import com.google.common.collect.Maps; + +@SideOnly(Side.CLIENT) +public class TickHandlerClientVenus +{ + + private Map lightning = Maps.newHashMap(); + + @SubscribeEvent + public void renderLightning(ClientProxyCore.EventSpecialRender event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final EntityPlayerSP player = minecraft.player; + if (player != null && !ConfigManagerVenus.disableAmbientLightning) + { + Iterator> it = lightning.entrySet().iterator(); + while (it.hasNext()) + { + Map.Entry entry = it.next(); + long seed = entry.getValue() / 10 + entry.getKey().getX() + entry.getKey().getZ(); + FakeLightningBoltRenderer.renderBolt(seed, entry.getKey().getX() - ClientProxyCore.playerPosX, entry.getKey().getY() - ClientProxyCore.playerPosY, entry.getKey().getZ() - ClientProxyCore.playerPosZ); + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTick(TickEvent.ClientTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + + final WorldClient world = minecraft.world; + + if (world != null) + { + if (world.provider instanceof WorldProviderVenus) + { + if (world.provider.getSkyRenderer() == null) + { + world.provider.setSkyRenderer(new SkyProviderVenus((IGalacticraftWorldProvider) world.provider)); + } + + if (world.provider.getCloudRenderer() == null) + { + world.provider.setCloudRenderer(new CloudRenderer()); + } + + if (world.provider.getWeatherRenderer() == null) + { + world.provider.setWeatherRenderer(new WeatherRendererVenus()); + } + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerTick(TickEvent.PlayerTickEvent event) + { + final Minecraft minecraft = FMLClientHandler.instance().getClient(); + final EntityPlayerSP player = minecraft.player; + + if (player == event.player) + { + // Maybe check for the right provider before we continue + if (player.world.provider instanceof WorldProviderVenus) + { + if (!ConfigManagerVenus.disableAmbientLightning) + { + Iterator> it = lightning.entrySet().iterator(); + while (it.hasNext()) + { + Map.Entry entry = it.next(); + int val = entry.getValue(); + if (val - 1 <= 0) + { + it.remove(); + } else + { + entry.setValue(val - 1); + } + } + if (player.getRNG().nextInt(300 + (int) (800F * minecraft.world.rainingStrength)) == 0) + { + double freq = player.getRNG().nextDouble() * Math.PI * 2.0F; + double dist = 180.0F; + double dX = dist * Math.cos(freq); + double dZ = dist * Math.sin(freq); + double posX = player.posX + dX; + double posY = 70; + double posZ = player.posZ + dZ; + minecraft.world.playSound(player, posX, posY, posZ, SoundEvents.ENTITY_LIGHTNING_THUNDER, SoundCategory.WEATHER, 500.0F + player.getRNG().nextFloat() * 500F, 1.0F + player.getRNG().nextFloat() * 0.2F); + lightning.put(new BlockPos(posX, posY, posZ), 20); + } + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/WeatherRendererVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/WeatherRendererVenus.java new file mode 100644 index 00000000..34cc6279 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/WeatherRendererVenus.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client; + +import java.lang.reflect.Field; +import java.util.Random; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.client.IRenderHandler; +import org.lwjgl.opengl.GL11; + +public class WeatherRendererVenus extends IRenderHandler +{ + + private final Random random = new Random(); + private final float[] rainXCoords = new float[1024]; + private final float[] rainYCoords = new float[1024]; + private static final ResourceLocation RAIN_TEXTURES = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/misc/rain_venus.png"); + + public WeatherRendererVenus() + { + for (int i = 0; i < 32; ++i) + { + float f1 = (float) (i - 16); + for (int j = 0; j < 32; ++j) + { + float f = (float) (j - 16); + float f2 = MathHelper.sqrt(f * f + f1 * f1); + this.rainXCoords[i << 5 | j] = -f1 / f2; + this.rainYCoords[i << 5 | j] = f / f2; + } + } + } + + @Override + public void render(float partialTicks, WorldClient world, Minecraft mc) + { + float strength = world.getRainStrength(partialTicks); + + if (strength > 0.0F) + { + int rendererUpdateCount = 0; + try + { + Field fieldRUC = mc.entityRenderer.getClass().getDeclaredField(GCCoreUtil.isDeobfuscated() ? "rendererUpdateCount" : "field_78529_t"); + fieldRUC.setAccessible(true); + rendererUpdateCount = fieldRUC.getInt(mc.entityRenderer); + } catch (Exception e) + { + } + mc.entityRenderer.enableLightmap(); + Entity entity = mc.getRenderViewEntity(); + + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder worldrenderer = tessellator.getBuffer(); + GlStateManager.disableCull(); + GL11.glNormal3f(0.0F, 1.0F, 0.0F); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GlStateManager.alphaFunc(516, 0.1F); + double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double) partialTicks; + double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double) partialTicks; + double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double) partialTicks; + int l = MathHelper.floor(d1); + + int r = 4; + if (mc.gameSettings.fancyGraphics) + { + r = 8; + } + + int drawFlag = -1; + worldrenderer.setTranslation(-d0, -d1, -d2); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); + int px = MathHelper.floor(entity.posX); + int py = MathHelper.floor(entity.posY); + int pz = MathHelper.floor(entity.posZ); + + for (int z = pz - r; z <= pz + r; ++z) + { + int indexZ = (z - pz + 16) * 32; + for (int x = px - r; x <= px + r; ++x) + { + mutablePos.setPos(x, 0, z); + int yHeight = world.getPrecipitationHeight(mutablePos).getY() + 4 - (int) (4.8F * strength); + int y = py - r; + int ymax = py + r; + + if (y < yHeight) + { + y = yHeight; + } + + if (ymax < yHeight) + { + ymax = yHeight; + } + + int yBase = yHeight; + + if (yHeight < l) + { + yBase = l; + } + + if (y != ymax) + { + this.random.setSeed((long) (x * x * 3121 + x * 45238971 ^ z * z * 418711 + z * 13761)); + + if (drawFlag != 0) + { + if (drawFlag >= 0) + { + tessellator.draw(); + } + + drawFlag = 0; + mc.getTextureManager().bindTexture(RAIN_TEXTURES); + worldrenderer.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP); + } + + int index = indexZ + x - px + 16; + double dx = (double) this.rainXCoords[index] * 0.5D; + double dz = (double) this.rainYCoords[index] * 0.5D; + double dy = + -((double) (rendererUpdateCount + x * x * 3121 + x * 45238971 + z * z * 418711 + z * 13761 & 31) + (double) partialTicks) / 80.0D * (3.0D + this.random.nextDouble()); + double yo = this.random.nextDouble() / 1.8D; + double xx = x + 0.5D - entity.posX; + double zz = z + 0.5D - entity.posZ; + float rr = MathHelper.sqrt(xx * xx + zz * zz) / r; + float alpha = ((1.0F - rr * rr) * 0.5F + 0.5F) * strength / 0.6F; // 0.6F + // is + // the + // max + // rainstrength + // on + // Venus + mutablePos.setPos(x, yBase, z); + int light = world.getCombinedLight(mutablePos, 0); + int lx = light >> 16 & 65535; + int ly = light & 65535; + double xc = x + 0.5D; + double zc = z + 0.5D; + worldrenderer.pos(xc - dx, (double) ymax - yo, zc - dz).tex(0.0D, (double) y * 0.25D + dy).color(1.0F, 1.0F, 1.0F, alpha).lightmap(lx, ly).endVertex(); + worldrenderer.pos(xc + dx, (double) ymax - yo, zc + dz).tex(1.0D, (double) y * 0.25D + dy).color(1.0F, 1.0F, 1.0F, alpha).lightmap(lx, ly).endVertex(); + worldrenderer.pos(xc + dx, (double) y - yo, zc + dz).tex(1.0D, (double) ymax * 0.25D + dy).color(1.0F, 1.0F, 1.0F, alpha).lightmap(lx, ly).endVertex(); + worldrenderer.pos(xc - dx, (double) y - yo, zc - dz).tex(0.0D, (double) ymax * 0.25D + dy).color(1.0F, 1.0F, 1.0F, alpha).lightmap(lx, ly).endVertex(); + } + } + } + + if (drawFlag >= 0) + { + tessellator.draw(); + } + + worldrenderer.setTranslation(0.0D, 0.0D, 0.0D); + GlStateManager.enableCull(); + GlStateManager.disableBlend(); + GlStateManager.alphaFunc(516, 0.1F); + mc.entityRenderer.disableLightmap(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidExhaust.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidExhaust.java new file mode 100644 index 00000000..b61751a5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidExhaust.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.fx; + +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleAcidExhaust extends Particle +{ + + float smokeParticleScale; + + public ParticleAcidExhaust(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double motionX, double motionY, double motionZ, float p_i46348_14_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += motionX / 10.0F; + this.motionY += motionY; + this.motionZ += motionZ / 10.0F; + this.particleRed = (float) (Math.random() * 0.10000001192092896D + 0.8); + this.particleGreen = particleRed; + this.particleBlue = (float) (Math.random() * 0.10000001192092896D); + this.particleAlpha = 1.0F; + this.particleScale *= p_i46348_14_; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) (8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int) ((float) this.particleMaxAge * p_i46348_14_ * 5.0F); + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float p_180434_4_, float p_180434_5_, float p_180434_6_, float p_180434_7_, float p_180434_8_) + { + GlStateManager.disableLighting(); + float f = ((float) this.particleAge + partialTicks) / (float) this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.smokeParticleScale * f; + super.renderParticle(worldRendererIn, entityIn, partialTicks, p_180434_4_, p_180434_5_, p_180434_6_, p_180434_7_, p_180434_8_); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.004D; + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidVapor.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidVapor.java new file mode 100644 index 00000000..fc018de3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/fx/ParticleAcidVapor.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.fx; + +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleAcidVapor extends Particle +{ + + float smokeParticleScale; + + public ParticleAcidVapor(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double motionX, double motionY, double motionZ, float p_i46348_14_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += motionX / 10.0F; + this.motionY += motionY; + this.motionZ += motionZ / 10.0F; + this.particleRed = (float) (Math.random() * 0.10000001192092896D + 0.8); + this.particleGreen = particleRed; + this.particleBlue = (float) (Math.random() * 0.10000001192092896D); + this.particleAlpha = 1.0F; +// this.particleScale *= 0.75F; + this.particleScale *= p_i46348_14_; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int) (8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int) ((float) this.particleMaxAge * p_i46348_14_); + this.canCollide = true; + } + + @Override + public void renderParticle(BufferBuilder worldRendererIn, Entity entityIn, float partialTicks, float p_180434_4_, float p_180434_5_, float p_180434_6_, float p_180434_7_, float p_180434_8_) + { + GlStateManager.disableLighting(); + float f = (float) Math.pow(this.particleAge / 11.0, 2.0F); + f = Math.max(f, 0.1F); + this.particleAlpha = this.particleAlpha * 0.994F; + this.particleScale = this.smokeParticleScale * f; + super.renderParticle(worldRendererIn, entityIn, partialTicks, p_180434_4_, p_180434_5_, p_180434_6_, p_180434_7_, p_180434_8_); + } + + @Override + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.004D; + this.move(this.motionX, this.motionY, this.motionZ); + + this.motionY *= 0.9899999785423279D; + this.motionX *= 1.001D; + this.motionZ *= 1.001D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiCrashedProbe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiCrashedProbe.java new file mode 100644 index 00000000..6698278c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiCrashedProbe.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerCrashedProbe; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiCrashedProbe extends GuiContainerGC +{ + + private static final ResourceLocation guiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/crashed_probe.png"); + + private final TileEntityCrashedProbe geothermalGenerator; + + public GuiCrashedProbe(InventoryPlayer par1InventoryPlayer, TileEntityCrashedProbe geothermalGenerator) + { + super(new ContainerCrashedProbe(par1InventoryPlayer, geothermalGenerator)); + this.geothermalGenerator = geothermalGenerator; + this.ySize = 133; + this.xSize = 176; + } + + @Override + public void initGui() + { + super.initGui(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiCrashedProbe.guiTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + String displayString = this.geothermalGenerator.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, 4210752); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiGeothermal.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiGeothermal.java new file mode 100644 index 00000000..0466e747 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiGeothermal.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerGeothermal; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiGeothermal extends GuiContainerGC +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/geothermal.png"); + + private final TileEntityGeothermalGenerator geothermalGenerator; + + private GuiButton buttonEnableSolar; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiGeothermal(InventoryPlayer par1InventoryPlayer, TileEntityGeothermalGenerator geothermalGenerator) + { + super(new ContainerGeothermal(par1InventoryPlayer, geothermalGenerator)); + this.geothermalGenerator = geothermalGenerator; + this.ySize = 201; + this.xSize = 176; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.geothermalGenerator.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.geothermalGenerator.getEnergyStoredGC()) + " / " + (int) Math.floor(this.geothermalGenerator.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 96; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 82, 18, 18, batterySlotDesc, this.width, this.height, this)); +// List sunGenDesc = new ArrayList(); +// float sunVisible = Math.round(this.geothermalGenerator.solarStrength / 9.0F * 1000) / 10.0F; +// sunGenDesc.add(this.geothermalGenerator.solarStrength > 0 ? GCCoreUtil.translate("gui.status.sun_visible.name") + ": " + sunVisible + "%" : GCCoreUtil.translate("gui.status.blockedfully.name")); +// this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 47, (this.height - this.ySize) / 2 + 20, 18, 18, sunGenDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonEnableSolar = new GuiButton(0, this.width / 2 - 36, this.height / 2 - 19, 72, 20, GCCoreUtil.translate("gui.button.enable.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetY = 35; + this.buttonEnableSolar.enabled = this.geothermalGenerator.disableCooldown == 0; + this.buttonEnableSolar.displayString = !this.geothermalGenerator.getDisabled(0) ? GCCoreUtil.translate("gui.button.disable.name") : GCCoreUtil.translate("gui.button.enable.name"); + String displayString = this.geothermalGenerator.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, 4210752); + displayString = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 45 + 23 - 46 + offsetY, 4210752); + displayString = this.getStatus2(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 56 + 23 - 46 + offsetY, 4210752); + displayString = GCCoreUtil.translate("gui.message.generating.name") + ": " + (this.geothermalGenerator.generateWatts > 0 + ? EnergyDisplayHelper.getEnergyDisplayS(this.geothermalGenerator.generateWatts) + "/t" : GCCoreUtil.translate("gui.status.not_generating.name")); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 34 + 23 - 46 + offsetY, 4210752); +// float boost = Math.round((this.geothermalGenerator.getSolarBoost() - 1) * 1000) / 10.0F; +// displayString = GCCoreUtil.translate("gui.message.environment.name") + ": " + boost + "%"; +// this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 56 + 23 - 46 + offsetY, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.geothermalGenerator.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(displayString, this.xSize / 2 - + // this.fontRenderer.getStringWidth(displayString) / 2, 68 + 23 - 46 + + // offsetY, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, 4210752); + } + + private String getStatus() + { + if (this.geothermalGenerator.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (this.geothermalGenerator.generateWatts > 0) + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.collectingenergy.name"); + } + + if (!this.geothermalGenerator.hasValidSpout()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.status.invalid_spout_1.name"); + } + + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.unknown.name"); + } + + private String getStatus2() + { + if (this.geothermalGenerator.getDisabled(0) || this.geothermalGenerator.generateWatts > 0) + { + return ""; + } + + if (!this.geothermalGenerator.hasValidSpout()) + { + return EnumColor.RED + GCCoreUtil.translate("gui.status.invalid_spout_2.name"); + } + + return ""; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiGeothermal.backgroundTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.geothermalGenerator.getEnergyStoredGC(), this.geothermalGenerator.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.geothermalGenerator.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 83, var6 + 24, 176, 0, 11, 10); + } + + if (this.geothermalGenerator.hasValidSpout()) + { + int ySize = 16 * this.geothermalGenerator.generateWatts / (TileEntityGeothermalGenerator.MAX_GENERATE_GJ_PER_TICK - 1); + this.drawTexturedModalRect(var5 + 33, var6 + 21 + (16 - ySize), 176, (int) (10 + ((this.geothermalGenerator.ticks / 3) % 7) * 16) + (16 - ySize), 46, ySize); + } + + this.drawTexturedModalRect(var5 + 97, var6 + 25, 187, 0, Math.min(this.geothermalGenerator.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurret.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurret.java new file mode 100644 index 00000000..09dddc2c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurret.java @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerLaserTurret; +import micdoodle8.mods.galacticraft.planets.venus.network.PacketSimpleVenus; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.lwjgl.opengl.GL11; + +public class GuiLaserTurret extends GuiContainerGC implements GuiElementCheckbox.ICheckBoxCallback +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/laser_turret.png"); + + private final TileEntityLaserTurret laserTurret; + private GuiElementCheckbox blacklistMode; + private GuiElementCheckbox targetMeteors; + private GuiButton buttonEditList; + private GuiButton buttonEditPriority; + + private int cannotEditTimer; + + private GuiButton buttonEnable; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiLaserTurret(InventoryPlayer par1InventoryPlayer, TileEntityLaserTurret turret) + { + super(new ContainerLaserTurret(par1InventoryPlayer, turret)); + this.laserTurret = turret; + this.ySize = 219; + this.xSize = 176; + } + + @Override + protected void actionPerformed(GuiButton button) + { + if (!this.mc.player.getUniqueID().equals(this.laserTurret.getOwnerUUID())) + { + this.cannotEditTimer = 50; + return; + } + + switch (button.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.laserTurret.getPos(), 0})); + laserTurret.setDisabled(0, !laserTurret.getDisabled(0)); + initGui(); + break; + case 3: + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiLaserTurretEditList(laserTurret)); + break; + case 4: + FMLClientHandler.instance().getClient().displayGuiScreen(new GuiLaserTurretEditPriority(laserTurret)); + break; + } + } + + @Override + public void initGui() + { + final int yTop = (this.height - this.ySize) / 2; + this.buttonList.clear(); + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.laserTurret.getEnergyStoredGC()) + " / " + (int) Math.floor(this.laserTurret.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 112; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 106; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 81, (this.height - this.ySize) / 2 + 92, 18, 18, batterySlotDesc, this.width, this.height, this)); + String enableString = !this.laserTurret.getDisabled(0) ? GCCoreUtil.translate("gui.button.disable.name") : GCCoreUtil.translate("gui.button.enable.name"); + this.buttonList.add(this.buttonEnable = new GuiButton(0, (this.width - this.xSize) / 2 + 7, this.height / 2 - 9, 72, 20, enableString)); + this.blacklistMode = new GuiElementCheckbox(1, this, this.width / 2 - 81, yTop + 26, GCCoreUtil.translate("gui.message.blacklist_mode.name"), ColorUtil.to32BitColor(255, 75, 75, 75)); + this.targetMeteors = new GuiElementCheckbox(2, this, this.width / 2 - 81, yTop + 40, GCCoreUtil.translate("gui.message.target_meteors.name"), ColorUtil.to32BitColor(255, 75, 75, 75)); + this.buttonList.add(this.buttonEditList = new GuiButton(3, (this.width - this.xSize) / 2 + this.xSize / 2 - 41, yTop + 55, 82, 20, + GCCoreUtil.translate("gui.button.edit_" + (laserTurret.blacklistMode ? "blacklist" : "whitelist") + ".name"))); + this.buttonList.add(this.buttonEditPriority = new GuiButton(4, (this.width - this.xSize) / 2 + this.xSize / 2 - 41, yTop + 78, 82, 20, GCCoreUtil.translate("gui.button.edit_priority.name"))); + this.buttonList.add(this.blacklistMode); + this.buttonList.add(this.targetMeteors); + this.buttonList.add(this.buttonEditList); + this.buttonList.add(this.buttonEditPriority); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.buttonEnable.enabled = this.laserTurret.disableCooldown == 0; + String displayString = this.laserTurret.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, ColorUtil.to32BitColor(255, 75, 75, 75)); + displayString = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 18, ColorUtil.to32BitColor(255, 75, 75, 75)); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, ColorUtil.to32BitColor(255, 75, 75, 75)); + } + + private String getStatus() + { + if (this.laserTurret.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (this.laserTurret.getEnergyStoredGC() < 1000) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.missingpower.name"); + } + + return this.laserTurret.getGUIstatus(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiLaserTurret.backgroundTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.laserTurret.getEnergyStoredGC(), this.laserTurret.getMaxEnergyStoredGC(), electricityDesc); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + this.drawTexturedModalRect(var5 + 101, var6 + 106, 176, 51, 67, 9); + this.drawTexturedModalRect(var5 + 113, var6 + 107, 176, 0, Math.min(this.laserTurret.getScaledElecticalLevel(54), 54), 7); + + this.drawTexturedModalRect(var5 + 81, var6 + 102, 176, 33, 18, 18); + if (this.laserTurret.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 100, var6 + 107, 230, 0, 11, 8); + } + if (this.cannotEditTimer > 0) + { + this.cannotEditTimer--; + this.blacklistMode.enabled = false; + this.targetMeteors.enabled = false; + } else + { + this.blacklistMode.enabled = true; + this.targetMeteors.enabled = true; + } + + this.blacklistMode.isSelected = laserTurret.blacklistMode; + this.targetMeteors.isSelected = laserTurret.targetMeteors; + this.buttonEditList.displayString = GCCoreUtil.translate("gui.button.edit_" + (laserTurret.blacklistMode ? "blacklist" : "whitelist") + ".name"); + + if (!mc.player.getUniqueID().equals(this.laserTurret.getOwnerUUID())) + { + String displayString = this.laserTurret.getName(); + boolean off = false; + if (this.cannotEditTimer > 0) + { + off = this.cannotEditTimer % 30 < 15; + } + + this.drawTexturedModalRect(var5 + this.xSize / 2 + this.fontRenderer.getStringWidth(displayString) / 2 + (off ? -1 : 0) + 3, var6 + 5 + (off ? -1 : 0), 202 + (off ? 8 : 0), 7, + off ? 10 : 8, off ? 12 : 10); + } + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + this.cannotEditTimer = 40; + if (checkbox.equals(this.blacklistMode)) + { + this.laserTurret.blacklistMode = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {0, this.laserTurret.getPos(), this.laserTurret.blacklistMode ? 1 : 0})); + } else if (checkbox.equals(this.targetMeteors)) + { + this.laserTurret.targetMeteors = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {1, this.laserTurret.getPos(), this.laserTurret.targetMeteors ? 1 : 0})); + } + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return player.getUniqueID().equals(this.laserTurret.getOwnerUUID()) && this.cannotEditTimer <= 0; + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + if (checkbox.equals(this.blacklistMode)) + { + return this.laserTurret.blacklistMode; + } else if (checkbox.equals(this.targetMeteors)) + { + return this.laserTurret.targetMeteors; + } + + return false; + } + + @Override + public void onIntruderInteraction() + { + this.cannotEditTimer = 50; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditList.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditList.java new file mode 100644 index 00000000..2a8d0d8b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditList.java @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementCheckbox; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementGradientList; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementTextBox; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.network.PacketSimpleVenus; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.translation.I18n; +import net.minecraftforge.fml.common.registry.EntityEntry; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiLaserTurretEditList extends GuiScreen implements GuiElementTextBox.ITextBoxCallback, GuiElementCheckbox.ICheckBoxCallback +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/laser_turret_edit.png"); + + private final TileEntityLaserTurret laserTurret; + private GuiElementGradientList entityListElement; + + private int ySize; + private int xSize; + private EnumMode mode = EnumMode.MAIN; + private GuiElementTextBox name; + private GuiElementCheckbox neverAttackSpaceRace; + + private enum EnumMode + { + MAIN, ADD_PLAYER, ADD_ENTITY + } + + public GuiLaserTurretEditList(TileEntityLaserTurret turret) + { + this.laserTurret = turret; + } + + @Override + protected void actionPerformed(GuiButton button) + { + switch (button.id) + { + case 0: + mode = EnumMode.ADD_PLAYER; + initGui(); + break; + case 1: + mode = EnumMode.ADD_ENTITY; + initGui(); + break; + case 2: + GuiElementGradientList.ListElement selected = entityListElement.getSelectedElement(); + if (selected != null) + { + boolean isPlayer = selected.value.contains(GCCoreUtil.translate("gui.message.player.name") + ": "); + String toSend = isPlayer ? selected.value.substring(8) : selected.value; + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_MODIFY_LASER_TARGET, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {isPlayer ? 2 : 3, laserTurret.getPos(), toSend})); + if (isPlayer) + { + laserTurret.removePlayer(toSend); + } else + { + laserTurret.removeEntity(new ResourceLocation(toSend)); + } + initGui(); + } + break; + case 4: + if (mode == EnumMode.ADD_ENTITY) + { + EntityEntry entry = getEntityEntry(); + if (entry != null) + { + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_MODIFY_LASER_TARGET, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {1, laserTurret.getPos(), entry.getRegistryName().toString()})); + laserTurret.addEntity(entry.getRegistryName()); + } + } else if (mode == EnumMode.ADD_PLAYER) + { + if (name.text != null && !name.text.isEmpty()) + { + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_MODIFY_LASER_TARGET, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {0, laserTurret.getPos(), name.text})); + laserTurret.addPlayer(name.text); + } + } + name.text = null; + mode = EnumMode.MAIN; + initGui(); + break; + } + } + + @Override + public void initGui() + { + int yTop; + this.buttonList.clear(); + super.initGui(); + switch (mode) + { + case MAIN: + this.ySize = 144; + this.xSize = 222; + yTop = (this.height - this.ySize) / 2; + this.buttonList.add(new GuiButton(0, (this.width - this.xSize) / 2 + 4, yTop + 5, 62, 20, GCCoreUtil.translate("gui.button.add_player.name"))); + this.buttonList.add(new GuiButton(1, (this.width - this.xSize) / 2 + 66, yTop + 5, 62, 20, GCCoreUtil.translate("gui.button.add_entity.name"))); + this.buttonList.add(new GuiButton(2, (this.width - this.xSize) / 2 + 128, yTop + 5, 90, 20, GCCoreUtil.translate("gui.button.remove_selected.name"))); + this.entityListElement = new GuiElementGradientList((this.width - this.xSize) / 2 + 4, yTop + 26, xSize - 8, ySize - 45); + List alphabeticalList = Lists.newArrayList(); + alphabeticalList.addAll(laserTurret.getPlayers()); + for (ResourceLocation res : laserTurret.getEntities()) + { + alphabeticalList.add(res.toString()); + } + Collections.sort(alphabeticalList); + for (int i = 0; i < alphabeticalList.size(); ++i) + { + if (laserTurret.getPlayers().contains(alphabeticalList.get(i))) + { + alphabeticalList.set(i, GCCoreUtil.translate("gui.message.player.name") + ": " + alphabeticalList.get(i)); + } + } + List list = Lists.newArrayList(); + for (String str : alphabeticalList) + { + list.add(new GuiElementGradientList.ListElement(str, ColorUtil.to32BitColor(255, 240, 240, 240))); + } + this.entityListElement.updateListContents(list); + this.neverAttackSpaceRace = new GuiElementCheckbox(5, this, this.width / 2 - 106, yTop + 126, GCCoreUtil.translate("gui.button.never_fire_team.name"), 4210752); + this.buttonList.add(this.neverAttackSpaceRace); + break; + case ADD_PLAYER: + case ADD_ENTITY: + this.ySize = 70; + this.xSize = 148; + yTop = (this.height - this.ySize) / 2; + this.name = new GuiElementTextBox(3, this, (this.width - this.xSize) / 2 + 4, yTop + 16, 140, 20, "", false, 64, false); + this.name.resetOnClick = false; + this.addButton(this.name); + this.buttonList.add(new GuiButton(4, (this.width - this.xSize) / 2 + this.xSize / 2 - 31, yTop + 40, 62, 20, + GCCoreUtil.translate(laserTurret.blacklistMode ? "gui.button.add_blacklist.name" : "gui.button.add_whitelist.name"))); + break; + } + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (this.mode != EnumMode.MAIN && keyID != Keyboard.KEY_ESCAPE) + { + if (this.name.keyTyped(keyChar, keyID)) + { + return; + } + } + + if (keyID == 1) + { + switch (mode) + { + case MAIN: + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_OPEN_LASER_TURRET_GUI, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {laserTurret.getPos()})); + break; + default: + mode = EnumMode.MAIN; + initGui(); + break; + } + } else + { + super.keyTyped(keyChar, keyID); + } + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + public void updateScreen() + { + if (this.mode == EnumMode.MAIN) + { + this.entityListElement.update(); + } + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiLaserTurretEditList.backgroundTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, mode == EnumMode.MAIN ? 0 : 144, this.xSize, this.ySize); + + super.drawScreen(mouseX, mouseY, partialTicks); + + if (this.mode == EnumMode.MAIN) + { + this.entityListElement.draw(mouseX, mouseY); + } else if (this.mode == EnumMode.ADD_PLAYER) + { + String displayString = GCCoreUtil.translate("gui.message.enter_player.name"); + this.fontRenderer.drawString(displayString, var5 + this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, var6 + 5, 4210752); + } else if (this.mode == EnumMode.ADD_ENTITY) + { + String displayString = GCCoreUtil.translate("gui.message.enter_entity.name"); + this.fontRenderer.drawString(displayString, var5 + this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, var6 + 5, 4210752); + } + } + + private EntityEntry getEntityEntry() + { + if (this.name.text != null) + { + // Check all full entity names first + for (ResourceLocation loc : ForgeRegistries.ENTITIES.getKeys()) + { + if (this.name.text.equalsIgnoreCase(loc.toString())) + { + return ForgeRegistries.ENTITIES.getValue(loc); + } + } + // Then check without domain + for (ResourceLocation loc : ForgeRegistries.ENTITIES.getKeys()) + { + if (this.name.text.equalsIgnoreCase(loc.getPath())) + { + return ForgeRegistries.ENTITIES.getValue(loc); + } + } + // Then check names + for (ResourceLocation loc : ForgeRegistries.ENTITIES.getKeys()) + { + EntityEntry entry = ForgeRegistries.ENTITIES.getValue(loc); + if (entry != null) + { + if (this.name.text.equalsIgnoreCase(entry.getName())) + { + return entry; + } + } + } + for (ResourceLocation loc : ForgeRegistries.ENTITIES.getKeys()) + { + EntityEntry entry = ForgeRegistries.ENTITIES.getValue(loc); + if (entry != null) + { + if (this.name.text.equalsIgnoreCase(I18n.translateToLocal("entity." + entry.getName() + ".name"))) + { + return entry; + } + } + } + } + + return null; + } + + @Override + public boolean canPlayerEdit(GuiElementTextBox textBox, EntityPlayer player) + { + return player.getUniqueID().equals(this.laserTurret.getOwnerUUID()); + } + + @Override + public void onTextChanged(GuiElementTextBox textBox, String newText) + { + + } + + @Override + public String getInitialText(GuiElementTextBox textBox) + { + return ""; + } + + @Override + public int getTextColor(GuiElementTextBox textBox) + { + if (this.mode == EnumMode.ADD_ENTITY) + { + if (getEntityEntry() != null) + { + return ColorUtil.to32BitColor(255, 80, 200, 80); + } else + { + return ColorUtil.to32BitColor(255, 200, 80, 80); + } + } + + return ColorUtil.to32BitColor(255, 200, 200, 200); + } + + @Override + public void onIntruderInteraction(GuiElementTextBox textBox) + { + + } + + @Override + public void onSelectionChanged(GuiElementCheckbox checkbox, boolean newSelected) + { + this.laserTurret.alwaysIgnoreSpaceRace = newSelected; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {2, this.laserTurret.getPos(), this.laserTurret.alwaysIgnoreSpaceRace ? 1 : 0})); + } + + @Override + public boolean canPlayerEdit(GuiElementCheckbox checkbox, EntityPlayer player) + { + return player.getUniqueID().equals(this.laserTurret.getOwnerUUID()); + } + + @Override + public boolean getInitiallySelected(GuiElementCheckbox checkbox) + { + return laserTurret.alwaysIgnoreSpaceRace; + } + + @Override + public void onIntruderInteraction() + { + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditPriority.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditPriority.java new file mode 100644 index 00000000..ef26f430 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiLaserTurretEditPriority.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import java.io.IOException; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementSpinner; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.network.PacketSimpleVenus; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiLaserTurretEditPriority extends GuiScreen implements GuiElementSpinner.ISpinnerCallback +{ + + private static final ResourceLocation backgroundTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/laser_turret_edit.png"); + + private final TileEntityLaserTurret laserTurret; + + private int ySize; + private int xSize; + private GuiElementSpinner priorityClosest; + private GuiElementSpinner priorityLowestHealth; + private GuiElementSpinner priorityHighestHealth; + + public GuiLaserTurretEditPriority(TileEntityLaserTurret turret) + { + this.laserTurret = turret; + } + + @Override + protected void actionPerformed(GuiButton button) + { + switch (button.id) + { + case 0: + break; + } + } + + @Override + public void initGui() + { + this.buttonList.clear(); + super.initGui(); + this.ySize = 95; + this.xSize = 222; + int yTop = (this.height - this.ySize) / 2; + this.priorityClosest = new GuiElementSpinner(0, this, this.width / 2 - 95, yTop + 21, ColorUtil.to32BitColor(255, 220, 220, 220)); + this.buttonList.add(this.priorityClosest); + this.priorityLowestHealth = new GuiElementSpinner(1, this, this.width / 2 - 95, yTop + 43, ColorUtil.to32BitColor(255, 220, 220, 220)); + this.buttonList.add(this.priorityLowestHealth); + this.priorityHighestHealth = new GuiElementSpinner(2, this, this.width / 2 - 95, yTop + 65, ColorUtil.to32BitColor(255, 220, 220, 220)); + this.buttonList.add(this.priorityHighestHealth); + } + + @Override + protected void keyTyped(char keyChar, int keyID) throws IOException + { + if (keyID == 1) + { + GalacticraftCore.packetPipeline + .sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_OPEN_LASER_TURRET_GUI, GCCoreUtil.getDimensionID(laserTurret.getWorld()), new Object[] + {laserTurret.getPos()})); + } else + { + super.keyTyped(keyChar, keyID); + } + } + + @Override + public boolean doesGuiPauseGame() + { + return false; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiLaserTurretEditPriority.backgroundTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize - 10); + this.drawTexturedModalRect(var5, var6 + this.ySize - 10, 0, 144 - 10, this.xSize, 10); + + super.drawScreen(mouseX, mouseY, partialTicks); + + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.priority_low.name"), var5 + 6, var6 + 8, ColorUtil.to32BitColor(255, 75, 75, 75)); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.priority_closest.name"), this.priorityClosest.x + 35, this.priorityClosest.y + 10 - mc.fontRenderer.FONT_HEIGHT / 2, + ColorUtil.to32BitColor(255, 75, 75, 75)); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.priority_health_low.name"), this.priorityLowestHealth.x + 35, this.priorityLowestHealth.y + 10 - mc.fontRenderer.FONT_HEIGHT / 2, + ColorUtil.to32BitColor(255, 75, 75, 75)); + this.fontRenderer.drawString(GCCoreUtil.translate("gui.message.priority_health_high.name"), this.priorityHighestHealth.x + 35, + this.priorityHighestHealth.y + 10 - mc.fontRenderer.FONT_HEIGHT / 2, ColorUtil.to32BitColor(255, 75, 75, 75)); + } + + @Override + public void onIntruderInteraction() + { + + } + + @Override + public void onSelectionChanged(GuiElementSpinner spinner, int newVal) + { + for (GuiButton button : this.buttonList) + { + if (button instanceof GuiElementSpinner) + { + GuiElementSpinner spinner1 = (GuiElementSpinner) button; + if (spinner1.value == newVal) + { + spinner1.value = spinner.value; + } + } + } + + if (newVal < 0) + { + newVal++; + spinner.value++; + } + + this.laserTurret.priorityClosest = spinner == priorityClosest ? newVal : priorityClosest.value; + this.laserTurret.priorityLowestHealth = spinner == priorityLowestHealth ? newVal : priorityLowestHealth.value; + this.laserTurret.priorityHighestHealth = spinner == priorityHighestHealth ? newVal : priorityHighestHealth.value; + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {3, this.laserTurret.getPos(), this.laserTurret.priorityClosest})); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {4, this.laserTurret.getPos(), this.laserTurret.priorityLowestHealth})); + GalacticraftCore.packetPipeline.sendToServer(new PacketSimpleVenus(PacketSimpleVenus.EnumSimplePacketVenus.S_UPDATE_ADVANCED_GUI, GCCoreUtil.getDimensionID(mc.world), new Object[] + {5, this.laserTurret.getPos(), this.laserTurret.priorityHighestHealth})); + } + + @Override + public boolean canPlayerEdit(GuiElementSpinner spinner, EntityPlayer player) + { + return player.getUniqueID().equals(this.laserTurret.getOwnerUUID()); + } + + @Override + public int getInitialValue(GuiElementSpinner spinner) + { + if (spinner == this.priorityClosest) + { + return laserTurret.priorityClosest; + } else if (spinner == this.priorityLowestHealth) + { + return laserTurret.priorityLowestHealth; + } else if (spinner == this.priorityHighestHealth) + { + return laserTurret.priorityHighestHealth; + } + return 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiSolarArrayController.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiSolarArrayController.java new file mode 100644 index 00000000..fcdfcaa9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/gui/GuiSolarArrayController.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.gui; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.client.gui.container.GuiContainerGC; +import micdoodle8.mods.galacticraft.core.client.gui.element.GuiElementInfoRegion; +import micdoodle8.mods.galacticraft.core.energy.EnergyDisplayHelper; +import micdoodle8.mods.galacticraft.core.network.PacketSimple; +import micdoodle8.mods.galacticraft.core.network.PacketSimple.EnumSimplePacket; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.inventory.ContainerSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GuiSolarArrayController extends GuiContainerGC +{ + + private static final ResourceLocation solarGuiTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/gui/solar_array_controller.png"); + + private final TileEntitySolarArrayController solarController; + + private GuiButton buttonEnableSolar; + private GuiElementInfoRegion electricInfoRegion = + new GuiElementInfoRegion((this.width - this.xSize) / 2 + 107, (this.height - this.ySize) / 2 + 101, 56, 9, new ArrayList(), this.width, this.height, this); + + public GuiSolarArrayController(InventoryPlayer par1InventoryPlayer, TileEntitySolarArrayController solarController) + { + super(new ContainerSolarArrayController(par1InventoryPlayer, solarController)); + this.solarController = solarController; + this.ySize = 209; + this.xSize = 176; + } + + @Override + protected void actionPerformed(GuiButton par1GuiButton) + { + switch (par1GuiButton.id) + { + case 0: + GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(EnumSimplePacket.S_UPDATE_DISABLEABLE_BUTTON, GCCoreUtil.getDimensionID(this.mc.world), new Object[] + {this.solarController.getPos(), 0})); + break; + } + } + + @Override + public void initGui() + { + super.initGui(); + List electricityDesc = new ArrayList(); + electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); + electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + + ((int) Math.floor(this.solarController.getEnergyStoredGC()) + " / " + (int) Math.floor(this.solarController.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + this.electricInfoRegion.xPosition = (this.width - this.xSize) / 2 + 96; + this.electricInfoRegion.yPosition = (this.height - this.ySize) / 2 + 24; + this.electricInfoRegion.parentWidth = this.width; + this.electricInfoRegion.parentHeight = this.height; + this.infoRegions.add(this.electricInfoRegion); + List batterySlotDesc = new ArrayList(); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.0")); + batterySlotDesc.add(GCCoreUtil.translate("gui.battery_slot.desc.1")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 151, (this.height - this.ySize) / 2 + 90, 18, 18, batterySlotDesc, this.width, this.height, this)); + List sunGenDesc = new ArrayList(); + float sunVisible = Math.round((this.solarController.getActualArraySize() / (float) this.solarController.getPossibleArraySize()) * 1000) / 10.0F; + sunGenDesc.add(sunVisible > 0 ? GCCoreUtil.translate("gui.status.sun_visible.name") + ": " + sunVisible + "%" : GCCoreUtil.translate("gui.status.blockedfully.name")); + this.infoRegions.add(new GuiElementInfoRegion((this.width - this.xSize) / 2 + 47, (this.height - this.ySize) / 2 + 20, 18, 18, sunGenDesc, this.width, this.height, this)); + this.buttonList.add(this.buttonEnableSolar = new GuiButton(0, this.width / 2 - 36, this.height / 2 - 11, 72, 20, GCCoreUtil.translate("gui.button.enable.name"))); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + int offsetY = 35; + this.buttonEnableSolar.enabled = this.solarController.disableCooldown == 0; + this.buttonEnableSolar.displayString = !this.solarController.getDisabled(0) ? GCCoreUtil.translate("gui.button.disable.name") : GCCoreUtil.translate("gui.button.enable.name"); + String displayString = this.solarController.getName(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 7, 4210752); + displayString = GCCoreUtil.translate("gui.message.status.name") + ": " + this.getStatus(); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 45 + 23 - 46 + offsetY, 4210752); + displayString = GCCoreUtil.translate("gui.message.generating.name") + ": " + + (this.solarController.generateWatts > 0 ? EnergyDisplayHelper.getEnergyDisplayS(this.solarController.generateWatts) + "/t" : GCCoreUtil.translate("gui.status.not_generating.name")); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 34 + 23 - 46 + offsetY, 4210752); + float boost = Math.round((this.solarController.getSolarBoost() - 1) * 1000) / 10.0F; + displayString = GCCoreUtil.translate("gui.message.environment.name") + ": " + boost + "%"; + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 56 + 23 - 46 + offsetY, 4210752); + displayString = GCCoreUtil.translateWithFormat("gui.message.connected_solar_controller.name", this.solarController.getActualArraySize()); + this.fontRenderer.drawString(displayString, this.xSize / 2 - this.fontRenderer.getStringWidth(displayString) / 2, 67 + 23 - 46 + offsetY, 4210752); + // displayString = + // ElectricityDisplay.getDisplay(this.solarController.getVoltage(), + // ElectricUnit.VOLTAGE); + // this.fontRenderer.drawString(displayString, this.xSize / 2 - + // this.fontRenderer.getStringWidth(displayString) / 2, 68 + 23 - 46 + + // offsetY, 4210752); + this.fontRenderer.drawString(GCCoreUtil.translate("container.inventory"), 8, this.ySize - 94, 4210752); + } + + private String getStatus() + { + if (this.solarController.getDisabled(0)) + { + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.disabled.name"); + } + + if (!this.solarController.getWorld().isDaytime()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedfully.name"); + } + + if (this.solarController.getWorld().isRaining() || this.solarController.getWorld().isThundering()) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.raining.name"); + } + + float sunVisible = (float) Math.floor(this.solarController.getActualArraySize() / (float) this.solarController.getPossibleArraySize()); + + if (sunVisible == 0) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedfully.name"); + } + + if (sunVisible < 1.0F) + { + return EnumColor.DARK_RED + GCCoreUtil.translate("gui.status.blockedpartial.name"); + } + + if (this.solarController.generateWatts > 0) + { + return EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.status.collectingenergy.name"); + } + + return EnumColor.ORANGE + GCCoreUtil.translate("gui.status.unknown.name"); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GuiSolarArrayController.solarGuiTexture); + final int var5 = (this.width - this.xSize) / 2; + final int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + + List electricityDesc = new ArrayList(); + EnergyDisplayHelper.getEnergyDisplayTooltip(this.solarController.getEnergyStoredGC(), this.solarController.getMaxEnergyStoredGC(), electricityDesc); +// electricityDesc.add(GCCoreUtil.translate("gui.energy_storage.desc.0")); +// electricityDesc.add(EnumColor.YELLOW + GCCoreUtil.translate("gui.energy_storage.desc.1") + ((int) Math.floor(this.solarController.getEnergyStoredGC()) + " / " + (int) Math.floor(this.solarController.getMaxEnergyStoredGC()))); + this.electricInfoRegion.tooltipStrings = electricityDesc; + + if (this.solarController.getEnergyStoredGC() > 0) + { + this.drawTexturedModalRect(var5 + 83, var6 + 24, 176, 0, 11, 10); + } + + float sunVisible = (float) Math.floor(this.solarController.getActualArraySize() / (float) this.solarController.getPossibleArraySize()); + + if (sunVisible > 0.0F) + { + this.drawTexturedModalRect(var5 + 48, var6 + 21, 176, 10, 16, 16); + } + + this.drawTexturedModalRect(var5 + 97, var6 + 25, 187, 0, Math.min(this.solarController.getScaledElecticalLevel(54), 54), 7); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelJuicer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelJuicer.java new file mode 100644 index 00000000..01ec2808 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelJuicer.java @@ -0,0 +1,341 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.model; + +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelJuicer extends ModelBase +{ + + private ModelRenderer body1; + private ModelRenderer body2; + private ModelRenderer head; + private ModelRenderer legRightFront1; + private ModelRenderer legRightFront2; + private ModelRenderer legLeftFront1; + private ModelRenderer legLeftFront2; + private ModelRenderer legRightMidFront1; + private ModelRenderer legRightMidFront2; + private ModelRenderer legLeftMidFront1; + private ModelRenderer legLeftMidFront2; + private ModelRenderer legRightMidBack1; + private ModelRenderer legRightMidBack2; + private ModelRenderer legLeftMidBack1; + private ModelRenderer legLeftMidBack2; + private ModelRenderer legRightBack1; + private ModelRenderer legRightBack2; + private ModelRenderer legLeftBack1; + private ModelRenderer legLeftBack2; + private ModelRenderer back; + private ModelRenderer tail0; + private ModelRenderer tail1; + private ModelRenderer stinger; + + private float legLength0; + + public ModelJuicer() + { + textureWidth = 64; + textureHeight = 32; + + body1 = new ModelRenderer(this, 24, 22); + body1.addBox(-3F, -1F, -4F, 6, 2, 8); + body1.setRotationPoint(0F, 0F, 0F); + body1.setTextureSize(64, 32); + body1.mirror = true; + setRotation(body1, 0F, 0F, 0F); + body2 = new ModelRenderer(this, 0, 22); + body2.addBox(-2.5F, -1.5F, -3.5F, 5, 3, 7); + body2.setRotationPoint(0F, 0F, 0F); + body2.setTextureSize(64, 32); + body2.mirror = true; + setRotation(body2, 0F, 0F, 0F); + + head = new ModelRenderer(this, 52, 0); + head.addBox(-1.5F, -1.5F, -1.5F, 3, 3, 3); + head.setRotationPoint(0F, -1F, -4F); + head.setTextureSize(64, 32); + head.mirror = true; + setRotation(head, -0.3717861F, 0F, 0F); + + legRightFront1 = new ModelRenderer(this, 44, 0); + legRightFront1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legRightFront1.setRotationPoint(-2.5F, 0F, -3F); + legRightFront1.setTextureSize(64, 32); + legRightFront1.mirror = true; + setRotation(legRightFront1, 0F, 2.453788F, 1.115358F); + legRightFront2 = new ModelRenderer(this, 30, 0); + legRightFront2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legRightFront2.setRotationPoint(-3.5F, -3F, -4F); + legRightFront2.setTextureSize(64, 32); + legRightFront2.mirror = true; + setRotation(legRightFront2, 0F, 2.825574F, -0.8551081F); + + legLeftFront1 = new ModelRenderer(this, 44, 0); + legLeftFront1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legLeftFront1.setRotationPoint(2.5F, 0F, -3F); + legLeftFront1.setTextureSize(64, 32); + legLeftFront1.mirror = true; + setRotation(legLeftFront1, 0F, 0.7807508F, -1.115358F); + legLeftFront2 = new ModelRenderer(this, 30, 0); + legLeftFront2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legLeftFront2.setRotationPoint(3.5F, -3F, -4F); + legLeftFront2.setTextureSize(64, 32); + legLeftFront2.mirror = true; + setRotation(legLeftFront2, 0F, 0.7063936F, 0.8551081F); + + legRightMidFront1 = new ModelRenderer(this, 44, 0); + legRightMidFront1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legRightMidFront1.setRotationPoint(-2.5F, 0F, -1F); + legRightMidFront1.setTextureSize(64, 32); + legRightMidFront1.mirror = true; + setRotation(legRightMidFront1, 0F, 2.93711F, 1.115358F); + legRightMidFront2 = new ModelRenderer(this, 30, 0); + legRightMidFront2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legRightMidFront2.setRotationPoint(-3.5F, -3F, -1F); + legRightMidFront2.setTextureSize(64, 32); + legRightMidFront2.mirror = true; + setRotation(legRightMidFront2, 0F, 3.011467F, -0.8551081F); + + legLeftMidFront1 = new ModelRenderer(this, 44, 0); + legLeftMidFront1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legLeftMidFront1.setRotationPoint(2.5F, 0F, -1F); + legLeftMidFront1.setTextureSize(64, 32); + legLeftMidFront1.mirror = true; + setRotation(legLeftMidFront1, 0F, 0.1858931F, -1.115358F); + legLeftMidFront2 = new ModelRenderer(this, 30, 0); + legLeftMidFront2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legLeftMidFront2.setRotationPoint(3.5F, -3F, -1F); + legLeftMidFront2.setTextureSize(64, 32); + legLeftMidFront2.mirror = true; + setRotation(legLeftMidFront2, 0F, 0.3346075F, 0.8551081F); + + legRightMidBack1 = new ModelRenderer(this, 44, 0); + legRightMidBack1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legRightMidBack1.setRotationPoint(-2.5F, 0F, 1F); + legRightMidBack1.setTextureSize(64, 32); + legRightMidBack1.mirror = true; + setRotation(legRightMidBack1, 0F, -3.030057F, 1.115358F); + legRightMidBack2 = new ModelRenderer(this, 30, 0); + legRightMidBack2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legRightMidBack2.setRotationPoint(-3.5F, -3F, 1F); + legRightMidBack2.setTextureSize(64, 32); + legRightMidBack2.mirror = true; + setRotation(legRightMidBack2, 0F, -2.974289F, -0.8551081F); + + legLeftMidBack1 = new ModelRenderer(this, 44, 0); + legLeftMidBack1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legLeftMidBack1.setRotationPoint(2.5F, 0F, 1F); + legLeftMidBack1.setTextureSize(64, 32); + legLeftMidBack1.mirror = true; + setRotation(legLeftMidBack1, 0F, -0.0371786F, -1.115358F); + legLeftMidBack2 = new ModelRenderer(this, 30, 0); + legLeftMidBack2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legLeftMidBack2.setRotationPoint(3.5F, -3F, 1F); + legLeftMidBack2.setTextureSize(64, 32); + legLeftMidBack2.mirror = true; + setRotation(legLeftMidBack2, 0F, -0.1487144F, 0.8551081F); + + legRightBack1 = new ModelRenderer(this, 44, 0); + legRightBack1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legRightBack1.setRotationPoint(-2.5F, 0F, 3F); + legRightBack1.setTextureSize(64, 32); + legRightBack1.mirror = true; + setRotation(legRightBack1, 0F, -2.658271F, 1.115358F); + legRightBack2 = new ModelRenderer(this, 30, 0); + legRightBack2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legRightBack2.setRotationPoint(-3.5F, -3F, 4F); + legRightBack2.setTextureSize(64, 32); + legRightBack2.mirror = true; + setRotation(legRightBack2, 0F, -2.788396F, -0.8551081F); + + legLeftBack1 = new ModelRenderer(this, 44, 0); + legLeftBack1.addBox(0F, -0.5F, -0.5F, 3, 1, 1); + legLeftBack1.setRotationPoint(2.5F, 0F, 3F); + legLeftBack1.setTextureSize(64, 32); + legLeftBack1.mirror = true; + setRotation(legLeftBack1, 0F, -0.3346075F, -1.115358F); + legLeftBack2 = new ModelRenderer(this, 30, 0); + legLeftBack2.addBox(0F, -0.5F, -0.5F, 6, 1, 1); + legLeftBack2.setRotationPoint(3.5F, -3F, 3F); + legLeftBack2.setTextureSize(64, 32); + legLeftBack2.mirror = true; + setRotation(legLeftBack2, 0F, -0.5205006F, 0.8551081F); + + back = new ModelRenderer(this, 0, 16); + back.addBox(-1.5F, -0.5F, -2.5F, 3, 1, 5); + back.setRotationPoint(0F, -1.5F, 0F); + back.setTextureSize(64, 32); + back.mirror = true; + setRotation(back, 0F, 0F, 0F); + + tail0 = new ModelRenderer(this, 42, 17); + tail0.addBox(-0.5F, -0.5F, 0F, 1, 1, 4); + tail0.setRotationPoint(0F, -2F, 0F); + tail0.setTextureSize(64, 32); + tail0.mirror = true; + setRotation(tail0, 0.5205006F, 0F, 0F); + tail1 = new ModelRenderer(this, 42, 12); + tail1.addBox(-0.5F, 0F, 0F, 1, 1, 4); + tail1.setRotationPoint(0F, -3F, 3F); + tail1.setTextureSize(64, 32); + tail1.mirror = true; + setRotation(tail1, 2.659407F, 0F, 0F); + stinger = new ModelRenderer(this, 48, 9); + stinger.addBox(-0.5F, -1F, -0.5F, 1, 2, 1); + stinger.setRotationPoint(0F, -5.2F, -1.133333F); + stinger.setTextureSize(64, 32); + stinger.mirror = true; + setRotation(stinger, 1.487144F, 0F, 0F); + + convertToChild(legLeftFront1, legLeftFront2); + convertToChild(legLeftMidFront1, legLeftMidFront2); + convertToChild(legLeftMidBack1, legLeftMidBack2); + convertToChild(legLeftBack1, legLeftBack2); + convertToChild(legRightFront1, legRightFront2); + convertToChild(legRightMidFront1, legRightMidFront2); + convertToChild(legRightMidBack1, legRightMidBack2); + convertToChild(legRightBack1, legRightBack2); + + convertToChild(tail0, tail1); + convertToChild(tail1, stinger); + + this.legLength0 = this.legLeftFront1.cubeList.get(0).posX2 - this.legLeftFront1.cubeList.get(0).posX1; + } + + private void convertToChild(ModelRenderer parent, ModelRenderer child) + { + // move child rotation point to be relative to parent + child.rotationPointX -= parent.rotationPointX; + child.rotationPointY -= parent.rotationPointY; + child.rotationPointZ -= parent.rotationPointZ; + // make rotations relative to parent + child.rotateAngleX -= parent.rotateAngleX; + child.rotateAngleY -= parent.rotateAngleY; + child.rotateAngleZ -= parent.rotateAngleZ; + // create relationship + parent.addChild(child); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + body1.render(f5); + body2.render(f5); + head.render(f5); + legRightMidBack1.render(f5); + legRightFront1.render(f5); + legRightMidFront1.render(f5); + legRightBack1.render(f5); + legLeftBack1.render(f5); + legLeftMidBack1.render(f5); + legLeftMidFront1.render(f5); + legLeftFront1.render(f5); + back.render(f5); + tail0.render(f5); + } + + private void copyLegAngles(ModelRenderer parent, ModelRenderer child) + { + child.rotationPointX = this.legLength0 * (parent.rotationPointX < 0.0F ? -1.0F : 1.0F) * (MathHelper.sin(parent.rotateAngleX) + MathHelper.cos(parent.rotateAngleY)); + child.rotationPointY = 0.0F; + child.rotationPointZ = 0.0F; + } + + private void copyLeftToRight(ModelRenderer left, ModelRenderer right) + { + right.rotateAngleX = left.rotateAngleX; + right.rotateAngleY = -left.rotateAngleY; + right.rotateAngleZ = left.rotateAngleZ; + } + + private void copyLeg1LeftToRight(ModelRenderer left, ModelRenderer right) + { + right.rotateAngleX = left.rotateAngleX; + right.rotateAngleY = (float) (Math.PI - left.rotateAngleY); + right.rotateAngleZ = -left.rotateAngleZ; + } + + @Override + public void setRotationAngles(float f1, float f2, float f3, float f4, float f5, float f6, Entity entityIn) + { + EntityJuicer juicer = (EntityJuicer) entityIn; + super.setRotationAngles(f1, f2, f3, f4, f5, f6, entityIn); + float movement = f1; + float increment = -1.0F; + float offset = 0.5F; + this.legLeftFront1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.legLeftFront1.rotateAngleZ = (float) (-Math.PI / 3.0F); + this.legLeftFront2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; + this.legLeftFront2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); + offset = 0.05F; + movement += increment; + this.legLeftMidFront1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.legLeftMidFront1.rotateAngleZ = (float) (-Math.PI / 3.0F); + this.legLeftMidFront2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; + this.legLeftMidFront2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); + offset = -0.1F; + movement += increment; + this.legLeftMidBack1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.legLeftMidBack1.rotateAngleZ = (float) (-Math.PI / 3.0F); + this.legLeftMidBack2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; + this.legLeftMidBack2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); + offset = -0.5F; + movement += increment; + this.legLeftBack1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.legLeftBack1.rotateAngleZ = (float) (-Math.PI / 3.0F); + this.legLeftBack2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; + this.legLeftBack2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); + + this.copyLegAngles(legLeftFront1, legLeftFront2); + this.copyLegAngles(legLeftMidFront1, legLeftMidFront2); + this.copyLegAngles(legLeftMidBack1, legLeftMidBack2); + this.copyLegAngles(legLeftBack1, legLeftBack2); + this.copyLegAngles(legRightFront1, legRightFront2); + this.copyLegAngles(legRightMidFront1, legRightMidFront2); + this.copyLegAngles(legRightMidBack1, legRightMidBack2); + this.copyLegAngles(legRightBack1, legRightBack2); + + this.copyLeg1LeftToRight(legLeftFront1, legRightFront1); + this.copyLeg1LeftToRight(legLeftMidFront1, legRightMidFront1); + this.copyLeg1LeftToRight(legLeftMidBack1, legRightMidBack1); + this.copyLeg1LeftToRight(legLeftBack1, legRightBack1); + this.copyLeftToRight(legLeftFront2, legRightFront2); + this.copyLeftToRight(legLeftMidFront2, legRightMidFront2); + this.copyLeftToRight(legLeftMidBack2, legRightMidBack2); + this.copyLeftToRight(legLeftBack2, legRightBack2); + + this.tail0.rotationPointY = -1.5F; + this.tail0.offsetY = 0.0F; +// this.tail0.rotateAngleX = MathHelper.cos(movement) * 0.2F + 0.5205006F; + this.tail0.rotateAngleX = juicer.getAttackingEntity() != null ? 0.52F : 0.1F; + this.tail0.rotateAngleY = 0.0F; + this.tail0.rotateAngleZ = 0.0F; + this.tail1.rotateAngleX = juicer.getAttackingEntity() != null ? 2.659407F : 2.7F; + this.tail1.rotationPointZ = 4 * (MathHelper.sin(this.tail0.rotateAngleZ) + MathHelper.cos(this.tail0.rotateAngleY)); + this.tail1.rotationPointY = 0.5F; + this.tail1.rotationPointX = 0.0F; + this.stinger.rotateAngleX = -this.tail0.rotateAngleX - (this.tail0.rotateAngleX - 2.659407F) - 0.5205006F; + this.stinger.rotationPointZ = 4 * (MathHelper.sin(this.tail1.rotateAngleZ) + MathHelper.cos(this.tail1.rotateAngleY)); + this.stinger.rotationPointY = 0.5F; + this.stinger.rotationPointX = 0.0F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelSpiderQueen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelSpiderQueen.java new file mode 100644 index 00000000..c745c980 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/model/ModelSpiderQueen.java @@ -0,0 +1,467 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.model; + +import micdoodle8.mods.galacticraft.core.client.model.ModelRendererGC; +import net.minecraft.client.model.ModelBase; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +public class ModelSpiderQueen extends ModelBase +{ + + ModelRendererGC head; + ModelRendererGC body; + ModelRendererGC[] leg1 = new ModelRendererGC[3]; + ModelRendererGC[] leg2 = new ModelRendererGC[3]; + ModelRendererGC[] leg3 = new ModelRendererGC[3]; + ModelRendererGC[] leg4 = new ModelRendererGC[3]; + ModelRendererGC[] leg5 = new ModelRendererGC[3]; + ModelRendererGC[] leg6 = new ModelRendererGC[3]; + ModelRendererGC[] leg7 = new ModelRendererGC[3]; + ModelRendererGC[] leg8 = new ModelRendererGC[3]; + ModelRendererGC rearEnd; + ModelRendererGC rearBack; + ModelRendererGC rearLeft; + ModelRendererGC rearRight; + + private float legLength0; + + public ModelSpiderQueen() + { + textureWidth = 64; + textureHeight = 64; + + head = new ModelRendererGC(this, 32, 4); + head.addBox(-4F, -4F, -8F, 8, 8, 8); + head.setRotationPoint(0F, 20F, -3F); + head.setTextureSize(64, 64); + head.mirror = true; + setRotation(head, 0F, 0F, 0F); + body = new ModelRendererGC(this, 0, 0); + body.addBox(-3F, -3F, -3F, 6, 6, 10); + body.setRotationPoint(0F, 20F, 0F); + body.setTextureSize(64, 64); + body.mirror = true; + setRotation(body, 0F, 0F, 0F); + + leg1[0] = new ModelRendererGC(this, 28, 0); + leg1[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg1[0].setRotationPoint(-3F, 20F, 4F); + leg1[0].setTextureSize(64, 64); + leg1[0].mirror = true; + setRotation(leg1[0], 0F, 3.631943F, -0.7330383F); + leg1[0].mirror = true; + leg1[1] = new ModelRendererGC(this, 28, 0); + leg1[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg1[1].setRotationPoint(-9.7F, 13.2F, 7.6F); + leg1[1].setTextureSize(64, 64); + leg1[1].mirror = true; + setRotation(leg1[1], 0F, 3.631937F, 0.3823201F); + leg1[2] = new ModelRendererGC(this, 28, 0); + leg1[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg1[2].setRotationPoint(-16.4F, 16.2F, 11.1F); + leg1[2].setTextureSize(64, 64); + leg1[2].mirror = true; + setRotation(leg1[2], 0F, 3.631937F, 1.461656F); + + leg2[0] = new ModelRendererGC(this, 28, 0); + leg2[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg2[0].setRotationPoint(3F, 20F, 4F); + leg2[0].setTextureSize(64, 64); + leg2[0].mirror = true; + setRotation(leg2[0], 0F, -0.4903446F, -0.7330383F); + leg2[1] = new ModelRendererGC(this, 28, 0); + leg2[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg2[1].setRotationPoint(9.666667F, 13.2F, 7.6F); + leg2[1].setTextureSize(64, 64); + leg2[1].mirror = true; + setRotation(leg2[1], 0F, -0.4903503F, 0.3823201F); + leg2[2] = new ModelRendererGC(this, 28, 0); + leg2[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg2[2].setRotationPoint(16.4F, 16.2F, 11.1F); + leg2[2].setTextureSize(64, 64); + leg2[2].mirror = true; + setRotation(leg2[2], 0F, -0.4903503F, 1.461656F); + + leg3[0] = new ModelRendererGC(this, 28, 0); + leg3[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg3[0].setRotationPoint(-3F, 20F, 2F); + leg3[0].setTextureSize(64, 64); + leg3[0].mirror = true; + setRotation(leg3[0], 0F, 3.335237F, -0.7330383F); + leg3[1] = new ModelRendererGC(this, 28, 0); + leg3[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg3[1].setRotationPoint(-10.7F, 13.2F, 3.6F); + leg3[1].setTextureSize(64, 64); + leg3[1].mirror = true; + setRotation(leg3[1], 0F, 3.335231F, 0.3823201F); + leg3[1].mirror = false; + leg3[2] = new ModelRendererGC(this, 28, 0); + leg3[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg3[2].setRotationPoint(-17.6F, 16.2F, 4.9F); + leg3[2].setTextureSize(64, 64); + leg3[2].mirror = true; + setRotation(leg3[2], 0F, 3.335231F, 1.461656F); + + leg4[0] = new ModelRendererGC(this, 28, 0); + leg4[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg4[0].setRotationPoint(3F, 20F, 2F); + leg4[0].setTextureSize(64, 64); + leg4[0].mirror = true; + setRotation(leg4[0], 0F, -0.1936386F, -0.7330383F); + leg4[1] = new ModelRendererGC(this, 28, 0); + leg4[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg4[1].setRotationPoint(10.66667F, 13.2F, 3.6F); + leg4[1].setTextureSize(64, 64); + leg4[1].mirror = true; + setRotation(leg4[1], 0F, -0.1936443F, 0.3823201F); + leg4[2] = new ModelRendererGC(this, 28, 0); + leg4[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg4[2].setRotationPoint(17.6F, 16.2F, 4.9F); + leg4[2].setTextureSize(64, 64); + leg4[2].mirror = true; + setRotation(leg4[2], 0F, -0.1936443F, 1.461656F); + + leg5[0] = new ModelRendererGC(this, 28, 0); + leg5[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg5[0].setRotationPoint(-3F, 20F, 0.5F); + leg5[0].setTextureSize(64, 64); + leg5[0].mirror = true; + setRotation(leg5[0], 0F, 2.7838F, -0.7330383F); + leg5[1] = new ModelRendererGC(this, 28, 0); + leg5[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg5[1].setRotationPoint(-10F, 13.2F, -2.2F); + leg5[1].setTextureSize(64, 64); + leg5[1].mirror = true; + setRotation(leg5[1], 0F, 2.783794F, 0.3823201F); + leg5[1].mirror = false; + leg5[2] = new ModelRendererGC(this, 28, 0); + leg5[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg5[2].setRotationPoint(-16.5F, 16.2F, -4.7F); + leg5[2].setTextureSize(64, 64); + leg5[2].mirror = true; + setRotation(leg5[2], 0F, 2.783794F, 1.461656F); + + leg6[0] = new ModelRendererGC(this, 28, 0); + leg6[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg6[0].setRotationPoint(3F, 20F, 0.5F); + leg6[0].setTextureSize(64, 64); + leg6[0].mirror = true; + setRotation(leg6[0], 0F, 0.3648668F, -0.7330383F); + leg6[1] = new ModelRendererGC(this, 28, 0); + leg6[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg6[1].setRotationPoint(10F, 13.2F, -2.2F); + leg6[1].setTextureSize(64, 64); + leg6[1].mirror = true; + setRotation(leg6[1], 0F, 0.3648611F, 0.3823201F); + leg6[2] = new ModelRendererGC(this, 28, 0); + leg6[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg6[2].setRotationPoint(16.53333F, 16.2F, -4.7F); + leg6[2].setTextureSize(64, 64); + leg6[2].mirror = true; + setRotation(leg6[2], 0F, 0.3648611F, 1.461656F); + + leg7[0] = new ModelRendererGC(this, 28, 0); + leg7[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg7[0].setRotationPoint(-3F, 20F, -2F); + leg7[0].setTextureSize(64, 64); + leg7[0].mirror = true; + setRotation(leg7[0], 0F, 2.495821F, -0.7330383F); + leg7[1] = new ModelRendererGC(this, 28, 0); + leg7[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg7[1].setRotationPoint(-8.8F, 13.33333F, -6.466667F); + leg7[1].setTextureSize(64, 64); + leg7[1].mirror = true; + setRotation(leg7[1], 0F, 2.495821F, 0.4206553F); + leg7[2] = new ModelRendererGC(this, 28, 0); + leg7[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg7[2].setRotationPoint(-14.5F, 16.66667F, -10.9F); + leg7[2].setTextureSize(64, 64); + leg7[2].mirror = true; + setRotation(leg7[2], 0F, 2.495821F, 1.201406F); + + leg8[0] = new ModelRendererGC(this, 28, 0); + leg8[0].addBox(0F, -1F, -1F, 10, 2, 2); + leg8[0].setRotationPoint(3F, 20F, -2F); + leg8[0].setTextureSize(64, 64); + leg8[0].mirror = true; + setRotation(leg8[0], 0F, 0.6615727F, -0.7330383F); + leg8[1] = new ModelRendererGC(this, 28, 0); + leg8[1].addBox(0F, -1F, -1F, 8, 2, 2); + leg8[1].setRotationPoint(8.8F, 13.33333F, -6.466667F); + leg8[1].setTextureSize(64, 64); + leg8[1].mirror = true; + setRotation(leg8[1], 0F, 0.6368846F, 0.4206553F); + leg8[2] = new ModelRendererGC(this, 28, 0); + leg8[2].addBox(0F, -1F, -1F, 8, 2, 2); + leg8[2].setRotationPoint(14.53333F, 16.66667F, -10.9F); + leg8[2].setTextureSize(64, 64); + leg8[2].mirror = true; + setRotation(leg8[2], 0F, 0.6615671F, 1.201406F); + + rearEnd = new ModelRendererGC(this, 0, 41); + rearEnd.addBox(-6F, -7F, -6F, 12, 11, 12); + rearEnd.setRotationPoint(0F, 20F, 13F); + rearEnd.setTextureSize(64, 64); + rearEnd.mirror = true; + setRotation(rearEnd, 0F, 0F, 0F); + rearBack = new ModelRendererGC(this, 26, 31); + rearBack.addBox(-5F, -6F, 6F, 10, 9, 1); + rearBack.setRotationPoint(0F, 20F, 13F); + rearBack.setTextureSize(64, 64); + rearBack.mirror = true; + setRotation(rearBack, 0F, 0F, 0F); + rearLeft = new ModelRendererGC(this, 0, 22); + rearLeft.addBox(6F, -6F, -5F, 1, 9, 10); + rearLeft.setRotationPoint(0F, 20F, 13F); + rearLeft.setTextureSize(64, 64); + rearLeft.mirror = true; + setRotation(rearLeft, 0F, 0F, 0F); + rearRight = new ModelRendererGC(this, 0, 22); + rearRight.addBox(-7F, -6F, -5F, 1, 9, 10); + rearRight.setRotationPoint(0F, 20F, 13F); + rearRight.setTextureSize(64, 64); + rearRight.mirror = true; + setRotation(rearRight, 0F, 0F, 0F); + + for (int i = 0; i < 2; ++i) + { + this.convertToChild(this.leg1[i], this.leg1[i + 1]); + this.convertToChild(this.leg2[i], this.leg2[i + 1]); + this.convertToChild(this.leg3[i], this.leg3[i + 1]); + this.convertToChild(this.leg4[i], this.leg4[i + 1]); + this.convertToChild(this.leg5[i], this.leg5[i + 1]); + this.convertToChild(this.leg6[i], this.leg6[i + 1]); + this.convertToChild(this.leg7[i], this.leg7[i + 1]); + this.convertToChild(this.leg8[i], this.leg8[i + 1]); + } + + this.legLength0 = this.leg1[0].cubeList.get(0).posX2 - this.leg1[0].cubeList.get(0).posX1; + } + + private void convertToChild(ModelRendererGC parent, ModelRendererGC child) + { +// // move child rotation point to be relative to parent +// child.rotationPointX -= parent.rotationPointX; +// child.rotationPointY -= parent.rotationPointY; +// child.rotationPointZ -= parent.rotationPointZ; +// // make rotations relative to parent +// child.rotateAngleX -= parent.rotateAngleX; +// child.rotateAngleY -= parent.rotateAngleY; +// child.rotateAngleZ -= parent.rotateAngleZ; +// // create relationship +// parent.addChild(child); + } + + private void setRotation(ModelRendererGC model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + head.render(f5); + body.render(f5); + for (int i = 0; i < 3; ++i) + { + this.leg1[i].render(f5); + this.leg2[i].render(f5); + this.leg3[i].render(f5); + this.leg4[i].render(f5); + this.leg5[i].render(f5); + this.leg6[i].render(f5); + this.leg7[i].render(f5); + this.leg8[i].render(f5); + } + rearEnd.render(f5); + rearBack.render(f5); + rearLeft.render(f5); + rearRight.render(f5); + } + + private void copyLegAngles(float length, ModelRendererGC parent, ModelRendererGC child) + { + child.rotationPointX = parent.rotationPointX + length * (MathHelper.cos(parent.rotateAngleZ) * MathHelper.cos(parent.rotateAngleY)); + child.rotationPointY = parent.rotationPointY + length * (MathHelper.sin(parent.rotateAngleZ)); + child.rotationPointZ = parent.rotationPointZ + (length) * (-MathHelper.sin(parent.rotateAngleY) * MathHelper.cos(parent.rotateAngleZ)); + } + + private void copyLeftToRight(ModelRendererGC left, ModelRendererGC right) + { + right.rotateAngleX = left.rotateAngleX; + right.rotateAngleY = -left.rotateAngleY; + right.rotateAngleZ = left.rotateAngleZ; + } + + private void copyLeg1LeftToRight(ModelRendererGC left, ModelRendererGC right) + { + right.rotateAngleX = left.rotateAngleX; + right.rotateAngleY = (float) (Math.PI - left.rotateAngleY); + right.rotateAngleZ = left.rotateAngleZ; + } + + @Override + public void setRotationAngles(float f1, float f2, float f3, float f4, float f5, float f6, Entity entityIn) + { + float movement = f1; + float increment = -1.0F; + float offset = -0.4903446F; + this.leg2[0].rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.leg2[0].rotateAngleZ = -0.7330383F; + offset = -0.1936386F; + movement += increment; + this.leg4[0].rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.leg4[0].rotateAngleZ = -0.7330383F; + offset = 0.3648668F; + movement += increment; + this.leg6[0].rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.leg6[0].rotateAngleZ = -0.7330383F; + offset = 0.6615727F; + movement += increment; + this.leg8[0].rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; + this.leg8[0].rotateAngleZ = -0.7330383F; + + float updist = -0.5F; + + // Move legs up if they are being moved forward. dx/dy of cos(movement) + // is -sin(movement) + movement = f1; + if (-MathHelper.sin(movement) * 0.2 > 0.0F) + { + this.leg2[0].rotateAngleZ = -0.7330383F + -MathHelper.sin(movement) * updist; + } + movement += increment; + if (-MathHelper.sin(movement) * 0.2 > 0.0F) + { + this.leg4[0].rotateAngleZ = -0.7330383F + -MathHelper.sin(movement) * updist; + } + movement += increment; + if (-MathHelper.sin(movement) * 0.2 > 0.0F) + { + this.leg6[0].rotateAngleZ = -0.7330383F + -MathHelper.sin(movement) * updist; + } + movement += increment; + if (-MathHelper.sin(movement) * 0.2 > 0.0F) + { + this.leg8[0].rotateAngleZ = -0.7330383F + -MathHelper.sin(movement) * updist; + } + + for (int i = 1; i < 3; ++i) + { + this.leg1[i].rotateAngleY = this.leg1[0].rotateAngleY; + this.leg2[i].rotateAngleY = this.leg2[0].rotateAngleY; + this.leg3[i].rotateAngleY = this.leg3[0].rotateAngleY; + this.leg4[i].rotateAngleY = this.leg4[0].rotateAngleY; + this.leg5[i].rotateAngleY = this.leg5[0].rotateAngleY; + this.leg6[i].rotateAngleY = this.leg6[0].rotateAngleY; + this.leg7[i].rotateAngleY = this.leg7[0].rotateAngleY; + this.leg8[i].rotateAngleY = this.leg8[0].rotateAngleY; + + this.leg1[i].rotateAngleX = this.leg1[0].rotateAngleX; + this.leg2[i].rotateAngleX = this.leg2[0].rotateAngleX; + this.leg3[i].rotateAngleX = this.leg3[0].rotateAngleX; + this.leg4[i].rotateAngleX = this.leg4[0].rotateAngleX; + this.leg5[i].rotateAngleX = this.leg5[0].rotateAngleX; + this.leg6[i].rotateAngleX = this.leg6[0].rotateAngleX; + this.leg7[i].rotateAngleX = this.leg7[0].rotateAngleX; + this.leg8[i].rotateAngleX = this.leg8[0].rotateAngleX; + +// this.leg1[i].rotateAngleZ = this.leg1[0].rotateAngleZ; +// this.leg2[i].rotateAngleZ = this.leg2[0].rotateAngleZ; +// this.leg3[i].rotateAngleZ = this.leg3[0].rotateAngleZ; +// this.leg4[i].rotateAngleZ = this.leg4[0].rotateAngleZ; +// this.leg5[i].rotateAngleZ = this.leg5[0].rotateAngleZ; +// this.leg6[i].rotateAngleZ = this.leg6[0].rotateAngleZ; +// this.leg7[i].rotateAngleZ = this.leg7[0].rotateAngleZ; +// this.leg8[i].rotateAngleZ = this.leg8[0].rotateAngleZ; + } + + for (int i = 0; i < 1; ++i) + { + this.copyLeg1LeftToRight(this.leg2[i], this.leg1[i]); + this.copyLeg1LeftToRight(this.leg4[i], this.leg3[i]); + this.copyLeg1LeftToRight(this.leg6[i], this.leg5[i]); + this.copyLeg1LeftToRight(this.leg8[i], this.leg7[i]); + } + for (int i = 1; i < 2; ++i) + { + float length1a = 10.0F; + float length1b = 10.0F; + this.copyLegAngles(length1a, this.leg1[0], this.leg1[1]); + this.copyLegAngles(length1b, this.leg2[0], this.leg2[1]); + this.copyLegAngles(length1a, this.leg3[0], this.leg3[1]); + this.copyLegAngles(length1b, this.leg4[0], this.leg4[1]); + this.copyLegAngles(length1a, this.leg5[0], this.leg5[1]); + this.copyLegAngles(length1b, this.leg6[0], this.leg6[1]); + this.copyLegAngles(length1a, this.leg7[0], this.leg7[1]); + this.copyLegAngles(length1b, this.leg8[0], this.leg8[1]); + + float length2a = 8.0F; + float length2b = 8.0F; + this.copyLegAngles(length2a, this.leg1[1], this.leg1[2]); + this.copyLegAngles(length2b, this.leg2[1], this.leg2[2]); + this.copyLegAngles(length2a, this.leg3[1], this.leg3[2]); + this.copyLegAngles(length2b, this.leg4[1], this.leg4[2]); + this.copyLegAngles(length2a, this.leg5[1], this.leg5[2]); + this.copyLegAngles(length2b, this.leg6[1], this.leg6[2]); + this.copyLegAngles(length2a, this.leg7[1], this.leg7[2]); + this.copyLegAngles(length2b, this.leg8[1], this.leg8[2]); + } +// EntityJuicer juicer = (EntityJuicer) entityIn; +// super.setRotationAngles(f1, f2, f3, f4, f5, f6, entityIn); +// float movement = f1; +// float increment = -1.0F; +// float offset = 0.5F; +// this.legLeftFront1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; +// this.legLeftFront1.rotateAngleZ = (float) (-Math.PI / 3.0F); +// this.legLeftFront2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; +// this.legLeftFront2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); +// offset = 0.05F; +// movement += increment; +// this.legLeftMidFront1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; +// this.legLeftMidFront1.rotateAngleZ = (float) (-Math.PI / 3.0F); +// this.legLeftMidFront2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; +// this.legLeftMidFront2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); +// offset = -0.1F; +// movement += increment; +// this.legLeftMidBack1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; +// this.legLeftMidBack1.rotateAngleZ = (float) (-Math.PI / 3.0F); +// this.legLeftMidBack2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; +// this.legLeftMidBack2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); +// offset = -0.5F; +// movement += increment; +// this.legLeftBack1.rotateAngleY = MathHelper.cos(movement) * 0.2F + offset; +// this.legLeftBack1.rotateAngleZ = (float) (-Math.PI / 3.0F); +// this.legLeftBack2.rotateAngleY = MathHelper.cos(movement) * 0.5F + offset; +// this.legLeftBack2.rotateAngleZ = (float) (2 * Math.PI / 3.0F); +// +// this.copyLegAngles(legLeftFront1, legLeftFront2); +// this.copyLegAngles(legLeftMidFront1, legLeftMidFront2); +// this.copyLegAngles(legLeftMidBack1, legLeftMidBack2); +// this.copyLegAngles(legLeftBack1, legLeftBack2); +// this.copyLegAngles(legRightFront1, legRightFront2); +// this.copyLegAngles(legRightMidFront1, legRightMidFront2); +// this.copyLegAngles(legRightMidBack1, legRightMidBack2); +// this.copyLegAngles(legRightBack1, legRightBack2); +// +// this.copyLeg1LeftToRight(legLeftFront1, legRightFront1); +// this.copyLeg1LeftToRight(legLeftMidFront1, legRightMidFront1); +// this.copyLeg1LeftToRight(legLeftMidBack1, legRightMidBack1); +// this.copyLeg1LeftToRight(legLeftBack1, legRightBack1); +// this.copyLeftToRight(legLeftFront2, legRightFront2); +// this.copyLeftToRight(legLeftMidFront2, legRightMidFront2); +// this.copyLeftToRight(legLeftMidBack2, legRightMidBack2); +// this.copyLeftToRight(legLeftBack2, legRightBack2); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderEntryPodVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderEntryPodVenus.java new file mode 100644 index 00000000..a1da7ca0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderEntryPodVenus.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.entity; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.ColorUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.mars.client.model.ModelBalloonParachute; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityEntryPodVenus; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import org.lwjgl.opengl.GL11; + +public class RenderEntryPodVenus extends Render +{ + + private OBJModel.OBJBakedModel modelEntryPod; + private OBJModel.OBJBakedModel modelFlame; + protected ModelBalloonParachute parachuteModel = new ModelBalloonParachute(); + + public RenderEntryPodVenus(RenderManager manager) + { + super(manager); + } + + private void updateModels() + { + if (modelEntryPod == null) + { + try + { + IModel model = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "pod_flame.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + modelEntryPod = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("PodBody"), false), DefaultVertexFormats.ITEM, spriteFunction); + modelFlame = (OBJModel.OBJBakedModel) model.bake(new OBJModel.OBJState(ImmutableList.of("Flame_Sphere"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + public void doRender(EntityEntryPodVenus entityEntryPod, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.disableRescaleNormal(); + GlStateManager.pushMatrix(); + final float var24 = entityEntryPod.prevRotationPitch + (entityEntryPod.rotationPitch - entityEntryPod.prevRotationPitch) * partialTicks; + final float var25 = entityEntryPod.prevRotationYaw + (entityEntryPod.rotationYaw - entityEntryPod.prevRotationYaw) * partialTicks; + + GlStateManager.translate((float) x, (float) y, (float) z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F - var24, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(-var25, 0.0F, 1.0F, 0.0F); + + this.updateModels(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.scale(0.65F, 0.6F, 0.65F); + ClientUtil.drawBakedModel(modelEntryPod); + + if (entityEntryPod.posY > 382.0F) + { + RenderHelper.disableStandardItemLighting(); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GlStateManager.cullFace(GlStateManager.CullFace.FRONT); + + int color = ColorUtil.to32BitColor(entityEntryPod.posY >= 790.0F ? 255 : (int) Math.max(Math.min(255, -(entityEntryPod.motionY + 0.6F) * 100.0F), 0), 255, 255, 255); + + GlStateManager.pushMatrix(); + float val = (float) (Math.sin(entityEntryPod.ticksExisted) / 20.0F + 0.5F); + GlStateManager.scale(1.0F, 1.0F + val, 1.0F); + GlStateManager.rotate(entityEntryPod.ticksExisted * 20.0F, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModelColored(modelFlame, color); + GlStateManager.popMatrix(); + + GlStateManager.scale(1.0F, 1.0F + val / 6.0F, 1.0F); + GlStateManager.rotate(entityEntryPod.ticksExisted * 5.0F, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModelColored(modelFlame, color); + + GlStateManager.cullFace(GlStateManager.CullFace.BACK); + GlStateManager.enableCull(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.enableStandardItemLighting(); + } + + if (entityEntryPod.getGroundPosY() != null && entityEntryPod.posY - entityEntryPod.getGroundPosY() > 5.0F && entityEntryPod.posY <= 242.0F) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(-1.4F, 1.5F, -0.3F); + GlStateManager.scale(2.5F, 3.0F, 2.5F); + this.parachuteModel.renderAll(); + GlStateManager.popMatrix(); + } + GlStateManager.popMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityEntryPodVenus entityEntryPod) + { + return new ResourceLocation("missing"); + } + + @Override + public boolean shouldRender(EntityEntryPodVenus lander, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = lander.getEntityBoundingBox().grow(1D, 2D, 1D); + return lander.isInRangeToRender3d(camX, camY, camZ) && camera.isBoundingBoxInFrustum(axisalignedbb); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderJuicer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderJuicer.java new file mode 100644 index 00000000..4c538741 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderJuicer.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.entity; + +import micdoodle8.mods.galacticraft.core.client.gui.overlay.OverlaySensorGlasses; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.client.model.ModelJuicer; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderJuicer extends RenderLiving +{ + + private static final ResourceLocation juicerTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/juicer.png"); + private boolean texSwitch; + + public RenderJuicer(RenderManager renderManager) + { + super(renderManager, new ModelJuicer(), 0.5F); + } + + @Override + protected void preRenderCallback(EntityJuicer entity, float partialTickTime) + { + GlStateManager.rotate(entity.isHanging() ? 180.0F : 0.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, entity.isHanging() ? 1.8F : 1.3F, 0.0F); + super.preRenderCallback(entity, partialTickTime); + if (texSwitch) + { + OverlaySensorGlasses.preRenderMobs(); + } + } + + @Override + public void doRender(EntityJuicer entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + if (OverlaySensorGlasses.overrideMobTexture()) + { + texSwitch = true; + super.doRender(entity, x, y, z, entityYaw, partialTicks); + texSwitch = false; + OverlaySensorGlasses.postRenderMobs(); + } + } + + @Override + protected ResourceLocation getEntityTexture(EntityJuicer juicer) + { + return texSwitch ? OverlaySensorGlasses.altTexture : juicerTexture; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderSpiderQueen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderSpiderQueen.java new file mode 100644 index 00000000..1910fc59 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderSpiderQueen.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.entity; + +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.client.model.ModelSpiderQueen; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntitySpiderQueen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderSpiderQueen extends RenderLiving +{ + + private static final ResourceLocation spiderTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/spider_queen.png"); + public static IBakedModel webModel; + + public RenderSpiderQueen(RenderManager renderManager) + { + super(renderManager, new ModelSpiderQueen(), 1.0F); + } + + private void updateModels() + { + if (webModel == null) + { + try + { + webModel = ClientUtil.modelFromOBJ(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "web.obj"), ImmutableList.of("Sphere")); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + } + + @Override + protected void preRenderCallback(EntitySpiderQueen entity, float partialTickTime) + { + if (entity.getBurrowedCount() >= 0) + { + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, entity.height, 0.0F); + } + GL11.glScalef(1.5F, 1.5F, 1.5F); + GL11.glRotatef((float) (Math.pow(entity.deathTicks, 2) / 5.0F + (Math.pow(entity.deathTicks, 2) / 5.0F - Math.pow(entity.deathTicks - 1, 2) / 5.0F) * partialTickTime), 0.0F, 1.0F, 0.0F); + super.preRenderCallback(entity, partialTickTime); + } + + @Override + public void doRender(EntitySpiderQueen entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + + GL11.glPushMatrix(); + GL11.glTranslatef((float) x, (float) y + 0.8F, (float) z); + GL11.glScalef(1.4F, 1.5F, 1.4F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + this.updateModels(); + + RenderHelper.disableStandardItemLighting(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + if (entity.getBurrowedCount() >= 0) + { + GL11.glDisable(GL11.GL_CULL_FACE); + ClientUtil.drawBakedModel(webModel); + GL11.glScalef(1.05F, 1.1F, 1.05F); + GL11.glRotatef(192.5F, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModel(webModel); + GL11.glEnable(GL11.GL_CULL_FACE); + } + + RenderHelper.enableStandardItemLighting(); + + GL11.glPopMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(EntitySpiderQueen juicer) + { + return spiderTexture; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderWebShot.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderWebShot.java new file mode 100644 index 00000000..3c0a2495 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/entity/RenderWebShot.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.entity; + +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityWebShot; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderWebShot extends Render +{ + + public RenderWebShot(RenderManager renderManager) + { + super(renderManager); + this.shadowSize = 0.5F; + } + + @Override + public void doRender(EntityWebShot entity, double x, double y, double z, float par8, float partialTicks) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y + 0.5F, (float) z); + this.bindEntityTexture(entity); + GlStateManager.rotate((entity.ticksExisted + partialTicks) * 50.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(-0.5F, -1F, 0.5F); + blockrendererdispatcher.renderBlockBrightness(Blocks.WEB.getDefaultState(), 1.0F); + GlStateManager.translate(0.0F, 0.0F, 1.0F); + GlStateManager.popMatrix(); + RenderHelper.enableStandardItemLighting(); + } + + @Override + protected ResourceLocation getEntityTexture(EntityWebShot entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityLaserTurretRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityLaserTurretRenderer.java new file mode 100644 index 00000000..6b09fd0c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityLaserTurretRenderer.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.tile; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.client.model.OBJLoaderGC; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.obj.OBJModel; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class TileEntityLaserTurretRenderer extends TileEntitySpecialRenderer +{ + + public static OBJModel.OBJBakedModel laserBase; + public static OBJModel.OBJBakedModel laserPhalange; + public static OBJModel.OBJBakedModel laserPhalangeAxle; + public static OBJModel.OBJBakedModel laserTurrets; + public static OBJModel.OBJBakedModel laserTurretsOff; + public static OBJModel.OBJBakedModel orb1; + public static OBJModel.OBJBakedModel orb2; + + public IBakedModel updateModels() + { + if (laserBase == null) + { + try + { + IModel model0 = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "laser.obj")); + IModel model1 = OBJLoaderGC.instance.loadModel(new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "orb.obj")); + Function spriteFunction = location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(location.toString()); + + laserBase = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("baseConnector0", "baseConnector1"), false), DefaultVertexFormats.ITEM, spriteFunction); + laserPhalange = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("phalange"), false), DefaultVertexFormats.ITEM, spriteFunction); + laserPhalangeAxle = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("phalangeAxle"), false), DefaultVertexFormats.ITEM, spriteFunction); + laserTurrets = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("turretLeft", "turretRight"), false), DefaultVertexFormats.ITEM, spriteFunction); + laserTurretsOff = (OBJModel.OBJBakedModel) model0.bake(new OBJModel.OBJState(ImmutableList.of("turretLeft_off", "turretRight_off"), false), DefaultVertexFormats.ITEM, spriteFunction); + orb1 = (OBJModel.OBJBakedModel) model1.bake(new OBJModel.OBJState(ImmutableList.of("inner_Icosphere"), false), DefaultVertexFormats.ITEM, spriteFunction); + orb2 = (OBJModel.OBJBakedModel) model1.bake(new OBJModel.OBJState(ImmutableList.of("outer_Icosphere.001"), false), DefaultVertexFormats.ITEM, spriteFunction); + } catch (Exception e) + { + throw new RuntimeException(e); + } + } + return laserBase; + } + + @Override + public void render(TileEntityLaserTurret tile, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); + GlStateManager.pushMatrix(); + RenderHelper.disableStandardItemLighting(); + + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(GL11.GL_SMOOTH); + } else + { + GlStateManager.shadeModel(GL11.GL_FLAT); + } + + this.updateModels(); + + GlStateManager.scale(1 / 16.0F, 1 / 16.0F, 1 / 16.0F); + + GlStateManager.pushMatrix(); + GlStateManager.scale(0.9F, 1.0F, 0.9F); + ClientUtil.drawBakedModel(laserBase); + GlStateManager.popMatrix(); + + GlStateManager.rotate(tile.yaw, 0.0F, 1.0F, 0.0F); + + // Interpolate between yaw and targetYaw + + float partialRot = Math.signum(tile.pitch) * tile.pitch * (tile.pitch / 120.0F); + GlStateManager.rotate(partialRot, 0.0F, 0.0F, -1.0F); + + GlStateManager.pushMatrix(); + GlStateManager.scale(1.1F, 1.0F, 1.0F); + + ClientUtil.drawBakedModel(laserPhalange); + GlStateManager.popMatrix(); + + GlStateManager.rotate(tile.pitch - partialRot, 0.0F, 0.0F, -1.0F); + + ClientUtil.drawBakedModel(laserPhalangeAxle); + ClientUtil.drawBakedModel(tile.active ? laserTurrets : laserTurretsOff); + + GlStateManager.popMatrix(); + Tessellator tess = Tessellator.getInstance(); + + float inv = (float) (Math.pow(tile.chargeLevel / 5.0F + 1.0F, 2.5F) * 1.0F); + float invNext = (float) (Math.pow((tile.chargeLevel + 1) / 5.0F + 1.0F, 2.5F) * 1.0F); + float rotate = inv + (invNext - inv) * partialTicks; + + float lightMapSaveX = OpenGlHelper.lastBrightnessX; + float lightMapSaveY = OpenGlHelper.lastBrightnessY; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + + if (tile.chargeLevel > 0) + { + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.rotate(tile.yaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(tile.pitch, 0.0F, 0.0F, -1.0F); + GlStateManager.translate(-0.6F, 0.28F, 0.0F); + + GlStateManager.disableTexture2D(); + + tess.getBuffer().begin(GL11.GL_LINE_LOOP, DefaultVertexFormats.POSITION_COLOR); + + tess.getBuffer().pos(0.09F, 0.0F, 0.275F).color(0.0F, 1.0F, 0.0F, 1.0F).endVertex(); + tess.getBuffer().pos(0.0F, 0.0F, 0.0F).color(0.0F, 1.0F, 0.0F, 1.0F).endVertex(); + tess.getBuffer().pos(0.09F, 0.0F, -0.275F).color(0.0F, 1.0F, 0.0F, 1.0F).endVertex(); + + tess.draw(); + GlStateManager.enableTexture2D(); + + float scale = tile.chargeLevel / 600.0F; + GlStateManager.scale(0.01F + scale, 0.01F + scale, 0.01F + scale); + GlStateManager.rotate(rotate, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModel(orb1); + GlStateManager.rotate(rotate, 0.0F, 1.0F, 0.0F); + ClientUtil.drawBakedModel(orb2); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + + if (tile.timeSinceShot > 0 && tile.timeSinceShot < 5) + { + Entity e = tile.getWorld().getEntityByID(tile.targettedEntity); + + if (e != null) + { + GlStateManager.disableTexture2D(); + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.disableCull(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.rotate(tile.yaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(tile.pitch, 0.0F, 0.0F, -1.0F); + GlStateManager.translate(-0.6F, 0.28F, 0.0F); + + BufferBuilder bb = tess.getBuffer(); + + bb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + + Vector3 vec = new Vector3(e.posX, e.posY + e.getEyeHeight(), e.posZ); + vec.translate(new Vector3(-(tile.getPos().getX() + 0.5F), -(tile.getPos().getY() + 1.78F), -(tile.getPos().getZ() + 0.5F))); + float dist = (float) vec.getMagnitude() - 0.8F; + float shotTimer = (float) (Math.pow((5.0F - tile.timeSinceShot) / 5.0F + 1.0F, 2.5F) * 0.5F); + float shotTimerNext = (float) (Math.pow((5.0F - (tile.timeSinceShot + 1)) / 5.0F + 1.0F, 2.5F) * 0.5F); + float fade = shotTimer + (shotTimerNext - shotTimer) * partialTicks; + float yMin = -0.101F * fade; + float yMax = 0.101F * fade; + float yMin1 = -0.15F * fade; + float yMax1 = 0.15F * fade; + + tess.getBuffer().pos(0.0F, yMax, yMax).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(0.0F, yMin, yMin).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMin * 0.4F, yMin * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMax * 0.4F, yMax * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + + tess.getBuffer().pos(0.0F, yMax, yMin).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(0.0F, yMin, yMax).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMin * 0.4F, yMax * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMax * 0.4F, yMin * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + + tess.getBuffer().pos(0.0F, yMax1, yMax1).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(0.0F, yMin1, yMin1).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMin1 * 0.4F, yMin1 * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMax1 * 0.4F, yMax1 * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + + tess.getBuffer().pos(0.0F, yMax1, yMin1).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(0.0F, yMin1, yMax1).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMin1 * 0.4F, yMax1 * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + tess.getBuffer().pos(-dist, yMax1 * 0.4F, yMin1 * 0.4F).color(0.0F, 1.0F, 0.0F, 0.5F).endVertex(); + + tess.draw(); + + GlStateManager.enableCull(); + GlStateManager.enableTexture2D(); + GlStateManager.popMatrix(); + } + } + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightMapSaveX, lightMapSaveY); + GlStateManager.popMatrix(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityTreasureChestRenderer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityTreasureChestRenderer.java new file mode 100644 index 00000000..d373ca79 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/client/render/tile/TileEntityTreasureChestRenderer.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.client.render.tile; + +import micdoodle8.mods.galacticraft.core.client.model.block.ModelTreasureChest; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityTreasureChestVenus; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +@SideOnly(Side.CLIENT) +public class TileEntityTreasureChestRenderer extends TileEntitySpecialRenderer +{ + + private static final ResourceLocation treasureChestTexture = new ResourceLocation(GalacticraftPlanets.ASSET_PREFIX, "textures/model/treasure_venus.png"); + + private final ModelTreasureChest chestModel = new ModelTreasureChest(); + + @Override + public void render(TileEntityTreasureChestVenus chest, double x, double y, double z, float par7, int par8, float alpha) + { + int var9; + + if (!chest.hasWorld()) + { + var9 = 0; + } else + { + var9 = chest.getBlockMetadata(); + } + + this.bindTexture(TileEntityTreasureChestRenderer.treasureChestTexture); + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + short var11 = 0; + + if (var9 == 2) + { + var11 = 180; + } + + if (var9 == 3) + { + var11 = 0; + } + + if (var9 == 4) + { + var11 = 90; + } + + if (var9 == 5) + { + var11 = -90; + } + + GL11.glRotatef(var11, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float var12 = chest.prevLidAngle + (chest.lidAngle - chest.prevLidAngle) * par8; + + var12 = 1.0F - var12; + var12 = 1.0F - var12 * var12 * var12; + + this.chestModel.chestLid.rotateAngleX = -(var12 * (float) Math.PI / 4.0F); + this.chestModel.renderAll(!chest.locked); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/TeleportTypeVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/TeleportTypeVenus.java new file mode 100644 index 00000000..599d12d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/TeleportTypeVenus.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.dimension; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.util.CompatibilityManager; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityEntryPodVenus; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +public class TeleportTypeVenus implements ITeleportType +{ + + @Override + public boolean useParachute() + { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) + { + if (player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + double x = stats.getCoordsTeleportedFromX(); + double z = stats.getCoordsTeleportedFromZ(); + int limit = ConfigManagerCore.otherPlanetWorldBorders - 2; + if (limit > 20) + { + if (x > limit) + { + z *= limit / x; + x = limit; + } else if (x < -limit) + { + z *= -limit / x; + x = -limit; + } + if (z > limit) + { + x *= limit / z; + z = limit; + } else if (z < -limit) + { + x *= -limit / z; + z = -limit; + } + } + return new Vector3(x, 900.0, z); + } + + return null; + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) + { + return new Vector3(entity.posX, 900.0, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) + { + return null; + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) + { + if (!ridingAutoRocket && player != null) + { + GCPlayerStats stats = GCPlayerStats.get(player); + + if (stats.getTeleportCooldown() <= 0) + { + if (player.capabilities.isFlying) + { + player.capabilities.isFlying = false; + } + + if (!newWorld.isRemote) + { + EntityEntryPodVenus entryPod = new EntityEntryPodVenus(player); + + boolean previous = CompatibilityManager.forceLoadChunks((WorldServer) newWorld); + entryPod.forceSpawn = true; + newWorld.spawnEntity(entryPod); + CompatibilityManager.forceLoadChunksEnd((WorldServer) newWorld, previous); + } + + stats.setTeleportCooldown(10); + } + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) + { + // TODO Auto-generated method stub + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/WorldProviderVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/WorldProviderVenus.java new file mode 100644 index 00000000..e9423676 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/dimension/WorldProviderVenus.java @@ -0,0 +1,305 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.dimension; + +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.api.world.IWeatherProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.event.EventHandlerGC; +import micdoodle8.mods.galacticraft.planets.GCPlanetDimensions; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.galacticraft.planets.venus.client.fx.ParticleAcidVapor; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.BiomeProviderVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.ChunkProviderVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.RoomTreasureVenus; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.particle.Particle; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DimensionType; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.IChunkGenerator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class WorldProviderVenus extends WorldProviderSpace implements IGalacticraftWorldProvider, ISolarLevel, IWeatherProvider +{ + + private double solarMultiplier = -0.36D; + private float prevRainingStrength; + private float rainingStrength; + private boolean raining = false; + private int rainTime = 100; + private int rainChange = 100; + private float targetRain = 0.0F; + + @Override + public Vector3 getFogColor() + { + float night = this.getStarBrightness(1.0F); + float day = 1.0F - this.getStarBrightness(1.0F); + float dayColR = 203.0F / 255.0F; + float dayColG = 147.0F / 255.0F; + float dayColB = 0.0F / 255.0F; + float nightColR = 131.0F / 255.0F; + float nightColG = 108.0F / 255.0F; + float nightColB = 46.0F / 255.0F; + return new Vector3(dayColR * day + nightColR * night, dayColG * day + nightColG * night, dayColB * day + nightColB * night); + } + + @Override + public Vector3 getSkyColor() + { + float night = this.getStarBrightness(1.0F); + float day = 1.0F - this.getStarBrightness(1.0F); + float dayColR = 255.0F / 255.0F; + float dayColG = 207.0F / 255.0F; + float dayColB = 81.0F / 255.0F; + float nightColR = 118.0F / 255.0F; + float nightColG = 89.0F / 255.0F; + float nightColB = 21.0F / 255.0F; + return new Vector3(dayColR * day + nightColR * night, dayColG * day + nightColG * night, dayColB * day + nightColB * night); + } + + @Override + public boolean hasSunset() + { + return false; + } + + @Override + public long getDayLength() + { + return 720000L; // 30 times longer than earth + } + + @Override + public Class getChunkProviderClass() + { + return ChunkProviderVenus.class; + } + + @Override + public Class getBiomeProviderClass() + { + BiomeAdaptive.setBodyMultiBiome(VenusModule.planetVenus); + return BiomeProviderVenus.class; + } + + @Override + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { + float f1 = this.world.getCelestialAngle(par1); + float f2 = 1.0F - (MathHelper.cos(f1 * Constants.twoPI) * 2.0F + 0.25F); + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + return f2 * f2 * 0.75F; + } + + @Override + public double getHorizon() + { + return 44.0D; + } + + @Override + public int getAverageGroundLevel() + { + return 76; + } + + @Override + public boolean canCoordinateBeSpawn(int var1, int var2) + { + return true; + } + + // Overriding so that beds do not explode on Mars + @Override + public boolean canRespawnHere() + { + if (EventHandlerGC.bedActivated) + { + EventHandlerGC.bedActivated = false; + return true; + } + return false; + } + + @Override + public float getGravity() + { + return 0.0375F; + } + + @Override + public double getFuelUsageMultiplier() + { + return 0.9D; + } + + @Override + public boolean canSpaceshipTierPass(int tier) + { + return tier >= 3; + } + + @Override + public float getFallDamageModifier() + { + return 0.38F; + } + + @Override + public CelestialBody getCelestialBody() + { + return VenusModule.planetVenus; + } + + @Override + public double getSolarEnergyMultiplier() + { + if (this.solarMultiplier < 0D) + { + double s = this.getSolarSize(); + this.solarMultiplier = s * s * s; + } + return this.solarMultiplier; + } + + @Override + public boolean shouldDisablePrecipitation() + { + return false; + } + + @Override + public DimensionType getDimensionType() + { + return GCPlanetDimensions.VENUS; + } + + @Override + public int getDungeonSpacing() + { + return 704; + } + + @Override + public float getArrowGravity() + { + return 0.0275F; + } + + @Override + public ResourceLocation getDungeonChestType() + { + return RoomTreasureVenus.VENUSCHEST; + } + + @Override + public List getSurfaceBlocks() + { + List list = new LinkedList<>(); + list.add(VenusBlocks.venusBlock); + return list; + } + + @Override + public boolean canDoRainSnowIce(net.minecraft.world.chunk.Chunk chunk) + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public Particle getParticle(WorldClient world, double x, double y, double z) + { + return new ParticleAcidVapor(world, x, y, z, 0.0D, 0.0D, 0.0D, 0.95F); + } + + @Override + protected void updateWeatherOverride() + { + if (!this.world.isRemote) + { + if (--this.rainTime <= 0) + { + this.raining = !this.raining; + if (this.raining) + { + this.rainTime = (this.world.rand.nextInt(3600) + 1000); + } else + { + this.rainTime = (this.world.rand.nextInt(2000) + 1000); + } + } + + if (--this.rainChange <= 0) + { + this.targetRain = 0.15F + this.world.rand.nextFloat() * 0.45F; + this.rainChange = (this.world.rand.nextInt(200) + 100); + } + + float strength = this.world.rainingStrength; + this.world.prevRainingStrength = strength; + if (this.raining && strength < this.targetRain) + { + strength += 0.004F; + } else if (!this.raining || strength > this.targetRain) + { + strength -= 0.004F; + } + this.world.rainingStrength = MathHelper.clamp(strength, 0.0F, 0.6F); + } + } + + @Override + public void weatherSounds(int j, Minecraft mc, World world, BlockPos blockpos, double xx, double yy, double zz, Random random) + { + if ((int) yy >= blockpos.getY() + 1 && world.getPrecipitationHeight(blockpos).getY() > blockpos.getY()) + { + mc.world.playSound(xx, yy, zz, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.WEATHER, 0.025F, 0.6F + random.nextFloat() * 0.2F, false); + } else + { + mc.world.playSound(xx, yy, zz, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.WEATHER, 0.04F, 0.8F + random.nextFloat() * 0.06F + random.nextFloat() * 0.06F, false); + } + } + + @Override + public int getSoundInterval(float rainStrength) + { + int result = 80 - (int) (rainStrength * 88F); + return result > 0 ? result : 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityEntryPodVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityEntryPodVenus.java new file mode 100644 index 00000000..6b10ad92 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityEntryPodVenus.java @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities; + +import java.util.Map; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.entity.ICameraZoomEntity; +import micdoodle8.mods.galacticraft.api.entity.IIgnoreShift; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.entities.IScaleableFuelLevel; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.particle.Particle; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityEntryPodVenus extends EntityLanderBase implements IScaleableFuelLevel, ICameraZoomEntity, IIgnoreShift +{ + + private Integer groundPosY = null; + + public EntityEntryPodVenus(World var1) + { + super(var1); + this.setSize(1.5F, 3.0F); + } + + public EntityEntryPodVenus(EntityPlayerMP player) + { + super(player, 0.0F); + this.setSize(1.5F, 3.0F); + } + + @Override + public double getInitialMotionY() + { + return -2.5F; + } + + @Override + public double getMountedYOffset() + { + return this.height - 2.0D; + } + + @Override + public float getRotateOffset() + { + // flag no rotate + return -20F; + } + + @Override + public boolean shouldSpawnParticles() + { + return false; + } + + @Override + public Map getParticleMap() + { + return null; + } + + @Override + public Particle getParticle(Random rand, double x, double y, double z, double motX, double motY, double motZ) + { + return null; + } + + @Override + public void tickOnGround() + { + + } + + @Override + public void tickInAir() + { + super.tickInAir(); + + if (this.world.isRemote) + { + if (!this.onGround) + { + this.motionY -= 0.002D; + + if (this.motionY < -0.7F) + { + this.motionY *= 0.994F; + } + + if (this.posY <= 242.0F) + { + if (groundPosY == null) + { + this.groundPosY = this.world.getTopSolidOrLiquidBlock(new BlockPos(this.posX, this.posY, this.posZ)).getY(); + } + + if (this.posY - this.groundPosY > 5.0F) + { + this.motionY *= 0.995F; + } else + this.motionY *= 0.9995F; + } + } + } + } + + @Override + public void onGroundHit() + { + + } + + @Override + public Vector3 getMotionVec() + { + if (this.onGround) + { + return new Vector3(0, 0, 0); + } + + if (this.ticks >= 40 && this.ticks < 45) + { + this.motionY = this.getInitialMotionY(); + } + + if (!this.shouldMove()) + { + return new Vector3(0, 0, 0); + } + + return new Vector3(this.motionX, this.motionY, this.motionZ); + } + + @Override + public float getCameraZoom() + { + return 15.0F; + } + + @Override + public boolean defaultThirdPerson() + { + return true; + } + + @Override + public boolean pressKey(int key) + { + return false; + } + + @Override + public String getName() + { + return GCCoreUtil.translate("container.entry_pod.name"); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBox() + { + return null; + } + + @Override + public AxisAlignedBB getCollisionBox(Entity par1Entity) + { + return null; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + if (!this.onGround) + { + return false; + } + + if (!this.getPassengers().isEmpty()) + { + this.removePassengers(); + } + + return true; + } + + if (this.getPassengers().isEmpty() && player instanceof EntityPlayerMP) + { + GCCoreUtil.openParachestInv((EntityPlayerMP) player, this); + return true; + } else if (player instanceof EntityPlayerMP) + { + if (!this.onGround) + { + return false; + } + + this.removePassengers(); + return true; + } else + { + return true; + } + } + + @Override + public boolean shouldIgnoreShiftExit() + { + return !this.onGround; + } + + public Integer getGroundPosY() + { + return groundPosY; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityJuicer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityJuicer.java new file mode 100644 index 00000000..68c1b8e7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityJuicer.java @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities; + +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.entities.ai.EntityMoveHelperCeiling; +import micdoodle8.mods.galacticraft.planets.venus.entities.ai.PathNavigateCeiling; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class EntityJuicer extends EntityMob implements IEntityBreathable +{ + + private static final DataParameter IS_FALLING = EntityDataManager.createKey(EntityJuicer.class, DataSerializers.BOOLEAN); + private static final DataParameter IS_HANGING = EntityDataManager.createKey(EntityJuicer.class, DataSerializers.BOOLEAN); + private BlockPos jumpTarget; + private int timeSinceLastJump = 0; + + public EntityJuicer(World world) + { + super(world); + this.moveHelper = new EntityMoveHelperCeiling(this); + this.setSize(0.95F, 0.6F); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0, true)); + this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); + this.timeSinceLastJump = this.rand.nextInt(200) + 50; + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(IS_FALLING, false); + this.dataManager.register(IS_HANGING, false); + } + + public boolean isHanging() + { + return this.dataManager.get(IS_FALLING); + } + + public void setHanging(boolean hanging) + { + this.dataManager.set(IS_FALLING, hanging); + } + + public boolean isFalling() + { + return this.dataManager.get(IS_FALLING); + } + + public void setFalling(boolean falling) + { + this.dataManager.set(IS_FALLING, falling); + } + + @Override + public boolean canBreatheUnderwater() + { + return true; + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + } + + @Override + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SPIDER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SPIDER_HURT; + } + + @Override + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SPIDER_DEATH; + } + + @Override + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_SPIDER_STEP, 0.15F, 1.0F); + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + protected float getSoundPitch() + { + return super.getSoundPitch() + 0.4F; + } + + @Override + protected Item getDropItem() + { + return Item.getItemFromBlock(Blocks.AIR); + } + + @Override + public void onLivingUpdate() + { + if (this.isHanging()) + { + this.onGround = true; + } + + super.onLivingUpdate(); + + if (!this.world.isRemote) + { + if (this.jumpTarget == null) + { + if (this.timeSinceLastJump <= 0) + { + BlockPos posAbove = new BlockPos(this.posX, this.posY + (this.isHanging() ? 1.0 : -0.5), this.posZ); + IBlockState blockAbove = this.world.getBlockState(posAbove); + + if (blockAbove.getBlock() == VenusBlocks.venusBlock && (blockAbove.getValue(BlockBasicVenus.BASIC_TYPE_VENUS) == BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_2 + || blockAbove.getValue(BlockBasicVenus.BASIC_TYPE_VENUS) == BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_1)) + { + RayTraceResult hit = + this.world.rayTraceBlocks(new Vec3d(this.posX, this.posY, this.posZ), new Vec3d(this.posX, this.posY + (this.isHanging() ? -10 : 10), this.posZ), false, true, false); + + if (hit != null && hit.typeOfHit == RayTraceResult.Type.BLOCK) + { + IBlockState blockBelow = this.world.getBlockState(hit.getBlockPos()); + if (blockBelow.getBlock() == VenusBlocks.venusBlock && (blockBelow.getValue(BlockBasicVenus.BASIC_TYPE_VENUS) == BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_2 + || blockBelow.getValue(BlockBasicVenus.BASIC_TYPE_VENUS) == BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_1)) + { + if (this.isHanging()) + { + this.jumpTarget = hit.getBlockPos(); + this.setFalling(this.jumpTarget != null); + } else + { + this.jumpTarget = hit.getBlockPos().offset(EnumFacing.DOWN); + this.setFalling(this.jumpTarget != null); + } + } + } + } + } else + { + this.timeSinceLastJump--; + } + } + } + + if (this.isHanging()) + { + this.motionY = 0.0F; + } + } + + @Override + public void move(MoverType type, double x, double y, double z) + { + super.move(type, x, y, z); + if (this.isHanging()) + { + this.onGround = true; + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (this.world.isRemote) + { + this.prevLimbSwingAmount = this.limbSwingAmount; + double d1 = this.posX - this.prevPosX; + double d0 = this.posZ - this.prevPosZ; + float f2 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F; + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + this.limbSwingAmount += (f2 - this.limbSwingAmount) * 0.4F; + this.limbSwing += this.limbSwingAmount; + } else + { + if (this.jumpTarget != null) + { + double diffX = this.jumpTarget.getX() - this.posX + 0.5; + double diffY = this.jumpTarget.getY() - this.posY + 0.6; + double diffZ = this.jumpTarget.getZ() - this.posZ + 0.5; + this.motionY = diffY > 0 ? Math.min(diffY / 2.0F, 0.2123F) : Math.max(diffY / 2.0F, -0.2123F); + this.motionX = diffX > 0 ? Math.min(diffX / 2.0F, 0.2123F) : Math.max(diffX / 2.0F, -0.2123F); + this.motionZ = diffZ > 0 ? Math.min(diffZ / 2.0F, 0.2123F) : Math.max(diffZ / 2.0F, -0.2123F); + if (diffY > 0.0F && Math.abs(this.jumpTarget.getY() - (this.posY + this.motionY)) < 0.4F) + { + this.setPosition(this.jumpTarget.getX() + 0.5, this.jumpTarget.getY() + 0.2, this.jumpTarget.getZ() + 0.5); + this.jumpTarget = null; + this.setFalling(false); + this.timeSinceLastJump = this.rand.nextInt(180) + 60; + this.setHanging(true); + } else if (diffY < 0.0F && Math.abs(this.jumpTarget.getY() - (this.posY + this.motionY)) < 0.8F) + { + this.setPosition(this.jumpTarget.getX() + 0.5, this.jumpTarget.getY() + 1.0, this.jumpTarget.getZ() + 0.5); + this.jumpTarget = null; + this.setFalling(false); + this.timeSinceLastJump = this.rand.nextInt(180) + 60; + this.setHanging(false); + } else + { + this.setHanging(false); + } + } + } + } + + @Override + protected boolean isValidLightLevel() + { + return true; + } + + @Override + public boolean getCanSpawnHere() + { + if (super.getCanSpawnHere()) + { + EntityPlayer var1 = this.world.getClosestPlayerToEntity(this, 5.0D); + return var1 == null; + } else + { + return false; + } + } + + @Override + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ARTHROPOD; + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + protected PathNavigate createNavigator(World worldIn) + { + return new PathNavigateCeiling(this, worldIn); + } + + @Override + public void setInWeb() + { + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + super.writeEntityToNBT(tagCompound); + + tagCompound.setInteger("timeSinceLastJump", this.timeSinceLastJump); + tagCompound.setBoolean("jumpTargetNull", this.jumpTarget == null); + if (this.jumpTarget != null) + { + tagCompound.setInteger("jumpTargetX", this.jumpTarget.getX()); + tagCompound.setInteger("jumpTargetY", this.jumpTarget.getY()); + tagCompound.setInteger("jumpTargetZ", this.jumpTarget.getZ()); + } + } + + @Override + public void readEntityFromNBT(NBTTagCompound tagCompund) + { + super.readEntityFromNBT(tagCompund); + + this.timeSinceLastJump = tagCompund.getInteger("timeSinceLastJump"); + if (tagCompund.getBoolean("jumpTargetNull")) + { + this.jumpTarget = null; + } else + { + this.jumpTarget = new BlockPos(tagCompund.getInteger("jumpTargetX"), tagCompund.getInteger("jumpTargetY"), tagCompund.getInteger("jumpTargetZ")); + } + + this.setFalling(this.jumpTarget != null); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntitySpiderQueen.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntitySpiderQueen.java new file mode 100644 index 00000000..87d1495e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntitySpiderQueen.java @@ -0,0 +1,467 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import java.util.UUID; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.entity.IEntityBreathable; +import micdoodle8.mods.galacticraft.core.entities.EntityBossBase; +import micdoodle8.mods.galacticraft.core.entities.IBoss; +import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagLong; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.BossInfo; +import net.minecraft.world.World; + +public class EntitySpiderQueen extends EntityBossBase implements IEntityBreathable, IBoss, IRangedAttackMob +{ + + private static final DataParameter BURROWED_COUNT = EntityDataManager.createKey(EntitySpiderQueen.class, DataSerializers.BYTE); + public boolean shouldEvade; + private List juicersSpawned = Lists.newArrayList(); + private List spawnedPreload; + + private int rangedAttackTime; + private int minRangedAttackTime; + private int maxRangedAttackTime; + + public EntitySpiderQueen(World worldIn) + { + super(worldIn); + this.setSize(1.4F, 0.9F); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0, true)); + this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); + this.maxRangedAttackTime = 60; + this.minRangedAttackTime = 20; + this.ignoreFrustumCheck = true; + } + + @Override + public boolean canBePushed() + { + return false; + } + + @Override + public double getMountedYOffset() + { + return (double) (this.height * 0.5F); + } + + @Override + protected PathNavigate createNavigator(World worldIn) + { + return new PathNavigateGround(this, worldIn); + } + + @Override + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(BURROWED_COUNT, (byte) -1); + } + + public byte getBurrowedCount() + { + return this.dataManager.get(BURROWED_COUNT); + } + + public void setBurrowedCount(byte count) + { + this.dataManager.set(BURROWED_COUNT, count); + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (!this.world.isRemote) + { + if (!this.shouldEvade && this.deathTicks <= 0) + { + EntityLivingBase attackTarget = this.getAttackTarget(); + + if (attackTarget != null) + { + double dX = attackTarget.posX - this.posX; + double dY = attackTarget.getEntityBoundingBox().minY + (double) (attackTarget.height / 3.0F) - this.posY; + double dZ = attackTarget.posZ - this.posZ; + + float distance = 5.0F; + double d0 = this.getDistanceSq(attackTarget.posX, attackTarget.getEntityBoundingBox().minY, attackTarget.posZ); + + this.getLookHelper().setLookPositionWithEntity(attackTarget, 30.0F, 30.0F); + + if (--this.rangedAttackTime == 0) + { + if (dX * dX + dY * dY + dZ * dZ > distance * distance) + { + float f = MathHelper.sqrt(d0) / distance; + this.attackEntityWithRangedAttack(attackTarget, 0.0F); + this.rangedAttackTime = MathHelper.floor(f * (float) (this.maxRangedAttackTime - this.minRangedAttackTime) + (float) this.minRangedAttackTime); + } + } else if (this.rangedAttackTime < 0) + { + float f2 = MathHelper.sqrt(d0) / distance; + this.rangedAttackTime = MathHelper.floor(f2 * (float) (this.maxRangedAttackTime - this.minRangedAttackTime) + (float) this.minRangedAttackTime); + } + } + } + } + + if (this.spawnedPreload != null) + { + for (UUID id : this.spawnedPreload) + { + Entity entity = null; + for (Entity e : this.world.getLoadedEntityList()) + { + if (e.getUniqueID().equals(id)) + { + entity = e; + break; + } + } + if (entity instanceof EntityJuicer) + { + this.juicersSpawned.add((EntityJuicer) entity); + } + } + if (this.juicersSpawned.size() == this.spawnedPreload.size()) + { + this.spawnedPreload.clear(); + this.spawnedPreload = null; + } + } + + if (!this.world.isRemote && this.shouldEvade) + { + if (this.spawner != null) + { + AxisAlignedBB roomBounds = this.spawner.getRangeBounds(); + double tarX = (roomBounds.minX + roomBounds.maxX) / 2.0; + double tarZ = (roomBounds.minZ + roomBounds.maxZ) / 2.0; + double dX = tarX - this.posX; + double dY = roomBounds.maxY - this.posY; + double dZ = tarZ - this.posZ; + + double movespeed = 1.0 * this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue(); + this.motionX = Math.min(Math.max(dX / 2.0F, -movespeed), movespeed); + this.motionZ = Math.min(Math.max(dZ / 2.0F, -movespeed), movespeed); + this.navigator.tryMoveToXYZ(tarX, this.posY, tarZ, movespeed); + + if (Math.abs(dX) < 0.1 && Math.abs(dZ) < 0.1) + { + this.motionY = Math.min(dY, 0.2); + + if (Math.abs(dY) - this.height < 1.1 && Math.abs(this.posY - this.lastTickPosY) < 0.05) + { + if (this.getBurrowedCount() >= 0) + { + if (this.ticksExisted % 20 == 0) + { + if (this.juicersSpawned.size() < 6) + { + EntityJuicer juicer = new EntityJuicer(this.world); + double angle = Math.random() * 2 * Math.PI; + double dist = 3.0F; + juicer.setPosition(this.posX + dist * Math.sin(angle), this.posY + 0.2F, this.posZ + dist * Math.cos(angle)); + juicer.setHanging(true); + this.world.spawnEntity(juicer); + this.juicersSpawned.add(juicer); + } + } + + if (this.getBurrowedCount() < 20) + { + this.setBurrowedCount((byte) (this.getBurrowedCount() + 1)); + } + } else + { + this.setBurrowedCount((byte) 0); + } + } + } + } + + if (!this.juicersSpawned.isEmpty()) + { + boolean allDead = true; + for (EntityJuicer juicer : this.juicersSpawned) + { + if (!juicer.isDead) + { + allDead = false; + } + } + if (allDead) + { + this.juicersSpawned.clear(); + this.shouldEvade = false; + this.setBurrowedCount((byte) -1); + } + } + } + } + + @Override + public ItemStack getGuaranteedLoot(Random rand) + { + List stackList = GalacticraftRegistry.getDungeonLoot(3); + return stackList.get(rand.nextInt(stackList.size())).copy(); + } + + @Override + public void knockBack(Entity entityIn, float par2, double par3, double par4) + { + } + + @Override + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(150.0F * ConfigManagerCore.dungeonBossHealthMod); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.250000001192092896D); + } + + @Override + protected float getSoundPitch() + { + return (this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F + 0.4F; + } + + @Override + protected float getSoundVolume() + { + return 5.0F; + } + + @Override + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SPIDER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SPIDER_HURT; + } + + @Override + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SPIDER_DEATH; + } + + @Override + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_SPIDER_STEP, 0.5F, 0.5F); + } + + @Override + protected Item getDropItem() + { + return Items.STRING; + } + + @Override + protected void dropFewItems(boolean par1, int par2) + { + super.dropFewItems(par1, par2); + + if (par1 && (this.rand.nextInt(3) == 0 || this.rand.nextInt(1 + par2) > 0)) + { + this.dropItem(Items.SPIDER_EYE, 1); + } + } + + @Override + public void setInWeb() + { + } + + @Override + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ARTHROPOD; + } + + @Override + public boolean isPotionApplicable(PotionEffect potioneffectIn) + { + return potioneffectIn.getPotion() != MobEffects.POISON && super.isPotionApplicable(potioneffectIn); + } + + @Override + public float getEyeHeight() + { + return 0.65F; + } + + @Override + public boolean canBreath() + { + return true; + } + + @Override + public boolean isEntityInvulnerable(DamageSource source) + { + if (this.getBurrowedCount() >= 0) + { + return true; + } + + return super.isEntityInvulnerable(source); + } + + @Override + protected void damageEntity(DamageSource damageSrc, float damageAmount) + { + float healthLast = this.getHealth(); + super.damageEntity(damageSrc, damageAmount); + float health = this.getHealth(); + + float thirdHealth = this.getMaxHealth() / 3.0F; + + if (health < thirdHealth && healthLast >= thirdHealth) + { + shouldEvade = true; + } else if (health < 2 * thirdHealth && healthLast >= 2 * thirdHealth) + { + shouldEvade = true; + } + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase target, float damage) + { + EntityWebShot entityarrow = new EntityWebShot(this.world, this, target, 0.8F, (float) (14 - this.world.getDifficulty().getId() * 4)); + this.playSound(SoundEvents.ENTITY_ARROW_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); + this.world.spawnEntity(entityarrow); + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + super.writeEntityToNBT(tagCompound); + + tagCompound.setBoolean("should_evade", this.shouldEvade); + + NBTTagList list = new NBTTagList(); + for (EntityJuicer juicer : this.juicersSpawned) + { + list.appendTag(new NBTTagLong(juicer.getPersistentID().getMostSignificantBits())); + list.appendTag(new NBTTagLong(juicer.getPersistentID().getLeastSignificantBits())); + } + tagCompound.setTag("spawned_children", list); + } + + @Override + public void readEntityFromNBT(NBTTagCompound tagCompound) + { + super.readEntityFromNBT(tagCompound); + + this.shouldEvade = tagCompound.getBoolean("should_evade"); + + if (tagCompound.hasKey("spawned_children")) + { + this.spawnedPreload = Lists.newArrayList(); + NBTTagList list = tagCompound.getTagList("spawned_children", 4); + for (int i = 0; i < list.tagCount(); i += 2) + { + NBTTagLong tagMost = (NBTTagLong) list.get(i); + NBTTagLong tagLeast = (NBTTagLong) list.get(i + 1); + this.spawnedPreload.add(new UUID(tagMost.getLong(), tagLeast.getLong())); + } + } + } + + @Override + public int getChestTier() + { + return 3; + } + + @Override + public EntityItem entityDropItem(ItemStack par1ItemStack, float par2) + { + final EntityItem entityitem = new EntityItem(this.world, this.posX, this.posY + par2, this.posZ, par1ItemStack); + entityitem.motionY = -2.0D; + entityitem.setDefaultPickupDelay(); + if (this.captureDrops) + { + this.capturedDrops.add(entityitem); + } else + { + this.world.spawnEntity(entityitem); + } + return entityitem; + } + + @Override + public void dropKey() + { + this.entityDropItem(new ItemStack(VenusItems.key, 1, 0), 0.5F); + } + + @Override + public BossInfo.Color getHealthBarColor() + { + return BossInfo.Color.PURPLE; + } + + @Override + public void setSwingingArms(boolean swingingArms) + { + // TODO Auto-generated method stub + // TODO for 1.12.2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityWebShot.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityWebShot.java new file mode 100644 index 00000000..22f3f1a1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/EntityWebShot.java @@ -0,0 +1,359 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities; + +import java.util.List; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityWebShot extends Entity implements IProjectile +{ + + public int canBePickedUp; + public int arrowShake; + public Entity shootingEntity; + private int ticksInAir; + + public EntityWebShot(World worldIn) + { + super(worldIn); + this.setSize(0.5F, 0.5F); + } + + public EntityWebShot(World worldIn, double x, double y, double z) + { + super(worldIn); + this.setSize(0.5F, 0.5F); + this.setPosition(x, y, z); + } + + public EntityWebShot(World worldIn, EntityLivingBase shooter, EntityLivingBase target, float p_i1755_4_, float p_i1755_5_) + { + super(worldIn); + this.shootingEntity = shooter; + + if (shooter instanceof EntityPlayer) + { + this.canBePickedUp = 1; + } + + this.posY = shooter.posY + (double) shooter.getEyeHeight() - 0.10000000149011612D; + double d0 = target.posX - shooter.posX; + double d1 = target.getEntityBoundingBox().minY + (double) (target.height / 3.0F) - this.posY; + double d2 = target.posZ - shooter.posZ; + double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); + + if (d3 >= 1.0E-7D) + { + float f = (float) MathHelper.atan2(d2, d0) * Constants.RADIANS_TO_DEGREES - 90.0F; + float f1 = (float) MathHelper.atan2(d1, d3) * -Constants.RADIANS_TO_DEGREES; + double d4 = d0 / d3; + double d5 = d2 / d3; + this.setLocationAndAngles(shooter.posX + d4, this.posY, shooter.posZ + d5, f, f1); + float f2 = (float) (d3 * 0.20000000298023224D); + this.shoot(d0, d1 + (double) f2, d2, p_i1755_4_, p_i1755_5_); + } + } + + public EntityWebShot(World worldIn, EntityLivingBase shooter, float velocity) + { + super(worldIn); + this.shootingEntity = shooter; + + if (shooter instanceof EntityPlayer) + { + this.canBePickedUp = 1; + } + + this.setSize(0.5F, 0.5F); + this.setLocationAndAngles(shooter.posX, shooter.posY + (double) shooter.getEyeHeight(), shooter.posZ, shooter.rotationYaw, shooter.rotationPitch); + this.posX -= (double) (MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * 0.16F); + this.posY -= 0.10000000149011612D; + this.posZ -= (double) (MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.motionX = (double) (-MathHelper.sin(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES)); + this.motionZ = (double) (MathHelper.cos(this.rotationYaw / Constants.RADIANS_TO_DEGREES) * MathHelper.cos(this.rotationPitch / Constants.RADIANS_TO_DEGREES)); + this.motionY = (double) (-MathHelper.sin(this.rotationPitch / Constants.RADIANS_TO_DEGREES)); + this.shoot(this.motionX, this.motionY, this.motionZ, velocity * 1.5F, 1.0F); + } + + @Override + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * 10.0; + return distance < d0 * d0; + } + + @Override + protected void entityInit() + { + } + + @Override + public void shoot(double x, double y, double z, float velocity, float inaccuracy) + { + float f = MathHelper.sqrt(x * x + y * y + z * z); + x = x / (double) f; + y = y / (double) f; + z = z / (double) f; + x = x + this.rand.nextGaussian() * (double) (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double) inaccuracy; + y = y + this.rand.nextGaussian() * (double) (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double) inaccuracy; + z = z + this.rand.nextGaussian() * (double) (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double) inaccuracy; + x = x * (double) velocity; + y = y * (double) velocity; + z = z * (double) velocity; + this.motionX = x; + this.motionY = y; + this.motionZ = z; + float f1 = MathHelper.sqrt(x * x + z * z); + this.prevRotationYaw = this.rotationYaw = (float) MathHelper.atan2(x, z) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) MathHelper.atan2(y, (double) f1) * Constants.RADIANS_TO_DEGREES; + } + + @Override + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean p_180426_10_) + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + } + + @Override + @SideOnly(Side.CLIENT) + public void setVelocity(double x, double y, double z) + { + this.motionX = x; + this.motionY = y; + this.motionZ = z; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(x * x + z * z); + this.prevRotationYaw = this.rotationYaw = (float) MathHelper.atan2(x, z) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) MathHelper.atan2(y, (double) f) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + } + + @Override + public void onUpdate() + { + super.onUpdate(); + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float) MathHelper.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + this.prevRotationPitch = this.rotationPitch = (float) MathHelper.atan2(this.motionY, (double) f) * Constants.RADIANS_TO_DEGREES; + } + + if (this.arrowShake > 0) + { + --this.arrowShake; + } + + if (this.ticksExisted > 1000) + { + this.setDead(); + } + + ++this.ticksInAir; + Vec3d vec31 = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec3 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult movingobjectposition = this.world.rayTraceBlocks(vec31, vec3, false, true, false); + vec31 = new Vec3d(this.posX, this.posY, this.posZ); + vec3 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (movingobjectposition != null) + { + vec3 = new Vec3d(movingobjectposition.hitVec.x, movingobjectposition.hitVec.y, movingobjectposition.hitVec.z); + } + + Entity entity = null; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D, 1.0D, 1.0D)); + double d0 = 0.0D; + final double border = 0.3D; + + for (int i = 0; i < list.size(); ++i) + { + Entity entity1 = (Entity) list.get(i); + + if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5)) + { + AxisAlignedBB axisalignedbb1 = entity1.getEntityBoundingBox().grow(border, border, border); + RayTraceResult movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3); + + if (movingobjectposition1 != null) + { + double d1 = vec31.squareDistanceTo(movingobjectposition1.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) + { + movingobjectposition = new RayTraceResult(entity); + } + + if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer) movingobjectposition.entityHit; + + if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer) this.shootingEntity).canAttackPlayer(entityplayer)) + { + movingobjectposition = null; + } + } + + if (movingobjectposition != null) + { + if (movingobjectposition.entityHit != null) + { + if (movingobjectposition.entityHit != this.shootingEntity && !this.world.isRemote) + { + if (movingobjectposition.entityHit instanceof EntityLivingBase) + { + ((EntityLivingBase) movingobjectposition.entityHit).addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 180, 2, true, true)); + this.setDead(); + } else + { + this.motionX *= -0.10000000149011612D; + this.motionY *= -0.10000000149011612D; + this.motionZ *= -0.10000000149011612D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } + } else + { + this.motionX = (double) ((float) (movingobjectposition.hitVec.x - this.posX)); + this.motionY = (double) ((float) (movingobjectposition.hitVec.y - this.posY)); + this.motionZ = (double) ((float) (movingobjectposition.hitVec.z - this.posZ)); + float f5 = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double) f5 * 0.05000000074505806D; + this.posY -= this.motionY / (double) f5 * 0.05000000074505806D; + this.posZ -= this.motionZ / (double) f5 * 0.05000000074505806D; + this.arrowShake = 7; + this.setDead(); + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float f3 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float) MathHelper.atan2(this.motionX, this.motionZ) * Constants.RADIANS_TO_DEGREES; + + for (this.rotationPitch = (float) MathHelper.atan2(this.motionY, (double) f3) * Constants.RADIANS_TO_DEGREES; this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= + 360.0F) + { + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + + if (this.isInWater()) + { + for (int i1 = 0; i1 < 4; ++i1) + { + float f8 = 0.25F; + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * (double) f8, this.posY - this.motionY * (double) f8, this.posZ - this.motionZ * (double) f8, + this.motionX, this.motionY, this.motionZ); + } + } + + if (this.isWet()) + { + this.extinguish(); + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.doBlockCollisions(); + } + + @Override + public void writeEntityToNBT(NBTTagCompound tagCompound) + { + tagCompound.setByte("shake", (byte) this.arrowShake); + tagCompound.setByte("pickup", (byte) this.canBePickedUp); + } + + @Override + public void readEntityFromNBT(NBTTagCompound tagCompund) + { + this.arrowShake = tagCompund.getByte("shake") & 255; + + if (tagCompund.hasKey("pickup", 99)) + { + this.canBePickedUp = tagCompund.getByte("pickup"); + } + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + public boolean canBeAttackedWithItem() + { + return false; + } + + @Override + public float getEyeHeight() + { + return 0.0F; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/EntityMoveHelperCeiling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/EntityMoveHelperCeiling.java new file mode 100644 index 00000000..204a4c40 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/EntityMoveHelperCeiling.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities.ai; + +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityMoveHelper; +import net.minecraft.util.math.MathHelper; + +public class EntityMoveHelperCeiling extends EntityMoveHelper +{ + + public EntityMoveHelperCeiling(EntityLiving entitylivingIn) + { + super(entitylivingIn); + } + + @Override + public void onUpdateMoveHelper() + { + this.entity.setMoveForward(0.0F); + + if (this.isUpdating()) + { + this.action = EntityMoveHelper.Action.WAIT; + int i = MathHelper.floor(this.entity.getEntityBoundingBox().minY + 0.5D); + double d0 = this.posX - this.entity.posX; + double d1 = this.posZ - this.entity.posZ; + double d2 = this.posY - (double) i; + double d3 = d0 * d0 + d1 * d1; + + if (d3 >= 2.500000277905201E-7D) + { + float f = (float) MathHelper.atan2(d1, d0) * Constants.RADIANS_TO_DEGREES - 90.0F; + this.entity.rotationYaw = f; + this.entity.setAIMoveSpeed((float) (this.speed * this.entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue())); + + if (d2 > 0.0D && d0 * d0 + d1 * d1 < 1.0D) + { + this.entity.getJumpHelper().setJumping(); + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/PathNavigateCeiling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/PathNavigateCeiling.java new file mode 100644 index 00000000..d3ac3961 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/PathNavigateCeiling.java @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities.ai; + +import micdoodle8.mods.galacticraft.planets.venus.entities.EntityJuicer; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.pathfinding.PathFinder; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class PathNavigateCeiling extends PathNavigate +{ + + protected WalkNodeProcessorCeiling nodeProcessor; + + public PathNavigateCeiling(EntityJuicer entity, World worldIn) + { + super(entity, worldIn); + } + + @Override + protected PathFinder getPathFinder() + { + this.nodeProcessor = new WalkNodeProcessorCeiling(); + return new PathFinder(this.nodeProcessor); + } + + @Override + protected boolean canNavigate() + { + return this.entity.onGround || this.entity.isRiding() && this.entity instanceof EntityZombie && this.entity.getRidingEntity() instanceof EntityChicken; + } + + @Override + protected Vec3d getEntityPosition() + { + return new Vec3d(this.entity.posX, (double) this.getPathablePosY(), this.entity.posZ); + } + + private int getPathablePosY() + { + return (int) (this.entity.getEntityBoundingBox().minY + 0.5D); + } + + @Override + protected boolean isDirectPathBetweenPoints(Vec3d current, Vec3d target, int sizeX, int sizeY, int sizeZ) + { + int i = MathHelper.floor(current.x); + int j = MathHelper.floor(current.z); + double d0 = target.x - current.x; + double d1 = target.z - current.z; + double d2 = d0 * d0 + d1 * d1; + + if (d2 < 1.0E-8D) + { + return false; + } else + { + double d3 = 1.0D / Math.sqrt(d2); + d0 = d0 * d3; + d1 = d1 * d3; + sizeX = sizeX + 2; + sizeZ = sizeZ + 2; + + if (!this.isSafeToStandAt(i, (int) current.y, j, sizeX, sizeY, sizeZ, current, d0, d1)) + { + return false; + } else + { + sizeX = sizeX - 2; + sizeZ = sizeZ - 2; + double d4 = 1.0D / Math.abs(d0); + double d5 = 1.0D / Math.abs(d1); + double d6 = (double) (i) - current.x; + double d7 = (double) (j) - current.z; + + if (d0 >= 0.0D) + { + ++d6; + } + + if (d1 >= 0.0D) + { + ++d7; + } + + d6 = d6 / d0; + d7 = d7 / d1; + int k = d0 < 0.0D ? -1 : 1; + int l = d1 < 0.0D ? -1 : 1; + int i1 = MathHelper.floor(target.x); + int j1 = MathHelper.floor(target.z); + int k1 = i1 - i; + int l1 = j1 - j; + + while (k1 * k > 0 || l1 * l > 0) + { + if (d6 < d7) + { + d6 += d4; + i += k; + k1 = i1 - i; + } else + { + d7 += d5; + j += l; + l1 = j1 - j; + } + + if (!this.isSafeToStandAt(i, (int) current.y, j, sizeX, sizeY, sizeZ, current, d0, d1)) + { + return false; + } + } + + return true; + } + } + } + + private boolean isSafeToStandAt(int x, int y, int z, int sizeX, int sizeY, int sizeZ, Vec3d currentPos, double distanceX, double distanceZ) + { + int i = x - sizeX / 2; + int j = z - sizeZ / 2; + + if (!this.isPositionClear(i, y, j, sizeX, sizeY, sizeZ, currentPos, distanceX, distanceZ)) + { + return false; + } else + { + for (int k = i; k < i + sizeX; ++k) + { + for (int l = j; l < j + sizeZ; ++l) + { + double d0 = (double) k + 0.5D - currentPos.x; + double d1 = (double) l + 0.5D - currentPos.z; + + if (d0 * distanceX + d1 * distanceZ >= 0.0D) + { + IBlockState state = this.world.getBlockState(new BlockPos(k, y + 1, l)); + Material material = state.getMaterial(); + + if (material == Material.AIR) + { + return false; + } + + if (material == Material.WATER && !this.entity.isInWater()) + { + return false; + } + + if (material == Material.LAVA) + { + return false; + } + } + } + } + + return true; + } + } + + private boolean isPositionClear(int minX, int minY, int minZ, int sizeX, int sizeY, int sizeZ, Vec3d currentPos, double distanceX, double distanceZ) + { + for (BlockPos blockpos : BlockPos.getAllInBox(new BlockPos(minX, minY, minZ), new BlockPos(minX + sizeX - 1, minY + sizeY - 1, minZ + sizeZ - 1))) + { + double d0 = (double) blockpos.getX() + 0.5D - currentPos.x; + double d1 = (double) blockpos.getZ() + 0.5D - currentPos.z; + + if (d0 * distanceX + d1 * distanceZ >= 0.0D) + { + Block block = this.world.getBlockState(blockpos).getBlock(); + + if (!block.isPassable(this.world, blockpos)) + { + return false; + } + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/WalkNodeProcessorCeiling.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/WalkNodeProcessorCeiling.java new file mode 100644 index 00000000..45760b36 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/entities/ai/WalkNodeProcessorCeiling.java @@ -0,0 +1,469 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.entities.ai; + +import com.google.common.collect.Sets; +import java.util.EnumSet; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.BlockFence; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.BlockWall; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLiving; +import net.minecraft.init.Blocks; +import net.minecraft.pathfinding.NodeProcessor; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; + +public class WalkNodeProcessorCeiling extends NodeProcessor +{ + + private float avoidsWater; + + @Override + public void init(IBlockAccess sourceIn, EntityLiving mob) + { + super.init(sourceIn, mob); + this.avoidsWater = mob.getPathPriority(PathNodeType.WATER); + } + + @Override + public void postProcess() + { + this.entity.setPathPriority(PathNodeType.WATER, this.avoidsWater); + super.postProcess(); + } + + @Override + public PathPoint getStart() + { + int i; + + if (this.getCanSwim() && this.entity.isInWater()) + { + i = (int) this.entity.getEntityBoundingBox().minY; + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ)); + + for (Block block = this.blockaccess.getBlockState(blockpos$mutableblockpos).getBlock(); block == Blocks.FLOWING_WATER || block == Blocks.WATER; block = + this.blockaccess.getBlockState(blockpos$mutableblockpos).getBlock()) + { + ++i; + blockpos$mutableblockpos.setPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ)); + } + } else if (this.entity.onGround) + { + i = MathHelper.floor(this.entity.getEntityBoundingBox().minY + 0.5D); + } else + { + BlockPos blockpos; + + for (blockpos = new BlockPos( + this.entity); (this.blockaccess.getBlockState(blockpos).getMaterial() == Material.AIR || this.blockaccess.getBlockState(blockpos).getBlock().isPassable(this.blockaccess, blockpos)) + && blockpos.getY() > 0; blockpos = blockpos.down()) + { + ; + } + + i = blockpos.up().getY(); + } + + BlockPos blockpos2 = new BlockPos(this.entity); + PathNodeType pathnodetype1 = this.getPathNodeType(this.entity, blockpos2.getX(), i, blockpos2.getZ()); + + if (this.entity.getPathPriority(pathnodetype1) < 0.0F) + { + Set set = Sets.newHashSet(); + set.add(new BlockPos(this.entity.getEntityBoundingBox().minX, (double) i, this.entity.getEntityBoundingBox().minZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().minX, (double) i, this.entity.getEntityBoundingBox().maxZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().maxX, (double) i, this.entity.getEntityBoundingBox().minZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().maxX, (double) i, this.entity.getEntityBoundingBox().maxZ)); + + for (BlockPos blockpos1 : set) + { + PathNodeType pathnodetype = this.getPathNodeType(this.entity, blockpos1); + + if (this.entity.getPathPriority(pathnodetype) >= 0.0F) + { + return this.openPoint(blockpos1.getX(), blockpos1.getY(), blockpos1.getZ()); + } + } + } + + return this.openPoint(blockpos2.getX(), i, blockpos2.getZ()); + } + + @Override + public PathPoint getPathPointToCoords(double x, double y, double z) + { + return this.openPoint(MathHelper.floor(x - (double) (this.entity.width / 2.0F)), MathHelper.floor(y), MathHelper.floor(z - (double) (this.entity.width / 2.0F))); + } + + @Override + public int findPathOptions(PathPoint[] pathOptions, PathPoint currentPoint, PathPoint targetPoint, float maxDistance) + { + int i = 0; + int j = 0; + PathNodeType pathnodetype = this.getPathNodeType(this.entity, currentPoint.x, currentPoint.y + 1, currentPoint.z); + + if (this.entity.getPathPriority(pathnodetype) >= 0.0F) + { + j = MathHelper.floor(Math.max(1.0F, this.entity.stepHeight)); + } + + BlockPos blockpos = (new BlockPos(currentPoint.x, currentPoint.y, currentPoint.z)).down(); + double d0 = (double) currentPoint.y - (1.0D - this.blockaccess.getBlockState(blockpos).getBoundingBox(this.blockaccess, blockpos).maxY); + PathPoint pathpoint = this.getSafePoint(currentPoint.x, currentPoint.y, currentPoint.z + 1, j, d0, EnumFacing.SOUTH); + PathPoint pathpoint1 = this.getSafePoint(currentPoint.x - 1, currentPoint.y, currentPoint.z, j, d0, EnumFacing.WEST); + PathPoint pathpoint2 = this.getSafePoint(currentPoint.x + 1, currentPoint.y, currentPoint.z, j, d0, EnumFacing.EAST); + PathPoint pathpoint3 = this.getSafePoint(currentPoint.x, currentPoint.y, currentPoint.z - 1, j, d0, EnumFacing.NORTH); + + if (pathpoint != null && !pathpoint.visited && pathpoint.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint; + } + + if (pathpoint1 != null && !pathpoint1.visited && pathpoint1.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint1; + } + + if (pathpoint2 != null && !pathpoint2.visited && pathpoint2.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint2; + } + + if (pathpoint3 != null && !pathpoint3.visited && pathpoint3.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint3; + } + + boolean flag = pathpoint3 == null || pathpoint3.nodeType == PathNodeType.OPEN || pathpoint3.costMalus != 0.0F; + boolean flag1 = pathpoint == null || pathpoint.nodeType == PathNodeType.OPEN || pathpoint.costMalus != 0.0F; + boolean flag2 = pathpoint2 == null || pathpoint2.nodeType == PathNodeType.OPEN || pathpoint2.costMalus != 0.0F; + boolean flag3 = pathpoint1 == null || pathpoint1.nodeType == PathNodeType.OPEN || pathpoint1.costMalus != 0.0F; + + if (flag && flag3) + { + PathPoint pathpoint4 = this.getSafePoint(currentPoint.x - 1, currentPoint.y, currentPoint.z - 1, j, d0, EnumFacing.NORTH); + + if (pathpoint4 != null && !pathpoint4.visited && pathpoint4.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint4; + } + } + + if (flag && flag2) + { + PathPoint pathpoint5 = this.getSafePoint(currentPoint.x + 1, currentPoint.y, currentPoint.z - 1, j, d0, EnumFacing.NORTH); + + if (pathpoint5 != null && !pathpoint5.visited && pathpoint5.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint5; + } + } + + if (flag1 && flag3) + { + PathPoint pathpoint6 = this.getSafePoint(currentPoint.x - 1, currentPoint.y, currentPoint.z + 1, j, d0, EnumFacing.SOUTH); + + if (pathpoint6 != null && !pathpoint6.visited && pathpoint6.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint6; + } + } + + if (flag1 && flag2) + { + PathPoint pathpoint7 = this.getSafePoint(currentPoint.x + 1, currentPoint.y, currentPoint.z + 1, j, d0, EnumFacing.SOUTH); + + if (pathpoint7 != null && !pathpoint7.visited && pathpoint7.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint7; + } + } + + return i; + } + + @Nullable + private PathPoint getSafePoint(int x, int y, int z, int p_186332_4_, double p_186332_5_, EnumFacing facing) + { + PathPoint pathpoint = null; + BlockPos blockpos = new BlockPos(x, y, z); + BlockPos blockpos1 = blockpos.down(); + double d0 = (double) y - (1.0D - this.blockaccess.getBlockState(blockpos1).getBoundingBox(this.blockaccess, blockpos1).maxY); + + if (d0 - p_186332_5_ > 1.125D) + { + return null; + } else + { + PathNodeType pathnodetype = this.getPathNodeType(this.entity, x, y, z); + float f = this.entity.getPathPriority(pathnodetype); + double d1 = (double) this.entity.width / 2.0D; + + if (f >= 0.0F) + { + pathpoint = this.openPoint(x, y, z); + pathpoint.nodeType = pathnodetype; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + } + + if (pathnodetype == PathNodeType.WALKABLE) + { + return pathpoint; + } else + { + if (pathpoint == null && p_186332_4_ > 0 && pathnodetype != PathNodeType.FENCE && pathnodetype != PathNodeType.TRAPDOOR) + { + pathpoint = this.getSafePoint(x, y + 1, z, p_186332_4_ - 1, p_186332_5_, facing); + + if (pathpoint != null && (pathpoint.nodeType == PathNodeType.OPEN || pathpoint.nodeType == PathNodeType.WALKABLE) && this.entity.width < 1.0F) + { + double d2 = (double) (x - facing.getXOffset()) + 0.5D; + double d3 = (double) (z - facing.getZOffset()) + 0.5D; + AxisAlignedBB axisalignedbb = new AxisAlignedBB(d2 - d1, (double) y + 0.001D, d3 - d1, d2 + d1, (double) ((float) y + this.entity.height), d3 + d1); + AxisAlignedBB axisalignedbb1 = this.blockaccess.getBlockState(blockpos).getBoundingBox(this.blockaccess, blockpos); + AxisAlignedBB axisalignedbb2 = axisalignedbb.expand(0.0D, axisalignedbb1.maxY - 0.002D, 0.0D); + + if (this.entity.world.collidesWithAnyBlock(axisalignedbb2)) + { + pathpoint = null; + } + } + } + + if (pathnodetype == PathNodeType.OPEN) + { + AxisAlignedBB axisalignedbb3 = new AxisAlignedBB((double) x - d1 + 0.5D, (double) y + 0.001D, (double) z - d1 + 0.5D, (double) x + d1 + 0.5D, + (double) ((float) y + this.entity.height), (double) z + d1 + 0.5D); + + if (this.entity.world.collidesWithAnyBlock(axisalignedbb3)) + { + return null; + } + + if (this.entity.width >= 1.0F) + { + PathNodeType pathnodetype1 = this.getPathNodeType(this.entity, x, y - 1, z); + + if (pathnodetype1 == PathNodeType.BLOCKED) + { + pathpoint = this.openPoint(x, y, z); + pathpoint.nodeType = PathNodeType.WALKABLE; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + return pathpoint; + } + } + + int i = 0; + + while (y > 0 && pathnodetype == PathNodeType.OPEN) + { + --y; + + if (i++ >= this.entity.getMaxFallHeight()) + { + return null; + } + + pathnodetype = this.getPathNodeType(this.entity, x, y, z); + f = this.entity.getPathPriority(pathnodetype); + + if (pathnodetype != PathNodeType.OPEN && f >= 0.0F) + { + pathpoint = this.openPoint(x, y, z); + pathpoint.nodeType = pathnodetype; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + break; + } + + if (f < 0.0F) + { + return null; + } + } + } + + return pathpoint; + } + } + } + + @Override + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z, EntityLiving entitylivingIn, int xSize, int ySize, int zSize, boolean canBreakDoorsIn, boolean canEnterDoorsIn) + { + EnumSet enumset = EnumSet.noneOf(PathNodeType.class); + PathNodeType pathnodetype = PathNodeType.BLOCKED; + double d0 = (double) entitylivingIn.width / 2.0D; + BlockPos blockpos = new BlockPos(entitylivingIn); + + for (int i = 0; i < xSize; ++i) + { + for (int j = 0; j < ySize; ++j) + { + for (int k = 0; k < zSize; ++k) + { + int l = i + x; + int i1 = j + y; + int j1 = k + z; + PathNodeType pathnodetype1 = this.getPathNodeType(blockaccessIn, l, i1, j1); + + if (pathnodetype1 == PathNodeType.DOOR_WOOD_CLOSED && canBreakDoorsIn && canEnterDoorsIn) + { + pathnodetype1 = PathNodeType.WALKABLE; + } + + if (pathnodetype1 == PathNodeType.DOOR_OPEN && !canEnterDoorsIn) + { + pathnodetype1 = PathNodeType.BLOCKED; + } + + if (pathnodetype1 == PathNodeType.RAIL && !(blockaccessIn.getBlockState(blockpos).getBlock() instanceof BlockRailBase) + && !(blockaccessIn.getBlockState(blockpos.down()).getBlock() instanceof BlockRailBase)) + { + pathnodetype1 = PathNodeType.FENCE; + } + + if (i == 0 && j == 0 && k == 0) + { + pathnodetype = pathnodetype1; + } + + enumset.add(pathnodetype1); + } + } + } + + if (enumset.contains(PathNodeType.FENCE)) + { + return PathNodeType.FENCE; + } else + { + PathNodeType pathnodetype2 = PathNodeType.BLOCKED; + + for (PathNodeType pathnodetype3 : enumset) + { + if (entitylivingIn.getPathPriority(pathnodetype3) < 0.0F) + { + return pathnodetype3; + } + + if (entitylivingIn.getPathPriority(pathnodetype3) >= entitylivingIn.getPathPriority(pathnodetype2)) + { + pathnodetype2 = pathnodetype3; + } + } + + if (pathnodetype == PathNodeType.OPEN && entitylivingIn.getPathPriority(pathnodetype2) == 0.0F) + { + return PathNodeType.OPEN; + } else + { + return pathnodetype2; + } + } + } + + private PathNodeType getPathNodeType(EntityLiving entitylivingIn, BlockPos pos) + { + return this.getPathNodeType(entitylivingIn, pos.getX(), pos.getY(), pos.getZ()); + } + + private PathNodeType getPathNodeType(EntityLiving entitylivingIn, int x, int y, int z) + { + return this.getPathNodeType(this.blockaccess, x, y, z, entitylivingIn, this.entitySizeX, this.entitySizeY, this.entitySizeZ, this.getCanOpenDoors(), this.getCanEnterDoors()); + } + + @Override + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z) + { + PathNodeType pathnodetype = this.getPathNodeTypeRaw(blockaccessIn, x, y, z); + + if (pathnodetype == PathNodeType.OPEN && y >= 1) + { + Block block = blockaccessIn.getBlockState(new BlockPos(x, y - 1, z)).getBlock(); + PathNodeType pathnodetype1 = this.getPathNodeTypeRaw(blockaccessIn, x, y - 1, z); + pathnodetype = pathnodetype1 != PathNodeType.WALKABLE && pathnodetype1 != PathNodeType.OPEN && pathnodetype1 != PathNodeType.WATER && pathnodetype1 != PathNodeType.LAVA + ? PathNodeType.WALKABLE : PathNodeType.OPEN; + + if (pathnodetype1 == PathNodeType.DAMAGE_FIRE || block == Blocks.MAGMA) + { + pathnodetype = PathNodeType.DAMAGE_FIRE; + } + + if (pathnodetype1 == PathNodeType.DAMAGE_CACTUS) + { + pathnodetype = PathNodeType.DAMAGE_CACTUS; + } + } + + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + if (pathnodetype == PathNodeType.WALKABLE) + { + for (int j = -1; j <= 1; ++j) + { + for (int i = -1; i <= 1; ++i) + { + if (j != 0 || i != 0) + { + Block block1 = blockaccessIn.getBlockState(blockpos$pooledmutableblockpos.setPos(j + x, y, i + z)).getBlock(); + + if (block1 == Blocks.CACTUS) + { + pathnodetype = PathNodeType.DANGER_CACTUS; + } else if (block1 == Blocks.FIRE) + { + pathnodetype = PathNodeType.DANGER_FIRE; + } + } + } + } + } + + blockpos$pooledmutableblockpos.release(); + return pathnodetype; + } + + private PathNodeType getPathNodeTypeRaw(IBlockAccess p_189553_1_, int p_189553_2_, int p_189553_3_, int p_189553_4_) + { + BlockPos blockpos = new BlockPos(p_189553_2_, p_189553_3_, p_189553_4_); + IBlockState iblockstate = p_189553_1_.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + Material material = iblockstate.getMaterial(); + return material == Material.AIR ? PathNodeType.OPEN + : (block != Blocks.TRAPDOOR && block != Blocks.IRON_TRAPDOOR + && block != Blocks.WATERLILY + ? (block == Blocks.FIRE ? PathNodeType.DAMAGE_FIRE + : (block == Blocks.CACTUS ? PathNodeType.DAMAGE_CACTUS + : (block instanceof BlockDoor && material == Material.WOOD + && !((Boolean) iblockstate.getValue(BlockDoor.OPEN)).booleanValue() + ? PathNodeType.DOOR_WOOD_CLOSED + : (block instanceof BlockDoor && material == Material.IRON + && !((Boolean) iblockstate.getValue(BlockDoor.OPEN)).booleanValue() + ? PathNodeType.DOOR_IRON_CLOSED + : (block instanceof BlockDoor && ((Boolean) iblockstate.getValue(BlockDoor.OPEN)).booleanValue() ? PathNodeType.DOOR_OPEN + : (block instanceof BlockRailBase ? PathNodeType.RAIL : (!(block instanceof BlockFence) && !(block instanceof BlockWall) + && (!(block instanceof BlockFenceGate) || ((Boolean) iblockstate.getValue(BlockFenceGate.OPEN)).booleanValue()) + ? (material == Material.WATER ? PathNodeType.WATER + : (material == Material.LAVA ? PathNodeType.LAVA : (block.isPassable(p_189553_1_, blockpos) ? PathNodeType.OPEN : PathNodeType.BLOCKED))) + : PathNodeType.FENCE))))))) + : PathNodeType.TRAPDOOR); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/event/EventHandlerVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/event/EventHandlerVenus.java new file mode 100644 index 00000000..5ba30c2a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/event/EventHandlerVenus.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.event; + +import java.util.ArrayList; +import micdoodle8.mods.galacticraft.api.entity.ILaserTrackableFast; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerHandler; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.relauncher.Side; + +public class EventHandlerVenus +{ + + @SubscribeEvent + public void onWorldTick(TickEvent.WorldTickEvent event) + { + if (event.side == Side.SERVER && event.phase == Phase.START) + { + ArrayList list = new ArrayList<>(event.world.loadedEntityList); + for (Entity e : list) + { + if (e.ticksExisted % 20 == 1 && e instanceof EntityLivingBase) + { + if (event.world.isMaterialInBB(e.getEntityBoundingBox().grow(-0.1D, -0.4D, -0.1D), VenusModule.acidMaterial)) + { + e.attackEntityFrom(DamageSourceGC.acid, 3.0F); + } + } + } + } + } + + @SubscribeEvent + public void onThermalArmorEvent(GCPlayerHandler.ThermalArmorEvent event) + { + if (event.armorStack.isEmpty()) + { + event.setArmorAddResult(GCPlayerHandler.ThermalArmorEvent.ArmorAddResult.REMOVE); + } else if (event.armorStack.getItem() == VenusItems.thermalPaddingTier2 && event.armorStack.getItemDamage() == event.armorIndex) + { + event.setArmorAddResult(GCPlayerHandler.ThermalArmorEvent.ArmorAddResult.ADD); + } + } + + @SubscribeEvent + public void onEntitySpawned(EntityJoinWorldEvent event) + { + if (event.getEntity() instanceof ILaserTrackableFast) + { + for (TileEntity tile : event.getEntity().getEntityWorld().loadedTileEntityList) + { + if (tile instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile).trackEntity(event.getEntity()); + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerCrashedProbe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerCrashedProbe.java new file mode 100644 index 00000000..4d3a1369 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerCrashedProbe.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.inventory; + +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerCrashedProbe extends Container +{ + + private TileEntityCrashedProbe tileEntity; + + public ContainerCrashedProbe(InventoryPlayer par1InventoryPlayer, TileEntityCrashedProbe tileEntityCrashedProbe) + { + this.tileEntity = tileEntityCrashedProbe; + + for (int i = 0; i < 6; ++i) + { + this.addSlotToContainer(new Slot(tileEntityCrashedProbe, i, 35 + i * 18, 18)); + } + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 52 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 110)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerGeothermal.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerGeothermal.java new file mode 100644 index 00000000..b606383a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerGeothermal.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityGeothermalGenerator; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerGeothermal extends Container +{ + + private TileEntityGeothermalGenerator tileEntity; + + public ContainerGeothermal(InventoryPlayer par1InventoryPlayer, TileEntityGeothermalGenerator geothermalGenerator) + { + this.tileEntity = geothermalGenerator; + this.addSlotToContainer(new SlotSpecific(geothermalGenerator, 0, 152, 83, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 51 + 68 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 61 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerLaserTurret.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerLaserTurret.java new file mode 100644 index 00000000..804e9c0c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerLaserTurret.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerLaserTurret extends Container +{ + + private TileEntityLaserTurret tileEntity; + + public ContainerLaserTurret(InventoryPlayer par1InventoryPlayer, TileEntityLaserTurret laserTurret) + { + this.tileEntity = laserTurret; + this.addSlotToContainer(new SlotSpecific(laserTurret, 0, 82, 103, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 69 + 68 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 79 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.isEmpty()) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerSolarArrayController.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerSolarArrayController.java new file mode 100644 index 00000000..83258b2f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/inventory/ContainerSolarArrayController.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.inventory; + +import micdoodle8.mods.galacticraft.api.item.IItemElectric; +import micdoodle8.mods.galacticraft.core.energy.EnergyUtil; +import micdoodle8.mods.galacticraft.core.inventory.SlotSpecific; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarArrayController; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerSolarArrayController extends Container +{ + + private TileEntitySolarArrayController tileEntity; + + public ContainerSolarArrayController(InventoryPlayer par1InventoryPlayer, TileEntitySolarArrayController solarGen) + { + this.tileEntity = solarGen; + this.addSlotToContainer(new SlotSpecific(solarGen, 0, 152, 91, IItemElectric.class)); + + int var6; + int var7; + + // Player inv: + + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var7 + var6 * 9 + 9, 8 + var7 * 18, 59 + 68 + var6 * 18)); + } + } + + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var6, 8 + var6 * 18, 69 + 116)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer var1) + { + return this.tileEntity.isUsableByPlayer(var1); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int par1) + { + ItemStack var2 = ItemStack.EMPTY; + final Slot slot = this.inventorySlots.get(par1); + final int b = this.inventorySlots.size(); + + if (slot != null && slot.getHasStack()) + { + final ItemStack stack = slot.getStack(); + var2 = stack.copy(); + boolean movedToMachineSlot = false; + + if (par1 == 0) + { + if (!this.mergeItemStack(stack, b - 36, b, true)) + { + return ItemStack.EMPTY; + } + } else + { + if (EnergyUtil.isElectricItem(stack.getItem())) + { + if (!this.mergeItemStack(stack, 0, 1, false)) + { + return ItemStack.EMPTY; + } + movedToMachineSlot = true; + } else + { + if (par1 < b - 9) + { + if (!this.mergeItemStack(stack, b - 9, b, false)) + { + return ItemStack.EMPTY; + } + } else if (!this.mergeItemStack(stack, b - 36, b - 9, false)) + { + return ItemStack.EMPTY; + } + } + } + + if (stack.getCount() == 0) + { + // Needed where tile has inventoryStackLimit of 1 + if (movedToMachineSlot && var2.getCount() > 1) + { + ItemStack remainder = var2.copy(); + remainder.shrink(1); + slot.putStack(remainder); + } else + { + slot.putStack(ItemStack.EMPTY); + } + } else + { + slot.onSlotChanged(); + } + + if (stack.getCount() == var2.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(entityPlayer, stack); + } + + return var2; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBasicVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBasicVenus.java new file mode 100644 index 00000000..83d39b3f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBasicVenus.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.items.ItemDesc; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBasicVenus extends ItemDesc implements ISortableItem, GCRarity +{ + + public static String[] names = + {"shield_controller", "ingot_lead", "radioisotope_core", "thermal_fabric", "solar_dust", "solar_module_2", "thin_solar_wafer"}; + + public ItemBasicVenus(String name) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(name); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemBasicVenus.names.length; i++) + { + list.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemBasicVenus.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + switch (meta) + { + case 0: + return EnumSortCategoryItem.GEAR; + case 1: + return EnumSortCategoryItem.INGOT; + default: + return EnumSortCategoryItem.GENERAL; + } + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP && itemStack.getItemDamage() == 0) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(10); + + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(10, itemStack.copy()); + itemStack.setCount(0); + } + } + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } + + @Override + public String getShiftDescription(int meta) + { + if (meta == 0) + { + return GCCoreUtil.translate("item.shield_controller.description"); + } + + return ""; + } + + @Override + public boolean showDescription(int meta) + { + return meta == 0; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBatteryAtomic.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBatteryAtomic.java new file mode 100644 index 00000000..af3c6aed --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBatteryAtomic.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumColor; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class ItemBatteryAtomic extends ItemElectricBase implements ISortableItem, GCRarity +{ + + public ItemBatteryAtomic(String assetName) + { + super(); + this.setTranslationKey(assetName); + } + + @Override + protected void setMaxTransfer() + { + this.transferMax = 7; + } + + @Override + public int getTierGC(ItemStack itemStack) + { + return 2; + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(EnumColor.DARK_GREEN + GCCoreUtil.translate("gui.infinite_item.desc")); + tooltip.add(EnumColor.ORANGE + GCCoreUtil.translate("gui.message.low_energy_output.name")); + } + + @Override + public float getElectricityStored(ItemStack itemStack) + { + return this.getMaxElectricityStored(itemStack); + } + + @Override + public void setElectricity(ItemStack itemStack, float joules) + { + } + + @Override + public float getMaxElectricityStored(ItemStack itemStack) + { + return Float.POSITIVE_INFINITY; + } + + @Override + public float getTransfer(ItemStack itemStack) + { + return 0.0F; + } + + @Override + public float recharge(ItemStack theItem, float energy, boolean doReceive) + { + return 0F; + } + + @Override + public float discharge(ItemStack theItem, float energy, boolean doTransfer) + { + return super.discharge(theItem, energy, doTransfer); + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList par3List) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + par3List.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.GENERAL; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockBasicVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockBasicVenus.java new file mode 100644 index 00000000..d24d7421 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockBasicVenus.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockBasicVenus extends ItemBlock implements GCRarity +{ + + public ItemBlockBasicVenus(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name; + + switch (itemstack.getItemDamage()) + { + default: + name = BlockBasicVenus.EnumBlockBasicVenus.values()[itemstack.getItemDamage()].getName(); + } + + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockTorchWeb.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockTorchWeb.java new file mode 100644 index 00000000..56ff35a3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemBlockTorchWeb.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTorchWeb; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemBlockTorchWeb extends ItemBlockDesc implements GCRarity +{ + + public ItemBlockTorchWeb(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta; + } + + @Override + public String getTranslationKey(ItemStack itemstack) + { + String name = BlockTorchWeb.EnumWebType.values()[itemstack.getItemDamage()].getName(); + return this.getBlock().getTranslationKey() + "." + name; + } + + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (stack.getItemDamage() == 1) + { + tooltip.add(GCCoreUtil.translate("tile.web_torch.web_torch_1.description")); + } + } + + @Override + public String getTranslationKey() + { + return this.getBlock().getTranslationKey() + ".0"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemKeyVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemKeyVenus.java new file mode 100644 index 00000000..3d018cd8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemKeyVenus.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IKeyItem; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemKeyVenus extends Item implements IKeyItem, ISortableItem, GCRarity +{ + + public ItemKeyVenus(String name) + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setTranslationKey(name); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public String getTranslationKey(ItemStack itemStack) + { + return "item.key.t3"; + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList list) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + list.add(new ItemStack(this, 1, 0)); + } + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getTier(ItemStack keyStack) + { + return 3; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.KEYS; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemThermalPaddingTier2.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemThermalPaddingTier2.java new file mode 100644 index 00000000..f106197b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemThermalPaddingTier2.java @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.api.item.IItemThermal; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemThermalPaddingTier2 extends Item implements IItemThermal, ISortableItem, GCRarity +{ + + public static String[] names = + {"thermal_helm_t2", "thermal_chestplate_t2", "thermal_leggings_t2", "thermal_boots_t2"}; + + public ItemThermalPaddingTier2(String assetName) + { + super(); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setMaxStackSize(1); + this.setTranslationKey(assetName); + } + + @SideOnly(Side.CLIENT) + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public void addInformation(ItemStack par1ItemStack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(GCCoreUtil.translate("item.tier2.desc")); + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList subItems) + { + if (tab == GalacticraftCore.galacticraftItemsTab || tab == CreativeTabs.SEARCH) + { + for (int i = 0; i < ItemThermalPaddingTier2.names.length; i++) + { + subItems.add(new ItemStack(this, 1, i)); + } + } + } + + @Override + public String getTranslationKey(ItemStack par1ItemStack) + { + if (names.length > par1ItemStack.getItemDamage()) + { + return "item." + ItemThermalPaddingTier2.names[par1ItemStack.getItemDamage()]; + } + + return "unnamed"; + } + + @Override + public int getMetadata(int par1) + { + return par1; + } + + @Override + public int getThermalStrength() + { + return 2; + } + + @Override + public boolean isValidForSlot(ItemStack stack, int armorSlot) + { + return stack.getItemDamage() == armorSlot; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.ARMOR; + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) + { + ItemStack itemStack = player.getHeldItem(hand); + + if (player instanceof EntityPlayerMP) + { + GCPlayerStats stats = GCPlayerStats.get(player); + ItemStack gear = stats.getExtendedInventory().getStackInSlot(6); + ItemStack gear1 = stats.getExtendedInventory().getStackInSlot(7); + ItemStack gear2 = stats.getExtendedInventory().getStackInSlot(8); + ItemStack gear3 = stats.getExtendedInventory().getStackInSlot(9); + + if (itemStack.getItemDamage() == 0) + { + if (gear.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(6, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 1) + { + if (gear1.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(7, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 2) + { + if (gear2.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(8, itemStack.copy()); + itemStack.setCount(0); + } + } else if (itemStack.getItemDamage() == 3) + { + if (gear3.isEmpty()) + { + stats.getExtendedInventory().setInventorySlotContents(9, itemStack.copy()); + itemStack.setCount(0); + } + } + } + return new ActionResult<>(EnumActionResult.SUCCESS, itemStack); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemVolcanicPickaxe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemVolcanicPickaxe.java new file mode 100644 index 00000000..ccecce77 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/items/ItemVolcanicPickaxe.java @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.items; + +import java.util.List; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.item.GCRarity; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; +import micdoodle8.mods.galacticraft.core.items.IShiftDescription; +import micdoodle8.mods.galacticraft.core.items.ISortableItem; +import micdoodle8.mods.galacticraft.core.util.ClientUtil; +import micdoodle8.mods.galacticraft.core.util.EnumSortCategoryItem; +import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCommandBlock; +import net.minecraft.block.BlockStructure; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemPickaxe; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemVolcanicPickaxe extends ItemPickaxe implements ISortableItem, IShiftDescription, GCRarity +{ + + public ItemVolcanicPickaxe(String assetName) + { + super(VenusItems.TOOL_VOLCANIC); + this.setTranslationKey(assetName); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List info, ITooltipFlag flagIn) + { + if (this.showDescription(stack.getItemDamage())) + { + if (ClientUtil.isKeyPressed(Minecraft.getMinecraft().gameSettings.keyBindSneak)) + { + info.addAll(FMLClientHandler.instance().getClient().fontRenderer.listFormattedStringToWidth(this.getShiftDescription(stack.getItemDamage()), 150)); + } else + { + info.add(GCCoreUtil.translateWithFormat("item_desc.shift.name", GameSettings.getKeyDisplayString(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode()))); + } + } + } + + @Override + public CreativeTabs getCreativeTab() + { + return GalacticraftCore.galacticraftItemsTab; + } + + @Override + public EnumSortCategoryItem getCategory(int meta) + { + return EnumSortCategoryItem.TOOLS; + } + + @Override + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + boolean ret = super.onBlockDestroyed(stack, worldIn, state, pos, entityLiving); + + if (!(entityLiving instanceof EntityPlayer) || worldIn.isRemote) + { + return ret; + } + + EntityPlayer player = (EntityPlayer) entityLiving; + EnumFacing facing = entityLiving.getHorizontalFacing(); + + if (entityLiving.rotationPitch < -45.0F) + { + facing = EnumFacing.UP; + } else if (entityLiving.rotationPitch > 45.0F) + { + facing = EnumFacing.DOWN; + } + + boolean yAxis = facing.getAxis() == EnumFacing.Axis.Y; + boolean xAxis = facing.getAxis() == EnumFacing.Axis.X; + + for (int i = -1; i <= 1; ++i) + { + for (int j = -1; j <= 1 && !stack.isEmpty(); ++j) + { + if (i == 0 && j == 0) + { + continue; + } + + BlockPos pos1; + if (yAxis) + { + pos1 = pos.add(i, 0, j); + } else if (xAxis) + { + pos1 = pos.add(0, i, j); + } else + { + pos1 = pos.add(i, j, 0); + } + + // :Replicate logic of + // PlayerInteractionManager.tryHarvestBlock(pos1) + IBlockState state1 = worldIn.getBlockState(pos1); + float f = state1.getBlockHardness(worldIn, pos1); + if (f >= 0F) + { + BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(worldIn, pos1, state1, player); + MinecraftForge.EVENT_BUS.post(event); + if (!event.isCanceled()) + { + Block block = state1.getBlock(); + if ((block instanceof BlockCommandBlock || block instanceof BlockStructure) && !player.canUseCommandBlock()) + { + worldIn.notifyBlockUpdate(pos1, state1, state1, 3); + continue; + } + TileEntity tileentity = worldIn.getTileEntity(pos1); + if (tileentity != null) + { + Packet pkt = tileentity.getUpdatePacket(); + if (pkt != null) + { + ((EntityPlayerMP) player).connection.sendPacket(pkt); + } + } + + boolean canHarvest = block.canHarvestBlock(worldIn, pos1, player); + boolean destroyed = block.removedByPlayer(state1, worldIn, pos1, player, canHarvest); + if (destroyed) + { + block.onPlayerDestroy(worldIn, pos1, state1); + } + if (canHarvest && destroyed) + { + block.harvestBlock(worldIn, player, pos1, state1, tileentity, stack); + stack.damageItem(1, player); + } + } + } + } + } + + return ret; + } + + @Override + public String getShiftDescription(int meta) + { + return GCCoreUtil.translate("item.volcanic_pickaxe.description"); + } + + @Override + public boolean showDescription(int meta) + { + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/network/PacketSimpleVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/network/PacketSimpleVenus.java new file mode 100644 index 00000000..5e644658 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/network/PacketSimpleVenus.java @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.network; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import micdoodle8.mods.galacticraft.core.network.NetworkUtil; +import micdoodle8.mods.galacticraft.core.network.PacketBase; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityLaserTurret; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PacketSimpleVenus extends PacketBase +{ + + public static enum EnumSimplePacketVenus + { + + // SERVER + S_UPDATE_ADVANCED_GUI(Side.SERVER, Integer.class, BlockPos.class, Integer.class), + S_OPEN_LASER_TURRET_GUI(Side.SERVER, BlockPos.class), + S_MODIFY_LASER_TARGET(Side.SERVER, Integer.class, BlockPos.class, String.class); + // CLIENT + + private Side targetSide; + private Class[] decodeAs; + + private EnumSimplePacketVenus(Side targetSide, Class... decodeAs) + { + this.targetSide = targetSide; + this.decodeAs = decodeAs; + } + + public Side getTargetSide() + { + return this.targetSide; + } + + public Class[] getDecodeClasses() + { + return this.decodeAs; + } + } + + private EnumSimplePacketVenus type; + private List data; + + public PacketSimpleVenus() + { + super(); + } + + public PacketSimpleVenus(EnumSimplePacketVenus packetType, int dimID, Object[] data) + { + this(packetType, dimID, Arrays.asList(data)); + } + + public PacketSimpleVenus(EnumSimplePacketVenus packetType, int dimID, List data) + { + super(dimID); + + if (packetType.getDecodeClasses().length != data.size()) + { + GalacticraftPlanets.logger.info("Venus Simple Packet found data length different than packet type: " + packetType.name()); + } + + this.type = packetType; + this.data = data; + } + + @Override + public void encodeInto(ByteBuf buffer) + { + super.encodeInto(buffer); + buffer.writeInt(this.type.ordinal()); + + try + { + NetworkUtil.encodeData(buffer, this.data); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void decodeInto(ByteBuf buffer) + { + super.decodeInto(buffer); + this.type = EnumSimplePacketVenus.values()[buffer.readInt()]; + + if (this.type.getDecodeClasses().length > 0) + { + this.data = NetworkUtil.decodeData(this.type.getDecodeClasses(), buffer); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void handleClientSide(EntityPlayer player) + { + + } + + @Override + public void handleServerSide(EntityPlayer player) + { + switch (this.type) + { + case S_UPDATE_ADVANCED_GUI: + TileEntity tile0 = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.blacklistMode = ((Integer) this.data.get(2)) != 0; + } + break; + case 1: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.targetMeteors = ((Integer) this.data.get(2)) != 0; + } + break; + case 2: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.alwaysIgnoreSpaceRace = ((Integer) this.data.get(2)) != 0; + } + break; + case 3: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.priorityClosest = ((Integer) this.data.get(2)); + } + break; + case 4: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.priorityLowestHealth = ((Integer) this.data.get(2)); + } + break; + case 5: + if (tile0 instanceof TileEntityLaserTurret) + { + TileEntityLaserTurret launchController = (TileEntityLaserTurret) tile0; + launchController.priorityHighestHealth = ((Integer) this.data.get(2)); + } + break; + default: + break; + } + break; + case S_OPEN_LASER_TURRET_GUI: + BlockPos pos = (BlockPos) this.data.get(0); + player.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, player.world, pos.getX(), pos.getY(), pos.getZ()); + break; + case S_MODIFY_LASER_TARGET: + TileEntity tile1 = player.world.getTileEntity((BlockPos) this.data.get(1)); + + switch ((Integer) this.data.get(0)) + { + case 0: + if (tile1 instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile1).addPlayer((String) this.data.get(2)); + } + break; + case 1: + if (tile1 instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile1).addEntity(new ResourceLocation((String) this.data.get(2))); + } + break; + case 2: + if (tile1 instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile1).removePlayer((String) this.data.get(2)); + } + break; + case 3: + if (tile1 instanceof TileEntityLaserTurret) + { + ((TileEntityLaserTurret) tile1).removeEntity(new ResourceLocation((String) this.data.get(2))); + } + break; + } + break; + default: + break; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/recipe/RecipeManagerVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/recipe/RecipeManagerVenus.java new file mode 100644 index 00000000..f66ac078 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/recipe/RecipeManagerVenus.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.recipe; + +import java.util.Arrays; +import micdoodle8.mods.galacticraft.api.recipe.CircuitFabricatorRecipes; +import micdoodle8.mods.galacticraft.core.GCItems; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusItems; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraftforge.oredict.OreDictionary; + +public class RecipeManagerVenus +{ + + public static void loadCompatibilityRecipes() + { + } + + public static void addUniversalRecipes() + { + OreDictionary.registerOre("ingotLead", new ItemStack(VenusItems.basicItem, 1, 1)); + OreDictionary.registerOre("waferSolarThin", new ItemStack(VenusItems.basicItem, 1, 6)); + + // Smelting + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 6), new ItemStack(GCItems.basicItem, 1, 5), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 7), new ItemStack(GCItems.basicItem, 1, 3), 0.5F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 8), new ItemStack(VenusItems.basicItem, 1, 1), 1.0F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 9), new ItemStack(Items.QUARTZ), 0.2F); + FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(VenusBlocks.venusBlock, 1, 11), new ItemStack(GCItems.basicItem, 1, 4), 0.5F); + + ItemStack solarPanels = new ItemStack(VenusItems.basicItem, 3, 6); + ItemStack silicon = new ItemStack(GCItems.basicItem, 1, 2); + CircuitFabricatorRecipes.addRecipe(solarPanels, Arrays.asList(new ItemStack(Items.DIAMOND), silicon, silicon, new ItemStack(Items.REDSTONE), new ItemStack(VenusItems.basicItem, 1, 4))); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tick/VenusTickHandlerServer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tick/VenusTickHandlerServer.java new file mode 100644 index 00000000..58f1fa1a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tick/VenusTickHandlerServer.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tick; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import micdoodle8.mods.galacticraft.planets.venus.tile.SolarModuleNetwork; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntitySolarTransmitter; +import net.minecraft.server.MinecraftServer; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; + +public class VenusTickHandlerServer +{ + + private static List solarModuleNetworks = Lists.newArrayList(); + public static LinkedList solarTransmitterUpdates = new LinkedList<>(); + + public static void addSolarNetwork(SolarModuleNetwork network) + { + solarModuleNetworks.add(network); + } + + public static void removeSolarNetwork(SolarModuleNetwork network) + { + solarModuleNetworks.remove(network); + } + + @SubscribeEvent + public void onServerTick(TickEvent.ServerTickEvent event) + { + MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); + // Prevent issues when clients switch to LAN servers + if (server == null) + { + return; + } + + if (event.phase == Phase.END) + { + for (SolarModuleNetwork network : new ArrayList<>(solarModuleNetworks)) + { + if (network.getTransmitters().isEmpty()) + { + solarModuleNetworks.remove(network); + } + } + + int maxPasses = 10; + while (!solarTransmitterUpdates.isEmpty()) + { + LinkedList pass = new LinkedList<>(); + pass.addAll(solarTransmitterUpdates); + solarTransmitterUpdates.clear(); + for (TileEntitySolarTransmitter newTile : pass) + { + if (!newTile.isInvalid()) + { + newTile.refresh(); + } + } + + if (--maxPasses <= 0) + { + break; + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/NetworkFinderSolar.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/NetworkFinderSolar.java new file mode 100644 index 00000000..35243cda --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/NetworkFinderSolar.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class NetworkFinderSolar +{ + + public World worldObj; + public BlockVec3 start; + private BlockVec3 toIgnore; + + private Set iterated = new HashSet<>(); + public List found = new LinkedList<>(); + + public NetworkFinderSolar(World world, BlockVec3 location, BlockVec3 ignore) + { + worldObj = world; + start = location; + + toIgnore = ignore; + } + + private void loopAll(int x, int y, int z, int dirIn) + { + BlockVec3 obj = null; + for (int dir = 0; dir < 6; dir++) + { + if (dir == dirIn) + { + continue; + } + switch (dir) + { + case 0: + obj = new BlockVec3(x, y - 1, z); + break; + case 1: + obj = new BlockVec3(x, y + 1, z); + break; + case 2: + obj = new BlockVec3(x, y, z - 1); + break; + case 3: + obj = new BlockVec3(x, y, z + 1); + break; + case 4: + obj = new BlockVec3(x - 1, y, z); + break; + case 5: + obj = new BlockVec3(x + 1, y, z); + break; + } + + if (!iterated.contains(obj)) + { + iterated.add(obj); + + TileEntity tileEntity = worldObj.getTileEntity(new BlockPos(obj.x, obj.y, obj.z)); + + if (tileEntity instanceof ITransmitter && ((ITransmitter) tileEntity).getNetworkType() == NetworkType.SOLAR_MODULE) + { + found.add((ITransmitter) tileEntity); + loopAll(obj.x, obj.y, obj.z, dir ^ 1); + } + } + } + } + + public List exploreNetwork() + { + TileEntity tile = start.getTileEntity(worldObj); + if (tile instanceof ITransmitter && ((ITransmitter) tile).getNetworkType() == NetworkType.SOLAR_MODULE) + { + iterated.add(start); + iterated.add(toIgnore); + found.add((ITransmitter) tile); + loopAll(start.x, start.y, start.z, 6); + } + + return found; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/SolarModuleNetwork.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/SolarModuleNetwork.java new file mode 100644 index 00000000..30b82277 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/SolarModuleNetwork.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import com.google.common.collect.Lists; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +/** + * A universal network that works with multiple energy systems. + * + * @author radfast, micdoodle8, Calclavia, Aidancbrady + */ +public class SolarModuleNetwork implements IGridNetwork +{ + + private final Set transmitters = new HashSet<>(); + + public SolarModuleNetwork() + { + } + + public SolarModuleNetwork(Collection toMerge) + { + for (SolarModuleNetwork network : toMerge) + { + if (network != null) + { + for (ITransmitter transmitter : network.transmitters) + { + transmitter.setNetwork(this); + this.transmitters.add(transmitter); + } + network.unregister(); + } + } + + this.register(); + } + + /** + * Refresh validity of each conductor in the network + */ + public void refreshWithChecks() + { + Iterator it = this.transmitters.iterator(); + while (it.hasNext()) + { + ITransmitter transmitter = it.next(); + + if (transmitter == null) + { + it.remove(); + continue; + } + + TileEntity tile = (TileEntity) transmitter; + World world = tile.getWorld(); + // Remove any transmitters in unloaded chunks + if (tile.isInvalid() || world == null || !world.isBlockLoaded(tile.getPos())) + { + it.remove(); + continue; + } + + if (transmitter != world.getTileEntity(tile.getPos())) + { + it.remove(); + continue; + } + + if (transmitter.getNetwork() != this) + { + transmitter.setNetwork(this); + transmitter.onNetworkChanged(); + } + } + } + + @Override + public void refresh() + { + Iterator it = this.transmitters.iterator(); + while (it.hasNext()) + { + ITransmitter conductor = it.next(); + + if (conductor == null) + { + it.remove(); + continue; + } + + TileEntity tile = (TileEntity) conductor; + World world = tile.getWorld(); + // Remove any transmitters in unloaded chunks + if (tile.isInvalid() || world == null) + { + it.remove(); + continue; + } + + if (conductor.getNetwork() != this) + { + conductor.setNetwork(this); + conductor.onNetworkChanged(); + } + } + } + + @Override + public SolarModuleNetwork merge(SolarModuleNetwork network) + { + if (network != null && network != this) + { + SolarModuleNetwork newNetwork = new SolarModuleNetwork(Lists.newArrayList(this, network)); + newNetwork.refresh(); + return newNetwork; + } + + return this; + } + + private void destroy() + { + this.transmitters.clear(); + } + + @Override + public void split(ITransmitter splitPoint) + { + if (splitPoint instanceof TileEntity) + { + this.getTransmitters().remove(splitPoint); + splitPoint.setNetwork(null); + + // If the size of the residual network is 1, it should simply be + // preserved + if (this.getTransmitters().size() > 1) + { + World world = ((TileEntity) splitPoint).getWorld(); + + if (this.getTransmitters().size() > 0) + { + ITransmitter[] nextToSplit = new ITransmitter[6]; + boolean[] toDo = + {true, true, true, true, true, true}; + TileEntity tileEntity; + + for (int j = 0; j < 6; j++) + { + switch (j) + { + case 0: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().down()); + break; + case 1: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().up()); + break; + case 2: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().north()); + break; + case 3: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().south()); + break; + case 4: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().west()); + break; + case 5: + tileEntity = world.getTileEntity(((TileEntity) splitPoint).getPos().east()); + break; + default: + // Not reachable, only to prevent uninitiated + // compile errors + tileEntity = null; + break; + } + + if (tileEntity instanceof ITransmitter) + { + nextToSplit[j] = (ITransmitter) tileEntity; + } else + { + toDo[j] = false; + } + } + + for (int i1 = 0; i1 < 6; i1++) + { + if (toDo[i1]) + { + ITransmitter connectedBlockA = nextToSplit[i1]; + NetworkFinderSolar finder = new NetworkFinderSolar(world, new BlockVec3((TileEntity) connectedBlockA), new BlockVec3((TileEntity) splitPoint)); + List partNetwork = finder.exploreNetwork(); + + // Mark any others still to do in the nextToSplit + // array which are connected to this, as dealt with + for (int i2 = i1 + 1; i2 < 6; i2++) + { + ITransmitter connectedBlockB = nextToSplit[i2]; + + if (toDo[i2]) + { + if (partNetwork.contains(connectedBlockB)) + { + toDo[i2] = false; + } + } + } + + // Now make the new network from partNetwork + SolarModuleNetwork newNetwork = new SolarModuleNetwork(); + newNetwork.getTransmitters().addAll(partNetwork); + newNetwork.refreshWithChecks(); + newNetwork.register(); + } + } + + this.destroy(); + } + } + // Splitting a 1-block network leaves nothing + else if (this.getTransmitters().size() == 0) + { + this.destroy(); + } + } + + if (this.transmitters.isEmpty()) + { + this.unregister(); + } + } + + public void register() + { + GalacticraftPlanets.proxy.registerNetwork(this); + } + + public void unregister() + { + GalacticraftPlanets.proxy.unregisterNetwork(this); + } + + public void addTransmitter(ITransmitter transmitter) + { + this.transmitters.add(transmitter); + this.refresh(); + } + + public void removeTransmitter(ITransmitter transmitter) + { + this.transmitters.remove(transmitter); + } + + @Override + public Set getTransmitters() + { + return transmitters; + } + + @Override + public String toString() + { + return "SolarModuleNetwork[" + this.hashCode() + "|Wires:" + this.getTransmitters().size() + "]"; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityCrashedProbe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityCrashedProbe.java new file mode 100644 index 00000000..7a2b392a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityCrashedProbe.java @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.tile.TileEntityInventory; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTable; + +public class TileEntityCrashedProbe extends TileEntityInventory +{ + + private boolean hasCoreToDrop; + protected ResourceLocation lootTable; + protected long lootTableSeed; + + public TileEntityCrashedProbe() + { + super("container.crashed_probe.name"); + inventory = NonNullList.withSize(6, ItemStack.EMPTY); + } + + protected void fillWithLoot(EntityPlayer player) + { + if (this.lootTable != null) + { + LootTable loottable = this.world.getLootTableManager().getLootTableFromLocation(this.lootTable); + this.lootTable = null; + Random random; + + if (this.lootTableSeed == 0L) + { + random = new Random(); + } else + { + random = new Random(this.lootTableSeed); + } + + LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer) this.world); + + if (player != null) + { + lootcontext$builder.withLuck(player.getLuck()); + } + + loottable.fillInventory(this, random, lootcontext$builder.build()); + } + } + + @Override + protected boolean handleInventory() + { + return false; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (nbt.hasKey("ctd")) + { + this.hasCoreToDrop = nbt.getBoolean("ctd"); + } else + { + this.hasCoreToDrop = true; // Legacy compatibility with worlds + // generated before this key used + } + + if (!this.checkLootAndRead(nbt)) + { + this.inventory = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, this.getInventory()); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setBoolean("ctd", this.hasCoreToDrop); + + if (!this.checkLootAndWrite(nbt)) + { + ItemStackHelper.saveAllItems(nbt, this.getInventory()); + } + return nbt; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public ItemStack getStackInSlot(int slot) + { + this.fillWithLoot(null); + return super.getStackInSlot(slot); + } + + @Override + public ItemStack decrStackSize(int index, int count) + { + this.fillWithLoot(null); + return super.decrStackSize(index, count); + } + + @Override + public ItemStack removeStackFromSlot(int index) + { + this.fillWithLoot(null); + return super.removeStackFromSlot(index); + } + + @Override + public boolean isEmpty() + { + this.fillWithLoot(null); + return super.isEmpty(); + } + + @Override + public void clear() + { + this.fillWithLoot(null); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } + + public void setDropCore() + { + this.hasCoreToDrop = true; + } + + public boolean getDropCore() + { + return this.hasCoreToDrop; + } + + protected boolean checkLootAndRead(NBTTagCompound compound) + { + if (compound.hasKey("LootTable", 8)) + { + this.lootTable = new ResourceLocation(compound.getString("LootTable")); + this.lootTableSeed = compound.getLong("LootTableSeed"); + return true; + } else + { + return false; + } + } + + protected boolean checkLootAndWrite(NBTTagCompound compound) + { + if (this.lootTable != null) + { + compound.setString("LootTable", this.lootTable.toString()); + + if (this.lootTableSeed != 0L) + { + compound.setLong("LootTableSeed", this.lootTableSeed); + } + + return true; + } else + { + return false; + } + } + + public void setLootTable(ResourceLocation lootTable, long lootTableSeed) + { + this.lootTable = lootTable; + this.lootTableSeed = lootTableSeed; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityDungeonSpawnerVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityDungeonSpawnerVenus.java new file mode 100644 index 00000000..af6c26cc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityDungeonSpawnerVenus.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.ArrayList; +import java.util.List; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSkeleton; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedSpider; +import micdoodle8.mods.galacticraft.core.entities.EntityEvolvedZombie; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.planets.venus.entities.EntitySpiderQueen; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.SoundCategory; + +public class TileEntityDungeonSpawnerVenus extends TileEntityDungeonSpawner +{ + + public TileEntityDungeonSpawnerVenus() + { + super(EntitySpiderQueen.class); + } + + @Override + public List> getDisabledCreatures() + { + List> list = new ArrayList>(); + list.add(EntityEvolvedSkeleton.class); + list.add(EntityEvolvedZombie.class); + list.add(EntityEvolvedSpider.class); + return list; + } + + @Override + public void playSpawnSound(Entity entity) + { + this.world.playSound(null, entity.posX, entity.posY, entity.posZ, GCSounds.scaryScape, SoundCategory.AMBIENT, 9.0F, 1.4F); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityGeothermalGenerator.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityGeothermalGenerator.java new file mode 100644 index 00000000..9e611ff5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityGeothermalGenerator.java @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.EnumSet; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.core.tile.TileEntitySolar; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockGeothermalGenerator; +import micdoodle8.mods.miccore.Annotations; +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; + +public class TileEntityGeothermalGenerator extends TileBaseUniversalElectricalSource implements IInventoryDefaults, ISidedInventory, IConnector, IDisableableMachine +{ + + public static final int MAX_GENERATE_GJ_PER_TICK = 200; + public static final int MIN_GENERATE_GJ_PER_TICK = 30; + + private boolean validSpout; + + @Annotations.NetworkedField(targetSide = Side.CLIENT) public boolean disabled = false; + @Annotations.NetworkedField(targetSide = Side.CLIENT) public int disableCooldown = 0; + + @Annotations.NetworkedField(targetSide = Side.CLIENT) public int generateWatts = 0; + + public TileEntityGeothermalGenerator() + { + super("container.geothermal_generator.name"); + this.storage.setMaxExtract(TileEntitySolar.MAX_GENERATE_WATTS); + this.storage.setMaxReceive(TileEntitySolar.MAX_GENERATE_WATTS); + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + this.receiveEnergyGC(null, this.generateWatts, false); + } + + super.update(); + + if (this.ticks % 20 == 0) + { + BlockPos below = this.getPos().down(); + IBlockState stateBelow = this.world.getBlockState(below); + + boolean lastValidSpout = this.validSpout; + this.validSpout = false; + if (stateBelow.getBlock() == VenusBlocks.spout) + { + BlockPos pos1 = below.down(); + for (; this.getPos().getY() - pos1.getY() < 20; pos1 = pos1.down()) + { + IBlockState state = this.world.getBlockState(pos1); + if (state.getBlock() == VenusModule.sulphuricAcid.getBlock()) + { + this.validSpout = true; + break; + } else if (!state.getBlock().isAir(this.world.getBlockState(pos1), this.world, pos1)) + { + // Not valid + break; + } + } + } + + if (this.world.isRemote && this.validSpout != lastValidSpout) + { + // Update active texture + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + } + } + + if (!this.world.isRemote) + { + this.recharge(this.getInventory().get(0)); + + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + + this.generateWatts = Math.min(Math.max(this.getGenerate(), 0), TileEntityGeothermalGenerator.MAX_GENERATE_GJ_PER_TICK); + } else + { + if (this.generateWatts > 0 && this.ticks % ((int) ((float) MAX_GENERATE_GJ_PER_TICK / (this.generateWatts + 1)) * 5 + 1) == 0) + { + double posX = pos.getX() + 0.5; + double posY = pos.getY() + 1.0; + double posZ = pos.getZ() + 0.5; + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX - 0.25, posY, posZ - 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX - 0.25, posY, posZ), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX - 0.25, posY, posZ + 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX, posY, posZ - 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX, posY, posZ), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX, posY, posZ + 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX + 0.25, posY, posZ - 0.25), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX + 0.25, posY, posZ), new Vector3(0.0, 0.025, 0.0)); + GalacticraftPlanets.spawnParticle("acidExhaust", new Vector3(posX + 0.25, posY, posZ + 0.25), new Vector3(0.0, 0.025, 0.0)); + } + } + + this.produce(); + } + + private int getGenerate() + { + if (this.getDisabled(0)) + { + return 0; + } + + if (!this.validSpout) + { + return 0; + } + + int diff = TileEntityGeothermalGenerator.MAX_GENERATE_GJ_PER_TICK - TileEntityGeothermalGenerator.MIN_GENERATE_GJ_PER_TICK; + return (int) Math.floor((Math.sin(this.ticks / 50.0F) * 0.5F + 0.5F) * diff + TileEntityGeothermalGenerator.MIN_GENERATE_GJ_PER_TICK); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + if (direction == null || type != NetworkType.POWER) + { + return false; + } + + return direction == this.getElectricOutputDirection(); + } + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockGeothermalGenerator) + { + return state.getValue(BlockGeothermalGenerator.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(byIndex().rotateY()); + } + + @Override + public EnumFacing getElectricOutputDirection() + { + return byIndex().rotateY(); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + if (this.disabled != disabled && this.world.isRemote) + { + // Update active texture + IBlockState state = this.world.getBlockState(this.getPos()); + this.world.notifyBlockUpdate(this.getPos(), state, state, 3); + } + + this.disabled = disabled; + this.disableCooldown = 20; + } + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC() * i / this.getMaxEnergyStoredGC()); + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + public boolean hasValidSpout() + { + return validSpout; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityLaserTurret.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityLaserTurret.java new file mode 100644 index 00000000..ed728e37 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityLaserTurret.java @@ -0,0 +1,862 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Lists; +import io.netty.buffer.ByteBuf; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; +import micdoodle8.mods.galacticraft.annotations.ForRemoval; +import micdoodle8.mods.galacticraft.annotations.ReplaceWith; +import micdoodle8.mods.galacticraft.api.entity.ILaserTrackableFast; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.GCBlocks; +import micdoodle8.mods.galacticraft.core.blocks.BlockMachineTiered; +import micdoodle8.mods.galacticraft.core.blocks.BlockMulti; +import micdoodle8.mods.galacticraft.core.client.sounds.GCSounds; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRace; +import micdoodle8.mods.galacticraft.core.dimension.SpaceRaceManager; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseElectricBlockWithInventory; +import micdoodle8.mods.galacticraft.core.entities.EntityMeteor; +import micdoodle8.mods.galacticraft.core.tile.IMachineSides; +import micdoodle8.mods.galacticraft.core.tile.IMachineSidesProperties; +import micdoodle8.mods.galacticraft.core.tile.IMultiBlock; +import micdoodle8.mods.galacticraft.core.tile.TileEntityMulti; +import micdoodle8.mods.galacticraft.core.util.DamageSourceGC; +import micdoodle8.mods.galacticraft.core.util.RedstoneUtil; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.GuiIdsPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockLaserTurret; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityLaserTurret extends TileBaseElectricBlockWithInventory implements IMultiBlock, ISidedInventory, IMachineSides +{ + + private final float RANGE = 15.0F; + private final float METEOR_RANGE = 90.0F; + private List tracked = Lists.newArrayList(); + private List players = Lists.newArrayList(); // Can be whitelist or + // blacklist + private List entities = Lists.newArrayList(); // Can be + // whitelist + // or + // blacklist + private boolean initialisedMulti = false; + private AxisAlignedBB renderAABB; + + @NetworkedField(targetSide = Side.CLIENT) public boolean active = false; + @NetworkedField(targetSide = Side.CLIENT) public int targettedEntity = -1; + @NetworkedField(targetSide = Side.CLIENT) public int chargeLevel = 0; + @NetworkedField(targetSide = Side.CLIENT) public boolean blacklistMode = false; + @NetworkedField(targetSide = Side.CLIENT) public boolean targetMeteors = true; + @NetworkedField(targetSide = Side.CLIENT) public boolean alwaysIgnoreSpaceRace = true; + @NetworkedField(targetSide = Side.CLIENT) public int priorityClosest = 1; + @NetworkedField(targetSide = Side.CLIENT) public int priorityLowestHealth = 2; + @NetworkedField(targetSide = Side.CLIENT) public int priorityHighestHealth = 3; + + private UUID ownerUUID = null; + private String ownerName = null; + private SpaceRace ownerSpaceRace = null; + + @SideOnly(Side.CLIENT) public float pitch; + @SideOnly(Side.CLIENT) public float yaw; + @SideOnly(Side.CLIENT) public float targetPitch; + @SideOnly(Side.CLIENT) public float targetYaw; + public int timeSinceShot = -1; // Cannot initialise client-only fields + // (causes a server crash on constructing the + // object) + + public TileEntityLaserTurret() + { + super("tile.laser_turret.name"); + inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void validate() + { + super.validate(); + + this.setOwnerUUID(this.ownerUUID); + } + + public void setOwnerSpaceRace(SpaceRace spaceRace) + { + this.ownerSpaceRace = spaceRace; + } + + @Override + public void addExtraNetworkedData(List networkedList) + { + if (!this.world.isRemote) + { + networkedList.add(players.size()); + networkedList.addAll(players); + networkedList.add(entities.size()); + for (ResourceLocation res : entities) + { + networkedList.add(res.toString()); + } + networkedList.add(ownerUUID != null); + if (ownerUUID != null) + { + networkedList.add(ownerUUID.getMostSignificantBits()); + networkedList.add(ownerUUID.getLeastSignificantBits()); + } + } + } + + @Override + public void readExtraNetworkedData(ByteBuf dataStream) + { + if (this.world.isRemote) + { + players.clear(); + int playerSize = dataStream.readInt(); + for (int i = 0; i < playerSize; ++i) + { + players.add(ByteBufUtils.readUTF8String(dataStream)); + } + entities.clear(); + int entitySize = dataStream.readInt(); + for (int i = 0; i < entitySize; ++i) + { + entities.add(new ResourceLocation(ByteBufUtils.readUTF8String(dataStream))); + } + if (dataStream.readBoolean()) + { + ownerUUID = new UUID(dataStream.readLong(), dataStream.readLong()); + } + } + } + + public void addPlayer(String player) + { + players.add(player); + } + + public void addEntity(ResourceLocation entity) + { + entities.add(entity); + } + + public void removePlayer(String player) + { + for (int i = 0; i < players.size(); ++i) + { + if (players.get(i).equals(player)) + { + players.remove(i--); + } + } + } + + public void removeEntity(ResourceLocation entity) + { + for (int i = 0; i < entities.size(); ++i) + { + if (entities.get(i).equals(entity)) + { + entities.remove(i--); + } + } + } + + public List getPlayers() + { + return players; + } + + public List getEntities() + { + return entities; + } + + @Override + public double getPacketRange() + { + return 25.0D; + } + + public void trackEntity(Entity entity) + { + if (!tracked.contains(entity)) + tracked.add(entity); + } + + private Entity updateTarget() + { + List list = Lists.newArrayList(); + if (storage.getEnergyStoredGC() > 1000 && !this.getDisabled(0) && !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + for (int i = 0; i < tracked.size(); ++i) + { + Entity e = tracked.get(i); + if (e.isDead) + { + tracked.remove(i--); + } else + { + boolean shouldTarget = !this.blacklistMode; + if (e instanceof EntityPlayer) + { + EntityPlayer toTargetPlayer = (EntityPlayer) e; + if (this.alwaysIgnoreSpaceRace + && (toTargetPlayer.getUniqueID().equals(this.ownerUUID) || this.ownerSpaceRace != null && this.ownerSpaceRace.getPlayerNames().contains(toTargetPlayer.getName()))) + { + shouldTarget = false; + } else + { + for (String player : players) + { + if (player.equalsIgnoreCase(e.getName())) + { + shouldTarget = !shouldTarget; + } + } + } + } else if (e instanceof EntityTameable && ((EntityTameable) e).getOwnerId() != null) + { + if ((((EntityTameable) e).getOwnerId().equals(this.ownerUUID)) || (this.alwaysIgnoreSpaceRace && this.ownerSpaceRace != null && ((EntityTameable) e).getOwner() != null + && this.ownerSpaceRace.getPlayerNames().contains(((EntityTameable) e).getOwner().getName()))) + { + shouldTarget = false; + } + } else + { + ResourceLocation location = EntityList.getKey(e.getClass()); + if (location != null) + { + for (ResourceLocation entity : entities) + { + if (location.equals(entity)) + { + shouldTarget = !shouldTarget; + } + } + } + } + if (shouldTarget) + { + Vector3 vec = new Vector3(e.posX, e.posY + e.getEyeHeight(), e.posZ); + vec.translate(new Vector3(-(pos.getX() + 0.5F), -(pos.getY() + 1.78F), -(pos.getZ() + 0.5F))); + Vector3 vecNoHeight = vec.clone(); + vecNoHeight.y = 0; + // Make sure target is within range and not directly + // below turret: + if ((vec.getMagnitudeSquared() < RANGE * RANGE || (targetMeteors && e instanceof EntityMeteor && vecNoHeight.getMagnitudeSquared() < METEOR_RANGE * METEOR_RANGE)) + && Math.asin(vec.clone().normalize().y) > -Math.PI / 3.0) + { + if (e instanceof EntityLivingBase) + { + list.add(new EntityEntrySortable((EntityLivingBase) e, vec.getMagnitude())); + } else if (targetMeteors && e instanceof EntityMeteor) + { + return e; + } + } + } + } + } + } + + list.sort((o1, o2) -> + { + if (priorityClosest < priorityHighestHealth && priorityClosest < priorityLowestHealth) + { + if (priorityLowestHealth < priorityHighestHealth) + { + return ComparisonChain.start().compare(o1.distance, o2.distance).compare(o1.entity.getHealth(), o2.entity.getHealth()).result(); + } else + { + return ComparisonChain.start().compare(o1.distance, o2.distance).compare(o2.entity.getHealth(), o1.entity.getHealth()).result(); + } + } else if (priorityHighestHealth < priorityLowestHealth && priorityHighestHealth < priorityClosest) + { + return ComparisonChain.start().compare(o2.entity.getHealth(), o1.entity.getHealth()).compare(o1.distance, o2.distance).result(); + } else if (priorityLowestHealth < priorityHighestHealth && priorityLowestHealth < priorityClosest) + { + return ComparisonChain.start().compare(o1.entity.getHealth(), o2.entity.getHealth()).compare(o1.distance, o2.distance).result(); + } + return 0; + }); + + for (EntityEntrySortable entry : list) + { + Entity entity = entry.entity; + Vec3d start = new Vec3d(pos.getX() + 0.5F, pos.getY() + 1.78F, pos.getZ() + 0.5F); + Vec3d end = new Vec3d(entity.posX, entity.posY + entity.getEyeHeight(), entity.posZ); + start = start.add(end.add(start.scale(-1)).normalize()); // Start at + // block in + // front of + // laser + // facing + // direction + + RayTraceResult res = this.world.rayTraceBlocks(start, end, false, true, true); + if (res == null || res.typeOfHit != RayTraceResult.Type.BLOCK) + { + return entity; + } + } + + return null; + } + + @Override + public void update() + { + super.update(); + + if (!this.initialisedMulti) + { + this.initialisedMulti = this.initialiseMultiTiles(this.getPos(), this.world); + } + + if (!world.isRemote) + { + if (storage.getEnergyStoredGC() > 1000 && !this.getDisabled(0) && !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + if (chargeLevel < 60) + { + chargeLevel++; + } + } else + { + this.chargeLevel = 0; + } + + if (ticks % 20 == 0) + { + if (storage.getEnergyStoredGC() > 1000 && !this.getDisabled(0) && !RedstoneUtil.isBlockReceivingRedstone(this.world, this.getPos())) + { + for (Entity e : world.loadedEntityList) + { + if (e instanceof EntityLivingBase || e instanceof ILaserTrackableFast) + { + this.trackEntity(e); + } + } + } else + { + this.tracked.clear(); + } + + Entity toTarget = updateTarget(); + + if (toTarget != null && this.chargeLevel > 0) + { + active = true; + targettedEntity = toTarget.getEntityId(); + } else + { + active = false; + targettedEntity = -1; + } + } + + if (chargeLevel >= 60 && targettedEntity != -1) + { + Entity toTarget = this.world.getEntityByID(this.targettedEntity); + if (toTarget != null) + { + if (toTarget instanceof EntityLivingBase) + { + EntityLivingBase entityLiving = (EntityLivingBase) toTarget; + entityLiving.attackEntityFrom(DamageSourceGC.laserTurret, 1.5F); + } else if (toTarget instanceof EntityMeteor) + { + toTarget.setDead(); + } + this.world.playSound(null, getPos().up(), GCSounds.laserShoot, SoundCategory.BLOCKS, 1.0F, 1.0F); + storage.setEnergyStored(storage.getEnergyStoredGC() - 1000); + chargeLevel = 0; + } + } else if (chargeLevel == 22) + { + this.world.playSound(null, getPos().up(), GCSounds.laserCharge, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + } else + { + // Client side only + if (chargeLevel > 0 && chargeLevel < 60) + { + chargeLevel++; + } + + if (chargeLevel < 5) + { + timeSinceShot = 0; + } + + timeSinceShot++; + + if (active && targettedEntity != -1) + { + Entity entity = world.getEntityByID(targettedEntity); + if (entity != null && !entity.isDead) + { + Vector3 vec = new Vector3(entity.posX, entity.posY + entity.getEyeHeight(), entity.posZ); + vec.translate(new Vector3(-(pos.getX() + 0.5F), -(pos.getY() + 1.78F), -(pos.getZ() + 0.5F))).normalize(); + targetPitch = (float) (Math.asin(vec.y) * (180.0F / Math.PI)); + targetYaw = (float) (Math.atan2(vec.x, vec.z) * (180.0F / Math.PI)) + 90.0F; + + while (targetYaw > 360.0F) + { + targetYaw -= 360.0F; + } + + while (targetYaw < 0.0F) + { + targetYaw += 360.0F; + } + + if (targetPitch > 90.0F) + { + targetPitch = 90.0F; + } else if (targetPitch < -60.0F) + { + targetPitch = -60.0F; + } + } + } else + { + targetPitch = -45.0F; + } + + float diffY = targetYaw - yaw; + if (targetYaw > 270.0F && yaw < 90.0F) + { + yaw = yaw + (targetYaw - (yaw + 360.0F)) / 3.0F; + } else if (targetYaw < 90.0F && yaw > 270.0F) + { + yaw = yaw + ((targetYaw + 360.0F) - yaw) / 3.0F; + } else + { + yaw = yaw + diffY / 10.0F; + } + + float diffP = targetPitch - pitch; + pitch += diffP / 3.0F; + + while (yaw > 360.0F) + { + yaw -= 360.0F; + } + + while (yaw < 0.0F) + { + yaw += 360.0F; + } + + if (pitch > 90.0F) + { + pitch = 90.0F; + } else if (pitch < -60.0F) + { + pitch = -60.0F; + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.readMachineSidesFromNBT(nbt); // Needed by IMachineSides + + NBTTagList playersTag = nbt.getTagList("PlayerList", 10); + for (int i = 0; i < playersTag.tagCount(); i++) + { + NBTTagCompound tagAt = playersTag.getCompoundTagAt(i); + this.players.add(tagAt.getString("PlayerName")); + } + + NBTTagList entitiesTag = nbt.getTagList("EntitiesList", 10); + for (int i = 0; i < entitiesTag.tagCount(); i++) + { + NBTTagCompound tagAt = entitiesTag.getCompoundTagAt(i); + this.entities.add(new ResourceLocation(tagAt.getString("EntityRes"))); + } + + this.active = nbt.getBoolean("active"); + this.targettedEntity = nbt.getInteger("targettedEntity"); + this.chargeLevel = nbt.getInteger("chargeLevel"); + this.blacklistMode = nbt.getBoolean("blacklistMode"); + this.targetMeteors = nbt.getBoolean("targetMeteors"); + this.alwaysIgnoreSpaceRace = nbt.getBoolean("alwaysIgnoreSpaceRace"); + this.priorityClosest = nbt.getInteger("priorityClosest"); + this.priorityLowestHealth = nbt.getInteger("priorityLowestHealth"); + this.priorityHighestHealth = nbt.getInteger("priorityHighestHealth"); + + this.ownerName = nbt.hasKey("ownerName") ? nbt.getString("ownerName") : null; + this.ownerUUID = nbt.getUniqueId("ownerUUID"); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + this.addMachineSidesToNBT(nbt); // Needed by IMachineSides + + NBTTagList playersTag = new NBTTagList(); + for (String player : this.players) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("PlayerName", player); + playersTag.appendTag(tagComp); + } + + nbt.setTag("PlayerList", playersTag); + + NBTTagList entitiesTag = new NBTTagList(); + for (ResourceLocation entity : this.entities) + { + NBTTagCompound tagComp = new NBTTagCompound(); + tagComp.setString("EntityRes", entity.toString()); + entitiesTag.appendTag(tagComp); + } + + nbt.setTag("EntitiesList", entitiesTag); + + nbt.setBoolean("active", this.active); + nbt.setInteger("targettedEntity", this.targettedEntity); + nbt.setInteger("chargeLevel", this.chargeLevel); + nbt.setBoolean("blacklistMode", this.blacklistMode); + nbt.setBoolean("targetMeteors", this.targetMeteors); + nbt.setBoolean("alwaysIgnoreSpaceRace", this.alwaysIgnoreSpaceRace); + nbt.setInteger("priorityClosest", this.priorityClosest); + nbt.setInteger("priorityLowestHealth", this.priorityLowestHealth); + nbt.setInteger("priorityHighestHealth", this.priorityHighestHealth); + + if (this.ownerName != null) + { + nbt.setString("ownerName", this.ownerName); + } + nbt.setUniqueId("ownerUUID", this.ownerUUID); + + return nbt; + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + if (this.renderAABB == null) + { + this.renderAABB = new AxisAlignedBB(getPos().getX(), getPos().getY(), getPos().getZ(), getPos().getX() + 1, getPos().getY() + 2, getPos().getZ() + 1); + } + return this.renderAABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return Constants.RENDERDISTANCE_LONG; + } + + @Override + public boolean canInsertItem(int slotID, ItemStack par2ItemStack, EnumFacing par3) + { + return this.isItemValidForSlot(slotID, par2ItemStack); + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Override + public boolean shouldUseEnergy() + { + return false; + } + + @Override + public EnumFacing byIndex() + { + IBlockState state = world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockLaserTurret) + { + return state.getValue(BlockLaserTurret.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumFacing getElectricInputDirection() + { + switch (this.getSide(MachineSide.ELECTRIC_IN)) + { + case RIGHT: + return byIndex().rotateYCCW(); + case REAR: + return byIndex().getOpposite(); + case TOP: + return EnumFacing.UP; + case BOTTOM: + return EnumFacing.DOWN; + case LEFT: + default: + return byIndex().rotateY(); + } + } + + public void setOwnerUUID(UUID uniqueID) + { + this.ownerUUID = uniqueID; + if (uniqueID != null) + { + EntityPlayer player = this.world.getPlayerEntityByUUID(uniqueID); + if (player != null) + { + this.ownerName = player.getName(); + } + } + for (SpaceRace race : SpaceRaceManager.getSpaceRaces()) + { + if (this.ownerName != null && race.getPlayerNames().contains(this.ownerName)) + { + this.setOwnerSpaceRace(race); + } + } + } + + public UUID getOwnerUUID() + { + return this.ownerUUID; + } + + @Override + public boolean onActivated(EntityPlayer entityPlayer) + { + entityPlayer.openGui(GalacticraftPlanets.instance, GuiIdsPlanets.MACHINE_VENUS, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onCreate(World world, BlockPos placedPosition) + { + List positions = new LinkedList<>(); + this.getPositions(placedPosition, positions); + ((BlockMulti) GCBlocks.fakeBlock).makeFakeBlock(world, positions, placedPosition, this.getMultiType()); + } + + @Override + public void onDestroy(TileEntity callingBlock) + { + BlockPos thisBlock = getPos(); + List positions = new ArrayList<>(); + this.getPositions(thisBlock, positions); + + for (BlockPos pos : positions) + { + IBlockState stateAt = this.world.getBlockState(pos); + + if (stateAt.getBlock() == GCBlocks.fakeBlock) + { + BlockMulti.EnumBlockMultiType type = stateAt.getValue(BlockMulti.MULTI_TYPE); + if (type == BlockMulti.EnumBlockMultiType.LASER_TURRET) + { + if (this.world.isRemote) + { + FMLClientHandler.instance().getClient().effectRenderer.addBlockDestroyEffects(pos, VenusBlocks.laserTurret.getDefaultState()); + } + + this.world.setBlockToAir(pos); + } + } + } + + this.world.destroyBlock(getPos(), true); + } + + @Override + public void getPositions(BlockPos placedPosition, List positions) + { + int buildHeight = this.world.getHeight() - 1; + int y = placedPosition.getY() + 1; + if (y > buildHeight) + { + return; + } + positions.add(new BlockPos(placedPosition.getX(), y, placedPosition.getZ())); + } + + @Override + public BlockMulti.EnumBlockMultiType getMultiType() + { + return BlockMulti.EnumBlockMultiType.LASER_TURRET; + } + + protected boolean initialiseMultiTiles(BlockPos pos, World world) + { + // Client can create its own fake blocks and tiles - no need for + // networking in 1.8+ + if (world.isRemote) + this.onCreate(world, pos); + + List positions = new ArrayList<>(); + this.getPositions(pos, positions); + boolean result = true; + for (BlockPos vecToAdd : positions) + { + TileEntity tile = world.getTileEntity(vecToAdd); + if (tile instanceof TileEntityMulti) + { + ((TileEntityMulti) tile).mainBlockPosition = pos; + } else + { + result = false; + } + } + return result; + } + + // ------------------ + // Added these methods and field to implement IMachineSides properly + // ------------------ + @Override + public MachineSide[] listConfigurableSides() + { + return new MachineSide[] + {MachineSide.ELECTRIC_IN}; + } + + @Override + public Face[] listDefaultFaces() + { + return new Face[] + {Face.LEFT}; + } + + private MachineSidePack[] machineSides; + + @Override + public synchronized MachineSidePack[] getAllMachineSides() + { + if (machineSides == null) + { + this.initialiseSides(); + } + + return machineSides; + } + + @Override + public void setupMachineSides(int length) + { + machineSides = new MachineSidePack[length]; + } + + @Override + public void onLoad() + { + this.clientOnLoad(); + } + + @Override + public IMachineSidesProperties getConfigurationType() + { + return BlockMachineTiered.MACHINESIDES_RENDERTYPE; + } + // ------------------END OF IMachineSides implementation + + private class EntityEntrySortable + { + + private EntityLivingBase entity; + private double distance; + + public EntityEntrySortable(EntityLivingBase entity, double distance) + { + this.entity = entity; + this.distance = distance; + } + + public EntityLivingBase getEntity() + { + return entity; + } + + public void setEntity(EntityLivingBase entity) + { + this.entity = entity; + } + + public double getDistance() + { + return distance; + } + + public void setDistance(double distance) + { + this.distance = distance; + } + } + + @Override + @Deprecated + @ForRemoval(deadline = "4.1.0") + @ReplaceWith("byIndex()") + public EnumFacing getFront() + { + return this.byIndex(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayController.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayController.java new file mode 100644 index 00000000..375ef45a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayController.java @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.EnumSet; +import java.util.Set; +import micdoodle8.mods.galacticraft.api.tile.IDisableableMachine; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; +import micdoodle8.mods.galacticraft.core.dimension.WorldProviderSpaceStation; +import micdoodle8.mods.galacticraft.core.energy.item.ItemElectricBase; +import micdoodle8.mods.galacticraft.core.energy.tile.TileBaseUniversalElectricalSource; +import micdoodle8.mods.galacticraft.core.inventory.IInventoryDefaults; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockSolarArrayController; +import micdoodle8.mods.galacticraft.planets.venus.dimension.WorldProviderVenus; +import micdoodle8.mods.miccore.Annotations.NetworkedField; +import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.Vec3i; +import net.minecraftforge.fml.relauncher.Side; + +public class TileEntitySolarArrayController extends TileBaseUniversalElectricalSource implements IDisableableMachine, IInventoryDefaults, ISidedInventory, IConnector +{ + + private int solarStrength = 0; + @NetworkedField(targetSide = Side.CLIENT) public boolean disabled = false; + @NetworkedField(targetSide = Side.CLIENT) public int disableCooldown = 0; + public static final int MAX_GENERATE_WATTS = 1000; + @NetworkedField(targetSide = Side.CLIENT) public int generateWatts = 0; + private Set solarArray = Sets.newHashSet(); + @NetworkedField(targetSide = Side.CLIENT) public int connectedInfo = 0; + + private boolean initialised = false; + + public TileEntitySolarArrayController() + { + super("container.solar_array_controller.name"); + this.storage.setMaxExtract(TileEntitySolarArrayController.MAX_GENERATE_WATTS); + this.storage.setMaxReceive(TileEntitySolarArrayController.MAX_GENERATE_WATTS); + this.storage.setCapacity(50000); + this.initialised = true; + this.inventory = NonNullList.withSize(1, ItemStack.EMPTY); + } + + @Override + public void update() + { + if (!this.initialised) + { + this.storage.setCapacity(50000); + this.initialised = true; + } + + if (!this.world.isRemote) + { + this.receiveEnergyGC(null, this.generateWatts, false); + + EnumSet outputDirections = EnumSet.noneOf(EnumFacing.class); + outputDirections.addAll(Arrays.asList(EnumFacing.HORIZONTALS)); + outputDirections.removeAll(this.getElectricalOutputDirections()); + + BlockVec3 thisVec = new BlockVec3(this); + solarArray.clear(); + for (EnumFacing direction : outputDirections) + { + TileEntity tileAdj = thisVec.getTileEntityOnSide(this.world, direction); + + if (tileAdj != null) + { + if (tileAdj instanceof INetworkProvider) + { + if (tileAdj instanceof ITransmitter) + { + if (((ITransmitter) tileAdj).canConnect(direction.getOpposite(), NetworkType.SOLAR_MODULE)) + { + if (((INetworkProvider) tileAdj).getNetwork() instanceof SolarModuleNetwork) + { + solarArray.addAll(((SolarModuleNetwork) ((INetworkProvider) tileAdj).getNetwork()).getTransmitters()); + } + } + } else + { + if (((INetworkProvider) tileAdj).getNetwork() instanceof SolarModuleNetwork) + { + solarArray.addAll(((SolarModuleNetwork) ((INetworkProvider) tileAdj).getNetwork()).getTransmitters()); + } + } + } + } + } + } + + super.update(); + + if (!this.world.isRemote) + { + this.recharge(this.getInventory().get(0)); + + if (this.disableCooldown > 0) + { + this.disableCooldown--; + } + + if (!this.getDisabled(0) && this.ticks % 20 == 0) + { + this.solarStrength = 0; + int arraySizeWithinRange = 0; + if (this.world.isDaytime() && (this.world.provider instanceof IGalacticraftWorldProvider || !this.world.isRaining() && !this.world.isThundering())) + { + for (ITransmitter transmitter : solarArray) + { + TileEntity tile = (TileEntity) transmitter; + Vec3i diff = tile.getPos().subtract(this.getPos()); + if (Math.abs(diff.getX()) <= 16 && diff.getY() == 0 && Math.abs(diff.getZ()) <= 16) + { + arraySizeWithinRange++; + if (this.world.canBlockSeeSky(tile.getPos())) + { + boolean valid = true; + + for (int y = this.getPos().getY() + 1; y < 256; y++) + { + IBlockState state = this.world.getBlockState(this.getPos().add(0, y, 0)); + + if (state.getBlock().isOpaqueCube(state)) + { + valid = false; + break; + } + } + + if (valid) + { + this.solarStrength++; + } + } + } + } + } + + connectedInfo = solarStrength << 16 | arraySizeWithinRange; + } + } + + float angle = this.world.getCelestialAngle(1.0F) - 0.7845194F < 0 ? 1.0F - 0.7845194F : -0.7845194F; + float celestialAngle = (this.world.getCelestialAngle(1.0F) + angle) * 360.0F; + if (!(this.world.provider instanceof WorldProviderSpaceStation)) + celestialAngle += 12.5F; + if (this.world.provider instanceof WorldProviderVenus) + celestialAngle = 180F - celestialAngle; + celestialAngle %= 360; + boolean isDaytime = this.world.isDaytime() && (celestialAngle < 180.5F || celestialAngle > 359.5F) || this.world.provider instanceof WorldProviderSpaceStation; + + if (!this.world.isRemote) + { + int generated = this.getGenerate(); + if (generated > 0) + { + this.generateWatts = Math.min(Math.max(generated, 0), TileEntitySolarArrayController.MAX_GENERATE_WATTS); + } else + { + this.generateWatts = 0; + } + } + + this.produce(); + } + + public int getGenerate() + { + if (this.getDisabled(0)) + { + return 0; + } + + return (int) Math.floor(solarStrength * 6.3F * this.getSolarBoost()); + } + + public float getSolarBoost() + { + float result = (float) (this.world.provider instanceof ISolarLevel ? ((ISolarLevel) this.world.provider).getSolarEnergyMultiplier() : 1.0F); + if (this.world.provider instanceof WorldProviderSpaceStation) + { + // 10% boost for new solar on space stations + result *= 1.1F; + } + if (this.world.provider instanceof WorldProviderVenus) + { + if (this.pos.getY() > 90) + { + result += (this.pos.getY() - 90) / 1000F; // Small improvement + // on Venus at higher + // altitudes + } + } + return result; + } + + @Override + public double getPacketRange() + { + return 20.0D; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + this.storage.setCapacity(nbt.getFloat("maxEnergy")); + this.setDisabled(0, nbt.getBoolean("disabled")); + this.disableCooldown = nbt.getInteger("disabledCooldown"); + + this.initialised = false; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setFloat("maxEnergy", this.getMaxEnergyStoredGC()); + nbt.setInteger("disabledCooldown", this.disableCooldown); + nbt.setBoolean("disabled", this.getDisabled(0)); + + return nbt; + } + + /* + * @Override public float getRequest(EnumFacing direction) { return 0; } + */ + + @Override + public EnumSet getElectricalInputDirections() + { + return EnumSet.noneOf(EnumFacing.class); + } + + public EnumFacing byIndex() + { + IBlockState state = this.world.getBlockState(getPos()); + if (state.getBlock() instanceof BlockSolarArrayController) + { + return state.getValue(BlockSolarArrayController.FACING); + } + return EnumFacing.NORTH; + } + + @Override + public EnumSet getElectricalOutputDirections() + { + return EnumSet.of(byIndex()); + } + + @Override + public EnumFacing getElectricOutputDirection() + { + return this.byIndex(); + } + + @Override + public boolean hasCustomName() + { + return true; + } + + @Override + public void setDisabled(int index, boolean disabled) + { + if (this.disableCooldown == 0) + { + this.disabled = disabled; + this.disableCooldown = 20; + } + } + + @Override + public boolean getDisabled(int index) + { + return this.disabled; + } + + public int getScaledElecticalLevel(int i) + { + return (int) Math.floor(this.getEnergyStoredGC() * i / this.getMaxEnergyStoredGC()); + } + + @Override + public int getInventoryStackLimit() + { + return 1; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[] + {0}; + } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, EnumFacing side) + { + return slotID == 0; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + return slotID == 0 && ItemElectricBase.isElectricItem(itemstack.getItem()); + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.POWER && direction == this.getElectricOutputDirection() + || type == NetworkType.SOLAR_MODULE && direction != this.getElectricOutputDirection() && direction.getAxis() != EnumFacing.Axis.Y; + } + + public int getPossibleArraySize() + { + return connectedInfo & 0xFFFF; + } + + public int getActualArraySize() + { + return (connectedInfo >> 16) & 0xFFFF; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayModule.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayModule.java new file mode 100644 index 00000000..1bdf4e8b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarArrayModule.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public class TileEntitySolarArrayModule extends TileEntitySolarTransmitter +{ + + public TileEntitySolarArrayModule() + { + super("container.solar_array_module.name"); + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.SOLAR_MODULE && direction.getAxis() != EnumFacing.Axis.Y; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + return super.writeToNBT(compound); + } + + @Override + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + } + + @Override + public boolean canTransmit() + { + return true; + } + + protected boolean handleInventory() + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarTransmitter.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarTransmitter.java new file mode 100644 index 00000000..f6670fe1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySolarTransmitter.java @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.grid.IGridNetwork; +import micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider; +import micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter; +import micdoodle8.mods.galacticraft.api.vector.BlockVec3; +import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced; +import micdoodle8.mods.galacticraft.planets.venus.tick.VenusTickHandlerServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; + +public abstract class TileEntitySolarTransmitter extends TileEntityAdvanced implements ITransmitter +{ + + private IGridNetwork network; + public TileEntity[] adjacentConnections = null; + private boolean validated = true; + + public TileEntitySolarTransmitter(String tileName) + { + super(tileName); + } + + @Override + public void validate() + { + this.validated = false; + super.validate(); + } + + @Override + public void invalidate() + { + { + this.getNetwork().split(this); + } + super.invalidate(); + } + + @Override + public void onChunkUnload() + { + super.invalidate(); + super.onChunkUnload(); + } + + @Override + public IGridNetwork getNetwork() + { + if (this.network == null) + { + this.resetNetwork(); + } + + return this.network; + } + + @Override + public boolean hasNetwork() + { + return this.network != null; + } + + @Override + public void onNetworkChanged() + { + this.world.markBlockRangeForRenderUpdate(this.getPos(), this.getPos()); + } + + @Override + public void update() + { + if (!this.world.isRemote) + { + if (!this.validated) + { + VenusTickHandlerServer.solarTransmitterUpdates.add(this); + this.validated = true; + } + } + + super.update(); + } + + protected void resetNetwork() + { + SolarModuleNetwork network = new SolarModuleNetwork(); + this.setNetwork(network); + network.addTransmitter(this); + network.register(); + } + + @Override + public void setNetwork(IGridNetwork network) + { + if (this.network == network) + { + return; + } + + if (this.world.isRemote && this.network != null) + { + SolarModuleNetwork solarNetwork = (SolarModuleNetwork) this.network; + solarNetwork.removeTransmitter(this); + + if (solarNetwork.getTransmitters().isEmpty()) + { + solarNetwork.unregister(); + } + } + + this.network = network; + + if (this.world.isRemote && this.network != null) + { + ((SolarModuleNetwork) this.network).getTransmitters().add(this); + } + } + + @Override + public void refresh() + { + if (!this.world.isRemote) + { + this.adjacentConnections = null; + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing side : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, side); + + if (tileEntity != null) + { + if (tileEntity.getClass() == this.getClass() && tileEntity instanceof INetworkProvider && ((INetworkProvider) tileEntity).hasNetwork()) + { + if (!(tileEntity instanceof ITransmitter) || (((ITransmitter) tileEntity).canConnect(side.getOpposite(), ((ITransmitter) tileEntity).getNetworkType()))) + { + if (!this.hasNetwork()) + { + this.setNetwork(((INetworkProvider) tileEntity).getNetwork()); + ((SolarModuleNetwork) this.getNetwork()).addTransmitter(this); + } else if (this.hasNetwork() && !this.getNetwork().equals(((INetworkProvider) tileEntity).getNetwork())) + { + this.setNetwork((IGridNetwork) this.getNetwork().merge(((INetworkProvider) tileEntity).getNetwork())); + } + } + } + } + } + + this.getNetwork().refresh(); + } + } + + @Override + public TileEntity[] getAdjacentConnections() + { + /** + * Cache the adjacentConnections. + */ + if (this.adjacentConnections == null) + { + this.adjacentConnections = new TileEntity[EnumFacing.VALUES.length]; + + BlockVec3 thisVec = new BlockVec3(this); + for (EnumFacing direction : EnumFacing.VALUES) + { + TileEntity tileEntity = thisVec.getTileEntityOnSide(this.world, direction); + + if (tileEntity instanceof TileEntitySolarArrayModule) + { + if (this.world.isRemote || ((TileEntitySolarArrayModule) tileEntity).canConnect(direction.getOpposite(), NetworkType.SOLAR_MODULE)) + { + this.adjacentConnections[direction.ordinal()] = tileEntity; + } + } + } + } + + return this.adjacentConnections; + } + + @Override + public boolean canConnect(EnumFacing direction, NetworkType type) + { + return type == NetworkType.SOLAR_MODULE; + } + + @Override + public NetworkType getNetworkType() + { + return NetworkType.SOLAR_MODULE; + } + + @Override + public double getPacketRange() + { + return 0; + } + + @Override + public int getPacketCooldown() + { + return 0; + } + + @Override + public boolean isNetworkedTile() + { + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySpout.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySpout.java new file mode 100644 index 00000000..438ee238 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntitySpout.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileEntitySpout extends TileEntity implements ITickable +{ + + private final Random rand = new Random(System.currentTimeMillis()); + + @Override + public void update() + { + if (this.world.isRemote) + { + if (rand.nextInt(400) == 0) + { + IBlockState stateAbove = this.world.getBlockState(this.getPos().up()); + if (stateAbove.getBlock().isAir(this.world.getBlockState(this.getPos().up()), this.world, this.getPos().up())) + { + double posX = (double) pos.getX() + 0.45 + rand.nextDouble() * 0.1; + double posY = (double) pos.getY() + 1.0; + double posZ = (double) pos.getZ() + 0.45 + rand.nextDouble() * 0.1; + for (int i = 0; i < 4 + rand.nextInt(4); ++i) + { + GalacticraftPlanets.spawnParticle("acidVapor", new Vector3(posX, posY, posZ), + new Vector3(rand.nextDouble() * 0.5 - 0.25, rand.nextDouble() * 0.5 + 0.5, rand.nextDouble() * 0.5 - 0.25)); + } + } + } + } + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return oldState.getBlock() != newSate.getBlock(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityTreasureChestVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityTreasureChestVenus.java new file mode 100644 index 00000000..29743762 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/tile/TileEntityTreasureChestVenus.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.tile; + +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; + +public class TileEntityTreasureChestVenus extends TileEntityTreasureChest +{ + + public TileEntityTreasureChestVenus() + { + super(3); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeDecoratorVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeDecoratorVenus.java new file mode 100644 index 00000000..4f550366 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeDecoratorVenus.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.event.wgen.GCCoreEventPopulate; +import micdoodle8.mods.galacticraft.core.world.gen.WorldGenMinableMeta; +import micdoodle8.mods.galacticraft.planets.venus.ConfigManagerVenus; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.MinecraftForge; + +public class BiomeDecoratorVenus extends BiomeDecorator +{ + + private WorldGenerator aluminumGen; + private WorldGenerator copperGen; + private WorldGenerator galenaGen; + private WorldGenerator quartzGen; + private WorldGenerator siliconGen; + private WorldGenerator tinGen; + private WorldGenerator solarGen; + private World world; + + public BiomeDecoratorVenus() + { + this.aluminumGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 6, true, VenusBlocks.venusBlock, 1); + this.copperGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 7, true, VenusBlocks.venusBlock, 1); + this.galenaGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 8, true, VenusBlocks.venusBlock, 1); + this.quartzGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 9, true, VenusBlocks.venusBlock, 1); + this.siliconGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 10, true, VenusBlocks.venusBlock, 1); + this.tinGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 6, 11, true, VenusBlocks.venusBlock, 1); + this.solarGen = new WorldGenMinableMeta(VenusBlocks.venusBlock, 5, 13, true, VenusBlocks.venusBlock, 1); + } + + @Override + public void decorate(World worldIn, Random random, Biome biome, BlockPos blockPos) + { + if (this.world != null) + { + throw new RuntimeException("Already decorating!!"); + } else + { + this.world = worldIn; + this.chunkPos = blockPos; + this.generateVenus(random); + this.world = null; + } + } + + private void genStandardOre(int amountPerChunk, WorldGenerator worldGenerator, int minY, int maxY, Random random) + { + for (int var5 = 0; var5 < amountPerChunk; ++var5) + { + BlockPos blockpos = this.chunkPos.add(random.nextInt(16), random.nextInt(maxY - minY) + minY, random.nextInt(16)); + worldGenerator.generate(this.world, random, blockpos); + } + } + + private void generateVenus(Random random) + { + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Pre(this.world, random, chunkPos)); + if (!ConfigManagerVenus.disableAluminumGen) + this.genStandardOre(18, this.aluminumGen, 0, 60, random); + if (!ConfigManagerVenus.disableCopperGen) + this.genStandardOre(24, this.copperGen, 0, 60, random); + if (!ConfigManagerVenus.disableGalenaGen) + this.genStandardOre(18, this.galenaGen, 0, 60, random); + if (!ConfigManagerVenus.disableQuartzGen) + this.genStandardOre(26, this.quartzGen, 0, 60, random); + if (!ConfigManagerVenus.disableSiliconGen) + this.genStandardOre(4, this.siliconGen, 0, 60, random); + if (!ConfigManagerVenus.disableTinGen) + this.genStandardOre(22, this.tinGen, 0, 60, random); + if (!ConfigManagerVenus.disableSolarGen) + this.genStandardOre(6, this.solarGen, 0, 50, random); + MinecraftForge.EVENT_BUS.post(new GCCoreEventPopulate.Post(this.world, random, chunkPos)); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenFlatVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenFlatVenus.java new file mode 100644 index 00000000..5f01e6c8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenFlatVenus.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeGenFlatVenus extends BiomeVenus +{ + + public BiomeGenFlatVenus(BiomeData properties) + { + super(properties); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.HOT, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SANDY); + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180622_4_, int p_180622_5_, double p_180622_6_) + { + this.topBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + this.fillerBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + super.generateBiomeTerrainVenus(worldIn, rand, chunkPrimerIn, p_180622_4_, p_180622_5_, p_180622_6_); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusMountain.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusMountain.java new file mode 100644 index 00000000..592887c8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusMountain.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeGenVenusMountain extends BiomeVenus +{ + + public BiomeGenVenusMountain(BiomeData properties) + { + super(properties); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.HOT, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SANDY); + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180622_4_, int p_180622_5_, double p_180622_6_) + { + this.topBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + this.fillerBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + super.generateBiomeTerrainVenus(worldIn, rand, chunkPrimerIn, p_180622_4_, p_180622_5_, p_180622_6_); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusValley.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusValley.java new file mode 100644 index 00000000..2a0fe6ae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeGenVenusValley.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraftforge.common.BiomeDictionary; + +public class BiomeGenVenusValley extends BiomeVenus +{ + + public BiomeGenVenusValley(BiomeData properties) + { + super(properties); + } + + @Override + public void registerTypes(Biome b) + { + BiomeDictionary.addTypes(b, BiomeDictionary.Type.HOT, BiomeDictionary.Type.DRY, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.SANDY); + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180622_4_, int p_180622_5_, double p_180622_6_) + { + this.topBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + this.fillerBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + IBlockState stoneBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + IBlockState gravelBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_VOLCANIC_DEPOSIT); + + int i = worldIn.getSeaLevel(); + IBlockState topBlock = this.topBlock; + IBlockState fillerBlock = this.fillerBlock; + int j = -1; + int k = (int) (p_180622_6_ / 3.0D + 3.0D + rand.nextDouble() * 0.25D); + int l = p_180622_4_ & 15; + int i1 = p_180622_5_ & 15; + + for (int j1 = 255; j1 >= 0; --j1) + { + if (j1 <= rand.nextInt(5)) + { + chunkPrimerIn.setBlockState(i1, j1, l, Blocks.BEDROCK.getDefaultState()); + } else + { + IBlockState iblockstate2 = chunkPrimerIn.getBlockState(i1, j1, l); + + if (iblockstate2.getMaterial() == Material.AIR) + { + j = -1; + } else if (iblockstate2.getBlock() == VenusBlocks.venusBlock) + { + if (j == -1) + { + if (k <= 0) + { + topBlock = null; + fillerBlock = stoneBlock; + } else if (j1 >= i - 4 && j1 <= i + 1) + { + topBlock = this.topBlock; + fillerBlock = this.fillerBlock; + } + + j = k; + + if (j1 >= i - 1) + { + chunkPrimerIn.setBlockState(i1, j1, l, topBlock); + } else if (j1 < i - 7 - k) + { + topBlock = null; + fillerBlock = stoneBlock; + chunkPrimerIn.setBlockState(i1, j1, l, gravelBlock); + } else + { + chunkPrimerIn.setBlockState(i1, j1, l, fillerBlock); + } + } else if (j > 0) + { + --j; + chunkPrimerIn.setBlockState(i1, j1, l, fillerBlock); + } + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeProviderVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeProviderVenus.java new file mode 100644 index 00000000..5ab00951 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeProviderVenus.java @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.layer.GenLayerVenus; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeCache; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.gen.layer.GenLayer; +import net.minecraft.world.gen.layer.IntCache; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BiomeProviderVenus extends BiomeProvider +{ + + private GenLayer unzoomedBiomes; + private GenLayer zoomedBiomes; + private BiomeCache biomeCache; + private List biomesToSpawnIn; + private CelestialBody body; + + protected BiomeProviderVenus() + { + body = VenusModule.planetVenus; + biomeCache = new BiomeCache(this); + biomesToSpawnIn = new ArrayList<>(); +// biomesToSpawnIn.add() + } + + public BiomeProviderVenus(long seed, WorldType type) + { + this(); + GenLayer[] genLayers = GenLayerVenus.createWorld(seed); + this.unzoomedBiomes = genLayers[0]; + this.zoomedBiomes = genLayers[1]; + } + + public BiomeProviderVenus(World world) + { + this(world.getSeed(), world.getWorldInfo().getTerrainType()); + } + + @Override + public List getBiomesToSpawnIn() + { + return this.biomesToSpawnIn; + } + + @Override + public Biome getBiome(BlockPos pos, Biome defaultBiome) + { + BiomeAdaptive.setBodyMultiBiome(body); + return this.biomeCache.getBiome(pos.getX(), pos.getZ(), BiomeAdaptive.biomeDefault); + } + + @Override + @SideOnly(Side.CLIENT) + public float getTemperatureAtHeight(float par1, int par2) + { + return par1; + } + + @Override + public Biome[] getBiomesForGeneration(Biome[] biomes, int x, int z, int length, int width) + { + IntCache.resetIntCache(); + BiomeAdaptive.setBodyMultiBiome(body); + + if (biomes == null || biomes.length < length * width) + { + biomes = new Biome[length * width]; + } + + int[] intArray = unzoomedBiomes.getInts(x, z, length, width); + + for (int i = 0; i < length * width; ++i) + { + if (intArray[i] >= 0) + { + biomes[i] = Biome.getBiome(intArray[i]); + } else + { + biomes[i] = BiomeAdaptive.biomeDefault; + } + } + + return biomes; + } + + @Override + public Biome[] getBiomes(@Nullable Biome[] oldBiomeList, int x, int z, int width, int depth) + { + return getBiomes(oldBiomeList, x, z, width, depth, true); + } + + @Override + public Biome[] getBiomes(@Nullable Biome[] listToReuse, int x, int z, int width, int length, boolean cacheFlag) + { + IntCache.resetIntCache(); + BiomeAdaptive.setBodyMultiBiome(body); + + if (listToReuse == null || listToReuse.length < length * width) + { + listToReuse = new Biome[width * length]; + } + + if (cacheFlag && width == 16 && length == 16 && (x & 15) == 0 && (z & 15) == 0) + { + Biome[] cached = this.biomeCache.getCachedBiomes(x, z); + System.arraycopy(cached, 0, listToReuse, 0, width * length); + return listToReuse; + } + + int[] zoomed = zoomedBiomes.getInts(x, z, width, length); + + for (int i = 0; i < width * length; ++i) + { + if (zoomed[i] >= 0) + { + listToReuse[i] = Biome.getBiome(zoomed[i]); + } else + { + listToReuse[i] = BiomeAdaptive.biomeDefault; + } + } + + return listToReuse; + } + + @Override + public boolean areBiomesViable(int x, int z, int range, List viables) + { + int i = x - range >> 2; + int j = z - range >> 2; + int k = x + range >> 2; + int l = z + range >> 2; + int diffX = (k - i) + 1; + int diffZ = (l - j) + 1; + int[] unzoomed = this.unzoomedBiomes.getInts(i, j, diffX, diffZ); + + for (int a = 0; a < diffX * diffZ; ++a) + { + Biome biome = Biome.getBiome(unzoomed[a]); + + if (!viables.contains(biome)) + { + return false; + } + } + + return true; + } + + @Override + public BlockPos findBiomePosition(int x, int z, int range, List biomes, Random random) + { + int i = x - range >> 2; + int j = z - range >> 2; + int k = x + range >> 2; + int l = z + range >> 2; + int diffX = (k - i) + 1; + int diffZ = (l - j) + 1; + int[] unzoomed = this.unzoomedBiomes.getInts(i, j, diffX, diffZ); + BlockPos blockPos = null; + int count = 0; + + for (int a = 0; a < unzoomed.length; ++a) + { + int x0 = i + a % diffX << 2; + int z0 = j + a / diffX << 2; + Biome biome = Biome.getBiome(unzoomed[a]); + + if (biomes.contains(biome) && (blockPos == null || random.nextInt(count + 1) == 0)) + { + blockPos = new BlockPos(x0, 0, z0); + count++; + } + } + + return blockPos; + } + + @Override + public void cleanupCache() + { + this.biomeCache.cleanupCache(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeVenus.java new file mode 100644 index 00000000..4d9e0824 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/BiomeVenus.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.BiomeData; +import micdoodle8.mods.galacticraft.api.world.BiomeGenBaseGC; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.chunk.ChunkPrimer; + +public class BiomeVenus extends BiomeGenBaseGC +{ + + public static final Biome venusFlat = new BiomeGenFlatVenus(BiomeData.builder().biomeName("Venus Flat").baseHeight(0.5F).heightVariation(0.4F).temperature(4.0F).build()); + public static final Biome venusMountain = new BiomeGenVenusMountain(BiomeData.builder().biomeName("Venus Mountain").baseHeight(2.0F).heightVariation(1.0F).temperature(4.0F).build()); + public static final Biome venusValley = new BiomeGenVenusValley(BiomeData.builder().biomeName("Venus Valley").baseHeight(-0.4F).heightVariation(0.2F).temperature(4.0F).build()); + + BiomeVenus(BiomeData properties) + { + super(properties, true); + } + + @Override + public BiomeDecorator createBiomeDecorator() + { + return new BiomeDecoratorVenus(); + } + + @Override + public float getSpawningChance() + { + return 0.01F; + } + + @Override + public void genTerrainBlocks(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180622_4_, int p_180622_5_, double p_180622_6_) + { + } + + public final void generateBiomeTerrainVenus(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int p_180628_4_, int p_180628_5_, double p_180628_6_) + { + int i = worldIn.getSeaLevel(); + IBlockState topBlock = this.topBlock; + IBlockState fillerBlock = this.fillerBlock; + IBlockState stoneBlock = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + int j = -1; + int k = (int) (p_180628_6_ / 3.0D + 3.0D + rand.nextDouble() * 0.25D); + int l = p_180628_4_ & 15; + int i1 = p_180628_5_ & 15; + + for (int j1 = 255; j1 >= 0; --j1) + { + if (j1 <= rand.nextInt(5)) + { + chunkPrimerIn.setBlockState(i1, j1, l, Blocks.BEDROCK.getDefaultState()); + } else + { + IBlockState iblockstate2 = chunkPrimerIn.getBlockState(i1, j1, l); + + if (iblockstate2.getMaterial() == Material.AIR) + { + j = -1; + } else if (iblockstate2.getBlock() == VenusBlocks.venusBlock) + { + if (j == -1) + { + if (k <= 0) + { + topBlock = null; + fillerBlock = stoneBlock; + } else if (j1 >= i - 4 && j1 <= i + 1) + { + topBlock = this.topBlock; + fillerBlock = this.fillerBlock; + } + + j = k; + + if (j1 >= i - 1) + { + chunkPrimerIn.setBlockState(i1, j1, l, topBlock); + } else if (j1 < i - 7 - k) + { + topBlock = null; + fillerBlock = stoneBlock; + } else + { + chunkPrimerIn.setBlockState(i1, j1, l, fillerBlock); + } + } else if (j > 0) + { + --j; + chunkPrimerIn.setBlockState(i1, j1, l, fillerBlock); + } + } + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/ChunkProviderVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/ChunkProviderVenus.java new file mode 100644 index 00000000..5a7bd5f6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/ChunkProviderVenus.java @@ -0,0 +1,392 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.BlockFalling; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldEntitySpawner; +import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.gen.NoiseGenerator; +import net.minecraft.world.gen.NoiseGeneratorOctaves; +import net.minecraft.world.gen.NoiseGeneratorPerlin; + +import net.minecraftforge.event.ForgeEventFactory; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.BiomeAdaptive; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.api.world.ChunkProviderBase; +import micdoodle8.mods.galacticraft.core.perlin.generator.GradientNoise; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.DungeonConfigurationVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.MapGenDungeonVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.RoomBossVenus; +import micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon.RoomTreasureVenus; + +public class ChunkProviderVenus extends ChunkProviderBase +{ + + public static final IBlockState BLOCK_FILL = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD); + + private Random rand; + private NoiseGeneratorOctaves noiseGen1; + private NoiseGeneratorOctaves noiseGen2; + private NoiseGeneratorOctaves noiseGen3; + private NoiseGeneratorPerlin noiseGen4; + private NoiseGeneratorOctaves noiseGen5; + private NoiseGeneratorOctaves noiseGen6; + private NoiseGeneratorOctaves mobSpawnerNoise; + private final GradientNoise noiseGenSmooth1; + private World world; + private WorldType worldType; + private final double[] terrainCalcs; + private final float[] parabolicField; + private double[] stoneNoise = new double[256]; + private MapGenBaseMeta caveGenerator = new MapGenCaveVenus(); + private MapGenBaseMeta lavaCaveGenerator = new MapGenLavaVenus(); + private Biome[] biomesForGeneration; + private double[] octaves1; + private double[] octaves2; + private double[] octaves3; + private double[] octaves4; + private final MapGenDungeonVenus dungeonGenerator = new MapGenDungeonVenus( + new DungeonConfigurationVenus(VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_1), + VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.DUNGEON_BRICK_2), 30, 8, 16, 7, 7, RoomBossVenus.class, + RoomTreasureVenus.class)); + + public ChunkProviderVenus(World worldIn, long seed, boolean mapFeaturesEnabled) + { + this.world = worldIn; + this.worldType = worldIn.getWorldInfo().getTerrainType(); + this.rand = new Random(seed); + this.noiseGen1 = new NoiseGeneratorOctaves(this.rand, 16); + this.noiseGen2 = new NoiseGeneratorOctaves(this.rand, 16); + this.noiseGen3 = new NoiseGeneratorOctaves(this.rand, 8); + this.noiseGen4 = new NoiseGeneratorPerlin(this.rand, 4); + this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10); + this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16); + this.mobSpawnerNoise = new NoiseGeneratorOctaves(this.rand, 8); + this.noiseGenSmooth1 = new GradientNoise(this.rand.nextLong(), 4, 0.25D); + this.terrainCalcs = new double[825]; + this.parabolicField = new float[25]; + + for (int i = -2; i <= 2; ++i) + { + for (int j = -2; j <= 2; ++j) + { + float f = 10.0F / MathHelper.sqrt(i * i + j * j + 0.2F); + this.parabolicField[i + 2 + (j + 2) * 5] = f; + } + } + + NoiseGenerator[] noiseGens = + {noiseGen1, noiseGen2, noiseGen3, noiseGen4, noiseGen5, noiseGen6, mobSpawnerNoise}; + this.noiseGen1 = (NoiseGeneratorOctaves) noiseGens[0]; + this.noiseGen2 = (NoiseGeneratorOctaves) noiseGens[1]; + this.noiseGen3 = (NoiseGeneratorOctaves) noiseGens[2]; + this.noiseGen4 = (NoiseGeneratorPerlin) noiseGens[3]; + this.noiseGen5 = (NoiseGeneratorOctaves) noiseGens[4]; + this.noiseGen6 = (NoiseGeneratorOctaves) noiseGens[5]; + this.mobSpawnerNoise = (NoiseGeneratorOctaves) noiseGens[6]; + } + + private void setBlocksInChunk(int chunkX, int chunkZ, ChunkPrimer primer) + { + this.noiseGenSmooth1.setFrequencyAll(0.014999999664723873D); + this.biomesForGeneration = this.world.getBiomeProvider().getBiomesForGeneration(this.biomesForGeneration, chunkX * 4 - 2, chunkZ * 4 - 2, 10, 10); + this.createLandPerBiome(chunkX * 4, chunkZ * 4); + + for (int i = 0; i < 4; ++i) + { + int j = i * 5; + int k = (i + 1) * 5; + + for (int l = 0; l < 4; ++l) + { + int i1 = (j + l) * 33; + int j1 = (j + l + 1) * 33; + int k1 = (k + l) * 33; + int l1 = (k + l + 1) * 33; + + for (int i2 = 0; i2 < 32; ++i2) + { + double d0 = 0.125D; + double d1 = this.terrainCalcs[i1 + i2]; + double d2 = this.terrainCalcs[j1 + i2]; + double d3 = this.terrainCalcs[k1 + i2]; + double d4 = this.terrainCalcs[l1 + i2]; + double d5 = (this.terrainCalcs[i1 + i2 + 1] - d1) * d0; + double d6 = (this.terrainCalcs[j1 + i2 + 1] - d2) * d0; + double d7 = (this.terrainCalcs[k1 + i2 + 1] - d3) * d0; + double d8 = (this.terrainCalcs[l1 + i2 + 1] - d4) * d0; + + for (int j2 = 0; j2 < 8; ++j2) + { + double d9 = 0.25D; + double d10 = d1; + double d11 = d2; + double d12 = (d3 - d1) * d9; + double d13 = (d4 - d2) * d9; + + for (int k2 = 0; k2 < 4; ++k2) + { + double d14 = 0.25D; + double d16 = (d11 - d10) * d14; + double lvt_45_1_ = d10 - d16; + + for (int l2 = 0; l2 < 4; ++l2) + { + if ((lvt_45_1_ += d16) > this.noiseGenSmooth1.evalNoise(chunkX * 16 + (i * 4 + k2), chunkZ * 16 + (l * 4 + l2)) * 20.0) + { + primer.setBlockState(i * 4 + k2, i2 * 8 + j2, l * 4 + l2, BLOCK_FILL); + } + } + + d10 += d12; + d11 += d13; + } + + d1 += d5; + d2 += d6; + d3 += d7; + d4 += d8; + } + } + } + } + } + + private void replaceBlocksForBiome(int x, int z, ChunkPrimer primer, Biome[] biomes) + { + double d0 = 0.03125D; + this.stoneNoise = this.noiseGen4.getRegion(this.stoneNoise, x * 16, z * 16, 16, 16, d0 * 2.0D, d0 * 2.0D, 1.0D); + + for (int i = 0; i < 16; ++i) + { + for (int j = 0; j < 16; ++j) + { + Biome biomegenbase = biomes[j + i * 16]; + biomegenbase.genTerrainBlocks(this.world, this.rand, primer, x * 16 + i, z * 16 + j, this.stoneNoise[j + i * 16]); + } + } + } + + @Override + public Chunk generateChunk(int x, int z) + { + this.rand.setSeed(x * 341873128712L + z * 132897987541L); + ChunkPrimer chunkprimer = new ChunkPrimer(); + this.setBlocksInChunk(x, z, chunkprimer); + this.biomesForGeneration = this.world.getBiomeProvider().getBiomes(this.biomesForGeneration, x * 16, z * 16, 16, 16); + + this.caveGenerator.generate(this.world, x, z, chunkprimer); + this.lavaCaveGenerator.generate(this.world, x, z, chunkprimer); + + this.replaceBlocksForBiome(x, z, chunkprimer, this.biomesForGeneration); + + this.dungeonGenerator.generate(this.world, x, z, chunkprimer); + + Chunk chunk = new Chunk(this.world, chunkprimer, x, z); + byte[] abyte = chunk.getBiomeArray(); + + for (int i = 0; i < abyte.length; ++i) + { + abyte[i] = (byte) Biome.getIdForBiome(this.biomesForGeneration[i]); + } + + chunk.generateSkylightMap(); + return chunk; + } + + private void createLandPerBiome(int x, int z) + { + this.octaves4 = this.noiseGen6.generateNoiseOctaves(this.octaves4, x, z, 5, 5, 2000.0, 2000.0, 0.5); + this.octaves1 = this.noiseGen3.generateNoiseOctaves(this.octaves1, x, 0, z, 5, 33, 5, 8.555150000000001D, 4.277575000000001D, 8.555150000000001D); + this.octaves2 = this.noiseGen1.generateNoiseOctaves(this.octaves2, x, 0, z, 5, 33, 5, 684.412D, 684.412D, 684.412D); + this.octaves3 = this.noiseGen2.generateNoiseOctaves(this.octaves3, x, 0, z, 5, 33, 5, 684.412D, 684.412D, 684.412D); + int i = 0; + int j = 0; + + for (int k = 0; k < 5; ++k) + { + for (int l = 0; l < 5; ++l) + { + float f2 = 0.0F; + float f3 = 0.0F; + float f4 = 0.0F; + int i1 = 2; + Biome biomegenbase = this.biomesForGeneration[k + 2 + (l + 2) * 10]; + + for (int j1 = -i1; j1 <= i1; ++j1) + { + for (int k1 = -i1; k1 <= i1; ++k1) + { + Biome biomegenbase1 = this.biomesForGeneration[k + j1 + 2 + (l + k1 + 2) * 10]; + float f5 = biomegenbase1.getBaseHeight(); + float f6 = biomegenbase1.getHeightVariation(); + + if (this.worldType == WorldType.AMPLIFIED && f5 > 0.0F) + { + f5 = 1.0F + f5 * 2.0F; + f6 = 1.0F + f6 * 4.0F; + } + + float f7 = this.parabolicField[j1 + 2 + (k1 + 2) * 5] / (f5 + 2.0F); + + if (biomegenbase1.getBaseHeight() > biomegenbase.getBaseHeight()) + { + f7 /= 2.0F; + } + + f2 += f6 * f7; + f3 += f5 * f7; + f4 += f7; + } + } + + f2 = f2 / f4; + f3 = f3 / f4; + f2 = f2 * 0.9F + 0.1F; + f3 = (f3 * 4.0F - 1.0F) / 8.0F; + double d7 = this.octaves4[j] / 4000.0D; + + if (d7 < 0.0D) + { + d7 = -d7 * 0.3D; + } + + d7 = d7 * 3.0D - 2.0D; + + if (d7 < 0.0D) + { + d7 = d7 / 2.0D; + + if (d7 < -1.0D) + { + d7 = -1.0D; + } + + d7 = d7 / 1.4D; + d7 = d7 / 2.0D; + } else + { + if (d7 > 1.0D) + { + d7 = 1.0D; + } + + d7 = d7 / 8.0D; + } + + ++j; + double d8 = f3; + double d9 = f2; + d8 = d8 + d7 * 0.2D; + d8 = d8 * 8.5 / 8.0D; + double d0 = 8.5 + d8 * 4.0D; + + for (int l1 = 0; l1 < 33; ++l1) + { + double d1 = (l1 - d0) * 12.0 * 128.0D / 256.0D / d9; + + if (d1 < 0.0D) + { + d1 *= 4.0D; + } + + double d3 = this.octaves3[i] / 1024.0; + double d5 = d3 - d1; + + if (l1 > 29) + { + double d6 = (l1 - 29) / 3.0F; + d5 = d5 * (1.0D - d6) + -10.0D * d6; + } + + this.terrainCalcs[i] = d5; + ++i; + } + } + } + } + + @Override + public void populate(int x, int z) + { + BlockFalling.fallInstantly = true; + int i = x * 16; + int j = z * 16; + BlockPos blockpos = new BlockPos(i, 0, j); + Biome biomegenbase = this.world.getBiome(blockpos.add(16, 0, 16)); + this.rand.setSeed(this.world.getSeed()); + long k = this.rand.nextLong() / 2L * 2L + 1L; + long l = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(x * k + z * l ^ this.world.getSeed()); + boolean isValley = biomegenbase instanceof BiomeAdaptive && ((BiomeAdaptive) biomegenbase).isInstance(BiomeGenVenusValley.class); + ForgeEventFactory.onChunkPopulate(true, this, this.world, this.rand, x, z, false); + if (this.rand.nextInt(isValley ? 3 : 10) == 0) + { + int i2 = this.rand.nextInt(16) + 8; + int l2 = this.rand.nextInt(this.rand.nextInt(248) + 8); + int k3 = this.rand.nextInt(16) + 8; + + (new WorldGenLakesVenus()).generate(this.world, this.rand, blockpos.add(i2, l2, k3)); + } + + if (isValley) + { + if (this.rand.nextInt(5) == 0) + { + int i2 = this.rand.nextInt(16) + 8; + int k3 = this.rand.nextInt(16) + 8; + int l2 = this.world.getTopSolidOrLiquidBlock(blockpos.add(i2, 0, k3)).getY() - 10 - this.rand.nextInt(5); + + (new WorldGenVaporPool()).generate(this.world, this.rand, blockpos.add(i2, l2, k3)); + } else if (this.rand.nextInt(190) == 0) + { + int i2 = this.rand.nextInt(16) + 8; + int k3 = this.rand.nextInt(16) + 8; + int l2 = this.world.getTopSolidOrLiquidBlock(blockpos.add(i2, 0, k3)).getY(); + + (new WorldGenCrashedProbe()).generate(this.world, this.rand, blockpos.add(i2, l2, k3)); + } + } + + this.dungeonGenerator.generateStructure(this.world, this.rand, new ChunkPos(x, z)); + + biomegenbase.decorate(this.world, this.rand, new BlockPos(i, 0, j)); + WorldEntitySpawner.performWorldGenSpawning(this.world, biomegenbase, i + 8, j + 8, 16, 16, this.rand); + ForgeEventFactory.onChunkPopulate(false, this, this.world, this.rand, x, z, false); + BlockFalling.fallInstantly = false; + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos) + { + Biome biomegenbase = this.world.getBiome(pos); + + return biomegenbase.getSpawnableList(creatureType); + } + + @Override + public void recreateStructures(Chunk chunk, int x, int z) + { + this.dungeonGenerator.generate(this.world, x, z, null); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenCaveVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenCaveVenus.java new file mode 100644 index 00000000..ac6d5bca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenCaveVenus.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenCaveVenus extends MapGenBaseMeta +{ + + public static final int BREAK_THROUGH_CHANCE = 25; // 1 in n chance + + protected void generateLargeCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10) + { + this.generateCaveNode(par1, par3, par4, primer, par6, par8, par10, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10, float par12, float par13, float par14, int par15, int par16, double par17) + { + final double d4 = par3 * 16 + 8; + final double d5 = par4 * 16 + 8; + float f3 = 0.0F; + float f4 = 0.0F; + final Random random = new Random(par1); + + if (par16 <= 0) + { + final int j1 = this.range * 16 - 16; + par16 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (par15 == -1) + { + par15 = par16 / 2; + flag = true; + } + + final int k1 = random.nextInt(par16 / 2) + par16 / 4; + + for (final boolean flag1 = random.nextInt(6) == 0; par15 < par16; ++par15) + { + final double d6 = 1.5D + MathHelper.sin(par15 * (float) Math.PI / par16) * par12 * 1.0F; + final double d7 = d6 * par17; + final float f5 = MathHelper.cos(par14); + final float f6 = MathHelper.sin(par14); + par6 += MathHelper.cos(par13) * f5; + par8 += f6; + par10 += MathHelper.sin(par13) * f5; + + if (flag1) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += f4 * 0.1F; + par13 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + + if (!flag && par15 == k1 && par12 > 1.0F && par16 > 0) + { + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 - Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 + Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) + { + final double d8 = par6 - d4; + final double d9 = par10 - d5; + final double d10 = par16 - par15; + final double d11 = par12 + 2.0F + 16.0F; + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) + { + return; + } + + if (par6 >= d4 - 16.0D - d6 * 2.0D && par10 >= d5 - 16.0D - d6 * 2.0D && par6 <= d4 + 16.0D + d6 * 2.0D && par10 <= d5 + 16.0D + d6 * 2.0D) + { + int l1 = MathHelper.floor(par6 - d6) - par3 * 16 - 1; + int i2 = MathHelper.floor(par6 + d6) - par3 * 16 + 1; + int j2 = MathHelper.floor(par8 - d7) - 1; + int k2 = MathHelper.floor(par8 + d7) + 1; + int l2 = MathHelper.floor(par10 - d6) - par4 * 16 - 1; + int i3 = MathHelper.floor(par10 + d6) - par4 * 16 + 1; + + if (l1 < 0) + { + l1 = 0; + } + + if (i2 > 16) + { + i2 = 16; + } + + if (j2 < 1) + { + j2 = 1; + } + + if (k2 > 120) + { + k2 = 120; + } + + if (l2 < 0) + { + l2 = 0; + } + + if (i3 > 16) + { + i3 = 16; + } + + int j3; + for (j3 = l1; j3 < i2; ++j3) + { + for (int l3 = l2; l3 < i3; ++l3) + { + for (int i4 = k2 + 1; i4 >= j2 - 1; --i4) + { + if (i4 >= 0 && i4 < 128) + { + if (i4 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && l3 != l2 && l3 != i3 - 1) + { + i4 = j2; + } + } + } + } + } + + if (true) + { + + for (int localY = j2; localY < k2; localY++) + { + final double yfactor = (localY + 0.5D - par8) / d7; + final double yfactorSq = yfactor * yfactor; + + for (int localX = l1; localX < i2; localX++) + { + final double zfactor = (localX + par3 * 16 + 0.5D - par6) / d6; + final double zfactorSq = zfactor * zfactor; + + for (int localZ = l2; localZ < i3; localZ++) + { + final double xfactor = (localZ + par4 * 16 + 0.5D - par10) / d6; + final double xfactorSq = xfactor * xfactor; + + if (xfactorSq + zfactorSq < 1.0D) + { + if (yfactor > -0.7D && xfactorSq + yfactorSq + zfactorSq < 1.0D) + { + IBlockState state = primer.getBlockState(localX, localY, localZ); + Block block = state.getBlock(); + int metadata = state.getBlock().getMetaFromState(state); + if (block == VenusBlocks.venusBlock) + { + if (metadata == 1) + { + primer.setBlockState(localX, localY, localZ, Blocks.AIR.getDefaultState()); + } + } + } + } + } + } + } + + if (flag) + { + break; + } + } + } + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int par2, int par3, int par4, int par5, ChunkPrimer primer) + { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + + if (this.rand.nextInt(15) != 0) + { + var7 = 0; + } + + for (int var8 = 0; var8 < var7; ++var8) + { + final double var9 = par2 * 16 + this.rand.nextInt(16); + final double var11 = this.rand.nextInt(this.rand.nextInt(120) + 8); + final double var13 = par3 * 16 + this.rand.nextInt(16); + int var15 = 1; + + if (this.rand.nextInt(4) == 0) + { + this.generateLargeCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for (int var16 = 0; var16 < var15; ++var16) + { + final float var17 = this.rand.nextFloat() * Constants.twoPI; + final float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + + if (this.rand.nextInt(10) == 0) + { + var19 *= this.rand.nextFloat() * this.rand.nextFloat() * 3.0F + 1.0F; + } + + this.generateCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenLavaVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenLavaVenus.java new file mode 100644 index 00000000..0b38b4b0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/MapGenLavaVenus.java @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; + +public class MapGenLavaVenus extends MapGenBaseMeta +{ + + protected void generateCaveNode(long par1, int par3, int par4, ChunkPrimer primer, double par6, double par8, double par10, float par12, float par13, float par14, int par15, int par16, double par17) + { + final double d4 = par3 * 16 + 8; + final double d5 = par4 * 16 + 8; + float f3 = 0.0F; + float f4 = 0.0F; + final Random random = new Random(par1); + + if (par16 <= 0) + { + final int j1 = this.range * 16 - 16; + par16 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (par15 == -1) + { + par15 = par16 / 2; + flag = true; + } + + final int k1 = random.nextInt(par16 / 2) + par16 / 4; + + for (final boolean flag1 = random.nextInt(6) == 0; par15 < par16; ++par15) + { + final double d6 = 0.5D + MathHelper.sin(par15 * (float) Math.PI / par16) * par12 * 1.0F; + final double d7 = d6 * par17; + final float f5 = MathHelper.cos(par14); + final float f6 = MathHelper.sin(par14); + par6 += MathHelper.cos(par13) * f5; + par8 += f6; + par10 += MathHelper.sin(par13) * f5; + + if (flag1) + { + par14 *= 0.92F; + } else + { + par14 *= 0.7F; + } + + par14 += f4 * 0.1F; + par13 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + + if (!flag && par15 == k1 && par12 > 1.0F && par16 > 0) + { + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 - Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + this.generateCaveNode(random.nextLong(), par3, par4, primer, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 + Constants.halfPI, par14 / 3.0F, par15, par16, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) + { + final double d8 = par6 - d4; + final double d9 = par10 - d5; + final double d10 = par16 - par15; + final double d11 = par12 + 2.0F + 16.0F; + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) + { + return; + } + + if (par6 >= d4 - 16.0D - d6 * 2.0D && par10 >= d5 - 16.0D - d6 * 2.0D && par6 <= d4 + 16.0D + d6 * 2.0D && par10 <= d5 + 16.0D + d6 * 2.0D) + { + int l1 = MathHelper.floor(par6 - d6) - par3 * 16 - 1; + int i2 = MathHelper.floor(par6 + d6) - par3 * 16 + 1; + int j2 = MathHelper.floor(par8 - d7) - 1; + int k2 = MathHelper.floor(par8 + d7) + 1; + int l2 = MathHelper.floor(par10 - d6) - par4 * 16 - 1; + int i3 = MathHelper.floor(par10 + d6) - par4 * 16 + 1; + + if (l1 < 0) + { + l1 = 0; + } + + if (i2 > 16) + { + i2 = 16; + } + + if (j2 < 1) + { + j2 = 1; + } + +// if (k2 > 120) +// { +// k2 = 120; +// } + + if (l2 < 0) + { + l2 = 0; + } + + if (i3 > 16) + { + i3 = 16; + } + + int j3; + for (j3 = l1; j3 < i2; ++j3) + { + for (int l3 = l2; l3 < i3; ++l3) + { + for (int i4 = k2 + 1; i4 >= j2 - 1; --i4) + { + if (i4 >= 0 && i4 < 128) + { + if (i4 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && l3 != l2 && l3 != i3 - 1) + { + i4 = j2; + } + } + } + } + } + + if (true) + { + + for (int localY = j2; localY < k2; localY++) + { + final double yfactor = (localY + 0.5D - par8) / d7; + final double yfactorSq = yfactor * yfactor; + + for (int localX = l1; localX < i2; localX++) + { + final double zfactor = (localX + par3 * 16 + 0.5D - par6) / d6; + final double zfactorSq = zfactor * zfactor; + + for (int localZ = l2; localZ < i3; localZ++) + { + final double xfactor = (localZ + par4 * 16 + 0.5D - par10) / d6; + final double xfactorSq = xfactor * xfactor; + + if (xfactorSq + zfactorSq < 1.0D) + { + if (yfactor > -0.7D && xfactorSq + yfactorSq + zfactorSq < 1.0D) + { + IBlockState toReplace = primer.getBlockState(localX, localY, localZ); + if (toReplace.getBlock() == VenusBlocks.venusBlock) + { + BlockBasicVenus.EnumBlockBasicVenus type = (BlockBasicVenus.EnumBlockBasicVenus) toReplace.getValue(BlockBasicVenus.BASIC_TYPE_VENUS); + if (type == BlockBasicVenus.EnumBlockBasicVenus.ROCK_HARD || type == BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT) + { + IBlockState north = localZ == 0 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX, localY, localZ - 1); + IBlockState south = localZ == 15 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX, localY, localZ + 1); + IBlockState east = localX == 15 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX + 1, localY, localZ); + IBlockState west = localX == 0 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX - 1, localY, localZ); + IBlockState below = localY == 0 ? Blocks.AIR.getDefaultState() : primer.getBlockState(localX, localY - 1, localZ); + if (north.getBlock() == Blocks.AIR || south.getBlock() == Blocks.AIR || east.getBlock() == Blocks.AIR || west.getBlock() == Blocks.AIR + || below.getBlock() == Blocks.AIR) + { + primer.setBlockState(localX, localY, localZ, + VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_MAGMA)); + } else + { + primer.setBlockState(localX, localY, localZ, Blocks.LAVA.getDefaultState()); + } + } + } + } + } + } + } + } + + if (flag) + { + break; + } + } + } + } + } + } + + @Override + protected void recursiveGenerate(World par1World, int par2, int par3, int par4, int par5, ChunkPrimer primer) + { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + + if (this.rand.nextInt(25) != 0) + { + var7 = 0; + } + + for (int var8 = 0; var8 < var7; ++var8) + { + final double var9 = par2 * 16 + this.rand.nextInt(16); + final double var11 = this.rand.nextInt(this.rand.nextInt(120) + 8); + final double var13 = par3 * 16 + this.rand.nextInt(16); + + for (int var16 = 0; var16 < 1; ++var16) + { + final float var17 = this.rand.nextFloat() * Constants.twoPI; + final float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + + this.generateCaveNode(this.rand.nextLong(), par4, par5, primer, var9, var11, var13, 1.0F, var17, var18, 0, 0, 1.0D); + } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenCrashedProbe.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenCrashedProbe.java new file mode 100644 index 00000000..cb9e296e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenCrashedProbe.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.event.LootHandlerGC; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.tile.TileEntityCrashedProbe; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenCrashedProbe extends WorldGenerator +{ + + public WorldGenCrashedProbe() + { + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + for (position = position.add(-8, 0, -8); position.getY() > 5 && worldIn.isAirBlock(position); position = position.down()) + { + ; + } + + if (position.getY() <= 4) + { + return false; + } + + int radius = 5 + rand.nextInt(4); + int radiusSq = radius * radius; + + // Check this crater doesn't cut into a mountain + for (int poolX = -radius; poolX <= radius; poolX++) + { + for (int poolY = -radius; poolY <= Math.min(256 - position.getY(), 50); poolY++) + { + for (int poolZ = -radius; poolZ <= radius; poolZ++) + { + BlockPos pos = new BlockPos(poolX + position.getX(), poolY + position.getY(), poolZ + position.getZ()); + if (poolY > 15 && !worldIn.getBlockState(pos).getBlock().isAir(worldIn.getBlockState(pos), worldIn, pos)) + { + return false; + } + } + } + } + + for (int poolX = -radius - 1; poolX <= radius + 1; poolX++) + { + for (int poolY = -radius - 1; poolY <= 256 - position.getY(); poolY++) + { + for (int poolZ = -radius - 1; poolZ <= radius + 1; poolZ++) + { + int distance = poolX * poolX + Math.min(0, poolY) * Math.min(0, poolY) + poolZ * poolZ; + + BlockPos pos = new BlockPos(poolX + position.getX(), poolY + position.getY(), poolZ + position.getZ()); + if (distance <= radiusSq) + { + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState(), 2); + } else if (worldIn.getBlockState(pos).getBlock() == VenusBlocks.venusBlock && poolY < 0 && rand.nextInt(5) == 0) + { + worldIn.setBlockState(pos, VenusBlocks.scorchedRock.getDefaultState(), 2); + } + } + } + } + + BlockPos blockpos = position.add(0, -radius + 1, 0); + worldIn.setBlockState(blockpos, VenusBlocks.crashedProbe.getDefaultState(), 3); + TileEntityCrashedProbe probe = (TileEntityCrashedProbe) worldIn.getTileEntity(blockpos); + + if (probe != null) + { + for (int i = 0; i < probe.getSizeInventory(); ++i) + { + // Clear contents + probe.setInventorySlotContents(i, ItemStack.EMPTY); + } + + probe.setLootTable(LootHandlerGC.TABLE_CRASHED_PROBE, rand.nextLong()); + probe.setDropCore(); + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenLakesVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenLakesVenus.java new file mode 100644 index 00000000..d6472f44 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenLakesVenus.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenLakesVenus extends WorldGenerator +{ + + public WorldGenLakesVenus() + { + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + for (position = position.add(-8, 0, -8); position.getY() > 5 && worldIn.isAirBlock(position); position = position.down()) + { + ; + } + + if (position.getY() <= 4) + { + return false; + } else + { + position = position.down(4); + boolean[] aboolean = new boolean[2048]; + int i = rand.nextInt(4) + 4; + + for (int j = 0; j < i; ++j) + { + double d0 = rand.nextDouble() * 6.0D + 3.0D; + double d1 = rand.nextDouble() * 4.0D + 2.0D; + double d2 = rand.nextDouble() * 6.0D + 3.0D; + double d3 = rand.nextDouble() * (16.0D - d0 - 2.0D) + 1.0D + d0 / 2.0D; + double d4 = rand.nextDouble() * (8.0D - d1 - 4.0D) + 2.0D + d1 / 2.0D; + double d5 = rand.nextDouble() * (16.0D - d2 - 2.0D) + 1.0D + d2 / 2.0D; + + for (int l = 1; l < 15; ++l) + { + for (int i1 = 1; i1 < 15; ++i1) + { + for (int j1 = 1; j1 < 7; ++j1) + { + double d6 = ((double) l - d3) / (d0 / 2.0D); + double d7 = ((double) j1 - d4) / (d1 / 2.0D); + double d8 = ((double) i1 - d5) / (d2 / 2.0D); + double d9 = d6 * d6 + d7 * d7 + d8 * d8; + + if (d9 < 1.0D) + { + aboolean[(l * 16 + i1) * 8 + j1] = true; + } + } + } + } + } + + for (int k1 = 0; k1 < 16; ++k1) + { + for (int l2 = 0; l2 < 16; ++l2) + { + for (int k = 0; k < 8; ++k) + { + boolean flag = !aboolean[(k1 * 16 + l2) * 8 + k] + && (k1 < 15 && aboolean[((k1 + 1) * 16 + l2) * 8 + k] || k1 > 0 && aboolean[((k1 - 1) * 16 + l2) * 8 + k] || l2 < 15 && aboolean[(k1 * 16 + l2 + 1) * 8 + k] + || l2 > 0 && aboolean[(k1 * 16 + (l2 - 1)) * 8 + k] || k < 7 && aboolean[(k1 * 16 + l2) * 8 + k + 1] || k > 0 && aboolean[(k1 * 16 + l2) * 8 + (k - 1)]); + + if (flag) + { + IBlockState state = worldIn.getBlockState(position.add(k1, k, l2)); + Material material = state.getMaterial(); + + if (k >= 4 && material.isLiquid()) + { + return false; + } + + if (k < 4 && !material.isSolid() && worldIn.getBlockState(position.add(k1, k, l2)).getBlock() != Blocks.LAVA) + { + return false; + } + } + } + } + } + + for (int l1 = 0; l1 < 16; ++l1) + { + for (int i3 = 0; i3 < 16; ++i3) + { + for (int i4 = 0; i4 < 8; ++i4) + { + if (aboolean[(l1 * 16 + i3) * 8 + i4]) + { + worldIn.setBlockState(position.add(l1, i4, i3), i4 >= 4 ? Blocks.AIR.getDefaultState() : Blocks.LAVA.getDefaultState(), 2); + } + } + } + } + + for (int i2 = 0; i2 < 16; ++i2) + { + for (int j3 = 0; j3 < 16; ++j3) + { + for (int j4 = 4; j4 < 8; ++j4) + { + if (aboolean[(i2 * 16 + j3) * 8 + j4]) + { + BlockPos blockpos = position.add(i2, j4 - 1, j3); + + if (worldIn.getBlockState(blockpos).getBlock() == Blocks.DIRT && worldIn.getLightFor(EnumSkyBlock.SKY, position.add(i2, j4, j3)) > 0) + { + Biome biomegenbase = worldIn.getBiome(blockpos); + + if (biomegenbase.topBlock.getBlock() == Blocks.MYCELIUM) + { + worldIn.setBlockState(blockpos, Blocks.MYCELIUM.getDefaultState(), 2); + } else + { + worldIn.setBlockState(blockpos, Blocks.GRASS.getDefaultState(), 2); + } + } + } + } + } + } + + for (int j2 = 0; j2 < 16; ++j2) + { + for (int k3 = 0; k3 < 16; ++k3) + { + for (int k4 = 0; k4 < 8; ++k4) + { + boolean flag1 = !aboolean[(j2 * 16 + k3) * 8 + k4] + && (j2 < 15 && aboolean[((j2 + 1) * 16 + k3) * 8 + k4] || j2 > 0 && aboolean[((j2 - 1) * 16 + k3) * 8 + k4] || k3 < 15 && aboolean[(j2 * 16 + k3 + 1) * 8 + k4] + || k3 > 0 && aboolean[(j2 * 16 + (k3 - 1)) * 8 + k4] || k4 < 7 && aboolean[(j2 * 16 + k3) * 8 + k4 + 1] || k4 > 0 && aboolean[(j2 * 16 + k3) * 8 + (k4 - 1)]); + + IBlockState state = worldIn.getBlockState(position.add(j2, k4, k3)); + if (flag1 && (k4 < 4 || rand.nextInt(2) != 0) && state.getMaterial().isSolid()) + { + worldIn.setBlockState(position.add(j2, k4, k3), + VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_MAGMA), 2); + } + } + } + } + + return true; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenVaporPool.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenVaporPool.java new file mode 100644 index 00000000..b5536d06 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/WorldGenVaporPool.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen; + +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockBasicVenus; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class WorldGenVaporPool extends WorldGenerator +{ + + public WorldGenVaporPool() + { + } + + @Override + public boolean generate(World worldIn, Random rand, BlockPos position) + { + if (position.getY() <= 4) + { + return false; + } + + IBlockState venusSoft = VenusBlocks.venusBlock.getDefaultState().withProperty(BlockBasicVenus.BASIC_TYPE_VENUS, BlockBasicVenus.EnumBlockBasicVenus.ROCK_SOFT); + + int radius = 5 + rand.nextInt(4); + int radiusSq = radius * radius; + for (int poolX = -radius; poolX <= radius; poolX++) + { + for (int poolY = -radius; poolY <= radius; poolY++) + { + for (int poolZ = -radius; poolZ <= radius; poolZ++) + { + int distance = poolX * poolX + poolY * poolY + poolZ * poolZ; + + if (distance <= radiusSq) + { + BlockPos pos = new BlockPos(poolX + position.getX(), poolY + position.getY(), poolZ + position.getZ()); + worldIn.setBlockState(pos, distance >= radiusSq - 16 ? venusSoft : (poolY <= 0 ? VenusBlocks.sulphuricAcid.getDefaultState() : Blocks.AIR.getDefaultState()), + distance == radiusSq ? 3 : 2); + } + } + } + } + + boolean firstSet = false; + for (int i = 255; i >= position.getY() + 1; --i) + { + BlockPos pos = new BlockPos(position.getX(), i, position.getZ()); + if (worldIn.getBlockState(pos).getBlock() != Blocks.AIR) + { + if (!firstSet) + { + worldIn.setBlockState(pos, VenusBlocks.spout.getDefaultState(), 3); + firstSet = true; + } else + { + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState(), 2); + } + } + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/CorridorVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/CorridorVenus.java new file mode 100644 index 00000000..d660f799 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/CorridorVenus.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.lang.reflect.Constructor; +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class CorridorVenus extends SizedPieceVenus +{ + + public CorridorVenus() + { + } + + public CorridorVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, sizeX, sizeY, sizeZ, direction); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.boundingBox = new StructureBoundingBox(blockPosX, configuration.getYPosition(), blockPosZ, blockPosX + sizeX, configuration.getYPosition() + sizeY, blockPosZ + sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i < this.boundingBox.getXSize(); i++) + { + for (int j = 0; j < this.boundingBox.getYSize(); j++) + { + for (int k = 0; k < this.boundingBox.getZSize(); k++) + { + if (j == 2 && this.getDirection().getAxis() == EnumFacing.Axis.Z && (k + 1) % 4 == 0 && k != this.boundingBox.getZSize() - 1) + { + if (i == 0 || i == this.boundingBox.getXSize() - 1) + { + this.setBlockState(worldIn, Blocks.LAVA.getDefaultState(), i, j, k, this.boundingBox); + } else if (i == 1 || i == this.boundingBox.getXSize() - 2) + { + this.setBlockState(worldIn, Blocks.IRON_BARS.getDefaultState(), i, j, k, this.boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } else if (j == 2 && this.getDirection().getAxis() == EnumFacing.Axis.X && (i + 1) % 4 == 0 && i != this.boundingBox.getXSize() - 1) + { + if (k == 0 || k == this.boundingBox.getZSize() - 1) + { + this.setBlockState(worldIn, Blocks.LAVA.getDefaultState(), i, j, k, this.boundingBox); + } else if (k == 1 || k == this.boundingBox.getZSize() - 2) + { + this.setBlockState(worldIn, Blocks.IRON_BARS.getDefaultState(), i, j, k, this.boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } else if ((this.getDirection().getAxis() == EnumFacing.Axis.Z && (i == 1 || i == this.boundingBox.getXSize() - 2)) || j == 0 || j == this.boundingBox.getYSize() - 1 + || (this.getDirection().getAxis() == EnumFacing.Axis.X && (k == 1 || k == this.boundingBox.getZSize() - 2))) + { + DungeonConfigurationVenus venusConfig = (DungeonConfigurationVenus) this.configuration; + this.setBlockState(worldIn, j == 0 || j == this.boundingBox.getYSize() - 1 ? venusConfig.getBrickBlockFloor() : this.configuration.getBrickBlock(), i, j, k, this.boundingBox); + } else if ((this.getDirection().getAxis() == EnumFacing.Axis.Z && (i == 0 || i == this.boundingBox.getXSize() - 1)) + || (this.getDirection().getAxis() == EnumFacing.Axis.X && (k == 0 || k == this.boundingBox.getZSize() - 1))) + { + DungeonConfigurationVenus venusConfig = (DungeonConfigurationVenus) this.configuration; + this.setBlockState(worldIn, j == 0 || j == this.boundingBox.getYSize() - 1 ? venusConfig.getBrickBlockFloor() : this.configuration.getBrickBlock(), i, j, k, this.boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, this.boundingBox); + } + } + } + } + + return true; + } + + private T getRoom(Class clazz, DungeonStartVenus startPiece, Random rand) + { + try + { + Constructor c0 = clazz.getConstructor(DungeonConfigurationVenus.class, Random.class, Integer.TYPE, Integer.TYPE, EnumFacing.class); + T dummy = (T) c0.newInstance(this.configuration, rand, 0, 0, this.getDirection().getOpposite()); + StructureBoundingBox extension = getExtension(this.getDirection(), getDirection().getAxis() == EnumFacing.Axis.X ? dummy.getSizeX() : dummy.getSizeZ(), + getDirection().getAxis() == EnumFacing.Axis.X ? dummy.getSizeZ() : dummy.getSizeX()); + if (startPiece.checkIntersection(extension)) + { + return null; + } + int sizeX = extension.maxX - extension.minX; + int sizeZ = extension.maxZ - extension.minZ; + int sizeY = dummy.getSizeY(); + int blockX = extension.minX; + int blockZ = extension.minZ; + Constructor c1 = clazz.getConstructor(DungeonConfigurationVenus.class, Random.class, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, EnumFacing.class); + return (T) c1.newInstance(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + int pieceCount = startPiece.attachedComponents.size(); + if (pieceCount > 10 && startPiece.attachedComponents.get(pieceCount - 2) instanceof RoomBossVenus) + { + try + { + return getRoom(this.configuration.getTreasureRoom(), startPiece, rand); + } catch (Exception e) + { + e.printStackTrace(); + } + } else + { + int bossRoomChance = Math.max((int) (20.0 / (pieceCount - 10)), 1); + boolean bossRoom = pieceCount > 25 || (pieceCount > 10 && rand.nextInt(bossRoomChance) == 0); + if (bossRoom) + { + try + { + return getRoom(this.configuration.getBossRoom(), startPiece, rand); + } catch (Exception e) + { + e.printStackTrace(); + return null; + } + } else + { + StructureBoundingBox extension = getExtension(this.getDirection(), rand.nextInt(4) + 6, rand.nextInt(4) + 6); + + if (startPiece.checkIntersection(extension)) + { + return null; + } + + int sizeX = extension.maxX - extension.minX; + int sizeZ = extension.maxZ - extension.minZ; + int sizeY = configuration.getRoomHeight(); + int blockX = extension.minX; + int blockZ = extension.minZ; + + if (Math.abs(startPiece.getBoundingBox().maxZ - boundingBox.minZ) > 200) + { + return null; + } + + if (Math.abs(startPiece.getBoundingBox().maxX - boundingBox.minX) > 200) + { + return null; + } + + PieceVenus lastPiece = pieceCount <= 2 ? null : (PieceVenus) startPiece.attachedComponents.get(pieceCount - 2); + + if (!(lastPiece instanceof RoomSpawnerVenus)) + { + return new RoomSpawnerVenus(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } else + { + if (rand.nextInt(2) == 0) + { + return new RoomEmptyVenus(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } else + { + return new RoomChestVenus(this.configuration, rand, blockX, blockZ, sizeX, sizeY, sizeZ, this.getDirection().getOpposite()); + } + } + } + + } + + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DirectionalPieceVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DirectionalPieceVenus.java new file mode 100644 index 00000000..53212db9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DirectionalPieceVenus.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class DirectionalPieceVenus extends PieceVenus +{ + + private EnumFacing direction; + + public DirectionalPieceVenus() + { + } + + public DirectionalPieceVenus(DungeonConfigurationVenus configuration, EnumFacing direction) + { + super(configuration); + this.direction = direction; + } + + public EnumFacing getDirection() + { + return direction; + } + + public void setDirection(EnumFacing direction) + { + this.direction = direction; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("direction", this.direction.ordinal()); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + + if (tagCompound.hasKey("direction")) + { + this.direction = EnumFacing.byIndex(tagCompound.getInteger("direction")); + } else + { + this.direction = EnumFacing.NORTH; + } + } + + public PieceVenus getCorridor(Random rand, DungeonStartVenus startPiece, int maxAttempts, boolean small) + { + EnumFacing randomDir; + int blockX; + int blockZ; + int sizeX; + int sizeZ; + boolean valid; + int attempts = maxAttempts; + int randDir = rand.nextInt(3); + do + { + randomDir = EnumFacing.byHorizontalIndex((getDirection().getOpposite().getHorizontalIndex() + 1 + randDir) % 4); + StructureBoundingBox extension = + getExtension(randomDir, this.configuration.getHallwayLengthMin() + rand.nextInt(this.configuration.getHallwayLengthMax() - this.configuration.getHallwayLengthMin()), 5); + blockX = extension.minX; + blockZ = extension.minZ; + sizeX = extension.maxX - extension.minX; + sizeZ = extension.maxZ - extension.minZ; + valid = !startPiece.checkIntersection(extension); + attempts--; + randDir++; + } while (!valid && attempts > 0); + + if (!valid) + { + return null; + } + + return new CorridorVenus(this.configuration, rand, blockX, blockZ, sizeX, small ? 3 : this.configuration.getHallwayHeight(), sizeZ, randomDir); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonConfigurationVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonConfigurationVenus.java new file mode 100644 index 00000000..8c7d20ab --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonConfigurationVenus.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.DungeonConfiguration; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; + +public class DungeonConfigurationVenus extends DungeonConfiguration +{ + + private IBlockState brickBlockFloor; + + public DungeonConfigurationVenus() + { + } + + public DungeonConfigurationVenus(IBlockState brickBlock, IBlockState brickBlockFloor, int yPosition, int hallwayLengthMin, int hallwayLengthMax, int hallwayHeight, int roomHeight, Class bossRoom, Class treasureRoom) + { + super(brickBlock, yPosition, hallwayLengthMin, hallwayLengthMax, hallwayHeight, roomHeight, bossRoom, treasureRoom); + this.brickBlockFloor = brickBlockFloor; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) + { + tagCompound.setString("brickBlock", Block.REGISTRY.getNameForObject(this.brickBlockFloor.getBlock()).toString()); + + return super.writeToNBT(tagCompound); + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) + { + try + { + this.brickBlockFloor = Block.getBlockFromName(tagCompound.getString("brickBlock")).getStateFromMeta(tagCompound.getInteger("brickBlockMeta")); + } catch (Exception e) + { + System.err.println("Failed to read dungeon configuration from NBT"); + e.printStackTrace(); + } + + super.readFromNBT(tagCompound); + } + + public IBlockState getBrickBlockFloor() + { + return brickBlockFloor; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonStartVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonStartVenus.java new file mode 100644 index 00000000..45f9fb00 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/DungeonStartVenus.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; + +public class DungeonStartVenus extends EntranceCraterVenus +{ + + public List attachedComponents = Lists.newArrayList(); + public List componentBounds = Lists.newArrayList(); + + public DungeonStartVenus() + { + } + + public DungeonStartVenus(World world, DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand, blockPosX, blockPosZ); + } + + @Override + public void buildComponent(StructureComponent componentIn, List listIn, Random rand) + { + boolean validAttempt = false; + final int maxAttempts = 10; + int attempts = 0; + while (!validAttempt && attempts < maxAttempts) + { + attachedComponents.clear(); + componentBounds.clear(); + componentBounds.add(this.boundingBox); + listIn.clear(); + listIn.add(this); + PieceVenus next = getNextPiece(this, rand); + while (next != null) + { + listIn.add(next); + attachedComponents.add(next); + componentBounds.add(next.getBoundingBox()); + + next = next.getNextPiece(this, rand); + } + if (attachedComponents.size() >= 3 && attachedComponents.get(attachedComponents.size() - 1) instanceof RoomTreasureVenus + && attachedComponents.get(attachedComponents.size() - 3) instanceof RoomBossVenus) + { + validAttempt = true; + } + attempts++; + } + + GalacticraftPlanets.logger.debug("Dungeon generation took " + attempts + " attempt(s)"); + + if (!validAttempt) + { + int xPos = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2; + int zPos = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2; + System.err.println("Could not find valid venus dungeon layout! This is a bug, please report it, including your world seed (/seed) and dungeon location (" + xPos + ", " + zPos + ")"); + } + } + + public boolean checkIntersection(int blockX, int blockZ, int sizeX, int sizeZ) + { + return this.checkIntersection(new StructureBoundingBox(blockX, blockZ, blockX + sizeX, blockZ + sizeZ)); + } + + public boolean checkIntersection(StructureBoundingBox bounds) + { + for (int i = 0; i < componentBounds.size() - 1; ++i) + { + StructureBoundingBox boundingBox = componentBounds.get(i); + if (boundingBox.intersectsWith(bounds)) + { + return true; + } + } + + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/EntranceCraterVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/EntranceCraterVenus.java new file mode 100644 index 00000000..9585955e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/EntranceCraterVenus.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class EntranceCraterVenus extends SizedPieceVenus +{ + + private final int range = 16; + + public EntranceCraterVenus() + { + } + + public EntranceCraterVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand.nextInt(4) + 6, 12, rand.nextInt(4) + 6, EnumFacing.Plane.HORIZONTAL.random(rand)); + this.setCoordBaseMode(EnumFacing.SOUTH); + + this.boundingBox = new StructureBoundingBox(blockPosX - range, configuration.getYPosition() + 11, blockPosZ - range, blockPosX + range, 150, blockPosZ + range); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + int maxLevel = 0; + + for (int i = -range; i <= range; i++) + { + for (int k = -range; k <= range; k++) + { + int j = 150; + int x = this.getXWithOffset(i + range, k + range); + int z = this.getZWithOffset(i + range, k + range); + + while (j >= 0) + { + j--; + + int y = this.getYWithOffset(j); + BlockPos blockpos = new BlockPos(x, y, z); + Block block = worldIn.getBlockState(blockpos).getBlock(); + + if (Blocks.AIR != block) + { + break; + } + } + + maxLevel = Math.max(maxLevel, j + 3); + } + } + + Mirror mirror = Mirror.NONE; + Rotation rotation = Rotation.NONE; + if (this.getCoordBaseMode() != null) + { + switch (this.getCoordBaseMode()) + { + case SOUTH: + mirror = Mirror.LEFT_RIGHT; + break; + case WEST: + mirror = Mirror.LEFT_RIGHT; + rotation = Rotation.CLOCKWISE_90; + break; + case EAST: + rotation = Rotation.CLOCKWISE_90; + break; + default: + break; + } + } + + for (int i = -range; i < range; i++) + { + for (int k = -range; k < range; k++) + { + final double xDev = i / 20D; + final double zDev = k / 20D; + final double distance = xDev * xDev + zDev * zDev; + final int depth = (int) Math.abs(0.5 / (distance + .00001D)); + int helper = 0; + for (int j = maxLevel; j > 1 && helper <= depth; j--) + //TODO verify this + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i + range, k + range), this.getYWithOffset(j), this.getZWithOffset(i + range, k + range)); + IBlockState state = Blocks.AIR.getDefaultState(); + + if (mirror != Mirror.NONE) + { + state = state.withMirror(mirror); + } + + if (rotation != Rotation.NONE) + { + state = state.withRotation(rotation); + } + + worldIn.setBlockState(blockpos, state, 2); + helper++; + } + } + } + + return true; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + return new RoomEntranceVenus(this.configuration, rand, this.boundingBox.minX + this.boundingBox.getXSize() / 2, this.boundingBox.minZ + this.boundingBox.getZSize() / 2); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/MapGenDungeonVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/MapGenDungeonVenus.java new file mode 100644 index 00000000..8b78ed94 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/MapGenDungeonVenus.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.List; +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.world.gen.dungeon.MapGenDungeon; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.MapGenStructure; +import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.StructureStart; + +public class MapGenDungeonVenus extends MapGenStructure +{ + + private static boolean initialized; + private DungeonConfigurationVenus configuration; + + static + { + try + { + MapGenDungeonVenus.initiateStructures(); + } catch (Throwable e) + { + + } + } + + public MapGenDungeonVenus(DungeonConfigurationVenus configuration) + { + this.configuration = configuration; + } + + public static void initiateStructures() throws Throwable + { + if (!MapGenDungeonVenus.initialized) + { + MapGenStructureIO.registerStructure(MapGenDungeonVenus.Start.class, "VenusDungeon"); + MapGenStructureIO.registerStructureComponent(DungeonStartVenus.class, "VenusDungeonStart"); + MapGenStructureIO.registerStructureComponent(CorridorVenus.class, "VenusDungeonCorridor"); + MapGenStructureIO.registerStructureComponent(RoomEmptyVenus.class, "VenusDungeonEmptyRoom"); + MapGenStructureIO.registerStructureComponent(RoomBossVenus.class, "VenusDungeonBossRoom"); + MapGenStructureIO.registerStructureComponent(RoomTreasureVenus.class, "VenusDungeonTreasureRoom"); + MapGenStructureIO.registerStructureComponent(RoomSpawnerVenus.class, "VenusDungeonSpawnerRoom"); + MapGenStructureIO.registerStructureComponent(RoomChestVenus.class, "VenusDungeonChestRoom"); + MapGenStructureIO.registerStructureComponent(RoomEntranceVenus.class, "VenusDungeonEntranceRoom"); + } + + MapGenDungeonVenus.initialized = true; + } + + @Override + public String getStructureName() + { + return "GC_Dungeon_Venus"; + } + + @Override + protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ) + { + long dungeonPos = MapGenDungeon.getDungeonPosForCoords(this.world, chunkX, chunkZ, ((IGalacticraftWorldProvider) this.world.provider).getDungeonSpacing()); + int i = (int) (dungeonPos >> 32); + int j = (int) dungeonPos; + return i == chunkX && j == chunkZ; + } + + @Override + protected StructureStart getStructureStart(int chunkX, int chunkZ) + { + return new MapGenDungeonVenus.Start(this.world, this.rand, chunkX, chunkZ, this.configuration); + } + + @Override + public BlockPos getNearestStructurePos(World worldIn, BlockPos pos, boolean p_180706_3_) + { + return null; + } + + public static class Start extends StructureStart + { + public Start() + { + } + + public Start(World worldIn, Random rand, int chunkX, int chunkZ, DungeonConfigurationVenus configuration) + { + super(chunkX, chunkZ); + DungeonStartVenus startPiece = new DungeonStartVenus(worldIn, configuration, rand, (chunkX << 4) + 2, (chunkZ << 4) + 2); + startPiece.buildComponent(startPiece, this.components, rand); + List list = startPiece.attachedComponents; + + while (!list.isEmpty()) + { + int i = rand.nextInt(list.size()); + StructureComponent structurecomponent = list.remove(i); + structurecomponent.buildComponent(startPiece, this.components, rand); + } + + this.updateBoundingBox(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/PieceVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/PieceVenus.java new file mode 100644 index 00000000..3f570769 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/PieceVenus.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class PieceVenus extends StructureComponent +{ + + protected DungeonConfigurationVenus configuration; + + public PieceVenus() + { + } + + public PieceVenus(DungeonConfigurationVenus configuration) + { + this.configuration = configuration; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + this.configuration.writeToNBT(tagCompound); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + this.configuration = new DungeonConfigurationVenus(); + this.configuration.readFromNBT(tagCompound); + } + + protected StructureBoundingBox getExtension(EnumFacing direction, int length, int width) + { + int blockX, blockZ, sizeX, sizeZ; + switch (direction) + { + case NORTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.minZ - sizeZ; + break; + case EAST: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.maxX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + case SOUTH: + sizeX = width; + sizeZ = length; + blockX = this.boundingBox.minX + (this.boundingBox.maxX - this.boundingBox.minX) / 2 - sizeX / 2; + blockZ = this.boundingBox.maxZ; + break; + case WEST: + default: + sizeX = length; + sizeZ = width; + blockX = this.boundingBox.minX - sizeX; + blockZ = this.boundingBox.minZ + (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - sizeZ / 2; + break; + } + return new StructureBoundingBox(blockX, this.configuration.getYPosition(), blockZ, blockX + sizeX, this.configuration.getYPosition() + this.configuration.getHallwayHeight(), blockZ + sizeZ); + } + + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomBossVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomBossVenus.java new file mode 100644 index 00000000..411d50ea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomBossVenus.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.tile.TileEntityDungeonSpawner; +import micdoodle8.mods.galacticraft.planets.GalacticraftPlanets; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTorchWeb; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public class RoomBossVenus extends SizedPieceVenus +{ + + private EnumFacing exitDirection; + private BlockPos chestPos; + + public RoomBossVenus() + { + } + + public RoomBossVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + this(configuration, rand, blockPosX, blockPosZ, rand.nextInt(6) + 20, rand.nextInt(2) + 10, rand.nextInt(6) + 20, entranceDir); + } + + public RoomBossVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.sizeX = sizeX; + this.sizeZ = sizeZ; + this.sizeY = sizeY; + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos - 2, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + if (this.exitDirection != null) + { + tagCompound.setInteger("direction_exit", this.exitDirection.ordinal()); + } + + tagCompound.setBoolean("chestPosNull", this.chestPos == null); + if (this.chestPos != null) + { + tagCompound.setInteger("chestX", this.chestPos.getX()); + tagCompound.setInteger("chestY", this.chestPos.getY()); + tagCompound.setInteger("chestZ", this.chestPos.getZ()); + } + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + + if (tagCompound.hasKey("direction_exit")) + { + this.exitDirection = EnumFacing.byIndex(tagCompound.getInteger("direction_exit")); + } else + { + this.exitDirection = null; + } + + if (tagCompound.hasKey("chestPosNull") && !tagCompound.getBoolean("chestPosNull")) + { + this.chestPos = new BlockPos(tagCompound.getInteger("chestX"), tagCompound.getInteger("chestY"), tagCompound.getInteger("chestZ")); + } + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + StructureBoundingBox box = new StructureBoundingBox(new int[] + {Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE}); + + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + double dX = (i - this.sizeX / 2); + double dZ = (k - this.sizeZ / 2); + double dXZ = Math.sqrt(dX * dX + dZ * dZ); + + double f = -Math.pow((dXZ * 1.5) / (this.sizeX / 2 - 1), 6) + this.sizeY - 1; + + if (j == 0) + { + this.setBlockState(worldIn, this.configuration.getBrickBlockFloor(), i, j, k, chunkBox); + } else if (j < f) + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + + if (j + 1 >= f && (dXZ > 5) && random.nextInt(12) == 0) + { + int distFromFloor = random.nextInt(5) + 2; + for (int j0 = j; j0 >= distFromFloor + 1; --j0) + { + BlockTorchWeb.EnumWebType webType; + if (j0 == distFromFloor + 1) + { + webType = BlockTorchWeb.EnumWebType.WEB_1; + } else + { + webType = BlockTorchWeb.EnumWebType.WEB_0; + } + this.setBlockState(worldIn, VenusBlocks.torchWeb.getDefaultState().withProperty(BlockTorchWeb.WEB_TYPE, webType), i, j0, k, chunkBox); + } + } + + if (i < box.minX) + { + box.minX = i; + } + if (i > box.maxX) + { + box.maxX = i; + } + if (j < box.minY) + { + box.minY = j; + } + if (j > box.maxY) + { + box.maxY = j; + } + if (k < box.minZ) + { + box.minZ = k; + } + if (k > box.maxZ) + { + box.maxZ = k; + } + } else + { + boolean placeBlock = true; + + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 5 && j > 2) + { + if ((getDirection() == EnumFacing.SOUTH || (this.exitDirection != null && this.exitDirection == EnumFacing.SOUTH)) && k < 7) + { + placeBlock = false; + } + if ((getDirection() == EnumFacing.NORTH || (this.exitDirection != null && this.exitDirection == EnumFacing.NORTH)) && k > this.sizeZ - 7) + { + placeBlock = false; + } + } + + start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 5 && j > 2) + { + if ((getDirection() == EnumFacing.EAST || (this.exitDirection != null && this.exitDirection == EnumFacing.EAST)) && i < 7) + { + placeBlock = false; + } + if ((getDirection() == EnumFacing.WEST || (this.exitDirection != null && this.exitDirection == EnumFacing.WEST)) && i > this.sizeX - 7) + { + placeBlock = false; + } + } + + if (placeBlock) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, chunkBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + } + + int spawnerX = this.sizeX / 2; + int spawnerY = 1; + int spawnerZ = this.sizeZ / 2; + BlockPos blockpos = new BlockPos(this.getXWithOffset(spawnerX, spawnerZ), this.getYWithOffset(spawnerY), this.getZWithOffset(spawnerX, spawnerZ)); + // Is this position inside the chunk currently being generated? + if (chunkBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, VenusBlocks.bossSpawner.getDefaultState(), 2); + TileEntityDungeonSpawner spawner = (TileEntityDungeonSpawner) worldIn.getTileEntity(blockpos); + if (spawner != null) + { + if (box.getXSize() > 10000 || box.getYSize() > 10000 || box.getZSize() > 10000) + { + GalacticraftPlanets.logger.error("Failed to set correct boss room size. This is a bug!"); + } else + { + spawner.setRoom(new Vector3(box.minX + this.boundingBox.minX, box.minY + this.boundingBox.minY, box.minZ + this.boundingBox.minZ), + new Vector3(box.maxX - box.minX + 1, box.maxY - box.minY + 1, box.maxZ - box.minZ + 1)); + spawner.setChestPos(this.chestPos); + } + } + } + + return true; + } + + public BlockPos getChestPos() + { + return chestPos; + } + + public void setChestPos(BlockPos chestPos) + { + this.chestPos = chestPos; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + DirectionalPieceVenus corridor = (DirectionalPieceVenus) getCorridor(rand, startPiece, 10, true); + this.exitDirection = corridor == null ? null : corridor.getDirection().getOpposite(); + return corridor; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomChestVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomChestVenus.java new file mode 100644 index 00000000..52145a9d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomChestVenus.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.blocks.BlockTier1TreasureChest; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomChestVenus extends RoomEmptyVenus +{ + + public RoomChestVenus() + { + } + + public RoomChestVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random rand, StructureBoundingBox boundingBox) + { + if (super.addComponentParts(worldIn, rand, boundingBox)) + { + int chestX = this.sizeX / 2; + int chestY = 1; + int chestZ = this.sizeZ / 2; + this.setBlockState(worldIn, Blocks.CHEST.getDefaultState().withProperty(BlockTier1TreasureChest.FACING, this.getDirection().getOpposite()), chestX, chestY, chestZ, boundingBox); + + BlockPos blockpos = new BlockPos(this.getXWithOffset(chestX, chestZ), this.getYWithOffset(chestY), this.getZWithOffset(chestX, chestZ)); + TileEntityChest chest = (TileEntityChest) worldIn.getTileEntity(blockpos); + + // TODO Verify this + if (chest != null) + { + ResourceLocation chesttype = RoomTreasureVenus.VENUSCHEST; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + chest.setLootTable(chesttype, rand.nextLong()); + } + + return true; + } + + return false; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEmptyVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEmptyVenus.java new file mode 100644 index 00000000..1ce9d188 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEmptyVenus.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomEmptyVenus extends SizedPieceVenus +{ + + public RoomEmptyVenus() + { + } + + public RoomEmptyVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < this.configuration.getHallwayHeight() && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < this.configuration.getHallwayHeight() && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + DungeonConfigurationVenus venusConfig = (DungeonConfigurationVenus) this.configuration; + this.setBlockState(worldIn, j == 0 || j == this.sizeY ? venusConfig.getBrickBlockFloor() : this.configuration.getBrickBlock(), i, j, k, boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + if (Math.abs(startPiece.getBoundingBox().maxZ - boundingBox.minZ) > 200) + { + return null; + } + + if (Math.abs(startPiece.getBoundingBox().maxX - boundingBox.minX) > 200) + { + return null; + } + + return getCorridor(rand, startPiece, 10, false); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEntranceVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEntranceVenus.java new file mode 100644 index 00000000..b6533636 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomEntranceVenus.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomEntranceVenus extends SizedPieceVenus +{ + + public RoomEntranceVenus() + { + } + + public RoomEntranceVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ) + { + super(configuration, rand.nextInt(4) + 6, 12, rand.nextInt(4) + 6, EnumFacing.Plane.HORIZONTAL.random(rand)); + this.setCoordBaseMode(EnumFacing.SOUTH); + int sX = this.sizeX / 2; + int sZ = this.sizeZ / 2; + + this.boundingBox = + new StructureBoundingBox(blockPosX - sX, configuration.getYPosition(), blockPosZ - sZ, blockPosX - sX + this.sizeX, configuration.getYPosition() + this.sizeY, blockPosZ - sZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox structureBoundingBoxIn) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX + || j == 0 /* + * || j == this.sizeY + */ || k == 0 || k == this.sizeZ) + { + this.setBlockState(worldIn, this.configuration.getBrickBlock(), i, j, k, boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + return getCorridor(rand, startPiece, 10, false); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomSpawnerVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomSpawnerVenus.java new file mode 100644 index 00000000..b07c33f3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomSpawnerVenus.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class RoomSpawnerVenus extends RoomEmptyVenus +{ + + public RoomSpawnerVenus() + { + } + + public RoomSpawnerVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, rand, blockPosX, blockPosZ, sizeX, sizeY, sizeZ, entranceDir); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox chunkBox) + { + if (super.addComponentParts(worldIn, random, chunkBox)) + { + for (int i = 1; i <= this.sizeX - 1; ++i) + { + for (int j = 1; j <= this.sizeY - 1; ++j) + { + for (int k = 1; k <= this.sizeZ - 1; ++k) + { + if (random.nextFloat() < 0.05F) + { + this.setBlockState(worldIn, Blocks.WEB.getDefaultState(), i, j, k, chunkBox); + } + } + } + } + + this.placeMobSpawner(worldIn, random, chunkBox, 1, 0, 1); + this.placeMobSpawner(worldIn, random, chunkBox, this.sizeX - 1, 0, this.sizeZ - 1); + + return true; + } + + return false; + } + + private void placeMobSpawner(World worldIn, Random random, StructureBoundingBox chunkBox, int x, int y, int z) + { + this.setBlockState(worldIn, Blocks.MOB_SPAWNER.getDefaultState(), 1, 0, 1, boundingBox); + BlockPos blockpos = new BlockPos(this.getXWithOffset(1, 1), this.getYWithOffset(0), this.getZWithOffset(1, 1)); + TileEntityMobSpawner spawner = (TileEntityMobSpawner) worldIn.getTileEntity(blockpos); + + if (spawner != null) + { + spawner.getSpawnerBaseLogic().setEntityId(getMob(random)); + } + } + + private static ResourceLocation getMob(Random rand) + { + switch (rand.nextInt(4)) + { + case 0: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_spider"); + case 1: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_creeper"); + case 2: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_skeleton"); + case 3: + default: + return new ResourceLocation(Constants.MOD_ID_CORE, "evolved_zombie"); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomTreasureVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomTreasureVenus.java new file mode 100644 index 00000000..d878cffd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/RoomTreasureVenus.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import java.util.Random; +import micdoodle8.mods.galacticraft.api.world.IGalacticraftWorldProvider; +import micdoodle8.mods.galacticraft.core.Constants; +import micdoodle8.mods.galacticraft.core.tile.TileEntityTreasureChest; +import micdoodle8.mods.galacticraft.planets.venus.VenusBlocks; +import micdoodle8.mods.galacticraft.planets.venus.blocks.BlockTier3TreasureChest; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; +import net.minecraft.world.storage.loot.LootTableList; + +public class RoomTreasureVenus extends SizedPieceVenus +{ + + public static ResourceLocation VENUSCHEST = new ResourceLocation(Constants.ASSET_PREFIX, "dungeon_tier_3"); + public static final ResourceLocation TABLE_TIER_3_DUNGEON = LootTableList.register(VENUSCHEST); + + public RoomTreasureVenus() + { + } + + public RoomTreasureVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, EnumFacing entranceDir) + { + this(configuration, rand, blockPosX, blockPosZ, rand.nextInt(4) + 6, configuration.getRoomHeight(), rand.nextInt(4) + 6, entranceDir); + } + + public RoomTreasureVenus(DungeonConfigurationVenus configuration, Random rand, int blockPosX, int blockPosZ, int sizeX, int sizeY, int sizeZ, EnumFacing entranceDir) + { + super(configuration, sizeX, sizeY, sizeZ, entranceDir.getOpposite()); + this.setCoordBaseMode(EnumFacing.SOUTH); + int yPos = configuration.getYPosition(); + + this.boundingBox = new StructureBoundingBox(blockPosX, yPos, blockPosZ, blockPosX + this.sizeX, yPos + this.sizeY, blockPosZ + this.sizeZ); + } + + @Override + public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox boundingBox) + { + for (int i = 0; i <= this.sizeX; i++) + { + for (int j = 0; j <= this.sizeY; j++) + { + for (int k = 0; k <= this.sizeZ; k++) + { + if (i == 0 || i == this.sizeX || j == 0 || j == this.sizeY || k == 0 || k == this.sizeZ) + { + boolean placeBlock = true; + if (getDirection().getAxis() == EnumFacing.Axis.Z) + { + int start = (this.boundingBox.maxX - this.boundingBox.minX) / 2 - 1; + int end = (this.boundingBox.maxX - this.boundingBox.minX) / 2 + 1; + if (i > start && i <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.SOUTH && k == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.NORTH && k == this.sizeZ) + { + placeBlock = false; + } + } + } else + { + int start = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 - 1; + int end = (this.boundingBox.maxZ - this.boundingBox.minZ) / 2 + 1; + if (k > start && k <= end && j < 3 && j > 0) + { + if (getDirection() == EnumFacing.EAST && i == 0) + { + placeBlock = false; + } else if (getDirection() == EnumFacing.WEST && i == this.sizeX) + { + placeBlock = false; + } + } + } + if (placeBlock) + { + DungeonConfigurationVenus venusConfig = (DungeonConfigurationVenus) this.configuration; + this.setBlockState(worldIn, j == 0 || j == this.sizeY ? venusConfig.getBrickBlockFloor() : this.configuration.getBrickBlock(), i, j, k, boundingBox); + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } else if ((i == 1 && k == 1) || (i == 1 && k == this.sizeZ - 1) || (i == this.sizeX - 1 && k == 1) || (i == this.sizeX - 1 && k == this.sizeZ - 1)) + { + this.setBlockState(worldIn, Blocks.GLOWSTONE.getDefaultState(), i, j, k, boundingBox); + } else if (i == this.sizeX / 2 && j == 1 && k == this.sizeZ / 2) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(i, k), this.getYWithOffset(j), this.getZWithOffset(i, k)); + if (boundingBox.isVecInside(blockpos)) + { + worldIn.setBlockState(blockpos, VenusBlocks.treasureChestTier3.getDefaultState().withProperty(BlockTier3TreasureChest.FACING, this.getDirection().getOpposite()), 2); + TileEntityTreasureChest treasureChest = (TileEntityTreasureChest) worldIn.getTileEntity(blockpos); + if (treasureChest != null) + { + ResourceLocation chesttype = TABLE_TIER_3_DUNGEON; + if (worldIn.provider instanceof IGalacticraftWorldProvider) + { + chesttype = ((IGalacticraftWorldProvider) worldIn.provider).getDungeonChestType(); + } + treasureChest.setLootTable(chesttype, random.nextLong()); + } + } + } else + { + this.setBlockState(worldIn, Blocks.AIR.getDefaultState(), i, j, k, boundingBox); + } + } + } + } + + return true; + } + + @Override + public PieceVenus getNextPiece(DungeonStartVenus startPiece, Random rand) + { + if (startPiece.attachedComponents.size() > 2) + { + StructureComponent component = startPiece.attachedComponents.get(startPiece.attachedComponents.size() - 3); + if (component instanceof RoomBossVenus) + { + BlockPos blockpos = new BlockPos(this.getXWithOffset(this.sizeX / 2, this.sizeZ / 2), this.getYWithOffset(1), this.getZWithOffset(this.sizeX / 2, this.sizeZ / 2)); + ((RoomBossVenus) component).setChestPos(new BlockPos(blockpos)); + } + } + return null; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/SizedPieceVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/SizedPieceVenus.java new file mode 100644 index 00000000..c32b09e1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/dungeon/SizedPieceVenus.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.dungeon; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.template.TemplateManager; + +public abstract class SizedPieceVenus extends DirectionalPieceVenus +{ + + protected int sizeX; + protected int sizeY; + protected int sizeZ; + + public SizedPieceVenus() + { + } + + public SizedPieceVenus(DungeonConfigurationVenus configuration, int sizeX, int sizeY, int sizeZ, EnumFacing direction) + { + super(configuration, direction); + this.sizeX = sizeX; + this.sizeY = sizeY; + this.sizeZ = sizeZ; + } + + @Override + protected void writeStructureToNBT(NBTTagCompound tagCompound) + { + super.writeStructureToNBT(tagCompound); + + tagCompound.setInteger("sizeX", this.sizeX); + tagCompound.setInteger("sizeY", this.sizeY); + tagCompound.setInteger("sizeZ", this.sizeZ); + } + + @Override + protected void readStructureFromNBT(NBTTagCompound tagCompound, TemplateManager manager) + { + super.readStructureFromNBT(tagCompound, manager); + + this.sizeX = tagCompound.getInteger("sizeX"); + this.sizeY = tagCompound.getInteger("sizeY"); + this.sizeZ = tagCompound.getInteger("sizeZ"); + } + + public int getSizeX() + { + return sizeX; + } + + public int getSizeY() + { + return sizeY; + } + + public int getSizeZ() + { + return sizeZ; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenus.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenus.java new file mode 100644 index 00000000..519936e3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenus.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.layer; + +import net.minecraft.world.gen.layer.GenLayer; +import net.minecraft.world.gen.layer.GenLayerVoronoiZoom; +import net.minecraft.world.gen.layer.GenLayerZoom; + +public abstract class GenLayerVenus extends GenLayer +{ + + public GenLayerVenus(long l) + { + super(l); + } + + public static GenLayer[] createWorld(long l) + { + GenLayer biomes = new GenLayerVenusBiomes(l); + biomes = new GenLayerZoom(1000L, biomes); +// biomes = new GenLayerVenusSurround(500L, biomes); + biomes = new GenLayerZoom(1001L, biomes); + biomes = new GenLayerZoom(1002L, biomes); + biomes = new GenLayerZoom(1003L, biomes); + GenLayer genLayerVeronoiZoom = new GenLayerVoronoiZoom(10L, biomes); + biomes.initWorldGenSeed(l); + genLayerVeronoiZoom.initWorldGenSeed(l); + + return new GenLayer[] + {biomes, genLayerVeronoiZoom}; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusBiomes.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusBiomes.java new file mode 100644 index 00000000..3ece97bf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusBiomes.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.layer; + +import micdoodle8.mods.galacticraft.planets.venus.VenusModule; +import micdoodle8.mods.miccore.IntCache; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.layer.GenLayer; + +public class GenLayerVenusBiomes extends GenLayer +{ + + private static final Biome[] biomes = VenusModule.planetVenus.biomesToGenerate.toArray(new Biome[0]); + + public GenLayerVenusBiomes(long l, GenLayer parent) + { + super(l); + this.parent = parent; + } + + public GenLayerVenusBiomes(long l) + { + super(l); + } + + @Override + public int[] getInts(int x, int z, int width, int depth) + { + int[] dest = IntCache.getIntCache(width * depth); + + for (int k = 0; k < depth; ++k) + { + for (int i = 0; i < width; ++i) + { + initChunkSeed(x + i, z + k); + dest[i + k * width] = Biome.getIdForBiome(biomes[nextInt(biomes.length)]); + } + } + + return dest; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusSurround.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusSurround.java new file mode 100644 index 00000000..1413633a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/galacticraft/planets/venus/world/gen/layer/GenLayerVenusSurround.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.galacticraft.planets.venus.world.gen.layer; + +import micdoodle8.mods.miccore.IntCache; +import net.minecraft.world.gen.layer.GenLayer; + +public class GenLayerVenusSurround extends GenLayer +{ + + public GenLayerVenusSurround(long l, GenLayer parent) + { + super(l); + this.parent = parent; + } + + public GenLayerVenusSurround(long l) + { + super(l); + } + + @Override + public int[] getInts(int x, int z, int width, int depth) + { + int nx = x - 1; + int nz = z - 1; + int nwidth = width + 2; + int ndepth = depth + 2; + int input[] = parent.getInts(nx, nz, nwidth, ndepth); + int output[] = IntCache.getIntCache(width * depth); + for (int dz = 0; dz < depth; dz++) + { + for (int dx = 0; dx < width; dx++) + { + output[dx + dz * width] = input[dx + 1 + (dz + 1) * nwidth]; + } + } + + return output; + } + + boolean surrounded(int biome, int center, int right, int left, int up, int down) + { + if (center != biome) + { + return false; + } + + if (right != biome) + { + return false; + } + if (left != biome) + { + return false; + } + if (up != biome) + { + return false; + } + if (down != biome) + { + return false; + } + + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/Annotations.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/Annotations.java new file mode 100644 index 00000000..028aabe8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/Annotations.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import net.minecraftforge.fml.relauncher.Side; + +public interface Annotations +{ + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface RuntimeInterface + { + + String clazz(); + + String modID(); + + String deobfName() default ""; + + String[] altClasses() default + {}; + } + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.FIELD) + public @interface NetworkedField + { + + Side targetSide(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/ConfigManagerMicCore.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/ConfigManagerMicCore.java new file mode 100644 index 00000000..d22a9f0b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/ConfigManagerMicCore.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.io.File; + +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +public class ConfigManagerMicCore +{ + + public static boolean loaded; + + static Configuration configuration; + + public static boolean enableDebug; + + public static void init() + { + File oldCoreConfig = new File(MicdoodlePlugin.canonicalConfigDir, "Galacticraft/miccore.conf"); + File coremodConfig = new File(MicdoodlePlugin.canonicalConfigDir, "Galacticraft/MicdoodleCore.cfg"); + + if (!ConfigManagerMicCore.loaded) + { + if (oldCoreConfig.exists()) + { + ConfigManagerMicCore.configuration = ConfigManagerMicCore.handleConfigFileMove(new Configuration(oldCoreConfig), coremodConfig); + oldCoreConfig.delete(); + } + else + { + ConfigManagerMicCore.configuration = new Configuration(coremodConfig); + } + } + + ConfigManagerMicCore.configuration.load(); + ConfigManagerMicCore.syncConfig(); + } + + private static Configuration handleConfigFileMove(Configuration oldConfig, File newFile) + { + Property logDebugOutput = oldConfig.get(Configuration.CATEGORY_GENERAL, "Enable Debug messages", false); + + Configuration newConfig = new Configuration(newFile); + newConfig.get(Configuration.CATEGORY_GENERAL, "logDebugOutput", logDebugOutput.getBoolean(), "If `true` Enable debug messages during Galacticraft bytecode injection at startup"); + newConfig.save(); + + return newConfig; + } + + public static void syncConfig() + { + try + { + ConfigManagerMicCore.enableDebug = ConfigManagerMicCore.configuration.get(Configuration.CATEGORY_GENERAL, "logDebugOutput", false, "If `true` Enable debug messages during Galacticraft bytecode injection at startup").getBoolean(false); + } catch (final Exception e) + { + MicdoodlePlugin.miccoreLogger.error("Problem loading core config (\"MicdoodleCore.conf\")"); + } finally + { + if (ConfigManagerMicCore.configuration.hasChanged()) + { + ConfigManagerMicCore.configuration.save(); + } + + ConfigManagerMicCore.loaded = true; + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IIntCache.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IIntCache.java new file mode 100644 index 00000000..0c3e633b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IIntCache.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + + +public interface IIntCache +{ + +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IntCache.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IntCache.java new file mode 100644 index 00000000..2c713d0b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/IntCache.java @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import com.google.common.collect.Lists; +import java.util.List; +import micdoodle8.mods.galacticraft.core.util.MapUtil; + +public class IntCache +{ + private static int intCacheSize = 256; + private static List freeSmallArrays = Lists.newArrayList(); + private static List inUseSmallArrays = Lists.newArrayList(); + private static List freeLargeArrays = Lists.newArrayList(); + private static List inUseLargeArrays = Lists.newArrayList(); + private static int intCacheSize2 = 256; + private static List freeSmallArrays2 = Lists.newArrayList(); + private static List inUseSmallArrays2 = Lists.newArrayList(); + private static List freeLargeArrays2 = Lists.newArrayList(); + private static List inUseLargeArrays2 = Lists.newArrayList(); + + public static int[] getIntCache(int p_76445_0_) + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + return getIntCacheGC(p_76445_0_); + } + return getIntCacheVanilla(p_76445_0_); + } + + public static int[] func_76445_a(int p_76445_0_) + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + return getIntCacheGC(p_76445_0_); + } + return getIntCacheVanilla(p_76445_0_); + } + + // Obfuscated method name for use by vanilla, because this won't be + // processed by the deobfuscators + public static int[] a(int p_76445_0_) + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + return getIntCacheGC(p_76445_0_); + } + return getIntCacheVanilla(p_76445_0_); + } + + // Vanilla method needs to be synchronized + public synchronized static int[] getIntCacheVanilla(int p_76445_0_) + { + if (p_76445_0_ <= 256) + { + if (freeSmallArrays.isEmpty()) + { + int[] aint4 = new int[256]; + inUseSmallArrays.add(aint4); + return aint4; + } else + { + int[] aint3 = freeSmallArrays.remove(freeSmallArrays.size() - 1); + inUseSmallArrays.add(aint3); + return aint3; + } + } else if (p_76445_0_ > intCacheSize) + { + intCacheSize = p_76445_0_; + freeLargeArrays.clear(); + inUseLargeArrays.clear(); + int[] aint2 = new int[intCacheSize]; + inUseLargeArrays.add(aint2); + return aint2; + } else if (freeLargeArrays.isEmpty()) + { + int[] aint1 = new int[intCacheSize]; + inUseLargeArrays.add(aint1); + return aint1; + } else + { + int[] aint = freeLargeArrays.remove(freeLargeArrays.size() - 1); + inUseLargeArrays.add(aint); + return aint; + } + } + + // GC version does not need to be synchonised because we've already tested + // that it is called from + // our own background mapping thread, and those are tightly controlled so + // only one can be running + public static int[] getIntCacheGC(int size) + { + if (size <= 256) + { + if (freeSmallArrays2.isEmpty()) + { + int[] aint4 = new int[256]; + inUseSmallArrays2.add(aint4); + return aint4; + } else + { + int[] aint3 = freeSmallArrays2.remove(freeSmallArrays2.size() - 1); + inUseSmallArrays2.add(aint3); + return aint3; + } + } else if (size > intCacheSize2) + { + intCacheSize2 = size; + freeLargeArrays2.clear(); + inUseLargeArrays2.clear(); + int[] aint2 = new int[intCacheSize2]; + inUseLargeArrays2.add(aint2); + return aint2; + } else if (freeLargeArrays2.isEmpty()) + { + int[] aint1 = new int[intCacheSize2]; + inUseLargeArrays2.add(aint1); + return aint1; + } else + { + int[] aint = freeLargeArrays2.remove(freeLargeArrays2.size() - 1); + inUseLargeArrays2.add(aint); + return aint; + } + } + + public static void resetIntCache() + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + resetIntCacheGC(); + return; + } + resetIntCacheVanilla(); + } + + public static void func_76446_a() + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + resetIntCacheGC(); + return; + } + resetIntCacheVanilla(); + } + + // Obfuscated method name for use by vanilla, because this won't be + // processed by the deobfuscators + public static void a() + { + if (MapUtil.backgroundMapping(Thread.currentThread())) + { + resetIntCacheGC(); + return; + } + resetIntCacheVanilla(); + } + + // Vanilla method needs to be synchronized + public synchronized static void resetIntCacheVanilla() + { + if (!freeLargeArrays.isEmpty()) + { + freeLargeArrays.remove(freeLargeArrays.size() - 1); + } + + if (!freeSmallArrays.isEmpty()) + { + freeSmallArrays.remove(freeSmallArrays.size() - 1); + } + + freeLargeArrays.addAll(inUseLargeArrays); + freeSmallArrays.addAll(inUseSmallArrays); + inUseLargeArrays.clear(); + inUseSmallArrays.clear(); + } + + // GC version does not need to be synchonised because we've already tested + // that it is called from + // our own background mapping thread, and those are tightly controlled so + // only one can be running + public static void resetIntCacheGC() + { + if (!freeLargeArrays2.isEmpty()) + { + freeLargeArrays2.remove(freeLargeArrays2.size() - 1); + } + + if (!freeSmallArrays2.isEmpty()) + { + freeSmallArrays2.remove(freeSmallArrays2.size() - 1); + } + + freeLargeArrays2.addAll(inUseLargeArrays2); + freeSmallArrays2.addAll(inUseSmallArrays2); + inUseLargeArrays2.clear(); + inUseSmallArrays2.clear(); + } + + public static String getCacheSizes() + { + return getCacheSizesVanilla(); + } + + public static String func_85144_b() + { + return getCacheSizesVanilla(); + } + + // Obfuscated method name for use by vanilla, because this won't be + // processed by the deobfuscators + public static String b() + { + return getCacheSizesVanilla(); + } + + // No GC version of this, because we don't call it - note that vanilla + // CrashReport calls this + public synchronized static String getCacheSizesVanilla() + { + return "cache: " + freeLargeArrays.size() + ", tcache: " + freeSmallArrays.size() + ", allocated: " + inUseLargeArrays.size() + ", tallocated: " + inUseSmallArrays.size(); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformer.java new file mode 100644 index 00000000..1468a1e1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformer.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.io.IOException; +import net.minecraftforge.fml.common.asm.transformers.AccessTransformer; + +public class MicdoodleAccessTransformer extends AccessTransformer +{ + + public MicdoodleAccessTransformer() throws IOException + { + super("META-INF/accesstransformer.cfg"); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformerDeObf.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformerDeObf.java new file mode 100644 index 00000000..e0ee201b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleAccessTransformerDeObf.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.io.IOException; +import net.minecraftforge.fml.common.asm.transformers.AccessTransformer; + +public class MicdoodleAccessTransformerDeObf extends AccessTransformer +{ + + public MicdoodleAccessTransformerDeObf() throws IOException + { + super("META-INF/accesstransformer_deobf.cfg"); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleModContainer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleModContainer.java new file mode 100644 index 00000000..1f2b0894 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleModContainer.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import com.google.common.eventbus.EventBus; +import java.util.Arrays; +import micdoodle8.mods.galacticraft.core.Constants; +import net.minecraftforge.fml.common.DummyModContainer; +import net.minecraftforge.fml.common.LoadController; +import net.minecraftforge.fml.common.ModMetadata; + +public class MicdoodleModContainer extends DummyModContainer +{ + + public MicdoodleModContainer() + { + super(new ModMetadata()); + ModMetadata meta = this.getMetadata(); + meta.modId = "micdoodlecore"; + meta.version = Constants.VERSION; + meta.name = "Micdoodle8 Core"; + meta.description = "Provides core features of Micdoodle8's mods"; + meta.authorList = Arrays.asList("micdoodle8, radfast"); + meta.url = "https://www.micdoodle8.com/"; + meta.autogenerated = false; + } + + @Override + public boolean registerBus(EventBus bus, LoadController controller) + { + bus.register(this); + return true; + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodlePlugin.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodlePlugin.java new file mode 100644 index 00000000..4e2f8238 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodlePlugin.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import net.minecraft.launchwrapper.Launch; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.LoaderException; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.fml.relauncher.IFMLCallHook; +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin.MCVersion; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@IFMLLoadingPlugin.TransformerExclusions(value = +{"micdoodle8.mods.miccore"}) +@MCVersion("1.12.2") +public class MicdoodlePlugin implements IFMLLoadingPlugin, IFMLCallHook +{ + + public static Logger miccoreLogger = LogManager.getLogger("MicdoodleCore"); + public static boolean hasRegistered = false; + public static final String mcVersion = MinecraftForge.MC_VERSION; + public static File mcDir; + public static File canonicalConfigDir; + + @Override + public String[] getASMTransformerClass() + { + final String[] asmStrings = + {"micdoodle8.mods.miccore.MicdoodleTransformer"}; + + if (!MicdoodlePlugin.hasRegistered) + { + final List asm = Arrays.asList(asmStrings); + + for (final String s : asm) + { + try + { + final Class c = Class.forName(s); + + if (c != null) + { + miccoreLogger.info("Successfully Registered Transformer"); + } + } + catch (final Exception ex) + { + miccoreLogger.error("Error while running transformer " + s); + return null; + } + } + + MicdoodlePlugin.hasRegistered = true; + } + + return asmStrings; + } + + @Override + public String getModContainerClass() + { + return "micdoodle8.mods.miccore.MicdoodleModContainer"; + } + + @Override + public String getSetupClass() + { + return "micdoodle8.mods.miccore.MicdoodlePlugin"; + } + + @Override + public Void call() throws Exception + { + return null; + } + + private static Constructor sleepCancelledConstructor; + private static Constructor orientCameraConstructor; + private static String eventContainerClass = "micdoodle8.mods.galacticraft.core.event.EventHandlerGC"; + + public static void onSleepCancelled() + { + try + { + if (MicdoodlePlugin.sleepCancelledConstructor == null) + { + MicdoodlePlugin.sleepCancelledConstructor = Class.forName(MicdoodlePlugin.eventContainerClass + "$SleepCancelledEvent").getConstructor(); + } + + MinecraftForge.EVENT_BUS.post((Event) MicdoodlePlugin.sleepCancelledConstructor.newInstance()); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + public static void orientCamera() + { + try + { + if (MicdoodlePlugin.orientCameraConstructor == null) + { + MicdoodlePlugin.orientCameraConstructor = Class.forName(MicdoodlePlugin.eventContainerClass + "$OrientCameraEvent").getConstructor(); + } + + MinecraftForge.EVENT_BUS.post((Event) MicdoodlePlugin.orientCameraConstructor.newInstance()); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + @Override + public String getAccessTransformerClass() + { + boolean deobfuscated = true; + + try + { + deobfuscated = Launch.classLoader.getClassBytes("net.minecraft.world.World") != null; + } + catch (final Exception e) + {} + + if (deobfuscated) + { + return "micdoodle8.mods.miccore.MicdoodleAccessTransformerDeObf"; + } + return "micdoodle8.mods.miccore.MicdoodleAccessTransformer"; + } + + @Override + public void injectData(Map data) + { + if (data.containsKey("mcLocation")) + { + MicdoodlePlugin.mcDir = (File) data.get("mcLocation"); + File configDir = new File(mcDir, "config"); + String canonicalConfigPath; + try + { + canonicalConfigPath = configDir.getCanonicalPath(); + canonicalConfigDir = configDir.getCanonicalFile(); + } + catch (IOException ioe) + { + throw new LoaderException(ioe); + } + if (!canonicalConfigDir.exists()) + { + miccoreLogger.debug("No config directory found, creating one: %s", canonicalConfigPath); + boolean dirMade = canonicalConfigDir.mkdir(); + + if (!dirMade) + { + miccoreLogger.error("Unable to create the config directory %s", canonicalConfigPath); + throw new LoaderException(); + } + + miccoreLogger.info("Config directory created successfully"); + } + + ConfigManagerMicCore.init(); + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleTransformer.java b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleTransformer.java new file mode 100644 index 00000000..277bb903 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/java/micdoodle8/mods/miccore/MicdoodleTransformer.java @@ -0,0 +1,1838 @@ +/* + * Copyright (c) 2023 Team Galacticraft + * + * Licensed under the MIT license. + * See LICENSE file in the project root for details. + */ + +package micdoodle8.mods.miccore; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import net.minecraft.launchwrapper.Launch; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; +import net.minecraftforge.fml.relauncher.FMLInjectionData; +import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.AnnotationNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.InsnNode; +import org.objectweb.asm.tree.IntInsnNode; +import org.objectweb.asm.tree.LdcInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.tree.TypeInsnNode; +import org.objectweb.asm.tree.VarInsnNode; + +@IFMLLoadingPlugin.TransformerExclusions(value = +{"micdoodle8.mods.miccore"}) +public class MicdoodleTransformer implements net.minecraft.launchwrapper.IClassTransformer +{ + + HashMap nodemap = new HashMap<>(); + private boolean deobfuscated = true; + private boolean optifinePresent; + private boolean isServer; + private boolean playerApiActive; + private String mcVersion; + + private String nameForgeHooksClient; + private String namePlayerList; + private String namePlayerController; + private String nameEntityLiving; + private String nameEntityItem; + private String nameEntityRenderer; + private String nameItemRenderer; + private String nameGuiSleep; + private String nameParticleManager; + private String nameNetHandlerPlay; + private String nameRenderGlobal; + private String nameRenderManager; + private String nameEntity; + private String nameChunkGeneratorOverworld; + private String nameChunk; + private String nameEntityArrow; + private String nameEntityGolem; + private String nameWorld; + private String nameModelBiped; + private String nameRRCB; + private String nameRenderChunk; + + private static final String KEY_CLASS_PLAYER_MP = "PlayerMP"; + private static final String KEY_CLASS_WORLD = "worldClass"; + private static final String KEY_PLAYER_LIST = "confManagerClass"; + private static final String KEY_CLASS_GAME_PROFILE = "gameProfileClass"; + private static final String KEY_CLASS_INTERACTION_MANAGER = "interactionManagerClass"; + private static final String KEY_CLASS_PLAYER_CONTROLLER = "playerControllerClass"; + private static final String KEY_CLASS_PLAYER_SP = "playerClient"; + private static final String KEY_CLASS_STAT_FILE_WRITER = "statFileWriterClass"; + private static final String KEY_CLASS_RECIPE_BOOK = "recipeBookClass"; + private static final String KEY_CLASS_NET_HANDLER_PLAY = "netHandlerPlayClientClass"; + private static final String KEY_CLASS_ENTITY_LIVING = "entityLivingClass"; + private static final String KEY_CLASS_ENTITY_ITEM = "entityItemClass"; + private static final String KEY_CLASS_ENTITY_RENDERER = "entityRendererClass"; + private static final String KEY_CLASS_RENDER_GLOBAL = "renderGlobalClass"; + private static final String KEY_CLASS_RENDER_MANAGER = "renderManagerClass"; + private static final String KEY_CLASS_TESSELLATOR = "tessellatorClass"; + private static final String KEY_CLASS_CONTAINER_PLAYER = "containerPlayer"; + private static final String KEY_CLASS_MINECRAFT = "minecraft"; + private static final String KEY_CLASS_SESSION = "session"; + private static final String KEY_CLASS_GUI_SCREEN = "guiScreen"; + private static final String KEY_CLASS_ITEM_RENDERER = "itemRendererClass"; + private static final String KEY_CLASS_VEC3 = "vecClass"; + private static final String KEY_CLASS_ENTITY = "entityClass"; + private static final String KEY_CLASS_TILEENTITY = "tileEntityClass"; + private static final String KEY_CLASS_GUI_SLEEP = "guiSleepClass"; + private static final String KEY_CLASS_PARTICLE_MANAGER = "effectRendererClass"; + private static final String KEY_CLASS_FORGE_HOOKS_CLIENT = "forgeHooks"; + private static final String KEY_CLASS_CUSTOM_PLAYER_MP = "customPlayerMP"; + private static final String KEY_CLASS_CUSTOM_PLAYER_SP = "customPlayerSP"; + private static final String KEY_CLASS_CUSTOM_OTHER_PLAYER = "customEntityOtherPlayer"; + private static final String KEY_CLASS_PACKET_SPAWN_PLAYER = "packetSpawnPlayer"; + private static final String KEY_CLASS_ENTITY_OTHER_PLAYER = "entityOtherPlayer"; + private static final String KEY_CLASS_SERVER = "minecraftServer"; + private static final String KEY_CLASS_WORLD_SERVER = "worldServer"; + private static final String KEY_CLASS_WORLD_CLIENT = "worldClient"; + private static final String KEY_CLASS_CHUNK_PROVIDER_OVERWORLD = "chunkProviderServer"; + private static final String KEY_CLASS_ICHUNKPROVIDER = "IChunkProvider"; + private static final String KEY_CLASS_ICHUNKGENERATOR = "IChunkGenerator"; + private static final String KEY_CLASS_CHUNK = "chunkClass"; + private static final String KEY_NET_HANDLER_LOGIN_SERVER = "netHandlerLoginServer"; + private static final String KEY_CLASS_ENTITY_ARROW = "entityArrow"; + + private static final String KEY_CLASS_ENTITYGOLEM = "entityGolem"; + private static final String KEY_CLASS_IBLOCKACCESS = "iBlockAccess"; + private static final String KEY_CLASS_BLOCK = "blockClass"; + private static final String KEY_CLASS_BLOCKPOS = "blockPos"; + private static final String KEY_CLASS_IBLOCKSTATE = "blockState"; + private static final String KEY_CLASS_ICAMERA = "icameraClass"; + private static final String KEY_CLASS_INTCACHE = "intCache"; + private static final String KEY_CLASS_MODEL_BIPED = "modelBiped"; + private static final String KEY_CLASS_RRCB = "rrcb"; + private static final String KEY_CLASS_VERTEX_BUFFER = "vertexBuffer"; + private static final String KEY_CLASS_CCTG = "cctg"; + private static final String KEY_CLASS_RENDER_CHUNK = "renderChunk"; + private static final String KEY_CLASS_DAMAGE_SOURCE = "damageSource"; + + private static final String KEY_FIELD_CHUNK_XPOS = "chunkXPos"; + private static final String KEY_FIELD_CHUNK_ZPOS = "chunkZPos"; + private static final String KEY_FIELD_CHUNK_WORLD = "world"; + private static final String KEY_FIELD_ENTITY_RENDERER_RAINCOUNT = "entRenderRaincount"; + + private static final String KEY_METHOD_CREATE_PLAYER = "createPlayerMethod"; + private static final String KEY_METHOD_RESPAWN_PLAYER = "respawnPlayerMethod"; + private static final String KEY_METHOD_CREATE_CLIENT_PLAYER = "createClientPlayerMethod"; + private static final String KEY_METHOD_MOVE_ENTITY = "moveEntityMethod"; + private static final String KEY_METHOD_ON_UPDATE = "onUpdateMethod"; + private static final String KEY_METHOD_UPDATE_LIGHTMAP = "updateLightmapMethod"; + private static final String KEY_METHOD_RENDER_OVERLAYS = "renderOverlaysMethod"; + private static final String KEY_METHOD_UPDATE_FOG_COLOR = "updateFogColorMethod"; + private static final String KEY_METHOD_GET_FOG_COLOR = "getFogColorMethod"; + private static final String KEY_METHOD_GET_SKY_COLOR = "getSkyColorMethod"; + private static final String KEY_METHOD_WAKE_ENTITY = "wakeEntityMethod"; + private static final String KEY_METHOD_BED_ORIENT_CAMERA = "orientBedCamera"; + private static final String KEY_METHOD_RENDER_PARTICLES = "renderParticlesMethod"; + private static final String KEY_METHOD_CUSTOM_PLAYER_MP = "customPlayerMPConstructor"; + private static final String KEY_METHOD_CUSTOM_PLAYER_SP = "customPlayerSPConstructor"; + private static final String KEY_METHOD_HANDLE_SPAWN_PLAYER = "handleSpawnPlayerMethod"; + private static final String KEY_METHOD_ORIENT_CAMERA = "orientCamera"; + private static final String KEY_METHOD_ADD_RAIN = "addRainParticles"; + private static final String KEY_METHOD_CAN_RENDER_FIRE = "canRenderOnFire"; + private static final String KEY_METHOD_POPULATE_CHUNK = "populateChunk"; + private static final String KEY_METHOD_RENDER_MODEL = "renderModel"; + private static final String KEY_METHOD_RAIN_STRENGTH = "getRainStrength"; + private static final String KEY_METHOD_REGISTEROF = "registerOF"; + private static final String KEY_METHOD_SETUP_TERRAIN = "setupTerrain"; + private static final String KEY_METHOD_GET_EYE_HEIGHT = "getEyeHeight"; + private static final String KEY_METHOD_ENABLE_ALPHA = "enableAlphaMethod"; + private static final String KEY_METHOD_VALIDATE = "teValidate"; + private static final String KEY_METHOD_BIPED_SET_ROTATION = "bipedSetRotation"; + private static final String KEY_METHOD_RRCB_GET_WORLD_RENDERER = "getWorldRenderer"; + private static final String KEY_METHOD_REBUILD_CHUNK = "rebuildChunk"; + private static final String KEY_METHOD_ATTACK_ENTITY_FROM = "attackEntityFrom"; + + private static final String CLASS_RUNTIME_INTERFACE = "micdoodle8/mods/miccore/Annotations$RuntimeInterface"; + private static final String CLASS_MICDOODLE_PLUGIN = "micdoodle8/mods/miccore/MicdoodlePlugin"; + private static final String CLASS_TRANSFORMER_HOOKS = "micdoodle8/mods/galacticraft/core/TransformerHooks"; + private static final String CLASS_INTCACHE_VARIANT = "micdoodle8/mods/miccore/IntCache"; + private static final String CLASS_IENTITYBREATHABLE = "micdoodle8/mods/galacticraft/api/entity/IEntityBreathable"; + private static final String CLASS_SYNCMOD_CLONEPLAYER = "sync/common/tileentity/TileEntityDualVertical"; + private static final String CLASS_RENDERPLAYEROF = "RenderPlayerOF"; + private static final String CLASS_IFORGEARMOR = "net/minecraftforge/common/ISpecialArmor$ArmorProperties"; + private static final String CLASS_MODEL_BIPED_GC = "micdoodle8/mods/galacticraft/core/client/model/ModelBipedGC"; + + private static int operationCount = 0; + private static int injectionCount = 0; + + public MicdoodleTransformer() + { + this.mcVersion = (String) FMLInjectionData.data()[4]; + + try + { + deobfuscated = Launch.classLoader.getClassBytes("net.minecraft.world.World") != null; + optifinePresent = Launch.classLoader.getClassBytes("optifine.OptiFineClassTransformer") != null; + playerApiActive = Launch.classLoader.getClassBytes("api.player.forge.PlayerAPITransformer") != null && !deobfuscated; + } catch (final Exception e) + { + } + + Launch.classLoader.addTransformerExclusion(CLASS_IENTITYBREATHABLE.replace('/', '.')); + + if (this.mcVersionMatches("[1.12.2]")) + { + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PLAYER_MP, new ObfuscationEntry("net/minecraft/entity/player/EntityPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_WORLD, new ObfuscationEntry("net/minecraft/world/World")); + this.nodemap.put(MicdoodleTransformer.KEY_PLAYER_LIST, new ObfuscationEntry("net/minecraft/server/management/PlayerList")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_GAME_PROFILE, new ObfuscationEntry("com/mojang/authlib/GameProfile")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_INTERACTION_MANAGER, new ObfuscationEntry("net/minecraft/server/management/PlayerInteractionManager")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PLAYER_CONTROLLER, new ObfuscationEntry("net/minecraft/client/multiplayer/PlayerControllerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PLAYER_SP, new ObfuscationEntry("net/minecraft/client/entity/EntityPlayerSP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_STAT_FILE_WRITER, new ObfuscationEntry("net/minecraft/stats/StatisticsManager")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RECIPE_BOOK, new ObfuscationEntry("net/minecraft/stats/RecipeBook")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_NET_HANDLER_PLAY, new ObfuscationEntry("net/minecraft/client/network/NetHandlerPlayClient")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING, new ObfuscationEntry("net/minecraft/entity/EntityLivingBase")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_ITEM, new ObfuscationEntry("net/minecraft/entity/item/EntityItem")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_RENDERER, new ObfuscationEntry("net/minecraft/client/renderer/EntityRenderer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RENDER_GLOBAL, new ObfuscationEntry("net/minecraft/client/renderer/RenderGlobal")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_TESSELLATOR, new ObfuscationEntry("net/minecraft/client/renderer/Tessellator")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RENDER_MANAGER, new ObfuscationEntry("net/minecraft/client/renderer/entity/RenderManager")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CONTAINER_PLAYER, new ObfuscationEntry("net/minecraft/inventory/ContainerPlayer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_MINECRAFT, new ObfuscationEntry("net/minecraft/client/Minecraft")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_SESSION, new ObfuscationEntry("net/minecraft/util/Session")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_GUI_SCREEN, new ObfuscationEntry("net/minecraft/client/gui/GuiScreen")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ITEM_RENDERER, new ObfuscationEntry("net/minecraft/client/renderer/ItemRenderer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_VEC3, new ObfuscationEntry("net/minecraft/util/math/Vec3d")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY, new ObfuscationEntry("net/minecraft/entity/Entity")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_GUI_SLEEP, new ObfuscationEntry("net/minecraft/client/gui/GuiSleepMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PARTICLE_MANAGER, new ObfuscationEntry("net/minecraft/client/particle/ParticleManager")); + + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_FORGE_HOOKS_CLIENT, new ObfuscationEntry("net/minecraftforge/client/ForgeHooksClient")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP, new ObfuscationEntry("micdoodle8/mods/galacticraft/core/entities/player/GCEntityPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_SP, new ObfuscationEntry("micdoodle8/mods/galacticraft/core/entities/player/GCEntityClientPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CUSTOM_OTHER_PLAYER, new ObfuscationEntry("micdoodle8/mods/galacticraft/core/entities/player/GCEntityOtherPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_PACKET_SPAWN_PLAYER, new ObfuscationEntry("net/minecraft/network/play/server/SPacketSpawnPlayer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_OTHER_PLAYER, new ObfuscationEntry("net/minecraft/client/entity/EntityOtherPlayerMP")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_SERVER, new ObfuscationEntry("net/minecraft/server/MinecraftServer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_WORLD_SERVER, new ObfuscationEntry("net/minecraft/world/WorldServer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_WORLD_CLIENT, new ObfuscationEntry("net/minecraft/client/multiplayer/WorldClient")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_TILEENTITY, new ObfuscationEntry("net/minecraft/tileentity/TileEntity")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CHUNK_PROVIDER_OVERWORLD, new ObfuscationEntry("net/minecraft/world/gen/ChunkGeneratorOverworld")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ICHUNKPROVIDER, new ObfuscationEntry("net/minecraft/world/chunk/IChunkProvider")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ICHUNKGENERATOR, new ObfuscationEntry("net/minecraft/world/gen/IChunkGenerator")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CHUNK, new ObfuscationEntry("net/minecraft/world/chunk/Chunk")); + this.nodemap.put(MicdoodleTransformer.KEY_NET_HANDLER_LOGIN_SERVER, new ObfuscationEntry("net/minecraft/server/network/NetHandlerLoginServer")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITY_ARROW, new ObfuscationEntry("net/minecraft/entity/projectile/EntityArrow")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ENTITYGOLEM, new ObfuscationEntry("net/minecraft/entity/monster/EntityGolem")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_IBLOCKACCESS, new ObfuscationEntry("net/minecraft/world/IBlockAccess")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_BLOCK, new ObfuscationEntry("net/minecraft/block/Block")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_BLOCKPOS, new ObfuscationEntry("net/minecraft/util/math/BlockPos")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_IBLOCKSTATE, new ObfuscationEntry("net/minecraft/block/state/IBlockState")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_ICAMERA, new ObfuscationEntry("net/minecraft/client/renderer/culling/ICamera")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_INTCACHE, new ObfuscationEntry("net/minecraft/world/gen/layer/IntCache")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_MODEL_BIPED, new ObfuscationEntry("net/minecraft/client/model/ModelBiped")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RRCB, new ObfuscationEntry("net/minecraft/client/renderer/RegionRenderCacheBuilder")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_VERTEX_BUFFER, new ObfuscationEntry("net/minecraft/client/renderer/BufferBuilder")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_CCTG, new ObfuscationEntry("net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_RENDER_CHUNK, new ObfuscationEntry("net/minecraft/client/renderer/chunk/RenderChunk")); + this.nodemap.put(MicdoodleTransformer.KEY_CLASS_DAMAGE_SOURCE, new ObfuscationEntry("net/minecraft/util/DamageSource", "ur")); + this.nodemap.put(MicdoodleTransformer.KEY_FIELD_CHUNK_XPOS, new FieldObfuscationEntry("x", "b")); + this.nodemap.put(MicdoodleTransformer.KEY_FIELD_CHUNK_ZPOS, new FieldObfuscationEntry("z", "c")); + this.nodemap.put(MicdoodleTransformer.KEY_FIELD_CHUNK_WORLD, new FieldObfuscationEntry("world", "k")); + this.nodemap.put(MicdoodleTransformer.KEY_FIELD_ENTITY_RENDERER_RAINCOUNT, new FieldObfuscationEntry("rendererUpdateCount", "m")); + + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CREATE_PLAYER, new MethodObfuscationEntry("createPlayerForUser", "g", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_GAME_PROFILE) + ";)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RESPAWN_PLAYER, new MethodObfuscationEntry("recreatePlayerEntity", "a", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP) + ";IZ)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CREATE_CLIENT_PLAYER, + new MethodObfuscationEntry("createPlayer", "a", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_STAT_FILE_WRITER) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_RECIPE_BOOK) + ";)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_SP) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_MOVE_ENTITY, new MethodObfuscationEntry("travel", "a", "(FFF)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ON_UPDATE, new MethodObfuscationEntry("onUpdate", "B_", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_UPDATE_LIGHTMAP, new MethodObfuscationEntry("updateLightmap", "g", "(F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RENDER_OVERLAYS, new MethodObfuscationEntry("renderOverlays", "b", "(F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_UPDATE_FOG_COLOR, new MethodObfuscationEntry("updateFogColor", "h", "(F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_GET_FOG_COLOR, new MethodObfuscationEntry("getFogColor", "f", "(F)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VEC3) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_GET_SKY_COLOR, new MethodObfuscationEntry("getSkyColor", "a", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";F)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VEC3) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_WAKE_ENTITY, new MethodObfuscationEntry("wakeFromSleep", "a", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_BED_ORIENT_CAMERA, + new MethodObfuscationEntry("orientBedCamera", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_IBLOCKACCESS) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_BLOCKPOS) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_IBLOCKSTATE) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RENDER_PARTICLES, + new MethodObfuscationEntry("renderParticles", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP, + new MethodObfuscationEntry("", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_SERVER) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD_SERVER) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_GAME_PROFILE) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_INTERACTION_MANAGER) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_SP, + new MethodObfuscationEntry("", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_MINECRAFT) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_NET_HANDLER_PLAY) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_STAT_FILE_WRITER) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_RECIPE_BOOK) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_HANDLE_SPAWN_PLAYER, + new MethodObfuscationEntry("handleSpawnPlayer", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PACKET_SPAWN_PLAYER) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ORIENT_CAMERA, new MethodObfuscationEntry("orientCamera", "f", "(F)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ADD_RAIN, new MethodObfuscationEntry("addRainParticles", "q", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_CAN_RENDER_FIRE, new MethodObfuscationEntry("canRenderOnFire", "bl", "()Z")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_POPULATE_CHUNK, + new MethodObfuscationEntry("populate", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ICHUNKGENERATOR) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RENDER_MODEL, + new MethodObfuscationEntry("renderModel", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";FFFFFF)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RAIN_STRENGTH, new MethodObfuscationEntry("getRainStrength", "j", "(F)F")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_REGISTEROF, new MethodObfuscationEntry("register", "register", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_SETUP_TERRAIN, new MethodObfuscationEntry("setupTerrain", "a", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";DL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ICAMERA) + ";IZ)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_GET_EYE_HEIGHT, new MethodObfuscationEntry("getEyeHeight", "by", "()F")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ENABLE_ALPHA, new MethodObfuscationEntry("enableAlpha", "e", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_VALIDATE, new MethodObfuscationEntry("validate", "func_145829_t", "()V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_BIPED_SET_ROTATION, + new MethodObfuscationEntry("setRotationAngles", "a", "(FFFFFFL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_RRCB_GET_WORLD_RENDERER, + new MethodObfuscationEntry("getWorldRendererByLayerId", "a", "(I)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VERTEX_BUFFER) + ";")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_REBUILD_CHUNK, + new MethodObfuscationEntry("rebuildChunk", "b", "(FFFL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_CCTG) + ";)V")); + this.nodemap.put(MicdoodleTransformer.KEY_METHOD_ATTACK_ENTITY_FROM, + new MethodObfuscationEntry("attackEntityFrom", "a", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_DAMAGE_SOURCE) + ";F)Z")); + } + + try + { + isServer = Launch.classLoader.getClassBytes(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_RENDER_GLOBAL)) == null; + } catch (Exception e) + { + e.printStackTrace(); + } + } + + @Override + public byte[] transform(String name, String transformedName, byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (name.startsWith("micdoodle8")) + { + if (name.equals("micdoodle8.mods.galacticraft.core.energy.tile.TileCableIC2Sealed")) + { + bytes = this.transformTileCableIC2Sealed(bytes); + } + + return this.transformCustomAnnotations(bytes); + } else + { + if (this.nameForgeHooksClient == null) + { + this.nameForgeHooksClient = this.getName(MicdoodleTransformer.KEY_CLASS_FORGE_HOOKS_CLIENT); + if (this.deobfuscated) + { + this.populateNamesDeObf(); + } else + { + this.populateNamesObf(); + } + } + String testName = name.replace('.', '/'); + if (testName.equals(this.nameForgeHooksClient)) + { + return this.transformForgeHooks(bytes); + } + + if (testName.equals(MicdoodleTransformer.CLASS_IFORGEARMOR)) + { + return this.transformForgeArmor(bytes); + } + + if (testName.equals(MicdoodleTransformer.CLASS_SYNCMOD_CLONEPLAYER)) + { + return this.transformSyncMod(bytes); + } + + if (testName.equals(MicdoodleTransformer.CLASS_RENDERPLAYEROF)) + { + return this.transformOptifine(bytes); + } + + if (testName.equals("ic2/core/block/TileEntityBlock")) + { + ClassNode node = this.startInjection(bytes); + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_VALIDATE); + method.access &= ~Opcodes.ACC_FINAL; + return this.finishInjection(node); + } + + if (testName.equals("appeng/worldgen/MeteoritePlacer")) + { + return this.transformAEMeteorite(bytes); + } + + bytes = this.transformRefs(bytes); + + if (testName.length() <= 3 || this.deobfuscated) + { + return this.transformVanilla(testName, bytes); + } + } + + return bytes; + } + + private void populateNamesDeObf() + { + this.namePlayerList = this.getName(MicdoodleTransformer.KEY_PLAYER_LIST); + this.namePlayerController = this.getName(MicdoodleTransformer.KEY_CLASS_PLAYER_CONTROLLER); + this.nameEntityLiving = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING); + this.nameEntityItem = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY_ITEM); + this.nameEntityRenderer = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY_RENDERER); + this.nameItemRenderer = this.getName(MicdoodleTransformer.KEY_CLASS_ITEM_RENDERER); + this.nameGuiSleep = this.getName(MicdoodleTransformer.KEY_CLASS_GUI_SLEEP); + this.nameParticleManager = this.getName(MicdoodleTransformer.KEY_CLASS_PARTICLE_MANAGER); + this.nameNetHandlerPlay = this.getName(MicdoodleTransformer.KEY_CLASS_NET_HANDLER_PLAY); + this.nameRenderGlobal = this.getName(MicdoodleTransformer.KEY_CLASS_RENDER_GLOBAL); + this.nameRenderManager = this.getName(MicdoodleTransformer.KEY_CLASS_RENDER_MANAGER); + this.nameEntity = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY); + this.nameChunkGeneratorOverworld = this.getName(MicdoodleTransformer.KEY_CLASS_CHUNK_PROVIDER_OVERWORLD); + this.nameChunk = this.getName(MicdoodleTransformer.KEY_CLASS_CHUNK); + this.nameEntityArrow = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITY_ARROW); + this.nameEntityGolem = this.getName(MicdoodleTransformer.KEY_CLASS_ENTITYGOLEM); + this.nameWorld = this.getName(MicdoodleTransformer.KEY_CLASS_WORLD); + this.nameModelBiped = this.getName(MicdoodleTransformer.KEY_CLASS_MODEL_BIPED); + this.nameRRCB = this.getName(MicdoodleTransformer.KEY_CLASS_RRCB); + this.nameRenderChunk = this.getName(MicdoodleTransformer.KEY_CLASS_RENDER_CHUNK); + } + + private void populateNamesObf() + { + this.namePlayerList = this.nodemap.get(MicdoodleTransformer.KEY_PLAYER_LIST).obfuscatedName; + this.namePlayerController = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_PLAYER_CONTROLLER).obfuscatedName; + this.nameEntityLiving = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING).obfuscatedName; + this.nameEntityItem = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY_ITEM).obfuscatedName; + this.nameEntityRenderer = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY_RENDERER).obfuscatedName; + this.nameItemRenderer = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ITEM_RENDERER).obfuscatedName; + this.nameGuiSleep = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_GUI_SLEEP).obfuscatedName; + this.nameParticleManager = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_PARTICLE_MANAGER).obfuscatedName; + this.nameNetHandlerPlay = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_NET_HANDLER_PLAY).obfuscatedName; + this.nameRenderGlobal = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_RENDER_GLOBAL).obfuscatedName; + this.nameRenderManager = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_RENDER_MANAGER).obfuscatedName; + this.nameEntity = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY).obfuscatedName; + this.nameChunkGeneratorOverworld = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_CHUNK_PROVIDER_OVERWORLD).obfuscatedName; + this.nameChunk = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_CHUNK).obfuscatedName; + this.nameEntityArrow = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITY_ARROW).obfuscatedName; + this.nameEntityGolem = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_ENTITYGOLEM).obfuscatedName; + this.nameWorld = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_WORLD).obfuscatedName; + this.nameModelBiped = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_MODEL_BIPED).obfuscatedName; + this.nameRRCB = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_RRCB).obfuscatedName; + this.nameRenderChunk = this.nodemap.get(MicdoodleTransformer.KEY_CLASS_RENDER_CHUNK).obfuscatedName; + } + + private byte[] transformVanilla(String testName, byte[] bytes) + { + if (testName.equals(this.namePlayerList)) + { + return this.transformPlayerList(bytes); + } else if (testName.equals(this.namePlayerController)) + { + return this.transformPlayerController(bytes); + } else if (testName.equals(this.nameEntityLiving)) + { + return this.transformEntityLiving(bytes); + } else if (testName.equals(this.nameEntityItem)) + { + return this.transformEntityItem(bytes); + } else if (testName.equals(this.nameEntityRenderer)) + { + return this.transformEntityRenderer(bytes); + } else if (testName.equals(this.nameItemRenderer)) + { + return this.transformItemRenderer(bytes); + } else if (testName.equals(this.nameGuiSleep)) + { + return this.transformGuiSleep(bytes); + } else if (testName.equals(this.nameParticleManager)) + { + return this.transformParticleManager(bytes); + } else if (testName.equals(this.nameNetHandlerPlay)) + { + return this.transformNetHandlerPlay(bytes); + } else if (testName.equals(this.nameRenderGlobal)) + { + return this.transformRenderGlobal(bytes); + } else if (testName.equals(this.nameEntity)) + { + return this.transformEntityClass(bytes); + } else if (testName.equals(this.nameChunk)) + { + return this.transformChunkClass(bytes); + } else if (testName.equals(this.nameEntityArrow)) + { + return this.transformEntityArrow(bytes); + } else if (testName.equals(this.nameEntityGolem)) + { + return this.transformEntityGolem(bytes); + } else if (testName.equals(this.nameWorld)) + { + return this.transformWorld(bytes); + } else if (testName.equals(this.nameModelBiped)) + { + return this.transformModelBiped(bytes); + } else if (testName.equals(this.nameRRCB)) + { + return this.transformRRCB(bytes); + } else if (testName.equals(this.nameRenderChunk)) + { + return this.transformRenderChunk(bytes); + } + + return bytes; + } + + public byte[] transformChunkClass(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode populateMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_POPULATE_CHUNK); + + if (populateMethod != null) + { + for (int count = populateMethod.instructions.size() - 1; count > 0; count--) + { + final AbstractInsnNode list = populateMethod.instructions.get(count); + + if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.getOpcode() == Opcodes.INVOKESTATIC && nodeAt.owner.contains("GameRegistry")) + { + final MethodInsnNode hook = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "otherModGenerate", + "(IIL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ICHUNKGENERATOR) + ";L" + + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ICHUNKPROVIDER) + ";)V", + false); + populateMethod.instructions.set(nodeAt, hook); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + } + return this.finishInjection(node); + } + + /** + * replaces EntityPlayerMP initialization with custom ones + */ + public byte[] transformPlayerList(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + boolean playerAPI = this.isPlayerApiActive(); + MicdoodleTransformer.operationCount = playerAPI ? 0 : 4; + + if (!playerAPI) + { + MethodNode createPlayerMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_CREATE_PLAYER); + MethodNode respawnPlayerMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RESPAWN_PLAYER); + + if (createPlayerMethod != null) + { + for (int count = 0; count < createPlayerMethod.instructions.size(); count++) + { + final AbstractInsnNode list = createPlayerMethod.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + if (nodeAt.getOpcode() != Opcodes.CHECKCAST && nodeAt.desc.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP)); + + createPlayerMethod.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.owner.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP)) && nodeAt.getOpcode() == Opcodes.INVOKESPECIAL) + { + createPlayerMethod.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP), + this.getName(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), this.getDescDynamic(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), false)); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + if (respawnPlayerMethod != null) + { + for (int count = 0; count < respawnPlayerMethod.instructions.size(); count++) + { + final AbstractInsnNode list = respawnPlayerMethod.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + if (nodeAt.getOpcode() != Opcodes.CHECKCAST && nodeAt.desc.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP)); + + respawnPlayerMethod.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.name.equals("") && nodeAt.owner.equals(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + respawnPlayerMethod.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP), + this.getName(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), this.getDescDynamic(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), false)); + + MicdoodleTransformer.injectionCount++; + } + } + } + } + } + + return this.finishInjection(node); + } + + /** + * replaces EntityPlayerMP initialization with custom one in Sync Mod + */ + public byte[] transformSyncMod(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + boolean playerAPI = this.isPlayerApiActive(); + MicdoodleTransformer.operationCount = playerAPI ? 0 : 2; + + if (!playerAPI) + { + MethodNode respawnPlayerMethod = this.getMethodNoDesc(node, "func_145845_h"); + + if (respawnPlayerMethod != null) + { + for (int count = 0; count < respawnPlayerMethod.instructions.size(); count++) + { + final AbstractInsnNode list = respawnPlayerMethod.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + // Deobfuscated name for EntityPlayerMP, because this is + // in a mod + if (nodeAt.getOpcode() == Opcodes.NEW && nodeAt.desc.contains(this.getName(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP)); + + respawnPlayerMethod.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + // Deobfuscated name for EntityPlayerMP, because this is + // in a mod + if (nodeAt.name.equals("") && nodeAt.owner.equals(this.getName(MicdoodleTransformer.KEY_CLASS_PLAYER_MP))) + { + respawnPlayerMethod.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_MP), + this.getName(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), this.getDescDynamic(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_MP), false)); + + MicdoodleTransformer.injectionCount++; + } + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformPlayerController(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + boolean playerAPI = this.isPlayerApiActive(); + MicdoodleTransformer.operationCount = playerAPI ? 0 : 2; + + if (!playerAPI) + { + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_CREATE_CLIENT_PLAYER); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + if (nodeAt.desc.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_SP))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_SP)); + + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.name.equals("") && nodeAt.owner.equals(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_PLAYER_SP))) + { + method.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getName(MicdoodleTransformer.KEY_CLASS_CUSTOM_PLAYER_SP), + this.getName(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_SP), this.getDescDynamic(MicdoodleTransformer.KEY_METHOD_CUSTOM_PLAYER_SP), false)); + MicdoodleTransformer.injectionCount++; + } + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityLiving(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_MOVE_ENTITY); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list instanceof LdcInsnNode) + { + final LdcInsnNode nodeAt = (LdcInsnNode) list; + + if (nodeAt.cst.equals(0.08D)) + { + final VarInsnNode beforeNode = new VarInsnNode(Opcodes.ALOAD, 0); + final MethodInsnNode overwriteNode = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getGravityForEntity", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)D", false); + + method.instructions.insertBefore(nodeAt, beforeNode); + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + method = this.getMethod(node, KEY_METHOD_ATTACK_ENTITY_FROM); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + AbstractInsnNode test = method.instructions.get(count); + + if (test.getOpcode() == Opcodes.FCONST_2) + { + test = method.instructions.get(count + 1); + if (test.getOpcode() == Opcodes.FMUL) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "armorDamageHookF", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";)F", false)); + toAdd.add(new InsnNode(Opcodes.FMUL)); + method.instructions.insertBefore(method.instructions.get(count + 2), toAdd); + MicdoodleTransformer.injectionCount++; + } + } + + if (test instanceof LdcInsnNode) + { + if (((LdcInsnNode) test).cst.equals(4.0F)) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "armorDamageHookF", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";)F", false)); + toAdd.add(new InsnNode(Opcodes.FMUL)); + method.instructions.insertBefore(method.instructions.get(count + 2), toAdd); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityItem(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_ON_UPDATE); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list instanceof LdcInsnNode) + { + final LdcInsnNode nodeAt = (LdcInsnNode) list; + + if (nodeAt.cst.equals(0.03999999910593033D)) + { + final VarInsnNode beforeNode = new VarInsnNode(Opcodes.ALOAD, 0); + final MethodInsnNode overwriteNode = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getItemGravity", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_ITEM) + ";)D", false); + + method.instructions.insertBefore(nodeAt, beforeNode); + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityRenderer(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = this.optifinePresent ? 6 : 7; + + MethodNode updateLightMapMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_UPDATE_LIGHTMAP); + MethodNode updateFogColorMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_UPDATE_FOG_COLOR); + MethodNode orientCameraMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_ORIENT_CAMERA); + MethodNode addRainMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_ADD_RAIN); + + if (orientCameraMethod != null) + { + final InsnList nodesToAdd = new InsnList(); + + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "orientCamera", "(F)V", false)); + orientCameraMethod.instructions.insertBefore(orientCameraMethod.instructions.get(orientCameraMethod.instructions.size() - 3), nodesToAdd); + MicdoodleTransformer.injectionCount++; + + for (int count = 0; count < orientCameraMethod.instructions.size(); count++) + { + final AbstractInsnNode list = orientCameraMethod.instructions.get(count); + + if (list instanceof VarInsnNode) + { + VarInsnNode varNode = (VarInsnNode) list; + + if (varNode.getOpcode() == Opcodes.DSTORE && varNode.var == 10) + { + nodesToAdd.clear(); + nodesToAdd.add(new VarInsnNode(Opcodes.DLOAD, 10)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getCameraZoom", "(D)D", false)); + nodesToAdd.add(new VarInsnNode(Opcodes.DSTORE, 10)); + orientCameraMethod.instructions.insert(list.getNext(), nodesToAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + } + + if (updateLightMapMethod != null) + { + boolean worldBrightnessInjection = false; + + for (int count = 0; count < updateLightMapMethod.instructions.size(); count++) + { + final AbstractInsnNode list = updateLightMapMethod.instructions.get(count); + + if (list instanceof MethodInsnNode) + { + MethodInsnNode nodeAt = (MethodInsnNode) list; + + // Original code: float f1 = + // worldclient.getSunBrightness(1.0F) * 0.95F + 0.05F; + if (!worldBrightnessInjection && nodeAt.owner.equals(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD))) + { + updateLightMapMethod.instructions.remove(updateLightMapMethod.instructions.get(count - 1)); + updateLightMapMethod.instructions.set(updateLightMapMethod.instructions.get(count - 1), new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, + "getWorldBrightness", "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)F", false)); + MicdoodleTransformer.injectionCount++; + worldBrightnessInjection = true; + + continue; + } + } + + if (list instanceof IntInsnNode) + { + final IntInsnNode nodeAt = (IntInsnNode) list; + + if (nodeAt.operand == 255) + { + final InsnList nodesToAdd = new InsnList(); + + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 12)); + nodesToAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getColorRed", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)F", false)); + nodesToAdd.add(new InsnNode(Opcodes.FMUL)); + nodesToAdd.add(new VarInsnNode(Opcodes.FSTORE, 12)); + + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 13)); + nodesToAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getColorGreen", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)F", false)); + nodesToAdd.add(new InsnNode(Opcodes.FMUL)); + nodesToAdd.add(new VarInsnNode(Opcodes.FSTORE, 13)); + + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 14)); + nodesToAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getColorBlue", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)F", false)); + nodesToAdd.add(new InsnNode(Opcodes.FMUL)); + nodesToAdd.add(new VarInsnNode(Opcodes.FSTORE, 14)); + + updateLightMapMethod.instructions.insertBefore(nodeAt, nodesToAdd); + MicdoodleTransformer.injectionCount++; + + break; + } + } + } + } + + if (updateFogColorMethod != null) + { + for (int count = 0; count < updateFogColorMethod.instructions.size(); count++) + { + final AbstractInsnNode list = updateFogColorMethod.instructions.get(count); + + if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (!this.optifinePresent && this.methodMatches(MicdoodleTransformer.KEY_METHOD_GET_FOG_COLOR, nodeAt)) + { + InsnList toAdd = new InsnList(); + + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getFogColorHook", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VEC3) + ";", false)); + toAdd.add(new VarInsnNode(Opcodes.ASTORE, 9)); + + updateFogColorMethod.instructions.insertBefore(updateFogColorMethod.instructions.get(count + 2), toAdd); + MicdoodleTransformer.injectionCount++; + + this.printLog("bll.updateFogColor - getFogColor (no Optifine) done"); + } else if (this.methodMatches(MicdoodleTransformer.KEY_METHOD_GET_SKY_COLOR, nodeAt)) + { + InsnList toAdd = new InsnList(); + + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 2)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getSkyColorHook", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";)L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VEC3) + ";", false)); + toAdd.add(new VarInsnNode(Opcodes.ASTORE, 5)); + + updateFogColorMethod.instructions.insertBefore(updateFogColorMethod.instructions.get(count + 2), toAdd); + MicdoodleTransformer.injectionCount++; + + } + } + } + } + + if (addRainMethod != null) + { + for (int count = 0; count < addRainMethod.instructions.size(); count++) + { + final AbstractInsnNode listPos = addRainMethod.instructions.get(count); + + if (listPos.getOpcode() == Opcodes.FCMPL && listPos.getPrevious().getOpcode() == Opcodes.FCONST_0) + { + final InsnList nodesToAdd = new InsnList(); + nodesToAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + nodesToAdd.add(new FieldInsnNode(Opcodes.GETFIELD, this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_RENDERER), + this.getNameDynamic(MicdoodleTransformer.KEY_FIELD_ENTITY_RENDERER_RAINCOUNT), "I")); + nodesToAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + nodesToAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "addRainParticles", "(IIF)I", false)); + addRainMethod.instructions.insert(listPos, nodesToAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjectionWithFrames(node, true); + } + + private byte[] transformModelBiped(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_BIPED_SET_ROTATION); + + if (method != null) + { + // ModelBipedGC.setRotationAngles(this, par1, par2, par3, par4, + // par5, par6, par7Entity); + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 2)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 3)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 4)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 5)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 6)); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 7)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_MODEL_BIPED_GC, "setRotationAngles", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_MODEL_BIPED) + ";FFFFFFL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)V", false)); + method.instructions.insertBefore(method.instructions.get(method.instructions.size() - 2), toAdd); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjectionWithFrames(node, true); + } + + private byte[] transformRRCB(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RRCB_GET_WORLD_RENDERER); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode test = method.instructions.get(count); + if (test.getOpcode() == Opcodes.ARETURN) + { + InsnList toAdd = new InsnList(); + toAdd.add(new InsnNode(Opcodes.DUP)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "setCurrentBuffer", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_VERTEX_BUFFER) + ";)V", false)); + method.instructions.insertBefore(test, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + private byte[] transformRenderChunk(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_REBUILD_CHUNK); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode test = method.instructions.get(count); + if (test.getOpcode() == Opcodes.IOR) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, optifinePresent ? 19 : 16)); + toAdd.add( + new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "isGrating", "(ZL" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_BLOCK) + ";)Z", false)); + method.instructions.insertBefore(test, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + return this.finishInjection(node); + } + + public byte[] transformGuiSleep(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_WAKE_ENTITY); + + if (method != null) + { + method.instructions.insertBefore(method.instructions.get(method.instructions.size() - 3), + new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_MICDOODLE_PLUGIN, "onSleepCancelled", "()V", false)); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjection(node); + } + + public byte[] transformForgeHooks(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_BED_ORIENT_CAMERA); + + if (method != null) + { + method.instructions.insertBefore(method.instructions.get(0), new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_MICDOODLE_PLUGIN, "orientCamera", "()V", false)); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjection(node); + } + + public byte[] transformForgeArmor(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 2; + final Iterator methods = node.methods.iterator(); + while (methods.hasNext()) + { + MethodNode method = methods.next(); + if (method.name.equals("applyArmor")) + { + int count = 0; + for (int maxCount = method.instructions.size(); count < maxCount; count++) + { + final AbstractInsnNode test = method.instructions.get(count); + // Search for: double absorb = damage * prop.AbsorbRatio; + if (test.getOpcode() == Opcodes.GETFIELD && ((FieldInsnNode) test).name.equals("AbsorbRatio")) + { + final AbstractInsnNode target = method.instructions.get(count + 1); + if (target.getOpcode() == Opcodes.DMUL) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "armorDamageHook", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";)D", false)); + toAdd.add(new InsnNode(Opcodes.DMUL)); + method.instructions.insert(target, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + for (int maxCount = method.instructions.size(); count < maxCount; count++) + { + final AbstractInsnNode test = method.instructions.get(count); + // Search for: double armorDamage = Math.max(1.0F, damage / + // 4.0F); + if (test.getOpcode() == Opcodes.INVOKESTATIC && ((MethodInsnNode) test).name.equals("max")) // Math.max + { + final AbstractInsnNode target = method.instructions.get(count + 1); + if (target.getOpcode() == Opcodes.DSTORE && ((VarInsnNode) target).var == 10) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "armorDamageHook", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_LIVING) + ";)D", false)); + toAdd.add(new InsnNode(Opcodes.DMUL)); + method.instructions.insertBefore(target, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + break; + } + } + return this.finishInjection(node, true); + } + + public byte[] transformEntityGolem(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 0; + MicdoodleTransformer.injectionCount = 0; + String inter = CLASS_IENTITYBREATHABLE; + try + { + Class.forName(inter.replace("/", ".")); + if (!node.interfaces.contains(inter)) + { + node.interfaces.add(inter); + MicdoodleTransformer.injectionCount++; + } + MethodNode canBreathe = new MethodNode(Opcodes.ACC_PUBLIC, "canBreath", "()Z", null, null); + canBreathe.instructions.add(new InsnNode(Opcodes.ICONST_1)); + canBreathe.instructions.add(new InsnNode(Opcodes.IRETURN)); + node.methods.add(canBreathe); + } catch (Exception e) + { + } + + return this.finishInjection(node); + } + + public byte[] transformTileCableIC2Sealed(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MicdoodleTransformer.operationCount = 1; + MethodNode method = this.getMethodNoDesc(node, ""); + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode insn = method.instructions.get(count); + + if (insn instanceof MethodInsnNode) + { + ((MethodInsnNode) insn).owner = "ic2/core/block/wiring/TileEntityCable"; + MicdoodleTransformer.injectionCount++; + break; + } + + } + } + + return this.finishInjection(node); + } + + @SuppressWarnings("unchecked") + public byte[] transformCustomAnnotations(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 0; + MicdoodleTransformer.injectionCount = 0; + + final Iterator methods = node.methods.iterator(); + List ignoredMods = new ArrayList<>(); + + while (methods.hasNext()) + { + MethodNode methodnode = methods.next(); + + methodLabel: if (methodnode.visibleAnnotations != null && methodnode.visibleAnnotations.size() > 0) + { + for (AnnotationNode annotation : methodnode.visibleAnnotations) + { + if (annotation.desc.equals("L" + MicdoodleTransformer.CLASS_RUNTIME_INTERFACE + ";")) + { + List desiredInterfaces = new ArrayList<>(); + String modID = ""; + String deobfName = ""; + + for (int i = 0; i < annotation.values.size(); i += 2) + { + Object value = annotation.values.get(i); + + if (value.equals("clazz")) + { + desiredInterfaces.add(String.valueOf(annotation.values.get(i + 1))); + } else if (value.equals("modID")) + { + modID = String.valueOf(annotation.values.get(i + 1)); + } else if (value.equals("altClasses")) + { + desiredInterfaces.addAll((ArrayList) annotation.values.get(i + 1)); + } else if (value.equals("deobfName")) + { + deobfName = String.valueOf(annotation.values.get(i + 1)); + } + } + + if (modID.isEmpty() || !ignoredMods.contains(modID)) + { + boolean modFound = modID.isEmpty() || Loader.isModLoaded(modID); + + if (modFound) + { + for (String inter : desiredInterfaces) + { + try + { + Class.forName(inter); + } catch (ClassNotFoundException e) + { + + this.printLog("Galacticraft ignored missing interface \"" + inter + "\" from mod \"" + modID + "\"."); + continue; + } + + inter = inter.replace(".", "/"); + + if (deobfName.equals("EXTENDS")) + { + + this.printLog("Galacticraft added superclass \"" + inter + "\" dynamically from \"" + modID + "\" to class \"" + node.name + "\"."); + node.superName = inter; + MicdoodleTransformer.injectionCount++; + continue; + } + + if (!node.interfaces.contains(inter)) + { + + this.printLog("Galacticraft added interface \"" + inter + "\" dynamically from \"" + modID + "\" to class \"" + node.name + "\"."); + node.interfaces.add(inter); + MicdoodleTransformer.injectionCount++; + + if (!deobfName.isEmpty() && !deobfuscated) + { + String nameBefore = methodnode.name; + methodnode.name = deobfName; + + this.printLog("Galacticraft renamed method " + nameBefore + " to " + deobfName + " in class " + node.name); + } + } + + break; + } + } else + { + ignoredMods.add(modID); + + this.printLog("Galacticraft ignored dynamic interface insertion since \"" + modID + "\" was not found."); + } + } + + break methodLabel; + } + } + } + } + + if (MicdoodleTransformer.injectionCount > 0) + { + + this.printLog("Galacticraft successfully injected bytecode into: " + node.name + " (" + MicdoodleTransformer.injectionCount + ")"); + } + + return this.finishInjection(node, false); + } + + public byte[] transformParticleManager(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode renderParticlesMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RENDER_PARTICLES); + + if (renderParticlesMethod != null) + { + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 2)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "renderFootprints", "(F)V", false)); + renderParticlesMethod.instructions.insert(renderParticlesMethod.instructions.get(0), toAdd); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjection(node); + } + + public byte[] transformItemRenderer(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode renderOverlaysMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RENDER_OVERLAYS); + + if (renderOverlaysMethod != null) + { + for (int count = 0; count < renderOverlaysMethod.instructions.size(); count++) + { + final AbstractInsnNode glEnable = renderOverlaysMethod.instructions.get(count); + + if (glEnable instanceof MethodInsnNode && ((MethodInsnNode) glEnable).name.equals(getNameDynamic(MicdoodleTransformer.KEY_METHOD_ENABLE_ALPHA))) + { + InsnList toAdd = new InsnList(); + + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "renderLiquidOverlays", "(F)V", false)); + + renderOverlaysMethod.instructions.insertBefore(glEnable, toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformNetHandlerPlay(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 2; + + MethodNode handleNamedSpawnMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_HANDLE_SPAWN_PLAYER); + + if (handleNamedSpawnMethod != null) + { + for (int count = 0; count < handleNamedSpawnMethod.instructions.size(); count++) + { + final AbstractInsnNode list = handleNamedSpawnMethod.instructions.get(count); + + if (list instanceof TypeInsnNode) + { + final TypeInsnNode nodeAt = (TypeInsnNode) list; + + if (nodeAt.desc.contains(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_OTHER_PLAYER))) + { + final TypeInsnNode overwriteNode = new TypeInsnNode(Opcodes.NEW, this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_CUSTOM_OTHER_PLAYER)); + + handleNamedSpawnMethod.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } else if (list instanceof MethodInsnNode) + { + final MethodInsnNode nodeAt = (MethodInsnNode) list; + + if (nodeAt.name.equals("") && nodeAt.owner.equals(this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_OTHER_PLAYER))) + { + handleNamedSpawnMethod.instructions.set(nodeAt, new MethodInsnNode(Opcodes.INVOKESPECIAL, this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_CUSTOM_OTHER_PLAYER), "", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_GAME_PROFILE) + ";)V", false)); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformRenderGlobal(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode setupTerrainMethod = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_SETUP_TERRAIN); + + if (setupTerrainMethod != null) + { + for (int count = 0; count < setupTerrainMethod.instructions.size(); count++) + { + final AbstractInsnNode nodeTest = setupTerrainMethod.instructions.get(count); + + if (nodeTest instanceof MethodInsnNode && ((MethodInsnNode) nodeTest).name.equals(this.getNameDynamic(MicdoodleTransformer.KEY_METHOD_GET_EYE_HEIGHT))) + { + /* + * The following (hacky) bytecode insertion will always let + * entities render above y=256 This is necessary for rockets + * since the 1.8 update changed directional frustum culling + * See WorldUtil.getRenderPosY + */ + InsnList list = new InsnList(); + list.add(new VarInsnNode(Opcodes.ALOAD, 1)); + list.add(new VarInsnNode(Opcodes.DLOAD, 15)); + list.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getRenderPosY", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";D)D", false)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.remove(setupTerrainMethod.instructions.get(count - 2)); + setupTerrainMethod.instructions.insertBefore(setupTerrainMethod.instructions.get(count - 2), list); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityClass(byte[] bytes) + { + if (isServer) + return bytes; + + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, KEY_METHOD_CAN_RENDER_FIRE); + + if (method != null) + { + for (int i = 0; i < method.instructions.size(); i++) + { + AbstractInsnNode nodeAt = method.instructions.get(i); + + if (nodeAt instanceof MethodInsnNode && nodeAt.getOpcode() == Opcodes.INVOKEVIRTUAL) + { + MethodInsnNode overwriteNode = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "shouldRenderFire", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY) + ";)Z", false); + + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformEntityArrow(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_ON_UPDATE); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); count++) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list instanceof LdcInsnNode) + { + final LdcInsnNode nodeAt = (LdcInsnNode) list; + + if (nodeAt.cst.equals(0.05F)) + { + final VarInsnNode beforeNode = new VarInsnNode(Opcodes.ALOAD, 0); + final MethodInsnNode overwriteNode = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getArrowGravity", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_ENTITY_ARROW) + ";)F", false); + + method.instructions.insertBefore(nodeAt, beforeNode); + method.instructions.set(nodeAt, overwriteNode); + MicdoodleTransformer.injectionCount++; + } + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformWorld(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_RAIN_STRENGTH); + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); ++count) + { + final AbstractInsnNode list = method.instructions.get(count); + + if (list.getOpcode() == Opcodes.ALOAD) + { + if (count + 10 >= method.instructions.size()) + { + // MicdoodlePlugin.showErrorDialog(new Object[]{"Exit", + // "Ignore"}, "Are there two copies of MicdoodleCore in + // your mods folder? Please remove one!"); + break; + } + // Remove ALOAD, GETFIELD, ALOAD, GETFIELD, ALOAD, GETFIELD, + // FSUB, FLOAD, FMUL, FADD but keep FRETURN + for (int i = 0; i < 10; ++i) + { + method.instructions.remove(method.instructions.get(count)); + } + + InsnList toAdd = new InsnList(); + toAdd.add(new VarInsnNode(Opcodes.ALOAD, 0)); + toAdd.add(new VarInsnNode(Opcodes.FLOAD, 1)); + toAdd.add(new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "getRainStrength", + "(L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_WORLD) + ";F)F", false)); + method.instructions.insertBefore(method.instructions.get(count), toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformOptifine(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + + MicdoodleTransformer.operationCount = 1; + + MethodNode method = this.getMethod(node, MicdoodleTransformer.KEY_METHOD_REGISTEROF); + + if (method != null) + { + AbstractInsnNode toAdd = new InsnNode(Opcodes.RETURN); + method.instructions.insertBefore(method.instructions.get(0), toAdd); + MicdoodleTransformer.injectionCount++; + } + + return this.finishInjection(node); + } + + public byte[] transformAEMeteorite(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + MethodNode method = this.getMethodNoDesc(node, ""); + MicdoodleTransformer.operationCount = 1; + + if (method != null) + { + for (int count = 0; count < method.instructions.size(); ++count) + { + final AbstractInsnNode list = method.instructions.get(count); + if (list.getOpcode() == Opcodes.GETFIELD && ((FieldInsnNode) list).name.equals("skyStoneDefinition")) + { + AbstractInsnNode toAdd = new MethodInsnNode(Opcodes.INVOKESTATIC, MicdoodleTransformer.CLASS_TRANSFORMER_HOOKS, "addAE2MeteorSpawn", + "(Ljava/lang/Object;L" + this.getNameDynamic(MicdoodleTransformer.KEY_CLASS_BLOCK) + ";)Z", false); + method.instructions.set(method.instructions.get(count - 5), toAdd); + MicdoodleTransformer.injectionCount++; + break; + } + } + } + + return this.finishInjection(node); + } + + public byte[] transformRefs(byte[] bytes) + { + ClassNode node = this.startInjection(bytes); + String intCache1 = this.getName(KEY_CLASS_INTCACHE); + String intCache2 = this.getObfName(KEY_CLASS_INTCACHE); + int invokeStatic = Opcodes.INVOKESTATIC; + + for (MethodNode m : node.methods) + { + int listsize = m.instructions.size(); + for (int count = 0; count < listsize; count++) + { + if (m.instructions.get(count).getOpcode() == invokeStatic) + { + MethodInsnNode mn = (MethodInsnNode) m.instructions.get(count); + if (mn.owner.equals(intCache1) || mn.owner.equals(intCache2)) + { + mn.owner = CLASS_INTCACHE_VARIANT; + } + } + } + } + + return this.finishInjection(node, false); + } + + public static class ObfuscationEntry + { + + public String name; + public String obfuscatedName; + + public ObfuscationEntry(String name, String obfuscatedName) + { + this.name = name; + this.obfuscatedName = obfuscatedName; + } + + public ObfuscationEntry(String name) + { + this(name, FMLDeobfuscatingRemapper.INSTANCE.unmap(name)); + } + } + + public static class MethodObfuscationEntry extends ObfuscationEntry + { + + public String methodDesc; + + public MethodObfuscationEntry(String name, String obfuscatedName, String methodDesc) + { + super(name, obfuscatedName); + this.methodDesc = methodDesc; + } + + public MethodObfuscationEntry(String commonName, String methodDesc) + { + this(commonName, commonName, methodDesc); + } + } + + public static class FieldObfuscationEntry extends ObfuscationEntry + { + + public FieldObfuscationEntry(String name, String obfuscatedName) + { + super(name, obfuscatedName); + } + } + + private void printResultsAndReset(String nodeName) + { + if (MicdoodleTransformer.operationCount > 0) + { + if (MicdoodleTransformer.injectionCount >= MicdoodleTransformer.operationCount) + { + + this.printLog("Galacticraft successfully injected bytecode into: " + nodeName + " (" + MicdoodleTransformer.injectionCount + " / " + MicdoodleTransformer.operationCount + ")"); + } else + { + MicdoodlePlugin.miccoreLogger.error("Potential problem: Galacticraft did not complete injection of bytecode into: " + nodeName + " (" + MicdoodleTransformer.injectionCount + " / " + + MicdoodleTransformer.operationCount + ")"); + } + } + } + + private MethodNode getMethod(ClassNode node, String keyName) + { + for (MethodNode methodNode : node.methods) + { + if (this.methodMatches(keyName, methodNode)) + { + return methodNode; + } + } + + return null; + } + + private MethodNode getMethodNoDesc(ClassNode node, String methodName) + { + for (MethodNode methodNode : node.methods) + { + if (methodNode.name.equals(methodName)) + { + return methodNode; + } + } + + return null; + } + + private boolean methodMatches(String keyName, MethodInsnNode node) + { + return node.name.equals(this.getNameDynamic(keyName)) && node.desc.equals(this.getDescDynamic(keyName)); + } + + private boolean methodMatches(String keyName, MethodNode node) + { + return node.name.equals(this.getNameDynamic(keyName)) && node.desc.equals(this.getDescDynamic(keyName)); + } + + public String getName(String keyName) + { + return this.nodemap.get(keyName).name; + } + + public String getObfName(String keyName) + { + return this.nodemap.get(keyName).obfuscatedName; + } + + public String getNameDynamic(String keyName) + { + try + { + if (this.deobfuscated) + { + return this.getName(keyName); + } else + { + return this.getObfName(keyName); + } + } catch (NullPointerException e) + { + this.printLog("Could not find key: " + keyName); + throw e; + } + } + + public String getDescDynamic(String keyName) + { + return ((MethodObfuscationEntry) this.nodemap.get(keyName)).methodDesc; + } + + private void printLog(String message) + { + if (ConfigManagerMicCore.enableDebug) + { + MicdoodlePlugin.miccoreLogger.info(message); + } + } + + private ClassNode startInjection(byte[] bytes) + { + final ClassNode node = new ClassNode(); + final ClassReader reader = new ClassReader(bytes); + reader.accept(node, 0); + MicdoodleTransformer.injectionCount = 0; + MicdoodleTransformer.operationCount = 0; + return node; + } + + private byte[] finishInjection(ClassNode node) + { + return this.finishInjection(node, true); + } + + private byte[] finishInjection(ClassNode node, boolean printToLog) + { + final ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); + node.accept(writer); + + if (printToLog) + { + this.printResultsAndReset(node.name); + } + + return writer.toByteArray(); + } + + private byte[] finishInjectionWithFrames(ClassNode node, boolean printToLog) + { + final ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + node.accept(writer); + + if (printToLog) + { + this.printResultsAndReset(node.name); + } + + return writer.toByteArray(); + } + + private boolean isPlayerApiActive() + { + return playerApiActive; + } + + private boolean mcVersionMatches(String testVersion) + { + return testVersion.contains(this.mcVersion); + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer.cfg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 00000000..80badb1f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1,41 @@ +public net.minecraft.client.renderer.EntityRenderer field_78503_V # cameraZoom +public net.minecraft.client.renderer.EntityRenderer field_78502_W # cameraYaw +public net.minecraft.client.renderer.EntityRenderer field_78509_X # cameraPitch +public net.minecraft.client.renderer.EntityRenderer func_78467_g(F)V # orientCamera + +public net.minecraft.client.gui.GuiIngame field_73838_g # overlayMessage + +public net.minecraft.client.audio.MusicTicker field_147678_c # currentMusic +public net.minecraft.client.audio.MusicTicker field_147677_b # mc +public net.minecraft.client.audio.MusicTicker field_147676_d # timeUntilNextMusic +public net.minecraft.client.audio.MusicTicker field_147679_a # rand + +public net.minecraft.network.EnumConnectionState field_150761_f # STATES_BY_CLASS +public net.minecraft.network.EnumConnectionState field_179247_h # directionMaps + +public net.minecraft.network.NetHandlerPlayServer field_147365_f # floatingTickCount + +public-f net.minecraft.world.biome.Biome func_180626_a(Lnet/minecraft/util/math/BlockPos;)F # getTemperature +public-f net.minecraft.world.biome.Biome func_185355_j()F # getBaseHeight +public-f net.minecraft.world.biome.Biome func_76727_i()F # getRainfall +public-f net.minecraft.world.biome.Biome func_185359_l()Ljava/lang/String; # getBiomeName +public-f net.minecraft.world.biome.Biome func_185360_m()F # getHeightVariation +public-f net.minecraft.world.biome.Biome func_185353_n()F # getDefaultTemperature +public-f net.minecraft.world.biome.Biome func_185361_o()I # getWaterColor +public-f net.minecraft.world.biome.Biome func_180628_b(Lnet/minecraft/world/World;Ljava/util/Random;Lnet/minecraft/world/chunk/ChunkPrimer;IID)V # generateBiomeTerrain +public-f net.minecraft.world.biome.Biome func_150559_j()Z # isSnowyBiome + +public net.minecraft.world.gen.structure.StructureComponent field_186168_b # mirror +public net.minecraft.world.gen.structure.StructureComponent field_186169_c # rotation + +public-f net.minecraft.world.chunk.Chunk field_76638_b # precipitationHeightMap +public net.minecraft.world.chunk.Chunk field_82912_p # heightMapMinimum +public net.minecraft.world.chunk.Chunk field_76634_f # heightMap + +public net.minecraft.world.WorldProvider field_76579_a # world + +public net.minecraft.entity.player.EntityPlayer field_71083_bS # sleeping +public net.minecraft.entity.player.EntityPlayer field_71076_b # sleepTimer + +## ONLY KEPT FOR BACKWARDS COMPAT WITH ASMODEUSCORE +public net.minecraft.world.biome.Biome$BiomeProperties field_185412_a # biomeName diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer_deobf.cfg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer_deobf.cfg new file mode 100644 index 00000000..78c4aa7c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/META-INF/accesstransformer_deobf.cfg @@ -0,0 +1,38 @@ +# Micdoodle Core Access Transformer configuration file +# Fields +public net.minecraft.client.audio.MusicTicker rand +public net.minecraft.client.audio.MusicTicker mc +public net.minecraft.client.audio.MusicTicker currentMusic +public net.minecraft.client.audio.MusicTicker overlayMessage +public net.minecraft.client.gui.GuiIngame overlayMessage +public net.minecraft.client.gui.GuiScreen buttonList +public net.minecraft.client.gui.inventory.GuiContainer xSize +public net.minecraft.client.renderer.entity.RenderLivingBase mainModel +public net.minecraft.client.renderer.EntityRenderer cameraZoom +public net.minecraft.client.renderer.EntityRenderer cameraYaw +public net.minecraft.client.renderer.EntityRenderer cameraPitch +public net.minecraft.entity.EntityLivingBase attackingPlayer +public net.minecraft.entity.player.EntityPlayer sleeping +public net.minecraft.entity.player.EntityPlayer sleepTimer +public net.minecraft.inventory.InventoryCrafting eventHandler +public net.minecraft.network.EnumConnectionState directionMaps +public net.minecraft.network.EnumConnectionState STATES_BY_CLASS +public net.minecraft.network.NetHandlerPlayServer floatingTickCount +public net.minecraft.world.WorldProvider world +public net.minecraft.world.chunk.Chunk heightMapMinimum +public net.minecraft.world.chunk.Chunk precipitationHeightMap +public net.minecraft.world.chunk.Chunk heightMap +public net.minecraft.world.biome.Biome$BiomeProperties biomeName + +# Methods +public net.minecraft.client.renderer.EntityRenderer orientCamera(F)V + +public-f net.minecraft.world.biome.Biome getTemperature(Lnet/minecraft/util/math/BlockPos;)F +public-f net.minecraft.world.biome.Biome generateBiomeTerrain(Lnet/minecraft/world/World;Ljava/util/Random;Lnet/minecraft/world/chunk/ChunkPrimer;IID)V +public-f net.minecraft.world.biome.Biome getBaseHeight()F +public-f net.minecraft.world.biome.Biome getRainfall()F +public-f net.minecraft.world.biome.Biome getBiomeName()Ljava/lang/String; +public-f net.minecraft.world.biome.Biome getHeightVariation()F +public-f net.minecraft.world.biome.Biome getDefaultTemperature()F +public-f net.minecraft.world.biome.Biome getWaterColor()I +public-f net.minecraft.world.biome.Biome isSnowyBiome()Z \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_solar.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_solar.json new file mode 100644 index 00000000..ebcc6445 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_solar.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.advanced_solar.title" + }, + "description": { + "translate": "advancement.galacticraft.advanced_solar.description" + }, + "icon": { + "item": "galacticraftcore:solar", + "data": 4 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "advanced_solar": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:solar", + "data": 4 + } + ] + } + } + }, + "requirements": [ + [ + "advanced_solar" + ] + ], + "parent": "galacticraftcore:galacticraft/basic_solar" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_wafer.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_wafer.json new file mode 100644 index 00000000..d2681407 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/advanced_wafer.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.advanced_wafer.title" + }, + "description": { + "translate": "advancement.galacticraft.advanced_wafer.description" + }, + "icon": { + "item": "galacticraftcore:basic_item", + "data": 14 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:basic_item", + "data": 14 + } + ] + } + } + }, + "requirements": [ + [ + "compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/basic_wafer" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_solar.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_solar.json new file mode 100644 index 00000000..20432393 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_solar.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.solar.title" + }, + "description": { + "translate": "advancement.galacticraft.solar.description" + }, + "icon": { + "item": "galacticraftcore:solar", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "solar": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:solar", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "solar" + ] + ], + "parent": "galacticraftcore:galacticraft/basic_wafer" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_wafer.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_wafer.json new file mode 100644 index 00000000..d8a6547d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/basic_wafer.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.basic_wafer.title" + }, + "description": { + "translate": "advancement.galacticraft.basic_wafer.description" + }, + "icon": { + "item": "galacticraftcore:basic_item", + "data": 13 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:basic_item", + "data": 13 + } + ] + } + } + }, + "requirements": [ + [ + "compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/circuit_fabricator" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/circuit_fabricator.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/circuit_fabricator.json new file mode 100644 index 00000000..37403bd6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/circuit_fabricator.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.circuit_fabricator.title" + }, + "description": { + "translate": "advancement.galacticraft.circuit_fabricator.description" + }, + "icon": { + "item": "galacticraftcore:machine2", + "data": 4 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "circuit_fabricator": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:machine2", + "data": 4 + } + ] + } + } + }, + "requirements": [ + [ + "circuit_fabricator" + ] + ], + "parent": "galacticraftcore:galacticraft/coal_generator" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/coal_generator.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/coal_generator.json new file mode 100644 index 00000000..d5dde35b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/coal_generator.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.coal_generator.title" + }, + "description": { + "translate": "advancement.galacticraft.coal_generator.description" + }, + "icon": { + "item": "galacticraftcore:machine", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "coal_generator": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:machine", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "coal_generator" + ] + ], + "parent": "galacticraftcore:galacticraft/root" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/compressor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/compressor.json new file mode 100644 index 00000000..5938f124 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/compressor.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.compressor.title" + }, + "description": { + "translate": "advancement.galacticraft.compressor.description" + }, + "icon": { + "item": "galacticraftcore:machine", + "data": 12 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:machine", + "data": 12 + } + ] + } + } + }, + "requirements": [ + [ + "compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/basic_wafer" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/create_space_station.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/create_space_station.json new file mode 100644 index 00000000..aaa50b20 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/create_space_station.json @@ -0,0 +1,29 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.create_space_station.title" + }, + "description": { + "translate": "advancement.galacticraft.create_space_station.description" + }, + "icon": { + "item": "galacticraftcore:basic_item", + "data": 1 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "create_space_station": { + "trigger": "galacticraftcore:create_space_station" + } + }, + "requirements": [ + [ + "create_space_station" + ] + ], + "parent": "galacticraftcore:galacticraft/moon" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/electric_compressor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/electric_compressor.json new file mode 100644 index 00000000..04e65b1c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/electric_compressor.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.electric_compressor.title" + }, + "description": { + "translate": "advancement.galacticraft.electric_compressor.description" + }, + "icon": { + "item": "galacticraftcore:machine2", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "electric_compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:machine2", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "electric_compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/compressor" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_all_tanks.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_all_tanks.json new file mode 100644 index 00000000..844fe370 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_all_tanks.json @@ -0,0 +1,65 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.fill_all_tanks.title" + }, + "description": { + "translate": "advancement.galacticraft.fill_all_tanks.description" + }, + "icon": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "small_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_light_full", + "data": 0 + } + ] + } + }, + "medium_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 0 + } + ] + } + }, + "heavy_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "small_tank" + ], + [ + "medium_tank" + ], + [ + "heavy_tank" + ] + ], + "parent": "galacticraftcore:galacticraft/fill_tank" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_tank.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_tank.json new file mode 100644 index 00000000..2bfbc1f4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fill_tank.json @@ -0,0 +1,61 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.fill_tank.title" + }, + "description": { + "translate": "advancement.galacticraft.fill_tank.description" + }, + "icon": { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "small_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_light_full", + "data": 0 + } + ] + } + }, + "medium_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 0 + } + ] + } + }, + "heavy_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "small_tank", + "medium_tank", + "heavy_tank" + ] + ], + "parent": "galacticraftcore:galacticraft/oxygen_compressor" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fuel_loader.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fuel_loader.json new file mode 100644 index 00000000..be08a16b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/fuel_loader.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.fuel_loader.title" + }, + "description": { + "translate": "advancement.galacticraft.fuel_loader.description" + }, + "icon": { + "item": "galacticraftcore:fuel_loader", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "fuel_loader": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:fuel_loader", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "fuel_loader" + ] + ], + "parent": "galacticraftcore:galacticraft/rocket_t1" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/key_t1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/key_t1.json new file mode 100644 index 00000000..e34de109 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/key_t1.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.dungeon_key_moon.title" + }, + "description": { + "translate": "advancement.galacticraft.dungeon_key_moon.description" + }, + "icon": { + "item": "galacticraftcore:key", + "data": 0 + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "got_key":{ + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:key", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "got_key" + ] + ], + "parent": "galacticraftcore:galacticraft/moon_dungeon" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/launch_rocket.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/launch_rocket.json new file mode 100644 index 00000000..6dec880a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/launch_rocket.json @@ -0,0 +1,29 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.launch_rocket.title" + }, + "description": { + "translate": "advancement.galacticraft.launch_rocket.description" + }, + "icon": { + "item": "minecraft:flint_and_steel", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "launched_rocket": { + "trigger": "galacticraftcore:launch_rocket" + } + }, + "requirements": [ + [ + "launched_rocket" + ] + ], + "parent": "galacticraftcore:galacticraft/fuel_loader" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon.json new file mode 100644 index 00000000..fe0b75db --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon.json @@ -0,0 +1,32 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.moon.title" + }, + "description": { + "translate": "advancement.galacticraft.moon.description" + }, + "icon": { + "item": "galacticraftcore:basic_block_moon", + "data": 5 + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "traveled_to_moon":{ + "trigger":"minecraft:changed_dimension", + "conditions":{ + "to":"moon.moon" + } + } + }, + "requirements": [ + [ + "traveled_to_moon" + ] + ], + "parent": "galacticraftcore:galacticraft/launch_rocket" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy.json new file mode 100644 index 00000000..86854488 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.moon_buggy.title" + }, + "description": { + "translate": "advancement.galacticraft.moon_buggy.description" + }, + "icon": { + "item": "galacticraftcore:buggy", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "got_buggy":{ + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:buggy", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "got_buggy" + ] + ], + "parent": "galacticraftcore:galacticraft/moon_buggy_schematic" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy_schematic.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy_schematic.json new file mode 100644 index 00000000..0eb9ca78 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_buggy_schematic.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.moon_buggy_schematic.title" + }, + "description": { + "translate": "advancement.galacticraft.moon_buggy_schematic.description" + }, + "icon": { + "item": "galacticraftcore:schematic", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "got_schematic":{ + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:schematic", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "got_schematic" + ] + ], + "parent": "galacticraftcore:galacticraft/key_t1" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_dungeon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_dungeon.json new file mode 100644 index 00000000..6103619a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/moon_dungeon.json @@ -0,0 +1,29 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.moon_dungeon.title" + }, + "description": { + "translate": "advancement.galacticraft.moon_dungeon.description" + }, + "icon": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "found_boss":{ + "trigger":"galacticraftcore:boss_moon" + } + }, + "requirements": [ + [ + "found_boss" + ] + ], + "parent": "galacticraftcore:galacticraft/moon" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oil.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oil.json new file mode 100644 index 00000000..dec26227 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oil.json @@ -0,0 +1,32 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.oil.title" + }, + "description": { + "translate": "advancement.galacticraft.oil.description" + }, + "icon": { + "item": "galacticraftcore:bucket_oil", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "in_oil": { + "trigger": "minecraft:enter_block", + "conditions": { + "block": "galacticraftcore:crude_oil_still" + } + } + }, + "requirements": [ + [ + "in_oil" + ] + ], + "parent": "galacticraftcore:galacticraft/compressor" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_collector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_collector.json new file mode 100644 index 00000000..78639344 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_collector.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.oxygen_collector.title" + }, + "description": { + "translate": "advancement.galacticraft.oxygen_collector.description" + }, + "icon": { + "item": "galacticraftcore:collector", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "oxygen_collector": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:collector", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "oxygen_collector" + ] + ], + "parent": "galacticraftcore:galacticraft/compressor" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_compressor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_compressor.json new file mode 100644 index 00000000..664b6d5b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_compressor.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.oxygen_compressor.title" + }, + "description": { + "translate": "advancement.galacticraft.oxygen_compressor.description" + }, + "icon": { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "oxygen_compressor": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "oxygen_compressor" + ] + ], + "parent": "galacticraftcore:galacticraft/oxygen_collector" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_gear.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_gear.json new file mode 100644 index 00000000..b495d069 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/oxygen_gear.json @@ -0,0 +1,87 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.all_oxygen_gear.title" + }, + "description": { + "translate": "advancement.galacticraft.all_oxygen_gear.description" + }, + "icon": { + "item": "galacticraftcore:oxygen_mask", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "small_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_light_full", + "data": 0 + } + ] + } + }, + "medium_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 0 + } + ] + } + }, + "heavy_tank": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 0 + } + ] + } + }, + "oxygen_mask": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_mask" + } + ] + } + }, + "oxygen_gear": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:oxygen_gear" + } + ] + } + } + }, + "requirements": [ + [ + "small_tank", + "medium_tank", + "heavy_tank" + ], + [ + "oxygen_mask" + ], + [ + "oxygen_gear" + ] + ], + "parent": "galacticraftcore:galacticraft/fill_tank" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/refinery.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/refinery.json new file mode 100644 index 00000000..473e467a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/refinery.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.refiery.title" + }, + "description": { + "translate": "advancement.galacticraft.refiery.description" + }, + "icon": { + "item": "galacticraftcore:refinery", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "refinery": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:refinery", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "refinery" + ] + ], + "parent": "galacticraftcore:galacticraft/oil" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_fuel.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_fuel.json new file mode 100644 index 00000000..33590cfb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_fuel.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.rocket_fuel.title" + }, + "description": { + "translate": "advancement.galacticraft.rocket_fuel.description" + }, + "icon": { + "item": "galacticraftcore:bucket_fuel", + "data": 0 + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "fuel_bucket": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:bucket_fuel", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "fuel_bucket" + ] + ], + "parent": "galacticraftcore:galacticraft/refinery" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_t1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_t1.json new file mode 100644 index 00000000..39c4ed0e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_t1.json @@ -0,0 +1,73 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.rocket_t1.title" + }, + "description": { + "translate": "advancement.galacticraft.rocket_t1.description" + }, + "icon": { + "item": "galacticraftcore:rocket_t1", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "rocket_crafted": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_t1", + "data": 0 + } + ] + } + }, + "rocket_crafted_18": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_t1", + "data": 1 + } + ] + } + }, + "rocket_crafted_36": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_t1", + "data": 2 + } + ] + } + }, + "rocket_crafted_56": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_t1", + "data": 3 + } + ] + } + } + }, + "requirements": [ + [ + "rocket_crafted", + "rocket_crafted_18", + "rocket_crafted_36", + "rocket_crafted_56" + ] + ], + "parent": "galacticraftcore:galacticraft/rocket_workbench" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_workbench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_workbench.json new file mode 100644 index 00000000..c086edd9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/rocket_workbench.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.rocket_workbench.title" + }, + "description": { + "translate": "advancement.galacticraft.rocket_workbench.description" + }, + "icon": { + "item": "galacticraftcore:rocket_workbench", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "rocket_workbench": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:rocket_workbench", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "rocket_workbench" + ] + ], + "parent": "galacticraftcore:galacticraft/compressor" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/root.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/root.json new file mode 100644 index 00000000..dd0d7700 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/root.json @@ -0,0 +1,31 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.root.title", + "bold": true, + "color": "gray" + }, + "description": { + "translate": "advancement.galacticraft.root.description" + }, + "icon": { + "item": "galacticraftcore:rocket_t1", + "data": 0 + }, + "frame": "task", + "show_toast": false, + "announce_to_chat": false, + "hidden": false, + "background": "galacticraftcore:textures/gui/galacticraft_background.png" + }, + "criteria": { + "tick": { + "trigger": "minecraft:tick" + } + }, + "requirements": [ + [ + "tick" + ] + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/spin_thruster.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/spin_thruster.json new file mode 100644 index 00000000..971e14b1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/advancements/galacticraft/spin_thruster.json @@ -0,0 +1,37 @@ +{ + "display": { + "title": { + "translate": "advancement.galacticraft.spin_thruster.title" + }, + "description": { + "translate": "advancement.galacticraft.spin_thruster.description" + }, + "icon": { + "item": "galacticraftcore:spin_thruster", + "data": 0 + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria":{ + "spin_thruster":{ + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "galacticraftcore:spin_thruster", + "data": 0 + } + ] + } + } + }, + "requirements": [ + [ + "spin_thruster" + ] + ], + "parent": "galacticraftcore:galacticraft/create_space_station" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_frame.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_frame.json new file mode 100644 index 00000000..c9dfc119 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_frame.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:air_lock_frame_model" }, + "airlocktype=air_lock_frame": { "model": "galacticraftcore:air_lock_frame_model" }, + "airlocktype=air_lock_controller": { "model": "galacticraftcore:air_lock_controller_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_seal.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_seal.json new file mode 100644 index 00000000..e8eeb35d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/air_lock_seal.json @@ -0,0 +1,22 @@ +{ + "variants": { + "connection=x": { + "model": "galacticraftcore:air_lock_seal_model", + "textures": { + "all": "galacticraftcore:blocks/air_lock_seal" + } + }, + "connection=z": { + "model": "galacticraftcore:air_lock_seal_model", "y": 90, + "textures": { + "all": "galacticraftcore:blocks/air_lock_seal" + } + }, + "connection=flat": { + "model": "galacticraftcore:air_lock_seal_flat_model", + "textures": { + "all": "galacticraftcore:blocks/air_lock_seal" + } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/aluminum_wire.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/aluminum_wire.json new file mode 100644 index 00000000..5ed37517 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/aluminum_wire.json @@ -0,0 +1,357 @@ +{ + "forge_marker": 1, + "variants": { + "down=false,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire" }, + + "down=false,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_n", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_n", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_n", "y": 180 }, + "down=false,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nd", "y": 270 }, + + "down=false,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nu", "y": 180 }, + "down=false,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nu", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nud", "y": 180 }, + "down=true,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nud", "y": 270 }, + + "down=false,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsd", "y": 90 }, + + "down=false,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsu", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nsud", "y": 90 }, + + "down=false,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesu", "y": 90 }, + "down=false,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesu", "y": 180 }, + "down=false,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesu", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesud", "y": 90 }, + "down=true,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesud", "y": 180 }, + "down=true,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesud", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ned", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neu", "y": 180 }, + "down=false,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neu", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neud", "y": 180 }, + "down=true,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neud", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_nesw", "y": 0 }, + + "down=false,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_u", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_d", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_ud", "y": 0 }, + + "down=false,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neswu", "y": 0 }, + "down=true,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neswd", "y": 0 }, + "down=true,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire": { "model": "galacticraftcore:alu_wire_neswud", "y": 0 }, + + + + + "down=false,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire" }, + + "down=false,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 180 }, + "down=false,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 270 }, + + "down=false,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 180 }, + "down=false,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 180 }, + "down=true,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 270 }, + + "down=false,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsd", "y": 90 }, + + "down=false,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsu", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsud", "y": 90 }, + + "down=false,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 90 }, + "down=false,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 180 }, + "down=false,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 90 }, + "down=true,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 180 }, + "down=true,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 180 }, + "down=false,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 180 }, + "down=true,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesw", "y": 0 }, + + "down=false,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_u", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_d", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_ud", "y": 0 }, + + "down=false,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswu", "y": 0 }, + "down=true,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswd", "y": 0 }, + "down=true,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswud", "y": 0 }, + + + + + "down=false,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire", "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_n", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_n", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_n", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_n", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nd", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nd", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ns", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ns", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nsud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nes", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nes", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nes", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nes", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesd", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesd", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ne", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ne", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ne", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ne", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ned", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ned", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ned", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ned", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_nesw", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_u", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_d", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_ud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neswu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neswd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch": { "model": "galacticraftcore:alu_wire_neswud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + + + + "down=false,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire", "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_n", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nd", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ns", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ns", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nsud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nes", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesd", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ne", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=false,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ned", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=false,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neu", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=true,north=true,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=false,south=true,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 90, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=false,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 180, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=false,north=true,south=false,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neud", "y": 270, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_nesw", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_u", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=false,south=false,up=false,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_d", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=true,east=false,north=false,south=false,up=true,west=false,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_ud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + + "down=false,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswu", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=true,up=false,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswd", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } }, + "down=true,east=true,north=true,south=true,up=true,west=true,wiretype=alu_wire_switch_heavy": { "model": "galacticraftcore:hvy_alu_wire_neswud", "y": 0, "textures": { "aluminum_wire": "galacticraftcore:blocks/aluminum_wire_switch", "particle": "galacticraftcore:blocks/aluminum_wire_switch" } } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/arclamp.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/arclamp.json new file mode 100644 index 00000000..4e5637f7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/arclamp.json @@ -0,0 +1,10 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:arclamp_base_side_model", "y": 90 }, + "facing=east": { "model": "galacticraftcore:arclamp_base_side_model", "y": 180 }, + "facing=west": { "model": "galacticraftcore:arclamp_base_side_model" }, + "facing=south": { "model": "galacticraftcore:arclamp_base_side_model", "y": 270 }, + "facing=up": { "model": "galacticraftcore:arclamp_base_model", "x": 180 }, + "facing=down": { "model": "galacticraftcore:arclamp_base_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_core.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_core.json new file mode 100644 index 00000000..85455dbf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_core.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_0_model" }], + "basictype=deco_block_0": { "model": "galacticraftcore:deco_block_0_model" }, + "basictype=deco_block_1": { "model": "galacticraftcore:deco_block_1_model" }, + "basictype=ore_copper_gc": { "model": "galacticraftcore:ore_copper_gc_model" }, + "basictype=ore_tin_gc": { "model": "galacticraftcore:ore_tin_gc_model" }, + "basictype=ore_aluminum_gc": { "model": "galacticraftcore:ore_aluminum_gc_model" }, + "basictype=ore_silicon": { "model": "galacticraftcore:ore_silicon_model" }, + "basictype=block_copper_gc": { "model": "galacticraftcore:block_copper_gc_model" }, + "basictype=block_tin_gc": { "model": "galacticraftcore:block_tin_gc_model" }, + "basictype=block_aluminum_gc": { "model": "galacticraftcore:block_aluminum_gc_model" }, + "basictype=block_meteoric_iron_gc": { "model": "galacticraftcore:block_meteoric_iron_gc_model" }, + "basictype=block_silicon_gc": { "model": "galacticraftcore:block_silicon_gc_model" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_moon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_moon.json new file mode 100644 index 00000000..d12c4ef7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/basic_block_moon.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:basic_block_moon_model" }], + "basictypemoon=ore_copper_moon": { "model": "galacticraftcore:ore_copper_moon_model" }, + "basictypemoon=ore_tin_moon": { "model": "galacticraftcore:ore_tin_moon_model" }, + "basictypemoon=ore_cheese_moon": { "model": "galacticraftcore:ore_cheese_moon_model" }, + "basictypemoon=moon_dirt_moon": { "model": "galacticraftcore:moon_dirt_moon_model" }, + "basictypemoon=moon_stone": { "model": "galacticraftcore:moon_stone_model" }, + "basictypemoon=moon_turf": { "model": "galacticraftcore:moon_turf_model" }, + "basictypemoon=ore_sapphire_moon": { "model": "galacticraftcore:ore_sapphire_moon_model" }, + "basictypemoon=moon_dungeon_brick": { "model": "galacticraftcore:moon_dungeon_brick_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/block_multi.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/block_multi.json new file mode 100644 index 00000000..9abdf051 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/block_multi.json @@ -0,0 +1,32 @@ +{ + "forge_marker": 1, + "variants": { + "type": { + "solar": { "model": "galacticraftcore:block_multi_model" }, + "ss_base": { "model": "galacticraftcore:block_multi_model" }, + "rocket_pad": { "model": "galacticraftcore:landing_pad_model" }, + "nasa_workbench": { "model": "galacticraftcore:block_multi_model" }, + "solar_panel": { "model": "galacticraftcore:block_multi_model" }, + "buggy_pad": { "model": "galacticraftcore:buggy_pad_model" }, + "miner_base": { "model": "galacticraftcore:block_multi_model" }, + "dish_large": { "model": "galacticraftcore:block_multi_model" }, + "laser_turret": { "model": "galacticraftcore:block_multi_model" }, + + "cryo_chamber": { "model": "galacticraftcore:cryo_1" } + }, + + "rendertype": { + "0": { }, + "1": { "model": "galacticraftcore:cryo_1", "y": 90 }, + "2": { "model": "galacticraftcore:cryo_1", "y": 180 }, + "3": { "model": "galacticraftcore:cryo_1", "y": 270 }, + + "4": { "model": "galacticraftcore:cryo_2" }, + "5": { "model": "galacticraftcore:cryo_2", "y": 90 }, + "6": { "model": "galacticraftcore:cryo_2", "y": 180 }, + "7": { "model": "galacticraftcore:cryo_2", "y": 270 } + }, + + "inventory": [{ "model": "galacticraftcore:block_multi_model" }] + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/boss_spawner.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/boss_spawner.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/boss_spawner.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/breatheable_air.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/breatheable_air.json new file mode 100644 index 00000000..dd9a37eb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/breatheable_air.json @@ -0,0 +1,10 @@ +{ + "forge_marker": 1, + "defaults": { "model": "galacticraftcore:breatheable_air" }, + "variants": { + "normal": [{ }], + "inventory": [{ }], + + "thermal": { "true": { }, "false": { } } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_air.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_air.json new file mode 100644 index 00000000..cb0c61df --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_air.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:breatheable_air" }, + "inventory": { "model": "galacticraftcore:breatheable_air" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_breathable_air.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_breathable_air.json new file mode 100644 index 00000000..dd9a37eb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/bright_breathable_air.json @@ -0,0 +1,10 @@ +{ + "forge_marker": 1, + "defaults": { "model": "galacticraftcore:breatheable_air" }, + "variants": { + "normal": [{ }], + "inventory": [{ }], + + "thermal": { "true": { }, "false": { } } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cargo.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cargo.json new file mode 100644 index 00000000..ebe9be80 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cargo.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:cargo_loader_model" }], + "facing=north,type=cargo_loader": { "model": "galacticraftcore:cargo_loader_model" }, + "facing=east,type=cargo_loader": { "model": "galacticraftcore:cargo_loader_model", "y": 90 }, + "facing=west,type=cargo_loader": { "model": "galacticraftcore:cargo_loader_model", "y": 270 }, + "facing=south,type=cargo_loader": { "model": "galacticraftcore:cargo_loader_model", "y": 180 }, + "facing=north,type=cargo_unloader": { "model": "galacticraftcore:cargo_unloader_model" }, + "facing=east,type=cargo_unloader": { "model": "galacticraftcore:cargo_unloader_model", "y": 90 }, + "facing=west,type=cargo_unloader": { "model": "galacticraftcore:cargo_unloader_model", "y": 270 }, + "facing=south,type=cargo_unloader": { "model": "galacticraftcore:cargo_unloader_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cheese.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cheese.json new file mode 100644 index 00000000..85582b71 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/cheese.json @@ -0,0 +1,11 @@ +{ + "variants": { + "bites=0": { "model": "galacticraftcore:cheese_uneaten_model" }, + "bites=1": { "model": "galacticraftcore:cheese_slice1_model" }, + "bites=2": { "model": "galacticraftcore:cheese_slice2_model" }, + "bites=3": { "model": "galacticraftcore:cheese_slice3_model" }, + "bites=4": { "model": "galacticraftcore:cheese_slice4_model" }, + "bites=5": { "model": "galacticraftcore:cheese_slice5_model" }, + "bites=6": { "model": "galacticraftcore:cheese_slice6_model" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/collector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/collector.json new file mode 100644 index 00000000..ee3acf42 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/collector.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:collector_model" }, + "facing=east": { "model": "galacticraftcore:collector_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:collector_model", "y": 270 }, + "facing=south": { "model": "galacticraftcore:collector_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/compact_workbench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/compact_workbench.json new file mode 100644 index 00000000..d7602616 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/compact_workbench.json @@ -0,0 +1,9 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { "model": "galacticraftcore:compact_workbench" }, + "facing=east": { "model": "galacticraftcore:compact_workbench", "y": 90 }, + "facing=west": { "model": "galacticraftcore:compact_workbench", "y": 270 }, + "facing=south": { "model": "galacticraftcore:compact_workbench", "y": 180 } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_detector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_detector.json new file mode 100644 index 00000000..b19232f0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_detector.json @@ -0,0 +1,9 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_1_model" }], + "normal": { "model": "galacticraftcore:deco_block_1_model" }, + "var=0": { "model": "galacticraftcore:deco_block_1_model" }, + "var=1": { "model": "galacticraftcore:moon_stone_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_redstone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_redstone.json new file mode 100644 index 00000000..39cf9b31 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_redstone.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_1_model" }], + "normal": { "model": "galacticraftcore:deco_block_1_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater.json new file mode 100644 index 00000000..39cf9b31 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_1_model" }], + "normal": { "model": "galacticraftcore:deco_block_1_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater_pow.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater_pow.json new file mode 100644 index 00000000..39cf9b31 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/concealed_repeater_pow.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_1_model" }], + "normal": { "model": "galacticraftcore:deco_block_1_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dishbase.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dishbase.json new file mode 100644 index 00000000..bc0777e0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dishbase.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:dishbase_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/distributor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/distributor.json new file mode 100644 index 00000000..92267f68 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/distributor.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:distributor_model" }, + "facing=east": { "model": "galacticraftcore:distributor_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:distributor_model", "y": 270 }, + "facing=south": { "model": "galacticraftcore:distributor_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dungeon_spawner.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dungeon_spawner.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/dungeon_spawner.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/emergency_box.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/emergency_box.json new file mode 100644 index 00000000..fdfc94eb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/emergency_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:emergency_box" }, + "kit=true": { "model": "galacticraftcore:emergency_box" }, + "kit=false": { "model": "galacticraftcore:emergency_box" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/enclosed.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/enclosed.json new file mode 100644 index 00000000..f5986ef9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/enclosed.json @@ -0,0 +1,23 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:enclosed_aluminum_wire_model" }], + + "type=enclosed_hv_cable": { "model": "galacticraftcore:enclosed_hv_cable_model" }, + "type=enclosed_fluid_pipe": { "model": "galacticraftcore:enclosed_fluid_pipe_model" }, + "type=enclosed_copper_cable": { "model": "galacticraftcore:enclosed_copper_cable_model" }, + "type=enclosed_gold_cable": { "model": "galacticraftcore:enclosed_gold_cable_model" }, + "type=enclosed_te_conduit": { "model": "galacticraftcore:enclosed_te_conduit_model" }, + "type=enclosed_glass_fibre_cable": { "model": "galacticraftcore:enclosed_glass_fibre_cable_model" }, + "type=enclosed_lv_cable": { "model": "galacticraftcore:enclosed_lv_cable_model" }, + "type=enclosed_pipe_items_stone": { "model": "galacticraftcore:enclosed_pipe_items_stone_model" }, + "type=enclosed_pipe_items_cobblestone": { "model": "galacticraftcore:enclosed_pipe_items_cobblestone_model" }, + "type=enclosed_pipe_fluids_stone": { "model": "galacticraftcore:enclosed_pipe_fluids_stone_model" }, + "type=enclosed_pipe_fluids_cobblestone": { "model": "galacticraftcore:enclosed_pipe_fluids_cobblestone_model" }, + "type=enclosed_pipe_power_stone": { "model": "galacticraftcore:enclosed_pipe_power_stone_model" }, + "type=enclosed_pipe_power_gold": { "model": "galacticraftcore:enclosed_pipe_power_gold_model" }, + "type=enclosed_me_cable": { "model": "galacticraftcore:enclosed_me_cable_model" }, + "type=enclosed_aluminum_wire": { "model": "galacticraftcore:enclosed_aluminum_wire_model" }, + "type=enclosed_heavy_aluminum_wire": { "model": "galacticraftcore:enclosed_heavy_aluminum_wire_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fallen_meteor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fallen_meteor.json new file mode 100644 index 00000000..025bc2d5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fallen_meteor.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:fallen_meteor_model" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe.json new file mode 100644 index 00000000..3ad62862 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe.json @@ -0,0 +1,7528 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftcore:fluid_pipe_neswud", + "transform": "forge:default-block" + }, + "variants": { + "color=white,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=orange,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=magenta,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=light_blue,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=yellow,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=lime,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=pink,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=gray,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=silver,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=cyan,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=purple,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=blue,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=brown,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=green,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=red,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=black,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe_pull.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe_pull.json new file mode 100644 index 00000000..3ad62862 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_pipe_pull.json @@ -0,0 +1,7528 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftcore:fluid_pipe_neswud", + "transform": "forge:default-block" + }, + "variants": { + "color=white,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=white,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + "color=white,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + } + }, + + "color=orange,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=orange,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + "color=orange,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_orange", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_orange" + } + }, + + "color=magenta,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=magenta,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + "color=magenta,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_magenta", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_magenta" + } + }, + + "color=light_blue,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=light_blue,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + "color=light_blue,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_light_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_light_blue" + } + }, + + "color=yellow,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=yellow,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + "color=yellow,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_yellow", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_yellow" + } + }, + + "color=lime,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=lime,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + "color=lime,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_lime", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_lime" + } + }, + + "color=pink,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=pink,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + "color=pink,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_pink", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_pink" + } + }, + + "color=gray,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=gray,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + "color=gray,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_gray", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_gray" + } + }, + + "color=silver,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=silver,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + "color=silver,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_silver", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_silver" + } + }, + + "color=cyan,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=cyan,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + "color=cyan,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_cyan", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_cyan" + } + }, + + "color=purple,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=purple,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + "color=purple,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_purple", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_purple" + } + }, + + "color=blue,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=blue,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + "color=blue,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_blue", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_blue" + } + }, + + "color=brown,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=brown,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + "color=brown,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_brown", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_brown" + } + }, + + "color=green,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=green,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + "color=green,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_green", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_green" + } + }, + + "color=red,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=red,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + "color=red,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_red", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_red" + } + }, + + "color=black,down=false,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_n", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_n", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ns", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nsd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nsud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nes", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesd", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_nesud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ne", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=false,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_ned", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neu", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=false,south=true,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 90, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=false,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 180, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=false,north=true,south=false,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neud", "y": 270, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_nesw", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=false,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_u", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=false,south=false,up=false,west=false": { + "model": "galacticraftcore:fluid_pipe_d", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=false,north=false,south=false,up=true,west=false": { + "model": "galacticraftcore:fluid_pipe_ud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + + "color=black,down=true,east=true,north=true,south=true,up=false,west=true": { + "model": "galacticraftcore:fluid_pipe_neswd", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=false,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswu", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + }, + "color=black,down=true,east=true,north=true,south=true,up=true,west=true": { + "model": "galacticraftcore:fluid_pipe_neswud", "y": 0, + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_black", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_black" + } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_tank.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_tank.json new file mode 100644 index 00000000..03295260 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fluid_tank.json @@ -0,0 +1,8 @@ +{ + "variants": { + "down=false,up=false": { "model": "galacticraftcore:tank_ud" }, + "down=true,up=false": { "model": "galacticraftcore:tank_u" }, + "down=false,up=true": { "model": "galacticraftcore:tank_d" }, + "down=true,up=true": { "model": "galacticraftcore:tank" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel.json new file mode 100644 index 00000000..ae4a5da6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:fluid", + "custom": { "fluid": "fuel" } + }, + "variants": { + "fluid": [{ }], + "inventory": [{ }] + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel_loader.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel_loader.json new file mode 100644 index 00000000..7936085e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/fuel_loader.json @@ -0,0 +1,33 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/machine_fuelloader", + "rear": "galacticraftcore:blocks/machine_fuelloader", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_oil_input", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:fuel_loader_model" }], + + "facing" : { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "msm" : { + "lr": { "model": "galacticraftcore:machine_tiered_lr" }, + "lb": { "model": "galacticraftcore:machine_tiered_lb" }, + "rl": { "model": "galacticraftcore:machine_tiered_rl" }, + "rb": { "model": "galacticraftcore:machine_tiered_rb" }, + "bl": { "model": "galacticraftcore:machine_tiered_bl" }, + "br": { "model": "galacticraftcore:machine_tiered_br" } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/glowstone_torch.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/glowstone_torch.json new file mode 100644 index 00000000..4c225e50 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/glowstone_torch.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:glowstone_torch_model" }, + "facing=east": { "model": "galacticraftcore:glowstone_torch_wall_model" }, + "facing=south": { "model": "galacticraftcore:glowstone_torch_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:glowstone_torch_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:glowstone_torch_wall_model", "y": 270 } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/grating.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/grating.json new file mode 100644 index 00000000..40e17a72 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/grating.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:grating" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad.json new file mode 100644 index 00000000..e02fc780 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:landing_pad_model" }, + "type=rocket": { "model": "galacticraftcore:landing_pad_model" }, + "type=buggy": { "model": "galacticraftcore:buggy_pad_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad_full.json new file mode 100644 index 00000000..ebf3ab7b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/landing_pad_full.json @@ -0,0 +1,7 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:landing_pad_full_model" }, + "type=rocket": { "model": "galacticraftcore:landing_pad_full_model" }, + "type=buggy": { "model": "galacticraftcore:buggy_pad_full_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine.json new file mode 100644 index 00000000..092bc946 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine.json @@ -0,0 +1,15 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north,type=coal_generator": { "model": "galacticraftcore:coal_generator_model" }, + "facing=east,type=coal_generator": { "model": "galacticraftcore:coal_generator_model", "y": 90 }, + "facing=west,type=coal_generator": { "model": "galacticraftcore:coal_generator_model", "y": 270 }, + "facing=south,type=coal_generator": { "model": "galacticraftcore:coal_generator_model", "y": 180 }, + "facing=north,type=ingot_compressor": { "model": "galacticraftcore:ingot_compressor_model" }, + "facing=east,type=ingot_compressor": { "model": "galacticraftcore:ingot_compressor_model", "y": 90 }, + "facing=west,type=ingot_compressor": { "model": "galacticraftcore:ingot_compressor_model", "y": 270 }, + "facing=south,type=ingot_compressor": { "model": "galacticraftcore:ingot_compressor_model", "y": 180 }, + + "inventory": [{ "model": "galacticraftcore:coal_generator_model" }] + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine2.json new file mode 100644 index 00000000..c6ddc501 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine2.json @@ -0,0 +1,80 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/electric_compressor", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:electric_compressor_model" }], + + "facing" : { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "msm" : { + "lr": { "model": "galacticraftcore:machine_tiered_lr" }, + "lb": { "model": "galacticraftcore:machine_tiered_lb" }, + "rl": { "model": "galacticraftcore:machine_tiered_rl" }, + "rb": { "model": "galacticraftcore:machine_tiered_rb" }, + "bl": { "model": "galacticraftcore:machine_tiered_bl" }, + "br": { "model": "galacticraftcore:machine_tiered_br" } + }, + + "type" : { + "electric_compressor": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/electric_compressor", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "circuit_fabricator": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/circuit_fabricator", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "oxygen_storage": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/oxygen_storage_module_full", + "rear": "galacticraftcore:blocks/oxygen_storage_module_full", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_oxygen_input", + "el_out": "galacticraftcore:blocks/machine_oxygen_output", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "deconstructor": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/deconstructor", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine3.json new file mode 100644 index 00000000..f97bc94c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine3.json @@ -0,0 +1,21 @@ +{ + "forge_marker": 1, + "defaults": { + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:painter_model" }], + "facing": + { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "type": + { + "painter": { "model": "galacticraftcore:painter_model" + } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine4.json new file mode 100644 index 00000000..52d18e49 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine4.json @@ -0,0 +1,47 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "front": "galacticraftcore:blocks/advanced/electric_compressor", + "rear": "galacticraftcore:blocks/advanced/machine_side", + "side": "galacticraftcore:blocks/advanced/machine_side", + "el_in": "galacticraftcore:blocks/advanced/machine_input", + "el_out": "galacticraftcore:blocks/advanced/machine_side", + "top": "galacticraftcore:blocks/advanced/machine", + "base": "galacticraftcore:blocks/advanced/machine" } + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:electric_compressor_model" }], + + "facing" : { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "msm" : { + "lr": { "model": "galacticraftcore:machine_tiered_lr" }, + "lb": { "model": "galacticraftcore:machine_tiered_lb" }, + "rl": { "model": "galacticraftcore:machine_tiered_rl" }, + "rb": { "model": "galacticraftcore:machine_tiered_rb" }, + "bl": { "model": "galacticraftcore:machine_tiered_bl" }, + "br": { "model": "galacticraftcore:machine_tiered_br" } + }, + + "type" : { + "advanced_compressor": { + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "front": "galacticraftcore:blocks/advanced/electric_compressor", + "rear": "galacticraftcore:blocks/advanced/machine_side", + "side": "galacticraftcore:blocks/advanced/machine_side", + "el_in": "galacticraftcore:blocks/advanced/machine_input", + "el_out": "galacticraftcore:blocks/advanced/machine_side", + "top": "galacticraftcore:blocks/advanced/machine", + "base": "galacticraftcore:blocks/advanced/machine" } + } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine_tiered.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine_tiered.json new file mode 100644 index 00000000..013db1aa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/machine_tiered.json @@ -0,0 +1,118 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/electric_furnace", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "variants": { + "inventory": [{ "model": "galacticraftcore:electric_furnace_model" }], + + "facing" : { + "north": { }, + "east": { "y": 90 }, + "west": { "y": 270 }, + "south": { "y": 180 } + }, + + "msm" : { + "lr": { "model": "galacticraftcore:machine_tiered_lr" }, + "lb": { "model": "galacticraftcore:machine_tiered_lb" }, + "rl": { "model": "galacticraftcore:machine_tiered_rl" }, + "rb": { "model": "galacticraftcore:machine_tiered_rb" }, + "bl": { "model": "galacticraftcore:machine_tiered_bl" }, + "br": { "model": "galacticraftcore:machine_tiered_br" } + }, + + "type" : { + "electric_furnace": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/electric_furnace", + "rear": "galacticraftcore:blocks/machine_side", + "side": "galacticraftcore:blocks/machine_side", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_side", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "arc_furnace": { + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "front": "galacticraftcore:blocks/advanced/electric_furnace", + "rear": "galacticraftcore:blocks/advanced/machine_side", + "side": "galacticraftcore:blocks/advanced/machine_side", + "el_in": "galacticraftcore:blocks/advanced/machine_input", + "el_out": "galacticraftcore:blocks/advanced/machine_side", + "top": "galacticraftcore:blocks/advanced/machine", + "base": "galacticraftcore:blocks/advanced/machine" } + }, + "energy_storage": { + "textures": { + "particle": "galacticraftcore:blocks/machine", + "front": "galacticraftcore:blocks/energy_storage_module_0", + "rear": "galacticraftcore:blocks/energy_storage_module_0", + "side": "galacticraftcore:blocks/machine", + "el_in": "galacticraftcore:blocks/machine_input", + "el_out": "galacticraftcore:blocks/machine_output", + "top": "galacticraftcore:blocks/machine", + "base": "galacticraftcore:blocks/machine" } + }, + "cluster_storage": { + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "front": "galacticraftcore:blocks/advanced/energy_storage_module_0", + "rear": "galacticraftcore:blocks/advanced/energy_storage_module_0", + "side": "galacticraftcore:blocks/advanced/machine" , + "el_in": "galacticraftcore:blocks/advanced/machine_input" , + "el_out": "galacticraftcore:blocks/advanced/machine_output", + "top": "galacticraftcore:blocks/advanced/machine", + "base": "galacticraftcore:blocks/advanced/machine" } + } + }, + + "fill_value" : { + "0": { }, + "1": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_1", "rear": "galacticraftcore:blocks/energy_storage_module_1" }}, + "2": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_2", "rear": "galacticraftcore:blocks/energy_storage_module_2" }}, + "3": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_3", "rear": "galacticraftcore:blocks/energy_storage_module_3" }}, + "4": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_4", "rear": "galacticraftcore:blocks/energy_storage_module_4" }}, + "5": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_5", "rear": "galacticraftcore:blocks/energy_storage_module_5" }}, + "6": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_6", "rear": "galacticraftcore:blocks/energy_storage_module_6" }}, + "7": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_7", "rear": "galacticraftcore:blocks/energy_storage_module_7" }}, + "8": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_8", "rear": "galacticraftcore:blocks/energy_storage_module_8" }}, + "9": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_9", "rear": "galacticraftcore:blocks/energy_storage_module_9" }}, + "10": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_10", "rear": "galacticraftcore:blocks/energy_storage_module_10" }}, + "11": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_11", "rear": "galacticraftcore:blocks/energy_storage_module_11" }}, + "12": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_12", "rear": "galacticraftcore:blocks/energy_storage_module_12" }}, + "13": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_13", "rear": "galacticraftcore:blocks/energy_storage_module_13" }}, + "14": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_14", "rear": "galacticraftcore:blocks/energy_storage_module_14" }}, + "15": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_15", "rear": "galacticraftcore:blocks/energy_storage_module_15" }}, + "16": { "textures": { "front": "galacticraftcore:blocks/energy_storage_module_16", "rear": "galacticraftcore:blocks/energy_storage_module_16" }}, + + "17": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_0", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_0" }}, + "18": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_1", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_1" }}, + "19": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_2", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_2" }}, + "20": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_3", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_3" }}, + "21": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_4", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_4" }}, + "22": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_5", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_5" }}, + "23": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_6", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_6" }}, + "24": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_7", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_7" }}, + "25": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_8", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_8" }}, + "26": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_9", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_9" }}, + "27": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_10", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_10" }}, + "28": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_11", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_11" }}, + "29": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_12", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_12" }}, + "30": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_13", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_13" }}, + "31": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_14", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_14" }}, + "32": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_15", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_15" }}, + "33": { "textures": { "front": "galacticraftcore:blocks/advanced/energy_storage_module_16", "rear": "galacticraftcore:blocks/advanced/energy_storage_module_16" }} + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/magnetic_table.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/magnetic_table.json new file mode 100644 index 00000000..4d7fa691 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/magnetic_table.json @@ -0,0 +1,12 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": { "model": "galacticraftcore:magnetic_table_model" }, + "facing=down": { "model": "galacticraftcore:magnetic_table_model", "x": 180 }, + "facing=up": { "model": "galacticraftcore:magnetic_table_model" }, + "facing=north": { "model": "galacticraftcore:magnetic_table_model", "x": 90 }, + "facing=south": { "model": "galacticraftcore:magnetic_table_model", "x": 90, "y": 180 }, + "facing=west": { "model": "galacticraftcore:magnetic_table_model", "x": 90, "y": 270 }, + "facing=east": { "model": "galacticraftcore:magnetic_table_model", "x": 90, "y": 90 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_brick.json new file mode 100644 index 00000000..61bc7756 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_brick.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftcore:moon_brick_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftcore:moon_brick_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftcore:moon_brick_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftcore:moon_brick_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_stone.json new file mode 100644 index 00000000..2743fbf6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/moon_stairs_stone.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftcore:moon_stone_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftcore:moon_stone_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftcore:moon_stone_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftcore:moon_stone_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oil.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oil.json new file mode 100644 index 00000000..d4f42852 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oil.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:fluid", + "custom": { "fluid": "oil" } + }, + "variants": { + "fluid": [{ }], + "inventory": [{ }] + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_compressor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_compressor.json new file mode 100644 index 00000000..851c8e1d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_compressor.json @@ -0,0 +1,12 @@ +{ + "variants": { + "facing=north,type=compressor": { "model": "galacticraftcore:compressor_model" }, + "facing=east,type=compressor": { "model": "galacticraftcore:compressor_model", "y": 90 }, + "facing=west,type=compressor": { "model": "galacticraftcore:compressor_model", "y": 270 }, + "facing=south,type=compressor": { "model": "galacticraftcore:compressor_model", "y": 180 }, + "facing=north,type=decompressor": { "model": "galacticraftcore:decompressor_model" }, + "facing=east,type=decompressor": { "model": "galacticraftcore:decompressor_model", "y": 90 }, + "facing=west,type=decompressor": { "model": "galacticraftcore:decompressor_model", "y": 270 }, + "facing=south,type=decompressor": { "model": "galacticraftcore:decompressor_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_detector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_detector.json new file mode 100644 index 00000000..446d3d50 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/oxygen_detector.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:detector_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/panel_lighting.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/panel_lighting.json new file mode 100644 index 00000000..34c17491 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/panel_lighting.json @@ -0,0 +1,15 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "lights": "galacticraftcore:blocks/panel_light_off", + "texture": "galacticraftcore:blocks/panel_light_off", + "particle": "blocks/glass" + }, + "model": "galacticraftcore:panel_lighting" + }, + "variants": { + "normal": [{ }], + "inventory": [{ }] + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/parachest.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/parachest.json new file mode 100644 index 00000000..2854b657 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/parachest.json @@ -0,0 +1,452 @@ +{ + "forge_marker": 1, + "variants": { + "color=white,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/plain" + } + }, + "color=white,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/plain" + } + }, + "color=white,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/plain" + } + }, + "color=white,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/plain" + } + }, + + "color=black,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/black" + } + }, + "color=black,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/black" + } + }, + "color=black,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/black" + } + }, + "color=black,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/black" + } + }, + + "color=light_blue,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/blue" + } + }, + "color=light_blue,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/blue" + } + }, + "color=light_blue,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/blue" + } + }, + "color=light_blue,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/blue" + } + }, + + "color=brown,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/brown" + } + }, + "color=brown,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/brown" + } + }, + "color=brown,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/brown" + } + }, + "color=brown,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/brown" + } + }, + + "color=blue,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/darkblue" + } + }, + "color=blue,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/darkblue" + } + }, + "color=blue,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/darkblue" + } + }, + "color=blue,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/darkblue" + } + }, + + "color=gray,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/darkgray" + } + }, + "color=gray,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgray" + } + }, + "color=gray,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgray" + } + }, + "color=gray,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgray" + } + }, + + "color=green,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/darkgreen" + } + }, + "color=green,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgreen" + } + }, + "color=green,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgreen" + } + }, + "color=green,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/darkgreen" + } + }, + + "color=silver,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/gray" + } + }, + "color=silver,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/gray" + } + }, + "color=silver,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/gray" + } + }, + "color=silver,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/gray" + } + }, + + "color=lime,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/lime" + } + }, + "color=lime,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/lime" + } + }, + "color=lime,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/lime" + } + }, + "color=lime,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/lime" + } + }, + + "color=magenta,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/magenta" + } + }, + "color=magenta,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/magenta" + } + }, + "color=magenta,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/magenta" + } + }, + "color=magenta,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/magenta" + } + }, + + "color=orange,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/orange" + } + }, + "color=orange,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/orange" + } + }, + "color=orange,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/orange" + } + }, + "color=orange,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/orange" + } + }, + + "color=pink,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/pink" + } + }, + "color=pink,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/pink" + } + }, + "color=pink,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/pink" + } + }, + "color=pink,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/pink" + } + }, + + "color=purple,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/purple" + } + }, + "color=purple,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/purple" + } + }, + "color=purple,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/purple" + } + }, + "color=purple,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/purple" + } + }, + + "color=red,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/red" + } + }, + "color=red,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/red" + } + }, + "color=red,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/red" + } + }, + "color=red,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/red" + } + }, + + "color=cyan,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/teal" + } + }, + "color=cyan,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/teal" + } + }, + "color=cyan,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/teal" + } + }, + "color=cyan,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/teal" + } + }, + + "color=yellow,facing=north": { + "model": "galacticraftcore:parachest", + "textures": { + "chute": "galacticraftcore:model/parachute/yellow" + } + }, + "color=yellow,facing=east": { + "model": "galacticraftcore:parachest", + "y": 90, + "textures": { + "chute": "galacticraftcore:model/parachute/yellow" + } + }, + "color=yellow,facing=south": { + "model": "galacticraftcore:parachest", + "y": 180, + "textures": { + "chute": "galacticraftcore:model/parachute/yellow" + } + }, + "color=yellow,facing=west": { + "model": "galacticraftcore:parachest", + "y": 270, + "textures": { + "chute": "galacticraftcore:model/parachute/yellow" + } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/platform.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/platform.json new file mode 100644 index 00000000..a9d7fcaa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/platform.json @@ -0,0 +1,10 @@ +{ + "forge_marker": 1, + "variants": { + "type=none": { "model": "galacticraftcore:platform_unset" }, + "type=nw": { "model": "galacticraftcore:platform", "y": 270 }, + "type=ne": { "model": "galacticraftcore:platform", "y": 180 }, + "type=se": { "model": "galacticraftcore:platform", "y": 90 }, + "type=sw": { "model": "galacticraftcore:platform" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/refinery.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/refinery.json new file mode 100644 index 00000000..25659afa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/refinery.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:refinery_model" }, + "facing=east": { "model": "galacticraftcore:refinery_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:refinery_model", "y": 270 }, + "facing=south": { "model": "galacticraftcore:refinery_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/rocket_workbench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/rocket_workbench.json new file mode 100644 index 00000000..3aec2c8c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/rocket_workbench.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "custom": { "flip-v": true }, + "model": "galacticraftcore:workbench.obj" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/sealer.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/sealer.json new file mode 100644 index 00000000..c60f49d4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/sealer.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "galacticraftcore:sealer_model" }, + "facing=east": { "model": "galacticraftcore:sealer_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:sealer_model", "y": 270 }, + "facing=south": { "model": "galacticraftcore:sealer_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_double.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_double.json new file mode 100644 index 00000000..8cc3bf47 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_double.json @@ -0,0 +1,13 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:deco_block_0_model" }], + "variant=tin_slab_1": { "model": "galacticraftcore:deco_block_0_model" }, + "variant=tin_slab_2": { "model": "galacticraftcore:deco_block_1_model" }, + "variant=moon_slab": { "model": "galacticraftcore:moon_stone_model" }, + "variant=moon_bricks_slab": { "model": "galacticraftcore:moon_dungeon_brick_model" }, + "variant=mars_slab": { "model": "galacticraftplanets:cobblestone_model" }, + "variant=mars_bricks_slab": { "model": "galacticraftplanets:dungeon_brick_model" }, + "variant=asteroids_slab": { "model": "galacticraftplanets:asteroid_deco_model" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_half.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_half.json new file mode 100644 index 00000000..4c370ec6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/slab_gc_half.json @@ -0,0 +1,21 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:half_slab_tin_1" }], + "half=bottom,variant=tin_slab_1": { "model": "galacticraftcore:half_slab_tin_1" }, + "half=bottom,variant=tin_slab_2": { "model": "galacticraftcore:half_slab_tin_2" }, + "half=bottom,variant=moon_slab": { "model": "galacticraftcore:half_slab_moon_stone" }, + "half=bottom,variant=moon_bricks_slab": { "model": "galacticraftcore:half_slab_moon_dungeon_brick" }, + "half=bottom,variant=mars_slab": { "model": "galacticraftcore:half_slab_mars_cobblestone" }, + "half=bottom,variant=mars_bricks_slab": { "model": "galacticraftcore:half_slab_mars_dungeon_brick" }, + "half=bottom,variant=asteroids_slab": { "model": "galacticraftcore:half_slab_asteroid" }, + + "half=top,variant=tin_slab_1": { "model": "galacticraftcore:upper_slab_tin_1" }, + "half=top,variant=tin_slab_2": { "model": "galacticraftcore:upper_slab_tin_2" }, + "half=top,variant=moon_slab": { "model": "galacticraftcore:upper_slab_moon_stone" }, + "half=top,variant=moon_bricks_slab": { "model": "galacticraftcore:upper_slab_moon_dungeon_brick" }, + "half=top,variant=mars_slab": { "model": "galacticraftcore:upper_slab_mars_cobblestone" }, + "half=top,variant=mars_bricks_slab": { "model": "galacticraftcore:upper_slab_mars_dungeon_brick" }, + "half=top,variant=asteroids_slab": { "model": "galacticraftcore:upper_slab_asteroid" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/solar.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/solar.json new file mode 100644 index 00000000..bf475acb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/solar.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftcore:basic_solar_model" }], + "facing=north,type=basic_solar": { "model": "galacticraftcore:basic_solar_model" }, + "facing=east,type=basic_solar": { "model": "galacticraftcore:basic_solar_model", "y": 90 }, + "facing=west,type=basic_solar": { "model": "galacticraftcore:basic_solar_model", "y": 270 }, + "facing=south,type=basic_solar": { "model": "galacticraftcore:basic_solar_model", "y": 180 }, + "facing=north,type=advanced_solar": { "model": "galacticraftcore:advanced_solar_model" }, + "facing=east,type=advanced_solar": { "model": "galacticraftcore:advanced_solar_model", "y": 90 }, + "facing=west,type=advanced_solar": { "model": "galacticraftcore:advanced_solar_model", "y": 270 }, + "facing=south,type=advanced_solar": { "model": "galacticraftcore:advanced_solar_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear.json new file mode 100644 index 00000000..3697a949 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_clear", + "1": "galacticraftcore:blocks/space_glass_frame_white" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#none", "Translucent": "galacticraftcore:space_glass_clear#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s1_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s2_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s3_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ns_s4_s", "Translucent": "galacticraftcore:space_glass_clear#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#none", "Translucent": "galacticraftcore:space_glass_clear#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#none", "Translucent": "galacticraftcore:space_glass_clear#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#none", "Translucent": "galacticraftcore:space_glass_clear#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ne_s1_s", "Translucent": "galacticraftcore:space_glass_clear#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#ne_s2_s", "Translucent": "galacticraftcore:space_glass_clear#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#nse_s1_s", "Translucent": "galacticraftcore:space_glass_clear#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#nse_s2_s", "Translucent": "galacticraftcore:space_glass_clear#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_clear#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_clear#base", "Solid": "galacticraftcore:space_glass_clear#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_clear#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear_tin.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear_tin.json new file mode 100644 index 00000000..fd249cb3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_clear_tin.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_clear", + "1": "galacticraftcore:blocks/space_glass_frame_tindeco" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#none", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s1_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s2_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s3_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ns_s4_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#none", "Translucent": "galacticraftcore:space_glass_clear_tin#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#none", "Translucent": "galacticraftcore:space_glass_clear_tin#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#none", "Translucent": "galacticraftcore:space_glass_clear_tin#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ne_s1_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#ne_s2_s", "Translucent": "galacticraftcore:space_glass_clear_tin#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#nse_s1_s", "Translucent": "galacticraftcore:space_glass_clear_tin#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#nse_s2_s", "Translucent": "galacticraftcore:space_glass_clear_tin#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_clear_tin#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_clear_tin#base", "Solid": "galacticraftcore:space_glass_clear_tin#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_clear_tin#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong.json new file mode 100644 index 00000000..ae10f52f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_strong", + "1": "galacticraftcore:blocks/space_glass_frame_white" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#none", "Translucent": "galacticraftcore:space_glass_strong#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s1_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s2_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s3_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ns_s4_s", "Translucent": "galacticraftcore:space_glass_strong#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#none", "Translucent": "galacticraftcore:space_glass_strong#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#none", "Translucent": "galacticraftcore:space_glass_strong#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#none", "Translucent": "galacticraftcore:space_glass_strong#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ne_s1_s", "Translucent": "galacticraftcore:space_glass_strong#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#ne_s2_s", "Translucent": "galacticraftcore:space_glass_strong#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#nse_s1_s", "Translucent": "galacticraftcore:space_glass_strong#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#nse_s2_s", "Translucent": "galacticraftcore:space_glass_strong#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_strong#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_strong#base", "Solid": "galacticraftcore:space_glass_strong#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_strong#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong_tin.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong_tin.json new file mode 100644 index 00000000..be1980ec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_strong_tin.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_strong", + "1": "galacticraftcore:blocks/space_glass_frame_tindeco" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#none", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s1_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s2_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s3_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ns_s4_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#none", "Translucent": "galacticraftcore:space_glass_strong_tin#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#none", "Translucent": "galacticraftcore:space_glass_strong_tin#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#none", "Translucent": "galacticraftcore:space_glass_strong_tin#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ne_s1_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#ne_s2_s", "Translucent": "galacticraftcore:space_glass_strong_tin#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#nse_s1_s", "Translucent": "galacticraftcore:space_glass_strong_tin#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#nse_s2_s", "Translucent": "galacticraftcore:space_glass_strong_tin#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_strong_tin#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_strong_tin#base", "Solid": "galacticraftcore:space_glass_strong_tin#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_strong_tin#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla.json new file mode 100644 index 00000000..bad1ecb1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla.json @@ -0,0 +1,107 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "0": "galacticraftcore:blocks/space_glass_vanilla", + "1": "galacticraftcore:blocks/space_glass_frame_white" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#none", "Translucent": "galacticraftcore:space_glass_vanilla#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s3_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ns_s4_s", "Translucent": "galacticraftcore:space_glass_vanilla#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#none", "Translucent": "galacticraftcore:space_glass_vanilla#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#none", "Translucent": "galacticraftcore:space_glass_vanilla#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#none", "Translucent": "galacticraftcore:space_glass_vanilla#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ne_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#ne_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#nse_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#nse_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla#base", "Solid": "galacticraftcore:space_glass_vanilla#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla_tin.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla_tin.json new file mode 100644 index 00000000..9693b895 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_glass_vanilla_tin.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:multi-layer", + "textures": { + "edge": "blocks/glass_pane_top", + "particle": "blocks/glass", + "0": "galacticraftcore:blocks/space_glass_vanilla", + "1": "galacticraftcore:blocks/space_glass_frame_tindeco" + } + }, + "variants": { + + "rot": { + "0": { }, + "y": { "transform": { "rotation": { "y": 90 }}}, + "yy": { "transform": { "rotation": { "y": 180 }}}, + "yyy": { "transform": { "rotation": { "y": 270 }}}, + "u": { "transform": { "rotation": { "x": 90 }}}, + "uy": { "transform": { "rotation": [{ "z": 90 }, { "y": 90 }]}}, + "uyy": { "transform": { "rotation": [{ "x": 270 }, { "y": 180 }]}}, + "uyyy": { "transform": { "rotation": [{ "z": 270 }, { "y": 270 }]}}, + "d": { "transform": { "rotation": { "x": 270 }}}, + "dy": { "transform": { "rotation": [{ "z": 270 }, { "y": 90 }]}}, + "dyy": { "transform": { "rotation": [{ "x": 90 }, { "y": 180 }]}}, + "dyyy": { "transform": { "rotation": [{ "z": 90 }, { "y": 270 }]}}, + "uu": { "transform": { "rotation": { "x": 180 }}}, + "uuy": { "transform": { "rotation": [{ "z": 180 }, { "y": 90 }]}}, + "uuyy": { "transform": { "rotation": [{ "x": 180 }, { "y": 180 }]}}, + "uuyyy": { "transform": { "rotation": [{ "z": 180 }, { "y": 270 }]}} + }, + + "modeltype": { + "standard": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#none", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_g" }}, + "standards1": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s1_g" }}, + "standards1b": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s1b_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s1b_g" }}, + "standards1bb": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s1bb_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s1bb_g" }}, + "standards2": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s2_g" }}, + "standards2a": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s2a_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s2a_g" }}, + "standards2b": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s2b_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s2b_g" }}, + "standards3": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s3_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s3_g" }}, + "standards4": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ns_s4_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ns_s4_g" }}, + "corner": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#none", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ne_g" }}, + "joint": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#none", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nse_g" }}, + "joinx": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#none", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nsew_g" }}, + "corner_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ne_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ne_s1_g" }}, + "corner_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#ne_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#ne_s2_g" }}, + "joint_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#nse_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nse_s1_g" }}, + "joint_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#nse_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nse_s2_g" }}, + "joinx_s": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#nsew_s1_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nsew_s1_g" }}, + "joinx_s2": { "custom": { "base": "galacticraftcore:space_glass_vanilla_tin#base", "Solid": "galacticraftcore:space_glass_vanilla_tin#nsew_s2_s", "Translucent": "galacticraftcore:space_glass_vanilla_tin#nsew_s2_g" }} + }, + + "base": [{ "model": "minecraft:cube_all", "textures": { "all": "blocks/glass" } }], + + "none": [{ "model": "galacticraftcore:dummy" }], + + "ns_g": [{ "model": "galacticraftcore:glass/glass_ns" }], + + "ns_s1_s": [{ "model": "galacticraftcore:glass/base_ns_s1" }], + "ns_s1_g": [{ "model": "galacticraftcore:glass/glass_ns_s1" }], + + "ns_s1b_s": [{ "model": "galacticraftcore:glass/base_ns_s1b" }], + "ns_s1b_g": [{ "model": "galacticraftcore:glass/glass_ns_s1b" }], + + "ns_s1bb_s": [{ "model": "galacticraftcore:glass/base_ns_s1bb" }], + "ns_s1bb_g": [{ "model": "galacticraftcore:glass/glass_ns_s1bb" }], + + "ns_s2_s": [{ "model": "galacticraftcore:glass/base_ns_s2" }], + "ns_s2_g": [{ "model": "galacticraftcore:glass/glass_ns_s2" }], + + "ns_s2a_s": [{ "model": "galacticraftcore:glass/base_ns_s2a" }], + "ns_s2a_g": [{ "model": "galacticraftcore:glass/glass_ns_s2a" }], + + "ns_s2b_s": [{ "model": "galacticraftcore:glass/base_ns_s2b" }], + "ns_s2b_g": [{ "model": "galacticraftcore:glass/glass_ns_s2b" }], + + "ns_s3_s": [{ "model": "galacticraftcore:glass/base_ns_s3" }], + "ns_s3_g": [{ "model": "galacticraftcore:glass/glass_ns_s3" }], + + "ns_s4_s": [{ "model": "galacticraftcore:glass/base_ns_s4" }], + "ns_s4_g": [{ "model": "galacticraftcore:glass/glass_ns_s4" }], + + "ne_g": [{ "model": "galacticraftcore:glass/glass_ne" }], + + "ne_s1_s": [{ "model": "galacticraftcore:glass/base_ne_s1" }], + "ne_s1_g": [{ "model": "galacticraftcore:glass/glass_ne_s1" }], + + "ne_s2_s": [{ "model": "galacticraftcore:glass/base_ne_s2" }], + "ne_s2_g": [{ "model": "galacticraftcore:glass/glass_ne_s2" }], + + "nse_g": [{ "model": "galacticraftcore:glass/glass_nse" }], + + "nse_s1_s": [{ "model": "galacticraftcore:glass/base_nse_s1" }], + "nse_s1_g": [{ "model": "galacticraftcore:glass/glass_nse_s1" }], + + "nse_s2_s": [{ "model": "galacticraftcore:glass/base_nse_s2" }], + "nse_s2_g": [{ "model": "galacticraftcore:glass/glass_nse_s2" }], + + "nsew_g": [{ "model": "galacticraftcore:glass/glass_nsew" }], + + "nsew_s1_s": [{ "model": "galacticraftcore:glass/base_nsew_s1" }], + "nsew_s1_g": [{ "model": "galacticraftcore:glass/glass_nsew_s1" }], + + "nsew_s2_s": [{ "model": "galacticraftcore:glass/base_nsew_s2" }], + "nsew_s2_g": [{ "model": "galacticraftcore:glass/glass_nsew_s2" }] + + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_station_base.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_station_base.json new file mode 100644 index 00000000..0b16ecc0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/space_station_base.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:space_station_base_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/spin_thruster.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/spin_thruster.json new file mode 100644 index 00000000..91c80805 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/spin_thruster.json @@ -0,0 +1,12 @@ +{ + "variants": { + "facing=north,rev=false": { "model": "galacticraftcore:spin_thruster_model", "y": 180 }, + "facing=east,rev=false": { "model": "galacticraftcore:spin_thruster_model", "y": 270 }, + "facing=west,rev=false": { "model": "galacticraftcore:spin_thruster_model", "y": 90 }, + "facing=south,rev=false": { "model": "galacticraftcore:spin_thruster_model" }, + "facing=north,rev=true": { "model": "galacticraftcore:spin_thruster_model", "x": 180}, + "facing=east,rev=true": { "model": "galacticraftcore:spin_thruster_model", "x": 180, "y": 90}, + "facing=west,rev=true": { "model": "galacticraftcore:spin_thruster_model", "x": 180, "y": 270}, + "facing=south,rev=true": { "model": "galacticraftcore:spin_thruster_model", "x": 180, "y": 180} + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/telemetry.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/telemetry.json new file mode 100644 index 00000000..37fd7281 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/telemetry.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftcore:telemetry_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_1.json new file mode 100644 index 00000000..99b260e3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_1.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftcore:tin_1_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftcore:tin_1_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftcore:tin_1_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftcore:tin_1_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_2.json new file mode 100644 index 00000000..57df833e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/tin_stairs_2.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftcore:tin_2_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftcore:tin_2_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftcore:tin_2_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftcore:tin_2_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/treasure_chest.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/treasure_chest.json new file mode 100644 index 00000000..86d919ad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/treasure_chest.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { + "model": "galacticraftcore:treasure_chest" + }, + "facing=east": { + "model": "galacticraftcore:treasure_chest", + "y": 90 + }, + "facing=south": { + "model": "galacticraftcore:treasure_chest", + "y": 180 + }, + "facing=west": { + "model": "galacticraftcore:treasure_chest", + "y": 270 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch.json new file mode 100644 index 00000000..61ae1dd4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:unlit_torch_model" }, + "facing=east": { "model": "galacticraftcore:unlit_torch_wall_model" }, + "facing=south": { "model": "galacticraftcore:unlit_torch_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:unlit_torch_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:unlit_torch_wall_model", "y": 270 } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_lit.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_lit.json new file mode 100644 index 00000000..82d869f2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_lit.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:unlit_torch_lit_model" }, + "facing=east": { "model": "galacticraftcore:unlit_torch_lit_wall_model" }, + "facing=south": { "model": "galacticraftcore:unlit_torch_lit_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:unlit_torch_lit_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:unlit_torch_lit_wall_model", "y": 270 } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone.json new file mode 100644 index 00000000..88e1e393 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:unlit_torch_stone_model" }, + "facing=east": { "model": "galacticraftcore:unlit_torch_stone_wall_model" }, + "facing=south": { "model": "galacticraftcore:unlit_torch_stone_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:unlit_torch_stone_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:unlit_torch_stone_wall_model", "y": 270 } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone_lit.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone_lit.json new file mode 100644 index 00000000..dc536cb5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/unlit_torch_stone_lit.json @@ -0,0 +1,9 @@ +{ + "variants": { + "facing=up": { "model": "galacticraftcore:unlit_torch_lit_stone_model" }, + "facing=east": { "model": "galacticraftcore:unlit_torch_lit_stone_wall_model" }, + "facing=south": { "model": "galacticraftcore:unlit_torch_lit_stone_wall_model", "y": 90 }, + "facing=west": { "model": "galacticraftcore:unlit_torch_lit_stone_wall_model", "y": 180 }, + "facing=north": { "model": "galacticraftcore:unlit_torch_lit_stone_wall_model", "y": 270 } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/view_screen.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/view_screen.json new file mode 100644 index 00000000..a42e2a8c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/view_screen.json @@ -0,0 +1,124 @@ +{ + "defaults": { "model": "galacticraftcore:screen" }, + "variants": { + "down=false,facing=south,left=false,right=false,up=false": { "model": "galacticraftcore:screen" }, + "down=true,facing=south,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr" }, + + "down=true,facing=south,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d" }, + "down=false,facing=south,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l" }, + "down=false,facing=south,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r" }, + "down=false,facing=south,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u" }, + + "down=false,facing=south,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur" }, + "down=true,facing=south,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr" }, + "down=false,facing=south,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul" }, + "down=true,facing=south,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl" }, + + "down=true,facing=south,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur" }, + "down=true,facing=south,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr" }, + "down=true,facing=south,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul" }, + "down=false,facing=south,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr" }, + + + "down=false,facing=west,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "y": 90 }, + "down=true,facing=west,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "y": 90 }, + + "down=true,facing=west,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "y": 90 }, + "down=false,facing=west,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "y": 90 }, + "down=false,facing=west,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "y": 90 }, + "down=false,facing=west,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "y": 90 }, + + "down=false,facing=west,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "y": 90 }, + "down=true,facing=west,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "y": 90 }, + "down=false,facing=west,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "y": 90 }, + "down=true,facing=west,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "y": 90 }, + + "down=true,facing=west,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "y": 90 }, + "down=true,facing=west,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "y": 90 }, + "down=true,facing=west,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "y": 90 }, + "down=false,facing=west,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "y": 90 }, + + + "down=false,facing=north,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "y": 180 }, + "down=true,facing=north,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "y": 180 }, + + "down=true,facing=north,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "y": 180 }, + "down=false,facing=north,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "y": 180 }, + "down=false,facing=north,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "y": 180 }, + "down=false,facing=north,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "y": 180 }, + + "down=false,facing=north,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "y": 180 }, + "down=true,facing=north,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "y": 180 }, + "down=false,facing=north,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "y": 180 }, + "down=true,facing=north,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "y": 180 }, + + "down=true,facing=north,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "y": 180 }, + "down=true,facing=north,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "y": 180 }, + "down=true,facing=north,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "y": 180 }, + "down=false,facing=north,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "y": 180 }, + + + "down=false,facing=east,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "y": 270 }, + "down=true,facing=east,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "y": 270 }, + + "down=true,facing=east,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "y": 270 }, + "down=false,facing=east,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "y": 270 }, + "down=false,facing=east,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "y": 270 }, + "down=false,facing=east,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "y": 270 }, + + "down=false,facing=east,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "y": 270 }, + "down=true,facing=east,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "y": 270 }, + "down=false,facing=east,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "y": 270 }, + "down=true,facing=east,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "y": 270 }, + + "down=true,facing=east,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "y": 270 }, + "down=true,facing=east,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "y": 270 }, + "down=true,facing=east,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "y": 270 }, + "down=false,facing=east,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "y": 270 }, + + + "down=false,facing=down,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "x": 90 }, + "down=true,facing=down,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "x": 90 }, + "down=true,facing=down,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "x": 90 }, + "down=false,facing=down,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "x": 90 }, + "down=false,facing=down,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "x": 90 }, + "down=false,facing=down,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "x": 90 }, + "down=false,facing=down,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "x": 90 }, + "down=true,facing=down,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "x": 90 }, + "down=false,facing=down,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "x": 90 }, + "down=true,facing=down,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "x": 90 }, + "down=true,facing=down,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "x": 90 }, + "down=true,facing=down,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "x": 90 }, + "down=true,facing=down,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "x": 90 }, + "down=false,facing=down,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "x": 90 }, + + "down=false,facing=up,left=false,right=false,up=false": { "model": "galacticraftcore:screen", "x": 270 }, + "down=true,facing=up,left=true,right=true,up=true": { "model": "galacticraftcore:screen_dulr", "x": 270 }, + "down=true,facing=up,left=false,right=false,up=false": { "model": "galacticraftcore:screen_d", "x": 270 }, + "down=false,facing=up,left=true,right=false,up=false": { "model": "galacticraftcore:screen_l", "x": 270 }, + "down=false,facing=up,left=false,right=true,up=false": { "model": "galacticraftcore:screen_r", "x": 270 }, + "down=false,facing=up,left=false,right=false,up=true": { "model": "galacticraftcore:screen_u", "x": 270 }, + "down=false,facing=up,left=false,right=true,up=true": { "model": "galacticraftcore:screen_ur", "x": 270 }, + "down=true,facing=up,left=false,right=true,up=false": { "model": "galacticraftcore:screen_dr", "x": 270 }, + "down=false,facing=up,left=true,right=false,up=true": { "model": "galacticraftcore:screen_ul", "x": 270 }, + "down=true,facing=up,left=true,right=false,up=false": { "model": "galacticraftcore:screen_dl", "x": 270 }, + "down=true,facing=up,left=false,right=true,up=true": { "model": "galacticraftcore:screen_dur", "x": 270 }, + "down=true,facing=up,left=true,right=true,up=false": { "model": "galacticraftcore:screen_dlr", "x": 270 }, + "down=true,facing=up,left=true,right=false,up=true": { "model": "galacticraftcore:screen_dul", "x": 270 }, + "down=false,facing=up,left=true,right=true,up=true": { "model": "galacticraftcore:screen_ulr", "x": 270 }, + + + "down=true,facing=south,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=west,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=north,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=east,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=up,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=true,facing=down,left=false,right=false,up=true": { "model": "galacticraftcore:screen" }, + "down=false,facing=south,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=west,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=north,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=east,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=up,left=true,right=true,up=false": { "model": "galacticraftcore:screen" }, + "down=false,facing=down,left=true,right=true,up=false": { "model": "galacticraftcore:screen" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/wall_gc.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/wall_gc.json new file mode 100644 index 00000000..acec4f78 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/blockstates/wall_gc.json @@ -0,0 +1,109 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "wall": "galacticraftcore:blocks/deco_block_side", + "wall_bot": "galacticraftcore:blocks/deco_block_up", + "wall_top": "galacticraftcore:blocks/deco_block" + }, + "model": "galacticraftcore:wall_post", + "uvlock": true + }, + "variants": { + "inventory": [{ }], + "north": { + "true": { + "submodel": { + "north": { "model": "galacticraftcore:wall_side" } + } + }, + "false": { + + } + }, + "east": { + "true": { + "submodel": { + "east": { "model": "galacticraftcore:wall_side", "y": 90, "uvlock": true } + } + }, + "false": { + + } + }, + "south": { + "true": { + "submodel": { + "south": { "model": "galacticraftcore:wall_side", "y": 180, "uvlock": true } + } + }, + "false": { + + } + }, + "west": { + "true": { + "submodel": { + "west": { "model": "galacticraftcore:wall_side", "y": 270, "uvlock": true } + } + }, + "false": { + + } + }, + "up": { + "true": { + "submodel": { + "up": { "model": "galacticraftcore:wall_post" } + } + }, + "false": { + + } + }, + "variant": { + "tin_1_wall": { + "textures": { + "wall": "galacticraftcore:blocks/deco_block_side", + "wall_bot": "galacticraftcore:blocks/deco_block_up", + "wall_top": "galacticraftcore:blocks/deco_block" + } + }, + "tin_2_wall": { + "textures": { + "wall": "galacticraftcore:blocks/deco_block", + "wall_bot": "galacticraftcore:blocks/deco_block", + "wall_top": "galacticraftcore:blocks/deco_block" + } + }, + "moon_stone_wall": { + "textures": { + "wall": "galacticraftcore:blocks/bottom", + "wall_bot": "galacticraftcore:blocks/bottom", + "wall_top": "galacticraftcore:blocks/bottom" + } + }, + "moon_dungeon_brick_wall": { + "textures": { + "wall": "galacticraftcore:blocks/brick", + "wall_bot": "galacticraftcore:blocks/brick", + "wall_top": "galacticraftcore:blocks/brick" + } + }, + "mars_cobblestone_wall": { + "textures": { + "wall": "galacticraftplanets:blocks/cobblestone", + "wall_bot": "galacticraftplanets:blocks/cobblestone", + "wall_top": "galacticraftplanets:blocks/cobblestone" + } + }, + "mars_dungeon_brick_wall": { + "textures": { + "wall": "galacticraftplanets:blocks/brick", + "wall_bot": "galacticraftplanets:blocks/brick", + "wall_top": "galacticraftplanets:blocks/brick" + } + } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/core-logo.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/core-logo.png new file mode 100644 index 00000000..83d49f5c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/core-logo.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cs_cz.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cs_cz.lang new file mode 100644 index 00000000..aa02607a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cs_cz.lang @@ -0,0 +1,665 @@ +command.gcastrominer.count=Hráč %s má %s těžebních souprav. +commands.dimensionteleport=%s byl/a odeslán do atmosféry%s +commands.dimensiontp.too_many=Příliž mnoho argumentů! Použití: %s +commands.gcenergyunits.invalid_units=Neplatné jednotky v příkazu /GCEnergyUnits. Použití: %s +commands.gcenergyunits.no_units=Jablek? Je potřeba uvést jednotky! Použití: %s +commands.joinrace.no_team=Je potřeba uvést tým! Použití: %s +commands.ssinvite.not_found=Nemohu najít vesmírnou stanici s tvým jménem, musíš se tam nejdříve vypravit! +commands.ssinvite.wrong_usage=Příliž málo argumentů! Použití: %s +commands.ssnewowner.wrong_usage=Nemohu najít stanici ID# - existuje vůbec? Požití: %s +commands.ssuninvite.no_player=%s není na seznamu oprávněných uživatelů stanice! +container.cargoloader.name=Nakladač +container.cargounloader.name=Vykladač +container.fuelloader.name=Palivové čerpadlo +container.lander.name=Přistávací modul +container.oxygencollector.name=Kyslikový kolektor +container.oxygencompressor.name=Kyslíkový kompresor +container.oxygendecompressor.name=Kyslíkový dekompresor +container.oxygendistributor.name=Kyslíkový distributor +container.oxygensealer.name=Systém podpory života +container.parachest.name=Truhla na padáku +container.refinery.name=Refinérie +container.solaradvanced.name=Pokročilý solární panel +container.solarbasic.name=Základní solární panel +container.spaceship.name=Raketa typ 1 +container.treasurechest.name=Pokladnice +death.attack.oxygen_suffocation=%1$s zemřel/a na hypoxii. +death.attack.spaceship_crash=%1$s zemřel/a při pádu rakety. Sakra. +death.attack.thermal=%1$s zapoměl skafandr. +dimension.moon.name=Měsic +dimension.overworld.name=Zemský povrh +dimension.sun.name=Slunce +entity.alien_villager.name=Mimozemšťan +entity.buggy.name=Bugina +entity.celestial_screen.name=Obrazovka vesmírných těles +entity.evolved_creeper.name=Vyvinutý syčák +entity.evolved_skeleton.name=Vyvinutý kostlivec +entity.evolved_skeleton_boss.name=Vyvinutý kostlivec (Boss) +entity.evolved_spider.name=Vyvinutý pavouk +entity.evolved_zombie.name=Vyvinutý zombie +entity.flag.name=Vlajka +entity.gcflag.name=Vlajka +entity.gravity_arrow.name=Šíp +entity.lander.name=Přistávací modul +entity.meteor.name=Meteorit +entity.meteor_chunk.name=Úlomek meteoritu +entity.oxygen_bubble.name=Kyslíková bublina +entity.para_chest.name=Truhla na padáku +entity.rocket_t1.name=Raketa typ 1 +galaxy.milky_way=Mléčná dráha +gc.configgui.alternate_canister_recipe=Alternativní láhve +gc.configgui.asteroids_start=Režim výzvy (Asteroidy) +gc.configgui.biome_id_base=BiomeID Základny pro GC +gc.configgui.detectable_i_ds=Vypnutelná čísla +gc.configgui.disable_cheese_moon=Nevytvářet měsíční sýr +gc.configgui.disable_copper_moon=Nevytvářet měsíční měď +gc.configgui.disable_lander=Použít na měsíci padák místo přistávacího modulu +gc.configgui.disable_moon_village_gen=Nevytvářet mimozemšťany +gc.configgui.disable_space_station_creation=Zablokování vytváření vesmírných stanic +gc.configgui.disable_spaceship_grief=Vypnout exploze raket +gc.configgui.disable_spaceship_particles=Nezobrazovat částice z motoru rakety +gc.configgui.disable_tin_moon=Nevytvářet měsíční cín +gc.configgui.disable_update_check=Vypnout kontrolu aktualizací +gc.configgui.dungeon_boss_health_mod=Modifikátor života (boss) +gc.configgui.enable_aluminum_ore_gen=Četnost hliníku +gc.configgui.enable_copper_ore_gen=Četnost mědi +gc.configgui.enable_debug=Zobrazovat ladící výstup +gc.configgui.enable_other_mods_features=Povolit externí generátory terénu +gc.configgui.enable_retrogen_oil=Vytvářet na Zemi Retrogen Oil +gc.configgui.enable_sealer_edge_checks=Ověřování vzduchového uzávěru +gc.configgui.enable_silicon_ore_gen=Četnost silikonu +gc.configgui.enable_thaum_craft_nodes=Povolit ThaumCraft Nodes na planetách +gc.configgui.enable_tin_ore_gen=Četnost cínu +gc.configgui.external_oil_gen=Četnost externí ropy +gc.configgui.force_overworld_respawn=Oživení zpět na Zemi +gc.configgui.hard_mode=Vyšší obtížnost +gc.configgui.id_achiev_base=Číslo základního ocenění +gc.configgui.id_dimension_moon=Číslo měsíční dimenze +gc.configgui.id_dimension_overworld_orbit=Číslo dimenze stanice +gc.configgui.id_dimension_overworld_orbit_static=Statické číslo dimenze stanice +gc.configgui.id_schematic_add_schematic=Číslo nového schématu +gc.configgui.id_schematic_moon_buggy=Číslo schématu buginy +gc.configgui.id_schematic_rocket_t1=Číslo schématu rakety typu 1 +gc.configgui.key_override_fuel_level=Klávesa stavu paliva +gc.configgui.key_override_toggle_adv_goggles=Klávesa brýlí +gc.configgui.map_scroll_invert=Invertovat přibližování kolečkem na mapě +gc.configgui.map_scroll_sensitivity=Ciltivost kolečka na mapě +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Zobrazit více hvězd +gc.configgui.oil_gen_factor=Četnost ropy +gc.configgui.ore_dict_silicon=OreDict název silikonu v ostatních módech +gc.configgui.other_mod_ore_gen_i_ds=Generování surovin ostatních módů na planetách +gc.configgui.override_capes=Přepisování plášťů +gc.configgui.override_map=Klávesa mapy galaxie +gc.configgui.oxygen_indicator_bottom=Posunout indikátor kyslíku dolu +gc.configgui.oxygen_indicator_left=Posunout indikátor kyslíku vlevo +gc.configgui.quick_mode=Rychlá hra (snazší) +gc.configgui.rocket_disable_overworld_return=Vypnout navrácení rakety +gc.configgui.rocket_disabled_dimensions=Nastavení dosahu raket +gc.configgui.rocket_fuel_factor=Účinnost raketového paliva +gc.configgui.sealable_i_ds=Utěsnitelné bloky +gc.configgui.space_station_energy_scalar=Modifikátor energie na stanici +gc.configgui.space_stations_require_permission=Povolení ke vstupu na stanici +gc.configgui.static_loaded_dimensions=Staticky načtené dimenze +gc.configgui.suffocation_cooldown=Čas do udušení +gc.configgui.suffocation_damage=Poškození dušením +gc.configgui.title=Nastavení jádra Galacticraftu +gc.configgui.whitelist_co_f_h_core_gen=Povolené položky CoFHCore generátoru terénu +gui.battery_slot.desc.0=Slot na baterii, vložte ji +gui.battery_slot.desc.1=nebo připojte zdroj. +gui.bed_fail.message=Sakra, co by se stalo, pokud by mi ve spánku došel kyslík? Budu potřebovat kryogenní komoru abych mohl spát ve vesmíru! +gui.buggy.accel.name=Zrychlení +gui.buggy.decel.name=Zpomelení +gui.buggy.inv.name=Inventář / Palivo +gui.buggy.storage_space=Nákladový prostor +gui.buggy.turn.name=Zatáčení vlevo-vpravo +gui.button.back.name=Zpět +gui.button.disable.name=Vypnout +gui.button.disableseal.name=Vypnout uzávěr +gui.button.enable.name=Zapnout +gui.button.enableseal.name=Spustit uzávěr +gui.button.hide_dest.name=Skrýt +gui.button.loadfuel.name=Natankovat +gui.button.loaditems.name=Naložit +gui.button.next.name=Další +gui.button.refine.name=Zpracovat +gui.button.stoploading.name=Zastavit +gui.button.stoprefine.name=Zastavit +gui.button.stopunloading.name=Zastavit +gui.button.unhide_dest.name=Zobrazit +gui.button.unloaditems.name=Vyložit +gui.button.unlockschematic.name=Odemknout další +gui.checkbox.horizontal.name=Horizontální režim +gui.checkbox.invert.name=Opačné chování +gui.checkbox.player_name.name=Jméno hráče je +gui.checkbox.player_within.name=Hráč v okruhu +gui.checkbox.redstone_signal.name=Otevře při přivedení napětí +gui.chest.warning.wrongkey=Budu potřebovat klíč typu %s abych to odemknul! +gui.choose_planet.desc.moon=Obyvatelný#Žádný kyslík#Gravitace: 18% +gui.choose_planet.desc.overworld=Plná života#Obyvatelná#Gravitace: 100% +gui.chooseplanet.alreadycreated1.name=Vesmírná stanice +gui.chooseplanet.alreadycreated2.name=je již vytvořena! +gui.chooseplanet.cannotcreate1.name=Zde nelze vytvořit +gui.chooseplanet.cannotcreate2.name=vesmírnou stanici! +gui.creative_only.desc=Pouze v kreativním módu +gui.display.nolink=Odpojeno +gui.docking_rocket.current_vel.name=Aktualní rychlost +gui.docking_rocket.distance_from.name=Vzdálenost od cíle +gui.docking_rocket.target_vel.name=Rychlost cíle +gui.docking_rocket.warning.name.0=Pro zpomalení stiskni %s +gui.docking_rocket.warning.name.1=Pro zrychlení stiskni %s +gui.dropbox.player_distance.name.0=1 metr +gui.dropbox.player_distance.name.1=2 metry +gui.dropbox.player_distance.name.2=5 metrů +gui.dropbox.player_distance.name.3=10 metrů +gui.electric_compressor.desc.0=Postup +gui.energy_storage.desc.0=Zásobárna energie +gui.energy_storage.desc.1=Energie +gui.flag.already_placed=Vlajka již umístěna! +gui.frequency_module.desc.0=Umožńuje slyšet vzdálené +gui.frequency_module.desc.1=zvuky a signály +gui.frequencymodule.warning0=Nejspíš budu potřebovat +gui.frequencymodule.warning1=pokud tady budu chtít něco slyšet. +gui.fuel_output.desc.0=Vložte prázdnou plechovku +gui.fuel_output.desc.1=do tohoto slotu pro jejich +gui.fuel_output.desc.2=naplnění z nádrže +gui.fuel_tank.desc.0=Palivová nádrž. Vyžaduje +gui.fuel_tank.desc.1=palivové čerpadlo. +gui.fuel_tank.desc.2=Ale může být také naplněna +gui.fuel_tank.desc.3=pomocí plechovek. +gui.fuel_tank.desc.4=Palivová nádrž +gui.infinite_item.desc=Nekonečno +gui.lander.velocity=Vstupní rychlost +gui.lander.velocityu=m/s +gui.lander.warning2=Zastav " +gui.lander.warning3=" zpomal! +gui.max_output.desc=Max. výstup +gui.message.addnewsch.name=Nové schéma +gui.message.apply.name=Použít +gui.message.assign_name.name=Přidělit jméno +gui.message.atmosphere.name=Atmosféra +gui.message.back.name=Zpět +gui.message.breed.name=Rodit +gui.message.bubble_visible.name=Viditelné bubliny +gui.message.can_create_space_station.name=Vesmírná stanice zde může být postavena. +gui.message.cancel.name=Zrušit +gui.message.cannot_create_space_station.name=Vesmírná stanice zde nemůže být postavena. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Klikněte znovu pro přiblížení (měsíce a satelity) +gui.message.click_again.1.name=Klikněte znovu pro přiblížení (měsíce) +gui.message.click_again.2.name=Klikněte znovu pro přiblížení (satelity) +gui.message.click_again.3.name=Klikněte znovu pro přiblížení +gui.message.clicklink=Pro přístup na Galacticraft Wiki klikněte zde +gui.message.create_ss.name=Vytvořit +gui.message.daynightcycle.name=Délka dne +gui.message.energy=Energie +gui.message.environment.name=Akcelerátor prostředí +gui.message.exit.name=Ukončit +gui.message.fuel.name=Palivo +gui.message.full.name=plný +gui.message.generating.name=Vyrábí +gui.message.grow.name=Růst +gui.message.heal.name=Léčit +gui.message.help1=Nápověda Galacticraftu +gui.message.help1a=Pro opětovné zobrazení této zprávy napište +gui.message.help2=Pro rady ohledně vesmírného programu +gui.message.help3=Pro rady ohledně paliv +gui.message.in.name=Vstup +gui.message.launch.name=Start +gui.message.max_energy=Plná energie +gui.message.meansurfacetemp.name=Střední teplota na povrchu +gui.message.moon.atmosphere.0.name=Žádná +gui.message.moon.daynightcycle.0.name=29,5 Pozemského dne +gui.message.moon.meansurfacetemp.0.name=(Den) 253 °C +gui.message.moon.meansurfacetemp.1.name=(Noc) -153 °C +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and +gui.message.moon.surfacecomposition.1.name=Traces of Cheese +gui.message.moon.surfacegravity.0.name=0,1654g +gui.message.moon.surfacegravity.1.name=(18% Pozemské) +gui.message.of.name=z +gui.message.oil.name=Ropa +gui.message.out.name=Výstup +gui.message.overworld.atmosphere.0.name=Dusík 78 % a Kyslík 21 % +gui.message.overworld.atmosphere.1.name=Obyvatelná +gui.message.overworld.daynightcycle.0.name=1 Pozemský den +gui.message.overworld.meansurfacetemp.0.name=14 °C +gui.message.overworld.surfacecomposition.0.name=Kámen, hlína +gui.message.overworld.surfacecomposition.1.name=a štěrk +gui.message.overworld.surfacegravity.0.name=1,0g +gui.message.overworld.surfacegravity.1.name=(100% Pozemské) +gui.message.prelaunch=Seznam předstartovní přípravy +gui.message.rename.name=Přejmenovat +gui.message.select_ss.name=Vyberte vesmírnou stanici +gui.message.ss_owner.name=Vlastník: +gui.message.status.name=Stav +gui.message.strengthen.name=Posílit +gui.message.surfacecomposition.name=Složení povrchu +gui.message.surfacegravity.name=Gravitace na povrchu +gui.message.thermal_status.name=Teplotní regulátor +gui.message.tier.name=Typ %d +gui.message.unnamed.name=Nepojmenováno +gui.missing_core.name.0=MicdoodleCore nenalezeno ve složce módů. +gui.missing_core.name.1=Chyba při načítání Galacticraftu +gui.missing_core.name.2=Ukončete Minecraft a nainstalujte MicdoodleCore +gui.missing_core.name.3=Klikněte zde pro stažení +gui.new_schematic.slot.desc.0=Slot pro nová schémata. +gui.new_schematic.slot.desc.1=Můžete je nalézt +gui.new_schematic.slot.desc.2=v dungeonech na planetách +gui.new_schematic.slot.desc.3=a měsících +gui.oil_tank.desc.0=Nádrž na ropu, může být naplněna +gui.oil_tank.desc.1=pomocí plechovek. +gui.oxygen.warning=Chybné uspořádání kyslíku! +gui.oxygen_compressor.slot.desc.0=Vložte sem kyslíkovou láhev, aby došlo +gui.oxygen_compressor.slot.desc.1=k jejímu naplnění dýchatelným kyslíkem. +gui.oxygen_decompressor.slot.desc.0=Vložte sem kyslíkovou láhev, +gui.oxygen_decompressor.slot.desc.1=aby došlo k jejímu vyprázdnění. +gui.oxygen_slot.desc.0=Slot na kyslík, umístěte zde tlakovou láhev +gui.oxygen_slot.desc.1=nebo připojte kyslíkový rozvod. +gui.oxygen_storage.desc.0=Zásobárna kyslíku +gui.oxygen_storage.desc.1=Kyslík +gui.oxygen_use.desc=Využití kyslíku +gui.per_second=/s +gui.player.bpm=pulz +gui.player.food=Hlad +gui.player.health=Životy +gui.player.ouch=Sakra! +gui.receiver.cannot_attach=Nemohu sem umístit přijímač! +gui.requires_controller.desc=Vyžaduje odpalovač +gui.rocket.countdown=Odpočet +gui.rocket.height=Výška +gui.rocket.inv.name=Inventář / Palivo +gui.rocket.launch.name=Start +gui.rocket.launched=Odpálena +gui.rocket.on_launchpad=Na startovací rampě +gui.rocket.speed=Rychlost +gui.rocket.turn.name=Zatáčení vlevo-vpravo +gui.rocket.updown.name=Zatáčení nahoru-dolu +gui.rocket.warning.nofuel=Nejdříve potřebuji nějaké palivo! +gui.rocket.warning.nogyroscope=Záhadné síly si s tebou hrají a gyroskopy se prudce otáčí! +gui.rocket.warning.noparachute=Nemám padák! Pokud stisknu znovu start, tak není cesta zpět! +gui.rocket_type.0=Nákladní prostor: 18 +gui.rocket_type.1=Nákladní prostor: 36 +gui.rocket_type.2=Nákladní prostor: 56 +gui.rocket_type.3=Natankovaná +gui.seconds=s +gui.sensor.advanced=Pokročilý režim +gui.sensor.advancedoff=VYP +gui.sensor.advancedon=ZAP +gui.show_bubble.desc.0=Zobrazit bubliny +gui.skeleton_boss.message=Boss zmizel, neopouštějte místnost během boje! Vstupem do místnosti se boss znovu objeví. +gui.space_race.chat.add_success=%s se připojil(a) k vesmírnému závodu! +gui.space_race.chat.already_part=Už jsi součástí vesmírného závodu! +gui.space_race.chat.invite_received=Obdržel(a) si pozvánku k připojení k vesmírnému závodu od %s. +gui.space_race.chat.not_found=Hráč jménem: %s nenalezen. +gui.space_race.chat.remove_success=%s opustil(a) vesmírný závod. +gui.space_race.chat.to_join=Pro připojení k %s použíj příkaz %s +gui.space_race.coming_soon=Již brzy! +gui.space_race.create.add_players.name=Přidat hráče +gui.space_race.create.back.name=Zpět +gui.space_race.create.brush_radius.name=Poloměr štětce +gui.space_race.create.brush_size.name=Velikost štětce +gui.space_race.create.change_color.name.0=Změň +gui.space_race.create.change_color.name.1=Tým +gui.space_race.create.change_color.name.2=Barvu +gui.space_race.create.close.name=Zavřít +gui.space_race.create.customize.name=Změň vlajku +gui.space_race.create.eraser_radius.name=Poloměr gumy +gui.space_race.create.eraser_size.name=Velikost gumy +gui.space_race.create.global_stats.name=Zobrazit globální statistiky +gui.space_race.create.invite_player.name=Pozvat hráče +gui.space_race.create.player_radius.name=Poznámka: Hráči musí být v okruhu 25 bloků! +gui.space_race.create.rem_players.name=Odstranit hráče +gui.space_race.create.remove.name=Odebrat +gui.space_race.create.remove_player.name=Odstraň hráče +gui.space_race.create.rename.name=Přejmenovat tým +gui.space_race.create.send_invite.name=Poslat pozvánku +gui.space_race.create.server_stats.name=Zobrazit statistiku serveru +gui.space_race.create.title.name=Vesmírný závod +gui.space_race.create.title.name.0=Nastavení +gui.space_race.create.title.name.1=vesmírného závodu +gui.space_race.join.member_count.name=%d členů +gui.space_race.join.name=Připojit +gui.space_race.join.owner.name=Vlastník +gui.space_race.join.title.name=Přidat se do závodu +gui.space_race.unnamed=Nepojmenovaný tým +gui.spacestation.added=%s tě označil jako oprávněného uživatele jeho/její vesmírné stanice. +gui.spacestation.addsuccess=%s úspěšně přidán(a) do seznamu oprávněných uživatelů stanice. +gui.spacestation.allow_all_false=Vaše vesmírná stanice není nyní přístupná každému. +gui.spacestation.allow_all_true=Vaše vesmírná stanice je nyní přístupná každému (pokud si to rozmyslíte použíjte /ssinvite -all). +gui.spacestation.changesuccess=Vlastník vesmírné stanice změněn z hráče %s na hráče %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=%s úspěšně odebrán(a) ze seznamu oprávněných uživatelů stanice. +gui.spacestation.to_allow_entry=aby jste mu umožnil/a vstup na stanici. +gui.spacestation.type_command=Napište +gui.status.active.name=Aktivní +gui.status.air_lock_closed.name=Vzduchový uzávěr zavřen +gui.status.air_lock_open.name=Vzduchový uzávěr otevřen +gui.status.blockedfully.name=Slunce není vidět +gui.status.blockedpartial.name=Slunce částečně vyditelné +gui.status.check_pending.name=Probíhá kontrola +gui.status.check_starting.name=Kontrola zahájena +gui.status.checking_seal.name=Kontrola uzávěru +gui.status.collecting.name=Sbírá +gui.status.collectingenergy.name=Sbírám energii +gui.status.compressing.name=Lisuje +gui.status.disabled.name=Vypnuto +gui.status.fulltank.name=Láhev je plná +gui.status.generating.name=Vyrábí +gui.status.hull_heat.name=Teplota pláště +gui.status.idle.name=Zapnuto +gui.status.missingleaves.name=Nedostatek rostlin +gui.status.missingoxygen.name=Nedostatek kyslíku +gui.status.missingpower.name=Nedostatek energie +gui.status.missingtank.name=Nekompatibilní tl. láhev +gui.status.nofuel.name=Chybí palivo +gui.status.noinvtarget.name=Cíl nemá inventář! +gui.status.noitems.name=Není co naložit! +gui.status.nooil.name=Chybí ropa +gui.status.not_available.name=N/A +gui.status.not_generating.name=Nevyrábí +gui.status.notargetload.name=Není kam nakládat! +gui.status.notargetunload.name=Není od kud vykládat! +gui.status.off.name=Vypnuto +gui.status.on.name=Zapnuto +gui.status.raining.name=Prší +gui.status.ready.name=Připraven +gui.status.refining.name=Zpracovávám +gui.status.running.name=V provozu +gui.status.sealed.name=Utěsněno +gui.status.sealerblocked.name=Uzavřen výstupní ventil! +gui.status.sun_visible.name=Slunce vyditelné +gui.status.tank_empty.name=Prázný zásobník kyslíku +gui.status.targetempty.name=Cíl je vyložen! +gui.status.targetfull.name=Cíl je plně naložen! +gui.status.unknown.name=Neznámý +gui.status.unsealed.name=Neutěsněno +gui.tank.oxygen_remaining=Zásoba kyslíku +gui.telemetry_fail.message=Nejdříve je potřeba použít frekvenční modul na sledované entitě (nebo na sobě). +gui.telemetry_fail_no_frequency_module.message=Pro použití je potřeba frekvenční modul. +gui.telemetry_fail_wearing_it.message=Pro navazování telemetrického spojení je potřeba si sundat frekvenční modul. +gui.telemetry_succeed.message=Telemetrické spojení navázáno. +gui.thermal_slot.desc.0=Slot na teplotni regulator +gui.thermal_slot.desc.1=tepelný regulátor' zde (volitelně) +gui.thermal_slot.desc.2=Poznámka: Využívá hodně energie +gui.title.air_lock.name=%sův kontroler přechodové komory +gui.tracking.message=Navazuji spojení. Klikněte pravým tlačítkem na jednotku telemetrie pro navázání spojení. +gui.warning=Varování! +gui.warning.invalid_thermal=Nefunkční tepelná ochrana! +gui.warning.noroom=Nedostatek místa! +item.air_fan.name=Kyslíkový ventilátor +item.air_vent.name=Kyslíkový výdech +item.basic_item.ambient_thermal_controller.name=Teplotní regulátor +item.basic_item.canned_food.name=Jídlo v plechovce +item.basic_item.compressed_aluminum.name=Válcovaný hliník +item.basic_item.compressed_bronze.name=Válcovaný bronz +item.basic_item.compressed_copper.name=Válcovaná měď +item.basic_item.compressed_iron.name=Válcované železo +item.basic_item.compressed_steel.name=Válcovaná ocel +item.basic_item.compressed_tin.name=Válcovaný cín +item.basic_item.dehydrated_apple.name=Dehydrované jablko +item.basic_item.dehydrated_carrot.name=Dehydrovaná mrkev +item.basic_item.dehydrated_melon.name=Dehydrovaný meloun +item.basic_item.dehydrated_potato.name=Dehydrované rajče +item.basic_item.frequency_module.name=Frekvenční modul +item.basic_item.ingot_aluminum.name=Hliníkový ingot +item.basic_item.ingot_bronze.name=Bronzový ingot +item.basic_item.ingot_copper.name=Měděný ingot +item.basic_item.ingot_steel.name=Ocelový ingot +item.basic_item.ingot_tin.name=Cínový ingot +item.basic_item.raw_silicon.name=Nezpracovaný silikon +item.basic_item.solar_module_0.name=Solární článek +item.basic_item.solar_module_1.name=Solární panel +item.basic_item.wafer_advanced.name=Pokročilý Wafer +item.basic_item.wafer_basic.name=Základní wafer +item.basic_item.wafer_solar.name=Modrý solární wafer +item.battery.name=Baterie +item.bucket_fuel.name=Kbelík s palivem +item.bucket_oil.name=Kbelík s ropou +item.buggy.name=Bugina +item.buggymat.seat.name=Sedačka k bugině +item.buggymat.storage.name=Zavazadelník k bugině +item.buggymat.wheel.name=Kolo k bugině +item.canister.copper.name=Měděná plechovka +item.canister.tin.name=Cínová plechovka +item.canvas.name=Plátno +item.cheese_block.name=Sýr +item.cheese_curd.name=Kousek sýra +item.compressed_meteoric_iron.name=Stlačené meteorické železo +item.empty_liquid_canister.name=Prázdná plechovka +item.engine.tier1booster.name=Posilovač typ 1 +item.engine.tier1engine.name=Raketový motor typ 1 +item.flag.name=Vlajka +item.fuel.name=Raketové palivo +item.fuel_canister.name=Plechovka naplněná palivem +item.fuel_canister_partial.name=Plechovka částečně naplněná palivem +item.heavy_plating.name=Plech pro těžký provoz +item.hot_description.name=Horký +item.infinite_battery.name=Nevyčerpatelná Baterie +item.infinite_oxygen.name=Nevyčerpatelná láhev kyslíku +item.key.t1.name=Klíč typ 1 +item.meteor_chunk.name=Meteorický kámen +item.meteor_chunk_hot.name=Meteorický kámen +item.meteoric_iron_ingot.name=Ingot meteorického železa +item.meteoric_iron_raw.name=Nezpracované meteorické železo +item.nose_cone.name=Špička rakety +item.oil_canister.name=Plechovka naplněná ropou +item.oil_canister_partial.name=Plechovka částečně naplněná ropou +item.oil_extractor.name=Přenosná těžební souprava +item.oxygen_concentrator.name=Kyslíkový koncentrátor +item.oxygen_gear.name=Kyslíková výstroj +item.oxygen_mask.name=Kyslíková maska +item.oxygen_tank_heavy_empty.name=Prázdná velká kyslíková láhev +item.oxygen_tank_heavy_full.name=Velká kyslíková láhev +item.oxygen_tank_light_empty.name=Prázdná malá kyslíková láhev +item.oxygen_tank_light_full.name=Malá kyslíková láhev +item.oxygen_tank_med_empty.name=Prázdná střední kyslíková láhev +item.oxygen_tank_med_full.name=Střední kyslíková láhev +item.parachute_black.name=Černý padák +item.parachute_blue.name=Světle modrý padák +item.parachute_brown.name=Hnědý padák +item.parachute_darkblue.name=Modrý padák +item.parachute_darkgray.name=Šedý padák +item.parachute_darkgreen.name=Zelený padák +item.parachute_gray.name=Světle šedý padák +item.parachute_lime.name=Světle zelený padák +item.parachute_magenta.name=Tmavě purpurový padák +item.parachute_orange.name=Oranžový padák +item.parachute_pink.name=Růžový padák +item.parachute_plain.name=Padák +item.parachute_purple.name=Fialový padák +item.parachute_red.name=Červený padák +item.parachute_teal.name=Modrozelený padák +item.parachute_yellow.name=Žlutý padák +item.rocket_fins.name=Raketové Křidélko +item.rocket_t1.name=Raketa typ 1 +item.schematic.name=Schéma konstrukčního pracoviště +item.sensor_glasses.name=Senzorové brýle +item.sensor_lens.name=Senzorové čočky +item.standard_wrench.name=Standardní klíč +item.steel_axe.name=Ocelová sekera +item.steel_boots.name=Ocelové boty +item.steel_chestplate.name=Ocelový hrudní chránič +item.steel_helmet.name=Ocelová helma +item.steel_hoe.name=Ocelová motyka +item.steel_leggings.name=Ocelové kalhoty +item.steel_pickaxe.name=Ocelový krumpáč +item.steel_pole.name=Ocelový stožár +item.steel_shovel.name=Ocelová lopata +item.steel_sword.name=Ocelový meč +item.tier1.desc=Typ 1 +item_desc.powerdraw.name=Vyžadovaná energie: %s /s +item_desc.shift.name=Stiskni %s pro více informací +item_group.galacticraft_blocks=Galacticraft Bloky +item_group.galacticraft_items=Galacticraft Předměty +keybind.map.name=Mapa galaxie +keybind.sensortoggle.name=Přepnutí detekčního módu +keybind.spaceshipinv.name=Otevření inventáře +keybind.vehiclebackward.name=Jízda vzad +keybind.vehicledown.name=Jízda dolu +keybind.vehicleforward.name=Jízda vpřed +keybind.vehicleleft.name=Jízda vlevo +keybind.vehicleright.name=Jízda vpravo +keybind.vehicleup.name=Jízda nehoru +moon.moon=Měsic +newversion.failed.name=Pokus o zjištění nové verze Galacticraftu selhal! Další pokus za 15 sekund. +newversion.success.name=Nalezena verze Galacticraftu: +planet.jupiter=Jupiter +planet.mercury=Merkur +planet.neptune=Neptun +planet.overworld=Zemský povrh +planet.saturn=Saturn +planet.uranus=Uran +planet.venus=Venuše +satellite.spacestation.overworld=Vesmírná stanice kolem Země +schematic.moonbuggy.name=Bugina +schematic.rocket_t1.name=Raketa typ 1 +schematic.rocket_t2.name=Raketa typ 2 +solarsystem.sol=Solární soustava +star.sol=Slunce +tile.air_lock_controller.name=Ovládací terminál vzduchového uzávěru +tile.air_lock_frame.description=Ramy vzduchového uzávěru, pokud jsou postaveny v obdelníkové formaci, s jedním blokem nahrazeným ovládacím terminálem, vytvoří funkční vzduchový uzávěr. +tile.air_lock_frame.name=Rám vzduchového uzávěru +tile.air_lock_seal.name=Vzduchový uzávěr +tile.aluminum_wire.alu_wire.description=Hliníkový kabel se používá k propojení zdrojů el. energie a spotřebičů. +tile.aluminum_wire.alu_wire.name=Hliníkový kabel +tile.aluminum_wire.alu_wire_heavy.description=Zesílený hliníkový kabel se používá k propojení zdrojů el. energie a spotřebičů. Jeho větší průřez umožňuje využít vyšší výkon spotřebiču typu 2. +tile.aluminum_wire.alu_wire_heavy.name=Zesílený hliníkový kabel +tile.arclamp.description=Obloukové lampy jsou používány jako silný zdroj světla pro rozsáhlé oblasti, také nutí většinu zvířat utéct. +tile.arclamp.name=Oblouková lampa +tile.basic_block_core.block_aluminum_gc.name=Hliníkový blok +tile.basic_block_core.block_copper_gc.name=Měděný blok +tile.basic_block_core.block_meteoric_iron_gc.name=Blok meteorického železa +tile.basic_block_core.block_tin_gc.name=Cínový blok +tile.basic_block_core.block_silicon_gc.name=Křemíkový blok +tile.basic_block_core.deco_block_0.name=Cínový dekorační blok +tile.basic_block_core.deco_block_1.name=Cínový dekorační blok +tile.basic_block_core.ore_aluminum_gc.name=Hliníková ruda +tile.basic_block_core.ore_copper_gc.name=Měděná ruda +tile.basic_block_core.ore_silicon.name=Křemíková ruda +tile.basic_block_core.ore_tin_gc.name=Cínová ruda +tile.basic_block_moon.bricks.name=Cihly +tile.basic_block_moon.cheesestone.name=Sýrová ruda +tile.basic_block_moon.coppermoon.name=Měděná ruda +tile.basic_block_moon.moondirt.name=Hlína +tile.basic_block_moon.moongrass.name=Měsíční povrh +tile.basic_block_moon.moonstone.name=Kámen +tile.basic_block_moon.tinmoon.name=Cínová ruda +tile.buggy_pad.description=Čerpací stanice pro buginu umožňuje natankování buginy která je na ní umístěna. Musí k ní však být připojeno palivové čerpadlo a plošina musí být umístěna ve formaci 3x3. Nelze použít ke startu raket! +tile.cargo.loader.name=Nakladač +tile.cargo.unloader.name=Vykladač +tile.cargo_loader.description=Nakladače naloží náklad do raket nebo vozidel s nákladovým prostorem. Musí být připojeny ke startovací rampě nebo čerpací stanici. +tile.cargo_unloader.description=Vykladače vyloží náklad z raket nebo vozidel s nákladovým prostorem. Musí být připojeny ke startovací rampě nebo čerpací stanici. +tile.cheese.description=Bloky síra jsou vytvářeny z měsíčního síra. Lze je umístit a sníst. +tile.cheese.name=Blok sýra +tile.circuit_fabricator.description=Stroj na výrobu solárních waferů vyrábí ze základních materiálů křemíkové wafery, které jsou používany k výrobě pokročilých strojů. +tile.coal_generator.description=Tepelný generátor spaluje uhlí a vyrábí enektřinu. Nejjednodušší ale nejméně účinná metoda výroby elektřiny. +tile.collector.description=Kyslíkový kolektor sbírá kyslík z okolní zeleně. +tile.collector.name=Kyslikový kolektor +tile.compressor.description=Lis vytváří z ingotů jejich válcované ekvivalenty. +tile.compressor_electric.description=Electrický Lis vytváří z ingotů jejich válcované ekvivalenty. Tím, že válcuje dva ingoty zároveň, se stává efektivnějším než jeho předchůdce. +tile.crude_oil.name=Ropa +tile.crude_oil_moving.name=Surová ropa +tile.crude_oil_still.name=Surová ropa +tile.dishbase.description=Parabolická anténa umožňuje sledovat pohyb vesmírné stanice a komunikovat s ní. +tile.dishbase.name=Parabolická anténa +tile.distributor.description=Kyslíkový distributor vytvoří kyslíkovou bublinu pomocí rozvodů. Toto zajistí obyvatelné podmínky uvnitř bubliny. +tile.distributor.name=Bublinový distributor kyslíku +tile.dummyblock.cryogenic_chamber.name=Kryogenní komora +tile.dummyblock.launch_pad.name=Startovací rampa +tile.dummyblock.nasa_workbench.name=Raketové konstrukční pracoviště +tile.dummyblock.solar.name=Solární panel +tile.dummyblock.space_station_base.name=Vesmírná stanice +tile.electric_furnace_tier1.description=Electrická pec je rychlejší alternativa k běžné peci. +tile.electric_furnace_tier2.description=Oblouková pec je rychlejší alternativa k běžné i elektrické peci. +tile.enclosed.aluminum_wire.name=Utěsněný hliníkový kabel +tile.enclosed.heavy_aluminum_wire.name=Utěsněný zesílený Al kabel +tile.enclosed.copper_cable.name=Utěsněný měděný kabel +tile.enclosed.description=Utěsněné bloky by měly být použity v případech kdy potřebujete vytvořit utěsněný prostor, jako například stěny základny. +tile.enclosed.glass_fibre_cable.name=Utěsněný optický kabel +tile.enclosed.gold_cable.name=Utěsněný zlatý kabel +tile.enclosed.hv_cable.name=Utěsněný VN kabel +tile.enclosed.lv_cable.name=Utěsněný sdělovací kabel +tile.enclosed.me_cable.name=Utěsněný ME kabel +tile.enclosed.fluid_pipe.name=Utěsněná kyslíková trubka +tile.enclosed.pipe_fluids_cobblestone.name=Utěsněná vodovodní trubka z dlažebního kamene +tile.enclosed.pipe_fluids_stone.name=Utěsněná kamená vodovodní trubka +tile.enclosed.pipe_items_cobblestone.name=Utěsněná trubka z dlažebního kamene +tile.enclosed.pipe_items_stone.name=Utěsněná kamená trubka +tile.enclosed.pipe_power_gold.name=Utěsněná vodivá trubka ze zlata +tile.enclosed.pipe_power_stone.name=Utěsněná vodivá trubka z kamene +tile.energy_storage_module_tier1.description=Energetická zásobárna se používá k ukládání velkého množství energie k pozdějšímu využití. +tile.energy_storage_module_tier2.description=Energetický cluster se používá k ukládání velkého množství energie k pozdějšímu využití. Umožňuje skladovat a vydávat větší množství energie než jeho předchůdce. +tile.fallen_meteor.description=Meteority mohou být nalazeny na mnoha planetách a měsících které mají řídkou nebo žádnou atmosféru. Obsahují meteorické železo. +tile.fallen_meteor.name=Spadlý metorit +tile.fuel.name=Palivo +tile.fuel_block.name=Palivo +tile.fuel_loader.description=Po připojení ke startovací rampě nebo čerpací stanici pro buginu umožní natankování rakety nebo vozidla. +tile.fuel_loader.name=Palivové čerpadlo +tile.glowstone_torch.description=Světlitové pochodně je nejlépší využívat v oblastech bez kyslíku, kde běžné pochodně nesvítí. +tile.glowstone_torch.name=Světlitová pochodeň +tile.landing_pad.buggy_fueler.name=Čerpací stanice pro buginu +tile.landing_pad.cargo_pad.name=Nákladni odpalovací rampa +tile.landing_pad.description=Startovací rampa, pokud je postavena ve formaci 3x3, umožňuje start rakety, která je na ní umístěna. Mohou k ní být přidány palivová čerpadla, nakladače a odpalovače. +tile.landing_pad.landing_pad.name=Startovací rampa +tile.landing_pad_full.name=Startovací rampa +tile.machine.0.name=Tepelná elektrárna +tile.machine.1.name=Energetická zásobárna +tile.machine.2.name=Elektrická pec +tile.machine.3.name=Kompresor +tile.machine.7.name=Elektrická oblouková pec +tile.machine.8.name=Energetický Cluster +tile.machine2.4.name=Elektrický kompresor +tile.machine2.5.name=Stroj na výrobu solárních waferů +tile.machine2.6.name=Zásobárna kyslíku +tile.moon_stairs_brick.name=Schody z měsíčního kamene (dungeon) +tile.moon_stairs_stone.name=Schody z měsíčního kamene +tile.ore_copper.name=Měděná ruda +tile.ore_tin.name=Cínová ruda +tile.oxygen_compressor.0.name=Kyslíkový kompresor +tile.oxygen_compressor.1.name=Kyslíkový dekompresor +tile.oxygen_compressor.description=Kyslíkový kompresor stlačí kyslík z vnitřních zásob do tlakových lahví. +tile.oxygen_decompressor.description=Kyslíkový dekompresor pouští kyslík z tlakových lahví do kyslíkových rozvodů. +tile.oxygen_detector.description=Detektor kyslíku vyšle signál pokud je obklopen kyslíkem. +tile.oxygen_detector.name=Detektor kyslíku +tile.oxygen_pipe.description=Kyslíková trubka tvoří rozvody kterými je možné přesouvat kyslík mezi stroji. +tile.oxygen_pipe.name=Kyslíková trubka +tile.oxygen_storage_module.description=Kyslíková zásobárna se používá k ukládání velkého množství kyslíku k pozdějšímu využití. +tile.parachest.description=Truhla na padáku spadne z nebe na některých planetách nebo něsících, jako je Země. Obsahuje raketu, palivo a náklad z předchozího startu. +tile.parachest.name=Truhla na padáku +tile.refinery.description=Vytváří z ropy a energie palivo, které je možné použít pro rakety a buginy. +tile.refinery.name=Refinérie +tile.rocket_workbench.description=Raketové konstrukční pracoviště slouží k vytváření mnoha pokročilých součástek a zařízení. Nová schémata mohou být nalezena a přidána. +tile.rocket_workbench.name=Raketové konstrukční pracoviště +tile.sapling2.birch.name=Březové větve +tile.sapling2.jungle.name=Větve z džungle +tile.sapling2.oak.name=Dubové větve +tile.sapling2.spruce.name=Smrkové větve +tile.sealer.description=Systém podpory života zajistí atmosféru v utěsněných prostorech. +tile.sealer.name=Systém podpory života +tile.slab_gc_half.moon_bricks_slab.name=Podlaha z měsíčního kamene (dungeon) +tile.slab_gc_half.moon_slab.name=Podlaha z měsíčního kamene +tile.slab_gc_half.tin_slab_1.name=Ozdobná cínová podlaha +tile.slab_gc_half.tin_slab_2.name=Ozdobná cínová podlaha +tile.solar.advanced_solar.name=Pokročilý solární panel +tile.solar.basic_solar.name=Základní solární panel +tile.solar_adv.description=Pokročilé solární panely vytváří energii ze slunečního svitu a ukládají ji k budoucímu použití. Natáčí se automaticky pro maximální účinnost. +tile.solar_basic.description=Základní solární panely vytváří energii ze slunečního svitu a ukládají ji k budoucímu použití. Nejvíce jí vyrábí odpoledne (nenatáčí se). +tile.space_station_base.name=Příchozí blok vesmírné stanice +tile.spin_thruster.description=Manévrovací trysky lze použít pro rotaci vesmírné stanice. +tile.spin_thruster.name=Manévrovací tryska +tile.telemetry.description=Toto sbírá užitečná data z propojených raket, hráčů a zvířat. Nejlepší je umístit jednotku blízko obrazovky. Spojení se navazuje pomocí frekvenčního modulu. +tile.telemetry.name=Jednotka telemetrie +tile.tin_stairs_1.name=Ozdobné cínové schody +tile.tin_stairs_2.name=Ozdobné cínové schody +tile.treasure_chest.description=Pokladnice typu 1 lze objevit v měsíčních dungeonech. Lze je odemknout po zabití bosse. +tile.treasure_chest.name=Pokladnice +tile.unlit_torch.name=Pochodeň +tile.unlit_torch_stone.name=Kamenná pochodeň +tile.unlit_torch_lit.name=Pochodeň +tile.unlit_torch_stone_lit.name=Kamenná pochodeň +tile.view_screen.description=Dekorační obrazovky přidají vesmírné stanici ten správný vzhled. Pravým tlačítkem lze měnit zobrazované informace. +tile.view_screen.name=Obrazovka +tile.wall_gc.moon.name=Stěna z měsíčního kamene +tile.wall_gc.moon_bricks.name=Stěna z měsíčního kamene (dungeon) +tile.wall_gc.tin.name=Ozdobná cínová stěna diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cy_gb.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cy_gb.lang new file mode 100644 index 00000000..01f2a5fb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/cy_gb.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport= % s fe'i anfonwyd i mewn i'r atmosffer % s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name= Cargo Loader +container.cargounloader.name= Cargo Unloader +container.fuelloader.name= Loader Tanwydd +container.lander.name= Gofod Lander +container.oxygencollector.name= Ocsigen Casglwr +container.oxygencompressor.name= Ocsigen Cywasgydd +container.oxygendecompressor.name= Ocsigen Decompressor +container.oxygendistributor.name= Ocsigen Ddosbarthu +container.oxygensealer.name= Ocsigen Sealer +container.parachest.name= Para - frest +container.refinery.name= Purfa +container.solaradvanced.name= Panel Solar Uwch +container.solarbasic.name= Panel Solar Sylfaenol +container.spaceship.name= Haen 1 Roced +container.treasurechest.name= Treasure Chest +death.attack.oxygen_suffocation= % 1 $ s rhedeg allan o ocsigen ! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. ##NEEDS TRANSLATE## +death.attack.thermal=%1$s forgot thermal protection ##NEEDS TRANSLATE## +dimension.moon.name= Moon +dimension.overworld.name= overworld +dimension.sun.name= Sun +entity.alien_villager.name= Pentrefwr Alien +entity.buggy.name= Buggy +entity.celestial_screen.name=Celestial Screen ##NEEDS TRANSLATE## +entity.evolved_creeper.name= esblygu Dringwr Bach +entity.evolved_skeleton.name= esblygu Sgerbwd +entity.evolved_skeleton_boss.name= esblygu Sgerbwd Boss +entity.evolved_spider.name= esblygu Spider +entity.evolved_zombie.name= esblygu Zombie +entity.flag.name= Flag +entity.gcflag.name=Flag ##NEEDS TRANSLATE## +entity.gravity_arrow.name= Arrow +entity.lander.name= Gofod Lander +entity.meteor.name= Meteor +entity.meteor_chunk.name=Meteor Chunk ##NEEDS TRANSLATE## +entity.oxygen_bubble.name= Ocsigen Bubble +entity.para_chest.name= Parachest +entity.rocket_t1.name= Haen 1 Roced +galaxy.milky_way=Milky Way ##NEEDS TRANSLATE## +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) ##NEEDS TRANSLATE## +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check ##NEEDS TRANSLATE## +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here ##NEEDS TRANSLATE## +gui.battery_slot.desc.1=or use a connected power source ##NEEDS TRANSLATE## +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name= Accelerate +gui.buggy.decel.name= arafu +gui.buggy.inv.name= Rhestr / Tanwydd +gui.buggy.storage_space=Storage Space ##NEEDS TRANSLATE## +gui.buggy.turn.name= Trowch i'r chwith - dde +gui.button.back.name= Yn ôl +gui.button.disable.name= Analluogi +gui.button.disableseal.name= Analluogi Seal +gui.button.enable.name= Galluogi +gui.button.enableseal.name= Galluogi Sêl +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name= Llwytho Tanwydd +gui.button.loaditems.name=Load Items ##NEEDS TRANSLATE## +gui.button.next.name= Nesaf +gui.button.refine.name= Mireinio +gui.button.stoploading.name= Stop Llwytho +gui.button.stoprefine.name= Stop Mireinio +gui.button.stopunloading.name= Stop Dadlwytho +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name= Dadlwytho Eitemau +gui.button.unlockschematic.name= Datglo Sgematig +gui.checkbox.horizontal.name=Horizontal Mode ##NEEDS TRANSLATE## +gui.checkbox.invert.name=Invert Selection ##NEEDS TRANSLATE## +gui.checkbox.player_name.name=Player name is ##NEEDS TRANSLATE## +gui.checkbox.player_within.name=Player is within ##NEEDS TRANSLATE## +gui.checkbox.redstone_signal.name=Opens on Redstone Signal ##NEEDS TRANSLATE## +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! ##NEEDS TRANSLATE## +gui.choose_planet.desc.moon=Habitable#No Oxygen#Gravity: 18% ##NEEDS TRANSLATE## +gui.choose_planet.desc.overworld= Llawn Bywyd # cyfanheddol # Disgyrchiant : 100 % +gui.chooseplanet.alreadycreated1.name= Orsaf Ofod Eisoes +gui.chooseplanet.alreadycreated2.name= Crëwyd ! +gui.chooseplanet.cannotcreate1.name= Methu creu Gofod +gui.chooseplanet.cannotcreate2.name= Orsaf yma! +gui.creative_only.desc=Creative Only ##NEEDS TRANSLATE## +gui.display.nolink=No link ##NEEDS TRANSLATE## +gui.docking_rocket.current_vel.name=Current Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.distance_from.name=Distance from Target ##NEEDS TRANSLATE## +gui.docking_rocket.target_vel.name=Target Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.0=Press %s to decelerate ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.1=Press %s to accelerate ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.0=1 Meter ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.1=2 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.2=5 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.3=10 Meters ##NEEDS TRANSLATE## +gui.electric_compressor.desc.0=Progress ##NEEDS TRANSLATE## +gui.energy_storage.desc.0=Energy Storage ##NEEDS TRANSLATE## +gui.energy_storage.desc.1=Energy ##NEEDS TRANSLATE## +gui.flag.already_placed=Flag already placed here! ##NEEDS TRANSLATE## +gui.frequency_module.desc.0=Can receive weak sound ##NEEDS TRANSLATE## +gui.frequency_module.desc.1=waves and distant signals ##NEEDS TRANSLATE## +gui.frequencymodule.warning0=I'll probably need a ##NEEDS TRANSLATE## +gui.frequencymodule.warning1=if I want to hear properly here. ##NEEDS TRANSLATE## +gui.fuel_output.desc.0=Place empty liquid canisters into ##NEEDS TRANSLATE## +gui.fuel_output.desc.1=this slot to fill them from the ##NEEDS TRANSLATE## +gui.fuel_output.desc.2=fuel tank ##NEEDS TRANSLATE## +gui.fuel_tank.desc.0=Fuel tank. Requires ##NEEDS TRANSLATE## +gui.fuel_tank.desc.1=fuel loader to fill ##NEEDS TRANSLATE## +gui.fuel_tank.desc.2=Fuel tank, can be filled ##NEEDS TRANSLATE## +gui.fuel_tank.desc.3=with fuel canisters ##NEEDS TRANSLATE## +gui.fuel_tank.desc.4=Fuel tank ##NEEDS TRANSLATE## +gui.infinite_item.desc=Infinite ##NEEDS TRANSLATE## +gui.lander.velocity= Cyflymder Mynediad +gui.lander.velocityu= m / s +gui.lander.warning2= Hold " +gui.lander.warning3= " i arafu i lawr ! +gui.max_output.desc=Max Output ##NEEDS TRANSLATE## +gui.message.addnewsch.name= Ychwanegu New Sgematig +gui.message.apply.name=Apply ##NEEDS TRANSLATE## +gui.message.assign_name.name=Assign Name ##NEEDS TRANSLATE## +gui.message.atmosphere.name=Atmosphere ##NEEDS TRANSLATE## +gui.message.back.name=Back ##NEEDS TRANSLATE## +gui.message.breed.name=Breed ##NEEDS TRANSLATE## +gui.message.bubble_visible.name=Bubble Visible ##NEEDS TRANSLATE## +gui.message.can_create_space_station.name=A Space Station can be created here! ##NEEDS TRANSLATE## +gui.message.cancel.name=Cancel ##NEEDS TRANSLATE## +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. ##NEEDS TRANSLATE## +gui.message.catalog.name=Catalog ##NEEDS TRANSLATE## +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) ##NEEDS TRANSLATE## +gui.message.click_again.1.name=Click again to zoom (view moons) ##NEEDS TRANSLATE## +gui.message.click_again.2.name=Click again to zoom (view satellites) ##NEEDS TRANSLATE## +gui.message.click_again.3.name=Click again to zoom ##NEEDS TRANSLATE## +gui.message.clicklink=Click for Galacticraft Wiki ##NEEDS TRANSLATE## +gui.message.create_ss.name=Create ##NEEDS TRANSLATE## +gui.message.daynightcycle.name=Day-night Cycle ##NEEDS TRANSLATE## +gui.message.energy=Energy ##NEEDS TRANSLATE## +gui.message.environment.name= Hwb Amgylcheddol +gui.message.exit.name=Exit ##NEEDS TRANSLATE## +gui.message.fuel.name= Tanwydd +gui.message.full.name= amser +gui.message.generating.name= Cynhyrchu +gui.message.grow.name=Grow ##NEEDS TRANSLATE## +gui.message.heal.name=Heal ##NEEDS TRANSLATE## +gui.message.help1=For Galacticraft help ##NEEDS TRANSLATE## +gui.message.help1a=To see this message again at any time, type ##NEEDS TRANSLATE## +gui.message.help2=For Space Program guidance ##NEEDS TRANSLATE## +gui.message.help3=For help with oil ##NEEDS TRANSLATE## +gui.message.in.name= Yn +gui.message.launch.name=Launch ##NEEDS TRANSLATE## +gui.message.max_energy=Max Energy ##NEEDS TRANSLATE## +gui.message.meansurfacetemp.name=Mean Surface Temp ##NEEDS TRANSLATE## +gui.message.moon.atmosphere.0.name=None ##NEEDS TRANSLATE## +gui.message.moon.daynightcycle.0.name=29.5 Earth Days ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.1.name=Traces of Cheese ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.0.name=0.1654g ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.1.name=(18% of Earth) ##NEEDS TRANSLATE## +gui.message.of.name=of ##NEEDS TRANSLATE## +gui.message.oil.name=Oil ##NEEDS TRANSLATE## +gui.message.out.name= Allan +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen ##NEEDS TRANSLATE## +gui.message.overworld.atmosphere.1.name=Supports life ##NEEDS TRANSLATE## +gui.message.overworld.daynightcycle.0.name=1 Earth Day ##NEEDS TRANSLATE## +gui.message.overworld.meansurfacetemp.0.name=14C ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.1.name=gravel ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.0.name=1.0g ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.1.name=(100% of Earth) ##NEEDS TRANSLATE## +gui.message.prelaunch=Pre-launch checklist ##NEEDS TRANSLATE## +gui.message.rename.name=Rename ##NEEDS TRANSLATE## +gui.message.select_ss.name=Select a Space Station ##NEEDS TRANSLATE## +gui.message.ss_owner.name=Owner: ##NEEDS TRANSLATE## +gui.message.status.name= Statws +gui.message.strengthen.name=Strengthen ##NEEDS TRANSLATE## +gui.message.surfacecomposition.name=Surface Composition ##NEEDS TRANSLATE## +gui.message.surfacegravity.name=Surface Gravity ##NEEDS TRANSLATE## +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=Tier %d ##NEEDS TRANSLATE## +gui.message.unnamed.name=Unnamed ##NEEDS TRANSLATE## +gui.missing_core.name.0=MicdoodleCore not found in mods folder ##NEEDS TRANSLATE## +gui.missing_core.name.1=Galacticraft failed to load ##NEEDS TRANSLATE## +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore ##NEEDS TRANSLATE## +gui.missing_core.name.3=Click here to open download page ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.0=New schematic slot. You ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.1=can find new schematics ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.2=by completing dungeons ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.3=on planets and moons ##NEEDS TRANSLATE## +gui.oil_tank.desc.0=Oil tank, can be filled ##NEEDS TRANSLATE## +gui.oil_tank.desc.1=with oil canisters ##NEEDS TRANSLATE## +gui.oxygen.warning=Oxygen Setup is Invalid! ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister or tank ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.0=Oxygen Storage ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.1=Oxygen ##NEEDS TRANSLATE## +gui.oxygen_use.desc=Oxygen Use ##NEEDS TRANSLATE## +gui.per_second=/s ##NEEDS TRANSLATE## +gui.player.bpm=bpm ##NEEDS TRANSLATE## +gui.player.food=Food ##NEEDS TRANSLATE## +gui.player.health=Health ##NEEDS TRANSLATE## +gui.player.ouch=ouch!!!! ##NEEDS TRANSLATE## +gui.receiver.cannot_attach=Cannot attach receiver here! ##NEEDS TRANSLATE## +gui.requires_controller.desc=Requires Launch Controller ##NEEDS TRANSLATE## +gui.rocket.countdown=Countdown ##NEEDS TRANSLATE## +gui.rocket.height=Height ##NEEDS TRANSLATE## +gui.rocket.inv.name=Inventory / Fuel ##NEEDS TRANSLATE## +gui.rocket.launch.name=Launch ##NEEDS TRANSLATE## +gui.rocket.launched=Launched ##NEEDS TRANSLATE## +gui.rocket.on_launchpad=On launchpad ##NEEDS TRANSLATE## +gui.rocket.speed=Speed ##NEEDS TRANSLATE## +gui.rocket.turn.name=Turn left-right ##NEEDS TRANSLATE## +gui.rocket.updown.name=Turn up-down ##NEEDS TRANSLATE## +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! ##NEEDS TRANSLATE## +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! ##NEEDS TRANSLATE## +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! ##NEEDS TRANSLATE## +gui.rocket_type.0=Storage Space: 18 ##NEEDS TRANSLATE## +gui.rocket_type.1=Storage Space: 36 ##NEEDS TRANSLATE## +gui.rocket_type.2=Storage Space: 56 ##NEEDS TRANSLATE## +gui.rocket_type.3=Pre-fueled ##NEEDS TRANSLATE## +gui.seconds=s +gui.sensor.advanced= Uwch Ddelw +gui.sensor.advancedoff= OFF +gui.sensor.advancedon= AR +gui.show_bubble.desc.0=Show Bubble ##NEEDS TRANSLATE## +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. ##NEEDS TRANSLATE## +gui.space_race.chat.add_success=%s has joined the Space Race! ##NEEDS TRANSLATE## +gui.space_race.chat.already_part=You are already a part of this space race! ##NEEDS TRANSLATE## +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. ##NEEDS TRANSLATE## +gui.space_race.chat.not_found=Could not find player with name: %s ##NEEDS TRANSLATE## +gui.space_race.chat.remove_success=%s has been removed from the Space Race. ##NEEDS TRANSLATE## +gui.space_race.chat.to_join=To join %s use command %s ##NEEDS TRANSLATE## +gui.space_race.coming_soon=Coming Soon ##NEEDS TRANSLATE## +gui.space_race.create.add_players.name=Add Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.back.name=Back ##NEEDS TRANSLATE## +gui.space_race.create.brush_radius.name=Brush Radius ##NEEDS TRANSLATE## +gui.space_race.create.brush_size.name=Brush Size ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.0=Change ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.1=Team ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.2=Color ##NEEDS TRANSLATE## +gui.space_race.create.close.name=Close ##NEEDS TRANSLATE## +gui.space_race.create.customize.name=Customize Flag ##NEEDS TRANSLATE## +gui.space_race.create.eraser_radius.name=Eraser Radius ##NEEDS TRANSLATE## +gui.space_race.create.eraser_size.name=Eraser Size ##NEEDS TRANSLATE## +gui.space_race.create.global_stats.name=View Global Stats ##NEEDS TRANSLATE## +gui.space_race.create.invite_player.name=Invite Player ##NEEDS TRANSLATE## +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) ##NEEDS TRANSLATE## +gui.space_race.create.rem_players.name=Remove Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.remove.name=Remove ##NEEDS TRANSLATE## +gui.space_race.create.remove_player.name=Remove Player ##NEEDS TRANSLATE## +gui.space_race.create.rename.name=Rename Team ##NEEDS TRANSLATE## +gui.space_race.create.send_invite.name=Send Invite ##NEEDS TRANSLATE## +gui.space_race.create.server_stats.name=View Server Stats ##NEEDS TRANSLATE## +gui.space_race.create.title.name=Space Race Manager ##NEEDS TRANSLATE## +gui.space_race.create.title.name.0=Space Race ##NEEDS TRANSLATE## +gui.space_race.create.title.name.1=Manager ##NEEDS TRANSLATE## +gui.space_race.join.member_count.name=%d members ##NEEDS TRANSLATE## +gui.space_race.join.name=Join ##NEEDS TRANSLATE## +gui.space_race.join.owner.name=Owner ##NEEDS TRANSLATE## +gui.space_race.join.title.name=Join Space Race ##NEEDS TRANSLATE## +gui.space_race.unnamed=Unnamed Team ##NEEDS TRANSLATE## +gui.spacestation.added=You've been added to %s's Space Station accepted players! ##NEEDS TRANSLATE## +gui.spacestation.addsuccess=Successfully added %s to Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= ##NEEDS TRANSLATE## +gui.spacestation.removesuccess=Successfully removed %s from Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.to_allow_entry=to allow another player to enter this space station! ##NEEDS TRANSLATE## +gui.spacestation.type_command=Type ##NEEDS TRANSLATE## +gui.status.active.name= Actif +gui.status.air_lock_closed.name=Air Lock Closed ##NEEDS TRANSLATE## +gui.status.air_lock_open.name=Air Lock Open ##NEEDS TRANSLATE## +gui.status.blockedfully.name= Haul Ddim yn Gweladwy +gui.status.blockedpartial.name= Sul Rhannol Gweladwy +gui.status.check_pending.name=Check Pending ##NEEDS TRANSLATE## +gui.status.check_starting.name=Check Starting ##NEEDS TRANSLATE## +gui.status.checking_seal.name=Checking Seal ##NEEDS TRANSLATE## +gui.status.collecting.name=Collecting ##NEEDS TRANSLATE## +gui.status.collectingenergy.name= Casglu Ynni +gui.status.compressing.name=Compressing ##NEEDS TRANSLATE## +gui.status.disabled.name= Anabl +gui.status.fulltank.name= Ocsigen Tank Llawn +gui.status.generating.name=Generating ##NEEDS TRANSLATE## +gui.status.hull_heat.name=Hull Heat ##NEEDS TRANSLATE## +gui.status.idle.name= Idle +gui.status.missingleaves.name= Dim digon Blociau Leaf +gui.status.missingoxygen.name= Dim digon Ocsigen +gui.status.missingpower.name= Dim digon Power +gui.status.missingtank.name= Naddo Tanc Ocsigen Dilys +gui.status.nofuel.name= Naddo Tanwydd i'w Lwytho ! +gui.status.noinvtarget.name= Naddo Rhestr ar Targed ! +gui.status.noitems.name= Dim eitemau i'w Lwytho ! +gui.status.nooil.name= Naddo Olew +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Not Generating ##NEEDS TRANSLATE## +gui.status.notargetload.name= Dim Targed i'w Lwytho Into ! +gui.status.notargetunload.name= Naddo targed ar Dadlwytho ! +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name= Raining +gui.status.ready.name= Barod +gui.status.refining.name= Mireinio +gui.status.running.name=Running ##NEEDS TRANSLATE## +gui.status.sealed.name= selio +gui.status.sealerblocked.name=Output Vent Blocked! ##NEEDS TRANSLATE## +gui.status.sun_visible.name=Sun Visible ##NEEDS TRANSLATE## +gui.status.tank_empty.name=Oxygen Tank Empty ##NEEDS TRANSLATE## +gui.status.targetempty.name= Cerbydau Targed yn Wag ! +gui.status.targetfull.name= Cerbyd Mae'r targed yn llawn ! +gui.status.unknown.name= Anhysbys +gui.status.unsealed.name= Heb ei selio +gui.tank.oxygen_remaining=Oxygen Remaining ##NEEDS TRANSLATE## +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) ##NEEDS TRANSLATE## +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! ##NEEDS TRANSLATE## +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! ##NEEDS TRANSLATE## +gui.telemetry_succeed.message=Telemetry link created. ##NEEDS TRANSLATE## +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s's Air Lock Controller ##NEEDS TRANSLATE## +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. ##NEEDS TRANSLATE## +gui.warning= RHYBUDD ! +gui.warning.invalid_thermal=Invalid Thermal Protection! ##NEEDS TRANSLATE## +gui.warning.noroom=Not enough room! ##NEEDS TRANSLATE## +item.air_fan.name=Fan ocsigen +item.air_vent.name=Vent ocsigen +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name= Can Bwyd +item.basic_item.compressed_aluminum.name=Alwminiwm cywasgedig +item.basic_item.compressed_bronze.name=Efydd cywasgedig +item.basic_item.compressed_copper.name=Copr cywasgedig +item.basic_item.compressed_iron.name=Haearn cywasgedig +item.basic_item.compressed_steel.name=Steel cywasgedig +item.basic_item.compressed_tin.name=Tun cywasgedig +item.basic_item.dehydrated_apple.name=Apple Dadhydradedig +item.basic_item.dehydrated_carrot.name= Dadhydradedig Moron +item.basic_item.dehydrated_melon.name= Melon Dadhydradedig +item.basic_item.dehydrated_potato.name= Dadhydradedig Tatws +item.basic_item.frequency_module.name= Modiwl Amlder +item.basic_item.ingot_aluminum.name=Alwminiwm Ingot +item.basic_item.ingot_bronze.name=Efydd Ingot +item.basic_item.ingot_copper.name=Copr Ingot +item.basic_item.ingot_steel.name=Steel Ingot +item.basic_item.ingot_tin.name=Tun Ingot +item.basic_item.raw_silicon.name=Raw Silicon +item.basic_item.solar_module_0.name=Modiwl Solar Sengl +item.basic_item.solar_module_1.name=Panel Solar llawn +item.basic_item.wafer_advanced.name=Advanced Wafer +item.basic_item.wafer_basic.name=Basic Wafer +item.basic_item.wafer_solar.name=Blue Solar Wafer +item.battery.name=Batri +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Bygi +item.buggymat.seat.name=Bygi Sedd +item.buggymat.storage.name=Bygi Blwch Storio +item.buggymat.wheel.name=bygi Olwyn +item.canister.copper.name=Copr gall +item.canister.tin.name=Tun gall +item.canvas.name=Gynfas +item.cheese_block.name=Block of Cheese ##NEEDS TRANSLATE## +item.cheese_curd.name=Cheese Curd ##NEEDS TRANSLATE## +item.compressed_meteoric_iron.name=Compressed Meteoric Iron ##NEEDS TRANSLATE## +item.empty_liquid_canister.name=Gwag Liquid canister +item.engine.tier1booster.name=Haen 1 Booster +item.engine.tier1engine.name=Haen 1 Rocket Engine +item.flag.name=Flag ##NEEDS TRANSLATE## +item.fuel.name=Tanwydd Rocket +item.fuel_canister.name=Canister Tanwydd Llenwi +item.fuel_canister_partial.name=Canister Tanwydd Llenwi Rhannol +item.heavy_plating.name=Plât trwm-Dyletswydd +item.hot_description.name=Poeth +item.infinite_battery.name=Batri ddiddiwedd +item.infinite_oxygen.name=Infinite Oxygen Supply ##NEEDS TRANSLATE## +item.key.t1.name=Haen 1 Dungeon Allweddol +item.meteor_chunk.name=Throwable Meteor Chunk +item.meteor_chunk_hot.name=Throwable Meteor Chunk +item.meteoric_iron_ingot.name=Meteoric Iron Ingot ##NEEDS TRANSLATE## +item.meteoric_iron_raw.name=Raw Meteoric Iron ##NEEDS TRANSLATE## +item.nose_cone.name=Cone trwyn +item.oil_canister.name=Llenwi Olew canister +item.oil_canister_partial.name=Llenwi Rhannol Canister Olew +item.oil_extractor.name=Symudol Olew Echdynnu +item.oxygen_concentrator.name=Crynodyddion ocsigen +item.oxygen_gear.name=Gear ocsigen +item.oxygen_mask.name=Mwgwd ocsigen +item.oxygen_tank_heavy_empty.name=Gwag Tanc Ocsigen trwm +item.oxygen_tank_heavy_full.name=Tank Ocsigen trwm +item.oxygen_tank_light_empty.name=Gwag Tanc Ocsigen Golau +item.oxygen_tank_light_full.name=Tank Ocsigen golau +item.oxygen_tank_med_empty.name=Gwag Tanc Ocsigen Canolig +item.oxygen_tank_med_full.name=Tank Ocsigen Canolig +item.parachute_black.name=Du Parasiwt +item.parachute_blue.name=Blue Light Parasiwt +item.parachute_brown.name=Brown Parasiwt +item.parachute_darkblue.name=Blue Parasiwt +item.parachute_darkgray.name=Gray Parasiwt +item.parachute_darkgreen.name=Green Parasiwt +item.parachute_gray.name=Light Gray Parasiwt +item.parachute_lime.name=Lime Parasiwt +item.parachute_magenta.name=Magenta Parasiwt +item.parachute_orange.name=Orange Parasiwt +item.parachute_pink.name=Pinc Parasiwt +item.parachute_plain.name=Parasiwt +item.parachute_purple.name=Porffor Parasiwt +item.parachute_red.name=Red Parasiwt +item.parachute_teal.name=Gwyrddlas Parasiwt +item.parachute_yellow.name=Parasiwt melyn +item.rocket_fins.name=Ffindir roced +item.rocket_t1.name=Haen 1 Rocket +item.schematic.name=NASA Fainc Sgematig +item.sensor_glasses.name=Glasses synhwyrydd +item.sensor_lens.name=synhwyrydd Lens +item.standard_wrench.name= Safon Wrench +item.steel_axe.name= Axe Dyletswydd trwm +item.steel_boots.name= Boots Dyletswydd trwm +item.steel_chestplate.name= Dyletswydd trwm Chestplate +item.steel_helmet.name= Dyletswydd trwm Helmed +item.steel_hoe.name= trwm Dyletswydd Hoe +item.steel_leggings.name= Leggings Dyletswydd trwm +item.steel_pickaxe.name= Dyletswydd trwm pickaxe +item.steel_pole.name=dur Pole +item.steel_shovel.name= Dyletswydd trwm Rhaw +item.steel_sword.name= Dyletswydd trwm Cleddyf +item.tier1.desc=Haen 1 +item_desc.powerdraw.name=Power required: %s /s ##NEEDS TRANSLATE## +item_desc.shift.name=Press %s for more info ##NEEDS TRANSLATE## +item_group.galacticraft_blocks=Galacticraft Blocks ##NEEDS TRANSLATE## +item_group.galacticraft_items=Galacticraft Items ##NEEDS TRANSLATE## +keybind.map.name= [ GC ] Galaxy Map +keybind.sensortoggle.name= [ GC ] Toggle Synhwyrydd Gogls Modd +keybind.spaceshipinv.name= [ GC ] Rhestr llong ofod Agored +keybind.vehiclebackward.name= [ GC ] Cerbyd YnÔl Allweddol +keybind.vehicledown.name= [ GC ] Cerbyd Down Allweddol +keybind.vehicleforward.name= [ GC ] Cerbyd Ymlaen Allweddol +keybind.vehicleleft.name= [ GC ] Cerbyd Chwith Allweddol +keybind.vehicleright.name= [ GC ] Cerbyd Hawl Allweddol +keybind.vehicleup.name= [ GC ] Cerbyd Up Allweddol +moon.moon=Moon ##NEEDS TRANSLATE## +newversion.failed.name= Galacticraft Wedi methu diweddaru'r siec ! Ceisio eto mewn 15 eiliad +newversion.success.name= Galacticraft fersiwn o bell o hyd : +planet.jupiter=Jupiter ##NEEDS TRANSLATE## +planet.mercury=Mercury ##NEEDS TRANSLATE## +planet.neptune=Neptune ##NEEDS TRANSLATE## +planet.overworld=Overworld ##NEEDS TRANSLATE## +planet.saturn=Saturn ##NEEDS TRANSLATE## +planet.uranus=Uranus ##NEEDS TRANSLATE## +planet.venus=Venus ##NEEDS TRANSLATE## +satellite.spacestation.overworld=Overworld Space Station ##NEEDS TRANSLATE## +schematic.moonbuggy.name= Moon Buggy +schematic.rocket_t1.name= Haen 1 Roced +schematic.rocket_t2.name= Haen 2 Roced +solarsystem.sol=Sol ##NEEDS TRANSLATE## +star.sol=Sol ##NEEDS TRANSLATE## +tile.air_lock_controller.name= Awyr Lock Rheolwr +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name= Awyr Lock Ffrâm +tile.air_lock_seal.name= Awyr Lock Seal +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name= Alwminiwm Wire +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Transfers at a faster rate than it's predecessor. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name= Wire Alwminiwm trwm +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Arc Lamp ##NEEDS TRANSLATE## +tile.basic_block_core.block_aluminum_gc.name= Alwminiwm Bloc +tile.basic_block_core.block_copper_gc.name= Bloc Copr +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron ##NEEDS TRANSLATE## +tile.basic_block_core.block_tin_gc.name= Bloc Tin +tile.basic_block_core.deco_block_0.name= Tin Addurno Bloc +tile.basic_block_core.deco_block_1.name= Tin Addurno Bloc +tile.basic_block_core.ore_aluminum_gc.name= Alwminiwm Mwyn +tile.basic_block_core.ore_copper_gc.name= Copr Mwyn +tile.basic_block_core.ore_silicon.name= Silicon Mwyn +tile.basic_block_core.ore_tin_gc.name= Mwyn Tun +tile.basic_block_moon.bricks.name=Bricks ##NEEDS TRANSLATE## +tile.basic_block_moon.cheesestone.name=Cheese Ore ##NEEDS TRANSLATE## +tile.basic_block_moon.coppermoon.name=Copper Ore ##NEEDS TRANSLATE## +tile.basic_block_moon.moondirt.name=Dirt ##NEEDS TRANSLATE## +tile.basic_block_moon.moongrass.name=Moon Turf ##NEEDS TRANSLATE## +tile.basic_block_moon.moonstone.name=Stone ##NEEDS TRANSLATE## +tile.basic_block_moon.tinmoon.name=Tin Ore ##NEEDS TRANSLATE## +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name= Cargo Loader +tile.cargo.unloader.name= Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Block of Cheese ##NEEDS TRANSLATE## +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name= Ocsigen Casglwr +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name= Olew crai +tile.crude_oil_still.name= Olew crai +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Communications Dish ##NEEDS TRANSLATE## +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name= Bubble Ocsigen Ddosbarthu +tile.dummyblock.cryogenic_chamber.name= cryogenig Siambr +tile.dummyblock.launch_pad.name= Roced Pad Lansio +tile.dummyblock.nasa_workbench.name= NASA Workbench +tile.dummyblock.solar.name= Panel Solar +tile.dummyblock.space_station_base.name= Gofod Gorsaf Sylfaen +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name= gellir eu selio Alwminiwm Wire +tile.enclosed.heavy_aluminum_wire.name= gellir eu selio trwm Alwminiwm Wire +tile.enclosed.copper_cable.name= gellir eu selio Copr Cable +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name= gellir eu selio Ffeibr Gwydr Cable +tile.enclosed.gold_cable.name= gellir eu selio Aur Cable +tile.enclosed.hv_cable.name= gellir eu selio HV Cable +tile.enclosed.lv_cable.name= gellir eu selio Cable Ultra - isel ar hyn o bryd +tile.enclosed.me_cable.name= gellir eu selio ME Cable +tile.enclosed.fluid_pipe.name= gellir eu selio Pipe Ocsigen +tile.enclosed.pipe_fluids_cobblestone.name= gellir eu selio Pipe Cobblestone dal dwr +tile.enclosed.pipe_fluids_stone.name= gellir eu selio Stone Pipe dal dwr +tile.enclosed.pipe_items_cobblestone.name= gellir eu selio Cobblestone Cludiant Pipe +tile.enclosed.pipe_items_stone.name= gellir eu selio Stone Cludiant Pipe +tile.enclosed.pipe_power_gold.name= gellir eu selio Golden ddargludol Pipe +tile.enclosed.pipe_power_stone.name= gellir eu selio Stone ddargludol Pipe +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name= Trig Meteor +tile.fuel.name= Tanwydd +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name= Tanwydd Loader +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name= Glowstone Torch +tile.landing_pad.buggy_fueler.name= Bygi Tanio Pad +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad ##NEEDS TRANSLATE## +tile.landing_pad.description=Landing Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name= Roced Pad Lansio +tile.landing_pad_full.name= Roced Pad Lansio +tile.machine.0.name= Glo Generator +tile.machine.1.name= Storio Modiwl Ynni +tile.machine.2.name= Electric Ffwrnais +tile.machine.3.name= Cywasgydd +tile.machine.7.name=Electric Arc Furnace ##NEEDS TRANSLATE## +tile.machine.8.name=Energy Storage Cluster ##NEEDS TRANSLATE## +tile.machine2.4.name= Electric Cywasgydd +tile.machine2.5.name= Cylchdaith Ffabrigeiddiwr +tile.machine2.6.name= Storio Ocsigen Modiwl +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.moon_stairs_stone.name=Moon Rock Stairs ##NEEDS TRANSLATE## +tile.ore_copper.name= Copr Mwyn +tile.ore_tin.name= Mwyn Tun +tile.oxygen_compressor.0.name= Ocsigen Cywasgydd +tile.oxygen_compressor.1.name= Ocsigen Decompressor +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name= Synhwyrydd Ocsigen +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name= Ocsigen Pipe +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name= Parachest +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name= Purfa +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name= NASA Workbench +tile.sapling2.birch.name= Birch Glasbren +tile.sapling2.jungle.name= Jungle Glasbren +tile.sapling2.oak.name= Oak Glasbren +tile.sapling2.spruce.name= sbriws Glasbren +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name= Ocsigen Sealer +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.moon_slab.name=Moon Rock Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.solar.advanced_solar.name= Panel Solar Uwch +tile.solar.basic_solar.name= Panel Solar Sylfaenol +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Space Station Arrival Block ##NEEDS TRANSLATE## +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Spin Thruster ##NEEDS TRANSLATE## +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Telemetry Unit ##NEEDS TRANSLATE## +tile.tin_stairs_1.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.tin_stairs_2.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name= Treasure Chest +tile.unlit_torch.name= Torch +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name= Torch +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Display Screen ##NEEDS TRANSLATE## +tile.wall_gc.moon.name=Moon Rock Wall ##NEEDS TRANSLATE## +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall ##NEEDS TRANSLATE## +tile.wall_gc.tin.name=Tin Decoration Wall ##NEEDS TRANSLATE## diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/de_de.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/de_de.lang new file mode 100644 index 00000000..fa838a70 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/de_de.lang @@ -0,0 +1,743 @@ +checklist.create_grapple.key=Greifhaken herstellen +checklist.equip_oxygen_suit.key=Sauerstoffanzug ausrüsten +checklist.equip_parachute.key=Fallschirm ausrüsten +commands.emergencykit=%s hat ein Notfallpaket erhalten! +command.gcastrominer.count=Die Astromineranzahl von Spieler %s ist %s +commands.dimensionteleport=%s wurde in die Atmosphäre geschickt%s +commands.dimensiontp.too_many=Dieser Befehl enthält zu viele Argumente! Handhabung: %s +commands.gcenergyunits.invalid_units=Ungültige Einheit im Befehl /GCEnergyUnits. Handhabung: %s +commands.gcenergyunits.no_units=Die Einheit muss festgelegt werden! Handhabung: %s +commands.gchouston.confirm.1=Hier ist Mission Control, bitte wiederholen? +commands.gchouston.confirm.2=(Gebe /gchouston noch einmal zur Bestätigung ein.) +commands.gchouston.fail=Dieser Befehl ist nur im Weltraum (oder im Kreativmodus) verfügbar. +commands.gchouston.help.1=Uh, Houston, we've had a problem.... +commands.gchouston.help.2=(/gchouston eingeben, um die Mission abzubrechen und nach Hause zurückzukehren.) +commands.gchouston.noop=Dieser Befehl kann nur von Operatoren auf andere Spieler angewendet werden. +commands.gchouston.success=Bitte warten, %s, du wirst zu deiner Heimatposition auf der Oberwelt teleportiert. +commands.joinrace.no_team=Das Team muss festgelegt werden! Handhabung: %s +commands.ssinvite.not_found=Konnte keine Raumstation für dich finden, du musst zuerst einmal dorthin reisen! +commands.ssinvite.wrong_usage=Dieser Befehl enthält nicht genügend Argumente! Handhabung: %s +commands.ssnewowner.wrong_usage=Die Raumstations-ID konnte nicht erkannt werden - existiert sie überhaupt? Handhabung: %s +commands.ssuninvite.no_player=Der Spieler mit dem Namen %s konnte auf deiner Raumstations-Liste nicht gefunden werden! +container.cargoloader.name=Frachtlader +container.cargounloader.name=Frachtentlader +container.fuelloader.name=Treibstofflader +container.lander.name=Weltraum-Lander +container.magneticcrafting.name=Handwerk +container.oxygencollector.name=Sauerstoffsammler +container.oxygencompressor.name=Sauerstoffkompressor +container.oxygendecompressor.name=Sauerstoffdekompressor +container.oxygendistributor.name=Sauerstoffverteiler +container.oxygensealer.name=Sauerstoffversiegeler +container.parachest.name=Paratruhe +container.refinery.name=Raffinerie +container.solaradvanced.name=Fortgeschrittenes Solarmodul +container.solarbasic.name=Basis-Solarmodul +container.spaceship.name=Rakete (Stufe 1) +container.treasurechest.name=Schatztruhe +death.attack.meteor_chunk=%1$s wurde von Meteortrümmern getroffen! +death.attack.oxygen_suffocation=%1$s ist der Sauerstoff ausgegangen! +death.attack.spaceship_crash=Die Rakete von %1$s hat sich selbst in den Boden gerammt. Ups. +death.attack.sulphuric_acid=%1$s wurde in Schwefelsäure zersetzt. +death.attack.thermal=%1$s hat vergessen, dass Temperaturen nicht überall gleich sind. +dimension.moon.name=Mond +dimension.overworld.name=Oberwelt +dimension.sun.name=Sonne +entity.alien_villager.name=Alien-Dorfbewohner +entity.buggy.name=Mondrover +entity.celestial_screen.name=Himmelsbildschirm +entity.evolved_creeper.name=Entwickelter Creeper +entity.evolved_skeleton.name=Entwickeltes Skelett +entity.evolved_skeleton_boss.name=Entwickelter Skelett-Boss +entity.evolved_spider.name=Entwickelte Spinne +entity.evolved_zombie.name=Entwickelter Zombie +entity.evolved_enderman.name=Entwickelter Enderman +entity.evolved_witch.name=Entwickelte Hexe +entity.flag.name=Flagge +entity.gcflag.name=Flagge +entity.gravity_arrow.name=Pfeil +entity.lander.name=Weltraum-Landekapsel +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteorbrocken +entity.oxygen_bubble.name=Sauerstoffblase +entity.para_chest.name=Paratruhe +entity.rocket_t1.name=Raumschiff +galaxy.milky_way=Milchstraße +gc.configgui.alternate_canister_recipe=Alternatives Kanister-Rezept +gc.configgui.asteroids_flags=Herausforderungsmodus-Flags +gc.configgui.asteroids_start=Herausforderungsmodus (Asteroiden-Start) +gc.configgui.biome_id_base=Basis-Biom-ID +gc.configgui.detectable_i_ds=Erkennbare IDs +gc.configgui.disable_biome_type_registrations=Biomtyp-Registrierung deaktivieren +gc.configgui.disable_cheese_moon=Mond - Käse-Generierung deaktivieren +gc.configgui.disable_copper_moon=Mond - Kupfer-Generierung deaktivieren +gc.configgui.disable_lander=Mond-Lander deaktivieren +gc.configgui.disable_moon_village_gen=Mond - Dorf-Generierung deaktivieren +gc.configgui.disable_ore_dict_space_metals=GC-Metalle müssen in Rezepten benutzt werden +gc.configgui.disable_sapphire_moon=Mond - Saphirerz-Generierung deaktivieren +gc.configgui.disable_space_station_creation=Erstellen von Raumstationen deaktivieren +gc.configgui.disable_spaceship_grief=Raketen-Explosionen deaktivieren +gc.configgui.disable_spaceship_particles=Raketen-Partikel deaktivieren +gc.configgui.disable_tin_moon=Mond - Zinn-Generierung deaktivieren +gc.configgui.disable_update_check=Überprüfen auf Updates deaktivieren +gc.configgui.disable_vehicle_camera_changes=Vivecraft - Third-Person und Zoom deaktivieren +gc.configgui.dungeon_boss_health_mod=Dungeon-Boss - Gesundheits-Modifikator +gc.configgui.enable_aluminum_ore_gen=Oberwelt - Aluminium-Generierung +gc.configgui.enable_copper_ore_gen=Oberwelt - Kupfer-Generierung +gc.configgui.enable_debug=Debug-Nachrichten in Konsole zeigen +gc.configgui.enable_other_mods_features=Generierung aller anderen Mods aktivieren +gc.configgui.enable_retrogen_oil=Oberwelt - Öl neu generieren +gc.configgui.enable_sealer_edge_checks=Versiegeler - Rand-Überprüfungen +gc.configgui.enable_silicon_ore_gen=Oberwelt - Silizium-Generierung +gc.configgui.enable_space_race_manager_popup=Wettrennen ins All-Manager-Popup aktivieren +gc.configgui.enable_thaum_craft_nodes=ThaumCraft-Nodien auf Planeten aktivieren +gc.configgui.enable_tin_ore_gen=Oberwelt - Zinn-Generierung +gc.configgui.external_oil_gen=Externe Ölgeneration +gc.configgui.force_overworld_respawn=Oberwelt-Respawn erzwingen +gc.configgui.hard_mode=Höhere Schwierigkeit +gc.configgui.id_achiev_base=Basis-Erfolgs-ID +gc.configgui.id_dimension_moon=Mond - Dimensionstyp-ID +gc.configgui.id_dimension_overworld=Dimension der Oberwelt +gc.configgui.id_dimension_overworld_orbit=Raumstation - Dimensionstyp-ID +gc.configgui.id_dimension_overworld_orbit_static=Statische Raumstation - Dimensionstyp-ID +gc.configgui.id_schematic_add_schematic="Bauplan hinzufügen" - Schematic-ID +gc.configgui.id_schematic_moon_buggy=Mondrover - Schematic-ID +gc.configgui.id_schematic_rocket_t1=Rakete (Stufe 1) - Schematic-ID +gc.configgui.key_override_fuel_level=Taste setzen: Raketentreibstoff-GUI +gc.configgui.key_override_toggle_adv_goggles=Taste setzen: Erweiterte Brillen +gc.configgui.map_scroll_invert=Map-Scrollen umkehren +gc.configgui.map_scroll_sensitivity=Map-Scrollen - Maus-Empfindlichkeit +gc.configgui.meteor_block_damage=Meteor-Schaden aktivieren +gc.configgui.meteor_spawn_mod=Meteor-Spawn-Modifikator +gc.configgui.more_stars=Mehr Sterne anzeigen +gc.configgui.oil_gen_factor=Ölgenerations-Faktor +gc.configgui.ore_dict_silicon=OreDict-Name von Silizium +gc.configgui.other_mod_ore_gen_i_ds=Benutzerdefinierte Erze auf Planeten generieren +gc.configgui.override_capes=Spender-Capes überschreiben +gc.configgui.override_map=Taste setzen: Galaxiekarte +gc.configgui.oxygen_indicator_bottom=Sauerstoff-Indikator nach unten verschieben +gc.configgui.oxygen_indicator_left=Sauerstoff-Indikator nach links verschieben +gc.configgui.planet_worldborders=Maximale x,z-Koordinaten für Mondlandung +gc.configgui.quick_mode=Schnelles Spiel (einfacher) +gc.configgui.rocket_disable_overworld_return=Rakete - Rückkehr auf die Oberwelt deaktivieren +gc.configgui.rocket_disabled_dimensions=Rakete - Deaktivierte Dimensionen +gc.configgui.rocket_fuel_factor=Raketentreibstoff-Faktor +gc.configgui.sealable_i_ds=Versiegelbare Blöcke +gc.configgui.space_station_energy_scalar=Raumstationen-Energie-Modifikator +gc.configgui.space_stations_require_permission=Raumstationen-Rechte +gc.configgui.static_loaded_dimensions=Statisch geladene Dimensionen +gc.configgui.staticLoadedNewSS=Neue Raumstationen statisch laden? +gc.configgui.suffocation_cooldown=Erstickungs-Abklingzeit +gc.configgui.suffocation_damage=Erstickungs-Schaden +gc.configgui.title=Galacticraft Core-Konfiguration +gc.configgui.use_old_fuel_fluid_i_d=Veraltete "fuelgc"-Registrierung verwenden +gc.configgui.use_old_oil_fluid_i_d=Veraltete "oilgc"-Registrierung verwenden +gc.configgui.whitelist_co_f_h_core_gen=Nur CoFHCore-Generierung +gui.battery_slot.desc.0=Batterieslot, platziere hier eine Batterie +gui.battery_slot.desc.1=oder schließe eine Energiequelle an. +gui.bed_fail.message=Ich brauche eine kryogene Kammer, wenn ich im Weltraum schlafen möchte! +gui.buggy.accel.name=Beschleunigen +gui.buggy.decel.name=Verlangsamen +gui.buggy.inv.name=Inventar / Treibstoff +gui.buggy.storage_space=Lagerraum +gui.buggy.turn.name=Links-rechts bewegen +gui.button.back.name=Zurück +gui.button.disable.name=Deaktivieren +gui.button.disableseal.name=Deaktivieren +gui.button.enable.name=Aktivieren +gui.button.enableseal.name=Aktivieren +gui.button.hide_dest.name=Verstecken +gui.button.loadfuel.name=Treibstoff laden +gui.button.loaditems.name=Gegenstände laden +gui.button.next.name=Weiter +gui.button.paintapply.name=Farbe anwenden +gui.button.paintmix.name=Farbe mischen +gui.button.paintreset.name=Farbe zurücksetzen +gui.button.refine.name=Raffinieren +gui.button.stoploading.name=Beladen stoppen +gui.button.stoprefine.name=Raffination stoppen +gui.button.stopunloading.name=Entladen stoppen +gui.button.unhide_dest.name=Einblenden +gui.button.unloaditems.name=Gegenstände entladen +gui.button.unlockschematic.name=Freischalten +gui.checkbox.horizontal.name=Horizontalmodus +gui.checkbox.invert.name=Auswahl umkehren +gui.checkbox.player_name.name=Spielername ist +gui.checkbox.player_within.name=Spieler innerhalb +gui.checkbox.redstone_signal.name=Öffne bei Redstone-Signal +gui.chest.warning.wrongkey=Ich brauche wohl einen Dungeonschlüssel der Stufe %s, um das zu entsperren! +gui.choose_planet.desc.moon=Bewohnbar#Kein Sauerstoff#Gravitation: 18% +gui.choose_planet.desc.overworld=Bewohnt#Bewohnbar#Gravitation: 100% +gui.chooseplanet.alreadycreated1.name=Raumstation bereits +gui.chooseplanet.alreadycreated2.name=erstellt! +gui.chooseplanet.cannotcreate1.name=Kann die Raumstation +gui.chooseplanet.cannotcreate2.name=hier nicht erstellen! +gui.creative_only.desc=Nur Kreativ-Modus +gui.display.nolink=Keine Verbindung! +gui.docking_rocket.current_vel.name=Aktuelle Geschw. +gui.docking_rocket.distance_from.name=Entfernung zum Ziel +gui.docking_rocket.target_vel.name=Zielgeschw. +gui.docking_rocket.warning.name.0=Drücke %s zum Bremsen +gui.docking_rocket.warning.name.1=Drücke %s zum Beschleunigen +gui.dropbox.player_distance.name.0=1 Meter +gui.dropbox.player_distance.name.1=2 Meter +gui.dropbox.player_distance.name.2=5 Meter +gui.dropbox.player_distance.name.3=10 Meter +gui.electric_compressor.desc.0=Fortschritt +gui.energy_storage.desc.0=Energiespeicher +gui.energy_storage.desc.1=Energie +gui.flag.already_placed=Hier ist bereits eine Flagge platziert! +gui.frequency_module.desc.0=Kann schwache Geräuschwellen +gui.frequency_module.desc.1=und entfernte Signale empfangen +gui.frequencymodule.warning0=Ich brauche wohl ein +gui.frequencymodule.warning1=, wenn ich hier vernünftig hören möchte. +gui.fuel_output.desc.0=Platziere leere Flüssigkeitskanister in +gui.fuel_output.desc.1=diesem Slot, um sie aus dem +gui.fuel_output.desc.2=Treibstofftank aufzufüllen +gui.fuel_tank.desc.0=Treibstofftank. Es benötigt einen +gui.fuel_tank.desc.1=Treibstofflader, um einen +gui.fuel_tank.desc.2=Treibstofftank zum Befüllen, kann +gui.fuel_tank.desc.3=mit Treibstoffkanistern befüllt werden +gui.fuel_tank.desc.4=Treibstofftank +gui.infinite_item.desc=Unendlich +gui.lander.velocity=Eintrittsgeschwindigkeit +gui.lander.velocityu=m/s +gui.lander.warning2=Halte " +gui.lander.warning3=", um zu verlangsamen! +gui.max_output.desc=Max. Output +gui.message.addnewsch.name=Neuen Bauplan hinzufügen +gui.message.apply.name=Anwenden +gui.message.assign_name.name=Namen vergeben +gui.message.atmosphere.name=Atmosphäre +gui.message.back.name=Zurück +gui.message.breed.name=Aufziehen +gui.message.bubble_visible.name=Blase Sichtbar +gui.message.can_create_space_station.name=Eine Raumstation kann hier erstellt werden! +gui.message.cancel.name=Abbrechen +gui.message.cannot_create_space_station.name=Eine Raumstation kann hier leider nicht erstellt werden. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Nochmal klicken zum Zoomen (zeigt Monde & Satelliten) +gui.message.click_again.1.name=Nochmal klicken zum Zoomen (zeigt Monde) +gui.message.click_again.2.name=Nochmal klicken zum Zoomen (zeigt Satelliten) +gui.message.click_again.3.name=Nochmal klicken zum Zoomen +gui.message.clicklink=Klicke, um zum Galacticraft Wiki zu gelangen +gui.message.create_ss.name=Erstellen +gui.message.daynightcycle.name=Tag-Nacht-Rhythmus +gui.message.energy=Energie +gui.message.environment.name=Ökologischer Boost +gui.message.exit.name=Schließen +gui.message.fuel.name=Treibstoff +gui.message.full.name=voll +gui.message.generating.name=Generieren +gui.message.grow.name=Wachsen +gui.message.heal.name=Heilen +gui.message.help1=Für die Galacticraft Hilfe +gui.message.help1a=Um diese Meldung erneut anzuzeigen, benutze: +gui.message.help2=Für die Weltraumprogrammanleitung +gui.message.help3=Für Hilfe bezüglich Öl +gui.message.in.name=In +gui.message.launch.name=Starten +gui.message.max_energy=Max. Energie +gui.message.meansurfacetemp.name=Oberflächen-Durchschnittstemp. +gui.message.moon.atmosphere.0.name=Keine +gui.message.moon.daynightcycle.0.name=29,5 Erdtage +gui.message.moon.meansurfacetemp.0.name=(Helle Seite) 253°C +gui.message.moon.meansurfacetemp.1.name=(Dunkle Seite) -153°C +gui.message.moon.surfacecomposition.0.name=Basaltgestein und +gui.message.moon.surfacecomposition.1.name=Spuren von Käse +gui.message.moon.surfacegravity.0.name=0,1654g +gui.message.moon.surfacegravity.1.name=(18% der Erde) +gui.message.of.name=von +gui.message.oil.name=Öl +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Stickstoff und Sauerstoff +gui.message.overworld.atmosphere.1.name=Ermöglicht Leben +gui.message.overworld.daynightcycle.0.name=1 Erdtag +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Stein, Erde und +gui.message.overworld.surfacecomposition.1.name=Kies +gui.message.overworld.surfacegravity.0.name=1,0g +gui.message.overworld.surfacegravity.1.name=(100% der Erde) +gui.message.prelaunch=Vor dem Start - Checkliste +gui.message.rename.name=Umbenennen +gui.message.select_ss.name=Wähle eine Raumstation +gui.message.ss_owner.name=Besitzer: +gui.message.status.name=Status +gui.message.strengthen.name=Stärken +gui.message.surfacecomposition.name=Oberflächenbeschaffenheit +gui.message.surfacegravity.name=Oberflächenanziehung +gui.message.thermal_status.name=Temperaturkontrolle +gui.message.tier.name=Stufe %d +gui.message.unnamed.name=Unbenannt +gui.missing_core.name.0=MicdoodleCore nicht gefunden im Mods-Ordner +gui.missing_core.name.1=Galacticraft konnte nicht geladen werden +gui.missing_core.name.2=Schließe Minecraft und installiere MicdoodleCore +gui.missing_core.name.3=Klicke hier, um die Download-Seite zu öffnen +gui.new_schematic.slot.desc.0=Bauplan-Slot. Du kannst +gui.new_schematic.slot.desc.1=neue Baupläne durch das +gui.new_schematic.slot.desc.2=Beenden von Dungeons auf +gui.new_schematic.slot.desc.3=Planeten und Monden finden. +gui.oil_tank.desc.0=Öltank, kann mit +gui.oil_tank.desc.1=Ölkanistern befüllt werden +gui.oxygen.warning=Achtung! Keine Sauerstoffversorgung! +gui.oxygen_compressor.slot.desc.0=Kompressortankslot, plaziere hier einen +gui.oxygen_compressor.slot.desc.1=Sauerstofftank um ihn mit Sauerstoff zu füllen. +gui.oxygen_decompressor.slot.desc.0=Dekompressortankslot, plaziere hier einen +gui.oxygen_decompressor.slot.desc.1=Sauerstofftank um ihn zu entleeren. +gui.oxygen_slot.desc.0=Sauerstoffslot, plaziere hier einen Sauerstoffkanister oder +gui.oxygen_slot.desc.1=Tank oder benutze eine angschlossene Sauerstoffversorgung. +gui.oxygen_storage.desc.0=Sauerstoffspeicher +gui.oxygen_storage.desc.1=Sauerstoff +gui.oxygen_use.desc=Sauerstoffverbrauch +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Hunger +gui.player.health=Gesundheit +gui.player.ouch=Aua!!!! +gui.receiver.cannot_attach=Hier kann kein Empfänger angebracht werden! +gui.requires_controller.desc=Benötigt Start-Controller +gui.rocket.countdown=Countdown +gui.rocket.height=Höhe +gui.rocket.inv.name=Inventar / Treibstoff +gui.rocket.launch.name=Starten +gui.rocket.launched=Gestartet +gui.rocket.on_launchpad=Auf Startrampe +gui.rocket.speed=Geschwindigkeit +gui.rocket.turn.name=Links-rechts bewegen +gui.rocket.updown.name=Hoch-runter bewegen +gui.rocket.warning.fuelinsufficient=Nicht genug Treibstoff für einen sicheren Start unter automatischer Kontrolle! +gui.rocket.warning.launchcontroller=Start abgebrochen. Start-Controller überprüfen! +gui.rocket.warning.nofuel=Ich brauche erst einmal etwas Raketentreibstoff! +gui.rocket.warning.nogyroscope=Mysteriöse Kräfte sind im Spiel, die Gyroskope spielen verrückt! +gui.rocket.warning.noparachute=Ich habe keinen Fallschirm! Wenn ich noch einmal Starten drücke, gibt es kein Zurück! +gui.rocket_type.0=Lagerraum: 18 +gui.rocket_type.1=Lagerraum: 36 +gui.rocket_type.2=Lagerraum: 56 +gui.rocket_type.3=Vorgetankt +gui.seconds=s +gui.sensor.advanced=Fortgeschrittener Modus +gui.sensor.advancedoff=AUS +gui.sensor.advancedon=AN +gui.show_bubble.desc.0=Zeige Blase +gui.skeleton_boss.message=Der Boss ist verschwunden, verlasse den Boss-Raum nicht, während du kämpfst! Betrete den Raum erneut, um von vorne zu beginnen. +gui.space_race.chat.add_success=%s nimmt an dem Wettrennen ins All teil! +gui.space_race.chat.already_part=Du nimmst bereits an diesem Wettrennen ins All teil! +gui.space_race.chat.invite_received=%s hat dich zum Wettrennen ins All eingeladen. +gui.space_race.chat.not_found=Konnte keinen Spieler mit dem Namen %s finden. +gui.space_race.chat.remove_success=%s wurde von dem Wettrennen ins All entfernt +gui.space_race.chat.to_join=Um %s beizutreten, benutze: %s +gui.space_race.coming_soon=Bald verfügbar +gui.space_race.create.add_players.name=Spieler hinzufügen +gui.space_race.create.back.name=Zurück +gui.space_race.create.brush_radius.name=Pinselradius +gui.space_race.create.brush_size.name=Pinselgröße +gui.space_race.create.change_color.name.0=Team +gui.space_race.create.change_color.name.1=Farbe +gui.space_race.create.change_color.name.2=ändern +gui.space_race.create.close.name=Schließen +gui.space_race.create.customize.name=Flagge bearbeiten +gui.space_race.create.eraser_radius.name=Radierradius +gui.space_race.create.eraser_size.name=Radiergröße +gui.space_race.create.global_stats.name=Globale Statistiken +gui.space_race.create.invite_player.name=Spieler einladen +gui.space_race.create.player_radius.name=Anmerkung: Spieler müssen in Reichweite (25 Blöcke) sein! +gui.space_race.create.rem_players.name=Spieler entfernen +gui.space_race.create.remove.name=Entfernen +gui.space_race.create.remove_player.name=Spieler entfernen +gui.space_race.create.rename.name=Team umbenennen +gui.space_race.create.send_invite.name=Einladen +gui.space_race.create.server_stats.name=Server-Statistiken +gui.space_race.create.title.name.0=Wettrennen ins All +gui.space_race.create.title.name.1=Manager +gui.space_race.create.title.name=Wettrennen ins All-Manager +gui.space_race.join.member_count.name=%d Teilnehmer +gui.space_race.join.name=Teilnehmen +gui.space_race.join.owner.name=Eigentümer +gui.space_race.join.title.name=Am Wettrennen ins All teilnehmen +gui.space_race.unnamed=Unbenanntes Team +gui.spacestation.added=Dir ist es nun erlaubt, die Raumstation von %s zu betreten! +gui.spacestation.addsuccess=%s wurde erfolgreich zur Raumstation-Liste hinzugefügt! +gui.spacestation.allow_all_false=Es dürfen nicht mehr alle Spieler deine Raumstationen betreten! +gui.spacestation.allow_all_true=Alle Spieler dürfen nun deine Raumstationen betreten! (Benutze /ssinvite -all um dies rückgängig zu machen) +gui.spacestation.changesuccess=Die Raumstation von %s gehört nun %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=%s wurde erfolgreich von der Raumstation-Liste entfernt +gui.spacestation.to_allow_entry=ein, um einem anderen Spieler zu ermöglichen, diese Raumstation zu betreten! +gui.spacestation.type_command=Gib +gui.status.active.name=Aktiv +gui.status.air_lock_closed.name=Luftschleuse geschlossen +gui.status.air_lock_open.name=Luftschleuse geöffnet +gui.status.blockedfully.name=Sonne ist nicht sichtbar +gui.status.blockedpartial.name=Sonne teilweise sichtbar +gui.status.check_pending.name=Check wird ausgeführt +gui.status.check_starting.name=Check startet +gui.status.checking_seal.name=Überprüfe Siegel +gui.status.collecting.name=Sammelt +gui.status.collectingenergy.name=Sammelt Energie +gui.status.compressing.name=Komprimiert +gui.status.disabled.name=Deaktiviert +gui.status.fulltank.name=Sauerstofftank voll +gui.status.generating.name=Generiert +gui.status.hull_heat.name=Hüllentemperatur +gui.status.idle.name=Untätig +gui.status.missingleaves.name=Nicht genug Blätter +gui.status.missingoxygen.name=Nicht genug Sauerstoff +gui.status.missingpower.name=Nicht genug Energie +gui.status.missingpower.short.name=Keine Energie +gui.status.missingtank.name=Kein Sauerstofftank +gui.status.nofuel.name=Kein Treibstoff zum Laden! +gui.status.noinvtarget.name=Kein Inventar im Ziel! +gui.status.noitems.name=Keine Gegenstände zum Laden! +gui.status.nooil.name=Kein Öl +gui.status.not_available.name=N/A +gui.status.not_generating.name=Generiert nicht +gui.status.notargetload.name=Kein Ziel zum Beladen! +gui.status.notargetunload.name=Kein Ziel zum Entladen! +gui.status.off.name=AUS +gui.status.on.name=AN +gui.status.raining.name=Regen +gui.status.ready.name=Bereit +gui.status.refining.name=Raffiniert +gui.status.running.name=Läuft +gui.status.sealed.name=Versiegelt +gui.status.sealerblocked.name=Ausgangsventil blockiert! +gui.status.sun_visible.name=Sonne sichtbar +gui.status.tank_empty.name=Sauerstofftank leer +gui.status.targetempty.name=Zielfahrzeug ist leer! +gui.status.targetfull.name=Zielfahrzeug ist voll! +gui.status.unknown.name=Unbekannt +gui.status.unsealed.name=Bereich zu groß / Unversiegelt +gui.tank.oxygen_remaining=Sauerstoff verbleibend +gui.telemetry_fail.message=Zuerst muss ich etwas (Spieler, Mob, Rakete) mit diesem Frequenzmodul messen! (oder ich versuche es anzuziehen) +gui.telemetry_fail_no_frequency_module.message=Ich brauche wohl ein Frequenzmodul in der Hand, um dies zu benutzen. +gui.telemetry_fail_wearing_it.message=Ich muss mein Frequenzmodul abnehmen, wenn ich es mit diesem Telemetrieempfänger verbinden möchte! +gui.telemetry_succeed.message=Telemetrieverbindung aufgebaut. +gui.thermal_slot.desc.0=Temperaturkontrolle-Slot, platziere hier einen +gui.thermal_slot.desc.1=Umgebungstemperatur-Controller (optional) +gui.thermal_slot.desc.2=Achtung: Verbraucht mehr Energie! +gui.title.air_lock.name=Luftschleusen-Controller von %s +gui.tracking.message=Verfolgung aktiviert. Um die Verbindung zu vervollständigen, muss ich hiermit einen Rechtsklick auf einen Telemetrieempfänger durchführen. +gui.village.warning.no_freq_mod=Ich brauche wohl ein Frequenzmodul, um mit ihnen zu kommunizieren. +gui.warning.invalid_thermal=Unzureichendes Wärmeschutzschild! +gui.warning.noroom=Nicht genug Platz! +gui.warning=WARNUNG! +item.air_fan.name=Ventilator +item.air_vent.name=Lüftungsventil +item.basic_item.ambient_thermal_controller.name=Umgebungstemperatur-Controller +item.basic_item.canned_food.name=Dose mit Nahrung +item.basic_item.compressed_aluminum.name=Gepresstes Aluminium +item.basic_item.compressed_bronze.name=Gepresste Bronze +item.basic_item.compressed_copper.name=Gepresstes Kupfer +item.basic_item.compressed_iron.name=Gepresstes Eisen +item.basic_item.compressed_steel.name=Gepresster Stahl +item.basic_item.compressed_tin.name=Gepresstes Zinn +item.basic_item.dehydrated_apple.name=Dehydrierte Äpfel +item.basic_item.dehydrated_carrot.name=Dehydrierte Karotten +item.basic_item.dehydrated_melon.name=Dehydrierte Melonen +item.basic_item.dehydrated_potato.name=Dehydrierte Kartoffeln +item.basic_item.frequency_module.name=Frequenzmodul +item.basic_item.ingot_aluminum.name=Aluminiumbarren +item.basic_item.ingot_bronze.name=Bronzebarren +item.basic_item.ingot_copper.name=Kupferbarren +item.basic_item.ingot_steel.name=Stahlbarren +item.basic_item.ingot_tin.name=Zinnbarren +item.basic_item.raw_silicon.name=Rohes Silizium +item.basic_item.solar_module_0.name=Einzelnes Solarmodul +item.basic_item.solar_module_1.name=Komplettes Solarmodul +item.basic_item.wafer_advanced.name=Fortgeschrittener Wafer +item.basic_item.wafer_basic.name=Basis-Wafer +item.basic_item.wafer_solar.name=Blauer Solar-Wafer +item.battery.name=Batterie +item.bucket_fuel.name=Treibstoffeimer +item.bucket_oil.name=Öleimer +item.buggy.name=Mondrover +item.buggymat.seat.name=Mondrover-Sitz +item.buggymat.storage.name=Mondrover-Lagerbox +item.buggymat.wheel.name=Mondrover-Rad +item.canister.copper.name=Kupferkanister +item.canister.tin.name=Zinnkanister +item.canvas.name=Segeltuch +item.cheese_block.name=Käseblock +item.cheese_curd.name=Quark +item.compressed_meteoric_iron.name=Gepresstes meteorisches Eisen +item.dungeonfinder.name=Verlies-Finder +item.empty_liquid_canister.name=Leerer Kanister +item.emergency_kit.description=Rechtsklick, um Sauerstoffausrüstung und andere wichtige Gegenstände auszurüsten. Achtung: kann nur ein Mal benutzt werden! +item.emergency_kit.name=Weltraum-Notfallpaket +item.engine.tier1booster.name=Hilfstriebwerk (Stufe 1) +item.engine.tier1engine.name=Raketentriebwerk (Stufe 1) +item.flag.name=Flagge +item.fuel.name=Raketentreibstoff +item.fuel_canister.name=Voller Ölkanister +item.fuel_canister_partial.name=Teilweise gefüllter Treibstoffkanister +item.heavy_plating.name=Robuste Platte +item.hot_description.name=Heiß +item.ic2compat.ore_crushed_alu.name=Zerstoßenes Aluminiumerz +item.ic2compat.ore_purified_alu.name=Gereinigtes zerstoßenes Aluminiumerz +item.ic2compat.dust_alu.name=Aluminumstaub +item.ic2compat.dust_small_titanium.name=Winziges Häufchen Titan-Staub +item.infinite_battery.name=Unendliche Batterie +item.infinite_oxygen.name=Unendlicher Sauerstoffvorrat +item.key.t1.name=Dungeonschlüssel (Stufe 1) +item.lunar_sapphire.description=Mond-Saphire sind die Währung im Handel mit Alien-Dorfbewohnern. +item.lunar_sapphire.name=Mond-Saphir +item.meteor_chunk.name=Werfbarer Meteorbrocken +item.meteor_chunk_hot.name=Werfbarer Meteorbrocken +item.meteoric_iron_ingot.name=Meteorischer Eisenbarren +item.meteoric_iron_raw.name=Rohes meteorisches Eisen +item.nose_cone.name=Raketennase +item.oil_canister.name=Voller Ölkanister +item.oil_canister_partial.name=Teilweise gefüllter Ölkanister +item.oil_extractor.name=Tragbarer Ölextraktor +item.oxygen_concentrator.name=Sauerstoffkonzentrator +item.oxygen_gear.name=Sauerstoffausrüstung +item.oxygen_mask.name=Sauerstoffmaske +item.oxygen_tank_heavy_empty.name=Leerer großer Sauerstofftank +item.oxygen_tank_heavy_full.name=Großer Sauerstofftank +item.oxygen_tank_light_empty.name=Leerer kleiner Sauerstofftank +item.oxygen_tank_light_full.name=Kleiner Sauerstofftank +item.oxygen_tank_med_empty.name=Leerer mittlerer Sauerstofftank +item.oxygen_tank_med_full.name=Mittlerer Sauerstofftank +item.parachute_black.name=Schwarzer Fallschirm +item.parachute_blue.name=Hellblauer Fallschirm +item.parachute_brown.name=Brauner Fallschirm +item.parachute_darkblue.name=Blauer Fallschirm +item.parachute_darkgray.name=Grauer Fallschirm +item.parachute_darkgreen.name=Grüner Fallschirm +item.parachute_gray.name=Hellgrauer Fallschirm +item.parachute_lime.name=Hellgrüner Fallschirm +item.parachute_magenta.name=Magentafarbener Fallschirm +item.parachute_orange.name=Oranger Fallschirm +item.parachute_pink.name=Pinker Fallschirm +item.parachute_plain.name=Fallschirm +item.parachute_purple.name=Violetter Fallschirm +item.parachute_red.name=Roter Fallschirm +item.parachute_teal.name=Türkiser Fallschirm +item.parachute_yellow.name=Gelber Fallschirm +item.rocket_fins.name=Raketenfinne +item.rocket_t1.name=Rakete (Stufe 1) +item.schematic.name=Raketenwerkbank-Bauplan +item.sensor_glasses.name=Sensorbrille +item.sensor_lens.name=Sensorlinse +item.standard_wrench.name=Standard-Schraubenschlüssel +item.steel_axe.name=Robuste Axt +item.steel_boots.name=Robuste Stiefel +item.steel_chestplate.name=Robuster Brustpanzer +item.steel_helmet.name=Robuster Helm +item.steel_hoe.name=Robuste Hacke +item.steel_leggings.name=Robuster Beinschutz +item.steel_pickaxe.name=Robuste Spitzhacke +item.steel_pole.name=Stahlmast +item.steel_shovel.name=Robuste Schaufel +item.steel_sword.name=Robustes Schwert +item.tier1.desc=Stufe 1 +item_desc.powerdraw.name=Benötigte Energie: %s /s +item_desc.shift.name=Drücke %s für mehr Info +item_group.galacticraft_blocks=Galacticraft: Blöcke +item_group.galacticraft_items=Galacticraft: Items +keybind.map.name=Galaxie-Karte +keybind.sensortoggle.name=Stelle Sensorbrillen-Modus +keybind.spaceshipinv.name=Öffne Raumschiff-Inventar +keybind.vehiclebackward.name=Fahrzeug-Rückwärts-Taste +keybind.vehicledown.name=Fahrzeug-Runter-Taste +keybind.vehicleforward.name=Fahrzeug-Vorwärts-Taste +keybind.vehicleleft.name=Fahrzeug-Links-Taste +keybind.vehicleright.name=Fahrzeug-Rechts-Taste +keybind.vehicleup.name=Fahrzeug-Hoch-Taste +moon.moon=Mond +newversion.failed.name=Galacticraft-Update-Check fehlgeschlagen! Neuer Versuch in 15 Sekunden ... +newversion.success.name=Neue Galacticraft-Version gefunden: +planet.jupiter=Jupiter +planet.mercury=Merkur +planet.neptune=Neptun +planet.overworld=Oberwelt +planet.saturn=Saturn +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Oberwelt-Raumstation +schematic.moonbuggy.name=Mondrover +schematic.rocket_t1.name=Rakete (Stufe 1) +schematic.rocket_t2.name=Rakete (Stufe 2) +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Luftschleusen-Controller +tile.air_lock_frame.description=Luftschleusenrahmen werden zum Bauen von Luftschleusen benutzt. Sie müssen in Portalform aufgebaut und ein Block durch einen Luftschleusen-Controller ersetzt werden. +tile.air_lock_frame.name=Luftschleusenrahmen +tile.air_lock_seal.name=Luftschleusensiegel +tile.aluminum_wire.alu_wire.description=Aluminiumkabel werden benutzt, um Energie zu transportieren. +tile.aluminum_wire.alu_wire.name=Aluminiumkabel +tile.aluminum_wire.alu_wire_heavy.description=Schwere Aluminumkabel werden benutzt, um Energie zu transportieren. Hat eine höhere Transferrate als sein Vorgänger. +tile.aluminum_wire.alu_wire_heavy.name=Schweres Aluminiumkabel +tile.aluminum_wire.alu_wire_switch.description=Ein Schaltbares Aluminiumkabel trennt die Verbindung bei Restoneeingang. +tile.aluminum_wire.alu_wire_switch.name=Schaltbares Aluminiumkabel +tile.aluminum_wire.alu_wire_switch_heavy.description=Ein Schaltbares Schweres Aluminiumkabel trennt die Verbindung bei Restoneeingang. +tile.aluminum_wire.alu_wire_switch_heavy.name=Schaltbares Schweres Aluminiumkabel +tile.arclamp.description=Bogenlampen erzeugen ein sehr starkes Licht, welches eine große Fläche ausleuchtet, aber auch Mobs zum Fliehen bringt. +tile.arclamp.name=Bogenlampe +tile.basic_block_core.block_aluminum_gc.name=Aluminiumblock +tile.basic_block_core.block_copper_gc.name=Kupferblock +tile.basic_block_core.block_meteoric_iron_gc.name=Solides Meteoreisen +tile.basic_block_core.block_tin_gc.name=Zinnblock +tile.basic_block_core.block_silicon_gc.name=Siliziumblock +tile.basic_block_core.deco_block_0.name=Zinndekorationsblock +tile.basic_block_core.deco_block_1.name=Zinndekorationsmauer +tile.basic_block_core.ore_aluminum_gc.name=Aluminiumerz +tile.basic_block_core.ore_copper_gc.name=Kupfererz +tile.basic_block_core.ore_silicon.name=Siliziumerz +tile.basic_block_core.ore_tin_gc.name=Zinnerz +tile.basic_block_moon.bricks.name=Monddungeonziegel +tile.basic_block_moon.cheesestone.name=Käseerz +tile.basic_block_moon.coppermoon.name=Kupfererz +tile.basic_block_moon.moondirt.name=Monderde +tile.basic_block_moon.moongrass.name=Mondrasen +tile.basic_block_moon.moonstone.name=Mondgestein +tile.basic_block_moon.sapphiremoon.name=Saphirerz +tile.basic_block_moon.tinmoon.name=Zinnerz +tile.buggy_pad.description=Wenn der Betankungsplatz in einer 3x3-Form gebaut wird und ein Treibstofflader angeschlossen wird, erlaubt dies dir, deinen Mondrover zu betanken. Kann nicht verwendet werden, um Raketen zu starten! +tile.cargo.loader.name=Frachtlader +tile.cargo.unloader.name=Frachtentlader +tile.cargo_loader.description=Der Frachtlader beläd Raketen und andere Fahrzeuge, welche einen Frachtraum besitzen. Muss an ein Lande- oder Tankpad angeschlossen werden. +tile.cargo_unloader.description=Der Frachtentlader entläd Raketen und andere Fahrzeuge, welche einen Frachtraum besitzen. Muss an ein Lande- oder Tankpad angeschlossen werden. +tile.cheese.description=Käseblöcke werden aus dem Käse des Monds erzeugt. Du kannst diese plazieren, aber auch essen. +tile.cheese.name=Käseblock +tile.circuit_fabricator.description=Der Schaltkreisfabrikator erzeugt aus Basismaterialien Siliziumwafer, welche für fortgeschrittene Maschinen benötigt werden. +tile.coal_generator.description=Der Kohlegenerator verbrennt Kohle (oder Kohleblöcke), um Energie zu erzeugen. Die einfachste, aber ineffizienteste Möglichkeit, Energie zu erzeugen. +tile.collector.description=Der Sauerstoffsammler speichert Sauerstoff, den er von Blättern in der Umgebung sammelt. +tile.collector.name=Sauerstoffsammler +tile.compressor.description=Der Kompressor presst Barren in ihre entsprechende Form. +tile.compressor_electric.description=Der elektrische Kompressor presst Barren in ihre entsprechende Form. Kann 2 Barren auf einmal verarbeiten. +tile.concealed_detector.name=Spieler-Detektor +tile.concealed_redstone.name=Verstecktes Redstone-Kabel +tile.concealed_repeater.name=Versteckter Redstone-Verstärker +tile.crude_oil.name=Öl +tile.crude_oil_moving.name=Rohöl +tile.crude_oil_still.name=Rohöl +tile.deconstructor.description=Der Dekonstruktor nimmt deine alten Raketen und andere Gegenstände auseinander und erzeugt dabei wiederverwertbare Materialien. +tile.dishbase.description=Die Kommunikationsschüssel kann die Position von Raumstationen verfolgen und kann Kommunikationen von deinen Remote-Raumstationen empfangen. +tile.dishbase.name=Kommunikationsschüssel +tile.distributor.description=Der Sauerstoffverteiler benutzt den Sauerstoff aus seinem internen Speicher, um eine Sauerstoffblase um ihn herum zu erzeugen. Dies erlaubt dir das Atmen in dieser Blase. +tile.distributor.name=Sauerstoffverteiler +tile.dummyblock.cryogenic_chamber.name=Kälteschlafkammer +tile.dummyblock.launch_pad.name=Raketenstartrampe +tile.dummyblock.nasa_workbench.name=Raketenwerkbank +tile.dummyblock.solar.name=Solarmodul +tile.dummyblock.space_station_base.name=Raumstationsbasis +tile.electric_furnace_tier1.description=Der elektrische Ofen ist eine schnellere Alternative zu dem Kohleofen. +tile.electric_furnace_tier2.description=Der elektrische Lichtbogenofen ist eine bessere und schnellere Alternative zu dem normalen und dem elektrischen Ofen: Verdoppelung von Erzen! +tile.emergency_box.description=Platziere einen Notfall-Behälter nahe deiner ersten Landestelle auf einem Planeten. Öffne ihn, um ein Notfallpaket darin zu finden. Der Behälter wehrt auch Mobs ab! +tile.emergency_box.filled.name=Notfall-Behälter (mit Paket) +tile.emergency_box.name=Notfall-Behälter +tile.enclosed.aluminum_wire.name=Versiegelbares Aluminiumkabel +tile.enclosed.heavy_aluminum_wire.name=Versiegelbares Schweres Aluminiumkabel +tile.enclosed.copper_cable.name=Versiegelbares Kupferkabel +tile.enclosed.description=Versiegelbare Blöcke sollten an Orten verwendet werden, wo Luft nicht ausdringen soll, zum Beispiel bei Wänden deiner Weltraumbasis. +tile.enclosed.fluid_pipe.name=Versiegelte Flüssigkeitsleitung +tile.enclosed.glass_fibre_cable.name=Versiegelbares Glasfaserkabel +tile.enclosed.gold_cable.name=Versiegelbares Goldkabel +tile.enclosed.hv_cable.name=Versiegelbares HS-Kabel +tile.enclosed.lv_cable.name=Versiegelbares Zinnkabel +tile.enclosed.me_cable.name=Versiegelbares ME-Kabel +tile.enclosed.pipe_fluids_cobblestone.name=Versiegelbares Bruchstein-Wasserrohr +tile.enclosed.pipe_fluids_stone.name=Versiegelbares Stein-Wasserrohr +tile.enclosed.pipe_items_cobblestone.name=Versiegelbares Bruchstein-Transportrohr +tile.enclosed.pipe_items_stone.name=Versiegelbares Stein-Transportrohr +tile.enclosed.pipe_power_gold.name=Versiegelbare Gold-Energieleitung +tile.enclosed.pipe_power_stone.name=Versiegelbare Stein-Energieleitung +tile.energy_storage_module_tier1.description=Die Batteriebox wird benutzt, um große Mengen Energie zu speichern. +tile.energy_storage_module_tier2.description=Der Energiespeicher-Cluster wird benutzt um große Mengen Energie zu speichern. Speichert mehr Energie als sein Vorgänger. +tile.fallen_meteor.description=Abgestürtzte Meteore können auf vielen Planeten/Monden gefunden werden, welche eine kleinere oder keine Atmosphäre besitzen. Abgebaut ergibt er Meteoreisen. +tile.fallen_meteor.name=Meteor +tile.fluid_pipe.description=Die Flüssigkeitsleitung kann Gase und Flüssigkeiten von Block zu Block übertragen. Benutze einen Schraubenschlüssel um die Modi zu wechseln. +tile.fluid_pipe.name=Flüssigkeitsleitung +tile.fluid_pipe_pull.description=Die Flüssigkeitsleitung kann Gase und Flüssigkeiten von Block zu Block übertragen. Benutze einen Schraubenschlüssel um die Modi zu wechseln. +tile.fluid_pipe_pull.name=Flüssigkeitsleitung +tile.fluid_tank.description=Flüssigkeitstanks speichern Gase oder Flüssigkeiten. +tile.fluid_tank.name=Flüssigkeitstank +tile.fuel.name=Treibstoff +tile.fuel_block.name=Treibstoff +tile.fuel_loader.description=Nachdem er mit einer Raketenstartrampe verbunden wurde, erlaubt dir der Treibstofflader Treibstoff in die Rakete oder ein anderes Fahrzeug zu pumpen. +tile.fuel_loader.name=Treibstofflader +tile.glowstone_torch.description=Glowstonefackeln sollten benutzt werden, wenn in der Umgebung kein Sauerstoff vorhanden ist und normale Fackeln nicht brennen. +tile.glowstone_torch.name=Glowstonefackel +tile.landing_pad.buggy_fueler.name=Mondrover-Betankungsplatz +tile.landing_pad.cargo_pad.name=Frachtraketenstartrampe +tile.landing_pad.description=Wenn die Raketenstartrampe in einer 3x3-Form gebaut wird, kannst du darauf Raketen platzieren. Es können Treibstofflader, Frachtlader und Start-Controller daran angeschlossen werden. +tile.landing_pad.landing_pad.name=Raketenstartrampe +tile.landing_pad_full.name=Raketenstartrampe +tile.machine.0.name=Kohlegenerator +tile.machine.1.name=Batteriebox +tile.machine.2.name=Elektrischer Ofen +tile.machine.3.name=Kompressor +tile.machine.7.name=Lichtbogenofen +tile.machine.8.name=Energiespeicher-Cluster +tile.machine2.4.name=Elektrischer Kompressor +tile.machine2.5.name=Schaltkreisfabrikator +tile.machine2.6.name=Sauerstoff-Speichermodul +tile.machine2.10.name=Dekonstruktor +tile.machine3.9.name=Färber +tile.magnetic_table.name=Magnetische Werkbank +tile.magnetic_table.description=Platzierte Items bleiben drauf - ...hält das Inventar! Shift-Klick Items möglich. Trichter können Items einführen oder entfernen, es wird dabei versucht das letzte Rezept herzustellen. +tile.moon_stairs_brick.name=Monddungeonziegeltreppe +tile.moon_stairs_stone.name=Mondsteintreppe +tile.ore_copper.name=Kupfererz +tile.ore_tin.name=Zinnerz +tile.oxygen_compressor.0.name=Sauerstoffkompressor +tile.oxygen_compressor.1.name=Sauerstoffdekompressor +tile.oxygen_compressor.description=Der Sauerstoffkompressor füllt Sauerstoff aus seinem internen Speicher in einen Sauerstofftank. +tile.oxygen_decompressor.description=Der Sauerstoffdekompressor entleert den Sauerstoff aus einem Sauerstofftank in seinen internen Speicher. +tile.oxygen_detector.description=Der Sauerstoffdetektor gibt ein Redstone-Signal aus, wenn er von Sauerstoff umgeben ist. +tile.oxygen_detector.name=Sauerstoffdetektor +tile.oxygen_storage_module.description=Das Sauerstoff-Speichermodul wird benutzt, um große Mengen Sauerstoff zu speichern. +tile.painter.description=Färbt Vakuum-Glas, Lichtpanele oder andere färbbare Objekte. Verwende einen beliebigen Block - oder Farbstoff - um eine neue Farbe zu erhalten! +tile.panel_lighting.description=Lichtpanel zur Verwendung im All! Mit Schraubenschlüssel rotierbar. Um das Aussehen zu ändern: halte dies in der Hand und SCHLEICHE + rechtsklicke auf einen normalen Block. +tile.panel_lighting_0.name=Lichtpanel (Viereck) +tile.panel_lighting_1.name=Lichtpanel (Spotlight) +tile.panel_lighting_2.name=Lichtpanel (Linear) +tile.panel_lighting_3.name=Lichtpanel (Dunkel) +tile.panel_lighting_4.name=Lichtpanel (Dunkel) +tile.parachest.description=Paratruhen fallen vom Himmel, wenn du auf einem Planeten/Mond gelandet bist, auch auf der Erde. Enthält Rakete, Treibstoff und Fracht vom letzten Start. +tile.parachest.name=Paratruhe +tile.platform.description=Platziere vier Blöcke, um eine Plattform zu bilden. Die Plattform transportiert den Spieler zur darüber- oder daruntergelegenen Plattform. SCHLEICHEN = nach unten : SPRINGEN = nach oben. +tile.platform.name=Hydraulische Plattform +tile.refinery.description=Die Raffinerie erzeugt aus Öl und Energie Treibstoff, der in Raketen und Fahrzeugen benötigt wird. +tile.refinery.name=Raffinerie +tile.rocket_workbench.description=Die Raketenwerkbank wird benutzt, um viele fortgeschrittene Teile und Fahrzeuge herzustellen. Neue Baupläne können hinzugefügt werden, wenn du sie gefunden hast. +tile.rocket_workbench.name=Raketenwerkbank +tile.sapling2.birch.name=Birkensetzling +tile.sapling2.jungle.name=Tropenbaumsetzling +tile.sapling2.oak.name=Eichensetzling +tile.sapling2.spruce.name=Fichtensetzling +tile.sealer.description=Der Sauerstofversiegeler überprüft, ob er sich in einem geschlossenem Raum befindet. Wenn ja, füllt er diesen Bereich mit atembarer Luft. +tile.sealer.name=Sauerstoffversiegeler +tile.slab_gc_half.moon_bricks_slab.name=Monddungeonziegelstufe +tile.slab_gc_half.moon_slab.name=Mondsteinstufe +tile.slab_gc_half.tin_slab_1.name=Zinndekorationsstufe +tile.slab_gc_half.tin_slab_2.name=Zinndekorationsstufe +tile.solar.advanced_solar.name=Fortgeschrittenes Solarmodul +tile.solar.basic_solar.name=Basis-Solarmodul +tile.solar_adv.description=Das fortgeschrittene Solarmodul sammelt Energie von der Sonne und speichert diese für eine spätere Verwendung. Richtet sich automatisch aus, um die optimale Energieerzeugung zu garantieren. +tile.solar_basic.description=Das Basis-Solarmodul sammelt Energie von der Sonne und speichert diese für eine spätere Verwendung. Ist mittags am effezientesten. (nicht ausrichtbar) +tile.space_glass.description=Vakuum versiegeltes Glas für Raumstationen. Mit dem Färber färbbar. +tile.space_glass.clear.description=Klars Glas für Weltraumaussicht, aber auch Unterwasser. +tile.space_glass.strong.description=Starkes und explosionsresistentes Glas. Hergestellt aus Transparentem Aluminium... +tile.space_glass_clear.name=Vakuum-Glas (Klar) +tile.space_glass_vanilla.name=Vakuum-Glas +tile.space_glass_strong.name=Vakuum-Glas (Stark) +tile.space_station_base.name=Raumstationsbasis +tile.spin_thruster.description=Drehtriebwerke werden benutzt, um deine Raumstation zu rotieren. +tile.spin_thruster.name=Drehtriebwerk +tile.telemetry.description=Der Telemetrieempfämger sammelt wertvolle Daten von verbundenen Raketen, Spielern und Monstern. Sollte am besten neben einem Bildschirm plaziert werden. Benutze ein Frequenzmodul um eine Datenverbindung aufzubauen. +tile.telemetry.name=Telemetrieempfänger +tile.tin_stairs_1.name=Zinndekorationstreppe +tile.tin_stairs_2.name=Zinndekorationstreppe +tile.treasure_chest.description=Schatztruhen der Stufe 1 sind in Monddungeons zu finden. Wenn du den Endboss besiegt hast, kannst du sie öffnen. +tile.treasure_chest.name=Schatztruhe +tile.unlit_torch.name=Fackel +tile.unlit_torch_stone.name=Steinfackel +tile.unlit_torch_lit.name=Fackel +tile.unlit_torch_stone_lit.name=Steinfackel +tile.view_screen.description=Mit diesem Bildschirm verpasst du deiner Basis den letzten Feinschliff. Ein Rechtsklick ändert die angezeigte Information. +tile.view_screen.name=Bildschirm +tile.wall_gc.moon.name=Mondsteinmauer +tile.wall_gc.moon_bricks.name=Monddungeonmauer +tile.wall_gc.tin.name=Zinndekorationsmauer diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_gb.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_gb.lang new file mode 100644 index 00000000..357a708a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_gb.lang @@ -0,0 +1,717 @@ +checklist.create_grapple.key=Create Grappling Hook +checklist.equip_oxygen_suit.key=Equip Oxygen Suit +checklist.equip_parachute.key=Equip Parachute +command.gcastrominer.count=The Astro Miner count for player %s is %s +commands.dimensionteleport=%s was sent into the atmosphere%s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s +commands.joinrace.no_team=The team needs to be specified! Usage: %s +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.magneticcrafting.name=Crafting +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel +container.solarbasic.name=Basic Solar Panel +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.meteor_chunk=%1$s was hit by meteor debris! +death.attack.oxygen_suffocation=%1$s ran out of oxygen! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. +death.attack.sulphuric_acid=%1$s dissolved in sulphuric acid! +death.attack.thermal=%1$s forgot thermal protection +dimension.moon.name=Moon +dimension.overworld.name=Overworld +dimension.sun.name=Sun +entity.alien_villager.name=Alien Villager +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evolved Creeper +entity.evolved_skeleton.name=Evolved Skeleton +entity.evolved_skeleton_boss.name=Evolved Skeleton Boss +entity.evolved_spider.name=Evolved Spider +entity.evolved_zombie.name=Evolved Zombie +entity.evolved_enderman.name=Evolved Enderman +entity.evolved_witch.name=Evolved Witch +entity.flag.name=Flag +entity.gcflag.name=Flag +entity.gravity_arrow.name=Arrow +entity.lander.name=Space Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Chunk +entity.oxygen_bubble.name=Oxygen Bubble +entity.para_chest.name=Parachest +entity.rocket_t1.name=Tier 1 Rocket +galaxy.milky_way=Milky Way +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminium Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on Planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension Type ID +gc.configgui.id_dimension_overworld=Dimension of the Overworld +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension Type ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension Type ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon +gc.configgui.other_mod_ore_gen_i_ds=Custom Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.planet_worldborders=Max x,z for Moon landing +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.static_loaded_new_ss=New Space Stations static loaded? +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here +gui.battery_slot.desc.1=or use a connected power source +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! +gui.buggy.accel.name=Accelerate +gui.buggy.decel.name=Decelerate +gui.buggy.inv.name=Inventory / Fuel +gui.buggy.storage_space=Storage Space +gui.buggy.turn.name=Turn left-right +gui.button.back.name=Back +gui.button.disable.name=Disable +gui.button.disableseal.name=Disable Seal +gui.button.enable.name=Enable +gui.button.enableseal.name=Enable Seal +gui.button.hide_dest.name=Hide +gui.button.loadfuel.name=Load Fuel +gui.button.loaditems.name=Load Items +gui.button.next.name=Next +gui.button.paintapply.name=Apply Paint +gui.button.paintmix.name=Mix Colour +gui.button.paintreset.name=Reset Colour +gui.button.refine.name=Refine +gui.button.stoploading.name=Stop Loading +gui.button.stoprefine.name=Stop Refining +gui.button.stopunloading.name=Stop Unloading +gui.button.unhide_dest.name=Unhide +gui.button.unloaditems.name=Unload Items +gui.button.unlockschematic.name=Unlock Schematic +gui.checkbox.horizontal.name=Horizontal Mode +gui.checkbox.invert.name=Invert Selection +gui.checkbox.player_name.name=Player name is +gui.checkbox.player_within.name=Player is within +gui.checkbox.redstone_signal.name=Opens on Redstone Signal +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! +gui.choose_planet.desc.moon=Habitable#No Oxygen#Gravity: 18% +gui.choose_planet.desc.overworld=Full of Life#Habitable#Gravity: 100% +gui.chooseplanet.alreadycreated1.name=Space Station Already +gui.chooseplanet.alreadycreated2.name=Created! +gui.chooseplanet.cannotcreate1.name=Cannot create Space +gui.chooseplanet.cannotcreate2.name=Station here! +gui.creative_only.desc=Creative Only +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Current Velocity +gui.docking_rocket.distance_from.name=Distance from Target +gui.docking_rocket.target_vel.name=Target Velocity +gui.docking_rocket.warning.name.0=Press %s to decelerate +gui.docking_rocket.warning.name.1=Press %s to accelerate +gui.dropbox.player_distance.name.0=1 Metre +gui.dropbox.player_distance.name.1=2 Metres +gui.dropbox.player_distance.name.2=5 Metres +gui.dropbox.player_distance.name.3=10 Metres +gui.electric_compressor.desc.0=Progress +gui.energy_storage.desc.0=Energy Storage +gui.energy_storage.desc.1=Energy +gui.flag.already_placed=Flag already placed here! +gui.frequency_module.desc.0=Can receive weak sound +gui.frequency_module.desc.1=waves and distant signals +gui.frequencymodule.warning0=I'll probably need a +gui.frequencymodule.warning1=if I want to hear properly here. +gui.fuel_output.desc.0=Place empty liquid canisters into +gui.fuel_output.desc.1=this slot to fill them from the +gui.fuel_output.desc.2=fuel tank +gui.fuel_tank.desc.0=Fuel tank. Requires +gui.fuel_tank.desc.1=fuel loader to fill +gui.fuel_tank.desc.2=Fuel tank, can be filled +gui.fuel_tank.desc.3=with fuel canisters +gui.fuel_tank.desc.4=Fuel tank +gui.infinite_item.desc=Infinite +gui.lander.velocity=Entry Velocity +gui.lander.velocityu=m/s +gui.lander.warning2=Hold " +gui.lander.warning3=" to slow down! +gui.max_output.desc=Max Output +gui.message.addnewsch.name=Add New Schematic +gui.message.apply.name=Apply +gui.message.assign_name.name=Assign Name +gui.message.atmosphere.name=Atmosphere +gui.message.back.name=Back +gui.message.breed.name=Breed +gui.message.bubble_visible.name=Bubble Visible +gui.message.can_create_space_station.name=A Space Station can be created here! +gui.message.cancel.name=Cancel +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. +gui.message.catalog.name=Catalog +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) +gui.message.click_again.1.name=Click again to zoom (view moons) +gui.message.click_again.2.name=Click again to zoom (view satellites) +gui.message.click_again.3.name=Click again to zoom +gui.message.clicklink=Click for Galacticraft Wiki +gui.message.create_ss.name=Create +gui.message.daynightcycle.name=Day-night Cycle +gui.message.energy=Energy +gui.message.environment.name=Environmental Boost +gui.message.exit.name=Exit +gui.message.fuel.name=Fuel +gui.message.full.name=full +gui.message.generating.name=Generating +gui.message.grow.name=Grow +gui.message.heal.name=Heal +gui.message.help1=For Galacticraft help +gui.message.help1a=To see this message again at any time, type +gui.message.help2=For Space Programme guidance +gui.message.help3=For help with oil +gui.message.in.name=In +gui.message.launch.name=Launch +gui.message.max_energy=Max Energy +gui.message.meansurfacetemp.name=Mean Surface Temp +gui.message.moon.atmosphere.0.name=None +gui.message.moon.daynightcycle.0.name=29.5 Earth Days +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and +gui.message.moon.surfacecomposition.1.name=Traces of Cheese +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% of Earth) +gui.message.of.name=of +gui.message.oil.name=Oil +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen +gui.message.overworld.atmosphere.1.name=Supports life +gui.message.overworld.daynightcycle.0.name=1 Earth Day +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Stone, earth, and +gui.message.overworld.surfacecomposition.1.name=gravel +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% of Earth) +gui.message.prelaunch=Pre-launch checklist +gui.message.rename.name=Rename +gui.message.select_ss.name=Select a Space Station +gui.message.ss_owner.name=Owner: +gui.message.status.name=Status +gui.message.strengthen.name=Strengthen +gui.message.surfacecomposition.name=Surface Composition +gui.message.surfacegravity.name=Surface Gravity +gui.message.thermal_status.name=Thermal Control +gui.message.tier.name=Tier %d +gui.message.unnamed.name=Unnamed +gui.missing_core.name.0=MicdoodleCore not found in mods folder +gui.missing_core.name.1=Galacticraft failed to load +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore +gui.missing_core.name.3=Click here to open download page +gui.new_schematic.slot.desc.0=New schematic slot. You +gui.new_schematic.slot.desc.1=can find new schematics +gui.new_schematic.slot.desc.2=by completing dungeons +gui.new_schematic.slot.desc.3=on planets and moons +gui.oil_tank.desc.0=Oil tank, can be filled +gui.oil_tank.desc.1=with oil canisters +gui.oxygen.warning=Oxygen Setup is Invalid! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply +gui.oxygen_storage.desc.0=Oxygen Storage +gui.oxygen_storage.desc.1=Oxygen +gui.oxygen_use.desc=Oxygen Use +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Food +gui.player.health=Health +gui.player.ouch=ouch!!!! +gui.receiver.cannot_attach=Cannot attach receiver here! +gui.requires_controller.desc=Requires Launch Controller +gui.rocket.countdown=Countdown +gui.rocket.height=Height +gui.rocket.inv.name=Inventory / Fuel +gui.rocket.launch.name=Launch +gui.rocket.launched=Launched +gui.rocket.on_launchpad=On launchpad +gui.rocket.speed=Speed +gui.rocket.turn.name=Turn left-right +gui.rocket.updown.name=Turn up-down +gui.rocket.warning.fuelinsufficient=Not enough fuel for a safe launch under automatic control! +gui.rocket.warning.launchcontroller=Pre-flight cancelling launch. Check the Launch Controller! +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! +gui.rocket_type.0=Storage Space: 18 +gui.rocket_type.1=Storage Space: 36 +gui.rocket_type.2=Storage Space: 56 +gui.rocket_type.3=Pre-fueled +gui.seconds=s +gui.sensor.advanced=Advanced Mode +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Show Bubble +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. +gui.space_race.chat.add_success=%s has joined the Space Race! +gui.space_race.chat.already_part=You are already a part of this space race! +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. +gui.space_race.chat.not_found=Could not find player with name: %s +gui.space_race.chat.remove_success=%s has been removed from the Space Race. +gui.space_race.chat.to_join=To join %s use command %s +gui.space_race.coming_soon=Coming Soon +gui.space_race.create.add_players.name=Add Player(s) +gui.space_race.create.back.name=Back +gui.space_race.create.brush_radius.name=Brush Radius +gui.space_race.create.brush_size.name=Brush Size +gui.space_race.create.change_color.name.0=Change +gui.space_race.create.change_color.name.1=Team +gui.space_race.create.change_color.name.2=Colour +gui.space_race.create.close.name=Close +gui.space_race.create.customize.name=Customize Flag +gui.space_race.create.eraser_radius.name=Eraser Radius +gui.space_race.create.eraser_size.name=Eraser Size +gui.space_race.create.global_stats.name=View Global Stats +gui.space_race.create.invite_player.name=Invite Player +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) +gui.space_race.create.rem_players.name=Remove Player(s) +gui.space_race.create.remove.name=Remove +gui.space_race.create.remove_player.name=Remove Player +gui.space_race.create.rename.name=Rename Team +gui.space_race.create.send_invite.name=Send Invite +gui.space_race.create.server_stats.name=View Server Stats +gui.space_race.create.title.name.0=Space Race +gui.space_race.create.title.name.1=Manager +gui.space_race.create.title.name=Space Race Manager +gui.space_race.join.member_count.name=%d members +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Owner +gui.space_race.join.title.name=Join Space Race +gui.space_race.unnamed=Unnamed Team +gui.spacestation.added=You've been added to %s's Space Station accepted players! +gui.spacestation.addsuccess=Successfully added %s to Space Station list! +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Successfully removed %s from Space Station list +gui.spacestation.to_allow_entry=to allow another player to enter this space station! +gui.spacestation.type_command=Type +gui.status.active.name=Active +gui.status.air_lock_closed.name=Air Lock Closed +gui.status.air_lock_open.name=Air Lock Open +gui.status.blockedfully.name=Sun is Not Visible +gui.status.blockedpartial.name=Sun Partially Visible +gui.status.check_pending.name=Check Pending +gui.status.check_starting.name=Check Starting +gui.status.checking_seal.name=Checking Seal +gui.status.collecting.name=Collecting +gui.status.collectingenergy.name=Collecting Energy +gui.status.compressing.name=Compressing +gui.status.disabled.name=Disabled +gui.status.fulltank.name=Oxygen Tank Full +gui.status.generating.name=Generating +gui.status.hull_heat.name=Hull Heat +gui.status.idle.name=Idle +gui.status.missingleaves.name=Not Enough Leaf Blocks +gui.status.missingoxygen.name=Not Enough Oxygen +gui.status.missingpower.name=Not Enough Power +gui.status.missingpower.short.name=No Power +gui.status.missingtank.name=No Valid Oxygen Tank +gui.status.nofuel.name=No Fuel to Load! +gui.status.noinvtarget.name=No Inventory on Target! +gui.status.noitems.name=No Items to Load! +gui.status.nooil.name=No Oil +gui.status.not_available.name=N/A +gui.status.not_generating.name=Not Generating +gui.status.notargetload.name=No Target to Load Into! +gui.status.notargetunload.name=No Target to Unload! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Raining +gui.status.ready.name=Ready +gui.status.refining.name=Refining +gui.status.running.name=Running +gui.status.sealed.name=Sealed +gui.status.sealerblocked.name=Output Vent Blocked! +gui.status.sun_visible.name=Sun Visible +gui.status.tank_empty.name=Oxygen Tank Empty +gui.status.targetempty.name=Target Vehicle is Empty! +gui.status.targetfull.name=Target Vehicle is Full! +gui.status.unknown.name=Unknown +gui.status.unsealed.name=Area Too Big / Unsealed +gui.tank.oxygen_remaining=Oxygen Remaining +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! +gui.telemetry_succeed.message=Telemetry link created. +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient +gui.thermal_slot.desc.1=Thermal Controller' here (optional) +gui.thermal_slot.desc.2=Note: Uses more energy! +gui.title.air_lock.name=%s's Air Lock Controller +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. +gui.village.warning.no_freq_mod=I'll need to equip a Frequency Module to communicate with them! +gui.warning.invalid_thermal=Invalid Thermal Protection! +gui.warning.noroom=Not enough room! +gui.warning=WARNING! +item.air_fan.name=Oxygen Fan +item.air_vent.name=Oxygen Vent +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller +item.basic_item.canned_food.name=Can of Food +item.basic_item.compressed_aluminum.name=Compressed Aluminium +item.basic_item.compressed_bronze.name=Compressed Bronze +item.basic_item.compressed_copper.name=Compressed Copper +item.basic_item.compressed_iron.name=Compressed Iron +item.basic_item.compressed_steel.name=Compressed Steel +item.basic_item.compressed_tin.name=Compressed Tin +item.basic_item.dehydrated_apple.name=Dehydrated Apple +item.basic_item.dehydrated_carrot.name=Dehydrated Carrot +item.basic_item.dehydrated_melon.name=Dehydrated Melon +item.basic_item.dehydrated_potato.name=Dehydrated Mashed Potato +item.basic_item.frequency_module.name=Frequency Module +item.basic_item.ingot_aluminum.name=Aluminium Ingot +item.basic_item.ingot_bronze.name=Bronze Ingot +item.basic_item.ingot_copper.name=Copper Ingot +item.basic_item.ingot_steel.name=Steel Ingot +item.basic_item.ingot_tin.name=Tin Ingot +item.basic_item.raw_silicon.name=Raw Silicon +item.basic_item.solar_module_0.name=Single Solar Module +item.basic_item.solar_module_1.name=Full Solar Panel +item.basic_item.wafer_advanced.name=Advanced Wafer +item.basic_item.wafer_basic.name=Basic Wafer +item.basic_item.wafer_solar.name=Blue Solar Wafer +item.battery.name=Battery +item.bucket_fuel.name=Fuel Bucket +item.bucket_oil.name=Oil Bucket +item.buggy.name=Buggy +item.buggymat.seat.name=Buggy Seat +item.buggymat.storage.name=Buggy Storage Box +item.buggymat.wheel.name=Buggy Wheel +item.canister.copper.name=Copper Canister +item.canister.tin.name=Tin Canister +item.canvas.name=Canvas +item.cheese_block.name=Block of Cheese +item.cheese_curd.name=Cheese Curd +item.compressed_meteoric_iron.name=Compressed Meteoric Iron +item.dungeonfinder.name=Dungeon Locator +item.empty_liquid_canister.name=Empty Canister +item.engine.tier1booster.name=Tier 1 Booster +item.engine.tier1engine.name=Tier 1 Rocket Engine +item.flag.name=Flag +item.food.canned_beef.name=Corned Beef +item.fuel.name=Rocket Fuel +item.fuel_canister.name=Filled Fuel Canister +item.fuel_canister_partial.name=Partially Filled Fuel Canister +item.heavy_plating.name=Heavy-Duty Plate +item.hot_description.name=Hot +item.infinite_battery.name=Infinite Battery +item.infinite_oxygen.name=Infinite Oxygen Supply +item.key.t1.name=Tier 1 Dungeon Key +item.lunar_sapphire.description=Lunar Sapphires are the unit of currency when trading with Alien Villagers +item.lunar_sapphire.name=Lunar Sapphire +item.meteor_chunk.name=Throwable Meteor Chunk +item.meteor_chunk_hot.name=Throwable Meteor Chunk +item.meteoric_iron_ingot.name=Meteoric Iron Ingot +item.meteoric_iron_raw.name=Raw Meteoric Iron +item.nose_cone.name=Nose Cone +item.oil_canister.name=Filled Oil Canister +item.oil_canister_partial.name=Partially Filled Oil Canister +item.oil_extractor.name=Portable Oil Extractor +item.oxygen_concentrator.name=Oxygen Concentrator +item.oxygen_gear.name=Oxygen Gear +item.oxygen_mask.name=Oxygen Mask +item.oxygen_tank_heavy_empty.name=Empty Heavy Oxygen Tank +item.oxygen_tank_heavy_full.name=Heavy Oxygen Tank +item.oxygen_tank_light_empty.name=Empty Light Oxygen Tank +item.oxygen_tank_light_full.name=Light Oxygen Tank +item.oxygen_tank_med_empty.name=Empty Medium Oxygen Tank +item.oxygen_tank_med_full.name=Medium Oxygen Tank +item.parachute_black.name=Black Parachute +item.parachute_blue.name=Light Blue Parachute +item.parachute_brown.name=Brown Parachute +item.parachute_darkblue.name=Blue Parachute +item.parachute_darkgray.name=Grey Parachute +item.parachute_darkgreen.name=Green Parachute +item.parachute_gray.name=Light Grey Parachute +item.parachute_lime.name=Lime Parachute +item.parachute_magenta.name=Magenta Parachute +item.parachute_orange.name=Orange Parachute +item.parachute_pink.name=Pink Parachute +item.parachute_plain.name=Parachute +item.parachute_purple.name=Purple Parachute +item.parachute_red.name=Red Parachute +item.parachute_teal.name=Cyan Parachute +item.parachute_yellow.name=Yellow Parachute +item.rocket_fins.name=Rocket Fins +item.rocket_t1.name=Tier 1 Rocket +item.schematic.name=NASA Workbench Schematic +item.sensor_glasses.name=Sensor Glasses +item.sensor_lens.name=Sensor Lens +item.standard_wrench.name=Standard Wrench +item.steel_axe.name=Heavy Duty Axe +item.steel_boots.name=Heavy Duty Boots +item.steel_chestplate.name=Heavy Duty Chestplate +item.steel_helmet.name=Heavy Duty Helmet +item.steel_hoe.name=Heavy Duty Hoe +item.steel_leggings.name=Heavy Duty Leggings +item.steel_pickaxe.name=Heavy Duty Pickaxe +item.steel_pole.name=Steel Pole +item.steel_shovel.name=Heavy Duty Shovel +item.steel_sword.name=Heavy Duty Sword +item.tier1.desc=Tier 1 +item_desc.powerdraw.name=Power required: %s /s +item_desc.shift.name=Press %s for more info +item_group.galacticraft_blocks=Galacticraft Blocks +item_group.galacticraft_items=Galacticraft Items +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Toggle Sensor Goggles Mode +keybind.spaceshipinv.name=Open Spaceship Inventory +keybind.vehiclebackward.name=Vehicle Backward Key +keybind.vehicledown.name=Vehicle Down Key +keybind.vehicleforward.name=Vehicle Forward Key +keybind.vehicleleft.name=Vehicle Left Key +keybind.vehicleright.name=Vehicle Right Key +keybind.vehicleup.name=Vehicle Up Key +moon.moon=Moon +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter +planet.mercury=Mercury +planet.neptune=Neptune +planet.overworld=Overworld +planet.saturn=Saturn +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Overworld Space Station +schematic.moonbuggy.name=Moon Buggy +schematic.rocket_t1.name=Tier 1 Rocket +schematic.rocket_t2.name=Tier 2 Rocket +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Air Lock Controller +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. +tile.air_lock_frame.name=Air Lock Frame +tile.air_lock_seal.name=Air Lock Seal +tile.aluminum_wire.alu_wire.description=Aluminium Wire is used to connect energy sources to energy consuming machines. +tile.aluminum_wire.alu_wire.name=Aluminium Wire +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminium Wire is used to connect energy sources to energy consuming machines. Its higher capacity boosts efficiency for Tier 2 machines. +tile.aluminum_wire.alu_wire_heavy.name=Heavy Aluminium Wire +tile.aluminum_wire.alu_wire_switch.description=Switchable Aluminium Wire connects like Aluminium Wire, unless switched OFF with a redstone signal. +tile.aluminum_wire.alu_wire_switch.name=Switchable Aluminium Wire +tile.aluminum_wire.alu_wire_switch_heavy.description=Switchable Heavy Aluminium Wire connects like Heavy Aluminium Wire, unless switched OFF with a redstone signal. +tile.aluminum_wire.alu_wire_switch_heavy.name=Switchable Heavy Aluminium Wire +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. +tile.arclamp.name=Arc Lamp +tile.basic_block_core.block_aluminum_gc.name=Aluminium Block +tile.basic_block_core.block_copper_gc.name=Copper Block +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron +tile.basic_block_core.block_tin_gc.name=Block of Tin +tile.basic_block_core.block_silicon_gc.name=Silicon Block +tile.basic_block_core.deco_block_0.name=Tin Decoration Block +tile.basic_block_core.deco_block_1.name=Tin Wall Block +tile.basic_block_core.ore_aluminum_gc.name=Aluminium Ore +tile.basic_block_core.ore_copper_gc.name=Copper Ore +tile.basic_block_core.ore_silicon.name=Silicon Ore +tile.basic_block_core.ore_tin_gc.name=Tin Ore +tile.basic_block_moon.bricks.name=Moon Dungeon Brick +tile.basic_block_moon.cheesestone.name=Cheese Ore +tile.basic_block_moon.coppermoon.name=Copper Ore +tile.basic_block_moon.moondirt.name=Moon Soil +tile.basic_block_moon.moongrass.name=Moon Turf +tile.basic_block_moon.moonstone.name=Moon Rock +tile.basic_block_moon.sapphiremoon.name=Sapphire Ore +tile.basic_block_moon.tinmoon.name=Tin Ore +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! +tile.cargo.loader.name=Cargo Loader +tile.cargo.unloader.name=Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. +tile.cheese.name=Block of Cheese +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. +tile.coal_generator.description=Coal Generator will burn coal (or a Block of Coal) for energy. The simplest but least efficient energy production method. +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. +tile.collector.name=Oxygen Collector +tile.compressor.description=Compressor will process ingots into their compressed equivalents. The most essential machine in Galacticraft! +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than its predecessor. +tile.concealed_detector.name=Player Detector +tile.concealed_redstone.name=Hidden Redstone Wire +tile.concealed_repeater.name=Hidden Redstone Repeater +tile.crude_oil.name=Oil +tile.crude_oil_moving.name=Crude Oil +tile.crude_oil_still.name=Crude Oil +tile.deconstructor.description=The Deconstructor will take apart your old rockets and other items, returning any salvageable materials. +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. +tile.dishbase.name=Communications Dish +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the centre block, using internal tank. This allows safe breathing inside the bubble. +tile.distributor.name=Oxygen Bubble Distributor +tile.dummyblock.cryogenic_chamber.name=Cryogenic Chamber +tile.dummyblock.launch_pad.name=Rocket Launch Pad +tile.dummyblock.nasa_workbench.name=NASA Workbench +tile.dummyblock.solar.name=Solar Panel +tile.dummyblock.space_station_base.name=Space Station Base +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. +tile.electric_furnace_tier2.description=Electric Arc Furnace is used as a better and faster alternative to both traditional coal and electric furnaces: double output from ores! +tile.enclosed.aluminum_wire.name=Sealable Aluminium Wire +tile.enclosed.copper_cable.name=Sealable Copper Cable +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. +tile.enclosed.fluid_pipe.name=Sealable Fluid Pipe +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fibre Cable +tile.enclosed.gold_cable.name=Sealable Gold Cable +tile.enclosed.heavy_aluminum_wire.name=Sealable Heavy Aluminium Wire +tile.enclosed.hv_cable.name=Sealable HV Cable +tile.enclosed.lv_cable.name=Sealable Tin Cable +tile.enclosed.me_cable.name=Sealable ME Cable +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Fluid Pipe +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Fluid Pipe +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe +tile.enclosed.pipe_power_gold.name=Sealable Golden Kinesis Pipe +tile.enclosed.pipe_power_stone.name=Sealable Stone Kinesis Pipe +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than its predecessor. +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. +tile.fallen_meteor.name=Fallen Meteor +tile.fluid_pipe.description=Fluid Pipe will transfer liquid and gas from source to destination block. Use a Standard Wrench to switch modes. +tile.fluid_pipe.name=Fluid Pipe +tile.fluid_pipe_pull.description=Fluid Pipe will transfer liquid and gas from source to destination block. Use a Standard Wrench to switch modes. +tile.fluid_pipe_pull.name=Fluid Pipe +tile.fluid_tank.description=Fluid Tanks will store liquids and gases for later use. +tile.fluid_tank.name=Fluid Tank +tile.fuel.name=Fuel +tile.fuel_block.name=Fuel +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. +tile.fuel_loader.name=Fuel Loader +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. +tile.glowstone_torch.name=Glowstone Torch +tile.landing_pad.buggy_fueler.name=Buggy Fueling Pad +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad +tile.landing_pad.description=Launch Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. +tile.landing_pad.landing_pad.name=Rocket Launch Pad +tile.landing_pad_full.name=Rocket Launch Pad +tile.machine.0.name=Coal Generator +tile.machine.1.name=Energy Storage Module +tile.machine.2.name=Electric Furnace +tile.machine.3.name=Compressor +tile.machine.7.name=Electric Arc Furnace +tile.machine.8.name=Energy Storage Cluster +tile.machine2.4.name=Electric Compressor +tile.machine2.5.name=Circuit Fabricator +tile.machine2.6.name=Oxygen Storage Module +tile.machine2.10.name=Deconstructor +tile.machine3.9.name=Chromatic Applicator +tile.magnetic_table.name=Magnetic Crafting Table +tile.magnetic_table.description=Items placed won't fall off - it holds its inventory! Can shift-click items in. Hoppers can insert and remove items, it will attempt to automatically create the last recipe crafted. +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs +tile.moon_stairs_stone.name=Moon Rock Stairs +tile.ore_copper.name=Copper Ore +tile.ore_tin.name=Tin Ore +tile.oxygen_compressor.0.name=Oxygen Compressor +tile.oxygen_compressor.1.name=Oxygen Decompressor +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. +tile.oxygen_detector.name=Oxygen Detector +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. +tile.painter.description=Applies colour to Vacuum Glass, Lighting Panels or other paintable objects. Use any block - or dye - to provide a fresh colour! +tile.panel_lighting.description=Lighting panel for use in space! Wrench rotates it. To change the look: hold this in hand and SNEAK + right-click a regular block. +tile.panel_lighting_0.name=Lighting Panel (Square) +tile.panel_lighting_1.name=Lighting Panel (Spotlight) +tile.panel_lighting_2.name=Lighting Panel (Linear) +tile.panel_lighting_3.name=Lighting Panel (Dark) +tile.panel_lighting_4.name=Lighting Panel (Dark) +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. +tile.parachest.name=Parachest +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. +tile.refinery.name=Refinery +tile.rocket_workbench.name=NASA Workbench +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. +tile.sapling2.birch.name=Birch Sapling +tile.sapling2.jungle.name=Jungle Sapling +tile.sapling2.oak.name=Oak Sapling +tile.sapling2.spruce.name=Spruce Sapling +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If the space is enclosed, it will fill with breathable air. +tile.sealer.name=Oxygen Sealer +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab +tile.slab_gc_half.moon_slab.name=Moon Rock Slab +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab +tile.solar.advanced_solar.name=Advanced Solar Panel +tile.solar.basic_solar.name=Basic Solar Panel +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at midday (non-adjustable). +tile.space_glass.description=Vacuum sealed glass for your space bases. Paint the surround any colour using a nearby Chromatic Applicator! +tile.space_glass.clear.description=Clear glass for nice views of space, can also provide a clear view underwater. +tile.space_glass.strong.description=Strong and explosion-resistant glass. Made from Transparent Aluminium... +tile.space_glass_clear.name=Vacuum Glass (Clear) +tile.space_glass_vanilla.name=Vacuum Glass +tile.space_glass_strong.name=Vacuum Glass (Strong) +tile.space_station_base.name=Space Station Arrival Block +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. +tile.spin_thruster.name=Spin Thruster +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. +tile.telemetry.name=Telemetry Unit +tile.tin_stairs_1.name=Tin Decoration Stairs +tile.tin_stairs_2.name=Tin Decoration Stairs +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. +tile.treasure_chest.name=Treasure Chest +tile.unlit_torch.name=Torch +tile.unlit_torch_stone.name=Stone Torch +tile.unlit_torch_lit.name=Torch +tile.unlit_torch_stone_lit.name=Stone Torch +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. +tile.view_screen.name=Display Screen +tile.wall_gc.moon.name=Moon Rock Wall +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall +tile.wall_gc.tin.name=Tin Decoration Wall diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_us.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_us.lang new file mode 100644 index 00000000..64abd2f9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/en_us.lang @@ -0,0 +1,826 @@ +checklist.create_grapple.key=Create Grapple Hook +checklist.equip_oxygen_suit.key=Equip Oxygen Suit +checklist.equip_parachute.key=Equip Parachute +command.gcastrominer.count=The Astro Miner count for player %s is %s +commands.emergencykit=%s was given an emergency kit! +commands.dimensionteleport=%s was sent into the atmosphere%s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s +commands.gchouston.confirm.1=This is Mission Control, say again please? +commands.gchouston.confirm.2=(To abandon mission, type /gchouston again to confirm.) +commands.gchouston.fail=Command /gchouston is only available from space (or Creative Mode). +commands.gchouston.help.1=Uh, Houston, we've had a problem.... +commands.gchouston.help.2=(Type /gchouston to abandon mission and return home.) +commands.gchouston.noop=Using command /gchouston on other players is only available to operators. +commands.gchouston.success=OK, stand by, %s, teleporting to Overworld home position. +commands.joinrace.no_team=The team needs to be specified! Usage: %s +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.magneticcrafting.name=Crafting +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel +container.solarbasic.name=Basic Solar Panel +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.meteor_chunk=%1$s was hit by meteor debris! +death.attack.oxygen_suffocation=%1$s ran out of oxygen! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. +death.attack.sulphuric_acid=%1$s dissolved in sulphuric acid! +death.attack.thermal=%1$s forgot thermal protection +dimension.moon.name=Moon +dimension.overworld.name=Overworld +dimension.sun.name=Sun +entity.alien_villager.name=Alien Villager +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evolved Creeper +entity.evolved_skeleton.name=Evolved Skeleton +entity.evolved_skeleton_boss.name=Evolved Skeleton Boss +entity.evolved_spider.name=Evolved Spider +entity.evolved_zombie.name=Evolved Zombie +entity.evolved_enderman.name=Evolved Enderman +entity.evolved_witch.name=Evolved Witch +entity.flag.name=Flag +entity.gcflag.name=Flag +entity.gravity_arrow.name=Arrow +entity.lander.name=Space Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Chunk +entity.oxygen_bubble.name=Oxygen Bubble +entity.para_chest.name=Parachest +entity.rocket_t1.name=Tier 1 Rocket +galaxy.milky_way=Milky Way +gc.configgui.allow_liquids_grating=Allow liquids to flow into Grating +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_flags=Challenge Mode Flags +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_biome_type_registrations=Disable Biome Type Registrations +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_ore_dict_space_metals=Must use GC's own space metals in recipes +gc.configgui.disable_sapphire_moon=Disable Sapphire Ore Gen on Moon +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.disable_vehicle_camera_changes=Vivecraft: Disable Third-Person and Zoom +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_space_race_manager_popup=Enable Space Race Manager Popup +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on Planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension Type ID +gc.configgui.id_dimension_overworld=Dimension of the Overworld +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension Type ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension Type ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon +gc.configgui.other_mod_ore_gen_i_ds=Custom Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.planet_worldborders=Max x,z for Moon landing +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.static_loaded_new_ss=New Space Stations static loaded? +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.use_old_fuel_fluid_i_d=Use legacy fuelgc fluid registration +gc.configgui.use_old_oil_fluid_i_d=Use legacy oilgc fluid registration +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here +gui.battery_slot.desc.1=or use a connected power source +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! +gui.buggy.accel.name=Accelerate +gui.buggy.decel.name=Decelerate +gui.buggy.inv.name=Inventory / Fuel +gui.buggy.storage_space=Storage Space +gui.buggy.turn.name=Turn left-right +gui.button.back.name=Back +gui.button.disable.name=Disable +gui.button.disableseal.name=Disable Seal +gui.button.enable.name=Enable +gui.button.enableseal.name=Enable Seal +gui.button.hide_dest.name=Hide +gui.button.loadfuel.name=Load Fuel +gui.button.loaditems.name=Load Items +gui.button.next.name=Next +gui.button.paintapply.name=Apply Paint +gui.button.paintmix.name=Mix Color +gui.button.paintreset.name=Reset Color +gui.button.refine.name=Refine +gui.button.stoploading.name=Stop Loading +gui.button.stoprefine.name=Stop Refining +gui.button.stopunloading.name=Stop Unloading +gui.button.unhide_dest.name=Unhide +gui.button.unloaditems.name=Unload Items +gui.button.unlockschematic.name=Unlock Schematic +gui.checkbox.horizontal.name=Horizontal Mode +gui.checkbox.invert.name=Invert Selection +gui.checkbox.player_name.name=Player name is +gui.checkbox.player_within.name=Player is within +gui.checkbox.redstone_signal.name=Opens on Redstone Signal +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! +gui.choose_planet.desc.moon=Habitable#No Oxygen#Gravity: 18% +gui.choose_planet.desc.overworld=Full of Life#Habitable#Gravity: 100% +gui.chooseplanet.alreadycreated1.name=Space Station Already +gui.chooseplanet.alreadycreated2.name=Created! +gui.chooseplanet.cannotcreate1.name=Cannot create Space +gui.chooseplanet.cannotcreate2.name=Station here! +gui.crafting_memory.desc.0=This Magnetic Crafting Table can craft more of this! +gui.crafting_memory.desc.1=To remember a recipe, craft one item. +gui.creative_only.desc=Creative Only +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Current Velocity +gui.docking_rocket.distance_from.name=Distance from Target +gui.docking_rocket.target_vel.name=Target Velocity +gui.docking_rocket.warning.name.0=Press %s to decelerate +gui.docking_rocket.warning.name.1=Press %s to accelerate +gui.dropbox.player_distance.name.0=1 Meter +gui.dropbox.player_distance.name.1=2 Meters +gui.dropbox.player_distance.name.2=5 Meters +gui.dropbox.player_distance.name.3=10 Meters +gui.electric_compressor.desc.0=Progress +gui.energy_storage.desc.0=Energy Storage +gui.energy_storage.desc.1=Energy +gui.flag.already_placed=Flag already placed here! +gui.frequency_module.desc.0=Can receive weak sound +gui.frequency_module.desc.1=waves and distant signals +gui.frequencymodule.warning0=I'll probably need a +gui.frequencymodule.warning1=if I want to hear properly here. +gui.fuel_output.desc.0=Place empty liquid canisters into +gui.fuel_output.desc.1=this slot to fill them from the +gui.fuel_output.desc.2=fuel tank +gui.fuel_tank.desc.0=Fuel tank. Requires +gui.fuel_tank.desc.1=fuel loader to fill +gui.fuel_tank.desc.2=Fuel tank, can be filled +gui.fuel_tank.desc.3=with fuel canisters +gui.fuel_tank.desc.4=Fuel tank +gui.infinite_item.desc=Infinite +gui.lander.velocity=Entry Velocity +gui.lander.velocityu=m/s +gui.lander.warning2=Hold " +gui.lander.warning3=" to slow down! +gui.max_output.desc=Max Output +gui.message.addnewsch.name=Add New Schematic +gui.message.apply.name=Apply +gui.message.assign_name.name=Assign Name +gui.message.atmosphere.name=Atmosphere +gui.message.back.name=Back +gui.message.breed.name=Breed +gui.message.bubble_visible.name=Bubble Visible +gui.message.can_create_space_station.name=A Space Station can be created here! +gui.message.cancel.name=Cancel +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. +gui.message.catalog.name=Catalog +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) +gui.message.click_again.1.name=Click again to zoom (view moons) +gui.message.click_again.2.name=Click again to zoom (view satellites) +gui.message.click_again.3.name=Click again to zoom +gui.message.clicklink=Click for Galacticraft Wiki +gui.message.create_ss.name=Create +gui.message.daynightcycle.name=Day-night Cycle +gui.message.energy=Energy +gui.message.environment.name=Environmental Boost +gui.message.exit.name=Exit +gui.message.fuel.name=Fuel +gui.message.full.name=full +gui.message.generating.name=Generating +gui.message.grow.name=Grow +gui.message.heal.name=Heal +gui.message.help1=For Galacticraft help +gui.message.help1a=To see this message again at any time, type +gui.message.help2=For Space Program guidance +gui.message.help3=For help with oil +gui.message.in.name=In +gui.message.launch.name=Launch +gui.message.max_energy=Max Energy +gui.message.meansurfacetemp.name=Mean Surface Temp +gui.message.moon.atmosphere.0.name=None +gui.message.moon.daynightcycle.0.name=29.5 Earth Days +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253°C +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153°C +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and +gui.message.moon.surfacecomposition.1.name=Traces of Cheese +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% of Earth) +gui.message.of.name=of +gui.message.oil.name=Oil +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen +gui.message.overworld.atmosphere.1.name=Supports life +gui.message.overworld.daynightcycle.0.name=1 Earth Day +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and +gui.message.overworld.surfacecomposition.1.name=gravel +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% of Earth) +gui.message.prelaunch=Pre-launch checklist +gui.message.rename.name=Rename +gui.message.select_ss.name=Select a Space Station +gui.message.ss_owner.name=Owner: +gui.message.status.name=Status +gui.message.strengthen.name=Strengthen +gui.message.surfacecomposition.name=Surface Composition +gui.message.surfacegravity.name=Surface Gravity +gui.message.thermal_status.name=Thermal Control +gui.message.tier.name=Tier %d +gui.message.unnamed.name=Unnamed +gui.missing_core.name.0=MicdoodleCore not found in mods folder +gui.missing_core.name.1=Galacticraft failed to load +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore +gui.missing_core.name.3=Click here to open download page +gui.new_schematic.slot.desc.0=New schematic slot. You +gui.new_schematic.slot.desc.1=can find new schematics +gui.new_schematic.slot.desc.2=by completing dungeons +gui.new_schematic.slot.desc.3=on planets and moons +gui.oil_tank.desc.0=Oil tank, can be filled +gui.oil_tank.desc.1=with oil canisters +gui.oxygen.warning=Oxygen Setup is Invalid! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply +gui.oxygen_storage.desc.0=Oxygen Storage +gui.oxygen_storage.desc.1=Oxygen +gui.oxygen_use.desc=Oxygen Use +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Food +gui.player.health=Health +gui.player.ouch=ouch!!!! +gui.receiver.cannot_attach=Cannot attach receiver here! +gui.requires_controller.desc=Requires Launch Controller +gui.rocket.countdown=Countdown +gui.rocket.height=Height +gui.rocket.inv.name=Inventory / Fuel +gui.rocket.launch.name=Launch +gui.rocket.launched=Launched +gui.rocket.on_launchpad=On launchpad +gui.rocket.speed=Speed +gui.rocket.turn.name=Turn left-right +gui.rocket.updown.name=Turn up-down +gui.rocket.warning.fuelinsufficient=Not enough fuel for a safe launch under automatic control! +gui.rocket.warning.launchcontroller=Pre-flight cancelling launch. Check the Launch Controller! +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! +gui.rocket_type.0=Storage Space: 18 +gui.rocket_type.1=Storage Space: 36 +gui.rocket_type.2=Storage Space: 54 +gui.rocket_type.3=Pre-fueled +gui.seconds=s +gui.sensor.advanced=Advanced Mode +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Show Bubble +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. +gui.space_race.chat.add_success=%s has joined the Space Race! +gui.space_race.chat.already_part=You are already a part of this space race! +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. +gui.space_race.chat.not_found=Could not find player with name: %s +gui.space_race.chat.remove_success=%s has been removed from the Space Race. +gui.space_race.chat.to_join=To join %s use command %s +gui.space_race.coming_soon=Coming Soon +gui.space_race.create.add_players.name=Add Player(s) +gui.space_race.create.back.name=Back +gui.space_race.create.brush_radius.name=Brush Radius +gui.space_race.create.brush_size.name=Brush Size +gui.space_race.create.change_color.name.0=Change +gui.space_race.create.change_color.name.1=Team +gui.space_race.create.change_color.name.2=Color +gui.space_race.create.close.name=Close +gui.space_race.create.customize.name=Customize Flag +gui.space_race.create.eraser_radius.name=Eraser Radius +gui.space_race.create.eraser_size.name=Eraser Size +gui.space_race.create.global_stats.name=View Global Stats +gui.space_race.create.invite_player.name=Invite Player +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) +gui.space_race.create.rem_players.name=Remove Player(s) +gui.space_race.create.remove.name=Remove +gui.space_race.create.remove_player.name=Remove Player +gui.space_race.create.rename.name=Rename Team +gui.space_race.create.send_invite.name=Send Invite +gui.space_race.create.server_stats.name=View Server Stats +gui.space_race.create.title.name.0=Space Race +gui.space_race.create.title.name.1=Manager +gui.space_race.create.title.name=Space Race Manager +gui.space_race.join.member_count.name=%d members +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Owner +gui.space_race.join.title.name=Join Space Race +gui.space_race.unnamed=Unnamed Team +gui.spacestation.added=You've been added to %s's Space Station accepted players! +gui.spacestation.addsuccess=Successfully added %s to Space Station list! +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Successfully removed %s from Space Station list +gui.spacestation.to_allow_entry=to allow another player to enter this space station! +gui.spacestation.type_command=Type +gui.status.active.name=Active +gui.status.air_lock_closed.name=Air Lock Closed +gui.status.air_lock_open.name=Air Lock Open +gui.status.blockedfully.name=Sun is Not Visible +gui.status.blockedpartial.name=Sun Partially Visible +gui.status.check_pending.name=Check Pending +gui.status.check_starting.name=Check Starting +gui.status.checking_seal.name=Checking Seal +gui.status.collecting.name=Collecting +gui.status.collectingenergy.name=Collecting Energy +gui.status.compressing.name=Compressing +gui.status.disabled.name=Disabled +gui.status.fulltank.name=Oxygen Tank Full +gui.status.generating.name=Generating +gui.status.hull_heat.name=Hull Heat +gui.status.idle.name=Idle +gui.status.missingleaves.name=Not Enough Leaf Blocks +gui.status.missingoxygen.name=Not Enough Oxygen +gui.status.missingpower.name=Not Enough Power +gui.status.missingpower.short.name=No Power +gui.status.missingtank.name=No Valid Oxygen Tank +gui.status.nofuel.name=No Fuel to Load! +gui.status.noinvtarget.name=No Inventory on Target! +gui.status.noitems.name=No Items to Load! +gui.status.nooil.name=No Oil +gui.status.not_available.name=N/A +gui.status.not_generating.name=Not Generating +gui.status.notargetload.name=No Target to Load Into! +gui.status.notargetunload.name=No Target to Unload! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Raining +gui.status.ready.name=Ready +gui.status.refining.name=Refining +gui.status.running.name=Running +gui.status.sealed.name=Sealed +gui.status.sealerblocked.name=Output Vent Blocked! +gui.status.sun_visible.name=Sun Visible +gui.status.tank_empty.name=Oxygen Tank Empty +gui.status.targetempty.name=Target Vehicle is Empty! +gui.status.targetfull.name=Target Vehicle is Full! +gui.status.unknown.name=Unknown +gui.status.unsealed.name=Area Too Big / Unsealed +gui.tank.oxygen_remaining=Oxygen Remaining +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! +gui.telemetry_succeed.message=Telemetry link created. +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient +gui.thermal_slot.desc.1=Thermal Controller' here (optional) +gui.thermal_slot.desc.2=Note: Uses more energy! +gui.title.air_lock.name=%s's Air Lock Controller +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. +gui.village.warning.no_freq_mod=I'll need to equip a Frequency Module to communicate with them! +gui.warning.invalid_thermal=Invalid Thermal Protection! +gui.warning.noroom=Not enough room! +gui.warning=WARNING! +item.air_fan.name=Oxygen Fan +item.air_vent.name=Oxygen Vent +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller +item.basic_item.canned_food.name=Can of Food +item.basic_item.compressed_aluminum.name=Compressed Aluminum +item.basic_item.compressed_bronze.name=Compressed Bronze +item.basic_item.compressed_copper.name=Compressed Copper +item.basic_item.compressed_iron.name=Compressed Iron +item.basic_item.compressed_steel.name=Compressed Steel +item.basic_item.compressed_tin.name=Compressed Tin +item.basic_item.dehydrated_apple.name=Dehydrated Apples +item.basic_item.dehydrated_carrot.name=Dehydrated Carrots +item.basic_item.dehydrated_melon.name=Dehydrated Melons +item.basic_item.dehydrated_potato.name=Dehydrated Potatoes +item.basic_item.frequency_module.name=Frequency Module +item.basic_item.ingot_aluminum.name=Aluminum Ingot +item.basic_item.ingot_bronze.name=Bronze Ingot +item.basic_item.ingot_copper.name=Copper Ingot +item.basic_item.ingot_steel.name=Steel Ingot +item.basic_item.ingot_tin.name=Tin Ingot +item.basic_item.raw_silicon.name=Raw Silicon +item.basic_item.solar_module_0.name=Single Solar Module +item.basic_item.solar_module_1.name=Full Solar Panel +item.basic_item.wafer_advanced.name=Advanced Wafer +item.basic_item.wafer_basic.name=Basic Wafer +item.basic_item.wafer_solar.name=Blue Solar Wafer +item.battery.name=Battery +item.bucket_fuel.name=Fuel Bucket +item.bucket_oil.name=Oil Bucket +item.buggy.name=Buggy +item.buggymat.seat.name=Buggy Seat +item.buggymat.storage.name=Buggy Storage Box +item.buggymat.wheel.name=Buggy Wheel +item.canister.copper.name=Copper Canister +item.canister.tin.name=Tin Canister +item.canvas.name=Canvas +item.cheese_block.name=Block of Cheese +item.cheese_curd.name=Cheese Curd +item.compressed_meteoric_iron.name=Compressed Meteoric Iron +item.dungeonfinder.name=Dungeon Locator +item.empty_liquid_canister.name=Empty Canister +item.emergency_kit.description=Right click to equip Oxygen Gear and other essential items. Warning: One time use! +item.emergency_kit.name=Space Emergency Kit +item.engine.tier1booster.name=Tier 1 Booster +item.engine.tier1engine.name=Tier 1 Rocket Engine +item.flag.name=Flag +item.food.cheese_slice.name=Cheese Slice +item.food.burger_bun.name=Burger Bun +item.food.beef_patty_raw.name=Ground Beef (Raw) +item.food.beef_patty_cooked.name=Beef Patty (Cooked) +item.food.cheeseburger.desc=Astronauts love cheeseburgers! A very satisfying food. +item.food.cheeseburger.name=Cheeseburger +item.food.canned_beef.name=Canned Beef +item.fuel.name=Rocket Fuel +item.fuel_canister.name=Filled Fuel Canister +item.fuel_canister_partial.name=Partially Filled Fuel Canister +item.heavy_plating.name=Heavy-Duty Plate +item.hot_description.name=Hot +item.ic2compat.ore_crushed_alu.name=Crushed Aluminum Ore +item.ic2compat.ore_purified_alu.name=Purified Crushed Aluminum Ore +item.ic2compat.dust_alu.name=Aluminum Dust +item.ic2compat.dust_small_titanium.name=Tiny Pile of Titanium Dust +item.infinite_battery.name=Infinite Battery +item.infinite_oxygen.name=Infinite Oxygen Supply +item.key.t1.name=Tier 1 Dungeon Key +item.lunar_sapphire.description=Lunar Sapphires are the unit of currency when trading with Alien Villagers +item.lunar_sapphire.name=Lunar Sapphire +item.meteor_chunk.name=Throwable Meteor Chunk +item.meteor_chunk_hot.name=Throwable Meteor Chunk +item.meteoric_iron_ingot.name=Meteoric Iron Ingot +item.meteoric_iron_raw.name=Raw Meteoric Iron +item.nose_cone.name=Nose Cone +item.oil_canister.name=Filled Oil Canister +item.oil_canister_partial.name=Partially Filled Oil Canister +item.oil_extractor.name=Portable Oil Extractor +item.oxygen_concentrator.name=Oxygen Concentrator +item.oxygen_gear.name=Oxygen Gear +item.oxygen_mask.name=Oxygen Mask +item.oxygen_tank_heavy_empty.name=Empty Heavy Oxygen Tank +item.oxygen_tank_heavy_full.name=Heavy Oxygen Tank +item.oxygen_tank_light_empty.name=Empty Light Oxygen Tank +item.oxygen_tank_light_full.name=Light Oxygen Tank +item.oxygen_tank_med_empty.name=Empty Medium Oxygen Tank +item.oxygen_tank_med_full.name=Medium Oxygen Tank +item.parachute_black.name=Black Parachute +item.parachute_blue.name=Light Blue Parachute +item.parachute_brown.name=Brown Parachute +item.parachute_darkblue.name=Blue Parachute +item.parachute_darkgray.name=Gray Parachute +item.parachute_darkgreen.name=Green Parachute +item.parachute_gray.name=Light Gray Parachute +item.parachute_lime.name=Lime Parachute +item.parachute_magenta.name=Magenta Parachute +item.parachute_orange.name=Orange Parachute +item.parachute_pink.name=Pink Parachute +item.parachute_plain.name=Parachute +item.parachute_purple.name=Purple Parachute +item.parachute_red.name=Red Parachute +item.parachute_teal.name=Cyan Parachute +item.parachute_yellow.name=Yellow Parachute +item.rocket_fins.name=Rocket Fins +item.rocket_t1.name=Tier 1 Rocket +item.schematic.name=NASA Workbench Schematic +item.sensor_glasses.name=Sensor Glasses +item.sensor_lens.name=Sensor Lens +item.standard_wrench.name=Standard Wrench +item.steel_axe.name=Heavy Duty Axe +item.steel_boots.name=Heavy Duty Boots +item.steel_chestplate.name=Heavy Duty Chestplate +item.steel_helmet.name=Heavy Duty Helmet +item.steel_hoe.name=Heavy Duty Hoe +item.steel_leggings.name=Heavy Duty Leggings +item.steel_pickaxe.name=Heavy Duty Pickaxe +item.steel_pole.name=Steel Pole +item.steel_shovel.name=Heavy Duty Shovel +item.steel_sword.name=Heavy Duty Sword +item.tier1.desc=Tier 1 +item_desc.powerdraw.name=Power required: %s /s +item_desc.shift.name=Press %s for more info +item_group.galacticraft_blocks=Galacticraft Blocks +item_group.galacticraft_items=Galacticraft Items +jei.arc_lamp.info=Very bright light in the facing direction. Place high up for best effect! Rotate using Standard Wrench. +jei.electric_compressor.info=Electric version of the Ingot Compressor, twice as fast! Even faster with Tier 2 power. A Hopper can fill or empty this machine. +jei.electric_compressor.appeng.info=For automation with AE2, set up your recipes with ingots from 2 different mods. See https:goo.gl/BwY15G for full info. +jei.fluid_pipe.info=Pipe for transporting any liquid or gas. To pump fluid out of a tank, click with a Standard Wrench to convert to 'pull mode'. \nPipe in pull mode cannot fill a tank or machine - so make your pipe runs at least 2 blocks long! +jei.fuel_loader.info=Place next to a Rocket Launch Pad. Refuels any rocket positioned on the pad. Essential for any journey into space - including your journey home again! +jei.magnetic_crafting.info=A Crafting Table which holds its items. Can accept items from a Hopper to auto-craft the last recipe successfully crafted. +jei.oxygen_collector.info=Collects breathable oxygen mixture from the Overworld or - in space - from nearby green leaves or growing crops. \nPipe the oxygen to Oxygen Compressor for oxygen tanks, or Oxygen Bubble Distributor or Oxygen Sealer. +jei.oxygen_distributor.info=Creates a bubble environment in space where players (and other creatures) can breath. Supply this with breathable oxygen mixture from Oxygen Collector or Oxygen Storage Module. +jei.oxygen_sealer.info=Fills 1 room in your space base with a breathable atmosphere. Supply this with breathable oxygen mixture from Oxygen Collector or Oxygen Storage Module. All walls of the room must be solid. \nFind leaks using Sensor Glasses! \nMaximum room size for 1 Oxygen Sealer is 10x10x8 blocks. Use multiple Oxygen Sealers for larger rooms! +jei.wrench.info=Most Galacticraft machines can be rotated by right-clicking with the Standard Wrench. \nMost electrical machines can change their power and other input and output sides using this and Shift-clicking. +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Toggle Sensor Goggles Mode +keybind.spaceshipinv.name=Open Spaceship Inventory +keybind.vehiclebackward.name=Vehicle Backward Key +keybind.vehicledown.name=Vehicle Down Key +keybind.vehicleforward.name=Vehicle Forward Key +keybind.vehicleleft.name=Vehicle Left Key +keybind.vehicleright.name=Vehicle Right Key +keybind.vehicleup.name=Vehicle Up Key +moon.moon=Moon +planet.curseforge=CurseForge +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter +planet.mercury=Mercury +planet.neptune=Neptune +planet.overworld=Overworld +planet.saturn=Saturn +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Overworld Space Station +schematic.moonbuggy.name=Moon Buggy +schematic.rocket_t1.name=Tier 1 Rocket +schematic.rocket_t2.name=Tier 2 Rocket +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Air Lock Controller +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. +tile.air_lock_frame.name=Air Lock Frame +tile.air_lock_seal.name=Air Lock Seal +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. +tile.aluminum_wire.alu_wire.name=Aluminum Wire +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Its higher capacity boosts efficiency for Tier 2 machines. +tile.aluminum_wire.alu_wire_heavy.name=Heavy Aluminum Wire +tile.aluminum_wire.alu_wire_switch.description=Switchable Aluminum Wire connects like Aluminum Wire, unless switched OFF with a redstone signal. +tile.aluminum_wire.alu_wire_switch.name=Switchable Aluminum Wire +tile.aluminum_wire.alu_wire_switch_heavy.description=Switchable Heavy Aluminum Wire connects like Heavy Aluminum Wire, unless switched OFF with a redstone signal. +tile.aluminum_wire.alu_wire_switch_heavy.name=Switchable Heavy Aluminum Wire +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. +tile.arclamp.name=Arc Lamp +tile.basic_block_core.block_aluminum_gc.name=Aluminum Block +tile.basic_block_core.block_copper_gc.name=Copper Block +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron +tile.basic_block_core.block_tin_gc.name=Block of Tin +tile.basic_block_core.block_silicon_gc.name=Silicon Block +tile.basic_block_core.deco_block_0.name=Tin Decoration Block +tile.basic_block_core.deco_block_1.name=Tin Wall Block +tile.basic_block_core.ore_aluminum_gc.name=Aluminum Ore +tile.basic_block_core.ore_copper_gc.name=Copper Ore +tile.basic_block_core.ore_silicon.name=Silicon Ore +tile.basic_block_core.ore_tin_gc.name=Tin Ore +tile.basic_block_moon.bricks.name=Moon Dungeon Brick +tile.basic_block_moon.cheesestone.name=Cheese Ore +tile.basic_block_moon.coppermoon.name=Copper Ore +tile.basic_block_moon.moondirt.name=Moon Dirt +tile.basic_block_moon.moongrass.name=Moon Turf +tile.basic_block_moon.moonstone.name=Moon Rock +tile.basic_block_moon.sapphiremoon.name=Sapphire Ore +tile.basic_block_moon.tinmoon.name=Tin Ore +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! +tile.cargo.loader.name=Cargo Loader +tile.cargo.unloader.name=Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. +tile.cheese.name=Block of Cheese +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. +tile.coal_generator.description=Coal Generator will burn coal (or a Block of Coal) for energy. The simplest but least efficient energy production method. +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. +tile.collector.name=Oxygen Collector +tile.compressor.description=Compressor will process ingots into their compressed equivalents. The most essential machine in Galacticraft! +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than its predecessor. +tile.compressor_advanced.description=A faster version of the Electric Compressor. Rapidly processes ingots into their compressed equivalents. +tile.concealed_detector.name=Player Detector +tile.concealed_redstone.name=Hidden Redstone Wire +tile.concealed_repeater.name=Hidden Redstone Repeater +tile.crude_oil.name=Oil +tile.crude_oil_moving.name=Crude Oil +tile.crude_oil_still.name=Crude Oil +tile.deconstructor.description=The Deconstructor will take apart your old rockets and other items, returning any salvageable materials. +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. +tile.dishbase.name=Communications Dish +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. +tile.distributor.name=Oxygen Bubble Distributor +tile.dummyblock.cryogenic_chamber.name=Cryogenic Chamber +tile.dummyblock.launch_pad.name=Rocket Launch Pad +tile.dummyblock.nasa_workbench.name=NASA Workbench +tile.dummyblock.solar.name=Solar Panel +tile.dummyblock.space_station_base.name=Space Station Base +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. +tile.electric_furnace_tier2.description=Electric Arc Furnace is used as a better and faster alternative to both traditional coal and electric furnaces: double output from ores! +tile.emergency_box.description=Place an Emergency Post close by your first landing place on a planet. Open to find Emergency Kit inside. Also repels mobs! +tile.emergency_box.filled.name=Emergency Post (with Kit) +tile.emergency_box.name=Emergency Post +tile.enclosed.aluminum_wire.name=Sealable Aluminum Wire +tile.enclosed.copper_cable.name=Sealable Copper Cable +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. +tile.enclosed.fluid_pipe.name=Sealable Fluid Pipe +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fiber Cable +tile.enclosed.gold_cable.name=Sealable Gold Cable +tile.enclosed.heavy_aluminum_wire.name=Sealable Heavy Aluminum Wire +tile.enclosed.hv_cable.name=Sealable HV Cable +tile.enclosed.lv_cable.name=Sealable Tin Cable +tile.enclosed.me_cable.name=Sealable ME Cable +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Fluid Pipe +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Fluid Pipe +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe +tile.enclosed.pipe_power_gold.name=Sealable Golden Kinesis Pipe +tile.enclosed.pipe_power_stone.name=Sealable Stone Kinesis Pipe +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than its predecessor. +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. +tile.fallen_meteor.name=Fallen Meteor +tile.fluid_pipe.description=Fluid Pipe will transfer liquid and gas from source to destination block. Use a Standard Wrench to switch modes. +tile.fluid_pipe.name=Fluid Pipe +tile.fluid_pipe_pull.description=Fluid Pipe will transfer liquid and gas from source to destination block. Use a Standard Wrench to switch modes. +tile.fluid_pipe_pull.name=Fluid Pipe +tile.fluid_tank.description=Fluid Tanks will store liquids and gases for later use. +tile.fluid_tank.name=Fluid Tank +tile.fuel.name=Fuel +tile.fuel_block.name=Fuel +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. +tile.fuel_loader.name=Fuel Loader +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. +tile.glowstone_torch.name=Glowstone Torch +tile.grating.name=Grating +tile.landing_pad.buggy_fueler.name=Buggy Fueling Pad +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad +tile.landing_pad.description=Launch Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. +tile.landing_pad.landing_pad.name=Rocket Launch Pad +tile.landing_pad_full.name=Rocket Launch Pad +tile.machine.0.name=Coal Generator +tile.machine.1.name=Energy Storage Module +tile.machine.2.name=Electric Furnace +tile.machine.3.name=Compressor +tile.machine.7.name=Electric Arc Furnace +tile.machine.8.name=Energy Storage Cluster +tile.machine2.4.name=Electric Compressor +tile.machine2.5.name=Circuit Fabricator +tile.machine2.6.name=Oxygen Storage Module +tile.machine2.10.name=Deconstructor +tile.machine3.9.name=Chromatic Applicator +tile.machine4.11.name=Advanced Compressor +tile.magnetic_table.name=Magnetic Crafting Table +tile.magnetic_table.description=Items placed won't fall off - it holds its inventory! Can shift-click items in. Hoppers can insert and remove items, it will attempt to automatically create the last recipe crafted. +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs +tile.moon_stairs_stone.name=Moon Rock Stairs +tile.ore_copper.name=Copper Ore +tile.ore_tin.name=Tin Ore +tile.oxygen_compressor.0.name=Oxygen Compressor +tile.oxygen_compressor.1.name=Oxygen Decompressor +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. +tile.oxygen_detector.name=Oxygen Detector +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. +tile.painter.description=Applies color to Vacuum Glass, Lighting Panels or other paintable objects. Use any block - or dye - to provide a fresh color! +tile.panel_lighting.description=Lighting panel for use in space! Wrench rotates it. To change the look: hold SNEAK while placing this against the chosen block. +tile.panel_lighting_0.name=Lighting Panel (Square) +tile.panel_lighting_1.name=Lighting Panel (Spotlight) +tile.panel_lighting_2.name=Lighting Panel (Linear) +tile.panel_lighting_3.name=Lighting Panel (Dark) +tile.panel_lighting_4.name=Lighting Panel (Dark) +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. +tile.parachest.name=Parachest +tile.platform.description=Place 4 to form a platform. The platform lifts players to the next platform above or below. SNEAK = down : JUMP = up. +tile.platform.name=Hydraulic Platform +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. +tile.refinery.name=Refinery +tile.compact_workbench.name=Compact NASA Workbench +tile.compact_workbench.description=Compact variant of the NASA Workbench. +tile.rocket_workbench.name=NASA Workbench +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. +tile.sapling2.birch.name=Birch Sapling +tile.sapling2.jungle.name=Jungle Sapling +tile.sapling2.oak.name=Oak Sapling +tile.sapling2.spruce.name=Spruce Sapling +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If the space is enclosed, it will fill with breathable air. +tile.sealer.name=Oxygen Sealer +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab +tile.slab_gc_half.moon_slab.name=Moon Rock Slab +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab +tile.solar.advanced_solar.name=Advanced Solar Panel +tile.solar.basic_solar.name=Basic Solar Panel +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). +tile.space_glass.description=Vacuum sealed glass for your space bases. Paint the surround any color using a nearby Chromatic Applicator! +tile.space_glass.clear.description=Clear glass for great views of space, can also provide a clear view underwater. +tile.space_glass.strong.description=Strong and explosion-resistant glass. Made from Transparent Aluminum... +tile.space_glass_clear.name=Vacuum Glass (Clear) +tile.space_glass_vanilla.name=Vacuum Glass +tile.space_glass_strong.name=Vacuum Glass (Strong) +tile.space_station_base.name=Space Station Arrival Block +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. +tile.spin_thruster.name=Spin Thruster +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. +tile.telemetry.name=Telemetry Unit +tile.tin_stairs_1.name=Tin Decoration Stairs +tile.tin_stairs_2.name=Tin Decoration Stairs +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. +tile.treasure_chest.name=Treasure Chest +tile.unlit_torch.name=Torch +tile.unlit_torch_stone.name=Stone Torch +tile.unlit_torch_lit.name=Torch +tile.unlit_torch_stone_lit.name=Stone Torch +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. +tile.view_screen.name=Display Screen +tile.wall_gc.moon.name=Moon Rock Wall +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall +tile.wall_gc.tin.name=Tin Decoration Wall + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=Explore the Moon... and beyond! +advancement.galacticraft.coal_generator.title=Coal Power +advancement.galacticraft.coal_generator.description=Craft a Coal Generator +advancement.galacticraft.circuit_fabricator.title=Fabricated +advancement.galacticraft.circuit_fabricator.description=Craft a circuit fabricator to make wafers +advancement.galacticraft.basic_wafer.title=Tasty wafers +advancement.galacticraft.basic_wafer.description=Craft a basic wafer. (It's silicon so please don't eat it!) +advancement.galacticraft.advanced_wafer.title=Golden wafers +advancement.galacticraft.advanced_wafer.description=Craft an advanced wafer. (You still can't eat it!) +advancement.galacticraft.compressor.title=Compressed +advancement.galacticraft.compressor.description=Craft a compressor +advancement.galacticraft.solar.title=Free Energy +advancement.galacticraft.solar.description=Craft a Basic Solar Panel +advancement.galacticraft.advanced_solar.title=Fast + Efficient +advancement.galacticraft.advanced_solar.description=Craft an Advanced Solar Panel +advancement.galacticraft.electric_compressor.title=Electrical Upgrade +advancement.galacticraft.electric_compressor.description=Craft an electric compressor +advancement.galacticraft.oil.title=Sticky stuff +advancement.galacticraft.oil.description=Fall into some oil +advancement.galacticraft.refiery.title=Time to Refine! +advancement.galacticraft.refiery.description=Craft a Refinery +advancement.galacticraft.rocket_fuel.title=Rocket Fuel +advancement.galacticraft.rocket_fuel.description=Refine oil in the refinery +advancement.galacticraft.oxygen_collector.title=Oxygen not included +advancement.galacticraft.oxygen_collector.description=Craft an Oxygen Collector +advancement.galacticraft.oxygen_compressor.title=Compress the air +advancement.galacticraft.oxygen_compressor.description=Craft an Oxygen Compressor +advancement.galacticraft.fill_tank.title=Air 2 Go +advancement.galacticraft.fill_tank.description=Fill up an oxygen tank +advancement.galacticraft.fill_all_tanks.title=Oxygen stockpile +advancement.galacticraft.fill_all_tanks.description=Fill up every kind of oxygen tank +advancement.galacticraft.all_oxygen_gear.title=All set +advancement.galacticraft.all_oxygen_gear.description=Create everything you need to breath in space +advancement.galacticraft.rocket_workbench.title=Space Engineer +advancement.galacticraft.rocket_workbench.description=Craft a NASA Workbench +advancement.galacticraft.rocket_t1.title=We have a Rocket! +advancement.galacticraft.rocket_t1.description=Weld a rocket together +advancement.galacticraft.fuel_loader.title=Fill her up! +advancement.galacticraft.fuel_loader.description=Craft a fuel loader +advancement.galacticraft.launch_rocket.title=We have liftoff! +advancement.galacticraft.launch_rocket.description=Launch your first rocket +advancement.galacticraft.moon.title=The Moon! +advancement.galacticraft.moon.description=Land on the moon +advancement.galacticraft.create_space_station.title=Space Station +advancement.galacticraft.create_space_station.description=Create your own space station! +advancement.galacticraft.spin_thruster.title=I'm getting dizzzyy +advancement.galacticraft.spin_thruster.description=Craft a spin thruster +advancement.galacticraft.moon_dungeon.title=Worse than a wither +advancement.galacticraft.moon_dungeon.description=Find an evolved skeleton boss in a dungeon +advancement.galacticraft.dungeon_key_moon.title=I has the key +advancement.galacticraft.dungeon_key_moon.description=Kill the boss hiding in the dungeon, and steal it's key +advancement.galacticraft.moon_buggy_schematic.title=Glitchy schematic +advancement.galacticraft.moon_buggy_schematic.description=Obtain a moon §obuggy schematic +advancement.galacticraft.moon_buggy.title=Buggy +advancement.galacticraft.moon_buggy.description=Weld a moon buggy together diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/es_es.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/es_es.lang new file mode 100644 index 00000000..ffea9af8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/es_es.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=El contador de astro miner para el jugador %s es %s +commands.dimensionteleport=%s fue enviado a la atmósfera%s +commands.dimensiontp.too_many=Demasiados argumentos de comando! Uso: %s +commands.gcenergyunits.invalid_units=Unidades inválidas en comando /GCEnergyUnits. Uso: %s +commands.gcenergyunits.no_units=Las unidades necesitan ser especificadas! Uso: %s +commands.joinrace.no_team=El equipo debe ser especificado! Uso: %s +commands.ssinvite.not_found=¡No se encuentran estaciones espaciales para tu nombre de usuario, necesitas viajar a ellas primero! +commands.ssinvite.wrong_usage=¡Argumentos de comando insuficientes! Uso: %s +commands.ssnewowner.wrong_usage=No se reconoce ID de estación espacial# -¿Realmente existe? Uso: %s +commands.ssuninvite.no_player=¡No se encuentra jugador con nombre %s en tu lista de estación espacial! +container.cargoloader.name=Plataforma de carga +container.cargounloader.name=Plataforma de descarga +container.fuelloader.name=Cargador de combustible +container.lander.name=Aterrizador +container.oxygencollector.name=Recolector de oxígeno +container.oxygencompressor.name=Compresor de oxígeno +container.oxygendecompressor.name=Descompresor de oxígeno +container.oxygendistributor.name=Distribuidor de oxígeno +container.oxygensealer.name=Sellador de oxígeno +container.parachest.name=Cofre-paraca +container.refinery.name=Refinería +container.solaradvanced.name=Panel solar avanzado +container.solarbasic.name=Panel solar básico +container.spaceship.name=Cohete nivel 1 +container.treasurechest.name=Cofre del tesoro +death.attack.oxygen_suffocation=¡%1$s se quedó sin oxígeno! +death.attack.spaceship_crash=El cohete de %1$s se estrelló contra el suelo. Oops. +death.attack.thermal=%1$s olvidó la protección térmica +dimension.moon.name=Luna +dimension.overworld.name=Mundo principal +dimension.sun.name=Sol +entity.alien_villager.name=Aldeano alien +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper evolucionado +entity.evolved_skeleton.name=Esqueleto evolucionado +entity.evolved_skeleton_boss.name=Jefe esqueleto evolucionado +entity.evolved_spider.name=Araña evolucionada +entity.evolved_zombie.name=Zombie evolucionado +entity.flag.name=Bandera +entity.gcflag.name=Bandera +entity.gravity_arrow.name=Flecha +entity.lander.name=Aterrizador +entity.meteor.name=Meteorito +entity.meteor_chunk.name=Trozo de meteorito +entity.oxygen_bubble.name=Burbuja de oxígeno +entity.para_chest.name=Cofre-paraca +entity.rocket_t1.name=Cohete nivel 1 +galaxy.milky_way=Vía Láctea +gc.configgui.alternate_canister_recipe=Alternar receta de bote +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=ID base para biomas de GC +gc.configgui.detectable_i_ds=IDs detectables +gc.configgui.disable_cheese_moon=Desactivar generación de queso en la Luna +gc.configgui.disable_copper_moon=Desactivar generación de cobre en la Luna +gc.configgui.disable_lander=Desactivar lander en la Luna, usar paracaídas en su lugar +gc.configgui.disable_moon_village_gen=Desactivar generación de poblados en la Luna +gc.configgui.disable_space_station_creation=Desactivar creación de estación espacial +gc.configgui.disable_spaceship_grief=Desactivar explosiones de cohetes +gc.configgui.disable_spaceship_particles=Desactivar partículas del cohete +gc.configgui.disable_tin_moon=Desactivar generación de estaño en la Luna +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Modificador de vida de jefe de mazmorra +gc.configgui.enable_aluminum_ore_gen=Generación de aluminio en el mundo principal +gc.configgui.enable_copper_ore_gen=Generación de cobre en el mundo principal +gc.configgui.enable_debug=Mostrar mensajes de depuración en consola +gc.configgui.enable_other_mods_features=Activar generador de mundo de otro mod +gc.configgui.enable_retrogen_oil=Retrogenerar petróleo en el mundo principal +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Generación de silicio en el mundo principal +gc.configgui.enable_thaum_craft_nodes=Activar nodos de ThaumCraft en planetas +gc.configgui.enable_tin_ore_gen=Generación de estaño en el mundo principal +gc.configgui.external_oil_gen=Generador externo de petróleo +gc.configgui.force_overworld_respawn=Forzar respawn en el mundo principal +gc.configgui.hard_mode=Mayor nivel de dificultad +gc.configgui.id_achiev_base=ID base de los logros +gc.configgui.id_dimension_moon=ID de dimensión de la Luna +gc.configgui.id_dimension_overworld_orbit=ID de dimensión de estación espacial +gc.configgui.id_dimension_overworld_orbit_static=ID de la dimensión de estación espacial estátitca +gc.configgui.id_schematic_add_schematic=ID de esquema "Añadir esquema" +gc.configgui.id_schematic_moon_buggy=ID de esquema de buggy +gc.configgui.id_schematic_rocket_t1=ID de esquema de cohete nivel 1 +gc.configgui.key_override_fuel_level=Establecer tecla: GUI de combustible de cohete +gc.configgui.key_override_toggle_adv_goggles=Establecer tecla: Gafas avanzadas +gc.configgui.map_scroll_invert=Invertir scroll de mapa +gc.configgui.map_scroll_sensitivity=Sensibilidad de ratón en scroll de mapa +gc.configgui.meteor_block_damage=Activado daño por caída de meteorito +gc.configgui.meteor_spawn_mod=Modificador de generación de meteoritos +gc.configgui.more_stars=Mostrar más estrellas +gc.configgui.oil_gen_factor=Factor de generación de petróleo +gc.configgui.ore_dict_silicon=Nombre en OreDict del silicio en otros mods +gc.configgui.other_mod_ore_gen_i_ds=Menas de otros mods para generar en planetas +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Establecer tecla: Mapa de galaxia +gc.configgui.oxygen_indicator_bottom=Mover indicador de oxígeno hacia abajo +gc.configgui.oxygen_indicator_left=Mover indicador de oxígeno hacia la izquierda +gc.configgui.quick_mode=Juego rápido (más fácil) +gc.configgui.rocket_disable_overworld_return=Desactivar cohete de retorno al overworld +gc.configgui.rocket_disabled_dimensions=Dimensiones desactivadas para el cohete +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Bloques precintables +gc.configgui.space_station_energy_scalar=Modificador de energía de estación espacial +gc.configgui.space_stations_require_permission=Permisos de estación espacial +gc.configgui.static_loaded_dimensions=Dimensiones estáticas cargadas +gc.configgui.suffocation_cooldown=Enfriamiento de asfixia +gc.configgui.suffocation_damage=Daño de asfixia +gc.configgui.title=Configuración de Galacticraft Core +gc.configgui.whitelist_co_f_h_core_gen=Lista blanca del generador de mundo de CoFHCore +gui.battery_slot.desc.0=Ranura de batería, inserta una batería aquí +gui.battery_slot.desc.1=o utiliza una fuente de alimentación +gui.bed_fail.message=Oh oh... ¿Y si el oxígeno se agota mientras estoy dormido? ¡Necesitaré una cámara criogénica para dormir en el espacio! +gui.buggy.accel.name=Acelerar +gui.buggy.decel.name=Frenar +gui.buggy.inv.name=Inventorio / Combustible +gui.buggy.storage_space=Espacio de almacenamiento +gui.buggy.turn.name=Girar izquierda-derecha +gui.button.back.name=Volver +gui.button.disable.name=Desactivar +gui.button.disableseal.name=Desactivar sellado +gui.button.enable.name=Activar +gui.button.enableseal.name=Activar sellado +gui.button.hide_dest.name=Ocultar +gui.button.loadfuel.name=Cargar combustible +gui.button.loaditems.name=Cargar objetos +gui.button.next.name=Siguiente +gui.button.refine.name=Refinar +gui.button.stoploading.name=Detener carga +gui.button.stoprefine.name=Parar de refinar +gui.button.stopunloading.name=Detener descarga +gui.button.unhide_dest.name=Mostrar +gui.button.unloaditems.name=Descargar objetos +gui.button.unlockschematic.name=Desbloquear plano +gui.checkbox.horizontal.name=Modo horizontal +gui.checkbox.invert.name=Invertir selección +gui.checkbox.player_name.name=Nombre del jugador +gui.checkbox.player_within.name=El jugador esta dentro de +gui.checkbox.redstone_signal.name=Abrir con señal de redstone +gui.chest.warning.wrongkey=Probablemente necesite una llave de mazmorra nivel %s para desbloquear esto +gui.choose_planet.desc.moon=Habitable#Sin oxígeno#Gravedad: 18% +gui.choose_planet.desc.overworld=Lleno de vida#Habitable#Gravedad: 100% +gui.chooseplanet.alreadycreated1.name=Ya existe una Estación Espacial +gui.chooseplanet.alreadycreated2.name=¡Creado! +gui.chooseplanet.cannotcreate1.name=No se puede crear espacio +gui.chooseplanet.cannotcreate2.name=¡Hay una estación aquí! +gui.creative_only.desc=Solo creativo +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Velocidad actual +gui.docking_rocket.distance_from.name=Distancia del objetivo +gui.docking_rocket.target_vel.name=Velocidad del objetivo +gui.docking_rocket.warning.name.0=Presiona %s para frenar +gui.docking_rocket.warning.name.1=Presiona %s para acelerar +gui.dropbox.player_distance.name.0=1 metro +gui.dropbox.player_distance.name.1=2 metros +gui.dropbox.player_distance.name.2=5 metros +gui.dropbox.player_distance.name.3=10 metros +gui.electric_compressor.desc.0=Progreso +gui.energy_storage.desc.0=Almacenamiento de energía +gui.energy_storage.desc.1=Energía +gui.flag.already_placed=¡La bandera ya se ha puesto aquí! +gui.frequency_module.desc.0=Puede recibir sonidos débiles +gui.frequency_module.desc.1=y señales distantes +gui.frequencymodule.warning0=Probablemente necesite un +gui.frequencymodule.warning1=si quiero escuchar algo aquí +gui.fuel_output.desc.0=Pon botes vacios +gui.fuel_output.desc.1=en esta ranura para llenarlos +gui.fuel_output.desc.2=del tanque de combustible +gui.fuel_tank.desc.0=Tanque de combustible. Requiere +gui.fuel_tank.desc.1=cargador de combustible para llenarlo +gui.fuel_tank.desc.2=Tanque de combustible, se puede llenar +gui.fuel_tank.desc.3=con botes de combustible +gui.fuel_tank.desc.4=Tanque de combustible +gui.infinite_item.desc=Infinito +gui.lander.velocity=Velocidad de Entrada +gui.lander.velocityu=m/s +gui.lander.warning2=¡Mantén " +gui.lander.warning3=" para desacelerar! +gui.max_output.desc=Salida máxima +gui.message.addnewsch.name=Añadir nuevo plano +gui.message.apply.name=Aplicar +gui.message.assign_name.name=Asignar nombre +gui.message.atmosphere.name=Atmósfera +gui.message.back.name=Volver +gui.message.breed.name=Criar +gui.message.bubble_visible.name=Burbuja visible +gui.message.can_create_space_station.name=La estación espacial se puede crear aquí +gui.message.cancel.name=Cancelar +gui.message.cannot_create_space_station.name=La estación espacial no se puede crear aquí +gui.message.catalog.name=Catálogo +gui.message.click_again.0.name=Click otra vez para hacer zoom (ver lunas y satélites) +gui.message.click_again.1.name=Click otra vez para hacer zoom (ver lunas) +gui.message.click_again.2.name=Click otra vez para hacer zoom (ver satélites) +gui.message.click_again.3.name=Click otra vez para hacer zoom +gui.message.clicklink=Click para ver wiki de Galacticraft +gui.message.create_ss.name=Crear +gui.message.daynightcycle.name=Ciclo día-noche +gui.message.energy=Energía +gui.message.environment.name=Impulso ambiental +gui.message.exit.name=Salir +gui.message.fuel.name=Combustible +gui.message.full.name=lleno +gui.message.generating.name=Generando +gui.message.grow.name=Crecer +gui.message.heal.name=Curar +gui.message.help1=Para ayuda de Galacticraft +gui.message.help1a=Para ver este mensaje de nuevo en cualquier momento, escribe +gui.message.help2=Para guía de programas espaciales +gui.message.help3=Para ayuda con el petróleo +gui.message.in.name=Dentro +gui.message.launch.name=Lanzar +gui.message.max_energy=Energía máxima +gui.message.meansurfacetemp.name=Temperatura media superficial +gui.message.moon.atmosphere.0.name=Ninguno +gui.message.moon.daynightcycle.0.name=29.5 días terrestres +gui.message.moon.meansurfacetemp.0.name=(Lado iluminado) 253C +gui.message.moon.meansurfacetemp.1.name=(Lado oscuro) -153C +gui.message.moon.surfacecomposition.0.name=Roca basáltica y +gui.message.moon.surfacecomposition.1.name=Huellas de queso +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% de la Tierra) +gui.message.of.name=de +gui.message.oil.name=Petróleo +gui.message.out.name=Fuera +gui.message.overworld.atmosphere.0.name=Nitrogeno y oxígeno +gui.message.overworld.atmosphere.1.name=Soporta la vida +gui.message.overworld.daynightcycle.0.name=1 Día terrestre +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Piedra, tierra, y +gui.message.overworld.surfacecomposition.1.name=grava +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% de la Tierra) +gui.message.prelaunch=Lista de pre-lanzamiento +gui.message.rename.name=Renombrar +gui.message.select_ss.name=Selecciona una estación espacial +gui.message.ss_owner.name=Propietario: +gui.message.status.name=Estado +gui.message.strengthen.name=Fortalecer +gui.message.surfacecomposition.name=Composición de la superficie +gui.message.surfacegravity.name=Gravedad de la superficie +gui.message.thermal_status.name=Control térmico +gui.message.tier.name=Nivel %d +gui.message.unnamed.name=Sin nombre +gui.missing_core.name.0=MicdoodleCore no se encuentra en la carpeta de mods +gui.missing_core.name.1=Galacticraft falló al cargar +gui.missing_core.name.2=Cierra Minecraft e instala MicdoodleCore +gui.missing_core.name.3=Click aqui para abrir la página de descarga +gui.new_schematic.slot.desc.0=Nueva ranura de planos. +gui.new_schematic.slot.desc.1=Puedes encontrar nuevos planos +gui.new_schematic.slot.desc.2=completando mazmorras +gui.new_schematic.slot.desc.3=en planetas y satélites +gui.oil_tank.desc.0=Tanque de petróleo, se puede llenar +gui.oil_tank.desc.1=con botes de petróleo +gui.oxygen.warning=¡La configuración de oxígeno es inválida! +gui.oxygen_compressor.slot.desc.0=Casilla de tanque compresor, emplaza un tanque de oxígeno +gui.oxygen_compressor.slot.desc.1=aquí para llenarlo de oxígeno respirable. +gui.oxygen_decompressor.slot.desc.0=Casilla de tanque descompresor, emplaza un tanque de oxígeno +gui.oxygen_decompressor.slot.desc.1=aquí para vaciar el oxígeno respirable. +gui.oxygen_slot.desc.0=Casilla de oxígeno, emplazar un bote o tanque de oxígeno +gui.oxygen_slot.desc.1=aquí, o usar un suministrador de oxígeno conectado +gui.oxygen_storage.desc.0=Almacenamiento de oxígeno +gui.oxygen_storage.desc.1=Oxígeno +gui.oxygen_use.desc=Uso de oxígeno +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Alimentos +gui.player.health=Salud +gui.player.ouch=¡¡¡Ouch!!! +gui.receiver.cannot_attach=¡No se puede colocar el receptor aqui! +gui.requires_controller.desc=Requiere controlador de lanzamiento +gui.rocket.countdown=Cuenta atrás +gui.rocket.height=Altura +gui.rocket.inv.name=Inventario / Combustible +gui.rocket.launch.name=Lanzar +gui.rocket.launched=Lanzado +gui.rocket.on_launchpad=En plataforma de lanzamiento +gui.rocket.speed=Velocidad +gui.rocket.turn.name=Girar izquierda-derecha +gui.rocket.updown.name=Girar arriba-abajo +gui.rocket.warning.nofuel=Primero necesitaré llenarlo con combustible +gui.rocket.warning.nogyroscope=¡Fuerzas misteriosas están en juego y los giroscopios estan girando salvajemente! +gui.rocket.warning.noparachute=¡No tengo paracaídas! Si presiono lanzar otra vez, no hay vuelta atrás +gui.rocket_type.0=Espacio de almacenamiento: 18 +gui.rocket_type.1=Espacio de almacenamiento: 36 +gui.rocket_type.2=Espacio de almacenamiento: 56 +gui.rocket_type.3=Pre-alimentado +gui.seconds=s +gui.sensor.advanced=Modo avanzado +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Mostrar burbuja +gui.skeleton_boss.message=Jefe despawneado, ¡no dejes la habitación del jefe mientras luchas! Vuelve a entrar para spawnear al jefe +gui.space_race.chat.add_success=¡%s ha entrado a la carrera espacial! +gui.space_race.chat.already_part=¡Ya eres parte de esta carrera espacial! +gui.space_race.chat.invite_received=Recibida invitación de %s para su equipo de carrera espacial. +gui.space_race.chat.not_found=No se encuentra jugador con nombre: %s +gui.space_race.chat.remove_success=%s ha sido eliminado de la carrera espacial. +gui.space_race.chat.to_join=Para unirte a %s usa el comando %s +gui.space_race.coming_soon=Próximamente +gui.space_race.create.add_players.name=Añadir jugador(es) +gui.space_race.create.back.name=Volver +gui.space_race.create.brush_radius.name=Radio del pincel +gui.space_race.create.brush_size.name=Tamaño del pincel +gui.space_race.create.change_color.name.0=Cambiar +gui.space_race.create.change_color.name.1=Equipo +gui.space_race.create.change_color.name.2=Color +gui.space_race.create.close.name=Cerrar +gui.space_race.create.customize.name=Personalizar bandera +gui.space_race.create.eraser_radius.name=Radio de la goma +gui.space_race.create.eraser_size.name=Tamaño del borrador +gui.space_race.create.global_stats.name=Ver estadísticas globales +gui.space_race.create.invite_player.name=Invitar jugador +gui.space_race.create.player_radius.name=Nota: los jugadores tienen que estar cerca (25 bloques) +gui.space_race.create.rem_players.name=Eliminar jugador(es) +gui.space_race.create.remove.name=Quitar +gui.space_race.create.remove_player.name=Quitar jugador +gui.space_race.create.rename.name=Renombrar equipo +gui.space_race.create.send_invite.name=Enviar invitación +gui.space_race.create.server_stats.name=Ver estadísticas del servidor +gui.space_race.create.title.name=Manager de la carrera espacial +gui.space_race.create.title.name.0=Manager de la +gui.space_race.create.title.name.1=carrera espacial +gui.space_race.join.member_count.name=%d miembros +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Dueño +gui.space_race.join.title.name=Unirse a la carrera espacial +gui.space_race.unnamed=Equipo sin nombre +gui.spacestation.added=¡Has sido añadido a los jugadores aceptados en la estación espacial %s! +gui.spacestation.addsuccess=¡Se ha añadido a %s a la lista de la estación espacial! +gui.spacestation.allow_all_false=¡Tu estación espacial ya no está abierta a todos los jugadores! +gui.spacestation.allow_all_true=¡Tu estación espacial está ahora abierta a todos los jugadores! (Usa /ssinvite -all para deshacer esto.) +gui.spacestation.changesuccess=Cambiado el propietario de la estación espacial de %s al nuevo propietario %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=¡Se ha eliminado %s de la lista de la estación espacial! +gui.spacestation.to_allow_entry=para permitir a otro jugador entrar en esta estación espacial +gui.spacestation.type_command=Tipo +gui.status.active.name=Activo +gui.status.air_lock_closed.name=Esclusa de aire cerrada +gui.status.air_lock_open.name=Esclusa de aire abierta +gui.status.blockedfully.name=El Sol no es visible +gui.status.blockedpartial.name=Sol parcialmente visible +gui.status.check_pending.name=Pendiente de comprobación +gui.status.check_starting.name=Empezando comprobación +gui.status.checking_seal.name=Comprobación de sellado +gui.status.collecting.name=Recolectando +gui.status.collectingenergy.name=Recolectando energía +gui.status.compressing.name=Comprimiendo +gui.status.disabled.name=Deshabilitado +gui.status.fulltank.name=Tanque de oxígeno lleno +gui.status.generating.name=Generando +gui.status.hull_heat.name=Calor del casco +gui.status.idle.name=Libre +gui.status.missingleaves.name=No hay suficientes hojas +gui.status.missingoxygen.name=No hay suficiente oxígeno +gui.status.missingpower.name=No hay suficiente energía +gui.status.missingtank.name=Sin bote de oxígeno válido +gui.status.nofuel.name=¡Sin combustible para cargar! +gui.status.noinvtarget.name=¡Sin inventario en el objetivo! +gui.status.noitems.name=¡Sin objetos para Cargar! +gui.status.nooil.name=Sin petróleo +gui.status.not_available.name=N/A +gui.status.not_generating.name=No generando +gui.status.notargetload.name=¡Sin objetivo donde cargar! +gui.status.notargetunload.name=¡Sin objetivo donde descargar! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Lloviendo +gui.status.ready.name=Preparado +gui.status.refining.name=Refinando +gui.status.running.name=Funcionando +gui.status.sealed.name=Sellado +gui.status.sealerblocked.name=¡Respiradero de salida bloqueado! +gui.status.sun_visible.name=Sol visible +gui.status.tank_empty.name=Tanque de oxígeno vacío +gui.status.targetempty.name=¡El vehículo destino esta vacío! +gui.status.targetfull.name=¡El vehículo destino esta lleno! +gui.status.unknown.name=Desconocido +gui.status.unsealed.name=Area demasiado grande / sin sellar +gui.tank.oxygen_remaining=Oxígeno restante +gui.telemetry_fail.message=¡Primero necesitarás hacer un seguimiento a una entidad con este módulo de frecuencia! (¡O intentar equipártelo!) +gui.telemetry_fail_no_frequency_module.message=¡Probablemente necesitaré un módulo de frencuencia en mis manos para hacer uso de esto! +gui.telemetry_fail_wearing_it.message=¡Necesitaré soltar mi módulo de frecuencia si quiero enlazar esto con la unidad de telemetría! +gui.telemetry_succeed.message=Enlace telemétrico creado. +gui.thermal_slot.desc.0=Casilla térmica, emplaza el 'controlador +gui.thermal_slot.desc.1=térmico ambiental' aquí (opcional) +gui.thermal_slot.desc.2=Nota: ¡Usa más energía! +gui.title.air_lock.name=%s Controlador de la esclusa de aire +gui.tracking.message=Seguimiento activado. Ahora necesirarás hacer click derecho sobre esto en una unidad de telemetría para completar el enlace. +gui.warning=¡ALERTA! +gui.warning.invalid_thermal=Protección térmica inválida +gui.warning.noroom=Espacio insuficiente +item.air_fan.name=Ventilador +item.air_vent.name=Respiradero +item.basic_item.ambient_thermal_controller.name=Controlador térmico ambiental +item.basic_item.canned_food.name=Lata de comida +item.basic_item.compressed_aluminum.name=Aluminio comprimido +item.basic_item.compressed_bronze.name=Bronce comprimido +item.basic_item.compressed_copper.name=Cobre comprimido +item.basic_item.compressed_iron.name=Hierro comprimido +item.basic_item.compressed_steel.name=Acero comprimido +item.basic_item.compressed_tin.name=Estaño comprimido +item.basic_item.dehydrated_apple.name=Manzanas deshidratadas +item.basic_item.dehydrated_carrot.name=Zanahorias deshidratadas +item.basic_item.dehydrated_melon.name=Melones deshidratados +item.basic_item.dehydrated_potato.name=Patatas deshidratadas +item.basic_item.frequency_module.name=Módulo de frecuencia +item.basic_item.ingot_aluminum.name=Lingote de aluminio +item.basic_item.ingot_bronze.name=Lingote de bronce +item.basic_item.ingot_copper.name=Lingote de cobre +item.basic_item.ingot_steel.name=Lingote de acero +item.basic_item.ingot_tin.name=Lingote de estaño +item.basic_item.raw_silicon.name=Silicio en bruto +item.basic_item.solar_module_0.name=Módulo del panel solar +item.basic_item.solar_module_1.name=Panel solar +item.basic_item.wafer_advanced.name=Oblea avanzada +item.basic_item.wafer_basic.name=Oblea básica +item.basic_item.wafer_solar.name=Oblea solar azul +item.battery.name=Batería +item.bucket_fuel.name=Cubo de combustible +item.bucket_oil.name=Cubo de petróleo +item.buggy.name=Buggy +item.buggymat.seat.name=Asiento de buggy +item.buggymat.storage.name=Cofre para buggy +item.buggymat.wheel.name=Rueda de buggy +item.canister.copper.name=Bote de cobre +item.canister.tin.name=Bote de estaño +item.canvas.name=Lienzo +item.cheese_block.name=Bloque de queso +item.cheese_curd.name=Queso en grano +item.compressed_meteoric_iron.name=Hierro meteórico comprimido +item.empty_liquid_canister.name=Bote de líquido vacío +item.engine.tier1booster.name=Acelerador nivel 1 +item.engine.tier1engine.name=Motor de cohete nivel 1 +item.flag.name=Bandera +item.fuel.name=Combustible del cohete +item.fuel_canister.name=Bote lleno de combustible +item.fuel_canister_partial.name=Bote con algo de combustible +item.heavy_plating.name=Placa de alta resistencia +item.hot_description.name=Caliente +item.infinite_battery.name=Batería infinita +item.infinite_oxygen.name=Suministrador de oxígeno infinito +item.key.t1.name=Llave de mazmorra nivel 1 +item.meteor_chunk.name=Trozo arrojadizo de meteorito +item.meteor_chunk_hot.name=Trozo arrojadizo de meteorito +item.meteoric_iron_ingot.name=Lingote de hierro meteórico +item.meteoric_iron_raw.name=Hierro meteórico en bruto +item.nose_cone.name=Ojiva +item.oil_canister.name=Bote lleno de petróleo +item.oil_canister_partial.name=Bote con algo de petróleo +item.oil_extractor.name=Extractor de petróleo pórtatil +item.oxygen_concentrator.name=Concentrador de oxígeno +item.oxygen_gear.name=Equipo de oxígeno +item.oxygen_mask.name=Máscara de oxígeno +item.oxygen_tank_heavy_empty.name=Tanque grande de oxígeno vacío +item.oxygen_tank_heavy_full.name=Tanque grande de oxígeno +item.oxygen_tank_light_empty.name=Tanque pequeño de oxígeno vacío +item.oxygen_tank_light_full.name=Tanque pequeño de oxígeno +item.oxygen_tank_med_empty.name=Tanque mediano de oxígeno vacío +item.oxygen_tank_med_full.name=Tanque mediano de oxígeno +item.parachute_black.name=Paracaídas negro +item.parachute_blue.name=Paracaídas azul claro +item.parachute_brown.name=Paracaídas marrón +item.parachute_darkblue.name=Paracaídas azul +item.parachute_darkgray.name=Paracaídas gris +item.parachute_darkgreen.name=Paracaídas verde +item.parachute_gray.name=Paracaídas Gris claro +item.parachute_lime.name=Paracaídas verde lima +item.parachute_magenta.name=Paracaídas magenta +item.parachute_orange.name=Paracaídas naranja +item.parachute_pink.name=Paracaídas rosa +item.parachute_plain.name=Paracaídas +item.parachute_purple.name=Paracaídas morado +item.parachute_red.name=Paracaídas rojo +item.parachute_teal.name=Paracaídas cian +item.parachute_yellow.name=Paracaídas amarillo +item.rocket_fins.name=Aletas de cohete +item.rocket_t1.name=Cohete nivel 1 +item.schematic.name=Planos +item.sensor_glasses.name=Gafas con sensores +item.sensor_lens.name=Lente con sensor +item.standard_wrench.name=Llave inglesa +item.steel_axe.name=Hacha de acero +item.steel_boots.name=Botas de acero +item.steel_chestplate.name=Peto de acero +item.steel_helmet.name=Casco de acero +item.steel_hoe.name=Azada de acero +item.steel_leggings.name=Grebas de acero +item.steel_pickaxe.name=Pico de acero +item.steel_pole.name=Mástil de acero +item.steel_shovel.name=Pala de acero +item.steel_sword.name=Espada de acero +item.tier1.desc=Nivel 1 +item_desc.powerdraw.name=Energía necesaria: %s /s +item_desc.shift.name=Pulsa %s para mas info +item_group.galacticraft_blocks=Bloques de Galacticraft +item_group.galacticraft_items=Objetos de Galacticraft +keybind.map.name=Mapa de la galaxia +keybind.sensortoggle.name=Modo gafas con sensores +keybind.spaceshipinv.name=Abrir inventario del cohete +keybind.vehiclebackward.name=Tecla marcha atrás del vehículo +keybind.vehicledown.name=Tecla abajo del vehículo +keybind.vehicleforward.name=Tecla acelerar vehículo +keybind.vehicleleft.name=Tecla izquierda del vehículo +keybind.vehicleright.name=Tecla derecha del vehículo +keybind.vehicleup.name=Tecla arriba del vehículo +moon.moon=Luna +newversion.failed.name=¡Fallo de comprobación de actualización para Galacticraft! Reintentando en 15 segundos +newversion.success.name=Galacticraft versión remota encontrada: +planet.jupiter=Jupiter +planet.mercury=Mercurio +planet.neptune=Neptuno +planet.overworld=Mundo principal +planet.saturn=Saturno +planet.uranus=Urano +planet.venus=Venus +satellite.spacestation.overworld=Estación espacial del mundo principal +schematic.moonbuggy.name=Buggy lunar +schematic.rocket_t1.name=Cohete nivel 1 +schematic.rocket_t2.name=Cohete nivel 2 +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Controlador de la esclusa de aire +tile.air_lock_frame.description=Los marcos de la esclusa cuando se juntan como si fueran un portal, y uno de esos bloques es un controlador de la esclusa, funcionarán como una esclusa, aislando el aire. +tile.air_lock_frame.name=Marco de la esclusa de aire +tile.air_lock_seal.name=Sellado de la esclusa de aire +tile.aluminum_wire.alu_wire.description=El cable de aluminio se usa para conectar fuentes de energía con máquinas que la consuman. +tile.aluminum_wire.alu_wire.name=Cable de aluminio +tile.aluminum_wire.alu_wire_heavy.description=El cable de aluminio grande se usa para conectar fuentes de energía con máquinas que la consuman. Transfiere más rapido que su predecesor. +tile.aluminum_wire.alu_wire_heavy.name=Cable de aluminio grande +tile.arclamp.description=Las lamparas de arco sirven para iluminar una gran zona a parte de espantar a los mobs. +tile.arclamp.name=Lámpara de arco +tile.basic_block_core.block_aluminum_gc.name=Bloque de aluminio +tile.basic_block_core.block_copper_gc.name=Bloque de cobre +tile.basic_block_core.block_meteoric_iron_gc.name=Hierro meteorítico sólido +tile.basic_block_core.block_tin_gc.name=Bloque de estaño +tile.basic_block_core.deco_block_0.name=Bloque decorativo de estaño +tile.basic_block_core.deco_block_1.name=Bloque decorativo de estaño +tile.basic_block_core.ore_aluminum_gc.name=Mena de aluminio +tile.basic_block_core.ore_copper_gc.name=Mena de cobre +tile.basic_block_core.ore_silicon.name=Mena de silicio +tile.basic_block_core.ore_tin_gc.name=Mena de estaño +tile.basic_block_moon.bricks.name=Ladrillos +tile.basic_block_moon.cheesestone.name=Mena de queso +tile.basic_block_moon.coppermoon.name=Mena de cobre +tile.basic_block_moon.moondirt.name=Tierra +tile.basic_block_moon.moongrass.name=Césped lunar +tile.basic_block_moon.moonstone.name=Piedra +tile.basic_block_moon.tinmoon.name=Mena de estaño +tile.buggy_pad.description=Las placas de reabastecimiento permitirán a un buggy en la placa ser reabastecido por cargadores de combustible conectados si son colocados en un cuadro 3x3. No puede ser usado para lanzar cohetes!. +tile.cargo.loader.name=Plataforma de carga +tile.cargo.unloader.name=Plataforma de descarga +tile.cargo_loader.description=Las plataformas de carga llenarán cohetes y otros vehículos con objetos y bloques. Se deben unir a una plataforma de lanzamiento o carga del buggy. +tile.cargo_unloader.description=Las plataformas de descarga vaciarán cohetes y otros vehículos de objetos y bloques. Se deben unir a una plataforma de lanzamiento o carga del buggy. +tile.cheese.description=Los bloques de queso se crean con queso de la Luna, se pueden colocar y comer. +tile.cheese.name=Bloque de queso +tile.circuit_fabricator.description=El fabricador de circuitos procesa materiales básicos en obleas de silicona, utilizada para fabricar máquinas. +tile.coal_generator.description=El generador a carbón quema carbón para generar energía. Es el método mas simple y menos eficiente de generar energía. +tile.collector.description=El recolector de oxígeno almacenará el oxígeno obtenido de las hojas del area cercana. +tile.collector.name=Recolector de oxígeno +tile.compressor.description=El compresor procesa lingotes y los comprime a sus equivalentes. +tile.compressor_electric.description=El compresor eléctrico procesa lingotes y los comprime a sus equivalentes. Comprime dos a la vez, haciéndolo mas eficiente que su predecesor. +tile.crude_oil.name=Petróleo +tile.crude_oil_moving.name=Petróleo crudo +tile.crude_oil_still.name=Petróleo crudo +tile.dishbase.description=La antena de comunicaciones puede rastrear la posición de estaciones espaciales y recibir comunicaciones de bases espaciales remotas. +tile.dishbase.name=Antena de comunicaciones +tile.distributor.description=El distribuidor de oxígeno emite una burbuja de oxígeno desde el bloque central, usando un almacenamiento interno. Esto permite respirar de forma segura dentro de la burbuja. +tile.distributor.name=Distribuidor de oxígeno +tile.dummyblock.cryogenic_chamber.name=Cámara criogénica +tile.dummyblock.launch_pad.name=Plataforma de lanzamiento del cohete +tile.dummyblock.nasa_workbench.name=Mesa de trabajo de la NASA +tile.dummyblock.solar.name=Panel solar +tile.dummyblock.space_station_base.name=Base de la estación espacial +tile.electric_furnace_tier1.description=El horno eléctrico es una alternativa mas rápida al horno convencional. +tile.electric_furnace_tier2.description=El horno de arco eléctrico es una alternativa mas rápida al horno eléctrico y al convencional. +tile.enclosed.aluminum_wire.name=Cable de aluminio precintable +tile.enclosed.heavy_aluminum_wire.name=Cable de aluminio grande precintable +tile.enclosed.copper_cable.name=Cable de cobre precintable +tile.enclosed.description=Los bloques precintables se usan en sitios donde no puede entrar aire. +tile.enclosed.glass_fibre_cable.name=Cable de fibra óptica precintable +tile.enclosed.gold_cable.name=Cable de oro precintable +tile.enclosed.hv_cable.name=Cable de alto voltaje precintable +tile.enclosed.lv_cable.name=Cable de muy bajo voltaje precintable +tile.enclosed.me_cable.name=Cable ME precintable +tile.enclosed.fluid_pipe.name=Tubo de oxígeno precintable +tile.enclosed.pipe_fluids_cobblestone.name=Tubería fluida de roca precintable +tile.enclosed.pipe_fluids_stone.name=Tubería fluida de piedra precintable +tile.enclosed.pipe_items_cobblestone.name=Tubería de transporte de roca precintable +tile.enclosed.pipe_items_stone.name=Tubería de transporte de piedra precintable +tile.enclosed.pipe_power_gold.name=Tubería kinesis de oro precintable +tile.enclosed.pipe_power_stone.name=Tubería kinesis de piedra precintable +tile.energy_storage_module_tier1.description=El módulo de almacenamiento de energía sirve para almacenar energia para un uso posterior. +tile.energy_storage_module_tier2.description=El clúster de almacenamiento de energía sirve para almacenar energia para un uso posterior. Almacena mas energía que su predecesor. +tile.fallen_meteor.description=Los meteoritos caídos se pueden encontrar en planetas y satélites. Dejaran hierro meteorico cuando se rompan. +tile.fallen_meteor.name=Meteorito caído +tile.fuel.name=Combustible +tile.fuel_block.name=Combustible +tile.fuel_loader.description=Después de ser conectado a una plataforma de lanzamiento, el cargador de combustible podrá rellenar de combustible un cohete o vehículo. +tile.fuel_loader.name=Cargador de combustible +tile.glowstone_torch.description=Las antorchas de redstone sirven para iluminar una zona sin oxígeno donde antorchas normales no funcionan. +tile.glowstone_torch.name=Antorcha de glowstone +tile.landing_pad.buggy_fueler.name=Plataforma de carga del buggy +tile.landing_pad.cargo_pad.name=Plataforma del cohete de carga +tile.landing_pad.description=Se podran poner cohetes en la plataforma de lanzamiento mientras forme un cuadrado de 3x3. Se puede unir con cargadores de combustible, plataformas de carga y controladores de lanzamiento. +tile.landing_pad.landing_pad.name=Plataforma de lanzamiento +tile.landing_pad_full.name=Plataforma de lanzamiento +tile.machine.0.name=Generador a carbón +tile.machine.1.name=Módulo de almacenamiento de energía +tile.machine.2.name=Horno eléctrico +tile.machine.3.name=Compresor +tile.machine.7.name=Horno de arco eléctrico +tile.machine.8.name=Cluster de almacenamiento de energía +tile.machine2.4.name=Compresor eléctrico +tile.machine2.5.name=Fabricador de circuito +tile.machine2.6.name=Módulo de almacenamiento de oxígeno +tile.moon_stairs_brick.name=Escaleras de ladrillos de mazmorra lunar +tile.moon_stairs_stone.name=Escaleras de roca lunar +tile.ore_copper.name=Mena de cobre +tile.ore_tin.name=Mena de estaño +tile.oxygen_compressor.0.name=Compresor de oxígeno +tile.oxygen_compressor.1.name=Descompresor de oxígeno +tile.oxygen_compressor.description=El compresor de oxígeno llena un bote con el oxigeno almacenado internamente. +tile.oxygen_decompressor.description=El descompresor de oxígeno vacía un bote de oxígeno en el almacenamiento interno. +tile.oxygen_detector.description=El detector de oxígeno emite una señal de redstone cuando está rodeado de oxígeno. +tile.oxygen_detector.name=Detector de oxígeno +tile.oxygen_pipe.description=El tubo de oxígeno transfiere oxígeno del almacenamiento interno de una máquina a otra. +tile.oxygen_pipe.name=Tubo de oxígeno +tile.oxygen_storage_module.description=El módulo de almacenamiento de oxígeno sirve para almacenar oxígeno para un uso posterior. +tile.parachest.description=Los cofres-paraca caerán del cielo tras aterrizar en ciertos planetas o satélites. Contienen el cohete, el combustible y el cargamento del lanzamiento anterior. +tile.parachest.name=Cofre-paraca +tile.refinery.description=La refinería consume petróleo y energía, y devuelve combustible para cohetes y vehículos. +tile.refinery.name=Refinería +tile.rocket_workbench.description=La mesa de trabajo de la NASA sirve para crear partes avanzadas y vehículos. Se le pueden añadir nuevos planos. +tile.rocket_workbench.name=Mesa de trabajo de la NASA +tile.sapling2.birch.name=Brote de abedul +tile.sapling2.jungle.name=Brote de árbol de jungla +tile.sapling2.oak.name=Brote de roble +tile.sapling2.spruce.name=Brote de abeto +tile.sealer.description=El sellador de oxígeno comprobará que haya un espacio cerrado. Si lo encuentra, el espacio se llenará con aire respirable. +tile.sealer.name=Sellador de oxígeno +tile.slab_gc_half.moon_bricks_slab.name=Losa de ladrillos de mazmorra lunar +tile.slab_gc_half.moon_slab.name=Losa de roca lunar +tile.slab_gc_half.tin_slab_1.name=Losa decorativa de estaño +tile.slab_gc_half.tin_slab_2.name=Losa decorativa de estaño +tile.solar.advanced_solar.name=Panel solar avanzado +tile.solar.basic_solar.name=Panel solar básico +tile.solar_adv.description=Los paneles solares avanzados recolectan energía del sol, almacenándola para ser usada. Ajustan el angulo del panel para recolectar energía de forma óptima. +tile.solar_basic.description=Los paneles solares recolectan energía del Sol, almacenándola para ser usada. Recolectan más energía a mediodía. +tile.space_station_base.name=Bloque de entrada de estación espacial +tile.spin_thruster.description=Los propulsores de giro sirven para girar las estaciones espaciales. +tile.spin_thruster.name=Propulsor de giro +tile.telemetry.description=Esto reune información útil de cohetes enlazados, jugadores y mobs. El mejor emplazamiento es cerca de un monitor de datos. Usa un módulo de frecuencia para establecer enlaces de datos. +tile.telemetry.name=Unidad de telemetría +tile.tin_stairs_1.name=Escaleras decorativas de estaño +tile.tin_stairs_2.name=Escaleras decorativas de estaño +tile.treasure_chest.description=Los cofres del tesoro nivel 1 se generarán en las mazmorras de la Luna. Se desbloquean despues de matar al jefe final. +tile.treasure_chest.name=Cofre del tesoro +tile.unlit_torch.name=Antorcha +tile.unlit_torch_stone.name=Antorcha de piedra +tile.unlit_torch_lit.name=Antorcha +tile.unlit_torch_stone_lit.name=Antorcha de piedra +tile.view_screen.description=Los monitores de datos le dan el toque final a tu base espacial. Click derecho cambia la información mostrada. +tile.view_screen.name=Monitor de datos +tile.wall_gc.moon.name=Muro de roca lunar +tile.wall_gc.moon_bricks.name=Muro de ladrillos de mazmorra lunar +tile.wall_gc.tin.name=Muro decorativo de estaño diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fi_fi.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fi_fi.lang new file mode 100644 index 00000000..48439d3a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fi_fi.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s was sent into the atmosphere%s ##NEEDS TRANSLATE## +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor ##NEEDS TRANSLATE## +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel ##NEEDS TRANSLATE## +container.solarbasic.name=Basic Solar Panel ##NEEDS TRANSLATE## +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.oxygen_suffocation=%1$slta loppui happi! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. ##NEEDS TRANSLATE## +death.attack.thermal=%1$s forgot thermal protection ##NEEDS TRANSLATE## +dimension.moon.name=Moon ##NEEDS TRANSLATE## +dimension.overworld.name=Overworld +dimension.sun.name=Sun +entity.alien_villager.name=Alien Villager +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evolved Creeper +entity.evolved_skeleton.name=Evolved Skeleton +entity.evolved_skeleton_boss.name=Evolved Skeleton Boss +entity.evolved_spider.name=Evolved Spider +entity.evolved_zombie.name=Evolved Zombie +entity.flag.name=Flag +entity.gcflag.name=Flag ##NEEDS TRANSLATE## +entity.gravity_arrow.name=Arrow +entity.lander.name=Space Lander +entity.meteor.name=Pudonnut meteoriitti +entity.meteor_chunk.name=Meteor Chunk ##NEEDS TRANSLATE## +entity.oxygen_bubble.name=Oxygen Bubble +entity.para_chest.name=Parachest +entity.rocket_t1.name=Tason 1 raketti +galaxy.milky_way=Milky Way ##NEEDS TRANSLATE## +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here ##NEEDS TRANSLATE## +gui.battery_slot.desc.1=or use a connected power source ##NEEDS TRANSLATE## +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Accelerate +gui.buggy.decel.name=Decelerate +gui.buggy.inv.name=Inventory / Fuel +gui.buggy.storage_space=Storage Space ##NEEDS TRANSLATE## +gui.buggy.turn.name=Turn left-right +gui.button.back.name=Back +gui.button.disable.name=Disable ##NEEDS TRANSLATE## +gui.button.disableseal.name=Disable Seal +gui.button.enable.name=Enable ##NEEDS TRANSLATE## +gui.button.enableseal.name=Enable Seal +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name=Load Fuel +gui.button.loaditems.name=Load Items +gui.button.next.name=Next +gui.button.refine.name=Refine +gui.button.stoploading.name=Stop Loading +gui.button.stoprefine.name=Stop Refining ##NEEDS TRANSLATE## +gui.button.stopunloading.name=Stop Unloading +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name=Unload Items +gui.button.unlockschematic.name=Unlock Schematic +gui.checkbox.horizontal.name=Horizontal Mode ##NEEDS TRANSLATE## +gui.checkbox.invert.name=Invert Selection ##NEEDS TRANSLATE## +gui.checkbox.player_name.name=Player name is ##NEEDS TRANSLATE## +gui.checkbox.player_within.name=Player is within ##NEEDS TRANSLATE## +gui.checkbox.redstone_signal.name=Opens on Redstone Signal ##NEEDS TRANSLATE## +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! ##NEEDS TRANSLATE## +gui.choose_planet.desc.moon=Asuttava#Ei happea#Painovoima: 18% +gui.choose_planet.desc.overworld=Täynnä elämää#Asuttava#Painovoima: 100% +gui.chooseplanet.alreadycreated1.name=Space Station Already +gui.chooseplanet.alreadycreated2.name=Created! +gui.chooseplanet.cannotcreate1.name=Cannot create Space +gui.chooseplanet.cannotcreate2.name=Station here! +gui.creative_only.desc=Creative Only ##NEEDS TRANSLATE## +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Current Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.distance_from.name=Distance from Target ##NEEDS TRANSLATE## +gui.docking_rocket.target_vel.name=Target Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.0=Press %s to decelerate ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.1=Press %s to accelerate ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.0=1 Meter ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.1=2 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.2=5 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.3=10 Meters ##NEEDS TRANSLATE## +gui.electric_compressor.desc.0=Progress ##NEEDS TRANSLATE## +gui.energy_storage.desc.0=Energy Storage ##NEEDS TRANSLATE## +gui.energy_storage.desc.1=Energy ##NEEDS TRANSLATE## +gui.flag.already_placed=Flag already placed here! ##NEEDS TRANSLATE## +gui.frequency_module.desc.0=Can receive weak sound ##NEEDS TRANSLATE## +gui.frequency_module.desc.1=waves and distant signals ##NEEDS TRANSLATE## +gui.frequencymodule.warning0=I'll probably need a ##NEEDS TRANSLATE## +gui.frequencymodule.warning1=if I want to hear properly here. ##NEEDS TRANSLATE## +gui.fuel_output.desc.0=Place empty liquid canisters into ##NEEDS TRANSLATE## +gui.fuel_output.desc.1=this slot to fill them from the ##NEEDS TRANSLATE## +gui.fuel_output.desc.2=fuel tank ##NEEDS TRANSLATE## +gui.fuel_tank.desc.0=Fuel tank. Requires ##NEEDS TRANSLATE## +gui.fuel_tank.desc.1=fuel loader to fill ##NEEDS TRANSLATE## +gui.fuel_tank.desc.2=Fuel tank, can be filled ##NEEDS TRANSLATE## +gui.fuel_tank.desc.3=with fuel canisters ##NEEDS TRANSLATE## +gui.fuel_tank.desc.4=Fuel tank ##NEEDS TRANSLATE## +gui.infinite_item.desc=Infinite ##NEEDS TRANSLATE## +gui.lander.velocity=Entry Velocity +gui.lander.velocityu=m/s +gui.lander.warning2=Paina " +gui.lander.warning3=" hidastaaksesi! +gui.max_output.desc=Max Output ##NEEDS TRANSLATE## +gui.message.addnewsch.name=Add New Schematic +gui.message.apply.name=Apply ##NEEDS TRANSLATE## +gui.message.assign_name.name=Assign Name ##NEEDS TRANSLATE## +gui.message.atmosphere.name=Atmosphere ##NEEDS TRANSLATE## +gui.message.back.name=Back ##NEEDS TRANSLATE## +gui.message.breed.name=Breed ##NEEDS TRANSLATE## +gui.message.bubble_visible.name=Bubble Visible ##NEEDS TRANSLATE## +gui.message.can_create_space_station.name=A Space Station can be created here! ##NEEDS TRANSLATE## +gui.message.cancel.name=Cancel ##NEEDS TRANSLATE## +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. ##NEEDS TRANSLATE## +gui.message.catalog.name=Catalog ##NEEDS TRANSLATE## +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) ##NEEDS TRANSLATE## +gui.message.click_again.1.name=Click again to zoom (view moons) ##NEEDS TRANSLATE## +gui.message.click_again.2.name=Click again to zoom (view satellites) ##NEEDS TRANSLATE## +gui.message.click_again.3.name=Click again to zoom ##NEEDS TRANSLATE## +gui.message.clicklink=Click for Galacticraft Wiki ##NEEDS TRANSLATE## +gui.message.create_ss.name=Create ##NEEDS TRANSLATE## +gui.message.daynightcycle.name=Day-night Cycle ##NEEDS TRANSLATE## +gui.message.energy=Energy ##NEEDS TRANSLATE## +gui.message.environment.name=Environmental Boost ##NEEDS TRANSLATE## +gui.message.exit.name=Exit ##NEEDS TRANSLATE## +gui.message.fuel.name=Fuel +gui.message.full.name=full +gui.message.generating.name=Generating ##NEEDS TRANSLATE## +gui.message.grow.name=Grow ##NEEDS TRANSLATE## +gui.message.heal.name=Heal ##NEEDS TRANSLATE## +gui.message.help1=For Galacticraft help ##NEEDS TRANSLATE## +gui.message.help1a=To see this message again at any time, type ##NEEDS TRANSLATE## +gui.message.help2=For Space Program guidance ##NEEDS TRANSLATE## +gui.message.help3=For help with oil ##NEEDS TRANSLATE## +gui.message.in.name=In +gui.message.launch.name=Launch ##NEEDS TRANSLATE## +gui.message.max_energy=Max Energy ##NEEDS TRANSLATE## +gui.message.meansurfacetemp.name=Mean Surface Temp ##NEEDS TRANSLATE## +gui.message.moon.atmosphere.0.name=None ##NEEDS TRANSLATE## +gui.message.moon.daynightcycle.0.name=29.5 Earth Days ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.1.name=Traces of Cheese ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.0.name=0.1654g ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.1.name=(18% of Earth) ##NEEDS TRANSLATE## +gui.message.of.name=of ##NEEDS TRANSLATE## +gui.message.oil.name=Oil ##NEEDS TRANSLATE## +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen ##NEEDS TRANSLATE## +gui.message.overworld.atmosphere.1.name=Supports life ##NEEDS TRANSLATE## +gui.message.overworld.daynightcycle.0.name=1 Earth Day ##NEEDS TRANSLATE## +gui.message.overworld.meansurfacetemp.0.name=14C ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.1.name=gravel ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.0.name=1.0g ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.1.name=(100% of Earth) ##NEEDS TRANSLATE## +gui.message.prelaunch=Pre-launch checklist ##NEEDS TRANSLATE## +gui.message.rename.name=Rename ##NEEDS TRANSLATE## +gui.message.select_ss.name=Select a Space Station ##NEEDS TRANSLATE## +gui.message.ss_owner.name=Owner: ##NEEDS TRANSLATE## +gui.message.status.name=Status +gui.message.strengthen.name=Strengthen ##NEEDS TRANSLATE## +gui.message.surfacecomposition.name=Surface Composition ##NEEDS TRANSLATE## +gui.message.surfacegravity.name=Surface Gravity ##NEEDS TRANSLATE## +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=Tier %d ##NEEDS TRANSLATE## +gui.message.unnamed.name=Unnamed ##NEEDS TRANSLATE## +gui.missing_core.name.0=MicdoodleCore not found in mods folder ##NEEDS TRANSLATE## +gui.missing_core.name.1=Galacticraft failed to load ##NEEDS TRANSLATE## +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore ##NEEDS TRANSLATE## +gui.missing_core.name.3=Click here to open download page ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.0=New schematic slot. You ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.1=can find new schematics ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.2=by completing dungeons ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.3=on planets and moons ##NEEDS TRANSLATE## +gui.oil_tank.desc.0=Oil tank, can be filled ##NEEDS TRANSLATE## +gui.oil_tank.desc.1=with oil canisters ##NEEDS TRANSLATE## +gui.oxygen.warning=Happijärjestelmäsi on kelpaamaton! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister or tank ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.0=Oxygen Storage ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.1=Oxygen ##NEEDS TRANSLATE## +gui.oxygen_use.desc=Oxygen Use ##NEEDS TRANSLATE## +gui.per_second=/s ##NEEDS TRANSLATE## +gui.player.bpm=bpm ##NEEDS TRANSLATE## +gui.player.food=Food ##NEEDS TRANSLATE## +gui.player.health=Health ##NEEDS TRANSLATE## +gui.player.ouch=ouch!!!! ##NEEDS TRANSLATE## +gui.receiver.cannot_attach=Cannot attach receiver here! ##NEEDS TRANSLATE## +gui.requires_controller.desc=Requires Launch Controller ##NEEDS TRANSLATE## +gui.rocket.countdown=Countdown ##NEEDS TRANSLATE## +gui.rocket.height=Height ##NEEDS TRANSLATE## +gui.rocket.inv.name=Inventory / Fuel ##NEEDS TRANSLATE## +gui.rocket.launch.name=Launch ##NEEDS TRANSLATE## +gui.rocket.launched=Launched ##NEEDS TRANSLATE## +gui.rocket.on_launchpad=On launchpad ##NEEDS TRANSLATE## +gui.rocket.speed=Speed ##NEEDS TRANSLATE## +gui.rocket.turn.name=Turn left-right ##NEEDS TRANSLATE## +gui.rocket.updown.name=Turn up-down ##NEEDS TRANSLATE## +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! ##NEEDS TRANSLATE## +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! ##NEEDS TRANSLATE## +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! ##NEEDS TRANSLATE## +gui.rocket_type.0=Storage Space: 18 ##NEEDS TRANSLATE## +gui.rocket_type.1=Storage Space: 36 ##NEEDS TRANSLATE## +gui.rocket_type.2=Storage Space: 56 ##NEEDS TRANSLATE## +gui.rocket_type.3=Pre-fueled ##NEEDS TRANSLATE## +gui.seconds=s +gui.sensor.advanced=Advanced Mode +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Show Bubble ##NEEDS TRANSLATE## +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. ##NEEDS TRANSLATE## +gui.space_race.chat.add_success=%s has joined the Space Race! ##NEEDS TRANSLATE## +gui.space_race.chat.already_part=You are already a part of this space race! ##NEEDS TRANSLATE## +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. ##NEEDS TRANSLATE## +gui.space_race.chat.not_found=Could not find player with name: %s ##NEEDS TRANSLATE## +gui.space_race.chat.remove_success=%s has been removed from the Space Race. ##NEEDS TRANSLATE## +gui.space_race.chat.to_join=To join %s use command %s ##NEEDS TRANSLATE## +gui.space_race.coming_soon=Coming Soon ##NEEDS TRANSLATE## +gui.space_race.create.add_players.name=Add Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.back.name=Back ##NEEDS TRANSLATE## +gui.space_race.create.brush_radius.name=Brush Radius ##NEEDS TRANSLATE## +gui.space_race.create.brush_size.name=Brush Size ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.0=Change ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.1=Team ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.2=Color ##NEEDS TRANSLATE## +gui.space_race.create.close.name=Close ##NEEDS TRANSLATE## +gui.space_race.create.customize.name=Customize Flag ##NEEDS TRANSLATE## +gui.space_race.create.eraser_radius.name=Eraser Radius ##NEEDS TRANSLATE## +gui.space_race.create.eraser_size.name=Eraser Size ##NEEDS TRANSLATE## +gui.space_race.create.global_stats.name=View Global Stats ##NEEDS TRANSLATE## +gui.space_race.create.invite_player.name=Invite Player ##NEEDS TRANSLATE## +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) ##NEEDS TRANSLATE## +gui.space_race.create.rem_players.name=Remove Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.remove.name=Remove ##NEEDS TRANSLATE## +gui.space_race.create.remove_player.name=Remove Player ##NEEDS TRANSLATE## +gui.space_race.create.rename.name=Rename Team ##NEEDS TRANSLATE## +gui.space_race.create.send_invite.name=Send Invite ##NEEDS TRANSLATE## +gui.space_race.create.server_stats.name=View Server Stats ##NEEDS TRANSLATE## +gui.space_race.create.title.name=Space Race Manager ##NEEDS TRANSLATE## +gui.space_race.create.title.name.0=Space Race ##NEEDS TRANSLATE## +gui.space_race.create.title.name.1=Manager ##NEEDS TRANSLATE## +gui.space_race.join.member_count.name=%d members ##NEEDS TRANSLATE## +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Owner ##NEEDS TRANSLATE## +gui.space_race.join.title.name=Join Space Race ##NEEDS TRANSLATE## +gui.space_race.unnamed=Unnamed Team ##NEEDS TRANSLATE## +gui.spacestation.added=You've been added to %s's Space Station accepted players! ##NEEDS TRANSLATE## +gui.spacestation.addsuccess=Successfully added %s to Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= ##NEEDS TRANSLATE## +gui.spacestation.removesuccess=Successfully removed %s from Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.to_allow_entry=to allow another player to enter this space station! ##NEEDS TRANSLATE## +gui.spacestation.type_command=Type ##NEEDS TRANSLATE## +gui.status.active.name=Active +gui.status.air_lock_closed.name=Air Lock Closed ##NEEDS TRANSLATE## +gui.status.air_lock_open.name=Air Lock Open ##NEEDS TRANSLATE## +gui.status.blockedfully.name=Sun is Not Visible ##NEEDS TRANSLATE## +gui.status.blockedpartial.name=Sun Partially Visible ##NEEDS TRANSLATE## +gui.status.check_pending.name=Check Pending ##NEEDS TRANSLATE## +gui.status.check_starting.name=Check Starting ##NEEDS TRANSLATE## +gui.status.checking_seal.name=Checking Seal ##NEEDS TRANSLATE## +gui.status.collecting.name=Collecting ##NEEDS TRANSLATE## +gui.status.collectingenergy.name=Collecting Energy ##NEEDS TRANSLATE## +gui.status.compressing.name=Compressing ##NEEDS TRANSLATE## +gui.status.disabled.name=Disabled +gui.status.fulltank.name=Oxygen Tank Full +gui.status.generating.name=Generating ##NEEDS TRANSLATE## +gui.status.hull_heat.name=Hull Heat ##NEEDS TRANSLATE## +gui.status.idle.name=Idle +gui.status.missingleaves.name=Not Enough Leaf Blocks +gui.status.missingoxygen.name=Not Enough Oxygen +gui.status.missingpower.name=Not Enough Power +gui.status.missingtank.name=No Valid Oxygen Tank +gui.status.nofuel.name=No Fuel to Load! +gui.status.noinvtarget.name=No Inventory on Target! +gui.status.noitems.name=No Items to Load! +gui.status.nooil.name=No Oil +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Not Generating ##NEEDS TRANSLATE## +gui.status.notargetload.name=No Target to Load Into! +gui.status.notargetunload.name=No Target to Unload! +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name=Raining ##NEEDS TRANSLATE## +gui.status.ready.name=Ready +gui.status.refining.name=Refining +gui.status.running.name=Running ##NEEDS TRANSLATE## +gui.status.sealed.name=Sealed +gui.status.sealerblocked.name=Output Vent Blocked! ##NEEDS TRANSLATE## +gui.status.sun_visible.name=Sun Visible ##NEEDS TRANSLATE## +gui.status.tank_empty.name=Oxygen Tank Empty ##NEEDS TRANSLATE## +gui.status.targetempty.name=Target Vehicle is Empty! +gui.status.targetfull.name=Target Vehicle is Full! +gui.status.unknown.name=Unknown +gui.status.unsealed.name=Unsealed +gui.tank.oxygen_remaining=Oxygen Remaining ##NEEDS TRANSLATE## +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) ##NEEDS TRANSLATE## +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! ##NEEDS TRANSLATE## +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! ##NEEDS TRANSLATE## +gui.telemetry_succeed.message=Telemetry link created. ##NEEDS TRANSLATE## +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s's Air Lock Controller ##NEEDS TRANSLATE## +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. ##NEEDS TRANSLATE## +gui.warning=VAROITUS! +gui.warning.invalid_thermal=Invalid Thermal Protection! ##NEEDS TRANSLATE## +gui.warning.noroom=Not enough room! ##NEEDS TRANSLATE## +item.air_fan.name=Happipuhallin +item.air_vent.name=Ilma-aukko +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Can of Food ##NEEDS TRANSLATE## +item.basic_item.compressed_aluminum.name=Compressed Aluminum ##NEEDS TRANSLATE## +item.basic_item.compressed_bronze.name=Compressed Bronze ##NEEDS TRANSLATE## +item.basic_item.compressed_copper.name=Compressed Copper ##NEEDS TRANSLATE## +item.basic_item.compressed_iron.name=Compressed Iron ##NEEDS TRANSLATE## +item.basic_item.compressed_steel.name=Compressed Steel ##NEEDS TRANSLATE## +item.basic_item.compressed_tin.name=Compressed Tin ##NEEDS TRANSLATE## +item.basic_item.dehydrated_apple.name=Dehydrated Apples ##NEEDS TRANSLATE## +item.basic_item.dehydrated_carrot.name=Dehydrated Carrots ##NEEDS TRANSLATE## +item.basic_item.dehydrated_melon.name=Dehydrated Melons ##NEEDS TRANSLATE## +item.basic_item.dehydrated_potato.name=Dehydrated Potatoes ##NEEDS TRANSLATE## +item.basic_item.frequency_module.name=Frequency Module ##NEEDS TRANSLATE## +item.basic_item.ingot_aluminum.name=Aluminum Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_bronze.name=Bronze Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_copper.name=Copper Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_steel.name=Steel Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_tin.name=Tin Ingot ##NEEDS TRANSLATE## +item.basic_item.raw_silicon.name=Raw Silicon ##NEEDS TRANSLATE## +item.basic_item.solar_module_0.name=Single Solar Module ##NEEDS TRANSLATE## +item.basic_item.solar_module_1.name=Full Solar Panel ##NEEDS TRANSLATE## +item.basic_item.wafer_advanced.name=Advanced Wafer ##NEEDS TRANSLATE## +item.basic_item.wafer_basic.name=Basic Wafer ##NEEDS TRANSLATE## +item.basic_item.wafer_solar.name=Blue Solar Wafer ##NEEDS TRANSLATE## +item.battery.name=Battery ##NEEDS TRANSLATE## +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Vaunu +item.buggymat.seat.name=Vaunun istuin +item.buggymat.storage.name=Vaunun säilytyslaatikko +item.buggymat.wheel.name=Vaunun pyörä +item.canister.copper.name=Kuparikanisteri +item.canister.tin.name=Tinakanisteri +item.canvas.name=Kangas +item.cheese_block.name=Juustokuutio +item.cheese_curd.name=Juustomassa +item.compressed_meteoric_iron.name=Compressed Meteoric Iron ##NEEDS TRANSLATE## +item.empty_liquid_canister.name=Tyhjä nestekanisteri +item.engine.tier1booster.name=Tier 1 Booster ##NEEDS TRANSLATE## +item.engine.tier1engine.name=Tier 1 Rocket Engine ##NEEDS TRANSLATE## +item.flag.name=Flag ##NEEDS TRANSLATE## +item.fuel.name=Rakettipolttoaine +item.fuel_canister.name=Täytetty polttoainekanisteri +item.fuel_canister_partial.name=Osittain täytetty polttoainekanisteri +item.heavy_plating.name=Järeä pinnoitus +item.hot_description.name=Hot ##NEEDS TRANSLATE## +item.infinite_battery.name=Infinite Battery ##NEEDS TRANSLATE## +item.infinite_oxygen.name=Infinite Oxygen Supply ##NEEDS TRANSLATE## +item.key.t1.name=Tason 1 tyrmän avain +item.meteor_chunk.name=Throwable Meteor Chunk ##NEEDS TRANSLATE## +item.meteor_chunk_hot.name=Throwable Meteor Chunk ##NEEDS TRANSLATE## +item.meteoric_iron_ingot.name=Meteorimainen rautaharkko +item.meteoric_iron_raw.name=Raaka meteorimainen rauta +item.nose_cone.name=Kärkikartio +item.oil_canister.name=Täytetty öljykanisteri +item.oil_canister_partial.name=Osittain täytetty öljykanisteri +item.oil_extractor.name=Kannettava öljypuristin +item.oxygen_concentrator.name=Happikonsentraattori +item.oxygen_gear.name=Happivarustus +item.oxygen_mask.name=Happinaamari +item.oxygen_tank_heavy_empty.name=Tyhjä raskas happitankki +item.oxygen_tank_heavy_full.name=Raskas happitankki +item.oxygen_tank_light_empty.name=Tyhjä kevyt happitankki +item.oxygen_tank_light_full.name=Kevyt happitankki +item.oxygen_tank_med_empty.name=Tyhjä keskikokoinen happitankki +item.oxygen_tank_med_full.name=Keskikokoinen happitankki +item.parachute_black.name=Musta laskuvarjo +item.parachute_blue.name=Vaaleansininen laskuvarjo +item.parachute_brown.name=Ruskea laskuvarjo +item.parachute_darkblue.name=Sininen laskuvarjo +item.parachute_darkgray.name=Harmaa laskuvarjo +item.parachute_darkgreen.name=Vihreä laskuvarjo +item.parachute_gray.name=Vaaleanharmaa laskuvarjo +item.parachute_lime.name=Limenvihreä laskuvarjo +item.parachute_magenta.name=Magenta laskuvarjo +item.parachute_orange.name=Oranssi laskuvarjo +item.parachute_pink.name=Vaaleanpunainen laskuvarjo +item.parachute_plain.name=Laskuvarjo +item.parachute_purple.name=Violetti laskuvarjo +item.parachute_red.name=Punainen laskuvarjo +item.parachute_teal.name=Syaani laskuvarjo +item.parachute_yellow.name=Keltainen laskuvarjo +item.rocket_fins.name=Rakettievät +item.rocket_t1.name=Tason 1 raketti +item.schematic.name=NASA -työpöydän kaavio +item.sensor_glasses.name=Sensorilasit +item.sensor_lens.name=Sensorilinssi +item.standard_wrench.name=Standard Wrench ##NEEDS TRANSLATE## +item.steel_axe.name=Järeä kirves +item.steel_boots.name=Järeät kengät +item.steel_chestplate.name=Järeä rintasuojus +item.steel_helmet.name=Järeä kypärä +item.steel_hoe.name=Järeä kuokka +item.steel_leggings.name=Järeät housut +item.steel_pickaxe.name=Järeä hakku +item.steel_pole.name=Steel Pole ##NEEDS TRANSLATE## +item.steel_shovel.name=Järeä lapio +item.steel_sword.name=Järeä miekka +item.tier1.desc=Tier 1 ##NEEDS TRANSLATE## +item_desc.powerdraw.name=Power required: %s /s ##NEEDS TRANSLATE## +item_desc.shift.name=Press %s for more info ##NEEDS TRANSLATE## +item_group.galacticraft_blocks=Galacticraft Blocks ##NEEDS TRANSLATE## +item_group.galacticraft_items=Galacticraft Items ##NEEDS TRANSLATE## +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Toggle Sensor Goggles Mode +keybind.spaceshipinv.name=Open Spaceship Inventory +keybind.vehiclebackward.name=Vehicle Backward Key +keybind.vehicledown.name=Vehicle Down Key +keybind.vehicleforward.name=Vehicle Forward Key +keybind.vehicleleft.name=Vehicle Left Key +keybind.vehicleright.name=Vehicle Right Key +keybind.vehicleup.name=Vehicle Up Key +moon.moon=Moon ##NEEDS TRANSLATE## +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter ##NEEDS TRANSLATE## +planet.mercury=Mercury ##NEEDS TRANSLATE## +planet.neptune=Neptune ##NEEDS TRANSLATE## +planet.overworld=Overworld ##NEEDS TRANSLATE## +planet.saturn=Saturn ##NEEDS TRANSLATE## +planet.uranus=Uranus ##NEEDS TRANSLATE## +planet.venus=Venus ##NEEDS TRANSLATE## +satellite.spacestation.overworld=Overworld Space Station ##NEEDS TRANSLATE## +schematic.moonbuggy.name=Kuuvaunu +schematic.rocket_t1.name=Tier 1 Rocket ##NEEDS TRANSLATE## +schematic.rocket_t2.name=Tason 2 raketti +solarsystem.sol=Sol ##NEEDS TRANSLATE## +star.sol=Sol ##NEEDS TRANSLATE## +tile.air_lock_controller.name=Air Lock Controller ##NEEDS TRANSLATE## +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Ilmalukon kehys +tile.air_lock_seal.name=Ilmalukon sinetti +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name=Aluminum Wire ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Transfers at a faster rate than it's predecessor. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name=Heavy Aluminum Wire ##NEEDS TRANSLATE## +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Arc Lamp ##NEEDS TRANSLATE## +tile.basic_block_core.block_aluminum_gc.name=Aluminum Block ##NEEDS TRANSLATE## +tile.basic_block_core.block_copper_gc.name=Copper Block ##NEEDS TRANSLATE## +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron ##NEEDS TRANSLATE## +tile.basic_block_core.block_tin_gc.name=Tin Block ##NEEDS TRANSLATE## +tile.basic_block_core.deco_block_0.name=Tin Decoration Block ##NEEDS TRANSLATE## +tile.basic_block_core.deco_block_1.name=Tin Decoration Block ##NEEDS TRANSLATE## +tile.basic_block_core.ore_aluminum_gc.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_copper_gc.name=Copper Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_silicon.name=Silicon Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_tin_gc.name=Tin Ore ##NEEDS TRANSLATE## +tile.basic_block_moon.bricks.name=Tiiliä +tile.basic_block_moon.cheesestone.name=Juustomalmi +tile.basic_block_moon.coppermoon.name=Kuparimalmi +tile.basic_block_moon.moondirt.name=Multa +tile.basic_block_moon.moongrass.name=Kuuturve +tile.basic_block_moon.moonstone.name=Kivi +tile.basic_block_moon.tinmoon.name=Tinamalmi +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Cargo Loader +tile.cargo.unloader.name=Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Juustokuutio +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name=Hapenkeräin +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name=Raakaöljy +tile.crude_oil_still.name=Raakaöljy +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Communications Dish ##NEEDS TRANSLATE## +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name=Happikuplanjakaja +tile.dummyblock.cryogenic_chamber.name=Cryogenic Chamber ##NEEDS TRANSLATE## +tile.dummyblock.launch_pad.name=Rocket Launch Pad ##NEEDS TRANSLATE## +tile.dummyblock.nasa_workbench.name=NASA Workbench ##NEEDS TRANSLATE## +tile.dummyblock.solar.name=Solar Panel ##NEEDS TRANSLATE## +tile.dummyblock.space_station_base.name=Space Station Base ##NEEDS TRANSLATE## +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Sealable Aluminum Wire ##NEEDS TRANSLATE## +tile.enclosed.heavy_aluminum_wire.name=Sealable Heavy Aluminum Wire ##NEEDS TRANSLATE## +tile.enclosed.copper_cable.name=Sealable Copper Cable ##NEEDS TRANSLATE## +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fiber Cable ##NEEDS TRANSLATE## +tile.enclosed.gold_cable.name=Sealable Gold Cable ##NEEDS TRANSLATE## +tile.enclosed.hv_cable.name=Sealable HV Cable ##NEEDS TRANSLATE## +tile.enclosed.lv_cable.name=Sealable Ultra-Low-Current Cable ##NEEDS TRANSLATE## +tile.enclosed.me_cable.name=Sealable ME Cable ##NEEDS TRANSLATE## +tile.enclosed.fluid_pipe.name=Sinetöitävä happiputki +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Waterproof Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Waterproof Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_power_gold.name=Sealable Golden Conductive Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_power_stone.name=Sealable Stone Conductive Pipe ##NEEDS TRANSLATE## +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Pudonnut meteoriitti +tile.fuel.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name=Polttoaineen lastaaja +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Glowstone Torch ##NEEDS TRANSLATE## +tile.landing_pad.buggy_fueler.name=Vaunun täyttöalusta +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad +tile.landing_pad.description=Landing Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name=Laukaisualusta +tile.landing_pad_full.name=Rocket Launch Pad ##NEEDS TRANSLATE## +tile.machine.0.name=Coal Generator ##NEEDS TRANSLATE## +tile.machine.1.name=Energy Storage Module ##NEEDS TRANSLATE## +tile.machine.2.name=Electric Furnace ##NEEDS TRANSLATE## +tile.machine.3.name=Compressor ##NEEDS TRANSLATE## +tile.machine.7.name=Electric Arc Furnace ##NEEDS TRANSLATE## +tile.machine.8.name=Energy Storage Cluster ##NEEDS TRANSLATE## +tile.machine2.4.name=Electric Compressor ##NEEDS TRANSLATE## +tile.machine2.5.name=Circuit Fabricator ##NEEDS TRANSLATE## +tile.machine2.6.name=Oxygen Storage Module ##NEEDS TRANSLATE## +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.moon_stairs_stone.name=Moon Rock Stairs ##NEEDS TRANSLATE## +tile.ore_copper.name=Copper Ore ##NEEDS TRANSLATE## +tile.ore_tin.name=Tin Ore ##NEEDS TRANSLATE## +tile.oxygen_compressor.0.name=Oxygen Compressor ##NEEDS TRANSLATE## +tile.oxygen_compressor.1.name=Oxygen Decompressor ##NEEDS TRANSLATE## +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name=Hapen havaitsija +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name=Happiputki +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Parachest ##NEEDS TRANSLATE## +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name=Jalostamo +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=NASA -työpöytä +tile.sapling2.birch.name=Koivuntaimi +tile.sapling2.jungle.name=Kaakaopuun taimi +tile.sapling2.oak.name=Tammentaimi +tile.sapling2.spruce.name=Kuusentaimi +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name=Hapen sinetöijä +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.moon_slab.name=Moon Rock Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.solar.advanced_solar.name=Advanced Solar Panel ##NEEDS TRANSLATE## +tile.solar.basic_solar.name=Basic Solar Panel ##NEEDS TRANSLATE## +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Space Station Arrival Block ##NEEDS TRANSLATE## +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Spin Thruster ##NEEDS TRANSLATE## +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Telemetry Unit ##NEEDS TRANSLATE## +tile.tin_stairs_1.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.tin_stairs_2.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Aarrearkku +tile.unlit_torch.name=Soihtu +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Soihtu +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Display Screen ##NEEDS TRANSLATE## +tile.wall_gc.moon.name=Moon Rock Wall ##NEEDS TRANSLATE## +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall ##NEEDS TRANSLATE## +tile.wall_gc.tin.name=Tin Decoration Wall ##NEEDS TRANSLATE## diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_ca.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_ca.lang new file mode 100644 index 00000000..ee520e18 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_ca.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s was sent into the atmosphere%s ##NEEDS TRANSLATE## +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor ##NEEDS TRANSLATE## +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel ##NEEDS TRANSLATE## +container.solarbasic.name=Basic Solar Panel ##NEEDS TRANSLATE## +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.oxygen_suffocation=%1$s a manqué d'oxygène! +death.attack.spaceship_crash=%1$s's rocket smashed itself into the ground. Oops. ##NEEDS TRANSLATE## +death.attack.thermal=%1$s forgot thermal protection ##NEEDS TRANSLATE## +dimension.moon.name=Moon ##NEEDS TRANSLATE## +dimension.overworld.name=Overworld +dimension.sun.name=Sun +entity.alien_villager.name=Alien Villager +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evolved Creeper +entity.evolved_skeleton.name=Evolved Skeleton +entity.evolved_skeleton_boss.name=Evolved Skeleton Boss +entity.evolved_spider.name=Evolved Spider +entity.evolved_zombie.name=Evolved Zombie +entity.flag.name=Flag +entity.gcflag.name=Flag ##NEEDS TRANSLATE## +entity.gravity_arrow.name=Arrow +entity.lander.name=Space Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Chunk ##NEEDS TRANSLATE## +entity.oxygen_bubble.name=Oxygen Bubble +entity.para_chest.name=Parachest +entity.rocket_t1.name=Tier 1 Rocket +galaxy.milky_way=Milky Way ##NEEDS TRANSLATE## +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Battery slot, place battery here ##NEEDS TRANSLATE## +gui.battery_slot.desc.1=or use a connected power source ##NEEDS TRANSLATE## +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Accelerate +gui.buggy.decel.name=Decelerate +gui.buggy.inv.name=Inventory / Fuel +gui.buggy.storage_space=Storage Space ##NEEDS TRANSLATE## +gui.buggy.turn.name=Turn left-right +gui.button.back.name=Back +gui.button.disable.name=Disable ##NEEDS TRANSLATE## +gui.button.disableseal.name=Disable Seal +gui.button.enable.name=Enable ##NEEDS TRANSLATE## +gui.button.enableseal.name=Enable Seal +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name=Load Fuel +gui.button.loaditems.name=Load Items +gui.button.next.name=Next +gui.button.refine.name=Refine +gui.button.stoploading.name=Stop Loading +gui.button.stoprefine.name=Stop Refining ##NEEDS TRANSLATE## +gui.button.stopunloading.name=Stop Unloading +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name=Unload Items +gui.button.unlockschematic.name=Unlock Schematic +gui.checkbox.horizontal.name=Horizontal Mode ##NEEDS TRANSLATE## +gui.checkbox.invert.name=Invert Selection ##NEEDS TRANSLATE## +gui.checkbox.player_name.name=Player name is ##NEEDS TRANSLATE## +gui.checkbox.player_within.name=Player is within ##NEEDS TRANSLATE## +gui.checkbox.redstone_signal.name=Opens on Redstone Signal ##NEEDS TRANSLATE## +gui.chest.warning.wrongkey=I'll probably need a Tier %s Dungeon key to unlock this! ##NEEDS TRANSLATE## +gui.choose_planet.desc.moon=Habitable#Pas d'oxygène#Gravité: 18% +gui.choose_planet.desc.overworld=Plein de vie#Habitable#Pesanteur: 100% +gui.chooseplanet.alreadycreated1.name=Space Station Already +gui.chooseplanet.alreadycreated2.name=Created! +gui.chooseplanet.cannotcreate1.name=Cannot create Space +gui.chooseplanet.cannotcreate2.name=Station here! +gui.creative_only.desc=Creative Only ##NEEDS TRANSLATE## +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Current Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.distance_from.name=Distance from Target ##NEEDS TRANSLATE## +gui.docking_rocket.target_vel.name=Target Velocity ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.0=Press %s to decelerate ##NEEDS TRANSLATE## +gui.docking_rocket.warning.name.1=Press %s to accelerate ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.0=1 Meter ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.1=2 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.2=5 Meters ##NEEDS TRANSLATE## +gui.dropbox.player_distance.name.3=10 Meters ##NEEDS TRANSLATE## +gui.electric_compressor.desc.0=Progress ##NEEDS TRANSLATE## +gui.energy_storage.desc.0=Energy Storage ##NEEDS TRANSLATE## +gui.energy_storage.desc.1=Energy ##NEEDS TRANSLATE## +gui.flag.already_placed=Flag already placed here! ##NEEDS TRANSLATE## +gui.frequency_module.desc.0=Can receive weak sound ##NEEDS TRANSLATE## +gui.frequency_module.desc.1=waves and distant signals ##NEEDS TRANSLATE## +gui.frequencymodule.warning0=I'll probably need a ##NEEDS TRANSLATE## +gui.frequencymodule.warning1=if I want to hear properly here. ##NEEDS TRANSLATE## +gui.fuel_output.desc.0=Place empty liquid canisters into ##NEEDS TRANSLATE## +gui.fuel_output.desc.1=this slot to fill them from the ##NEEDS TRANSLATE## +gui.fuel_output.desc.2=fuel tank ##NEEDS TRANSLATE## +gui.fuel_tank.desc.0=Fuel tank. Requires ##NEEDS TRANSLATE## +gui.fuel_tank.desc.1=fuel loader to fill ##NEEDS TRANSLATE## +gui.fuel_tank.desc.2=Fuel tank, can be filled ##NEEDS TRANSLATE## +gui.fuel_tank.desc.3=with fuel canisters ##NEEDS TRANSLATE## +gui.fuel_tank.desc.4=Fuel tank ##NEEDS TRANSLATE## +gui.infinite_item.desc=Infinite ##NEEDS TRANSLATE## +gui.lander.velocity=Entry Velocity +gui.lander.velocityu=m/s +gui.lander.warning2=Hold " +gui.lander.warning3=" to slow down! +gui.max_output.desc=Max Output ##NEEDS TRANSLATE## +gui.message.addnewsch.name=Add New Schematic +gui.message.apply.name=Apply ##NEEDS TRANSLATE## +gui.message.assign_name.name=Assign Name ##NEEDS TRANSLATE## +gui.message.atmosphere.name=Atmosphere ##NEEDS TRANSLATE## +gui.message.back.name=Back ##NEEDS TRANSLATE## +gui.message.breed.name=Breed ##NEEDS TRANSLATE## +gui.message.bubble_visible.name=Bubble Visible ##NEEDS TRANSLATE## +gui.message.can_create_space_station.name=A Space Station can be created here! ##NEEDS TRANSLATE## +gui.message.cancel.name=Cancel ##NEEDS TRANSLATE## +gui.message.cannot_create_space_station.name=A Space Station cannot be created here. ##NEEDS TRANSLATE## +gui.message.catalog.name=Catalog ##NEEDS TRANSLATE## +gui.message.click_again.0.name=Click again to zoom (view moons & satellites) ##NEEDS TRANSLATE## +gui.message.click_again.1.name=Click again to zoom (view moons) ##NEEDS TRANSLATE## +gui.message.click_again.2.name=Click again to zoom (view satellites) ##NEEDS TRANSLATE## +gui.message.click_again.3.name=Click again to zoom ##NEEDS TRANSLATE## +gui.message.clicklink=Click for Galacticraft Wiki ##NEEDS TRANSLATE## +gui.message.create_ss.name=Create ##NEEDS TRANSLATE## +gui.message.daynightcycle.name=Day-night Cycle ##NEEDS TRANSLATE## +gui.message.energy=Energy ##NEEDS TRANSLATE## +gui.message.environment.name=Environmental Boost ##NEEDS TRANSLATE## +gui.message.exit.name=Exit ##NEEDS TRANSLATE## +gui.message.fuel.name=Fuel +gui.message.full.name=full +gui.message.generating.name=Generating ##NEEDS TRANSLATE## +gui.message.grow.name=Grow ##NEEDS TRANSLATE## +gui.message.heal.name=Heal ##NEEDS TRANSLATE## +gui.message.help1=For Galacticraft help ##NEEDS TRANSLATE## +gui.message.help1a=To see this message again at any time, type ##NEEDS TRANSLATE## +gui.message.help2=For Space Program guidance ##NEEDS TRANSLATE## +gui.message.help3=For help with oil ##NEEDS TRANSLATE## +gui.message.in.name=In +gui.message.launch.name=Launch ##NEEDS TRANSLATE## +gui.message.max_energy=Max Energy ##NEEDS TRANSLATE## +gui.message.meansurfacetemp.name=Mean Surface Temp ##NEEDS TRANSLATE## +gui.message.moon.atmosphere.0.name=None ##NEEDS TRANSLATE## +gui.message.moon.daynightcycle.0.name=29.5 Earth Days ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C ##NEEDS TRANSLATE## +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and ##NEEDS TRANSLATE## +gui.message.moon.surfacecomposition.1.name=Traces of Cheese ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.0.name=0.1654g ##NEEDS TRANSLATE## +gui.message.moon.surfacegravity.1.name=(18% of Earth) ##NEEDS TRANSLATE## +gui.message.of.name=of ##NEEDS TRANSLATE## +gui.message.oil.name=Oil ##NEEDS TRANSLATE## +gui.message.out.name=Out +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen ##NEEDS TRANSLATE## +gui.message.overworld.atmosphere.1.name=Supports life ##NEEDS TRANSLATE## +gui.message.overworld.daynightcycle.0.name=1 Earth Day ##NEEDS TRANSLATE## +gui.message.overworld.meansurfacetemp.0.name=14C ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and ##NEEDS TRANSLATE## +gui.message.overworld.surfacecomposition.1.name=gravel ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.0.name=1.0g ##NEEDS TRANSLATE## +gui.message.overworld.surfacegravity.1.name=(100% of Earth) ##NEEDS TRANSLATE## +gui.message.prelaunch=Pre-launch checklist ##NEEDS TRANSLATE## +gui.message.rename.name=Rename ##NEEDS TRANSLATE## +gui.message.select_ss.name=Select a Space Station ##NEEDS TRANSLATE## +gui.message.ss_owner.name=Owner: ##NEEDS TRANSLATE## +gui.message.status.name=Status +gui.message.strengthen.name=Strengthen ##NEEDS TRANSLATE## +gui.message.surfacecomposition.name=Surface Composition ##NEEDS TRANSLATE## +gui.message.surfacegravity.name=Surface Gravity ##NEEDS TRANSLATE## +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=Tier %d ##NEEDS TRANSLATE## +gui.message.unnamed.name=Unnamed ##NEEDS TRANSLATE## +gui.missing_core.name.0=MicdoodleCore not found in mods folder ##NEEDS TRANSLATE## +gui.missing_core.name.1=Galacticraft failed to load ##NEEDS TRANSLATE## +gui.missing_core.name.2=Close Minecraft and install MicdoodleCore ##NEEDS TRANSLATE## +gui.missing_core.name.3=Click here to open download page ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.0=New schematic slot. You ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.1=can find new schematics ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.2=by completing dungeons ##NEEDS TRANSLATE## +gui.new_schematic.slot.desc.3=on planets and moons ##NEEDS TRANSLATE## +gui.oil_tank.desc.0=Oil tank, can be filled ##NEEDS TRANSLATE## +gui.oil_tank.desc.1=with oil canisters ##NEEDS TRANSLATE## +gui.oxygen.warning=Oxygen Setup is Invalid! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister or tank ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.0=Oxygen Storage ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.1=Oxygen ##NEEDS TRANSLATE## +gui.oxygen_use.desc=Oxygen Use ##NEEDS TRANSLATE## +gui.per_second=/s ##NEEDS TRANSLATE## +gui.player.bpm=bpm ##NEEDS TRANSLATE## +gui.player.food=Food ##NEEDS TRANSLATE## +gui.player.health=Health ##NEEDS TRANSLATE## +gui.player.ouch=ouch!!!! ##NEEDS TRANSLATE## +gui.receiver.cannot_attach=Cannot attach receiver here! ##NEEDS TRANSLATE## +gui.requires_controller.desc=Requires Launch Controller ##NEEDS TRANSLATE## +gui.rocket.countdown=Countdown ##NEEDS TRANSLATE## +gui.rocket.height=Height ##NEEDS TRANSLATE## +gui.rocket.inv.name=Inventory / Fuel ##NEEDS TRANSLATE## +gui.rocket.launch.name=Launch ##NEEDS TRANSLATE## +gui.rocket.launched=Launched ##NEEDS TRANSLATE## +gui.rocket.on_launchpad=On launchpad ##NEEDS TRANSLATE## +gui.rocket.speed=Speed ##NEEDS TRANSLATE## +gui.rocket.turn.name=Turn left-right ##NEEDS TRANSLATE## +gui.rocket.updown.name=Turn up-down ##NEEDS TRANSLATE## +gui.rocket.warning.nofuel=I'll need to load in some rocket fuel first! ##NEEDS TRANSLATE## +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! ##NEEDS TRANSLATE## +gui.rocket.warning.noparachute=I don't have a parachute! If I press launch again, there's no going back! ##NEEDS TRANSLATE## +gui.rocket_type.0=Storage Space: 18 ##NEEDS TRANSLATE## +gui.rocket_type.1=Storage Space: 36 ##NEEDS TRANSLATE## +gui.rocket_type.2=Storage Space: 56 ##NEEDS TRANSLATE## +gui.rocket_type.3=Pre-fueled ##NEEDS TRANSLATE## +gui.seconds=s +gui.sensor.advanced=Advanced Mode +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Show Bubble ##NEEDS TRANSLATE## +gui.skeleton_boss.message=Boss despawned, don't leave the boss room while fighting! Re-enter room to respawn boss. ##NEEDS TRANSLATE## +gui.space_race.chat.add_success=%s has joined the Space Race! ##NEEDS TRANSLATE## +gui.space_race.chat.already_part=You are already a part of this space race! ##NEEDS TRANSLATE## +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. ##NEEDS TRANSLATE## +gui.space_race.chat.not_found=Could not find player with name: %s ##NEEDS TRANSLATE## +gui.space_race.chat.remove_success=%s has been removed from the Space Race. ##NEEDS TRANSLATE## +gui.space_race.chat.to_join=To join %s use command %s ##NEEDS TRANSLATE## +gui.space_race.coming_soon=Coming Soon ##NEEDS TRANSLATE## +gui.space_race.create.add_players.name=Add Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.back.name=Back ##NEEDS TRANSLATE## +gui.space_race.create.brush_radius.name=Brush Radius ##NEEDS TRANSLATE## +gui.space_race.create.brush_size.name=Brush Size ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.0=Change ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.1=Team ##NEEDS TRANSLATE## +gui.space_race.create.change_color.name.2=Color ##NEEDS TRANSLATE## +gui.space_race.create.close.name=Close ##NEEDS TRANSLATE## +gui.space_race.create.customize.name=Customize Flag ##NEEDS TRANSLATE## +gui.space_race.create.eraser_radius.name=Eraser Radius ##NEEDS TRANSLATE## +gui.space_race.create.eraser_size.name=Eraser Size ##NEEDS TRANSLATE## +gui.space_race.create.global_stats.name=View Global Stats ##NEEDS TRANSLATE## +gui.space_race.create.invite_player.name=Invite Player ##NEEDS TRANSLATE## +gui.space_race.create.player_radius.name=Note: Players must be within range! (25 blocks) ##NEEDS TRANSLATE## +gui.space_race.create.rem_players.name=Remove Player(s) ##NEEDS TRANSLATE## +gui.space_race.create.remove.name=Remove ##NEEDS TRANSLATE## +gui.space_race.create.remove_player.name=Remove Player ##NEEDS TRANSLATE## +gui.space_race.create.rename.name=Rename Team ##NEEDS TRANSLATE## +gui.space_race.create.send_invite.name=Send Invite ##NEEDS TRANSLATE## +gui.space_race.create.server_stats.name=View Server Stats ##NEEDS TRANSLATE## +gui.space_race.create.title.name=Space Race Manager ##NEEDS TRANSLATE## +gui.space_race.create.title.name.0=Space Race ##NEEDS TRANSLATE## +gui.space_race.create.title.name.1=Manager ##NEEDS TRANSLATE## +gui.space_race.join.member_count.name=%d members ##NEEDS TRANSLATE## +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Owner ##NEEDS TRANSLATE## +gui.space_race.join.title.name=Join Space Race ##NEEDS TRANSLATE## +gui.space_race.unnamed=Unnamed Team ##NEEDS TRANSLATE## +gui.spacestation.added=You've been added to %s's Space Station accepted players! ##NEEDS TRANSLATE## +gui.spacestation.addsuccess=Successfully added %s to Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= ##NEEDS TRANSLATE## +gui.spacestation.removesuccess=Successfully removed %s from Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.to_allow_entry=to allow another player to enter this space station! ##NEEDS TRANSLATE## +gui.spacestation.type_command=Type ##NEEDS TRANSLATE## +gui.status.active.name=Active +gui.status.air_lock_closed.name=Air Lock Closed ##NEEDS TRANSLATE## +gui.status.air_lock_open.name=Air Lock Open ##NEEDS TRANSLATE## +gui.status.blockedfully.name=Sun is Not Visible ##NEEDS TRANSLATE## +gui.status.blockedpartial.name=Sun Partially Visible ##NEEDS TRANSLATE## +gui.status.check_pending.name=Check Pending ##NEEDS TRANSLATE## +gui.status.check_starting.name=Check Starting ##NEEDS TRANSLATE## +gui.status.checking_seal.name=Checking Seal ##NEEDS TRANSLATE## +gui.status.collecting.name=Collecting ##NEEDS TRANSLATE## +gui.status.collectingenergy.name=Collecting Energy ##NEEDS TRANSLATE## +gui.status.compressing.name=Compressing ##NEEDS TRANSLATE## +gui.status.disabled.name=Disabled +gui.status.fulltank.name=Oxygen Tank Full +gui.status.generating.name=Generating ##NEEDS TRANSLATE## +gui.status.hull_heat.name=Hull Heat ##NEEDS TRANSLATE## +gui.status.idle.name=Idle +gui.status.missingleaves.name=Not Enough Leaf Blocks +gui.status.missingoxygen.name=Not Enough Oxygen +gui.status.missingpower.name=Not Enough Power +gui.status.missingtank.name=No Valid Oxygen Tank +gui.status.nofuel.name=No Fuel to Load! +gui.status.noinvtarget.name=No Inventory on Target! +gui.status.noitems.name=No Items to Load! +gui.status.nooil.name=No Oil +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Not Generating ##NEEDS TRANSLATE## +gui.status.notargetload.name=No Target to Load Into! +gui.status.notargetunload.name=No Target to Unload! +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name=Raining ##NEEDS TRANSLATE## +gui.status.ready.name=Ready +gui.status.refining.name=Refining +gui.status.running.name=Running ##NEEDS TRANSLATE## +gui.status.sealed.name=Sealed +gui.status.sealerblocked.name=Output Vent Blocked! ##NEEDS TRANSLATE## +gui.status.sun_visible.name=Sun Visible ##NEEDS TRANSLATE## +gui.status.tank_empty.name=Oxygen Tank Empty ##NEEDS TRANSLATE## +gui.status.targetempty.name=Target Vehicle is Empty! +gui.status.targetfull.name=Target Vehicle is Full! +gui.status.unknown.name=Unknown +gui.status.unsealed.name=Unsealed +gui.tank.oxygen_remaining=Oxygen Remaining ##NEEDS TRANSLATE## +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) ##NEEDS TRANSLATE## +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! ##NEEDS TRANSLATE## +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! ##NEEDS TRANSLATE## +gui.telemetry_succeed.message=Telemetry link created. ##NEEDS TRANSLATE## +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s's Air Lock Controller ##NEEDS TRANSLATE## +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. ##NEEDS TRANSLATE## +gui.warning=WARNING! +gui.warning.invalid_thermal=Invalid Thermal Protection! ##NEEDS TRANSLATE## +gui.warning.noroom=Not enough room! ##NEEDS TRANSLATE## +item.air_fan.name=Ventilateur d'air +item.air_vent.name=Conduit d'air +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Can of Food ##NEEDS TRANSLATE## +item.basic_item.compressed_aluminum.name=Compressed Aluminum ##NEEDS TRANSLATE## +item.basic_item.compressed_bronze.name=Compressed Bronze ##NEEDS TRANSLATE## +item.basic_item.compressed_copper.name=Compressed Copper ##NEEDS TRANSLATE## +item.basic_item.compressed_iron.name=Compressed Iron ##NEEDS TRANSLATE## +item.basic_item.compressed_steel.name=Compressed Steel ##NEEDS TRANSLATE## +item.basic_item.compressed_tin.name=Compressed Tin ##NEEDS TRANSLATE## +item.basic_item.dehydrated_apple.name=Dehydrated Apples ##NEEDS TRANSLATE## +item.basic_item.dehydrated_carrot.name=Dehydrated Carrots ##NEEDS TRANSLATE## +item.basic_item.dehydrated_melon.name=Dehydrated Melons ##NEEDS TRANSLATE## +item.basic_item.dehydrated_potato.name=Dehydrated Potatoes ##NEEDS TRANSLATE## +item.basic_item.frequency_module.name=Frequency Module ##NEEDS TRANSLATE## +item.basic_item.ingot_aluminum.name=Aluminum Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_bronze.name=Bronze Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_copper.name=Copper Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_steel.name=Steel Ingot ##NEEDS TRANSLATE## +item.basic_item.ingot_tin.name=Tin Ingot ##NEEDS TRANSLATE## +item.basic_item.raw_silicon.name=Raw Silicon ##NEEDS TRANSLATE## +item.basic_item.solar_module_0.name=Single Solar Module ##NEEDS TRANSLATE## +item.basic_item.solar_module_1.name=Full Solar Panel ##NEEDS TRANSLATE## +item.basic_item.wafer_advanced.name=Advanced Wafer ##NEEDS TRANSLATE## +item.basic_item.wafer_basic.name=Basic Wafer ##NEEDS TRANSLATE## +item.basic_item.wafer_solar.name=Blue Solar Wafer ##NEEDS TRANSLATE## +item.battery.name=Battery ##NEEDS TRANSLATE## +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Boghei +item.buggymat.seat.name=Buggy Seat +item.buggymat.storage.name=Buggy Storage Box +item.buggymat.wheel.name=Buggy Wheel +item.canister.copper.name=Canette de cuivre +item.canister.tin.name=Tin Canister ##NEEDS TRANSLATE## +item.canvas.name=Toile +item.cheese_block.name=Bloc de fromage +item.cheese_curd.name=Caillé +item.compressed_meteoric_iron.name=Fer météorique comprimé +item.empty_liquid_canister.name=Cannette vide +item.engine.tier1booster.name=Tier 1 Booster ##NEEDS TRANSLATE## +item.engine.tier1engine.name=Tier 1 Rocket Engine ##NEEDS TRANSLATE## +item.flag.name=Flag ##NEEDS TRANSLATE## +item.fuel.name=Rocket Fuel +item.fuel_canister.name=Cannette de carburant remplie +item.fuel_canister_partial.name=Cannette de carburant partiellement remplie +item.heavy_plating.name=Placage lourd +item.hot_description.name=Hot ##NEEDS TRANSLATE## +item.infinite_battery.name=Infinite Battery ##NEEDS TRANSLATE## +item.infinite_oxygen.name=Infinite Oxygen Supply ##NEEDS TRANSLATE## +item.key.t1.name=Tier 1 Dungeon Key +item.meteor_chunk.name=Throwable Meteor Chunk ##NEEDS TRANSLATE## +item.meteor_chunk_hot.name=Throwable Meteor Chunk ##NEEDS TRANSLATE## +item.meteoric_iron_ingot.name=Lingot de Fer météorique +item.meteoric_iron_raw.name=Fer météorique brut +item.nose_cone.name=Cône de nez +item.oil_canister.name=Cannette d'huile remplie +item.oil_canister_partial.name=Cannette d'huile partiellement remplie +item.oil_extractor.name=Extracteur d'huile portable +item.oxygen_concentrator.name=Concentrateur d'oxygène +item.oxygen_gear.name=Équipement à oxygène +item.oxygen_mask.name=Masque à oxygène +item.oxygen_tank_heavy_empty.name=Grosse bonbonne d'oxygène vide +item.oxygen_tank_heavy_full.name=Grosse bonbonne d'oxygène +item.oxygen_tank_light_empty.name=Petite bonbonne d'oxygène vide +item.oxygen_tank_light_full.name=Petite bonbonne d'oxygène +item.oxygen_tank_med_empty.name=Moyenne bonbonne d'oxygène vide +item.oxygen_tank_med_full.name=Moyenne bonbonne d'oxygène +item.parachute_black.name=Black Parachute ##NEEDS TRANSLATE## +item.parachute_blue.name=Light Blue Parachute ##NEEDS TRANSLATE## +item.parachute_brown.name=Brown Parachute ##NEEDS TRANSLATE## +item.parachute_darkblue.name=Blue Parachute ##NEEDS TRANSLATE## +item.parachute_darkgray.name=Gray Parachute ##NEEDS TRANSLATE## +item.parachute_darkgreen.name=Green Parachute ##NEEDS TRANSLATE## +item.parachute_gray.name=Light Gray Parachute ##NEEDS TRANSLATE## +item.parachute_lime.name=Lime Parachute ##NEEDS TRANSLATE## +item.parachute_magenta.name=Magenta Parachute ##NEEDS TRANSLATE## +item.parachute_orange.name=Orange Parachute ##NEEDS TRANSLATE## +item.parachute_pink.name=Pink Parachute ##NEEDS TRANSLATE## +item.parachute_plain.name=Parachute ##NEEDS TRANSLATE## +item.parachute_purple.name=Purple Parachute ##NEEDS TRANSLATE## +item.parachute_red.name=Red Parachute ##NEEDS TRANSLATE## +item.parachute_teal.name=Cyan Parachute ##NEEDS TRANSLATE## +item.parachute_yellow.name=Yellow Parachute ##NEEDS TRANSLATE## +item.rocket_fins.name=Ailerons de fusée +item.rocket_t1.name=Vaisseau spatiale +item.schematic.name=NASA Workbench Schematic +item.sensor_glasses.name=Lunettes sensorielles +item.sensor_lens.name=Lentille sensorielle +item.standard_wrench.name=Standard Wrench ##NEEDS TRANSLATE## +item.steel_axe.name=Heavy Duty Axe ##NEEDS TRANSLATE## +item.steel_boots.name=Heavy Duty Boots ##NEEDS TRANSLATE## +item.steel_chestplate.name=Heavy Duty Chestplate ##NEEDS TRANSLATE## +item.steel_helmet.name=Heavy Duty Helmet ##NEEDS TRANSLATE## +item.steel_hoe.name=Heavy Duty Hoe ##NEEDS TRANSLATE## +item.steel_leggings.name=Heavy Duty Leggings ##NEEDS TRANSLATE## +item.steel_pickaxe.name=Heavy Duty Pickaxe ##NEEDS TRANSLATE## +item.steel_pole.name=Steel Pole ##NEEDS TRANSLATE## +item.steel_shovel.name=Heavy Duty Shovel ##NEEDS TRANSLATE## +item.steel_sword.name=Heavy Duty Sword ##NEEDS TRANSLATE## +item.tier1.desc=Tier 1 ##NEEDS TRANSLATE## +item_desc.powerdraw.name=Power required: %s /s ##NEEDS TRANSLATE## +item_desc.shift.name=Press %s for more info ##NEEDS TRANSLATE## +item_group.galacticraft_blocks=Galacticraft Blocks ##NEEDS TRANSLATE## +item_group.galacticraft_items=Galacticraft Items ##NEEDS TRANSLATE## +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Toggle Sensor Goggles Mode +keybind.spaceshipinv.name=Open Spaceship Inventory +keybind.vehiclebackward.name=Vehicle Backward Key +keybind.vehicledown.name=Vehicle Down Key +keybind.vehicleforward.name=Vehicle Forward Key +keybind.vehicleleft.name=Vehicle Left Key +keybind.vehicleright.name=Vehicle Right Key +keybind.vehicleup.name=Vehicle Up Key +moon.moon=Moon ##NEEDS TRANSLATE## +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter ##NEEDS TRANSLATE## +planet.mercury=Mercury ##NEEDS TRANSLATE## +planet.neptune=Neptune ##NEEDS TRANSLATE## +planet.overworld=Overworld ##NEEDS TRANSLATE## +planet.saturn=Saturn ##NEEDS TRANSLATE## +planet.uranus=Uranus ##NEEDS TRANSLATE## +planet.venus=Venus ##NEEDS TRANSLATE## +satellite.spacestation.overworld=Overworld Space Station ##NEEDS TRANSLATE## +schematic.moonbuggy.name=Moon Buggy +schematic.rocket_t1.name=Tier 1 Rocket ##NEEDS TRANSLATE## +schematic.rocket_t2.name=Tier 2 Rocket +solarsystem.sol=Sol ##NEEDS TRANSLATE## +star.sol=Sol ##NEEDS TRANSLATE## +tile.air_lock_controller.name=Air Lock Controller ##NEEDS TRANSLATE## +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Cadre de sas +tile.air_lock_seal.name=Joint de sas +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name=Aluminum Wire ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Transfers at a faster rate than it's predecessor. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name=Heavy Aluminum Wire ##NEEDS TRANSLATE## +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Arc Lamp ##NEEDS TRANSLATE## +tile.basic_block_core.block_aluminum_gc.name=Aluminum Block ##NEEDS TRANSLATE## +tile.basic_block_core.block_copper_gc.name=Copper Block ##NEEDS TRANSLATE## +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron ##NEEDS TRANSLATE## +tile.basic_block_core.block_tin_gc.name=Tin Block ##NEEDS TRANSLATE## +tile.basic_block_core.deco_block_0.name=Tin Decoration Block ##NEEDS TRANSLATE## +tile.basic_block_core.deco_block_1.name=Tin Decoration Block ##NEEDS TRANSLATE## +tile.basic_block_core.ore_aluminum_gc.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_copper_gc.name=Copper Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_silicon.name=Silicon Ore ##NEEDS TRANSLATE## +tile.basic_block_core.ore_tin_gc.name=Tin Ore ##NEEDS TRANSLATE## +tile.basic_block_moon.bricks.name=Brique +tile.basic_block_moon.cheesestone.name=Minerai de fromage +tile.basic_block_moon.coppermoon.name=Minerai de cuivre +tile.basic_block_moon.moondirt.name=Terre Lunaire +tile.basic_block_moon.moongrass.name=Herbe Lunaire +tile.basic_block_moon.moonstone.name=Roche Lunaire +tile.basic_block_moon.tinmoon.name=Minerai d'étain +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Cargo Loader +tile.cargo.unloader.name=Cargo Unloader +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Bloc de fromage +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name=Collecteur d'oxygène +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name=Huile brute +tile.crude_oil_still.name=Huile brute +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Communications Dish ##NEEDS TRANSLATE## +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name=Distributeur d'oxygène +tile.dummyblock.cryogenic_chamber.name=Cryogenic Chamber ##NEEDS TRANSLATE## +tile.dummyblock.launch_pad.name=Rocket Launch Pad ##NEEDS TRANSLATE## +tile.dummyblock.nasa_workbench.name=NASA Workbench ##NEEDS TRANSLATE## +tile.dummyblock.solar.name=Solar Panel ##NEEDS TRANSLATE## +tile.dummyblock.space_station_base.name=Space Station Base ##NEEDS TRANSLATE## +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Sealable Aluminum Wire ##NEEDS TRANSLATE## +tile.enclosed.heavy_aluminum_wire.name=Sealable Heavy Aluminum Wire ##NEEDS TRANSLATE## +tile.enclosed.copper_cable.name=Sealable Copper Cable ##NEEDS TRANSLATE## +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fiber Cable ##NEEDS TRANSLATE## +tile.enclosed.gold_cable.name=Sealable Gold Cable ##NEEDS TRANSLATE## +tile.enclosed.hv_cable.name=Sealable HV Cable ##NEEDS TRANSLATE## +tile.enclosed.lv_cable.name=Sealable Ultra-Low-Current Cable ##NEEDS TRANSLATE## +tile.enclosed.me_cable.name=Sealable ME Cable ##NEEDS TRANSLATE## +tile.enclosed.fluid_pipe.name=Sealable Oxygen Pipe +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Waterproof Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Waterproof Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_power_gold.name=Sealable Golden Conductive Pipe ##NEEDS TRANSLATE## +tile.enclosed.pipe_power_stone.name=Sealable Stone Conductive Pipe ##NEEDS TRANSLATE## +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Météore tombé +tile.fuel.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name=Fuel Loader ##NEEDS TRANSLATE## +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Glowstone Torch ##NEEDS TRANSLATE## +tile.landing_pad.buggy_fueler.name=Buggy Fueling Pad +tile.landing_pad.cargo_pad.name=Cargo Rocket Pad +tile.landing_pad.description=Landing Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name=Rampe de lancement de fusée +tile.landing_pad_full.name=Rocket Launch Pad ##NEEDS TRANSLATE## +tile.machine.0.name=Coal Generator ##NEEDS TRANSLATE## +tile.machine.1.name=Energy Storage Module ##NEEDS TRANSLATE## +tile.machine.2.name=Electric Furnace ##NEEDS TRANSLATE## +tile.machine.3.name=Compressor ##NEEDS TRANSLATE## +tile.machine.7.name=Electric Arc Furnace ##NEEDS TRANSLATE## +tile.machine.8.name=Energy Storage Cluster ##NEEDS TRANSLATE## +tile.machine2.4.name=Electric Compressor ##NEEDS TRANSLATE## +tile.machine2.5.name=Circuit Fabricator ##NEEDS TRANSLATE## +tile.machine2.6.name=Oxygen Storage Module ##NEEDS TRANSLATE## +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.moon_stairs_stone.name=Moon Rock Stairs ##NEEDS TRANSLATE## +tile.ore_copper.name=Copper Ore ##NEEDS TRANSLATE## +tile.ore_tin.name=Tin Ore ##NEEDS TRANSLATE## +tile.oxygen_compressor.0.name=Oxygen Compressor ##NEEDS TRANSLATE## +tile.oxygen_compressor.1.name=Oxygen Decompressor ##NEEDS TRANSLATE## +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name=Oxygen Detector +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name=Tuyau d'oxygène +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Parachest ##NEEDS TRANSLATE## +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name=Raffinerie +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=Table de travail de rocket +tile.sapling2.birch.name=Birch Sapling +tile.sapling2.jungle.name=Jungle Sapling +tile.sapling2.oak.name=Oak Sapling +tile.sapling2.spruce.name=Spruce Sapling +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name=Oxygen Sealer +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.moon_slab.name=Moon Rock Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.solar.advanced_solar.name=Advanced Solar Panel ##NEEDS TRANSLATE## +tile.solar.basic_solar.name=Basic Solar Panel ##NEEDS TRANSLATE## +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Space Station Arrival Block ##NEEDS TRANSLATE## +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Spin Thruster ##NEEDS TRANSLATE## +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Telemetry Unit ##NEEDS TRANSLATE## +tile.tin_stairs_1.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.tin_stairs_2.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Coffre au trésor +tile.unlit_torch.name=Torche +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Torche +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Display Screen ##NEEDS TRANSLATE## +tile.wall_gc.moon.name=Moon Rock Wall ##NEEDS TRANSLATE## +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall ##NEEDS TRANSLATE## +tile.wall_gc.tin.name=Tin Decoration Wall ##NEEDS TRANSLATE## diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_fr.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_fr.lang new file mode 100644 index 00000000..7705f31e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/fr_fr.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s a été envoyé dans l'atmosphère%s +commands.dimensiontp.too_many=trop d'arguments dans cette commande ! Utilisez: +commands.gcenergyunits.invalid_units=Unitées fausses dans la commande /GCEnergyUnits. Utilisez: %s +commands.gcenergyunits.no_units=Les unitées doivent être spécifiées ! Utilisez: %s +commands.joinrace.no_team=Le groupe doit être spécifié! Utilisez: %s +commands.ssinvite.not_found=impossible de trouver une station spatiale pour votre nom, vous devez voyager là d'abord ! +commands.ssinvite.wrong_usage=pas assez d'arguments dans cette commande ! Utilisez: %s +commands.ssnewowner.wrong_usage=ID# de la station spatiale inconnu - est-ce qu'il existe ? Utilisez: %s +commands.ssuninvite.no_player=Impossible de trouver un joueur du nom %s dans la liste des stations spatiales ! +container.cargoloader.name=Chargeur de cargaison +container.cargounloader.name=Déchargeur de cargaison +container.fuelloader.name=Chargeur de carburant +container.lander.name=Atterrisseur spatial +container.oxygencollector.name=Collecteur d'oxygène +container.oxygencompressor.name=Compresseur d'oxygène +container.oxygendecompressor.name=Décompresseur d'oxygène +container.oxygendistributor.name=Distributeur d'oxygène +container.oxygensealer.name=Scellant d'oxygène +container.parachest.name=Coffre aéroporté +container.refinery.name=Raffinerie +container.solaradvanced.name=Panneau solaire avancé +container.solarbasic.name=Panneau solaire de base +container.spaceship.name=Fusée Niveau 1 +container.treasurechest.name=Coffre au trésor +death.attack.oxygen_suffocation=%1$s a manqué d'oxygène ! +death.attack.spaceship_crash=%1$s s'est écrasé au sol. Mince. +death.attack.thermal=%1$s a oublié sa protection thermique ! +dimension.moon.name=Lune +dimension.overworld.name=Terre +dimension.sun.name=Soleil +entity.alien_villager.name=Villageois alien +entity.buggy.name=Boghei +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper évolué +entity.evolved_skeleton.name=Squelette évolué +entity.evolved_skeleton_boss.name=Boss squelette évolué +entity.evolved_spider.name=Araignée évolué +entity.evolved_zombie.name=Zombie évolué +entity.flag.name=Drapeau +entity.gcflag.name=Drapeau +entity.gravity_arrow.name=Flèche +entity.lander.name=Atterrisseur spatial +entity.meteor.name=Météore +entity.meteor_chunk.name=Morceau de météore +entity.oxygen_bubble.name=Bulle d'oxygène +entity.para_chest.name=Coffre parachuté +entity.rocket_t1.name=Fusée Niveau 1 +galaxy.milky_way=Voie lactée +gc.configgui.alternate_canister_recipe=Recette alternative des bouteilles +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=Base de BiomeID pour GC +gc.configgui.detectable_i_ds=ID détectables +gc.configgui.disable_cheese_moon=Désactive la génération de fromage lunaire +gc.configgui.disable_copper_moon=Désactive la génération de cuivre lunaire +gc.configgui.disable_lander=Désactible les atterrisseurs sur la lune, utilisez les parachutes à la place +gc.configgui.disable_moon_village_gen=Désactive la génération de village lunaire +gc.configgui.disable_space_station_creation=Désactive le création de station spatiale +gc.configgui.disable_spaceship_grief=Désactive les explosions de fusée +gc.configgui.disable_spaceship_particles=Désactiver les particules des fusées +gc.configgui.disable_tin_moon=Désactive la génération d'étain lunaire +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Modificateur de santé du boss de donjon +gc.configgui.enable_aluminum_ore_gen=Génération d'aluminium du monde normal +gc.configgui.enable_copper_ore_gen=Génération de cuivre du monde normal +gc.configgui.enable_debug=Montre les message de débogue dans la console +gc.configgui.enable_other_mods_features=Active le mod externe de génération de monde +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Vérification des angles scélés +gc.configgui.enable_silicon_ore_gen=Génération de silicium du monde normal +gc.configgui.enable_thaum_craft_nodes=Active les nodes ThaumCraft sur les planètes +gc.configgui.enable_tin_ore_gen=Génération d'étain du monde normal +gc.configgui.external_oil_gen=Génération de pétrole externe +gc.configgui.force_overworld_respawn=Force la résurection dans le monde normal +gc.configgui.hard_mode=Difficulté plus dure +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=ID dimension lune +gc.configgui.id_dimension_overworld_orbit=ID dimension station spatiale +gc.configgui.id_dimension_overworld_orbit_static=ID dimension station spatiale statique +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Inservez le défilement de la carte +gc.configgui.map_scroll_sensitivity=Sensibilité de la souris pour le défilement de carte +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Montre plus d'étoiles +gc.configgui.oil_gen_factor=Facteur de génération de pétrole +gc.configgui.ore_dict_silicon=Nom OreDict du silicon dans les autres mods +gc.configgui.other_mod_ore_gen_i_ds=Les minerai d'autre mod seront généré sur les planètes +gc.configgui.override_capes=Dérogation des capes des donneurs +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Placer l'indicateur d'oxygène en bas +gc.configgui.oxygen_indicator_left=Placer l'indicateur d'oxygène à gauche +gc.configgui.quick_mode=Jeu rapide (plus facile) +gc.configgui.rocket_disable_overworld_return=Désactiver le retour de fusée en monde normal +gc.configgui.rocket_disabled_dimensions=Dimensions désactivé aux fusées +gc.configgui.rocket_fuel_factor=Facteur de carburant de la fusée +gc.configgui.sealable_i_ds=Blocs scélables +gc.configgui.space_station_energy_scalar=Modificateurs d'énergie de station spatiale +gc.configgui.space_stations_require_permission=Permissions de station spatiales +gc.configgui.static_loaded_dimensions=Dimensions statiques chargées +gc.configgui.suffocation_cooldown=Récupération de suffocation +gc.configgui.suffocation_damage=Dégâts de suffocation +gc.configgui.title=Configuration de Galacticraft Core +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Emplacement pour pile, placez une pile ici +gui.battery_slot.desc.1=ou utilisez une autre source d'énergie +gui.bed_fail.message=Euh, et s'il manque d'oxygène pendant que dors ? Il me faut une capsule cryogénique pour dormir dans l'espace ! +gui.buggy.accel.name=Accélérer +gui.buggy.decel.name=Ralentir +gui.buggy.inv.name=Inventaire / Carburant +gui.buggy.storage_space=Espace de stockage +gui.buggy.turn.name=Tournez à gauche-doite +gui.button.back.name=Retour +gui.button.disable.name=Désactiver +gui.button.disableseal.name=Désactiver le scellage +gui.button.enable.name=Activer +gui.button.enableseal.name=Activer le scellage +gui.button.hide_dest.name=Masquer +gui.button.loadfuel.name=Charger le carburant +gui.button.loaditems.name=Charger les articles +gui.button.next.name=Suivant +gui.button.refine.name=Affiner +gui.button.stoploading.name=Arrêtez le chargement en cours +gui.button.stoprefine.name=Arrêtez de raffinage +gui.button.stopunloading.name=Arrêtez le déchargement en cours +gui.button.unhide_dest.name=Révéler +gui.button.unloaditems.name=Décharger les articles +gui.button.unlockschematic.name=Débloquez schéma +gui.checkbox.horizontal.name=Mode horizontal +gui.checkbox.invert.name=Sélection inversée +gui.checkbox.player_name.name=Le nom du joueur est +gui.checkbox.player_within.name=Le joueur est dans +gui.checkbox.redstone_signal.name=S'ouvre avec un signal de redstone +gui.chest.warning.wrongkey=J'aurai besoin d'une clée de donjon de niveau %s pour débloquer ceci! +gui.choose_planet.desc.moon=Habitable#Pas d'oxygène#Gravité: 18% +gui.choose_planet.desc.overworld=Plein de vie#Habitable#Gravité: 100% +gui.chooseplanet.alreadycreated1.name=Station spatiale déjà +gui.chooseplanet.alreadycreated2.name=Crée! +gui.chooseplanet.cannotcreate1.name=Vous ne pouvez pas créer d'espace +gui.chooseplanet.cannotcreate2.name=Station spatiale ici! +gui.creative_only.desc=Creatif uniquement +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Vitesse actuelle +gui.docking_rocket.distance_from.name=Distance à la cible +gui.docking_rocket.target_vel.name=Vitesse de la cible +gui.docking_rocket.warning.name.0=Appuyez sur %s pour freiner +gui.docking_rocket.warning.name.1=Appuyez %s pour accélerer +gui.dropbox.player_distance.name.0=1 Mètres +gui.dropbox.player_distance.name.1=2 Mètres +gui.dropbox.player_distance.name.2=5 Mètres +gui.dropbox.player_distance.name.3=10 Mètres +gui.electric_compressor.desc.0=Progression +gui.energy_storage.desc.0=Stockage d'énergie +gui.energy_storage.desc.1=Energie +gui.flag.already_placed=Le drapeau est déjà placé ici +gui.frequency_module.desc.0=Peut recevoir de faibles ondes +gui.frequency_module.desc.1=sonores et d'autres signaux distants +gui.frequencymodule.warning0=J'aurai probablement besoin de +gui.frequencymodule.warning1=si je veut entendre correctement ici +gui.fuel_output.desc.0=Placez un réservoir vide dans +gui.fuel_output.desc.1=cet emplacement pour les remplir depuis +gui.fuel_output.desc.2=le reservoir de carburant +gui.fuel_tank.desc.0=Réservoir de carburant, requiert +gui.fuel_tank.desc.1=un chargeur à carburant +gui.fuel_tank.desc.2=Réservoir de carburant, peut être remplit +gui.fuel_tank.desc.3=avec du carburant +gui.fuel_tank.desc.4=Réservoir de carburant +gui.infinite_item.desc=Infinie +gui.lander.velocity=Vitesse d'entrée +gui.lander.velocityu=m/s +gui.lander.warning2=Tenir " +gui.lander.warning3=" ralentir! +gui.max_output.desc=Sortie Maxi +gui.message.addnewsch.name=Ajouter un nouveau Schéma +gui.message.apply.name=Appliquer +gui.message.assign_name.name=Assigner le nom +gui.message.atmosphere.name=Atmosphère +gui.message.back.name=Arrière +gui.message.breed.name=Nourir +gui.message.bubble_visible.name=Bulles visibles +gui.message.can_create_space_station.name=Une station spatiale peut être crée ici ! +gui.message.cancel.name=Annuler +gui.message.cannot_create_space_station.name=Une station spatiale ne peut pas être crée ici ! +gui.message.catalog.name=Catalogue +gui.message.click_again.0.name=Cliquez encore pour zoomer (pour voir les lunes et les satellites) +gui.message.click_again.1.name=Cliquez encore pour zoomer (pour voir les lunes) +gui.message.click_again.2.name=Cliquez encore pour zoomer (pour voir les satellites) +gui.message.click_again.3.name=Cliquez encore pour zoomer +gui.message.clicklink=Cliquez pour le Wiki de Galacticraft +gui.message.create_ss.name=Créer +gui.message.daynightcycle.name=Cycle jour-nuit +gui.message.energy=Energie +gui.message.environment.name=Amplificateur écologique +gui.message.exit.name=Sortie +gui.message.fuel.name=Carburant +gui.message.full.name=Plein +gui.message.generating.name=Génération +gui.message.grow.name=Grandir +gui.message.heal.name=Soigner +gui.message.help1=Pour l'aide de Galacticraft +gui.message.help1a=Pour revoir ce message une nouvelle fois, tapez +gui.message.help2=Pour le guide du programme spatial +gui.message.help3=Pour de l'aide sur les carburants +gui.message.in.name=Dedans +gui.message.launch.name=Lancement +gui.message.max_energy=Energie maximale +gui.message.meansurfacetemp.name=Température à la surface moyenne +gui.message.moon.atmosphere.0.name=non +gui.message.moon.daynightcycle.0.name=29.5 jours terrestres +gui.message.moon.meansurfacetemp.0.name=(Face éclairée) 253C +gui.message.moon.meansurfacetemp.1.name=(Nuit) -153C +gui.message.moon.surfacecomposition.0.name=Roche basaltique +gui.message.moon.surfacecomposition.1.name=Traces de fromage +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% de la gravité terrestre) +gui.message.of.name=de +gui.message.oil.name=Pétrole +gui.message.out.name=Dehors +gui.message.overworld.atmosphere.0.name=Azote et Oxygène +gui.message.overworld.atmosphere.1.name=Peut accueillir la vie +gui.message.overworld.daynightcycle.0.name=1 jour terrestre +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Pierre, terre, et +gui.message.overworld.surfacecomposition.1.name=gravier +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% de la gravité terrestre) +gui.message.prelaunch=Liste de vérification de pré-lancement +gui.message.rename.name=Renommer +gui.message.select_ss.name=Sélectionnez une station de l'espace +gui.message.ss_owner.name=Propriétaire : +gui.message.status.name=Statut +gui.message.strengthen.name=Renforcer +gui.message.surfacecomposition.name=Composition de la surface +gui.message.surfacegravity.name=Gravité à la surface +gui.message.thermal_status.name=Contrôle thermique +gui.message.tier.name=Niveau %d +gui.message.unnamed.name=sans-nom +gui.missing_core.name.0=MicdoodleCore n'as pas été trouvé dans le dossier mods +gui.missing_core.name.1=Galacticraft ne s'est pas chargé correctement +gui.missing_core.name.2=Fermez Minecraft et installez MicdoodleCore +gui.missing_core.name.3=Cliquez ici pour ouvrir la page de téléchargement +gui.new_schematic.slot.desc.0=Emplacement de nouveau plan. Vous +gui.new_schematic.slot.desc.1=pouvez trouver des plans +gui.new_schematic.slot.desc.2=en explorant des donjons +gui.new_schematic.slot.desc.3=sur les autres planètes ou lunes +gui.oil_tank.desc.0=Réservoir de pétrole, peut être remplit +gui.oil_tank.desc.1=avec du pétrole +gui.oxygen.warning=La configuration d'oxygène est invalide! +gui.oxygen_compressor.slot.desc.0=Emplacement réservoir, placez ici un réservoir +gui.oxygen_compressor.slot.desc.1=d'oxygène pour le remplir d'air respirable. +gui.oxygen_decompressor.slot.desc.0=Emplacement réservoir, placez ici un réservoir +gui.oxygen_decompressor.slot.desc.1=d'oxygène pour le vider de l'air respirable. +gui.oxygen_slot.desc.0=Emplacement oxygène, placez ici une boite ou un +gui.oxygen_slot.desc.1=réservoir ou une provision d'oxygène connectée +gui.oxygen_storage.desc.0=Stockage d'oxygène +gui.oxygen_storage.desc.1=Oxygène +gui.oxygen_use.desc=Utilise de l'oxygène +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Aliments +gui.player.health=Santé +gui.player.ouch=aïe !!!! +gui.receiver.cannot_attach=Impossible d'attacher le récepteur ici ! +gui.requires_controller.desc=Requiert un controlleur +gui.rocket.countdown=Compte à rebours +gui.rocket.height=Altitude +gui.rocket.inv.name=Inventaire / Carburant +gui.rocket.launch.name=Lancement +gui.rocket.launched=Lancé +gui.rocket.on_launchpad=Sur le pas de tir +gui.rocket.speed=Vitesse +gui.rocket.turn.name=Tourner (droite-gauche) +gui.rocket.updown.name=Tourner (haut-bas) +gui.rocket.warning.nofuel=Je doit d'abord remplir le réservoir de carburant! +gui.rocket.warning.nogyroscope=De mistérieuses forces sont en jeu et les gyroscopes sont devenu fou ! +gui.rocket.warning.noparachute=Je n'ai pas de parachute! Si j'appuie encore sur "lancement", je ne pourrait plus revenir! +gui.rocket_type.0=Espace de stockage : 18 +gui.rocket_type.1=Espace de stockage : 36 +gui.rocket_type.2=Espace de stockage : 56 +gui.rocket_type.3=Réservoir pré-remplis +gui.seconds=s +gui.sensor.advanced=Mode avancé +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Montrer la bulle +gui.skeleton_boss.message=Disparition du Boss, ne quittez pas la salle du boss durant le combat ! Ré-entrez dans la salle pour le faire apparaitre. +gui.space_race.chat.add_success=%s a rejoint le course de l'espace ! +gui.space_race.chat.already_part=Vous faites déjà partie de cette course de l'espace ! +gui.space_race.chat.invite_received=Vous avez reçu l'invitation de l'équipe de course de l'espace : %s +gui.space_race.chat.not_found=Impossible de trouver le joueur portant le nom : %s +gui.space_race.chat.remove_success=%s a été retiré de la course de l'espace. +gui.space_race.chat.to_join=Pour rejoindre %s utilisez la commande %s +gui.space_race.coming_soon=Arrive bientot +gui.space_race.create.add_players.name=Ajouter un joueur +gui.space_race.create.back.name=Arrière +gui.space_race.create.brush_radius.name=Rayon du pinceau +gui.space_race.create.brush_size.name=Taille du pinceau +gui.space_race.create.change_color.name.0=Changer la +gui.space_race.create.change_color.name.1=couleur de +gui.space_race.create.change_color.name.2=l'équipe +gui.space_race.create.close.name=Fermer +gui.space_race.create.customize.name=Personaliser le drapeau +gui.space_race.create.eraser_radius.name=Rayon de la gomme +gui.space_race.create.eraser_size.name=Taille de la gomme +gui.space_race.create.global_stats.name=Voir les statistiques globales +gui.space_race.create.invite_player.name=Inviter un joueur +gui.space_race.create.player_radius.name=Note: Les joueurs doivent être à portée! (25 blocs) +gui.space_race.create.rem_players.name=Enlever un joueur +gui.space_race.create.remove.name=Enlever +gui.space_race.create.remove_player.name=Enlever un joueur +gui.space_race.create.rename.name=Renommer les équipes +gui.space_race.create.send_invite.name=Envoyer une invitation +gui.space_race.create.server_stats.name=Voir les statistiques du serveur +gui.space_race.create.title.name=Gestionnaire de la course de l'espace +gui.space_race.create.title.name.0=Course de l'espace +gui.space_race.create.title.name.1=Directeur +gui.space_race.join.member_count.name=%d membres +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Propriétaire +gui.space_race.join.title.name=Rejoindre la course de l'espace +gui.space_race.unnamed=Equipe sans nom +gui.spacestation.added=Vous avez été ajouté aux joueurs acceptés dans la station spatiale de %s ! +gui.spacestation.addsuccess=%s a été ajouté à la liste de la station spatiale ! +gui.spacestation.allow_all_false=Votre station spatiale n'est plus accessible à tous les joueurs ! +gui.spacestation.allow_all_true=Votre station spatiale est maintenant accessible à tous les joueurs ! (Utiliser /ssinvite -all pour annuler.) +gui.spacestation.changesuccess=Le propriétaire de la station spatiale est passé de %s à %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=%s a été supprimé de la liste des stations spatiales avec succès ! +gui.spacestation.to_allow_entry=pour autoriser un autre joueur à entrer dans votre station! +gui.spacestation.type_command=Tappez +gui.status.active.name=Actif +gui.status.air_lock_closed.name=Sas d'air fermé +gui.status.air_lock_open.name=Sas d'air ouvert +gui.status.blockedfully.name=Le soleil n'est pas visible +gui.status.blockedpartial.name=Le soleil partiellement visible +gui.status.check_pending.name=Contrôle suspendu +gui.status.check_starting.name=Contrôle de départ +gui.status.checking_seal.name=Contrôle du cachet +gui.status.collecting.name=Récupération +gui.status.collectingenergy.name=collecte de l'énergie +gui.status.compressing.name=Compression +gui.status.disabled.name=Hors service +gui.status.fulltank.name=Réservoir d'oxygène plein +gui.status.generating.name=Production +gui.status.hull_heat.name=Bouclier thermique +gui.status.idle.name=Tourne au ralenti +gui.status.missingleaves.name=Pas assez de blocs de feuilles +gui.status.missingoxygen.name=Pas assez d'oxygène +gui.status.missingpower.name=Pas assez de puissance +gui.status.missingtank.name=Pas de réservoir d'oxygène Valide +gui.status.nofuel.name=Pas de carburant à charger! +gui.status.noinvtarget.name=Pas d'inventaire sur la cible! +gui.status.noitems.name=Pas d'éléments à charger! +gui.status.nooil.name=Pas d'huile +gui.status.not_available.name=N/D +gui.status.not_generating.name=pas de production +gui.status.notargetload.name=Aucune cible à charger dedans! +gui.status.notargetunload.name=Aucune cible à décharger! +gui.status.off.name=Désactivé +gui.status.on.name=Activé +gui.status.raining.name=Il pleut +gui.status.ready.name=Prêt +gui.status.refining.name=Raffinage +gui.status.running.name=Fonctionnant +gui.status.sealed.name=Scellé +gui.status.sealerblocked.name=Conduit de sortie bloqué! +gui.status.sun_visible.name=Soleil visible +gui.status.tank_empty.name=Réservoir d'oxygène vide +gui.status.targetempty.name=Le véhicule ciblé est vide! +gui.status.targetfull.name=Le véhicule ciblé est plein! +gui.status.unknown.name=Inconnu +gui.status.unsealed.name=Descellé +gui.tank.oxygen_remaining=Oxygène restant +gui.telemetry_fail.message=Avant tout, je devrai rechercher une entité avec ce module de fréquence ! (Ou essayer de le porter !) +gui.telemetry_fail_no_frequency_module.message=je devrai probablement avoir un module de fréquence dans ma main pour pouvoir utiliser ceci ! +gui.telemetry_fail_wearing_it.message=je devrai décoller mon module de fréquence si je veux le lier a cette unité de télémétrie ! +gui.telemetry_succeed.message=Lien télémétrique activé. +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Utilise plus d'énergie ! +gui.title.air_lock.name=%s's Controlleur du sas +gui.tracking.message=Dépistage activé. Maintenant, je devrai faire un clic droit de ceci sur une unité de télémétrie pour compléter le lien. +gui.warning=ALERTE! +gui.warning.invalid_thermal=Protection thermique invalides ! +gui.warning.noroom=Pas assez de place! +item.air_fan.name=Ventilateur +item.air_vent.name=Conduit d'air +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Boîte de nourriture +item.basic_item.compressed_aluminum.name=Aluminium comprimé +item.basic_item.compressed_bronze.name=Bronze comprimé +item.basic_item.compressed_copper.name=Cuivre comprimé +item.basic_item.compressed_iron.name=Fer comprimé +item.basic_item.compressed_steel.name=Acier comprimé +item.basic_item.compressed_tin.name=Étain comprimé +item.basic_item.dehydrated_apple.name=Pomme déshydratée +item.basic_item.dehydrated_carrot.name=Carotte déshydratée +item.basic_item.dehydrated_melon.name=Melon déshydraté +item.basic_item.dehydrated_potato.name=Pomme de terre déshydratée +item.basic_item.frequency_module.name=Module de fréquence +item.basic_item.ingot_aluminum.name=Lingot d'aluminum +item.basic_item.ingot_bronze.name=Lingot de bronze +item.basic_item.ingot_copper.name=Lingot de cuivre +item.basic_item.ingot_steel.name=Lingot d'acier +item.basic_item.ingot_tin.name=Lingot d'étain +item.basic_item.raw_silicon.name=Silicium brut +item.basic_item.solar_module_0.name=Partie de panneau solaire +item.basic_item.solar_module_1.name=Panneau solaire complet +item.basic_item.wafer_advanced.name=Galette avancée +item.basic_item.wafer_basic.name=Galette de base +item.basic_item.wafer_solar.name=Galette solaire bleu +item.battery.name=Batterie +item.bucket_fuel.name=Seau d'essence +item.bucket_oil.name=Seau de pétrole +item.buggy.name=Boghei +item.buggymat.seat.name=Siège de boghei +item.buggymat.storage.name=Boîte de rangement pour boghei +item.buggymat.wheel.name=Roue de boghei +item.canister.copper.name=Canette en cuivre +item.canister.tin.name=Canette en étain +item.canvas.name=Toile +item.cheese_block.name=Bloc de fromage +item.cheese_curd.name=Caillé +item.compressed_meteoric_iron.name=Fer météorique comprimé +item.empty_liquid_canister.name=Cannette vide +item.engine.tier1booster.name=Amplificateur Niveau 1 +item.engine.tier1engine.name=Moteur de fusée Niveau 1 +item.flag.name=Drapeau +item.fuel.name=Carburant pour fusée +item.fuel_canister.name=Cannette de carburant remplie +item.fuel_canister_partial.name=Cannette de carburant partiellement remplie +item.heavy_plating.name=Placage lourd +item.hot_description.name=Chaud +item.infinite_battery.name=Batterie infinie +item.infinite_oxygen.name=Provision d'oxygène infinie +item.key.t1.name=Clé du Donjon Niveau 1 +item.meteor_chunk.name=Gros morceau de météore tombée +item.meteor_chunk_hot.name=Gros morceau de météore tombée +item.meteoric_iron_ingot.name=Lingot de Fer météorique +item.meteoric_iron_raw.name=Fer météorique brut +item.nose_cone.name=Cône de nez +item.oil_canister.name=Cannette d'huile remplie +item.oil_canister_partial.name=Cannette d'huile partiellement remplie +item.oil_extractor.name=Extracteur de pétrole portable +item.oxygen_concentrator.name=Concentrateur d'oxygène +item.oxygen_gear.name=Équipement à oxygène +item.oxygen_mask.name=Masque à oxygène +item.oxygen_tank_heavy_empty.name=Grosse bonbonne d'oxygène vide +item.oxygen_tank_heavy_full.name=Grosse bonbonne d'oxygène +item.oxygen_tank_light_empty.name=Petite bonbonne d'oxygène vide +item.oxygen_tank_light_full.name=Petite bonbonne d'oxygène +item.oxygen_tank_med_empty.name=Moyenne bonbonne d'oxygène vide +item.oxygen_tank_med_full.name=Moyenne bonbonne d'oxygène +item.parachute_black.name=Parachute noir +item.parachute_blue.name=Parachute bleu pâle +item.parachute_brown.name=Parachute brun +item.parachute_darkblue.name=Parachute bleu foncé +item.parachute_darkgray.name=Parachute gris foncé +item.parachute_darkgreen.name=Parachute vert foncé +item.parachute_gray.name=Parachute gris pâle +item.parachute_lime.name=Parachute vert citron +item.parachute_magenta.name=Parachute magenta +item.parachute_orange.name=Parachute orange +item.parachute_pink.name=Parachute rose +item.parachute_plain.name=Parachute +item.parachute_purple.name=Parachute mauve +item.parachute_red.name=Parachute rouge +item.parachute_teal.name=Parachute cyan +item.parachute_yellow.name=Parachute jaune +item.rocket_fins.name=Ailerons de fusée +item.rocket_t1.name=Fusée +item.schematic.name=Plan pour atelier de la NASA +item.sensor_glasses.name=Lunettes sensorielles +item.sensor_lens.name=Lentille sensorielle +item.standard_wrench.name=Clé standard +item.steel_axe.name=Hache en acier lourd +item.steel_boots.name=Bottes en acier lourd +item.steel_chestplate.name=Plastron en acier lourd +item.steel_helmet.name=Casque en acier lourd +item.steel_hoe.name=Houe en acier lourd +item.steel_leggings.name=Jambières en acier lourd +item.steel_pickaxe.name=Pioche en acier lourd +item.steel_pole.name=Mât en acier +item.steel_shovel.name=Pelle en acier lourd +item.steel_sword.name=Épée en acier lourd +item.tier1.desc=Niveau 1 +item_desc.powerdraw.name=puissance demandée : %s /s +item_desc.shift.name=Appuyez %s pour plus d'info +item_group.galacticraft_blocks=Blocs de Galacticraft +item_group.galacticraft_items=Objets de Galacticraft +keybind.map.name=Carte de la galaxie +keybind.sensortoggle.name=Changer le mode des capteurs de lunette +keybind.spaceshipinv.name=Ouvrir l'inventaire du vaisseau spatial +keybind.vehiclebackward.name=Véhicule-Aller en arrière +keybind.vehicledown.name=Véhicule-Descendre +keybind.vehicleforward.name=Véhicule-Aller en avant +keybind.vehicleleft.name=Véhicule-Aller à gauche +keybind.vehicleright.name=Véhicule-Aller à droite +keybind.vehicleup.name=Véhicule-Monter +moon.moon=Lune +newversion.failed.name=La mise à jour de Galacticraft à échouée! Essayer à nouveau dans 15 secondes +newversion.success.name=Nouvelle version de Galacticraft trouvée: +planet.jupiter=Jupiter +planet.mercury=Mercure +planet.neptune=Neptune +planet.overworld=Terre +planet.saturn=Saturne +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Station spatiale de l'Overworld +schematic.moonbuggy.name=Boghei Lunaire +schematic.rocket_t1.name=Fusée Niveau 1 +schematic.rocket_t2.name=Fusée Niveau 2 +solarsystem.sol=Sol +star.sol=Soleil +tile.air_lock_controller.name=Contrôleur de sas +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Cadre de sas +tile.air_lock_seal.name=Joint de sas +tile.aluminum_wire.alu_wire.description=Le câble en aluminum est utilisé pour connecter des sources d'énergies à des machines qui en ont besoin. +tile.aluminum_wire.alu_wire.name=Câble en aluminium +tile.aluminum_wire.alu_wire_heavy.description=Le câble en aluminum lourd est utilisé pour connecter des sources d'énergies à des machines qui en ont besoin. Transfers à plus haut débit que son prédécesseur. +tile.aluminum_wire.alu_wire_heavy.name=Câble en aluminium lourd +tile.arclamp.description=Les lampes ARC sont utilisées pour éclairer fortement une large zone, provocant la fuite de la plupart des mobs. +tile.arclamp.name=Lampe ARC +tile.basic_block_core.block_aluminum_gc.name=Bloc d'aluminum +tile.basic_block_core.block_copper_gc.name=Bloc de cuivre +tile.basic_block_core.block_meteoric_iron_gc.name=Fer météorique solide +tile.basic_block_core.block_tin_gc.name=Bloc d'étain +tile.basic_block_core.deco_block_0.name=Bloc décoratif en étain +tile.basic_block_core.deco_block_1.name=Bloc décoratif en étain +tile.basic_block_core.ore_aluminum_gc.name=Minerai d'aluminium +tile.basic_block_core.ore_copper_gc.name=Minerai de cuivre +tile.basic_block_core.ore_silicon.name=Minerai de Silicium +tile.basic_block_core.ore_tin_gc.name=Minerai d'étain +tile.basic_block_moon.bricks.name=Brique +tile.basic_block_moon.cheesestone.name=Minerai de fromage +tile.basic_block_moon.coppermoon.name=Minerai de cuivre +tile.basic_block_moon.moondirt.name=Terre Lunaire +tile.basic_block_moon.moongrass.name=Herbe Lunaire +tile.basic_block_moon.moonstone.name=Roche Lunaire +tile.basic_block_moon.tinmoon.name=Minerai d'étain +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Chargeur de cargaison +tile.cargo.unloader.name=Déchargeur de cargaison +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Bloc de fromage +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Le collecteur d'oxygène stockera l'oxygène rassemblé des feuilles dans les environs. +tile.collector.name=Collecteur d'oxygène +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Pétrole +tile.crude_oil_moving.name=Pétrole brut +tile.crude_oil_still.name=Pétrole brut +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Disques de communication +tile.distributor.description=Le distributeur d'oxygène émettra une bulle d'oxygène à l'extérieur du bloc de centre en utilisant le réservoir interne. Ceci permet une respiration saine à l'intérieur de la bulle. +tile.distributor.name=Distributeur d'oxygène +tile.dummyblock.cryogenic_chamber.name=Chambre cryogénique +tile.dummyblock.launch_pad.name=Rampe de lancement de fusée +tile.dummyblock.nasa_workbench.name=Atelier de la NASA +tile.dummyblock.solar.name=Panneau solaire +tile.dummyblock.space_station_base.name=Base de la station spatiale +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Câble hermétique en aluminium +tile.enclosed.heavy_aluminum_wire.name=Câble hermétique en aluminium lourd +tile.enclosed.copper_cable.name=Câble hermétique en cuivre +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Câble hermétique en fibres de verre +tile.enclosed.gold_cable.name=Câble hermétique en or +tile.enclosed.hv_cable.name=Câble hermétique à haut voltage +tile.enclosed.lv_cable.name=Câble hermétique à courant ultra faible +tile.enclosed.me_cable.name=Câble ME hermétique +tile.enclosed.fluid_pipe.name=Tuyau d'oxygène hermétique +tile.enclosed.pipe_fluids_cobblestone.name=Tuyau hermétique étanche en pierre +tile.enclosed.pipe_fluids_stone.name=Tuyau hermétique étanche en roche +tile.enclosed.pipe_items_cobblestone.name=Tuyau hermétique de tranport en pierre +tile.enclosed.pipe_items_stone.name=Tuyau hermétique de tranport en roche +tile.enclosed.pipe_power_gold.name=Tuyau hermétique conducteur en or +tile.enclosed.pipe_power_stone.name=Tuyau hermétique conducteur en roche +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Météore tombé +tile.fuel.name=Carburant +tile.fuel_block.name=Essence +tile.fuel_loader.description=Après avoir été connecté à la rampe de lancement, le chargeur de carburant autorisera le carburant à passer dans les fusées ou les autre véhicules connectés. +tile.fuel_loader.name=Chargeur de carburant +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Torche de pierre lumineuse +tile.landing_pad.buggy_fueler.name=Sol de ravitaillement de boghei +tile.landing_pad.cargo_pad.name=Sol chargeur de fusée +tile.landing_pad.description=La rampe de lancement autorisera le placement de fusées si elle est configuré en carré de 3x3. Chargeur de carburant, chargeur de cargo et controleurs de lancement peuvent lui être attaché. +tile.landing_pad.landing_pad.name=Rampe de lancement de fusée +tile.landing_pad_full.name=Sol de fusée de lancement +tile.machine.0.name=Générateur à charbon +tile.machine.1.name=Module de stockage d'énergie +tile.machine.2.name=Four électrique +tile.machine.3.name=Compresseur +tile.machine.7.name=Four à arcs éléctrique +tile.machine.8.name=Groupement de stockage énergétique +tile.machine2.4.name=compresseur électrique +tile.machine2.5.name=Constructeur de circuit +tile.machine2.6.name=Module de stockage d'oxygène +tile.moon_stairs_brick.name=Escaliers en briques de donjon lunaire +tile.moon_stairs_stone.name=Escaliers en roche lunaire +tile.ore_copper.name=Minerai de cuivre +tile.ore_tin.name=Minerai d'étain +tile.oxygen_compressor.0.name=Compresseur d'oxygène +tile.oxygen_compressor.1.name=Décompresseur d'oxygène +tile.oxygen_compressor.description=Le compresseur d'oxygène chargera l'oxygène du stockage interne dans un réservoir d'oxygène. +tile.oxygen_decompressor.description=Le décompresseur d'oxygène déchargera l'oxygène dans le stockage interne d'un réservoir d'oxygène. +tile.oxygen_detector.description=Le détecteur d'oxygène émettra un signal redstone quand il sera entouré d'oxygène. +tile.oxygen_detector.name=Détecteur d'oxygène +tile.oxygen_pipe.description=Le tuyau d'oxygène transfèrera l'oxygene du réservoir à gaz interne d'une machine vers une autre. +tile.oxygen_pipe.name=Tuyau d'oxygène +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Coffre parachuté +tile.refinery.description=La rafinerie prendra en entrée du pétrole et de l'énergie et en sortie du carburant utilisé par les fusée et les véhicules. +tile.refinery.name=Raffinerie +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=Table de travail de rocket +tile.sapling2.birch.name=Jeune pousse de bouleau +tile.sapling2.jungle.name=Jeune pousse d'acajou +tile.sapling2.oak.name=Jeune pousse de chêne +tile.sapling2.spruce.name=Jeune pousse d'épicéa +tile.sealer.description=Le scellant d'oxygène vérifiera le confinement de l'espace. Si un est trouvé, la zone sera rempli d'air respirable. +tile.sealer.name=Scellant d'oxygène +tile.slab_gc_half.moon_bricks_slab.name=Dalle en briques de donjon lunaire +tile.slab_gc_half.moon_slab.name=Dalle en roche lunaire +tile.slab_gc_half.tin_slab_1.name=Dalle décorée à l'étain +tile.slab_gc_half.tin_slab_2.name=Dalle décorée à l'étain +tile.solar.advanced_solar.name=Panneau solaire avancé +tile.solar.basic_solar.name=Panneau solaire de base +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Bloc d'arrivée de station spatiale +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Petits réacteurs +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Unité de télémétrie +tile.tin_stairs_1.name=Escaliers décorés à l'étain +tile.tin_stairs_2.name=Escaliers décorés à l'étain +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Coffre au trésor +tile.unlit_torch.name=Torche +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Torche +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Ecran d'affichage +tile.wall_gc.moon.name=Mur en roche lunaire +tile.wall_gc.moon_bricks.name=Mur en briques de donjon lunaire +tile.wall_gc.tin.name=Mur décoré à l'étain diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hr_hr.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hr_hr.lang new file mode 100644 index 00000000..a94bb8cd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hr_hr.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=Broj Astro Rudara za igrača %s je %s +commands.dimensionteleport=%s je poslan u Atmosferu%s +commands.dimensiontp.too_many=Previše naredbenih argumenata! Upotreba: %s +commands.gcenergyunits.invalid_units=Nepoznate jedinice /GCEnergyUnits komanda. Koristi: %s +commands.gcenergyunits.no_units=Jedinice treba navesti! Upotreba: %s +commands.joinrace.no_team=Treba navesti tim! Upotreba: %s +commands.ssinvite.not_found=Ne mogu pronaći svemirsku postaju za svoje korisničko ime, morate putovati prije! +commands.ssinvite.wrong_usage=Nije dovoljno naredbenih argumenata! upotreba: %s +commands.ssnewowner.wrong_usage=Nemogu prepoznati ime svemirske postaje ID# - postoji li? Upotreba: %s +commands.ssuninvite.no_player=Ne mogu pronaći igrača s korisničkim imenom %s na popisu postaja! +container.cargoloader.name=Utovarivač Tereta +container.cargounloader.name=Istovarivač Tereta +container.fuelloader.name=Utovarivač Goriva +container.lander.name=Lander +container.oxygencollector.name=Kolektor Kisika +container.oxygencompressor.name=Kompresor Kisika +container.oxygendecompressor.name=Dekompresor Kisika +container.oxygendistributor.name=Distributer Kisika +container.oxygensealer.name=Raspoređivač Kisika +container.parachest.name=Pado-Škrinja +container.refinery.name=Rafinerija +container.solaradvanced.name=Napredni Solarni Panel +container.solarbasic.name=Solarni Panel +container.spaceship.name=Rang 1 Raketa +container.treasurechest.name=Škrinja sa Blagom +death.attack.oxygen_suffocation=%1$s je nestao bez kisika! +death.attack.spaceship_crash=%1$s's raketa se srušila. Ops. +death.attack.thermal=%1$s je zaboravio termalnu zaštitu! +dimension.moon.name=Mjesec +dimension.overworld.name=Minecraftia +dimension.sun.name=Sunce +entity.alien_villager.name=Vanzemaljac +entity.buggy.name=Rover +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Evoulirani Kriper +entity.evolved_skeleton.name=Evoulirani Kostur +entity.evolved_skeleton_boss.name=Evoulirani Kralj Kostura +entity.evolved_spider.name=Evoulirani Pauk +entity.evolved_zombie.name=Evoulirani Zombi +entity.flag.name=Zastava +entity.gcflag.name=Zastava +entity.gravity_arrow.name=Strijela +entity.lander.name=Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Chunk +entity.oxygen_bubble.name=Zračni Balon +entity.para_chest.name=PadoŠkrinja +entity.rocket_t1.name=Raketa Ranga 1 +galaxy.milky_way=Mliječni Put +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Ostale Mod Rude generirati na planetima +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Jezgra Opcije +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Slot za bateriju, postavi ovdje +gui.battery_slot.desc.1=ili koristi spojenu struju +gui.bed_fail.message=Oh ne, što ako nestane kisika kada zaspim? Trebati ću kriogensku komoru da spavam u svemiru! +gui.buggy.accel.name=Ubrzanje +gui.buggy.decel.name=Usporavanje +gui.buggy.inv.name=Inventar / Gorivo +gui.buggy.storage_space=Mjesto +gui.buggy.turn.name=Skreni lijevo-desno +gui.button.back.name=Nazad +gui.button.disable.name=Isključi +gui.button.disableseal.name=Isključi dijeljenje kisika +gui.button.enable.name=Uključi +gui.button.enableseal.name=Uključi dijeljenje kisika +gui.button.hide_dest.name=Skrij +gui.button.loadfuel.name=Puni Gorivo +gui.button.loaditems.name=Stavi Stvari +gui.button.next.name=Naprijed +gui.button.refine.name=Rafiniraj +gui.button.stoploading.name=Zaustavi +gui.button.stoprefine.name=Prestani Rafinirati +gui.button.stopunloading.name=Zaustavi +gui.button.unhide_dest.name=Otkrij +gui.button.unloaditems.name=Utovari +gui.button.unlockschematic.name=Otključaj Šemu +gui.checkbox.horizontal.name=Horizontalni Način +gui.checkbox.invert.name=Izokreni +gui.checkbox.player_name.name=Ime igrača je +gui.checkbox.player_within.name=Igrač je unutar +gui.checkbox.redstone_signal.name=Signal crvenog kamena +gui.chest.warning.wrongkey=Trebaš rang %s tamničkog ključa za ovu škrinju! +gui.choose_planet.desc.moon=Pogodan za život#Nema Kisika#Gravitacija: 18% +gui.choose_planet.desc.overworld=Puno Života#Pogodno za život#Gravitacija: 100% +gui.chooseplanet.alreadycreated1.name=Svemirska postaja već je +gui.chooseplanet.alreadycreated2.name=stvorena! +gui.chooseplanet.cannotcreate1.name=Nemožeš stvoriti svemirsku +gui.chooseplanet.cannotcreate2.name=postaju ovdje! +gui.creative_only.desc=Samo kreativnost +gui.display.nolink=Nema spoja +gui.docking_rocket.current_vel.name=Trenutna brzina +gui.docking_rocket.distance_from.name=Daljina od mete +gui.docking_rocket.target_vel.name=Ciljna brzina +gui.docking_rocket.warning.name.0=Pritisni %s za Usporiti +gui.docking_rocket.warning.name.1=Pritisni %s za Ubrzanje +gui.dropbox.player_distance.name.0=1 Metar +gui.dropbox.player_distance.name.1=2 Metara +gui.dropbox.player_distance.name.2=5 Metara +gui.dropbox.player_distance.name.3=10 Metara +gui.electric_compressor.desc.0=Napredak +gui.energy_storage.desc.0=Pohrana Energije +gui.energy_storage.desc.1=Energija +gui.flag.already_placed=Zastava je već postavljena! +gui.frequency_module.desc.0=Čitanje jako tihih zvukova +gui.frequency_module.desc.1=valova i dalekih signala +gui.frequencymodule.warning0=Trebam +gui.frequencymodule.warning1=Ako želim čuti dobro ovdje. +gui.fuel_output.desc.0=Postavi praznu tekučinu kanistra u +gui.fuel_output.desc.1=ovaj slot da ih napuniš iz +gui.fuel_output.desc.2=spremnika goriva +gui.fuel_tank.desc.0=Spremnik Goriva. Treba +gui.fuel_tank.desc.1=Utovarivač goriva za punjenje +gui.fuel_tank.desc.2=Spremnik se može napuniti +gui.fuel_tank.desc.3=sa kanistrima goriva +gui.fuel_tank.desc.4=Spremnik Goriva +gui.infinite_item.desc=Beskonačno +gui.lander.velocity=Slijetanje +gui.lander.velocityu=m/s +gui.lander.warning2=Drži " +gui.lander.warning3=" da usporiš! +gui.max_output.desc=Maksimalni izlaz +gui.message.addnewsch.name=Dodaj novu shemu +gui.message.apply.name=Primijeni +gui.message.assign_name.name=Dodjela imena +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Nazad +gui.message.breed.name=Množi +gui.message.bubble_visible.name=Vidljivost balona +gui.message.can_create_space_station.name=Možeš napraviti Svemirsku Postaju! +gui.message.cancel.name=Odbij +gui.message.cannot_create_space_station.name=Svemirska postaja se ne može stvoriti. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Klikni opet za Zumiranje (Pogledaj Mjesece i Satelite) +gui.message.click_again.1.name=Klikni opet za Zumiranje (Pogledaj Mjesec) +gui.message.click_again.2.name=Klikni opet za Zumiranje (Pogledaj Satelit) +gui.message.click_again.3.name=Klikni opet za Zumiranje +gui.message.clicklink=Klinki za GalactiCraft Wikipediju +gui.message.create_ss.name=Stvori +gui.message.daynightcycle.name=Period dana-noći +gui.message.energy=Energija +gui.message.environment.name=Pojačanje okoliša +gui.message.exit.name=Izlaz +gui.message.fuel.name=Gorivo +gui.message.full.name=puno +gui.message.generating.name=Generira +gui.message.grow.name=Rasti +gui.message.heal.name=Izliječi +gui.message.help1=Za GalactiCraft pomoć +gui.message.help1a=Da vidiš poruku opet bilo koji put, upiši +gui.message.help2=Za rukovanje svemirskim programom +gui.message.help3=Za pomoć sa uljem +gui.message.in.name=U +gui.message.launch.name=Lansiraj +gui.message.max_energy=Maksimalna Energija +gui.message.meansurfacetemp.name=Temperatura Tla +gui.message.moon.atmosphere.0.name=Nema +gui.message.moon.daynightcycle.0.name=29.5 Zemljinih dana +gui.message.moon.meansurfacetemp.0.name=(Svijetla strana) 253C +gui.message.moon.meansurfacetemp.1.name=(Tamna strana) -153C +gui.message.moon.surfacecomposition.0.name=Bazaltnih stijena i +gui.message.moon.surfacecomposition.1.name=Tragova sira +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% od Zemlje) +gui.message.of.name=od +gui.message.oil.name=Ulje +gui.message.out.name=Van +gui.message.overworld.atmosphere.0.name=Dušik i Kisik +gui.message.overworld.atmosphere.1.name=Prihvača Život +gui.message.overworld.daynightcycle.0.name=1 Zemljin Dana +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Kamen, trava, i +gui.message.overworld.surfacecomposition.1.name=šljunak +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% od Zemlje) +gui.message.prelaunch=Popis prije-pokretanja +gui.message.rename.name=Preimenuj +gui.message.select_ss.name=Odaberi Svemirsku stanicu +gui.message.ss_owner.name=Vlasnik: +gui.message.status.name=Status +gui.message.strengthen.name=Ojačaj +gui.message.surfacecomposition.name=Kompozicija tla +gui.message.surfacegravity.name=Gravitacija tla +gui.message.thermal_status.name=Termalna kontrola +gui.message.tier.name=Rang %d +gui.message.unnamed.name=Neimenovan +gui.missing_core.name.0=MicdoodleCore nije pronađen u mods folderu +gui.missing_core.name.1=Galacticraft nije učitan +gui.missing_core.name.2=Ugasi Minecraft i instaliraj MicdoodleCore +gui.missing_core.name.3=Klikni ovdje da otvoriš download stranicu +gui.new_schematic.slot.desc.0=Nova shema. Možeš +gui.new_schematic.slot.desc.1=pronači nove sheme +gui.new_schematic.slot.desc.2=da otključaš tamnice +gui.new_schematic.slot.desc.3=na planetima i mjesecima +gui.oil_tank.desc.0=Spremnik nafte, može se napuniti +gui.oil_tank.desc.1=sa spremnicima nafte +gui.oxygen.warning=Postavljane kisika pogrešno! +gui.oxygen_compressor.slot.desc.0=Utor za spremnik, spremnik staviti +gui.oxygen_compressor.slot.desc.1=ovdje da se napuni sa kisikom. +gui.oxygen_decompressor.slot.desc.0=Utor za spremnik, postavi spremnik sa kisikom +gui.oxygen_decompressor.slot.desc.1=ovdje da se uzme sav kisik iz njega. +gui.oxygen_slot.desc.0=Utor za kisik, mjesto za kanistar kisika ili spremnik +gui.oxygen_slot.desc.1=Ovdje, ili koristite spojenu opskrbu kisikom +gui.oxygen_storage.desc.0=Pohrana Kisika +gui.oxygen_storage.desc.1=Kisik +gui.oxygen_use.desc=Kisik se koristi +gui.per_second=/s +gui.player.bpm=Puls +gui.player.food=Hrana +gui.player.health=Zdravlje +gui.player.ouch=jao!!!! +gui.receiver.cannot_attach=Nemožeš staviti stroj ovdje! +gui.requires_controller.desc=Trebaš Kontroler Lansiranja +gui.rocket.countdown=Odbrojavanje +gui.rocket.height=Visina +gui.rocket.inv.name=Inventar / Gorivo +gui.rocket.launch.name=Lansiranje +gui.rocket.launched=Lansirano +gui.rocket.on_launchpad=Na lansirnoj rampi +gui.rocket.speed=Brzina +gui.rocket.turn.name=Skreni lijevo-desno +gui.rocket.updown.name=Idi gore-dolje +gui.rocket.warning.nofuel=Trebaš još goriva! +gui.rocket.warning.nogyroscope=Tajanstvene snage su u igri, a žiroskopi se vrte divlje! +gui.rocket.warning.noparachute=Nemaš padobran! Ako stisnem lansiranje opet, nema povratka! +gui.rocket_type.0=Prostor: 18 +gui.rocket_type.1=Prostor: 36 +gui.rocket_type.2=Prostor: 56 +gui.rocket_type.3=Sa gorivom +gui.seconds=s +gui.sensor.advanced=Napredni Način +gui.sensor.advancedoff=Ugasi +gui.sensor.advancedon=Upali +gui.show_bubble.desc.0=Pokaži Balon +gui.skeleton_boss.message=Boss se opet stvorio, nemoj izaći iz sobe inače će nestati! Opet uđi da ga stvoriš. +gui.space_race.chat.add_success=%s je ušao u svemirsku utrku! +gui.space_race.chat.already_part=Već si u toj svemirskoj utrci! +gui.space_race.chat.invite_received=Dobio si poruku da uđeš u svemirsku utrku od %s. +gui.space_race.chat.not_found=Nemogu pronaći igrača s tim imenom: %s +gui.space_race.chat.remove_success=%s je obrisan iz svemirske utrke. +gui.space_race.chat.to_join=Da uđeš %s upiši %s +gui.space_race.coming_soon=Uskoro dolazi +gui.space_race.create.add_players.name=Dodaj igrače +gui.space_race.create.back.name=Nazad +gui.space_race.create.brush_radius.name=Promjer kista +gui.space_race.create.brush_size.name=Veličina kista +gui.space_race.create.change_color.name.0=Promjeni +gui.space_race.create.change_color.name.1=Boju +gui.space_race.create.change_color.name.2=Tima +gui.space_race.create.close.name=Zatvori +gui.space_race.create.customize.name=Uredi Zastavu +gui.space_race.create.eraser_radius.name=Radius Gumice +gui.space_race.create.eraser_size.name=Veličina Gumice +gui.space_race.create.global_stats.name=Pogledaj Globalnu Statistiku +gui.space_race.create.invite_player.name=Pozovi Igrača +gui.space_race.create.player_radius.name=Igrač mora biti u dometu! (25 blokova) +gui.space_race.create.rem_players.name=Obriši Igrače +gui.space_race.create.remove.name=Obriši +gui.space_race.create.remove_player.name=Obrisi Igrača +gui.space_race.create.rename.name=Preimenuj Tim +gui.space_race.create.send_invite.name=Pošalji Zahtjev +gui.space_race.create.server_stats.name=Pogledaj Status Servera +gui.space_race.create.title.name=Opcije Svemirske Utrke +gui.space_race.create.title.name.0=Menađer Svemirske +gui.space_race.create.title.name.1=Utrke +gui.space_race.join.member_count.name=%d igrača +gui.space_race.join.name=Pridruži se +gui.space_race.join.owner.name=Vlasnik +gui.space_race.join.title.name=Uđi u Svemirsku stanicu +gui.space_race.unnamed=Neimenovan Tim +gui.spacestation.added=Dodan si u %s Svemirsku stanicu! +gui.spacestation.addsuccess=Uspješno dodao %s na listu! +gui.spacestation.allow_all_false=Tvoje svemirske stanice više nisu otvorene za sve igrače! +gui.spacestation.allow_all_true=Tvoje svemirske stanice sada su otvorene za sve igrače(Upiši /ssinvite -all da isključiš.) +gui.spacestation.changesuccess=Vlasnik svemirske stanice promjenjen iz %s na novog vlasnika %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Uspješno obrisan %s iz liste! +gui.spacestation.to_allow_entry=Da drugi igrač uđe u svemirsku stanicu! +gui.spacestation.type_command=Upiši +gui.status.active.name=Aktivirano +gui.status.air_lock_closed.name=Zračna komora zatvorena +gui.status.air_lock_open.name=Zračna komora otvorena +gui.status.blockedfully.name=Sunce nije vidljivo +gui.status.blockedpartial.name=Sunce djelomično vidljivo +gui.status.check_pending.name=Provjeravam tijek +gui.status.check_starting.name=Pregledavam pokretač +gui.status.checking_seal.name=Provjeravam kisik +gui.status.collecting.name=Skupljam +gui.status.collectingenergy.name=Skupljam energiju +gui.status.compressing.name=Kompresiranje +gui.status.disabled.name=Isključeno +gui.status.fulltank.name=Spremnik kisika pun +gui.status.generating.name=Generiram +gui.status.hull_heat.name=Pregrijavanje +gui.status.idle.name=Ništa +gui.status.missingleaves.name=Nema dovoljno lišča +gui.status.missingoxygen.name=Nema dovoljno kisika +gui.status.missingpower.name=Nema dovoljno energije +gui.status.missingtank.name=Spremnik kisika nije pronađen +gui.status.nofuel.name=Nema goriva za utovar! +gui.status.noinvtarget.name=Meta nema inventar! +gui.status.noitems.name=Nema stvari za utovar! +gui.status.nooil.name=Nema nafte +gui.status.not_available.name=N/A +gui.status.not_generating.name=Ne generiram +gui.status.notargetload.name=Nema mete za utovar! +gui.status.notargetunload.name=Nema mete za istovar! +gui.status.off.name=Ugašeno +gui.status.on.name=Upaljeno +gui.status.raining.name=Kiši +gui.status.ready.name=Spreman +gui.status.refining.name=Rafiniram +gui.status.running.name=U tijeku +gui.status.sealed.name=Prozračeno +gui.status.sealerblocked.name=Blokiran vrh! +gui.status.sun_visible.name=Sunce vidljivo +gui.status.tank_empty.name=Spremnik kisika prazan +gui.status.targetempty.name=Vozilo je prazno! +gui.status.targetfull.name=Vozilo je puno! +gui.status.unknown.name=Nepoznato +gui.status.unsealed.name=Mjesto je previše veliko +gui.tank.oxygen_remaining=Kisika ostalo +gui.telemetry_fail.message=Prvo ću morati pratiti subjekt s tim frekvencijskim modulom! (Ili ga probaj obuči!) +gui.telemetry_fail_no_frequency_module.message=Vjerojatno ću trebati frekvencijski modul u ruci da mogu iskoristiti ovo! +gui.telemetry_fail_wearing_it.message=Ja ću morati da skinem frekvencijski modul, ako ga želim povezati s ovom telemetrijskom jedinicom! +gui.telemetry_succeed.message=Telemetrijska veza stvorena. +gui.thermal_slot.desc.0=Termalni Thermal utor, postavi 'Ambient +gui.thermal_slot.desc.1=Termalni kontroler' ovdje (neobavezno) +gui.thermal_slot.desc.2=Koristi više energije! +gui.title.air_lock.name=%s's Zračna Komora +gui.tracking.message=Praćenje aktivirano. Sada ću morati kliknuti na ovu telemetrijsku jedinici da završim vezu. +gui.warning=OPASNOST! +gui.warning.invalid_thermal=Nepoznata Termalna Zaštita! +gui.warning.noroom=Nema dovoljno prostora! +item.air_fan.name=Ventilator za kisik +item.air_vent.name=Otvor za kisik +item.basic_item.ambient_thermal_controller.name=Ambient Termalni Kontroler +item.basic_item.canned_food.name=Limenka sa Hranom +item.basic_item.compressed_aluminum.name=Prerađeni Aluminij +item.basic_item.compressed_bronze.name=Prerađena Bronca +item.basic_item.compressed_copper.name=Prerađeni Bakar +item.basic_item.compressed_iron.name=Prerađeno Zeljezo +item.basic_item.compressed_steel.name=Prerađeni Čelik +item.basic_item.compressed_tin.name=Prerađeni Lim +item.basic_item.dehydrated_apple.name=Dehidrirana Jabuka +item.basic_item.dehydrated_carrot.name=Dehidrirana Mrkva +item.basic_item.dehydrated_melon.name=Dehidrirana Lubenica +item.basic_item.dehydrated_potato.name=Dehidrirani Krumpiri +item.basic_item.frequency_module.name=Frekvencijski Modul +item.basic_item.ingot_aluminum.name=Poluga Aluminija +item.basic_item.ingot_bronze.name=Poluga Bronce +item.basic_item.ingot_copper.name=Poluga Bakra +item.basic_item.ingot_steel.name=Poluga Čelika +item.basic_item.ingot_tin.name=Poluga Lima +item.basic_item.raw_silicon.name=Korišteni Silicij +item.basic_item.solar_module_0.name=Jedan Solarni Modul +item.basic_item.solar_module_1.name=Cijeli Solarni Modul +item.basic_item.wafer_advanced.name=Napredna Ploča +item.basic_item.wafer_basic.name=Osnovna Ploča +item.basic_item.wafer_solar.name=Plava Solarna Ploča +item.battery.name=Baterija +item.bucket_fuel.name=Kanta s Gorivom +item.bucket_oil.name=Kanta s Uljem +item.buggy.name=Rover +item.buggymat.seat.name=Roverovo Sjedalo +item.buggymat.storage.name=Roverova Kutija za Pohranu +item.buggymat.wheel.name=Roverov Kotač +item.canister.copper.name=Broncin Spremnik +item.canister.tin.name=Limeni Spremnik +item.canvas.name=Platno +item.cheese_block.name=Sir +item.cheese_curd.name=Komad Sira +item.compressed_meteoric_iron.name=Kompresirano Meteorsko Željezo +item.empty_liquid_canister.name=Prazan Spremnik +item.engine.tier1booster.name=Ubrzivač Ranga 1 +item.engine.tier1engine.name=Raketski Motor Ranga 1 +item.flag.name=Zastava +item.fuel.name=Raketno Gorivo +item.fuel_canister.name=Pun Spremnik Ulja +item.fuel_canister_partial.name=Djelomično Pun Spremnik Goriva +item.heavy_plating.name=Snažna Ploča +item.hot_description.name=Vruč +item.infinite_battery.name=Beskonačna Baterija +item.infinite_oxygen.name=Beskonačni Kisik +item.key.t1.name=Tamnički Ključ Ranga 1 +item.meteor_chunk.name=Meteorski Komad +item.meteor_chunk_hot.name=Meteorski Komad +item.meteoric_iron_ingot.name=Meteorsko Željezo +item.meteoric_iron_raw.name=Ostečeno Meteorsko Željezo +item.nose_cone.name=Nos Rakete +item.oil_canister.name=Pun Karnister Nafte +item.oil_canister_partial.name=Djelomično Pun Spremnik Nafte +item.oil_extractor.name=Prijenosni Sakupljač Nafte +item.oxygen_concentrator.name=Koncetrator Kisika +item.oxygen_gear.name=Reduktor Kisika +item.oxygen_mask.name=Astronautska Maska +item.oxygen_tank_heavy_empty.name=Veliki Spremnik Kisika +item.oxygen_tank_heavy_full.name=Pun Veliki Spremnik Kisika +item.oxygen_tank_light_empty.name=Maleni Spremnik Kisika +item.oxygen_tank_light_full.name=Pun Maleni Spremnik Kisika +item.oxygen_tank_med_empty.name=Srednji Spremnik Kisika +item.oxygen_tank_med_full.name=Pun Srednji Spremnik Kisika +item.parachute_black.name=Crni Padobran +item.parachute_blue.name=Svijetlo Plavi Padobran +item.parachute_brown.name=Smeđi Padobran +item.parachute_darkblue.name=Plavi Padobran +item.parachute_darkgray.name=Sivi Padobran +item.parachute_darkgreen.name=Zeleni Padobran +item.parachute_gray.name=Svijetlo Sivi Padobran +item.parachute_lime.name=Zelenkasti Padobran +item.parachute_magenta.name=Purpurno Crveni Padobran +item.parachute_orange.name=Narančasti Padobran +item.parachute_pink.name=Ružičasti Padobran +item.parachute_plain.name=Padobran +item.parachute_purple.name=Ljubičasti Padobran +item.parachute_red.name=Crveni Padobran +item.parachute_teal.name=Zelenkasto-Plavi Padobran +item.parachute_yellow.name=Žuti Padobran +item.rocket_fins.name=Rep Rakete +item.rocket_t1.name=Raketa Ranga 1 +item.schematic.name=NASA-ina Shema +item.sensor_glasses.name=Naočale sa Senzorom +item.sensor_lens.name=Senzori +item.standard_wrench.name=Standardni Ključ +item.steel_axe.name=Sjekira od Snažne Ploče +item.steel_boots.name=Čizme od Snažne Ploče +item.steel_chestplate.name=Prsni Oklop od Snažne Ploče +item.steel_helmet.name=Šljem od Snažne Ploče +item.steel_hoe.name=Motika od Snažne Ploče +item.steel_leggings.name=Gamaše od Snažne Ploče +item.steel_pickaxe.name=Kramp od Snažne Ploče +item.steel_pole.name=Čelični Stup +item.steel_shovel.name=Lopata od Snažne Ploče +item.steel_sword.name=Mač od Snažne Ploče +item.tier1.desc=Rang 1 +item_desc.powerdraw.name=Energije potrebno: %s /s +item_desc.shift.name=Pritisni %s za više +item_group.galacticraft_blocks=Galacticraft Blokovi +item_group.galacticraft_items=Galacticraft Stvari +keybind.map.name=Mapa Galaksije +keybind.sensortoggle.name=Ugasi/Upali Senzor Naočale +keybind.spaceshipinv.name=Otvori Raketski Inventar +keybind.vehiclebackward.name=Vozilo Nazad +keybind.vehicledown.name=Vozilo Dolje +keybind.vehicleforward.name=Vozilo Naprijed +keybind.vehicleleft.name=Vozilo Lijevo +keybind.vehicleright.name=Vozilo Desno +keybind.vehicleup.name=Vozilo Gore +moon.moon=Mjesec +newversion.failed.name=Galacticraft update pregled greška! Probaj opet za 15 sekundi +newversion.success.name=Nova verzija Galacticrafta pronađena: +planet.jupiter=Jupiter +planet.mercury=Merkur +planet.neptune=Neptun +planet.overworld=Minecraftia +planet.saturn=Saturn +planet.uranus=Uran +planet.venus=Venera +satellite.spacestation.overworld=Zemljina svemirska stanica +schematic.moonbuggy.name=Mjesečev Rover +schematic.rocket_t1.name=Raketa Ranga 1 +schematic.rocket_t2.name=Raketa Ranga 2 +solarsystem.sol=Solarni Sistem +star.sol=Sunce +tile.air_lock_controller.name=Jedinica Zračne Komore +tile.air_lock_frame.description=Kada napravite okvir zračne komore uništite jedan blok u njemu i stavite jedinicu zračne komore, kada je konfigurirano zračna komora će raditi. +tile.air_lock_frame.name=Zračna Komora +tile.air_lock_seal.name=Jedinica Zračne Komore +tile.aluminum_wire.alu_wire.description=Aluminijska žica se koristi za spajanje izvora energije u stroj koji ju troši. +tile.aluminum_wire.alu_wire.name=Aluminijska Žica +tile.aluminum_wire.alu_wire_heavy.description=Jaka Aluminijska žica se koristi za spajanje izvora energije u stroj koji ju troši. +tile.aluminum_wire.alu_wire_heavy.name=Jaka Aluminijska Žica +tile.arclamp.description=Arc Lampe se koriste za velika mjesta i naprave da se čudovišta ne stvaraju. +tile.arclamp.name=Arc Lampa +tile.basic_block_core.block_aluminum_gc.name=Aluminijski Blok +tile.basic_block_core.block_copper_gc.name=Bakreni Blok +tile.basic_block_core.block_meteoric_iron_gc.name=Solidno Meteorsko Željezo +tile.basic_block_core.block_tin_gc.name=Limeni Blok +tile.basic_block_core.deco_block_0.name=Limeni Dekoracijski Blok +tile.basic_block_core.deco_block_1.name=Limeni Dekoracijski Blok +tile.basic_block_core.ore_aluminum_gc.name=Ruda Aluminija +tile.basic_block_core.ore_copper_gc.name=Ruda Bakra +tile.basic_block_core.ore_silicon.name=Ruda Silicija +tile.basic_block_core.ore_tin_gc.name=Ruda Lima +tile.basic_block_moon.bricks.name=Kamenje +tile.basic_block_moon.cheesestone.name=Ruda Sira +tile.basic_block_moon.coppermoon.name=Ruda Bakra +tile.basic_block_moon.moondirt.name=Mjesečeva Trava +tile.basic_block_moon.moongrass.name=Mjesečeva Površina +tile.basic_block_moon.moonstone.name=Mjesečev Kamen +tile.basic_block_moon.tinmoon.name=Ruda Lima +tile.buggy_pad.description=Rampa za gorivo će omogućiti roveru na rampi da se puni ako se postavi 3x3 i pokraj njega postavite utovarivače goriva. Ne radi sa raketama! +tile.cargo.loader.name=Utovarivač Tereta +tile.cargo.unloader.name=Istovarivač Tereta +tile.cargo_loader.description=Utovarivači stvari mogu staviti u raketu, ali mora biti povezan sa raketnom/roverovom rampom. +tile.cargo_unloader.description=Istovarivači stvari mogu istovariti stvari iz rakete, mora biti povezan sa raketnom/roverovom rampom. +tile.cheese.description=Blokovi sira su se stvaraju na Mjesecu, može se postaviti i jesti. +tile.cheese.name=Blok Sira +tile.circuit_fabricator.description=Kružni fabrikator će obraditi osnovne materijale sa silicijom, a koristi se i za napredne strojeve. +tile.coal_generator.description=Ugljeni generator generira struju tako da uzima ugljen. +tile.collector.description=Kolektor kisika će pospremiti kisika skupljen od lišća u blizini. +tile.collector.name=Kolektor Kisika +tile.compressor.description=Kompresor će kompresirati poluge u prerađenu. +tile.compressor_electric.description=Elektronički kompresor će kompresirati poluge kao normalni kompresor ali po dvije od jednom. +tile.crude_oil.name=Ulje +tile.crude_oil_moving.name=Neobrađeno Ulje +tile.crude_oil_still.name=Neobrađeno Ulje +tile.dishbase.description=Komunikacijska antena može pratiti položaj svemirske postaje i primati obavijesti od svojih udaljenih svemirskih baza. +tile.dishbase.name=Komunikacijska Antena +tile.distributor.description=Stvoriti će balon kisika oko sebe. +tile.distributor.name=Stvarač Zračnog Balona +tile.dummyblock.cryogenic_chamber.name=Kriogenska Komora +tile.dummyblock.launch_pad.name=Lansirna Rampa +tile.dummyblock.nasa_workbench.name=NASA-in Radni Stol +tile.dummyblock.solar.name=Solarni Panel +tile.dummyblock.space_station_base.name=Baza Svemirske Stanice +tile.electric_furnace_tier1.description=Električna peć koristi se kao brža alternativa tradicionalna peć sa ugljenom. +tile.electric_furnace_tier2.description=Arc Električka peć koristi se kao brža alternativa oba dvije elekrične i peći sa ugljenom. +tile.enclosed.aluminum_wire.name=Aluminijska Žica +tile.enclosed.heavy_aluminum_wire.name=Snažnija Aluminijska Žica +tile.enclosed.copper_cable.name=Kabel Bakra +tile.enclosed.description=Djeljivi blokovi se mogu koristiti da baza ne ima otvore. +tile.enclosed.glass_fibre_cable.name=Kabel Staklenog Platna +tile.enclosed.gold_cable.name=Zlatni Kabel +tile.enclosed.hv_cable.name=HV Kabel +tile.enclosed.lv_cable.name=IV Kabel +tile.enclosed.me_cable.name=ME Kabel +tile.enclosed.fluid_pipe.name=Blok Cijevi Kisika +tile.enclosed.pipe_fluids_cobblestone.name=Vodootporna Kamena Cijev +tile.enclosed.pipe_fluids_stone.name=Vodootporna Kamena Cijev +tile.enclosed.pipe_items_cobblestone.name=Kamena Cijev +tile.enclosed.pipe_items_stone.name=Kamena Cijev +tile.enclosed.pipe_power_gold.name=Zlatna Provodna Cijev +tile.enclosed.pipe_power_stone.name=Kamena Provodna Cijev +tile.energy_storage_module_tier1.description=Skladište Energije se koristi za pohranu velike količine energije za kasniju uporabu. +tile.energy_storage_module_tier2.description=Energija za pohranu Ranga 2 se koristi za pohranu velike količine energije za kasniju uporabu. Prima više energije od svog prethodnika. +tile.fallen_meteor.description=Meteori se mogu pronači na mnogim mjesecima ili planetima koji imaju malu ili nikakvu atmosferu, nakon što ga strgate dobit čete Meteorsko Željezo. +tile.fallen_meteor.name=Meteor +tile.fuel.name=Raketsko Gorivo +tile.fuel_block.name=Gorivo +tile.fuel_loader.description=Nakom što je spojen sa rampom, utovarivač goriva će prenijeti gorivo u raketu. +tile.fuel_loader.name=Utovarivač Goriva +tile.glowstone_torch.description=Baklja od Svjetlucave Prašine se koristi isto kao baklja ali na mjestima gdje nema kisika. +tile.glowstone_torch.name=Baklja Svjetljucavog Kamena +tile.landing_pad.buggy_fueler.name=Roverov Punjač +tile.landing_pad.cargo_pad.name=Teretska Lansirna Rampa +tile.landing_pad.description=Lansirna rampa će omogućiti postavljanje raketa, ako je postavljeno u 3x3. +tile.landing_pad.landing_pad.name=Lansirna Rampa +tile.landing_pad_full.name=Raketska Lansirna Rampa +tile.machine.0.name=Ugljenski Generator +tile.machine.1.name=Energetsko Skladište +tile.machine.2.name=Električna Peć +tile.machine.3.name=Kompresor +tile.machine.7.name=Električna Arc Peć +tile.machine.8.name=Energijsko Skladište +tile.machine2.4.name=Električni Kompresor +tile.machine2.5.name=Strujni Krug +tile.machine2.6.name=Zračno Skladište +tile.moon_stairs_brick.name=Mjesečeve Ciglene Stube +tile.moon_stairs_stone.name=Stube Mjesečevog Kamena +tile.ore_copper.name=Ruda Bakra +tile.ore_tin.name=Ruda Lima +tile.oxygen_compressor.0.name=Kompresor Kisika +tile.oxygen_compressor.1.name=Dekompresor Kisika +tile.oxygen_compressor.description=Kompresor kisika će skupiti kisik iz memorije u spremnik kisika. +tile.oxygen_decompressor.description=Dekompresor kisika će izbaciti kisik iz spremnika kisika u memoriju. +tile.oxygen_detector.description=Detektor kisika će emitirati signal crvenog kamena kada je kisik oko njega. +tile.oxygen_detector.name=Detektor Kisika +tile.oxygen_pipe.description=Cijev sa kisikom će prenjeti kisik iz jednog stroja u drugi. +tile.oxygen_pipe.name=Cijev za Kisik +tile.oxygen_storage_module.description=Skladište Kisika se koristi za pohranu velike količine kisika za kasniju uporabu. +tile.parachest.description=PadoŠkrinja pada s vama na neki planet ili svemirku stanicu, u sebi sadrži Raketne Rampe, Inventar, Gorivo i stvari s prošlog lansiranja. +tile.parachest.name=PadoŠkrinja +tile.refinery.description=Rafinerija treba ulje i energiju, a stvara gorivo za rakete i ostala vozila. +tile.refinery.name=Rafinerija +tile.rocket_workbench.description=NASA-in Radni stol se može koristiti za rađenje radnih vozila, ali ako ih želite više morate dobiti shemu iz tamnica. +tile.rocket_workbench.name=NASA-in Radni Stol +tile.sapling2.birch.name=Sjemenka Breze +tile.sapling2.jungle.name=Sjemenka Drveta Džungle +tile.sapling2.oak.name=Sjemenka Hrasta +tile.sapling2.spruce.name=Sjemenka Smreke +tile.sealer.description=Djelitelj kisika će provjeriti da li je prostor zatvoren i dovoljno velik za njega, te ga napuniti sa kisikom. +tile.sealer.name=Djelitelj Kisika +tile.slab_gc_half.moon_bricks_slab.name=Mjesečeva Ciglena Ploča +tile.slab_gc_half.moon_slab.name=Ploča Mjesečevog Kamena +tile.slab_gc_half.tin_slab_1.name=Limene Ploče +tile.slab_gc_half.tin_slab_2.name=Limene Ploče +tile.solar.advanced_solar.name=Napredni Solarni Panel +tile.solar.basic_solar.name=Osnovni Solarni Panel +tile.solar_adv.description=Napredni solarni panel uzima energiju iz sunca i sprema je za daljno korištenje, energiju uzima po cijelom danu zato što se pokreče. +tile.solar_basic.description=Solarni panel uzima energiju iz sunca i sprema je za daljno korištenje, najviše energije uzima u podne zato što se ne pokreče. +tile.space_station_base.name=Glavni Dio Svemirske Stanice +tile.spin_thruster.description=Ubrzivači okretanja se koriste da se svemirske stanice vrte. +tile.spin_thruster.name=Propeler Vrtnje +tile.telemetry.description=To okuplja korisne podatke iz povezanih raketa, igrača i rulja. Najbolji smješteni u blizini na ekran. Koristite frekvencijski modul za uspostavu podatkovne veze. +tile.telemetry.name=Telemetrijska Jedinica +tile.tin_stairs_1.name=Limene Stube +tile.tin_stairs_2.name=Limene Stube +tile.treasure_chest.description=Rang 1 škrinja s blagom će se generirati na mjesečevim tamnicama, mogu se otključati kada ubijete boss-a. +tile.treasure_chest.name=Škrinja sa Blagom +tile.unlit_torch.name=Baklja +tile.unlit_torch_stone.name=Kamena Baklja +tile.unlit_torch_lit.name=Baklja +tile.unlit_torch_stone_lit.name=Kamena Baklja +tile.view_screen.description=Zasloni dodaju konačni dodir u bazi. Desnom tipkom miša mijenja prikazane informacije. +tile.view_screen.name=Zaslon +tile.wall_gc.moon.name=Zid Mjesečevog Kamena +tile.wall_gc.moon_bricks.name=Mjesečev Cigleni Zid +tile.wall_gc.tin.name=Limeni Zid diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hu_hu.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hu_hu.lang new file mode 100644 index 00000000..b6e022a3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/hu_hu.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s a %s légkörébe lett küldve. +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name=Teher-Berakodó +container.cargounloader.name=Teher-Kirakodó +container.fuelloader.name=Üzemanyag-Töltő +container.lander.name=Leszállóegység +container.oxygencollector.name=Légkiválasztó +container.oxygencompressor.name=Légsűrítő +container.oxygendecompressor.name=Légritkító +container.oxygendistributor.name=Légbuborék-Fújó +container.oxygensealer.name=Légnyomás-Fenntartó +container.parachest.name=Utánpótlásszállító-Láda +container.refinery.name=Finomító +container.solaradvanced.name=Fejlett Naperőmű +container.solarbasic.name=Kezdetleges Naperőmű +container.spaceship.name=1-Es Szintű rakéta +container.treasurechest.name=Kincsesláda +death.attack.oxygen_suffocation=%1$s -t széttépte a vákuum. Hoppá. +death.attack.spaceship_crash=%1$s rakétája a földbe vágódott. +death.attack.thermal=%1$s forgot thermal protection ##NEEDS TRANSLATE## +dimension.moon.name=Hold +dimension.overworld.name=Föld +dimension.sun.name=Nap +entity.alien_villager.name=Idegen Falusi +entity.buggy.name=Rover +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Fejlett Creeper +entity.evolved_skeleton.name=Fejlett Csontváz +entity.evolved_skeleton_boss.name=Fejlett Csontváz-Főgonosz +entity.evolved_spider.name=Fejlett Pók +entity.evolved_zombie.name=Fejlett Zombi +entity.flag.name=Zászló +entity.gcflag.name=Zászló +entity.gravity_arrow.name=Nyílvessző +entity.lander.name=Leszállóegység +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteordarab +entity.oxygen_bubble.name=Légbuborék +entity.para_chest.name=Utánpótlás-Szállító Láda +entity.rocket_t1.name=1-Es Szintű Rakéta +galaxy.milky_way=Tejútrendszer +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Akkumlátor helye, tegyen ide akkumlátort, +gui.battery_slot.desc.1=vagy kössön be vezetéken áramot. +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Gyorsítás +gui.buggy.decel.name=Lassítás +gui.buggy.inv.name=Eszköztár és üzemanyagszint +gui.buggy.storage_space=Teherkapacitás +gui.buggy.turn.name=Jobbra-Balra Fordulás +gui.button.back.name=Vissza +gui.button.disable.name=Leállítás +gui.button.disableseal.name=Légnyomásfenntartás Leállítása +gui.button.enable.name=Indítás +gui.button.enableseal.name=Légnyomásfenntartás Indítása +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name=Üzemanyag Betöltése +gui.button.loaditems.name=Eszközök Berakodása +gui.button.next.name=Következő +gui.button.refine.name=Finomítás +gui.button.stoploading.name=Berakodás Megszakítása +gui.button.stoprefine.name=Finomítás Megszakítása +gui.button.stopunloading.name=KIrakodás Megszakítása +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name=Kirakodás Megkezdése +gui.button.unlockschematic.name=Tervrajz Feloldása +gui.checkbox.horizontal.name=Vízszintes helyzet +gui.checkbox.invert.name=Fordított mód +gui.checkbox.player_name.name=Célpont játékos neve +gui.checkbox.player_within.name=Nyitás játékos közelségére +gui.checkbox.redstone_signal.name=Nyitás Vöröskő-jelre +gui.chest.warning.wrongkey=Szügsége lesz egy %s Es Szintű Dungeon-Kulcsra a láda kinyitásához. +gui.choose_planet.desc.moon=Lakható#Nincs légkör#Gravitáció: 18% +gui.choose_planet.desc.overworld=Tele Van Élettel#Lakható#Gravitáció: 100% +gui.chooseplanet.alreadycreated1.name=Egy Űrállomás Már +gui.chooseplanet.alreadycreated2.name=Létre Van Hozva Itt! +gui.chooseplanet.cannotcreate1.name=Nem Lehet Űrállomást +gui.chooseplanet.cannotcreate2.name=Létrehozni Itt. +gui.creative_only.desc=Csak Kreatív Módban! +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Jelenlegi Sebesség +gui.docking_rocket.distance_from.name=Távolság A Célponttól +gui.docking_rocket.target_vel.name=Célpont Sebessége +gui.docking_rocket.warning.name.0=Nyomja Meg a %s -t a lassításhoz +gui.docking_rocket.warning.name.1=Nyomja Meg a %s -t a gyorsításhoz +gui.dropbox.player_distance.name.0=1 Méter +gui.dropbox.player_distance.name.1=2 Méter +gui.dropbox.player_distance.name.2=5 Méter +gui.dropbox.player_distance.name.3=10 Méter +gui.electric_compressor.desc.0=Üzemel +gui.energy_storage.desc.0=Energia-Raktár +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Egy zászló már le van rakva itt. +gui.frequency_module.desc.0=Képes észlelni halk hanghullámokat +gui.frequency_module.desc.1=és távoli jeleket +gui.frequencymodule.warning0=Szügsége lesz egy +gui.frequencymodule.warning1=-re hogy megfelelően halljon itt. +gui.fuel_output.desc.0=Tegyen üres üzemanyagkannákat +gui.fuel_output.desc.1=erre a helyre hogy feltöltse +gui.fuel_output.desc.2=őket az üzemanyagtartályból. +gui.fuel_tank.desc.0=Üzemanyagtartály. Üzemanyag-Töltő +gui.fuel_tank.desc.1=szügséges a feltöltéséhez. +gui.fuel_tank.desc.2=Üzemanyagtartály, amit +gui.fuel_tank.desc.3=Üzemanyagkannákkal lehet feltölteni. +gui.fuel_tank.desc.4=Üzemanyagtartály +gui.infinite_item.desc=Csak Kreatív Módban! +gui.lander.velocity=Érkezési sebesség: +gui.lander.velocityu=m/s +gui.lander.warning2=Nyomja le " +gui.lander.warning3=" -t a lelassuláshoz. +gui.max_output.desc=Max Output ##NEEDS TRANSLATE## +gui.message.addnewsch.name=Új tervrajz +gui.message.apply.name=Apply ##NEEDS TRANSLATE## +gui.message.assign_name.name=Assign Name ##NEEDS TRANSLATE## +gui.message.atmosphere.name=Légkör +gui.message.back.name=Vissza +gui.message.breed.name=Breed ##NEEDS TRANSLATE## +gui.message.bubble_visible.name=A Buborék Láthatósága +gui.message.can_create_space_station.name=Itt lehet űrállomást létrehozni. +gui.message.cancel.name=Cancel ##NEEDS TRANSLATE## +gui.message.cannot_create_space_station.name=Itt nem lehet űrállomást létrehozni. +gui.message.catalog.name=Katalógus +gui.message.click_again.0.name=Kattintson még egyszer a nagyításhoz (holdak és műholdak megtekintése) +gui.message.click_again.1.name=Kattintson még egyszer a nagyításhoz (holdak megtekintése) +gui.message.click_again.2.name=Kattintson még egyszer a nagyításhoz (műholdak megtekintése) +gui.message.click_again.3.name=Kattintson még egyszer a nagyításhoz +gui.message.clicklink=Click for Galacticraft Wiki ##NEEDS TRANSLATE## +gui.message.create_ss.name=Létrehozás +gui.message.daynightcycle.name=Napkörforgás +gui.message.energy=Energia +gui.message.environment.name=Környezet hatása: +gui.message.exit.name=Kilépés +gui.message.fuel.name=Üzemanyag +gui.message.full.name=megtelve +gui.message.generating.name=Áramot Fejleszt +gui.message.grow.name=Grow ##NEEDS TRANSLATE## +gui.message.heal.name=Heal ##NEEDS TRANSLATE## +gui.message.help1=For Galacticraft help ##NEEDS TRANSLATE## +gui.message.help1a=To see this message again at any time, type ##NEEDS TRANSLATE## +gui.message.help2=For Space Program guidance ##NEEDS TRANSLATE## +gui.message.help3=For help with oil ##NEEDS TRANSLATE## +gui.message.in.name=Befele +gui.message.launch.name=Kilövés +gui.message.max_energy=Maximális Energia +gui.message.meansurfacetemp.name=Felszíni hőmérséklet +gui.message.moon.atmosphere.0.name=Nincs +gui.message.moon.daynightcycle.0.name=29.5 Földi nap +gui.message.moon.meansurfacetemp.0.name=(Világos oldal) 253C +gui.message.moon.meansurfacetemp.1.name=(Sötét oldal) -153C +gui.message.moon.surfacecomposition.0.name=Bazalti sziklák +gui.message.moon.surfacecomposition.1.name=és Sajtdarabok +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(a Földinek 18%-a) +gui.message.of.name=of ##NEEDS TRANSLATE## +gui.message.oil.name=Olaj +gui.message.out.name=Kifele +gui.message.overworld.atmosphere.0.name=Nitrogén és Oxigén +gui.message.overworld.atmosphere.1.name=Életnek ad otthont +gui.message.overworld.daynightcycle.0.name=1 Földi nap +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Kő, föld, +gui.message.overworld.surfacecomposition.1.name=és sóder +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(a Földinek 100% -a) +gui.message.prelaunch=Pre-launch checklist ##NEEDS TRANSLATE## +gui.message.rename.name=Rename ##NEEDS TRANSLATE## +gui.message.select_ss.name=Select a Space Station ##NEEDS TRANSLATE## +gui.message.ss_owner.name=Owner: ##NEEDS TRANSLATE## +gui.message.status.name=Állapot +gui.message.strengthen.name=Strengthen ##NEEDS TRANSLATE## +gui.message.surfacecomposition.name=Felszín összetétele +gui.message.surfacegravity.name=Felszíni gravitáció +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=%d -Es Szintű +gui.message.unnamed.name=Unnamed ##NEEDS TRANSLATE## +gui.missing_core.name.0=A 'MicdoodleCore' nem található a 'mods' mappában. +gui.missing_core.name.1=Galacticraft betöltése sikertelen. +gui.missing_core.name.2=Zárja be a Minecraftot és telepítse a 'MicdoodleCore'-t! +gui.missing_core.name.3=Kattintson ide a letöltési linkért. +gui.new_schematic.slot.desc.0=Ide tegye a feloldandó +gui.new_schematic.slot.desc.1=új tervrajzokat. (olyat +gui.new_schematic.slot.desc.2=bolygókon és holdakon +gui.new_schematic.slot.desc.3=levő Dungeonokban találni) +gui.oil_tank.desc.0=Olajtartály, Olajkannákkal +gui.oil_tank.desc.1=lehet feltölteni. +gui.oxygen.warning=Életfenntartó-Rendszer Hiányos! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_compressor.slot.desc.1=here to fill it with breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, place oxygen tank ##NEEDS TRANSLATE## +gui.oxygen_decompressor.slot.desc.1=here to empty out the breathable oxygen. ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.0=Oxygen slot, place oxygen canister or tank ##NEEDS TRANSLATE## +gui.oxygen_slot.desc.1=here, or use a connected oxygen supply ##NEEDS TRANSLATE## +gui.oxygen_storage.desc.0=Levegő-Raktár +gui.oxygen_storage.desc.1=Levegő +gui.oxygen_use.desc=Elhasznált Levegő +gui.per_second=/s ##NEEDS TRANSLATE## +gui.player.bpm=bpm ##NEEDS TRANSLATE## +gui.player.food=Food ##NEEDS TRANSLATE## +gui.player.health=Health ##NEEDS TRANSLATE## +gui.player.ouch=ouch!!!! ##NEEDS TRANSLATE## +gui.receiver.cannot_attach=Ide nem lehet vevőt csatolni. +gui.requires_controller.desc=Távvezérlő Szügséges! +gui.rocket.countdown=Countdown ##NEEDS TRANSLATE## +gui.rocket.height=Height ##NEEDS TRANSLATE## +gui.rocket.inv.name=Eszköztár és üzemanyagszint +gui.rocket.launch.name=Kilövés +gui.rocket.launched=Launched ##NEEDS TRANSLATE## +gui.rocket.on_launchpad=On launchpad ##NEEDS TRANSLATE## +gui.rocket.speed=Speed ##NEEDS TRANSLATE## +gui.rocket.turn.name=Jobbra-Balra Fordulás +gui.rocket.updown.name=Föl-Le Bólintás +gui.rocket.warning.nofuel=Először töltsön be hajtóanyagot. +gui.rocket.warning.nogyroscope=Mysterious forces are at play and the gyroscopes are spinning wildly! ##NEEDS TRANSLATE## +gui.rocket.warning.noparachute=Nincs Ejtőernyője! Ha megnyomja mégegyszer a kilövést, már nem biztos hogy élve visszatérhet. +gui.rocket_type.0=Raktárhely: 18 +gui.rocket_type.1=Raktárhely: 36 +gui.rocket_type.2=Raktárhely: 56 +gui.rocket_type.3=Előre feltöltve +gui.seconds=s ##NEEDS TRANSLATE## +gui.sensor.advanced=Érzékeny mód +gui.sensor.advancedoff=Kikapcsolva +gui.sensor.advancedon=Bekapcsolva +gui.show_bubble.desc.0=Buborék megmutatása +gui.skeleton_boss.message=A főgonosz elspawnolva, harc közben ne hagyja el a főgonosz termét! Újra lépjen be a terembe a főgonosz újraspawnolásához.. +gui.space_race.chat.add_success=%s has joined the Space Race! ##NEEDS TRANSLATE## +gui.space_race.chat.already_part=You are already a part of this space race! ##NEEDS TRANSLATE## +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. ##NEEDS TRANSLATE## +gui.space_race.chat.not_found=Could not find player with name: %s ##NEEDS TRANSLATE## +gui.space_race.chat.remove_success=%s has been removed from the Space Race. ##NEEDS TRANSLATE## +gui.space_race.chat.to_join=To join %s use command %s ##NEEDS TRANSLATE## +gui.space_race.coming_soon=Coming Soon ##NEEDS TRANSLATE## +gui.space_race.create.add_players.name=Játékos(ok) hozzáadása +gui.space_race.create.back.name=Vissza +gui.space_race.create.brush_radius.name=Ecset átmérője +gui.space_race.create.brush_size.name=Ecset mérete +gui.space_race.create.change_color.name.0=Csapat +gui.space_race.create.change_color.name.1=színének +gui.space_race.create.change_color.name.2=változtatása +gui.space_race.create.close.name=Bezárás +gui.space_race.create.customize.name=Zászló szerkesztése +gui.space_race.create.eraser_radius.name=Radít átmérője +gui.space_race.create.eraser_size.name=Radír mérete +gui.space_race.create.global_stats.name=Globális statisztikák +gui.space_race.create.invite_player.name=Játékos meghívása +gui.space_race.create.player_radius.name=Note:A játékosok 25m-en belül kell tartózkodjanak +gui.space_race.create.rem_players.name=Játékos(ok) eltávolítása +gui.space_race.create.remove.name=Eltávolítás +gui.space_race.create.remove_player.name=Játékos eltávolítása +gui.space_race.create.rename.name=Csapat átnevezése +gui.space_race.create.send_invite.name=Meghívó küldése +gui.space_race.create.server_stats.name=Szerveri statisztikák +gui.space_race.create.title.name=Űrverseny-Kezelő +gui.space_race.create.title.name.0=Space Race ##NEEDS TRANSLATE## +gui.space_race.create.title.name.1=Manager ##NEEDS TRANSLATE## +gui.space_race.join.member_count.name=%d tag +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Kapitány +gui.space_race.join.title.name=Csatlakozás az Űrversenyhez +gui.space_race.unnamed=Unnamed Team ##NEEDS TRANSLATE## +gui.spacestation.added=You've been added to %s's Space Station accepted players! ##NEEDS TRANSLATE## +gui.spacestation.addsuccess=Successfully added %s to Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= +gui.spacestation.removesuccess=Successfully removed %s from Space Station list! ##NEEDS TRANSLATE## +gui.spacestation.to_allow_entry=hogy megengedje a másik játékosnak a belépést ebbe az űrállomásba +gui.spacestation.type_command=Írja be hogy +gui.status.active.name=Üzemel +gui.status.air_lock_closed.name=Légzsilip Bezárva +gui.status.air_lock_open.name=Légzsilip Kinyitva +gui.status.blockedfully.name=A Nap Nem Látható +gui.status.blockedpartial.name=A Nap Nem Teljesen Látható +gui.status.check_pending.name=Folytatás Ellenőrzése +gui.status.check_starting.name=Kezdés Ellenőrzése +gui.status.checking_seal.name=Légnyomás Ellenőrzése +gui.status.collecting.name=Kiválasztás Folyamatban +gui.status.collectingenergy.name=Energiát Fejleszt +gui.status.compressing.name=Préselés Folyamatban +gui.status.disabled.name=Leállítva +gui.status.fulltank.name=Oxigénpalack Feltöltve +gui.status.generating.name=Energiát Termel +gui.status.hull_heat.name=Kazán Befűtése: +gui.status.idle.name=Nem Üzemel +gui.status.missingleaves.name=Nincs Elég Falevél +gui.status.missingoxygen.name=Nincs Elég Levegő +gui.status.missingpower.name=Nincs Elég Energia +gui.status.missingtank.name=Nincs Érvényes Oxigigénpalack +gui.status.nofuel.name=Nincs Feltöltendő Üzemanyag +gui.status.noinvtarget.name=Nincs Eszköztár A Célponton +gui.status.noitems.name=Nincsenek Feltöltendő Eszközök +gui.status.nooil.name=Nincs Olaj +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Nem Üzemel +gui.status.notargetload.name=Nincs Feltölthető Célpont +gui.status.notargetunload.name=Nincs Kirakodható Célpont +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name=Esik Az Eső +gui.status.ready.name=Kész +gui.status.refining.name=Finomítás Folyamatban +gui.status.running.name=Üzemel +gui.status.sealed.name=Légnyomás Fenntartva +gui.status.sealerblocked.name=Kimeneti Nyílás Eltorlaszolva +gui.status.sun_visible.name=A Nap Látható +gui.status.tank_empty.name=Oxigénpalack Üres +gui.status.targetempty.name=A Célpont Üres +gui.status.targetfull.name=A Célpont Megtelt +gui.status.unknown.name=Ismeretlen +gui.status.unsealed.name=Túl Nagy A Terület/Nem Szivárgásmentes +gui.tank.oxygen_remaining=Levegő Mennyisége +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) ##NEEDS TRANSLATE## +gui.telemetry_fail_no_frequency_module.message=I'll probably need a Frequency Module in my hand to make use of this! ##NEEDS TRANSLATE## +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! ##NEEDS TRANSLATE## +gui.telemetry_succeed.message=Telemetry link created. ##NEEDS TRANSLATE## +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s Légzsilip-Kezelőpultja. +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. ##NEEDS TRANSLATE## +gui.warning=VIGYÁZAT! +gui.warning.invalid_thermal=Invalid Thermal Protection! ##NEEDS TRANSLATE## +gui.warning.noroom=Nincs elég hely. +item.air_fan.name=Légkeringető Propeller +item.air_vent.name=Légbeömlő Nyílás +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Ételkonzerv +item.basic_item.compressed_aluminum.name=Préselt Alumínium +item.basic_item.compressed_bronze.name=Préselt Bronz +item.basic_item.compressed_copper.name=Préselt Réz +item.basic_item.compressed_iron.name=Préselt Vas +item.basic_item.compressed_steel.name=Préselt Acél +item.basic_item.compressed_tin.name=Préselt Ón +item.basic_item.dehydrated_apple.name=Almakonzerv +item.basic_item.dehydrated_carrot.name=Répakonzerv +item.basic_item.dehydrated_melon.name=Dinnyekonzerv +item.basic_item.dehydrated_potato.name=Burgonyakonzerv +item.basic_item.frequency_module.name=Rádió-Vevő +item.basic_item.ingot_aluminum.name=Alumíniumrúd +item.basic_item.ingot_bronze.name=Bronzrúd +item.basic_item.ingot_copper.name=Rézrúd +item.basic_item.ingot_steel.name=Acélrúd +item.basic_item.ingot_tin.name=Ónrúd +item.basic_item.raw_silicon.name=Nyers Szilikon +item.basic_item.solar_module_0.name=Napelemcella +item.basic_item.solar_module_1.name=Napelem-Panel +item.basic_item.wafer_advanced.name=Fejlett Korong +item.basic_item.wafer_basic.name=Kezdetleges Korong +item.basic_item.wafer_solar.name=Napelem-Alapanyag +item.battery.name=Akkumlátor +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Rover +item.buggymat.seat.name=Rover-Ülés +item.buggymat.storage.name=Rover-Teherláda +item.buggymat.wheel.name=Rover-Kerék +item.canister.copper.name=Rézkanna +item.canister.tin.name=Ónkanna +item.canvas.name=Vászon +item.cheese_block.name=Sajtkorong +item.cheese_curd.name=Sajtdarab +item.compressed_meteoric_iron.name=Préselt Meteori Vas +item.empty_liquid_canister.name=Üres Folyadékkanna +item.engine.tier1booster.name=1-Es Szintű Gyorsítórakéta +item.engine.tier1engine.name=1-Es Szintű Rakétamotor +item.flag.name=Zászló +item.fuel.name=Rakéta-Hajtóanyag +item.fuel_canister.name=Telitöltött Üzemanyagkanna +item.fuel_canister_partial.name=Nem Teljesen Telitöltött Üzemanyagkanna +item.heavy_plating.name=Nehéz Borítólemez +item.hot_description.name=Égő! +item.infinite_battery.name=Kifogyhatatlan Akkumlátor +item.infinite_oxygen.name=Infinite Oxygen Supply ##NEEDS TRANSLATE## +item.key.t1.name=1-Es Szintű Dungeon-Kulcs +item.meteor_chunk.name=Elhajítható Meteordarab +item.meteor_chunk_hot.name=Égő Elhajítható meteordarab +item.meteoric_iron_ingot.name=Meteori Vasrúd +item.meteoric_iron_raw.name=Meteori Vas +item.nose_cone.name=Orrkúp +item.oil_canister.name=Telitöltött Olajkanna +item.oil_canister_partial.name=Nem Teljesen Telitöltött Olajkanna +item.oil_extractor.name=Hordozható Olajkifejtő +item.oxygen_concentrator.name=Légpumpa +item.oxygen_gear.name=Életfenntartórendszer +item.oxygen_mask.name=Oxigénmaszk +item.oxygen_tank_heavy_empty.name=Üres Nagy oxigénpalack +item.oxygen_tank_heavy_full.name=Nagy Oxigénpalack +item.oxygen_tank_light_empty.name=Üres Kis Oxigénpalack +item.oxygen_tank_light_full.name=Kis Oxigénpalack +item.oxygen_tank_med_empty.name=Üres Közepes Oxigénpalack +item.oxygen_tank_med_full.name=Közepes Oxigénpalack +item.parachute_black.name=Fekete Ejtőernyő +item.parachute_blue.name=Világoskék Ejtőernyő +item.parachute_brown.name=Barna Ejtőernyő +item.parachute_darkblue.name=Kék Ejtőernyő +item.parachute_darkgray.name=Szürke Ejtőernyő +item.parachute_darkgreen.name=Zöld Ejtőernyő +item.parachute_gray.name=Világosszürke Ejtőernyő +item.parachute_lime.name=Neonzöld Ejtőernyő +item.parachute_magenta.name=Bíborvörös +item.parachute_orange.name=Narancssárga Ejtőernyő +item.parachute_pink.name=Rózsaszín Ejtőernyő +item.parachute_plain.name=Ejtőernyő +item.parachute_purple.name=Lila Ejtőernyő +item.parachute_red.name=Vörös Ejtőernyő +item.parachute_teal.name=Türkizkék Ejtőernyő +item.parachute_yellow.name=Sárga Ejtőernyő +item.rocket_fins.name=Légterelő Szárny +item.rocket_t1.name=1-Es Szintű Rakéta +item.schematic.name=Űrjármű-Tervrajz +item.sensor_glasses.name=Szenzoros Szemüveg +item.sensor_lens.name=Szenzoros Lencse +item.standard_wrench.name=Csavarkulcs +item.steel_axe.name=Nehézacél-Balta +item.steel_boots.name=Nehézacél-Bakancs +item.steel_chestplate.name=Nehézacél-Mellvért +item.steel_helmet.name=Nehézacél-Sisak +item.steel_hoe.name=Nehézacél-Kapa +item.steel_leggings.name=Nehézacél-Lábszárvédő +item.steel_pickaxe.name=Nehézacél-Csákány +item.steel_pole.name=Acélrúd +item.steel_shovel.name=Nehézacél-Ásó +item.steel_sword.name=Nehézacél-Kard +item.tier1.desc=1-Es Szintű +item_desc.powerdraw.name=Power required: %s /s ##NEEDS TRANSLATE## +item_desc.shift.name=Press %s for more info ##NEEDS TRANSLATE## +item_group.galacticraft_blocks=Galacticraft Építőelemek +item_group.galacticraft_items=Galacticraft Eszközök +keybind.map.name=Naprendszer térképének megnyitása +keybind.sensortoggle.name=Szenzoros Szemüveg üzemmódjának váltása +keybind.spaceshipinv.name=Űrjármű felszerelésének megnyitása +keybind.vehiclebackward.name=Űrjármű mozgatása hátra +keybind.vehicledown.name=Űrjármű mozgatása lefelé +keybind.vehicleforward.name=Űrjármű mozgatása előre +keybind.vehicleleft.name=Űrjármű mozgatása balra +keybind.vehicleright.name=Űrjármű mozgatása jobbra +keybind.vehicleup.name=Űrjármű mozgatása felfelé +moon.moon=Hold +newversion.failed.name=Galacticraft frissítés ellenőrzése sikertelen. Próbálja úzra 15 másodperc múlva. +newversion.success.name=Galacticraft egyéb verzió észlelve: +planet.jupiter=Jupiter +planet.mercury=Merkúr +planet.neptune=Neptunusz +planet.overworld=Föld +planet.saturn=Szaturnusz +planet.uranus=Uránusz +planet.venus=Vénusz +satellite.spacestation.overworld=Overworld Space Station ##NEEDS TRANSLATE## +schematic.moonbuggy.name=Rover +schematic.rocket_t1.name=1-Es Szintű Rakéta +schematic.rocket_t2.name=2-Es Szintű Rakéta +solarsystem.sol=Naprendszer +star.sol=Sol ##NEEDS TRANSLATE## +tile.air_lock_controller.name=Légzsilip-Kezelőpult +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Légzsilip-Keret +tile.air_lock_seal.name=Légzsilip-Ajtó +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name=Alumíniumvezeték +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Its higher capacity boosts efficiency for Tier 2 machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name=Nehéz Alumíniumvezeték +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Reflektor +tile.basic_block_core.block_aluminum_gc.name=Alumíniumtömb +tile.basic_block_core.block_copper_gc.name=Réztömb +tile.basic_block_core.block_meteoric_iron_gc.name=Solid Meteoric Iron ##NEEDS TRANSLATE## +tile.basic_block_core.block_tin_gc.name=Óntömb +tile.basic_block_core.deco_block_0.name=Ón-Díszítőelem +tile.basic_block_core.deco_block_1.name=Ón-Díszítőelem +tile.basic_block_core.ore_aluminum_gc.name=Alumíniumérc +tile.basic_block_core.ore_copper_gc.name=Rézérc +tile.basic_block_core.ore_silicon.name=Szilikonérc +tile.basic_block_core.ore_tin_gc.name=Ónérc +tile.basic_block_moon.bricks.name=Holdi Dungeon-fal +tile.basic_block_moon.cheesestone.name=Holdi Sajtérc +tile.basic_block_moon.coppermoon.name=Holdi Rézérc +tile.basic_block_moon.moondirt.name=Holdsár +tile.basic_block_moon.moongrass.name=Holdpor +tile.basic_block_moon.moonstone.name=Holdkő +tile.basic_block_moon.tinmoon.name=Holdi Ónérc +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Teher-Berakodó +tile.cargo.unloader.name=Teher-Kirakodó +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Sajtkorong +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name=Légkiválasztó +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than its predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name=Kőolaj +tile.crude_oil_still.name=Kőolaj +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Communications Dish ##NEEDS TRANSLATE## +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name=Légbuborék-Fúlyó +tile.dummyblock.cryogenic_chamber.name=Hibernációs Kamra +tile.dummyblock.launch_pad.name=Rakéta-Kilövőállás +tile.dummyblock.nasa_workbench.name=Rakéta-Barkácsasztal +tile.dummyblock.solar.name=Napelem +tile.dummyblock.space_station_base.name=Űrállomás-Spawnhely +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Szivárgásmentes Alumíniumvezeték +tile.enclosed.heavy_aluminum_wire.name=zivárgásmentes Nehéz Alumíniumvezeték +tile.enclosed.copper_cable.name=Sealable Copper Cable +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Sealable Glass Fiber Cable +tile.enclosed.gold_cable.name=Sealable Gold Cable +tile.enclosed.hv_cable.name=Sealable HV Cable +tile.enclosed.lv_cable.name=Sealable Ultra-Low-Current Cable +tile.enclosed.me_cable.name=Sealable ME Cable +tile.enclosed.fluid_pipe.name=Szivárgásmentes Légcső +tile.enclosed.pipe_fluids_cobblestone.name=Sealable Cobblestone Fluid Pipe +tile.enclosed.pipe_fluids_stone.name=Sealable Stone Fluid Pipe +tile.enclosed.pipe_items_cobblestone.name=Sealable Cobblestone Transport Pipe +tile.enclosed.pipe_items_stone.name=Sealable Stone Transport Pipe +tile.enclosed.pipe_power_gold.name=Sealable Golden Kinesis Pipe +tile.enclosed.pipe_power_stone.name=Sealable Stone Kinesis Pipe +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than its predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Fallen Meteor +tile.fuel.name=Üzemanyag +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name=Üzemanyag-Töltő +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Izzókö-Fáklya +tile.landing_pad.buggy_fueler.name=Rover-Üzemanyagtöltő Platform +tile.landing_pad.cargo_pad.name=Teherrakéta-Kilövőállás +tile.landing_pad.description=Launch Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name=Rakéta-Kilövőállás +tile.landing_pad_full.name=Kész Rakéta-Kilövőállás +tile.machine.0.name=Szénerőmű +tile.machine.1.name=Akkumlátor-Telep +tile.machine.2.name=Elektromos Kemence +tile.machine.3.name=Préselőgép +tile.machine.7.name=Elektromos Duplázó-Kemence +tile.machine.8.name=Nehéz Akkumlátortelep +tile.machine2.4.name=Elektromos Préselőgép +tile.machine2.5.name=Áramkör-Készítő +tile.machine2.6.name=Légraktár +tile.moon_stairs_brick.name=Moon Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.moon_stairs_stone.name=Moon Rock Stairs ##NEEDS TRANSLATE## +tile.ore_copper.name=Rézérc +tile.ore_tin.name=Ónérc +tile.oxygen_compressor.0.name=Légsűrítő +tile.oxygen_compressor.1.name=Légritkító +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name=Légnyomás-Mérő +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name=Légcső +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Utánpótlásszállító-Láda +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name=Finomító +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=Rakéta-Barkácsasztal +tile.sapling2.birch.name=Nyírfacsemete +tile.sapling2.jungle.name=Trópusifa-Csemete +tile.sapling2.oak.name=Tölgycsemete +tile.sapling2.spruce.name=Fenyőcsemete +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name=Légnyomás-Fenntartó +tile.slab_gc_half.moon_bricks_slab.name=Moon Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.moon_slab.name=Moon Rock Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_1.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.tin_slab_2.name=Tin Decoration Slab ##NEEDS TRANSLATE## +tile.solar.advanced_solar.name=Fejlett Naperőmű +tile.solar.basic_solar.name=Kezdetleges Naperőmű +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Space Station Arrival Block ##NEEDS TRANSLATE## +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Forgató-Fúvóka +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Telemetry Unit ##NEEDS TRANSLATE## +tile.tin_stairs_1.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.tin_stairs_2.name=Tin Decoration Stairs ##NEEDS TRANSLATE## +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Kincsesláda +tile.unlit_torch.name=Fáklya +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Fáklya +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Display Screen ##NEEDS TRANSLATE## +tile.wall_gc.moon.name=Moon Rock Wall ##NEEDS TRANSLATE## +tile.wall_gc.moon_bricks.name=Moon Dungeon Brick Wall ##NEEDS TRANSLATE## +tile.wall_gc.tin.name=Tin Decoration Wall ##NEEDS TRANSLATE## diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/it_it.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/it_it.lang new file mode 100644 index 00000000..41c1a3a7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/it_it.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s +commands.dimensionteleport=%s was sent into the atmosphere%s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s +commands.joinrace.no_team=The team needs to be specified! Usage: %s +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s +commands.ssnewowner.wrong_usage=Impossibile riconoscere la Stazione con ID: ID# - Esiste? Utilizzo: %s +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! +container.cargoloader.name=Cargo Loader +container.cargounloader.name=Cargo Unloader +container.fuelloader.name=Fuel Loader +container.lander.name=Space Lander +container.oxygencollector.name=Oxygen Collector +container.oxygencompressor.name=Oxygen Compressor +container.oxygendecompressor.name=Oxygen Decompressor +container.oxygendistributor.name=Oxygen Distributor +container.oxygensealer.name=Oxygen Sealer +container.parachest.name=Para-chest +container.refinery.name=Refinery +container.solaradvanced.name=Advanced Solar Panel +container.solarbasic.name=Basic Solar Panel +container.spaceship.name=Tier 1 Rocket +container.treasurechest.name=Treasure Chest +death.attack.oxygen_suffocation=%1$ ha esaurito l'ossigeno. +death.attack.spaceship_crash=Il razzo di %1$ si è schiantato da solo a terra. Ops. +death.attack.thermal=%1$ ha dimenticato la protezione per le alte temperature. +dimension.moon.name=Luna +dimension.overworld.name=Terra +dimension.sun.name=Sole +entity.alien_villager.name=Paesano alieno +entity.buggy.name=Rover +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper evoluto +entity.evolved_skeleton.name=Scheletro evoluto +entity.evolved_skeleton_boss.name=Scheletro-boss evoluto +entity.evolved_spider.name=Ragno evoluto +entity.evolved_zombie.name=Zombie evoluto +entity.flag.name=Bandiera +entity.gcflag.name=Bandiera +entity.gravity_arrow.name=Freccia +entity.lander.name=Space Lander +entity.meteor.name=Meteora +entity.meteor_chunk.name=Pezzo di meteorite +entity.oxygen_bubble.name=Bolla di ossigeno +entity.para_chest.name=Cassa del razzo +entity.rocket_t1.name=Razzo di livello 1 +galaxy.milky_way=Via lattea +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on Planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Rover +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Set Custom Mod Ore IDs to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Slot della batteria, piazza la batteria qui +gui.battery_slot.desc.1=o usa dei cavi +gui.bed_fail.message=Ma se l'ossigeno finisse mentre dormo? Avrò bisogno di una camera criogenica per dormire nello spazio! +gui.buggy.accel.name=Accelera +gui.buggy.decel.name=Decelera +gui.buggy.inv.name=Inventario / Benzina +gui.buggy.storage_space=Spazio dell'inventario +gui.buggy.turn.name=Gira a destra-sinistra +gui.button.back.name=Indietro +gui.button.disable.name=Disattiva +gui.button.disableseal.name=Disattiva chiusura +gui.button.enable.name=Attiva +gui.button.enableseal.name=Attiva chiusira +gui.button.hide_dest.name=Nascondi +gui.button.loadfuel.name=Carica benzina +gui.button.loaditems.name=Carica oggetti +gui.button.next.name=Avanti +gui.button.refine.name=Raffina +gui.button.stoploading.name=Ferma caricamento +gui.button.stoprefine.name=Ferma in raffinamento +gui.button.stopunloading.name=Ferma scaricamento +gui.button.unhide_dest.name=Rivela +gui.button.unloaditems.name=Scarica oggetti +gui.button.unlockschematic.name=Sblocca progetto +gui.checkbox.horizontal.name=Modalità orizzontale +gui.checkbox.invert.name=Inverti selezione +gui.checkbox.player_name.name=Il giocatore è +gui.checkbox.player_within.name=Il giocatore è entro +gui.checkbox.redstone_signal.name=Si apre con un segnale di pietrarossa +gui.chest.warning.wrongkey=Ho bisogno di una chiave delle segrete livello %s per aprirla! +gui.choose_planet.desc.moon=Abitabile#Privo Di Ossigeno#Gravità: 18% +gui.choose_planet.desc.overworld=Pieno di vita#Abitabile#Gravità: 100% +gui.chooseplanet.alreadycreated1.name=Stazione spaziale già +gui.chooseplanet.alreadycreated2.name=creata! +gui.chooseplanet.cannotcreate1.name=Non posso creare una stazione +gui.chooseplanet.cannotcreate2.name=spaziale qui! +gui.creative_only.desc=Solo creativa +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Velocità corrente +gui.docking_rocket.distance_from.name=Distanza dall'obiettivo +gui.docking_rocket.target_vel.name=Velocità +gui.docking_rocket.warning.name.0=Premi %s per decelarare +gui.docking_rocket.warning.name.1=Premi %s per accelerare +gui.dropbox.player_distance.name.0=1 Metro +gui.dropbox.player_distance.name.1=2 Metri +gui.dropbox.player_distance.name.2=5 Metri +gui.dropbox.player_distance.name.3=10 Metri +gui.electric_compressor.desc.0=Progresso +gui.energy_storage.desc.0=Riserva di energia +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Bandiera già posizionata qui! +gui.frequency_module.desc.0=Può ricevere basse frequenze +gui.frequency_module.desc.1=onde e segnali distanti +gui.frequencymodule.warning0=Ho probabilmente bisogno di +gui.frequencymodule.warning1=se qui voglio sentire qualcosa! +gui.fuel_output.desc.0=Posiziona le taniche vuote in +gui.fuel_output.desc.1=questo slot per riempirle +gui.fuel_output.desc.2=dallo storage interno +gui.fuel_tank.desc.0=Tanica di benzina. Richiede +gui.fuel_tank.desc.1=il caricatore di benzina +gui.fuel_tank.desc.2=Tanica di benzina, può essere riempita +gui.fuel_tank.desc.3=con taniche di benzina +gui.fuel_tank.desc.4=Tanica di benzina +gui.infinite_item.desc=Infinito +gui.lander.velocity=Velocità +gui.lander.velocityu=m/s +gui.lander.warning2=Tieni premuto " +gui.lander.warning3=" per rallentare! +gui.max_output.desc=Output massimo +gui.message.addnewsch.name=Aggiungi nuovo progetto +gui.message.apply.name=Applica +gui.message.assign_name.name=Assegna nome +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Indietro +gui.message.breed.name=Incrocia +gui.message.bubble_visible.name=Bolla visibile +gui.message.can_create_space_station.name=Qui può essere creata una stazione spaziale! +gui.message.cancel.name=Annulla +gui.message.cannot_create_space_station.name=Qui non può essere creata una stazione spaziale. +gui.message.catalog.name=Catalogo +gui.message.click_again.0.name=Premi di nuovo per ingrandire (vedi luna e satelliti) +gui.message.click_again.1.name=Premi di nuovo per ingrandire (vedi luna) +gui.message.click_again.2.name=Premi di nuovo per ingrandire (vedi satelliti) +gui.message.click_again.3.name=Premi di nuovo per ingrandire +gui.message.clicklink=Premi per la Wiki della Galacticraft +gui.message.create_ss.name=Crea +gui.message.daynightcycle.name=Ciclo giorno-notte +gui.message.energy=Energia +gui.message.environment.name=Accelerazione ambientale +gui.message.exit.name=Esci +gui.message.fuel.name=Benzina +gui.message.full.name=pieno +gui.message.generating.name=Generando +gui.message.grow.name=Cresci +gui.message.heal.name=Curare +gui.message.help1=per l'aiuto della Galacticraft +gui.message.help1a=Per vedere questo messaggio in qualsiasi momento, premi +gui.message.help2=per guida al programma spaziale +gui.message.help3=per aiuto con il petrolio +gui.message.in.name=Dentro +gui.message.launch.name=Lancia +gui.message.max_energy=Energia massima +gui.message.meansurfacetemp.name=Mean Surface Temp +gui.message.moon.atmosphere.0.name=None +gui.message.moon.daynightcycle.0.name=29.5 Earth Days +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C +gui.message.moon.surfacecomposition.0.name=Basalto +gui.message.moon.surfacecomposition.1.name=Tracce di formaggio +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% of Earth) +gui.message.of.name=di +gui.message.oil.name=Petrolio +gui.message.out.name=Fuori +gui.message.overworld.atmosphere.0.name=Azoto e ossigeno +gui.message.overworld.atmosphere.1.name=Permette la vita +gui.message.overworld.daynightcycle.0.name=1 Earth Day +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and +gui.message.overworld.surfacecomposition.1.name=gravel +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% of Earth) +gui.message.prelaunch=Lista di partenza +gui.message.rename.name=Rinomina +gui.message.select_ss.name=Seleziona una stazione spaziale +gui.message.ss_owner.name=Proprietario: +gui.message.status.name=Stato +gui.message.strengthen.name=Rinforzato +gui.message.surfacecomposition.name=Composizione della superficie +gui.message.surfacegravity.name=Gravità sulla superficie +gui.message.thermal_status.name=Controllo termale +gui.message.tier.name=Livello %d +gui.message.unnamed.name=Anonima +gui.missing_core.name.0=MicdoodleCore non trovata! +gui.missing_core.name.1=Galacticraft non può caricarsi +gui.missing_core.name.2=Chiudi Minecraft e installa MicdoodleCore +gui.missing_core.name.3=Clicca qui per aprire la pagina di download +gui.new_schematic.slot.desc.0=Nuovo slot del progetto. Puoi +gui.new_schematic.slot.desc.1=trovare nuovi progetti +gui.new_schematic.slot.desc.2=sconfiggendo le segrete. +gui.new_schematic.slot.desc.3=sui pianeti e sulle lune +gui.oil_tank.desc.0=Tanica di petrolio, può essere riempita +gui.oil_tank.desc.1=con taniche di petrolio +gui.oxygen.warning=Sistema di ossigeno invalido! +gui.oxygen_compressor.slot.desc.0=Slot della tanica, posizionala +gui.oxygen_compressor.slot.desc.1=per riempirla di ossigeno +gui.oxygen_decompressor.slot.desc.0=Slot della tanica, posizionala +gui.oxygen_decompressor.slot.desc.1=per svuotarla dall'ossigeno. +gui.oxygen_slot.desc.0=Slot dell'ossigeno, piazza una tanica di ossigeno qui +gui.oxygen_slot.desc.1=o usa dei cavi +gui.oxygen_storage.desc.0=Riserva di ossigeno +gui.oxygen_storage.desc.1=Ossigeno +gui.oxygen_use.desc=Uso dell'ossigeno +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Cibo +gui.player.health=Vita +gui.player.ouch=ouch!!!! +gui.receiver.cannot_attach=Cannot attach receiver here! +gui.requires_controller.desc=Richiede il Controller del lancio +gui.rocket.countdown=Countdown +gui.rocket.height=Altezza +gui.rocket.inv.name=Inventario / Benzina +gui.rocket.launch.name=Lancia +gui.rocket.launched=Lanciato +gui.rocket.on_launchpad=Sul launchpad +gui.rocket.speed=Velocità +gui.rocket.turn.name=Gira a destra-sinistra +gui.rocket.updown.name=Ruota in alto-basso +gui.rocket.warning.nofuel=Dovrei caricare della benzina prima! +gui.rocket.warning.nogyroscope=Delle forze misteriose stanno agendo e i giroscopi girano all'impazzata! +gui.rocket.warning.noparachute=Non ho un paracadute! Se premo Lancia di nuovo, non c'è ritorno! +gui.rocket_type.0=Storage Space: 18 +gui.rocket_type.1=Storage Space: 36 +gui.rocket_type.2=Storage Space: 56 +gui.rocket_type.3=Pre-riempito +gui.seconds=s +gui.sensor.advanced=Modalità avanzata +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Mostra bolla +gui.skeleton_boss.message=Il boss è scomparso! Non abbandonare l'arena mentre combatti! Rientra per ricominciare! +gui.space_race.chat.add_success=%s has joined the Space Race! +gui.space_race.chat.already_part=You are already a part of this space race! +gui.space_race.chat.invite_received=Received Space Race Team Invite from %s. +gui.space_race.chat.not_found=Could not find player with name: %s +gui.space_race.chat.remove_success=%s has been removed from the Space Race. +gui.space_race.chat.to_join=To join %s use command %s +gui.space_race.coming_soon=Coming Soon +gui.space_race.create.add_players.name=Aggiungi giocatori +gui.space_race.create.back.name=Indietro +gui.space_race.create.brush_radius.name=Pennello +gui.space_race.create.brush_size.name=Dimensione pennello +gui.space_race.create.change_color.name.0=Cambia +gui.space_race.create.change_color.name.1=Squadra +gui.space_race.create.change_color.name.2=Colore +gui.space_race.create.close.name=Chiudi +gui.space_race.create.customize.name=Modifica Bandiera +gui.space_race.create.eraser_radius.name=Gomma +gui.space_race.create.eraser_size.name=Dimensione gomma +gui.space_race.create.global_stats.name=Vedi Statistiche Globali +gui.space_race.create.invite_player.name=Invita giocatore +gui.space_race.create.player_radius.name=NB: I player devono essere nel range di 25 blocchi +gui.space_race.create.rem_players.name=Rimuovi giocatori +gui.space_race.create.remove.name=Rimuovi +gui.space_race.create.remove_player.name=Remove Player +gui.space_race.create.rename.name=Rinomina squadra +gui.space_race.create.send_invite.name=Manda invito +gui.space_race.create.server_stats.name=Vedi Statistiche Locali +gui.space_race.create.title.name=Manager delle Gare Spaziali +gui.space_race.create.title.name.0=Gara Spaziale +gui.space_race.create.title.name.1=Manager +gui.space_race.join.member_count.name=%d members +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Proprietario +gui.space_race.join.title.name=Partecipa A Una Gara Spaziale +gui.space_race.unnamed=Unnamed Team +gui.spacestation.added=Sei stato aggiunto alla lista dei giocatori abilitati alla stazione spaziale di %s ! +gui.spacestation.addsuccess=Hai aggiunto %s alla lista! +gui.spacestation.allow_all_false=Le tue stazioni spaziali non sono più aperte agli altri giocatori! +gui.spacestation.allow_all_true=Le tue stazioni spaziali sono ora aperte a tutti i giocatori! (Usa /ssinvite -all per modificare) +gui.spacestation.changesuccess=Il proprietario della Stazione Spaziale è stato cambiato da %s ad %s . +gui.spacestation.playername= +gui.spacestation.removesuccess=Hai rimosso %s dalla lista! +gui.spacestation.to_allow_entry=per abilitare qualcuno a questa stazione spaziale +gui.spacestation.type_command=Tipo +gui.status.active.name=Attivo +gui.status.air_lock_closed.name=Chiusura ad aria attivata +gui.status.air_lock_open.name=Chiusura ad aria disattivata +gui.status.blockedfully.name=Il sole non è visibile +gui.status.blockedpartial.name=Sole parzialmente visibile +gui.status.check_pending.name=Controllo in coda +gui.status.check_starting.name=Il controllo sta partendo +gui.status.checking_seal.name=Controllando la chiusura +gui.status.collecting.name=Raccogliendo +gui.status.collectingenergy.name=Raccogliendo energia +gui.status.compressing.name=Compressando +gui.status.disabled.name=Disabilitato +gui.status.fulltank.name=Tanica di ossigeno piena +gui.status.generating.name=Generando +gui.status.hull_heat.name=Temperatura dello scafo +gui.status.idle.name=Riposo +gui.status.missingleaves.name=Non ci sono abbastanza foglie +gui.status.missingoxygen.name=Non c'è abbastanza ossigeno +gui.status.missingpower.name=Non c'è abbastanza corrente +gui.status.missingtank.name=Non c'è nessuna tanica di ossigeno valida! +gui.status.nofuel.name=Non c'è benzina da caricare! +gui.status.noinvtarget.name=Non c'è un inventario nel destinatario! +gui.status.noitems.name=Nessun oggetto da caricare +gui.status.nooil.name=Non c'è petrolio +gui.status.not_available.name=NON DISPONIBILE +gui.status.not_generating.name=Non generando +gui.status.notargetload.name=Nessuno destinatario! +gui.status.notargetunload.name=Nessun destinatario! +gui.status.off.name=SPENTO +gui.status.on.name=ACCESO +gui.status.raining.name=Piovendo +gui.status.ready.name=Pronto +gui.status.refining.name=Raffinando +gui.status.running.name=Lavorando +gui.status.sealed.name=Chiuso +gui.status.sealerblocked.name=Grata di uscita bloccata! +gui.status.sun_visible.name=Sole visibile +gui.status.tank_empty.name=Bombola di ossigeno vuota +gui.status.targetempty.name=L'inventario del veicolo è vuoto! +gui.status.targetfull.name=L'inventario del veicolo è pieno! +gui.status.unknown.name=Non conosciuto +gui.status.unsealed.name=Area troppo grande / Non chiuso +gui.tank.oxygen_remaining=Ossigeno rimanente +gui.telemetry_fail.message=First I'll need to track an entity with that Frequency Module! (Or try wearing it!) +gui.telemetry_fail_no_frequency_module.message=Ho bisogno di un modulo delle frequenze se voglio usarlo +gui.telemetry_fail_wearing_it.message=I'll need to take off my Frequency Module if I want to link it with this Telemetry Unit! +gui.telemetry_succeed.message=Telemetry link created. +gui.thermal_slot.desc.0=Aggiornamente termale, posiziona 'Ambiente +gui.thermal_slot.desc.1=Controllore termale' qui (opzionale) +gui.thermal_slot.desc.2=Nota: utilizza più energia! +gui.title.air_lock.name=Controller della chiusura ad aria di %s +gui.tracking.message=Tracking activated. Now I'll need to right-click this on a Telemetry Unit to complete the link. +gui.warning=ATTENZIONE! +gui.warning.invalid_thermal=Protezione alle alte temperature invalida! +gui.warning.noroom=Non c'è abbastanza spazio +item.air_fan.name=Ventola per ossigeno +item.air_vent.name=Grata per ossigeno +item.basic_item.ambient_thermal_controller.name=Controllore di temperatura ambientale +item.basic_item.canned_food.name=Contenitore di cibo +item.basic_item.compressed_aluminum.name=Alluminio compresso +item.basic_item.compressed_bronze.name=Bronzo compresso +item.basic_item.compressed_copper.name=Rame compresso +item.basic_item.compressed_iron.name=Ferro compresso +item.basic_item.compressed_steel.name=Acciaio compresso +item.basic_item.compressed_tin.name=Stagno compresso +item.basic_item.dehydrated_apple.name=Mele deidratate +item.basic_item.dehydrated_carrot.name=Carote deidratate +item.basic_item.dehydrated_melon.name=Melone deidratato +item.basic_item.dehydrated_potato.name=Patate deidratate +item.basic_item.frequency_module.name=Rilevatore di frequenze +item.basic_item.ingot_aluminum.name=Lingotto di alluminio +item.basic_item.ingot_bronze.name=Lingotto di bronzo +item.basic_item.ingot_copper.name=Lingotto di rame +item.basic_item.ingot_steel.name=Lingotto di acciaio +item.basic_item.ingot_tin.name=Lingotto di stagno +item.basic_item.raw_silicon.name=Silicone grezzo +item.basic_item.solar_module_0.name=Modulo solare +item.basic_item.solar_module_1.name=Pannello solare completo +item.basic_item.wafer_advanced.name=Circuito avanzato +item.basic_item.wafer_basic.name=Circuito base +item.basic_item.wafer_solar.name=Circuito solare +item.battery.name=Batteria +item.bucket_fuel.name=Secchio di carburante +item.bucket_oil.name=Secchio di petrolio +item.buggy.name=Rover +item.buggymat.seat.name=Sedile del Rover +item.buggymat.storage.name=Cassa del Rover +item.buggymat.wheel.name=Ruota del Rover +item.canister.copper.name=Contenitore in rame +item.canister.tin.name=Contenitore in stagno +item.canvas.name=Tela +item.cheese_block.name=Blocco Di Formaggio +item.cheese_curd.name=Cagliata Di Formaggio +item.compressed_meteoric_iron.name=Ferro Meteorico Compresso +item.empty_liquid_canister.name=Contenitore vuoto +item.engine.tier1booster.name=Acceleratore livello 1 +item.engine.tier1engine.name=Motore livello 1 +item.flag.name=Bandiera +item.fuel.name=Benzina per il razzo +item.fuel_canister.name=Contenitore pieno di benzina +item.fuel_canister_partial.name=Contenitore parzialmente riempito di benzina +item.heavy_plating.name=Piastra rinforzata +item.hot_description.name=Caldo +item.infinite_battery.name=Batteria infinita +item.infinite_oxygen.name=Provvista di ossigeno infinita +item.key.t1.name=Chiave della prigione livello 1 +item.meteor_chunk.name=Pezzo di meteora lanciabile +item.meteor_chunk_hot.name=Pezzo di meteora lanciabile +item.meteoric_iron_ingot.name=Lingotto Di Ferro Meteorico +item.meteoric_iron_raw.name=Ferro Meteorico Grezzo +item.nose_cone.name=Punta razzo +item.oil_canister.name=Contenitore pieno di petrolio +item.oil_canister_partial.name=Contenitore parzialmente riempito di petrolio +item.oil_extractor.name=Estrattore di petrolio portatile +item.oxygen_concentrator.name=Accumulatore di ossigeno +item.oxygen_gear.name=Apparecchio per ossigeno +item.oxygen_mask.name=Maschera per Ossigeno +item.oxygen_tank_heavy_empty.name=Bombola Grande Vuota +item.oxygen_tank_heavy_full.name=Bombola Grande +item.oxygen_tank_light_empty.name=Bombola Piccola Vuota +item.oxygen_tank_light_full.name=Bombola Piccola +item.oxygen_tank_med_empty.name=Bombola Media Vuota +item.oxygen_tank_med_full.name=Bombola Media +item.parachute_black.name=Paracadute Nero +item.parachute_blue.name=Paracadute Azzurro +item.parachute_brown.name=Paracadute Marrone +item.parachute_darkblue.name=Paracadute Blu +item.parachute_darkgray.name=Paracadute Grigio +item.parachute_darkgreen.name=Paracadute Verde +item.parachute_gray.name=Paracadute Grigio Chiaro +item.parachute_lime.name=Paracadute Verde Chiaro +item.parachute_magenta.name=Paracadute Magenta +item.parachute_orange.name=Paracadute Arancione +item.parachute_pink.name=Paracadute Rosa +item.parachute_plain.name=Paracadute +item.parachute_purple.name=Paracadute Porpora +item.parachute_red.name=Paracadute Rosso +item.parachute_teal.name=Paracadute Ciano +item.parachute_yellow.name=Paracadute Giallo +item.rocket_fins.name=Alette razzo +item.rocket_t1.name=Razzo livello 1 +item.schematic.name=Progetto del tavolo di lavoro della NASA +item.sensor_glasses.name=Occhiali con sensori +item.sensor_lens.name=Lenti con sensore +item.standard_wrench.name=Chiave inglese standard +item.steel_axe.name=Accetta rinforzata +item.steel_boots.name=Stivali rinforzati +item.steel_chestplate.name=Corpetto rinforzato +item.steel_helmet.name=Elmetto rinforzato +item.steel_hoe.name=Zappa rinforzata +item.steel_leggings.name=Gambali rinforzati +item.steel_pickaxe.name=Piccone rinforzato +item.steel_pole.name=Asta di acciaio +item.steel_shovel.name=Pala rinforzata +item.steel_sword.name=Spada rinforzata +item.tier1.desc=Livello 1 +item_desc.powerdraw.name=Power required: %s /s +item_desc.shift.name=Press %s for more info +item_group.galacticraft_blocks=Blocchi della Galacticraft +item_group.galacticraft_items=Oggetti della Galacticraft +keybind.map.name=Mappa della galassia +keybind.sensortoggle.name=Attiva/Disattiva gli occhiali-sensore +keybind.spaceshipinv.name=Apri l'inventario del razzo +keybind.vehiclebackward.name=Indietro (veicolo) +keybind.vehicledown.name=Giù (veicolo) +keybind.vehicleforward.name=Avanti (veicolo) +keybind.vehicleleft.name=Sinistra (veicolo) +keybind.vehicleright.name=Destra (veicolo) +keybind.vehicleup.name=Su (veicolo) +moon.moon=Luna +newversion.failed.name=Fallito il controllo della versione della Galacticraft! Riprovando in 15 secondi... +newversion.success.name=Versione vecchia della Galacticraft trovata: +planet.jupiter=Giove +planet.mercury=Mercurio +planet.neptune=Nettuno +planet.overworld=Terra +planet.saturn=Saturno +planet.uranus=Urano +planet.venus=Venere +satellite.spacestation.overworld=Stazione Spaziale Terrestre +schematic.moonbuggy.name=Rover della luna +schematic.rocket_t1.name=Razzo di livello 1 +schematic.rocket_t2.name=Razzo di livello 2 +solarsystem.sol=Sole +star.sol=Sole +tile.air_lock_controller.name=Centralina della chiusura ad aria +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. +tile.air_lock_frame.name=Struttura della chiusura ad aria +tile.air_lock_seal.name=Chiusura ad aria +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. +tile.aluminum_wire.alu_wire.name=Cavo di alluminio +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Its higher capacity boosts efficiency for Tier 2 machines. +tile.aluminum_wire.alu_wire_heavy.name=Cavo di alluminio rinforzato +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. +tile.arclamp.name=Arc Lamp +tile.basic_block_core.block_aluminum_gc.name=Blocco di alluminio +tile.basic_block_core.block_copper_gc.name=Blocco di rame +tile.basic_block_core.block_meteoric_iron_gc.name=Ferro meteorico +tile.basic_block_core.block_tin_gc.name=Blocco di stagno +tile.basic_block_core.deco_block_0.name=Blocco di decorazione in stagno +tile.basic_block_core.deco_block_1.name=Blocco di decorazione in stagno +tile.basic_block_core.ore_aluminum_gc.name=Minerale di alluminio +tile.basic_block_core.ore_copper_gc.name=Minerale di rame +tile.basic_block_core.ore_silicon.name=Minerale di silicone +tile.basic_block_core.ore_tin_gc.name=Minerale di stagno +tile.basic_block_moon.bricks.name=Mattoni Delle Segrete Lunari +tile.basic_block_moon.cheesestone.name=Minerale Di Formaggio +tile.basic_block_moon.coppermoon.name=Minerale Di Rame +tile.basic_block_moon.moondirt.name=Terra Lunare +tile.basic_block_moon.moongrass.name=Torba Lunare +tile.basic_block_moon.moonstone.name=Roccia Lunare +tile.basic_block_moon.tinmoon.name=Minerale Di Stagno +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! +tile.cargo.loader.name=Caricatore del cargo +tile.cargo.unloader.name=Scaricatore del cargo +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. +tile.cheese.name=Blocco Di Formaggio +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. +tile.collector.description=Gli Accumulatori Di Ossigeno raccolgono Ossigeno dalle foglie che li circondano. +tile.collector.name=Assorbitore di ossigeno +tile.compressor.description=Compressor will process ingots into their compressed equivalents. The most essential machine in Galacticraft! +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than its predecessor. +tile.crude_oil.name=Petrolio +tile.crude_oil_moving.name=Petrolio grezzo +tile.crude_oil_still.name=Petrolio grezzo +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. +tile.dishbase.name=Disco per comunicazioni +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. +tile.distributor.name=Distributore di ossigeno +tile.dummyblock.cryogenic_chamber.name=Camera criogenica +tile.dummyblock.launch_pad.name=Piattaforma del razzo +tile.dummyblock.nasa_workbench.name=Tavolo di lavoro della NASA +tile.dummyblock.solar.name=Pannello solare +tile.dummyblock.space_station_base.name=Stazione Spaziale +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. +tile.enclosed.aluminum_wire.name=Cavo di alluminio sigillato +tile.enclosed.heavy_aluminum_wire.name=Cavo di alluminio rinforzato sigillato +tile.enclosed.copper_cable.name=Cavo di rame sigillato +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. +tile.enclosed.glass_fibre_cable.name=Cave in fibra di vetro sigillato +tile.enclosed.gold_cable.name=Cavo d'oro sigillato +tile.enclosed.hv_cable.name=Cavo ad alto voltaggio sigillato +tile.enclosed.lv_cable.name=Cavo di stagno sigillato +tile.enclosed.me_cable.name=Cavo ME sigillato +tile.enclosed.fluid_pipe.name=Tubo di ossigeno sigillato +tile.enclosed.pipe_fluids_cobblestone.name=Tubo in pietrisco per liquidi sigillato +tile.enclosed.pipe_fluids_stone.name=Tubo in pietra per liqudi sigillato +tile.enclosed.pipe_items_cobblestone.name=Tubo in pietrisco sigillato +tile.enclosed.pipe_items_stone.name=Tubo in pietra sigillato +tile.enclosed.pipe_power_gold.name=Tubo in oro per corrente sigillato +tile.enclosed.pipe_power_stone.name=Tubo in pietra per corrente sigillato +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than its predecessor. +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. +tile.fallen_meteor.name=Meteora caduta +tile.fuel.name=Benzina +tile.fuel_block.name=Carburante +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. +tile.fuel_loader.name=Caricatore di benzina +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. +tile.glowstone_torch.name=Torcia in glowstone +tile.landing_pad.buggy_fueler.name=Caricatore del Rover +tile.landing_pad.cargo_pad.name=Piattaforma di lancio del cargo +tile.landing_pad.description=Launch Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. +tile.landing_pad.landing_pad.name=Piattaforma di lancio del razzo +tile.landing_pad_full.name=Piattaforma di lancio del razzo +tile.machine.0.name=Generatore a Carbone +tile.machine.1.name=Stoccaggio di energia +tile.machine.2.name=Fornace elettrica +tile.machine.3.name=Compressore +tile.machine.7.name=Forno elettrico ad arco +tile.machine.8.name=Aggregato spaziale elettrico +tile.machine2.4.name=Compressore elettrico +tile.machine2.5.name=Fabbricatore di circuiti +tile.machine2.6.name=Stoccaggio di ossigeno +tile.moon_stairs_brick.name=Scale in roccia delle segrete lunari +tile.moon_stairs_stone.name=Scale in roccia lunare +tile.ore_copper.name=Minerale di rame +tile.ore_tin.name=Minerale di stagno +tile.oxygen_compressor.0.name=Compressore di ossigeno +tile.oxygen_compressor.1.name=Decompressore di ossigeno +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. +tile.oxygen_detector.description=I rilevatori di ossigeno emetteranno un segnale di pietrarossa al rilevare dell'ossigeno! +tile.oxygen_detector.name=Rilevatore di ossigeno +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. +tile.oxygen_pipe.name=Tubo per ossigeno +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. +tile.parachest.name=Cassa del razzo +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. +tile.refinery.name=Raffineria +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. +tile.rocket_workbench.name=Tavolo di lavoro della NASA +tile.sapling2.birch.name=Alberello di betulla +tile.sapling2.jungle.name=Alberello della giungla +tile.sapling2.oak.name=Alberello di quercia +tile.sapling2.spruce.name=Alberello di pino +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. +tile.sealer.name=Sigillatore di ossigeno +tile.slab_gc_half.moon_bricks_slab.name=Scalino in roccia delle segrete lunari +tile.slab_gc_half.moon_slab.name=Scalino in roccia lunare +tile.slab_gc_half.tin_slab_1.name=Scalino in stagno +tile.slab_gc_half.tin_slab_2.name=Scalino in stagno +tile.solar.advanced_solar.name=Pannello solare avanzato +tile.solar.basic_solar.name=Pannello solare semplice +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). +tile.space_station_base.name=Space Station Arrival Block +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. +tile.spin_thruster.name=Acceleratore di giri +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. +tile.telemetry.name=Telemetry Unit +tile.tin_stairs_1.name=Scale in stagno +tile.tin_stairs_2.name=Scale in stagno +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. +tile.treasure_chest.name=Cassa del tesoro +tile.unlit_torch.name=Torcia +tile.unlit_torch_stone.name=Torcia di pietra +tile.unlit_torch_lit.name=Torcia +tile.unlit_torch_stone_lit.name=Torcia di pietra +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. +tile.view_screen.name=Display +tile.wall_gc.moon.name=Muro in roccia lunare +tile.wall_gc.moon_bricks.name=Muro in raccia delle segrete lunari +tile.wall_gc.tin.name=Muro in stagno diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ja_jp.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ja_jp.lang new file mode 100644 index 00000000..4cf838bf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ja_jp.lang @@ -0,0 +1,815 @@ +checklist.create_grapple.key=グラップリングフック +checklist.equip_oxygen_suit.key=酸素装備一式を装備 +checklist.equip_parachute.key=パラシュートを装備 +command.gcastrominer.count=%s のアストロ採掘機の数は %s 個です +commands.emergencykit=%s は応急キットを渡された! +commands.dimensionteleport=%s が大気圏へ行った%s +commands.dimensiontp.too_many=コマンドの引数が多すぎます! 使用法: %s +commands.gcenergyunits.invalid_units=/GCEnergyUnits コマンドで使えない単位です。使用法: %s +commands.gcenergyunits.no_units=単位の指定が必要です! 使用法: %s +commands.gchouston.confirm.1=こちら宇宙管制センター、もう一度言ってください。 +commands.gchouston.confirm.2=(任務を放棄するなら、確認のために再度 /gchouston を入力する) +commands.gchouston.fail=/gchouston コマンドは宇宙空間orクリエイティブモードでのみ利用可能 +commands.gchouston.help.1=あー、ヒューストン、問題が発生した.... +commands.gchouston.help.2=(任務を放棄し帰還するには/gchouston と入力する) +commands.gchouston.noop=他プレイヤーに /gchouston コマンドを使用できるのはオペレータ(権限)のみです +commands.gchouston.success=OK、スタンバイ、 %s、 オーバーワールドのホーム地点にテレポートします。 +commands.joinrace.no_team=チームの指定が必要です! 使用法: %s +commands.ssinvite.not_found=あなたの宇宙ステーションが見つかりません。まずそこへ行く必要があります! +commands.ssinvite.wrong_usage=コマンドの引数が足りません! 使用法: %s +commands.ssnewowner.wrong_usage=宇宙ステーションIDを認識できません# - 存在するIDですか? 使用法: %s +commands.ssuninvite.no_player=あなたの宇宙ステーションへ入れるプレイヤーリストに %s が見つかりません! +container.cargoloader.name=貨物積み込み機 +container.cargounloader.name=貨物取り出し機 +container.fuelloader.name=燃料給油機 +container.lander.name=着陸船 +container.magneticcrafting.name=クラフト中 +container.oxygencollector.name=酸素収集機 +container.oxygencompressor.name=酸素圧縮機 +container.oxygendecompressor.name=酸素減圧装置 +container.oxygendistributor.name=酸素拡散機 +container.oxygensealer.name=酸素密封機 +container.parachest.name=パラシュートチェスト +container.refinery.name=石油精製機 +container.solaradvanced.name=高性能ソーラー発電機 +container.solarbasic.name=ソーラー発電機 +container.spaceship.name=レベル1 ロケット +container.treasurechest.name=宝箱 +death.attack.meteor_chunk=%1$sに隕石が命中した! +death.attack.oxygen_suffocation=%1$sが酸素不足で死んでしまった +death.attack.spaceship_crash=%1$sのロケットが地面に墜落した +death.attack.sulphuric_acid=%1$sは硫酸に溶けた! +death.attack.thermal=%1$は熱保護を忘れていた +dimension.moon.name=月 +dimension.overworld.name=地球 +dimension.sun.name=太陽 +entity.alien_villager.name=宇宙の村人 +entity.buggy.name=バギー +entity.celestial_screen.name=天体スクリーン +entity.evolved_creeper.name=宇宙のクリーパー +entity.evolved_skeleton.name=宇宙のスケルトン +entity.evolved_skeleton_boss.name=宇宙のスケルトンキング +entity.evolved_spider.name=宇宙のクモ +entity.evolved_zombie.name=宇宙のゾンビ +entity.evolved_enderman.name=宇宙のエンダーマン +entity.evolved_witch.name=宇宙のウィッチ +entity.flag.name=旗 +entity.gcflag.name=旗 +entity.gravity_arrow.name=矢 +entity.lander.name=着陸船 +entity.meteor.name=隕石 +entity.meteor_chunk.name=隕石チャンク +entity.oxygen_bubble.name=酸素バブル +entity.para_chest.name=パラシュートチェスト +entity.rocket_t1.name=レベル1 ロケット +galaxy.milky_way=天の川 +gc.configgui.allow_liquids_grating=Allow liquids to flow into Grating +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_flags=Challenge Mode Flags +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_biome_type_registrations=Disable Biome Type Registrations +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_ore_dict_space_metals=Must use GC's own space metals in recipes +gc.configgui.disable_sapphire_moon=Disable Sapphire Ore Gen on Moon +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.disable_vehicle_camera_changes=Vivecraft: Disable Third-Person and Zoom +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_space_race_manager_popup=Enable Space Race Manager Popup +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on Planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension Type ID +gc.configgui.id_dimension_overworld=Dimension of the Overworld +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension Type ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension Type ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket@[ +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon +gc.configgui.other_mod_ore_gen_i_ds=Custom Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.planet_worldborders=Max x,z for Moon landing +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.static_loaded_new_ss=New Space Stations static loaded? +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Coreのコンフィグ +gc.configgui.use_old_fuel_fluid_i_d=Use legacy fuelgc fluid registration +gc.configgui.use_old_oil_fluid_i_d=Use legacy oilgc fluid registration +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=電池スロット。ここに電池を置く。 +gui.battery_slot.desc.1=または接続したエネルギー源を使う。 +gui.bed_fail.message=おっと、もし眠っている時に酸素が切れたら? 宇宙で眠るためには低温室が必要だ! +gui.buggy.accel.name=加速する +gui.buggy.decel.name=減速する +gui.buggy.inv.name=インベントリー / 燃料 +gui.buggy.storage_space=ストレージ容量 +gui.buggy.turn.name=左折-右折 +gui.button.back.name=戻る +gui.button.disable.name=無効化 +gui.button.disableseal.name=密封を無効化 +gui.button.enable.name=有効化 +gui.button.enableseal.name=密封を有効化 +gui.button.hide_dest.name=隠す +gui.button.loadfuel.name=燃料を給油 +gui.button.loaditems.name=アイテムを積み込む +gui.button.next.name=次へ +gui.button.paintapply.name=塗料を適用 +gui.button.paintmix.name=色をミックス +gui.button.paintreset.name=色をリセット +gui.button.refine.name=精製を開始 +gui.button.stoploading.name=積み込みを停止 +gui.button.stoprefine.name=精製を停止 +gui.button.stopunloading.name=取り出しを停止 +gui.button.unhide_dest.name=公開する +gui.button.unloaditems.name=アイテムを取り出す +gui.button.unlockschematic.name=設計図をアンロック +gui.checkbox.horizontal.name=水平モード +gui.checkbox.invert.name=選択を反転 +gui.checkbox.player_name.name=プレイヤーの名前は +gui.checkbox.player_within.name=プレイヤーが入っている +gui.checkbox.redstone_signal.name=レッドストーン信号で開く +gui.chest.warning.wrongkey=このロックを解除するためには %s ダンジョンのカギが必要です! +gui.choose_planet.desc.moon=住みやすい#酸素がない#重力: 18% +gui.choose_planet.desc.overworld=生命がいっぱい#住みやすい#重力: 100% +gui.chooseplanet.alreadycreated1.name=宇宙ステーションは +gui.chooseplanet.alreadycreated2.name=作成済みです! +gui.chooseplanet.cannotcreate1.name=ここに宇宙ステーションを +gui.chooseplanet.cannotcreate2.name=作成できません! +gui.creative_only.desc=クリエイティブモード専用 +gui.display.nolink=リンクなし +gui.docking_rocket.current_vel.name=現在のターゲット +gui.docking_rocket.distance_from.name=ターゲットからの距離 +gui.docking_rocket.target_vel.name=ターゲットの速度 +gui.docking_rocket.warning.name.0=%s キーで減速 +gui.docking_rocket.warning.name.1=%s キーで加速 +gui.dropbox.player_distance.name.0=1m +gui.dropbox.player_distance.name.1=2m +gui.dropbox.player_distance.name.2=5m +gui.dropbox.player_distance.name.3=10m +gui.electric_compressor.desc.0=進捗 +gui.energy_storage.desc.0=エネストレージ +gui.energy_storage.desc.1=エネ +gui.flag.already_placed=旗が既に置いてある! +gui.frequency_module.desc.0=弱い音波と遠くの信号を +gui.frequency_module.desc.1=受信できる +gui.frequencymodule.warning0=音を聞くためには +gui.frequencymodule.warning1=が必要です +gui.fuel_output.desc.0=空の缶をここに置くと +gui.fuel_output.desc.1=タンクから充填する +gui.fuel_output.desc.2=燃料タンク +gui.fuel_tank.desc.0=燃料タンク。充填する +gui.fuel_tank.desc.1=には燃料給油機が必要 +gui.fuel_tank.desc.2=燃料タンク。燃料缶で +gui.fuel_tank.desc.3=充填できる +gui.fuel_tank.desc.4=燃料タンク +gui.infinite_item.desc=無限 +gui.lander.velocity=速度 +gui.lander.velocityu=m/s +gui.lander.warning2=" +gui.lander.warning3=" キーを長押しで減速 +gui.max_output.desc=最大出力 +gui.message.addnewsch.name=新しい設計図を追加する +gui.message.apply.name=適用 +gui.message.assign_name.name=名前の割り当て +gui.message.atmosphere.name=大気 +gui.message.back.name=戻る +gui.message.breed.name=繁殖 +gui.message.bubble_visible.name=バブルが見える +gui.message.can_create_space_station.name=ここに宇宙ステーションを作成できる +gui.message.cancel.name=キャンセル +gui.message.cannot_create_space_station.name=ここでは宇宙ステーションを作成できない +gui.message.catalog.name=カタログ +gui.message.click_again.0.name=もう一度クリックするとズームする (月と衛星) +gui.message.click_again.1.name=もう一度クリックするとズームする (月) +gui.message.click_again.2.name=もう一度クリックするとズームする (衛星) +gui.message.click_again.3.name=もう一度クリックするとズームする +gui.message.clicklink=クリックで Galacticraft Wiki を開く +gui.message.create_ss.name=作成 +gui.message.daynightcycle.name=昼-夜 サイクル +gui.message.energy=エネルギー +gui.message.environment.name=環境ブースト +gui.message.exit.name=退出 +gui.message.fuel.name=燃料 +gui.message.full.name=いっぱい +gui.message.generating.name=生成中 +gui.message.grow.name=成長 +gui.message.heal.name=回復 +gui.message.help1=Galacticraftのヘルプ +gui.message.help1a=再びこのメッセージを表示するには次を入力 +gui.message.help2=宇宙計画のガイダンス +gui.message.help3=原油のヘルプ +gui.message.in.name=入 +gui.message.launch.name=スタート +gui.message.max_energy=最大エネルギー +gui.message.meansurfacetemp.name=平均表面温度 +gui.message.moon.atmosphere.0.name=ない +gui.message.moon.daynightcycle.0.name=29.5 地球日 +gui.message.moon.meansurfacetemp.0.name=(明るい側面) 253C +gui.message.moon.meansurfacetemp.1.name=(暗い側面) -153C +gui.message.moon.surfacecomposition.0.name=玄武岩質岩 +gui.message.moon.surfacecomposition.1.name=チーズ +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(地球の18%) +gui.message.of.name=/ +gui.message.oil.name=原油 +gui.message.out.name=出 +gui.message.overworld.atmosphere.0.name=窒素、酸素 +gui.message.overworld.atmosphere.1.name=住みやすい +gui.message.overworld.daynightcycle.0.name=1 地球日 +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=石、土 +gui.message.overworld.surfacecomposition.1.name=砂利 +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(地球の100%) +gui.message.prelaunch=発射前チェックリスト +gui.message.rename.name=名前の変更 +gui.message.select_ss.name=宇宙ステーションを選択 +gui.message.ss_owner.name=オーナー: +gui.message.status.name=ステータス +gui.message.strengthen.name=増強 +gui.message.surfacecomposition.name=表面構成 +gui.message.surfacegravity.name=表面重力 +gui.message.thermal_status.name=温度コントロール +gui.message.tier.name=レベル%d +gui.message.unnamed.name=名無し +gui.missing_core.name.0=MicdoodleCoreがmodsフォルダにありません +gui.missing_core.name.1=Galacticraftの読み込みに失敗しました +gui.missing_core.name.2=Close Minecraft を閉じてMicdoodleCoreをインストールしてください +gui.missing_core.name.3=ここをクリックしてダウンロードページを開く +gui.new_schematic.slot.desc.0=新しい設計図スロット。 +gui.new_schematic.slot.desc.1=新しい設計図は惑星と +gui.new_schematic.slot.desc.2=衛星のダンジョンを攻略 +gui.new_schematic.slot.desc.3=すれば見つかる +gui.oil_tank.desc.0=原油タンク。 +gui.oil_tank.desc.1=原油缶で充填できる +gui.oxygen.warning=酸素がない +gui.oxygen_compressor.slot.desc.0=圧縮タンクスロット。ここに酸素タンク +gui.oxygen_compressor.slot.desc.1=を置き呼吸できる酸素で満たす +gui.oxygen_decompressor.slot.desc.0=減圧タンクスロット。ここに酸素タンク +gui.oxygen_decompressor.slot.desc.1=を置き酸素を空にする +gui.oxygen_slot.desc.0=酸素スロット。ここに液体酸素缶を置く。 +gui.oxygen_slot.desc.1=または接続した酸素供給源を使う。 +gui.oxygen_storage.desc.0=酸素ストレージ +gui.oxygen_storage.desc.1=酸素 +gui.oxygen_use.desc=酸素使用量 +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=食料 +gui.player.health=体力 +gui.player.ouch=うわ!!! +gui.receiver.cannot_attach=受信機をここに取り付けできません! +gui.requires_controller.desc=打ち上げコントローラが必要 +gui.rocket.countdown=カウントダウン +gui.rocket.height=高さ +gui.rocket.inv.name=インベントリ / 燃料 +gui.rocket.launch.name=打ち上げ +gui.rocket.launched=打ち上げ +gui.rocket.on_launchpad=発射台に置いてある +gui.rocket.speed=速度 +gui.rocket.turn.name=左右回転 +gui.rocket.updown.name=上下回転 +gui.rocket.warning.fuelinsufficient=自動制御下での安全な打ち上げには燃料が不十分です! +gui.rocket.warning.launchcontroller=フライト前のキャンセルを開始. 打ち上げコントローラを確認してください! +gui.rocket.warning.nofuel=燃料が入ってないのでロケットの打ち上げは出来ません +gui.rocket.warning.nogyroscope=謎の力によってジャイロスコープが暴走している! +gui.rocket.warning.noparachute=パラシュートを持っていません。 もう一度打ち上げを押すと、もう後戻りできません! +gui.rocket_type.0=ストレージ容量: 18 +gui.rocket_type.1=ストレージ容量: 36 +gui.rocket_type.2=ストレージ容量: 56 +gui.rocket_type.3=燃料入り +gui.seconds=s +gui.sensor.advanced=アドバンスモード +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=バブルを見せる +gui.skeleton_boss.message=ボスが消滅しました。戦闘中に部屋を出ないでください!もう一回入るとボスが再出現します。 +gui.space_race.chat.add_success=%sさんがスペースレースに参加しました! +gui.space_race.chat.already_part=このレースにもう入っています! +gui.space_race.chat.invite_received=%sさんからスペースレースに招待されました +gui.space_race.chat.not_found=%sさんが見つかりませんでした。 +gui.space_race.chat.remove_success=%sさんを除外しました +gui.space_race.chat.to_join=%sに参加し、%sを使ってください +gui.space_race.coming_soon=近日公開 +gui.space_race.create.add_players.name=プレイヤーを追加する +gui.space_race.create.back.name=戻る +gui.space_race.create.brush_radius.name=ブラシの半径 +gui.space_race.create.brush_size.name=ブラシの広さ +gui.space_race.create.change_color.name.0=チームの +gui.space_race.create.change_color.name.1=色を +gui.space_race.create.change_color.name.2=変える +gui.space_race.create.close.name=閉じる +gui.space_race.create.customize.name=旗をカスタマイズ +gui.space_race.create.eraser_radius.name=消しゴムの半径 +gui.space_race.create.eraser_size.name=消しゴムの広さ +gui.space_race.create.global_stats.name=グローバルの統計 +gui.space_race.create.invite_player.name=を招待する +gui.space_race.create.player_radius.name=注意:他のプレイヤーは25ブロック以内にいる必要があります! +gui.space_race.create.rem_players.name=プレイヤーを除外する +gui.space_race.create.remove.name=除外する +gui.space_race.create.remove_player.name=プレイヤーを除外する +gui.space_race.create.rename.name=チーム名を変更 +gui.space_race.create.send_invite.name=招待を送る +gui.space_race.create.server_stats.name=サーバーの統計 +gui.space_race.create.title.name.0=スペースレース +gui.space_race.create.title.name.1=の管理 +gui.space_race.create.title.name=スペースレースの管理 +gui.space_race.join.member_count.name=%d人 +gui.space_race.join.name=参加 +gui.space_race.join.owner.name=オーナー +gui.space_race.join.title.name=スペースレースを参加する +gui.space_race.unnamed=名無しのチーム +gui.spacestation.added=%sの宇宙ステーションに入れます! +gui.spacestation.addsuccess=%sさんが宇宙ステーションに入れます! +gui.spacestation.allow_all_false=あなたの宇宙ステーションには誰も入れません! +gui.spacestation.allow_all_true=あなたの宇宙ステーションには全員が入れます! ( /ssinvite -all で取り消します) +gui.spacestation.changesuccess=宇宙ステーションのオーナーを %s から %s に変更しました。 +gui.spacestation.playername=<プレイヤー名> +gui.spacestation.removesuccess=%sさんが宇宙ステーションに入れなくなりました +gui.spacestation.to_allow_entry=この宇宙ステーションに他プレイヤーのアクセスを許可する +gui.spacestation.type_command=タイプ +gui.status.active.name=アクティブ +gui.status.air_lock_closed.name=エアロックが閉じた +gui.status.air_lock_open.name=エアロックが開いた +gui.status.blockedfully.name=太陽が見えていない +gui.status.blockedpartial.name=太陽が部分的に見えている +gui.status.check_pending.name=チェックを保留 +gui.status.check_starting.name=チェックを開始 +gui.status.checking_seal.name=密封をチェック中 +gui.status.collecting.name=収集中 +gui.status.collectingenergy.name=エネを集めている +gui.status.compressing.name=圧縮中 +gui.status.disabled.name=使用停止 +gui.status.fulltank.name=酸素タンクがいっぱい +gui.status.generating.name=発電中 +gui.status.hull_heat.name=温度 +gui.status.idle.name=アイドル +gui.status.missingleaves.name=葉ブロックが不足している +gui.status.missingoxygen.name=酸素が不足している +gui.status.missingpower.name=エネが不足している +gui.status.missingpower.short.name=エネがない +gui.status.missingtank.name=無効な酸素タンク +gui.status.nofuel.name=燃料がない +gui.status.noinvtarget.name=ターゲットにインベントリがない +gui.status.noitems.name=アイテムがない +gui.status.nooil.name=原油がない +gui.status.not_available.name=利用不可 +gui.status.not_generating.name=発電していない +gui.status.notargetload.name=ターゲットがない +gui.status.notargetunload.name=ターゲットがない +gui.status.off.name=切 +gui.status.on.name=入 +gui.status.raining.name=雨 +gui.status.ready.name=準備完了 +gui.status.refining.name=精製中 +gui.status.running.name=実行中 +gui.status.sealed.name=密封されている +gui.status.sealerblocked.name=出力口が塞がっている +gui.status.sun_visible.name=太陽が見える +gui.status.tank_empty.name=酸素タンクが空 +gui.status.targetempty.name=ターゲットの機体が空 +gui.status.targetfull.name=ターゲットの機体がいっぱい +gui.status.unknown.name=不明 +gui.status.unsealed.name=空間が広すぎ/密封されてない +gui.tank.oxygen_remaining=酸素残量 +gui.telemetry_fail.message=最初にその周波数モジュールでエンティティを追跡(左クリック)する必要があります!(それか、身に着けてください) +gui.telemetry_fail_no_frequency_module.message=周波数モジュールを持ってください +gui.telemetry_fail_wearing_it.message=遠隔測定装置とリンクする場合は、周波数モジュールを取り外してください +gui.telemetry_succeed.message=遠隔測定リンクを作成 +gui.thermal_slot.desc.0=温度スロット。'周囲温度コントローラ' +gui.thermal_slot.desc.1=をここに置いてください。(オプション) +gui.thermal_slot.desc.2=注意: より多くのエネルギーを使う! +gui.title.air_lock.name=%sのエアロックコントローラ +gui.tracking.message=トラッキングが有効になりました。リンクするために、遠隔測定装置をこれで右クリックしてください +gui.village.warning.no_freq_mod=彼らと意思疎通するためには周波数モジュールの装備が必要です! +gui.warning.invalid_thermal=熱保護が無効です! +gui.warning.noroom=十分なスペースが無い! +gui.warning=警告! +item.air_fan.name=換気扇 +item.air_vent.name=換気口 +item.basic_item.ambient_thermal_controller.name=周囲温度コントローラ +item.basic_item.canned_food.name=缶詰食品 +item.basic_item.compressed_aluminum.name=圧縮されたアルミ +item.basic_item.compressed_bronze.name=圧縮されたブロンズ +item.basic_item.compressed_copper.name=圧縮された銅 +item.basic_item.compressed_iron.name=圧縮された鉄 +item.basic_item.compressed_steel.name=圧縮された鋼 +item.basic_item.compressed_tin.name=圧縮されたスズ +item.basic_item.dehydrated_apple.name=乾燥リンゴ +item.basic_item.dehydrated_carrot.name=乾燥ニンジン +item.basic_item.dehydrated_melon.name=乾燥スイカ +item.basic_item.dehydrated_potato.name=乾燥ジャガイモ +item.basic_item.frequency_module.name=周波数モジュール +item.basic_item.ingot_aluminum.name=アルミインゴット +item.basic_item.ingot_bronze.name=ブロンズインゴット +item.basic_item.ingot_copper.name=銅インゴット +item.basic_item.ingot_steel.name=鋼インゴット +item.basic_item.ingot_tin.name=スズインゴット +item.basic_item.raw_silicon.name=未製錬シリコン +item.basic_item.solar_module_0.name=ソーラーパネル +item.basic_item.solar_module_1.name=連結ソーラーパネル +item.basic_item.wafer_advanced.name=高性能ウェファー +item.basic_item.wafer_basic.name=基本ウェファー +item.basic_item.wafer_solar.name=ソーラーウェファー +item.battery.name=電池 +item.bucket_fuel.name=燃料入りバケツ +item.bucket_oil.name=原油入りバケツ +item.buggy.name=ムーンバギー +item.buggymat.seat.name=バギー座席 +item.buggymat.storage.name=バギー貯蔵容機 +item.buggymat.wheel.name=バギーホイール +item.canister.copper.name=銅缶 +item.canister.tin.name=スズ缶 +item.canvas.name=キャンバス +item.cheese_block.name=チーズブロック +item.cheese_curd.name=チーズカード +item.compressed_meteoric_iron.name=圧縮された流星鉄 +item.dungeonfinder.name=ダンジョン探知機 +item.empty_liquid_canister.name=空の缶 +item.emergency_kit.description=右クリックで酸素ギアとその他必須アイテムを装備する. 注意:1回だけ使用可能! +item.emergency_kit.name=宇宙応急キット +item.engine.tier1booster.name=レベル1 ブースター +item.engine.tier1engine.name=レベル1 ロケットエンジン +item.flag.name=旗 +item.food.cheese_slice.name=スライスチーズ +item.food.burger_bun.name=バーガーバンズ +item.food.beef_patty_raw.name=牛ひき肉(生) +item.food.beef_patty_cooked.name=ビーフパティ(調理済み) +item.food.cheeseburger.desc=宇宙飛行士はチーズバーガーが大好き! 大満足の一品. +item.food.cheeseburger.name=チーズバーガー +item.food.canned_beef.name=牛肉の缶詰 +item.fuel.name=ロケット燃料 +item.fuel_canister.name=満杯の燃料缶 +item.fuel_canister_partial.name=ある程度入った燃料缶 +item.heavy_plating.name=ヘビーデューティープレート +item.hot_description.name=熱い +item.infinite_battery.name=無限の電池 +item.infinite_oxygen.name=無限の酸素タンク +item.key.t1.name=レベル1 ダンジョン鍵 +item.lunar_sapphire.description=宇宙の村人と交易する際の通貨となる +item.lunar_sapphire.name=ルナサファイア +item.meteor_chunk.name=投擲用の隕石 +item.meteor_chunk_hot.name=投擲用の隕石 +item.meteoric_iron_ingot.name=流星鉄インゴット +item.meteoric_iron_raw.name=未製錬の流星鉄 +item.nose_cone.name=ノーズコーン +item.oil_canister.name=満杯の原油缶 +item.oil_canister_partial.name=ある程度入った原油缶 +item.oil_extractor.name=ポータブル原油抽出機 +item.oxygen_concentrator.name=酸素濃縮機 +item.oxygen_gear.name=酸素ギア +item.oxygen_mask.name=酸素マスク +item.oxygen_tank_heavy_empty.name=空の大型酸素タンク +item.oxygen_tank_heavy_full.name=大型酸素タンク +item.oxygen_tank_light_empty.name=空の小型酸素タンク +item.oxygen_tank_light_full.name=小型酸素タンク +item.oxygen_tank_med_empty.name=空の中型酸素タンク +item.oxygen_tank_med_full.name=中型酸素タンク +item.parachute_black.name=黒色のパラシュート +item.parachute_blue.name=空色のパラシュート +item.parachute_brown.name=茶色のパラシュート +item.parachute_darkblue.name=青色のパラシュート +item.parachute_darkgray.name=灰色のパラシュート +item.parachute_darkgreen.name=緑色のパラシュート +item.parachute_gray.name=薄灰色のパラシュート +item.parachute_lime.name=黄緑色のパラシュート +item.parachute_magenta.name=赤紫色のパラシュート +item.parachute_orange.name=橙色のパラシュート +item.parachute_pink.name=桃色のパラシュート +item.parachute_plain.name=パラシュート +item.parachute_purple.name=紫色のパラシュート +item.parachute_red.name=赤色のパラシュート +item.parachute_teal.name=水色のパラシュート +item.parachute_yellow.name=黄色のパラシュート +item.rocket_fins.name=ロケットフィン +item.rocket_t1.name=レベル1 ロケット +item.schematic.name=NASA作業台 設計図 +item.sensor_glasses.name=センサーゴーグル +item.sensor_lens.name=センサーレンズ +item.standard_wrench.name=レンチ +item.steel_axe.name=ヘビーデューティーの斧 +item.steel_boots.name=ヘビーデューティーのブーツ +item.steel_chestplate.name=ヘビーデューティーのチェストプレート +item.steel_helmet.name=ヘビーデューティーのヘルメット +item.steel_hoe.name=ヘビーデューティーのクワ +item.steel_leggings.name=ヘビーデューティーのレギンス +item.steel_pickaxe.name=ヘビーデューティーのツルハシ +item.steel_pole.name=鋼の棒 +item.steel_shovel.name=ヘビーデューティーのシャベル +item.steel_sword.name=ヘビーデューティーの剣 +item.tier1.desc=レベル1 +item_desc.powerdraw.name=要求エネルギー: %s /s +item_desc.shift.name=%s キーで詳細を表示 +item_group.galacticraft_blocks=Galacticraftのブロック +item_group.galacticraft_items=Galacticraftのアイテム +jei.arc_lamp.info=正面をとても明るく照らす. 高い場所に設置すると最高の効果を得られる! レンチを使用して回転できる. +jei.electric_compressor.info=圧縮機の電動版で、2倍速い! レベル2のパワーでさらに高速に. ホッパーでアイテムを補充/収集できる. +jei.electric_compressor.appeng.info=AE2で自動化するには、2つの異なるMODのインゴットでレシピをセットアップします. https://goo.gl/BwY15G にて全ての情報を閲覧できます. +jei.fluid_pipe.info=あらゆる液体/気体を輸送するためのパイプ.タンクから流体を放出するには、レンチでクリックして'プルモード'に変更する. \nプルモードのパイプはタンク/マシンに流体を供給できない - よって、パイプを最低2ブロック以上の長さにすること! +jei.fuel_loader.info=発射台の隣に設置する. 発射台の上にあるロケットに燃料を補給する. 宇宙への旅 -帰り道も含む- に欠かせない物! +jei.magnetic_crafting.info=アイテムを保持できる作業台. ホッパーからアイテムを受け取り、最後に成功したレシピのアイテムを自動作成できる. +jei.oxygen_collector.info=呼吸可能な酸素混合気体をオーバーワールド -または宇宙空間で- 近くの緑の葉や成長した作物から収集する. \n酸素タンク充填用の酸素圧縮機、酸素拡散機および酸素密封機にパイプを繋げて酸素を輸送できる. +jei.oxygen_distributor.info=宇宙空間にプレイヤー(および他のクリーチャー)が呼吸できるバブル環境を生成する. 酸素収集機や酸素蓄積モジュールから、呼吸可能な酸素混合気体をこのマシンに供給できる. +jei.oxygen_sealer.info=宇宙基地の1部屋を呼吸可能な空気で満たす. 酸素収集機や酸素蓄積モジュールから、呼吸可能な酸素混合気体をこのマシンに供給できる. 部屋の壁はすべて固体でなければならない. \nセンサーゴーグルで空気の漏れ口を見つけてください! \n酸素密封機1台の最大部屋サイズは10x10x8ブロック.大きな部屋には複数の酸素密封機を使用してください! +jei.wrench.info=ほとんどのGalacticraftマシンはレンチを持って右クリックすると回転する. \nほとんどの電動マシンはレンチを持ってShift+右クリックすると、電力やその他資源の入出力の位置を変更できる. +keybind.map.name=ギャラクシーマップ +keybind.sensortoggle.name=センサーグラスのモード切替 +keybind.spaceshipinv.name=スペースシップのインベントリの開閉 +keybind.vehiclebackward.name=機械 後方キー +keybind.vehicledown.name=機械 下キー +keybind.vehicleforward.name=機械 前方キー +keybind.vehicleleft.name=機械 左キー +keybind.vehicleright.name=機械 右キー +keybind.vehicleup.name=機械 上キー +moon.moon=月 +newversion.failed.name=GalacticraftのUpdate情報が確認出来ませんでした。 15秒後にもう一度確認してみます +newversion.success.name=Galacticraftの新しいバージョンがあります: +planet.jupiter=木星 +planet.mercury=水星 +planet.neptune=海王星 +planet.overworld=地球 +planet.saturn=土星 +planet.uranus=天王星 +planet.venus=金星 +satellite.spacestation.overworld=オーバーワールド宇宙ステーション +schematic.moonbuggy.name=ムーンバギー +schematic.rocket_t1.name=レベル1 ロケット +schematic.rocket_t2.name=レベル2 ロケット +solarsystem.sol=太陽 +star.sol=太陽 +tile.air_lock_controller.name=エアロックコントローラ +tile.air_lock_frame.description=エアロックフレームをポータル型に配置し、そのうち1ブロックをコントローラに置き換えれば、エアロックとして機能する。 +tile.air_lock_frame.name=エアロックフレーム +tile.air_lock_seal.name=エアロックシール +tile.aluminum_wire.alu_wire.description=エネルギー源を消費先の機械に接続するために使用する +tile.aluminum_wire.alu_wire.name=アルミワイヤー +tile.aluminum_wire.alu_wire_heavy.description=エネルギー源を消費先の機械に接続するために使用する。容量が大きいため、レベル2機械の効率が向上する。 +tile.aluminum_wire.alu_wire_heavy.name=大型アルミワイヤー +tile.aluminum_wire.alu_wire_switch.description=レッドストーン信号でオフに切り替えない限り、アルミワイヤーと同じように接続できる. +tile.aluminum_wire.alu_wire_switch.name=切り替え可能なアルミワイヤー +tile.aluminum_wire.alu_wire_switch_heavy.description=レッドストーン信号でオフに切り替えない限り、大型アルミワイヤーと同じように接続できる. +tile.aluminum_wire.alu_wire_switch_heavy.name=切り替え可能な大型アルミワイヤー +tile.arclamp.description=広範囲を強い光で照らすために使用する。ほとんどのMobは逃げる。 +tile.arclamp.name=アークランプ +tile.basic_block_core.block_aluminum_gc.name=アルミブロック +tile.basic_block_core.block_copper_gc.name=銅ブロック +tile.basic_block_core.block_meteoric_iron_gc.name=固体の流星鉄 +tile.basic_block_core.block_tin_gc.name=スズブロック +tile.basic_block_core.block_silicon_gc.name=シリコンブロック +tile.basic_block_core.deco_block_0.name=スズ装飾ブロック +tile.basic_block_core.deco_block_1.name=スズ装飾ブロック +tile.basic_block_core.ore_aluminum_gc.name=アルミ鉱石 +tile.basic_block_core.ore_copper_gc.name=銅鉱石 +tile.basic_block_core.ore_silicon.name=シリコン鉱石 +tile.basic_block_core.ore_tin_gc.name=スズ鉱石 +tile.basic_block_moon.bricks.name=レンガ +tile.basic_block_moon.cheesestone.name=チーズ鉱石 +tile.basic_block_moon.coppermoon.name=銅鉱石 +tile.basic_block_moon.moondirt.name=月の土 +tile.basic_block_moon.moongrass.name=月の草 +tile.basic_block_moon.moonstone.name=月の石 +tile.basic_block_moon.sapphiremoon.name=サファイア鉱石 +tile.basic_block_moon.tinmoon.name=スズ鉱石 +tile.buggy_pad.description=3x3の正方形に敷くと、燃料給油機を取り付けてパッド上のバギーに給油できる。ロケットの打ち上げには使えない! +tile.cargo.loader.name=貨物積み込み機 +tile.cargo.unloader.name=貨物取り出し機 +tile.cargo_loader.description=ブロックやアイテムを、ストレージ容量のあるロケットや車両へ積み込む。発射台/燃料パッドに取り付ける必要がある。 +tile.cargo_unloader.description=ブロックやアイテムを、ストレージ容量のあるロケットや車両から取り出す。発射台/燃料パッドに取り付ける必要がある。 +tile.cheese.description=月のチーズから作ることができ、設置して食べられる。 +tile.cheese.name=チーズブロック +tile.circuit_fabricator.description=基本的な材料を、高度な機械に使われるシリコンウェファーに加工する。 +tile.coal_generator.description=石炭や石炭ブロックを燃やして発電する。最も簡単だが効率も一番低いエネルギー収集方法。 +tile.collector.description=周囲の葉から収集した酸素を蓄積する。 +tile.collector.name=酸素収集機 +tile.compressor.description=インゴットを圧縮された等価物へと加工する。Galacticraftで最も重要な機械! +tile.compressor_electric.description=インゴットを圧縮された等価物へと加工する。1度に2つ圧縮するため、下位モデルよりも効率的。 +tile.concealed_detector.name=プレイヤー検知器 +tile.concealed_redstone.name=隠しレッドストーンワイヤー +tile.concealed_repeater.name=隠しレッドストーンリピーター +tile.crude_oil.name=原油 +tile.crude_oil_moving.name=原油 +tile.crude_oil_still.name=原油 +tile.deconstructor.description=使い古したロケットやアイテムを分解し、再利用できる材料を回収する. +tile.dishbase.description=宇宙ステーションの位置を追跡し、あなたの宇宙基地からの通信を受信できる。 +tile.dishbase.name=アンテナ +tile.distributor.description=内部タンクを使い、拡散機を中心に外側へ酸素バブルを放出する。バブルの中では安全な呼吸が可能になる。 +tile.distributor.name=酸素拡散機 +tile.dummyblock.cryogenic_chamber.name=低温室 +tile.dummyblock.launch_pad.name=発射台 +tile.dummyblock.nasa_workbench.name=NASA作業台 +tile.dummyblock.solar.name=ソーラー発電機 +tile.dummyblock.space_station_base.name=宇宙ステーション基地 +tile.electric_furnace_tier1.description=従来の石炭かまどより高速な代替手段として使用できる。 +tile.electric_furnace_tier2.description=従来の石炭かまどや電気炉よりも優れた高速な代替手段として使用できる。1つの鉱石から2つのインゴットを生産する! +tile.emergency_box.description=惑星の最初の着陸地点の近くに設置しよう.開けると中に応急キットがある. Mob除けにもなる! +tile.emergency_box.filled.name=応急ポスト(キット入り) +tile.emergency_box.name=応急ポスト +tile.enclosed.aluminum_wire.name=密封用 アルミワイヤー +tile.enclosed.copper_cable.name=密封用 銅ケーブル +tile.enclosed.description=宇宙基地の壁のように空気を通せない個所では、密封可能なブロックを使う必要がある。 +tile.enclosed.fluid_pipe.name=密封用 酸素パイプ +tile.enclosed.glass_fibre_cable.name=密封用 ガラス繊維ケーブル +tile.enclosed.gold_cable.name=密封用 金ケーブル +tile.enclosed.heavy_aluminum_wire.name=密封用 大型アルミワイヤー +tile.enclosed.hv_cable.name=密封用 HVケーブル +tile.enclosed.lv_cable.name=密封用 低電流ケーブル +tile.enclosed.me_cable.name=密封用 MEケーブル +tile.enclosed.pipe_fluids_cobblestone.name=密封用 丸石の防水パイプ +tile.enclosed.pipe_fluids_stone.name=密封用 石の防水パイプ +tile.enclosed.pipe_items_cobblestone.name=密封用 丸石の輸送パイプ +tile.enclosed.pipe_items_stone.name=密封用 石の輸送パイプ +tile.enclosed.pipe_power_gold.name=密封用 金の導電性パイプ +tile.enclosed.pipe_power_stone.name=密封用 石の導電性パイプ +tile.energy_storage_module_tier1.description=大量のエネルギーを蓄積し、後で使用できる。 +tile.energy_storage_module_tier2.description=大量のエネルギーを蓄積し、後で使用できる。 下位モデルより多く蓄積/出力できる。 +tile.fallen_meteor.description=ほとんど、あるいは全く大気のない惑星/衛星で見付けられる。壊すと流星鉄をドロップする。 +tile.fallen_meteor.name=隕石 +tile.fluid_pipe.description=液体と気体を供給源から目標ブロックへ輸送する。レンチでモードを切り替える。 +tile.fluid_pipe.name=流体パイプ +tile.fluid_pipe_pull.description=液体と気体を供給源から目標ブロックへ輸送する。レンチでモードを切り替える。 +tile.fluid_pipe_pull.name=流体パイプ +tile.fluid_tank.description=液体と気体を蓄積し、後で使用できる。 +tile.fluid_tank.name=流体タンク +tile.fuel.name=燃料 +tile.fuel_block.name=燃料 +tile.fuel_loader.description=発射台や燃料パッドに接続し、パッド上のロケットや車両に燃料を補給する。 +tile.fuel_loader.name=燃料給油機 +tile.glowstone_torch.description=木材の松明が燃えない酸素がない場所での照明に最適。 +tile.glowstone_torch.name=グロウストーン松明 +tile.grating.name=格子 +tile.landing_pad.buggy_fueler.name=バギー燃料パッド +tile.landing_pad.cargo_pad.name=荷物発射台 +tile.landing_pad.description=3x3の正方形に敷いてロケットを設置する。燃料給油機、貨物積み込み機、および打ち上げコントローラを取り付け可能。 +tile.landing_pad.landing_pad.name=発射台 +tile.landing_pad_full.name=発射台 +tile.machine.0.name=火力発電機 +tile.machine.1.name=エネルギー蓄積モジュール +tile.machine.2.name=電気炉 +tile.machine.3.name=圧縮機 +tile.machine.7.name=アーク炉 +tile.machine.8.name=エネルギー蓄積クラスター +tile.machine2.4.name=電気圧縮機 +tile.machine2.5.name=回路製作機 +tile.machine2.6.name=酸素蓄積モジュール +tile.machine2.10.name=解体機 +tile.machine3.9.name=染色機 +tile.magnetic_table.name=磁気作業台 +tile.magnetic_table.description=置かれたアイテムをインベントリに保持する!アイテムはShift+右クリックで取り出せる. ホッパーでアイテムの出し入れができ、最後に作成したレシピのアイテムを自動作成しようとする. +tile.moon_stairs_brick.name=月ダンジョンのレンガ階段 +tile.moon_stairs_stone.name=月の石の階段 +tile.ore_copper.name=銅鉱石 +tile.ore_tin.name=スズ鉱石 +tile.oxygen_compressor.0.name=酸素圧縮機 +tile.oxygen_compressor.1.name=酸素減圧装置 +tile.oxygen_compressor.description=内部ストレージから酸素タンクへ酸素を充填する。 +tile.oxygen_decompressor.description=酸素タンクから内部ストレージへ酸素を取り出す。 +tile.oxygen_detector.description=周囲に酸素がある場合にレッドストーン信号を出力する。 +tile.oxygen_detector.name=酸素センサー +tile.oxygen_storage_module.description=酸素を蓄積し、後で使用できる。 +tile.painter.description=真空ガラス、照明パネル、その他ペイント可能アイテムを染色する。 任意のブロック-または染料-で鮮やかな色を作ろう! +tile.panel_lighting.description=宇宙空間用の照明パネル!レンチで回転できる. 外観の変更方法:スニークキーを押しながら、目的のブロックに対してパネルを設置する. +tile.panel_lighting_0.name=照明パネル(正方形) +tile.panel_lighting_1.name=照明パネル(スポットライト) +tile.panel_lighting_2.name=照明パネル(直線) +tile.panel_lighting_3.name=照明パネル(暗め) +tile.panel_lighting_4.name=照明パネル(暗め) +tile.parachest.description=地球のような特定の惑星/衛星に着陸した後、空から落ちてくる。直前に打ち上げたロケット、燃料、貨物が入っている。 +tile.parachest.name=パラシュートチェスト +tile.platform.description=2x2に設置するとプラットフォームを形成し、上下にある次のプラットフォームへとプレイヤーを運ぶ. スニーク = 下降 : ジャンプ = 上昇. +tile.platform.name=プラットフォーム +tile.refinery.description=エネルギーを消費して原油を精製し、ロケットや車両の燃料を生産する。 +tile.refinery.name=石油精製機 +tile.rocket_workbench.name=NASA作業台 +tile.rocket_workbench.description=多くの高度な部品や車両を製造する。新しい設計図を見付けて追加できる。 +tile.sapling2.birch.name=シラカバの苗木 +tile.sapling2.jungle.name=ジャングルの苗木 +tile.sapling2.oak.name=オークの苗木 +tile.sapling2.spruce.name=マツの苗木 +tile.sealer.description=空間が密閉されていれば、呼吸可能な空気で空間を満たす。 +tile.sealer.name=酸素密封機 +tile.slab_gc_half.moon_bricks_slab.name=月ダンジョンのハーフブロックレンガ +tile.slab_gc_half.moon_slab.name=月の石のハーフブロック +tile.slab_gc_half.tin_slab_1.name=スズ装飾ハーフブロック +tile.slab_gc_half.tin_slab_2.name=スズ装飾ハーフブロック +tile.solar.advanced_solar.name=高性能ソーラー発電機 +tile.solar.basic_solar.name=ソーラー発電機 +tile.solar_adv.description=太陽から光エネルギーを集め蓄積/使用できる。最適なエネルギー収集のためにパネル角度を自動調整する。 +tile.solar_basic.description=太陽から光エネルギーを集め蓄積/使用できる。正午に最もエネルギーを収集する(調整不可能)。 +tile.space_glass.description=宇宙基地用の真空密封ガラス. お近くの染色機でガラス枠を好みの色にペイントできる! +tile.space_glass.clear.description=宇宙の素晴らしい景色を見渡せる透明なガラス.水中でもクリアに見える. +tile.space_glass.strong.description=丈夫な防爆ガラス.透明なアルミでできている... +tile.space_glass_clear.name=真空ガラス(透明) +tile.space_glass_vanilla.name=真空ガラス +tile.space_glass_strong.name=真空ガラス(強化) +tile.space_station_base.name=宇宙ステーションの到着ブロック +tile.spin_thruster.description=スピンスラスタは、宇宙ステーションを回転させるために使う。 +tile.spin_thruster.name=スピンスラスタ +tile.telemetry.description=リンクされたロケット、プレイヤー、Mobから有用なデータを収集する。モニターの近くに設置するとよい。周波数モジュールを使ってデータリンクを確立する。 +tile.telemetry.name=遠隔測定装置 +tile.tin_stairs_1.name=スズ装飾階段 +tile.tin_stairs_2.name=スズ装飾階段 +tile.treasure_chest.description=月のダンジョンに生成される。最終ボスを倒した後に解錠できる。 +tile.treasure_chest.name=宝箱 +tile.unlit_torch.name=松明 +tile.unlit_torch_stone.name=石の松明 +tile.unlit_torch_lit.name=松明 +tile.unlit_torch_stone_lit.name=石の松明 +tile.view_screen.description=宇宙基地の最後の仕上げ。右クリックすると表示されている情報が変わる。 +tile.view_screen.name=モニター +tile.wall_gc.moon.name=月の石の壁 +tile.wall_gc.moon_bricks.name=月ダンジョンのレンガ壁 +tile.wall_gc.tin.name=スズ装飾壁 + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=月と...他の星々を冒険しよう! +advancement.galacticraft.coal_generator.title=火力発電 +advancement.galacticraft.coal_generator.description=火力発電機を作る +advancement.galacticraft.circuit_fabricator.title=製造 +advancement.galacticraft.circuit_fabricator.description=ウェファー製造のために回路製作機を作る +advancement.galacticraft.basic_wafer.title=美味しいウェハース +advancement.galacticraft.basic_wafer.description=基本ウェファーを作る(食べちゃダメ) +advancement.galacticraft.advanced_wafer.title=黄金 +advancement.galacticraft.advanced_wafer.description=ウェファー製造のために回路製作機を作る +advancement.galacticraft.compressor.title=圧縮 +advancement.galacticraft.compressor.description=圧縮機を作る +advancement.galacticraft.solar.title=再生可能エネルギー +advancement.galacticraft.solar.description=ソーラー発電機を作る +advancement.galacticraft.advanced_solar.title=速い + 効率的 +advancement.galacticraft.advanced_solar.description=高性能ソーラー発電機を作る +advancement.galacticraft.electric_compressor.title=電気アップグレード +advancement.galacticraft.electric_compressor.description=電気圧縮機を作る +advancement.galacticraft.oil.title=粘着性物質 +advancement.galacticraft.oil.description=原油に落ちる +advancement.galacticraft.refiery.title=精製の時間! +advancement.galacticraft.refiery.description=石油精製機を作る +advancement.galacticraft.rocket_fuel.title=ロケット燃料 +advancement.galacticraft.rocket_fuel.description=石油精製機で原油を精製する +advancement.galacticraft.oxygen_collector.title=酸素は入っていません +advancement.galacticraft.oxygen_collector.description=酸素収集機を作る +advancement.galacticraft.oxygen_compressor.title=空気を圧縮 +advancement.galacticraft.oxygen_compressor.description=酸素圧縮機を作る +advancement.galacticraft.fill_tank.title=宇宙に行くための空気 +advancement.galacticraft.fill_tank.description=酸素タンクを満タンにする +advancement.galacticraft.fill_all_tanks.title=酸素備蓄 +advancement.galacticraft.fill_all_tanks.description=全種類の酸素タンクを満タンにする +advancement.galacticraft.all_oxygen_gear.title=準備完了 +advancement.galacticraft.all_oxygen_gear.description=宇宙空間での呼吸に必要な全アイテムを作る +advancement.galacticraft.rocket_workbench.title=スペースエンジニア +advancement.galacticraft.rocket_workbench.description=NASA作業台を作る +advancement.galacticraft.rocket_t1.title=ロケットを手に入れた! +advancement.galacticraft.rocket_t1.description=金属を溶接してロケットを作る +advancement.galacticraft.fuel_loader.title=満タンにして! +advancement.galacticraft.fuel_loader.description=燃料給油機を作る +advancement.galacticraft.launch_rocket.title=離陸! +advancement.galacticraft.launch_rocket.description=最初のロケットを打ち上げる +advancement.galacticraft.moon.title=月! +advancement.galacticraft.moon.description=月に着陸する +advancement.galacticraft.create_space_station.title=宇宙ステーション +advancement.galacticraft.create_space_station.description=君の宇宙ステーションを作る! +advancement.galacticraft.spin_thruster.title=眩暈がするううう +advancement.galacticraft.spin_thruster.description=スピンスラスタを作る +advancement.galacticraft.moon_dungeon.title=ウィザーより邪悪 +advancement.galacticraft.moon_dungeon.description=ダンジョンで宇宙のスケルトンキングを発見する +advancement.galacticraft.dungeon_key_moon.title=鍵を手に入れた +advancement.galacticraft.dungeon_key_moon.description=ダンジョンに隠れているボスを倒し、鍵を盗む +advancement.galacticraft.moon_buggy_schematic.title=欠陥のある設計図 +advancement.galacticraft.moon_buggy_schematic.description=ムーン§oバギー の設計図を手に入れる +advancement.galacticraft.moon_buggy.title=バギー +advancement.galacticraft.moon_buggy.description=金属を溶接してムーンバギーを作る \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ko_kr.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ko_kr.lang new file mode 100644 index 00000000..a2b22771 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ko_kr.lang @@ -0,0 +1,823 @@ +checklist.create_grapple.key=쇠갈고리 제작 +checklist.equip_oxygen_suit.key=산소 호흡기 장착 +checklist.equip_parachute.key=낙하산 장착 +command.gcastrominer.count=%s 의 천체 광업기계 수는 %s 입니다. +commands.emergencykit=%s가 응급상자를 받았습니다! +commands.dimensionteleport=%s 님이 해당 대기권으로 진입하였습니다:%s +commands.dimensiontp.too_many=명령어 인수가 너무 많습니다! 사용법: %s +commands.gcenergyunits.invalid_units=단위가 유효하지 않은 /GCEnergyUnits 명령어 입니다. 사용법: %s +commands.gcenergyunits.no_units=단위가 구체적으로 명시되어야 합니다! 사용법: %s +commands.gchouston.confirm.1=여기는 우주통제센터입니다, 다시 말해주세요? +commands.gchouston.confirm.2=(임무 포기를 하고 싶다면 /gchouston을 다시 한번 입력하여 확인하세요.) +commands.gchouston.fail=/gchouston 명령어는 오직 우주 또는 크리에이티브 모드에서만 가능합니다. +commands.gchouston.help.1=음, 나로, 우리 문제가 있어요. +commands.gchouston.help.2=(임무를 포기하고 홈으로 돌아가고 싶으면 /gchouston을 입력하세요.) +commands.gchouston.noop=다른 플레이어에게 /gchouston를 사용하는 것은 오직 운영자만 가능합니다. +commands.gchouston.success=OK, 준비됬죠?, %s, 오버월드 홈 위치로 순간이동합니다. +commands.joinrace.no_team=팀이 구체적으로 명시되어야 합니다! 사용법: %s +commands.ssinvite.not_found=당신의 플레이어 이름으로 정거장을 찾을 수 없습니다. 먼저 그곳에 직접 도착해야 합니다! +commands.ssinvite.wrong_usage=명령어 인수가 부족합니다! 사용법: %s +commands.ssnewowner.wrong_usage=우주정거장 ID#를 인식할 수 없습니다 - 그것은 존재합니까? 사용법: %s +commands.ssuninvite.no_player=%s를 우주정거장 리스트에서 찾을 수 없습니다! +container.cargoloader.name=화물 적재기 +container.cargounloader.name=화물 적하기 +container.fuelloader.name=연료 적재기 +container.lander.name=착륙기 +container.magneticcrafting.name=자석 조합대 +container.oxygencollector.name=산소 수집기 +container.oxygencompressor.name=산소 압축기 +container.oxygendecompressor.name=산소 감압기 +container.oxygendistributor.name=산소 배급기 +container.oxygensealer.name=산소 밀봉기 +container.parachest.name=낙하상자 +container.refinery.name=정제기 +container.solaradvanced.name=고급 태양광 전지판 +container.solarbasic.name=기초 태양광 전지판 +container.spaceship.name=1티어 로켓 +container.treasurechest.name=보물 상자 +death.attack.meteor_chunk=%1$s이(가) 운석 덩어리에 맞아 사망했습니다! +death.attack.oxygen_suffocation=%1$s이(가) 산소 부족으로 사망했습니다! +death.attack.spaceship_crash=%1$s의 로켓이 땅으로 추락했습니다! +death.attack.sulphuric_acid=%1$s이(가) 황산에 용해되었습니다! +death.attack.thermal=%1$s, 열보호 장비를 잊으셨군요. +dimension.moon.name=달 +dimension.overworld.name=오버월드 (지구) +dimension.sun.name=태양 +entity.alien_villager.name=외계주민 +entity.buggy.name=월면차 +entity.celestial_screen.name=천장 스크린 +entity.evolved_creeper.name=진화된 크리퍼 +entity.evolved_skeleton.name=진화된 스켈레톤 +entity.evolved_skeleton_boss.name=진화된 스켈레톤 보스 +entity.evolved_spider.name=진화된 거미 +entity.evolved_zombie.name=진화된 좀비 +entity.evolved_enderman.name=진화된 엔더맨 +entity.evolved_witch.name=진화된 마녀 +entity.flag.name=깃발 +entity.gcflag.name=우주 깃발 +entity.gravity_arrow.name=중력 화살 +entity.lander.name=착륙기 +entity.meteor.name=운석 +entity.meteor_chunk.name=운석 덩어리 +entity.oxygen_bubble.name=산소 기포 +entity.para_chest.name=낙하상자 +entity.rocket_t1.name=1티어 로켓 +galaxy.milky_way=은하수 (우리 은하) +gc.configgui.allow_liquids_grating=창살로 액체가 흐르게 합니다. +gc.configgui.alternate_canister_recipe=대체 깡통 조합법 +gc.configgui.asteroids_flags=도전 모드 깃발 +gc.configgui.asteroids_start=도전 모드(소행성에서 시작) +gc.configgui.biome_id_base=갤럭틱크래프트용 바이옴 ID기준 +gc.configgui.detectable_i_ds=감지가능 ID +gc.configgui.disable_biome_type_registrations=바이옴 유형 등록 없애기 +gc.configgui.disable_cheese_moon=달 치즈 없애기 +gc.configgui.disable_copper_moon=달 구리 없애기 +gc.configgui.disable_lander=착륙기 없애기 +gc.configgui.disable_moon_village_gen=달 마을 없애기 +gc.configgui.disable_ore_dict_space_metals=갤러틱크래프트 자체의 우주 금속을 조합법에 사용하기 +gc.configgui.disable_sapphire_moon=달에 있는 사파이어 광석 없애기 +gc.configgui.disable_space_station_creation=우주정거장 생성 없애기 +gc.configgui.disable_spaceship_grief=로켓 폭발 없애기 +gc.configgui.disable_spaceship_particles=로켓 입자 없애기 +gc.configgui.disable_tin_moon=달 주석 없애기 +gc.configgui.disable_update_check=업데이트 확인 없애기 +gc.configgui.disable_vehicle_camera_changes=바이브크래프트: 3인칭 및 확대/축소 없애기 +gc.configgui.dungeon_boss_health_mod=던전 보스 체력 변경 +gc.configgui.enable_aluminum_ore_gen=오버월드 알루미늄 정보 +gc.configgui.enable_copper_ore_gen=오버워드 구리 정보 +gc.configgui.enable_debug=콘솔에 디버깅 메시지 표시 +gc.configgui.enable_other_mods_features=다른 모드의 생성기 이용 +gc.configgui.enable_retrogen_oil=오버월드 레트로겐유 +gc.configgui.enable_sealer_edge_checks=밀봉기 모서리 확인 +gc.configgui.enable_silicon_ore_gen=오버월드 규소 정보 +gc.configgui.enable_space_race_manager_popup=우주 경주 관리자 팝업 사용 +gc.configgui.enable_thaum_craft_nodes=사움크래프트의 마디를 행성에 사용 +gc.configgui.enable_tin_ore_gen=오버월드 주석 정보 +gc.configgui.external_oil_gen=외부 기름 정보 +gc.configgui.force_overworld_respawn=오버월드 리스폰 강요 +gc.configgui.hard_mode=난이도를 어렵게 하기 +gc.configgui.id_achiev_base=기초 업적 ID +gc.configgui.id_dimension_moon=달 세계 ID +gc.configgui.id_dimension_overworld=오버월드의 차원 +gc.configgui.id_dimension_overworld_orbit=우주정거장 차원 ID +gc.configgui.id_dimension_overworld_orbit_static=우주정거장 고정 차원 ID +gc.configgui.id_schematic_add_schematic=설계도 ID "설계도 추가" +gc.configgui.id_schematic_moon_buggy=설계도 ID 월면차 +gc.configgui.id_schematic_rocket_t1=설계도 ID 1티어 로켓 +gc.configgui.key_override_fuel_level=설정: 로켓 연료 GUI +gc.configgui.key_override_toggle_adv_goggles=설정: 진화된 고글 +gc.configgui.map_scroll_invert=지도 스크롤 뒤집기 +gc.configgui.map_scroll_sensitivity=지도 스크롤 마우스 감도 +gc.configgui.meteor_block_damage=유성 블록 손상 활성화 +gc.configgui.meteor_spawn_mod=유성 스폰 수식 +gc.configgui.more_stars=더 많은 별 표시하기 +gc.configgui.oil_gen_factor=기름 정보 요인 +gc.configgui.ore_dict_silicon=OreDict에 규소 이름이 있습니다. +gc.configgui.other_mod_ore_gen_i_ds=행성에 다른 모드 광석 이용 +gc.configgui.override_capes=곡식 기증 기각 +gc.configgui.override_map=설정: 은하 지도 +gc.configgui.oxygen_indicator_bottom=산소 미터 아래로 +gc.configgui.oxygen_indicator_left=산소 미터 왼쪽으로 +gc.configgui.planet_worldborders=달 착륙을 위해 x, z를 최대화합니다. +gc.configgui.quick_mode=빠른 게임 (쉬움) +gc.configgui.rocket_disable_overworld_return=로켓 오버월드 복귀 금지 +gc.configgui.rocket_disabled_dimensions=로켓 차원 접금 불가 +gc.configgui.rocket_fuel_factor=로켓 연료 요인 +gc.configgui.sealable_i_ds=밀봉 블록 +gc.configgui.space_station_energy_scalar=우주정거장 에너지 변경 +gc.configgui.space_stations_require_permission=우주정거장 허가 +gc.configgui.static_loaded_dimensions=로딩된 차원 고정 +gc.configgui.static_loaded_new_ss=새 우주정거장 고정이 적재되었나요? +gc.configgui.suffocation_cooldown=질식 쿨다운 +gc.configgui.suffocation_damage=질식 데미지 +gc.configgui.title=갤럭티크래프트 코어 환경설정 +gc.configgui.use_old_fuel_fluid_i_d=연료유 등록 사용 +gc.configgui.use_old_oil_fluid_i_d=오일 등록 사용 +gc.configgui.whitelist_co_f_h_core_gen=CoFHCore 월드 화이트리스트 +gui.battery_slot.desc.0=배터리 슬롯, 배터리를 이곳에 장착하세요. +gui.battery_slot.desc.1=혹은 케이블을 이용해 전력공급을 하세요. +gui.bed_fail.message=오 이런, 내가 잠든 사이에 산소가 부족해지면? 우주에서 잘 때는 극저온실이 필요합니다! +gui.buggy.accel.name=가속 +gui.buggy.decel.name=감속 +gui.buggy.inv.name=인벤토리 / 연료 +gui.buggy.storage_space=저장 용량 +gui.buggy.turn.name=좌/우회전 +gui.button.back.name=뒤로 +gui.button.disable.name=멈추기 +gui.button.disableseal.name=밀봉 파기하기 +gui.button.enable.name=가동하기 +gui.button.enableseal.name=밀봉 가동하기 +gui.button.hide_dest.name=숨기기 +gui.button.loadfuel.name=연료 채우기 +gui.button.loaditems.name=아이템 적재하기 +gui.button.next.name=다음 +gui.button.paintapply.name=도색하기 +gui.button.paintmix.name=색 혼합하기 +gui.button.paintreset.name=색 되돌리기 +gui.button.refine.name=정제하기 +gui.button.stoploading.name=적재 멈추기 +gui.button.stoprefine.name=정제 멈추기 +gui.button.stopunloading.name=적하 멈추기 +gui.button.unhide_dest.name=보이기 +gui.button.unloaditems.name=아이템 적하하기 +gui.button.unlockschematic.name=설계도 잠금해제 +gui.checkbox.horizontal.name=경계 모드 +gui.checkbox.invert.name=선택 뒤집기 +gui.checkbox.player_name.name=플레이어 이름 +gui.checkbox.player_within.name=플레이어와의 거리 +gui.checkbox.redstone_signal.name=레드스톤 신호시 열림 +gui.chest.warning.wrongkey=이 상자를 열려면 아마 %s티어 던전 열쇠가 필요합니다! +gui.choose_planet.desc.moon=거주 가능#산소 부족#중력: 18% +gui.choose_planet.desc.overworld=생명으로 가득함#거주 가능#중력: 100% +gui.chooseplanet.alreadycreated1.name=우주정거장이 이미 +gui.chooseplanet.alreadycreated2.name=지어져 있습니다! +gui.chooseplanet.cannotcreate1.name=여기에 우주정거장을 +gui.chooseplanet.cannotcreate2.name=지을 수 없습니다! +gui.crafting_memory.desc.0=이 자석 조합대는 더 많은 크래프트를 할 수 있습니다! +gui.crafting_memory.desc.1=레시피를 기억하려면, 한 가지 아이템을 만드세요. +gui.creative_only.desc=크리에이티브 모드용 +gui.display.nolink=링크 없음 +gui.docking_rocket.current_vel.name=현재 속도 +gui.docking_rocket.distance_from.name=목표까지의 거리 +gui.docking_rocket.target_vel.name=목표 속도 +gui.docking_rocket.warning.name.0=%s을 눌러 감속하시오 +gui.docking_rocket.warning.name.1=%s을 눌러 가속하시오 +gui.dropbox.player_distance.name.0=1 미터 +gui.dropbox.player_distance.name.1=2 미터 +gui.dropbox.player_distance.name.2=5 미터 +gui.dropbox.player_distance.name.3=10 미터 +gui.electric_compressor.desc.0=진행도 +gui.energy_storage.desc.0=에너지 저장고 +gui.energy_storage.desc.1=에너지 +gui.flag.already_placed=깃발이 이미 꽂혀 있습니다! +gui.frequency_module.desc.0=약한 음파와 먼 신호를 +gui.frequency_module.desc.1=수신할 수 있습니다 +gui.frequencymodule.warning0=작동시: +gui.frequencymodule.warning1=이와 같은 요구조건을 필요로 합니다. +gui.fuel_output.desc.0=이 슬롯에 빈 깡통을 부착하여 +gui.fuel_output.desc.1=연료 탱크로 부터 연료를 +gui.fuel_output.desc.2=채우세요. +gui.fuel_tank.desc.0=연료 탱크. +gui.fuel_tank.desc.1=연료 탱크를 채우기 위해서 +gui.fuel_tank.desc.2=연료통을 연료 적재기에 +gui.fuel_tank.desc.3=연결해야 합니다. +gui.fuel_tank.desc.4=연료 탱크 +gui.infinite_item.desc=무한공급 +gui.lander.velocity=진입 속도 +gui.lander.velocityu=m/s +gui.lander.warning2=속도를 늦추려면 " +gui.lander.warning3=" 를(을) 누르고 계세요. +gui.max_output.desc=최대 출력 +gui.message.addnewsch.name=새로운 설계도 +gui.message.apply.name=적용 +gui.message.assign_name.name=이름을 정하세요. +gui.message.atmosphere.name=대기 +gui.message.back.name=뒤로 +gui.message.breed.name=교배 +gui.message.bubble_visible.name=기포 보임 +gui.message.can_create_space_station.name=이곳에 우주정거장 생성가능! +gui.message.cancel.name=취소 +gui.message.cannot_create_space_station.name=이곳에 우주정거장 생성불가능! +gui.message.catalog.name=목록 +gui.message.click_again.0.name=클릭하여 확대 (달 & 위성) +gui.message.click_again.1.name=클릭하여 확대 (달) +gui.message.click_again.2.name=클릭하여 확대 (위성) +gui.message.click_again.3.name=클릭하여 확대 +gui.message.clicklink=갤럭티크래프트 위키를 보시려면 클릭 (영문) +gui.message.create_ss.name=생성 +gui.message.daynightcycle.name=밤낮 길이 +gui.message.energy=에너지 +gui.message.environment.name=환경 부스터 +gui.message.exit.name=나가기 +gui.message.fuel.name=연료 +gui.message.full.name=가득참 +gui.message.generating.name=생성중 +gui.message.grow.name=성장 +gui.message.heal.name=치료 +gui.message.help1=갤럭티크래프트 도움말 +gui.message.help1a=이 메시지를 다시 보시려면, 다음 키워드를 치세요: +gui.message.help2=우주 여행에 대한 가이드 +gui.message.help3=기름에 대한 도움말 +gui.message.in.name=입력 +gui.message.launch.name=발사 +gui.message.max_energy=최대 에너지 +gui.message.meansurfacetemp.name=평균 표면 온도 +gui.message.moon.atmosphere.0.name=없음 +gui.message.moon.daynightcycle.0.name=29.5 지구 일 +gui.message.moon.meansurfacetemp.0.name=(볕) 섭씨 253도 +gui.message.moon.meansurfacetemp.1.name=(그늘) 섭씨 -153도 +gui.message.moon.surfacecomposition.0.name=현무암질과 +gui.message.moon.surfacecomposition.1.name=소량의 치즈 +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(지구의 18%) +gui.message.of.name=의 +gui.message.oil.name=기름 +gui.message.out.name=출력 +gui.message.overworld.atmosphere.0.name=질소와 산소 +gui.message.overworld.atmosphere.1.name=생명을 유지 +gui.message.overworld.daynightcycle.0.name=1 지구 일 +gui.message.overworld.meansurfacetemp.0.name=섭씨 14도 +gui.message.overworld.surfacecomposition.0.name=돌과 흙 그리고 +gui.message.overworld.surfacecomposition.1.name=자갈 +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(지구의 100%) +gui.message.prelaunch=발사전 체크리스트 +gui.message.rename.name=이름 바꾸기 +gui.message.select_ss.name=우주정거장을 선택하십시오 +gui.message.ss_owner.name=주인: +gui.message.status.name=상태 +gui.message.strengthen.name=강화 +gui.message.surfacecomposition.name=표면 구성요소 +gui.message.surfacegravity.name=표면 중력 +gui.message.thermal_status.name=열 제어 +gui.message.tier.name=%d티어 +gui.message.unnamed.name=이름 미정 +gui.missing_core.name.0=모드 폴더에 믹두들코어가 없습니다 +gui.missing_core.name.1=갤럭티크래프트 로딩 실패 +gui.missing_core.name.2=마인크래프트를 종료하고 믹두들코어를 준비하십시오 +gui.missing_core.name.3=이곳을 클릭하면 다운로드 링크로 이동합니다 (영문) +gui.new_schematic.slot.desc.0=새 설계도 슬롯. +gui.new_schematic.slot.desc.1=새 설계도는 행성이나 +gui.new_schematic.slot.desc.2=달에 있는 던전을 클리어하면 +gui.new_schematic.slot.desc.3=얻을 수 있습니다 +gui.oil_tank.desc.0=기름 탱크: 기름통을 이용해 +gui.oil_tank.desc.1=채울수 있습니다. +gui.oxygen.warning=산소 설정이 유효하지 않습니다! +gui.oxygen_compressor.slot.desc.0=압축기 탱크 슬롯: 이곳에서 산소 +gui.oxygen_compressor.slot.desc.1=탱크를 충전 시킬 수 있습니다. +gui.oxygen_decompressor.slot.desc.0=감압기 탱크 슬롯: 이곳에서 산소 +gui.oxygen_decompressor.slot.desc.1=탱크를 비울 수 있습니다. +gui.oxygen_slot.desc.0=산소 슬롯, 산소통 혹은 산소 탱크를 이곳에 부착, +gui.oxygen_slot.desc.1=혹은 산소를 유체 파이프를 이용해 공급하세요. +gui.oxygen_storage.desc.0=산소 저장고 +gui.oxygen_storage.desc.1=산소 +gui.oxygen_use.desc=산소 사용 +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=음식 +gui.player.health=체력 +gui.player.ouch=아야!!!! +gui.receiver.cannot_attach=수신기를 이곳에 부착할 수 없습니다! +gui.requires_controller.desc=발사 통제기를 필요로 합니다. +gui.rocket.countdown=카운트다운 +gui.rocket.height=높이 +gui.rocket.inv.name=인벤토리 / 연료 +gui.rocket.launch.name=발사 +gui.rocket.launched=발사 +gui.rocket.on_launchpad=발사 준비 +gui.rocket.speed=속도 +gui.rocket.turn.name=좌/우회전 +gui.rocket.updown.name=위/아래 회전 +gui.rocket.warning.fuelinsufficient=연료가 부족하여 자동 제어로 안전하게 발사할 수 없습니다! +gui.rocket.warning.launchcontroller=비행 전 취소합니다. 발사 제어기를 확인하세요! +gui.rocket.warning.nofuel=먼저 연료를 주입해야 합니다! +gui.rocket.warning.nogyroscope=수상한 힘이 감지되었습니다. 회전계가 미친듯이 돌아갑니다! +gui.rocket.warning.noparachute=낙하산이 없네요! 다시 한번 발사를 누를 경우, 다시 돌아올수 없는 길을 가게 됩니다! +gui.rocket_type.0=저장 용량: 18 +gui.rocket_type.1=저장 용량: 36 +gui.rocket_type.2=저장 용량: 56 +gui.rocket_type.3=이미 연료 공급됨 +gui.seconds=s +gui.sensor.advanced=고급 모드 +gui.sensor.advancedoff=꺼짐 +gui.sensor.advancedon=켜짐 +gui.show_bubble.desc.0=기포 보이기 +gui.skeleton_boss.message=보스 소멸: 전투중에 보스방을 나가지 마십시오! 보스를 소환하려면 다시 방에 들어가십시오. +gui.space_race.chat.add_success=%s (이)가 종족에 가입하였습니다! +gui.space_race.chat.already_part=당신은 이미 해당 종족 멤버 입니다! +gui.space_race.chat.invite_received=%s 종족에게서 초대를 받았습니다. +gui.space_race.chat.not_found=%s (이)라는 플레이어를 찾을 수 없습니다. +gui.space_race.chat.remove_success=%s (이)가 종족에서 퇴출되었습니다. +gui.space_race.chat.to_join=%s 에 합류하기 위해 %s 명령어를 사용하십시오. +gui.space_race.coming_soon=아직 개발중 +ui.space_race.create.add_players.name=플레이어 추가 +gui.space_race.create.back.name=뒤로 +gui.space_race.create.brush_radius.name=브러쉬 반경 +gui.space_race.create.brush_size.name=브러쉬 크기 +gui.space_race.create.change_color.name.0=팀 +gui.space_race.create.change_color.name.1=색깔 +gui.space_race.create.change_color.name.2=변경 +gui.space_race.create.close.name=닫기 +gui.space_race.create.customize.name=깃발 꾸미기 +gui.space_race.create.eraser_radius.name=지우개 반경 +gui.space_race.create.eraser_size.name=지우개 크기 +gui.space_race.create.global_stats.name=전체 통계 보기 +gui.space_race.create.invite_player.name=플레이어 초대 +gui.space_race.create.player_radius.name=주의: 플레이어가 특정 거리 안에 있어야 합니다! (25 블록) +gui.space_race.create.rem_players.name=플레이어 퇴출 +gui.space_race.create.remove.name=퇴출하기 +gui.space_race.create.remove_player.name=플레이어 퇴출 +gui.space_race.create.rename.name=팀 이름 바꾸기 +gui.space_race.create.send_invite.name=초대하기 +gui.space_race.create.server_stats.name=서버 통계 보기 +gui.space_race.create.title.name.0=우주 종족 +gui.space_race.create.title.name.1=관리자 +gui.space_race.create.title.name=우주 종족 관리자 +gui.space_race.join.member_count.name=%d 멤버 +gui.space_race.join.name=합류 +gui.space_race.join.owner.name=리더 +gui.space_race.join.title.name=우주 종족 가입 +gui.space_race.unnamed=무제 +gui.spacestation.added=당신은 %s의 우주 정거장에 입장할 수 있는 허가를 받았습니다! +gui.spacestation.addsuccess=%s 를(을) 우주정거장 리스트에 성공적으로 추가 하였습니다! +gui.spacestation.allow_all_false=당신의 우주정거장은 모든 플레이어들에게 개방되지 않았습니다. +gui.spacestation.allow_all_true=당신의 우주정거장은 모든 플레이어들에게 개방되었습니다! (사용법 /ssinvite -all로 취소할 수 있습니다.) +gui.spacestation.changesuccess=%s 의 우주정거장이 %s 의 우주정거장으로 주인이 변경되었습니다. +gui.spacestation.playername=<플레이어 이름> +gui.spacestation.removesuccess=%s 를(을) 우주정거장 리스트에서 성공적으로 제거 하였습니다! +gui.spacestation.to_allow_entry=을 입력하여 당신의 우주정거장에 입장 허가를 하십시오! +gui.spacestation.type_command=유형 +gui.status.active.name=활성 +gui.status.air_lock_closed.name=에어락 닫힘 +gui.status.air_lock_open.name=에어락 열림 +gui.status.blockedfully.name=흐림 +gui.status.blockedpartial.name=약간 흐림 +gui.status.check_pending.name=확인 보류 중 +gui.status.check_starting.name=확인 시작 중 +gui.status.checking_seal.name=밀봉 확인 중 +gui.status.collecting.name=충전 중 +gui.status.collectingenergy.name=에너지 충전 중 +gui.status.compressing.name=압축 중 +gui.status.disabled.name=비활성 +gui.status.fulltank.name=산소 탱크 꽉 참 +gui.status.generating.name=생산중 +gui.status.hull_heat.name=선체 온도 +gui.status.idle.name=유휴상태 +gui.status.missingleaves.name=나뭇잎 블록 부족 +gui.status.missingoxygen.name=산소 부족 +gui.status.missingpower.name=전력 부족 +gui.status.missingpower.short.name=전력 없음 +gui.status.missingtank.name=유효한 산소 탱크 없음 +gui.status.nofuel.name=연료 없음! +gui.status.noinvtarget.name=타깃에 인벤토리가 없음! +gui.status.noitems.name=아이템 없음! +gui.status.nooil.name=기름 없음 +gui.status.not_available.name=N/A +gui.status.not_generating.name=생산중이 아님 +gui.status.notargetload.name=적재 타깃 없음! +gui.status.notargetunload.name=적하 타깃 없음! +gui.status.off.name=꺼짐 +gui.status.on.name=켜짐 +gui.status.raining.name=우천상태 +gui.status.ready.name=준비완료 +gui.status.refining.name=정제 중 +gui.status.running.name=가동 중 +gui.status.sealed.name=밀봉 +gui.status.sealerblocked.name=출력구 막힘! +gui.status.sun_visible.name=맑음 +gui.status.tank_empty.name=산소 탱크 비었음 +gui.status.targetempty.name=타깃 차량 비었음! +gui.status.targetfull.name=타깃 차량 꽉 참! +gui.status.unknown.name=확인불가 +gui.status.unsealed.name=지역이 너무 넓거나 밀봉되어 있지 않음 +gui.tank.oxygen_remaining=남은 산소 +gui.telemetry_fail.message=우선 주파수 모듈을 이용해 엔티티를 추적해야 합니다. (아니면 어떻게든 가장해 보시던지) +gui.telemetry_fail_no_frequency_module.message=사용하려면 주파수 모듈을 손에 쥐고 있어야 합니다! +gui.telemetry_fail_wearing_it.message=원격측정 유닛에 주파수 모듈을 연결하려면 입고 있는 모듈을 벗어야 합니다! +gui.telemetry_succeed.message=원격측정 링크 활성 완료. +gui.thermal_slot.desc.0=열 제어 슬롯, 이곳에 +gui.thermal_slot.desc.1='주변 열 제어기'를 장착하세요. (선택적) +gui.thermal_slot.desc.2=메모: 더 많은 에너지를 사용합니다! +gui.title.air_lock.name=%s's 에어락 제어기 +gui.tracking.message=추적 활성화 완료. 링크를 활성하기 위해 원격측정 유닛을 우클릭해야 합니다. +gui.village.warning.no_freq_mod=그들과 통신할 수 있도록 주파수 모듈을 갖추어야 할 것 같아요! +gui.warning.invalid_thermal=열보호 장비가 유효하지 않습니다! +gui.warning.noroom=공간이 부족합니다! +gui.warning=위험! +item.air_fan.name=날개 +item.air_vent.name=통풍구 +item.basic_item.ambient_thermal_controller.name=주변 열 제어기 +item.basic_item.canned_food.name=통조림 +item.basic_item.compressed_aluminum.name=압축 알루미늄 +item.basic_item.compressed_bronze.name=압축 청동 +item.basic_item.compressed_copper.name=압축 구리 +item.basic_item.compressed_iron.name=압축 철 +item.basic_item.compressed_steel.name=압축 강철 +item.basic_item.compressed_tin.name=압축 주석 +item.basic_item.dehydrated_apple.name=건조 사과 +item.basic_item.dehydrated_carrot.name=건조 당근 +item.basic_item.dehydrated_melon.name=건조 수박 +item.basic_item.dehydrated_potato.name=건조 감자 +item.basic_item.frequency_module.name=주파수 모듈 +item.basic_item.ingot_aluminum.name=알루미늄괴 +item.basic_item.ingot_bronze.name=청동괴 +item.basic_item.ingot_copper.name=구리괴 +item.basic_item.ingot_steel.name=강철괴 +item.basic_item.ingot_tin.name=주석괴 +item.basic_item.raw_silicon.name=천연 규소 +item.basic_item.solar_module_0.name=태양광 모듈 +item.basic_item.solar_module_1.name=태양광 전지판 +item.basic_item.wafer_advanced.name=고급 웨이퍼 +item.basic_item.wafer_basic.name=기초 웨이퍼 +item.basic_item.wafer_solar.name=태양광 웨이퍼 +item.battery.name=배터리 +item.bucket_fuel.name=연료 양동이 +item.bucket_oil.name=기름 양동이 +item.buggy.name=월면차 +item.buggymat.seat.name=월면차 시트 +item.buggymat.storage.name=월면차 상자 +item.buggymat.wheel.name=월면차 바퀴 +item.canister.copper.name=구리깡통 +item.canister.tin.name=주석깡통 +item.canvas.name=캔버스 +item.cheese_block.name=치즈 덩어리 +item.cheese_curd.name=치즈 커드 +item.compressed_meteoric_iron.name=압축 운철 +item.dungeonfinder.name=던전 추적기 +item.empty_liquid_canister.name=빈 깡통 +item.emergency_kit.description=산소 기어 및 기타 필수 아이템을 장착하려면 우클릭하세요. 경고: 한번만 사용하세요! +item.emergency_kit.name=우주 응급상자 +item.engine.tier1booster.name=1티어 부스터 +item.engine.tier1engine.name=1티어 로켓 엔진 +item.flag.name=깃발 +item.food.cheese_slice.name=치즈 슬라이스 +item.food.burger_bun.name=버거빵 +item.food.beef_patty_raw.name=소고기 패티 +item.food.beef_patty_cooked.name=구운 소고기 패티 +item.food.cheeseburger.desc=우주인들은 치즈버거를 좋아합니다! +item.food.cheeseburger.name=치즈버거 +item.food.canned_beef.name=소고기 통조림 +item.fuel.name=로켓 연료 +item.fuel_canister.name=가득찬 연료통 +item.fuel_canister_partial.name=부분 연료통 +item.heavy_plating.name=강화 플레이트 +item.hot_description.name=고온성 +item.ic2compat.ore_crushed_alu.name=부서진 알루미늄 광석 +item.ic2compat.ore_purified_alu.name=정제된 알루미늄 광석 +item.ic2compat.dust_alu.name=알루미늄 가루 +item.ic2compat.dust_small_titanium.name=작은 티타늄 가루 +item.infinite_battery.name=무한 배터리 +item.infinite_oxygen.name=무한 산소공급기 +item.key.t1.name=1티어 던전 열쇠 +item.lunar_sapphire.description=달 사파이어는 외계주민과의 거래에서 쓰이는 화폐입니다. +item.lunar_sapphire.name=달 사파이어 +item.meteor_chunk.name=투척용 운석 덩어리 +item.meteor_chunk_hot.name=투척용 운석 덩어리 +item.meteoric_iron_ingot.name=운철 주괴 +item.meteoric_iron_raw.name=운철 원석 +item.nose_cone.name=머리원뿔 +item.oil_canister.name=가득찬 기름통 +item.oil_canister_partial.name=부분 기름통 +item.oil_extractor.name=휴대용 기름 추출기 +item.oxygen_concentrator.name=산소 농축기 +item.oxygen_gear.name=산소 기어 +item.oxygen_mask.name=산소 마스크 +item.oxygen_tank_heavy_empty.name=빈 대형 산소 탱크 +item.oxygen_tank_heavy_full.name=대형 산소 탱크 +item.oxygen_tank_light_empty.name=빈 소형 산소 탱크 +item.oxygen_tank_light_full.name=소형 산소 탱크 +item.oxygen_tank_med_empty.name=빈 중형 산소 탱크 +item.oxygen_tank_med_full.name=중형 산소 탱크 +item.parachute_black.name=검은색 낙하산 +item.parachute_blue.name=하늘색 낙하산 +item.parachute_brown.name=갈색 낙하산 +item.parachute_darkblue.name=파란색 낙하산 +item.parachute_darkgray.name=회색 낙하산 +item.parachute_darkgreen.name=초록색 낙하산 +item.parachute_gray.name=밝은 회색 낙하산 +item.parachute_lime.name=연두색 낙하산 +item.parachute_magenta.name=자홍색 낙하산 +item.parachute_orange.name=주황색 낙하산 +item.parachute_pink.name=분홍색 낙하산 +item.parachute_plain.name=흰색 낙하산 +item.parachute_purple.name=보라색 낙하산 +item.parachute_red.name=빨간색 낙하산 +item.parachute_teal.name=청록색 낙하산 +item.parachute_yellow.name=노란색 낙하산 +item.rocket_fins.name=로켓 날개핀 +item.rocket_t1.name=1티어 로켓 +item.schematic.name=KARI 작업대 설계도 +item.sensor_glasses.name=감지경 +item.sensor_lens.name=감지 렌즈 +item.standard_wrench.name=표준 렌치 +item.steel_axe.name=강화 도끼 +item.steel_boots.name=강화 부츠 +item.steel_chestplate.name=강화 흉갑 +item.steel_helmet.name=강화 투구 +item.steel_hoe.name=강화 괭이 +item.steel_leggings.name=강화 각반 +item.steel_pickaxe.name=강화 곡괭이 +item.steel_pole.name=강철 장대 +item.steel_shovel.name=강화 삽 +item.steel_sword.name=강화 검 +item.tier1.desc=1티어 +item_desc.powerdraw.name=필요 전력: 초당 %s +item_desc.shift.name=정보를 보려면 %s 을 누르세요. +item_group.galacticraft_blocks=갤럭티크래프트 블록 +item_group.galacticraft_items=갤럭티크래프트 아이템 +jei.arc_lamp.info=마주 보는 방향으로 매우 밝은 빛입니다. 최상의 효과를 위해 높은 곳에 두세요! 표준 렌치를 사용하여 회전합니다. +jei.electric_compressor.info=주괴 압축기의 전기 버전은 2배 빠릅니다! 2티어 전력으로 더욱 빨라진 속도이죠. 호퍼는 이 기계를 채우거나 비울 수 있습니다. +jei.electric_compressor.appeng.info=AE2를 사용한 자동화를 위해 두개의 다른 모드의 괴를 조합법에 설정하세요. 자세한 내용은 https:goo.gl/BwY15G을 참고하세요. +jei.fluid_pipe.info=액체 또는 가스 운반용 파이프 탱크에서 오일을 펌프 하려면 표준 렌치를 사용하여 '풀 모드'로 변환하세요. \n 당김 모드에서는 탱크나 기계를 채울 수 없으므로 파이프를 2블록 이상 가동하세요! +jei.fuel_loader.info=로켓 발사 패드 옆에 놓으세요. 패드에 배치된 로켓은 모두 격퇴합니다. 우주 여행에 있어서 필수적인 것이죠, 집으로 돌아가는 여행을 포함하면은! +jei.magnetic_crafting.info=아이템들을 담고 있는 조합법입니다. 호퍼는 마지막 조합법을 성공적으로 조작할 수 있는 아이템을 승인할 수 있습니다. +jei.oxygen_collector.info=오버월드 또는 우주로부터 호흡할 수 있는 산소 혼합물을 근처의 녹색 잎 또는 성장하는 농작물로부터 수집합니다. \3산소 탱크용 산소 압축기 또는 산소 기포 배급기 또는 산소 밀봉기로 산소를 공급합니다. +jei.oxygen_distributor.info=플레이어와 다른 생명체들이 숨을 쉴 수 있는 공간에 기포 환경을 만듭니다. 산소 수집기 또는 산소 저장 모듈에서 호흡 가능한 산소 혼합물을 공급하세요. +jei.oxygen_sealer.info=우주정거장 본부에 있는 방 하나를 숨 쉴 수 있는 분위기로 채웁니다. 산소 수집기 또는 산소 저장 모듈에서 호흡 가능한 산소 혼합물을 공급하세요. 방의 모든 벽은 고체여야 합니다. \n감지경을 사용하면 누출을 찾을 수 있습니다! \n산소 밀봉기의 실내 크기는 10x10x8블록입니다. 더 큰 방에는 여러개의 산소 밀봉기를 사용하세요! +jei.wrench.info=대부분의 갤럭티크래프트 기계는 표준 렌치를 우클릭하여 회전할 수 있습니다. \n클릭하면 전기 기계의 전원 및 기타 입력과 출력을 변경할 수 있습니다. +keybind.map.name=은하 지도 +keybind.sensortoggle.name=감지경 모드 활성화 +keybind.spaceshipinv.name=우주선 인벤토리 열기 +keybind.vehiclebackward.name=차량 후진 +keybind.vehicledown.name=차량 하강 +keybind.vehicleforward.name=차량 전진 +keybind.vehicleleft.name=차량 좌회전 +keybind.vehicleright.name=차량 우회전 +keybind.vehicleup.name=차량 상승 +moon.moon=달 +newversion.failed.name=갤럭티크래프트 업데이트 확인 불가능! 15초 후에 다시 확인합니다 +newversion.success.name=갤럭티크래프트 새로운 버전이 존재합니다. +planet.jupiter=목성 +planet.mercury=수성 +planet.neptune=해왕성 +planet.overworld=오버월드 (지구) +planet.saturn=토성 +planet.uranus=천왕성 +planet.venus=금성 +satellite.spacestation.overworld=오버월드 우주정거장 +schematic.moonbuggy.name=월면차 +schematic.rocket_t1.name=1티어 로켓 +schematic.rocket_t2.name=2티어 로켓 +solarsystem.sol=Sol (우리태양계) +star.sol=Sol (우리 해) +tile.air_lock_controller.name=에어락 제어기 +tile.air_lock_frame.description=에어락 기틀은 한개의 에어락 제어기와 함께 네더 포탈의 모양과 같이 지을 경우 제대로 된 밀폐 기능을 하게 됩니다. +tile.air_lock_frame.name=에어락 기틀 +tile.air_lock_seal.name=에어락 봉인 +tile.aluminum_wire.alu_wire.description=알루미늄 전선은 전원과 에너지를 쓰는 기계를 연결해줍니다. +tile.aluminum_wire.alu_wire.name=알루미늄 전선 +tile.aluminum_wire.alu_wire_heavy.description=중형 알루미늄 전선은 전원과 에너지를 쓰는 기계를 연결해줍니다. 2티어 기계들을 위한 더욱 더 많은 수용력을 자랑합니다. +tile.aluminum_wire.alu_wire_heavy.name=중형 알루미늄 전선 +tile.aluminum_wire.alu_wire_switch.description=레드스톤 신호로 끄지 않는 한 개폐식 알루미늄 전선은 알루미늄 전선처럼 연결됩니다. +tile.aluminum_wire.alu_wire_switch.name=개폐식 알루미늄 전선 +tile.aluminum_wire.alu_wire_switch_heavy.description=레드스톤 신호로 끄지 않는 한 개폐식 중형 알루미늄 전선이 중형 알루미늄 전선처럼 연결됩니다. +tile.aluminum_wire.alu_wire_switch_heavy.name=개폐식 중형 알루미늄 전선 +tile.arclamp.description=아크 램프는 주변지역에 굉장히 강력한 불빛을 제공함과 동시에 주변 몹을 쫒아냅니다. +tile.arclamp.name=아크 램프 +tile.basic_block_core.block_aluminum_gc.name=알루미늄 블록 +tile.basic_block_core.block_copper_gc.name=구리 블록 +tile.basic_block_core.block_meteoric_iron_gc.name=고체 운철 블록 +tile.basic_block_core.block_tin_gc.name=주석 블록 +tile.basic_block_core.block_silicon_gc.name=규소 블록 +tile.basic_block_core.deco_block_0.name=장식용 주석 블록 +tile.basic_block_core.deco_block_1.name=벽용 주석 블록 +tile.basic_block_core.ore_aluminum_gc.name=알루미늄 광석 +tile.basic_block_core.ore_copper_gc.name=구리 광석 +tile.basic_block_core.ore_silicon.name=실리콘 광석 +tile.basic_block_core.ore_tin_gc.name=주석 광석 +tile.basic_block_moon.bricks.name=달 던전 벽돌 +tile.basic_block_moon.cheesestone.name=치즈 원석 +tile.basic_block_moon.coppermoon.name=구리 원석 +tile.basic_block_moon.moondirt.name=월토 +tile.basic_block_moon.moongrass.name=달 잔디 +tile.basic_block_moon.moonstone.name=월석 +tile.basic_block_moon.sapphiremoon.name=사파이어 광석 +tile.basic_block_moon.tinmoon.name=달 주석 광석 +tile.buggy_pad.description=연료패드는 그 위에 배치된 월면차에 연료를 재충전을 할 수 있게 해줍니다. 연료 적재기와 함께 3x3으로 배치 해야 합니다. 로켓 발사에는 사용할 수 없습니다! +tile.cargo.loader.name=화물 적재기 +tile.cargo.unloader.name=화물 적하기 +tile.cargo_loader.description=화물 적재기는 블록이나 아이템을 화물칸이 설치된 로켓 혹은 다른 차량에 실어줍니다. 발사대 혹은 연료패드에 부착해야 합니다. +tile.cargo_unloader.description=화물 적하기는 블록이나 아이템을 화물칸이 설치된 로켓 혹은 다른 차량에서 내려줍니다. 발사대 혹은 연료패드에 부착해야 합니다. +tile.cheese.description=치즈 블록은 달에서 발견되는 치즈로 만들 수 있습니다 (배치 및 식용 가능). +tile.cheese.name=치즈 블록 +tile.circuit_fabricator.description=회로 조립기는 기본 재료를 가공하여 고급 제작에 쓰이는 규소 웨이퍼를 만듭니다. +tile.coal_generator.description=석탄 발전기는 석탄을 태워 얻는 열 에너지를 저장합니다. 가장 쉽지만 가장 효율이 떨어지는 방법입니다. +tile.collector.description=산소 수집기는 주변 나뭇잎에서 생산된 산소를 저장합니다. +tile.collector.name=산소 수집기 +tile.compressor.description=압축기는 광물 주괴를 압축시킵니다. 갤럭티크래프트의 가장 중요한 기계라고 볼 수 있죠! +tile.compressor_electric.description=전기 압축기는 광물 주괴를 압축시킵니다. 일반 압축기 보다 효율적으로 두개의 주괴를 한번에 가공합니다. +tile.compressor_advanced.description=전기 압축기의 더 빠른 버전입니다. 광물 주괴를 더욱 빠르게 압축합니다. +tile.concealed_detector.name=플레이어 탐지기 +tile.concealed_redstone.name=히든 레드스톤 전선 +tile.concealed_repeater.name=히든 레드스톤 중계기 +tile.crude_oil.name=석유 +tile.crude_oil_moving.name=원유 +tile.crude_oil_still.name=원유 +tile.deconstructor.description=해체기가 당신의 오래된 로켓과 다른 물건들을 분해해서, 모든 분해 가능한 재료들을 돌려줄 것입니다. +tile.dishbase.description=접시 안테나는 우주 정거장의 위치를 추적하고 원격으로 우주 기지에서 통신을 수신 할 수 있습니다. +tile.dishbase.name=접시 안테나 +tile.distributor.description=산소 배급기는 내부 산소탱크를 이용하여 기기 주변에 일정반경의 기포를 생성합니다. 기포 안에서는 안정적인 호흡이 가능합니다. +tile.distributor.name=산소 기포 배급기 +tile.dummyblock.cryogenic_chamber.name=극저온실 +tile.dummyblock.launch_pad.name=로켓 발사대 +tile.dummyblock.nasa_workbench.name=KARI 작업대 +tile.dummyblock.solar.name=태양광 발전기 +tile.dummyblock.space_station_base.name=우주정거장 본부 +tile.electric_furnace_tier1.description=전기 화로는 기존 석탄 화로보다 빠른 속도를 자랑합니다. +tile.electric_furnace_tier2.description=아크 화로는 기존 석탄 화로와 전기 화로 보다 빠른 속도를 자랑합니다. +tile.emergency_box.description=행성의 첫번째 착륙 지점 옆에 응급소포를 놓으세요. 내부에서 응급상자를 열어 찾으세요. 몹을 물리치는 것도 잊지마세요! +tile.emergency_box.filled.name=응급상자가 포함된 응급소포 +tile.emergency_box.name=응급 소포 +tile.enclosed.aluminum_wire.name=밀봉형 알루미늄 전선 +tile.enclosed.copper_cable.name=밀봉형 구리 전선 +tile.enclosed.description=밀봉 블록은 우주정거장과 같이 공기가 드나들면 안되는 곳에 배치되어야 합니다. +tile.enclosed.fluid_pipe.name=밀봉형 산소 파이프 +tile.enclosed.glass_fibre_cable.name=밀봉형 유리섬유 전선 +tile.enclosed.gold_cable.name=밀봉형 금 전선 +tile.enclosed.heavy_aluminum_wire.name=밀봉형 중형 알루미늄 전선 +tile.enclosed.hv_cable.name=밀봉형 고전압 전선 +tile.enclosed.lv_cable.name=밀봉형 주석 전선 +tile.enclosed.me_cable.name=밀봉형 ME 전선 +tile.enclosed.pipe_fluids_cobblestone.name=밀봉형 조약돌 유체이송 파이프 +tile.enclosed.pipe_fluids_stone.name=밀봉형 석재 유체이송 파이프 +tile.enclosed.pipe_items_cobblestone.name=밀봉형 조약돌 운송 파이프 +tile.enclosed.pipe_items_stone.name=밀봉형 석재 운송 파이프 +tile.enclosed.pipe_power_gold.name=밀봉형 금재 전력공급 파이프 +tile.enclosed.pipe_power_stone.name=밀봉형 석재 전력공급 파이프 +tile.energy_storage_module_tier1.description=에너지 저장 모듈은 나중에 쓰일 다량의 에너지를 저장합니다. +tile.energy_storage_module_tier2.description=에너지 저장 클러스터는 나중에 쓰일 다량의 에너지를 저장합니다. 모듈보다도 더 많은 양의 에너지를 입출력/저장합니다. +tile.fallen_meteor.description=운석은 대기가 부족하거나 없는 행성 혹은 달에서 발견됩니다. 부서지면 운철을 드랍합니다. +tile.fallen_meteor.name=운석 +tile.fluid_pipe.description=유체 파이프는 액체와 가스를 소스 블록에서 타깃 블록으로 전달합니다. 표준 렌치를 사용하여 모드를 전환합니다. +tile.fluid_pipe.name=유체 파이프 +tile.fluid_pipe_pull.description=유체 파이프는 액체와 가스를 소스 블록에서 타깃 블록으로 전달합니다. 표준 렌치를 사용하여 모드를 전환합니다. +tile.fluid_pipe_pull.name=유체 파이프 +tile.fluid_tank.description=유체 탱크는 나중에 사용하기 위해 액체와 가스를 저장할 것입니다. +tile.fluid_tank.name=유체 탱크 +tile.fuel.name=연료 +tile.fuel_block.name=연료 +tile.fuel_loader.description=발사대에 연결되면 연료 적재기는 연료를 발사대와 연결된 로켓이나 차량에 제공합니다. +tile.fuel_loader.name=연료 적재기 +tile.glowstone_torch.description=발광석 횃불은 일반 횃불이 밝히지 못하는 무산소 지역을 밝히기 용이합니다. +tile.glowstone_torch.name=발광석 횃불 +tile.grating.name=창살 +tile.landing_pad.buggy_fueler.name=월면차 연료패드 +tile.landing_pad.cargo_pad.name=화물 로켓 발사대 +tile.landing_pad.description=발사대는 로켓을 배치할 수 있게 도와줍니다. 3x3, 총 9개의 발사대를 배치해야합니다. 연료 적재기, 화물 적재기, 그리고 발사 통제기 부착이 가능 합니다. +tile.landing_pad.landing_pad.name=로켓 발사대 +tile.landing_pad_full.name=로켓 발사대 +tile.machine.0.name=석탄 발전기 +tile.machine.1.name=에너지 저장 모듈 +tile.machine.2.name=전기 화로 +tile.machine.3.name=압축기 +tile.machine.7.name=전기 아크 화로 +tile.machine.8.name=에너지 저장 클러스터 +tile.machine2.4.name=전기 압축기 +tile.machine2.5.name=회로 조립기 +tile.machine2.6.name=산소 저장 모듈 +tile.machine2.10.name=해체기 +tile.machine3.9.name=염색기 +tile.machine4.11.name=고급 압축기 +tile.magnetic_table.name=자석 조합대 +tile.magnetic_table.description=진열된 아이템들은 떨어지지 않을 것입니다-그것은 인벤토리를 보유하고 있습니다! 아이템을 클릭하여 넣을 수 있습니다. 후퍼들은 아이템들을 넣고 제거할 수 있고, 그것은 자동적으로 마지막으로 만들어진 조합법을 창조하려고 시도할 것입니다. +tile.moon_stairs_brick.name=달 던전 벽돌 계단 +tile.moon_stairs_stone.name=월석 계단 +tile.ore_copper.name=구리 광석 +tile.ore_tin.name=주석 광석 +tile.oxygen_compressor.0.name=산소 압축기 +tile.oxygen_compressor.1.name=산소 감압기 +tile.oxygen_compressor.description=산소 압축기는 내부에 저장되어 있는 산소를 이용해 산소 탱크를 충전합니다. +tile.oxygen_decompressor.description=산소 감압기는 산소 탱크에 저장되어 있는 산소를 빼내어 내부에 저장합니다. +tile.oxygen_detector.description=산소 감지기는 산소에 노출되었을시 레드스톤 신호를 보냅니다. +tile.oxygen_detector.name=산소 감지기 +tile.oxygen_storage_module.description=산소 저장 모듈은 나중에 쓰일 다량의 산소를 저장합니다. +tile.painter.description=진공 유리, 조명 패널 또는 기타 인쇄 가능한 아이템에 색상을 적용합니다. 블록 또는 염료를 사용하여 새 색상을 제공하세요! +tile.panel_lighting.description=우주에 사용할 조명 패널! 렌치가 그것을 회전시킵니다. 모양을 변경하려면 선택한 블록에 배치하는 동안 기습을 누릅니다. +tile.panel_lighting_0.name=정사각형 조명 패널 +tile.panel_lighting_1.name=스포트라이트 조명 패널 +tile.panel_lighting_2.name=직선 조명 패널 +tile.panel_lighting_3.name=어두운 조명 패널 +tile.panel_lighting_4.name=어두운 조명 패널 +tile.parachest.description=낙하상자는 지구와 같은 특정 행성이나 달에 착륙시 같이 떨어집니다. 발사 전의 로켓과 연료 그리고 화물을 포함합니다. +tile.parachest.name=낙하 상자 +tile.platform.description=4번을 놓고 플랫폼을 만드세요. 플랫폼은 선수들을 위 아래의 다음 플랫폼으로 들어올립니다. 기습=하강:뛰기=상승. +tile.platform.name=유압 플랫폼 +tile.refinery.description=정제기는 기름과 에너지를 이용하여 로켓과 차량에 필수 연료로 바꾸어 줍니다. +tile.refinery.name=정제기 +tile.rocket_workbench.name=KARI 작업대 +tile.rocket_workbench.description=KARI 작업대는 여러 고급 로켓 혹은 차량을 만드는데에 필요합니다. 야생에서 새 설계도를 찾아 사용할 수 있습니다. +tile.sapling2.birch.name=자작나무 묘목 +tile.sapling2.jungle.name=정글나무 묘목 +tile.sapling2.oak.name=참나무 묘목 +tile.sapling2.spruce.name=가문비나무 묘목 +tile.sealer.description=산소 밀봉기는 밀실 여부를 확인한 후 밀실이 확인 되면 그 내부를 호흡에 필요한 산소로 채워줍니다. +tile.sealer.name=산소 밀봉기 +tile.slab_gc_half.moon_bricks_slab.name=달 던전 벽돌 반 블록 +tile.slab_gc_half.moon_slab.name=월석 반 블록 +tile.slab_gc_half.tin_slab_1.name=장식형 주석 반 블록 +tile.slab_gc_half.tin_slab_2.name=장식형 주석 반 블록 +tile.solar.advanced_solar.name=고급 태양광 전지판 +tile.solar.basic_solar.name=기초 태양광 전지판 +tile.solar_adv.description=고급 태양광 전지판은 태양으로 부터 에너지를 저장합니다. 최적의 기능을 위해 각도가 자동으로 조절됩니다. +tile.solar_basic.description=기초 태양광 전지판은 태양으로 부터 에너지를 저장합니다. 대부분의 에너지는 낮에 충전됩니다 (조정 불가능). +tile.space_glass.description=진공 밀폐 유리를 사용하여 우주 본부를 청소합니다. 근처에 있는 염색기를 사용하여 주변을 어떤 색으로 칠하세요! +tile.space_glass.clear.description=넓은 우주를 볼 수 있는 투명한 유리, 물 속의 깨끗한 경치를 제공할 수도 있습니다. +tile.space_glass.strong.description=강하고 폭발에 강한 유리는 투명 알루미늄으로 제작되었습니다. +tile.space_glass_clear.name=깨끗한 진공 유리 +tile.space_glass_vanilla.name=진공 유리 +tile.space_glass_strong.name=강력한 진공 유리 +tile.space_station_base.name=우주정거장 도착 블록 +tile.spin_thruster.description=회전반동 추력기는 우주정거장을 회전시키는데에 사용됩니다. +tile.spin_thruster.name=회전반동 추력기 +tile.telemetry.description=링크된 로켓, 플레이어 혹은 다른 몬스터에게서 유용한 정보를 얻을 수 있습니다. 표시 화면 옆에 배치 하는게 좋습니다. 주파수 모듈을 이용해 링크를 활성화 하세요. +tile.telemetry.name=원격측정 유닛 +tile.tin_stairs_1.name=장식형 주석 계단 +tile.tin_stairs_2.name=장식형 주석 계단 +tile.treasure_chest.description=1티어 보물 상자는 달 던전에 생성됩니다. 최종 보스를 처치하면 열 수 있습니다. +tile.treasure_chest.name=보물상자 +tile.unlit_torch.name=횃불 +tile.unlit_torch_stone.name=돌 횃불 +tile.unlit_torch_lit.name=횃불 +tile.unlit_torch_stone_lit.name=돌 횃불 +tile.view_screen.description=표시 화면은 우주정거장의 가장 마지막을 "장식"합니다. 오른쪽 클릭으로 화면에 표시되는 정보를 바꿀 수 있습니다. +tile.view_screen.name=표시 화면 +tile.wall_gc.moon.name=월석 담장 +tile.wall_gc.moon_bricks.name=달 던전 벽돌 담장 +tile.wall_gc.tin.name=장식형 주석 담장 + +advancement.galacticraft.root.title=갤럭티크래프트 +advancement.galacticraft.root.description=달로 가자! +advancement.galacticraft.coal_generator.title=석탄 발전 +advancement.galacticraft.coal_generator.description=석탄 발전기 +advancement.galacticraft.circuit_fabricator.title=조립 준비 완료 +advancement.galacticraft.circuit_fabricator.description=웨이퍼를 만드는 회로 조립기 제작 +advancement.galacticraft.basic_wafer.title=육감적인 웨이퍼 +advancement.galacticraft.basic_wafer.description=기본 웨이퍼 제작 (규소니까 먹지 말아주세요!) +advancement.galacticraft.advanced_wafer.title=금빛 웨이퍼 +advancement.galacticraft.advanced_wafer.description=고급 웨이퍼 제작 (아직은 먹지 말아주세요!) +advancement.galacticraft.compressor.title=압축 준비 완료 +advancement.galacticraft.compressor.description=압축기 제작 +advancement.galacticraft.solar.title=자유 에너지 +advancement.galacticraft.solar.description=기초 태양광 전지판 제작 +advancement.galacticraft.advanced_solar.title=빠르고 효율적이다! +advancement.galacticraft.advanced_solar.description=고급 태양광 전지판 제작 +advancement.galacticraft.electric_compressor.title=전기로 업그레이드 +advancement.galacticraft.electric_compressor.description=전기 압축기 제작 +advancement.galacticraft.oil.title=끈적끈적한 물건 +advancement.galacticraft.oil.description=기름 입유 +advancement.galacticraft.refiery.title=정제할 시간입니다! +advancement.galacticraft.refiery.description=정제기 제작 +advancement.galacticraft.rocket_fuel.title=로켓 연료 +advancement.galacticraft.rocket_fuel.description=정제기에 기름 정제 +advancement.galacticraft.oxygen_collector.title=산소 미포함 +advancement.galacticraft.oxygen_collector.description=산소 수집기 제작 +advancement.galacticraft.oxygen_compressor.title=공기 압축 +advancement.galacticraft.oxygen_compressor.description=산소 압축기 제작 +advancement.galacticraft.fill_tank.title=공기 출발 +advancement.galacticraft.fill_tank.description=산소 탱크 충전 완료 +advancement.galacticraft.fill_all_tanks.title=산소 비축 +advancement.galacticraft.fill_all_tanks.description=모든 산소 탱크 충전 완료 +advancement.galacticraft.all_oxygen_gear.title=준비 완료 +advancement.galacticraft.all_oxygen_gear.description=우주 호흡 가능 +advancement.galacticraft.rocket_workbench.title=우주 공학자 +advancement.galacticraft.rocket_workbench.description=KARI 작업대 제작 +advancement.galacticraft.rocket_t1.title=로켓 보유 가능! +advancement.galacticraft.rocket_t1.description=로켓 용접 +advancement.galacticraft.fuel_loader.title=가득 채우자! +advancement.galacticraft.fuel_loader.description=연료 적재기 제작 +advancement.galacticraft.launch_rocket.title=발사! +advancement.galacticraft.launch_rocket.description=첫 로켓 발사 +advancement.galacticraft.moon.title=달이다! +advancement.galacticraft.moon.description=달 착륙 +advancement.galacticraft.create_space_station.title=우주 정거장 +advancement.galacticraft.create_space_station.description=우주 정거장 제작 +advancement.galacticraft.spin_thruster.title=초조해짐 +advancement.galacticraft.spin_thruster.description=회전반동 추력기 +advancement.galacticraft.moon_dungeon.title=위더보다 나쁨 +advancement.galacticraft.moon_dungeon.description=던전에서 진화된 스켈레톤 보스 발견 +advancement.galacticraft.dungeon_key_moon.title=열쇠있다 +advancement.galacticraft.dungeon_key_moon.description=던전에 숨어서 보스를 죽이고 열쇠 찾기 +advancement.galacticraft.moon_buggy_schematic.title=현란한 설계도 +advancement.galacticraft.moon_buggy_schematic.description=월면차 설계도 §o획득 +advancement.galacticraft.moon_buggy.title=월면차 +advancement.galacticraft.moon_buggy.description=월면차 용접 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/nl_nl.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/nl_nl.lang new file mode 100644 index 00000000..d68fae2d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/nl_nl.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=De hoeveelheid ruimtemijners voor speler %s is %s +commands.dimensionteleport=%s werd naar de atmosfeer gestuurd%s +commands.dimensiontp.too_many=Te veel argumenten! Gebruik: %s +commands.gcenergyunits.invalid_units=Ongeschikte eenheden in /GCEnergyUnits command. Gebruik: %s +commands.gcenergyunits.no_units=De eenheden moeten specifiek zijn! Gebruik: %s +commands.joinrace.no_team=Het team moet specifiek zijn! Gebruik: %s +commands.ssinvite.not_found=Kan geen ruimtestation vinden voor je gebruikersnaam. Je moet er eerst heen reizen! +commands.ssinvite.wrong_usage=Niet genoeg command argumenten! Gebruik: %s +commands.ssnewowner.wrong_usage=Kan ruimtestation ID# niet vinden - bestaat het wel? Gebruik: %s +commands.ssuninvite.no_player=Kon de speler met de gebruikersnaam %s niet vinden op je ruimte station lijst! +container.cargoloader.name=Lading inlader +container.cargounloader.name=Lading uitlader +container.fuelloader.name=Brandstof lader +container.lander.name=Space Lander +container.oxygencollector.name=Zuurstof Collector +container.oxygencompressor.name=Zuurstof Compressor +container.oxygendecompressor.name=Zuurstof Decompressor +container.oxygendistributor.name=Zuurstof Verdeler +container.oxygensealer.name=Zuurstof Afluiter +container.parachest.name=Parachute-kist +container.refinery.name=Raffinaderij +container.solaradvanced.name=Geavanceerde Zonnepaneel +container.solarbasic.name=Normale- Zonnepanneel +container.spaceship.name=Level 1 raket +container.treasurechest.name=Schatkist +death.attack.oxygen_suffocation=%1$s had geen zuurstof meer! +death.attack.spaceship_crash=%1$s's Raket sloeg zichzelf in de Grond. Oeps +death.attack.thermal=%1$s Vergat Thermische Bescherming +dimension.moon.name=Maan +dimension.overworld.name=Overwereld +dimension.sun.name=Zon +entity.alien_villager.name=Alien Dorpeling +entity.buggy.name=Maanwagen +entity.celestial_screen.name=Ruimtekaart +entity.evolved_creeper.name=Geëvolueerde Creeper +entity.evolved_skeleton.name=Geëvolueerde Skelet +entity.evolved_skeleton_boss.name=Geëvolueerde Skelet Baas +entity.evolved_spider.name=Geëvolueerde Spin +entity.evolved_zombie.name=Geëvolueerde Zombie +entity.flag.name=Vlag +entity.gcflag.name=Vlag +entity.gravity_arrow.name=Pijl +entity.lander.name=Ruimte Lander +entity.meteor.name=Meteoor +entity.meteor_chunk.name=Meteoor Brokstuk +entity.oxygen_bubble.name=Zuurstof Bel +entity.para_chest.name=Parachute-kist +entity.rocket_t1.name=Raket +galaxy.milky_way=Melkweg +gc.configgui.alternate_canister_recipe=Ander kan recept +gc.configgui.asteroids_start=Uitdagings modus! (asteroïden start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Zet kaaserts generatie op de maan uit +gc.configgui.disable_copper_moon=Zet kopererts generatie op de maan uit +gc.configgui.disable_lander=Zet de maanlander uit, gebruik een parachute +gc.configgui.disable_moon_village_gen=Zet maandorpen generatie op de maan uit +gc.configgui.disable_space_station_creation=Zet de mogelijkheid om een ruimtestation te maken uit +gc.configgui.disable_spaceship_grief=Zet raketexplosies uit +gc.configgui.disable_spaceship_particles=Zet raketrook en vlammen uit +gc.configgui.disable_tin_moon=Zet tinerts generatie op de maan uit +gc.configgui.disable_update_check=Zet de updatecheck uit +gc.configgui.dungeon_boss_health_mod=Kerker baas levens modifier +gc.configgui.enable_aluminum_ore_gen=Zet aluminiumerts generatie uit +gc.configgui.enable_copper_ore_gen=Zet kopererts generatie uit +gc.configgui.enable_debug=Laat debug berichten in de console zien +gc.configgui.enable_other_mods_features=Laat andere mods wereldgeneratie veranderen +gc.configgui.enable_retrogen_oil=Retrogen overwereld olie +gc.configgui.enable_sealer_edge_checks=Sealer randen chencks +gc.configgui.enable_silicon_ore_gen=Zet siliconerts generatie uit +gc.configgui.enable_thaum_craft_nodes=Zet thaumcraft nodes op planeten aan +gc.configgui.enable_tin_ore_gen=Zet tinerts generatie uit +gc.configgui.external_oil_gen=Externe olie generatie +gc.configgui.force_overworld_respawn=Overwereld respawn +gc.configgui.hard_mode=Moeilijker Niveau +gc.configgui.id_achiev_base=Basis Achievement ID +gc.configgui.id_dimension_moon=Maan dimensie ID +gc.configgui.id_dimension_overworld_orbit=Ruimtestation dimensie ID +gc.configgui.id_dimension_overworld_orbit_static=Ruimtestation statische dimensie ID +gc.configgui.id_schematic_add_schematic=Bouwtekening ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Bouwtekening ID maanwagen +gc.configgui.id_schematic_rocket_t1=Bouwtekening ID level 1 raket +gc.configgui.key_override_fuel_level=Toets om brandstofniveau in raket te zien +gc.configgui.key_override_toggle_adv_goggles=toets om geavanceerde bril te activeren +gc.configgui.map_scroll_invert=Maak scrollen in de ruimtekaart tegenovergekeerd +gc.configgui.map_scroll_sensitivity=Ruimtekaart muis gevoeligheid +gc.configgui.meteor_block_damage=Meteorietenschade +gc.configgui.meteor_spawn_mod=Hoeveel meteorieten spawnen +gc.configgui.more_stars=Laat meer sterren zien +gc.configgui.oil_gen_factor=Olie generatie factor +gc.configgui.ore_dict_silicon=OreDict naam van silicium in andere mods +gc.configgui.other_mod_ore_gen_i_ds=Ertsen van andere mods genereren op planeten +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Toets op ruimtekaart te openen +gc.configgui.oxygen_indicator_bottom=Verplaats de zuurstofindicator naar beneden +gc.configgui.oxygen_indicator_left=Verplaats de zuurstofindicator naar links +gc.configgui.quick_mode=Snel Spel (Makkelijker) +gc.configgui.rocket_disable_overworld_return=Zet overworld raketterugkeer uit +gc.configgui.rocket_disabled_dimensions=Dimensies waar je niet met raket kunt komen +gc.configgui.rocket_fuel_factor=Raketbrandstof factor +gc.configgui.sealable_i_ds=Luchtdichte blokken +gc.configgui.space_station_energy_scalar=Ruimtestation zonne energie vermeerdering +gc.configgui.space_stations_require_permission=Ruimte station bezoek toestemming +gc.configgui.static_loaded_dimensions=Statische geladen dimensies +gc.configgui.suffocation_cooldown=Tijd dat het duurt om te stikken +gc.configgui.suffocation_damage=schade dat stikken doet per keer +gc.configgui.title=Galacticraft Core configuratie +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore Wereld Generatie +gui.battery_slot.desc.0=Batterijsleuf, Plaats batterij Hier +gui.battery_slot.desc.1=Of gebruik een aangesloten Energie Bron +gui.bed_fail.message=ohoh, wat als de zuurstof opraakt terwijl ik slaap? in heb een cryokamer nodig om te slapen in de ruimte! +gui.buggy.accel.name=Acceleratie +gui.buggy.decel.name=Deceleratie +gui.buggy.inv.name=Inventaris / Brandstof +gui.buggy.storage_space=Opslag Capaciteit +gui.buggy.turn.name=Draai links-rechts +gui.button.back.name=Terug +gui.button.disable.name=Uitschakelen +gui.button.disableseal.name=zet zuurstofafsluiting uit +gui.button.enable.name=Inschakelen +gui.button.enableseal.name=zet zuurstofafsluiting aan +gui.button.hide_dest.name=Verbergen +gui.button.loadfuel.name=Laad Brandstof +gui.button.loaditems.name=Laad Items +gui.button.next.name=Volgende +gui.button.refine.name=Verfijn +gui.button.stoploading.name=Stop Inladen +gui.button.stoprefine.name=Stop Raffinage +gui.button.stopunloading.name=Stop Uitladen +gui.button.unhide_dest.name=Tonen +gui.button.unloaditems.name=Laad items uit +gui.button.unlockschematic.name=Programmeer bouwtekening in +gui.checkbox.horizontal.name=Horizontale Mode +gui.checkbox.invert.name=Selectie Omkeren +gui.checkbox.player_name.name=Spelers naam is +gui.checkbox.player_within.name=Speler is binnen +gui.checkbox.redstone_signal.name=Opent met Redstone Signaal +gui.chest.warning.wrongkey=Ik heb misschien een Tier %s Kerker sleutel nodig om dit te openen! +gui.choose_planet.desc.moon=Bewoonbaar#Geen zuurstof#Zwaartekracht: 18% +gui.choose_planet.desc.overworld=Vol met leven#Bewoonbaar#Zwaartekracht: 100% +gui.chooseplanet.alreadycreated1.name=Ruimte Station is al +gui.chooseplanet.alreadycreated2.name=gecreëerd! +gui.chooseplanet.cannotcreate1.name=Kan hier geen Ruimte +gui.chooseplanet.cannotcreate2.name=Station creëren! +gui.creative_only.desc=Alleen Creatief +gui.display.nolink=Geen verbinding +gui.docking_rocket.current_vel.name=Huidige Snelheid +gui.docking_rocket.distance_from.name=Afstand van Doelwit +gui.docking_rocket.target_vel.name=Doelwit Snelheid +gui.docking_rocket.warning.name.0=Druk %s om minder vaart te maken +gui.docking_rocket.warning.name.1=Druk %s om meer vaart te maken +gui.dropbox.player_distance.name.0=1 Meter +gui.dropbox.player_distance.name.1=2 Meter +gui.dropbox.player_distance.name.2=5 Meter +gui.dropbox.player_distance.name.3=10 Meter +gui.electric_compressor.desc.0=voortgang +gui.energy_storage.desc.0=Energie Opslag +gui.energy_storage.desc.1=Energie +gui.flag.already_placed=Vlag is hier al geplaatst! +gui.frequency_module.desc.0=Kan een zwak Signaal ontvangen +gui.frequency_module.desc.1=Golven en verre signalen +gui.frequencymodule.warning0=Ik heb misschien een Frequentie eenheid nodig +gui.frequencymodule.warning1=Als ik hier wil horen. +gui.fuel_output.desc.0=Plaats Lege vloeibare Bussen in +gui.fuel_output.desc.1=Brandstof Lader om te vullen +gui.fuel_output.desc.2=Brandstof Tank +gui.fuel_tank.desc.0=Brandstof Lader heeft nodig +gui.fuel_tank.desc.1=Brandstof Lader om te vullen +gui.fuel_tank.desc.2=Brandstof Tank, Kan worden Gevuld +gui.fuel_tank.desc.3=Met Brandstof Bussen +gui.fuel_tank.desc.4=Brandstof Tank +gui.infinite_item.desc=Oneindig +gui.lander.velocity=Binnenkomst Snelheid +gui.lander.velocityu=m/s +gui.lander.warning2=Houd " +gui.lander.warning3=" ingedrukt, om te remmen! +gui.max_output.desc=Maximale Uitgang +gui.message.addnewsch.name=Niew Schema Toevoegen +gui.message.apply.name=Toepassen +gui.message.assign_name.name=Naam Toewijzen +gui.message.atmosphere.name=Atmosfeer +gui.message.back.name=Terug +gui.message.breed.name=Paren +gui.message.bubble_visible.name=Bubbel Zichtbaar +gui.message.can_create_space_station.name=Een Ruimte Station Kan hier worden Gecreëerd +gui.message.cancel.name=Annuleren +gui.message.cannot_create_space_station.name=Een Ruimte Sation Kan hier niet worden Gecreëerd +gui.message.catalog.name=Catalogus +gui.message.click_again.0.name=Klik opnieuw Om te vergroten (Manen en Sattelieten) +gui.message.click_again.1.name=Klik opnieuw Om te vergroten (Manen) +gui.message.click_again.2.name=Klik opnieuw Om te vergroten (Sattelieten) +gui.message.click_again.3.name=Klik opnieuw Om te vergroten +gui.message.clicklink=Klik Voor Galacticraft Wiki +gui.message.create_ss.name=Creëren +gui.message.daynightcycle.name=Dag-Nacht Omloop +gui.message.energy=Energie +gui.message.environment.name=Milieu Boost +gui.message.exit.name=Sluiten +gui.message.fuel.name=Brandstof +gui.message.full.name=vol +gui.message.generating.name=Genereren +gui.message.grow.name=Groeien +gui.message.heal.name=Genezen +gui.message.help1=Voor Galacticraft Help +gui.message.help1a=Om dit bericht weer te zien, Typ +gui.message.help2=Voor Ruimte Programma Begeleiding +gui.message.help3=Voor Help Met olie +gui.message.in.name=In +gui.message.launch.name=Lanceren +gui.message.max_energy=Max Energie +gui.message.meansurfacetemp.name=Gemiddelde Oppervlakte Temperatuur +gui.message.moon.atmosphere.0.name=Geen +gui.message.moon.daynightcycle.0.name=29.5 Aarddagen +gui.message.moon.meansurfacetemp.0.name=(Lichte Kant) 253C +gui.message.moon.meansurfacetemp.1.name=(Donkere Kant) -153C +gui.message.moon.surfacecomposition.0.name=Basalt Steen En +gui.message.moon.surfacecomposition.1.name=Sporen van Kaas +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% van Aarde) +gui.message.of.name=van +gui.message.oil.name=Olie +gui.message.out.name=Uit +gui.message.overworld.atmosphere.0.name=Stikstof en Zuurstof +gui.message.overworld.atmosphere.1.name=Steunt Leven +gui.message.overworld.daynightcycle.0.name=1 Aarddag +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Steen, Aarde en +gui.message.overworld.surfacecomposition.1.name=Grind +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% van Aarde) +gui.message.prelaunch=Voor Lancering Checklist +gui.message.rename.name=Hernoemen +gui.message.select_ss.name=Selecteer een Ruimte Station +gui.message.ss_owner.name=Eigenaar: +gui.message.status.name=Status +gui.message.strengthen.name=Versterken +gui.message.surfacecomposition.name=Oppervlakte Samenstelling +gui.message.surfacegravity.name=Oppervlakte Zwaartekracht +gui.message.thermal_status.name=Temperatuur controle +gui.message.tier.name=Level %d +gui.message.unnamed.name=naamloos +gui.missing_core.name.0=MicdoodleCore is niet gevonden in het mods folder +gui.missing_core.name.1=Galacticraft Faalde te laden +gui.missing_core.name.2=Sluit Minecraft en installeer MicdoodleCore +gui.missing_core.name.3=Klik hier om de download pagina te openen +gui.new_schematic.slot.desc.0=Nieuw schematic slot. Je +gui.new_schematic.slot.desc.1=kan nieuwe schematics vinden +gui.new_schematic.slot.desc.2=Bij het voltooien van Kerkers +gui.new_schematic.slot.desc.3=Op planeten en manen. +gui.oil_tank.desc.0=Olie Tank, Kan worden Gevuld +gui.oil_tank.desc.1=Met Olie Bussen +gui.oxygen.warning=Zuustof setup is ongeldig! +gui.oxygen_compressor.slot.desc.0=Compressor tank slot, Plaats Zuurstof Tank +gui.oxygen_compressor.slot.desc.1=hier om het te vullen met adembare zuurstof. +gui.oxygen_decompressor.slot.desc.0=Decompressor tank slot, Plaats Zuurstof Tank +gui.oxygen_decompressor.slot.desc.1=hier om de adembare Zuurstof eruit te halen. +gui.oxygen_slot.desc.0=Zuurstof sleuf, Plaats Zuurstof Bus of Tank +gui.oxygen_slot.desc.1=Hier, Of gebruik een aangesloten Zuurstof Voorziening +gui.oxygen_storage.desc.0=Zuurstof Opslag +gui.oxygen_storage.desc.1=Zuurstof +gui.oxygen_use.desc=Zuurstof Gebruik +gui.per_second=/s +gui.player.bpm=BPM +gui.player.food=Voedsel +gui.player.health=Gezondheid +gui.player.ouch=AU!!!! +gui.receiver.cannot_attach=Kan hier niet de ontvanger vast maken! +gui.requires_controller.desc=Heeft Lanceer Controleur Nodig +gui.rocket.countdown=Aftelling +gui.rocket.height=Hoogte +gui.rocket.inv.name=Inventaris / Brandstof +gui.rocket.launch.name=Lanceren +gui.rocket.launched=Gelanceerd +gui.rocket.on_launchpad=Op lanceerplatform +gui.rocket.speed=Snelheid +gui.rocket.turn.name=Draai link-rechts +gui.rocket.updown.name=Draai op-neer +gui.rocket.warning.nofuel=Ik moet eerst Raket brandstof laden! +gui.rocket.warning.nogyroscope=Mysterieuze krachten zijn aanwezig en de gyroscoop draait door! +gui.rocket.warning.noparachute=Ik heb geen Parachute! Als ik weer op Lanceren Druk, Dan kan ik niet meer terug! +gui.rocket_type.0=Opslag Capaciteit: 18 +gui.rocket_type.1=Opslag Capaciteit: 36 +gui.rocket_type.2=Opslag Capaciteit: 56 +gui.rocket_type.3=Alles van Brandstof Voorzien +gui.seconds=s +gui.sensor.advanced=Geavanceerd +gui.sensor.advancedoff=UIT +gui.sensor.advancedon=AAN +gui.show_bubble.desc.0=Toon Bel +gui.skeleton_boss.message=Baas despawned, Ga niet uit de baas kamer tijdens het vechten! Ga opnieuw in de kamer om de baas te laten respawnen. +gui.space_race.chat.add_success=%s Heeft deelgenomen aan de ruimte race +gui.space_race.chat.already_part=Je bent al onderdeel van de Ruimte Race! +gui.space_race.chat.invite_received=Ruimte Race Team uitnodiging van %s. +gui.space_race.chat.not_found=Kan geen speler vinden met de naam: %s +gui.space_race.chat.remove_success=%s Is verwijderd uit de ruimte race +gui.space_race.chat.to_join=Om met %s mee te doen gebruik deze Command : %s +gui.space_race.coming_soon=Komt Binnenkort +gui.space_race.create.add_players.name=Voeg Speler(s) Toe +gui.space_race.create.back.name=Terug +gui.space_race.create.brush_radius.name=Kwast Radius +gui.space_race.create.brush_size.name=Kwast Grootte +gui.space_race.create.change_color.name.0=Verander +gui.space_race.create.change_color.name.1=Team +gui.space_race.create.change_color.name.2=Kleur +gui.space_race.create.close.name=Sluiten +gui.space_race.create.customize.name=Personaliseer Vlag +gui.space_race.create.eraser_radius.name=Gum Radius +gui.space_race.create.eraser_size.name=Gum Grootte +gui.space_race.create.global_stats.name=Toon Globale Statussen +gui.space_race.create.invite_player.name=Nodig Speler Uit +gui.space_race.create.player_radius.name=Let op: Spelers moeten binnen bereik zijn! (25 Blokken) +gui.space_race.create.rem_players.name=Verwijder Speler(s) +gui.space_race.create.remove.name=Verwijder +gui.space_race.create.remove_player.name=Verwijder Speler +gui.space_race.create.rename.name=Hernoem Team +gui.space_race.create.send_invite.name=Stuur Uitnodiging +gui.space_race.create.server_stats.name=Toon Server Statussen +gui.space_race.create.title.name=Ruimte Race Manager +gui.space_race.create.title.name.0=Ruimte Race +gui.space_race.create.title.name.1=Manager +gui.space_race.join.member_count.name=%d Leden +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Eigenaar +gui.space_race.join.title.name=Meedoen Met ruimte race +gui.space_race.unnamed=Naamloos Team +gui.spacestation.added=Je bent Toegevoegd bij %s's geaccepteerde spelers van het ruimtestation! +gui.spacestation.addsuccess=%s is Succesvol toegevoegd bij de lijst van geaccepteerde Spelers! +gui.spacestation.allow_all_false=Jouw Ruimte Stations zijn niet meer open voor alle spelers! +gui.spacestation.allow_all_true=Jouw Ruimte Stations zijn nu open voor alle spelers! (Gebruik /ssinvite -all om het ongedaan te maken.) +gui.spacestation.changesuccess=Ruimte Station Eigenaar veranderd van %s naar %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=%s Is succesvol Verwijderd van de ruimtestation lijst! +gui.spacestation.to_allow_entry=Om een ander Speler Toe te laten in het ruimtestation! +gui.spacestation.type_command=Typ +gui.status.active.name=Actief +gui.status.air_lock_closed.name=Luchtsluis Gesloten +gui.status.air_lock_open.name=Luchtsluis Open +gui.status.blockedfully.name=Zon is niet zichtbaar +gui.status.blockedpartial.name=Zon Gedeeltelijk Zichtbaar +gui.status.check_pending.name=Controlatie Afwachting +gui.status.check_starting.name=Controlatie Starten +gui.status.checking_seal.name=Afsluiting Controleren +gui.status.collecting.name=Verzamelen +gui.status.collectingenergy.name=Energie aan het verzamelen +gui.status.compressing.name=Samenpersen +gui.status.disabled.name=Uitgeschakelt +gui.status.fulltank.name=Zuurstof tank vol +gui.status.generating.name=Genereren +gui.status.hull_heat.name=Romp Warmte +gui.status.idle.name=Ijdel +gui.status.missingleaves.name=Niet genoeg bladeren +gui.status.missingoxygen.name=Niet genoeg zuurstof +gui.status.missingpower.name=Niet genoeg stroom +gui.status.missingtank.name=Geen geldige zuurstof tank aanwezig +gui.status.nofuel.name=Geen brandstof om te laden! +gui.status.noinvtarget.name=Bestemming heeft geen inventaris! +gui.status.noitems.name=Geen items om te laden! +gui.status.nooil.name=Geen olie +gui.status.not_available.name=N/A +gui.status.not_generating.name=Niet Genereren +gui.status.notargetload.name=Geen bestemming om in te laden! +gui.status.notargetunload.name=Geen bestemming om uit te laden! +gui.status.off.name=Uit +gui.status.on.name=Aan +gui.status.raining.name=Aan het Regenen +gui.status.ready.name=Klaar +gui.status.refining.name=Verfijnen +gui.status.running.name=Lopend +gui.status.sealed.name=Afgesloten +gui.status.sealerblocked.name=Uitgang Luchter Geblokeerd +gui.status.sun_visible.name=Zon Zichtbaar +gui.status.tank_empty.name=Zuurstof Tank Leeg +gui.status.targetempty.name=Voertuig is leeg! +gui.status.targetfull.name=Voertuig is vol! +gui.status.unknown.name=Onbekend +gui.status.unsealed.name=Niet afgesloten +gui.tank.oxygen_remaining=Zuurstof Over +gui.telemetry_fail.message=Eerst moet ik een wezen Opsporen met die frequentie module! (Of probeer het te dragen!) +gui.telemetry_fail_no_frequency_module.message=Ik heb misschien een frequentie module in mijn hand nodig om er gebruik van te maken! +gui.telemetry_fail_wearing_it.message=Ik moet de frequentie module af doen om een link met de telemetrie eenheid te maken! +gui.telemetry_succeed.message=Telemetrie Link Gecreëerd +gui.thermal_slot.desc.0=Temperatuur apparaat verbindings plek, plaats een 'Omgevings +gui.thermal_slot.desc.1=temperatuur controle apparaat' hier (optioneel) +gui.thermal_slot.desc.2=Let op: Verbruikt meer energie! +gui.title.air_lock.name=%s's Luchtsluis Controleur +gui.tracking.message=Opsporing Geactiveerd. Nu moet ik Met de Rechter-muisknop op de telemetrie eenheid klikken om de link te Creëren. +gui.warning=WAARSCHUWING! +gui.warning.invalid_thermal=Onvoeldoende Thermische Bescherming! +gui.warning.noroom=Niet genoeg Ruimte! +item.air_fan.name=Ventilator +item.air_vent.name=Ontluchter +item.basic_item.ambient_thermal_controller.name=Omgevings temperatuur controle apparaat +item.basic_item.canned_food.name=Kan met voedsel +item.basic_item.compressed_aluminum.name=Samengeperst Aluminium +item.basic_item.compressed_bronze.name=Samengeperst Brons +item.basic_item.compressed_copper.name=Samengeperst Koper +item.basic_item.compressed_iron.name=Samengeperst Ijzer +item.basic_item.compressed_steel.name=Samengeperst Staal +item.basic_item.compressed_tin.name=Sampengeperst Tin +item.basic_item.dehydrated_apple.name=Uitgedroogde Appels +item.basic_item.dehydrated_carrot.name=Uitgedroogde Wortels +item.basic_item.dehydrated_melon.name=Uitgedroogde Meloenen +item.basic_item.dehydrated_potato.name=Uitgedroogde Aardappelen +item.basic_item.frequency_module.name=Frequentie Module +item.basic_item.ingot_aluminum.name=Aluminium Staaf +item.basic_item.ingot_bronze.name=Bronzen +item.basic_item.ingot_copper.name=Koperen Staaf +item.basic_item.ingot_steel.name=Stalen Staaf +item.basic_item.ingot_tin.name=Tinnen Staaf +item.basic_item.raw_silicon.name=Ruwe Silicium +item.basic_item.solar_module_0.name=Enkel Zonnepaneel +item.basic_item.solar_module_1.name=Volledig Zonnepaneel +item.basic_item.wafer_advanced.name=Geavenceerde Wafer +item.basic_item.wafer_basic.name=Normale Wafer +item.basic_item.wafer_solar.name=Blauwe Zonne Wafer +item.battery.name=Batterij +item.bucket_fuel.name=Emmer Brandstof +item.bucket_oil.name=Emmer Olie +item.buggy.name=Buggy +item.buggymat.seat.name=Buggy Seat +item.buggymat.storage.name=Buggy Storage Box +item.buggymat.wheel.name=Buggy Wheel +item.canister.copper.name=Koperen bus +item.canister.tin.name=Tin bus +item.canvas.name=Zeil +item.cheese_block.name=Kaas blok +item.cheese_curd.name=Kaaswrongel +item.compressed_meteoric_iron.name=Samengeperst Meteorisch IJzer +item.empty_liquid_canister.name=Leeg vloeistof bus +item.engine.tier1booster.name=Tier 1 Booster +item.engine.tier1engine.name=Tier 1 Rocket Motor +item.flag.name=Vlag +item.fuel.name=Raket Brandstof +item.fuel_canister.name=Gevulde brandstof bus +item.fuel_canister_partial.name=Gedeeltelijk gevulde brandstof bus +item.heavy_plating.name=Zware beplating +item.hot_description.name=Heet +item.infinite_battery.name=Oneindige Batterij +item.infinite_oxygen.name=Oneindige Zuurstof Voorziening +item.key.t1.name=Level 1 Kerker sleutel +item.meteor_chunk.name=Gooibaar Meteoor Brokstuk +item.meteor_chunk_hot.name=Gooibaar Meteoor Brokstuk +item.meteoric_iron_ingot.name=Meteoriet ijzer staaf +item.meteoric_iron_raw.name=Ruwe meteoriet staaf +item.nose_cone.name=Neuskegel +item.oil_canister.name=Gevulde olie bus +item.oil_canister_partial.name=Gedeeltelijk gevulde olie bus +item.oil_extractor.name=Verplaatsbare olie extractor +item.oxygen_concentrator.name=Zuurstof Concentrator +item.oxygen_gear.name=Zuurstof uitrusting +item.oxygen_mask.name=Zuurstof masker +item.oxygen_tank_heavy_empty.name=Lege grote zuurstof tank +item.oxygen_tank_heavy_full.name=Grote zuurstof tank +item.oxygen_tank_light_empty.name=Lege kleine zuurstof tank +item.oxygen_tank_light_full.name=Kleine zuurstof tank +item.oxygen_tank_med_empty.name=Kleine middelmatige zuurstof tank +item.oxygen_tank_med_full.name=Middelmatige zuurstof tank +item.parachute_black.name=Zwarte Parachute +item.parachute_blue.name=Licht Blauwe Parachute +item.parachute_brown.name=Bruine Parachute +item.parachute_darkblue.name=Blauwe Parachute +item.parachute_darkgray.name=Grijze Parachute +item.parachute_darkgreen.name=Groene Parachute +item.parachute_gray.name=Licht Grijze Parachute +item.parachute_lime.name=Groene Parachute +item.parachute_magenta.name=Roodpaarse Parachute +item.parachute_orange.name=Oranje Parachute +item.parachute_pink.name=Roze Parachute +item.parachute_plain.name=Parachute +item.parachute_purple.name=Paarse Parachute +item.parachute_red.name=Rode Parachute +item.parachute_teal.name=Cyaanen Parachute +item.parachute_yellow.name=Gele Parachute +item.rocket_fins.name=Raket vleugels +item.rocket_t1.name=Ruimteschip +item.schematic.name=NASA werkbank schema +item.sensor_glasses.name=Sensor bril +item.sensor_lens.name=Sensor lens +item.standard_wrench.name=Standaard Moersleutel +item.steel_axe.name=Stalen bijl +item.steel_boots.name=Stalen schoenen +item.steel_chestplate.name=Stalen borstplaat +item.steel_helmet.name=Stalen helm +item.steel_hoe.name=Stalen schoffel +item.steel_leggings.name=Stalen broek +item.steel_pickaxe.name=Stalen pikhouweel +item.steel_pole.name=Stalen Paal +item.steel_shovel.name=Stalen schep +item.steel_sword.name=Stalen zwaard +item.tier1.desc=Level 1 +item_desc.powerdraw.name=Energie Nodig: %s /s +item_desc.shift.name=Druk %s Voor meer info +item_group.galacticraft_blocks=Galacticraft Blokken +item_group.galacticraft_items=Galacticraft Items +keybind.map.name=Galaxy Map +keybind.sensortoggle.name=Verander sensorbril instelling +keybind.spaceshipinv.name=Open Raket Inventaris +keybind.vehiclebackward.name=Voertuig naar achteren +keybind.vehicledown.name=Voertuig omlaag +keybind.vehicleforward.name=Voertuig naar voren +keybind.vehicleleft.name=Voertuig naar links +keybind.vehicleright.name=Voertuig naar rechts +keybind.vehicleup.name=Voertuig omhoog +moon.moon=Maan +newversion.failed.name=Galacticraft update check gefaalt! Probeer het opnieuw in 15 seconden. +newversion.success.name=Galacticraft remote versie gevonden: +planet.jupiter=Jupiter +planet.mercury=Mercurius +planet.neptune=Neptunus +planet.overworld=Overwereld +planet.saturn=Saturnus +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Overwereld Ruimte Station +schematic.moonbuggy.name=Maan wagen +schematic.rocket_t1.name=Level 1 Raket +schematic.rocket_t2.name=Leven 2 Raket +solarsystem.sol=Zonnestelsel +star.sol=Zon +tile.air_lock_controller.name=Luchtsluis Controleur +tile.air_lock_frame.description=Luchtsluis geraamtes, in een portaalvorm gebouwd en verbonden met een luchtsluis controle apparaat, funtioneren als een werkende luchtsluis. +tile.air_lock_frame.name=Luchtsluis Geraamte +tile.air_lock_seal.name=Luchtsluis Slot +tile.aluminum_wire.alu_wire.description=Aluminium draad wordt gebruikt om elektriche energie te vervoeren tussen energie producerende en verbruikende machines. +tile.aluminum_wire.alu_wire.name=Aluminum Draad +tile.aluminum_wire.alu_wire_heavy.description=Zware aluminium draad wordt gebruikt om elektriche energie te vervoeren tussen energie producerende en verbruikende machines. Vervoert meer energie dan normale aluminium draad. +tile.aluminum_wire.alu_wire_heavy.name=Zware Aluminium Draad +tile.arclamp.description=Booglampen produceren een sterk licht, dat de meeste monsters wegjaagd +tile.arclamp.name=Booglamp +tile.basic_block_core.block_aluminum_gc.name=Aluminum Blok +tile.basic_block_core.block_copper_gc.name=Koperen Blok +tile.basic_block_core.block_meteoric_iron_gc.name=Vast Meteorisch Ijzer +tile.basic_block_core.block_tin_gc.name=Tinnen Blok +tile.basic_block_core.deco_block_0.name=Tin Decoratie Blok +tile.basic_block_core.deco_block_1.name=Tin Decoratie Blok +tile.basic_block_core.ore_aluminum_gc.name=Aluminium Erts +tile.basic_block_core.ore_copper_gc.name=Koper Erts +tile.basic_block_core.ore_silicon.name=Silicium Erts +tile.basic_block_core.ore_tin_gc.name=Tin Erts +tile.basic_block_moon.bricks.name=Bakstenen +tile.basic_block_moon.cheesestone.name=Kaas erts +tile.basic_block_moon.coppermoon.name=Koper erts +tile.basic_block_moon.moondirt.name=Aarde +tile.basic_block_moon.moongrass.name=Gras +tile.basic_block_moon.moonstone.name=Steen +tile.basic_block_moon.tinmoon.name=Tin erts +tile.buggy_pad.description=Tankform kan worden gebruikt om een maanwagen te tanken als het in een 3x3 vierkant is gebouwd en er een brandstoflader is aangesloten. Waarschuwing: is geen lanceerplatform en je kunt er geen raketten mee lanceren! +tile.cargo.loader.name=Lading inlader +tile.cargo.unloader.name=Lading uitlader +tile.cargo_loader.description=Lading inlanders worden gebruikt om lading in een voertuig te laden als het is verbonden met een lanceer/tank platform. +tile.cargo_unloader.description=Lading uitlanders worden gebruikt om lading uit een voertuig te laden als het is verbonden met een lanceer/tank platform. +tile.cheese.description=Kaas blokken zijn gemaakt van de Kasen op de maan, plaatsbaar en eetbaar. (iedereen weet dat de maan van kaas is) +tile.cheese.name=Kaas blok +tile.circuit_fabricator.description=Circuit fabricator produceert silicium circuits van basis grondstoffen om te gebruiken in geavanceerde machines +tile.coal_generator.description=Koolgenerator verbrandt kool voor energie. simpelste maar minst efficiente energieproductie methode. +tile.collector.description=Zuurstof Collector slaat zuurstof op van bladeren in de buurt. +tile.collector.name=Zuurstof verzamelaar +tile.compressor.description=De compressor bewerkt staven in hun gecomprimeerde vorm. +tile.compressor_electric.description=De elecktrische compressor bewerkt staven in hun gecomprimeerde vorm. Comprimeerd twee per keer, wat het beter maakt dan een normale compressor. +tile.crude_oil.name=Olie +tile.crude_oil_moving.name=Ruwe Olie +tile.crude_oil_still.name=Ruwe Olie +tile.dishbase.description=De communicatie schotel kan ruimtestations volgen in hun baan en signalen opvangen van afgelegen ruimtebasissen. +tile.dishbase.name=Communicatie Schotel +tile.distributor.description=Zuurstof Verdeler geeft zuurstof af vanuit het midden. Dit zorgt er voor dat je kan ademen in de bubbel. +tile.distributor.name=Zuurstof verdeler +tile.dummyblock.cryogenic_chamber.name=Cryogenische Kamer +tile.dummyblock.launch_pad.name=Raket Lanceer Platform +tile.dummyblock.nasa_workbench.name=NASA Werkbank +tile.dummyblock.solar.name=Zonne Panneel +tile.dummyblock.space_station_base.name=Ruimte Station Basisblok +tile.electric_furnace_tier1.description=Elektische oven is een beter alternatief voor traditionele koolovens. +tile.electric_furnace_tier2.description=Elektische boogoven is een beter alternatief voor traditionele koolovens en elektrische ovens. Verdubbelt ersen! +tile.enclosed.aluminum_wire.name=Afsluitbare Alumium Draad +tile.enclosed.heavy_aluminum_wire.name=Afsluitbare Zware Aluminium Draad +tile.enclosed.copper_cable.name=Afsluitbare Koperen Kabel +tile.enclosed.description=Afsluitbare Blokken zouden ergens moeten gebruikt worden waar lucht niet kan ontsnappen, Zoals de muren van een ruimtebasis. +tile.enclosed.glass_fibre_cable.name=Afsluitbare Glasvezel Kabel +tile.enclosed.gold_cable.name=Afsluitbare Gouden Kabel +tile.enclosed.hv_cable.name=Afsluitbare HS Kabel +tile.enclosed.lv_cable.name=Afsluitbare Ultra-Lage-Stroom Kabel +tile.enclosed.me_cable.name=Afsluitbare ME kabel +tile.enclosed.fluid_pipe.name=Afsluitbare zuurstof pipe +tile.enclosed.pipe_fluids_cobblestone.name=Afsluitbare Keistenen Waterbestendigde Pijp +tile.enclosed.pipe_fluids_stone.name=Afsluitbare Stenen Waterbestendigde Pijp +tile.enclosed.pipe_items_cobblestone.name=Afsluitbare Keistenen Tranport Pijp +tile.enclosed.pipe_items_stone.name=Afsluitbare Stenen Transport Pijp +tile.enclosed.pipe_power_gold.name=Afsluitbare Gouden Geleidende Pijp +tile.enclosed.pipe_power_stone.name=Afsluitbare Stenen Geleidende Pijp +tile.energy_storage_module_tier1.description=Energie opslag module wordt gebruikt om elektriciteit op te slaan om later te gebruiken. +tile.energy_storage_module_tier2.description=Energie opslag cluster wordt gebruikt om elektriciteit op te slaan om later te gebruiken. Slaat meer op dan een normale energie opslag module. +tile.fallen_meteor.description=Meteorieten kunnen worden gevonden op planeten en manen met weinig tot geen atmosfeer. geeft meteorietenijzer als het gebroken wordt. +tile.fallen_meteor.name=Meteoriet +tile.fuel.name=Brandstof +tile.fuel_block.name=Brandstof +tile.fuel_loader.description=Na het aansluiten bij een lanceerplatform, een brandstof lader zal brandstof toelaten in de aangesloten raket of een ander voertuig. +tile.fuel_loader.name=Brandstof Lader +tile.glowstone_torch.description=Gloeisteen fakkels zijn om te gebruiken als er geen zuurstof is voor houten fakkels om te branden. +tile.glowstone_torch.name=Gloeisteen Fakkel +tile.landing_pad.buggy_fueler.name=Maanwagen tank platform +tile.landing_pad.cargo_pad.name=Landingsraket landingsplatform +tile.landing_pad.description=Landingsplaatsen zorgen ervoor dat je raketten kun plaatsen, als je het in een 3x3 vierkant plaatst. Brandstof Laders, Vracht Laders en Lanceer Controleurs Kunnen worden verbonden. +tile.landing_pad.landing_pad.name=Raket Lanceerplatform +tile.landing_pad_full.name=Raket Lanceerplatform +tile.machine.0.name=Kool Generator +tile.machine.1.name=Energie Opslag Module +tile.machine.2.name=Elektrische Oven +tile.machine.3.name=Compressor +tile.machine.7.name=Elektrische Vlamboogoven +tile.machine.8.name=Energie Opslag Bundel +tile.machine2.4.name=Elektrische Compressor +tile.machine2.5.name=Omloop Fabricator +tile.machine2.6.name=Zuurstof Opslag Module +tile.moon_stairs_brick.name=Maan Kerker Bakstenen Treden +tile.moon_stairs_stone.name=Maan Stenen Treden +tile.ore_copper.name=Koper Erts +tile.ore_tin.name=Tin Erts +tile.oxygen_compressor.0.name=Zuurstof Compressor +tile.oxygen_compressor.1.name=Zuurstof Decompressor +tile.oxygen_compressor.description=Zuurstof Compressor slaat zuurstof op in tanks. +tile.oxygen_decompressor.description=Zuurstof Decompressor haalt de zuurstof uit zuurstof tanks. +tile.oxygen_detector.description=Zuustof Detector geeft een redstone signaal wanneer er zuurstof aanwezi is. +tile.oxygen_detector.name=Zuurstof Detector +tile.oxygen_pipe.description=Zuustof Pijp helpt met het vervoeren van zuurstof van de ene machine naar de andere. +tile.oxygen_pipe.name=Zuurstof pijp +tile.oxygen_storage_module.description=Zuurstof opslag modules slaan zuurstof op om later te gebruiken. +tile.parachest.description=Parachute-kisten vallen uit de lucht na het landen op bepaalde planeten of manen, zoals de aarde. Bevat raket, lading, en overgebleven brandstof van de vorige lancering. +tile.parachest.name=Parachute-kist +tile.refinery.description=De rafinaderij zal olie en energie invoeren, en zal brandstof uitvoeren voor raketten en voertuigen. +tile.refinery.name=Raffinaderij +tile.rocket_workbench.description=De NASA werkbank wordt gebruikt om raketten en andere voertuigen te maken. +tile.rocket_workbench.name=NASA werkbank +tile.sapling2.birch.name=Jonge Berk +tile.sapling2.jungle.name=Jonge Jungle Boom +tile.sapling2.oak.name=Jonge Eik +tile.sapling2.spruce.name=Jonge Spar +tile.sealer.description=Zuurstof Afsluiter kijkt voor afgesloten ruimtes. Als er een afgesloten ruimte is zal die het vullen met lucht. +tile.sealer.name=Luchtsluis +tile.slab_gc_half.moon_bricks_slab.name=Maan Kerker Bakstenen Plaat +tile.slab_gc_half.moon_slab.name=Maan Stenen Plaat +tile.slab_gc_half.tin_slab_1.name=Tinnen Decoratie Plaat +tile.slab_gc_half.tin_slab_2.name=Tinnen Decoratie Plaat +tile.solar.advanced_solar.name=Geavanceerde Zonnepaneel +tile.solar.basic_solar.name=Normale Zonnepaneel +tile.solar_adv.description=Geavanceerde zonnepanelen genereren energie van zonlicht. Past de hoek van het paneel automatich aan om de meeste energie te verzamelen. +tile.solar_basic.description=Normale zonnepanelen genereren energie van zonlicht. Genereert de meeste energie op het midden van de dag. +tile.space_station_base.name=Ruimte Station Arriveer Blok +tile.spin_thruster.description=Rotatie motoren worden gebruikt om ruimtestations te laten draaien. +tile.spin_thruster.name=Rotatie motor +tile.telemetry.description=Verzamelt nuttige informatie over verbonden raketten, spelers, en monsters. Plaats naast een beeldscherm. Gebruik een frequentie module om een data verbinding te maken. +tile.telemetry.name=telemetrie Eenheid +tile.tin_stairs_1.name=Tinnen Decoratie Treden +tile.tin_stairs_2.name=Tinnen Decoratie Treden +tile.treasure_chest.description=Level 1 schatkisten genereren in maankerkers. De baas dropt de sleutel om het te openen. +tile.treasure_chest.name=Schatkist +tile.unlit_torch.name=Fakkel +tile.unlit_torch_stone.name=Stenen Fakkel +tile.unlit_torch_lit.name=Fakkel +tile.unlit_torch_stone_lit.name=Stenen Fakkel +tile.view_screen.description=Beeldschermen maken je ruimtebasis helemaal af! Klik met de rechtermuisknop om de informatie te veranderen. Kan ook verbinden met andere beeldschermen om een groot beeldscherm te maken. +tile.view_screen.name=Beeldscherm +tile.wall_gc.moon.name=Maan Stenen Muur +tile.wall_gc.moon_bricks.name=Maan Kerker Bakstenen Muur +tile.wall_gc.tin.name=Tinnen Decoratie Muur diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pl_pl.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pl_pl.lang new file mode 100644 index 00000000..6147b650 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pl_pl.lang @@ -0,0 +1,823 @@ +checklist.create_grapple.key=Stwórz hak chwytak +checklist.equip_oxygen_suit.key=Wyekwipuj strój astronauty +checklist.equip_parachute.key=Wyekwipuj spadochron +command.gcastrominer.count=Liczba Astro Kopaczy dla gracza %s wynosi %s +commands.emergencykit=Graczowi %s został dany zestaw awaryjny! +commands.dimensionteleport=Gracz %s został wysłany do atmosfery gracza %s +commands.dimensiontp.too_many=Za dużo argumentów w komendzie! Wykorzystanie: %s +commands.gcenergyunits.invalid_units=Niepoprawne jednostki w komendzie /GCEnergyUnits. Wykorzystanie: %s +commands.gcenergyunits.no_units=Jednostki muszą być podane! Wykorzystanie: %s +commands.gchouston.confirm.1=Tutaj Kontrola Misji, możesz powtórzyć? +commands.gchouston.confirm.2=(Aby opuścić misję, wpisz /gchouston znowu aby potwierdzić.) +commands.gchouston.fail=Komenda /gchouston jest tylko dostępna z przestrzeni kosmicznej (lub Trybu Kreatywnego). +commands.gchouston.help.1=Uh, Houston, mamy problem.... +commands.gchouston.help.2=(Wpisz /gchouston aby opuścić misję i powrócić do domu.) +commands.gchouston.noop=Używanie komendy /gchouston na innych graczach jest wyłącznie dostępne dla operatorów. +commands.gchouston.success=OK, trzymaj się, %s, teleportowanie do pozycji domu w Świecie. +commands.joinrace.no_team=Drużyna musi być określona! Wykorzystanie: %s +commands.ssinvite.not_found=Nie znaleziono stacji kosmicznej z twoim imieniem, musisz się tam najpierw wybrać! +commands.ssinvite.wrong_usage=Za mało argumentów w komendzie! Wykorzystanie: %s +commands.ssnewowner.wrong_usage=Nie można rozpoznać ID# Stacji Kosmicznej - czy ona w ogóle istnieje? Wykorzystanie: %s +commands.ssuninvite.no_player=Nie znaleziono gracza o nazwie %s na twojej liście Stacji Kosmicznej! +container.cargoloader.name=Ładownik +container.cargounloader.name=Wyładownik +container.fuelloader.name=Ładownik paliwa +container.lander.name=Lądownik kosmiczny +container.magneticcrafting.name=Konstruowanie +container.oxygencollector.name=Zbieracz tlenu +container.oxygencompressor.name=Kompresor tlenu +container.oxygendecompressor.name=Dekompresor tlenu +container.oxygendistributor.name=Dystrybutor tlenu +container.oxygensealer.name=Uszczelniacz tlenu +container.parachest.name=Para-skrzynia +container.refinery.name=Rafineria +container.solaradvanced.name=Zaawansowany panel słoneczny +container.solarbasic.name=Standardowy panel słoneczny +container.spaceship.name=Rakieta poziomu 1 +container.treasurechest.name=Skrzynia skarbów +death.attack.meteor_chunk=%1$s został uderzony przez meteorytowy gruz! +death.attack.oxygen_suffocation=%1$s udusił się z braku tlenu! +death.attack.spaceship_crash=%1$s zginął rozbijając się rakietą o ziemię! Uups. +death.attack.sulphuric_acid=%1$s rozpuścił się w kwasie siarkowym! +death.attack.thermal=%1$s zapomniał ochrony termalnej! +dimension.moon.name=Księżyc +dimension.overworld.name=Świat +dimension.sun.name=Słońce +entity.alien_villager.name=Kosmita osadnik +entity.buggy.name=Buggy +entity.celestial_screen.name=Kosmiczny ekran +entity.evolved_creeper.name=Wyewoluowany creeper +entity.evolved_skeleton.name=Wyewoluowany szkielet +entity.evolved_skeleton_boss.name=Wyewoluowany Boss szkielet +entity.evolved_spider.name=Wyewoluowany pająk +entity.evolved_zombie.name=Wyewoluowany zombie +entity.evolved_enderman.name=Wyewoluowany enderman +entity.evolved_witch.name=Wyewoluowana wiedźma +entity.flag.name=Flaga +entity.gcflag.name=Flaga +entity.gravity_arrow.name=Strzała +entity.lander.name=Lądownik kosmiczny +entity.meteor.name=Meteor +entity.meteor_chunk.name=Kawałek meteorytu +entity.oxygen_bubble.name=Bańka tlenowa +entity.para_chest.name=Paraskrzynia +entity.rocket_t1.name=Rakieta poziomu 1 +galaxy.milky_way=Droga Mleczna +gc.configgui.allow_liquids_grating=Pozwól aby ciecze spływały w ruszt +gc.configgui.alternate_canister_recipe=Alternatywna receptura dla kanistra +gc.configgui.asteroids_flags=Flagi Trybu Wyzwania +gc.configgui.asteroids_start=Tryb wyzwania (start na Asteroidach) +gc.configgui.biome_id_base=BiomeID Stacji dla GC +gc.configgui.detectable_i_ds=Wykrywalne ID +gc.configgui.disable_biome_type_registrations=Wyłącz registracje Typu Biomu +gc.configgui.disable_cheese_moon=Wyłącz generowanie sera na Księżycu +gc.configgui.disable_copper_moon=Wyłącz generowanie miedzi na Księżycu +gc.configgui.disable_lander=Wyłącz lądownik na Księżycu. +gc.configgui.disable_moon_village_gen=Wyłącz generowanie wiosek na Księżycu +gc.configgui.disable_ore_dict_space_metals=Receptury muszą używać własnych metalów kosmicznych z GC +gc.configgui.disable_sapphire_moon=Wyłącz generowanie rudy szafiru na Księżycu +gc.configgui.disable_space_station_creation=Wyłącz tworzenie Stacji Kosmicznych +gc.configgui.disable_spaceship_grief=Wyłącz wybuch rakiet +gc.configgui.disable_spaceship_particles=Wyłącz cząsteczki rakiety +gc.configgui.disable_tin_moon=Wyłącz generowanie cyny na Księżycu +gc.configgui.disable_update_check=Wyłącz sprawdzanie aktualizacji +gc.configgui.disable_vehicle_camera_changes=Vivecraft: Wyłącz trzecią osobę i przybliżenie +gc.configgui.dungeon_boss_health_mod=Modyfikator życia Bossów +gc.configgui.enable_aluminum_ore_gen=Generowanie aluminium na Świecie +gc.configgui.enable_copper_ore_gen=Generowanie miedzi na Świecie +gc.configgui.enable_debug=Pokazuj wiadomości debugowania w konsoli +gc.configgui.enable_other_mods_features=Włącz generowanie świata zewnętrznych modyfikacji +gc.configgui.enable_retrogen_oil=Retrogenowa ropa na Świecie +gc.configgui.enable_sealer_edge_checks=Sprawdzenia krawędźi uszczelnienia +gc.configgui.enable_silicon_ore_gen=Generowanie sylikonu na Świecie +gc.configgui.enable_space_race_manager_popup=Włącz popup menedżera wyścigu kosmicznego +gc.configgui.enable_thaum_craft_nodes=Włącz węzły ThaumCraft na planetach +gc.configgui.enable_tin_ore_gen=Generowanie cyny na Świecie +gc.configgui.external_oil_gen=Zewnętrzna generacja ropy +gc.configgui.force_overworld_respawn=Wymuś odrodzenie na Świecie +gc.configgui.hard_mode=Zwiększenie trudności +gc.configgui.id_achiev_base=ID podstawowych osiągnięć +gc.configgui.id_dimension_moon=ID Typu wymiaru Księżyc +gc.configgui.id_dimension_overworld=Wymiar Świata +gc.configgui.id_dimension_overworld_orbit=ID Typu wymiaru Stacja Kosmiczna +gc.configgui.id_dimension_overworld_orbit_static=ID Typu wymiaru Statyczna Stacja Kosmiczna +gc.configgui.id_schematic_add_schematic=ID schematów "Dodaj schemat" +gc.configgui.id_schematic_moon_buggy=ID schematów księżycowego Buggy +gc.configgui.id_schematic_rocket_t1=ID schematów rakiety poziomu 1 +gc.configgui.key_override_fuel_level=Ustaw klawisz: GUI paliwa rakiety +gc.configgui.key_override_toggle_adv_goggles=Ustaw klawisz: Zaawansowane okulary +gc.configgui.map_scroll_invert=Odwróć przewijanie mapy +gc.configgui.map_scroll_sensitivity=Czułość myszy przewijania mapy +gc.configgui.meteor_block_damage=Włączenie obrażeń bloków od meteoru +gc.configgui.meteor_spawn_mod=Modyfikator spawnu meteorów +gc.configgui.more_stars=Pokazuj więcej gwiazd +gc.configgui.oil_gen_factor=Współczynnik generowania ropy +gc.configgui.ore_dict_silicon=nazwa OreDict sylikonu +gc.configgui.other_mod_ore_gen_i_ds=Generowanie rud z innych modów na planetach +gc.configgui.override_capes=Wymuś pokazywanie peleryn donatorów +gc.configgui.override_map=Ustaw klawisz: Mapa galaktyki +gc.configgui.oxygen_indicator_bottom=Przesuń wskaźnik tlenu w dół +gc.configgui.oxygen_indicator_left=Przesuń wskaźnik tlenu w lewo +gc.configgui.planet_worldborders=Maksymalne x,z dla lądowania na Księżycu +gc.configgui.quick_mode=Szybka gra (łatwiejsza) +gc.configgui.rocket_disable_overworld_return=Wyłącz powrót rakiety na Świat +gc.configgui.rocket_disabled_dimensions=Wyłączone wymiary dla rakiet +gc.configgui.rocket_fuel_factor=Współczynnik paliwa rakietowego +gc.configgui.sealable_i_ds=Bloki uszczelniające +gc.configgui.space_station_energy_scalar=Modyfikator energii Stacji Kosmicznej +gc.configgui.space_stations_require_permission=Zezwolenia Stacji Kosmicznej +gc.configgui.static_loaded_dimensions=Załadowane statycznie wymiary +gc.configgui.static_loaded_new_ss=Załadowany statyk nowych Stacji Kosmicznych? +gc.configgui.suffocation_cooldown=Odstęp czasu obrażeń od duszenia się +gc.configgui.suffocation_damage=Obrażenia od duszenia się +gc.configgui.title=Konfiguracja główna Galacticraft +gc.configgui.use_old_fuel_fluid_i_d=Używaj oryginalnej registracji ciecz fuelgc +gc.configgui.use_old_oil_fluid_i_d=Używaj oryginalnej registracji ciecz oilgc +gc.configgui.whitelist_co_f_h_core_gen=Biała Lista dla generacji świata CoFHCore +gui.battery_slot.desc.0=Slot na baterie, wstaw tutaj baterię +gui.battery_slot.desc.1=lub użyj podłączonego źródła mocy. +gui.bed_fail.message=O nie, a co jeśli skończy mi się tlen podczas snu? Potrzebuję komory kriogenicznej by móc spać w kosmosie! +gui.buggy.accel.name=Przyspiesz +gui.buggy.decel.name=Zwolnij +gui.buggy.inv.name=Ekwipunek / Paliwo +gui.buggy.storage_space=Magazyn +gui.buggy.turn.name=Skręć w lewo-prawo +gui.button.back.name=Poprzedni +gui.button.disable.name=Deaktywuj +gui.button.disableseal.name=Deaktywuj Uszczelnienie +gui.button.enable.name=Aktywuj +gui.button.enableseal.name=Aktywuj Uszczelnienie +gui.button.hide_dest.name=Schowaj +gui.button.loadfuel.name=Zatankuj +gui.button.loaditems.name=Załaduj +gui.button.next.name=Następny +gui.button.paintapply.name=Zaaplikuj farbę +gui.button.paintmix.name=Mieszaj kolor +gui.button.paintreset.name=Zresetuj kolor +gui.button.refine.name=Rafinuj +gui.button.stoploading.name=Zatrzymaj ładowanie +gui.button.stoprefine.name=Zatrzymaj rafinowanie +gui.button.stopunloading.name=Zatrzymaj wyładowywanie +gui.button.unhide_dest.name=Pokaż +gui.button.unloaditems.name=Wyładuj przedmioty +gui.button.unlockschematic.name=Odblokuj schemat +gui.checkbox.horizontal.name=Tryb horyzontalny +gui.checkbox.invert.name=Odwróć wybór +gui.checkbox.player_name.name=Gracz nazywa się +gui.checkbox.player_within.name=Gracz jest w +gui.checkbox.redstone_signal.name=Otwiera na sygnał czerwonego kamienia +gui.chest.warning.wrongkey=Zgaduje że potrzebuję klucz lochu poziomu %s by to otworzyć! +gui.choose_planet.desc.moon=Zdatny do zamieszkania#Brak tlenu#Grawitacja: 18% +gui.choose_planet.desc.overworld=Pełny życia#Zdatny do zamieszkania#Grawitacja: 100% +gui.chooseplanet.alreadycreated1.name=Stacja Kosmiczna +gui.chooseplanet.alreadycreated2.name=już istnieje! +gui.chooseplanet.cannotcreate1.name=Nie można tutaj stworzyć +gui.chooseplanet.cannotcreate2.name=Stacji Kosmicznej! +gui.crafting_memory.desc.0=Ten magnetyczny stół rzemieślniczy potrafi skonstruować więcej tego! +gui.crafting_memory.desc.1=Aby zapamiętać recepturę, skonstruuj jeden przedmiot. +gui.creative_only.desc=Tylko w kreatywnym +gui.display.nolink=Brak połączenia +gui.docking_rocket.current_vel.name=Aktualna prędkość +gui.docking_rocket.distance_from.name=Odległość od celu +gui.docking_rocket.target_vel.name=Prędkość celowa +gui.docking_rocket.warning.name.0=Wciśnij %s by zwolnić +gui.docking_rocket.warning.name.1=Wciśnij %s by przyspieszyć +gui.dropbox.player_distance.name.0=1 metr +gui.dropbox.player_distance.name.1=2 metry +gui.dropbox.player_distance.name.2=5 metrów +gui.dropbox.player_distance.name.3=10 metrów +gui.electric_compressor.desc.0=Pracuje +gui.energy_storage.desc.0=Magazyn energii +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Flaga jest już tutaj postawiona! +gui.frequency_module.desc.0=Odbiera słabe fale +gui.frequency_module.desc.1=dźwiękowe i odległe sygnały +gui.frequencymodule.warning0=Pewnie potrzebuje +gui.frequencymodule.warning1=żeby tu dobrze słyszeć. +gui.fuel_output.desc.0=Wstaw puste kanistry na płyny do +gui.fuel_output.desc.1=tego slotu by napełnić je paliwem +gui.fuel_output.desc.2=ze zbiornika. +gui.fuel_tank.desc.0=Zbiornik paliwa. Wymaga +gui.fuel_tank.desc.1=ładownika paliwa do zapełnienia +gui.fuel_tank.desc.2=zbiornika paliwa, może być zapełniony +gui.fuel_tank.desc.3=kanistrami paliwa +gui.fuel_tank.desc.4=Zbiornik paliwa +gui.infinite_item.desc=Nieskończony +gui.lander.velocity=Prędkość wejściowa +gui.lander.velocityu=m/s +gui.lander.warning2=Przytrzymaj " +gui.lander.warning3=" by zwolnić! +gui.max_output.desc=Maksymalne wyjście +gui.message.addnewsch.name=Dodaj nowy schemat +gui.message.apply.name=Zastosuj +gui.message.assign_name.name=Przypisz nazwę +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Wróć +gui.message.breed.name=Rozmnażanie +gui.message.bubble_visible.name=Bańka widoczna +gui.message.can_create_space_station.name=Można tu stworzyć Stację Kosmiczną! +gui.message.cancel.name=Anuluj +gui.message.cannot_create_space_station.name=Nie można tu stworzyć Stacji Kosmicznej. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Kliknij ponownie by przybliżyć (zobacz księżyce i satelity) +gui.message.click_again.1.name=Kliknij ponownie by przybliżyć (zobacz księżyce) +gui.message.click_again.2.name=Kliknij ponownie by przybliżyć (zobacz satelity) +gui.message.click_again.3.name=Kliknij ponownie by przybliżyć +gui.message.clicklink=Kliknij by zobaczyć na Galacticraft Wiki +gui.message.create_ss.name=Stwórz +gui.message.daynightcycle.name=Cykl dzień-noc +gui.message.energy=Energia +gui.message.environment.name=Bonus środowiska +gui.message.exit.name=Wyjdź +gui.message.fuel.name=Paliwo +gui.message.full.name=pełny +gui.message.generating.name=Generowanie +gui.message.grow.name=Rośnięcie +gui.message.heal.name=Leczenie +gui.message.help1=Pomoc z Galacticraft +gui.message.help1a=By znowu zobaczyć tą wiadomość w dowolnym momencie, wpisz +gui.message.help2=Przewodnik po programie kosmicznym +gui.message.help3=Pomoc z ropą +gui.message.in.name=Wejście +gui.message.launch.name=Start +gui.message.max_energy=Maksymalna energia +gui.message.meansurfacetemp.name=Przeciętna temperatura powierzchniowa +gui.message.moon.atmosphere.0.name=Brak +gui.message.moon.daynightcycle.0.name=29.5 dni ziemskich +gui.message.moon.meansurfacetemp.0.name=(Jasna strona) 253°C +gui.message.moon.meansurfacetemp.1.name=(Ciemna strona) -153°C +gui.message.moon.surfacecomposition.0.name=Bazaltowy kamień i +gui.message.moon.surfacecomposition.1.name=ślady sera +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% ziemskiej) +gui.message.of.name=z +gui.message.oil.name=Ropa +gui.message.out.name=Wyjście +gui.message.overworld.atmosphere.0.name=Azot i tlen +gui.message.overworld.atmosphere.1.name=Wspiera życie +gui.message.overworld.daynightcycle.0.name=1 dzień ziemski +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Kamień, ziemia i +gui.message.overworld.surfacecomposition.1.name=żwir +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% ziemskiej) +gui.message.prelaunch=Lista przedstartowa +gui.message.rename.name=Zmień Nazwę +gui.message.select_ss.name=Wybierz Stację Kosmiczną +gui.message.ss_owner.name=Właściciel: +gui.message.status.name=Status +gui.message.strengthen.name=Wzmocnienie +gui.message.surfacecomposition.name=Kompozycja powierzchni +gui.message.surfacegravity.name=Grawitacja powierzchniowa +gui.message.thermal_status.name=Kontrola termalna +gui.message.tier.name=Poziom %d +gui.message.unnamed.name=Bez nazwy +gui.missing_core.name.0=Nie znaleziono MicdoodleCore w folderze mods +gui.missing_core.name.1=Załadowanie Galacticraft nie powiodło się +gui.missing_core.name.2=Zamknij Minecrafta i zainstaluj MicdoodleCore +gui.missing_core.name.3=Kliknij tutaj by otworzyć stronę pobierania. +gui.new_schematic.slot.desc.0=Slot na nowe schematy. Możesz +gui.new_schematic.slot.desc.1=znaleźć nowe schematy +gui.new_schematic.slot.desc.2=eksplorując lochy na +gui.new_schematic.slot.desc.3=planetach i księżycach. +gui.oil_tank.desc.0=Zbiornik ropy, może być napełniony +gui.oil_tank.desc.1=kanistrami z ropą. +gui.oxygen.warning=Konfiguracja tlenowa jest nieprawidłowa! +gui.oxygen_compressor.slot.desc.0=Slot na zbiornik, wstaw tutaj zbiornik +gui.oxygen_compressor.slot.desc.1=na tlen aby go wypełnić oddychalnym tlenem. +gui.oxygen_decompressor.slot.desc.0=Slot na zbiornik, wstaw tutaj zbiornik +gui.oxygen_decompressor.slot.desc.1=z tlenem bo go opróżnić. +gui.oxygen_slot.desc.0=Slot na tlen, wstaw tutaj kanister +gui.oxygen_slot.desc.1=z tlenem lub użyj podłączonego źródła tlenu +gui.oxygen_storage.desc.0=Magazyn tlenu +gui.oxygen_storage.desc.1=Tlen +gui.oxygen_use.desc=Wykorzystanie tlenu +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Żywność +gui.player.health=Zdrowie +gui.player.ouch=ał!!!! +gui.receiver.cannot_attach=Nie można tutaj podłączyć odbiornika! +gui.requires_controller.desc=Wymaga kontrolera startu +gui.rocket.countdown=Odliczanie +gui.rocket.height=Wysokość +gui.rocket.inv.name=Ekwipunek / Paliwo +gui.rocket.launch.name=Start +gui.rocket.launched=Wystartowana +gui.rocket.on_launchpad=Na platformie startowej +gui.rocket.speed=Prędkość +gui.rocket.turn.name=Obrót w lewo-prawo +gui.rocket.updown.name=Ster w górę-dół +gui.rocket.warning.fuelinsufficient=Niewystarczająco paliwa na bezpieczny start podczas kontroli automatycznej! +gui.rocket.warning.launchcontroller=Przedstartowe anulowanie startu. Sprawdź kontroler startu! +gui.rocket.warning.nofuel=Muszę najpierw zatankować paliwo rakietowe! +gui.rocket.warning.nogyroscope=Tajemnicze siły działają a żyroskopy kręcą się jak szalone! +gui.rocket.warning.noparachute=Nie mam spadochronu! Jeśli znowu wcisnę start, nie będzie odwrotu! +gui.rocket_type.0=Wielkość magazynu: 18 +gui.rocket_type.1=Wielkość magazynu: 36 +gui.rocket_type.2=Wielkość magazynu: 54 +gui.rocket_type.3=Zatankowany +gui.seconds=s +gui.sensor.advanced=Tryb zaawansowany +gui.sensor.advancedoff=Wyłączony +gui.sensor.advancedon=Włączony +gui.show_bubble.desc.0=Pokaż bańkę +gui.skeleton_boss.message=Boss usunięty, nie opuszczaj pomieszczenia podczas walki! Wejdź do pomieszczenia by przyzwać Bossa. +gui.space_race.chat.add_success=Gracz %s dołączył do kosmicznego wyścigu! +gui.space_race.chat.already_part=Już bierzesz udział w tym kosmicznym wyścigu! +gui.space_race.chat.invite_received=Otrzymano zaproszenie do drużyny wosmicznego wyścigu od %s +gui.space_race.chat.not_found=Nie znaleziono gracza o nazwie: % +gui.space_race.chat.remove_success=Gracz %s został usunięty z kosmicznego wyścigu. +gui.space_race.chat.to_join=By dołączyć do %s użyj komendy %s +gui.space_race.coming_soon=Już niedługo +gui.space_race.create.add_players.name=Dodaj gracza(y) +gui.space_race.create.back.name=Wróć +gui.space_race.create.brush_radius.name=Promień pędzla +gui.space_race.create.brush_size.name=Wielkość pędzla +gui.space_race.create.change_color.name.0=Zmień +gui.space_race.create.change_color.name.1=Kolor +gui.space_race.create.change_color.name.2=Drużyny +gui.space_race.create.close.name=Zamknij +gui.space_race.create.customize.name=Dostosuj flagę +gui.space_race.create.eraser_radius.name=Promień gumki +gui.space_race.create.eraser_size.name=Wielkość gumki +gui.space_race.create.global_stats.name=Zobacz statystyki globalne +gui.space_race.create.invite_player.name=Zaproś gracza +gui.space_race.create.player_radius.name=Uwaga: Gracze muszą być w zasięgu! (25 bloków) +gui.space_race.create.rem_players.name=Usuń gracza(y) +gui.space_race.create.remove.name=Usuń +gui.space_race.create.remove_player.name=Usuń gracza +gui.space_race.create.rename.name=Zmień nazwę drużyny +gui.space_race.create.send_invite.name=Wyślij zaproszenie +gui.space_race.create.server_stats.name=Zobacz statystyki serwera +gui.space_race.create.title.name=Menedżer wyścigu kosmicznego +gui.space_race.create.title.name.0=Menedżer +gui.space_race.create.title.name.1=wyścigu kosmicznego +gui.space_race.join.member_count.name=%d członków +gui.space_race.join.name=Dołącz +gui.space_race.join.owner.name=Właściciel +gui.space_race.join.title.name=Dołącz do kosmicznego wyścigu +gui.space_race.unnamed=Nienazwana drużyna +gui.spacestation.added=Zostałeś dodany do zaakceptowanych graczy Stacji Kosmicznej %s! +gui.spacestation.addsuccess=Dodano gracza %s do listy twojej Stacji Kosmicznej! +gui.spacestation.allow_all_false=Twoje Stacje Kosmiczne nie są już dostępne publicznie! +gui.spacestation.allow_all_true=Twoje Stacje Kosmiczne są już dostępne publicznie! (Użyj /ssinvite -all aby to cofnąć.) +gui.spacestation.changesuccess=Przekazano Stację Kosmiczną gracza %s graczowi %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Z powodzeniem usunięto gracza %s z twojej Stacji Kosmicznej +gui.spacestation.to_allow_entry=by pozwolić innemu graczowi wejść na twoją stację kosmiczną! +gui.spacestation.type_command=Wpisz +gui.status.active.name=Aktywny +gui.status.air_lock_closed.name=Śluza zamknięta +gui.status.air_lock_open.name=Śluza otwarta +gui.status.blockedfully.name=Słońce niewidoczne +gui.status.blockedpartial.name=Słońce częściowo widoczne +gui.status.check_pending.name=Oczekiwanie na sprawdzenie +gui.status.check_starting.name=Rozpoczynanie sprawdzania +gui.status.checking_seal.name=Sprawdzanie uszczelnienia +gui.status.collecting.name=Zbieranie +gui.status.collectingenergy.name=Zbieranie energii +gui.status.compressing.name=Kompresowanie +gui.status.disabled.name=Nieaktywny +gui.status.fulltank.name=Zbiornik tlenu pełny +gui.status.generating.name=Generowanie +gui.status.hull_heat.name=Nagrzanie +gui.status.idle.name=Bezczynny +gui.status.missingleaves.name=Za mało bloków liści +gui.status.missingoxygen.name=Za mało tlenu +gui.status.missingpower.name=Za mało energii +gui.status.missingpower.short.name=Brak energii +gui.status.missingtank.name=Brak odpowiedniego zbiornika tlenu +gui.status.nofuel.name=Brak paliwa do załadowania! +gui.status.noinvtarget.name=Cel ma pusty ekwipunek! +gui.status.noitems.name=Brak przedmiotów do załadowania! +gui.status.nooil.name=Brak ropy +gui.status.not_available.name=N/A +gui.status.not_generating.name=Nie generuje +gui.status.notargetload.name=Brak celu do załadowania! +gui.status.notargetunload.name=Brak celu do wyładowania! +gui.status.off.name=WYŁ. +gui.status.on.name=WŁ. +gui.status.raining.name=Pada +gui.status.ready.name=Gotowy +gui.status.refining.name=Rafinuje +gui.status.running.name=Pracuje +gui.status.sealed.name=Uszczelniony +gui.status.sealerblocked.name=Wentylator wyjściowy zablokowany +gui.status.sun_visible.name=Słońce widoczne +gui.status.tank_empty.name=Zbiornik tlenu pusty +gui.status.targetempty.name=Pojazd celowy ma pusty ekwipunek! +gui.status.targetfull.name=Pojazd celowy ma pełny ekwipunek! +gui.status.unknown.name=Nieznany +gui.status.unsealed.name=Za duży obszar / Nieuszczelniony +gui.tank.oxygen_remaining=Pozostały tlen +gui.telemetry_fail.message=Najpierw muszę wyśledzić istote z modułem częstotliwości! (Lub spróbować go założyć!) +gui.telemetry_fail_no_frequency_module.message=Najpewniej muszę trzymać moduł częstotliwości w dłoni by zrobić z tego użytek! +gui.telemetry_fail_wearing_it.message=Muszę zdjąć moduł częstotliwości jeżeli mam połączyć go z tym urządzeniem telemetrycznym! +gui.telemetry_succeed.message=Stworzono połączenie telemetryczne. +gui.thermal_slot.desc.0=Slot dodatku termalnego, umieść 'regulator +gui.thermal_slot.desc.1=termiczny otoczenia' tutaj. (opcjonalne) +gui.thermal_slot.desc.2=Uwaga: Zużywa więcej energii! +gui.title.air_lock.name=Śluza powietrzna gracza %s +gui.tracking.message=Śledzenie aktywne. Teraz muszę kliknąć prawym przyciskiem myszy na urządzeniu telemetrycznym żeby zakończyć połączenie. +gui.village.warning.no_freq_mod=Będe musiał założyć moduł częstotliwości aby się z nimi komunikować! +gui.warning.invalid_thermal=Niewłaściwa ochrona termalna! +gui.warning.noroom=Za mało miejsca! +gui.warning=OSTRZEŻENIE! +item.air_fan.name=Wentylator +item.air_vent.name=Odpowietrznik +item.basic_item.ambient_thermal_controller.name=Regulator termiczny otoczenia +item.basic_item.canned_food.name=Puszka jedzenia +item.basic_item.compressed_aluminum.name=Skompresowane aluminium +item.basic_item.compressed_bronze.name=Skompresowany brąz +item.basic_item.compressed_copper.name=Skompresowana miedź +item.basic_item.compressed_iron.name=Skompresowane żelazo +item.basic_item.compressed_steel.name=Skompresowana stal +item.basic_item.compressed_tin.name=Skompresowana cyna +item.basic_item.dehydrated_apple.name=Odwodnione jabłka +item.basic_item.dehydrated_carrot.name=Odwodnione marchewki +item.basic_item.dehydrated_melon.name=Odwodnione arbuzy +item.basic_item.dehydrated_potato.name=Odwodnione ziemniaki +item.basic_item.frequency_module.name=Moduł częstotliwości +item.basic_item.ingot_aluminum.name=Sztabka aluminium +item.basic_item.ingot_bronze.name=Sztabka brązu +item.basic_item.ingot_copper.name=Sztabka miedzi +item.basic_item.ingot_steel.name=Sztabka stali +item.basic_item.ingot_tin.name=Sztabka cyny +item.basic_item.raw_silicon.name=Surowy sylikon +item.basic_item.solar_module_0.name=Pojedynczy panel słoneczny +item.basic_item.solar_module_1.name=Pełny panel słoneczny +item.basic_item.wafer_advanced.name=Zaawansowana płyta +item.basic_item.wafer_basic.name=Podstawowa płyta +item.basic_item.wafer_solar.name=Niebieska słoneczna płyta +item.battery.name=Bateria +item.bucket_fuel.name=Wiadro paliwa +item.bucket_oil.name=Wiadro ropy +item.buggy.name=Buggy +item.buggymat.seat.name=Fotel Buggy +item.buggymat.storage.name=Skrzynka Buggy +item.buggymat.wheel.name=Koło Buggy +item.canister.copper.name=Miedziany kanister +item.canister.tin.name=Cynowy kanister +item.canvas.name=Płótno +item.cheese_block.name=Blok sera +item.cheese_curd.name=Pajdka sera +item.compressed_meteoric_iron.name=Skompresowane meteorytowe żelazo +item.dungeonfinder.name=Lokator Lochów +item.empty_liquid_canister.name=Pusty kanister +item.emergency_kit.description=Kliknij prawy przycisk myszy by zekwipować przewody tlenowe i inne niezbędne przedmioty. Ostrzeżenie: Można użyć tylko raz! +item.emergency_kit.name=Kosmiczny zestaw awaryjny +item.engine.tier1booster.name=Dopalacz poziomu 1 +item.engine.tier1engine.name=Silnik rakietowy poziomu 1 +item.flag.name=Flaga +item.food.cheese_slice.name=Plaster sera +item.food.burger_bun.name=Bułka burgerowa +item.food.beef_patty_raw.name=Mielona wołowina (Surowa) +item.food.beef_patty_cooked.name=Wołowinowy hamburger (Pieczony) +item.food.cheeseburger.desc=Astronauci kochają cheeseburgery! Bardzo pożywne jedzenie. +item.food.cheeseburger.name=Cheeseburger +item.food.canned_beef.name=Wołowina w puszce +item.fuel.name=Paliwo rakietowe +item.fuel_canister.name=Wypełniony kanister paliwa +item.fuel_canister_partial.name=Częściowo wypełniony kanister paliwa +item.heavy_plating.name=Wzmocniona płyta pancerzowa +item.hot_description.name=Gorący +item.ic2compat.ore_crushed_alu.name=Crushed Aluminum Ore +item.ic2compat.ore_purified_alu.name=Purified Crushed Aluminum Ore +item.ic2compat.dust_alu.name=Aluminum Dust +item.ic2compat.dust_small_titanium.name=Tiny Pile of Titanium Dust +item.infinite_battery.name=Nieskończona bateria +item.infinite_oxygen.name=Nieskończony zasobnik tlenu +item.key.t1.name=Klucz Lochu poziomu 1 +item.lunar_sapphire.description=Księżycowe szafiry są jednostką waluty podczas handlu z kosmitami osadnikami +item.lunar_sapphire.name=Księżycowy szafir +item.meteor_chunk.name=Miotany kawałek meteoru +item.meteor_chunk_hot.name=Miotany kawałek meteoru +item.meteoric_iron_ingot.name=Sztabka meteorytowego żelaza +item.meteoric_iron_raw.name=Surowe meteorytowe żelazo +item.nose_cone.name=Głowica statku +item.oil_canister.name=Wypełniony kanister ropy +item.oil_canister_partial.name=Częściowo wypełniony kanister ropy +item.oil_extractor.name=Przenośny ekstraktor ropy +item.oxygen_concentrator.name=Sprężarka tlenowa +item.oxygen_gear.name=Przewody tlenowe +item.oxygen_mask.name=Hełm astronauty +item.oxygen_tank_heavy_empty.name=Pusty duży zbiornik tlenowy +item.oxygen_tank_heavy_full.name=Duży zbiornik tlenowy +item.oxygen_tank_light_empty.name=Pusty mały zbiornik tlenowy +item.oxygen_tank_light_full.name=Mały zbiornik tlenowy +item.oxygen_tank_med_empty.name=Pusty średni zbiornik tlenowy +item.oxygen_tank_med_full.name=Średni zbiornik tlenowy +item.parachute_black.name=Czarny spadochron +item.parachute_blue.name=Jasnoniebieski spadochron +item.parachute_brown.name=Brązowy spadochron +item.parachute_darkblue.name=Niebieski spadochron +item.parachute_darkgray.name=Szary spadochron +item.parachute_darkgreen.name=Zielony spadochron +item.parachute_gray.name=Jasnoszary spadochron +item.parachute_lime.name=Limonkowy spadochron +item.parachute_magenta.name=Karmazynowy spadochron +item.parachute_orange.name=Pomarańczowy spadochron +item.parachute_pink.name=Różowy spadochron +item.parachute_plain.name=Spadochron +item.parachute_purple.name=Fioletowy spadochron +item.parachute_red.name=Czerwony spadochron +item.parachute_teal.name=Błękitny spadochron +item.parachute_yellow.name=Żółty spadochron +item.rocket_fins.name=Stateczniki rakiety +item.rocket_t1.name=Rakieta poziomu 1 +item.schematic.name=Schemat stołu warsztatowego NASA +item.sensor_glasses.name=Okulary sensoryczne +item.sensor_lens.name=Soczewki sensoryczne +item.standard_wrench.name=Standardowy klucz +item.steel_axe.name=Siekiera wzmocnionej płyty +item.steel_boots.name=Buty wzmocnionej płyty +item.steel_chestplate.name=Napierśnik wzmocnionej płyty +item.steel_helmet.name=Hełm wzmocnionej płyty +item.steel_hoe.name=Motyka wzmocnionej płyty +item.steel_leggings.name=Nogawice wzmocnionej płyty +item.steel_pickaxe.name=Kilof wzmocnionej płyty +item.steel_pole.name=Stalowy słup +item.steel_shovel.name=Łopata wzmocnionej płyty +item.steel_sword.name=Miecz wzmocnionej płyty +item.tier1.desc=Poziom 1 +item_desc.powerdraw.name=Wymagana moc: %s /s +item_desc.shift.name=Wciśnij %s by dowiedzieć się więcej +item_group.galacticraft_blocks=Galacticraft (Bloki) +item_group.galacticraft_items=Galacticraft (Przedmioty) +jei.arc_lamp.info=Bardzo jasna lampa w stronę w którą kieruje. Postaw gdzieś wysoko na najlepszy efekt! Obróć używając standardowego klucza. +jei.electric_compressor.info=Elektryczna wersja kompresora sztabek, podwójnie szybki! Nawet szybszy z energią poziomu 2. Lej potrafi wypełnić lub opróżnić tą maszynę. +jei.electric_compressor.appeng.info=Dla automacji z AE2, ustaw swoje receptury ze sztabkami z 2 różnych modów. Zobacz https:goo.gl/BwY15G po więcej informacji. +jei.fluid_pipe.info=Rura na transportacje jakiejkolwiek cieczy lub gazu. Aby wypompować ciecz ze zbiornika, kliknij standardowym kluczem by zmienić w 'tryb wsysania'. \nRura w trybie wsysania nie może wypełniać zbiornika lub maszyny - więc zrób tak aby twoja rura działała na minimum 2 bloki wzdłuż! +jei.fuel_loader.info=Postaw obok platformy startowej. Tankuje każdą rakietę postawioną na platformie. Niezbędny do jakiejkolwiek podróży w kosmos - w tym twojej podróży powrotnej do domu! +jei.magnetic_crafting.info=Stół rzemieślniczy który trzyma swoje przedmioty. Umie akceptować przedmioty z leju do auto-konstrukcji ostatniej pomyślnie skonstruowanej receptury. +jei.oxygen_collector.info=Zbiera mieszankę oddychalnego tlenu ze Świata lub - z przestrzeni kosmicznej - z pobliskich zielonych liści lub rosnących roślin uprawnych. \nSkanalizuj tlen do kompresora tlenu na zbiorniki z tlenem, lub dystrybutora bańki tlenu lub uszczelniacza tlenu. +jei.oxygen_distributor.info=Tworzy środowisko bańkowe w kosmosie gdzie gracze (i inne kreatury) mogą oddychać. Zaopatrz go w mieszankę oddychalnego tlenu ze zbieracza tlenu lub modułu magazynu tlenu. +jei.oxygen_sealer.info=Wypełnia 1 pokój w twojej bazie kosmicznej oddychalną atmosferą. Zaopatrz go w mieszankę oddychalnego tlenu ze zbieracza tlenu lub modułu magazynu tlenu. Wszystkie ściany pokoju muszą być solidne. \nZnajdź przecieki używając okularów sensorycznych! \nMaksymalna wielkość pokoju dla 1 uszczelniacza tlenu to 10x10x8 bloków. Użyj pare uszczelniaczy tlenu na większe pokoje! +jei.wrench.info=Większość maszyn Galacticraft może zostać obrócona poprzez kliknięcie prawym przyciskiem myszy standardowym kluczem. \nWiększość maszyn elektrycznych może zmienić swoje strony wejścia i wyjścia energi i innych rzeczy robiąc to samo i klikając Shift. +keybind.map.name=Mapa galaktyki +keybind.sensortoggle.name=Zmień tryb okularów sensorycznych +keybind.spaceshipinv.name=Otwórz ekwipunek statku kosmicznego +keybind.vehiclebackward.name=Do tyłu (Pojazd) +keybind.vehicledown.name=W dół (Pojazd) +keybind.vehicleforward.name=Do przodu (Pojazd) +keybind.vehicleleft.name=W lewo (Pojazd) +keybind.vehicleright.name=W prawo (Pojazd) +keybind.vehicleup.name=W górę (Pojazd) +moon.moon=Księżyc +newversion.failed.name=Sprawdzenie aktualizacji Galacticraft nieudane! Spróbuj ponownie za 15 sekund. +newversion.success.name=Znaleziono zdalną wersję Galacticraft: +planet.jupiter=Jowisz +planet.mercury=Merkury +planet.neptune=Neptun +planet.overworld=Świat +planet.saturn=Saturn +planet.uranus=Uran +planet.venus=Wenus +satellite.spacestation.overworld=Stacja Kosmiczna na Świecie +schematic.moonbuggy.name=Księżycowe Buggy +schematic.rocket_t1.name=Rakieta poziomu 1 +schematic.rocket_t2.name=Rakieta poziomu 2 +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Kontroler śluzy powietrznej +tile.air_lock_frame.description=Śluzy powietrzne, będąc ułożone w portalopodobny sposób, z jednym blokiem zastąpionym kontrolerem, będą funkcjonować jako działająca śluza powietrzna. +tile.air_lock_frame.name=Śluza powietrzna +tile.air_lock_seal.name=Śluza powietrzna (Zamknięta) +tile.aluminum_wire.alu_wire.description=Kabel aluminiowy jest wykorzystywany do podłączania źródeł energii do urządzeń działających na prąd. +tile.aluminum_wire.alu_wire.name=Kabel aluminiowy +tile.aluminum_wire.alu_wire_heavy.description=Gruby kabel aluminiowy jest wykorzystywany do podłączania źródeł energii do urządzeń działających na prąd. Jego wyższa pojemność zwiększa wydajność dla maszyn poziomu 2. +tile.aluminum_wire.alu_wire_heavy.name=Gruby kabel aluminiowy +tile.aluminum_wire.alu_wire_switch.description=Przełączalny kabel aluminiowy podłącza się jak kabel aluminiowy, chyba że jest przełączony sygnałem czerwonego kamienia. +tile.aluminum_wire.alu_wire_switch.name=Przełączalny kabel aluminiowy +tile.aluminum_wire.alu_wire_switch_heavy.description=Przełączalny gruby kabel aluminiowy podłącza się jak gruby kabel aluminiowy, chyba że jest przełączony sygnałem czerwonego kamienia. +tile.aluminum_wire.alu_wire_switch_heavy.name=Przełączalny gruby kabel aluminiowy +tile.arclamp.description=Lampy łukowe zapewniają silne światło na duży obszar, odstrasza też większość potworów. +tile.arclamp.name=Lampa łukowa +tile.basic_block_core.block_aluminum_gc.name=Blok aluminium +tile.basic_block_core.block_copper_gc.name=Blok miedzi +tile.basic_block_core.block_meteoric_iron_gc.name=Solidne meteorytowe żelazo +tile.basic_block_core.block_tin_gc.name=Cynowy blok +tile.basic_block_core.block_silicon_gc.name=Blok silikonu +tile.basic_block_core.deco_block_0.name=Blok dekoracyjny cyny +tile.basic_block_core.deco_block_1.name=Blok ścianowy cyny +tile.basic_block_core.ore_aluminum_gc.name=Ruda aluminium +tile.basic_block_core.ore_copper_gc.name=Ruda miedzi +tile.basic_block_core.ore_silicon.name=Ruda sylikonu +tile.basic_block_core.ore_tin_gc.name=Ruda cyny +tile.basic_block_moon.bricks.name=Cegły księżycowego Lochu +tile.basic_block_moon.cheesestone.name=Ruda sera +tile.basic_block_moon.coppermoon.name=Ruda miedzi +tile.basic_block_moon.moondirt.name=Księżycowa ziemia +tile.basic_block_moon.moongrass.name=Księżycowa gleba +tile.basic_block_moon.moonstone.name=Księżycowy kamień +tile.basic_block_moon.sapphiremoon.name=Ruda szafiru +tile.basic_block_moon.tinmoon.name=Ruda cyny +tile.buggy_pad.description=Platformy tankujące Buggy pozwalają na zatankowanie stojącego na nich buggy za pomocą podczepionych ładowników paliwa gdy są postawione w kształcie kwadratu o wymiarach 3x3. Nie można ich używać do startu rakiet! +tile.cargo.loader.name=Ładownik +tile.cargo.unloader.name=Wyładownik +tile.cargo_loader.description=Ładowniki przenoszą bloki i przedmioty do rakiet i innych pojazdów z magazynem. Musi być połączony z platformą startową/tankującą. +tile.cargo_unloader.description=Wyładowniki pobierają bloki i przedmioty z rakiet i innych pojazdów z magazynem. Musi być połączony z platformą startową/tankującą. +tile.cheese.description=Bloki serowe są tworzone z księżycowego sera, postawialne i jadalne. +tile.cheese.name=Blok sera +tile.circuit_fabricator.description=Fabrykator obwodowy przerabia podstawowe materiały w sylikonowe płyty, używane w zaawansowanych urządzeniach. +tile.coal_generator.description=Generator węglowy spala węgiel (lub bloki węgla) do produkcji energii. Jest to najprostsza ale jednocześnie najmniej efektywna metoda produkcji energii. +tile.collector.description=Zbieracz tlenu pobiera tlen z bloków liści w jego otoczeniu. +tile.collector.name=Zbieracz tlenu +tile.compressor.description=Kompresor przetwarza sztabki w ich skompresowane odpowiedniki. Najważniejsza maszyna w Galacticraft! +tile.compressor_electric.description=Kompresor elektryczny przetwarza sztabki w ich skompresowane odpowiedniki. Kompresuje dwa na raz sprawiając że jest bardziej efektywny od swojego poprzednika. +tile.compressor_advanced.description=Szybsza wersja kompresora elektrycznego. Prędko przetwarza sztabki w ich skompresowane odpowiedniki. +tile.concealed_detector.name=Wykrywacz graczy +tile.concealed_redstone.name=Ukryty kabel czerwonego kamienia +tile.concealed_repeater.name=Ukryty przekaźnik +tile.crude_oil.name=Ropa +tile.crude_oil_moving.name=Ropa naftowa +tile.crude_oil_still.name=Ropa naftowa +tile.deconstructor.description=Dekonstruktor rozbierze na części twoje stare rakiety i inne przedmioty, zwracając jakiekolwiek materiały z odzysku. +tile.dishbase.description=Satelita komunikacyjny śledzi pozycję stacji kosmicznych i odbiera komunikaty z twoich zdalnych baz kosmicznych. +tile.dishbase.name=Satelita komunikacyjny +tile.distributor.description=Dystrybutor tlenu wytwarza bańkę tlenową emitowaną ze środka bloku, używając swojego zbiornika z tlenem. To pozwala na bezpieczne oddychanie w bańce. +tile.distributor.name=Dystrybutor bańki tlenu +tile.dummyblock.cryogenic_chamber.name=Komora kriogeniczna +tile.dummyblock.launch_pad.name=Platforma startowa +tile.dummyblock.nasa_workbench.name=Stół warsztatowy NASA +tile.dummyblock.solar.name=Panel słoneczny +tile.dummyblock.space_station_base.name=Baza stacji kosmicznej +tile.electric_furnace_tier1.description=Piec elektryczny jest wykorzystywany jako szybsza alternatywa do tradycyjnych pieców węglowych. +tile.electric_furnace_tier2.description=Piec łukowy jest wykorzystywany jako szybsza alternatywa do pieców węglowych i elektrycznych: podwójna produkcja z rud! +tile.emergency_box.description=Postaw stacyjkę awaryjną blisko twojego pierwszego miejsca lądowania na planecie. Otwórz by znaleść w środku zestaw awaryjny. Odstrasza również potwory! +tile.emergency_box.filled.name=Stacyjka awaryjna (z zestawem) +tile.emergency_box.name=Stacyjka awaryjna +tile.enclosed.aluminum_wire.name=Uszczelniony kabel aluminiowy +tile.enclosed.copper_cable.name=Uszczelniony miedziowy kabel +tile.enclosed.description=Bloki uszczelniające powinne być wykorzystywane w miejscach gdzie powietrze nie może przejść, np. w ścianach bazy kosmicznej. +tile.enclosed.fluid_pipe.name=Uszczelniona rura na ciecze +tile.enclosed.glass_fibre_cable.name=Uszczelniony kabel Z włókna szklanego +tile.enclosed.gold_cable.name=Uszczelniony złoty kabel +tile.enclosed.heavy_aluminum_wire.name=Uszczelniony gruby kabel aluminiowy +tile.enclosed.hv_cable.name=Uszczelniony kabel HV +tile.enclosed.lv_cable.name=Uszczelniony super-niskoprądowy kabel +tile.enclosed.me_cable.name=Uszczelniony kabel ME +tile.enclosed.pipe_fluids_cobblestone.name=Uszczelniona brukowa wodoszczelna rura +tile.enclosed.pipe_fluids_stone.name=Uszczelniona kamienna wodoszczelna rura +tile.enclosed.pipe_items_cobblestone.name=Uszczelniona brukowa rura transportowa +tile.enclosed.pipe_items_stone.name=Uszczelniona kamienna rura transportowa +tile.enclosed.pipe_power_gold.name=Uszczelniona złota rura przewodząca +tile.enclosed.pipe_power_stone.name=Uszczelniona kamienna rura przewodząca +tile.energy_storage_module_tier1.description=Moduł akumulatora jest wykorzystywany do przechowywania dużych ilości energii na późniejszy użytek. +tile.energy_storage_module_tier2.description=Akumulator klastrowy wykorzystywany jest do przechowywania dużych ilości energii na późniejszy użytek. Przechowuje i przesyła więcej energii od swojego poprzednika. +tile.fallen_meteor.description=Upadłe meteory można znaleźć na wielu planetach/księżycach które mają rzadką atmosfere lub jej brak. Upuszczają meteorytowe żelazo po wydobyciu. +tile.fallen_meteor.name=Upadły meteor +tile.fluid_pipe.description=Rura na ciecze będzie transportowała ciecz lub gaz ze źródła do bloku destynacji. Użyj standardowego klucza aby zmieniać tryby. +tile.fluid_pipe.name=Rura na ciecze +tile.fluid_pipe_pull.description=Rura na ciecze będzie transportowała ciecz lub gaz ze źródła do bloku destynacji. Użyj standardowego klucza aby zmieniać tryby. +tile.fluid_pipe_pull.name=Rura na ciecze +tile.fluid_tank.description=Zbiorniki na ciecze będą magazynowały ciecze i gazy na późniejszy użytek. +tile.fluid_tank.name=Zbiornik na ciecze +tile.fuel.name=Paliwo +tile.fuel_block.name=Paliwo +tile.fuel_loader.description=Będąc połączonym z platformą startową, ładownik paliwa pozwoli na zatankowanie połączonej rakiety lub innego pojazdu. +tile.fuel_loader.name=Ładownik Paliwa +tile.glowstone_torch.description=Pochodnie jasnogłazowe są najlepiej wykorzystywane by oświetlić obszary gdzie drewniane pochodnie nie mogą płonąć z braku tlenu. +tile.glowstone_torch.name=Pochodnia jasnogłazowa +tile.grating.name=Ruszt +tile.landing_pad.buggy_fueler.name=Platforma tankująca Buggy +tile.landing_pad.cargo_pad.name=Platforma ładunkowa +tile.landing_pad.description=Platformy startowe pozwalają na postawienie rakiety gdy są postawione w kształcie kwadratu o wymiarach 3x3. Mogą być do nich podłączone ładowniki paliwa, ładowniki, i kontrolery startu. +tile.landing_pad.landing_pad.name=Platforma startowa +tile.landing_pad_full.name=Platforma startowa +tile.machine.0.name=Generator węglowy +tile.machine.1.name=Moduł akumulatora +tile.machine.2.name=Piec elektryczny +tile.machine.3.name=Kompresor +tile.machine.7.name=Piec łukowy +tile.machine.8.name=Akumulator klastrowy +tile.machine2.4.name=Kompresor elektryczny +tile.machine2.5.name=Fabrykator obwodowy +tile.machine2.6.name=Moduł magazynu tlenu +tile.machine2.10.name=Dekonstruktor +tile.machine3.9.name=Aplikator chromatyczny +tile.machine4.11.name=Zaawansowany kompresor +tile.magnetic_table.name=Magnetyczny stół rzemieślniczy +tile.magnetic_table.description=Umieszczone przedmioty nie wypadną - trzyma swój ekwipunek! Można shift-kliknąć przedmioty do środka. Leje potrafią umieszczać i usuwać przedmioty, stół będzie próbować automatycznie tworzyć ostatnią skonstruowaną recepturę. +tile.moon_stairs_brick.name=Schody księżycowego Lochu +tile.moon_stairs_stone.name=Skaliste księżycowe schody +tile.ore_copper.name=Ruda miedzi +tile.ore_tin.name=Ruda cyny +tile.oxygen_compressor.0.name=Kompresor tlenu +tile.oxygen_compressor.1.name=Dekompresor tlenu +tile.oxygen_compressor.description=Kompresor tlenu wypełnia zbiorniki na tlen wykorzystując tlen ze swojego zbiornika. +tile.oxygen_decompressor.description=Dekompresor tlenu pobiera tlen ze zbiorników do swojego zbiornika. +tile.oxygen_detector.description=Detektor tlenu emituje sygnał czerwonego kamienia gdy jest otoczony przez tlen. +tile.oxygen_detector.name=Detektor tlenu +tile.oxygen_storage_module.description=Moduł magazynu tlenu jest wykorzystywany do przechowywania dużych ilości tlenu na późniejszy użytek. +tile.painter.description=Zastosowywuje kolor do szkła próżniowego, paneli świetlnych i innych objektów zdatnych do malowania. Użyj jakiegokolwiek bloku - lub barwnika - by nadać świeży kolor! +tile.panel_lighting.description=Panel świetlny do użytku w kosmosie! Klucz nim obraca. By zmienić wygląd: trzymaj przycisk skradania podczas stawiania panela naprzeciw wybranego bloku. +tile.panel_lighting_0.name=Panel świetlny (Kwadrat) +tile.panel_lighting_1.name=Panel świetlny (Reflektor) +tile.panel_lighting_2.name=Panel świetlny (Liniowy) +tile.panel_lighting_3.name=Panel świetlny (Ciemny) +tile.panel_lighting_4.name=Panel świetlny (Ciemny) +tile.parachest.description=Paraskrzynie spadają z nieba zaraz po lądowaniu na pewnych planetach/księżycach, jak np. Ziemia. Zawiera rakietę, paliwo i magazyn z poprzedniego startu. +tile.parachest.name=Paraskrzynia +tile.platform.description=Postaw 4 by uformować platformę. Platforma podnosi graczy do następnej platformy na górze lub dole. Przycisk skradania = dół : Skok = góra. +tile.platform.name=Platforma hydrauliczna +tile.refinery.description=Rafineria pobiera ropę, i z wykorzystaniem energii przerabia ją na paliwo wykorzystywane przez rakiety i pojazdy. +tile.refinery.name=Rafineria +tile.rocket_workbench.name=Stół warsztatowy NASA +tile.rocket_workbench.description=Stół warsztatowy NASA jest używany do tworzenia zaawansowanych części i pojazdów. Można dodać nowe schematy gdy zostaną odnalezione. +tile.sapling2.birch.name=Sadzonka (brzoza) +tile.sapling2.jungle.name=Sadzonka (dżungla) +tile.sapling2.oak.name=Sadzonka +tile.sapling2.spruce.name=Sadzonka (świerk) +tile.sealer.description=Uszczelniacz tlenu sprawdza czy jest w uszczelnionym pomieszczeniu. Jeżeli jest, wypełnia pomieszczenie oddychalnym tlenem. +tile.sealer.name=Uszczelniacz tlenu +tile.slab_gc_half.moon_bricks_slab.name=Ceglana płyta księżycowego Lochu +tile.slab_gc_half.moon_slab.name=Skalista księżycowa płyta +tile.slab_gc_half.tin_slab_1.name=Cynowa dekoracyjna płyta +tile.slab_gc_half.tin_slab_2.name=Cynowa dekoracyjna płyta +tile.solar.advanced_solar.name=Zaawansowany panel słoneczny +tile.solar.basic_solar.name=Standardowy panel słoneczny +tile.solar_adv.description=Zaawansowany panel słoneczny pobiera energię ze słońca, przechowując ją do dalszego użytku. Automatycznie reguluje kąt panelu dla optymalnego poboru energii. +tile.solar_basic.description=Standardowy panel słoneczny pobiera energię ze słońca, przechowując ją do dalszego użytku. Pobiera najwięcej energii w środku dnia (nie można regulować). +tile.space_glass.description=Uszczelnione szkło próżniowe do twoich baz kosmicznych. Pomaluj obramowanie w jakikolwiek kolor używając pobliskiego aplikatora chromatycznego! +tile.space_glass.clear.description=Przejrzyste szkło do wspaniałych widoków kosmosu, potrafi także dać czysty widok pod wodą. +tile.space_glass.strong.description=Mocne i eksplozjo-odporne szkło. Zrobione z przejrzystego aluminum... +tile.space_glass_clear.name=Szkło próżniowe (Przejrzyste) +tile.space_glass_vanilla.name=Szkło próżniowe +tile.space_glass_strong.name=Szkło próżniowe (Mocne) +tile.space_station_base.name=Główny blok stacji kosmicznej +tile.spin_thruster.description=Wirujące dopalacze pozwalają twojej stacji kosmicznej na wykonywanie obrotów. +tile.spin_thruster.name=Wirujący dopalacz +tile.telemetry.description=Zbiera użyteczne dane z połączonych rakiet, graczy i mobów. Najlepiej postawić go obok ekranu. Użyj modułu częstotliwości by ustabilizować połączenia danych. +tile.telemetry.name=Urządzenie telemetryczne +tile.tin_stairs_1.name=Cynowe dekoracyjne schody +tile.tin_stairs_2.name=Cynowe dekoracyjne schody +tile.treasure_chest.description=Skrzynie skarbów poziomu 1 są generowane w księżycowych Lochach. Można je otworzyć po pokonaniu finałowego Bossa. +tile.treasure_chest.name=Skrzynia skarbów +tile.unlit_torch.name=Pochodnia +tile.unlit_torch_stone.name=Kamienna pochodnia +tile.unlit_torch_lit.name=Pochodnia +tile.unlit_torch_stone_lit.name=Kamienna pochodnia +tile.view_screen.description=Ekrany dają ostateczny dodatek do twojej bazy kosmicznej. Kliknięcie prawym przyciskiem myszy zmienia pokazywaną informacje. +tile.view_screen.name=Ekran +tile.wall_gc.moon.name=Skalisty księżycowy murek +tile.wall_gc.moon_bricks.name=Murek z księżycowego Lochu +tile.wall_gc.tin.name=Cynowy dekoracyjny murek + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=Na Księżyc... i jeszcze dalej! +advancement.galacticraft.coal_generator.title=Węglowa moc +advancement.galacticraft.coal_generator.description=Skonstruuj generator węglowy +advancement.galacticraft.circuit_fabricator.title=Sfabrykowany +advancement.galacticraft.circuit_fabricator.description=Skonstruuj fabrykator obwodowy aby robić płyty +advancement.galacticraft.basic_wafer.title=Smaczne płyty +advancement.galacticraft.basic_wafer.description=Skonstruuj podstawową płytę. (Wiem że wygląda jak gofer, ale to silikon!) +advancement.galacticraft.advanced_wafer.title=Złote płyty +advancement.galacticraft.advanced_wafer.description=Skonstruuj zaawansowaną płytę. (Ona nadal jest niejadalna!) +advancement.galacticraft.compressor.title=Skompresowany +advancement.galacticraft.compressor.description=Skonstruuj kompresor +advancement.galacticraft.solar.title=Darmowa energia +advancement.galacticraft.solar.description=Skonstruuj standardowy panel słoneczny +advancement.galacticraft.advanced_solar.title=Szybki + efektywny +advancement.galacticraft.advanced_solar.description=Skonstruuj zaawansowany panel słoneczny +advancement.galacticraft.electric_compressor.title=Ulepszenie elektryczne +advancement.galacticraft.electric_compressor.description=Skonstruuj kompresor elektryczny +advancement.galacticraft.oil.title=Śliska rzecz +advancement.galacticraft.oil.description=Wpadnij w ropę +advancement.galacticraft.refiery.title=Pora na rafinerie! +advancement.galacticraft.refiery.description=Skonstruuj rafinerie +advancement.galacticraft.rocket_fuel.title=Paliwo rakietowe +advancement.galacticraft.rocket_fuel.description=Refinuj ropę w rafineri +advancement.galacticraft.oxygen_collector.title=Tlen nie w zestawie +advancement.galacticraft.oxygen_collector.description=Skonstruuj zbieracz tlenu +advancement.galacticraft.oxygen_compressor.title=Skompresuj powietrze +advancement.galacticraft.oxygen_compressor.description=Skonstruuj kompresor tlenu +advancement.galacticraft.fill_tank.title=Tlen dla cb +advancement.galacticraft.fill_tank.description=Wypełnij do pełna zbiornik tlenowy +advancement.galacticraft.fill_all_tanks.title=Tlenowy zapas +advancement.galacticraft.fill_all_tanks.description=Wypełnij do pełna każdy typ zbiornika tlenowego +advancement.galacticraft.all_oxygen_gear.title=Wszystko gotowe +advancement.galacticraft.all_oxygen_gear.description=Stwórz wszystko czego potrzebujesz aby oddychać w kosmosie +advancement.galacticraft.rocket_workbench.title=Kosmiczny inżynier +advancement.galacticraft.rocket_workbench.description=Skonstruuj stół warsztatowy NASA +advancement.galacticraft.rocket_t1.title=Mamy rakietę! +advancement.galacticraft.rocket_t1.description=Zespawaj razem rakietę +advancement.galacticraft.fuel_loader.title=Wypełnij ją! +advancement.galacticraft.fuel_loader.description=Skonstruuj ładownik paliwa +advancement.galacticraft.launch_rocket.title=Mamy zapłon! +advancement.galacticraft.launch_rocket.description=Startuj swoją pierwszą rakietę +advancement.galacticraft.moon.title=Księżyc! +advancement.galacticraft.moon.description=Wyląduj na księżycu +advancement.galacticraft.create_space_station.title=Stacja Kosmiczna +advancement.galacticraft.create_space_station.description=Stwórz swoją własną stację kosmiczną! +advancement.galacticraft.spin_thruster.title=Jest mi niedoobrrze +advancement.galacticraft.spin_thruster.description=Skonstruuj wirujący dopalacz +advancement.galacticraft.moon_dungeon.title=Gorszy od withera +advancement.galacticraft.moon_dungeon.description=Znajdź wyewoluowanego bossa szkieleta w lochu +advancement.galacticraft.dungeon_key_moon.title=Ja mieć klucz +advancement.galacticraft.dungeon_key_moon.description=Zabij bossa chowającego się w lochu, i skradnij jego klucz +advancement.galacticraft.moon_buggy_schematic.title=Zglitchowany schemat +advancement.galacticraft.moon_buggy_schematic.description=Zdobądź schemat księżycowe §obuggy +advancement.galacticraft.moon_buggy.title=Buggy +advancement.galacticraft.moon_buggy.description=Zespawaj razem księżycowe buggy diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_br.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_br.lang new file mode 100644 index 00000000..a9898be1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_br.lang @@ -0,0 +1,676 @@ +checklist.create_grapple.key=Criar Gancho +checklist.equip_oxygen_suit.key=Equipar-se de Aparelho de Respiração +checklist.equip_parachute.key=Equipar-se de Paraquedas +command.gcastrominer.count=O número de astromineradores do jogador %s é %s +commands.dimensionteleport=%s foi enviado para a atmosfera%s +commands.dimensiontp.too_many=Argumentos de comando demais! Uso: %s +commands.gcenergyunits.invalid_units=Unidades inválidas no comando /GCEnergyUnits. Uso: %s +commands.gcenergyunits.no_units=As unidades precisam ser especificadas! Uso: %s +commands.joinrace.no_team=O time precisa ser especificado! Uso: %s +commands.ssinvite.not_found=Não se pôde encontrar estação espacial para o seu nome de usuário, você precisa viajar lá primeiro! +commands.ssinvite.wrong_usage=Argumentos de comando insuficientes! Uso: %s +commands.ssnewowner.wrong_usage=Não se pôde reconhecer o ID da Estação Espacial - Ela existe mesmo? Uso: %s +commands.ssuninvite.no_player=Não se pôde encontrar jogador com nome de usuário %s na lista da sua Estação Espacial! +container.cargoloader.name=Carregador de Carga +container.cargounloader.name=Descarregador de Carga +container.fuelloader.name=Carregador de Combustível +container.lander.name=Módulo Espacial +container.oxygencollector.name=Coletor de Oxigênio +container.oxygencompressor.name=Compressor de Oxigênio +container.oxygendecompressor.name=Descompressor de Oxigênio +container.oxygendistributor.name=Distribuidor de Oxigênio +container.oxygensealer.name=Selador de Oxigênio +container.parachest.name=Para-baú +container.refinery.name=Refinaria +container.solaradvanced.name=Painel Solar Avançado +container.solarbasic.name=Painel Solar Básico +container.spaceship.name=Foguete Nível 1 +container.treasurechest.name=Baú de Tesouro +death.attack.oxygen_suffocation=%1$s ficou sem oxigênio! +death.attack.spaceship_crash=O foguete de %1$s se esborrachou no chão. Ups. +death.attack.sulphuric_acid=%1$s se dissolveu em ácido sulfúrico! +death.attack.thermal=%1$s se esqueceu da proteção térmica. +dimension.moon.name=Lua +dimension.overworld.name=Mundo Principal +dimension.sun.name=Sol +entity.alien_villager.name=Aldeão Alienígena +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper Evoluído +entity.evolved_skeleton.name=Esqueleto Evoluído +entity.evolved_skeleton_boss.name=Esqueleto-Chefe Evoluído +entity.evolved_spider.name=Aranha Evoluída +entity.evolved_zombie.name=Zumbi Evoluído +entity.flag.name=Bandeira +entity.gcflag.name=Bandeira +entity.gravity_arrow.name=Flecha +entity.lander.name=Módulo Espacial +entity.meteor.name=Meteoro +entity.meteor_chunk.name=Pedaço de Meteoro +entity.oxygen_bubble.name=Bolha de Oxigênio +entity.para_chest.name=Para-baú +entity.rocket_t1.name=Foguete Nível 1 +galaxy.milky_way=Via Láctea +gc.configgui.alternate_canister_recipe=Receita Alternativa para Lata +gc.configgui.asteroids_start=Modo Desafio (Asteróides começam) +gc.configgui.biome_id_base=Base BiomeID para GC +gc.configgui.detectable_i_ds=IDs Detectáveis +gc.configgui.disable_cheese_moon=Desativar Geração de Queijo na Lua +gc.configgui.disable_copper_moon=Desativar Geração de Cobre na Lua +gc.configgui.disable_lander=Desativar Módulo Lunar na lua, ao invés disso usar paraquedas +gc.configgui.disable_moon_village_gen=Desativar Geração de Aldeia na Lua +gc.configgui.disable_space_station_creation=Desativar Geração de Estação Espacial +gc.configgui.disable_spaceship_grief=Desativar Explosões de Foguetes +gc.configgui.disable_spaceship_particles=Desativar Partículas de Foguetes +gc.configgui.disable_tin_moon=Desativar Geração de Estanho na Lua +gc.configgui.disable_update_check=Desativar Verificação de Atualizações +gc.configgui.dungeon_boss_health_mod=Modificador de Vida de Boss de Masmorra +gc.configgui.enable_aluminum_ore_gen=Geração de Alumínio no Mundo Principal +gc.configgui.enable_copper_ore_gen=Geração de Cobre no Mundo Principal +gc.configgui.enable_debug=Mostrar Mensagens de Debugging no Console +gc.configgui.enable_other_mods_features=Ativar Geração de Mundo com outros Mods +gc.configgui.enable_retrogen_oil=Óleo Retrogen do Mundo Principal +gc.configgui.enable_sealer_edge_checks=Verificações da Borda de Selante +gc.configgui.enable_silicon_ore_gen=Geração de Silício no Mundo Principal +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Geração de Estanho no Mundo Principal +gc.configgui.external_oil_gen=Geração de Óleo External +gc.configgui.force_overworld_respawn=Forçar Respawn no Mundo Principal +gc.configgui.hard_mode=Maior Dificuldade +gc.configgui.id_achiev_base=ID Base de Conquista +gc.configgui.id_dimension_moon=ID Dimensional da Lua +gc.configgui.id_dimension_overworld_orbit=ID Dimensional da Estação Espacial +gc.configgui.id_dimension_overworld_orbit_static=ID Dimensional Estática da Estação Espacial +gc.configgui.id_schematic_add_schematic=ID Esquemática "Adicional Esquema" +gc.configgui.id_schematic_moon_buggy=ID Esquemática Buggy de Lua +gc.configgui.id_schematic_rocket_t1=ID Esquemática Foguete Nível 1 +gc.configgui.key_override_fuel_level=Selecionar chave: GUI de Combustível de Foguete +gc.configgui.key_override_toggle_adv_goggles=Selecionar chave: Óculos de Proteção Avançados +gc.configgui.map_scroll_invert=Inverter Rolagem de Mapa +gc.configgui.map_scroll_sensitivity=Sensitividade de Rolagem de Mapa +gc.configgui.meteor_block_damage=Dano de Meteoro a Blocos Ativado +gc.configgui.meteor_spawn_mod=Modificador de Geração de Meteoros +gc.configgui.more_stars=Mostrar Mais Estrelas +gc.configgui.oil_gen_factor=Fator de Geração de Óleo +gc.configgui.ore_dict_silicon=Nome de Silício (OreDict) em outros mods +gc.configgui.other_mod_ore_gen_i_ds=Geração de Minérios de Outros Mods em Planetas +gc.configgui.override_capes=Override de Capas Doadores +gc.configgui.override_map=Selecionar chave: Mapa de Galáxia +gc.configgui.oxygen_indicator_bottom=Mover Indicador de Oxigênio p/ Baixo +gc.configgui.oxygen_indicator_left=Mover Indicador de Oxigênio p/ Esquerda +gc.configgui.quick_mode=Jogo Rápido (mais fácil) +gc.configgui.rocket_disable_overworld_return=Desativar Volta de Foguete do Overworld +gc.configgui.rocket_disabled_dimensions=Dimensões Desativadas de Foguete +gc.configgui.rocket_fuel_factor=Fator de Combustível de Foguete +gc.configgui.sealable_i_ds=Blocos Seláveis +gc.configgui.space_station_energy_scalar=Modificador da Energia da Estação Espacial +gc.configgui.space_stations_require_permission=Permissões da Estação Espacial +gc.configgui.static_loaded_dimensions=Dimensões Estáticas Carregadas +gc.configgui.suffocation_cooldown=Cooldown de Sufocação +gc.configgui.suffocation_damage=Dano de Asfixia +gc.configgui.title=Config. de Galacticraft Core +gc.configgui.whitelist_co_f_h_core_gen=Whitelist de Geração do Mundo CoFHCore +gui.battery_slot.desc.0=Lugar da bateria, coloque uma bateria aqui +gui.battery_slot.desc.1=ou conecte uma fonte de energia. +gui.bed_fail.message=Opa, e se o oxigênio acabar durante o sono? Vou precisar de uma câmara criogênica para dormir no espaço! +gui.buggy.accel.name=Acelerar +gui.buggy.decel.name=Desacelerar +gui.buggy.inv.name=Inventário/Combustível +gui.buggy.storage_space=Espaço de armazenagem +gui.buggy.turn.name=Mover para os lados +gui.button.back.name=Volta +gui.button.disable.name=Desabilitar +gui.button.disableseal.name=Desabilitar +gui.button.enable.name=Habilitar +gui.button.enableseal.name=Habilitar +gui.button.hide_dest.name=Ocultar +gui.button.loadfuel.name=Carregar +gui.button.loaditems.name=Carregar +gui.button.next.name=Avança +gui.button.refine.name=Refinar +gui.button.stoploading.name=Parar +gui.button.stoprefine.name=Parar +gui.button.stopunloading.name=Parar +gui.button.unhide_dest.name=Mostrar +gui.button.unloaditems.name=Descarregar +gui.button.unlockschematic.name=Destravar +gui.checkbox.horizontal.name=Modo horizontal +gui.checkbox.invert.name=Inverte seleção +gui.checkbox.player_name.name=Nome do jogador é +gui.checkbox.player_within.name=Jogador está a +gui.checkbox.redstone_signal.name=Abre ao sinal de redstone +gui.chest.warning.wrongkey=Acho que vou precisar da Chave de Calabouço Nível %s para destracar isso! +gui.choose_planet.desc.moon=Habitável#Sem Oxigênio#Gravidade: 18% +gui.choose_planet.desc.overworld=Pleno de Vida#Habitável#Gravidade: 100% +gui.chooseplanet.alreadycreated1.name=Uma Estação Espacial +gui.chooseplanet.alreadycreated2.name=já foi criada aqui! +gui.chooseplanet.cannotcreate1.name=Não se pode criar uma +gui.chooseplanet.cannotcreate2.name=Estação Espacial aqui! +gui.creative_only.desc=Criativo somente +gui.display.nolink=Sem link +gui.docking_rocket.current_vel.name=Velocidade atual +gui.docking_rocket.distance_from.name=Distância do alvo +gui.docking_rocket.target_vel.name=Velocidade-alvo +gui.docking_rocket.warning.name.0=Pressione %s para desacelerar +gui.docking_rocket.warning.name.1=Pressione %s para acelerar +gui.dropbox.player_distance.name.0=1 metro +gui.dropbox.player_distance.name.1=2 metros +gui.dropbox.player_distance.name.2=5 metros +gui.dropbox.player_distance.name.3=10 metros +gui.electric_compressor.desc.0=Progresso +gui.energy_storage.desc.0=Armazenagem de Energia +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Já há uma bandeira aqui! +gui.frequency_module.desc.0=Capaz de receber ondas sonoras +gui.frequency_module.desc.1=fracas e sinais distantes +gui.frequencymodule.warning0=Acho que vou precisar do +gui.frequencymodule.warning1=se eu quiser ouvir direito aqui. +gui.fuel_output.desc.0=Coloque latas vazias para líquidos neste +gui.fuel_output.desc.1=lugar para que o tanque de combustível +gui.fuel_output.desc.2=possa enchê-las. +gui.fuel_tank.desc.0=Tanque de combustível. Requer +gui.fuel_tank.desc.1=Carregador de Combustível para encher +gui.fuel_tank.desc.2=Tanque de combustível, pode ser enchido +gui.fuel_tank.desc.3=com latas de combustível +gui.fuel_tank.desc.4=Tanque de combustível +gui.infinite_item.desc=Infinito +gui.lander.velocity=Velocidade de entrada +gui.lander.velocityu=m/s +gui.lander.warning2=Pressione " +gui.lander.warning3=" para desacelerar! +gui.max_output.desc=Saída máx. +gui.message.addnewsch.name=Adicionar novo esquemático +gui.message.apply.name=Aplicar +gui.message.assign_name.name=Atribuir nome +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Voltar +gui.message.breed.name=Procriar +gui.message.bubble_visible.name=Bolha visível +gui.message.can_create_space_station.name=Uma Estação Espacial pode ser criada aqui! +gui.message.cancel.name=Cancelar +gui.message.cannot_create_space_station.name=Uma Estação Espacial não pode ser criada aqui. +gui.message.catalog.name=Catálogo +gui.message.click_again.0.name=Clique de novo para aproximar (ver luas e satélites) +gui.message.click_again.1.name=Clique de novo para aproximar (ver luas) +gui.message.click_again.2.name=Clique de novo para aproximar (ver satélites) +gui.message.click_again.3.name=Clique de novo para aproximar +gui.message.clicklink=Clique para Galacticraft Wiki +gui.message.create_ss.name=Criar +gui.message.daynightcycle.name=Ciclo dia-e-noite +gui.message.energy=Energia +gui.message.environment.name=Bônus ambiental +gui.message.exit.name=Sair +gui.message.fuel.name=Combustível +gui.message.full.name=cheio +gui.message.generating.name=Gerando +gui.message.grow.name=Crescer +gui.message.heal.name=Curar +gui.message.help1=Para ajuda do Galacticraft +gui.message.help1a=Para ver esta mensagem de novo, digite +gui.message.help2=Para guia do Programa Espacial +gui.message.help3=Para ajuda com petróleo +gui.message.in.name=Ent. +gui.message.launch.name=Lançar +gui.message.max_energy=Energia máx. +gui.message.meansurfacetemp.name=Temp. superf. média +gui.message.moon.atmosphere.0.name=Inexistente +gui.message.moon.daynightcycle.0.name=8 dias terrestres +gui.message.moon.meansurfacetemp.0.name=253°C (lado claro) +gui.message.moon.meansurfacetemp.1.name=-153°C (lado escuro) +gui.message.moon.surfacecomposition.0.name=Rocha basáltica e +gui.message.moon.surfacecomposition.1.name=vestígios de queijo +gui.message.moon.surfacegravity.0.name=0,1654g +gui.message.moon.surfacegravity.1.name=(18% da Terra) +gui.message.of.name=de +gui.message.oil.name=Petróleo +gui.message.out.name=Sai +gui.message.overworld.atmosphere.0.name=Nitrogênio e Oxigênio +gui.message.overworld.atmosphere.1.name=Suporta vida +gui.message.overworld.daynightcycle.0.name=1 dia terrestre +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Pedra, terra e +gui.message.overworld.surfacecomposition.1.name=cascalho +gui.message.overworld.surfacegravity.0.name=1,0g +gui.message.overworld.surfacegravity.1.name=(100% da Terra) +gui.message.prelaunch=Checklist de Pré-Lançamento +gui.message.rename.name=Renomear +gui.message.select_ss.name=Selecionar uma Estação Espacial +gui.message.ss_owner.name=Dono: +gui.message.status.name=Status +gui.message.strengthen.name=Fortalecer +gui.message.surfacecomposition.name=Composição superficial +gui.message.surfacegravity.name=Gravidade superficial +gui.message.thermal_status.name=Controle térmico +gui.message.tier.name=Nível %d +gui.message.unnamed.name=Sem nome +gui.missing_core.name.0=MicdoodleCore não foi encontrado na pasta mods +gui.missing_core.name.1=Galacticraft falhou para carregar +gui.missing_core.name.2=Feche Minecraft e instale MicdoodleCore +gui.missing_core.name.3=Clique aqui para abrir a página de download +gui.new_schematic.slot.desc.0=Lugar para novo esquemático. Você +gui.new_schematic.slot.desc.1=pode encontrar novos esquemáticos +gui.new_schematic.slot.desc.2=completando calabouços +gui.new_schematic.slot.desc.3=em planetas e luas. +gui.oil_tank.desc.0=Tanque de óleo, pode ser enchido +gui.oil_tank.desc.1=com latas de óleo +gui.oxygen.warning=Sistema de oxigênio inválido! +gui.oxygen_compressor.slot.desc.0=Lugar do tanque do compressor, coloque um tanque +gui.oxygen_compressor.slot.desc.1=de oxigênio aqui para enchê-lo com oxigênio respirável. +gui.oxygen_decompressor.slot.desc.0=Lugar do tanque do descompressor, coloque um tanque +gui.oxygen_decompressor.slot.desc.1=de oxigênio aqui para remover oxigênio respirável. +gui.oxygen_slot.desc.0=Lugar de oxigênio, coloque uma lata ou tanque de +gui.oxygen_slot.desc.1=oxigênio aqui, ou conecte uma fonte de oxigênio. +gui.oxygen_storage.desc.0=Armazenagem de Oxigênio +gui.oxygen_storage.desc.1=Oxigênio +gui.oxygen_use.desc=Uso de Oxigênio +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Alimento +gui.player.health=Saúde +gui.player.ouch=Ai!!!! +gui.receiver.cannot_attach=Não dá para instalar um receptor aqui! +gui.requires_controller.desc=Requer Controle de Lançamento +gui.rocket.countdown=Contagem regressiva +gui.rocket.height=Altura +gui.rocket.inv.name=Inventário/Combustível +gui.rocket.launch.name=Lançar +gui.rocket.launched=Lançado +gui.rocket.on_launchpad=Na base +gui.rocket.speed=Velocidade +gui.rocket.turn.name=Mover para os lados +gui.rocket.updown.name=Mover para cima e para baixo +gui.rocket.warning.nofuel=Vou precisar de carregar algum combustível de foguete primeiro! +gui.rocket.warning.nogyroscope=Forças misteriosas estão no jogo e os giroscópios estão girando descontroladamente! +gui.rocket.warning.noparachute=Estou sem paraquedas! Se eu pressionar Lançar de novo, não há como voltar atrás! +gui.rocket_type.0=Espaço de Armazenagem: 18 +gui.rocket_type.1=Espaço de Armazenagem: 36 +gui.rocket_type.2=Espaço de Armazenagem: 56 +gui.rocket_type.3=Pré-abastecido +gui.seconds=s +gui.sensor.advanced=Modo Avançado +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Mostrar bolha +gui.skeleton_boss.message=Chefe removido, não saia da sala enquanto luta! Volte para regerar o chefe. +gui.space_race.chat.add_success=%s entrou na Corrida Espacial! +gui.space_race.chat.already_part=Você já é parte desta corrida espacial! +gui.space_race.chat.invite_received=Você recebeu um Convite de Time de Corrida Espacial de %s. +gui.space_race.chat.not_found=Não se pôde encontrar jogador com o nome de: %s +gui.space_race.chat.remove_success=%s foi removido da Corrida Espacial. +gui.space_race.chat.to_join=Para se juntar a %s use o comando %s +gui.space_race.coming_soon=Em breve +gui.space_race.create.add_players.name=Adicionar Jogador(es) +gui.space_race.create.back.name=Voltar +gui.space_race.create.brush_radius.name=Raio do Pincel +gui.space_race.create.brush_size.name=Tamanho do Pincel +gui.space_race.create.change_color.name.0=Mudar +gui.space_race.create.change_color.name.1=Time +gui.space_race.create.change_color.name.2=Cor +gui.space_race.create.close.name=Fechar +gui.space_race.create.customize.name=Personalizar Bandeira +gui.space_race.create.eraser_radius.name=Raio do Apagador +gui.space_race.create.eraser_size.name=Tamanho do Apagador +gui.space_race.create.global_stats.name=Ver Estatísticas Globais +gui.space_race.create.invite_player.name=Convidar Jogador +gui.space_race.create.player_radius.name=Note: Jogador tem que estar próximo! (25 blocos) +gui.space_race.create.rem_players.name=Remover Jogador(es) +gui.space_race.create.remove.name=Remover +gui.space_race.create.remove_player.name=Remover Jogador +gui.space_race.create.rename.name=Renomear Time +gui.space_race.create.send_invite.name=Enviar Convite +gui.space_race.create.server_stats.name=Ver Estatísticas do Servidor +gui.space_race.create.title.name.0=Gerenciador de +gui.space_race.create.title.name.1=Corrida Espacial +gui.space_race.create.title.name=Gerenciador de Corrida Espacial +gui.space_race.join.member_count.name=%d membros +gui.space_race.join.name=Entrar +gui.space_race.join.owner.name=Dono +gui.space_race.join.title.name=Juntar-se à Corrida Espacial +gui.space_race.unnamed=Time sem nome +gui.spacestation.added=Você foi adicionado à lista de jogadores aceitos da estação espacial de %s! +gui.spacestation.addsuccess=Adiciou-se %s com sucesso à lista da estação espacial! +gui.spacestation.allow_all_false=Suas Estações Espaciais não estão mais abertas a todos os jogadores! +gui.spacestation.allow_all_true=Suas Estações Espaciais agora estão abertas para todos os jogadores! (Use /ssinvite -all para defazer.) +gui.spacestation.changesuccess=Mudou-se a posse da Estação Espacial de %s para %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Removeu-se %s com sucesso lista da estação espacial! +gui.spacestation.to_allow_entry=para permitir outro jogador entrar nesta estação espacial! +gui.spacestation.type_command=Digite +gui.status.active.name=Ativo +gui.status.air_lock_closed.name=Porta pressurizada fechada +gui.status.air_lock_open.name=Porta pressurizada aberta +gui.status.blockedfully.name=Sol não está visível +gui.status.blockedpartial.name=Sol parcialmente visível +gui.status.check_pending.name=Verificação pendente +gui.status.check_starting.name=Verificação iniciando +gui.status.checking_seal.name=Verificando selagem +gui.status.collecting.name=Coletando +gui.status.collectingenergy.name=Coletando energia +gui.status.compressing.name=Prensando +gui.status.disabled.name=Desabilitado +gui.status.fulltank.name=Tanque oxigênio cheio +gui.status.generating.name=Gerando +gui.status.hull_heat.name=Aquecendo +gui.status.idle.name=Em espera +gui.status.missingleaves.name=Folhas insuficientes +gui.status.missingoxygen.name=Oxigênio insuficiente +gui.status.missingpower.name=Energia insuficiente +gui.status.missingtank.name=Sem tanque válido +gui.status.nofuel.name=Sem combustível! +gui.status.noinvtarget.name=Não há inventário no receptor! +gui.status.noitems.name=Sem itens a carregar! +gui.status.nooil.name=Sem óleo +gui.status.not_available.name=N/D +gui.status.not_generating.name=Não gerando +gui.status.notargetload.name=Sem receptor a carregar! +gui.status.notargetunload.name=Sem receptor a descarregar! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Chuva +gui.status.ready.name=Pronto +gui.status.refining.name=Refinando +gui.status.running.name=Funcionando +gui.status.sealed.name=Selado +gui.status.sealerblocked.name=Saída de ar bloqueada! +gui.status.sun_visible.name=Sol visível +gui.status.tank_empty.name=Tanque de oxigênio vazio +gui.status.targetempty.name=Veículo receptor está vazio! +gui.status.targetfull.name=Veículo receptor está cheio! +gui.status.unknown.name=Desconhecido +gui.status.unsealed.name=Não selado +gui.tank.oxygen_remaining=Oxigênio restante +gui.telemetry_fail.message=Primeiro vou precisar de rastrear uma entidade com o Módulo de Frequência! (Ou tente usá-lo na cabeça!) +gui.telemetry_fail_no_frequency_module.message=Acho que vou precisar do Módulo de Frequência em mãos para fazer uso disto! +gui.telemetry_fail_wearing_it.message=Vou precisar de tirar meu Módulo de Frequência se quiser ligar isso com esta Unidade de Telemetria! +gui.telemetry_succeed.message=Ligação de Telemetria criado. +gui.thermal_slot.desc.0=Lugar do acessório térmico, coloque +gui.thermal_slot.desc.1=o Controlador Térmico de Ambiente aqui +gui.thermal_slot.desc.2=(opcional). Nota: Gasta mais energia! +gui.title.air_lock.name=Controle da Porta de %s +gui.tracking.message=Rastreamento ativado. Agora tenho que clicar com o botão direito do mouse numa Unidade de Telemetria para completar a ligação. +gui.village.warning.no_freq_mod=Vou precisar de usar o Módulo de Frequência para me comunicar com eles! +gui.warning.invalid_thermal=Proteção térmica inválida +gui.warning.noroom=Pouco espaço! +gui.warning=ATENÇÃO! +item.air_fan.name=Ventilador +item.air_vent.name=Respirador +item.basic_item.ambient_thermal_controller.name=Controlador Térmico de Ambiente +item.basic_item.canned_food.name=Lata de Comida +item.basic_item.compressed_aluminum.name=Alumínio Prensado +item.basic_item.compressed_bronze.name=Bronze Prensado +item.basic_item.compressed_copper.name=Cobre Prensado +item.basic_item.compressed_iron.name=Ferro Prensado +item.basic_item.compressed_steel.name=Aço Prensado +item.basic_item.compressed_tin.name=Estanho Prensado +item.basic_item.dehydrated_apple.name=Maçã Desidratada +item.basic_item.dehydrated_carrot.name=Cenoura Desidratada +item.basic_item.dehydrated_melon.name=Melancia Desidratada +item.basic_item.dehydrated_potato.name=Batata Desidratada +item.basic_item.frequency_module.name=Módulo de Frequência +item.basic_item.ingot_aluminum.name=Barra de Alumínio +item.basic_item.ingot_bronze.name=Barra de Bronze +item.basic_item.ingot_copper.name=Barra de Cobre +item.basic_item.ingot_steel.name=Barra de Aço +item.basic_item.ingot_tin.name=Barra de Estanho +item.basic_item.raw_silicon.name=Silício Bruto +item.basic_item.solar_module_0.name=Módulo Solar +item.basic_item.solar_module_1.name=Painel Solar Completo +item.basic_item.wafer_advanced.name=Wafer Avançado +item.basic_item.wafer_basic.name=Wafer Básico +item.basic_item.wafer_solar.name=Wafer Solar Azul +item.battery.name=Bateria +item.bucket_fuel.name=Balde de Combustível +item.bucket_oil.name=Balde de Petróleo +item.buggy.name=Buggy +item.buggymat.seat.name=Assento de Buggy +item.buggymat.storage.name=Bagageiro para Buggy +item.buggymat.wheel.name=Roda de Buggy +item.canister.copper.name=Lata de Cobre +item.canister.tin.name=Lata de Estanho +item.canvas.name=Tecido +item.cheese_block.name=Bloco de Queijo +item.cheese_curd.name=Grão de Queijo +item.compressed_meteoric_iron.name=Ferro Meteórico Prensado +item.empty_liquid_canister.name=Lata Vazia +item.engine.tier1booster.name=Motor de Foguete Auxiliar Nível 1 +item.engine.tier1engine.name=Motor de Foguete Nível 1 +item.flag.name=Bandeira +item.fuel.name=Combustível de Foguete +item.fuel_canister.name=Lata de Combustível Cheia +item.fuel_canister_partial.name=Lata de Combustível Semi-Cheia +item.heavy_plating.name=Blindagem Pesada +item.hot_description.name=Quente +item.infinite_battery.name=Bateria Infinita +item.infinite_oxygen.name=Suprimento de Oxigênio Infinito +item.key.t1.name=Chave de Calabouço Nível 1 +item.lunar_sapphire.description=Safira Lunar é a moeda de troca para se negociar com Aldeões Alienígenas +item.lunar_sapphire.name=Safira Lunar +item.meteor_chunk.name=Pedaço de Meteoro Jogável +item.meteor_chunk_hot.name=Pedaço de Meteoro Jogável +item.meteoric_iron_ingot.name=Barra de Ferro Meteórico +item.meteoric_iron_raw.name=Minério de Ferro Meteórico +item.nose_cone.name=Nariz de Foguete +item.oil_canister.name=Lata de Óleo Cheia +item.oil_canister_partial.name=Lata de Óleo Semicheia +item.oil_extractor.name=Extrator Portátil de Petróleo +item.oxygen_concentrator.name=Concentrador de Oxigênio +item.oxygen_gear.name=Equipamento de Oxigênio +item.oxygen_mask.name=Máscara de Oxigênio +item.oxygen_tank_heavy_empty.name=Tanque de Oxigênio Pesado Vazio +item.oxygen_tank_heavy_full.name=Tanque de Oxigênio Pesado +item.oxygen_tank_light_empty.name=Tanque de Oxigênio Leve Vazio +item.oxygen_tank_light_full.name=Tanque de Oxigênio Leve +item.oxygen_tank_med_empty.name=Tanque de Oxigênio Médio Vazio +item.oxygen_tank_med_full.name=Tanque de Oxigênio Médio +item.parachute_black.name=Paraquedas Preto +item.parachute_blue.name=Paraquedas Azul-Claro +item.parachute_brown.name=Paraquedas Marrom +item.parachute_darkblue.name=Paraquedas Azul +item.parachute_darkgray.name=Paraquedas Cinza +item.parachute_darkgreen.name=Paraquedas Verde +item.parachute_gray.name=Paraquedas Cinza-Claro +item.parachute_lime.name=Paraquedas Verde-Limão +item.parachute_magenta.name=Paraquedas Magenta +item.parachute_orange.name=Paraquedas Laranja +item.parachute_pink.name=Paraquedas Rosa +item.parachute_plain.name=Paraquedas +item.parachute_purple.name=Paraquedas Púrpura +item.parachute_red.name=Paraquedas Vermelho +item.parachute_teal.name=Paraquedas Ciano +item.parachute_yellow.name=Paraquedas Amarelo +item.rocket_fins.name=Aleta de Foguete +item.rocket_t1.name=Foguete Nível 1 +item.schematic.name=Esquemático para Mesa de Trabalho NASA +item.sensor_glasses.name=Óculos Sensores +item.sensor_lens.name=Lentes Sensoras +item.standard_wrench.name=Chave Inglesa Padrão +item.steel_axe.name=Machado para Trabalho Pesado +item.steel_boots.name=Botas para Trabalho Pesado +item.steel_chestplate.name=Peitoral para Trabalho Pesado +item.steel_helmet.name=Elmo para Trabalho Pesado +item.steel_hoe.name=Enxada para Trabalho Pesado +item.steel_leggings.name=Perneiras para Trabalho Pesado +item.steel_pickaxe.name=Picareta para Trabalho Pesado +item.steel_pole.name=Mastro de Bandeira +item.steel_shovel.name=Pá para Trabalho Pesado +item.steel_sword.name=Espada para Trabalho Pesado +item.tier1.desc=Nível 1 +item_desc.powerdraw.name=Energia requerida: %s /s +item_desc.shift.name=Pressione %s para detalhes +item_group.galacticraft_blocks=Galacticraft Blocos +item_group.galacticraft_items=Galacticraft Itens +keybind.map.name=Mapa da Galáxia +keybind.sensortoggle.name=Alternar modos dos Óculos Sensores +keybind.spaceshipinv.name=Abrir Inventário da Nave +keybind.vehiclebackward.name=Mover veículo para trás +keybind.vehicledown.name=Mover veículo para baixo +keybind.vehicleforward.name=Mover veículo para frente +keybind.vehicleleft.name=Mover veículo para esquerda +keybind.vehicleright.name=Mover veículo para direita +keybind.vehicleup.name=Mover veículo para cima +moon.moon=Lua +newversion.failed.name=Verificação de atualização do Galacticraft falhou! Tentando de novo em 15 segundos +newversion.success.name=Versão on-line do Galacticraft encontrado: +planet.jupiter=Júpiter +planet.mercury=Mercúrio +planet.neptune=Netuno +planet.overworld=Mundo Principal +planet.saturn=Saturno +planet.uranus=Urano +planet.venus=Vênus +satellite.spacestation.overworld=Estação Espacial do Mundo Principal +schematic.moonbuggy.name=Buggy +schematic.rocket_t1.name=Foguete Nível 1 +schematic.rocket_t2.name=Foguete Nível 2 +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Controle de Porta Pressurizada +tile.air_lock_frame.description=Quadros de Porta Pressurizada vão funcionar como uma Porta Pressurizada quando dispostos na forma de uma porta e com um controlador no lugar de um dos blocos. +tile.air_lock_frame.name=Quadro de Porta Pressurizada +tile.air_lock_seal.name=Porta Pressurizada +tile.aluminum_wire.alu_wire.description=Cabo de Alumínio é utilizado para ligar fontes de energia a máquinas que consomem energia. +tile.aluminum_wire.alu_wire.name=Cabo de Alumínio +tile.aluminum_wire.alu_wire_heavy.description=Cabo de Alumínio Pesado é usado para ligar fontes de energia a máquinas que consomem energia. Sua capacidade maior aumenta a eficiência de máquinas de nível 2. +tile.aluminum_wire.alu_wire_heavy.name=Cabo de Alumínio Pesado +tile.arclamp.description=Lâmpadas a Arco Voltaico são usadas para fornecer a luz forte para uma grande área, além de afugentar a maioria dos mobs. +tile.arclamp.name=Lâmpada a Arco Voltaico +tile.basic_block_core.block_aluminum_gc.name=Bloco de Alumínio +tile.basic_block_core.block_copper_gc.name=Bloco de Cobre +tile.basic_block_core.block_meteoric_iron_gc.name=Ferro Meteórico Maciço +tile.basic_block_core.block_tin_gc.name=Bloco de Estanho +tile.basic_block_core.deco_block_0.name=Bloco Decorativo de Estanho +tile.basic_block_core.deco_block_1.name=Bloco Decorativo de Estanho +tile.basic_block_core.ore_aluminum_gc.name=Minério Alumínio +tile.basic_block_core.ore_copper_gc.name=Minério de Cobre +tile.basic_block_core.ore_silicon.name=Minério de Silício +tile.basic_block_core.ore_tin_gc.name=Minério de Estanho +tile.basic_block_moon.bricks.name=Tijolos Lunares +tile.basic_block_moon.cheesestone.name=Minério de Queijo +tile.basic_block_moon.coppermoon.name=Minério de Cobre +tile.basic_block_moon.moondirt.name=Terra Lunar +tile.basic_block_moon.moongrass.name=Turfa Lunar +tile.basic_block_moon.moonstone.name=Rocha Lunar +tile.basic_block_moon.sapphiremoon.name=Minério de Safira +tile.basic_block_moon.tinmoon.name=Minério de Estanho +tile.buggy_pad.description=Base de Abastecimento permitirá um Buggy na base ser reabastecido por um Carregador de Combustível colocado ao lado se construído num quadrado de 3x3. Não pode ser utilizado para lançar foguetes! +tile.cargo.loader.name=Carregador de Carga +tile.cargo.unloader.name=Descarregador de Carga +tile.cargo_loader.description=Carregadores de Carga transferirão blocos e itens para foguetes e outros veículos com espaço para carga. Devem ser colocados ao lado da Base de Lançamento ou de Abastecimento. +tile.cargo_unloader.description=Descarregadores de carga extrairão blocos e itens de foguetes e outros veículos com espaço para carga. Devem ser colocados ao lado da Base de Lançamento ou de Abastecimento. +tile.cheese.description=Blocos de Queijo são criados a partir dos queijos da Lua, colocáveis e comestíveis. +tile.cheese.name=Bloco de Queijo +tile.circuit_fabricator.description=Fabricador de Circuitos processará materiais básicos em wafers de silício, usado para máquinas avançadas. +tile.coal_generator.description=Gerador a Carvão queimará carvão (ou bloco de carvão) para gerar energia. É o mais simples, mas também o menos eficiente método de produzir energia. +tile.collector.description=Coletor de Oxigênio armazenará oxigênio coletado de folhas próximas. +tile.collector.name=Coletor de Oxigênio +tile.compressor.description=Prensa processará barras em seus equivalentes prensados. É a máquina mais essencial do Galacticraft! +tile.compressor_electric.description=Prensa Elétrica processará barras em seus equivalentes prensados. Comprime dois de cada vez, tornando-se mais eficaz do que sua antecessora. +tile.crude_oil.name=Petróleo +tile.crude_oil_moving.name=Óleo Cru +tile.crude_oil_still.name=Óleo Cru +tile.dishbase.description=A Antena de Comunicação pode acompanhar a posição de estações espaciais e receber comunicações de suas bases espaciais remotas. +tile.dishbase.name=Antena de Comunicação +tile.distributor.description=Distribuidor de oxigênio emitirá uma bolha de oxigênio a partir do bloco central, usando um tanque interno. Isso permite a respiração segura dentro da bolha. +tile.distributor.name=Distribuidor de Bolha de Oxigênio +tile.dummyblock.cryogenic_chamber.name=Câmara Criogênica +tile.dummyblock.launch_pad.name=Base de Lançamento de Foguetes +tile.dummyblock.nasa_workbench.name=Bancada de Trabalho NASA +tile.dummyblock.solar.name=Painel Solar +tile.dummyblock.space_station_base.name=Base da Estação Espacial +tile.electric_furnace_tier1.description=Fornalha elétrica é usada como uma alternativa mais rápida que fornalhas a carvão tradicionais. +tile.electric_furnace_tier2.description=Fornalha a Arco Voltaico é usada como uma alternativa melhor e mais rápida que ambas as fornalhas a carvão tradicional e elétricas: minérios rendem em dobro! +tile.enclosed.aluminum_wire.name=Cabo de Alumínio Selável +tile.enclosed.copper_cable.name=Cabo de Cobre Selável +tile.enclosed.description=Blocos Seláveis devem ser usados onde o ar não deve passar, como paredes de uma base espacial. +tile.enclosed.fluid_pipe.name=Cano de Oxigênio Selável +tile.enclosed.glass_fibre_cable.name=Cabo de Fibra Ótica Selável +tile.enclosed.gold_cable.name=Cabo de Ouro Selável +tile.enclosed.heavy_aluminum_wire.name=Cabo de Alumínio Pesado Selável +tile.enclosed.hv_cable.name=Cabo AV Selável +tile.enclosed.lv_cable.name=Cabo de Estanho Selável +tile.enclosed.me_cable.name=Cabo ME Selável +tile.enclosed.pipe_fluids_cobblestone.name=Cano Impermeável para Pedregulhos Selável +tile.enclosed.pipe_fluids_stone.name=Cano Impermeável para Pedra Selável +tile.enclosed.pipe_items_cobblestone.name=Cano de Transporte de Pedregulho Selável +tile.enclosed.pipe_items_stone.name=Cano de Transporte de Pedra Selável +tile.enclosed.pipe_power_gold.name=Cano Condutor de Ouro Selável +tile.enclosed.pipe_power_stone.name=Cano Condutor de Pedra Selável +tile.energy_storage_module_tier1.description=Módulo de Armazenagem de Energia é usado para armazenar grandes quantidades de energia para uso posterior. +tile.energy_storage_module_tier2.description=Grupo de Armazenagem de Energia é usado para armazenar grandes quantidades de energia para uso posterior. Armazena e fornece mais energia do que o seu antecessor. +tile.fallen_meteor.description=Meteoros caídos podem ser encontrados em muitos planetas e luas que têm pouca ou nenhuma atmosfera. Dão Ferro Meteórico quando quebrados. +tile.fallen_meteor.name=Meteorito +tile.fluid_pipe.description=Cano de Fluidos transferirá líquidos e gases de um bloco para outro. Use a Chave Inglesa Padrão para mudar os modos. +tile.fluid_pipe.name=Cano de Fluidos +tile.fluid_pipe_pull.description=Cano de Fluidos transferirá líquidos e gases de um bloco para outro. Use a Chave Inglesa Padrão para mudar os modos. +tile.fluid_pipe_pull.name=Cano de Fluidos +tile.fluid_tank.description=Tanque de Fluidos armazenará líquidos e gases para uso posterior. +tile.fluid_tank.name=Tanque de Fluidos +tile.fuel.name=Combustível +tile.fuel_block.name=Combustível +tile.fuel_loader.description=Após ser conectado a uma Base de Lançamento, um Carregador de Combustível permitirá que o combustível passe para o foguete ou outro veículo conectado. +tile.fuel_loader.name=Carregador de Combustível +tile.glowstone_torch.description=Tochas de Pedra Luminosa são melhor utilizadas para iluminar áreas quando não há oxigênio para tochas de madeira para queimarem. +tile.glowstone_torch.name=Tocha de Pedra Luminosa +tile.landing_pad.buggy_fueler.name=Base de Carregador de Combustível +tile.landing_pad.cargo_pad.name=Base de Foguete de Carga +tile.landing_pad.description=Base de Lançamento permitirá a colocação de Foguetes se construído num quadrado de 3x3. Carregador de Combustível, Carregador de Carga e Controle de Lançamento podem ser colocados ao lado. +tile.landing_pad.landing_pad.name=Base de Lançamento de Foguetes +tile.landing_pad_full.name=Base de Abastecimento de Buggy +tile.machine.0.name=Gerador a Carvão +tile.machine.1.name=Módulo de Armazenagem de Energia +tile.machine.2.name=Fornalha Elétrica +tile.machine.3.name=Prensa +tile.machine.7.name=Fornalha a Arco Voltaico +tile.machine.8.name=Grupo de Armazenagem de Energia +tile.machine2.4.name=Prensa Elétrica +tile.machine2.5.name=Fabricador de Circuitos +tile.machine2.6.name=Módulo de Armazenagem de Oxigênio +tile.moon_stairs_brick.name=Escadas de Tijolos de Calabouço Lunar +tile.moon_stairs_stone.name=Escadas de Rocha Lunar +tile.ore_copper.name=Minério de Cobre +tile.ore_tin.name=Minério de Estanho +tile.oxygen_compressor.0.name=Compressor de Oxigênio +tile.oxygen_compressor.1.name=Descompressor de Oxigênio +tile.oxygen_compressor.description=Compressor de Oxigênio carregará um tanque de oxigênio com o oxigênio vindo de seu armazenamento interno. +tile.oxygen_decompressor.description=Descompressor de Oxigênio descarregará oxigênio de um tanque de oxigênio para dentro de seu armazenamento interno. +tile.oxygen_detector.description=Detector de Oxigênio emitirá um sinal de redstone em contato com oxigênio. +tile.oxygen_detector.name=Detector de Oxigênio +tile.oxygen_storage_module.description=Módulo de Armazenagem de Oxigênio é usado para armazenar grandes quantidades de oxigênio para uso posterior. +tile.parachest.description=Para-baús cairão do céu após a aterrissagem em certos planetas e luas, como no Mundo Principal. Contém foguete, combustível e carga do lançamento anterior. +tile.parachest.name=Para-baú +tile.refinery.description=Refinaria usará petróleo e energia e fornecer combustível útil para foguetes e veículos. +tile.refinery.name=Refinaria +tile.rocket_workbench.name=Bancada de Trabalho NASA +tile.rocket_workbench.description=Mesa de Trabalho NASA é usada para criar muitos componentes avançados e veículos. Novos esquemáticos podem ser adicionados à medida que são encontrados. +tile.sapling2.birch.name=Muda de Eucalipto +tile.sapling2.jungle.name=Muda de Árvore da Selva +tile.sapling2.oak.name=Muda de Carvalho +tile.sapling2.spruce.name=Muda de Pinheiro +tile.sealer.description=Selador de Oxigênio verificará se há um espaço fechado. Se for encontrado, a área vai se encher de ar respirável. +tile.sealer.name=Selador de Oxigênio +tile.slab_gc_half.moon_bricks_slab.name=Laje de Tijolos de Calabouço Lunar +tile.slab_gc_half.moon_slab.name=Laje de Rocha Lunar +tile.slab_gc_half.tin_slab_1.name=Laje Decorativa de Estanho +tile.slab_gc_half.tin_slab_2.name=Laje Decorativa de Estanho +tile.solar.advanced_solar.name=Painel Solar Avançado +tile.solar.basic_solar.name=Painel Solar Básico +tile.solar_adv.description=Painéis Solares Avançados coletará energia do sol armazenando-a para uso posterior. Ajustam automaticamente o ângulo dos painéis para melhor captação de energia. +tile.solar_basic.description=Painéis Solares Básicos coletarão energia do sol armazenando-a para uso posterior. Coletam mais energia ao meio-dia (ângulo não ajustável). +tile.space_station_base.name=Bloco de Chegada da Estação Espacial +tile.spin_thruster.description=Propulsores Pivotantes são usados para fazer as estações espaciais girar. +tile.spin_thruster.name=Propulsor Pivotante +tile.telemetry.description=Coleta dados úteis de foguetes conectados, jogadores e mobs. Melhor colocada na proximidade de uma Tela de Exibição. Use um Módulo de Frequência para estabelecer conexões de dados. +tile.telemetry.name=Unidade de Telemetria +tile.tin_stairs_1.name=Escadas Decorativas de Estanho +tile.tin_stairs_2.name=Escadas Decorativas de Estanho +tile.treasure_chest.description=Baús de Tesouro Nível 1 são gerados nos Calabouços Lunares. Eles são desbloqueáveis depois de derrotar o chefe final. +tile.treasure_chest.name=Baú de Tesouro +tile.unlit_torch.name=Tocha +tile.unlit_torch_stone.name=Tocha de Pedra +tile.unlit_torch_lit.name=Tocha +tile.unlit_torch_stone_lit.name=Tocha de Pedra +tile.view_screen.description=Telas de Exibição adicionam um toque final a sua base espacial. Botão direito do mouse altera as informações mostradas. +tile.view_screen.name=Tela de Exibição +tile.wall_gc.moon.name=Parede de Rocha Lunar +tile.wall_gc.moon_bricks.name=Parede de Tijolos de Calabouço Lunar +tile.wall_gc.tin.name=Parede Decorativa de Estanho diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_pt.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_pt.lang new file mode 100644 index 00000000..6d24e8f9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/pt_pt.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=The Astro Miner count for player %s is %s ##NEEDS TRANSLATE## +commands.dimensionteleport=%s foi enviado para a atmosfera%s +commands.dimensiontp.too_many=Too many command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s ##NEEDS TRANSLATE## +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.joinrace.no_team=The team needs to be specified! Usage: %s ##NEEDS TRANSLATE## +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! ##NEEDS TRANSLATE## +commands.ssinvite.wrong_usage=Not enough command arguments! Usage: %s ##NEEDS TRANSLATE## +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Couldn't find player with username %s on your Space Station list! ##NEEDS TRANSLATE## +container.cargoloader.name=Carregador de Carga +container.cargounloader.name=Descarregador de Carga +container.fuelloader.name=Carregador de Combustível +container.lander.name=Módulo Espacial +container.oxygencollector.name=Coletor de Oxigénio +container.oxygencompressor.name=Compressor de Oxigénio +container.oxygendecompressor.name=Descompressor de Oxigénio +container.oxygendistributor.name=Distribuidor de Oxigénio +container.oxygensealer.name=Selador de Oxigénio +container.parachest.name=Para-baú +container.refinery.name=Refinaria +container.solaradvanced.name=Painel Solar Avançado +container.solarbasic.name=Painel Solar Básico +container.spaceship.name=Foguetão Nível 1 +container.treasurechest.name=Baú de Tesouro +death.attack.oxygen_suffocation=%1$s ficou sem oxigénio! +death.attack.spaceship_crash=O foguete de %1$s se esborrachou no chão. Ops. +death.attack.thermal=%1$s se esqueceu da proteção térmica. +dimension.moon.name=Lua +dimension.overworld.name=Mundo Principal +dimension.sun.name=Sol +entity.alien_villager.name=Aldeão Alienígena +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Creeper Evoluído +entity.evolved_skeleton.name=Esqueleto Evoluído +entity.evolved_skeleton_boss.name=Esqueleto-Chefe Evoluído +entity.evolved_spider.name=Aranha Evoluída +entity.evolved_zombie.name=Zumbi Evoluído +entity.flag.name=Bandeira +entity.gcflag.name=Bandeira +entity.gravity_arrow.name=Flecha +entity.lander.name=Módulo Espacial +entity.meteor.name=Meteoro +entity.meteor_chunk.name=Pedaço de Meteoro +entity.oxygen_bubble.name=Bolha de Oxigénio +entity.para_chest.name=Para-baú +entity.rocket_t1.name=Foguetão Nível 1 +galaxy.milky_way=Via Láctea +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable lander on Moon, use parachute instead +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable External Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Entrada da bateria, coloca uma bateria aqui +gui.battery_slot.desc.1=ou conecta uma fonte de energia. +gui.bed_fail.message=Opa, e se o oxigénio acabar durante o sono? Vou precisar de uma câmara criogénica para dormir no espaço! +gui.buggy.accel.name=Acelerar +gui.buggy.decel.name=Desacelerar +gui.buggy.inv.name=Inventário / Combustível +gui.buggy.storage_space=Espaço de Armazenagem +gui.buggy.turn.name=Mover para os lados +gui.button.back.name=Volta +gui.button.disable.name=Desabilitar +gui.button.disableseal.name=Desabilitar +gui.button.enable.name=Habilitar +gui.button.enableseal.name=Habilitar +gui.button.hide_dest.name=Ocultar +gui.button.loadfuel.name=Carregar +gui.button.loaditems.name=Carregar +gui.button.next.name=Avança +gui.button.refine.name=Refinar +gui.button.stoploading.name=Parar +gui.button.stoprefine.name=Parar +gui.button.stopunloading.name=Parar +gui.button.unhide_dest.name=Mostrar +gui.button.unloaditems.name=Descarregar +gui.button.unlockschematic.name=Destravar +gui.checkbox.horizontal.name=Modo Horizontal +gui.checkbox.invert.name=Inverte Seleção +gui.checkbox.player_name.name=Nome do Jogador é +gui.checkbox.player_within.name=Jogador está a +gui.checkbox.redstone_signal.name=Abre ao sinal de Redstone +gui.chest.warning.wrongkey=Acho que vou precisar da Chave de Calabouço Nível %s para destracar isso! +gui.choose_planet.desc.moon=Habitável#Sem Oxigénio#Gravidade: 18% +gui.choose_planet.desc.overworld=Pleno de Vida#Habitável#Gravidade: 100% +gui.chooseplanet.alreadycreated1.name=Uma Estação Espacial +gui.chooseplanet.alreadycreated2.name=já foi criada aqui! +gui.chooseplanet.cannotcreate1.name=Não se pode criar uma +gui.chooseplanet.cannotcreate2.name=Estação Espacial aqui! +gui.creative_only.desc=Criativo somente +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Velocidade atual +gui.docking_rocket.distance_from.name=Distância do alvo +gui.docking_rocket.target_vel.name=Velocidade-alvo +gui.docking_rocket.warning.name.0=Prime %s para desacelerar +gui.docking_rocket.warning.name.1=Prime %s para acelerar +gui.dropbox.player_distance.name.0=1 Metro +gui.dropbox.player_distance.name.1=2 Metros +gui.dropbox.player_distance.name.2=5 Metros +gui.dropbox.player_distance.name.3=10 Metros +gui.electric_compressor.desc.0=Progresso +gui.energy_storage.desc.0=Armazenagem de Energia +gui.energy_storage.desc.1=Energia +gui.flag.already_placed=Já há uma bandeira aqui! +gui.frequency_module.desc.0=Capaz de receber ondas sonoras +gui.frequency_module.desc.1=fracas e sinais distantes +gui.frequencymodule.warning0=Acho que vou precisar do +gui.frequencymodule.warning1=se eu quiser ouvir direito aqui. +gui.fuel_output.desc.0=Coloca latas vazias para líquidos neste +gui.fuel_output.desc.1=entrada para que o tanque de combustível +gui.fuel_output.desc.2=possa enchê-las. +gui.fuel_tank.desc.0=Tanque de combustível. Requer +gui.fuel_tank.desc.1=Carregador de Combustível para encher +gui.fuel_tank.desc.2=Tanque de combustível, pode ser enchido +gui.fuel_tank.desc.3=com latas de combustível +gui.fuel_tank.desc.4=Tanque de combustível +gui.infinite_item.desc=Infinito +gui.lander.velocity=Velocidade de Entrada +gui.lander.velocityu=m/s +gui.lander.warning2=Prime " +gui.lander.warning3=" para desacelerar! +gui.max_output.desc=Saída Máx. +gui.message.addnewsch.name=Adicionar novo Esquemático +gui.message.apply.name=Aplicar +gui.message.assign_name.name=Atribuir Nome +gui.message.atmosphere.name=Atmosfera +gui.message.back.name=Voltar +gui.message.breed.name=Procriar +gui.message.bubble_visible.name=Bolha Visível +gui.message.can_create_space_station.name=Uma Estação Espacial pode ser criada aqui! +gui.message.cancel.name=Cancelar +gui.message.cannot_create_space_station.name=Uma Estação Espacial não pode ser criada aqui! +gui.message.catalog.name=Catálogo +gui.message.click_again.0.name=Clica de novo para aproximar (ver luas e satélites) +gui.message.click_again.1.name=Clica de novo para aproximar (ver luas) +gui.message.click_again.2.name=Clica de novo para aproximar (ver satélites) +gui.message.click_again.3.name=Clica de novo para aproximar +gui.message.clicklink=Clica para Galacticraft Wiki +gui.message.create_ss.name=Criar +gui.message.daynightcycle.name=Ciclo Dia-e-Noite +gui.message.energy=Energia +gui.message.environment.name=Bónus Ambiental +gui.message.exit.name=Sair +gui.message.fuel.name=Combustível +gui.message.full.name=cheio +gui.message.generating.name=Gerando +gui.message.grow.name=Crescer +gui.message.heal.name=Curar +gui.message.help1=Para ajuda do Galacticraft +gui.message.help1a=Para ver esta mensagem de novo, digite +gui.message.help2=Para guia do Programa Espacial +gui.message.help3=Para ajuda com petróleo +gui.message.in.name=-> +gui.message.launch.name=Lançar +gui.message.max_energy=Máx. Energia +gui.message.meansurfacetemp.name=Temp. Superf. Média +gui.message.moon.atmosphere.0.name=Não há +gui.message.moon.daynightcycle.0.name=8 dias terrestres +gui.message.moon.meansurfacetemp.0.name=(Lado Claro) 253°C +gui.message.moon.meansurfacetemp.1.name=(Lado Escuro) -153°C +gui.message.moon.surfacecomposition.0.name=Rocha Basáltica e +gui.message.moon.surfacecomposition.1.name=Vestígios de queijo +gui.message.moon.surfacegravity.0.name=0,1654g +gui.message.moon.surfacegravity.1.name=(18% da Terra) +gui.message.of.name=de +gui.message.oil.name=Petróleo +gui.message.out.name=<- +gui.message.overworld.atmosphere.0.name=Nitrogénio e Oxigénio +gui.message.overworld.atmosphere.1.name=Suporta vida +gui.message.overworld.daynightcycle.0.name=1 dia terrestre +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Pedra, terra e +gui.message.overworld.surfacecomposition.1.name=gravilha +gui.message.overworld.surfacegravity.0.name=1,0g +gui.message.overworld.surfacegravity.1.name=(100% da Terra) +gui.message.prelaunch=Checklist de Pré-Lançamento +gui.message.rename.name=Renomear +gui.message.select_ss.name=Selecionar uma Estação Espacial +gui.message.ss_owner.name=Dono: +gui.message.status.name=Status +gui.message.strengthen.name=Fortalecer +gui.message.surfacecomposition.name=Composição Superficial +gui.message.surfacegravity.name=Gravidade Superficial +gui.message.thermal_status.name=Controle Térmico +gui.message.tier.name=Nível %d +gui.message.unnamed.name=Sem-nome +gui.missing_core.name.0=MicdoodleCore não foi encontrado na pasta mods +gui.missing_core.name.1=Galacticraft falhou para carregar +gui.missing_core.name.2=Fecha Minecraft e instala MicdoodleCore +gui.missing_core.name.3=Clica aqui para abrir a página de download +gui.new_schematic.slot.desc.0=Entrada para novo esquemático. Você +gui.new_schematic.slot.desc.1=pode encontrar novos esquemáticos +gui.new_schematic.slot.desc.2=completando calabouços +gui.new_schematic.slot.desc.3=em planetas e luas. +gui.oil_tank.desc.0=Tanque de óleo, pode ser enchido +gui.oil_tank.desc.1=com latas de óleo +gui.oxygen.warning=Sistema de Oxigénio Inválido! +gui.oxygen_compressor.slot.desc.0=Entrada do tanque do compressor, coloca um tanque +gui.oxygen_compressor.slot.desc.1=de oxigénio aqui para enchê-lo com oxigénio respirável. +gui.oxygen_decompressor.slot.desc.0=Entrada do tanque do descompressor, coloca um tanque +gui.oxygen_decompressor.slot.desc.1=de oxigénio aqui para remover oxigénio respirável. +gui.oxygen_slot.desc.0=Entrada de oxigénio, coloca uma lata ou tanque de +gui.oxygen_slot.desc.1=oxigénio aqui, ou conecta uma fonte de oxigénio. +gui.oxygen_storage.desc.0=Armazenagem de Oxigénio +gui.oxygen_storage.desc.1=Oxigénio +gui.oxygen_use.desc=Uso de Oxigénio +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Alimento +gui.player.health=Saúde +gui.player.ouch=Ai!!!! +gui.receiver.cannot_attach=Não dá para instalar um Receptor aqui! +gui.requires_controller.desc=Requer Controlo de Lançamento +gui.rocket.countdown=Contagem regressiva +gui.rocket.height=Altura +gui.rocket.inv.name=Inventário / Combustível +gui.rocket.launch.name=Lançar +gui.rocket.launched=Lançado +gui.rocket.on_launchpad=Na Base +gui.rocket.speed=Velocidade +gui.rocket.turn.name=Mover para os lados +gui.rocket.updown.name=Mover para cima e para baixo +gui.rocket.warning.nofuel=Vou precisar de carregar algum combustível de foguetão primeiro! +gui.rocket.warning.nogyroscope=Forças misteriosas estão no jogo e os giroscópios estão girando descontroladamente! +gui.rocket.warning.noparachute=Estou sem paraquedas! Se eu premir Lançar de novo, não há como voltar atrás! +gui.rocket_type.0=Espaço de Armazenagem: 18 +gui.rocket_type.1=Espaço de Armazenagem: 36 +gui.rocket_type.2=Espaço de Armazenagem: 56 +gui.rocket_type.3=Pré-abastecido +gui.seconds=s +gui.sensor.advanced=Modo Avançado +gui.sensor.advancedoff=OFF +gui.sensor.advancedon=ON +gui.show_bubble.desc.0=Mostrar Bolha +gui.skeleton_boss.message=Chefe removido, não saias da sala enquanto lutas! Volta para regerar o chefe. +gui.space_race.chat.add_success=%s juntou-se à Corrida Espacial! +gui.space_race.chat.already_part=Você já é parte desta corrida espacial! +gui.space_race.chat.invite_received=Você pecebeu um Convite de Time de Corrida Espacial de %s. +gui.space_race.chat.not_found=Não se pôde encontrar jogador com o nome de: %s +gui.space_race.chat.remove_success=%s foi removido da Corrida Espacial. +gui.space_race.chat.to_join=Para se juntar a %s use o comando %s +gui.space_race.coming_soon=Em breve +gui.space_race.create.add_players.name=Adicionar Jogador(es) +gui.space_race.create.back.name=Voltar +gui.space_race.create.brush_radius.name=Raio do Pincel +gui.space_race.create.brush_size.name=Tamanho do Pincel +gui.space_race.create.change_color.name.0=Mudar +gui.space_race.create.change_color.name.1=Time +gui.space_race.create.change_color.name.2=Cor +gui.space_race.create.close.name=Fechar +gui.space_race.create.customize.name=Personalizar Bandeira +gui.space_race.create.eraser_radius.name=Raio do Apagador +gui.space_race.create.eraser_size.name=Tamanho do Apagador +gui.space_race.create.global_stats.name=Ver Estatísticas Globais +gui.space_race.create.invite_player.name=Convidar Jogador +gui.space_race.create.player_radius.name=Note: Jogador tem que estar próximo! (25 blocos) +gui.space_race.create.rem_players.name=Remover Jogador(es) +gui.space_race.create.remove.name=Remover +gui.space_race.create.remove_player.name=Remover Jogador +gui.space_race.create.rename.name=Renomear Time +gui.space_race.create.send_invite.name=Enviar Convite +gui.space_race.create.server_stats.name=Ver Estatísticas do Servidor +gui.space_race.create.title.name=Gerenciador de Corrida Espacial +gui.space_race.create.title.name.0=Gerenciador de +gui.space_race.create.title.name.1=Corrida Espacial +gui.space_race.join.member_count.name=%d membros +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Dono +gui.space_race.join.title.name=Juntar-se à Corrida Espacial +gui.space_race.unnamed=Time sem nome +gui.spacestation.added=Você foi adicionado à lista de jogadores aceitos da estação espacial de %s! +gui.spacestation.addsuccess=Adiciou-se %s com sucesso à lista da estação espacial! +gui.spacestation.allow_all_false=Tuas Estações Espaciais não estão mais abertas a todos os jogadores! +gui.spacestation.allow_all_true=Tuas Estações Espaciais agora estão abertas para todos os jogadores! (Usa /ssinvite -all para defazer.) +gui.spacestation.changesuccess=Mudou-se a posse da Estação Espacial de %s para %s. +gui.spacestation.playername= +gui.spacestation.removesuccess=Removeu-se %s com sucesso lista da estação espacial! +gui.spacestation.to_allow_entry=para permitir outro jogador entrar nesta estação espacial! +gui.spacestation.type_command=Digite +gui.status.active.name=Ativo +gui.status.air_lock_closed.name=Porta Pressurizada Fechada +gui.status.air_lock_open.name=Porta Pressurizada Aberta +gui.status.blockedfully.name=Sol Não Está Visível +gui.status.blockedpartial.name=Sol Parcialmente Visível +gui.status.check_pending.name=Verificação Pendente +gui.status.check_starting.name=Verificação Iniciando +gui.status.checking_seal.name=Verificando Selagem +gui.status.collecting.name=Coletando +gui.status.collectingenergy.name=Coletando Energia +gui.status.compressing.name=Prensando +gui.status.disabled.name=Desabilitado +gui.status.fulltank.name=Tanque Oxigénio Cheio +gui.status.generating.name=Gerando +gui.status.hull_heat.name=Pré-Aquecimento +gui.status.idle.name=Em Espera +gui.status.missingleaves.name=Folhas Insuficientes +gui.status.missingoxygen.name=Oxigénio Insuficiente +gui.status.missingpower.name=Energia Insuficiente +gui.status.missingtank.name=Sem Tanque Válido +gui.status.nofuel.name=Sem Combustível! +gui.status.noinvtarget.name=Não Há Inventário no Receptor! +gui.status.noitems.name=Sem Itens a Carregar! +gui.status.nooil.name=Sem Óleo +gui.status.not_available.name=N/D +gui.status.not_generating.name=Não-Gerando +gui.status.notargetload.name=Sem Receptor a Carregar! +gui.status.notargetunload.name=Sem Receptor a Descarregar! +gui.status.off.name=OFF +gui.status.on.name=ON +gui.status.raining.name=Chuva +gui.status.ready.name=Pronto +gui.status.refining.name=Refinando +gui.status.running.name=Funcionando +gui.status.sealed.name=Selado +gui.status.sealerblocked.name=Saída de Ar Bloqueada! +gui.status.sun_visible.name=Sol Visível +gui.status.tank_empty.name=Tanque de Oxigénio Vazio +gui.status.targetempty.name=Veículo Receptor Está Vazio! +gui.status.targetfull.name=Veículo Receptor Está Cheio! +gui.status.unknown.name=Desconhecido +gui.status.unsealed.name=Não-Selado +gui.tank.oxygen_remaining=Oxigénio restante +gui.telemetry_fail.message=Primeiro vou precisar de rastrear uma entidade com o Módulo de Frequência! (Ou tenta usá-lo na cabeça!) +gui.telemetry_fail_no_frequency_module.message=Acho que vou precisar do Módulo de Frequência em mãos para fazer uso disto! +gui.telemetry_fail_wearing_it.message=Vou precisar de tirar meu Módulo de Frequência se quiser ligar isso com esta Unidade de Telemetria! +gui.telemetry_succeed.message=Ligação de Telemetria criado. +gui.thermal_slot.desc.0=Entrada do acessório térmico, coloca +gui.thermal_slot.desc.1=o Controlador Térmico de Ambiente aqui +gui.thermal_slot.desc.2=(opcional). Nota: Gasta mais energia! +gui.title.air_lock.name=Controlo da Porta de %s +gui.tracking.message=Rastreio ativado. Agora tenho que clicar com o botão direito do rato numa Unidade de Telemetria para completar a ligação. +gui.warning=ATENÇÃO! +gui.warning.invalid_thermal=Proteção Térmica Inválida +gui.warning.noroom=Pouco espaço! +item.air_fan.name=Ventilador +item.air_vent.name=Respirador +item.basic_item.ambient_thermal_controller.name=Controlador Térmico de Ambiente +item.basic_item.canned_food.name=Lata de Comida +item.basic_item.compressed_aluminum.name=Alumínio Prensado +item.basic_item.compressed_bronze.name=Bronze Prensado +item.basic_item.compressed_copper.name=Cobre Prensado +item.basic_item.compressed_iron.name=Ferro Prensado +item.basic_item.compressed_steel.name=Aço Prensado +item.basic_item.compressed_tin.name=Estanho Prensado +item.basic_item.dehydrated_apple.name=Maçã Desidratada +item.basic_item.dehydrated_carrot.name=Cenoura Desidratada +item.basic_item.dehydrated_melon.name=Melancia Desidratada +item.basic_item.dehydrated_potato.name=Batata Desidratada +item.basic_item.frequency_module.name=Módulo de Frequência +item.basic_item.ingot_aluminum.name=Barra de Alumínio +item.basic_item.ingot_bronze.name=Barra de Bronze +item.basic_item.ingot_copper.name=Barra de Cobre +item.basic_item.ingot_steel.name=Barra de Aço +item.basic_item.ingot_tin.name=Barra de Estanho +item.basic_item.raw_silicon.name=Silício Bruto +item.basic_item.solar_module_0.name=Módulo Solar +item.basic_item.solar_module_1.name=Painel Solar Completo +item.basic_item.wafer_advanced.name=Wafer Avançado +item.basic_item.wafer_basic.name=Wafer Básico +item.basic_item.wafer_solar.name=Wafer Solar Azul +item.battery.name=Bateria +item.bucket_fuel.name=Balde de Combustível +item.bucket_oil.name=Balde de Petróleo +item.buggy.name=Buggy +item.buggymat.seat.name=Assento de Buggy +item.buggymat.storage.name=Bagageiro para Buggy +item.buggymat.wheel.name=Roda de Buggy +item.canister.copper.name=Lata de Cobre +item.canister.tin.name=Lata de Estanho +item.canvas.name=Tecido +item.cheese_block.name=Bloco de Queijo +item.cheese_curd.name=Grão de Queijo +item.compressed_meteoric_iron.name=Ferro Meteórico Prensado +item.empty_liquid_canister.name=Lata Vazia +item.engine.tier1booster.name=Motor de Foguetão Auxiliar Nível 1 +item.engine.tier1engine.name=Motor de Foguetão Nível 1 +item.flag.name=Bandeira +item.fuel.name=Combustível de Foguetão +item.fuel_canister.name=Lata de Combustível Cheia +item.fuel_canister_partial.name=Lata de Combustível Semi-Cheia +item.heavy_plating.name=Blindagem Pesada +item.hot_description.name=Quente +item.infinite_battery.name=Bateria Infinita +item.infinite_oxygen.name=Suprimento de Oxigénio Infinito +item.key.t1.name=Chave de Calabouço Nível 1 +item.meteor_chunk.name=Pedaço de Meteoro Jogável +item.meteor_chunk_hot.name=Pedaço de Meteoro Jogável +item.meteoric_iron_ingot.name=Barra de Ferro Meteórico +item.meteoric_iron_raw.name=Minério de Ferro Meteórico +item.nose_cone.name=Nariz de Foguetão +item.oil_canister.name=Lata de Óleo Cheia +item.oil_canister_partial.name=Lata de Óleo Semi-Cheia +item.oil_extractor.name=Extrator Portátil de Petróleo +item.oxygen_concentrator.name=Concentrador de Oxigénio +item.oxygen_gear.name=Equipamento de Oxigénio +item.oxygen_mask.name=Máscara de Oxigénio +item.oxygen_tank_heavy_empty.name=Tanque de Oxigénio Pesado Vazio +item.oxygen_tank_heavy_full.name=Tanque de Oxigénio Pesado +item.oxygen_tank_light_empty.name=Tanque de Oxigénio Leve Vazio +item.oxygen_tank_light_full.name=Tanque de Oxigénio Leve +item.oxygen_tank_med_empty.name=Tanque de Oxigénio Médio Vazio +item.oxygen_tank_med_full.name=Tanque de Oxigénio Médio +item.parachute_black.name=Paraquedas Preto +item.parachute_blue.name=Paraquedas Azul-Claro +item.parachute_brown.name=Paraquedas Marrom +item.parachute_darkblue.name=Paraquedas Azul +item.parachute_darkgray.name=Paraquedas Cinza +item.parachute_darkgreen.name=Paraquedas Verde +item.parachute_gray.name=Paraquedas Cinza-Claro +item.parachute_lime.name=Paraquedas Verde-Limão +item.parachute_magenta.name=Paraquedas Magenta +item.parachute_orange.name=Paraquedas Laranja +item.parachute_pink.name=Paraquedas Rosa +item.parachute_plain.name=Paraquedas +item.parachute_purple.name=Paraquedas Púrpura +item.parachute_red.name=Paraquedas Vermelho +item.parachute_teal.name=Paraquedas Ciano +item.parachute_yellow.name=Paraquedas Amarelo +item.rocket_fins.name=Aleta de Foguetão +item.rocket_t1.name=Foguetão Nível 1 +item.schematic.name=Esquemático para Mesa de Trabalho NASA +item.sensor_glasses.name=Óculos Sensores +item.sensor_lens.name=Lentes Sensoras +item.standard_wrench.name=Chave Inglesa Padrão +item.steel_axe.name=Machado para Trabalho Pesado +item.steel_boots.name=Botas para Trabalho Pesado +item.steel_chestplate.name=Peitoral para Trabalho Pesado +item.steel_helmet.name=Capacete para Trabalho Pesado +item.steel_hoe.name=Enxada para Trabalho Pesado +item.steel_leggings.name=Perneiras para Trabalho Pesado +item.steel_pickaxe.name=Picareta para Trabalho Pesado +item.steel_pole.name=Mastro de Bandeira +item.steel_shovel.name=Pá para Trabalho Pesado +item.steel_sword.name=Espada para Trabalho Pesado +item.tier1.desc=Nível 1 +item_desc.powerdraw.name=Energia requerida: %s /s +item_desc.shift.name=Prima %s para detalhes +item_group.galacticraft_blocks=Galacticraft Blocos +item_group.galacticraft_items=Galacticraft Itens +keybind.map.name=Mapa da Galáxia +keybind.sensortoggle.name=Alternar modos dos Óculos Sensores +keybind.spaceshipinv.name=Abrir Inventário da Nave +keybind.vehiclebackward.name=Mover veículo para trás +keybind.vehicledown.name=Mover veículo para baixo +keybind.vehicleforward.name=Mover veículo para frente +keybind.vehicleleft.name=Mover veículo para esquerda +keybind.vehicleright.name=Mover veículo para direita +keybind.vehicleup.name=Mover veículo para cima +moon.moon=Lua +newversion.failed.name=Verificação de atualização do Galacticraft falhou! A tentar novamente em 15 segundos +newversion.success.name=Versão on-line do Galacticraft encontrado: +planet.jupiter=Júpiter +planet.mercury=Mercúrio +planet.neptune=Neptuno +planet.overworld=Mundo Principal +planet.saturn=Saturno +planet.uranus=Urano +planet.venus=Vénus +satellite.spacestation.overworld=Estação Espacial do Mundo Principal +schematic.moonbuggy.name=Buggy +schematic.rocket_t1.name=Foguetão Nível 1 +schematic.rocket_t2.name=Foguetão Nível 2 +solarsystem.sol=Sol +star.sol=Sol +tile.air_lock_controller.name=Controle de Porta Pressurizada +tile.air_lock_frame.description=Air Lock Frames, when arranged in a portal-like formation, with a single block replaced with a controller, will function as a working air lock. ##NEEDS TRANSLATE## +tile.air_lock_frame.name=Quadro de Porta Pressurizada +tile.air_lock_seal.name=Porta Pressurizada +tile.aluminum_wire.alu_wire.description=Aluminum Wire is used to connect energy sources to energy consuming machines. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire.name=Cabo de Alumínio +tile.aluminum_wire.alu_wire_heavy.description=Heavy Aluminum Wire is used to connect energy sources to energy consuming machines. Transfers at a faster rate than it's predecessor. ##NEEDS TRANSLATE## +tile.aluminum_wire.alu_wire_heavy.name=Cabo de Alumínio Pesado +tile.arclamp.description=Arc Lamps are used to provide strong light to a large area, also causing most mobs to flee. ##NEEDS TRANSLATE## +tile.arclamp.name=Lâmpada a Arco Voltaico +tile.basic_block_core.block_aluminum_gc.name=Bloco de Alumínio +tile.basic_block_core.block_copper_gc.name=Bloco de Cobre +tile.basic_block_core.block_meteoric_iron_gc.name=Ferro Meteórico Maciço +tile.basic_block_core.block_tin_gc.name=Bloco de Estanho +tile.basic_block_core.deco_block_0.name=Bloco Decorativo de Estanho +tile.basic_block_core.deco_block_1.name=Bloco Decorativo de Estanho +tile.basic_block_core.ore_aluminum_gc.name=Minério Alumínio +tile.basic_block_core.ore_copper_gc.name=Minério de Cobre +tile.basic_block_core.ore_silicon.name=Minério de Silício +tile.basic_block_core.ore_tin_gc.name=Minério de Estanho +tile.basic_block_moon.bricks.name=Tijolos Lunares +tile.basic_block_moon.cheesestone.name=Minério de Queijo +tile.basic_block_moon.coppermoon.name=Minério de Cobre +tile.basic_block_moon.moondirt.name=Terra Lunar +tile.basic_block_moon.moongrass.name=Turfa Lunar +tile.basic_block_moon.moonstone.name=Rocha Lunar +tile.basic_block_moon.tinmoon.name=Minério de Estanho +tile.buggy_pad.description=Fueling Pads will allow a buggy on the pad to be refueled by an attached Fuel Loaders if set up in a 3x3 square. Cannot be used to launch rockets! ##NEEDS TRANSLATE## +tile.cargo.loader.name=Carregador de Carga +tile.cargo.unloader.name=Descarregador de Carga +tile.cargo_loader.description=Cargo Loaders will pass blocks and items onto Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cargo_unloader.description=Cargo Unloaders will extract blocks and items from Rockets and other vehicles with cargo space. Must be attached to Landing/Fueling pad. ##NEEDS TRANSLATE## +tile.cheese.description=Cheese Blocks are created from the cheeses of the Moon, place-able and edible. ##NEEDS TRANSLATE## +tile.cheese.name=Bloco de Queijo +tile.circuit_fabricator.description=Circuit Fabricator will process basic materials into silicon wafers, used for advanced machines. ##NEEDS TRANSLATE## +tile.coal_generator.description=Coal Generator will simply burn coal for energy collection. The simplest but least efficient energy collection method. ##NEEDS TRANSLATE## +tile.collector.description=Oxygen Collector will store oxygen collected from leaves in the surrounding area. ##NEEDS TRANSLATE## +tile.collector.name=Coletor de Oxigénio +tile.compressor.description=Compressor will process ingots into their compressed equivalents. ##NEEDS TRANSLATE## +tile.compressor_electric.description=Electric Compressor will process ingots into their compressed equivalents. Compresses two at a time, making it more effective than it's predecessor. ##NEEDS TRANSLATE## +tile.crude_oil.name=Petróleo +tile.crude_oil_moving.name=Óleo Cru +tile.crude_oil_still.name=Óleo Cru +tile.dishbase.description=The Communications Dish can track the position of space stations and receive communications from your remote space bases. ##NEEDS TRANSLATE## +tile.dishbase.name=Antena de Comunicação +tile.distributor.description=Oxygen Distributor will emit an oxygen bubble outwards from the center block, using internal tank. This allows safe breathing inside the bubble. ##NEEDS TRANSLATE## +tile.distributor.name=Distribuidor de Bolha de Oxigénio +tile.dummyblock.cryogenic_chamber.name=Câmara Criogénica +tile.dummyblock.launch_pad.name=Base de Lançamento de Foguetões +tile.dummyblock.nasa_workbench.name=Bancada de Trabalho NASA +tile.dummyblock.solar.name=Painel Solar +tile.dummyblock.space_station_base.name=Base da Estação Espacial +tile.electric_furnace_tier1.description=Electric Furnace is used as a faster alternative to traditional coal furnaces. ##NEEDS TRANSLATE## +tile.electric_furnace_tier2.description=Arc Furnace is used as a faster alternative to both traditional coal and electric furnaces. ##NEEDS TRANSLATE## +tile.enclosed.aluminum_wire.name=Cabo de Alumínio Selável +tile.enclosed.heavy_aluminum_wire.name=Cabo de Alumínio Pesado Selável +tile.enclosed.copper_cable.name=Cabo de Cobre Selável +tile.enclosed.description=Sealable blocks should be used where air cannot pass, such as space base walls. ##NEEDS TRANSLATE## +tile.enclosed.glass_fibre_cable.name=Cabo de Fibra Óptica Selável +tile.enclosed.gold_cable.name=Cabo de Ouro Selável +tile.enclosed.hv_cable.name=Cabo AV Selável +tile.enclosed.lv_cable.name=Cabo de Corrente Ultra-Baixa Selável +tile.enclosed.me_cable.name=Cabo ME Selável +tile.enclosed.fluid_pipe.name=Cano de Oxigénio Selável +tile.enclosed.pipe_fluids_cobblestone.name=Cano Impermeável para Empedrados Selável +tile.enclosed.pipe_fluids_stone.name=Cano Impermeável para Pedra Selável +tile.enclosed.pipe_items_cobblestone.name=Cano de Transporte de Empedrado Selável +tile.enclosed.pipe_items_stone.name=Cano de Transporte de Pedra Selável +tile.enclosed.pipe_power_gold.name=Cano Condutor de Ouro Selável +tile.enclosed.pipe_power_stone.name=Cano Condutor de Pedra Selável +tile.energy_storage_module_tier1.description=Energy Storage Module is used to store large amounts of energy for later use. ##NEEDS TRANSLATE## +tile.energy_storage_module_tier2.description=Energy Storage Cluster is used to store large amounts of energy for later use. Stores and outputs more energy than it's predecessor. ##NEEDS TRANSLATE## +tile.fallen_meteor.description=Fallen Meteors can be found in many planets/moons which have little or no atmosphere. Will drop Meteoric Iron when broken. ##NEEDS TRANSLATE## +tile.fallen_meteor.name=Meteorito +tile.fuel.name=Combustível +tile.fuel_block.name=Combustível +tile.fuel_loader.description=After being connected to a launch pad, a Fuel Loader will allow fuel to passed into the connected Rocket or other vehicle. ##NEEDS TRANSLATE## +tile.fuel_loader.name=Carregador de Combustível +tile.glowstone_torch.description=Glowstone Torches are best used to light areas when there is no oxygen for wood torches to burn. ##NEEDS TRANSLATE## +tile.glowstone_torch.name=Tocha de Pedra Luminosa +tile.landing_pad.buggy_fueler.name=Base de Carregador de Combustível +tile.landing_pad.cargo_pad.name=Base de Foguetão de Carga +tile.landing_pad.description=Landing Pads will allow placement of Rockets if set up in a 3x3 square. Fuel Loaders, Cargo Loaders, and Launch Controllers can be attached. ##NEEDS TRANSLATE## +tile.landing_pad.landing_pad.name=Base de Lançamento de Foguetões +tile.landing_pad_full.name=Base de Abastecimento de Buggy +tile.machine.0.name=Gerador a Carvão +tile.machine.1.name=Módulo de Armazenamento de Energia +tile.machine.2.name=Fornalha Elétrica +tile.machine.3.name=Compressor +tile.machine.7.name=Fornalha a Arco Voltaico +tile.machine.8.name=Grupo de Armazenamento de Energia +tile.machine2.4.name=Compressor Elétrico +tile.machine2.5.name=Fabricador de Circuitos +tile.machine2.6.name=Módulo de Armazenamento de Oxigénio +tile.moon_stairs_brick.name=Escadas de Tijolos de Calabouço Lunar +tile.moon_stairs_stone.name=Escadas de Rocha Lunar +tile.ore_copper.name=Minério de Cobre +tile.ore_tin.name=Minério de Estanho +tile.oxygen_compressor.0.name=Compressor de Oxigénio +tile.oxygen_compressor.1.name=Descompressor de Oxigénio +tile.oxygen_compressor.description=Oxygen Compressor will load oxygen from internal storage into an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_decompressor.description=Oxygen Decompressor will unload oxygen into internal storage from an oxygen tank. ##NEEDS TRANSLATE## +tile.oxygen_detector.description=Oxygen Detector will emit a redstone signal when surrounded by oxygen. ##NEEDS TRANSLATE## +tile.oxygen_detector.name=Detector de Oxigénio +tile.oxygen_pipe.description=Oxygen Pipe will transfer oxygen from one machine's internal gas storage to another. ##NEEDS TRANSLATE## +tile.oxygen_pipe.name=Cano de Oxigénio +tile.oxygen_storage_module.description=Oxygen Storage Module is used to store large amounts of oxygen for later use. ##NEEDS TRANSLATE## +tile.parachest.description=Parachests will fall from the sky after landing on certain planets/moons, such as Earth. Contains rocket, fuel, and cargo from previous launch. ##NEEDS TRANSLATE## +tile.parachest.name=Para-baú +tile.refinery.description=Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles. ##NEEDS TRANSLATE## +tile.refinery.name=Refinaria +tile.rocket_workbench.description=The NASA Workbench is used to create many advanced parts and vehicles. New schematics can be added as they are found. ##NEEDS TRANSLATE## +tile.rocket_workbench.name=Bancada de Trabalho NASA +tile.sapling2.birch.name=Rebento de Eucalipto +tile.sapling2.jungle.name=Rebento de Árvore da Selva +tile.sapling2.oak.name=Rebento de Carvalho +tile.sapling2.spruce.name=Rebento de Pinheiro +tile.sealer.description=Oxygen Sealer will check for an enclosed space. If one is found, the area will fill with breathable air. ##NEEDS TRANSLATE## +tile.sealer.name=Selador de Oxigénio +tile.slab_gc_half.moon_bricks_slab.name=Laje de Tijolos de Calabouço Lunar +tile.slab_gc_half.moon_slab.name=Laje de Rocha Lunar +tile.slab_gc_half.tin_slab_1.name=Laje Decorativa de Estanho +tile.slab_gc_half.tin_slab_2.name=Laje Decorativa de Estanho +tile.solar.advanced_solar.name=Painel Solar Avançado +tile.solar.basic_solar.name=Painel Solar Básico +tile.solar_adv.description=Advanced Solar Panels will collect energy from the sun, storing it for further use. Automatically adjusts panel angle for optimal energy collection. ##NEEDS TRANSLATE## +tile.solar_basic.description=Basic Solar Panels will collect energy from the sun, storing it for further use. Collects most energy at mid-day (non-adjustable). ##NEEDS TRANSLATE## +tile.space_station_base.name=Bloco de Chegada à Estação Espacial +tile.spin_thruster.description=Spin Thrusters are used to make space stations rotate. ##NEEDS TRANSLATE## +tile.spin_thruster.name=Propulsor Pivotante +tile.telemetry.description=This gathers useful data from linked rockets, players and mobs. Best placed near to a Display Screen. Use a Frequency Module to establish data links. ##NEEDS TRANSLATE## +tile.telemetry.name=Unidade de Telemetria +tile.tin_stairs_1.name=Escadas Decorativas de Estanho +tile.tin_stairs_2.name=Escadas Decorativas de Estanho +tile.treasure_chest.description=Tier 1 Treasure Chests will generate in Moon Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_chest.name=Baú de Tesouro +tile.unlit_torch.name=Tocha +tile.unlit_torch_stone.name=Tocha de Pedra +tile.unlit_torch_lit.name=Tocha +tile.unlit_torch_stone_lit.name=Tocha de Pedra +tile.view_screen.description=Display screens add that final touch to your space base. Right-click changes the information shown. ##NEEDS TRANSLATE## +tile.view_screen.name=Ecrã de Exibição +tile.wall_gc.moon.name=Parede de Rocha Lunar +tile.wall_gc.moon_bricks.name=Parede de Tijolos de Calabouço Lunar +tile.wall_gc.tin.name=Parede Decorativa de Estanho diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ru_ru.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ru_ru.lang new file mode 100644 index 00000000..a83af135 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/ru_ru.lang @@ -0,0 +1,825 @@ +checklist.create_grapple.key=Создать крюк +checklist.equip_oxygen_suit.key=Надеть кислородное оборудование +checklist.equip_parachute.key=Надеть парашют +command.gcastrominer.count=Для игрока %s доступно %s астрошахтёров +commands.emergencykit=%s получил самоспасатель! +commands.dimensionteleport=%s был направлен в атмосферу%s +commands.dimensiontp.too_many=Слишком много аргументов команды! Использование: %s +commands.gcenergyunits.invalid_units=Неправильные единицы в команде /GCEnergyUnits. Использование: %s +commands.gcenergyunits.no_units=Необходимо указать единицы! Использование: %s +commands.gchouston.confirm.1=Это Центр управления полётами, повторите пожалуйста? +commands.gchouston.confirm.2=(Чтобы прервать миссию, наберите /gchouston ещё раз для подтверждения.) +commands.gchouston.fail=Команда /gchouston доступна только в космосе (или в Творческом режиме). +commands.gchouston.help.1=Эм, Хьюстон, у нас проблема.... +commands.gchouston.help.2=(Введите /gchouston, чтобы прервать миссию и вернуться домой.) +commands.gchouston.noop=Использование команды /gchouston на других игроках доступно только операторам. +commands.gchouston.success=Хорошо, оставайтесь на связи, %s, телепортируем вас в точку перевозрождения на Землю. +commands.joinrace.no_team=Необходимо указать команду! Использование: %s +commands.ssinvite.not_found=Не удалось найти космическую станцию на ваше имя, сначала вы должны слетать туда! +commands.ssinvite.wrong_usage=Недостаточно аргументов команды! Использование: %s +commands.ssnewowner.wrong_usage=ID космической станции не был распознан. Она вообще существует? Использование: %s +commands.ssuninvite.no_player=Не удалось найти игрока с именем %s в списке вашей космической станции! +container.cargoloader.name=Грузовой загрузчик +container.cargounloader.name=Грузовой разгрузчик +container.fuelloader.name=Загрузчик топлива +container.lander.name=Посадочный модуль +container.magneticcrafting.name=Создание +container.oxygencollector.name=Кислородный сборщик +container.oxygencompressor.name=Кислородный компрессор +container.oxygendecompressor.name=Кислородный декомпрессор +container.oxygendistributor.name=Распределитель кислорода +container.oxygensealer.name=Герметизатор кислорода +container.parachest.name=Сундук с парашютом +container.refinery.name=Очистительный завод +container.solaradvanced.name=Улучшенная солнечная панель +container.solarbasic.name=Основная солнечная панель +container.spaceship.name=Ракета 1-го уровня +container.treasurechest.name=Сундук с сокровищами +death.attack.meteor_chunk=%1$s был поражен метеорным мусором! +death.attack.oxygen_suffocation=%1$s задохнулся в космосе! +death.attack.spaceship_crash=Ракета %1$s разбилась о землю. Ой. +death.attack.sulphuric_acid=%1$s растворился в серной кислоте! +death.attack.thermal=%1$s забыл тепловую защиту +dimension.moon.name=Луна +dimension.overworld.name=Земля +dimension.sun.name=Солнце +entity.alien_villager.name=Инопланетный житель +entity.buggy.name=Багги +entity.celestial_screen.name=Астрономический экран +entity.evolved_creeper.name=Эволюционировавший крипер +entity.evolved_skeleton.name=Эволюционировавший скелет +entity.evolved_skeleton_boss.name=Эволюционировавший скелет-босс +entity.evolved_spider.name=Эволюционировавший паук +entity.evolved_zombie.name=Эволюционировавший зомби +entity.evolved_enderman.name=Эволюционировавший Странник Края +entity.evolved_witch.name=Эволюционировавшая ведьма +entity.flag.name=Флаг +entity.gcflag.name=Флаг +entity.gravity_arrow.name=Стрелка +entity.lander.name=Посадочный модуль +entity.meteor.name=Метеорит +entity.meteor_chunk.name=Кусок метеорита +entity.oxygen_bubble.name=Кислородный пузырь +entity.para_chest.name=Сундук с парашютом +entity.rocket_t1.name=Ракета 1-го уровня +galaxy.milky_way=Млечный Путь +gc.configgui.allow_liquids_grating=Разрешить жидкостям течь через решетки +gc.configgui.alternate_canister_recipe=Альтернативный рецепт канистры +gc.configgui.asteroids_flags=Флаги режима приключений на астероидах +gc.configgui.asteroids_start=Режим приключения (Старт на астероидах) +gc.configgui.biome_id_base=Базовый ID биома +gc.configgui.detectable_i_ds=Обнаруживаемые ID +gc.configgui.disable_biome_type_registrations=Отключить регистрацию типов биомов +gc.configgui.disable_cheese_moon=Отключить генерацию лунного сыра +gc.configgui.disable_copper_moon=Отключить генерацию лунной меди +gc.configgui.disable_lander=Отключить посадочный модуль +gc.configgui.disable_moon_village_gen=Отключить генерацию лунных деревень +gc.configgui.disable_ore_dict_space_metals=Использовать только свои космические металлы в рецептах +gc.configgui.disable_sapphire_moon=Отключить генерацию лунных сапфиров +gc.configgui.disable_space_station_creation=Отключить создание космической станции +gc.configgui.disable_spaceship_grief=Отключить взрыв ракеты +gc.configgui.disable_spaceship_particles=Отключить частицы ракеты +gc.configgui.disable_tin_moon=Отключить генерацию лунного олова +gc.configgui.disable_update_check=Отключить проверку обновлений +gc.configgui.disable_vehicle_camera_changes=Vivecraft: Отключить масштаб и вид от третьего лица +gc.configgui.dungeon_boss_health_mod=Модификатор здоровья босса +gc.configgui.enable_aluminum_ore_gen=Генерация алюминия в обычном мире +gc.configgui.enable_copper_ore_gen=Генерация меди в обычном мире +gc.configgui.enable_debug=Показывать отладочные сообщения в консоли +gc.configgui.enable_other_mods_features=Включить внешнюю генерацию других модов +gc.configgui.enable_retrogen_oil=Генерировать нефть в существующем мире +gc.configgui.enable_sealer_edge_checks=Полная проверка герметичности герметизатором +gc.configgui.enable_silicon_ore_gen=Генерация кремния в обычном мире +gc.configgui.enable_space_race_manager_popup=Включить всплывающее окно менеджера гонки +gc.configgui.enable_thaum_craft_nodes=Включить генерацию узлов Thaumcraft на планетах +gc.configgui.enable_tin_ore_gen=Генерация олова в обычном мире +gc.configgui.external_oil_gen=Внешняя генерация нефти +gc.configgui.force_overworld_respawn=Принудительное появление в обычном мире +gc.configgui.hard_mode=Повышенная сложность +gc.configgui.id_achiev_base=ID основного достижения +gc.configgui.id_dimension_moon=ID измерения: Луна +gc.configgui.id_dimension_overworld=ID измерения: Земля +gc.configgui.id_dimension_overworld_orbit=ID измерения: Космическая станция +gc.configgui.id_dimension_overworld_orbit_static=ID измерения: Статическая космическая станция +gc.configgui.id_schematic_add_schematic=ID схемы: "Добавить схему" +gc.configgui.id_schematic_moon_buggy=ID схемы: Лунный багги +gc.configgui.id_schematic_rocket_t1=ID схемы: Ракета 1-го уровня +gc.configgui.key_override_fuel_level=Назначить клавишу: Инвентарь ракеты +gc.configgui.key_override_toggle_adv_goggles=Назначить клавишу: Улучшенные очки +gc.configgui.map_scroll_invert=Инвертировать прокрутку карты +gc.configgui.map_scroll_sensitivity=Чувствительность прокрутки карты +gc.configgui.meteor_block_damage=Включить повреждение блоков от метеоров +gc.configgui.meteor_spawn_mod=Множитель генерации метеоров +gc.configgui.more_stars=Показывать больше звёзд +gc.configgui.oil_gen_factor=Множитель генерации нефти +gc.configgui.ore_dict_silicon=Обозначение кремния в словаре руд +gc.configgui.other_mod_ore_gen_i_ds=Генерация руд из других модов на планетах +gc.configgui.override_capes=Заменять плащи +gc.configgui.override_map=Назначить клавишу: Галактическая карта +gc.configgui.oxygen_indicator_bottom=Сместить индикатор кислорода вниз +gc.configgui.oxygen_indicator_left=Сместить индикатор кислорода влево +gc.configgui.planet_worldborders=Максимальные x,z для посадки на Луну +gc.configgui.quick_mode=Быстрая игра (легче) +gc.configgui.rocket_disable_overworld_return=Отключить возврат ракеты в обычный мир +gc.configgui.rocket_disabled_dimensions=Измерения, где ракеты отключены +gc.configgui.rocket_fuel_factor=Множитель ракетного топлива +gc.configgui.sealable_i_ds=Герметичные блоки +gc.configgui.space_station_energy_scalar=Множитель энергии космической станции +gc.configgui.space_stations_require_permission=Разрешения для космических станций +gc.configgui.static_loaded_dimensions=Статически загруженные измерения +gc.configgui.static_loaded_new_ss=Загружать статически новые космические станции? +gc.configgui.suffocation_cooldown=Задержка урона от удушья +gc.configgui.suffocation_damage=Урон от удушья +gc.configgui.title=Настройки Galacticraft Core +gc.configgui.use_old_oil_fluid_i_d=Использовать старый ID (oilgc) для нефти +gc.configgui.use_old_fuel_fluid_i_d=Использовать старый ID (fuelgc) для топлива +gc.configgui.whitelist_co_f_h_core_gen=Добавить генерацию CoFHCore в белый список +gui.battery_slot.desc.0=Слот для аккумулятора, поставьте аккумулятор сюда +gui.battery_slot.desc.1=или используйте подключенный источник энергии +gui.bed_fail.message=Ой вэй. Что произойдёт, если кислород иссякнет, пока вы спите? Вам понадобится Криогенная камера для сна в космосе. +gui.buggy.accel.name=Ускориться +gui.buggy.decel.name=Замедлиться +gui.buggy.inv.name=Инвентарь / Топливо +gui.buggy.storage_space=Размер хранилища +gui.buggy.turn.name=Поверните влево, вправо. +gui.button.back.name=Назад +gui.button.disable.name=Выключить +gui.button.disableseal.name=Отключить герметизатор +gui.button.enable.name=Включить +gui.button.enableseal.name=Запустить герметизатор +gui.button.hide_dest.name=Спрятать +gui.button.loadfuel.name=Загрузить топливо +gui.button.loaditems.name=Загрузить предметы +gui.button.next.name=Вперёд +gui.button.paintapply.name=Применить краску +gui.button.paintmix.name=Выбрать цвет +gui.button.paintreset.name=Сбросить цвет +gui.button.refine.name=Очистить +gui.button.stoploading.name=Остановить загрузку +gui.button.stoprefine.name=Остановить очистку +gui.button.stopunloading.name=Остановить разгрузку +gui.button.unhide_dest.name=Показать +gui.button.unloaditems.name=Разгрузить предметы +gui.button.unlockschematic.name=Разблокировать схему +gui.checkbox.horizontal.name=Горизонтальный режим +gui.checkbox.invert.name=Инвертированный выбор +gui.checkbox.player_name.name=Имя игрока: +gui.checkbox.player_within.name=Игрок в пределах +gui.checkbox.redstone_signal.name=Открывается по сигналу красного камня +gui.chest.warning.wrongkey=Вам нужен ключ от подземелья %s уровня, чтобы открыть это! +gui.choose_planet.desc.moon=Обитаема#Кислород отсутствует#Гравитация: 18% +gui.choose_planet.desc.overworld=Полна жизни#Обитаема#Гравитация: 100% +gui.chooseplanet.alreadycreated1.name=Космическая станция +gui.chooseplanet.alreadycreated2.name=уже создана! +gui.chooseplanet.cannotcreate1.name=Невозможно создать космическую +gui.chooseplanet.cannotcreate2.name=станцию здесь! +gui.crafting_memory.desc.0=Данный магнитный верстак может создать больше данных предметов! +gui.crafting_memory.desc.1=Чтобы запомнить рецепт, создайте один предмет. +gui.creative_only.desc=Только для Творческого режима +gui.display.nolink=Нет связи +gui.docking_rocket.current_vel.name=Текущая скорость +gui.docking_rocket.distance_from.name=Расстояние до цели +gui.docking_rocket.target_vel.name=Целевая скорость +gui.docking_rocket.warning.name.0=Нажмите %s, для замедления +gui.docking_rocket.warning.name.1=Нажмите %s, для ускорения +gui.dropbox.player_distance.name.0=1 метр +gui.dropbox.player_distance.name.1=2 метра +gui.dropbox.player_distance.name.2=5 метров +gui.dropbox.player_distance.name.3=10 метров +gui.electric_compressor.desc.0=Прогресс +gui.energy_storage.desc.0=Хранилище энергии +gui.energy_storage.desc.1=Энергия +gui.flag.already_placed=Флаг здесь уже стоит! +gui.frequency_module.desc.0=Может принимать слабые звуковые +gui.frequency_module.desc.1=волны и отдалённые сигналы +gui.frequencymodule.warning0=Мне нужен +gui.frequencymodule.warning1=если я хочу здесь нормально слышать. +gui.fuel_output.desc.0=Положите пустые жидкостные канистры в +gui.fuel_output.desc.1=этот слот, чтобы заполнить их из +gui.fuel_output.desc.2=топливного резервуара +gui.fuel_tank.desc.0=Топливный резервуар. Требуется +gui.fuel_tank.desc.1=загрузчик топлива для заполнения +gui.fuel_tank.desc.2=Топливный резервуар можно заполнить +gui.fuel_tank.desc.3=топливными канистрами +gui.fuel_tank.desc.4=Топливный резервуар +gui.infinite_item.desc=Бесконечный +gui.lander.velocity=Скорость вхождения +gui.lander.velocityu=м/cек +gui.lander.warning2=Зажмите " +gui.lander.warning3=", чтобы замедлить падение! +gui.max_output.desc=Макс. выход +gui.message.addnewsch.name=Добавить новую схему +gui.message.apply.name=Применить +gui.message.assign_name.name=Дать имя +gui.message.atmosphere.name=Атмосфера +gui.message.back.name=Назад +gui.message.breed.name=Размножать +gui.message.bubble_visible.name=Видимость пузырей +gui.message.can_create_space_station.name=Здесь можно построить станцию! +gui.message.cancel.name=Отмена +gui.message.cannot_create_space_station.name=Здесь нельзя построить космическую станцию. +gui.message.catalog.name=Каталог +gui.message.click_again.0.name=Нажмите ещё раз для увеличения (видно Луны и Спутники) +gui.message.click_again.1.name=Нажмите ещё раз для увеличения (видно Луны) +gui.message.click_again.2.name=Нажмите ещё раз для увеличения (видно Спутники) +gui.message.click_again.3.name=Нажмите ещё раз для увеличения +gui.message.clicklink=Нажмите, чтобы попасть на Galacticraft Wiki +gui.message.create_ss.name=Создать +gui.message.daynightcycle.name=Цикл дня и ночи +gui.message.energy=Энергия +gui.message.environment.name=Ускорение окружающей среды +gui.message.exit.name=Выход +gui.message.fuel.name=Топливо +gui.message.full.name=осталось +gui.message.generating.name=Создание +gui.message.grow.name=Расти +gui.message.heal.name=Лечить +gui.message.help1=Для помощи по Galacticraft, напечатайте +gui.message.help1a=Для того, чтобы увидеть это уведомлениe eщё раз, напечатайте +gui.message.help2=Для помощи по космической программе, напечатайте +gui.message.help3=Для помощи по добычи нефти, напечатайте +gui.message.in.name=Ввод +gui.message.launch.name=Запуск +gui.message.max_energy=Макс. энергия +gui.message.meansurfacetemp.name=Средняя температура на поверхности +gui.message.moon.atmosphere.0.name=Нет +gui.message.moon.daynightcycle.0.name=29.5 Земных дней +gui.message.moon.meansurfacetemp.0.name=(Светлая сторона) 253°C +gui.message.moon.meansurfacetemp.1.name=(Тёмная сторона) -153°C +gui.message.moon.surfacecomposition.0.name=Базальтовый камень и +gui.message.moon.surfacecomposition.1.name=следы сыра +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% Земного) +gui.message.of.name=из +gui.message.oil.name=Нефть +gui.message.out.name=Вывод +gui.message.overworld.atmosphere.0.name=Азот и кислород +gui.message.overworld.atmosphere.1.name=Поддерживает жизнь +gui.message.overworld.daynightcycle.0.name=1 Земной день +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Камень, земля, +gui.message.overworld.surfacecomposition.1.name=гравий +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% Земного) +gui.message.prelaunch=Контрольный список +gui.message.rename.name=Переименовать +gui.message.select_ss.name=Выбрать космическую станцию +gui.message.ss_owner.name=Владелец: +gui.message.status.name=Статус +gui.message.strengthen.name=Укреплять +gui.message.surfacecomposition.name=Состав поверхности +gui.message.surfacegravity.name=Гравитация на поверхности +gui.message.thermal_status.name=Тепловой контроль +gui.message.tier.name=Уровень %d +gui.message.unnamed.name=Без имени +gui.missing_core.name.0=MicdoodleCore не найден в папке модификаций +gui.missing_core.name.1=Galacticraft не смог загрузиться +gui.missing_core.name.2=Закройте Minecraft и установите MicdoodleCore +gui.missing_core.name.3=Нажмите здесь, чтобы открыть страницу загрузки +gui.new_schematic.slot.desc.0=Слот для новой схемы. Вы +gui.new_schematic.slot.desc.1=можете найти новые схемы +gui.new_schematic.slot.desc.2=в подземельях +gui.new_schematic.slot.desc.3=на планетах и лунах +gui.oil_tank.desc.0=Нефтяной резервуар, может быть заполнен +gui.oil_tank.desc.1=нефтяными канистрами +gui.oxygen.warning=Не настроено кислородное оборудование! +gui.oxygen_compressor.slot.desc.0=Слот компрессора для резервуара, положите резервуар +gui.oxygen_compressor.slot.desc.1=сюда, чтобы заполнить его кислородом. +gui.oxygen_decompressor.slot.desc.0=Слот декомпрессора для резервуара, положите резервуар +gui.oxygen_decompressor.slot.desc.1=с кислородом сюда, чтобы опустошить его. +gui.oxygen_slot.desc.0=Слот для кислорода, положите канистру с кислородом или резервуар +gui.oxygen_slot.desc.1=сюда или используйте присоединённый источник кислорода +gui.oxygen_storage.desc.0=Хранилище кислорода +gui.oxygen_storage.desc.1=Кислород +gui.oxygen_use.desc=Потребление кислорода +gui.per_second=/сек +gui.player.bpm=уд/мин +gui.player.food=Еда +gui.player.health=Здоровье +gui.player.ouch=ой!!!! +gui.receiver.cannot_attach=Нельзя подключить Приёмник сюда! +gui.requires_controller.desc=Требуется контроллер запуска +gui.rocket.countdown=Обратный отсчёт +gui.rocket.height=Высота +gui.rocket.inv.name=Инвентарь / Топливо +gui.rocket.launch.name=Запуск +gui.rocket.launched=Запущена +gui.rocket.on_launchpad=На взлётной площадке +gui.rocket.speed=Скорость +gui.rocket.turn.name=Повернуть влево-вправо +gui.rocket.updown.name=Повернуть вверх-вниз +gui.rocket.warning.fuelinsufficient=Недостаточно топлива для безопасного запуска под автоматическим управлением! +gui.rocket.warning.launchcontroller=Предполетная отмена запуска. Проверьте контроллер запуска! +gui.rocket.warning.nofuel=Сначала вам нужно залить немного топлива в ракету! +gui.rocket.warning.nogyroscope=В игре присутствуют таинственные силы и гироскопы дико вращаются! +gui.rocket.warning.noparachute=У вас нет парашюта! Если вы нажмёте "Запуск" снова, пути назад не будет! +gui.rocket_type.0=Размер хранилища: 18 +gui.rocket_type.1=Размер хранилища: 36 +gui.rocket_type.2=Размер хранилища: 54 +gui.rocket_type.3=Заправленная +gui.seconds=сек +gui.sensor.advanced=Улучшенный режим +gui.sensor.advancedoff=ВЫКЛ. +gui.sensor.advancedon=ВКЛ. +gui.show_bubble.desc.0=Показать пузырь +gui.skeleton_boss.message=Босс пропал, не покидайте комнату с боссом, когда сражаетесь с ним! Зайдите в комнату заново, чтобы босс снова появился. +gui.space_race.chat.add_success=%s присоединился к космической гонке! +gui.space_race.chat.already_part=Вы уже участвуете в этой космической гонке! +gui.space_race.chat.invite_received=Получено приглашение в команду космической гонки от %s. +gui.space_race.chat.not_found=Не удалось найти игрока с именем %s +gui.space_race.chat.remove_success=%s больше не участвует в космической гонке. +gui.space_race.chat.to_join=Чтобы присоединиться к %s, используйте команду %s +gui.space_race.coming_soon=Скоро +gui.space_race.create.add_players.name=Добавить игрока(ов) +gui.space_race.create.back.name=Назад +gui.space_race.create.brush_radius.name=Радиус кисти +gui.space_race.create.brush_size.name=Размер кисти +gui.space_race.create.change_color.name.0=Сменить +gui.space_race.create.change_color.name.1=цвет +gui.space_race.create.change_color.name.2=команды +gui.space_race.create.close.name=Закрыть +gui.space_race.create.customize.name=Настроить флаг +gui.space_race.create.eraser_radius.name=Радиус ластика +gui.space_race.create.eraser_size.name=Размер ластика +gui.space_race.create.global_stats.name=Посмотреть глобальную статистику +gui.space_race.create.invite_player.name=Пригласить игрока +gui.space_race.create.player_radius.name=Примечание: игроки должны быть в радиусе 25 блоков! +gui.space_race.create.rem_players.name=Убрать игрока(ов) +gui.space_race.create.remove.name=Убрать +gui.space_race.create.remove_player.name=Убрать игрока +gui.space_race.create.rename.name=Переименовать команду +gui.space_race.create.send_invite.name=Отправить приглашение +gui.space_race.create.server_stats.name=Посмотреть статистику сервера +gui.space_race.create.title.name.0=Настройка +gui.space_race.create.title.name.1=космической гонки +gui.space_race.create.title.name=Настройка космической гонки +gui.space_race.join.member_count.name=Участников: %d +gui.space_race.join.name=Присоединиться +gui.space_race.join.owner.name=Владелец +gui.space_race.join.title.name=Присоединиться к космической гонке +gui.space_race.unnamed=Безымянная команда +gui.spacestation.added=Вы получили доступ на космическую станцию игрока %s! +gui.spacestation.addsuccess=%s успешно добавлен в список космической станции! +gui.spacestation.allow_all_false=Ваши космические станции больше не открыты для всех игроков. +gui.spacestation.allow_all_true=Ваши космические станции теперь открыты для всех игроков! (Используйте /ssinvite -all, чтобы отменить это.) +gui.spacestation.changesuccess=Владелец космической станции был изменён с %s на %s. +gui.spacestation.playername=<имя игрока> +gui.spacestation.removesuccess=%s успешно убран из списка космической станции! +gui.spacestation.to_allow_entry=чтобы разрешить другому игроку заходить на эту космическую станцию! +gui.spacestation.type_command=Введите +gui.status.active.name=Активно +gui.status.air_lock_closed.name=Воздушный шлюз закрыт +gui.status.air_lock_open.name=Воздушный шлюз открыт +gui.status.blockedfully.name=Солнце невидимо +gui.status.blockedpartial.name=Солнце частично видимо +gui.status.check_pending.name=Ожидание проверки +gui.status.check_starting.name=Проверка начата +gui.status.checking_seal.name=Проверка герметичности +gui.status.collecting.name=Сбор +gui.status.collectingenergy.name=Сбор энергии +gui.status.compressing.name=Сжатие +gui.status.disabled.name=Отключено +gui.status.fulltank.name=Кислородный баллон заполнен +gui.status.generating.name=Создание +gui.status.hull_heat.name=Нагрев корпуса +gui.status.idle.name=Простой +gui.status.missingleaves.name=Отсутствуют блоки листвы +gui.status.missingoxygen.name=Отсутствует кислород +gui.status.missingpower.name=Отсутствует энергия +gui.status.missingpower.short.name=Нет питания +gui.status.missingtank.name=Отсутствует кислородный баллон +gui.status.nofuel.name=Нет топлива для загрузки! +gui.status.noinvtarget.name=Отсутствует инвентарь у цели! +gui.status.noitems.name=Нет предметов для загрузки! +gui.status.nooil.name=Нет нефти +gui.status.not_available.name=Н/Д +gui.status.not_generating.name=Не создаётся +gui.status.notargetload.name=Отсутствует цель для загрузки! +gui.status.notargetunload.name=Отсутствует цель для разгрузки! +gui.status.off.name=Выкл. +gui.status.on.name=Вкл. +gui.status.raining.name=Дождь +gui.status.ready.name=Готово +gui.status.refining.name=Очищение +gui.status.running.name=Работает +gui.status.sealed.name=Герметично +gui.status.sealerblocked.name=Выходное вентиляционное отверстие заблокировано! +gui.status.sun_visible.name=Видимость солнца +gui.status.tank_empty.name=Кислородный баллон пуст +gui.status.targetempty.name=Транспорт пуст! +gui.status.targetfull.name=Транспорт заполнен! +gui.status.unknown.name=Неизвестно +gui.status.unsealed.name=Зона слишком большая / Не герметичная +gui.tank.oxygen_remaining=Осталось кислорода +gui.telemetry_fail.message=Сначала вам нужно отследить сущность, используя этот частотный модуль! (Или надеть его!) +gui.telemetry_fail_no_frequency_module.message=Вам нужно взять частотный модуль в руки! +gui.telemetry_fail_wearing_it.message=Вам нужно снять частотный модуль, если вы хотите соединить его с телеметрическим блоком! +gui.telemetry_succeed.message=Телеметрическое соединение создано. +gui.thermal_slot.desc.0=Слот для Теплового контроллера. Положите +gui.thermal_slot.desc.1='Тепловой контроллер' сюда (необязательно). +gui.thermal_slot.desc.2=Примечание: Потребляет больше энергии. +gui.title.air_lock.name=Контроллер воздушного шлюза игрока %s +gui.tracking.message=Отслеживание активировано. Теперь вам нужно нажать ПКМ по телеметрическому блоку, чтобы завершить соединение. +gui.village.warning.no_freq_mod=Вам нужен частотный модуль, чтобы общаться с ними! +gui.warning.invalid_thermal=Неправильная тепловая защита! +gui.warning.noroom=Недостаточно места! +gui.warning=ОПАСНОСТЬ! +item.air_fan.name=Вентилятор +item.air_vent.name=Вентиляционный клапан +item.basic_item.ambient_thermal_controller.name=Тепловой контроллер +item.basic_item.canned_food.name=Консервированная еда +item.basic_item.compressed_aluminum.name=Сжатый алюминий +item.basic_item.compressed_bronze.name=Сжатая бронза +item.basic_item.compressed_copper.name=Сжатая медь +item.basic_item.compressed_iron.name=Сжатое железо +item.basic_item.compressed_steel.name=Сжатая сталь +item.basic_item.compressed_tin.name=Сжатое олово +item.basic_item.dehydrated_apple.name=Сублимированные яблоки +item.basic_item.dehydrated_carrot.name=Сублимированная морковь +item.basic_item.dehydrated_melon.name=Сублимированные арбузы +item.basic_item.dehydrated_potato.name=Сублимированный картофель +item.basic_item.frequency_module.name=Частотный модуль +item.basic_item.ingot_aluminum.name=Алюминиевый слиток +item.basic_item.ingot_bronze.name=Бронзовый слиток +item.basic_item.ingot_copper.name=Медный слиток +item.basic_item.ingot_steel.name=Стальной слиток +item.basic_item.ingot_tin.name=Оловянный слиток +item.basic_item.raw_silicon.name=Неочищенный кремний +item.basic_item.solar_module_0.name=Одиночный солнечный модуль +item.basic_item.solar_module_1.name=Целая солнечная панель +item.basic_item.wafer_advanced.name=Улучшенная полупроводниковая пластина +item.basic_item.wafer_basic.name=Основная полупроводниковая пластина +item.basic_item.wafer_solar.name=Синяя солнечная полупроводниковая пластина +item.battery.name=Аккумулятор +item.bucket_fuel.name=Ведро топлива +item.bucket_oil.name=Ведро нефти +item.buggy.name=Багги +item.buggymat.seat.name=Сиденье багги +item.buggymat.storage.name=Контейнер багги +item.buggymat.wheel.name=Колесо багги +item.canister.copper.name=Медная канистра +item.canister.tin.name=Оловянная канистра +item.canvas.name=Холст +item.cheese_block.name=Блок сыра +item.cheese_curd.name=Сырок +item.compressed_meteoric_iron.name=Сжатое метеоритное железо +item.dungeonfinder.name=Локатор сокровищниц +item.empty_liquid_canister.name=Пустая жидкостная канистра +item.emergency_kit.description=Используйте (по умолчанию ПКМ), чтобы надеть кислородное оборудование и получить другие необходимые вещи. Одноразовый! +item.emergency_kit.name=Космический самоспасатель +item.engine.tier1booster.name=Ускоритель 1-го уровня +item.engine.tier1engine.name=Ракетный двигатель 1-го уровня +item.flag.name=Флаг +item.food.cheese_slice.name=Ломтик сыра +item.food.burger_bun.name=Булочка для бургера +item.food.beef_patty_raw.name=Говяжий фарш +item.food.beef_patty_cooked.name=Говяжья котлета +item.food.cheeseburger.desc=Астронавты любят чизбургеры! Очень сытная еда. +item.food.cheeseburger.name=Чизбургер +item.food.canned_beef.name=Говяжья тушёнка +item.fuel.name=Ракетное топливо +item.fuel_canister.name=Полная канистра топлива +item.fuel_canister_partial.name=Неполная канистра топлива +item.heavy_plating.name=Сверхпрочная пластина +item.hot_description.name=Поджигает на +item.ic2compat.ore_crushed_alu.name=Измельчённая алюминиевая руда +item.ic2compat.ore_purified_alu.name=Очищенная измельчённая алюминиевая руда +item.ic2compat.dust_alu.name=Алюминиевая пыль +item.ic2compat.dust_small_titanium.name=Маленькая кучка титановой пыли +item.infinite_battery.name=Бесконечный аккумулятор +item.infinite_oxygen.name=Бесконечный кислородный баллон +item.key.t1.name=Ключ от подземелья 1-го уровня +item.lunar_sapphire.description=Лунный сапфир используется при торговле с Инопланетными жителями +item.lunar_sapphire.name=Лунный сапфир +item.meteor_chunk.name=Бросаемый метеоритный кусок +item.meteor_chunk_hot.name=Бросаемый метеоритный кусок +item.meteoric_iron_ingot.name=Слиток метеоритного железа +item.meteoric_iron_raw.name=Необработанное метеоритное железо +item.nose_cone.name=Головной обтекатель +item.oil_canister.name=Полная канистра нефти +item.oil_canister_partial.name=Неполная канистра нефти +item.oil_extractor.name=Портативный нефтяной экстрактор +item.oxygen_concentrator.name=Кислородный концентратор +item.oxygen_gear.name=Кислородное оборудование +item.oxygen_mask.name=Кислородная маска +item.oxygen_tank_heavy_empty.name=Пустой большой кислородный баллон +item.oxygen_tank_heavy_full.name=Большой кислородный баллон +item.oxygen_tank_light_empty.name=Пустой малый кислородный баллон +item.oxygen_tank_light_full.name=Малый кислородный баллон +item.oxygen_tank_med_empty.name=Пустой средний кислородный баллон +item.oxygen_tank_med_full.name=Средний кислородный баллон +item.parachute_black.name=Чёрный парашют +item.parachute_blue.name=Голубой парашют +item.parachute_brown.name=Коричневый парашют +item.parachute_darkblue.name=Синий парашют +item.parachute_darkgray.name=Серый парашют +item.parachute_darkgreen.name=Зелёный парашют +item.parachute_gray.name=Светло-серый парашют +item.parachute_lime.name=Лаймовый парашют +item.parachute_magenta.name=Пурпурный парашют +item.parachute_orange.name=Оранжевый парашют +item.parachute_pink.name=Розовый парашют +item.parachute_plain.name=Парашют +item.parachute_purple.name=Фиолетовый парашют +item.parachute_red.name=Красный парашют +item.parachute_teal.name=Бирюзовый парашют +item.parachute_yellow.name=Жёлтый парашют +item.rocket_fins.name=Ракетный стабилизатор +item.rocket_t1.name=Ракета 1-го уровня +item.schematic.name=Схема для верстака NASA +item.sensor_glasses.name=Очки с сенсорами +item.sensor_lens.name=Сенсорные линзы +item.standard_wrench.name=Обычный гаечный ключ +item.steel_axe.name=Стальной топор +item.steel_boots.name=Стальные ботинки +item.steel_chestplate.name=Стальной нагрудник +item.steel_helmet.name=Стальной шлем +item.steel_hoe.name=Стальная мотыга +item.steel_leggings.name=Стальные поножи +item.steel_pickaxe.name=Стальная кирка +item.steel_pole.name=Стальной шест +item.steel_shovel.name=Стальная лопата +item.steel_sword.name=Стальной меч +item.tier1.desc=1-ый уровень +item_desc.powerdraw.name=Требуется энергии: %s /сек +item_desc.shift.name=Нажмите %s для подробной информации +item_group.galacticraft_blocks=Galacticraft: Блоки +item_group.galacticraft_items=Galacticraft: Предметы +jei.arc_lamp.info=Очень яркий свет с лицевой стороны. Для лучшего эффекта размещайте на высоте! Вращается с помощью Гаечного ключа. +jei.electric_compressor.info=Электрическая версия угольного компрессора. Работает в 2 раза быстрее! Скорость сжатия увеличивается при подключении к энергосистеме 2-го уровня. Для загрузки или выгрузки предметов может быть использована воронка. +jei.electric_compressor.appeng.info=Для автоматизации с помощью Applied Energetics 2 используйте в рецептах слитки из двух разных модификаций. Посетите страницу https://goo.gl/BwY15G для более подробной информации. +jei.fluid_pipe.info=Труба для передачи любых жидкостей или газов. Для выкачивания жидкости из жидкостного резервуара используйте Гаечный ключ на трубе, чтобы перевести её в «выталкивающий режим». \nТруба в выталкивающем режиме не может заполнять жидкостный резервуар или устройство, поэтому трубы должны быть длиной как минимум в 2 блока. +jei.fuel_loader.info=Поставьте рядом со Взлётной площадкой. Заправляет любую ракету, стоящую на площадке. Необходим для любого полёта в космос - в том числе для полёта домой! +jei.magnetic_crafting.info=Верстак, сохраняющий положенные в него предметы. Может принимать предметы из воронки для автоматического создания по последнему успешно использованному рецепту. +jei.oxygen_collector.info=Собирает дыхательную кислородную смесь из воздуха в обычном мире или (в космосе) с близлежащих листвы или зелени на грядках. \nПерекачивайте кислород по трубам в Кислородный компрессор, чтобы заполнить баллоны, в Кислородный герметизатор или Распределитель кислородных пузырей. +jei.oxygen_distributor.info=Создаёт кислородный пузырь в космосе, где игроки (и другие существа) могут дышать. Снабжайте его кислородной дыхательной смесью из Кислородного сборщика или Кислородного хранилища. +jei.oxygen_sealer.info=Заполняет одну комнату на вашей космической базе пригодной для дыхания атмосферой. Снабжайте его кислородной дыхательной смесью из Кислородного сборщика или Кислородного хранилища. Все стены в комнате должны быть герметичными. \nИщите утечки с помощью Сенсорных очков! \nМаксимальный размер комнаты для одного герметизатора - 10x10x8 блоков. Используй несколько Герметизаторов для больших помещений. +jei.wrench.info=Большинство устройств в Galacticraft можно вращать, используя (по умолчанию ПКМ) на них Обычный гаечный ключ. \nПри удержании Shift во время использования ключа, для большей части электрических машин можно менять стороны, на которых находятся энергетические или иные входы и выходы. +keybind.map.name=Галактическая карта +keybind.sensortoggle.name=Переключить режим Очков с сенсорами +keybind.spaceshipinv.name=Открыть инвентарь космического корабля +keybind.vehiclebackward.name="Назад" для транспорта +keybind.vehicledown.name="Вниз" для транспорта +keybind.vehicleforward.name="Вперёд" для транспорта +keybind.vehicleleft.name="Влево" для транспорта +keybind.vehicleright.name="Вправо" для транспорта +keybind.vehicleup.name="Вверх" для транспорта +moon.moon=Луна +newversion.failed.name=Проверка обновлений для Galacticraft провалилась! Следующая попытка произойдёт через 15 секунд. +newversion.success.name=Найдена новая версия Galacticraft: +planet.jupiter=Юпитер +planet.mercury=Меркурий +planet.neptune=Нептун +planet.overworld=Земля +planet.saturn=Сатурн +planet.uranus=Уран +planet.venus=Венера +satellite.spacestation.overworld=Космическая станция Земли +schematic.moonbuggy.name=Лунный багги +schematic.rocket_t1.name=Ракета 1-го уровня +schematic.rocket_t2.name=Ракета 2-го уровня +solarsystem.sol=Солнце +star.sol=Солнце +tile.air_lock_controller.name=Контроллер воздушного шлюза +tile.air_lock_frame.description=Блоки каркаса воздушного шлюза, расположенные в форме портала, с одним заменённым на контроллер блоком, будут функционировать как Воздушный шлюз. +tile.air_lock_frame.name=Каркас воздушного шлюза +tile.air_lock_seal.name=Уплотнитель воздушного шлюза +tile.aluminum_wire.alu_wire.description=Алюминиевый провод используется для подключения источников энергии к механизмам, которые используют энергию. +tile.aluminum_wire.alu_wire.name=Алюминиевый провод +tile.aluminum_wire.alu_wire_heavy.description=Толстый алюминиевый провод используется для подключения источников энергии к механизмам, которые используют энергию. За счет большей проводимости ускоряет механизмы 2-го уровня. +tile.aluminum_wire.alu_wire_heavy.name=Толстый алюминиевый провод +tile.aluminum_wire.alu_wire_switch.description=Управляемый алюминиевый провод присоединяется как обычный Алюминиевый провод, если не выключен сигналом красного камня. +tile.aluminum_wire.alu_wire_switch.name=Управляемый алюминиевый провод +tile.aluminum_wire.alu_wire_switch_heavy.description=Управляемый толстый алюминиевый провод присоединяется как обычный Толстый алюминиевый провод, если не выключен сигналом красного камня. +tile.aluminum_wire.alu_wire_switch_heavy.name=Управляемый толстый алюминиевый провод +tile.arclamp.description=Дуговые лампы используются для освещения большой территории, также заставляют большинство монстров убегать. +tile.arclamp.name=Дуговая лампа +tile.basic_block_core.block_aluminum_gc.name=Алюминиевый блок +tile.basic_block_core.block_copper_gc.name=Медный блок +tile.basic_block_core.block_meteoric_iron_gc.name=Блок метеоритного железа +tile.basic_block_core.block_tin_gc.name=Оловянный блок +tile.basic_block_core.block_silicon_gc.name=Кремниевый блок +tile.basic_block_core.deco_block_0.name=Декоративный оловянный блок +tile.basic_block_core.deco_block_1.name=Декоративный оловянный блок +tile.basic_block_core.ore_aluminum_gc.name=Алюминиевая руда +tile.basic_block_core.ore_copper_gc.name=Медная руда +tile.basic_block_core.ore_silicon.name=Кремниевая руда +tile.basic_block_core.ore_tin_gc.name=Оловянная руда +tile.basic_block_moon.bricks.name=Кирпич лунной сокровищницы +tile.basic_block_moon.cheesestone.name=Сырная руда +tile.basic_block_moon.coppermoon.name=Медная руда +tile.basic_block_moon.moondirt.name=Лунный грунт +tile.basic_block_moon.moongrass.name=Лунный реголит +tile.basic_block_moon.moonstone.name=Лунный камень +tile.basic_block_moon.sapphiremoon.name=Сапфировая руда +tile.basic_block_moon.tinmoon.name=Оловянная руда +tile.buggy_pad.description=Заправочная платформа при размещении блоков квадратом 3x3 позволит багги на платформе заправиться с помощью Загрузчика топлива. Не может быть использована для запуска ракет! +tile.cargo.loader.name=Грузовой загрузчик +tile.cargo.unloader.name=Грузовой разгрузчик +tile.cargo_loader.description=Грузовой загрузчик будет передавать блоки и предметы в ракеты и другую технику с грузовым хранилищем. Должен быть подключён к Взлётной/Заправочной площадке. +tile.cargo_unloader.description=Грузовой разгрузчик будет забирать блоки и предметы из ракет и другой техники с грузовым хранилищем. Должен быть подключён к Взлётной/Заправочной площадке. +tile.cheese.description=Сырные блоки создаются из Лунного сыра, их можно поставить в мире или съесть. +tile.cheese.name=Блок сыра +tile.circuit_fabricator.description=Производитель микросхем будет перерабатывать основные материалы в кремниевые пластины, которые используются для улучшенных механизмов. +tile.coal_generator.description=Угольный генератор будет просто сжигать уголь для выработки энергии. Простейший, но наименее эффективный метод получения энергии. +tile.collector.description=Кислородный сборщик будет собирать кислород, получаемый из ближайшей листвы. +tile.collector.name=Кислородный сборщик +tile.compressor.description=Компрессор будет перерабатывать слитки в их сжатые эквиваленты. Самая необходимая машина в Galacticraft! +tile.compressor_electric.description=Электрический компрессор будет перерабатывать слитки в их сжатые эквиваленты. Сжимает сразу две пластины, что делает его более эффективным, чем предшественника. +tile.compressor_advanced.description=Более быстрая версия Электрического компрессора. Моментально перерабатывает слитки в их сжатые эквиваленты. +tile.concealed_detector.name=Детектор игроков +tile.concealed_redstone.name=Скрытый красный провод +tile.concealed_repeater.name=Скрытый повторитель красного камня +tile.crude_oil.name=Нефть +tile.crude_oil_moving.name=Неочищенная нефть +tile.crude_oil_still.name=Неочищенная нефть +tile.deconstructor.description=Деконструктор разберет ваши старые ракеты и другие предметы, возвращая любые первоначальные материалы. +tile.dishbase.description=Антенна связи может отслеживать положение космических станций и получать сообщения с удалённых космических баз. +tile.dishbase.name=Антенна связи +tile.distributor.description=Распределитель кислорода будет испускать наружу кислородный пузырь от центрального блока, используя внутреннее хранилище. Это позволит дышать внутри пузыря. +tile.distributor.name=Распределитель кислородного пузыря +tile.dummyblock.cryogenic_chamber.name=Криогенная камера +tile.dummyblock.launch_pad.name=Взлётная площадка +tile.dummyblock.nasa_workbench.name=Верстак NASA +tile.dummyblock.solar.name=Солнечная панель +tile.dummyblock.space_station_base.name=Основание космической станции +tile.electric_furnace_tier1.description=Электропечь используется как более быстрая альтернатива обычным угольным печам. +tile.electric_furnace_tier2.description=Дуговая печь используется как более быстрая альтернатива обычным угольным и электрическим печам. Удваивает выход слитков с руд! +tile.emergency_box.description=Разместите Спасательную станцию рядом с местом вашего первого приземления на планете. Откройте, чтобы найти Самоспасатель внутри. Также отпугивает монстров! +tile.emergency_box.filled.name=Спасательная станция (с Самоспасателем) +tile.emergency_box.name=Спасательная станция +tile.enclosed.aluminum_wire.name=Герметичный алюминиевый провод +tile.enclosed.copper_cable.name=Герметичный медный провод +tile.enclosed.description=Герметичные блоки следует использовать в местах, где не должен проходить воздух (например, в стенах космических баз). +tile.enclosed.fluid_pipe.name=Герметичная жидкостная труба +tile.enclosed.glass_fibre_cable.name=Герметичный стекловолоконный провод +tile.enclosed.gold_cable.name=Герметичный золотой провод +tile.enclosed.hv_cable.name=Герметичный высоковольтный провод +tile.enclosed.lv_cable.name=Герметичный оловянный провод +tile.enclosed.heavy_aluminum_wire.name=Герметичный толстый алюминиевый провод +tile.enclosed.me_cable.name=Герметичный МЭ провод +tile.enclosed.pipe_fluids_cobblestone.name=Герметичная булыжниковая жидкостная труба +tile.enclosed.pipe_fluids_stone.name=Герметичная каменная жидкостная труба +tile.enclosed.pipe_items_cobblestone.name=Герметичная булыжниковая транспортная труба +tile.enclosed.pipe_items_stone.name=Герметичная каменная транспортная труба +tile.enclosed.pipe_power_gold.name=Герметичная золотая энергетическая труба +tile.enclosed.pipe_power_stone.name=Герметичная каменная энергетическая труба +tile.energy_storage_module_tier1.description=Хранилище энергии используется для хранения большого кол-ва энергии. +tile.energy_storage_module_tier2.description=Энергетический массив используется для хранения огромного кол-ва энергии. Хранит и выводит больше энергии, чем его предшественник. +tile.fallen_meteor.description=Упавшие метеориты можно найти на многих планетах/лунах с разрежённой или отсутствующей атмосферой. Дают необработанное метеоритное железо. +tile.fallen_meteor.name=Упавший метеорит +tile.fluid_pipe.description=Жидкостная труба передает жидкости и газы от источника к месту назначения. Гаечный ключ используется для переключения режимов. +tile.fluid_pipe.name=Жидкостная труба +tile.fluid_pipe_pull.description=Жидкостная труба передает жидкости и газы от источника к месту назначения. Гаечный ключ используется для переключения режимов. +tile.fluid_pipe_pull.name=Жидкостная труба +tile.fluid_tank.description=Жидкостный резервуар хранит жидкости и газы для последующего использования. +tile.fluid_tank.name=Жидкостный резервуар +tile.fuel.name=Топливо +tile.fuel_block.name=Топливо +tile.fuel_loader.description=После подключения к Взлётной или Заправочной площадке Загрузчик топлива зальёт топливо в подключённую ракету или другую технику. +tile.fuel_loader.name=Загрузчик топлива +tile.glowstone_torch.description=Факел из светящегося камня лучше всего использовать для освещения областей, где нет кислорода для горения обычных факелов. +tile.glowstone_torch.name=Факел из светящегося камня +tile.grating.name=Решётка +tile.landing_pad.buggy_fueler.name=Заправочная платформа для багги +tile.landing_pad.cargo_pad.name=Платформа для Грузовой ракеты +tile.landing_pad.description=Блоки взлётной площадки, будучи расположены квадратом 3x3, позволяют разместить ракеты. Загрузчики топлива, Грузовые загрузчики и Контроллеры запуска могут быть присоединены. +tile.landing_pad.landing_pad.name=Взлётная площадка +tile.landing_pad_full.name=Взлётная площадка +tile.machine.0.name=Угольный генератор +tile.machine.1.name=Хранилище энергии +tile.machine.2.name=Электропечь +tile.machine.3.name=Компрессор +tile.machine.7.name=Электрическая дуговая печь +tile.machine.8.name=Энергетический массив +tile.machine2.4.name=Электрический компрессор +tile.machine2.5.name=Производитель микросхем +tile.machine2.6.name=Хранилище кислорода +tile.machine2.10.name=Деконструктор +tile.machine3.9.name=Художник +tile.machine4.11.name=Улучшенный компрессор +tile.magnetic_table.name=Магнитный верстак +tile.magnetic_table.description=При выходе из Магнитного верстака сохраняет предметы, положенные в него. Принимает предметы при нажатии Shift+ЛКМ. Для загрузки и извлечения предметов могут быть использованы воронки - верстак попытается задействовать последний запомненный рецепт. +tile.moon_stairs_brick.name=Ступеньки из кирпича лунной сокровищницы +tile.moon_stairs_stone.name=Ступеньки из лунного камня +tile.ore_copper.name=Медная руда +tile.ore_tin.name=Оловянная руда +tile.oxygen_compressor.0.name=Кислородный компрессор +tile.oxygen_compressor.1.name=Кислородный декомпрессор +tile.oxygen_compressor.description=Кислородный компрессор будет загружать кислород из внутреннего хранилища в Кислородный баллон. +tile.oxygen_decompressor.description=Кислородный декомпрессор будет разгружать кислород во внутреннее хранилище из Кислородного баллона. +tile.oxygen_detector.description=Кислородный датчик будет излучать сигнал красного камня, когда вокруг него будет кислород. +tile.oxygen_detector.name=Кислородный датчик +tile.oxygen_storage_module.description=Хранилище кислорода используется для хранения большого кол-ва кислорода. +tile.painter.description=Художник красит ваши Вакуумное стекло, Светящиеся панели и другие объекты. Используйте любой блок или краситель, чтобы задать новый цвет. +tile.panel_lighting.description=Светящаяся панель для использования в космосе! Ключ вращает её. Чтобы изменить внешний вид, присядьте и используйте панель на выбранном блоке. +tile.panel_lighting_0.name=Светящаяся панель (квадратная) +tile.panel_lighting_1.name=Светящаяся панель (точечная) +tile.panel_lighting_2.name=Светящаяся панель (линейная) +tile.panel_lighting_3.name=Светящаяся панель (тёмная) +tile.panel_lighting_4.name=Светящаяся панель (тёмная) +tile.parachest.description=Сундуки с парашютом будут падать с неба после посадки на некоторые планеты / луны, такие как Земля. Содержат ракету, топливо и груз, сохранённый с предыдущего запуска. +tile.parachest.name=Сундук с парашютом +tile.platform.description=Поставьте 4 блока для формирования платформы. Платформа перемещает игрока к следующей платформе вверху или внизу. Присядьте, чтобы спуститься, прыгните, чтобы подняться. +tile.platform.name=Гидравлическая платформа +tile.refinery.description=Очистительный завод будет принимать нефть и энергию, а потом выдавать топливо, используемое для ракет и транспорта. +tile.refinery.name=Очистительный завод +tile.compact_workbench.name=Компактный верстак NASA +tile.compact_workbench.description=Компактный вариант верстака NASA. +tile.rocket_workbench.name=Верстак NASA +tile.rocket_workbench.description=Верстак NASA используется для создания множества улучшенных деталей и техники. Новые схемы могут быть добавлены, как только они были найдены. +tile.sapling2.birch.name=Саженец берёзы +tile.sapling2.jungle.name=Саженец тропического дерева +tile.sapling2.oak.name=Саженец дуба +tile.sapling2.spruce.name=Саженец сосны +tile.sealer.description=Герметизатор кислорода будет искать замкнутое пространство. Если таковое найдено, оно заполнится воздухом. +tile.sealer.name=Герметизатор кислорода +tile.slab_gc_half.moon_bricks_slab.name=Плита из кирпича лунной сокровищницы +tile.slab_gc_half.moon_slab.name=Плита из лунного камня +tile.slab_gc_half.tin_slab_1.name=Декоративная оловянная плита +tile.slab_gc_half.tin_slab_2.name=Декоративная оловянная плита +tile.solar.advanced_solar.name=Улучшенная солнечная панель +tile.solar.basic_solar.name=Основная солнечная панель +tile.solar_adv.description=Улучшенные солнечные панели будут получать энергию из солнца, сохраняя её. Автоматически регулируют угол панели для оптимального получения энергии. +tile.solar_basic.description=Основные солнечные панели будут получать энергию из солнца, сохраняя её. Больше всего энергии получают в середине дня (нельзя настроить). +tile.space_glass.description=Вакуумное стекло для ваших космических баз! Красится в любой цвет с помощью ближайшего Художника. +tile.space_glass.clear.description=Прозрачное вакуумное стекло с великолепным видом из космоса! А также отличная видимость под водой. +tile.space_glass.strong.description=Прочное и ударостойкое вакуумное стекло. Изготовлено из прозрачного алюминия. +tile.space_glass_clear.name=Вакуумное стекло (прозрачное) +tile.space_glass_vanilla.name=Вакуумное стекло +tile.space_glass_strong.name=Вакуумное стекло (прочное) +tile.space_station_base.name=Основание космической станции +tile.spin_thruster.description=Вращающие двигатели используются для вращения космических станций. +tile.spin_thruster.name=Вращающий двигатель +tile.telemetry.description=Собирает полезные данные с присоединённых ракет, игроков и мобов. Лучше всего размещать рядом с экраном отображения. Используйте частотный модуль, чтобы установить передачу данных. +tile.telemetry.name=Телеметрический блок +tile.tin_stairs_1.name=Декоративные оловянные ступеньки +tile.tin_stairs_2.name=Декоративные оловянные ступеньки +tile.treasure_chest.description=Сундуки с сокровищами 1-го уровня будут генерироваться в сокровищницах Луны. Их можно открыть после победы над финальным боссом. +tile.treasure_chest.name=Сундук с сокровищами +tile.unlit_torch.name=Факел +tile.unlit_torch_stone.name=Каменный факел +tile.unlit_torch_lit.name=Факел +tile.unlit_torch_stone_lit.name=Каменный факел +tile.view_screen.description=Экраны отображения добавят последний штрих вашей космической базе. ПКМ изменяет отображаемую информацию. +tile.view_screen.name=Экран отображения +tile.wall_gc.moon.name=Стена из лунного камня +tile.wall_gc.moon_bricks.name=Стена из кирпича лунной сокровищницы +tile.wall_gc.tin.name=Декоративная оловянная стена + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=Исследуйте Луну... и не только! +advancement.galacticraft.coal_generator.title=Сила угля +advancement.galacticraft.coal_generator.description=Создайте Угольный генератор +advancement.galacticraft.circuit_fabricator.title=Произведено +advancement.galacticraft.circuit_fabricator.description=Создайте Производитель микросхем для изготовления полупроводниковых пластин +advancement.galacticraft.basic_wafer.title=Вкусные вафли +advancement.galacticraft.basic_wafer.description=Создайте Основную полупроводниковую пластину. (Пожалуйста, не ешьте её - она кремниевая) +advancement.galacticraft.advanced_wafer.title=Золотые вафли +advancement.galacticraft.advanced_wafer.description=Создайте Улучшенную полупроводниковую пластину (Вам всё ещё не стоит её есть!) +advancement.galacticraft.compressor.title=Сжато +advancement.galacticraft.compressor.description=Создайте Компрессор +advancement.galacticraft.solar.title=Бесплатная энергия +advancement.galacticraft.solar.description=Создайте Основную солнечную панель +advancement.galacticraft.advanced_solar.title=Быстро и Эффективно +advancement.galacticraft.advanced_solar.description=Создайте Улучшенную солнечную панель +advancement.galacticraft.electric_compressor.title=Электрическое улучшение +advancement.galacticraft.electric_compressor.description=Создайте Электрический компрессор +advancement.galacticraft.oil.title=Липкая субстанция +advancement.galacticraft.oil.description=Упадите в нефть +advancement.galacticraft.refiery.title=Время нефтепереработки! +advancement.galacticraft.refiery.description=Создайте Очистительный завод +advancement.galacticraft.rocket_fuel.title=Ракетное топливо +advancement.galacticraft.rocket_fuel.description=Переработайте нефть в Очистительном заводе +advancement.galacticraft.oxygen_collector.title=Кислород не прилагается +advancement.galacticraft.oxygen_collector.description=Создайте Кислородный сборщик +advancement.galacticraft.oxygen_compressor.title=Сжать воздух +advancement.galacticraft.oxygen_compressor.description=Создайте Кислородный компрессор +advancement.galacticraft.fill_tank.title=Есть воздух +advancement.galacticraft.fill_tank.description=Заполните Кислородный баллон +advancement.galacticraft.fill_all_tanks.title=Кислородный запас +advancement.galacticraft.fill_all_tanks.description=Заполните каждый тип кислородного баллона +advancement.galacticraft.all_oxygen_gear.title=Все готово +advancement.galacticraft.all_oxygen_gear.description=Создайте все, что вам нужно, чтобы дышать в космосе +advancement.galacticraft.rocket_workbench.title=Космический инженер +advancement.galacticraft.rocket_workbench.description=Создайте Верстак NASA +advancement.galacticraft.rocket_t1.title=У нас есть ракета! +advancement.galacticraft.rocket_t1.description=Собрать ракету +advancement.galacticraft.fuel_loader.title=Заправь её! +advancement.galacticraft.fuel_loader.description=Создайте Загрузчик топлива +advancement.galacticraft.launch_rocket.title=Прошёл контакт подъёма! +advancement.galacticraft.launch_rocket.description=Запустите свою первую ракету +advancement.galacticraft.moon.title=Луна! +advancement.galacticraft.moon.description=Прилунитесь +advancement.galacticraft.create_space_station.title=Космическая станция +advancement.galacticraft.create_space_station.description=Создайте свою космическую станцию! +advancement.galacticraft.spin_thruster.title=Круууужжжится голова +advancement.galacticraft.spin_thruster.description=Создайте Вращающий двигатель +advancement.galacticraft.moon_dungeon.title=Хуже иссушителя +advancement.galacticraft.moon_dungeon.description=Найдите Эволюционировавшего скелета-босса в сокровищнице +advancement.galacticraft.dungeon_key_moon.title=У меня есть ключ +advancement.galacticraft.dungeon_key_moon.description=Убейте босса, скрывающегося в сокровищнице, и украдите его ключ +advancement.galacticraft.moon_buggy_schematic.title=Глючная схема +advancement.galacticraft.moon_buggy_schematic.description=Получите схему §oлунного багги +advancement.galacticraft.moon_buggy.title=Багги +advancement.galacticraft.moon_buggy.description=Соберите лунный багги diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/sv_se.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/sv_se.lang new file mode 100644 index 00000000..353a6529 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/sv_se.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count= Antalet aktiva astrobrytare %s har är %s +commands.dimensionteleport=%s teleporterades till en annan himlakropp%s +commands.dimensiontp.too_many=För många argument! Användning: %s +commands.gcenergyunits.invalid_units=Invalid units in /GCEnergyUnits command. Usage: %s +commands.gcenergyunits.no_units=The units need to be specified! Usage: %s +commands.joinrace.no_team=Okänt organisationsnamn. Användning: %s +commands.ssinvite.not_found=Could not find space station for your username, you need to travel there first! +commands.ssinvite.wrong_usage=Argument saknas! Användning: %s +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=Kan inte hitta spelare med användarnamn %s på din rymdstationslista! +container.cargoloader.name=Pålastare +container.cargounloader.name=Urlastare +container.fuelloader.name=Bränslepump +container.lander.name=Månlandare +container.oxygencollector.name=Syrgasutvinnare +container.oxygencompressor.name=Syrgastapp +container.oxygendecompressor.name=Syrgaskompressor +container.oxygendistributor.name=Luftbubbelmaskin +container.oxygensealer.name=Andningsklimatsystem +container.parachest.name=Fallskärmskista +container.refinery.name=Oljeraffinaderi +container.solaradvanced.name=Avancerad solpanel +container.solarbasic.name=Enkel solpanel +container.spaceship.name=N1-raket +container.treasurechest.name=Skattkista +death.attack.oxygen_suffocation=%1$s fick slut på syre! +death.attack.spaceship_crash=%1$s kan ha varit utslagen eller medvetet störtat rymdfarkosten. +death.attack.thermal=%1$s avsaknade temperaturkontroll. +dimension.moon.name=Månen +dimension.overworld.name=Midgård +dimension.sun.name=Solen +entity.alien_villager.name=Utomjordisk bybo +entity.buggy.name=Månbil +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Rymdsmygare +entity.evolved_skeleton.name=Rymdskelett +entity.evolved_skeleton_boss.name=Månhålehärskare +entity.evolved_spider.name=Rymdspindel +entity.evolved_zombie.name=Rymdzombie +entity.flag.name=Flagga +entity.gcflag.name=Flagga +entity.gravity_arrow.name=Pil +entity.lander.name=Månlandare +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteorsten +entity.oxygen_bubble.name=Luftbubbla +entity.para_chest.name=Fallskärmskista +entity.rocket_t1.name=Rymdskepp +galaxy.milky_way=Vintergatan +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=Challenge Mode (Asteroids start) +gc.configgui.biome_id_base=BiomeID Base for GC +gc.configgui.detectable_i_ds=Detectable IDs +gc.configgui.disable_cheese_moon=Disable Moon Cheese Gen +gc.configgui.disable_copper_moon=Disable Moon Copper Gen +gc.configgui.disable_lander=Disable Moon Lander +gc.configgui.disable_moon_village_gen=Disable Moon Village Gen +gc.configgui.disable_space_station_creation=Disable Space Station Creation +gc.configgui.disable_spaceship_grief=Disable Rocket Explosions +gc.configgui.disable_spaceship_particles=Disable Rocket Particles +gc.configgui.disable_tin_moon=Disable Moon Tin Gen +gc.configgui.disable_update_check=Disable Update Check +gc.configgui.dungeon_boss_health_mod=Dungeon Boss Health Modifier +gc.configgui.enable_aluminum_ore_gen=Overworld Aluminum Gen +gc.configgui.enable_copper_ore_gen=Overworld Copper Gen +gc.configgui.enable_debug=Show Debug Messages in Console +gc.configgui.enable_other_mods_features=Enable All Other Mod World Gen +gc.configgui.enable_retrogen_oil=Retrogen Overworld Oil +gc.configgui.enable_sealer_edge_checks=Sealer Edge Checks +gc.configgui.enable_silicon_ore_gen=Overworld Silicon Gen +gc.configgui.enable_thaum_craft_nodes=Enable ThaumCraft Nodes on planets +gc.configgui.enable_tin_ore_gen=Overworld Tin Gen +gc.configgui.external_oil_gen=External Oil Gen +gc.configgui.force_overworld_respawn=Force Overworld Respawn +gc.configgui.hard_mode=Harder Difficulty +gc.configgui.id_achiev_base=Base Achievement ID +gc.configgui.id_dimension_moon=Moon Dimension ID +gc.configgui.id_dimension_overworld_orbit=Space Station Dimension ID +gc.configgui.id_dimension_overworld_orbit_static=Space Station Static Dimension ID +gc.configgui.id_schematic_add_schematic=Schematic ID "Add Schematic" +gc.configgui.id_schematic_moon_buggy=Schematic ID Moon Buggy +gc.configgui.id_schematic_rocket_t1=Schematic ID Tier 1 Rocket +gc.configgui.key_override_fuel_level=Set key: Rocket Fuel GUI +gc.configgui.key_override_toggle_adv_goggles=Set key: Advanced Goggles +gc.configgui.map_scroll_invert=Invert Map Scroll +gc.configgui.map_scroll_sensitivity=Map Scroll Mouse Sensitivity +gc.configgui.meteor_block_damage=Meteor Block Damage Enabled +gc.configgui.meteor_spawn_mod=Meteor Spawn Modifier +gc.configgui.more_stars=Show More Stars +gc.configgui.oil_gen_factor=Oil Gen Factor +gc.configgui.ore_dict_silicon=OreDict name of silicon in other mods +gc.configgui.other_mod_ore_gen_i_ds=Set Other Mod Ores to Generate on Planets +gc.configgui.override_capes=Donor Capes Override +gc.configgui.override_map=Set key: Galaxy Map +gc.configgui.oxygen_indicator_bottom=Move Oxygen Indicator Down +gc.configgui.oxygen_indicator_left=Move Oxygen Indicator Left +gc.configgui.quick_mode=Quick Game (easier) +gc.configgui.rocket_disable_overworld_return=Disable Overworld Rocket Return +gc.configgui.rocket_disabled_dimensions=Rocket Disabled Dimensions +gc.configgui.rocket_fuel_factor=Rocket Fuel Factor +gc.configgui.sealable_i_ds=Sealable Blocks +gc.configgui.space_station_energy_scalar=Space Station Energy Modifier +gc.configgui.space_stations_require_permission=Space Stations Permissions +gc.configgui.static_loaded_dimensions=Static Loaded Dimensions +gc.configgui.suffocation_cooldown=Suffocation Cooldown +gc.configgui.suffocation_damage=Suffocation Damage +gc.configgui.title=Galacticraft Core Config +gc.configgui.whitelist_co_f_h_core_gen=Whitelist CoFHCore World Gen +gui.battery_slot.desc.0=Batterifack. Placera ett batteri här +gui.battery_slot.desc.1=eller koppla en extern strömkälla +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Gasa +gui.buggy.decel.name=Backa +gui.buggy.inv.name=Koffert +gui.buggy.storage_space=Lastutrymme +gui.buggy.turn.name=Styr höger-vänster +gui.button.back.name=Föreg. +gui.button.disable.name=Stäng av +gui.button.disableseal.name=Stäng av +gui.button.enable.name=Starta +gui.button.enableseal.name=Starta +gui.button.hide_dest.name=Hide ##NEEDS TRANSLATE## +gui.button.loadfuel.name=Tanka +gui.button.loaditems.name=Lasta +gui.button.next.name=Nästa +gui.button.refine.name=Arbetar +gui.button.stoploading.name=Stäng av +gui.button.stoprefine.name=Stäng av +gui.button.stopunloading.name=Stäng av +gui.button.unhide_dest.name=Unhide ##NEEDS TRANSLATE## +gui.button.unloaditems.name=Lasta ur +gui.button.unlockschematic.name=Läs in ritning +gui.checkbox.horizontal.name=Horisontellt läge +gui.checkbox.invert.name=Kasta om inställning +gui.checkbox.player_name.name=Spelarnamn +gui.checkbox.player_within.name=Spelare inom +gui.checkbox.redstone_signal.name=Öppna på rödstensignal +gui.chest.warning.wrongkey=En speciell nyckel (nivå %s) behövs. Den borde finnas här någonstans på samma himlakropp... +gui.choose_planet.desc.moon=Habitable#No Oxygen#Gravity: 18% +gui.choose_planet.desc.overworld=Full of Life#Habitable#Gravity: 100% +gui.chooseplanet.alreadycreated1.name=Rymdstation redan +gui.chooseplanet.alreadycreated2.name=skapad! +gui.chooseplanet.cannotcreate1.name=Kan inte skapa +gui.chooseplanet.cannotcreate2.name=rymdstation här! +gui.creative_only.desc=Avsett för kreativt spelläge +gui.display.nolink=No link +gui.docking_rocket.current_vel.name=Aktuell hastighet +gui.docking_rocket.distance_from.name=Avstånd från mål +gui.docking_rocket.target_vel.name=Målets hastighet +gui.docking_rocket.warning.name.0=Tryck %s för att bromsa +gui.docking_rocket.warning.name.1=Tryck %s för att accelerera +gui.dropbox.player_distance.name.0=1 Meter +gui.dropbox.player_distance.name.1=2 Meters +gui.dropbox.player_distance.name.2=5 Meters +gui.dropbox.player_distance.name.3=10 Meters +gui.electric_compressor.desc.0=Utfört arbete +gui.energy_storage.desc.0=Lagrad energi +gui.energy_storage.desc.1=Mängd +gui.flag.already_placed=En flagga har redan blivit satt här! +gui.frequency_module.desc.0=Känner av svaga ljudvågor +gui.frequency_module.desc.1=samt fjärrläser signaler. +gui.frequencymodule.warning0=Troligen behövs en +gui.frequencymodule.warning1=för att någonting ska kunna höras här. +gui.fuel_output.desc.0=Placera en tom tank här +gui.fuel_output.desc.1=för att tankad från +gui.fuel_output.desc.2=intern bränslebehållare. +gui.fuel_tank.desc.0=Bränsletank. Fylls +gui.fuel_tank.desc.1=med en bränslepump +gui.fuel_tank.desc.2=Intern bränslebehållare. +gui.fuel_tank.desc.3=Kan fyllas med bränsletankar. +gui.fuel_tank.desc.4=Intern bränslebehållare +gui.infinite_item.desc=Oändligt +gui.lander.velocity=Hastighet +gui.lander.velocityu=m/s +gui.lander.warning2=Håll in " +gui.lander.warning3=" för att sakta ner! +gui.max_output.desc=Max. uteffekt +gui.message.addnewsch.name=Läs in ny ritning +gui.message.apply.name=Verkställ +gui.message.assign_name.name=Ange namn +gui.message.atmosphere.name=Atmosphere +gui.message.back.name=Återgå +gui.message.breed.name=Avla +gui.message.bubble_visible.name=Synlig bubbla +gui.message.can_create_space_station.name=En rymdstation kan skapas här! +gui.message.cancel.name=Avbryt +gui.message.cannot_create_space_station.name=En rymdstation kan ej skapas här. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Klicka igen för zoom (granska månar och satelliter) +gui.message.click_again.1.name=Klicka igen för zoom (granska månar) +gui.message.click_again.2.name=Klicka igen för zoom (granska satelliter) +gui.message.click_again.3.name=Klicka igen för zoom +gui.message.clicklink=Klicka här för Galacticraft-wiki +gui.message.create_ss.name=Skapa +gui.message.daynightcycle.name=Day-night Cycle +gui.message.energy=Energi +gui.message.environment.name=Miljöbonus +gui.message.exit.name=Stäng +gui.message.fuel.name=Mängd +gui.message.full.name=full +gui.message.generating.name=Effekt +gui.message.grow.name=Väx +gui.message.heal.name=Hela +gui.message.help1=För allmän hjälp med Galacticraft +gui.message.help1a=För att se detta meddelande igen, skriv +gui.message.help2=För hjälp angående rymdorganisationer +gui.message.help3=För hjälp med olja +gui.message.in.name=In +gui.message.launch.name=Avgå +gui.message.max_energy=Kapacitet +gui.message.meansurfacetemp.name=Mean Surface Temp +gui.message.moon.atmosphere.0.name=None +gui.message.moon.daynightcycle.0.name=29.5 Earth Days +gui.message.moon.meansurfacetemp.0.name=(Light Side) 253C +gui.message.moon.meansurfacetemp.1.name=(Dark Side) -153C +gui.message.moon.surfacecomposition.0.name=Basaltic Rock and +gui.message.moon.surfacecomposition.1.name=Traces of Cheese +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% of Earth) +gui.message.of.name=av +gui.message.oil.name=Mängd +gui.message.out.name=Ut +gui.message.overworld.atmosphere.0.name=Nitrogen and Oxygen +gui.message.overworld.atmosphere.1.name=Supports life +gui.message.overworld.daynightcycle.0.name=1 Earth Day +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Stone, dirt, and +gui.message.overworld.surfacecomposition.1.name=gravel +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% of Earth) +gui.message.prelaunch=Startchecklista +gui.message.rename.name=Byt namn +gui.message.select_ss.name=Välj en rymdstation +gui.message.ss_owner.name=Ägare: +gui.message.status.name=Läge +gui.message.strengthen.name=Stärk +gui.message.surfacecomposition.name=Surface Composition +gui.message.surfacegravity.name=Surface Gravity +gui.message.thermal_status.name=Thermal Control ##NEEDS TRANSLATE## +gui.message.tier.name=Nivå %d +gui.message.unnamed.name=Odöpt +gui.missing_core.name.0=MicdoodleCore kunde inte hittas i ditt mod-fodral +gui.missing_core.name.1=Galacticraft kunde inte laddas +gui.missing_core.name.2=Avsluta Minecraft och installera MicdoodleCore +gui.missing_core.name.3=Klicka här för att öppna sida för nedladdning +gui.new_schematic.slot.desc.0=Fack för nya ritningar. +gui.new_schematic.slot.desc.1=De kan hittas i slutet +gui.new_schematic.slot.desc.2=av hålor funna på andra +gui.new_schematic.slot.desc.3=himlakroppar +gui.oil_tank.desc.0=Intern oljebehållare. +gui.oil_tank.desc.1=Kan fyllas med oljetankar. +gui.oxygen.warning=Ingen syretillförsel! +gui.oxygen_compressor.slot.desc.0=Syrgastapp. Placera en syrgastank här +gui.oxygen_compressor.slot.desc.1=för påfyllning av nytt andningssyre. +gui.oxygen_decompressor.slot.desc.0=Syrgastömning. Placera en syrgastank +gui.oxygen_decompressor.slot.desc.1=här för att tappa över till maskinen. +gui.oxygen_slot.desc.0=Syrgasfack. Placera en syrgastank här +gui.oxygen_slot.desc.1=eller koppla en extern syrgasledning +gui.oxygen_storage.desc.0=Lagrad syrgas +gui.oxygen_storage.desc.1=Mängd +gui.oxygen_use.desc=Syrgasåtgång +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Hunger +gui.player.health=Hälsa +gui.player.ouch=aj!!! +gui.receiver.cannot_attach=Motagare kan inte sättas här! +gui.requires_controller.desc=Behöver raketfjärrstyrare +gui.rocket.countdown=Nedräkning +gui.rocket.height=Höjd +gui.rocket.inv.name=Lastutrymme +gui.rocket.launch.name=Avfyra +gui.rocket.launched=Avfyrad +gui.rocket.on_launchpad=På raketramp +gui.rocket.speed=Rörelse +gui.rocket.turn.name=Styr höger-vänster +gui.rocket.updown.name=Styr upp-ner +gui.rocket.warning.nofuel=Raketen behöver tankas först! +gui.rocket.warning.nogyroscope=Av oförklarlig anledning har rymdskeppets styrsystem blivit nollställt! +gui.rocket.warning.noparachute=Påminelse: Fallskärm saknas +gui.rocket_type.0=Lastutrymme: 18 +gui.rocket_type.1=Lastutrymme: 36 +gui.rocket_type.2=Lastutrymme: 56 +gui.rocket_type.3=Fulltankad +gui.seconds=s +gui.sensor.advanced=Avancerat läge +gui.sensor.advancedoff=AV +gui.sensor.advancedon=PÅ +gui.show_bubble.desc.0=Visa bubbla +gui.skeleton_boss.message=Striden har upphört! Försök undvik lämna en pågående strid mot hålans härskare. Återvänd för att inleda ny kamp. +gui.space_race.chat.add_success=%s har gått med rymdkapplöpningen! +gui.space_race.chat.already_part=Du är redan med denna rymdorganisation! +gui.space_race.chat.invite_received=%s har bjudit in dig till sin rymdorganisation. +gui.space_race.chat.not_found=Kunde ej hitta spelare med namnet %s +gui.space_race.chat.remove_success=%s har plockats bort från rymdorganisationen +gui.space_race.chat.to_join=För att gå med %s använd kommando %s +gui.space_race.coming_soon=Kommer snart! +gui.space_race.create.add_players.name=Lägg till spelare +gui.space_race.create.back.name=Återgå +gui.space_race.create.brush_radius.name=Penselradie +gui.space_race.create.brush_size.name=Penselstorlek +gui.space_race.create.change_color.name.0=Ändra +gui.space_race.create.change_color.name.1=lagfärg +gui.space_race.create.change_color.name.2=цвет +gui.space_race.create.close.name=Stäng +gui.space_race.create.customize.name=Ändra flagga +gui.space_race.create.eraser_radius.name=Suddradie +gui.space_race.create.eraser_size.name=Suddstorlek +gui.space_race.create.global_stats.name=Global statistik +gui.space_race.create.invite_player.name=Bjud in spelare +gui.space_race.create.player_radius.name=Obs: Spelaren måste vara inom 25 blocks räckvidd! +gui.space_race.create.rem_players.name=Ta bort spelare +gui.space_race.create.remove.name=Ta bort +gui.space_race.create.remove_player.name=Ta bort spelare +gui.space_race.create.rename.name=Döp om lag +gui.space_race.create.send_invite.name=Skicka +gui.space_race.create.server_stats.name=Serverstatistik +gui.space_race.create.title.name=Rymdorganisationsmenu +gui.space_race.create.title.name.0=Rymdorganisations- +gui.space_race.create.title.name.1=meny +gui.space_race.join.member_count.name=%d medlem +gui.space_race.join.name=Join +gui.space_race.join.owner.name=Ägare +gui.space_race.join.title.name=Gå med rymdorganisation +gui.space_race.unnamed=Odöpt lag +gui.spacestation.added=%s har beviljat dig tillgång till sin rymdstation! +gui.spacestation.addsuccess=%s har fått tillgång till denna rymdstation! +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= +gui.spacestation.removesuccess=%s har nekats tillgång till denna rymdstation. +gui.spacestation.to_allow_entry=för att ge tillgång till denna rymdstation. +gui.spacestation.type_command=Skriv +gui.status.active.name=Aktiv +gui.status.air_lock_closed.name=Luftsluss stängd +gui.status.air_lock_open.name=Luftsluss öppen +gui.status.blockedfully.name=Sol skymd +gui.status.blockedpartial.name=Delvist skymd sol +gui.status.check_pending.name=Kontroll pågår +gui.status.check_starting.name=Påbörjar kontroll +gui.status.checking_seal.name=Kontrollerar tätning +gui.status.collecting.name=Utvinner +gui.status.collectingenergy.name=Alstrar ström +gui.status.compressing.name=Smider +gui.status.disabled.name=Inaktiv +gui.status.fulltank.name=Syrgastank full +gui.status.generating.name=Alstrar +gui.status.hull_heat.name=Temperatur +gui.status.idle.name=Inaktiv +gui.status.missingleaves.name=Brist på vegetation +gui.status.missingoxygen.name=Syrgasbrist +gui.status.missingpower.name=Strömbrist +gui.status.missingtank.name=Inaktiv +gui.status.nofuel.name=Bränslebrist +gui.status.noinvtarget.name=Målet saknar lastutrymme +gui.status.noitems.name=Inga föremål att lasta +gui.status.nooil.name=Oljebrist +gui.status.not_available.name=N/A ##NEEDS TRANSLATE## +gui.status.not_generating.name=Inaktiv +gui.status.notargetload.name=Inget mål att lasta på +gui.status.notargetunload.name=Inget mål att lasta ur +gui.status.off.name=OFF ##NEEDS TRANSLATE## +gui.status.on.name=ON ##NEEDS TRANSLATE## +gui.status.raining.name=Regnar +gui.status.ready.name=Redo +gui.status.refining.name=Raffinerar +gui.status.running.name=Igång +gui.status.sealed.name=Aktiv +gui.status.sealerblocked.name=Utblås blockerat! +gui.status.sun_visible.name=Direkt solljus +gui.status.tank_empty.name=Syrgastank tom +gui.status.targetempty.name=Målets lastutrymme tomt +gui.status.targetfull.name=Målets lastutrymme fullt +gui.status.unknown.name=Okänd +gui.status.unsealed.name=Område för stort / otätt +gui.tank.oxygen_remaining=Mängd +gui.telemetry_fail.message=Först måste ett objekt vänsterklickas med en frekvensmodul för att spåras. +gui.telemetry_fail_no_frequency_module.message=En frekvensmodul behövs. +gui.telemetry_fail_wearing_it.message=Denna frekvensmodul är i konflikt med den du är utrustad med. +gui.telemetry_succeed.message=Fjärrförbindning skapad. +gui.thermal_slot.desc.0=Thermal attachment slot, place 'Ambient ##NEEDS TRANSLATE## +gui.thermal_slot.desc.1=Thermal Controller' here (optional) ##NEEDS TRANSLATE## +gui.thermal_slot.desc.2=Note: Uses more energy! ##NEEDS TRANSLATE## +gui.title.air_lock.name=%s's luftslusskontroll +gui.tracking.message=Spårning aktiverad. Högerklicka på fjärrmätaren för att fullborda förbindning. +gui.warning=FARA! +gui.warning.invalid_thermal=Undermåligt temperaturskydd! +gui.warning.noroom=Slut på utrymme! +item.air_fan.name=Fläkt +item.air_vent.name=Luftintag +item.basic_item.ambient_thermal_controller.name=Ambient Thermal Controller ##NEEDS TRANSLATE## +item.basic_item.canned_food.name=Matdosa +item.basic_item.compressed_aluminum.name=Aluminiumplåt +item.basic_item.compressed_bronze.name=Bronsplåt +item.basic_item.compressed_copper.name=Kopparplåt +item.basic_item.compressed_iron.name=Järnplåt +item.basic_item.compressed_steel.name=Stålplåt +item.basic_item.compressed_tin.name=Tennplåt +item.basic_item.dehydrated_apple.name=Torkade äpplen +item.basic_item.dehydrated_carrot.name=Torkade morötter +item.basic_item.dehydrated_melon.name=Torkade meloner +item.basic_item.dehydrated_potato.name=Torkade potatisar +item.basic_item.frequency_module.name=Frekvensmodul +item.basic_item.ingot_aluminum.name=Aluminiumtacka +item.basic_item.ingot_bronze.name=Bronstacka +item.basic_item.ingot_copper.name=Koppartacka +item.basic_item.ingot_steel.name=Ståltacka +item.basic_item.ingot_tin.name=Tenntacka +item.basic_item.raw_silicon.name=Kisel +item.basic_item.solar_module_0.name=Solcell +item.basic_item.solar_module_1.name=Solpanel +item.basic_item.wafer_advanced.name=Avancerad kiselplatta +item.basic_item.wafer_basic.name=Enkel kiselplatta +item.basic_item.wafer_solar.name=Fotovoltaisk kiselplatta +item.battery.name=Batteri +item.bucket_fuel.name=Fuel Bucket ##NEEDS TRANSLATE## +item.bucket_oil.name=Oil Bucket ##NEEDS TRANSLATE## +item.buggy.name=Månbil +item.buggymat.seat.name=Månbilsäte +item.buggymat.storage.name=Månbilkoffert +item.buggymat.wheel.name=Månbilhjul +item.canister.copper.name=Kopparburk +item.canister.tin.name=Tennburk +item.canvas.name=Tygduk +item.cheese_block.name=Månostkaka +item.cheese_curd.name=Månkesella +item.compressed_meteoric_iron.name=Meteoritjärnplåt +item.empty_liquid_canister.name=Tom tank +item.engine.tier1booster.name=Hjälpraket +item.engine.tier1engine.name=Raketmotor +item.flag.name=Flagga +item.fuel.name=Raketbränsle +item.fuel_canister.name=Full bränsletank +item.fuel_canister_partial.name=Bränsletank +item.heavy_plating.name=Förstärkt plåt +item.hot_description.name=Het +item.infinite_battery.name=Evighetsbatteri +item.infinite_oxygen.name=Evighetsyretank +item.key.t1.name=Månskattkistnyckel +item.meteor_chunk.name=Kastmeteorit +item.meteor_chunk_hot.name=Glödande kastmeteorit +item.meteoric_iron_ingot.name=Meteoritjärntacka +item.meteoric_iron_raw.name=Meteoritmalm +item.nose_cone.name=Raketnos +item.oil_canister.name=Full oljetank +item.oil_canister_partial.name=Oljetank +item.oil_extractor.name=Oljesugare +item.oxygen_concentrator.name=Syrekoncentrator +item.oxygen_gear.name=Syrgaskoppling +item.oxygen_mask.name=Syrgasmask +item.oxygen_tank_heavy_empty.name=Tom stor syrgastank +item.oxygen_tank_heavy_full.name=Stor syrgastank +item.oxygen_tank_light_empty.name=Tom liten syrgastank +item.oxygen_tank_light_full.name=Liten syrgastank +item.oxygen_tank_med_empty.name=Tom medelstor syrgastank +item.oxygen_tank_med_full.name=Medelstor syrgastank +item.parachute_black.name=Svartfärgad fallskärm +item.parachute_blue.name=Ljusblåfärgad fallskärm +item.parachute_brown.name=Brunfärgad fallskärm +item.parachute_darkblue.name=Blåfärgad fallskärm +item.parachute_darkgray.name=Gråfärgad fallskärm +item.parachute_darkgreen.name=Grönfärgad fallskärm +item.parachute_gray.name=Ljusblåfärgad fallskärm +item.parachute_lime.name=Limegrönfärgad fallskärm +item.parachute_magenta.name=Magentafärgad fallskärm +item.parachute_orange.name=Orangefärgad fallskärm +item.parachute_pink.name=Rosafärgad fallskärm +item.parachute_plain.name=Fallskärm +item.parachute_purple.name=Lilafärgad fallskärm +item.parachute_red.name=Rödfärgad fallskärm +item.parachute_teal.name=Cyanfärgad fallskärm +item.parachute_yellow.name=Gulfärgad fallskärm +item.rocket_fins.name=Raketfena +item.rocket_t1.name=N1-raket +item.schematic.name=Rymdtekniksritning +item.sensor_glasses.name=Sensorglasögon +item.sensor_lens.name=Sensorlins +item.standard_wrench.name=Standardskiftnyckel +item.steel_axe.name=Förstärkt yxa +item.steel_boots.name=Förstärkta stövlar +item.steel_chestplate.name=Förstärkt harnesk +item.steel_helmet.name=Förstärkt hjälm +item.steel_hoe.name=Förstärkt flohacka +item.steel_leggings.name=Förstärkta benskydd +item.steel_pickaxe.name=Förstärkt hacka +item.steel_pole.name=Stålstång +item.steel_shovel.name=Förstärkt spade +item.steel_sword.name=Förstärkt svärd +item.tier1.desc=Nivå 1 +item_desc.powerdraw.name=Strömförbrukning: %s /s +item_desc.shift.name=Tryck %s för mer info +item_group.galacticraft_blocks=Galacticraft: Block +item_group.galacticraft_items=Galacticraft: Föremål +keybind.map.name=Rymdkarta +keybind.sensortoggle.name=Växla sensorglasögonläge +keybind.spaceshipinv.name=Öppna rymdskeppsbagage +keybind.vehiclebackward.name=Kör fordon bakåt +keybind.vehicledown.name=Styr fordon nedåt +keybind.vehicleforward.name=Kör fordon framåt +keybind.vehicleleft.name=Styr fordon vänter +keybind.vehicleright.name=Styr fordon höger +keybind.vehicleup.name=Styr fordon uppåt +moon.moon=Månen +newversion.failed.name=Galacticraft update check failed! Trying again in 15 seconds +newversion.success.name=Galacticraft remote version found: +planet.jupiter=Jupiter +planet.mercury=Merkurius +planet.neptune=Neptunus +planet.overworld=Midgård +planet.saturn=Saturnus +planet.uranus=Uranus +planet.venus=Venus +satellite.spacestation.overworld=Terrestriell rymdstation +schematic.moonbuggy.name=Månbil +schematic.rocket_t1.name=N1-raket +schematic.rocket_t2.name=N2-raket +solarsystem.sol=Solen +star.sol=Solen +tile.air_lock_controller.name=Luftslusskontroll +tile.air_lock_frame.description=Luftslusstommar läggs ut till en portal-liknande ram. Kompletteras med en luftslusskontroll för att bilda en lufttät dörr. +tile.air_lock_frame.name=Luftslusstomme +tile.air_lock_seal.name=Lufttät dörr +tile.aluminum_wire.alu_wire.description=Aluminiumledningar ansluter strömkällor till elektriska apparater. +tile.aluminum_wire.alu_wire.name=Aluminiumledning +tile.aluminum_wire.alu_wire_heavy.description=Förstärkta aluminiumledningar ansluter strömkällor till elektriska apparater. Dess ökade kapacitet lämpar för maskiner av nivå 2. +tile.aluminum_wire.alu_wire_heavy.name=Förstärkt aluminiumledning +tile.arclamp.description=Båglampor lämpas för belysning av stora områden. Skrämmer dessutom bort varelser! +tile.arclamp.name=Båglampa +tile.basic_block_core.block_aluminum_gc.name=Aluminiumblock +tile.basic_block_core.block_copper_gc.name=Kopparblock +tile.basic_block_core.block_meteoric_iron_gc.name=Meteoritjärnblock +tile.basic_block_core.block_tin_gc.name=Tennblock +tile.basic_block_core.deco_block_0.name=Dekorerat tennblock +tile.basic_block_core.deco_block_1.name=Dekorerat tennblock +tile.basic_block_core.ore_aluminum_gc.name=Aluminiummalm +tile.basic_block_core.ore_copper_gc.name=Kopparmalm +tile.basic_block_core.ore_silicon.name=Kiselmalm +tile.basic_block_core.ore_tin_gc.name=Tennmalm +tile.basic_block_moon.bricks.name=Månhåletegel +tile.basic_block_moon.cheesestone.name=Ostmalm +tile.basic_block_moon.coppermoon.name=Kopparmalm +tile.basic_block_moon.moondirt.name=Månjord +tile.basic_block_moon.moongrass.name=Månmark +tile.basic_block_moon.moonstone.name=Månsten +tile.basic_block_moon.tinmoon.name=Tennmalm +tile.buggy_pad.description=Månbilstationplattor markmonterade i en 3x3-kvadrat bildar en komplett månbilstation. Placera en bränslepump intill. +tile.cargo.loader.name=Pålastare +tile.cargo.unloader.name=Urlastare +tile.cargo_loader.description=Pålastaren fyller en farkosts lastutrymme med block och föremål. Placeras intill en raketramp. +tile.cargo_unloader.description=Urlastaren tömmer en farkosts lastutrymme med block och föremål. Placeras intill en raketramp. +tile.cheese.description=Månostkaka är en delikatess från månen. Placeras innan konsumtion. +tile.cheese.name=Månostkaka +tile.circuit_fabricator.description=Kretskortstillverkaren bearbetar råkisel till kiselplattor som används till avancerade maskiner. +tile.coal_generator.description=Kolgeneratorn producerar electricitet genom kolförbränning. Enkel men också bland de minst effektivaste metoderna. +tile.collector.description=Syrgasutvinnaren erhåller syre utvunnet från närvarande växtlighet. +tile.collector.name=Syrgasutvinnare +tile.compressor.description=Plåtmaskinen bearbetar metalltackor till plåt. En av de viktigaste maskinerna i Galacticraft! +tile.compressor_electric.description=Elplåtmaskinen bearbetar metalltackor till plåt. Mer effektiv än sin företrädare då den smider två plåtar åt gången istället. +tile.crude_oil.name=Oil ##NEEDS TRANSLATE## +tile.crude_oil_moving.name=Råolja +tile.crude_oil_still.name=Råolja +tile.dishbase.description=Parabolantennen spårar rymdstationers position och tar emot information från utomjordiska rymdbaser. +tile.dishbase.name=Parabolantenn +tile.distributor.description=Luftbubbelmaskinen bildar en andningsbar syrgasbubbla från ett inbyggt lagringskärl. +tile.distributor.name=Luftbubbelmaskin +tile.dummyblock.cryogenic_chamber.name=Kryogenisk kammare +tile.dummyblock.launch_pad.name=Raketramp +tile.dummyblock.nasa_workbench.name=Rymdteknikställ +tile.dummyblock.solar.name=Solpanel +tile.dummyblock.space_station_base.name=Rymdstationsmall +tile.electric_furnace_tier1.description=Elugnen används som ett snabbare alternativ till den vedeldade ugnen. +tile.electric_furnace_tier2.description=Ljusbågsugnen överträffar både den traditionella samt elektriska ugnen. +tile.enclosed.aluminum_wire.name=Lufttätande aluminiumledning +tile.enclosed.heavy_aluminum_wire.name=Förstärkt lufttätande aluminiumledning +tile.enclosed.copper_cable.name=Lufttätande kopparledning +tile.enclosed.description=Lufttäta block används huvudsakligen till byggnation av rymdbaser. +tile.enclosed.glass_fibre_cable.name=Lufttätande glasfiberledning +tile.enclosed.gold_cable.name=Lufttätande guldledning +tile.enclosed.hv_cable.name=Lufttätande högspänningsledning +tile.enclosed.lv_cable.name=Lufttätande tennledning +tile.enclosed.me_cable.name=Lufttätande ME-ledning +tile.enclosed.fluid_pipe.name=Lufttätande syrgasledning +tile.enclosed.pipe_fluids_cobblestone.name=Lufttätande kullerstenvätskeledning +tile.enclosed.pipe_fluids_stone.name=Lufttätande stenvätskeledning +tile.enclosed.pipe_items_cobblestone.name=Lufttätande kullerstentransportledning +tile.enclosed.pipe_items_stone.name=Lufttätande stentransportledning +tile.enclosed.pipe_power_gold.name=Lufttätande guldenergiledning +tile.enclosed.pipe_power_stone.name=Lufttätande stenenergiledning +tile.energy_storage_module_tier1.description=Energilagringsmodulen förvarar stora mängder energi för senare bruk. +tile.energy_storage_module_tier2.description=Energilagringsklustret förvarar större mängder energi för senare bruk. Maximal effekt och kapacitet överträffar sin enklare föregångare. +tile.fallen_meteor.description=Meteoriter hittas oftast på himlakroppar med obetydlig atmosfär. Kan brytas för meteoritjärn. +tile.fallen_meteor.name=Meteorit +tile.fuel.name=Bränsle +tile.fuel_block.name=Fuel ##NEEDS TRANSLATE## +tile.fuel_loader.description=Bränslepumpen stationeras intill en raketramp eller annan fordonstation. +tile.fuel_loader.name=Bränslepump +tile.glowstone_torch.description=Glödstensfacklor används i syrefattiga miljöer där vanliga facklor inte brinner. +tile.glowstone_torch.name=Glödstensfackla +tile.landing_pad.buggy_fueler.name=Månbilstationplatta +tile.landing_pad.cargo_pad.name=Lastraketramp +tile.landing_pad.description=Raketrampsplattor markmonterade i en 3x3-kvadrat bildar en komplett raketramp. Bränslepump, lastare och raketfjärrstyrare placeras intill. +tile.landing_pad.landing_pad.name=Raketrampsplatta +tile.landing_pad_full.name=Raketramp +tile.machine.0.name=Kolgenerator +tile.machine.1.name=Energilagringsmodul +tile.machine.2.name=Elugn +tile.machine.3.name=Plåtmaskin +tile.machine.7.name=Ljusbågsugn +tile.machine.8.name=Energilagringskluster +tile.machine2.4.name=Elplåtmaskin +tile.machine2.5.name=Kretskortstillverkare +tile.machine2.6.name=Syrgaslagringsmodul +tile.moon_stairs_brick.name=Månhålestenstrappa +tile.moon_stairs_stone.name=Månstenstrappa +tile.ore_copper.name=Kopparmalm +tile.ore_tin.name=Tennmalm +tile.oxygen_compressor.0.name=Syrgastapp +tile.oxygen_compressor.1.name=Syrgaskompressor +tile.oxygen_compressor.description=Syrgastappen förser en syrgastank med påfyllning från ett inbyggt lagringskärl. +tile.oxygen_decompressor.description=Syrgaskompressorn länsar en syrgastank till ett inbyggt lagringskärl. +tile.oxygen_detector.description=Syredetektorn avger en rödstensignal när den omges av syre. +tile.oxygen_detector.name=Syredetektor +tile.oxygen_pipe.description=Syrgasledningar överför syrgas från en maskins lagringskärl till en annans. +tile.oxygen_pipe.name=Syrgasledning +tile.oxygen_storage_module.description=Syrgaslagringsmodulen förvarar stora mängder syrgas för senare bruk. +tile.parachest.description=Fallskärmskistor faller från himlen efter landning på planeter med tätare atmosfär. Inehåller raketdelar, bränsle samt nyttolast från den tidigare avfyrningen. +tile.parachest.name=Fallskärmskista +tile.refinery.description=Oljeraffinaderiet omvandlar elektricitet och råolja till bränsle för raketer och andra fordon. +tile.refinery.name=Oljeraffinaderi +tile.rocket_workbench.description=Rymdteknikstället ger möjlighet att tillverka många olika avancerade delar och fordon. Nya ritningar läggs till allteftersom. +tile.rocket_workbench.name=Rymdteknikställ +tile.sapling2.birch.name=Björkplanta +tile.sapling2.jungle.name=Djungelträdplanta +tile.sapling2.oak.name=Ekplanta +tile.sapling2.spruce.name=Granplanta +tile.sealer.description=Andningsklimatsystemet tillhandahåller ett luftätt utrymme med andningsbar atmosfär. +tile.sealer.name=Andningsklimatsystem +tile.slab_gc_half.moon_bricks_slab.name=Månhålestensplatta +tile.slab_gc_half.moon_slab.name=Månstensplatta +tile.slab_gc_half.tin_slab_1.name=Dekorerad tennplatta +tile.slab_gc_half.tin_slab_2.name=Dekorerad tennplatta +tile.solar.advanced_solar.name=Avancerad solpanel +tile.solar.basic_solar.name=Enkel solpanel +tile.solar_adv.description=En avancerad solpanel omvandlar solljus till electricitet som lagras för senare ändamål. Har en rörlig led för att aktivt förse panelen en optimal vinkel. +tile.solar_basic.description=En enkel solpanel omvandlar solljus till elecricitet som lagras för senare ändamål. Funkar bäst i dirket solljus. +tile.space_station_base.name=Rymdstationsmall +tile.spin_thruster.description=Styrraketer försätter en rymdstation i snurr. +tile.spin_thruster.name=Styrraket +tile.telemetry.description=Samlar in användbar fjärrdata från fordon, spelare och varelser. Placeras lämpligast nära en bildskärm. Använd frekvensmodul för att skapa fjärrbindning. +tile.telemetry.name=Fjärrmätare +tile.tin_stairs_1.name=Dekorerad tenntrappa +tile.tin_stairs_2.name=Dekorerad tenntrappa +tile.treasure_chest.description=Månskattkistor förekommer i slutet på månhålor. Den tillhörande nyckeln vaktas av månhålans härskare. +tile.treasure_chest.name=Månskattkista +tile.unlit_torch.name=Fackla +tile.unlit_torch_stone.name=Stone Torch ##NEEDS TRANSLATE## +tile.unlit_torch_lit.name=Fackla +tile.unlit_torch_stone_lit.name=Stone Torch ##NEEDS TRANSLATE## +tile.view_screen.description=Några bildskärmar till rymdbasen sätter pricken över i:et. Högerklicka för att ändra kanal. +tile.view_screen.name=Bildskärm +tile.wall_gc.moon.name=Månstensvägg +tile.wall_gc.moon_bricks.name=Månhålevägg +tile.wall_gc.tin.name=Dekorerad tennvägg diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/th_th.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/th_th.lang new file mode 100644 index 00000000..c55ec994 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/th_th.lang @@ -0,0 +1,762 @@ +checklist.create_grapple.key=สร้างตะขอเกี่ยว +checklist.equip_oxygen_suit.key=สวมชุดออกซิเจน +checklist.equip_parachute.key=ใส่ร่มชูชีพ +command.gcastrominer.count=จำนวนแอสโทรไมน์เนอร์ของผู้เล่น %s คือ %s +commands.emergencykit=%s ได้ให้ชุดอุปกรณ์ฉุกเฉิน! +commands.dimensionteleport=%s ถูกส่งไปยังชั้นบรรยากาศ %s +commands.dimensiontp.too_many=การใช้คำสั่งมากเกินไป! การใช้: %s +commands.gcenergyunits.invalid_units=ยูนิตไม่ถูกต้อง ในคำสั่ง /GCEnergyUnits การใช้: %s +commands.gcenergyunits.no_units=ต้องระบุยูนิต! การใช้: %s +commands.gchouston.confirm.1=นี่ศูนย์ควบคุมภารกิจ พูดอีกครั้งได้ไหม? +commands.gchouston.confirm.2=(เพื่อยกเลิกภารกิจ, พิมพ์คำสั่ง /gchouston อีกครั้งเพื่อยืนยัน) +commands.gchouston.fail=คำสั่ง /gchouston ใช้ได้ต่อเมื่ออยู่บนอวกาศ (หรือโหมดสร้างสรรค์) +commands.gchouston.help.1=เอ่อ ฮูสตัน เรามีปัญหา.... +commands.gchouston.help.2=(พิมพ์คำสั่ง /gchouston เพื่อยกเลิกภารกิจและกลับโลก) +commands.gchouston.noop=ใช้คำสั่ง /gchouston กับผู้เล่นคนอื่นใช้ได้เฉพาะโอเปอเรเตอร์เท่านั้น +commands.gchouston.success=โอเค สแตนบาย %s กำลังเทเลพอร์ตกลับไปยังโลก +commands.joinrace.no_team=ต้องการกำหนดรายละเอียดของทีม การใช้: %s +commands.ssinvite.not_found=ไม่สามารถหาสถานีอวกาศของเราได้ คุณต้องเดินทางไปหาก่อน! +commands.ssinvite.wrong_usage=การใช้คำสั่งไม่ถูกต้อง! การใช้: %s +commands.ssnewowner.wrong_usage=ไม่สามารถจำแนก ID# ของสถานีอวกาศได้ - มันมีอยู่หรือเปล่า? การใช้: %s +commands.ssuninvite.no_player=ไม่สามารถหาผู้เล่นของ %s บนสถานีอวกาศได้! +container.cargoloader.name=เครื่องขนส่งสินค้า +container.cargounloader.name=เครื่องขนถ่ายสินค้า +container.fuelloader.name=เครื่องเติมเชื้อเพลิง +container.lander.name=ยานลงจอด +container.magneticcrafting.name=โต๊ะเครื่องมือ +container.oxygencollector.name=เครื่องกักเก็บออกซิเจน +container.oxygencompressor.name=เครื่องบีบอัดออกซิเจน +container.oxygendecompressor.name=เครื่องลดความดันออกซิเจน +container.oxygendistributor.name=เครื่องกระจายฟองออกซิเจน +container.oxygensealer.name=เครื่องผนึกออกซิเจน +container.parachest.name=กล่องสัมภาระ +container.refinery.name=เครื่องกลั่นน้ำมัน +container.solaradvanced.name=แผงโซลาร์แอดวานซ์ +container.solarbasic.name=แผงโซลาร์ +container.spaceship.name=จรวด เทียร์ 1 +container.treasurechest.name=กล่องสมบัติ +death.attack.meteor_chunk=%1$s โดนอุกกาบาตชน! +death.attack.oxygen_suffocation=%1$s ขาดออกซิเจน! +death.attack.spaceship_crash=%1$s's จรวดตกบนพื้น โอ้ย! +death.attack.sulphuric_acid=%1$s ละลายในกรดกำมะถัน! +death.attack.thermal=%1$s ลืมใส่เกราะกันความร้อน +dimension.moon.name=ดวงจันทร์ +dimension.overworld.name=โลก +dimension.sun.name=ดวงอาทิตย์ +entity.alien_villager.name=ชาวบ้านอวกาศ +entity.buggy.name=บั๊กกี้ +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=คริปเปอร์กลายพันธุ์ +entity.evolved_skeleton.name=โครงกระดูกกลายพันธุ์ +entity.evolved_skeleton_boss.name=บอสโครงกระดูกกลายพันธุ์ +entity.evolved_spider.name=แมงมุมกลายพันธุ์ +entity.evolved_zombie.name=ผีดิบกลายพันธุ์ +entity.evolved_enderman.name=เอนเดอร์แมนกลายพันธุ์ +entity.evolved_witch.name=แม่มดกลายพันธุ์ +entity.flag.name=ธง +entity.gcflag.name=ธง +entity.gravity_arrow.name=ลูกธนู +entity.lander.name=ยานลงจอด +entity.meteor.name=อุกกาบาต +entity.meteor_chunk.name=เศษอุกกาบาต +entity.oxygen_bubble.name=ฟองออกซิเจน +entity.para_chest.name=กล่องสัมภาระ +entity.rocket_t1.name=จรวด เทียร์ 1 +galaxy.milky_way=กาแลคซีทางช้างเผือก +gc.configgui.allow_liquids_grating=ให้ของเหลวไหลผ่านตะแกรง +gc.configgui.alternate_canister_recipe=เปลี่ยนวิธีการคราฟกระป๋อง +gc.configgui.asteroids_flags=โหมดชาแลนจ์เก็บธง +gc.configgui.asteroids_start=โหมดชาแลนจ์ (เกิดบนดาวเคราะห์น้อย) +gc.configgui.biome_id_base=ID ไบโอมหลักของกาแลคติคคราฟต์ +gc.configgui.detectable_i_ds=ชื่อของบล็อกที่ตรวจพบได้โดยแว่นเซนเซอร์ +gc.configgui.disable_biome_type_registrations=ปิดใช้งานการเรจิสเตอร์ชนิดของ Biome +gc.configgui.disable_cheese_moon=ปิดใช้งานการเจนเนอเรทแร่ชีส +gc.configgui.disable_copper_moon=ปิดใช้งานการเจนเนอเรทแร่ทองแดง +gc.configgui.disable_lander=ปิดใช้งานยานลงจอดบนดวงจันทร์ +gc.configgui.disable_moon_village_gen=ปิดใช้งานการเจนเนอเรทหมู่บ้านบนดวงจันทร์ +gc.configgui.disable_ore_dict_space_metals=ใช้แท่งเหล็กของ GC ในวิธีการคราฟ +gc.configgui.disable_sapphire_moon=ปิดใช้งานการเจนเนอเรทแร่ไพลินดวงจันทร์ +gc.configgui.disable_space_station_creation=ปิดใช้งานการสร้างสถานีอวกาศ +gc.configgui.disable_spaceship_grief=ปิดใช้งานการระเบิดของจรวด +gc.configgui.disable_spaceship_particles=ปิดใช้งานควันจรวด +gc.configgui.disable_tin_moon=ปิดใช้งานการเจนเนอเรทแร่ดีบุก +gc.configgui.disable_update_check=ปิดการตรวจสอบเวอร์ชั่น +gc.configgui.disable_vehicle_camera_changes=Vivecraft: ปิดใช้งาน Third-Person และการซูม +gc.configgui.dungeon_boss_health_mod=พลังชีวิตของบอส +gc.configgui.enable_aluminum_ore_gen=เปิดใช้งานการเจนเนอเรทแร่อลูมิเนียม +gc.configgui.enable_copper_ore_gen=เปิดใช้งานการเจนเนอเรทแร่ทองแดง +gc.configgui.enable_debug=เปิดใช้งานการตรวจหาข้อบกพร่อง +gc.configgui.enable_other_mods_features=เปิดใช้งานการเจนเนอเรทของ Mod อื่น ๆ +gc.configgui.enable_retrogen_oil=เปิดใช้งานการเจนเนอเรทใหม่ของน้ำมันดิบบนโลก +gc.configgui.enable_sealer_edge_checks=ตรวจสอบการผนึกแบบละเอียด +gc.configgui.enable_silicon_ore_gen=เปิดใช้งานการเจนเนอเรทแร่ซิลิคอน +gc.configgui.enable_space_race_manager_popup=เปิดใช้งานป๊อปอัพของการแข่งขันอวกาศ +gc.configgui.enable_thaum_craft_nodes=เปิดใช้งาน Thaumcraft Nodes บนดาวเคราะห์ +gc.configgui.enable_tin_ore_gen=เปิดใช้งานการเจนเนอเรทแร่ดีบุก +gc.configgui.external_oil_gen=ID มิติของการเจนเนอเรทน้ำมัน +gc.configgui.force_overworld_respawn=เปิดใช้งานการเกิดบนโลกเมื่อตายบนดาวเคราะห์ +gc.configgui.hard_mode=ระดับความยากสูงสุด +gc.configgui.id_achiev_base=ID ความสำเร็จพื้นฐาน +gc.configgui.id_dimension_moon=ID มิติของดวงจันทร์ +gc.configgui.id_dimension_overworld=ID มิติของโลก +gc.configgui.id_dimension_overworld_orbit=ID มิติของสถานีอวกาศ +gc.configgui.id_dimension_overworld_orbit_static=ID มิติของสถานีอวกาศ (แบบ Static) +gc.configgui.id_schematic_add_schematic=ID "เพิ่มแผนผัง" +gc.configgui.id_schematic_moon_buggy=ID แผนผังรถบั๊กกี้ +gc.configgui.id_schematic_rocket_t1=ID แผนผังจรวด เทียร์ 1 +gc.configgui.key_override_fuel_level=ตั้งค่าปุ่ม: GUI เชื้อเพลิงจรวด +gc.configgui.key_override_toggle_adv_goggles=ตั้งค่าปุ่ม: เปิดใช้งานแว่นเซนเซอร์แบบแอดวานซ์ +gc.configgui.map_scroll_invert=สลับการเลื่อนแผนที่กาแลคซี +gc.configgui.map_scroll_sensitivity=ความไวของเม้าส์เมื่อเลื่อนแผนที่กาแลคซี +gc.configgui.meteor_block_damage=เปิดใช้งานการทำลายของอุกกาบาต +gc.configgui.meteor_spawn_mod=อัตราการเกิดของอุกกาบาต +gc.configgui.more_stars=เปิดใช้งานการแสดงผลดาวบนท้องฟ้า +gc.configgui.oil_gen_factor=อัตราการเจนเนอเรทของน้ำมัน +gc.configgui.ore_dict_silicon=ชื่อ Ore Dictionary ของซิลิคอน +gc.configgui.other_mod_ore_gen_i_ds=ID มิติให้ Mod อื่น ๆ เจนเนอเรทแร่บนดาวเคราะห์ +gc.configgui.override_capes=เปิดใช้งานผ้าคลุม (สำหรับ Donator เท่านั้น) +gc.configgui.override_map=ตั้งค่าปุ่ม: แผนที่กาแลคซี +gc.configgui.oxygen_indicator_bottom=ย้ายหลอดออกซิเจนไปด้านล่าง +gc.configgui.oxygen_indicator_left=ย้ายหลอดออกซิเจนไปด้านซ้าย +gc.configgui.planet_worldborders=ค่า x,z สูงสุดสำหรับดวงจันทร์ +gc.configgui.quick_mode=เปิดใช้งานโหมดเล่นเกมเร็ว (โหมดง่าย) +gc.configgui.rocket_disable_overworld_return=ปิดใช้งานจรวดไม่ให้กลับไปยังโลก +gc.configgui.rocket_disabled_dimensions=ปิดใช้งานไม่ให้จรวดโหลดมิติ +gc.configgui.rocket_fuel_factor=อัตราการใช้เชื้อเพลิงจรวด +gc.configgui.sealable_i_ds=ID บล็อกที่ผนึกได้ +gc.configgui.space_station_energy_scalar=ปรับแต่งพลังงานโซลาร์ของสถานีอวกาศ +gc.configgui.space_stations_require_permission=เปิดใช้งานการอนุญาตคำสั่งสถานีอวกาศ +gc.configgui.static_loaded_dimensions=เปิดใช้งานให้มิติโหลดตลอดเวลา +gc.configgui.static_loaded_new_ss=โหลดมิติสถานีอวกาศตลอดเวลา (แบบ Static) +gc.configgui.suffocation_cooldown=ระยะถอยหลังจากการหายใจไม่ออก +gc.configgui.suffocation_damage=ค่า Damage จากการหายใจไม่ออก +gc.configgui.title=ตั้งค่ากาแลคติคคราฟต์ +gc.configgui.use_old_fuel_fluid_i_d=ใช้การเรจิสเตอร์ของเหลว fuelgc แบบเก่า +gc.configgui.use_old_oil_fluid_i_d=ใช้การเรจิสเตอร์ของเหลว oilgc แบบเก่า +gc.configgui.whitelist_co_f_h_core_gen=เปิดใช้งานการเจนเนอเรทของ CoFHCore +gui.battery_slot.desc.0=ช่องแบตเตอรี่ วางแบตเตอรี่ที่นี่ +gui.battery_slot.desc.1=หรือเชื่อมต่อจากแหล่งพลังงานอื่น ๆ +gui.bed_fail.message=อ๊ะ! จะเป็นยังไงถ้าออกซิเจนหมดในขณะที่กำลังหลับ ต้องใช้ตู้ไครโอเจนิคเพื่อนอนบนอวกาศเท่านั้น! +gui.buggy.accel.name=เพิ่มความเร็ว +gui.buggy.decel.name=ลดความเร็ว +gui.buggy.inv.name=ช่องเก็บของ / เชื้อเพลิง +gui.buggy.storage_space=พื้นที่เก็บของ +gui.buggy.turn.name=ไปทางซ้าย-ขวา +gui.button.back.name=กลับ +gui.button.disable.name=ปิดใช้งาน +gui.button.disableseal.name=ปิดใช้งานการผนึก +gui.button.enable.name=เปิดใช้งาน +gui.button.enableseal.name=เปิดใช้งานการผนึก +gui.button.hide_dest.name=ซ่อน +gui.button.loadfuel.name=โหลดเชื้อเพลิง +gui.button.loaditems.name=ส่งไอเท็ม +gui.button.next.name=ต่อไป +gui.button.paintapply.name=ใช้สี +gui.button.paintmix.name=ผสมสี +gui.button.paintreset.name=รีเซ็ตสี +gui.button.refine.name=เริ่มกลั่น +gui.button.stoploading.name=หยุดเติม +gui.button.stoprefine.name=หยุดกลั่น +gui.button.stopunloading.name=หยุดถ่ายสินค้า +gui.button.unhide_dest.name=เลิกซ่อน +gui.button.unloaditems.name=ถ่ายสินค้า +gui.button.unlockschematic.name=ปลดล็อคแผนผัง +gui.checkbox.horizontal.name=โหมดแนวนอน +gui.checkbox.invert.name=สลับการทำงาน +gui.checkbox.player_name.name=ชื่อผู้เล่นคือ +gui.checkbox.player_within.name=ผู้เล่นอยู่ภายใน +gui.checkbox.redstone_signal.name=เปิดแอร์ล็อคโดยใช้สัญญาณเรดสโตน +gui.chest.warning.wrongkey=ฉันต้องการกุญแจดันเจี้ยน เทียร์ %s เพื่อปลดล็อคกล่องสมบัติ! +gui.choose_planet.desc.moon=อาศัยอยู่ได้#ไม่มีออกซิเจน#แรงโน้มถ่วง: 18% +gui.choose_planet.desc.overworld=เต็มไปด้วยสิ่งมีชีวิต#อาศัยอยู่ได้#แรงโน้มถ่วง: 100% +gui.chooseplanet.alreadycreated1.name=สถานีอวกาศได้ถูกสร้างแล้ว +gui.chooseplanet.alreadycreated2.name=สร้างแล้ว! +gui.chooseplanet.cannotcreate1.name=ไม่สามารถสร้าง +gui.chooseplanet.cannotcreate2.name=สถานีอวกาศได้ที่นี่! +gui.creative_only.desc=โหมดสร้างสรรค์เท่านั้น +gui.display.nolink=ไม่ได้เชื่อมต่อ +gui.docking_rocket.current_vel.name=ความเร็วของตอนนี้ +gui.docking_rocket.distance_from.name=ระยะทางจากจุดหมาย +gui.docking_rocket.target_vel.name=เป้าหมายของความเร็ว +gui.docking_rocket.warning.name.0=กด %s เพื่อลดความเร็ว +gui.docking_rocket.warning.name.1=กด %s เพื่อเพิ่มความเร็ว +gui.dropbox.player_distance.name.0=1 บล็อก +gui.dropbox.player_distance.name.1=2 บล็อก +gui.dropbox.player_distance.name.2=5 บล็อก +gui.dropbox.player_distance.name.3=10 บล็อก +gui.electric_compressor.desc.0=ดำเนินการ +gui.energy_storage.desc.0=พลังงานที่เก็บไว้ +gui.energy_storage.desc.1=พลังงาน +gui.flag.already_placed=ธงได้วางตรงนี้อยู่แล้ว! +gui.frequency_module.desc.0=สามารถรับเสียง คลื่น +gui.frequency_module.desc.1=และสัญญาณทางไกลได้ +gui.frequencymodule.warning0=ฉันต้องการ +gui.frequencymodule.warning1=ที่จะได้ยินแบบประสิทธิภาพ +gui.fuel_output.desc.0=วางกระป๋องเปล่าลงใน +gui.fuel_output.desc.1=ช่องนี้เพื่อเติมของเหลวจาก +gui.fuel_output.desc.2=ถังเชื้อเพลิง +gui.fuel_tank.desc.0=ถังเชื้อเพลิงต้องการ +gui.fuel_tank.desc.1=เครื่องเติมเชื้อเพลิง +gui.fuel_tank.desc.2=ถังเชื้อเพลิงสามารถเติมได้ +gui.fuel_tank.desc.3=โดยกระป๋องใส่เชื้อเพลิง +gui.fuel_tank.desc.4=ถังเชื้อเพลิง +gui.infinite_item.desc=ไม่จำกัด +gui.lander.velocity=กำลังเข้าสู่ความเร็ว +gui.lander.velocityu=เมตร/วินาที +gui.lander.warning2=กด " +gui.lander.warning3=" เพื่อทำให้ช้าลง! +gui.max_output.desc=ส่งออกสูงสุด +gui.message.addnewsch.name=เพิ่มแผนผังใหม่ +gui.message.apply.name=นำไปใช้ +gui.message.assign_name.name=กำหนดชื่อ +gui.message.atmosphere.name=ชั้นบรรยากาศ +gui.message.back.name=กลับ +gui.message.breed.name=ให้อาหาร +gui.message.bubble_visible.name=เห็นฟองอากาศ +gui.message.can_create_space_station.name=สามารถสร้างสถานีอวกาศได้! +gui.message.cancel.name=ยกเลิก +gui.message.cannot_create_space_station.name=ไม่สามารถสร้างสถานีอวกาศได้ +gui.message.catalog.name=แค็ตตาล็อก +gui.message.click_again.0.name=คลิกอีกครั้งเพื่อขยาย (ดูมุมมองของดวงจันทร์และดาวเทียม) +gui.message.click_again.1.name=คลิกอีกครั้งเพื่อขยาย (ดูมุมมองของดวงจันทร์) +gui.message.click_again.2.name=คลิกอีกครั้งเพื่อขยาย (ดูมุมมองของดาวเทียม) +gui.message.click_again.3.name=คลิกอีกครั้งเพื่อขยาย +gui.message.clicklink=คลิกเพื่อเข้า Galacticraft Wiki +gui.message.create_ss.name=สร้างสถานีอวกาศ +gui.message.daynightcycle.name=รอบกลางวัน - กลางคืน +gui.message.energy=พลังงาน +gui.message.environment.name=สภาวะแวดล้อมเอื้ออำนวย +gui.message.exit.name=ออก +gui.message.fuel.name=เชื้อเพลิง +gui.message.full.name=เต็ม +gui.message.generating.name=พลังงานที่ได้ +gui.message.grow.name=ทำให้โต +gui.message.heal.name=เพิ่มเลือด +gui.message.help1=สำหรับการช่วยเหลือของกาแลคติคคราฟต์ +gui.message.help1a=เพื่อดูข้อความนี้อีกครั้งได้ตลอดเวลา ใช้ +gui.message.help2=แนะนำรายการเกี่ยวกับอวกาศ +gui.message.help3=ช่วยเหลือเรื่องน้ำมัน +gui.message.in.name=เข้า +gui.message.launch.name=ไปยังเป้าหมาย +gui.message.max_energy=พลังงานสูงสุด +gui.message.meansurfacetemp.name=ค่าเฉลี่ยอุณหภูมิบนพื้นผิว +gui.message.moon.atmosphere.0.name=ไม่มี +gui.message.moon.daynightcycle.0.name=29.5 วันโลก +gui.message.moon.meansurfacetemp.0.name=(ด้านสว่าง) 253C +gui.message.moon.meansurfacetemp.1.name=(ด้านมืด) -153C +gui.message.moon.surfacecomposition.0.name=หินบะซอลต์และ +gui.message.moon.surfacecomposition.1.name=ร่องรอยของชีส +gui.message.moon.surfacegravity.0.name=แรงโน้มถ่วง 0.1654 +gui.message.moon.surfacegravity.1.name=(18% ของโลก) +gui.message.of.name=ของ +gui.message.oil.name=น้ำมัน +gui.message.out.name=ออก +gui.message.overworld.atmosphere.0.name=ไนโตรเจนและออกซิเจน +gui.message.overworld.atmosphere.1.name=เอื้อต่อสิ่งมีชีวิต +gui.message.overworld.daynightcycle.0.name=1 วันโลก +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=หิน ดิน และ +gui.message.overworld.surfacecomposition.1.name=กรวด +gui.message.overworld.surfacegravity.0.name=แรงโน้มถ่วง 1.0 +gui.message.overworld.surfacegravity.1.name=(100% ของโลก) +gui.message.prelaunch=ลิสรายการที่สำเร็จ +gui.message.rename.name=เปลี่ยนชื่อ +gui.message.select_ss.name=เลือกสถานีอวกาศ +gui.message.ss_owner.name=เจ้าของ: +gui.message.status.name=สถานะ +gui.message.strengthen.name=เพิ่มความแข็งแรง +gui.message.surfacecomposition.name=องค์ประกอบพื้นผิว +gui.message.surfacegravity.name=แรงโน้มถ่วงบนพื้นผิว +gui.message.thermal_status.name=สถานะเครื่องควบคุมอุณหภูมิ +gui.message.tier.name=เทียร์ %d +gui.message.unnamed.name=ไม่มีชื่อ +gui.missing_core.name.0=MicdoodleCore ไม่ได้อยู่ในโฟลเดอร์ mods +gui.missing_core.name.1=กาแลคติคคราฟต์ผิดพลาดในการโหลด +gui.missing_core.name.2=ปิดไมน์คราฟต์และติดตั้ง MicdoodleCore +gui.missing_core.name.3=คลิกที่นี่เพื่อเปิดเว็บดาวน์โหลด +gui.new_schematic.slot.desc.0=ช่องแผนผังใหม่ +gui.new_schematic.slot.desc.1=คุณสามารถหาแผนผังใหม่ +gui.new_schematic.slot.desc.2=จากการสู้บอสในดันเจี้ยน +gui.new_schematic.slot.desc.3=บนดาวเคราะห์หรือดวงจันทร์ +gui.oil_tank.desc.0=ถังน้ำมัน สามารถเติมได้ +gui.oil_tank.desc.1=โดยใช้กระป๋อง +gui.oxygen.warning=การติดตั้งออกซิเจนผิดพลาด! +gui.oxygen_compressor.slot.desc.0=ช่องบีบอัดถังออกซิเจน วางถังออกซิเจน +gui.oxygen_compressor.slot.desc.1=ตรงนี้เพื่อเติมออกซิเจน +gui.oxygen_decompressor.slot.desc.0=ช่องลดความดันถังออกซิเจน วางถังออกซิเจน +gui.oxygen_decompressor.slot.desc.1=ตรงนี้เพื่อนำออกซิเจนออก +gui.oxygen_slot.desc.0=ช่องของถังออกซิเจน วางกระป๋องออกซิเจน +gui.oxygen_slot.desc.1=ออกซิเจนตรงนี้หรือเชื่อมต่อกับแหล่งเก็บออกซิเจน +gui.oxygen_storage.desc.0=ออกซิเจนที่เก็บไว้ +gui.oxygen_storage.desc.1=ออกซิเจน +gui.oxygen_use.desc=ใช้ออกซิเจน +gui.per_second=/วินาที +gui.player.bpm=bpm +gui.player.food=อาหาร +gui.player.health=พลังชีวิต +gui.player.ouch=โอ้ย!!!! +gui.receiver.cannot_attach=ไม่สามารถวางเครื่องรับลำแสงตรงนี้ได้! +gui.requires_controller.desc=ต้องการเครื่องควบคุมการปล่อยจรวด +gui.rocket.countdown=นับถอยหลัง +gui.rocket.height=ความสูง +gui.rocket.inv.name=ช่องเก็บของ / เชื้อเพลิง +gui.rocket.launch.name=ปล่อยจรวด +gui.rocket.launched=ปล่อยจรวดแล้ว +gui.rocket.on_launchpad=อยู่บนฐานปล่อย +gui.rocket.speed=ความเร็ว +gui.rocket.turn.name=ไปทางซ้าย-ขวา +gui.rocket.updown.name=ขึ้นข้างบน-ลงข้างล่าง +gui.rocket.warning.fuelinsufficient=เชื้อเพลิงไม่เพียงพอสำหรับการปล่อยจรวดแบบอัตโนมัติ! +gui.rocket.warning.launchcontroller=การบินถูกยกเลิก ตรวจสอบที่เครื่องควบคุมการปล่อยจรวด! +gui.rocket.warning.nofuel=ต้องเติมเชื้อเพลิงก่อน เป็นอันดับแรก! +gui.rocket.warning.nogyroscope=คุณไม่สามารถใช้จรวดในมิตินี้ได้! +gui.rocket.warning.noparachute=ฉันไม่มีร่มชูชีพ! ถ้ากดปล่อยจรวดอีกครั้ง เราจะหยุดมันไม่ได้! +gui.rocket_type.0=พื้นที่เก็บของ: 18 +gui.rocket_type.1=พื้นที่เก็บของ: 36 +gui.rocket_type.2=พื้นที่เก็บของ: 56 +gui.rocket_type.3=เชื้อเพลิงเต็ม +gui.seconds=วินาที +gui.sensor.advanced=โหมดแอดวานซ์ +gui.sensor.advancedoff=ปิด +gui.sensor.advancedon=เปิด +gui.show_bubble.desc.0=แสดงฟองอากาศ +gui.skeleton_boss.message=บอสหายไปแล้ว อย่าออกจากห้องระหว่างต่อสู้! กลับเข้าห้องเพื่อให้บอสเกิดใหม่ +gui.space_race.chat.add_success=%s ได้เข้าร่วมการแข่งขันอวกาศ! +gui.space_race.chat.already_part=คุณได้เข้าร่วมการแข่งขันอยู่แล้ว! +gui.space_race.chat.invite_received=รับคำเชิญการแข่งขันของทีมจาก %s +gui.space_race.chat.not_found=ไม่สามารถหาผู้เล่นชื่อ %s ได้ +gui.space_race.chat.remove_success=%s ถูกลบออกจากการแข่งขันอวกาศ +gui.space_race.chat.to_join=เพื่อเข้าร่วม %s ใช้คำสั่ง %s +gui.space_race.coming_soon=กำลังดำเนินการ +gui.space_race.create.add_players.name=เพิ่มผู้เล่น +gui.space_race.create.back.name=กลับ +gui.space_race.create.brush_radius.name=รัศมีบรัช +gui.space_race.create.brush_size.name=ขนาดบรัช +gui.space_race.create.change_color.name.0=เปลี่ยน +gui.space_race.create.change_color.name.1=สี +gui.space_race.create.change_color.name.2=ทีม +gui.space_race.create.close.name=ปิด +gui.space_race.create.customize.name=ปรับแต่งธง +gui.space_race.create.eraser_radius.name=รัศมียางลบ +gui.space_race.create.eraser_size.name=ขนาดยางลบ +gui.space_race.create.global_stats.name=ดูสถานะโดยรวม +gui.space_race.create.invite_player.name=เชิญผู้เล่น +gui.space_race.create.player_radius.name=หมายเหตุ: ผู้เล่นต้องอยู่ภายในระยะ! (25 บล็อก) +gui.space_race.create.rem_players.name=ลบผู้เล่น +gui.space_race.create.remove.name=ลบออก +gui.space_race.create.remove_player.name=ลบผู้เล่น +gui.space_race.create.rename.name=เปลี่ยนชื่อทีม +gui.space_race.create.send_invite.name=ส่งคำขอ +gui.space_race.create.server_stats.name=ดูสถานะของเซิฟเวอร์ +gui.space_race.create.title.name.0=จัดการการแข่งขัน +gui.space_race.create.title.name.1=บนอวกาศ +gui.space_race.create.title.name=จัดการการแข่งขันบนอวกาศ +gui.space_race.join.member_count.name=%d สมาชิก +gui.space_race.join.name=เข้าร่วม +gui.space_race.join.owner.name=เจ้าของ +gui.space_race.join.title.name=เข้าร่วมการแข่งขันบนอวกาศ +gui.space_race.unnamed=ไม่มีชื่อทีม +gui.spacestation.added=คุณได้ทำการเพิ่ม %s's ไปยังสถานีอวกาศแล้ว! +gui.spacestation.addsuccess=เสร็จสิ้นการเพิ่ม %s ไปยังลิสบนสถานีอวกาศ! +gui.spacestation.allow_all_false=คุณได้ปิดไม่ให้ผู้เล่นทุกคนสามารถเข้าถึงสถานีอวกาศได้แล้ว! +gui.spacestation.allow_all_true=คุณได้เปิดให้ผู้เล่นทุกคนสามารถเข้าถึงสถานีอวกาศได้แล้ว! (ใช้ /ssinvite -all เพื่อยกเลิก) +gui.spacestation.changesuccess=เปลี่ยนเจ้าของสถานีอวกาศจาก %s เป็น %s +gui.spacestation.playername=<ชื่อผู้เล่น> +gui.spacestation.removesuccess=เสร็จสิ้นการลบ %s จากลิสสถานีอวกาศ! +gui.spacestation.to_allow_entry=เพื่ออนุญาตให้ผู้เล่นคนอื่น ๆ เข้าสถานีอวกาศนี้ได้! +gui.spacestation.type_command=ชนิด +gui.status.active.name=กำลังทำงาน +gui.status.air_lock_closed.name=แอร์ล็อคปิด +gui.status.air_lock_open.name=แอร์ล็อคเปิด +gui.status.blockedfully.name=ไม่เห็นดวงอาทิตย์ +gui.status.blockedpartial.name=เห็นดวงอาทิตย์บางส่วน +gui.status.check_pending.name=อยู่ในระหว่างการตรวจสอบ +gui.status.check_starting.name=เริ่มการตรวจสอบ +gui.status.checking_seal.name=ตรวจสอบการผนึก +gui.status.collecting.name=ออกซิเจนที่ได้ +gui.status.collectingenergy.name=เก็บพลังงาน +gui.status.compressing.name=กำลังบีบอัด +gui.status.disabled.name=ปิดใช้งาน +gui.status.fulltank.name=ถังออกซิเจนเต็ม +gui.status.generating.name=สถานะ +gui.status.hull_heat.name=ความร้อน +gui.status.idle.name=ไม่ทำงาน +gui.status.missingleaves.name=บล็อกใบไม้ไม่พอ +gui.status.missingoxygen.name=ออกซิเจนไม่พอ +gui.status.missingpower.name=ไฟฟ้าไม่พอ +gui.status.missingpower.short.name=ไม่มีไฟฟ้า +gui.status.missingtank.name=ไม่มีถังออกซิเจน +gui.status.nofuel.name=ไม่มีเชื้อเพลิง! +gui.status.noinvtarget.name=เป้าหมายไม่มีช่องเก็บของ! +gui.status.noitems.name=ไม่มีไอเท็ม! +gui.status.nooil.name=ไม่มีน้ำมัน +gui.status.not_available.name=ไม่สามารถใช้ได้ +gui.status.not_generating.name=ไม่ได้ทำงาน +gui.status.notargetload.name=ไม่มีเป้าหมายเพื่อส่ง! +gui.status.notargetunload.name=ไม่มีเป้าหมายเพื่อถ่ายสินค้า! +gui.status.off.name=ปิด +gui.status.on.name=เปิด +gui.status.raining.name=ฝนตก +gui.status.ready.name=พร้อม +gui.status.refining.name=กำลังกลั่น +gui.status.running.name=กำลังทำงาน +gui.status.sealed.name=กำลังผนึก +gui.status.sealerblocked.name=ทางออกของอากาศถูกบล็อก! +gui.status.sun_visible.name=มองเห็นพระอาทิตย์ +gui.status.tank_empty.name=ถังออกซิเจนว่างเปล่า +gui.status.targetempty.name=ยานพาหนะว่างเปล่า! +gui.status.targetfull.name=ยานพาหนะเต็ม! +gui.status.unknown.name=ไม่ทราบ +gui.status.unsealed.name=พื้นที่ใหญ่เกินไป ผนึกไม่ได้ +gui.tank.oxygen_remaining=ออกซิเจนที่เหลือ +gui.telemetry_fail.message=ขั้นแรก ฉันต้องการที่จะติดตามสิ่งมีชีวิตโดยใช้โมดูลวัดความถี่! +gui.telemetry_fail_no_frequency_module.message=ฉันต้องการโมดูลวัดความถี่เพื่อใช้งานกับสิ่งนี้! +gui.telemetry_fail_wearing_it.message=ฉันต้องเอาโมดูลวัดความถี่ออก ถ้าจะลิงค์กับเทเลเมตรี! +gui.telemetry_succeed.message=เทเลเมตรีได้สร้างลิงค์ข้อมูลแล้ว +gui.thermal_slot.desc.0=ช่องของเครื่องควบคุมอุณหภูมิ วางเครื่องควบคุม +gui.thermal_slot.desc.1=อุณหภูมิตรงนี้ (ไม่บังคับ) +gui.thermal_slot.desc.2=หมายเหตุ: ใช้พลังงานจำนวนมาก! +gui.title.air_lock.name=เครื่องควบคุมแอร์ล็อคของ %s's +gui.tracking.message=การติดตามทำงานแล้ว คลิกขวาที่เทเลเมตรี เพื่อเชื่อมต่อลิงค์ +gui.village.warning.no_freq_mod=ฉันต้องใส่โมดูลวัดความถี่เพื่อสื่อสารกับเขา! +gui.warning.invalid_thermal=ไม่มีเกราะกันความร้อน! +gui.warning.noroom=พื้นที่ไม่พอ! +gui.warning=คำเตือน! +item.air_fan.name=ใบพัดออกซิเจน +item.air_vent.name=ช่องระบายออกซิเจน +item.basic_item.ambient_thermal_controller.name=เครื่องควบคุมอุณหภูมิ +item.basic_item.canned_food.name=กระป๋องอาหาร +item.basic_item.compressed_aluminum.name=แผ่นอลูมิเนียม +item.basic_item.compressed_bronze.name=แผ่นบรอนซ์ +item.basic_item.compressed_copper.name=แผ่นทองแดง +item.basic_item.compressed_iron.name=แผ่นเหล็ก +item.basic_item.compressed_steel.name=แผ่นเหล็กกล้า +item.basic_item.compressed_tin.name=แผ่นดีบุก +item.basic_item.dehydrated_apple.name=แอปเปิ้ลแห้ง +item.basic_item.dehydrated_carrot.name=แครอทแห้ง +item.basic_item.dehydrated_melon.name=แตงโมแห้ง +item.basic_item.dehydrated_potato.name=มันฝรั่งแห้ง +item.basic_item.frequency_module.name=โมดูลวัดความถี่ +item.basic_item.ingot_aluminum.name=แท่งอลูมิเนียม +item.basic_item.ingot_bronze.name=แท่งบรอนซ์ +item.basic_item.ingot_copper.name=แท่งทองแดง +item.basic_item.ingot_steel.name=แท่งเหล็กกล้า +item.basic_item.ingot_tin.name=แท่งดีบุก +item.basic_item.raw_silicon.name=ซิลิคอนดิบ +item.basic_item.solar_module_0.name=โมดูลโซลาร์แบบเดี่ยว +item.basic_item.solar_module_1.name=แผงโซลาร์แบบเต็ม +item.basic_item.wafer_advanced.name=แผ่นวงจรขั้นสูง +item.basic_item.wafer_basic.name=แผ่นวงจรธรรมดา +item.basic_item.wafer_solar.name=แผ่นวงจรโซลาร์ +item.battery.name=แบตเตอรี่ +item.bucket_fuel.name=ถังเชื้อเพลิง +item.bucket_oil.name=ถังน้ำมัน +item.buggy.name=บั๊กกี้ +item.buggymat.seat.name=ที่นั่งบั๊กกี้ +item.buggymat.storage.name=กล่องเก็บของบั๊กกี้ +item.buggymat.wheel.name=ล้อบั๊กกี้ +item.canister.copper.name=กระป๋องทองแดง +item.canister.tin.name=กระป๋องดีบุก +item.canvas.name=ผ้าใบ +item.cheese_block.name=บล็อกชีส +item.cheese_curd.name=เศษชีส +item.compressed_meteoric_iron.name=แผ่นเหล็กอุกกาบาต +item.dungeonfinder.name=เครื่องหาดันเจี้ยน +item.empty_liquid_canister.name=กระป๋องเปล่า +item.emergency_kit.description=คลิกขวาเพื่อสวมใส่เกียร์ออกซิเจนและ ของสำคัญ คำเตือน: ใช้ครั้งเดียว! +item.emergency_kit.name=ชุดอุปกรณ์ฉุกเฉิน +item.engine.tier1booster.name=บูสเตอร์ เทียร์ 1 +item.engine.tier1engine.name=เครื่องยนต์จรวด เทียร์ 1 +item.flag.name=ธง +item.food.cheese_slice.name=ชีสแผ่น +item.food.burger_bun.name=ขนมปังเบอร์เกอร์ +item.food.beef_patty_raw.name=เนื้อบด (ดิบ) +item.food.beef_patty_cooked.name=เบอร์เกอร์เนื้อ (สุก) +item.food.cheeseburger.desc=นักบินอวกาศชอบชีสเบอร์เกอร์! เป็นอาหารที่กินแล้วจุใจ +item.food.cheeseburger.name=ชีสเบอร์เกอร์ +item.food.canned_beef.name=เนื้อกระป๋อง +item.fuel.name=เชื้อเพลิง +item.fuel_canister.name=กระป๋องเชื้อเพลิง +item.fuel_canister_partial.name=กระป๋องเชื้อเพลิง +item.heavy_plating.name=แผ่นโลหะทนทาน +item.hot_description.name=ร้อน +item.ic2compat.ore_crushed_alu.name=แร่อลูมิเนียมบด +item.ic2compat.ore_purified_alu.name=แร่อลูมิเนียมบดบริสุทธิ์ +item.ic2compat.dust_alu.name=ผงอลูมิเนียม +item.ic2compat.dust_small_titanium.name=ผงไทเทเนียมขนาดเล็ก +item.infinite_battery.name=แบตเตอรี่ไม่จำกัด +item.infinite_oxygen.name=กระป๋องออกซิเจนไม่จำกัด +item.key.t1.name=กุญแจดันเจี้ยน เทียร์ 1 +item.lunar_sapphire.description=ไพลินดวงจันทร์เป็นหน่วยสกุลเงินที่ใช้ แลกเปลี่ยนกับชาวบ้านอวกาศ +item.lunar_sapphire.name=ไพลินดวงจันทร์ +item.meteor_chunk.name=เศษอุกกาบาต +item.meteor_chunk_hot.name=เศษอุกกาบาต +item.meteoric_iron_ingot.name=แท่งเหล็กอุกกาบาต +item.meteoric_iron_raw.name=เหล็กอุกกาบาตดิบ +item.nose_cone.name=กรวยจรวด +item.oil_canister.name=กระป๋องน้ำมัน +item.oil_canister_partial.name=กระป๋องน้ำมัน +item.oil_extractor.name=เครื่องสกัดน้ำมัน +item.oxygen_concentrator.name=หัวเก็บออกซิเจน +item.oxygen_gear.name=เกียร์ออกซิเจน +item.oxygen_mask.name=หน้ากากออกซิเจน +item.oxygen_tank_heavy_empty.name=ถังออกซิเจนเปล่าขนาดใหญ่ +item.oxygen_tank_heavy_full.name=ถังออกซิเจนขนาดใหญ่ +item.oxygen_tank_light_empty.name=ถังออกซิเจนเปล่าขนาดเล็ก +item.oxygen_tank_light_full.name=ถังออกซิเจนขนาดเล็ก +item.oxygen_tank_med_empty.name=ถังออกซิเจนเปล่าขนาดปานกลาง +item.oxygen_tank_med_full.name=ถังออกซิเจนขนาดปานกลาง +item.parachute_black.name=ร่มชูชีพสีดำ +item.parachute_blue.name=ร่มชูชีพสีฟ้า +item.parachute_brown.name=ร่มชูชีพสีน้ำตาล +item.parachute_darkblue.name=ร่มชูชีพสีน้ำเงิน +item.parachute_darkgray.name=ร่มชูชีพสีเทา +item.parachute_darkgreen.name=ร่มชูชีพสีเขียว +item.parachute_gray.name=ร่มชูชีพสีเทาอ่อน +item.parachute_lime.name=ร่มชูชีพสีเขียวมะนาว +item.parachute_magenta.name=ร่มชูชีพสีม่วงแดง +item.parachute_orange.name=ร่มชูชีพสีส้ม +item.parachute_pink.name=ร่มชูชีพสีชมพู +item.parachute_plain.name=ร่มชูชีพ +item.parachute_purple.name=ร่มชูชีพสีม่วง +item.parachute_red.name=ร่มชูชีพสีแดง +item.parachute_teal.name=ร่มชูชีพสีฟ้าเขียว +item.parachute_yellow.name=ร่มชูชีพสีเหลือง +item.rocket_fins.name=ปีกจรวด +item.rocket_t1.name=จรวด เทียร์ 1 +item.schematic.name=แผนผังโต๊ะทำงานนาซ่า +item.sensor_glasses.name=แว่นเซนเซอร์ +item.sensor_lens.name=เลนส์เซนเซอร์ +item.standard_wrench.name=ประแจ +item.steel_axe.name=ขวานแบบทนทาน +item.steel_boots.name=รองเท้าแบบทนทาน +item.steel_chestplate.name=เสื้อเกราะแบบทนทาน +item.steel_helmet.name=หมวกแบบทนทาน +item.steel_hoe.name=จอบแบบทนทาน +item.steel_leggings.name=กางเกงแบบทนทาน +item.steel_pickaxe.name=อีเต้อแบบทนทาน +item.steel_pole.name=เสาเหล็กกล้า +item.steel_shovel.name=พลั่วแบบทนทาน +item.steel_sword.name=ดาบแบบทนทาน +item.tier1.desc=เทียร์ 1 +item_desc.powerdraw.name=พลังงานที่ต้องการ: %s /วินาที +item_desc.shift.name=กด %s สำหรับคำอธิบาย +item_group.galacticraft_blocks=บล็อกกาแลคติคคราฟต์ +item_group.galacticraft_items=ไอเท็มกาแลคติคคราฟต์ +jei.arc_lamp.info=แสงจะส่องสว่างไปยังทิศทางที่หันไป วางบนที่สูงเพื่อให้ได้ประสิทธิภาพ \nที่ดีเยี่ยม! หมุนได้โดยใช้ประแจ +jei.electric_compressor.info=เครื่องบีบอัดไฟฟ้า ประสิทธิภาพเพื่มขึ้นเมื่อเป็นเทียร์ 2 สามารถใช้ท่อดูดเพื่อเติมของหรือเอาของออกได้ +jei.electric_compressor.appeng.info=สำหรับการทำระบบอัตโนมัติด้วย AE2 ตั้งค่า Recipe ด้วยแท่งเหล็กจากม็อดอื่น ๆ ดูได้ที่ https://goo.gl/BwY15G สำหรับข้อมูลเพิ่มเติม +jei.fluid_pipe.info=ท่อสำหรับส่งของเหลวหรือก๊าซ ปั๊มของเหลวออกจากถังเก็บ โดยการใช้ประแจเพื่อเปลี่ยนเป็น 'โหมดดึง' \nท่อที่อยู่ในโหมดดึงจะไม่สามารถเติมของเหลวในถังหรือเครื่องมือได้ จำเป็นต้องทำท่อส่งให้ห่างจากตัวบล็อก 2 บล็อก! +jei.fuel_loader.info=วางไว้ใกล้กับฐานปล่อยจรวด เพื่อเติมเชื้อเพลิงให้กับจรวดที่อยู่บนฐาน เป็นหัวใจสำคัญของการท่องอวกาศ รวมไปถึงการกับมายังโลกด้วย! +jei.magnetic_crafting.info=สามารถใช้ท่อดูดเพื่อทำ Auto-craft ได้จากวิธีการคราฟอันล่าสุดที่คราฟออกมาแล้ว +jei.oxygen_collector.info=กักเก็บออกซิเจนจากโลกหรือใบไม้หรือ พืชที่อยู่ใกล้ ๆ ต่อท่อเพื่อส่งออกซิเจนไปยังเครื่องบีบอัดออกซิเจน เครื่องกระจายฟองออกซิเจนหรือเครื่องผนึก ออกซิเจน +jei.oxygen_distributor.info=สร้างฟองอากาศในอวกาศเพื่อให้ผู้เล่น (และสิ่งมีชีวิตอื่น ๆ) สามารถหายใจได้ เติมออกซิเจนได้จากเครื่องกักเก็บออกซิเจน หรือโมดูลเก็บออกซิเจน +jei.oxygen_sealer.info=วางเพื่อเติมอากาศในห้อง เติมออกซิเจนได้จากเครื่องกักเก็บออกซิเจน หรือโมดูลเก็บออกซิเจน ผนังในห้องจะต้องเป็นของแข็ง \nสามารถหารอยรั่วได้โดยใช้แว่นเซนเซอร์! \nขนาดห้องสูงสุดสำหรับเครื่องผนึกออกซิเจนคือ 10x10x8 \nห้องขนาดใหญ่ต้องใช้เครื่องผนึกออกซิเจน หลายเครื่อง! +jei.wrench.info=เครื่องมือในกาแลคติคคราฟต์ส่วนใหญ่สามารถสับเปลี่ยนทิศได้โดยคลิกขวาที่เครื่องมือ \nและเครื่องมือไฟฟ้าส่วนใหญ่สามารถเปลี่ยน ทิศทางการต่อพลังงานได้โดยกด Shift และคลิกขวา +keybind.map.name=แผนที่กาแลคซี +keybind.sensortoggle.name=สลับโหมดแว่นเซนเซอร์ +keybind.spaceshipinv.name=เปิดช่องเก็บของยานอวกาศ +keybind.vehiclebackward.name=ยานพาหนะถอยหลัง +keybind.vehicledown.name=ยานพาหนะลงข้างล่าง +keybind.vehicleforward.name=ยานพาหนะไปข้างหน้า +keybind.vehicleleft.name=ยานพาหนะไปทางซ้าย +keybind.vehicleright.name=ยานพาหนะไปทางขวา +keybind.vehicleup.name=ยานพาหนะขึ้นข้างบน +moon.moon=ดวงจันทร์ +newversion.failed.name=ตรวจสอบการอัพเดทกาแลคติคคราฟต์ล้มเหลว! ลองอีกครั้งใน 15 วินาที +newversion.success.name=พบกาแลคติคคราฟต์เวอร์ชั่นใหม่: +planet.jupiter=ดาวพฤหัส +planet.mercury=ดาวพุธ +planet.neptune=ดาวเนปจูน +planet.overworld=โลก +planet.saturn=ดาวเสาร์ +planet.uranus=ดาวยูเรนัส +planet.venus=ดาวศุกร์ +satellite.spacestation.overworld=สถานีอวกาศ +schematic.moonbuggy.name=บั๊กกี้ดวงจันทร์ +schematic.rocket_t1.name=จรวด เทียร์ 1 +schematic.rocket_t2.name=จรวด เทียร์ 2 +solarsystem.sol=ระบบสุริยะ +star.sol=ดวงอาทิตย์ +tile.air_lock_controller.name=เครื่องควบคุมแอร์ล็อค +tile.air_lock_frame.description=สามารถใช้วางในแนวนอนหรือแนวตั้งได้ และกั้นออกซิเจนไม่ให้ออกไป +tile.air_lock_frame.name=แอร์ล็อค +tile.air_lock_seal.name=กำแพงแอร์ล็อค +tile.aluminum_wire.alu_wire.description=ใช้เชื่อมต่อแหล่งพลังงานไฟฟ้าไปยัง เครื่องมือต่าง ๆ +tile.aluminum_wire.alu_wire.name=สายไฟอลูมิเนียม +tile.aluminum_wire.alu_wire_heavy.description=ใช้เชื่อมต่อแหล่งพลังงานไฟฟ้าไปยัง เครื่องมือต่าง ๆ และส่งพลังงานได้รวดเร็วกว่า +tile.aluminum_wire.alu_wire_heavy.name=สายไฟอลูมิเนียมแรงสูง +tile.aluminum_wire.alu_wire_switch.description=คุณสมบัติเหมือนกับสายไฟอลูมิเนียม สามารถปิดได้โดยใช้เรดสโตน +tile.aluminum_wire.alu_wire_switch.name=สายไฟอลูมิเนียมแบบสวิตซ์ +tile.aluminum_wire.alu_wire_switch_heavy.description=คุณสมบัติเหมือนกับสายไฟอลูมิเนียมแรงสูง สามารถปิดได้โดยใช้เรดสโตน +tile.aluminum_wire.alu_wire_switch_heavy.name=สายไฟอลูมิเนียมแรงสูงแบบสวิตซ์ +tile.arclamp.description=ใช้เพื่อให้แสงสว่างเป็นบริเวณกว้างและ ช่วยให้ม๊อบต่าง ๆ หนีออกไป +tile.arclamp.name=โคมไฟอาร์ค +tile.basic_block_core.block_aluminum_gc.name=บล็อกอลูมิเนียม +tile.basic_block_core.block_copper_gc.name=บล็อกทองแดง +tile.basic_block_core.block_meteoric_iron_gc.name=บล็อกเหล็กอุกกาบาต +tile.basic_block_core.block_tin_gc.name=บล็อกดีบุก +tile.basic_block_core.block_silicon_gc.name=บล็อกซิลิคอน +tile.basic_block_core.deco_block_0.name=บล็อกดีบุกตกแต่ง +tile.basic_block_core.deco_block_1.name=บล็อกกำแพงดีบุก +tile.basic_block_core.ore_aluminum_gc.name=แร่อลูมิเนียม +tile.basic_block_core.ore_copper_gc.name=แร่ทองแดง +tile.basic_block_core.ore_silicon.name=แร่ซิลิคอน +tile.basic_block_core.ore_tin_gc.name=แร่ดีบุก +tile.basic_block_moon.bricks.name=อิฐดันเจี้ยนดวงจันทร์ +tile.basic_block_moon.cheesestone.name=แร่ชีส +tile.basic_block_moon.coppermoon.name=แร่ทองแดง +tile.basic_block_moon.moondirt.name=ดินดวงจันทร์ +tile.basic_block_moon.moongrass.name=หินผิวดวงจันทร์ +tile.basic_block_moon.moonstone.name=หินดวงจันทร์ +tile.basic_block_moon.sapphiremoon.name=แร่ไพลิน +tile.basic_block_moon.tinmoon.name=แร่ดีบุก +tile.buggy_pad.description=ใช้สำหรับวางรถบั๊กกี้เพื่อเติมเชื้อเพลิง จากเครื่องเติมเชื้อเพลิง วางในพื้นที่ 3x3 และไม่สามารถใช้วางจรวดได้ +tile.cargo.loader.name=เครื่องขนส่งสินค้า +tile.cargo.unloader.name=เครื่องขนถ่ายสินค้า +tile.cargo_loader.description=ใช้ส่งของเข้าจรวดและ ยานพาหนะอื่น ๆ ที่มีช่องเก็บของ และจะต้องวางติดกับฐานปล่อยจรวดหรือ ฐานเติมเชื้อเพลิง +tile.cargo_unloader.description=ใช้นำของออกจากจรวดและ ยานพาหนะอื่น ๆ ที่มีช่องเก็บของ และจะต้องวางติดกับฐานปล่อยจรวดหรือฐาน เติมเชื้อเพลิง +tile.cheese.description=สร้างจากชีสบนดวงจันทร์ วางบนพื้นได้และกินได้ +tile.cheese.name=บล็อกชีส +tile.circuit_fabricator.description=ใช้แปลงวัตถุดิบต่าง ๆ ให้เป็นแผ่นซิลิคอนเพื่อใช้สำหรับ สร้างเครื่องมือขั้นสูงและอื่น ๆ +tile.coal_generator.description=ใช้ผลิตพลังงานจากถ่านหิน หรือบล็อกถ่านหิน แต่อาจจะด้อยประสิทธิภาพในการผลิตพลังงาน +tile.collector.description=ใช้เก็บออกซิเจนจากใบไม้ที่อยู่รอบ ๆ +tile.collector.name=เครื่องกักเก็บออกซิเจน +tile.compressor.description=ใช้สำหรับอัดแท่งเหล็กให้เป็นแผ่น และเป็นเครื่องมือที่จำเป็นที่สุด ในกาแลคติคคราฟต์ +tile.compressor_electric.description=ใช้สำหรับอัดแท่งเหล็กให้เป็นแผ่น อัดได้สองแท่งภายในครั้งเดียว และมีประสิทธิภาพกว่าเครื่องบีบอัดธรรมดา +tile.concealed_detector.name=เครื่องตรวจสอบผู้เล่น +tile.concealed_redstone.name=สายไฟเรดสโตนที่ถูกซ่อน +tile.concealed_repeater.name=เครื่องทวนสัญญาณที่ถูกซ่อน +tile.crude_oil.name=น้ำมัน +tile.crude_oil_moving.name=น้ำมันดิบ +tile.crude_oil_still.name=น้ำมันดิบ +tile.deconstructor.description=เครื่องแยกชิ้นส่วนจะแยกชื้นส่วนของจรวดและไอเท็มอื่น ๆ ออกมาเป็นวัสดุรีไซเคิล +tile.dishbase.description=ใช้ติดตามพิกัดของสถานีอวกาศและรับข้อมูลจากสถานีอวกาศที่ไกลโพ้นได้ +tile.dishbase.name=จานดาวเทียมสื่อสาร +tile.distributor.description=ใช้สำหรับผลิตฟองออกซิเจน สามารถใช้เครื่องเก็บออกซิเจนเชื่อมต่อ เครื่องนี้ได้ หายใจได้เมื่ออยู่ในฟองออกซิเจน +tile.distributor.name=เครื่องกระจายฟองออกซิเจน +tile.dummyblock.cryogenic_chamber.name=ตู้ไครโอเจนิค +tile.dummyblock.launch_pad.name=ฐานปล่อยจรวด +tile.dummyblock.nasa_workbench.name=โต๊ะทำงานนาซ่า +tile.dummyblock.solar.name=แผงโซลาร์ +tile.dummyblock.space_station_base.name=ฐานสถานีอวกาศ +tile.electric_furnace_tier1.description=เผาได้รวดเร็วกว่าเตาเผาธรรมดา +tile.electric_furnace_tier2.description=เผาได้รวดเร็วกว่าเตาเผาธรรมดาและเตาไฟฟ้า สามารถผลิตแร่ได้ 2 เท่า +tile.emergency_box.description=วางกล่องชุดอุปกรณ์ฉุกเฉินใกล้กับจุดลงจอดของจรวดที่แรก เปิดเพื่อใช้ชุดอุปกรณ์ฉุกเฉิน และสามารถไล่ mobs ได้! +tile.emergency_box.filled.name=กล่องชุดอุปกรณ์ฉุกเฉิน (พร้อมชุดเครื่องมือ) +tile.emergency_box.name=กล่องชุดอุปกรณ์ฉุกเฉิน +tile.enclosed.aluminum_wire.name=บล็อกที่ผนึกด้วยสายไฟอลูมิเนียม +tile.enclosed.copper_cable.name=บล็อกที่ผนึกด้วยสายเคเบิลทองแดง +tile.enclosed.description=บล็อกที่ผนึกจะใช้สำหรับห้องที่ อากาศไม่สามารถผ่านได้ +tile.enclosed.fluid_pipe.name=บล็อกที่ผนึกด้วยท่อของเหลว +tile.enclosed.glass_fibre_cable.name=บล็อกที่ผนึกด้วยเคเบิลใยแก้ว +tile.enclosed.gold_cable.name=บล็อกที่ผนึกด้วยเคเบิลทอง +tile.enclosed.heavy_aluminum_wire.name=บล็อกที่ผนึกด้วยสายไฟอลูมิเนียมแรงสูง +tile.enclosed.hv_cable.name=บล็อกที่ผนึกด้วยเคเบิลไฟฟ้าแรงสูง +tile.enclosed.lv_cable.name=บล็อกที่ผนึกด้วยเคเบิลแรงดันต่ำ +tile.enclosed.me_cable.name=บล็อกที่ผนึกด้วยเคเบิลโลหะ +tile.enclosed.pipe_fluids_cobblestone.name=บล็อกผนึกด้วยท่อขนส่งหินหยาบแบบกันน้ำ +tile.enclosed.pipe_fluids_stone.name=บล็อกผนึกด้วยท่อขนส่งหินแบบกันน้ำ +tile.enclosed.pipe_items_cobblestone.name=บล็อกผนึกด้วยท่อขนส่งหินหยาบ +tile.enclosed.pipe_items_stone.name=บล็อกผนึกด้วยท่อขนส่งหิน +tile.enclosed.pipe_power_gold.name=บล็อกผนึกด้วยท่อส่งไฟฟ้าด้วยทอง +tile.enclosed.pipe_power_stone.name=บล็อกผนึกด้วยท่อส่งไฟฟ้าด้วยหิน +tile.energy_storage_module_tier1.description=ใช้สำหรับเก็บพลังงานในปริมาณมาก ๆ เพื่อใช้ในภายหลัง +tile.energy_storage_module_tier2.description=ใช้สำหรับเก็บพลังงานในปริมาณมาก ๆ เพื่อใช้ในภายหลัง และส่งพลังงานได้มากกว่า +tile.fallen_meteor.description=พบได้บนดาวเคราะห์และดวงจันทร์ เมื่อขุดมันจะได้ก้อนเหล็กอุกกาบาตดิบ +tile.fallen_meteor.name=อุกกาบาต +tile.fluid_pipe.description=ท่อของเหลวจะส่งของเหลวและก๊าซจากต้นทาง ไปยังปลายทาง ใช้ประแจเพื่อเปลี่ยนโหมด +tile.fluid_pipe.name=ท่อของเหลว +tile.fluid_pipe_pull.description=ท่อของเหลวจะส่งของเหลวและก๊าซจากต้นทางไปยังปลายทาง ใช้ประแจเพื่อเปลี่ยนโหมด +tile.fluid_pipe_pull.name=ท่อของเหลว +tile.fluid_tank.description=ถังเก็บของเหลวใช้สำหรับเก็บของเหลวหรือก๊าซ ไว้ใช้ในภายหลัง +tile.fluid_tank.name=ถังเก็บของเหลว +tile.fuel.name=เชื้อเพลิง +tile.fuel_block.name=เชื้อเพลิง +tile.fuel_loader.description=เมื่อเชื่อมต่อกับฐานปล่อยจรวด เครื่องจะส่งเชื้อเพลิงไปยังจรวด และยานยนต์อื่น ๆ +tile.fuel_loader.name=เครื่องเติมเชื้อเพลิง +tile.glowstone_torch.description=สามารถใช้แทนคบเพลิงธรรมดาได้ เมื่ออยู่บนอวกาศ +tile.glowstone_torch.name=คบเพลิงหินเรืองแสง +tile.grating.name=ตะแกรง +tile.landing_pad.buggy_fueler.name=ฐานเติมเชื้อเพลิงรถบั๊กกี้ +tile.landing_pad.cargo_pad.name=ฐานปล่อยจรวดขนส่งสินค้า +tile.landing_pad.description=ใช้สำหรับวางจรวดเพื่อเติมเชื้อเพลิงจาก เครื่องเติมเชื้อเพลิง วางในพื้นที่ 3x3 เครื่องเติมเชื้อเพลิง เครื่องขนส่งสินค้าและเครื่องควบคุมการปล่อยจรวดจะเชื่อมต่อกับสิ่งนี้ +tile.landing_pad.landing_pad.name=ฐานปล่อยจรวด +tile.landing_pad_full.name=ฐานปล่อยจรวด +tile.machine.0.name=เครื่องกำเนิดไฟฟ้าถ่านหิน +tile.machine.1.name=โมดูลเก็บพลังงาน +tile.machine.2.name=เตาไฟฟ้า +tile.machine.3.name=เครื่องบีบอัด +tile.machine.7.name=เตาอาร์คไฟฟ้า +tile.machine.8.name=โมดูลเก็บพลังงานแบบคลัสเตอร์ +tile.machine2.4.name=เครื่องบีบอัดไฟฟ้า +tile.machine2.5.name=เครื่องประดิษฐ์แผงวงจร +tile.machine2.6.name=โมดูลเก็บออกซิเจน +tile.machine2.10.name=เครื่องแยกชื้นส่วน +tile.machine3.9.name=เครื่องทาสี +tile.magnetic_table.name=โต๊ะงานช่างแบบแม่เหล็ก +tile.magnetic_table.description=ไอเท็มที่วางอยู่จะไม่หล่นออก! ใช้ Shift-Click เพื่อให้ไอเท็มอยู่บนช่องได้ ใช้ท่อรับส่งใส่หรือเอาไอเท็มออกได้ และมันจะจำวิธีการคราฟล่าสุดที่ถูกคราฟ +tile.moon_stairs_brick.name=บันไดกำแพงดันเจี้ยนดวงจันทร์ +tile.moon_stairs_stone.name=บันไดหินดวงจันทร์ +tile.ore_copper.name=แร่ทองแดง +tile.ore_tin.name=แร่ดีบุก +tile.oxygen_compressor.0.name=เครื่องบีบอัดออกซิเจน +tile.oxygen_compressor.1.name=เครื่องลดความดันออกซิเจน +tile.oxygen_compressor.description=ใช้โหลดออกซิเจนจากเครื่องและ เติมออกซิเจนไปยังถังออกซิเจน +tile.oxygen_decompressor.description=ใช้สำหรับนำออกซิเจนออกจากถังออกซิเจน +tile.oxygen_detector.description=ใช้ตรวจสอบออกซิเจนเมื่อออกซิเจนอยู่รอบ ๆ และจะปล่อยสัญญาณเรดสโตนออกมา เมื่อมีออกซิเจน +tile.oxygen_detector.name=เครื่องตรวจจับออกซิเจน +tile.oxygen_storage_module.description=ใช้สำหรับเก็บออกซิเจนในปริมาณมาก ๆ เพื่อใช้ในภายหลัง +tile.painter.description=ทาสีให้กับกระจกสูญญากาศ แผงแสงไฟหรืออย่างอื่นที่ทาสีได้! +tile.panel_lighting.description=แผงแสงไฟใช้ในอวกาศ! ใช้ประแจเพื่อเปลี่ยนทิศ เพื่อเปลี่ยนลักษณะ: กด SNEAK จะเปลี่ยนไปกับบล็อกที่เลือกในขณะวาง +tile.panel_lighting_0.name=แผงแสงไฟ (สีเหลี่ยม) +tile.panel_lighting_1.name=แผงแสงไฟ (ไฟฉาย) +tile.panel_lighting_2.name=แผงแสงไฟ (เส้นตรง) +tile.panel_lighting_3.name=แผงแสงไฟ (สลัว) +tile.panel_lighting_4.name=แผงแสงไฟ (สลัว) +tile.parachest.description=กล่องจะตกลงมาจากฟ้าเมื่อยานลงจอดบน ดาวต่าง ๆ เช่น โลก ดาวอังคาร ฯลฯ สิ่งที่มีอยู่ข้างในเป็น จรวด เชื้อเพลิงและสัมภาระที่มาจากการ ปล่อยจรวดก่อนหน้านี้ +tile.parachest.name=กล่องสัมภาระ +tile.platform.description=วาง 2x2 เพื่อสร้างแพลตฟอร์ม แพลตฟอร์มจะยกผู้เล่นไปยังแพลตฟอร์มถัดไป (บนหรือล่าง) กด SNEAK เพื่อลง / JUMP เพื่อขึ้น +tile.platform.name=แพลตฟอร์มไฮดรอลิค +tile.refinery.description=ใช้กลั่นน้ำมันดิบให้เป็นเชื้อเพลิง เพื่อนำไปใช้งานกับจรวดและยานยนต์อื่น ๆ +tile.refinery.name=เครื่องกลั่นน้ำมัน +tile.rocket_workbench.description=ใช้สร้างจรวดและยานยนต์หรือพาหนะอื่น ๆ และสามารถเพิ่มแผนผังใหม่ได้เมื่อสู้บอสในดันเจี้ยนสำเร็จ +tile.rocket_workbench.name=โต๊ะทำงานนาซ่า +tile.sapling2.birch.name=ต้นกล้าเบิร์ช +tile.sapling2.jungle.name=ต้นกล้าไม้ป่าดงดิบ +tile.sapling2.oak.name=ต้นกล้าโอ๊ก +tile.sapling2.spruce.name=ต้นกล้าสปรูซ +tile.sealer.description=ใช้ตรวจสอบผนังที่ล้อมรอบหรือถูกปิดสนิท และในพื้นที่ก็จะถูกเติมด้วยออกซิเจน +tile.sealer.name=เครื่องผนึกออกซิเจน +tile.slab_gc_half.moon_bricks_slab.name=แผ่นอิฐดันเจี้ยนดวงจันทร์ +tile.slab_gc_half.moon_slab.name=แผ่นหินดวงจันทร์ +tile.slab_gc_half.tin_slab_1.name=แผ่นดีบุกตกแต่ง +tile.slab_gc_half.tin_slab_2.name=แผ่นดีบุกตกแต่ง +tile.solar.advanced_solar.name=แผงโซลาร์แอดวานซ์ +tile.solar.basic_solar.name=แผงโซลาร์ +tile.solar_adv.description=ใช้เก็บพลังงานจากแสงอาทิตย์ จะเก็บพลังงานได้เต็มที่เมื่อถึงเที่ยงวัน และแผงโซลาร์จะหันเข้าหาดวงอาทิตย์ โดยอัตโนมัติ +tile.solar_basic.description=ใช้เก็บพลังงานจากแสงอาทิตย์ และเก็บพลังงานได้เต็มที่เมื่อถึงเที่ยงวัน (ไม่สามารถหมุนตามทิศทางของดวงอาทิตย์ได้) +tile.space_glass.description=กระจกสูญญากาศสำหรับบนอวกาศ สามารถทาสีได้ด้วยเครื่องทาสี! +tile.space_glass.clear.description=กระจกสูญญากาศแบบใส สามารถให้มุมมองที่ชัดเจนในใต้น้ำได้ +tile.space_glass.strong.description=กระจกสูญญากาศแข็งแรงและกันแรงระเบิด ทำจากอลูมิเนียมโปร่งใส +tile.space_glass_clear.name=กระจกสูญญากาศ (ใส) +tile.space_glass_vanilla.name=กระจกสูญญากาศ +tile.space_glass_strong.name=กระจกสูญญากาศ (แข็งแรง) +tile.space_station_base.name=ฐานสถานีอวกาศ +tile.spin_thruster.description=ใช้สำหรับสถานีอวกาศ เพื่อทำให้สถานีอวกาศหมุน +tile.spin_thruster.name=สปินทรัสเตอร์ +tile.telemetry.description=สิ่งนี้จะมีประโยชน์สำหรับเก็บข้อมูล จากจรวด ผู้เล่นหรือสิ่งมีชีวิตอื่น ๆ ให้วางติดกับหน้าจอแสดงผล และใช้โมดูลวัดความถี่สร้างลิงค์ข้อมูล +tile.telemetry.name=เทเลเมตรี +tile.tin_stairs_1.name=บันไดดีบุกตกแต่ง +tile.tin_stairs_2.name=บันไดดีบุกตกแต่ง +tile.treasure_chest.description=พบได้ในดันเจี้ยนบนดวงจันทร์และกล่อง จะปลดล็อคได้ต่อเมื่อสู้กับบอสชนะ +tile.treasure_chest.name=กล่องสมบัติ +tile.unlit_torch.name=คบเพลิง +tile.unlit_torch_stone.name=คบเพลิงหิน +tile.unlit_torch_lit.name=คบเพลิง +tile.unlit_torch_stone_lit.name=คบเพลิงหิน +tile.view_screen.description=ใช้แสดงภาพระบบสุริยะ โลก เวลา และตรวจสอบสถานะของสิ่งมีชีวิต คลิกขวาที่บล็อกเพื่อเปลี่ยนการแสดงผล +tile.view_screen.name=หน้าจอแสดงผล +tile.wall_gc.moon.name=กำแพงหินดวงจันทร์ +tile.wall_gc.moon_bricks.name=กำแพงอิฐดันเจี้ยนดวงจันทร์ +tile.wall_gc.tin.name=กำแพงดีบุกตกแต่ง diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/tr_tr.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/tr_tr.lang new file mode 100644 index 00000000..4ba91c0d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/tr_tr.lang @@ -0,0 +1,664 @@ +command.gcastrominer.count=%s adlı kişinin Astro Madenci Makinesi adeti: %s +commands.dimensionteleport=%s şu atmosfere gönderildi%s +commands.dimensiontp.too_many=Çok fazla komut var! Kullanımı: %s +commands.gcenergyunits.invalid_units=Bu ünite için /GCEnergyUnits komutu yanlış. Kullanımı: %s +commands.gcenergyunits.no_units=Üniteyi belirtmeniz gerekir! Kullanımı: %s +commands.joinrace.no_team=Takımı belirtmeniz gerekir! Kullanımı: %s +commands.ssinvite.not_found=Adınıza ait Uzay İstasyonu bulunamadı, ilk önce seyahat et! +commands.ssinvite.wrong_usage=Çok az komut var! Kullanımı: %s +commands.ssnewowner.wrong_usage=Cannot recognise Space Station ID# - does it even exist? Usage: %s ##NEEDS TRANSLATE## +commands.ssuninvite.no_player=%s adlı kişi İstasyon listenizde bulunmuyor! +container.cargoloader.name=Kargo Yükleyici +container.cargounloader.name=Kargo Boşaltıcı +container.fuelloader.name=Yakıt Yükleyicisi +container.lander.name=Uzay Lander +container.oxygencollector.name=Oksijen Toplayıcısı +container.oxygencompressor.name=Oksijen Kompresör +container.oxygendecompressor.name=Oksijen Açıcı +container.oxygendistributor.name=Oksijen Distribütörü +container.oxygensealer.name=Oksijen Mühürleyen +container.parachest.name=Para-Sandık +container.refinery.name=Rafineri +container.solaradvanced.name=Gelişmiş Güneş Paneli +container.solarbasic.name=Basit Güneş Paneli +container.spaceship.name=Tier 1 Roket +container.treasurechest.name=Hazine Sandığı +death.attack.oxygen_suffocation=%1$s oksijen yetersizliğinden öldü! +death.attack.spaceship_crash=%1$s's roket sert bir kaza yaptı. +death.attack.thermal=%1$s termal koruması olmadığı için öldü. +dimension.moon.name=Ay +dimension.overworld.name=Dünya +dimension.sun.name=Güneş +entity.alien_villager.name=Uzaylı Köylü +entity.buggy.name=Buggy +entity.celestial_screen.name=Celestial Screen +entity.evolved_creeper.name=Gelişmiş Creeper +entity.evolved_skeleton.name=Gelişmiş İskelet +entity.evolved_skeleton_boss.name=Gelişmiş İskelet Patronu +entity.evolved_spider.name=Gelişmiş Örümcek +entity.evolved_zombie.name=Gelişmiş Zombi +entity.flag.name=Bayrak +entity.gcflag.name=Bayrak +entity.gravity_arrow.name=Ok +entity.lander.name=Uzay Lander +entity.meteor.name=Meteor +entity.meteor_chunk.name=Meteor Parçası +entity.oxygen_bubble.name=Oksijen Kabarcığı +entity.para_chest.name=Para Sandık +entity.rocket_t1.name=Tier 1 Roket +galaxy.milky_way=Samanyolu +gc.configgui.alternate_canister_recipe=Alternate Canister Recipe +gc.configgui.asteroids_start=โหมดท้าทาย (เริ่มที่ดาวเคราะห์น้อย) +gc.configgui.biome_id_base=Biyom ID GC Modu İçin Başlangıçı +gc.configgui.detectable_i_ds=Algılanabilr ID'ler +gc.configgui.disable_cheese_moon=Ay Peynirini Yaratmasını Kapat +gc.configgui.disable_copper_moon=Ayda Bakır Yaratmasını Kapat +gc.configgui.disable_lander=Ay Lander'ını Kapat +gc.configgui.disable_moon_village_gen=Ayda Köy Yaratmasını Kapat +gc.configgui.disable_space_station_creation=Uzay İstasyonu Yaratmasını Kapat +gc.configgui.disable_spaceship_grief=Roket Patlamasını Kapat +gc.configgui.disable_spaceship_particles=Rokettin Partiküllerini Gizle +gc.configgui.disable_tin_moon=Ayda Kalay Yaratmasını Kapat +gc.configgui.disable_update_check=ปิดการตรวจสอบเวอร์ชั่น +gc.configgui.dungeon_boss_health_mod=Zindan Bosu Can Değiştirici +gc.configgui.enable_aluminum_ore_gen=Dünyada Alüminyum Yarat +gc.configgui.enable_copper_ore_gen=Dünyada Bakır Yarat +gc.configgui.enable_debug=Debug Mesajlarını Konsolda Göster +gc.configgui.enable_other_mods_features=Diğer Modların Madenlerini Yarat +gc.configgui.enable_retrogen_oil=Dünyadaki Her Yere Ham Petrol +gc.configgui.enable_sealer_edge_checks=Mühürlü Odayı Kontrol Et +gc.configgui.enable_silicon_ore_gen=Dünyada Silikon Yarat +gc.configgui.enable_thaum_craft_nodes=ThaumCraft, Bir Şeyler Yaratmasına İzin Ver +gc.configgui.enable_tin_ore_gen=Dünyada Kalay Yarat +gc.configgui.external_oil_gen=Harici Ham Petrol Yaratma +gc.configgui.force_overworld_respawn=Dünyayı Yeniden Yarat +gc.configgui.hard_mode=Zor Mod +gc.configgui.id_achiev_base=Başarı Başlangıç ID'si +gc.configgui.id_dimension_moon=Ay Boyut ID'si +gc.configgui.id_dimension_overworld_orbit=Uzay İstasyonu Boyut ID'si +gc.configgui.id_dimension_overworld_orbit_static=Uzay İstasyonu Sabit Boyut ID'si +gc.configgui.id_schematic_add_schematic=Şematik ID "Ekle Şematik" +gc.configgui.id_schematic_moon_buggy=Buggy Şematik ID'si +gc.configgui.id_schematic_rocket_t1=Tier 1 Roket Şematik ID'si +gc.configgui.key_override_fuel_level=Tuş Ayarla: Roket Yakıt Arayüzü +gc.configgui.key_override_toggle_adv_goggles=Tuş Ayarla: Advanced Goggles +gc.configgui.map_scroll_invert=Haritada Farenin Tekerleğini Ters Çevir +gc.configgui.map_scroll_sensitivity=Haritadaki Fare Tekerleğinin Hassasiyeti +gc.configgui.meteor_block_damage=Meteor Bloğunun Hasar Alması +gc.configgui.meteor_spawn_mod=Meteor Yaratma Derecesi +gc.configgui.more_stars=Daha Fazla Yıldız Göster +gc.configgui.oil_gen_factor=Ham Petrol Yaratma Değeri +gc.configgui.ore_dict_silicon=Silikonun Diğer Modlardaki Hali +gc.configgui.other_mod_ore_gen_i_ds=Diğer Modların Madenlerini Gezegenlerde Yarat +gc.configgui.override_capes=Bağışcı Pelerinlerini Göster +gc.configgui.override_map=Tuş Ayarla: Galaksi Haritası +gc.configgui.oxygen_indicator_bottom=Oksijen Göstergesini Aşağıda Göster +gc.configgui.oxygen_indicator_left=Oksijen Göstergesini Solda Göster +gc.configgui.quick_mode=Hızlı Oyun (daha kolay) +gc.configgui.rocket_disable_overworld_return=Roketin Dünyaya Dönmesini Engelle +gc.configgui.rocket_disabled_dimensions=Boyutlarda Roketi Engelle +gc.configgui.rocket_fuel_factor=Roket Yakıt Faktörü +gc.configgui.sealable_i_ds=Mühürlenebilir Bloklar +gc.configgui.space_station_energy_scalar=Uzay İstasyonu Eneji Değiştirici +gc.configgui.space_stations_require_permission=Uzay İstasyonu İzni +gc.configgui.static_loaded_dimensions=Sabit Olan Boyutlar Yüklensin +gc.configgui.suffocation_cooldown=Boğulma Beklemesi +gc.configgui.suffocation_damage=Boğulma Hasarı +gc.configgui.title=Galacticraft Core Ayarları +gc.configgui.whitelist_co_f_h_core_gen=CoFHCore Dünya Yaratmasında İzin Ver +gui.battery_slot.desc.0=Pil yuvası, pili buraya koyun +gui.battery_slot.desc.1=veya dışardan güç bağlayın. +gui.bed_fail.message=Uh oh, what if the oxygen runs out when I am asleep? I'll need a Cryogenic Chamber to sleep in space! ##NEEDS TRANSLATE## +gui.buggy.accel.name=Hızlandırmak +gui.buggy.decel.name=Yavaşlatmak +gui.buggy.inv.name=Envanter / Yakıt Durumu +gui.buggy.storage_space=Depolama Alanı +gui.buggy.turn.name=Sol-Sağ +gui.button.back.name=Geri +gui.button.disable.name=Devre Dışı +gui.button.disableseal.name=Mührü Devre Dışı Bırak +gui.button.enable.name=Etkin +gui.button.enableseal.name=Mührü Etkinleştir +gui.button.hide_dest.name=Gizle +gui.button.loadfuel.name=Yakıtı Yükle +gui.button.loaditems.name=İtemları Yükle +gui.button.next.name=İleri +gui.button.refine.name=Rafine Et +gui.button.stoploading.name=Yüklenmeyi Durdur +gui.button.stoprefine.name=Rafine Etmeyi Durdur +gui.button.stopunloading.name=Boşaltmayı Durdur +gui.button.unhide_dest.name=Gizleme +gui.button.unloaditems.name=İtemları Boşalt +gui.button.unlockschematic.name=Şematik Kilidini Aç +gui.checkbox.horizontal.name=Yatay Modu +gui.checkbox.invert.name=Seçimin Tersine +gui.checkbox.player_name.name=Oyuncu adı +gui.checkbox.player_within.name=Oyuncu yakınlığı +gui.checkbox.redstone_signal.name=Kızıltaş Sinyalini Aç +gui.chest.warning.wrongkey=Tier %s için zindandan yeni bir şematik bulun! +gui.choose_planet.desc.moon=Yaşanabilir#Oksijen Bulunmuyor#Yerçekimi: %18 +gui.choose_planet.desc.overworld=Hayat Dolu#Yaşanabilir#Yerçekimi: %100 +gui.chooseplanet.alreadycreated1.name=Uzay istasyonu zaten var +gui.chooseplanet.alreadycreated2.name=Yaratıldı! +gui.chooseplanet.cannotcreate1.name=Uzaya yaratamazsınız +gui.chooseplanet.cannotcreate2.name=Burada İstasyon! +gui.creative_only.desc=Sadece Yaratıcı Modu +gui.display.nolink=ไม่ได้เชื่อมต่อ +gui.docking_rocket.current_vel.name=Şu Anki Hız +gui.docking_rocket.distance_from.name=Hedef Uzaklık +gui.docking_rocket.target_vel.name=Hedef Hız +gui.docking_rocket.warning.name.0=%s Tuşuna Basarak Yavaşlatın +gui.docking_rocket.warning.name.1=%s Tuşuna Basarak Hızlandırın +gui.dropbox.player_distance.name.0=1 Metre +gui.dropbox.player_distance.name.1=2 Metre +gui.dropbox.player_distance.name.2=5 Metre +gui.dropbox.player_distance.name.3=10 Metre +gui.electric_compressor.desc.0=İlerleme +gui.energy_storage.desc.0=Enerji Deposu +gui.energy_storage.desc.1=Enerji +gui.flag.already_placed=Zaten bayrak bulunuyor! +gui.frequency_module.desc.0=Zayıf sesleri alabilirsiniz +gui.frequency_module.desc.1=dalgaları ve uzak sinyalleride +gui.frequencymodule.warning0=Burada düzgün duymak için +gui.frequencymodule.warning1=gerekir. +gui.fuel_output.desc.0=Buraya boş sıvı bidonu koyun +gui.fuel_output.desc.1=koyduğunuz sıvı bidonu +gui.fuel_output.desc.2=yakıt tankını boşaltacak +gui.fuel_tank.desc.0=Yakıt Tankı. Yakıt +gui.fuel_tank.desc.1=yükleyicisi ile +gui.fuel_tank.desc.2=Yakıt tankına +gui.fuel_tank.desc.3=yakıt bidonu ile +gui.fuel_tank.desc.4=Yakıt Tankı +gui.infinite_item.desc=Sonsuz +gui.lander.velocity=Giriş Hızı +gui.lander.velocityu=m/s +gui.lander.warning2=Yavaşlamak için " +gui.lander.warning3=" tuşuna basılı tut! +gui.max_output.desc=Maksimum Çıkış +gui.message.addnewsch.name=Yeni Şematik Ekle +gui.message.apply.name=Onayla +gui.message.assign_name.name=Adı Onayla +gui.message.atmosphere.name=Atmosfer +gui.message.back.name=Geri +gui.message.breed.name=Yetiştir +gui.message.bubble_visible.name=Kabarcıklar Görünebilir +gui.message.can_create_space_station.name=Uzay istasyonunu buraya kurabilirsiniz! +gui.message.cancel.name=İptal +gui.message.cannot_create_space_station.name=Uzay istasyonu buraya kurulamaz. +gui.message.catalog.name=Katalog +gui.message.click_again.0.name=Yakınlaştırmak için terkrar tıklayın (aylara ve uydulara bak) +gui.message.click_again.1.name=Yakınlaştırmak için terkrar tıklayın (aylara bak) +gui.message.click_again.2.name=Yakınlaştırmak için terkrar tıklayın (uydulara bak) +gui.message.click_again.3.name=Yakınlaştırmak için terkrar tıklayın +gui.message.clicklink=Galacticraft Wiki'si İçin Tıkla +gui.message.create_ss.name=Yarat +gui.message.daynightcycle.name=Gündüz-Gece Döngüsü +gui.message.energy=Enerji +gui.message.environment.name=Çevresel Kuvvetlendirme +gui.message.exit.name=Çıkış +gui.message.fuel.name=Yakıt +gui.message.full.name=Dolu +gui.message.generating.name=Durum +gui.message.grow.name=Büyüt +gui.message.heal.name=İyileştir +gui.message.help1=Galacticraft yardımı +gui.message.help1a=Bu mesajı her zaman görüyorsanız, komutu kullan: +gui.message.help2=1. Uzay programına katılın +gui.message.help3=2. Ham petrol ile yardım edin +gui.message.in.name=Giriş +gui.message.launch.name=Git +gui.message.max_energy=En Yüksek Enerji +gui.message.meansurfacetemp.name=Ortalama Yüzey Sıcaklığı +gui.message.moon.atmosphere.0.name=Bulunmuyor +gui.message.moon.daynightcycle.0.name=29.5 Dünya Günü +gui.message.moon.meansurfacetemp.0.name=(Aydınlık Taraf) 253C +gui.message.moon.meansurfacetemp.1.name=(Karanlık Taraf) -153C +gui.message.moon.surfacecomposition.0.name=Bazaltik Kaya ve +gui.message.moon.surfacecomposition.1.name=Peynir İzleri +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(%18 dünya) +gui.message.of.name=arasında +gui.message.oil.name=Yağ +gui.message.out.name=Çıkış +gui.message.overworld.atmosphere.0.name=Azot ve Oksijen +gui.message.overworld.atmosphere.1.name=Hayat Desteği +gui.message.overworld.daynightcycle.0.name=1 Dünya Günü +gui.message.overworld.meansurfacetemp.0.name=14C +gui.message.overworld.surfacecomposition.0.name=Taş, toprak, ve +gui.message.overworld.surfacecomposition.1.name=çakıl +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(%100 dünya) +gui.message.prelaunch=Ön fırlatış kontrol listesi +gui.message.rename.name=Yeniden Adlandır +gui.message.select_ss.name=Uzay İstasyonunu Seç +gui.message.ss_owner.name=Sahibi: +gui.message.status.name=Durum +gui.message.strengthen.name=Güçlendir +gui.message.surfacecomposition.name=Yüzey Kompozisyon +gui.message.surfacegravity.name=Yerçekimi +gui.message.thermal_status.name=Sıcaklık Kontrolü +gui.message.tier.name=Tier %d +gui.message.unnamed.name=Adsız +gui.missing_core.name.0=MicdoodleCore mods klasöründe bulunamadı +gui.missing_core.name.1=Bu yüzden Galacticraft yüklenemedi +gui.missing_core.name.2=Minecraft'tı kapatın ve "MicdoodleCore" modunu kurun +gui.missing_core.name.3=Buraya tıklayarak indirme sayfasını açın +gui.new_schematic.slot.desc.0=Yeni şematik yuvası. +gui.new_schematic.slot.desc.1=Yeni şematikler +gui.new_schematic.slot.desc.2=gezegen ve aydaki +gui.new_schematic.slot.desc.3=zindanlarda bulunur. +gui.oil_tank.desc.0=Yağ tankını doldurmak için +gui.oil_tank.desc.1=yağ bidonlarını kullanın +gui.oxygen.warning=Oksijen Kurulumu Geçersiz! +gui.oxygen_compressor.slot.desc.0=Kompresör tank slotu, buraya oksijen +gui.oxygen_compressor.slot.desc.1=tankı koyarak doldurabilirsiniz. +gui.oxygen_decompressor.slot.desc.0=Oksijen Açıcı tank slotu, buraya oksijen +gui.oxygen_decompressor.slot.desc.1=tankı koyarak boşaltabilirsiniz. +gui.oxygen_slot.desc.0=Oksijen slotu, buraya oksijen tankı veya silindiri +gui.oxygen_slot.desc.1=koyun ya da bağlanmış oksijen kaynağı kullan +gui.oxygen_storage.desc.0=Oksijen deposu +gui.oxygen_storage.desc.1=Oksijen +gui.oxygen_use.desc=Oksijeni Kullan +gui.per_second=/s +gui.player.bpm=bpm +gui.player.food=Yemek +gui.player.health=Sağlık +gui.player.ouch=ah!!!! +gui.receiver.cannot_attach=Buraya alıcı takamazsınız! +gui.requires_controller.desc=Fırlatma Kontrolörü Gerekiyor +gui.rocket.countdown=Geri Sayım +gui.rocket.height=Yükseklik +gui.rocket.inv.name=Envanter / Yakıt +gui.rocket.launch.name=Fırlat +gui.rocket.launched=Fırlatıldı +gui.rocket.on_launchpad=Fırlatma Pedinde +gui.rocket.speed=Hız +gui.rocket.turn.name=Sol-Sağ +gui.rocket.updown.name=Yukarı-Aşağı +gui.rocket.warning.nofuel=Yakıtınız bulunmuyor. En yakın zamanda yakıt doldurun. +gui.rocket.warning.nogyroscope=Jiroskop çılgınca dönerken gizemli güçler devreye altındadır! +gui.rocket.warning.noparachute=Paraşütünüz bulunmuyor. Fırlat tuşuna tekrar basarak uçabilirsiniz ama sorun olabilir! +gui.rocket_type.0=Depolama Alanı: 18 +gui.rocket_type.1=Depolama Alanı: 36 +gui.rocket_type.2=Depolama Alanı: 56 +gui.rocket_type.3=Sınırsız Yakıt +gui.seconds=s +gui.sensor.advanced=Gelişmiş Mod +gui.sensor.advancedoff=KAPALI +gui.sensor.advancedon=AÇIK +gui.show_bubble.desc.0=Kabarcıklar Gözükecek +gui.skeleton_boss.message=Yaratık yok oldu, yaratık ile savaşırken odadan ayrılmayın! Odaya tekrar girerek savaşa devam edebilirsiniz. +gui.space_race.chat.add_success=%s, Uzay Yarışna girdiniz. +gui.space_race.chat.already_part=Zaten Uzay Yarışındasınız! +gui.space_race.chat.invite_received=Uzay Yarışı takım davetiyesi %s adlı kişiye gönderildi. +gui.space_race.chat.not_found=Bu oyuncu bulunamıyor: %s +gui.space_race.chat.remove_success=%s, Uzay Yarışından silindiniz. +gui.space_race.chat.to_join=Katılmak için %s bu komutu kullanın %s +gui.space_race.coming_soon=Çok Yakında +gui.space_race.create.add_players.name=Oyuncu ekle +gui.space_race.create.back.name=Geri +gui.space_race.create.brush_radius.name=Fırça Çapı +gui.space_race.create.brush_size.name=Fırça Boyutu +gui.space_race.create.change_color.name.0=Değiştir +gui.space_race.create.change_color.name.1=Takım +gui.space_race.create.change_color.name.2=Renk +gui.space_race.create.close.name=Kapat +gui.space_race.create.customize.name=Bayrağı Düzenle +gui.space_race.create.eraser_radius.name=Silgi Çapı +gui.space_race.create.eraser_size.name=Silgi Boyutu +gui.space_race.create.global_stats.name=Global İstatistiklerine Bak +gui.space_race.create.invite_player.name=Oyuncu Daveti +gui.space_race.create.player_radius.name=Not: Davet edeceğiniz oyuncular yakında olmalı (25 blok) +gui.space_race.create.rem_players.name=Oyuncu sil +gui.space_race.create.remove.name=Sil +gui.space_race.create.remove_player.name=Oyuncu Silici +gui.space_race.create.rename.name=Takım Adını Değiştir +gui.space_race.create.send_invite.name=Davetiye Gönder +gui.space_race.create.server_stats.name=Sunucu İstatistiklerine Bak +gui.space_race.create.title.name=Uzay Yarışı Düzenliyicisi +gui.space_race.create.title.name.0=Uzay Yarışı +gui.space_race.create.title.name.1=düzenliyici +gui.space_race.join.member_count.name=%d oyuncular +gui.space_race.join.name=เข้าร่วม +gui.space_race.join.owner.name=Kurucu +gui.space_race.join.title.name=Uzay Yarışı Düzenliyicisi +gui.space_race.unnamed=Adsız Takım +gui.spacestation.added=İstasyonunuza %s adlı kişiyi eklediniz. +gui.spacestation.addsuccess=İstasyon listensine %s adlı kişi başarıyla eklendi. +gui.spacestation.allow_all_false=Your Space Stations are no longer open to all players! ##NEEDS TRANSLATE## +gui.spacestation.allow_all_true=Your Space Stations are now open to all players! (Use /ssinvite -all to undo this.) ##NEEDS TRANSLATE## +gui.spacestation.changesuccess=Changed Space Station owner from %s to new owner %s. ##NEEDS TRANSLATE## +gui.spacestation.playername= +gui.spacestation.removesuccess=İstasyon listesinden %s adlı kişiyi sildiniz. +gui.spacestation.to_allow_entry=Başka bir oyuncu sizin uzay istasyonunuza giriyor! +gui.spacestation.type_command=Tür +gui.status.active.name=Aktif +gui.status.air_lock_closed.name=Hava Kilidi Kapalı +gui.status.air_lock_open.name=Hava Kilidi Açık +gui.status.blockedfully.name=Güneş Yok +gui.status.blockedpartial.name=Güneş Kısmen Gözüküyor +gui.status.check_pending.name=Bekleme Kontrol Ediliyor +gui.status.check_starting.name=Doğrulama Başlıyor +gui.status.checking_seal.name=Mühür Kontrol Ediliyor +gui.status.collecting.name=Toplanıyor +gui.status.collectingenergy.name=Enerji Toplanıyor +gui.status.compressing.name=Şıkıştırılıyor +gui.status.disabled.name=Kapalı +gui.status.fulltank.name=Oksijen Tankı Tam Dolu +gui.status.generating.name=Üretiliyor +gui.status.hull_heat.name=Yüksek Isı +gui.status.idle.name=Boş +gui.status.missingleaves.name=Yaprak Blokları Yetersiz +gui.status.missingoxygen.name=Yeterli Oksijen Yok +gui.status.missingpower.name=Yeterli Enerji Yok +gui.status.missingtank.name=Oksijen Tankı Doğrulanamadı +gui.status.nofuel.name=Yüklemek İçin Yakıt Yok! +gui.status.noinvtarget.name=Hedefin Envanteri Yok! +gui.status.noitems.name=Yüklemek İçin Item Yok! +gui.status.nooil.name=Petrol Yok +gui.status.not_available.name=N/A +gui.status.not_generating.name=Üretilmiyor +gui.status.notargetload.name=Yüklemek İçin Hedef Yok! +gui.status.notargetunload.name=Boşaltmak İçin Hedef Yok! +gui.status.off.name=Kapalı +gui.status.on.name=Açık +gui.status.raining.name=Yağmurlu +gui.status.ready.name=Hazır +gui.status.refining.name=Rafine Ediliyor +gui.status.running.name=Sürüyor +gui.status.sealed.name=Mühürlü +gui.status.sealerblocked.name=Havalandırma Çıkışı Tıkalı! +gui.status.sun_visible.name=Güneş Gözükmesi +gui.status.tank_empty.name=Oksijen tankı boş +gui.status.targetempty.name=Hedeflenen Araç Boş! +gui.status.targetfull.name=Hedeflenen Araç Dolu! +gui.status.unknown.name=Bilinmeyen +gui.status.unsealed.name=Mühürsüz +gui.tank.oxygen_remaining=Kalan Oksijen +gui.telemetry_fail.message=1. İlk önce Frekans Modülü ile bağlantı yapacağam entity'e bağlamam lazım! (yada giymeyi deniyebilirim!) +gui.telemetry_fail_no_frequency_module.message=Bunu kullanmak için elimde Frekans Modülü olması gerekiyor galiba! +gui.telemetry_fail_wearing_it.message=Frekans Modülünü çıkarmam gerek çünkü Telemetri Ünitesiyle bağlantıya geçmek istiyorum! +gui.telemetry_succeed.message=Telemetri bağlantısı kuruldu. +gui.thermal_slot.desc.0=Sıcaklık boş slota 'Çevre Sıcaklık +gui.thermal_slot.desc.1=Kontrolü' yerleştir (opsiyonel) +gui.thermal_slot.desc.2=Not: Fazla enerji kullanır! +gui.title.air_lock.name=%s Adlı Kişinin Hava Kilidi +gui.tracking.message=Bağlantı başladı. Şimdi, bağlantıyı tamamlamak için Telemetri Ünitesine sağ tıklamam lazım. +gui.warning=UYARI! +gui.warning.invalid_thermal=Termal korumanız geçersizdir! +gui.warning.noroom=Oda Yetersiz! +item.air_fan.name=Oksijen Fan +item.air_vent.name=Oksijen Havalandırması +item.basic_item.ambient_thermal_controller.name=Çevre Sıcaklık Kontrolü +item.basic_item.canned_food.name=Uzay Yiyecekleri +item.basic_item.compressed_aluminum.name=Sıkıştırılmış Alüminyum +item.basic_item.compressed_bronze.name=Sıkıştırılmış Bronz +item.basic_item.compressed_copper.name=Sıkıştırılmış Bakır +item.basic_item.compressed_iron.name=Sıkıştırılmış Demir +item.basic_item.compressed_steel.name=Sıkıştırılmış Çelik +item.basic_item.compressed_tin.name=Sıkıştırılmış Kalay +item.basic_item.dehydrated_apple.name=Susuz Elma +item.basic_item.dehydrated_carrot.name=Susuz Havuç +item.basic_item.dehydrated_melon.name=Susuz Karpuz +item.basic_item.dehydrated_potato.name=Susuz Patates +item.basic_item.frequency_module.name=Frekans Modülü +item.basic_item.ingot_aluminum.name=Alüminyum Külçesi +item.basic_item.ingot_bronze.name=Bronz Külçesi +item.basic_item.ingot_copper.name=Bakır Külçesi +item.basic_item.ingot_steel.name=Çelik Külçesi +item.basic_item.ingot_tin.name=Kalay Külçesi +item.basic_item.raw_silicon.name=Ham Silikon +item.basic_item.solar_module_0.name=Güneş Paneli +item.basic_item.solar_module_1.name=Çoklu Güneş Paneli +item.basic_item.wafer_advanced.name=Gelişmiş Wafer +item.basic_item.wafer_basic.name=Basit Wafer +item.basic_item.wafer_solar.name=Mavi Güneş Wafer'ı +item.battery.name=Pil +item.bucket_fuel.name=Benzin Kovası +item.bucket_oil.name=Ham Petrol Kovası +item.buggy.name=Buggy +item.buggymat.seat.name=Buggy Koltuğu +item.buggymat.storage.name=Buggy Depolama Kutusu +item.buggymat.wheel.name=Buggy Tekerleği +item.canister.copper.name=Bakır Teneke Kutusu +item.canister.tin.name=Kalay Teneke Kutusu +item.canvas.name=Parşomen +item.cheese_block.name=Peynir Bloğu +item.cheese_curd.name=Lor Peynir +item.compressed_meteoric_iron.name=Sıkıştırılmış Meteorik Demir +item.empty_liquid_canister.name=Boş Sıvı Silindiri +item.engine.tier1booster.name=Tier 1 Hızlandırı +item.engine.tier1engine.name=Tier 1 Roket Motoru +item.flag.name=Bayrak +item.fuel.name=Roket Yakıtı +item.fuel_canister.name=Dolu Yakıt Silindiri +item.fuel_canister_partial.name=Kısmen Dolu Yakıt Silindiri +item.heavy_plating.name=Ağır Plaka +item.hot_description.name=Sıcak +item.infinite_battery.name=Sonsuz Pil +item.infinite_oxygen.name=Sonsuz Oksijen Kaynağı +item.key.t1.name=Tier 1 Zindan Anahtarı +item.meteor_chunk.name=Throwable Meteor Chunk +item.meteor_chunk_hot.name=Throwable Meteor Chunk +item.meteoric_iron_ingot.name=Meteorik Demir Külçesi +item.meteoric_iron_raw.name=Ham Meteorik Demir +item.nose_cone.name=Roket Burnu +item.oil_canister.name=Dolu Petrol Silindiri +item.oil_canister_partial.name=Kısmen Dolu Petrol Silindiri +item.oil_extractor.name=Taşınabilir Petrol Çıkarıcı +item.oxygen_concentrator.name=Oksijen Konsantratörü +item.oxygen_gear.name=Oksijen Takımı +item.oxygen_mask.name=Oksijen Maskesi +item.oxygen_tank_heavy_empty.name=Boş Ağır Oksijen Tankı +item.oxygen_tank_heavy_full.name=Ağır Oksijen Tankı +item.oxygen_tank_light_empty.name=Boş Işıklı Oksijen Tankı +item.oxygen_tank_light_full.name=Işıklı Oksijen Tankı +item.oxygen_tank_med_empty.name=Boş Orta Büyüklükte Oksijen Tankı +item.oxygen_tank_med_full.name=Orta Büyüklükte Oksijen Tankı +item.parachute_black.name=Siyah Paraşüt +item.parachute_blue.name=Açık Mavi Paraşüt +item.parachute_brown.name=Kahverengi Paraşüt +item.parachute_darkblue.name=Mavi Paraşüt +item.parachute_darkgray.name=Gri Paraşüt +item.parachute_darkgreen.name=Yeşil Paraşüt +item.parachute_gray.name=Açık Gri Paraşüt +item.parachute_lime.name=Açık Yeşil Paraşüt +item.parachute_magenta.name=Eflatun Paraşüt +item.parachute_orange.name=Turuncu Paraşüt +item.parachute_pink.name=Pembe Paraşüt +item.parachute_plain.name=Paraşüt +item.parachute_purple.name=Mor Paraşüt +item.parachute_red.name=Kırmızı Paraşüt +item.parachute_teal.name=Turkuaz Paraşüt +item.parachute_yellow.name=Sarı Paraşüt +item.rocket_fins.name=Roket Kanatları +item.rocket_t1.name=Tier 1 Roket +item.schematic.name=NASA Çalışma Masası Şematiği +item.sensor_glasses.name=Sensörlü Gözlük +item.sensor_lens.name=Sensör Merceği +item.standard_wrench.name=Standart İngiliz anahtarı +item.steel_axe.name=Ağır Balta +item.steel_boots.name=Ağır Bot +item.steel_chestplate.name=Ağır Zırh +item.steel_helmet.name=Ağır Kask +item.steel_hoe.name=Ağır Çapa +item.steel_leggings.name=Ağır Pantalon +item.steel_pickaxe.name=Ağır Kazma +item.steel_pole.name=Çelik Direk +item.steel_shovel.name=Ağır Kürek +item.steel_sword.name=Ağır Kılıç +item.tier1.desc=Tier 1 +item_desc.powerdraw.name=Gereken enerji: %s /s +item_desc.shift.name=%s tuşuna basarak daha detaylı bilgi +item_group.galacticraft_blocks=Galacticraft Blokları +item_group.galacticraft_items=Galacticraft Itemları +keybind.map.name=Galaksi Haritası +keybind.sensortoggle.name=Sensörlü Gözlük Modunu Değiştirme Tuşu +keybind.spaceshipinv.name=Uzay Gemisinin Envanteri Açma Tuşu +keybind.vehiclebackward.name=Araç Geri Tuşu +keybind.vehicledown.name=Araç Aşağı Tuşu +keybind.vehicleforward.name=Araç İleri Tuşu +keybind.vehicleleft.name=Araç Sol Tuşu +keybind.vehicleright.name=Araç Sağ Tuşu +keybind.vehicleup.name=Araç Yukarı Tuşu +moon.moon=Ay +newversion.failed.name=Galacticraft güncellemesinde hata oluştu! 15 saniye sonra tekrar denenecek +newversion.success.name=Galacticraft yeni versiyon bulundu: +planet.jupiter=Jüpiter +planet.mercury=Merkür +planet.neptune=Neptün +planet.overworld=Dünya +planet.saturn=Satürn +planet.uranus=Uranüs +planet.venus=Venüs +satellite.spacestation.overworld=Dünya Uzay İstasyonu +schematic.moonbuggy.name=Buggy +schematic.rocket_t1.name=Tier 1 Roketi +schematic.rocket_t2.name=Tier 2 Roketi +solarsystem.sol=Güneş Sistemi +star.sol=Yıldız +tile.air_lock_controller.name=Hava Kilidi Kontrolörü +tile.air_lock_frame.description=Hava Kilidi Çerçevesi, Hava Kilidi Kontrollü ile uyumlu çalışır ve tam bir hava kilidi oluşturur. +tile.air_lock_frame.name=Hava Kilidi Çerçevesi +tile.air_lock_seal.name=Hava Kilidi Mühürü +tile.aluminum_wire.alu_wire.description=Alüminyum Tel, enerjiyi uzak mesafelere taşır. +tile.aluminum_wire.alu_wire.name=Alüminyum Tel +tile.aluminum_wire.alu_wire_heavy.description=Ağır Alüminyum Tel, normal Alüminyum Telden daha iyidir ve hızlıdır. +tile.aluminum_wire.alu_wire_heavy.name=Ağır Alüminyum Teli +tile.arclamp.description=Ark Lambası büyük alanları aydınlatmak için kullanılır. +tile.arclamp.name=Ark Lambası +tile.basic_block_core.block_aluminum_gc.name=Alüminyum Blok +tile.basic_block_core.block_copper_gc.name=Bakır Blok +tile.basic_block_core.block_meteoric_iron_gc.name=Katı Meteor Demiri +tile.basic_block_core.block_tin_gc.name=Kalay Blok +tile.basic_block_core.deco_block_0.name=Kalay Dekorasyon Bloğu +tile.basic_block_core.deco_block_1.name=Kalay Dekorasyon Bloğu +tile.basic_block_core.ore_aluminum_gc.name=Alüminyum Cevheri +tile.basic_block_core.ore_copper_gc.name=Bakır Cevheri +tile.basic_block_core.ore_silicon.name=Silikon Cevheri +tile.basic_block_core.ore_tin_gc.name=Kalay Cevheri +tile.basic_block_moon.bricks.name=Ay Zindan Tuğlası +tile.basic_block_moon.cheesestone.name=Peynir Cevheri +tile.basic_block_moon.coppermoon.name=Bakır Cevheri +tile.basic_block_moon.moondirt.name=Ay Toprağı +tile.basic_block_moon.moongrass.name=Ay Çimeni +tile.basic_block_moon.moonstone.name=Ay Taşı +tile.basic_block_moon.tinmoon.name=Kalay Cevheri +tile.buggy_pad.description=Buggy Akaryakıt Pedine yakıt doldurmak için Yakıt Yükleyicisi kullanın. Pedleri 3x3 şeklinde yerleştirin. Bununla roket uçuramazsınız. +tile.cargo.loader.name=Kargo Yükleyici +tile.cargo.unloader.name=Kargo Boşaltıcı +tile.cargo_loader.description=Kargo Yükleyicisi, pedlere bağlanarak roket veya araçlara kargo yükler. +tile.cargo_unloader.description=Kargo Boşaltıcı, pedlere bağlanarak roket veya araçlara kargo boşaltır. +tile.cheese.description=Peynir bloğu, yenilebilir. Peynir Ayda bulunur. +tile.cheese.name=Peynir Bloğu +tile.circuit_fabricator.description=Devre Fabrikatörü basit malzemeleri yapmak için Ham Silikon gereklidir. Gelişmiş makineler için gereklidir. +tile.coal_generator.description=Kömür Jeneratörü, en basit elektrik üretmenin yoludur. Kömür ile çalışır. +tile.collector.description=Oksijen Toplayıcısı, etrafta yaprak veya oksijen varsa oksijen toplar. +tile.collector.name=Oksijen Toplayıcısı +tile.compressor.description=Kompresör, külçeleri şıkıştır. +tile.compressor_electric.description=Elektrikli Kompresör, külçeleri şıkıştır. Normal Kompresörden daha hızlıdır. +tile.crude_oil.name=Ham Petrol +tile.crude_oil_moving.name=Ham Petrol +tile.crude_oil_still.name=Ham Petrol +tile.dishbase.description=İletişim Anteni ile uzay üssünüzün yerini öğrenebilir, uzay üssünüzü uzaktan kontrol edebilirsiniz. +tile.dishbase.name=İletişim Anteni +tile.distributor.description=Oksijen Kabarcık Distribütörünü ortaya koyarak oksijen dolu bir balon yapabilirsiniz. +tile.distributor.name=Oksijen Kabarcık Distribütörü +tile.dummyblock.cryogenic_chamber.name=Kriyojenik Odası +tile.dummyblock.launch_pad.name=Roket Fırlatma Pedi +tile.dummyblock.nasa_workbench.name=NASA Çalışma Masası +tile.dummyblock.solar.name=Güneş Paneli +tile.dummyblock.space_station_base.name=Uzay İstasyonu +tile.electric_furnace_tier1.description=Elektrikli Ocak, kömür ocağından daha hızlı ve daha iyidir. +tile.electric_furnace_tier2.description=Ark Ocağı, Elektrikli ve kömür ocaklarından daha hızlı ve iyidir. +tile.enclosed.aluminum_wire.name=Mühürlenebilir Alüminyum Teli +tile.enclosed.heavy_aluminum_wire.name=Mühürlenebilir Ağır Alüminyum Teli +tile.enclosed.copper_cable.name=Mühürlenebilir Bakır Kablosu +tile.enclosed.description=Mühürlenebilir bloklar hava geçirmezdir. Duvarlarda rahatlıkla kullanılabilir. +tile.enclosed.glass_fibre_cable.name=Mühürlenebilir Cam Fiber Kablosu +tile.enclosed.gold_cable.name=Mühürlenebilir Altın Kablosu +tile.enclosed.hv_cable.name=Mühürlenebilir HV Kablosu +tile.enclosed.lv_cable.name=Mühürlenebilir Ultra Düşük Akım Kablosu +tile.enclosed.me_cable.name=Mühürlenebilir ME Kablo +tile.enclosed.fluid_pipe.name=Mühürlenebilir Oksijen Borusu +tile.enclosed.pipe_fluids_cobblestone.name=Mühürlenebilir Kırıktaş Sıvı Borusu +tile.enclosed.pipe_fluids_stone.name=Mühürlenebilir Taş Sıvı Borusu +tile.enclosed.pipe_items_cobblestone.name=Mühürlenebilir Kırıktaş Taşıma Borusu +tile.enclosed.pipe_items_stone.name=Mühürlenebilir Taş Taşıma Boru +tile.enclosed.pipe_power_gold.name=Mühürlenebilir Altın İletken Borusu +tile.enclosed.pipe_power_stone.name=Mühürlenebilir Taş İletken Borusu +tile.energy_storage_module_tier1.description=Enerji Depolama Modülü, enerji depolar. +tile.energy_storage_module_tier2.description=Enerji Depolama Makinesi, büyük miktarda enerji depolar ve daha güçlü çıkışı vardır. +tile.fallen_meteor.description=Düşmüş Meteor bulmak için gezegenlere/aylara veya atmosferi olmayan yerlere bakın. Kırılınca Meteroik Demir verir. +tile.fallen_meteor.name=Düşmüş Meteor +tile.fuel.name=Yakıt +tile.fuel_block.name=Yakıt +tile.fuel_loader.description=Yakıt Yükleyicisi, fırlatma pedini veya akaryakıt pedini kullanarak araçlara ve roketlere yakıt yükler. +tile.fuel_loader.name=Yakıt Yükleyicisi +tile.glowstone_torch.description=Işık Taşı Meşale, oksijen bulunmayan ortamlarda yanar. +tile.glowstone_torch.name=Işık Taşı Meşale +tile.landing_pad.buggy_fueler.name=Buggy Akaryakıt Pedi +tile.landing_pad.cargo_pad.name=Kargo Roket Pedi +tile.landing_pad.description=Pedler roket için gereklidir. Pedleri 3x3 şeklinde yerleştirin. Yakıt Yükleyicisi, Kargo Yükleyicisi ve Fırlatma Kontrollü buna bağlanır. +tile.landing_pad.landing_pad.name=Roket Fırlatma Pedi +tile.landing_pad_full.name=Roket Fırlatma Pedi +tile.machine.0.name=Kömür Jeneratörü +tile.machine.1.name=Enerji Depolama Modülü +tile.machine.2.name=Elektrikli Ocak +tile.machine.3.name=Kompresör +tile.machine.7.name=Elektrik Ark Ocağı +tile.machine.8.name=Enerji Depolama Makinesi +tile.machine2.4.name=Elektrikli Kompresör +tile.machine2.5.name=Devre Fabrikatörü +tile.machine2.6.name=Oksijen Depolama Modülü +tile.moon_stairs_brick.name=Ay Zindan Tuğla Merdiveni +tile.moon_stairs_stone.name=Ay Taş Merdiveni +tile.ore_copper.name=Bakır Külçesi +tile.ore_tin.name=Kalay Külçesi +tile.oxygen_compressor.0.name=Oksijen Kompresör +tile.oxygen_compressor.1.name=Oksijen Açıcı +tile.oxygen_compressor.description=Oksijen Kompresörü oksijen tanklarına oksijen doldurur. +tile.oxygen_decompressor.description=Oksijen Açıcı oksijen tankındaki oksijeni alır. +tile.oxygen_detector.description=Oksijen Dedektörü, etrafta oksijen varsa kızıltaş sinyali yayar. +tile.oxygen_detector.name=Oksijen Dedektörü +tile.oxygen_pipe.description=Oksijen Borusu, oksijeni makinalara götürmek için kullanılır. +tile.oxygen_pipe.name=Oksijen Borusu +tile.oxygen_storage_module.description=Oksijen Depolama Modülü, büyük miktarlarda oksijen depolar. +tile.parachest.description=Para Sandık, gezegenden veya aydan gelirken roketin malzemelerini taşır. +tile.parachest.name=Para Sandık +tile.refinery.description=Rafineri, petrolü yakıta dönüştür. Araç ve roket için yakıt gereklidir. +tile.refinery.name=Rafineri +tile.rocket_workbench.description=NASA Çalışma Masası gelişmiş roket ve araçları yapmak içindir. Yeni şematikleri buldukça ekleyin. +tile.rocket_workbench.name=NASA Çalışma Masası +tile.sapling2.birch.name=Huş Ağacı Fidanı +tile.sapling2.jungle.name=Orman Ağacı Fidanı +tile.sapling2.oak.name=Meşe Fidanı +tile.sapling2.spruce.name=Ladin Ağacı Fidanı +tile.sealer.description=Oksijen Mühürleyen, bir odaya oksijen vermek amaçıyla kullanılır. +tile.sealer.name=Oksijen Mühürleyen +tile.slab_gc_half.moon_bricks_slab.name=Ay Zindan Tuğla Basamağı +tile.slab_gc_half.moon_slab.name=Ay Taş Basamağı +tile.slab_gc_half.tin_slab_1.name=Kalay Dekorasyon Basamağı +tile.slab_gc_half.tin_slab_2.name=Kalay Dekorasyon Basamağı +tile.solar.advanced_solar.name=Gelişmiş Güneş Paneli +tile.solar.basic_solar.name=Basit Güneş Paneli +tile.solar_adv.description=Gelişmiş Güneş Paneli, güneşin olduğu zamanlar enerji toplar. Basitine göre daha fazla toplar ve otomatiktir. +tile.solar_basic.description=Basit Güneş Paneli, güneşin olduğu zamanlar enerji toplar. +tile.space_station_base.name=Uzay İstasyonu Ana Komuta +tile.spin_thruster.description=Dönüş Pervanesi uzay istasyonu için kullanılır. +tile.spin_thruster.name=Dönüş Pervanesi +tile.telemetry.description=Roketlerin, oyuncuların ve canlıların bilgilerini almak için bağlantı kurar. Yanına Tüplü Ekran koymalısınız. Bağlantı için Frekans Modülünü kullanın. +tile.telemetry.name=Telemetri Ünitesi +tile.tin_stairs_1.name=Kalay Dekorasyon Merdiveni +tile.tin_stairs_2.name=Kalay Dekorasyon Merdiveni +tile.treasure_chest.description=Tier 1 Hazine Sandığı Ay zindanın da bulunuyor. Açılması için sondaki Patron canavarı öldürün. +tile.treasure_chest.name=Hazine Sandığı +tile.unlit_torch.name=Meşale +tile.unlit_torch_stone.name=Taş Meşale +tile.unlit_torch_lit.name=Meşale +tile.unlit_torch_stone_lit.name=Taş Meşale +tile.view_screen.description=Tüplü Ekran sizin uzay üssünüze son dokunuş olacaktır. Sağ tıklayarak gözüken bilgileri değiştirebilirsiniz. +tile.view_screen.name=Tüplü Ekran +tile.wall_gc.moon.name=Ay Taş Duvarı +tile.wall_gc.moon_bricks.name=Ay Zindan Tuğla Duvarı +tile.wall_gc.tin.name=Kalay Dekorasyon Duvarı diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/uk_ua.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/uk_ua.lang new file mode 100644 index 00000000..83a7d38a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/uk_ua.lang @@ -0,0 +1,825 @@ +checklist.create_grapple.key=Створити гак +checklist.equip_oxygen_suit.key=Одягти кисневе обладнання +checklist.equip_parachute.key=Одягти парашут +command.gcastrominer.count=Для гравця %s є %s астрошахтерів +commands.emergencykit=%s отримав саморятівник! +commands.dimensionteleport=%s був направлений в атмосферу %s +commands.dimensiontp.too_many=Занадто багато аргументів команди! Використання: %s +commands.gcenergyunits.invalid_units=Неправильні одиниці в команді / GCEnergyUnits. Використання: %s +commands.gcenergyunits.no_units=Необхідно вказати одиниці! Використання: %s +commands.gchouston.confirm.1=Це Центр управління польотами, повторіть будь ласка? +commands.gchouston.confirm.2=(Щоб перервати місію, наберіть /gchouston ще раз для підтвердження.) +commands.gchouston.fail=Команда /gchouston доступна тільки в космосі (або в Творчому режимі). +commands.gchouston.help.1=Ем, Х'юстон, у нас проблема .... +commands.gchouston.help.2=(Введіть / gchouston, щоб перервати місію і повернутися додому.) +commands.gchouston.noop=Використання команди / gchouston на інших гравців є тільки операторам. +commands.gchouston.success=Добре, залишайтеся на зв'язку, %s, телепортіруемся вас в точку перевозрожденія на Землю. +commands.joinrace.no_team=Необхідно вказати команду! Використання: %s +commands.ssinvite.not_found=Не вдалося знайти космічну станцію на ваше ім'я, спочатку ви повинні злітати туди! +commands.ssinvite.wrong_usage=Недостатньо аргументів команди! Використання: %s +commands.ssnewowner.wrong_usage=ID космічної станції не був розпізнаний. Вона взагалі існує? Використання: %s +commands.ssuninvite.no_player=Не вдалося знайти гравця з ім'ям %s в списку вашої космічної станції! +container.cargoloader.name=Вантажний завантажувач +container.cargounloader.name=Вантажний розвантажник +container.fuelloader.name=Завантажувач палива +container.lander.name=Посадковий модуль +container.magneticcrafting.name=Створення +container.oxygencollector.name=Кисневий складальник +container.oxygencompressor.name=Кисневий компресор +container.oxygendecompressor.name=Кисневий декомпресор +container.oxygendistributor.name=Розподільник кисню +container.oxygensealer.name=Герметизатор кисню +container.parachest.name=Скриня з парашутом +container.refinery.name=Очисний завод +container.solaradvanced.name=Покращена сонячна панель +container.solarbasic.name=Базова сонячна панель +container.spaceship.name=Ракета 1-го рівня +container.treasurechest.name=Скриня зі скарбом +death.attack.meteor_chunk=%1$s був вражений метеорних сміттям! +death.attack.oxygen_suffocation=%1$s задихнувся в космосі! +death.attack.spaceship_crash=Ракета %1$s розбилася об землю. Ой. +death.attack.sulphuric_acid=%1$s розчинився в сірчаної кислоти! +death.attack.thermal=%1$s забув тепловий захист +dimension.moon.name=Місяць +dimension.overworld.name=Земля +dimension.sun.name=Сонце +entity.alien_villager.name=Інопланетний житель +entity.buggy.name=Баггі +entity.celestial_screen.name=Астрономічний екран +entity.evolved_creeper.name=Еволюціонувавший кріпер +entity.evolved_skeleton.name=Еволюціонувавший скелет +entity.evolved_skeleton_boss.name=Еволюціонувавший скелет-бос +entity.evolved_spider.name=Еволюціонувавший павук +entity.evolved_zombie.name=Еволюціонувавший зомбі +entity.evolved_enderman.name=Еволюціонувавший Мандрівник Края +entity.evolved_witch.name=Еволюціонувавша відьма +entity.flag.name=Прапор +entity.gcflag.name=Прапор +entity.gravity_arrow.name=Стрілка +entity.lander.name=Посадковий модуль +entity.meteor.name=Метеорит +entity.meteor_chunk.name=Шматок метеорита +entity.oxygen_bubble.name=Кисневий міхур +entity.para_chest.name=Скриня з парашутом +entity.rocket_t1.name=Ракета 1-го рівня +galaxy.milky_way=Чумацький шлях +gc.configgui.allow_liquids_grating=Дозволити рідинам текти через решітки +gc.configgui.alternate_canister_recipe=Альтернативний рецепт каністри +gc.configgui.asteroids_flags=Прапори режиму пригод на астероїдах +gc.configgui.asteroids_start=Режим пригоди (Старт на астероїдах) +gc.configgui.biome_id_base=Базовий ID біома +gc.configgui.detectable_i_ds=Виявлені ID +gc.configgui.disable_biome_type_registrations=Відключити реєстрацію типів біомів +gc.configgui.disable_cheese_moon=Відключити генерацію місячного сиру +gc.configgui.disable_copper_moon=Відключити генерацію місячної міді +gc.configgui.disable_lander=Відключити посадковий модуль +gc.configgui.disable_moon_village_gen=Відключити генерацію місячних сел +gc.configgui.disable_ore_dict_space_metals=Використовувати тільки свої космічні метали в рецептах +gc.configgui.disable_sapphire_moon=Відключити генерацію місячних сапфірів +gc.configgui.disable_space_station_creation=Відключити створення космічної станції +gc.configgui.disable_spaceship_grief=Відключити вибух ракети +gc.configgui.disable_spaceship_particles=Відключити частки ракети +gc.configgui.disable_tin_moon=Відключити генерацію місячного олова +gc.configgui.disable_update_check=Вимкнути перевірку оновлень +gc.configgui.disable_vehicle_camera_changes=Відключити масштаб і вид від третьої особи в транспорті +gc.configgui.dungeon_boss_health_mod=Модифікатор здоров'я боса +gc.configgui.enable_aluminum_ore_gen=Генерація алюмінію в звичайному світі +gc.configgui.enable_copper_ore_gen=Генерація міді в звичайному світі +gc.configgui.enable_debug=Показувати налагоджувальні повідомлення в консолі +gc.configgui.enable_other_mods_features=Включити зовнішню генерацію інших модов +gc.configgui.enable_retrogen_oil=Генерувати нафту в існуючому світі +gc.configgui.enable_sealer_edge_checks=Повна перевірка герметичності герметизатором +gc.configgui.enable_silicon_ore_gen=Генерація кремнію в звичайному світі +gc.configgui.enable_space_race_manager_popup=Включити спливаюче вікно менеджера гонки +gc.configgui.enable_thaum_craft_nodes=Включити генерацію вузлів Thaumcraft на планетах +gc.configgui.enable_tin_ore_gen=Генерація олова в звичайному світі +gc.configgui.external_oil_gen=Зовнішня генерація нафти +gc.configgui.force_overworld_respawn=Примусове поява в звичайному світі +gc.configgui.hard_mode=хардкорний режим +gc.configgui.id_achiev_base=ID Основного досягнення +gc.configgui.id_dimension_moon=ID виміру: Місяць +gc.configgui.id_dimension_overworld=ID виміру: Земля +gc.configgui.id_dimension_overworld_orbit=ID виміру: Космічна станція +gc.configgui.id_dimension_overworld_orbit_static=ID виміру: Статична космічна станція +gc.configgui.id_schematic_add_schematic=ID схеми: "Додати схему" +gc.configgui.id_schematic_moon_buggy=ID схеми: Місячний баггі +gc.configgui.id_schematic_rocket_t1=ID схеми: Ракета 1-го рівня +gc.configgui.key_override_fuel_level=Призначити клавішу: Інвентар ракети +gc.configgui.key_override_toggle_adv_goggles=Призначити клавішу: Покращені окуляри +gc.configgui.map_scroll_invert=Інвертувати прокрутку карти +gc.configgui.map_scroll_sensitivity=Чутливість прокрутки карти +gc.configgui.meteor_block_damage=Пошкодження блоків від метеорів включено +gc.configgui.meteor_spawn_mod=Множник генерації метеорів +gc.configgui.more_stars=Показувати більше зірок +gc.configgui.oil_gen_factor=Множник генерації нафти +gc.configgui.ore_dict_silicon=Реєструвати кремній в словнику руд +gc.configgui.other_mod_ore_gen_i_ds=Генерація руд з інших модів на планетах +gc.configgui.override_capes=замінювати плащі +gc.configgui.override_map=Призначити клавішу: Галактична карта +gc.configgui.oxygen_indicator_bottom=Змістити індикатор кисню вниз +gc.configgui.oxygen_indicator_left=Змістити індикатор кисню вліво +gc.configgui.planet_worldborders=Максимальні x, z для посадки на Місяць +gc.configgui.quick_mode=Швидка гра (легше) +gc.configgui.rocket_disable_overworld_return=Відключити повернення ракети в звичайний світ +gc.configgui.rocket_disabled_dimensions=Вимірювання, де ракети відключені +gc.configgui.rocket_fuel_factor=Множник ракетного палива +gc.configgui.sealable_i_ds=Герметичні блоки +gc.configgui.space_station_energy_scalar=Модифікатор енергії космічної станції +gc.configgui.space_stations_require_permission=Дозволи для космічних станцій +gc.configgui.static_loaded_dimensions=Статично завантажені вимірювання +gc.configgui.static_loaded_new_ss=Завантажувати статично нові космічні станції? +gc.configgui.suffocation_cooldown=Затримка шкоди від задухи +gc.configgui.suffocation_damage=Втрати від задухи +gc.configgui.title=конфігурація ядра Galacticraft +gc.configgui.use_old_oil_fluid_i_d=Використовувати старий ID (oilgc) для нафти +gc.configgui.use_old_fuel_fluid_i_d=Використовувати старий ID (fuelgc) для палива +gc.configgui.whitelist_co_f_h_core_gen=Додати генерацію CoFHCore в білий список +gui.battery_slot.desc.0=Слот для акумулятора, поставте акумулятор сюди +gui.battery_slot.desc.1=або використовуй підключене джерело енергії +gui.bed_fail.message=Ой вей. Що станеться, якщо кисень вичерпається, поки я сплю? Мені знадобиться Криогенная камера для сну в космосі. +gui.buggy.accel.name=Прискоритися +gui.buggy.decel.name=Сповільнитися +gui.buggy.inv.name=Інвентар / Паливо +gui.buggy.storage_space=Розмір сховища +gui.buggy.turn.name=Поверніть вліво, вправо. +gui.button.back.name=Назад +gui.button.disable.name=Вимкнути +gui.button.disableseal.name=Відключити герметизатор +gui.button.enable.name=Увімкнути +gui.button.enableseal.name=Запустити герметизатор +gui.button.hide_dest.name=Сховати +gui.button.loadfuel.name=Завантажити паливо +gui.button.loaditems.name=Завантажити +gui.button.next.name=Вперед +gui.button.paintapply.name=Застосувати фарбу +gui.button.paintmix.name=Вибрати колір +gui.button.paintreset.name=Скинути колір +gui.button.refine.name=Очистити +gui.button.stoploading.name=Зупинити завантаження +gui.button.stoprefine.name=Зупинити очистку +gui.button.stopunloading.name=Зупинити розвантаження +gui.button.unhide_dest.name=Показати +gui.button.unloaditems.name=Розвантажити +gui.button.unlockschematic.name=Розблокувати схему +gui.checkbox.horizontal.name=Горизонтальний режим +gui.checkbox.invert.name=Інвертований вибір +gui.checkbox.player_name.name=Ім'я гравця: +gui.checkbox.player_within.name=Гравець в межах +gui.checkbox.redstone_signal.name=Відкривається за сигналом червоного каменю +gui.chest.warning.wrongkey=Мені потрібен ключ від підземелля %s рівня, щоб відкрити це! +gui.choose_planet.desc.moon=Населена # Кисень відсутня # Гравітація: 18% +gui.choose_planet.desc.overworld=Сповнена життя # населеності # Гравітація: 100% +gui.chooseplanet.alreadycreated1.name=Космічна станція +gui.chooseplanet.alreadycreated2.name=вже створена! +gui.chooseplanet.cannotcreate1.name=Неможливо створити космічну +gui.chooseplanet.cannotcreate2.name=станцію тут! +gui.crafting_memory.desc.0=Даний магнітний верстак може створити більше даних предметів! +gui.crafting_memory.desc.1=Щоб запам'ятати рецепт, створіть один предмет. +gui.creative_only.desc=Тільки для Творчого режиму +gui.display.nolink=Немає зв'язку +gui.docking_rocket.current_vel.name=Поточна швидкість +gui.docking_rocket.distance_from.name=Відстань до цілі +gui.docking_rocket.target_vel.name=Цільова швидкість +gui.docking_rocket.warning.name.0=Натисніть %s, для уповільнення +gui.docking_rocket.warning.name.1=Натисніть %s, для прискорення +gui.dropbox.player_distance.name.0=1 метр +gui.dropbox.player_distance.name.1=2 метра +gui.dropbox.player_distance.name.2=5 метрів +gui.dropbox.player_distance.name.3=10 метрів +gui.electric_compressor.desc.0=Прогрес +gui.energy_storage.desc.0=Сховище енергії +gui.energy_storage.desc.1=енергія +gui.flag.already_placed=Прапор тут уже варто! +gui.frequency_module.desc.0=Може приймати слабкі звукові +gui.frequency_module.desc.1=хвилі і віддалені сигнали +gui.frequencymodule.warning0=Мені потрібен +gui.frequencymodule.warning1=якщо я хочу тут нормально чути. +gui.fuel_output.desc.0=Покладіть порожні рідинні каністри в +gui.fuel_output.desc.1=цей слот, щоб заповнити їх з +gui.fuel_output.desc.2=паливного резервуара +gui.fuel_tank.desc.0=Паливний резервуар. потрібно +gui.fuel_tank.desc.1=Завантажувач палива для заповнення +gui.fuel_tank.desc.2=Паливний резервуар можна заповнити +gui.fuel_tank.desc.3=Паливними каністрами +gui.fuel_tank.desc.4=Паливний резервуар +gui.infinite_item.desc=Нескінченний +gui.lander.velocity=Швидкість входження +gui.lander.velocityu=м/cек +gui.lander.warning2=Затисніть " +gui.lander.warning3=", щоб уповільнити падіння! +gui.max_output.desc=Макс. вихід +gui.message.addnewsch.name=Додати нову схему +gui.message.apply.name=Застосувати +gui.message.assign_name.name=Дати ім'я +gui.message.atmosphere.name=Атмосфера +gui.message.back.name=Назад +gui.message.breed.name=Розмножувати +gui.message.bubble_visible.name=Видимість бульбашок +gui.message.can_create_space_station.name=Тут можна побудувати станцію! +gui.message.cancel.name=Відміна +gui.message.cannot_create_space_station.name=Тут не можна побудувати космічну станцію. +gui.message.catalog.name=Каталог +gui.message.click_again.0.name=Натисніть ще раз для збільшення (видно Місяця і Супутники) +gui.message.click_again.1.name=Натисніть ще раз для збільшення (видно Місяця) +gui.message.click_again.2.name=Натисніть ще раз для збільшення (видно Супутники) +gui.message.click_again.3.name=Натисніть ще раз для збільшення +gui.message.clicklink=Натисніть, щоб потрапити на Galacticraft Wiki +gui.message.create_ss.name=Створити +gui.message.daynightcycle.name=Цикл день-ніч +gui.message.energy=Енергія +gui.message.environment.name=Прискорення навколишнього середовища +gui.message.exit.name=вихід +gui.message.fuel.name=Паливо +gui.message.full.name=залишилося +gui.message.generating.name=Створення +gui.message.grow.name=Рости +gui.message.heal.name=лікувати +gui.message.help1=Для допомоги по Galacticraft, надрукуйте +gui.message.help1a=Для того, щоб побачити це уведомленіe іще раз, надрукуйте +gui.message.help2=Для допомоги по космічній програмі, надрукуйте +gui.message.help3=Для допомоги по видобутку нафти, надрукуйте +gui.message.in.name=Введення +gui.message.launch.name=Запуск +gui.message.max_energy=Макс. енергія +gui.message.meansurfacetemp.name=Середня температура на поверхні +gui.message.moon.atmosphere.0.name=Немає +gui.message.moon.daynightcycle.0.name=29.5 Земних днів +gui.message.moon.meansurfacetemp.0.name=(Світла сторона) 253°C +gui.message.moon.meansurfacetemp.1.name=(Темна сторона) -153°C +gui.message.moon.surfacecomposition.0.name=Базальтовий камінь і +gui.message.moon.surfacecomposition.1.name=сліди сиру +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(18% Земної) +gui.message.of.name=з +gui.message.oil.name=Нафта +gui.message.out.name=Висновок +gui.message.overworld.atmosphere.0.name=Азот і кисень +gui.message.overworld.atmosphere.1.name=підтримує життя +gui.message.overworld.daynightcycle.0.name=1 Земний день +gui.message.overworld.meansurfacetemp.0.name=14°C +gui.message.overworld.surfacecomposition.0.name=Камінь, земля, +gui.message.overworld.surfacecomposition.1.name=гравій +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(100% Земної) +gui.message.prelaunch=Контрольний список +gui.message.rename.name=перейменувати +gui.message.select_ss.name=Вибрати космічну станцію +gui.message.ss_owner.name=власник: +gui.message.status.name=Статус +gui.message.strengthen.name=зміцнювати +gui.message.surfacecomposition.name=Склад поверхні +gui.message.surfacegravity.name=Гравітація на поверхні +gui.message.thermal_status.name=Тепловий контроль +gui.message.tier.name=Рівень %d +gui.message.unnamed.name=Без імені +gui.missing_core.name.0=MicdoodleCore не знайдений в папці модифікацій +gui.missing_core.name.1=Galacticraft не завантажили +gui.missing_core.name.2=Закрийте Minecraft і встановіть MicdoodleCore +gui.missing_core.name.3=Натисніть тут, щоб відкрити сторінку завантаження +gui.new_schematic.slot.desc.0=Слот для нової схеми. ви +gui.new_schematic.slot.desc.1=можете знайти нові схеми +gui.new_schematic.slot.desc.2=в підземеллях +gui.new_schematic.slot.desc.3=на планетах і місяцях +gui.oil_tank.desc.0=Нафтовий резервуар, може бути заповнений +gui.oil_tank.desc.1=нафтовими каністрами +gui.oxygen.warning=Чи не налаштоване кисневе обладнання! +gui.oxygen_compressor.slot.desc.0=Слот компресора для резервуара, покладіть резервуар +gui.oxygen_compressor.slot.desc.1=сюди, щоб заповнити його киснем. +gui.oxygen_decompressor.slot.desc.0=Слот декомпресора для резервуара, покладіть резервуар +gui.oxygen_decompressor.slot.desc.1=з киснем сюди, щоб спустошити його. +gui.oxygen_slot.desc.0=Слот для кисню, покладіть каністру з киснем або резервуар +gui.oxygen_slot.desc.1=сюди або використовуйте приєднаний джерело кисню +gui.oxygen_storage.desc.0=Сховище кисню +gui.oxygen_storage.desc.1=Кисень +gui.oxygen_use.desc=Споживання кисню +gui.per_second=/сек +gui.player.bpm=уд/мин +gui.player.food=Їжа +gui.player.health=здоров'я +gui.player.ouch=ой!!!! +gui.receiver.cannot_attach=Не можна поставити Приймач тут! +gui.requires_controller.desc=Требуется контроллер запуска +gui.rocket.countdown=Зворотній відлік +gui.rocket.height=Висота +gui.rocket.inv.name=Інвентар / Паливо +gui.rocket.launch.name=Запуск +gui.rocket.launched=Запущена +gui.rocket.on_launchpad=На злітному майданчику +gui.rocket.speed=Швидкість +gui.rocket.turn.name=Повернути вліво-вправо +gui.rocket.updown.name=Повернути вгору-вниз +gui.rocket.warning.fuelinsufficient=Недостатньо палива для безпечного запуску під автоматичним управлінням! +gui.rocket.warning.launchcontroller=Передполітна скасування запуску. Перевірте контролер запуску! +gui.rocket.warning.nofuel=Спочатку мені потрібно залити трохи палива в ракету! +gui.rocket.warning.nogyroscope=У грі присутні таємничі сили і гіроскопи дико обертаються! +gui.rocket.warning.noparachute=У мене немає парашута! Якщо я натисну запуск знову, шляху назад не буде! +gui.rocket_type.0=Розмір сховища: 18 +gui.rocket_type.1=Розмір сховища: 36 +gui.rocket_type.2=Розмір сховища: 54 +gui.rocket_type.3=Заправлена +gui.seconds=сек +gui.sensor.advanced=Покращений режим +gui.sensor.advancedoff=ВИКЛ. +gui.sensor.advancedon=ВКЛ. +gui.show_bubble.desc.0=Показати міхур +gui.skeleton_boss.message=Бос пропав, не покидайте кімнату з босом, коли воюєте з ним! Зайдіть в кімнату заново, щоб бос знову з'явився. +gui.space_race.chat.add_success=%s приєднався до космічній гонці! +gui.space_race.chat.already_part=Ви вже берете участь у цій космічній гонці! +gui.space_race.chat.invite_received=Отримано запрошення в команду космічної гонки від %s. +gui.space_race.chat.not_found=Не вдалося знайти гравця з ім'ям %s +gui.space_race.chat.remove_success=%s Був прибраний з космічної гонки. +gui.space_race.chat.to_join=Щоб приєднатися до %s, використовуйте команду %s +gui.space_race.coming_soon=Скоро +gui.space_race.create.add_players.name=Додати гравця (ів) +gui.space_race.create.back.name=Назад +gui.space_race.create.brush_radius.name=радіус кисті +gui.space_race.create.brush_size.name=Розмір кисті +gui.space_race.create.change_color.name.0=Змінити +gui.space_race.create.change_color.name.1=команду +gui.space_race.create.change_color.name.2=колір +gui.space_race.create.close.name=Закрити +gui.space_race.create.customize.name=Налаштувати прапор +gui.space_race.create.eraser_radius.name=Радіус гумки +gui.space_race.create.eraser_size.name=Розмір гумки +gui.space_race.create.global_stats.name=Подивитися глобальну статистику +gui.space_race.create.invite_player.name=Запросити гравця +gui.space_race.create.player_radius.name=Примітка: гравці повинні бути в радіусі 25 блоків! +gui.space_race.create.rem_players.name=Прибрати гравця (ів) +gui.space_race.create.remove.name=Прибрати +gui.space_race.create.remove_player.name=Убрать игрока +gui.space_race.create.rename.name=Перейменувати команду +gui.space_race.create.send_invite.name=Відправити запрошення +gui.space_race.create.server_stats.name=Подивитися статистику сервера +gui.space_race.create.title.name.0=Налаштування +gui.space_race.create.title.name.1=космічної гонки +gui.space_race.create.title.name=Налаштування космічної гонки +gui.space_race.join.member_count.name=Учасників: %d +gui.space_race.join.name=приєднатися +gui.space_race.join.owner.name=Власник +gui.space_race.join.title.name=Приєднатися до космічній гонці +gui.space_race.unnamed=безіменна команда +gui.spacestation.added=Ви були додані на космічну станцію гравця %s! +gui.spacestation.addsuccess=%s успішно доданий в список космічної станції! +gui.spacestation.allow_all_false=Ваші космічні станції більше не відкриті для всіх гравців. +gui.spacestation.allow_all_true=Ваші космічні станції тепер відкриті для всіх гравців. (Використовуйте / ssinvite -all, щоб скасувати це.) +gui.spacestation.changesuccess=Власник космічної станції був змінений з %s на %s. +gui.spacestation.playername=<Ім'я гравця> +gui.spacestation.removesuccess=%s успішно прибраний зі списку космічної станції! +gui.spacestation.to_allow_entry=Щоб надати можливість іншому гравцеві заходити на цю космічну станцію! +gui.spacestation.type_command=Тип +gui.status.active.name=Активно +gui.status.air_lock_closed.name=Повітряний шлюз закритий +gui.status.air_lock_open.name=Повітряний шлюз відкритий +gui.status.blockedfully.name=сонце невидимо +gui.status.blockedpartial.name=Сонце частково видно +gui.status.check_pending.name=Очікування перевірки +gui.status.check_starting.name=Перевірка розпочата +gui.status.checking_seal.name=Перевірка герметичності +gui.status.collecting.name=Збір +gui.status.collectingenergy.name=Збір енергії +gui.status.compressing.name=Стиснення +gui.status.disabled.name=Відключено +gui.status.fulltank.name=Кисневий балон заповнений +gui.status.generating.name=Створення +gui.status.hull_heat.name=Нагрівання корпусу +gui.status.idle.name=Простий +gui.status.missingleaves.name=Відсутні блоки листя +gui.status.missingoxygen.name=відсутний кисень в балоні +gui.status.missingpower.name=Відсутня енергія +gui.status.missingpower.short.name=Немає живлення +gui.status.missingtank.name=Відсутній кисневий балон +gui.status.nofuel.name=Немає палива для завантаження! +gui.status.noinvtarget.name=Відсутній інвентар у мети! +gui.status.noitems.name=Немає предметів для завантаження! +gui.status.nooil.name=Немає палива +gui.status.not_available.name=Н/Д +gui.status.not_generating.name=Не створюється +gui.status.notargetload.name=Відсутня мета для завантаження! +gui.status.notargetunload.name=Відсутня мета для розвантаження! +gui.status.off.name=Викл. +gui.status.on.name=Вкл. +gui.status.raining.name=Дощ +gui.status.ready.name=Готово +gui.status.refining.name=Очищення +gui.status.running.name=Працює +gui.status.sealed.name=Герметично +gui.status.sealerblocked.name=Випускний вентиляційний отвір заблоковано! +gui.status.sun_visible.name=Видимість сонця +gui.status.tank_empty.name=Кисневий балон порожній +gui.status.targetempty.name=Техніка не заправлена! +gui.status.targetfull.name=Техніка заправлена! +gui.status.unknown.name=Невідомо +gui.status.unsealed.name=Зона занадто велика / не герметична +gui.tank.oxygen_remaining=Залишилося кисню +gui.telemetry_fail.message=Спочатку мені потрібно відстежити сутність з цим частотним модулем! (Або надіти його!) +gui.telemetry_fail_no_frequency_module.message=Мені потрібно взяти частотний модуль в руки! +gui.telemetry_fail_wearing_it.message=Мені потрібно зняти частотний модуль, якщо я хочу поєднати його з телеметричним блоком! +gui.telemetry_succeed.message=Телеметричні з'єднання створено. +gui.thermal_slot.desc.0=Слот для Теплового контролера. покладіть +gui.thermal_slot.desc.1='Тепловий контролер 'сюди (необов'язково). +gui.thermal_slot.desc.2=Примітка: Споживає більше енергії. +gui.title.air_lock.name=Контролер повітряного шлюзу гравця %s +gui.tracking.message=Відстеження активовано. Тепер мені потрібно натиснути ПКМ по телеметричному блоку, щоб завершити з'єднання. +gui.village.warning.no_freq_mod=Мені потрібен частотний модуль, щоб спілкуватися з ними! +gui.warning.invalid_thermal=Неправильна тепловий захист! +gui.warning.noroom=Недостатньо місця! +gui.warning=НЕБЕЗПЕКА! +item.air_fan.name=Вентилятор +item.air_vent.name=Вентиляційний клапан +item.basic_item.ambient_thermal_controller.name=Тепловий контролер +item.basic_item.canned_food.name=Консервована їжа +item.basic_item.compressed_aluminum.name=Стиснутий алюміній +item.basic_item.compressed_bronze.name=Стисла бронза +item.basic_item.compressed_copper.name=Стисла мідь +item.basic_item.compressed_iron.name=Стислий залізо +item.basic_item.compressed_steel.name=Стисла сталь +item.basic_item.compressed_tin.name=Стислий олово +item.basic_item.dehydrated_apple.name=Сублімоване яблуко +item.basic_item.dehydrated_carrot.name=Сублімована морква +item.basic_item.dehydrated_melon.name=Сублімований кавун +item.basic_item.dehydrated_potato.name=Сублімований картопля +item.basic_item.frequency_module.name=Частотний модуль +item.basic_item.ingot_aluminum.name=Алюмінієвий злиток +item.basic_item.ingot_bronze.name=Бронзовий злиток +item.basic_item.ingot_copper.name=Мідний злиток +item.basic_item.ingot_steel.name=Сталевий злиток +item.basic_item.ingot_tin.name=Олов'яний злиток +item.basic_item.raw_silicon.name=Неочищений кремній +item.basic_item.solar_module_0.name=Одиночний сонячний модуль +item.basic_item.solar_module_1.name=Ціла сонячна панель +item.basic_item.wafer_advanced.name=Покращена напівпровідникова пластина +item.basic_item.wafer_basic.name=Основна напівпровідникова пластина +item.basic_item.wafer_solar.name=Синя сонячна напівпровідникова пластина +item.battery.name=Акумулятор +item.bucket_fuel.name=Відро палива +item.bucket_oil.name=Відро нафти +item.buggy.name=Баггі +item.buggymat.seat.name=Сидіння баггі +item.buggymat.storage.name=Контейнер баггі +item.buggymat.wheel.name=Колесо баггі +item.canister.copper.name=Мідна каністра +item.canister.tin.name=Олов'яна каністра +item.canvas.name=Полотно +item.cheese_block.name=Блок сиру +item.cheese_curd.name=Сирок +item.compressed_meteoric_iron.name=Стислий метеоритне залізо +item.dungeonfinder.name=локатор скарбниць +item.empty_liquid_canister.name=Порожня рідинна каністра +item.emergency_kit.description=Використовуйте (за замовчуванням ПКМ), щоб надіти кисневе обладнання та отримати інші необхідні речі. Одноразовий! +item.emergency_kit.name=Космічний саморятівник +item.engine.tier1booster.name=Прискорювач 1-го рівня +item.engine.tier1engine.name=Ракетний двигун 1-го рівня +item.flag.name=Прапор +item.food.cheese_slice.name=Шматочок сиру +item.food.burger_bun.name=Булочка для бургера +item.food.beef_patty_raw.name=Фарш із яловичини +item.food.beef_patty_cooked.name=Котлета із яловичини +item.food.cheeseburger.desc=Астронавти люблять чізбургери! Дуже ситна їжа. +item.food.cheeseburger.name=Чізбургер +item.food.canned_beef.name=Тушонка із яловичини +item.fuel.name=Ракетне паливо +item.fuel_canister.name=Повна каністра палива +item.fuel_canister_partial.name=Неповна каністра палива +item.heavy_plating.name=Надміцна пластина +item.hot_description.name=Підпалює на +item.ic2compat.ore_crushed_alu.name=Подрібнена алюмінієва руда +item.ic2compat.ore_purified_alu.name=Очищена подрібнена алюмінієва руда +item.ic2compat.dust_alu.name=Алюмінієвий пил +item.ic2compat.dust_small_titanium.name=Маленька купка титанового пилу +item.infinite_battery.name=Нескінченний акумулятор +item.infinite_oxygen.name=Нескінченний кисневий балон +item.key.t1.name=Ключ від підземелля 1-го рівня +item.lunar_sapphire.description=Місячний сапфір використовується при торгівлі з інопланетними жителями +item.lunar_sapphire.name=Місячний сапфір +item.meteor_chunk.name=Кидаєм метеоритний шматок +item.meteor_chunk_hot.name=Кидаємий метеоритний шматок +item.meteoric_iron_ingot.name=Злиток метеоритного заліза +item.meteoric_iron_raw.name=Необроблене метеоритне залізо +item.nose_cone.name=Головний обтічник +item.oil_canister.name=Повна каністра нафти +item.oil_canister_partial.name=Неповна каністра нафти +item.oil_extractor.name=Портативний нафтової екстрактор +item.oxygen_concentrator.name=кисневий концентратор +item.oxygen_gear.name=Кисневе обладнання +item.oxygen_mask.name=Киснева маска +item.oxygen_tank_heavy_empty.name=Порожній великий кисневий балон +item.oxygen_tank_heavy_full.name=Великий кисневий балон +item.oxygen_tank_light_empty.name=Порожній малий кисневий балон +item.oxygen_tank_light_full.name=Малий кисневий балон +item.oxygen_tank_med_empty.name=Порожній середній кисневий балон +item.oxygen_tank_med_full.name=Середній кисневий балон +item.parachute_black.name=Чорний парашут +item.parachute_blue.name=Світло-синій парашут +item.parachute_brown.name=Коричневий парашут +item.parachute_darkblue.name=Синій парашут +item.parachute_darkgray.name=Сірий парашут +item.parachute_darkgreen.name=Зелений парашут +item.parachute_gray.name=Світло-сірий парашут +item.parachute_lime.name=Лаймовий парашут +item.parachute_magenta.name=Бузковий парашут +item.parachute_orange.name=Помаранчевий парашут +item.parachute_pink.name=Рожевий парашут +item.parachute_plain.name=Парашут +item.parachute_purple.name=Фіолетовий парашут +item.parachute_red.name=Червоний парашут +item.parachute_teal.name=Бірюзовий парашут +item.parachute_yellow.name=Жовтий парашут +item.rocket_fins.name=Ракетний стабілізатор +item.rocket_t1.name=Ракета 1-го рівня +item.schematic.name=Схема для верстака NASA +item.sensor_glasses.name=Окуляри з сенсорами +item.sensor_lens.name=Сенсорні лінзи +item.standard_wrench.name=Звичайний гайковий ключ +item.steel_axe.name=Сталева сокиру +item.steel_boots.name=Сталеві черевики +item.steel_chestplate.name=Сталевий нагрудник +item.steel_helmet.name=Сталевий шолом +item.steel_hoe.name=Сталева мотика +item.steel_leggings.name=Сталеві поножи +item.steel_pickaxe.name=Сталева кирка +item.steel_pole.name=Сталева жердина +item.steel_shovel.name=Сталева лопата +item.steel_sword.name=Сталевий меч +item.tier1.desc=1-ий рівень +item_desc.powerdraw.name=Потрібно енергії: %s /сек +item_desc.shift.name=Натисніть %s для докладної інформації +item_group.galacticraft_blocks=Galacticraft: Блоки +item_group.galacticraft_items=Galacticraft: Предмети +jei.arc_lamp.info=Дуже яскраве світло з лицьового боку. Для кращого ефекту розміщуйте на висоті! Обертається за допомогою гайкового ключа. +jei.electric_compressor.info=Електрична версія вугільного компресора. Працює в 2 рази швидше! Швидкість стиснення збільшується при підключенні до енергосистеми 2-го рівня. Для завантаження або вивантаження предметів може бути використана воронка. +jei.electric_compressor.appeng.info=Для автоматизації за допомогою Applied Energetics 2 використовуйте в рецептах злитки з двох різних модифікацій. Відвідайте сторінку https://goo.gl/BwY15G для більш докладної інформації. +jei.fluid_pipe.info=Труба для передачі будь-яких рідин або газів. Для викачування рідини з рідинного резервуара використовуйте Гучний ключ на трубі, щоб перевести її в «виштовхує режим». \nТруба в виштовхує режимі не може заповнювати рідинний резервуар або пристрій, тому труби повинні бути як мінімум довжиною в 2 блоки. +jei.fuel_loader.info=Поставте поруч зі злітним майданчиком. Заправляє будь-яку ракету, яка стоїть на майданчику. Необхідний для будь-якого польоту в космос - в тому числі для польоту додому! +jei.magnetic_crafting.info=Верстак, який зберігає покладені в нього предмети. Може приймати предмети з воронки для автоматичного створення за останнім успішно використаному рецептом. +jei.oxygen_collector.info=Збирає дихальну кисневу суміш з повітря в звичайному світі або (в космосі) з довколишніх листя або зелені на грядках. \nПерекачівайте кисень по трубах в Кисневий компресор, щоб заповнити балони, в Кисневий герметизатор або розпреділяє кисневі бульбашки. +jei.oxygen_distributor.info=Створює кисневий міхур в космосі, де гравці (і інші істоти) можуть дихати. Забезпечуйте його кисневої дихальної сумішшю з Кисневого збирача або Кисневого сховища. +jei.oxygen_sealer.info=Заповнює одну кімнату на вашій космічної базі придатною для дихання атмосферою. Забезпечуйте його кисневої дихальної сумішшю з Кисневого збирача або Кисневого сховища. Всі стіни в кімнаті повинні бути герметичними. \NІщіте витоку за допомогою Сенсорних очок! \NМаксімальний розмір кімнати для одного герметизатора - 10x10x8 блоків. Використовуй кілька герметизатор для великих приміщень. +jei.wrench.info=Більшість пристроїв в Galacticraft можна обертати, використовуючи (за замовчуванням ПКМ) на них Звичайний гайковий ключ. \NПрі утриманні Shift під час використання ключа, для більшої частини електричних машин можна міняти боку, на яких знаходяться енергетичні або інші входи і виходи. +keybind.map.name=Галактична карта +keybind.sensortoggle.name=Переключити режим Очок з сенсорами +keybind.spaceshipinv.name=Відкрити інвентар космічного корабля +keybind.vehiclebackward.name="Назад" для техніки +keybind.vehicledown.name="Вниз" для техніки +keybind.vehicleforward.name="Вперед" для техніки +keybind.vehicleleft.name="Ліворуч" для техніки +keybind.vehicleright.name="Вправо" для техніки +keybind.vehicleup.name="Вгору" для техніки +moon.moon=Місяць +newversion.failed.name=Перевірка оновлень для Galacticraft провалилася! Наступна спроба відбудеться через 15 секунд. +newversion.success.name=Знайдена нова версія Galacticraft: +planet.jupiter=Юпітер +planet.mercury=Меркурій +planet.neptune=Нептун +planet.overworld=Земля +planet.saturn=Сатурн +planet.uranus=Уран +planet.venus=Венера +satellite.spacestation.overworld=Космічна станція Землі +schematic.moonbuggy.name=Місячний баггі +schematic.rocket_t1.name=Ракета 1-го рівня +schematic.rocket_t2.name=Ракета 2-го рівня +solarsystem.sol=Сонце +star.sol=Сонце +tile.air_lock_controller.name=Контролер повітряного шлюзу +tile.air_lock_frame.description=Блоки каркаса повітряного шлюзу, розташовані у формі порталу, з одним заміненим на контролер блоком будуть функціонувати як Повітряний шлюз. +tile.air_lock_frame.name=Каркас повітряного шлюзу +tile.air_lock_seal.name=Ущільнювач повітряного шлюзу +tile.aluminum_wire.alu_wire.description=Алюмінієвий дріт використовується для підключення джерел енергії до механізмів, які використовують енергію. +tile.aluminum_wire.alu_wire.name=Алюмінієвий дріт +tile.aluminum_wire.alu_wire_heavy.description=Товстий алюмінієвий дріт використовується для підключення джерел енергії до механізмів, які використовують енергію. За рахунок більшої провідності прискорює механізми 2-го рівня. +tile.aluminum_wire.alu_wire_heavy.name=Товстий алюмінієвий дріт +tile.aluminum_wire.alu_wire_switch.description=Керований алюмінієвий дріт приєднується як звичайний Алюмінієвий дріт, якщо не вимкнений сигналом червоного каменю. +tile.aluminum_wire.alu_wire_switch.name=Керований алюмінієвий дріт +tile.aluminum_wire.alu_wire_switch_heavy.description=Керований товстий алюмінієвий дріт приєднується як звичайний Товстий алюмінієвий дріт, якщо не вимкнений сигналом червоного каменю. +tile.aluminum_wire.alu_wire_switch_heavy.name=Керований товстий алюмінієвий дріт +tile.arclamp.description=Дугові лампи використовуються для освітлення великої території, також змушують більшість монстрів тікати. +tile.arclamp.name=Дугова лампа +tile.basic_block_core.block_aluminum_gc.name=Алюмінієвий блок +tile.basic_block_core.block_copper_gc.name=Мідний блок +tile.basic_block_core.block_meteoric_iron_gc.name=Блок метеоритного заліза +tile.basic_block_core.block_tin_gc.name=Олов'яний блок +tile.basic_block_core.block_silicon_gc.name=кремнієвий блок +tile.basic_block_core.deco_block_0.name=Декоративний олов'яний блок +tile.basic_block_core.deco_block_1.name=Декоративний олов'яний блок +tile.basic_block_core.ore_aluminum_gc.name=Алюмінієва руда +tile.basic_block_core.ore_copper_gc.name=Мідна руда +tile.basic_block_core.ore_silicon.name=Кремнієва руда +tile.basic_block_core.ore_tin_gc.name=Олов'яна руда +tile.basic_block_moon.bricks.name=Цегла місячної скарбниці +tile.basic_block_moon.cheesestone.name=Сирна руда +tile.basic_block_moon.coppermoon.name=Мідна руда +tile.basic_block_moon.moondirt.name=Місячний грунт +tile.basic_block_moon.moongrass.name=Місячний дерен +tile.basic_block_moon.moonstone.name=Місячний камінь +tile.basic_block_moon.sapphiremoon.name=Сапфірове руда +tile.basic_block_moon.tinmoon.name=Олов'яна руда +tile.buggy_pad.description=Заправна платформа при розміщенні блоків квадратом 3x3 дозволить баггі на платформі заправитися за допомогою завантажувача палива. Не може бути використана для запуску ракет! +tile.cargo.loader.name=Вантажний завантажувач +tile.cargo.unloader.name=Вантажний розвантажник +tile.cargo_loader.description=Вантажний завантажувач буде передавати блоки і предмети в ракети та іншу техніку з вантажним сховищем. Повинен бути підключений до злітно / заправного майданчику. +tile.cargo_unloader.description=Вантажний розвантажник буде забирати блоки і предмети з ракет та іншої техніки з вантажним сховищем. Повинен бути підключений до злітно / заправниго майданчику. +tile.cheese.description=Сырные блоки создаются из Лунного сыра, их можно поставить в мире или съесть. +tile.cheese.name=Блок сиру +tile.circuit_fabricator.description=Виробник мікросхем перероблятиме основні матеріали в кремнієві пластини, які використовуються для поліпшених механізмів. +tile.coal_generator.description=Вугільний генератор буде просто спалювати вугілля для вироблення енергії. Найпростіший, але найменш ефективний метод отримання енергії. +tile.collector.description=Кисневий складальник збиратиме кисень, одержуваний з найближчого листя. +tile.collector.name=Кисневий складальник +tile.compressor.description=Компресор перероблятиме злитки в їх стислі еквіваленти. Найнеобхідніша машина в Galacticraft! +tile.compressor_electric.description=Електричний компресор буде переробляти злитки в їх стислі еквіваленти. Стискає відразу дві пластини, що робить його більш ефективним, ніж попередника. +tile.compressor_advanced.description=Швидша версія Електричного компресора. Миттєво переробляє зливки на їхні стислі еквіваленти. +tile.concealed_detector.name=Детектор гравців +tile.concealed_redstone.name=Прихований червоний дріт +tile.concealed_repeater.name=Прихований повторювач червоного каменю +tile.crude_oil.name=Нафта +tile.crude_oil_moving.name=Неочищена нафта +tile.crude_oil_still.name=Неочищена нафта +tile.deconstructor.description=Деконструктор розбере ваші старі ракети та інші предмети, повертаючи будь які початкові матеріали. +tile.dishbase.description=Антена зв'язку може відстежувати положення космічних станцій і отримувати повідомлення з віддалених космічних баз. +tile.dishbase.name=Антена зв'язку +tile.distributor.description=Розподільник кисню буде випускати назовні кисневий міхур від центрального блоку, використовуючи карту пам'яті. Це дозволить дихати всередині міхура. +tile.distributor.name=Розподільник кисневого міхура +tile.dummyblock.cryogenic_chamber.name=Кріогенна камера +tile.dummyblock.launch_pad.name=Злітний майданчик +tile.dummyblock.nasa_workbench.name=Верстак NASA +tile.dummyblock.solar.name=Сонячна панель +tile.dummyblock.space_station_base.name=Підстава космічної станції +tile.electric_furnace_tier1.description=Електропіч використовується як більш швидка альтернатива звичайним вугільним печкам +tile.electric_furnace_tier2.description=Дугова піч використовується як більш швидка альтернатива звичайним вугільним і електричним печкам. Подвоює вихід злитків з руд! +tile.emergency_box.description=Додайте Рятувальну станцію поруч з місцем вашого першого приземлення на планеті. Відкрийте, щоб знайти Саморятівник всередині. Також відлякує монстрів! +tile.emergency_box.filled.name=Рятувальна станція (з саморятівники) +tile.emergency_box.name=Рятувальна станція +tile.enclosed.aluminum_wire.name=Герметичний алюмінієвий дріт +tile.enclosed.copper_cable.name=Герметичний мідний дріт +tile.enclosed.description=Герметичні блоки слід використовувати в місцях, де не повине проходити повітря (наприклад, в стінах космічних баз). +tile.enclosed.fluid_pipe.name=Герметична рідинна труба +tile.enclosed.glass_fibre_cable.name=Герметичний скловолоконний дріт +tile.enclosed.gold_cable.name=Герметичний золотий дріт +tile.enclosed.hv_cable.name=Герметичний високовольтний провід +tile.enclosed.lv_cable.name=Герметичний олов'яний провід +tile.enclosed.heavy_aluminum_wire.name=Герметичний товстий алюмінієвий дріт +tile.enclosed.me_cable.name=Герметичний МЕ провід +tile.enclosed.pipe_fluids_cobblestone.name=Герметична булижніковая рідинна труба +tile.enclosed.pipe_fluids_stone.name=Герметична кам'яна рідинна труба +tile.enclosed.pipe_items_cobblestone.name=Герметична булижніковая транспортна труба +tile.enclosed.pipe_items_stone.name=Герметична кам'яна транспортна труба +tile.enclosed.pipe_power_gold.name=Герметична золота енергетична труба +tile.enclosed.pipe_power_stone.name=Герметична кам'яна енергетична труба +tile.energy_storage_module_tier1.description=Сховище енергії використовується для зберігання великої кількості енергії. +tile.energy_storage_module_tier2.description=Енергетичний масив використовується для зберігання великого кол-ва енергії. Зберігає і виводить більше енергії, ніж його попередник. +tile.fallen_meteor.description=Впавші метеорити можна знайти на багатьох планетах / місяцях, які мають розріджені або взагалі не мають атмосферу. Дають необроблене метеоритне залізо. +tile.fallen_meteor.name=Упавший метеорит +tile.fluid_pipe.description=Рідинна труба передає рідини і гази від джерела до місця призначення. Гайковий ключ використовується для перемикання режимів. +tile.fluid_pipe.name=Рідинна труба +tile.fluid_pipe_pull.description=Рідинна труба передає рідини і гази від джерела до місця призначення. Гайковий ключ використовується для перемикання режимів. +tile.fluid_pipe_pull.name=Рідинна труба +tile.fluid_tank.description=Рідинний резервуар зберігає рідини і гази для подальшого використання. +tile.fluid_tank.name=Рідинний резервуар +tile.fuel.name=Паливо +tile.fuel_block.name=Паливо +tile.fuel_loader.description=Після підключення до злітно або заправних майданчику Завантажувач палива заллє паливо в підключену ракету або іншу техніку. +tile.fuel_loader.name=Завантажувач палива +tile.glowstone_torch.description=Лучше всього використати для освітлення, де немає кисню. +tile.glowstone_torch.name=Смолоскип з світящогося каменю +tile.grating.name=Решітка +tile.landing_pad.buggy_fueler.name=Заправна платформа для баггі +tile.landing_pad.cargo_pad.name=Платформа для Вантажной ракети +tile.landing_pad.description=Блоки злітної площадки, будучи розташовані квадратом 3x3, дозволяють розмістить ракету. Завантажники палива, Вантажні завантажувачі і Контролери запуску можуть бути приєднані. +tile.landing_pad.landing_pad.name=Взлітний майданчик +tile.landing_pad_full.name=Взлітний майданчик +tile.machine.0.name=Вугільний генератор +tile.machine.1.name=Сховище енергії +tile.machine.2.name=Електропіч +tile.machine.3.name=Компресор +tile.machine.7.name=Електрична дугова піч +tile.machine.8.name=Енергетичний масив +tile.machine2.4.name=Електричний компресор +tile.machine2.5.name=Виробник мікросхем +tile.machine2.6.name=Сховище кисню +tile.machine2.10.name=Деконструктор +tile.machine3.9.name=Художник +tile.machine4.11.name=Покращений компресор +tile.magnetic_table.name=Магнітний верстак +tile.magnetic_table.description=При виході з магнітного верстака зберігає предмети, покладені в нього. Приймає предмети при натисканні Shift + ЛКМ. Для завантаження і вилучення предметів можуть бути використані воронки - верстак спробує задіяти останній запомненний рецепт. +tile.moon_stairs_brick.name=Сходинки з цегли місячної скарбниці +tile.moon_stairs_stone.name=Сходинки з місячного каменю +tile.ore_copper.name=Мідна руда +tile.ore_tin.name=Олов'яна руда +tile.oxygen_compressor.0.name=Кисневий компресор +tile.oxygen_compressor.1.name=Кисневий декомпресор +tile.oxygen_compressor.description=Кисневий компресор буде завантажувати кисень з внутрішнього сховища в кисневий резервуар. +tile.oxygen_decompressor.description=Кисневий декомпресор буде розвантажений киснем у внутрішньому сховище з Кисневого резервуара. +tile.oxygen_detector.description=Кисневий датчик буде випромінювати сигнал червоного каменю, коли навколо нього буде кисень. +tile.oxygen_detector.name=Кисневий датчик +tile.oxygen_storage_module.description=Сховище кисню використовується для зберігання великої кількості кисню. +tile.painter.description=Сяючі панелі і інші об'єкти. Щоб встановити новий колір. +tile.panel_lighting.description=Освітлена панель для використання в космосі! Ключ обертає її. Щоб змінити зовнішній вигляд, затисніть Shift і використовуйте панель на обраному блоці. +tile.panel_lighting_0.name=Освітлена панель (квадратна) +tile.panel_lighting_1.name=Освітлена панель (точкова) +tile.panel_lighting_2.name=Освітлена панель (лінійна) +tile.panel_lighting_3.name=Освітлена панель (темна) +tile.panel_lighting_4.name=Освітлена панель (темна) +tile.parachest.description=Скрині з парашутом будуть падати з неба після посадки на деякі планети / місяця, такі як Земля. Містять ракету, паливо і вантаж, збережений з попереднього запуску. +tile.parachest.name=Скриня з парашутом +tile.platform.description=Поставте 4 блоки для формування платформи. Платформа переміщує гравця до наступної платформі вгорі або внизу. Натисніть Shift, щоб спуститися, стрибніть, щоб піднятися. +tile.platform.name=Гідравлічна платформа +tile.refinery.description=Очисний завод буде приймати нафту і енергію, а потім виводити паливо, що використовується для ракет і транспорту. +tile.refinery.name=Очисний завод +tile.compact_workbench.name=Компактний верстак NASA +tile.compact_workbench.description=Компактний варіант верстака NASA. +tile.rocket_workbench.name=Верстак NASA +tile.rocket_workbench.description=Верстак NASA використовується для створення безлічі поліпшених деталей і техніки. Нові схеми можуть бути додані, як тільки вони були знайдені. +tile.sapling2.birch.name=Саджанець берези +tile.sapling2.jungle.name=Саджанець тропічного дерева +tile.sapling2.oak.name=Саджанець дуба +tile.sapling2.spruce.name=Саджанець сосни +tile.sealer.description=Герметизатор кисню буде шукати замкнутий простір. Якщо таке знайдено, воно заповниться повітрям. +tile.sealer.name=Герметизатор кисню +tile.slab_gc_half.moon_bricks_slab.name=Плита з цегли місячної скарбниці +tile.slab_gc_half.moon_slab.name=Плита з місячного каменю +tile.slab_gc_half.tin_slab_1.name=Декоративна олов'яна плита +tile.slab_gc_half.tin_slab_2.name=Декоративна олов'яна плита +tile.solar.advanced_solar.name=Покращена сонячна панель +tile.solar.basic_solar.name=Основна сонячна панель +tile.solar_adv.description=Покращені сонячні панелі будуть отримувати енергію з сонця, зберігаючи її. Автоматично регулюють кут панелі для оптимального отримання енергії. +tile.solar_basic.description=Основні сонячні панелі будуть отримувати енергію з сонця, зберігаючи її. Найбільше енергії отримують в середині дня (можна налаштувати). +tile.space_glass.description=Вакуумне скло для ваших космічних баз! Фарбується в будь-який колір за допомогою найближчій фарбувальної машини. +tile.space_glass.clear.description=Прозоре вакуумне скло з чудовим видом з космосу! А також відмінна видимість під водою. +tile.space_glass.strong.description=Міцне і ударостійке вакуумне скло. Виготовлено з алюмінію. +tile.space_glass_clear.name=Вакуумне скло (прозоре) +tile.space_glass_vanilla.name=Вакуумне скло +tile.space_glass_strong.name=Вакуумне скло (прозоре) +tile.space_station_base.name=Підстава космічної станції +tile.spin_thruster.description=Обертають двигуни використовуються для обертання космічних станцій. +tile.spin_thruster.name=Обертающийся двигун +tile.telemetry.description=Збирає корисні дані з приєднаних ракет, гравців і мобів. Найкраще розміщувати поруч з екраном відображення. Використовуйте частотний модуль, щоб налаштувати отримувану інформацію. +tile.telemetry.name=дистанційний блок +tile.tin_stairs_1.name=Декоративні олов'яні сходинки +tile.tin_stairs_2.name=Декоративні олов'яні сходинки +tile.treasure_chest.description=Скрині зі скарбами 1-го рівня будуть генеруватися в скарбницях Місяця. Їх можна відкрити після перемоги над фінальним босом. +tile.treasure_chest.name=Скриня зі скарбом +tile.unlit_torch.name=Смолоскип +tile.unlit_torch_stone.name=Кам'яний смолоскип +tile.unlit_torch_lit.name=Смолоскип +tile.unlit_torch_stone_lit.name=Кам'яний смолоскип +tile.view_screen.description=Екрани відображення додадуть останній штрих вашій космічній базі. ПКМ змінює наведену інформацію. +tile.view_screen.name=Екран відображення +tile.wall_gc.moon.name=Стіна з місячного каменю +tile.wall_gc.moon_bricks.name=Стіна з цегли місячної скарбниці +tile.wall_gc.tin.name=Декоративна олов'яна стіна + +advancement.galacticraft.root.title=Galacticraft +advancement.galacticraft.root.description=Досліджуйте Місяць ... і далі! +advancement.galacticraft.coal_generator.title=Вугільна потужність +advancement.galacticraft.coal_generator.description=Створіть вугільний генератор +advancement.galacticraft.circuit_fabricator.title=Виробник +advancement.galacticraft.circuit_fabricator.description=Створіть виробника мікросхем, щоб зробити напівпровідникову пластину +advancement.galacticraft.basic_wafer.title=Напівпровідникова пластина +advancement.galacticraft.basic_wafer.description=Створіть основну напівпровідникову пластину. (Будь ласка, не їжте це) +advancement.galacticraft.advanced_wafer.title=Покращена напівпровідникова пластина +advancement.galacticraft.advanced_wafer.description=Створіть виробника мікросхем, щоб зробити напівпровідникову пластину +advancement.galacticraft.compressor.title=Стиснутий +advancement.galacticraft.compressor.description=Створіть компресор +advancement.galacticraft.solar.title=Вільна енергія +advancement.galacticraft.solar.description=Створіть основну сонячну панель +advancement.galacticraft.advanced_solar.title=Швидко + Ефективно +advancement.galacticraft.advanced_solar.description=Створіть поліпшену сонячну панель +advancement.galacticraft.electric_compressor.title=Електричне оновлення +advancement.galacticraft.electric_compressor.description=Створіть електричний компресор +advancement.galacticraft.oil.title=Липка річ +advancement.galacticraft.oil.description=Впасти в нафту +advancement.galacticraft.refiery.title=Час нефтепереробкі! +advancement.galacticraft.refiery.description=Створіть очисний завод +advancement.galacticraft.rocket_fuel.title=Ракетне паливо +advancement.galacticraft.rocket_fuel.description=Переробіть нафту в очисному заводі +advancement.galacticraft.oxygen_collector.title=Кисень не вімкнений +advancement.galacticraft.oxygen_collector.description=Створіть кисневий складальник +advancement.galacticraft.oxygen_compressor.title=Стиснути повітря +advancement.galacticraft.oxygen_compressor.description=Створіть кисневий компресор +advancement.galacticraft.fill_tank.title=Повітря 2 йде +advancement.galacticraft.fill_tank.description=Заповніть кисневий балон +advancement.galacticraft.fill_all_tanks.title=Кисневий запас +advancement.galacticraft.fill_all_tanks.description=Заповніть кожен вид кисневого балона +advancement.galacticraft.all_oxygen_gear.title=Все готово +advancement.galacticraft.all_oxygen_gear.description=Створіть все, що вам потрібно, щоб дихати в космосі +advancement.galacticraft.rocket_workbench.title=Космічний інженер +advancement.galacticraft.rocket_workbench.description=Створіть верстак NASA +advancement.galacticraft.rocket_t1.title=У нас є ракета! +advancement.galacticraft.rocket_t1.description=Приварити ракету разом +advancement.galacticraft.fuel_loader.title=Наповни її! +advancement.galacticraft.fuel_loader.description=Створіть завантажувач палива +advancement.galacticraft.launch_rocket.title=У нас є старт! +advancement.galacticraft.launch_rocket.description=Запустіть свою першу ракету +advancement.galacticraft.moon.title=Місяць! +advancement.galacticraft.moon.description=Здійснив посадку +advancement.galacticraft.create_space_station.title=Космічна станція +advancement.galacticraft.create_space_station.description=Створіть свою космічну станцію! +advancement.galacticraft.spin_thruster.title=У мене паморочиться голова +advancement.galacticraft.spin_thruster.description=Створіть обертающийся двигун +advancement.galacticraft.moon_dungeon.title=Краще, ніж засохнути +advancement.galacticraft.moon_dungeon.description=Знайдіть еволюціонувавшого скелета-боса в скарбниці +advancement.galacticraft.dungeon_key_moon.title=У мене є ключ +advancement.galacticraft.dungeon_key_moon.description=Убийте боса, який переховується в скарбниці, і вкради його ключ +advancement.galacticraft.moon_buggy_schematic.title=Глючная схема +advancement.galacticraft.moon_buggy_schematic.description=Отримайте схему місячного §oбаггі +advancement.galacticraft.moon_buggy.title=Баггі +advancement.galacticraft.moon_buggy.description=Зваріть баггі разом diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_cn.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_cn.lang new file mode 100644 index 00000000..57feed28 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_cn.lang @@ -0,0 +1,826 @@ +checklist.create_grapple.key=制作攀援钩爪 +checklist.equip_oxygen_suit.key=装备氧气供给装置 +checklist.equip_parachute.key=装备降落伞 +command.gcastrominer.count=%s拥有%s个太空采矿机 +commands.emergencykit=已给予%s应急设备 +commands.dimensionteleport=%s被传送到%s附近 +commands.dimensiontp.too_many=命令参数过多!用法:%s +commands.gcenergyunits.invalid_units=/GCEnergyUnits 命令中的无效单位。用法:%s +commands.gcenergyunits.no_units=需指定单位!用法:%s +commands.gchouston.confirm.1=这可是航天任务,要不要再试试? +commands.gchouston.confirm.2=(若仍需放弃本次航天任务,请重新输入/gchouston以确认) +commands.gchouston.fail=/gchouston指令只在太空或创造模式下生效。 +commands.gchouston.help.1=呃,休斯顿,我们有麻烦了…… +commands.gchouston.help.2=(输入/gchouston指令可放弃当前航天任务返航回家) +commands.gchouston.noop=仅管理员有权对其他玩家使用/gchouston指令。 +commands.gchouston.success=好的,%s同志,请不要移动,马上将你传送回地球的家中。 +commands.joinrace.no_team=需指定队伍!用法:%s +commands.ssinvite.not_found=空间站里找不到你的名字,你得先上去一趟! +commands.ssinvite.wrong_usage=命令参数不足! 用法:%s +commands.ssnewowner.wrong_usage=无法识别此空间站 ID# -真的有这么个东西?用法:%s +commands.ssuninvite.no_player=你的空间站访客名单里没有玩家%s! +container.cargoloader.name=装货器 +container.cargounloader.name=卸货器 +container.fuelloader.name=燃料注入器 +container.lander.name=登陆舱 +container.magneticcrafting.name=磁力合成台 +container.oxygencollector.name=氧气收集机 +container.oxygencompressor.name=氧气压缩机 +container.oxygendecompressor.name=氧气解压机 +container.oxygendistributor.name=氧气释放机 +container.oxygensealer.name=气密设备 +container.parachest.name=伞降箱 +container.refinery.name=燃油精炼机 +container.solaradvanced.name=高级太阳能板 +container.solarbasic.name=基础太阳能板 +container.spaceship.name=一阶火箭 +container.treasurechest.name=一级珍宝箱 +death.attack.meteor_chunk=%1$s被陨石碎片击穿! +death.attack.oxygen_suffocation=%1$s耗尽氧气而亡! +death.attack.spaceship_crash=哦,不。%1$s的火箭坠毁了。 +death.attack.sulphuric_acid=%1$s被硫酸溶化! +death.attack.thermal=%1$s体温失控! +dimension.moon.name=月球 +dimension.overworld.name=地球 +dimension.sun.name=太阳 +entity.alien_villager.name=外星村民 +entity.buggy.name=星球车 +entity.celestial_screen.name=天体显示屏 +entity.evolved_creeper.name=爬行者(太空进化) +entity.evolved_skeleton.name=骷髅(太空进化) +entity.evolved_skeleton_boss.name=太空骷髅王 +entity.evolved_spider.name=蜘蛛(太空进化) +entity.evolved_zombie.name=僵尸(太空进化) +entity.evolved_enderman.name=末影人(太空进化) +entity.evolved_witch.name=女巫(太空进化) +entity.flag.name=旗帜 +entity.gcflag.name=旗帜 +entity.gravity_arrow.name=箭 +entity.lander.name=登陆舱 +entity.meteor.name=陨石 +entity.meteor_chunk.name=陨石块 +entity.oxygen_bubble.name=含氧气泡 +entity.para_chest.name=伞降箱 +entity.rocket_t1.name=一阶火箭 +galaxy.milky_way=银河系 +gc.configgui.allow_liquids_grating=允许流体从格栅中流过 +gc.configgui.alternate_canister_recipe=罐的其它合成配方 +gc.configgui.asteroids_flags=挑战模式旗帜 +gc.configgui.asteroids_start=挑战模式 (从小行星带启程) +gc.configgui.biome_id_base=GC生物群系ID基数 +gc.configgui.detectable_i_ds=可检测IDs +gc.configgui.disable_biome_type_registrations=关闭生物群系ID注册 +gc.configgui.disable_cheese_moon=关闭月球奶酪矿石生成 +gc.configgui.disable_copper_moon=关闭月球铜矿石生成 +gc.configgui.disable_lander=禁用月球登陆舱 +gc.configgui.disable_moon_village_gen=关闭月球村庄生成 +gc.configgui.disable_space_station_creation=禁止创建空间站 +gc.configgui.disable_ore_dict_space_metals=只使用星系自身的材料进行合成 +gc.configgui.disable_sapphire_moon=关闭蓝月宝石矿石生成 +gc.configgui.disable_spaceship_grief=关闭火箭爆炸 +gc.configgui.disable_spaceship_particles=关闭火箭粒子效果 +gc.configgui.disable_tin_moon=关闭月球锡矿石生成 +gc.configgui.disable_update_check=关闭更新检查 +gc.configgui.dungeon_boss_health_mod=调整地牢BOSS生命值 +gc.configgui.disable_vehicle_camera_changes=Vivecraft:关闭第三人称和放大功能 +gc.configgui.enable_aluminum_ore_gen=地球铝矿石生成 +gc.configgui.enable_copper_ore_gen=地球铜矿石生成 +gc.configgui.enable_debug=在控制台中显示调试信息 +gc.configgui.enable_other_mods_features=允许所有其它模组的世界生成 +gc.configgui.enable_retrogen_oil=地下石油生成 +gc.configgui.enable_sealer_edge_checks=密封边界检测 +gc.configgui.enable_silicon_ore_gen=地球硅矿石生成 +gc.configgui.enable_thaum_craft_nodes=外星球生成神秘时代灵气节点 +gc.configgui.enable_space_race_manager_popup=启用太空竞赛管理员弹窗 +gc.configgui.enable_tin_ore_gen=地球锡矿石生成 +gc.configgui.external_oil_gen=地表石油生成 +gc.configgui.force_overworld_respawn=强制重新生成主世界 +gc.configgui.hard_mode=困难科技模式 +gc.configgui.id_achiev_base=基础成就ID +gc.configgui.id_dimension_moon=月球维度ID +gc.configgui.id_dimension_overworld=地球维度ID +gc.configgui.id_dimension_overworld_orbit=空间站维度ID +gc.configgui.id_dimension_overworld_orbit_static=静态空间站维度ID +gc.configgui.id_schematic_add_schematic= “添加设计图”设计图ID +gc.configgui.id_schematic_moon_buggy=星球车设计图ID +gc.configgui.id_schematic_rocket_t1=一阶火箭设计图ID +gc.configgui.key_override_fuel_level=设置按键:火箭燃料表 +gc.configgui.key_override_toggle_adv_goggles=设置按键:高级目镜 +gc.configgui.map_scroll_invert=反向滚动地图 +gc.configgui.map_scroll_sensitivity=鼠标滚动地图信息显示 +gc.configgui.meteor_block_damage=陨石破坏地形 +gc.configgui.meteor_spawn_mod=陨石生成修改 +gc.configgui.more_stars=显示更多天体 +gc.configgui.oil_gen_factor=石油生成系数 +gc.configgui.ore_dict_silicon=其它模组硅矿辞名称 +gc.configgui.other_mod_ore_gen_i_ds=外星球允许其它模组矿石生成 +gc.configgui.override_capes=自动使用赞助披风 +gc.configgui.override_map=设置按键:星图 +gc.configgui.oxygen_indicator_bottom=下移氧气指示器 +gc.configgui.oxygen_indicator_left=左移氧气指示器 +gc.configgui.planet_worldborders=登月点最大X,Z值 +gc.configgui.quick_mode=低难度 +gc.configgui.rocket_disable_overworld_return=禁止主世界火箭返航 +gc.configgui.rocket_disabled_dimensions=禁用火箭维度 +gc.configgui.rocket_fuel_factor=火箭燃料系数 +gc.configgui.sealable_i_ds=可密封方块 +gc.configgui.space_station_energy_scalar=空间站能量调节器 +gc.configgui.space_stations_require_permission=空间站权限 +gc.configgui.static_loaded_dimensions=静态维度加载 +gc.configgui.static_loaded_new_ss=静态空间站创建加载 +gc.configgui.suffocation_cooldown=窒息间隔 +gc.configgui.suffocation_damage=窒息伤害 +gc.configgui.title=星系配置文件 +gc.configgui.whitelist_co_f_h_core_gen=CoFHCore世界生成白名单 +gc.configgui.use_old_fuel_fluid_i_d=使用旧方式注册星系燃油 +gc.configgui.use_old_oil_fluid_i_d=使用旧方式注册星系石油 +gui.battery_slot.desc.0=电池槽:放置电池 +gui.battery_slot.desc.1=或者连接能源 +gui.bed_fail.message=啊哦,要是我睡着的时候氧气耗尽就麻烦了,还是在冬眠舱里休息吧! +gui.buggy.accel.name=加速 +gui.buggy.decel.name=减速 +gui.buggy.inv.name=物品栏/燃料 +gui.buggy.storage_space=存储空间 +gui.buggy.turn.name=左转-右转 +gui.button.back.name=返回 +gui.button.disable.name=关闭 +gui.button.disableseal.name=关闭密闭 +gui.button.enable.name=开启 +gui.button.enableseal.name=启动密闭 +gui.button.hide_dest.name=隐藏 +gui.button.loadfuel.name=加载燃料 +gui.button.loaditems.name=装载物品 +gui.button.next.name=下一个 +gui.button.paintapply.name=启用涂层 +gui.button.paintmix.name=混合颜色 +gui.button.paintreset.name=重置颜色 +gui.button.refine.name=精炼 +gui.button.stoploading.name=停止装载 +gui.button.stoprefine.name=停止精炼 +gui.button.stopunloading.name=停止卸载 +gui.button.unhide_dest.name=显示 +gui.button.unloaditems.name=卸载物品 +gui.button.unlockschematic.name=解锁设计图 +gui.checkbox.horizontal.name=水平模式 +gui.checkbox.invert.name=反向选取 +gui.checkbox.player_name.name=玩家名为 +gui.checkbox.player_within.name=有玩家在内 +gui.checkbox.redstone_signal.name=红石信号开 +gui.chest.warning.wrongkey=我需要一个%s阶的地牢钥匙来打开这个珍宝箱! +gui.choose_planet.desc.moon=宜居#无氧气#重力18% +gui.choose_planet.desc.overworld=生机勃勃#宜居#重力100% +gui.chooseplanet.alreadycreated1.name=空间站已经 +gui.chooseplanet.alreadycreated2.name=创建! +gui.chooseplanet.cannotcreate1.name=无法在这里 +gui.chooseplanet.cannotcreate2.name=创建空间站! +gui.crafting_memory.desc.0=这台磁力合成台能合成更多物品! +gui.crafting_memory.desc.1=合成一个物品即可记忆该合成表。 +gui.creative_only.desc=创造专用 +gui.display.nolink=无连接 +gui.docking_rocket.current_vel.name=当前速度 +gui.docking_rocket.distance_from.name=剩余距离 +gui.docking_rocket.target_vel.name=目标速度 +gui.docking_rocket.warning.name.0=按下%s减速 +gui.docking_rocket.warning.name.1=按下 %s加速 +gui.dropbox.player_distance.name.0=1米 +gui.dropbox.player_distance.name.1=2米 +gui.dropbox.player_distance.name.2=5米 +gui.dropbox.player_distance.name.3=10米 +gui.electric_compressor.desc.0=进度 +gui.energy_storage.desc.0=能量存储 +gui.energy_storage.desc.1=能量 +gui.flag.already_placed=旗帜飘扬! +gui.frequency_module.desc.0=可以感知微弱的声波 +gui.frequency_module.desc.1=以及远距离传输信号 +gui.frequencymodule.warning0=我需要一个 +gui.frequencymodule.warning1=才能聆听这里的声音。 +gui.fuel_output.desc.0=在这里放置空燃料罐, +gui.fuel_output.desc.1=便可以从燃料箱里抽取燃料 +gui.fuel_output.desc.2=灌满它们 +gui.fuel_tank.desc.0=燃料箱: +gui.fuel_tank.desc.1=需要使用燃料装载机 +gui.fuel_tank.desc.2=装满燃料箱 +gui.fuel_tank.desc.3=使用燃油罐装填满 +gui.fuel_tank.desc.4=燃料箱 +gui.infinite_item.desc=无限 +gui.lander.velocity=登陆速度 +gui.lander.velocityu=米/秒 +gui.lander.warning2=按下“ +gui.lander.warning3=”减速! +gui.max_output.desc=满功率输出 +gui.message.addnewsch.name=新增设计图 +gui.message.apply.name=应用 +gui.message.assign_name.name=命名 +gui.message.atmosphere.name=大气层 +gui.message.back.name=后退 +gui.message.breed.name=繁殖 +gui.message.bubble_visible.name=气泡可视 +gui.message.can_create_space_station.name=可以在这里创建空间站! +gui.message.cancel.name=取消 +gui.message.cannot_create_space_station.name=无法在此创建空间站。 +gui.message.catalog.name=目录 +gui.message.click_again.0.name=再次点击放大 (赏月 & 观察卫星) +gui.message.click_again.1.name=再次点击放大 (赏月) +gui.message.click_again.2.name=再次点击放大 (观察卫星) +gui.message.click_again.3.name=再次点击放大 +gui.message.clicklink=点击查看星系模组Wiki +gui.message.create_ss.name=创建 +gui.message.daynightcycle.name=昼夜交替周期 +gui.message.energy=能量 +gui.message.environment.name=光照效率 +gui.message.exit.name=退出 +gui.message.fuel.name=燃料 +gui.message.full.name=满 +gui.message.generating.name=正在生成 +gui.message.grow.name=生长 +gui.message.heal.name=治疗 +gui.message.help1=寻找星系模组的帮助页面 +gui.message.help1a=无论何时,如果希望再次看见这条帮助信息,请输入 +gui.message.help2=寻找太空计划的指导 +gui.message.help3=寻找石油的资料 +gui.message.in.name=输入 +gui.message.launch.name=发射 +gui.message.max_energy=最大能量 +gui.message.meansurfacetemp.name=平均地表温度 +gui.message.moon.atmosphere.0.name=无 +gui.message.moon.daynightcycle.0.name=29.5地球日 +gui.message.moon.meansurfacetemp.0.name=(昼面) 253℃ +gui.message.moon.meansurfacetemp.1.name=(夜面) -153℃ +gui.message.moon.surfacecomposition.0.name=玄武岩和 +gui.message.moon.surfacecomposition.1.name=奶酪的痕迹 +gui.message.moon.surfacegravity.0.name=0.1654g +gui.message.moon.surfacegravity.1.name=(地球的18% ) +gui.message.of.name=of +gui.message.oil.name=石油 +gui.message.out.name=输出 +gui.message.overworld.atmosphere.0.name=氮气和氧气 +gui.message.overworld.atmosphere.1.name=适合生物生存 +gui.message.overworld.daynightcycle.0.name=1地球日 +gui.message.overworld.meansurfacetemp.0.name=14℃ +gui.message.overworld.surfacecomposition.0.name=石头,泥土和 +gui.message.overworld.surfacecomposition.1.name=沙砾 +gui.message.overworld.surfacegravity.0.name=1.0g +gui.message.overworld.surfacegravity.1.name=(地球的100%) +gui.message.prelaunch=发射前检查列表 +gui.message.rename.name=重命名 +gui.message.select_ss.name=选定空间站 +gui.message.ss_owner.name=拥有者: +gui.message.status.name=状态 +gui.message.strengthen.name=强化 +gui.message.surfacecomposition.name=地表构成 +gui.message.surfacegravity.name=地表重力 +gui.message.thermal_status.name=温度控制器 +gui.message.tier.name= %d阶 +gui.message.unnamed.name=未命名 +gui.missing_core.name.0=未在mods文件夹中找到MicdoodleCore +gui.missing_core.name.1=星系模组载入失败 +gui.missing_core.name.2=关闭Minecraft并安装MicdoodleCore +gui.missing_core.name.3=点击下载 +gui.new_schematic.slot.desc.0=新工程设计图槽。你 +gui.new_schematic.slot.desc.1=可以通过 +gui.new_schematic.slot.desc.2=探索行星和卫星上的地牢 +gui.new_schematic.slot.desc.3=来获取新的工程设计图 +gui.oil_tank.desc.0=油箱,可以使用 +gui.oil_tank.desc.1=石油罐装填满 +gui.oxygen.warning=氧气装置失效! +gui.oxygen_compressor.slot.desc.0=氧气压缩装罐槽:装入氧气罐 +gui.oxygen_compressor.slot.desc.1=可以装罐氧气供给玩家呼吸。 +gui.oxygen_decompressor.slot.desc.0=氧气解压释放槽:装入氧气罐 +gui.oxygen_decompressor.slot.desc.1=能够清空罐中剩余的氧气。 +gui.oxygen_slot.desc.0=氧气槽:装入氧气罐, +gui.oxygen_slot.desc.1=或者连接供氧设备 +gui.oxygen_storage.desc.0=氧气存储 +gui.oxygen_storage.desc.1=氧气 +gui.oxygen_use.desc=氧气消耗 +gui.per_second=/秒 +gui.player.bpm=心率(次/分) +gui.player.food=饱食度 +gui.player.health=生命值 +gui.player.ouch=嗷!!!! +gui.receiver.cannot_attach=这里无法放置接收器! +gui.requires_controller.desc=需要发射控制器 +gui.rocket.countdown=倒计时 +gui.rocket.height=高度 +gui.rocket.inv.name=物品栏 / 燃料 +gui.rocket.launch.name=发射 +gui.rocket.launched=发射 +gui.rocket.on_launchpad=发射平台就绪 +gui.rocket.speed=速度 +gui.rocket.turn.name=左-右转 +gui.rocket.updown.name=上-下移 +gui.rocket.warning.fuelinsufficient=剩余燃料无法支持一次安全的常规发射! +gui.rocket.warning.launchcontroller=准备发射时发射取消。检查发射控制器! +gui.rocket.warning.nofuel=我得先在燃料舱里灌入足够的燃料! +gui.rocket.warning.nogyroscope=一股神秘的力量正令陀螺仪疯狂旋转! +gui.rocket.warning.noparachute=我没带降落伞!如果我就这么发射,我就难以安全返航! +gui.rocket_type.0=存储舱: 18 +gui.rocket_type.1=存储舱: 36 +gui.rocket_type.2=存储舱: 54 +gui.rocket_type.3=燃料已装填 +gui.seconds=秒 +gui.sensor.advanced=高级模式 +gui.sensor.advancedoff=关 +gui.sensor.advancedon=开 +gui.show_bubble.desc.0=显示气泡 +gui.skeleton_boss.message=由于全部玩家在战斗时离开房间,BOSS消失!重新进入房间,BOSS将再次现身! +gui.space_race.chat.add_success=%s已加入太空竞赛! +gui.space_race.chat.already_part=你早就加入太空竞赛了! +gui.space_race.chat.invite_received=已接受来自%s的太空竞赛组队邀请。 +gui.space_race.chat.not_found=并未找到名为%s的玩家。 +gui.space_race.chat.remove_success=%s已被踢出太空竞赛。 +gui.space_race.chat.to_join=请使用指令%s以加入%s +gui.space_race.coming_soon=即将到来! +gui.space_race.create.add_players.name=添加玩家 +gui.space_race.create.back.name=返回 +gui.space_race.create.brush_radius.name=画笔半径 +gui.space_race.create.brush_size.name=画笔大小 +gui.space_race.create.change_color.name.0=改变 +gui.space_race.create.change_color.name.1=队伍 +gui.space_race.create.change_color.name.2=颜色 +gui.space_race.create.close.name=关闭 +gui.space_race.create.customize.name=自定义旗帜 +gui.space_race.create.eraser_radius.name=橡皮半径 +gui.space_race.create.eraser_size.name=橡皮大小 +gui.space_race.create.global_stats.name=查阅全球数据 +gui.space_race.create.invite_player.name=邀请玩家 +gui.space_race.create.player_radius.name=注意: 玩家必须在25米范围内! +gui.space_race.create.rem_players.name=移除玩家 +gui.space_race.create.remove.name=移除 +gui.space_race.create.remove_player.name=移除玩家 +gui.space_race.create.rename.name=重命名队伍 +gui.space_race.create.send_invite.name=发送邀请 +gui.space_race.create.server_stats.name=查阅服务器数据 +gui.space_race.create.title.name.0=太空竞赛 +gui.space_race.create.title.name.1=管理器 +gui.space_race.create.title.name=太空竞赛管理器 +gui.space_race.join.member_count.name=成员%d +gui.space_race.join.name=加入 +gui.space_race.join.owner.name=拥有者 +gui.space_race.join.title.name=加入太空竞赛 +gui.space_race.unnamed=未命名团队 +gui.spacestation.added=你现在得到授权,可以自由进出%s的空间站。 +gui.spacestation.addsuccess=已将%s添加至空间站访客名单。 +gui.spacestation.allow_all_false=你的空间站现在不再对任何玩家开放。 +gui.spacestation.allow_all_true=你的空间站现在对所有玩家开放。(通过指令 /ssinvite -all 开启。) +gui.spacestation.changesuccess=空间站所有权从%s转移至%s。 +gui.spacestation.playername=<玩家名> +gui.spacestation.removesuccess=已将%s从空间站访客名单中移除。 +gui.spacestation.to_allow_entry=允许其他玩家进入该空间站。 +gui.spacestation.type_command=输入 +gui.status.active.name=运行的 +gui.status.air_lock_closed.name=气闸已关闭 +gui.status.air_lock_open.name=气闸已打开 +gui.status.blockedfully.name=阳光粒子特效关 +gui.status.blockedpartial.name=阳光粒子特效开 +gui.status.check_pending.name=检查待机中 +gui.status.check_starting.name=检查启动中 +gui.status.checking_seal.name=正在检查密封性 +gui.status.collecting.name=收集中 +gui.status.collectingenergy.name=收集能量 +gui.status.compressing.name=压缩中 +gui.status.disabled.name=禁用的 +gui.status.fulltank.name=氧气罐已满 +gui.status.generating.name=产生中 +gui.status.hull_heat.name=机壳热能 +gui.status.idle.name=空闲 +gui.status.missingleaves.name=树叶不足 +gui.status.missingoxygen.name=氧气不足 +gui.status.missingpower.name=能量不足 +gui.status.missingpower.short.name=无能量 +gui.status.missingtank.name=无可用氧气罐 +gui.status.nofuel.name=无可用燃料! +gui.status.noinvtarget.name=无装载空间! +gui.status.noitems.name=无货物供装载! +gui.status.nooil.name=无石油供应! +gui.status.not_available.name=无 +gui.status.not_generating.name=未产生 +gui.status.notargetload.name=装载目标无效! +gui.status.notargetunload.name=卸载目标无效! +gui.status.off.name=关闭 +gui.status.on.name=开启 +gui.status.raining.name=雨天 +gui.status.ready.name=就绪 +gui.status.refining.name=精炼中 +gui.status.running.name=运行中 +gui.status.sealed.name=密封的 +gui.status.sealerblocked.name=输出口堵塞! +gui.status.sun_visible.name=太阳可见 +gui.status.tank_empty.name=氧气罐已空 +gui.status.targetempty.name=目标载具空载! +gui.status.targetfull.name=目标载具满载! +gui.status.unknown.name=未知 +gui.status.unsealed.name=空间太大/未密封 +gui.tank.oxygen_remaining=氧气剩余 +gui.telemetry_fail.message=我得先手持或佩戴频率模块以追踪一个实体! +gui.telemetry_fail_no_frequency_module.message=我得手持一个频率模块才能使用它! +gui.telemetry_fail_wearing_it.message=想和遥感装置连接,我得先摘下频率模块! +gui.telemetry_succeed.message=遥感装置已连接。 +gui.thermal_slot.desc.0=温度附件插槽,作用于周围环境 +gui.thermal_slot.desc.1=温度控制器 (可选) +gui.thermal_slot.desc.2=注:会增大能量消耗! +gui.title.air_lock.name=%s的气闸控制器 +gui.tracking.message=追踪已激活.现需右击一个遥感装置来完成连接。 +gui.village.warning.no_freq_mod=我需要配备一个频率模块来和他们交流! +gui.warning.invalid_thermal=热保护无效! +gui.warning.noroom=空间不足! +gui.warning=警报! +item.air_fan.name=换气扇 +item.air_vent.name=通气孔 +item.basic_item.ambient_thermal_controller.name=环境温度控制器 +item.basic_item.canned_food.name=罐装食品 +item.basic_item.compressed_aluminum.name=致密铝板 +item.basic_item.compressed_bronze.name=致密青铜 +item.basic_item.compressed_copper.name=致密铜板 +item.basic_item.compressed_iron.name=致密铁板 +item.basic_item.compressed_steel.name=致密钢板 +item.basic_item.compressed_tin.name=致密锡板 +item.basic_item.dehydrated_apple.name=脱水苹果 +item.basic_item.dehydrated_carrot.name=脱水胡萝卜 +item.basic_item.dehydrated_melon.name=脱水西瓜 +item.basic_item.dehydrated_potato.name=脱水马铃薯 +item.basic_item.frequency_module.name=频率模块 +item.basic_item.ingot_aluminum.name=铝锭 +item.basic_item.ingot_bronze.name=青铜锭 +item.basic_item.ingot_copper.name=铜锭 +item.basic_item.ingot_steel.name=钢锭 +item.basic_item.ingot_tin.name=锡锭 +item.basic_item.raw_silicon.name=原生硅 +item.basic_item.solar_module_0.name=单体太阳能模块 +item.basic_item.solar_module_1.name=全载太阳能模块 +item.basic_item.wafer_advanced.name=高级晶圆 +item.basic_item.wafer_basic.name=基础晶圆 +item.basic_item.wafer_solar.name=蓝光太阳能晶圆 +item.battery.name=电池 +item.bucket_fuel.name=燃油桶 +item.bucket_oil.name=石油桶 +item.buggy.name=星球车 +item.buggymat.seat.name=星球车座椅 +item.buggymat.storage.name=星球车储物箱 +item.buggymat.wheel.name=星球车车轮 +item.canister.copper.name=铜罐 +item.canister.tin.name=锡罐 +item.canvas.name=帆布 +item.cheese_block.name=奶酪块 +item.cheese_curd.name=凝乳奶酪 +item.compressed_meteoric_iron.name=致密陨铁 +item.dungeonfinder.name=地牢定位仪 +item.empty_liquid_canister.name=空罐 +item.emergency_kit.description=右键可装备供氧设备等必须物品。注意:仅供一次性使用! +item.emergency_kit.name=太空应急设备 +item.engine.tier1booster.name=一阶助推器 +item.engine.tier1engine.name=一阶火箭引擎 +item.flag.name=旗帜 +item.food.cheese_slice.name=奶酪切片 +item.food.burger_bun.name=汉堡胚 +item.food.beef_patty_raw.name=生碎牛肉 +item.food.beef_patty_cooked.name=熟牛肉饼 +item.food.cheeseburger.desc=宇航员们最爱的美食——乳酪汉堡! +item.food.cheeseburger.name=乳酪汉堡 +item.food.canned_beef.name=牛肉罐头 +item.fuel.name=火箭燃油 +item.fuel_canister.name=燃油罐(满) +item.fuel_canister_partial.name=燃油罐(半满) +item.heavy_plating.name=重装防护板 +item.hot_description.name=高温 +item.ic2compat.ore_crushed_alu.name=粉碎铝矿石 +item.ic2compat.ore_purified_alu.name=纯净的粉碎铝矿石 +item.ic2compat.dust_alu.name=铝粉 +item.ic2compat.dust_small_titanium.name=小撮钛粉 +item.infinite_battery.name=无限电池 +item.infinite_oxygen.name=无限氧气罐 +item.key.t1.name=一阶地牢钥匙 +item.lunar_sapphire.description=蓝月宝石是和外星村民交易时使用的通货 +item.lunar_sapphire.name=蓝月宝石 +item.meteor_chunk.name=流星碎片(投射用) +item.meteor_chunk_hot.name=炙热流星碎片(投射用) +item.meteoric_iron_ingot.name=陨铁锭 +item.meteoric_iron_raw.name=原生陨铁 +item.nose_cone.name=鼻锥 +item.oil_canister.name=石油罐(满) +item.oil_canister_partial.name=石油罐(半满) +item.oil_extractor.name=便携抽油器 +item.oxygen_concentrator.name=氧气浓缩器 +item.oxygen_gear.name=供氧设备 +item.oxygen_mask.name=氧气面罩 +item.oxygen_tank_heavy_empty.name=重型氧气罐(空) +item.oxygen_tank_heavy_full.name=重型氧气罐 +item.oxygen_tank_light_empty.name=轻型氧气罐(空) +item.oxygen_tank_light_full.name=轻型氧气罐 +item.oxygen_tank_med_empty.name=中型氧气罐(空) +item.oxygen_tank_med_full.name=中型氧气罐 +item.parachute_black.name=黑色降落伞 +item.parachute_blue.name=浅蓝降落伞 +item.parachute_brown.name=棕色降落伞 +item.parachute_darkblue.name=蓝色降落伞 +item.parachute_darkgray.name=灰色降落伞 +item.parachute_darkgreen.name=绿色降落伞 +item.parachute_gray.name=灰白降落伞 +item.parachute_lime.name=黄绿降落伞 +item.parachute_magenta.name=品红降落伞 +item.parachute_orange.name=橙色降落伞 +item.parachute_pink.name=粉色降落伞 +item.parachute_plain.name=降落伞 +item.parachute_purple.name=紫色降落伞 +item.parachute_red.name=红色降落伞 +item.parachute_teal.name=青色降落伞 +item.parachute_yellow.name=黄色降落伞 +item.rocket_fins.name=火箭尾翼 +item.rocket_t1.name=一阶火箭 +item.schematic.name=CNSA工程设计图 +item.sensor_glasses.name=探测目镜 +item.sensor_lens.name=探测镜片 +item.standard_wrench.name=标准扳手 +item.steel_axe.name=重装斧 +item.steel_boots.name=重装靴子 +item.steel_chestplate.name=重装胸甲 +item.steel_helmet.name=重装头盔 +item.steel_hoe.name=重装锄 +item.steel_leggings.name=重装护腿 +item.steel_pickaxe.name=重装镐 +item.steel_pole.name=钢杆 +item.steel_shovel.name=重装锹 +item.steel_sword.name=重装剑 +item.tier1.desc=一阶 +item_desc.powerdraw.name=能量需求:%s/s +item_desc.shift.name=按下 %s 查看更多信息 +item_group.galacticraft_blocks=星系 | 方块 +item_group.galacticraft_items=星系 | 物品 +jei.arc_lamp.info=亮度极高的朝向性光源,装于高处效果更佳!可使用扳手转向。 +jei.electric_compressor.info=电动型的压缩机,不仅有双倍的效率,在供应二级电力时还能更快!支持漏斗输入输出。 +jei.electric_compressor.appeng.info=若希望使用AE2进行自动化,则需在合成表中设置2个模组的金属锭,详阅 https:goo.gl/BwY15G +jei.fluid_pipe.info=用于输送液体和气体的管道,使用扳手右击可打开液泵装置导出流体,但\n流体管道在液泵模式是不能直接输出液体的,所以务必使用两格以上的管道。 +jei.fuel_loader.info=装在火箭发射平台旁边,为上面的火箭填充燃料,为所有太空任务所必须——当然包括返航! +jei.magnetic_crafting.info=能保存物品的工作台,亦能使用漏斗输入的原料自动合成上次合成合成的物品。 +jei.oxygen_collector.info=从绿叶、作物乃至地球大气中收集富含氧气的混合气体以供呼吸,可用\n管道联通氧气压缩机以装填氧气罐,也可联通氧气供给机或是释放机直接供氧。 +jei.oxygen_distributor.info=在周围生成一个可供各类生物呼吸的气泡,氧气源可以是储氧模块,亦可以是氧气收集机。 +jei.oxygen_sealer.info=可在由氧气收集机或储氧模块供氧的条件下为完全密封的太空基地舱室营造可呼吸的气体环境,可利用探测目镜\n检查泄漏点!单个供给机只能为10×10×8方块大小的舱室供氧,故若试图供给更大空间,请安装多台供给机。 +jei.wrench.info=右击可为各类方块调整方向,潜行右击则可调整大部分星系\n电力机械的能量和物流接口。 +keybind.map.name=星图 +keybind.sensortoggle.name=切换传感器护目镜模式 +keybind.spaceshipinv.name=打开飞船舱 +keybind.vehiclebackward.name=载具后退 +keybind.vehicledown.name=载具下降 +keybind.vehicleforward.name=载具前进 +keybind.vehicleleft.name=载具左转 +keybind.vehicleright.name=载具右转 +keybind.vehicleup.name=载具上升 +moon.moon=月球 +planet.curseforge=CurseForge +newversion.failed.name=星系更新检查失败!15秒后重试 +newversion.success.name=发现星系模组版本: +planet.jupiter=木星 +planet.mercury=水星 +planet.neptune=海王星 +planet.overworld=地球 +planet.saturn=土星 +planet.uranus=天王星 +planet.venus=金星 +satellite.spacestation.overworld=环地空间站 +schematic.moonbuggy.name=星球车 +schematic.rocket_t1.name=一阶火箭 +schematic.rocket_t2.name=二阶火箭 +solarsystem.sol=太阳系 +star.sol=太阳系 +tile.air_lock_controller.name=气闸控制器 +tile.air_lock_frame.description=气密框架,需布置为传送门的形状,当其中一个方块被替换为控制器时,就会变为运行的气闸。 +tile.air_lock_frame.name=气密框架 +tile.air_lock_seal.name=气密闸 +tile.aluminum_wire.alu_wire.description=铝线用于从相连的能量源向耗电机器传导电力。 +tile.aluminum_wire.alu_wire.name=铝线 +tile.aluminum_wire.alu_wire_heavy.description=重质铝线用于从相连的能量源向耗电机器传导电力,且能以更高的速度为二级机器提供加成。 +tile.aluminum_wire.alu_wire_heavy.name=重质铝线 +tile.aluminum_wire.alu_wire_switch.description=分流铝线与普通的铝线类似,但可以输入红石信号开关。 +tile.aluminum_wire.alu_wire_switch.name=分流铝线 +tile.aluminum_wire.alu_wire_switch_heavy.description=分流重质铝线与普通的重质铝线类似,但可以输入红石信号开关。 +tile.aluminum_wire.alu_wire_switch_heavy.name=分流重质铝线 +tile.arclamp.description=弧光灯能够以强光照亮大片区域,并驱赶大部分怪物。 +tile.arclamp.name=弧光灯 +tile.basic_block_core.block_aluminum_gc.name=铝块 +tile.basic_block_core.block_copper_gc.name=铜块 +tile.basic_block_core.block_meteoric_iron_gc.name=陨铁块 +tile.basic_block_core.block_tin_gc.name=锡块 +tile.basic_block_core.block_silicon_gc.name=硅晶块 +tile.basic_block_core.deco_block_0.name=锡饰建材 +tile.basic_block_core.deco_block_1.name=锡饰墙砖 +tile.basic_block_core.ore_aluminum_gc.name=铝矿石 +tile.basic_block_core.ore_copper_gc.name=铜矿石 +tile.basic_block_core.ore_silicon.name=硅矿石 +tile.basic_block_core.ore_tin_gc.name=锡矿石 +tile.basic_block_moon.bricks.name=月球地牢砖 +tile.basic_block_moon.cheesestone.name=奶酪矿石 +tile.basic_block_moon.coppermoon.name=铜矿石 +tile.basic_block_moon.moondirt.name=月球土层 +tile.basic_block_moon.moongrass.name=月壤 +tile.basic_block_moon.moonstone.name=月岩 +tile.basic_block_moon.sapphiremoon.name=蓝月宝石矿 +tile.basic_block_moon.tinmoon.name=锡矿石 +tile.buggy_pad.description=将燃料补给台摆成3×3的形状,便可以摆上星球车,并通过所连接的燃料装载机补充燃料。千万别用来发射火箭! +tile.cargo.loader.name=装货器 +tile.cargo.unloader.name=卸货器 +tile.cargo_loader.description=装货器会将方块和物品装入拥有储货空间的火箭等载具.必须与发射平台或燃料补给台连接。 +tile.cargo_unloader.description=卸货器会从拥有储货空间的火箭等载具中取出所装物品和方块.必须与发射平台或燃料补给台连接。 +tile.cheese.description=奶酪块由月球的奶酪制成,可放置并食用。 +tile.cheese.name=奶酪块 +tile.circuit_fabricator.description=元件制造台会将基础材料加工为硅晶圆,用于制作先进机器。 +tile.coal_generator.description=燃煤发电机燃烧煤炭(块)来收集能量。这是最简单也是最低效的能量收集途径。 +tile.collector.description=氧气收集器会从周围的树叶中收集氧气并存储起来。 +tile.collector.name=氧气收集器 +tile.compressor.description=压缩机将锭压缩成对应的致密板.它是星系最重要的机器! +tile.compressor_electric.description=电动压缩机将锭压缩成对应的致密板,且每次可以生产两份成品,因而比前版要高效。 +tile.compressor_advanced.description=效率更高的电动压缩机,能快速地将金属锭压缩成对应的致密物品。 +tile.concealed_detector.name=玩家侦测仪 +tile.concealed_redstone.name=隐形红石线 +tile.concealed_repeater.name=隐形红石中继器 +tile.crude_oil.name=石油 +tile.crude_oil_moving.name=石油 +tile.crude_oil_still.name=石油 +tile.deconstructor.description=解构机能够拆卸废弃的火箭等物品并回收材料。 +tile.dishbase.description=通讯雷达可以追踪空间站位置并接收来自遥远空间站的信号。 +tile.dishbase.name=通讯雷达 +tile.distributor.description=氧气释放机利用内部的储气罐,以自身为中心释放一个氧气泡,气泡内可以自由呼吸。 +tile.distributor.name=氧气释放机 +tile.dummyblock.cryogenic_chamber.name=冬眠舱 +tile.dummyblock.launch_pad.name=火箭发射平台 +tile.dummyblock.nasa_workbench.name=CNSA工程台 +tile.dummyblock.solar.name=太阳能板 +tile.dummyblock.space_station_base.name=空间站基板 +tile.electric_furnace_tier1.description=电炉冶炼物品比熔炉更快。 +tile.electric_furnace_tier2.description=电弧炉不仅拥有更高的速度,还能增产各类矿物! +tile.emergency_box.description=安置于星球首次登陆点,内含一套太空应急设备,还能驱赶敌对生物。 +tile.emergency_box.filled.name=太空应急栓(满) +tile.emergency_box.name=太空应急栓 +tile.enclosed.aluminum_wire.name=气密铝线 +tile.enclosed.copper_cable.name=气密铜质导线 +tile.enclosed.description=空气无法通过气密方块,常用作空间站墙壁等。 +tile.enclosed.fluid_pipe.name=气密流体管道 +tile.enclosed.glass_fibre_cable.name=气密玻璃纤维线缆 +tile.enclosed.gold_cable.name=气密金质导线 +tile.enclosed.heavy_aluminum_wire.name=气密重质铝线 +tile.enclosed.hv_cable.name=气密高压导线 +tile.enclosed.lv_cable.name=气密锡质导线 +tile.enclosed.me_cable.name=气密ME线缆 +tile.enclosed.pipe_fluids_cobblestone.name=气密圆石流体管道 +tile.enclosed.pipe_fluids_stone.name=气密石头流体管道 +tile.enclosed.pipe_items_cobblestone.name=气密圆石物品管道 +tile.enclosed.pipe_items_stone.name=气密石质物品管道 +tile.enclosed.pipe_power_gold.name=气密金质能量管道 +tile.enclosed.pipe_power_stone.name=气密石质能量管道 +tile.energy_storage_module_tier1.description=储能模块能够存储大量电力以备使用。 +tile.energy_storage_module_tier2.description=储能簇能够存储大量电力以备使用,且储量更大、功率更高。 +tile.fallen_meteor.description=陨石在许多大气层稀薄的星球都能发现,破坏后掉落原生陨铁。 +tile.fallen_meteor.name=陨石 +tile.fluid_pipe.description=流体管道能够从源头将液体和气体传输至目标,使用标准扳手可以改变其模式。 +tile.fluid_pipe.name=流体管道 +tile.fluid_pipe_pull.description=流体管道能够从源头将液体和气体传输至目标,使用标准扳手可以改变其模式。 +tile.fluid_pipe_pull.name=流体管道接口 +tile.fluid_tank.description=流体罐能够存储液体和气体以备使用。 +tile.fluid_tank.name=流体罐 +tile.fuel.name=燃油 +tile.fuel_block.name=燃油 +tile.fuel_loader.description=燃料装载机可以将燃油注入相连平台上的火箭等载具中。 +tile.fuel_loader.name=燃料装载机 +tile.glowstone_torch.description=萤石火把可以在无氧条件下提供照明。 +tile.glowstone_torch.name=萤石火把 +tile.grating.name=格栅 +tile.landing_pad.buggy_fueler.name=星球车补给台 +tile.landing_pad.cargo_pad.name=货运火箭平台 +tile.landing_pad.description=将发射平台摆成3×3的形状,便可以摆上火箭,并连接燃料装载机,装货器,卸货器和发射控制器。 +tile.landing_pad.landing_pad.name=火箭发射平台 +tile.landing_pad_full.name=火箭发射平台 +tile.machine.0.name=燃煤发电机 +tile.machine.1.name=储能模块 +tile.machine.2.name=电炉 +tile.machine.3.name=压缩机 +tile.machine.7.name=电弧炉 +tile.machine.8.name=储能簇 +tile.machine2.4.name=电动压缩机 +tile.machine2.5.name=元件制造台 +tile.machine2.6.name=储氧模块 +tile.machine2.10.name=解构机 +tile.machine3.9.name=染色器 +tile.machine4.11.name=高级压缩机 +tile.magnetic_table.name=磁力合成台 +tile.magnetic_table.description=磁力合成台中的合成材料不会爆满地,它们会被保存起来! 点击shift可以快捷导入物品.利用漏斗输入输出物品, 它将尝试自动执行上一个合成。 +tile.moon_stairs_brick.name=月球地牢砖楼梯 +tile.moon_stairs_stone.name=月岩楼梯 +tile.ore_copper.name=铜矿石 +tile.ore_tin.name=锡矿石 +tile.oxygen_compressor.0.name=氧气压缩机 +tile.oxygen_compressor.1.name=氧气解压机 +tile.oxygen_compressor.description=氧气压缩机会将内存氧气充入氧气罐中。 +tile.oxygen_decompressor.description=氧气解压机会从氧气罐中提取氧气并存储。 +tile.oxygen_detector.description=氧气侦测仪会在侦测到氧气时发出红石信号。 +tile.oxygen_detector.name=氧气侦测仪 +tile.oxygen_storage_module.description=储氧模块储存大量氧气以备使用。 +tile.painter.description=利用任意有色方块或染料,便可以给真空玻璃、照明面板等可染色方块涂上鲜艳的色彩! +tile.panel_lighting.description=照明面板在太空中提供照明,可以使用扳手旋转,拿在手上潜行右击一般方块可以改变其外观。 +tile.panel_lighting_0.name=照明面板(方形) +tile.panel_lighting_1.name=照明面板(聚光) +tile.panel_lighting_2.name=照明面板(线性) +tile.panel_lighting_3.name=照明面板(暗色) +tile.panel_lighting_4.name=照明面板(阴暗) +tile.parachest.description=伞降箱会在登陆某行星(如地球)或卫星时从天而降。包含了之前发射的火箭、燃料和货物。 +tile.parachest.name=伞降箱 +tile.platform.description=完整的液压平台由4个该种方块组成,能将玩家抬升(跳跃键)或下降(潜行键)至相邻的平台。 +tile.platform.name=液压平台 +tile.refinery.description=燃油精炼机消耗能量将石油精炼成火箭等载具使用的燃油。 +tile.refinery.name=燃油精炼机 +tile.compact_workbench.name=紧凑型CNSA工程台 +tile.compact_workbench.description=CNSA工程台的紧凑型变体。 +tile.rocket_workbench.name=CNSA工程台 +tile.rocket_workbench.description=CNSA工程台用于制造高级部件和载具。可添加新发现的设计图。 +tile.sapling2.birch.name=白桦树苗 +tile.sapling2.jungle.name=丛林树苗 +tile.sapling2.oak.name=橡木树苗 +tile.sapling2.spruce.name=云杉树苗 +tile.sealer.description=氧气供给机会检测所处空间是否密封,并释放可呼吸空气充满密封空间。 +tile.sealer.name=氧气供给机 +tile.slab_gc_half.moon_bricks_slab.name=月球地牢砖台阶 +tile.slab_gc_half.moon_slab.name=月岩台阶 +tile.slab_gc_half.tin_slab_1.name=锡饰台阶 +tile.slab_gc_half.tin_slab_2.name=锡饰台阶 +tile.solar.advanced_solar.name=高级太阳能板 +tile.solar.basic_solar.name=基础太阳能板 +tile.solar_adv.description=高级太阳能板利用阳光产生电能以供使用。能够自动旋转以维持最高的产能效率。 +tile.solar_basic.description=基础太阳能板利用阳光产生电能以供使用。无法旋转,在正午产能效率最高。 +tile.space_glass.description=真空密封玻璃为太空基地而生。可以使用周围的染色器喷涂任意颜色的边框! +tile.space_glass.clear.description=澄澈玻璃可以用于欣赏太空美景,也可以提供清晰的水下视野。 +tile.space_glass.strong.description=由高透明度铝材制造的坚硬抗爆玻璃。 +tile.space_glass_clear.name=澄澈真空玻璃 +tile.space_glass_vanilla.name=真空玻璃 +tile.space_glass_strong.name=硬化真空玻璃 +tile.space_station_base.name=空间站登入点 +tile.spin_thruster.description=旋转推进器推动空间站旋转并产生类似重力的效果。 +tile.spin_thruster.name=旋转推进器 +tile.telemetry.description=遥感装置会从与其建立连接的火箭、玩家、怪物中收集数据。最好放置于显示屏附近.可使用频率模块来建立连接。 +tile.telemetry.name=遥感装置 +tile.tin_stairs_1.name=锡饰楼梯 +tile.tin_stairs_2.name=锡饰楼梯 +tile.treasure_chest.description=一阶珍宝箱在月球地牢生成,打败最终boss获取钥匙以打开。 +tile.treasure_chest.name=一阶珍宝箱 +tile.unlit_torch.name=阴燃火把 +tile.unlit_torch_stone.name=阴燃石火把 +tile.unlit_torch_lit.name=火把 +tile.unlit_torch_stone_lit.name=石火把 +tile.view_screen.description=显示屏是太空基地用触摸屏。右击改变其显示的信息。 +tile.view_screen.name=显示屏 +tile.wall_gc.moon.name=月岩墙 +tile.wall_gc.moon_bricks.name=月球地牢砖墙 +tile.wall_gc.tin.name=锡饰墙 + +advancement.galacticraft.root.title=星系 +advancement.galacticraft.root.description=探索月球……直到星河的彼方! +advancement.galacticraft.coal_generator.title=煤炭能源 +advancement.galacticraft.coal_generator.description=合成燃煤发电机。 +advancement.galacticraft.circuit_fabricator.title=精工制造 +advancement.galacticraft.circuit_fabricator.description=合成元件制造台以制造晶圆。 +advancement.galacticraft.basic_wafer.title=美味的威化饼 +advancement.galacticraft.basic_wafer.description=制造基础晶圆(请别把它当威化饼吃了)。 +advancement.galacticraft.advanced_wafer.title=表面金黄 +advancement.galacticraft.advanced_wafer.description=制造高级晶圆(说了不是烤焦的威化饼了)。 +advancement.galacticraft.compressor.title=压缩紧实 +advancement.galacticraft.compressor.description=合成压缩机。 +advancement.galacticraft.solar.title=免费能源 +advancement.galacticraft.solar.description=合成基础太阳能板。 +advancement.galacticraft.advanced_solar.title=又快又高效 +advancement.galacticraft.advanced_solar.description=合成高级太阳能板。 +advancement.galacticraft.electric_compressor.title=电气化升级 +advancement.galacticraft.electric_compressor.description=合成电动压缩机。 +advancement.galacticraft.oil.title=黏糊糊的玩意 +advancement.galacticraft.oil.description=掉进石油里。 +advancement.galacticraft.refiery.title=是时候精炼一下了! +advancement.galacticraft.refiery.description=合成燃油精炼机。 +advancement.galacticraft.rocket_fuel.title=火箭燃料 +advancement.galacticraft.rocket_fuel.description=启动燃油精炼机精炼石油。 +advancement.galacticraft.oxygen_collector.title=不含氧气 +advancement.galacticraft.oxygen_collector.description=合成氧气收集器。 +advancement.galacticraft.oxygen_compressor.title=连空气一起压缩 +advancement.galacticraft.oxygen_compressor.description=合成氧气压缩机。 +advancement.galacticraft.fill_tank.title=空转二连 +advancement.galacticraft.fill_tank.description=灌满一个氧气罐。 +advancement.galacticraft.fill_all_tanks.title=囤积氧气 +advancement.galacticraft.fill_all_tanks.description=灌满所有种类的氧气储罐。 +advancement.galacticraft.all_oxygen_gear.title=全副武装 +advancement.galacticraft.all_oxygen_gear.description=制作在太空中呼吸所需的全套装备。 +advancement.galacticraft.rocket_workbench.title=太空工程师 +advancement.galacticraft.rocket_workbench.description=制造CNSA工程台。 +advancement.galacticraft.rocket_t1.title=我们有火箭了! +advancement.galacticraft.rocket_t1.description=将准备好的材料组装成火箭。 +advancement.galacticraft.fuel_loader.title=把她填满! +advancement.galacticraft.fuel_loader.description=制造燃料装载机。 +advancement.galacticraft.launch_rocket.title=我们上天了! +advancement.galacticraft.launch_rocket.description=首次发射火箭。 +advancement.galacticraft.moon.title=月球! +advancement.galacticraft.moon.description=在月球上降落。 +advancement.galacticraft.create_space_station.title=空间站 +advancement.galacticraft.create_space_station.description=创建你自己的空间站!。 +advancement.galacticraft.spin_thruster.title=转得我头晕眼花 +advancement.galacticraft.spin_thruster.description=制造旋转推进器。 +advancement.galacticraft.moon_dungeon.title=比凋灵更坏 +advancement.galacticraft.moon_dungeon.description=在月球地牢中遭遇太空骷髅王。 +advancement.galacticraft.dungeon_key_moon.title=我有钥匙 +advancement.galacticraft.dungeon_key_moon.description=干掉地牢中的BOSS,拿走钥匙。 +advancement.galacticraft.moon_buggy_schematic.title=花里胡哨的设计图 +advancement.galacticraft.moon_buggy_schematic.description=获取§oCNSA工程设计图(星球车)。 +advancement.galacticraft.moon_buggy.title=星球车 +advancement.galacticraft.moon_buggy.description=把部件组装成星球车。 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_tw.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_tw.lang new file mode 100644 index 00000000..5b87cb93 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/lang/zh_tw.lang @@ -0,0 +1,762 @@ +checklist.create_grapple.key=製作抓鉤 +checklist.equip_oxygen_suit.key=裝備氧氣供給裝置 +checklist.equip_parachute.key=裝備降落傘 +command.gcastrominer.count=玩家%s的阿斯抽挖掘機數量有%s +commands.emergencykit=%s被給予一個應急工具包! +commands.dimensionteleport=%s被傳送到%s附近。 +commands.dimensiontp.too_many=太多指令參數!用法:%s +commands.gcenergyunits.invalid_units=有無效單元在/GCEnergyUnits指令內。用法:%s +commands.gcenergyunits.no_units=這個單元需要被指定!用法:%s +commands.gchouston.confirm.1=這是任務控制,請再說一次? +commands.gchouston.confirm.2=(再次輸入/gchouston確認以放棄任務。) +commands.gchouston.fail=指令/gchouston只能在太空(或創造模式)下使用。 +commands.gchouston.help.1=額,休斯頓,我們遇到了問題.... +commands.gchouston.help.2=(輸入/gchouston以放棄任務並回家。) +commands.gchouston.noop=對其他玩家使用指令/gchouston僅適用於操作員。 +commands.gchouston.success=好的,準備,%s,傳送到主世界家的位置。 +commands.joinrace.no_team=隊伍需要被指定!用法:%s +commands.ssinvite.not_found=無法於太空站裏找到你的名字,你要先去那裏一趟! +commands.ssinvite.wrong_usage=指令參數不足!用法:%s +commands.ssnewowner.wrong_usage=無法辨認太空站ID# - 它有存在過嗎?用法:%s +commands.ssuninvite.no_player=無法在你的太空站清單中找到叫做%s的玩家! +container.cargoloader.name=貨物裝載器 +container.cargounloader.name=貨物卸載器 +container.fuelloader.name=燃料注入器 +container.lander.name=登陸艙 +container.magneticcrafting.name=磁力合成臺 +container.oxygencollector.name=氧氣收集器 +container.oxygencompressor.name=氧氣壓縮機 +container.oxygendecompressor.name=氧氣解壓縮器 +container.oxygendistributor.name=氧氣分配器 +container.oxygensealer.name=氧氣密封器 +container.parachest.name=傘降箱 +container.refinery.name=精煉器 +container.solaradvanced.name=高級太陽能板 +container.solarbasic.name=基礎太陽能板 +container.spaceship.name=一階火箭 +container.treasurechest.name=珍品箱 +death.attack.meteor_chunk=%1$s被隕石碎片擊穿! +death.attack.oxygen_suffocation=%1$s因氧氣消耗殆盡而死! +death.attack.spaceship_crash=%1$s的火箭墜毀於地面。噢。 +death.attack.sulphuric_acid=%1$s被硫酸溶化! +death.attack.thermal=%1$s忘記了高溫保護 +dimension.moon.name=月球 +dimension.overworld.name=主世界(地球) +dimension.sun.name=太陽 +entity.alien_villager.name=外星村民 +entity.buggy.name=星球車 +entity.celestial_screen.name=天體屏幕 +entity.evolved_creeper.name=苦力怕(進化體) +entity.evolved_skeleton.name=骷髏(進化體) +entity.evolved_skeleton_boss.name=骷髏王(進化體) +entity.evolved_spider.name=蜘蛛(進化體) +entity.evolved_zombie.name=殭屍(進化體) +ntity.evolved_enderman.name=終界使者(進化體) +entity.evolved_witch.name=女巫(進化體) +entity.flag.name=旗幟 +entity.gcflag.name=旗幟 +entity.gravity_arrow.name=箭 +entity.lander.name=登陸艙 +entity.meteor.name=隕石 +entity.meteor_chunk.name=隕石塊 +entity.oxygen_bubble.name=氧氣泡沫 +entity.para_chest.name=傘降箱 +entity.rocket_t1.name=一階火箭 +galaxy.milky_way=銀河系 +gc.configgui.allow_liquids_grating=允許液體流入格柵 +gc.configgui.alternate_canister_recipe=儲氣罐的其它合成配方 +gc.configgui.asteroids_flags=挑戰模式旗幟 +gc.configgui.asteroids_start=挑戰模式(從小行星開始) +gc.configgui.biome_id_base=GC生物群系ID基數 +gc.configgui.detectable_i_ds=可檢測ID +gc.configgui.disable_biome_type_registrations=禁止生物群系種類註冊 +gc.configgui.disable_cheese_moon=禁止月球奶酪礦生成 +gc.configgui.disable_copper_moon=禁止月球銅礦生成 +gc.configgui.disable_lander=在月球上禁用登陸艙,改為使用降落傘 +gc.configgui.disable_moon_village_gen=禁止月球村莊生成 +gc.configgui.disable_ore_dict_space_metals=必須在合成表中使用GC自身的太空金屬 +gc.configgui.disable_sapphire_moon=禁止月球藍月寶石礦生成 +gc.configgui.disable_space_station_creation=禁止創建太空站 +gc.configgui.disable_spaceship_grief=禁止火箭爆炸 +gc.configgui.disable_spaceship_particles=關閉火箭粒子效果 +gc.configgui.disable_tin_moon=禁止月球錫礦生成 +gc.configgui.disable_update_check=禁用更新檢查 +gc.configgui.disable_vehicle_camera_changes=Vivecraft:禁用第三人稱和縮放 +gc.configgui.dungeon_boss_health_mod=調整地牢Boss血量 +gc.configgui.enable_aluminum_ore_gen=主世界鋁礦生成 +gc.configgui.enable_copper_ore_gen=主世界銅礦生成 +gc.configgui.enable_debug=在控制臺裏顯示除錯信息 +gc.configgui.enable_other_mods_features=允許所有其它模組的世界生成 +gc.configgui.enable_retrogen_oil=主世界地底石油生成 +gc.configgui.enable_sealer_edge_checks=密封邊緣檢測 +gc.configgui.enable_silicon_ore_gen=主世界矽礦生成 +gc.configgui.enable_space_race_manager_popup=太空競賽管理器彈出窗口 +gc.configgui.enable_thaum_craft_nodes=允許ThaumCraft靈氣節點生成與星球上 +gc.configgui.enable_tin_ore_gen=主世界錫礦生成 +gc.configgui.external_oil_gen=主世界地表石油生成 +gc.configgui.force_overworld_respawn=強制在主世界重生 +gc.configgui.hard_mode=困難科技模式 +gc.configgui.id_achiev_base=基礎成就ID +gc.configgui.id_dimension_moon=月球維度ID +gc.configgui.id_dimension_overworld=主世界維度 +gc.configgui.id_dimension_overworld_orbit=太空站維度ID +gc.configgui.id_dimension_overworld_orbit_static=太空站靜態維度ID +gc.configgui.id_schematic_add_schematic=“添加設計圖”設計圖ID +gc.configgui.id_schematic_moon_buggy=探月車設計圖ID +gc.configgui.id_schematic_rocket_t1=一階火箭設計圖ID +gc.configgui.key_override_fuel_level=設置快捷鍵:火箭燃料表 +gc.configgui.key_override_toggle_adv_goggles=設置快捷鍵:高級護目鏡 +gc.configgui.map_scroll_invert=反向滾動地圖 +gc.configgui.map_scroll_sensitivity=鼠標滾動地圖信息顯示 +gc.configgui.meteor_block_damage=隕石破壞地形啟用 +gc.configgui.meteor_spawn_mod=調整隕石生成 +gc.configgui.more_stars=顯示更多天體 +gc.configgui.oil_gen_factor=石油生成係數 +gc.configgui.ore_dict_silicon=在其它模組裏矽礦的礦物詞典名稱 +gc.configgui.other_mod_ore_gen_i_ds=允許生成其它模組的礦物在星球上 +gc.configgui.override_capes=自動使用贊助披風 +gc.configgui.override_map=設置快捷鍵:星系地圖 +gc.configgui.oxygen_indicator_bottom=下移氧氣指示器 +gc.configgui.oxygen_indicator_left=左移氧氣指示器 +gc.configgui.planet_worldborders=登月點最大x、z值 +gc.configgui.quick_mode=快速遊戲(更簡單) +gc.configgui.rocket_disable_overworld_return=禁止主世界火箭返航 +gc.configgui.rocket_disabled_dimensions=禁用火箭維度 +gc.configgui.rocket_fuel_factor=火箭燃料係數 +gc.configgui.sealable_i_ds=可密封方塊 +gc.configgui.space_station_energy_scalar=調整太空站能量 +gc.configgui.space_stations_require_permission=太空站權限 +gc.configgui.static_loaded_dimensions=靜態加載維度 +gc.configgui.static_loaded_new_ss=靜態加載新的太空站? +gc.configgui.suffocation_cooldown=窒息冷卻時間 +gc.configgui.suffocation_damage=窒息傷害 +gc.configgui.title=Galacticraft核心配置 +gc.configgui.use_old_fuel_fluid_i_d=使用傳統的燃油註冊 +gc.configgui.use_old_oil_fluid_i_d=使用傳統的石油註冊 +gc.configgui.whitelist_co_f_h_core_gen=CoFHCore世界生成白名單 +gui.battery_slot.desc.0=電池槽,將電池放置於此 +gui.battery_slot.desc.1=或者使用相連接的能量源 +gui.bed_fail.message=呃,喔,如果我在睡覺的時候氧氣都沒了怎麼辦?我需要低溫倉在太空裏睡覺! +gui.buggy.accel.name=加速 +gui.buggy.decel.name=減速 +gui.buggy.inv.name=物品欄/燃料 +gui.buggy.storage_space=存儲空間 +gui.buggy.turn.name=左轉-右轉 +gui.button.back.name=返回 +gui.button.disable.name=關閉 +gui.button.disableseal.name=禁用密閉 +gui.button.enable.name=開啟 +gui.button.enableseal.name=密閉啟動 +gui.button.hide_dest.name=隱藏 +gui.button.loadfuel.name=加載燃料 +gui.button.loaditems.name=載入物品 +gui.button.next.name=下一個 +gui.button.paintapply.name=啟用塗層 +gui.button.paintmix.name=混合顏色 +gui.button.paintreset.name=重置顏色 +gui.button.refine.name=精煉 +gui.button.stoploading.name=停止載入 +gui.button.stoprefine.name=停止精煉 +gui.button.stopunloading.name=停止卸載 +gui.button.unhide_dest.name=取消隱藏 +gui.button.unloaditems.name=卸載物品 +gui.button.unlockschematic.name=解鎖設計圖 +gui.checkbox.horizontal.name=水平模式 +gui.checkbox.invert.name=反向選取 +gui.checkbox.player_name.name=玩家名字是 +gui.checkbox.player_within.name=玩家在里面 +gui.checkbox.redstone_signal.name=紅石信號開啟 +gui.chest.warning.wrongkey=我可能需要一個%s階的地牢鑰匙來解鎖這個! +gui.choose_planet.desc.moon=宜居#無氧氣#重力:18% +gui.choose_planet.desc.overworld=生機勃勃#宜居#重力:100% +gui.chooseplanet.alreadycreated1.name=空間站已經 +gui.chooseplanet.alreadycreated2.name=建立! +gui.chooseplanet.cannotcreate1.name=無法建立空間 +gui.chooseplanet.cannotcreate2.name=空間站在此! +gui.creative_only.desc=只有創造模式可用 +gui.display.nolink=無連接 +gui.docking_rocket.current_vel.name=當前速度 +gui.docking_rocket.distance_from.name=離目標距離 +gui.docking_rocket.target_vel.name=目標速度 +gui.docking_rocket.warning.name.0=按%s減速 +gui.docking_rocket.warning.name.1=按%s加速 +gui.dropbox.player_distance.name.0=1米 +gui.dropbox.player_distance.name.1=2米 +gui.dropbox.player_distance.name.2=5米 +gui.dropbox.player_distance.name.3=10米 +gui.electric_compressor.desc.0=進度 +gui.energy_storage.desc.0=能量存儲 +gui.energy_storage.desc.1=能量 +gui.flag.already_placed=旗幟已經放置於此! +gui.frequency_module.desc.0=可以收到微弱的聲波 +gui.frequency_module.desc.1=與遠距離信號 +gui.frequencymodule.warning0=我可能需要一個 +gui.frequencymodule.warning1=如果我想在這清楚的聽到聲音。 +gui.fuel_output.desc.0=將空的液體罐放置於 +gui.fuel_output.desc.1=這個槽中,可以從燃料箱里 +gui.fuel_output.desc.2=抽取液體灌滿它們 +gui.fuel_tank.desc.0=燃料箱。需要 +gui.fuel_tank.desc.1=燃料裝載器將燃料 +gui.fuel_tank.desc.2=裝入燃料箱,需要用 +gui.fuel_tank.desc.3=燃料罐裝填滿 +gui.fuel_tank.desc.4=燃料箱 +gui.infinite_item.desc=無限 +gui.lander.velocity=登陸速度 +gui.lander.velocityu=米/秒 +gui.lander.warning2=按下“ +gui.lander.warning3=”以減速! +gui.max_output.desc=最大輸出 +gui.message.addnewsch.name=新增設計圖 +gui.message.apply.name=應用 +gui.message.assign_name.name=命名 +gui.message.atmosphere.name=大氣層 +gui.message.back.name=後退 +gui.message.breed.name=繁殖 +gui.message.bubble_visible.name=可看見氣泡 +gui.message.can_create_space_station.name=這裏可以創建一個太空站! +gui.message.cancel.name=取消 +gui.message.cannot_create_space_station.name=這裏不能創建太空站! +gui.message.catalog.name=目錄 +gui.message.click_again.0.name=再次點擊放大(賞月或是觀測衛星) +gui.message.click_again.1.name=再次點擊放大(賞月) +gui.message.click_again.2.name=再次點擊放大(觀測衛星) +gui.message.click_again.3.name=再次點擊放大 +gui.message.clicklink=點擊查看Galacticraft維基百科 +gui.message.create_ss.name=創建 +gui.message.daynightcycle.name=日夜循環周期 +gui.message.energy=能量 +gui.message.environment.name=環境促進 +gui.message.exit.name=離開 +gui.message.fuel.name=燃料 +gui.message.full.name=滿 +gui.message.generating.name=生成中 +gui.message.grow.name=生長 +gui.message.heal.name=治療 +gui.message.help1=尋找Galacticraft的幫助頁面 +gui.message.help1a=無論在什麼時候,如果希望再次看見這條信息,請輸入 +gui.message.help2=尋找太空計劃指導 +gui.message.help3=尋找石油的資料 +gui.message.in.name=輸入 +gui.message.launch.name=發射 +gui.message.max_energy=最大能量 +gui.message.meansurfacetemp.name=平均表面溫度 +gui.message.moon.atmosphere.0.name=無 +gui.message.moon.daynightcycle.0.name=29.5個地球日 +gui.message.moon.meansurfacetemp.0.name=(光亮面)253度 +gui.message.moon.meansurfacetemp.1.name=(黑暗面)-153度 +gui.message.moon.surfacecomposition.0.name=玄武巖與 +gui.message.moon.surfacecomposition.1.name=奶酪的痕跡 +gui.message.moon.surfacegravity.0.name=0.1654克 +gui.message.moon.surfacegravity.1.name=(地球的18%) +gui.message.of.name=of +gui.message.oil.name=石油 +gui.message.out.name=輸出 +gui.message.overworld.atmosphere.0.name=氮氣與氧氣 +gui.message.overworld.atmosphere.1.name=適合生物生存 +gui.message.overworld.daynightcycle.0.name=1個地球日 +gui.message.overworld.meansurfacetemp.0.name=14度 +gui.message.overworld.surfacecomposition.0.name=石頭,泥土,與 +gui.message.overworld.surfacecomposition.1.name=礫石 +gui.message.overworld.surfacegravity.0.name=1.0克 +gui.message.overworld.surfacegravity.1.name=(地球的100%) +gui.message.prelaunch=發射前檢查列表 +gui.message.rename.name=重新命名 +gui.message.select_ss.name=選擇一個太空站 +gui.message.ss_owner.name=擁有者: +gui.message.status.name=狀態 +gui.message.strengthen.name=強化 +gui.message.surfacecomposition.name=表面成分 +gui.message.surfacegravity.name=表面重力 +gui.message.thermal_status.name=温度控制器 +gui.message.tier.name=%d階 +gui.message.unnamed.name=未命名 +gui.missing_core.name.0=未在Mods文件夾內找到MicdoodleCore +gui.missing_core.name.1=星系模組載入失敗 +gui.missing_core.name.2=關閉Minecraft然後安裝MicdoodleCore +gui.missing_core.name.3=點擊這里打開下載頁面 +gui.new_schematic.slot.desc.0=新設計圖槽。你可以 +gui.new_schematic.slot.desc.1=通過探索行星和月球 +gui.new_schematic.slot.desc.2=的地牢來獲得新的設 +gui.new_schematic.slot.desc.3=計圖 +gui.oil_tank.desc.0=石油箱,需要用 +gui.oil_tank.desc.1=油罐裝填滿 +gui.oxygen.warning=氧氣裝置配置無效! +gui.oxygen_compressor.slot.desc.0=氧氣槽,在這裏放置氧氣罐或油箱 +gui.oxygen_compressor.slot.desc.1=或是直接連接供氧設備 +gui.oxygen_decompressor.slot.desc.0=壓縮機罐槽,放置氧氣罐 +gui.oxygen_decompressor.slot.desc.1=這裏填充可呼吸氣氧。 +gui.oxygen_slot.desc.0=氧氣槽,在這裏放置氧氣罐或油箱 +gui.oxygen_slot.desc.1=或是直接連接供氧設備 +gui.oxygen_storage.desc.0=氧氣存儲 +gui.oxygen_storage.desc.1=氧氣 +gui.oxygen_use.desc=氧氣使用 +gui.per_second=/秒 +gui.player.bpm=心跳率 +gui.player.food=食物 +gui.player.health=生命值 +gui.player.ouch=嗷!!!! +gui.receiver.cannot_attach=這里無法放置接收器! +gui.requires_controller.desc=需要發射控制器 +gui.rocket.countdown=倒計時 +gui.rocket.height=高度 +gui.rocket.inv.name=物品欄/燃料 +gui.rocket.launch.name=發射 +gui.rocket.launched=已發射 +gui.rocket.on_launchpad=發射平臺就绪 +gui.rocket.speed=速度 +gui.rocket.turn.name=左-右轉 +gui.rocket.updown.name=上-下轉 +gui.rocket.warning.fuelinsufficient=剩餘燃料無法支持一次安全的常規發射! +gui.rocket.warning.launchcontroller=準備發射時發射取消。檢查發射控制器! +gui.rocket.warning.nofuel=我需要先裝入一些火箭燃料! +gui.rocket.warning.nogyroscope=神秘的力量令陀螺儀瘋狂旋轉! +gui.rocket.warning.noparachute=我沒有降落傘!如果你再次按發射,就沒法回去了! +gui.rocket_type.0=存儲空間:18 +gui.rocket_type.1=存儲空間:36 +gui.rocket_type.2=存儲空間:56 +gui.rocket_type.3=裝入燃料前 +gui.seconds=秒 +gui.sensor.advanced=高級模式 +gui.sensor.advancedoff=關 +gui.sensor.advancedon=開 +gui.show_bubble.desc.0=顯示氣泡 +gui.skeleton_boss.message=Boss消失,戰鬥時不要離開這個Boss的房間!重新進入這個房間會重新生成Boss。 +gui.space_race.chat.add_success=%s已參加太空競賽! +gui.space_race.chat.already_part=你已經是這個太空競賽的一員! +gui.space_race.chat.invite_received=從%s收到太空競賽隊伍的邀請。 +gui.space_race.chat.not_found=未能找到叫做%s的玩家 +gui.space_race.chat.remove_success=%s已從太空競賽中移除。 +gui.space_race.chat.to_join=參加%s用指令%s +gui.space_race.coming_soon=即將到來 +gui.space_race.create.add_players.name=添加玩家 +gui.space_race.create.back.name=後退 +gui.space_race.create.brush_radius.name=畫筆半徑 +gui.space_race.create.brush_size.name=畫筆大小 +gui.space_race.create.change_color.name.0=改變 +gui.space_race.create.change_color.name.1=隊伍 +gui.space_race.create.change_color.name.2=顏色 +gui.space_race.create.close.name=關閉 +gui.space_race.create.customize.name=自定義旗幟 +gui.space_race.create.eraser_radius.name=橡皮半徑 +gui.space_race.create.eraser_size.name=橡皮大小 +gui.space_race.create.global_stats.name=查看全球資料 +gui.space_race.create.invite_player.name=邀請玩家 +gui.space_race.create.player_radius.name=注意:玩家必須在范圍內!(25格) +gui.space_race.create.rem_players.name=移除玩家 +gui.space_race.create.remove.name=移除 +gui.space_race.create.remove_player.name=移除玩家 +gui.space_race.create.rename.name=重命名隊伍 +gui.space_race.create.send_invite.name=發送邀請 +gui.space_race.create.server_stats.name=查看服務器資料 +gui.space_race.create.title.name=太空競賽管理器 +gui.space_race.create.title.name.0=太空競賽 +gui.space_race.create.title.name.1=管理器 +gui.space_race.join.member_count.name=%d成員 +gui.space_race.join.name=加入 +gui.space_race.join.owner.name=擁有者 +gui.space_race.join.title.name=加入太空競賽 +gui.space_race.unnamed=未命名隊伍 +gui.spacestation.added=你已經加入了%s的太空站授權玩家清單! +gui.spacestation.addsuccess=成功增加%s到太空站清單! +gui.spacestation.allow_all_false=你的太空站現在不再開放給所有玩家! +gui.spacestation.allow_all_true=你的太空站現在開放給所有玩家!(用/ssinvite -all以取消動作。) +gui.spacestation.changesuccess=已從舊擁有者%s改變至新擁有者%s。 +gui.spacestation.playername=<玩家名字> +gui.spacestation.removesuccess=成功從太空站清單移除%s +gui.spacestation.to_allow_entry=可運行其他玩家進入這個空間站! +gui.spacestation.type_command=輸入 +gui.status.active.name=運行的 +gui.status.air_lock_closed.name=氣閘已關閉 +gui.status.air_lock_open.name=氣閘開啟 +gui.status.blockedfully.name=陽光粒子效果不可視 +gui.status.blockedpartial.name=陽光粒子效果可視 +gui.status.check_pending.name=檢查待定中 +gui.status.check_starting.name=檢查開始中 +gui.status.checking_seal.name=正在檢查密封 +gui.status.collecting.name=正在收集 +gui.status.collectingenergy.name=收集能量 +gui.status.compressing.name=正在壓縮 +gui.status.disabled.name=禁用的 +gui.status.fulltank.name=氧氣罐滿 +gui.status.generating.name=正在產生 +gui.status.hull_heat.name=船體熱量 +gui.status.idle.name=空閒 +gui.status.missingleaves.name=樹葉不足 +gui.status.missingoxygen.name=氧氣不足 +gui.status.missingpower.name=能量不足 +gui.status.missingpower.short.name=無能量 +gui.status.missingtank.name=沒有可用的氧氣罐 +gui.status.nofuel.name=無燃料可用! +gui.status.noinvtarget.name=目標無物品欄! +gui.status.noitems.name=無物品可加載! +gui.status.nooil.name=無石油 +gui.status.not_available.name=不適用 +gui.status.not_generating.name=未產生 +gui.status.notargetload.name=無效加載目標! +gui.status.notargetunload.name=無效卸載目標! +gui.status.off.name=關閉 +gui.status.on.name=開啟 +gui.status.raining.name=下雨中 +gui.status.ready.name=準備就緒 +gui.status.refining.name=精煉中 +gui.status.running.name=啟用 +gui.status.sealed.name=密封的 +gui.status.sealerblocked.name=輸出口堵塞! +gui.status.sun_visible.name=可看見太陽 +gui.status.tank_empty.name=氧氣筒已空 +gui.status.targetempty.name=目標載具已空! +gui.status.targetfull.name=目標載具已滿! +gui.status.unknown.name=未知 +gui.status.unsealed.name=未密封的 +gui.tank.oxygen_remaining=氧氣剩餘 +gui.telemetry_fail.message=首先我需要用一個頻率模塊跟踪一個實物!(或者試試戴上它!) +gui.telemetry_fail_no_frequency_module.message=我大概需要一個頻率模塊在我的手中讓這起作用! +gui.telemetry_fail_wearing_it.message=我需要卸下我的頻率模塊如果我想鏈接這個遙測單元! +gui.telemetry_succeed.message=遙測鏈接完畢。 +gui.thermal_slot.desc.0=熱附件槽,這裏放置“環境 +gui.thermal_slot.desc.1=溫度控制器”(可選的) +gui.thermal_slot.desc.2=提示:用更多能量! +gui.title.air_lock.name=%s的氣閘控制器 +gui.tracking.message=已啟用跟踪。我現在只要右擊這個遙測單元就可以完成鏈接。 +gui.village.warning.no_freq_mod=我需要配備一个頻率模塊以與他們交流! +gui.warning=警告! +gui.warning.invalid_thermal=無效熱量保護! +gui.warning.noroom=空間不足! +item.air_fan.name=排氣扇 +item.air_vent.name=排氣孔 +item.basic_item.ambient_thermal_controller.name=環境溫度控制器 +item.basic_item.canned_food.name=罐裝食物 +item.basic_item.compressed_aluminum.name=緻密鋁 +item.basic_item.compressed_bronze.name=緻密青銅 +item.basic_item.compressed_copper.name=緻密銅 +item.basic_item.compressed_iron.name=緻密鐵 +item.basic_item.compressed_steel.name=緻密鋼 +item.basic_item.compressed_tin.name=緻密錫 +item.basic_item.dehydrated_apple.name=脫水蘋果 +item.basic_item.dehydrated_carrot.name=脫水胡蘿蔔 +item.basic_item.dehydrated_melon.name=脫水西瓜 +item.basic_item.dehydrated_potato.name=脫水馬鈴薯 +item.basic_item.frequency_module.name=頻率模塊 +item.basic_item.ingot_aluminum.name=鋁錠 +item.basic_item.ingot_bronze.name=青銅錠 +item.basic_item.ingot_copper.name=銅錠 +item.basic_item.ingot_steel.name=鋼錠 +item.basic_item.ingot_tin.name=錫錠 +item.basic_item.raw_silicon.name=生矽 +item.basic_item.solar_module_0.name=單體太陽能模塊 +item.basic_item.solar_module_1.name=全載太陽能模塊 +item.basic_item.wafer_advanced.name=高級晶圓 +item.basic_item.wafer_basic.name=基礎晶圓 +item.basic_item.wafer_solar.name=藍色太陽能晶圓 +item.battery.name=電池 +item.bucket_fuel.name=燃油桶 +item.bucket_oil.name=石油桶 +item.buggy.name=探月車 +item.buggymat.seat.name=探月車座椅 +item.buggymat.storage.name=探月車存儲箱 +item.buggymat.wheel.name=探月車車輪 +item.canister.copper.name=銅罐 +item.canister.tin.name=錫罐 +item.canvas.name=帆布 +item.cheese_block.name=奶酪塊 +item.cheese_curd.name=奶酪凝乳 +item.compressed_meteoric_iron.name=致密隕鐵 +item.dungeonfinder.name=地牢定位儀 +item.empty_liquid_canister.name=液體罐(空) +item.emergency_kit.description=右擊以裝備氧氣裝備和其他基本物品。警告:一次性! +item.emergency_kit.name=太空應急包 +item.engine.tier1booster.name=一階助推器 +item.engine.tier1engine.name=一階火箭引擎 +item.flag.name=旗幟 +item.food.cheese_slice.name=切片芝士 +item.food.burger_bun.name=漢堡麵包 +item.food.beef_patty_raw.name=碎牛肉(生) +item.food.beef_patty_cooked.name=牛肉餅(熟) +item.food.cheeseburger.desc=宇航員喜歡芝士漢堡!非常令人滿意的食物。 +item.food.cheeseburger.name=芝士漢堡 +item.food.canned_beef.name=罐裝牛肉 +item.fuel.name=火箭燃料 +item.fuel_canister.name=燃油罐(滿) +item.fuel_canister_partial.name=燃油罐(半滿) +item.heavy_plating.name=重型防護板 +item.hot_description.name=炙熱 +item.ic2compat.ore_crushed_alu.name=碎鋁礦 +item.ic2compat.ore_purified_alu.name=純淨的碎鋁礦 +item.ic2compat.dust_alu.name=鋁粉 +item.ic2compat.dust_small_titanium.name=細小的鈦粉堆 +item.infinite_battery.name=無限電池 +item.infinite_oxygen.name=無限供氧 +item.key.t1.name=一階地牢鑰匙 +item.lunar_sapphire.description=藍月寶石是和外星村民交易時使用的貨幣 +item.lunar_sapphire.name=藍月寶石 +item.meteor_chunk.name=可投擲流星碎片 +item.meteor_chunk_hot.name=可投擲流星碎片 +item.meteoric_iron_ingot.name=隕鐵錠 +item.meteoric_iron_raw.name=生隕鐵錠 +item.nose_cone.name=鼻錐 +item.oil_canister.name=石油罐(滿) +item.oil_canister_partial.name=石油罐(半滿) +item.oil_extractor.name=便攜取油器 +item.oxygen_concentrator.name=氧氣濃縮器 +item.oxygen_gear.name=供氧設備 +item.oxygen_mask.name=氧氣面罩 +item.oxygen_tank_heavy_empty.name=重型氧氣罐(空) +item.oxygen_tank_heavy_full.name=重型氧氣罐 +item.oxygen_tank_light_empty.name=輕型氧氣罐(空) +item.oxygen_tank_light_full.name=輕型氧氣罐 +item.oxygen_tank_med_empty.name=中型氧氣罐(空) +item.oxygen_tank_med_full.name=中型氧氣罐 +item.parachute_black.name=黑色降落傘 +item.parachute_blue.name=淺藍色降落傘 +item.parachute_brown.name=棕色降落傘 +item.parachute_darkblue.name=暗藍色降落傘 +item.parachute_darkgray.name=暗灰色降落傘 +item.parachute_darkgreen.name=暗綠色降落傘 +item.parachute_gray.name=淺灰色降落傘 +item.parachute_lime.name=黃綠色降落傘 +item.parachute_magenta.name=品紅色降落傘 +item.parachute_orange.name=橙色降落傘 +item.parachute_pink.name=粉色降落傘 +item.parachute_plain.name=降落傘 +item.parachute_purple.name=紫色降落傘 +item.parachute_red.name=紅色降落傘 +item.parachute_teal.name=青色降落傘 +item.parachute_yellow.name=黃色降落傘 +item.rocket_fins.name=火箭尾鰭 +item.rocket_t1.name=一階火箭 +item.schematic.name=NASA工程圖 +item.sensor_glasses.name=探測眼鏡 +item.sensor_lens.name=探測鏡片 +item.standard_wrench.name=標準扳手 +item.steel_axe.name=重型斧 +item.steel_boots.name=重型靴子 +item.steel_chestplate.name=重型胸甲 +item.steel_helmet.name=重型頭盔 +item.steel_hoe.name=重型鋤 +item.steel_leggings.name=重型護腿 +item.steel_pickaxe.name=重型鎬 +item.steel_pole.name=鋼管桿 +item.steel_shovel.name=重型鍬 +item.steel_sword.name=重型劍 +item.tier1.desc=一階 +item_desc.powerdraw.name=能量需求:%s/秒 +item_desc.shift.name=按住%s查看詳情 +item_group.galacticraft_blocks=星系——方塊 +item_group.galacticraft_items=星系——物品 +jei.arc_lamp.info=光線面對的方向非常明亮。為了達到最佳效果而放到高處!使用標準扳手旋轉。 +jei.electric_compressor.info=電動版的壓縮機,速度快兩倍!甚至使用二階能量功率會更快。漏斗可以填充或清空這台機器。 +jei.electric_compressor.appeng.info=對於使用AE2進行自動化,使用來自兩種不同模組的錠子來設置你的合成表。有關詳細資料,參見https://goo.gl/BwY15G。 +jei.fluid_pipe.info=運輸任何液體或氣體的管道。要將液體從儲罐中抽出,請用標準扳手點擊以轉換為“拉出模式”。\n管道在拉出模式時不能裝滿油箱或機器——因此,讓你的管道至少運行2格方塊長! +jei.fuel_loader.info=放置在火箭發射臺旁邊。給位於臺上的火箭加油。任何進入太空的旅程必不可少——包括你再次回家的旅程! +jei.magnetic_crafting.info=一個可以保存物品的合成台。可以接受漏斗中的物品來自動製作最後成功製作的合成表。 +jei.oxygen_collector.info=從世界空間或太空中收集可呼吸的氧氣混合物——從附近的綠葉或種植作物。\n將氧氣輸送到氧氣壓縮機的氧氣罐,或氧氣泡沫分配器、氧氣密封器。 +jei.oxygen_distributor.info=在空間創建玩家(和其他生物)可以呼吸的泡沫環境。用氧氣收集器或氧氣儲存模塊提供可呼吸的氧氣混合物。 +jei.oxygen_sealer.info=在你的空間基地用可呼吸的空氣填充一個房間。用氧氣收集器或氧氣儲存模塊提供可呼吸的氧氣混合物。房間的所有牆壁必須堅實。\n使用探測眼鏡查找洩漏點!\n一個氧氣封閉機的最大房間尺寸為10x10x8格方塊。為更大的房間使用多個氧氣封閉機! +jei.wrench.info=大多數Galacticraft機器都可以通過標準扳手右擊進行旋轉。\n大多數電機可以使用此按鈕和按住Shift單擊來更改其功率和其他輸入和輸出端。 +keybind.map.name=星系地圖 +keybind.sensortoggle.name=切換傳感器護目鏡模式 +keybind.spaceshipinv.name=打開飛船倉庫 +keybind.vehiclebackward.name=載具後退鍵 +keybind.vehicledown.name=載具下降鍵 +keybind.vehicleforward.name=載具前進鍵 +keybind.vehicleleft.name=載具左轉鍵 +keybind.vehicleright.name=載具右轉鍵 +keybind.vehicleup.name=載具上升鍵 +moon.moon=月球 +newversion.failed.name=Galacticraft新版本檢查失敗!15秒後重試 +newversion.success.name=發現Galacticraft遠端版本: +planet.jupiter=木星 +planet.mercury=水星 +planet.neptune=海王星 +planet.overworld=主世界 +planet.saturn=土星 +planet.uranus=天王星 +planet.venus=金星 +satellite.spacestation.overworld=主世界太空站 +schematic.moonbuggy.name=探月車 +schematic.rocket_t1.name=一階火箭 +schematic.rocket_t2.name=二階火箭 +solarsystem.sol=太陽系 +star.sol=太陽系 +tile.air_lock_controller.name=空氣鎖控制器 +tile.air_lock_frame.description=氣密框架,以近似傳送門的形式布置,且某個方塊被替換為控制器時,會作為運行的氣閘工作。 +tile.air_lock_frame.name=氣密框架 +tile.air_lock_seal.name=氣密閘 +tile.aluminum_wire.alu_wire.description=鋁線用於連接能量源和耗能的機器。 +tile.aluminum_wire.alu_wire.name=鋁質纜線 +tile.aluminum_wire.alu_wire_heavy.description=重質鋁線用於連接能量源和耗能的機器。擁有比前版更快的傳輸速度。 +tile.aluminum_wire.alu_wire_heavy.name=重型鋁質纜線 +tile.aluminum_wire.alu_wire_switch.description=分流鋁線與普通的鋁線類似,但可以輸入紅石信號開關。 +tile.aluminum_wire.alu_wire_switch.name=分流鋁線 +tile.aluminum_wire.alu_wire_switch_heavy.description=重型分流鋁線與普通的重質鋁線類似,但可以輸入紅石信號開關。 +tile.aluminum_wire.alu_wire_switch_heavy.name=重型分流鋁線 +tile.arclamp.description=弧光燈用於給大片區域提供強光,也會使大部分怪物逃離。 +tile.arclamp.name=弧光燈 +tile.basic_block_core.block_aluminum_gc.name=鋁磚 +tile.basic_block_core.block_copper_gc.name=銅磚 +tile.basic_block_core.block_meteoric_iron_gc.name=隕鐵磚 +tile.basic_block_core.block_tin_gc.name=錫磚 +tile.basic_block_core.block_silicon_gc.name=矽磚 +tile.basic_block_core.deco_block_0.name=裝飾錫塊 +tile.basic_block_core.deco_block_1.name=裝飾錫牆塊 +tile.basic_block_core.ore_aluminum_gc.name=鋁礦 +tile.basic_block_core.ore_copper_gc.name=銅礦 +tile.basic_block_core.ore_silicon.name=矽礦 +tile.basic_block_core.ore_tin_gc.name=錫礦 +tile.basic_block_moon.bricks.name=月球地牢磚 +tile.basic_block_moon.cheesestone.name=奶酪礦 +tile.basic_block_moon.coppermoon.name=銅礦 +tile.basic_block_moon.moondirt.name=月球泥土 +tile.basic_block_moon.moongrass.name=月球草地 +tile.basic_block_moon.moonstone.name=月球石頭 +tile.basic_block_moon.sapphiremoon.name=藍月寶石礦 +tile.basic_block_moon.tinmoon.name=錫礦 +tile.buggy_pad.description=加油墊平臺使用3x3布置並且連接燃料注入器時可替星球車加油,但是並不能用來發射火箭! +tile.cargo.loader.name=貨物加載器 +tile.cargo.unloader.name=貨物卸載器 +tile.cargo_loader.description=貨物加載器會將方塊和物品裝入擁有儲貨空間的火箭和其他載具。必須連接到發射平臺或燃料注入器。 +tile.cargo_unloader.description=貨物卸載器會將方塊和物品取出擁有儲貨空間的火箭和其他載具。必須連接到發射平臺或燃料注入器。 +tile.cheese.description=奶酪塊由月球的奶酪制成,可放置并且可食用。 +tile.cheese.name=奶酪塊 +tile.circuit_fabricator.description=元件制造臺會將基礎的材料加工為硅晶片,用於高級機器。 +tile.coal_generator.description=燃煤發電機燃燒煤炭來收集能量。這是最簡單也是最低效的能量收集途徑。 +tile.collector.description=氧氣收集器會儲存從附近的樹葉收集到的氧氣。 +tile.collector.name=氧氣收集器 +tile.compressor.description=壓縮機會將錠加工為它們對應的壓縮品。 +tile.compressor_electric.description=電動壓縮機會將錠加工為它們對應的壓縮品。一次兩個,因而比前版要高效。 +tile.concealed_detector.name=玩家偵測儀 +tile.concealed_redstone.name=隱形紅石線 +tile.concealed_repeater.name=隱形紅石中繼器 +tile.crude_oil.name=石油 +tile.crude_oil_moving.name=石油 +tile.crude_oil_still.name=石油 +tile.deconstructor.description=解構機能夠拆卸廢棄的火箭等物品並回收材料。 +tile.dishbase.description=通訊雷達可以追踪空間站位置並接收來自遙遠空間站的信號。 +tile.dishbase.name=通訊雷達 +tile.distributor.description=氧氣分配器使用內部儲氣罐會從中心方塊放出一個氧氣泡。在氣泡內呼吸是安全的。 +tile.distributor.name=氧氣分配器 +tile.dummyblock.cryogenic_chamber.name=低溫倉 +tile.dummyblock.launch_pad.name=火箭發射平臺 +tile.dummyblock.nasa_workbench.name=NASA工作臺 +tile.dummyblock.solar.name=太陽能板 +tile.dummyblock.space_station_base.name=空間站基板 +tile.electric_furnace_tier1.description=電爐以更快的速度而取代傳統的炭爐。 +tile.electric_furnace_tier2.description=電弧爐以更快的速度而取代傳統炭爐和電爐。 +tile.emergency_box.description=在你的第一個登陸地點附近放置一個應急崗位。打開在裏面查找應急包。亦擊退怪物! +tile.emergency_box.filled.name=應急崗位(含應急包) +tile.emergency_box.name=應急崗位 +tile.enclosed.aluminum_wire.name=可密封鋁質線纜 +tile.enclosed.copper_cable.name=可密封銅質線纜 +tile.enclosed.description=可密封方塊用與空氣無法通過的地方如空間基地的牆壁。 +tile.enclosed.fluid_pipe.name=可密封流體管道 +tile.enclosed.glass_fibre_cable.name=可密封玻璃纖維線纜 +tile.enclosed.gold_cable.name=可密封金質線纜 +tile.enclosed.heavy_aluminum_wire.name=可密封重型鋁質線纜 +tile.enclosed.hv_cable.name=可密封高壓線纜 +tile.enclosed.lv_cable.name=可密封超低壓線纜 +tile.enclosed.me_cable.name=可密封ME線纜 +tile.enclosed.pipe_fluids_cobblestone.name=可密封圓石防水管道 +tile.enclosed.pipe_fluids_stone.name=可密封石頭防水管道 +tile.enclosed.pipe_items_cobblestone.name=可密封圓石管道 +tile.enclosed.pipe_items_stone.name=可密封石頭管道 +tile.enclosed.pipe_power_gold.name=可密封金質能量管道 +tile.enclosed.pipe_power_stone.name=可密封石頭能量管道 +tile.energy_storage_module_tier1.description=儲能模塊用於為日後需要儲存大量能量。 +tile.energy_storage_module_tier2.description=儲能簇用於為日後需要儲存大量能量。比前版儲存和輸出更多的能量。 +tile.fallen_meteor.description=隕石可在許多擁有稀薄大氣層或無大氣層的行星或衛星發現。破壞後會掉落隕鐵。 +tile.fallen_meteor.name=隕石 +tile.fluid_pipe.description=流體管道能夠從源頭將液體和氣體傳輸至目標,使用標準扳手可以改變其模式。 +tile.fluid_pipe.name=流體管道 +tile.fluid_pipe_pull.description=流體管道能夠從源頭將液體和氣體傳輸至目標,使用標準扳手可以改變其模式。 +tile.fluid_pipe_pull.name=流體管道接口 +tile.fluid_tank.description=流體罐能夠存儲液體和氣體以備使用。 +tile.fluid_tank.name=流體罐 +tile.fuel.name=燃油 +tile.fuel_block.name=燃油 +tile.fuel_loader.description=連接到發射平臺後,燃料注入器可將燃油注入連接的火箭或其他載具中。 +tile.fuel_loader.name=燃料注入器 +tile.glowstone_torch.description=螢石火把最好用於在無氧使得火把無法燃燒的條件下照明區域。 +tile.glowstone_torch.name=螢石火把 +tile.grating.name=格柵 +tile.landing_pad.buggy_fueler.name=探月車燃料注入器 +tile.landing_pad.cargo_pad.name=貨物火箭平臺 +tile.landing_pad.description=發射平臺在3x3布置時可放置火箭。可連接燃料注入器,貨物加載器和發射控制器。 +tile.landing_pad.landing_pad.name=火箭發射平臺 +tile.landing_pad_full.name=火箭發射臺 +tile.machine.0.name=燃煤發電機 +tile.machine.1.name=能量存儲模組 +tile.machine.2.name=電爐 +tile.machine.3.name=壓縮機 +tile.machine.7.name=電弧爐 +tile.machine.8.name=儲能簇 +tile.machine2.4.name=電動壓縮機 +tile.machine2.5.name=元件製造臺 +tile.machine2.6.name=氧氣儲存模組 +tile.machine2.10.name=解構機 +tile.machine3.9.name=染色器 +tile.magnetic_table.name=磁力合成臺 +tile.magnetic_table.description=磁力合成臺中的合成材料不會爆滿地,它們會被保存起來!點擊shift可以快捷導入物品。利用漏斗輸入輸出物品,它將嘗試自動執行上一個合成。 +tile.moon_stairs_brick.name=月球地牢磚階梯 +tile.moon_stairs_stone.name=月球石頭階梯 +tile.ore_copper.name=銅礦 +tile.ore_tin.name=錫礦 +tile.oxygen_compressor.0.name=氧氣壓縮機 +tile.oxygen_compressor.1.name=氧氣解壓縮機 +tile.oxygen_compressor.description=氧氣壓縮機會從內部儲存將氧氣充入氧氣罐中。 +tile.oxygen_decompressor.description=氧氣解壓機會從氧氣罐中提取氧氣轉入內部儲存。 +tile.oxygen_detector.description=氧氣探測器會在被氧氣包圍時發出紅石信號。 +tile.oxygen_detector.name=氧氣探測器 +tile.oxygen_storage_module.description=儲氧模塊用於為日後需要儲存大量氧氣。 +tile.painter.description=利用任意有色方塊或染料,便可以給真空玻璃,照明面板等可染色方塊塗上鮮豔的色彩! +tile.panel_lighting.description=照明面板在太空中提供照明,可以使用扳手旋轉,拿在手上潛行右擊一般方塊可以改變其外觀。 +tile.panel_lighting_0.name=照明面板(方形) +tile.panel_lighting_1.name=照明面板(聚光) +tile.panel_lighting_2.name=照明面板(線性) +tile.panel_lighting_3.name=照明面板(暗色) +tile.panel_lighting_4.name=照明面板(陰暗) +tile.parachest.description=傘降箱會在登陸某行星(如地球)或衛星時從天而降。包含了之前發射的火箭,燃油和貨物。 +tile.parachest.name=傘降箱 +tile.platform.description=放置四個以形成平台。平台將玩家提升到上方或下方的下一個平台。潛行=下:跳=上。 +tile.platform.name=液壓平台 +tile.refinery.description=精煉器可輸入石油和能量輸出火箭與載具使用的燃油。 +tile.refinery.name=精煉機 +tile.rocket_workbench.description=NASA工作臺用於制作許多高級部件和載具。可添加新發現的設計圖。 +tile.rocket_workbench.name=NASA工作臺 +tile.sapling2.birch.name=樺木樹苗 +tile.sapling2.jungle.name=叢林樹苗 +tile.sapling2.oak.name=橡樹樹苗 +tile.sapling2.spruce.name=雲杉樹苗 +tile.sealer.description=氧氣密封器會檢測密閉空間。如果找到了的話區域內就會充滿可呼吸的空氣。 +tile.sealer.name=氧氣密封器 +tile.slab_gc_half.moon_bricks_slab.name=月球地牢磚半磚 +tile.slab_gc_half.moon_slab.name=月球石頭半磚 +tile.slab_gc_half.tin_slab_1.name=裝飾錫塊半磚 +tile.slab_gc_half.tin_slab_2.name=裝飾錫塊半磚 +tile.solar.advanced_solar.name=高級太陽能板 +tile.solar.basic_solar.name=基礎太陽能板 +tile.solar_adv.description=高級太陽能板會從太陽收集能量,為進一步使用而儲存。自動調節角度以保證最優的能量收集效果。 +tile.solar_basic.description=基礎太陽能板會從太陽收集能量,為進一步使用而儲存。在正午收集能量最多(不可調)。 +tile.space_glass.description=真空密封玻璃為太空基地而生。可以使用周圍的染色器噴塗任意顏色的邊框! +tile.space_glass.clear.description=澄澈玻璃可以用於欣賞太空美景,也可以提供清晰的水下視野。 +tile.space_glass.strong.description=由高透明度鋁材製造的堅硬抗爆玻璃。 +tile.space_glass_clear.name=澄澈真空玻璃 +tile.space_glass_vanilla.name=真空玻璃 +tile.space_glass_strong.name=硬化真空玻璃 +tile.space_station_base.name=太空站抵達方塊 +tile.spin_thruster.description=旋轉推進器用於使空間站旋轉. +tile.spin_thruster.name=旋轉推進器 +tile.telemetry.description=遙測單元會從與其建立連接的火箭、玩家、怪物中收集數據。最好放置於顯示屏附近。可使用頻率模塊來建立連接。 +tile.telemetry.name=遙測單元 +tile.tin_stairs_1.name=裝飾錫塊階梯 +tile.tin_stairs_2.name=裝飾錫塊階梯 +tile.treasure_chest.description=一階寶箱會在月球地牢生成。直到打敗了最終boss後才能解鎖。 +tile.treasure_chest.name=寶箱 +tile.unlit_torch.name=火把 +tile.unlit_torch_stone.name=石製火把 +tile.unlit_torch_lit.name=火把 +tile.unlit_torch_stone_lit.name=石製火把 +tile.view_screen.description=顯示屏是太空基地用觸摸屏。右擊改變其顯示的信息。 +tile.view_screen.name=顯示屏 +tile.wall_gc.moon.name=月球石頭牆 +tile.wall_gc.moon_bricks.name=月球地牢磚牆 +tile.wall_gc.tin.name=裝飾錫塊牆 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/crashed_probe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/crashed_probe.json new file mode 100644 index 00000000..e965900a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/crashed_probe.json @@ -0,0 +1,80 @@ +{ + "pools": [ + { + "name": "crashed_probe", + "rolls": { + "min": 4, + "max": 6 + }, + "entries": [ + { + "type": "item", + "name": "galacticraftplanets:item_basic_mars", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftcore:heavy_plating", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 5, + "max": 9 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftplanets:item_basic_asteroids", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_data", + "data": { + "min": 5, + "max": 6 + } + }, + { + "function": "minecraft:set_count", + "count": { + "min": 3, + "max": 6 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_1.json new file mode 100644 index 00000000..26a8d34f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_1.json @@ -0,0 +1,240 @@ +{ + "pools": [ + { + "name": "dungeon_tier_1", + "rolls": { + "min": 5, + "max": 8 + }, + "entries": [ + { + "type": "item", + "name": "galacticraftcore:cheese_curd", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_apple", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 0 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_carrot", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_melon", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 2 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_potato", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftcore:oil_canister_partial", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1001 + } + ] + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 15 + }, + { + "type": "item", + "entryName": "glowing_golden_apple", + "name": "minecraft:golden_apple", + "weight": 2, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + }, + { + "type": "item", + "name": "minecraft:redstone", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:record_blocks", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:record_far", + "weight": 4 + }, + { + "type": "item", + "name": "galacticraftcore:steel_shovel", + "weight": 10 + }, + { + "type": "item", + "name": "galacticraftcore:item_basic_moon", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_data", + "data": 2 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftcore:meteoric_iron_raw", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "item", + "entryName": "frequency_module", + "name": "galacticraftcore:basic_item", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 19 + } + ] + }, + { + "type": "item", + "entryName": "book1", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "type": "item", + "entryName": "book2", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_randomly" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_2.json new file mode 100644 index 00000000..d84b6409 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_2.json @@ -0,0 +1,211 @@ +{ + "pools": [ + { + "name": "dungeon_tier_2", + "rolls": { + "min": 6, + "max": 9 + }, + "entries": [ + { + "type": "item", + "name": "galacticraftplanets:carbon_fragments", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_apple", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 0 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_carrot", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_melon", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 2 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_potato", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftcore:oil_canister_partial", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1001 + } + ] + }, + { + "type": "item", + "name": "galacticraftplanets:desh_boots", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_chestplate", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_helmet", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_leggings", + "weight": 2 + }, + { + "type": "item", + "name": "minecraft:redstone", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:record_mall", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:record_mellohi", + "weight": 4 + }, + { + "type": "item", + "entryName": "raw_desh", + "name": "galacticraftplanets:item_basic_mars", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "desh_stick", + "name": "galacticraftplanets:item_basic_mars", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + } + ] + }, + { + "type": "item", + "entryName": "book22", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 22, + "treasure": true + } + ] + }, + { + "type": "item", + "entryName": "book24", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 24, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_3.json new file mode 100644 index 00000000..2055db0e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/loot_tables/dungeon_tier_3.json @@ -0,0 +1,242 @@ +{ + "pools": [ + { + "name": "dungeon_tier_3", + "rolls": { + "min": 6, + "max": 9 + }, + "entries": [ + { + "type": "item", + "entryName": "canned_apple", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 0 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_carrot", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_melon", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 2 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "entryName": "canned_potato", + "name": "galacticraftcore:food", + "weight": 6, + "functions": [ + { + "function": "minecraft:set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "galacticraftplanets:desh_boots", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_chestplate", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_helmet", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftplanets:desh_leggings", + "weight": 2 + }, + { + "type": "item", + "name": "galacticraftcore:oil_canister_partial", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1001 + } + ] + }, + { + "type": "item", + "name": "galacticraftplanets:bucket_sulphuric_acid", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 10 + }, + { + "type": "item", + "entryName": "glowing_golden_apple", + "name": "minecraft:golden_apple", + "weight": 2, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + }, + { + "type": "item", + "name": "minecraft:redstone", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:record_chirp", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:record_wait", + "weight": 4 + }, + { + "type": "item", + "name": "minecraft:record_ward", + "weight": 4 + }, + { + "type": "item", + "name": "galacticraftplanets:basic_item_venus", + "weight": 10, + "functions": [ + { + "function": "set_data", + "data": 3 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gold_nugget", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 4 + } + } + ] + }, + { + "type": "item", + "entryName": "book18", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 18, + "treasure": true + } + ] + }, + { + "type": "item", + "entryName": "book27", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 27, + "treasure": true + } + ] + }, + { + "type": "item", + "entryName": "book30", + "name": "minecraft:book", + "weight": 8, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/manuals/gettingstarted.xml b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/manuals/gettingstarted.xml new file mode 100644 index 00000000..1a184863 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/manuals/gettingstarted.xml @@ -0,0 +1,1035 @@ + + + + +Getting started with Galacticraft + +Volume 1 +By Micdoodle8 + + + +Table of Contents + + Creating a Rocket + heavyplatingT1 + 2 + + + Preparing for Space + oxygenTankHeavy + 4 + + + Launching your Rocket + rocketT1 + 4 + + + + +Welcome to the first edition of Getting started with Galacticraft. New planets to explore can be daunting, but within these pages you will learn the basics of traversing the blocky universe with success. + +This book is a magic copy; it updates whenever the original has been modified. Check back occasionally for information on new things. + + + +Oil +The Pickaxe is a basic mining tool. It is the simplest method of chewing through rock and harvesting ores. +Class: Precision Tool +Effective on: Stone or rock, ores, and metal. +pickicon + + Pickaxe Head + pickhead + + + Tool Rod + toolrod + + + Tool Binding + binding + + + + +Shovel +The Shovel is a basic digging tool. It is the most common way of moving earth around. +Class: Precision Tool +Effective on: Dirt, sand, gravel, and snow. +shovelicon + + Shovel Head + shovelhead + + + Tool Rod + toolrod + + + + +Hatchet +The Hatchet is a basic chopping tool. It is the simplest way to shape lumber. +Class: Precision Tool +Effective on: Wood, Leaves, and Trees. +axeicon + + Hatchet Head + axehead + + + Tool Rod + toolrod + + + + +Mattock +The Cutter Mattock is a versatile farming tool. Its primary purpose is to till soil. It also works somewhat like an axe and a shovel, but is not a replacement for either. +Class: Multitool +Effective on: Wood, dirt, and plants. +mattockicon + + Axe Head + axehead + + + Tool Rod + toolrod + + + Shovel Head + shovelhead + + + + +Broadsword +The Broadsword is a defensive weapon. It is a favorite of many Tinkers and is useful in a wide variety of situations. +Right-click: Block +- Blocking cuts a wide variety of damage types in half. + +Class: Melee Weapon +Effective on webs. +swordicon + + Sword Blade + swordblade + + + Tool Rod + toolrod + + + Wide Guard + wideguard + + + + +Longsword +The Longsword is an offensive weapon. It is used for full-speed charges and plowing through enemy lines +Right-click: Lunge +- When released, it sends you careening forward at breakneck speed. + +Natural Abilities: +- Charge Boost, does 1.5x damage and knockback while sprinting + +Class: Melee Weapon +Effective on webs. +longswordicon + + Sword Blade + swordblade + + + Tool Rod + toolrod + + + Hand Guard + handguard + + + + +Rapier +The Rapier is a special weapon. The dancing swordplay lets you get in and out of battle quickly. While the Rapier's damage is low, it makes up for this with its other abilities. +Right-click: Backpedal +- Take a small hop backwards + +Natural Abilities: +- Charge Boost, does 1.5x damage and knockback while sprinting. +- Armor Pierce, ignores armor and blocking. +- Quick Strike, the enemy is stunned for less time. + +Class: Melee Weapon +rapiericon + + Sword Blade + swordblade + + + Tool Rod + toolrod + + + Crossbar + crossbar + + + + +Dagger +The Dagger is a short weapon. It is light and usable as both a striking and throwing weapon. +Right-click: Throw Dagger +- Toss the item for a ranged attack + +Class: Ranged/Melee Weapon +daggerIcon + + Knife Blade + knifeblade + + + Tool Rod + toolrod + + + Crossbar + crossbar + + + + +Frying Pan +The Frying is a heavy weapon that uses sheer weight to stun foes or a place to cook your food. It is common to hunt pigs and cook them with the same pan. +Right-click: Block +- Blocking cuts a wide variety of damage types in half. + +Shift+Right-click: Place Item +- The frying pan cooks a large amount of food at a time. + +Natural Abilities: +- Bash, does extra knockback and stuns the foe. +frypanicon + + Pan + pan + + + Tool Rod + toolrod + + + + +Battlesign +The Battlesign is an advance in weapon technology worthy of Zombie Pigmen everywhere. +Right-click: Block +- Blocking cuts a wide variety of damage types in half. + +Class: Lethal Joke Weapon +battlesignicon + + Board + board + + + Tool Rod + toolrod + + + + +Chisel +The Chisel is an advanced detailing tool for carving shapes into blocks. +Right-click: Chisel +- Transforms various blocks into bricks. +Crafting grid: Chisel +- Some items can only be chiseled in the crafting grid. + +Class: Utility Tool +chiselicon + + Chisel Head + chiselhead + + + Tool Rod + toolrod + + + + +Hammer +The Hammer is a heavy mining tool meant for digging out large areas. It is also effective on undead. +Natural Abilities: +- Area of Effect, Mines a 3x3 area. The direction depends on which face is pounded. +- Smite II, Does 2-4 extra hearts of damage against undead. +- Huge Durability, this tool has very high durability to make up for the constant beating it will recieve. + +Class: Broad Mining Tool +hammericon + + Hammer Head + hammerhead + + + Large Plate + largeplate + + + Tough Rod + toughrod + + + Large Plate + largeplate + + + + +Lumber Axe +The Lumber Axe is capable of bringing down whole trees or clearing large swaths of food in a single swing. +Natural Abilities: +Fell Trees +- Harvests entire trees. It has a max height of 30. Trees are defined as Leaves on top of Logs. +Area of Effect +- Mines a 3x3x3 area. This is a fallback if a tree is not found. + +Class: Broad Mining Tool +lumbericon + + Broad Axe Head + broadaxehead + + + Large Plate + largeplate + + + Tough Rod + toughrod + + + Tough Binding + toughbinding + + + + +Excavator +The Excavator is a large digging tool used for clearing out large swaths of land, gravel, or snow. +Natural Abilities: +Area of Effect +- Mines a 3x3 area. The direction depends on which face is scooped. + +Class: Broad Mining Tool +excavatoricon + + Excavator Head + excavatorhead + + + Large Plate + largeplate + + + Tough Rod + toughrod + + + Tough Binding + toughbinding + + + + +Scythe +The Scythe is well known for its large swinging area. It can be used to harvest crops, leaves, and is a decent weapon. +Natural Abilities: +Area of Effect +- Attacks mobs in a 3x3x3. +- Harvests a 3x3x3 area. + +Class: Broad Melee Weapon +scytheicon + + Scythe Head + excavatorhead + + + Tough Rod + toughrod + + + Tough Binding + toughbinding + + + Tough Rod + toughrod + + + + +Cleaver +The Cleaver is a heavy defensive weapon. The sword is unwieldly, but the sheer weight of the tool crushes foes. +Right-click: Block +- Blocking cuts a wide variety of damage types in half. + +Natural Abilities: +- Beheading II, Beheads mobs. Their head is dropped as loot. +- Heavy, Base attack is increased at the cost of swing time + +Class: Heavy Melee Weapon +cleavericon + + Large Sword Blade + largeswordblade + + + Large Plate + largeplate + + + Tough Rod + toughrod + + + Tough Rod + toughrod + + + + +Battleaxe +The battleaxe is an offensive melee weapon that can also bring down small trees. +Right-click: TBD +- This ability is incomplete + +Natural Abilities: +- Area of Effect, harvests wood blocks in a 1x9 tower. +- Bash, knocks the enemy further away than normal. + +Class: Heavy Melee Weapon +battleaxeicon + + Broad Axe Head + broadaxehead + + + Broad Axe Head + broadaxehead + + + Tough Rod + toughrod + + + Tough Binding + toughbinding + + + + +Shortbow +The Shortbow is a weapon used to fire arrows. It has a quick, short range. +Right-click: Draw bow +- The further a bow is drawn, the further an arrow flies and the more damage it does. + +Class: Ranged Projectile Launcher +shortbowIcon + + Tool Rod + toolrod + + + Bowstring + bowstring + + + Tool Rod + toolrod + + + + +Arrow +Arrows are fired from bows as projectiles. They can also be used as stabbing weapons in a pinch. +Class: Ammunition +arrowIcon + + Arrowhead + arrowhead + + + Tool Rod + toolrod + + + Fletching + fletching + + + + +Material Traits +Some materials have traits that augment their natural uses. + +- Reinforced: 10% chance per level of not using durability +- Stonebound: The tool mines faster as it wears out, but does less damage +- Jagged: The tool attacks with does more damage as it wears out, but mines slower +- Writable: One extra modifier per piece + + + +Wood +woodaxe +It seems to grow everywhere. + +
woodplanks
+
+
+ + +Stone +stonepick +One of the most common materials in the world. + +
stoneblock
+
+
+ + +Iron +ironpick +A staple for tools, it can be refined and processed. +- Requires the Smeltery + +
ironingot
+
+
+ + +Flint +flintshovel +More durable than stone. The material of choice for cavemen. + +
flint
+
+
+ + +Cactus +cactussword +A form of wood found only in the desert. + +
cactus
+
+
+ + +Bone +bonerapier +A material with many uses, dead or alive. + +
bone
+
+
+ + +Obsidian +bonefrypan +Tough as nails, but fragile when shaped. + +
obsidian
+
+
+ + +Alumite +alumitepick +An uncommon alloy. It seems to be quite durable. +- Requires the Smeltery + +
alumiteingot
+
+
+ + +Netherrack +netherrackmattock +This is made of what?! + +
netherrack
+
+
+ + +Blue Slime +blueslimebattlesign +Converting it from food has made it stronger. +BlueSlime + +
blueslimecrystal
+
+
+ + +Green Slime +slimebattlesign +Soft and springy, it seems to last forever. +Slime + +
slimecrystal
+
+
+ + +Slimy Mud + + slimymud + three + + + + +Slime Crystal +slimecrystal + + + +Paper +paperpick +It's very weak, but can take a lot of modification. + +
paperstack
+
+
+ + +Paper Stack + + paperstack + two + + + + +Cobalt +cobaltlongsword +One of the nether materials. It's bright blue. +- Requires the Smeltery + +
cobaltingot
+
+
+ + +Ardite +arditelongsword +One of the nether materials. It seems to mine faster as it wears out. +- Requires the Smeltery + +
arditeingot
+
+
+ + +Manyullyn +manyullynlongsword +The nether alloy. It's stronger than diamond. +- Requires the Smeltery + +
manyullyningot
+
+
+ + +Copper +copperaxe +A common metal found in the ground. +- Requires the Smeltery + +
copperingot
+
+
+ + +Bronze +bronzeaxe +A common alloy. It's a bit better than iron. +- Requires the Smeltery + +
bronzeingot
+
+
+ + +Steel +steelsword +An Iron alloy. The method for obtaining this is unknown. Enemy chainmail seems to be made of it. +- Requires the Smeltery + +
steelingot
+
+
+ + +Diamond +Adding a diamond to the edge of a tool seems to make it more resilient. + +Effects: +- 500 extra durability +- Mining level increased to level 3 + +Type: Single-use +Stackable: No + + + +tool +diamondmod + + + +Emerald +Affixing an emerald to a tool's weakest point appears to make it more resilient. + +Effects: +- 50% more durability +- Mining level increased to level 2 + +Type: Single-use +Stackable: No + + + +tool +emeraldmod + + + +Speed +Adding redstone to a tool seems to increase its mining speed. + +Effects: +- Each redstone dust increases mining speed by 0.08. +- At 50/50 the boost is 4.0, making a wood pickaxe equivalent in speed to iron. +- Not useful on weapons + +Type: Multi-use +Stackable: Yes + + + +tool +redstonemod + + + +Auto-Repair +Attaching moss to a tool infuses it with life. The tool appears to be capable of regenerating wear and tear. + +Effects: +- The tool slowly repairs itself +- Sunlight speeds up the process + +Type: Single-use +Stackable: Yes + + + +tool +mossmod + + + +Auto-Smelt +Melting a lava crystal onto the end of a tool gives it the power of a furnace. + +Effects: +- Smelts blocks as they're harvested +- Sets mobs on fire for 3 seconds +- Stacks with Luck +- Not compatible with Silky + +Type: Multi-use +Stackable: No + + + +tool +lavacrystalmod + + + +Ball of Moss + + mossball + three + + + + +Lava Crystal + + lavacrystal + three + + + + +Luck +Encrusting lapis on tools is a gift to the gods of luck. They will bless your tool with great fortune and loot. + +Effects: +- Adds fortune or looting, depends on tool type +- Increases level at a maximum threshold, but has a chance of increasing before +- Sometimes adds extra luck to the tool +- Not compatible with Silky + +Type: Single-use +Stackable: No + + + +tool +lapismod + + + +Sharpness +Adding quartz to the edge of a tool seems to make it sharper. + +Effects: +- Increases attack damage +- Has less of an effect on tools with piercing properties + +Type: Multi-use +Stackable: Yes + + + +weapon +quartzmod + + + +Fiery +Adding blaze powder to a tool gives it a fiery tinge. + +Effects: +- Sets enemies on fire +- Every 5 powder adds another second to the flame. + +Type: Multi-use +Stackable: Yes + + + +weapon +blazemod + + + +Necrotic +Placing the bone of a Wither Skelton on a tool gives it nefarious life-stealing powers. + +Effects: +- Heals the player every time a monster is attacked +- Heals one heart per bone + +Type: Single-use +Stackable: Yes + + + +weapon +necroticmod + + + +Silky +Adding a large glob of alunimum brass or gold and a bunch of string seems to give the tool silky-smooth properties. + +Effects: +- Allows blocks to be harvested directly +- Not compatible with Luck or Auto-Smelt + +Type: Single-use +Stackable: No + + + +tool +silkymod + + + +Silky Cloth + + silkycloth + three + + + + +Silky Jewel + + silkyjewel + three + + + + +Reinforced +Adding an obsidian plate to the tool seems to help with its durability. + +Effects: +- Adds the material trait Reinforced to the tool +- Stacks with previous levels of Reinforced + +Type: Single-use +Stackable: Yes + + + +tool +reinforcedmod + + + +Knockback +Attaching a piston to the tool and activating it at the right time seems to throw mobs further away. + +Effects: +- Adds extra knockback to the tool. + +Type: Multi-use +Stackable: Yes + + + +weapon +pistonmod + + + +Beheading +Working an ender pearl and some obsidian on a weapon has the curious effect of separating the target's head from its body. + +Effects: +- Beheads mobs. Enemies drop their heads as a result. + +Type: Single-use +Stackable: Yes + + + +weapon +beheadingmod + + + +Bane of Arthropods +Striking a spider with its own eyeball causes it to recoil in fear. + +Effects: +- Does extra damage to spiders. +- 1-2 hearts per level. + +Type: Multi-use +Stackable: Yes + + + +weapon +spidermod + + + +Smite +The raw power of consecrated soil empowers your weapon, smiting enemies from on high. + +Effects: +- Does extra damage to undead. +- 1-2 hearts per level. + +Type: Multi-use +Stackable: Yes + + + +weapon +smitemod + + + +Graveyard Soil + + graveyardsoil + two + + + + +Consecrated Soil +consecratedsoil + + + +Electric +Adding a battery and a circuit to a tool gives it an electric field. The tool still functions properly when the battery has no charge. + +Effects: +- Allows the tool to be charged with electricity +- Uses energy instead of durability while charged +- Available from IndustrialCraft 2 + +Type: Single-use +Stackable: No + + + +tool +electricmod + + + +Additional Modifiers +Working the tool with a block of gold and a diamond makes the tool more malleable, allowing for more modification. + +Effects: +- Adds an additional modifier slot to the tool + +Type: Single-use +Stackable: No + + + +tool +tier1free + + + +Additional Modifiers +Working the tool with a nether star gives it the ability to attach parts they would not otherwise stay. + +Effects: +- Adds an additional modifier slot to the tool + +Type: Single-use +Stackable: No + + + +tool +tier2free + + +
\ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_heavy_item.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_heavy_item.obj new file mode 100644 index 00000000..7ce75c59 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_heavy_item.obj @@ -0,0 +1,439 @@ +# Blender v2.68 (sub 0) OBJ File: 'aluminumWireThick.blend' +# www.blender.org +mtllib aluminumWireHeavy.mtl +o Middle +v -0.136299 -0.136299 0.136299 +v -0.136299 -0.136299 -0.136299 +v 0.136299 -0.136299 -0.136299 +v 0.136299 -0.136299 0.136299 +v -0.136299 0.136299 0.136299 +v -0.136299 0.136299 -0.136299 +v 0.136299 0.136299 -0.136299 +v 0.136299 0.136299 0.136299 +v -0.136299 -0.136299 0.136299 +v -0.136299 -0.136299 -0.136299 +v 0.136299 -0.136299 -0.136299 +v 0.136299 -0.136299 0.136299 +v -0.136299 0.136299 0.136299 +v -0.136299 0.136299 -0.136299 +v 0.136299 0.136299 -0.136299 +v 0.136299 0.136299 0.136299 +vt 0.726305 0.358354 +vt 0.898972 0.358354 +vt 0.898972 0.531020 +vt 0.726305 0.531020 +usemtl None +f 7/1 6/2 2/3 +f 8/1 7/2 3/3 +f 5/1 8/2 4/3 +f 2/1 1/2 4/3 +f 7/1 8/2 5/3 +f 9/1 13/2 14/3 +f 10/1 14/2 15/3 +f 11/1 15/2 16/3 +f 12/1 16/2 13/3 +f 12/1 9/2 10/3 +f 13/1 16/2 15/3 +f 6/1 5/2 1/3 +f 3/4 7/1 2/3 +f 4/4 8/1 3/3 +f 1/4 5/1 4/3 +f 3/4 2/1 4/3 +f 6/4 7/1 5/3 +f 10/4 9/1 14/3 +f 11/4 10/1 15/3 +f 12/4 11/1 16/3 +f 9/4 12/1 13/3 +f 11/4 12/1 10/3 +f 14/4 13/1 15/3 +f 2/4 6/1 1/3 +o Back +v 0.136000 -0.135968 -0.136662 +v -0.136000 -0.135968 -0.136662 +v 0.136000 0.136032 -0.136662 +v -0.136000 0.136032 -0.136662 +v 0.136000 -0.135968 -0.136662 +v -0.136000 -0.135968 -0.136662 +v 0.136000 0.136032 -0.136662 +v -0.136000 0.136032 -0.136662 +v 0.136000 0.136032 -0.136662 +v -0.136000 0.136032 -0.136662 +v 0.136000 0.136032 -0.136662 +v -0.136000 0.136032 -0.136662 +v -0.136000 -0.135968 -0.508254 +v 0.136000 -0.135968 -0.508254 +v -0.136000 0.136032 -0.508254 +v 0.136000 0.136032 -0.508254 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.001 +f 27/5 21/6 30/7 +f 21/8 23/9 24/10 +f 28/11 27/12 32/13 +f 24/14 23/14 26/14 +f 22/15 29/16 30/17 +f 26/14 25/14 28/14 +f 29/18 31/19 32/20 +f 29/21 22/22 28/23 +f 23/14 25/14 26/14 +f 25/14 27/14 28/14 +f 20/24 19/25 17/26 +f 32/27 27/5 30/7 +f 22/28 21/8 24/10 +f 31/29 28/11 32/13 +f 21/30 22/15 30/17 +f 30/31 29/18 32/20 +f 31/32 29/21 28/23 +f 18/33 20/24 17/26 +o Top +v 0.136000 0.136528 -0.135968 +v -0.136000 0.136528 -0.135968 +v 0.136000 0.136528 0.136032 +v -0.136000 0.136528 0.136032 +v 0.136000 0.136528 -0.135968 +v -0.136000 0.136528 -0.135968 +v 0.136000 0.136528 0.136032 +v -0.136000 0.136528 0.136032 +v 0.136000 0.136528 0.136032 +v -0.136000 0.136528 0.136032 +v 0.136000 0.136528 0.136032 +v -0.136000 0.136528 0.136032 +v -0.136000 0.508699 -0.135968 +v 0.136000 0.508699 -0.135968 +v -0.136000 0.508699 0.136032 +v 0.136000 0.508699 0.136032 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.012 +f 43/34 37/35 46/36 +f 37/37 39/38 40/39 +f 44/40 43/41 48/42 +f 40/43 39/43 42/43 +f 38/44 45/45 46/46 +f 42/43 41/43 44/43 +f 45/47 47/48 48/49 +f 45/50 38/51 44/52 +f 39/43 41/43 42/43 +f 41/43 43/43 44/43 +f 36/53 35/54 33/55 +f 48/56 43/34 46/36 +f 38/57 37/37 40/39 +f 47/58 44/40 48/42 +f 37/59 38/44 46/46 +f 46/60 45/47 48/49 +f 47/61 45/50 44/52 +f 34/62 36/53 33/55 +o Bottom +v 0.136000 -0.133554 0.135968 +v -0.136000 -0.133554 0.135968 +v 0.136000 -0.133554 -0.136032 +v -0.136000 -0.133554 -0.136032 +v 0.136000 -0.133554 0.135968 +v -0.136000 -0.133554 0.135968 +v 0.136000 -0.133554 -0.136032 +v -0.136000 -0.133554 -0.136032 +v 0.136000 -0.133554 -0.136032 +v -0.136000 -0.133554 -0.136032 +v 0.136000 -0.133554 -0.136032 +v -0.136000 -0.133554 -0.136032 +v -0.136000 -0.508226 0.135968 +v 0.136000 -0.508226 0.135968 +v -0.136000 -0.508226 -0.136032 +v 0.136000 -0.508226 -0.136032 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.013 +f 59/63 53/64 62/65 +f 53/66 55/67 56/68 +f 60/69 59/70 64/71 +f 56/72 55/72 58/72 +f 54/73 61/74 62/75 +f 58/72 57/72 60/72 +f 61/76 63/77 64/78 +f 61/79 54/80 60/81 +f 55/72 57/72 58/72 +f 57/72 59/72 60/72 +f 52/82 51/83 49/84 +f 64/85 59/63 62/65 +f 54/86 53/66 56/68 +f 63/87 60/69 64/71 +f 53/88 54/73 62/75 +f 62/89 61/76 64/78 +f 63/90 61/79 60/81 +f 50/91 52/82 49/84 +o Front +v 0.136000 0.135968 0.137488 +v -0.136000 0.135968 0.137488 +v 0.136000 -0.136032 0.137488 +v -0.136000 -0.136032 0.137488 +v 0.136000 0.135968 0.137488 +v -0.136000 0.135968 0.137488 +v 0.136000 -0.136032 0.137488 +v -0.136000 -0.136032 0.137488 +v 0.136000 -0.136032 0.137488 +v -0.136000 -0.136032 0.137488 +v 0.136000 -0.136032 0.137488 +v -0.136000 -0.136032 0.137488 +v -0.136000 0.135968 0.507738 +v 0.136000 0.135968 0.507738 +v -0.136000 -0.136032 0.507738 +v 0.136000 -0.136032 0.507738 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.014 +f 75/92 69/93 78/94 +f 69/95 71/96 72/97 +f 76/98 75/99 80/100 +f 72/101 71/101 74/101 +f 70/102 77/103 78/104 +f 74/101 73/101 76/101 +f 77/105 79/106 80/107 +f 77/108 70/109 76/110 +f 71/101 73/101 74/101 +f 73/101 75/101 76/101 +f 68/111 67/112 65/113 +f 80/114 75/92 78/94 +f 70/115 69/95 72/97 +f 79/116 76/98 80/100 +f 69/117 70/102 78/104 +f 78/118 77/105 80/107 +f 79/119 77/108 76/110 +f 66/120 68/111 65/113 +o Right +v -0.137514 -0.135968 -0.136000 +v -0.137514 -0.135968 0.136000 +v -0.137514 0.136032 -0.136000 +v -0.137514 0.136032 0.136000 +v -0.137514 -0.135968 -0.136000 +v -0.137514 -0.135968 0.136000 +v -0.137514 0.136032 -0.136000 +v -0.137514 0.136032 0.136000 +v -0.137514 0.136032 -0.136000 +v -0.137514 0.136032 0.136000 +v -0.137514 0.136032 -0.136000 +v -0.137514 0.136032 0.136000 +v -0.508489 -0.135968 0.136000 +v -0.508489 -0.135968 -0.136000 +v -0.508489 0.136032 0.136000 +v -0.508489 0.136032 -0.136000 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.015 +f 91/121 85/122 94/123 +f 85/124 87/125 88/126 +f 92/127 91/128 96/129 +f 88/130 87/130 90/130 +f 86/131 93/132 94/133 +f 90/130 89/130 92/130 +f 93/134 95/135 96/136 +f 93/137 86/138 92/139 +f 87/130 89/130 90/130 +f 89/130 91/130 92/130 +f 84/140 83/141 81/142 +f 96/143 91/121 94/123 +f 86/144 85/124 88/126 +f 95/145 92/127 96/129 +f 85/146 86/131 94/133 +f 94/147 93/134 96/136 +f 95/148 93/137 92/139 +f 82/149 84/140 81/142 +o Left +v 0.132904 -0.135968 0.136000 +v 0.132904 -0.135968 -0.136000 +v 0.132904 0.136032 0.136000 +v 0.132904 0.136032 -0.136000 +v 0.132904 -0.135968 0.136000 +v 0.132904 -0.135968 -0.136000 +v 0.132904 0.136032 0.136000 +v 0.132904 0.136032 -0.136000 +v 0.132904 0.136032 0.136000 +v 0.132904 0.136032 -0.136000 +v 0.132904 0.136032 0.136000 +v 0.132904 0.136032 -0.136000 +v 0.508009 -0.135968 -0.136000 +v 0.508009 -0.135968 0.136000 +v 0.508009 0.136032 -0.136000 +v 0.508009 0.136032 0.136000 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.016 +f 107/150 101/151 110/152 +f 101/153 103/154 104/155 +f 108/156 107/157 112/158 +f 104/159 103/159 106/159 +f 102/160 109/161 110/162 +f 106/159 105/159 108/159 +f 109/163 111/164 112/165 +f 109/166 102/167 108/168 +f 103/159 105/159 106/159 +f 105/159 107/159 108/159 +f 100/169 99/170 97/171 +f 112/172 107/150 110/152 +f 102/173 101/153 104/155 +f 111/174 108/156 112/158 +f 101/175 102/160 110/162 +f 110/176 109/163 112/165 +f 111/177 109/166 108/168 +f 98/178 100/169 97/171 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_item.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_item.obj new file mode 100644 index 00000000..64529aad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/aluminum_wire_item.obj @@ -0,0 +1,439 @@ +# Blender v2.68 (sub 0) OBJ File: 'aluminumWire.blend' +# www.blender.org +mtllib aluminumWire.mtl +o Middle +v -0.080000 -0.080000 0.080000 +v -0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 0.080000 +v -0.080000 0.080000 0.080000 +v -0.080000 0.080000 -0.080000 +v 0.080000 0.080000 -0.080000 +v 0.080000 0.080000 0.080000 +v -0.080000 -0.080000 0.080000 +v -0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 0.080000 +v -0.080000 0.080000 0.080000 +v -0.080000 0.080000 -0.080000 +v 0.080000 0.080000 -0.080000 +v 0.080000 0.080000 0.080000 +vt 0.726305 0.358354 +vt 0.898972 0.358354 +vt 0.898972 0.531020 +vt 0.726305 0.531020 +usemtl None +f 7/1 6/2 2/3 +f 8/1 7/2 3/3 +f 5/1 8/2 4/3 +f 2/1 1/2 4/3 +f 7/1 8/2 5/3 +f 9/1 13/2 14/3 +f 10/1 14/2 15/3 +f 11/1 15/2 16/3 +f 12/1 16/2 13/3 +f 12/1 9/2 10/3 +f 13/1 16/2 15/3 +f 6/1 5/2 1/3 +f 3/4 7/1 2/3 +f 4/4 8/1 3/3 +f 1/4 5/1 4/3 +f 3/4 2/1 4/3 +f 6/4 7/1 5/3 +f 10/4 9/1 14/3 +f 11/4 10/1 15/3 +f 12/4 11/1 16/3 +f 9/4 12/1 13/3 +f 11/4 12/1 10/3 +f 14/4 13/1 15/3 +f 2/4 6/1 1/3 +o Back +v 0.080000 -0.079981 -0.078600 +v -0.080000 -0.079981 -0.078600 +v 0.080000 0.080019 -0.078600 +v -0.080000 0.080019 -0.078600 +v 0.080000 -0.079981 -0.078600 +v -0.080000 -0.079981 -0.078600 +v 0.080000 0.080019 -0.078600 +v -0.080000 0.080019 -0.078600 +v 0.080000 0.080019 -0.078600 +v -0.080000 0.080019 -0.078600 +v 0.080000 0.080019 -0.078600 +v -0.080000 0.080019 -0.078600 +v -0.080000 -0.079981 -0.507728 +v 0.080000 -0.079981 -0.507728 +v -0.080000 0.080019 -0.507728 +v 0.080000 0.080019 -0.507728 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.001 +f 27/5 21/6 30/7 +f 21/8 23/9 24/10 +f 28/11 27/12 32/13 +f 24/14 23/14 26/14 +f 22/15 29/16 30/17 +f 26/14 25/14 28/14 +f 29/18 31/19 32/20 +f 29/21 22/22 28/23 +f 23/14 25/14 26/14 +f 25/14 27/14 28/14 +f 20/24 19/25 17/26 +f 32/27 27/5 30/7 +f 22/28 21/8 24/10 +f 31/29 28/11 32/13 +f 21/30 22/15 30/17 +f 30/31 29/18 32/20 +f 31/32 29/21 28/23 +f 18/33 20/24 17/26 +o Top +v 0.080000 0.078600 -0.079981 +v -0.080000 0.078600 -0.079981 +v 0.080000 0.078600 0.080019 +v -0.080000 0.078600 0.080019 +v 0.080000 0.078600 -0.079981 +v -0.080000 0.078600 -0.079981 +v 0.080000 0.078600 0.080019 +v -0.080000 0.078600 0.080019 +v 0.080000 0.078600 0.080019 +v -0.080000 0.078600 0.080019 +v 0.080000 0.078600 0.080019 +v -0.080000 0.078600 0.080019 +v -0.080000 0.507728 -0.079981 +v 0.080000 0.507728 -0.079981 +v -0.080000 0.507728 0.080019 +v 0.080000 0.507728 0.080019 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.012 +f 43/34 37/35 46/36 +f 37/37 39/38 40/39 +f 44/40 43/41 48/42 +f 40/43 39/43 42/43 +f 38/44 45/45 46/46 +f 42/43 41/43 44/43 +f 45/47 47/48 48/49 +f 45/50 38/51 44/52 +f 39/43 41/43 42/43 +f 41/43 43/43 44/43 +f 36/53 35/54 33/55 +f 48/56 43/34 46/36 +f 38/57 37/37 40/39 +f 47/58 44/40 48/42 +f 37/59 38/44 46/46 +f 46/60 45/47 48/49 +f 47/61 45/50 44/52 +f 34/62 36/53 33/55 +o Bottom +v 0.080000 -0.078600 0.079981 +v -0.080000 -0.078600 0.079981 +v 0.080000 -0.078600 -0.080019 +v -0.080000 -0.078600 -0.080019 +v 0.080000 -0.078600 0.079981 +v -0.080000 -0.078600 0.079981 +v 0.080000 -0.078600 -0.080019 +v -0.080000 -0.078600 -0.080019 +v 0.080000 -0.078600 -0.080019 +v -0.080000 -0.078600 -0.080019 +v 0.080000 -0.078600 -0.080019 +v -0.080000 -0.078600 -0.080019 +v -0.080000 -0.507728 0.079981 +v 0.080000 -0.507728 0.079981 +v -0.080000 -0.507728 -0.080019 +v 0.080000 -0.507728 -0.080019 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.013 +f 59/63 53/64 62/65 +f 53/66 55/67 56/68 +f 60/69 59/70 64/71 +f 56/72 55/72 58/72 +f 54/73 61/74 62/75 +f 58/72 57/72 60/72 +f 61/76 63/77 64/78 +f 61/79 54/80 60/81 +f 55/72 57/72 58/72 +f 57/72 59/72 60/72 +f 52/82 51/83 49/84 +f 64/85 59/63 62/65 +f 54/86 53/66 56/68 +f 63/87 60/69 64/71 +f 53/88 54/73 62/75 +f 62/89 61/76 64/78 +f 63/90 61/79 60/81 +f 50/91 52/82 49/84 +o Front +v 0.080000 0.079981 0.078600 +v -0.080000 0.079981 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 0.079981 0.078600 +v -0.080000 0.079981 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v -0.080000 0.079981 0.507728 +v 0.080000 0.079981 0.507728 +v -0.080000 -0.080019 0.507728 +v 0.080000 -0.080019 0.507728 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.014 +f 75/92 69/93 78/94 +f 69/95 71/96 72/97 +f 76/98 75/99 80/100 +f 72/101 71/101 74/101 +f 70/102 77/103 78/104 +f 74/101 73/101 76/101 +f 77/105 79/106 80/107 +f 77/108 70/109 76/110 +f 71/101 73/101 74/101 +f 73/101 75/101 76/101 +f 68/111 67/112 65/113 +f 80/114 75/92 78/94 +f 70/115 69/95 72/97 +f 79/116 76/98 80/100 +f 69/117 70/102 78/104 +f 78/118 77/105 80/107 +f 79/119 77/108 76/110 +f 66/120 68/111 65/113 +o Right +v -0.078600 -0.079981 -0.080000 +v -0.078600 -0.079981 0.080000 +v -0.078600 0.080019 -0.080000 +v -0.078600 0.080019 0.080000 +v -0.078600 -0.079981 -0.080000 +v -0.078600 -0.079981 0.080000 +v -0.078600 0.080019 -0.080000 +v -0.078600 0.080019 0.080000 +v -0.078600 0.080019 -0.080000 +v -0.078600 0.080019 0.080000 +v -0.078600 0.080019 -0.080000 +v -0.078600 0.080019 0.080000 +v -0.507728 -0.079981 0.080000 +v -0.507728 -0.079981 -0.080000 +v -0.507728 0.080019 0.080000 +v -0.507728 0.080019 -0.080000 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.015 +f 91/121 85/122 94/123 +f 85/124 87/125 88/126 +f 92/127 91/128 96/129 +f 88/130 87/130 90/130 +f 86/131 93/132 94/133 +f 90/130 89/130 92/130 +f 93/134 95/135 96/136 +f 93/137 86/138 92/139 +f 87/130 89/130 90/130 +f 89/130 91/130 92/130 +f 84/140 83/141 81/142 +f 96/143 91/121 94/123 +f 86/144 85/124 88/126 +f 95/145 92/127 96/129 +f 85/146 86/131 94/133 +f 94/147 93/134 96/136 +f 95/148 93/137 92/139 +f 82/149 84/140 81/142 +o Left +v 0.078600 -0.079981 0.080000 +v 0.078600 -0.079981 -0.080000 +v 0.078600 0.080019 0.080000 +v 0.078600 0.080019 -0.080000 +v 0.078600 -0.079981 0.080000 +v 0.078600 -0.079981 -0.080000 +v 0.078600 0.080019 0.080000 +v 0.078600 0.080019 -0.080000 +v 0.078600 0.080019 0.080000 +v 0.078600 0.080019 -0.080000 +v 0.078600 0.080019 0.080000 +v 0.078600 0.080019 -0.080000 +v 0.507728 -0.079981 -0.080000 +v 0.507728 -0.079981 0.080000 +v 0.507728 0.080019 -0.080000 +v 0.507728 0.080019 0.080000 +vt 0.192344 0.006648 +vt 0.362432 0.006126 +vt 0.365433 0.984130 +vt 0.897004 0.181838 +vt 0.897526 0.351926 +vt 0.727438 0.352447 +vt 0.721814 0.984130 +vt 0.551726 0.984652 +vt 0.548726 0.006647 +vt 0.011602 0.003574 +vt 0.373535 0.984652 +vt 0.370535 0.006647 +vt 0.540623 0.006126 +vt 0.897526 0.176213 +vt 0.727438 0.176735 +vt 0.726916 0.006648 +vt 0.184241 0.006126 +vt 0.187242 0.984130 +vt 0.017154 0.984652 +vt 0.897526 0.527638 +vt 0.727438 0.528160 +vt 0.726916 0.358072 +vt 0.195345 0.984652 +vt 0.726916 0.182360 +vt 0.718813 0.006126 +vt 0.543623 0.984130 +vt 0.897004 0.006126 +vt 0.014154 0.006647 +vt 0.897004 0.357550 +usemtl None_aluminumWire.png.016 +f 107/150 101/151 110/152 +f 101/153 103/154 104/155 +f 108/156 107/157 112/158 +f 104/159 103/159 106/159 +f 102/160 109/161 110/162 +f 106/159 105/159 108/159 +f 109/163 111/164 112/165 +f 109/166 102/167 108/168 +f 103/159 105/159 106/159 +f 105/159 107/159 108/159 +f 100/169 99/170 97/171 +f 112/172 107/150 110/152 +f 102/173 101/153 104/155 +f 111/174 108/156 112/158 +f 101/175 102/160 110/162 +f 110/176 109/163 112/165 +f 111/177 109/166 108/168 +f 98/178 100/169 97/171 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_base.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_base.obj new file mode 100644 index 00000000..afd169db --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_base.obj @@ -0,0 +1,28 @@ +# +# object arclampBase +# +o main +v -0.38 -0.323 0.38 +v 0.38 -0.323 0.38 +v 0.38 -0.323 -0.38 +v -0.38 -0.323 -0.38 +v -0.38 -0.25 0.38 +v 0.38 -0.25 0.38 +v 0.38 -0.25 -0.38 +v -0.38 -0.25 -0.38 +# 8 vertices +vn 0.57735 0.57735 0.57735 +# 1 vertex normals +vt 0.1400 0.7594 0.0000 +vt 0.2980 0.7594 0.0000 +vt 0.2980 0.9174 0.0000 +vt 0.1400 0.9174 0.0000 +# 4 texture coords +f 1/1/1 4/4/1 3/3/1 2/2/1 +f 5/1/1 6/2/1 7/3/1 8/4/1 +f 1/1/1 2/4/1 6/3/1 5/2/1 +f 2/1/1 3/4/1 7/3/1 6/2/1 +f 3/1/1 4/4/1 8/3/1 7/2/1 +f 4/1/1 1/4/1 5/3/1 8/2/1 +# 6 polygons + diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_metal.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_metal.obj new file mode 100644 index 00000000..732c4aba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/arclamp_metal.obj @@ -0,0 +1,105 @@ +#usemtl none +o main +v -3.4331 2.3703 -3.4331 +v -3.4331 2.7308 -3.4331 +v -3.4331 2.7308 3.4331 +v -3.4331 2.3703 3.4331 +v 3.4331 2.7308 3.4331 +v 3.4331 2.3703 3.4331 +v 3.4331 2.7308 -3.4331 +v 3.4331 2.3703 -3.4331 +v 5.7199 2.7308 5.7199 +v -5.7199 2.7308 5.7199 +v -5.7199 1.3831 5.7199 +v 5.7199 1.3831 5.7199 +v 5.7199 2.7308 -5.7199 +v 5.7199 1.3831 -5.7199 +v -5.7199 2.7308 -5.7199 +v -5.7199 1.3831 -5.7199 +v 6.4507 1.3831 -6.4507 +v 6.4507 1.3831 6.4507 +v 6.4507 -1.3477 6.4507 +v 6.4507 -1.3477 -6.4507 +v -6.4507 1.3831 -6.4507 +v -6.4507 -1.3477 -6.4507 +v -6.4507 1.3831 6.4507 +v -6.4507 -1.3477 6.4507 +v 4.12 -1.3477 4.12 +v -4.12 -1.3477 4.12 +v -4.12 -4.3477 4.12 +v 4.12 -4.3477 4.12 +v 4.12 -1.3477 -4.12 +v 4.12 -4.3477 -4.12 +v -4.12 -1.3477 -4.12 +v -4.12 -4.3477 -4.12 +# 32 vertices + +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +# 6 vertex normals + +vt 0.5594 0.0283 0.0000 +vt 0.5594 0.0220 0.0000 +vt 0.9872 0.0220 0.0000 +vt 0.9872 0.0283 0.0000 +vt 0.6346 0.1561 0.0000 +vt 0.8961 0.1561 0.0000 +vt 0.8961 0.1647 0.0000 +vt 0.6346 0.1647 0.0000 +vt 0.6028 0.5282 0.0000 +vt 0.7920 0.5282 0.0000 +vt 0.7920 0.5394 0.0000 +vt 0.6028 0.5394 0.0000 +vt 0.5681 0.8749 0.0000 +vt 0.5681 0.6004 0.0000 +vt 0.8426 0.6004 0.0000 +vt 0.8426 0.8749 0.0000 +vt 0.7647 0.2693 0.0000 +vt 0.7647 0.0584 0.0000 +vt 0.8069 0.1005 0.0000 +vt 0.8069 0.2271 0.0000 +vt 0.9757 0.2693 0.0000 +vt 0.9335 0.2271 0.0000 +vt 0.9757 0.0584 0.0000 +vt 0.9335 0.1005 0.0000 +vt 0.8290 0.6182 0.0000 +vt 0.8290 0.8586 0.0000 +vt 0.8153 0.8450 0.0000 +vt 0.8153 0.6318 0.0000 +vt 0.5886 0.6182 0.0000 +vt 0.6022 0.6318 0.0000 +vt 0.5886 0.8586 0.0000 +vt 0.6022 0.8450 0.0000 +# 32 texture coords +#s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 4/1/2 3/2/2 5/3/2 6/4/2 +f 6/1/3 5/2/3 7/3/3 8/4/3 +f 8/1/4 7/2/4 2/3/4 1/4/4 +f 9/5/4 10/6/4 11/7/4 12/8/4 +f 13/5/1 9/6/1 12/7/1 14/8/1 +f 15/5/2 13/6/2 14/7/2 16/8/2 +f 10/5/3 15/6/3 16/7/3 11/8/3 +f 17/9/1 18/10/1 19/11/1 20/12/1 +f 21/9/2 17/10/2 20/11/2 22/12/2 +f 23/9/3 21/10/3 22/11/3 24/12/3 +f 24/13/5 22/14/5 20/15/5 19/16/5 +f 24/11/4 19/12/4 18/9/4 23/10/4 +f 15/17/6 10/18/6 3/19/6 2/20/6 +f 13/21/6 15/17/6 2/20/6 7/22/6 +f 9/23/6 13/21/6 7/22/6 5/24/6 +f 10/18/6 9/23/6 5/24/6 3/19/6 +f 18/25/6 17/26/6 14/27/6 12/28/6 +f 23/29/6 18/25/6 12/28/6 11/30/6 +f 21/31/6 23/29/6 11/30/6 16/32/6 +f 17/26/6 21/31/6 16/32/6 14/27/6 +f 25/5/4 26/6/4 27/7/4 28/8/4 +f 29/5/1 25/6/1 28/7/1 30/8/1 +f 31/5/2 29/6/2 30/7/2 32/8/2 +f 26/5/3 31/6/3 32/7/3 27/8/3 +f 27/5/6 32/5/6 30/5/6 28/5/6 +# 26 polygons diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/basic_block.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/basic_block.obj new file mode 100644 index 00000000..935ba410 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/basic_block.obj @@ -0,0 +1,74 @@ +# Blender v2.73 (sub 0) OBJ File: 'blockBasic.blend' +# www.blender.org +o Down +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +f 2/1/1 3/2/1 4/3/1 +f 1/4/1 2/1/1 4/3/1 +o North +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vn -0.000000 0.000000 1.000000 +f 7/5/2 8/6/2 6/7/2 +f 5/8/2 7/5/2 6/7/2 +o East +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +f 11/9/3 12/10/3 10/11/3 +f 9/12/3 11/9/3 10/11/3 +o South +v 0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 0.500000 -0.500000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +f 13/13/4 14/14/4 16/15/4 +f 15/16/4 13/13/4 16/15/4 +o Up +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +f 20/17/5 19/18/5 18/19/5 +f 17/20/5 20/17/5 18/19/5 +o West +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn -1.000000 -0.000000 -0.000000 +f 21/21/6 23/22/6 24/23/6 +f 22/24/6 21/21/6 24/23/6 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_compressor_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_compressor_model.json new file mode 100644 index 00000000..9514ac36 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftcore:blocks/advanced/electric_compressor", + "east": "galacticraftcore:blocks/advanced/machine_input", + "south": "galacticraftcore:blocks/advanced/machine_side", + "west": "galacticraftcore:blocks/advanced/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_solar_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_solar_model.json new file mode 100644 index 00000000..d9f9c5a9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/advanced_solar_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/solar_advanced_0", + "north": "galacticraftcore:blocks/machine_output", + "east": "galacticraftcore:blocks/solar_advanced_1", + "south": "galacticraftcore:blocks/solar_advanced_1", + "west": "galacticraftcore:blocks/solar_advanced_1" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_controller_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_controller_model.json new file mode 100644 index 00000000..cdc4b8fe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_controller_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube_all", + "textures": { + "down": "galacticraftcore:blocks/air_lock_frame", + "up": "galacticraftcore:blocks/air_lock_frame", + "north": "galacticraftcore:blocks/air_lock_controller", + "south": "galacticraftcore:blocks/air_lock_controller", + "west": "galacticraftcore:blocks/air_lock_controller", + "east": "galacticraftcore:blocks/air_lock_controller", + "particle": "galacticraftcore:blocks/air_lock_frame" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_frame_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_frame_model.json new file mode 100644 index 00000000..b3b09d9a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_frame_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/air_lock_frame" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_flat_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_flat_model.json new file mode 100644 index 00000000..d5615937 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_flat_model.json @@ -0,0 +1,56 @@ +{ + "elements": [ + { "from": [ 0, 4, 0 ], + "to": [ 16, 12, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/air_lock_seal", + "down": "galacticraftcore:blocks/air_lock_seal", + "up": "galacticraftcore:blocks/air_lock_seal", + "north": "galacticraftcore:blocks/air_lock_seal", + "east": "galacticraftcore:blocks/air_lock_seal", + "south": "galacticraftcore:blocks/air_lock_seal", + "west": "galacticraftcore:blocks/air_lock_seal" + }, + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_model.json new file mode 100644 index 00000000..7d31f957 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/air_lock_seal_model.json @@ -0,0 +1,56 @@ +{ + "elements": [ + { "from": [ 4, 0, 0 ], + "to": [ 12, 16, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/air_lock_seal", + "down": "galacticraftcore:blocks/air_lock_seal", + "up": "galacticraftcore:blocks/air_lock_seal", + "north": "galacticraftcore:blocks/air_lock_seal", + "east": "galacticraftcore:blocks/air_lock_seal", + "south": "galacticraftcore:blocks/air_lock_seal", + "west": "galacticraftcore:blocks/air_lock_seal" + }, + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire.json new file mode 100644 index 00000000..effef13e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire.json @@ -0,0 +1,21 @@ +{ +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_d.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_d.json new file mode 100644 index 00000000..27f41f93 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_d.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_n.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_n.json new file mode 100644 index 00000000..b4792457 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_n.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nd.json new file mode 100644 index 00000000..252c81a0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nd.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ne.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ne.json new file mode 100644 index 00000000..23c01554 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ne.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ned.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ned.json new file mode 100644 index 00000000..b81b87f3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ned.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nes.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nes.json new file mode 100644 index 00000000..ee3f3841 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nes.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesd.json new file mode 100644 index 00000000..15fdbacc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesd.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesu.json new file mode 100644 index 00000000..a7e01234 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesu.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesud.json new file mode 100644 index 00000000..d464d480 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesud.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesw.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesw.json new file mode 100644 index 00000000..5450564d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nesw.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswd.json new file mode 100644 index 00000000..63e2346f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswd.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswu.json new file mode 100644 index 00000000..5b62216e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswu.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswud.json new file mode 100644 index 00000000..5809484d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neswud.json @@ -0,0 +1,100 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neu.json new file mode 100644 index 00000000..2cc950cf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neud.json new file mode 100644 index 00000000..4a51dd05 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_neud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ns.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ns.json new file mode 100644 index 00000000..f6a61801 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ns.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsd.json new file mode 100644 index 00000000..57b66e96 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsd.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsu.json new file mode 100644 index 00000000..e91ea5d4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsud.json new file mode 100644 index 00000000..77ab3f43 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nsud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nu.json new file mode 100644 index 00000000..806e2cd8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nu.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nud.json new file mode 100644 index 00000000..fd96fab1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_nud.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_u.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_u.json new file mode 100644 index 00000000..704eb3ed --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_u.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ud.json new file mode 100644 index 00000000..93fc94b6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/alu_wire_ud.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 6.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arc_furnace_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arc_furnace_model.json new file mode 100644 index 00000000..91a1963c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arc_furnace_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftcore:blocks/advanced/electric_furnace", + "east": "galacticraftcore:blocks/advanced/machine_input", + "south": "galacticraftcore:blocks/advanced/machine_side", + "west": "galacticraftcore:blocks/advanced/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp.json new file mode 100644 index 00000000..343e4a93 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp.json @@ -0,0 +1,125 @@ +{ + "parent": "block/block", + "textures": { + "texture": "galacticraftcore:blocks/arc_lamp_on", + "particle": "galacticraftcore:blocks/arc_lamp_on" + }, + "elements": [ + { + "from": [ 2, 0, 2 ], + "to": [ 14, 1, 14 ], + "faces": { + "down": { "uv": [ 8, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" } + } + }, + { + "from": [ 3.5, -0.5, 3.9375 ], + "to": [ 11, 2, 12.4375 ], + "rotation": { "origin": [ 3.5, 2, 3.9375 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 0, 8, 8, 16 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7.5, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7.5, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 8, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 8, 10.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6, -0.5, 5.5 ], + "to": [ 11, 1.5, 11 ], + "rotation": { "origin": [ 6, 1.5, 5.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 13.5, 13.5, 8, 8 ], "texture": "#texture" }, + "up": { "uv": [ 8, 8, 13.5, 13.5 ], "texture": "#texture" }, + "north": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "south": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "west": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "east": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.3125, 1.1875, 3.875 ], + "to": [ 10.8125, 2.1875, 4.875 ], + "rotation": { "origin": [ 3.3125, 2.1875, 3.875 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.3125, 1.1875, 11.5 ], + "to": [ 10.8125, 2.1875, 12.5 ], + "rotation": { "origin": [ 3.3125, 2.1875, 11.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 7, 9, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 7.875, 5.8125, 4.5 ], + "to": [ 8.875, 6.8125, 12 ], + "rotation": { "origin": [ 7.875, 6.8125, 4.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 1, 16, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 8, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 8, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.25, 1.25, 4.5 ], + "to": [ 4.25, 2.25, 12 ], + "rotation": { "origin": [ 3.25, 2.25, 4.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 1, 14.5, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 6.5, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 6.5, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 10, 3.5, 10 ], + "to": [ 14.5, 4, 10.5 ], + "rotation": { "origin": [ 10, 4, 10 ], "axis": "z", "angle": -45 }, + "faces": { + "down": { "uv": [ 10, 10, 14.5, 10.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 10, 14.5, 10.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 12, 14.5, 12.5 ], "texture": "#texture" }, + "south": { "uv": [ 10, 12, 14.5, 12.5 ], "texture": "#texture" }, + "west": { "uv": [ 10, 12, 10.5, 12.5 ], "texture": "#texture" }, + "east": { "uv": [ 10, 12, 10.5, 12.5 ], "texture": "#texture" } + } + }, + { + "from": [ 10.25, 3.25, 6 ], + "to": [ 14.75, 3.75, 6.5 ], + "rotation": { "origin": [ 10.25, 3.75, 6 ], "axis": "z", "angle": -45 }, + "faces": { + "down": { "uv": [ 10, 10.5, 14.5, 11 ], "texture": "#texture" }, + "up": { "uv": [ 10, 11, 14.5, 11.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.25, 12.25, 14.75, 12.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.25, 12.25, 14.75, 12.75 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12.5, 13, 13 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 11, 13, 11.5 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_model.json new file mode 100644 index 00000000..f37ca591 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_model.json @@ -0,0 +1,20 @@ +{ + "textures": { + "texture": "galacticraftcore:blocks/arc_lamp_off", + "particle": "galacticraftcore:blocks/arc_lamp_off" + }, + "elements": [ + { + "from": [ 2, 0, 2 ], + "to": [ 14, 1, 14 ], + "faces": { + "down": { "uv": [ 8, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_side_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_side_model.json new file mode 100644 index 00000000..11fd5a05 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_base_side_model.json @@ -0,0 +1,20 @@ +{ + "textures": { + "texture": "galacticraftcore:blocks/arc_lamp_off", + "particle": "galacticraftcore:blocks/arc_lamp_off" + }, + "elements": [ +{ + "from": [ 0, 2, 2 ], + "to": [ 1, 14, 14 ], + "faces": { + "down": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_on_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_on_model.json new file mode 100644 index 00000000..b06e1b17 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/arclamp_on_model.json @@ -0,0 +1,125 @@ +{ + "parent": "block/block", + "textures": { + "texture": "galacticraftcore:blocks/arc_lamp_on", + "particle": "galacticraftcore:blocks/arc_lamp_on" + }, + "elements": [ + { + "from": [ 2, 0, 2 ], + "to": [ 14, 1, 14 ], + "faces": { + "down": { "uv": [ 8, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 7, 8, 8 ], "texture": "#texture" } + } + }, + { + "from": [ 3.5, -0.5, 3.9375 ], + "to": [ 11, 2, 12.4375 ], + "rotation": { "origin": [ 3.5, 2, 3.9375 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 0, 8, 8, 16 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7.5, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7.5, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 8, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 8, 10.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6, -0.5, 5.5 ], + "to": [ 11, 1.5, 11 ], + "rotation": { "origin": [ 6, 1.5, 5.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 13.5, 13.5, 8, 8 ], "texture": "#texture" }, + "up": { "uv": [ 8, 8, 13.5, 13.5 ], "texture": "#texture" }, + "north": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "south": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "west": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "east": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.3125, 1.1875, 3.875 ], + "to": [ 10.8125, 2.1875, 4.875 ], + "rotation": { "origin": [ 3.3125, 2.1875, 3.875 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7.5, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.3125, 1.1875, 11.5 ], + "to": [ 10.8125, 2.1875, 12.5 ], + "rotation": { "origin": [ 3.3125, 2.1875, 11.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 7, 9, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 7, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 7.875, 5.8125, 4.5 ], + "to": [ 8.875, 6.8125, 12 ], + "rotation": { "origin": [ 7.875, 6.8125, 4.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 1, 16, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 8, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 8, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 3.25, 1.25, 4.5 ], + "to": [ 4.25, 2.25, 12 ], + "rotation": { "origin": [ 3.25, 2.25, 4.5 ], "axis": "z", "angle": 45 }, + "faces": { + "down": { "uv": [ 1, 14.5, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 9 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 6.5, 9 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 6.5, 9 ], "texture": "#texture" } + } + }, + { + "from": [ 10, 3.5, 10 ], + "to": [ 14.5, 4, 10.5 ], + "rotation": { "origin": [ 10, 4, 10 ], "axis": "z", "angle": -45 }, + "faces": { + "down": { "uv": [ 10, 10, 14.5, 10.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 10, 14.5, 10.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 12, 14.5, 12.5 ], "texture": "#texture" }, + "south": { "uv": [ 10, 12, 14.5, 12.5 ], "texture": "#texture" }, + "west": { "uv": [ 10, 12, 10.5, 12.5 ], "texture": "#texture" }, + "east": { "uv": [ 10, 12, 10.5, 12.5 ], "texture": "#texture" } + } + }, + { + "from": [ 10.25, 3.25, 6 ], + "to": [ 14.75, 3.75, 6.5 ], + "rotation": { "origin": [ 10.25, 3.75, 6 ], "axis": "z", "angle": -45 }, + "faces": { + "down": { "uv": [ 10, 10.5, 14.5, 11 ], "texture": "#texture" }, + "up": { "uv": [ 10, 11, 14.5, 11.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.25, 12.25, 14.75, 12.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.25, 12.25, 14.75, 12.75 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12.5, 13, 13 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 11, 13, 11.5 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/basic_solar_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/basic_solar_model.json new file mode 100644 index 00000000..18607f24 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/basic_solar_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/solar_basic_0", + "north": "galacticraftcore:blocks/machine_output", + "east": "galacticraftcore:blocks/solar_basic_1", + "south": "galacticraftcore:blocks/solar_basic_1", + "west": "galacticraftcore:blocks/solar_basic_1" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_aluminum_gc_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_aluminum_gc_model.json new file mode 100644 index 00000000..7df4d11a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_aluminum_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_aluminum" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_copper_gc_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_copper_gc_model.json new file mode 100644 index 00000000..48bbda37 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_copper_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_copper" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_meteoric_iron_gc_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_meteoric_iron_gc_model.json new file mode 100644 index 00000000..24e327c2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_meteoric_iron_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_meteoric_iron" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_multi_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_multi_model.json new file mode 100644 index 00000000..464995b7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_multi_model.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 0, 0, 0 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/buggy_pad_full", + "down": "galacticraftcore:blocks/buggy_pad_full", + "up": "galacticraftcore:blocks/buggy_pad_full", + "north": "galacticraftcore:blocks/buggy_pad_full", + "east": "galacticraftcore:blocks/buggy_pad_full", + "south": "galacticraftcore:blocks/buggy_pad_full", + "west": "galacticraftcore:blocks/buggy_pad_full" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_silicon_gc_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_silicon_gc_model.json new file mode 100644 index 00000000..ec1bdbfb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_silicon_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_silicon" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_tin_gc_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_tin_gc_model.json new file mode 100644 index 00000000..22c35258 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/block_tin_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/block_tin" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/breatheable_air.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/breatheable_air.json new file mode 100644 index 00000000..21465902 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/breatheable_air.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/breatheable_air" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_full_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_full_model.json new file mode 100644 index 00000000..3c6f06b6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_full_model.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 4, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/buggy_pad_full", + "down": "galacticraftcore:blocks/buggy_pad_full", + "up": "galacticraftcore:blocks/buggy_pad_full", + "north": "galacticraftcore:blocks/buggy_pad_full", + "east": "galacticraftcore:blocks/buggy_pad_full", + "south": "galacticraftcore:blocks/buggy_pad_full", + "west": "galacticraftcore:blocks/buggy_pad_full" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_model.json new file mode 100644 index 00000000..eb3c1bd9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/buggy_pad_model.json @@ -0,0 +1,25 @@ +{ + "parent": "block/thin_block", + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 3, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/buggy_pad", + "down": "galacticraftcore:blocks/buggy_pad", + "up": "galacticraftcore:blocks/buggy_pad", + "north": "galacticraftcore:blocks/buggy_pad", + "east": "galacticraftcore:blocks/buggy_pad", + "south": "galacticraftcore:blocks/buggy_pad", + "west": "galacticraftcore:blocks/buggy_pad" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_loader_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_loader_model.json new file mode 100644 index 00000000..7c1101de --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_loader_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine_cargoloader", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_cargoloader", + "west": "galacticraftcore:blocks/machine_item_input" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_unloader_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_unloader_model.json new file mode 100644 index 00000000..df3dc2a3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cargo_unloader_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine_cargounloader", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_cargounloader", + "west": "galacticraftcore:blocks/machine_item_output" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice1_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice1_model.json new file mode 100644 index 00000000..9cb4050c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice1_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 3, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice2_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice2_model.json new file mode 100644 index 00000000..d5d477e8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice2_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 5, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice3_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice3_model.json new file mode 100644 index 00000000..ea2cfaa6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice3_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 7, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice4_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice4_model.json new file mode 100644 index 00000000..ca25a9fd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice4_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 9, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice5_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice5_model.json new file mode 100644 index 00000000..b47b556f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice5_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 11, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice6_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice6_model.json new file mode 100644 index 00000000..1368cbe5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_slice6_model.json @@ -0,0 +1,22 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2", + "inside": "galacticraftcore:blocks/cheese_3" + }, + "elements": [ + { "from": [ 13, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#inside" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_uneaten_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_uneaten_model.json new file mode 100644 index 00000000..54709ac6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cheese_uneaten_model.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "textures": { + "particle": "galacticraftcore:blocks/cheese_2", + "bottom": "galacticraftcore:blocks/cheese_1", + "top": "galacticraftcore:blocks/cheese_1", + "side": "galacticraftcore:blocks/cheese_2" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top" }, + "north": { "texture": "#side" }, + "south": { "texture": "#side" }, + "west": { "texture": "#side" }, + "east": { "texture": "#side" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/circuit_fabricator_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/circuit_fabricator_model.json new file mode 100644 index 00000000..f7731bd8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/circuit_fabricator_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/circuit_fabricator", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cluster_storage_16.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cluster_storage_16.json new file mode 100644 index 00000000..5655a05f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cluster_storage_16.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftcore:blocks/advanced/energy_storage_module_16", + "east": "galacticraftcore:blocks/advanced/machine_output", + "south": "galacticraftcore:blocks/advanced/energy_storage_module_16", + "west": "galacticraftcore:blocks/advanced/machine_input" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/coal_generator_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/coal_generator_model.json new file mode 100644 index 00000000..9155ec8b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/coal_generator_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/coal_generator", + "east": "galacticraftcore:blocks/machine_output", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/collector_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/collector_model.json new file mode 100644 index 00000000..655903ac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/collector_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/collector", + "down": "galacticraftcore:blocks/collector", + "up": "galacticraftcore:blocks/collector", + "north": "galacticraftcore:blocks/collector", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/collector", + "west": "galacticraftcore:blocks/machine_oxygen_output" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compact_workbench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compact_workbench.json new file mode 100644 index 00000000..77c28cac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compact_workbench.json @@ -0,0 +1,168 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "galacticraftcore:blocks/workbench/side", + "1": "galacticraftcore:blocks/workbench/blueprint", + "2": "galacticraftcore:blocks/workbench/top", + "3": "galacticraftcore:blocks/workbench/arm", + "particle": "galacticraftcore:blocks/workbench/side" + }, + "elements": [ + { + "name": "base", + "from": [0, 0, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "name": "wall_e", + "from": [0, 16, 1], + "to": [1, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0.5, 16.5, 8.5]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 15], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 15], "texture": "#0"} + } + }, + { + "name": "wall_w", + "from": [15, 16, 0], + "to": [16, 17, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [15.5, 16.5, 7.5]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 1, 15], "texture": "#0"}, + "down": {"uv": [0, 0, 1, 15], "texture": "#0"} + } + }, + { + "name": "wall_s", + "from": [1, 16, 15], + "to": [16, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 16.5, 15.5]}, + "faces": { + "north": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "up": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 15, 1], "texture": "#0"} + } + }, + { + "name": "wall_n", + "from": [0, 16, 0], + "to": [15, 17, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [7.5, 16.5, 0.5]}, + "faces": { + "north": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 15, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 15, 1], "texture": "#0"} + } + }, + { + "name": "blueprint", + "from": [4, 15.5, 4], + "to": [12, 16.5, 12], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#missing"} + } + }, + { + "name": "arm_1", + "from": [14.29289, 16, 2.45711], + "to": [15.29289, 21, 3.45711], + "rotation": {"angle": 45, "axis": "y", "origin": [13.04289, 19.5, 2.95711]}, + "faces": { + "north": {"uv": [0, 0, 1, 5], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 5], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 5], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 5], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "name": "arm_2", + "from": [8.29289, 20, 2.45711], + "to": [14.29289, 21, 3.45711], + "rotation": {"angle": 45, "axis": "y", "origin": [13.04289, 19.5, 2.95711]}, + "faces": { + "north": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "up": {"uv": [0, 0, 6, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 6, 1], "texture": "#3"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 90, 0], + "translation": [0, 14, 0], + "scale": [0.8, 0.8, 0.8] + } + }, + "groups": [ + 0, + 1, + 2, + 3, + 4, + 5, + { + "name": "arm", + "origin": [13.5, 19.5, 2.5], + "color": 0, + "children": [6, 7] + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compressor_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compressor_model.json new file mode 100644 index 00000000..c69d7868 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/oxygen_compressor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/oxygen_compressor_back", + "west": "galacticraftcore:blocks/machine_oxygen_input" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_1.json new file mode 100644 index 00000000..e0958d7e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_1.json @@ -0,0 +1,189 @@ +{ +"textures": { + "texture": "galacticraftcore:blocks/cryo_0", + "particle": "galacticraftcore:blocks/cryo_0", + "cryo_1": "galacticraftcore:blocks/cryo_1" +}, +"elements": [ +{ + "from": [ 0, 0, 0 ], + "to": [ 2, 16, 8 ], + "faces": { + "down": { "uv": [ 16, 8, 14, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 2, 8 ], "texture": "#texture" }, + "north": { "uv": [ 14, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 2, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 14, 0, 0 ], + "to": [ 16, 16, 8 ], + "faces": { + "down": { "uv": [ 2, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 14, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 2, 16 ], "texture": "#texture" }, + "south": { "uv": [ 14, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 0, 0 ], + "to": [ 14, 16, 1 ], + "faces": { + "down": { "uv": [ 14, 1, 2, 0 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 14, 1 ], "texture": "#texture" }, + "north": { "uv": [ 2, 0, 14, 14 ], "texture": "#texture" }, + "south": { "uv": [ 2, 0, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 14 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 0, 14 ], + "to": [ 13, 1, 15 ], + "faces": { + "down": { "uv": [ 13, 15, 3, 14 ], "texture": "#cryo_1" }, + "up": { "uv": [ 3, 14, 13, 15 ], "texture": "#cryo_1" }, + "north": { "uv": [ 3, 15, 13, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 3, 15, 13, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 14, 15, 15, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 1, 15, 2, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 0, 12 ], + "to": [ 3, 1, 14 ], + "faces": { + "down": { "uv": [ 14, 14, 13, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 2, 12, 3, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 13, 15, 14, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 2, 15, 3, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 15, 14, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 15, 4, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 13, 0, 12 ], + "to": [ 14, 1, 14 ], + "faces": { + "down": { "uv": [ 3, 14, 2, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 13, 12, 14, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 2, 15, 3, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 13, 15, 14, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 15, 14, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 15, 4, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 1, 0, 8 ], + "to": [ 2, 1, 12 ], + "faces": { + "down": { "uv": [ 15, 12, 14, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 1, 8, 2, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 14, 15, 15, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 1, 15, 2, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 15, 12, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 15, 8, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 14, 0, 8 ], + "to": [ 15, 1, 12 ], + "faces": { + "down": { "uv": [ 2, 12, 1, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 14, 8, 15, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 1, 15, 2, 16 ], "texture": "#cryo_1" }, + "south": { "uv": [ 14, 15, 15, 16 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 15, 12, 16 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 15, 8, 16 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 0, 1 ], + "to": [ 3, 16, 2 ], + "faces": { + "down": { "uv": [ 14, 2, 13, 1 ], "texture": "#texture" }, + "up": { "uv": [ 2, 1, 3, 2 ], "texture": "#texture" }, + "north": { "uv": [ 13, 0, 14, 14 ], "texture": "#texture" }, + "south": { "uv": [ 2, 0, 3, 14 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 2, 14 ], "texture": "#texture" }, + "east": { "uv": [ 14, 0, 15, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 13, 0, 1 ], + "to": [ 14, 16, 2 ], + "faces": { + "down": { "uv": [ 3, 2, 2, 1 ], "texture": "#texture" }, + "up": { "uv": [ 13, 1, 14, 2 ], "texture": "#texture" }, + "north": { "uv": [ 2, 0, 3, 14 ], "texture": "#texture" }, + "south": { "uv": [ 13, 0, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 2, 14 ], "texture": "#texture" }, + "east": { "uv": [ 14, 0, 15, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 13, 8 ], + "to": [ 2, 16, 12 ], + "faces": { + "down": { "uv": [ 15, 12, 14, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 1, 8, 2, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 14, 0, 15, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 1, 0, 2, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 0, 12, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 0, 8, 3 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 14, 13, 8 ], + "to": [ 15, 16, 12 ], + "faces": { + "down": { "uv": [ 2, 12, 1, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 14, 8, 15, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 1, 0, 2, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 14, 0, 15, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 0, 12, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 0, 8, 3 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 13, 12 ], + "to": [ 3, 16, 14 ], + "faces": { + "down": { "uv": [ 14, 14, 13, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 2, 12, 3, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 13, 0, 14, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 2, 0, 3, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 0, 14, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 0, 4, 3 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 13, 13, 12 ], + "to": [ 14, 16, 14 ], + "faces": { + "down": { "uv": [ 3, 14, 2, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 13, 12, 14, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 2, 0, 3, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 13, 0, 14, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 0, 14, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 0, 4, 3 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 3, 13, 14 ], + "to": [ 13, 16, 15 ], + "faces": { + "down": { "uv": [ 13, 15, 3, 14 ], "texture": "#cryo_1" }, + "up": { "uv": [ 3, 14, 13, 15 ], "texture": "#cryo_1" }, + "north": { "uv": [ 3, 0, 13, 3 ], "texture": "#cryo_1" }, + "south": { "uv": [ 3, 0, 13, 3 ], "texture": "#cryo_1" }, + "west": { "uv": [ 14, 0, 15, 3 ], "texture": "#cryo_1" }, + "east": { "uv": [ 1, 0, 2, 3 ], "texture": "#cryo_1" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_2.json new file mode 100644 index 00000000..680b47f8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/cryo_2.json @@ -0,0 +1,93 @@ +{ +"textures": { + "texture": "galacticraftcore:blocks/cryo_0", + "particle": "galacticraftcore:blocks/cryo_0", + "cryo_1": "galacticraftcore:blocks/cryo_1" +}, +"elements": [ +{ + "from": [ 0, 0, 0 ], + "to": [ 2, 12, 8 ], + "faces": { + "down": { "uv": [ 16, 8, 14, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 2, 8 ], "texture": "#texture" }, + "north": { "uv": [ 14, 4, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 4, 2, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 4, 8, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 4, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 14, 0, 0 ], + "to": [ 16, 12, 8 ], + "faces": { + "down": { "uv": [ 2, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 14, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 4, 2, 16 ], "texture": "#texture" }, + "south": { "uv": [ 14, 4, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 4, 8, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 4, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 0, 0 ], + "to": [ 14, 12, 1 ], + "faces": { + "down": { "uv": [ 14, 1, 2, 0 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 14, 1 ], "texture": "#texture" }, + "north": { "uv": [ 2, 4, 14, 16 ], "texture": "#texture" }, + "south": { "uv": [ 2, 4, 14, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 4, 1, 16 ], "texture": "#texture" }, + "east": { "uv": [ 15, 4, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 0, 1 ], + "to": [ 3, 12, 2 ], + "faces": { + "down": { "uv": [ 14, 2, 13, 1 ], "texture": "#texture" }, + "up": { "uv": [ 2, 1, 3, 2 ], "texture": "#texture" }, + "north": { "uv": [ 13, 4, 14, 16 ], "texture": "#texture" }, + "south": { "uv": [ 2, 4, 3, 16 ], "texture": "#texture" }, + "west": { "uv": [ 1, 4, 2, 16 ], "texture": "#texture" }, + "east": { "uv": [ 14, 4, 15, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 13, 0, 1 ], + "to": [ 14, 12, 2 ], + "faces": { + "down": { "uv": [ 3, 2, 2, 1 ], "texture": "#texture" }, + "up": { "uv": [ 13, 1, 14, 2 ], "texture": "#texture" }, + "north": { "uv": [ 2, 4, 3, 16 ], "texture": "#texture" }, + "south": { "uv": [ 13, 4, 14, 16 ], "texture": "#texture" }, + "west": { "uv": [ 1, 4, 2, 16 ], "texture": "#texture" }, + "east": { "uv": [ 14, 4, 15, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 12, 0 ], + "to": [ 16, 16, 9 ], + "faces": { + "down": { "uv": [ 16, 9, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 4 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 4 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 9, 4 ], "texture": "#texture" }, + "east": { "uv": [ 7, 0, 16, 4 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 13, 9 ], + "to": [ 16, 16, 10 ], + "faces": { + "down": { "uv": [ 16, 10, 0, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 9, 16, 10 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 3 ], "texture": "#texture" }, + "west": { "uv": [ 9, 0, 10, 3 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 7, 3 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_0_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_0_model.json new file mode 100644 index 00000000..c7ae515b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_0_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube_all", + "textures": { + "down": "galacticraftcore:blocks/deco_block_up", + "up": "galacticraftcore:blocks/deco_block", + "north": "galacticraftcore:blocks/deco_block_side", + "south": "galacticraftcore:blocks/deco_block_side", + "west": "galacticraftcore:blocks/deco_block_side", + "east": "galacticraftcore:blocks/deco_block_side", + "particle": "galacticraftcore:blocks/deco_block" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_1_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_1_model.json new file mode 100644 index 00000000..9ac10291 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deco_block_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/deco_block" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/decompressor_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/decompressor_model.json new file mode 100644 index 00000000..82c0b8c5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/decompressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/oxygen_decompressor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/oxygen_compressor_back", + "west": "galacticraftcore:blocks/machine_oxygen_output" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deconstructor_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deconstructor_model.json new file mode 100644 index 00000000..a9a79c32 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/deconstructor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/deconstructor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/detector_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/detector_model.json new file mode 100644 index 00000000..85c8821a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/detector_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/detector_side", + "east": "galacticraftcore:blocks/detector_side", + "south": "galacticraftcore:blocks/detector_side", + "west": "galacticraftcore:blocks/detector_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dishbase_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dishbase_model.json new file mode 100644 index 00000000..4777fe48 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dishbase_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/dishbase", + "down": "galacticraftcore:blocks/dishbase", + "up": "galacticraftcore:blocks/dishbase", + "north": "galacticraftcore:blocks/dishbase", + "east": "galacticraftcore:blocks/dishbase", + "south": "galacticraftcore:blocks/dishbase", + "west": "galacticraftcore:blocks/dishbase" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/distributor_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/distributor_model.json new file mode 100644 index 00000000..096c6691 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/distributor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/distributor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/distributor", + "west": "galacticraftcore:blocks/machine_oxygen_input" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dummy.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dummy.json new file mode 100644 index 00000000..84f195c4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/dummy.json @@ -0,0 +1,11 @@ +{ + "elements": [ + { + "from": [0, 0, 0], + "to": [0, 0, 0], + "faces": { + "up": { "uv": [ 0, 0, 0, 0 ], "texture": "galacticraftcore:blocks/space_station_side" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_compressor_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_compressor_model.json new file mode 100644 index 00000000..b66de28c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/electric_compressor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_furnace_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_furnace_model.json new file mode 100644 index 00000000..7003fc60 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_furnace_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/electric_furnace", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_ingot_compressor_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_ingot_compressor_model.json new file mode 100644 index 00000000..b66de28c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/electric_ingot_compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/electric_compressor", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box.json new file mode 100644 index 00000000..e0ca153f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box.json @@ -0,0 +1,118 @@ +{ + "textures": { + "0": "galacticraftcore:blocks/emergency_box", + "particle": "galacticraftcore:blocks/emergency_box" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 2.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 2.0, 0.0 ], + "to": [ 1.0, 14.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 2.0, 16.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 15.0, 2.0, 0.0 ], + "to": [ 16.0, 14.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 15.0, 2.0, 14.0 ], + "to": [ 16.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 15.0, 2.0, 16.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 2.0, 14.0 ], + "to": [ 1.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 2.0, 0.0 ], + "to": [ 2.0, 14.0, 1.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 2.0, 0.0 ], + "to": [ 15.0, 14.0, 1.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 2.0, 15.0 ], + "to": [ 15.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 2.0, 15.0 ], + "to": [ 2.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 2.0, 5.0, 1.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box_filled.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box_filled.json new file mode 100644 index 00000000..b7a77b83 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/emergency_box_filled.json @@ -0,0 +1,170 @@ +{ + "textures": { + "0": "galacticraftcore:blocks/emergency_box", + "1": "galacticraftcore:items/emergency_kit" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 2.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 14.0, 16.0, 16.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 2.0, 0.0 ], + "to": [ 1.0, 14.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 2.0, 16.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 15.0, 2.0, 0.0 ], + "to": [ 16.0, 14.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 15.0, 2.0, 14.0 ], + "to": [ 16.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 15.0, 2.0, 16.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 2.0, 14.0 ], + "to": [ 1.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 2.0, 0.0 ], + "to": [ 2.0, 14.0, 1.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 2.0, 0.0 ], + "to": [ 15.0, 14.0, 1.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 1.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 2.0, 15.0 ], + "to": [ 15.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "west": { "texture": "#0", "uv": [ 1.0, 2.0, 2.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 2.0, 15.0 ], + "to": [ 2.0, 14.0, 16.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 2.0, 15.0, 14.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 2.0, 5.0, 1.0 ] } + } + }, + { + "name": "Cube", + "from": [ 3.0, 3.0, 1.0 ], + "to": [ 13.0, 13.0, 2.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "east": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] }, + "south": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "west": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "up": { "texture": "#1", "uv": [ 3.0, 2.0, 13.0, 3.0 ] }, + "down": { "texture": "#1", "uv": [ 3.0, 13.0, 13.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 3.0, 3.0, 14.0 ], + "to": [ 13.0, 13.0, 15.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "east": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] }, + "south": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "west": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "up": { "texture": "#1", "uv": [ 3.0, 2.0, 13.0, 3.0 ] }, + "down": { "texture": "#1", "uv": [ 3.0, 13.0, 13.0, 14.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.0, 3.0, 3.0 ], + "to": [ 2.0, 13.0, 13.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "east": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "south": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] }, + "west": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "up": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "down": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] } + } + }, + { + "name": "Cube", + "from": [ 14.0, 3.0, 3.0 ], + "to": [ 15.0, 13.0, 13.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "east": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "south": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] }, + "west": { "texture": "#1", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "up": { "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "down": { "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_aluminum_wire_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_aluminum_wire_model.json new file mode 100644 index 00000000..9de99d1f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_aluminum_wire_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_aluminum_wire" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_copper_cable_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_copper_cable_model.json new file mode 100644 index 00000000..f90a0670 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_copper_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_copper_cable" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_fluid_pipe_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_fluid_pipe_model.json new file mode 100644 index 00000000..d9655757 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_fluid_pipe_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_fluid_pipe" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_glass_fibre_cable_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_glass_fibre_cable_model.json new file mode 100644 index 00000000..37a0beb8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_glass_fibre_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_glass_fibre_cable" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_gold_cable_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_gold_cable_model.json new file mode 100644 index 00000000..e151838c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_gold_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_gold_cable" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_heavy_aluminum_wire_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_heavy_aluminum_wire_model.json new file mode 100644 index 00000000..bf53c30a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_heavy_aluminum_wire_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_heavy_aluminum_wire" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_hv_cable_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_hv_cable_model.json new file mode 100644 index 00000000..c22f8bbd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_hv_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_hv_cable" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_lv_cable_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_lv_cable_model.json new file mode 100644 index 00000000..34f5314f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_lv_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_lv_cable" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_me_cable_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_me_cable_model.json new file mode 100644 index 00000000..8fa109cb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_me_cable_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_me_cable" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_cobblestone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_cobblestone_model.json new file mode 100644 index 00000000..cd55135b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_cobblestone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_fluids_cobblestone" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_stone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_stone_model.json new file mode 100644 index 00000000..576b4a0c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_fluids_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_fluids_stone" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_cobblestone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_cobblestone_model.json new file mode 100644 index 00000000..9debc09c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_cobblestone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_items_cobblestone" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_stone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_stone_model.json new file mode 100644 index 00000000..77ba3aca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_items_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_items_stone" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_gold_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_gold_model.json new file mode 100644 index 00000000..c42ef114 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_gold_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_power_gold" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_stone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_stone_model.json new file mode 100644 index 00000000..1e205c78 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_pipe_power_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_pipe_power_stone" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_te_conduit_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_te_conduit_model.json new file mode 100644 index 00000000..222f6036 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/enclosed_te_conduit_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/enclosed_te_conduit" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/energy_storage_16.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/energy_storage_16.json new file mode 100644 index 00000000..4d81e411 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/energy_storage_16.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/energy_storage_module_16", + "east": "galacticraftcore:blocks/machine_output", + "south": "galacticraftcore:blocks/energy_storage_module_16", + "west": "galacticraftcore:blocks/machine_input" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fallen_meteor_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fallen_meteor_model.json new file mode 100644 index 00000000..1f446737 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fallen_meteor_model.json @@ -0,0 +1,117 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftcore:blocks/fallen_meteor", + "texture": "galacticraftcore:blocks/fallen_meteor" +}, +"elements": [ +{ + "from": [ 3, 1, 3 ], + "to": [ 13, 11, 13 ], + "faces": { + "down": { "uv": [ 13, 13, 3, 3 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 3, 5, 13, 15 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 3, 5, 13, 15 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 3, 5, 13, 15 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 3, 5, 13, 15 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 5.5, 11, 4 ], + "to": [ 12.5, 11.5, 9.5 ], + "faces": { + "down": { "uv": [ 10.5, 9.5, 3.5, 4 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 5.5, 4, 12.5, 9.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 3.5, 4.5, 10.5, 5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 5.5, 4.5, 12.5, 5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 4, 4.5, 9.5, 5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 6.5, 4.5, 12, 5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 2.5, 4, 5.5 ], + "to": [ 3, 9.5, 11.5 ], + "faces": { + "down": { "uv": [ 13.5, 11.5, 13, 5.5 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 2.5, 5.5, 3, 11.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 13, 6.5, 13.5, 12 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 2.5, 6.5, 3, 12 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 5.5, 6.5, 11.5, 12 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 4.5, 6.5, 10.5, 12 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 5, 2.5, 2.5 ], + "to": [ 10, 7, 3 ], + "faces": { + "down": { "uv": [ 11, 3, 6, 2.5 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 5, 2.5, 10, 3 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 6, 9, 11, 13.5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 5, 9, 10, 13.5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 2.5, 9, 3, 13.5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 13, 9, 13.5, 13.5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 13, 3, 4 ], + "to": [ 13.5, 9.5, 11.5 ], + "faces": { + "down": { "uv": [ 3, 11.5, 2.5, 4 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 13, 4, 13.5, 11.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 2.5, 6.5, 3, 13 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 13, 6.5, 13.5, 13 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 4, 6.5, 11.5, 13 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 4.5, 6.5, 12, 13 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 6, 3.5, 13 ], + "to": [ 11, 9, 13.5 ], + "faces": { + "down": { "uv": [ 10, 13.5, 5, 13 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 6, 13, 11, 13.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 5, 7, 10, 12.5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 6, 7, 11, 12.5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 13, 7, 13.5, 12.5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 2.5, 7, 3, 12.5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 5, 0.5, 5 ], + "to": [ 11, 1, 11.5 ], + "faces": { + "down": { "uv": [ 11, 11.5, 5, 5 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 5, 5, 11, 11.5 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 5, 15, 11, 15.5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 5, 15, 11, 15.5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 5, 15, 11.5, 15.5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 4.5, 15, 11, 15.5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 4, 11, 9 ], + "to": [ 9.5, 11.5, 12 ], + "faces": { + "down": { "uv": [ 12, 12, 6.5, 9 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 4, 9, 9.5, 12 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 6.5, 4.5, 12, 5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 4, 4.5, 9.5, 5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 9, 4.5, 12, 5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 4, 4.5, 7, 5 ], "texture": "#texture", "tintindex": 0 } + } +}, +{ + "from": [ 6.5, 11.5, 6 ], + "to": [ 11, 12, 9 ], + "faces": { + "down": { "uv": [ 9.5, 9, 5, 6 ], "texture": "#texture", "tintindex": 0 }, + "up": { "uv": [ 6.5, 6, 11, 9 ], "texture": "#texture", "tintindex": 0 }, + "north": { "uv": [ 5, 4, 9.5, 4.5 ], "texture": "#texture", "tintindex": 0 }, + "south": { "uv": [ 6.5, 4, 11, 4.5 ], "texture": "#texture", "tintindex": 0 }, + "west": { "uv": [ 6, 4, 9, 4.5 ], "texture": "#texture", "tintindex": 0 }, + "east": { "uv": [ 7, 4, 10, 4.5 ], "texture": "#texture", "tintindex": 0 } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe.json new file mode 100644 index 00000000..bd31ecc4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" + }, + "elements": [ + { + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_d.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_d.json new file mode 100644 index 00000000..0a638e8e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_d.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_n.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_n.json new file mode 100644 index 00000000..7dd5cdf2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_n.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nd.json new file mode 100644 index 00000000..9742f4e7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nd.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ne.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ne.json new file mode 100644 index 00000000..89bc64d6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ne.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ned.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ned.json new file mode 100644 index 00000000..9c7bf462 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ned.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nes.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nes.json new file mode 100644 index 00000000..d51f49f5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nes.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesd.json new file mode 100644 index 00000000..7e5d371a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesd.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesu.json new file mode 100644 index 00000000..d9ecd48a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesu.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesud.json new file mode 100644 index 00000000..f8827fcf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesud.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesw.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesw.json new file mode 100644 index 00000000..ae179447 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nesw.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswd.json new file mode 100644 index 00000000..fb02880e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswd.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswu.json new file mode 100644 index 00000000..ced802da --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswu.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswud.json new file mode 100644 index 00000000..c1df6bd8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neswud.json @@ -0,0 +1,101 @@ +{ + "parent": "block/block", + "textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" + }, + "elements": [ + { + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } + }, + { + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } + }, + { + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } + }, + { + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } + }, + { + "__comment": "West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } + }, + { + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } + }, + { + "__comment": "Down", + "from": [ 6.5, 0.0625, 6.5 ], + "to": [ 9.5, 6.5625, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neu.json new file mode 100644 index 00000000..9e35437c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neud.json new file mode 100644 index 00000000..c7f1ac6e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_neud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ns.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ns.json new file mode 100644 index 00000000..b2f6fd3f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ns.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsd.json new file mode 100644 index 00000000..131f11c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsd.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsu.json new file mode 100644 index 00000000..2364c929 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsud.json new file mode 100644 index 00000000..b1f4d015 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nsud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 10, 10, 16 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nu.json new file mode 100644 index 00000000..c36a7fe0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nu.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nud.json new file mode 100644 index 00000000..457c7fe1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_nud.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "rotation": 90, "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_d.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_d.json new file mode 100644 index 00000000..6f6b4570 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_d.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_Down", + "from": [ 6, 0.01, 6 ], + "to": [ 10, 4, 10 ], + "faces": { + "down": { "uv": [ 16, 4, 12, 0 ], "texture": "#pull_texture" }, + "up": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_e.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_e.json new file mode 100644 index 00000000..385ec7a8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_e.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_East", + "from": [ 12, 6, 6 ], + "to": [ 15.99, 10, 10 ], + "faces": { + "down": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "up": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_n.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_n.json new file mode 100644 index 00000000..752c22d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_n.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_North", + "from": [ 6, 6, 0.01 ], + "to": [ 10, 10, 4 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "up": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_s.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_s.json new file mode 100644 index 00000000..2d70c126 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_s.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_South", + "from": [ 6, 6, 12 ], + "to": [ 10, 10, 15.99 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "up": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_u.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_u.json new file mode 100644 index 00000000..6ae9c33d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_u.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_Up", + "from": [ 6, 12, 6 ], + "to": [ 10, 15.99, 10 ], + "faces": { + "down": { "uv": [ 4, 4, 0, 0 ], "texture": "#pull_texture" }, + "up": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_w.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_w.json new file mode 100644 index 00000000..90606c15 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_pull_w.json @@ -0,0 +1,22 @@ +{ +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white", + "pull_texture": "galacticraftcore:blocks/pipe_pull" +}, +"elements": [ +{ + "__comment": "Pull_West", + "from": [ 0.01, 6, 6 ], + "to": [ 4, 10, 10 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "up": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "north": { "uv": [ 8, 0, 12, 4 ], "texture": "#pull_texture" }, + "south": { "uv": [ 4, 0, 8, 4 ], "texture": "#pull_texture" }, + "west": { "uv": [ 12, 0, 16, 4 ], "texture": "#pull_texture" }, + "east": { "uv": [ 0, 0, 4, 4 ], "texture": "#pull_texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_u.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_u.json new file mode 100644 index 00000000..1ebacc6c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_u.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ud.json new file mode 100644 index 00000000..c83acab8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fluid_pipe_ud.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftcore:blocks/pipe_oxygen_white", + "pipeTex": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 6.5, 6.5, 6.5 ], + "to": [ 9.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Up", + "from": [ 6.5, 9.5, 6.5 ], + "to": [ 9.5, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +}, +{ + "__comment": "Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipeTex" }, + "north": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "south": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "west": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" }, + "east": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipeTex" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fuel_loader_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fuel_loader_model.json new file mode 100644 index 00000000..202c12cd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/fuel_loader_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine_fuelloader", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine_fuelloader", + "west": "galacticraftcore:blocks/machine_fuel_input" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/gc_wall_inventory.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/gc_wall_inventory.json new file mode 100644 index 00000000..ecb7f803 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/gc_wall_inventory.json @@ -0,0 +1,45 @@ +{ + "parent": "block/block", + "ambientocclusion": false, + "display": { + "gui": { + "rotation": [ 30, 135, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "fixed": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + }, + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 4, 0, 4 ], + "to": [ 12, 16, 12 ], + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall_bot", "cullface": "down" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#wall_top" }, + "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, + "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, + "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" }, + "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#wall" } + }, + "__comment": "Center post" + }, + { "from": [ 5, 0, 0 ], + "to": [ 11, 13, 16 ], + "faces": { + "down": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall_bot", "cullface": "down" }, + "up": { "uv": [ 5, 0, 11, 16 ], "texture": "#wall_top" }, + "north": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "north" }, + "south": { "uv": [ 5, 3, 11, 16 ], "texture": "#wall", "cullface": "south" }, + "west": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" }, + "east": { "uv": [ 0, 3, 16, 16 ], "texture": "#wall" } + }, + "__comment": "Full wall" + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s1.json new file mode 100644 index 00000000..6e9aa9a3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s1.json @@ -0,0 +1,64 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 14.0, 16.0 ], "rotation": 180 }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 4.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 0.0, 8.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 4.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ], "rotation": 180 }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 10.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 14.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 0.0, 13.0, 7.0 ], "rotation": 270 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 0.0, 14.0, 7.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 6.0, 16.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 8.0, 0.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 10.0, 4.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 10.0, 8.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 12.0, 3.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 9.0, 15.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 6.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 8.0, 13.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 9.0, 4.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 4.0, 12.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 12.0, 0.0, 2.0 ], + "to": [ 14.0, 3.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 4.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 12.0, 4.0, 15.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 4.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 4.0, 6.0, 6.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s2.json new file mode 100644 index 00000000..fd015b0b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ne_s2.json @@ -0,0 +1,122 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 14.0, 16.0 ], "rotation": 180 }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 4.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 0.0, 8.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 4.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ], "rotation": 180 }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 10.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 14.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 0.0, 13.0, 7.0 ], "rotation": 270 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 0.0, 14.0, 7.0 ] } + } + }, + { + "name": "base2", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 6.0, 16.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 8.0, 0.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 10.0, 4.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 10.0, 8.0 ] } + } + }, + { + "name": "grout2", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 12.0, 3.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 9.0, 15.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 6.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 8.0, 13.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 9.0, 4.0 ] } + } + }, + { + "name": "infill", + "from": [ 12.0, 0.0, 2.0 ], + "to": [ 14.0, 3.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 4.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 4.0, 16.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 4.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 4.0, 6.0, 6.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 4.0 ], + "to": [ 16.0, 16.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 14.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 4.0, 2.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 16.0, 0.0, 14.0, 8.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 14.0, 12.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 4.0 ], + "to": [ 16.0, 14.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 10.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 3.0, 13.0, 14.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 7.0, 0.0, 8.0, 7.0 ], "rotation": 270 }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 13.0, 7.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 10.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 6.0, 16.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 16.0, 8.0, 14.0, 12.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 10.0, 4.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 4.0, 10.0, 8.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 12.0, 14.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 14.0, 9.0, 15.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 6.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 7.0, 8.0, 8.0, 12.0 ], "rotation": 270 }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 7.0, 9.0, 11.0 ] } + } + }, + { + "name": "Cube", + "from": [ 12.0, 13.0, 2.0 ], + "to": [ 14.0, 16.0, 4.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 4.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 5.0, 4.0, 8.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 4.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 4.0, 6.0, 6.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1.json new file mode 100644 index 00000000..2c4d8574 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1.json @@ -0,0 +1,27 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1b.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1b.json new file mode 100644 index 00000000..03d3b466 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1b.json @@ -0,0 +1,52 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 14.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 13.0 ], + "to": [ 11.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] } + } + } + + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1bb.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1bb.json new file mode 100644 index 00000000..3eafdbf0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s1bb.json @@ -0,0 +1,78 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 14.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 13.0 ], + "to": [ 11.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 11.0, 16.0, 3.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] } + } + } + + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2.json new file mode 100644 index 00000000..fe2ea185 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2.json @@ -0,0 +1,51 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 2.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 16.0 ] } + } + }, + { + "name": "base1", + "from": [ 4.0, 2.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 16.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "grout1", + "from": [ 5.0, 3.0, 2.0 ], + "to": [ 11.0, 16.0, 3.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 13.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 3.0, 13.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2a.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2a.json new file mode 100644 index 00000000..35bb65c8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2a.json @@ -0,0 +1,52 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout2", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 11.0, 14.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2b.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2b.json new file mode 100644 index 00000000..2df5f706 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s2b.json @@ -0,0 +1,73 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 2.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 16.0 ] } + } + }, + { + "name": "base1", + "from": [ 4.0, 2.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ] } + } + }, + { + "name": "grout1", + "from": [ 5.0, 3.0, 2.0 ], + "to": [ 11.0, 16.0, 3.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 13.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 0.0, 3.0, 13.0 ] } + } + }, + { + "name": "Cube", + "from": [ 4.0, 14.0, 14.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.0, 13.0, 13.0 ], + "to": [ 11.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 3.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s3.json new file mode 100644 index 00000000..81609109 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s3.json @@ -0,0 +1,73 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 2.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 16.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 16.0 ] } + } + }, + { + "name": "base1", + "from": [ 4.0, 2.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "grout1", + "from": [ 5.0, 3.0, 2.0 ], + "to": [ 11.0, 14.0, 3.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 13.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 2.0, 3.0, 13.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 2.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 2.0, 2.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] } + } + }, + { + "name": "grout2", + "from": [ 5.0, 13.0, 3.0 ], + "to": [ 11.0, 14.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 14.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 13.0, 11.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 13.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s4.json new file mode 100644 index 00000000..825fc6ac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_ns_s4.json @@ -0,0 +1,92 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "base1", + "from": [ 4.0, 2.0, 0.0 ], + "to": [ 12.0, 16.0, 2.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] } + } + }, + { + "name": "grout1", + "from": [ 5.0, 3.0, 2.0 ], + "to": [ 11.0, 14.0, 3.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 2.0, 14.0, 13.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 2.0, 3.0, 13.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 2.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 14.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 2.0, 2.0, 16.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 14.0 ] } + } + }, + { + "name": "grout2", + "from": [ 5.0, 13.0, 3.0 ], + "to": [ 11.0, 14.0, 14.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 13.0, 13.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 11.0 ] } + } + }, + { + "name": "grout3", + "from": [ 5.0, 3.0, 13.0 ], + "to": [ 11.0, 13.0, 14.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 3.0, 11.0, 13.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 3.0, 14.0, 13.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 2.0, 3.0, 3.0, 13.0 ] } + } + }, + { + "name": "side2", + "from": [ 4.0, 2.0, 14.0 ], + "to": [ 12.0, 14.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 14.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 2.0, 2.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 2.0, 12.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 2.0, 16.0, 14.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s1.json new file mode 100644 index 00000000..816d33c4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s1.json @@ -0,0 +1,46 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "base2", + "from": [ 12.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "grout2", + "from": [ 11.0, 2.0, 5.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s2.json new file mode 100644 index 00000000..1f2d4da8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nse_s2.json @@ -0,0 +1,99 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 2.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "base2", + "from": [ 12.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "grout2", + "from": [ 11.0, 2.0, 5.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 14.0, 12.0, 16.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grouttop", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 11.0, 14.0, 16.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "top", + "from": [ 12.0, 14.0, 4.0 ], + "to": [ 16.0, 16.0, 12.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 14.0, 4.0, 16.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 14.0, 4.0, 16.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 4.0, 4.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 4.0, 4.0, 12.0 ] } + } + }, + { + "name": "grouttop", + "from": [ 11.0, 13.0, 5.0 ], + "to": [ 16.0, 14.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + } + + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s1.json new file mode 100644 index 00000000..c93ffcbc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s1.json @@ -0,0 +1,68 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "base2", + "from": [ 12.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout2", + "from": [ 11.0, 2.0, 5.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + }, + { + "name": "base3", + "from": [ 0.0, 0.0, 4.0 ], + "to": [ 4.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout3", + "from": [ 0.0, 2.0, 5.0 ], + "to": [ 5.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + } + + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s2.json new file mode 100644 index 00000000..9b6d4fd6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/base_nsew_s2.json @@ -0,0 +1,130 @@ +{ + "elements": [ + { + "name": "base", + "from": [ 4.0, 0.0, 0.0 ], + "to": [ 12.0, 2.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grout", + "from": [ 5.0, 2.0, 0.0 ], + "to": [ 11.0, 3.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 13.0, 0.0, 14.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "base2", + "from": [ 12.0, 0.0, 4.0 ], + "to": [ 16.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout2", + "from": [ 11.0, 2.0, 5.0 ], + "to": [ 16.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + }, + { + "name": "base3", + "from": [ 0.0, 0.0, 4.0 ], + "to": [ 4.0, 2.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 0.0, 16.0, 4.0 ], "rotation": 90 }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 14.0, 12.0, 16.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 12.0, 4.0, 16.0, 12.0 ] } + } + }, + { + "name": "grout3", + "from": [ 0.0, 2.0, 5.0 ], + "to": [ 5.0, 3.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 5.0, 14.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 13.0, 16.0, 14.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 11.0, 5.0, 16.0, 11.0 ] } + } + }, + { + "name": "top", + "from": [ 4.0, 14.0, 0.0 ], + "to": [ 12.0, 16.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 16.0 ], "rotation": 90 }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grouttop", + "from": [ 5.0, 13.0, 0.0 ], + "to": [ 11.0, 14.0, 16.0 ], + "faces": { + "east": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "west": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 13.0, 16.0, 14.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "topbar", + "from": [ 12.0, 14.0, 4.0 ], + "to": [ 16.0, 16.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grouttopbar", + "from": [ 11.0, 13.0, 5.0 ], + "to": [ 16.0, 14.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + }, + { + "name": "topbar2", + "from": [ 0.0, 14.0, 4.0 ], + "to": [ 4.0, 16.0, 12.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 0.0, 0.0, 4.0, 2.0 ] }, + "up": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 4.0, 0.0, 12.0, 16.0 ] } + } + }, + { + "name": "grouttopbar2", + "from": [ 0.0, 13.0, 5.0 ], + "to": [ 5.0, 14.0, 11.0 ], + "faces": { + "north": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "south": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 2.0, 11.0, 3.0 ] }, + "down": { "tintindex": 0, "texture": "#1", "uv": [ 5.0, 0.0, 11.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne.json new file mode 100644 index 00000000..6cd02a43 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne.json @@ -0,0 +1,48 @@ +{ + "elements": [ + { + "name": "1b", + "from": [ 12.9497, 0.0, 1.6360 ], + "to": [ 12.9497, 16.0, 14.3640 ], + "shade": false, + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, + "up": { "texture": "#-1", "uv": [ 7.0, 0.0, 9.0, 9.0 ] } + } + }, + { + "name": "1a", + "from": [ 12.2426, 0.0, 0.9289 ], + "to": [ 12.2426, 16.0, 15.0711 ], + "shade": false, + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.0 ] }, + "up": { "texture": "#-1", "uv": [ 7.0, 0.0, 9.0, 9.0 ] } + } + }, + { + "name": "2b", + "from": [ 15.0711, 0.0, 3.7574 ], + "to": [ 15.0711, 16.0, 12.2426 ], + "shade": false, + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 4.0, 1.0, 12.0, 15.0 ] }, + "up": { "texture": "#-1", "uv": [ 7.0, 0.0, 9.0, 9.0 ] } + } + }, + { + "name": "2a", + "from": [ 14.3640, 0.0, 3.0503 ], + "to": [ 14.3640, 16.0, 12.9497 ], + "shade": false, + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 13.0, 1.0, 5.0, 15.0 ] }, + "up": { "texture": "#-1", "uv": [ 7.0, 0.0, 9.0, 9.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s1.json new file mode 100644 index 00000000..17164f69 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s1.json @@ -0,0 +1,40 @@ +{ + "elements": [ + { + "name": "1b", + "from": [ 12.9497, 3.0, 1.636 ], + "to": [ 12.9497, 16.0, 14.364 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 16.0 ] } + } + }, + { + "name": "1a", + "from": [ 12.2426, 3.0, 0.9289 ], + "to": [ 12.2426, 16.0, 15.0711 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 16.0 ] } + } + }, + { + "name": "2b", + "from": [ 15.0711, 3.0, 3.7574 ], + "to": [ 15.0711, 16.0, 12.2426 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 4.0, 1.0, 12.0, 16.0 ] } + } + }, + { + "name": "2a", + "from": [ 14.364, 3.0, 3.0503 ], + "to": [ 14.364, 16.0, 12.9497 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 13.0, 1.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s2.json new file mode 100644 index 00000000..17164f69 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ne_s2.json @@ -0,0 +1,40 @@ +{ + "elements": [ + { + "name": "1b", + "from": [ 12.9497, 3.0, 1.636 ], + "to": [ 12.9497, 16.0, 14.364 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 16.0 ] } + } + }, + { + "name": "1a", + "from": [ 12.2426, 3.0, 0.9289 ], + "to": [ 12.2426, 16.0, 15.0711 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 16.0 ] } + } + }, + { + "name": "2b", + "from": [ 15.0711, 3.0, 3.7574 ], + "to": [ 15.0711, 16.0, 12.2426 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "east": { "texture": "#0", "uv": [ 4.0, 1.0, 12.0, 16.0 ] } + } + }, + { + "name": "2a", + "from": [ 14.364, 3.0, 3.0503 ], + "to": [ 14.364, 16.0, 12.9497 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "west": { "texture": "#0", "uv": [ 13.0, 1.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns.json new file mode 100644 index 00000000..e58cc39f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "Element", + "from": [ 6.0, 0.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Cube", + "from": [ 9.0, 0.0, 0.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1.json new file mode 100644 index 00000000..a48198f0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 1.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1b.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1b.json new file mode 100644 index 00000000..2c86d5fc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1b.json @@ -0,0 +1,64 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.8825 ] } + } + }, + { + "name": "pane1a", + "from": [ 6.0, 13.0, 0.0 ], + "to": [ 7.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 15.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane1b", + "from": [ 6.0, 3.0, 12.375 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.8825 ] } + } + }, + { + "name": "pane2a", + "from": [ 9.0, 13.0, 0.0 ], + "to": [ 10.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 15.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane2b", + "from": [ 9.0, 3.0, 12.375 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1bb.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1bb.json new file mode 100644 index 00000000..ced60258 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s1bb.json @@ -0,0 +1,64 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.8825 ] } + } + }, + { + "name": "pane1a", + "from": [ 6.0, 13.0, 0.0 ], + "to": [ 7.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 16.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 4.0, 1.0, 9.0 ] } + } + }, + { + "name": "pane1b", + "from": [ 6.0, 3.0, 12.375 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 16.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.8825 ] } + } + }, + { + "name": "pane2a", + "from": [ 9.0, 13.0, 0.0 ], + "to": [ 10.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 16.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane2b", + "from": [ 9.0, 3.0, 12.375 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2.json new file mode 100644 index 00000000..3e721746 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 3.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 3.0, 3.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 3.0, 3.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 3.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 3.0, 3.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 3.0, 3.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2a.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2a.json new file mode 100644 index 00000000..6d9067ba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2a.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 1.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2b.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2b.json new file mode 100644 index 00000000..c8d1f19c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s2b.json @@ -0,0 +1,64 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 3.0 ], + "to": [ 7.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 2.0, 1.0, 15.8825, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.8825, 1.0, 2.0, 15.8825 ] } + } + }, + { + "name": "pane1a", + "from": [ 6.0, 13.0, 3.0 ], + "to": [ 7.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 16.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane1b", + "from": [ 6.0, 3.0, 12.375 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 3.0 ], + "to": [ 10.0, 13.0, 12.375 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 2.0, 1.0, 15.8825, 15.8825 ] }, + "west": { "texture": "#0", "uv": [ 15.8825, 1.0, 2.0, 15.8825 ] } + } + }, + { + "name": "pane2a", + "from": [ 9.0, 13.0, 3.0 ], + "to": [ 10.0, 16.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 4.0, 16.0, 9.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 4.0, 0.0, 9.0 ] } + } + }, + { + "name": "pane2b", + "from": [ 9.0, 3.0, 12.375 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 5.0, 0.0, 11.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 11.0, 0.0, 5.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s3.json new file mode 100644 index 00000000..99235d31 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s3.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 3.0 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.7071, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.7071, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 3.0 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.7071, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.7071, 0.0, 1.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s4.json new file mode 100644 index 00000000..10415b2f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_ns_s4.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { + "name": "pane1", + "from": [ 6.0, 3.0, 3.0 ], + "to": [ 7.0, 13.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 0.0, 0.0, 16.0 ] } + } + }, + { + "name": "pane2", + "from": [ 9.0, 3.0, 3.0 ], + "to": [ 10.0, 13.0, 13.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 0.0, 0.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse.json new file mode 100644 index 00000000..46a03f5c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse.json @@ -0,0 +1,74 @@ +{ + "elements": [ + { + "name": "Element", + "from": [ 6.0, 0.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 0.0, 10.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Cube", + "from": [ 9.0, 0.0, 0.0 ], + "to": [ 10.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 0.0, 6.0 ], + "to": [ 16.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 0.0, 9.0 ], + "to": [ 16.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 0.0, 9.0 ], + "to": [ 10.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 1.0, 9.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 7.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 0.0, 6.0 ], + "to": [ 10.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s1.json new file mode 100644 index 00000000..1387bdb7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s1.json @@ -0,0 +1,74 @@ +{ + "elements": [ + { + "name": "Element", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 3.0, 10.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 3.0, 6.0 ], + "to": [ 16.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 3.0, 9.0 ], + "to": [ 16.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 9.0 ], + "to": [ 10.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 4.0, 9.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 6.0 ], + "to": [ 10.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s2.json new file mode 100644 index 00000000..5b58d7d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nse_s2.json @@ -0,0 +1,74 @@ +{ + "elements": [ + { + "name": "Element", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 3.0, 10.0 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branch", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 13.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 3.0, 6.0 ], + "to": [ 16.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 3.0, 9.0 ], + "to": [ 16.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 9.0 ], + "to": [ 10.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 0.0, 9.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 6.0 ], + "to": [ 10.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew.json new file mode 100644 index 00000000..956ab53f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew.json @@ -0,0 +1,124 @@ +{ + "elements": [ + { + "name": "Branch", + "from": [ 9.0, 0.0, 10.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Branchb", + "from": [ 9.0, 0.0, 0.0 ], + "to": [ 10.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 0.0, 6.0 ], + "to": [ 16.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 0.0, 9.0 ], + "to": [ 16.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 0.0, 9.0 ], + "to": [ 10.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 1.0, 9.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 7.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 0.0, 6.0 ], + "to": [ 10.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] } + } + }, + { + "name": "Stalkc", + "from": [ 0.0, 0.0, 6.0 ], + "to": [ 6.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] } + } + }, + { + "name": "Stalkd", + "from": [ 0.0, 0.0, 9.0 ], + "to": [ 6.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] } + } + }, + { + "name": "Branchd", + "from": [ 6.0, 0.0, 10.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 1.0, 6.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 1.0, 1.0, 15.0 ] } + } + }, + { + "name": "Branchc", + "from": [ 6.0, 0.0, 0.0 ], + "to": [ 7.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 1.0, 15.0, 15.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 1.0, 10.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 0.0, 6.0 ], + "to": [ 7.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 9.0, 1.0, 10.0, 15.0 ] }, + "south": { "texture": "#0", "uv": [ 6.0, 1.0, 7.0, 15.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 0.0, 9.0 ], + "to": [ 7.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 7.0, 1.0, 6.0, 15.0 ] }, + "east": { "texture": "#0", "uv": [ 6.0, 1.0, 7.0, 15.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s1.json new file mode 100644 index 00000000..28269813 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s1.json @@ -0,0 +1,124 @@ +{ + "elements": [ + { + "name": "Branch", + "from": [ 9.0, 3.0, 10.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branchb", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 3.0, 6.0 ], + "to": [ 16.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 3.0, 9.0 ], + "to": [ 16.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 9.0 ], + "to": [ 10.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 4.0, 9.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 6.0 ], + "to": [ 10.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkc", + "from": [ 0.0, 3.0, 6.0 ], + "to": [ 6.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] } + } + }, + { + "name": "Stalkd", + "from": [ 0.0, 3.0, 9.0 ], + "to": [ 6.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] } + } + }, + { + "name": "Branchd", + "from": [ 6.0, 3.0, 10.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 4.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 4.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branchc", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 16.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 4.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 4.0, 10.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 3.0, 6.0 ], + "to": [ 7.0, 16.0, 7.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 9.0, 4.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 6.0, 4.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 3.0, 9.0 ], + "to": [ 7.0, 16.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 7.0, 4.0, 6.0, 16.0 ] }, + "east": { "texture": "#0", "uv": [ 6.0, 4.0, 7.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s2.json new file mode 100644 index 00000000..2537f765 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/glass_nsew_s2.json @@ -0,0 +1,124 @@ +{ + "elements": [ + { + "name": "Branch", + "from": [ 9.0, 3.0, 10.0 ], + "to": [ 10.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branchb", + "from": [ 9.0, 3.0, 0.0 ], + "to": [ 10.0, 13.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkb", + "from": [ 10.0, 3.0, 6.0 ], + "to": [ 16.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] } + } + }, + { + "name": "Stalka", + "from": [ 10.0, 3.0, 9.0 ], + "to": [ 16.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 9.0 ], + "to": [ 10.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 10.0, 0.0, 9.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 9.0, 3.0, 6.0 ], + "to": [ 10.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "south": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] } + } + }, + { + "name": "Stalkc", + "from": [ 0.0, 3.0, 6.0 ], + "to": [ 6.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] } + } + }, + { + "name": "Stalkd", + "from": [ 0.0, 3.0, 9.0 ], + "to": [ 6.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] } + } + }, + { + "name": "Branchd", + "from": [ 6.0, 3.0, 10.0 ], + "to": [ 7.0, 13.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 1.0, 0.0, 6.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 6.0, 0.0, 1.0, 16.0 ] } + } + }, + { + "name": "Branchc", + "from": [ 6.0, 3.0, 0.0 ], + "to": [ 7.0, 13.0, 6.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 10.0, 0.0, 15.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 15.0, 0.0, 10.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 3.0, 6.0 ], + "to": [ 7.0, 13.0, 7.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 9.0, 0.0, 10.0, 16.0 ] }, + "south": { "texture": "#0", "uv": [ 6.0, 0.0, 7.0, 16.0 ] } + } + }, + { + "name": "Pillar", + "from": [ 6.0, 3.0, 9.0 ], + "to": [ 7.0, 13.0, 10.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 7.0, 0.0, 6.0, 16.0 ] }, + "east": { "texture": "#0", "uv": [ 6.0, 0.0, 7.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/spaceglass_ns_inventory.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/spaceglass_ns_inventory.json new file mode 100644 index 00000000..6d24976f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glass/spaceglass_ns_inventory.json @@ -0,0 +1,25 @@ +{ + "parent": "block/block", + "elements": [ + { + "name": "Element", + "from": [ 6.0, 0.0, 0.0 ], + "to": [ 7.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 0.0, 0.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 9.0, 0.0, 0.0 ], + "to": [ 10.0, 16.0, 16.0 ], + "shade": false, + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#0", "uv": [ 16.0, 0.0, 0.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_model.json new file mode 100644 index 00000000..c485d43b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/glowstone_torch", + "gstorch": "galacticraftcore:blocks/glowstone_torch" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#gstorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#gstorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_wall_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_wall_model.json new file mode 100644 index 00000000..4c52fcd8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/glowstone_torch_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/glowstone_torch", + "gstorch": "galacticraftcore:blocks/glowstone_torch" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#gstorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#gstorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#gstorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/grating.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/grating.json new file mode 100644 index 00000000..91203849 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/grating.json @@ -0,0 +1,354 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/screen_side", + "0": "galacticraftcore:blocks/screen_side" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 14.0, 1.5 ], + "to": [ 16.0, 15.99, 2.5 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 1.0, 16.0, 3.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 13.0, 16.0, 15.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 5.5 ], + "to": [ 16.0, 15.99, 6.5 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 5.0, 16.0, 7.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 9.0, 16.0, 11.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 9.5 ], + "to": [ 16.0, 15.99, 10.5 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 9.0, 16.0, 11.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 5.0, 16.0, 7.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 13.5 ], + "to": [ 16.0, 15.99, 14.5 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 0.0, 13.0, 16.0, 15.0 ] }, + "down": { "texture": "#0", "uv": [ 0.0, 1.0, 16.0, 3.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 0.0 ], + "to": [ 2.5, 15.99, 1.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 1.5 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 1.5 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 2.5 ], + "to": [ 2.5, 15.99, 5.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 2.5, 2.5, 5.5 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 2.5, 14.5, 5.5 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 6.5 ], + "to": [ 2.5, 15.99, 9.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 6.5, 2.5, 9.5 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 6.5, 14.5, 9.5 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 10.5 ], + "to": [ 2.5, 15.99, 13.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 10.5, 2.5, 13.5 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 10.5, 14.5, 13.5 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 14.5 ], + "to": [ 2.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 14.5, 2.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 14.5, 14.5, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 1.5, 14.0, 14.5 ], + "to": [ 2.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 1.5, 14.5, 2.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 13.5, 14.5, 14.5, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 0.0 ], + "to": [ 6.5, 15.99, 1.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 1.5 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 1.5 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 2.5 ], + "to": [ 6.5, 15.99, 5.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 2.5, 6.5, 5.5 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 2.5, 10.5, 5.5 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 6.5 ], + "to": [ 6.5, 15.99, 9.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 6.5, 6.5, 9.5 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 6.5, 10.5, 9.5 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 10.5 ], + "to": [ 6.5, 15.99, 13.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 10.5, 6.5, 13.5 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 10.5, 10.5, 13.5 ] } + } + }, + { + "name": "Cube", + "from": [ 5.5, 14.0, 14.5 ], + "to": [ 6.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 5.5, 14.5, 6.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 9.5, 14.5, 10.5, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 0.0 ], + "to": [ 10.5, 15.99, 1.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 1.5 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 0.0, 6.5, 1.5 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 2.5 ], + "to": [ 10.5, 15.99, 5.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 2.5, 10.5, 5.5 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 2.5, 6.5, 5.5 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 6.5 ], + "to": [ 10.5, 15.99, 9.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 6.5, 10.5, 9.5 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 6.5, 6.5, 9.5 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 10.5 ], + "to": [ 10.5, 15.99, 13.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 10.5, 10.5, 13.5 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 10.5, 6.5, 13.5 ] } + } + }, + { + "name": "Cube", + "from": [ 9.5, 14.0, 14.5 ], + "to": [ 10.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 9.5, 0.0, 10.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 9.5, 14.5, 10.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 5.5, 14.5, 6.5, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 0.0 ], + "to": [ 14.5, 15.99, 1.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 1.5 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 1.5 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 2.5 ], + "to": [ 14.5, 15.99, 5.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 2.5, 14.5, 5.5 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 2.5, 2.5, 5.5 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 6.5 ], + "to": [ 14.5, 15.99, 9.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 6.5, 0.0, 9.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 6.5, 14.5, 9.5 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 6.5, 2.5, 9.5 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 10.5 ], + "to": [ 14.5, 15.99, 13.5 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 2.5, 0.0, 5.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 1.5, 0.0, 2.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 10.5, 0.0, 13.5, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 10.5, 14.5, 13.5 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 10.5, 2.5, 13.5 ] } + } + }, + { + "name": "Cube", + "from": [ 13.5, 14.0, 14.5 ], + "to": [ 14.5, 15.99, 16.0 ], + "shade": false, + "faces": { + "north": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.5, 2.0 ] }, + "south": { "texture": "#0", "uv": [ 13.5, 0.0, 14.5, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 14.5, 0.0, 16.0, 2.0 ] }, + "up": { "texture": "#0", "uv": [ 13.5, 14.5, 14.5, 16.0 ] }, + "down": { "texture": "#0", "uv": [ 1.5, 14.5, 2.5, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_asteroid.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_asteroid.json new file mode 100644 index 00000000..6faa3112 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_asteroid.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/screen_side", + "top": "galacticraftcore:blocks/screen_side", + "side": "galacticraftcore:blocks/screen_side" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_cobblestone.json new file mode 100644 index 00000000..13eb8b3b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_cobblestone.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_dungeon_brick.json new file mode 100644 index 00000000..9799e477 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_mars_dungeon_brick.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_dungeon_brick.json new file mode 100644 index 00000000..c2470363 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_dungeon_brick.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_stone.json new file mode 100644 index 00000000..7b4c6058 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_moon_stone.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_1.json new file mode 100644 index 00000000..9ee78163 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_1.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_2.json new file mode 100644 index 00000000..b0213cb0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/half_slab_tin_2.json @@ -0,0 +1,8 @@ +{ + "parent": "block/half_slab", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire.json new file mode 100644 index 00000000..b4374a71 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire.json @@ -0,0 +1,22 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_d.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_d.json new file mode 100644 index 00000000..a6f874aa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_d.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_n.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_n.json new file mode 100644 index 00000000..502d7aad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_n.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nd.json new file mode 100644 index 00000000..96d602cd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nd.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ne.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ne.json new file mode 100644 index 00000000..eaadb0e4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ne.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ned.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ned.json new file mode 100644 index 00000000..1fec0a0c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ned.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nes.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nes.json new file mode 100644 index 00000000..d4c8962d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nes.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesd.json new file mode 100644 index 00000000..2ebae83b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesd.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesu.json new file mode 100644 index 00000000..4feafd36 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesu.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesud.json new file mode 100644 index 00000000..5baf4099 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesud.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesw.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesw.json new file mode 100644 index 00000000..791e358b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nesw.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 5.6, 5.6 ], + "to": [ 5.6, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswd.json new file mode 100644 index 00000000..d67a8f2f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswd.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 5.6, 5.6 ], + "to": [ 5.6, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswu.json new file mode 100644 index 00000000..f9e29ba0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswu.json @@ -0,0 +1,87 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 5.6, 5.6 ], + "to": [ 5.6, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswud.json new file mode 100644 index 00000000..a2ac26ad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neswud.json @@ -0,0 +1,100 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "West", + "from": [ 0, 5.6, 5.6 ], + "to": [ 5.6, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neu.json new file mode 100644 index 00000000..d6aa59e5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neud.json new file mode 100644 index 00000000..8ac0c3db --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_neud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "East", + "from": [ 10.4, 5.6, 5.6 ], + "to": [ 16, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ns.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ns.json new file mode 100644 index 00000000..a0922d1c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ns.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsd.json new file mode 100644 index 00000000..75160574 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsd.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsu.json new file mode 100644 index 00000000..0b5df7ef --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsu.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsud.json new file mode 100644 index 00000000..52dd7407 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nsud.json @@ -0,0 +1,74 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "South", + "from": [ 5.6, 5.6, 10.4 ], + "to": [ 10.4, 10.4, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nu.json new file mode 100644 index 00000000..9fb7c1e3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nu.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nud.json new file mode 100644 index 00000000..53cbdac5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_nud.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "North", + "from": [ 5.6, 5.6, 0 ], + "to": [ 10.4, 10.4, 5.6 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_u.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_u.json new file mode 100644 index 00000000..3775862b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_u.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ud.json new file mode 100644 index 00000000..b695d4b7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/hvy_alu_wire_ud.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by - with BDcraft Cubik PRO 0.93 Beta - http://bdcraft.net", +"textures": { + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire", + "particle": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Middle", + "from": [ 5.6, 5.6, 5.6 ], + "to": [ 10.4, 10.4, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Up", + "from": [ 5.6, 10.4, 5.6 ], + "to": [ 10.4, 16, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Down", + "from": [ 5.6, 0, 5.6 ], + "to": [ 10.4, 5.6, 10.4 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0.0, 2.92, 3.5 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ingot_compressor_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ingot_compressor_model.json new file mode 100644 index 00000000..74921f58 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ingot_compressor_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/compressor", + "east": "galacticraftcore:blocks/machine_side", + "south": "galacticraftcore:blocks/machine_side", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_full_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_full_model.json new file mode 100644 index 00000000..c5b0647b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_full_model.json @@ -0,0 +1,24 @@ +{ + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 4, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/landing_pad", + "down": "galacticraftcore:blocks/landing_pad", + "up": "galacticraftcore:blocks/landing_pad", + "north": "galacticraftcore:blocks/landing_pad", + "east": "galacticraftcore:blocks/landing_pad", + "south": "galacticraftcore:blocks/landing_pad", + "west": "galacticraftcore:blocks/landing_pad" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_model.json new file mode 100644 index 00000000..c90f05ec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/landing_pad_model.json @@ -0,0 +1,25 @@ +{ + "parent": "block/thin_block", + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 3, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/landing_pad", + "down": "galacticraftcore:blocks/landing_pad", + "up": "galacticraftcore:blocks/landing_pad", + "north": "galacticraftcore:blocks/landing_pad", + "east": "galacticraftcore:blocks/landing_pad", + "south": "galacticraftcore:blocks/landing_pad", + "west": "galacticraftcore:blocks/landing_pad" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_bl.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_bl.json new file mode 100644 index 00000000..0aa3c46b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_bl.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#side", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_br.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_br.json new file mode 100644 index 00000000..81c0e450 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_br.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#side", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lb.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lb.json new file mode 100644 index 00000000..12412b5b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lb.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#side", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lr.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lr.json new file mode 100644 index 00000000..884b884f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_lr.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#rear", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rb.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rb.json new file mode 100644 index 00000000..a48a6452 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rb.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#side", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rl.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rl.json new file mode 100644 index 00000000..9d4faf95 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/machine_tiered_rl.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 0.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "#front", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "east": { "texture": "#el_out", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "south": { "texture": "#rear", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "west": { "texture": "#el_in", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "up": { "texture": "#top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "#base", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/magnetic_table_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/magnetic_table_model.json new file mode 100644 index 00000000..c46c02f9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/magnetic_table_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/crafting_table_top", + "down": "galacticraftcore:blocks/crafting_table_base", + "up": "galacticraftcore:blocks/crafting_table_top", + "north": "galacticraftcore:blocks/crafting_table_side", + "east": "galacticraftcore:blocks/crafting_table_side", + "south": "galacticraftcore:blocks/crafting_table_side", + "west": "galacticraftcore:blocks/crafting_table_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_cobblestone_wall_inventory.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_cobblestone_wall_inventory.json new file mode 100644 index 00000000..8f56cf50 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_cobblestone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_dungeon_brick_wall_inventory.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_dungeon_brick_wall_inventory.json new file mode 100644 index 00000000..58484197 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/mars_dungeon_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_inner_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_inner_stairs.json new file mode 100644 index 00000000..ecc3f86b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_outer_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_outer_stairs.json new file mode 100644 index 00000000..b0bb6ef2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_stairs.json new file mode 100644 index 00000000..5bce98c4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dirt_moon_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dirt_moon_model.json new file mode 100644 index 00000000..82da5942 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dirt_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/middle" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_model.json new file mode 100644 index 00000000..fbf221c1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/brick" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_wall_inventory.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_wall_inventory.json new file mode 100644 index 00000000..44627838 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_dungeon_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_inner_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_inner_stairs.json new file mode 100644 index 00000000..06fdf743 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_model.json new file mode 100644 index 00000000..791875e4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/bottom" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_outer_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_outer_stairs.json new file mode 100644 index 00000000..def9dc0b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_stairs.json new file mode 100644 index 00000000..d2b77efb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_wall_inventory.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_wall_inventory.json new file mode 100644 index 00000000..8e95de60 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_stone_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_turf_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_turf_model.json new file mode 100644 index 00000000..0bac4e51 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/moon_turf_model.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "up", "tintindex": 0 }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftcore:blocks/top", + "bottom": "galacticraftcore:blocks/middle", + "top": "galacticraftcore:blocks/top", + "side": "galacticraftcore:blocks/top_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_aluminum_gc_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_aluminum_gc_model.json new file mode 100644 index 00000000..eb12f4ae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_aluminum_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_aluminum" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_cheese_moon_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_cheese_moon_model.json new file mode 100644 index 00000000..bfb2d044 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_cheese_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/moonore_cheese" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_gc_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_gc_model.json new file mode 100644 index 00000000..f9c36759 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_copper" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_moon_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_moon_model.json new file mode 100644 index 00000000..8d974fad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_copper_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_copper_moon" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_sapphire_moon_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_sapphire_moon_model.json new file mode 100644 index 00000000..33666b8f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_sapphire_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/moonore_sapphire" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_silicon_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_silicon_model.json new file mode 100644 index 00000000..8e2fcb2e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_silicon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_silicon" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_gc_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_gc_model.json new file mode 100644 index 00000000..aa2a05bd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_gc_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_tin" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_moon_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_moon_model.json new file mode 100644 index 00000000..e3886d1c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/ore_tin_moon_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/ore_tin_moon" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/oxygen_storage_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/oxygen_storage_model.json new file mode 100644 index 00000000..956fdb51 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/oxygen_storage_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/oxygen_storage_module_full", + "east": "galacticraftcore:blocks/machine_oxygen_input", + "south": "galacticraftcore:blocks/oxygen_storage_module_full", + "west": "galacticraftcore:blocks/machine_oxygen_output" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/painter_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/painter_model.json new file mode 100644 index 00000000..aacd94c5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/painter_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine_painter", + "up": "galacticraftcore:blocks/machine_painter", + "north": "galacticraftcore:blocks/machine_painter", + "east": "galacticraftcore:blocks/machine", + "south": "galacticraftcore:blocks/machine_painter", + "west": "galacticraftcore:blocks/machine" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/panel_lighting.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/panel_lighting.json new file mode 100644 index 00000000..28c99297 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/panel_lighting.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "#texture", + "down": "#texture", + "up": "#texture", + "north": "#texture", + "east": "#lights", + "south": "#texture", + "west": "#texture" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/parachest.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/parachest.json new file mode 100644 index 00000000..08a47c01 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/parachest.json @@ -0,0 +1,101 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftcore:blocks/parachest", + "texture": "galacticraftcore:blocks/parachest", + "chute": "galacticraftcore:model/parachute/red" +}, +"display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 9, 15 ], + "faces": { + "down": { "uv": [ 10.5, 8.25, 7, 4.75 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 8.5, 14, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8.5, 7, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.5, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 3.5, 10.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 10.5, 3.5, 7, 0 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 7, 15 ], + "to": [ 9.25, 11, 16 ], + "faces": { + "down": { "uv": [ 1.25, 0.25, 0.75, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0.25, 0, 0.75, 0.25 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0.25, 0.5, 1.5 ], "texture": "#texture" }, + "south": { "uv": [ 1.25, 0.25, 0.75, 1.5 ], "texture": "#texture" }, + "west": { "uv": [ 2, 0.5, 2.25, 1.5 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 0.5, 1.75, 1.5 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 14, 1 ], + "to": [ 13, 15, 12.5 ], + "faces": { + "down": { "uv": [ 2.875, 2.75, 4.125, 4 ], "texture": "#chute" }, + "up": { "uv": [ 2.875, 3, 4.375, 4.5 ], "texture": "#chute" }, + "north": { "uv": [ 2.75, 3.875, 3.875, 5 ], "texture": "#chute" }, + "south": { "uv": [ 2.875, 3.125, 4.125, 4.375 ], "texture": "#chute" }, + "west": { "uv": [ 2.5, 2.75, 4.25, 3.125 ], "texture": "#chute" }, + "east": { "uv": [ 2.75, 3.25, 4, 3.625 ], "texture": "#chute" } + } +}, +{ + "from": [ 0, 3.5, 1 ], + "to": [ 1, 14, 12.5 ], + "faces": { + "down": { "uv": [ 4.5, 5, 4.25, 3.25 ], "texture": "#chute" }, + "up": { "uv": [ 3.375, 2.625, 3.625, 4.5 ], "texture": "#chute" }, + "north": { "uv": [ 2.75, 3, 3.125, 4.625 ], "texture": "#chute" }, + "south": { "uv": [ 3.75, 3.25, 4, 4.75 ], "texture": "#chute" }, + "west": { "uv": [ 2.875, 3, 4.5, 4.75 ], "texture": "#chute" }, + "east": { "uv": [ 2.875, 3.25, 4.375, 5 ], "texture": "#chute" } + } +}, +{ + "from": [ 1, 3.5, 0 ], + "to": [ 13, 14, 1 ], + "faces": { + "down": { "uv": [ 3.875, 3.125, 2.625, 3 ], "texture": "#chute" }, + "up": { "uv": [ 2.625, 3, 4, 3.375 ], "texture": "#chute" }, + "north": { "uv": [ 2.625, 2.875, 3.75, 3.875 ], "texture": "#chute" }, + "south": { "uv": [ 2.75, 3.125, 4, 4.25 ], "texture": "#chute" }, + "west": { "uv": [ 3.125, 3.125, 3.375, 4.5 ], "texture": "#chute" }, + "east": { "uv": [ 3.125, 3.25, 3.375, 4.625 ], "texture": "#chute" } + } +}, +{ + "from": [ 3, 15, 3.5 ], + "to": [ 10.5, 16, 10.5 ], + "faces": { + "down": { "uv": [ 3.625, 3.875, 2.625, 3 ], "texture": "#chute" }, + "up": { "uv": [ 2.5, 2.75, 3.625, 3.75 ], "texture": "#chute" }, + "north": { "uv": [ 2.625, 3.5, 3.625, 3.875 ], "texture": "#chute" }, + "south": { "uv": [ 2.625, 3.25, 3.875, 3.625 ], "texture": "#chute" }, + "west": { "uv": [ 2.625, 3, 3.625, 3.375 ], "texture": "#chute" }, + "east": { "uv": [ 2.75, 3.75, 4, 4.125 ], "texture": "#chute" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform.json new file mode 100644 index 00000000..cf396007 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform.json @@ -0,0 +1,80 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/platform_base", + "0": "galacticraftcore:blocks/platform_side", + "1": "galacticraftcore:blocks/platform_light", + "2": "galacticraftcore:blocks/platform_haz", + "3": "galacticraftcore:blocks/platform_base" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 6.0, 0.0 ], + "to": [ 16.0, 14.0, 7.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 2.5, 16.0, 10.5 ] }, + "east": { "texture": "#0", "uv": [ 0.0, 2.5, 7.0, 10.5 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.5, 16.0, 10.5 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.5, 7.0, 10.5 ] }, + "down": { "texture": "#3", "uv": [ 0.0, 9.0, 16.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 0.0 ], + "to": [ 16.0, 15.0, 7.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 1.0, 16.0, 2.0 ] }, + "east": { "texture": "#0", "uv": [ 9.0, 1.0, 16.0, 2.0 ] }, + "south": { "texture": "#1", "uv": [ -2.0, 5.0, 14.0, 6.0 ] }, + "west": { "texture": "#0", "uv": [ 1.0, 2.0, 8.0, 1.0 ] }, + "up": { "texture": "#1", "uv": [ -2.0, -2.0, 14.0, 5.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 14.0, 7.0 ], + "to": [ 7.0, 15.0, 16.0 ], + "faces": { + "east": { "texture": "#1", "uv": [ 5.0, 16.0, 6.0, 7.0 ], "rotation": 270 }, + "south": { "texture": "#0", "uv": [ 0.0, 1.0, 7.0, 2.0 ] }, + "west": { "texture": "#0", "uv": [ 2.5, 2.0, 11.5, 1.0 ] }, + "up": { "texture": "#1", "uv": [ -2.0, 7.0, 5.0, 16.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 15.0, 2.0 ], + "to": [ 2.0, 16.0, 16.0 ], + "faces": { + "east": { "texture": "#2", "uv": [ 3.0, 15.5, 2.0, 1.5 ], "rotation": 270 }, + "south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, + "west": { "texture": "#0", "uv": [ 2.0, 2.0, 16.0, 1.0 ] }, + "up": { "texture": "#2", "uv": [ 0.0, 1.5, 2.0, 15.5 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 15.0, 0.0 ], + "to": [ 16.0, 16.0, 2.0 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] }, + "east": { "texture": "#0", "uv": [ 14.0, 0.0, 16.0, 1.0 ] }, + "south": { "texture": "#2", "uv": [ 0.0, 2.0, 16.0, 3.0 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.0, 2.0, 1.0 ] }, + "up": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 2.0 ] } + } + }, + { + "name": "Cube", + "from": [ 0.0, 6.0, 7.0 ], + "to": [ 7.0, 14.0, 16.0 ], + "faces": { + "east": { "texture": "#0", "uv": [ 0.0, 2.5, 9.0, 10.5 ] }, + "south": { "texture": "#0", "uv": [ 0.0, 2.5, 7.0, 10.5 ] }, + "west": { "texture": "#0", "uv": [ 0.0, 2.5, 9.0, 10.5 ] }, + "down": { "texture": "#3", "uv": [ 0.0, 0.0, 7.0, 9.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform_unset.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform_unset.json new file mode 100644 index 00000000..d8da8a77 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/platform_unset.json @@ -0,0 +1,23 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/platform_base", + "bottom": "galacticraftcore:blocks/platform_base", + "top": "galacticraftcore:blocks/platform_top", + "side": "galacticraftcore:blocks/platform_side" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 6.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "east": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "south": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "west": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "up": { "texture": "top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "bottom", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/refinery_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/refinery_model.json new file mode 100644 index 00000000..165fa4b5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/refinery_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine_input", + "north": "galacticraftcore:blocks/refinery_front", + "east": "galacticraftcore:blocks/machine_oil_input", + "south": "galacticraftcore:blocks/refinery_side", + "west": "galacticraftcore:blocks/machine_fuel_input" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/rocket_workbench_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/rocket_workbench_model.json new file mode 100644 index 00000000..9837feca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/rocket_workbench_model.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/rocket_workbench", + "particle": "galacticraftcore:blocks/rocket_workbench" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen.json new file mode 100644 index 00000000..e298478c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen.json @@ -0,0 +1,74 @@ +{ +"parent": "block/block", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen0_quarters.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen0_quarters.obj new file mode 100644 index 00000000..f9781bb5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen0_quarters.obj @@ -0,0 +1,32 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.00000 0.90000 0.00000 +v 1.00000 0.90000 0.00000 +v 1.00000 0.90000 1.00000 +v 0.00000 0.90000 1.00000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2//3 1//3 9//3 10//3 +f 1//5 4//5 12//5 9//5 +f 4//4 3//4 11//4 12//4 +f 3//6 2//6 10//6 11//6 +f 10//2 9//2 12//2 11//2 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen1_quarters.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen1_quarters.obj new file mode 100644 index 00000000..b58ff95b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen1_quarters.obj @@ -0,0 +1,39 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.00000 0.97000 0.10000 +v 1.00000 0.97000 0.10000 +v 1.00000 0.97000 1.00000 +v 0.00000 0.97000 1.00000 +v 0.00000 0.90000 0.10000 +v 1.00000 0.90000 0.10000 +v 1.00000 0.90000 1.00000 +v 0.00000 0.90000 1.00000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 +vn 0.00000 0.10000 0.03000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/3 1/2/3 5/3/3 6/4/3 +f 1//5 4//5 16//5 13//5 +f 4//4 3//4 15//4 16//4 +f 3//6 2//6 14//6 15//6 +f 6//7 5//7 9//7 10//7 +f 10//4 9//4 13//4 14//4 +f 14//2 13//2 16//2 15//2 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen2_quarters.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen2_quarters.obj new file mode 100644 index 00000000..371a6a58 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen2_quarters.obj @@ -0,0 +1,42 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.00000 0.97000 0.10000 +v 0.90000 0.97000 0.10000 +v 0.90000 0.97000 1.00000 +v 0.00000 0.97000 1.00000 +v 0.00000 0.90000 0.10000 +v 0.90000 0.90000 0.10000 +v 0.90000 0.90000 1.00000 +v 0.00000 0.90000 1.00000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 +vn 0.00000 0.10000 0.03000 +vn -0.03000 0.10000 0.00000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/3 1/2/3 5/3/3 6/4/3 +f 1//5 4//5 16//5 13//5 +f 4//4 3//4 15//4 16//4 +f 3/1/6 2/2/6 6/3/6 7/4/6 +f 6//7 5//7 9//7 10//7 +f 7//8 6//8 10//8 11//8 +f 10//4 9//4 13//4 14//4 +f 14//2 13//2 16//2 15//2 +f 11//5 10//5 14//5 15//5 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen3_quarters.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen3_quarters.obj new file mode 100644 index 00000000..d6ad17a9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen3_quarters.obj @@ -0,0 +1,45 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.00000 0.97000 0.10000 +v 0.90000 0.97000 0.10000 +v 0.90000 0.97000 0.90000 +v 0.00000 0.97000 0.90000 +v 0.00000 0.90000 0.10000 +v 0.90000 0.90000 0.10000 +v 0.90000 0.90000 0.90000 +v 0.00000 0.90000 0.90000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 +vn 0.00000 0.10000 0.03000 +vn -0.03000 0.10000 0.00000 +vn 0.00000 0.10000 -0.03000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/3 1/2/3 5/3/3 6/4/3 +f 1//5 4//5 16//5 13//5 +f 4/1/4 3/2/4 7/3/4 8/4/4 +f 3/1/6 2/2/6 6/3/6 7/4/6 +f 6//7 5//7 9//7 10//7 +f 7//8 6//8 10//8 11//8 +f 8//9 7//9 11//9 12//9 +f 10//4 9//4 13//4 14//4 +f 14//2 13//2 16//2 15//2 +f 12//3 11//3 15//3 16//3 +f 11//5 10//5 14//5 15//5 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_d.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_d.json new file mode 100644 index 00000000..34b36988 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_d.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dl.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dl.json new file mode 100644 index 00000000..ea10e8a8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dl.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dlr.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dlr.json new file mode 100644 index 00000000..9a5fab29 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dlr.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dr.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dr.json new file mode 100644 index 00000000..107c7323 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dr.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dul.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dul.json new file mode 100644 index 00000000..525180ab --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dul.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dulr.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dulr.json new file mode 100644 index 00000000..062bb016 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dulr.json @@ -0,0 +1,22 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dur.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dur.json new file mode 100644 index 00000000..894b1a16 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_dur.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_l.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_l.json new file mode 100644 index 00000000..636bc5f5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_l.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_r.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_r.json new file mode 100644 index 00000000..48208e94 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_r.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Up", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_u.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_u.json new file mode 100644 index 00000000..3850e734 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_u.json @@ -0,0 +1,61 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ul.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ul.json new file mode 100644 index 00000000..273ef69c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ul.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Right", + "from": [ 0, 0, 15 ], + "to": [ 1, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 15, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ulr.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ulr.json new file mode 100644 index 00000000..fa464f6c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ulr.json @@ -0,0 +1,35 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ur.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ur.json new file mode 100644 index 00000000..dd59fccc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_ur.json @@ -0,0 +1,48 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "texture": "galacticraftcore:blocks/screen_side", + "particle": "galacticraftcore:blocks/screen_side" +}, +"elements": [ +{ + "__comment": "Main", + "from": [ 0, 0, 0 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 15, 16 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 16, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Down", + "from": [ 0, 0, 15 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" } + } +}, +{ + "__comment": "Left", + "from": [ 15, 0, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_whole.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_whole.obj new file mode 100644 index 00000000..09e6c86f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/screen_whole.obj @@ -0,0 +1,48 @@ +o main +v 0.00000 0.00000 0.00000 +v 1.00000 0.00000 0.00000 +v 1.00000 0.00000 1.00000 +v 0.00000 0.00000 1.00000 +v 0.00000 1.00000 0.00000 +v 1.00000 1.00000 0.00000 +v 1.00000 1.00000 1.00000 +v 0.00000 1.00000 1.00000 +v 0.10000 0.97000 0.10000 +v 0.90000 0.97000 0.10000 +v 0.90000 0.97000 0.90000 +v 0.10000 0.97000 0.90000 +v 0.10000 0.90000 0.10000 +v 0.90000 0.90000 0.10000 +v 0.90000 0.90000 0.90000 +v 0.10000 0.90000 0.90000 + +vn 0.00000 -1.00000 0.00000 +vn 0.00000 1.00000 0.00000 +vn 0.00000 0.00000 -1.00000 +vn 0.00000 0.00000 1.00000 +vn -1.00000 0.00000 0.00000 +vn 1.00000 0.00000 0.00000 +vn 0.00000 0.10000 0.03000 +vn -0.03000 0.10000 0.00000 +vn 0.00000 0.10000 -0.03000 +vn 0.03000 0.10000 -0.00000 + +vt 0.0000 0.0000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.0000 1.0000 0.0000 + +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 2/1/3 1/2/3 5/3/3 6/4/3 +f 1/1/5 4/2/5 8/3/5 5/4/5 +f 4/1/4 3/2/4 7/3/4 8/4/4 +f 3/1/6 2/2/6 6/3/6 7/4/6 +f 6//7 5//7 9//7 10//7 +f 7//8 6//8 10//8 11//8 +f 8//9 7//9 11//9 12//9 +f 5//10 8//10 12//10 9//10 +f 10//4 9//4 13//4 14//4 +f 9//6 12//6 16//6 13//6 +f 14//2 13//2 16//2 15//2 +f 12//3 11//3 15//3 16//3 +f 11//5 10//5 14//5 15//5 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/sealer_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/sealer_model.json new file mode 100644 index 00000000..18379e28 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/sealer_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine_sealer", + "north": "galacticraftcore:blocks/machine", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine", + "west": "galacticraftcore:blocks/machine_oxygen_input" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/slimeling_egg.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/slimeling_egg.json new file mode 100644 index 00000000..d2a942df --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/slimeling_egg.json @@ -0,0 +1,92 @@ +{ + "textures": { + "texture": "#egg", + "particle": "#egg" + }, + "elements": [ + { + "from": [ 3.0, 0.0, 3.0 ], + "to": [ 13.0, 8.0, 13.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 4.0, 4.0, 13.0, 11.0 ] }, + "east": { "texture": "#egg", "uv": [ 4.0, 4.0, 13.0, 11.0 ] }, + "south": { "texture": "#egg", "uv": [ 4.0, 4.0, 13.0, 11.0 ] }, + "west": { "texture": "#egg", "uv": [ 4.0, 4.0, 13.0, 11.0 ] }, + "up": { "texture": "#egg", "uv": [ 3.0, 3.0, 13.0, 13.0 ] }, + "down": { "texture": "#egg", "uv": [ 3.0, 3.0, 13.0, 13.0 ] } + } + }, + { + "from": [ 4.0, 8.0, 4.0 ], + "to": [ 12.0, 10.5, 12.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 4.0, 7.0, 12.0, 9.5 ] }, + "east": { "texture": "#egg", "uv": [ 4.0, 6.0, 12.0, 8.5 ] }, + "south": { "texture": "#egg", "uv": [ 4.0, 6.0, 12.0, 8.5 ] }, + "west": { "texture": "#egg", "uv": [ 4.0, 6.0, 12.0, 8.5 ] }, + "up": { "texture": "#egg", "uv": [ 4.0, 3.0, 12.0, 11.0 ] }, + "down": { "texture": "#egg", "uv": [ 4.0, 4.0, 12.0, 12.0 ] } + } + }, + { + "from": [ 13.0, 0.0, 4.0 ], + "to": [ 14.5, 6.5, 12.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.5, 10.5 ] }, + "east": { "texture": "#egg", "uv": [ 4.0, 5.0, 12.0, 11.5 ] }, + "south": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.5, 10.5 ] }, + "west": { "texture": "#egg", "uv": [ 4.0, 5.0, 12.0, 11.5 ] }, + "up": { "texture": "#egg", "uv": [ 7.0, 4.0, 8.5, 13.0 ] }, + "down": { "texture": "#egg", "uv": [ 7.0, 4.0, 8.5, 13.0 ] } + } + }, + { + "from": [ 1.5, 0.0, 4.0 ], + "to": [ 3.0, 6.5, 12.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.5, 10.5 ] }, + "east": { "texture": "#egg", "uv": [ 4.0, 5.0, 12.0, 11.5 ] }, + "south": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.5, 10.5 ] }, + "west": { "texture": "#egg", "uv": [ 4.0, 5.0, 12.0, 11.5 ] }, + "up": { "texture": "#egg", "uv": [ 7.0, 4.0, 8.5, 13.0 ] }, + "down": { "texture": "#egg", "uv": [ 7.0, 4.0, 8.5, 13.0 ] } + } + }, + { + "from": [ 3.5, 0.0, 13.0 ], + "to": [ 12.5, 6.5, 14.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 3.0, 6.0, 12.0, 10.5 ] }, + "east": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.0, 10.5 ] }, + "south": { "texture": "#egg", "uv": [ 4.0, 5.0, 13.0, 10.5 ] }, + "west": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.0, 10.5 ] }, + "up": { "texture": "#egg", "uv": [ 4.0, 7.0, 13.0, 8.0 ] }, + "down": { "texture": "#egg", "uv": [ 4.0, 8.0, 13.0, 9.0 ] } + } + }, + { + "from": [ 3.5, 0.0, 2.0 ], + "to": [ 12.5, 6.5, 3.0 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 4.0, 5.0, 13.0, 9.5 ] }, + "east": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.0, 10.5 ] }, + "south": { "texture": "#egg", "uv": [ 4.0, 5.0, 13.0, 10.5 ] }, + "west": { "texture": "#egg", "uv": [ 7.0, 5.0, 8.0, 10.5 ] }, + "up": { "texture": "#egg", "uv": [ 4.0, 7.0, 13.0, 8.0 ] }, + "down": { "texture": "#egg", "uv": [ 4.0, 7.0, 13.0, 8.0 ] } + } + }, + { + "from": [ 6.2, 10.5, 5.0 ], + "to": [ 9.7, 10.9, 7.5 ], + "faces": { + "north": { "texture": "#egg", "uv": [ 6.0, 7.0, 9.5, 7.4 ] }, + "east": { "texture": "#egg", "uv": [ 7.0, 7.0, 9.5, 7.4 ] }, + "south": { "texture": "#egg", "uv": [ 7.0, 7.0, 10.5, 7.4 ] }, + "west": { "texture": "#egg", "uv": [ 7.0, 7.0, 9.5, 7.4 ] }, + "up": { "texture": "#egg", "uv": [ 6.0, 6.0, 9.5, 8.5 ] }, + "down": { "texture": "#egg", "uv": [ 6.0, 6.0, 9.5, 8.5 ] } + } + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/space_station_base_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/space_station_base_model.json new file mode 100644 index 00000000..ccee893a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/space_station_base_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/space_station_side", + "down": "galacticraftcore:blocks/space_station_side", + "up": "galacticraftcore:blocks/space_station_top", + "north": "galacticraftcore:blocks/space_station_side", + "east": "galacticraftcore:blocks/space_station_side", + "south": "galacticraftcore:blocks/space_station_side", + "west": "galacticraftcore:blocks/space_station_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/spin_thruster_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/spin_thruster_model.json new file mode 100644 index 00000000..dd2cdb34 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/spin_thruster_model.json @@ -0,0 +1,129 @@ +{ +"parent": "block/block", +"textures": { + "texture": "galacticraftcore:blocks/thruster", + "particle": "galacticraftcore:blocks/thruster" +}, +"elements": [ +{ + "from": [ 1, 1, 0 ], + "to": [ 15, 15, 1 ], + "faces": { + "down": { "uv": [ 0, 0, 8, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 8, 8 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 8 ], "texture": "#texture" } + } +}, +{ + "from": [ 11, 5, 2 ], + "to": [ 14, 11, 3 ], + "faces": { + "down": { "uv": [ 8, 8, 11, 9 ], "texture": "#texture" }, + "up": { "uv": [ 8, 8, 11, 9 ], "texture": "#texture" }, + "north": { "uv": [ 8, 8, 11, 14 ], "texture": "#texture" }, + "south": { "uv": [ 8, 8, 11, 14 ], "texture": "#texture" }, + "west": { "uv": [ 8, 8, 9, 14 ], "texture": "#texture" }, + "east": { "uv": [ 8, 8, 9, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 8.5, 3, 1 ], + "to": [ 14, 13, 2 ], + "faces": { + "down": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "up": { "uv": [ 8, 8, 13.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 8, 8, 13.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 8, 8, 13, 16 ], "texture": "#texture" }, + "west": { "uv": [ 8, 8, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 8, 8, 9, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 9, 5, 3 ], + "to": [ 14, 11, 6 ], + "faces": { + "down": { "uv": [ 0, 8, 5, 11 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 5, 14 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 5, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 3, 14 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 3, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 7.5, 9, 6 ], + "to": [ 11.5, 12, 9 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "north": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "south": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "west": { "uv": [ 8, 0, 11, 3 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 11, 3 ], "texture": "#texture" } + } +}, +{ + "from": [ 7.5, 4, 6 ], + "to": [ 11.5, 7, 9 ], + "faces": { + "down": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "north": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "south": { "uv": [ 8, 0, 12, 3 ], "texture": "#texture" }, + "west": { "uv": [ 8, 0, 11, 3 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 11, 3 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 8.5, 5.5 ], + "to": [ 7.5, 13, 9.5 ], + "faces": { + "down": { "uv": [ 8, 0, 13.5, 4 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 13.5, 4 ], "texture": "#texture" }, + "north": { "uv": [ 8, 0, 13.5, 4.5 ], "texture": "#texture" }, + "south": { "uv": [ 8, 0, 13.5, 4.5 ], "texture": "#texture" }, + "west": { "uv": [ 8, 0, 12, 4.5 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 12, 4.5 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 3, 5.5 ], + "to": [ 7.5, 7.5, 9.5 ], + "faces": { + "down": { "uv": [ 8, 0, 13.5, 4 ], "texture": "#texture" }, + "up": { "uv": [ 8, 0, 13.5, 4 ], "texture": "#texture" }, + "north": { "uv": [ 8, 0, 13.5, 4.5 ], "texture": "#texture" }, + "south": { "uv": [ 8, 0, 13.5, 4.5 ], "texture": "#texture" }, + "west": { "uv": [ 8, 0, 12, 4.5 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 12, 4.5 ], "texture": "#texture" } + } +}, +{ + "from": [ 10, 7, 6 ], + "to": [ 12.5, 9, 7 ], + "faces": { + "down": { "uv": [ 0, 8, 2.5, 9 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 2.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 2.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 2.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 1, 10 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 1, 10 ], "texture": "#texture" } + } +}, +{ + "from": [ 1.5, 2.5, 5 ], + "to": [ 2.5, 13.5, 10 ], + "faces": { + "down": { "uv": [ 0, 8, 1, 13 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 1, 13 ], "texture": "#texture" }, + "north": { "uv": [ 0, 8, 1, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 1, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 8, 3.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8, 3.5, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank.json new file mode 100644 index 00000000..36865ce8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank.json @@ -0,0 +1,68 @@ +{ +"parent": "block/block", +"textures": { + "tank": "galacticraftcore:blocks/tank", + "tank_top": "galacticraftcore:blocks/tank_top", + "particle": "galacticraftcore:blocks/tank_top" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 16, 15 ], + "faces": { + "north": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 1 ], + "to": [ 2, 15.75, 2 ], + "faces": { + "down": { "uv": [ 15, 2, 14, 1 ], "texture": "#tank" }, + "up": { "uv": [ 1, 1, 2, 2 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 1.0625 ], + "to": [ 15, 15.75, 2.0625 ], + "faces": { + "down": { "uv": [ 2, 2.0625, 1, 1.0625 ], "texture": "#tank" }, + "up": { "uv": [ 14, 1.0625, 15, 2.0625 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1.0625, 0.25, 2.0625, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 13.9375, 0.25, 14.9375, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 14 ], + "to": [ 2, 15.75, 15 ], + "faces": { + "down": { "uv": [ 15, 15, 14, 14 ], "texture": "#tank" }, + "up": { "uv": [ 1, 14, 2, 15 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 14 ], + "to": [ 15, 15.75, 15 ], + "faces": { + "down": { "uv": [ 2, 15, 1, 14 ], "texture": "#tank" }, + "up": { "uv": [ 14, 14, 15, 15 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_d.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_d.json new file mode 100644 index 00000000..87c60ca0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_d.json @@ -0,0 +1,68 @@ +{ +"textures": { + "tank": "galacticraftcore:blocks/tank", + "tank_top": "galacticraftcore:blocks/tank_top", + "particle": "galacticraftcore:blocks/tank_top" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 0 ], "texture": "#tank_top" }, + "north": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 1 ], + "to": [ 2, 15.75, 2 ], + "faces": { + "down": { "uv": [ 15, 2, 14, 1 ], "texture": "#tank" }, + "up": { "uv": [ 1, 1, 2, 2 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 1.0625 ], + "to": [ 15, 15.75, 2.0625 ], + "faces": { + "down": { "uv": [ 2, 2.0625, 1, 1.0625 ], "texture": "#tank" }, + "up": { "uv": [ 14, 1.0625, 15, 2.0625 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1.0625, 0.25, 2.0625, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 13.9375, 0.25, 14.9375, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 14 ], + "to": [ 2, 15.75, 15 ], + "faces": { + "down": { "uv": [ 15, 15, 14, 14 ], "texture": "#tank" }, + "up": { "uv": [ 1, 14, 2, 15 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 14 ], + "to": [ 15, 15.75, 15 ], + "faces": { + "down": { "uv": [ 2, 15, 1, 14 ], "texture": "#tank" }, + "up": { "uv": [ 14, 14, 15, 15 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_u.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_u.json new file mode 100644 index 00000000..b020fce2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_u.json @@ -0,0 +1,68 @@ +{ +"textures": { + "tank": "galacticraftcore:blocks/tank", + "tank_top": "galacticraftcore:blocks/tank_top", + "particle": "galacticraftcore:blocks/tank_top" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 16, 15 ], + "faces": { + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#tank_top" }, + "north": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 1 ], + "to": [ 2, 15.75, 2 ], + "faces": { + "down": { "uv": [ 15, 2, 14, 1 ], "texture": "#tank" }, + "up": { "uv": [ 1, 1, 2, 2 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 1.0625 ], + "to": [ 15, 15.75, 2.0625 ], + "faces": { + "down": { "uv": [ 2, 2.0625, 1, 1.0625 ], "texture": "#tank" }, + "up": { "uv": [ 14, 1.0625, 15, 2.0625 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1.0625, 0.25, 2.0625, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 13.9375, 0.25, 14.9375, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 14 ], + "to": [ 2, 15.75, 15 ], + "faces": { + "down": { "uv": [ 15, 15, 14, 14 ], "texture": "#tank" }, + "up": { "uv": [ 1, 14, 2, 15 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 14 ], + "to": [ 15, 15.75, 15 ], + "faces": { + "down": { "uv": [ 2, 15, 1, 14 ], "texture": "#tank" }, + "up": { "uv": [ 14, 14, 15, 15 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_ud.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_ud.json new file mode 100644 index 00000000..73686b86 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tank_ud.json @@ -0,0 +1,70 @@ +{ +"parent": "block/block", +"textures": { + "tank": "galacticraftcore:blocks/tank", + "tank_top": "galacticraftcore:blocks/tank_top", + "particle": "galacticraftcore:blocks/tank_top" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 0 ], "texture": "#tank_top" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#tank_top" }, + "north": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0, 15, 16 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 1 ], + "to": [ 2, 15.75, 2 ], + "faces": { + "down": { "uv": [ 15, 2, 14, 1 ], "texture": "#tank" }, + "up": { "uv": [ 1, 1, 2, 2 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 1.0625 ], + "to": [ 15, 15.75, 2.0625 ], + "faces": { + "down": { "uv": [ 2, 2.0625, 1, 1.0625 ], "texture": "#tank" }, + "up": { "uv": [ 14, 1.0625, 15, 2.0625 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 1.0625, 0.25, 2.0625, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 13.9375, 0.25, 14.9375, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 1, 0.25, 14 ], + "to": [ 2, 15.75, 15 ], + "faces": { + "down": { "uv": [ 15, 15, 14, 14 ], "texture": "#tank" }, + "up": { "uv": [ 1, 14, 2, 15 ], "texture": "#tank" }, + "north": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +}, +{ + "from": [ 14, 0.25, 14 ], + "to": [ 15, 15.75, 15 ], + "faces": { + "down": { "uv": [ 2, 15, 1, 14 ], "texture": "#tank" }, + "up": { "uv": [ 14, 14, 15, 15 ], "texture": "#tank" }, + "north": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" }, + "south": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "west": { "uv": [ 14, 0.25, 15, 15.75 ], "texture": "#tank" }, + "east": { "uv": [ 1, 0.25, 2, 15.75 ], "texture": "#tank" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/telemetry_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/telemetry_model.json new file mode 100644 index 00000000..2e05d962 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/telemetry_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/cargo_pad", + "down": "galacticraftcore:blocks/cargo_pad", + "up": "galacticraftcore:blocks/cargo_pad", + "north": "galacticraftcore:blocks/cargo_pad", + "east": "galacticraftcore:blocks/cargo_pad", + "south": "galacticraftcore:blocks/cargo_pad", + "west": "galacticraftcore:blocks/cargo_pad" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_inner_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_inner_stairs.json new file mode 100644 index 00000000..f1cfc4df --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_outer_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_outer_stairs.json new file mode 100644 index 00000000..ca6b786e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_stairs.json new file mode 100644 index 00000000..3c05ece6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_wall_inventory.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_wall_inventory.json new file mode 100644 index 00000000..20050e0b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_1_wall_inventory.json @@ -0,0 +1,8 @@ +{ + "parent": "galacticraftcore:block/gc_wall_inventory", + "textures": { + "wall": "galacticraftcore:blocks/deco_block_side", + "wall_bot": "galacticraftcore:blocks/deco_block_up", + "wall_top": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_inner_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_inner_stairs.json new file mode 100644 index 00000000..0837141c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_outer_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_outer_stairs.json new file mode 100644 index 00000000..71f599ce --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_stairs.json new file mode 100644 index 00000000..111973ed --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_wall_inventory.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_wall_inventory.json new file mode 100644 index 00000000..ac5268ee --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/tin_2_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "block/wall_inventory", + "textures": { + "wall": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/treasure_chest.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/treasure_chest.json new file mode 100644 index 00000000..bef2470b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/treasure_chest.json @@ -0,0 +1,45 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftcore:blocks/treasure_chest", + "texture": "galacticraftcore:model/treasure" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 9, 15 ], + "faces": { + "down": { "uv": [ 10.5, 8.25, 7, 4.75 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 8.5, 14, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8.5, 7, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.5, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 3.5, 10.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 10.5, 3.5, 7, 0 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 7, 15 ], + "to": [ 9.25, 11, 16 ], + "faces": { + "down": { "uv": [ 1.25, 0.25, 0.75, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0.25, 0, 0.75, 0.25 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0.25, 0.5, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0.25, 1.25, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 1.25, 0.25, 1.5, 1.25 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_model.json new file mode 100644 index 00000000..44b5d548 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_lit", + "ultorch": "galacticraftcore:blocks/unlit_torch_lit" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_model.json new file mode 100644 index 00000000..adbedc9d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_lit_stone", + "ultorch": "galacticraftcore:blocks/unlit_torch_lit_stone" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_wall_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_wall_model.json new file mode 100644 index 00000000..872a6aca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_stone_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_lit_stone", + "ultorch": "galacticraftcore:blocks/unlit_torch_lit_stone" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_wall_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_wall_model.json new file mode 100644 index 00000000..af3c7c18 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_lit_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_lit", + "ultorch": "galacticraftcore:blocks/unlit_torch_lit" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_model.json new file mode 100644 index 00000000..d2220745 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch", + "ultorch": "galacticraftcore:blocks/unlit_torch" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_model.json new file mode 100644 index 00000000..fe31200a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_model.json @@ -0,0 +1,33 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_stone", + "ultorch": "galacticraftcore:blocks/unlit_torch_stone" + }, + "elements": [ + { "from": [ 7, 0, 7 ], + "to": [ 9, 10, 9 ], + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ 7, 0, 0 ], + "to": [ 9, 16, 16 ], + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ 0, 0, 7 ], + "to": [ 16, 16, 9 ], + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_wall_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_wall_model.json new file mode 100644 index 00000000..65451b1c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_stone_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch_stone", + "ultorch": "galacticraftcore:blocks/unlit_torch_stone" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_wall_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_wall_model.json new file mode 100644 index 00000000..5b515c69 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/unlit_torch_wall_model.json @@ -0,0 +1,36 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "galacticraftcore:blocks/unlit_torch", + "ultorch": "galacticraftcore:blocks/unlit_torch" + }, + "elements": [ + { "from": [ -1, 3.5, 7 ], + "to": [ 1, 13.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#ultorch" }, + "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#ultorch" } + } + }, + { "from": [ -1, 3.5, 0 ], + "to": [ 1, 19.5, 16 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + }, + { "from": [ -8, 3.5, 7 ], + "to": [ 8, 19.5, 9 ], + "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ultorch" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_asteroid.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_asteroid.json new file mode 100644 index 00000000..97818418 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_asteroid.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/screen_side", + "top": "galacticraftcore:blocks/screen_side", + "side": "galacticraftcore:blocks/screen_side" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_cobblestone.json new file mode 100644 index 00000000..468c06e6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_cobblestone.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_dungeon_brick.json new file mode 100644 index 00000000..ab4bf86b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_mars_dungeon_brick.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_dungeon_brick.json new file mode 100644 index 00000000..8a1cd818 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_dungeon_brick.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/brick", + "top": "galacticraftcore:blocks/brick", + "side": "galacticraftcore:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_stone.json new file mode 100644 index 00000000..ab03ea47 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_moon_stone.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/bottom", + "top": "galacticraftcore:blocks/bottom", + "side": "galacticraftcore:blocks/bottom" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_1.json new file mode 100644 index 00000000..c4c06040 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_1.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block_up", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block_side" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_2.json new file mode 100644 index 00000000..7a5aabf8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/upper_slab_tin_2.json @@ -0,0 +1,8 @@ +{ + "parent": "block/upper_slab", + "textures": { + "bottom": "galacticraftcore:blocks/deco_block", + "top": "galacticraftcore:blocks/deco_block", + "side": "galacticraftcore:blocks/deco_block" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_post.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_post.json new file mode 100644 index 00000000..1fa78d4f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_post.json @@ -0,0 +1,19 @@ +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 4, 0, 4 ], + "to": [ 12, 16, 12 ], + "faces": { + "down": { "texture": "#wall_bot", "cullface": "down" }, + "up": { "texture": "#wall_top", "cullface": "up" }, + "north": { "texture": "#wall" }, + "south": { "texture": "#wall" }, + "west": { "texture": "#wall" }, + "east": { "texture": "#wall" } + }, + "__comment": "Center post" + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_side.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_side.json new file mode 100644 index 00000000..7da73fda --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/wall_side.json @@ -0,0 +1,18 @@ +{ + "textures": { + "particle": "#wall" + }, + "elements": [ + { "from": [ 5, 0, 0 ], + "to": [ 11, 14, 8 ], + "faces": { + "down": { "texture": "#wall_bot", "cullface": "down" }, + "up": { "texture": "#wall_top" }, + "north": { "texture": "#wall", "cullface": "north" }, + "west": { "texture": "#wall" }, + "east": { "texture": "#wall" } + }, + "__comment": "wall" + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.mtl new file mode 100644 index 00000000..a8d03bad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:blocks/assembly \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.obj new file mode 100644 index 00000000..f7cbe45e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/block/workbench.obj @@ -0,0 +1,918 @@ +# Blender v2.76 (sub 0) OBJ File: 'workbench.blend' +# www.blender.org +mtllib workbench.mtl +o Cube +v 0.000000 0.000000 1.000000 +v 0.000000 1.000000 1.000000 +v 0.000000 0.000000 0.000000 +v 0.000000 1.000000 0.000000 +v 1.000000 0.000000 1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 0.000000 0.000000 +v 1.000000 1.000000 0.000000 +v 0.250000 1.081607 1.250000 +v 0.250000 1.281608 1.250000 +v 0.250000 1.081607 -0.250000 +v 0.250000 1.281608 -0.250000 +v 0.750000 1.081607 1.250000 +v 0.750000 1.281608 1.250000 +v 0.750000 1.081607 -0.250000 +v 0.750000 1.281608 -0.250000 +v 1.242462 1.068892 0.252513 +v 1.242462 1.350401 0.252513 +v 0.252513 1.068892 1.242462 +v 0.252513 1.350401 1.242462 +v 0.747487 1.068892 -0.242462 +v 0.747487 1.350401 -0.242462 +v -0.242462 1.068892 0.747487 +v -0.242462 1.350401 0.747487 +v 0.150000 1.337856 0.850000 +v 0.150000 1.437856 0.850000 +v 0.150000 1.337856 0.150000 +v 0.150000 1.437856 0.150000 +v 0.850000 1.337856 0.850000 +v 0.850000 1.437856 0.850000 +v 0.850000 1.337856 0.150000 +v 0.850000 1.437856 0.150000 +v -0.065686 0.986978 1.136396 +v -0.065686 1.386978 1.136396 +v -0.136396 0.986978 1.065686 +v -0.136396 1.386978 1.065686 +v 1.136396 0.986978 -0.065686 +v 1.136396 1.386978 -0.065686 +v 1.065686 0.986978 -0.136396 +v 1.065686 1.386978 -0.136396 +v 0.350000 1.013104 1.233450 +v 0.350000 1.255998 1.409524 +v 0.350000 1.189178 0.990555 +v 0.350000 1.432073 1.166630 +v 0.650000 1.013104 1.233450 +v 0.650000 1.255998 1.409524 +v 0.650000 1.189178 0.990555 +v 0.650000 1.432073 1.166630 +v 1.233450 1.013104 0.650000 +v 1.409524 1.255998 0.650000 +v 0.990555 1.189178 0.650000 +v 1.166630 1.432073 0.650000 +v 1.233450 1.013104 0.350000 +v 1.409524 1.255998 0.350000 +v 0.990555 1.189178 0.350000 +v 1.166630 1.432073 0.350000 +v 0.650000 1.013104 -0.233450 +v 0.650000 1.255998 -0.409524 +v 0.650000 1.189178 0.009445 +v 0.650000 1.432073 -0.166630 +v 0.350000 1.013104 -0.233450 +v 0.350000 1.255998 -0.409524 +v 0.350000 1.189178 0.009445 +v 0.350000 1.432073 -0.166630 +v -0.233450 1.013104 0.350000 +v -0.409524 1.255998 0.350000 +v 0.009445 1.189178 0.350000 +v -0.166629 1.432073 0.350000 +v -0.233450 1.013104 0.650000 +v -0.409524 1.255998 0.650000 +v 0.009445 1.189178 0.650000 +v -0.166629 1.432073 0.650000 +v 0.350000 2.334641 1.778483 +v 0.350000 2.634641 1.778483 +v 0.350000 2.334641 1.478483 +v 0.350000 2.634641 1.478483 +v 0.650000 2.334641 1.778483 +v 0.650000 2.634641 1.778483 +v 0.650000 2.334641 1.478483 +v 0.650000 2.634641 1.478483 +v 0.350000 3.242134 1.028300 +v 0.350000 3.542134 1.028300 +v 0.350000 3.242134 0.728300 +v 0.350000 3.542134 0.728300 +v 0.650000 3.242134 1.028300 +v 0.650000 3.542134 1.028300 +v 0.650000 3.242134 0.728300 +v 0.650000 3.542134 0.728300 +v 0.650000 1.843833 -0.581535 +v 0.650000 2.101906 -0.734501 +v 0.650000 1.996798 -0.323462 +v 0.650000 2.254871 -0.476428 +v 0.350000 1.843833 -0.581535 +v 0.350000 2.101906 -0.734501 +v 0.350000 1.996798 -0.323462 +v 0.350000 2.254871 -0.476428 +v 1.955269 1.582708 0.650000 +v 2.065425 1.861752 0.650000 +v 1.676225 1.692864 0.650000 +v 1.786381 1.971908 0.650000 +v 1.955269 1.582708 0.350000 +v 2.065425 1.861752 0.350000 +v 1.676225 1.692864 0.350000 +v 1.786381 1.971908 0.350000 +v -0.886777 2.122101 0.650000 +v -0.786616 2.404886 0.650000 +v -1.169563 2.222261 0.650000 +v -1.069402 2.505047 0.650000 +v -0.886777 2.122101 0.350000 +v -0.786616 2.404886 0.350000 +v -1.169563 2.222261 0.350000 +v -1.069402 2.505047 0.350000 +v 0.890210 3.251843 0.734295 +v 0.890210 3.551843 0.734295 +v 0.821067 3.251843 0.662051 +v 0.821067 3.551843 0.662051 +v 0.962454 3.251843 0.665152 +v 0.962454 3.551843 0.665152 +v 0.893312 3.251843 0.592908 +v 0.893312 3.551843 0.592908 +v 0.178933 3.251843 0.665152 +v 0.178933 3.551843 0.665152 +v 0.109790 3.251843 0.592908 +v 0.109790 3.551843 0.592908 +v 0.106688 3.251843 0.734295 +v 0.106688 3.551843 0.734295 +v 0.037545 3.251843 0.662051 +v 0.037545 3.551843 0.662051 +v 0.577795 3.290566 0.749125 +v 0.577795 3.490566 0.749125 +v 0.852713 3.290566 0.629040 +v 0.852713 3.490566 0.629040 +v 0.617824 3.290566 0.840764 +v 0.617824 3.490566 0.840764 +v 0.892741 3.290566 0.720680 +v 0.892741 3.490566 0.720680 +v 0.860116 3.290566 0.627558 +v 0.860116 3.490566 0.627558 +v 1.004750 3.290566 0.364726 +v 1.004750 3.490566 0.364726 +v 0.947727 3.290566 0.675770 +v 0.947727 3.490566 0.675770 +v 1.092361 3.290566 0.412937 +v 1.092361 3.490566 0.412937 +v 0.139017 3.290566 0.628488 +v 0.139017 3.490566 0.628488 +v -0.003499 3.290566 0.364501 +v -0.003499 3.490566 0.364501 +v 0.051022 3.290566 0.675994 +v 0.051022 3.490566 0.675994 +v -0.091495 3.290566 0.412007 +v -0.091495 3.490566 0.412007 +v 0.422198 3.290566 0.749202 +v 0.422198 3.490566 0.749202 +v 0.147339 3.290566 0.628983 +v 0.147339 3.490566 0.628983 +v 0.382125 3.290566 0.840822 +v 0.382125 3.490566 0.840822 +v 0.107266 3.290566 0.720603 +v 0.107266 3.490566 0.720603 +v 0.155502 2.006171 -0.787269 +v 0.155502 2.261113 -0.357147 +v 0.155502 2.092196 -0.838257 +v 0.155502 2.347138 -0.408135 +v 0.855502 2.006171 -0.787269 +v 0.855502 2.261113 -0.357147 +v 0.855502 2.092196 -0.838257 +v 0.855502 2.347138 -0.408135 +v 0.400000 1.253847 1.372771 +v 0.400000 2.388481 1.767893 +v 0.400000 1.325086 1.168201 +v 0.400000 2.459720 1.563322 +v 0.600000 1.253847 1.372771 +v 0.600000 2.388481 1.767893 +v 0.600000 1.325086 1.168201 +v 0.600000 2.459720 1.563322 +v 0.400000 2.531088 1.731811 +v 0.400000 3.501466 1.025859 +v 0.400000 2.413429 1.570082 +v 0.400000 3.383807 0.864130 +v 0.600000 2.531088 1.731811 +v 0.600000 3.501466 1.025859 +v 0.600000 2.413429 1.570082 +v 0.600000 3.383807 0.864130 +v -0.347331 1.248460 0.600000 +v -1.059282 2.214445 0.600000 +v -0.347331 1.248460 0.400000 +v -1.059282 2.214445 0.400000 +v -0.186333 1.367119 0.600000 +v -0.898285 2.333104 0.600000 +v -0.186333 1.367119 0.400000 +v -0.898285 2.333104 0.400000 +v 0.400000 1.293862 -0.190303 +v 0.400000 2.066922 -0.396161 +v 0.400000 1.242397 -0.383568 +v 0.400000 2.015458 -0.589426 +v 0.600000 1.293862 -0.190303 +v 0.600000 2.066922 -0.396161 +v 0.600000 1.242397 -0.383568 +v 0.600000 2.015458 -0.589426 +v 1.174452 1.397489 0.600000 +v 1.863521 1.803917 0.600000 +v 1.174452 1.397489 0.400000 +v 1.863521 1.803917 0.400000 +v 1.276059 1.225222 0.600000 +v 1.965128 1.631650 0.600000 +v 1.276059 1.225222 0.400000 +v 1.965128 1.631650 0.400000 +v 1.834362 1.720510 0.600000 +v 1.359728 2.364500 0.600000 +v 1.834362 1.720510 0.400000 +v 1.359728 2.364500 0.400000 +v 1.995360 1.839169 0.600000 +v 1.520725 2.483159 0.600000 +v 1.995360 1.839169 0.400000 +v 1.520725 2.483159 0.400000 +v -1.008356 2.457437 0.600000 +v -0.351381 2.913928 0.600000 +v -1.008356 2.457437 0.400000 +v -0.351381 2.913928 0.400000 +v -0.894234 2.293193 0.600000 +v -0.237259 2.749684 0.600000 +v -0.894234 2.293193 0.400000 +v -0.237259 2.749684 0.400000 +v 1.100417 2.179827 0.700000 +v 0.992393 2.564964 0.700000 +v 1.100418 2.179827 0.300000 +v 0.992393 2.564964 0.300000 +v 1.196702 2.206833 0.700000 +v 1.088677 2.591970 0.700000 +v 1.196702 2.206833 0.300000 +v 1.088677 2.591970 0.300000 +v 1.118177 2.288667 0.600000 +v 1.064165 2.481236 0.600000 +v 1.118177 2.288667 0.400000 +v 1.064165 2.481236 0.400000 +v 1.599599 2.423698 0.600000 +v 1.545586 2.616267 0.600000 +v 1.599599 2.423698 0.400000 +v 1.545586 2.616267 0.400000 +v -0.538611 3.022603 0.650000 +v -0.324627 3.232866 0.650000 +v -0.538611 3.022603 0.350000 +v -0.324627 3.232866 0.350000 +v -0.188173 2.665961 0.650000 +v 0.025812 2.876224 0.650000 +v -0.188173 2.665961 0.350000 +v 0.025812 2.876224 0.350000 +v -0.331720 2.966683 0.550000 +v -0.260392 3.036771 0.550000 +v -0.331720 2.966683 0.450000 +v -0.260392 3.036771 0.450000 +v 0.158893 2.467385 0.550000 +v 0.230222 2.537473 0.550000 +v 0.158893 2.467385 0.450000 +v 0.230222 2.537473 0.450000 +v 0.252512 1.058892 -0.242462 +v 0.252512 1.340401 -0.242462 +v 1.242462 1.058892 0.747487 +v 1.242462 1.340401 0.747487 +v -0.242462 1.058892 0.252513 +v -0.242462 1.340401 0.252513 +v 0.747488 1.058892 1.242462 +v 0.747488 1.340401 1.242462 +v 1.136396 0.986978 1.065686 +v 1.136396 1.386978 1.065686 +v 1.065686 0.986978 1.136396 +v 1.065686 1.386978 1.136396 +v -0.065686 0.986978 -0.136396 +v -0.065686 1.386978 -0.136396 +v -0.136396 0.986978 -0.065686 +v -0.136396 1.386978 -0.065686 +v 1.250000 1.081607 0.750000 +v 1.250000 1.281608 0.750000 +v -0.250000 1.081607 0.750000 +v -0.250000 1.281608 0.750000 +v 1.250000 1.081607 0.250000 +v 1.250000 1.281608 0.250000 +v -0.250000 1.081607 0.250000 +v -0.250000 1.281608 0.250000 +vt 0.999375 0.837056 +vt 0.999375 0.917416 +vt 0.919015 0.917416 +vt 0.999990 0.918877 +vt 0.999990 0.999237 +vt 0.919630 0.999237 +vt 0.538681 0.847671 +vt 0.538681 0.906048 +vt 0.500443 0.906048 +vt 0.390801 0.926947 +vt 0.390801 0.944995 +vt 0.336048 0.944995 +vt 0.335505 0.926814 +vt 0.335505 0.945042 +vt 0.309247 0.945042 +vt 0.308250 0.927112 +vt 0.308250 0.944830 +vt 0.254536 0.944830 +vt 0.335505 0.945516 +vt 0.335505 0.999587 +vt 0.309247 0.999587 +vt 0.218445 0.812759 +vt 0.218445 0.816209 +vt 0.191890 0.816209 +vt 0.218445 0.816832 +vt 0.218445 0.843386 +vt 0.191890 0.843386 +vt 0.331884 0.753881 +vt 0.331884 0.757699 +vt 0.274055 0.757699 +vt 0.331941 0.738734 +vt 0.273998 0.753856 +vt 0.011790 0.707246 +vt 0.023146 0.707246 +vt 0.023146 0.718602 +vt 0.035170 0.707246 +vt 0.035170 0.718602 +vt 0.023814 0.718602 +vt 0.011790 0.718602 +vt 0.023814 0.707246 +vt 0.011752 0.809115 +vt 0.011752 0.819977 +vt 0.003993 0.819977 +vt 0.003993 0.809115 +vt 0.046684 0.758136 +vt 0.046684 0.765539 +vt 0.039281 0.765539 +vt 0.039281 0.758136 +vt 0.043277 0.820339 +vt 0.070026 0.820339 +vt 0.070026 0.824117 +vt 0.069709 0.800918 +vt 0.069709 0.820223 +vt 0.042861 0.820223 +vt 0.043277 0.824117 +vt 0.097522 0.801109 +vt 0.097522 0.820247 +vt 0.070798 0.820247 +vt 0.187542 0.945668 +vt 0.202850 0.945668 +vt 0.202850 0.991775 +vt 0.187176 0.945668 +vt 0.187176 0.991775 +vt 0.180023 0.991775 +vt 0.187542 0.991775 +vt 0.180023 0.945668 +vt 0.281066 0.808910 +vt 0.281066 0.824174 +vt 0.265803 0.824174 +vt 0.281519 0.808910 +vt 0.288990 0.808910 +vt 0.288990 0.824174 +vt 0.281519 0.824174 +vt 0.268428 0.774081 +vt 0.268428 0.788762 +vt 0.242775 0.788762 +vt 0.242131 0.773662 +vt 0.242131 0.781151 +vt 0.234531 0.781151 +vt 0.242775 0.774081 +vt 0.078035 0.977167 +vt 0.078035 0.988191 +vt 0.066583 0.988191 +vt 0.078533 0.976894 +vt 0.093308 0.976894 +vt 0.093308 0.999846 +vt 0.066717 0.977208 +vt 0.077901 0.977208 +vt 0.077901 0.987997 +vt 0.078533 0.999846 +vt 0.093436 0.976760 +vt 0.093436 0.999922 +vt 0.078405 0.999922 +vt 0.027653 0.992372 +vt 0.027653 0.995993 +vt 0.000126 0.995993 +vt 0.003887 0.992372 +vt 0.031115 0.992372 +vt 0.031115 0.995993 +vt 0.003610 0.992372 +vt 0.003610 0.995993 +vt 0.000035 0.995993 +vt 0.003887 0.995993 +vt 0.309247 0.945516 +vt 0.274055 0.753881 +vt 0.919015 0.837056 +vt 0.919630 0.918877 +vt 0.500443 0.847671 +vt 0.336048 0.926947 +vt 0.309247 0.926814 +vt 0.254536 0.927112 +vt 0.191890 0.812759 +vt 0.191890 0.816832 +vt 0.273998 0.738734 +vt 0.042861 0.800918 +vt 0.070798 0.801109 +vt 0.265803 0.808910 +vt 0.234531 0.773662 +vt 0.066583 0.977167 +vt 0.066717 0.987997 +vt 0.078405 0.976760 +vt 0.000126 0.992372 +vt 0.000035 0.992372 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.707100 0.000000 0.707100 +vn -0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.000000 0.586900 -0.809600 +vn 0.000000 -0.586900 0.809600 +vn 0.000000 -0.809600 -0.586900 +vn 0.000000 0.809600 0.586900 +vn -0.809600 0.586900 0.000000 +vn 0.809600 -0.586900 0.000000 +vn -0.586900 -0.809600 0.000000 +vn 0.586900 0.809600 0.000000 +vn 0.000000 0.586900 0.809600 +vn 0.000000 -0.586900 -0.809600 +vn 0.000000 -0.809600 0.586900 +vn 0.000000 0.809600 -0.586900 +vn 0.809600 0.586900 0.000000 +vn -0.809600 -0.586900 0.000000 +vn 0.586900 -0.809600 0.000000 +vn -0.586900 0.809600 0.000000 +vn 0.000000 0.509900 0.860200 +vn 0.000000 -0.509900 -0.860200 +vn 0.000000 -0.860200 0.509900 +vn 0.000000 0.860200 -0.509900 +vn -0.930100 0.367200 0.000000 +vn 0.930100 -0.367200 0.000000 +vn -0.367200 -0.930100 0.000000 +vn 0.367200 0.930100 0.000000 +vn -0.942600 0.333900 0.000000 +vn 0.942600 -0.333900 0.000000 +vn -0.333900 -0.942600 0.000000 +vn 0.333900 0.942600 0.000000 +vn -0.722400 0.000000 0.691400 +vn -0.691400 0.000000 -0.722400 +vn 0.722400 0.000000 -0.691400 +vn 0.691400 0.000000 0.722400 +vn -0.400300 0.000000 -0.916400 +vn 0.916400 0.000000 -0.400300 +vn 0.400300 0.000000 0.916400 +vn -0.916400 0.000000 0.400300 +vn -0.876100 0.000000 -0.482100 +vn 0.482100 0.000000 -0.876100 +vn 0.876100 0.000000 0.482100 +vn -0.482100 0.000000 0.876100 +vn -0.880000 0.000000 0.475100 +vn 0.475100 0.000000 0.880000 +vn 0.880000 0.000000 -0.475100 +vn -0.475100 0.000000 -0.880000 +vn -0.400700 0.000000 0.916200 +vn 0.916200 0.000000 0.400700 +vn 0.400700 0.000000 -0.916200 +vn -0.916200 0.000000 -0.400700 +vn 0.000000 0.328900 -0.944400 +vn 0.000000 -0.328900 0.944400 +vn 0.000000 -0.944400 -0.328900 +vn 0.000000 0.944400 0.328900 +vn 0.000000 -0.588300 -0.808600 +vn 0.000000 0.588300 0.808600 +vn 0.000000 -0.808600 0.588300 +vn -0.000000 0.808600 -0.588300 +vn -0.805000 -0.593300 0.000000 +vn 0.805000 0.593300 0.000000 +vn 0.593300 -0.805000 0.000000 +vn -0.593300 0.805000 0.000000 +vn 0.000000 -0.257300 -0.966300 +vn 0.000000 0.257300 0.966300 +vn 0.000000 -0.966300 0.257300 +vn 0.000000 0.966300 -0.257300 +vn -0.508000 0.861300 0.000000 +vn 0.508000 -0.861300 0.000000 +vn -0.861300 -0.508000 0.000000 +vn 0.861300 0.508000 0.000000 +vn -0.570600 0.821200 0.000000 +vn 0.570600 -0.821200 0.000000 +vn -0.821200 -0.570600 0.000000 +vn 0.821200 0.570600 0.000000 +vn -0.962800 -0.270100 -0.000000 +vn 0.962800 0.270100 0.000000 +vn 0.270100 -0.962800 0.000000 +vn -0.270100 0.962800 0.000000 +vn -0.700900 0.713300 0.000000 +vn 0.700900 -0.713300 0.000000 +vn -0.713300 -0.700900 0.000000 +vn 0.713300 0.700900 0.000000 +usemtl None +f 4/1/1 3/2/1 1/3/1 +f 8/1/2 7/2/2 3/3/2 +f 6/1/3 5/2/3 7/3/3 +f 2/1/4 1/2/4 5/3/4 +f 3/1/5 7/2/5 5/3/5 +f 8/4/6 4/5/6 2/6/6 +f 12/7/1 11/8/1 9/9/1 +f 16/7/2 15/8/2 11/9/2 +f 14/7/3 13/8/3 15/9/3 +f 10/7/4 9/8/4 13/9/4 +f 11/7/5 15/8/5 13/9/5 +f 16/7/6 12/8/6 10/9/6 +f 20/10/7 19/11/7 17/12/7 +f 24/13/8 23/14/8 19/15/8 +f 22/16/9 21/17/9 23/18/9 +f 18/13/10 17/14/10 21/15/10 +f 19/19/5 23/20/5 21/21/5 +f 24/19/6 20/20/6 18/21/6 +f 28/22/1 27/23/1 25/24/1 +f 32/22/2 31/23/2 27/24/2 +f 30/22/3 29/23/3 31/24/3 +f 26/22/4 25/23/4 29/24/4 +f 27/25/5 31/26/5 29/27/5 +f 32/25/6 28/26/6 26/27/6 +f 36/28/8 35/29/8 33/30/8 +f 40/31/9 39/28/9 35/32/9 +f 38/28/10 37/29/10 39/30/10 +f 34/31/7 33/28/7 37/32/7 +f 35/28/5 39/29/5 37/30/5 +f 40/28/6 36/29/6 34/30/6 +f 42/33/1 44/34/1 43/35/1 +f 48/36/11 47/37/11 43/38/11 +f 46/34/3 45/35/3 47/39/3 +f 42/36/12 41/37/12 45/38/12 +f 43/36/13 47/37/13 45/38/13 +f 48/36/14 44/37/14 42/38/14 +f 50/33/4 52/34/4 51/35/4 +f 56/36/15 55/37/15 51/38/15 +f 54/34/2 53/35/2 55/39/2 +f 50/36/16 49/37/16 53/38/16 +f 51/36/17 55/37/17 53/38/17 +f 56/36/18 52/37/18 50/38/18 +f 58/33/3 60/34/3 59/35/3 +f 64/36/19 63/37/19 59/38/19 +f 62/34/1 61/35/1 63/39/1 +f 58/36/20 57/37/20 61/38/20 +f 59/36/21 63/37/21 61/38/21 +f 62/40/22 64/36/22 60/37/22 +f 66/33/2 68/34/2 67/35/2 +f 72/36/23 71/37/23 67/38/23 +f 70/34/4 69/35/4 71/39/4 +f 66/36/24 65/37/24 69/38/24 +f 67/36/25 71/37/25 69/38/25 +f 72/36/26 68/37/26 66/38/26 +f 76/34/1 75/35/1 73/39/1 +f 80/36/2 79/37/2 75/38/2 +f 78/34/3 77/35/3 79/39/3 +f 74/36/4 73/37/4 77/38/4 +f 75/36/5 79/37/5 77/38/5 +f 80/36/6 76/37/6 74/38/6 +f 84/34/1 83/35/1 81/39/1 +f 88/36/2 87/37/2 83/38/2 +f 86/34/3 85/35/3 87/39/3 +f 82/36/4 81/37/4 85/38/4 +f 83/36/5 87/37/5 85/38/5 +f 88/36/6 84/37/6 82/38/6 +f 92/34/3 91/35/3 89/39/3 +f 96/36/27 95/37/27 91/38/27 +f 94/34/1 93/35/1 95/39/1 +f 90/36/28 89/37/28 93/38/28 +f 91/36/29 95/37/29 93/38/29 +f 94/40/30 96/36/30 92/37/30 +f 98/33/4 100/34/4 99/35/4 +f 104/36/31 103/37/31 99/38/31 +f 102/34/2 101/35/2 103/39/2 +f 98/36/32 97/37/32 101/38/32 +f 97/40/33 99/36/33 103/37/33 +f 104/36/34 100/37/34 98/38/34 +f 108/34/4 107/35/4 105/39/4 +f 112/36/35 111/37/35 107/38/35 +f 110/34/2 109/35/2 111/39/2 +f 106/36/36 105/37/36 109/38/36 +f 107/36/37 111/37/37 109/38/37 +f 112/36/38 108/37/38 106/38/38 +f 116/41/39 115/42/39 113/43/39 +f 120/41/40 119/42/40 115/43/40 +f 118/41/41 117/42/41 119/43/41 +f 114/41/42 113/42/42 117/43/42 +f 115/41/5 119/42/5 117/43/5 +f 120/41/6 116/42/6 114/43/6 +f 122/44/39 124/41/39 123/42/39 +f 128/41/42 127/42/42 123/43/42 +f 126/41/41 125/42/41 127/43/41 +f 122/41/40 121/42/40 125/43/40 +f 123/41/6 127/42/6 125/43/6 +f 128/41/5 124/42/5 122/43/5 +f 132/45/43 131/46/43 129/47/43 +f 136/45/44 135/46/44 131/47/44 +f 134/45/45 133/46/45 135/47/45 +f 130/45/46 129/46/46 133/47/46 +f 129/48/5 131/45/5 135/46/5 +f 136/45/6 132/46/6 130/47/6 +f 140/45/47 139/46/47 137/47/47 +f 144/45/48 143/46/48 139/47/48 +f 142/45/49 141/46/49 143/47/49 +f 138/45/50 137/46/50 141/47/50 +f 139/45/5 143/46/5 141/47/5 +f 144/45/6 140/46/6 138/47/6 +f 148/45/51 147/46/51 145/47/51 +f 152/45/52 151/46/52 147/47/52 +f 150/45/53 149/46/53 151/47/53 +f 146/45/54 145/46/54 149/47/54 +f 145/48/6 147/45/6 151/46/6 +f 152/45/5 148/46/5 146/47/5 +f 156/45/55 155/46/55 153/47/55 +f 160/45/56 159/46/56 155/47/56 +f 158/45/57 157/46/57 159/47/57 +f 154/45/58 153/46/58 157/47/58 +f 155/45/6 159/46/6 157/47/6 +f 160/45/5 156/46/5 154/47/5 +f 162/49/1 164/50/1 163/51/1 +f 168/52/30 167/53/30 163/54/30 +f 166/50/3 165/51/3 167/55/3 +f 162/56/29 161/57/29 165/58/29 +f 163/50/28 167/51/28 165/55/28 +f 168/50/27 164/51/27 162/55/27 +f 170/59/1 172/60/1 171/61/1 +f 176/62/59 175/63/59 171/64/59 +f 174/60/3 173/61/3 175/65/3 +f 170/62/60 169/63/60 173/64/60 +f 171/60/61 175/61/61 173/65/61 +f 176/60/62 172/61/62 170/65/62 +f 180/60/1 179/61/1 177/65/1 +f 180/66/63 184/62/63 183/63/63 +f 184/59/3 182/60/3 181/61/3 +f 178/62/64 177/63/64 181/64/64 +f 179/60/65 183/61/65 181/65/65 +f 184/60/66 180/61/66 178/65/66 +f 188/62/67 187/63/67 185/64/67 +f 192/60/2 191/61/2 187/65/2 +f 190/62/68 189/63/68 191/64/68 +f 186/60/4 185/61/4 189/65/4 +f 187/60/69 191/61/69 189/65/69 +f 192/60/70 188/61/70 186/65/70 +f 196/60/1 195/61/1 193/65/1 +f 200/62/71 199/63/71 195/64/71 +f 200/59/3 198/60/3 197/61/3 +f 194/62/72 193/63/72 197/64/72 +f 195/60/73 199/61/73 197/65/73 +f 200/60/74 196/61/74 194/65/74 +f 204/62/75 203/63/75 201/64/75 +f 204/59/2 208/60/2 207/61/2 +f 206/62/76 205/63/76 207/64/76 +f 202/60/4 201/61/4 205/65/4 +f 203/60/77 207/61/77 205/65/77 +f 208/60/78 204/61/78 202/65/78 +f 212/62/67 211/63/67 209/64/67 +f 216/60/2 215/61/2 211/65/2 +f 214/62/68 213/63/68 215/64/68 +f 210/60/4 209/61/4 213/65/4 +f 211/60/69 215/61/69 213/65/69 +f 216/60/70 212/61/70 210/65/70 +f 220/62/79 219/63/79 217/64/79 +f 224/60/2 223/61/2 219/65/2 +f 222/62/80 221/63/80 223/64/80 +f 222/59/4 218/60/4 217/61/4 +f 219/60/81 223/61/81 221/65/81 +f 222/59/82 224/60/82 220/61/82 +f 228/67/83 227/68/83 225/69/83 +f 228/70/2 232/71/2 231/72/2 +f 230/67/84 229/68/84 231/69/84 +f 226/71/4 225/72/4 229/73/4 +f 227/71/85 231/72/85 229/73/85 +f 232/71/86 228/72/86 226/73/86 +f 236/74/83 235/75/83 233/76/83 +f 240/74/2 239/75/2 235/76/2 +f 238/77/84 237/78/84 239/79/84 +f 238/80/4 234/74/4 233/75/4 +f 235/74/85 239/75/85 237/76/85 +f 240/74/86 236/75/86 234/76/86 +f 244/81/87 243/82/87 241/83/87 +f 248/84/2 247/85/2 243/86/2 +f 248/87/88 246/88/88 245/89/88 +f 246/90/4 242/84/4 241/85/4 +f 243/91/89 247/92/89 245/93/89 +f 248/91/90 244/92/90 242/93/90 +f 252/94/87 251/95/87 249/96/87 +f 252/97/2 256/98/2 255/99/2 +f 254/100/88 253/101/88 255/102/88 +f 250/98/4 249/99/4 253/103/4 +f 251/98/89 255/99/89 253/103/89 +f 254/97/90 256/98/90 252/99/90 +f 260/10/10 259/11/10 257/12/10 +f 264/13/7 263/14/7 259/15/7 +f 262/16/8 261/17/8 263/18/8 +f 258/13/9 257/14/9 261/15/9 +f 257/104/5 259/19/5 263/20/5 +f 264/19/6 260/20/6 258/21/6 +f 268/28/7 267/29/7 265/30/7 +f 272/31/8 271/28/8 267/32/8 +f 270/28/9 269/29/9 271/30/9 +f 266/31/10 265/28/10 269/32/10 +f 265/105/5 267/28/5 271/29/5 +f 270/105/6 272/28/6 268/29/6 +f 276/7/4 275/8/4 273/9/4 +f 280/7/1 279/8/1 275/9/1 +f 278/7/2 277/8/2 279/9/2 +f 274/7/3 273/8/3 277/9/3 +f 275/7/5 279/8/5 277/9/5 +f 280/7/6 276/8/6 274/9/6 +f 2/106/1 4/1/1 1/3/1 +f 4/106/2 8/1/2 3/3/2 +f 8/106/3 6/1/3 7/3/3 +f 6/106/4 2/1/4 5/3/4 +f 1/106/5 3/1/5 5/3/5 +f 6/107/6 8/4/6 2/6/6 +f 10/108/1 12/7/1 9/9/1 +f 12/108/2 16/7/2 11/9/2 +f 16/108/3 14/7/3 15/9/3 +f 14/108/4 10/7/4 13/9/4 +f 9/108/5 11/7/5 13/9/5 +f 14/108/6 16/7/6 10/9/6 +f 18/109/7 20/10/7 17/12/7 +f 20/110/8 24/13/8 19/15/8 +f 24/111/9 22/16/9 23/18/9 +f 22/110/10 18/13/10 21/15/10 +f 17/104/5 19/19/5 21/21/5 +f 22/104/6 24/19/6 18/21/6 +f 26/112/1 28/22/1 25/24/1 +f 28/112/2 32/22/2 27/24/2 +f 32/112/3 30/22/3 31/24/3 +f 30/112/4 26/22/4 29/24/4 +f 25/113/5 27/25/5 29/27/5 +f 30/113/6 32/25/6 26/27/6 +f 34/105/8 36/28/8 33/30/8 +f 36/114/9 40/31/9 35/32/9 +f 40/105/10 38/28/10 39/30/10 +f 38/114/7 34/31/7 37/32/7 +f 33/105/5 35/28/5 37/30/5 +f 38/105/6 40/28/6 34/30/6 +f 41/39/1 42/33/1 43/35/1 +f 44/40/11 48/36/11 43/38/11 +f 48/33/3 46/34/3 47/39/3 +f 46/40/12 42/36/12 45/38/12 +f 41/40/13 43/36/13 45/38/13 +f 46/40/14 48/36/14 42/38/14 +f 49/39/4 50/33/4 51/35/4 +f 52/40/15 56/36/15 51/38/15 +f 56/33/2 54/34/2 55/39/2 +f 54/40/16 50/36/16 53/38/16 +f 49/40/17 51/36/17 53/38/17 +f 54/40/18 56/36/18 50/38/18 +f 57/39/3 58/33/3 59/35/3 +f 60/40/19 64/36/19 59/38/19 +f 64/33/1 62/34/1 63/39/1 +f 62/40/20 58/36/20 61/38/20 +f 57/40/21 59/36/21 61/38/21 +f 58/38/22 62/40/22 60/37/22 +f 65/39/2 66/33/2 67/35/2 +f 68/40/23 72/36/23 67/38/23 +f 72/33/4 70/34/4 71/39/4 +f 70/40/24 66/36/24 69/38/24 +f 65/40/25 67/36/25 69/38/25 +f 70/40/26 72/36/26 66/38/26 +f 74/33/1 76/34/1 73/39/1 +f 76/40/2 80/36/2 75/38/2 +f 80/33/3 78/34/3 79/39/3 +f 78/40/4 74/36/4 77/38/4 +f 73/40/5 75/36/5 77/38/5 +f 78/40/6 80/36/6 74/38/6 +f 82/33/1 84/34/1 81/39/1 +f 84/40/2 88/36/2 83/38/2 +f 88/33/3 86/34/3 87/39/3 +f 86/40/4 82/36/4 85/38/4 +f 81/40/5 83/36/5 85/38/5 +f 86/40/6 88/36/6 82/38/6 +f 90/33/3 92/34/3 89/39/3 +f 92/40/27 96/36/27 91/38/27 +f 96/33/1 94/34/1 95/39/1 +f 94/40/28 90/36/28 93/38/28 +f 89/40/29 91/36/29 93/38/29 +f 90/38/30 94/40/30 92/37/30 +f 97/39/4 98/33/4 99/35/4 +f 100/40/31 104/36/31 99/38/31 +f 104/33/2 102/34/2 103/39/2 +f 102/40/32 98/36/32 101/38/32 +f 101/38/33 97/40/33 103/37/33 +f 102/40/34 104/36/34 98/38/34 +f 106/33/4 108/34/4 105/39/4 +f 108/40/35 112/36/35 107/38/35 +f 112/33/2 110/34/2 111/39/2 +f 110/40/36 106/36/36 109/38/36 +f 105/40/37 107/36/37 109/38/37 +f 110/40/38 112/36/38 106/38/38 +f 114/44/39 116/41/39 113/43/39 +f 116/44/40 120/41/40 115/43/40 +f 120/44/41 118/41/41 119/43/41 +f 118/44/42 114/41/42 117/43/42 +f 113/44/5 115/41/5 117/43/5 +f 118/44/6 120/41/6 114/43/6 +f 121/43/39 122/44/39 123/42/39 +f 124/44/42 128/41/42 123/43/42 +f 128/44/41 126/41/41 127/43/41 +f 126/44/40 122/41/40 125/43/40 +f 121/44/6 123/41/6 125/43/6 +f 126/44/5 128/41/5 122/43/5 +f 130/48/43 132/45/43 129/47/43 +f 132/48/44 136/45/44 131/47/44 +f 136/48/45 134/45/45 135/47/45 +f 134/48/46 130/45/46 133/47/46 +f 133/47/5 129/48/5 135/46/5 +f 134/48/6 136/45/6 130/47/6 +f 138/48/47 140/45/47 137/47/47 +f 140/48/48 144/45/48 139/47/48 +f 144/48/49 142/45/49 143/47/49 +f 142/48/50 138/45/50 141/47/50 +f 137/48/5 139/45/5 141/47/5 +f 142/48/6 144/45/6 138/47/6 +f 146/48/51 148/45/51 145/47/51 +f 148/48/52 152/45/52 147/47/52 +f 152/48/53 150/45/53 151/47/53 +f 150/48/54 146/45/54 149/47/54 +f 149/47/6 145/48/6 151/46/6 +f 150/48/5 152/45/5 146/47/5 +f 154/48/55 156/45/55 153/47/55 +f 156/48/56 160/45/56 155/47/56 +f 160/48/57 158/45/57 159/47/57 +f 158/48/58 154/45/58 157/47/58 +f 153/48/6 155/45/6 157/47/6 +f 158/48/5 160/45/5 154/47/5 +f 161/55/1 162/49/1 163/51/1 +f 164/115/30 168/52/30 163/54/30 +f 168/49/3 166/50/3 167/55/3 +f 166/116/29 162/56/29 165/58/29 +f 161/49/28 163/50/28 165/55/28 +f 166/49/27 168/50/27 162/55/27 +f 169/65/1 170/59/1 171/61/1 +f 172/66/59 176/62/59 171/64/59 +f 176/59/3 174/60/3 175/65/3 +f 174/66/60 170/62/60 173/64/60 +f 169/59/61 171/60/61 173/65/61 +f 174/59/62 176/60/62 170/65/62 +f 178/59/1 180/60/1 177/65/1 +f 179/64/63 180/66/63 183/63/63 +f 183/65/3 184/59/3 181/61/3 +f 182/66/64 178/62/64 181/64/64 +f 177/59/65 179/60/65 181/65/65 +f 182/59/66 184/60/66 178/65/66 +f 186/66/67 188/62/67 185/64/67 +f 188/59/2 192/60/2 187/65/2 +f 192/66/68 190/62/68 191/64/68 +f 190/59/4 186/60/4 189/65/4 +f 185/59/69 187/60/69 189/65/69 +f 190/59/70 192/60/70 186/65/70 +f 194/59/1 196/60/1 193/65/1 +f 196/66/71 200/62/71 195/64/71 +f 199/65/3 200/59/3 197/61/3 +f 198/66/72 194/62/72 197/64/72 +f 193/59/73 195/60/73 197/65/73 +f 198/59/74 200/60/74 194/65/74 +f 202/66/75 204/62/75 201/64/75 +f 203/65/2 204/59/2 207/61/2 +f 208/66/76 206/62/76 207/64/76 +f 206/59/4 202/60/4 205/65/4 +f 201/59/77 203/60/77 205/65/77 +f 206/59/78 208/60/78 202/65/78 +f 210/66/67 212/62/67 209/64/67 +f 212/59/2 216/60/2 211/65/2 +f 216/66/68 214/62/68 215/64/68 +f 214/59/4 210/60/4 213/65/4 +f 209/59/69 211/60/69 213/65/69 +f 214/59/70 216/60/70 210/65/70 +f 218/66/79 220/62/79 217/64/79 +f 220/59/2 224/60/2 219/65/2 +f 224/66/80 222/62/80 223/64/80 +f 221/65/4 222/59/4 217/61/4 +f 217/59/81 219/60/81 221/65/81 +f 218/65/82 222/59/82 220/61/82 +f 226/117/83 228/67/83 225/69/83 +f 227/73/2 228/70/2 231/72/2 +f 232/117/84 230/67/84 231/69/84 +f 230/70/4 226/71/4 229/73/4 +f 225/70/85 227/71/85 229/73/85 +f 230/70/86 232/71/86 226/73/86 +f 234/80/83 236/74/83 233/76/83 +f 236/80/2 240/74/2 235/76/2 +f 240/118/84 238/77/84 239/79/84 +f 237/76/4 238/80/4 233/75/4 +f 233/80/85 235/74/85 237/76/85 +f 238/80/86 240/74/86 234/76/86 +f 242/119/87 244/81/87 241/83/87 +f 244/90/2 248/84/2 243/86/2 +f 247/120/88 248/87/88 245/89/88 +f 245/86/4 246/90/4 241/85/4 +f 241/121/89 243/91/89 245/93/89 +f 246/121/90 248/91/90 242/93/90 +f 250/122/87 252/94/87 249/96/87 +f 251/103/2 252/97/2 255/99/2 +f 256/123/88 254/100/88 255/102/88 +f 254/97/4 250/98/4 253/103/4 +f 249/97/89 251/98/89 253/103/89 +f 250/103/90 254/97/90 252/99/90 +f 258/109/10 260/10/10 257/12/10 +f 260/110/7 264/13/7 259/15/7 +f 264/111/8 262/16/8 263/18/8 +f 262/110/9 258/13/9 261/15/9 +f 261/21/5 257/104/5 263/20/5 +f 262/104/6 264/19/6 258/21/6 +f 266/105/7 268/28/7 265/30/7 +f 268/114/8 272/31/8 267/32/8 +f 272/105/9 270/28/9 271/30/9 +f 270/114/10 266/31/10 269/32/10 +f 269/30/5 265/105/5 271/29/5 +f 266/30/6 270/105/6 268/29/6 +f 274/108/4 276/7/4 273/9/4 +f 276/108/1 280/7/1 275/9/1 +f 280/108/2 278/7/2 279/9/2 +f 278/108/3 274/7/3 277/9/3 +f 273/108/5 275/7/5 277/9/5 +f 278/108/6 280/7/6 274/9/6 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.mtl new file mode 100644 index 00000000..2b07ba69 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.mtl @@ -0,0 +1,31 @@ +# Blender MTL File: 'buggyWhole.blend' +# Material Count: 5 + +newmtl None +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_main + +newmtl None.001 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.010 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.025 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 + +newmtl None_storage.png +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_storage diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.obj new file mode 100644 index 00000000..96a6c468 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy.obj @@ -0,0 +1,4263 @@ +# Blender v2.76 (sub 0) OBJ File: 'buggyWhole.blend' +# www.blender.org +mtllib buggy.mtl +o Wheel_Right_Cover +v 0.923860 1.360271 0.355444 +v 0.923860 1.349508 -0.322901 +v 0.929918 1.323436 -0.295320 +v 0.635814 1.072476 -0.950726 +v 0.923860 1.031847 -0.904445 +v 0.635814 1.405730 -0.340635 +v 0.194501 0.928968 -0.787258 +v 0.347768 1.031847 -0.904445 +v 0.347768 1.349508 -0.322901 +v 0.923860 1.349508 -0.322901 +v 0.635814 1.417022 0.371009 +v 0.194501 1.207145 -0.277997 +v 0.347768 1.360271 0.355444 +v 0.923860 1.360271 0.355444 +v 0.923860 1.061254 0.948829 +v 0.194501 1.216571 0.316033 +v 0.194501 0.954720 0.835663 +v 0.347768 1.061254 0.948829 +v 0.635814 1.103327 0.993522 +v 0.923860 0.532578 1.298256 +v 0.194501 0.491756 1.141658 +v 0.347768 0.532577 1.298256 +v 0.635814 0.548699 1.360101 +v 0.923860 -0.084100 1.310096 +v 0.194502 -0.048272 1.152027 +v 0.347768 -0.084100 1.310096 +v 0.641871 1.046406 -0.896264 +v 0.641871 1.379660 -0.312294 +v 0.929917 1.005776 -0.851964 +v 0.200559 0.902897 -0.739795 +v 0.200559 1.181075 -0.252339 +v 0.353825 1.323436 -0.295320 +v 0.353825 1.005776 -0.851965 +v 0.641871 1.390952 0.368880 +v 0.929917 1.323436 -0.295320 +v 0.200559 1.190500 0.316258 +v 0.353825 1.334200 0.353982 +v 0.641871 1.077257 0.964740 +v 0.929917 1.035184 0.921961 +v 0.200559 0.928650 0.813639 +v 0.353825 1.035183 0.921960 +v 0.641871 0.522629 1.315624 +v 0.929918 0.506507 1.256426 +v 0.200559 0.465685 1.106533 +v 0.353825 0.506507 1.256426 +v 0.641871 -0.124320 1.327513 +v 0.929918 -0.110171 1.267760 +v 0.200559 -0.074342 1.116458 +v 0.353825 -0.110171 1.267760 +v 0.635814 -0.098250 1.372522 +v 0.929917 1.334200 0.353982 +v 0.929918 1.334200 0.353982 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.809306 0.257189 +vt 0.910683 0.300978 +vt 0.909096 0.189316 +vt 0.813439 0.213075 +vt 0.910412 0.212777 +vt 0.809743 0.623328 +vt 0.802385 0.525003 +vt 0.767033 0.617540 +vt 0.879881 0.601532 +vt 0.847297 0.523282 +vt 0.854311 0.617005 +vt 0.759950 0.422158 +vt 0.760018 0.523817 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.035491 0.837783 +vt 0.034640 0.930186 +vt 0.717705 0.625829 +vt 0.644609 0.664429 +vt 0.733319 0.644430 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.879881 0.623132 +vt 0.951706 0.579252 +vt 0.478460 0.803029 +vt 0.500209 0.712612 +vt 0.478430 0.717127 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.526132 0.633686 +vt 0.569142 0.723746 +vt 0.638417 0.647297 +vt 0.613524 0.724631 +vt 0.637757 0.727411 +vt 0.614279 0.633145 +vt 0.526305 0.822962 +vt 0.570116 0.826337 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.528666 0.900853 +vt 0.572592 0.908051 +vt 0.297174 0.516355 +vt 0.317310 0.526612 +vt 0.319506 0.435521 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.954393 0.894658 +vt 0.949424 0.850572 +vt 0.342811 0.434304 +vt 0.296963 0.355991 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.715956 0.387746 +vt 0.759950 0.463023 +vt 0.180286 0.719972 +vt 0.172762 0.815779 +vt 0.178395 0.816963 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.078713 0.832630 +vt 0.079592 0.837849 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.323102 0.798341 +vt 0.330475 0.803455 +vt 0.643343 0.684515 +vt 0.649849 0.688510 +vt 0.314149 0.815081 +vt 0.306193 0.772760 +vt 0.296963 0.773641 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.306170 0.727741 +vt 0.314792 0.700967 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vn 0.974900 0.222800 -0.003500 +vn 0.196900 0.860400 -0.470000 +vn -0.690900 0.634500 -0.346600 +vn -0.196900 0.860400 -0.470000 +vn 0.192500 0.981200 -0.015600 +vn -0.682300 0.730900 -0.011600 +vn -0.192500 0.981200 -0.015600 +vn 0.196400 0.875600 0.441200 +vn -0.689900 0.646500 0.325800 +vn -0.196400 0.875600 0.441200 +vn 0.205500 0.539600 0.816400 +vn -0.706800 0.390000 0.590100 +vn -0.205500 0.539600 0.816400 +vn 0.210900 0.018800 0.977300 +vn -0.716300 0.013400 0.697600 +vn -0.210900 0.018800 0.977300 +vn -0.194900 -0.851900 0.486100 +vn 0.687100 -0.631000 0.360100 +vn 0.194900 -0.851900 0.486100 +vn -0.192500 -0.981200 0.016300 +vn 0.682300 -0.730900 0.012100 +vn 0.192500 -0.981200 0.016300 +vn -0.194600 -0.867900 -0.456900 +vn 0.686600 -0.643400 -0.338700 +vn 0.194600 -0.867900 -0.456900 +vn -0.199500 -0.523900 -0.828100 +vn 0.695800 -0.384000 -0.606900 +vn 0.199500 -0.523900 -0.828100 +vn -0.202200 -0.018000 -0.979200 +vn 0.700900 -0.013100 -0.713100 +vn 0.202200 -0.018000 -0.979200 +vn -0.983300 -0.100300 -0.151700 +vn -0.974800 -0.223000 0.003500 +vn 0.986700 0.089600 0.135500 +vn -0.991300 -0.115500 0.063100 +vn -0.146700 -0.864400 0.480900 +vn 0.989900 0.002700 0.141700 +vn -0.967500 -0.225800 -0.113800 +vn 0.992100 0.109800 -0.060000 +vn -0.559600 -0.739100 0.375100 +vn 0.152200 -0.846200 0.510600 +vn -0.059000 -0.903000 -0.425700 +vn 0.985800 0.148500 0.078200 +vn 0.056600 -0.898100 -0.436200 +vn 0.230400 -0.860600 -0.454100 +vn -0.985800 -0.003200 -0.167600 +vn 0.974000 0.226500 -0.003800 +vn -0.990500 -0.073500 -0.116200 +vn -0.974000 -0.226300 0.003800 +vn 0.992500 0.065200 0.103100 +vn -0.985600 -0.146700 0.083700 +vn -0.146300 -0.851500 0.503500 +vn 0.990100 0.002600 0.140100 +vn -0.983900 -0.158200 -0.083300 +vn 0.986400 0.142900 -0.081500 +vn -0.576100 -0.702900 0.417100 +vn 0.151600 -0.831800 0.533900 +vn -0.059000 -0.896700 -0.438700 +vn 0.056600 -0.891500 -0.449400 +vn 0.208300 -0.845800 -0.491200 +vn -0.986200 -0.003000 -0.165700 +vn 0.969500 0.219000 0.110400 +usemtl None.001 +f 1/1/1 3/2/1 2/3/1 +f 4/4/2 6/5/2 5/6/2 +f 7/7/3 9/8/3 8/9/3 +f 8/9/4 6/5/4 4/4/4 +f 6/10/5 11/11/5 10/12/5 +f 12/13/6 13/14/6 9/15/6 +f 9/15/7 11/11/7 6/10/7 +f 11/11/8 15/16/8 14/17/8 +f 16/18/9 17/19/9 13/14/9 +f 13/14/10 18/20/10 11/11/10 +f 19/21/11 20/22/11 15/16/11 +f 17/19/12 21/23/12 18/20/12 +f 18/20/13 22/24/13 19/21/13 +f 23/25/14 24/26/14 20/27/14 +f 21/28/15 25/29/15 22/30/15 +f 22/31/16 26/32/16 23/25/16 +f 27/33/17 29/34/17 28/35/17 +f 30/36/18 32/37/18 31/38/18 +f 33/39/19 28/35/19 32/40/19 +f 28/41/20 35/42/20 34/43/20 +f 31/44/21 37/45/21 36/46/21 +f 32/47/22 34/43/22 37/45/22 +f 34/43/23 39/48/23 38/49/23 +f 36/46/24 37/45/24 40/50/24 +f 37/45/25 34/43/25 41/51/25 +f 38/49/26 43/52/26 42/53/26 +f 40/54/27 41/55/27 44/56/27 +f 41/51/28 38/49/28 45/57/28 +f 42/58/29 47/59/29 46/60/29 +f 44/56/30 45/61/30 48/62/30 +f 45/63/31 42/58/31 49/64/31 +f 17/65/32 40/66/32 21/28/32 +f 12/67/33 31/68/33 16/69/33 +f 20/70/34 39/71/34 15/72/34 +f 7/73/35 30/74/35 12/67/35 +f 26/32/36 46/75/36 50/76/36 +f 24/77/37 43/78/37 20/70/37 +f 16/69/38 36/79/38 17/65/38 +f 10/80/39 29/81/39 5/82/39 +f 25/29/40 49/83/40 26/84/40 +f 50/76/41 46/75/41 24/26/41 +f 5/85/42 27/86/42 4/87/42 +f 39/71/43 51/88/43 15/72/43 +f 4/87/44 27/86/44 8/89/44 +f 8/89/45 33/90/45 7/91/45 +f 21/28/46 44/92/46 25/29/46 +f 52/93/47 3/2/47 1/1/47 +f 5/6/2 6/5/2 10/94/2 +f 12/95/3 9/8/3 7/7/3 +f 9/8/4 6/5/4 8/9/4 +f 10/12/5 11/11/5 14/17/5 +f 16/18/6 13/14/6 12/13/6 +f 13/14/7 11/11/7 9/15/7 +f 19/21/8 15/16/8 11/11/8 +f 13/14/9 17/19/9 18/20/9 +f 11/11/10 18/20/10 19/21/10 +f 23/96/11 20/22/11 19/21/11 +f 18/20/12 21/23/12 22/24/12 +f 19/21/13 22/24/13 23/96/13 +f 50/76/14 24/26/14 23/25/14 +f 22/30/15 25/29/15 26/84/15 +f 23/25/16 26/32/16 50/76/16 +f 28/35/17 29/34/17 35/97/17 +f 33/98/18 32/37/18 30/36/18 +f 27/33/19 28/35/19 33/39/19 +f 34/43/20 35/42/20 51/99/20 +f 32/47/21 37/45/21 31/44/21 +f 28/41/22 34/43/22 32/47/22 +f 51/99/23 39/48/23 34/43/23 +f 40/50/24 37/45/24 41/51/24 +f 41/51/25 34/43/25 38/49/25 +f 39/48/26 43/52/26 38/49/26 +f 44/56/27 41/55/27 45/61/27 +f 45/57/28 38/49/28 42/53/28 +f 43/100/29 47/59/29 42/58/29 +f 48/62/30 45/61/30 49/101/30 +f 49/64/31 42/58/31 46/60/31 +f 21/28/48 40/66/48 44/92/48 +f 16/69/49 31/68/49 36/79/49 +f 43/78/50 39/71/50 20/70/50 +f 12/67/51 30/74/51 31/68/51 +f 49/102/52 46/75/52 26/32/52 +f 47/103/53 43/78/53 24/77/53 +f 17/65/54 36/79/54 40/66/54 +f 35/104/55 29/81/55 10/80/55 +f 48/105/56 49/83/56 25/29/56 +f 24/26/57 46/75/57 47/106/57 +f 29/107/58 27/86/58 5/85/58 +f 8/89/59 27/86/59 33/90/59 +f 7/91/60 33/90/60 30/108/60 +f 25/29/61 44/92/61 48/105/61 +f 15/72/62 51/88/62 14/109/62 +o Wheel_Left_Cover +v -0.923857 1.360270 0.355441 +v -0.923857 1.349506 -0.322904 +v -0.929915 1.323435 -0.295323 +v -0.635811 1.072474 -0.950729 +v -0.923857 1.031845 -0.904448 +v -0.635811 1.405729 -0.340638 +v -0.194498 0.928966 -0.787261 +v -0.347764 1.031845 -0.904448 +v -0.347765 1.349506 -0.322904 +v -0.923857 1.349506 -0.322904 +v -0.635811 1.417021 0.371006 +v -0.194498 1.207144 -0.278000 +v -0.347765 1.360270 0.355441 +v -0.923857 1.360270 0.355441 +v -0.923857 1.061253 0.948826 +v -0.194498 1.216570 0.316030 +v -0.194498 0.954719 0.835660 +v -0.347765 1.061253 0.948826 +v -0.635811 1.103326 0.993519 +v -0.923857 0.532577 1.298253 +v -0.194498 0.491755 1.141655 +v -0.347765 0.532576 1.298253 +v -0.635811 0.548698 1.360098 +v -0.923857 -0.084101 1.310093 +v -0.194499 -0.048273 1.152024 +v -0.347765 -0.084101 1.310093 +v -0.641868 1.046404 -0.896267 +v -0.641868 1.379658 -0.312297 +v -0.929914 1.005774 -0.851967 +v -0.200556 0.902896 -0.739798 +v -0.200556 1.181073 -0.252342 +v -0.353822 1.323435 -0.295323 +v -0.353822 1.005774 -0.851968 +v -0.641868 1.390951 0.368877 +v -0.929914 1.323435 -0.295323 +v -0.200556 1.190499 0.316255 +v -0.353822 1.334199 0.353979 +v -0.641868 1.077256 0.964737 +v -0.929914 1.035183 0.921958 +v -0.200556 0.928649 0.813636 +v -0.353822 1.035182 0.921957 +v -0.641868 0.522628 1.315621 +v -0.929916 0.506506 1.256423 +v -0.200556 0.465684 1.106530 +v -0.353822 0.506506 1.256423 +v -0.641868 -0.124321 1.327510 +v -0.929916 -0.110172 1.267756 +v -0.200556 -0.074343 1.116454 +v -0.353822 -0.110172 1.267757 +v -0.635811 -0.098251 1.372519 +v -0.929914 1.334199 0.353979 +v -0.929915 1.334199 0.353979 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.910683 0.300978 +vt 0.809306 0.257189 +vt 0.909096 0.189316 +vt 0.910412 0.212777 +vt 0.813439 0.213075 +vt 0.809743 0.623328 +vt 0.767033 0.617540 +vt 0.802385 0.525003 +vt 0.879881 0.601532 +vt 0.854311 0.617005 +vt 0.847297 0.523282 +vt 0.760018 0.523817 +vt 0.759950 0.422158 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.034640 0.930186 +vt 0.035491 0.837783 +vt 0.717705 0.625829 +vt 0.733319 0.644430 +vt 0.644609 0.664429 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.951706 0.579252 +vt 0.879881 0.623132 +vt 0.478460 0.803029 +vt 0.478430 0.717127 +vt 0.500209 0.712612 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.569142 0.723746 +vt 0.526132 0.633686 +vt 0.638417 0.647297 +vt 0.637757 0.727411 +vt 0.613524 0.724631 +vt 0.614279 0.633145 +vt 0.570116 0.826337 +vt 0.526305 0.822962 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.572592 0.908051 +vt 0.528666 0.900853 +vt 0.297174 0.516355 +vt 0.319506 0.435521 +vt 0.317310 0.526612 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.949424 0.850572 +vt 0.954393 0.894658 +vt 0.296963 0.355991 +vt 0.342811 0.434304 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.759950 0.463023 +vt 0.715956 0.387746 +vt 0.180286 0.719972 +vt 0.178395 0.816963 +vt 0.172762 0.815779 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.079592 0.837849 +vt 0.078713 0.832630 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.330475 0.803455 +vt 0.323102 0.798341 +vt 0.649849 0.688510 +vt 0.643343 0.684515 +vt 0.314149 0.815081 +vt 0.296963 0.773641 +vt 0.306193 0.772760 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.314792 0.700967 +vt 0.306170 0.727741 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vn 0.974900 -0.222800 0.003500 +vn -0.196900 0.860400 -0.470000 +vn 0.690900 0.634500 -0.346600 +vn 0.196900 0.860400 -0.470000 +vn -0.192500 0.981200 -0.015600 +vn 0.682300 0.730900 -0.011600 +vn 0.192500 0.981200 -0.015600 +vn -0.196400 0.875600 0.441200 +vn 0.689900 0.646500 0.325800 +vn 0.196400 0.875600 0.441200 +vn -0.205500 0.539600 0.816400 +vn 0.706800 0.390000 0.590100 +vn 0.205500 0.539600 0.816400 +vn -0.210900 0.018800 0.977300 +vn 0.716300 0.013400 0.697600 +vn 0.210900 0.018800 0.977300 +vn 0.194900 -0.851900 0.486100 +vn -0.687100 -0.631000 0.360100 +vn -0.194900 -0.851900 0.486100 +vn 0.192500 -0.981200 0.016300 +vn -0.682300 -0.730900 0.012100 +vn -0.192500 -0.981200 0.016300 +vn 0.194600 -0.867900 -0.456900 +vn -0.686600 -0.643400 -0.338700 +vn -0.194600 -0.867900 -0.456900 +vn 0.199500 -0.523900 -0.828100 +vn -0.695800 -0.384000 -0.606900 +vn -0.199500 -0.523900 -0.828100 +vn 0.202200 -0.018000 -0.979200 +vn -0.700900 -0.013100 -0.713100 +vn -0.202200 -0.018000 -0.979200 +vn 0.983300 -0.100300 -0.151700 +vn 0.974800 -0.223000 0.003500 +vn -0.986700 0.089600 0.135500 +vn 0.991300 -0.115500 0.063100 +vn 0.146700 -0.864400 0.480900 +vn -0.989900 0.002700 0.141700 +vn 0.967500 -0.225800 -0.113800 +vn -0.992100 0.109800 -0.060000 +vn 0.559600 -0.739100 0.375100 +vn -0.152200 -0.846200 0.510600 +vn 0.059000 -0.903000 -0.425700 +vn -0.985800 0.148500 0.078200 +vn -0.056600 -0.898100 -0.436200 +vn -0.230400 -0.860600 -0.454100 +vn 0.985800 -0.003200 -0.167600 +vn 0.974000 -0.226500 0.003800 +vn 0.990500 -0.073500 -0.116200 +vn 0.974000 -0.226300 0.003800 +vn -0.992500 0.065200 0.103100 +vn 0.985600 -0.146700 0.083700 +vn 0.146300 -0.851500 0.503500 +vn -0.990100 0.002600 0.140100 +vn 0.983900 -0.158200 -0.083300 +vn -0.986400 0.142900 -0.081500 +vn 0.576100 -0.702900 0.417100 +vn -0.151600 -0.831800 0.533900 +vn 0.059000 -0.896700 -0.438700 +vn -0.056600 -0.891500 -0.449400 +vn -0.208300 -0.845800 -0.491200 +vn 0.986200 -0.003000 -0.165700 +vn -0.969500 0.219000 0.110400 +usemtl None.010 +f 53/110/63 55/111/63 54/112/63 +f 56/113/64 57/114/64 58/115/64 +f 59/116/65 60/117/65 61/118/65 +f 60/117/66 56/113/66 58/115/66 +f 58/119/67 62/120/67 63/121/67 +f 64/122/68 61/123/68 65/124/68 +f 61/123/69 58/119/69 63/121/69 +f 63/121/70 66/125/70 67/126/70 +f 68/127/71 65/124/71 69/128/71 +f 65/124/72 63/121/72 70/129/72 +f 71/130/73 67/126/73 72/131/73 +f 69/128/74 70/129/74 73/132/74 +f 70/129/75 71/130/75 74/133/75 +f 75/134/76 72/135/76 76/136/76 +f 73/137/77 74/138/77 77/139/77 +f 74/140/78 75/134/78 78/141/78 +f 79/142/79 80/143/79 81/144/79 +f 82/145/80 83/146/80 84/147/80 +f 85/148/81 84/149/81 80/143/81 +f 80/150/82 86/151/82 87/152/82 +f 83/153/83 88/154/83 89/155/83 +f 84/156/84 89/155/84 86/151/84 +f 86/151/85 90/157/85 91/158/85 +f 88/154/86 92/159/86 89/155/86 +f 89/155/87 93/160/87 86/151/87 +f 90/157/88 94/161/88 95/162/88 +f 92/163/89 96/164/89 93/165/89 +f 93/160/90 97/166/90 90/157/90 +f 94/167/91 98/168/91 99/169/91 +f 96/164/92 100/170/92 97/171/92 +f 97/172/93 101/173/93 94/167/93 +f 69/174/94 73/137/94 92/175/94 +f 64/176/95 68/177/95 83/178/95 +f 72/179/96 67/180/96 91/181/96 +f 59/182/97 64/176/97 82/183/97 +f 78/141/98 102/184/98 98/185/98 +f 76/186/99 72/179/99 95/187/99 +f 68/177/100 69/174/100 88/188/100 +f 62/189/101 57/190/101 81/191/101 +f 77/139/102 78/192/102 101/193/102 +f 102/184/103 76/136/103 98/185/103 +f 57/194/104 56/195/104 79/196/104 +f 91/181/105 67/180/105 103/197/105 +f 56/195/106 60/198/106 79/196/106 +f 60/198/107 59/199/107 85/200/107 +f 73/137/108 77/139/108 96/201/108 +f 104/202/109 55/111/109 53/110/109 +f 57/114/64 62/203/64 58/115/64 +f 64/204/65 59/116/65 61/118/65 +f 61/118/66 60/117/66 58/115/66 +f 62/120/67 66/125/67 63/121/67 +f 68/127/68 64/122/68 65/124/68 +f 65/124/69 61/123/69 63/121/69 +f 71/130/70 63/121/70 67/126/70 +f 65/124/71 70/129/71 69/128/71 +f 63/121/72 71/130/72 70/129/72 +f 75/205/73 71/130/73 72/131/73 +f 70/129/74 74/133/74 73/132/74 +f 71/130/75 75/205/75 74/133/75 +f 102/184/76 75/134/76 76/136/76 +f 74/138/77 78/192/77 77/139/77 +f 75/134/78 102/184/78 78/141/78 +f 80/143/79 87/206/79 81/144/79 +f 85/207/80 82/145/80 84/147/80 +f 79/142/81 85/148/81 80/143/81 +f 86/151/82 103/208/82 87/152/82 +f 84/156/83 83/153/83 89/155/83 +f 80/150/84 84/156/84 86/151/84 +f 103/208/85 86/151/85 91/158/85 +f 92/159/86 93/160/86 89/155/86 +f 93/160/87 90/157/87 86/151/87 +f 91/158/88 90/157/88 95/162/88 +f 96/164/89 97/171/89 93/165/89 +f 97/166/90 94/161/90 90/157/90 +f 95/209/91 94/167/91 99/169/91 +f 100/170/92 101/210/92 97/171/92 +f 101/173/93 98/168/93 94/167/93 +f 73/137/110 96/201/110 92/175/110 +f 68/177/111 88/188/111 83/178/111 +f 95/187/112 72/179/112 91/181/112 +f 64/176/113 83/178/113 82/183/113 +f 101/211/114 78/141/114 98/185/114 +f 99/212/115 76/186/115 95/187/115 +f 69/174/116 92/175/116 88/188/116 +f 87/213/117 62/189/117 81/191/117 +f 100/214/118 77/139/118 101/193/118 +f 76/136/119 99/215/119 98/185/119 +f 81/216/120 57/194/120 79/196/120 +f 60/198/121 85/200/121 79/196/121 +f 59/199/122 82/217/122 85/200/122 +f 77/139/123 100/214/123 96/201/123 +f 67/180/124 66/218/124 103/197/124 +o RadarDish_Dish +v -0.046474 0.003334 -0.042163 +v 0.043038 0.003334 0.047349 +v -0.046474 0.003334 0.047349 +v 0.008856 0.015866 -0.005849 +v -0.243333 0.015866 -0.529526 +v 0.008856 0.015866 -0.587086 +v -0.445573 0.015866 -0.368244 +v -0.557808 0.015866 -0.135186 +v -0.557808 0.015866 0.123489 +v -0.445573 0.015866 0.356547 +v -0.243333 0.015866 0.517828 +v 0.008856 0.015866 0.575389 +v 0.261046 0.015866 0.517828 +v 0.463286 0.015866 0.356547 +v 0.575521 0.015866 0.123489 +v 0.575521 0.015866 -0.135186 +v 0.463286 0.015866 -0.368244 +v 0.261046 0.015866 -0.529526 +v -0.697838 0.123611 -0.569419 +v -1.097623 0.309456 -0.258395 +v -0.878471 0.309456 -0.713469 +v -0.697838 0.123611 0.557722 +v -0.483574 0.309457 1.016692 +v -0.878471 0.309457 0.701772 +v 0.401042 0.123611 0.808534 +v 0.715551 0.123611 0.557722 +v 0.501286 0.309457 1.016692 +v 0.890090 0.123611 -0.206985 +v 0.896184 0.309456 -0.713469 +v 1.115336 0.309456 -0.258395 +v -0.383330 0.123611 -0.820231 +v -0.483573 0.309456 -1.028389 +v -0.872377 0.123611 0.195287 +v -1.097623 0.309457 0.246698 +v 0.008856 0.123611 0.898048 +v 0.008856 0.309457 1.129086 +v 0.890090 0.123611 0.195287 +v 1.115336 0.309457 0.246698 +v 0.401042 0.123611 -0.820231 +v 0.008856 0.309456 -1.140783 +v 0.501286 0.309456 -1.028390 +v -0.872377 0.123611 -0.206984 +v -0.383330 0.123611 0.808534 +v 0.896184 0.309457 0.701772 +v 0.715551 0.123611 -0.569419 +v 0.008856 0.123611 -0.909745 +v 0.896184 0.309456 -0.713469 +v 0.008856 0.309456 -1.140783 +v -0.878471 0.309456 -0.713469 +v -0.878471 0.309457 0.701772 +v 0.501286 0.309457 1.016692 +v 1.115336 0.309456 -0.258395 +v -0.483573 0.309456 -1.028389 +v -1.097623 0.309457 0.246698 +v 0.008856 0.309457 1.129086 +v 1.115336 0.309457 0.246698 +v 0.501286 0.309456 -1.028390 +v -1.097623 0.309456 -0.258395 +v -0.483574 0.309457 1.016692 +v 0.896184 0.309457 0.701772 +v -0.562796 0.577838 -1.192896 +v -1.275634 0.577838 0.287328 +v 0.580508 0.577838 1.181199 +v 0.008856 0.577838 1.311675 +v 1.293347 0.577838 -0.299025 +v 1.293347 0.577838 0.287328 +v 0.008856 0.577838 -1.323372 +v 0.580508 0.577838 -1.192896 +v -1.275634 0.577838 -0.299025 +v -0.562796 0.577838 1.181199 +v 1.038938 0.577839 0.815614 +v 1.038938 0.577838 -0.827312 +v -1.021225 0.577838 -0.827311 +v -1.021225 0.577839 0.815614 +v 0.008856 0.051278 -0.005849 +v 0.261046 0.051278 -0.529526 +v 0.008856 0.051278 -0.587086 +v 0.463286 0.051278 -0.368244 +v 0.575521 0.051278 -0.135186 +v 0.575521 0.051278 0.123489 +v 0.463286 0.051278 0.356547 +v 0.261046 0.051278 0.517828 +v 0.008856 0.051278 0.575389 +v -0.243333 0.051278 0.517828 +v -0.445573 0.051278 0.356547 +v -0.557808 0.051278 0.123489 +v -0.557808 0.051278 -0.135186 +v -0.445573 0.051278 -0.368244 +v -0.243333 0.051278 -0.529526 +v 0.715551 0.159023 -0.569419 +v 1.115336 0.344869 -0.258395 +v 0.896184 0.344869 -0.713469 +v 0.715551 0.159024 0.557721 +v 0.501286 0.344869 1.016692 +v 0.896184 0.344869 0.701771 +v -0.383330 0.159024 0.808534 +v -0.878471 0.344869 0.701772 +v -0.483573 0.344869 1.016692 +v -0.872377 0.159023 -0.206985 +v -0.878471 0.344869 -0.713469 +v -1.097623 0.344869 -0.258395 +v 0.401042 0.159023 -0.820231 +v 0.501286 0.344869 -1.028390 +v 0.890090 0.159023 0.195287 +v 1.115336 0.344869 0.246698 +v 0.008856 0.159024 0.898048 +v 0.008856 0.344869 1.129086 +v -0.872377 0.159023 0.195287 +v -1.097623 0.344869 0.246698 +v -0.383329 0.159023 -0.820231 +v 0.008856 0.159023 -0.909745 +v -0.483573 0.344869 -1.028390 +v 0.890090 0.159023 -0.206984 +v 0.401042 0.159024 0.808534 +v -0.697838 0.159024 0.557722 +v -0.697838 0.159023 -0.569419 +v 0.008856 0.344868 -1.140783 +v -0.878471 0.344869 -0.713469 +v 0.008856 0.344868 -1.140783 +v 0.896184 0.344869 -0.713469 +v 0.896184 0.344869 0.701771 +v -0.483573 0.344869 1.016692 +v -1.097623 0.344869 -0.258395 +v 0.501286 0.344869 -1.028390 +v 1.115336 0.344869 0.246698 +v 0.008856 0.344869 1.129086 +v -1.097623 0.344869 0.246698 +v -0.483573 0.344869 -1.028390 +v 1.115336 0.344869 -0.258395 +v 0.501286 0.344869 1.016692 +v -0.878471 0.344869 0.701772 +v 0.580508 0.613250 -1.192896 +v 1.293347 0.613251 0.287328 +v 0.008856 0.613251 1.311675 +v -1.275634 0.613251 -0.299025 +v -1.275634 0.613251 0.287328 +v 0.008856 0.613250 -1.323372 +v -0.562795 0.613250 -1.192896 +v 1.293347 0.613251 -0.299025 +v 0.580508 0.613251 1.181199 +v -1.021225 0.613251 0.815614 +v -1.021225 0.613251 -0.827312 +v 1.038938 0.613251 -0.827311 +v 1.038938 0.613251 0.815614 +v -0.562796 0.613251 1.181199 +v 0.043038 0.003334 -0.042163 +vt 0.775111 0.244736 +vt 0.783916 0.253595 +vt 0.783943 0.244763 +vt 0.666182 0.335891 +vt 0.610276 0.323104 +vt 0.610265 0.348628 +vt 0.621360 0.300113 +vt 0.641321 0.284208 +vt 0.666207 0.278540 +vt 0.691087 0.284230 +vt 0.711035 0.300152 +vt 0.722099 0.323153 +vt 0.722089 0.348677 +vt 0.711005 0.371668 +vt 0.691044 0.387573 +vt 0.666158 0.393242 +vt 0.641278 0.387552 +vt 0.621330 0.371629 +vt 0.596374 0.280276 +vt 0.617355 0.235039 +vt 0.578378 0.266095 +vt 0.704809 0.255576 +vt 0.753480 0.266172 +vt 0.714529 0.235081 +vt 0.753020 0.355799 +vt 0.735783 0.391553 +vt 0.775063 0.360922 +vt 0.666041 0.425103 +vt 0.617270 0.436829 +vt 0.665852 0.447940 +vt 0.579137 0.316030 +vt 0.556736 0.310988 +vt 0.666116 0.246726 +vt 0.665947 0.223970 +vt 0.753036 0.316106 +vt 0.775084 0.311084 +vt 0.635772 0.848613 +vt 0.658354 0.893368 +vt 0.658505 0.843530 +vt 0.596327 0.391492 +vt 0.556715 0.360826 +vt 0.578319 0.405738 +vt 0.882742 0.409379 +vt 0.859827 0.364684 +vt 0.859980 0.414522 +vt 0.735830 0.280337 +vt 0.704741 0.416287 +vt 0.753421 0.405815 +vt 0.627348 0.416253 +vt 0.579121 0.355723 +vt 0.627416 0.255542 +vt 0.000000 0.000000 +vt 0.901619 0.073843 +vt 0.901617 0.034877 +vt 0.869343 0.065927 +vt 0.829113 0.790341 +vt 0.829335 0.745437 +vt 0.796449 0.786432 +vt 0.863999 0.122219 +vt 0.831441 0.065914 +vt 0.831559 0.122319 +vt 0.557300 0.790322 +vt 0.589743 0.844205 +vt 0.589917 0.786350 +vt 0.901321 0.171019 +vt 0.869221 0.122332 +vt 0.868997 0.178737 +vt 0.829266 0.840179 +vt 0.796626 0.844288 +vt 0.864195 0.170808 +vt 0.831787 0.178724 +vt 0.557136 0.745496 +vt 0.589727 0.734313 +vt 0.901080 0.209984 +vt 0.868717 0.223970 +vt 0.901514 0.122431 +vt 0.829763 0.885080 +vt 0.797203 0.896413 +vt 0.864446 0.209772 +vt 0.832078 0.223957 +vt 0.863897 0.073631 +vt 0.863909 0.034666 +vt 0.557150 0.840159 +vt 0.589237 0.896420 +vt 0.666157 0.112044 +vt 0.621304 0.076305 +vt 0.610239 0.099305 +vt 0.641252 0.060382 +vt 0.666133 0.054692 +vt 0.691019 0.060362 +vt 0.710980 0.076267 +vt 0.722063 0.099258 +vt 0.722074 0.124782 +vt 0.711009 0.147783 +vt 0.691061 0.163705 +vt 0.666180 0.169395 +vt 0.641294 0.163726 +vt 0.621333 0.147820 +vt 0.610250 0.124829 +vt 0.627333 0.031683 +vt 0.665854 0.000000 +vt 0.617271 0.011110 +vt 0.735768 0.056385 +vt 0.775064 0.087020 +vt 0.753422 0.042127 +vt 0.735813 0.167601 +vt 0.714528 0.212860 +vt 0.753479 0.181770 +vt 0.627399 0.192394 +vt 0.578377 0.181843 +vt 0.617353 0.212901 +vt 0.596311 0.056443 +vt 0.578320 0.042200 +vt 0.704726 0.031650 +vt 0.714446 0.011070 +vt 0.753020 0.131832 +vt 0.775084 0.136858 +vt 0.666099 0.201210 +vt 0.579120 0.131905 +vt 0.579104 0.092212 +vt 0.556735 0.136950 +vt 0.666026 0.022834 +vt 0.753004 0.092139 +vt 0.704791 0.192362 +vt 0.596356 0.167659 +vt 0.556715 0.087112 +vt 0.035410 0.745874 +vt 0.035159 0.706910 +vt 0.003091 0.738157 +vt 0.859827 0.414522 +vt 0.859330 0.369621 +vt 0.827747 0.410611 +vt 0.277928 0.794659 +vt 0.278121 0.746071 +vt 0.245493 0.794559 +vt 0.969850 0.302225 +vt 0.937564 0.248414 +vt 0.937744 0.306269 +vt 0.035708 0.843051 +vt 0.003318 0.794562 +vt 0.003437 0.850967 +vt 0.561420 0.840172 +vt 0.594187 0.786363 +vt 0.594013 0.844218 +vt 0.277822 0.843247 +vt 0.245371 0.850965 +vt 0.969691 0.347206 +vt 0.937559 0.358486 +vt 0.035697 0.882016 +vt 0.003423 0.896201 +vt 0.035606 0.794463 +vt 0.560985 0.885151 +vt 0.593507 0.896433 +vt 0.277825 0.882213 +vt 0.245374 0.896199 +vt 0.278362 0.707106 +vt 0.245717 0.738154 +vt 0.969694 0.252387 +vt 0.969255 0.207564 +vt 0.864950 0.122319 +vt 0.864727 0.178724 +vt 0.864446 0.223957 +vt 0.593997 0.734326 +vt 0.827184 0.020693 +vt 0.827170 0.065927 +vt 0.831454 0.020680 +vt 0.827289 0.122332 +vt 0.827516 0.178737 +vt 0.827808 0.223970 +vt 0.792436 0.734318 +vt 0.796706 0.734304 +vt 0.792179 0.786445 +vt 0.792356 0.844301 +vt 0.865070 0.020680 +vt 0.869340 0.020693 +vt 0.865073 0.065914 +vt 0.775084 0.253568 +vt 0.245997 0.692921 +vt 0.635652 0.888305 +vt 0.882621 0.369687 +vt 0.937054 0.196379 +vt 0.714444 0.436872 +vt 0.827170 0.358486 +vt 0.556715 0.885138 +vt 0.002800 0.692924 +vt 0.561570 0.790335 +vt 0.792934 0.896426 +vn 0.000000 -1.000000 -0.000000 +vn -0.573400 -0.771300 -0.276100 +vn -0.396800 -0.771300 0.497600 +vn 0.396800 -0.771300 0.497600 +vn 0.573400 -0.771300 -0.276100 +vn -0.396800 -0.771300 -0.497600 +vn -0.573400 -0.771300 0.276100 +vn 0.141600 -0.771300 0.620500 +vn 0.636400 -0.771300 0.000000 +vn 0.141600 -0.771300 -0.620500 +vn -0.636400 -0.771300 0.000000 +vn -0.141600 -0.771300 0.620500 +vn 0.573400 -0.771300 0.276100 +vn 0.396800 -0.771300 -0.497600 +vn -0.141600 -0.771300 -0.620500 +vn 0.072100 -0.946000 0.315900 +vn -0.291900 -0.946000 0.140600 +vn -0.202000 -0.946000 -0.253300 +vn 0.291900 -0.946000 -0.140600 +vn 0.202000 -0.946000 0.253300 +vn -0.202000 -0.946000 0.253300 +vn -0.291900 -0.946000 -0.140600 +vn -0.072100 -0.946000 -0.315900 +vn 0.202000 -0.946000 -0.253300 +vn 0.291900 -0.946000 0.140600 +vn -0.072100 -0.946000 0.315900 +vn -0.324000 -0.946000 -0.000000 +vn 0.072100 -0.946000 -0.315900 +vn 0.324000 -0.946000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn -0.519600 -0.552700 -0.651500 +vn -0.750800 -0.552700 0.361600 +vn 0.185400 -0.552700 0.812500 +vn 0.833400 -0.552700 -0.000000 +vn 0.185400 -0.552700 -0.812500 +vn -0.833400 -0.552700 0.000000 +vn -0.185400 -0.552700 0.812500 +vn 0.750800 -0.552700 0.361600 +vn 0.519600 -0.552700 -0.651500 +vn -0.185400 -0.552700 -0.812500 +vn -0.750800 -0.552700 -0.361600 +vn -0.519600 -0.552700 0.651500 +vn 0.519600 -0.552700 0.651500 +vn 0.750800 -0.552700 -0.361600 +vn 0.000000 1.000000 0.000000 +vn -0.573400 0.771300 0.276100 +vn -0.396800 0.771300 -0.497600 +vn 0.396800 0.771300 -0.497600 +vn 0.573400 0.771300 0.276100 +vn -0.396800 0.771300 0.497600 +vn -0.573400 0.771300 -0.276100 +vn 0.141600 0.771300 -0.620500 +vn 0.636400 0.771300 0.000000 +vn 0.141600 0.771300 0.620500 +vn -0.636400 0.771300 0.000000 +vn -0.141600 0.771300 -0.620500 +vn 0.573400 0.771300 -0.276100 +vn 0.396800 0.771300 0.497600 +vn -0.141600 0.771300 0.620500 +vn 0.072100 0.946000 -0.315900 +vn -0.291900 0.946000 -0.140600 +vn -0.202000 0.946000 0.253300 +vn 0.291900 0.946000 0.140600 +vn 0.202000 0.946000 -0.253300 +vn -0.202000 0.946000 -0.253300 +vn -0.291900 0.946000 0.140600 +vn -0.072100 0.946000 0.315900 +vn 0.202000 0.946000 0.253300 +vn 0.291900 0.946000 -0.140600 +vn -0.072100 0.946000 -0.315900 +vn -0.324000 0.946000 0.000000 +vn 0.072100 0.946000 0.315900 +vn 0.324000 0.946000 0.000000 +vn -0.519600 0.552700 0.651500 +vn -0.750800 0.552700 -0.361600 +vn 0.185400 0.552700 -0.812500 +vn 0.833400 0.552700 0.000000 +vn 0.185400 0.552700 0.812500 +vn -0.833400 0.552700 0.000000 +vn -0.185400 0.552700 -0.812500 +vn 0.750800 0.552700 -0.361600 +vn 0.519600 0.552700 0.651500 +vn -0.185400 0.552700 0.812500 +vn -0.750800 0.552700 0.361600 +vn -0.519600 0.552700 -0.651500 +vn 0.519600 0.552700 -0.651500 +vn 0.750800 0.552700 0.361600 +vn 0.222500 0.000000 -0.974900 +vn 0.623500 0.000000 -0.781800 +vn 0.901000 0.000000 -0.433900 +vn 1.000000 0.000000 0.000000 +vn 0.901000 0.000000 0.433900 +vn 0.623500 0.000000 0.781800 +vn 0.222500 0.000000 0.974900 +vn -0.222500 0.000000 0.974900 +vn -0.623500 0.000000 0.781800 +vn -0.901000 0.000000 0.433900 +vn -1.000000 0.000000 0.000000 +vn -0.901000 0.000000 -0.433900 +vn -0.623500 -0.000000 -0.781800 +vn -0.222500 0.000000 -0.974900 +usemtl None.025 +f 105/219/125 106/220/125 107/221/125 +f 108/222/125 109/223/125 110/224/125 +f 108/222/125 111/225/125 109/223/125 +f 108/222/125 112/226/125 111/225/125 +f 108/222/125 113/227/125 112/226/125 +f 108/222/125 114/228/125 113/227/125 +f 108/222/125 115/229/125 114/228/125 +f 108/222/125 116/230/125 115/229/125 +f 108/222/125 117/231/125 116/230/125 +f 108/222/125 118/232/125 117/231/125 +f 108/222/125 119/233/125 118/232/125 +f 108/222/125 120/234/125 119/233/125 +f 108/222/125 121/235/125 120/234/125 +f 108/222/125 122/236/125 121/235/125 +f 108/222/125 110/224/125 122/236/125 +f 123/237/126 124/238/126 125/239/126 +f 126/240/127 127/241/127 128/242/127 +f 129/243/128 130/244/128 131/245/128 +f 132/246/129 133/247/129 134/248/129 +f 135/249/130 123/237/130 136/250/130 +f 137/251/131 126/240/131 138/252/131 +f 139/253/132 129/243/132 140/254/132 +f 141/255/133 134/256/133 142/257/133 +f 143/258/134 144/259/134 145/260/134 +f 146/261/135 138/262/135 124/263/135 +f 147/264/136 139/253/136 127/241/136 +f 130/244/137 141/265/137 148/266/137 +f 149/267/138 143/258/138 133/247/138 +f 150/268/139 135/249/139 144/259/139 +f 116/230/140 117/231/140 139/253/140 +f 113/227/141 114/228/141 137/251/141 +f 109/223/142 111/225/142 135/249/142 +f 120/234/143 149/267/143 132/246/143 +f 117/231/144 118/232/144 129/243/144 +f 114/228/145 115/229/145 126/240/145 +f 111/225/146 112/226/146 123/237/146 +f 110/224/147 109/223/147 150/268/147 +f 121/235/148 143/258/148 149/267/148 +f 118/232/149 141/265/149 130/244/149 +f 115/229/150 116/230/150 147/264/150 +f 112/226/151 137/251/151 146/269/151 +f 122/236/152 110/224/152 143/258/152 +f 119/233/153 120/234/153 141/265/153 +f 133/270/154 151/270/154 145/270/154 +f 144/270/154 152/270/154 136/270/154 +f 125/270/154 153/270/154 124/270/154 +f 128/270/154 154/270/154 127/270/154 +f 131/270/154 155/270/154 148/270/154 +f 134/270/154 156/270/154 133/270/154 +f 136/270/154 157/270/154 125/270/154 +f 138/270/154 158/270/154 128/270/154 +f 140/270/154 159/270/154 131/270/154 +f 142/270/154 160/270/154 134/270/154 +f 145/270/154 161/270/154 144/270/154 +f 124/270/154 162/270/154 138/270/154 +f 127/270/154 163/270/154 140/270/154 +f 148/270/154 164/270/154 142/270/154 +f 157/271/155 153/272/155 165/273/155 +f 158/274/156 154/275/156 166/276/156 +f 159/277/157 167/278/157 168/279/157 +f 160/280/158 169/281/158 170/282/158 +f 161/283/159 171/284/159 172/285/159 +f 162/286/160 158/274/160 173/287/160 +f 163/288/161 159/277/161 174/289/161 +f 164/290/162 170/282/162 175/291/162 +f 151/292/163 172/285/163 176/293/163 +f 152/294/164 157/271/164 171/284/164 +f 153/295/165 173/287/165 177/296/165 +f 154/297/166 174/289/166 178/298/166 +f 155/299/167 164/300/167 167/278/167 +f 156/301/168 176/302/168 169/281/168 +f 179/303/169 180/304/169 181/305/169 +f 179/303/169 182/306/169 180/304/169 +f 179/303/169 183/307/169 182/306/169 +f 179/303/169 184/308/169 183/307/169 +f 179/303/169 185/309/169 184/308/169 +f 179/303/169 186/310/169 185/309/169 +f 179/303/169 187/311/169 186/310/169 +f 179/303/169 188/312/169 187/311/169 +f 179/303/169 189/313/169 188/312/169 +f 179/303/169 190/314/169 189/313/169 +f 179/303/169 191/315/169 190/314/169 +f 179/303/169 192/316/169 191/315/169 +f 179/303/169 193/317/169 192/316/169 +f 179/303/169 181/305/169 193/317/169 +f 194/318/170 195/319/170 196/320/170 +f 197/321/171 198/322/171 199/323/171 +f 200/324/172 201/325/172 202/326/172 +f 203/327/173 204/328/173 205/329/173 +f 206/330/174 196/320/174 207/331/174 +f 208/332/175 199/323/175 209/333/175 +f 210/334/176 202/326/176 211/335/176 +f 212/336/177 205/329/177 213/252/177 +f 214/337/178 215/338/178 216/339/178 +f 217/340/179 209/333/179 195/319/179 +f 218/341/180 210/334/180 198/322/180 +f 219/342/181 213/252/181 201/325/181 +f 220/343/182 216/339/182 204/328/182 +f 215/338/183 206/330/183 221/344/183 +f 187/311/184 188/312/184 210/334/184 +f 184/308/185 197/321/185 208/332/185 +f 180/304/186 182/306/186 206/330/186 +f 191/315/187 220/343/187 203/327/187 +f 188/312/188 189/313/188 200/324/188 +f 185/309/189 218/341/189 197/321/189 +f 182/306/190 183/307/190 194/318/190 +f 181/305/191 206/330/191 215/338/191 +f 192/316/192 214/337/192 220/343/192 +f 189/313/193 212/336/193 219/342/193 +f 186/310/194 187/311/194 218/341/194 +f 183/307/195 184/308/195 217/340/195 +f 193/317/196 215/338/196 214/337/196 +f 190/314/197 191/315/197 212/336/197 +f 204/270/154 216/270/154 222/270/154 +f 221/270/154 207/270/154 223/270/154 +f 196/270/154 195/270/154 224/270/154 +f 199/270/154 198/270/154 225/270/154 +f 202/270/154 201/270/154 226/270/154 +f 205/270/154 204/270/154 227/270/154 +f 207/270/154 196/270/154 228/270/154 +f 209/270/154 199/270/154 229/270/154 +f 211/270/154 202/270/154 230/270/154 +f 213/270/154 205/270/154 231/270/154 +f 216/270/154 221/270/154 232/270/154 +f 195/270/154 209/270/154 233/270/154 +f 198/270/154 211/270/154 234/270/154 +f 201/270/154 213/270/154 235/270/154 +f 228/345/198 224/346/198 236/347/198 +f 229/348/199 225/349/199 237/350/199 +f 230/351/200 226/352/200 238/353/200 +f 231/354/201 239/355/201 240/356/201 +f 232/357/202 241/358/202 242/359/202 +f 233/360/203 237/361/203 243/362/203 +f 234/363/204 238/353/204 244/364/204 +f 235/365/205 231/354/205 245/366/205 +f 222/367/206 242/359/206 246/368/206 +f 223/369/207 228/345/207 241/358/207 +f 224/370/208 243/362/208 247/371/208 +f 225/372/209 234/363/209 248/373/209 +f 226/352/210 235/374/210 249/375/210 +f 227/376/211 222/377/211 239/355/211 +f 241/378/212 172/285/212 171/284/212 +f 236/379/213 247/380/213 172/285/213 +f 247/371/214 169/281/214 176/302/214 +f 243/362/215 237/361/215 169/281/215 +f 237/361/216 248/381/216 170/282/216 +f 248/382/217 244/383/217 175/384/217 +f 244/383/218 238/385/218 167/278/218 +f 238/385/219 249/386/219 168/279/219 +f 249/386/220 245/387/220 174/289/220 +f 245/388/221 166/276/221 178/389/221 +f 240/390/222 173/287/222 166/276/222 +f 239/391/223 177/296/223 173/287/223 +f 246/392/224 165/273/224 177/393/224 +f 242/394/225 171/284/225 165/273/225 +f 139/253/140 117/231/140 129/243/140 +f 250/395/125 106/220/125 105/219/125 +f 238/353/200 226/352/200 249/375/200 +f 248/373/209 234/363/209 244/364/209 +f 140/254/132 129/243/132 131/245/132 +f 150/268/147 109/223/147 135/249/147 +f 138/252/131 126/240/131 128/242/131 +f 245/366/205 231/354/205 240/356/205 +f 249/375/210 235/374/210 245/396/210 +f 146/269/126 124/238/126 123/237/126 +f 147/264/127 127/241/127 126/240/127 +f 149/267/129 133/247/129 132/246/129 +f 129/243/144 118/232/144 130/244/144 +f 173/287/160 158/274/160 166/276/160 +f 132/397/133 134/256/133 141/255/133 +f 150/268/134 144/259/134 143/258/134 +f 137/398/135 138/262/135 146/261/135 +f 210/334/184 188/312/184 200/324/184 +f 217/340/195 184/308/195 208/332/195 +f 144/259/139 135/249/139 136/250/139 +f 174/289/220 245/387/220 178/298/220 +f 126/240/145 115/229/145 147/264/145 +f 137/251/141 114/228/141 126/240/141 +f 121/235/143 149/267/143 120/234/143 +f 147/264/150 116/230/150 139/253/150 +f 172/285/213 247/380/213 176/293/213 +f 239/355/211 222/377/211 246/399/211 +f 122/236/148 143/258/148 121/235/148 +f 119/233/149 141/265/149 118/232/149 +f 133/247/138 143/258/138 145/260/138 +f 113/227/151 137/251/151 112/226/151 +f 212/336/197 191/315/197 203/327/197 +f 145/270/154 151/270/154 161/270/154 +f 136/270/154 152/270/154 157/270/154 +f 124/270/154 153/270/154 162/270/154 +f 127/270/154 154/270/154 163/270/154 +f 148/270/154 155/270/154 164/270/154 +f 133/270/154 156/270/154 151/270/154 +f 125/270/154 157/270/154 153/270/154 +f 128/270/154 158/270/154 154/270/154 +f 131/270/154 159/270/154 155/270/154 +f 134/270/154 160/270/154 156/270/154 +f 144/270/154 161/270/154 152/270/154 +f 138/270/154 162/270/154 158/270/154 +f 140/270/154 163/270/154 159/270/154 +f 142/270/154 164/270/154 160/270/154 +f 165/273/155 153/272/155 177/393/155 +f 148/266/137 141/265/137 142/400/137 +f 155/299/157 167/278/157 159/277/157 +f 156/301/158 169/281/158 160/280/158 +f 152/294/159 171/284/159 161/283/159 +f 237/350/199 225/349/199 248/401/199 +f 198/322/180 210/334/180 211/335/180 +f 160/280/162 170/282/162 164/290/162 +f 161/283/163 172/285/163 151/292/163 +f 171/284/164 157/271/164 165/273/164 +f 162/286/165 173/287/165 153/295/165 +f 163/288/166 174/289/166 154/297/166 +f 167/278/167 164/300/167 175/384/167 +f 151/402/168 176/302/168 156/301/168 +f 217/340/170 195/319/170 194/318/170 +f 218/341/171 198/322/171 197/321/171 +f 219/342/172 201/325/172 200/324/172 +f 220/343/173 204/328/173 203/327/173 +f 194/318/174 196/320/174 206/330/174 +f 197/321/175 199/323/175 208/332/175 +f 200/324/176 202/326/176 210/334/176 +f 203/327/177 205/329/177 212/336/177 +f 208/332/179 209/333/179 217/340/179 +f 127/241/136 139/253/136 140/254/136 +f 212/336/181 213/252/181 219/342/181 +f 214/337/182 216/339/182 220/343/182 +f 221/344/183 206/330/183 207/331/183 +f 218/341/194 187/311/194 210/334/194 +f 185/309/185 197/321/185 184/308/185 +f 192/316/187 220/343/187 191/315/187 +f 200/324/188 189/313/188 219/342/188 +f 186/310/189 218/341/189 185/309/189 +f 135/249/142 111/225/142 123/237/142 +f 180/304/191 206/330/191 181/305/191 +f 193/317/192 214/337/192 192/316/192 +f 190/314/193 212/336/193 189/313/193 +f 194/318/190 183/307/190 217/340/190 +f 206/330/186 182/306/186 194/318/186 +f 181/305/196 215/338/196 193/317/196 +f 123/237/146 112/226/146 146/269/146 +f 222/270/154 216/270/154 232/270/154 +f 223/270/154 207/270/154 228/270/154 +f 224/270/154 195/270/154 233/270/154 +f 225/270/154 198/270/154 234/270/154 +f 226/270/154 201/270/154 235/270/154 +f 227/270/154 204/270/154 222/270/154 +f 228/270/154 196/270/154 224/270/154 +f 229/270/154 199/270/154 225/270/154 +f 230/270/154 202/270/154 226/270/154 +f 231/270/154 205/270/154 227/270/154 +f 232/270/154 221/270/154 223/270/154 +f 233/270/154 209/270/154 229/270/154 +f 234/270/154 211/270/154 230/270/154 +f 235/270/154 213/270/154 231/270/154 +f 236/347/198 224/346/198 247/403/198 +f 227/376/201 239/355/201 231/354/201 +f 223/369/202 241/358/202 232/357/202 +f 229/404/203 237/361/203 233/360/203 +f 230/351/204 238/353/204 234/363/204 +f 136/250/130 123/237/130 125/239/130 +f 232/357/206 242/359/206 222/367/206 +f 241/358/207 228/345/207 236/347/207 +f 233/360/208 243/362/208 224/370/208 +f 174/289/161 159/277/161 168/279/161 +f 236/379/212 172/285/212 241/378/212 +f 143/258/152 110/224/152 150/268/152 +f 243/362/214 169/281/214 247/371/214 +f 141/265/153 120/234/153 132/246/153 +f 170/282/216 248/381/216 175/291/216 +f 175/384/217 244/383/217 167/278/217 +f 167/278/218 238/385/218 168/279/218 +f 168/279/219 249/386/219 174/289/219 +f 166/276/156 154/275/156 178/389/156 +f 240/390/221 166/276/221 245/388/221 +f 239/391/222 173/287/222 240/390/222 +f 246/405/223 177/296/223 239/391/223 +f 242/394/224 165/273/224 246/392/224 +f 241/378/225 171/284/225 242/394/225 +f 169/281/215 237/361/215 170/282/215 +f 216/339/178 215/338/178 221/344/178 +f 131/245/128 130/244/128 148/266/128 +o Wheel_Right +v 0.615487 -0.030448 -0.998163 +v 0.665487 -0.030448 -0.998163 +v 0.665487 -0.530448 -0.864188 +v 0.615487 -0.530448 -0.864188 +v 0.665487 -0.896473 -0.498163 +v 0.615487 -0.896473 -0.498163 +v 0.665487 -1.030449 0.001837 +v 0.615487 -1.030449 0.001837 +v 0.615487 -0.896474 0.501837 +v 0.665487 -0.896474 0.501837 +v 0.665487 -0.530449 0.867862 +v 0.615487 -0.530449 0.867862 +v 0.615487 -0.030449 1.001837 +v 0.665487 -0.030449 1.001837 +v 0.665487 0.469551 0.867862 +v 0.615487 0.469551 0.867862 +v 0.665487 0.835577 0.501837 +v 0.615487 0.835577 0.501837 +v 0.665487 0.969552 0.001837 +v 0.615487 0.969552 0.001837 +v 0.665487 0.835578 -0.498163 +v 0.665487 0.469553 -0.864188 +v 0.615487 0.469553 -0.864188 +v 0.615487 0.835578 -0.498163 +v 0.635814 -1.170575 0.346383 +v 0.635814 -1.181867 -0.300565 +v 0.923860 -1.125115 -0.286416 +v 0.923861 -1.114352 0.330262 +v 1.077127 -0.971990 0.289440 +v 1.077127 -0.981416 -0.250587 +v 1.023898 -0.818007 -0.209845 +v 1.023898 -0.810102 0.243020 +v 0.789080 -0.711348 -0.275796 +v 0.482548 -0.704437 0.318163 +v 0.789080 -0.704437 0.318163 +v 0.554982 -0.304464 0.313508 +v 0.482548 -0.711348 -0.275796 +v 0.247731 -0.810102 0.243020 +v 0.247731 -0.818007 -0.209845 +v 0.194502 -0.981416 -0.250587 +v 0.194502 -0.971990 0.289440 +v 0.347768 -1.114352 0.330261 +v 0.347768 -1.125115 -0.286416 +v 0.635814 -0.868172 -0.866486 +v 0.923860 -0.826098 -0.825856 +v 1.077126 -0.719565 -0.722978 +v 1.023898 -0.598419 -0.605989 +v 0.789080 -0.519347 -0.529630 +v 0.482548 -0.519347 -0.529630 +v 0.247731 -0.598419 -0.605989 +v 0.194502 -0.719565 -0.722978 +v 0.347768 -0.826098 -0.825856 +v 0.635814 -0.313544 -1.199740 +v 0.923860 -0.297422 -1.143517 +v 1.077126 -0.256600 -1.001155 +v 1.023898 -0.210180 -0.839267 +v 0.789080 -0.285323 -0.733602 +v 0.482548 -0.285323 -0.733602 +v 0.247730 -0.210180 -0.839267 +v 0.194502 -0.256600 -1.001155 +v 0.347768 -0.297422 -1.143517 +v 0.635814 0.333405 -1.211033 +v 0.923860 0.319256 -1.154281 +v 1.077126 0.283427 -1.010581 +v 1.023898 0.242685 -0.847172 +v 0.789080 0.308636 -0.740514 +v 0.554982 -0.280668 -0.333629 +v 0.482548 0.308636 -0.740514 +v 0.247730 0.242685 -0.847172 +v 0.194502 0.283427 -1.010581 +v 0.347768 0.319256 -1.154281 +v 0.635814 0.899326 -0.897338 +v 0.923860 0.858696 -0.855265 +v 1.077126 0.755818 -0.748731 +v 1.023898 0.638829 -0.627586 +v 0.789080 0.562470 -0.548513 +v 0.482548 0.562470 -0.548513 +v 0.247730 0.638829 -0.627586 +v 0.194502 0.755818 -0.748731 +v 0.347768 0.858696 -0.855265 +v 0.635814 1.232579 -0.342710 +v 0.923860 1.176357 -0.326588 +v 1.077126 1.033994 -0.285766 +v 1.023897 0.872107 -0.239346 +v 0.789080 0.766442 -0.314489 +v 0.482548 0.766442 -0.314489 +v 0.247730 0.872107 -0.239346 +v 0.194502 1.033994 -0.285766 +v 0.347768 1.176357 -0.326588 +v 0.635814 1.243872 0.304239 +v 0.923860 1.187121 0.290089 +v 1.077126 1.043421 0.254261 +v 1.023897 0.880011 0.213518 +v 0.789080 0.773353 0.279470 +v 0.482548 0.773353 0.279470 +v 0.554982 0.366469 -0.309834 +v 0.247730 0.880011 0.213518 +v 0.194502 1.043421 0.254261 +v 0.347768 1.187121 0.290089 +v 0.635814 0.930177 0.870160 +v 0.923860 0.888104 0.829530 +v 1.077126 0.781570 0.726652 +v 1.023898 0.660424 0.609663 +v 0.789080 0.581352 0.533304 +v 0.482548 0.581352 0.533304 +v 0.247730 0.660424 0.609663 +v 0.194502 0.781570 0.726652 +v 0.347768 0.888104 0.829530 +v 0.635814 0.375549 1.203414 +v 0.923860 0.359427 1.147191 +v 1.077126 0.318606 1.004829 +v 1.023898 0.272185 0.842941 +v 0.789080 0.347328 0.737276 +v 0.482548 0.347328 0.737276 +v 0.247730 0.272185 0.842941 +v 0.194502 0.318606 1.004829 +v 0.347768 0.359427 1.147191 +v 0.635814 -0.271400 1.214706 +v 0.923860 -0.257250 1.157955 +v 1.077127 -0.221422 1.014255 +v 1.023898 -0.180679 0.850846 +v 0.789080 -0.246631 0.744188 +v 0.482548 -0.246631 0.744188 +v 0.554982 -0.251285 0.344215 +v 0.247731 -0.180679 0.850846 +v 0.194502 -0.221422 1.014255 +v 0.347768 -0.257250 1.157955 +v 0.635814 -0.837321 0.901012 +v 0.923860 -0.796691 0.858938 +v 1.077127 -0.693813 0.752405 +v 1.023898 -0.576824 0.631259 +v 0.789080 -0.500465 0.552187 +v 0.482548 -0.500465 0.552187 +v 0.247731 -0.576824 0.631259 +v 0.194502 -0.693813 0.752405 +v 0.347768 -0.796691 0.858937 +v 0.789080 -0.304464 0.313508 +v 0.789080 -0.311375 -0.280451 +v 0.554982 -0.311375 -0.280451 +v 0.789080 0.342673 0.337303 +v 0.789080 -0.251285 0.344215 +v 0.554982 0.342673 0.337303 +v 0.789080 -0.280668 -0.333629 +v 0.789080 0.313291 -0.340541 +v 0.554982 0.313291 -0.340541 +v 0.789080 0.366469 -0.309834 +v 0.789080 0.373380 0.284124 +v 0.554982 0.373380 0.284124 +v -0.005548 0.048233 0.047777 +v -0.005548 0.048234 -0.052223 +v -0.005548 -0.051767 -0.052223 +v 0.744452 0.048232 -0.052223 +v 0.744452 0.048233 0.047777 +v 0.744452 -0.051768 0.047777 +v -0.005548 -0.051768 0.047777 +v 0.744452 -0.051767 -0.052223 +vt 0.513624 0.783997 +vt 0.505969 0.783973 +vt 0.506188 0.712612 +vt 0.949158 0.484385 +vt 0.941584 0.484478 +vt 0.944659 0.410168 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.335156 0.743134 +vt 0.342603 0.674991 +vt 0.334948 0.675014 +vt 0.334704 0.595770 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.521494 0.627793 +vt 0.523482 0.675613 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.530171 0.331957 +vt 0.598820 0.371478 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.000848 0.531055 +vt 0.109074 0.639268 +vt 0.830015 0.623328 +vt 0.837273 0.712605 +vt 0.792389 0.714799 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.455687 0.331872 +vt 0.462495 0.306756 +vt 0.758447 0.693332 +vt 0.757332 0.757109 +vt 0.721737 0.772501 +vt 0.340460 0.815081 +vt 0.340316 0.862012 +vt 0.297072 0.826038 +vt 0.676280 0.688510 +vt 0.674834 0.772357 +vt 0.639684 0.692967 +vt 0.225458 0.066465 +vt 0.158175 0.049709 +vt 0.157773 0.024179 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.872743 0.628628 +vt 0.879661 0.713728 +vt 0.837383 0.811379 +vt 0.792493 0.808950 +vt 0.766009 0.719283 +vt 0.384108 0.290468 +vt 0.402470 0.272035 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.675115 0.819426 +vt 0.638639 0.825588 +vt 0.091518 0.068826 +vt 0.078288 0.046975 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.830315 0.893182 +vt 0.785756 0.886926 +vt 0.760201 0.870015 +vt 0.342811 0.218841 +vt 0.367839 0.211969 +vt 0.758639 0.881416 +vt 0.722613 0.861988 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.020847 0.106443 +vt 0.000874 0.094773 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.410612 0.724746 +vt 0.366797 0.631670 +vt 0.366513 0.724108 +vt 0.343300 0.641815 +vt 0.342862 0.136182 +vt 0.367882 0.142652 +vt 0.880326 0.806458 +vt 0.880176 0.757653 +vt 0.916070 0.738915 +vt 0.651005 0.881416 +vt 0.697339 0.884549 +vt 0.661972 0.937679 +vt 0.963197 0.803150 +vt 0.963001 0.738770 +vt 0.999158 0.806093 +vt 0.026573 0.185955 +vt 0.000842 0.186648 +vt 0.478430 0.642230 +vt 0.478182 0.723178 +vt 0.454713 0.724378 +vt 0.454997 0.631940 +vt 0.410323 0.818844 +vt 0.366238 0.813802 +vt 0.342811 0.801309 +vt 0.384247 0.064640 +vt 0.402587 0.082657 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.962852 0.690423 +vt 0.998802 0.690392 +vt 0.045687 0.252581 +vt 0.023635 0.266097 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.410121 0.884850 +vt 0.366045 0.876721 +vt 0.368574 0.047943 +vt 0.450371 0.000831 +vt 0.455878 0.023384 +vt 0.462656 0.048059 +vt 0.879766 0.623692 +vt 0.915776 0.643196 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.083117 0.323505 +vt 0.071984 0.342642 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.227051 0.730389 +vt 0.184003 0.645063 +vt 0.544788 0.000929 +vt 0.538560 0.023470 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.000842 0.766738 +vt 0.037804 0.750424 +vt 0.941584 0.331962 +vt 0.941398 0.422896 +vt 0.879881 0.422891 +vt 0.090587 0.832202 +vt 0.084243 0.749997 +vt 0.123318 0.828165 +vt 0.162852 0.317479 +vt 0.163350 0.343486 +vt 0.296292 0.658368 +vt 0.295662 0.734429 +vt 0.271432 0.731379 +vt 0.272151 0.644522 +vt 0.228056 0.828732 +vt 0.183284 0.731920 +vt 0.626527 0.048208 +vt 0.610139 0.064873 +vt 0.000978 0.697596 +vt 0.038890 0.702846 +vt 0.085329 0.702418 +vt 0.118564 0.696514 +vt 0.229508 0.298361 +vt 0.242837 0.320688 +vt 0.296500 0.816519 +vt 0.272390 0.825121 +vt 0.230552 0.907946 +vt 0.184242 0.825662 +vt 0.673686 0.130002 +vt 0.651436 0.136500 +vt 0.592019 0.082852 +vt 0.006100 0.640350 +vt 0.041316 0.659523 +vt 0.087755 0.659095 +vt 0.277678 0.248491 +vt 0.300278 0.261221 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.741202 0.192204 +vt 0.785112 0.254285 +vt 0.673628 0.224394 +vt 0.651385 0.219160 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.809649 0.113269 +vt 0.845561 0.100185 +vt 0.183284 0.908088 +vt 0.229724 0.907946 +vt 0.222683 0.963363 +vt 0.892764 0.189172 +vt 0.892491 0.100041 +vt 0.928690 0.180787 +vt 0.294454 0.181233 +vt 0.320282 0.181017 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.741495 0.096636 +vt 0.785595 0.096730 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.609999 0.290702 +vt 0.591902 0.272231 +vt 0.809448 0.047401 +vt 0.845426 0.056510 +vt 0.892357 0.056365 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.673931 0.096282 +vt 0.697396 0.096460 +vt 0.741789 0.000831 +vt 0.785876 0.005407 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.809306 0.001196 +vt 0.845312 0.019129 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.296963 0.616402 +vt 0.332779 0.615853 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.720616 0.271792 +vt 0.709710 0.331848 +vt 0.879860 0.985796 +vt 0.879766 0.894861 +vt 0.940684 0.894960 +vt 0.297236 0.615853 +vt 0.296963 0.526722 +vt 0.332803 0.526612 +vt 0.941258 0.444023 +vt 0.941321 0.534932 +vt 0.879881 0.443788 +vt 0.133383 0.904255 +vt 0.180286 0.904398 +vt 0.143492 0.960751 +vt 0.478430 0.884894 +vt 0.478402 0.975800 +vt 0.417169 0.975757 +vt 0.767744 0.331957 +vt 0.767547 0.267577 +vt 0.803584 0.331848 +vt 0.818505 0.984088 +vt 0.818532 0.893182 +vt 0.879766 0.893225 +vt 0.911101 0.280588 +vt 0.911038 0.189679 +vt 0.972132 0.189316 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.513843 0.712612 +vt 0.478457 0.710220 +vt 0.297106 0.908942 +vt 0.296963 0.862012 +vt 0.340350 0.872968 +vt 0.404092 0.884869 +vt 0.404028 0.975801 +vt 0.342811 0.975783 +vt 0.767547 0.331957 +vt 0.720616 0.331814 +vt 0.756641 0.271902 +vt 0.818894 0.331951 +vt 0.803585 0.331957 +vt 0.803584 0.316653 +vt 0.485203 0.925578 +vt 0.484851 0.810753 +vt 0.500243 0.925532 +vt 0.818889 0.301333 +vt 0.818888 0.316642 +vt 0.803584 0.316647 +vt 0.015117 0.947455 +vt 0.015470 0.832630 +vt 0.026433 0.832663 +vt 0.001191 0.833505 +vt 0.015117 0.832630 +vt 0.014769 0.946257 +vt 0.943226 0.115741 +vt 0.929041 0.115591 +vt 0.928690 0.000831 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.109050 0.343516 +vt 0.188269 0.343486 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn -0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn -1.000000 0.000000 -0.000000 +vn 0.192500 -0.981200 0.017100 +vn 0.682300 -0.730900 0.012800 +vn 0.950400 0.310900 -0.005400 +vn 0.417200 0.908700 -0.015900 +vn -0.000000 0.011600 0.999900 +vn -0.407500 0.913100 -0.010600 +vn -0.950400 0.310900 -0.005400 +vn -0.682300 -0.730900 0.012800 +vn -0.192500 -0.981200 0.017100 +vn 0.192500 -0.858300 -0.475700 +vn 0.682300 -0.639400 -0.354400 +vn 0.950400 0.272000 0.150800 +vn 0.252600 0.846200 0.469100 +vn -0.000000 0.797500 0.603300 +vn -0.421400 0.723300 0.547100 +vn -0.950400 0.272000 0.150800 +vn -0.682300 -0.639400 -0.354400 +vn -0.192500 -0.858300 -0.475700 +vn 0.192500 -0.505400 -0.841100 +vn 0.682300 -0.376500 -0.626600 +vn 0.950400 0.160200 0.266600 +vn 0.215700 0.502900 0.837000 +vn 0.000000 0.657000 0.753900 +vn -0.422700 0.595500 0.683200 +vn -0.950400 0.160200 0.266600 +vn -0.682300 -0.376500 -0.626600 +vn -0.192500 -0.505400 -0.841100 +vn 0.192500 -0.017100 -0.981200 +vn 0.682300 -0.012800 -0.730900 +vn 0.950400 0.005400 0.310900 +vn 0.417200 0.015900 0.908700 +vn 0.000000 -0.999900 0.011600 +vn -0.407500 0.010600 0.913100 +vn -0.950400 0.005400 0.310900 +vn -0.682300 -0.012800 -0.730900 +vn -0.192500 -0.017100 -0.981200 +vn 0.192500 0.475700 -0.858300 +vn 0.682300 0.354400 -0.639400 +vn 0.950400 -0.150800 0.272000 +vn 0.252600 -0.469100 0.846200 +vn 0.000000 -0.603300 0.797500 +vn -0.421400 -0.547100 0.723300 +vn -0.950400 -0.150800 0.272000 +vn -0.682300 0.354400 -0.639400 +vn -0.192500 0.475700 -0.858300 +vn 0.192500 0.841100 -0.505400 +vn 0.682300 0.626600 -0.376500 +vn 0.950400 -0.266600 0.160200 +vn 0.215700 -0.837000 0.502900 +vn 0.000000 -0.753900 0.657000 +vn -0.422700 -0.683200 0.595500 +vn -0.950400 -0.266600 0.160200 +vn -0.682300 0.626600 -0.376500 +vn -0.192500 0.841100 -0.505400 +vn 0.192500 0.981200 -0.017100 +vn 0.682300 0.730900 -0.012800 +vn 0.950400 -0.310900 0.005400 +vn 0.417200 -0.908700 0.015900 +vn -0.984000 -0.178200 0.002100 +vn -0.407500 -0.913100 0.010600 +vn -0.950400 -0.310900 0.005400 +vn -0.682300 0.730900 -0.012800 +vn -0.192500 0.981200 -0.017100 +vn 0.192500 0.858300 0.475700 +vn 0.682300 0.639400 0.354400 +vn 0.950400 -0.272000 -0.150800 +vn 0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn -0.421400 -0.723300 -0.547100 +vn -0.950400 -0.272000 -0.150800 +vn -0.682300 0.639400 0.354400 +vn -0.192500 0.858300 0.475700 +vn 0.192500 0.505400 0.841100 +vn 0.682300 0.376500 0.626600 +vn 0.950400 -0.160200 -0.266600 +vn 0.215700 -0.502900 -0.837000 +vn -0.000000 -0.657000 -0.753900 +vn -0.422700 -0.595500 -0.683200 +vn -0.950400 -0.160200 -0.266600 +vn -0.682300 0.376500 0.626600 +vn -0.192500 0.505400 0.841100 +vn 0.192500 0.017100 0.981200 +vn 0.682300 0.012800 0.730900 +vn 0.950400 -0.005400 -0.310900 +vn 0.417200 -0.015900 -0.908700 +vn -0.407500 -0.010600 -0.913100 +vn -0.950400 -0.005400 -0.310900 +vn -0.682300 0.012800 0.730900 +vn -0.192500 0.017100 0.981200 +vn 0.192500 -0.475700 0.858300 +vn 0.682300 -0.354400 0.639400 +vn 0.950400 0.150800 -0.272000 +vn 0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn -0.421400 0.547100 -0.723300 +vn -0.950400 0.150800 -0.272000 +vn -0.682300 -0.354400 0.639400 +vn -0.192500 -0.475700 0.858300 +vn 0.192500 -0.841100 0.505400 +vn 0.682300 -0.626600 0.376500 +vn 0.950400 0.266600 -0.160200 +vn 0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn -0.422700 0.683200 -0.595500 +vn -0.950400 0.266600 -0.160200 +vn -0.682300 -0.626600 0.376500 +vn -0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn -0.984000 0.178200 -0.002100 +vn -0.984000 -0.002100 -0.178200 +vn -0.984000 0.002100 0.178200 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 -0.000000 +vn 0.407500 0.913100 -0.010600 +vn -0.417200 0.908700 -0.015900 +vn 0.421400 0.723300 0.547100 +vn -0.252600 0.846200 0.469100 +vn 0.422700 0.595500 0.683200 +vn -0.215700 0.502900 0.837000 +vn 0.407500 0.010600 0.913100 +vn -0.417200 0.015900 0.908700 +vn 0.421400 -0.547100 0.723300 +vn -0.252600 -0.469100 0.846200 +vn 0.422700 -0.683200 0.595500 +vn -0.215700 -0.837000 0.502900 +vn 0.407500 -0.913100 0.010600 +vn -0.417200 -0.908700 0.015900 +vn 0.421400 -0.723300 -0.547100 +vn -0.252600 -0.846200 -0.469100 +vn 0.422700 -0.595500 -0.683200 +vn -0.215700 -0.502900 -0.837000 +vn 0.407500 -0.010600 -0.913100 +vn -0.417200 -0.015900 -0.908700 +vn 0.421400 0.547100 -0.723300 +vn -0.252600 0.469100 -0.846200 +vn 0.422700 0.683200 -0.595500 +vn -0.215700 0.837000 -0.502900 +usemtl None.001 +f 251/406/226 252/407/226 253/408/226 +f 254/409/227 253/410/227 255/411/227 +f 256/412/228 255/411/228 257/413/228 +f 258/414/229 257/415/229 259/416/229 +f 259/416/230 260/417/230 261/418/230 +f 262/419/231 261/418/231 263/420/231 +f 263/421/232 264/422/232 265/423/232 +f 266/424/233 265/423/233 267/425/233 +f 268/426/234 267/425/234 269/427/234 +f 270/428/235 269/427/235 271/429/235 +f 253/430/236 252/431/236 272/432/236 +f 273/433/237 272/434/237 251/406/237 +f 274/435/238 271/436/238 272/434/238 +f 251/437/239 254/438/239 273/439/239 +f 275/440/240 276/441/240 277/442/240 +f 278/443/241 277/442/241 279/444/241 +f 279/445/242 280/446/242 281/447/242 +f 282/448/243 281/449/243 283/450/243 +f 284/451/244 285/452/244 286/453/244 +f 284/454/245 287/455/245 288/456/245 +f 288/457/246 289/458/246 290/459/246 +f 291/460/247 290/459/247 292/461/247 +f 275/440/248 292/462/248 293/463/248 +f 276/441/249 294/464/249 295/465/249 +f 277/442/250 295/465/250 280/466/250 +f 280/446/251 296/467/251 297/468/251 +f 281/449/252 297/469/252 283/450/252 +f 283/450/253 298/470/253 287/455/253 +f 287/455/254 299/471/254 300/472/254 +f 289/458/255 300/473/255 301/474/255 +f 290/459/256 301/474/256 302/475/256 +f 293/463/257 302/476/257 276/441/257 +f 294/464/258 303/477/258 304/478/258 +f 295/465/259 304/478/259 305/479/259 +f 296/467/260 305/480/260 306/481/260 +f 297/469/261 306/482/261 307/483/261 +f 298/470/262 307/483/262 299/471/262 +f 299/471/263 308/484/263 300/472/263 +f 300/473/264 309/485/264 301/474/264 +f 301/474/265 310/486/265 311/487/265 +f 302/476/266 311/488/266 303/477/266 +f 303/489/267 312/490/267 304/491/267 +f 304/491/268 313/492/268 305/493/268 +f 305/480/269 314/494/269 315/495/269 +f 306/496/270 315/497/270 316/498/270 +f 308/499/271 307/500/271 317/501/271 +f 308/502/272 318/503/272 309/504/272 +f 309/485/273 319/505/273 320/506/273 +f 310/507/274 320/508/274 321/509/274 +f 311/510/275 321/509/275 312/490/275 +f 312/490/276 322/511/276 323/512/276 +f 313/492/277 323/512/277 324/513/277 +f 314/494/278 324/514/278 325/515/278 +f 315/497/279 325/516/279 316/498/279 +f 316/498/280 326/517/280 318/503/280 +f 318/503/281 327/518/281 328/519/281 +f 319/505/282 328/520/282 329/521/282 +f 320/508/283 329/522/283 321/509/283 +f 321/509/284 330/523/284 322/511/284 +f 322/511/285 331/524/285 332/525/285 +f 323/526/286 332/527/286 333/528/286 +f 324/514/287 333/528/287 334/529/287 +f 325/516/288 334/530/288 335/531/288 +f 326/517/289 335/531/289 327/518/289 +f 327/518/290 336/532/290 328/519/290 +f 328/520/291 337/533/291 329/521/291 +f 329/521/292 338/534/292 339/535/292 +f 330/523/293 339/536/293 322/511/293 +f 331/537/294 340/538/294 332/539/294 +f 332/527/295 341/540/295 342/541/295 +f 333/528/296 342/541/296 343/542/296 +f 334/543/297 343/544/297 344/545/297 +f 345/546/298 336/547/298 346/548/298 +f 336/549/299 345/550/299 337/551/299 +f 337/533/300 347/552/300 348/553/300 +f 338/554/301 348/555/301 349/556/301 +f 339/557/302 349/556/302 340/538/302 +f 340/538/303 350/558/303 341/559/303 +f 341/540/304 351/560/304 352/561/304 +f 342/541/305 352/561/305 343/542/305 +f 343/544/306 353/562/306 344/545/306 +f 344/545/307 354/563/307 355/564/307 +f 345/550/308 355/564/308 356/565/308 +f 347/552/309 356/566/309 357/567/309 +f 348/555/310 357/568/310 358/569/310 +f 349/556/311 358/569/311 350/558/311 +f 350/558/312 359/570/312 351/571/312 +f 351/560/313 360/572/313 352/561/313 +f 352/561/314 361/573/314 353/574/314 +f 353/562/315 362/575/315 363/576/315 +f 354/563/316 363/576/316 364/577/316 +f 355/564/317 364/577/317 356/565/317 +f 356/566/318 365/578/318 366/579/318 +f 357/567/319 366/579/319 367/580/319 +f 358/569/320 367/581/320 350/558/320 +f 359/582/321 368/583/321 360/584/321 +f 360/572/322 369/585/322 370/586/322 +f 361/573/323 370/586/323 371/587/323 +f 362/588/324 371/589/324 372/590/324 +f 372/591/271 373/592/271 374/593/271 +f 364/594/325 373/595/325 365/596/325 +f 365/578/326 375/597/326 376/598/326 +f 366/579/327 376/598/327 367/580/327 +f 367/599/328 377/600/328 368/583/328 +f 368/583/329 378/601/329 379/602/329 +f 369/603/330 379/602/330 380/604/330 +f 370/586/331 380/605/331 381/606/331 +f 371/589/332 381/607/332 372/590/332 +f 372/590/333 382/608/333 383/609/333 +f 373/595/334 383/609/334 384/610/334 +f 375/597/335 384/611/335 376/598/335 +f 376/612/336 385/613/336 386/614/336 +f 377/600/337 386/614/337 378/601/337 +f 378/601/338 275/615/338 278/616/338 +f 379/602/339 278/616/339 279/617/339 +f 380/605/340 279/445/340 282/618/340 +f 381/607/341 282/619/341 285/620/341 +f 382/608/342 285/620/342 284/621/342 +f 383/609/343 284/621/343 384/610/343 +f 384/611/344 288/457/344 291/460/344 +f 385/613/345 291/622/345 386/614/345 +f 386/614/346 292/623/346 275/615/346 +f 387/624/347 388/625/347 389/626/347 +f 285/627/236 283/628/236 388/482/236 +f 283/629/348 287/630/348 389/631/348 +f 287/632/349 284/633/349 286/634/349 +f 390/635/348 391/636/348 374/637/348 +f 373/638/350 364/639/350 374/640/350 +f 364/641/347 363/642/347 392/643/347 +f 363/644/236 372/645/236 391/646/236 +f 393/647/244 394/648/244 317/649/244 +f 307/650/236 316/651/236 394/652/236 +f 318/653/351 308/654/351 317/655/351 +f 316/656/347 318/651/347 395/657/347 +f 396/658/271 397/659/271 398/660/271 +f 344/661/244 345/662/244 398/663/244 +f 335/664/236 344/665/236 397/666/236 +f 336/667/348 335/668/348 346/669/348 +f 399/670/239 400/671/239 401/672/239 +f 400/673/352 402/674/352 401/675/352 +f 402/676/236 403/677/236 404/678/236 +f 403/679/353 399/680/353 405/681/353 +f 405/682/354 401/683/354 406/684/354 +f 403/685/355 402/686/355 400/687/355 +f 350/558/303 351/571/303 341/559/303 +f 254/659/226 251/406/226 253/408/226 +f 256/412/227 254/409/227 255/411/227 +f 258/688/228 256/412/228 257/413/228 +f 272/434/237 252/407/237 251/406/237 +f 262/419/230 259/416/230 261/418/230 +f 402/674/352 406/689/352 401/675/352 +f 266/424/232 263/421/232 265/423/232 +f 268/426/233 266/424/233 267/425/233 +f 270/428/234 268/426/234 269/427/234 +f 274/690/235 270/428/235 271/429/235 +f 253/430/236 272/432/236 271/691/236 +f 253/430/236 271/691/236 269/692/236 +f 255/693/236 253/430/236 269/692/236 +f 255/693/236 269/692/236 267/694/236 +f 257/695/236 255/693/236 260/696/236 +f 255/693/236 267/694/236 260/696/236 +f 260/696/236 267/694/236 261/697/236 +f 267/694/236 265/698/236 261/697/236 +f 298/470/253 299/471/253 287/455/253 +f 273/433/238 274/435/238 272/434/238 +f 274/699/239 273/439/239 270/700/239 +f 384/611/335 385/701/335 376/598/335 +f 254/438/239 256/702/239 270/700/239 +f 270/700/239 256/702/239 268/703/239 +f 256/702/239 258/704/239 268/703/239 +f 258/704/239 259/705/239 262/706/239 +f 268/703/239 258/704/239 262/706/239 +f 266/707/239 268/703/239 262/706/239 +f 263/708/239 266/707/239 262/706/239 +f 278/443/240 275/440/240 277/442/240 +f 312/490/267 313/492/267 304/491/267 +f 282/618/242 279/445/242 281/447/242 +f 285/709/356 282/448/356 283/450/356 +f 285/452/244 387/710/244 286/453/244 +f 287/455/357 289/711/357 288/456/357 +f 291/460/246 288/457/246 290/459/246 +f 309/485/264 310/486/264 301/474/264 +f 276/441/248 275/440/248 293/463/248 +f 277/442/249 276/441/249 295/465/249 +f 337/533/291 338/534/291 329/521/291 +f 281/447/251 280/446/251 297/468/251 +f 297/469/358 298/470/358 283/450/358 +f 340/538/294 341/559/294 332/539/294 +f 289/711/359 287/455/359 300/472/359 +f 290/459/255 289/458/255 301/474/255 +f 293/712/256 290/459/256 302/475/256 +f 359/570/312 360/713/312 351/571/312 +f 295/465/258 294/464/258 304/478/258 +f 296/714/259 295/465/259 305/479/259 +f 297/468/260 296/467/260 306/481/260 +f 298/470/360 297/469/360 307/483/360 +f 261/418/231 264/715/231 263/420/231 +f 308/484/361 309/716/361 300/472/361 +f 368/583/321 369/603/321 360/584/321 +f 302/475/265 301/474/265 311/487/265 +f 294/464/266 302/476/266 303/477/266 +f 302/476/257 294/464/257 276/441/257 +f 277/442/241 280/466/241 279/444/241 +f 306/481/269 305/480/269 315/495/269 +f 307/717/362 306/496/362 316/498/362 +f 307/500/271 393/718/271 317/501/271 +f 318/503/363 319/719/363 309/504/363 +f 310/486/273 309/485/273 320/506/273 +f 311/510/274 310/507/274 321/509/274 +f 303/489/275 311/510/275 312/490/275 +f 313/492/276 312/490/276 323/512/276 +f 314/720/277 313/492/277 324/513/277 +f 315/495/278 314/494/278 325/515/278 +f 325/516/364 326/517/364 316/498/364 +f 290/459/247 293/712/247 292/461/247 +f 319/719/365 318/503/365 328/519/365 +f 320/506/282 319/505/282 329/521/282 +f 265/698/236 264/721/236 261/697/236 +f 312/490/284 321/509/284 322/511/284 +f 323/512/285 322/511/285 332/525/285 +f 324/514/286 323/526/286 333/528/286 +f 325/515/287 324/514/287 334/529/287 +f 326/517/366 325/516/366 335/531/366 +f 291/622/345 292/623/345 386/614/345 +f 336/532/367 337/722/367 328/519/367 +f 364/639/350 392/723/350 374/640/350 +f 330/724/292 329/521/292 339/535/292 +f 367/581/320 359/570/320 350/558/320 +f 295/465/250 296/714/250 280/466/250 +f 333/528/295 332/527/295 342/541/295 +f 334/529/296 333/528/296 343/542/296 +f 335/725/368 334/543/368 344/545/368 +f 398/726/298 345/546/298 346/548/298 +f 345/550/369 347/727/369 337/551/369 +f 338/534/300 337/533/300 348/553/300 +f 339/557/301 338/554/301 349/556/301 +f 331/537/302 339/557/302 340/538/302 +f 329/522/283 330/523/283 321/509/283 +f 342/541/304 341/540/304 352/561/304 +f 352/561/305 353/574/305 343/542/305 +f 353/562/370 354/563/370 344/545/370 +f 345/550/307 344/545/307 355/564/307 +f 347/727/371 345/550/371 356/565/371 +f 348/553/309 347/552/309 357/567/309 +f 349/556/310 348/555/310 358/569/310 +f 340/538/311 349/556/311 350/558/311 +f 307/483/262 308/484/262 299/471/262 +f 313/492/268 314/720/268 305/493/268 +f 376/598/327 377/728/327 367/580/327 +f 354/563/372 353/562/372 363/576/372 +f 355/564/316 354/563/316 364/577/316 +f 364/577/373 365/729/373 356/565/373 +f 357/567/318 356/566/318 366/579/318 +f 358/730/319 357/567/319 367/580/319 +f 335/531/289 336/532/289 327/518/289 +f 360/572/313 361/573/313 352/561/313 +f 361/573/322 360/572/322 370/586/322 +f 362/731/323 361/573/323 371/587/323 +f 363/732/374 362/588/374 372/590/374 +f 391/733/271 372/591/271 374/593/271 +f 373/595/375 375/734/375 365/596/375 +f 366/579/326 365/578/326 376/598/326 +f 339/536/293 331/524/293 322/511/293 +f 359/582/328 367/599/328 368/583/328 +f 369/603/329 368/583/329 379/602/329 +f 370/735/330 369/603/330 380/604/330 +f 371/587/331 370/586/331 381/606/331 +f 381/607/376 382/608/376 372/590/376 +f 373/595/333 372/590/333 383/609/333 +f 375/734/377 373/595/377 384/610/377 +f 361/573/314 362/731/314 353/574/314 +f 377/600/336 376/612/336 386/614/336 +f 368/583/337 377/600/337 378/601/337 +f 379/602/338 378/601/338 278/616/338 +f 380/604/339 379/602/339 279/617/339 +f 381/606/340 380/605/340 282/618/340 +f 382/608/378 381/607/378 285/620/378 +f 383/609/342 382/608/342 284/621/342 +f 284/621/379 288/736/379 384/610/379 +f 385/701/344 384/611/344 291/460/344 +f 394/648/244 395/737/244 317/649/244 +f 378/601/346 386/614/346 275/615/346 +f 286/738/347 387/624/347 389/626/347 +f 387/739/236 285/627/236 388/482/236 +f 388/740/348 283/629/348 389/631/348 +f 389/741/349 287/632/349 286/634/349 +f 392/742/348 390/635/348 374/637/348 +f 273/439/239 254/438/239 270/700/239 +f 363/642/347 390/743/347 392/643/347 +f 390/744/236 363/644/236 391/646/236 +f 326/517/280 327/518/280 318/503/280 +f 393/745/236 307/650/236 394/652/236 +f 395/746/351 318/653/351 317/655/351 +f 394/747/347 316/656/347 395/657/347 +f 346/748/271 396/658/271 398/660/271 +f 397/749/244 344/661/244 398/663/244 +f 396/750/236 335/664/236 397/666/236 +f 335/668/348 396/751/348 346/669/348 +f 405/677/239 399/670/239 401/672/239 +f 257/415/229 260/417/229 259/416/229 +f 406/752/236 402/676/236 404/678/236 +f 404/753/353 403/679/353 405/681/353 +f 404/754/354 405/682/354 406/684/354 +f 399/755/355 403/685/355 400/687/355 +o CargoMid +v -0.602109 3.364694 3.769022 +v -0.602109 3.364695 2.453471 +v -0.602109 1.054079 2.453471 +v 0.602109 3.364695 2.453471 +v 0.602109 1.054079 2.453471 +v 0.602109 3.364694 3.769022 +v 0.602109 1.054078 3.769021 +v -0.602109 1.054078 3.769021 +vt 0.666123 0.332861 +vt 0.334894 0.333877 +vt 0.333877 0.002647 +vt 0.002648 0.333877 +vt 0.001632 0.002648 +vt 0.332861 0.001632 +vt 0.333877 0.665106 +vt 0.002647 0.666123 +vt 0.001632 0.334894 +vt 0.334894 0.666123 +vt 0.333877 0.334894 +vt 0.665106 0.333877 +vt 0.998368 0.332861 +vt 0.667139 0.333877 +vt 0.666123 0.002647 +vt 0.333877 0.667139 +vt 0.665106 0.666123 +vt 0.666123 0.997352 +vt 0.665106 0.001632 +vt 0.333877 0.332861 +vt 0.332861 0.333877 +vt 0.666123 0.665106 +vt 0.997352 0.001632 +vt 0.334894 0.998368 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 407/756/380 408/757/380 409/758/380 +f 408/759/381 410/760/381 411/761/381 +f 410/762/382 412/763/382 413/764/382 +f 412/765/383 407/766/383 414/767/383 +f 414/768/384 409/769/384 411/770/384 +f 412/771/385 410/772/385 408/773/385 +f 414/774/380 407/756/380 409/758/380 +f 409/775/381 408/759/381 411/761/381 +f 411/776/382 410/762/382 413/764/382 +f 413/777/383 412/765/383 414/767/383 +f 413/778/384 414/768/384 411/770/384 +f 407/779/385 412/771/385 408/773/385 +o MainBody +v 1.960505 0.121789 0.032559 +v 1.960505 0.121789 -0.032557 +v 1.960505 0.035004 -0.032557 +v 2.025620 0.035004 -0.032557 +v 2.025620 0.121789 -0.032557 +v 2.025620 0.035004 0.032559 +v 2.025620 0.121789 0.032559 +v 2.025620 0.121790 1.083552 +v 1.960505 0.035004 0.032559 +v 2.025620 0.902858 0.032558 +v 1.960505 0.902858 -0.032557 +v 2.025620 0.902858 -0.032557 +v 1.960505 0.121790 1.148667 +v 1.960505 0.121790 1.083552 +v 1.960505 0.035004 1.083552 +v 2.025620 0.035004 1.148667 +v 2.025620 0.121790 1.148667 +v 1.960505 0.035004 1.148667 +v 2.025620 0.035004 1.083552 +v 2.025620 0.902858 1.148667 +v 1.960505 0.902858 1.083552 +v 2.025620 0.902858 1.083552 +v 1.960505 0.496703 1.148667 +v 1.960505 0.496703 1.083552 +v 2.025620 0.496702 1.083552 +v 2.025620 0.496702 1.148667 +v 1.960505 0.496702 0.032559 +v 1.960505 0.496702 -0.032557 +v 2.025620 0.496702 -0.032557 +v 2.025620 0.496702 0.032559 +v 1.960505 0.902858 0.032558 +v 1.960505 0.590431 -0.032557 +v 2.025620 0.590431 -0.032557 +v 2.025620 0.590431 0.032558 +v 1.960505 0.590431 0.032558 +v 1.960505 0.902858 1.148667 +v 1.960505 0.590431 1.083552 +v 2.025620 0.590431 1.083552 +v 2.025620 0.590431 1.148667 +v 1.960505 0.590431 1.148667 +v -1.135648 4.236131 -2.439156 +v -1.135648 0.944072 -2.349645 +v -1.135648 0.944072 -2.439157 +v -1.135648 4.236131 -2.349644 +v -1.225160 0.944072 -2.349645 +v -1.225160 4.236131 -2.349644 +v -1.225160 0.944072 -2.439157 +v -1.225160 4.236131 -2.439156 +v -0.984018 1.417435 -1.140142 +v -0.984018 0.990447 -2.542124 +v -0.984018 0.990447 -1.140142 +v -0.984018 1.417435 -2.542124 +v 0.984019 0.990446 -2.542124 +v 0.984019 1.417434 -2.542124 +v 0.984019 0.990446 -1.140142 +v 0.984019 1.417434 -1.140142 +v -1.000000 1.444865 1.836146 +v -1.000000 1.054287 -0.163853 +v -1.000000 1.054287 1.836147 +v -1.000000 1.444865 -0.163853 +v 1.000000 1.444865 -0.163853 +v 1.000000 1.054287 1.836147 +v 1.000000 1.054287 -0.163853 +v 1.000000 1.444865 1.836147 +v -1.401982 1.100000 -1.534202 +v -1.401982 0.900000 -2.803965 +v -1.401982 0.900000 -1.534202 +v -1.401982 1.100001 -2.803965 +v 1.401982 1.099999 -2.803964 +v 2.000000 1.099999 -0.319406 +v 2.000000 0.899998 4.000001 +v 2.000000 0.899999 -0.319406 +v 2.000000 1.099998 4.000001 +v -2.000000 0.899999 4.000000 +v 1.401982 0.899999 -2.803964 +v 1.401982 0.899999 -1.534201 +v 1.401982 1.099999 -1.534201 +v -0.980572 3.493236 2.036421 +v -0.980572 1.122929 1.618471 +v -0.980572 3.424315 2.427284 +v 0.980572 1.122929 1.618472 +v -0.980572 1.054009 2.009334 +v 0.980572 3.424315 2.427284 +v 0.980572 1.054009 2.009335 +v 0.980572 3.493235 2.036421 +v -0.742343 4.377108 1.957737 +v -0.742343 3.422644 1.939661 +v -0.742343 4.367644 2.457409 +v 0.742344 3.422644 1.939662 +v -0.742343 3.413181 2.439332 +v 0.742344 4.367644 2.457409 +v 0.742344 3.413181 2.439332 +v 0.742344 4.377108 1.957738 +v -0.551987 1.338115 -2.478072 +v -0.551987 1.028879 -3.436547 +v -0.551987 1.028879 -2.478072 +v -0.551987 1.338116 -3.436547 +v 0.551987 1.338116 -3.436547 +v 0.551987 1.028878 -2.478072 +v 0.551987 1.028879 -3.436547 +v 0.551987 1.338115 -2.478072 +v -2.033444 0.121790 0.032558 +v -2.033444 0.121790 -0.032558 +v -2.033444 0.035005 -0.032558 +v -1.968328 0.035005 -0.032558 +v -1.968328 0.121790 -0.032558 +v -1.968328 0.035005 0.032558 +v -1.968328 0.121790 0.032558 +v -1.968328 0.121790 1.083551 +v -2.033444 0.035005 0.032558 +v -1.968328 0.902859 0.032558 +v -2.033444 0.902859 -0.032558 +v -1.968328 0.902859 -0.032558 +v -2.033444 0.121790 1.148666 +v -2.033444 0.121790 1.083551 +v -2.033444 0.035005 1.083551 +v -1.968328 0.035005 1.148666 +v -1.968328 0.121790 1.148666 +v -2.033444 0.035005 1.148666 +v -1.968328 0.035005 1.083551 +v -1.968328 0.902859 1.148666 +v -2.033444 0.902859 1.083551 +v -1.968328 0.902859 1.083551 +v -2.033444 0.496704 1.148666 +v -2.033444 0.496704 1.083551 +v -1.968328 0.496703 1.083551 +v -1.968328 0.496703 1.148666 +v -2.033444 0.496703 0.032558 +v -2.033444 0.496703 -0.032558 +v -1.968328 0.496703 -0.032558 +v -1.968328 0.496703 0.032558 +v -2.033444 0.902859 0.032558 +v -2.033444 0.590432 -0.032558 +v -1.968328 0.590432 -0.032558 +v -1.968328 0.590432 0.032558 +v -2.033444 0.590432 0.032558 +v -2.033444 0.902859 1.148666 +v -2.033444 0.590432 1.083551 +v -1.968328 0.590432 1.083551 +v -1.968328 0.590432 1.148666 +v -2.033444 0.590432 1.148666 +v -2.000000 1.099999 4.000000 +v -2.000000 0.900000 -0.319407 +v -2.000000 1.100000 -0.319407 +vt 0.831442 0.264770 +vt 0.826945 0.264756 +vt 0.826977 0.254323 +vt 0.735286 0.852961 +vt 0.730822 0.842513 +vt 0.730790 0.852947 +vt 0.474443 0.758477 +vt 0.469914 0.748058 +vt 0.469946 0.758491 +vt 0.896324 0.374080 +vt 0.891605 0.446544 +vt 0.896102 0.446558 +vt 0.882155 0.369590 +vt 0.886638 0.365085 +vt 0.882141 0.365099 +vt 0.779149 0.031014 +vt 0.774666 0.026509 +vt 0.774652 0.031000 +vt 0.908518 0.265003 +vt 0.904022 0.264989 +vt 0.904054 0.254556 +vt 0.831474 0.254337 +vt 0.397366 0.758713 +vt 0.392837 0.748294 +vt 0.392869 0.758727 +vt 0.750092 0.852961 +vt 0.745628 0.842513 +vt 0.745596 0.852947 +vt 0.882390 0.446558 +vt 0.886873 0.442053 +vt 0.882376 0.442067 +vt 0.779149 0.245490 +vt 0.774666 0.240986 +vt 0.774652 0.245476 +vt 0.908380 0.310076 +vt 0.903883 0.310062 +vt 0.745137 0.898039 +vt 0.745274 0.852961 +vt 0.740640 0.898025 +vt 0.397505 0.803785 +vt 0.393008 0.803798 +vt 0.749954 0.898039 +vt 0.745457 0.898025 +vt 0.831303 0.309844 +vt 0.826806 0.309830 +vt 0.735148 0.898039 +vt 0.730651 0.898025 +vt 0.474582 0.803549 +vt 0.470085 0.803563 +vt 0.739966 0.898038 +vt 0.735607 0.852947 +vt 0.735469 0.898025 +vt 0.886652 0.369576 +vt 0.740136 0.842526 +vt 0.735640 0.842513 +vt 0.740779 0.852947 +vt 0.745307 0.842527 +vt 0.740811 0.842513 +vt 0.831154 0.358673 +vt 0.826657 0.358660 +vt 0.826771 0.321099 +vt 0.734998 0.946873 +vt 0.730617 0.909294 +vt 0.730502 0.946859 +vt 0.474732 0.852376 +vt 0.470120 0.814830 +vt 0.470235 0.852389 +vt 0.739815 0.946873 +vt 0.735434 0.909294 +vt 0.735319 0.946859 +vt 0.908229 0.358905 +vt 0.903733 0.358892 +vt 0.903848 0.321331 +vt 0.432606 0.852639 +vt 0.437218 0.890190 +vt 0.437103 0.852625 +vt 0.397655 0.852612 +vt 0.393043 0.815067 +vt 0.393158 0.852625 +vt 0.749803 0.946873 +vt 0.745422 0.909294 +vt 0.745307 0.946859 +vt 0.908345 0.321344 +vt 0.397539 0.815053 +vt 0.749919 0.909308 +vt 0.831268 0.321112 +vt 0.735113 0.909308 +vt 0.474617 0.814816 +vt 0.905980 0.446558 +vt 0.910256 0.374066 +vt 0.905759 0.374079 +vt 0.739931 0.909308 +vt 0.903864 0.321393 +vt 0.831284 0.321175 +vt 0.831319 0.309906 +vt 0.905538 0.374066 +vt 0.905759 0.446544 +vt 0.901262 0.446558 +vt 0.999215 0.593042 +vt 0.989181 0.197303 +vt 0.997999 0.197276 +vt 0.977931 0.593121 +vt 0.970329 0.197276 +vt 0.979147 0.197303 +vt 0.999215 0.988904 +vt 0.989181 0.593148 +vt 0.997999 0.593121 +vt 0.980363 0.593121 +vt 0.774652 0.224813 +vt 0.783497 0.233592 +vt 0.774679 0.233619 +vt 0.191998 0.807591 +vt 0.140177 0.945358 +vt 0.140593 0.807433 +vt 0.775247 0.224786 +vt 0.826062 0.031014 +vt 0.826657 0.224628 +vt 0.881186 0.878121 +vt 0.932166 0.740036 +vt 0.932589 0.877964 +vt 0.774652 0.447938 +vt 0.826657 0.254481 +vt 0.826061 0.448095 +vt 0.417414 0.747622 +vt 0.278710 0.554426 +vt 0.416824 0.554006 +vt 0.556033 0.748044 +vt 0.417920 0.747622 +vt 0.556626 0.554429 +vt 0.980027 0.740181 +vt 0.933005 0.740036 +vt 0.092295 0.945506 +vt 0.091871 0.807579 +vt 0.139320 0.945361 +vt 0.036861 0.945506 +vt 0.083457 0.807435 +vt 0.083880 0.945361 +vt 0.195609 0.945359 +vt 0.243059 0.807577 +vt 0.242636 0.945504 +vt 0.278710 0.691935 +vt 0.140597 0.692354 +vt 0.278289 0.554008 +vt 0.138898 0.692357 +vt 0.001207 0.554008 +vt 0.139320 0.554430 +vt 0.879512 0.861947 +vt 0.855017 0.999799 +vt 0.855434 0.861873 +vt 0.934356 0.724023 +vt 0.933510 0.448169 +vt 0.958436 0.723949 +vt 0.830093 0.724023 +vt 0.853323 0.448095 +vt 0.854169 0.723949 +vt 0.908582 0.723949 +vt 0.932662 0.724023 +vt 0.279130 0.140238 +vt 0.554945 0.001476 +vt 0.555365 0.139399 +vt 0.277442 0.416086 +vt 0.277020 0.554008 +vt 0.001207 0.415242 +vt 0.880762 0.740036 +vt 0.880888 0.453616 +vt 0.908455 0.734517 +vt 0.936780 0.197276 +vt 0.936368 0.062029 +vt 0.963834 0.197194 +vt 0.936243 0.072496 +vt 0.908675 0.353386 +vt 0.908550 0.066977 +vt 0.360604 0.883289 +vt 0.388078 0.748124 +vt 0.387664 0.883372 +vt 0.692936 0.733201 +vt 0.829245 0.448510 +vt 0.828370 0.733615 +vt 0.692060 0.448095 +vt 0.557502 0.733624 +vt 0.556626 0.448510 +vt 0.658255 0.957992 +vt 0.658418 0.843236 +vt 0.692774 0.957276 +vt 0.326090 0.955118 +vt 0.325778 0.852728 +vt 0.360604 0.955013 +vt 0.632700 0.843234 +vt 0.598344 0.957271 +vt 0.598183 0.842519 +vt 0.278710 0.955013 +vt 0.313539 0.852729 +vt 0.313225 0.955118 +vt 0.036437 0.807121 +vt 0.036789 0.692357 +vt 0.138968 0.807435 +vt 0.242706 0.692354 +vt 0.140529 0.807433 +vt 0.140177 0.692668 +vt 0.474732 0.852740 +vt 0.437218 0.946920 +vt 0.437503 0.852625 +vt 0.750458 0.951236 +vt 0.750124 0.842627 +vt 0.787690 0.951122 +vt 0.430354 0.852740 +vt 0.392837 0.946921 +vt 0.393127 0.852625 +vt 0.692936 0.951122 +vt 0.730502 0.842627 +vt 0.730168 0.951236 +vt 0.692936 0.842233 +vt 0.598183 0.733911 +vt 0.692604 0.733624 +vt 0.787357 0.842513 +vt 0.787690 0.733904 +vt 0.479517 0.758491 +vt 0.475020 0.758477 +vt 0.475052 0.748044 +vt 0.901277 0.109992 +vt 0.905806 0.120412 +vt 0.905774 0.109978 +vt 0.360316 0.758475 +vt 0.355787 0.748055 +vt 0.355819 0.758488 +vt 0.891605 0.374080 +vt 0.886887 0.446544 +vt 0.891384 0.446558 +vt 0.388092 0.752545 +vt 0.392575 0.748042 +vt 0.779149 0.238123 +vt 0.774652 0.238109 +vt 0.556594 0.758723 +vt 0.552097 0.758709 +vt 0.552129 0.748276 +vt 0.479549 0.748058 +vt 0.283239 0.758710 +vt 0.278710 0.748291 +vt 0.278742 0.758724 +vt 0.088666 0.817883 +vt 0.084169 0.817869 +vt 0.084201 0.807435 +vt 0.388327 0.829514 +vt 0.388313 0.825023 +vt 0.392810 0.825010 +vt 0.779149 0.005980 +vt 0.774666 0.001476 +vt 0.774652 0.005967 +vt 0.556455 0.803797 +vt 0.551958 0.803783 +vt 0.321111 0.852638 +vt 0.321249 0.897714 +vt 0.325608 0.852623 +vt 0.283378 0.803782 +vt 0.278881 0.803796 +vt 0.088527 0.862961 +vt 0.084030 0.862947 +vt 0.479378 0.803565 +vt 0.474882 0.803551 +vt 0.901139 0.064914 +vt 0.905636 0.064900 +vt 0.360454 0.803546 +vt 0.355957 0.803560 +vt 0.905636 0.175952 +vt 0.901278 0.130860 +vt 0.901139 0.175938 +vt 0.392589 0.752531 +vt 0.901310 0.120426 +vt 0.325746 0.897700 +vt 0.321281 0.908149 +vt 0.325778 0.908135 +vt 0.479229 0.852394 +vt 0.474848 0.814819 +vt 0.900990 0.016081 +vt 0.905601 0.053632 +vt 0.905486 0.016067 +vt 0.360604 0.852373 +vt 0.355992 0.814827 +vt 0.356107 0.852387 +vt 0.905486 0.224786 +vt 0.901105 0.187208 +vt 0.900990 0.224772 +vt 0.556305 0.852627 +vt 0.551809 0.852613 +vt 0.551924 0.815052 +vt 0.313539 0.852638 +vt 0.318151 0.890187 +vt 0.318035 0.852623 +vt 0.283527 0.852610 +vt 0.278916 0.815064 +vt 0.279030 0.852623 +vt 0.088377 0.911795 +vt 0.083996 0.874217 +vt 0.083880 0.911781 +vt 0.556420 0.815065 +vt 0.283412 0.815050 +vt 0.088493 0.874231 +vt 0.479344 0.814832 +vt 0.901105 0.053646 +vt 0.360489 0.814814 +vt 0.896545 0.446558 +vt 0.900821 0.374065 +vt 0.905601 0.187222 +vt 0.479360 0.814895 +vt 0.392575 0.829514 +vt 0.392796 0.901992 +vt 0.388299 0.902005 +vt 0.880762 0.448169 +vt 0.855851 0.723947 +vt 0.856684 0.448095 +vt 0.830516 0.861950 +vt 0.854594 0.861876 +vt 0.280391 0.554006 +vt 0.555785 0.277321 +vt 0.556626 0.553167 +vt 0.278710 0.002320 +vt 0.277865 0.278164 +vt 0.002475 0.001476 +vt 0.879929 0.724021 +vt 0.279551 0.278161 +vt 0.001630 0.277320 +vt 0.830940 0.999876 +vt 0.735319 0.842526 +vt 0.474411 0.748044 +vt 0.891827 0.374066 +vt 0.779163 0.026523 +vt 0.908550 0.254569 +vt 0.397334 0.748280 +vt 0.750124 0.842526 +vt 0.779162 0.241000 +vt 0.740104 0.852961 +vt 0.432721 0.890204 +vt 0.910477 0.446544 +vt 0.901042 0.374079 +vt 0.990397 0.593069 +vt 0.969113 0.593094 +vt 0.990397 0.988932 +vt 0.987965 0.197276 +vt 0.783470 0.224786 +vt 0.191581 0.945516 +vt 0.774652 0.031171 +vt 0.880762 0.740194 +vt 0.775247 0.254323 +vt 0.279300 0.748042 +vt 0.979610 0.878107 +vt 0.036437 0.807579 +vt 0.196034 0.807433 +vt 0.000785 0.691935 +vt 0.879095 0.999873 +vt 0.829245 0.448169 +vt 0.909429 0.448095 +vt 0.908582 0.448095 +vt 0.936368 0.358905 +vt 0.361018 0.748042 +vt 0.693811 0.448095 +vt 0.692936 0.842519 +vt 0.632862 0.957986 +vt 0.243059 0.807119 +vt 0.474447 0.947033 +vt 0.138897 0.807435 +vt 0.430065 0.947034 +vt 0.693269 0.842513 +vt 0.598513 0.842519 +vt 0.360293 0.852623 +vt 0.000785 0.553164 +vt 0.963422 0.061947 +vt 0.957589 0.448095 +vt 0.693268 0.733615 +vt 0.283207 0.748277 +vt 0.140177 0.554428 +vt 0.139320 0.692671 +vt 0.418513 0.554006 +vt 0.360284 0.748042 +vt 0.887109 0.374066 +vt 0.779162 0.233632 +vt 0.556626 0.748290 +vt 0.088698 0.807449 +vt 0.392823 0.829500 +vt 0.779163 0.001490 +vt 0.905774 0.130874 +vt 0.313654 0.890201 +vt 0.901042 0.446544 +vt 0.388078 0.829528 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.984800 -0.173600 +vn -0.000000 0.984800 0.173600 +vn -0.000000 -0.173600 0.984800 +vn 0.000000 0.173600 -0.984800 +vn 0.000000 -0.999800 -0.018900 +vn 0.000000 0.999800 0.018900 +vn 0.000000 -0.018900 0.999800 +vn 0.000000 0.018900 -0.999800 +vn 0.897200 0.000000 -0.441700 +vn -0.897200 -0.000000 -0.441700 +vn 0.000000 0.984800 0.173700 +usemtl None +f 415/780/386 416/781/386 417/782/386 +f 416/783/387 418/784/387 419/785/387 +f 419/786/386 420/787/386 421/788/386 +f 422/789/388 415/790/388 421/791/388 +f 423/792/389 418/793/389 417/794/389 +f 424/795/388 425/796/388 426/797/388 +f 427/798/386 428/799/386 429/800/386 +f 428/799/386 415/780/386 423/801/386 +f 422/802/386 430/803/386 431/804/386 +f 431/805/390 432/806/390 427/807/390 +f 432/808/389 433/809/389 429/810/389 +f 434/811/388 435/812/388 436/813/388 +f 437/814/386 438/815/386 428/799/386 +f 438/816/387 428/817/387 439/818/387 +f 439/819/386 431/804/386 440/820/386 +f 440/821/390 427/807/390 437/822/390 +f 441/823/386 442/824/386 416/781/386 +f 442/825/387 419/785/387 443/826/387 +f 443/827/386 421/788/386 444/828/386 +f 444/829/390 415/830/390 441/831/390 +f 429/810/389 420/832/389 423/792/389 +f 421/788/386 420/787/386 422/802/386 +f 415/830/390 420/833/390 423/834/390 +f 422/835/387 429/836/387 433/837/387 +f 445/838/386 425/839/386 446/840/386 +f 425/841/387 447/842/387 426/843/387 +f 426/844/386 448/845/386 424/846/386 +f 424/847/390 449/848/390 445/849/390 +f 450/850/386 435/851/386 451/852/386 +f 435/853/387 452/854/387 436/855/387 +f 436/856/386 453/857/386 434/858/386 +f 434/859/390 454/860/390 450/861/390 +f 454/862/386 451/852/386 438/815/386 +f 452/863/386 440/820/386 453/857/386 +f 453/864/390 437/822/390 454/860/390 +f 449/865/386 446/840/386 442/824/386 +f 446/866/387 443/826/387 447/842/387 +f 447/867/386 444/828/386 448/845/386 +f 438/868/389 444/869/389 441/870/389 +f 444/829/390 449/848/390 448/871/390 +f 438/815/390 452/872/390 439/815/390 +f 452/872/386 448/873/386 444/874/386 +f 448/875/388 452/876/388 451/877/388 +f 455/878/391 456/879/391 457/880/391 +f 458/881/387 459/882/387 456/883/387 +f 460/884/386 461/885/386 459/886/386 +f 462/883/390 457/885/390 461/887/390 +f 457/888/388 459/889/388 461/890/388 +f 463/891/386 464/892/386 465/893/386 +f 466/894/390 467/895/390 464/896/390 +f 468/897/391 469/898/391 467/899/391 +f 470/900/387 465/901/387 469/902/387 +f 465/903/388 467/904/388 469/905/388 +f 470/906/389 468/907/389 463/908/389 +f 471/909/386 472/899/386 473/910/386 +f 474/911/390 475/912/390 472/913/390 +f 475/914/391 476/915/391 477/916/391 +f 478/917/387 473/918/387 476/919/387 +f 473/920/388 472/921/388 476/922/388 +f 478/923/389 474/924/389 471/925/389 +f 479/926/386 480/927/386 481/928/386 +f 482/929/390 483/930/390 480/931/390 +f 484/932/391 485/933/391 486/934/391 +f 487/935/387 488/930/387 485/936/387 +f 481/937/388 489/938/388 490/939/388 +f 491/940/389 483/941/389 479/942/389 +f 492/943/386 493/944/386 494/945/386 +f 493/946/392 495/947/392 496/948/392 +f 495/949/391 497/950/391 498/951/391 +f 499/952/393 494/953/393 497/954/393 +f 494/955/394 498/956/394 497/957/394 +f 499/958/395 493/959/395 492/960/395 +f 500/961/386 501/962/386 502/963/386 +f 501/964/396 503/965/396 504/966/396 +f 503/967/391 505/968/391 506/969/391 +f 507/970/397 502/971/397 505/972/397 +f 502/973/398 504/974/398 505/975/398 +f 507/976/399 501/977/399 500/978/399 +f 508/979/386 509/980/386 510/981/386 +f 511/982/390 512/983/390 509/984/390 +f 512/985/391 513/986/391 514/987/391 +f 515/988/387 510/989/387 513/990/387 +f 510/991/388 514/992/388 513/993/388 +f 515/994/389 512/991/389 508/995/389 +f 516/996/386 517/997/386 518/998/386 +f 517/999/387 519/1000/387 520/1001/387 +f 520/1002/386 521/1003/386 522/1004/386 +f 523/1005/388 516/1006/388 522/1007/388 +f 524/1008/388 518/953/388 519/1009/388 +f 525/1010/388 526/890/388 527/1011/388 +f 528/1012/386 529/1013/386 530/1014/386 +f 529/1013/386 516/996/386 524/1015/386 +f 523/1016/386 531/1017/386 532/1018/386 +f 532/1019/387 528/1020/387 533/1021/387 +f 533/1022/388 530/1023/388 534/1024/388 +f 535/1025/388 536/1026/388 537/1027/388 +f 538/1028/386 539/1029/386 529/1013/386 +f 539/1030/387 529/1031/387 540/1032/387 +f 540/1033/386 532/1018/386 541/1034/386 +f 541/1035/390 528/1020/390 538/1036/390 +f 542/1037/386 543/1038/386 517/997/386 +f 543/1039/387 520/1001/387 544/1040/387 +f 544/1041/386 522/1004/386 545/1042/386 +f 545/1043/390 516/1044/390 542/1045/390 +f 530/1023/388 524/1008/388 521/1046/388 +f 522/1004/386 521/1003/386 523/1016/386 +f 516/1044/390 521/1000/390 524/1047/390 +f 523/1048/387 530/1049/387 534/1050/387 +f 546/1051/386 526/844/386 547/1052/386 +f 526/1053/387 548/1054/387 527/1055/387 +f 527/1056/386 549/1057/386 525/1058/386 +f 525/1059/390 550/1060/390 546/1061/390 +f 551/1062/386 536/1063/386 552/1064/386 +f 536/1065/387 553/1066/387 537/1067/387 +f 537/1068/386 554/1069/386 535/1070/386 +f 535/1071/390 555/1072/390 551/1073/390 +f 555/1074/386 552/1064/386 539/1029/386 +f 553/1075/386 541/1034/386 554/1069/386 +f 554/1076/390 538/1036/390 555/1072/390 +f 550/1077/386 547/1052/386 543/1038/386 +f 547/1078/387 544/1040/387 548/1054/387 +f 548/1079/386 545/1042/386 549/1057/386 +f 539/1080/389 545/1081/389 542/789/389 +f 545/1043/390 550/1060/390 549/1082/390 +f 539/1029/390 553/1064/390 540/1029/390 +f 553/1064/391 545/1037/391 549/1083/391 +f 549/1084/388 553/1085/388 552/1086/388 +f 556/1087/386 557/1088/386 488/1089/386 +f 491/1090/400 486/934/400 490/1091/400 +f 488/1092/388 486/1093/388 485/1094/388 +f 487/1095/389 484/1096/389 556/1097/389 +f 558/1098/401 481/928/401 557/1088/401 +f 557/1099/388 490/939/388 486/1093/388 +f 484/1096/389 491/940/389 558/1100/389 +f 483/1101/391 490/1091/391 489/927/391 +f 423/801/386 415/780/386 417/782/386 +f 417/1102/387 418/784/387 416/783/387 +f 418/1103/386 420/787/386 419/786/386 +f 428/1104/388 415/790/388 422/789/388 +f 420/832/389 418/793/389 423/792/389 +f 445/1105/388 425/796/388 424/795/388 +f 432/1106/386 427/798/386 429/800/386 +f 429/800/386 428/799/386 423/801/386 +f 433/1107/386 430/803/386 422/802/386 +f 430/1108/390 432/806/390 431/805/390 +f 430/1006/389 433/809/389 432/808/389 +f 450/1109/388 435/812/388 434/811/388 +f 427/798/386 437/814/386 428/799/386 +f 439/818/387 428/817/387 422/835/387 +f 422/802/386 431/804/386 439/819/386 +f 431/805/390 427/807/390 440/821/390 +f 415/780/386 441/823/386 416/781/386 +f 416/783/387 419/785/387 442/825/387 +f 419/786/386 421/788/386 443/827/386 +f 421/1110/390 415/830/390 444/829/390 +f 433/809/389 420/832/389 429/810/389 +f 421/1110/390 420/833/390 415/830/390 +f 428/817/387 429/836/387 422/835/387 +f 449/865/386 445/838/386 446/840/386 +f 446/866/387 447/842/387 425/841/387 +f 447/867/386 448/845/386 426/844/386 +f 448/871/387 424/847/387 449/848/387 +f 454/862/386 450/850/386 451/852/386 +f 451/1111/387 452/854/387 435/853/387 +f 452/863/386 453/857/386 436/856/386 +f 453/864/390 454/860/390 434/859/390 +f 437/814/386 454/862/386 438/815/386 +f 439/819/386 440/820/386 452/863/386 +f 440/821/390 437/822/390 453/864/390 +f 441/823/386 449/865/386 442/824/386 +f 442/825/387 443/826/387 446/866/387 +f 443/827/386 444/828/386 447/867/386 +f 439/1112/388 438/868/388 444/869/388 +f 441/831/390 449/848/390 444/829/390 +f 438/815/390 451/852/390 452/872/390 +f 441/823/386 438/815/386 451/852/386 +f 449/865/386 441/823/386 451/852/386 +f 439/815/386 452/872/386 444/874/386 +f 449/1113/388 448/875/388 451/877/388 +f 458/1114/391 456/879/391 455/878/391 +f 460/1115/387 459/882/387 458/881/387 +f 462/1116/386 461/885/386 460/884/386 +f 455/1117/390 457/885/390 462/883/390 +f 456/1118/388 459/889/388 457/888/388 +f 466/1119/386 464/892/386 463/891/386 +f 468/1120/390 467/895/390 466/894/390 +f 470/1121/391 469/898/391 468/897/391 +f 463/1122/387 465/901/387 470/900/387 +f 464/1123/388 467/904/388 465/903/388 +f 558/1100/389 491/940/389 479/942/389 +f 474/1124/386 472/899/386 471/909/386 +f 478/1125/391 476/915/391 475/914/391 +f 471/1126/387 473/918/387 478/917/387 +f 475/1127/389 474/924/389 478/923/389 +f 482/1128/386 480/927/386 479/926/386 +f 487/1129/391 485/933/391 484/932/391 +f 556/1130/387 488/930/387 487/935/387 +f 480/1095/388 489/938/388 481/937/388 +f 494/945/386 493/944/386 496/1131/386 +f 499/1132/391 497/950/391 495/949/391 +f 492/1133/402 494/953/402 499/952/402 +f 496/1134/394 498/956/394 494/955/394 +f 495/955/395 493/959/395 499/958/395 +f 502/963/386 501/962/386 504/1135/386 +f 507/1136/391 505/968/391 503/967/391 +f 500/1070/397 502/971/397 507/970/397 +f 503/1137/399 501/977/399 507/976/399 +f 511/1138/386 509/980/386 508/979/386 +f 472/913/390 475/912/390 477/1139/390 +f 515/1140/391 513/986/391 512/985/391 +f 508/1141/387 510/989/387 515/988/387 +f 509/1142/388 514/992/388 510/991/388 +f 504/966/396 503/965/396 506/1143/396 +f 479/942/389 483/941/389 482/1144/389 +f 496/948/392 495/947/392 498/1145/392 +f 480/931/390 483/930/390 489/1146/390 +f 508/995/389 512/991/389 511/1147/389 +f 509/984/390 512/983/390 514/994/390 +f 422/802/386 420/787/386 433/1107/386 +f 523/1016/386 521/1003/386 534/1148/386 +f 476/922/388 472/921/388 477/1149/388 +f 505/975/398 504/974/398 506/1150/398 +f 463/908/389 468/907/389 466/1151/389 +f 524/1015/386 516/996/386 518/998/386 +f 518/1047/387 519/1000/387 517/999/387 +f 519/1152/386 521/1003/386 520/1002/386 +f 529/1153/388 516/1006/388 523/1005/388 +f 521/1046/388 524/1008/388 519/1009/388 +f 546/1154/388 526/890/388 525/1010/388 +f 533/1155/386 528/1012/386 530/1014/386 +f 530/1014/386 529/1013/386 524/1015/386 +f 534/1148/386 531/1017/386 523/1016/386 +f 531/1156/387 532/1019/387 533/1021/387 +f 531/1157/388 533/1022/388 534/1024/388 +f 551/1158/388 536/1026/388 535/1025/388 +f 528/1012/386 538/1028/386 529/1013/386 +f 540/1032/387 529/1031/387 523/1048/387 +f 523/1016/386 532/1018/386 540/1033/386 +f 532/1019/387 541/1035/387 528/1020/387 +f 516/996/386 542/1037/386 517/997/386 +f 517/999/387 520/1001/387 543/1039/387 +f 520/1002/386 522/1004/386 544/1041/386 +f 522/1159/387 545/1043/387 516/1044/387 +f 534/1024/388 530/1023/388 521/1046/388 +f 522/1159/390 521/1000/390 516/1044/390 +f 529/1031/387 530/1049/387 523/1048/387 +f 550/1077/386 546/1051/386 547/1052/386 +f 547/1078/387 548/1054/387 526/1053/387 +f 548/1079/386 549/1057/386 527/1056/386 +f 549/1082/390 550/1060/390 525/1059/390 +f 555/1074/386 551/1062/386 552/1064/386 +f 552/1160/387 553/1066/387 536/1065/387 +f 553/1075/386 554/1069/386 537/1068/386 +f 554/1076/390 555/1072/390 535/1071/390 +f 538/1028/386 555/1074/386 539/1029/386 +f 540/1033/386 541/1034/386 553/1075/386 +f 541/1035/390 538/1036/390 554/1076/390 +f 542/1037/386 550/1077/386 543/1038/386 +f 543/1039/387 544/1040/387 547/1078/387 +f 544/1041/386 545/1042/386 548/1079/386 +f 540/1161/389 545/1081/389 539/1080/389 +f 542/1045/390 550/1060/390 545/1043/390 +f 539/1029/390 552/1064/390 553/1064/390 +f 542/1037/386 539/1029/386 552/1064/386 +f 550/1077/386 542/1037/386 552/1064/386 +f 540/1029/391 545/1037/391 553/1064/391 +f 550/1162/388 549/1084/388 552/1086/388 +f 558/1098/386 557/1088/386 556/1087/386 +f 484/932/400 486/934/400 491/1090/400 +f 557/1099/388 486/1093/388 488/1092/388 +f 479/926/401 481/928/401 558/1098/401 +f 481/937/388 490/939/388 557/1099/388 +f 491/1090/391 490/1091/391 483/1101/391 +f 556/1097/389 484/1096/389 558/1100/389 +o CargoLeft +v -1.902109 3.364694 3.769022 +v -1.902109 3.364695 2.453471 +v -1.902109 1.054079 2.453471 +v -0.697891 3.364695 2.453471 +v -0.697891 1.054079 2.453471 +v -0.697891 3.364694 3.769022 +v -0.697891 1.054078 3.769021 +v -1.902109 1.054078 3.769021 +vt 0.665272 0.333718 +vt 0.335739 0.334728 +vt 0.334728 0.005195 +vt 0.005196 0.334728 +vt 0.004185 0.005196 +vt 0.333718 0.004185 +vt 0.334728 0.664261 +vt 0.005195 0.665272 +vt 0.004185 0.335739 +vt 0.335739 0.665272 +vt 0.334728 0.335739 +vt 0.664261 0.334728 +vt 0.995815 0.333718 +vt 0.666282 0.334728 +vt 0.665272 0.005195 +vt 0.334728 0.666282 +vt 0.664261 0.665272 +vt 0.665272 0.994804 +vt 0.664261 0.004185 +vt 0.334728 0.333718 +vt 0.333718 0.334728 +vt 0.665272 0.664261 +vt 0.994804 0.004185 +vt 0.335739 0.995815 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 559/1163/403 560/1164/403 561/1165/403 +f 560/1166/404 562/1167/404 563/1168/404 +f 562/1169/405 564/1170/405 565/1171/405 +f 564/1172/406 559/1173/406 566/1174/406 +f 566/1175/407 561/1176/407 563/1177/407 +f 564/1178/408 562/1179/408 560/1180/408 +f 566/1181/403 559/1163/403 561/1165/403 +f 561/1182/404 560/1166/404 563/1168/404 +f 563/1183/405 562/1169/405 565/1171/405 +f 565/1184/406 564/1172/406 566/1174/406 +f 565/1185/407 566/1175/407 563/1177/407 +f 559/1186/408 564/1178/408 560/1180/408 +o CargoRight +v 0.697891 3.364694 3.769022 +v 0.697891 3.364695 2.453471 +v 0.697891 1.054079 2.453471 +v 1.902109 3.364695 2.453471 +v 1.902109 1.054079 2.453471 +v 1.902109 3.364694 3.769022 +v 1.902109 1.054078 3.769021 +v 0.697891 1.054078 3.769021 +vt 0.665758 0.333229 +vt 0.335257 0.334242 +vt 0.334242 0.003741 +vt 0.003742 0.334242 +vt 0.002728 0.003742 +vt 0.333229 0.002728 +vt 0.334242 0.664743 +vt 0.003741 0.665758 +vt 0.002728 0.335257 +vt 0.335257 0.665758 +vt 0.334242 0.335257 +vt 0.664743 0.334242 +vt 0.997272 0.333229 +vt 0.666771 0.334242 +vt 0.665758 0.003741 +vt 0.334242 0.666771 +vt 0.664743 0.665758 +vt 0.665758 0.996258 +vt 0.664743 0.002728 +vt 0.334242 0.333229 +vt 0.333229 0.334242 +vt 0.665758 0.664743 +vt 0.996258 0.002728 +vt 0.335257 0.997272 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 567/1187/409 568/1188/409 569/1189/409 +f 568/1190/410 570/1191/410 571/1192/410 +f 570/1193/411 572/1194/411 573/1195/411 +f 572/1196/412 567/1197/412 574/1198/412 +f 574/1199/413 569/1200/413 571/1201/413 +f 572/1202/414 570/1203/414 568/1204/414 +f 574/1205/409 567/1187/409 569/1189/409 +f 569/1206/410 568/1190/410 571/1192/410 +f 571/1207/411 570/1193/411 573/1195/411 +f 573/1208/412 572/1196/412 574/1198/412 +f 573/1209/413 574/1199/413 571/1201/413 +f 567/1210/414 572/1202/414 568/1204/414 +o Wheel_Left +v -0.615484 -0.030450 -0.998166 +v -0.665484 -0.030450 -0.998166 +v -0.665484 -0.530450 -0.864191 +v -0.615484 -0.530450 -0.864191 +v -0.665484 -0.896475 -0.498167 +v -0.615484 -0.896475 -0.498167 +v -0.665484 -1.030450 0.001834 +v -0.615484 -1.030450 0.001834 +v -0.615484 -0.896475 0.501833 +v -0.665484 -0.896475 0.501833 +v -0.665484 -0.530450 0.867859 +v -0.615484 -0.530450 0.867859 +v -0.615484 -0.030450 1.001834 +v -0.665484 -0.030450 1.001834 +v -0.665484 0.469550 0.867859 +v -0.615484 0.469550 0.867859 +v -0.665484 0.835576 0.501834 +v -0.615484 0.835576 0.501834 +v -0.665484 0.969550 0.001834 +v -0.615484 0.969550 0.001834 +v -0.665484 0.835576 -0.498166 +v -0.665484 0.469551 -0.864191 +v -0.615484 0.469551 -0.864191 +v -0.615484 0.835576 -0.498166 +v -0.635811 -1.170576 0.346380 +v -0.635811 -1.181869 -0.300568 +v -0.923857 -1.125117 -0.286419 +v -0.923858 -1.114353 0.330258 +v -1.077124 -0.971991 0.289436 +v -1.077124 -0.981417 -0.250590 +v -1.023895 -0.818008 -0.209848 +v -1.023895 -0.810103 0.243017 +v -0.789077 -0.711350 -0.275799 +v -0.482545 -0.704438 0.318160 +v -0.789077 -0.704438 0.318160 +v -0.554979 -0.304465 0.313505 +v -0.482545 -0.711350 -0.275799 +v -0.247728 -0.810103 0.243017 +v -0.247728 -0.818008 -0.209848 +v -0.194499 -0.981417 -0.250590 +v -0.194499 -0.971991 0.289437 +v -0.347765 -1.114353 0.330258 +v -0.347765 -1.125117 -0.286419 +v -0.635811 -0.868174 -0.866489 +v -0.923857 -0.826100 -0.825860 +v -1.077123 -0.719567 -0.722982 +v -1.023895 -0.598421 -0.605992 +v -0.789077 -0.519349 -0.529634 +v -0.482545 -0.519349 -0.529633 +v -0.247728 -0.598421 -0.605992 +v -0.194499 -0.719567 -0.722981 +v -0.347765 -0.826100 -0.825859 +v -0.635811 -0.313546 -1.199743 +v -0.923857 -0.297424 -1.143520 +v -1.077123 -0.256602 -1.001158 +v -1.023895 -0.210182 -0.839270 +v -0.789077 -0.285325 -0.733605 +v -0.482545 -0.285325 -0.733605 +v -0.247727 -0.210182 -0.839270 +v -0.194499 -0.256602 -1.001158 +v -0.347765 -0.297424 -1.143520 +v -0.635811 0.333403 -1.211036 +v -0.923857 0.319254 -1.154284 +v -1.077123 0.283425 -1.010584 +v -1.023895 0.242683 -0.847175 +v -0.789077 0.308634 -0.740517 +v -0.554979 -0.280670 -0.333632 +v -0.482545 0.308634 -0.740517 +v -0.247727 0.242683 -0.847175 +v -0.194499 0.283425 -1.010584 +v -0.347765 0.319254 -1.154284 +v -0.635811 0.899324 -0.897341 +v -0.923857 0.858694 -0.855268 +v -1.077123 0.755816 -0.748734 +v -1.023895 0.638827 -0.627589 +v -0.789077 0.562468 -0.548516 +v -0.482545 0.562468 -0.548516 +v -0.247727 0.638827 -0.627589 +v -0.194499 0.755816 -0.748734 +v -0.347765 0.858694 -0.855268 +v -0.635811 1.232578 -0.342713 +v -0.923857 1.176355 -0.326591 +v -1.077123 1.033993 -0.285769 +v -1.023894 0.872105 -0.239349 +v -0.789077 0.766440 -0.314492 +v -0.482545 0.766440 -0.314492 +v -0.247727 0.872105 -0.239349 +v -0.194499 1.033993 -0.285769 +v -0.347765 1.176355 -0.326591 +v -0.635811 1.243871 0.304236 +v -0.923857 1.187120 0.290086 +v -1.077123 1.043420 0.254258 +v -1.023894 0.880010 0.213515 +v -0.789077 0.773352 0.279467 +v -0.482545 0.773352 0.279467 +v -0.554979 0.366467 -0.309837 +v -0.247727 0.880010 0.213515 +v -0.194499 1.043420 0.254258 +v -0.347765 1.187120 0.290086 +v -0.635811 0.930176 0.870157 +v -0.923857 0.888103 0.829527 +v -1.077123 0.781569 0.726649 +v -1.023895 0.660423 0.609660 +v -0.789077 0.581351 0.533301 +v -0.482545 0.581351 0.533301 +v -0.247727 0.660423 0.609660 +v -0.194499 0.781569 0.726649 +v -0.347765 0.888103 0.829527 +v -0.635812 0.375548 1.203411 +v -0.923857 0.359426 1.147187 +v -1.077123 0.318605 1.004825 +v -1.023895 0.272184 0.842938 +v -0.789077 0.347327 0.737273 +v -0.482545 0.347327 0.737273 +v -0.247727 0.272184 0.842938 +v -0.194499 0.318605 1.004826 +v -0.347765 0.359426 1.147188 +v -0.635812 -0.271401 1.214703 +v -0.923857 -0.257251 1.157952 +v -1.077124 -0.221423 1.014252 +v -1.023895 -0.180680 0.850842 +v -0.789077 -0.246632 0.744184 +v -0.482545 -0.246632 0.744185 +v -0.554979 -0.251286 0.344212 +v -0.247728 -0.180680 0.850843 +v -0.194499 -0.221423 1.014252 +v -0.347765 -0.257251 1.157952 +v -0.635811 -0.837322 0.901009 +v -0.923857 -0.796692 0.858934 +v -1.077124 -0.693814 0.752401 +v -1.023895 -0.576825 0.631256 +v -0.789077 -0.500466 0.552184 +v -0.482545 -0.500466 0.552184 +v -0.247728 -0.576825 0.631256 +v -0.194499 -0.693814 0.752402 +v -0.347765 -0.796692 0.858934 +v -0.789077 -0.304465 0.313505 +v -0.789077 -0.311377 -0.280454 +v -0.554979 -0.311377 -0.280454 +v -0.789077 0.342672 0.337300 +v -0.789077 -0.251286 0.344211 +v -0.554979 0.342672 0.337300 +v -0.789077 -0.280670 -0.333633 +v -0.789077 0.313289 -0.340544 +v -0.554979 0.313289 -0.340544 +v -0.789077 0.366467 -0.309837 +v -0.789077 0.373379 0.284121 +v -0.554979 0.373379 0.284121 +v 0.005551 0.048232 0.047774 +v 0.005551 0.048232 -0.052226 +v 0.005551 -0.051769 -0.052226 +v -0.744449 0.048231 -0.052226 +v -0.744449 0.048231 0.047774 +v -0.744449 -0.051769 0.047774 +v 0.005551 -0.051769 0.047774 +v -0.744449 -0.051769 -0.052226 +vt 0.513624 0.783997 +vt 0.506188 0.712612 +vt 0.505969 0.783973 +vt 0.949158 0.484385 +vt 0.944659 0.410168 +vt 0.941584 0.484478 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.342603 0.674991 +vt 0.335156 0.743134 +vt 0.334704 0.595770 +vt 0.334948 0.675014 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.523482 0.675613 +vt 0.521494 0.627793 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.598820 0.371478 +vt 0.530171 0.331957 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.109074 0.639268 +vt 0.000848 0.531055 +vt 0.830015 0.623328 +vt 0.792389 0.714799 +vt 0.837273 0.712605 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.462495 0.306756 +vt 0.455687 0.331872 +vt 0.758447 0.693332 +vt 0.721737 0.772501 +vt 0.757332 0.757109 +vt 0.340460 0.815081 +vt 0.297072 0.826038 +vt 0.340316 0.862012 +vt 0.676280 0.688510 +vt 0.639684 0.692967 +vt 0.674834 0.772357 +vt 0.225458 0.066465 +vt 0.157773 0.024179 +vt 0.158175 0.049709 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.879661 0.713728 +vt 0.872743 0.628628 +vt 0.792493 0.808950 +vt 0.837383 0.811379 +vt 0.766009 0.719283 +vt 0.402470 0.272035 +vt 0.384108 0.290468 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.638639 0.825588 +vt 0.675115 0.819426 +vt 0.078288 0.046975 +vt 0.091518 0.068826 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.785756 0.886926 +vt 0.830315 0.893182 +vt 0.760201 0.870015 +vt 0.367839 0.211969 +vt 0.342811 0.218841 +vt 0.722613 0.861988 +vt 0.758639 0.881416 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.000874 0.094773 +vt 0.020847 0.106443 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.366797 0.631670 +vt 0.410612 0.724746 +vt 0.343300 0.641815 +vt 0.366513 0.724108 +vt 0.367882 0.142652 +vt 0.342862 0.136182 +vt 0.880326 0.806458 +vt 0.916070 0.738915 +vt 0.880176 0.757653 +vt 0.651005 0.881416 +vt 0.661972 0.937679 +vt 0.697339 0.884549 +vt 0.963197 0.803150 +vt 0.999158 0.806093 +vt 0.963001 0.738770 +vt 0.000842 0.186648 +vt 0.026573 0.185955 +vt 0.478430 0.642230 +vt 0.454713 0.724378 +vt 0.478182 0.723178 +vt 0.454997 0.631940 +vt 0.366238 0.813802 +vt 0.410323 0.818844 +vt 0.342811 0.801309 +vt 0.402587 0.082657 +vt 0.384247 0.064640 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.998802 0.690392 +vt 0.962852 0.690423 +vt 0.023635 0.266097 +vt 0.045687 0.252581 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.366045 0.876721 +vt 0.410121 0.884850 +vt 0.368574 0.047943 +vt 0.455878 0.023384 +vt 0.450371 0.000831 +vt 0.462656 0.048059 +vt 0.915776 0.643196 +vt 0.879766 0.623692 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.071984 0.342642 +vt 0.083117 0.323505 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.184003 0.645063 +vt 0.227051 0.730389 +vt 0.538560 0.023470 +vt 0.544788 0.000929 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.037804 0.750424 +vt 0.000842 0.766738 +vt 0.941584 0.331962 +vt 0.879881 0.422891 +vt 0.941398 0.422896 +vt 0.090587 0.832202 +vt 0.123318 0.828165 +vt 0.084243 0.749997 +vt 0.163350 0.343486 +vt 0.162852 0.317479 +vt 0.296292 0.658368 +vt 0.271432 0.731379 +vt 0.295662 0.734429 +vt 0.272151 0.644522 +vt 0.183284 0.731920 +vt 0.228056 0.828732 +vt 0.610139 0.064873 +vt 0.626527 0.048208 +vt 0.000978 0.697596 +vt 0.085329 0.702418 +vt 0.038890 0.702846 +vt 0.118564 0.696514 +vt 0.242837 0.320688 +vt 0.229508 0.298361 +vt 0.272390 0.825121 +vt 0.296500 0.816519 +vt 0.184242 0.825662 +vt 0.230552 0.907946 +vt 0.673686 0.130002 +vt 0.592019 0.082852 +vt 0.651436 0.136500 +vt 0.041316 0.659523 +vt 0.006100 0.640350 +vt 0.087755 0.659095 +vt 0.300278 0.261221 +vt 0.277678 0.248491 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.785112 0.254285 +vt 0.741202 0.192204 +vt 0.651385 0.219160 +vt 0.673628 0.224394 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.845561 0.100185 +vt 0.809649 0.113269 +vt 0.183284 0.908088 +vt 0.222683 0.963363 +vt 0.229724 0.907946 +vt 0.892764 0.189172 +vt 0.928690 0.180787 +vt 0.892491 0.100041 +vt 0.320282 0.181017 +vt 0.294454 0.181233 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.785595 0.096730 +vt 0.741495 0.096636 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.591902 0.272231 +vt 0.609999 0.290702 +vt 0.809448 0.047401 +vt 0.892357 0.056365 +vt 0.845426 0.056510 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.697396 0.096460 +vt 0.673931 0.096282 +vt 0.785876 0.005407 +vt 0.741789 0.000831 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.845312 0.019129 +vt 0.809306 0.001196 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.332779 0.615853 +vt 0.296963 0.616402 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.709710 0.331848 +vt 0.720616 0.271792 +vt 0.879860 0.985796 +vt 0.940684 0.894960 +vt 0.879766 0.894861 +vt 0.297236 0.615853 +vt 0.332803 0.526612 +vt 0.296963 0.526722 +vt 0.941258 0.444023 +vt 0.879881 0.443788 +vt 0.941321 0.534932 +vt 0.133383 0.904255 +vt 0.143492 0.960751 +vt 0.180286 0.904398 +vt 0.478430 0.884894 +vt 0.417169 0.975757 +vt 0.478402 0.975800 +vt 0.767744 0.331957 +vt 0.803584 0.331848 +vt 0.767547 0.267577 +vt 0.818505 0.984088 +vt 0.879766 0.893225 +vt 0.818532 0.893182 +vt 0.911101 0.280588 +vt 0.972132 0.189316 +vt 0.911038 0.189679 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.478457 0.710220 +vt 0.513843 0.712612 +vt 0.297106 0.908942 +vt 0.340350 0.872968 +vt 0.296963 0.862012 +vt 0.404092 0.884869 +vt 0.342811 0.975783 +vt 0.404028 0.975801 +vt 0.767547 0.331957 +vt 0.756641 0.271902 +vt 0.720616 0.331814 +vt 0.818894 0.331951 +vt 0.803584 0.316653 +vt 0.803585 0.331957 +vt 0.485203 0.925578 +vt 0.500243 0.925532 +vt 0.484851 0.810753 +vt 0.818889 0.301333 +vt 0.803584 0.316647 +vt 0.818888 0.316642 +vt 0.015117 0.947455 +vt 0.026433 0.832663 +vt 0.015470 0.832630 +vt 0.001191 0.833505 +vt 0.014769 0.946257 +vt 0.015117 0.832630 +vt 0.943226 0.115741 +vt 0.928690 0.000831 +vt 0.929041 0.115591 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.188269 0.343486 +vt 0.109050 0.343516 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn 1.000000 0.000000 0.000000 +vn -0.192500 -0.981200 0.017100 +vn -0.682300 -0.730900 0.012800 +vn -0.950400 0.310900 -0.005400 +vn -0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn 0.407500 0.913100 -0.010600 +vn 0.950400 0.310900 -0.005400 +vn 0.682300 -0.730900 0.012800 +vn 0.192500 -0.981200 0.017100 +vn -0.192500 -0.858300 -0.475700 +vn -0.682300 -0.639400 -0.354400 +vn -0.950400 0.272000 0.150800 +vn -0.252600 0.846200 0.469100 +vn -0.000000 0.797500 0.603300 +vn 0.421400 0.723300 0.547100 +vn 0.950400 0.272000 0.150800 +vn 0.682300 -0.639400 -0.354400 +vn 0.192500 -0.858300 -0.475700 +vn -0.192500 -0.505400 -0.841100 +vn -0.682300 -0.376500 -0.626600 +vn -0.950400 0.160200 0.266600 +vn -0.215700 0.502900 0.837000 +vn -0.000000 0.657000 0.753900 +vn 0.422700 0.595500 0.683200 +vn 0.950400 0.160200 0.266600 +vn 0.682300 -0.376500 -0.626600 +vn 0.192500 -0.505400 -0.841100 +vn -0.192500 -0.017100 -0.981200 +vn -0.682300 -0.012800 -0.730900 +vn -0.950400 0.005400 0.310900 +vn -0.417200 0.015900 0.908700 +vn -0.000000 -0.999900 0.011600 +vn 0.407500 0.010600 0.913100 +vn 0.950400 0.005400 0.310900 +vn 0.682300 -0.012800 -0.730900 +vn 0.192500 -0.017100 -0.981200 +vn -0.192500 0.475700 -0.858300 +vn -0.682300 0.354400 -0.639400 +vn -0.950400 -0.150800 0.272000 +vn -0.252600 -0.469100 0.846200 +vn -0.000000 -0.603300 0.797500 +vn 0.421400 -0.547100 0.723300 +vn 0.950400 -0.150800 0.272000 +vn 0.682300 0.354400 -0.639400 +vn 0.192500 0.475700 -0.858300 +vn -0.192500 0.841100 -0.505400 +vn -0.682300 0.626600 -0.376500 +vn -0.950400 -0.266600 0.160200 +vn -0.215700 -0.837000 0.502900 +vn -0.000000 -0.753900 0.657000 +vn 0.422700 -0.683200 0.595500 +vn 0.950400 -0.266600 0.160200 +vn 0.682300 0.626600 -0.376500 +vn 0.192500 0.841100 -0.505400 +vn -0.192500 0.981200 -0.017100 +vn -0.682300 0.730900 -0.012800 +vn -0.950400 -0.310900 0.005400 +vn -0.417200 -0.908700 0.015900 +vn 0.984000 -0.178200 0.002100 +vn 0.407500 -0.913100 0.010600 +vn 0.950400 -0.310900 0.005400 +vn 0.682300 0.730900 -0.012800 +vn 0.192500 0.981200 -0.017100 +vn -0.192500 0.858300 0.475700 +vn -0.682300 0.639400 0.354400 +vn -0.950400 -0.272000 -0.150800 +vn -0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn 0.421400 -0.723300 -0.547100 +vn 0.950400 -0.272000 -0.150800 +vn 0.682300 0.639400 0.354400 +vn 0.192500 0.858300 0.475700 +vn -0.192500 0.505400 0.841100 +vn -0.682300 0.376500 0.626600 +vn -0.950400 -0.160200 -0.266600 +vn -0.215700 -0.502900 -0.837000 +vn 0.000000 -0.657000 -0.753900 +vn 0.422700 -0.595500 -0.683200 +vn 0.950400 -0.160200 -0.266600 +vn 0.682300 0.376500 0.626600 +vn 0.192500 0.505400 0.841100 +vn -0.192500 0.017100 0.981200 +vn -0.682300 0.012800 0.730900 +vn -0.950400 -0.005400 -0.310900 +vn -0.417200 -0.015900 -0.908700 +vn 0.407500 -0.010600 -0.913100 +vn 0.950400 -0.005400 -0.310900 +vn 0.682300 0.012800 0.730900 +vn 0.192500 0.017100 0.981200 +vn -0.192500 -0.475700 0.858300 +vn -0.682300 -0.354400 0.639400 +vn -0.950400 0.150800 -0.272000 +vn -0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn 0.421400 0.547100 -0.723300 +vn 0.950400 0.150800 -0.272000 +vn 0.682300 -0.354400 0.639400 +vn 0.192500 -0.475700 0.858300 +vn -0.192500 -0.841100 0.505400 +vn -0.682300 -0.626600 0.376500 +vn -0.950400 0.266600 -0.160200 +vn -0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn 0.422700 0.683200 -0.595500 +vn 0.950400 0.266600 -0.160200 +vn 0.682300 -0.626600 0.376500 +vn 0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn 0.984000 0.178200 -0.002100 +vn 0.984000 -0.002100 -0.178200 +vn 0.984000 0.002100 0.178200 +vn 0.000000 -0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn -0.000000 1.000000 -0.000000 +vn -0.407500 0.913100 -0.010600 +vn 0.417200 0.908700 -0.015900 +vn -0.421400 0.723300 0.547100 +vn 0.252600 0.846200 0.469100 +vn -0.422700 0.595500 0.683200 +vn 0.215700 0.502900 0.837000 +vn -0.407500 0.010600 0.913100 +vn 0.417200 0.015900 0.908700 +vn -0.421400 -0.547100 0.723300 +vn 0.252600 -0.469100 0.846200 +vn -0.422700 -0.683200 0.595500 +vn 0.215700 -0.837000 0.502900 +vn -0.407500 -0.913100 0.010600 +vn 0.417200 -0.908700 0.015900 +vn -0.421400 -0.723300 -0.547100 +vn 0.252600 -0.846200 -0.469100 +vn -0.422700 -0.595500 -0.683200 +vn 0.215700 -0.502900 -0.837000 +vn -0.407500 -0.010600 -0.913100 +vn 0.417200 -0.015900 -0.908700 +vn -0.421400 0.547100 -0.723300 +vn 0.252600 0.469100 -0.846200 +vn -0.422700 0.683200 -0.595500 +vn 0.215700 0.837000 -0.502900 +usemtl None.010 +f 575/1211/415 577/1212/415 576/1213/415 +f 578/1214/416 579/1215/416 577/1216/416 +f 580/1217/417 581/1218/417 579/1215/417 +f 582/1219/418 583/1220/418 581/1221/418 +f 583/1220/419 585/1222/419 584/1223/419 +f 586/1224/420 587/1225/420 585/1222/420 +f 587/1226/421 589/1227/421 588/1228/421 +f 590/1229/422 591/1230/422 589/1227/422 +f 592/1231/423 593/1232/423 591/1230/423 +f 594/1233/424 595/1234/424 593/1232/424 +f 577/1235/425 596/1236/425 576/1237/425 +f 597/1238/426 575/1211/426 596/1239/426 +f 598/1240/427 596/1239/427 595/1241/427 +f 575/1242/428 597/1243/428 578/1244/428 +f 599/1245/429 601/1246/429 600/1247/429 +f 602/1248/430 603/1249/430 601/1246/430 +f 603/1250/431 605/1251/431 604/1252/431 +f 606/1253/432 607/1254/432 605/1255/432 +f 608/1256/433 610/1257/433 609/1258/433 +f 608/1259/434 612/1260/434 611/1261/434 +f 612/1262/435 614/1263/435 613/1264/435 +f 615/1265/436 616/1266/436 614/1263/436 +f 599/1245/437 617/1267/437 616/1268/437 +f 600/1247/438 619/1269/438 618/1270/438 +f 601/1246/439 604/1271/439 619/1269/439 +f 604/1252/440 621/1272/440 620/1273/440 +f 605/1255/441 607/1254/441 621/1274/441 +f 607/1254/442 611/1261/442 622/1275/442 +f 611/1261/443 624/1276/443 623/1277/443 +f 613/1264/444 625/1278/444 624/1279/444 +f 614/1263/445 626/1280/445 625/1278/445 +f 617/1267/446 600/1247/446 626/1281/446 +f 618/1270/447 628/1282/447 627/1283/447 +f 619/1269/448 629/1284/448 628/1282/448 +f 620/1273/449 630/1285/449 629/1286/449 +f 621/1274/450 631/1287/450 630/1288/450 +f 622/1275/451 623/1277/451 631/1287/451 +f 623/1277/452 624/1276/452 632/1289/452 +f 624/1279/453 625/1278/453 633/1290/453 +f 625/1278/454 635/1291/454 634/1292/454 +f 626/1281/455 627/1283/455 635/1293/455 +f 627/1294/456 628/1295/456 636/1296/456 +f 628/1295/457 629/1297/457 637/1298/457 +f 629/1286/458 639/1299/458 638/1300/458 +f 630/1301/459 640/1302/459 639/1303/459 +f 632/1304/460 641/1305/460 631/1306/460 +f 632/1307/461 633/1308/461 642/1309/461 +f 633/1290/462 644/1310/462 643/1311/462 +f 634/1312/463 645/1313/463 644/1314/463 +f 635/1315/464 636/1296/464 645/1313/464 +f 636/1296/465 647/1316/465 646/1317/465 +f 637/1298/466 648/1318/466 647/1316/466 +f 638/1300/467 649/1319/467 648/1320/467 +f 639/1303/468 640/1302/468 649/1321/468 +f 640/1302/469 642/1309/469 650/1322/469 +f 642/1309/470 652/1323/470 651/1324/470 +f 643/1311/471 653/1325/471 652/1326/471 +f 644/1314/472 645/1313/472 653/1327/472 +f 645/1313/473 646/1317/473 654/1328/473 +f 646/1317/474 656/1329/474 655/1330/474 +f 647/1331/475 657/1332/475 656/1333/475 +f 648/1320/476 658/1334/476 657/1332/476 +f 649/1321/477 659/1335/477 658/1336/477 +f 650/1322/478 651/1324/478 659/1335/478 +f 651/1324/479 652/1323/479 660/1337/479 +f 652/1326/480 653/1325/480 661/1338/480 +f 653/1325/481 663/1339/481 662/1340/481 +f 654/1328/482 646/1317/482 663/1341/482 +f 655/1342/483 656/1343/483 664/1344/483 +f 656/1333/484 666/1345/484 665/1346/484 +f 657/1332/485 667/1347/485 666/1345/485 +f 658/1348/486 668/1349/486 667/1350/486 +f 669/1351/487 670/1352/487 660/1353/487 +f 660/1354/488 661/1355/488 669/1356/488 +f 661/1338/489 672/1357/489 671/1358/489 +f 662/1359/490 673/1360/490 672/1361/490 +f 663/1362/491 664/1344/491 673/1360/491 +f 664/1344/492 665/1363/492 674/1364/492 +f 665/1346/493 676/1365/493 675/1366/493 +f 666/1345/494 667/1347/494 676/1365/494 +f 667/1350/495 668/1349/495 677/1367/495 +f 668/1349/496 679/1368/496 678/1369/496 +f 669/1356/497 680/1370/497 679/1368/497 +f 671/1358/498 681/1371/498 680/1372/498 +f 672/1361/499 682/1373/499 681/1374/499 +f 673/1360/500 674/1364/500 682/1373/500 +f 674/1364/501 675/1375/501 683/1376/501 +f 675/1366/502 676/1365/502 684/1377/502 +f 676/1365/503 677/1378/503 685/1379/503 +f 677/1367/504 687/1380/504 686/1381/504 +f 678/1369/505 688/1382/505 687/1380/505 +f 679/1368/506 680/1370/506 688/1382/506 +f 680/1372/507 690/1383/507 689/1384/507 +f 681/1371/508 691/1385/508 690/1383/508 +f 682/1373/509 674/1364/509 691/1386/509 +f 683/1387/510 684/1388/510 692/1389/510 +f 684/1377/511 694/1390/511 693/1391/511 +f 685/1379/512 695/1392/512 694/1390/512 +f 686/1393/513 696/1394/513 695/1395/513 +f 696/1396/460 698/1397/460 697/1398/460 +f 688/1399/514 689/1400/514 697/1401/514 +f 689/1384/515 700/1402/515 699/1403/515 +f 690/1383/516 691/1385/516 700/1402/516 +f 691/1404/517 692/1389/517 701/1405/517 +f 692/1389/518 703/1406/518 702/1407/518 +f 693/1408/519 704/1409/519 703/1406/519 +f 694/1390/520 705/1410/520 704/1411/520 +f 695/1395/521 696/1394/521 705/1412/521 +f 696/1394/522 707/1413/522 706/1414/522 +f 697/1401/523 708/1415/523 707/1413/523 +f 699/1403/524 700/1402/524 708/1416/524 +f 700/1417/525 710/1418/525 709/1419/525 +f 701/1405/526 702/1407/526 710/1418/526 +f 702/1407/527 602/1420/527 599/1421/527 +f 703/1406/528 603/1422/528 602/1420/528 +f 704/1411/529 606/1423/529 603/1250/529 +f 705/1412/530 609/1424/530 606/1425/530 +f 706/1414/531 608/1426/531 609/1424/531 +f 707/1413/532 708/1415/532 608/1426/532 +f 708/1416/533 615/1265/533 612/1262/533 +f 709/1419/534 710/1418/534 615/1427/534 +f 710/1418/535 599/1421/535 616/1428/535 +f 711/1429/536 713/1430/536 712/1431/536 +f 609/1432/425 712/1288/425 607/1433/425 +f 607/1434/537 713/1435/537 611/1436/537 +f 611/1437/538 610/1438/538 608/1439/538 +f 714/1440/537 698/1441/537 715/1442/537 +f 697/1443/539 698/1444/539 688/1445/539 +f 688/1446/536 716/1447/536 687/1448/536 +f 687/1449/425 715/1450/425 696/1451/425 +f 717/1452/433 641/1453/433 718/1454/433 +f 631/1455/425 718/1456/425 640/1457/425 +f 642/1458/540 641/1459/540 632/1460/540 +f 640/1461/536 719/1462/536 642/1457/536 +f 720/1463/460 722/1464/460 721/1465/460 +f 668/1466/433 722/1467/433 669/1468/433 +f 659/1469/425 721/1470/425 668/1471/425 +f 660/1472/537 670/1473/537 659/1474/537 +f 723/1475/428 725/1476/428 724/1477/428 +f 724/1478/541 725/1479/541 726/1480/541 +f 726/1481/425 728/1482/425 727/1483/425 +f 727/1484/542 729/1485/542 723/1486/542 +f 729/1487/543 730/1488/543 725/1489/543 +f 727/1490/544 724/1491/544 726/1492/544 +f 674/1364/492 665/1363/492 675/1375/492 +f 578/1465/415 577/1212/415 575/1211/415 +f 580/1217/416 579/1215/416 578/1214/416 +f 582/1493/417 581/1218/417 580/1217/417 +f 596/1239/426 575/1211/426 576/1213/426 +f 586/1224/419 585/1222/419 583/1220/419 +f 726/1480/541 725/1479/541 730/1494/541 +f 590/1229/421 589/1227/421 587/1226/421 +f 592/1231/422 591/1230/422 590/1229/422 +f 594/1233/423 593/1232/423 592/1231/423 +f 598/1495/424 595/1234/424 594/1233/424 +f 577/1235/425 595/1496/425 596/1236/425 +f 577/1235/425 593/1497/425 595/1496/425 +f 579/1498/425 593/1497/425 577/1235/425 +f 579/1498/425 591/1499/425 593/1497/425 +f 581/1500/425 584/1501/425 579/1498/425 +f 579/1498/425 584/1501/425 591/1499/425 +f 584/1501/425 585/1502/425 591/1499/425 +f 591/1499/425 585/1502/425 589/1503/425 +f 622/1275/442 611/1261/442 623/1277/442 +f 597/1238/427 596/1239/427 598/1240/427 +f 598/1504/428 594/1505/428 597/1243/428 +f 708/1416/524 700/1402/524 709/1506/524 +f 578/1244/428 594/1505/428 580/1507/428 +f 594/1505/428 592/1508/428 580/1507/428 +f 580/1507/428 592/1508/428 582/1509/428 +f 582/1509/428 586/1510/428 583/1511/428 +f 592/1508/428 586/1510/428 582/1509/428 +f 590/1512/428 586/1510/428 592/1508/428 +f 587/1513/428 586/1510/428 590/1512/428 +f 602/1248/429 601/1246/429 599/1245/429 +f 636/1296/456 628/1295/456 637/1298/456 +f 606/1423/431 605/1251/431 603/1250/431 +f 609/1514/545 607/1254/545 606/1253/545 +f 609/1258/433 610/1257/433 711/1515/433 +f 611/1261/546 612/1260/546 613/1516/546 +f 615/1265/435 614/1263/435 612/1262/435 +f 633/1290/453 625/1278/453 634/1292/453 +f 600/1247/437 617/1267/437 599/1245/437 +f 601/1246/438 619/1269/438 600/1247/438 +f 661/1338/480 653/1325/480 662/1340/480 +f 605/1251/440 621/1272/440 604/1252/440 +f 621/1274/547 607/1254/547 622/1275/547 +f 664/1344/483 656/1343/483 665/1363/483 +f 613/1516/548 624/1276/548 611/1261/548 +f 614/1263/444 625/1278/444 613/1264/444 +f 617/1517/445 626/1280/445 614/1263/445 +f 683/1376/501 675/1375/501 684/1518/501 +f 619/1269/447 628/1282/447 618/1270/447 +f 620/1519/448 629/1284/448 619/1269/448 +f 621/1272/449 630/1285/449 620/1273/449 +f 622/1275/549 631/1287/549 621/1274/549 +f 585/1222/420 587/1225/420 588/1520/420 +f 632/1289/550 624/1276/550 633/1521/550 +f 692/1389/510 684/1388/510 693/1408/510 +f 626/1280/454 635/1291/454 625/1278/454 +f 618/1270/455 627/1283/455 626/1281/455 +f 626/1281/446 600/1247/446 618/1270/446 +f 601/1246/430 603/1249/430 604/1271/430 +f 630/1285/458 639/1299/458 629/1286/458 +f 631/1522/551 640/1302/551 630/1301/551 +f 631/1306/460 641/1305/460 717/1523/460 +f 642/1309/552 633/1308/552 643/1524/552 +f 634/1292/462 644/1310/462 633/1290/462 +f 635/1315/463 645/1313/463 634/1312/463 +f 627/1294/464 636/1296/464 635/1315/464 +f 637/1298/465 647/1316/465 636/1296/465 +f 638/1525/466 648/1318/466 637/1298/466 +f 639/1299/467 649/1319/467 638/1300/467 +f 649/1321/553 640/1302/553 650/1322/553 +f 614/1263/436 616/1266/436 617/1517/436 +f 643/1524/554 652/1323/554 642/1309/554 +f 644/1310/471 653/1325/471 643/1311/471 +f 589/1503/425 585/1502/425 588/1526/425 +f 636/1296/473 646/1317/473 645/1313/473 +f 647/1316/474 656/1329/474 646/1317/474 +f 648/1320/475 657/1332/475 647/1331/475 +f 649/1319/476 658/1334/476 648/1320/476 +f 650/1322/555 659/1335/555 649/1321/555 +f 615/1427/534 710/1418/534 616/1428/534 +f 660/1337/556 652/1323/556 661/1527/556 +f 688/1445/539 698/1444/539 716/1528/539 +f 654/1529/481 663/1339/481 653/1325/481 +f 691/1386/509 674/1364/509 683/1376/509 +f 619/1269/439 604/1271/439 620/1519/439 +f 657/1332/484 666/1345/484 656/1333/484 +f 658/1334/485 667/1347/485 657/1332/485 +f 659/1530/557 668/1349/557 658/1348/557 +f 722/1531/487 670/1352/487 669/1351/487 +f 669/1356/558 661/1355/558 671/1532/558 +f 662/1340/489 672/1357/489 661/1338/489 +f 663/1362/490 673/1360/490 662/1359/490 +f 655/1342/491 664/1344/491 663/1362/491 +f 653/1327/472 645/1313/472 654/1328/472 +f 666/1345/493 676/1365/493 665/1346/493 +f 676/1365/494 667/1347/494 677/1378/494 +f 677/1367/559 668/1349/559 678/1369/559 +f 669/1356/496 679/1368/496 668/1349/496 +f 671/1532/560 680/1370/560 669/1356/560 +f 672/1357/498 681/1371/498 671/1358/498 +f 673/1360/499 682/1373/499 672/1361/499 +f 664/1344/500 674/1364/500 673/1360/500 +f 631/1287/451 623/1277/451 632/1289/451 +f 637/1298/457 629/1297/457 638/1525/457 +f 700/1402/516 691/1385/516 701/1533/516 +f 678/1369/561 687/1380/561 677/1367/561 +f 679/1368/505 688/1382/505 678/1369/505 +f 688/1382/562 680/1370/562 689/1534/562 +f 681/1371/507 690/1383/507 680/1372/507 +f 682/1535/508 691/1385/508 681/1371/508 +f 659/1335/478 651/1324/478 660/1337/478 +f 684/1377/502 676/1365/502 685/1379/502 +f 685/1379/511 694/1390/511 684/1377/511 +f 686/1536/512 695/1392/512 685/1379/512 +f 687/1537/563 696/1394/563 686/1393/563 +f 715/1538/460 698/1397/460 696/1396/460 +f 697/1401/564 689/1400/564 699/1539/564 +f 690/1383/515 700/1402/515 689/1384/515 +f 663/1341/482 646/1317/482 655/1330/482 +f 683/1387/517 692/1389/517 691/1404/517 +f 693/1408/518 703/1406/518 692/1389/518 +f 694/1540/519 704/1409/519 693/1408/519 +f 695/1392/520 705/1410/520 694/1390/520 +f 705/1412/565 696/1394/565 706/1414/565 +f 697/1401/522 707/1413/522 696/1394/522 +f 699/1539/566 708/1415/566 697/1401/566 +f 685/1379/503 677/1378/503 686/1536/503 +f 701/1405/525 710/1418/525 700/1417/525 +f 692/1389/526 702/1407/526 701/1405/526 +f 703/1406/527 602/1420/527 702/1407/527 +f 704/1409/528 603/1422/528 703/1406/528 +f 705/1410/529 606/1423/529 704/1411/529 +f 706/1414/567 609/1424/567 705/1412/567 +f 707/1413/531 608/1426/531 706/1414/531 +f 608/1426/568 708/1415/568 612/1541/568 +f 709/1506/533 615/1265/533 708/1416/533 +f 718/1454/433 641/1453/433 719/1542/433 +f 702/1407/535 599/1421/535 710/1418/535 +f 610/1543/536 713/1430/536 711/1429/536 +f 711/1544/425 712/1288/425 609/1432/425 +f 712/1545/537 713/1435/537 607/1434/537 +f 713/1546/538 610/1438/538 611/1437/538 +f 716/1547/537 698/1441/537 714/1440/537 +f 597/1243/428 594/1505/428 578/1244/428 +f 687/1448/536 716/1447/536 714/1548/536 +f 714/1549/425 715/1450/425 687/1449/425 +f 650/1322/469 642/1309/469 651/1324/469 +f 717/1550/425 718/1456/425 631/1455/425 +f 719/1551/540 641/1459/540 642/1458/540 +f 718/1552/536 719/1462/536 640/1461/536 +f 670/1553/460 722/1464/460 720/1463/460 +f 721/1554/433 722/1467/433 668/1466/433 +f 720/1555/425 721/1470/425 659/1469/425 +f 659/1474/537 670/1473/537 720/1556/537 +f 729/1483/428 725/1476/428 723/1475/428 +f 581/1221/418 583/1220/418 584/1223/418 +f 730/1557/425 728/1482/425 726/1481/425 +f 728/1558/542 729/1485/542 727/1484/542 +f 728/1559/543 730/1488/543 729/1487/543 +f 723/1560/544 724/1491/544 727/1490/544 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.mtl new file mode 100644 index 00000000..58127681 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.mtl @@ -0,0 +1,35 @@ +newmtl None +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_main + +newmtl None.001 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.010 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.014 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None.022 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_wheels + +newmtl None_storage.png +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/buggy_storage diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.obj new file mode 100644 index 00000000..c1ffc687 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_inv.obj @@ -0,0 +1,6826 @@ +# Blender v2.76 (sub 0) OBJ File: 'buggyWhole.blend' +# www.blender.org +mtllib buggy_inv.mtl +o Wheel_Front_Right +v 2.158458 2.342700 -2.371578 +v 2.158458 2.331936 -3.049923 +v 2.164516 2.305865 -3.022342 +v 1.870412 2.054904 -3.677748 +v 2.158458 2.014275 -3.631467 +v 1.870412 2.388159 -3.067657 +v 1.429099 1.911396 -3.514280 +v 1.582366 2.014275 -3.631467 +v 1.582366 2.331936 -3.049923 +v 2.158458 2.331936 -3.049923 +v 1.870412 2.399451 -2.356013 +v 1.429099 2.189574 -3.005019 +v 1.582366 2.342700 -2.371579 +v 2.158458 2.342700 -2.371578 +v 2.158458 2.043683 -1.778193 +v 1.429099 2.199000 -2.410989 +v 1.429099 1.937149 -1.891359 +v 1.582366 2.043683 -1.778193 +v 1.870412 2.085756 -1.733500 +v 2.158458 1.515007 -1.428766 +v 1.429099 1.474185 -1.585365 +v 1.582366 1.515006 -1.428766 +v 1.870412 1.531128 -1.366922 +v 2.158458 0.898329 -1.416926 +v 1.429100 0.934157 -1.574996 +v 1.582366 0.898329 -1.416927 +v 1.876469 2.028834 -3.623286 +v 1.876469 2.362088 -3.039316 +v 2.164515 1.988204 -3.578986 +v 1.435157 1.885326 -3.466817 +v 1.435157 2.163503 -2.979362 +v 1.588423 2.305865 -3.022342 +v 1.588423 1.988204 -3.578987 +v 1.876469 2.373381 -2.358142 +v 2.164515 2.305865 -3.022342 +v 1.435157 2.172929 -2.410764 +v 1.588423 2.316629 -2.373041 +v 1.876469 2.059686 -1.762283 +v 2.164515 2.017613 -1.805062 +v 1.435157 1.911079 -1.913383 +v 1.588423 2.017612 -1.805063 +v 1.876469 1.505058 -1.411399 +v 2.164516 1.488936 -1.470596 +v 1.435157 1.448114 -1.620489 +v 1.588423 1.488936 -1.470597 +v 1.876469 0.858109 -1.399510 +v 2.164516 0.872258 -1.459263 +v 1.435157 0.908087 -1.610565 +v 1.588423 0.872258 -1.459262 +v 1.870412 0.884179 -1.354500 +v 2.164515 2.316629 -2.373040 +v 2.164516 2.316629 -2.373040 +v 1.850085 0.951980 -3.725185 +v 1.900085 0.951980 -3.725185 +v 1.900085 0.451980 -3.591210 +v 1.850085 0.451980 -3.591210 +v 1.900085 0.085955 -3.225186 +v 1.850085 0.085955 -3.225186 +v 1.900085 -0.048020 -2.725186 +v 1.850085 -0.048020 -2.725186 +v 1.850085 0.085955 -2.225186 +v 1.900085 0.085955 -2.225186 +v 1.900085 0.451980 -1.859160 +v 1.850085 0.451980 -1.859160 +v 1.850085 0.951980 -1.725186 +v 1.900085 0.951980 -1.725186 +v 1.900085 1.451980 -1.859161 +v 1.850085 1.451980 -1.859161 +v 1.900085 1.818006 -2.225186 +v 1.850085 1.818006 -2.225186 +v 1.900085 1.951980 -2.725185 +v 1.850085 1.951980 -2.725185 +v 1.900085 1.818006 -3.225185 +v 1.900085 1.451981 -3.591211 +v 1.850085 1.451981 -3.591211 +v 1.850085 1.818006 -3.225185 +v 1.870412 -0.188146 -2.380639 +v 1.870412 -0.199439 -3.027588 +v 2.158458 -0.142687 -3.013439 +v 2.158459 -0.131923 -2.396761 +v 2.311725 0.010439 -2.437583 +v 2.311725 0.001013 -2.977610 +v 2.258496 0.164422 -2.936868 +v 2.258496 0.172327 -2.484003 +v 2.023678 0.271080 -3.002819 +v 1.717146 0.277992 -2.408860 +v 2.023678 0.277992 -2.408860 +v 1.789580 0.677965 -2.413515 +v 1.717146 0.271080 -3.002819 +v 1.482329 0.172327 -2.484003 +v 1.482329 0.164422 -2.936868 +v 1.429100 0.001013 -2.977610 +v 1.429100 0.010439 -2.437582 +v 1.582366 -0.131923 -2.396761 +v 1.582366 -0.142687 -3.013439 +v 1.870412 0.114256 -3.593509 +v 2.158458 0.156330 -3.552879 +v 2.311724 0.262863 -3.450001 +v 2.258496 0.384009 -3.333012 +v 2.023678 0.463081 -3.256653 +v 1.717146 0.463081 -3.256652 +v 1.482329 0.384009 -3.333012 +v 1.429100 0.262863 -3.450001 +v 1.582366 0.156330 -3.552878 +v 1.870412 0.668884 -3.926763 +v 2.158458 0.685006 -3.870540 +v 2.311724 0.725828 -3.728178 +v 2.258496 0.772248 -3.566289 +v 2.023678 0.697105 -3.460625 +v 1.717146 0.697105 -3.460624 +v 1.482328 0.772248 -3.566290 +v 1.429100 0.725828 -3.728178 +v 1.582366 0.685006 -3.870539 +v 1.870412 1.315833 -3.938055 +v 2.158458 1.301684 -3.881304 +v 2.311723 1.265855 -3.737603 +v 2.258496 1.225113 -3.574194 +v 2.023678 1.291064 -3.467537 +v 1.789580 0.701760 -3.060651 +v 1.717146 1.291064 -3.467536 +v 1.482328 1.225113 -3.574195 +v 1.429100 1.265855 -3.737603 +v 1.582366 1.301684 -3.881304 +v 1.870412 1.881754 -3.624360 +v 2.158458 1.841124 -3.582288 +v 2.311724 1.738246 -3.475754 +v 2.258496 1.621257 -3.354608 +v 2.023678 1.544898 -3.275535 +v 1.717146 1.544898 -3.275535 +v 1.482328 1.621257 -3.354608 +v 1.429100 1.738246 -3.475753 +v 1.582366 1.841124 -3.582287 +v 1.870412 2.215008 -3.069732 +v 2.158458 2.158785 -3.053610 +v 2.311724 2.016423 -3.012789 +v 2.258495 1.854535 -2.966368 +v 2.023678 1.748870 -3.041511 +v 1.717146 1.748870 -3.041511 +v 1.482328 1.854535 -2.966368 +v 1.429100 2.016423 -3.012788 +v 1.582366 2.158785 -3.053610 +v 1.870412 2.226301 -2.422783 +v 2.158458 2.169550 -2.436933 +v 2.311724 2.025850 -2.472761 +v 2.258495 1.862440 -2.513504 +v 2.023678 1.755782 -2.447552 +v 1.717146 1.755782 -2.447552 +v 1.789580 1.348897 -3.036856 +v 1.482328 1.862440 -2.513504 +v 1.429100 2.025850 -2.472761 +v 1.582366 2.169550 -2.436933 +v 1.870412 1.912606 -1.856862 +v 2.158458 1.870533 -1.897493 +v 2.311724 1.763999 -2.000371 +v 2.258496 1.642853 -2.117359 +v 2.023678 1.563781 -2.193719 +v 1.717146 1.563781 -2.193719 +v 1.482328 1.642853 -2.117359 +v 1.429100 1.763999 -2.000370 +v 1.582366 1.870533 -1.897492 +v 1.870412 1.357978 -1.523608 +v 2.158458 1.341856 -1.579832 +v 2.311724 1.301035 -1.722194 +v 2.258496 1.254614 -1.884081 +v 2.023678 1.329757 -1.989747 +v 1.717146 1.329757 -1.989746 +v 1.482328 1.254614 -1.884082 +v 1.429100 1.301035 -1.722193 +v 1.582366 1.341856 -1.579831 +v 1.870412 0.711029 -1.512317 +v 2.158458 0.725179 -1.569067 +v 2.311725 0.761007 -1.712768 +v 2.258496 0.801750 -1.876177 +v 2.023678 0.735798 -1.982835 +v 1.717146 0.735798 -1.982834 +v 1.789580 0.731144 -2.382808 +v 1.482329 0.801750 -1.876176 +v 1.429100 0.761007 -1.712768 +v 1.582366 0.725179 -1.569068 +v 1.870412 0.145108 -1.826011 +v 2.158458 0.185738 -1.868085 +v 2.311725 0.288616 -1.974618 +v 2.258496 0.405605 -2.095764 +v 2.023678 0.481964 -2.174836 +v 1.717146 0.481964 -2.174836 +v 1.482329 0.405605 -2.095764 +v 1.429100 0.288616 -1.974618 +v 1.582366 0.185738 -1.868085 +v 2.023678 0.677965 -2.413515 +v 2.023678 0.671053 -3.007473 +v 1.789580 0.671053 -3.007473 +v 2.023678 1.325102 -2.389720 +v 2.023678 0.731144 -2.382808 +v 1.789580 1.325102 -2.389720 +v 2.023678 0.701760 -3.060652 +v 2.023678 1.295719 -3.067564 +v 1.789580 1.295719 -3.067563 +v 2.023678 1.348897 -3.036856 +v 2.023678 1.355809 -2.442899 +v 1.789580 1.355809 -2.442899 +v 1.229050 1.030662 -2.679246 +v 1.229050 1.030662 -2.779246 +v 1.229050 0.930661 -2.779246 +v 1.979050 1.030661 -2.779245 +v 1.979050 1.030661 -2.679245 +v 1.979050 0.930661 -2.679245 +v 1.229050 0.930661 -2.679246 +v 1.979050 0.930661 -2.779245 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.809306 0.257189 +vt 0.910683 0.300978 +vt 0.909096 0.189316 +vt 0.813439 0.213075 +vt 0.910412 0.212777 +vt 0.809743 0.623328 +vt 0.802385 0.525003 +vt 0.767033 0.617540 +vt 0.879881 0.601532 +vt 0.847297 0.523282 +vt 0.854311 0.617005 +vt 0.759950 0.422158 +vt 0.760018 0.523817 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.035491 0.837783 +vt 0.034640 0.930186 +vt 0.717705 0.625829 +vt 0.644609 0.664429 +vt 0.733319 0.644430 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.879881 0.623132 +vt 0.951706 0.579252 +vt 0.478460 0.803029 +vt 0.500209 0.712612 +vt 0.478430 0.717127 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.526132 0.633686 +vt 0.569142 0.723746 +vt 0.638417 0.647297 +vt 0.613524 0.724631 +vt 0.637757 0.727411 +vt 0.614279 0.633145 +vt 0.526305 0.822962 +vt 0.570116 0.826337 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.528666 0.900853 +vt 0.572592 0.908051 +vt 0.297174 0.516355 +vt 0.317310 0.526612 +vt 0.319506 0.435521 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.954393 0.894658 +vt 0.949424 0.850572 +vt 0.342811 0.434304 +vt 0.296963 0.355991 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.715956 0.387746 +vt 0.759950 0.463023 +vt 0.180286 0.719972 +vt 0.172762 0.815779 +vt 0.178395 0.816963 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.078713 0.832630 +vt 0.079592 0.837849 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.323102 0.798341 +vt 0.330475 0.803455 +vt 0.643343 0.684515 +vt 0.649849 0.688510 +vt 0.314149 0.815081 +vt 0.306193 0.772760 +vt 0.296963 0.773641 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.306170 0.727741 +vt 0.314792 0.700967 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vt 0.513624 0.783997 +vt 0.505969 0.783973 +vt 0.506188 0.712612 +vt 0.949158 0.484385 +vt 0.941584 0.484478 +vt 0.944659 0.410168 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.335156 0.743134 +vt 0.342603 0.674991 +vt 0.334948 0.675014 +vt 0.334704 0.595770 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.521494 0.627793 +vt 0.523482 0.675613 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.530171 0.331957 +vt 0.598820 0.371478 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.000848 0.531055 +vt 0.109074 0.639268 +vt 0.830015 0.623328 +vt 0.837273 0.712605 +vt 0.792389 0.714799 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.455687 0.331872 +vt 0.462495 0.306756 +vt 0.758447 0.693332 +vt 0.757332 0.757109 +vt 0.721737 0.772501 +vt 0.340460 0.815081 +vt 0.340316 0.862012 +vt 0.297072 0.826038 +vt 0.676280 0.688510 +vt 0.674834 0.772357 +vt 0.639684 0.692967 +vt 0.225458 0.066465 +vt 0.158175 0.049709 +vt 0.157773 0.024179 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.872743 0.628628 +vt 0.879661 0.713728 +vt 0.837383 0.811379 +vt 0.792493 0.808950 +vt 0.766009 0.719283 +vt 0.384108 0.290468 +vt 0.402470 0.272035 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.675115 0.819426 +vt 0.638639 0.825588 +vt 0.091518 0.068826 +vt 0.078288 0.046975 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.830315 0.893182 +vt 0.785756 0.886926 +vt 0.760201 0.870015 +vt 0.342811 0.218841 +vt 0.367839 0.211969 +vt 0.758639 0.881416 +vt 0.722613 0.861988 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.020847 0.106443 +vt 0.000874 0.094773 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.410612 0.724746 +vt 0.366797 0.631670 +vt 0.366513 0.724108 +vt 0.343300 0.641815 +vt 0.342862 0.136182 +vt 0.367882 0.142652 +vt 0.880326 0.806458 +vt 0.880176 0.757653 +vt 0.916070 0.738915 +vt 0.651005 0.881416 +vt 0.697339 0.884549 +vt 0.661972 0.937679 +vt 0.963197 0.803150 +vt 0.963001 0.738770 +vt 0.999158 0.806093 +vt 0.026573 0.185955 +vt 0.000842 0.186648 +vt 0.478430 0.642230 +vt 0.478182 0.723178 +vt 0.454713 0.724378 +vt 0.454997 0.631940 +vt 0.410323 0.818844 +vt 0.366238 0.813802 +vt 0.342811 0.801309 +vt 0.384247 0.064640 +vt 0.402587 0.082657 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.962852 0.690423 +vt 0.998802 0.690392 +vt 0.045687 0.252581 +vt 0.023635 0.266097 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.410121 0.884850 +vt 0.366045 0.876721 +vt 0.368574 0.047943 +vt 0.450371 0.000831 +vt 0.455878 0.023384 +vt 0.462656 0.048059 +vt 0.879766 0.623692 +vt 0.915776 0.643196 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.083117 0.323505 +vt 0.071984 0.342642 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.227051 0.730389 +vt 0.184003 0.645063 +vt 0.544788 0.000929 +vt 0.538560 0.023470 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.000842 0.766738 +vt 0.037804 0.750424 +vt 0.941584 0.331962 +vt 0.941398 0.422896 +vt 0.879881 0.422891 +vt 0.090587 0.832202 +vt 0.084243 0.749997 +vt 0.123318 0.828165 +vt 0.162852 0.317479 +vt 0.163350 0.343486 +vt 0.296292 0.658368 +vt 0.295662 0.734429 +vt 0.271432 0.731379 +vt 0.272151 0.644522 +vt 0.228056 0.828732 +vt 0.183284 0.731920 +vt 0.626527 0.048208 +vt 0.610139 0.064873 +vt 0.000978 0.697596 +vt 0.038890 0.702846 +vt 0.085329 0.702418 +vt 0.118564 0.696514 +vt 0.229508 0.298361 +vt 0.242837 0.320688 +vt 0.296500 0.816519 +vt 0.272390 0.825121 +vt 0.230552 0.907946 +vt 0.184242 0.825662 +vt 0.673686 0.130002 +vt 0.651436 0.136500 +vt 0.592019 0.082852 +vt 0.006100 0.640350 +vt 0.041316 0.659523 +vt 0.087755 0.659095 +vt 0.277678 0.248491 +vt 0.300278 0.261221 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.741202 0.192204 +vt 0.785112 0.254285 +vt 0.673628 0.224394 +vt 0.651385 0.219160 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.809649 0.113269 +vt 0.845561 0.100185 +vt 0.183284 0.908088 +vt 0.229724 0.907946 +vt 0.222683 0.963363 +vt 0.892764 0.189172 +vt 0.892491 0.100041 +vt 0.928690 0.180787 +vt 0.294454 0.181233 +vt 0.320282 0.181017 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.741495 0.096636 +vt 0.785595 0.096730 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.609999 0.290702 +vt 0.591902 0.272231 +vt 0.809448 0.047401 +vt 0.845426 0.056510 +vt 0.892357 0.056365 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.673931 0.096282 +vt 0.697396 0.096460 +vt 0.741789 0.000831 +vt 0.785876 0.005407 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.809306 0.001196 +vt 0.845312 0.019129 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.296963 0.616402 +vt 0.332779 0.615853 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.720616 0.271792 +vt 0.709710 0.331848 +vt 0.879860 0.985796 +vt 0.879766 0.894861 +vt 0.940684 0.894960 +vt 0.297236 0.615853 +vt 0.296963 0.526722 +vt 0.332803 0.526612 +vt 0.941258 0.444023 +vt 0.941321 0.534932 +vt 0.879881 0.443788 +vt 0.133383 0.904255 +vt 0.180286 0.904398 +vt 0.143492 0.960751 +vt 0.478430 0.884894 +vt 0.478402 0.975800 +vt 0.417169 0.975757 +vt 0.767744 0.331957 +vt 0.767547 0.267577 +vt 0.803584 0.331848 +vt 0.818505 0.984088 +vt 0.818532 0.893182 +vt 0.879766 0.893225 +vt 0.911101 0.280588 +vt 0.911038 0.189679 +vt 0.972132 0.189316 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.513843 0.712612 +vt 0.478457 0.710220 +vt 0.297106 0.908942 +vt 0.296963 0.862012 +vt 0.340350 0.872968 +vt 0.404092 0.884869 +vt 0.404028 0.975801 +vt 0.342811 0.975783 +vt 0.767547 0.331957 +vt 0.720616 0.331814 +vt 0.756641 0.271902 +vt 0.818894 0.331951 +vt 0.803585 0.331957 +vt 0.803584 0.316653 +vt 0.485203 0.925578 +vt 0.484851 0.810753 +vt 0.500243 0.925532 +vt 0.818889 0.301333 +vt 0.818888 0.316642 +vt 0.803584 0.316647 +vt 0.015117 0.947455 +vt 0.015470 0.832630 +vt 0.026433 0.832663 +vt 0.001191 0.833505 +vt 0.015117 0.832630 +vt 0.014769 0.946257 +vt 0.943226 0.115741 +vt 0.929041 0.115591 +vt 0.928690 0.000831 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.109050 0.343516 +vt 0.188269 0.343486 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.974900 0.222800 -0.003500 +vn 0.196900 0.860400 -0.470000 +vn -0.690900 0.634500 -0.346600 +vn -0.196900 0.860400 -0.470000 +vn 0.192500 0.981200 -0.015600 +vn -0.682300 0.730900 -0.011600 +vn -0.192500 0.981200 -0.015600 +vn 0.196400 0.875600 0.441200 +vn -0.689900 0.646500 0.325800 +vn -0.196400 0.875600 0.441200 +vn 0.205500 0.539600 0.816400 +vn -0.706800 0.390000 0.590100 +vn -0.205500 0.539600 0.816400 +vn 0.210900 0.018800 0.977300 +vn -0.716300 0.013400 0.697600 +vn -0.210900 0.018800 0.977300 +vn -0.194900 -0.851900 0.486100 +vn 0.687100 -0.631000 0.360100 +vn 0.194900 -0.851900 0.486100 +vn -0.192500 -0.981200 0.016300 +vn 0.682300 -0.730900 0.012100 +vn 0.192500 -0.981200 0.016300 +vn -0.194600 -0.867900 -0.456900 +vn 0.686600 -0.643400 -0.338700 +vn 0.194600 -0.867900 -0.456900 +vn -0.199500 -0.523900 -0.828100 +vn 0.695800 -0.384000 -0.606900 +vn 0.199500 -0.523900 -0.828100 +vn -0.202200 -0.018000 -0.979200 +vn 0.700900 -0.013100 -0.713100 +vn 0.202200 -0.018000 -0.979200 +vn -0.983300 -0.100300 -0.151700 +vn -0.974800 -0.223000 0.003500 +vn 0.986700 0.089600 0.135500 +vn -0.991300 -0.115500 0.063100 +vn -0.146700 -0.864400 0.480900 +vn 0.989900 0.002700 0.141700 +vn -0.967500 -0.225800 -0.113800 +vn 0.992100 0.109800 -0.060000 +vn -0.559600 -0.739100 0.375100 +vn 0.152200 -0.846200 0.510600 +vn -0.059000 -0.903000 -0.425700 +vn 0.985800 0.148500 0.078200 +vn 0.056600 -0.898100 -0.436200 +vn 0.230400 -0.860600 -0.454100 +vn -0.985800 -0.003200 -0.167600 +vn 0.974000 0.226500 -0.003800 +vn -0.990500 -0.073500 -0.116200 +vn -0.974100 -0.226300 0.003800 +vn 0.992500 0.065200 0.103100 +vn -0.985600 -0.146700 0.083700 +vn -0.146300 -0.851500 0.503500 +vn 0.990100 0.002600 0.140100 +vn -0.983900 -0.158200 -0.083300 +vn 0.986400 0.142900 -0.081500 +vn -0.576100 -0.702900 0.417100 +vn 0.151600 -0.831800 0.533900 +vn -0.059000 -0.896700 -0.438700 +vn 0.056600 -0.891500 -0.449400 +vn 0.208300 -0.845800 -0.491200 +vn -0.986200 -0.003000 -0.165700 +vn 0.969500 0.219000 0.110400 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn -1.000000 0.000000 0.000000 +vn 0.192500 -0.981200 0.017100 +vn 0.682300 -0.730900 0.012800 +vn 0.950400 0.310900 -0.005400 +vn 0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn -0.407500 0.913100 -0.010600 +vn -0.950400 0.310900 -0.005400 +vn -0.682300 -0.730900 0.012800 +vn -0.192500 -0.981200 0.017100 +vn 0.192500 -0.858300 -0.475700 +vn 0.682300 -0.639400 -0.354400 +vn 0.950400 0.272000 0.150800 +vn 0.252600 0.846200 0.469100 +vn 0.000000 0.797500 0.603300 +vn -0.421400 0.723300 0.547100 +vn -0.950400 0.272000 0.150800 +vn -0.682300 -0.639400 -0.354400 +vn -0.192500 -0.858300 -0.475700 +vn 0.192500 -0.505400 -0.841100 +vn 0.682300 -0.376500 -0.626600 +vn 0.950400 0.160200 0.266600 +vn 0.215700 0.502900 0.837000 +vn 0.000000 0.657000 0.753900 +vn -0.422700 0.595500 0.683200 +vn -0.950400 0.160200 0.266600 +vn -0.682300 -0.376500 -0.626600 +vn -0.192500 -0.505400 -0.841100 +vn 0.192500 -0.017100 -0.981200 +vn 0.682300 -0.012800 -0.730900 +vn 0.950400 0.005400 0.310900 +vn 0.417200 0.015900 0.908700 +vn 0.000000 -0.999900 0.011600 +vn -0.407500 0.010600 0.913100 +vn -0.950400 0.005400 0.310900 +vn -0.682300 -0.012800 -0.730900 +vn -0.192500 -0.017100 -0.981200 +vn 0.192500 0.475700 -0.858300 +vn 0.682300 0.354400 -0.639400 +vn 0.950400 -0.150800 0.272000 +vn 0.252600 -0.469100 0.846200 +vn 0.000000 -0.603300 0.797500 +vn -0.421400 -0.547100 0.723300 +vn -0.950400 -0.150800 0.272000 +vn -0.682300 0.354400 -0.639400 +vn -0.192500 0.475700 -0.858300 +vn 0.192500 0.841100 -0.505400 +vn 0.682300 0.626600 -0.376500 +vn 0.950400 -0.266600 0.160200 +vn 0.215700 -0.837000 0.502900 +vn 0.000000 -0.753900 0.657000 +vn -0.422700 -0.683200 0.595500 +vn -0.950400 -0.266600 0.160200 +vn -0.682300 0.626600 -0.376500 +vn -0.192500 0.841100 -0.505400 +vn 0.192500 0.981200 -0.017100 +vn 0.682300 0.730900 -0.012800 +vn 0.950400 -0.310900 0.005400 +vn 0.417200 -0.908700 0.015900 +vn -0.984000 -0.178200 0.002100 +vn -0.407500 -0.913100 0.010600 +vn -0.950400 -0.310900 0.005400 +vn -0.682300 0.730900 -0.012800 +vn -0.192500 0.981200 -0.017100 +vn 0.192500 0.858300 0.475700 +vn 0.682300 0.639400 0.354400 +vn 0.950400 -0.272000 -0.150800 +vn 0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn -0.421400 -0.723300 -0.547100 +vn -0.950400 -0.272000 -0.150800 +vn -0.682300 0.639400 0.354400 +vn -0.192500 0.858300 0.475700 +vn 0.192500 0.505400 0.841100 +vn 0.682300 0.376500 0.626600 +vn 0.950400 -0.160200 -0.266600 +vn 0.215700 -0.502900 -0.837000 +vn -0.000000 -0.657000 -0.753900 +vn -0.422700 -0.595500 -0.683200 +vn -0.950400 -0.160200 -0.266600 +vn -0.682300 0.376500 0.626600 +vn -0.192500 0.505400 0.841100 +vn 0.192500 0.017100 0.981200 +vn 0.682300 0.012800 0.730900 +vn 0.950400 -0.005400 -0.310900 +vn 0.417200 -0.015900 -0.908700 +vn -0.407500 -0.010600 -0.913100 +vn -0.950400 -0.005400 -0.310900 +vn -0.682300 0.012800 0.730900 +vn -0.192500 0.017100 0.981200 +vn 0.192500 -0.475700 0.858300 +vn 0.682300 -0.354400 0.639400 +vn 0.950400 0.150800 -0.272000 +vn 0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn -0.421400 0.547100 -0.723300 +vn -0.950400 0.150800 -0.272000 +vn -0.682300 -0.354400 0.639400 +vn -0.192500 -0.475700 0.858300 +vn 0.192500 -0.841100 0.505400 +vn 0.682300 -0.626600 0.376500 +vn 0.950400 0.266600 -0.160200 +vn 0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn -0.422700 0.683200 -0.595500 +vn -0.950400 0.266600 -0.160200 +vn -0.682300 -0.626600 0.376500 +vn -0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn -0.984000 0.178200 -0.002100 +vn -0.984000 -0.002100 -0.178200 +vn -0.984000 0.002100 0.178200 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.407500 0.913100 -0.010600 +vn -0.417200 0.908700 -0.015900 +vn 0.421400 0.723300 0.547100 +vn -0.252600 0.846200 0.469100 +vn 0.422700 0.595500 0.683200 +vn -0.215700 0.502900 0.837000 +vn 0.407500 0.010600 0.913100 +vn -0.417200 0.015900 0.908700 +vn 0.421400 -0.547100 0.723300 +vn -0.252600 -0.469100 0.846200 +vn 0.422700 -0.683200 0.595500 +vn -0.215700 -0.837000 0.502900 +vn 0.407500 -0.913100 0.010600 +vn -0.417200 -0.908700 0.015900 +vn 0.421400 -0.723300 -0.547100 +vn -0.252600 -0.846200 -0.469100 +vn 0.422700 -0.595500 -0.683200 +vn -0.215700 -0.502900 -0.837000 +vn 0.407500 -0.010600 -0.913100 +vn -0.417200 -0.015900 -0.908700 +vn 0.421400 0.547100 -0.723300 +vn -0.252600 0.469100 -0.846200 +vn 0.422700 0.683200 -0.595500 +vn -0.215700 0.837000 -0.502900 +usemtl None.001 +f 1/1/1 3/2/1 2/3/1 +f 4/4/2 6/5/2 5/6/2 +f 7/7/3 9/8/3 8/9/3 +f 8/9/4 6/5/4 4/4/4 +f 6/10/5 11/11/5 10/12/5 +f 12/13/6 13/14/6 9/15/6 +f 9/15/7 11/11/7 6/10/7 +f 11/11/8 15/16/8 14/17/8 +f 16/18/9 17/19/9 13/14/9 +f 13/14/10 18/20/10 11/11/10 +f 19/21/11 20/22/11 15/16/11 +f 17/19/12 21/23/12 18/20/12 +f 18/20/13 22/24/13 19/21/13 +f 23/25/14 24/26/14 20/27/14 +f 21/28/15 25/29/15 22/30/15 +f 22/31/16 26/32/16 23/25/16 +f 27/33/17 29/34/17 28/35/17 +f 30/36/18 32/37/18 31/38/18 +f 33/39/19 28/35/19 32/40/19 +f 28/41/20 35/42/20 34/43/20 +f 31/44/21 37/45/21 36/46/21 +f 32/47/22 34/43/22 37/45/22 +f 34/43/23 39/48/23 38/49/23 +f 36/46/24 37/45/24 40/50/24 +f 37/45/25 34/43/25 41/51/25 +f 38/49/26 43/52/26 42/53/26 +f 40/54/27 41/55/27 44/56/27 +f 41/51/28 38/49/28 45/57/28 +f 42/58/29 47/59/29 46/60/29 +f 44/56/30 45/61/30 48/62/30 +f 45/63/31 42/58/31 49/64/31 +f 17/65/32 40/66/32 21/28/32 +f 12/67/33 31/68/33 16/69/33 +f 20/70/34 39/71/34 15/72/34 +f 7/73/35 30/74/35 12/67/35 +f 26/32/36 46/75/36 50/76/36 +f 24/77/37 43/78/37 20/70/37 +f 16/69/38 36/79/38 17/65/38 +f 10/80/39 29/81/39 5/82/39 +f 25/29/40 49/83/40 26/84/40 +f 50/76/41 46/75/41 24/26/41 +f 5/85/42 27/86/42 4/87/42 +f 39/71/43 51/88/43 15/72/43 +f 4/87/44 27/86/44 8/89/44 +f 8/89/45 33/90/45 7/91/45 +f 21/28/46 44/92/46 25/29/46 +f 52/93/47 3/2/47 1/1/47 +f 5/6/2 6/5/2 10/94/2 +f 12/95/3 9/8/3 7/7/3 +f 9/8/4 6/5/4 8/9/4 +f 10/12/5 11/11/5 14/17/5 +f 16/18/6 13/14/6 12/13/6 +f 13/14/7 11/11/7 9/15/7 +f 19/21/8 15/16/8 11/11/8 +f 13/14/9 17/19/9 18/20/9 +f 11/11/10 18/20/10 19/21/10 +f 23/96/11 20/22/11 19/21/11 +f 18/20/12 21/23/12 22/24/12 +f 19/21/13 22/24/13 23/96/13 +f 50/76/14 24/26/14 23/25/14 +f 22/30/15 25/29/15 26/84/15 +f 23/25/16 26/32/16 50/76/16 +f 28/35/17 29/34/17 35/97/17 +f 33/98/18 32/37/18 30/36/18 +f 27/33/19 28/35/19 33/39/19 +f 34/43/20 35/42/20 51/99/20 +f 32/47/21 37/45/21 31/44/21 +f 28/41/22 34/43/22 32/47/22 +f 51/99/23 39/48/23 34/43/23 +f 40/50/24 37/45/24 41/51/24 +f 41/51/25 34/43/25 38/49/25 +f 39/48/26 43/52/26 38/49/26 +f 44/56/27 41/55/27 45/61/27 +f 45/57/28 38/49/28 42/53/28 +f 43/100/29 47/59/29 42/58/29 +f 48/62/30 45/61/30 49/101/30 +f 49/64/31 42/58/31 46/60/31 +f 21/28/48 40/66/48 44/92/48 +f 16/69/49 31/68/49 36/79/49 +f 43/78/50 39/71/50 20/70/50 +f 12/67/51 30/74/51 31/68/51 +f 49/102/52 46/75/52 26/32/52 +f 47/103/53 43/78/53 24/77/53 +f 17/65/54 36/79/54 40/66/54 +f 35/104/55 29/81/55 10/80/55 +f 48/105/56 49/83/56 25/29/56 +f 24/26/57 46/75/57 47/106/57 +f 29/107/58 27/86/58 5/85/58 +f 8/89/59 27/86/59 33/90/59 +f 7/91/60 33/90/60 30/108/60 +f 25/29/61 44/92/61 48/105/61 +f 15/72/62 51/88/62 14/109/62 +f 53/110/63 54/111/63 55/112/63 +f 56/113/64 55/114/64 57/115/64 +f 58/116/65 57/115/65 59/117/65 +f 60/118/66 59/119/66 61/120/66 +f 61/120/67 62/121/67 63/122/67 +f 64/123/68 63/122/68 65/124/68 +f 65/125/69 66/126/69 67/127/69 +f 68/128/70 67/127/70 69/129/70 +f 70/130/71 69/129/71 71/131/71 +f 72/132/72 71/131/72 73/133/72 +f 55/134/73 54/135/73 74/136/73 +f 75/137/74 74/138/74 53/110/74 +f 76/139/75 73/140/75 74/138/75 +f 53/141/76 56/142/76 75/143/76 +f 77/144/77 78/145/77 79/146/77 +f 80/147/78 79/146/78 81/148/78 +f 81/149/79 82/150/79 83/151/79 +f 84/152/80 83/153/80 85/154/80 +f 86/155/81 87/156/81 88/157/81 +f 86/158/82 89/159/82 90/160/82 +f 90/161/83 91/162/83 92/163/83 +f 93/164/84 92/163/84 94/165/84 +f 77/144/85 94/166/85 95/167/85 +f 78/145/86 96/168/86 97/169/86 +f 79/146/87 97/169/87 82/170/87 +f 82/150/88 98/171/88 99/172/88 +f 83/153/89 99/173/89 85/154/89 +f 85/154/90 100/174/90 89/159/90 +f 89/159/91 101/175/91 102/176/91 +f 91/162/92 102/177/92 103/178/92 +f 92/163/93 103/178/93 104/179/93 +f 95/167/94 104/180/94 78/145/94 +f 96/168/95 105/181/95 106/182/95 +f 97/169/96 106/182/96 107/183/96 +f 98/171/97 107/184/97 108/185/97 +f 99/173/98 108/186/98 109/187/98 +f 100/174/99 109/187/99 101/175/99 +f 101/175/100 110/188/100 102/176/100 +f 102/177/101 111/189/101 103/178/101 +f 103/178/102 112/190/102 113/191/102 +f 104/180/103 113/192/103 105/181/103 +f 105/193/104 114/194/104 106/195/104 +f 106/195/105 115/196/105 107/197/105 +f 107/184/106 116/198/106 117/199/106 +f 108/200/107 117/201/107 118/202/107 +f 110/203/108 109/204/108 119/205/108 +f 110/206/109 120/207/109 111/208/109 +f 111/189/110 121/209/110 122/210/110 +f 112/211/111 122/212/111 123/213/111 +f 113/214/112 123/213/112 114/194/112 +f 114/194/113 124/215/113 125/216/113 +f 115/196/114 125/216/114 126/217/114 +f 116/198/115 126/218/115 127/219/115 +f 117/201/116 127/220/116 118/202/116 +f 118/202/117 128/221/117 120/207/117 +f 120/207/118 129/222/118 130/223/118 +f 121/209/119 130/224/119 131/225/119 +f 122/212/120 131/226/120 123/213/120 +f 123/213/121 132/227/121 124/215/121 +f 124/215/122 133/228/122 134/229/122 +f 125/230/123 134/231/123 135/232/123 +f 126/218/124 135/232/124 136/233/124 +f 127/220/125 136/234/125 137/235/125 +f 128/221/126 137/235/126 129/222/126 +f 129/222/127 138/236/127 130/223/127 +f 130/224/128 139/237/128 131/225/128 +f 131/225/129 140/238/129 141/239/129 +f 132/227/130 141/240/130 124/215/130 +f 133/241/131 142/242/131 134/243/131 +f 134/231/132 143/244/132 144/245/132 +f 135/232/133 144/245/133 145/246/133 +f 136/247/134 145/248/134 146/249/134 +f 147/250/135 138/251/135 148/252/135 +f 138/253/136 147/254/136 139/255/136 +f 139/237/137 149/256/137 150/257/137 +f 140/258/138 150/259/138 151/260/138 +f 141/261/139 151/260/139 142/242/139 +f 142/242/140 152/262/140 143/263/140 +f 143/244/141 153/264/141 154/265/141 +f 144/245/142 154/265/142 145/246/142 +f 145/248/143 155/266/143 146/249/143 +f 146/249/144 156/267/144 157/268/144 +f 147/254/145 157/268/145 158/269/145 +f 149/256/146 158/270/146 159/271/146 +f 150/259/147 159/272/147 160/273/147 +f 151/260/148 160/273/148 152/262/148 +f 152/262/149 161/274/149 153/275/149 +f 153/264/150 162/276/150 154/265/150 +f 154/265/151 163/277/151 155/278/151 +f 155/266/152 164/279/152 165/280/152 +f 156/267/153 165/280/153 166/281/153 +f 157/268/154 166/281/154 158/269/154 +f 158/270/155 167/282/155 168/283/155 +f 159/271/156 168/283/156 169/284/156 +f 160/273/157 169/285/157 152/262/157 +f 161/286/158 170/287/158 162/288/158 +f 162/276/159 171/289/159 172/290/159 +f 163/277/160 172/290/160 173/291/160 +f 164/292/161 173/293/161 174/294/161 +f 174/295/108 175/296/108 176/297/108 +f 166/298/162 175/299/162 167/300/162 +f 167/282/163 177/301/163 178/302/163 +f 168/283/164 178/302/164 169/284/164 +f 169/303/165 179/304/165 170/287/165 +f 170/287/166 180/305/166 181/306/166 +f 171/307/167 181/306/167 182/308/167 +f 172/290/168 182/309/168 183/310/168 +f 173/293/169 183/311/169 174/294/169 +f 174/294/170 184/312/170 185/313/170 +f 175/299/171 185/313/171 186/314/171 +f 177/301/172 186/315/172 178/302/172 +f 178/316/173 187/317/173 188/318/173 +f 179/304/174 188/318/174 180/305/174 +f 180/305/175 77/319/175 80/320/175 +f 181/306/176 80/320/176 81/321/176 +f 182/309/177 81/149/177 84/322/177 +f 183/311/178 84/323/178 87/324/178 +f 184/312/179 87/324/179 86/325/179 +f 185/313/180 86/325/180 186/314/180 +f 186/315/181 90/161/181 93/164/181 +f 187/317/182 93/326/182 188/318/182 +f 188/318/183 94/327/183 77/319/183 +f 189/328/184 190/329/184 191/330/184 +f 87/331/73 85/332/73 190/186/73 +f 85/333/185 89/334/185 191/335/185 +f 89/336/186 86/337/186 88/338/186 +f 192/339/185 193/340/185 176/341/185 +f 175/342/187 166/343/187 176/344/187 +f 166/345/184 165/346/184 194/347/184 +f 165/348/73 174/349/73 193/350/73 +f 195/351/81 196/352/81 119/353/81 +f 109/354/73 118/355/73 196/356/73 +f 120/357/188 110/358/188 119/359/188 +f 118/360/184 120/355/184 197/361/184 +f 198/362/108 199/363/108 200/364/108 +f 146/365/81 147/366/81 200/367/81 +f 137/368/73 146/369/73 199/370/73 +f 138/371/185 137/372/185 148/373/185 +f 201/374/76 202/375/76 203/376/76 +f 202/377/189 204/378/189 203/379/189 +f 204/380/73 205/381/73 206/382/73 +f 205/383/190 201/384/190 207/385/190 +f 207/386/191 203/387/191 208/388/191 +f 205/389/192 204/390/192 202/391/192 +f 152/262/140 153/275/140 143/263/140 +f 56/363/63 53/110/63 55/112/63 +f 58/116/64 56/113/64 57/115/64 +f 60/392/65 58/116/65 59/117/65 +f 74/138/74 54/111/74 53/110/74 +f 64/123/67 61/120/67 63/122/67 +f 204/378/189 208/393/189 203/379/189 +f 68/128/69 65/125/69 67/127/69 +f 70/130/70 68/128/70 69/129/70 +f 72/132/71 70/130/71 71/131/71 +f 76/394/72 72/132/72 73/133/72 +f 55/134/73 74/136/73 73/395/73 +f 55/134/73 73/395/73 71/396/73 +f 57/397/73 55/134/73 71/396/73 +f 57/397/73 71/396/73 69/398/73 +f 59/399/73 57/397/73 62/400/73 +f 57/397/73 69/398/73 62/400/73 +f 62/400/73 69/398/73 63/401/73 +f 69/398/73 67/402/73 63/401/73 +f 100/174/90 101/175/90 89/159/90 +f 75/137/75 76/139/75 74/138/75 +f 76/403/76 75/143/76 72/404/76 +f 186/315/172 187/405/172 178/302/172 +f 56/142/76 58/406/76 72/404/76 +f 72/404/76 58/406/76 70/407/76 +f 58/406/76 60/408/76 70/407/76 +f 60/408/76 61/409/76 64/410/76 +f 70/407/76 60/408/76 64/410/76 +f 68/411/76 70/407/76 64/410/76 +f 65/412/76 68/411/76 64/410/76 +f 80/147/77 77/144/77 79/146/77 +f 114/194/104 115/196/104 106/195/104 +f 84/322/79 81/149/79 83/151/79 +f 87/413/193 84/152/193 85/154/193 +f 87/156/81 189/414/81 88/157/81 +f 89/159/194 91/415/194 90/160/194 +f 93/164/83 90/161/83 92/163/83 +f 111/189/101 112/190/101 103/178/101 +f 78/145/85 77/144/85 95/167/85 +f 79/146/86 78/145/86 97/169/86 +f 139/237/128 140/238/128 131/225/128 +f 83/151/88 82/150/88 99/172/88 +f 99/173/195 100/174/195 85/154/195 +f 142/242/131 143/263/131 134/243/131 +f 91/415/196 89/159/196 102/176/196 +f 92/163/92 91/162/92 103/178/92 +f 95/416/93 92/163/93 104/179/93 +f 161/274/149 162/417/149 153/275/149 +f 97/169/95 96/168/95 106/182/95 +f 98/418/96 97/169/96 107/183/96 +f 99/172/97 98/171/97 108/185/97 +f 100/174/197 99/173/197 109/187/197 +f 63/122/68 66/419/68 65/124/68 +f 110/188/198 111/420/198 102/176/198 +f 170/287/158 171/307/158 162/288/158 +f 104/179/102 103/178/102 113/191/102 +f 96/168/103 104/180/103 105/181/103 +f 104/180/94 96/168/94 78/145/94 +f 79/146/78 82/170/78 81/148/78 +f 108/185/106 107/184/106 117/199/106 +f 109/421/199 108/200/199 118/202/199 +f 109/204/108 195/422/108 119/205/108 +f 120/207/200 121/423/200 111/208/200 +f 112/190/110 111/189/110 122/210/110 +f 113/214/111 112/211/111 123/213/111 +f 105/193/112 113/214/112 114/194/112 +f 115/196/113 114/194/113 125/216/113 +f 116/424/114 115/196/114 126/217/114 +f 117/199/115 116/198/115 127/219/115 +f 127/220/201 128/221/201 118/202/201 +f 92/163/84 95/416/84 94/165/84 +f 121/423/202 120/207/202 130/223/202 +f 122/210/119 121/209/119 131/225/119 +f 67/402/73 66/425/73 63/401/73 +f 114/194/121 123/213/121 124/215/121 +f 125/216/122 124/215/122 134/229/122 +f 126/218/123 125/230/123 135/232/123 +f 127/219/124 126/218/124 136/233/124 +f 128/221/203 127/220/203 137/235/203 +f 93/326/182 94/327/182 188/318/182 +f 138/236/204 139/426/204 130/223/204 +f 166/343/187 194/427/187 176/344/187 +f 132/428/129 131/225/129 141/239/129 +f 169/285/157 161/274/157 152/262/157 +f 97/169/87 98/418/87 82/170/87 +f 135/232/132 134/231/132 144/245/132 +f 136/233/133 135/232/133 145/246/133 +f 137/429/205 136/247/205 146/249/205 +f 200/430/135 147/250/135 148/252/135 +f 147/254/206 149/431/206 139/255/206 +f 140/238/137 139/237/137 150/257/137 +f 141/261/138 140/258/138 151/260/138 +f 133/241/139 141/261/139 142/242/139 +f 131/226/120 132/227/120 123/213/120 +f 144/245/141 143/244/141 154/265/141 +f 154/265/142 155/278/142 145/246/142 +f 155/266/207 156/267/207 146/249/207 +f 147/254/144 146/249/144 157/268/144 +f 149/431/208 147/254/208 158/269/208 +f 150/257/146 149/256/146 159/271/146 +f 151/260/147 150/259/147 160/273/147 +f 142/242/148 151/260/148 152/262/148 +f 109/187/99 110/188/99 101/175/99 +f 115/196/105 116/424/105 107/197/105 +f 178/302/164 179/432/164 169/284/164 +f 156/267/209 155/266/209 165/280/209 +f 157/268/153 156/267/153 166/281/153 +f 166/281/210 167/433/210 158/269/210 +f 159/271/155 158/270/155 168/283/155 +f 160/434/156 159/271/156 169/284/156 +f 137/235/126 138/236/126 129/222/126 +f 162/276/150 163/277/150 154/265/150 +f 163/277/159 162/276/159 172/290/159 +f 164/435/160 163/277/160 173/291/160 +f 165/436/211 164/292/211 174/294/211 +f 193/437/108 174/295/108 176/297/108 +f 175/299/212 177/438/212 167/300/212 +f 168/283/163 167/282/163 178/302/163 +f 141/240/130 133/228/130 124/215/130 +f 161/286/165 169/303/165 170/287/165 +f 171/307/166 170/287/166 181/306/166 +f 172/439/167 171/307/167 182/308/167 +f 173/291/168 172/290/168 183/310/168 +f 183/311/213 184/312/213 174/294/213 +f 175/299/170 174/294/170 185/313/170 +f 177/438/214 175/299/214 186/314/214 +f 163/277/151 164/435/151 155/278/151 +f 179/304/173 178/316/173 188/318/173 +f 170/287/174 179/304/174 180/305/174 +f 181/306/175 180/305/175 80/320/175 +f 182/308/176 181/306/176 81/321/176 +f 183/310/177 182/309/177 84/322/177 +f 184/312/215 183/311/215 87/324/215 +f 185/313/179 184/312/179 86/325/179 +f 86/325/216 90/440/216 186/314/216 +f 187/405/181 186/315/181 93/164/181 +f 196/352/81 197/441/81 119/353/81 +f 180/305/183 188/318/183 77/319/183 +f 88/442/184 189/328/184 191/330/184 +f 189/443/73 87/331/73 190/186/73 +f 190/444/185 85/333/185 191/335/185 +f 191/445/186 89/336/186 88/338/186 +f 194/446/185 192/339/185 176/341/185 +f 75/143/76 56/142/76 72/404/76 +f 165/346/184 192/447/184 194/347/184 +f 192/448/73 165/348/73 193/350/73 +f 128/221/117 129/222/117 120/207/117 +f 195/449/73 109/354/73 196/356/73 +f 197/450/188 120/357/188 119/359/188 +f 196/451/184 118/360/184 197/361/184 +f 148/452/108 198/362/108 200/364/108 +f 199/453/81 146/365/81 200/367/81 +f 198/454/73 137/368/73 199/370/73 +f 137/372/185 198/455/185 148/373/185 +f 207/381/76 201/374/76 203/376/76 +f 59/119/66 62/121/66 61/120/66 +f 208/456/73 204/380/73 206/382/73 +f 206/457/190 205/383/190 207/385/190 +f 206/458/191 207/386/191 208/388/191 +f 201/459/192 205/389/192 202/391/192 +o CargoMid +v -0.602109 3.364694 3.769022 +v -0.602109 3.364695 2.453471 +v -0.602109 1.054079 2.453471 +v 0.602109 3.364695 2.453471 +v 0.602109 1.054079 2.453471 +v 0.602109 3.364694 3.769022 +v 0.602109 1.054078 3.769021 +v -0.602109 1.054078 3.769021 +vt 0.666123 0.332861 +vt 0.334894 0.333877 +vt 0.333877 0.002647 +vt 0.002648 0.333877 +vt 0.001632 0.002648 +vt 0.332861 0.001632 +vt 0.333877 0.665106 +vt 0.002647 0.666123 +vt 0.001632 0.334894 +vt 0.334894 0.666123 +vt 0.333877 0.334894 +vt 0.665106 0.333877 +vt 0.998368 0.332861 +vt 0.667139 0.333877 +vt 0.666123 0.002647 +vt 0.333877 0.667139 +vt 0.665106 0.666123 +vt 0.666123 0.997352 +vt 0.665106 0.001632 +vt 0.333877 0.332861 +vt 0.332861 0.333877 +vt 0.666123 0.665106 +vt 0.997352 0.001632 +vt 0.334894 0.998368 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 209/460/217 210/461/217 211/462/217 +f 210/463/218 212/464/218 213/465/218 +f 212/466/219 214/467/219 215/468/219 +f 214/469/220 209/470/220 216/471/220 +f 216/472/221 211/473/221 213/474/221 +f 214/475/222 212/476/222 210/477/222 +f 216/478/217 209/460/217 211/462/217 +f 211/479/218 210/463/218 213/465/218 +f 213/480/219 212/466/219 215/468/219 +f 215/481/220 214/469/220 216/471/220 +f 215/482/221 216/472/221 213/474/221 +f 209/483/222 214/475/222 210/477/222 +o MainBody +v 1.960505 0.121789 0.032559 +v 1.960505 0.121789 -0.032557 +v 1.960505 0.035004 -0.032557 +v 2.025620 0.035004 -0.032557 +v 2.025620 0.121789 -0.032557 +v 2.025620 0.035004 0.032559 +v 2.025620 0.121789 0.032559 +v 2.025620 0.121790 1.083552 +v 1.960505 0.035004 0.032559 +v 2.025620 0.902858 0.032558 +v 1.960505 0.902858 -0.032557 +v 2.025620 0.902858 -0.032557 +v 1.960505 0.121790 1.148667 +v 1.960505 0.121790 1.083552 +v 1.960505 0.035004 1.083552 +v 2.025620 0.035004 1.148667 +v 2.025620 0.121790 1.148667 +v 1.960505 0.035004 1.148667 +v 2.025620 0.035004 1.083552 +v 2.025620 0.902858 1.148667 +v 1.960505 0.902858 1.083552 +v 2.025620 0.902858 1.083552 +v 1.960505 0.496703 1.148667 +v 1.960505 0.496703 1.083552 +v 2.025620 0.496702 1.083552 +v 2.025620 0.496702 1.148667 +v 1.960505 0.496702 0.032559 +v 1.960505 0.496702 -0.032557 +v 2.025620 0.496702 -0.032557 +v 2.025620 0.496702 0.032559 +v 1.960505 0.902858 0.032558 +v 1.960505 0.590431 -0.032557 +v 2.025620 0.590431 -0.032557 +v 2.025620 0.590431 0.032558 +v 1.960505 0.590431 0.032558 +v 1.960505 0.902858 1.148667 +v 1.960505 0.590431 1.083552 +v 2.025620 0.590431 1.083552 +v 2.025620 0.590431 1.148667 +v 1.960505 0.590431 1.148667 +v -1.135648 4.236131 -2.439156 +v -1.135648 0.944072 -2.349645 +v -1.135648 0.944072 -2.439157 +v -1.135648 4.236131 -2.349644 +v -1.225160 0.944072 -2.349645 +v -1.225160 4.236131 -2.349644 +v -1.225160 0.944072 -2.439157 +v -1.225160 4.236131 -2.439156 +v -0.984018 1.417435 -1.140142 +v -0.984018 0.990447 -2.542124 +v -0.984018 0.990447 -1.140142 +v -0.984018 1.417435 -2.542124 +v 0.984019 0.990446 -2.542124 +v 0.984019 1.417434 -2.542124 +v 0.984019 0.990446 -1.140142 +v 0.984019 1.417434 -1.140142 +v -1.000000 1.444865 1.836146 +v -1.000000 1.054287 -0.163853 +v -1.000000 1.054287 1.836147 +v -1.000000 1.444865 -0.163853 +v 1.000000 1.444865 -0.163853 +v 1.000000 1.054287 1.836147 +v 1.000000 1.054287 -0.163853 +v 1.000000 1.444865 1.836147 +v -1.401982 1.100000 -1.534202 +v -1.401982 0.900000 -2.803965 +v -1.401982 0.900000 -1.534202 +v -1.401982 1.100001 -2.803965 +v 1.401982 1.099999 -2.803964 +v 2.000000 1.099999 -0.319406 +v 2.000000 0.899998 4.000001 +v 2.000000 0.899999 -0.319406 +v 2.000000 1.099998 4.000001 +v -2.000000 0.899999 4.000000 +v 1.401982 0.899999 -2.803964 +v 1.401982 0.899999 -1.534201 +v 1.401982 1.099999 -1.534201 +v -0.980572 3.493236 2.036421 +v -0.980572 1.122929 1.618471 +v -0.980572 3.424315 2.427284 +v 0.980572 1.122929 1.618472 +v -0.980572 1.054009 2.009334 +v 0.980572 3.424315 2.427284 +v 0.980572 1.054009 2.009335 +v 0.980572 3.493235 2.036421 +v -0.742343 4.377108 1.957737 +v -0.742343 3.422644 1.939661 +v -0.742343 4.367644 2.457409 +v 0.742344 3.422644 1.939662 +v -0.742343 3.413181 2.439332 +v 0.742344 4.367644 2.457409 +v 0.742344 3.413181 2.439332 +v 0.742344 4.377108 1.957738 +v -0.551987 1.338115 -2.478072 +v -0.551987 1.028879 -3.436547 +v -0.551987 1.028879 -2.478072 +v -0.551987 1.338116 -3.436547 +v 0.551987 1.338116 -3.436547 +v 0.551987 1.028878 -2.478072 +v 0.551987 1.028879 -3.436547 +v 0.551987 1.338115 -2.478072 +v -2.033444 0.121790 0.032558 +v -2.033444 0.121790 -0.032558 +v -2.033444 0.035005 -0.032558 +v -1.968328 0.035005 -0.032558 +v -1.968328 0.121790 -0.032558 +v -1.968328 0.035005 0.032558 +v -1.968328 0.121790 0.032558 +v -1.968328 0.121790 1.083551 +v -2.033444 0.035005 0.032558 +v -1.968328 0.902859 0.032558 +v -2.033444 0.902859 -0.032558 +v -1.968328 0.902859 -0.032558 +v -2.033444 0.121790 1.148666 +v -2.033444 0.121790 1.083551 +v -2.033444 0.035005 1.083551 +v -1.968328 0.035005 1.148666 +v -1.968328 0.121790 1.148666 +v -2.033444 0.035005 1.148666 +v -1.968328 0.035005 1.083551 +v -1.968328 0.902859 1.148666 +v -2.033444 0.902859 1.083551 +v -1.968328 0.902859 1.083551 +v -2.033444 0.496704 1.148666 +v -2.033444 0.496704 1.083551 +v -1.968328 0.496703 1.083551 +v -1.968328 0.496703 1.148666 +v -2.033444 0.496703 0.032558 +v -2.033444 0.496703 -0.032558 +v -1.968328 0.496703 -0.032558 +v -1.968328 0.496703 0.032558 +v -2.033444 0.902859 0.032558 +v -2.033444 0.590432 -0.032558 +v -1.968328 0.590432 -0.032558 +v -1.968328 0.590432 0.032558 +v -2.033444 0.590432 0.032558 +v -2.033444 0.902859 1.148666 +v -2.033444 0.590432 1.083551 +v -1.968328 0.590432 1.083551 +v -1.968328 0.590432 1.148666 +v -2.033444 0.590432 1.148666 +v -2.000000 1.099999 4.000000 +v -2.000000 0.900000 -0.319407 +v -2.000000 1.100000 -0.319407 +vt 0.831442 0.264770 +vt 0.826945 0.264756 +vt 0.826977 0.254323 +vt 0.735286 0.852961 +vt 0.730822 0.842513 +vt 0.730790 0.852947 +vt 0.474443 0.758477 +vt 0.469914 0.748058 +vt 0.469946 0.758491 +vt 0.896324 0.374080 +vt 0.891605 0.446544 +vt 0.896102 0.446558 +vt 0.882155 0.369590 +vt 0.886638 0.365085 +vt 0.882141 0.365099 +vt 0.779149 0.031014 +vt 0.774666 0.026509 +vt 0.774652 0.031000 +vt 0.908518 0.265003 +vt 0.904022 0.264989 +vt 0.904054 0.254556 +vt 0.831474 0.254337 +vt 0.397366 0.758713 +vt 0.392837 0.748294 +vt 0.392869 0.758727 +vt 0.750092 0.852961 +vt 0.745628 0.842513 +vt 0.745596 0.852947 +vt 0.882390 0.446558 +vt 0.886873 0.442053 +vt 0.882376 0.442067 +vt 0.779149 0.245490 +vt 0.774666 0.240986 +vt 0.774652 0.245476 +vt 0.908380 0.310076 +vt 0.903883 0.310062 +vt 0.745137 0.898039 +vt 0.745274 0.852961 +vt 0.740640 0.898025 +vt 0.397505 0.803785 +vt 0.393008 0.803798 +vt 0.749954 0.898039 +vt 0.745457 0.898025 +vt 0.831303 0.309844 +vt 0.826806 0.309830 +vt 0.735148 0.898039 +vt 0.730651 0.898025 +vt 0.474582 0.803549 +vt 0.470085 0.803563 +vt 0.739966 0.898038 +vt 0.735607 0.852947 +vt 0.735469 0.898025 +vt 0.886652 0.369576 +vt 0.740136 0.842526 +vt 0.735640 0.842513 +vt 0.740779 0.852947 +vt 0.745307 0.842527 +vt 0.740811 0.842513 +vt 0.831154 0.358673 +vt 0.826657 0.358660 +vt 0.826771 0.321099 +vt 0.734998 0.946873 +vt 0.730617 0.909294 +vt 0.730502 0.946859 +vt 0.474732 0.852376 +vt 0.470120 0.814830 +vt 0.470235 0.852389 +vt 0.739815 0.946873 +vt 0.735434 0.909294 +vt 0.735319 0.946859 +vt 0.908229 0.358905 +vt 0.903733 0.358892 +vt 0.903848 0.321331 +vt 0.432606 0.852639 +vt 0.437218 0.890190 +vt 0.437103 0.852625 +vt 0.397655 0.852612 +vt 0.393043 0.815067 +vt 0.393158 0.852625 +vt 0.749803 0.946873 +vt 0.745422 0.909294 +vt 0.745307 0.946859 +vt 0.908345 0.321344 +vt 0.397539 0.815053 +vt 0.749919 0.909308 +vt 0.831268 0.321112 +vt 0.735113 0.909308 +vt 0.474617 0.814816 +vt 0.905980 0.446558 +vt 0.910256 0.374066 +vt 0.905759 0.374079 +vt 0.739931 0.909308 +vt 0.903864 0.321393 +vt 0.831284 0.321175 +vt 0.831319 0.309906 +vt 0.905538 0.374066 +vt 0.905759 0.446544 +vt 0.901262 0.446558 +vt 0.999215 0.593042 +vt 0.989181 0.197303 +vt 0.997999 0.197276 +vt 0.977931 0.593121 +vt 0.970329 0.197276 +vt 0.979147 0.197303 +vt 0.999215 0.988904 +vt 0.989181 0.593148 +vt 0.997999 0.593121 +vt 0.980363 0.593121 +vt 0.774652 0.224813 +vt 0.783497 0.233592 +vt 0.774679 0.233619 +vt 0.191998 0.807591 +vt 0.140177 0.945358 +vt 0.140593 0.807433 +vt 0.775247 0.224786 +vt 0.826062 0.031014 +vt 0.826657 0.224628 +vt 0.881186 0.878121 +vt 0.932166 0.740036 +vt 0.932589 0.877964 +vt 0.774652 0.447938 +vt 0.826657 0.254481 +vt 0.826061 0.448095 +vt 0.417414 0.747622 +vt 0.278710 0.554426 +vt 0.416824 0.554006 +vt 0.556033 0.748044 +vt 0.417920 0.747622 +vt 0.556626 0.554429 +vt 0.980027 0.740181 +vt 0.933005 0.740036 +vt 0.092295 0.945506 +vt 0.091871 0.807579 +vt 0.139320 0.945361 +vt 0.036861 0.945506 +vt 0.083457 0.807435 +vt 0.083880 0.945361 +vt 0.195609 0.945359 +vt 0.243059 0.807577 +vt 0.242636 0.945504 +vt 0.278710 0.691935 +vt 0.140597 0.692354 +vt 0.278289 0.554008 +vt 0.138898 0.692357 +vt 0.001207 0.554008 +vt 0.139320 0.554430 +vt 0.879512 0.861947 +vt 0.855017 0.999799 +vt 0.855434 0.861873 +vt 0.934356 0.724023 +vt 0.933510 0.448169 +vt 0.958436 0.723949 +vt 0.830093 0.724023 +vt 0.853323 0.448095 +vt 0.854169 0.723949 +vt 0.908582 0.723949 +vt 0.932662 0.724023 +vt 0.279130 0.140238 +vt 0.554945 0.001476 +vt 0.555365 0.139399 +vt 0.277442 0.416086 +vt 0.277020 0.554008 +vt 0.001207 0.415242 +vt 0.880762 0.740036 +vt 0.880888 0.453616 +vt 0.908455 0.734517 +vt 0.936780 0.197276 +vt 0.936368 0.062029 +vt 0.963834 0.197194 +vt 0.936243 0.072496 +vt 0.908675 0.353386 +vt 0.908550 0.066977 +vt 0.360604 0.883289 +vt 0.388078 0.748124 +vt 0.387664 0.883372 +vt 0.692936 0.733201 +vt 0.829245 0.448510 +vt 0.828370 0.733615 +vt 0.692060 0.448095 +vt 0.557502 0.733624 +vt 0.556626 0.448510 +vt 0.658255 0.957992 +vt 0.658418 0.843236 +vt 0.692774 0.957276 +vt 0.326090 0.955118 +vt 0.325778 0.852728 +vt 0.360604 0.955013 +vt 0.632700 0.843234 +vt 0.598344 0.957271 +vt 0.598183 0.842519 +vt 0.278710 0.955013 +vt 0.313539 0.852729 +vt 0.313225 0.955118 +vt 0.036437 0.807121 +vt 0.036789 0.692357 +vt 0.138968 0.807435 +vt 0.242706 0.692354 +vt 0.140529 0.807433 +vt 0.140177 0.692668 +vt 0.474732 0.852740 +vt 0.437218 0.946920 +vt 0.437503 0.852625 +vt 0.750458 0.951236 +vt 0.750124 0.842627 +vt 0.787690 0.951122 +vt 0.430354 0.852740 +vt 0.392837 0.946921 +vt 0.393127 0.852625 +vt 0.692936 0.951122 +vt 0.730502 0.842627 +vt 0.730168 0.951236 +vt 0.692936 0.842233 +vt 0.598183 0.733911 +vt 0.692604 0.733624 +vt 0.787357 0.842513 +vt 0.787690 0.733904 +vt 0.479517 0.758491 +vt 0.475020 0.758477 +vt 0.475052 0.748044 +vt 0.901277 0.109992 +vt 0.905806 0.120412 +vt 0.905774 0.109978 +vt 0.360316 0.758475 +vt 0.355787 0.748055 +vt 0.355819 0.758488 +vt 0.891605 0.374080 +vt 0.886887 0.446544 +vt 0.891384 0.446558 +vt 0.388092 0.752545 +vt 0.392575 0.748042 +vt 0.779149 0.238123 +vt 0.774652 0.238109 +vt 0.556594 0.758723 +vt 0.552097 0.758709 +vt 0.552129 0.748276 +vt 0.479549 0.748058 +vt 0.283239 0.758710 +vt 0.278710 0.748291 +vt 0.278742 0.758724 +vt 0.088666 0.817883 +vt 0.084169 0.817869 +vt 0.084201 0.807435 +vt 0.388327 0.829514 +vt 0.388313 0.825023 +vt 0.392810 0.825010 +vt 0.779149 0.005980 +vt 0.774666 0.001476 +vt 0.774652 0.005967 +vt 0.556455 0.803797 +vt 0.551958 0.803783 +vt 0.321111 0.852638 +vt 0.321249 0.897714 +vt 0.325608 0.852623 +vt 0.283378 0.803782 +vt 0.278881 0.803796 +vt 0.088527 0.862961 +vt 0.084030 0.862947 +vt 0.479378 0.803565 +vt 0.474882 0.803551 +vt 0.901139 0.064914 +vt 0.905636 0.064900 +vt 0.360454 0.803546 +vt 0.355957 0.803560 +vt 0.905636 0.175952 +vt 0.901278 0.130860 +vt 0.901139 0.175938 +vt 0.392589 0.752531 +vt 0.901310 0.120426 +vt 0.325746 0.897700 +vt 0.321281 0.908149 +vt 0.325778 0.908135 +vt 0.479229 0.852394 +vt 0.474848 0.814819 +vt 0.900990 0.016081 +vt 0.905601 0.053632 +vt 0.905486 0.016067 +vt 0.360604 0.852373 +vt 0.355992 0.814827 +vt 0.356107 0.852387 +vt 0.905486 0.224786 +vt 0.901105 0.187208 +vt 0.900990 0.224772 +vt 0.556305 0.852627 +vt 0.551809 0.852613 +vt 0.551924 0.815052 +vt 0.313539 0.852638 +vt 0.318151 0.890187 +vt 0.318035 0.852623 +vt 0.283527 0.852610 +vt 0.278916 0.815064 +vt 0.279030 0.852623 +vt 0.088377 0.911795 +vt 0.083996 0.874217 +vt 0.083880 0.911781 +vt 0.556420 0.815065 +vt 0.283412 0.815050 +vt 0.088493 0.874231 +vt 0.479344 0.814832 +vt 0.901105 0.053646 +vt 0.360489 0.814814 +vt 0.896545 0.446558 +vt 0.900821 0.374065 +vt 0.905601 0.187222 +vt 0.479360 0.814895 +vt 0.392575 0.829514 +vt 0.392796 0.901992 +vt 0.388299 0.902005 +vt 0.880762 0.448169 +vt 0.855851 0.723947 +vt 0.856684 0.448095 +vt 0.830516 0.861950 +vt 0.854594 0.861876 +vt 0.280391 0.554006 +vt 0.555785 0.277321 +vt 0.556626 0.553167 +vt 0.278710 0.002320 +vt 0.277865 0.278164 +vt 0.002475 0.001476 +vt 0.879929 0.724021 +vt 0.279551 0.278161 +vt 0.001630 0.277320 +vt 0.830940 0.999876 +vt 0.735319 0.842526 +vt 0.474411 0.748044 +vt 0.891827 0.374066 +vt 0.779163 0.026523 +vt 0.908550 0.254569 +vt 0.397334 0.748280 +vt 0.750124 0.842526 +vt 0.779162 0.241000 +vt 0.740104 0.852961 +vt 0.432721 0.890204 +vt 0.910477 0.446544 +vt 0.901042 0.374079 +vt 0.990397 0.593069 +vt 0.969113 0.593094 +vt 0.990397 0.988932 +vt 0.987965 0.197276 +vt 0.783470 0.224786 +vt 0.191581 0.945516 +vt 0.774652 0.031171 +vt 0.880762 0.740194 +vt 0.775247 0.254323 +vt 0.279300 0.748042 +vt 0.979610 0.878107 +vt 0.036437 0.807579 +vt 0.196034 0.807433 +vt 0.000785 0.691935 +vt 0.879095 0.999873 +vt 0.829245 0.448169 +vt 0.909429 0.448095 +vt 0.908582 0.448095 +vt 0.936368 0.358905 +vt 0.361018 0.748042 +vt 0.693811 0.448095 +vt 0.692936 0.842519 +vt 0.632862 0.957986 +vt 0.243059 0.807119 +vt 0.474447 0.947033 +vt 0.138897 0.807435 +vt 0.430065 0.947034 +vt 0.693269 0.842513 +vt 0.598513 0.842519 +vt 0.360293 0.852623 +vt 0.000785 0.553164 +vt 0.963422 0.061947 +vt 0.957589 0.448095 +vt 0.693268 0.733615 +vt 0.283207 0.748277 +vt 0.140177 0.554428 +vt 0.139320 0.692671 +vt 0.418513 0.554006 +vt 0.360284 0.748042 +vt 0.887109 0.374066 +vt 0.779162 0.233632 +vt 0.556626 0.748290 +vt 0.088698 0.807449 +vt 0.392823 0.829500 +vt 0.779163 0.001490 +vt 0.905774 0.130874 +vt 0.313654 0.890201 +vt 0.901042 0.446544 +vt 0.388078 0.829528 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.984800 -0.173600 +vn -0.000000 0.984800 0.173600 +vn -0.000000 -0.173600 0.984800 +vn 0.000000 0.173600 -0.984800 +vn 0.000000 -0.999800 -0.018900 +vn 0.000000 0.999800 0.018900 +vn 0.000000 -0.018900 0.999800 +vn 0.000000 0.018900 -0.999800 +vn 0.897200 0.000000 -0.441700 +vn -0.897200 -0.000000 -0.441700 +vn 0.000000 0.984800 0.173700 +usemtl None +f 217/484/223 218/485/223 219/486/223 +f 218/487/224 220/488/224 221/489/224 +f 221/490/223 222/491/223 223/492/223 +f 224/493/225 217/494/225 223/495/225 +f 225/496/226 220/497/226 219/498/226 +f 226/499/225 227/500/225 228/501/225 +f 229/502/223 230/503/223 231/504/223 +f 230/503/223 217/484/223 225/505/223 +f 224/506/223 232/507/223 233/508/223 +f 233/509/227 234/510/227 229/511/227 +f 234/512/226 235/513/226 231/514/226 +f 236/515/225 237/516/225 238/517/225 +f 239/518/223 240/519/223 230/503/223 +f 240/520/224 230/521/224 241/522/224 +f 241/523/223 233/508/223 242/524/223 +f 242/525/227 229/511/227 239/526/227 +f 243/527/223 244/528/223 218/485/223 +f 244/529/224 221/489/224 245/530/224 +f 245/531/223 223/492/223 246/532/223 +f 246/533/227 217/534/227 243/535/227 +f 231/514/226 222/536/226 225/496/226 +f 223/492/223 222/491/223 224/506/223 +f 217/534/227 222/537/227 225/538/227 +f 224/539/224 231/540/224 235/541/224 +f 247/542/223 227/543/223 248/544/223 +f 227/545/224 249/546/224 228/547/224 +f 228/548/223 250/549/223 226/550/223 +f 226/551/227 251/552/227 247/553/227 +f 252/554/223 237/555/223 253/556/223 +f 237/557/224 254/558/224 238/559/224 +f 238/560/223 255/561/223 236/562/223 +f 236/563/227 256/564/227 252/565/227 +f 256/566/223 253/556/223 240/519/223 +f 254/567/223 242/524/223 255/561/223 +f 255/568/227 239/526/227 256/564/227 +f 251/569/223 248/544/223 244/528/223 +f 248/570/224 245/530/224 249/546/224 +f 249/571/223 246/532/223 250/549/223 +f 240/572/226 246/573/226 243/574/226 +f 246/533/227 251/552/227 250/575/227 +f 240/519/227 254/576/227 241/519/227 +f 254/576/223 250/577/223 246/578/223 +f 250/579/225 254/580/225 253/581/225 +f 257/582/228 258/583/228 259/584/228 +f 260/585/224 261/586/224 258/587/224 +f 262/588/223 263/589/223 261/590/223 +f 264/587/227 259/589/227 263/591/227 +f 259/592/225 261/593/225 263/594/225 +f 265/595/223 266/596/223 267/597/223 +f 268/598/227 269/599/227 266/600/227 +f 270/601/228 271/602/228 269/603/228 +f 272/604/224 267/605/224 271/606/224 +f 267/607/225 269/608/225 271/609/225 +f 272/610/226 270/611/226 265/612/226 +f 273/613/223 274/603/223 275/614/223 +f 276/615/227 277/616/227 274/617/227 +f 277/618/228 278/619/228 279/620/228 +f 280/621/224 275/622/224 278/623/224 +f 275/624/225 274/625/225 278/626/225 +f 280/627/226 276/628/226 273/629/226 +f 281/630/223 282/631/223 283/632/223 +f 284/633/227 285/634/227 282/635/227 +f 286/636/228 287/637/228 288/638/228 +f 289/639/224 290/634/224 287/640/224 +f 283/641/225 291/642/225 292/643/225 +f 293/644/226 285/645/226 281/646/226 +f 294/647/223 295/648/223 296/649/223 +f 295/650/229 297/651/229 298/652/229 +f 297/653/228 299/654/228 300/655/228 +f 301/656/230 296/657/230 299/658/230 +f 296/659/231 300/660/231 299/661/231 +f 301/662/232 295/663/232 294/664/232 +f 302/665/223 303/666/223 304/667/223 +f 303/668/233 305/669/233 306/670/233 +f 305/671/228 307/672/228 308/673/228 +f 309/674/234 304/675/234 307/676/234 +f 304/677/235 306/678/235 307/679/235 +f 309/680/236 303/681/236 302/682/236 +f 310/683/223 311/684/223 312/685/223 +f 313/686/227 314/687/227 311/688/227 +f 314/689/228 315/690/228 316/691/228 +f 317/692/224 312/693/224 315/694/224 +f 312/695/225 316/696/225 315/697/225 +f 317/698/226 314/695/226 310/699/226 +f 318/700/223 319/701/223 320/702/223 +f 319/703/224 321/704/224 322/705/224 +f 322/706/223 323/707/223 324/708/223 +f 325/709/225 318/710/225 324/711/225 +f 326/712/225 320/657/225 321/713/225 +f 327/714/225 328/594/225 329/715/225 +f 330/716/223 331/717/223 332/718/223 +f 331/717/223 318/700/223 326/719/223 +f 325/720/223 333/721/223 334/722/223 +f 334/723/224 330/724/224 335/725/224 +f 335/726/225 332/727/225 336/728/225 +f 337/729/225 338/730/225 339/731/225 +f 340/732/223 341/733/223 331/717/223 +f 341/734/224 331/735/224 342/736/224 +f 342/737/223 334/722/223 343/738/223 +f 343/739/227 330/724/227 340/740/227 +f 344/741/223 345/742/223 319/701/223 +f 345/743/224 322/705/224 346/744/224 +f 346/745/223 324/708/223 347/746/223 +f 347/747/227 318/748/227 344/749/227 +f 332/727/225 326/712/225 323/750/225 +f 324/708/223 323/707/223 325/720/223 +f 318/748/227 323/704/227 326/751/227 +f 325/752/224 332/753/224 336/754/224 +f 348/755/223 328/548/223 349/756/223 +f 328/757/224 350/758/224 329/759/224 +f 329/760/223 351/761/223 327/762/223 +f 327/763/227 352/764/227 348/765/227 +f 353/766/223 338/767/223 354/768/223 +f 338/769/224 355/770/224 339/771/224 +f 339/772/223 356/773/223 337/774/223 +f 337/775/227 357/776/227 353/777/227 +f 357/778/223 354/768/223 341/733/223 +f 355/779/223 343/738/223 356/773/223 +f 356/780/227 340/740/227 357/776/227 +f 352/781/223 349/756/223 345/742/223 +f 349/782/224 346/744/224 350/758/224 +f 350/783/223 347/746/223 351/761/223 +f 341/784/226 347/785/226 344/493/226 +f 347/747/227 352/764/227 351/786/227 +f 341/733/227 355/768/227 342/733/227 +f 355/768/228 347/741/228 351/787/228 +f 351/788/225 355/789/225 354/790/225 +f 358/791/223 359/792/223 290/793/223 +f 293/794/237 288/638/237 292/795/237 +f 290/796/225 288/797/225 287/798/225 +f 289/799/226 286/800/226 358/801/226 +f 360/802/238 283/632/238 359/792/238 +f 359/803/225 292/643/225 288/797/225 +f 286/800/226 293/644/226 360/804/226 +f 285/805/228 292/795/228 291/631/228 +f 225/505/223 217/484/223 219/486/223 +f 219/806/224 220/488/224 218/487/224 +f 220/807/223 222/491/223 221/490/223 +f 230/808/225 217/494/225 224/493/225 +f 222/536/226 220/497/226 225/496/226 +f 247/809/225 227/500/225 226/499/225 +f 234/810/223 229/502/223 231/504/223 +f 231/504/223 230/503/223 225/505/223 +f 235/811/223 232/507/223 224/506/223 +f 232/812/227 234/510/227 233/509/227 +f 232/710/226 235/513/226 234/512/226 +f 252/813/225 237/516/225 236/515/225 +f 229/502/223 239/518/223 230/503/223 +f 241/522/224 230/521/224 224/539/224 +f 224/506/223 233/508/223 241/523/223 +f 233/509/227 229/511/227 242/525/227 +f 217/484/223 243/527/223 218/485/223 +f 218/487/224 221/489/224 244/529/224 +f 221/490/223 223/492/223 245/531/223 +f 223/814/227 217/534/227 246/533/227 +f 235/513/226 222/536/226 231/514/226 +f 223/814/227 222/537/227 217/534/227 +f 230/521/224 231/540/224 224/539/224 +f 251/569/223 247/542/223 248/544/223 +f 248/570/224 249/546/224 227/545/224 +f 249/571/223 250/549/223 228/548/223 +f 250/575/224 226/551/224 251/552/224 +f 256/566/223 252/554/223 253/556/223 +f 253/815/224 254/558/224 237/557/224 +f 254/567/223 255/561/223 238/560/223 +f 255/568/227 256/564/227 236/563/227 +f 239/518/223 256/566/223 240/519/223 +f 241/523/223 242/524/223 254/567/223 +f 242/525/227 239/526/227 255/568/227 +f 243/527/223 251/569/223 244/528/223 +f 244/529/224 245/530/224 248/570/224 +f 245/531/223 246/532/223 249/571/223 +f 241/816/225 240/572/225 246/573/225 +f 243/535/227 251/552/227 246/533/227 +f 240/519/227 253/556/227 254/576/227 +f 243/527/223 240/519/223 253/556/223 +f 251/569/223 243/527/223 253/556/223 +f 241/519/223 254/576/223 246/578/223 +f 251/817/225 250/579/225 253/581/225 +f 260/818/228 258/583/228 257/582/228 +f 262/819/224 261/586/224 260/585/224 +f 264/820/223 263/589/223 262/588/223 +f 257/821/227 259/589/227 264/587/227 +f 258/822/225 261/593/225 259/592/225 +f 268/823/223 266/596/223 265/595/223 +f 270/824/227 269/599/227 268/598/227 +f 272/825/228 271/602/228 270/601/228 +f 265/826/224 267/605/224 272/604/224 +f 266/827/225 269/608/225 267/607/225 +f 360/804/226 293/644/226 281/646/226 +f 276/828/223 274/603/223 273/613/223 +f 280/829/228 278/619/228 277/618/228 +f 273/830/224 275/622/224 280/621/224 +f 277/831/226 276/628/226 280/627/226 +f 284/832/223 282/631/223 281/630/223 +f 289/833/228 287/637/228 286/636/228 +f 358/834/224 290/634/224 289/639/224 +f 282/799/225 291/642/225 283/641/225 +f 296/649/223 295/648/223 298/835/223 +f 301/836/228 299/654/228 297/653/228 +f 294/837/239 296/657/239 301/656/239 +f 298/838/231 300/660/231 296/659/231 +f 297/659/232 295/663/232 301/662/232 +f 304/667/223 303/666/223 306/839/223 +f 309/840/228 307/672/228 305/671/228 +f 302/774/234 304/675/234 309/674/234 +f 305/841/236 303/681/236 309/680/236 +f 313/842/223 311/684/223 310/683/223 +f 274/617/227 277/616/227 279/843/227 +f 317/844/228 315/690/228 314/689/228 +f 310/845/224 312/693/224 317/692/224 +f 311/846/225 316/696/225 312/695/225 +f 306/670/233 305/669/233 308/847/233 +f 281/646/226 285/645/226 284/848/226 +f 298/652/229 297/651/229 300/849/229 +f 282/635/227 285/634/227 291/850/227 +f 310/699/226 314/695/226 313/851/226 +f 311/688/227 314/687/227 316/698/227 +f 224/506/223 222/491/223 235/811/223 +f 325/720/223 323/707/223 336/852/223 +f 278/626/225 274/625/225 279/853/225 +f 307/679/235 306/678/235 308/854/235 +f 265/612/226 270/611/226 268/855/226 +f 326/719/223 318/700/223 320/702/223 +f 320/751/224 321/704/224 319/703/224 +f 321/856/223 323/707/223 322/706/223 +f 331/857/225 318/710/225 325/709/225 +f 323/750/225 326/712/225 321/713/225 +f 348/858/225 328/594/225 327/714/225 +f 335/859/223 330/716/223 332/718/223 +f 332/718/223 331/717/223 326/719/223 +f 336/852/223 333/721/223 325/720/223 +f 333/860/224 334/723/224 335/725/224 +f 333/861/225 335/726/225 336/728/225 +f 353/862/225 338/730/225 337/729/225 +f 330/716/223 340/732/223 331/717/223 +f 342/736/224 331/735/224 325/752/224 +f 325/720/223 334/722/223 342/737/223 +f 334/723/224 343/739/224 330/724/224 +f 318/700/223 344/741/223 319/701/223 +f 319/703/224 322/705/224 345/743/224 +f 322/706/223 324/708/223 346/745/223 +f 324/863/224 347/747/224 318/748/224 +f 336/728/225 332/727/225 323/750/225 +f 324/863/227 323/704/227 318/748/227 +f 331/735/224 332/753/224 325/752/224 +f 352/781/223 348/755/223 349/756/223 +f 349/782/224 350/758/224 328/757/224 +f 350/783/223 351/761/223 329/760/223 +f 351/786/227 352/764/227 327/763/227 +f 357/778/223 353/766/223 354/768/223 +f 354/864/224 355/770/224 338/769/224 +f 355/779/223 356/773/223 339/772/223 +f 356/780/227 357/776/227 337/775/227 +f 340/732/223 357/778/223 341/733/223 +f 342/737/223 343/738/223 355/779/223 +f 343/739/227 340/740/227 356/780/227 +f 344/741/223 352/781/223 345/742/223 +f 345/743/224 346/744/224 349/782/224 +f 346/745/223 347/746/223 350/783/223 +f 342/865/226 347/785/226 341/784/226 +f 344/749/227 352/764/227 347/747/227 +f 341/733/227 354/768/227 355/768/227 +f 344/741/223 341/733/223 354/768/223 +f 352/781/223 344/741/223 354/768/223 +f 342/733/228 347/741/228 355/768/228 +f 352/866/225 351/788/225 354/790/225 +f 360/802/223 359/792/223 358/791/223 +f 286/636/237 288/638/237 293/794/237 +f 359/803/225 288/797/225 290/796/225 +f 281/630/238 283/632/238 360/802/238 +f 283/641/225 292/643/225 359/803/225 +f 293/794/228 292/795/228 285/805/228 +f 358/801/226 286/800/226 360/804/226 +o RadarDish_Dish +v -1.246696 4.173165 -2.423878 +v -1.157184 4.251359 -2.380311 +v -1.246696 4.251359 -2.380311 +v -1.191366 4.210987 -2.417151 +v -1.443555 3.753523 -2.672033 +v -1.191366 3.703241 -2.700048 +v -1.645795 3.894413 -2.593534 +v -1.758030 4.098003 -2.480101 +v -1.758030 4.323971 -2.354200 +v -1.645795 4.527562 -2.240767 +v -1.443555 4.668450 -2.162269 +v -1.191366 4.718733 -2.134254 +v -0.939176 4.668450 -2.162269 +v -0.736936 4.527562 -2.240767 +v -0.624701 4.323971 -2.354200 +v -0.624701 4.098003 -2.480101 +v -0.736936 3.894413 -2.593534 +v -0.939176 3.753523 -2.672033 +v -1.898060 3.771116 -2.785571 +v -2.297845 4.133267 -2.796538 +v -2.078693 3.735733 -3.018029 +v -1.898060 4.755742 -2.236974 +v -1.683796 5.247134 -2.175934 +v -2.078693 4.972032 -2.329211 +v -0.799180 4.974841 -2.114900 +v -0.484671 4.755742 -2.236974 +v -0.698936 5.247134 -2.175934 +v -0.310132 4.087723 -2.609169 +v -0.304038 3.735733 -3.018029 +v -0.084886 4.133267 -2.796538 +v -1.583552 3.552016 -2.907645 +v -1.683795 3.460631 -3.171306 +v -2.072599 4.439132 -2.413377 +v -2.297845 4.574497 -2.550702 +v -1.191366 5.053037 -2.071332 +v -1.191366 5.345316 -2.121230 +v -0.310132 4.439132 -2.413377 +v -0.084886 4.574497 -2.550702 +v -0.799180 3.552016 -2.907645 +v -1.191366 3.362448 -3.226010 +v -0.698936 3.460630 -3.171306 +v -2.072599 4.087724 -2.609169 +v -1.583552 4.974841 -2.114900 +v -0.304038 4.972032 -2.329211 +v -0.484671 3.771116 -2.785571 +v -1.191366 3.473820 -2.951213 +v -0.304038 3.735733 -3.018029 +v -1.191366 3.362448 -3.226010 +v -2.078693 3.735733 -3.018029 +v -2.078693 4.972032 -2.329211 +v -0.698936 5.247134 -2.175934 +v -0.084886 4.133267 -2.796538 +v -1.683795 3.460631 -3.171306 +v -2.297845 4.574497 -2.550702 +v -1.191366 5.345316 -2.121230 +v -0.084886 4.574497 -2.550702 +v -0.698936 3.460630 -3.171306 +v -2.297845 4.133267 -2.796538 +v -1.683796 5.247134 -2.175934 +v -0.304038 4.972032 -2.329211 +v -1.763018 3.447550 -3.485822 +v -2.475856 4.740615 -2.765374 +v -0.619714 5.521466 -2.330313 +v -1.191366 5.635444 -2.266809 +v 0.093125 4.228400 -3.050761 +v 0.093125 4.740615 -2.765374 +v -1.191366 3.333571 -3.549327 +v -0.619714 3.447550 -3.485822 +v -2.475856 4.228400 -3.050761 +v -1.763018 5.521466 -2.330313 +v -0.161284 5.202106 -2.508250 +v -0.161284 3.766910 -3.307887 +v -2.221447 3.766911 -3.307886 +v -2.221447 5.202106 -2.508250 +v -1.191366 4.228222 -2.448086 +v -0.939176 3.770759 -2.702968 +v -1.191366 3.720477 -2.730983 +v -0.736936 3.911649 -2.624469 +v -0.624701 4.115239 -2.511036 +v -0.624701 4.341207 -2.385135 +v -0.736936 4.544797 -2.271702 +v -0.939176 4.685686 -2.193204 +v -1.191366 4.735969 -2.165188 +v -1.443555 4.685686 -2.193204 +v -1.645795 4.544797 -2.271702 +v -1.758030 4.341207 -2.385135 +v -1.758030 4.115239 -2.511036 +v -1.645795 3.911649 -2.624469 +v -1.443555 3.770759 -2.702968 +v -0.484671 3.788351 -2.816506 +v -0.084886 4.150504 -2.827473 +v -0.304038 3.752969 -3.048965 +v -0.484671 4.772977 -2.267910 +v -0.698936 5.264369 -2.206869 +v -0.304038 4.989267 -2.360146 +v -1.583552 4.992077 -2.145836 +v -2.078693 4.989267 -2.360145 +v -1.683795 5.264369 -2.206869 +v -2.072599 4.104959 -2.640103 +v -2.078693 3.752969 -3.048965 +v -2.297845 4.150504 -2.827473 +v -0.799180 3.569252 -2.938580 +v -0.698936 3.477866 -3.202242 +v -0.310132 4.456368 -2.444311 +v -0.084886 4.591733 -2.581637 +v -1.191366 5.070273 -2.102268 +v -1.191366 5.362552 -2.152165 +v -2.072599 4.456368 -2.444311 +v -2.297845 4.591733 -2.581637 +v -1.583551 3.569252 -2.938580 +v -1.191366 3.491056 -2.982147 +v -1.683795 3.477866 -3.202242 +v -0.310132 4.104960 -2.640103 +v -0.799180 4.992077 -2.145836 +v -1.898060 4.772978 -2.267910 +v -1.898060 3.788351 -2.816506 +v -1.191366 3.379684 -3.256945 +v -2.078693 3.752969 -3.048965 +v -1.191366 3.379684 -3.256945 +v -0.304038 3.752969 -3.048965 +v -0.304038 4.989267 -2.360146 +v -1.683795 5.264369 -2.206869 +v -2.297845 4.150504 -2.827473 +v -0.698936 3.477866 -3.202242 +v -0.084886 4.591733 -2.581637 +v -1.191366 5.362552 -2.152165 +v -2.297845 4.591733 -2.581637 +v -1.683795 3.477866 -3.202242 +v -0.084886 4.150504 -2.827473 +v -0.698936 5.264369 -2.206869 +v -2.078693 4.989267 -2.360145 +v -0.619714 3.464786 -3.516757 +v 0.093125 4.757851 -2.796309 +v -1.191366 5.652680 -2.297744 +v -2.475856 4.245636 -3.081696 +v -2.475856 4.757851 -2.796309 +v -1.191366 3.350807 -3.580261 +v -1.763017 3.464786 -3.516757 +v 0.093125 4.245636 -3.081696 +v -0.619714 5.538702 -2.361248 +v -2.221447 5.219341 -2.539184 +v -2.221447 3.784146 -3.338822 +v -0.161284 3.784147 -3.338821 +v -0.161284 5.219341 -2.539184 +v -1.763018 5.538702 -2.361248 +v -1.157184 4.173165 -2.423878 +vt 0.775111 0.244736 +vt 0.783916 0.253595 +vt 0.783943 0.244763 +vt 0.666182 0.335891 +vt 0.610276 0.323104 +vt 0.610265 0.348628 +vt 0.621360 0.300113 +vt 0.641321 0.284208 +vt 0.666207 0.278540 +vt 0.691087 0.284230 +vt 0.711035 0.300152 +vt 0.722099 0.323153 +vt 0.722089 0.348677 +vt 0.711005 0.371668 +vt 0.691044 0.387573 +vt 0.666158 0.393242 +vt 0.641278 0.387552 +vt 0.621330 0.371629 +vt 0.596374 0.280276 +vt 0.617355 0.235039 +vt 0.578378 0.266095 +vt 0.704809 0.255576 +vt 0.753480 0.266172 +vt 0.714529 0.235081 +vt 0.753020 0.355799 +vt 0.735783 0.391553 +vt 0.775063 0.360922 +vt 0.666041 0.425103 +vt 0.617270 0.436829 +vt 0.665852 0.447940 +vt 0.579137 0.316030 +vt 0.556736 0.310988 +vt 0.666116 0.246726 +vt 0.665947 0.223970 +vt 0.753036 0.316106 +vt 0.775084 0.311084 +vt 0.635772 0.848613 +vt 0.658354 0.893368 +vt 0.658505 0.843530 +vt 0.596327 0.391492 +vt 0.556715 0.360826 +vt 0.578319 0.405738 +vt 0.882742 0.409379 +vt 0.859827 0.364684 +vt 0.859980 0.414522 +vt 0.735830 0.280337 +vt 0.704741 0.416287 +vt 0.753421 0.405815 +vt 0.627348 0.416253 +vt 0.579121 0.355723 +vt 0.627416 0.255542 +vt 0.000000 0.000000 +vt 0.901619 0.073843 +vt 0.901617 0.034877 +vt 0.869343 0.065927 +vt 0.829113 0.790341 +vt 0.829335 0.745437 +vt 0.796449 0.786432 +vt 0.863999 0.122219 +vt 0.831441 0.065914 +vt 0.831559 0.122319 +vt 0.557300 0.790322 +vt 0.589743 0.844205 +vt 0.589917 0.786350 +vt 0.901321 0.171019 +vt 0.869221 0.122332 +vt 0.868997 0.178737 +vt 0.829266 0.840179 +vt 0.796626 0.844288 +vt 0.864195 0.170808 +vt 0.831787 0.178724 +vt 0.557136 0.745496 +vt 0.589727 0.734313 +vt 0.901080 0.209984 +vt 0.868717 0.223970 +vt 0.901514 0.122431 +vt 0.829763 0.885080 +vt 0.797203 0.896413 +vt 0.864446 0.209772 +vt 0.832078 0.223957 +vt 0.863897 0.073631 +vt 0.863909 0.034666 +vt 0.557150 0.840159 +vt 0.589237 0.896420 +vt 0.666157 0.112044 +vt 0.621304 0.076305 +vt 0.610239 0.099305 +vt 0.641252 0.060382 +vt 0.666133 0.054692 +vt 0.691019 0.060362 +vt 0.710980 0.076267 +vt 0.722063 0.099258 +vt 0.722074 0.124782 +vt 0.711009 0.147783 +vt 0.691061 0.163705 +vt 0.666180 0.169395 +vt 0.641294 0.163726 +vt 0.621333 0.147820 +vt 0.610250 0.124829 +vt 0.627333 0.031683 +vt 0.665854 0.000000 +vt 0.617271 0.011110 +vt 0.735768 0.056385 +vt 0.775064 0.087020 +vt 0.753422 0.042127 +vt 0.735813 0.167601 +vt 0.714528 0.212860 +vt 0.753479 0.181770 +vt 0.627399 0.192394 +vt 0.578377 0.181843 +vt 0.617353 0.212901 +vt 0.596311 0.056443 +vt 0.578320 0.042200 +vt 0.704726 0.031650 +vt 0.714446 0.011070 +vt 0.753020 0.131832 +vt 0.775084 0.136858 +vt 0.666099 0.201210 +vt 0.579120 0.131905 +vt 0.579104 0.092212 +vt 0.556735 0.136950 +vt 0.666026 0.022834 +vt 0.753004 0.092139 +vt 0.704791 0.192362 +vt 0.596356 0.167659 +vt 0.556715 0.087112 +vt 0.035410 0.745874 +vt 0.035159 0.706910 +vt 0.003091 0.738157 +vt 0.859827 0.414522 +vt 0.859330 0.369621 +vt 0.827747 0.410611 +vt 0.277928 0.794659 +vt 0.278121 0.746071 +vt 0.245493 0.794559 +vt 0.969850 0.302225 +vt 0.937564 0.248414 +vt 0.937744 0.306269 +vt 0.035708 0.843051 +vt 0.003318 0.794562 +vt 0.003437 0.850967 +vt 0.561420 0.840172 +vt 0.594187 0.786363 +vt 0.594013 0.844218 +vt 0.277822 0.843247 +vt 0.245371 0.850965 +vt 0.969691 0.347206 +vt 0.937559 0.358486 +vt 0.035697 0.882016 +vt 0.003423 0.896201 +vt 0.035606 0.794463 +vt 0.560985 0.885151 +vt 0.593507 0.896433 +vt 0.277825 0.882213 +vt 0.245374 0.896199 +vt 0.278362 0.707106 +vt 0.245717 0.738154 +vt 0.969694 0.252387 +vt 0.969255 0.207564 +vt 0.864950 0.122319 +vt 0.864727 0.178724 +vt 0.864446 0.223957 +vt 0.593997 0.734326 +vt 0.827184 0.020693 +vt 0.827170 0.065927 +vt 0.831454 0.020680 +vt 0.827289 0.122332 +vt 0.827516 0.178737 +vt 0.827808 0.223970 +vt 0.792436 0.734318 +vt 0.796706 0.734304 +vt 0.792179 0.786445 +vt 0.792356 0.844301 +vt 0.865070 0.020680 +vt 0.869340 0.020693 +vt 0.865073 0.065914 +vt 0.775084 0.253568 +vt 0.245997 0.692921 +vt 0.635652 0.888305 +vt 0.882621 0.369687 +vt 0.937054 0.196379 +vt 0.714444 0.436872 +vt 0.827170 0.358486 +vt 0.556715 0.885138 +vt 0.002800 0.692924 +vt 0.561570 0.790335 +vt 0.792934 0.896426 +vn 0.000000 -0.486700 0.873600 +vn -0.573400 -0.616600 0.539400 +vn -0.396800 0.059200 0.916000 +vn 0.396800 0.059200 0.916000 +vn 0.573400 -0.616600 0.539400 +vn -0.396800 -0.810100 0.431600 +vn -0.573400 -0.134200 0.808200 +vn 0.141600 0.166600 0.975800 +vn 0.636400 -0.375400 0.673800 +vn 0.141600 -0.917400 0.371800 +vn -0.636400 -0.375400 0.673800 +vn -0.141600 0.166600 0.975800 +vn 0.573400 -0.134200 0.808200 +vn 0.396800 -0.810100 0.431600 +vn -0.141600 -0.917400 0.371800 +vn 0.072100 -0.184500 0.980200 +vn -0.291900 -0.337600 0.894900 +vn -0.202000 -0.681800 0.703100 +vn 0.291900 -0.583300 0.758000 +vn 0.202000 -0.239100 0.949700 +vn -0.202000 -0.239100 0.949700 +vn -0.291900 -0.583300 0.758000 +vn -0.072100 -0.736400 0.672700 +vn 0.202000 -0.681800 0.703100 +vn 0.291900 -0.337600 0.894900 +vn -0.072100 -0.184500 0.980200 +vn -0.324000 -0.460500 0.826400 +vn 0.072100 -0.736400 0.672700 +vn 0.324000 -0.460500 0.826400 +vn 0.000000 0.000000 1.000000 +vn -0.519600 -0.838200 0.165700 +vn -0.750800 0.046800 0.658800 +vn 0.185400 0.440700 0.878300 +vn 0.833400 -0.269000 0.482900 +vn 0.185400 -0.978800 0.087400 +vn -0.833400 -0.269000 0.482900 +vn -0.185400 0.440700 0.878300 +vn 0.750800 0.046800 0.658800 +vn 0.519600 -0.838200 0.165700 +vn -0.185400 -0.978800 0.087400 +vn -0.750800 -0.584900 0.306900 +vn -0.519600 0.300100 0.800000 +vn 0.519600 0.300100 0.800000 +vn 0.750800 -0.584900 0.306900 +vn 0.000000 0.486700 -0.873600 +vn -0.573400 0.616600 -0.539400 +vn -0.396800 -0.059200 -0.916000 +vn 0.396800 -0.059200 -0.916000 +vn 0.573400 0.616600 -0.539400 +vn -0.396800 0.810100 -0.431600 +vn -0.573400 0.134200 -0.808200 +vn 0.141600 -0.166600 -0.975800 +vn 0.636400 0.375400 -0.673800 +vn 0.141600 0.917400 -0.371800 +vn -0.636400 0.375400 -0.673800 +vn -0.141600 -0.166600 -0.975800 +vn 0.573400 0.134200 -0.808200 +vn 0.396800 0.810100 -0.431600 +vn -0.141600 0.917400 -0.371800 +vn 0.072100 0.184500 -0.980200 +vn -0.291900 0.337600 -0.894900 +vn -0.202000 0.681800 -0.703100 +vn 0.291900 0.583300 -0.758000 +vn 0.202000 0.239100 -0.949700 +vn -0.202000 0.239100 -0.949700 +vn -0.291900 0.583300 -0.758000 +vn -0.072100 0.736400 -0.672700 +vn 0.202000 0.681800 -0.703100 +vn 0.291900 0.337600 -0.894900 +vn -0.072100 0.184500 -0.980200 +vn -0.324000 0.460500 -0.826400 +vn 0.072100 0.736400 -0.672700 +vn 0.324000 0.460500 -0.826400 +vn -0.519600 0.838200 -0.165700 +vn -0.750800 -0.046800 -0.658800 +vn 0.185400 -0.440700 -0.878300 +vn 0.833400 0.269000 -0.482900 +vn 0.185400 0.978800 -0.087400 +vn -0.833400 0.269000 -0.482900 +vn -0.185400 -0.440700 -0.878300 +vn 0.750800 -0.046800 -0.658800 +vn 0.519600 0.838200 -0.165700 +vn -0.185400 0.978800 -0.087400 +vn -0.750800 0.584900 -0.306900 +vn -0.519600 -0.300100 -0.800000 +vn 0.519600 -0.300100 -0.800000 +vn 0.750800 0.584900 -0.306900 +vn 0.222500 -0.851700 -0.474500 +vn 0.623500 -0.683000 -0.380500 +vn 0.901000 -0.379000 -0.211200 +vn 1.000000 0.000000 0.000000 +vn 0.901000 0.379000 0.211200 +vn 0.623500 0.683000 0.380500 +vn 0.222500 0.851700 0.474500 +vn -0.222500 0.851700 0.474500 +vn -0.623500 0.683000 0.380500 +vn -0.901000 0.379000 0.211200 +vn -1.000000 0.000000 0.000000 +vn -0.901000 -0.379000 -0.211200 +vn -0.623500 -0.683000 -0.380500 +vn -0.222500 -0.851700 -0.474500 +vn 0.623500 -0.683000 -0.380600 +vn 0.222500 0.851600 0.474500 +usemtl None +f 361/867/240 362/868/240 363/869/240 +f 364/870/240 365/871/240 366/872/240 +f 364/870/240 367/873/240 365/871/240 +f 364/870/240 368/874/240 367/873/240 +f 364/870/240 369/875/240 368/874/240 +f 364/870/240 370/876/240 369/875/240 +f 364/870/240 371/877/240 370/876/240 +f 364/870/240 372/878/240 371/877/240 +f 364/870/240 373/879/240 372/878/240 +f 364/870/240 374/880/240 373/879/240 +f 364/870/240 375/881/240 374/880/240 +f 364/870/240 376/882/240 375/881/240 +f 364/870/240 377/883/240 376/882/240 +f 364/870/240 378/884/240 377/883/240 +f 364/870/240 366/872/240 378/884/240 +f 379/885/241 380/886/241 381/887/241 +f 382/888/242 383/889/242 384/890/242 +f 385/891/243 386/892/243 387/893/243 +f 388/894/244 389/895/244 390/896/244 +f 391/897/245 379/885/245 392/898/245 +f 393/899/246 382/888/246 394/900/246 +f 395/901/247 385/891/247 396/902/247 +f 397/903/248 390/904/248 398/905/248 +f 399/906/249 400/907/249 401/908/249 +f 402/909/250 394/910/250 380/911/250 +f 403/912/251 395/901/251 383/889/251 +f 386/892/252 397/913/252 404/914/252 +f 405/915/253 399/906/253 389/895/253 +f 406/916/254 391/897/254 400/907/254 +f 372/878/255 373/879/255 395/901/255 +f 369/875/256 370/876/256 393/899/256 +f 365/871/257 367/873/257 391/897/257 +f 376/882/258 405/915/258 388/894/258 +f 373/879/259 374/880/259 385/891/259 +f 370/876/260 371/877/260 382/888/260 +f 367/873/261 368/874/261 379/885/261 +f 366/872/262 365/871/262 406/916/262 +f 377/883/263 399/906/263 405/915/263 +f 374/880/264 397/913/264 386/892/264 +f 371/877/265 372/878/265 403/912/265 +f 368/874/266 393/899/266 402/917/266 +f 378/884/267 366/872/267 399/906/267 +f 375/881/268 376/882/268 397/913/268 +f 389/918/269 407/918/269 401/918/269 +f 400/918/269 408/918/269 392/918/269 +f 381/918/269 409/918/269 380/918/269 +f 384/918/269 410/918/269 383/918/269 +f 387/918/269 411/918/269 404/918/269 +f 390/918/269 412/918/269 389/918/269 +f 392/918/269 413/918/269 381/918/269 +f 394/918/269 414/918/269 384/918/269 +f 396/918/269 415/918/269 387/918/269 +f 398/918/269 416/918/269 390/918/269 +f 401/918/269 417/918/269 400/918/269 +f 380/918/269 418/918/269 394/918/269 +f 383/918/269 419/918/269 396/918/269 +f 404/918/269 420/918/269 398/918/269 +f 413/919/270 409/920/270 421/921/270 +f 414/922/271 410/923/271 422/924/271 +f 415/925/272 423/926/272 424/927/272 +f 416/928/273 425/929/273 426/930/273 +f 417/931/274 427/932/274 428/933/274 +f 418/934/275 414/922/275 429/935/275 +f 419/936/276 415/925/276 430/937/276 +f 420/938/277 426/930/277 431/939/277 +f 407/940/278 428/933/278 432/941/278 +f 408/942/279 413/919/279 427/932/279 +f 409/943/280 429/935/280 433/944/280 +f 410/945/281 430/937/281 434/946/281 +f 411/947/282 420/948/282 423/926/282 +f 412/949/283 432/950/283 425/929/283 +f 435/951/284 436/952/284 437/953/284 +f 435/951/284 438/954/284 436/952/284 +f 435/951/284 439/955/284 438/954/284 +f 435/951/284 440/956/284 439/955/284 +f 435/951/284 441/957/284 440/956/284 +f 435/951/284 442/958/284 441/957/284 +f 435/951/284 443/959/284 442/958/284 +f 435/951/284 444/960/284 443/959/284 +f 435/951/284 445/961/284 444/960/284 +f 435/951/284 446/962/284 445/961/284 +f 435/951/284 447/963/284 446/962/284 +f 435/951/284 448/964/284 447/963/284 +f 435/951/284 449/965/284 448/964/284 +f 435/951/284 437/953/284 449/965/284 +f 450/966/285 451/967/285 452/968/285 +f 453/969/286 454/970/286 455/971/286 +f 456/972/287 457/973/287 458/974/287 +f 459/975/288 460/976/288 461/977/288 +f 462/978/289 452/968/289 463/979/289 +f 464/980/290 455/971/290 465/981/290 +f 466/982/291 458/974/291 467/983/291 +f 468/984/292 461/977/292 469/900/292 +f 470/985/293 471/986/293 472/987/293 +f 473/988/294 465/981/294 451/967/294 +f 474/989/295 466/982/295 454/970/295 +f 475/990/296 469/900/296 457/973/296 +f 476/991/297 472/987/297 460/976/297 +f 471/986/298 462/978/298 477/992/298 +f 443/959/299 444/960/299 466/982/299 +f 440/956/300 453/969/300 464/980/300 +f 436/952/301 438/954/301 462/978/301 +f 447/963/302 476/991/302 459/975/302 +f 444/960/303 445/961/303 456/972/303 +f 441/957/304 474/989/304 453/969/304 +f 438/954/305 439/955/305 450/966/305 +f 437/953/306 462/978/306 471/986/306 +f 448/964/307 470/985/307 476/991/307 +f 445/961/308 468/984/308 475/990/308 +f 442/958/309 443/959/309 474/989/309 +f 439/955/310 440/956/310 473/988/310 +f 449/965/311 471/986/311 470/985/311 +f 446/962/312 447/963/312 468/984/312 +f 460/918/269 472/918/269 478/918/269 +f 477/918/269 463/918/269 479/918/269 +f 452/918/269 451/918/269 480/918/269 +f 455/918/269 454/918/269 481/918/269 +f 458/918/269 457/918/269 482/918/269 +f 461/918/269 460/918/269 483/918/269 +f 463/918/269 452/918/269 484/918/269 +f 465/918/269 455/918/269 485/918/269 +f 467/918/269 458/918/269 486/918/269 +f 469/918/269 461/918/269 487/918/269 +f 472/918/269 477/918/269 488/918/269 +f 451/918/269 465/918/269 489/918/269 +f 454/918/269 467/918/269 490/918/269 +f 457/918/269 469/918/269 491/918/269 +f 484/993/313 480/994/313 492/995/313 +f 485/996/314 481/997/314 493/998/314 +f 486/999/315 482/1000/315 494/1001/315 +f 487/1002/316 495/1003/316 496/1004/316 +f 488/1005/317 497/1006/317 498/1007/317 +f 489/1008/318 493/1009/318 499/1010/318 +f 490/1011/319 494/1001/319 500/1012/319 +f 491/1013/320 487/1002/320 501/1014/320 +f 478/1015/321 498/1007/321 502/1016/321 +f 479/1017/322 484/993/322 497/1006/322 +f 480/1018/323 499/1010/323 503/1019/323 +f 481/1020/324 490/1011/324 504/1021/324 +f 482/1000/325 491/1022/325 505/1023/325 +f 483/1024/326 478/1025/326 495/1003/326 +f 497/1026/327 428/933/327 427/932/327 +f 492/1027/328 503/1028/328 428/933/328 +f 503/1019/329 425/929/329 432/950/329 +f 499/1010/330 493/1009/330 425/929/330 +f 493/1009/331 504/1029/331 426/930/331 +f 504/1030/332 500/1031/332 431/1032/332 +f 500/1031/333 494/1033/333 423/926/333 +f 494/1033/334 505/1034/334 424/927/334 +f 505/1034/335 501/1035/335 430/937/335 +f 501/1036/336 422/924/336 434/1037/336 +f 496/1038/337 429/935/337 422/924/337 +f 495/1039/338 433/944/338 429/935/338 +f 502/1040/339 421/921/339 433/1041/339 +f 498/1042/340 427/932/340 421/921/340 +f 395/901/255 373/879/255 385/891/255 +f 506/1043/240 362/868/240 361/867/240 +f 494/1001/315 482/1000/315 505/1023/315 +f 504/1021/324 490/1011/324 500/1012/324 +f 396/902/247 385/891/247 387/893/247 +f 406/916/262 365/871/262 391/897/262 +f 394/900/246 382/888/246 384/890/246 +f 501/1014/320 487/1002/320 496/1004/320 +f 505/1023/325 491/1022/325 501/1044/325 +f 402/917/241 380/886/241 379/885/241 +f 403/912/242 383/889/242 382/888/242 +f 405/915/244 389/895/244 388/894/244 +f 385/891/259 374/880/259 386/892/259 +f 429/935/275 414/922/275 422/924/275 +f 388/1045/248 390/904/248 397/903/248 +f 406/916/249 400/907/249 399/906/249 +f 393/1046/250 394/910/250 402/909/250 +f 466/982/299 444/960/299 456/972/299 +f 473/988/310 440/956/310 464/980/310 +f 400/907/254 391/897/254 392/898/254 +f 430/937/335 501/1035/335 434/946/335 +f 382/888/260 371/877/260 403/912/260 +f 393/899/256 370/876/256 382/888/256 +f 377/883/258 405/915/258 376/882/258 +f 403/912/265 372/878/265 395/901/265 +f 428/933/341 503/1028/341 432/941/341 +f 495/1003/326 478/1025/326 502/1047/326 +f 378/884/263 399/906/263 377/883/263 +f 375/881/264 397/913/264 374/880/264 +f 389/895/253 399/906/253 401/908/253 +f 369/875/266 393/899/266 368/874/266 +f 468/984/312 447/963/312 459/975/312 +f 401/918/269 407/918/269 417/918/269 +f 392/918/269 408/918/269 413/918/269 +f 380/918/269 409/918/269 418/918/269 +f 383/918/269 410/918/269 419/918/269 +f 404/918/269 411/918/269 420/918/269 +f 389/918/269 412/918/269 407/918/269 +f 381/918/269 413/918/269 409/918/269 +f 384/918/269 414/918/269 410/918/269 +f 387/918/269 415/918/269 411/918/269 +f 390/918/269 416/918/269 412/918/269 +f 400/918/269 417/918/269 408/918/269 +f 394/918/269 418/918/269 414/918/269 +f 396/918/269 419/918/269 415/918/269 +f 398/918/269 420/918/269 416/918/269 +f 421/921/270 409/920/270 433/1041/270 +f 404/914/252 397/913/252 398/1048/252 +f 411/947/272 423/926/272 415/925/272 +f 412/949/273 425/929/273 416/928/273 +f 408/942/274 427/932/274 417/931/274 +f 493/998/314 481/997/314 504/1049/314 +f 454/970/295 466/982/295 467/983/295 +f 416/928/277 426/930/277 420/938/277 +f 417/931/278 428/933/278 407/940/278 +f 427/932/279 413/919/279 421/921/279 +f 418/934/280 429/935/280 409/943/280 +f 419/936/281 430/937/281 410/945/281 +f 423/926/282 420/948/282 431/1032/282 +f 407/1050/283 432/950/283 412/949/283 +f 473/988/285 451/967/285 450/966/285 +f 474/989/286 454/970/286 453/969/286 +f 475/990/287 457/973/287 456/972/287 +f 476/991/288 460/976/288 459/975/288 +f 450/966/289 452/968/289 462/978/289 +f 453/969/290 455/971/290 464/980/290 +f 456/972/291 458/974/291 466/982/291 +f 459/975/292 461/977/292 468/984/292 +f 464/980/294 465/981/294 473/988/294 +f 383/889/251 395/901/251 396/902/251 +f 468/984/296 469/900/296 475/990/296 +f 470/985/297 472/987/297 476/991/297 +f 477/992/298 462/978/298 463/979/298 +f 474/989/309 443/959/309 466/982/309 +f 441/957/300 453/969/300 440/956/300 +f 448/964/302 476/991/302 447/963/302 +f 456/972/303 445/961/303 475/990/303 +f 442/958/304 474/989/304 441/957/304 +f 391/897/257 367/873/257 379/885/257 +f 436/952/306 462/978/306 437/953/306 +f 449/965/307 470/985/307 448/964/307 +f 446/962/308 468/984/308 445/961/308 +f 450/966/305 439/955/305 473/988/305 +f 462/978/301 438/954/301 450/966/301 +f 437/953/311 471/986/311 449/965/311 +f 379/885/261 368/874/261 402/917/261 +f 478/918/269 472/918/269 488/918/269 +f 479/918/269 463/918/269 484/918/269 +f 480/918/269 451/918/269 489/918/269 +f 481/918/269 454/918/269 490/918/269 +f 482/918/269 457/918/269 491/918/269 +f 483/918/269 460/918/269 478/918/269 +f 484/918/269 452/918/269 480/918/269 +f 485/918/269 455/918/269 481/918/269 +f 486/918/269 458/918/269 482/918/269 +f 487/918/269 461/918/269 483/918/269 +f 488/918/269 477/918/269 479/918/269 +f 489/918/269 465/918/269 485/918/269 +f 490/918/269 467/918/269 486/918/269 +f 491/918/269 469/918/269 487/918/269 +f 492/995/313 480/994/313 503/1051/313 +f 483/1024/316 495/1003/316 487/1002/316 +f 479/1017/317 497/1006/317 488/1005/317 +f 485/1052/318 493/1009/318 489/1008/318 +f 486/999/319 494/1001/319 490/1011/319 +f 392/898/245 379/885/245 381/887/245 +f 488/1005/321 498/1007/321 478/1015/321 +f 497/1006/322 484/993/322 492/995/322 +f 489/1008/323 499/1010/323 480/1018/323 +f 430/937/276 415/925/276 424/927/276 +f 492/1027/327 428/933/327 497/1026/327 +f 399/906/267 366/872/267 406/916/267 +f 499/1010/329 425/929/329 503/1019/329 +f 397/913/268 376/882/268 388/894/268 +f 426/930/331 504/1029/331 431/939/331 +f 431/1032/332 500/1031/332 423/926/332 +f 423/926/342 494/1033/342 424/927/342 +f 424/927/334 505/1034/334 430/937/334 +f 422/924/271 410/923/271 434/1037/271 +f 496/1038/336 422/924/336 501/1036/336 +f 495/1039/337 429/935/337 496/1038/337 +f 502/1053/338 433/944/338 495/1039/338 +f 498/1042/339 421/921/339 502/1040/339 +f 497/1026/340 427/932/340 498/1042/340 +f 425/929/330 493/1009/330 426/930/330 +f 472/987/293 471/986/293 477/992/293 +f 387/893/243 386/892/243 404/914/243 +o CargoLeft +v -1.902109 3.364694 3.769022 +v -1.902109 3.364695 2.453471 +v -1.902109 1.054079 2.453471 +v -0.697891 3.364695 2.453471 +v -0.697891 1.054079 2.453471 +v -0.697891 3.364694 3.769022 +v -0.697891 1.054078 3.769021 +v -1.902109 1.054078 3.769021 +vt 0.665272 0.333718 +vt 0.335739 0.334728 +vt 0.334728 0.005195 +vt 0.005196 0.334728 +vt 0.004185 0.005196 +vt 0.333718 0.004185 +vt 0.334728 0.664261 +vt 0.005195 0.665272 +vt 0.004185 0.335739 +vt 0.335739 0.665272 +vt 0.334728 0.335739 +vt 0.664261 0.334728 +vt 0.995815 0.333718 +vt 0.666282 0.334728 +vt 0.665272 0.005195 +vt 0.334728 0.666282 +vt 0.664261 0.665272 +vt 0.665272 0.994804 +vt 0.664261 0.004185 +vt 0.334728 0.333718 +vt 0.333718 0.334728 +vt 0.665272 0.664261 +vt 0.994804 0.004185 +vt 0.335739 0.995815 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 507/1054/343 508/1055/343 509/1056/343 +f 508/1057/344 510/1058/344 511/1059/344 +f 510/1060/345 512/1061/345 513/1062/345 +f 512/1063/346 507/1064/346 514/1065/346 +f 514/1066/347 509/1067/347 511/1068/347 +f 512/1069/348 510/1070/348 508/1071/348 +f 514/1072/343 507/1054/343 509/1056/343 +f 509/1073/344 508/1057/344 511/1059/344 +f 511/1074/345 510/1060/345 513/1062/345 +f 513/1075/346 512/1063/346 514/1065/346 +f 513/1076/347 514/1066/347 511/1068/347 +f 507/1077/348 512/1069/348 508/1071/348 +o CargoRight +v 0.697891 3.364694 3.769022 +v 0.697891 3.364695 2.453471 +v 0.697891 1.054079 2.453471 +v 1.902109 3.364695 2.453471 +v 1.902109 1.054079 2.453471 +v 1.902109 3.364694 3.769022 +v 1.902109 1.054078 3.769021 +v 0.697891 1.054078 3.769021 +vt 0.665758 0.333229 +vt 0.335257 0.334242 +vt 0.334242 0.003741 +vt 0.003742 0.334242 +vt 0.002728 0.003742 +vt 0.333229 0.002728 +vt 0.334242 0.664743 +vt 0.003741 0.665758 +vt 0.002728 0.335257 +vt 0.335257 0.665758 +vt 0.334242 0.335257 +vt 0.664743 0.334242 +vt 0.997272 0.333229 +vt 0.666771 0.334242 +vt 0.665758 0.003741 +vt 0.334242 0.666771 +vt 0.664743 0.665758 +vt 0.665758 0.996258 +vt 0.664743 0.002728 +vt 0.334242 0.333229 +vt 0.333229 0.334242 +vt 0.665758 0.664743 +vt 0.996258 0.002728 +vt 0.335257 0.997272 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None_storage.png +f 515/1078/349 516/1079/349 517/1080/349 +f 516/1081/350 518/1082/350 519/1083/350 +f 518/1084/351 520/1085/351 521/1086/351 +f 520/1087/352 515/1088/352 522/1089/352 +f 522/1090/353 517/1091/353 519/1092/353 +f 520/1093/354 518/1094/354 516/1095/354 +f 522/1096/349 515/1078/349 517/1080/349 +f 517/1097/350 516/1081/350 519/1083/350 +f 519/1098/351 518/1084/351 521/1086/351 +f 521/1099/352 520/1087/352 522/1089/352 +f 521/1100/353 522/1090/353 519/1092/353 +f 515/1101/354 520/1093/354 516/1095/354 +o Wheel_Front_Left +v -2.158457 2.342700 -2.371579 +v -2.158457 2.331936 -3.049924 +v -2.164515 2.305865 -3.022343 +v -1.870411 2.054904 -3.677749 +v -2.158457 2.014275 -3.631468 +v -1.870411 2.388159 -3.067658 +v -1.429098 1.911396 -3.514281 +v -1.582364 2.014275 -3.631468 +v -1.582365 2.331936 -3.049924 +v -2.158457 2.331936 -3.049924 +v -1.870411 2.399451 -2.356014 +v -1.429098 2.189574 -3.005019 +v -1.582365 2.342700 -2.371579 +v -2.158457 2.342700 -2.371579 +v -2.158457 2.043683 -1.778194 +v -1.429098 2.199000 -2.410990 +v -1.429098 1.937149 -1.891360 +v -1.582365 2.043683 -1.778194 +v -1.870411 2.085756 -1.733501 +v -2.158457 1.515007 -1.428767 +v -1.429098 1.474185 -1.585365 +v -1.582365 1.515006 -1.428767 +v -1.870411 1.531128 -1.366922 +v -2.158457 0.898329 -1.416927 +v -1.429099 0.934157 -1.574996 +v -1.582365 0.898329 -1.416927 +v -1.876468 2.028834 -3.623287 +v -1.876468 2.362088 -3.039317 +v -2.164514 1.988204 -3.578987 +v -1.435156 1.885326 -3.466818 +v -1.435156 2.163503 -2.979362 +v -1.588422 2.305865 -3.022343 +v -1.588421 1.988204 -3.578988 +v -1.876468 2.373381 -2.358143 +v -2.164514 2.305865 -3.022343 +v -1.435156 2.172929 -2.410764 +v -1.588422 2.316629 -2.373041 +v -1.876468 2.059686 -1.762283 +v -2.164514 2.017613 -1.805062 +v -1.435156 1.911079 -1.913384 +v -1.588422 2.017612 -1.805063 +v -1.876468 1.505058 -1.411399 +v -2.164515 1.488936 -1.470597 +v -1.435156 1.448114 -1.620490 +v -1.588422 1.488936 -1.470597 +v -1.876468 0.858109 -1.399510 +v -2.164515 0.872258 -1.459264 +v -1.435156 0.908087 -1.610565 +v -1.588422 0.872258 -1.459263 +v -1.870411 0.884179 -1.354501 +v -2.164514 2.316629 -2.373041 +v -2.164515 2.316629 -2.373041 +v -1.850083 0.951980 -3.725186 +v -1.900084 0.951980 -3.725186 +v -1.900084 0.451980 -3.591211 +v -1.850083 0.451980 -3.591211 +v -1.900084 0.085955 -3.225186 +v -1.850084 0.085955 -3.225186 +v -1.900084 -0.048020 -2.725186 +v -1.850084 -0.048020 -2.725186 +v -1.850084 0.085955 -2.225186 +v -1.900084 0.085955 -2.225186 +v -1.900084 0.451980 -1.859161 +v -1.850084 0.451980 -1.859161 +v -1.850084 0.951980 -1.725186 +v -1.900084 0.951980 -1.725186 +v -1.900084 1.451980 -1.859161 +v -1.850084 1.451980 -1.859161 +v -1.900084 1.818006 -2.225186 +v -1.850084 1.818006 -2.225186 +v -1.900084 1.951980 -2.725186 +v -1.850084 1.951980 -2.725186 +v -1.900084 1.818006 -3.225186 +v -1.900084 1.451981 -3.591211 +v -1.850083 1.451981 -3.591211 +v -1.850084 1.818006 -3.225186 +v -1.870411 -0.188146 -2.380640 +v -1.870411 -0.199439 -3.027588 +v -2.158457 -0.142687 -3.013439 +v -2.158458 -0.131923 -2.396761 +v -2.311724 0.010439 -2.437583 +v -2.311724 0.001013 -2.977610 +v -2.258495 0.164422 -2.936868 +v -2.258495 0.172327 -2.484003 +v -2.023677 0.271080 -3.002819 +v -1.717145 0.277992 -2.408860 +v -2.023677 0.277992 -2.408860 +v -1.789579 0.677965 -2.413515 +v -1.717145 0.271080 -3.002819 +v -1.482328 0.172327 -2.484003 +v -1.482328 0.164422 -2.936868 +v -1.429099 0.001013 -2.977610 +v -1.429099 0.010439 -2.437583 +v -1.582365 -0.131923 -2.396761 +v -1.582365 -0.142687 -3.013439 +v -1.870411 0.114256 -3.593509 +v -2.158457 0.156330 -3.552879 +v -2.311723 0.262863 -3.450001 +v -2.258495 0.384009 -3.333012 +v -2.023677 0.463081 -3.256654 +v -1.717145 0.463081 -3.256653 +v -1.482328 0.384009 -3.333012 +v -1.429099 0.262863 -3.450001 +v -1.582364 0.156330 -3.552879 +v -1.870411 0.668884 -3.926763 +v -2.158457 0.685006 -3.870540 +v -2.311723 0.725828 -3.728178 +v -2.258495 0.772248 -3.566290 +v -2.023677 0.697105 -3.460625 +v -1.717145 0.697105 -3.460625 +v -1.482327 0.772248 -3.566290 +v -1.429098 0.725828 -3.728178 +v -1.582364 0.685006 -3.870540 +v -1.870411 1.315833 -3.938056 +v -2.158457 1.301684 -3.881304 +v -2.311723 1.265855 -3.737604 +v -2.258495 1.225113 -3.574195 +v -2.023677 1.291064 -3.467537 +v -1.789579 0.701760 -3.060652 +v -1.717145 1.291064 -3.467537 +v -1.482327 1.225113 -3.574195 +v -1.429098 1.265855 -3.737604 +v -1.582364 1.301684 -3.881304 +v -1.870411 1.881754 -3.624361 +v -2.158457 1.841124 -3.582288 +v -2.311723 1.738246 -3.475754 +v -2.258495 1.621257 -3.354609 +v -2.023677 1.544898 -3.275536 +v -1.717145 1.544898 -3.275536 +v -1.482327 1.621257 -3.354609 +v -1.429099 1.738246 -3.475754 +v -1.582364 1.841124 -3.582288 +v -1.870411 2.215008 -3.069733 +v -2.158457 2.158785 -3.053611 +v -2.311723 2.016423 -3.012789 +v -2.258494 1.854535 -2.966369 +v -2.023677 1.748870 -3.041512 +v -1.717145 1.748870 -3.041512 +v -1.482327 1.854535 -2.966369 +v -1.429099 2.016423 -3.012789 +v -1.582365 2.158785 -3.053611 +v -1.870411 2.226301 -2.422784 +v -2.158457 2.169550 -2.436934 +v -2.311723 2.025850 -2.472762 +v -2.258494 1.862440 -2.513505 +v -2.023677 1.755782 -2.447553 +v -1.717145 1.755782 -2.447553 +v -1.789579 1.348897 -3.036857 +v -1.482327 1.862440 -2.513505 +v -1.429099 2.025850 -2.472762 +v -1.582365 2.169550 -2.436934 +v -1.870411 1.912606 -1.856863 +v -2.158457 1.870533 -1.897493 +v -2.311723 1.763999 -2.000371 +v -2.258495 1.642853 -2.117360 +v -2.023677 1.563781 -2.193719 +v -1.717145 1.563781 -2.193719 +v -1.482327 1.642853 -2.117360 +v -1.429099 1.763999 -2.000371 +v -1.582365 1.870533 -1.897493 +v -1.870411 1.357978 -1.523609 +v -2.158457 1.341856 -1.579832 +v -2.311723 1.301035 -1.722195 +v -2.258495 1.254614 -1.884082 +v -2.023677 1.329757 -1.989747 +v -1.717145 1.329757 -1.989747 +v -1.482327 1.254614 -1.884082 +v -1.429099 1.301035 -1.722194 +v -1.582365 1.341856 -1.579832 +v -1.870411 0.711029 -1.512317 +v -2.158457 0.725179 -1.569068 +v -2.311724 0.761007 -1.712768 +v -2.258495 0.801750 -1.876178 +v -2.023677 0.735798 -1.982836 +v -1.717145 0.735798 -1.982835 +v -1.789579 0.731144 -2.382808 +v -1.482328 0.801750 -1.876177 +v -1.429099 0.761007 -1.712768 +v -1.582365 0.725179 -1.569068 +v -1.870411 0.145108 -1.826011 +v -2.158457 0.185738 -1.868086 +v -2.311724 0.288616 -1.974619 +v -2.258495 0.405605 -2.095764 +v -2.023677 0.481964 -2.174836 +v -1.717145 0.481964 -2.174836 +v -1.482328 0.405605 -2.095764 +v -1.429099 0.288616 -1.974618 +v -1.582365 0.185738 -1.868085 +v -2.023677 0.677965 -2.413515 +v -2.023677 0.671053 -3.007474 +v -1.789579 0.671053 -3.007474 +v -2.023677 1.325102 -2.389720 +v -2.023677 0.731144 -2.382808 +v -1.789579 1.325102 -2.389720 +v -2.023677 0.701760 -3.060652 +v -2.023677 1.295719 -3.067564 +v -1.789579 1.295719 -3.067564 +v -2.023677 1.348897 -3.036857 +v -2.023677 1.355809 -2.442899 +v -1.789579 1.355809 -2.442899 +v -1.229049 1.030662 -2.679246 +v -1.229049 1.030662 -2.779246 +v -1.229049 0.930661 -2.779246 +v -1.979049 1.030661 -2.779246 +v -1.979049 1.030661 -2.679246 +v -1.979049 0.930661 -2.679246 +v -1.229049 0.930661 -2.679246 +v -1.979049 0.930661 -2.779246 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.910683 0.300978 +vt 0.809306 0.257189 +vt 0.909096 0.189316 +vt 0.910412 0.212777 +vt 0.813439 0.213075 +vt 0.809743 0.623328 +vt 0.767033 0.617540 +vt 0.802385 0.525003 +vt 0.879881 0.601532 +vt 0.854311 0.617005 +vt 0.847297 0.523282 +vt 0.760018 0.523817 +vt 0.759950 0.422158 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.034640 0.930186 +vt 0.035491 0.837783 +vt 0.717705 0.625829 +vt 0.733319 0.644430 +vt 0.644609 0.664429 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.951706 0.579252 +vt 0.879881 0.623132 +vt 0.478460 0.803029 +vt 0.478430 0.717127 +vt 0.500209 0.712612 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.569142 0.723746 +vt 0.526132 0.633686 +vt 0.638417 0.647297 +vt 0.637757 0.727411 +vt 0.613524 0.724631 +vt 0.614279 0.633145 +vt 0.570116 0.826337 +vt 0.526305 0.822962 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.572592 0.908051 +vt 0.528666 0.900853 +vt 0.297174 0.516355 +vt 0.319506 0.435521 +vt 0.317310 0.526612 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.949424 0.850572 +vt 0.954393 0.894658 +vt 0.296963 0.355991 +vt 0.342811 0.434304 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.759950 0.463023 +vt 0.715956 0.387746 +vt 0.180286 0.719972 +vt 0.178395 0.816963 +vt 0.172762 0.815779 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.079592 0.837849 +vt 0.078713 0.832630 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.330475 0.803455 +vt 0.323102 0.798341 +vt 0.649849 0.688510 +vt 0.643343 0.684515 +vt 0.314149 0.815081 +vt 0.296963 0.773641 +vt 0.306193 0.772760 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.314792 0.700967 +vt 0.306170 0.727741 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vt 0.513624 0.783997 +vt 0.506188 0.712612 +vt 0.505969 0.783973 +vt 0.949158 0.484385 +vt 0.944659 0.410168 +vt 0.941584 0.484478 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.342603 0.674991 +vt 0.335156 0.743134 +vt 0.334704 0.595770 +vt 0.334948 0.675014 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.523482 0.675613 +vt 0.521494 0.627793 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.598820 0.371478 +vt 0.530171 0.331957 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.109074 0.639268 +vt 0.000848 0.531055 +vt 0.830015 0.623328 +vt 0.792389 0.714799 +vt 0.837273 0.712605 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.462495 0.306756 +vt 0.455687 0.331872 +vt 0.758447 0.693332 +vt 0.721737 0.772501 +vt 0.757332 0.757109 +vt 0.340460 0.815081 +vt 0.297072 0.826038 +vt 0.340316 0.862012 +vt 0.676280 0.688510 +vt 0.639684 0.692967 +vt 0.674834 0.772357 +vt 0.225458 0.066465 +vt 0.157773 0.024179 +vt 0.158175 0.049709 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.879661 0.713728 +vt 0.872743 0.628628 +vt 0.792493 0.808950 +vt 0.837383 0.811379 +vt 0.766009 0.719283 +vt 0.402470 0.272035 +vt 0.384108 0.290468 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.638639 0.825588 +vt 0.675115 0.819426 +vt 0.078288 0.046975 +vt 0.091518 0.068826 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.785756 0.886926 +vt 0.830315 0.893182 +vt 0.760201 0.870015 +vt 0.367839 0.211969 +vt 0.342811 0.218841 +vt 0.722613 0.861988 +vt 0.758639 0.881416 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.000874 0.094773 +vt 0.020847 0.106443 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.366797 0.631670 +vt 0.410612 0.724746 +vt 0.343300 0.641815 +vt 0.366513 0.724108 +vt 0.367882 0.142652 +vt 0.342862 0.136182 +vt 0.880326 0.806458 +vt 0.916070 0.738915 +vt 0.880176 0.757653 +vt 0.651005 0.881416 +vt 0.661972 0.937679 +vt 0.697339 0.884549 +vt 0.963197 0.803150 +vt 0.999158 0.806093 +vt 0.963001 0.738770 +vt 0.000842 0.186648 +vt 0.026573 0.185955 +vt 0.478430 0.642230 +vt 0.454713 0.724378 +vt 0.478182 0.723178 +vt 0.454997 0.631940 +vt 0.366238 0.813802 +vt 0.410323 0.818844 +vt 0.342811 0.801309 +vt 0.402587 0.082657 +vt 0.384247 0.064640 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.998802 0.690392 +vt 0.962852 0.690423 +vt 0.023635 0.266097 +vt 0.045687 0.252581 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.366045 0.876721 +vt 0.410121 0.884850 +vt 0.368574 0.047943 +vt 0.455878 0.023384 +vt 0.450371 0.000831 +vt 0.462656 0.048059 +vt 0.915776 0.643196 +vt 0.879766 0.623692 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.071984 0.342642 +vt 0.083117 0.323505 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.184003 0.645063 +vt 0.227051 0.730389 +vt 0.538560 0.023470 +vt 0.544788 0.000929 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.037804 0.750424 +vt 0.000842 0.766738 +vt 0.941584 0.331962 +vt 0.879881 0.422891 +vt 0.941398 0.422896 +vt 0.090587 0.832202 +vt 0.123318 0.828165 +vt 0.084243 0.749997 +vt 0.163350 0.343486 +vt 0.162852 0.317479 +vt 0.296292 0.658368 +vt 0.271432 0.731379 +vt 0.295662 0.734429 +vt 0.272151 0.644522 +vt 0.183284 0.731920 +vt 0.228056 0.828732 +vt 0.610139 0.064873 +vt 0.626527 0.048208 +vt 0.000978 0.697596 +vt 0.085329 0.702418 +vt 0.038890 0.702846 +vt 0.118564 0.696514 +vt 0.242837 0.320688 +vt 0.229508 0.298361 +vt 0.272390 0.825121 +vt 0.296500 0.816519 +vt 0.184242 0.825662 +vt 0.230552 0.907946 +vt 0.673686 0.130002 +vt 0.592019 0.082852 +vt 0.651436 0.136500 +vt 0.041316 0.659523 +vt 0.006100 0.640350 +vt 0.087755 0.659095 +vt 0.300278 0.261221 +vt 0.277678 0.248491 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.785112 0.254285 +vt 0.741202 0.192204 +vt 0.651385 0.219160 +vt 0.673628 0.224394 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.845561 0.100185 +vt 0.809649 0.113269 +vt 0.183284 0.908088 +vt 0.222683 0.963363 +vt 0.229724 0.907946 +vt 0.892764 0.189172 +vt 0.928690 0.180787 +vt 0.892491 0.100041 +vt 0.320282 0.181017 +vt 0.294454 0.181233 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.785595 0.096730 +vt 0.741495 0.096636 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.591902 0.272231 +vt 0.609999 0.290702 +vt 0.809448 0.047401 +vt 0.892357 0.056365 +vt 0.845426 0.056510 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.697396 0.096460 +vt 0.673931 0.096282 +vt 0.785876 0.005407 +vt 0.741789 0.000831 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.845312 0.019129 +vt 0.809306 0.001196 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.332779 0.615853 +vt 0.296963 0.616402 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.709710 0.331848 +vt 0.720616 0.271792 +vt 0.879860 0.985796 +vt 0.940684 0.894960 +vt 0.879766 0.894861 +vt 0.297236 0.615853 +vt 0.332803 0.526612 +vt 0.296963 0.526722 +vt 0.941258 0.444023 +vt 0.879881 0.443788 +vt 0.941321 0.534932 +vt 0.133383 0.904255 +vt 0.143492 0.960751 +vt 0.180286 0.904398 +vt 0.478430 0.884894 +vt 0.417169 0.975757 +vt 0.478402 0.975800 +vt 0.767744 0.331957 +vt 0.803584 0.331848 +vt 0.767547 0.267577 +vt 0.818505 0.984088 +vt 0.879766 0.893225 +vt 0.818532 0.893182 +vt 0.911101 0.280588 +vt 0.972132 0.189316 +vt 0.911038 0.189679 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.478457 0.710220 +vt 0.513843 0.712612 +vt 0.297106 0.908942 +vt 0.340350 0.872968 +vt 0.296963 0.862012 +vt 0.404092 0.884869 +vt 0.342811 0.975783 +vt 0.404028 0.975801 +vt 0.767547 0.331957 +vt 0.756641 0.271902 +vt 0.720616 0.331814 +vt 0.818894 0.331951 +vt 0.803584 0.316653 +vt 0.803585 0.331957 +vt 0.485203 0.925578 +vt 0.500243 0.925532 +vt 0.484851 0.810753 +vt 0.818889 0.301333 +vt 0.803584 0.316647 +vt 0.818888 0.316642 +vt 0.015117 0.947455 +vt 0.026433 0.832663 +vt 0.015470 0.832630 +vt 0.001191 0.833505 +vt 0.014769 0.946257 +vt 0.015117 0.832630 +vt 0.943226 0.115741 +vt 0.928690 0.000831 +vt 0.929041 0.115591 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.188269 0.343486 +vt 0.109050 0.343516 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.974900 -0.222800 0.003500 +vn -0.196900 0.860400 -0.470000 +vn 0.690900 0.634500 -0.346600 +vn 0.196900 0.860400 -0.470000 +vn -0.192500 0.981200 -0.015600 +vn 0.682300 0.730900 -0.011600 +vn 0.192500 0.981200 -0.015600 +vn -0.196400 0.875600 0.441200 +vn 0.689900 0.646500 0.325800 +vn 0.196400 0.875600 0.441200 +vn -0.205500 0.539600 0.816400 +vn 0.706800 0.390000 0.590100 +vn 0.205500 0.539600 0.816400 +vn -0.210900 0.018800 0.977300 +vn 0.716300 0.013400 0.697600 +vn 0.210900 0.018800 0.977300 +vn 0.194900 -0.851900 0.486100 +vn -0.687100 -0.631000 0.360100 +vn -0.194900 -0.851900 0.486100 +vn 0.192500 -0.981200 0.016300 +vn -0.682300 -0.730900 0.012100 +vn -0.192500 -0.981200 0.016300 +vn 0.194600 -0.867900 -0.456900 +vn -0.686600 -0.643400 -0.338700 +vn -0.194600 -0.867900 -0.456900 +vn 0.199500 -0.523900 -0.828100 +vn -0.695800 -0.384000 -0.606900 +vn -0.199500 -0.523900 -0.828100 +vn 0.202200 -0.018000 -0.979200 +vn -0.700900 -0.013100 -0.713100 +vn -0.202200 -0.018000 -0.979200 +vn 0.983300 -0.100300 -0.151700 +vn 0.974800 -0.223000 0.003500 +vn -0.986700 0.089600 0.135500 +vn 0.991300 -0.115500 0.063100 +vn 0.146700 -0.864400 0.480900 +vn -0.989900 0.002700 0.141700 +vn 0.967500 -0.225800 -0.113800 +vn -0.992100 0.109800 -0.060000 +vn 0.559600 -0.739100 0.375100 +vn -0.152200 -0.846200 0.510600 +vn 0.059000 -0.903000 -0.425700 +vn -0.985800 0.148500 0.078200 +vn -0.056600 -0.898100 -0.436200 +vn -0.230500 -0.860600 -0.454100 +vn 0.985800 -0.003200 -0.167600 +vn 0.974000 -0.226500 0.003800 +vn 0.990500 -0.073500 -0.116200 +vn 0.974000 -0.226300 0.003800 +vn -0.992500 0.065200 0.103100 +vn 0.985600 -0.146700 0.083700 +vn 0.146300 -0.851500 0.503500 +vn -0.990100 0.002600 0.140100 +vn 0.983900 -0.158300 -0.083300 +vn -0.986400 0.142900 -0.081500 +vn 0.576100 -0.702900 0.417100 +vn -0.151600 -0.831800 0.533900 +vn 0.059000 -0.896700 -0.438700 +vn -0.056600 -0.891500 -0.449400 +vn -0.208300 -0.845800 -0.491200 +vn 0.986200 -0.003000 -0.165700 +vn -0.969500 0.219000 0.110400 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn 1.000000 0.000000 0.000000 +vn -0.192500 -0.981200 0.017100 +vn -0.682300 -0.730900 0.012800 +vn -0.950400 0.310900 -0.005400 +vn -0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn 0.407500 0.913100 -0.010600 +vn 0.950400 0.310900 -0.005400 +vn 0.682300 -0.730900 0.012800 +vn 0.192500 -0.981200 0.017100 +vn -0.192500 -0.858300 -0.475700 +vn -0.682300 -0.639400 -0.354400 +vn -0.950400 0.272000 0.150800 +vn -0.252600 0.846200 0.469100 +vn 0.000000 0.797500 0.603300 +vn 0.421400 0.723300 0.547100 +vn 0.950400 0.272000 0.150800 +vn 0.682300 -0.639400 -0.354400 +vn 0.192500 -0.858300 -0.475700 +vn -0.192500 -0.505400 -0.841100 +vn -0.682300 -0.376500 -0.626600 +vn -0.950400 0.160200 0.266600 +vn -0.215700 0.502900 0.837000 +vn -0.000000 0.657000 0.753900 +vn 0.422700 0.595500 0.683200 +vn 0.950400 0.160200 0.266600 +vn 0.682300 -0.376500 -0.626600 +vn 0.192500 -0.505400 -0.841100 +vn -0.192500 -0.017100 -0.981200 +vn -0.682300 -0.012800 -0.730900 +vn -0.950400 0.005400 0.310900 +vn -0.417200 0.015900 0.908700 +vn -0.000000 -0.999900 0.011600 +vn 0.407500 0.010600 0.913100 +vn 0.950400 0.005400 0.310900 +vn 0.682300 -0.012800 -0.730900 +vn 0.192500 -0.017100 -0.981200 +vn -0.192500 0.475700 -0.858300 +vn -0.682300 0.354400 -0.639400 +vn -0.950400 -0.150800 0.272000 +vn -0.252600 -0.469100 0.846200 +vn -0.000000 -0.603300 0.797500 +vn 0.421400 -0.547100 0.723300 +vn 0.950400 -0.150800 0.272000 +vn 0.682300 0.354400 -0.639400 +vn 0.192500 0.475700 -0.858300 +vn -0.192500 0.841100 -0.505400 +vn -0.682300 0.626600 -0.376500 +vn -0.950400 -0.266600 0.160200 +vn -0.215700 -0.837000 0.502900 +vn 0.000000 -0.753900 0.657000 +vn 0.422700 -0.683200 0.595500 +vn 0.950400 -0.266600 0.160200 +vn 0.682300 0.626600 -0.376500 +vn 0.192500 0.841100 -0.505400 +vn -0.192500 0.981200 -0.017100 +vn -0.682300 0.730900 -0.012800 +vn -0.950400 -0.310900 0.005400 +vn -0.417200 -0.908700 0.015900 +vn 0.984000 -0.178200 0.002100 +vn 0.407500 -0.913100 0.010600 +vn 0.950400 -0.310900 0.005400 +vn 0.682300 0.730900 -0.012800 +vn 0.192500 0.981200 -0.017100 +vn -0.192500 0.858300 0.475700 +vn -0.682300 0.639400 0.354400 +vn -0.950400 -0.272000 -0.150800 +vn -0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn 0.421400 -0.723300 -0.547100 +vn 0.950400 -0.272000 -0.150800 +vn 0.682300 0.639400 0.354400 +vn 0.192500 0.858300 0.475700 +vn -0.192500 0.505400 0.841100 +vn -0.682300 0.376500 0.626600 +vn -0.950400 -0.160200 -0.266600 +vn -0.215700 -0.502900 -0.837000 +vn 0.000000 -0.657000 -0.753900 +vn 0.422700 -0.595500 -0.683200 +vn 0.950400 -0.160200 -0.266600 +vn 0.682300 0.376500 0.626600 +vn 0.192500 0.505400 0.841100 +vn -0.192500 0.017100 0.981200 +vn -0.682300 0.012800 0.730900 +vn -0.950400 -0.005400 -0.310900 +vn -0.417200 -0.015900 -0.908700 +vn 0.407500 -0.010600 -0.913100 +vn 0.950400 -0.005400 -0.310900 +vn 0.682300 0.012800 0.730900 +vn 0.192500 0.017100 0.981200 +vn -0.192500 -0.475700 0.858300 +vn -0.682300 -0.354400 0.639400 +vn -0.950400 0.150800 -0.272000 +vn -0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn 0.421400 0.547100 -0.723300 +vn 0.950400 0.150800 -0.272000 +vn 0.682300 -0.354400 0.639400 +vn 0.192500 -0.475700 0.858300 +vn -0.192500 -0.841100 0.505400 +vn -0.682300 -0.626600 0.376500 +vn -0.950400 0.266600 -0.160200 +vn -0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn 0.422700 0.683200 -0.595500 +vn 0.950400 0.266600 -0.160200 +vn 0.682300 -0.626600 0.376500 +vn 0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn 0.984000 0.178200 -0.002100 +vn 0.984000 -0.002100 -0.178200 +vn 0.984000 0.002100 0.178200 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.407500 0.913100 -0.010600 +vn 0.417200 0.908700 -0.015900 +vn -0.421400 0.723300 0.547100 +vn 0.252600 0.846200 0.469100 +vn -0.422700 0.595500 0.683200 +vn 0.215700 0.502900 0.837000 +vn -0.407500 0.010600 0.913100 +vn 0.417200 0.015900 0.908700 +vn -0.421400 -0.547100 0.723300 +vn 0.252600 -0.469100 0.846200 +vn -0.422700 -0.683200 0.595500 +vn 0.215700 -0.837000 0.502900 +vn -0.407500 -0.913100 0.010600 +vn 0.417200 -0.908700 0.015900 +vn -0.421400 -0.723300 -0.547100 +vn 0.252600 -0.846200 -0.469100 +vn -0.422700 -0.595500 -0.683200 +vn 0.215700 -0.502900 -0.837000 +vn -0.407500 -0.010600 -0.913100 +vn 0.417200 -0.015900 -0.908700 +vn -0.421400 0.547100 -0.723300 +vn 0.252600 0.469100 -0.846200 +vn -0.422700 0.683200 -0.595500 +vn 0.215700 0.837000 -0.502900 +usemtl None.010 +f 523/1102/355 525/1103/355 524/1104/355 +f 526/1105/356 527/1106/356 528/1107/356 +f 529/1108/357 530/1109/357 531/1110/357 +f 530/1109/358 526/1105/358 528/1107/358 +f 528/1111/359 532/1112/359 533/1113/359 +f 534/1114/360 531/1115/360 535/1116/360 +f 531/1115/361 528/1111/361 533/1113/361 +f 533/1113/362 536/1117/362 537/1118/362 +f 538/1119/363 535/1116/363 539/1120/363 +f 535/1116/364 533/1113/364 540/1121/364 +f 541/1122/365 537/1118/365 542/1123/365 +f 539/1120/366 540/1121/366 543/1124/366 +f 540/1121/367 541/1122/367 544/1125/367 +f 545/1126/368 542/1127/368 546/1128/368 +f 543/1129/369 544/1130/369 547/1131/369 +f 544/1132/370 545/1126/370 548/1133/370 +f 549/1134/371 550/1135/371 551/1136/371 +f 552/1137/372 553/1138/372 554/1139/372 +f 555/1140/373 554/1141/373 550/1135/373 +f 550/1142/374 556/1143/374 557/1144/374 +f 553/1145/375 558/1146/375 559/1147/375 +f 554/1148/376 559/1147/376 556/1143/376 +f 556/1143/377 560/1149/377 561/1150/377 +f 558/1146/378 562/1151/378 559/1147/378 +f 559/1147/379 563/1152/379 556/1143/379 +f 560/1149/380 564/1153/380 565/1154/380 +f 562/1155/381 566/1156/381 563/1157/381 +f 563/1152/382 567/1158/382 560/1149/382 +f 564/1159/383 568/1160/383 569/1161/383 +f 566/1156/384 570/1162/384 567/1163/384 +f 567/1164/385 571/1165/385 564/1159/385 +f 539/1166/386 543/1129/386 562/1167/386 +f 534/1168/387 538/1169/387 553/1170/387 +f 542/1171/388 537/1172/388 561/1173/388 +f 529/1174/389 534/1168/389 552/1175/389 +f 548/1133/390 572/1176/390 568/1177/390 +f 546/1178/391 542/1171/391 565/1179/391 +f 538/1169/392 539/1166/392 558/1180/392 +f 532/1181/393 527/1182/393 551/1183/393 +f 547/1131/394 548/1184/394 571/1185/394 +f 572/1176/395 546/1128/395 568/1177/395 +f 527/1186/396 526/1187/396 549/1188/396 +f 561/1173/397 537/1172/397 573/1189/397 +f 526/1187/398 530/1190/398 549/1188/398 +f 530/1190/399 529/1191/399 555/1192/399 +f 543/1129/400 547/1131/400 566/1193/400 +f 574/1194/401 525/1103/401 523/1102/401 +f 527/1106/356 532/1195/356 528/1107/356 +f 534/1196/357 529/1108/357 531/1110/357 +f 531/1110/358 530/1109/358 528/1107/358 +f 532/1112/359 536/1117/359 533/1113/359 +f 538/1119/360 534/1114/360 535/1116/360 +f 535/1116/361 531/1115/361 533/1113/361 +f 541/1122/362 533/1113/362 537/1118/362 +f 535/1116/363 540/1121/363 539/1120/363 +f 533/1113/364 541/1122/364 540/1121/364 +f 545/1197/365 541/1122/365 542/1123/365 +f 540/1121/366 544/1125/366 543/1124/366 +f 541/1122/367 545/1197/367 544/1125/367 +f 572/1176/368 545/1126/368 546/1128/368 +f 544/1130/369 548/1184/369 547/1131/369 +f 545/1126/370 572/1176/370 548/1133/370 +f 550/1135/371 557/1198/371 551/1136/371 +f 555/1199/372 552/1137/372 554/1139/372 +f 549/1134/373 555/1140/373 550/1135/373 +f 556/1143/374 573/1200/374 557/1144/374 +f 554/1148/375 553/1145/375 559/1147/375 +f 550/1142/376 554/1148/376 556/1143/376 +f 573/1200/377 556/1143/377 561/1150/377 +f 562/1151/378 563/1152/378 559/1147/378 +f 563/1152/379 560/1149/379 556/1143/379 +f 561/1150/380 560/1149/380 565/1154/380 +f 566/1156/381 567/1163/381 563/1157/381 +f 567/1158/382 564/1153/382 560/1149/382 +f 565/1201/383 564/1159/383 569/1161/383 +f 570/1162/384 571/1202/384 567/1163/384 +f 571/1165/385 568/1160/385 564/1159/385 +f 543/1129/402 566/1193/402 562/1167/402 +f 538/1169/403 558/1180/403 553/1170/403 +f 565/1179/404 542/1171/404 561/1173/404 +f 534/1168/405 553/1170/405 552/1175/405 +f 571/1203/406 548/1133/406 568/1177/406 +f 569/1204/407 546/1178/407 565/1179/407 +f 539/1166/408 562/1167/408 558/1180/408 +f 557/1205/409 532/1181/409 551/1183/409 +f 570/1206/410 547/1131/410 571/1185/410 +f 546/1128/411 569/1207/411 568/1177/411 +f 551/1208/412 527/1186/412 549/1188/412 +f 530/1190/413 555/1192/413 549/1188/413 +f 529/1191/414 552/1209/414 555/1192/414 +f 547/1131/415 570/1206/415 566/1193/415 +f 537/1172/416 536/1210/416 573/1189/416 +f 575/1211/417 577/1212/417 576/1213/417 +f 578/1214/418 579/1215/418 577/1216/418 +f 580/1217/419 581/1218/419 579/1215/419 +f 582/1219/420 583/1220/420 581/1221/420 +f 583/1220/421 585/1222/421 584/1223/421 +f 586/1224/422 587/1225/422 585/1222/422 +f 587/1226/423 589/1227/423 588/1228/423 +f 590/1229/424 591/1230/424 589/1227/424 +f 592/1231/425 593/1232/425 591/1230/425 +f 594/1233/426 595/1234/426 593/1232/426 +f 577/1235/427 596/1236/427 576/1237/427 +f 597/1238/428 575/1211/428 596/1239/428 +f 598/1240/429 596/1239/429 595/1241/429 +f 575/1242/430 597/1243/430 578/1244/430 +f 599/1245/431 601/1246/431 600/1247/431 +f 602/1248/432 603/1249/432 601/1246/432 +f 603/1250/433 605/1251/433 604/1252/433 +f 606/1253/434 607/1254/434 605/1255/434 +f 608/1256/435 610/1257/435 609/1258/435 +f 608/1259/436 612/1260/436 611/1261/436 +f 612/1262/437 614/1263/437 613/1264/437 +f 615/1265/438 616/1266/438 614/1263/438 +f 599/1245/439 617/1267/439 616/1268/439 +f 600/1247/440 619/1269/440 618/1270/440 +f 601/1246/441 604/1271/441 619/1269/441 +f 604/1252/442 621/1272/442 620/1273/442 +f 605/1255/443 607/1254/443 621/1274/443 +f 607/1254/444 611/1261/444 622/1275/444 +f 611/1261/445 624/1276/445 623/1277/445 +f 613/1264/446 625/1278/446 624/1279/446 +f 614/1263/447 626/1280/447 625/1278/447 +f 617/1267/448 600/1247/448 626/1281/448 +f 618/1270/449 628/1282/449 627/1283/449 +f 619/1269/450 629/1284/450 628/1282/450 +f 620/1273/451 630/1285/451 629/1286/451 +f 621/1274/452 631/1287/452 630/1288/452 +f 622/1275/453 623/1277/453 631/1287/453 +f 623/1277/454 624/1276/454 632/1289/454 +f 624/1279/455 625/1278/455 633/1290/455 +f 625/1278/456 635/1291/456 634/1292/456 +f 626/1281/457 627/1283/457 635/1293/457 +f 627/1294/458 628/1295/458 636/1296/458 +f 628/1295/459 629/1297/459 637/1298/459 +f 629/1286/460 639/1299/460 638/1300/460 +f 630/1301/461 640/1302/461 639/1303/461 +f 632/1304/462 641/1305/462 631/1306/462 +f 632/1307/463 633/1308/463 642/1309/463 +f 633/1290/464 644/1310/464 643/1311/464 +f 634/1312/465 645/1313/465 644/1314/465 +f 635/1315/466 636/1296/466 645/1313/466 +f 636/1296/467 647/1316/467 646/1317/467 +f 637/1298/468 648/1318/468 647/1316/468 +f 638/1300/469 649/1319/469 648/1320/469 +f 639/1303/470 640/1302/470 649/1321/470 +f 640/1302/471 642/1309/471 650/1322/471 +f 642/1309/472 652/1323/472 651/1324/472 +f 643/1311/473 653/1325/473 652/1326/473 +f 644/1314/474 645/1313/474 653/1327/474 +f 645/1313/475 646/1317/475 654/1328/475 +f 646/1317/476 656/1329/476 655/1330/476 +f 647/1331/477 657/1332/477 656/1333/477 +f 648/1320/478 658/1334/478 657/1332/478 +f 649/1321/479 659/1335/479 658/1336/479 +f 650/1322/480 651/1324/480 659/1335/480 +f 651/1324/481 652/1323/481 660/1337/481 +f 652/1326/482 653/1325/482 661/1338/482 +f 653/1325/483 663/1339/483 662/1340/483 +f 654/1328/484 646/1317/484 663/1341/484 +f 655/1342/485 656/1343/485 664/1344/485 +f 656/1333/486 666/1345/486 665/1346/486 +f 657/1332/487 667/1347/487 666/1345/487 +f 658/1348/488 668/1349/488 667/1350/488 +f 669/1351/489 670/1352/489 660/1353/489 +f 660/1354/490 661/1355/490 669/1356/490 +f 661/1338/491 672/1357/491 671/1358/491 +f 662/1359/492 673/1360/492 672/1361/492 +f 663/1362/493 664/1344/493 673/1360/493 +f 664/1344/494 665/1363/494 674/1364/494 +f 665/1346/495 676/1365/495 675/1366/495 +f 666/1345/496 667/1347/496 676/1365/496 +f 667/1350/497 668/1349/497 677/1367/497 +f 668/1349/498 679/1368/498 678/1369/498 +f 669/1356/499 680/1370/499 679/1368/499 +f 671/1358/500 681/1371/500 680/1372/500 +f 672/1361/501 682/1373/501 681/1374/501 +f 673/1360/502 674/1364/502 682/1373/502 +f 674/1364/503 675/1375/503 683/1376/503 +f 675/1366/504 676/1365/504 684/1377/504 +f 676/1365/505 677/1378/505 685/1379/505 +f 677/1367/506 687/1380/506 686/1381/506 +f 678/1369/507 688/1382/507 687/1380/507 +f 679/1368/508 680/1370/508 688/1382/508 +f 680/1372/509 690/1383/509 689/1384/509 +f 681/1371/510 691/1385/510 690/1383/510 +f 682/1373/511 674/1364/511 691/1386/511 +f 683/1387/512 684/1388/512 692/1389/512 +f 684/1377/513 694/1390/513 693/1391/513 +f 685/1379/514 695/1392/514 694/1390/514 +f 686/1393/515 696/1394/515 695/1395/515 +f 696/1396/462 698/1397/462 697/1398/462 +f 688/1399/516 689/1400/516 697/1401/516 +f 689/1384/517 700/1402/517 699/1403/517 +f 690/1383/518 691/1385/518 700/1402/518 +f 691/1404/519 692/1389/519 701/1405/519 +f 692/1389/520 703/1406/520 702/1407/520 +f 693/1408/521 704/1409/521 703/1406/521 +f 694/1390/522 705/1410/522 704/1411/522 +f 695/1395/523 696/1394/523 705/1412/523 +f 696/1394/524 707/1413/524 706/1414/524 +f 697/1401/525 708/1415/525 707/1413/525 +f 699/1403/526 700/1402/526 708/1416/526 +f 700/1417/527 710/1418/527 709/1419/527 +f 701/1405/528 702/1407/528 710/1418/528 +f 702/1407/529 602/1420/529 599/1421/529 +f 703/1406/530 603/1422/530 602/1420/530 +f 704/1411/531 606/1423/531 603/1250/531 +f 705/1412/532 609/1424/532 606/1425/532 +f 706/1414/533 608/1426/533 609/1424/533 +f 707/1413/534 708/1415/534 608/1426/534 +f 708/1416/535 615/1265/535 612/1262/535 +f 709/1419/536 710/1418/536 615/1427/536 +f 710/1418/537 599/1421/537 616/1428/537 +f 711/1429/538 713/1430/538 712/1431/538 +f 609/1432/427 712/1288/427 607/1433/427 +f 607/1434/539 713/1435/539 611/1436/539 +f 611/1437/540 610/1438/540 608/1439/540 +f 714/1440/539 698/1441/539 715/1442/539 +f 697/1443/541 698/1444/541 688/1445/541 +f 688/1446/538 716/1447/538 687/1448/538 +f 687/1449/427 715/1450/427 696/1451/427 +f 717/1452/435 641/1453/435 718/1454/435 +f 631/1455/427 718/1456/427 640/1457/427 +f 642/1458/542 641/1459/542 632/1460/542 +f 640/1461/538 719/1462/538 642/1457/538 +f 720/1463/462 722/1464/462 721/1465/462 +f 668/1466/435 722/1467/435 669/1468/435 +f 659/1469/427 721/1470/427 668/1471/427 +f 660/1472/539 670/1473/539 659/1474/539 +f 723/1475/430 725/1476/430 724/1477/430 +f 724/1478/543 725/1479/543 726/1480/543 +f 726/1481/427 728/1482/427 727/1483/427 +f 727/1484/544 729/1485/544 723/1486/544 +f 729/1487/545 730/1488/545 725/1489/545 +f 727/1490/546 724/1491/546 726/1492/546 +f 674/1364/494 665/1363/494 675/1375/494 +f 578/1465/417 577/1212/417 575/1211/417 +f 580/1217/418 579/1215/418 578/1214/418 +f 582/1493/419 581/1218/419 580/1217/419 +f 596/1239/428 575/1211/428 576/1213/428 +f 586/1224/421 585/1222/421 583/1220/421 +f 726/1480/543 725/1479/543 730/1494/543 +f 590/1229/423 589/1227/423 587/1226/423 +f 592/1231/424 591/1230/424 590/1229/424 +f 594/1233/425 593/1232/425 592/1231/425 +f 598/1495/426 595/1234/426 594/1233/426 +f 577/1235/427 595/1496/427 596/1236/427 +f 577/1235/427 593/1497/427 595/1496/427 +f 579/1498/427 593/1497/427 577/1235/427 +f 579/1498/427 591/1499/427 593/1497/427 +f 581/1500/427 584/1501/427 579/1498/427 +f 579/1498/427 584/1501/427 591/1499/427 +f 584/1501/427 585/1502/427 591/1499/427 +f 591/1499/427 585/1502/427 589/1503/427 +f 622/1275/444 611/1261/444 623/1277/444 +f 597/1238/429 596/1239/429 598/1240/429 +f 598/1504/430 594/1505/430 597/1243/430 +f 708/1416/526 700/1402/526 709/1506/526 +f 578/1244/430 594/1505/430 580/1507/430 +f 594/1505/430 592/1508/430 580/1507/430 +f 580/1507/430 592/1508/430 582/1509/430 +f 582/1509/430 586/1510/430 583/1511/430 +f 592/1508/430 586/1510/430 582/1509/430 +f 590/1512/430 586/1510/430 592/1508/430 +f 587/1513/430 586/1510/430 590/1512/430 +f 602/1248/431 601/1246/431 599/1245/431 +f 636/1296/458 628/1295/458 637/1298/458 +f 606/1423/433 605/1251/433 603/1250/433 +f 609/1514/547 607/1254/547 606/1253/547 +f 609/1258/435 610/1257/435 711/1515/435 +f 611/1261/548 612/1260/548 613/1516/548 +f 615/1265/437 614/1263/437 612/1262/437 +f 633/1290/455 625/1278/455 634/1292/455 +f 600/1247/439 617/1267/439 599/1245/439 +f 601/1246/440 619/1269/440 600/1247/440 +f 661/1338/482 653/1325/482 662/1340/482 +f 605/1251/442 621/1272/442 604/1252/442 +f 621/1274/549 607/1254/549 622/1275/549 +f 664/1344/485 656/1343/485 665/1363/485 +f 613/1516/550 624/1276/550 611/1261/550 +f 614/1263/446 625/1278/446 613/1264/446 +f 617/1517/447 626/1280/447 614/1263/447 +f 683/1376/503 675/1375/503 684/1518/503 +f 619/1269/449 628/1282/449 618/1270/449 +f 620/1519/450 629/1284/450 619/1269/450 +f 621/1272/451 630/1285/451 620/1273/451 +f 622/1275/551 631/1287/551 621/1274/551 +f 585/1222/422 587/1225/422 588/1520/422 +f 632/1289/552 624/1276/552 633/1521/552 +f 692/1389/512 684/1388/512 693/1408/512 +f 626/1280/456 635/1291/456 625/1278/456 +f 618/1270/457 627/1283/457 626/1281/457 +f 626/1281/448 600/1247/448 618/1270/448 +f 601/1246/432 603/1249/432 604/1271/432 +f 630/1285/460 639/1299/460 629/1286/460 +f 631/1522/553 640/1302/553 630/1301/553 +f 631/1306/462 641/1305/462 717/1523/462 +f 642/1309/554 633/1308/554 643/1524/554 +f 634/1292/464 644/1310/464 633/1290/464 +f 635/1315/465 645/1313/465 634/1312/465 +f 627/1294/466 636/1296/466 635/1315/466 +f 637/1298/467 647/1316/467 636/1296/467 +f 638/1525/468 648/1318/468 637/1298/468 +f 639/1299/469 649/1319/469 638/1300/469 +f 649/1321/555 640/1302/555 650/1322/555 +f 614/1263/438 616/1266/438 617/1517/438 +f 643/1524/556 652/1323/556 642/1309/556 +f 644/1310/473 653/1325/473 643/1311/473 +f 589/1503/427 585/1502/427 588/1526/427 +f 636/1296/475 646/1317/475 645/1313/475 +f 647/1316/476 656/1329/476 646/1317/476 +f 648/1320/477 657/1332/477 647/1331/477 +f 649/1319/478 658/1334/478 648/1320/478 +f 650/1322/557 659/1335/557 649/1321/557 +f 615/1427/536 710/1418/536 616/1428/536 +f 660/1337/558 652/1323/558 661/1527/558 +f 688/1445/541 698/1444/541 716/1528/541 +f 654/1529/483 663/1339/483 653/1325/483 +f 691/1386/511 674/1364/511 683/1376/511 +f 619/1269/441 604/1271/441 620/1519/441 +f 657/1332/486 666/1345/486 656/1333/486 +f 658/1334/487 667/1347/487 657/1332/487 +f 659/1530/559 668/1349/559 658/1348/559 +f 722/1531/489 670/1352/489 669/1351/489 +f 669/1356/560 661/1355/560 671/1532/560 +f 662/1340/491 672/1357/491 661/1338/491 +f 663/1362/492 673/1360/492 662/1359/492 +f 655/1342/493 664/1344/493 663/1362/493 +f 653/1327/474 645/1313/474 654/1328/474 +f 666/1345/495 676/1365/495 665/1346/495 +f 676/1365/496 667/1347/496 677/1378/496 +f 677/1367/561 668/1349/561 678/1369/561 +f 669/1356/498 679/1368/498 668/1349/498 +f 671/1532/562 680/1370/562 669/1356/562 +f 672/1357/500 681/1371/500 671/1358/500 +f 673/1360/501 682/1373/501 672/1361/501 +f 664/1344/502 674/1364/502 673/1360/502 +f 631/1287/453 623/1277/453 632/1289/453 +f 637/1298/459 629/1297/459 638/1525/459 +f 700/1402/518 691/1385/518 701/1533/518 +f 678/1369/563 687/1380/563 677/1367/563 +f 679/1368/507 688/1382/507 678/1369/507 +f 688/1382/564 680/1370/564 689/1534/564 +f 681/1371/509 690/1383/509 680/1372/509 +f 682/1535/510 691/1385/510 681/1371/510 +f 659/1335/480 651/1324/480 660/1337/480 +f 684/1377/504 676/1365/504 685/1379/504 +f 685/1379/513 694/1390/513 684/1377/513 +f 686/1536/514 695/1392/514 685/1379/514 +f 687/1537/565 696/1394/565 686/1393/565 +f 715/1538/462 698/1397/462 696/1396/462 +f 697/1401/566 689/1400/566 699/1539/566 +f 690/1383/517 700/1402/517 689/1384/517 +f 663/1341/484 646/1317/484 655/1330/484 +f 683/1387/519 692/1389/519 691/1404/519 +f 693/1408/520 703/1406/520 692/1389/520 +f 694/1540/521 704/1409/521 693/1408/521 +f 695/1392/522 705/1410/522 694/1390/522 +f 705/1412/567 696/1394/567 706/1414/567 +f 697/1401/524 707/1413/524 696/1394/524 +f 699/1539/568 708/1415/568 697/1401/568 +f 685/1379/505 677/1378/505 686/1536/505 +f 701/1405/527 710/1418/527 700/1417/527 +f 692/1389/528 702/1407/528 701/1405/528 +f 703/1406/529 602/1420/529 702/1407/529 +f 704/1409/530 603/1422/530 703/1406/530 +f 705/1410/531 606/1423/531 704/1411/531 +f 706/1414/569 609/1424/569 705/1412/569 +f 707/1413/533 608/1426/533 706/1414/533 +f 608/1426/570 708/1415/570 612/1541/570 +f 709/1506/535 615/1265/535 708/1416/535 +f 718/1454/435 641/1453/435 719/1542/435 +f 702/1407/537 599/1421/537 710/1418/537 +f 610/1543/538 713/1430/538 711/1429/538 +f 711/1544/427 712/1288/427 609/1432/427 +f 712/1545/539 713/1435/539 607/1434/539 +f 713/1546/540 610/1438/540 611/1437/540 +f 716/1547/539 698/1441/539 714/1440/539 +f 597/1243/430 594/1505/430 578/1244/430 +f 687/1448/538 716/1447/538 714/1548/538 +f 714/1549/427 715/1450/427 687/1449/427 +f 650/1322/471 642/1309/471 651/1324/471 +f 717/1550/427 718/1456/427 631/1455/427 +f 719/1551/542 641/1459/542 642/1458/542 +f 718/1552/538 719/1462/538 640/1461/538 +f 670/1553/462 722/1464/462 720/1463/462 +f 721/1554/435 722/1467/435 668/1466/435 +f 720/1555/427 721/1470/427 659/1469/427 +f 659/1474/539 670/1473/539 720/1556/539 +f 729/1483/430 725/1476/430 723/1475/430 +f 581/1221/420 583/1220/420 584/1223/420 +f 730/1557/427 728/1482/427 726/1481/427 +f 728/1558/544 729/1485/544 727/1484/544 +f 728/1559/545 730/1488/545 729/1487/545 +f 723/1560/546 724/1491/546 727/1490/546 +o Wheel_Back_Left +v -2.802364 2.342700 4.069841 +v -2.802364 2.331936 3.391497 +v -2.808421 2.305865 3.419077 +v -2.514317 2.054904 2.763671 +v -2.802363 2.014275 2.809953 +v -2.514317 2.388159 3.373763 +v -2.073004 1.911396 2.927140 +v -2.226271 2.014275 2.809953 +v -2.226271 2.331936 3.391497 +v -2.802364 2.331936 3.391497 +v -2.514318 2.399451 4.085406 +v -2.073004 2.189574 3.436401 +v -2.226272 2.342700 4.069841 +v -2.802364 2.342700 4.069841 +v -2.802364 2.043683 4.663226 +v -2.073005 2.199000 4.030431 +v -2.073005 1.937149 4.550061 +v -2.226272 2.043683 4.663227 +v -2.514318 2.085756 4.707919 +v -2.802364 1.515007 5.012654 +v -2.073005 1.474185 4.856056 +v -2.226272 1.515006 5.012654 +v -2.514318 1.531128 5.074499 +v -2.802364 0.898329 5.024494 +v -2.073006 0.934157 4.866424 +v -2.226272 0.898329 5.024494 +v -2.520375 2.028834 2.818133 +v -2.520375 2.362088 3.402103 +v -2.808420 1.988204 2.862433 +v -2.079062 1.885326 2.974603 +v -2.079062 2.163503 3.462059 +v -2.232329 2.305865 3.419078 +v -2.232328 1.988204 2.862432 +v -2.520375 2.373381 4.083278 +v -2.808420 2.305865 3.419077 +v -2.079063 2.172929 4.030656 +v -2.232329 2.316629 4.068380 +v -2.520375 2.059686 4.679137 +v -2.808421 2.017613 4.636358 +v -2.079063 1.911079 4.528037 +v -2.232329 2.017612 4.636358 +v -2.520375 1.505058 5.030021 +v -2.808422 1.488936 4.970824 +v -2.079063 1.448114 4.820931 +v -2.232329 1.488936 4.970824 +v -2.520375 0.858109 5.041911 +v -2.808422 0.872258 4.982157 +v -2.079063 0.908087 4.830855 +v -2.232329 0.872258 4.982157 +v -2.514318 0.884179 5.086920 +v -2.808421 2.316629 4.068379 +v -2.808422 2.316629 4.068379 +v -2.493990 0.951980 2.716234 +v -2.543990 0.951980 2.716234 +v -2.543990 0.451980 2.850209 +v -2.493990 0.451980 2.850209 +v -2.543990 0.085955 3.216234 +v -2.493990 0.085955 3.216234 +v -2.543990 -0.048020 3.716234 +v -2.493990 -0.048020 3.716234 +v -2.493991 0.085955 4.216234 +v -2.543991 0.085955 4.216234 +v -2.543991 0.451980 4.582260 +v -2.493991 0.451980 4.582260 +v -2.493991 0.951980 4.716235 +v -2.543991 0.951980 4.716235 +v -2.543991 1.451980 4.582260 +v -2.493991 1.451980 4.582260 +v -2.543991 1.818006 4.216235 +v -2.493991 1.818006 4.216235 +v -2.543990 1.951980 3.716235 +v -2.493990 1.951980 3.716235 +v -2.543990 1.818006 3.216235 +v -2.543990 1.451981 2.850209 +v -2.493990 1.451981 2.850209 +v -2.493990 1.818006 3.216235 +v -2.514318 -0.188146 4.060781 +v -2.514317 -0.199439 3.413832 +v -2.802364 -0.142687 3.427981 +v -2.802365 -0.131923 4.044659 +v -2.955631 0.010439 4.003837 +v -2.955631 0.001013 3.463810 +v -2.902401 0.164422 3.504552 +v -2.902401 0.172327 3.957417 +v -2.667584 0.271080 3.438601 +v -2.361052 0.277992 4.032560 +v -2.667584 0.277992 4.032560 +v -2.433486 0.677965 4.027905 +v -2.361051 0.271080 3.438601 +v -2.126235 0.172327 3.957417 +v -2.126234 0.164422 3.504552 +v -2.073005 0.001013 3.463810 +v -2.073006 0.010439 4.003837 +v -2.226272 -0.131923 4.044659 +v -2.226271 -0.142687 3.427981 +v -2.514317 0.114256 2.847911 +v -2.802363 0.156330 2.888541 +v -2.955630 0.262863 2.991419 +v -2.902401 0.384009 3.108408 +v -2.667583 0.463081 3.184767 +v -2.361051 0.463081 3.184767 +v -2.126234 0.384009 3.108408 +v -2.073005 0.262863 2.991419 +v -2.226271 0.156330 2.888541 +v -2.514317 0.668884 2.514657 +v -2.802363 0.685006 2.570880 +v -2.955630 0.725828 2.713242 +v -2.902401 0.772248 2.875130 +v -2.667583 0.697105 2.980795 +v -2.361051 0.697105 2.980796 +v -2.126233 0.772248 2.875130 +v -2.073005 0.725828 2.713242 +v -2.226271 0.685006 2.570881 +v -2.514317 1.315833 2.503365 +v -2.802363 1.301684 2.560116 +v -2.955629 1.265855 2.703816 +v -2.902401 1.225113 2.867225 +v -2.667583 1.291064 2.973883 +v -2.433485 0.701760 3.380769 +v -2.361051 1.291064 2.973884 +v -2.126233 1.225113 2.867225 +v -2.073005 1.265855 2.703817 +v -2.226271 1.301684 2.560117 +v -2.514317 1.881754 2.817060 +v -2.802363 1.841124 2.859132 +v -2.955630 1.738246 2.965666 +v -2.902401 1.621257 3.086812 +v -2.667583 1.544898 3.165884 +v -2.361051 1.544898 3.165884 +v -2.126233 1.621257 3.086812 +v -2.073005 1.738246 2.965667 +v -2.226271 1.841124 2.859133 +v -2.514317 2.215008 3.371687 +v -2.802364 2.158785 3.387810 +v -2.955630 2.016423 3.428631 +v -2.902400 1.854535 3.475051 +v -2.667584 1.748870 3.399909 +v -2.361051 1.748870 3.399909 +v -2.126233 1.854535 3.475051 +v -2.073005 2.016423 3.428632 +v -2.226271 2.158785 3.387810 +v -2.514318 2.226301 4.018637 +v -2.802364 2.169550 4.004486 +v -2.955630 2.025850 3.968658 +v -2.902400 1.862440 3.927916 +v -2.667584 1.755782 3.993867 +v -2.361052 1.755782 3.993867 +v -2.433485 1.348897 3.404564 +v -2.126233 1.862440 3.927916 +v -2.073006 2.025850 3.968658 +v -2.226272 2.169550 4.004487 +v -2.514318 1.912606 4.584558 +v -2.802364 1.870533 4.543927 +v -2.955630 1.763999 4.441049 +v -2.902402 1.642853 4.324061 +v -2.667584 1.563781 4.247701 +v -2.361052 1.563781 4.247701 +v -2.126234 1.642853 4.324061 +v -2.073006 1.763999 4.441050 +v -2.226272 1.870533 4.543928 +v -2.514318 1.357978 4.917812 +v -2.802364 1.341856 4.861588 +v -2.955630 1.301035 4.719226 +v -2.902402 1.254614 4.557338 +v -2.667584 1.329757 4.451673 +v -2.361052 1.329757 4.451674 +v -2.126234 1.254614 4.557338 +v -2.073006 1.301035 4.719226 +v -2.226272 1.341856 4.861589 +v -2.514318 0.711029 4.929103 +v -2.802364 0.725179 4.872352 +v -2.955631 0.761007 4.728652 +v -2.902402 0.801750 4.565243 +v -2.667584 0.735798 4.458585 +v -2.361052 0.735798 4.458585 +v -2.433486 0.731144 4.058612 +v -2.126235 0.801750 4.565243 +v -2.073006 0.761007 4.728652 +v -2.226272 0.725179 4.872352 +v -2.514318 0.145108 4.615409 +v -2.802364 0.185738 4.573335 +v -2.955631 0.288616 4.466802 +v -2.902402 0.405605 4.345656 +v -2.667584 0.481964 4.266584 +v -2.361052 0.481964 4.266584 +v -2.126235 0.405605 4.345656 +v -2.073006 0.288616 4.466802 +v -2.226272 0.185738 4.573335 +v -2.667584 0.677965 4.027905 +v -2.667584 0.671053 3.433946 +v -2.433485 0.671053 3.433946 +v -2.667584 1.325102 4.051700 +v -2.667584 0.731144 4.058612 +v -2.433486 1.325102 4.051700 +v -2.667584 0.701760 3.380768 +v -2.667584 1.295719 3.373856 +v -2.433485 1.295719 3.373857 +v -2.667584 1.348897 3.404563 +v -2.667584 1.355809 3.998521 +v -2.433486 1.355809 3.998522 +v -1.872956 1.030662 3.762174 +v -1.872956 1.030662 3.662174 +v -1.872956 0.930661 3.662174 +v -2.622956 1.030661 3.662174 +v -2.622956 1.030661 3.762174 +v -2.622956 0.930661 3.762174 +v -1.872956 0.930661 3.762174 +v -2.622956 0.930661 3.662174 +vt 0.505526 0.712612 +vt 0.505513 0.816472 +vt 0.501432 0.812324 +vt 0.911038 0.256876 +vt 0.910683 0.300978 +vt 0.809306 0.257189 +vt 0.909096 0.189316 +vt 0.910412 0.212777 +vt 0.813439 0.213075 +vt 0.809743 0.623328 +vt 0.767033 0.617540 +vt 0.802385 0.525003 +vt 0.879881 0.601532 +vt 0.854311 0.617005 +vt 0.847297 0.523282 +vt 0.760018 0.523817 +vt 0.759950 0.422158 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.034640 0.930186 +vt 0.035491 0.837783 +vt 0.717705 0.625829 +vt 0.733319 0.644430 +vt 0.644609 0.664429 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.951706 0.579252 +vt 0.879881 0.623132 +vt 0.478460 0.803029 +vt 0.478430 0.717127 +vt 0.500209 0.712612 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.569142 0.723746 +vt 0.526132 0.633686 +vt 0.638417 0.647297 +vt 0.637757 0.727411 +vt 0.613524 0.724631 +vt 0.614279 0.633145 +vt 0.570116 0.826337 +vt 0.526305 0.822962 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.572592 0.908051 +vt 0.528666 0.900853 +vt 0.297174 0.516355 +vt 0.319506 0.435521 +vt 0.317310 0.526612 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.949424 0.850572 +vt 0.954393 0.894658 +vt 0.296963 0.355991 +vt 0.342811 0.434304 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.759950 0.463023 +vt 0.715956 0.387746 +vt 0.180286 0.719972 +vt 0.178395 0.816963 +vt 0.172762 0.815779 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.079592 0.837849 +vt 0.078713 0.832630 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.330475 0.803455 +vt 0.323102 0.798341 +vt 0.649849 0.688510 +vt 0.643343 0.684515 +vt 0.314149 0.815081 +vt 0.296963 0.773641 +vt 0.306193 0.772760 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.314792 0.700967 +vt 0.306170 0.727741 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vt 0.513624 0.783997 +vt 0.506188 0.712612 +vt 0.505969 0.783973 +vt 0.949158 0.484385 +vt 0.944659 0.410168 +vt 0.941584 0.484478 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.342603 0.674991 +vt 0.335156 0.743134 +vt 0.334704 0.595770 +vt 0.334948 0.675014 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.523482 0.675613 +vt 0.521494 0.627793 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.598820 0.371478 +vt 0.530171 0.331957 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.109074 0.639268 +vt 0.000848 0.531055 +vt 0.830015 0.623328 +vt 0.792389 0.714799 +vt 0.837273 0.712605 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.462495 0.306756 +vt 0.455687 0.331872 +vt 0.758447 0.693332 +vt 0.721737 0.772501 +vt 0.757332 0.757109 +vt 0.340460 0.815081 +vt 0.297072 0.826038 +vt 0.340316 0.862012 +vt 0.676280 0.688510 +vt 0.639684 0.692967 +vt 0.674834 0.772357 +vt 0.225458 0.066465 +vt 0.157773 0.024179 +vt 0.158175 0.049709 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.879661 0.713728 +vt 0.872743 0.628628 +vt 0.792493 0.808950 +vt 0.837383 0.811379 +vt 0.766009 0.719283 +vt 0.402470 0.272035 +vt 0.384108 0.290468 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.638639 0.825588 +vt 0.675115 0.819426 +vt 0.078288 0.046975 +vt 0.091518 0.068826 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.785756 0.886926 +vt 0.830315 0.893182 +vt 0.760201 0.870015 +vt 0.367839 0.211969 +vt 0.342811 0.218841 +vt 0.722613 0.861988 +vt 0.758639 0.881416 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.000874 0.094773 +vt 0.020847 0.106443 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.366797 0.631670 +vt 0.410612 0.724746 +vt 0.343300 0.641815 +vt 0.366513 0.724108 +vt 0.367882 0.142652 +vt 0.342862 0.136182 +vt 0.880326 0.806458 +vt 0.916070 0.738915 +vt 0.880176 0.757653 +vt 0.651005 0.881416 +vt 0.661972 0.937679 +vt 0.697339 0.884549 +vt 0.963197 0.803150 +vt 0.999158 0.806093 +vt 0.963001 0.738770 +vt 0.000842 0.186648 +vt 0.026573 0.185955 +vt 0.478430 0.642230 +vt 0.454713 0.724378 +vt 0.478182 0.723178 +vt 0.454997 0.631940 +vt 0.366238 0.813802 +vt 0.410323 0.818844 +vt 0.342811 0.801309 +vt 0.402587 0.082657 +vt 0.384247 0.064640 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.998802 0.690392 +vt 0.962852 0.690423 +vt 0.023635 0.266097 +vt 0.045687 0.252581 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.366045 0.876721 +vt 0.410121 0.884850 +vt 0.368574 0.047943 +vt 0.455878 0.023384 +vt 0.450371 0.000831 +vt 0.462656 0.048059 +vt 0.915776 0.643196 +vt 0.879766 0.623692 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.071984 0.342642 +vt 0.083117 0.323505 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.184003 0.645063 +vt 0.227051 0.730389 +vt 0.538560 0.023470 +vt 0.544788 0.000929 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.037804 0.750424 +vt 0.000842 0.766738 +vt 0.941584 0.331962 +vt 0.879881 0.422891 +vt 0.941398 0.422896 +vt 0.090587 0.832202 +vt 0.123318 0.828165 +vt 0.084243 0.749997 +vt 0.163350 0.343486 +vt 0.162852 0.317479 +vt 0.296292 0.658368 +vt 0.271432 0.731379 +vt 0.295662 0.734429 +vt 0.272151 0.644522 +vt 0.183284 0.731920 +vt 0.228056 0.828732 +vt 0.610139 0.064873 +vt 0.626527 0.048208 +vt 0.000978 0.697596 +vt 0.085329 0.702418 +vt 0.038890 0.702846 +vt 0.118564 0.696514 +vt 0.242837 0.320688 +vt 0.229508 0.298361 +vt 0.272390 0.825121 +vt 0.296500 0.816519 +vt 0.184242 0.825662 +vt 0.230552 0.907946 +vt 0.673686 0.130002 +vt 0.592019 0.082852 +vt 0.651436 0.136500 +vt 0.041316 0.659523 +vt 0.006100 0.640350 +vt 0.087755 0.659095 +vt 0.300278 0.261221 +vt 0.277678 0.248491 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.785112 0.254285 +vt 0.741202 0.192204 +vt 0.651385 0.219160 +vt 0.673628 0.224394 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.845561 0.100185 +vt 0.809649 0.113269 +vt 0.183284 0.908088 +vt 0.222683 0.963363 +vt 0.229724 0.907946 +vt 0.892764 0.189172 +vt 0.928690 0.180787 +vt 0.892491 0.100041 +vt 0.320282 0.181017 +vt 0.294454 0.181233 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.785595 0.096730 +vt 0.741495 0.096636 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.591902 0.272231 +vt 0.609999 0.290702 +vt 0.809448 0.047401 +vt 0.892357 0.056365 +vt 0.845426 0.056510 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.697396 0.096460 +vt 0.673931 0.096282 +vt 0.785876 0.005407 +vt 0.741789 0.000831 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.845312 0.019129 +vt 0.809306 0.001196 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.332779 0.615853 +vt 0.296963 0.616402 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.709710 0.331848 +vt 0.720616 0.271792 +vt 0.879860 0.985796 +vt 0.940684 0.894960 +vt 0.879766 0.894861 +vt 0.297236 0.615853 +vt 0.332803 0.526612 +vt 0.296963 0.526722 +vt 0.941258 0.444023 +vt 0.879881 0.443788 +vt 0.941321 0.534932 +vt 0.133383 0.904255 +vt 0.143492 0.960751 +vt 0.180286 0.904398 +vt 0.478430 0.884894 +vt 0.417169 0.975757 +vt 0.478402 0.975800 +vt 0.767744 0.331957 +vt 0.803584 0.331848 +vt 0.767547 0.267577 +vt 0.818505 0.984088 +vt 0.879766 0.893225 +vt 0.818532 0.893182 +vt 0.911101 0.280588 +vt 0.972132 0.189316 +vt 0.911038 0.189679 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.478457 0.710220 +vt 0.513843 0.712612 +vt 0.297106 0.908942 +vt 0.340350 0.872968 +vt 0.296963 0.862012 +vt 0.404092 0.884869 +vt 0.342811 0.975783 +vt 0.404028 0.975801 +vt 0.767547 0.331957 +vt 0.756641 0.271902 +vt 0.720616 0.331814 +vt 0.818894 0.331951 +vt 0.803584 0.316653 +vt 0.803585 0.331957 +vt 0.485203 0.925578 +vt 0.500243 0.925532 +vt 0.484851 0.810753 +vt 0.818889 0.301333 +vt 0.803584 0.316647 +vt 0.818888 0.316642 +vt 0.015117 0.947455 +vt 0.026433 0.832663 +vt 0.015470 0.832630 +vt 0.001191 0.833505 +vt 0.014769 0.946257 +vt 0.015117 0.832630 +vt 0.943226 0.115741 +vt 0.928690 0.000831 +vt 0.929041 0.115591 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.188269 0.343486 +vt 0.109050 0.343516 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn -0.974900 0.222800 -0.003500 +vn -0.196900 0.860400 -0.470000 +vn 0.690900 0.634500 -0.346600 +vn 0.196900 0.860400 -0.470000 +vn -0.192500 0.981200 -0.015600 +vn 0.682300 0.730900 -0.011600 +vn 0.192500 0.981200 -0.015600 +vn -0.196400 0.875600 0.441200 +vn 0.689900 0.646500 0.325800 +vn 0.196400 0.875600 0.441200 +vn -0.205500 0.539600 0.816400 +vn 0.706800 0.390000 0.590100 +vn 0.205500 0.539600 0.816400 +vn -0.210900 0.018800 0.977300 +vn 0.716300 0.013400 0.697600 +vn 0.210900 0.018800 0.977300 +vn 0.194900 -0.851900 0.486100 +vn -0.687100 -0.631000 0.360100 +vn -0.194900 -0.851900 0.486100 +vn 0.192500 -0.981200 0.016300 +vn -0.682300 -0.730900 0.012100 +vn -0.192500 -0.981200 0.016300 +vn 0.194600 -0.867900 -0.456900 +vn -0.686600 -0.643400 -0.338700 +vn -0.194600 -0.867900 -0.456900 +vn 0.199500 -0.523900 -0.828100 +vn -0.695800 -0.384000 -0.606900 +vn -0.199500 -0.523900 -0.828100 +vn 0.202200 -0.018000 -0.979200 +vn -0.700900 -0.013100 -0.713100 +vn -0.202200 -0.018000 -0.979200 +vn 0.983300 -0.100300 -0.151800 +vn 0.974800 -0.223000 0.003500 +vn -0.986700 0.089600 0.135500 +vn 0.991300 -0.115500 0.063100 +vn 0.146700 -0.864400 0.480900 +vn -0.989900 0.002700 0.141700 +vn 0.967500 -0.225800 -0.113800 +vn -0.992100 0.109800 -0.060000 +vn 0.559600 -0.739100 0.375100 +vn -0.152200 -0.846200 0.510600 +vn 0.059000 -0.903000 -0.425700 +vn -0.985800 0.148500 0.078200 +vn -0.056600 -0.898100 -0.436200 +vn -0.230500 -0.860600 -0.454100 +vn 0.985800 -0.003200 -0.167600 +vn -0.974000 0.226500 -0.003800 +vn 0.990500 -0.073500 -0.116200 +vn 0.974100 -0.226300 0.003800 +vn -0.992500 0.065200 0.103100 +vn 0.985600 -0.146700 0.083700 +vn 0.146300 -0.851500 0.503500 +vn -0.990100 0.002600 0.140100 +vn 0.983900 -0.158300 -0.083300 +vn -0.986400 0.142900 -0.081500 +vn 0.576100 -0.702900 0.417100 +vn -0.151600 -0.831800 0.533900 +vn 0.059000 -0.896700 -0.438700 +vn -0.056600 -0.891500 -0.449400 +vn -0.208300 -0.845800 -0.491200 +vn 0.986200 -0.003000 -0.165700 +vn -0.969500 0.219000 0.110400 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn 1.000000 -0.000000 0.000000 +vn -0.192500 -0.981200 0.017100 +vn -0.682300 -0.730900 0.012800 +vn -0.950400 0.310900 -0.005400 +vn -0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn 0.407500 0.913100 -0.010600 +vn 0.950400 0.310900 -0.005400 +vn 0.682300 -0.730900 0.012800 +vn 0.192500 -0.981200 0.017100 +vn -0.192500 -0.858300 -0.475700 +vn -0.682300 -0.639400 -0.354400 +vn -0.950400 0.272000 0.150800 +vn -0.252600 0.846200 0.469100 +vn 0.000000 0.797500 0.603300 +vn 0.421400 0.723300 0.547100 +vn 0.950400 0.272000 0.150800 +vn 0.682300 -0.639400 -0.354400 +vn 0.192500 -0.858300 -0.475700 +vn -0.192500 -0.505400 -0.841100 +vn -0.682300 -0.376500 -0.626600 +vn -0.950400 0.160200 0.266600 +vn -0.215700 0.502900 0.837000 +vn -0.000000 0.657000 0.753900 +vn 0.422700 0.595500 0.683200 +vn 0.950400 0.160200 0.266600 +vn 0.682300 -0.376500 -0.626600 +vn 0.192500 -0.505400 -0.841100 +vn -0.192500 -0.017100 -0.981200 +vn -0.682300 -0.012800 -0.730900 +vn -0.950400 0.005400 0.310900 +vn -0.417200 0.015900 0.908700 +vn -0.000000 -0.999900 0.011600 +vn 0.407500 0.010600 0.913100 +vn 0.950400 0.005400 0.310900 +vn 0.682300 -0.012800 -0.730900 +vn 0.192500 -0.017100 -0.981200 +vn -0.192500 0.475700 -0.858300 +vn -0.682300 0.354400 -0.639400 +vn -0.950400 -0.150800 0.272000 +vn -0.252600 -0.469100 0.846200 +vn -0.000000 -0.603300 0.797500 +vn 0.421400 -0.547100 0.723300 +vn 0.950400 -0.150800 0.272000 +vn 0.682300 0.354400 -0.639400 +vn 0.192500 0.475700 -0.858300 +vn -0.192500 0.841100 -0.505400 +vn -0.682300 0.626600 -0.376500 +vn -0.950400 -0.266600 0.160200 +vn -0.215700 -0.837000 0.502900 +vn 0.000000 -0.753900 0.657000 +vn 0.422700 -0.683200 0.595500 +vn 0.950400 -0.266600 0.160200 +vn 0.682300 0.626600 -0.376500 +vn 0.192500 0.841100 -0.505400 +vn -0.192500 0.981200 -0.017100 +vn -0.682300 0.730900 -0.012800 +vn -0.950400 -0.310900 0.005400 +vn -0.417200 -0.908700 0.015900 +vn 0.984000 -0.178200 0.002100 +vn 0.407500 -0.913100 0.010600 +vn 0.950400 -0.310900 0.005400 +vn 0.682300 0.730900 -0.012800 +vn 0.192500 0.981200 -0.017100 +vn -0.192500 0.858300 0.475700 +vn -0.682300 0.639400 0.354400 +vn -0.950400 -0.272000 -0.150800 +vn -0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn 0.421400 -0.723300 -0.547100 +vn 0.950400 -0.272000 -0.150800 +vn 0.682300 0.639400 0.354400 +vn 0.192500 0.858300 0.475700 +vn -0.192500 0.505400 0.841100 +vn -0.682300 0.376500 0.626600 +vn -0.950400 -0.160200 -0.266600 +vn -0.215700 -0.502900 -0.837000 +vn 0.000000 -0.657000 -0.753900 +vn 0.422700 -0.595500 -0.683200 +vn 0.950400 -0.160200 -0.266600 +vn 0.682300 0.376500 0.626600 +vn 0.192500 0.505400 0.841100 +vn -0.192500 0.017100 0.981200 +vn -0.682300 0.012800 0.730900 +vn -0.950400 -0.005400 -0.310900 +vn -0.417200 -0.015900 -0.908700 +vn 0.407500 -0.010600 -0.913100 +vn 0.950400 -0.005400 -0.310900 +vn 0.682300 0.012800 0.730900 +vn 0.192500 0.017100 0.981200 +vn -0.192500 -0.475700 0.858300 +vn -0.682300 -0.354400 0.639400 +vn -0.950400 0.150800 -0.272000 +vn -0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn 0.421400 0.547100 -0.723300 +vn 0.950400 0.150800 -0.272000 +vn 0.682300 -0.354400 0.639400 +vn 0.192500 -0.475700 0.858300 +vn -0.192500 -0.841100 0.505400 +vn -0.682300 -0.626600 0.376500 +vn -0.950400 0.266600 -0.160200 +vn -0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn 0.422700 0.683200 -0.595500 +vn 0.950400 0.266600 -0.160200 +vn 0.682300 -0.626600 0.376500 +vn 0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn 0.984000 0.178200 -0.002100 +vn 0.984000 -0.002100 -0.178200 +vn 0.984000 0.002100 0.178200 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn -0.407500 0.913100 -0.010600 +vn 0.417200 0.908700 -0.015900 +vn -0.421400 0.723300 0.547100 +vn 0.252600 0.846200 0.469100 +vn -0.422700 0.595500 0.683200 +vn 0.215700 0.502900 0.837000 +vn -0.407500 0.010600 0.913100 +vn 0.417200 0.015900 0.908700 +vn -0.421400 -0.547100 0.723300 +vn 0.252600 -0.469100 0.846200 +vn -0.422700 -0.683200 0.595500 +vn 0.215700 -0.837000 0.502900 +vn -0.407500 -0.913100 0.010600 +vn 0.417200 -0.908700 0.015900 +vn -0.421400 -0.723300 -0.547100 +vn 0.252600 -0.846200 -0.469100 +vn -0.422700 -0.595500 -0.683200 +vn 0.000000 -0.657000 -0.753800 +vn 0.215700 -0.502900 -0.837000 +vn -0.407500 -0.010600 -0.913100 +vn 0.417200 -0.015900 -0.908700 +vn -0.421400 0.547100 -0.723300 +vn 0.252600 0.469100 -0.846200 +vn -0.422700 0.683200 -0.595500 +vn 0.215700 0.837000 -0.502900 +usemtl None.014 +f 731/1561/571 732/1562/571 733/1563/571 +f 734/1564/572 735/1565/572 736/1566/572 +f 737/1567/573 738/1568/573 739/1569/573 +f 738/1568/574 734/1564/574 736/1566/574 +f 736/1570/575 740/1571/575 741/1572/575 +f 742/1573/576 739/1574/576 743/1575/576 +f 739/1574/577 736/1570/577 741/1572/577 +f 741/1572/578 744/1576/578 745/1577/578 +f 746/1578/579 743/1575/579 747/1579/579 +f 743/1575/580 741/1572/580 748/1580/580 +f 749/1581/581 745/1577/581 750/1582/581 +f 747/1579/582 748/1580/582 751/1583/582 +f 748/1580/583 749/1581/583 752/1584/583 +f 753/1585/584 750/1586/584 754/1587/584 +f 751/1588/585 752/1589/585 755/1590/585 +f 752/1591/586 753/1585/586 756/1592/586 +f 757/1593/587 758/1594/587 759/1595/587 +f 760/1596/588 761/1597/588 762/1598/588 +f 763/1599/589 762/1600/589 758/1594/589 +f 758/1601/590 764/1602/590 765/1603/590 +f 761/1604/591 766/1605/591 767/1606/591 +f 762/1607/592 767/1606/592 764/1602/592 +f 764/1602/593 768/1608/593 769/1609/593 +f 766/1605/594 770/1610/594 767/1606/594 +f 767/1606/595 771/1611/595 764/1602/595 +f 768/1608/596 772/1612/596 773/1613/596 +f 770/1614/597 774/1615/597 771/1616/597 +f 771/1611/598 775/1617/598 768/1608/598 +f 772/1618/599 776/1619/599 777/1620/599 +f 774/1615/600 778/1621/600 775/1622/600 +f 775/1623/601 779/1624/601 772/1618/601 +f 747/1625/602 751/1588/602 770/1626/602 +f 742/1627/603 746/1628/603 761/1629/603 +f 750/1630/604 745/1631/604 769/1632/604 +f 737/1633/605 742/1627/605 760/1634/605 +f 756/1592/606 780/1635/606 776/1636/606 +f 754/1637/607 750/1630/607 773/1638/607 +f 746/1628/608 747/1625/608 766/1639/608 +f 740/1640/609 735/1641/609 759/1642/609 +f 755/1590/610 756/1643/610 779/1644/610 +f 780/1635/611 754/1587/611 776/1636/611 +f 735/1645/612 734/1646/612 757/1647/612 +f 769/1632/613 745/1631/613 781/1648/613 +f 734/1646/614 738/1649/614 757/1647/614 +f 738/1649/615 737/1650/615 763/1651/615 +f 751/1588/616 755/1590/616 774/1652/616 +f 782/1653/617 731/1561/617 733/1563/617 +f 735/1565/572 740/1654/572 736/1566/572 +f 742/1655/573 737/1567/573 739/1569/573 +f 739/1569/574 738/1568/574 736/1566/574 +f 740/1571/575 744/1576/575 741/1572/575 +f 746/1578/576 742/1573/576 743/1575/576 +f 743/1575/577 739/1574/577 741/1572/577 +f 749/1581/578 741/1572/578 745/1577/578 +f 743/1575/579 748/1580/579 747/1579/579 +f 741/1572/580 749/1581/580 748/1580/580 +f 753/1656/581 749/1581/581 750/1582/581 +f 748/1580/582 752/1584/582 751/1583/582 +f 749/1581/583 753/1656/583 752/1584/583 +f 780/1635/584 753/1585/584 754/1587/584 +f 752/1589/585 756/1643/585 755/1590/585 +f 753/1585/586 780/1635/586 756/1592/586 +f 758/1594/587 765/1657/587 759/1595/587 +f 763/1658/588 760/1596/588 762/1598/588 +f 757/1593/589 763/1599/589 758/1594/589 +f 764/1602/590 781/1659/590 765/1603/590 +f 762/1607/591 761/1604/591 767/1606/591 +f 758/1601/592 762/1607/592 764/1602/592 +f 781/1659/593 764/1602/593 769/1609/593 +f 770/1610/594 771/1611/594 767/1606/594 +f 771/1611/595 768/1608/595 764/1602/595 +f 769/1609/596 768/1608/596 773/1613/596 +f 774/1615/597 775/1622/597 771/1616/597 +f 775/1617/598 772/1612/598 768/1608/598 +f 773/1660/599 772/1618/599 777/1620/599 +f 778/1621/600 779/1661/600 775/1622/600 +f 779/1624/601 776/1619/601 772/1618/601 +f 751/1588/618 774/1652/618 770/1626/618 +f 746/1628/619 766/1639/619 761/1629/619 +f 773/1638/620 750/1630/620 769/1632/620 +f 742/1627/621 761/1629/621 760/1634/621 +f 779/1662/622 756/1592/622 776/1636/622 +f 777/1663/623 754/1637/623 773/1638/623 +f 747/1625/624 770/1626/624 766/1639/624 +f 765/1664/625 740/1640/625 759/1642/625 +f 778/1665/626 755/1590/626 779/1644/626 +f 754/1587/627 777/1666/627 776/1636/627 +f 759/1667/628 735/1645/628 757/1647/628 +f 738/1649/629 763/1651/629 757/1647/629 +f 737/1650/630 760/1668/630 763/1651/630 +f 755/1590/631 778/1665/631 774/1652/631 +f 745/1631/632 744/1669/632 781/1648/632 +f 783/1670/633 785/1671/633 784/1672/633 +f 786/1673/634 787/1674/634 785/1675/634 +f 788/1676/635 789/1677/635 787/1674/635 +f 790/1678/636 791/1679/636 789/1680/636 +f 791/1679/637 793/1681/637 792/1682/637 +f 794/1683/638 795/1684/638 793/1681/638 +f 795/1685/639 797/1686/639 796/1687/639 +f 798/1688/640 799/1689/640 797/1686/640 +f 800/1690/641 801/1691/641 799/1689/641 +f 802/1692/642 803/1693/642 801/1691/642 +f 785/1694/643 804/1695/643 784/1696/643 +f 805/1697/644 783/1670/644 804/1698/644 +f 806/1699/645 804/1698/645 803/1700/645 +f 783/1701/646 805/1702/646 786/1703/646 +f 807/1704/647 809/1705/647 808/1706/647 +f 810/1707/648 811/1708/648 809/1705/648 +f 811/1709/649 813/1710/649 812/1711/649 +f 814/1712/650 815/1713/650 813/1714/650 +f 816/1715/651 818/1716/651 817/1717/651 +f 816/1718/652 820/1719/652 819/1720/652 +f 820/1721/653 822/1722/653 821/1723/653 +f 823/1724/654 824/1725/654 822/1722/654 +f 807/1704/655 825/1726/655 824/1727/655 +f 808/1706/656 827/1728/656 826/1729/656 +f 809/1705/657 812/1730/657 827/1728/657 +f 812/1711/658 829/1731/658 828/1732/658 +f 813/1714/659 815/1713/659 829/1733/659 +f 815/1713/660 819/1720/660 830/1734/660 +f 819/1720/661 832/1735/661 831/1736/661 +f 821/1723/662 833/1737/662 832/1738/662 +f 822/1722/663 834/1739/663 833/1737/663 +f 825/1726/664 808/1706/664 834/1740/664 +f 826/1729/665 836/1741/665 835/1742/665 +f 827/1728/666 837/1743/666 836/1741/666 +f 828/1732/667 838/1744/667 837/1745/667 +f 829/1733/668 839/1746/668 838/1747/668 +f 830/1734/669 831/1736/669 839/1746/669 +f 831/1736/670 832/1735/670 840/1748/670 +f 832/1738/671 833/1737/671 841/1749/671 +f 833/1737/672 843/1750/672 842/1751/672 +f 834/1740/673 835/1742/673 843/1752/673 +f 835/1753/674 836/1754/674 844/1755/674 +f 836/1754/675 837/1756/675 845/1757/675 +f 837/1745/676 847/1758/676 846/1759/676 +f 838/1760/677 848/1761/677 847/1762/677 +f 840/1763/678 849/1764/678 839/1765/678 +f 840/1766/679 841/1767/679 850/1768/679 +f 841/1749/680 852/1769/680 851/1770/680 +f 842/1771/681 853/1772/681 852/1773/681 +f 843/1774/682 844/1755/682 853/1772/682 +f 844/1755/683 855/1775/683 854/1776/683 +f 845/1757/684 856/1777/684 855/1775/684 +f 846/1759/685 857/1778/685 856/1779/685 +f 847/1762/686 848/1761/686 857/1780/686 +f 848/1761/687 850/1768/687 858/1781/687 +f 850/1768/688 860/1782/688 859/1783/688 +f 851/1770/689 861/1784/689 860/1785/689 +f 852/1773/690 853/1772/690 861/1786/690 +f 853/1772/691 854/1776/691 862/1787/691 +f 854/1776/692 864/1788/692 863/1789/692 +f 855/1790/693 865/1791/693 864/1792/693 +f 856/1779/694 866/1793/694 865/1791/694 +f 857/1780/695 867/1794/695 866/1795/695 +f 858/1781/696 859/1783/696 867/1794/696 +f 859/1783/697 860/1782/697 868/1796/697 +f 860/1785/698 861/1784/698 869/1797/698 +f 861/1784/699 871/1798/699 870/1799/699 +f 862/1787/700 854/1776/700 871/1800/700 +f 863/1801/701 864/1802/701 872/1803/701 +f 864/1792/702 874/1804/702 873/1805/702 +f 865/1791/703 875/1806/703 874/1804/703 +f 866/1807/704 876/1808/704 875/1809/704 +f 877/1810/705 878/1811/705 868/1812/705 +f 868/1813/706 869/1814/706 877/1815/706 +f 869/1797/707 880/1816/707 879/1817/707 +f 870/1818/708 881/1819/708 880/1820/708 +f 871/1821/709 872/1803/709 881/1819/709 +f 872/1803/710 873/1822/710 882/1823/710 +f 873/1805/711 884/1824/711 883/1825/711 +f 874/1804/712 875/1806/712 884/1824/712 +f 875/1809/713 876/1808/713 885/1826/713 +f 876/1808/714 887/1827/714 886/1828/714 +f 877/1815/715 888/1829/715 887/1827/715 +f 879/1817/716 889/1830/716 888/1831/716 +f 880/1820/717 890/1832/717 889/1833/717 +f 881/1819/718 882/1823/718 890/1832/718 +f 882/1823/719 883/1834/719 891/1835/719 +f 883/1825/720 884/1824/720 892/1836/720 +f 884/1824/721 885/1837/721 893/1838/721 +f 885/1826/722 895/1839/722 894/1840/722 +f 886/1828/723 896/1841/723 895/1839/723 +f 887/1827/724 888/1829/724 896/1841/724 +f 888/1831/725 898/1842/725 897/1843/725 +f 889/1830/726 899/1844/726 898/1842/726 +f 890/1832/727 882/1823/727 899/1845/727 +f 891/1846/728 892/1847/728 900/1848/728 +f 892/1836/729 902/1849/729 901/1850/729 +f 893/1838/730 903/1851/730 902/1849/730 +f 894/1852/731 904/1853/731 903/1854/731 +f 904/1855/678 906/1856/678 905/1857/678 +f 896/1858/732 897/1859/732 905/1860/732 +f 897/1843/733 908/1861/733 907/1862/733 +f 898/1842/734 899/1844/734 908/1861/734 +f 899/1863/735 900/1848/735 909/1864/735 +f 900/1848/736 911/1865/736 910/1866/736 +f 901/1867/737 912/1868/737 911/1865/737 +f 902/1849/738 913/1869/738 912/1870/738 +f 903/1854/739 904/1853/739 913/1871/739 +f 904/1853/740 915/1872/740 914/1873/740 +f 905/1860/741 916/1874/741 915/1872/741 +f 907/1862/742 908/1861/742 916/1875/742 +f 908/1876/743 918/1877/743 917/1878/743 +f 909/1864/744 910/1866/744 918/1877/744 +f 910/1866/745 810/1879/745 807/1880/745 +f 911/1865/746 811/1881/746 810/1879/746 +f 912/1870/747 814/1882/747 811/1709/747 +f 913/1871/748 817/1883/748 814/1884/748 +f 914/1873/749 816/1885/749 817/1883/749 +f 915/1872/750 916/1874/750 816/1885/750 +f 916/1875/751 823/1724/751 820/1721/751 +f 917/1878/752 918/1877/752 823/1886/752 +f 918/1877/753 807/1880/753 824/1887/753 +f 919/1888/754 921/1889/754 920/1890/754 +f 817/1891/643 920/1747/643 815/1892/643 +f 815/1893/755 921/1894/755 819/1895/755 +f 819/1896/756 818/1897/756 816/1898/756 +f 922/1899/755 906/1900/755 923/1901/755 +f 905/1902/757 906/1903/757 896/1904/757 +f 896/1905/754 924/1906/754 895/1907/754 +f 895/1908/643 923/1909/643 904/1910/643 +f 925/1911/651 849/1912/651 926/1913/651 +f 839/1914/643 926/1915/643 848/1916/643 +f 850/1917/758 849/1918/758 840/1919/758 +f 848/1920/754 927/1921/754 850/1916/754 +f 928/1922/678 930/1923/678 929/1924/678 +f 876/1925/651 930/1926/651 877/1927/651 +f 867/1928/643 929/1929/643 876/1930/643 +f 868/1931/755 878/1932/755 867/1933/755 +f 931/1934/646 933/1935/646 932/1936/646 +f 932/1937/759 933/1938/759 934/1939/759 +f 934/1940/643 936/1941/643 935/1942/643 +f 935/1943/760 937/1944/760 931/1945/760 +f 937/1946/761 938/1947/761 933/1948/761 +f 935/1949/762 932/1950/762 934/1951/762 +f 882/1823/710 873/1822/710 883/1834/710 +f 786/1924/633 785/1671/633 783/1670/633 +f 788/1676/634 787/1674/634 786/1673/634 +f 790/1952/635 789/1677/635 788/1676/635 +f 804/1698/644 783/1670/644 784/1672/644 +f 794/1683/637 793/1681/637 791/1679/637 +f 934/1939/759 933/1938/759 938/1953/759 +f 798/1688/639 797/1686/639 795/1685/639 +f 800/1690/640 799/1689/640 798/1688/640 +f 802/1692/641 801/1691/641 800/1690/641 +f 806/1954/642 803/1693/642 802/1692/642 +f 785/1694/643 803/1955/643 804/1695/643 +f 785/1694/643 801/1956/643 803/1955/643 +f 787/1957/643 801/1956/643 785/1694/643 +f 787/1957/643 799/1958/643 801/1956/643 +f 789/1959/643 792/1960/643 787/1957/643 +f 787/1957/643 792/1960/643 799/1958/643 +f 792/1960/643 793/1961/643 799/1958/643 +f 799/1958/643 793/1961/643 797/1962/643 +f 830/1734/660 819/1720/660 831/1736/660 +f 805/1697/645 804/1698/645 806/1699/645 +f 806/1963/646 802/1964/646 805/1702/646 +f 916/1875/742 908/1861/742 917/1965/742 +f 786/1703/646 802/1964/646 788/1966/646 +f 802/1964/646 800/1967/646 788/1966/646 +f 788/1966/646 800/1967/646 790/1968/646 +f 790/1968/646 794/1969/646 791/1970/646 +f 800/1967/646 794/1969/646 790/1968/646 +f 798/1971/646 794/1969/646 800/1967/646 +f 795/1972/646 794/1969/646 798/1971/646 +f 810/1707/647 809/1705/647 807/1704/647 +f 844/1755/674 836/1754/674 845/1757/674 +f 814/1882/649 813/1710/649 811/1709/649 +f 817/1973/763 815/1713/763 814/1712/763 +f 817/1717/651 818/1716/651 919/1974/651 +f 819/1720/764 820/1719/764 821/1975/764 +f 823/1724/653 822/1722/653 820/1721/653 +f 841/1749/671 833/1737/671 842/1751/671 +f 808/1706/655 825/1726/655 807/1704/655 +f 809/1705/656 827/1728/656 808/1706/656 +f 869/1797/698 861/1784/698 870/1799/698 +f 813/1710/658 829/1731/658 812/1711/658 +f 829/1733/765 815/1713/765 830/1734/765 +f 872/1803/701 864/1802/701 873/1822/701 +f 821/1975/766 832/1735/766 819/1720/766 +f 822/1722/662 833/1737/662 821/1723/662 +f 825/1976/663 834/1739/663 822/1722/663 +f 891/1835/719 883/1834/719 892/1977/719 +f 827/1728/665 836/1741/665 826/1729/665 +f 828/1978/666 837/1743/666 827/1728/666 +f 829/1731/667 838/1744/667 828/1732/667 +f 830/1734/767 839/1746/767 829/1733/767 +f 793/1681/638 795/1684/638 796/1979/638 +f 840/1748/768 832/1735/768 841/1980/768 +f 900/1848/728 892/1847/728 901/1867/728 +f 834/1739/672 843/1750/672 833/1737/672 +f 826/1729/673 835/1742/673 834/1740/673 +f 834/1740/664 808/1706/664 826/1729/664 +f 809/1705/648 811/1708/648 812/1730/648 +f 838/1744/676 847/1758/676 837/1745/676 +f 839/1981/769 848/1761/769 838/1760/769 +f 839/1765/678 849/1764/678 925/1982/678 +f 850/1768/770 841/1767/770 851/1983/770 +f 842/1751/680 852/1769/680 841/1749/680 +f 843/1774/681 853/1772/681 842/1771/681 +f 835/1753/682 844/1755/682 843/1774/682 +f 845/1757/683 855/1775/683 844/1755/683 +f 846/1984/684 856/1777/684 845/1757/684 +f 847/1758/685 857/1778/685 846/1759/685 +f 857/1780/771 848/1761/771 858/1781/771 +f 822/1722/654 824/1725/654 825/1976/654 +f 851/1983/772 860/1782/772 850/1768/772 +f 852/1769/689 861/1784/689 851/1770/689 +f 797/1962/643 793/1961/643 796/1985/643 +f 844/1755/691 854/1776/691 853/1772/691 +f 855/1775/692 864/1788/692 854/1776/692 +f 856/1779/693 865/1791/693 855/1790/693 +f 857/1778/694 866/1793/694 856/1779/694 +f 858/1781/773 867/1794/773 857/1780/773 +f 823/1886/752 918/1877/752 824/1887/752 +f 868/1796/774 860/1782/774 869/1986/774 +f 896/1904/757 906/1903/757 924/1987/757 +f 862/1988/699 871/1798/699 861/1784/699 +f 899/1845/727 882/1823/727 891/1835/727 +f 827/1728/657 812/1730/657 828/1978/657 +f 865/1791/702 874/1804/702 864/1792/702 +f 866/1793/703 875/1806/703 865/1791/703 +f 867/1989/775 876/1808/775 866/1807/775 +f 930/1990/705 878/1811/705 877/1810/705 +f 877/1815/776 869/1814/776 879/1991/776 +f 870/1799/707 880/1816/707 869/1797/707 +f 871/1821/708 881/1819/708 870/1818/708 +f 863/1801/709 872/1803/709 871/1821/709 +f 861/1786/690 853/1772/690 862/1787/690 +f 874/1804/711 884/1824/711 873/1805/711 +f 884/1824/712 875/1806/712 885/1837/712 +f 885/1826/777 876/1808/777 886/1828/777 +f 877/1815/714 887/1827/714 876/1808/714 +f 879/1991/778 888/1829/778 877/1815/778 +f 880/1816/716 889/1830/716 879/1817/716 +f 881/1819/717 890/1832/717 880/1820/717 +f 872/1803/718 882/1823/718 881/1819/718 +f 839/1746/669 831/1736/669 840/1748/669 +f 845/1757/675 837/1756/675 846/1984/675 +f 908/1861/734 899/1844/734 909/1992/734 +f 886/1828/779 895/1839/779 885/1826/779 +f 887/1827/780 896/1841/780 886/1828/780 +f 896/1841/781 888/1829/781 897/1993/781 +f 889/1830/725 898/1842/725 888/1831/725 +f 890/1994/726 899/1844/726 889/1830/726 +f 867/1794/696 859/1783/696 868/1796/696 +f 892/1836/720 884/1824/720 893/1838/720 +f 893/1838/729 902/1849/729 892/1836/729 +f 894/1995/730 903/1851/730 893/1838/730 +f 895/1996/782 904/1853/782 894/1852/782 +f 923/1997/678 906/1856/678 904/1855/678 +f 905/1860/783 897/1859/783 907/1998/783 +f 898/1842/733 908/1861/733 897/1843/733 +f 871/1800/700 854/1776/700 863/1789/700 +f 891/1846/735 900/1848/735 899/1863/735 +f 901/1867/736 911/1865/736 900/1848/736 +f 902/1999/737 912/1868/737 901/1867/737 +f 903/1851/738 913/1869/738 902/1849/738 +f 913/1871/784 904/1853/784 914/1873/784 +f 905/1860/740 915/1872/740 904/1853/740 +f 907/1998/785 916/1874/785 905/1860/785 +f 893/1838/721 885/1837/721 894/1995/721 +f 909/1864/743 918/1877/743 908/1876/743 +f 900/1848/744 910/1866/744 909/1864/744 +f 911/1865/745 810/1879/745 910/1866/745 +f 912/1868/746 811/1881/746 911/1865/746 +f 913/1869/747 814/1882/747 912/1870/747 +f 914/1873/786 817/1883/786 913/1871/786 +f 915/1872/749 816/1885/749 914/1873/749 +f 816/1885/787 916/1874/787 820/2000/787 +f 917/1965/751 823/1724/751 916/1875/751 +f 926/1913/651 849/1912/651 927/2001/651 +f 910/1866/753 807/1880/753 918/1877/753 +f 818/2002/754 921/1889/754 919/1888/754 +f 919/2003/643 920/1747/643 817/1891/643 +f 920/2004/755 921/1894/755 815/1893/755 +f 921/2005/756 818/1897/756 819/1896/756 +f 924/2006/755 906/1900/755 922/1899/755 +f 805/1702/646 802/1964/646 786/1703/646 +f 895/1907/754 924/1906/754 922/2007/754 +f 922/2008/643 923/1909/643 895/1908/643 +f 858/1781/687 850/1768/687 859/1783/687 +f 925/2009/643 926/1915/643 839/1914/643 +f 927/2010/758 849/1918/758 850/1917/758 +f 926/2011/754 927/1921/754 848/1920/754 +f 878/2012/678 930/1923/678 928/1922/678 +f 929/2013/651 930/1926/651 876/1925/651 +f 928/2014/643 929/1929/643 867/1928/643 +f 867/1933/755 878/1932/755 928/2015/755 +f 937/1942/646 933/1935/646 931/1934/646 +f 789/1680/636 791/1679/636 792/1682/636 +f 938/2016/643 936/1941/643 934/1940/643 +f 936/2017/760 937/1944/760 935/1943/760 +f 936/2018/761 938/1947/761 937/1946/761 +f 931/2019/762 932/1950/762 935/1949/762 +o Wheel_Back_Right +v 2.802362 2.342700 4.069842 +v 2.802363 2.331936 3.391497 +v 2.808420 2.305865 3.419078 +v 2.514316 2.054904 2.763672 +v 2.802362 2.014275 2.809953 +v 2.514316 2.388159 3.373763 +v 2.073003 1.911396 2.927140 +v 2.226270 2.014275 2.809953 +v 2.226270 2.331936 3.391497 +v 2.802363 2.331936 3.391497 +v 2.514317 2.399451 4.085407 +v 2.073003 2.189574 3.436402 +v 2.226270 2.342700 4.069842 +v 2.802362 2.342700 4.069842 +v 2.802362 2.043683 4.663227 +v 2.073003 2.199000 4.030432 +v 2.073003 1.937149 4.550061 +v 2.226271 2.043683 4.663227 +v 2.514317 2.085756 4.707920 +v 2.802362 1.515007 5.012654 +v 2.073003 1.474185 4.856056 +v 2.226271 1.515006 5.012654 +v 2.514317 1.531128 5.074499 +v 2.802362 0.898329 5.024495 +v 2.073005 0.934157 4.866425 +v 2.226271 0.898329 5.024494 +v 2.520374 2.028834 2.818134 +v 2.520374 2.362088 3.402104 +v 2.808419 1.988204 2.862434 +v 2.079061 1.885326 2.974603 +v 2.079061 2.163503 3.462059 +v 2.232328 2.305865 3.419079 +v 2.232327 1.988204 2.862433 +v 2.520373 2.373381 4.083279 +v 2.808419 2.305865 3.419078 +v 2.079062 2.172929 4.030657 +v 2.232327 2.316629 4.068380 +v 2.520373 2.059686 4.679138 +v 2.808419 2.017613 4.636359 +v 2.079062 1.911079 4.528037 +v 2.232327 2.017612 4.636358 +v 2.520373 1.505058 5.030022 +v 2.808421 1.488936 4.970824 +v 2.079062 1.448114 4.820931 +v 2.232327 1.488936 4.970824 +v 2.520373 0.858109 5.041912 +v 2.808421 0.872258 4.982158 +v 2.079062 0.908087 4.830855 +v 2.232327 0.872258 4.982158 +v 2.514317 0.884179 5.086921 +v 2.808419 2.316629 4.068380 +v 2.808420 2.316629 4.068380 +v 2.493989 0.951980 2.716235 +v 2.543989 0.951980 2.716235 +v 2.543989 0.451980 2.850210 +v 2.493989 0.451980 2.850210 +v 2.543989 0.085955 3.216235 +v 2.493989 0.085955 3.216235 +v 2.543989 -0.048020 3.716235 +v 2.493989 -0.048020 3.716235 +v 2.493989 0.085955 4.216235 +v 2.543989 0.085955 4.216235 +v 2.543989 0.451980 4.582261 +v 2.493989 0.451980 4.582261 +v 2.493989 0.951980 4.716235 +v 2.543989 0.951980 4.716235 +v 2.543989 1.451980 4.582260 +v 2.493989 1.451980 4.582260 +v 2.543989 1.818006 4.216235 +v 2.493989 1.818006 4.216235 +v 2.543989 1.951980 3.716235 +v 2.493989 1.951980 3.716235 +v 2.543989 1.818006 3.216235 +v 2.543989 1.451981 2.850210 +v 2.493989 1.451981 2.850210 +v 2.493989 1.818006 3.216235 +v 2.514317 -0.188146 4.060782 +v 2.514316 -0.199439 3.413833 +v 2.802363 -0.142687 3.427982 +v 2.802363 -0.131923 4.044660 +v 2.955629 0.010439 4.003838 +v 2.955630 0.001013 3.463811 +v 2.902400 0.164422 3.504553 +v 2.902400 0.172327 3.957418 +v 2.667583 0.271080 3.438602 +v 2.361051 0.277992 4.032561 +v 2.667583 0.277992 4.032561 +v 2.433484 0.677965 4.027906 +v 2.361050 0.271080 3.438602 +v 2.126233 0.172327 3.957418 +v 2.126233 0.164422 3.504553 +v 2.073004 0.001013 3.463811 +v 2.073004 0.010439 4.003838 +v 2.226270 -0.131923 4.044660 +v 2.226270 -0.142687 3.427982 +v 2.514316 0.114256 2.847912 +v 2.802362 0.156330 2.888542 +v 2.955629 0.262863 2.991420 +v 2.902400 0.384009 3.108409 +v 2.667582 0.463081 3.184768 +v 2.361050 0.463081 3.184768 +v 2.126233 0.384009 3.108409 +v 2.073004 0.262863 2.991420 +v 2.226270 0.156330 2.888542 +v 2.514316 0.668884 2.514658 +v 2.802362 0.685006 2.570881 +v 2.955629 0.725828 2.713243 +v 2.902400 0.772248 2.875131 +v 2.667582 0.697105 2.980796 +v 2.361050 0.697105 2.980796 +v 2.126232 0.772248 2.875131 +v 2.073004 0.725828 2.713243 +v 2.226270 0.685006 2.570881 +v 2.514316 1.315833 2.503366 +v 2.802362 1.301684 2.560117 +v 2.955628 1.265855 2.703817 +v 2.902400 1.225113 2.867226 +v 2.667582 1.291064 2.973884 +v 2.433484 0.701760 3.380769 +v 2.361050 1.291064 2.973885 +v 2.126232 1.225113 2.867226 +v 2.073004 1.265855 2.703817 +v 2.226270 1.301684 2.560117 +v 2.514316 1.881754 2.817060 +v 2.802362 1.841124 2.859133 +v 2.955629 1.738246 2.965667 +v 2.902400 1.621257 3.086812 +v 2.667582 1.544898 3.165885 +v 2.361050 1.544898 3.165885 +v 2.126232 1.621257 3.086812 +v 2.073004 1.738246 2.965667 +v 2.226270 1.841124 2.859133 +v 2.514316 2.215008 3.371688 +v 2.802363 2.158785 3.387810 +v 2.955629 2.016423 3.428632 +v 2.902399 1.854535 3.475052 +v 2.667583 1.748870 3.399909 +v 2.361050 1.748870 3.399909 +v 2.126232 1.854535 3.475052 +v 2.073004 2.016423 3.428632 +v 2.226270 2.158785 3.387810 +v 2.514317 2.226301 4.018638 +v 2.802362 2.169550 4.004487 +v 2.955628 2.025850 3.968659 +v 2.902399 1.862440 3.927917 +v 2.667583 1.755782 3.993868 +v 2.361051 1.755782 3.993868 +v 2.433484 1.348897 3.404564 +v 2.126232 1.862440 3.927916 +v 2.073004 2.025850 3.968659 +v 2.226270 2.169550 4.004487 +v 2.514317 1.912606 4.584558 +v 2.802362 1.870533 4.543928 +v 2.955628 1.763999 4.441050 +v 2.902400 1.642853 4.324061 +v 2.667583 1.563781 4.247702 +v 2.361051 1.563781 4.247702 +v 2.126232 1.642853 4.324061 +v 2.073004 1.763999 4.441051 +v 2.226271 1.870533 4.543928 +v 2.514317 1.357978 4.917812 +v 2.802362 1.341856 4.861588 +v 2.955628 1.301035 4.719227 +v 2.902400 1.254614 4.557339 +v 2.667583 1.329757 4.451674 +v 2.361051 1.329757 4.451674 +v 2.126232 1.254614 4.557339 +v 2.073004 1.301035 4.719227 +v 2.226271 1.341856 4.861589 +v 2.514317 0.711029 4.929104 +v 2.802362 0.725179 4.872353 +v 2.955629 0.761007 4.728653 +v 2.902400 0.801750 4.565244 +v 2.667583 0.735798 4.458586 +v 2.361051 0.735798 4.458586 +v 2.433484 0.731144 4.058613 +v 2.126233 0.801750 4.565244 +v 2.073004 0.761007 4.728653 +v 2.226271 0.725179 4.872353 +v 2.514317 0.145108 4.615410 +v 2.802362 0.185738 4.573336 +v 2.955629 0.288616 4.466803 +v 2.902400 0.405605 4.345657 +v 2.667583 0.481964 4.266585 +v 2.361051 0.481964 4.266585 +v 2.126233 0.405605 4.345657 +v 2.073004 0.288616 4.466803 +v 2.226271 0.185738 4.573336 +v 2.667583 0.677965 4.027906 +v 2.667583 0.671053 3.433947 +v 2.433484 0.671053 3.433947 +v 2.667583 1.325102 4.051701 +v 2.667583 0.731144 4.058613 +v 2.433484 1.325102 4.051701 +v 2.667583 0.701760 3.380769 +v 2.667583 1.295719 3.373857 +v 2.433484 1.295719 3.373857 +v 2.667583 1.348897 3.404564 +v 2.667583 1.355809 3.998522 +v 2.433484 1.355809 3.998522 +v 1.872954 1.030662 3.762175 +v 1.872954 1.030662 3.662175 +v 1.872954 0.930661 3.662175 +v 2.622955 1.030661 3.662175 +v 2.622955 1.030661 3.762175 +v 2.622955 0.930661 3.762175 +v 1.872954 0.930661 3.762175 +v 2.622955 0.930661 3.662175 +vt 0.505526 0.712612 +vt 0.501432 0.812324 +vt 0.505513 0.816472 +vt 0.911038 0.256876 +vt 0.809306 0.257189 +vt 0.910683 0.300978 +vt 0.909096 0.189316 +vt 0.813439 0.213075 +vt 0.910412 0.212777 +vt 0.809743 0.623328 +vt 0.802385 0.525003 +vt 0.767033 0.617540 +vt 0.879881 0.601532 +vt 0.847297 0.523282 +vt 0.854311 0.617005 +vt 0.759950 0.422158 +vt 0.760018 0.523817 +vt 0.873738 0.519458 +vt 0.873679 0.430435 +vt 0.847229 0.421622 +vt 0.802314 0.418354 +vt 0.766848 0.339804 +vt 0.879719 0.358318 +vt 0.854125 0.339269 +vt 0.078700 0.934788 +vt 0.035491 0.837783 +vt 0.034640 0.930186 +vt 0.717705 0.625829 +vt 0.644609 0.664429 +vt 0.733319 0.644430 +vt 0.122836 0.930997 +vt 0.123687 0.838594 +vt 0.884858 0.579046 +vt 0.879881 0.623132 +vt 0.951706 0.579252 +vt 0.478460 0.803029 +vt 0.500209 0.712612 +vt 0.478430 0.717127 +vt 0.880152 0.534932 +vt 0.943872 0.535128 +vt 0.569934 0.627770 +vt 0.526132 0.633686 +vt 0.569142 0.723746 +vt 0.638417 0.647297 +vt 0.613524 0.724631 +vt 0.637757 0.727411 +vt 0.614279 0.633145 +vt 0.526305 0.822962 +vt 0.570116 0.826337 +vt 0.638568 0.813047 +vt 0.614452 0.822421 +vt 0.528666 0.900853 +vt 0.572592 0.908051 +vt 0.297174 0.516355 +vt 0.317310 0.526612 +vt 0.319506 0.435521 +vt 0.616813 0.900312 +vt 0.879766 0.850786 +vt 0.954393 0.894658 +vt 0.949424 0.850572 +vt 0.342811 0.434304 +vt 0.296963 0.355991 +vt 0.887724 0.806661 +vt 0.954123 0.806458 +vt 0.759922 0.552109 +vt 0.754814 0.550893 +vt 0.717781 0.382442 +vt 0.715956 0.387746 +vt 0.759950 0.463023 +vt 0.180286 0.719972 +vt 0.172762 0.815779 +vt 0.178395 0.816963 +vt 0.644715 0.331957 +vt 0.644388 0.340242 +vt 0.078713 0.832630 +vt 0.079592 0.837849 +vt 0.131320 0.639268 +vt 0.172719 0.720013 +vt 0.756373 0.464849 +vt 0.330417 0.702032 +vt 0.323102 0.798341 +vt 0.330475 0.803455 +vt 0.643343 0.684515 +vt 0.649849 0.688510 +vt 0.314149 0.815081 +vt 0.306193 0.772760 +vt 0.296963 0.773641 +vt 0.123805 0.900988 +vt 0.297217 0.728573 +vt 0.306170 0.727741 +vt 0.314792 0.700967 +vt 0.711695 0.622821 +vt 0.501514 0.712910 +vt 0.813711 0.301275 +vt 0.824177 0.189577 +vt 0.809550 0.331957 +vt 0.943601 0.623328 +vt 0.500243 0.810706 +vt 0.525377 0.725172 +vt 0.887994 0.894861 +vt 0.317070 0.343486 +vt 0.122808 0.833452 +vt 0.123687 0.639352 +vt 0.324874 0.700263 +vt 0.638568 0.661361 +vt 0.034610 0.832640 +vt 0.323102 0.814250 +vt 0.323045 0.700263 +vt 0.126152 0.904255 +vt 0.513624 0.783997 +vt 0.505969 0.783973 +vt 0.506188 0.712612 +vt 0.949158 0.484385 +vt 0.941584 0.484478 +vt 0.944659 0.410168 +vt 0.952233 0.410076 +vt 0.941800 0.332050 +vt 0.342811 0.743111 +vt 0.335156 0.743134 +vt 0.342603 0.674991 +vt 0.334948 0.675014 +vt 0.334704 0.595770 +vt 0.342359 0.595746 +vt 0.342147 0.526612 +vt 0.513843 0.627770 +vt 0.521494 0.627793 +vt 0.523482 0.675613 +vt 0.515832 0.675590 +vt 0.524301 0.748625 +vt 0.516650 0.748601 +vt 0.523728 0.827265 +vt 0.516078 0.827242 +vt 0.521918 0.890462 +vt 0.450942 0.332068 +vt 0.530171 0.331957 +vt 0.598820 0.371478 +vt 0.513381 0.863032 +vt 0.505726 0.863009 +vt 0.513181 0.928566 +vt 0.505526 0.928543 +vt 0.040464 0.599670 +vt 0.000848 0.531055 +vt 0.109074 0.639268 +vt 0.830015 0.623328 +vt 0.837273 0.712605 +vt 0.792389 0.714799 +vt 0.785470 0.629699 +vt 0.759950 0.644760 +vt 0.538369 0.331957 +vt 0.455687 0.331872 +vt 0.462495 0.306756 +vt 0.758447 0.693332 +vt 0.757332 0.757109 +vt 0.721737 0.772501 +vt 0.340460 0.815081 +vt 0.340316 0.862012 +vt 0.297072 0.826038 +vt 0.676280 0.688510 +vt 0.674834 0.772357 +vt 0.639684 0.692967 +vt 0.225458 0.066465 +vt 0.158175 0.049709 +vt 0.157773 0.024179 +vt 0.238007 0.044160 +vt 0.248859 0.023650 +vt 0.872743 0.628628 +vt 0.879661 0.713728 +vt 0.837383 0.811379 +vt 0.792493 0.808950 +vt 0.766009 0.719283 +vt 0.384108 0.290468 +vt 0.402470 0.272035 +vt 0.757402 0.825953 +vt 0.722019 0.819569 +vt 0.675115 0.819426 +vt 0.638639 0.825588 +vt 0.091518 0.068826 +vt 0.078288 0.046975 +vt 0.066469 0.026864 +vt 0.879766 0.807880 +vt 0.830315 0.893182 +vt 0.785756 0.886926 +vt 0.760201 0.870015 +vt 0.342811 0.218841 +vt 0.367839 0.211969 +vt 0.758639 0.881416 +vt 0.722613 0.861988 +vt 0.675710 0.861844 +vt 0.043349 0.118696 +vt 0.020847 0.106443 +vt 0.000874 0.094773 +vt 0.873029 0.885856 +vt 0.410909 0.627770 +vt 0.410612 0.724746 +vt 0.366797 0.631670 +vt 0.366513 0.724108 +vt 0.343300 0.641815 +vt 0.342862 0.136182 +vt 0.367882 0.142652 +vt 0.880326 0.806458 +vt 0.880176 0.757653 +vt 0.916070 0.738915 +vt 0.651005 0.881416 +vt 0.697339 0.884549 +vt 0.661972 0.937679 +vt 0.963197 0.803150 +vt 0.963001 0.738770 +vt 0.999158 0.806093 +vt 0.026573 0.185955 +vt 0.000842 0.186648 +vt 0.478430 0.642230 +vt 0.478182 0.723178 +vt 0.454713 0.724378 +vt 0.454997 0.631940 +vt 0.410323 0.818844 +vt 0.366238 0.813802 +vt 0.342811 0.801309 +vt 0.384247 0.064640 +vt 0.402587 0.082657 +vt 0.879972 0.690756 +vt 0.915922 0.690567 +vt 0.962852 0.690423 +vt 0.998802 0.690392 +vt 0.045687 0.252581 +vt 0.023635 0.266097 +vt 0.477941 0.801725 +vt 0.454438 0.814073 +vt 0.410121 0.884850 +vt 0.366045 0.876721 +vt 0.368574 0.047943 +vt 0.450371 0.000831 +vt 0.455878 0.023384 +vt 0.462656 0.048059 +vt 0.879766 0.623692 +vt 0.915776 0.643196 +vt 0.962706 0.643052 +vt 0.095568 0.300722 +vt 0.083117 0.323505 +vt 0.071984 0.342642 +vt 0.454245 0.876992 +vt 0.227805 0.639268 +vt 0.227051 0.730389 +vt 0.184003 0.645063 +vt 0.544788 0.000929 +vt 0.538560 0.023470 +vt 0.531993 0.048131 +vt 0.005731 0.829247 +vt 0.000842 0.766738 +vt 0.037804 0.750424 +vt 0.941584 0.331962 +vt 0.941398 0.422896 +vt 0.879881 0.422891 +vt 0.090587 0.832202 +vt 0.084243 0.749997 +vt 0.123318 0.828165 +vt 0.162852 0.317479 +vt 0.163350 0.343486 +vt 0.296292 0.658368 +vt 0.295662 0.734429 +vt 0.271432 0.731379 +vt 0.272151 0.644522 +vt 0.228056 0.828732 +vt 0.183284 0.731920 +vt 0.626527 0.048208 +vt 0.610139 0.064873 +vt 0.000978 0.697596 +vt 0.038890 0.702846 +vt 0.085329 0.702418 +vt 0.118564 0.696514 +vt 0.229508 0.298361 +vt 0.242837 0.320688 +vt 0.296500 0.816519 +vt 0.272390 0.825121 +vt 0.230552 0.907946 +vt 0.184242 0.825662 +vt 0.673686 0.130002 +vt 0.651436 0.136500 +vt 0.592019 0.082852 +vt 0.006100 0.640350 +vt 0.041316 0.659523 +vt 0.087755 0.659095 +vt 0.277678 0.248491 +vt 0.300278 0.261221 +vt 0.319968 0.271519 +vt 0.274769 0.900629 +vt 0.740988 0.261926 +vt 0.741202 0.192204 +vt 0.785112 0.254285 +vt 0.673628 0.224394 +vt 0.651385 0.219160 +vt 0.626607 0.212235 +vt 0.809858 0.181152 +vt 0.809649 0.113269 +vt 0.845561 0.100185 +vt 0.183284 0.908088 +vt 0.229724 0.907946 +vt 0.222683 0.963363 +vt 0.892764 0.189172 +vt 0.892491 0.100041 +vt 0.928690 0.180787 +vt 0.294454 0.181233 +vt 0.320282 0.181017 +vt 0.696912 0.254015 +vt 0.697116 0.187555 +vt 0.741495 0.096636 +vt 0.785595 0.096730 +vt 0.785316 0.187826 +vt 0.809060 0.096697 +vt 0.609999 0.290702 +vt 0.591902 0.272231 +vt 0.809448 0.047401 +vt 0.845426 0.056510 +vt 0.892357 0.056365 +vt 0.928279 0.047036 +vt 0.275340 0.114607 +vt 0.673686 0.176055 +vt 0.673931 0.096282 +vt 0.697396 0.096460 +vt 0.741789 0.000831 +vt 0.785876 0.005407 +vt 0.809306 0.016725 +vt 0.531832 0.306828 +vt 0.809306 0.001196 +vt 0.845312 0.019129 +vt 0.892242 0.018986 +vt 0.674176 0.016311 +vt 0.697675 0.005137 +vt 0.297059 0.700263 +vt 0.296963 0.616402 +vt 0.332779 0.615853 +vt 0.697358 0.972349 +vt 0.697422 0.881416 +vt 0.673686 0.271936 +vt 0.720616 0.271792 +vt 0.709710 0.331848 +vt 0.879860 0.985796 +vt 0.879766 0.894861 +vt 0.940684 0.894960 +vt 0.297236 0.615853 +vt 0.296963 0.526722 +vt 0.332803 0.526612 +vt 0.941258 0.444023 +vt 0.941321 0.534932 +vt 0.879881 0.443788 +vt 0.133383 0.904255 +vt 0.180286 0.904398 +vt 0.143492 0.960751 +vt 0.478430 0.884894 +vt 0.478402 0.975800 +vt 0.417169 0.975757 +vt 0.767744 0.331957 +vt 0.767547 0.267577 +vt 0.803584 0.331848 +vt 0.818505 0.984088 +vt 0.818532 0.893182 +vt 0.879766 0.893225 +vt 0.911101 0.280588 +vt 0.911038 0.189679 +vt 0.972132 0.189316 +vt 0.771605 0.893757 +vt 0.807314 0.949789 +vt 0.513816 0.630162 +vt 0.513843 0.712612 +vt 0.478457 0.710220 +vt 0.297106 0.908942 +vt 0.296963 0.862012 +vt 0.340350 0.872968 +vt 0.404092 0.884869 +vt 0.404028 0.975801 +vt 0.342811 0.975783 +vt 0.767547 0.331957 +vt 0.720616 0.331814 +vt 0.756641 0.271902 +vt 0.818894 0.331951 +vt 0.803585 0.331957 +vt 0.803584 0.316653 +vt 0.485203 0.925578 +vt 0.484851 0.810753 +vt 0.500243 0.925532 +vt 0.818889 0.301333 +vt 0.818888 0.316642 +vt 0.803584 0.316647 +vt 0.015117 0.947455 +vt 0.015470 0.832630 +vt 0.026433 0.832663 +vt 0.001191 0.833505 +vt 0.015117 0.832630 +vt 0.014769 0.946257 +vt 0.943226 0.115741 +vt 0.929041 0.115591 +vt 0.928690 0.000831 +vt 0.949375 0.331957 +vt 0.499890 0.810706 +vt 0.514268 0.890439 +vt 0.638497 0.440040 +vt 0.638568 0.519273 +vt 0.382364 0.371781 +vt 0.599016 0.587946 +vt 0.342811 0.440454 +vt 0.342883 0.519687 +vt 0.382559 0.588250 +vt 0.530438 0.627659 +vt 0.188294 0.639238 +vt 0.256896 0.599589 +vt 0.297490 0.101567 +vt 0.000842 0.451809 +vt 0.296500 0.530945 +vt 0.040446 0.383164 +vt 0.109050 0.343516 +vt 0.188269 0.343486 +vt 0.296494 0.451698 +vt 0.256879 0.383084 +vt 0.723184 0.688653 +vt 0.296963 0.861878 +vt 0.638568 0.756745 +vt 0.157237 0.000831 +vt 0.186621 0.901170 +vt 0.766101 0.801732 +vt 0.334492 0.526636 +vt 0.639875 0.881052 +vt 0.916268 0.803294 +vt 0.697358 0.940071 +vt 0.999008 0.757289 +vt 0.343052 0.722763 +vt 0.451209 0.627770 +vt 0.998597 0.623328 +vt 0.879944 0.534696 +vt 0.004059 0.277088 +vt 0.044149 0.832631 +vt 0.880066 0.331957 +vt 0.118429 0.765656 +vt 0.342811 0.179931 +vt 0.123687 0.639268 +vt 0.254373 0.339428 +vt 0.626650 0.142918 +vt 0.845834 0.189316 +vt 0.187217 0.963472 +vt 0.928481 0.112905 +vt 0.808816 0.176470 +vt 0.928138 0.000831 +vt 0.803387 0.267467 +vt 0.332875 0.699713 +vt 0.758574 0.972367 +vt 0.673871 0.331957 +vt 0.940778 0.985895 +vt 0.333077 0.615743 +vt 0.179311 0.960861 +vt 0.417197 0.884850 +vt 0.879738 0.984132 +vt 0.972195 0.280225 +vt 0.771497 0.950229 +vt 0.478430 0.627770 +vt 0.340460 0.908809 +vt 0.342876 0.884850 +vt 0.720800 0.271792 +vt 0.803585 0.301338 +vt 0.026081 0.947489 +vt 0.000842 0.947131 +vt 0.942874 0.000982 +vn 0.974900 0.222800 -0.003500 +vn 0.196900 0.860400 -0.470000 +vn -0.690900 0.634500 -0.346600 +vn -0.196900 0.860400 -0.470000 +vn 0.192500 0.981200 -0.015600 +vn -0.682300 0.730900 -0.011600 +vn -0.192500 0.981200 -0.015600 +vn 0.196400 0.875600 0.441200 +vn -0.689900 0.646500 0.325800 +vn -0.196400 0.875600 0.441200 +vn 0.205500 0.539600 0.816400 +vn -0.706800 0.390000 0.590100 +vn -0.205500 0.539600 0.816400 +vn 0.210900 0.018800 0.977300 +vn -0.716300 0.013400 0.697600 +vn -0.210900 0.018800 0.977300 +vn -0.194900 -0.851900 0.486100 +vn 0.687100 -0.631000 0.360100 +vn 0.194900 -0.851900 0.486100 +vn -0.192500 -0.981200 0.016300 +vn 0.682300 -0.730900 0.012100 +vn 0.192500 -0.981200 0.016300 +vn -0.194600 -0.867900 -0.456900 +vn 0.686600 -0.643400 -0.338700 +vn 0.194600 -0.867900 -0.456900 +vn -0.199500 -0.523900 -0.828100 +vn 0.695800 -0.384000 -0.606900 +vn 0.199500 -0.523900 -0.828100 +vn -0.202200 -0.018000 -0.979200 +vn 0.700900 -0.013100 -0.713100 +vn 0.202200 -0.018000 -0.979200 +vn -0.983300 -0.100300 -0.151800 +vn -0.974800 -0.223000 0.003500 +vn 0.986700 0.089600 0.135500 +vn -0.991300 -0.115500 0.063100 +vn -0.146700 -0.864400 0.480900 +vn 0.989900 0.002700 0.141700 +vn -0.967500 -0.225800 -0.113800 +vn 0.992100 0.109800 -0.060000 +vn -0.559600 -0.739100 0.375100 +vn 0.152200 -0.846200 0.510600 +vn -0.059000 -0.903000 -0.425700 +vn 0.985800 0.148500 0.078200 +vn 0.056600 -0.898100 -0.436200 +vn 0.230400 -0.860600 -0.454100 +vn -0.985800 -0.003200 -0.167600 +vn 0.974000 0.226500 -0.003800 +vn -0.990500 -0.073500 -0.116200 +vn -0.974000 -0.226300 0.003800 +vn 0.992500 0.065200 0.103100 +vn -0.985600 -0.146700 0.083700 +vn -0.146300 -0.851500 0.503500 +vn 0.990100 0.002600 0.140100 +vn -0.983900 -0.158300 -0.083300 +vn 0.986400 0.142900 -0.081500 +vn -0.576100 -0.702900 0.417100 +vn 0.151600 -0.831800 0.533900 +vn -0.059000 -0.896700 -0.438700 +vn 0.056600 -0.891500 -0.449400 +vn 0.208300 -0.845800 -0.491200 +vn -0.986200 -0.003000 -0.165700 +vn 0.969500 0.219000 0.110400 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 -0.965900 0.258800 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.965900 0.258800 +vn 0.000000 0.965900 -0.258800 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.707100 -0.707100 +vn -1.000000 0.000000 0.000000 +vn 0.192500 -0.981200 0.017100 +vn 0.682300 -0.730900 0.012800 +vn 0.950400 0.310900 -0.005400 +vn 0.417200 0.908700 -0.015900 +vn 0.000000 0.011600 0.999900 +vn -0.407500 0.913100 -0.010600 +vn -0.950400 0.310900 -0.005400 +vn -0.682300 -0.730900 0.012800 +vn -0.192500 -0.981200 0.017100 +vn 0.192500 -0.858300 -0.475700 +vn 0.682300 -0.639400 -0.354400 +vn 0.950400 0.272000 0.150800 +vn 0.252600 0.846200 0.469100 +vn 0.000000 0.797500 0.603300 +vn -0.421400 0.723300 0.547100 +vn -0.950400 0.272000 0.150800 +vn -0.682300 -0.639400 -0.354400 +vn -0.192500 -0.858300 -0.475700 +vn 0.192500 -0.505400 -0.841100 +vn 0.682300 -0.376500 -0.626600 +vn 0.950400 0.160200 0.266600 +vn 0.215700 0.502900 0.837000 +vn 0.000000 0.657000 0.753900 +vn -0.422700 0.595500 0.683200 +vn -0.950400 0.160200 0.266600 +vn -0.682300 -0.376500 -0.626600 +vn -0.192500 -0.505400 -0.841100 +vn 0.192500 -0.017100 -0.981200 +vn 0.682300 -0.012800 -0.730900 +vn 0.950400 0.005400 0.310900 +vn 0.417200 0.015900 0.908700 +vn 0.000000 -0.999900 0.011600 +vn -0.407500 0.010600 0.913100 +vn -0.950400 0.005400 0.310900 +vn -0.682300 -0.012800 -0.730900 +vn -0.192500 -0.017100 -0.981200 +vn 0.192500 0.475700 -0.858300 +vn 0.682300 0.354400 -0.639400 +vn 0.950400 -0.150800 0.272000 +vn 0.252600 -0.469100 0.846200 +vn 0.000000 -0.603300 0.797500 +vn -0.421400 -0.547100 0.723300 +vn -0.950400 -0.150800 0.272000 +vn -0.682300 0.354400 -0.639400 +vn -0.192500 0.475700 -0.858300 +vn 0.192500 0.841100 -0.505400 +vn 0.682300 0.626600 -0.376500 +vn 0.950400 -0.266600 0.160200 +vn 0.215700 -0.837000 0.502900 +vn -0.000000 -0.753800 0.657000 +vn -0.422700 -0.683200 0.595500 +vn -0.950400 -0.266600 0.160200 +vn -0.682300 0.626600 -0.376500 +vn -0.192500 0.841100 -0.505400 +vn 0.192500 0.981200 -0.017100 +vn 0.682300 0.730900 -0.012800 +vn 0.950400 -0.310900 0.005400 +vn 0.417200 -0.908700 0.015900 +vn -0.984000 -0.178200 0.002100 +vn -0.407500 -0.913100 0.010600 +vn -0.950400 -0.310900 0.005400 +vn -0.682300 0.730900 -0.012800 +vn -0.192500 0.981200 -0.017100 +vn 0.192500 0.858300 0.475700 +vn 0.682300 0.639400 0.354400 +vn 0.950400 -0.272000 -0.150800 +vn 0.252600 -0.846200 -0.469100 +vn 0.000000 -0.797500 -0.603300 +vn -0.421400 -0.723300 -0.547100 +vn -0.950400 -0.272000 -0.150800 +vn -0.682300 0.639400 0.354400 +vn -0.192500 0.858300 0.475700 +vn 0.192500 0.505400 0.841100 +vn 0.682300 0.376500 0.626600 +vn 0.950400 -0.160200 -0.266600 +vn 0.215700 -0.502900 -0.837000 +vn -0.000000 -0.657000 -0.753900 +vn -0.422700 -0.595500 -0.683200 +vn -0.950400 -0.160200 -0.266600 +vn -0.682300 0.376500 0.626600 +vn -0.192500 0.505400 0.841100 +vn 0.192500 0.017100 0.981200 +vn 0.682300 0.012800 0.730900 +vn 0.950400 -0.005400 -0.310900 +vn 0.417200 -0.015900 -0.908700 +vn -0.407500 -0.010600 -0.913100 +vn -0.950400 -0.005400 -0.310900 +vn -0.682300 0.012800 0.730900 +vn -0.192500 0.017100 0.981200 +vn 0.192500 -0.475700 0.858300 +vn 0.682300 -0.354400 0.639400 +vn 0.950400 0.150800 -0.272000 +vn 0.252600 0.469100 -0.846200 +vn 0.000000 0.603300 -0.797500 +vn -0.421400 0.547100 -0.723300 +vn -0.950400 0.150800 -0.272000 +vn -0.682300 -0.354400 0.639400 +vn -0.192500 -0.475700 0.858300 +vn 0.192500 -0.841100 0.505400 +vn 0.682300 -0.626600 0.376500 +vn 0.950400 0.266600 -0.160200 +vn 0.215700 0.837000 -0.502900 +vn 0.000000 0.753900 -0.657000 +vn -0.422700 0.683200 -0.595500 +vn -0.950400 0.266600 -0.160200 +vn -0.682300 -0.626600 0.376500 +vn -0.192500 -0.841100 0.505400 +vn 0.000000 0.999900 -0.011600 +vn 0.000000 -0.011600 -0.999900 +vn -0.984000 0.178200 -0.002100 +vn -0.984000 -0.002100 -0.178200 +vn -0.984000 0.002100 0.178200 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.407500 0.913100 -0.010600 +vn -0.417200 0.908700 -0.015900 +vn 0.421400 0.723300 0.547100 +vn -0.252600 0.846200 0.469100 +vn 0.422700 0.595500 0.683200 +vn -0.215700 0.502900 0.837000 +vn 0.407500 0.010600 0.913100 +vn -0.417200 0.015900 0.908700 +vn 0.421400 -0.547100 0.723300 +vn -0.252600 -0.469100 0.846200 +vn 0.422700 -0.683200 0.595500 +vn -0.215700 -0.837000 0.502900 +vn 0.407500 -0.913100 0.010600 +vn -0.417200 -0.908700 0.015900 +vn 0.421400 -0.723300 -0.547100 +vn -0.252600 -0.846200 -0.469100 +vn 0.422700 -0.595500 -0.683200 +vn 0.000000 -0.657000 -0.753800 +vn -0.215700 -0.502900 -0.837000 +vn 0.000000 -0.753900 0.657000 +vn 0.407500 -0.010600 -0.913100 +vn -0.417200 -0.015900 -0.908700 +vn 0.421400 0.547100 -0.723300 +vn -0.252600 0.469100 -0.846300 +vn 0.422700 0.683200 -0.595500 +vn -0.215700 0.837000 -0.502900 +usemtl None.022 +f 939/2020/788 941/2021/788 940/2022/788 +f 942/2023/789 944/2024/789 943/2025/789 +f 945/2026/790 947/2027/790 946/2028/790 +f 946/2028/791 944/2024/791 942/2023/791 +f 944/2029/792 949/2030/792 948/2031/792 +f 950/2032/793 951/2033/793 947/2034/793 +f 947/2034/794 949/2030/794 944/2029/794 +f 949/2030/795 953/2035/795 952/2036/795 +f 954/2037/796 955/2038/796 951/2033/796 +f 951/2033/797 956/2039/797 949/2030/797 +f 957/2040/798 958/2041/798 953/2035/798 +f 955/2038/799 959/2042/799 956/2039/799 +f 956/2039/800 960/2043/800 957/2040/800 +f 961/2044/801 962/2045/801 958/2046/801 +f 959/2047/802 963/2048/802 960/2049/802 +f 960/2050/803 964/2051/803 961/2044/803 +f 965/2052/804 967/2053/804 966/2054/804 +f 968/2055/805 970/2056/805 969/2057/805 +f 971/2058/806 966/2054/806 970/2059/806 +f 966/2060/807 973/2061/807 972/2062/807 +f 969/2063/808 975/2064/808 974/2065/808 +f 970/2066/809 972/2062/809 975/2064/809 +f 972/2062/810 977/2067/810 976/2068/810 +f 974/2065/811 975/2064/811 978/2069/811 +f 975/2064/812 972/2062/812 979/2070/812 +f 976/2068/813 981/2071/813 980/2072/813 +f 978/2073/814 979/2074/814 982/2075/814 +f 979/2070/815 976/2068/815 983/2076/815 +f 980/2077/816 985/2078/816 984/2079/816 +f 982/2075/817 983/2080/817 986/2081/817 +f 983/2082/818 980/2077/818 987/2083/818 +f 955/2084/819 978/2085/819 959/2047/819 +f 950/2086/820 969/2087/820 954/2088/820 +f 958/2089/821 977/2090/821 953/2091/821 +f 945/2092/822 968/2093/822 950/2086/822 +f 964/2051/823 984/2094/823 988/2095/823 +f 962/2096/824 981/2097/824 958/2089/824 +f 954/2088/825 974/2098/825 955/2084/825 +f 948/2099/826 967/2100/826 943/2101/826 +f 963/2048/827 987/2102/827 964/2103/827 +f 988/2095/828 984/2094/828 962/2045/828 +f 943/2104/829 965/2105/829 942/2106/829 +f 977/2090/830 989/2107/830 953/2091/830 +f 942/2106/831 965/2105/831 946/2108/831 +f 946/2108/832 971/2109/832 945/2110/832 +f 959/2047/833 982/2111/833 963/2048/833 +f 990/2112/834 941/2021/834 939/2020/834 +f 943/2025/789 944/2024/789 948/2113/789 +f 950/2114/790 947/2027/790 945/2026/790 +f 947/2027/791 944/2024/791 946/2028/791 +f 948/2031/792 949/2030/792 952/2036/792 +f 954/2037/793 951/2033/793 950/2032/793 +f 951/2033/794 949/2030/794 947/2034/794 +f 957/2040/795 953/2035/795 949/2030/795 +f 951/2033/796 955/2038/796 956/2039/796 +f 949/2030/797 956/2039/797 957/2040/797 +f 961/2115/798 958/2041/798 957/2040/798 +f 956/2039/799 959/2042/799 960/2043/799 +f 957/2040/800 960/2043/800 961/2115/800 +f 988/2095/801 962/2045/801 961/2044/801 +f 960/2049/802 963/2048/802 964/2103/802 +f 961/2044/803 964/2051/803 988/2095/803 +f 966/2054/804 967/2053/804 973/2116/804 +f 971/2117/805 970/2056/805 968/2055/805 +f 965/2052/806 966/2054/806 971/2058/806 +f 972/2062/807 973/2061/807 989/2118/807 +f 970/2066/808 975/2064/808 969/2063/808 +f 966/2060/809 972/2062/809 970/2066/809 +f 989/2118/810 977/2067/810 972/2062/810 +f 978/2069/811 975/2064/811 979/2070/811 +f 979/2070/812 972/2062/812 976/2068/812 +f 977/2067/813 981/2071/813 976/2068/813 +f 982/2075/814 979/2074/814 983/2080/814 +f 983/2076/815 976/2068/815 980/2072/815 +f 981/2119/816 985/2078/816 980/2077/816 +f 986/2081/817 983/2080/817 987/2120/817 +f 987/2083/818 980/2077/818 984/2079/818 +f 959/2047/835 978/2085/835 982/2111/835 +f 954/2088/836 969/2087/836 974/2098/836 +f 981/2097/837 977/2090/837 958/2089/837 +f 950/2086/838 968/2093/838 969/2087/838 +f 987/2121/839 984/2094/839 964/2051/839 +f 985/2122/840 981/2097/840 962/2096/840 +f 955/2084/841 974/2098/841 978/2085/841 +f 973/2123/842 967/2100/842 948/2099/842 +f 986/2124/843 987/2102/843 963/2048/843 +f 962/2045/844 984/2094/844 985/2125/844 +f 967/2126/845 965/2105/845 943/2104/845 +f 946/2108/846 965/2105/846 971/2109/846 +f 945/2110/847 971/2109/847 968/2127/847 +f 963/2048/848 982/2111/848 986/2124/848 +f 953/2091/849 989/2107/849 952/2128/849 +f 991/2129/850 992/2130/850 993/2131/850 +f 994/2132/851 993/2133/851 995/2134/851 +f 996/2135/852 995/2134/852 997/2136/852 +f 998/2137/853 997/2138/853 999/2139/853 +f 999/2139/854 1000/2140/854 1001/2141/854 +f 1002/2142/855 1001/2141/855 1003/2143/855 +f 1003/2144/856 1004/2145/856 1005/2146/856 +f 1006/2147/857 1005/2146/857 1007/2148/857 +f 1008/2149/858 1007/2148/858 1009/2150/858 +f 1010/2151/859 1009/2150/859 1011/2152/859 +f 993/2153/860 992/2154/860 1012/2155/860 +f 1013/2156/861 1012/2157/861 991/2129/861 +f 1014/2158/862 1011/2159/862 1012/2157/862 +f 991/2160/863 994/2161/863 1013/2162/863 +f 1015/2163/864 1016/2164/864 1017/2165/864 +f 1018/2166/865 1017/2165/865 1019/2167/865 +f 1019/2168/866 1020/2169/866 1021/2170/866 +f 1022/2171/867 1021/2172/867 1023/2173/867 +f 1024/2174/868 1025/2175/868 1026/2176/868 +f 1024/2177/869 1027/2178/869 1028/2179/869 +f 1028/2180/870 1029/2181/870 1030/2182/870 +f 1031/2183/871 1030/2182/871 1032/2184/871 +f 1015/2163/872 1032/2185/872 1033/2186/872 +f 1016/2164/873 1034/2187/873 1035/2188/873 +f 1017/2165/874 1035/2188/874 1020/2189/874 +f 1020/2169/875 1036/2190/875 1037/2191/875 +f 1021/2172/876 1037/2192/876 1023/2173/876 +f 1023/2173/877 1038/2193/877 1027/2178/877 +f 1027/2178/878 1039/2194/878 1040/2195/878 +f 1029/2181/879 1040/2196/879 1041/2197/879 +f 1030/2182/880 1041/2197/880 1042/2198/880 +f 1033/2186/881 1042/2199/881 1016/2164/881 +f 1034/2187/882 1043/2200/882 1044/2201/882 +f 1035/2188/883 1044/2201/883 1045/2202/883 +f 1036/2190/884 1045/2203/884 1046/2204/884 +f 1037/2192/885 1046/2205/885 1047/2206/885 +f 1038/2193/886 1047/2206/886 1039/2194/886 +f 1039/2194/887 1048/2207/887 1040/2195/887 +f 1040/2196/888 1049/2208/888 1041/2197/888 +f 1041/2197/889 1050/2209/889 1051/2210/889 +f 1042/2199/890 1051/2211/890 1043/2200/890 +f 1043/2212/891 1052/2213/891 1044/2214/891 +f 1044/2214/892 1053/2215/892 1045/2216/892 +f 1045/2203/893 1054/2217/893 1055/2218/893 +f 1046/2219/894 1055/2220/894 1056/2221/894 +f 1048/2222/895 1047/2223/895 1057/2224/895 +f 1048/2225/896 1058/2226/896 1049/2227/896 +f 1049/2208/897 1059/2228/897 1060/2229/897 +f 1050/2230/898 1060/2231/898 1061/2232/898 +f 1051/2233/899 1061/2232/899 1052/2213/899 +f 1052/2213/900 1062/2234/900 1063/2235/900 +f 1053/2215/901 1063/2235/901 1064/2236/901 +f 1054/2217/902 1064/2237/902 1065/2238/902 +f 1055/2220/903 1065/2239/903 1056/2221/903 +f 1056/2221/904 1066/2240/904 1058/2226/904 +f 1058/2226/905 1067/2241/905 1068/2242/905 +f 1059/2228/906 1068/2243/906 1069/2244/906 +f 1060/2231/907 1069/2245/907 1061/2232/907 +f 1061/2232/908 1070/2246/908 1062/2234/908 +f 1062/2234/909 1071/2247/909 1072/2248/909 +f 1063/2249/910 1072/2250/910 1073/2251/910 +f 1064/2237/911 1073/2251/911 1074/2252/911 +f 1065/2239/912 1074/2253/912 1075/2254/912 +f 1066/2240/913 1075/2254/913 1067/2241/913 +f 1067/2241/914 1076/2255/914 1068/2242/914 +f 1068/2243/915 1077/2256/915 1069/2244/915 +f 1069/2244/916 1078/2257/916 1079/2258/916 +f 1070/2246/917 1079/2259/917 1062/2234/917 +f 1071/2260/918 1080/2261/918 1072/2262/918 +f 1072/2250/919 1081/2263/919 1082/2264/919 +f 1073/2251/920 1082/2264/920 1083/2265/920 +f 1074/2266/921 1083/2267/921 1084/2268/921 +f 1085/2269/922 1076/2270/922 1086/2271/922 +f 1076/2272/923 1085/2273/923 1077/2274/923 +f 1077/2256/924 1087/2275/924 1088/2276/924 +f 1078/2277/925 1088/2278/925 1089/2279/925 +f 1079/2280/926 1089/2279/926 1080/2261/926 +f 1080/2261/927 1090/2281/927 1081/2282/927 +f 1081/2263/928 1091/2283/928 1092/2284/928 +f 1082/2264/929 1092/2284/929 1083/2265/929 +f 1083/2267/930 1093/2285/930 1084/2268/930 +f 1084/2268/931 1094/2286/931 1095/2287/931 +f 1085/2273/932 1095/2287/932 1096/2288/932 +f 1087/2275/933 1096/2289/933 1097/2290/933 +f 1088/2278/934 1097/2291/934 1098/2292/934 +f 1089/2279/935 1098/2292/935 1090/2281/935 +f 1090/2281/936 1099/2293/936 1091/2294/936 +f 1091/2283/937 1100/2295/937 1092/2284/937 +f 1092/2284/938 1101/2296/938 1093/2297/938 +f 1093/2285/939 1102/2298/939 1103/2299/939 +f 1094/2286/940 1103/2299/940 1104/2300/940 +f 1095/2287/941 1104/2300/941 1096/2288/941 +f 1096/2289/942 1105/2301/942 1106/2302/942 +f 1097/2290/943 1106/2302/943 1107/2303/943 +f 1098/2292/944 1107/2304/944 1090/2281/944 +f 1099/2305/945 1108/2306/945 1100/2307/945 +f 1100/2295/946 1109/2308/946 1110/2309/946 +f 1101/2296/947 1110/2309/947 1111/2310/947 +f 1102/2311/948 1111/2312/948 1112/2313/948 +f 1112/2314/895 1113/2315/895 1114/2316/895 +f 1104/2317/949 1113/2318/949 1105/2319/949 +f 1105/2301/950 1115/2320/950 1116/2321/950 +f 1106/2302/951 1116/2321/951 1107/2303/951 +f 1107/2322/952 1117/2323/952 1108/2306/952 +f 1108/2306/953 1118/2324/953 1119/2325/953 +f 1109/2326/954 1119/2325/954 1120/2327/954 +f 1110/2309/955 1120/2328/955 1121/2329/955 +f 1111/2312/956 1121/2330/956 1112/2313/956 +f 1112/2313/957 1122/2331/957 1123/2332/957 +f 1113/2318/958 1123/2332/958 1124/2333/958 +f 1115/2320/959 1124/2334/959 1116/2321/959 +f 1116/2335/960 1125/2336/960 1126/2337/960 +f 1117/2323/961 1126/2337/961 1118/2324/961 +f 1118/2324/962 1015/2338/962 1018/2339/962 +f 1119/2325/963 1018/2339/963 1019/2340/963 +f 1120/2328/964 1019/2168/964 1022/2341/964 +f 1121/2330/965 1022/2342/965 1025/2343/965 +f 1122/2331/966 1025/2343/966 1024/2344/966 +f 1123/2332/967 1024/2344/967 1124/2333/967 +f 1124/2334/968 1028/2180/968 1031/2183/968 +f 1125/2336/969 1031/2345/969 1126/2337/969 +f 1126/2337/970 1032/2346/970 1015/2338/970 +f 1127/2347/971 1128/2348/971 1129/2349/971 +f 1025/2350/860 1023/2351/860 1128/2205/860 +f 1023/2352/972 1027/2353/972 1129/2354/972 +f 1027/2355/973 1024/2356/973 1026/2357/973 +f 1130/2358/972 1131/2359/972 1114/2360/972 +f 1113/2361/974 1104/2362/974 1114/2363/974 +f 1104/2364/971 1103/2365/971 1132/2366/971 +f 1103/2367/860 1112/2368/860 1131/2369/860 +f 1133/2370/868 1134/2371/868 1057/2372/868 +f 1047/2373/860 1056/2374/860 1134/2375/860 +f 1058/2376/975 1048/2377/975 1057/2378/975 +f 1056/2379/971 1058/2374/971 1135/2380/971 +f 1136/2381/895 1137/2382/895 1138/2383/895 +f 1084/2384/868 1085/2385/868 1138/2386/868 +f 1075/2387/860 1084/2388/860 1137/2389/860 +f 1076/2390/972 1075/2391/972 1086/2392/972 +f 1139/2393/863 1140/2394/863 1141/2395/863 +f 1140/2396/976 1142/2397/976 1141/2398/976 +f 1142/2399/860 1143/2400/860 1144/2401/860 +f 1143/2402/977 1139/2403/977 1145/2404/977 +f 1145/2405/978 1141/2406/978 1146/2407/978 +f 1143/2408/979 1142/2409/979 1140/2410/979 +f 1090/2281/927 1091/2294/927 1081/2282/927 +f 994/2382/850 991/2129/850 993/2131/850 +f 996/2135/851 994/2132/851 995/2134/851 +f 998/2411/852 996/2135/852 997/2136/852 +f 1012/2157/861 992/2130/861 991/2129/861 +f 1002/2142/854 999/2139/854 1001/2141/854 +f 1142/2397/976 1146/2412/976 1141/2398/976 +f 1006/2147/856 1003/2144/856 1005/2146/856 +f 1008/2149/857 1006/2147/857 1007/2148/857 +f 1010/2151/858 1008/2149/858 1009/2150/858 +f 1014/2413/859 1010/2151/859 1011/2152/859 +f 993/2153/860 1012/2155/860 1011/2414/860 +f 993/2153/860 1011/2414/860 1009/2415/860 +f 995/2416/860 993/2153/860 1009/2415/860 +f 995/2416/860 1009/2415/860 1007/2417/860 +f 997/2418/860 995/2416/860 1000/2419/860 +f 995/2416/860 1007/2417/860 1000/2419/860 +f 1000/2419/860 1007/2417/860 1001/2420/860 +f 1007/2417/860 1005/2421/860 1001/2420/860 +f 1038/2193/877 1039/2194/877 1027/2178/877 +f 1013/2156/862 1014/2158/862 1012/2157/862 +f 1014/2422/863 1013/2162/863 1010/2423/863 +f 1124/2334/959 1125/2424/959 1116/2321/959 +f 994/2161/863 996/2425/863 1010/2423/863 +f 1010/2423/863 996/2425/863 1008/2426/863 +f 996/2425/863 998/2427/863 1008/2426/863 +f 998/2427/863 999/2428/863 1002/2429/863 +f 1008/2426/863 998/2427/863 1002/2429/863 +f 1006/2430/863 1008/2426/863 1002/2429/863 +f 1003/2431/863 1006/2430/863 1002/2429/863 +f 1018/2166/864 1015/2163/864 1017/2165/864 +f 1052/2213/891 1053/2215/891 1044/2214/891 +f 1022/2341/866 1019/2168/866 1021/2170/866 +f 1025/2432/980 1022/2171/980 1023/2173/980 +f 1025/2175/868 1127/2433/868 1026/2176/868 +f 1027/2178/981 1029/2434/981 1028/2179/981 +f 1031/2183/870 1028/2180/870 1030/2182/870 +f 1049/2208/888 1050/2209/888 1041/2197/888 +f 1016/2164/872 1015/2163/872 1033/2186/872 +f 1017/2165/873 1016/2164/873 1035/2188/873 +f 1077/2256/915 1078/2257/915 1069/2244/915 +f 1021/2170/875 1020/2169/875 1037/2191/875 +f 1037/2192/982 1038/2193/982 1023/2173/982 +f 1080/2261/918 1081/2282/918 1072/2262/918 +f 1029/2434/983 1027/2178/983 1040/2195/983 +f 1030/2182/879 1029/2181/879 1041/2197/879 +f 1033/2435/880 1030/2182/880 1042/2198/880 +f 1099/2293/936 1100/2436/936 1091/2294/936 +f 1035/2188/882 1034/2187/882 1044/2201/882 +f 1036/2437/883 1035/2188/883 1045/2202/883 +f 1037/2191/884 1036/2190/884 1046/2204/884 +f 1038/2193/984 1037/2192/984 1047/2206/984 +f 1001/2141/855 1004/2438/855 1003/2143/855 +f 1048/2207/985 1049/2439/985 1040/2195/985 +f 1108/2306/945 1109/2326/945 1100/2307/945 +f 1042/2198/889 1041/2197/889 1051/2210/889 +f 1034/2187/890 1042/2199/890 1043/2200/890 +f 1042/2199/881 1034/2187/881 1016/2164/881 +f 1017/2165/865 1020/2189/865 1019/2167/865 +f 1046/2204/893 1045/2203/893 1055/2218/893 +f 1047/2440/986 1046/2219/986 1056/2221/986 +f 1047/2223/895 1133/2441/895 1057/2224/895 +f 1058/2226/987 1059/2442/987 1049/2227/987 +f 1050/2209/897 1049/2208/897 1060/2229/897 +f 1051/2233/898 1050/2230/898 1061/2232/898 +f 1043/2212/899 1051/2233/899 1052/2213/899 +f 1053/2215/900 1052/2213/900 1063/2235/900 +f 1054/2443/901 1053/2215/901 1064/2236/901 +f 1055/2218/902 1054/2217/902 1065/2238/902 +f 1065/2239/988 1066/2240/988 1056/2221/988 +f 1030/2182/871 1033/2435/871 1032/2184/871 +f 1059/2442/989 1058/2226/989 1068/2242/989 +f 1060/2229/906 1059/2228/906 1069/2244/906 +f 1005/2421/860 1004/2444/860 1001/2420/860 +f 1052/2213/908 1061/2232/908 1062/2234/908 +f 1063/2235/909 1062/2234/909 1072/2248/909 +f 1064/2237/910 1063/2249/910 1073/2251/910 +f 1065/2238/911 1064/2237/911 1074/2252/911 +f 1066/2240/990 1065/2239/990 1075/2254/990 +f 1031/2345/969 1032/2346/969 1126/2337/969 +f 1076/2255/991 1077/2445/991 1068/2242/991 +f 1104/2362/974 1132/2446/974 1114/2363/974 +f 1070/2447/916 1069/2244/916 1079/2258/916 +f 1107/2304/944 1099/2293/944 1090/2281/944 +f 1035/2188/874 1036/2437/874 1020/2189/874 +f 1073/2251/919 1072/2250/919 1082/2264/919 +f 1074/2252/920 1073/2251/920 1083/2265/920 +f 1075/2448/992 1074/2266/992 1084/2268/992 +f 1138/2449/922 1085/2269/922 1086/2271/922 +f 1085/2273/993 1087/2450/993 1077/2274/993 +f 1078/2257/924 1077/2256/924 1088/2276/924 +f 1079/2280/925 1078/2277/925 1089/2279/925 +f 1071/2260/926 1079/2280/926 1080/2261/926 +f 1069/2245/907 1070/2246/907 1061/2232/907 +f 1082/2264/928 1081/2263/928 1092/2284/928 +f 1092/2284/929 1093/2297/929 1083/2265/929 +f 1093/2285/994 1094/2286/994 1084/2268/994 +f 1085/2273/931 1084/2268/931 1095/2287/931 +f 1087/2450/995 1085/2273/995 1096/2288/995 +f 1088/2276/933 1087/2275/933 1097/2290/933 +f 1089/2279/934 1088/2278/934 1098/2292/934 +f 1080/2261/935 1089/2279/935 1090/2281/935 +f 1047/2206/886 1048/2207/886 1039/2194/886 +f 1053/2215/892 1054/2443/892 1045/2216/892 +f 1116/2321/951 1117/2451/951 1107/2303/951 +f 1094/2286/996 1093/2285/996 1103/2299/996 +f 1095/2287/997 1094/2286/997 1104/2300/997 +f 1104/2300/998 1105/2452/998 1096/2288/998 +f 1097/2290/942 1096/2289/942 1106/2302/942 +f 1098/2453/943 1097/2290/943 1107/2303/943 +f 1075/2254/999 1076/2255/999 1067/2241/999 +f 1100/2295/937 1101/2296/937 1092/2284/937 +f 1101/2296/946 1100/2295/946 1110/2309/946 +f 1102/2454/947 1101/2296/947 1111/2310/947 +f 1103/2455/1000 1102/2311/1000 1112/2313/1000 +f 1131/2456/895 1112/2314/895 1114/2316/895 +f 1113/2318/1001 1115/2457/1001 1105/2319/1001 +f 1106/2302/950 1105/2301/950 1116/2321/950 +f 1079/2259/917 1071/2247/917 1062/2234/917 +f 1099/2305/952 1107/2322/952 1108/2306/952 +f 1109/2326/953 1108/2306/953 1119/2325/953 +f 1110/2458/954 1109/2326/954 1120/2327/954 +f 1111/2310/955 1110/2309/955 1121/2329/955 +f 1121/2330/1002 1122/2331/1002 1112/2313/1002 +f 1113/2318/957 1112/2313/957 1123/2332/957 +f 1115/2457/1003 1113/2318/1003 1124/2333/1003 +f 1101/2296/938 1102/2454/938 1093/2297/938 +f 1117/2323/960 1116/2335/960 1126/2337/960 +f 1108/2306/961 1117/2323/961 1118/2324/961 +f 1119/2325/962 1118/2324/962 1018/2339/962 +f 1120/2327/963 1119/2325/963 1019/2340/963 +f 1121/2329/964 1120/2328/964 1022/2341/964 +f 1122/2331/1004 1121/2330/1004 1025/2343/1004 +f 1123/2332/966 1122/2331/966 1024/2344/966 +f 1024/2344/1005 1028/2459/1005 1124/2333/1005 +f 1125/2424/968 1124/2334/968 1031/2183/968 +f 1134/2371/868 1135/2460/868 1057/2372/868 +f 1118/2324/970 1126/2337/970 1015/2338/970 +f 1026/2461/971 1127/2347/971 1129/2349/971 +f 1127/2462/860 1025/2350/860 1128/2205/860 +f 1128/2463/972 1023/2352/972 1129/2354/972 +f 1129/2464/973 1027/2355/973 1026/2357/973 +f 1132/2465/972 1130/2358/972 1114/2360/972 +f 1013/2162/863 994/2161/863 1010/2423/863 +f 1103/2365/971 1130/2466/971 1132/2366/971 +f 1130/2467/860 1103/2367/860 1131/2369/860 +f 1066/2240/904 1067/2241/904 1058/2226/904 +f 1133/2468/860 1047/2373/860 1134/2375/860 +f 1135/2469/975 1058/2376/975 1057/2378/975 +f 1134/2470/971 1056/2379/971 1135/2380/971 +f 1086/2471/895 1136/2381/895 1138/2383/895 +f 1137/2472/868 1084/2384/868 1138/2386/868 +f 1136/2473/860 1075/2387/860 1137/2389/860 +f 1075/2391/972 1136/2474/972 1086/2392/972 +f 1145/2400/863 1139/2393/863 1141/2395/863 +f 997/2138/853 1000/2140/853 999/2139/853 +f 1146/2475/860 1142/2399/860 1144/2401/860 +f 1144/2476/977 1143/2402/977 1145/2404/977 +f 1144/2477/978 1145/2405/978 1146/2407/978 +f 1139/2478/979 1143/2408/979 1140/2410/979 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_left.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_left.obj new file mode 100644 index 00000000..7e53ea30 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_left.obj @@ -0,0 +1,1074 @@ +# Blender v2.68 (sub 0) OBJ File: 'buggyWheelLeft.blend' +# www.blender.org +mtllib buggyWheelLeft.mtl +o WheelLeft_Wheel +v -0.621233 -0.029705 0.990662 +v -0.671233 -0.029705 0.990662 +v -0.621233 -0.529705 0.856687 +v -0.671233 -0.529705 0.856687 +v -0.621233 -0.895730 0.490662 +v -0.671233 -0.895730 0.490662 +v -0.621233 -1.029705 -0.009338 +v -0.671233 -1.029705 -0.009338 +v -0.621233 -0.895730 -0.509338 +v -0.671233 -0.895730 -0.509338 +v -0.621233 -0.529705 -0.875363 +v -0.671233 -0.529705 -0.875363 +v -0.621233 -0.029705 -1.009338 +v -0.671233 -0.029705 -1.009338 +v -0.621233 0.470295 -0.875363 +v -0.671233 0.470295 -0.875363 +v -0.621233 0.836321 -0.509338 +v -0.671233 0.836321 -0.509338 +v -0.621233 0.970295 -0.009338 +v -0.671233 0.970295 -0.009338 +v -0.621233 0.836321 0.490662 +v -0.671233 0.836321 0.490662 +v -0.621233 0.470296 0.856687 +v -0.671233 0.470296 0.856687 +v -0.641560 -1.169831 -0.353885 +v -0.929606 -1.113608 -0.337763 +v -1.082872 -0.971246 -0.296941 +v -1.029643 -0.809358 -0.250521 +v -0.794826 -0.703693 -0.325664 +v -0.488293 -0.703693 -0.325664 +v -0.253476 -0.809358 -0.250521 +v -0.200247 -0.971246 -0.296941 +v -0.353513 -1.113608 -0.337763 +v -0.641560 -1.181124 0.293064 +v -0.929606 -1.124372 0.278915 +v -1.082872 -0.980672 0.243086 +v -1.029643 -0.817263 0.202344 +v -0.794826 -0.710605 0.268295 +v -0.488293 -0.710605 0.268295 +v -0.253476 -0.817263 0.202344 +v -0.200247 -0.980672 0.243086 +v -0.353513 -1.124372 0.278915 +v -0.641560 -0.867429 0.858985 +v -0.929606 -0.825355 0.818355 +v -1.082872 -0.718822 0.715477 +v -1.029643 -0.597676 0.598488 +v -0.794826 -0.518604 0.522129 +v -0.488293 -0.518604 0.522129 +v -0.253476 -0.597676 0.598488 +v -0.200247 -0.718822 0.715477 +v -0.353513 -0.825355 0.818355 +v -0.641560 -0.312801 1.192239 +v -0.929606 -0.296679 1.136016 +v -1.082872 -0.255857 0.993654 +v -1.029643 -0.209437 0.831766 +v -0.794826 -0.284580 0.726101 +v -0.488293 -0.284579 0.726101 +v -0.253476 -0.209437 0.831766 +v -0.200247 -0.255857 0.993654 +v -0.353513 -0.296679 1.136016 +v -0.641560 0.334148 1.203532 +v -0.929606 0.319999 1.146780 +v -1.082872 0.284170 1.003080 +v -1.029643 0.243428 0.839671 +v -0.794826 0.309379 0.733013 +v -0.488293 0.309379 0.733013 +v -0.253476 0.243428 0.839671 +v -0.200247 0.284170 1.003080 +v -0.353513 0.319999 1.146780 +v -0.641560 0.900069 0.889837 +v -0.929606 0.859439 0.847764 +v -1.082872 0.756561 0.741230 +v -1.029643 0.639572 0.620084 +v -0.794826 0.563213 0.541012 +v -0.488293 0.563213 0.541012 +v -0.253476 0.639572 0.620085 +v -0.200247 0.756561 0.741230 +v -0.353513 0.859439 0.847764 +v -0.641560 1.233323 0.335209 +v -0.929606 1.177100 0.319087 +v -1.082872 1.034738 0.278265 +v -1.029643 0.872850 0.231845 +v -0.794826 0.767185 0.306988 +v -0.488293 0.767185 0.306988 +v -0.253476 0.872850 0.231845 +v -0.200247 1.034738 0.278266 +v -0.353513 1.177100 0.319087 +v -0.641560 1.244616 -0.311740 +v -0.929606 1.187865 -0.297590 +v -1.082872 1.044165 -0.261762 +v -1.029643 0.880755 -0.221019 +v -0.794826 0.774097 -0.286971 +v -0.488293 0.774097 -0.286971 +v -0.253476 0.880755 -0.221019 +v -0.200247 1.044165 -0.261762 +v -0.353513 1.187865 -0.297590 +v -0.641559 0.930921 -0.877661 +v -0.929606 0.888848 -0.837031 +v -1.082872 0.782314 -0.734153 +v -1.029643 0.661169 -0.617164 +v -0.794826 0.582096 -0.540805 +v -0.488293 0.582096 -0.540805 +v -0.253476 0.661169 -0.617164 +v -0.200247 0.782314 -0.734153 +v -0.353513 0.888848 -0.837031 +v -0.641559 0.376293 -1.210915 +v -0.929606 0.360171 -1.154692 +v -1.082872 0.319350 -1.012330 +v -1.029643 0.272929 -0.850442 +v -0.794826 0.348072 -0.744777 +v -0.488293 0.348072 -0.744777 +v -0.253476 0.272929 -0.850442 +v -0.200247 0.319350 -1.012330 +v -0.353513 0.360171 -1.154692 +v -0.641559 -0.270656 -1.222208 +v -0.929606 -0.256506 -1.165456 +v -1.082872 -0.220678 -1.021756 +v -1.029643 -0.179935 -0.858347 +v -0.794826 -0.245887 -0.751689 +v -0.488293 -0.245887 -0.751689 +v -0.253476 -0.179935 -0.858347 +v -0.200247 -0.220678 -1.021756 +v -0.353513 -0.256506 -1.165456 +v -0.641559 -0.836577 -0.908513 +v -0.929606 -0.795947 -0.866439 +v -1.082872 -0.693069 -0.759906 +v -1.029643 -0.576080 -0.638760 +v -0.794826 -0.499721 -0.559688 +v -0.488293 -0.499721 -0.559688 +v -0.253476 -0.576080 -0.638760 +v -0.200247 -0.693069 -0.759906 +v -0.353513 -0.795947 -0.866439 +v -0.794826 -0.303720 -0.321009 +v -0.560728 -0.303720 -0.321009 +v -0.794826 -0.310632 0.272950 +v -0.560728 -0.310632 0.272950 +v -0.794826 0.343418 -0.344804 +v -0.560728 0.343418 -0.344804 +v -0.794826 -0.250541 -0.351716 +v -0.560728 -0.250541 -0.351716 +v -0.794826 -0.279925 0.326128 +v -0.560728 -0.279925 0.326128 +v -0.794826 0.314034 0.333040 +v -0.560728 0.314034 0.333040 +v -0.794826 0.367212 0.302333 +v -0.560728 0.367212 0.302333 +v -0.794826 0.374124 -0.291625 +v -0.560728 0.374124 -0.291625 +v -0.000197 -0.051023 -0.055278 +v -0.000197 -0.051023 0.044722 +v -0.750197 -0.051024 0.044722 +v -0.750197 -0.051024 -0.055278 +v -0.000197 0.048977 -0.055278 +v -0.000197 0.048977 0.044722 +v -0.750197 0.048977 0.044722 +v -0.750197 0.048977 -0.055278 +vt 0.513647 0.784487 +vt 0.505979 0.784463 +vt 0.506198 0.712982 +vt 0.949916 0.484370 +vt 0.942329 0.484463 +vt 0.945409 0.410028 +vt 0.952996 0.409935 +vt 0.942546 0.331778 +vt 0.342546 0.743532 +vt 0.334878 0.743555 +vt 0.342337 0.675297 +vt 0.334669 0.675321 +vt 0.334425 0.595943 +vt 0.342093 0.595919 +vt 0.341881 0.526668 +vt 0.513866 0.627997 +vt 0.521530 0.628020 +vt 0.523522 0.675921 +vt 0.515859 0.675897 +vt 0.524342 0.749056 +vt 0.516678 0.749032 +vt 0.523768 0.827828 +vt 0.516105 0.827805 +vt 0.521955 0.891132 +vt 0.450859 0.331796 +vt 0.530222 0.331685 +vt 0.598987 0.371272 +vt 0.513404 0.863656 +vt 0.505736 0.863633 +vt 0.513203 0.929300 +vt 0.505535 0.929277 +vt 0.039689 0.599849 +vt 0.000006 0.531119 +vt 0.108414 0.639514 +vt 0.830572 0.623547 +vt 0.837842 0.712975 +vt 0.792882 0.715173 +vt 0.785952 0.629929 +vt 0.760389 0.645015 +vt 0.538434 0.331685 +vt 0.455612 0.331599 +vt 0.462432 0.306441 +vt 0.758883 0.693669 +vt 0.757766 0.757554 +vt 0.722111 0.772972 +vt 0.340191 0.815624 +vt 0.340047 0.862634 +vt 0.296730 0.826599 +vt 0.676578 0.688839 +vt 0.675129 0.772828 +vt 0.639920 0.693304 +vt 0.224995 0.065745 +vt 0.157598 0.048960 +vt 0.157196 0.023387 +vt 0.237565 0.043402 +vt 0.248435 0.022857 +vt 0.873372 0.628856 +vt 0.880302 0.714100 +vt 0.837952 0.811916 +vt 0.792987 0.809483 +vt 0.766458 0.719664 +vt 0.383912 0.290126 +vt 0.402305 0.271662 +vt 0.757836 0.826514 +vt 0.722394 0.820120 +vt 0.675411 0.819976 +vt 0.638873 0.826149 +vt 0.090829 0.068110 +vt 0.077576 0.046222 +vt 0.065737 0.026077 +vt 0.880407 0.808411 +vt 0.830872 0.893857 +vt 0.786238 0.887590 +vt 0.760640 0.870651 +vt 0.342546 0.218378 +vt 0.367616 0.211494 +vt 0.759075 0.882071 +vt 0.722989 0.862610 +vt 0.676007 0.862466 +vt 0.042578 0.118064 +vt 0.020038 0.105790 +vt 0.000032 0.094100 +vt 0.873658 0.886518 +vt 0.410759 0.627997 +vt 0.410461 0.725136 +vt 0.366572 0.631903 +vt 0.366288 0.724497 +vt 0.343036 0.642066 +vt 0.342597 0.135579 +vt 0.367659 0.142060 +vt 0.880968 0.806986 +vt 0.880818 0.758099 +vt 0.916772 0.739329 +vt 0.651260 0.882071 +vt 0.697672 0.885209 +vt 0.662245 0.938429 +vt 0.963979 0.803673 +vt 0.963782 0.739184 +vt 1.000000 0.806621 +vt 0.025774 0.185436 +vt 0.000000 0.186130 +vt 0.478394 0.642481 +vt 0.478145 0.723566 +vt 0.454637 0.724768 +vt 0.454921 0.632174 +vt 0.410172 0.819393 +vt 0.366012 0.814343 +vt 0.342546 0.801829 +vt 0.384052 0.063917 +vt 0.402423 0.081964 +vt 0.880613 0.691089 +vt 0.916624 0.690900 +vt 0.963633 0.690756 +vt 0.999644 0.690724 +vt 0.044920 0.252175 +vt 0.022831 0.265714 +vt 0.477904 0.802245 +vt 0.454361 0.814614 +vt 0.409969 0.885511 +vt 0.365819 0.877368 +vt 0.368352 0.047191 +vt 0.450287 0.000000 +vt 0.455804 0.022591 +vt 0.462593 0.047308 +vt 0.880407 0.623912 +vt 0.916478 0.643449 +vt 0.963487 0.643305 +vt 0.094886 0.300397 +vt 0.082414 0.323218 +vt 0.071262 0.342388 +vt 0.454168 0.877639 +vt 0.227346 0.639514 +vt 0.226590 0.730789 +vt 0.183470 0.645319 +vt 0.544864 0.000098 +vt 0.538625 0.022677 +vt 0.532047 0.047380 +vt 0.004897 0.829814 +vt 0.000000 0.767199 +vt 0.037024 0.750858 +vt 0.942329 0.331690 +vt 0.942143 0.422777 +vt 0.880522 0.422772 +vt 0.089896 0.832774 +vt 0.083541 0.750430 +vt 0.122682 0.828730 +vt 0.162283 0.317182 +vt 0.162782 0.343233 +vt 0.295948 0.658646 +vt 0.295317 0.734836 +vt 0.271046 0.731781 +vt 0.271767 0.644777 +vt 0.227597 0.829298 +vt 0.182750 0.732323 +vt 0.626741 0.047457 +vt 0.610325 0.064150 +vt 0.000136 0.697941 +vt 0.038112 0.703199 +vt 0.084629 0.702771 +vt 0.117920 0.696857 +vt 0.229052 0.298032 +vt 0.242403 0.320397 +vt 0.296157 0.817064 +vt 0.272006 0.825681 +vt 0.230097 0.908646 +vt 0.183709 0.826223 +vt 0.673979 0.129389 +vt 0.651692 0.135898 +vt 0.592174 0.082159 +vt 0.005267 0.640598 +vt 0.040542 0.659803 +vt 0.087059 0.659375 +vt 0.277303 0.248078 +vt 0.299941 0.260829 +vt 0.319664 0.271145 +vt 0.274389 0.901316 +vt 0.741395 0.261535 +vt 0.741609 0.191696 +vt 0.785593 0.253882 +vt 0.673921 0.223940 +vt 0.651640 0.218697 +vt 0.626821 0.211761 +vt 0.810381 0.180625 +vt 0.810172 0.112628 +vt 0.846144 0.099522 +vt 0.182750 0.908788 +vt 0.229268 0.908646 +vt 0.222215 0.964156 +vt 0.893427 0.188659 +vt 0.893153 0.099377 +vt 0.929413 0.180260 +vt 0.294107 0.180706 +vt 0.319979 0.180490 +vt 0.697244 0.253611 +vt 0.697449 0.187039 +vt 0.741903 0.095967 +vt 0.786077 0.096061 +vt 0.785797 0.187310 +vt 0.809582 0.096028 +vt 0.610185 0.290360 +vt 0.592057 0.271858 +vt 0.809970 0.046648 +vt 0.846009 0.055773 +vt 0.893019 0.055628 +vt 0.929002 0.046283 +vt 0.274961 0.113968 +vt 0.673979 0.175520 +vt 0.674224 0.095612 +vt 0.697729 0.095790 +vt 0.742197 0.000000 +vt 0.786358 0.004584 +vt 0.809828 0.015921 +vt 0.531886 0.306513 +vt 0.809828 0.000365 +vt 0.845895 0.018329 +vt 0.892904 0.018185 +vt 0.674470 0.015506 +vt 0.698009 0.004313 +vt 0.296717 0.700612 +vt 0.296620 0.616610 +vt 0.332497 0.616060 +vt 0.697691 0.973157 +vt 0.697755 0.882071 +vt 0.759075 0.882090 +vt 0.673979 0.271562 +vt 0.720988 0.271418 +vt 0.710064 0.331575 +vt 0.880501 0.986627 +vt 0.880407 0.895539 +vt 0.941428 0.895638 +vt 0.296894 0.616060 +vt 0.296620 0.526778 +vt 0.332521 0.526668 +vt 0.942003 0.443940 +vt 0.942066 0.535002 +vt 0.880522 0.443704 +vt 0.132764 0.904948 +vt 0.179746 0.905092 +vt 0.142890 0.961540 +vt 0.478394 0.885555 +vt 0.478366 0.976614 +vt 0.417029 0.976571 +vt 0.768196 0.331685 +vt 0.767998 0.267196 +vt 0.804096 0.331575 +vt 0.819042 0.984916 +vt 0.819070 0.893857 +vt 0.880407 0.893900 +vt 0.911795 0.280229 +vt 0.911732 0.189167 +vt 0.972929 0.188803 +vt 0.772063 0.894433 +vt 0.819042 0.893857 +vt 0.807833 0.950559 +vt 0.513839 0.630393 +vt 0.513866 0.712982 +vt 0.478421 0.710586 +vt 0.296764 0.909643 +vt 0.296620 0.862634 +vt 0.340081 0.873609 +vt 0.403930 0.885530 +vt 0.403866 0.976615 +vt 0.342546 0.976597 +vt 0.767998 0.331685 +vt 0.720988 0.331541 +vt 0.757074 0.271528 +vt 0.819432 0.331679 +vt 0.804097 0.331685 +vt 0.804096 0.316355 +vt 0.485178 0.926307 +vt 0.484825 0.811289 +vt 0.500243 0.926261 +vt 0.819427 0.301009 +vt 0.819426 0.316344 +vt 0.804096 0.316349 +vt 0.014299 0.948221 +vt 0.014652 0.833202 +vt 0.025634 0.833236 +vt 0.000349 0.834079 +vt 0.014299 0.833202 +vt 0.013950 0.947021 +vt 0.943974 0.115104 +vt 0.929765 0.114953 +vt 0.929413 0.000000 +vt 0.513866 0.713006 +vt 0.950133 0.331685 +vt 0.499890 0.811242 +vt 0.514292 0.891109 +vt 0.638731 0.439950 +vt 0.638802 0.519317 +vt 0.382165 0.371576 +vt 0.599183 0.588106 +vt 0.342546 0.440365 +vt 0.342618 0.519731 +vt 0.382361 0.588410 +vt 0.530489 0.627886 +vt 0.187768 0.639484 +vt 0.256486 0.599768 +vt 0.297148 0.100906 +vt 0.000000 0.451739 +vt 0.296157 0.531008 +vt 0.039671 0.382978 +vt 0.108390 0.343263 +vt 0.187743 0.343233 +vt 0.296151 0.451628 +vt 0.256469 0.382898 +vt 0.723561 0.688983 +vt 0.296620 0.862500 +vt 0.638802 0.757189 +vt 0.156659 0.000000 +vt 0.186092 0.901858 +vt 0.766550 0.802252 +vt 0.334213 0.526692 +vt 0.640111 0.881706 +vt 0.916970 0.803817 +vt 0.697691 0.940825 +vt 0.999850 0.757734 +vt 0.342787 0.723150 +vt 0.451127 0.627997 +vt 0.999438 0.623547 +vt 0.880585 0.534766 +vt 0.003222 0.276723 +vt 0.043380 0.833203 +vt 0.880707 0.331685 +vt 0.117785 0.766115 +vt 0.342546 0.179402 +vt 0.123052 0.639514 +vt 0.253959 0.339168 +vt 0.626864 0.142327 +vt 0.846418 0.188803 +vt 0.186689 0.964265 +vt 0.929204 0.112263 +vt 0.809337 0.175935 +vt 0.928860 0.000000 +vt 0.803899 0.267086 +vt 0.332593 0.700061 +vt 0.759010 0.973175 +vt 0.674164 0.331685 +vt 0.941522 0.986726 +vt 0.332795 0.615950 +vt 0.178770 0.961650 +vt 0.417057 0.885511 +vt 0.880379 0.984960 +vt 0.972992 0.279865 +vt 0.771955 0.951000 +vt 0.478394 0.627997 +vt 0.340191 0.909510 +vt 0.342611 0.885511 +vt 0.721173 0.271418 +vt 0.819431 0.316349 +vt 0.804097 0.301014 +vt 0.025281 0.948255 +vt 0.000000 0.947897 +vt 0.943621 0.000151 +usemtl None +f 1/1 2/2 4/3 +f 3/4 4/5 6/6 +f 5/7 6/6 8/8 +f 7/9 8/10 9/11 +f 9/11 10/12 12/13 +f 11/14 12/13 13/15 +f 13/16 14/17 16/18 +f 15/19 16/18 18/20 +f 17/21 18/20 20/22 +f 19/23 20/22 22/24 +f 4/25 2/26 24/27 +f 23/28 24/29 1/1 +f 21/30 22/31 24/29 +f 1/32 3/33 23/34 +f 25/35 34/36 35/37 +f 26/38 35/37 27/39 +f 27/40 36/41 37/42 +f 28/43 37/44 38/45 +f 30/46 29/47 134/48 +f 30/49 39/50 31/51 +f 31/52 40/53 41/54 +f 32/55 41/54 33/56 +f 25/35 33/57 42/58 +f 34/36 43/59 44/60 +f 35/37 44/60 36/61 +f 36/41 45/62 46/63 +f 37/44 46/64 38/45 +f 38/45 47/65 39/50 +f 39/50 48/66 49/67 +f 40/53 49/68 50/69 +f 41/54 50/69 51/70 +f 42/58 51/71 34/36 +f 43/59 52/72 53/73 +f 44/60 53/73 54/74 +f 45/62 54/75 55/76 +f 46/64 55/77 56/78 +f 47/65 56/78 48/66 +f 48/66 57/79 49/67 +f 49/68 58/80 50/69 +f 50/69 59/81 60/82 +f 51/71 60/83 52/72 +f 52/84 61/85 53/86 +f 53/86 62/87 54/88 +f 54/75 63/89 64/90 +f 55/91 64/92 65/93 +f 57/94 56/95 142/96 +f 57/97 66/98 58/99 +f 58/80 67/100 68/101 +f 59/102 68/103 69/104 +f 60/105 69/104 61/85 +f 61/85 70/106 71/107 +f 62/87 71/107 72/108 +f 63/89 72/109 73/110 +f 64/92 73/111 65/93 +f 65/93 74/112 66/98 +f 66/98 75/113 76/114 +f 67/100 76/115 77/116 +f 68/103 77/117 69/104 +f 69/104 78/118 70/106 +f 70/106 79/119 80/120 +f 71/121 80/122 81/123 +f 72/109 81/123 82/124 +f 73/111 82/125 83/126 +f 74/112 83/126 75/113 +f 75/113 84/127 76/114 +f 76/115 85/128 77/116 +f 77/116 86/129 87/130 +f 78/118 87/131 70/106 +f 79/132 88/133 80/134 +f 80/122 89/135 90/136 +f 81/123 90/136 91/137 +f 82/138 91/139 92/140 +f 93/141 84/142 146/143 +f 84/144 93/145 85/146 +f 85/128 94/147 95/148 +f 86/149 95/150 96/151 +f 87/152 96/151 88/133 +f 88/133 97/153 89/154 +f 89/135 98/155 99/156 +f 90/136 99/156 91/137 +f 91/139 100/157 92/140 +f 92/140 101/158 102/159 +f 93/145 102/159 103/160 +f 94/147 103/161 104/162 +f 95/150 104/163 105/164 +f 96/151 105/164 97/153 +f 97/153 106/165 98/166 +f 98/155 107/167 99/156 +f 99/156 108/168 100/169 +f 100/157 109/170 110/171 +f 101/158 110/171 111/172 +f 102/159 111/172 103/160 +f 103/161 112/173 113/174 +f 104/162 113/174 114/175 +f 105/164 114/176 97/153 +f 106/177 115/178 107/179 +f 107/167 116/180 117/181 +f 108/168 117/181 118/182 +f 109/183 118/184 119/185 +f 119/186 120/187 140/188 +f 111/189 120/190 112/191 +f 112/173 121/192 122/193 +f 113/174 122/193 114/175 +f 114/194 123/195 115/178 +f 115/178 124/196 125/197 +f 116/198 125/197 126/199 +f 117/181 126/200 127/201 +f 118/184 127/202 119/185 +f 119/185 128/203 129/204 +f 120/190 129/204 130/205 +f 121/192 130/206 122/193 +f 122/207 131/208 132/209 +f 123/195 132/209 124/196 +f 124/196 25/210 26/211 +f 125/197 26/211 27/212 +f 126/200 27/40 28/213 +f 127/202 28/214 29/215 +f 128/203 29/215 30/216 +f 129/204 30/216 130/205 +f 130/206 31/52 32/55 +f 131/208 32/217 132/209 +f 132/209 33/218 25/210 +f 133/219 135/220 136/221 +f 29/222 38/223 135/224 +f 38/225 39/226 136/227 +f 39/228 30/229 134/230 +f 137/231 139/232 140/233 +f 120/234 111/235 140/236 +f 111/237 110/238 138/239 +f 110/240 119/241 139/242 +f 141/243 143/244 142/245 +f 56/246 65/247 143/248 +f 66/249 57/250 142/251 +f 65/252 66/253 144/254 +f 145/255 147/256 148/257 +f 92/258 93/259 148/260 +f 83/261 92/262 147/263 +f 84/264 83/265 146/266 +f 153/267 154/268 150/269 +f 154/270 155/271 150/272 +f 155/273 156/274 152/275 +f 156/276 153/277 149/278 +f 149/279 150/280 151/281 +f 156/282 155/283 154/284 +f 97/153 98/166 89/154 +f 3/285 1/1 4/3 +f 5/7 3/4 6/6 +f 7/286 5/7 8/8 +f 24/29 2/2 1/1 +f 11/14 9/11 12/13 +f 155/271 151/287 150/272 +f 15/19 13/16 16/18 +f 17/21 15/19 18/20 +f 19/23 17/21 20/22 +f 21/288 19/23 22/24 +f 4/25 24/27 22/289 +f 4/25 22/289 20/290 +f 6/291 4/25 20/290 +f 6/291 20/290 18/292 +f 8/293 6/291 10/294 +f 6/291 18/292 10/294 +f 10/294 18/292 12/295 +f 18/292 16/296 12/295 +f 47/65 48/66 39/50 +f 23/28 21/30 24/29 +f 21/297 23/34 19/298 +f 130/206 131/299 122/193 +f 3/33 5/300 19/298 +f 19/298 5/300 17/301 +f 5/300 7/302 17/301 +f 7/302 9/303 11/304 +f 17/301 7/302 11/304 +f 15/305 17/301 11/304 +f 13/306 15/305 11/304 +f 26/38 25/35 35/37 +f 61/85 62/87 53/86 +f 28/213 27/40 37/42 +f 29/307 28/43 38/45 +f 29/47 133/308 134/48 +f 39/50 40/309 31/51 +f 32/55 31/52 41/54 +f 58/80 59/81 50/69 +f 34/36 25/35 42/58 +f 35/37 34/36 44/60 +f 85/128 86/129 77/116 +f 37/42 36/41 46/63 +f 46/64 47/65 38/45 +f 88/133 89/154 80/134 +f 40/309 39/50 49/67 +f 41/54 40/53 50/69 +f 42/310 41/54 51/70 +f 106/165 107/311 98/166 +f 44/60 43/59 53/73 +f 45/312 44/60 54/74 +f 46/63 45/62 55/76 +f 47/65 46/64 56/78 +f 12/13 14/313 13/15 +f 57/79 58/314 49/67 +f 115/178 116/198 107/179 +f 51/70 50/69 60/82 +f 43/59 51/71 52/72 +f 51/71 43/59 34/36 +f 35/37 36/61 27/39 +f 55/76 54/75 64/90 +f 56/315 55/91 65/93 +f 56/95 141/316 142/96 +f 66/98 67/317 58/99 +f 59/81 58/80 68/101 +f 60/105 59/102 69/104 +f 52/84 60/105 61/85 +f 62/87 61/85 71/107 +f 63/318 62/87 72/108 +f 64/90 63/89 73/110 +f 73/111 74/112 65/93 +f 41/54 42/310 33/56 +f 67/317 66/98 76/114 +f 68/101 67/100 77/116 +f 16/296 14/319 12/295 +f 61/85 69/104 70/106 +f 71/107 70/106 80/120 +f 72/109 71/121 81/123 +f 73/110 72/109 82/124 +f 74/112 73/111 83/126 +f 32/217 33/218 132/209 +f 84/127 85/320 76/114 +f 111/235 138/321 140/236 +f 78/322 77/116 87/130 +f 114/176 106/165 97/153 +f 44/60 45/312 36/61 +f 81/123 80/122 90/136 +f 82/124 81/123 91/137 +f 83/323 82/138 92/140 +f 148/324 93/141 146/143 +f 93/145 94/325 85/146 +f 86/129 85/128 95/148 +f 87/152 86/149 96/151 +f 79/132 87/152 88/133 +f 77/117 78/118 69/104 +f 90/136 89/135 99/156 +f 99/156 100/169 91/137 +f 100/157 101/158 92/140 +f 93/145 92/140 102/159 +f 94/325 93/145 103/160 +f 95/148 94/147 104/162 +f 96/151 95/150 105/164 +f 88/133 96/151 97/153 +f 56/78 57/79 48/66 +f 62/87 63/318 54/88 +f 122/193 123/326 114/175 +f 101/158 100/157 110/171 +f 102/159 101/158 111/172 +f 111/172 112/327 103/160 +f 104/162 103/161 113/174 +f 105/328 104/162 114/175 +f 83/126 84/127 75/113 +f 107/167 108/168 99/156 +f 108/168 107/167 117/181 +f 109/329 108/168 118/182 +f 110/330 109/183 119/185 +f 139/331 119/186 140/188 +f 120/190 121/332 112/191 +f 113/174 112/173 122/193 +f 87/131 79/119 70/106 +f 106/177 114/194 115/178 +f 116/198 115/178 125/197 +f 117/333 116/198 126/199 +f 118/182 117/181 127/201 +f 127/202 128/203 119/185 +f 120/190 119/185 129/204 +f 121/332 120/190 130/205 +f 108/168 109/329 100/169 +f 123/195 122/207 132/209 +f 115/178 123/195 124/196 +f 125/197 124/196 26/211 +f 126/199 125/197 27/212 +f 127/201 126/200 28/213 +f 128/203 127/202 29/215 +f 129/204 128/203 30/216 +f 30/216 31/334 130/205 +f 131/299 130/206 32/55 +f 143/244 144/335 142/245 +f 124/196 132/209 25/210 +f 134/336 133/219 136/221 +f 133/337 29/222 135/224 +f 135/338 38/225 136/227 +f 136/339 39/228 134/230 +f 138/340 137/231 140/233 +f 23/34 3/33 19/298 +f 110/238 137/341 138/239 +f 137/342 110/240 139/242 +f 74/112 75/113 66/98 +f 141/343 56/246 143/248 +f 144/344 66/249 142/251 +f 143/345 65/252 144/254 +f 146/346 145/255 148/257 +f 147/347 92/258 148/260 +f 145/348 83/261 147/263 +f 83/265 145/349 146/266 +f 149/350 153/267 150/269 +f 8/10 10/12 9/11 +f 151/351 155/273 152/275 +f 152/352 156/276 149/278 +f 152/353 149/279 151/281 +f 153/354 156/282 154/284 +o WheelLeftCover_Cover +v -0.925456 1.350251 -0.415400 +v -0.925456 1.361015 0.262945 +v -0.931513 1.324180 -0.387819 +v -0.931513 1.334944 0.261483 +v -0.637409 1.073219 -1.043225 +v -0.925455 1.032589 -0.996944 +v -0.196097 0.929711 -0.879757 +v -0.349363 1.032590 -0.996944 +v -0.637409 1.406474 -0.433134 +v -0.925455 1.350251 -0.415400 +v -0.196097 1.207889 -0.370496 +v -0.349363 1.350251 -0.415400 +v -0.637409 1.417766 0.278510 +v -0.925456 1.361015 0.262945 +v -0.196097 1.217315 0.223534 +v -0.349363 1.361015 0.262945 +v -0.637410 1.104071 0.901023 +v -0.925456 1.061998 0.856330 +v -0.196097 0.955465 0.743164 +v -0.349363 1.061998 0.856330 +v -0.637410 0.549443 1.267602 +v -0.925456 0.533322 1.205757 +v -0.196097 0.492500 1.049159 +v -0.349364 0.533322 1.205757 +v -0.637410 -0.097506 1.280024 +v -0.925456 -0.083356 1.217597 +v -0.196097 -0.047528 1.059528 +v -0.349364 -0.083356 1.217598 +v -0.643467 1.047149 -0.988763 +v -0.931513 1.006519 -0.944464 +v -0.202154 0.903641 -0.832294 +v -0.355420 1.006519 -0.944464 +v -0.643467 1.380403 -0.404793 +v -0.931513 1.324180 -0.387819 +v -0.202154 1.181818 -0.344837 +v -0.355421 1.324180 -0.387819 +v -0.643467 1.391696 0.276381 +v -0.931513 1.334944 0.261483 +v -0.202155 1.191244 0.223759 +v -0.355421 1.334944 0.261483 +v -0.643467 1.078001 0.872241 +v -0.931513 1.035927 0.829461 +v -0.202155 0.929394 0.721141 +v -0.355421 1.035927 0.829462 +v -0.643467 0.523373 1.223125 +v -0.931513 0.507251 1.163927 +v -0.202155 0.466429 1.014034 +v -0.355421 0.507251 1.163927 +v -0.643467 -0.123576 1.235015 +v -0.931514 -0.109427 1.175261 +v -0.202155 -0.073598 1.023959 +v -0.355421 -0.109427 1.175261 +vt 0.505535 0.712982 +vt 0.505522 0.817017 +vt 0.501434 0.812862 +vt 0.911732 0.256477 +vt 0.911376 0.300653 +vt 0.809828 0.256790 +vt 0.909786 0.188803 +vt 0.911105 0.212304 +vt 0.813968 0.212602 +vt 0.810266 0.623547 +vt 0.767484 0.617750 +vt 0.802895 0.525056 +vt 0.880522 0.601715 +vt 0.854909 0.617214 +vt 0.847883 0.523332 +vt 0.760457 0.523868 +vt 0.760389 0.422038 +vt 0.874369 0.519502 +vt 0.874310 0.430329 +vt 0.847815 0.421501 +vt 0.802824 0.418227 +vt 0.767298 0.339545 +vt 0.880360 0.358090 +vt 0.854723 0.339009 +vt 0.077989 0.935533 +vt 0.033855 0.930923 +vt 0.034707 0.838364 +vt 0.718072 0.626052 +vt 0.733713 0.644685 +vt 0.644853 0.664718 +vt 0.122200 0.931736 +vt 0.123052 0.839177 +vt 0.885507 0.579191 +vt 0.952468 0.579397 +vt 0.880522 0.623351 +vt 0.478424 0.803552 +vt 0.478394 0.717505 +vt 0.500209 0.712982 +vt 0.880793 0.535002 +vt 0.944621 0.535198 +vt 0.570052 0.627997 +vt 0.569259 0.724135 +vt 0.526176 0.633923 +vt 0.638651 0.647557 +vt 0.637989 0.727806 +vt 0.613716 0.725021 +vt 0.614472 0.633381 +vt 0.570234 0.826899 +vt 0.526349 0.823518 +vt 0.638802 0.813586 +vt 0.614645 0.822976 +vt 0.572715 0.908751 +vt 0.528714 0.901541 +vt 0.296832 0.516394 +vt 0.319201 0.435423 +vt 0.317002 0.526668 +vt 0.617010 0.900999 +vt 0.880407 0.851389 +vt 0.950182 0.851175 +vt 0.955160 0.895335 +vt 0.296620 0.355759 +vt 0.342546 0.434204 +vt 0.888378 0.807190 +vt 0.954889 0.806986 +vt 0.760361 0.552208 +vt 0.755244 0.550990 +vt 0.718149 0.382255 +vt 0.760389 0.462972 +vt 0.716320 0.387568 +vt 0.179746 0.720354 +vt 0.177852 0.817509 +vt 0.172210 0.816323 +vt 0.644959 0.331685 +vt 0.644632 0.339984 +vt 0.078883 0.838430 +vt 0.078002 0.833202 +vt 0.130698 0.639514 +vt 0.172167 0.720396 +vt 0.756806 0.464801 +vt 0.330131 0.702384 +vt 0.330189 0.803978 +vt 0.322803 0.798856 +vt 0.650102 0.688839 +vt 0.643585 0.684838 +vt 0.313835 0.815624 +vt 0.296620 0.774114 +vt 0.305866 0.773231 +vt 0.123170 0.901676 +vt 0.296875 0.728970 +vt 0.314479 0.701317 +vt 0.305843 0.728137 +vt 0.712052 0.623039 +vt 0.501517 0.713280 +vt 0.814240 0.300951 +vt 0.824724 0.189064 +vt 0.810072 0.331685 +vt 0.944350 0.623547 +vt 0.500243 0.811242 +vt 0.525420 0.725563 +vt 0.888649 0.895539 +vt 0.316761 0.343233 +vt 0.122171 0.834026 +vt 0.123052 0.639598 +vt 0.324578 0.700612 +vt 0.638802 0.661644 +vt 0.033825 0.833213 +vt 0.322803 0.814792 +vt 0.322746 0.700612 +vt 0.125521 0.904948 +usemtl None +f 158/355 157/356 159/357 +f 161/358 162/359 165/360 +f 163/361 164/362 168/363 +f 164/362 161/358 165/360 +f 165/364 166/365 169/366 +f 167/367 168/368 172/369 +f 168/368 165/364 169/366 +f 169/366 170/370 174/371 +f 171/372 172/369 175/373 +f 172/369 169/366 176/374 +f 173/375 174/371 178/376 +f 175/373 176/374 179/377 +f 176/374 173/375 180/378 +f 177/379 178/380 182/381 +f 179/382 180/383 183/384 +f 180/385 177/379 184/386 +f 185/387 189/388 186/389 +f 187/390 191/391 192/392 +f 188/393 192/394 189/388 +f 189/395 193/396 190/397 +f 191/398 195/399 196/400 +f 192/401 196/400 193/396 +f 193/396 197/402 198/403 +f 195/399 199/404 196/400 +f 196/400 200/405 193/396 +f 197/402 201/406 202/407 +f 199/408 203/409 200/410 +f 200/405 204/411 197/402 +f 201/412 205/413 206/414 +f 203/409 207/415 204/416 +f 204/417 208/418 201/412 +f 175/419 179/382 199/420 +f 167/421 171/422 191/423 +f 178/424 174/425 198/426 +f 163/427 167/421 187/428 +f 184/386 181/429 205/430 +f 182/431 178/424 202/432 +f 171/422 175/419 195/433 +f 166/434 162/435 186/436 +f 183/384 184/437 208/438 +f 181/429 182/381 205/430 +f 162/439 161/440 185/441 +f 198/426 174/425 194/442 +f 161/440 164/443 185/441 +f 164/443 163/444 188/445 +f 179/382 183/384 203/446 +f 160/447 158/355 159/357 +f 162/359 166/448 165/360 +f 167/449 163/361 168/363 +f 168/363 164/362 165/360 +f 166/365 170/370 169/366 +f 171/372 167/367 172/369 +f 172/369 168/368 169/366 +f 173/375 169/366 174/371 +f 172/369 176/374 175/373 +f 169/366 173/375 176/374 +f 177/450 173/375 178/376 +f 176/374 180/378 179/377 +f 173/375 177/450 180/378 +f 181/429 177/379 182/381 +f 180/383 184/437 183/384 +f 177/379 181/429 184/386 +f 189/388 190/451 186/389 +f 188/452 187/390 192/392 +f 185/387 188/393 189/388 +f 193/396 194/453 190/397 +f 192/401 191/398 196/400 +f 189/395 192/401 193/396 +f 194/453 193/396 198/403 +f 199/404 200/405 196/400 +f 200/405 197/402 193/396 +f 198/403 197/402 202/407 +f 203/409 204/416 200/410 +f 204/411 201/406 197/402 +f 202/454 201/412 206/414 +f 207/415 208/455 204/416 +f 208/418 205/413 201/412 +f 179/382 203/446 199/420 +f 171/422 195/433 191/423 +f 202/432 178/424 198/426 +f 167/421 191/423 187/428 +f 208/456 184/386 205/430 +f 206/457 182/431 202/432 +f 175/419 199/420 195/433 +f 190/458 166/434 186/436 +f 207/459 183/384 208/438 +f 182/381 206/460 205/430 +f 186/461 162/439 185/441 +f 164/443 188/445 185/441 +f 163/444 187/462 188/445 +f 183/384 207/459 203/446 +f 174/425 170/463 194/442 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_right.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_right.obj new file mode 100644 index 00000000..1bdc6495 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/buggy_wheel_right.obj @@ -0,0 +1,1074 @@ +# Blender v2.68 (sub 0) OBJ File: 'buggyWheel.blend' +# www.blender.org +mtllib buggyWheelRight.mtl +o WheelRight_Wheel +v 0.614587 -0.034939 -0.990662 +v 0.664587 -0.034939 -0.990662 +v 0.614587 -0.534939 -0.856687 +v 0.664587 -0.534939 -0.856687 +v 0.614587 -0.900964 -0.490662 +v 0.664587 -0.900964 -0.490662 +v 0.614587 -1.034939 0.009338 +v 0.664587 -1.034939 0.009338 +v 0.614587 -0.900964 0.509338 +v 0.664587 -0.900964 0.509338 +v 0.614587 -0.534939 0.875363 +v 0.664587 -0.534939 0.875363 +v 0.614587 -0.034939 1.009338 +v 0.664587 -0.034939 1.009338 +v 0.614587 0.465061 0.875363 +v 0.664587 0.465061 0.875363 +v 0.614587 0.831087 0.509338 +v 0.664587 0.831087 0.509338 +v 0.614587 0.965061 0.009338 +v 0.664587 0.965061 0.009338 +v 0.614587 0.831087 -0.490662 +v 0.664587 0.831087 -0.490662 +v 0.614587 0.465062 -0.856687 +v 0.664587 0.465062 -0.856687 +v 0.634914 -1.175065 0.353885 +v 0.922961 -1.118842 0.337763 +v 1.076227 -0.976480 0.296941 +v 1.022998 -0.814592 0.250521 +v 0.788180 -0.708927 0.325664 +v 0.481648 -0.708927 0.325664 +v 0.246831 -0.814592 0.250521 +v 0.193602 -0.976480 0.296941 +v 0.346868 -1.118842 0.337763 +v 0.634914 -1.186358 -0.293064 +v 0.922960 -1.129606 -0.278915 +v 1.076227 -0.985906 -0.243086 +v 1.022998 -0.822497 -0.202344 +v 0.788180 -0.715839 -0.268295 +v 0.481648 -0.715839 -0.268295 +v 0.246831 -0.822497 -0.202344 +v 0.193602 -0.985906 -0.243086 +v 0.346868 -1.129606 -0.278915 +v 0.634914 -0.872663 -0.858985 +v 0.922960 -0.830589 -0.818355 +v 1.076226 -0.724056 -0.715477 +v 1.022998 -0.602910 -0.598488 +v 0.788180 -0.523838 -0.522129 +v 0.481648 -0.523838 -0.522129 +v 0.246831 -0.602910 -0.598488 +v 0.193602 -0.724056 -0.715477 +v 0.346868 -0.830589 -0.818355 +v 0.634914 -0.318035 -1.192239 +v 0.922960 -0.301913 -1.136016 +v 1.076226 -0.261091 -0.993654 +v 1.022998 -0.214671 -0.831766 +v 0.788180 -0.289814 -0.726101 +v 0.481648 -0.289814 -0.726101 +v 0.246830 -0.214671 -0.831766 +v 0.193602 -0.261091 -0.993654 +v 0.346868 -0.301913 -1.136016 +v 0.634914 0.328914 -1.203532 +v 0.922960 0.314765 -1.146780 +v 1.076226 0.278936 -1.003080 +v 1.022998 0.238194 -0.839671 +v 0.788180 0.304145 -0.733013 +v 0.481648 0.304145 -0.733013 +v 0.246830 0.238194 -0.839671 +v 0.193602 0.278936 -1.003080 +v 0.346868 0.314765 -1.146780 +v 0.634914 0.894835 -0.889837 +v 0.922960 0.854205 -0.847764 +v 1.076226 0.751327 -0.741230 +v 1.022998 0.634338 -0.620085 +v 0.788180 0.557979 -0.541012 +v 0.481648 0.557979 -0.541012 +v 0.246830 0.634338 -0.620085 +v 0.193602 0.751327 -0.741230 +v 0.346868 0.854205 -0.847764 +v 0.634914 1.228089 -0.335209 +v 0.922960 1.171866 -0.319087 +v 1.076226 1.029504 -0.278265 +v 1.022997 0.867616 -0.231845 +v 0.788180 0.761951 -0.306988 +v 0.481648 0.761951 -0.306988 +v 0.246830 0.867616 -0.231845 +v 0.193602 1.029504 -0.278265 +v 0.346868 1.171866 -0.319087 +v 0.634914 1.239382 0.311740 +v 0.922960 1.182631 0.297590 +v 1.076226 1.038931 0.261762 +v 1.022997 0.875521 0.221019 +v 0.788180 0.768863 0.286971 +v 0.481648 0.768863 0.286971 +v 0.246830 0.875521 0.221019 +v 0.193602 1.038931 0.261762 +v 0.346868 1.182631 0.297590 +v 0.634914 0.925687 0.877661 +v 0.922960 0.883614 0.837031 +v 1.076226 0.777080 0.734153 +v 1.022998 0.655934 0.617164 +v 0.788180 0.576862 0.540805 +v 0.481648 0.576862 0.540805 +v 0.246830 0.655934 0.617164 +v 0.193602 0.777080 0.734153 +v 0.346868 0.883614 0.837031 +v 0.634914 0.371059 1.210915 +v 0.922960 0.354937 1.154692 +v 1.076226 0.314116 1.012330 +v 1.022998 0.267695 0.850442 +v 0.788180 0.342838 0.744777 +v 0.481648 0.342838 0.744777 +v 0.246830 0.267695 0.850442 +v 0.193602 0.314116 1.012330 +v 0.346868 0.354937 1.154692 +v 0.634914 -0.275890 1.222207 +v 0.922960 -0.261740 1.165456 +v 1.076227 -0.225912 1.021756 +v 1.022998 -0.185169 0.858347 +v 0.788180 -0.251121 0.751689 +v 0.481648 -0.251121 0.751689 +v 0.246831 -0.185169 0.858347 +v 0.193602 -0.225912 1.021756 +v 0.346868 -0.261740 1.165456 +v 0.634914 -0.841811 0.908513 +v 0.922960 -0.801181 0.866439 +v 1.076227 -0.698303 0.759906 +v 1.022998 -0.581314 0.638760 +v 0.788180 -0.504955 0.559688 +v 0.481648 -0.504955 0.559688 +v 0.246831 -0.581314 0.638760 +v 0.193602 -0.698303 0.759906 +v 0.346868 -0.801181 0.866439 +v 0.788180 -0.308954 0.321009 +v 0.554082 -0.308954 0.321009 +v 0.788180 -0.315866 -0.272950 +v 0.554082 -0.315866 -0.272950 +v 0.788180 0.338183 0.344804 +v 0.554082 0.338183 0.344804 +v 0.788180 -0.255775 0.351716 +v 0.554082 -0.255775 0.351716 +v 0.788180 -0.285159 -0.326128 +v 0.554082 -0.285159 -0.326128 +v 0.788180 0.308800 -0.333040 +v 0.554082 0.308800 -0.333040 +v 0.788180 0.361978 -0.302333 +v 0.554082 0.361978 -0.302333 +v 0.788180 0.368890 0.291625 +v 0.554082 0.368890 0.291625 +v -0.006448 -0.056258 0.055278 +v -0.006448 -0.056258 -0.044722 +v 0.743552 -0.056258 -0.044722 +v 0.743552 -0.056258 0.055278 +v -0.006448 0.043743 0.055278 +v -0.006448 0.043743 -0.044722 +v 0.743552 0.043742 -0.044722 +v 0.743552 0.043742 0.055278 +vt 0.513647 0.784487 +vt 0.505979 0.784463 +vt 0.506198 0.712982 +vt 0.949916 0.484370 +vt 0.942329 0.484463 +vt 0.945409 0.410028 +vt 0.952996 0.409935 +vt 0.942546 0.331778 +vt 0.342546 0.743532 +vt 0.334878 0.743555 +vt 0.342337 0.675297 +vt 0.334669 0.675321 +vt 0.334425 0.595943 +vt 0.342093 0.595919 +vt 0.341881 0.526668 +vt 0.513866 0.627997 +vt 0.521530 0.628020 +vt 0.523522 0.675921 +vt 0.515859 0.675897 +vt 0.524342 0.749056 +vt 0.516678 0.749032 +vt 0.523768 0.827828 +vt 0.516105 0.827805 +vt 0.521955 0.891132 +vt 0.450859 0.331796 +vt 0.530222 0.331685 +vt 0.598987 0.371272 +vt 0.513404 0.863656 +vt 0.505736 0.863633 +vt 0.513203 0.929300 +vt 0.505535 0.929277 +vt 0.039689 0.599849 +vt 0.000006 0.531119 +vt 0.108414 0.639514 +vt 0.830572 0.623547 +vt 0.837842 0.712975 +vt 0.792882 0.715173 +vt 0.785952 0.629929 +vt 0.760389 0.645015 +vt 0.538434 0.331685 +vt 0.455612 0.331599 +vt 0.462432 0.306441 +vt 0.758883 0.693669 +vt 0.757766 0.757554 +vt 0.722111 0.772972 +vt 0.340191 0.815624 +vt 0.340047 0.862634 +vt 0.296730 0.826599 +vt 0.676578 0.688839 +vt 0.675129 0.772828 +vt 0.639920 0.693304 +vt 0.224995 0.065745 +vt 0.157598 0.048960 +vt 0.157196 0.023387 +vt 0.237565 0.043402 +vt 0.248435 0.022857 +vt 0.873372 0.628856 +vt 0.880302 0.714100 +vt 0.837952 0.811916 +vt 0.792987 0.809483 +vt 0.766458 0.719664 +vt 0.383912 0.290126 +vt 0.402305 0.271662 +vt 0.757836 0.826514 +vt 0.722394 0.820120 +vt 0.675411 0.819976 +vt 0.638873 0.826149 +vt 0.090829 0.068110 +vt 0.077576 0.046222 +vt 0.065737 0.026077 +vt 0.880407 0.808411 +vt 0.830872 0.893857 +vt 0.786238 0.887590 +vt 0.760640 0.870651 +vt 0.342546 0.218378 +vt 0.367616 0.211494 +vt 0.759075 0.882071 +vt 0.722989 0.862610 +vt 0.676007 0.862466 +vt 0.042578 0.118064 +vt 0.020038 0.105790 +vt 0.000032 0.094100 +vt 0.873658 0.886518 +vt 0.410759 0.627997 +vt 0.410461 0.725136 +vt 0.366572 0.631903 +vt 0.366288 0.724497 +vt 0.343036 0.642066 +vt 0.342597 0.135579 +vt 0.367659 0.142060 +vt 0.880968 0.806986 +vt 0.880818 0.758099 +vt 0.916772 0.739329 +vt 0.651260 0.882071 +vt 0.697672 0.885209 +vt 0.662245 0.938429 +vt 0.963979 0.803673 +vt 0.963782 0.739184 +vt 1.000000 0.806621 +vt 0.025774 0.185436 +vt 0.000000 0.186130 +vt 0.478394 0.642481 +vt 0.478145 0.723566 +vt 0.454637 0.724768 +vt 0.454921 0.632174 +vt 0.410172 0.819393 +vt 0.366012 0.814343 +vt 0.342546 0.801829 +vt 0.384052 0.063917 +vt 0.402423 0.081964 +vt 0.880613 0.691089 +vt 0.916624 0.690900 +vt 0.963633 0.690756 +vt 0.999644 0.690724 +vt 0.044920 0.252175 +vt 0.022831 0.265714 +vt 0.477904 0.802245 +vt 0.454361 0.814614 +vt 0.409969 0.885511 +vt 0.365819 0.877368 +vt 0.368352 0.047191 +vt 0.450287 0.000000 +vt 0.455804 0.022591 +vt 0.462593 0.047308 +vt 0.880407 0.623912 +vt 0.916478 0.643449 +vt 0.963487 0.643305 +vt 0.094886 0.300397 +vt 0.082414 0.323218 +vt 0.071262 0.342388 +vt 0.454168 0.877639 +vt 0.227346 0.639514 +vt 0.226590 0.730789 +vt 0.183470 0.645319 +vt 0.544864 0.000098 +vt 0.538625 0.022677 +vt 0.532047 0.047380 +vt 0.004897 0.829814 +vt 0.000000 0.767199 +vt 0.037024 0.750858 +vt 0.942329 0.331690 +vt 0.942143 0.422777 +vt 0.880522 0.422772 +vt 0.089896 0.832774 +vt 0.083541 0.750430 +vt 0.122682 0.828730 +vt 0.162283 0.317182 +vt 0.162782 0.343233 +vt 0.295948 0.658646 +vt 0.295317 0.734836 +vt 0.271046 0.731781 +vt 0.271767 0.644777 +vt 0.227597 0.829298 +vt 0.182750 0.732323 +vt 0.626741 0.047457 +vt 0.610325 0.064150 +vt 0.000136 0.697941 +vt 0.038112 0.703199 +vt 0.084629 0.702771 +vt 0.117920 0.696857 +vt 0.229052 0.298032 +vt 0.242403 0.320397 +vt 0.296157 0.817064 +vt 0.272006 0.825681 +vt 0.230097 0.908646 +vt 0.183709 0.826223 +vt 0.673979 0.129389 +vt 0.651692 0.135898 +vt 0.592174 0.082159 +vt 0.005267 0.640598 +vt 0.040542 0.659803 +vt 0.087059 0.659375 +vt 0.277303 0.248078 +vt 0.299941 0.260829 +vt 0.319664 0.271145 +vt 0.274389 0.901316 +vt 0.741395 0.261535 +vt 0.741609 0.191696 +vt 0.785593 0.253882 +vt 0.673921 0.223940 +vt 0.651640 0.218697 +vt 0.626821 0.211761 +vt 0.810381 0.180625 +vt 0.810172 0.112628 +vt 0.846144 0.099522 +vt 0.182750 0.908788 +vt 0.229268 0.908646 +vt 0.222215 0.964156 +vt 0.893427 0.188659 +vt 0.893153 0.099377 +vt 0.929413 0.180260 +vt 0.294107 0.180706 +vt 0.319979 0.180490 +vt 0.697244 0.253611 +vt 0.697449 0.187039 +vt 0.741903 0.095967 +vt 0.786077 0.096061 +vt 0.785797 0.187310 +vt 0.809582 0.096028 +vt 0.610185 0.290360 +vt 0.592057 0.271858 +vt 0.809970 0.046648 +vt 0.846009 0.055773 +vt 0.893019 0.055628 +vt 0.929002 0.046283 +vt 0.274961 0.113968 +vt 0.673979 0.175520 +vt 0.674224 0.095612 +vt 0.697729 0.095790 +vt 0.742197 0.000000 +vt 0.786358 0.004584 +vt 0.809828 0.015921 +vt 0.531886 0.306513 +vt 0.809828 0.000365 +vt 0.845895 0.018329 +vt 0.892904 0.018185 +vt 0.674470 0.015506 +vt 0.698009 0.004313 +vt 0.296717 0.700612 +vt 0.296620 0.616610 +vt 0.332497 0.616060 +vt 0.697691 0.973157 +vt 0.697755 0.882071 +vt 0.759075 0.882090 +vt 0.673979 0.271562 +vt 0.720988 0.271418 +vt 0.710064 0.331575 +vt 0.880501 0.986627 +vt 0.880407 0.895539 +vt 0.941428 0.895638 +vt 0.296894 0.616060 +vt 0.296620 0.526778 +vt 0.332521 0.526668 +vt 0.942003 0.443940 +vt 0.942066 0.535002 +vt 0.880522 0.443704 +vt 0.132764 0.904948 +vt 0.179746 0.905092 +vt 0.142890 0.961540 +vt 0.478394 0.885555 +vt 0.478366 0.976614 +vt 0.417029 0.976571 +vt 0.768196 0.331685 +vt 0.767998 0.267196 +vt 0.804096 0.331575 +vt 0.819042 0.984916 +vt 0.819070 0.893857 +vt 0.880407 0.893900 +vt 0.911795 0.280229 +vt 0.911732 0.189167 +vt 0.972929 0.188803 +vt 0.772063 0.894433 +vt 0.819042 0.893857 +vt 0.807833 0.950559 +vt 0.513839 0.630393 +vt 0.513866 0.712982 +vt 0.478421 0.710586 +vt 0.296764 0.909643 +vt 0.296620 0.862634 +vt 0.340081 0.873609 +vt 0.403930 0.885530 +vt 0.403866 0.976615 +vt 0.342546 0.976597 +vt 0.767998 0.331685 +vt 0.720988 0.331541 +vt 0.757074 0.271528 +vt 0.819432 0.331679 +vt 0.804097 0.331685 +vt 0.804096 0.316355 +vt 0.485178 0.926307 +vt 0.484825 0.811289 +vt 0.500243 0.926261 +vt 0.819427 0.301009 +vt 0.819426 0.316344 +vt 0.804096 0.316349 +vt 0.014299 0.948221 +vt 0.014652 0.833202 +vt 0.025634 0.833236 +vt 0.000349 0.834079 +vt 0.014299 0.833202 +vt 0.013950 0.947021 +vt 0.943974 0.115104 +vt 0.929765 0.114953 +vt 0.929413 0.000000 +vt 0.513866 0.713006 +vt 0.950133 0.331685 +vt 0.499890 0.811242 +vt 0.514292 0.891109 +vt 0.638731 0.439950 +vt 0.638802 0.519317 +vt 0.382165 0.371576 +vt 0.599183 0.588106 +vt 0.342546 0.440365 +vt 0.342618 0.519731 +vt 0.382361 0.588410 +vt 0.530489 0.627886 +vt 0.187768 0.639484 +vt 0.256486 0.599768 +vt 0.297148 0.100906 +vt 0.000000 0.451739 +vt 0.296157 0.531008 +vt 0.039671 0.382978 +vt 0.108390 0.343263 +vt 0.187743 0.343233 +vt 0.296151 0.451628 +vt 0.256469 0.382898 +vt 0.723561 0.688983 +vt 0.296620 0.862500 +vt 0.638802 0.757189 +vt 0.156659 0.000000 +vt 0.186092 0.901858 +vt 0.766550 0.802252 +vt 0.334213 0.526692 +vt 0.640111 0.881706 +vt 0.916970 0.803817 +vt 0.697691 0.940825 +vt 0.999850 0.757734 +vt 0.342787 0.723150 +vt 0.451127 0.627997 +vt 0.999438 0.623547 +vt 0.880585 0.534766 +vt 0.003222 0.276723 +vt 0.043380 0.833203 +vt 0.880707 0.331685 +vt 0.117785 0.766115 +vt 0.342546 0.179402 +vt 0.123052 0.639514 +vt 0.253959 0.339168 +vt 0.626864 0.142327 +vt 0.846418 0.188803 +vt 0.186689 0.964265 +vt 0.929204 0.112263 +vt 0.809337 0.175935 +vt 0.928860 0.000000 +vt 0.803899 0.267086 +vt 0.332593 0.700061 +vt 0.759010 0.973175 +vt 0.674164 0.331685 +vt 0.941522 0.986726 +vt 0.332795 0.615950 +vt 0.178770 0.961650 +vt 0.417057 0.885511 +vt 0.880379 0.984960 +vt 0.972992 0.279865 +vt 0.771955 0.951000 +vt 0.478394 0.627997 +vt 0.340191 0.909510 +vt 0.342611 0.885511 +vt 0.721173 0.271418 +vt 0.819431 0.316349 +vt 0.804097 0.301014 +vt 0.025281 0.948255 +vt 0.000000 0.947897 +vt 0.943621 0.000151 +usemtl None +f 1/1 2/2 4/3 +f 3/4 4/5 6/6 +f 5/7 6/6 8/8 +f 7/9 8/10 9/11 +f 9/11 10/12 12/13 +f 11/14 12/13 13/15 +f 13/16 14/17 16/18 +f 15/19 16/18 18/20 +f 17/21 18/20 20/22 +f 19/23 20/22 22/24 +f 4/25 2/26 24/27 +f 23/28 24/29 1/1 +f 21/30 22/31 24/29 +f 1/32 3/33 23/34 +f 25/35 34/36 35/37 +f 26/38 35/37 27/39 +f 27/40 36/41 37/42 +f 28/43 37/44 38/45 +f 30/46 29/47 134/48 +f 30/49 39/50 31/51 +f 31/52 40/53 41/54 +f 32/55 41/54 33/56 +f 25/35 33/57 42/58 +f 34/36 43/59 44/60 +f 35/37 44/60 36/61 +f 36/41 45/62 46/63 +f 37/44 46/64 38/45 +f 38/45 47/65 39/50 +f 39/50 48/66 49/67 +f 40/53 49/68 50/69 +f 41/54 50/69 51/70 +f 42/58 51/71 34/36 +f 43/59 52/72 53/73 +f 44/60 53/73 54/74 +f 45/62 54/75 55/76 +f 46/64 55/77 56/78 +f 47/65 56/78 48/66 +f 48/66 57/79 49/67 +f 49/68 58/80 50/69 +f 50/69 59/81 60/82 +f 51/71 60/83 52/72 +f 52/84 61/85 53/86 +f 53/86 62/87 54/88 +f 54/75 63/89 64/90 +f 55/91 64/92 65/93 +f 57/94 56/95 142/96 +f 57/97 66/98 58/99 +f 58/80 67/100 68/101 +f 59/102 68/103 69/104 +f 60/105 69/104 61/85 +f 61/85 70/106 71/107 +f 62/87 71/107 72/108 +f 63/89 72/109 73/110 +f 64/92 73/111 65/93 +f 65/93 74/112 66/98 +f 66/98 75/113 76/114 +f 67/100 76/115 77/116 +f 68/103 77/117 69/104 +f 69/104 78/118 70/106 +f 70/106 79/119 80/120 +f 71/121 80/122 81/123 +f 72/109 81/123 82/124 +f 73/111 82/125 83/126 +f 74/112 83/126 75/113 +f 75/113 84/127 76/114 +f 76/115 85/128 77/116 +f 77/116 86/129 87/130 +f 78/118 87/131 70/106 +f 79/132 88/133 80/134 +f 80/122 89/135 90/136 +f 81/123 90/136 91/137 +f 82/138 91/139 92/140 +f 93/141 84/142 146/143 +f 84/144 93/145 85/146 +f 85/128 94/147 95/148 +f 86/149 95/150 96/151 +f 87/152 96/151 88/133 +f 88/133 97/153 89/154 +f 89/135 98/155 99/156 +f 90/136 99/156 91/137 +f 91/139 100/157 92/140 +f 92/140 101/158 102/159 +f 93/145 102/159 103/160 +f 94/147 103/161 104/162 +f 95/150 104/163 105/164 +f 96/151 105/164 97/153 +f 97/153 106/165 98/166 +f 98/155 107/167 99/156 +f 99/156 108/168 100/169 +f 100/157 109/170 110/171 +f 101/158 110/171 111/172 +f 102/159 111/172 103/160 +f 103/161 112/173 113/174 +f 104/162 113/174 114/175 +f 105/164 114/176 97/153 +f 106/177 115/178 107/179 +f 107/167 116/180 117/181 +f 108/168 117/181 118/182 +f 109/183 118/184 119/185 +f 119/186 120/187 140/188 +f 111/189 120/190 112/191 +f 112/173 121/192 122/193 +f 113/174 122/193 114/175 +f 114/194 123/195 115/178 +f 115/178 124/196 125/197 +f 116/198 125/197 126/199 +f 117/181 126/200 127/201 +f 118/184 127/202 119/185 +f 119/185 128/203 129/204 +f 120/190 129/204 130/205 +f 121/192 130/206 122/193 +f 122/207 131/208 132/209 +f 123/195 132/209 124/196 +f 124/196 25/210 26/211 +f 125/197 26/211 27/212 +f 126/200 27/40 28/213 +f 127/202 28/214 29/215 +f 128/203 29/215 30/216 +f 129/204 30/216 130/205 +f 130/206 31/52 32/55 +f 131/208 32/217 132/209 +f 132/209 33/218 25/210 +f 133/219 135/220 136/221 +f 29/222 38/223 135/224 +f 38/225 39/226 136/227 +f 39/228 30/229 134/230 +f 137/231 139/232 140/233 +f 120/234 111/235 140/236 +f 111/237 110/238 138/239 +f 110/240 119/241 139/242 +f 141/243 143/244 142/245 +f 56/246 65/247 143/248 +f 66/249 57/250 142/251 +f 65/252 66/253 144/254 +f 145/255 147/256 148/257 +f 92/258 93/259 148/260 +f 83/261 92/262 147/263 +f 84/264 83/265 146/266 +f 153/267 154/268 150/269 +f 154/270 155/271 150/272 +f 155/273 156/274 152/275 +f 156/276 153/277 149/278 +f 149/279 150/280 151/281 +f 156/282 155/283 154/284 +f 97/153 98/166 89/154 +f 3/285 1/1 4/3 +f 5/7 3/4 6/6 +f 7/286 5/7 8/8 +f 24/29 2/2 1/1 +f 11/14 9/11 12/13 +f 155/271 151/287 150/272 +f 15/19 13/16 16/18 +f 17/21 15/19 18/20 +f 19/23 17/21 20/22 +f 21/288 19/23 22/24 +f 4/25 24/27 22/289 +f 4/25 22/289 20/290 +f 6/291 4/25 20/290 +f 6/291 20/290 18/292 +f 8/293 6/291 10/294 +f 6/291 18/292 10/294 +f 10/294 18/292 12/295 +f 18/292 16/296 12/295 +f 47/65 48/66 39/50 +f 23/28 21/30 24/29 +f 21/297 23/34 19/298 +f 130/206 131/299 122/193 +f 3/33 5/300 19/298 +f 19/298 5/300 17/301 +f 5/300 7/302 17/301 +f 7/302 9/303 11/304 +f 17/301 7/302 11/304 +f 15/305 17/301 11/304 +f 13/306 15/305 11/304 +f 26/38 25/35 35/37 +f 61/85 62/87 53/86 +f 28/213 27/40 37/42 +f 29/307 28/43 38/45 +f 29/47 133/308 134/48 +f 39/50 40/309 31/51 +f 32/55 31/52 41/54 +f 58/80 59/81 50/69 +f 34/36 25/35 42/58 +f 35/37 34/36 44/60 +f 85/128 86/129 77/116 +f 37/42 36/41 46/63 +f 46/64 47/65 38/45 +f 88/133 89/154 80/134 +f 40/309 39/50 49/67 +f 41/54 40/53 50/69 +f 42/310 41/54 51/70 +f 106/165 107/311 98/166 +f 44/60 43/59 53/73 +f 45/312 44/60 54/74 +f 46/63 45/62 55/76 +f 47/65 46/64 56/78 +f 12/13 14/313 13/15 +f 57/79 58/314 49/67 +f 115/178 116/198 107/179 +f 51/70 50/69 60/82 +f 43/59 51/71 52/72 +f 51/71 43/59 34/36 +f 35/37 36/61 27/39 +f 55/76 54/75 64/90 +f 56/315 55/91 65/93 +f 56/95 141/316 142/96 +f 66/98 67/317 58/99 +f 59/81 58/80 68/101 +f 60/105 59/102 69/104 +f 52/84 60/105 61/85 +f 62/87 61/85 71/107 +f 63/318 62/87 72/108 +f 64/90 63/89 73/110 +f 73/111 74/112 65/93 +f 41/54 42/310 33/56 +f 67/317 66/98 76/114 +f 68/101 67/100 77/116 +f 16/296 14/319 12/295 +f 61/85 69/104 70/106 +f 71/107 70/106 80/120 +f 72/109 71/121 81/123 +f 73/110 72/109 82/124 +f 74/112 73/111 83/126 +f 32/217 33/218 132/209 +f 84/127 85/320 76/114 +f 111/235 138/321 140/236 +f 78/322 77/116 87/130 +f 114/176 106/165 97/153 +f 44/60 45/312 36/61 +f 81/123 80/122 90/136 +f 82/124 81/123 91/137 +f 83/323 82/138 92/140 +f 148/324 93/141 146/143 +f 93/145 94/325 85/146 +f 86/129 85/128 95/148 +f 87/152 86/149 96/151 +f 79/132 87/152 88/133 +f 77/117 78/118 69/104 +f 90/136 89/135 99/156 +f 99/156 100/169 91/137 +f 100/157 101/158 92/140 +f 93/145 92/140 102/159 +f 94/325 93/145 103/160 +f 95/148 94/147 104/162 +f 96/151 95/150 105/164 +f 88/133 96/151 97/153 +f 56/78 57/79 48/66 +f 62/87 63/318 54/88 +f 122/193 123/326 114/175 +f 101/158 100/157 110/171 +f 102/159 101/158 111/172 +f 111/172 112/327 103/160 +f 104/162 103/161 113/174 +f 105/328 104/162 114/175 +f 83/126 84/127 75/113 +f 107/167 108/168 99/156 +f 108/168 107/167 117/181 +f 109/329 108/168 118/182 +f 110/330 109/183 119/185 +f 139/331 119/186 140/188 +f 120/190 121/332 112/191 +f 113/174 112/173 122/193 +f 87/131 79/119 70/106 +f 106/177 114/194 115/178 +f 116/198 115/178 125/197 +f 117/333 116/198 126/199 +f 118/182 117/181 127/201 +f 127/202 128/203 119/185 +f 120/190 119/185 129/204 +f 121/332 120/190 130/205 +f 108/168 109/329 100/169 +f 123/195 122/207 132/209 +f 115/178 123/195 124/196 +f 125/197 124/196 26/211 +f 126/199 125/197 27/212 +f 127/201 126/200 28/213 +f 128/203 127/202 29/215 +f 129/204 128/203 30/216 +f 30/216 31/334 130/205 +f 131/299 130/206 32/55 +f 143/244 144/335 142/245 +f 124/196 132/209 25/210 +f 134/336 133/219 136/221 +f 133/337 29/222 135/224 +f 135/338 38/225 136/227 +f 136/339 39/228 134/230 +f 138/340 137/231 140/233 +f 23/34 3/33 19/298 +f 110/238 137/341 138/239 +f 137/342 110/240 139/242 +f 74/112 75/113 66/98 +f 141/343 56/246 143/248 +f 144/344 66/249 142/251 +f 143/345 65/252 144/254 +f 146/346 145/255 148/257 +f 147/347 92/258 148/260 +f 145/348 83/261 147/263 +f 83/265 145/349 146/266 +f 149/350 153/267 150/269 +f 8/10 10/12 9/11 +f 151/351 155/273 152/275 +f 152/352 156/276 149/278 +f 152/353 149/279 151/281 +f 153/354 156/282 154/284 +o WheelRightCover_Cover +v 0.922960 1.345017 -0.315400 +v 0.922960 1.355781 0.362945 +v 0.929018 1.318946 -0.287819 +v 0.929018 1.329710 0.361483 +v 0.634914 1.067985 -0.943225 +v 0.922960 1.027356 -0.896944 +v 0.193601 0.924477 -0.779757 +v 0.346868 1.027356 -0.896944 +v 0.634914 1.401240 -0.333134 +v 0.922960 1.345017 -0.315400 +v 0.193601 1.202655 -0.270496 +v 0.346868 1.345017 -0.315400 +v 0.634914 1.412532 0.378510 +v 0.922960 1.355781 0.362945 +v 0.193601 1.212081 0.323534 +v 0.346868 1.355781 0.362945 +v 0.634914 1.098837 1.001023 +v 0.922960 1.056764 0.956330 +v 0.193601 0.950230 0.843164 +v 0.346868 1.056764 0.956330 +v 0.634914 0.544209 1.367602 +v 0.922960 0.528088 1.305757 +v 0.193601 0.487266 1.149159 +v 0.346868 0.528087 1.305757 +v 0.634914 -0.102740 1.380024 +v 0.922960 -0.088590 1.317597 +v 0.193602 -0.052762 1.159528 +v 0.346868 -0.088590 1.317597 +v 0.640971 1.041915 -0.888763 +v 0.929017 1.001285 -0.844463 +v 0.199659 0.898407 -0.732294 +v 0.352925 1.001285 -0.844464 +v 0.640971 1.375169 -0.304793 +v 0.929017 1.318946 -0.287819 +v 0.199659 1.176584 -0.244838 +v 0.352925 1.318946 -0.287819 +v 0.640971 1.386462 0.376381 +v 0.929017 1.329710 0.361483 +v 0.199659 1.186010 0.323759 +v 0.352925 1.329710 0.361483 +v 0.640971 1.072767 0.972241 +v 0.929017 1.030694 0.929462 +v 0.199659 0.924160 0.821140 +v 0.352925 1.030693 0.929461 +v 0.640971 0.518139 1.323125 +v 0.929018 0.502017 1.263927 +v 0.199659 0.461195 1.114034 +v 0.352925 0.502017 1.263927 +v 0.640971 -0.128810 1.335014 +v 0.929018 -0.114661 1.275261 +v 0.199659 -0.078832 1.123959 +v 0.352925 -0.114661 1.275261 +vt 0.505535 0.712982 +vt 0.505522 0.817017 +vt 0.501434 0.812862 +vt 0.911732 0.256477 +vt 0.911376 0.300653 +vt 0.809828 0.256790 +vt 0.909786 0.188803 +vt 0.911105 0.212304 +vt 0.813968 0.212602 +vt 0.810266 0.623547 +vt 0.767484 0.617750 +vt 0.802895 0.525056 +vt 0.880522 0.601715 +vt 0.854909 0.617214 +vt 0.847883 0.523332 +vt 0.760457 0.523868 +vt 0.760389 0.422038 +vt 0.874369 0.519502 +vt 0.874310 0.430329 +vt 0.847815 0.421501 +vt 0.802824 0.418227 +vt 0.767298 0.339545 +vt 0.880360 0.358090 +vt 0.854723 0.339009 +vt 0.077989 0.935533 +vt 0.033855 0.930923 +vt 0.034707 0.838364 +vt 0.718072 0.626052 +vt 0.733713 0.644685 +vt 0.644853 0.664718 +vt 0.122200 0.931736 +vt 0.123052 0.839177 +vt 0.885507 0.579191 +vt 0.952468 0.579397 +vt 0.880522 0.623351 +vt 0.478424 0.803552 +vt 0.478394 0.717505 +vt 0.500209 0.712982 +vt 0.880793 0.535002 +vt 0.944621 0.535198 +vt 0.570052 0.627997 +vt 0.569259 0.724135 +vt 0.526176 0.633923 +vt 0.638651 0.647557 +vt 0.637989 0.727806 +vt 0.613716 0.725021 +vt 0.614472 0.633381 +vt 0.570234 0.826899 +vt 0.526349 0.823518 +vt 0.638802 0.813586 +vt 0.614645 0.822976 +vt 0.572715 0.908751 +vt 0.528714 0.901541 +vt 0.296832 0.516394 +vt 0.319201 0.435423 +vt 0.317002 0.526668 +vt 0.617010 0.900999 +vt 0.880407 0.851389 +vt 0.950182 0.851175 +vt 0.955160 0.895335 +vt 0.296620 0.355759 +vt 0.342546 0.434204 +vt 0.888378 0.807190 +vt 0.954889 0.806986 +vt 0.760361 0.552208 +vt 0.755244 0.550990 +vt 0.718149 0.382255 +vt 0.760389 0.462972 +vt 0.716320 0.387568 +vt 0.179746 0.720354 +vt 0.177852 0.817509 +vt 0.172210 0.816323 +vt 0.644959 0.331685 +vt 0.644632 0.339984 +vt 0.078883 0.838430 +vt 0.078002 0.833202 +vt 0.130698 0.639514 +vt 0.172167 0.720396 +vt 0.756806 0.464801 +vt 0.330131 0.702384 +vt 0.330189 0.803978 +vt 0.322803 0.798856 +vt 0.650102 0.688839 +vt 0.643585 0.684838 +vt 0.313835 0.815624 +vt 0.296620 0.774114 +vt 0.305866 0.773231 +vt 0.123170 0.901676 +vt 0.296875 0.728970 +vt 0.314479 0.701317 +vt 0.305843 0.728137 +vt 0.712052 0.623039 +vt 0.501517 0.713280 +vt 0.814240 0.300951 +vt 0.824724 0.189064 +vt 0.810072 0.331685 +vt 0.944350 0.623547 +vt 0.500243 0.811242 +vt 0.525420 0.725563 +vt 0.888649 0.895539 +vt 0.316761 0.343233 +vt 0.122171 0.834026 +vt 0.123052 0.639598 +vt 0.324578 0.700612 +vt 0.638802 0.661644 +vt 0.033825 0.833213 +vt 0.322803 0.814792 +vt 0.322746 0.700612 +vt 0.125521 0.904948 +usemtl None +f 158/355 157/356 159/357 +f 161/358 162/359 165/360 +f 163/361 164/362 168/363 +f 164/362 161/358 165/360 +f 165/364 166/365 169/366 +f 167/367 168/368 172/369 +f 168/368 165/364 169/366 +f 169/366 170/370 174/371 +f 171/372 172/369 175/373 +f 172/369 169/366 176/374 +f 173/375 174/371 178/376 +f 175/373 176/374 179/377 +f 176/374 173/375 180/378 +f 177/379 178/380 182/381 +f 179/382 180/383 183/384 +f 180/385 177/379 184/386 +f 185/387 189/388 186/389 +f 187/390 191/391 192/392 +f 188/393 192/394 189/388 +f 189/395 193/396 190/397 +f 191/398 195/399 196/400 +f 192/401 196/400 193/396 +f 193/396 197/402 198/403 +f 195/399 199/404 196/400 +f 196/400 200/405 193/396 +f 197/402 201/406 202/407 +f 199/408 203/409 200/410 +f 200/405 204/411 197/402 +f 201/412 205/413 206/414 +f 203/409 207/415 204/416 +f 204/417 208/418 201/412 +f 175/419 179/382 199/420 +f 167/421 171/422 191/423 +f 178/424 174/425 198/426 +f 163/427 167/421 187/428 +f 184/386 181/429 205/430 +f 182/431 178/424 202/432 +f 171/422 175/419 195/433 +f 166/434 162/435 186/436 +f 183/384 184/437 208/438 +f 181/429 182/381 205/430 +f 162/439 161/440 185/441 +f 198/426 174/425 194/442 +f 161/440 164/443 185/441 +f 164/443 163/444 188/445 +f 179/382 183/384 203/446 +f 160/447 158/355 159/357 +f 162/359 166/448 165/360 +f 167/449 163/361 168/363 +f 168/363 164/362 165/360 +f 166/365 170/370 169/366 +f 171/372 167/367 172/369 +f 172/369 168/368 169/366 +f 173/375 169/366 174/371 +f 172/369 176/374 175/373 +f 169/366 173/375 176/374 +f 177/450 173/375 178/376 +f 176/374 180/378 179/377 +f 173/375 177/450 180/378 +f 181/429 177/379 182/381 +f 180/383 184/437 183/384 +f 177/379 181/429 184/386 +f 189/388 190/451 186/389 +f 188/452 187/390 192/392 +f 185/387 188/393 189/388 +f 193/396 194/453 190/397 +f 192/401 191/398 196/400 +f 189/395 192/401 193/396 +f 194/453 193/396 198/403 +f 199/404 200/405 196/400 +f 200/405 197/402 193/396 +f 198/403 197/402 202/407 +f 203/409 204/416 200/410 +f 204/411 201/406 197/402 +f 202/454 201/412 206/414 +f 207/415 208/455 204/416 +f 208/418 205/413 201/412 +f 179/382 203/446 199/420 +f 171/422 195/433 191/423 +f 202/432 178/424 198/426 +f 167/421 191/423 187/428 +f 208/456 184/386 205/430 +f 206/457 182/431 202/432 +f 175/419 199/420 195/433 +f 190/458 166/434 186/436 +f 207/459 183/384 208/438 +f 182/381 206/460 205/430 +f 186/461 162/439 185/441 +f 164/443 188/445 185/441 +f 163/444 187/462 188/445 +f 183/384 207/459 203/446 +f 174/425 170/463 194/442 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc.bdc3D new file mode 100644 index 00000000..7e76ecc0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc_side.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc_side.bdc3D new file mode 100644 index 00000000..b3713821 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/arc_side.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_0.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_0.bdc3D new file mode 100644 index 00000000..a4bfe9e6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_0.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_1.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_1.bdc3D new file mode 100644 index 00000000..44e9a7b1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_1.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_2.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_2.bdc3D new file mode 100644 index 00000000..ad396376 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/cryo_2.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/fluid_tank.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/fluid_tank.bdc3D new file mode 100644 index 00000000..2cc4934a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/fluid_tank.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/meteor_chunk.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/meteor_chunk.bdc3D new file mode 100644 index 00000000..6ef6bb35 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/meteor_chunk.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/oxygen_pipe.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/oxygen_pipe.bdc3D new file mode 100644 index 00000000..94c68372 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/oxygen_pipe.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/parachest.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/parachest.bdc3D new file mode 100644 index 00000000..350e5111 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/parachest.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/slimelingEgg.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/slimelingEgg.bdc3D new file mode 100644 index 00000000..177a4b2f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/slimelingEgg.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/spin_thruster.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/spin_thruster.bdc3D new file mode 100644 index 00000000..26dd6dc0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/spin_thruster.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/treasure_chest.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/treasure_chest.bdc3D new file mode 100644 index 00000000..a44fb47a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/treasure_chest.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/vscreen.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/vscreen.bdc3D new file mode 100644 index 00000000..c497f04f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/vscreen.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway.bdc3D new file mode 100644 index 00000000..bb96ad45 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_oxygen.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_oxygen.bdc3D new file mode 100644 index 00000000..53e3ec7f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_oxygen.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_wire.bdc3D b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_wire.bdc3D new file mode 100644 index 00000000..1b6b6d5f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/cubik/walkway_wire.bdc3D differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.mtl new file mode 100644 index 00000000..66290680 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:model/flag0 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.obj new file mode 100644 index 00000000..7ad82d97 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/flag.obj @@ -0,0 +1,71 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib flag.mtl +o Flag +v 0.028002 2.746445 0.000000 +v 2.028002 2.746445 0.000000 +v 0.028002 4.079778 -0.000000 +v 2.028002 4.079778 -0.000000 +vt 0.565500 0.566515 +vt 0.997430 0.566515 +vt 0.997430 0.998446 +vt 0.565500 0.998446 +vn 0.000000 0.000000 1.000000 +usemtl None +f 1/1/1 2/2/1 4/3/1 3/4/1 +o Pole +v -0.050000 0.099999 0.050000 +v -0.050000 4.100000 0.050000 +v -0.050000 0.099999 -0.050000 +v -0.050000 4.100000 -0.050000 +v 0.050000 0.099999 0.050000 +v 0.050000 4.100000 0.050000 +v 0.050000 0.099999 -0.050000 +v 0.050000 4.100000 -0.050000 +v -0.150000 -0.000000 0.150000 +v -0.150000 0.100000 0.150000 +v -0.150000 -0.000000 -0.150000 +v -0.150000 0.100000 -0.150000 +v 0.150000 -0.000000 0.150000 +v 0.150000 0.100000 0.150000 +v 0.150000 -0.000000 -0.150000 +v 0.150000 0.100000 -0.150000 +vt 0.016810 0.369784 +vt 0.030926 0.369784 +vt 0.030926 0.980653 +vt 0.016810 0.980653 +vt 0.016422 0.985438 +vt 0.030538 0.985438 +vt 0.030538 0.999339 +vt 0.016422 0.999339 +vt 0.109322 0.938177 +vt 0.161729 0.938177 +vt 0.161729 0.952402 +vt 0.109322 0.952402 +vt 0.110678 0.955884 +vt 0.152796 0.955884 +vt 0.152796 0.998002 +vt 0.110678 0.998002 +vt 0.109504 0.954710 +vt 0.153970 0.954710 +vt 0.153970 0.999176 +vt 0.109504 0.999176 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +f 6/5/2 8/6/2 7/7/2 5/8/2 +f 8/5/3 12/6/3 11/7/3 7/8/3 +f 12/5/4 10/6/4 9/7/4 11/8/4 +f 10/5/5 6/6/5 5/7/5 9/8/5 +f 5/5/6 7/6/6 11/7/6 9/8/6 +f 10/9/7 12/10/7 8/11/7 6/12/7 +f 14/13/2 16/14/2 15/15/2 13/16/2 +f 16/13/3 20/14/3 19/15/3 15/16/3 +f 20/13/4 18/14/4 17/15/4 19/16/4 +f 18/13/5 14/14/5 13/15/5 17/16/5 +f 13/17/6 15/18/6 19/19/6 17/20/6 +f 18/21/7 20/22/7 16/23/7 14/24/7 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.mtl new file mode 100644 index 00000000..9c773051 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftcore:model/frequency_module diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.obj new file mode 100644 index 00000000..97cc89dd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/frequency_module.obj @@ -0,0 +1,628 @@ +mtllib frequency_module.mtl +o Main +v -0.026662 1.289106 0.026662 +v -0.026662 1.289106 -0.026662 +v -0.026662 0.725576 -0.026662 +v -0.026662 0.725576 0.026662 +v 0.026662 1.289106 -0.026662 +v 0.026662 0.725576 -0.026662 +v 0.026662 1.289106 0.026662 +v 0.026662 0.725576 0.026662 +v -0.098023 0.739949 0.525366 +v -0.098023 0.739949 -0.525366 +v -0.098023 -0.310782 -0.525366 +v -0.098023 -0.310782 0.525366 +v 0.098023 0.739949 -0.525366 +v 0.098023 -0.310782 -0.525366 +v 0.098023 0.739949 0.525366 +v 0.098023 -0.310782 0.525366 +v -0.128950 0.479051 0.246125 +v -0.128950 0.479051 -0.246125 +v -0.128950 -0.013198 -0.246125 +v -0.128950 -0.013198 0.246125 +v -0.063869 0.479051 -0.246125 +v -0.063869 -0.013198 -0.246125 +v -0.063869 0.479051 0.246125 +v -0.063869 -0.013198 0.246125 +vt 0.370131 0.008273 +vt 0.370131 0.365759 +vt 0.359770 0.365759 +vt 0.002487 0.002098 +vt 0.353830 0.395883 +vt 0.353830 0.728636 +vt 0.021077 0.728636 +vt 0.008705 0.006696 +vt 0.369398 0.006696 +vt 0.369398 0.367389 +vt 0.016728 0.006184 +vt 0.016728 0.367900 +vt 0.000965 0.367900 +vt 0.341363 0.034730 +vt 0.341363 0.339354 +vt 0.036740 0.339354 +vt 0.742240 0.003883 +vt 0.742240 0.332565 +vt 0.381416 0.332565 +vt 0.402686 0.006553 +vt 0.402686 0.333991 +vt 0.381002 0.333991 +vt 0.359770 0.008273 +vt 0.021077 0.395883 +vt 0.008705 0.367389 +vt 0.000965 0.006184 +vt 0.036740 0.034730 +vt 0.381416 0.003883 +vt 0.381002 0.006553 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +f 2/1/1 3/2/1 4/3/1 +f 5/1/2 6/2/2 3/3/2 +f 7/1/3 8/2/3 6/3/3 +f 1/1/4 4/2/4 8/3/4 +f 3/4/5 6/4/5 8/4/5 +f 5/5/6 2/6/6 1/7/6 +f 9/8/1 10/9/1 11/10/1 +f 13/11/2 14/12/2 11/13/2 +f 15/14/3 16/15/3 14/16/3 +f 9/11/4 12/12/4 16/13/4 +f 11/11/5 14/12/5 16/13/5 +f 13/11/6 10/12/6 9/13/6 +f 18/17/1 19/18/1 20/19/1 +f 21/20/2 22/21/2 19/22/2 +f 23/17/3 24/18/3 22/19/3 +f 17/20/4 20/21/4 24/22/4 +f 19/20/5 22/21/5 24/22/5 +f 21/20/6 18/21/6 17/22/6 +f 1/23/1 2/1/1 4/3/1 +f 2/23/2 5/1/2 3/3/2 +f 5/23/3 7/1/3 6/3/3 +f 7/23/4 1/1/4 8/3/4 +f 4/4/5 3/4/5 8/4/5 +f 7/24/6 5/5/6 1/7/6 +f 12/25/1 9/8/1 11/10/1 +f 10/26/2 13/11/2 11/13/2 +f 13/27/3 15/14/3 14/16/3 +f 15/26/4 9/11/4 16/13/4 +f 12/26/5 11/11/5 16/13/5 +f 15/26/6 13/11/6 9/13/6 +f 17/28/1 18/17/1 20/19/1 +f 18/29/2 21/20/2 19/22/2 +f 21/28/3 23/17/3 22/19/3 +f 23/29/4 17/20/4 24/22/4 +f 20/29/5 19/20/5 24/22/5 +f 23/29/6 21/20/6 17/22/6 +o Radar +v -0.000819 -0.003430 -0.002291 +v -0.080981 -0.061191 -0.207461 +v -0.000819 -0.003430 -0.230013 +v -0.145267 -0.107511 -0.144273 +v -0.180942 -0.133218 -0.052964 +v -0.180942 -0.133218 0.048381 +v -0.145267 -0.107511 0.139691 +v -0.080981 -0.061191 0.202879 +v -0.000819 -0.003430 0.225430 +v 0.079344 0.054331 0.202879 +v 0.143629 0.100652 0.139691 +v 0.179305 0.126358 0.048381 +v 0.179305 0.126358 -0.052964 +v 0.143629 0.100652 -0.144273 +v 0.079344 0.054331 -0.207461 +v -0.250131 -0.131041 -0.223091 +v -0.419775 -0.163533 -0.101236 +v -0.350114 -0.113339 -0.279528 +v -0.250131 -0.131041 0.218508 +v -0.224589 -0.022892 0.398327 +v -0.350114 -0.113339 0.274945 +v 0.099166 0.120644 0.316773 +v 0.199138 0.192679 0.218508 +v 0.088464 0.202678 0.398327 +v 0.254618 0.232655 -0.081094 +v 0.213989 0.293125 -0.279528 +v 0.283650 0.343319 -0.101236 +v -0.150159 -0.059007 -0.321356 +v -0.224589 -0.022892 -0.402910 +v -0.305611 -0.171017 0.076511 +v -0.419775 -0.163533 0.096653 +v -0.025497 0.030819 0.351844 +v -0.068062 0.089893 0.442362 +v 0.254618 0.232655 0.076511 +v 0.283650 0.343319 0.096653 +v 0.099166 0.120644 -0.321356 +v -0.068062 0.089893 -0.446944 +v 0.088464 0.202678 -0.402910 +v -0.305611 -0.171017 -0.081094 +v -0.150159 -0.059007 0.316773 +v 0.213989 0.293125 0.274945 +v 0.199138 0.192679 -0.223091 +v -0.025496 0.030819 -0.356427 +v 0.213989 0.293125 -0.279528 +v -0.068062 0.089893 -0.446944 +v -0.350114 -0.113339 -0.279528 +v -0.350114 -0.113339 0.274945 +v 0.088464 0.202678 0.398327 +v 0.283650 0.343319 -0.101236 +v -0.224589 -0.022892 -0.402910 +v -0.419775 -0.163533 0.096653 +v -0.068062 0.089893 0.442362 +v 0.283650 0.343319 0.096653 +v 0.088464 0.202678 -0.402910 +v -0.419775 -0.163533 -0.101236 +v -0.224589 -0.022892 0.398327 +v 0.213989 0.293125 0.274945 +v -0.311241 0.044272 -0.467362 +v -0.537828 -0.118995 0.112572 +v 0.052177 0.306132 0.462779 +v -0.129532 0.175202 0.513898 +v 0.278764 0.469400 -0.117154 +v 0.278764 0.469400 0.112572 +v -0.129532 0.175202 -0.518481 +v 0.052177 0.306132 -0.467362 +v -0.537828 -0.118995 -0.117154 +v -0.311241 0.044272 0.462779 +v 0.197896 0.411130 0.319547 +v 0.197896 0.411130 -0.324130 +v -0.456960 -0.060726 -0.324130 +v -0.456960 -0.060726 0.319547 +v -0.008930 0.007827 -0.002291 +v 0.071233 0.065588 -0.207461 +v -0.008930 0.007827 -0.230013 +v 0.135518 0.111909 -0.144273 +v 0.171194 0.137615 -0.052964 +v 0.171194 0.137615 0.048381 +v 0.135518 0.111909 0.139691 +v 0.071233 0.065588 0.202879 +v -0.008930 0.007827 0.225430 +v -0.089092 -0.049934 0.202879 +v -0.153377 -0.096255 0.139691 +v -0.189053 -0.121961 0.048381 +v -0.189053 -0.121961 -0.052964 +v -0.153377 -0.096255 -0.144273 +v -0.089092 -0.049934 -0.207461 +v 0.191027 0.203935 -0.223091 +v 0.275539 0.354576 -0.101236 +v 0.205878 0.304381 -0.279528 +v 0.191027 0.203935 0.218508 +v 0.080354 0.213935 0.398327 +v 0.205878 0.304381 0.274945 +v -0.158270 -0.047750 0.316773 +v -0.358224 -0.102083 0.274945 +v -0.232700 -0.011636 0.398327 +v -0.313722 -0.159761 -0.081094 +v -0.358224 -0.102083 -0.279528 +v -0.427885 -0.152277 -0.101236 +v 0.091055 0.131901 -0.321356 +v 0.080354 0.213934 -0.402910 +v 0.246507 0.243911 0.076511 +v 0.275539 0.354576 0.096653 +v -0.033607 0.042075 0.351844 +v -0.076173 0.101149 0.442362 +v -0.313722 -0.159761 0.076511 +v -0.427885 -0.152277 0.096653 +v -0.158270 -0.047750 -0.321356 +v -0.033607 0.042075 -0.356427 +v -0.232700 -0.011636 -0.402910 +v 0.246507 0.243911 -0.081094 +v 0.091055 0.131901 0.316773 +v -0.258242 -0.119785 0.218508 +v -0.258242 -0.119785 -0.223091 +v -0.076173 0.101149 -0.446945 +v -0.358224 -0.102083 -0.279528 +v -0.076173 0.101149 -0.446945 +v 0.205878 0.304381 -0.279528 +v 0.205878 0.304381 0.274945 +v -0.232700 -0.011636 0.398327 +v -0.427885 -0.152277 -0.101236 +v 0.080354 0.213934 -0.402910 +v 0.275539 0.354576 0.096653 +v -0.076173 0.101149 0.442362 +v -0.427885 -0.152277 0.096653 +v -0.232700 -0.011636 -0.402910 +v 0.275539 0.354576 -0.101236 +v 0.080354 0.213935 0.398327 +v -0.358224 -0.102083 0.274945 +v 0.044066 0.317389 -0.467362 +v 0.270653 0.480656 0.112571 +v -0.137643 0.186459 0.513898 +v -0.545939 -0.107739 -0.117154 +v -0.545939 -0.107739 0.112572 +v -0.137643 0.186459 -0.518481 +v -0.319351 0.055529 -0.467362 +v 0.270653 0.480656 -0.117154 +v 0.044066 0.317389 0.462779 +v -0.465071 -0.049469 0.319547 +v -0.465071 -0.049469 -0.324130 +v 0.189785 0.422387 -0.324130 +v 0.189785 0.422387 0.319547 +v -0.319352 0.055529 0.462779 +vt 0.020689 0.395883 +vt 0.353442 0.395883 +vt 0.353442 0.728636 +vn 0.584600 -0.811300 -0.000000 +vn -0.014300 -0.961000 -0.276100 +vn 0.129000 -0.857800 0.497600 +vn 0.772900 -0.393800 0.497600 +vn 0.916100 -0.290600 -0.276100 +vn 0.129000 -0.857800 -0.497600 +vn -0.014300 -0.961000 0.276100 +vn 0.565800 -0.543000 0.620500 +vn 0.967300 -0.253800 0.000000 +vn 0.565800 -0.543000 -0.620500 +vn -0.065400 -0.997900 -0.000000 +vn 0.336000 -0.708600 0.620500 +vn 0.916100 -0.290600 0.276100 +vn 0.772900 -0.393800 -0.497600 +vn 0.336000 -0.708600 -0.620500 +vn 0.611600 -0.725400 0.315900 +vn 0.316200 -0.938200 0.140600 +vn 0.389100 -0.885700 -0.253300 +vn 0.789900 -0.596900 -0.140600 +vn 0.717000 -0.649400 0.253300 +vn 0.389100 -0.885700 0.253300 +vn 0.316200 -0.938200 -0.140600 +vn 0.494600 -0.809700 -0.315900 +vn 0.717000 -0.649400 -0.253300 +vn 0.789900 -0.596900 0.140600 +vn 0.494600 -0.809700 0.315900 +vn 0.290200 -0.957000 -0.000000 +vn 0.611600 -0.725400 -0.315900 +vn 0.816000 -0.578100 -0.000000 +vn 0.000000 0.000000 1.000000 +vn -0.098400 -0.752200 -0.651500 +vn -0.286000 -0.887400 0.361600 +vn 0.473600 -0.340000 0.812500 +vn 0.999200 0.038700 0.000000 +vn 0.473600 -0.340000 -0.812500 +vn -0.353000 -0.935600 -0.000000 +vn 0.172700 -0.556900 0.812500 +vn 0.932300 -0.009500 0.361600 +vn 0.744700 -0.144700 -0.651500 +vn 0.172700 -0.556900 -0.812500 +vn -0.286000 -0.887400 -0.361600 +vn -0.098400 -0.752200 0.651500 +vn 0.744700 -0.144700 0.651500 +vn 0.932300 -0.009500 -0.361600 +vn -0.584600 0.811300 0.000000 +vn -0.916100 0.290600 0.276100 +vn -0.772900 0.393800 -0.497600 +vn -0.129000 0.857800 -0.497600 +vn 0.014300 0.961000 0.276100 +vn -0.772900 0.393800 0.497600 +vn -0.916100 0.290600 -0.276100 +vn -0.336000 0.708600 -0.620500 +vn 0.065400 0.997900 0.000000 +vn -0.336000 0.708600 0.620500 +vn -0.967300 0.253800 0.000000 +vn -0.565800 0.543000 -0.620500 +vn 0.014300 0.961000 -0.276100 +vn -0.129000 0.857800 0.497600 +vn -0.565800 0.543000 0.620500 +vn -0.494600 0.809700 -0.315900 +vn -0.789900 0.596900 -0.140600 +vn -0.717000 0.649400 0.253300 +vn -0.316200 0.938200 0.140600 +vn -0.389100 0.885700 -0.253300 +vn -0.717000 0.649400 -0.253300 +vn -0.789900 0.596900 0.140600 +vn -0.611600 0.725400 0.315900 +vn -0.389100 0.885700 0.253300 +vn -0.316200 0.938200 -0.140600 +vn -0.611600 0.725400 -0.315900 +vn -0.816000 0.578100 0.000000 +vn -0.494600 0.809700 0.315900 +vn -0.290200 0.957000 0.000000 +vn -0.744700 0.144700 0.651500 +vn -0.932300 0.009500 -0.361600 +vn -0.172700 0.556900 -0.812500 +vn 0.353000 0.935600 0.000000 +vn -0.172700 0.556900 0.812500 +vn -0.999200 -0.038700 -0.000000 +vn -0.473600 0.340000 -0.812500 +vn 0.286000 0.887400 -0.361600 +vn 0.098400 0.752200 0.651500 +vn -0.473600 0.340000 0.812500 +vn -0.932300 0.009500 0.361600 +vn -0.744700 0.144700 -0.651500 +vn 0.098400 0.752200 -0.651500 +vn 0.286000 0.887400 0.361600 +vn 0.180500 0.130100 -0.974900 +vn 0.505900 0.364500 -0.781800 +vn 0.731000 0.526700 -0.433900 +vn 0.811300 0.584600 0.000000 +vn 0.730900 0.526800 0.433900 +vn 0.505900 0.364500 0.781800 +vn 0.180500 0.130100 0.974900 +vn -0.180500 -0.130100 0.974900 +vn -0.505900 -0.364500 0.781800 +vn -0.731000 -0.526700 0.433900 +vn -0.811300 -0.584600 -0.000000 +vn -0.731000 -0.526700 -0.433900 +vn -0.505900 -0.364500 -0.781800 +vn -0.180500 -0.130100 -0.974900 +vn 0.473600 -0.340100 -0.812500 +vn 0.731000 0.526700 0.433900 +usemtl None +f 25/30/7 26/31/7 27/32/7 +f 25/30/7 28/31/7 26/32/7 +f 25/30/7 29/31/7 28/32/7 +f 25/30/7 30/31/7 29/32/7 +f 25/30/7 31/31/7 30/32/7 +f 25/30/7 32/31/7 31/32/7 +f 25/30/7 33/31/7 32/32/7 +f 25/30/7 34/31/7 33/32/7 +f 25/30/7 35/31/7 34/32/7 +f 25/30/7 36/31/7 35/32/7 +f 25/30/7 37/31/7 36/32/7 +f 25/30/7 38/31/7 37/32/7 +f 25/30/7 39/31/7 38/32/7 +f 25/30/7 27/31/7 39/32/7 +f 40/30/8 41/31/8 42/32/8 +f 43/30/9 44/31/9 45/32/9 +f 46/30/10 47/31/10 48/32/10 +f 49/30/11 50/31/11 51/32/11 +f 52/30/12 40/31/12 53/32/12 +f 54/30/13 43/31/13 55/32/13 +f 56/30/14 46/31/14 57/32/14 +f 58/30/15 51/31/15 59/32/15 +f 60/30/16 61/31/16 62/32/16 +f 63/30/17 55/31/17 41/32/17 +f 64/30/18 56/31/18 44/32/18 +f 47/30/19 58/31/19 65/32/19 +f 66/30/20 60/31/20 50/32/20 +f 67/30/21 52/31/21 61/32/21 +f 33/30/22 34/31/22 56/32/22 +f 30/30/23 31/31/23 54/32/23 +f 26/30/24 28/31/24 52/32/24 +f 37/30/25 66/31/25 49/32/25 +f 34/30/26 35/31/26 46/32/26 +f 31/30/27 32/31/27 43/32/27 +f 28/30/28 29/31/28 40/32/28 +f 27/30/29 26/31/29 67/32/29 +f 38/30/30 60/31/30 66/32/30 +f 35/30/31 58/31/31 47/32/31 +f 32/30/32 33/31/32 64/32/32 +f 29/30/33 54/31/33 63/32/33 +f 39/30/34 27/31/34 60/32/34 +f 36/30/35 37/31/35 58/32/35 +f 50/30/36 68/31/36 62/32/36 +f 61/30/36 69/31/36 53/32/36 +f 42/30/36 70/31/36 41/32/36 +f 45/30/36 71/31/36 44/32/36 +f 48/30/36 72/31/36 65/32/36 +f 51/30/36 73/31/36 50/32/36 +f 53/30/36 74/31/36 42/32/36 +f 55/30/36 75/31/36 45/32/36 +f 57/30/36 76/31/36 48/32/36 +f 59/30/36 77/31/36 51/32/36 +f 62/30/36 78/31/36 61/32/36 +f 41/30/36 79/31/36 55/32/36 +f 44/30/36 80/31/36 57/32/36 +f 65/30/36 81/31/36 59/32/36 +f 74/30/37 70/31/37 82/32/37 +f 75/30/38 71/31/38 83/32/38 +f 76/30/39 84/31/39 85/32/39 +f 77/30/40 86/31/40 87/32/40 +f 78/30/41 88/31/41 89/32/41 +f 79/30/42 75/31/42 90/32/42 +f 80/30/43 76/31/43 91/32/43 +f 81/30/44 87/31/44 92/32/44 +f 68/30/45 89/31/45 93/32/45 +f 69/30/46 74/31/46 88/32/46 +f 70/30/47 90/31/47 94/32/47 +f 71/30/48 91/31/48 95/32/48 +f 72/30/49 81/31/49 84/32/49 +f 73/30/50 93/31/50 86/32/50 +f 96/30/51 97/31/51 98/32/51 +f 96/30/51 99/31/51 97/32/51 +f 96/30/51 100/31/51 99/32/51 +f 96/30/51 101/31/51 100/32/51 +f 96/30/51 102/31/51 101/32/51 +f 96/30/51 103/31/51 102/32/51 +f 96/30/51 104/31/51 103/32/51 +f 96/30/51 105/31/51 104/32/51 +f 96/30/51 106/31/51 105/32/51 +f 96/30/51 107/31/51 106/32/51 +f 96/30/51 108/31/51 107/32/51 +f 96/30/51 109/31/51 108/32/51 +f 96/30/51 110/31/51 109/32/51 +f 96/30/51 98/31/51 110/32/51 +f 111/30/52 112/31/52 113/32/52 +f 114/30/53 115/31/53 116/32/53 +f 117/30/54 118/31/54 119/32/54 +f 120/30/55 121/31/55 122/32/55 +f 123/30/56 113/31/56 124/32/56 +f 125/30/57 116/31/57 126/32/57 +f 127/30/58 119/31/58 128/32/58 +f 129/30/59 122/31/59 130/32/59 +f 131/30/60 132/31/60 133/32/60 +f 134/30/61 126/31/61 112/32/61 +f 135/30/62 127/31/62 115/32/62 +f 136/30/63 130/31/63 118/32/63 +f 137/30/64 133/31/64 121/32/64 +f 132/30/65 123/31/65 138/32/65 +f 104/30/66 105/31/66 127/32/66 +f 101/30/67 114/31/67 125/32/67 +f 97/30/68 99/31/68 123/32/68 +f 108/30/69 137/31/69 120/32/69 +f 105/30/70 106/31/70 117/32/70 +f 102/30/71 135/31/71 114/32/71 +f 99/30/72 100/31/72 111/32/72 +f 98/30/73 123/31/73 132/32/73 +f 109/30/74 131/31/74 137/32/74 +f 106/30/75 129/31/75 136/32/75 +f 103/30/76 104/31/76 135/32/76 +f 100/30/77 101/31/77 134/32/77 +f 110/30/78 132/31/78 131/32/78 +f 107/30/79 108/31/79 129/32/79 +f 121/30/36 133/31/36 139/32/36 +f 138/30/36 124/31/36 140/32/36 +f 113/30/36 112/31/36 141/32/36 +f 116/30/36 115/31/36 142/32/36 +f 119/30/36 118/31/36 143/32/36 +f 122/30/36 121/31/36 144/32/36 +f 124/30/36 113/31/36 145/32/36 +f 126/30/36 116/31/36 146/32/36 +f 128/30/36 119/31/36 147/32/36 +f 130/30/36 122/31/36 148/32/36 +f 133/30/36 138/31/36 149/32/36 +f 112/30/36 126/31/36 150/32/36 +f 115/30/36 128/31/36 151/32/36 +f 118/30/36 130/31/36 152/32/36 +f 145/30/80 141/31/80 153/32/80 +f 146/30/81 142/31/81 154/32/81 +f 147/30/82 143/31/82 155/32/82 +f 148/30/83 156/31/83 157/32/83 +f 149/30/84 158/31/84 159/32/84 +f 150/30/85 154/31/85 160/32/85 +f 151/30/86 155/31/86 161/32/86 +f 152/30/87 148/31/87 162/32/87 +f 139/30/88 159/31/88 163/32/88 +f 140/30/89 145/31/89 158/32/89 +f 141/30/90 160/31/90 164/32/90 +f 142/30/91 151/31/91 165/32/91 +f 143/30/92 152/31/92 166/32/92 +f 144/30/93 139/31/93 156/32/93 +f 158/30/94 89/31/94 88/32/94 +f 153/30/95 164/31/95 89/32/95 +f 164/30/96 86/31/96 93/32/96 +f 160/30/97 154/31/97 86/32/97 +f 154/30/98 165/31/98 87/32/98 +f 165/30/99 161/31/99 92/32/99 +f 161/30/100 155/31/100 84/32/100 +f 155/30/101 166/31/101 85/32/101 +f 166/30/102 162/31/102 91/32/102 +f 162/30/103 83/31/103 95/32/103 +f 157/30/104 90/31/104 83/32/104 +f 156/30/105 94/31/105 90/32/105 +f 163/30/106 82/31/106 94/32/106 +f 159/30/107 88/31/107 82/32/107 +f 56/30/22 34/31/22 46/32/22 +f 155/30/82 143/31/82 166/32/82 +f 165/30/91 151/31/91 161/32/91 +f 57/30/14 46/31/14 48/32/14 +f 67/30/29 26/31/29 52/32/29 +f 55/30/13 43/31/13 45/32/13 +f 162/30/87 148/31/87 157/32/87 +f 166/30/92 152/31/92 162/32/92 +f 63/30/8 41/31/8 40/32/8 +f 64/30/9 44/31/9 43/32/9 +f 66/30/11 50/31/11 49/32/11 +f 46/30/26 35/31/26 47/32/26 +f 90/30/42 75/31/42 83/32/42 +f 49/30/15 51/31/15 58/32/15 +f 67/30/16 61/31/16 60/32/16 +f 54/30/17 55/31/17 63/32/17 +f 127/30/66 105/31/66 117/32/66 +f 134/30/77 101/31/77 125/32/77 +f 61/30/21 52/31/21 53/32/21 +f 91/30/102 162/31/102 95/32/102 +f 43/30/27 32/31/27 64/32/27 +f 54/30/23 31/31/23 43/32/23 +f 38/30/25 66/31/25 37/32/25 +f 64/30/32 33/31/32 56/32/32 +f 89/30/95 164/31/95 93/32/95 +f 156/30/93 139/31/93 163/32/93 +f 39/30/30 60/31/30 38/32/30 +f 36/30/31 58/31/31 35/32/31 +f 50/30/20 60/31/20 62/32/20 +f 30/30/33 54/31/33 29/32/33 +f 129/30/79 108/31/79 120/32/79 +f 62/30/36 68/31/36 78/32/36 +f 53/30/36 69/31/36 74/32/36 +f 41/30/36 70/31/36 79/32/36 +f 44/30/36 71/31/36 80/32/36 +f 65/30/36 72/31/36 81/32/36 +f 50/30/36 73/31/36 68/32/36 +f 42/30/36 74/31/36 70/32/36 +f 45/30/36 75/31/36 71/32/36 +f 48/30/36 76/31/36 72/32/36 +f 51/30/36 77/31/36 73/32/36 +f 61/30/36 78/31/36 69/32/36 +f 55/30/36 79/31/36 75/32/36 +f 57/30/36 80/31/36 76/32/36 +f 59/30/36 81/31/36 77/32/36 +f 82/30/37 70/31/37 94/32/37 +f 65/30/19 58/31/19 59/32/19 +f 72/30/39 84/31/39 76/32/39 +f 73/30/40 86/31/40 77/32/40 +f 69/30/108 88/31/108 78/32/108 +f 154/30/81 142/31/81 165/32/81 +f 115/30/62 127/31/62 128/32/62 +f 77/30/44 87/31/44 81/32/44 +f 78/30/45 89/31/45 68/32/45 +f 88/30/46 74/31/46 82/32/46 +f 79/30/47 90/31/47 70/32/47 +f 80/30/48 91/31/48 71/32/48 +f 84/30/49 81/31/49 92/32/49 +f 68/30/50 93/31/50 73/32/50 +f 134/30/52 112/31/52 111/32/52 +f 135/30/53 115/31/53 114/32/53 +f 136/30/54 118/31/54 117/32/54 +f 137/30/55 121/31/55 120/32/55 +f 111/30/56 113/31/56 123/32/56 +f 114/30/57 116/31/57 125/32/57 +f 117/30/58 119/31/58 127/32/58 +f 120/30/59 122/31/59 129/32/59 +f 125/30/61 126/31/61 134/32/61 +f 44/30/18 56/31/18 57/32/18 +f 129/30/63 130/31/63 136/32/63 +f 131/30/64 133/31/64 137/32/64 +f 138/30/65 123/31/65 124/32/65 +f 135/30/76 104/31/76 127/32/76 +f 102/30/67 114/31/67 101/32/67 +f 109/30/69 137/31/69 108/32/69 +f 117/30/70 106/31/70 136/32/70 +f 103/30/71 135/31/71 102/32/71 +f 52/30/24 28/31/24 40/32/24 +f 97/30/73 123/31/73 98/32/73 +f 110/30/74 131/31/74 109/32/74 +f 107/30/75 129/31/75 106/32/75 +f 111/30/72 100/31/72 134/32/72 +f 123/30/68 99/31/68 111/32/68 +f 98/30/78 132/31/78 110/32/78 +f 40/30/28 29/31/28 63/32/28 +f 139/30/36 133/31/36 149/32/36 +f 140/30/36 124/31/36 145/32/36 +f 141/30/36 112/31/36 150/32/36 +f 142/30/36 115/31/36 151/32/36 +f 143/30/36 118/31/36 152/32/36 +f 144/30/36 121/31/36 139/32/36 +f 145/30/36 113/31/36 141/32/36 +f 146/30/36 116/31/36 142/32/36 +f 147/30/36 119/31/36 143/32/36 +f 148/30/36 122/31/36 144/32/36 +f 149/30/36 138/31/36 140/32/36 +f 150/30/36 126/31/36 146/32/36 +f 151/30/36 128/31/36 147/32/36 +f 152/30/36 130/31/36 148/32/36 +f 153/30/80 141/31/80 164/32/80 +f 144/30/83 156/31/83 148/32/83 +f 140/30/84 158/31/84 149/32/84 +f 146/30/85 154/31/85 150/32/85 +f 147/30/86 155/31/86 151/32/86 +f 53/30/12 40/31/12 42/32/12 +f 149/30/88 159/31/88 139/32/88 +f 158/30/89 145/31/89 153/32/89 +f 150/30/90 160/31/90 141/32/90 +f 91/30/43 76/31/43 85/32/43 +f 153/30/94 89/31/94 158/32/94 +f 60/30/34 27/31/34 67/32/34 +f 160/30/96 86/31/96 164/32/96 +f 58/30/35 37/31/35 49/32/35 +f 87/30/109 165/31/109 92/32/109 +f 92/30/99 161/31/99 84/32/99 +f 84/30/100 155/31/100 85/32/100 +f 85/30/101 166/31/101 91/32/101 +f 83/30/38 71/31/38 95/32/38 +f 157/30/103 83/31/103 162/32/103 +f 156/30/104 90/31/104 157/32/104 +f 163/30/105 94/31/105 156/32/105 +f 159/30/106 82/31/106 163/32/106 +f 158/30/107 88/31/107 159/32/107 +f 86/30/97 154/31/97 87/32/97 +f 133/30/60 132/31/60 138/32/60 +f 48/30/10 47/31/10 65/32/10 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_compressor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_compressor.json new file mode 100644 index 00000000..311f195e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_compressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/advanced_compressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_solar.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_solar.json new file mode 100644 index 00000000..0bdd646b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/advanced_solar.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/advanced_solar_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_fan.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_fan.json new file mode 100644 index 00000000..c370b34a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_fan.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/air_fan" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_controller.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_controller.json new file mode 100644 index 00000000..5374c35a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_controller.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/air_lock_controller_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_frame.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_frame.json new file mode 100644 index 00000000..79b91362 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_frame.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/air_lock_frame_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_seal.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_seal.json new file mode 100644 index 00000000..203f214f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_lock_seal.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/air_lock_seal_model" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_vent.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_vent.json new file mode 100644 index 00000000..2f2eeb6f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/air_vent.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/air_vent" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire.json new file mode 100644 index 00000000..3400849b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/aluminum_wire_item" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, -45, 0 ], + "translation": [ 0.5, -1, -0.3 ], + "scale": [ 0.55, 0.55, 0.55 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_heavy.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_heavy.json new file mode 100644 index 00000000..f712829d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_heavy.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/aluminum_wire_heavy_item" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, -45, 0 ], + "translation": [ 0.5, -1, -0.3 ], + "scale": [ 0.55, 0.55, 0.55 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch.json new file mode 100644 index 00000000..e13f8cf3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/aluminum_wire_switch_item" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, -45, 0 ], + "translation": [ 0.5, -1, -0.3 ], + "scale": [ 0.55, 0.55, 0.55 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch_heavy.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch_heavy.json new file mode 100644 index 00000000..7cde319b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/aluminum_wire_switch_heavy.json @@ -0,0 +1,13 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/aluminum_wire_heavy_switch_item" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, -45, 0 ], + "translation": [ 0.5, -1, -0.3 ], + "scale": [ 0.55, 0.55, 0.55 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ambient_thermal_controller.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ambient_thermal_controller.json new file mode 100644 index 00000000..46a6563f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ambient_thermal_controller.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.ambient_thermal_controller" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arc_furnace.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arc_furnace.json new file mode 100644 index 00000000..c5928af0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arc_furnace.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/arc_furnace_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arclamp.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arclamp.json new file mode 100644 index 00000000..2ffd054c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/arclamp.json @@ -0,0 +1,30 @@ +{ + "parent":"galacticraftcore:block/arclamp_on_model", + "display": { + "gui": { + "rotation": [ 30, 135, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, -45, 0 ], + "translation": [ 0, 2.5, 2.25 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -225, 0 ], + "translation": [ 0, 2.5, 2.25 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 4, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 4, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_block_moon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_block_moon.json new file mode 100644 index 00000000..0520ad8e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_block_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_item.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_item.json new file mode 100644 index 00000000..60247cd7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/basic_item.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.solar_module_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/battery.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/battery.json new file mode 100644 index 00000000..190f6f70 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/battery.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/battery" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_cooked.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_cooked.json new file mode 100644 index 00000000..de97d6b3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_cooked.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/beef_patty_cooked" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_raw.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_raw.json new file mode 100644 index 00000000..4eedfea3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/beef_patty_raw.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/beef_patty_raw" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_aluminum_gc.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_aluminum_gc.json new file mode 100644 index 00000000..6cdd21b6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_aluminum_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_aluminum_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_copper_gc.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_copper_gc.json new file mode 100644 index 00000000..a6354363 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_copper_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_copper_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_meteoric_iron_gc.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_meteoric_iron_gc.json new file mode 100644 index 00000000..85d21fb2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_meteoric_iron_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_meteoric_iron_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_silicon_gc.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_silicon_gc.json new file mode 100644 index 00000000..171317f5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_silicon_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_silicon_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_tin_gc.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_tin_gc.json new file mode 100644 index 00000000..f7d1741e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/block_tin_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/block_tin_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/boss_spawner.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/boss_spawner.json new file mode 100644 index 00000000..39f0252e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/boss_spawner.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_dungeon_brick_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_fuel.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_fuel.json new file mode 100644 index 00000000..9bf1df21 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_fuel.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/bucket_fuel" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_oil.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_oil.json new file mode 100644 index 00000000..1287d535 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/bucket_oil.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/bucket_oil" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_1.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_2.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_3.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_3.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_pad.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_pad.json new file mode 100644 index 00000000..836b4046 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggy_pad.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggymat.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggymat.json new file mode 100644 index 00000000..81333557 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/buggymat.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/buggymat.wheel" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/burger_bun.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/burger_bun.json new file mode 100644 index 00000000..2fd61c2b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/burger_bun.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/burger_bun" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister.json new file mode 100644 index 00000000..cba23dc1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/canister.tin" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister_copper.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister_copper.json new file mode 100644 index 00000000..f283fe3f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canister_copper.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/canister.copper" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canned_beef.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canned_beef.json new file mode 100644 index 00000000..84d9b0fb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canned_beef.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/canned_beef" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canvas.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canvas.json new file mode 100644 index 00000000..266d3113 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/canvas.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/canvas" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo.json new file mode 100644 index 00000000..d43362a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/cargo_loader_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo_unloader.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo_unloader.json new file mode 100644 index 00000000..4e91dfee --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cargo_unloader.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/cargo_unloader_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese.json new file mode 100644 index 00000000..5e62128b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese.json @@ -0,0 +1,15 @@ +{ + "parent":"galacticraftcore:block/cheese_uneaten_model", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_curd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_curd.json new file mode 100644 index 00000000..23870c2a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_curd.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/cheese_curd" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_slice.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_slice.json new file mode 100644 index 00000000..e955d0de --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheese_slice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/cheese_slice" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheeseburger.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheeseburger.json new file mode 100644 index 00000000..771473b3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cheeseburger.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/cheeseburger" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/circuit_fabricator.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/circuit_fabricator.json new file mode 100644 index 00000000..68748001 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/circuit_fabricator.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/circuit_fabricator_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cluster_storage.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cluster_storage.json new file mode 100644 index 00000000..94dab6a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/cluster_storage.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/cluster_storage_16", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/coal_generator.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/coal_generator.json new file mode 100644 index 00000000..d60b19fb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/coal_generator.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/coal_generator_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/collector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/collector.json new file mode 100644 index 00000000..f0c4e309 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/collector.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/collector_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compact_workbench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compact_workbench.json new file mode 100644 index 00000000..84763a81 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compact_workbench.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/compact_workbench", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_aluminum.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_aluminum.json new file mode 100644 index 00000000..117d70be --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_aluminum.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_aluminum" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_bronze.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_bronze.json new file mode 100644 index 00000000..0517ceb1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_bronze.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_bronze" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_copper.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_copper.json new file mode 100644 index 00000000..cb1ec23f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_copper.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_copper" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_iron.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_iron.json new file mode 100644 index 00000000..56cec170 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_iron.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_iron" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_meteoric_iron.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_meteoric_iron.json new file mode 100644 index 00000000..b795989c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_meteoric_iron.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/compressed_meteoric_iron" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_steel.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_steel.json new file mode 100644 index 00000000..05693131 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_steel.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_steel" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_tin.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_tin.json new file mode 100644 index 00000000..58232569 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/compressed_tin.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.compressed_tin" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_detector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_detector.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_detector.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_redstone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_redstone.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_redstone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater_pow.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater_pow.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/concealed_repeater_pow.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_0.json new file mode 100644 index 00000000..d77184fc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_0.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_0_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_1.json new file mode 100644 index 00000000..557d0682 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deco_block_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deco_block_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deconstructor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deconstructor.json new file mode 100644 index 00000000..e7b708ea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/deconstructor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/deconstructor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_carrot.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_carrot.json new file mode 100644 index 00000000..1c4059df --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_carrot.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.dehydrated_carrot" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_melon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_melon.json new file mode 100644 index 00000000..688a951d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_melon.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.dehydrated_melon" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_potato.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_potato.json new file mode 100644 index 00000000..84455ac8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dehydrated_potato.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.dehydrated_potato" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dishbase.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dishbase.json new file mode 100644 index 00000000..ac83a09e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dishbase.json @@ -0,0 +1,14 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "galacticraftcore:items/dishicon" + }, + "display": { + "thirdperson_righthand": { + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson_righthand": { + "scale": [ 0.6, 0.6, 0.6 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/distributor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/distributor.json new file mode 100644 index 00000000..26e06a6c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/distributor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/distributor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeon_key.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeon_key.json new file mode 100644 index 00000000..1fe323c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeon_key.json @@ -0,0 +1,81 @@ +{ + "elements": [ + { + "from": [ 0.0, 6.0, 7.5 ], + "to": [ 3.0, 9.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "west": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 2.0, 3.0, 3.0 ] } + } + }, + { + "from": [ 3.0, 6.5, 7.5 ], + "to": [ 4.0, 8.5, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "east": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "south": { "texture": "#key", "uv": [ 4.0, 6.0, 5.0, 8.0 ] }, + "west": { "texture": "#key", "uv": [ 9.0, 8.0, 8.0, 6.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] } + } + }, + { + "from": [ 4.0, 7.0, 7.5 ], + "to": [ 15.0, 8.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] }, + "down": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] } + } + }, + { + "from": [ 10.5, 6.0, 7.5 ], + "to": [ 14.5, 7.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] } + } + }, + { + "from": [ 11.5, 5.0, 7.5 ], + "to": [ 14.5, 6.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] } + } + } + ], + "display": { + "thirdperson": { + "rotation": [ 0, -90, 180 ], + "translation": [ 0, 0.25, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ -180, -125, 180 ], + "translation": [ 0, 4, -2 ], + "scale": [ 1.5, 1.5, 1.5 ] + }, + "gui": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 1, 0 ], + "scale": [ 1.5, 1.5, 1.5 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeonfinder.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeonfinder.json new file mode 100644 index 00000000..f44a1066 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/dungeonfinder.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/dungeonfinder" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_furnace.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_furnace.json new file mode 100644 index 00000000..a43affa6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_furnace.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/electric_furnace_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_ingot_compressor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_ingot_compressor.json new file mode 100644 index 00000000..c3e5386a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/electric_ingot_compressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/electric_ingot_compressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box.json new file mode 100644 index 00000000..e42a90e1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box.json @@ -0,0 +1,35 @@ +{ + "parent":"galacticraftcore:block/emergency_box", + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box_full.json new file mode 100644 index 00000000..a054418e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_box_full.json @@ -0,0 +1,35 @@ +{ + "parent":"galacticraftcore:block/emergency_box_filled", + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_kit.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_kit.json new file mode 100644 index 00000000..7a744a1f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/emergency_kit.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/emergency_kit" + }, + "display": { + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed.json new file mode 100644 index 00000000..30e4aef3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_aluminum_wire_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_copper_cable.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_copper_cable.json new file mode 100644 index 00000000..ac7ec339 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_copper_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_copper_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_fluid_pipe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_fluid_pipe.json new file mode 100644 index 00000000..edb4e5fe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_fluid_pipe.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_fluid_pipe_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_glass_fibre_cable.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_glass_fibre_cable.json new file mode 100644 index 00000000..f114d484 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_glass_fibre_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_glass_fibre_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_gold_cable.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_gold_cable.json new file mode 100644 index 00000000..dc8c6246 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_gold_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_gold_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_heavy_aluminum_wire.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_heavy_aluminum_wire.json new file mode 100644 index 00000000..2e4f76c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_heavy_aluminum_wire.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_heavy_aluminum_wire_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_hv_cable.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_hv_cable.json new file mode 100644 index 00000000..9a1b73e1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_hv_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_hv_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_lv_cable.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_lv_cable.json new file mode 100644 index 00000000..718c1a6a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_lv_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_lv_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_me_cable.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_me_cable.json new file mode 100644 index 00000000..35389c50 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_me_cable.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_me_cable_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_cobblestone.json new file mode 100644 index 00000000..02c55695 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_cobblestone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_fluids_cobblestone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_stone.json new file mode 100644 index 00000000..cfea77d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_fluids_stone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_fluids_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_cobblestone.json new file mode 100644 index 00000000..64bac382 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_cobblestone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_items_cobblestone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_stone.json new file mode 100644 index 00000000..1f155551 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_items_stone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_items_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_gold.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_gold.json new file mode 100644 index 00000000..d7fbc6ed --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_gold.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_power_gold_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_stone.json new file mode 100644 index 00000000..fe9ba0d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_pipe_power_stone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_pipe_power_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_te_conduit.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_te_conduit.json new file mode 100644 index 00000000..3b454942 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/enclosed_te_conduit.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/enclosed_te_conduit_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/energy_storage.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/energy_storage.json new file mode 100644 index 00000000..9107c2bb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/energy_storage.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/energy_storage_16", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/engine.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/engine.json new file mode 100644 index 00000000..22474456 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/engine.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/engine.tier1engine" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fallen_meteor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fallen_meteor.json new file mode 100644 index 00000000..5f267a2b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fallen_meteor.json @@ -0,0 +1,15 @@ +{ + "parent":"galacticraftcore:block/fallen_meteor_model", + "display": { + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/flag.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/flag.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/flag.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe.json new file mode 100644 index 00000000..43897a6a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/fluid_pipe_neswud", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe_pull.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe_pull.json new file mode 100644 index 00000000..43897a6a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_pipe_pull.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/fluid_pipe_neswud", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_tank.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_tank.json new file mode 100644 index 00000000..c51eb282 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fluid_tank.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/tank_ud", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/food.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/food.json new file mode 100644 index 00000000..90df48c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/food.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.dehydrated_apple" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/frequency_module.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/frequency_module.json new file mode 100644 index 00000000..821657e5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/frequency_module.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.frequency_module" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial.json new file mode 100644 index 00000000..dbd71f34 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_1.json new file mode 100644 index 00000000..f8bf4238 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_2.json new file mode 100644 index 00000000..5ae292bd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_3.json new file mode 100644 index 00000000..dfa80aa9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_4.json new file mode 100644 index 00000000..9e05c46f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_5.json new file mode 100644 index 00000000..8d7958f3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_6.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_6.json new file mode 100644 index 00000000..c1a9725d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_canister_partial_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/fuel_canister_partial_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_loader.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_loader.json new file mode 100644 index 00000000..961b3bb0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/fuel_loader.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/fuel_loader_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/glowstone_torch.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/glowstone_torch.json new file mode 100644 index 00000000..b7f0bba8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/glowstone_torch.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/glowstone_torch" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/grating.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/grating.json new file mode 100644 index 00000000..9f4dc8a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/grating.json @@ -0,0 +1,40 @@ +{ + "parent":"galacticraftcore:block/grating", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, -3], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -225, 0 ], + "translation": [ 0, 2.5, -0.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, -2], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "gui": { + "rotation": [ 75, 225, 0 ], + "translation": [ 0, -0.3, -8 ], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, -2], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "firstperson_righthand": { + "rotation": [ 15, 45, 0 ], + "translation": [ 0, 0, -2 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 15, 225, 0 ], + "translation": [ 0, 0, -2 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/heavy_plating.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/heavy_plating.json new file mode 100644 index 00000000..ca05cae6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/heavy_plating.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/heavy_plating" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_dust_small_titanium.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_dust_small_titanium.json new file mode 100644 index 00000000..0ce0a912 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_dust_small_titanium.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/ic2/dust_small_titanium" + }, + "display": { } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_crushed_alu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_crushed_alu.json new file mode 100644 index 00000000..1c33ee63 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_crushed_alu.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/ic2/ore_crushed_alu" + }, + "display": { } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_purified_alu.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_purified_alu.json new file mode 100644 index 00000000..334ede90 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2_ore_purified_alu.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/ic2/ore_purified_alu" + }, + "display": { } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2compat.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2compat.json new file mode 100644 index 00000000..51f36b61 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ic2compat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraftcore:items/ic2/dust_alu" + }, + "display": { } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_battery.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_battery.json new file mode 100644 index 00000000..190f6f70 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_battery.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/battery" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_oxygen.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_oxygen.json new file mode 100644 index 00000000..37c4aa50 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/infinite_oxygen.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_tank_heavy_full" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_aluminum.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_aluminum.json new file mode 100644 index 00000000..f58de59a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_aluminum.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.ingot_aluminum" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_compressor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_compressor.json new file mode 100644 index 00000000..9db8c05c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_compressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ingot_compressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_copper.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_copper.json new file mode 100644 index 00000000..e7a3e1e8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_copper.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.ingot_copper" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_tin.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_tin.json new file mode 100644 index 00000000..22374aca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ingot_tin.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.ingot_tin" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/item_basic_moon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/item_basic_moon.json new file mode 100644 index 00000000..c9679db2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/item_basic_moon.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/meteoric_iron_ingot" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/key.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/key.json new file mode 100644 index 00000000..66b3b202 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/key.json @@ -0,0 +1,104 @@ +{ + "textures": { + "key": "galacticraftcore:items/dungeon_key_t1" + }, + "elements": [ + { + "from": [ 0.0, 6.0, 7.5 ], + "to": [ 3.0, 9.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "west": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 2.0, 3.0, 3.0 ] } + } + }, + { + "from": [ 3.0, 6.5, 7.5 ], + "to": [ 4.0, 8.5, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "east": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "south": { "texture": "#key", "uv": [ 4.0, 6.0, 5.0, 8.0 ] }, + "west": { "texture": "#key", "uv": [ 9.0, 8.0, 8.0, 6.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] } + } + }, + { + "from": [ 4.0, 7.0, 7.5 ], + "to": [ 15.0, 8.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] }, + "down": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] } + } + }, + { + "from": [ 10.5, 6.0, 7.5 ], + "to": [ 14.5, 7.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] } + } + }, + { + "from": [ 11.5, 5.0, 7.5 ], + "to": [ 14.5, 6.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 1.0, 1.0, 1.0 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 0.75, 0.75, 0.75 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, -90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad.json new file mode 100644 index 00000000..948d0d74 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/landing_pad_model" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad_full.json new file mode 100644 index 00000000..836b3e32 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/landing_pad_full.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/landing_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/lunar_sapphire.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/lunar_sapphire.json new file mode 100644 index 00000000..c2baa874 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/lunar_sapphire.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/lunar_sapphire" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/magnetic_table.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/magnetic_table.json new file mode 100644 index 00000000..456024e6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/magnetic_table.json @@ -0,0 +1,10 @@ +{ + "parent": "galacticraftcore:block/magnetic_table_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk.json new file mode 100644 index 00000000..26e6e88d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk.json @@ -0,0 +1,122 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/meteor_chunk", + "texture": "galacticraftcore:blocks/meteor_chunk" + }, + "elements": [ + { + "from": [ 5.5, 4, 5 ], + "to": [ 10, 10, 9.5 ], + "faces": { + "down": { "uv": [ 10.5, 9.5, 6, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5.5, 5, 10, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6, 10.5, 12 ], "texture": "#texture" }, + "south": { "uv": [ 5.5, 6, 10, 12 ], "texture": "#texture" }, + "west": { "uv": [ 5, 6, 9.5, 12 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 6, 11, 12 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 5, 9.5 ], + "to": [ 9, 9, 10 ], + "faces": { + "down": { "uv": [ 9.5, 10, 7, 9.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 9.5, 9, 10 ], "texture": "#texture" }, + "north": { "uv": [ 7, 7, 9.5, 11 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7, 9, 11 ], "texture": "#texture" }, + "west": { "uv": [ 9.5, 7, 10, 11 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 6.5, 11 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 10, 6 ], + "to": [ 9.5, 10.5, 8.5 ], + "faces": { + "down": { "uv": [ 9.5, 8.5, 6.5, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 6, 9.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 5.5, 9.5, 6 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 5.5, 9.5, 6 ], "texture": "#texture" }, + "west": { "uv": [ 6, 5.5, 8.5, 6 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 5.5, 10, 6 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 5.5, 5.5 ], + "to": [ 5.5, 9.5, 8.5 ], + "faces": { + "down": { "uv": [ 11, 8.5, 10.5, 5.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5.5, 5.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 6.5, 11, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 5, 6.5, 5.5, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 6.5, 8.5, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 6.5, 10.5, 10.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 4.5, 4.5 ], + "to": [ 9, 8.5, 5 ], + "faces": { + "down": { "uv": [ 9.5, 5, 7, 4.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 4.5, 9, 5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 7.5, 9.5, 11.5 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 4.5, 7.5, 5, 11.5 ], "texture": "#texture" }, + "east": { "uv": [ 11, 7.5, 11.5, 11.5 ], "texture": "#texture" } + } + }, + { + "from": [ 10, 5, 5.5 ], + "to": [ 10.5, 9, 8.5 ], + "faces": { + "down": { "uv": [ 6, 8.5, 5.5, 5.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 5.5, 10.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 5.5, 7, 6, 11 ], "texture": "#texture" }, + "south": { "uv": [ 10, 7, 10.5, 11 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 7, 8.5, 11 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 7, 10.5, 11 ], "texture": "#texture" } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 325, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.18, 1.18, 1.18 ] + }, + "head": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.00, 1.00, 1.00 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.00, 1.00, 1.00 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2, 0.5], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -45, 0 ], + "translation": [ 0, 2, 0.5], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk_hot.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk_hot.json new file mode 100644 index 00000000..aef75aaf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteor_chunk_hot.json @@ -0,0 +1,122 @@ +{ + "textures": { + "particle": "galacticraftcore:blocks/meteor_chunk_hot", + "texture": "galacticraftcore:blocks/meteor_chunk_hot" + }, + "elements": [ + { + "from": [ 5.5, 4, 5 ], + "to": [ 10, 10, 9.5 ], + "faces": { + "down": { "uv": [ 10.5, 9.5, 6, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5.5, 5, 10, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6, 10.5, 12 ], "texture": "#texture" }, + "south": { "uv": [ 5.5, 6, 10, 12 ], "texture": "#texture" }, + "west": { "uv": [ 5, 6, 9.5, 12 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 6, 11, 12 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 5, 9.5 ], + "to": [ 9, 9, 10 ], + "faces": { + "down": { "uv": [ 9.5, 10, 7, 9.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 9.5, 9, 10 ], "texture": "#texture" }, + "north": { "uv": [ 7, 7, 9.5, 11 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7, 9, 11 ], "texture": "#texture" }, + "west": { "uv": [ 9.5, 7, 10, 11 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 6.5, 11 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 10, 6 ], + "to": [ 9.5, 10.5, 8.5 ], + "faces": { + "down": { "uv": [ 9.5, 8.5, 6.5, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 6, 9.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 5.5, 9.5, 6 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 5.5, 9.5, 6 ], "texture": "#texture" }, + "west": { "uv": [ 6, 5.5, 8.5, 6 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 5.5, 10, 6 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 5.5, 5.5 ], + "to": [ 5.5, 9.5, 8.5 ], + "faces": { + "down": { "uv": [ 11, 8.5, 10.5, 5.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5.5, 5.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 6.5, 11, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 5, 6.5, 5.5, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 6.5, 8.5, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 6.5, 10.5, 10.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6.5, 4.5, 4.5 ], + "to": [ 9, 8.5, 5 ], + "faces": { + "down": { "uv": [ 9.5, 5, 7, 4.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 4.5, 9, 5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 7.5, 9.5, 11.5 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 4.5, 7.5, 5, 11.5 ], "texture": "#texture" }, + "east": { "uv": [ 11, 7.5, 11.5, 11.5 ], "texture": "#texture" } + } + }, + { + "from": [ 10, 5, 5.5 ], + "to": [ 10.5, 9, 8.5 ], + "faces": { + "down": { "uv": [ 6, 8.5, 5.5, 5.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 5.5, 10.5, 8.5 ], "texture": "#texture" }, + "north": { "uv": [ 5.5, 7, 6, 11 ], "texture": "#texture" }, + "south": { "uv": [ 10, 7, 10.5, 11 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 7, 8.5, 11 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 7, 10.5, 11 ], "texture": "#texture" } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 325, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.18, 1.18, 1.18 ] + }, + "head": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.00, 1.00, 1.00 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0.00, 0.00, 0.00 ], + "scale": [ 1.00, 1.00, 1.00 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2, 0.5], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -45, 0 ], + "translation": [ 0, 2, 0.5], + "scale": [ 0.65, 0.65, 0.65 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 3, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteoric_iron_raw.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteoric_iron_raw.json new file mode 100644 index 00000000..93cceb1f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/meteoric_iron_raw.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/meteoric_iron_raw" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dirt_moon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dirt_moon.json new file mode 100644 index 00000000..0b4075e8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dirt_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_dirt_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dungeon_brick.json new file mode 100644 index 00000000..39f0252e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_dungeon_brick.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_dungeon_brick_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_brick.json new file mode 100644 index 00000000..9f96a060 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/moon_brick_stairs" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_stone.json new file mode 100644 index 00000000..461efd90 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_stairs_stone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/moon_stone_stairs" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_turf.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_turf.json new file mode 100644 index 00000000..b3a60bd8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/moon_turf.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/moon_turf_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/nose_cone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/nose_cone.json new file mode 100644 index 00000000..0ad9c46b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/nose_cone.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/nose_cone" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial.json new file mode 100644 index 00000000..ac52636f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_1.json new file mode 100644 index 00000000..fa2a8b5b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_2.json new file mode 100644 index 00000000..a7c5513e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_3.json new file mode 100644 index 00000000..191ad3fe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_4.json new file mode 100644 index 00000000..74d30b34 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_5.json new file mode 100644 index 00000000..bc49f1ef --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_6.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_6.json new file mode 100644 index 00000000..12f1d1d8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oil_canister_partial_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oil_canister_partial_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_aluminum_gc.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_aluminum_gc.json new file mode 100644 index 00000000..b6fd7a82 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_aluminum_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_aluminum_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_cheese_moon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_cheese_moon.json new file mode 100644 index 00000000..a6b65f50 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_cheese_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_cheese_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_gc.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_gc.json new file mode 100644 index 00000000..6987915b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_copper_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_moon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_moon.json new file mode 100644 index 00000000..4b6bf869 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_copper_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_copper_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_sapphire_moon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_sapphire_moon.json new file mode 100644 index 00000000..80fb7c76 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_sapphire_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_sapphire_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_silicon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_silicon.json new file mode 100644 index 00000000..794434a5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_silicon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_silicon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_gc.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_gc.json new file mode 100644 index 00000000..c3a39bdf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_gc.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_tin_gc_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_moon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_moon.json new file mode 100644 index 00000000..9820a858 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/ore_tin_moon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/ore_tin_moon_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_compressor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_compressor.json new file mode 100644 index 00000000..eb9eb317 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_compressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/compressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_concentrator.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_concentrator.json new file mode 100644 index 00000000..84d45908 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_concentrator.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_concentrator" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_decompressor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_decompressor.json new file mode 100644 index 00000000..dde2b33c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_decompressor.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/decompressor_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_detector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_detector.json new file mode 100644 index 00000000..6bec1023 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_detector.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/detector_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_gear.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_gear.json new file mode 100644 index 00000000..2a1b73ca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_gear.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_gear" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_mask.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_mask.json new file mode 100644 index 00000000..64238b27 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_mask.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_mask" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_storage_module.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_storage_module.json new file mode 100644 index 00000000..498bfbe8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_storage_module.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/oxygen_storage_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_heavy_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_heavy_full.json new file mode 100644 index 00000000..37c4aa50 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_heavy_full.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_tank_heavy_full" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_light_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_light_full.json new file mode 100644 index 00000000..069b649d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_light_full.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_tank_light_full" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_med_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_med_full.json new file mode 100644 index 00000000..d44fb323 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/oxygen_tank_med_full.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/oxygen_tank_med_full" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/painter.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/painter.json new file mode 100644 index 00000000..4533fb55 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/painter.json @@ -0,0 +1,19 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine_painter", + "east": "galacticraftcore:blocks/machine", + "south": "galacticraftcore:blocks/machine", + "west": "galacticraftcore:blocks/machine" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting.json new file mode 100644 index 00000000..41c3278c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_square", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_1.json new file mode 100644 index 00000000..78d50b76 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_1.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_spots", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_2.json new file mode 100644 index 00000000..05a785d5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_2.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_linear", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_3.json new file mode 100644 index 00000000..9b22fb7e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_3.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_sf", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_4.json new file mode 100644 index 00000000..321e8563 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/panel_lighting_4.json @@ -0,0 +1,20 @@ +{ + "parent":"galacticraftcore:block/panel_lighting", + "textures": { + "texture": "galacticraftcore:blocks/panel_light_off", + "lights": "galacticraftcore:blocks/panel_light_sfdiag", + "particle": "blocks/glass" + }, + "display": { + "firstperson": { + "rotation": [ 0, 180, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 1, 1, 1 ] + }, + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachest.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachest.json new file mode 100644 index 00000000..f1e950b7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachest.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/parachest", + "display": { + "thirdperson": { + "rotation": [ 10, 45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute.json new file mode 100644 index 00000000..814683ec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_plain" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_black.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_black.json new file mode 100644 index 00000000..382929ae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_black.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_black" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_blue.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_blue.json new file mode 100644 index 00000000..0b172b14 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_blue.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_blue" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_brown.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_brown.json new file mode 100644 index 00000000..1133118a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_brown.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_brown" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkblue.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkblue.json new file mode 100644 index 00000000..7b63600b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkblue.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_darkblue" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgray.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgray.json new file mode 100644 index 00000000..e09ea61c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgray.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_darkgray" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgreen.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgreen.json new file mode 100644 index 00000000..574b1ebb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_darkgreen.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_darkgreen" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_gray.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_gray.json new file mode 100644 index 00000000..da0dc5f6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_gray.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_gray" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_lime.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_lime.json new file mode 100644 index 00000000..5e78ac91 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_lime.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_lime" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_magenta.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_magenta.json new file mode 100644 index 00000000..83ba3e35 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_magenta.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_magenta" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_orange.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_orange.json new file mode 100644 index 00000000..42fde8e6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_orange.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_orange" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_pink.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_pink.json new file mode 100644 index 00000000..07a97553 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_pink.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_pink" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_purple.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_purple.json new file mode 100644 index 00000000..9f23a8de --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_purple.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_purple" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_red.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_red.json new file mode 100644 index 00000000..d24916dc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_red.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_red" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_teal.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_teal.json new file mode 100644 index 00000000..b527e8df --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_teal.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_teal" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_yellow.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_yellow.json new file mode 100644 index 00000000..d5ce068e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/parachute_yellow.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/parachute_yellow" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/platform.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/platform.json new file mode 100644 index 00000000..beb9c0c3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/platform.json @@ -0,0 +1,59 @@ +{ + "textures": { + "bottom": "galacticraftcore:blocks/platform_base", + "top": "galacticraftcore:blocks/platform_top", + "side": "galacticraftcore:blocks/platform_side" + }, + "elements": [ + { + "name": "Cube", + "from": [ 0.0, 6.0, 0.0 ], + "to": [ 16.0, 16.0, 16.0 ], + "faces": { + "north": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "east": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "south": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "west": { "texture": "side", "uv": [ 0.0, 0.0, 16.0, 10.0 ] }, + "up": { "texture": "top", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, + "down": { "texture": "bottom", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -225, 0 ], + "translation": [ 0, 2.5, 2.25 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, -2.0, 0 ], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/prelaunch_checklist.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/prelaunch_checklist.json new file mode 100644 index 00000000..20e41c21 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/prelaunch_checklist.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/prelaunch_checklist" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/raw_silicon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/raw_silicon.json new file mode 100644 index 00000000..1aa3b0de --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/raw_silicon.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.raw_silicon" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/refinery.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/refinery.json new file mode 100644 index 00000000..1c4060af --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/refinery.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/refinery_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_fins.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_fins.json new file mode 100644 index 00000000..0c8f95e7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_fins.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/rocket_fins" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_t1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_t1.json new file mode 100644 index 00000000..a5b8b267 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_t1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/buggy_pad_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_workbench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_workbench.json new file mode 100644 index 00000000..aea68f98 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/rocket_workbench.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/rocket_workbench_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic.json new file mode 100644 index 00000000..8067181e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/schematic_buggy" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic_rocket_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic_rocket_t2.json new file mode 100644 index 00000000..0a45f2c3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/schematic_rocket_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/schematic_rocket_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sealer.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sealer.json new file mode 100644 index 00000000..0876740a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sealer.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/sealer_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/seat.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/seat.json new file mode 100644 index 00000000..e6ed2fd2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/seat.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/buggymat.seat" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_glasses.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_glasses.json new file mode 100644 index 00000000..15f725c5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_glasses.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/sensor_glasses" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_lens.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_lens.json new file mode 100644 index 00000000..98f7a150 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/sensor_lens.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/sensor_lens" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_asteroid.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_asteroid.json new file mode 100644 index 00000000..691a5421 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_asteroid.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_asteroid" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_cobblestone.json new file mode 100644 index 00000000..e90acb8f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_mars_cobblestone" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_dungeon_brick.json new file mode 100644 index 00000000..fa158c42 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_mars_dungeon_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_mars_dungeon_brick" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_dungeon_brick.json new file mode 100644 index 00000000..9cef9b47 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_dungeon_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_moon_dungeon_brick" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_stone.json new file mode 100644 index 00000000..8fc2c4a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_moon_stone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_moon_stone" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_1.json new file mode 100644 index 00000000..322e6421 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_1.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_tin_1" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_2.json new file mode 100644 index 00000000..fe671a51 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/slab_tin_2.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/half_slab_tin_2" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar.json new file mode 100644 index 00000000..7cdade58 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/basic_solar_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar_module_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar_module_1.json new file mode 100644 index 00000000..f96e9221 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/solar_module_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.solar_module_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_clear.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_clear.json new file mode 100644 index 00000000..21eb7477 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_clear.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_clear_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_strong.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_strong.json new file mode 100644 index 00000000..7a669f8d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_strong.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_clear.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_clear.json new file mode 100644 index 00000000..21eb7477 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_clear.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_clear_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_strong.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_strong.json new file mode 100644 index 00000000..7a669f8d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_strong.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_vanilla.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_vanilla.json new file mode 100644 index 00000000..de382d05 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_tin_vanilla.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_vanilla_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_vanilla.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_vanilla.json new file mode 100644 index 00000000..de382d05 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_glass_vanilla.json @@ -0,0 +1,13 @@ +{ + "parent": "galacticraftcore:block/glass/spaceglass_ns_inventory", + "textures": { + "0": "galacticraftcore:blocks/space_glass_vanilla_inventory" + }, + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_station_base.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_station_base.json new file mode 100644 index 00000000..93d1b585 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/space_station_base.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/space_station_base_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/spin_thruster.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/spin_thruster.json new file mode 100644 index 00000000..0985913e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/spin_thruster.json @@ -0,0 +1,30 @@ +{ + "parent":"galacticraftcore:block/spin_thruster_model", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 1.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 1.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -45, 0 ], + "translation": [ 0, 2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, -45, 0 ], + "translation": [ 0, 2, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 2.25, -1.25, 0.0 ], + "scale": [ 0.75, 0.75, 0.75 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/standard_wrench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/standard_wrench.json new file mode 100644 index 00000000..de820d0a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/standard_wrench.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/standard_wrench" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_axe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_axe.json new file mode 100644 index 00000000..528ee405 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_axe.json @@ -0,0 +1,7 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_axe" + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_boots.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_boots.json new file mode 100644 index 00000000..4b8d4367 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_boots.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_chestplate.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_chestplate.json new file mode 100644 index 00000000..221c5296 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_chestplate.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_chestplate" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_helmet.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_helmet.json new file mode 100644 index 00000000..977358cb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_helmet.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_helmet" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_hoe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_hoe.json new file mode 100644 index 00000000..02da61d1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_hoe" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_leggings.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_leggings.json new file mode 100644 index 00000000..c671f1b9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_leggings.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_leggings" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pickaxe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pickaxe.json new file mode 100644 index 00000000..5b716358 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_pickaxe" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pole.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pole.json new file mode 100644 index 00000000..3802fc08 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_pole.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/steel_pole" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_shovel.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_shovel.json new file mode 100644 index 00000000..50e76638 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_shovel" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_sword.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_sword.json new file mode 100644 index 00000000..fb163e82 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/steel_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftcore:items/steel_sword" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/storage.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/storage.json new file mode 100644 index 00000000..21ba086a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/storage.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/buggymat.storage" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/telemetry.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/telemetry.json new file mode 100644 index 00000000..f72dee1b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/telemetry.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/telemetry_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tier1booster.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tier1booster.json new file mode 100644 index 00000000..47f326fe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tier1booster.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/engine.tier1booster" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_1.json new file mode 100644 index 00000000..86166d62 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_1.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/tin_1_stairs" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_2.json new file mode 100644 index 00000000..d67b08c8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/tin_stairs_2.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/tin_2_stairs" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/treasure_chest.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/treasure_chest.json new file mode 100644 index 00000000..73f88973 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/treasure_chest.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/treasure_chest", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch.json new file mode 100644 index 00000000..8bc1a2c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "minecraft:blocks/torch_on" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_lit.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_lit.json new file mode 100644 index 00000000..8bc1a2c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_lit.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "minecraft:blocks/torch_on" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone.json new file mode 100644 index 00000000..3d1c2fb5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/unlit_torch_lit_stone" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone_lit.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone_lit.json new file mode 100644 index 00000000..3d1c2fb5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/unlit_torch_stone_lit.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:blocks/unlit_torch_lit_stone" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/view_screen.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/view_screen.json new file mode 100644 index 00000000..565bf21e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/view_screen.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftcore:block/screen", + "display": { + "thirdperson": { + "rotation": [ 10, 225, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_advanced.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_advanced.json new file mode 100644 index 00000000..b724d0b9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_advanced.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.wafer_advanced" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_basic.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_basic.json new file mode 100644 index 00000000..fc542db9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_basic.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.wafer_basic" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_solar.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_solar.json new file mode 100644 index 00000000..53791710 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wafer_solar.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftcore:items/basic_item.wafer_solar" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_cobblestone.json new file mode 100644 index 00000000..db81d342 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/mars_cobblestone_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_dungeon_brick.json new file mode 100644 index 00000000..2c4ac755 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_mars_dungeon_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/mars_dungeon_brick_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_dungeon_brick.json new file mode 100644 index 00000000..f4f9177f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_dungeon_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/moon_dungeon_brick_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_stone.json new file mode 100644 index 00000000..315c340a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_moon_stone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/moon_stone_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_1.json new file mode 100644 index 00000000..74c291be --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_1.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/tin_1_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_2.json new file mode 100644 index 00000000..97d561b0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/item/wall_tin_2.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftcore:block/tin_2_wall_inventory" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/meteor_chunk.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/meteor_chunk.obj new file mode 100644 index 00000000..24022954 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/meteor_chunk.obj @@ -0,0 +1,61 @@ +# Blender v2.68 (sub 0) OBJ File: 'meteorChunk.blend' +# www.blender.org +mtllib meteorChunk.mtl +o Icosphere +v 0.000000 -0.990000 0.000000 +v 0.544018 -0.193648 0.382001 +v -0.145435 -0.261116 0.951837 +v -0.885481 -0.442743 0.000000 +v -0.273621 -0.442743 -0.842134 +v 0.544018 -0.193648 -0.278598 +v 0.165584 0.242140 0.951837 +v -0.466234 0.297542 0.669589 +v -0.838071 0.540223 -0.695412 +v 0.273621 0.442743 -0.842134 +v 0.651344 0.368305 0.051701 +v -0.121707 1.087480 -0.174949 +vt 0.507730 0.101310 +vt 0.253902 0.126184 +vt 0.214594 0.015903 +vt 0.352989 0.267471 +vt 0.545746 0.540363 +vt 0.785453 0.497317 +vt 0.783061 0.667876 +vt 0.544683 0.809762 +vt 0.528693 0.375416 +vt 0.177450 0.280898 +vt 0.091900 0.084303 +vt 0.544683 0.164821 +vt 0.829988 0.015903 +vt 0.830235 0.184999 +vt 0.785487 0.979608 +vt 0.312811 0.495768 +vt 0.952900 0.108412 +vt 0.595040 0.481311 +vt 0.343472 0.843271 +vt 0.091900 0.789165 +vt 0.338809 0.618836 +vt 0.091965 0.466147 +vt 0.865153 0.481327 +vt 0.092293 0.511757 +usemtl None +f 1/1 2/2 3/3 +f 2/2 1/1 6/4 +f 1/5 3/6 4/7 +f 1/5 4/7 5/8 +f 1/1 5/9 6/4 +f 2/2 6/4 11/10 +f 3/3 2/2 7/11 +f 4/12 3/13 8/14 +f 5/8 4/7 9/15 +f 6/4 5/9 10/16 +f 2/2 11/10 7/11 +f 3/13 7/17 8/14 +f 4/12 8/14 9/18 +f 5/19 9/20 10/21 +f 6/4 10/16 11/10 +f 7/11 11/10 12/22 +f 8/14 7/17 12/23 +f 9/18 8/14 12/23 +f 10/21 9/20 12/24 +f 11/10 10/16 12/22 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/oxygen_pipe.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/oxygen_pipe.obj new file mode 100644 index 00000000..d75f5c89 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/oxygen_pipe.obj @@ -0,0 +1,371 @@ +# Blender v2.73 (sub 0) OBJ File: 'aluminumWire.blend' +# www.blender.org +o Middle +v -0.080000 -0.080000 0.080000 +v -0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 0.080000 +v -0.080000 0.080000 0.080000 +v -0.080000 0.080000 -0.080000 +v 0.080000 0.080000 -0.080000 +v 0.080000 0.080000 0.080000 +v -0.080000 -0.080000 0.080000 +v -0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 -0.080000 +v 0.080000 -0.080000 0.080000 +v -0.080000 0.080000 0.080000 +v -0.080000 0.080000 -0.080000 +v 0.080000 0.080000 -0.080000 +v 0.080000 0.080000 0.080000 +vt 0.622884 0.377116 +vt 0.622884 0.622884 +vt 0.377116 0.622884 +vt 0.377116 0.377116 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +f 5/1/1 1/2/1 2/3/1 +f 14/1/2 15/2/2 11/3/2 +f 1/1/3 4/2/3 3/3/3 +f 7/1/4 3/2/4 4/3/4 +f 6/1/5 2/2/5 3/3/5 +f 8/1/6 5/2/6 6/3/6 +f 15/1/1 16/2/1 12/3/1 +f 16/1/3 15/2/3 14/3/3 +f 16/1/5 13/2/5 9/3/5 +f 9/1/6 10/2/6 11/3/6 +f 8/1/2 4/2/2 1/3/2 +f 13/1/4 14/2/4 10/3/4 +f 6/4/1 5/1/1 2/3/1 +f 10/4/2 14/1/2 11/3/2 +f 2/4/3 1/1/3 3/3/3 +f 8/4/4 7/1/4 4/3/4 +f 7/4/5 6/1/5 3/3/5 +f 7/4/6 8/1/6 6/3/6 +f 11/4/1 15/1/1 12/3/1 +f 13/4/3 16/1/3 14/3/3 +f 12/4/5 16/1/5 9/3/5 +f 12/4/6 9/1/6 11/3/6 +f 5/4/2 8/1/2 1/3/2 +f 9/4/4 13/1/4 10/3/4 +o Front +v 0.080000 0.079981 0.078600 +v -0.080000 0.079981 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 0.079981 0.078600 +v -0.080000 0.079981 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v 0.080000 -0.080019 0.078600 +v -0.080000 -0.080019 0.078600 +v -0.080000 0.079981 0.507728 +v 0.080000 0.079981 0.507728 +v -0.080000 -0.080019 0.507728 +v 0.080000 -0.080019 0.507728 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 0.000000 -0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 1.000000 -0.000000 -0.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 -0.000000 +vn -0.000000 -1.000000 0.000000 +f 19/5/7 17/6/7 18/7/7 +f 22/8/8 28/9/8 31/10/8 +f 21/11/9 30/12/9 32/13/9 +f 24/14/7 23/8/7 26/9/7 +f 23/5/10 24/6/10 22/7/10 +f 26/14/7 25/8/7 28/9/7 +f 29/8/11 30/9/11 21/10/11 +f 27/11/12 32/12/12 31/13/12 +f 23/14/7 25/8/7 26/9/7 +f 25/14/7 27/8/7 28/9/7 +f 29/15/7 31/5/7 32/6/7 +f 20/15/7 19/5/7 18/7/7 +f 29/14/8 22/8/8 31/10/8 +f 27/16/9 21/11/9 32/13/9 +f 21/15/10 23/5/10 22/7/10 +f 22/14/11 29/8/11 21/10/11 +f 28/16/12 27/11/12 31/13/12 +f 30/7/7 29/15/7 32/6/7 +o Back +v 0.080000 0.079981 -0.508323 +v -0.080000 0.079981 -0.508323 +v 0.080000 -0.080019 -0.508323 +v -0.080000 -0.080019 -0.508323 +v 0.080000 0.079981 -0.508323 +v -0.080000 0.079981 -0.508323 +v 0.080000 -0.080019 -0.508323 +v -0.080000 -0.080019 -0.508323 +v 0.080000 -0.080019 -0.508323 +v -0.080000 -0.080019 -0.508323 +v 0.080000 -0.080019 -0.508323 +v -0.080000 -0.080019 -0.508323 +v -0.080000 0.079981 -0.079195 +v 0.080000 0.079981 -0.079195 +v -0.080000 -0.080019 -0.079195 +v 0.080000 -0.080019 -0.079195 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 1.000000 -0.000000 -0.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 -0.000000 +vn -0.000000 -1.000000 0.000000 +f 35/17/13 33/18/13 34/19/13 +f 38/20/14 44/21/14 47/22/14 +f 37/23/15 46/24/15 48/25/15 +f 40/26/13 39/20/13 42/21/13 +f 37/27/16 39/17/16 40/18/16 +f 42/26/13 41/20/13 44/21/13 +f 45/20/17 46/21/17 37/22/17 +f 43/23/18 48/24/18 47/25/18 +f 39/26/13 41/20/13 42/21/13 +f 41/26/13 43/20/13 44/21/13 +f 45/27/13 47/17/13 48/18/13 +f 36/27/13 35/17/13 34/19/13 +f 45/26/14 38/20/14 47/22/14 +f 43/28/15 37/23/15 48/25/15 +f 38/19/16 37/27/16 40/18/16 +f 38/26/17 45/20/17 37/22/17 +f 44/28/18 43/23/18 47/25/18 +f 46/19/13 45/27/13 48/18/13 +o Left +v 0.508323 0.079981 0.080000 +v 0.508323 0.079981 -0.080000 +v 0.508323 -0.080019 0.080000 +v 0.508323 -0.080019 -0.080000 +v 0.508323 0.079981 0.080000 +v 0.508323 0.079981 -0.080000 +v 0.508323 -0.080019 0.080000 +v 0.508323 -0.080019 -0.080000 +v 0.508323 -0.080019 0.080000 +v 0.508323 -0.080019 -0.080000 +v 0.508323 -0.080019 0.080000 +v 0.508323 -0.080019 -0.080000 +v 0.079195 0.079981 -0.080000 +v 0.079195 0.079981 0.080000 +v 0.079195 -0.080019 -0.080000 +v 0.079195 -0.080019 0.080000 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn -1.000000 0.000000 0.000000 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 1.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.000000 -1.000000 -0.000000 +f 51/29/19 49/30/19 50/31/19 +f 54/32/20 60/33/20 63/34/20 +f 53/35/21 62/36/21 64/37/21 +f 56/38/21 55/32/21 58/33/21 +f 55/29/22 56/30/22 54/31/22 +f 58/38/21 57/32/21 60/33/21 +f 61/32/23 62/33/23 53/34/23 +f 59/35/24 64/36/24 63/37/24 +f 55/38/21 57/32/21 58/33/21 +f 57/38/21 59/32/21 60/33/21 +f 63/29/19 64/30/19 62/31/19 +f 52/39/19 51/29/19 50/31/19 +f 61/38/20 54/32/20 63/34/20 +f 59/40/21 53/35/21 64/37/21 +f 53/39/22 55/29/22 54/31/22 +f 54/38/23 61/32/23 53/34/23 +f 60/40/24 59/35/24 63/37/24 +f 61/39/19 63/29/19 62/31/19 +o Right +v -0.508323 0.079981 -0.080000 +v -0.508323 0.079981 0.080000 +v -0.508323 -0.080019 -0.080000 +v -0.508323 -0.080019 0.080000 +v -0.508323 0.079981 -0.080000 +v -0.508323 0.079981 0.080000 +v -0.508323 -0.080019 -0.080000 +v -0.508323 -0.080019 0.080000 +v -0.508323 -0.080019 -0.080000 +v -0.508323 -0.080019 0.080000 +v -0.508323 -0.080019 -0.080000 +v -0.508323 -0.080019 0.080000 +v -0.079195 0.079981 0.080000 +v -0.079195 0.079981 -0.080000 +v -0.079195 -0.080019 0.080000 +v -0.079195 -0.080019 -0.080000 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -1.000000 -0.000000 0.000000 +vn -0.000000 1.000000 -0.000000 +vn 0.000000 -1.000000 0.000000 +f 67/41/25 65/42/25 66/43/25 +f 70/44/26 76/45/26 79/46/26 +f 69/47/27 78/48/27 80/49/27 +f 72/50/26 71/44/26 74/45/26 +f 69/51/28 71/41/28 72/42/28 +f 74/50/26 73/44/26 76/45/26 +f 77/44/29 78/45/29 69/46/29 +f 75/47/30 80/48/30 79/49/30 +f 71/50/26 73/44/26 74/45/26 +f 73/50/26 75/44/26 76/45/26 +f 77/51/25 79/41/25 80/42/25 +f 68/51/25 67/41/25 66/43/25 +f 77/50/26 70/44/26 79/46/26 +f 75/52/27 69/47/27 80/49/27 +f 70/43/28 69/51/28 72/42/28 +f 70/50/29 77/44/29 69/46/29 +f 76/52/30 75/47/30 79/49/30 +f 78/43/25 77/51/25 80/42/25 +o Top +v 0.080000 0.508323 0.079981 +v -0.080000 0.508323 0.079981 +v 0.080000 0.508323 -0.080019 +v -0.080000 0.508323 -0.080019 +v 0.080000 0.508323 0.079981 +v -0.080000 0.508323 0.079981 +v 0.080000 0.508323 -0.080019 +v -0.080000 0.508323 -0.080019 +v 0.080000 0.508323 -0.080019 +v -0.080000 0.508323 -0.080019 +v 0.080000 0.508323 -0.080019 +v -0.080000 0.508323 -0.080019 +v -0.080000 0.079195 0.079981 +v 0.080000 0.079195 0.079981 +v -0.080000 0.079195 -0.080019 +v 0.080000 0.079195 -0.080019 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 0.000000 -1.000000 -0.000000 +vn -1.000000 -0.000000 0.000000 +vn 1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 -0.000000 +vn -0.000000 -0.000000 -1.000000 +f 83/53/31 81/54/31 82/55/31 +f 86/56/32 92/57/32 95/58/32 +f 85/59/33 94/60/33 96/61/33 +f 88/62/34 87/56/34 90/57/34 +f 85/63/35 87/53/35 88/54/35 +f 90/62/34 89/56/34 92/57/34 +f 93/56/34 94/57/34 85/58/34 +f 91/59/36 96/60/36 95/61/36 +f 87/62/34 89/56/34 90/57/34 +f 89/62/34 91/56/34 92/57/34 +f 93/63/31 95/53/31 96/54/31 +f 84/63/31 83/53/31 82/55/31 +f 93/62/32 86/56/32 95/58/32 +f 91/64/33 85/59/33 96/61/33 +f 86/55/35 85/63/35 88/54/35 +f 86/62/34 93/56/34 85/58/34 +f 92/64/36 91/59/36 95/61/36 +f 94/55/31 93/63/31 96/54/31 +o Bottom +v 0.080000 -0.508323 -0.079981 +v -0.080000 -0.508323 -0.079981 +v 0.080000 -0.508323 0.080019 +v -0.080000 -0.508323 0.080019 +v 0.080000 -0.508323 -0.079981 +v -0.080000 -0.508323 -0.079981 +v 0.080000 -0.508323 0.080019 +v -0.080000 -0.508323 0.080019 +v 0.080000 -0.508323 0.080019 +v -0.080000 -0.508323 0.080019 +v 0.080000 -0.508323 0.080019 +v -0.080000 -0.508323 0.080019 +v -0.080000 -0.079195 -0.079981 +v 0.080000 -0.079195 -0.079981 +v -0.080000 -0.079195 0.080019 +v 0.080000 -0.079195 0.080019 +vt 0.623889 0.376111 +vt 0.623889 0.623889 +vt 0.376111 0.623889 +vt 0.371281 0.377087 +vt 0.371281 0.622913 +vt 0.002440 0.622913 +vt 0.003518 0.379492 +vt 0.370203 0.379492 +vt 0.370203 0.620508 +vt 0.002440 0.377087 +vt 0.376111 0.376111 +vt 0.003518 0.620508 +vn 0.000000 1.000000 0.000000 +vn -1.000000 0.000000 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.000000 -1.000000 +f 99/65/37 97/66/37 98/67/37 +f 102/68/38 108/69/38 111/70/38 +f 101/71/39 110/72/39 112/73/39 +f 104/74/40 103/68/40 106/69/40 +f 101/75/41 103/65/41 104/66/41 +f 106/74/40 105/68/40 108/69/40 +f 109/68/42 110/69/42 101/70/42 +f 107/71/40 112/72/40 111/73/40 +f 103/74/40 105/68/40 106/69/40 +f 105/74/40 107/68/40 108/69/40 +f 109/75/37 111/65/37 112/66/37 +f 100/75/37 99/65/37 98/67/37 +f 109/74/38 102/68/38 111/70/38 +f 107/76/39 101/71/39 112/73/39 +f 102/67/41 101/75/41 104/66/41 +f 102/74/42 109/68/42 101/70/42 +f 108/76/40 107/71/40 111/73/40 +f 110/67/37 109/75/37 112/66/37 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/receiver.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/receiver.obj new file mode 100644 index 00000000..6815e875 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/receiver.obj @@ -0,0 +1,937 @@ +# Blender v2.69 (sub 0) OBJ File: 'receiver.blend' +# www.blender.org +o Receiver +v 0.467651 0.862413 -0.046456 +v 0.467651 0.836098 -0.085839 +v 0.467651 0.796715 -0.112154 +v 0.467651 0.750259 -0.121394 +v 0.467651 0.703804 -0.112154 +v 0.467651 0.664421 -0.085839 +v 0.467651 0.638106 -0.046456 +v 0.467651 0.871654 0.000000 +v 0.500500 0.862413 -0.032849 +v 0.528348 0.836098 -0.060697 +v 0.546956 0.796715 -0.079305 +v 0.553490 0.750259 -0.085839 +v 0.546956 0.703804 -0.079305 +v 0.528348 0.664421 -0.060697 +v 0.500500 0.638106 -0.032849 +v 0.514107 0.862413 0.000000 +v 0.553490 0.836098 0.000000 +v 0.579805 0.796715 0.000000 +v 0.589046 0.750259 0.000000 +v 0.579805 0.703804 0.000000 +v 0.553490 0.664421 0.000000 +v 0.514107 0.638106 0.000000 +v 0.500500 0.862413 0.032849 +v 0.528348 0.836098 0.060697 +v 0.546956 0.796715 0.079305 +v 0.553490 0.750259 0.085839 +v 0.546956 0.703804 0.079305 +v 0.528348 0.664421 0.060697 +v 0.500500 0.638106 0.032849 +v 0.467651 0.862413 0.046456 +v 0.467651 0.836098 0.085839 +v 0.467651 0.796715 0.112154 +v 0.467651 0.750259 0.121394 +v 0.467651 0.703804 0.112154 +v 0.467651 0.664421 0.085839 +v 0.467651 0.638106 0.046456 +v 0.467651 0.628865 0.000000 +v 0.537055 0.862413 -0.046456 +v 0.537055 0.836098 -0.085839 +v 0.537055 0.796715 -0.112154 +v 0.537055 0.750259 -0.121394 +v 0.537055 0.703804 -0.112154 +v 0.537055 0.664421 -0.085839 +v 0.537055 0.638106 -0.046456 +v 0.537054 0.871654 0.000000 +v 0.569904 0.862413 -0.032849 +v 0.597752 0.836098 -0.060697 +v 0.616359 0.796715 -0.079305 +v 0.622893 0.750259 -0.085839 +v 0.616359 0.703804 -0.079305 +v 0.597752 0.664421 -0.060697 +v 0.569904 0.638106 -0.032849 +v 0.583510 0.862413 0.000000 +v 0.622893 0.836098 0.000000 +v 0.649208 0.796715 0.000000 +v 0.658449 0.750259 0.000000 +v 0.649208 0.703804 0.000000 +v 0.622893 0.664421 0.000000 +v 0.583510 0.638106 0.000000 +v 0.569904 0.862413 0.032849 +v 0.597752 0.836098 0.060697 +v 0.616359 0.796715 0.079305 +v 0.622893 0.750259 0.085839 +v 0.616359 0.703804 0.079305 +v 0.597752 0.664421 0.060697 +v 0.569904 0.638106 0.032849 +v 0.537054 0.862413 0.046456 +v 0.537054 0.836098 0.085839 +v 0.537054 0.796715 0.112154 +v 0.537054 0.750259 0.121394 +v 0.537054 0.703804 0.112154 +v 0.537054 0.664421 0.085839 +v 0.537054 0.638106 0.046456 +v 0.537055 0.628865 0.000000 +vt 0.835682 0.527008 +vt 0.772800 0.552824 +vt 0.835682 0.445599 +vt 0.719491 0.493300 +vt 0.835682 0.385664 +vt 0.990770 0.979079 +vt 0.853651 0.966694 +vt 0.984098 0.895354 +vt 0.835682 0.881950 +vt 0.984098 0.804684 +vt 0.846979 0.792300 +vt 0.990770 0.720871 +vt 1.000000 0.711392 +vt 0.883810 0.663690 +vt 0.937118 0.617540 +vt 0.746753 0.615149 +vt 0.349218 0.675540 +vt 0.339700 0.550137 +vt 0.416074 0.689798 +vt 0.403637 0.525951 +vt 0.500772 0.690158 +vt 0.487311 0.512811 +vt 0.590418 0.676564 +vt 0.577981 0.512717 +vt 0.671363 0.651088 +vt 0.835682 0.548528 +vt 0.772800 0.677475 +vt 0.671363 0.608463 +vt 0.000000 0.909167 +vt 0.017459 0.838487 +vt 0.077707 0.955635 +vt 0.416074 0.408482 +vt 0.500772 0.385664 +vt 0.590418 0.395249 +vt 0.661845 0.525684 +vt 0.883809 0.433365 +vt 0.911072 0.555214 +vt 0.835682 0.703291 +vt 0.719491 0.723625 +vt 0.017459 0.715028 +vt 0.100518 0.863287 +vt 0.100518 0.701980 +vt 0.190924 0.869659 +vt 0.190924 0.695062 +vt 0.274913 0.856632 +vt 0.274914 0.695326 +vt 0.339700 0.826191 +vt 1.000000 0.385664 +vt 0.937118 0.492889 +vt 0.835682 0.617497 +vt 1.000000 0.643356 +vt 1.000000 0.557562 +vt 1.000000 0.467073 +vt 0.504018 0.244320 +vt 0.504018 0.325729 +vt 0.441136 0.218504 +vt 0.504018 0.385664 +vt 0.387828 0.278027 +vt 0.904534 0.155113 +vt 0.820811 0.148419 +vt 0.892185 0.017991 +vt 0.730141 0.148396 +vt 0.807445 0.000000 +vt 0.646326 0.155047 +vt 0.717792 0.011275 +vt 0.339700 0.823014 +vt 0.407736 0.823014 +vt 0.433552 0.885896 +vt 0.415090 0.156178 +vt 0.009519 0.405186 +vt 0.076374 0.390928 +vt 0.000000 0.530589 +vt 0.161072 0.390568 +vt 0.063938 0.554775 +vt 0.250718 0.404161 +vt 0.147611 0.567914 +vt 0.331663 0.429638 +vt 0.238281 0.568008 +vt 0.387402 0.939205 +vt 0.502564 0.987332 +vt 0.339700 0.162864 +vt 0.441136 0.093853 +vt 0.000000 0.046468 +vt 0.077707 0.000000 +vt 0.017459 0.117148 +vt 0.076374 0.672243 +vt 0.161072 0.695062 +vt 0.322145 0.555041 +vt 0.250718 0.685477 +vt 0.495878 0.911942 +vt 0.617727 0.939205 +vt 0.387827 0.047702 +vt 0.504018 0.068037 +vt 0.100518 0.092348 +vt 0.017459 0.240607 +vt 0.190924 0.085976 +vt 0.100518 0.253655 +vt 0.274914 0.099003 +vt 0.190924 0.260573 +vt 0.339700 0.129444 +vt 0.274914 0.260309 +vt 0.558203 0.885896 +vt 0.665429 0.823014 +vt 0.504018 0.153830 +vt 0.493530 0.823014 +vt 0.584019 0.823014 +vt 0.730141 0.278773 +vt 0.646326 0.285424 +vt 0.493530 0.690158 +vt 0.584019 0.690158 +vt 0.636874 0.068036 +vt 0.636874 0.153830 +vt 0.090537 0.383649 +vt 0.007477 0.370602 +vt 0.636874 0.244320 +vt 0.968563 0.297834 +vt 0.904534 0.285490 +vt 0.968563 0.167457 +vt 0.264932 0.390304 +vt 0.180943 0.390568 +vt 0.820811 0.278797 +vt 0.665429 0.690158 +vt 0.339700 0.690158 +vt 0.407736 0.690158 +vt 0.636874 0.000000 +vt 0.504018 0.000000 +vt 0.636874 0.325729 +vt 0.329718 0.382898 +vt 0.339700 0.252903 +vt 0.683871 0.447989 +vt 0.885824 0.711392 +vt 0.671363 0.435778 +vt 0.835682 0.771327 +vt 0.339700 0.702732 +vt 0.352208 0.323338 +vt 0.636874 0.050099 +vt 0.331663 0.644948 +f 7/1 15/2 6/3 +f 6/3 14/4 5/5 +f 5/6 13/7 4/8 +f 4/8 12/9 3/10 +f 3/10 11/11 2/12 +f 2/13 10/14 9/15 +f 15/2 22/16 14/4 +f 14/17 21/18 13/19 +f 13/19 20/20 12/21 +f 12/21 19/22 11/23 +f 11/23 18/24 10/25 +f 10/14 17/26 9/15 +f 22/16 29/27 21/28 +f 21/29 28/30 20/31 +f 20/20 27/32 19/22 +f 19/22 26/33 18/24 +f 18/24 25/34 17/35 +f 17/26 24/36 16/37 +f 29/27 36/38 28/39 +f 28/30 35/40 27/41 +f 27/41 34/42 26/43 +f 26/43 33/44 25/45 +f 25/45 32/46 24/47 +f 24/36 31/48 23/49 +f 37/50 15/2 7/1 +f 1/51 9/15 8/52 +f 37/50 22/16 15/2 +f 9/15 16/37 8/52 +f 37/50 29/27 22/16 +f 16/37 23/49 8/52 +f 37/50 36/38 29/27 +f 23/49 30/53 8/52 +f 44/54 43/55 52/56 +f 43/55 42/57 51/58 +f 42/59 41/60 50/61 +f 41/60 40/62 49/63 +f 40/62 39/64 48/65 +f 39/66 38/67 46/68 +f 52/56 51/58 59/69 +f 51/70 50/71 58/72 +f 50/71 49/73 57/74 +f 49/73 48/75 56/76 +f 48/75 47/77 55/78 +f 47/79 46/68 54/80 +f 59/69 58/81 66/82 +f 58/83 57/84 65/85 +f 57/74 56/76 64/86 +f 56/76 55/78 63/87 +f 55/78 54/88 62/89 +f 54/80 53/90 61/91 +f 66/82 65/92 73/93 +f 65/85 64/94 72/95 +f 64/94 63/96 71/97 +f 63/96 62/98 70/99 +f 62/98 61/100 69/101 +f 61/91 60/102 68/103 +f 74/104 44/54 52/56 +f 38/67 45/105 46/68 +f 74/104 52/56 59/69 +f 46/68 45/105 53/90 +f 74/104 59/69 66/82 +f 53/90 45/105 60/102 +f 74/104 66/82 73/93 +f 60/102 45/105 67/106 +f 3/107 2/108 40/62 +f 8/109 30/110 45/105 +f 36/111 37/112 74/104 +f 34/113 35/114 71/97 +f 37/112 7/115 74/104 +f 6/116 5/117 43/118 +f 32/119 33/120 69/101 +f 4/121 3/107 41/60 +f 30/110 31/122 67/106 +f 2/123 1/124 39/66 +f 35/125 36/111 72/126 +f 7/115 6/127 44/54 +f 33/120 34/113 70/99 +f 1/124 8/109 38/67 +f 5/117 4/121 42/59 +f 31/128 32/119 68/129 +f 15/2 14/4 6/3 +f 14/4 13/130 5/5 +f 13/7 12/9 4/8 +f 12/9 11/11 3/10 +f 11/11 10/131 2/12 +f 1/51 2/13 9/15 +f 22/16 21/28 14/4 +f 21/18 20/20 13/19 +f 20/20 19/22 12/21 +f 19/22 18/24 11/23 +f 18/24 17/35 10/25 +f 17/26 16/37 9/15 +f 29/27 28/39 21/28 +f 28/30 27/41 20/31 +f 27/32 26/33 19/22 +f 26/33 25/34 18/24 +f 25/34 24/132 17/35 +f 24/36 23/49 16/37 +f 36/38 35/133 28/39 +f 35/40 34/42 27/41 +f 34/42 33/44 26/43 +f 33/44 32/46 25/45 +f 32/46 31/134 24/47 +f 31/48 30/53 23/49 +f 43/55 51/58 52/56 +f 42/57 50/135 51/58 +f 41/60 49/63 50/61 +f 40/62 48/65 49/63 +f 39/64 47/136 48/65 +f 47/79 39/66 46/68 +f 51/58 58/81 59/69 +f 50/71 57/74 58/72 +f 49/73 56/76 57/74 +f 48/75 55/78 56/76 +f 47/77 54/88 55/78 +f 46/68 53/90 54/80 +f 58/81 65/92 66/82 +f 57/84 64/94 65/85 +f 56/76 63/87 64/86 +f 55/78 62/89 63/87 +f 54/88 61/137 62/89 +f 53/90 60/102 61/91 +f 65/92 72/126 73/93 +f 64/94 71/97 72/95 +f 63/96 70/99 71/97 +f 62/98 69/101 70/99 +f 61/100 68/129 69/101 +f 60/102 67/106 68/103 +f 2/108 39/64 40/62 +f 30/110 67/106 45/105 +f 73/93 36/111 74/104 +f 35/114 72/95 71/97 +f 7/115 44/54 74/104 +f 5/117 42/59 43/118 +f 33/120 70/99 69/101 +f 3/107 40/62 41/60 +f 31/122 68/103 67/106 +f 1/124 38/67 39/66 +f 36/111 73/93 72/126 +f 6/127 43/55 44/54 +f 34/113 71/97 70/99 +f 8/109 45/105 38/67 +f 4/121 41/60 42/59 +f 32/119 69/101 68/129 +o Ring +v 0.347722 0.343926 0.000000 +v 0.400050 0.362972 0.000000 +v 0.427894 0.411199 0.000000 +v 0.418224 0.466040 0.000000 +v 0.375565 0.501834 0.000000 +v 0.319878 0.501834 0.000000 +v 0.277220 0.466040 0.000000 +v 0.267550 0.411199 0.000000 +v 0.295393 0.362972 0.000000 +v 0.347722 0.439157 -0.261643 +v 0.400050 0.453747 -0.249400 +v 0.427894 0.490690 -0.218401 +v 0.418224 0.532701 -0.183150 +v 0.375565 0.560121 -0.160141 +v 0.319878 0.560121 -0.160141 +v 0.277220 0.532701 -0.183150 +v 0.267550 0.490690 -0.218401 +v 0.295393 0.453747 -0.249400 +v 0.347722 0.680288 -0.400860 +v 0.400050 0.683595 -0.382103 +v 0.427894 0.691970 -0.334610 +v 0.418224 0.701493 -0.280602 +v 0.375565 0.707708 -0.245351 +v 0.319878 0.707708 -0.245351 +v 0.277220 0.701493 -0.280602 +v 0.267550 0.691970 -0.334610 +v 0.295393 0.683595 -0.382103 +v 0.347722 0.954492 -0.352510 +v 0.400050 0.944969 -0.336016 +v 0.427894 0.920856 -0.294251 +v 0.418224 0.893436 -0.246757 +v 0.375565 0.875538 -0.215758 +v 0.319878 0.875538 -0.215758 +v 0.277220 0.893436 -0.246757 +v 0.267550 0.920856 -0.294251 +v 0.295393 0.944969 -0.336016 +v 0.347722 1.133466 -0.139217 +v 0.400050 1.115569 -0.132703 +v 0.427894 1.070251 -0.116209 +v 0.418224 1.018717 -0.097452 +v 0.375565 0.985081 -0.085210 +v 0.319878 0.985081 -0.085210 +v 0.277220 1.018717 -0.097452 +v 0.267550 1.070251 -0.116209 +v 0.295393 1.115569 -0.132703 +v 0.347722 1.133466 0.139217 +v 0.400050 1.115569 0.132703 +v 0.427894 1.070251 0.116209 +v 0.418224 1.018718 0.097452 +v 0.375565 0.985081 0.085209 +v 0.319878 0.985081 0.085209 +v 0.277220 1.018718 0.097452 +v 0.267550 1.070251 0.116209 +v 0.295393 1.115569 0.132703 +v 0.347722 0.954492 0.352510 +v 0.400050 0.944969 0.336016 +v 0.427894 0.920856 0.294251 +v 0.418224 0.893436 0.246757 +v 0.375565 0.875538 0.215758 +v 0.319878 0.875538 0.215758 +v 0.277220 0.893436 0.246757 +v 0.267550 0.920856 0.294251 +v 0.295393 0.944969 0.336016 +v 0.347722 0.680288 0.400860 +v 0.400050 0.683595 0.382103 +v 0.427894 0.691970 0.334610 +v 0.418224 0.701493 0.280602 +v 0.375565 0.707708 0.245351 +v 0.319878 0.707708 0.245351 +v 0.277220 0.701493 0.280602 +v 0.267550 0.691970 0.334610 +v 0.295393 0.683595 0.382103 +v 0.347722 0.439157 0.261643 +v 0.400050 0.453747 0.249400 +v 0.427894 0.490690 0.218401 +v 0.418224 0.532701 0.183150 +v 0.375565 0.560121 0.160141 +v 0.319878 0.560121 0.160141 +v 0.277220 0.532701 0.183150 +v 0.267550 0.490690 0.218401 +v 0.295393 0.453747 0.249400 +vt 0.479666 0.359820 +vt 0.366238 0.507036 +vt 0.454018 0.355324 +vt 0.345898 0.495652 +vt 0.417686 0.343939 +vt 0.323004 0.466825 +vt 0.387669 0.330993 +vt 0.393699 0.721135 +vt 0.409403 0.594724 +vt 0.429807 0.721135 +vt 0.443538 0.610604 +vt 0.465934 0.721135 +vt 0.834581 0.115064 +vt 0.726946 0.070383 +vt 0.857125 0.089151 +vt 0.734026 0.038051 +vt 0.881674 0.060936 +vt 0.551875 0.737851 +vt 0.588259 0.888593 +vt 0.515417 0.737851 +vt 0.479666 0.737851 +vt 0.523254 0.918439 +vt 0.071896 0.527462 +vt 0.029732 0.674678 +vt 0.040191 0.538846 +vt 0.180247 0.527462 +vt 0.177943 0.494681 +vt 0.308269 0.434045 +vt 0.449168 0.527462 +vt 1.000000 0.490001 +vt 0.986269 0.600532 +vt 0.963873 0.490001 +vt 0.950141 0.600532 +vt 0.929738 0.474120 +vt 0.613065 0.074607 +vt 0.734881 0.000000 +vt 0.680386 0.968801 +vt 0.556965 0.909989 +vt 0.108088 0.538846 +vt 0.067897 0.679174 +vt 0.029732 0.866856 +vt 0.000000 0.679174 +vt 0.034577 0.435869 +vt 0.050379 0.414473 +vt 0.186622 0.457405 +vt 0.079647 0.390142 +vt 0.202223 0.433074 +vt 1.000000 0.711063 +vt 0.963873 0.711063 +vt 0.914033 0.600532 +vt 0.550842 0.181715 +vt 0.590639 0.043592 +vt 0.516440 0.171315 +vt 0.564396 0.023814 +vt 0.067897 0.862360 +vt 0.743907 0.960008 +vt 0.709830 0.810712 +vt 0.780666 0.950613 +vt 0.748183 0.808303 +vt 0.805946 0.923123 +vt 0.000000 0.263731 +vt 0.037400 0.263731 +vt 0.108687 0.374262 +vt 0.224429 0.548858 +vt 0.174290 0.638963 +vt 0.195660 0.548858 +vt 0.145521 0.638963 +vt 0.165431 0.527462 +vt 0.576472 0.309257 +vt 0.547003 0.323405 +vt 0.479666 0.169665 +vt 0.108088 1.002688 +vt 0.720304 0.618820 +vt 0.758167 0.625390 +vt 0.777500 0.798502 +vt 0.050379 0.112989 +vt 0.079647 0.137319 +vt 0.071747 0.263731 +vt 0.174290 0.756588 +vt 0.145521 0.756588 +vt 0.108088 0.630513 +vt 0.677962 0.397556 +vt 0.668026 0.428699 +vt 0.514566 0.343343 +vt 0.680387 0.804602 +vt 0.690370 0.621689 +vt 0.770428 0.474120 +vt 0.034577 0.091593 +vt 0.180247 0.000000 +vt 0.177943 0.032780 +vt 0.186622 0.070057 +vt 0.108687 0.153200 +vt 0.224429 0.846693 +vt 0.195660 0.846693 +vt 0.108088 0.765038 +vt 0.807823 0.405295 +vt 0.822883 0.437927 +vt 0.652767 0.463582 +vt 0.914033 0.485505 +vt 0.873843 0.625833 +vt 0.877841 0.474120 +vt 0.835678 0.621337 +vt 0.835678 0.813515 +vt 0.805946 0.625833 +vt 0.345898 0.031810 +vt 0.323004 0.060637 +vt 0.308269 0.093417 +vt 0.202223 0.094388 +vt 0.310395 0.543342 +vt 0.296664 0.653873 +vt 0.274268 0.543342 +vt 0.260537 0.653873 +vt 0.240133 0.527462 +vt 0.905293 0.328853 +vt 0.939112 0.346773 +vt 0.829604 0.474120 +vt 0.873843 0.809018 +vt 0.366238 0.020425 +vt 0.479666 0.167642 +vt 0.454018 0.172138 +vt 0.417686 0.183523 +vt 0.449168 0.914809 +vt 0.409403 0.847547 +vt 0.478307 0.890479 +vt 0.310395 0.764404 +vt 0.274268 0.764404 +vt 0.224429 0.653873 +vt 0.924764 0.203998 +vt 0.680386 0.506901 +vt 0.588259 0.587109 +vt 0.662169 0.474120 +vt 0.914033 0.949347 +vt 0.387669 0.196469 +vt 0.443538 0.831666 +vt 0.479666 0.831666 +vt 0.893722 0.215483 +vt 0.962331 0.197887 +vt 0.556965 0.565713 +vt 0.523253 0.557263 +vt 0.479666 0.610604 +vt 0.478307 0.551792 +vt 0.662169 1.001582 +vt 0.000000 0.862360 +vt 0.929738 0.726943 +vt 0.071896 1.014073 +vt 0.786243 0.638324 +vt 0.805946 0.487460 +vt 0.165431 0.868089 +vt 0.805946 0.809018 +vt 0.308588 0.114813 +vt 0.962331 0.370027 +vt 0.240133 0.780285 +vt 0.877841 0.960731 +f 75/138 84/139 76/140 +f 76/140 85/141 77/142 +f 77/142 86/143 78/144 +f 78/145 87/146 79/147 +f 79/147 88/148 80/149 +f 80/150 89/151 81/152 +f 81/152 90/153 82/154 +f 82/155 91/156 83/157 +f 75/158 83/157 84/159 +f 84/160 93/161 85/162 +f 85/141 94/163 86/143 +f 86/143 95/164 87/165 +f 87/146 96/166 88/148 +f 88/167 97/168 89/169 +f 89/169 98/170 90/171 +f 90/153 99/172 91/173 +f 91/156 100/174 92/175 +f 92/176 101/177 84/160 +f 93/161 102/178 94/179 +f 94/163 103/180 95/164 +f 95/164 104/181 96/182 +f 96/182 105/183 97/184 +f 97/168 106/185 98/170 +f 98/170 107/186 99/187 +f 99/172 108/188 100/189 +f 100/189 109/190 101/191 +f 101/177 110/192 93/161 +f 102/193 111/194 103/195 +f 103/195 112/196 104/197 +f 104/181 113/198 105/183 +f 105/183 114/199 106/200 +f 106/201 115/202 107/203 +f 107/203 116/204 108/205 +f 108/188 117/206 109/190 +f 109/190 118/207 110/208 +f 110/192 119/209 102/178 +f 111/194 120/210 112/196 +f 112/196 121/211 113/212 +f 113/198 122/213 114/199 +f 114/199 123/214 115/215 +f 115/202 124/216 116/204 +f 116/204 125/217 117/218 +f 117/206 126/219 118/207 +f 118/207 127/220 119/221 +f 119/222 128/223 111/194 +f 120/210 129/224 121/211 +f 121/225 130/226 122/213 +f 122/213 131/227 123/214 +f 123/214 132/228 124/229 +f 124/216 133/230 125/217 +f 125/217 134/231 126/232 +f 126/219 135/233 127/220 +f 127/220 136/234 128/235 +f 128/236 137/237 120/238 +f 129/239 138/240 130/241 +f 130/226 139/242 131/227 +f 131/227 140/243 132/228 +f 132/228 141/244 133/245 +f 133/246 142/247 134/248 +f 134/248 143/249 135/250 +f 135/233 144/251 136/234 +f 136/234 145/252 137/253 +f 137/237 146/254 129/239 +f 138/255 147/256 139/242 +f 139/242 148/257 140/243 +f 140/243 149/258 141/244 +f 141/259 150/260 142/261 +f 142/247 151/262 143/249 +f 143/249 152/263 144/264 +f 144/251 153/265 145/252 +f 145/266 154/267 146/268 +f 146/254 155/269 138/240 +f 147/256 75/138 148/257 +f 148/257 76/140 149/258 +f 149/258 77/142 150/270 +f 150/260 78/145 151/271 +f 151/271 79/147 152/272 +f 152/273 80/150 153/265 +f 153/265 81/152 154/274 +f 154/267 82/155 155/275 +f 155/275 83/157 147/276 +f 84/139 85/141 76/140 +f 85/141 86/143 77/142 +f 86/143 87/165 78/144 +f 87/146 88/148 79/147 +f 88/148 89/277 80/149 +f 89/151 90/153 81/152 +f 90/153 91/173 82/154 +f 91/156 92/175 83/157 +f 83/157 92/175 84/159 +f 93/161 94/179 85/162 +f 94/163 95/164 86/143 +f 95/164 96/182 87/165 +f 96/166 97/278 88/148 +f 97/168 98/170 89/169 +f 98/170 99/187 90/171 +f 99/172 100/189 91/173 +f 100/174 101/279 92/175 +f 101/177 93/161 84/160 +f 102/178 103/280 94/179 +f 103/180 104/181 95/164 +f 104/181 105/183 96/182 +f 105/183 106/200 97/184 +f 106/185 107/186 98/170 +f 107/186 108/281 99/187 +f 108/188 109/190 100/189 +f 109/190 110/208 101/191 +f 110/192 102/178 93/161 +f 111/194 112/196 103/195 +f 112/196 113/212 104/197 +f 113/198 114/199 105/183 +f 114/199 115/215 106/200 +f 115/202 116/204 107/203 +f 116/204 117/218 108/205 +f 117/206 118/207 109/190 +f 118/207 119/221 110/208 +f 119/209 111/282 102/178 +f 120/210 121/211 112/196 +f 121/211 122/283 113/212 +f 122/213 123/214 114/199 +f 123/214 124/229 115/215 +f 124/216 125/217 116/204 +f 125/217 126/232 117/218 +f 126/219 127/220 118/207 +f 127/220 128/235 119/221 +f 128/223 120/210 111/194 +f 129/224 130/284 121/211 +f 130/226 131/227 122/213 +f 131/227 132/228 123/214 +f 132/228 133/245 124/229 +f 133/230 134/231 125/217 +f 134/231 135/285 126/232 +f 135/233 136/234 127/220 +f 136/234 137/253 128/235 +f 137/237 129/239 120/238 +f 138/240 139/286 130/241 +f 139/242 140/243 131/227 +f 140/243 141/244 132/228 +f 141/244 142/287 133/245 +f 142/247 143/249 134/248 +f 143/249 144/264 135/250 +f 144/251 145/252 136/234 +f 145/252 146/288 137/253 +f 146/254 138/240 129/239 +f 147/256 148/257 139/242 +f 148/257 149/258 140/243 +f 149/258 150/270 141/244 +f 150/260 151/271 142/261 +f 151/262 152/263 143/249 +f 152/263 153/289 144/264 +f 153/265 154/274 145/252 +f 154/267 155/275 146/268 +f 155/269 147/290 138/240 +f 75/138 76/140 148/257 +f 76/140 77/142 149/258 +f 77/142 78/144 150/270 +f 78/145 79/147 151/271 +f 79/147 80/149 152/272 +f 80/150 81/152 153/265 +f 81/152 82/154 154/274 +f 82/155 83/157 155/275 +f 83/157 75/158 147/276 +o Main +v 0.442187 0.934133 -0.076163 +v 0.442187 0.890990 -0.140731 +v 0.442187 0.826422 -0.183874 +v 0.442187 0.750259 -0.199024 +v 0.442187 0.674096 -0.183874 +v 0.442187 0.609528 -0.140731 +v 0.442187 0.566385 -0.076163 +v 0.442187 0.949283 0.000000 +v 0.442187 0.934133 0.076163 +v 0.442187 0.890990 0.140731 +v 0.442187 0.826422 0.183874 +v 0.442187 0.750259 0.199024 +v 0.442187 0.674096 0.183874 +v 0.442187 0.609528 0.140731 +v 0.442187 0.566385 0.076163 +v 0.442187 0.551236 0.000000 +v -0.030531 0.934133 -0.076163 +v -0.030531 0.890990 -0.140731 +v -0.030531 0.826422 -0.183874 +v -0.030531 0.750259 -0.199024 +v -0.030531 0.674096 -0.183874 +v -0.030531 0.609528 -0.140731 +v -0.030531 0.566385 -0.076163 +v -0.030531 0.949283 0.000000 +v -0.030531 0.934133 0.076163 +v -0.030531 0.890990 0.140731 +v -0.030531 0.826422 0.183874 +v -0.030531 0.750259 0.199024 +v -0.030531 0.674096 0.183874 +v -0.030531 0.609528 0.140731 +v -0.030531 0.566385 0.076163 +v -0.030531 0.551236 0.000000 +v 0.467651 0.862413 -0.046456 +v 0.467651 0.836098 -0.085839 +v 0.467651 0.796715 -0.112154 +v 0.467651 0.750259 -0.121394 +v 0.467651 0.703804 -0.112154 +v 0.467651 0.664421 -0.085839 +v 0.467651 0.638106 -0.046456 +v 0.467651 0.871654 0.000000 +v 0.467651 0.862413 0.046456 +v 0.467651 0.836098 0.085839 +v 0.467651 0.796715 0.112154 +v 0.467651 0.750259 0.121394 +v 0.467651 0.703804 0.112154 +v 0.467651 0.664421 0.085839 +v 0.467651 0.638106 0.046456 +v 0.467651 0.628865 0.000000 +vt 0.184819 0.623911 +vt 0.136047 0.575543 +vt 0.223127 0.564149 +vt 0.381242 0.623911 +vt 0.317518 0.650088 +vt 0.342935 0.564149 +vt 0.109652 0.512348 +vt 0.109652 0.443945 +vt 0.177278 0.496101 +vt 0.456410 0.512347 +vt 0.430015 0.575543 +vt 0.388783 0.496101 +vt 0.248544 0.650088 +vt 0.261995 0.580115 +vt 0.136047 0.380749 +vt 0.184819 0.332381 +vt 0.193378 0.415832 +vt 0.430015 0.380749 +vt 0.456410 0.443945 +vt 0.372683 0.415832 +vt 0.248544 0.306205 +vt 0.317518 0.306205 +vt 0.261995 0.370364 +vt 0.304066 0.580115 +vt 0.193378 0.534647 +vt 0.372683 0.534647 +vt 0.177278 0.454378 +vt 0.388783 0.454378 +vt 0.381242 0.332381 +vt 0.342935 0.386330 +vt 0.223127 0.386330 +vt 0.304066 0.370364 +vt 0.765330 0.551400 +vt 0.834304 0.551400 +vt 0.765330 0.971275 +vt 0.529527 0.061009 +vt 0.529527 0.124733 +vt 0.109652 0.061009 +vt 0.505183 0.971275 +vt 0.456410 0.971275 +vt 0.505183 0.551400 +vt 0.529527 0.193708 +vt 0.529527 0.257432 +vt 0.109652 0.193708 +vt 0.637881 0.971275 +vt 0.568907 0.971275 +vt 0.637881 0.551400 +vt 0.876285 0.418701 +vt 0.876285 0.487676 +vt 0.456410 0.418701 +vt 0.898028 0.551400 +vt 0.834304 0.971275 +vt 0.529527 0.012237 +vt 0.109652 0.012237 +vt 0.701605 0.971275 +vt 0.701605 0.551400 +vt 0.109652 0.124733 +vt 0.568907 0.551400 +vt 0.529527 0.306205 +vt 0.109652 0.257432 +vt 0.876285 0.354977 +vt 0.456410 0.354977 +vt 0.876285 0.551400 +vt 0.456410 0.487676 +vt 0.876285 0.306205 +vt 0.456410 0.306205 +vt 0.456410 0.551400 +vt 0.898028 0.971275 +vt 0.109652 0.306205 +f 163/291 164/292 195/293 +f 158/294 157/295 190/296 +f 165/297 166/298 197/299 +f 160/300 159/301 192/302 +f 156/303 163/291 188/304 +f 167/305 168/306 199/307 +f 162/308 161/309 194/310 +f 169/311 170/312 201/313 +f 157/295 156/303 189/314 +f 164/292 165/297 196/315 +f 159/301 158/294 191/316 +f 166/298 167/305 198/317 +f 161/309 160/300 193/318 +f 171/319 162/308 203/320 +f 168/306 169/311 200/321 +f 170/312 171/319 202/322 +f 160/323 161/324 176/325 +f 167/326 166/327 183/328 +f 158/329 159/330 174/331 +f 165/332 164/333 181/334 +f 156/335 157/336 172/337 +f 170/338 169/339 186/340 +f 161/324 162/341 177/342 +f 168/343 167/326 184/344 +f 163/345 156/335 179/346 +f 159/346 160/323 175/345 +f 166/327 165/332 182/347 +f 157/336 158/329 173/348 +f 164/333 163/349 180/350 +f 171/351 170/338 187/352 +f 169/339 168/353 185/354 +f 162/355 171/351 178/356 +f 164/292 196/315 195/293 +f 157/295 189/314 190/296 +f 166/298 198/317 197/299 +f 159/301 191/316 192/302 +f 163/291 195/293 188/304 +f 168/306 200/321 199/307 +f 161/309 193/318 194/310 +f 170/312 202/322 201/313 +f 156/303 188/304 189/314 +f 165/297 197/299 196/315 +f 158/294 190/296 191/316 +f 167/305 199/307 198/317 +f 160/300 192/302 193/318 +f 162/308 194/310 203/320 +f 169/311 201/313 200/321 +f 171/319 203/320 202/322 +f 161/324 177/342 176/325 +f 166/327 182/347 183/328 +f 159/330 175/357 174/331 +f 164/333 180/350 181/334 +f 157/336 173/348 172/337 +f 169/339 185/354 186/340 +f 162/341 178/358 177/342 +f 167/326 183/328 184/344 +f 156/335 172/337 179/346 +f 160/323 176/325 175/345 +f 165/332 181/334 182/347 +f 158/329 174/331 173/348 +f 163/349 179/359 180/350 +f 170/338 186/340 187/352 +f 168/353 184/357 185/354 +f 171/351 187/352 178/356 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/redirector.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/redirector.obj new file mode 100644 index 00000000..a48ebb09 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/redirector.obj @@ -0,0 +1,568 @@ +# Blender v2.69 (sub 0) OBJ File: 'energyBlaster.blend' +# www.blender.org +o Ring +v 0.200623 1.163777 -0.132192 +v 0.180561 1.160594 -0.097008 +v 0.140436 1.154227 -0.097008 +v 0.120374 1.151044 -0.132192 +v 0.140436 1.154227 -0.167376 +v 0.180561 1.160594 -0.167376 +v 0.133225 1.285288 -0.132192 +v 0.119903 1.269953 -0.097008 +v 0.093258 1.239285 -0.097008 +v 0.079935 1.223951 -0.132192 +v 0.093258 1.239285 -0.167376 +v 0.119903 1.269953 -0.167376 +v 0.003490 1.335048 -0.132192 +v 0.003141 1.314737 -0.097008 +v 0.002443 1.274117 -0.097008 +v 0.002094 1.253807 -0.132192 +v 0.002443 1.274117 -0.167376 +v 0.003141 1.314737 -0.167376 +v -0.127879 1.289774 -0.132192 +v -0.115091 1.273991 -0.097008 +v -0.089515 1.242425 -0.097008 +v -0.076727 1.226642 -0.132192 +v -0.089515 1.242425 -0.167376 +v -0.115091 1.273991 -0.167376 +v -0.199411 1.170650 -0.132192 +v -0.179470 1.166780 -0.097008 +v -0.139588 1.159039 -0.097008 +v -0.119647 1.155168 -0.132192 +v -0.139588 1.159039 -0.167376 +v -0.179470 1.166780 -0.167376 +v -0.177637 1.033416 -0.132192 +v -0.159873 1.043269 -0.097008 +v -0.124346 1.062975 -0.097008 +v -0.106582 1.072828 -0.132192 +v -0.124346 1.062975 -0.167376 +v -0.159873 1.043269 -0.167376 +v -0.072744 0.942285 -0.132192 +v -0.065470 0.961251 -0.097008 +v -0.050921 0.999183 -0.097008 +v -0.043646 1.018149 -0.132192 +v -0.050921 0.999183 -0.167376 +v -0.065470 0.961251 -0.167376 +v 0.066186 0.939898 -0.132192 +v 0.059568 0.959102 -0.097008 +v 0.046330 0.997512 -0.097008 +v 0.039712 1.016717 -0.132192 +v 0.046330 0.997512 -0.167376 +v 0.059568 0.959102 -0.167376 +v 0.174147 1.027372 -0.132192 +v 0.156733 1.037829 -0.097008 +v 0.121903 1.058744 -0.097008 +v 0.104488 1.069201 -0.132192 +v 0.121903 1.058744 -0.167376 +v 0.156733 1.037829 -0.167376 +vt 0.731665 0.480971 +vt 0.731287 0.399837 +vt 0.773974 0.456852 +vt 0.809859 0.432874 +vt 0.784134 0.359856 +vt 0.811535 0.384637 +vt 0.858464 0.769554 +vt 0.858280 0.712751 +vt 0.900772 0.745435 +vt 0.900614 0.696748 +vt 0.943064 0.769553 +vt 0.811535 0.481111 +vt 0.791527 0.537903 +vt 0.809860 0.432874 +vt 0.689378 0.456852 +vt 0.731138 0.243813 +vt 0.773634 0.383832 +vt 0.773974 0.219435 +vt 0.783624 0.218629 +vt 0.858208 0.603532 +vt 0.900552 0.603131 +vt 0.942880 0.712751 +vt 0.783624 0.647118 +vt 0.784134 0.505892 +vt 0.689038 0.383832 +vt 0.688903 0.243411 +vt 0.731287 0.085906 +vt 0.773500 0.243411 +vt 0.784134 0.077317 +vt 0.858280 0.493000 +vt 0.900614 0.508389 +vt 0.942808 0.603531 +vt 0.791526 0.757655 +vt 0.784134 0.788430 +vt 0.689038 0.101294 +vt 0.731665 0.000000 +vt 0.773974 0.023979 +vt 0.809860 0.000000 +vt 0.791527 0.108093 +vt 0.858464 0.432874 +vt 0.900772 0.456853 +vt 0.942880 0.492999 +vt 0.811535 0.817790 +vt 0.689378 0.023979 +vt 0.731205 0.936280 +vt 0.731205 0.903929 +vt 0.773507 0.906466 +vt 0.839114 0.023661 +vt 0.811535 0.047957 +vt 0.773507 0.936280 +vt 0.773507 0.959263 +vt 0.731205 0.937420 +vt 0.731205 0.957120 +vt 0.688903 0.936280 +vt 0.834288 0.799387 +vt 0.839113 0.842086 +vt 0.688903 0.935582 +vt 0.688903 0.906466 +vt 0.731357 0.903929 +vt 0.731162 0.777731 +vt 0.773679 0.882581 +vt 0.858208 0.137229 +vt 0.834288 0.066360 +vt 0.858404 0.432874 +vt 0.858208 0.344542 +vt 0.900566 0.335811 +vt 0.900734 0.411524 +vt 0.943000 0.432874 +vt 0.849139 0.711056 +vt 0.858208 0.728518 +vt 0.689079 0.882581 +vt 0.688903 0.769003 +vt 0.731162 0.610692 +vt 0.773504 0.769003 +vt 0.858208 0.287565 +vt 0.849139 0.154691 +vt 0.858208 0.227614 +vt 0.900566 0.235587 +vt 0.942804 0.344541 +vt 0.849139 0.594129 +vt 0.688903 0.618668 +vt 0.731357 0.480971 +vt 0.773504 0.618667 +vt 0.839113 0.404324 +vt 0.849139 0.271618 +vt 0.858404 0.136803 +vt 0.900734 0.157749 +vt 0.942804 0.227614 +vt 0.834288 0.503316 +vt 0.858208 0.578183 +vt 0.689079 0.501918 +vt 0.900510 0.136803 +vt 0.900510 0.104701 +vt 0.942811 0.134126 +vt 0.834288 0.362431 +vt 0.919199 0.016562 +vt 0.942081 0.016562 +vt 0.921490 0.058864 +vt 0.941103 0.058864 +vt 0.919199 0.101166 +vt 0.839114 0.461424 +vt 0.858208 0.134126 +vt 0.858208 0.105234 +vt 0.791526 0.327845 +vt 0.773974 0.646312 +vt 0.773634 0.101294 +vt 0.943064 0.432874 +vt 0.809859 0.865747 +vt 0.773507 0.935582 +vt 0.688903 0.959263 +vt 0.773679 0.501918 +vt 0.943000 0.136803 +vt 0.942811 0.105234 +vt 0.942081 0.101166 +f 1/1 7/2 2/3 +f 2/4 8/5 3/6 +f 3/7 9/8 4/9 +f 4/9 10/10 5/11 +f 5/12 11/13 6/14 +f 1/1 6/15 7/2 +f 7/2 13/16 8/17 +f 8/5 14/18 15/19 +f 9/8 15/20 10/10 +f 10/10 16/21 11/22 +f 11/13 17/23 12/24 +f 12/25 18/26 7/2 +f 13/16 19/27 14/28 +f 14/18 20/29 15/19 +f 15/20 21/30 16/21 +f 16/21 22/31 17/32 +f 17/23 23/33 24/34 +f 18/26 24/35 13/16 +f 19/27 25/36 26/37 +f 20/29 26/38 21/39 +f 21/30 27/40 28/41 +f 22/31 28/41 23/42 +f 23/33 29/43 24/34 +f 24/35 30/44 19/27 +f 25/45 31/46 32/47 +f 26/38 32/48 27/49 +f 27/50 33/51 28/52 +f 28/52 34/53 29/54 +f 29/43 35/55 36/56 +f 30/57 36/58 25/45 +f 31/59 37/60 32/61 +f 32/48 38/62 33/63 +f 33/64 39/65 40/66 +f 34/67 40/66 35/68 +f 35/55 41/69 42/70 +f 36/71 42/72 31/59 +f 37/60 43/73 38/74 +f 38/62 44/75 39/76 +f 39/65 45/77 40/66 +f 40/66 46/78 41/79 +f 41/69 47/80 42/70 +f 42/72 48/81 37/60 +f 43/73 49/82 44/83 +f 44/75 50/84 45/85 +f 45/77 51/86 46/78 +f 46/78 52/87 47/88 +f 47/80 53/89 48/90 +f 48/81 54/91 49/82 +f 49/92 1/93 50/94 +f 50/84 2/4 51/95 +f 51/96 3/97 52/98 +f 52/98 4/99 53/100 +f 53/89 5/12 54/101 +f 54/102 6/103 1/93 +f 7/2 8/17 2/3 +f 8/5 9/104 3/6 +f 9/8 10/10 4/9 +f 10/10 11/22 5/11 +f 11/13 12/24 6/14 +f 6/15 12/25 7/2 +f 13/16 14/28 8/17 +f 9/104 8/5 15/19 +f 15/20 16/21 10/10 +f 16/21 17/32 11/22 +f 17/23 18/105 12/24 +f 18/26 13/16 7/2 +f 19/27 20/106 14/28 +f 20/29 21/39 15/19 +f 21/30 22/31 16/21 +f 22/31 23/42 17/32 +f 18/105 17/23 24/34 +f 24/35 19/27 13/16 +f 20/106 19/27 26/37 +f 26/38 27/49 21/39 +f 22/31 21/30 28/41 +f 28/41 29/107 23/42 +f 29/43 30/108 24/34 +f 30/44 25/36 19/27 +f 26/109 25/45 32/47 +f 32/48 33/63 27/49 +f 33/51 34/53 28/52 +f 34/53 35/110 29/54 +f 30/108 29/43 36/56 +f 36/58 31/46 25/45 +f 37/60 38/74 32/61 +f 38/62 39/76 33/63 +f 34/67 33/64 40/66 +f 40/66 41/79 35/68 +f 36/56 35/55 42/70 +f 42/72 37/60 31/59 +f 43/73 44/83 38/74 +f 44/75 45/85 39/76 +f 45/77 46/78 40/66 +f 46/78 47/88 41/79 +f 47/80 48/90 42/70 +f 48/81 43/73 37/60 +f 49/82 50/111 44/83 +f 50/84 51/95 45/85 +f 51/86 52/87 46/78 +f 52/87 53/112 47/88 +f 53/89 54/101 48/90 +f 43/73 48/81 49/82 +f 1/93 2/113 50/94 +f 2/4 3/6 51/95 +f 3/97 4/99 52/98 +f 4/99 5/114 53/100 +f 5/12 6/14 54/101 +f 49/92 54/102 1/93 +o Axle +v -0.041604 1.129241 0.041604 +v -0.041604 1.129241 -0.041604 +v 0.041604 1.129241 -0.041604 +v 0.041604 1.129241 0.041604 +v -0.042071 0.805585 0.042071 +v -0.042071 0.805585 -0.042071 +v 0.042071 0.805585 -0.042071 +v 0.042071 0.805585 0.042071 +vt 0.919199 0.000562 +vt 0.919199 0.100604 +vt 0.858208 0.000000 +vt 0.960148 0.871281 +vt 0.960148 0.971324 +vt 0.899158 0.870720 +vt 0.960150 0.770115 +vt 0.960150 0.870158 +vt 0.899158 0.769554 +vt 0.797218 0.966352 +vt 0.797218 0.866309 +vt 0.858208 0.966913 +vt 0.858208 0.101166 +vt 0.899158 0.971886 +vt 0.858208 0.865747 +f 55/115 56/116 59/117 +f 56/118 57/119 60/120 +f 57/121 58/122 61/123 +f 58/124 55/125 62/126 +f 56/116 60/127 59/117 +f 57/119 61/128 60/120 +f 58/122 62/120 61/123 +f 55/125 59/129 62/126 +o EnergyBlaster +v -0.000000 1.242149 -0.083616 +v -0.000000 1.334889 0.187788 +v 0.070871 1.216354 -0.083616 +v 0.130483 1.287397 0.187788 +v 0.108581 1.151039 -0.083616 +v 0.199912 1.167143 0.187788 +v 0.095484 1.076765 -0.083616 +v 0.175800 1.030395 0.187788 +v 0.037710 1.028286 -0.083616 +v 0.069429 0.941139 0.187788 +v -0.037710 1.028286 -0.083616 +v -0.069429 0.941139 0.187788 +v -0.095485 1.076765 -0.083616 +v -0.175800 1.030395 0.187788 +v -0.108581 1.151039 -0.083616 +v -0.199912 1.167143 0.187788 +v -0.070871 1.216354 -0.083616 +v -0.130483 1.287397 0.187788 +v -0.000000 1.220784 -0.282212 +v 0.057138 1.199988 -0.282212 +v 0.087541 1.147329 -0.282212 +v 0.076982 1.087447 -0.282212 +v 0.030402 1.048363 -0.282212 +v -0.030403 1.048363 -0.282212 +v -0.076982 1.087447 -0.282212 +v -0.087541 1.147329 -0.282212 +v -0.057138 1.199988 -0.282212 +v -0.000000 1.255622 0.290641 +v 0.079531 1.226675 0.290641 +v 0.121849 1.153378 0.290641 +v 0.107152 1.070029 0.290641 +v 0.042318 1.015626 0.290641 +v -0.042318 1.015626 0.290641 +v -0.107152 1.070029 0.290641 +v -0.121849 1.153378 0.290641 +v -0.079531 1.226675 0.290641 +vt 0.238688 0.240310 +vt 0.564682 0.240218 +vt 0.238769 0.325540 +vt 0.564832 0.397139 +vt 0.238974 0.370933 +vt 0.238776 0.906257 +vt 0.565090 0.903444 +vt 0.238776 0.923752 +vt 0.238828 0.577331 +vt 0.565027 0.480713 +vt 0.238722 0.646749 +vt 0.564832 0.608521 +vt 0.238722 0.737427 +vt 0.564832 0.775471 +vt 0.238828 0.806935 +vt 0.238776 0.947556 +vt 0.565090 0.935654 +vt 0.238776 0.965050 +vt 0.564832 0.083375 +vt 0.688582 0.240277 +vt 0.238769 0.155122 +vt 0.238974 0.109837 +vt 0.565209 0.000000 +vt 0.000065 0.171658 +vt 0.858208 0.874805 +vt 0.863147 0.806107 +vt 0.863147 0.943504 +vt 0.000231 0.135148 +vt 0.000000 0.950298 +vt 0.000000 0.728669 +vt 0.000000 0.655562 +vt 0.000085 0.599595 +vt 0.000000 0.906905 +vt 0.000065 0.309053 +vt 0.000000 0.240338 +vt 0.987079 0.412135 +vt 1.000000 0.232424 +vt 1.000000 0.334183 +vt 0.688673 0.144680 +vt 0.565090 0.967863 +vt 0.688752 0.965459 +vt 0.565027 0.903444 +vt 0.688770 0.820941 +vt 0.688651 0.742939 +vt 0.688651 0.641181 +vt 0.688752 0.925481 +vt 0.565209 0.480713 +vt 0.688903 0.386862 +vt 0.688673 0.335923 +vt 0.875654 0.769554 +vt 0.889875 0.782248 +vt 0.899158 0.838252 +vt 0.899158 0.911359 +vt 0.889875 0.967362 +vt 0.875654 0.980057 +vt 0.000000 0.964402 +vt 0.000085 0.784708 +vt 0.000000 0.921010 +vt 0.000231 0.345650 +vt 0.987079 0.154473 +vt 0.943000 0.283304 +vt 0.949875 0.187682 +vt 0.967283 0.136803 +vt 0.949875 0.378926 +vt 0.967283 0.429805 +vt 0.688903 0.093862 +vt 0.688752 0.945827 +vt 0.688770 0.563281 +vt 0.688752 0.905849 +f 63/130 64/131 65/132 +f 65/132 66/133 67/134 +f 67/135 68/136 69/137 +f 69/138 70/139 71/140 +f 71/140 72/141 73/142 +f 73/142 74/143 75/144 +f 75/145 76/146 77/147 +f 64/131 80/148 90/149 +f 79/150 80/148 63/130 +f 77/151 78/152 79/150 +f 79/150 63/130 89/153 +f 81/154 82/155 89/156 +f 77/151 79/150 88/157 +f 75/145 77/147 87/158 +f 73/142 75/144 86/159 +f 71/140 73/142 85/160 +f 69/138 71/140 84/161 +f 67/135 69/137 83/162 +f 65/132 67/134 82/163 +f 63/130 65/132 81/164 +f 93/165 95/166 94/167 +f 80/148 78/152 98/168 +f 78/169 76/146 97/170 +f 76/171 74/143 96/172 +f 74/143 72/141 95/173 +f 72/141 70/139 94/174 +f 70/146 68/136 93/175 +f 68/176 66/133 92/177 +f 66/133 64/131 91/178 +f 64/131 66/133 65/132 +f 66/133 68/176 67/134 +f 68/136 70/146 69/137 +f 70/139 72/141 71/140 +f 72/141 74/143 73/142 +f 74/143 76/171 75/144 +f 76/146 78/169 77/147 +f 80/148 98/168 90/149 +f 80/148 64/131 63/130 +f 78/152 80/148 79/150 +f 63/130 81/164 89/153 +f 83/179 84/180 85/181 +f 83/179 85/181 86/182 +f 82/155 83/179 89/156 +f 83/179 86/182 89/156 +f 86/182 87/183 89/156 +f 87/183 88/184 89/156 +f 79/150 89/153 88/157 +f 77/147 88/185 87/158 +f 75/144 87/186 86/159 +f 73/142 86/159 85/160 +f 71/140 85/160 84/161 +f 69/137 84/187 83/162 +f 67/134 83/188 82/163 +f 65/132 82/163 81/164 +f 93/165 96/189 95/166 +f 90/190 98/191 97/192 +f 91/193 90/190 97/192 +f 91/193 97/192 96/189 +f 92/194 91/193 96/189 +f 93/165 92/194 96/189 +f 78/152 97/195 98/168 +f 76/146 96/196 97/170 +f 74/143 95/173 96/172 +f 72/141 94/174 95/173 +f 70/139 93/197 94/174 +f 68/136 92/198 93/175 +f 66/133 91/178 92/177 +f 64/131 90/149 91/178 +o Base +v -0.146304 0.140310 0.146304 +v -0.146304 0.140310 -0.146304 +v 0.146304 0.140310 -0.146304 +v 0.146304 0.140310 0.146304 +v -0.146304 0.140310 0.146304 +v -0.146304 0.140310 -0.146304 +v 0.146304 0.140310 -0.146304 +v 0.146304 0.140310 0.146304 +v -0.089808 0.814962 0.089808 +v -0.089808 0.814962 -0.089808 +v 0.089808 0.814962 -0.089808 +v 0.089808 0.814962 0.089808 +v -0.370646 0.059008 0.370646 +v -0.370646 0.059008 -0.370646 +v 0.370646 0.059008 -0.370646 +v 0.370646 0.059008 0.370646 +v -0.370646 0.223467 0.370646 +v -0.370646 0.223467 -0.370646 +v 0.370646 0.223467 -0.370646 +v 0.370646 0.223467 0.370646 +vt 0.790255 0.628573 +vt 0.790255 0.687631 +vt 0.731198 0.628573 +vt 0.000000 0.173843 +vt 0.000000 0.114785 +vt 1.000000 0.192419 +vt 0.000000 0.270052 +vt 0.000000 0.210995 +vt 1.000000 0.288628 +vt 0.000000 0.366262 +vt 0.000000 0.307204 +vt 1.000000 0.384837 +vt 0.000000 0.077633 +vt 0.000000 0.018576 +vt 1.000000 0.096209 +vt 0.000000 0.000000 +vt 0.487472 0.872299 +vt 0.243736 0.872299 +vt 0.487472 0.628573 +vt 0.731198 0.872309 +vt 0.487472 0.384837 +vt 0.000000 0.872309 +vt 0.000000 0.628573 +vt 0.243726 0.872309 +vt 0.243736 0.628573 +vt 0.000000 0.384837 +vt 0.243736 0.384837 +vt 0.731198 0.687631 +vt 1.000000 0.000000 +vt 0.487472 0.872309 +vt 0.731198 0.384837 +vt 0.243726 0.628573 +f 109/199 108/200 110/201 +f 107/202 108/203 103/204 +f 108/205 109/206 104/207 +f 109/208 110/209 105/210 +f 110/211 107/212 106/213 +f 99/214 102/214 103/214 +f 102/214 101/214 106/214 +f 101/214 100/214 105/214 +f 100/214 99/214 104/214 +f 115/215 116/216 111/217 +f 116/201 117/218 112/217 +f 117/217 118/219 113/201 +f 118/220 115/221 114/222 +f 111/217 112/223 114/219 +f 118/224 117/225 115/221 +f 108/200 107/226 110/201 +f 108/203 104/213 103/204 +f 109/206 105/204 104/207 +f 110/209 106/207 105/210 +f 107/212 103/227 106/213 +f 102/214 106/214 103/214 +f 101/214 105/214 106/214 +f 100/214 104/214 105/214 +f 99/214 103/214 104/214 +f 116/216 112/223 111/217 +f 117/218 113/228 112/217 +f 118/219 114/229 113/201 +f 115/221 111/230 114/222 +f 112/223 113/225 114/219 +f 117/225 116/223 115/221 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.mtl new file mode 100644 index 00000000..0345f655 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.mtl @@ -0,0 +1,11 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:model/rocket_t1 + +newmtl None_rocketT1.png.001 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:model/rocket_t1 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.obj new file mode 100644 index 00000000..02c93203 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/rocket_t1.obj @@ -0,0 +1,930 @@ +# Blender v2.76 (sub 0) OBJ File: 'rocket.blend' +# www.blender.org +mtllib rocket_t1.mtl +o Rocket +v -0.867203 4.457249 0.867203 +v -0.867203 4.557249 0.867203 +v -0.867203 4.457249 -0.867203 +v -0.867203 4.557249 -0.867203 +v 0.867203 4.457249 0.867203 +v 0.867203 4.557249 0.867203 +v 0.867203 4.457249 -0.867203 +v 0.867203 4.557249 -0.867203 +v -0.700000 -0.025000 0.700000 +v -0.700000 0.075000 0.700000 +v -0.700000 -0.025000 -0.700000 +v -0.700000 0.075000 -0.700000 +v 0.700000 -0.025000 0.700000 +v 0.700000 0.075000 0.700000 +v 0.700000 -0.025000 -0.700000 +v 0.700000 0.075000 -0.700000 +v -0.600000 0.075000 0.600000 +v -0.600000 0.175000 0.600000 +v -0.600000 0.075000 -0.600000 +v -0.600000 0.175000 -0.600000 +v 0.600000 0.075000 0.600000 +v 0.600000 0.175000 0.600000 +v 0.600000 0.075000 -0.600000 +v 0.600000 0.175000 -0.600000 +v -0.100000 5.956773 0.100000 +v -0.100000 7.756774 0.100000 +v -0.100000 5.956773 -0.100000 +v -0.100000 7.756774 -0.100000 +v 0.100000 5.956773 0.100000 +v 0.100000 7.756774 0.100000 +v 0.100000 5.956773 -0.100000 +v 0.100000 7.756774 -0.100000 +v -0.500000 0.175000 0.500000 +v -0.500000 0.375000 0.500000 +v -0.500000 0.175000 -0.500000 +v -0.500000 0.375000 -0.500000 +v 0.500000 0.175000 0.500000 +v 0.500000 0.375000 0.500000 +v 0.500000 0.175000 -0.500000 +v 0.500000 0.375000 -0.500000 +v -0.900000 0.375000 0.900000 +v -0.900000 0.475000 0.900000 +v -0.900000 0.375000 -0.900000 +v -0.900000 0.475000 -0.900000 +v 0.900000 0.375000 0.900000 +v 0.900000 0.475000 0.900000 +v 0.900000 0.375000 -0.900000 +v 0.900000 0.475000 -0.900000 +v -0.802256 0.453440 0.897637 +v -0.802256 4.553441 0.897637 +v -0.802256 0.453440 0.797637 +v -0.802256 4.553441 0.797637 +v 0.897744 0.453440 0.897637 +v 0.897744 4.553441 0.897637 +v 0.897744 0.453440 0.797637 +v 0.897744 4.553441 0.797637 +v 0.798310 0.471661 0.800000 +v 0.798310 4.571662 0.800000 +v 0.798310 0.471661 -0.800000 +v 0.798310 4.571662 -0.800000 +v 0.898310 0.471661 0.800000 +v 0.898310 4.571662 0.800000 +v 0.898310 0.471661 -0.800000 +v 0.898310 4.571662 -0.800000 +v -0.898721 0.478043 0.895898 +v -0.898721 4.578044 0.895898 +v -0.898721 0.478044 -0.804103 +v -0.898721 4.578044 -0.804103 +v -0.798721 0.478043 0.895898 +v -0.798721 4.578044 0.895898 +v -0.798721 0.478044 -0.804103 +v -0.798721 4.578044 -0.804103 +v -0.898111 0.475278 -0.796410 +v -0.898111 4.575279 -0.796410 +v -0.898111 0.475278 -0.896410 +v -0.898111 4.575279 -0.896410 +v -0.398111 0.475278 -0.796410 +v -0.398111 4.575279 -0.796410 +v -0.398111 0.475278 -0.896410 +v -0.398111 4.575279 -0.896410 +v -0.400000 2.874092 -0.796410 +v -0.400000 4.574092 -0.796410 +v -0.400000 2.874092 -0.896410 +v -0.400000 4.574092 -0.896410 +v 0.400000 2.874092 -0.796410 +v 0.400000 4.574092 -0.796410 +v 0.400000 2.874092 -0.896410 +v 0.400000 4.574092 -0.896410 +v -0.400000 0.473625 -0.796410 +v -0.400000 2.173626 -0.796410 +v -0.400000 0.473625 -0.896410 +v -0.400000 2.173626 -0.896410 +v 0.400000 0.473625 -0.796410 +v 0.400000 2.173626 -0.796410 +v 0.400000 0.473625 -0.896410 +v 0.400000 2.173626 -0.896410 +v -0.200000 5.759671 0.200000 +v -0.200000 5.959671 0.200000 +v -0.200000 5.759671 -0.200000 +v -0.200000 5.959671 -0.200000 +v 0.200000 5.759671 0.200000 +v 0.200000 5.959671 0.200000 +v 0.200000 5.759671 -0.200000 +v 0.200000 5.959671 -0.200000 +v -0.800000 4.574526 0.800000 +v -0.800000 4.774527 0.800000 +v -0.800000 4.574527 -0.800000 +v -0.800000 4.774527 -0.800000 +v 0.800000 4.574526 0.800000 +v 0.800000 4.774527 0.800000 +v 0.800000 4.574527 -0.800000 +v 0.800000 4.774527 -0.800000 +v -0.700000 4.773145 0.700000 +v -0.700000 4.973145 0.700000 +v -0.700000 4.773145 -0.700000 +v -0.700000 4.973145 -0.700000 +v 0.700000 4.773145 0.700000 +v 0.700000 4.973145 0.700000 +v 0.700000 4.773145 -0.700000 +v 0.700000 4.973145 -0.700000 +v -0.600000 4.973635 0.600000 +v -0.600000 5.173635 0.600000 +v -0.600000 4.973635 -0.600000 +v -0.600000 5.173635 -0.600000 +v 0.600000 4.973635 0.600000 +v 0.600000 5.173635 0.600000 +v 0.600000 4.973635 -0.600000 +v 0.600000 5.173635 -0.600000 +v -0.500000 5.174124 0.500000 +v -0.500000 5.374124 0.500000 +v -0.500000 5.174124 -0.500000 +v -0.500000 5.374124 -0.500000 +v 0.500000 5.174124 0.500000 +v 0.500000 5.374124 0.500000 +v 0.500000 5.174124 -0.500000 +v 0.500000 5.374124 -0.500000 +v -0.400000 5.370128 0.400000 +v -0.400000 5.570128 0.400000 +v -0.400000 5.370129 -0.400000 +v -0.400000 5.570129 -0.400000 +v 0.400000 5.370128 0.400000 +v 0.400000 5.570128 0.400000 +v 0.400000 5.370129 -0.400000 +v 0.400000 5.570129 -0.400000 +v -0.300000 5.565318 0.300000 +v -0.300000 5.765317 0.300000 +v -0.300000 5.565318 -0.300000 +v -0.300000 5.765317 -0.300000 +v 0.300000 5.565318 0.300000 +v 0.300000 5.765317 0.300000 +v 0.300000 5.565318 -0.300000 +v 0.300000 5.765317 -0.300000 +v -0.100000 0.007384 -1.694776 +v -0.100000 1.507384 -1.694776 +v -0.100000 0.007384 -1.794776 +v -0.100000 1.507384 -1.794776 +v 0.100000 0.007384 -1.694776 +v 0.100000 1.507384 -1.694776 +v 0.100000 0.007384 -1.794776 +v 0.100000 1.507384 -1.794776 +v -0.100000 0.879847 -0.894345 +v -0.100000 1.679847 -0.894345 +v -0.100000 0.879847 -1.094345 +v -0.100000 1.679847 -1.094345 +v 0.100000 0.879847 -0.894345 +v 0.100000 1.679847 -0.894345 +v 0.100000 0.879847 -1.094345 +v 0.100000 1.679847 -1.094345 +v -0.100000 0.779847 -1.094345 +v -0.100000 1.579847 -1.094345 +v -0.100000 0.779847 -1.294345 +v -0.100000 1.579847 -1.294345 +v 0.100000 0.779847 -1.094345 +v 0.100000 1.579847 -1.094345 +v 0.100000 0.779847 -1.294345 +v 0.100000 1.579847 -1.294345 +v -0.100000 0.579847 -1.294345 +v -0.100000 1.379847 -1.294345 +v -0.100000 0.579847 -1.494345 +v -0.100000 1.379847 -1.494345 +v 0.100000 0.579847 -1.294345 +v 0.100000 1.379847 -1.294345 +v 0.100000 0.579847 -1.494345 +v 0.100000 1.379847 -1.494345 +v -0.100000 0.179847 -1.494345 +v -0.100000 0.979847 -1.494345 +v -0.100000 0.179847 -1.694345 +v -0.100000 0.979847 -1.694345 +v 0.100000 0.179847 -1.494345 +v 0.100000 0.979847 -1.494345 +v 0.100000 0.179847 -1.694345 +v 0.100000 0.979847 -1.694345 +v -1.694776 0.007383 0.100000 +v -1.694776 1.507384 0.100000 +v -1.794776 0.007383 0.100000 +v -1.794776 1.507384 0.100000 +v -1.694776 0.007383 -0.100000 +v -1.694776 1.507384 -0.100000 +v -1.794776 0.007383 -0.100000 +v -1.794776 1.507384 -0.100000 +v -1.094345 0.779847 0.100000 +v -1.094345 1.579847 0.100000 +v -1.294345 0.779847 0.100000 +v -1.294345 1.579847 0.100000 +v -1.094345 0.779847 -0.100000 +v -1.094345 1.579847 -0.100000 +v -1.294345 0.779847 -0.100000 +v -1.294345 1.579847 -0.100000 +v -1.294345 0.579847 0.100000 +v -1.294345 1.379847 0.100000 +v -1.494345 0.579847 0.100000 +v -1.494345 1.379847 0.100000 +v -1.294345 0.579847 -0.100000 +v -1.294345 1.379847 -0.100000 +v -1.494345 0.579847 -0.100000 +v -1.494345 1.379847 -0.100000 +v -1.494345 0.179847 0.100000 +v -1.494345 0.979847 0.100000 +v -1.694345 0.179847 0.100000 +v -1.694345 0.979847 0.100000 +v -1.494345 0.179847 -0.100000 +v -1.494345 0.979847 -0.100000 +v -1.694345 0.179847 -0.100000 +v -1.694345 0.979847 -0.100000 +v -0.894345 0.879847 0.100000 +v -0.894345 1.679847 0.100000 +v -1.094345 0.879847 0.100000 +v -1.094345 1.679847 0.100000 +v -0.894345 0.879847 -0.100000 +v -0.894345 1.679847 -0.100000 +v -1.094345 0.879847 -0.100000 +v -1.094345 1.679847 -0.100000 +v 0.100000 0.007383 1.694776 +v 0.100000 1.507383 1.694776 +v 0.100000 0.007383 1.794776 +v 0.100000 1.507383 1.794776 +v -0.100000 0.007383 1.694776 +v -0.100000 1.507383 1.694776 +v -0.100000 0.007383 1.794776 +v -0.100000 1.507383 1.794776 +v 0.100000 0.779847 1.094345 +v 0.100000 1.579847 1.094345 +v 0.100000 0.779846 1.294345 +v 0.100000 1.579847 1.294345 +v -0.100000 0.779847 1.094345 +v -0.100000 1.579847 1.094345 +v -0.100000 0.779846 1.294345 +v -0.100000 1.579847 1.294345 +v 0.100000 0.579846 1.294345 +v 0.100000 1.379847 1.294345 +v 0.100000 0.579846 1.494345 +v 0.100000 1.379847 1.494345 +v -0.100000 0.579846 1.294345 +v -0.100000 1.379847 1.294345 +v -0.100000 0.579846 1.494345 +v -0.100000 1.379847 1.494345 +v 0.100000 0.179846 1.494345 +v 0.100000 0.979847 1.494345 +v 0.100000 0.179846 1.694345 +v 0.100000 0.979847 1.694345 +v -0.100000 0.179846 1.494345 +v -0.100000 0.979847 1.494345 +v -0.100000 0.179846 1.694345 +v -0.100000 0.979847 1.694345 +v 0.100000 0.879847 0.894345 +v 0.100000 1.679847 0.894345 +v 0.100000 0.879847 1.094345 +v 0.100000 1.679847 1.094345 +v -0.100000 0.879847 0.894345 +v -0.100000 1.679847 0.894345 +v -0.100000 0.879847 1.094345 +v -0.100000 1.679847 1.094345 +v 1.694776 0.007383 -0.100000 +v 1.694776 1.507384 -0.100000 +v 1.794776 0.007383 -0.100000 +v 1.794776 1.507384 -0.100000 +v 1.694776 0.007383 0.100000 +v 1.694776 1.507384 0.100000 +v 1.794776 0.007383 0.100000 +v 1.794776 1.507384 0.100000 +v 1.094345 0.779847 -0.100000 +v 1.094345 1.579847 -0.100000 +v 1.294345 0.779847 -0.100000 +v 1.294345 1.579847 -0.100000 +v 1.094345 0.779847 0.100000 +v 1.094345 1.579847 0.100000 +v 1.294345 0.779847 0.100000 +v 1.294345 1.579847 0.100000 +v 1.294345 0.579847 -0.100000 +v 1.294345 1.379847 -0.100000 +v 1.494345 0.579847 -0.100000 +v 1.494345 1.379847 -0.100000 +v 1.294345 0.579847 0.100000 +v 1.294345 1.379847 0.100000 +v 1.494345 0.579847 0.100000 +v 1.494345 1.379847 0.100000 +v 1.494345 0.179847 -0.100000 +v 1.494345 0.979847 -0.100000 +v 1.694345 0.179847 -0.100000 +v 1.694345 0.979847 -0.100000 +v 1.494345 0.179847 0.100000 +v 1.494345 0.979847 0.100000 +v 1.694345 0.179847 0.100000 +v 1.694345 0.979847 0.100000 +v 0.894345 0.879847 -0.100000 +v 0.894345 1.679847 -0.100000 +v 1.094345 0.879847 -0.100000 +v 1.094345 1.679847 -0.100000 +v 0.894345 0.879847 0.100000 +v 0.894345 1.679847 0.100000 +v 1.094345 0.879847 0.100000 +v 1.094345 1.679847 0.100000 +v 0.395899 0.475278 -0.796410 +v 0.395899 4.575279 -0.796410 +v 0.395899 0.475278 -0.896410 +v 0.395899 4.575279 -0.896410 +v 0.895899 0.475278 -0.796410 +v 0.895899 4.575279 -0.796410 +v 0.895899 0.475278 -0.896410 +v 0.895899 4.575279 -0.896410 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.245889 0.937792 +vt 0.245889 0.995739 +vt 0.238606 0.995739 +vt 0.000000 0.000000 +vt 0.110552 0.944961 +vt 0.110552 0.999682 +vt 0.055831 0.999682 +vt 0.163310 0.946323 +vt 0.163310 0.999358 +vt 0.110275 0.999358 +vt 0.110441 0.944690 +vt 0.110441 0.998396 +vt 0.056735 0.998396 +vt 0.056735 0.944690 +vt 0.984200 0.429486 +vt 0.984200 0.360492 +vt 0.977420 0.360492 +vt 0.976892 0.430600 +vt 0.983500 0.430600 +vt 0.983500 0.437208 +vt 0.605835 0.707529 +vt 0.605835 0.714124 +vt 0.535233 0.714124 +vt 0.108793 0.946228 +vt 0.108793 0.999548 +vt 0.055473 0.999548 +vt 0.595117 0.784586 +vt 0.595117 0.932285 +vt 0.540032 0.932285 +vt 0.597104 0.783240 +vt 0.597104 0.936269 +vt 0.535578 0.936269 +vt 0.608592 0.561765 +vt 0.608592 0.711892 +vt 0.603734 0.711892 +vt 0.535220 0.709899 +vt 0.535220 0.555184 +vt 0.601026 0.555184 +vt 0.606045 0.707644 +vt 0.606045 0.714665 +vt 0.534092 0.714665 +vt 0.535578 0.783240 +vt 0.539294 0.550932 +vt 0.539294 0.390957 +vt 0.605626 0.390957 +vt 0.535242 0.706958 +vt 0.535242 0.555769 +vt 0.601779 0.555769 +vt 0.429636 0.835789 +vt 0.429636 0.995989 +vt 0.426017 0.995989 +vt 0.406315 0.995989 +vt 0.406315 0.835789 +vt 0.425623 0.835789 +vt 0.429789 0.835789 +vt 0.429789 0.995989 +vt 0.402443 0.995989 +vt 0.429639 0.996133 +vt 0.429639 0.999967 +vt 0.406275 0.999967 +vt 0.606369 0.707656 +vt 0.606369 0.714525 +vt 0.534491 0.714525 +vt 0.332293 0.925686 +vt 0.332293 0.859480 +vt 0.370850 0.859480 +vt 0.937689 0.695620 +vt 0.937689 0.702715 +vt 0.874947 0.702715 +vt 0.874008 0.704156 +vt 0.874008 0.765363 +vt 0.812800 0.765363 +vt 0.812800 0.704156 +vt 0.874947 0.695620 +vt 0.238606 0.937792 +vt 0.055831 0.944961 +vt 0.110275 0.946323 +vt 0.977420 0.429486 +vt 0.976892 0.437208 +vt 0.535233 0.707529 +vt 0.055473 0.946228 +vt 0.540032 0.784586 +vt 0.603734 0.561765 +vt 0.601026 0.709899 +vt 0.534092 0.707644 +vt 0.605626 0.550932 +vt 0.601779 0.706958 +vt 0.426017 0.835789 +vt 0.425623 0.995989 +vt 0.402443 0.835789 +vt 0.406275 0.996133 +vt 0.534491 0.707656 +vt 0.370850 0.925686 +vt 0.332199 0.996143 +vt 0.332199 0.930074 +vt 0.371084 0.930074 +vt 0.406315 0.831739 +vt 0.406315 0.671952 +vt 0.425623 0.671952 +vt 0.405676 0.671952 +vt 0.405676 0.831739 +vt 0.402679 0.831739 +vt 0.448953 0.671952 +vt 0.448953 0.831739 +vt 0.429785 0.831739 +vt 0.429789 0.671952 +vt 0.402443 0.831739 +vt 0.429639 0.831882 +vt 0.429639 0.835706 +vt 0.406275 0.835706 +vt 0.371084 0.996143 +vt 0.425623 0.831739 +vt 0.402679 0.671952 +vt 0.402443 0.671952 +vt 0.406275 0.831882 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 -0.000000 +usemtl None +f 4/1/1 3/2/1 1/3/1 +f 8/1/2 7/2/2 3/3/2 +f 6/1/3 5/2/3 7/3/3 +f 2/1/4 1/2/4 5/3/4 +f 3/4/5 7/5/5 5/6/5 +f 6/7/6 8/1/6 4/2/6 +f 12/8/1 11/9/1 9/10/1 +f 16/8/2 15/9/2 11/10/2 +f 14/8/3 13/9/3 15/10/3 +f 10/8/4 9/9/4 13/10/4 +f 11/11/5 15/12/5 13/13/5 +f 16/14/6 12/15/6 10/16/6 +f 20/8/1 19/9/1 17/10/1 +f 24/8/2 23/9/2 19/10/2 +f 22/8/3 21/9/3 23/10/3 +f 18/8/4 17/9/4 21/10/4 +f 19/1/5 23/2/5 21/3/5 +f 22/17/6 24/14/6 20/15/6 +f 28/18/1 27/19/1 25/20/1 +f 32/18/2 31/19/2 27/20/2 +f 30/18/3 29/19/3 31/20/3 +f 26/18/4 25/19/4 29/20/4 +f 27/1/5 31/2/5 29/3/5 +f 30/21/6 32/22/6 28/23/6 +f 36/8/1 35/9/1 33/10/1 +f 40/8/2 39/9/2 35/10/2 +f 38/8/3 37/9/3 39/10/3 +f 34/8/4 33/9/4 37/10/4 +f 35/1/5 39/2/5 37/3/5 +f 40/1/6 36/2/6 34/3/6 +f 44/24/1 43/25/1 41/26/1 +f 48/24/2 47/25/2 43/26/2 +f 46/24/3 45/25/3 47/26/3 +f 42/24/4 41/25/4 45/26/4 +f 43/27/5 47/28/5 45/29/5 +f 48/30/6 44/31/6 42/32/6 +f 52/1/1 51/2/1 49/3/1 +f 56/33/2 55/34/2 51/35/2 +f 54/36/3 53/37/3 55/38/3 +f 50/39/4 49/40/4 53/41/4 +f 51/1/5 55/2/5 53/3/5 +f 56/42/6 52/43/6 50/44/6 +f 58/45/1 60/33/1 59/34/1 +f 64/1/2 63/2/2 59/3/2 +f 62/46/3 61/47/3 63/48/3 +f 58/1/4 57/2/4 61/3/4 +f 59/1/5 63/2/5 61/3/5 +f 64/42/6 60/43/6 58/44/6 +f 68/49/1 67/50/1 65/51/1 +f 72/1/2 71/2/2 67/3/2 +f 70/33/3 69/34/3 71/35/3 +f 66/36/4 65/37/4 69/38/4 +f 67/1/5 71/2/5 69/3/5 +f 72/42/6 68/43/6 66/44/6 +f 76/52/1 75/53/1 73/54/1 +f 80/55/2 79/56/2 75/57/2 +f 78/33/3 77/34/3 79/35/3 +f 74/33/4 73/34/4 77/35/4 +f 75/58/5 79/59/5 77/60/5 +f 80/61/6 76/62/6 74/63/6 +f 84/1/1 83/2/1 81/3/1 +f 86/1/3 85/2/3 87/3/3 +f 82/33/4 81/34/4 85/35/4 +f 83/33/5 87/34/5 85/35/5 +f 88/64/6 84/65/6 82/66/6 +f 92/1/1 91/2/1 89/3/1 +f 96/67/2 95/68/2 91/69/2 +f 94/1/3 93/2/3 95/3/3 +f 90/33/4 89/34/4 93/35/4 +f 91/1/5 95/2/5 93/3/5 +f 96/33/6 92/34/6 90/35/6 +f 100/70/1 99/71/1 97/72/1 +f 104/70/2 103/71/2 99/72/2 +f 102/70/3 101/71/3 103/72/3 +f 98/70/4 97/71/4 101/72/4 +f 99/1/5 103/2/5 101/3/5 +f 104/73/6 100/74/6 98/75/6 +f 108/70/1 107/71/1 105/72/1 +f 112/70/2 111/71/2 107/72/2 +f 110/70/3 109/71/3 111/72/3 +f 106/70/4 105/71/4 109/72/4 +f 107/1/5 111/2/5 109/3/5 +f 110/76/6 112/73/6 108/74/6 +f 116/70/1 115/71/1 113/72/1 +f 120/70/2 119/71/2 115/72/2 +f 118/70/3 117/71/3 119/72/3 +f 114/70/4 113/71/4 117/72/4 +f 115/1/5 119/2/5 117/3/5 +f 120/73/6 116/74/6 114/75/6 +f 124/70/1 123/71/1 121/72/1 +f 128/70/2 127/71/2 123/72/2 +f 126/70/3 125/71/3 127/72/3 +f 122/70/4 121/71/4 125/72/4 +f 123/1/5 127/2/5 125/3/5 +f 126/76/6 128/73/6 124/74/6 +f 132/70/1 131/71/1 129/72/1 +f 136/70/2 135/71/2 131/72/2 +f 134/70/3 133/71/3 135/72/3 +f 130/70/4 129/71/4 133/72/4 +f 131/1/5 135/2/5 133/3/5 +f 136/73/6 132/74/6 130/75/6 +f 138/77/1 140/70/1 139/71/1 +f 144/70/2 143/71/2 139/72/2 +f 142/70/3 141/71/3 143/72/3 +f 138/70/4 137/71/4 141/72/4 +f 139/1/5 143/2/5 141/3/5 +f 144/73/6 140/74/6 138/75/6 +f 148/70/1 147/71/1 145/72/1 +f 152/70/2 151/71/2 147/72/2 +f 150/70/3 149/71/3 151/72/3 +f 146/70/4 145/71/4 149/72/4 +f 147/1/5 151/2/5 149/3/5 +f 150/76/6 152/73/6 148/74/6 +f 156/4/1 155/5/1 153/6/1 +f 160/4/2 159/5/2 155/6/2 +f 158/4/3 157/5/3 159/6/3 +f 154/4/4 153/5/4 157/6/4 +f 155/4/5 159/5/5 157/6/5 +f 160/4/6 156/5/6 154/6/6 +f 164/4/1 163/5/1 161/6/1 +f 168/4/2 167/5/2 163/6/2 +f 166/4/3 165/5/3 167/6/3 +f 162/1/4 161/2/4 165/3/4 +f 163/4/5 167/5/5 165/6/5 +f 166/78/6 168/4/6 164/5/6 +f 170/78/1 172/4/1 171/5/1 +f 176/4/2 175/5/2 171/6/2 +f 174/4/3 173/5/3 175/6/3 +f 170/4/4 169/5/4 173/6/4 +f 171/4/5 175/5/5 173/6/5 +f 174/78/6 176/4/6 172/5/6 +f 178/78/1 180/4/1 179/5/1 +f 184/4/2 183/5/2 179/6/2 +f 182/4/3 181/5/3 183/6/3 +f 178/4/4 177/5/4 181/6/4 +f 179/4/5 183/5/5 181/6/5 +f 182/78/6 184/4/6 180/5/6 +f 188/4/1 187/5/1 185/6/1 +f 192/4/2 191/5/2 187/6/2 +f 190/4/3 189/5/3 191/6/3 +f 186/4/4 185/5/4 189/6/4 +f 187/4/5 191/5/5 189/6/5 +f 190/78/6 192/4/6 188/5/6 +f 196/4/4 195/5/4 193/6/4 +f 200/4/1 199/5/1 195/6/1 +f 198/4/2 197/5/2 199/6/2 +f 194/4/3 193/5/3 197/6/3 +f 195/4/5 199/5/5 197/6/5 +f 200/4/6 196/5/6 194/6/6 +f 204/4/4 203/5/4 201/6/4 +f 204/78/1 208/4/1 207/5/1 +f 206/4/2 205/5/2 207/6/2 +f 202/4/3 201/5/3 205/6/3 +f 203/4/5 207/5/5 205/6/5 +f 208/4/6 204/5/6 202/6/6 +f 212/4/4 211/5/4 209/6/4 +f 212/78/1 216/4/1 215/5/1 +f 214/4/2 213/5/2 215/6/2 +f 210/4/3 209/5/3 213/6/3 +f 211/4/5 215/5/5 213/6/5 +f 216/4/6 212/5/6 210/6/6 +f 220/4/4 219/5/4 217/6/4 +f 224/4/1 223/5/1 219/6/1 +f 222/4/2 221/5/2 223/6/2 +f 218/4/3 217/5/3 221/6/3 +f 219/4/5 223/5/5 221/6/5 +f 224/4/6 220/5/6 218/6/6 +f 228/4/4 227/5/4 225/6/4 +f 232/4/1 231/5/1 227/6/1 +f 230/4/2 229/5/2 231/6/2 +f 226/1/3 225/2/3 229/3/3 +f 227/4/5 231/5/5 229/6/5 +f 232/4/6 228/5/6 226/6/6 +f 236/4/3 235/5/3 233/6/3 +f 240/4/4 239/5/4 235/6/4 +f 238/4/1 237/5/1 239/6/1 +f 234/4/2 233/5/2 237/6/2 +f 235/4/5 239/5/5 237/6/5 +f 238/78/6 240/4/6 236/5/6 +f 244/4/3 243/5/3 241/6/3 +f 248/4/4 247/5/4 243/6/4 +f 248/78/1 246/4/1 245/5/1 +f 242/4/2 241/5/2 245/6/2 +f 243/4/5 247/5/5 245/6/5 +f 246/78/6 248/4/6 244/5/6 +f 252/4/3 251/5/3 249/6/3 +f 256/4/4 255/5/4 251/6/4 +f 256/78/1 254/4/1 253/5/1 +f 250/4/2 249/5/2 253/6/2 +f 251/4/5 255/5/5 253/6/5 +f 254/78/6 256/4/6 252/5/6 +f 260/4/3 259/5/3 257/6/3 +f 264/4/4 263/5/4 259/6/4 +f 262/4/1 261/5/1 263/6/1 +f 258/4/2 257/5/2 261/6/2 +f 259/4/5 263/5/5 261/6/5 +f 262/78/6 264/4/6 260/5/6 +f 268/4/3 267/5/3 265/6/3 +f 272/4/4 271/5/4 267/6/4 +f 270/4/1 269/5/1 271/6/1 +f 266/1/2 265/2/2 269/3/2 +f 267/4/5 271/5/5 269/6/5 +f 270/78/6 272/4/6 268/5/6 +f 276/4/2 275/5/2 273/6/2 +f 280/4/3 279/5/3 275/6/3 +f 278/4/4 277/5/4 279/6/4 +f 274/4/1 273/5/1 277/6/1 +f 275/4/5 279/5/5 277/6/5 +f 280/4/6 276/5/6 274/6/6 +f 284/4/2 283/5/2 281/6/2 +f 288/4/3 287/5/3 283/6/3 +f 286/4/4 285/5/4 287/6/4 +f 286/78/1 282/4/1 281/5/1 +f 283/4/5 287/5/5 285/6/5 +f 288/4/6 284/5/6 282/6/6 +f 292/4/2 291/5/2 289/6/2 +f 296/4/3 295/5/3 291/6/3 +f 294/4/4 293/5/4 295/6/4 +f 294/78/1 290/4/1 289/5/1 +f 291/4/5 295/5/5 293/6/5 +f 296/4/6 292/5/6 290/6/6 +f 300/4/2 299/5/2 297/6/2 +f 304/4/3 303/5/3 299/6/3 +f 302/4/4 301/5/4 303/6/4 +f 298/4/1 297/5/1 301/6/1 +f 299/4/5 303/5/5 301/6/5 +f 304/4/6 300/5/6 298/6/6 +f 308/4/2 307/5/2 305/6/2 +f 312/4/3 311/5/3 307/6/3 +f 310/4/4 309/5/4 311/6/4 +f 306/1/1 305/2/1 309/3/1 +f 307/4/5 311/5/5 309/6/5 +f 312/4/6 308/5/6 306/6/6 +f 2/7/1 4/1/1 1/3/1 +f 4/7/2 8/1/2 3/3/2 +f 8/7/3 6/1/3 7/3/3 +f 6/7/4 2/1/4 5/3/4 +f 1/78/5 3/4/5 5/6/5 +f 2/3/6 6/7/6 4/2/6 +f 10/79/1 12/8/1 9/10/1 +f 12/79/2 16/8/2 11/10/2 +f 16/79/3 14/8/3 15/10/3 +f 14/79/4 10/8/4 13/10/4 +f 9/80/5 11/11/5 13/13/5 +f 14/17/6 16/14/6 10/16/6 +f 18/79/1 20/8/1 17/10/1 +f 20/79/2 24/8/2 19/10/2 +f 24/79/3 22/8/3 23/10/3 +f 22/79/4 18/8/4 21/10/4 +f 17/7/5 19/1/5 21/3/5 +f 18/16/6 22/17/6 20/15/6 +f 26/81/1 28/18/1 25/20/1 +f 28/81/2 32/18/2 27/20/2 +f 32/81/3 30/18/3 31/20/3 +f 30/81/4 26/18/4 29/20/4 +f 25/7/5 27/1/5 29/3/5 +f 26/82/6 30/21/6 28/23/6 +f 34/79/1 36/8/1 33/10/1 +f 36/79/2 40/8/2 35/10/2 +f 40/79/3 38/8/3 39/10/3 +f 38/79/4 34/8/4 37/10/4 +f 33/7/5 35/1/5 37/3/5 +f 38/7/6 40/1/6 34/3/6 +f 42/83/1 44/24/1 41/26/1 +f 44/83/2 48/24/2 43/26/2 +f 48/83/3 46/24/3 47/26/3 +f 46/83/4 42/24/4 45/26/4 +f 41/84/5 43/27/5 45/29/5 +f 46/85/6 48/30/6 42/32/6 +f 50/7/1 52/1/1 49/3/1 +f 52/45/2 56/33/2 51/35/2 +f 56/86/3 54/36/3 55/38/3 +f 54/87/4 50/39/4 53/41/4 +f 49/7/5 51/1/5 53/3/5 +f 54/88/6 56/42/6 50/44/6 +f 57/35/1 58/45/1 59/34/1 +f 60/7/2 64/1/2 59/3/2 +f 64/89/3 62/46/3 63/48/3 +f 62/7/4 58/1/4 61/3/4 +f 57/7/5 59/1/5 61/3/5 +f 62/88/6 64/42/6 58/44/6 +f 66/90/1 68/49/1 65/51/1 +f 68/7/2 72/1/2 67/3/2 +f 72/45/3 70/33/3 71/35/3 +f 70/86/4 66/36/4 69/38/4 +f 65/7/5 67/1/5 69/3/5 +f 70/88/6 72/42/6 66/44/6 +f 74/91/1 76/52/1 73/54/1 +f 76/92/2 80/55/2 75/57/2 +f 80/45/3 78/33/3 79/35/3 +f 78/45/4 74/33/4 77/35/4 +f 73/93/5 75/58/5 77/60/5 +f 78/94/6 80/61/6 74/63/6 +f 82/7/1 84/1/1 81/3/1 +f 88/7/3 86/1/3 87/3/3 +f 86/45/4 82/33/4 85/35/4 +f 81/45/5 83/33/5 85/35/5 +f 86/95/6 88/64/6 82/66/6 +f 90/7/1 92/1/1 89/3/1 +f 92/96/2 96/67/2 91/69/2 +f 96/7/3 94/1/3 95/3/3 +f 94/45/4 90/33/4 93/35/4 +f 89/7/5 91/1/5 93/3/5 +f 94/45/6 96/33/6 90/35/6 +f 98/77/1 100/70/1 97/72/1 +f 100/77/2 104/70/2 99/72/2 +f 104/77/3 102/70/3 103/72/3 +f 102/77/4 98/70/4 101/72/4 +f 97/7/5 99/1/5 101/3/5 +f 102/76/6 104/73/6 98/75/6 +f 106/77/1 108/70/1 105/72/1 +f 108/77/2 112/70/2 107/72/2 +f 112/77/3 110/70/3 111/72/3 +f 110/77/4 106/70/4 109/72/4 +f 105/7/5 107/1/5 109/3/5 +f 106/75/6 110/76/6 108/74/6 +f 114/77/1 116/70/1 113/72/1 +f 116/77/2 120/70/2 115/72/2 +f 120/77/3 118/70/3 119/72/3 +f 118/77/4 114/70/4 117/72/4 +f 113/7/5 115/1/5 117/3/5 +f 118/76/6 120/73/6 114/75/6 +f 122/77/1 124/70/1 121/72/1 +f 124/77/2 128/70/2 123/72/2 +f 128/77/3 126/70/3 127/72/3 +f 126/77/4 122/70/4 125/72/4 +f 121/7/5 123/1/5 125/3/5 +f 122/75/6 126/76/6 124/74/6 +f 130/77/1 132/70/1 129/72/1 +f 132/77/2 136/70/2 131/72/2 +f 136/77/3 134/70/3 135/72/3 +f 134/77/4 130/70/4 133/72/4 +f 129/7/5 131/1/5 133/3/5 +f 134/76/6 136/73/6 130/75/6 +f 137/72/1 138/77/1 139/71/1 +f 140/77/2 144/70/2 139/72/2 +f 144/77/3 142/70/3 143/72/3 +f 142/77/4 138/70/4 141/72/4 +f 137/7/5 139/1/5 141/3/5 +f 142/76/6 144/73/6 138/75/6 +f 146/77/1 148/70/1 145/72/1 +f 148/77/2 152/70/2 147/72/2 +f 152/77/3 150/70/3 151/72/3 +f 150/77/4 146/70/4 149/72/4 +f 145/7/5 147/1/5 149/3/5 +f 146/75/6 150/76/6 148/74/6 +f 154/78/1 156/4/1 153/6/1 +f 156/78/2 160/4/2 155/6/2 +f 160/78/3 158/4/3 159/6/3 +f 158/78/4 154/4/4 157/6/4 +f 153/78/5 155/4/5 157/6/5 +f 158/78/6 160/4/6 154/6/6 +f 162/78/1 164/4/1 161/6/1 +f 164/78/2 168/4/2 163/6/2 +f 168/78/3 166/4/3 167/6/3 +f 166/7/4 162/1/4 165/3/4 +f 161/78/5 163/4/5 165/6/5 +f 162/6/6 166/78/6 164/5/6 +f 169/6/1 170/78/1 171/5/1 +f 172/78/2 176/4/2 171/6/2 +f 176/78/3 174/4/3 175/6/3 +f 174/78/4 170/4/4 173/6/4 +f 169/78/5 171/4/5 173/6/5 +f 170/6/6 174/78/6 172/5/6 +f 177/6/1 178/78/1 179/5/1 +f 180/78/2 184/4/2 179/6/2 +f 184/78/3 182/4/3 183/6/3 +f 182/78/4 178/4/4 181/6/4 +f 177/78/5 179/4/5 181/6/5 +f 178/6/6 182/78/6 180/5/6 +f 186/78/1 188/4/1 185/6/1 +f 188/78/2 192/4/2 187/6/2 +f 192/78/3 190/4/3 191/6/3 +f 190/78/4 186/4/4 189/6/4 +f 185/78/5 187/4/5 189/6/5 +f 186/6/6 190/78/6 188/5/6 +f 194/78/4 196/4/4 193/6/4 +f 196/78/1 200/4/1 195/6/1 +f 200/78/2 198/4/2 199/6/2 +f 198/78/3 194/4/3 197/6/3 +f 193/78/5 195/4/5 197/6/5 +f 198/78/6 200/4/6 194/6/6 +f 202/78/4 204/4/4 201/6/4 +f 203/6/1 204/78/1 207/5/1 +f 208/78/2 206/4/2 207/6/2 +f 206/78/3 202/4/3 205/6/3 +f 201/78/5 203/4/5 205/6/5 +f 206/78/6 208/4/6 202/6/6 +f 210/78/4 212/4/4 209/6/4 +f 211/6/1 212/78/1 215/5/1 +f 216/78/2 214/4/2 215/6/2 +f 214/78/3 210/4/3 213/6/3 +f 209/78/5 211/4/5 213/6/5 +f 214/78/6 216/4/6 210/6/6 +f 218/78/4 220/4/4 217/6/4 +f 220/78/1 224/4/1 219/6/1 +f 224/78/2 222/4/2 223/6/2 +f 222/78/3 218/4/3 221/6/3 +f 217/78/5 219/4/5 221/6/5 +f 222/78/6 224/4/6 218/6/6 +f 226/78/4 228/4/4 225/6/4 +f 228/78/1 232/4/1 227/6/1 +f 232/78/2 230/4/2 231/6/2 +f 230/7/3 226/1/3 229/3/3 +f 225/78/5 227/4/5 229/6/5 +f 230/78/6 232/4/6 226/6/6 +f 234/78/3 236/4/3 233/6/3 +f 236/78/4 240/4/4 235/6/4 +f 240/78/1 238/4/1 239/6/1 +f 238/78/2 234/4/2 237/6/2 +f 233/78/5 235/4/5 237/6/5 +f 234/6/6 238/78/6 236/5/6 +f 242/78/3 244/4/3 241/6/3 +f 244/78/4 248/4/4 243/6/4 +f 247/6/1 248/78/1 245/5/1 +f 246/78/2 242/4/2 245/6/2 +f 241/78/5 243/4/5 245/6/5 +f 242/6/6 246/78/6 244/5/6 +f 250/78/3 252/4/3 249/6/3 +f 252/78/4 256/4/4 251/6/4 +f 255/6/1 256/78/1 253/5/1 +f 254/78/2 250/4/2 253/6/2 +f 249/78/5 251/4/5 253/6/5 +f 250/6/6 254/78/6 252/5/6 +f 258/78/3 260/4/3 257/6/3 +f 260/78/4 264/4/4 259/6/4 +f 264/78/1 262/4/1 263/6/1 +f 262/78/2 258/4/2 261/6/2 +f 257/78/5 259/4/5 261/6/5 +f 258/6/6 262/78/6 260/5/6 +f 266/78/3 268/4/3 265/6/3 +f 268/78/4 272/4/4 267/6/4 +f 272/78/1 270/4/1 271/6/1 +f 270/7/2 266/1/2 269/3/2 +f 265/78/5 267/4/5 269/6/5 +f 266/6/6 270/78/6 268/5/6 +f 274/78/2 276/4/2 273/6/2 +f 276/78/3 280/4/3 275/6/3 +f 280/78/4 278/4/4 279/6/4 +f 278/78/1 274/4/1 277/6/1 +f 273/78/5 275/4/5 277/6/5 +f 278/78/6 280/4/6 274/6/6 +f 282/78/2 284/4/2 281/6/2 +f 284/78/3 288/4/3 283/6/3 +f 288/78/4 286/4/4 287/6/4 +f 285/6/1 286/78/1 281/5/1 +f 281/78/5 283/4/5 285/6/5 +f 286/78/6 288/4/6 282/6/6 +f 290/78/2 292/4/2 289/6/2 +f 292/78/3 296/4/3 291/6/3 +f 296/78/4 294/4/4 295/6/4 +f 293/6/1 294/78/1 289/5/1 +f 289/78/5 291/4/5 293/6/5 +f 294/78/6 296/4/6 290/6/6 +f 298/78/2 300/4/2 297/6/2 +f 300/78/3 304/4/3 299/6/3 +f 304/78/4 302/4/4 303/6/4 +f 302/78/1 298/4/1 301/6/1 +f 297/78/5 299/4/5 301/6/5 +f 302/78/6 304/4/6 298/6/6 +f 306/78/2 308/4/2 305/6/2 +f 308/78/3 312/4/3 307/6/3 +f 312/78/4 310/4/4 311/6/4 +f 310/7/1 306/1/1 309/3/1 +f 305/78/5 307/4/5 309/6/5 +f 310/78/6 312/4/6 306/6/6 +usemtl None_rocketT1.png.001 +f 88/97/2 87/98/2 83/99/2 +f 316/33/1 315/34/1 313/35/1 +f 320/100/2 319/101/2 315/102/2 +f 318/103/3 317/104/3 319/105/3 +f 314/106/4 313/107/4 317/108/4 +f 315/109/5 319/108/5 317/110/5 +f 320/111/6 316/112/6 314/113/6 +f 84/114/2 88/97/2 83/99/2 +f 314/45/1 316/33/1 313/35/1 +f 316/115/2 320/100/2 315/102/2 +f 320/116/3 318/103/3 319/105/3 +f 318/109/4 314/106/4 317/108/4 +f 313/117/5 315/109/5 317/110/5 +f 318/118/6 320/111/6 314/113/6 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.mtl new file mode 100644 index 00000000..96fbad2a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.mtl @@ -0,0 +1,10 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 + +newmtl None_bubble.png +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftcore:blocks/bubble diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.obj new file mode 100644 index 00000000..e78bfe28 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/sphere.obj @@ -0,0 +1,1055 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib sphere.mtl +o Sphere +v -0.809017 0.587785 0.000000 +v -0.587785 0.809017 0.000000 +v -0.529576 0.809017 -0.255031 +v -0.951057 0.309017 0.000000 +v -0.728899 0.587785 -0.351019 +v -1.000000 0.000000 0.000000 +v -0.856872 0.309017 -0.412648 +v -0.951056 -0.309017 -0.000000 +v -0.900969 0.000000 -0.433884 +v -0.809017 -0.587785 -0.000000 +v -0.728899 -0.587785 -0.351019 +v -0.309017 0.951057 0.000000 +v -0.278415 0.951056 -0.134078 +v -0.623490 0.000000 -0.781832 +v -0.856872 -0.309017 -0.412648 +v -0.592974 -0.309017 -0.743566 +v -0.529576 -0.809017 -0.255031 +v -0.366478 -0.809017 -0.459549 +v -0.192669 0.951056 -0.241599 +v -0.278414 -0.951057 -0.134078 +v -0.504414 0.587785 -0.632515 +v -0.192669 -0.951057 -0.241599 +v -0.130794 -0.809017 -0.573048 +v -0.366478 0.809017 -0.459549 +v -0.130794 0.809017 -0.573048 +v -0.592974 0.309017 -0.743566 +v -0.180023 0.587785 -0.788734 +v -0.211630 0.309017 -0.927212 +v -0.211630 -0.309017 -0.927212 +v -0.504414 -0.587785 -0.632515 +v -0.180023 -0.587785 -0.788734 +v -0.068762 0.951056 -0.301270 +v 0.211630 -0.309017 -0.927212 +v 0.180024 -0.587785 -0.788733 +v 0.130795 0.809017 -0.573048 +v -0.068762 -0.951057 -0.301269 +v 0.130795 -0.809017 -0.573048 +v 0.211630 0.309017 -0.927212 +v -0.222521 0.000000 -0.974928 +v 0.180024 0.587785 -0.788733 +v 0.592974 0.309017 -0.743566 +v 0.222521 0.000000 -0.974928 +v 0.623490 0.000000 -0.781832 +v 0.592974 -0.309017 -0.743566 +v 0.366479 -0.809017 -0.459549 +v 0.068763 0.951056 -0.301270 +v 0.192669 0.951056 -0.241599 +v 0.068763 -0.951057 -0.301269 +v 0.366479 0.809017 -0.459549 +v 0.504414 -0.587785 -0.632515 +v 0.529577 -0.809017 -0.255031 +v 0.278415 0.951056 -0.134078 +v 0.192669 -0.951057 -0.241599 +v 0.504414 0.587785 -0.632515 +v 0.529577 0.809017 -0.255031 +v 0.856873 0.309017 -0.412648 +v 0.900969 0.000000 -0.433884 +v 0.856873 -0.309017 -0.412648 +v 0.951057 0.309017 0.000000 +v 0.951057 -0.309017 -0.000000 +v 0.728900 -0.587785 -0.351019 +v 0.809017 -0.587785 -0.000000 +v 0.309018 0.951056 0.000000 +v 0.278415 -0.951057 -0.134077 +v 0.587786 -0.809017 -0.000000 +v 0.728900 0.587785 -0.351019 +v 0.587786 0.809017 0.000000 +v 0.309017 -0.951057 -0.000000 +v 0.529577 -0.809017 0.255031 +v 0.809017 0.587785 0.000000 +v 0.529577 0.809017 0.255031 +v 0.856873 0.309017 0.412648 +v 1.000001 0.000000 0.000000 +v 0.856873 -0.309017 0.412648 +v 0.728900 -0.587785 0.351019 +v 0.278415 0.951056 0.134078 +v 0.900969 -0.000000 0.433884 +v 0.623490 -0.000000 0.781832 +v 0.592974 -0.309017 0.743566 +v 0.504414 -0.587785 0.632515 +v 0.192669 0.951056 0.241599 +v 0.278415 -0.951057 0.134077 +v 0.366479 -0.809017 0.459549 +v 0.728900 0.587785 0.351019 +v 0.366479 0.809017 0.459549 +v 0.504414 0.587785 0.632515 +v 0.592974 0.309017 0.743566 +v 0.180024 0.587785 0.788733 +v 0.211630 0.309017 0.927212 +v 0.211630 -0.309017 0.927212 +v 0.130795 -0.809017 0.573048 +v 0.130795 0.809017 0.573048 +v 0.192669 -0.951057 0.241599 +v 0.068763 -0.951057 0.301269 +v 0.180024 -0.587785 0.788733 +v -0.130794 -0.809017 0.573048 +v 0.068763 0.951056 0.301270 +v -0.068762 0.951056 0.301270 +v -0.130794 0.809017 0.573048 +v -0.211630 0.309017 0.927212 +v 0.222521 -0.000000 0.974928 +v -0.222521 -0.000000 0.974928 +v -0.211630 -0.309017 0.927212 +v -0.623490 -0.000000 0.781832 +v -0.180023 -0.587785 0.788733 +v -0.592974 -0.309017 0.743566 +v -0.504414 -0.587785 0.632515 +v -0.192669 0.951056 0.241599 +v -0.068762 -0.951057 0.301269 +v -0.366478 -0.809017 0.459549 +v -0.180023 0.587785 0.788733 +v -0.366478 0.809017 0.459549 +v -0.504414 0.587785 0.632515 +v -0.192669 -0.951057 0.241599 +v -0.278414 -0.951057 0.134077 +v -0.529576 0.809017 0.255031 +v -0.592974 0.309017 0.743566 +v -0.728899 0.587785 0.351019 +v -0.900969 -0.000000 0.433884 +v -0.856872 -0.309017 0.412648 +v -0.529576 -0.809017 0.255031 +v -0.278415 0.951056 0.134078 +v -0.309017 -0.951057 -0.000000 +v -0.587785 -0.809017 -0.000000 +v 0.000000 -1.000000 -0.000000 +v 0.000000 1.000000 0.000000 +v -0.728899 -0.587785 0.351019 +v -0.856872 0.309017 0.412648 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.698100 0.698100 -0.159300 +vn -0.873100 0.444900 -0.199300 +vn -0.963500 0.152600 -0.219900 +vn -0.963500 -0.152600 -0.219900 +vn -0.873100 -0.444900 -0.199300 +vn -0.451600 0.886300 -0.103100 +vn -0.772700 0.152600 -0.616200 +vn -0.772700 -0.152600 -0.616200 +vn -0.700200 -0.444900 -0.558400 +vn -0.559800 -0.698100 -0.446400 +vn -0.362100 0.886300 -0.288800 +vn -0.362100 -0.886300 -0.288800 +vn -0.559800 0.698100 -0.446400 +vn -0.700200 0.444900 -0.558400 +vn -0.201000 -0.886300 -0.417300 +vn -0.310700 0.698100 -0.645100 +vn -0.388600 0.444900 -0.806900 +vn -0.428800 0.152600 -0.890400 +vn -0.428800 -0.152600 -0.890400 +vn -0.388600 -0.444900 -0.806900 +vn -0.310700 -0.698100 -0.645100 +vn -0.201000 0.886300 -0.417300 +vn 0.000000 -0.444900 -0.895600 +vn 0.000000 -0.698100 -0.716000 +vn 0.000000 0.886300 -0.463200 +vn 0.000000 -0.886300 -0.463200 +vn 0.000000 0.698100 -0.716000 +vn 0.000000 0.444900 -0.895600 +vn 0.000000 0.152600 -0.988300 +vn 0.000000 -0.152600 -0.988300 +vn 0.388600 0.444900 -0.806900 +vn 0.428800 0.152600 -0.890400 +vn 0.428800 -0.152600 -0.890400 +vn 0.388600 -0.444900 -0.806900 +vn 0.310700 -0.698100 -0.645100 +vn 0.201000 0.886300 -0.417300 +vn 0.201000 -0.886300 -0.417300 +vn 0.310700 0.698100 -0.645100 +vn 0.559800 -0.698100 -0.446400 +vn 0.362100 0.886300 -0.288800 +vn 0.362100 -0.886300 -0.288800 +vn 0.559800 0.698100 -0.446400 +vn 0.700200 0.444900 -0.558400 +vn 0.772700 0.152600 -0.616200 +vn 0.772700 -0.152600 -0.616200 +vn 0.700200 -0.444900 -0.558400 +vn 0.963500 0.152600 -0.219900 +vn 0.963500 -0.152600 -0.219900 +vn 0.873100 -0.444900 -0.199300 +vn 0.698100 -0.698100 -0.159300 +vn 0.451600 0.886300 -0.103100 +vn 0.451600 -0.886300 -0.103100 +vn 0.698100 0.698100 -0.159300 +vn 0.873100 0.444900 -0.199300 +vn 0.451600 -0.886300 0.103100 +vn 0.698100 0.698100 0.159300 +vn 0.873100 0.444900 0.199300 +vn 0.963500 0.152600 0.219900 +vn 0.963500 -0.152600 0.219900 +vn 0.873100 -0.444900 0.199300 +vn 0.698100 -0.698100 0.159300 +vn 0.451600 0.886300 0.103100 +vn 0.772700 -0.152600 0.616200 +vn 0.700200 -0.444900 0.558400 +vn 0.559800 -0.698100 0.446400 +vn 0.362100 0.886300 0.288800 +vn 0.362100 -0.886300 0.288800 +vn 0.559800 0.698100 0.446400 +vn 0.700200 0.444900 0.558400 +vn 0.772700 0.152600 0.616200 +vn 0.388600 0.444900 0.806900 +vn 0.428800 0.152600 0.890400 +vn 0.428800 -0.152600 0.890400 +vn 0.388600 -0.444900 0.806900 +vn 0.310700 -0.698100 0.645100 +vn 0.201000 0.886300 0.417300 +vn 0.201000 -0.886300 0.417300 +vn 0.310700 0.698100 0.645100 +vn 0.000000 -0.698100 0.716000 +vn 0.000000 0.886300 0.463200 +vn 0.000000 -0.886300 0.463200 +vn 0.000000 0.698100 0.716000 +vn 0.000000 0.444900 0.895600 +vn 0.000000 0.152600 0.988300 +vn 0.000000 -0.152600 0.988300 +vn 0.000000 -0.444900 0.895600 +vn -0.428800 0.152600 0.890400 +vn -0.428800 -0.152600 0.890400 +vn -0.388600 -0.444900 0.806900 +vn -0.310700 -0.698100 0.645100 +vn -0.201000 0.886300 0.417300 +vn -0.201000 -0.886300 0.417300 +vn -0.310700 0.698100 0.645100 +vn -0.388600 0.444900 0.806900 +vn -0.362100 -0.886300 0.288800 +vn -0.559800 0.698100 0.446400 +vn -0.700200 0.444900 0.558400 +vn -0.772700 0.152600 0.616200 +vn -0.772700 -0.152600 0.616200 +vn -0.700200 -0.444900 0.558400 +vn -0.559800 -0.698100 0.446400 +vn -0.362100 0.886300 0.288800 +vn -0.451600 -0.886300 -0.103100 +vn -0.156300 -0.987100 -0.035700 +vn -0.156300 0.987100 -0.035700 +vn -0.698100 -0.698100 -0.159300 +vn -0.125400 0.987100 -0.100000 +vn -0.125400 -0.987100 -0.100000 +vn -0.069600 -0.987100 -0.144500 +vn -0.069600 0.987100 -0.144500 +vn 0.000000 0.987100 -0.160400 +vn 0.000000 -0.987100 -0.160400 +vn 0.069600 -0.987100 -0.144500 +vn 0.069600 0.987100 -0.144500 +vn 0.125400 -0.987100 -0.100000 +vn 0.125400 0.987100 -0.100000 +vn 0.156300 0.987100 -0.035700 +vn 0.156300 -0.987100 -0.035700 +vn 0.156300 -0.987100 0.035700 +vn 0.156300 0.987100 0.035700 +vn 0.125400 0.987100 0.100000 +vn 0.125400 -0.987100 0.100000 +vn 0.069600 -0.987100 0.144500 +vn 0.069600 0.987100 0.144500 +vn 0.000000 0.987100 0.160400 +vn 0.000000 -0.987100 0.160400 +vn -0.069600 0.987100 0.144500 +vn -0.069600 -0.987100 0.144500 +vn -0.125400 -0.987100 0.100000 +vn -0.125400 0.987100 0.100000 +vn -0.963500 -0.152600 0.219900 +vn -0.873100 -0.444900 0.199300 +vn -0.156300 0.987100 0.035700 +vn -0.698100 -0.698100 0.159300 +vn -0.451600 0.886300 0.103100 +vn -0.451600 -0.886300 0.103100 +vn -0.698100 0.698100 0.159300 +vn -0.156300 -0.987100 0.035700 +vn -0.873100 0.444900 0.199300 +vn -0.963500 0.152600 0.219900 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 4/1/2 1/2/2 5/3/2 +f 6/1/3 4/2/3 7/3/3 +f 8/1/4 6/2/4 9/3/4 +f 10/1/5 8/2/5 11/4/5 +f 2/1/6 12/2/6 13/3/6 +f 9/1/7 7/2/7 14/4/7 +f 15/1/8 9/2/8 14/3/8 +f 11/1/9 15/2/9 16/3/9 +f 17/1/10 11/2/10 18/4/10 +f 3/1/11 13/2/11 19/3/11 +f 20/1/12 17/2/12 18/3/12 +f 5/1/13 3/2/13 21/4/13 +f 7/1/14 5/2/14 21/3/14 +f 22/1/15 18/2/15 23/3/15 +f 21/1/16 24/2/16 25/3/16 +f 26/1/17 21/2/17 27/3/17 +f 14/1/18 26/2/18 28/3/18 +f 16/1/19 14/2/19 29/4/19 +f 30/1/20 16/2/20 29/3/20 +f 18/1/21 30/2/21 31/3/21 +f 24/1/22 19/2/22 32/3/22 +f 31/1/23 29/2/23 33/3/23 +f 23/1/24 31/2/24 34/3/24 +f 25/1/25 32/2/25 35/4/25 +f 36/1/26 23/2/26 37/3/26 +f 27/1/27 25/2/27 35/3/27 +f 28/1/28 27/2/28 38/4/28 +f 39/1/29 28/2/29 38/3/29 +f 29/1/30 39/2/30 33/4/30 +f 38/1/31 40/2/31 41/4/31 +f 42/1/32 38/2/32 41/3/32 +f 33/1/33 42/2/33 43/3/33 +f 34/1/34 33/2/34 44/3/34 +f 37/1/35 34/2/35 45/4/35 +f 35/1/36 46/2/36 47/3/36 +f 48/1/37 37/2/37 45/3/37 +f 40/1/38 35/2/38 49/3/38 +f 45/1/39 50/2/39 51/4/39 +f 49/1/40 47/2/40 52/3/40 +f 53/1/41 45/2/41 51/3/41 +f 54/1/42 49/2/42 55/3/42 +f 41/1/43 54/2/43 56/4/43 +f 43/1/44 41/2/44 56/3/44 +f 44/1/45 43/2/45 57/3/45 +f 50/1/46 44/2/46 58/3/46 +f 57/1/47 56/2/47 59/3/47 +f 58/1/48 57/2/48 60/4/48 +f 61/1/49 58/2/49 60/3/49 +f 51/1/50 61/2/50 62/3/50 +f 55/1/51 52/2/51 63/3/51 +f 64/1/52 51/2/52 65/3/52 +f 66/1/53 55/2/53 67/3/53 +f 56/1/54 66/2/54 59/4/54 +f 68/1/55 65/2/55 69/3/55 +f 70/1/56 67/2/56 71/3/56 +f 59/1/57 70/2/57 72/4/57 +f 73/1/58 59/2/58 72/3/58 +f 60/1/59 73/2/59 74/4/59 +f 62/1/60 60/2/60 74/3/60 +f 65/1/61 62/2/61 75/3/61 +f 67/1/62 63/2/62 76/3/62 +f 74/1/63 77/2/63 78/3/63 +f 75/1/64 74/2/64 79/3/64 +f 69/1/65 75/2/65 80/3/65 +f 71/1/66 76/2/66 81/3/66 +f 82/1/67 69/2/67 83/3/67 +f 84/1/68 71/2/68 85/3/68 +f 72/1/69 84/2/69 86/3/69 +f 77/1/70 72/2/70 87/3/70 +f 87/1/71 86/2/71 88/3/71 +f 78/1/72 87/2/72 89/3/72 +f 79/1/73 78/2/73 90/4/73 +f 80/1/74 79/2/74 90/3/74 +f 83/1/75 80/2/75 91/4/75 +f 85/1/76 81/2/76 92/4/76 +f 93/1/77 83/2/77 94/4/77 +f 86/1/78 85/2/78 88/4/78 +f 91/1/79 95/2/79 96/4/79 +f 92/1/80 97/2/80 98/3/80 +f 94/1/81 91/2/81 96/3/81 +f 88/1/82 92/2/82 99/3/82 +f 89/1/83 88/2/83 100/4/83 +f 101/1/84 89/2/84 102/4/84 +f 90/1/85 101/2/85 102/3/85 +f 95/1/86 90/2/86 103/3/86 +f 102/1/87 100/2/87 104/4/87 +f 103/1/88 102/2/88 104/3/88 +f 105/1/89 103/2/89 106/3/89 +f 96/1/90 105/2/90 107/3/90 +f 99/1/91 98/2/91 108/3/91 +f 109/1/92 96/2/92 110/3/92 +f 111/1/93 99/2/93 112/3/93 +f 100/1/94 111/2/94 113/3/94 +f 114/1/95 110/2/95 115/4/95 +f 113/1/96 112/2/96 116/3/96 +f 117/1/97 113/2/97 118/3/97 +f 104/1/98 117/2/98 119/4/98 +f 106/1/99 104/2/99 120/4/99 +f 107/1/100 106/2/100 120/3/100 +f 110/1/101 107/2/101 121/4/101 +f 112/1/102 108/2/102 122/3/102 +f 123/1/103 124/2/103 17/3/103 +f 125/1/104 123/2/104 20/3/104 +f 12/1/105 126/2/105 13/3/105 +f 124/1/106 10/2/106 11/3/106 +f 13/1/107 126/2/107 19/3/107 +f 125/1/108 20/2/108 22/3/108 +f 125/1/109 22/2/109 36/3/109 +f 19/1/110 126/2/110 32/3/110 +f 32/1/111 126/2/111 46/3/111 +f 125/1/112 36/2/112 48/3/112 +f 125/1/113 48/2/113 53/3/113 +f 46/1/114 126/2/114 47/3/114 +f 125/1/115 53/2/115 64/3/115 +f 47/1/116 126/2/116 52/3/116 +f 52/1/117 126/2/117 63/3/117 +f 125/1/118 64/2/118 68/3/118 +f 125/1/119 68/2/119 82/3/119 +f 63/1/120 126/2/120 76/3/120 +f 76/1/121 126/2/121 81/3/121 +f 125/1/122 82/2/122 93/3/122 +f 125/1/123 93/2/123 94/3/123 +f 81/1/124 126/2/124 97/3/124 +f 97/1/125 126/2/125 98/3/125 +f 125/1/126 94/2/126 109/3/126 +f 98/1/127 126/2/127 108/3/127 +f 125/1/128 109/2/128 114/3/128 +f 125/1/129 114/2/129 115/3/129 +f 108/1/130 126/2/130 122/3/130 +f 120/1/131 119/2/131 8/4/131 +f 127/1/132 120/2/132 8/3/132 +f 122/1/133 126/2/133 12/3/133 +f 121/1/134 127/2/134 10/3/134 +f 116/1/135 122/2/135 12/3/135 +f 115/1/136 121/2/136 123/4/136 +f 118/1/137 116/2/137 1/4/137 +f 125/1/138 115/2/138 123/3/138 +f 128/1/139 118/2/139 1/3/139 +f 119/1/140 128/2/140 4/3/140 +f 5/4/1 1/1/1 3/3/1 +f 7/4/2 4/1/2 5/3/2 +f 9/4/3 6/1/3 7/3/3 +f 15/4/4 8/1/4 9/3/4 +f 117/2/98 128/3/98 119/4/98 +f 3/4/6 2/1/6 13/3/6 +f 81/2/76 97/3/76 92/4/76 +f 16/4/8 15/1/8 14/3/8 +f 30/4/9 11/1/9 16/3/9 +f 80/2/75 95/3/75 91/4/75 +f 24/4/11 3/1/11 19/3/11 +f 22/4/12 20/1/12 18/3/12 +f 50/2/39 61/3/39 51/4/39 +f 26/4/14 7/1/14 21/3/14 +f 36/4/15 22/1/15 23/3/15 +f 27/4/16 21/1/16 25/3/16 +f 28/4/17 26/1/17 27/3/17 +f 39/4/18 14/1/18 28/3/18 +f 119/2/131 6/3/131 8/4/131 +f 31/4/20 30/1/20 29/3/20 +f 23/4/21 18/1/21 31/3/21 +f 25/4/22 24/1/22 32/3/22 +f 34/4/23 31/1/23 33/3/23 +f 37/4/24 23/1/24 34/3/24 +f 89/2/84 100/3/84 102/4/84 +f 48/4/26 36/1/26 37/3/26 +f 40/4/27 27/1/27 35/3/27 +f 88/2/83 111/3/83 100/4/83 +f 42/4/29 39/1/29 38/3/29 +f 85/2/78 92/3/78 88/4/78 +f 66/2/54 70/3/54 59/4/54 +f 43/4/32 42/1/32 41/3/32 +f 44/4/33 33/1/33 43/3/33 +f 50/4/34 34/1/34 44/3/34 +f 32/2/25 46/3/25 35/4/25 +f 49/4/36 35/1/36 47/3/36 +f 53/4/37 48/1/37 45/3/37 +f 54/4/38 40/1/38 49/3/38 +f 121/2/136 124/3/136 123/4/136 +f 55/4/40 49/1/40 52/3/40 +f 64/4/41 53/1/41 51/3/41 +f 66/4/42 54/1/42 55/3/42 +f 73/2/59 77/3/59 74/4/59 +f 57/4/44 43/1/44 56/3/44 +f 58/4/45 44/1/45 57/3/45 +f 61/4/46 50/1/46 58/3/46 +f 73/4/47 57/1/47 59/3/47 +f 14/2/19 39/3/19 29/4/19 +f 62/4/49 61/1/49 60/3/49 +f 65/4/50 51/1/50 62/3/50 +f 67/4/51 55/1/51 63/3/51 +f 68/4/52 64/1/52 65/3/52 +f 70/4/53 66/1/53 67/3/53 +f 70/2/57 84/3/57 72/4/57 +f 82/4/55 68/1/55 69/3/55 +f 84/4/56 70/1/56 71/3/56 +f 7/2/7 26/3/7 14/4/7 +f 77/4/58 73/1/58 72/3/58 +f 40/2/31 54/3/31 41/4/31 +f 75/4/60 62/1/60 74/3/60 +f 69/4/61 65/1/61 75/3/61 +f 71/4/62 67/1/62 76/3/62 +f 79/4/63 74/1/63 78/3/63 +f 80/4/64 75/1/64 79/3/64 +f 83/4/65 69/1/65 80/3/65 +f 85/4/66 71/1/66 81/3/66 +f 93/4/67 82/1/67 83/3/67 +f 86/4/68 84/1/68 85/3/68 +f 87/4/69 72/1/69 86/3/69 +f 78/4/70 77/1/70 87/3/70 +f 89/4/71 87/1/71 88/3/71 +f 101/4/72 78/1/72 89/3/72 +f 116/2/137 2/3/137 1/4/137 +f 95/4/74 80/1/74 90/3/74 +f 27/2/28 40/3/28 38/4/28 +f 11/2/10 30/3/10 18/4/10 +f 110/2/95 121/3/95 115/4/95 +f 83/2/77 91/3/77 94/4/77 +f 99/4/80 92/1/80 98/3/80 +f 109/4/81 94/1/81 96/3/81 +f 111/4/82 88/1/82 99/3/82 +f 57/2/48 73/3/48 60/4/48 +f 39/2/30 42/3/30 33/4/30 +f 103/4/85 90/1/85 102/3/85 +f 105/4/86 95/1/86 103/3/86 +f 95/2/79 105/3/79 96/4/79 +f 106/4/88 103/1/88 104/3/88 +f 107/4/89 105/1/89 106/3/89 +f 110/4/90 96/1/90 107/3/90 +f 112/4/91 99/1/91 108/3/91 +f 114/4/92 109/1/92 110/3/92 +f 113/4/93 111/1/93 112/3/93 +f 117/4/94 100/1/94 113/3/94 +f 8/2/5 15/3/5 11/4/5 +f 118/4/96 113/1/96 116/3/96 +f 128/4/97 117/1/97 118/3/97 +f 34/2/35 50/3/35 45/4/35 +f 107/2/101 127/3/101 121/4/101 +f 127/4/100 107/1/100 120/3/100 +f 78/2/73 101/3/73 90/4/73 +f 116/4/102 112/1/102 122/3/102 +f 20/4/103 123/1/103 17/3/103 +f 17/4/106 124/1/106 11/3/106 +f 104/2/99 119/3/99 120/4/99 +f 10/4/132 127/1/132 8/3/132 +f 124/4/134 121/1/134 10/3/134 +f 2/4/135 116/1/135 12/3/135 +f 100/2/87 117/3/87 104/4/87 +f 3/2/13 24/3/13 21/4/13 +f 4/4/139 128/1/139 1/3/139 +f 6/4/140 119/1/140 4/3/140 +f 54/2/43 66/3/43 56/4/43 +o SphereInner +v -0.809025 0.587791 0.000000 +v -0.529581 0.809025 -0.255033 +v -0.587791 0.809025 0.000000 +v -0.951066 0.309020 0.000000 +v -0.728906 0.587791 -0.351023 +v -1.000010 0.000000 0.000000 +v -0.856881 0.309020 -0.412652 +v -0.951066 -0.309020 -0.000000 +v -0.900978 0.000000 -0.433888 +v -0.809025 -0.587791 -0.000000 +v -0.728906 -0.587791 -0.351023 +v -0.278417 0.951066 -0.134079 +v -0.309020 0.951066 0.000000 +v -0.623496 0.000000 -0.781840 +v -0.856881 -0.309020 -0.412652 +v -0.592980 -0.309020 -0.743574 +v -0.529581 -0.809025 -0.255033 +v -0.366482 -0.809025 -0.459554 +v -0.192671 0.951066 -0.241602 +v -0.278417 -0.951066 -0.134079 +v -0.504419 0.587791 -0.632522 +v -0.192671 -0.951066 -0.241602 +v -0.130796 -0.809025 -0.573054 +v -0.130796 0.809025 -0.573054 +v -0.366482 0.809025 -0.459554 +v -0.592980 0.309020 -0.743574 +v -0.180025 0.587791 -0.788741 +v -0.211632 0.309020 -0.927221 +v -0.211632 -0.309020 -0.927221 +v -0.504419 -0.587791 -0.632522 +v -0.180025 -0.587791 -0.788741 +v -0.068763 0.951066 -0.301273 +v 0.211632 -0.309020 -0.927221 +v 0.180025 -0.587791 -0.788741 +v 0.130796 0.809025 -0.573054 +v -0.068763 -0.951066 -0.301272 +v 0.130796 -0.809025 -0.573054 +v 0.211632 0.309020 -0.927221 +v -0.222523 0.000000 -0.974938 +v 0.592980 0.309020 -0.743574 +v 0.180025 0.587791 -0.788741 +v 0.222524 0.000000 -0.974938 +v 0.623497 0.000000 -0.781839 +v 0.592980 -0.309020 -0.743574 +v 0.366482 -0.809025 -0.459554 +v 0.192671 0.951066 -0.241602 +v 0.068764 0.951066 -0.301273 +v 0.068764 -0.951066 -0.301272 +v 0.366482 0.809025 -0.459554 +v 0.529582 -0.809025 -0.255033 +v 0.504419 -0.587791 -0.632521 +v 0.278418 0.951066 -0.134079 +v 0.192671 -0.951066 -0.241602 +v 0.504419 0.587791 -0.632521 +v 0.529582 0.809025 -0.255033 +v 0.856881 0.309020 -0.412652 +v 0.900978 0.000000 -0.433888 +v 0.856881 -0.309020 -0.412652 +v 0.951066 0.309020 0.000000 +v 0.951066 -0.309020 -0.000000 +v 0.728907 -0.587791 -0.351023 +v 0.809026 -0.587791 -0.000000 +v 0.309021 0.951066 0.000000 +v 0.278418 -0.951066 -0.134079 +v 0.587792 -0.809025 -0.000000 +v 0.728907 0.587791 -0.351023 +v 0.587792 0.809025 0.000000 +v 0.309020 -0.951066 -0.000000 +v 0.529582 -0.809025 0.255033 +v 0.809026 0.587791 0.000000 +v 0.529582 0.809025 0.255033 +v 0.856881 0.309020 0.412652 +v 1.000011 0.000000 0.000000 +v 0.856881 -0.309020 0.412652 +v 0.728907 -0.587791 0.351023 +v 0.278418 0.951066 0.134079 +v 0.623497 -0.000000 0.781839 +v 0.900978 -0.000000 0.433888 +v 0.592980 -0.309020 0.743573 +v 0.504419 -0.587791 0.632521 +v 0.192671 0.951066 0.241602 +v 0.278418 -0.951066 0.134079 +v 0.366482 -0.809025 0.459554 +v 0.728907 0.587791 0.351023 +v 0.366482 0.809025 0.459554 +v 0.504419 0.587791 0.632521 +v 0.592980 0.309020 0.743573 +v 0.180025 0.587791 0.788741 +v 0.211632 0.309020 0.927221 +v 0.211633 -0.309020 0.927221 +v 0.130796 -0.809025 0.573054 +v 0.130796 0.809025 0.573054 +v 0.192671 -0.951066 0.241602 +v 0.068764 -0.951066 0.301272 +v -0.130796 -0.809025 0.573054 +v 0.180025 -0.587791 0.788741 +v -0.068763 0.951066 0.301273 +v 0.068764 0.951066 0.301273 +v -0.130796 0.809025 0.573054 +v -0.211632 0.309020 0.927221 +v 0.222524 -0.000000 0.974938 +v -0.222523 -0.000000 0.974938 +v -0.211632 -0.309020 0.927221 +v -0.623496 -0.000000 0.781839 +v -0.180025 -0.587791 0.788741 +v -0.592980 -0.309020 0.743573 +v -0.504419 -0.587791 0.632521 +v -0.192671 0.951066 0.241602 +v -0.068763 -0.951066 0.301272 +v -0.366482 -0.809025 0.459554 +v -0.180025 0.587791 0.788741 +v -0.366482 0.809025 0.459554 +v -0.504419 0.587791 0.632521 +v -0.192671 -0.951066 0.241602 +v -0.278417 -0.951066 0.134079 +v -0.529581 0.809025 0.255033 +v -0.592980 0.309020 0.743573 +v -0.728906 0.587791 0.351023 +v -0.900978 -0.000000 0.433888 +v -0.856880 -0.309020 0.412652 +v -0.529581 -0.809025 0.255033 +v -0.278417 0.951066 0.134079 +v -0.309020 -0.951066 -0.000000 +v -0.587791 -0.809025 -0.000000 +v 0.000000 -1.000010 -0.000000 +v 0.000000 1.000010 0.000000 +v -0.728906 -0.587791 0.351023 +v -0.856881 0.309020 0.412652 +vt 0.000000 0.000000 +vt 1.000000 1.000000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vn 0.698100 -0.698100 0.159300 +vn 0.873100 -0.444900 0.199300 +vn 0.963500 -0.152600 0.219900 +vn 0.963500 0.152600 0.219900 +vn 0.873100 0.444900 0.199300 +vn 0.451600 -0.886300 0.103100 +vn 0.772700 -0.152600 0.616200 +vn 0.772700 0.152600 0.616200 +vn 0.700200 0.444900 0.558400 +vn 0.559800 0.698100 0.446400 +vn 0.362100 -0.886300 0.288800 +vn 0.362100 0.886300 0.288800 +vn 0.559800 -0.698100 0.446400 +vn 0.700200 -0.444900 0.558400 +vn 0.201000 0.886300 0.417300 +vn 0.310700 -0.698100 0.645100 +vn 0.388600 -0.444900 0.806900 +vn 0.428800 -0.152600 0.890400 +vn 0.428800 0.152600 0.890400 +vn 0.388600 0.444900 0.806900 +vn 0.310700 0.698100 0.645100 +vn 0.201000 -0.886300 0.417300 +vn 0.000000 0.444900 0.895600 +vn 0.000000 0.698100 0.716000 +vn 0.000000 -0.886300 0.463200 +vn 0.000000 0.886300 0.463200 +vn 0.000000 -0.698100 0.716000 +vn 0.000000 -0.444900 0.895600 +vn 0.000000 -0.152600 0.988300 +vn 0.000000 0.152600 0.988300 +vn -0.388600 -0.444900 0.806900 +vn -0.428800 -0.152600 0.890400 +vn -0.428800 0.152600 0.890400 +vn -0.388600 0.444900 0.806900 +vn -0.310700 0.698100 0.645100 +vn -0.201000 -0.886300 0.417300 +vn -0.201000 0.886300 0.417300 +vn -0.310700 -0.698100 0.645100 +vn -0.559800 0.698100 0.446400 +vn -0.362100 -0.886300 0.288800 +vn -0.362100 0.886300 0.288800 +vn -0.559800 -0.698100 0.446400 +vn -0.700200 -0.444900 0.558400 +vn -0.772700 -0.152600 0.616200 +vn -0.772700 0.152600 0.616200 +vn -0.700200 0.444900 0.558400 +vn -0.963500 -0.152600 0.219900 +vn -0.963500 0.152600 0.219900 +vn -0.873100 0.444900 0.199300 +vn -0.698100 0.698100 0.159300 +vn -0.451600 -0.886300 0.103100 +vn -0.451600 0.886300 0.103100 +vn -0.698100 -0.698100 0.159300 +vn -0.873100 -0.444900 0.199300 +vn -0.451600 0.886300 -0.103100 +vn -0.698100 -0.698100 -0.159300 +vn -0.873100 -0.444900 -0.199300 +vn -0.963500 -0.152600 -0.219900 +vn -0.963500 0.152600 -0.219900 +vn -0.873100 0.444900 -0.199300 +vn -0.698100 0.698100 -0.159300 +vn -0.451600 -0.886300 -0.103100 +vn -0.772700 0.152600 -0.616200 +vn -0.700200 0.444900 -0.558400 +vn -0.559800 0.698100 -0.446400 +vn -0.362100 -0.886300 -0.288800 +vn -0.362100 0.886300 -0.288800 +vn -0.559800 -0.698100 -0.446400 +vn -0.700200 -0.444900 -0.558400 +vn -0.772700 -0.152600 -0.616200 +vn -0.388600 -0.444900 -0.806900 +vn -0.428800 -0.152600 -0.890400 +vn -0.428800 0.152600 -0.890400 +vn -0.388600 0.444900 -0.806900 +vn -0.310700 0.698100 -0.645100 +vn -0.201000 -0.886300 -0.417300 +vn -0.201000 0.886300 -0.417300 +vn -0.310700 -0.698100 -0.645100 +vn 0.000000 0.698100 -0.716000 +vn 0.000000 -0.886300 -0.463200 +vn 0.000000 0.886300 -0.463200 +vn 0.000000 -0.698100 -0.716000 +vn 0.000000 -0.444900 -0.895600 +vn 0.000000 -0.152600 -0.988300 +vn 0.000000 0.152600 -0.988300 +vn 0.000000 0.444900 -0.895600 +vn 0.428800 -0.152600 -0.890400 +vn 0.428800 0.152600 -0.890400 +vn 0.388600 0.444900 -0.806900 +vn 0.310700 0.698100 -0.645100 +vn 0.201000 -0.886300 -0.417300 +vn 0.201000 0.886300 -0.417300 +vn 0.310700 -0.698100 -0.645100 +vn 0.388600 -0.444900 -0.806900 +vn 0.362100 0.886300 -0.288800 +vn 0.559800 -0.698100 -0.446400 +vn 0.700200 -0.444900 -0.558400 +vn 0.772700 -0.152600 -0.616200 +vn 0.772700 0.152600 -0.616200 +vn 0.700200 0.444900 -0.558400 +vn 0.559800 0.698100 -0.446400 +vn 0.362100 -0.886300 -0.288800 +vn 0.451600 0.886300 0.103100 +vn 0.156300 0.987100 0.035700 +vn 0.156300 -0.987100 0.035700 +vn 0.698100 0.698100 0.159300 +vn 0.125400 -0.987100 0.100000 +vn 0.125400 0.987100 0.100000 +vn 0.069600 0.987100 0.144500 +vn 0.069600 -0.987100 0.144500 +vn 0.000000 -0.987100 0.160400 +vn 0.000000 0.987100 0.160400 +vn -0.069600 0.987100 0.144500 +vn -0.069600 -0.987100 0.144500 +vn -0.125400 0.987100 0.100000 +vn -0.125400 -0.987100 0.100000 +vn -0.156300 -0.987100 0.035700 +vn -0.156300 0.987100 0.035700 +vn -0.156300 0.987100 -0.035700 +vn -0.156300 -0.987100 -0.035700 +vn -0.125400 -0.987100 -0.100000 +vn -0.125400 0.987100 -0.100000 +vn -0.069600 0.987100 -0.144500 +vn -0.069600 -0.987100 -0.144500 +vn 0.000000 -0.987100 -0.160400 +vn 0.000000 0.987100 -0.160400 +vn 0.069600 -0.987100 -0.144500 +vn 0.069600 0.987100 -0.144500 +vn 0.125400 0.987100 -0.100000 +vn 0.125400 -0.987100 -0.100000 +vn 0.963500 0.152600 -0.219900 +vn 0.873100 0.444900 -0.199300 +vn 0.156300 -0.987100 -0.035700 +vn 0.698100 0.698100 -0.159300 +vn 0.451600 -0.886300 -0.103100 +vn 0.451600 0.886300 -0.103100 +vn 0.698100 -0.698100 -0.159300 +vn 0.156300 0.987100 -0.035700 +vn 0.873100 -0.444900 -0.199300 +vn 0.963500 -0.152600 -0.219900 +usemtl None_bubble.png +f 129/5/141 130/6/141 131/7/141 +f 132/5/142 133/6/142 129/7/142 +f 134/5/143 135/6/143 132/7/143 +f 136/5/144 137/6/144 134/7/144 +f 138/5/145 139/8/145 136/7/145 +f 131/5/146 140/6/146 141/7/146 +f 137/5/147 142/8/147 135/7/147 +f 143/5/148 142/6/148 137/7/148 +f 139/5/149 144/6/149 143/7/149 +f 145/5/150 146/8/150 139/7/150 +f 130/5/151 147/6/151 140/7/151 +f 148/5/152 146/6/152 145/7/152 +f 133/5/153 149/8/153 130/7/153 +f 135/5/154 149/6/154 133/7/154 +f 150/5/155 151/6/155 146/7/155 +f 149/5/156 152/6/156 153/7/156 +f 154/5/157 155/6/157 149/7/157 +f 142/5/158 156/6/158 154/7/158 +f 144/5/159 157/8/159 142/7/159 +f 158/5/160 157/6/160 144/7/160 +f 146/5/161 159/6/161 158/7/161 +f 153/5/162 160/6/162 147/7/162 +f 159/5/163 161/6/163 157/7/163 +f 151/5/164 162/6/164 159/7/164 +f 152/5/165 163/8/165 160/7/165 +f 164/5/166 165/6/166 151/7/166 +f 155/5/167 163/6/167 152/7/167 +f 156/5/168 166/8/168 155/7/168 +f 167/5/169 166/6/169 156/7/169 +f 157/5/170 161/8/170 167/7/170 +f 166/5/171 168/8/171 169/7/171 +f 170/5/172 168/6/172 166/7/172 +f 161/5/173 171/6/173 170/7/173 +f 162/5/174 172/6/174 161/7/174 +f 165/5/175 173/8/175 162/7/175 +f 163/5/176 174/6/176 175/7/176 +f 176/5/177 173/6/177 165/7/177 +f 169/5/178 177/6/178 163/7/178 +f 173/5/179 178/8/179 179/7/179 +f 177/5/180 180/6/180 174/7/180 +f 181/5/181 178/6/181 173/7/181 +f 182/5/182 183/6/182 177/7/182 +f 168/5/183 184/8/183 182/7/183 +f 171/5/184 184/6/184 168/7/184 +f 172/5/185 185/6/185 171/7/185 +f 179/5/186 186/6/186 172/7/186 +f 185/5/187 187/6/187 184/7/187 +f 186/5/188 188/8/188 185/7/188 +f 189/5/189 188/6/189 186/7/189 +f 178/5/190 190/6/190 189/7/190 +f 183/5/191 191/6/191 180/7/191 +f 192/5/192 193/6/192 178/7/192 +f 194/5/193 195/6/193 183/7/193 +f 184/5/194 187/8/194 194/7/194 +f 196/5/195 197/6/195 193/7/195 +f 198/5/196 199/6/196 195/7/196 +f 187/5/197 200/8/197 198/7/197 +f 201/5/198 200/6/198 187/7/198 +f 188/5/199 202/8/199 201/7/199 +f 190/5/200 202/6/200 188/7/200 +f 193/5/201 203/6/201 190/7/201 +f 195/5/202 204/6/202 191/7/202 +f 202/5/203 205/6/203 206/7/203 +f 203/5/204 207/6/204 202/7/204 +f 197/5/205 208/6/205 203/7/205 +f 199/5/206 209/6/206 204/7/206 +f 210/5/207 211/6/207 197/7/207 +f 212/5/208 213/6/208 199/7/208 +f 200/5/209 214/6/209 212/7/209 +f 206/5/210 215/6/210 200/7/210 +f 215/5/211 216/6/211 214/7/211 +f 205/5/212 217/6/212 215/7/212 +f 207/5/213 218/8/213 205/7/213 +f 208/5/214 218/6/214 207/7/214 +f 211/5/215 219/8/215 208/7/215 +f 213/5/216 220/8/216 209/7/216 +f 221/5/217 222/8/217 211/7/217 +f 214/5/218 216/8/218 213/7/218 +f 219/5/219 223/8/219 224/7/219 +f 220/5/220 225/6/220 226/7/220 +f 222/5/221 223/6/221 219/7/221 +f 216/5/222 227/6/222 220/7/222 +f 217/5/223 228/8/223 216/7/223 +f 229/5/224 230/8/224 217/7/224 +f 218/5/225 230/6/225 229/7/225 +f 224/5/226 231/6/226 218/7/226 +f 230/5/227 232/8/227 228/7/227 +f 231/5/228 232/6/228 230/7/228 +f 233/5/229 234/6/229 231/7/229 +f 223/5/230 235/6/230 233/7/230 +f 227/5/231 236/6/231 225/7/231 +f 237/5/232 238/6/232 223/7/232 +f 239/5/233 240/6/233 227/7/233 +f 228/5/234 241/6/234 239/7/234 +f 242/5/235 243/8/235 238/7/235 +f 241/5/236 244/6/236 240/7/236 +f 245/5/237 246/6/237 241/7/237 +f 232/5/238 247/8/238 245/7/238 +f 234/5/239 248/8/239 232/7/239 +f 235/5/240 248/6/240 234/7/240 +f 238/5/241 249/8/241 235/7/241 +f 240/5/242 250/6/242 236/7/242 +f 251/5/243 145/6/243 252/7/243 +f 253/5/244 148/6/244 251/7/244 +f 141/5/245 140/6/245 254/7/245 +f 252/5/246 139/6/246 138/7/246 +f 140/5/247 147/6/247 254/7/247 +f 253/5/248 150/6/248 148/7/248 +f 253/5/249 164/6/249 150/7/249 +f 147/5/250 160/6/250 254/7/250 +f 160/5/251 175/6/251 254/7/251 +f 253/5/252 176/6/252 164/7/252 +f 253/5/253 181/6/253 176/7/253 +f 175/5/254 174/6/254 254/7/254 +f 253/5/255 192/6/255 181/7/255 +f 174/5/256 180/6/256 254/7/256 +f 180/5/257 191/6/257 254/7/257 +f 253/5/258 196/6/258 192/7/258 +f 253/5/259 210/6/259 196/7/259 +f 191/5/260 204/6/260 254/7/260 +f 204/5/261 209/6/261 254/7/261 +f 253/5/262 221/6/262 210/7/262 +f 253/5/263 222/6/263 221/7/263 +f 209/5/264 226/6/264 254/7/264 +f 226/5/265 225/6/265 254/7/265 +f 253/5/266 237/6/266 222/7/266 +f 225/5/267 236/6/267 254/7/267 +f 253/5/268 242/6/268 237/7/268 +f 253/5/269 243/6/269 242/7/269 +f 236/5/270 250/6/270 254/7/270 +f 248/5/271 136/8/271 247/7/271 +f 255/5/272 136/6/272 248/7/272 +f 250/5/273 141/6/273 254/7/273 +f 249/5/274 138/6/274 255/7/274 +f 244/5/275 141/6/275 250/7/275 +f 243/5/276 251/8/276 249/7/276 +f 246/5/277 129/8/277 244/7/277 +f 253/5/278 251/6/278 243/7/278 +f 256/5/279 129/6/279 246/7/279 +f 247/5/280 132/6/280 256/7/280 +f 133/8/141 130/6/141 129/5/141 +f 135/8/142 133/6/142 132/5/142 +f 137/8/143 135/6/143 134/5/143 +f 143/8/144 137/6/144 136/5/144 +f 245/7/238 247/8/238 256/6/238 +f 130/8/146 140/6/146 131/5/146 +f 209/7/216 220/8/216 226/6/216 +f 144/8/148 142/6/148 143/5/148 +f 158/8/149 144/6/149 139/5/149 +f 208/7/215 219/8/215 224/6/215 +f 153/8/151 147/6/151 130/5/151 +f 150/8/152 146/6/152 148/5/152 +f 179/7/179 178/8/179 189/6/179 +f 154/8/154 149/6/154 135/5/154 +f 164/8/155 151/6/155 150/5/155 +f 155/8/156 152/6/156 149/5/156 +f 156/8/157 155/6/157 154/5/157 +f 167/8/158 156/6/158 142/5/158 +f 247/7/271 136/8/271 134/6/271 +f 159/8/160 157/6/160 158/5/160 +f 151/8/161 159/6/161 146/5/161 +f 152/8/162 160/6/162 153/5/162 +f 162/8/163 161/6/163 159/5/163 +f 165/8/164 162/6/164 151/5/164 +f 217/7/224 230/8/224 228/6/224 +f 176/8/166 165/6/166 164/5/166 +f 169/8/167 163/6/167 155/5/167 +f 216/7/223 228/8/223 239/6/223 +f 170/8/169 166/6/169 167/5/169 +f 213/7/218 216/8/218 220/6/218 +f 194/7/194 187/8/194 198/6/194 +f 171/8/172 168/6/172 170/5/172 +f 172/8/173 171/6/173 161/5/173 +f 179/8/174 172/6/174 162/5/174 +f 160/7/165 163/8/165 175/6/165 +f 177/8/176 174/6/176 163/5/176 +f 181/8/177 173/6/177 176/5/177 +f 182/8/178 177/6/178 169/5/178 +f 249/7/276 251/8/276 252/6/276 +f 183/8/180 180/6/180 177/5/180 +f 192/8/181 178/6/181 181/5/181 +f 194/8/182 183/6/182 182/5/182 +f 201/7/199 202/8/199 206/6/199 +f 185/8/184 184/6/184 171/5/184 +f 186/8/185 185/6/185 172/5/185 +f 189/8/186 186/6/186 179/5/186 +f 201/8/187 187/6/187 185/5/187 +f 142/7/159 157/8/159 167/6/159 +f 190/8/189 188/6/189 189/5/189 +f 193/8/190 190/6/190 178/5/190 +f 195/8/191 191/6/191 183/5/191 +f 196/8/192 193/6/192 192/5/192 +f 198/8/193 195/6/193 194/5/193 +f 198/7/197 200/8/197 212/6/197 +f 210/8/195 197/6/195 196/5/195 +f 212/8/196 199/6/196 198/5/196 +f 135/7/147 142/8/147 154/6/147 +f 206/8/198 200/6/198 201/5/198 +f 169/7/171 168/8/171 182/6/171 +f 203/8/200 202/6/200 190/5/200 +f 197/8/201 203/6/201 193/5/201 +f 199/8/202 204/6/202 195/5/202 +f 207/8/203 205/6/203 202/5/203 +f 208/8/204 207/6/204 203/5/204 +f 211/8/205 208/6/205 197/5/205 +f 213/8/206 209/6/206 199/5/206 +f 221/8/207 211/6/207 210/5/207 +f 214/8/208 213/6/208 212/5/208 +f 215/8/209 214/6/209 200/5/209 +f 205/8/210 215/6/210 206/5/210 +f 217/8/211 216/6/211 215/5/211 +f 229/8/212 217/6/212 205/5/212 +f 244/7/277 129/8/277 131/6/277 +f 224/8/214 218/6/214 208/5/214 +f 155/7/168 166/8/168 169/6/168 +f 139/7/150 146/8/150 158/6/150 +f 238/7/235 243/8/235 249/6/235 +f 211/7/217 222/8/217 219/6/217 +f 227/8/220 225/6/220 220/5/220 +f 237/8/221 223/6/221 222/5/221 +f 239/8/222 227/6/222 216/5/222 +f 185/7/188 188/8/188 201/6/188 +f 167/7/170 161/8/170 170/6/170 +f 231/8/225 230/6/225 218/5/225 +f 233/8/226 231/6/226 224/5/226 +f 224/7/219 223/8/219 233/6/219 +f 234/8/228 232/6/228 231/5/228 +f 235/8/229 234/6/229 233/5/229 +f 238/8/230 235/6/230 223/5/230 +f 240/8/231 236/6/231 227/5/231 +f 242/8/232 238/6/232 237/5/232 +f 241/8/233 240/6/233 239/5/233 +f 245/8/234 241/6/234 228/5/234 +f 136/7/145 139/8/145 143/6/145 +f 246/8/236 244/6/236 241/5/236 +f 256/8/237 246/6/237 245/5/237 +f 162/7/175 173/8/175 179/6/175 +f 235/7/241 249/8/241 255/6/241 +f 255/8/240 248/6/240 235/5/240 +f 205/7/213 218/8/213 229/6/213 +f 244/8/242 250/6/242 240/5/242 +f 148/8/243 145/6/243 251/5/243 +f 145/8/246 139/6/246 252/5/246 +f 232/7/239 248/8/239 247/6/239 +f 138/8/272 136/6/272 255/5/272 +f 252/8/274 138/6/274 249/5/274 +f 131/8/275 141/6/275 244/5/275 +f 228/7/227 232/8/227 245/6/227 +f 130/7/153 149/8/153 153/6/153 +f 132/8/279 129/6/279 256/5/279 +f 134/8/280 132/6/280 247/5/280 +f 182/7/183 184/8/183 194/6/183 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/teledish.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/teledish.obj new file mode 100644 index 00000000..efe118c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/teledish.obj @@ -0,0 +1,851 @@ +# Blender v2.73 (sub 0) OBJ File: 'teledish.blend' +# www.blender.org +o main +v -0.400000 2.200000 0.050000 +v -0.400000 2.200000 -0.050000 +v 0.400000 2.200000 0.050000 +v 0.400000 2.200000 -0.050000 +v -0.400000 2.500000 -0.650000 +v -0.400000 2.500000 0.650000 +v 0.400000 2.500000 -0.650000 +v 0.400000 2.500000 0.650000 +v 0.360000 4.540001 0.000000 +v 0.000000 4.540001 0.360000 +v -0.360000 4.540001 0.000000 +v 0.000000 4.540001 -0.360000 +v 0.000000 4.300000 -0.360000 +v -0.360000 4.300000 -0.000000 +v 0.000000 4.300000 0.360000 +v 0.360000 4.300000 -0.000000 +v 0.045000 2.863667 -1.845236 +v 0.045000 2.842454 -1.739170 +v -0.045000 4.497083 -0.211819 +v 1.739170 2.842454 -0.045000 +v 1.845236 2.863667 0.045000 +v 1.739170 2.842454 0.045000 +v 0.211819 4.497083 0.045000 +v 0.045000 2.863667 1.845236 +v 0.045000 2.842454 1.739170 +v -0.045000 2.863667 1.845236 +v -0.045000 2.842454 1.739170 +v 0.045000 4.433444 0.148180 +v -1.845236 2.863667 0.045000 +v -1.845236 2.863667 -0.045000 +v -0.211819 4.497083 0.045000 +v -0.211819 4.497083 -0.045000 +v -0.278121 2.700000 0.671443 +v -0.403769 2.700000 0.604283 +v -0.513900 2.700000 0.513900 +v -0.604283 2.700000 0.403769 +v -0.671443 2.700000 0.278121 +v -0.712800 2.700000 -0.141785 +v -0.671443 2.700000 -0.278121 +v -0.513900 2.700000 -0.513900 +v 0.141785 2.700000 -0.712800 +v 0.513901 2.700000 -0.513900 +v 0.604283 2.700000 -0.403769 +v 0.604282 2.700000 0.403769 +v 0.513900 2.700000 0.513901 +v 0.141784 2.700000 0.712800 +v -0.000000 2.780115 1.369238 +v -0.267125 2.780115 1.342928 +v -0.523985 2.780115 1.265011 +v -0.760708 2.780115 1.138480 +v -0.968198 2.780115 0.968197 +v -1.138480 2.780115 0.760708 +v -1.265011 2.780115 0.523985 +v -1.342929 2.780115 0.267125 +v -1.369238 2.780115 -0.000000 +v -1.342929 2.780115 -0.267125 +v -1.265012 2.780115 -0.523985 +v -1.138480 2.780115 -0.760709 +v -0.968198 2.780115 -0.968198 +v -0.760708 2.780115 -1.138481 +v -0.523985 2.780115 -1.265012 +v -0.267125 2.780115 -1.342930 +v 0.000000 2.780115 -1.369239 +v 0.267126 2.780115 -1.342929 +v 0.523986 2.780115 -1.265012 +v 0.760709 2.780115 -1.138480 +v 0.968199 2.780115 -0.968198 +v 1.138481 2.780115 -0.760708 +v 1.265012 2.780115 -0.523984 +v 1.342929 2.780115 -0.267124 +v 1.369239 2.780115 0.000001 +v 1.342929 2.780115 0.267126 +v 1.265011 2.780115 0.523986 +v 1.138479 2.780115 0.760709 +v 0.968197 2.780115 0.968199 +v 0.760707 2.780115 1.138481 +v 0.523983 2.780115 1.265012 +v 0.267123 2.780115 1.342929 +v 0.000000 2.892507 1.922190 +v -0.375000 2.892507 1.885255 +v -0.735590 2.892507 1.775872 +v -1.067911 2.892506 1.598242 +v -1.359194 2.892506 1.359193 +v -1.598242 2.892506 1.067911 +v -1.775872 2.892506 0.735590 +v -1.885256 2.892506 0.375000 +v -1.922190 2.892506 -0.000000 +v -1.885256 2.892506 -0.375001 +v -1.775872 2.892506 -0.735591 +v -1.598242 2.892506 -1.067912 +v -1.359194 2.892506 -1.359194 +v -1.067911 2.892506 -1.598243 +v -0.735590 2.892506 -1.775873 +v -0.375000 2.892506 -1.885256 +v 0.000001 2.892506 -1.922191 +v 0.375002 2.892506 -1.885256 +v 0.735592 2.892506 -1.775872 +v 1.067913 2.892506 -1.598243 +v 1.359195 2.892506 -1.359194 +v 1.598244 2.892506 -1.067911 +v 1.775873 2.892506 -0.735589 +v 1.885256 2.892506 -0.375000 +v 1.922190 2.892506 0.000001 +v 1.885256 2.892506 0.375002 +v 1.775871 2.892506 0.735592 +v 1.598242 2.892506 1.067913 +v 1.359192 2.892506 1.359195 +v 0.735588 2.892507 1.775873 +v 0.374998 2.892507 1.885256 +v 0.000000 3.065863 2.319456 +v -0.452503 3.065863 2.274888 +v -0.887617 3.065863 2.142898 +v -1.288621 3.065863 1.928557 +v -1.640103 3.065863 1.640103 +v -1.928557 3.065863 1.288620 +v -2.142898 3.065863 0.887617 +v -2.274889 3.065863 0.452503 +v -2.319457 3.065863 -0.000000 +v -2.274889 3.065863 -0.452504 +v -2.142899 3.065863 -0.887618 +v -1.928557 3.065863 -1.288622 +v -1.640103 3.065863 -1.640104 +v -1.288621 3.065863 -1.928558 +v -0.887617 3.065863 -2.142899 +v -0.452503 3.065863 -2.274890 +v 0.000001 3.065863 -2.319457 +v 0.452505 3.065863 -2.274889 +v 0.887619 3.065863 -2.142899 +v 1.288622 3.065863 -1.928558 +v 1.640105 3.065863 -1.640103 +v 1.928559 3.065863 -1.288620 +v 2.142900 3.065863 -0.887617 +v 2.274889 3.065863 -0.452502 +v 2.319457 3.065863 0.000002 +v 2.274889 3.065863 0.452505 +v 2.142898 3.065863 0.887619 +v 1.928556 3.065863 1.288623 +v 1.640102 3.065863 1.640105 +v 1.288619 3.065863 1.928559 +v 0.887615 3.065863 2.142899 +v 0.452500 3.065863 2.274889 +v -0.000000 2.500000 0.872117 +v -0.170142 2.500000 0.855360 +v -0.333745 2.500000 0.805731 +v -0.484523 2.500000 0.725139 +v -0.616680 2.500000 0.616680 +v -0.725139 2.500000 0.484522 +v -0.805731 2.500000 0.333745 +v -0.855360 2.500000 0.170142 +v -0.872117 2.500000 -0.000000 +v -0.855360 2.500000 -0.170142 +v -0.805732 2.500000 -0.333745 +v -0.725139 2.500000 -0.484523 +v -0.616680 2.500000 -0.616680 +v -0.484522 2.500000 -0.725140 +v -0.333745 2.500000 -0.805732 +v -0.170142 2.500000 -0.855361 +v 0.000000 2.500000 -0.872118 +v 0.170142 2.500000 -0.855360 +v 0.333745 2.500000 -0.805732 +v 0.484523 2.500000 -0.725139 +v 0.616681 2.500000 -0.616680 +v 0.725140 2.500000 -0.484522 +v 0.805732 2.500000 -0.333745 +v 0.855361 2.500000 -0.170141 +v 0.872118 2.500000 0.000001 +v 0.855360 2.500000 0.170142 +v 0.805731 2.500000 0.333746 +v 0.725139 2.500000 0.484523 +v 0.616680 2.500000 0.616681 +v 0.484522 2.500000 0.725140 +v 0.333744 2.500000 0.805732 +v 0.170140 2.500000 0.855360 +v 0.000000 3.005863 2.319456 +v -0.452503 3.005863 2.274888 +v -0.887617 3.005863 2.142898 +v -1.288621 3.005863 1.928557 +v -1.640103 3.005863 1.640103 +v -1.928557 3.005863 1.288620 +v -2.142898 3.005863 0.887617 +v -2.274889 3.005863 0.452503 +v -2.319457 3.005863 -0.000000 +v -2.274889 3.005863 -0.452504 +v -2.142899 3.005863 -0.887618 +v -1.928557 3.005863 -1.288622 +v -1.640103 3.005863 -1.640104 +v -1.288621 3.005863 -1.928558 +v -0.887617 3.005863 -2.142899 +v -0.452503 3.005863 -2.274890 +v 0.000001 3.005863 -2.319457 +v 0.452505 3.005863 -2.274889 +v 0.887619 3.005863 -2.142899 +v 1.288622 3.005863 -1.928558 +v 1.640105 3.005863 -1.640103 +v 1.928559 3.005863 -1.288620 +v 2.142900 3.005863 -0.887617 +v 2.274889 3.005863 -0.452502 +v 2.319457 3.005863 0.000002 +v 2.274889 3.005863 0.452505 +v 2.142898 3.005863 0.887619 +v 1.928556 3.005863 1.288623 +v 1.640102 3.005863 1.640105 +v 1.288619 3.005863 1.928559 +v 0.887615 3.005863 2.142899 +v 0.452500 3.005863 2.274889 +v 0.180000 4.540001 0.000000 +v 0.000000 4.540001 0.180000 +v -0.180000 4.540001 0.000000 +v 0.000000 4.540001 -0.180000 +v 0.180000 4.600000 0.000000 +v 0.000000 4.600000 0.180000 +v -0.180000 4.600000 0.000000 +v 0.000000 4.600000 -0.180000 +v 0.000000 4.300000 -0.180000 +v -0.180000 4.300000 -0.000000 +v 0.000000 4.300000 0.180000 +v 0.180000 4.300000 -0.000000 +v 0.000000 4.240000 -0.180000 +v -0.180000 4.240000 -0.000000 +v 0.000000 4.240000 0.180000 +v 0.180000 4.240000 -0.000000 +v -0.045000 2.863667 -1.845236 +v -0.045000 2.842454 -1.739170 +v -0.045000 4.433444 -0.148180 +v 0.045000 4.497083 -0.211819 +v 0.045000 4.433444 -0.148180 +v 1.845236 2.863667 -0.045000 +v 0.211819 4.497083 -0.045000 +v 0.148180 4.433444 -0.045000 +v 0.148180 4.433444 0.045000 +v 0.045000 4.497083 0.211819 +v -0.045000 4.497083 0.211819 +v -0.045000 4.433444 0.148180 +v -1.739170 2.842454 0.045000 +v -1.739170 2.842454 -0.045000 +v -0.148180 4.433444 0.045000 +v -0.148180 4.433444 -0.045000 +v -0.000000 2.700000 0.726764 +v -0.141785 2.700000 0.712800 +v -0.712800 2.700000 0.141785 +v -0.726764 2.700000 -0.000000 +v -0.604283 2.700000 -0.403769 +v -0.403769 2.700000 -0.604283 +v -0.278121 2.700000 -0.671443 +v -0.141785 2.700000 -0.712800 +v 0.000000 2.700000 -0.726765 +v 0.278121 2.700000 -0.671443 +v 0.403769 2.700000 -0.604283 +v 0.671443 2.700000 -0.278120 +v 0.712800 2.700000 -0.141784 +v 0.726765 2.700000 0.000001 +v 0.712800 2.700000 0.141785 +v 0.671443 2.700000 0.278121 +v 0.403768 2.700000 0.604283 +v 0.278120 2.700000 0.671443 +v 1.067910 2.892506 1.598244 +v 0.000000 2.700000 0.000000 +v 0.000000 2.500000 0.000000 +vt 0.086937 0.673258 +vt 0.086937 0.660595 +vt 0.119538 0.584615 +vt 0.119538 0.749239 +vt 0.086937 0.664500 +vt 0.000000 0.664500 +vt 0.000000 0.584615 +vt 0.086937 0.584615 +vt 0.119538 0.660595 +vt 0.152140 0.584615 +vt 0.152140 0.749239 +vt 0.119538 0.673258 +vt 0.366905 0.630203 +vt 0.392986 0.630203 +vt 0.392986 0.675791 +vt 0.366905 0.675791 +vt 0.366905 0.584615 +vt 0.392986 0.584615 +vt 0.262603 0.649306 +vt 0.248819 0.633133 +vt 0.248819 0.601006 +vt 0.262603 0.585053 +vt 0.152140 0.649086 +vt 0.165971 0.632968 +vt 0.193634 0.632968 +vt 0.207466 0.649086 +vt 0.432107 0.791460 +vt 0.422327 0.791460 +vt 0.422327 0.584615 +vt 0.432107 0.584615 +vt 0.213614 0.373473 +vt 0.227918 0.380377 +vt 0.207651 0.458233 +vt 0.180702 0.445225 +vt 0.243103 0.383897 +vt 0.236260 0.464864 +vt 0.200741 0.363450 +vt 0.156449 0.426341 +vt 0.273771 0.204237 +vt 0.258586 0.200718 +vt 0.265429 0.119750 +vt 0.294038 0.126382 +vt 0.300948 0.363450 +vt 0.311896 0.350693 +vt 0.365866 0.402306 +vt 0.345240 0.426341 +vt 0.181192 0.248923 +vt 0.175267 0.265592 +vt 0.108455 0.241974 +vt 0.119617 0.210571 +vt 0.258586 0.383897 +vt 0.265429 0.464864 +vt 0.135823 0.182309 +vt 0.066623 0.177563 +vt 0.089373 0.137887 +vt 0.230370 0.534550 +vt 0.190208 0.525240 +vt 0.393234 0.241974 +vt 0.382071 0.210571 +vt 0.435066 0.177563 +vt 0.450737 0.221648 +vt 0.180702 0.139389 +vt 0.156449 0.158274 +vt 0.118328 0.104146 +vt 0.152376 0.077635 +vt 0.152376 0.506980 +vt 0.118328 0.480469 +vt 0.398925 0.309303 +vt 0.398925 0.275312 +vt 0.458725 0.268449 +vt 0.458725 0.316166 +vt 0.236260 0.119750 +vt 0.207651 0.126382 +vt 0.190208 0.059374 +vt 0.230370 0.050065 +vt 0.119617 0.374044 +vt 0.135823 0.402306 +vt 0.089373 0.446728 +vt 0.066623 0.407052 +vt 0.382071 0.374044 +vt 0.393234 0.342640 +vt 0.450737 0.362967 +vt 0.435066 0.407052 +vt 0.108455 0.342641 +vt 0.050952 0.362967 +vt 0.271319 0.050065 +vt 0.311481 0.059374 +vt 0.412316 0.446728 +vt 0.383361 0.480469 +vt 0.345240 0.158274 +vt 0.320987 0.139389 +vt 0.349313 0.077635 +vt 0.383361 0.104146 +vt 0.294038 0.458233 +vt 0.320987 0.445225 +vt 0.349313 0.506980 +vt 0.311481 0.525240 +vt 0.050952 0.221648 +vt 0.365866 0.182309 +vt 0.412316 0.137887 +vt 0.271319 0.534550 +vt 0.102764 0.309303 +vt 0.042964 0.316166 +vt 0.410748 0.065257 +vt 0.445688 0.105972 +vt 0.324013 0.573382 +vt 0.275550 0.584615 +vt 0.028549 0.153848 +vt 0.056001 0.105972 +vt 0.226138 0.584615 +vt 0.177676 0.573381 +vt 0.473140 0.153848 +vt 0.492049 0.207044 +vt 0.090940 0.065258 +vt 0.132025 0.033268 +vt 0.132025 0.551347 +vt 0.090940 0.519357 +vt 0.501689 0.263518 +vt 0.501689 0.321097 +vt 0.177676 0.011233 +vt 0.226138 0.000000 +vt 0.056001 0.478642 +vt 0.028549 0.430767 +vt 0.492049 0.377570 +vt 0.473140 0.430767 +vt 0.009640 0.377571 +vt 0.275550 0.000000 +vt 0.324013 0.011233 +vt 0.445688 0.478643 +vt 0.410748 0.519357 +vt 0.369664 0.033268 +vt 0.369664 0.551347 +vt 0.009640 0.207045 +vt 0.000000 0.321097 +vt 0.497310 0.633252 +vt 0.471229 0.633252 +vt 0.471229 0.584615 +vt 0.497310 0.584615 +vt 0.729886 0.397235 +vt 0.678168 0.573269 +vt 0.632825 0.551166 +vt 0.712837 0.388924 +vt 0.684444 0.221430 +vt 0.557313 0.105703 +vt 0.592017 0.065045 +vt 0.697493 0.206142 +vt 0.847295 0.259683 +vt 0.990425 0.207440 +vt 1.000000 0.263925 +vt 0.850895 0.280921 +vt 0.766439 0.401515 +vt 0.775384 0.584653 +vt 0.726305 0.584576 +vt 0.747985 0.401487 +vt 0.667130 0.259404 +vt 0.511264 0.206698 +vt 0.530046 0.153534 +vt 0.674192 0.239414 +vt 0.829981 0.221656 +vt 0.944376 0.106303 +vt 0.971643 0.154218 +vt 0.840233 0.239672 +vt 0.801588 0.389062 +vt 0.868864 0.551532 +vt 0.823520 0.573495 +vt 0.784539 0.397320 +vt 0.801588 0.194277 +vt 0.868864 0.033487 +vt 0.909672 0.065537 +vt 0.816932 0.206328 +vt 0.667130 0.323517 +vt 0.511264 0.377212 +vt 0.501689 0.320728 +vt 0.663530 0.302279 +vt 0.829981 0.361771 +vt 0.944376 0.478949 +vt 0.909672 0.519608 +vt 0.816932 0.377058 +vt 0.766439 0.181714 +vt 0.775384 0.000076 +vt 0.823520 0.011383 +vt 0.784539 0.185966 +vt 0.684444 0.361545 +vt 0.557312 0.478349 +vt 0.530045 0.430434 +vt 0.674192 0.343529 +vt 0.847295 0.323797 +vt 0.990425 0.377955 +vt 0.971643 0.431119 +vt 0.840233 0.343787 +vt 0.729886 0.185881 +vt 0.678168 0.011158 +vt 0.726305 0.000000 +vt 0.747986 0.181685 +vt 0.592017 0.519115 +vt 0.697493 0.376873 +vt 0.632825 0.033121 +vt 0.712837 0.194139 +vt 1.000000 0.321501 +vt 0.850895 0.302570 +vt 0.663530 0.280631 +vt 0.501689 0.263152 +vt 0.353864 0.955490 +vt 0.353864 1.000000 +vt 0.347344 1.000000 +vt 0.347344 0.955490 +vt 0.360384 0.792307 +vt 0.360384 0.849610 +vt 0.353864 0.849610 +vt 0.353864 0.792307 +vt 0.347344 0.629124 +vt 0.347344 0.679905 +vt 0.340823 0.679905 +vt 0.340823 0.629124 +vt 0.353864 0.904710 +vt 0.347344 0.904710 +vt 0.347344 0.849610 +vt 0.366905 0.957130 +vt 0.366905 0.999001 +vt 0.360384 0.999001 +vt 0.360384 0.957130 +vt 0.360384 0.679905 +vt 0.360384 0.735005 +vt 0.353864 0.735005 +vt 0.353864 0.679905 +vt 0.347344 0.792307 +vt 0.347344 0.735005 +vt 0.366905 0.854543 +vt 0.366905 0.908352 +vt 0.360384 0.908352 +vt 0.360384 0.854543 +vt 0.360384 0.584615 +vt 0.360384 0.629124 +vt 0.353864 0.629124 +vt 0.353864 0.584615 +vt 0.340823 0.955490 +vt 0.340823 0.904710 +vt 0.366905 0.684088 +vt 0.366905 0.740214 +vt 0.360384 0.740214 +vt 0.360384 0.684088 +vt 0.360384 0.955490 +vt 0.360384 1.000000 +vt 0.340823 0.849609 +vt 0.340823 0.792307 +vt 0.366905 0.631549 +vt 0.360384 0.631549 +vt 0.360384 0.904710 +vt 0.340823 0.735005 +vt 0.347344 0.584615 +vt 0.340823 0.584615 +vt 0.366905 0.797769 +vt 0.360384 0.797769 +vt 0.340823 1.000000 +vt 0.165971 0.600732 +vt 0.207466 0.584615 +vt 0.193634 0.600733 +vt 0.561953 0.607447 +vt 0.555433 0.607447 +vt 0.555433 0.584653 +vt 0.561953 0.584653 +vt 0.555433 0.616888 +vt 0.527770 0.616888 +vt 0.527770 0.584653 +vt 0.561953 0.630241 +vt 0.555433 0.630241 +vt 0.501689 0.630241 +vt 0.508209 0.630241 +vt 0.508209 0.654560 +vt 0.501689 0.654560 +vt 0.521250 0.630241 +vt 0.527770 0.630241 +vt 0.527770 0.653035 +vt 0.521250 0.653035 +vt 0.207466 0.648867 +vt 0.221250 0.632914 +vt 0.221250 0.600787 +vt 0.514729 0.630241 +vt 0.514729 0.653035 +vt 0.514729 0.654560 +vt 0.568474 0.607447 +vt 0.568474 0.630241 +vt 0.568474 0.584653 +vt 0.527770 0.649234 +vt 0.527770 0.617108 +vt 0.555339 0.616888 +vt 0.555339 0.649015 +vt 0.086937 0.677078 +vt 0.000000 0.677078 +vt 0.086937 0.748120 +vt 0.000000 0.748120 +vt 0.461449 0.584615 +vt 0.471229 0.786088 +vt 0.461449 0.786088 +vt 0.272384 0.592213 +vt 0.282164 0.584615 +vt 0.282164 0.877139 +vt 0.272384 0.877139 +vt 0.402766 0.808169 +vt 0.392986 0.808169 +vt 0.402766 0.584615 +vt 0.291945 0.584615 +vt 0.301725 0.592213 +vt 0.301725 0.877139 +vt 0.291945 0.877139 +vt 0.412547 0.791461 +vt 0.412547 0.584615 +vt 0.331055 0.592176 +vt 0.340823 0.876787 +vt 0.331055 0.876760 +vt 0.441888 0.584615 +vt 0.451668 0.584615 +vt 0.451668 0.786088 +vt 0.441888 0.786088 +vt 0.311506 0.584615 +vt 0.321286 0.592213 +vt 0.321286 0.877139 +vt 0.311506 0.877139 +vt 0.402766 0.791460 +vt 0.311506 0.869541 +vt 0.301725 0.584615 +vt 0.291945 0.592213 +vt 0.441888 0.791460 +vt 0.262603 0.592213 +vt 0.272384 0.584615 +vt 0.262604 0.877139 +vt 0.321286 0.584615 +vt 0.321286 0.876787 +vt 0.200741 0.221165 +vt 0.189793 0.233922 +vt 0.329443 0.283287 +vt 0.326422 0.265592 +vt 0.227918 0.204237 +vt 0.213614 0.211142 +vt 0.189793 0.350692 +vt 0.326422 0.319023 +vt 0.329443 0.301328 +vt 0.243103 0.200718 +vt 0.320497 0.335691 +vt 0.172246 0.301328 +vt 0.175267 0.319023 +vt 0.288075 0.211141 +vt 0.288075 0.373473 +vt 0.172246 0.283287 +vt 0.102764 0.275312 +vt 0.311896 0.233922 +vt 0.300948 0.221165 +vt 0.273771 0.380377 +vt 0.320497 0.248923 +vt 0.181192 0.335691 +vt 0.042964 0.268449 +vt 0.000000 0.263518 +vt 0.250844 0.292307 +vt 0.757212 0.291600 +vt 0.501689 0.584653 +f 3/1 4/2 7/3 8/4 +f 1/5 3/6 8/7 6/8 +f 1/9 6/10 5/11 2/12 +f 14/13 11/14 12/15 13/16 +f 15/17 10/18 11/14 14/13 +f 16/19 217/20 214/21 13/22 +f 11/23 208/24 209/25 12/26 +f 30/27 29/28 31/29 32/30 +f 34/31 35/32 51/33 50/34 +f 35/32 36/35 52/36 51/33 +f 33/37 34/31 50/34 49/38 +f 42/39 43/40 68/41 67/42 +f 38/43 39/44 57/45 56/46 +f 44/47 45/48 75/49 74/50 +f 36/35 37/51 53/52 52/36 +f 73/53 74/50 106/54 105/55 +f 51/33 52/36 84/56 83/57 +f 62/58 63/59 95/60 94/61 +f 71/62 72/63 104/64 103/65 +f 49/38 50/34 82/66 81/67 +f 60/68 61/69 93/70 92/71 +f 69/72 70/73 102/74 101/75 +f 47/76 48/77 80/78 79/79 +f 58/80 59/81 91/82 90/83 +f 78/84 47/76 79/79 109/85 +f 67/42 68/41 100/86 99/87 +f 56/46 57/45 89/88 88/89 +f 65/90 66/91 98/92 97/93 +f 54/94 55/95 87/96 86/97 +f 74/50 75/49 107/98 106/54 +f 63/59 64/99 96/100 95/60 +f 52/36 53/52 85/101 84/56 +f 72/63 73/53 105/55 104/64 +f 50/34 51/33 83/57 82/66 +f 61/69 62/58 94/61 93/70 +f 70/73 71/62 103/65 102/74 +f 48/77 49/38 81/67 80/78 +f 59/81 60/68 92/71 91/82 +f 68/41 69/72 101/75 100/86 +f 57/45 58/80 90/83 89/88 +f 77/102 78/84 109/85 108/103 +f 66/91 67/42 99/87 98/92 +f 55/95 56/46 88/89 87/96 +f 64/99 65/90 97/93 96/100 +f 53/52 54/94 86/97 85/101 +f 96/100 97/93 128/104 127/105 +f 85/101 86/97 117/106 116/107 +f 105/55 106/54 137/108 136/109 +f 83/57 84/56 115/110 114/111 +f 94/61 95/60 126/112 125/113 +f 103/65 104/64 135/114 134/115 +f 81/67 82/66 113/116 112/117 +f 92/71 93/70 124/118 123/119 +f 101/75 102/74 133/120 132/121 +f 79/79 80/78 111/122 110/123 +f 90/83 91/82 122/124 121/125 +f 109/85 79/79 110/123 141/126 +f 99/87 100/86 131/127 130/128 +f 88/89 89/88 120/129 119/130 +f 97/93 98/92 129/131 128/104 +f 86/97 87/96 118/132 117/106 +f 106/54 107/98 138/133 137/108 +f 95/60 96/100 127/105 126/112 +f 84/56 85/101 116/107 115/110 +f 104/64 105/55 136/109 135/114 +f 82/66 83/57 114/111 113/116 +f 93/70 94/61 125/113 124/118 +f 102/74 103/65 134/115 133/120 +f 80/78 81/67 112/117 111/122 +f 91/82 92/71 123/119 122/124 +f 100/86 101/75 132/121 131/127 +f 89/88 90/83 121/125 120/129 +f 108/103 109/85 141/126 140/134 +f 98/92 99/87 130/128 129/131 +f 87/96 88/89 119/130 118/132 +f 16/135 9/136 10/137 15/138 +f 168/139 200/140 201/141 169/142 +f 146/143 178/144 179/145 147/146 +f 157/147 189/148 190/149 158/150 +f 166/151 198/152 199/153 167/154 +f 144/155 176/156 177/157 145/158 +f 155/159 187/160 188/161 156/162 +f 164/163 196/164 197/165 165/166 +f 153/167 185/168 186/169 154/170 +f 173/171 205/172 174/173 142/174 +f 162/175 194/176 195/177 163/178 +f 151/179 183/180 184/181 152/182 +f 171/183 203/184 204/185 172/186 +f 160/187 192/188 193/189 161/190 +f 149/191 181/192 182/193 150/194 +f 169/142 201/141 202/195 170/196 +f 147/146 179/145 180/197 148/198 +f 158/150 190/149 191/199 159/200 +f 167/154 199/153 200/140 168/139 +f 145/158 177/157 178/144 146/143 +f 156/162 188/161 189/148 157/147 +f 165/166 197/165 198/152 166/151 +f 143/201 175/202 176/156 144/155 +f 154/170 186/169 187/160 155/159 +f 163/178 195/177 196/164 164/163 +f 152/182 184/181 185/168 153/167 +f 172/186 204/185 205/172 173/171 +f 161/190 193/189 194/176 162/175 +f 150/194 182/193 183/180 151/179 +f 170/196 202/195 203/184 171/183 +f 159/200 191/199 192/188 160/187 +f 148/198 180/197 181/192 149/191 +f 142/174 174/173 175/202 143/201 +f 137/203 138/204 202/205 201/206 +f 126/207 127/208 191/209 190/210 +f 115/211 116/212 180/213 179/214 +f 135/209 136/215 200/216 199/217 +f 113/218 114/219 178/220 177/221 +f 124/222 125/223 189/224 188/225 +f 133/224 134/210 198/226 197/227 +f 111/228 112/229 176/230 175/231 +f 122/232 123/233 187/234 186/235 +f 131/234 132/225 196/212 195/211 +f 120/216 121/206 185/236 184/237 +f 140/238 141/239 205/240 204/241 +f 129/242 130/243 194/204 193/203 +f 118/226 119/217 183/244 182/245 +f 138/17 139/246 203/247 202/232 +f 127/208 128/248 192/215 191/209 +f 116/212 117/227 181/249 180/213 +f 136/215 137/203 201/206 200/216 +f 114/250 115/211 179/214 178/251 +f 125/223 126/207 190/210 189/224 +f 134/210 135/209 199/217 198/226 +f 112/229 113/218 177/221 176/230 +f 123/233 124/222 188/225 187/234 +f 132/225 133/224 197/227 196/212 +f 110/252 111/228 175/231 174/253 +f 121/206 122/205 186/254 185/236 +f 141/239 110/252 174/253 205/240 +f 130/235 131/234 195/211 194/250 +f 119/217 120/216 184/237 183/244 +f 139/246 140/238 204/241 203/247 +f 128/248 129/242 193/203 192/215 +f 117/227 118/226 182/245 181/249 +f 10/10 207/255 208/24 11/23 +f 9/256 206/257 207/255 10/10 +f 12/26 209/25 206/257 9/256 +f 208/258 212/259 213/260 209/261 +f 213/262 212/263 211/264 210/260 +f 207/265 211/266 212/259 208/258 +f 206/267 210/268 211/269 207/270 +f 209/271 213/272 210/273 206/274 +f 15/275 216/276 217/20 16/19 +f 14/256 215/277 216/276 15/275 +f 13/22 214/21 215/277 14/256 +f 217/278 221/271 218/274 214/279 +f 216/280 220/269 221/268 217/278 +f 215/258 219/281 220/282 216/265 +f 214/261 218/283 219/281 215/258 +f 219/284 218/285 221/286 220/287 +f 1/5 2/288 4/289 3/6 +f 2/288 5/290 7/291 4/289 +f 234/292 235/137 237/293 236/294 +f 18/295 17/296 225/297 226/298 +f 223/299 18/300 226/18 224/301 +f 222/302 223/303 224/304 19/305 +f 17/28 222/306 19/307 225/29 +f 22/308 21/251 23/309 230/310 +f 20/311 22/312 230/313 229/314 +f 227/315 20/316 229/317 228/318 +f 21/301 227/307 228/306 23/319 +f 27/320 26/304 232/321 233/315 +f 25/294 27/313 233/312 28/292 +f 24/296 25/322 28/305 231/297 +f 26/323 24/27 231/30 232/311 +f 235/324 30/325 32/298 237/326 +f 29/327 234/308 236/310 31/328 +f 252/329 253/330 73/53 72/63 +f 244/331 245/332 62/58 61/69 +f 250/333 251/334 71/62 70/73 +f 239/335 33/37 49/38 48/77 +f 40/336 243/337 60/68 59/81 +f 43/40 249/338 69/72 68/41 +f 39/44 242/339 58/80 57/45 +f 255/340 46/341 78/84 77/102 +f 248/342 42/39 67/42 66/91 +f 241/343 38/43 56/46 55/95 +f 45/48 254/344 76/345 75/49 +f 41/346 247/347 65/90 64/99 +f 37/51 240/348 54/94 53/52 +f 253/330 44/47 74/50 73/53 +f 245/332 246/349 63/59 62/58 +f 251/334 252/329 72/63 71/62 +f 243/337 244/331 61/69 60/68 +f 249/338 250/333 70/73 69/72 +f 238/350 239/335 48/77 47/76 +f 242/339 40/336 59/81 58/80 +f 46/341 238/350 47/76 78/84 +f 254/344 255/340 77/102 76/345 +f 247/347 248/342 66/91 65/90 +f 240/348 241/343 55/95 54/94 +f 246/349 41/346 64/99 63/59 +f 75/49 76/345 256/351 107/98 +f 107/98 256/351 139/352 138/133 +f 256/351 108/103 140/134 139/352 +f 76/345 77/102 108/103 256/351 +f 45/48 44/47 253/330 257/353 +f 246/349 245/332 244/331 257/353 +f 241/343 240/348 37/51 257/353 +f 238/350 46/341 255/340 257/353 +f 42/39 248/342 247/347 257/353 +f 34/31 33/37 257/353 35/32 +f 40/336 242/339 39/44 257/353 +f 250/333 249/338 257/353 251/334 +f 36/35 35/32 257/353 37/51 +f 41/346 246/349 257/353 247/347 +f 43/40 42/39 257/353 249/338 +f 243/337 40/336 257/353 244/331 +f 252/329 251/334 257/353 253/330 +f 255/340 254/344 45/48 257/353 +f 239/335 238/350 257/353 33/37 +f 38/43 241/343 257/353 39/44 +f 158/150 159/200 160/187 258/354 +f 149/191 150/194 258/354 148/198 +f 169/142 170/196 258/354 168/139 +f 147/146 148/198 258/354 146/143 +f 156/162 157/147 158/150 258/354 +f 167/154 168/139 258/354 166/151 +f 145/158 146/143 258/354 144/155 +f 154/170 155/159 156/162 258/354 +f 165/166 166/151 258/354 164/163 +f 143/201 144/155 258/354 142/174 +f 152/182 153/167 154/170 258/354 +f 163/178 164/163 258/354 162/175 +f 171/183 172/186 258/354 170/196 +f 150/194 151/179 152/182 258/354 +f 161/190 162/175 258/354 160/187 +f 172/186 173/171 142/174 258/354 +f 13/355 12/264 9/272 16/267 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telefork.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telefork.obj new file mode 100644 index 00000000..6924aae3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telefork.obj @@ -0,0 +1,99 @@ +# Blender v2.73 (sub 0) OBJ File: 'telescope.blend' +# www.blender.org +o main +v -0.400000 1.800000 0.200000 +v 0.400000 1.800000 0.200000 +v -0.400000 1.800000 -0.200000 +v 0.400000 1.800000 -0.200000 +v 0.600000 1.800000 0.200000 +v 0.600000 1.800000 -0.200000 +v -0.600000 1.800000 0.200000 +v -0.600000 1.800000 -0.200000 +v -0.400000 2.050000 0.200000 +v 0.400000 2.050000 0.200000 +v -0.400000 2.050000 -0.200000 +v 0.400000 2.050000 -0.200000 +v 0.600000 2.050000 0.200000 +v 0.600000 2.050000 -0.200000 +v -0.600000 2.050000 0.200000 +v -0.600000 2.050000 -0.200000 +v -0.400000 2.400000 0.075000 +v 0.400000 2.400000 0.075000 +v -0.400000 2.400000 -0.075000 +v 0.400000 2.400000 -0.075000 +v 0.500000 2.400000 0.075000 +v 0.500000 2.400000 -0.075000 +v -0.500000 2.400000 0.075000 +v -0.500000 2.400000 -0.075000 +vt 0.855500 0.500000 +vt 0.644641 0.500000 +vt 0.644642 0.100000 +vt 0.855500 0.100000 +vt 0.644642 0.000000 +vt 0.855500 0.000000 +vt 0.855500 0.600000 +vt 0.644641 0.600000 +vt 0.000000 1.000000 +vt 0.000000 0.600000 +vt 0.210858 0.600000 +vt 0.210858 1.000000 +vt 0.130554 0.600000 +vt 0.130554 0.500000 +vt 0.322321 0.500000 +vt 0.322321 0.550000 +vt 0.514088 0.500000 +vt 0.514088 0.600000 +vt 0.000000 0.500000 +vt 0.421717 0.903336 +vt 0.210858 0.903336 +vt 0.210858 0.778870 +vt 0.421717 0.778870 +vt 0.000000 0.100000 +vt 0.000000 0.000000 +vt 0.130554 0.000000 +vt 0.130554 0.100000 +vt 0.514088 0.100000 +vt 0.514088 0.000000 +vt 0.632575 0.903336 +vt 0.632575 0.778870 +vt 0.855500 0.075000 +vt 0.908215 0.000000 +vt 0.908215 0.075000 +vt 0.908215 0.150000 +vt 0.855500 0.150000 +vt 0.276752 0.600000 +vt 0.355824 0.600000 +vt 0.322321 0.050000 +vt 0.322321 0.100000 +vt 0.487610 0.600000 +vt 0.566682 0.600000 +vt 1.000000 0.600000 +vt 1.000000 0.800000 +vt 0.816288 0.737500 +vt 0.816288 0.662500 +vt 0.816287 0.600000 +vt 0.816288 0.800000 +vt 0.632575 0.737500 +vt 0.632575 0.662500 +f 1/1 3/2 4/3 2/4 +f 4/3 6/5 5/6 2/4 +f 1/1 7/7 8/8 3/2 +f 9/9 10/10 12/11 11/12 +f 15/13 9/14 17/15 23/16 +f 11/17 16/18 24/16 19/15 +f 3/2 8/8 16/18 11/17 +f 7/10 1/19 9/14 15/13 +f 8/20 7/21 15/22 16/23 +f 2/24 5/25 13/26 10/27 +f 6/5 4/3 12/28 14/29 +f 5/30 6/20 14/23 13/31 +f 4/3 3/2 11/17 12/28 +f 1/19 2/24 10/27 9/14 +f 20/32 18/6 21/33 22/34 +f 17/34 19/35 24/36 23/32 +f 16/23 15/22 23/37 24/38 +f 10/27 13/26 21/39 18/40 +f 14/29 12/28 20/40 22/39 +f 13/31 14/23 22/41 21/42 +f 12/43 10/44 18/45 20/46 +f 9/47 11/48 19/49 17/50 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telesupport.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telesupport.obj new file mode 100644 index 00000000..41e255cc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/telesupport.obj @@ -0,0 +1,85 @@ +# Blender v2.73 (sub 0) OBJ File: 'telescope.blend' +# www.blender.org +o main +v -0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 -0.500000 +v -0.500000 1.000000 0.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v 0.125000 2.880000 -0.125000 +v -0.125000 2.880000 -0.125000 +v 0.125000 2.880000 0.125000 +v -0.125000 2.880000 0.125000 +v -0.125000 2.430000 0.125000 +v 0.125000 2.430000 0.125000 +v -0.125000 2.430000 -0.125000 +v 0.125000 2.430000 -0.125000 +v 0.375000 2.13000 -0.375000 +v -0.375000 2.13000 -0.375000 +v 0.375000 2.13000 0.375000 +v -0.375000 2.13000 0.375000 +v -0.375000 1.000000 0.375000 +v 0.375000 1.000000 0.375000 +v -0.375000 1.000000 -0.375000 +v 0.375000 1.000000 -0.375000 +vt 0.333333 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.666667 +vt 0.333333 0.666667 +vt 0.333333 0.333333 +vt 0.666667 0.333333 +vt 0.666667 0.666667 +vt 0.000000 0.333333 +vt 0.000000 0.000000 +vt 0.333333 0.000000 +vt 0.666667 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.333333 +vt 0.666667 0.900000 +vt 0.583333 0.900000 +vt 0.583333 0.783333 +vt 0.666667 0.783333 +vt 0.916667 0.566667 +vt 0.833334 0.566667 +vt 0.833333 0.450000 +vt 0.916667 0.450000 +vt 0.583333 0.666667 +vt 0.833334 0.650000 +vt 0.916667 0.650000 +vt 0.583333 0.916667 +vt 0.500000 0.833333 +vt 0.500000 0.750000 +vt 0.416667 0.750000 +vt 0.333333 0.916667 +vt 0.416667 0.833333 +vt 0.833334 0.333333 +vt 0.916667 0.333333 +vt 0.666667 0.583333 +vt 0.750000 0.333333 +vt 0.750000 0.583333 +vt 0.833333 0.583333 +vt 0.833333 0.833333 +vt 0.750000 0.833333 +vt 0.666667 0.833333 +f 1/1 3/2 4/3 2/4 +f 5/4 6/5 8/6 7/7 +f 3/8 7/9 8/10 4/5 +f 4/5 8/4 6/3 2/8 +f 2/6 6/11 5/12 1/13 +f 1/6 5/5 7/10 3/11 +f 15/14 13/15 12/16 10/17 +f 13/18 14/19 11/20 12/21 +f 14/22 16/7 9/17 11/16 +f 12/23 11/19 9/18 10/24 +f 17/22 18/25 15/26 16/27 +f 19/4 17/22 16/27 14/28 +f 20/29 19/4 14/28 13/30 +f 16/21 15/20 10/31 9/32 +f 21/33 22/6 19/34 20/35 +f 22/36 24/37 17/38 19/35 +f 24/39 23/33 18/35 17/38 +f 18/25 20/29 13/30 15/26 +f 20/35 18/34 23/31 21/36 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/thruster.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/thruster.obj new file mode 100644 index 00000000..3d04d711 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/models/thruster.obj @@ -0,0 +1,456 @@ +# Blender v2.69 (sub 0) OBJ File: 'thruster.blend' +# www.blender.org +o Main +v -0.124558 -0.878859 0.878859 +v -0.124558 -0.878859 -0.878859 +v 0.124558 -0.878859 -0.878859 +v 0.124558 -0.878859 0.878859 +v -0.124558 0.878859 0.878859 +v -0.124558 0.878859 -0.878859 +v 0.124558 0.878859 -0.878859 +v 0.124558 0.878859 0.878859 +v 0.950521 -0.401125 0.508652 +v 0.731779 -0.401125 0.468334 +v 0.707717 -0.460691 0.332908 +v 1.009741 -0.460691 0.332908 +v 0.950521 -0.217566 0.508652 +v 0.731779 -0.217566 0.468334 +v 0.707717 -0.158667 0.332908 +v 1.009741 -0.158667 0.332908 +v 0.731779 -0.238798 0.468334 +v 0.998012 -0.167390 -0.162018 +v 0.719568 -0.167390 -0.162018 +v 0.731779 -0.377759 0.468334 +v 0.998012 -0.448604 -0.162018 +v 0.719568 -0.448604 -0.162018 +v 0.914262 -0.252598 0.478164 +v 0.803270 -0.252598 0.478164 +v 0.914262 -0.364694 0.478164 +v 0.803270 -0.364694 0.478164 +v 0.620544 -0.548352 -0.038430 +v 1.096878 -0.548352 -0.038430 +v 0.620544 -0.072018 -0.038430 +v 1.096878 -0.072018 -0.038430 +v 1.078385 -0.085617 -0.293149 +v 0.639240 -0.085617 -0.293149 +v 1.078385 -0.529130 -0.293149 +v 0.639240 -0.529130 -0.293149 +v 0.572556 -0.596610 -0.439430 +v 1.144846 -0.596610 -0.439430 +v 0.572556 -0.024319 -0.439430 +v 1.144846 -0.024319 -0.439430 +v 1.122629 -0.040602 -0.439430 +v 0.595020 -0.040602 -0.439430 +v 1.122629 -0.573460 -0.439430 +v 0.595020 -0.573460 -0.439430 +v 0.565091 -0.604116 -0.560299 +v 1.152308 -0.604116 -0.560299 +v 0.565091 -0.016899 -0.560299 +v 1.152308 -0.016899 -0.560299 +v 1.129525 -0.016899 -0.560299 +v 1.129525 -0.604116 -0.560299 +v 0.588119 -0.604116 -0.560299 +v 0.588119 -0.016899 -0.560299 +v 1.129512 -0.033600 -0.560299 +v 0.588141 -0.033600 -0.560299 +v 1.129512 -0.580355 -0.560299 +v 0.588141 -0.580355 -0.560299 +v 0.878910 -0.401125 0.613541 +v 0.766962 -0.401125 0.656220 +v 0.878910 -0.217566 0.613541 +v 0.766962 -0.217566 0.656220 +v 0.611368 -0.401125 0.668000 +v 0.611368 -0.401125 0.459767 +v 0.611368 -0.217566 0.668000 +v 0.611368 -0.217566 0.459767 +v 0.330999 -0.441340 0.833784 +v 0.330999 -0.441340 0.293945 +v 0.330999 0.442717 0.833784 +v 0.330999 0.442717 0.293945 +v 0.104206 -0.441340 0.833784 +v 0.104206 -0.441340 0.293945 +v 0.104206 0.442717 0.833784 +v 0.104206 0.442717 0.293945 +v 0.950521 0.210995 0.508652 +v 0.731779 0.210995 0.468334 +v 0.707717 0.151429 0.332908 +v 1.009742 0.151429 0.332908 +v 0.950521 0.394554 0.508652 +v 0.731779 0.394554 0.468334 +v 0.707717 0.453453 0.332908 +v 1.009742 0.453453 0.332908 +v 0.731779 0.373322 0.468334 +v 0.998012 0.444730 -0.162018 +v 0.719568 0.444730 -0.162018 +v 0.731779 0.234361 0.468334 +v 0.998012 0.163517 -0.162018 +v 0.719568 0.163517 -0.162018 +v 0.914263 0.359522 0.478164 +v 0.803271 0.359522 0.478164 +v 0.914263 0.247426 0.478164 +v 0.803271 0.247426 0.478164 +v 0.620544 0.063768 -0.038430 +v 1.096878 0.063768 -0.038430 +v 0.620544 0.540102 -0.038430 +v 1.096878 0.540102 -0.038430 +v 1.078385 0.526503 -0.293149 +v 0.639240 0.526503 -0.293149 +v 1.078385 0.082990 -0.293149 +v 0.639240 0.082990 -0.293149 +v 0.572556 0.015510 -0.439430 +v 1.144847 0.015510 -0.439430 +v 0.572556 0.587801 -0.439430 +v 1.144847 0.587801 -0.439430 +v 1.122629 0.571518 -0.439430 +v 0.595020 0.571518 -0.439430 +v 1.122629 0.038660 -0.439430 +v 0.595020 0.038660 -0.439430 +v 0.565091 0.008004 -0.560299 +v 1.152308 0.008004 -0.560299 +v 0.565091 0.595221 -0.560299 +v 1.152308 0.595221 -0.560299 +v 1.129525 0.595221 -0.560299 +v 1.129525 0.008004 -0.560299 +v 0.588120 0.008004 -0.560299 +v 0.588120 0.595221 -0.560299 +v 1.129512 0.578520 -0.560299 +v 0.588141 0.578520 -0.560299 +v 1.129512 0.031765 -0.560299 +v 0.588141 0.031765 -0.560299 +v 0.878910 0.210995 0.613541 +v 0.766962 0.210995 0.656220 +v 0.878910 0.394554 0.613541 +v 0.766962 0.394554 0.656220 +v 0.611368 0.210995 0.668000 +v 0.611368 0.210995 0.459767 +v 0.611368 0.394554 0.668000 +v 0.611368 0.394554 0.459767 +v 0.520600 -0.003953 0.722954 +v 0.520600 -0.003953 0.406063 +vt 0.513501 0.517501 +vt 0.990499 0.517501 +vt 0.513501 0.994500 +vt 0.514419 0.510419 +vt 0.981581 0.510419 +vt 0.514419 0.977581 +vt 0.522419 0.014419 +vt 0.989581 0.014419 +vt 0.522419 0.481581 +vt 0.981581 0.977581 +vt 0.989581 0.481581 +vt 0.522099 0.013779 +vt 0.989261 0.013779 +vt 0.522099 0.480941 +vt 0.989261 0.480941 +vt 0.013766 0.517766 +vt 0.482234 0.517766 +vt 0.013766 0.986234 +vt 0.482234 0.986234 +vt 0.990499 0.994500 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.998077 0.061985 +vn 0.000000 -0.848532 -0.529144 +vn 0.957220 0.000000 -0.289363 +vn 0.852723 0.000000 -0.522363 +vn -0.055379 0.952186 0.300456 +vn 0.000000 -0.915369 0.402616 +vn 0.947644 0.000000 0.319329 +vn -0.852593 0.000000 -0.522575 +vn 0.000000 0.991519 -0.129960 +vn 0.000000 0.852147 -0.523302 +vn 0.991561 0.000000 -0.129644 +vn -0.991551 0.000000 -0.129716 +vn 0.000000 -0.991258 -0.131936 +vn 0.000000 0.973840 0.227236 +vn 0.000000 0.992999 0.118119 +vn 0.000000 0.998377 -0.056957 +vn 0.973556 0.000000 0.228451 +vn 0.000000 -0.955768 -0.294120 +vn 0.000000 0.957021 -0.290019 +vn 0.000000 0.998121 0.061271 +vn -0.957175 0.000000 -0.289510 +vn -0.000000 -0.973249 0.229754 +vn -0.000000 -0.992837 0.119480 +vn -0.998383 0.000000 -0.056849 +vn 0.992921 0.000000 0.118775 +vn 0.998100 0.000000 0.061616 +vn 0.998385 0.000000 -0.056817 +vn -0.992915 0.000000 0.118824 +vn 0.000000 -0.998326 -0.057836 +vn -0.998098 0.000000 0.061641 +vn 0.356233 0.000000 0.934397 +vn 0.825877 0.000000 0.563850 +vn 0.075488 0.000000 0.997147 +vn 0.070967 0.000000 -0.997479 +vn 0.921231 -0.389017 0.000000 +vn 0.517911 0.000000 0.855434 +vn 0.509213 0.000000 -0.860641 +vn 0.141982 -0.989869 0.000000 +vn 0.000000 -0.915368 0.402617 +vn 0.957219 0.000000 -0.289363 +vn 0.000000 0.852148 -0.523302 +vn 0.991561 0.000000 -0.129645 +vn 0.973556 0.000000 0.228450 +vn 0.000000 0.957021 -0.290018 +vn -0.957175 0.000000 -0.289511 +vn -0.998383 0.000000 -0.056847 +vn 0.998100 0.000000 0.061615 +vn -0.973534 0.000000 0.228541 +vn 0.000000 -0.998326 -0.057835 +vn -0.984580 0.000000 0.174936 +vn 0.356232 0.000000 0.934397 +vn 0.000000 1.000000 -0.000002 +vn -0.000001 1.000000 0.000000 +vn 0.075489 0.000000 0.997147 +vn 0.169303 0.985564 0.000000 +vn 0.509075 0.000042 -0.860722 +vn 0.509322 0.002665 0.860572 +vn 0.920358 0.391077 0.000000 +vn -0.055379 0.952187 0.300456 +vn 0.504652 0.000000 0.863323 +vn 0.509002 0.000000 -0.860766 +vn 0.000000 -0.998077 0.061986 +vn 0.000000 0.917025 0.398830 +vn -0.055946 -0.951176 0.303536 +vn 0.000000 0.852148 -0.523301 +vn 0.000000 0.998377 -0.056956 +vn 0.973555 0.000000 0.228451 +vn -0.000000 -0.992837 0.119481 +vn 0.356234 0.000000 0.934397 +vn 0.075490 0.000000 0.997147 +vn 0.921231 -0.389016 0.000000 +vn 0.509269 -0.002691 0.860603 +vn 0.509075 -0.000043 -0.860722 +vn -0.055947 -0.951176 0.303536 +vn 0.000000 0.993000 0.118119 +vn -0.000000 0.998121 0.061272 +vn 0.070966 0.000000 -0.997479 +vn 0.509214 0.000000 -0.860640 +vn 0.517914 0.000000 0.855433 +vn -0.984580 0.000000 0.174935 +vn 0.000000 0.917025 0.398829 +f 5/1/1 6/2/1 1/3/1 +f 6/1/2 7/2/2 2/3/2 +f 7/1/3 8/2/3 3/3/3 +f 8/1/4 5/2/4 4/3/4 +f 1/1/5 2/2/5 4/3/5 +f 8/1/6 7/2/6 5/3/6 +f 44/4/7 36/5/7 43/6/7 +f 18/7/8 19/8/8 31/9/8 +f 32/7/9 34/8/9 40/9/9 +f 19/7/10 22/8/10 32/9/10 +f 14/4/11 13/5/11 16/10/11 +f 11/4/12 12/5/12 10/6/12 +f 16/4/13 13/5/13 12/6/13 +f 21/7/14 18/8/14 31/11/14 +f 21/7/15 22/8/15 26/11/15 +f 22/7/16 21/8/16 33/11/16 +f 22/7/17 19/8/17 26/9/17 +f 18/7/18 21/8/18 25/11/18 +f 19/7/19 18/8/19 24/9/19 +f 15/4/20 16/5/20 29/6/20 +f 30/4/21 38/5/21 37/10/21 +f 42/7/22 41/8/22 53/11/22 +f 12/4/23 28/5/23 16/6/23 +f 31/7/24 32/8/24 39/9/24 +f 34/7/25 33/8/25 41/11/25 +f 38/4/26 46/5/26 45/10/26 +f 33/7/27 31/8/27 39/11/27 +f 27/4/28 28/5/28 12/10/28 +f 28/4/29 27/5/29 35/10/29 +f 50/4/2 47/5/2 51/10/2 +f 41/7/30 39/8/30 51/11/30 +f 38/4/31 30/5/31 36/6/31 +f 46/4/32 38/5/32 44/6/32 +f 40/7/33 42/8/33 52/9/33 +f 91/4/34 99/5/34 97/10/34 +f 39/7/35 40/8/35 51/9/35 +f 99/4/36 107/5/36 105/10/36 +f 58/12/37 56/13/37 57/14/37 +f 10/12/5 56/14/5 60/13/5 +f 55/12/5 56/14/5 9/13/5 +f 55/12/38 9/14/38 57/13/38 +f 57/12/6 13/14/6 58/13/6 +f 62/12/6 61/14/6 58/15/6 +f 58/12/39 61/13/39 56/14/39 +f 60/12/40 62/14/40 10/13/40 +f 48/4/2 49/5/2 53/6/2 +f 66/16/2 64/17/2 70/18/2 +f 125/16/41 126/17/41 122/19/41 +f 70/16/6 69/17/6 66/18/6 +f 69/16/4 67/17/4 65/18/4 +f 61/16/42 125/17/42 59/18/42 +f 64/16/5 63/17/5 68/18/5 +f 62/16/43 60/18/43 126/17/43 +f 59/16/44 63/18/44 64/19/44 +f 35/4/36 37/5/36 43/6/36 +f 73/4/45 74/5/45 72/6/45 +f 80/7/8 81/8/8 93/9/8 +f 94/7/46 96/8/46 102/9/46 +f 81/7/10 84/8/10 94/9/10 +f 74/4/28 73/5/28 89/10/28 +f 78/4/13 75/5/13 74/6/13 +f 83/7/14 80/8/14 93/11/14 +f 83/7/15 84/8/15 88/11/15 +f 84/7/47 83/8/47 95/11/47 +f 84/7/48 81/8/48 88/9/48 +f 80/7/18 83/8/18 87/11/18 +f 81/7/19 80/8/19 86/9/19 +f 92/4/21 100/5/21 99/10/21 +f 104/7/22 103/8/22 115/11/22 +f 74/4/49 90/5/49 78/6/49 +f 93/7/24 94/8/24 101/9/24 +f 96/7/50 95/8/50 103/11/50 +f 100/4/26 108/5/26 107/10/26 +f 95/7/51 93/8/51 101/11/51 +f 90/4/29 89/5/29 97/10/29 +f 98/4/7 97/5/7 105/10/7 +f 112/4/2 109/5/2 113/10/2 +f 103/7/52 101/8/52 113/11/52 +f 100/4/31 92/5/31 98/6/31 +f 108/4/53 100/5/53 106/6/53 +f 102/7/33 104/8/33 114/9/33 +f 27/4/34 29/5/34 35/6/34 +f 29/4/54 27/5/54 15/6/54 +f 101/7/55 102/8/55 113/9/55 +f 14/4/56 15/5/56 11/10/56 +f 120/12/57 118/13/57 119/14/57 +f 72/12/5 118/14/5 122/13/5 +f 117/12/5 118/14/5 71/13/5 +f 117/12/38 71/14/38 119/13/38 +f 119/12/58 75/14/58 120/13/58 +f 124/12/59 123/14/59 120/15/59 +f 120/12/60 123/13/60 118/14/60 +f 122/12/40 124/14/40 72/13/40 +f 110/4/2 111/5/2 115/6/2 +f 123/16/61 124/18/61 66/19/61 +f 126/16/62 66/17/62 124/19/62 +f 123/16/63 65/17/63 125/19/63 +f 61/16/64 62/17/64 125/18/64 +f 76/4/56 77/5/56 73/10/56 +f 89/4/54 73/5/54 77/10/54 +f 105/4/2 107/5/2 111/6/2 +f 108/4/2 106/5/2 109/6/2 +f 46/4/2 44/5/2 47/6/2 +f 45/4/2 50/5/2 43/6/2 +f 77/4/20 78/5/20 91/6/20 +f 76/4/65 75/5/65 78/10/65 +f 65/16/66 63/17/66 125/19/66 +f 66/16/67 126/17/67 64/19/67 +f 6/2/1 2/20/1 1/3/1 +f 7/2/2 3/20/2 2/3/2 +f 8/2/3 4/20/3 3/3/3 +f 5/2/4 1/20/4 4/3/4 +f 2/2/5 3/20/5 4/3/5 +f 7/2/6 6/20/6 5/3/6 +f 36/5/68 35/10/68 43/6/68 +f 19/8/8 32/11/8 31/9/8 +f 34/8/9 42/11/9 40/9/9 +f 22/8/10 34/11/10 32/9/10 +f 15/6/69 14/4/69 16/10/69 +f 12/5/70 9/10/70 10/6/70 +f 13/5/13 9/10/13 12/6/13 +f 33/9/14 21/7/14 31/11/14 +f 25/9/15 21/7/15 26/11/15 +f 34/9/71 22/7/71 33/11/71 +f 19/8/17 24/11/17 26/9/17 +f 23/9/18 18/7/18 25/11/18 +f 18/8/19 23/11/19 24/9/19 +f 16/5/20 30/10/20 29/6/20 +f 29/6/21 30/4/21 37/10/21 +f 54/9/72 42/7/72 53/11/72 +f 28/5/73 30/10/73 16/6/73 +f 32/8/24 40/11/24 39/9/24 +f 42/9/50 34/7/50 41/11/50 +f 37/6/26 38/4/26 45/10/26 +f 41/9/27 33/7/27 39/11/27 +f 11/6/28 27/4/28 12/10/28 +f 36/6/74 28/4/74 35/10/74 +f 52/6/2 50/4/2 51/10/2 +f 53/9/30 41/7/30 51/11/30 +f 30/5/31 28/10/31 36/6/31 +f 38/5/32 36/10/32 44/6/32 +f 42/8/33 54/11/33 52/9/33 +f 89/6/34 91/4/34 97/10/34 +f 40/8/35 52/11/35 51/9/35 +f 97/6/36 99/4/36 105/10/36 +f 56/13/75 55/15/75 57/14/75 +f 56/14/5 59/15/5 60/13/5 +f 56/14/5 10/15/5 9/13/5 +f 9/14/38 13/15/38 57/13/38 +f 13/14/6 14/15/6 58/13/6 +f 14/13/6 62/12/6 58/15/6 +f 61/13/76 59/15/76 56/14/76 +f 62/14/40 14/15/40 10/13/40 +f 49/5/2 54/10/2 53/6/2 +f 64/17/2 68/19/2 70/18/2 +f 121/18/77 125/16/77 122/19/77 +f 69/17/6 65/19/6 66/18/6 +f 67/17/4 63/19/4 65/18/4 +f 125/17/78 63/19/78 59/18/78 +f 63/17/5 67/19/5 68/18/5 +f 60/18/79 64/19/79 126/17/79 +f 60/17/44 59/16/44 64/19/44 +f 37/5/36 45/10/36 43/6/36 +f 74/5/80 71/10/80 72/6/80 +f 81/8/8 94/11/8 93/9/8 +f 96/8/46 104/11/46 102/9/46 +f 84/8/10 96/11/10 94/9/10 +f 90/6/28 74/4/28 89/10/28 +f 75/5/13 71/10/13 74/6/13 +f 95/9/14 83/7/14 93/11/14 +f 87/9/15 83/7/15 88/11/15 +f 96/9/47 84/7/47 95/11/47 +f 81/8/48 86/11/48 88/9/48 +f 85/9/18 80/7/18 87/11/18 +f 80/8/19 85/11/19 86/9/19 +f 91/6/81 92/4/81 99/10/81 +f 116/9/22 104/7/22 115/11/22 +f 90/5/49 92/10/49 78/6/49 +f 94/8/24 102/11/24 101/9/24 +f 104/9/50 96/7/50 103/11/50 +f 99/6/82 100/4/82 107/10/82 +f 103/9/51 95/7/51 101/11/51 +f 98/6/29 90/4/29 97/10/29 +f 106/6/7 98/4/7 105/10/7 +f 114/6/2 112/4/2 113/10/2 +f 115/9/52 103/7/52 113/11/52 +f 92/5/31 90/10/31 98/6/31 +f 100/5/53 98/10/53 106/6/53 +f 104/8/33 116/11/33 114/9/33 +f 29/5/34 37/10/34 35/6/34 +f 27/5/54 11/10/54 15/6/54 +f 102/8/55 114/11/55 113/9/55 +f 10/6/56 14/4/56 11/10/56 +f 118/13/75 117/15/75 119/14/75 +f 118/14/5 121/15/5 122/13/5 +f 118/14/5 72/15/5 71/13/5 +f 71/14/38 75/15/38 119/13/38 +f 75/14/6 76/15/6 120/13/6 +f 76/13/59 124/12/59 120/15/59 +f 123/13/60 121/15/60 118/14/60 +f 124/14/83 76/15/83 72/13/83 +f 111/5/2 116/10/2 115/6/2 +f 65/17/61 123/16/61 66/19/61 +f 122/18/84 126/16/84 124/19/84 +f 121/18/85 123/16/85 125/19/85 +f 62/17/64 126/19/64 125/18/64 +f 72/6/86 76/4/86 73/10/86 +f 91/6/54 89/4/54 77/10/54 +f 107/5/2 112/10/2 111/6/2 +f 106/5/2 110/10/2 109/6/2 +f 44/5/2 48/10/2 47/6/2 +f 50/5/2 49/10/2 43/6/2 +f 78/5/20 92/10/20 91/6/20 +f 77/6/87 76/4/87 78/10/87 +l 20 10 +l 17 14 +l 20 17 +l 82 72 +l 79 76 +l 82 79 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/_factories.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/_factories.json new file mode 100644 index 00000000..1ff12e46 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/_factories.json @@ -0,0 +1,12 @@ +{ + "recipes": { + "replacable": "micdoodle8.mods.galacticraft.core.recipe.OreRecipeUpdatable$RecipeFactory" + }, + "ingredients": { + "advanced_metal": "micdoodle8.mods.galacticraft.core.recipe.IngredientAdvancedMetal", + "item_silicon": "micdoodle8.mods.galacticraft.core.recipe.IngredientSilicon" + }, + "conditions": { + "condition": "micdoodle8.mods.galacticraft.core.recipe.ConditionEnabled" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_fan.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_fan.json new file mode 100644 index 00000000..dcedfb2d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_fan.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:air_fan" + }, + "pattern": [ + "Z Z", + " Y ", + "ZXZ" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_0.json new file mode 100644 index 00000000..e294530e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_0.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:air_lock_frame", + "data": 0, + "count": 4 + }, + "pattern": [ + "XXX", + "YZY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "item": "galacticraftcore:oxygen_concentrator" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_1.json new file mode 100644 index 00000000..0339e951 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_lock_frame_1.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:air_lock_frame", + "data": 1 + }, + "pattern": [ + "YYY", + "WZW", + "YYY" + ], + "type": "galacticraftcore:replacable", + "key": { + "W": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_plate" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "item": "galacticraftcore:basic_item", + "data": 13 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_vent.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_vent.json new file mode 100644 index 00000000..3b8f602c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/air_vent.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:air_vent" + }, + "ingredients": [ + { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_0.json new file mode 100644 index 00000000..dc170bf2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_0.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 0, + "count": 6 + }, + "pattern": [ + "WWW", + "CCC", + "WWW" + ], + "type": "galacticraftcore:replacable", + "key": { + "C": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + }, + "W": { + "item": "minecraft:wool", + "data": 32767 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1.json new file mode 100644 index 00000000..b6cb5e7f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "pattern": [ + "X", + "Y", + "Z" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:wool", + "data": 32767 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1_alt.json new file mode 100644 index 00000000..c14c4eee --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_1_alt.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "pattern": [ + "Z", + "Y", + "X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:wool", + "data": 32767 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_2.json new file mode 100644 index 00000000..b81244bf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_2.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 2 + }, + "ingredients": [ + { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + { + "item": "minecraft:repeater" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_3.json new file mode 100644 index 00000000..e33e02a3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/aluminum_wire_3.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:aluminum_wire", + "data": 3 + }, + "ingredients": [ + { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + { + "item": "minecraft:repeater" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/arclamp.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/arclamp.json new file mode 100644 index 00000000..3594fa62 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/arclamp.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:arclamp" + }, + "pattern": [ + "XYX", + "YZY", + "XYX" + ], + "type": "galacticraftcore:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "minecraft:glowstone_dust" + }, + "Z": { + "item": "galacticraftcore:battery" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_10.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_10.json new file mode 100644 index 00000000..4affe35f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_10.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 10 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_item", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_11.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_11.json new file mode 100644 index 00000000..a5a7bb78 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_11.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 11 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_item", + "data": 5 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_12.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_12.json new file mode 100644 index 00000000..b6d258ae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_12.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 12 + }, + "pattern": [ + "YYY", + "YYY", + "YYY" + ], + "type": "galacticraftcore:replacable", + "key": { + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_13.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_13.json new file mode 100644 index 00000000..da213a42 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_13.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 13 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "type": "galacticraftcore:item_silicon" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_3.json new file mode 100644 index 00000000..92c00d41 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_3.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 3, + "count": 4 + }, + "pattern": [ + "XX ", + "XXY", + " " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stone" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedTin" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_4.json new file mode 100644 index 00000000..9b089668 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_4.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 4, + "count": 4 + }, + "pattern": [ + "XX ", + "XX ", + " Y " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stone" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedTin" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_9.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_9.json new file mode 100644 index 00000000..d97ebd89 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_block_core_9.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:basic_block_core", + "data": 9 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_item", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_0.json new file mode 100644 index 00000000..1cbf7f2a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_0.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 0, + "count": 2 + }, + "pattern": [ + "XXX", + "YYY", + "ZZZ" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferSolar" + }, + "Z": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_1.json new file mode 100644 index 00000000..f5db7a17 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_1.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 1 + }, + "pattern": [ + "XXX", + "YYY", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_item", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_15.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_15.json new file mode 100644 index 00000000..6d7c507b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_15.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 15 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:apple" + }, + { + "item": "minecraft:apple" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_16.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_16.json new file mode 100644 index 00000000..81b7bacd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_16.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 16 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:carrot" + }, + { + "item": "minecraft:carrot" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_17.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_17.json new file mode 100644 index 00000000..3d4940ad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_17.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 17 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:melon" + }, + { + "item": "minecraft:melon" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_18.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_18.json new file mode 100644 index 00000000..8cbe68c2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_18.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 18 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:potato" + }, + { + "item": "minecraft:potato" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_19.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_19.json new file mode 100644 index 00000000..09ebc0e3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_19.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 19 + }, + "pattern": [ + " X ", + "YUY", + "ZWZ" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "item": "minecraft:repeater" + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedIron" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_2.json new file mode 100644 index 00000000..9c9bf2b6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_2.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 2, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 13 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_20.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_20.json new file mode 100644 index 00000000..09aba1a6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_20.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 20 + }, + "pattern": [ + "WVW", + "YXY", + "YZY" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:air_vent" + }, + "W": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferBasic" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_3.json new file mode 100644 index 00000000..a9f2799b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 3, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 9 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_4.json new file mode 100644 index 00000000..4f6120e5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_4.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 4, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 10 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_5.json new file mode 100644 index 00000000..3a871e2d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/basic_item_5.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:basic_item", + "data": 5, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 11 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/battery.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/battery.json new file mode 100644 index 00000000..429793d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/battery.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftcore:battery", + "data": 100, + "count": 2 + }, + "pattern": [ + " T ", + "TRT", + "TCT" + ], + "type": "galacticraftcore:replacable", + "key": { + "R": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "C": { + "item": "minecraft:coal", + "data": 0 + }, + "T": { + "type": "forge:ore_dict", + "ore": "compressedTin" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_0.json new file mode 100644 index 00000000..e9f4ceeb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:buggymat", + "data": 0 + }, + "pattern": [ + " W ", + "WXW", + " W " + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "leather" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_1.json new file mode 100644 index 00000000..931f7e9e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_1.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:buggymat", + "data": 1 + }, + "pattern": [ + " Y", + " ZY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedIron" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_2.json new file mode 100644 index 00000000..d1a8d61c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/buggymat_2.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:buggymat", + "data": 2 + }, + "pattern": [ + "XXX", + "YZY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedIron" + }, + "Z": { + "item": "minecraft:chest" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0.json new file mode 100644 index 00000000..99aaebc7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:canister", + "data": 0, + "count": 2 + }, + "pattern": [ + "X X", + "X X", + "XXX" + ], + "type": "forge:ore_shaped", + "conditions": [ + { + "type": "galacticraftcore:condition", + "data": "can_default" + } + ], + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "ingotTin" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0_alt.json new file mode 100644 index 00000000..088a3b79 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_0_alt.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:canister", + "data": 0, + "count": 2 + }, + "pattern": [ + "XXX", + "X ", + "XXX" + ], + "type": "forge:ore_shaped", + "conditions": [ + { + "type": "galacticraftcore:condition", + "data": "can_alt" + } + ], + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "ingotTin" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1.json new file mode 100644 index 00000000..062915ed --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:canister", + "data": 1, + "count": 2 + }, + "pattern": [ + "X X", + "X X", + "XXX" + ], + "type": "forge:ore_shaped", + "conditions": [ + { + "type": "galacticraftcore:condition", + "data": "can_default" + } + ], + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "ingotCopper" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1_alt.json new file mode 100644 index 00000000..de2cbd64 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canister_1_alt.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftcore:canister", + "data": 1, + "count": 2 + }, + "pattern": [ + "XXX", + "X ", + "XXX" + ], + "type": "forge:ore_shaped", + "conditions": [ + { + "type": "galacticraftcore:condition", + "data": "can_alt" + } + ], + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "ingotCopper" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canvas.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canvas.json new file mode 100644 index 00000000..36ae7b4a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/canvas.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:canvas" + }, + "pattern": [ + " XY", + "XXX", + "YX " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "string" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "stickWood" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_0.json new file mode 100644 index 00000000..d58bc432 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_0.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:cargo", + "data": 0 + }, + "pattern": [ + "XWX", + "YZY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "item": "minecraft:hopper" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Z": { + "item": "minecraft:chest" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_4.json new file mode 100644 index 00000000..c0d07499 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cargo_4.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:cargo", + "data": 4 + }, + "pattern": [ + "XXX", + "YZY", + "XWX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "item": "minecraft:hopper" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Z": { + "item": "minecraft:chest" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cheese.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cheese.json new file mode 100644 index 00000000..2b0bf325 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cheese.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:cheese" + }, + "pattern": [ + "YYY", + "YXY", + "YYY" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:milk_bucket" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "foodCheese" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone.json new file mode 100644 index 00000000..6fd9a20c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "minecraft:cobblestone", + "count": 2 + }, + "ingredients": [ + { + "item": "galacticraftplanets:asteroids_block", + "data": 0 + }, + { + "item": "galacticraftplanets:asteroids_block", + "data": 1 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt.json new file mode 100644 index 00000000..297981f9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "minecraft:cobblestone", + "count": 2 + }, + "ingredients": [ + { + "item": "galacticraftplanets:asteroids_block", + "data": 0 + }, + { + "item": "galacticraftplanets:asteroids_block", + "data": 2 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt_alt.json new file mode 100644 index 00000000..37f3a66f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/cobblestone_alt_alt.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "minecraft:cobblestone", + "count": 2 + }, + "ingredients": [ + { + "item": "galacticraftplanets:asteroids_block", + "data": 1 + }, + { + "item": "galacticraftplanets:asteroids_block", + "data": 2 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/collector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/collector.json new file mode 100644 index 00000000..51196580 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/collector.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:collector" + }, + "pattern": [ + "WWW", + "YXZ", + "UVU" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "V": { + "item": "galacticraftcore:oxygen_concentrator" + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:air_fan" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/compact_workbench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/compact_workbench.json new file mode 100644 index 00000000..ae57617a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/compact_workbench.json @@ -0,0 +1,12 @@ +{ + "result": { + "item": "galacticraftcore:compact_workbench" + }, + "ingredients": [ + { + "item": "galacticraftcore:rocket_workbench", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_redstone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_redstone.json new file mode 100644 index 00000000..5681d752 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_redstone.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:concealed_redstone", + "count": 4 + }, + "pattern": [ + " X ", + "XYX", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_repeater.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_repeater.json new file mode 100644 index 00000000..22d3da09 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/concealed_repeater.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:concealed_repeater" + }, + "pattern": [ + " ", + "XYX", + " " + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "item": "minecraft:repeater" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dishbase.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dishbase.json new file mode 100644 index 00000000..6cc3990c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dishbase.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:dishbase" + }, + "pattern": [ + "XFX", + " X ", + "WYW" + ], + "type": "forge:ore_shaped", + "key": { + "F": { + "item": "galacticraftcore:basic_item", + "data": 19 + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "blockIron" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/distributor.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/distributor.json new file mode 100644 index 00000000..39c298cb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/distributor.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftcore:distributor" + }, + "pattern": [ + "WXW", + "YZY", + "WXW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "item": "galacticraftcore:air_fan" + }, + "Y": { + "item": "galacticraftcore:air_vent" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dye_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dye_2.json new file mode 100644 index 00000000..28f6aac0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/dye_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "minecraft:dye", + "data": 2, + "count": 2 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 11 + }, + { + "item": "minecraft:dye", + "data": 4 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_0.json new file mode 100644 index 00000000..dde457d8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_0.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:emergency_box", + "data": 0 + }, + "pattern": [ + "XYX", + "Y Y", + "XYX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:glowstone_torch" + }, + "Y": { + "item": "galacticraftcore:basic_item", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_1.json new file mode 100644 index 00000000..ec2f0ccb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/emergency_box_1.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:emergency_box", + "data": 1 + }, + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "galacticraftcore:emergency_box", + "data": 0 + }, + { + "item": "galacticraftcore:emergency_kit" + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_1.json new file mode 100644 index 00000000..2e5e7b60 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_1.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:enclosed", + "data": 1 + }, + "pattern": [ + "XYX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "item": "galacticraftcore:fluid_pipe" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_14.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_14.json new file mode 100644 index 00000000..d7414b93 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_14.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:enclosed", + "data": 14 + }, + "pattern": [ + "XYX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_15.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_15.json new file mode 100644 index 00000000..d4fcb405 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/enclosed_15.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:enclosed", + "data": 15 + }, + "pattern": [ + "XYX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0.json new file mode 100644 index 00000000..e7585a0e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "galacticraftcore:engine", + "data": 0 + }, + "pattern": [ + " YV", + "XWX", + "XZX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "V": { + "item": "minecraft:stone_button" + }, + "W": { + "item": "galacticraftcore:canister", + "data": 32767 + }, + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "item": "minecraft:flint_and_steel" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0_alt.json new file mode 100644 index 00000000..529b3305 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_0_alt.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "galacticraftcore:engine", + "data": 0 + }, + "pattern": [ + "VY ", + "XWX", + "XZX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "V": { + "item": "minecraft:stone_button" + }, + "W": { + "item": "galacticraftcore:canister", + "data": 32767 + }, + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "item": "minecraft:flint_and_steel" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_1.json new file mode 100644 index 00000000..25796c10 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/engine_1.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "galacticraftcore:engine", + "data": 1 + }, + "pattern": [ + "ZYZ", + "ZWZ", + "XVX" + ], + "type": "galacticraftcore:replacable", + "key": { + "V": { + "item": "galacticraftcore:air_vent" + }, + "W": { + "item": "galacticraftcore:fuel_canister_partial", + "data": 1 + }, + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "item": "minecraft:wool", + "data": 4 + }, + "Z": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/flag.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/flag.json new file mode 100644 index 00000000..ff8c91a0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/flag.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:flag" + }, + "pattern": [ + "XYY", + "XYY", + "X " + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:steel_pole" + }, + "Y": { + "item": "galacticraftcore:canvas" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_pipe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_pipe.json new file mode 100644 index 00000000..eeeb7e49 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_pipe.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:fluid_pipe", + "count": 6 + }, + "pattern": [ + "XXX", + " ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_tank.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_tank.json new file mode 100644 index 00000000..63afff70 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fluid_tank.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:fluid_tank" + }, + "pattern": [ + " X ", + "X X", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_0.json new file mode 100644 index 00000000..607dba3e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_0.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 0 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:apple" + }, + { + "item": "minecraft:apple" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_1.json new file mode 100644 index 00000000..9a68b1c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_1.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 1 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:carrot" + }, + { + "item": "minecraft:carrot" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_2.json new file mode 100644 index 00000000..9652fb6a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_2.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 2 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:melon" + }, + { + "item": "minecraft:melon" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_3.json new file mode 100644 index 00000000..ec8497bb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_3.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 3 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "minecraft:potato" + }, + { + "item": "minecraft:potato" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_4.json new file mode 100644 index 00000000..3a1ac966 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_4.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 4, + "count": 6 + }, + "ingredients": [ + { + "item": "galacticraftcore:cheese" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_5.json new file mode 100644 index 00000000..ba0b92e6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_5.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 5, + "count": 2 + }, + "ingredients": [ + { + "item": "minecraft:wheat" + }, + { + "item": "minecraft:wheat" + }, + { + "item": "minecraft:egg" + }, + { + "item": "minecraft:milk_bucket" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_6.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_6.json new file mode 100644 index 00000000..d4038eea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_6.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 6, + "count": 2 + }, + "ingredients": [ + { + "item": "minecraft:beef" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_8.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_8.json new file mode 100644 index 00000000..35efe5ee --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_8.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 8 + }, + "ingredients": [ + { + "item": "galacticraftcore:food", + "data": 4 + }, + { + "item": "galacticraftcore:food", + "data": 7 + }, + { + "item": "galacticraftcore:food", + "data": 5 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_9.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_9.json new file mode 100644 index 00000000..84b9f43c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/food_9.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:food", + "data": 9 + }, + "ingredients": [ + { + "item": "galacticraftcore:canister", + "data": 0 + }, + { + "item": "galacticraftcore:food", + "data": 6 + }, + { + "item": "galacticraftcore:food", + "data": 6 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fuel_loader.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fuel_loader.json new file mode 100644 index 00000000..9e90e7f6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/fuel_loader.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:fuel_loader" + }, + "pattern": [ + "XXX", + "XZX", + "WYW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedCopper" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "Z": { + "item": "galacticraftcore:canister", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/furnace.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/furnace.json new file mode 100644 index 00000000..e3ab2457 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/furnace.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "minecraft:furnace" + }, + "pattern": [ + "XXX", + "X X", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/glowstone_torch.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/glowstone_torch.json new file mode 100644 index 00000000..e8bcc7ea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/glowstone_torch.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:glowstone_torch", + "count": 4 + }, + "pattern": [ + "Y", + "X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "dustGlowstone" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/grating.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/grating.json new file mode 100644 index 00000000..413cf65d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/grating.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:grating", + "count": 4 + }, + "ingredients": [ + { + "item": "minecraft:iron_bars" + }, + { + "item": "minecraft:iron_bars" + }, + { + "item": "minecraft:iron_bars" + }, + { + "item": "minecraft:iron_bars" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/item_basic_moon_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/item_basic_moon_0.json new file mode 100644 index 00000000..6af7523b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/item_basic_moon_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:item_basic_moon", + "data": 0, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 12 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_0.json new file mode 100644 index 00000000..27934fd7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:landing_pad", + "data": 0, + "count": 9 + }, + "pattern": [ + "YYY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "blockIron" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedIron" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_1.json new file mode 100644 index 00000000..9c656f46 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/landing_pad_1.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:landing_pad", + "data": 1, + "count": 9 + }, + "pattern": [ + "YYY", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "blockIron" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/lit_pumpkin.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/lit_pumpkin.json new file mode 100644 index 00000000..d86d5c3d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/lit_pumpkin.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "minecraft:lit_pumpkin" + }, + "pattern": [ + "P ", + "T ", + " " + ], + "type": "minecraft:crafting_shaped", + "key": { + "P": { + "item": "minecraft:pumpkin" + }, + "T": { + "item": "galacticraftcore:unlit_torch" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0.json new file mode 100644 index 00000000..effa5ca4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 0 + }, + "pattern": [ + "WXW", + "WYW", + "VZV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "item": "minecraft:anvil", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0_alt.json new file mode 100644 index 00000000..2ed1fd8b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_0_alt.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 0 + }, + "pattern": [ + "WXW", + "WYW", + "VZV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "Y": { + "item": "galacticraftcore:machine", + "data": 12 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_12.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_12.json new file mode 100644 index 00000000..969ae5ba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_12.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 12 + }, + "pattern": [ + "WCW", + "VAV", + "WBW" + ], + "type": "forge:ore_shaped", + "key": { + "A": { + "item": "minecraft:anvil", + "data": 0 + }, + "B": { + "item": "minecraft:furnace" + }, + "C": { + "item": "minecraft:shears" + }, + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_4.json new file mode 100644 index 00000000..78d605a6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_4.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 4 + }, + "pattern": [ + "WXW", + "UYU", + "VZV" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "item": "minecraft:stone_button" + }, + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + }, + "X": { + "item": "minecraft:lever" + }, + "Y": { + "item": "minecraft:furnace" + }, + "Z": { + "item": "minecraft:redstone_torch" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_8.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_8.json new file mode 100644 index 00000000..31020fcc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine2_8.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:machine2", + "data": 8 + }, + "pattern": [ + "SSS", + "BBB", + "SSS" + ], + "type": "forge:ore_shaped", + "key": { + "B": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "S": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine3_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine3_0.json new file mode 100644 index 00000000..7167ea99 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine3_0.json @@ -0,0 +1,50 @@ +{ + "result": { + "item": "galacticraftcore:machine3", + "data": 0 + }, + "pattern": [ + "ABC", + "DEF", + "GHI" + ], + "type": "forge:ore_shaped", + "key": { + "A": { + "type": "forge:ore_dict", + "ore": "dyeRed" + }, + "B": { + "type": "forge:ore_dict", + "ore": "dyeMagenta" + }, + "C": { + "type": "forge:ore_dict", + "ore": "dyeBlue" + }, + "D": { + "type": "forge:ore_dict", + "ore": "dyeOrange" + }, + "E": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "F": { + "type": "forge:ore_dict", + "ore": "dyeCyan" + }, + "G": { + "type": "forge:ore_dict", + "ore": "dyeYellow" + }, + "H": { + "type": "forge:ore_dict", + "ore": "dyeLime" + }, + "I": { + "type": "forge:ore_dict", + "ore": "dyeGreen" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine4_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine4_0.json new file mode 100644 index 00000000..e7451459 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine4_0.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:machine4", + "data": 0 + }, + "pattern": [ + "WXW", + "WYW", + "VZV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "X": { + "item": "minecraft:anvil", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedMeteoricIron" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_0.json new file mode 100644 index 00000000..f4e06f08 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_0.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:machine", + "data": 0 + }, + "pattern": [ + "WWW", + "XZX", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "ingotCopper" + }, + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "Z": { + "item": "minecraft:furnace" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_12.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_12.json new file mode 100644 index 00000000..b4b95f4f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_12.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "galacticraftcore:machine", + "data": 12 + }, + "pattern": [ + "WXW", + "WYW", + "WZW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + }, + "X": { + "item": "minecraft:anvil", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "ingotCopper" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferBasic" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_0.json new file mode 100644 index 00000000..cdf1b28d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:machine_tiered", + "data": 0 + }, + "pattern": [ + "SSS", + "BBB", + "SSS" + ], + "type": "forge:ore_shaped", + "key": { + "B": { + "item": "galacticraftcore:battery", + "data": 100 + }, + "S": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_12.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_12.json new file mode 100644 index 00000000..82431c39 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_12.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:machine_tiered", + "data": 12 + }, + "pattern": [ + "XXX", + "XZX", + "WYW" + ], + "type": "galacticraftcore:replacable", + "key": { + "W": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + }, + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "Z": { + "item": "galacticraftcore:machine_tiered", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_4.json new file mode 100644 index 00000000..83c161b1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_4.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:machine_tiered", + "data": 4 + }, + "pattern": [ + "XXX", + "XZX", + "WYW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "Z": { + "item": "minecraft:furnace" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_8.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_8.json new file mode 100644 index 00000000..cab29b26 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/machine_tiered_8.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:machine_tiered", + "data": 8 + }, + "pattern": [ + "BSB", + "SWS", + "BSB" + ], + "type": "forge:ore_shaped", + "key": { + "B": { + "item": "galacticraftcore:machine_tiered", + "data": 0 + }, + "S": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/magnetic_table.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/magnetic_table.json new file mode 100644 index 00000000..faa7429c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/magnetic_table.json @@ -0,0 +1,15 @@ +{ + "result": { + "item": "galacticraftcore:magnetic_table" + }, + "ingredients": [ + { + "item": "minecraft:crafting_table" + }, + { + "type": "forge:ore_dict", + "ore": "compressedIron" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/meteor_chunk_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/meteor_chunk_0.json new file mode 100644 index 00000000..28d445d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/meteor_chunk_0.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "galacticraftcore:meteor_chunk", + "data": 0, + "count": 3 + }, + "ingredients": [ + { + "item": "galacticraftcore:meteoric_iron_raw" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick.json new file mode 100644 index 00000000..70a90de0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:moon_stairs_brick", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick_alt.json new file mode 100644 index 00000000..1f34e6d4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_brick_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:moon_stairs_brick", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone.json new file mode 100644 index 00000000..cdc6a429 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:moon_stairs_stone", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone_alt.json new file mode 100644 index 00000000..621b93c4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/moon_stairs_stone_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:moon_stairs_stone", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/nose_cone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/nose_cone.json new file mode 100644 index 00000000..c3222214 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/nose_cone.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:nose_cone" + }, + "pattern": [ + " Y ", + " X ", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "item": "minecraft:redstone_torch" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oil_canister_partial_1001.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oil_canister_partial_1001.json new file mode 100644 index 00000000..dbb91cae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oil_canister_partial_1001.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:oil_canister_partial", + "data": 1001 + }, + "pattern": [ + "WXW", + "WYW", + "WZW" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "minecraft:glass" + }, + "Z": { + "item": "galacticraftcore:canister", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_0.json new file mode 100644 index 00000000..cc4a0c7f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_0.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + }, + "pattern": [ + "XWX", + "WZW", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Z": { + "item": "galacticraftcore:oxygen_concentrator" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_4.json new file mode 100644 index 00000000..ad675109 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_compressor_4.json @@ -0,0 +1,31 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_compressor", + "data": 4 + }, + "pattern": [ + "XVX", + "WZW", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:air_fan" + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "minecraft:redstone_torch" + }, + "Z": { + "item": "galacticraftcore:oxygen_concentrator" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_concentrator.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_concentrator.json new file mode 100644 index 00000000..07936728 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_concentrator.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_concentrator" + }, + "pattern": [ + "ZWZ", + "WYW", + "ZXZ" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "X": { + "item": "galacticraftcore:air_vent" + }, + "Y": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_detector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_detector.json new file mode 100644 index 00000000..e12e226d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_detector.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_detector" + }, + "pattern": [ + "WWW", + "YVY", + "ZUZ" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "V": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "W": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "galacticraftcore:air_vent" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_gear.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_gear.json new file mode 100644 index 00000000..4471d09a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_gear.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_gear" + }, + "pattern": [ + " Y ", + "YXY", + "Y Y" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:oxygen_concentrator" + }, + "Y": { + "item": "galacticraftcore:fluid_pipe" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_mask.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_mask.json new file mode 100644 index 00000000..e386c63b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_mask.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_mask" + }, + "pattern": [ + "XXX", + "XYX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "minecraft:iron_helmet" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_heavy_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_heavy_full.json new file mode 100644 index 00000000..4b75ea3b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_heavy_full.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "pattern": [ + "ZZZ", + "XXX", + "YYY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "item": "minecraft:wool", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_light_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_light_full.json new file mode 100644 index 00000000..3fb4a158 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_light_full.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_tank_light_full", + "data": 900 + }, + "pattern": [ + "Z", + "X", + "Y" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedCopper" + }, + "Z": { + "item": "minecraft:wool", + "data": 5 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_med_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_med_full.json new file mode 100644 index 00000000..1938c07e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/oxygen_tank_med_full.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 1800 + }, + "pattern": [ + "ZZ", + "XX", + "YY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:canister", + "data": 0 + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "Z": { + "item": "minecraft:wool", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_0.json new file mode 100644 index 00000000..20575951 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_0.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 0 + }, + "pattern": [ + "XXX", + "XYX", + "XZX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_1.json new file mode 100644 index 00000000..bb352cb8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_1.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 1 + }, + "pattern": [ + "X X", + " Y ", + "XZX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_2.json new file mode 100644 index 00000000..8ca784d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_2.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 2 + }, + "pattern": [ + "X X", + "XYX", + "XZX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_3.json new file mode 100644 index 00000000..2c3752d5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_3.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 3 + }, + "pattern": [ + " ", + "XYX", + " Z " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_4.json new file mode 100644 index 00000000..ff9601d3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/panel_lighting_4.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:panel_lighting", + "data": 4 + }, + "pattern": [ + " X ", + "XY ", + " Z " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "item": "galacticraftcore:glowstone_torch" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0.json new file mode 100644 index 00000000..90685d1e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 0 + }, + "pattern": [ + "XXX", + "Y Y", + " Y " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:canvas" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "string" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0_alt.json new file mode 100644 index 00000000..e4f91aa4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_0_alt.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 0 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 15 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_1.json new file mode 100644 index 00000000..31fe60a5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_1.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 1 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 0 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_10.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_10.json new file mode 100644 index 00000000..9ca982b2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_10.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 10 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 14 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_11.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_11.json new file mode 100644 index 00000000..d7ea1d03 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_11.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 11 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 9 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_12.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_12.json new file mode 100644 index 00000000..5d6bcd95 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_12.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 12 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 5 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_13.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_13.json new file mode 100644 index 00000000..072379c1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_13.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 13 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 1 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_14.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_14.json new file mode 100644 index 00000000..79de4d0a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_14.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 14 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 6 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_15.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_15.json new file mode 100644 index 00000000..24aa7122 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_15.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 15 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 11 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_2.json new file mode 100644 index 00000000..2be5c784 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_2.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 2 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 12 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_3.json new file mode 100644 index 00000000..7c225e0f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 3 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 10 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_4.json new file mode 100644 index 00000000..1701a342 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_4.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 4 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 3 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_5.json new file mode 100644 index 00000000..404ab9b7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_5.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 5 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 4 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_6.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_6.json new file mode 100644 index 00000000..626bc51f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_6.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 6 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 8 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_7.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_7.json new file mode 100644 index 00000000..b7fe4b0a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_7.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 7 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 2 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_8.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_8.json new file mode 100644 index 00000000..576830ca --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_8.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 8 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 7 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_9.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_9.json new file mode 100644 index 00000000..5148db4b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/parachute_9.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:parachute", + "data": 9 + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 13 + }, + { + "item": "galacticraftcore:parachute", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/platform.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/platform.json new file mode 100644 index 00000000..d768e04c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/platform.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "galacticraftcore:platform", + "data": 0, + "count": 4 + }, + "pattern": [ + "PAP", + "BXB", + "PAP" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "A": { + "type": "forge:ore_dict", + "ore": "dustGlowstone" + }, + "B": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "P": { + "item": "minecraft:piston" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/prelaunch_checklist.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/prelaunch_checklist.json new file mode 100644 index 00000000..1f9acd6f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/prelaunch_checklist.json @@ -0,0 +1,15 @@ +{ + "result": { + "item": "galacticraftcore:prelaunch_checklist" + }, + "ingredients": [ + { + "item": "minecraft:dye", + "data": 1 + }, + { + "item": "galacticraftcore:canvas" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/refinery.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/refinery.json new file mode 100644 index 00000000..d10acadd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/refinery.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:refinery" + }, + "pattern": [ + " Z ", + "WZW", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "stone" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "minecraft:furnace" + }, + "Z": { + "item": "galacticraftcore:canister", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_fins.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_fins.json new file mode 100644 index 00000000..facb5f27 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_fins.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftcore:rocket_fins" + }, + "pattern": [ + " Y ", + "XYX", + "X X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "galacticraftcore:heavy_plating" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench.json new file mode 100644 index 00000000..a6e833bf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftcore:rocket_workbench" + }, + "pattern": [ + "XZX", + "UWU", + "YVY" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "item": "minecraft:lever" + }, + "V": { + "item": "minecraft:redstone_torch" + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Z": { + "item": "minecraft:crafting_table" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench_convert.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench_convert.json new file mode 100644 index 00000000..ffc776a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/rocket_workbench_convert.json @@ -0,0 +1,12 @@ +{ + "result": { + "item": "galacticraftcore:rocket_workbench" + }, + "ingredients": [ + { + "item": "galacticraftcore:compact_workbench", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sealer.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sealer.json new file mode 100644 index 00000000..b8f4119a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sealer.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftcore:sealer" + }, + "pattern": [ + "UZU", + "YXY", + "UZU" + ], + "type": "forge:ore_shaped", + "key": { + "U": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + }, + "X": { + "item": "galacticraftcore:air_fan" + }, + "Y": { + "item": "galacticraftcore:air_vent" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_glasses.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_glasses.json new file mode 100644 index 00000000..2b6fd11d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_glasses.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "galacticraftcore:sensor_glasses" + }, + "pattern": [ + "ZWZ", + "Z Z", + "XYX" + ], + "type": "galacticraftcore:replacable", + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "gemDiamond" + }, + "X": { + "item": "galacticraftcore:sensor_lens" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "string" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_lens.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_lens.json new file mode 100644 index 00000000..4b00dd64 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/sensor_lens.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:sensor_lens" + }, + "pattern": [ + "ZXZ", + "XYX", + "ZXZ" + ], + "type": "galacticraftcore:replacable", + "key": { + "X": { + "item": "minecraft:glass_pane" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_plate" + }, + "Z": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_0.json new file mode 100644 index 00000000..1534652f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 0, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_1.json new file mode 100644 index 00000000..0d7f314e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_1.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 1, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_2.json new file mode 100644 index 00000000..b1ecf0de --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_2.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 2, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_3.json new file mode 100644 index 00000000..6bbd5c7f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 3, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_4.json new file mode 100644 index 00000000..f6576626 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_4.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 4, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_5.json new file mode 100644 index 00000000..ef35ca1b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slab_gc_half_5.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:slab_gc_half", + "data": 5, + "count": 6 + }, + "pattern": [ + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slime_ball.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slime_ball.json new file mode 100644 index 00000000..c0d7fd63 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/slime_ball.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "minecraft:slime_ball" + }, + "pattern": [ + "XFX", + "FEF", + "XFX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "E": { + "item": "galacticraftcore:cheese_curd" + }, + "F": { + "item": "minecraft:sugar" + }, + "X": { + "item": "minecraft:dye", + "data": 2 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_0.json new file mode 100644 index 00000000..2f4e8ace --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_0.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:solar", + "data": 0 + }, + "pattern": [ + "XYX", + "XZX", + "VWV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "galacticraftcore:basic_item", + "data": 1 + }, + "Z": { + "item": "galacticraftcore:steel_pole" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_4.json new file mode 100644 index 00000000..ef5055f8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/solar_4.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:solar", + "data": 4 + }, + "pattern": [ + "XYX", + "XZX", + "VWV" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "galacticraftcore:basic_item", + "data": 1 + }, + "Z": { + "item": "galacticraftcore:steel_pole" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_0.json new file mode 100644 index 00000000..90fdd158 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_clear", + "data": 0, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "ingotAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_1.json new file mode 100644 index 00000000..af69b1ff --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_clear_1.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_clear", + "data": 1, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:space_glass_clear", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_0.json new file mode 100644 index 00000000..e29d0e47 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_strong", + "data": 0, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedAluminum" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_1.json new file mode 100644 index 00000000..93f916bc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_strong_1.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_strong", + "data": 1, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:space_glass_strong", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_0.json new file mode 100644 index 00000000..7049249f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_0.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_vanilla", + "data": 0, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "ingotTin" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_1.json new file mode 100644 index 00000000..5dcc83bc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/space_glass_vanilla_1.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftcore:space_glass_vanilla", + "data": 1, + "count": 5 + }, + "pattern": [ + "YXY", + "XXX", + "YXY" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:space_glass_vanilla", + "data": 0 + }, + "Y": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/spin_thruster.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/spin_thruster.json new file mode 100644 index 00000000..f2489c16 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/spin_thruster.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "galacticraftcore:spin_thruster" + }, + "pattern": [ + " ", + "YWZ", + "PXP" + ], + "type": "galacticraftcore:replacable", + "key": { + "P": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + }, + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + }, + "Y": { + "item": "galacticraftcore:fuel_canister_partial", + "data": 1 + }, + "Z": { + "item": "galacticraftcore:engine", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/standard_wrench.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/standard_wrench.json new file mode 100644 index 00000000..7cc38173 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/standard_wrench.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:standard_wrench" + }, + "pattern": [ + " Y", + " X ", + "X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe.json new file mode 100644 index 00000000..575cadeb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_axe" + }, + "pattern": [ + "YY ", + "YX ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe_alt.json new file mode 100644 index 00000000..2a5567fd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_axe_alt.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_axe" + }, + "pattern": [ + " YY", + " XY", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_boots.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_boots.json new file mode 100644 index 00000000..367b8c91 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_boots.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:steel_boots" + }, + "pattern": [ + "X X", + "X X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_chestplate.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_chestplate.json new file mode 100644 index 00000000..baeaabc4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_chestplate.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:steel_chestplate" + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_helmet.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_helmet.json new file mode 100644 index 00000000..f0b884c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_helmet.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftcore:steel_helmet" + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe.json new file mode 100644 index 00000000..b55c4259 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_hoe" + }, + "pattern": [ + " YY", + " X ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe_alt.json new file mode 100644 index 00000000..bd105d06 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_hoe_alt.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_hoe" + }, + "pattern": [ + "YY ", + " X ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_leggings.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_leggings.json new file mode 100644 index 00000000..2ee27302 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_leggings.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftcore:steel_leggings" + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pickaxe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pickaxe.json new file mode 100644 index 00000000..03df424e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pickaxe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_pickaxe" + }, + "pattern": [ + "YYY", + " X ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pole.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pole.json new file mode 100644 index 00000000..446fdee3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_pole.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:steel_pole", + "count": 2 + }, + "pattern": [ + "X", + "X", + "X" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_shovel.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_shovel.json new file mode 100644 index 00000000..2146ee20 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_shovel.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_shovel" + }, + "pattern": [ + " Y ", + " X ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_sword.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_sword.json new file mode 100644 index 00000000..a2c166a8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/steel_sword.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftcore:steel_sword" + }, + "pattern": [ + " Y ", + " Y ", + " X " + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/telemetry.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/telemetry.json new file mode 100644 index 00000000..514848c3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/telemetry.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftcore:telemetry" + }, + "pattern": [ + "XFX", + "XWX", + "YYY" + ], + "type": "forge:ore_shaped", + "key": { + "F": { + "item": "galacticraftcore:basic_item", + "data": 19 + }, + "W": { + "type": "forge:ore_dict", + "ore": "waferBasic" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedTin" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedCopper" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1.json new file mode 100644 index 00000000..8e564ebd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:tin_stairs_1", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1_alt.json new file mode 100644 index 00000000..6717b39f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_1_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:tin_stairs_1", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2.json new file mode 100644 index 00000000..287cb493 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:tin_stairs_2", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2_alt.json new file mode 100644 index 00000000..9fedcf86 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/tin_stairs_2_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:tin_stairs_2", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/view_screen.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/view_screen.json new file mode 100644 index 00000000..9e97c1e9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/view_screen.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftcore:view_screen" + }, + "pattern": [ + "XYX", + "YGY", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "G": { + "item": "minecraft:glass" + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferBasic" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_0.json new file mode 100644 index 00000000..51472426 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_0.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 0, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_1.json new file mode 100644 index 00000000..6f584d4a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_1.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 1, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_core", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_2.json new file mode 100644 index 00000000..36d626dc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 2, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_3.json new file mode 100644 index 00000000..37362fcb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_3.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 3, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftcore:basic_block_moon", + "data": 14 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_4.json new file mode 100644 index 00000000..3790e358 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_4.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 4, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_5.json new file mode 100644 index 00000000..b3faabf4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/recipes/wall_gc_5.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftcore:wall_gc", + "data": 5, + "count": 6 + }, + "pattern": [ + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds.json new file mode 100644 index 00000000..fd2c1bfa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds.json @@ -0,0 +1,43 @@ +{ + "galacticraft.music_space": { + "category": "music", + "sounds": [ + { + "name": "galacticraftcore:music/mars_jc", + "stream": true + }, + { + "name": "galacticraftcore:music/mimas_jc", + "stream": true + }, + { + "name": "galacticraftcore:music/orbit_jc", + "stream": true + }, + { + "name": "galacticraftcore:music/scary_ambience", + "stream": true + }, + { + "name": "galacticraftcore:music/spacerace_jc", + "stream": true + } + ] + }, + "player.unlockchest": { "category":"master", "sounds":[{"name": "galacticraftcore:player/unlockchest", "stream": false }]}, + "player.parachute": { "category":"master", "sounds":[{"name": "galacticraftcore:player/parachute", "stream": false }]}, + "player.openairlock": { "category":"master", "sounds":[{"name": "galacticraftcore:player/openairlock", "stream": false }]}, + "player.closeairlock": { "category":"master", "sounds":[{"name": "galacticraftcore:player/closeairlock", "stream": false }]}, + "entity.slime_death": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/slime_death", "stream": false }]}, + "entity.ooh": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/ooh", "stream": false }]}, + "entity.ouch": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/ouch", "stream": false }]}, + "entity.bosslaugh": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/bosslaugh", "stream": false }]}, + "entity.bossdeath": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/bossdeath", "stream": false }]}, + "entity.astrominer": { "category":"master", "sounds":[{"name": "galacticraftcore:entity/astrominer", "stream": false }]}, + "ambience.singledrip": { "category":"master", "sounds":[ "galacticraftcore:ambience/singledrip1", "galacticraftcore:ambience/singledrip2", "galacticraftcore:ambience/singledrip3", "galacticraftcore:ambience/singledrip4", "galacticraftcore:ambience/singledrip5", "galacticraftcore:ambience/singledrip6", "galacticraftcore:ambience/singledrip7", "galacticraftcore:ambience/singledrip8" ]}, + "ambience.scaryscape": { "category":"master", "sounds":[{"name": "galacticraftcore:ambience/scaryscape", "stream": false }]}, + "shuttle.shuttle": { "category":"master", "sounds":[{"name": "galacticraftcore:shuttle/shuttle", "stream": false }]}, + "block.deconstructor": { "category":"master", "sounds":[{"name": "galacticraftcore:deconstructor", "stream": false }]}, + "laser.charge": { "category":"master", "sounds":[{"name": "galacticraftcore:laser/charge", "stream": false }]}, + "laser.shoot": { "category":"master", "sounds":[{"name": "galacticraftcore:laser/shoot", "stream": false }]} +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/scaryscape.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/scaryscape.ogg new file mode 100644 index 00000000..f9ec2ed8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/scaryscape.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip1.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip1.ogg new file mode 100644 index 00000000..29f533b6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip1.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip2.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip2.ogg new file mode 100644 index 00000000..d2f65e55 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip2.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip3.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip3.ogg new file mode 100644 index 00000000..735da0db Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip3.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip4.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip4.ogg new file mode 100644 index 00000000..ec2f0744 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip4.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip5.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip5.ogg new file mode 100644 index 00000000..b1fb4a4f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip5.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip6.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip6.ogg new file mode 100644 index 00000000..9143ecab Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip6.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip7.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip7.ogg new file mode 100644 index 00000000..ac802a74 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip7.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip8.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip8.ogg new file mode 100644 index 00000000..046b5ee7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/ambience/singledrip8.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/deconstructor.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/deconstructor.ogg new file mode 100644 index 00000000..b64a8417 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/deconstructor.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/astrominer.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/astrominer.ogg new file mode 100644 index 00000000..f19c9e6d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/astrominer.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossdeath.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossdeath.ogg new file mode 100644 index 00000000..b9658f37 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossdeath.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bosslaugh.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bosslaugh.ogg new file mode 100644 index 00000000..55f2d795 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bosslaugh.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossliving.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossliving.ogg new file mode 100644 index 00000000..44e59e73 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/bossliving.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ooh.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ooh.ogg new file mode 100644 index 00000000..af82b251 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ooh.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ouch.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ouch.ogg new file mode 100644 index 00000000..57936fd0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/ouch.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/slime_death.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/slime_death.ogg new file mode 100644 index 00000000..21a69236 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/entity/slime_death.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/charge.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/charge.ogg new file mode 100644 index 00000000..47d0ba3f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/charge.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/shoot.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/shoot.ogg new file mode 100644 index 00000000..906c28b2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/laser/shoot.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mars_jc.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mars_jc.ogg new file mode 100644 index 00000000..dea29370 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mars_jc.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mimas_jc.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mimas_jc.ogg new file mode 100644 index 00000000..b0ea3a54 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/mimas_jc.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/orbit_jc.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/orbit_jc.ogg new file mode 100644 index 00000000..d4b0b220 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/orbit_jc.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/scary_ambience.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/scary_ambience.ogg new file mode 100644 index 00000000..f9352f06 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/scary_ambience.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/spacerace_jc.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/spacerace_jc.ogg new file mode 100644 index 00000000..72038549 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/music/spacerace_jc.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/closeairlock.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/closeairlock.ogg new file mode 100644 index 00000000..9ef4848f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/closeairlock.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/openairlock.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/openairlock.ogg new file mode 100644 index 00000000..68c2c2d9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/openairlock.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/parachute.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/parachute.ogg new file mode 100644 index 00000000..a7fc35ce Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/parachute.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/unlockchest.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/unlockchest.ogg new file mode 100644 index 00000000..2bd8db4d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/player/unlockchest.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/shuttle/shuttle.ogg b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/shuttle/shuttle.ogg new file mode 100644 index 00000000..d30eb380 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/sounds/shuttle/shuttle.ogg differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_compressor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_compressor.png new file mode 100644 index 00000000..69ce08c9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_compressor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_furnace.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_furnace.png new file mode 100644 index 00000000..a0575cb7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/electric_furnace.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_0.png new file mode 100644 index 00000000..dc60b5f1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_1.png new file mode 100644 index 00000000..4edd79f6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_10.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_10.png new file mode 100644 index 00000000..ffd364a4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_10.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_11.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_11.png new file mode 100644 index 00000000..890fd547 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_11.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_12.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_12.png new file mode 100644 index 00000000..d4f14c43 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_12.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_13.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_13.png new file mode 100644 index 00000000..530bc979 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_13.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_14.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_14.png new file mode 100644 index 00000000..54bc9a7e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_14.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_15.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_15.png new file mode 100644 index 00000000..aad63f7f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_15.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_16.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_16.png new file mode 100644 index 00000000..e03c13fe Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_16.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_2.png new file mode 100644 index 00000000..0e3d8af3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_3.png new file mode 100644 index 00000000..d900d623 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_4.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_4.png new file mode 100644 index 00000000..b1e90c08 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_4.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_5.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_5.png new file mode 100644 index 00000000..2c27c3b3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_5.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_6.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_6.png new file mode 100644 index 00000000..a1f02e42 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_6.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_7.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_7.png new file mode 100644 index 00000000..c81f2fb1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_7.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_8.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_8.png new file mode 100644 index 00000000..9d383a5a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_8.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_9.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_9.png new file mode 100644 index 00000000..05774fd2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/energy_storage_module_9.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine.png new file mode 100644 index 00000000..fdd8d4df Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_input.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_input.png new file mode 100644 index 00000000..ee0e7018 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_input.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_output.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_output.png new file mode 100644 index 00000000..31a6c9ef Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_output.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_side.png new file mode 100644 index 00000000..9398e1c7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/advanced/machine_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_controller.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_controller.png new file mode 100644 index 00000000..7b760160 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_controller.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_frame.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_frame.png new file mode 100644 index 00000000..8242c06e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_frame.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_seal.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_seal.png new file mode 100644 index 00000000..404832f5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/air_lock_seal.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_control_off.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_control_off.png new file mode 100644 index 00000000..a6aab747 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_control_off.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_1.png new file mode 100644 index 00000000..71805263 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_2.png new file mode 100644 index 00000000..0791fcc8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_3.png new file mode 100644 index 00000000..66982caa Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_4.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_4.png new file mode 100644 index 00000000..76d3d761 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_4.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_5.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_5.png new file mode 100644 index 00000000..685b1b79 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/airlock_on_5.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire.png new file mode 100644 index 00000000..5914c95f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_item.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_item.png new file mode 100644 index 00000000..75fc9606 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_item.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_switch_item.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_switch_item.png new file mode 100644 index 00000000..6304640d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_heavy_switch_item.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_item.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_item.png new file mode 100644 index 00000000..cc03cf81 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_item.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch.png new file mode 100644 index 00000000..5b2f795b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch_item.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch_item.png new file mode 100644 index 00000000..fcb0bd63 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/aluminum_wire_switch_item.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_off.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_off.png new file mode 100644 index 00000000..b616e6f5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_off.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_on.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_on.png new file mode 100644 index 00000000..3879dba3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/arc_lamp_on.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/assembly.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/assembly.png new file mode 100644 index 00000000..a27bc51f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/assembly.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/blank.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/blank.png new file mode 100644 index 00000000..86e8064b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/blank.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_aluminum.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_aluminum.png new file mode 100644 index 00000000..4906a64d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_aluminum.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_copper.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_copper.png new file mode 100644 index 00000000..e04d4a87 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_copper.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_meteoric_iron.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_meteoric_iron.png new file mode 100644 index 00000000..09ce42b3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_meteoric_iron.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_silicon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_silicon.png new file mode 100644 index 00000000..a7f3fdac Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_silicon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_tin.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_tin.png new file mode 100644 index 00000000..17286ffd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/block_tin.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bottom.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bottom.png new file mode 100644 index 00000000..9feb9580 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bottom.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/breatheable_air.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/breatheable_air.png new file mode 100644 index 00000000..1be0e96f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/breatheable_air.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/brick.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/brick.png new file mode 100644 index 00000000..f0629925 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/brick.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bubble.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bubble.png new file mode 100644 index 00000000..d90f1c2c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/bubble.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad.png new file mode 100644 index 00000000..053936d6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad_full.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad_full.png new file mode 100644 index 00000000..f58361e2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/buggy_pad_full.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cargo_pad.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cargo_pad.png new file mode 100644 index 00000000..c017dc06 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cargo_pad.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_1.png new file mode 100644 index 00000000..d0f005a2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_2.png new file mode 100644 index 00000000..6bcb173c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_3.png new file mode 100644 index 00000000..2b490a18 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_block.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_block.png new file mode 100644 index 00000000..ef882504 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cheese_block.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/circuit_fabricator.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/circuit_fabricator.png new file mode 100644 index 00000000..31d4a742 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/circuit_fabricator.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/coal_generator.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/coal_generator.png new file mode 100644 index 00000000..05556586 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/coal_generator.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/collector.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/collector.png new file mode 100644 index 00000000..2a147d21 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/collector.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/compressor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/compressor.png new file mode 100644 index 00000000..7ced0122 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/compressor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_base.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_base.png new file mode 100644 index 00000000..2d963b58 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_base.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_side.png new file mode 100644 index 00000000..383d7c9e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_top.png new file mode 100644 index 00000000..998a49e8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/crafting_table_top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_0.png new file mode 100644 index 00000000..0867c666 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_1.png new file mode 100644 index 00000000..792ea001 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/cryo_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block.png new file mode 100644 index 00000000..86fd2584 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_side.png new file mode 100644 index 00000000..202956b8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_up.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_up.png new file mode 100644 index 00000000..4cc51ccf Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deco_block_up.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deconstructor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deconstructor.png new file mode 100644 index 00000000..f20ff8ec Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/deconstructor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/detector_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/detector_side.png new file mode 100644 index 00000000..a4be806e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/detector_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/dishbase.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/dishbase.png new file mode 100644 index 00000000..df729120 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/dishbase.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor.png new file mode 100644 index 00000000..e4df548f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor_side.png new file mode 100644 index 00000000..f3e3d6a9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/distributor_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_compressor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_compressor.png new file mode 100644 index 00000000..7cc20638 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_compressor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_furnace.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_furnace.png new file mode 100644 index 00000000..55e3cc93 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/electric_furnace.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box.png new file mode 100644 index 00000000..2d57190e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box_flap.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box_flap.png new file mode 100644 index 00000000..23167e79 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/emergency_box_flap.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_aluminum_wire.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_aluminum_wire.png new file mode 100644 index 00000000..09ae00bb Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_aluminum_wire.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_copper_cable.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_copper_cable.png new file mode 100644 index 00000000..7a87d641 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_copper_cable.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_fluid_pipe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_fluid_pipe.png new file mode 100644 index 00000000..fa6ca74d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_fluid_pipe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_glass_fibre_cable.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_glass_fibre_cable.png new file mode 100644 index 00000000..5ba5a371 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_glass_fibre_cable.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_gold_cable.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_gold_cable.png new file mode 100644 index 00000000..cf63b0d3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_gold_cable.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_heavy_aluminum_wire.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_heavy_aluminum_wire.png new file mode 100644 index 00000000..3aeb5bf3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_heavy_aluminum_wire.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_hv_cable.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_hv_cable.png new file mode 100644 index 00000000..87dab6be Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_hv_cable.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_lv_cable.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_lv_cable.png new file mode 100644 index 00000000..a04122a2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_lv_cable.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_me_cable.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_me_cable.png new file mode 100644 index 00000000..a9f8d572 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_me_cable.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_cobblestone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_cobblestone.png new file mode 100644 index 00000000..ee88e550 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_cobblestone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_stone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_stone.png new file mode 100644 index 00000000..cece1ab6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_fluids_stone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_cobblestone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_cobblestone.png new file mode 100644 index 00000000..6da9f65d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_cobblestone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_stone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_stone.png new file mode 100644 index 00000000..8fbf51b3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_items_stone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_gold.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_gold.png new file mode 100644 index 00000000..a60e6703 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_gold.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_stone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_stone.png new file mode 100644 index 00000000..44b350db Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_pipe_power_stone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_te_conduit.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_te_conduit.png new file mode 100644 index 00000000..4884a0d6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/enclosed_te_conduit.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_0.png new file mode 100644 index 00000000..4a830751 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_1.png new file mode 100644 index 00000000..f23b0cfe Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_10.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_10.png new file mode 100644 index 00000000..860ea811 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_10.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_11.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_11.png new file mode 100644 index 00000000..e9463117 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_11.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_12.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_12.png new file mode 100644 index 00000000..fc0e87ab Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_12.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_13.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_13.png new file mode 100644 index 00000000..f2f7dc69 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_13.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_14.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_14.png new file mode 100644 index 00000000..ca962699 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_14.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_15.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_15.png new file mode 100644 index 00000000..105ca168 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_15.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_16.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_16.png new file mode 100644 index 00000000..6fc1fbf3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_16.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_2.png new file mode 100644 index 00000000..88ea6459 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_3.png new file mode 100644 index 00000000..8a2e5486 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_4.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_4.png new file mode 100644 index 00000000..2480ac33 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_4.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_5.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_5.png new file mode 100644 index 00000000..cdcb14db Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_5.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_6.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_6.png new file mode 100644 index 00000000..272932e2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_6.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_7.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_7.png new file mode 100644 index 00000000..86b39245 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_7.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_8.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_8.png new file mode 100644 index 00000000..eb493461 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_8.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_9.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_9.png new file mode 100644 index 00000000..d7c6a096 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/energy_storage_module_9.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fallen_meteor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fallen_meteor.png new file mode 100644 index 00000000..6b3d7545 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fallen_meteor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png new file mode 100644 index 00000000..ddba8f0a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png.mcmeta new file mode 100644 index 00000000..7e77c648 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_flow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png new file mode 100644 index 00000000..cd4beae0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png.mcmeta new file mode 100644 index 00000000..4fadce8a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/fuel_still.png.mcmeta @@ -0,0 +1,45 @@ +{ + "animation": { + "frametime": 4, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png new file mode 100644 index 00000000..e27baec3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/hydrogen_gas.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png new file mode 100644 index 00000000..fd2398e1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png.mcmeta new file mode 100644 index 00000000..7e77c648 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_flow.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png new file mode 100644 index 00000000..c4ff0008 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png.mcmeta new file mode 100644 index 00000000..4fadce8a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oil_still.png.mcmeta @@ -0,0 +1,45 @@ +{ + "animation": { + "frametime": 4, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png new file mode 100644 index 00000000..b34c9a5a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/fluids/oxygen_gas.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/glowstone_torch.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/glowstone_torch.png new file mode 100644 index 00000000..f3517690 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/glowstone_torch.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/landing_pad.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/landing_pad.png new file mode 100644 index 00000000..a09f46b8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/landing_pad.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine.png new file mode 100644 index 00000000..28e43c0f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_blank.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_blank.png new file mode 100644 index 00000000..3cea440a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_blank.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargoloader.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargoloader.png new file mode 100644 index 00000000..996810ce Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargoloader.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargounloader.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargounloader.png new file mode 100644 index 00000000..3b9863c1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_cargounloader.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuel_input.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuel_input.png new file mode 100644 index 00000000..e7f57f01 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuel_input.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuelloader.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuelloader.png new file mode 100644 index 00000000..bc5c5361 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_fuelloader.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_input.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_input.png new file mode 100644 index 00000000..c778bab9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_input.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_input.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_input.png new file mode 100644 index 00000000..d3cbe1bc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_input.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_output.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_output.png new file mode 100644 index 00000000..70a9f046 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_item_output.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oil_input.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oil_input.png new file mode 100644 index 00000000..4b618d39 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oil_input.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_output.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_output.png new file mode 100644 index 00000000..9834e131 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_output.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_input.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_input.png new file mode 100644 index 00000000..37eab3fa Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_input.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_output.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_output.png new file mode 100644 index 00000000..ecddfebe Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_oxygen_output.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_painter.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_painter.png new file mode 100644 index 00000000..e3ba4122 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_painter.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_sealer.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_sealer.png new file mode 100644 index 00000000..26914b01 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_sealer.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_side.png new file mode 100644 index 00000000..ed5713e1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/machine_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk.png new file mode 100644 index 00000000..c598f4f5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk_hot.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk_hot.png new file mode 100644 index 00000000..6195b644 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/meteor_chunk_hot.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/middle.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/middle.png new file mode 100644 index 00000000..74ebd354 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/middle.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_cheese.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_cheese.png new file mode 100644 index 00000000..e871e36e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_cheese.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_sapphire.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_sapphire.png new file mode 100644 index 00000000..bc2343ed Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/moonore_sapphire.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_aluminum.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_aluminum.png new file mode 100644 index 00000000..0931109d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_aluminum.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper.png new file mode 100644 index 00000000..492aaa6d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper_moon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper_moon.png new file mode 100644 index 00000000..b944b48c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_copper_moon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_silicon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_silicon.png new file mode 100644 index 00000000..cb59bd47 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_silicon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin.png new file mode 100644 index 00000000..26a8e010 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin_moon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin_moon.png new file mode 100644 index 00000000..19c0bdbd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/ore_tin_moon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor.png new file mode 100644 index 00000000..643b024e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor_back.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor_back.png new file mode 100644 index 00000000..1cd415d0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_compressor_back.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_decompressor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_decompressor.png new file mode 100644 index 00000000..af9b15f4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_decompressor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module.png new file mode 100644 index 00000000..4a830751 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module_full.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module_full.png new file mode 100644 index 00000000..3c4430f9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygen_storage_module_full.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_1.png new file mode 100644 index 00000000..0b9c9358 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_2.png new file mode 100644 index 00000000..517baecd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_3.png new file mode 100644 index 00000000..f3a1ee69 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_4.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_4.png new file mode 100644 index 00000000..6d150832 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_4.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_5.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_5.png new file mode 100644 index 00000000..b90ada2b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_5.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_6.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_6.png new file mode 100644 index 00000000..f3e5143f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/oxygentile_6.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_linear.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_linear.png new file mode 100644 index 00000000..07d2c04d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_linear.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_off.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_off.png new file mode 100644 index 00000000..e237934c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_off.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sf.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sf.png new file mode 100644 index 00000000..731ce531 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sf.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sfdiag.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sfdiag.png new file mode 100644 index 00000000..aa8c3e6b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_sfdiag.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_spots.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_spots.png new file mode 100644 index 00000000..977bdbb3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_spots.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_square.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_square.png new file mode 100644 index 00000000..66ca1ff2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/panel_light_square.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/parachest.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/parachest.png new file mode 100644 index 00000000..19ceec0a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/parachest.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_black.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_black.png new file mode 100644 index 00000000..04405a67 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_black.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_blue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_blue.png new file mode 100644 index 00000000..286f4bf8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_blue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_brown.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_brown.png new file mode 100644 index 00000000..1d0f8286 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_brown.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_cyan.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_cyan.png new file mode 100644 index 00000000..78bd5381 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_cyan.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_gray.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_gray.png new file mode 100644 index 00000000..55519a79 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_gray.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_green.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_green.png new file mode 100644 index 00000000..1c5739dd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_green.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_light_blue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_light_blue.png new file mode 100644 index 00000000..a337a6dd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_light_blue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_lime.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_lime.png new file mode 100644 index 00000000..0ba07789 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_lime.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_magenta.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_magenta.png new file mode 100644 index 00000000..53db3861 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_magenta.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_orange.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_orange.png new file mode 100644 index 00000000..4667a64c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_orange.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_pink.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_pink.png new file mode 100644 index 00000000..02ff22f3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_pink.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_purple.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_purple.png new file mode 100644 index 00000000..4c838aee Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_purple.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_red.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_red.png new file mode 100644 index 00000000..0a3e6751 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_red.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_silver.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_silver.png new file mode 100644 index 00000000..14f603bc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_silver.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_white.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_white.png new file mode 100644 index 00000000..96bf964c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_white.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_yellow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_yellow.png new file mode 100644 index 00000000..f0eed4d4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_oxygen_yellow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_pull.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_pull.png new file mode 100644 index 00000000..af543bdf Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/pipe_pull.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_base.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_base.png new file mode 100644 index 00000000..db01b060 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_base.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_haz.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_haz.png new file mode 100644 index 00000000..a2007657 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_haz.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_light.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_light.png new file mode 100644 index 00000000..2af71af0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_light.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_side.png new file mode 100644 index 00000000..ed2fc8bf Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_top.png new file mode 100644 index 00000000..0a5c52cd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/platform_top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_front.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_front.png new file mode 100644 index 00000000..701fca95 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_front.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_side.png new file mode 100644 index 00000000..f27570f4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_top.png new file mode 100644 index 00000000..cc648a7b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/refinery_top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/rocket_workbench.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/rocket_workbench.png new file mode 100644 index 00000000..dc3cb110 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/rocket_workbench.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_front.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_front.png new file mode 100644 index 00000000..3349351b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_front.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_side.png new file mode 100644 index 00000000..ddeee85e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/screen_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/sensor_mobs.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/sensor_mobs.png new file mode 100644 index 00000000..c93d0d6f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/sensor_mobs.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_0.png new file mode 100644 index 00000000..b4e7bc4b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_1.png new file mode 100644 index 00000000..ec1f9216 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_advanced_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_0.png new file mode 100644 index 00000000..63bfa523 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_1.png new file mode 100644 index 00000000..be91c4d2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/solar_basic_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear.png new file mode 100644 index 00000000..abaef943 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear_inventory.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear_inventory.png new file mode 100644 index 00000000..0b0890d7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_clear_inventory.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_tindeco.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_tindeco.png new file mode 100644 index 00000000..07cd08cd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_tindeco.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_white.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_white.png new file mode 100644 index 00000000..a5d35d0e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_frame_white.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_inventory.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_inventory.png new file mode 100644 index 00000000..ac3b5153 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_inventory.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_strong.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_strong.png new file mode 100644 index 00000000..187ed1cc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_strong.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla.png new file mode 100644 index 00000000..e7b39106 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla_inventory.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla_inventory.png new file mode 100644 index 00000000..5b2522bc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_glass_vanilla_inventory.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_side.png new file mode 100644 index 00000000..8ca93a4d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_top.png new file mode 100644 index 00000000..2f770d58 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/space_station_top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank.png new file mode 100644 index 00000000..fd2e9896 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank_top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank_top.png new file mode 100644 index 00000000..3054c75c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/tank_top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/thruster.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/thruster.png new file mode 100644 index 00000000..352ebdd5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/thruster.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top.png new file mode 100644 index 00000000..5140b8ca Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top_side.png new file mode 100644 index 00000000..73dfaa37 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/top_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/treasure_chest.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/treasure_chest.png new file mode 100644 index 00000000..0ac0fc40 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/treasure_chest.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch.png new file mode 100644 index 00000000..930c009e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit.png new file mode 100644 index 00000000..fc699249 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit_stone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit_stone.png new file mode 100644 index 00000000..67624ca9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_lit_stone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_stone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_stone.png new file mode 100644 index 00000000..731bc22b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/unlit_torch_stone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/arm.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/arm.png new file mode 100644 index 00000000..1be265bd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/arm.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/blueprint.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/blueprint.png new file mode 100644 index 00000000..ee5640bd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/blueprint.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/side.png new file mode 100644 index 00000000..ddb115e5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/top.png new file mode 100644 index 00000000..af8c1396 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench/top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench_nasa_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench_nasa_side.png new file mode 100644 index 00000000..bf0c5ec6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/blocks/workbench_nasa_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/air_lock_controller.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/air_lock_controller.png new file mode 100644 index 00000000..d097db60 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/air_lock_controller.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_0.png new file mode 100644 index 00000000..8604b161 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_18.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_18.png new file mode 100644 index 00000000..57b34358 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_18.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_36.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_36.png new file mode 100644 index 00000000..380c4870 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_36.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_54.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_54.png new file mode 100644 index 00000000..52295932 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggy_54.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggybench.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggybench.png new file mode 100644 index 00000000..efc77f47 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/buggybench.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/cargo_loader.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/cargo_loader.png new file mode 100644 index 00000000..91dc15b3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/cargo_loader.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/asteroid.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/asteroid.png new file mode 100644 index 00000000..dd64ad6d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/asteroid.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/callisto.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/callisto.png new file mode 100644 index 00000000..72f041d8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/callisto.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/curseforge.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/curseforge.png new file mode 100644 index 00000000..78d7f59a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/curseforge.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/earth.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/earth.png new file mode 100644 index 00000000..1d433d89 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/earth.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/europa.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/europa.png new file mode 100644 index 00000000..e87cdce2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/europa.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/ganymede.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/ganymede.png new file mode 100644 index 00000000..bc0413dc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/ganymede.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/io.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/io.png new file mode 100644 index 00000000..3384e9e5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/io.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/jupiter.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/jupiter.png new file mode 100644 index 00000000..af27aef8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/jupiter.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mars.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mars.png new file mode 100644 index 00000000..df88722f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mars.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mercury.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mercury.png new file mode 100644 index 00000000..a31d7d33 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/mercury.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/moon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/moon.png new file mode 100644 index 00000000..b5546701 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/moon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/neptune.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/neptune.png new file mode 100644 index 00000000..eb3f9e3d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/neptune.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn.png new file mode 100644 index 00000000..150d673d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn_rings.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn_rings.png new file mode 100644 index 00000000..4ae04079 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/saturn_rings.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/space_station.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/space_station.png new file mode 100644 index 00000000..96d52ecd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/space_station.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/sun.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/sun.png new file mode 100644 index 00000000..e35b4ebc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/sun.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus.png new file mode 100644 index 00000000..41c0b587 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus_rings.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus_rings.png new file mode 100644 index 00000000..e45ffb3b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/uranus_rings.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/venus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/venus.png new file mode 100644 index 00000000..64354d64 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialbodies/venus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection.png new file mode 100644 index 00000000..072361f4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection1.png new file mode 100644 index 00000000..ec89ed5a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/celestialselection1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/checklist_book.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/checklist_book.png new file mode 100644 index 00000000..ad900666 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/checklist_book.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_0.png new file mode 100644 index 00000000..3f22947b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_18.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_18.png new file mode 100644 index 00000000..36847f82 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_18.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_36.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_36.png new file mode 100644 index 00000000..520d83ae Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_36.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_54.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_54.png new file mode 100644 index 00000000..970a2df6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/chest_54.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/circuit_fabricator.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/circuit_fabricator.png new file mode 100644 index 00000000..591d9722 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/circuit_fabricator.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/coal_generator.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/coal_generator.png new file mode 100644 index 00000000..aaa65afb Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/coal_generator.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/compressor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/compressor.png new file mode 100644 index 00000000..c14bb559 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/compressor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/crafting_table.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/crafting_table.png new file mode 100644 index 00000000..bbd6feca Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/crafting_table.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/decompressor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/decompressor.png new file mode 100644 index 00000000..b019bf4d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/decompressor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/deconstructor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/deconstructor.png new file mode 100644 index 00000000..85547716 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/deconstructor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_arc_furnace.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_arc_furnace.png new file mode 100644 index 00000000..e4c4b77d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_arc_furnace.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_furnace.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_furnace.png new file mode 100644 index 00000000..fc36e06c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_furnace.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_ingot_compressor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_ingot_compressor.png new file mode 100644 index 00000000..50bb8ef4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/electric_ingot_compressor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/energy_storage_module.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/energy_storage_module.png new file mode 100644 index 00000000..6b3c8880 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/energy_storage_module.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/fuel_loader.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/fuel_loader.png new file mode 100644 index 00000000..330be091 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/fuel_loader.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/galacticraft_background.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/galacticraft_background.png new file mode 100644 index 00000000..5140b8ca Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/galacticraft_background.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/gui.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/gui.png new file mode 100644 index 00000000..bdcf09ac Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/gui.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hud.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hud.png new file mode 100644 index 00000000..d2c9644c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hud.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hudpointer.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hudpointer.png new file mode 100644 index 00000000..0866f465 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/hudpointer.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/indicator.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/indicator.png new file mode 100644 index 00000000..038985b2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/indicator.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor.png new file mode 100644 index 00000000..898728e1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor_blank.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor_blank.png new file mode 100644 index 00000000..29bdf0eb Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/ingot_compressor_blank.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/inventory.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/inventory.png new file mode 100644 index 00000000..8c68b7cb Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/inventory.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/landing.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/landing.png new file mode 100644 index 00000000..f72d51aa Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/landing.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/moon_rocket_gui.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/moon_rocket_gui.png new file mode 100644 index 00000000..1fddf405 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/moon_rocket_gui.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/overworld_rocket_gui.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/overworld_rocket_gui.png new file mode 100644 index 00000000..86b13efa Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/overworld_rocket_gui.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen.png new file mode 100644 index 00000000..9c3c07ba Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_distributor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_distributor.png new file mode 100644 index 00000000..7b16ea6d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_distributor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_large.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_large.png new file mode 100644 index 00000000..850bbc7b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_large.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_sealer.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_sealer.png new file mode 100644 index 00000000..977ab512 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_sealer.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_storage_module.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_storage_module.png new file mode 100644 index 00000000..daa7fd58 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/oxygen_storage_module.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/painter.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/painter.png new file mode 100644 index 00000000..3cb75c96 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/painter.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/atmosphericsun.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/atmosphericsun.png new file mode 100644 index 00000000..08de644b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/atmosphericsun.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/moon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/moon.png new file mode 100644 index 00000000..b5546701 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/moon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/orbitalsun.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/orbitalsun.png new file mode 100644 index 00000000..a4f9deda Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/orbitalsun.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/sun.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/sun.png new file mode 100644 index 00000000..b8c15990 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/planets/sun.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery.png new file mode 100644 index 00000000..bdb0eb37 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery_recipe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery_recipe.png new file mode 100644 index 00000000..b1e2461d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/refinery_recipe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_0.png new file mode 100644 index 00000000..5b177831 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_18.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_18.png new file mode 100644 index 00000000..57b34358 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_18.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_36.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_36.png new file mode 100644 index 00000000..380c4870 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_36.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_54.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_54.png new file mode 100644 index 00000000..52295932 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocket_54.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocketbench.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocketbench.png new file mode 100644 index 00000000..7807853e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/rocketbench.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/schematicpage.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/schematicpage.png new file mode 100644 index 00000000..6b2286e3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/schematicpage.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/solar.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/solar.png new file mode 100644 index 00000000..258ce08c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/gui/solar.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_fan.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_fan.png new file mode 100644 index 00000000..b66aa9f8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_fan.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_vent.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_vent.png new file mode 100644 index 00000000..ea107825 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/air_vent.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ambient_thermal_controller.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ambient_thermal_controller.png new file mode 100644 index 00000000..6a814828 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ambient_thermal_controller.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_aluminum.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_aluminum.png new file mode 100644 index 00000000..1bccd772 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_aluminum.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_bronze.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_bronze.png new file mode 100644 index 00000000..2bc83c55 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_bronze.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_copper.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_copper.png new file mode 100644 index 00000000..e548cd44 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_copper.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_iron.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_iron.png new file mode 100644 index 00000000..c053a5da Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_iron.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_steel.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_steel.png new file mode 100644 index 00000000..ecae7cc3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_steel.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_tin.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_tin.png new file mode 100644 index 00000000..bd6c3502 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.compressed_tin.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_apple.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_apple.png new file mode 100644 index 00000000..c9df0297 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_apple.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_carrot.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_carrot.png new file mode 100644 index 00000000..12299d94 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_carrot.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_melon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_melon.png new file mode 100644 index 00000000..4ad74b81 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_melon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_potato.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_potato.png new file mode 100644 index 00000000..503db6df Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.dehydrated_potato.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.frequency_module.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.frequency_module.png new file mode 100644 index 00000000..d0b041a1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.frequency_module.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_aluminum.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_aluminum.png new file mode 100644 index 00000000..d96cde80 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_aluminum.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_copper.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_copper.png new file mode 100644 index 00000000..aabf7592 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_copper.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_tin.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_tin.png new file mode 100644 index 00000000..2792982d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.ingot_tin.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.raw_silicon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.raw_silicon.png new file mode 100644 index 00000000..2d91df2f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.raw_silicon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_0.png new file mode 100644 index 00000000..6d85e7d9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_1.png new file mode 100644 index 00000000..96be6b8d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.solar_module_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_advanced.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_advanced.png new file mode 100644 index 00000000..0580621a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_advanced.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_basic.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_basic.png new file mode 100644 index 00000000..d93ec1a1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_basic.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_solar.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_solar.png new file mode 100644 index 00000000..ad46a6a8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/basic_item.wafer_solar.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/battery.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/battery.png new file mode 100644 index 00000000..8429f374 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/battery.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_cooked.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_cooked.png new file mode 100644 index 00000000..49bbf8e7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_cooked.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_raw.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_raw.png new file mode 100644 index 00000000..a02c559c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/beef_patty_raw.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_fuel.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_fuel.png new file mode 100644 index 00000000..a6582d30 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_fuel.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_oil.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_oil.png new file mode 100644 index 00000000..4da59181 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/bucket_oil.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.seat.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.seat.png new file mode 100644 index 00000000..3cabd90a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.seat.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.storage.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.storage.png new file mode 100644 index 00000000..257540ee Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.storage.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.wheel.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.wheel.png new file mode 100644 index 00000000..d3549d8e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/buggymat.wheel.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/burger_bun.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/burger_bun.png new file mode 100644 index 00000000..1f947b71 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/burger_bun.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.copper.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.copper.png new file mode 100644 index 00000000..76bb1df3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.copper.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.tin.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.tin.png new file mode 100644 index 00000000..04482507 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canister.tin.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canned_beef.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canned_beef.png new file mode 100644 index 00000000..0152403b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canned_beef.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canvas.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canvas.png new file mode 100644 index 00000000..a965efb0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/canvas.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_curd.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_curd.png new file mode 100644 index 00000000..3d81aac1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_curd.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_slice.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_slice.png new file mode 100644 index 00000000..1605c62a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheese_slice.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheeseburger.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheeseburger.png new file mode 100644 index 00000000..0ad4c507 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/cheeseburger.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/compressed_meteoric_iron.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/compressed_meteoric_iron.png new file mode 100644 index 00000000..87dff0e9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/compressed_meteoric_iron.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dishicon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dishicon.png new file mode 100644 index 00000000..79c191c1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dishicon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeon_key_t1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeon_key_t1.png new file mode 100644 index 00000000..b08db11b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeon_key_t1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png new file mode 100644 index 00000000..9548c0ff Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/dungeonfinder.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/emergency_kit.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/emergency_kit.png new file mode 100644 index 00000000..3158a47e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/emergency_kit.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/empty_liquid_canister.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/empty_liquid_canister.png new file mode 100644 index 00000000..9565d989 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/empty_liquid_canister.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1booster.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1booster.png new file mode 100644 index 00000000..cc188506 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1booster.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1engine.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1engine.png new file mode 100644 index 00000000..44de2d80 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/engine.tier1engine.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.png new file mode 100644 index 00000000..37f0070c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.txt b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.txt new file mode 100644 index 00000000..d8fe765a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel.txt @@ -0,0 +1,32 @@ +0*2 +1*2 +2*2 +3*2 +4*2 +5*2 +6*2 +7*2 +8*2 +9*2 +10*2 +11*2 +12*2 +13*2 +14*2 +15*2 +16*2 +17*2 +18*2 +19*2 +20*2 +21*2 +22*2 +23*2 +24*2 +25*2 +26*2 +27*2 +28*2 +29*2 +30*2 +31*2 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_0.png new file mode 100644 index 00000000..9565d989 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_1.png new file mode 100644 index 00000000..3259893d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_2.png new file mode 100644 index 00000000..08ddc254 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_3.png new file mode 100644 index 00000000..34c0a6de Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_4.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_4.png new file mode 100644 index 00000000..153dae1b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_4.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_5.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_5.png new file mode 100644 index 00000000..049707bc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_5.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_6.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_6.png new file mode 100644 index 00000000..95b95b6e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_canister_partial_6.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.png new file mode 100644 index 00000000..4b1a870b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.txt b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/fuel_flow.txt new file mode 100644 index 00000000..e69de29b diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/heavy_plating.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/heavy_plating.png new file mode 100644 index 00000000..68c0a1c3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/heavy_plating.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_alu.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_alu.png new file mode 100644 index 00000000..ce3126f5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_alu.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_small_titanium.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_small_titanium.png new file mode 100644 index 00000000..dd7e1d5d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/dust_small_titanium.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_crushed_alu.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_crushed_alu.png new file mode 100644 index 00000000..d4bb14ec Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_crushed_alu.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_purified_alu.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_purified_alu.png new file mode 100644 index 00000000..d84c1554 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/ic2/ore_purified_alu.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/lunar_sapphire.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/lunar_sapphire.png new file mode 100644 index 00000000..9d2f506e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/lunar_sapphire.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_ingot.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_ingot.png new file mode 100644 index 00000000..8a187e1b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_ingot.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_raw.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_raw.png new file mode 100644 index 00000000..28cc8250 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/meteoric_iron_raw.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/nose_cone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/nose_cone.png new file mode 100644 index 00000000..fc2cb0dd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/nose_cone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_0.png new file mode 100644 index 00000000..9565d989 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_1.png new file mode 100644 index 00000000..4f3c0dcc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_2.png new file mode 100644 index 00000000..74cb1bcd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_3.png new file mode 100644 index 00000000..8cf9a924 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_4.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_4.png new file mode 100644 index 00000000..4c7d6c89 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_4.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_5.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_5.png new file mode 100644 index 00000000..c006fb14 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_5.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_6.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_6.png new file mode 100644 index 00000000..c6178675 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oil_canister_partial_6.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_canister_infinite.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_canister_infinite.png new file mode 100644 index 00000000..5128d418 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_canister_infinite.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_concentrator.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_concentrator.png new file mode 100644 index 00000000..69ca5a06 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_concentrator.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_gear.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_gear.png new file mode 100644 index 00000000..b7ae3f9f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_gear.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_mask.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_mask.png new file mode 100644 index 00000000..f2001e2b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_mask.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_heavy_full.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_heavy_full.png new file mode 100644 index 00000000..59b26372 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_heavy_full.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_light_full.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_light_full.png new file mode 100644 index 00000000..4cde44ee Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_light_full.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_med_full.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_med_full.png new file mode 100644 index 00000000..6a1e8434 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/oxygen_tank_med_full.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_black.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_black.png new file mode 100644 index 00000000..913f7c1c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_black.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_blue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_blue.png new file mode 100644 index 00000000..5a93d3c4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_blue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_brown.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_brown.png new file mode 100644 index 00000000..f4bc9c08 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_brown.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkblue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkblue.png new file mode 100644 index 00000000..2473cb5d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkblue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgray.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgray.png new file mode 100644 index 00000000..19fa1e71 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgray.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgreen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgreen.png new file mode 100644 index 00000000..14952f5c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_darkgreen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_gray.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_gray.png new file mode 100644 index 00000000..b53540d5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_gray.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_lime.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_lime.png new file mode 100644 index 00000000..320b0a39 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_lime.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_magenta.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_magenta.png new file mode 100644 index 00000000..33ddb4c4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_magenta.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_orange.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_orange.png new file mode 100644 index 00000000..c0e55e86 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_orange.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_pink.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_pink.png new file mode 100644 index 00000000..9b978191 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_pink.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_plain.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_plain.png new file mode 100644 index 00000000..3336bf25 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_plain.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_purple.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_purple.png new file mode 100644 index 00000000..250408f1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_purple.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_red.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_red.png new file mode 100644 index 00000000..7ab29908 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_red.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_teal.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_teal.png new file mode 100644 index 00000000..b8edd6c5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_teal.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_yellow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_yellow.png new file mode 100644 index 00000000..92f833b7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/parachute_yellow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/prelaunch_checklist.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/prelaunch_checklist.png new file mode 100644 index 00000000..fd7c0b54 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/prelaunch_checklist.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/rocket_fins.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/rocket_fins.png new file mode 100644 index 00000000..1a7684c7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/rocket_fins.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_buggy.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_buggy.png new file mode 100644 index 00000000..cd1c9144 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_buggy.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_rocket_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_rocket_t2.png new file mode 100644 index 00000000..6e4b6a3b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/schematic_rocket_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_glasses.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_glasses.png new file mode 100644 index 00000000..5d64e2f2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_glasses.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_lens.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_lens.png new file mode 100644 index 00000000..b5c9c4b9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/sensor_lens.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/standard_wrench.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/standard_wrench.png new file mode 100644 index 00000000..90385159 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/standard_wrench.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_axe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_axe.png new file mode 100644 index 00000000..cc1fea0b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_axe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_boots.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_boots.png new file mode 100644 index 00000000..20f5bdd8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_boots.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_chestplate.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_chestplate.png new file mode 100644 index 00000000..e9f4b8bf Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_chestplate.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_helmet.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_helmet.png new file mode 100644 index 00000000..51516912 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_helmet.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_hoe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_hoe.png new file mode 100644 index 00000000..721f61ed Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_hoe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_leggings.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_leggings.png new file mode 100644 index 00000000..a4a31e61 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_leggings.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pickaxe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pickaxe.png new file mode 100644 index 00000000..9d102b15 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pickaxe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pole.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pole.png new file mode 100644 index 00000000..950fb64e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_pole.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_shovel.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_shovel.png new file mode 100644 index 00000000..740b43b4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_shovel.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_sword.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_sword.png new file mode 100644 index 00000000..c621d385 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/items/steel_sword.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape-template.psd b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape-template.psd new file mode 100644 index 00000000..363f58f4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape-template.psd differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_blue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_blue.png new file mode 100644 index 00000000..2b041061 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_blue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_brown.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_brown.png new file mode 100644 index 00000000..1b6c6b11 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_brown.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_cyan.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_cyan.png new file mode 100644 index 00000000..0e3ab563 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_cyan.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_gray.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_gray.png new file mode 100644 index 00000000..1ac57753 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_gray.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_green.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_green.png new file mode 100644 index 00000000..989c35f2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_dark_green.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_blue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_blue.png new file mode 100644 index 00000000..be4d6815 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_blue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_gray.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_gray.png new file mode 100644 index 00000000..3296a372 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_light_gray.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_lime.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_lime.png new file mode 100644 index 00000000..f7a233be Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_lime.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_magenta.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_magenta.png new file mode 100644 index 00000000..a8a2dce4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_magenta.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_orange.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_orange.png new file mode 100644 index 00000000..66a77083 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_orange.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_pink.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_pink.png new file mode 100644 index 00000000..d5b3e731 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_pink.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_purple.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_purple.png new file mode 100644 index 00000000..9ccb6a81 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_purple.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_rainbow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_rainbow.png new file mode 100644 index 00000000..2d732d59 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_rainbow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_red.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_red.png new file mode 100644 index 00000000..f4c2d874 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_red.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_yellow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_yellow.png new file mode 100644 index 00000000..2d884fc5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/capes/cape_yellow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/footprint.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/footprint.png new file mode 100644 index 00000000..79e83c40 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/footprint.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/light.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/light.png new file mode 100644 index 00000000..0cd6d861 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/light.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/europa.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/europa.png new file mode 100644 index 00000000..d523555b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/europa.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/ganymede.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/ganymede.png new file mode 100644 index 00000000..921f66a9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/ganymede.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/io.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/io.png new file mode 100644 index 00000000..458cb340 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/io.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_inner.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_inner.png new file mode 100644 index 00000000..9cc58140 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_inner.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_upper.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_upper.png new file mode 100644 index 00000000..4b786279 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/jupiter_upper.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/saturn.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/saturn.png new file mode 100644 index 00000000..32c7c859 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/planets/saturn.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underfuel.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underfuel.png new file mode 100644 index 00000000..f1a14d8d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underfuel.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underoil.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underoil.png new file mode 100644 index 00000000..2215c3cf Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/misc/underoil.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/sensor_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/sensor_1.png new file mode 100644 index 00000000..e9307e11 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/sensor_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_1.png new file mode 100644 index 00000000..167f4f9e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_2.png new file mode 100644 index 00000000..7ce901e7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_3.png new file mode 100644 index 00000000..8391dda3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/armor/steel_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/assembly.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/assembly.png new file mode 100644 index 00000000..6c0a8e3a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/assembly.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/book.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/book.png new file mode 100644 index 00000000..dc2cc97f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/book.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy.png new file mode 100644 index 00000000..403320fc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_main.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_main.png new file mode 100644 index 00000000..bc0ebf57 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_main.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_storage.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_storage.png new file mode 100644 index 00000000..4551057d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_storage.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_wheels.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_wheels.png new file mode 100644 index 00000000..5c63fcb7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/buggy_wheels.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/creeper.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/creeper.png new file mode 100644 index 00000000..96e3406f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/creeper.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman.png new file mode 100644 index 00000000..a12f4cef Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman_eyes.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman_eyes.png new file mode 100644 index 00000000..5c6a31d8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_enderman_eyes.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_witch.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_witch.png new file mode 100644 index 00000000..428e5932 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/evolved_witch.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag.png new file mode 100644 index 00000000..82bf1971 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag0.png new file mode 100644 index 00000000..737c8fc0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/flag0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/frequency_module.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/frequency_module.png new file mode 100644 index 00000000..35c90c1f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/frequency_module.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/lander.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/lander.png new file mode 100644 index 00000000..42a134ae Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/lander.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor.png new file mode 100644 index 00000000..8ef6d11f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk.png new file mode 100644 index 00000000..585a9182 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk_hot.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk_hot.png new file mode 100644 index 00000000..129540c3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/meteor_chunk_hot.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen.png new file mode 100644 index 00000000..b1d2d6e0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen_block.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen_block.png new file mode 100644 index 00000000..f21424ae Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/oxygen_block.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachest.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachest.png new file mode 100644 index 00000000..19ceec0a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachest.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/black.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/black.png new file mode 100644 index 00000000..6f0dbf8d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/black.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/blue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/blue.png new file mode 100644 index 00000000..2e89c86d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/blue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/brown.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/brown.png new file mode 100644 index 00000000..fb62ce52 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/brown.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkblue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkblue.png new file mode 100644 index 00000000..bced7a3d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkblue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgray.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgray.png new file mode 100644 index 00000000..c1064e26 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgray.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgreen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgreen.png new file mode 100644 index 00000000..551bd54a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/darkgreen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/gray.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/gray.png new file mode 100644 index 00000000..a0cdf43d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/gray.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/lime.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/lime.png new file mode 100644 index 00000000..1c59334b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/lime.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/magenta.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/magenta.png new file mode 100644 index 00000000..5ed79270 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/magenta.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/orange.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/orange.png new file mode 100644 index 00000000..83f364df Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/orange.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/pink.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/pink.png new file mode 100644 index 00000000..383a93e0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/pink.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/plain.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/plain.png new file mode 100644 index 00000000..76325479 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/plain.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/purple.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/purple.png new file mode 100644 index 00000000..4457dd20 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/purple.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/red.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/red.png new file mode 100644 index 00000000..6cea6ba3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/red.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/teal.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/teal.png new file mode 100644 index 00000000..97a5953a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/teal.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/yellow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/yellow.png new file mode 100644 index 00000000..98bbc940 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/parachute/yellow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/platform_moving.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/platform_moving.png new file mode 100644 index 00000000..bc34a678 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/platform_moving.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/player.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/player.png new file mode 100644 index 00000000..822d934e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/player.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/power.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/power.png new file mode 100644 index 00000000..3b6c1a14 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/power.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/rocket_t1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/rocket_t1.png new file mode 100644 index 00000000..6e1c9092 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/rocket_t1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeleton.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeleton.png new file mode 100644 index 00000000..2d40db32 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeleton.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeletonboss.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeletonboss.png new file mode 100644 index 00000000..67c36cc6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/skeletonboss.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_advanced.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_advanced.png new file mode 100644 index 00000000..c1f06fe2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_advanced.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_basic.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_basic.png new file mode 100644 index 00000000..7f64b3ac Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/solar_panel_basic.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider.png new file mode 100644 index 00000000..b3abd937 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider_eyes.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider_eyes.png new file mode 100644 index 00000000..ef08d27c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/spider_eyes.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/teledish.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/teledish.png new file mode 100644 index 00000000..6dae6c79 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/teledish.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telefork.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telefork.png new file mode 100644 index 00000000..a85e8fc5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telefork.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telesupport.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telesupport.png new file mode 100644 index 00000000..124b8d8e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/telesupport.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/thruster.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/thruster.png new file mode 100644 index 00000000..4616cd01 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/thruster.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/treasure.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/treasure.png new file mode 100644 index 00000000..5634cf8b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/treasure.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/villager.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/villager.png new file mode 100644 index 00000000..3922b164 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/villager.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/zombie.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/zombie.png new file mode 100644 index 00000000..c2d23fb4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftcore/textures/model/zombie.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/asteroids_block.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/asteroids_block.json new file mode 100644 index 00000000..3d568226 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/asteroids_block.json @@ -0,0 +1,29 @@ +{ + "forge_marker": 1, + "variants": { + "inventory": [{ "model": "galacticraftplanets:asteroid_rock_0_model" }], + "basictypeasteroids=asteroid_rock_0": [ + { "model": "galacticraftplanets:asteroid_rock_0_model" }, + { "model": "galacticraftplanets:asteroid_rock_0_model", "y": 90 }, + { "model": "galacticraftplanets:asteroid_rock_0_model", "y": 180 }, + { "model": "galacticraftplanets:asteroid_rock_0_model", "y": 270 } + ], + "basictypeasteroids=asteroid_rock_1": [ + { "model": "galacticraftplanets:asteroid_rock_1_model" }, + { "model": "galacticraftplanets:asteroid_rock_1_model", "y": 90 }, + { "model": "galacticraftplanets:asteroid_rock_1_model", "y": 180 }, + { "model": "galacticraftplanets:asteroid_rock_1_model", "y": 270 } + ], + "basictypeasteroids=asteroid_rock_2": [ + { "model": "galacticraftplanets:asteroid_rock_2_model" }, + { "model": "galacticraftplanets:asteroid_rock_2_model", "y": 90 }, + { "model": "galacticraftplanets:asteroid_rock_2_model", "y": 180 }, + { "model": "galacticraftplanets:asteroid_rock_2_model", "y": 270 } + ], + "basictypeasteroids=ore_aluminum_asteroids": { "model": "galacticraftplanets:ore_aluminum_asteroids_model" }, + "basictypeasteroids=ore_ilmenite_asteroids": { "model": "galacticraftplanets:ore_ilmenite_asteroids_model" }, + "basictypeasteroids=ore_iron_asteroids": { "model": "galacticraftplanets:ore_iron_asteroids_model" }, + "basictypeasteroids=asteroid_deco": { "model": "galacticraftplanets:asteroid_deco_model" }, + "basictypeasteroids=titanium_block": { "model": "galacticraftplanets:titanium_block_model" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_receiver.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_receiver.json new file mode 100644 index 00000000..48427c69 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_receiver.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:receiver.obj", + "textures": { "particle": "galacticraftcore:blocks/buggy_pad_full" }, + "custom": { + "flip-v": true + } + }, + "variants": { + "normal": [{}], + "facing": { + "up":{}, "down":{}, "east":{}, "west":{}, "north":{}, "south": {} + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_reflector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_reflector.json new file mode 100644 index 00000000..9a95665d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/beam_reflector.json @@ -0,0 +1,13 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:reflector.obj", + "textures": { "particle": "galacticraftcore:blocks/buggy_pad_full" }, + "custom": { + "flip-v": true + } + }, + "variants": { + "normal" : [{}] + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_mars.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_mars.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_mars.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_venus.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_venus.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/boss_spawner_venus.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/cavern_vines.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/cavern_vines.json new file mode 100644 index 00000000..da220632 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/cavern_vines.json @@ -0,0 +1,7 @@ +{ + "variants": { + "vinetype=vine_0": { "model": "galacticraftplanets:vine_0_model" }, + "vinetype=vine_1": { "model": "galacticraftplanets:vine_1_model" }, + "vinetype=vine_2": { "model": "galacticraftplanets:vine_2_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/crashed_probe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/crashed_probe.json new file mode 100644 index 00000000..922b38ec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/crashed_probe.json @@ -0,0 +1,9 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { "model": "galacticraftplanets:crashed_probe" }, + "facing=east": { "model": "galacticraftplanets:crashed_probe", "y": 90 }, + "facing=west": { "model": "galacticraftplanets:crashed_probe", "y": 270 }, + "facing=south": { "model": "galacticraftplanets:crashed_probe", "y": 180 } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/creeper_egg.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/creeper_egg.json new file mode 100644 index 00000000..e8591c33 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/creeper_egg.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:creeper_egg" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dense_ice.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dense_ice.json new file mode 100644 index 00000000..23991ef9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dense_ice.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:dense_ice" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dungeon_spawner.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dungeon_spawner.json new file mode 100644 index 00000000..12a570d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/dungeon_spawner.json @@ -0,0 +1,7 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { "model": "galacticraftcore:dummy" }, + "inventory": { "model": "galacticraftcore:dummy" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/geothermal_generator.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/geothermal_generator.json new file mode 100644 index 00000000..e11dc093 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/geothermal_generator.json @@ -0,0 +1,13 @@ +{ + "forge_marker": 1, + "variants": { + "active=true,facing=north": { "model": "galacticraftplanets:geothermal_model" }, + "active=true,facing=east": { "model": "galacticraftplanets:geothermal_model", "y": 90 }, + "active=true,facing=west": { "model": "galacticraftplanets:geothermal_model", "y": 270 }, + "active=true,facing=south": { "model": "galacticraftplanets:geothermal_model", "y": 180 }, + "active=false,facing=north": { "model": "galacticraftplanets:geothermal_inactive_model" }, + "active=false,facing=east": { "model": "galacticraftplanets:geothermal_inactive_model", "y": 90 }, + "active=false,facing=west": { "model": "galacticraftplanets:geothermal_inactive_model", "y": 270 }, + "active=false,facing=south": { "model": "galacticraftplanets:geothermal_inactive_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/hydrogen_pipe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/hydrogen_pipe.json new file mode 100644 index 00000000..3b315bfc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/hydrogen_pipe.json @@ -0,0 +1,89 @@ +{ + "variants": { + "down=false,east=false,north=false,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe" }, + + "down=false,east=false,north=true,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_n", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_n", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_n", "y": 180 }, + "down=false,east=false,north=false,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nd", "y": 270 }, + + "down=false,east=false,north=true,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nu", "y": 180 }, + "down=false,east=false,north=false,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nu", "y": 270 }, + + "down=true,east=false,north=true,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nud", "y": 180 }, + "down=true,east=false,north=false,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nud", "y": 270 }, + + "down=false,east=false,north=true,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nsd", "y": 90 }, + + "down=false,east=false,north=true,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nsu", "y": 0 }, + "down=false,east=true,north=false,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nsu", "y": 90 }, + + "down=true,east=false,north=true,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nsud", "y": 0 }, + "down=true,east=true,north=false,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nsud", "y": 90 }, + + "down=false,east=true,north=true,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nesu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesu", "y": 90 }, + "down=false,east=false,north=true,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesu", "y": 180 }, + "down=false,east=true,north=true,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesu", "y": 270 }, + + "down=true,east=true,north=true,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_nesud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesud", "y": 90 }, + "down=true,east=false,north=true,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesud", "y": 180 }, + "down=true,east=true,north=true,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesud", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_ned", "y": 270 }, + + "down=false,east=true,north=true,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_neu", "y": 0 }, + "down=false,east=true,north=false,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_neu", "y": 90 }, + "down=false,east=false,north=false,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neu", "y": 180 }, + "down=false,east=false,north=true,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neu", "y": 270 }, + + "down=true,east=true,north=true,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_neud", "y": 0 }, + "down=true,east=true,north=false,south=true,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_neud", "y": 90 }, + "down=true,east=false,north=false,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neud", "y": 180 }, + "down=true,east=false,north=true,south=false,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neud", "y": 270 }, + + "down=false,east=true,north=true,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_nesw", "y": 0 }, + + "down=false,east=false,north=false,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_u", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=false,west=false": { "model": "galacticraftplanets:hydrogen_pipe_d", "y": 0 }, + + "down=true,east=false,north=false,south=false,up=true,west=false": { "model": "galacticraftplanets:hydrogen_pipe_ud", "y": 0 }, + + "down=false,east=true,north=true,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neswu", "y": 0 }, + "down=true,east=true,north=true,south=true,up=false,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neswd", "y": 0 }, + "down=true,east=true,north=true,south=true,up=true,west=true": { "model": "galacticraftplanets:hydrogen_pipe_neswud", "y": 0 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/laser_turret.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/laser_turret.json new file mode 100644 index 00000000..513322fd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/laser_turret.json @@ -0,0 +1,9 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { "model": "galacticraftplanets:laser_turret" }, + "facing=east": { "model": "galacticraftplanets:laser_turret", "y": 90 }, + "facing=west": { "model": "galacticraftplanets:laser_turret", "y": 270 }, + "facing=south": { "model": "galacticraftplanets:laser_turret", "y": 180 } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars.json new file mode 100644 index 00000000..ba1bb848 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars.json @@ -0,0 +1,14 @@ +{ + "variants": { + "basictypemars=ore_copper_mars": { "model": "galacticraftplanets:ore_copper_mars_model" }, + "basictypemars=ore_tin_mars": { "model": "galacticraftplanets:ore_tin_mars_model" }, + "basictypemars=ore_desh_mars": { "model": "galacticraftplanets:ore_desh_mars_model" }, + "basictypemars=ore_iron_mars": { "model": "galacticraftplanets:ore_iron_mars_model" }, + "basictypemars=cobblestone": { "model": "galacticraftplanets:cobblestone_model" }, + "basictypemars=mars_surface": { "model": "galacticraftplanets:mars_surface_model" }, + "basictypemars=mars_middle": { "model": "galacticraftplanets:mars_middle_model" }, + "basictypemars=dungeon_brick": { "model": "galacticraftplanets:dungeon_brick_model" }, + "basictypemars=desh_block": { "model": "galacticraftplanets:desh_block_model" }, + "basictypemars=mars_stone": { "model": "galacticraftplanets:mars_stone_model" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine.json new file mode 100644 index 00000000..e4a8b37b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine.json @@ -0,0 +1,16 @@ +{ + "variants": { + "facing=north,type=terraformer": { "model": "galacticraftplanets:terraformer_model" }, + "facing=east,type=terraformer": { "model": "galacticraftplanets:terraformer_model", "y": 90 }, + "facing=west,type=terraformer": { "model": "galacticraftplanets:terraformer_model", "y": 270 }, + "facing=south,type=terraformer": { "model": "galacticraftplanets:terraformer_model", "y": 180 }, + "facing=north,type=cryogenic_chamber": { "model": "galacticraftplanets:cryo_0", "y": 180 }, + "facing=east,type=cryogenic_chamber": { "model": "galacticraftplanets:cryo_0", "y": 270 }, + "facing=west,type=cryogenic_chamber": { "model": "galacticraftplanets:cryo_0", "y": 90 }, + "facing=south,type=cryogenic_chamber": { "model": "galacticraftplanets:cryo_0", "y": 0 }, + "facing=north,type=launch_controller": { "model": "galacticraftplanets:launch_controller_model" }, + "facing=east,type=launch_controller": { "model": "galacticraftplanets:launch_controller_model", "y": 90 }, + "facing=west,type=launch_controller": { "model": "galacticraftplanets:launch_controller_model", "y": 270 }, + "facing=south,type=launch_controller": { "model": "galacticraftplanets:launch_controller_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine_t2.json new file mode 100644 index 00000000..7da51be6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_machine_t2.json @@ -0,0 +1,16 @@ +{ + "variants": { + "facing=north,type=gas_liquefier": { "model": "galacticraftplanets:gas_liquefier_model" }, + "facing=east,type=gas_liquefier": { "model": "galacticraftplanets:gas_liquefier_model", "y": 90 }, + "facing=west,type=gas_liquefier": { "model": "galacticraftplanets:gas_liquefier_model", "y": 270 }, + "facing=south,type=gas_liquefier": { "model": "galacticraftplanets:gas_liquefier_model", "y": 180 }, + "facing=north,type=methane_synthesizer": { "model": "galacticraftplanets:methane_synthesizer_model" }, + "facing=east,type=methane_synthesizer": { "model": "galacticraftplanets:methane_synthesizer_model", "y": 90 }, + "facing=west,type=methane_synthesizer": { "model": "galacticraftplanets:methane_synthesizer_model", "y": 270 }, + "facing=south,type=methane_synthesizer": { "model": "galacticraftplanets:methane_synthesizer_model", "y": 180 }, + "facing=north,type=electrolyzer": { "model": "galacticraftplanets:electrolyzer_model" }, + "facing=east,type=electrolyzer": { "model": "galacticraftplanets:electrolyzer_model", "y": 90 }, + "facing=west,type=electrolyzer": { "model": "galacticraftplanets:electrolyzer_model", "y": 270 }, + "facing=south,type=electrolyzer": { "model": "galacticraftplanets:electrolyzer_model", "y": 180 } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_brick.json new file mode 100644 index 00000000..6adaa29a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_brick.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftplanets:mars_brick_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_brick_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_brick_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_cobblestone.json new file mode 100644 index 00000000..73896878 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/mars_stairs_cobblestone.json @@ -0,0 +1,44 @@ +{ + "variants": { + "facing=east,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "galacticraftplanets:mars_cobblestone_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "galacticraftplanets:mars_cobblestone_outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "galacticraftplanets:mars_cobblestone_inner_stairs", "x": 180, "uvlock": true } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base.json new file mode 100644 index 00000000..08e792a8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:miner_base" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base_full.json new file mode 100644 index 00000000..eac18295 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/miner_base_full.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:miner_base", + "custom": { "flip-v": true }, + "textures": { + "particle": "galacticraftplanets:blocks/machineframe" + } + }, + "variants": { + "normal" : [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/slimeling_egg.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/slimeling_egg.json new file mode 100644 index 00000000..fbd3825e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/slimeling_egg.json @@ -0,0 +1,39 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:slimeling_egg_red", + "transform": "forge:default-block" + }, + "variants": { + "broken=false,eggcolor=red": { + "model": "galacticraftplanets:slimeling_egg_red" + }, + "broken=true,eggcolor=red": { + "model": "galacticraftplanets:slimeling_egg_red", + "textures": { + "particle": "galacticraftplanets:blocks/red_egg_1", + "texture": "galacticraftplanets:blocks/red_egg_1" + } + }, + "broken=false,eggcolor=blue": { + "model": "galacticraftplanets:slimeling_egg_blue" + }, + "broken=true,eggcolor=blue": { + "model": "galacticraftplanets:slimeling_egg_blue", + "textures": { + "particle": "galacticraftplanets:blocks/blue_egg_1", + "texture": "galacticraftplanets:blocks/blue_egg_1" + } + }, + "broken=false,eggcolor=yellow": { + "model": "galacticraftplanets:slimeling_egg_yellow" + }, + "broken=true,eggcolor=yellow": { + "model": "galacticraftplanets:slimeling_egg_yellow", + "textures": { + "particle": "galacticraftplanets:blocks/yellow_egg_1", + "texture": "galacticraftplanets:blocks/yellow_egg_1" + } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sludge.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sludge.json new file mode 100644 index 00000000..c30b4b2d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sludge.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:fluid", + "custom": { "fluid": "bacterialsludge" } + }, + "variants": { + "fluid": [{ }], + "inventory": [{ }] + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_controller.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_controller.json new file mode 100644 index 00000000..8e469b30 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_controller.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "galacticraftplanets:solar_array_controller" }, + "facing=west": { "model": "galacticraftplanets:solar_array_controller", "y": 180, "uvlock": true }, + "facing=south": { "model": "galacticraftplanets:solar_array_controller", "y": 90, "uvlock": true }, + "facing=north": { "model": "galacticraftplanets:solar_array_controller", "y": 270, "uvlock": true } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_module.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_module.json new file mode 100644 index 00000000..c6389e31 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/solar_array_module.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:solar_array_module" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spacewart.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spacewart.json new file mode 100644 index 00000000..64c5d34c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spacewart.json @@ -0,0 +1,8 @@ +{ + "variants": { + "age=0": { "model": "nether_wart_stage0" }, + "age=1": { "model": "nether_wart_stage1" }, + "age=2": { "model": "nether_wart_stage1" }, + "age=3": { "model": "nether_wart_stage2" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spout.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spout.json new file mode 100644 index 00000000..140c592d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/spout.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:spout" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sulphuric_acid.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sulphuric_acid.json new file mode 100644 index 00000000..bbe50c35 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/sulphuric_acid.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "forge:fluid", + "custom": { "fluid": "sulphuricacid" } + }, + "variants": { + "fluid": [{ }], + "inventory": [{ }] + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_fake.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_fake.json new file mode 100644 index 00000000..e0bf0d36 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_fake.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { "model": "galacticraftcore:block_multi_model" }, + "variants": { + "normal": [{ }], + "inventory": [{ }], + "connectable": { + "true": { }, + "false": { } + }, + "top": { + "true": { }, + "false": { } + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_short.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_short.json new file mode 100644 index 00000000..a84014d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/telepad_short.json @@ -0,0 +1,10 @@ +{ + "forge_marker": 1, + "variants": { + "normal": { + "model": "galacticraftplanets:telepad_short.obj", + "textures": { "particle": "galacticraftcore:blocks/buggy_pad_full" }, + "custom": { "flip-v": true } + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t2.json new file mode 100644 index 00000000..06cf11bc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t2.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { + "model": "galacticraftplanets:treasure_t2" + }, + "facing=east": { + "model": "galacticraftplanets:treasure_t2", + "y": 90 + }, + "facing=south": { + "model": "galacticraftplanets:treasure_t2", + "y": 180 + }, + "facing=west": { + "model": "galacticraftplanets:treasure_t2", + "y": 270 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t3.json new file mode 100644 index 00000000..b71d5ffa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/treasure_t3.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "variants": { + "facing=north": { + "model": "galacticraftplanets:treasure_t3" + }, + "facing=east": { + "model": "galacticraftplanets:treasure_t3", + "y": 90 + }, + "facing=south": { + "model": "galacticraftplanets:treasure_t3", + "y": 180 + }, + "facing=west": { + "model": "galacticraftplanets:treasure_t3", + "y": 270 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus.json new file mode 100644 index 00000000..bde03160 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus.json @@ -0,0 +1,33 @@ +{ + "variants": { + "basictypevenus=venus_rock_0": [ + { "model": "galacticraftplanets:venus_rock_0_model" }, + { "model": "galacticraftplanets:venus_rock_0_model", "y": 90 }, + { "model": "galacticraftplanets:venus_rock_0_model", "y": 180 }, + { "model": "galacticraftplanets:venus_rock_0_model", "y": 270 } + ], + "basictypevenus=venus_rock_1": [ + { "model": "galacticraftplanets:venus_rock_1_model" }, + { "model": "galacticraftplanets:venus_rock_1_model", "y": 90 }, + { "model": "galacticraftplanets:venus_rock_1_model", "y": 180 }, + { "model": "galacticraftplanets:venus_rock_1_model", "y": 270 } + ], + "basictypevenus=venus_rock_2": { "model": "galacticraftplanets:venus_rock_2_model" }, + "basictypevenus=venus_rock_3": [ + { "model": "galacticraftplanets:venus_rock_3_model" }, + { "model": "galacticraftplanets:venus_rock_3_model", "y": 90 }, + { "model": "galacticraftplanets:venus_rock_3_model", "y": 180 }, + { "model": "galacticraftplanets:venus_rock_3_model", "y": 270 } + ], + "basictypevenus=dungeon_brick_venus_1": { "model": "galacticraftplanets:dungeon_brick_venus_1_model" }, + "basictypevenus=dungeon_brick_venus_2": { "model": "galacticraftplanets:dungeon_brick_venus_2_model" }, + "basictypevenus=venus_ore_aluminum": { "model": "galacticraftplanets:venus_ore_aluminum" }, + "basictypevenus=venus_ore_copper": { "model": "galacticraftplanets:venus_ore_copper" }, + "basictypevenus=venus_ore_galena": { "model": "galacticraftplanets:venus_ore_galena" }, + "basictypevenus=venus_ore_quartz": { "model": "galacticraftplanets:venus_ore_quartz" }, + "basictypevenus=venus_ore_silicon": { "model": "galacticraftplanets:venus_ore_silicon" }, + "basictypevenus=venus_ore_tin": { "model": "galacticraftplanets:venus_ore_tin" }, + "basictypevenus=lead_block": { "model": "galacticraftplanets:lead_block" }, + "basictypevenus=venus_ore_solar": { "model": "galacticraftplanets:venus_ore_solar" } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus_rock_scorched.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus_rock_scorched.json new file mode 100644 index 00000000..f45d8c67 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/venus_rock_scorched.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "galacticraftplanets:venus_rock_scorched" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/walkway.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/walkway.json new file mode 100644 index 00000000..6b6cb294 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/walkway.json @@ -0,0 +1,139 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "galacticraftplanets:walkway", + "transform": "forge:default-block" + }, + "variants": { + "down=false,east=false,north=false,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + + "down=false,east=false,north=true,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway_n", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway_n", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway_n", "y": 180 }, + "down=false,east=false,north=false,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway_n", "y": 270 }, + + "down=false,east=false,north=true,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway_ns", "y": 90 }, + + "down=false,east=true,north=true,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway_nes", "y": 270 }, + + "down=false,east=true,north=true,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway_ne", "y": 270 }, + + "down=false,east=true,north=true,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway_nesw", "y": 0 }, + + + "down=false,east=false,north=false,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen" }, + + "down=false,east=false,north=true,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_n", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_n", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_n", "y": 180 }, + "down=false,east=false,north=false,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nd", "y": 270 }, + + "down=false,east=false,north=true,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nsd", "y": 90 }, + + "down=false,east=true,north=true,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_ned", "y": 270 }, + + "down=false,east=true,north=true,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_nesw", "y": 0 }, + + "down=true,east=false,north=false,south=false,type=walkway_pipe,west=false": { "model": "galacticraftplanets:walkway_oxygen_d", "y": 0 }, + + "down=true,east=true,north=true,south=true,type=walkway_pipe,west=true": { "model": "galacticraftplanets:walkway_oxygen_neswd", "y": 0 }, + + + "down=false,east=false,north=false,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire" }, + + "down=false,east=false,north=true,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_n", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_n", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_n", "y": 180 }, + "down=false,east=false,north=false,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_n", "y": 270 }, + + "down=true,east=false,north=true,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nd", "y": 0 }, + "down=true,east=true,north=false,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nd", "y": 90 }, + "down=true,east=false,north=false,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nd", "y": 180 }, + "down=true,east=false,north=false,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nd", "y": 270 }, + + "down=false,east=false,north=true,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ns", "y": 0 }, + "down=false,east=true,north=false,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ns", "y": 90 }, + + "down=true,east=false,north=true,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nsd", "y": 0 }, + "down=true,east=true,north=false,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nsd", "y": 90 }, + + "down=false,east=true,north=true,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nes", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nes", "y": 90 }, + "down=false,east=false,north=true,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nes", "y": 180 }, + "down=false,east=true,north=true,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nes", "y": 270 }, + + "down=true,east=true,north=true,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_nesd", "y": 0 }, + "down=true,east=true,north=false,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nesd", "y": 90 }, + "down=true,east=false,north=true,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nesd", "y": 180 }, + "down=true,east=true,north=true,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nesd", "y": 270 }, + + "down=false,east=true,north=true,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ne", "y": 0 }, + "down=false,east=true,north=false,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ne", "y": 90 }, + "down=false,east=false,north=false,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ne", "y": 180 }, + "down=false,east=false,north=true,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ne", "y": 270 }, + + "down=true,east=true,north=true,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ned", "y": 0 }, + "down=true,east=true,north=false,south=true,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_ned", "y": 90 }, + "down=true,east=false,north=false,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ned", "y": 180 }, + "down=true,east=false,north=true,south=false,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_ned", "y": 270 }, + + "down=false,east=true,north=true,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_nesw", "y": 0 }, + + "down=true,east=false,north=false,south=false,type=walkway_wire,west=false": { "model": "galacticraftplanets:walkway_wire_d", "y": 0 }, + + "down=true,east=true,north=true,south=true,type=walkway_wire,west=true": { "model": "galacticraftplanets:walkway_wire_neswd", "y": 0 }, + + + + "down=true,east=false,north=false,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=true,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=false,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=false,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=false,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=true,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=false,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=true,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=false,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=true,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=true,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=true,south=false,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=false,south=true,type=walkway,west=false": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=false,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=false,north=true,south=false,type=walkway,west=true": { "model": "galacticraftplanets:walkway" }, + "down=true,east=true,north=true,south=true,type=walkway,west=true": { "model": "galacticraftplanets:walkway" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/web_torch.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/web_torch.json new file mode 100644 index 00000000..6e077339 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/blockstates/web_torch.json @@ -0,0 +1,6 @@ +{ + "variants": { + "webtype=web_torch_0": { "model": "galacticraftplanets:web_torch_0" }, + "webtype=web_torch_1": { "model": "galacticraftplanets:web_torch_1" } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cs_cz.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cs_cz.lang new file mode 100644 index 00000000..84fb892d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cs_cz.lang @@ -0,0 +1,303 @@ +container.entry_pod.name=Přistávací modul +container.launchcontroller.name=Odpalovací zarízení +container.mars_lander.name=Přistávací balóny +container.short_range_telepad.name=Transportér krátkého dosahu +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Těžební souprava +entity.creeper_boss.name=Vyvinutý creeper - Boss +entity.entry_pod.name=Přistávací modul +entity.grapple_hook.name=Hák +entity.landing_balloons.name=Přistávací balóny +entity.projectile_tnt.name=TNT projektil +entity.rocket_cargo.name=Nákladní raketa +entity.rocket_t2.name=Raketa typ 2 +entity.rocket_t3.name=Raketa typ 3 +entity.slimeling.name=Slizoun +entity.sludgeling.name=Bahenní vcela +entity.small_asteroid.name=Malý asteroid +fluid.argon=Plynný argon +fluid.atmosphericgases=Atmosferické plyny +fluid.bacterialsludge=Infikované bláto +fluid.carbondioxide=Plynný oxid uhličitý +fluid.fuel=Palivo +fluid.helium=Plynné helium +fluid.hydrogen=Plynný vodík +fluid.liquidargon=Kapalný Argon +fluid.liquidmethane=Kapalný metan +fluid.liquidnitrogen=Kapalný dusík +fluid.liquidoxygen=Kapalný kyslík +fluid.methane=Plynný metan +fluid.nitrogen=Plynný dusík +fluid.oxygen=Plynný kyslík +gas.carbondioxide.name=Oxid uhlicitý +gas.nitrogen.name=Dusík +gas.oxygen.name=Kyslík +gc.configgui.astro_miners_max=Maximální počet těžebních souprav na hráče +gc.configgui.dimension_id_asteroids=Číslo dimenze asteroidů +gc.configgui.dimension_id_mars=Císlo dimenze Marsu +gc.configgui.disable_galacticraft_helium=Vypnout registraci plynného Helia +gc.configgui.id_schematic_cargo_rocket=Císlo schématu nákladní rakety +gc.configgui.id_schematic_rocket_t2=Císlo schématu rakety typu 2 +gc.configgui.id_schematic_rocket_t3=Číslo schématu rakety typu 3 +gc.configgui.launch_controller_all_dims=Odpalovace ve všech dimenzích +gc.configgui.launch_controller_chunk_load=Nacítání oblasti odpalovace +gc.configgui.planets.title=Nastavení planet Galacticraftu +gui.button.liquefy.name=Proces +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Přivolat +gui.carbon_slot.desc.0=Patří sem drcený uhlík +gui.cargorocket.status.launched.0=Již +gui.cargorocket.status.launched.1=odpáleno. +gui.cargorocket.status.waiting.0=Cekám na odpalovací +gui.cargorocket.status.waiting.1=sekvenci. +gui.choose_planet.desc.mars=Obyvatelný#Žádný kyslík#Gravitace: 38% +gui.cryogenic.chat.cant_use=Nemohu to použít dalších %d vterin. +gui.gas_input.desc.0=Zkuste sem vložit$lahev s plynem +gui.gas_input.desc.1=(poprípadne,$atmosferický ventil) +gui.gas_tank.desc.0=Plynová nádrž +gui.gas_tank_compressed.desc.0=Zásobárna stlačeného plynu +gui.hydrogen_input.desc.0=Toto vyžaduje lahev vodíku +gui.hydrogen_input.desc.1=nebo atmosferický ventil +gui.launch_controller.desc.0=Unikátní frekvence$tohoto odpalovace +gui.launch_controller.desc.1=Frekvence pro vypuštení rakety na +gui.launch_controller.desc.2=Má býd odstranen$po odpálení rakety +gui.launch_controller.desc.3=Po splnení kritérií$bude vypuštena raketa +gui.launch_controller.desc.4=Skrýt cílové frekvence$ostatních hráčů +gui.liquid_output.desc.2=nádoba se zkapalneným plynem +gui.liquid_tank.desc.0=Nádrž na kapaliny +gui.message.address.name=Adresa +gui.message.astro_miner.fail=Tato základna již obsahuje těžební soupravu! +gui.message.astro_miner1.fail=Přistávací port je obsazen hráčem: +gui.message.astro_miner1_a.fail=Cesta těžební soupravy je blokována: +gui.message.astro_miner2.fail=Již jsi postavil příliž mnoho těžebních souprav! +gui.message.astro_miner3.fail=Základna těžební soupravy byla zničena. +gui.message.astro_miner4.fail=Těžební soupravě došla energie, nemůže se tedy dostat zpět na základnu. +gui.message.astro_miner5.fail=Cesta těžební soupravy se zdá být blokována. +gui.message.astro_miner6.fail=Těžební souprava dokončila těžbu v oblasti. Nyní vyčkává další rozkazy. +gui.message.astro_miner7.fail=Na vesmírné stanici není nic, co by mohla těžební souprava těžit! +gui.message.astro_miner8.fail=K základně byla přiřazena další těžební souprava. Původní se nyní zastavý. +gui.message.bubble_exp.name=Bublina se zvetšuje +gui.message.cargo_full.name=Plne naloženo +gui.message.cargo_unloaded.name=Náklad vyložen +gui.message.dest_address.name=Cílová adresa +gui.message.dest_frequency.name=Cílová frekvence +gui.message.enable_grass.name=Povolit trávu +gui.message.enable_trees.name=Povolit stromy +gui.message.frequency.name=Frekvence +gui.message.fully_fueled.name=Plná nádrž +gui.message.grapple.fail=Pro použití háku je potřeba také lano! +gui.message.grass.name=Tráva +gui.message.instant.name=Okamžite +gui.message.invalid_address.name=Neplatná adresa +gui.message.invalid_freq.name=Neplatná frekvence +gui.message.invalid_target_address.name=Neplatná cílová adresa +gui.message.launch_when.name=Odstartovat když +gui.message.low_energy.name=Málo energie +gui.message.no_bonemeal.name=Nedostatek kostní drene +gui.message.no_energy.name=Nedostatek energie +gui.message.no_saplings.name=Nedostatek rostlin +gui.message.no_seeds.name=Nedostatek obylí +gui.message.no_valid_blocks.name=Špatné bloky v bubline +gui.message.no_water.name=Nedostatek vody +gui.message.not_enough.name=Nedostatek +gui.message.not_enough_energy.name=Nedostatek energie! +gui.message.not_set.name=Nenastaveno +gui.message.one_min.name=1 minuta +gui.message.receiving_active.name=Na příjmu +gui.message.redstone_sig.name=Signál +gui.message.remove_pad.name=Odstranit +gui.message.sending_active.name=Vysílá! +gui.message.success.name=Úspech +gui.message.target_no_energy.name=Cíl nemá dostatek energie! +gui.message.telepad_not_found.name=Transportér nenalezen! +gui.message.telepad_too_far.name=Cíl je příliž daleko! (Max %d) +gui.message.telepad_wrong_dim.name=Cíl není ve stejné oblasti! +gui.message.ten_sec.name=10 sekund +gui.message.terraforming.name=Terraformuje +gui.message.thirty_sec.name=30 sekund +gui.message.trees.name=Stromy +gui.message.with_atmosphere0.name=na planete s velkým obsahem metanu +gui.message.with_atmosphere1.name=v atmosfére +gui.message.zero_water.name=Chybí voda! +gui.methane_output.desc.2=nádoba na metan +gui.miner.docked=Připojena +gui.miner.docking=Připojuje se +gui.miner.mined=Vytěženo +gui.miner.mining=Těží +gui.miner.offline=Vypnuto +gui.miner.out_of_range=Mimo dosah +gui.miner.returning=Vrací se +gui.miner.stuck=Uvízla na: +gui.miner.travelling=Cestuje +gui.slimeling.button.follow=Následuj me! +gui.slimeling.button.sit=Sedni! +gui.slimeling.chat.wrong_player=Tohle není muj slizoun! +gui.slimeling.damage=Poškození +gui.slimeling.following=Sleduje +gui.slimeling.food=Oblíbené jídlo +gui.slimeling.kills=Zabil +gui.slimeling.name=Jméno +gui.slimeling.owner=Vlastník +gui.slimeling.scale=Merítko +gui.slimeling.sitting=Sedí +gui.status.liquefying.name=Zkapalnuje +gui.status.needs_carbon.name=Potrebuje uhlík +gui.status.nogas.name=Žádný plyn +gui.status.processing.name=Syntetizuje +gui.status.tankfull.name=Lahev plná +gui.status.tanksfull.name=Lahve plné +gui.telepad.desc.0=Toto je unikátní adresa$tohoto transportéru +gui.telepad.desc.1=Cílová adresa$Tam budou objekty odeslány. +gui.terraformer.desc.0=Nadrž na vodu +gui.water_bucket_slot.desc=Vložte sem kbelíky vody +item.astro_miner.name=Těžební souprava +item.atmospheric_valve.name=Atmosferický uzávěr +item.beam_core.name=Paprskové jádro +item.bucket_sludge.name=Kyblík infikovaného bláta +item.canister.gas.name=Plyn +item.canister.liquid_argon.full.name=Plná lahev kapalného argonu +item.canister.liquid_argon.name=LAr#Kapalný argon +item.canister.liquid_argon.partial.name=Lahev na kapalný argon +item.canister.liquid_nitrogen.full.name=Plná lahev kapalného dusíku +item.canister.liquid_nitrogen.name=Kapalina +item.canister.liquid_nitrogen.partial.name=Lahev na kapalný dusík +item.canister.lox.full.name=Plná lahev kapalného kyslíku +item.canister.lox.name=LOX #Kapalný kyslík +item.canister.lox.partial.name=Lahev na kapalný kyslík +item.carbon_fragments.name=Drcený uhlík +item.compressed_desh.name=Válcovaný frikcní kov +item.compressed_titanium.name=Válcovaný titan +item.desh_axe.name=Sekera z frikcního kovu +item.desh_boots.name=Boty z frikcního kovu +item.desh_chestplate.name=Hrudní chránic z frikcního kovu +item.desh_helmet.name=Helma z frikcního kovu +item.desh_hoe.name=Motyka z frikcního kovu +item.desh_leggings.name=Kalhoty z frikcního kovu +item.desh_pick.name=Krumpác z frikcního kovu +item.desh_pick_slime.description.name=Muže sbírat vejce slizouna +item.desh_pick_slime.name=Lepivý krumpác z frikcního kovu +item.desh_spade.name=Lopata z frikcního kovu +item.desh_stick.name=Tycka z frikcního kovu +item.desh_sword.name=Mec z frikcního kovu +item.empty_gas_canister.name=Prázdná tlaková lahev +item.engine_t2.name=Vylepšený raketový motor +item.fluid_manip.name=Kapalinový manipulator +item.grapple.name=Hák +item.heavy_nose_cone.name=Vylepšená špička rakety +item.ingot_desh.name=Ingot frikcního kovu +item.ingot_titanium.name=Titanový ingot +item.key.t2.name=Klíc typ 2 +item.methane_canister.name=Plná lahev metanu +item.methane_canister_partial.name=Lahev na metan +item.orion_drive.name=Iontový motor +item.raw_desh.name=Nezpracovaný frikcní kov +item.reinforced_plate_t2.name=Plech pro težký provoz +item.reinforced_plate_t3.name=Zesílený plech +item.rocket_fins_t2.name=Vylepšené křidélko +item.rocket_t2.cargo_rocket.name=Nákladní raketa +item.rocket_t2.t2Rocket.name=Raketa typ 2 +item.rocket_t3.t3Rocket.name=Raketa typ 3 +item.shard_iron.name=Železný úlomek +item.shard_titanium.name=Titanový úlomek +item.slimeling_cargo.name=Batoh pro slizouna +item.thermal_boots.name=Tepelně izolované boty +item.thermal_chestplate.name=Tepelně izolovaný hrudní chránič +item.thermal_cloth.name=Tepelně izolační tkanina +item.thermal_helm.name=Tepelně izolovaná helma +item.thermal_leggings.name=Tepelně izolované kalhoty +item.tier2.desc=Typ 2 +item.tier3.desc=Typ 3 +item.titanium_axe.name=Titanová sekera +item.titanium_boots.name=Titanové boty +item.titanium_chestplate.name=Titanový hrudní chránič +item.titanium_helmet.name=Titanová helma +item.titanium_hoe.name=Titanová motyka +item.titanium_leggings.name=Titanové kalhoty +item.titanium_pickaxe.name=Titanový krumpáč +item.titanium_shovel.name=Titanová lopata +item.titanium_sword.name=Titanový meč +planet.asteroids=Asteroidy +planet.mars=Mars +schematic.astro_miner.name=Těžební souprava +schematic.cargo_rocket.name=Automatická nákladní raketa +schematic.rocket_t3.name=Raketa typ 3 +tile.asteroids_block.asteroid_rock_0.name=Kus asteroidu +tile.asteroids_block.asteroid_rock_1.name=Kus asteroidu +tile.asteroids_block.asteroid_rock_2.name=Kus asteroidu +tile.asteroids_block.ore_aluminum_asteroids.name=Hliníková ruda +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenitová ruda +tile.asteroids_block.ore_iron_asteroids.name=Železná ruda +tile.asteroids_block.titanium_block.name=Titanový blok +tile.beam_receiver.description=Zdroje paprsku jsou připojeny ke strojům jako přívody nebo vývody pro přenos energie pomocí paprsku. +tile.beam_receiver.name=Zdroj paprsku +tile.beam_reflector.description=Směrovače paprsku slouží ke směrování paprsků za zdroje do cíle. Po kliknutí pravým tlačítkem lze vybírat cíle. +tile.beam_reflector.name=Směrovač paprsku +tile.cavern_vines.description=Jeskyní réva je nebezpecný živý organismus, který omotá hráce a táhne ho nahoru. +tile.cavern_vines.name=Jeskyní réva +tile.creeper_egg.description=Vejce creepera je k nalezení v dungeonech na Marsu, vylíhne se z nej predátor pripravený explodovat. +tile.creeper_egg.name=Vejce creepra +tile.cryo_chamber.description=Kryogenická komora dovolí hráci spát pres den, uzdravovat se ze zranení, ale vyžaduje cas pro znovu nabití. +tile.dense_ice.name=Zhuštěný led +tile.electrolyzer.description=Vyrábí z vody kyslík a vodík (používá se v syntetizéru metanu). +tile.gas_liquefier.description=Zkapalnené plyny, budto z atmosféry nebo tlakových lahví. Kapalný metan je dobré raketové palivo! +tile.hydrogen_pipe.description=Vodíková trubka dopravuje vodík mezi stroji. +tile.hydrogen_pipe.name=Vodíková trubka +tile.launch_controller.description=Odpalovace se využívají pro úpravu chování startu, tím, že umožnují nastavení kritérií pro odpálení a cíl, tak se nabízí možnost využití pro automatické starty. +tile.mars.coppermars.name=Medená ruda +tile.mars.deshmars.name=Ruda frikcního kovu +tile.mars.ironmars.name=Železná ruda +tile.mars.marscobblestone.name=Dlažební kámen +tile.mars.marsdeco.name=Blok z frikcního kovu +tile.mars.marsdirt.name=Podpovrchový kámen +tile.mars.marsdungeon.name=Zed dungeonu +tile.mars.marsgrass.name=Povrchový kámen +tile.mars.marsstone.name=Kámen +tile.mars.tinmars.name=Cínová ruda +tile.mars_stairs_cobblestone.name=Schody z dlažebního kamene +tile.mars_stairs_brick.name=Zděné schody (dungeon) +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Stázová komora +tile.mars_machine.2.name=Odpalovac +tile.mars_machine.4.name=Zkapalnovac +tile.mars_machine.5.name=Syntetizér metanu +tile.mars_machine.6.name=Vodní electrolyzér +tile.methane_synthesizer.description=Se zdrojem vodíku a uhlíku vyrábí Metan pro další zpracování ve zkapalnovaci. +tile.miner_base.description=Základna těžební soupravy slouží jako dokovací port pro těžební stanici. Postavte jej jako krychly o straně 2 m. +tile.miner_base.name=Základna pro těžební soupravu +tile.slab_gc_half.mars_bricks_slab.name=Zděná podlaha (dungeon) +tile.slab_gc_half.mars_slab.name=Podlaha z dlažebního kamene +tile.slimeling_egg.blue.name=Vejce modrého slizouna +tile.slimeling_egg.description=Vejce slizouna, pokud jsou rozbita hrácovou rukou, tak se z nich vylíhne brzy mazlícek. +tile.slimeling_egg.red.name=Vejce červeného slizouna +tile.slimeling_egg.yellow.name=Vejce žlutého slizouna +tile.sludge.name=Infikované bláto +tile.telepad_short.description=Transportéry krátkého dosahu slouží k přepravě hráčů a dalších živých bytostí na krátké vzdálenosti (250 m) po spárování s dalším transportérem. +tile.telepad_short.name=Telepad krátkého dosahu +tile.terraformer.description=Terraformery umožnují premenit cásti cizích planet na prostredí podobné zemi. Vytvárí trávu, stromy a vodu pokud dostane správné suroviny. +tile.treasure_t2.description=Pokladnice typu 2 jsou k nalezení v dungeonech na Marsu. Lze je odemknout po zabití bosse. +tile.treasure_t2.name=Pokladnice typ 2 +tile.treasure_t3.description=Pokladnice typu 3 zatím nejsou využity. +tile.treasure_t3.name=Pokladnice typ 3 +tile.venus.lead_block.name=Olověný blok +tile.venus.dungeon_brick_venus_1.name=Zeď Venušina dungeonu I +tile.venus.dungeon_brick_venus_2.name=Zeď Venušina dungeonu II +tile.venus.venus_ore_aluminum.name=Hliníková ruda +tile.venus.venus_ore_copper.name=Měděná ruda +tile.venus.venus_ore_galena.name=Galenitová ruda +tile.venus.venus_ore_quartz.name=Křemen +tile.venus.venus_ore_silicon.name=Křemíková ruda +tile.venus.venus_ore_solar.name=Sluneční ruda +tile.venus.venus_ore_tin.name=Cínová ruda +tile.venus.venus_rock_0.name=Venušin měkký kámen +tile.venus.venus_rock_1.name=Venušin tvrdý kámen +tile.venus.venus_rock_2.name=Venušin vulkanický kámen +tile.venus.venus_rock_3.name=Pemza +tile.walkway.walkway.description=Lávky slouží k dekorativním účelům, propojují bloky při zachování patřičného vzhledu +tile.walkway.walkway.name=Lávka +tile.walkway.walkway_pipe.description=Lávka s trubkou slouží k transportu kapalin pod lávkou +tile.walkway.walkway_pipe.name=Lávka s trubkou +tile.walkway.walkway_wire.description=Lávka s kabelem slouží k přenosu energie pod lávkou +tile.walkway.walkway_wire.name=Lávka s kabelem +tile.wall_gc.mars.name=Stěna z dlažebního kamene +tile.wall_gc.mars_bricks.name=Zděná stěna (dungeon) diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cy_gb.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cy_gb.lang new file mode 100644 index 00000000..9fca67a8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/cy_gb.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +container.launchcontroller.name=Launch Controller ##NEEDS TRANSLATE## +container.mars_lander.name=Landing Balloons ##NEEDS TRANSLATE## +container.short_range_telepad.name=Short Range Telepad ##NEEDS TRANSLATE## +container.tile_terraformer.name=Terraformer ##NEEDS TRANSLATE## +dimension.mars.name=Mars ##NEEDS TRANSLATE## +entity.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +entity.creeper_boss.name=Evolved Creeper Boss ##NEEDS TRANSLATE## +entity.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +entity.grapple_hook.name=Grapple Hook ##NEEDS TRANSLATE## +entity.landing_balloons.name=Landing Balloons ##NEEDS TRANSLATE## +entity.projectile_tnt.name=Projectile TNT ##NEEDS TRANSLATE## +entity.rocket_cargo.name=Cargo Rocket ##NEEDS TRANSLATE## +entity.rocket_t2.name=Tier 2 Rocket ##NEEDS TRANSLATE## +entity.rocket_t3.name=Tier 3 Rocket ##NEEDS TRANSLATE## +entity.slimeling.name=Slimeling ##NEEDS TRANSLATE## +entity.sludgeling.name=Sludgeling ##NEEDS TRANSLATE## +entity.small_asteroid.name=Small Asteroid ##NEEDS TRANSLATE## +fluid.argon=Argon Gas ##NEEDS TRANSLATE## +fluid.atmosphericgases=Atmospheric Gases ##NEEDS TRANSLATE## +fluid.bacterialsludge=Bacterial Sludge ##NEEDS TRANSLATE## +fluid.carbondioxide=CO2 Gas ##NEEDS TRANSLATE## +fluid.fuel=Fuel ##NEEDS TRANSLATE## +fluid.helium=Helium Gas ##NEEDS TRANSLATE## +fluid.hydrogen=Hydrogen Gas ##NEEDS TRANSLATE## +fluid.liquidargon=Liquid Argon ##NEEDS TRANSLATE## +fluid.liquidmethane=Liquid Methane ##NEEDS TRANSLATE## +fluid.liquidnitrogen=Liquid Nitrogen ##NEEDS TRANSLATE## +fluid.liquidoxygen=Liquid Oxygen ##NEEDS TRANSLATE## +fluid.methane=Methane Gas ##NEEDS TRANSLATE## +fluid.nitrogen=Nitrogen Gas ##NEEDS TRANSLATE## +fluid.oxygen=Oxygen Gas ##NEEDS TRANSLATE## +gas.carbondioxide.name=Carbon Dioxide ##NEEDS TRANSLATE## +gas.nitrogen.name=Nitrogen ##NEEDS TRANSLATE## +gas.oxygen.name=Oxygen ##NEEDS TRANSLATE## +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Process ##NEEDS TRANSLATE## +gui.button.liquefy_stop.name=Stop ##NEEDS TRANSLATE## +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fragmented Carbon can go here ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.0=Already ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.1=Launched ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.0=Waiting for ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.1=ignition ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Habitable#No Oxygen#Gravity: 38% ##NEEDS TRANSLATE## +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds ##NEEDS TRANSLATE## +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here ##NEEDS TRANSLATE## +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) ##NEEDS TRANSLATE## +gui.gas_tank.desc.0=Gas storage ##NEEDS TRANSLATE## +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.0=This takes a hydrogen tank ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.1=or an Atmospheric Valve ##NEEDS TRANSLATE## +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency ##NEEDS TRANSLATE## +gui.launch_controller.desc.1=Frequency to launch rockets towards ##NEEDS TRANSLATE## +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=liquefied gas tank ##NEEDS TRANSLATE## +gui.liquid_tank.desc.0=Liquid Tank ##NEEDS TRANSLATE## +gui.message.address.name=Address ##NEEDS TRANSLATE## +gui.message.astro_miner.fail=This base already has an Astro Miner! ##NEEDS TRANSLATE## +gui.message.astro_miner1.fail=The docking area is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=That would be one Astro Miner too many! ##NEEDS TRANSLATE## +gui.message.astro_miner3.fail=The Astro Miner's base was removed! ##NEEDS TRANSLATE## +gui.message.astro_miner4.fail=The Astro Miner ran out of energy and cannot get back to base! ##NEEDS TRANSLATE## +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! ##NEEDS TRANSLATE## +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! ##NEEDS TRANSLATE## +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=BubbleExpanding ##NEEDS TRANSLATE## +gui.message.cargo_full.name=Cargo is Full ##NEEDS TRANSLATE## +gui.message.cargo_unloaded.name=Cargo is Unloaded ##NEEDS TRANSLATE## +gui.message.dest_address.name=Target Address ##NEEDS TRANSLATE## +gui.message.dest_frequency.name=Target ##NEEDS TRANSLATE## +gui.message.enable_grass.name=Enable Grass ##NEEDS TRANSLATE## +gui.message.enable_trees.name=Enable Trees ##NEEDS TRANSLATE## +gui.message.frequency.name=Frequency ##NEEDS TRANSLATE## +gui.message.fully_fueled.name=Fully Fueled ##NEEDS TRANSLATE## +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! ##NEEDS TRANSLATE## +gui.message.grass.name=Grass ##NEEDS TRANSLATE## +gui.message.instant.name=Instantly ##NEEDS TRANSLATE## +gui.message.invalid_address.name=Invalid Unique Address ##NEEDS TRANSLATE## +gui.message.invalid_freq.name=Invalid Frequency ##NEEDS TRANSLATE## +gui.message.invalid_target_address.name=Invalid Target Address ##NEEDS TRANSLATE## +gui.message.launch_when.name=Launch When ##NEEDS TRANSLATE## +gui.message.low_energy.name=Low energy ##NEEDS TRANSLATE## +gui.message.no_bonemeal.name=Not Enough Bonemeal ##NEEDS TRANSLATE## +gui.message.no_energy.name=Not Enough Energy ##NEEDS TRANSLATE## +gui.message.no_saplings.name=Not Enough Saplings ##NEEDS TRANSLATE## +gui.message.no_seeds.name=Not Enough Seeds ##NEEDS TRANSLATE## +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble ##NEEDS TRANSLATE## +gui.message.no_water.name=Not Enough Water ##NEEDS TRANSLATE## +gui.message.not_enough.name=Not Enough ##NEEDS TRANSLATE## +gui.message.not_enough_energy.name=Not Enough Energy! ##NEEDS TRANSLATE## +gui.message.not_set.name=Not Set ##NEEDS TRANSLATE## +gui.message.one_min.name=1 Minute ##NEEDS TRANSLATE## +gui.message.receiving_active.name=Receiving Active ##NEEDS TRANSLATE## +gui.message.redstone_sig.name=Redstone Signal ##NEEDS TRANSLATE## +gui.message.remove_pad.name=Remove Pad On Launch ##NEEDS TRANSLATE## +gui.message.sending_active.name=Sending Active ##NEEDS TRANSLATE## +gui.message.success.name=Success ##NEEDS TRANSLATE## +gui.message.target_no_energy.name=Target doesn't have enough Energy! ##NEEDS TRANSLATE## +gui.message.telepad_not_found.name=Telepad Not Found! ##NEEDS TRANSLATE## +gui.message.telepad_too_far.name=Target too far! (Max %d) ##NEEDS TRANSLATE## +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! ##NEEDS TRANSLATE## +gui.message.ten_sec.name=10 Seconds ##NEEDS TRANSLATE## +gui.message.terraforming.name=Terraforming ##NEEDS TRANSLATE## +gui.message.thirty_sec.name=30 Seconds ##NEEDS TRANSLATE## +gui.message.trees.name=Trees ##NEEDS TRANSLATE## +gui.message.with_atmosphere0.name=on a planet with plenty of ##NEEDS TRANSLATE## +gui.message.with_atmosphere1.name=in the atmosphere ##NEEDS TRANSLATE## +gui.message.zero_water.name=No water! ##NEEDS TRANSLATE## +gui.methane_output.desc.2=methane tank ##NEEDS TRANSLATE## +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Follow ##NEEDS TRANSLATE## +gui.slimeling.button.sit=Sit ##NEEDS TRANSLATE## +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Attack Damage ##NEEDS TRANSLATE## +gui.slimeling.following=Following ##NEEDS TRANSLATE## +gui.slimeling.food=Favorite food ##NEEDS TRANSLATE## +gui.slimeling.kills=Kills ##NEEDS TRANSLATE## +gui.slimeling.name=Name ##NEEDS TRANSLATE## +gui.slimeling.owner=Owner ##NEEDS TRANSLATE## +gui.slimeling.scale=Scale ##NEEDS TRANSLATE## +gui.slimeling.sitting=Sitting ##NEEDS TRANSLATE## +gui.status.liquefying.name=Liquefying ##NEEDS TRANSLATE## +gui.status.needs_carbon.name=Needs carbon ##NEEDS TRANSLATE## +gui.status.nogas.name=No gas ##NEEDS TRANSLATE## +gui.status.processing.name=Synthesizing ##NEEDS TRANSLATE## +gui.status.tankfull.name=Tank full ##NEEDS TRANSLATE## +gui.status.tanksfull.name=Tanks full ##NEEDS TRANSLATE## +gui.telepad.desc.0=This is the Telepad's$unique address ##NEEDS TRANSLATE## +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. ##NEEDS TRANSLATE## +gui.terraformer.desc.0=Water Tank ##NEEDS TRANSLATE## +gui.water_bucket_slot.desc=Place water buckets here ##NEEDS TRANSLATE## +item.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +item.atmospheric_valve.name=Atmospheric Valve ##NEEDS TRANSLATE## +item.beam_core.name=Beam Core ##NEEDS TRANSLATE## +item.bucket_sludge.name=Bacterial Sludge Bucket ##NEEDS TRANSLATE## +item.canister.gas.name=Gas ##NEEDS TRANSLATE## +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level ##NEEDS TRANSLATE## +item.canister.liquid_argon.partial.name=Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.name=Liquid ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.lox.full.name=Filled Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.canister.lox.name=LOX ##NEEDS TRANSLATE## +item.canister.lox.partial.name=Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.carbon_fragments.name=Fragmented Carbon ##NEEDS TRANSLATE## +item.compressed_desh.name=Compressed Desh ##NEEDS TRANSLATE## +item.compressed_titanium.name=Compressed Titanium ##NEEDS TRANSLATE## +item.desh_axe.name=Desh Axe ##NEEDS TRANSLATE## +item.desh_boots.name=Desh Boots ##NEEDS TRANSLATE## +item.desh_chestplate.name=Desh Chestplate ##NEEDS TRANSLATE## +item.desh_helmet.name=Desh Helmet ##NEEDS TRANSLATE## +item.desh_hoe.name=Desh Hoe ##NEEDS TRANSLATE## +item.desh_leggings.name=Desh Leggings ##NEEDS TRANSLATE## +item.desh_pick.name=Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_pick_slime.description.name=Can harvest Slimeling eggs ##NEEDS TRANSLATE## +item.desh_pick_slime.name=Sticky Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_spade.name=Desh Shovel ##NEEDS TRANSLATE## +item.desh_stick.name=Desh Stick ##NEEDS TRANSLATE## +item.desh_sword.name=Desh Sword ##NEEDS TRANSLATE## +item.empty_gas_canister.name=Empty Gas Canister ##NEEDS TRANSLATE## +item.engine_t2.name=Heavy Rocket Engine ##NEEDS TRANSLATE## +item.fluid_manip.name=Fluid Manipulator ##NEEDS TRANSLATE## +item.grapple.name=Grapple ##NEEDS TRANSLATE## +item.heavy_nose_cone.name=Heavy Nose Cone ##NEEDS TRANSLATE## +item.ingot_desh.name=Desh Ingot ##NEEDS TRANSLATE## +item.ingot_titanium.name=Titanium Ingot ##NEEDS TRANSLATE## +item.key.t2.name=Tier 2 Dungeon Key ##NEEDS TRANSLATE## +item.methane_canister.name=Filled Methane Gas Canister ##NEEDS TRANSLATE## +item.methane_canister_partial.name=Methane Gas Canister ##NEEDS TRANSLATE## +item.orion_drive.name=Orion Drive ##NEEDS TRANSLATE## +item.raw_desh.name=Unrefined Desh ##NEEDS TRANSLATE## +item.reinforced_plate_t2.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.reinforced_plate_t3.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.rocket_fins_t2.name=Heavy Rocket Fins ##NEEDS TRANSLATE## +item.rocket_t2.cargo_rocket.name=Cargo Rocket ##NEEDS TRANSLATE## +item.rocket_t2.t2Rocket.name=Tier 2 Rocket ##NEEDS TRANSLATE## +item.rocket_t3.t3Rocket.name=Tier 3 Rocket ##NEEDS TRANSLATE## +item.shard_iron.name=Iron Shard ##NEEDS TRANSLATE## +item.shard_titanium.name=Titanium Shard ##NEEDS TRANSLATE## +item.slimeling_cargo.name=Slimeling Inventory Bag ##NEEDS TRANSLATE## +item.thermal_boots.name=Thermal Padding Boots ##NEEDS TRANSLATE## +item.thermal_chestplate.name=Thermal Padding Chestpiece ##NEEDS TRANSLATE## +item.thermal_cloth.name=Thermal Cloth ##NEEDS TRANSLATE## +item.thermal_helm.name=Thermal Padding Helm ##NEEDS TRANSLATE## +item.thermal_leggings.name=Thermal Padding Leggings ##NEEDS TRANSLATE## +item.tier2.desc=Tier 2 ##NEEDS TRANSLATE## +item.tier3.desc=Tier 3 ##NEEDS TRANSLATE## +item.titanium_axe.name=Titanium Axe ##NEEDS TRANSLATE## +item.titanium_boots.name=Titanium Boots ##NEEDS TRANSLATE## +item.titanium_chestplate.name=Titanium Chestplate ##NEEDS TRANSLATE## +item.titanium_helmet.name=Titanium Helmet ##NEEDS TRANSLATE## +item.titanium_hoe.name=Titanium Hoe ##NEEDS TRANSLATE## +item.titanium_leggings.name=Titanium Leggings ##NEEDS TRANSLATE## +item.titanium_pickaxe.name=Titanium Pickaxe ##NEEDS TRANSLATE## +item.titanium_shovel.name=Titanium Shovel ##NEEDS TRANSLATE## +item.titanium_sword.name=Titanium Sword ##NEEDS TRANSLATE## +planet.asteroids=Asteroids ##NEEDS TRANSLATE## +planet.mars=Mars ##NEEDS TRANSLATE## +schematic.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +schematic.cargo_rocket.name=Automatic Cargo Rocket ##NEEDS TRANSLATE## +schematic.rocket_t3.name=Tier 3 Rocket ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore ##NEEDS TRANSLATE## +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. ##NEEDS TRANSLATE## +tile.beam_receiver.name=Beam Receiver ##NEEDS TRANSLATE## +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. ##NEEDS TRANSLATE## +tile.beam_reflector.name=Beam Reflector ##NEEDS TRANSLATE## +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. ##NEEDS TRANSLATE## +tile.cavern_vines.name=Cavernous Vines ##NEEDS TRANSLATE## +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=Creeper Egg ##NEEDS TRANSLATE## +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Dense Ice ##NEEDS TRANSLATE## +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Hydrogen Pipe ##NEEDS TRANSLATE## +tile.launch_controller.description=Launch Controllers are used to customize launch behaviour, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Copper Ore ##NEEDS TRANSLATE## +tile.mars.deshmars.name=Desh Ore ##NEEDS TRANSLATE## +tile.mars.ironmars.name=Iron Ore ##NEEDS TRANSLATE## +tile.mars.marscobblestone.name=Cobblestone ##NEEDS TRANSLATE## +tile.mars.marsdeco.name=Block of Desh ##NEEDS TRANSLATE## +tile.mars.marsdirt.name=Mars Sub-Surface Rock ##NEEDS TRANSLATE## +tile.mars.marsdungeon.name=Dungeon Wall ##NEEDS TRANSLATE## +tile.mars.marsgrass.name=Mars Surface Rock ##NEEDS TRANSLATE## +tile.mars.marsstone.name=Mars Stone ##NEEDS TRANSLATE## +tile.mars.tinmars.name=Tin Ore ##NEEDS TRANSLATE## +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs ##NEEDS TRANSLATE## +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.mars_machine.0.name=Terraformer ##NEEDS TRANSLATE## +tile.mars_machine.1.name=Cryogenic Chamber ##NEEDS TRANSLATE## +tile.mars_machine.2.name=Launch Controller ##NEEDS TRANSLATE## +tile.mars_machine.4.name=Gas Liquefier ##NEEDS TRANSLATE## +tile.mars_machine.5.name=Methane Synthesizer ##NEEDS TRANSLATE## +tile.mars_machine.6.name=Water Electrolyzer ##NEEDS TRANSLATE## +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. ##NEEDS TRANSLATE## +tile.miner_base.name=Astro Miner Base ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab ##NEEDS TRANSLATE## +tile.slimeling_egg.blue.name=Blue Slimeling Egg ##NEEDS TRANSLATE## +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=Red Slimeling Egg ##NEEDS TRANSLATE## +tile.slimeling_egg.yellow.name=Yellow Slimeling Egg ##NEEDS TRANSLATE## +tile.sludge.name=Bacterial Sludge ##NEEDS TRANSLATE## +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Short Range Telepad ##NEEDS TRANSLATE## +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_t2.name=Tier 2 Treasure Chest ##NEEDS TRANSLATE## +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. ##NEEDS TRANSLATE## +tile.treasure_t3.name=Tier 3 Treasure Chest ##NEEDS TRANSLATE## +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. ##NEEDS TRANSLATE## +tile.walkway.walkway.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.name=Walkway ##NEEDS TRANSLATE## +tile.wall_gc.mars.name=Mars Cobblestone Wall ##NEEDS TRANSLATE## +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall ##NEEDS TRANSLATE## diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/de_de.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/de_de.lang new file mode 100644 index 00000000..d51e70e2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/de_de.lang @@ -0,0 +1,358 @@ +checklist.craft_grapple_hook.key=Greifhaken herstellen +checklist.equip_shield_controller.key=Schild Controller ausrüsten +checklist.thermal_padding.key=Thermalanzug ausrüsten +checklist.thermal_padding_t2.key=Stufe 2 Thermalanzug ausrüsten +container.crashed_probe.name=Abgestürzte Probe +container.entry_pod.name=Eintrittskapsel +container.geothermal_generator.name=Geothermal Generator +container.launchcontroller.name=Start-Controller +container.mars_lander.name=Landeballons +container.short_range_telepad.name=Kurzreichweiten-Telepad +container.slimeling_inventory.name=Schleimling Inventar +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astrominer +entity.creeper_boss.name=Entwickelter Creeper-Boss +entity.entry_pod.name=Eintrittskapsel +entity.entry_pod_venus.name=Venus Eintrittskapsel +entity.grapple_hook.name=Greifhaken +entity.juicer.name=Juicer +entity.landing_balloons.name=Landeballons +entity.projectile_tnt.name=Projektil TNT +entity.rocket_cargo.name=Automatische Güterrakete +entity.rocket_t2.name=Rakete (Stufe 2) +entity.rocket_t3.name=Rakete (Stufe 3) +entity.slimeling.name=Schleimling +entity.sludgeling.name=Schlammling +entity.small_asteroid.name=Kleiner Asteroid +entity.spider_queen.name=Spinnenkönigin +entity.web_shot.name=Spinnennetzschuss +fluid.argon=Argon +fluid.atmosphericgases=Atmosphärische Gase +fluid.bacterialsludge=Bakterieller Schlamm +fluid.carbondioxide=CO2 +fluid.fuel=Treibstoff +fluid.helium=Helium +fluid.hydrogen=Wasserstoff +fluid.liquidargon=Flüssiges Argon +fluid.liquidmethane=Flüssiges Methan +fluid.liquidnitrogen=Flüssiger Stickstoff +fluid.liquidoxygen=Flüssiger Sauerstoff +fluid.methane=Methan +fluid.nitrogen=Stickstoff +fluid.oil=Öl +fluid.oxygen=Sauerstoff +fluid.sulphuricacid=Schwefelsäure +gas.carbondioxide.name=Kohlenstoffdioxid +gas.nitrogen.name=Stickstoff +gas.oxygen.name=Sauerstoff +gc.configgui.astro_miners_max=Maximale Anzahl an Astrominern pro Spieler +gc.configgui.dimension_id_asteroids=Asteroiden - Dimensions-ID +gc.configgui.dimension_id_mars=Mars - Dimensions-ID +gc.configgui.dimension_id_venus=Venus - Dimensions-ID +gc.configgui.disable_aluminum_gen_asteroids=Asteroiden - Aluminiumerz-Generierung deaktivieren +gc.configgui.disable_ambient_lightning=Venus - Blitze deaktivieren +gc.configgui.disable_copper_gen_mars=Mars - Kupfererz-Generierung deaktivieren +gc.configgui.disable_desh_gen_mars=Mars - Desh-Erz-Generierung deaktivieren +gc.configgui.disable_galacticraft_helium=Helium-Registrierung deaktivieren +gc.configgui.disable_ilmenite_gen_asteroids=Asteroiden - Ilmeniterz-Generierung deaktivieren +gc.configgui.disable_iron_gen_asteroids=Asteroiden - Eisenerz-Generierung deaktivieren +gc.configgui.disable_iron_gen_mars=Mars - Eisenerz-Generierung deaktivieren +gc.configgui.disable_tin_gen_mars=Mars - Zinnerz-Generierung deaktivieren +gc.configgui.id_schematic_cargo_rocket=Güterrakete - Schematic-ID +gc.configgui.id_schematic_rocket_t2=Rakete (Stufe 2) - Schematic-ID +gc.configgui.id_schematic_rocket_t3=Rakete (Stufe 3) - Schematic-ID +gc.configgui.launch_controller_all_dims=Start-Controller - Alle Dimensionen +gc.configgui.launch_controller_chunk_load=Start-Controller - Chunkloading +gc.configgui.planets.title=Galacticraft Planets-Konfiguration +gui.button.liquefy.name=Prozess +gui.button.liquefy_stop.name=Stopp +gui.button.recall.name=Zurückrufen +gui.carbon_slot.desc.0=Fragmentierter Kohlenstoff kann hier hin +gui.cargorocket.status.launched.0=Bereits +gui.cargorocket.status.launched.1=gestartet +gui.cargorocket.status.waiting.0=Warte auf +gui.cargorocket.status.waiting.1=Zündung +gui.choose_planet.desc.mars=Bewohnbar#Kein Sauerstoff#Gravitation: 38% +gui.cryogenic.chat.cant_use=Ich kann das nicht für weitere %d Sekunden benutzen +gui.gas_input.desc.0=Versuche, einen Methankanister$hier zu platzieren +gui.gas_input.desc.1=(Vielleicht alternativ$ein Luftventil) +gui.gas_tank.desc.0=Gasspeicher +gui.gas_tank_compressed.desc.0=Gasspeicher (Unter Druck) +gui.hydrogen_input.desc.0=Dies nimmt einen Wasserstofftank +gui.hydrogen_input.desc.1=oder ein Atmosphärenventil auf +gui.launch_controller.advanced=Erweitert +gui.launch_controller.desc.0=Dies ist die spezifische Frequenz$des Start-Controllers +gui.launch_controller.desc.1=Frequenz, zu welcher die Raketen fliegen +gui.launch_controller.desc.2=Ob die Rampe beim Start$enfernt werden soll +gui.launch_controller.desc.3=Wenn die Kriterien erfüllt sind,$wird die Rakete starten +gui.launch_controller.desc.4=Ziele von anderen$Spielern verstecken +gui.launch_controller.owner=Besitzer +gui.liquid_output.desc.2=Flüssiggastank +gui.liquid_tank.desc.0=Flüssigkeitstank +gui.message.address.name=Adresse +gui.message.astro_miner.fail=Diese Basis hat schon einen Astrominer! +gui.message.astro_miner1.fail=Der Andockbereich ist versperrt durch: +gui.message.astro_miner1_a.fail=Die Route des Astrominers wird blockiert durch: +gui.message.astro_miner2.fail=Das wäre ein Astrominer zu viel! +gui.message.astro_miner3.fail=Die Astrominer-Basis wurde entfernt! +gui.message.astro_miner4.fail=Der Astrominer hat keine Energie mehr und kann nicht zur Basis zurückkehren! +gui.message.astro_miner5.fail=Die Route des Astrominers zurück zur Basis ist versperrt! +gui.message.astro_miner6.fail=Der Astrominer ist mit dem Abbauen fertig und wird jetzt aufhören! +gui.message.astro_miner7.fail=Auf einer Raumstation gibt es für den Astrominer nichts zum Abbauen! +gui.message.astro_miner8.fail=Ein zweiter Astrominer wurde auf der selben Basis erkannt, der erste wird nun einfrieren. +gui.message.bubble_exp.name=Blasenerweiterung +gui.message.cargo_full.name=wenn Frachtraum voll ist +gui.message.cargo_unloaded.name=wenn Fracht entladen wurde +gui.message.dest_address.name=Zieladresse +gui.message.dest_frequency.name=Ziel +gui.message.enable_grass.name=Gras aktivieren +gui.message.enable_trees.name=Bäume aktivieren +gui.message.frequency.name=Frequenz +gui.message.fully_fueled.name=wenn vollgetankt wurde +gui.message.grapple.fail=Ich brauche einen Faden, wenn ich den Greifhaken werfen will! +gui.message.grass.name=Gras +gui.message.instant.name=sofort +gui.message.invalid_address.name=Ungültige einzigartige Adresse +gui.message.invalid_freq.name=Ungültige Frequenz +gui.message.invalid_target_address.name=Ungültige Zieladresse +gui.message.launch_when.name=Starte +gui.message.low_energy.name=Zu wenig Energie +gui.message.low_energy_output.name=Geringer Energie Ausgang +gui.message.no_bonemeal.name=Nicht genügend Knochenmehl +gui.message.no_energy.name=Keine Energie! +gui.message.no_saplings.name=Nicht genügend Setzlinge +gui.message.no_seeds.name=Nicht genügend Samen +gui.message.no_valid_blocks.name=Keine gültigen Blöcke in Blase +gui.message.no_water.name=Nicht genügend Wasser +gui.message.not_enough.name=Nicht genug +gui.message.not_enough_energy.name=Nicht genug Energie! +gui.message.not_set.name=Nicht eingestellt +gui.message.one_min.name=1 Minute +gui.message.receiving_active.name=Empfangen aktiviert +gui.message.redstone_sig.name=Redstone-Signal +gui.message.remove_pad.name=Rampe entfernen +gui.message.sending_active.name=Senden aktiviert +gui.message.success.name=Erfolg +gui.message.target_no_energy.name=Ziel hat nicht genügend Energie! +gui.message.telepad_not_found.name=Telepad nicht gefunden! +gui.message.telepad_too_far.name=Ziel zu weit weg! (Max %d) +gui.message.telepad_wrong_dim.name=Ziel ist in der falschen Dimension! +gui.message.ten_sec.name=10 Sekunden +gui.message.terraforming.name=Terraforming +gui.message.thirty_sec.name=30 Sekunden +gui.message.trees.name=Bäume +gui.message.with_atmosphere0.name=auf einem Planeten mit reichlich +gui.message.with_atmosphere1.name=in der Atmosphäre +gui.message.zero_water.name=Kein Wasser! +gui.methane_output.desc.2=Methantank +gui.miner.docked=Angedockt +gui.miner.docking=Dockt an +gui.miner.mined=Abgebaut +gui.miner.mining=Baut ab +gui.miner.offline=Offline +gui.miner.out_of_range=Außer Reichweite +gui.miner.returning=Kehrt zurück +gui.miner.stuck=Steckt fest an: +gui.miner.travelling=Reist +gui.slimeling.button.follow=Folgen +gui.slimeling.button.sit=Sitzen +gui.slimeling.chat.wrong_player=Das ist nicht mein Schleimling! +gui.slimeling.damage=Angriffsschaden +gui.slimeling.following=Folgend +gui.slimeling.food=Lieblingsessen +gui.slimeling.kills=Kills +gui.slimeling.name=Name +gui.slimeling.owner=Besitzer +gui.slimeling.scale=Größe +gui.slimeling.sitting=Sitzend +gui.status.invalid_spout_1.name=Muss auf einer Schwefel-Fontäne +gui.status.invalid_spout_2.name=platziert werden. +gui.status.liquefying.name=Verflüssigen +gui.status.needs_carbon.name=Benötigt Kohlenstoff +gui.status.nogas.name=Kein Gas +gui.status.processing.name=Synthetisieren +gui.status.tankfull.name=Tank voll +gui.status.tanksfull.name=Tanks voll +gui.telepad.desc.0=Dies ist die einzigartige$Adresse des Telepads +gui.telepad.desc.1=Adresse eines anderen Telepads.$Lebewesen werden dort hin gesendet. +gui.terraformer.desc.0=Wassertank +gui.water_bucket_slot.desc=Platziere Wassereimer hier +item.astro_miner.name=Astrominer +item.atmospheric_valve.name=Atmosphärenventil +item.atomic_battery.name=Atombatterie +item.beam_core.name=Strahlenkern +item.bucket_sludge.name=Eimer mit bakteriellem Schlamm +item.bucket_sulphuric_acid.name=Schwefelsäureeimer +item.canister.gas.name=Gas #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Gefüllter Kanister mit Flüssigem Argon +item.canister.liquid_argon.name=Flüssigk. #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Kanister mit Flüssigem Argon +item.canister.liquid_nitrogen.full.name=Gefüllter Kanister mit Flüssigem Stickstoff +item.canister.liquid_nitrogen.name=Flüssigk. #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Kanister mit Flüssigem Stickstoff +item.canister.lox.full.name=Gefüllter Kanister mit Flüssigem Sauerstoff +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Kanister mit Flüssigem Sauerstoff +item.carbon_fragments.name=Fragmentierter Kohlenstoff +item.compressed_desh.name=Gepresstes Desh +item.compressed_titanium.name=Gepresstes Titan +item.desh_axe.name=Desh-Axt +item.desh_boots.name=Desh-Stiefel +item.desh_chestplate.name=Desh-Brustpanzer +item.desh_helmet.name=Desh-Helm +item.desh_hoe.name=Desh-Hacke +item.desh_leggings.name=Desh-Beinschutz +item.desh_pick.name=Desh-Spitzhacke +item.desh_pick_slime.description.name=Kann Creeper-Eier ernten +item.desh_pick_slime.name=Klebrige Desh-Spitzhacke +item.desh_spade.name=Desh-Schaufel +item.desh_stick.name=Desh-Stock +item.desh_sword.name=Desh-Schwert +item.dust_titanium.name=Titan-Staub +item.empty_gas_canister.name=Leerer Gaskanister +item.engine_t2.name=Schwerer Raketenmotor +item.fluid_manip.name=Flüssigkeitsmanipulator +item.grapple.name=Greifhaken +item.heavy_nose_cone.name=Schwere Raketennase +item.ingot_desh.name=Desh-Barren +item.ingot_lead.name=Blei-Barren +item.ingot_titanium.name=Titanbarren +item.key.t2.name=Dungeonschlüssel (Stufe 2) +item.key.t3.name=Dungeonschlüssel (Stufe 3) +item.methane_canister.name=Gefüllter Methangaskanister +item.methane_canister_partial.name=Methangaskanister +item.orion_drive.name=Ionenantrieb +item.prelaunch_checklist.name=Abflug-Checkliste +item.radioisotope_core.name=Radioisotopkern +item.raw_desh.name=Unraffiniertes Desh +item.reinforced_plate_t2.name=Robuste Platte +item.reinforced_plate_t3.name=Robuste Platte +item.rocket_fins_t2.name=Schwere Raketenfinnen +item.rocket_t2.cargo_rocket.name=Güterrakete +item.rocket_t2.t2Rocket.name=Rakete (Stufe 2) +item.rocket_t3.t3Rocket.name=Rakete (Stufe 3) +item.shard_iron.name=Eisenscherbe +item.shard_titanium.name=Titanscherbe +item.shield_controller.description=Der Schild-Controller schützt die Rüstung vor ALLEN Arten von Schaden - auch vor Korrosion an der Atmosphäre! +item.shield_controller.name=Schild-Controller +item.slimeling_cargo.name=Schleimling-Inventarbeutel +item.strange_seed.name=Seltsamer Samen +item.thermal_boots.name=Thermalpolsterstiefel +item.thermal_boots_t2.name=Thermalpolsterstiefel +item.thermal_chestplate.name=Thermalpolsterbrustpanzer +item.thermal_chestplate_t2.name=Thermalpolsterbrustpanzer +item.thermal_cloth.name=Thermalstoff +item.thermal_fabric.name=Isothermes Gewebe +item.thermal_helm.name=Thermalpolsterhelm +item.thermal_helm_t2.name=Thermalpolsterhelm +item.thermal_leggings.name=Thermalpolsterbeinschutz +item.thermal_leggings_t2.name=Thermalpolsterbeinschutz +item.tier2.desc=Stufe 2 +item.tier3.desc=Stufe 3 +item.titanium_axe.name=Titanaxt +item.titanium_boots.name=Titanstiefel +item.titanium_chestplate.name=Titanbrustpanzer +item.titanium_helmet.name=Titanhelm +item.titanium_hoe.name=Titanhacke +item.titanium_leggings.name=Titanbeinschutz +item.titanium_pickaxe.name=Titanspitzhacke +item.titanium_shovel.name=Titanschaufel +item.titanium_sword.name=Titanschwert +item.volcanic_pickaxe.description=Baut einen Bereich von 3x3 in Blickrichtung ab. +item.volcanic_pickaxe.name=Vulkanische Spitzhacke +planet.asteroids=Asteroiden +planet.mars=Mars +schematic.astro_miner.name=Astrominer +schematic.cargo_rocket.name=Automatische Güterrakete +schematic.rocket_t3.name=Rakete (Stufe 3) +tile.asteroids_block.asteroid_rock_0.name=Asteroidengestein +tile.asteroids_block.asteroid_rock_1.name=Asteroidengestein +tile.asteroids_block.asteroid_rock_2.name=Asteroidengestein +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminiumerz +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmeniterz +tile.asteroids_block.ore_iron_asteroids.name=Eisenerz +tile.asteroids_block.asteroid_deco.name=Dunkler Dekorationsblock +tile.asteroids_block.titanium_block.name=Titan-Block +tile.beam_receiver.description=Strahlenempfänger werden mit den Energieein- und ausgängen von Maschinen verbunden, um Energie über Strahlen zu übertragen. +tile.beam_receiver.name=Strahlenempfänger +tile.beam_reflector.description=Strahlenreflektoren werden benutzt, um Energiestrahlen von der Quelle zum Ziel weiterzuleiten. Rechtsklick um das Ziel umzuschalten. +tile.beam_reflector.name=Strahlenreflektor +tile.cavern_vines.description=Kavernöse Weinranken sind für Lebewesen gefährlich. Sie verfangen sich und werden nach oben gezogen. +tile.cavern_vines.name=Kavernöse Weinranken +tile.crashed_probe.name=Abgestürzte Probe +tile.creeper_egg.description=Creeper-Eier können nur in Marsdungeons gefunden werden. Wird eins gesprengt, schlüpft ein kleiner hinterhältiger Creeper aus ihm. +tile.creeper_egg.name=Creeper-Ei +tile.cryo_chamber.description=Kryogene Kammern ermöglichen dem Spieler am Tag zu schlafen und heilen ihn dabei. Sie haben allerdings eine Abklingzeit. +tile.dense_ice.name=Dichtes Eis +tile.electrolyzer.description=Wandelt Wasser in Wasserstoff (für das Methansynthesegerät) und Sauerstoff um. +tile.gas_liquefier.description=Verflüssigt Gase, entweder aus der Atmosphäre oder aus Kanistern. Flüssiges Methan ist ein guter Raketentreibstoff! +tile.geothermal_generator.description=Generiert Energie (mit Schwankungen), wenn auf einer Schwefel-Fontäne platziert. +tile.geothermal_generator.name=Geothermal Generator +tile.hydrogen_pipe.description=Wasserstoffrohre transportieren Wasserstoff von einer Maschine zur anderen. +tile.hydrogen_pipe.name=Wasserstoffrohr +tile.launch_controller.description=Start-Controller können benutzt werden, um das Startverhalten anzupassen, einschließlich Startbedingungen und Ziel für automatische Starts. +tile.mars.coppermars.name=Kupfererz +tile.mars.deshmars.name=Desh-Erz +tile.mars.ironmars.name=Eisenerz +tile.mars.marscobblestone.name=Marsbruchstein +tile.mars.marsdeco.name=Desh-Block +tile.mars.marsdirt.name=Marsunteroberflächengestein +tile.mars.marsdungeon.name=Marsdungeonziegel +tile.mars.marsgrass.name=Marsoberflächengestein +tile.mars.marsstone.name=Marsgestein +tile.mars.tinmars.name=Zinnerz +tile.mars_stairs_cobblestone.name=Marsbruchsteintreppe +tile.mars_stairs_brick.name=Marsdungeonziegeltreppe +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Kryogene Kammer +tile.mars_machine.2.name=Start-Controller +tile.mars_machine.4.name=Gasverflüssiger +tile.mars_machine.5.name=Methansynthesegerät +tile.mars_machine.6.name=Wasser-Elektolysegerät +tile.methane_synthesizer.description=Stellt aus Wasserstoff und Kohlenstoff Methan her, das im Gasverflüssiger weiterverarbeitet werden kann. +tile.miner_base.description=Die Astrominer-Basis ist die Andockstelle für einen Astrominer. Sie ist groß ... versuche, einen 2 x 2 x 2-Würfel mit den Blöcken zu bauen. +tile.miner_base.name=Astrominer-Basis +tile.miner_base_full.name=Astrominer-Basis +tile.slab_gc_half.mars_bricks_slab.name=Marsdungeonziegelstufe +tile.slab_gc_half.mars_slab.name=Marsbruchsteinstufe +tile.slab_gc_half.asteroids_slab.name=Dunkle Dekorationsstufe +tile.slimeling_egg.blue.name=Blaues Schleimling-Ei +tile.slimeling_egg.description=Einmal vom Spieler zerbrochen, werden aus Schleimling-Eiern Haustiere schlüpfen. +tile.slimeling_egg.red.name=Rotes Schleimling-Ei +tile.slimeling_egg.yellow.name=Gelbes Schleimling-Ei +tile.sludge.name=Bakterieller Schlamm +tile.spout.name=Dampffontäne +tile.sulphuric_acid.name=Schwefelsäure +tile.telepad_short.description=Kurzreichweiten-Telepads werden benutzt, um Spieler und andere Lebewesen über kurze Distanzen (250 Blöcke) zu teleportieren, wenn sie mit anderen Telepads verbunden sind. +tile.telepad_short.name=Kurzreichweiten-Telepad +tile.terraformer.description=Terraformer werden benutzt, um etwas Grün auf entfernte Planeten zu bringen. Sie pflanzen Gras und Bäume, wenn sie die richtigen Materialien bekommen. +tile.treasure_t2.description=Schatztruhen der Stufe 2 werden in Marsdungeons erzeugt. Sie sind erst entsperrbar, nachdem der finale Boss besiegt wurde. +tile.treasure_t2.name=Schatztruhe (Stufe 2) +tile.treasure_t3.description=Schatztruhen der Stufe 3 werden zur Zeit nicht benutzt. +tile.treasure_t3.name=Schatztruhe (Stufe 3) +tile.venus.dungeon_brick_venus_1.name=Venus Dungeonziegel I +tile.venus.dungeon_brick_venus_2.name=Venus Dungeonziegel II +tile.venus.venus_ore_aluminum.name=Aluminiumerz +tile.venus.venus_ore_copper.name=Kupfererz +tile.venus.venus_ore_galena.name=Galena-Erz (Blei) +tile.venus.venus_ore_quartz.name=Quartzerz +tile.venus.venus_ore_silicon.name=Siliziumerz +tile.venus.venus_ore_tin.name=Zinnerz +tile.venus.venus_rock_0.name=Weiches Venusgestein +tile.venus.venus_rock_1.name=Hartes Venusgestein +tile.venus.venus_rock_2.name=Venus-Vulkangestein +tile.venus.venus_rock_3.name=Bimsstein +tile.venus.lead_block.name=Blei-Block +tile.venus_rock_scorched.name=Gebranntes Venusgestein +tile.walkway.walkway.description=Gehwege können für Dekorationszwecke benutzt werden und um Blöcke zu verbinden. +tile.walkway.walkway.name=Gehweg +tile.walkway.walkway_pipe.description=Sauerstoffleitungsgehwege werden benutzt, um Sauerstoffleitungen unter einer vollständig begehbaren Oberfläche zu verlegen. +tile.walkway.walkway_pipe.name=Gehweg +tile.walkway.walkway_wire.description=Aluminumkabelgehwege werden benutzt, um Kabel unter einer vollständig begehbaren Oberfläche zu verlegen. +tile.walkway.walkway_wire.name=Gehweg +tile.wall_gc.mars.name=Marsbruchsteinmauer +tile.wall_gc.mars_bricks.name=Marsdungeonziegelmauer +tile.web_torch.web_torch_0.name=Spinnweben-Faden +tile.web_torch.web_torch_1.description=Glowstone-Fackel +tile.web_torch.web_torch_1.name=Spinnweben-Faden diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_gb.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_gb.lang new file mode 100644 index 00000000..07c2f39f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_gb.lang @@ -0,0 +1,354 @@ +checklist.craft_grapple_hook.key=Craft Grappling Hook +checklist.equip_shield_controller.key=Equip Shield Controller +checklist.thermal_padding.key=Equip Thermal Suit +checklist.thermal_padding_t2.key=Equip Tier 2 Thermal Suit +container.crashed_probe.name=Crashed Probe +container.entry_pod.name=Entry Pod +container.geothermal_generator.name=Geothermal Generator +container.launchcontroller.name=Launch Controller +container.mars_lander.name=Landing Balloons +container.short_range_telepad.name=Short Range Telepad +container.slimeling_inventory.name=Slimeling Inventory +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astro Miner +entity.creeper_boss.name=Evolved Creeper Boss +entity.entry_pod.name=Entry Pod +entity.entry_pod_venus.name=Venus Entry Pod +entity.grapple_hook.name=Grappling Hook +entity.juicer.name=Juicer +entity.landing_balloons.name=Landing Balloons +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Cargo Rocket +entity.rocket_t2.name=Tier 2 Rocket +entity.rocket_t3.name=Tier 3 Rocket +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Small Asteroid +entity.spider_queen.name=Spider Queen +entity.web_shot.name=Web Shot +fluid.argon=Argon Gas +fluid.atmosphericgases=Atmospheric Gases +fluid.bacterialsludge=Bacterial Sludge +fluid.carbondioxide=CO2 Gas +fluid.fuel=Fuel +fluid.helium=Helium Gas +fluid.hydrogen=Hydrogen Gas +fluid.liquidargon=Liquid Argon +fluid.liquidmethane=Liquid Methane +fluid.liquidnitrogen=Liquid Nitrogen +fluid.liquidoxygen=Liquid Oxygen +fluid.methane=Methane Gas +fluid.nitrogen=Nitrogen Gas +fluid.oxygen=Oxygen Gas +gas.carbondioxide.name=Carbon Dioxide +gas.nitrogen.name=Nitrogen +gas.oxygen.name=Oxygen +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_aluminum_gen_asteroids=Disable Aluminium Ore Gen (Asteroids) +gc.configgui.disable_ambient_lightning=Disable Lightning (Venus) +gc.configgui.disable_copper_gen_mars=Disable Copper Ore Gen (Mars) +gc.configgui.disable_desh_gen_mars=Disable Desh Ore Gen (Mars) +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.disable_ilmenite_gen_asteroids=Disable Ilmenite Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_asteroids=Disable Iron Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_mars=Disable Iron Ore Gen (Mars) +gc.configgui.disable_tin_gen_mars=Disable Tin Ore Gen (Mars) +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Process +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Recall +gui.carbon_slot.desc.0=Fragmented Carbon can go here +gui.cargorocket.status.launched.0=Already +gui.cargorocket.status.launched.1=Launched +gui.cargorocket.status.waiting.0=Waiting for +gui.cargorocket.status.waiting.1=ignition +gui.choose_planet.desc.mars=Habitable#No Oxygen#Gravity: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) +gui.gas_tank.desc.0=Gas Storage +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) +gui.hydrogen_input.desc.0=This takes a hydrogen tank +gui.hydrogen_input.desc.1=or an Atmospheric Valve +gui.launch_controller.advanced=Advanced +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency +gui.launch_controller.desc.1=Frequency to launch rockets towards +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch +gui.launch_controller.desc.4=Hide destination frequency$from other players +gui.launch_controller.owner=Owner +gui.liquid_output.desc.2=liquefied gas tank +gui.liquid_tank.desc.0=Liquid Tank +gui.message.address.name=Address +gui.message.astro_miner.fail=This base already has an Astro Miner! +gui.message.astro_miner1.fail=The docking area is blocked by: +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: +gui.message.astro_miner2.fail=That would be one Astro Miner too many! +gui.message.astro_miner3.fail=The Astro Miner's base was removed! +gui.message.astro_miner4.fail=The Astro Miner is low on energy and cannot get back to base! +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. +gui.message.bubble_exp.name=Bubble Expanding +gui.message.cargo_full.name=Cargo is Full +gui.message.cargo_unloaded.name=Cargo is Unloaded +gui.message.dest_address.name=Target Address +gui.message.dest_frequency.name=Target +gui.message.enable_grass.name=Enable Grass +gui.message.enable_trees.name=Enable Trees +gui.message.frequency.name=Frequency +gui.message.fully_fueled.name=Fully Fueled +gui.message.grapple.fail=I'll need some string if I want to throw that Grappling Hook! +gui.message.grass.name=Grass +gui.message.instant.name=Instantly +gui.message.invalid_address.name=Invalid Unique Address +gui.message.invalid_freq.name=Invalid Frequency +gui.message.invalid_target_address.name=Invalid Target Address +gui.message.launch_when.name=Auto Launch When +gui.message.low_energy.name=Low energy +gui.message.low_energy_output.name=Low Energy Output +gui.message.no_bonemeal.name=Not Enough Bonemeal +gui.message.no_energy.name=No Energy! +gui.message.no_saplings.name=Not Enough Saplings +gui.message.no_seeds.name=Not Enough Seeds +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble +gui.message.no_water.name=Not Enough Water +gui.message.not_enough.name=Not Enough +gui.message.not_enough_energy.name=Not Enough Energy! +gui.message.not_set.name=Not Set +gui.message.one_min.name=1 Minute +gui.message.receiving_active.name=Receiving Active +gui.message.redstone_sig.name=Redstone Signal +gui.message.remove_pad.name=Remove Pad On Launch +gui.message.sending_active.name=Sending Active +gui.message.success.name=Success +gui.message.target_no_energy.name=Target doesn't have enough Energy! +gui.message.telepad_not_found.name=Telepad Not Found! +gui.message.telepad_too_far.name=Target too far! (Max %d) +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! +gui.message.ten_sec.name=10 Seconds +gui.message.terraforming.name=Terraforming +gui.message.thirty_sec.name=30 Seconds +gui.message.trees.name=Trees +gui.message.with_atmosphere0.name=on a planet with plenty of +gui.message.with_atmosphere1.name=in the atmosphere +gui.message.zero_water.name=No water! +gui.methane_output.desc.2=methane tank +gui.miner.docked=Docked +gui.miner.docking=Docking +gui.miner.mined=Mined +gui.miner.mining=Mining +gui.miner.offline=Offline +gui.miner.out_of_range=Out of range +gui.miner.returning=Returning +gui.miner.stuck=Stuck at: +gui.miner.travelling=Travelling +gui.slimeling.button.follow=Follow +gui.slimeling.button.sit=Sit +gui.slimeling.chat.wrong_player=This isn't my Slimeling! +gui.slimeling.damage=Attack Damage +gui.slimeling.following=Following +gui.slimeling.food=Favourite food +gui.slimeling.kills=Kills +gui.slimeling.name=Name +gui.slimeling.owner=Owner +gui.slimeling.scale=Scale +gui.slimeling.sitting=Sitting +gui.status.invalid_spout_1.name=Must be placed on +gui.status.invalid_spout_2.name=valid sulphur spout +gui.status.liquefying.name=Liquefying +gui.status.needs_carbon.name=Needs carbon +gui.status.nogas.name=No gas +gui.status.processing.name=Synthesizing +gui.status.tankfull.name=Tank full +gui.status.tanksfull.name=Tanks full +gui.telepad.desc.0=This is the Telepad's$unique address +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. +gui.terraformer.desc.0=Water Tank +gui.water_bucket_slot.desc=Place water buckets here +item.astro_miner.name=Astro Miner +item.atmospheric_valve.name=Atmospheric Valve +item.atomic_battery.name=Atomic Battery +item.beam_core.name=Beam Core +item.bucket_sludge.name=Bacterial Sludge Bucket +item.bucket_sulphuric_acid.name=Sulphuric Acid Bucket +item.canister.gas.name=Gas #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Canister of Liquid Argon +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen +item.canister.liquid_nitrogen.name=Liquid #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen +item.canister.lox.full.name=Filled Canister of Liquid Oxygen +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Canister of Liquid Oxygen +item.carbon_fragments.name=Fragmented Carbon +item.compressed_desh.name=Compressed Desh +item.compressed_titanium.name=Compressed Titanium +item.desh_axe.name=Desh Axe +item.desh_boots.name=Desh Boots +item.desh_chestplate.name=Desh Chestplate +item.desh_helmet.name=Desh Helmet +item.desh_hoe.name=Desh Hoe +item.desh_leggings.name=Desh Leggings +item.desh_pick.name=Desh Pickaxe +item.desh_pick_slime.description.name=Can harvest Creeper eggs +item.desh_pick_slime.name=Sticky Desh Pickaxe +item.desh_spade.name=Desh Shovel +item.desh_stick.name=Desh Stick +item.desh_sword.name=Desh Sword +item.empty_gas_canister.name=Empty Gas Canister +item.engine_t2.name=Heavy Rocket Engine +item.fluid_manip.name=Fluid Manipulator +item.grapple.name=Grappling Hook +item.heavy_nose_cone.name=Heavy Nose Cone +item.ingot_desh.name=Desh Ingot +item.ingot_lead.name=Lead Ingot +item.ingot_titanium.name=Titanium Ingot +item.key.t2.name=Tier 2 Dungeon Key +item.key.t3.name=Tier 3 Dungeon Key +item.methane_canister.name=Filled Methane Gas Canister +item.methane_canister_partial.name=Methane Gas Canister +item.orion_drive.name=Orion Drive +item.prelaunch_checklist.name=Pre-Launch Checklist +item.radioisotope_core.name=Radioisotope Core +item.raw_desh.name=Unrefined Desh +item.reinforced_plate_t2.name=Heavy-Duty Plate +item.reinforced_plate_t3.name=Heavy-Duty Plate +item.rocket_fins_t2.name=Heavy Rocket Fins +item.rocket_t2.cargo_rocket.name=Cargo Rocket +item.rocket_t2.t2Rocket.name=Tier 2 Rocket +item.rocket_t3.t3Rocket.name=Tier 3 Rocket +item.shard_iron.name=Iron Shard +item.shard_titanium.name=Titanium Shard +item.shield_controller.description=Shield Controller protects armor from ALL forms of damage - including atmospheric corrosion! +item.shield_controller.name=Shield Controller +item.slimeling_cargo.name=Slimeling Inventory Bag +item.strange_seed.name=Strange Seed +item.thermal_boots.name=Cosy Socks +item.thermal_boots_t2.name=Isothermal Socks +item.thermal_chestplate.name=Thermal Chestpiece +item.thermal_chestplate_t2.name=Isothermal Chestpiece +item.thermal_cloth.name=Thermal Cloth +item.thermal_fabric.name=Isothermal Fabric +item.thermal_helm.name=Thermal Cap +item.thermal_helm_t2.name=Isothermal Cap +item.thermal_leggings.name=Thermal Leggings +item.thermal_leggings_t2.name=Isothermal Leggings +item.tier2.desc=Tier 2 +item.tier3.desc=Tier 3 +item.titanium_axe.name=Titanium Axe +item.titanium_boots.name=Titanium Boots +item.titanium_chestplate.name=Titanium Chestplate +item.titanium_helmet.name=Titanium Helmet +item.titanium_hoe.name=Titanium Hoe +item.titanium_leggings.name=Titanium Leggings +item.titanium_pickaxe.name=Titanium Pickaxe +item.titanium_shovel.name=Titanium Shovel +item.titanium_sword.name=Titanium Sword +item.volcanic_pickaxe.description=Mines a 3x3 area depending on which direction you are facing +item.volcanic_pickaxe.name=Volcanic Pickaxe +planet.asteroids=Asteroids +planet.mars=Mars +schematic.astro_miner.name=Astro Miner +schematic.cargo_rocket.name=Automatic Cargo Rocket +schematic.rocket_t3.name=Tier 3 Rocket +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminium Ore +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore +tile.asteroids_block.asteroid_deco.name=Dark Decoration Block +tile.asteroids_block.titanium_block.name=Titanium Block +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. +tile.beam_receiver.name=Energy Beam Receiver +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. +tile.beam_reflector.name=Energy Beam Reflector +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. +tile.cavern_vines.name=Cavernous Vines +tile.crashed_probe.name=Crashed Probe +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. +tile.creeper_egg.name=Creeper Egg +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. +tile.dense_ice.name=Dense Ice +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! +tile.geothermal_generator.description=When placed on a valid sulphur vapour spout, generates energy at an oscillating rate +tile.geothermal_generator.name=Geothermal Generator +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. +tile.hydrogen_pipe.name=Hydrogen Pipe +tile.launch_controller.description=Launch Controllers are used to customise launch behaviour, including launch criteria and destination launch pad for auto launches. +tile.mars.coppermars.name=Copper Ore +tile.mars.deshmars.name=Desh Ore +tile.mars.ironmars.name=Iron Ore +tile.mars.marscobblestone.name=Mars Cobblestone +tile.mars.marsdeco.name=Block of Desh +tile.mars.marsdirt.name=Mars Regolith +tile.mars.marsdungeon.name=Mars Dungeon Brick +tile.mars.marsgrass.name=Mars Fine Regolith +tile.mars.marsstone.name=Mars Stone +tile.mars.tinmars.name=Tin Ore +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Cryogenic Chamber +tile.mars_machine.2.name=Launch Controller +tile.mars_machine.4.name=Gas Liquefier +tile.mars_machine.5.name=Methane Synthesizer +tile.mars_machine.6.name=Water Electrolyzer +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. +tile.miner_base.name=Astro Miner Base +tile.miner_base_full.name=Astro Miner Base +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab +tile.slab_gc_half.asteroids_slab.name=Dark Decoration Slab +tile.slimeling_egg.blue.name=Blue Slimeling Egg +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. +tile.slimeling_egg.red.name=Red Slimeling Egg +tile.slimeling_egg.yellow.name=Yellow Slimeling Egg +tile.sludge.name=Bacterial Sludge +tile.spout.name=Vapour Spout +tile.sulphuric_acid.name=Sulphuric Acid +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. +tile.telepad_short.name=Short Range Telepad +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. +tile.treasure_t2.name=Tier 2 Treasure Chest +tile.treasure_t3.description=Tier 3 Treasure Chests will generate in Venus Dungeons. They are unlockable after defeating the final boss. +tile.treasure_t3.name=Tier 3 Treasure Chest +tile.venus.dungeon_brick_venus_1.name=Venus Dungeon Brick I +tile.venus.dungeon_brick_venus_2.name=Venus Dungeon Brick II +tile.venus.venus_ore_aluminum.name=Aluminium Ore +tile.venus.venus_ore_copper.name=Copper Ore +tile.venus.venus_ore_galena.name=Galena Ore +tile.venus.venus_ore_quartz.name=Quartz Ore +tile.venus.venus_ore_silicon.name=Silicon Ore +tile.venus.venus_ore_tin.name=Tin Ore +tile.venus.venus_rock_0.name=Venus Soft Rock +tile.venus.venus_rock_1.name=Venus Hard Rock +tile.venus.venus_rock_2.name=Venus Volcanic Rock +tile.venus.venus_rock_3.name=Pumice +tile.venus.lead_block.name=Lead Block +tile.venus_rock_scorched.name=Scorched Venus Rock +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. +tile.walkway.walkway.name=Walkway +tile.walkway.walkway_pipe.description=Fluid Pipe Walkways are used for running pipes underneath a fully walkable surface. +tile.walkway.walkway_pipe.name=Walkway +tile.walkway.walkway_wire.description=Aluminium Wire Walkways are used for running wire underneath a fully walkable surface. +tile.walkway.walkway_wire.name=Walkway +tile.wall_gc.mars.name=Mars Cobblestone Wall +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall +tile.web_torch.web_torch_0.name=Web String +tile.web_torch.web_torch_1.description=Glowstone Torch +tile.web_torch.web_torch_1.name=Web String \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_us.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_us.lang new file mode 100644 index 00000000..a0411607 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/en_us.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=Craft Grapple Hook +checklist.equip_shield_controller.key=Equip Shield Controller +checklist.thermal_padding.key=Equip Thermal Suit +checklist.thermal_padding_t2.key=Equip Tier 2 Thermal Suit +container.crashed_probe.name=Crashed Probe +container.entry_pod.name=Entry Pod +container.geothermal_generator.name=Geothermal Generator +container.launchcontroller.name=Launch Controller +container.mars_lander.name=Landing Balloons +container.solar_array_controller.name=Solar Array Controller +container.short_range_telepad.name=Short Range Telepad +container.slimeling_inventory.name=Slimeling Inventory +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astro Miner +entity.creeper_boss.name=Evolved Creeper Boss +entity.entry_pod.name=Entry Pod +entity.entry_pod_venus.name=Venus Entry Pod +entity.grapple_hook.name=Grapple Hook +entity.juicer.name=Juicer +entity.landing_balloons.name=Landing Balloons +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Cargo Rocket +entity.rocket_t2.name=Tier 2 Rocket +entity.rocket_t3.name=Tier 3 Rocket +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Small Asteroid +entity.spider_queen.name=Spider Queen +entity.web_shot.name=Web Shot +fluid.argon=Argon Gas +fluid.atmosphericgases=Atmospheric Gases +fluid.bacterialsludge=Bacterial Sludge +fluid.carbondioxide=CO2 Gas +fluid.fuel=Fuel +fluid.helium=Helium Gas +fluid.hydrogen=Hydrogen Gas +fluid.liquidargon=Liquid Argon +fluid.liquidmethane=Liquid Methane +fluid.liquidnitrogen=Liquid Nitrogen +fluid.liquidoxygen=Liquid Oxygen +fluid.methane=Methane Gas +fluid.nitrogen=Nitrogen Gas +fluid.oil=Oil +fluid.oxygen=Oxygen Gas +fluid.sulphuricacid=Sulphuric Acid +gas.carbondioxide.name=Carbon Dioxide +gas.nitrogen.name=Nitrogen +gas.oxygen.name=Oxygen +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.dimension_id_venus=Venus Dimension ID +gc.configgui.disable_aluminum_gen_asteroids=Disable Aluminum Ore Gen (Asteroids) +gc.configgui.disable_ambient_lightning=Disable Lightning (Venus) +gc.configgui.disable_copper_gen_mars=Disable Copper Ore Gen (Mars) +gc.configgui.disable_desh_gen_mars=Disable Desh Ore Gen (Mars) +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.disable_small_asteroids=Disable Small Asteroid spawning (Asteroids) +gc.configgui.disable_ilmenite_gen_asteroids=Disable Ilmenite Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_asteroids=Disable Iron Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_mars=Disable Iron Ore Gen (Mars) +gc.configgui.disable_tin_gen_mars=Disable Tin Ore Gen (Mars) +gc.configgui.disable_venus_aluminum_gen=Disable Aluminum Ore Gen (Venus) +gc.configgui.disable_venus_copper_gen=Disable Copper Ore Gen (Venus) +gc.configgui.disable_venus_galena_gen=Disable Galena Ore Gen (Venus) +gc.configgui.disable_venus_quartz_gen=Disable Quartz Ore Gen (Venus) +gc.configgui.disable_venus_silicon_gen=Disable Silicon Ore Gen (Venus) +gc.configgui.disable_venus_solar_gen=Disable Solar Ore Gen (Venus) +gc.configgui.disable_venus_tin_gen=Disable Tin Ore Gen (Venus) +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.add_blacklist.name=Blacklist +gui.button.add_entity.name=Add Entity +gui.button.add_player.name=Add Player +gui.button.add_whitelist.name=Whitelist +gui.button.edit_blacklist.name=Edit Blacklist +gui.button.edit_priority.name=Edit Priority +gui.button.edit_whitelist.name=Edit Whitelist +gui.button.liquefy.name=Process +gui.button.liquefy_stop.name=Stop +gui.button.never_fire_team.name=Never fire at space race team +gui.button.recall.name=Recall +gui.button.remove_selected.name=Remove Selected +gui.carbon_slot.desc.0=Fragmented Carbon can go here +gui.cargorocket.status.launched.0=Already +gui.cargorocket.status.launched.1=Launched +gui.cargorocket.status.waiting.0=Waiting for +gui.cargorocket.status.waiting.1=ignition +gui.choose_planet.desc.mars=Habitable#No Oxygen#Gravity: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) +gui.gas_tank.desc.0=Gas Storage +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) +gui.hydrogen_input.desc.0=This takes a hydrogen tank +gui.hydrogen_input.desc.1=or an Atmospheric Valve +gui.launch_controller.advanced=Advanced +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency +gui.launch_controller.desc.1=Frequency to launch rockets towards +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch +gui.launch_controller.desc.4=Hide destination frequency$from other players +gui.launch_controller.owner=Owner +gui.liquid_output.desc.2=liquefied gas tank +gui.liquid_tank.desc.0=Liquid Tank +gui.message.address.name=Address +gui.message.astro_miner.fail=This base already has an Astro Miner! +gui.message.astro_miner1.fail=The docking area is blocked by: +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: +gui.message.astro_miner1_b.fail=Protected Area! +gui.message.astro_miner2.fail=That would be one Astro Miner too many! +gui.message.astro_miner3.fail=The Astro Miner's base was removed! +gui.message.astro_miner4.fail=The Astro Miner is low on energy and cannot get back to base! +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. +gui.message.blacklist_mode.name=Blacklist Mode +gui.message.bubble_exp.name=Bubble Expanding +gui.message.cargo_full.name=Cargo is Full +gui.message.cargo_unloaded.name=Cargo is Unloaded +gui.message.connected_solar_controller.name=%d attached (16 block range) +gui.message.dest_address.name=Target Address +gui.message.dest_frequency.name=Target +gui.message.enable_grass.name=Enable Grass +gui.message.enable_trees.name=Enable Trees +gui.message.enter_entity.name=Enter entity name/id +gui.message.enter_player.name=Enter player name +gui.message.frequency.name=Frequency +gui.message.fully_fueled.name=Fully Fueled +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! +gui.message.grass.name=Grass +gui.message.instant.name=Instantly +gui.message.invalid_address.name=Invalid Unique Address +gui.message.invalid_freq.name=Invalid Frequency +gui.message.invalid_target_address.name=Invalid Target Address +gui.message.launch_when.name=Auto Launch When +gui.message.low_energy.name=Low energy +gui.message.low_energy_output.name=Low Energy Output +gui.message.no_bonemeal.name=Not Enough Bonemeal +gui.message.no_energy.name=No Energy! +gui.message.no_saplings.name=Not Enough Saplings +gui.message.no_seeds.name=Not Enough Seeds +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble +gui.message.no_water.name=Not Enough Water +gui.message.not_enough.name=Not Enough +gui.message.not_enough_energy.name=Not Enough Energy! +gui.message.not_set.name=Not Set +gui.message.one_min.name=1 Minute +gui.message.player.name=Player +gui.message.priority_closest.name=Closest +gui.message.priority_health_high.name=Highest Health +gui.message.priority_health_low.name=Lowest Health +gui.message.priority_low.name=Priority (Lowest first) +gui.message.receiving_active.name=Receiving Active +gui.message.redstone_sig.name=Redstone Signal +gui.message.remove_pad.name=Remove Pad On Launch +gui.message.sending_active.name=Sending Active +gui.message.success.name=Success +gui.message.target_meteors.name=Target Meteors +gui.message.target_no_energy.name=Target doesn't have enough Energy! +gui.message.telepad_not_found.name=Telepad Not Found! +gui.message.telepad_too_far.name=Target too far! (Max %d) +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! +gui.message.telepad_target_disabled.name=Target is disabled +gui.message.ten_sec.name=10 Seconds +gui.message.terraforming.name=Terraforming +gui.message.thirty_sec.name=30 Seconds +gui.message.trees.name=Trees +gui.message.with_atmosphere0.name=on a planet with plenty of +gui.message.with_atmosphere1.name=in the atmosphere +gui.message.zero_water.name=No water! +gui.methane_output.desc.2=methane tank +gui.miner.docked=Docked +gui.miner.docking=Docking +gui.miner.mined=Mined +gui.miner.mining=Mining +gui.miner.offline=Offline +gui.miner.out_of_range=Out of range +gui.miner.returning=Returning +gui.miner.stuck=Stuck at: +gui.miner.travelling=Traveling +gui.slimeling.button.follow=Follow +gui.slimeling.button.sit=Sit +gui.slimeling.chat.wrong_player=This isn't my Slimeling! +gui.slimeling.damage=Attack Damage +gui.slimeling.following=Following +gui.slimeling.food=Favorite food +gui.slimeling.kills=Kills +gui.slimeling.name=Name +gui.slimeling.owner=Owner +gui.slimeling.scale=Scale +gui.slimeling.sitting=Sitting +gui.status.invalid_spout_1.name=Must be placed on +gui.status.invalid_spout_2.name=valid sulfur spout +gui.status.liquefying.name=Liquefying +gui.status.needs_carbon.name=Needs carbon +gui.status.nogas.name=No gas +gui.status.processing.name=Synthesizing +gui.status.tankfull.name=Tank full +gui.status.tanksfull.name=Tanks full +gui.telepad.desc.0=This is the Telepad's$unique address +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. +gui.terraformer.desc.0=Water Tank +gui.water_bucket_slot.desc=Place water buckets here +item.astro_miner.name=Astro Miner +item.atmospheric_valve.name=Atmospheric Valve +item.atomic_battery.name=Atomic Battery +item.beam_core.name=Beam Core +item.bucket_sludge.name=Bacterial Sludge Bucket +item.bucket_sulphuric_acid.name=Sulfuric Acid Bucket +item.canister.gas.name=Gas #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Canister of Liquid Argon +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen +item.canister.liquid_nitrogen.name=Liquid #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen +item.canister.lox.full.name=Filled Canister of Liquid Oxygen +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Canister of Liquid Oxygen +item.carbon_fragments.name=Fragmented Carbon +item.compressed_desh.name=Compressed Desh +item.compressed_titanium.name=Compressed Titanium +item.desh_axe.name=Desh Axe +item.desh_boots.name=Desh Boots +item.desh_chestplate.name=Desh Chestplate +item.desh_helmet.name=Desh Helmet +item.desh_hoe.name=Desh Hoe +item.desh_leggings.name=Desh Leggings +item.desh_pick.name=Desh Pickaxe +item.desh_pick_slime.description.name=Can harvest Creeper eggs +item.desh_pick_slime.name=Sticky Desh Pickaxe +item.desh_spade.name=Desh Shovel +item.desh_stick.name=Desh Stick +item.desh_sword.name=Desh Sword +item.dust_titanium.name=Titanium Dust +item.empty_gas_canister.name=Empty Gas Canister +item.engine_t2.name=Heavy Rocket Engine +item.fluid_manip.name=Fluid Manipulator +item.grapple.name=Grapple +item.heavy_nose_cone.name=Heavy Nose Cone +item.ingot_desh.name=Desh Ingot +item.ingot_lead.name=Lead Ingot +item.ingot_titanium.name=Titanium Ingot +item.key.t2.name=Tier 2 Dungeon Key +item.key.t3.name=Tier 3 Dungeon Key +item.methane_canister.name=Filled Methane Gas Canister +item.methane_canister_partial.name=Methane Gas Canister +item.orion_drive.name=Orion Drive +item.prelaunch_checklist.name=Pre-Launch Checklist +item.radioisotope_core.name=Radioisotope Core +item.raw_desh.name=Unrefined Desh +item.reinforced_plate_t2.name=Heavy-Duty Plate +item.reinforced_plate_t3.name=Heavy-Duty Plate +item.rocket_fins_t2.name=Heavy Rocket Fins +item.rocket_t2.cargo_rocket.name=Cargo Rocket +item.rocket_t2.t2Rocket.name=Tier 2 Rocket +item.rocket_t3.t3Rocket.name=Tier 3 Rocket +item.shard_iron.name=Iron Shard +item.shard_titanium.name=Titanium Shard +item.shield_controller.description=Shield Controller protects armor from ALL forms of damage - including atmospheric corrosion! +item.shield_controller.name=Shield Controller +item.slimeling_cargo.name=Slimeling Inventory Bag +item.solar_dust.name=Solar Dust +item.solar_module_2.name=Solar Array Panel +item.strange_seed.name=Strange Seed +item.thermal_boots.name=Thermal Padding Boots +item.thermal_boots_t2.name=Isothermal Boots +item.thermal_chestplate.name=Thermal Padding Chestpiece +item.thermal_chestplate_t2.name=Isothermal Chestpiece +item.thermal_cloth.name=Thermal Cloth +item.thermal_fabric.name=Isothermal Fabric +item.thermal_helm.name=Thermal Padding Helm +item.thermal_helm_t2.name=Isothermal Helm +item.thermal_leggings.name=Thermal Padding Leggings +item.thermal_leggings_t2.name=Isothermal Leggings +item.thin_solar_wafer.name=Solar Array Wafer +item.tier2.desc=Tier 2 +item.tier3.desc=Tier 3 +item.titanium_axe.name=Titanium Axe +item.titanium_boots.name=Titanium Boots +item.titanium_chestplate.name=Titanium Chestplate +item.titanium_helmet.name=Titanium Helmet +item.titanium_hoe.name=Titanium Hoe +item.titanium_leggings.name=Titanium Leggings +item.titanium_pickaxe.name=Titanium Pickaxe +item.titanium_shovel.name=Titanium Shovel +item.titanium_sword.name=Titanium Sword +item.volcanic_pickaxe.description=Mines a 3x3 area depending on which direction you are facing +item.volcanic_pickaxe.name=Volcanic Pickaxe +planet.asteroids=Asteroids +planet.mars=Mars +schematic.astro_miner.name=Astro Miner +schematic.cargo_rocket.name=Automatic Cargo Rocket +schematic.rocket_t3.name=Tier 3 Rocket +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminum Ore +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore +tile.asteroids_block.asteroid_deco.name=Dark Decoration Block +tile.asteroids_block.titanium_block.name=Titanium Block +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. +tile.beam_receiver.name=Energy Beam Receiver +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. +tile.beam_reflector.name=Energy Beam Reflector +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. +tile.cavern_vines.name=Cavernous Vines +tile.crashed_probe.name=Crashed Probe +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. +tile.creeper_egg.name=Creeper Egg +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. +tile.dense_ice.name=Dense Ice +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! +tile.geothermal_generator.description=When placed on a valid sulfur vapor spout, generates energy at an oscillating rate +tile.geothermal_generator.name=Geothermal Generator +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. +tile.hydrogen_pipe.name=Hydrogen Pipe +tile.launch_controller.description=Launch Controllers are used to customize launch behavior, including launch criteria and destination launch pad for auto launches. +tile.laser_turret.name=Laser Turret +tile.laser_turret.description=Can target meteors, players, and mobs +tile.mars.coppermars.name=Copper Ore +tile.mars.deshmars.name=Desh Ore +tile.mars.ironmars.name=Iron Ore +tile.mars.marscobblestone.name=Mars Cobblestone +tile.mars.marsdeco.name=Block of Desh +tile.mars.marsdirt.name=Mars Regolith +tile.mars.marsdungeon.name=Mars Dungeon Brick +tile.mars.marsgrass.name=Mars Fine Regolith +tile.mars.marsstone.name=Mars Stone +tile.mars.tinmars.name=Tin Ore +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Cryogenic Chamber +tile.mars_machine.2.name=Launch Controller +tile.mars_machine.4.name=Gas Liquefier +tile.mars_machine.5.name=Methane Synthesizer +tile.mars_machine.6.name=Water Electrolyzer +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. +tile.miner_base.name=Astro Miner Base +tile.miner_base_full.name=Astro Miner Base +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab +tile.slab_gc_half.asteroids_slab.name=Dark Decoration Slab +tile.slimeling_egg.blue.name=Blue Slimeling Egg +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. +tile.slimeling_egg.red.name=Red Slimeling Egg +tile.slimeling_egg.yellow.name=Yellow Slimeling Egg +tile.sludge.name=Bacterial Sludge +tile.solar_array_controller.name=Solar Array Controller +tile.solar_array_controller.description=Connect Solar Array Modules to this block to provide power. Most effective on space stations. +tile.solar_array_module.name=Solar Array Module +tile.solar_array_module.description=Connect several of these blocks to a Solar Array Controller to provide power. Most effective on space stations. +tile.spout.name=Vapor Spout +tile.sulphuric_acid.name=Sulfuric Acid +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. +tile.telepad_short.name=Short Range Telepad +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. +tile.treasure_t2.name=Tier 2 Treasure Chest +tile.treasure_t3.description=Tier 3 Treasure Chests will generate in Venus Dungeons. They are unlockable after defeating the final boss. +tile.treasure_t3.name=Tier 3 Treasure Chest +tile.venus.dungeon_brick_venus_1.name=Venus Dungeon Brick I +tile.venus.dungeon_brick_venus_2.name=Venus Dungeon Brick II +tile.venus.venus_ore_aluminum.name=Aluminum Ore +tile.venus.venus_ore_copper.name=Copper Ore +tile.venus.venus_ore_galena.name=Galena Ore +tile.venus.venus_ore_quartz.name=Quartz Ore +tile.venus.venus_ore_silicon.name=Silicon Ore +tile.venus.venus_ore_solar.name=Solar Ore +tile.venus.venus_ore_tin.name=Tin Ore +tile.venus.venus_rock_0.name=Venus Soft Rock +tile.venus.venus_rock_1.name=Venus Hard Rock +tile.venus.venus_rock_2.name=Venus Volcanic Rock +tile.venus.venus_rock_3.name=Pumice +tile.venus.lead_block.name=Lead Block +tile.venus_rock_scorched.name=Scorched Venus Rock +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. +tile.walkway.walkway.name=Walkway +tile.walkway.walkway_pipe.description=Fluid Pipe Walkways are used for running pipes underneath a fully walkable surface. +tile.walkway.walkway_pipe.name=Walkway +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully walkable surface. +tile.walkway.walkway_wire.name=Walkway +tile.wall_gc.mars.name=Mars Cobblestone Wall +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall +tile.web_torch.web_torch_0.name=Web String +tile.web_torch.web_torch_1.description=Glowstone Torch +tile.web_torch.web_torch_1.name=Web String +achievement.mars=To Mars! +achievement.mars.desc=Take a Tier 2 Rocket to Mars! +achievement.asteroids=To The Asteroid Belt +achievement.asteroids.desc=Take a Tier 3 Rocket to The Asteroid Belt! +achievement.venus=To Venus! +achievement.venus.desc=Take a Tier 3 Rocket to Venus! diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/es_es.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/es_es.lang new file mode 100644 index 00000000..f0751ddd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/es_es.lang @@ -0,0 +1,326 @@ +container.entry_pod.name=Cápsula de entrada +container.launchcontroller.name=Controlador de lanzamiento +container.mars_lander.name=Globos de aterrizaje +container.short_range_telepad.name=Teletransportador de corto alcance +container.tile_terraformer.name=Terraformador +dimension.mars.name=Marte +entity.astro_miner.name=AstroMinador +entity.creeper_boss.name=Jefe creeper evolucionado +entity.entry_pod.name=Cápsula de entrada +entity.grapple_hook.name=Gancho +entity.landing_balloons.name=Globos de aterrizaje +entity.projectile_tnt.name=Proyectil TNT +entity.rocket_cargo.name=Cohete de Carga +entity.rocket_t2.name=Cohete de Nivel 2 +entity.rocket_t3.name=Cohete de Nivel 3 +entity.slimeling.name=Slimeling +entity.sludgeling.name=Gusano de lodo +entity.small_asteroid.name=Asteroide pequeño +fluid.argon=Argón +fluid.atmosphericgases=Gases atmosféricos +fluid.bacterialsludge=Lodo bacteriano +fluid.carbondioxide=Dióxido de carbono +fluid.fuel=Combustible +fluid.helium=Helio +fluid.hydrogen=Hidrógeno +fluid.liquidargon=Argón líquido +fluid.liquidmethane=Metano líquido +fluid.liquidnitrogen=Nítrogeno líquido +fluid.liquidoxygen=Oxígeno líquido +fluid.methane=Metano +fluid.nitrogen=Nítrogeno +fluid.oxygen=Oxígeno +gas.carbondioxide.name=Dióxido de carbono +gas.nitrogen.name=Nitrógeno +gas.oxygen.name=Oxígeno +gc.configgui.astro_miners_max=Número máximo de AstoMinadores por jugador +gc.configgui.dimension_id_asteroids=ID de la dimensión Asteroides +gc.configgui.dimension_id_mars=ID de la dimensión de Marte +gc.configgui.disable_galacticraft_helium=Desactivar el registro del gas helio +gc.configgui.id_schematic_cargo_rocket=ID del plano del cohete de carga +gc.configgui.id_schematic_rocket_t2=ID del plano del cohete nivel 2 +gc.configgui.id_schematic_rocket_t3=ID del plano del cohete nivel 3 +gc.configgui.launch_controller_all_dims=Controlador de lanzamiento en todas las dimensiones +gc.configgui.launch_controller_chunk_load=Controlador de lanzamiento mantiene los chunks cargados +gc.configgui.planets.title=Configuración de Galacticraft Planets +gui.button.liquefy.name=Procesar +gui.button.liquefy_stop.name=Parar +gui.button.recall.name=LLamar +gui.carbon_slot.desc.0=Aquí puede ir el carbón fragmentado +gui.cargorocket.status.launched.0=Preparado +gui.cargorocket.status.launched.1=Despegado +gui.cargorocket.status.waiting.0=Esperando por +gui.cargorocket.status.waiting.1=Ignición +gui.choose_planet.desc.mars=Habitable#Sin oxígeno#Gravedad: 38% +gui.cryogenic.chat.cant_use=No puedo usar esto hasta dentro de %d segundos +gui.gas_input.desc.0=Trata de colocar un$bote de metano aquí +gui.gas_input.desc.1=(Como alternativa,$una válvula atmosférica) +gui.gas_tank.desc.0=Depósito de gas +gui.gas_tank_compressed.desc.0=Depósito de gas (comprimido) +gui.hydrogen_input.desc.0=Esto consume un bote de hidrógeno +gui.hydrogen_input.desc.1=o una válvula atmosférica +gui.launch_controller.desc.0=Ésta es la frecuencia única del$controlador de lanzamiento +gui.launch_controller.desc.1=Frecuencia donde lanzar el cohete +gui.launch_controller.desc.2=Si la plataforma de lanzamiento debe$ser eliminada o lanzada +gui.launch_controller.desc.3=Cuando esto se cumpla,$se lanzará el cohete +gui.launch_controller.desc.4=Oculta el destino de la frecuencia$a otros jugadores +gui.liquid_output.desc.2=bote de gas licuado +gui.liquid_tank.desc.0=Tanque de líquido +gui.message.address.name=Dirección +gui.message.astro_miner.fail=¡Esta base ya cuenta con un AstroMinador! +gui.message.astro_miner1.fail=El area de embarque está bloqueada por: +gui.message.astro_miner1_a.fail=La ruta del AstroMinador está bloqueada por: +gui.message.astro_miner2.fail=¡Eso sería demasiado para un AstroMinador! +gui.message.astro_miner3.fail=¡La base del AstroMinador ha sido eliminada! +gui.message.astro_miner4.fail=¡El Astro Minador ha agotado su energía y no puede volver a la base! +gui.message.astro_miner5.fail=La ruta del AstroMinador de esta base parece estar bloqueada +gui.message.astro_miner6.fail=¡El AstroMinador ha finalizado de minar el area, y ahora se detendrá! +gui.message.astro_miner7.fail=¡No hay nada que minar en una estación espacial para un AstroMinador! +gui.message.astro_miner8.fail=Un segundo AstroMinador fue detectado en la misma base, el primero se detendrá +gui.message.bubble_exp.name=Burbuja expandiéndose +gui.message.cargo_full.name=Carga llena +gui.message.cargo_unloaded.name=Carga vacía +gui.message.dest_address.name=Dirección de destino +gui.message.dest_frequency.name=Frecuencia de destino +gui.message.enable_grass.name=Habilitar hierba +gui.message.enable_trees.name=Habilitar árboles +gui.message.frequency.name=Frecuencia +gui.message.fully_fueled.name=Lleno de combustible +gui.message.grapple.fail=¡Necesitaré algo de cuerda si quiero lanzar ese gancho de amarre! +gui.message.grass.name=Hierba +gui.message.instant.name=Instantáneamente +gui.message.invalid_address.name=Frecuencia única inválida +gui.message.invalid_freq.name=Frecuencia inválida +gui.message.invalid_target_address.name=Frecuencia de destino inválida +gui.message.launch_when.name=Lanzar cuando +gui.message.low_energy.name=Energía baja +gui.message.no_bonemeal.name=Polvo de hueso insuficiente +gui.message.no_energy.name=¡Sin energía! +gui.message.no_saplings.name=Brotes insuficientes +gui.message.no_seeds.name=Semillas insuficientes +gui.message.no_valid_blocks.name=Bloques no válidos en la burbuja +gui.message.no_water.name=Agua insuficiente +gui.message.not_enough.name=Insuficiente +gui.message.not_enough_energy.name=Energía insuficiente +gui.message.not_set.name=No establecido +gui.message.one_min.name=1 minuto +gui.message.receiving_active.name=Recepción activa +gui.message.redstone_sig.name=Señal de redstone +gui.message.remove_pad.name=Quitar plataforma +gui.message.sending_active.name=Envío activo +gui.message.success.name=Éxito +gui.message.target_no_energy.name=El objetivo no tiene suficiente energía +gui.message.telepad_not_found.name=Teletransportador no encontrado +gui.message.telepad_too_far.name=¡Objetivo muy lejos! (Máximo %d) +gui.message.telepad_wrong_dim.name=Destino en otra dimensión +gui.message.ten_sec.name=10 segundos +gui.message.terraforming.name=Terraformando +gui.message.thirty_sec.name=30 segundos +gui.message.trees.name=Árboles +gui.message.with_atmosphere0.name=en un planeta lleno de +gui.message.with_atmosphere1.name=en la atmósfera +gui.message.zero_water.name=¡Sin agua! +gui.methane_output.desc.2=bote de metano +gui.miner.docked=Aparcado +gui.miner.docking=Aparcando +gui.miner.mined=Minado +gui.miner.mining=Minando +gui.miner.offline=Apagado +gui.miner.out_of_range=Fuera de rango +gui.miner.returning=Volviendo +gui.miner.stuck=Atascado en: +gui.miner.travelling=Viajando +gui.slimeling.button.follow=Seguir +gui.slimeling.button.sit=Sentar +gui.slimeling.chat.wrong_player=¡Este es mi slimeling! +gui.slimeling.damage=Daño de ataque +gui.slimeling.following=Siguiendo +gui.slimeling.food=Comida favorita +gui.slimeling.kills=Asesinatos +gui.slimeling.name=Nombre +gui.slimeling.owner=Dueño +gui.slimeling.scale=Tamaño +gui.slimeling.sitting=Sentando +gui.status.liquefying.name=Licuando +gui.status.needs_carbon.name=Necesita carbón +gui.status.nogas.name=Sin gas +gui.status.processing.name=Sintetizando +gui.status.tankfull.name=Tanque lleno +gui.status.tanksfull.name=Tanques llenos +gui.telepad.desc.0=Esta es la dirección única$del teletransportador +gui.telepad.desc.1=Dirección de otro teletransportador.$Las entidades se enviarán allí. +gui.terraformer.desc.0=Tanque de aqua +gui.water_bucket_slot.desc=Coloca cubos de agua aquí +item.astro_miner.name=Astro Miner +item.atmospheric_valve.name=Válvula atmosférica +item.beam_core.name=Núcleo del haz +item.bucket_sludge.name=Cubo de lodo bacteriano +item.canister.gas.name=Gas #nombre corto para el nivel de gas +item.canister.liquid_argon.full.name=Bote de Argón Líquido Lleno +item.canister.liquid_argon.name=LAR #nombre corto para el nivel de argón líquido +item.canister.liquid_argon.partial.name=Bote de argón líquido +item.canister.liquid_nitrogen.full.name=Bote de nitrógeno líquido lleno +item.canister.liquid_nitrogen.name=LIN #nombre corto para el nivel de nitrógeno líquido +item.canister.liquid_nitrogen.partial.name=Bote de nitrógeno líquido +item.canister.lox.full.name=Filled Canister of Liquid Oxygen +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Bote de oxígeno líquido +item.carbon_fragments.name=Carbón fragmentado +item.compressed_desh.name=Desh comprimido +item.compressed_titanium.name=Titanio comprimido +item.desh_axe.name=Hacha de desh +item.desh_boots.name=Botas de desh +item.desh_chestplate.name=Peto de desh +item.desh_helmet.name=Casco de desh +item.desh_hoe.name=Azada de desh +item.desh_leggings.name=Grebas de desh +item.desh_pick.name=Pico de desh +item.desh_pick_slime.description.name=Puedes recoger huevos de slimeling +item.desh_pick_slime.name=Pico de desh pegajoso +item.desh_spade.name=Pala de desh +item.desh_stick.name=Palo de desh +item.desh_sword.name=Espada de desh +item.empty_gas_canister.name=Bote de gas vacío +item.engine_t2.name=Motor de cohete grande +item.fluid_manip.name=Manipulador de fluidos +item.grapple.name=Gancho +item.heavy_nose_cone.name=Ojiva grande +item.ingot_desh.name=Lingote de desh +item.ingot_titanium.name=Lingote de titanio +item.key.t2.name=Llave de mazmorra de Nivel 2 +item.methane_canister.name=Bote de metano lleno +item.methane_canister_partial.name=Bote de metano +item.orion_drive.name=Propulsor menaiónico +item.raw_desh.name=Desh en bruto +item.reinforced_plate_t2.name=Placa de alta resistencia +item.reinforced_plate_t3.name=Placa de alta resistencia +item.rocket_fins_t2.name=Aleta de cohete grande +item.rocket_t2.cargo_rocket.name=Cohete de Carga +item.rocket_t2.t2Rocket.name=Cohete de Nivel 2 +item.rocket_t3.t3Rocket.name=Cohete de Nivel 3 +item.shard_iron.name=Fragmento de hierro +item.shard_titanium.name=Fragmento de titanio +item.slimeling_cargo.name=Bolsa para slimeling +item.thermal_boots.name=Calcetines térmicos +item.thermal_chestplate.name=Suéter térmico +item.thermal_cloth.name=Tela térmica +item.thermal_helm.name=Gorro térmico +item.thermal_leggings.name=Leggings térmicos +item.tier2.desc=Nivel 2 +item.tier3.desc=Nivel 3 +item.titanium_axe.name=Hacha de titanio +item.titanium_boots.name=Botas de titanio +item.titanium_chestplate.name=Peto de titanio +item.titanium_helmet.name=Casco de titanio +item.titanium_hoe.name=Azada de titanio +item.titanium_leggings.name=Grebas de titanio +item.titanium_pickaxe.name=Pico de titanio +item.titanium_shovel.name=Pala de titanio +item.titanium_sword.name=Espada de titanio +planet.asteroids=Asteroides +planet.mars=Marte +schematic.astro_miner.name=AstroMinador +schematic.cargo_rocket.name=Cohete de carga automático +schematic.rocket_t3.name=Cohete de Nivel 3 +tile.asteroids_block.asteroid_rock_0.name=Roca de Asteroide +tile.asteroids_block.asteroid_rock_1.name=Roca de Asteroide +tile.asteroids_block.asteroid_rock_2.name=Roca de Asteroide +tile.asteroids_block.ore_aluminum_asteroids.name=Mena de Aluminio +tile.asteroids_block.ore_ilmenite_asteroids.name=Mena de Ilmenita +tile.asteroids_block.ore_iron_asteroids.name=Mena de Hierro +tile.beam_receiver.description=Los receptores se conectan en la entrada o salida de energía de una máquina, para transferir energía por medio del rayo. +tile.beam_receiver.name=Receptor láser +tile.beam_reflector.description=Los refletores se usan para redirigir rayos de energía del emisor al receptor. Se puede hacer click derecho para elegir entre varios objetivos. +tile.beam_reflector.name=Reflector láser +tile.cavern_vines.description=Las lianas cavernosas son peligrosas para los seres vivos, enredandoles y arrastándoles hacia arriba. +tile.cavern_vines.name=Lianas cavernosas +tile.creeper_egg.description=Los huevos de creeper harán spawn en las mazmorras de Marte, spawneando a un astuto depredador después de una explosión. +tile.creeper_egg.name=Huevo de creeper +tile.cryo_chamber.description=Las cámaras criogénicas permiten al jugador dormir durante el día, curando un pequeña porción de vida, teniendo luego que esperar para reutilizarlas. +tile.dense_ice.name=Hielo denso +tile.electrolyzer.description=Transforma agua en hidrógeno (muy útil para el sintetizador de metano) y oxígeno. +tile.gas_liquefier.description=Licua los gases, ya sean de la atmósfera o de los botes. ¡El metano líquido hace un buen combustible! +tile.hydrogen_pipe.description=La tubería de hidrógeno puede transportar hidrógeno desde el almacén interno de gas de una máquina a otra. +tile.hydrogen_pipe.name=Tubería de hidrógeno +tile.launch_controller.description=El controlador de lanzamiento personaliza el lanzamiento, tanto el destino, como las condiciones para un lanzamiento automático. +tile.mars.coppermars.name=Mena de Cobre +tile.mars.deshmars.name=Mena de Desh +tile.mars.ironmars.name=Mena de Hierro +tile.mars.marscobblestone.name=Roca Marciana +tile.mars.marsdeco.name=Bloque de Desh +tile.mars.marsdirt.name=Roca Marciana Subterránea +tile.mars.marsdungeon.name=Pared de Mazmorra Marciana +tile.mars.marsgrass.name=Roca de la superfície Marciana +tile.mars.marsstone.name=Piedra marciana +tile.mars.tinmars.name=Mena de Estaño +tile.mars_stairs_cobblestone.name=Escaleras de Roca Marciana +tile.mars_stairs_brick.name=Escaleras de Mazmorra Marciana +tile.mars_machine.0.name=Terraformador +tile.mars_machine.1.name=Cámara Criogénica +tile.mars_machine.2.name=Controlador de Lanzamiento +tile.mars_machine.4.name=Condensador de Gas +tile.mars_machine.5.name=Sintetizador de Metano +tile.mars_machine.6.name=Electrolizador de Agua +tile.methane_synthesizer.description=Con una fuente de hidrógeno y de carbono fabrica metano para un posterior procesamiento en el condesador de gas. +tile.miner_base.description=La base del AstroMinador es dónde aparcará un AstroMinador. Es grande... intenta crear un cubo de 2 x 2 x 2 para ello. +tile.miner_base.name=Base del AstroMinador +tile.slab_gc_half.mars_bricks_slab.name=Losa de Mazmorra Marciana +tile.slab_gc_half.mars_slab.name=Losa de Roca Marciana +tile.slimeling_egg.blue.name=Huevo de Slimeling Azul +tile.slimeling_egg.description=Los huevos de Slimeling, una vez agrietados por las manos del jugador, eclosionarán en una mascota. +tile.slimeling_egg.red.name=Huevo de Slimeling Rojo +tile.slimeling_egg.yellow.name=Huevo de Slimeling Amarillo +tile.sludge.name=Lodo bacteriano +tile.telepad_short.description=Los teletransportadores se usan para enviar a jugadores y otras criaturas a cortas distancias (hasta 250 bloques) cuando está conectado a otro teletransportador. +tile.telepad_short.name=Teletransportador de corto alcance +tile.terraformer.description=Los terraformadores añaden hierba, árboles y agua en planetas distantes, cuando se le da los materiales correctos. +tile.treasure_t2.description=La llaves del tesoro nivel 2 se generarán en las Mazmorras de Marte. Se pueden desbloquear tras matar al jefe final. +tile.treasure_t2.name=Cofre del Tesoro Nivel 2 +tile.treasure_t3.description=Los Cofres del Tesoro Nivel 3 se generarán en las Mazmorras de Venus. Se pueden desbloquear tras matar al jefe final. +tile.treasure_t3.name=Cofre del tesoro nivel 3 +tile.walkway.walkway.description=Las Pasarelas se usan con fines decorativos, usadas para conectar bloques mientras se mantiene un tema espacial. +tile.walkway.walkway.name=Pasarela +tile.walkway.walkway_pipe.description=Las Pasarelas con Tubo de Fluidos se usan para hacer pasar tubos de fluidos bajo una superfície sobre la que andar. +tile.walkway.walkway_pipe.name=Pasarela +tile.walkway.walkway_wire.description=Las Pasarelas con Cable de Aluminio se usan para pasar cable bajo una superfície sobre la que andar. +tile.walkway.walkway_wire.name=Pasarela +tile.wall_gc.mars.name=Muro de Roca Marciana +tile.wall_gc.mars_bricks.name=Muro de Mazmorra Marciana + +tile.venus.dungeon_brick_venus_1.name=Ladrillo de la Mazmorra de Venus I +tile.venus.dungeon_brick_venus_2.name=Ladrillo de la Mazmorra de Venus II +tile.venus.venus_ore_aluminum.name=Mena de Aluminio +tile.venus.venus_ore_copper.name=Mena de Cobre +tile.venus.venus_ore_galena.name=Mena de Galena +tile.venus.venus_ore_quartz.name=Mena de Cuarzo +tile.venus.venus_ore_silicon.name=Mena de Silicio +tile.venus.venus_ore_tin.name=Mena de Estaño +tile.venus.venus_rock_0.name=Roca de Venus Suave +tile.venus.venus_rock_1.name=Roca de Venus Dura +tile.venus.venus_rock_2.name=Roca Volcánica de Venus +tile.venus.venus_rock_3.name=Piedra Pómez +tile.venus.lead_block.name=Bloque de Plomo +tile.venus_rock_scorched.name=Roca de Venus Chamuscada +entity.entry_pod_venus.name=Cápsula de Entrada a Venus +item.shield_controller.description=El Controlador de Escudo protege la armadura de CUALQUIER tipo de daño - ¡incluyendo la corrosión atmosférica! +item.shield_controller.name=Controlador de Escudo +item.strange_seed.name=Semilla Rara +item.thermal_boots_t2.name=Calcetines Isotérmicos +item.thermal_chestplate_t2.name=Suéter Isotérmico +item.thermal_fabric.name=Tela Isotérmica +item.thermal_helm_t2.name=Gorro Isotérmico +item.thermal_leggings_t2.name=Leggings Isotérmicos +tile.geothermal_generator.description=Cuando se coloca sobre una salida de vapor de sulfuro válida, genera energia a una velocidad oscilante +tile.geothermal_generator.name=Generador Geotérmico +item.prelaunch_checklist.name=Lista de Comprobación para Antes del Lanzamiento +item.radioisotope_core.name=Núcleo Radioisótopo +item.volcanic_pickaxe.description=Mina un área de 3x3 en la dirección a la que apuntes +item.volcanic_pickaxe.name=Pico Volcánico +tile.web_torch.web_torch_1.description=Antorcha de Piedra Luminosa +tile.spout.name=Salida de Vapor +tile.sulphuric_acid.name=Ácido Sulfúrico + +checklist.craft_grapple_hook.key=Fabricar Gancho +checklist.equip_shield_controller.key=Equipar Controlador de Escudo +checklist.thermal_padding.key=Equipar Ropa Térmica +checklist.thermal_padding_t2.key=Equipar Ropa Térmica de Nivel 2 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fi_fi.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fi_fi.lang new file mode 100644 index 00000000..8305975f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fi_fi.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +container.launchcontroller.name=Launch Controller ##NEEDS TRANSLATE## +container.mars_lander.name=Landing Balloons ##NEEDS TRANSLATE## +container.short_range_telepad.name=Short Range Telepad ##NEEDS TRANSLATE## +container.tile_terraformer.name=Terraformer ##NEEDS TRANSLATE## +dimension.mars.name=Mars ##NEEDS TRANSLATE## +entity.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +entity.creeper_boss.name=Evolved Creeper Boss ##NEEDS TRANSLATE## +entity.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +entity.grapple_hook.name=Grapple Hook ##NEEDS TRANSLATE## +entity.landing_balloons.name=Landing Balloons ##NEEDS TRANSLATE## +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Cargo Rocket ##NEEDS TRANSLATE## +entity.rocket_t2.name=Tier 2 Rocket ##NEEDS TRANSLATE## +entity.rocket_t3.name=Tier 3 Rocket ##NEEDS TRANSLATE## +entity.slimeling.name=Slimeling ##NEEDS TRANSLATE## +entity.sludgeling.name=Sludgeling ##NEEDS TRANSLATE## +entity.small_asteroid.name=Small Asteroid ##NEEDS TRANSLATE## +fluid.argon=Argon Gas ##NEEDS TRANSLATE## +fluid.atmosphericgases=Atmospheric Gases ##NEEDS TRANSLATE## +fluid.bacterialsludge=Bacterial Sludge ##NEEDS TRANSLATE## +fluid.carbondioxide=CO2 Gas ##NEEDS TRANSLATE## +fluid.fuel=Fuel ##NEEDS TRANSLATE## +fluid.helium=Helium Gas ##NEEDS TRANSLATE## +fluid.hydrogen=Hydrogen Gas ##NEEDS TRANSLATE## +fluid.liquidargon=Liquid Argon ##NEEDS TRANSLATE## +fluid.liquidmethane=Liquid Methane ##NEEDS TRANSLATE## +fluid.liquidnitrogen=Liquid Nitrogen ##NEEDS TRANSLATE## +fluid.liquidoxygen=Liquid Oxygen ##NEEDS TRANSLATE## +fluid.methane=Methane Gas ##NEEDS TRANSLATE## +fluid.nitrogen=Nitrogen Gas ##NEEDS TRANSLATE## +fluid.oxygen=Oxygen Gas ##NEEDS TRANSLATE## +gas.carbondioxide.name=Carbon Dioxide ##NEEDS TRANSLATE## +gas.nitrogen.name=Nitrogen ##NEEDS TRANSLATE## +gas.oxygen.name=Oxygen ##NEEDS TRANSLATE## +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Process ##NEEDS TRANSLATE## +gui.button.liquefy_stop.name=Stop ##NEEDS TRANSLATE## +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fragmented Carbon can go here ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.0=Already ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.1=Launched ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.0=Waiting for ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.1=ignition ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Asuttava#Ei happea#Painovoima: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds ##NEEDS TRANSLATE## +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here ##NEEDS TRANSLATE## +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) ##NEEDS TRANSLATE## +gui.gas_tank.desc.0=Gas storage ##NEEDS TRANSLATE## +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.0=This takes a hydrogen tank ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.1=or an Atmospheric Valve ##NEEDS TRANSLATE## +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency ##NEEDS TRANSLATE## +gui.launch_controller.desc.1=Frequency to launch rockets towards ##NEEDS TRANSLATE## +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=liquefied gas tank ##NEEDS TRANSLATE## +gui.liquid_tank.desc.0=Liquid Tank ##NEEDS TRANSLATE## +gui.message.address.name=Address ##NEEDS TRANSLATE## +gui.message.astro_miner.fail=This base already has an Astro Miner! ##NEEDS TRANSLATE## +gui.message.astro_miner1.fail=The docking area is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=That would be one Astro Miner too many! ##NEEDS TRANSLATE## +gui.message.astro_miner3.fail=The Astro Miner's base was removed! ##NEEDS TRANSLATE## +gui.message.astro_miner4.fail=The Astro Miner ran out of energy and cannot get back to base! ##NEEDS TRANSLATE## +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! ##NEEDS TRANSLATE## +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! ##NEEDS TRANSLATE## +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=BubbleExpanding ##NEEDS TRANSLATE## +gui.message.cargo_full.name=Cargo is Full ##NEEDS TRANSLATE## +gui.message.cargo_unloaded.name=Cargo is Unloaded ##NEEDS TRANSLATE## +gui.message.dest_address.name=Target Address ##NEEDS TRANSLATE## +gui.message.dest_frequency.name=Target ##NEEDS TRANSLATE## +gui.message.enable_grass.name=Enable Grass ##NEEDS TRANSLATE## +gui.message.enable_trees.name=Enable Trees ##NEEDS TRANSLATE## +gui.message.frequency.name=Frequency ##NEEDS TRANSLATE## +gui.message.fully_fueled.name=Fully Fueled ##NEEDS TRANSLATE## +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! ##NEEDS TRANSLATE## +gui.message.grass.name=Grass ##NEEDS TRANSLATE## +gui.message.instant.name=Instantly ##NEEDS TRANSLATE## +gui.message.invalid_address.name=Invalid Unique Address ##NEEDS TRANSLATE## +gui.message.invalid_freq.name=Invalid Frequency ##NEEDS TRANSLATE## +gui.message.invalid_target_address.name=Invalid Target Address ##NEEDS TRANSLATE## +gui.message.launch_when.name=Launch When ##NEEDS TRANSLATE## +gui.message.low_energy.name=Low energy ##NEEDS TRANSLATE## +gui.message.no_bonemeal.name=Not Enough Bonemeal ##NEEDS TRANSLATE## +gui.message.no_energy.name=Not Enough Energy ##NEEDS TRANSLATE## +gui.message.no_saplings.name=Not Enough Saplings ##NEEDS TRANSLATE## +gui.message.no_seeds.name=Not Enough Seeds ##NEEDS TRANSLATE## +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble ##NEEDS TRANSLATE## +gui.message.no_water.name=Not Enough Water ##NEEDS TRANSLATE## +gui.message.not_enough.name=Not Enough ##NEEDS TRANSLATE## +gui.message.not_enough_energy.name=Not Enough Energy! ##NEEDS TRANSLATE## +gui.message.not_set.name=Not Set ##NEEDS TRANSLATE## +gui.message.one_min.name=1 Minute ##NEEDS TRANSLATE## +gui.message.receiving_active.name=Receiving Active ##NEEDS TRANSLATE## +gui.message.redstone_sig.name=Redstone Signal ##NEEDS TRANSLATE## +gui.message.remove_pad.name=Remove Pad On Launch ##NEEDS TRANSLATE## +gui.message.sending_active.name=Sending Active ##NEEDS TRANSLATE## +gui.message.success.name=Success ##NEEDS TRANSLATE## +gui.message.target_no_energy.name=Target doesn't have enough Energy! ##NEEDS TRANSLATE## +gui.message.telepad_not_found.name=Telepad Not Found! ##NEEDS TRANSLATE## +gui.message.telepad_too_far.name=Target too far! (Max %d) ##NEEDS TRANSLATE## +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! ##NEEDS TRANSLATE## +gui.message.ten_sec.name=10 Seconds ##NEEDS TRANSLATE## +gui.message.terraforming.name=Terraforming ##NEEDS TRANSLATE## +gui.message.thirty_sec.name=30 Seconds ##NEEDS TRANSLATE## +gui.message.trees.name=Trees ##NEEDS TRANSLATE## +gui.message.with_atmosphere0.name=on a planet with plenty of ##NEEDS TRANSLATE## +gui.message.with_atmosphere1.name=in the atmosphere ##NEEDS TRANSLATE## +gui.message.zero_water.name=No water! ##NEEDS TRANSLATE## +gui.methane_output.desc.2=methane tank ##NEEDS TRANSLATE## +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Follow ##NEEDS TRANSLATE## +gui.slimeling.button.sit=Sit ##NEEDS TRANSLATE## +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Attack Damage ##NEEDS TRANSLATE## +gui.slimeling.following=Following ##NEEDS TRANSLATE## +gui.slimeling.food=Favorite food ##NEEDS TRANSLATE## +gui.slimeling.kills=Kills ##NEEDS TRANSLATE## +gui.slimeling.name=Name ##NEEDS TRANSLATE## +gui.slimeling.owner=Owner ##NEEDS TRANSLATE## +gui.slimeling.scale=Scale ##NEEDS TRANSLATE## +gui.slimeling.sitting=Sitting ##NEEDS TRANSLATE## +gui.status.liquefying.name=Liquefying ##NEEDS TRANSLATE## +gui.status.needs_carbon.name=Needs carbon ##NEEDS TRANSLATE## +gui.status.nogas.name=No gas ##NEEDS TRANSLATE## +gui.status.processing.name=Synthesizing ##NEEDS TRANSLATE## +gui.status.tankfull.name=Tank full ##NEEDS TRANSLATE## +gui.status.tanksfull.name=Tanks full ##NEEDS TRANSLATE## +gui.telepad.desc.0=This is the Telepad's$unique address ##NEEDS TRANSLATE## +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. ##NEEDS TRANSLATE## +gui.terraformer.desc.0=Water Tank ##NEEDS TRANSLATE## +gui.water_bucket_slot.desc=Place water buckets here ##NEEDS TRANSLATE## +item.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +item.atmospheric_valve.name=Atmospheric Valve ##NEEDS TRANSLATE## +item.beam_core.name=Beam Core ##NEEDS TRANSLATE## +item.bucket_sludge.name=Bacterial Sludge Bucket ##NEEDS TRANSLATE## +item.canister.gas.name=Gas ##NEEDS TRANSLATE## +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level ##NEEDS TRANSLATE## +item.canister.liquid_argon.partial.name=Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.name=Liquid ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.lox.full.name=Filled Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.canister.lox.name=LOX ##NEEDS TRANSLATE## +item.canister.lox.partial.name=Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.carbon_fragments.name=Fragmented Carbon ##NEEDS TRANSLATE## +item.compressed_desh.name=Compressed Desh ##NEEDS TRANSLATE## +item.compressed_titanium.name=Compressed Titanium ##NEEDS TRANSLATE## +item.desh_axe.name=Desh-kirves +item.desh_boots.name=Desh-kengät +item.desh_chestplate.name=Desh-haarniska +item.desh_helmet.name=Desh-kypärä +item.desh_hoe.name=Desh-kuokka +item.desh_leggings.name=Desh-housut +item.desh_pick.name=Desh-hakku +item.desh_pick_slime.description.name=Can harvest Slimeling eggs ##NEEDS TRANSLATE## +item.desh_pick_slime.name=Sticky Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_spade.name=Desh-lapio +item.desh_stick.name=Desh-tikku +item.desh_sword.name=Desh-miekka +item.empty_gas_canister.name=Empty Gas Canister ##NEEDS TRANSLATE## +item.engine_t2.name=Heavy Rocket Engine ##NEEDS TRANSLATE## +item.fluid_manip.name=Fluid Manipulator ##NEEDS TRANSLATE## +item.grapple.name=Grapple ##NEEDS TRANSLATE## +item.heavy_nose_cone.name=Heavy Nose Cone ##NEEDS TRANSLATE## +item.ingot_desh.name=Desh-harkko +item.ingot_titanium.name=Titanium Ingot ##NEEDS TRANSLATE## +item.key.t2.name=Tier 2 Dungeon Key ##NEEDS TRANSLATE## +item.methane_canister.name=Filled Methane Gas Canister ##NEEDS TRANSLATE## +item.methane_canister_partial.name=Methane Gas Canister ##NEEDS TRANSLATE## +item.orion_drive.name=Orion Drive ##NEEDS TRANSLATE## +item.raw_desh.name=Puhdistamaton desh +item.reinforced_plate_t2.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.reinforced_plate_t3.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.rocket_fins_t2.name=Heavy Rocket Fins ##NEEDS TRANSLATE## +item.rocket_t2.cargo_rocket.name=Cargo Rocket ##NEEDS TRANSLATE## +item.rocket_t2.t2Rocket.name=Tier 2 Rocket ##NEEDS TRANSLATE## +item.rocket_t3.t3Rocket.name=Tier 3 Rocket ##NEEDS TRANSLATE## +item.shard_iron.name=Iron Shard ##NEEDS TRANSLATE## +item.shard_titanium.name=Titanium Shard ##NEEDS TRANSLATE## +item.slimeling_cargo.name=Slimeling Inventory Bag ##NEEDS TRANSLATE## +item.thermal_boots.name=Thermal Padding Boots ##NEEDS TRANSLATE## +item.thermal_chestplate.name=Thermal Padding Chestpiece ##NEEDS TRANSLATE## +item.thermal_cloth.name=Thermal Cloth ##NEEDS TRANSLATE## +item.thermal_helm.name=Thermal Padding Helm ##NEEDS TRANSLATE## +item.thermal_leggings.name=Thermal Padding Leggings ##NEEDS TRANSLATE## +item.tier2.desc=Tier 2 ##NEEDS TRANSLATE## +item.tier3.desc=Tier 3 ##NEEDS TRANSLATE## +item.titanium_axe.name=Titanium Axe ##NEEDS TRANSLATE## +item.titanium_boots.name=Titanium Boots ##NEEDS TRANSLATE## +item.titanium_chestplate.name=Titanium Chestplate ##NEEDS TRANSLATE## +item.titanium_helmet.name=Titanium Helmet ##NEEDS TRANSLATE## +item.titanium_hoe.name=Titanium Hoe ##NEEDS TRANSLATE## +item.titanium_leggings.name=Titanium Leggings ##NEEDS TRANSLATE## +item.titanium_pickaxe.name=Titanium Pickaxe ##NEEDS TRANSLATE## +item.titanium_shovel.name=Titanium Shovel ##NEEDS TRANSLATE## +item.titanium_sword.name=Titanium Sword ##NEEDS TRANSLATE## +planet.asteroids=Asteroids ##NEEDS TRANSLATE## +planet.mars=Mars ##NEEDS TRANSLATE## +schematic.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +schematic.cargo_rocket.name=Automatic Cargo Rocket ##NEEDS TRANSLATE## +schematic.rocket_t3.name=Tier 3 Rocket ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore ##NEEDS TRANSLATE## +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. ##NEEDS TRANSLATE## +tile.beam_receiver.name=Beam Receiver ##NEEDS TRANSLATE## +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. ##NEEDS TRANSLATE## +tile.beam_reflector.name=Beam Reflector ##NEEDS TRANSLATE## +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. ##NEEDS TRANSLATE## +tile.cavern_vines.name=Cavernous Vines ##NEEDS TRANSLATE## +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=Creeper Egg ##NEEDS TRANSLATE## +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Dense Ice ##NEEDS TRANSLATE## +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Hydrogen Pipe ##NEEDS TRANSLATE## +tile.launch_controller.description=Launch Controllers are used to customize launch behaviour, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Kuparimalmi +tile.mars.deshmars.name=Desh-malmi +tile.mars.ironmars.name=Iron Ore ##NEEDS TRANSLATE## +tile.mars.marscobblestone.name=Mukulakivi +tile.mars.marsdeco.name=Sisustuskuutio +tile.mars.marsdirt.name=Multa +tile.mars.marsdungeon.name=Vankityrmän seinä +tile.mars.marsgrass.name=Ruoho +tile.mars.marsstone.name=Kivi +tile.mars.tinmars.name=Tinamalmi +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs ##NEEDS TRANSLATE## +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.mars_machine.0.name=Terraformer ##NEEDS TRANSLATE## +tile.mars_machine.1.name=Cryogenic Chamber ##NEEDS TRANSLATE## +tile.mars_machine.2.name=Launch Controller ##NEEDS TRANSLATE## +tile.mars_machine.4.name=Gas Liquefier ##NEEDS TRANSLATE## +tile.mars_machine.5.name=Methane Synthesizer ##NEEDS TRANSLATE## +tile.mars_machine.6.name=Water Electrolyzer ##NEEDS TRANSLATE## +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. ##NEEDS TRANSLATE## +tile.miner_base.name=Astro Miner Base ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab ##NEEDS TRANSLATE## +tile.slimeling_egg.blue.name=Blue Slimeling Egg ##NEEDS TRANSLATE## +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=Red Slimeling Egg ##NEEDS TRANSLATE## +tile.slimeling_egg.yellow.name=Yellow Slimeling Egg ##NEEDS TRANSLATE## +tile.sludge.name=Bacterial Sludge ##NEEDS TRANSLATE## +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Short Range Telepad ##NEEDS TRANSLATE## +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_t2.name=Tier 2 Treasure Chest ##NEEDS TRANSLATE## +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. ##NEEDS TRANSLATE## +tile.treasure_t3.name=Tier 3 Treasure Chest ##NEEDS TRANSLATE## +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. ##NEEDS TRANSLATE## +tile.walkway.walkway.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.name=Walkway ##NEEDS TRANSLATE## +tile.wall_gc.mars.name=Mars Cobblestone Wall ##NEEDS TRANSLATE## +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall ##NEEDS TRANSLATE## diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_ca.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_ca.lang new file mode 100644 index 00000000..57049b07 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_ca.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +container.launchcontroller.name=Contrôleur de lancement +container.mars_lander.name=Landing Balloons ##NEEDS TRANSLATE## +container.short_range_telepad.name=Short Range Telepad ##NEEDS TRANSLATE## +container.tile_terraformer.name=Terraformer ##NEEDS TRANSLATE## +dimension.mars.name=Mars ##NEEDS TRANSLATE## +entity.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +entity.creeper_boss.name=Boss Creeper évolué +entity.entry_pod.name=Entry Pod ##NEEDS TRANSLATE## +entity.grapple_hook.name=Grappin crochet +entity.landing_balloons.name=Landing Balloons ##NEEDS TRANSLATE## +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Cargo Rocket ##NEEDS TRANSLATE## +entity.rocket_t2.name=Tier 2 Rocket ##NEEDS TRANSLATE## +entity.rocket_t3.name=Fusée Niveau 3 +entity.slimeling.name=Vaseux +entity.sludgeling.name=Boueux +entity.small_asteroid.name=Petit astéroïde +fluid.argon=Argon Gas ##NEEDS TRANSLATE## +fluid.atmosphericgases=Atmospheric Gases ##NEEDS TRANSLATE## +fluid.bacterialsludge=Bacterial Sludge ##NEEDS TRANSLATE## +fluid.carbondioxide=CO2 Gas ##NEEDS TRANSLATE## +fluid.fuel=Fuel ##NEEDS TRANSLATE## +fluid.helium=Helium Gas ##NEEDS TRANSLATE## +fluid.hydrogen=Hydrogen Gas ##NEEDS TRANSLATE## +fluid.liquidargon=Liquid Argon ##NEEDS TRANSLATE## +fluid.liquidmethane=Liquid Methane ##NEEDS TRANSLATE## +fluid.liquidnitrogen=Liquid Nitrogen ##NEEDS TRANSLATE## +fluid.liquidoxygen=Liquid Oxygen ##NEEDS TRANSLATE## +fluid.methane=Methane Gas ##NEEDS TRANSLATE## +fluid.nitrogen=Nitrogen Gas ##NEEDS TRANSLATE## +fluid.oxygen=Oxygen Gas ##NEEDS TRANSLATE## +gas.carbondioxide.name=Carbon Dioxide ##NEEDS TRANSLATE## +gas.nitrogen.name=Nitrogen ##NEEDS TRANSLATE## +gas.oxygen.name=Oxygen ##NEEDS TRANSLATE## +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Process ##NEEDS TRANSLATE## +gui.button.liquefy_stop.name=Stop ##NEEDS TRANSLATE## +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fragmented Carbon can go here ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.0=Already ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.1=Launched ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.0=Waiting for ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.1=ignition ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Habitable#Pas d'oxygène#Gravité: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds ##NEEDS TRANSLATE## +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here ##NEEDS TRANSLATE## +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) ##NEEDS TRANSLATE## +gui.gas_tank.desc.0=Gas storage ##NEEDS TRANSLATE## +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.0=This takes a hydrogen tank ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.1=or an Atmospheric Valve ##NEEDS TRANSLATE## +gui.launch_controller.desc.0=This is the Launch Controller's$unique frequency ##NEEDS TRANSLATE## +gui.launch_controller.desc.1=Frequency to launch rockets towards ##NEEDS TRANSLATE## +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch ##NEEDS TRANSLATE## +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=liquefied gas tank ##NEEDS TRANSLATE## +gui.liquid_tank.desc.0=Liquid Tank ##NEEDS TRANSLATE## +gui.message.address.name=Address ##NEEDS TRANSLATE## +gui.message.astro_miner.fail=This base already has an Astro Miner! ##NEEDS TRANSLATE## +gui.message.astro_miner1.fail=The docking area is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=That would be one Astro Miner too many! ##NEEDS TRANSLATE## +gui.message.astro_miner3.fail=The Astro Miner's base was removed! ##NEEDS TRANSLATE## +gui.message.astro_miner4.fail=The Astro Miner ran out of energy and cannot get back to base! ##NEEDS TRANSLATE## +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! ##NEEDS TRANSLATE## +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! ##NEEDS TRANSLATE## +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=BubbleExpanding ##NEEDS TRANSLATE## +gui.message.cargo_full.name=Cargo is Full ##NEEDS TRANSLATE## +gui.message.cargo_unloaded.name=Cargo is Unloaded ##NEEDS TRANSLATE## +gui.message.dest_address.name=Target Address ##NEEDS TRANSLATE## +gui.message.dest_frequency.name=Target ##NEEDS TRANSLATE## +gui.message.enable_grass.name=Enable Grass ##NEEDS TRANSLATE## +gui.message.enable_trees.name=Enable Trees ##NEEDS TRANSLATE## +gui.message.frequency.name=Frequency ##NEEDS TRANSLATE## +gui.message.fully_fueled.name=Fully Fueled ##NEEDS TRANSLATE## +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! ##NEEDS TRANSLATE## +gui.message.grass.name=Grass ##NEEDS TRANSLATE## +gui.message.instant.name=Instantly ##NEEDS TRANSLATE## +gui.message.invalid_address.name=Invalid Unique Address ##NEEDS TRANSLATE## +gui.message.invalid_freq.name=Invalid Frequency ##NEEDS TRANSLATE## +gui.message.invalid_target_address.name=Invalid Target Address ##NEEDS TRANSLATE## +gui.message.launch_when.name=Launch When ##NEEDS TRANSLATE## +gui.message.low_energy.name=Low energy ##NEEDS TRANSLATE## +gui.message.no_bonemeal.name=Not Enough Bonemeal ##NEEDS TRANSLATE## +gui.message.no_energy.name=Not Enough Energy ##NEEDS TRANSLATE## +gui.message.no_saplings.name=Not Enough Saplings ##NEEDS TRANSLATE## +gui.message.no_seeds.name=Not Enough Seeds ##NEEDS TRANSLATE## +gui.message.no_valid_blocks.name=No Valid Blocks in Bubble ##NEEDS TRANSLATE## +gui.message.no_water.name=Not Enough Water ##NEEDS TRANSLATE## +gui.message.not_enough.name=Not Enough ##NEEDS TRANSLATE## +gui.message.not_enough_energy.name=Not Enough Energy! ##NEEDS TRANSLATE## +gui.message.not_set.name=Not Set ##NEEDS TRANSLATE## +gui.message.one_min.name=1 Minute ##NEEDS TRANSLATE## +gui.message.receiving_active.name=Receiving Active ##NEEDS TRANSLATE## +gui.message.redstone_sig.name=Redstone Signal ##NEEDS TRANSLATE## +gui.message.remove_pad.name=Remove Pad On Launch ##NEEDS TRANSLATE## +gui.message.sending_active.name=Sending Active ##NEEDS TRANSLATE## +gui.message.success.name=Success ##NEEDS TRANSLATE## +gui.message.target_no_energy.name=Target doesn't have enough Energy! ##NEEDS TRANSLATE## +gui.message.telepad_not_found.name=Telepad Not Found! ##NEEDS TRANSLATE## +gui.message.telepad_too_far.name=Target too far! (Max %d) ##NEEDS TRANSLATE## +gui.message.telepad_wrong_dim.name=Target is in wrong dimension! ##NEEDS TRANSLATE## +gui.message.ten_sec.name=10 Seconds ##NEEDS TRANSLATE## +gui.message.terraforming.name=Terraforming ##NEEDS TRANSLATE## +gui.message.thirty_sec.name=30 Seconds ##NEEDS TRANSLATE## +gui.message.trees.name=Trees ##NEEDS TRANSLATE## +gui.message.with_atmosphere0.name=on a planet with plenty of ##NEEDS TRANSLATE## +gui.message.with_atmosphere1.name=in the atmosphere ##NEEDS TRANSLATE## +gui.message.zero_water.name=No water! ##NEEDS TRANSLATE## +gui.methane_output.desc.2=methane tank ##NEEDS TRANSLATE## +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Follow ##NEEDS TRANSLATE## +gui.slimeling.button.sit=Sit ##NEEDS TRANSLATE## +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Attack Damage ##NEEDS TRANSLATE## +gui.slimeling.following=Following ##NEEDS TRANSLATE## +gui.slimeling.food=Favorite food ##NEEDS TRANSLATE## +gui.slimeling.kills=Kills ##NEEDS TRANSLATE## +gui.slimeling.name=Name ##NEEDS TRANSLATE## +gui.slimeling.owner=Owner ##NEEDS TRANSLATE## +gui.slimeling.scale=Scale ##NEEDS TRANSLATE## +gui.slimeling.sitting=Sitting ##NEEDS TRANSLATE## +gui.status.liquefying.name=Liquefying ##NEEDS TRANSLATE## +gui.status.needs_carbon.name=Needs carbon ##NEEDS TRANSLATE## +gui.status.nogas.name=No gas ##NEEDS TRANSLATE## +gui.status.processing.name=Synthesizing ##NEEDS TRANSLATE## +gui.status.tankfull.name=Tank full ##NEEDS TRANSLATE## +gui.status.tanksfull.name=Tanks full ##NEEDS TRANSLATE## +gui.telepad.desc.0=This is the Telepad's$unique address ##NEEDS TRANSLATE## +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. ##NEEDS TRANSLATE## +gui.terraformer.desc.0=Water Tank ##NEEDS TRANSLATE## +gui.water_bucket_slot.desc=Place water buckets here ##NEEDS TRANSLATE## +item.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +item.atmospheric_valve.name=Atmospheric Valve ##NEEDS TRANSLATE## +item.beam_core.name=Beam Core ##NEEDS TRANSLATE## +item.bucket_sludge.name=Bacterial Sludge Bucket ##NEEDS TRANSLATE## +item.canister.gas.name=Gas ##NEEDS TRANSLATE## +item.canister.liquid_argon.full.name=Filled Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_argon.name=Liquid #short name for Liquid Argon contents level ##NEEDS TRANSLATE## +item.canister.liquid_argon.partial.name=Canister of Liquid Argon ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.full.name=Filled Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.name=Liquid ##NEEDS TRANSLATE## +item.canister.liquid_nitrogen.partial.name=Canister of Liquid Nitrogen ##NEEDS TRANSLATE## +item.canister.lox.full.name=Filled Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.canister.lox.name=LOX ##NEEDS TRANSLATE## +item.canister.lox.partial.name=Canister of Liquid Oxygen ##NEEDS TRANSLATE## +item.carbon_fragments.name=Fragmented Carbon ##NEEDS TRANSLATE## +item.compressed_desh.name=Silicium comprimé +item.compressed_titanium.name=Compressed Titanium ##NEEDS TRANSLATE## +item.desh_axe.name=Hache en silicium +item.desh_boots.name=Bottes en silicium +item.desh_chestplate.name=Plastron en silicium +item.desh_helmet.name=Casque en silicium +item.desh_hoe.name=Houe en silicium +item.desh_leggings.name=Jambières en silicium +item.desh_pick.name=Pioche en silicium +item.desh_pick_slime.description.name=Peut récolter les œufs de vase +item.desh_pick_slime.name=Sticky Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_spade.name=Pelle en silicium +item.desh_stick.name=Bâton de silicium +item.desh_sword.name=Épée en silicium +item.empty_gas_canister.name=Empty Gas Canister ##NEEDS TRANSLATE## +item.engine_t2.name=Heavy Rocket Engine ##NEEDS TRANSLATE## +item.fluid_manip.name=Fluid Manipulator ##NEEDS TRANSLATE## +item.grapple.name=Grapple ##NEEDS TRANSLATE## +item.heavy_nose_cone.name=Heavy Nose Cone ##NEEDS TRANSLATE## +item.ingot_desh.name=Lingot de silicium +item.ingot_titanium.name=Titanium Ingot ##NEEDS TRANSLATE## +item.key.t2.name=Clé de Donjon Niveau 2 +item.methane_canister.name=Filled Methane Gas Canister ##NEEDS TRANSLATE## +item.methane_canister_partial.name=Methane Gas Canister ##NEEDS TRANSLATE## +item.orion_drive.name=Orion Drive ##NEEDS TRANSLATE## +item.raw_desh.name=Silicium brut +item.reinforced_plate_t2.name=plaque renforcée +item.reinforced_plate_t3.name=Heavy-Duty Plate ##NEEDS TRANSLATE## +item.rocket_fins_t2.name=Heavy Rocket Fins ##NEEDS TRANSLATE## +item.rocket_t2.cargo_rocket.name=Cargaison de fusée +item.rocket_t2.t2Rocket.name=Fusée niveau 2 +item.rocket_t3.t3Rocket.name=Fusée Niveau 3 +item.shard_iron.name=Iron Shard ##NEEDS TRANSLATE## +item.shard_titanium.name=Titanium Shard ##NEEDS TRANSLATE## +item.slimeling_cargo.name=Sac à vase +item.thermal_boots.name=Thermal Padding Boots ##NEEDS TRANSLATE## +item.thermal_chestplate.name=Thermal Padding Chestpiece ##NEEDS TRANSLATE## +item.thermal_cloth.name=Thermal Cloth ##NEEDS TRANSLATE## +item.thermal_helm.name=Thermal Padding Helm ##NEEDS TRANSLATE## +item.thermal_leggings.name=Thermal Padding Leggings ##NEEDS TRANSLATE## +item.tier2.desc=Niveau 2 +item.tier3.desc=Tier 3 ##NEEDS TRANSLATE## +item.titanium_axe.name=Titanium Axe ##NEEDS TRANSLATE## +item.titanium_boots.name=Titanium Boots ##NEEDS TRANSLATE## +item.titanium_chestplate.name=Titanium Chestplate ##NEEDS TRANSLATE## +item.titanium_helmet.name=Titanium Helmet ##NEEDS TRANSLATE## +item.titanium_hoe.name=Titanium Hoe ##NEEDS TRANSLATE## +item.titanium_leggings.name=Titanium Leggings ##NEEDS TRANSLATE## +item.titanium_pickaxe.name=Titanium Pickaxe ##NEEDS TRANSLATE## +item.titanium_shovel.name=Titanium Shovel ##NEEDS TRANSLATE## +item.titanium_sword.name=Titanium Sword ##NEEDS TRANSLATE## +planet.asteroids=Astéroïdes +planet.mars=Mars ##NEEDS TRANSLATE## +schematic.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +schematic.cargo_rocket.name=Cargaison automatique de fusée +schematic.rocket_t3.name=Fusée Niveau 3 +tile.asteroids_block.asteroid_rock_0.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_1.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.asteroid_rock_2.name=Asteroid Rock ##NEEDS TRANSLATE## +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminum Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenite Ore ##NEEDS TRANSLATE## +tile.asteroids_block.ore_iron_asteroids.name=Iron Ore ##NEEDS TRANSLATE## +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. ##NEEDS TRANSLATE## +tile.beam_receiver.name=Récepteur de faisceau +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. ##NEEDS TRANSLATE## +tile.beam_reflector.name=Réflecteur de faisceau +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. ##NEEDS TRANSLATE## +tile.cavern_vines.name=Vignes caverneux +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=œuf de Creeper +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Dense Ice ##NEEDS TRANSLATE## +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Hydrogen Pipe ##NEEDS TRANSLATE## +tile.launch_controller.description=Launch Controllers are used to customize launch behaviour, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Minerai de cuivre +tile.mars.deshmars.name=Minerai de silicium +tile.mars.ironmars.name=Minerai de fer +tile.mars.marscobblestone.name=Pierre +tile.mars.marsdeco.name=Bloc de silicium +tile.mars.marsdirt.name=Roche Martienne souterraine +tile.mars.marsdungeon.name=Mur de Donjon +tile.mars.marsgrass.name=Roche Martienne de surface +tile.mars.marsstone.name=Roche Martienne +tile.mars.tinmars.name=Minerai d'étain +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs ##NEEDS TRANSLATE## +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Chambre cryogénique +tile.mars_machine.2.name=Contrôleur de lancement +tile.mars_machine.4.name=Gas Liquefier ##NEEDS TRANSLATE## +tile.mars_machine.5.name=Methane Synthesizer ##NEEDS TRANSLATE## +tile.mars_machine.6.name=Water Electrolyzer ##NEEDS TRANSLATE## +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. ##NEEDS TRANSLATE## +tile.miner_base.name=Astro Miner Base ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab ##NEEDS TRANSLATE## +tile.slimeling_egg.blue.name=œuf de vase bleu +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=œuf de vase rouge +tile.slimeling_egg.yellow.name=œuf de vase jaune +tile.sludge.name=Boues bactérienne +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Système de téléportation à courte portée +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_t2.name=Coffre au trésor Niveau 2 +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. ##NEEDS TRANSLATE## +tile.treasure_t3.name=Tier 3 Treasure Chest ##NEEDS TRANSLATE## +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. ##NEEDS TRANSLATE## +tile.walkway.walkway.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.name=Walkway ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.name=Walkway ##NEEDS TRANSLATE## +tile.wall_gc.mars.name=Mars Cobblestone Wall ##NEEDS TRANSLATE## +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall ##NEEDS TRANSLATE## diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_fr.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_fr.lang new file mode 100644 index 00000000..8feff727 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/fr_fr.lang @@ -0,0 +1,336 @@ +checklist.craft_grapple_hook.key=Craft un Grappin +checklist.equip_shield_controller.key=Equiper Protection +checklist.thermal_padding.key=Equiper Combinaison Thermique +checklist.thermal_padding_t2.key=Equiper Combinaison Thermique de Niveau 2 +container.crashed_probe.name=Sonde Coupée +container.entry_pod.name=Point d'entrée +container.geothermal_generator.name=Générateur Géothermique +container.launchcontroller.name=Contrôleur de lancement +container.mars_lander.name=Ballons d'atterissage +container.short_range_telepad.name=Téléporteur à courte portée +container.tile_terraformer.name=Terraformeur +dimension.mars.name=Mars +entity.astro_miner.name=Astro-mineur +entity.creeper_boss.name=Boss Creeper évolué +entity.entry_pod.name=Sas d'entrée +entity.entry_pod_venus.name=Sas d'entrée de Vénus +entity.grapple_hook.name=Grappin +entity.juicer.name=Juicer +entity.landing_balloons.name=Ballons d'atterissage +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Fusée de transport de marchandise +entity.rocket_t2.name=Fusée de niveau 2 +entity.rocket_t3.name=Fusée de Niveau 3 +entity.slimeling.name=Vaseux +entity.sludgeling.name=Boueux +entity.small_asteroid.name=Petit astéroïde +entity.spider_queen.name=Reine Araignée +entity.web_shot.name=Tirage Web +fluid.argon=Argon +fluid.atmosphericgases=Gas atmosphériques +fluid.bacterialsludge=Bourbe bactérienne +fluid.carbondioxide=CO2 +fluid.fuel=Carburant +fluid.helium=Hélium +fluid.hydrogen=Hydrogène +fluid.liquidargon=Argon liquide +fluid.liquidmethane=Méthane liquide +fluid.liquidnitrogen=Azote liquide +fluid.liquidoxygen=Oxygène liquide +fluid.methane=Méthane +fluid.nitrogen=Azote +fluid.oxygen=Oxygène +gas.carbondioxide.name=CO2 +gas.nitrogen.name=Azote +gas.oxygen.name=Oxygène +gc.configgui.astro_miners_max=Monbre maxi d'astro-mineur par joueur +gc.configgui.dimension_id_asteroids=ID de la dimension d'astéroide +gc.configgui.dimension_id_mars=ID dimension Mars +gc.configgui.disable_galacticraft_helium=Désactiver l'enregistrement du gaz hélium +gc.configgui.id_schematic_cargo_rocket=ID schéma fusée cargo +gc.configgui.id_schematic_rocket_t2=ID schéma fusée niveau 2 +gc.configgui.id_schematic_rocket_t3=ID du schéma de la fusée niveau 3 +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Configuration des planètes Galacticraft +gui.button.liquefy.name=Traitement +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Rappel +gui.carbon_slot.desc.0=Le carbone fragmenté peut venir ici +gui.cargorocket.status.launched.0=Prêt +gui.cargorocket.status.launched.1=Lancé +gui.cargorocket.status.waiting.0=En attente de +gui.cargorocket.status.waiting.1=chauffage +gui.choose_planet.desc.mars=Habitable#Pas d'oxygène#Gravité: 38% +gui.cryogenic.chat.cant_use=Je ne peux pas utiliser cela pendant %d secondes +gui.gas_input.desc.0=Essayez de placer un réservoir de Méthane ici +gui.gas_input.desc.1=(ou alors,un valve atmosphérique) +gui.gas_tank.desc.0=Réservoir à gaz +gui.gas_tank_compressed.desc.0=Réservoir à gaz (Comprimé) +gui.hydrogen_input.desc.0=Requiert un réservoir d'hydrogène +gui.hydrogen_input.desc.1=ou une valve atmosphérique +gui.launch_controller.desc.0=Ceci est la fréquence unique du controlleur +gui.launch_controller.desc.1=Fréquence du controlleur vers lequel les fusée seront envoyées +gui.launch_controller.desc.2=Si la rampe de lancement doit être enlevée ou non +gui.launch_controller.desc.3=Quand ces critères seront remplis,la fusée sera lancée +gui.launch_controller.desc.4=Masquer la fréquence de destination & des autres joueurs +gui.liquid_output.desc.2=Réservoir du liquéfieur +gui.liquid_tank.desc.0=Réservoir à liquide +gui.message.address.name=Adresse +gui.message.astro_miner.fail=Cette base a déjà un Astro-mineur ! +gui.message.astro_miner1.fail=La zone d'accueil est bloquée par: +gui.message.astro_miner1_a.fail=La route de l'astro-mineur est bloquée par : +gui.message.astro_miner2.fail=Ce sera l'astro-mineur de trop ! +gui.message.astro_miner3.fail=La base de l'astro-mineur à été supprimée ! +gui.message.astro_miner4.fail=L'astro-mineur est tombé en panne d'énergie et ne peut pas revenir à sa base ! +gui.message.astro_miner5.fail=La route de l'astro-mineur dans sa base semble être bloquée ! +gui.message.astro_miner6.fail=L'astro-mineur a fini le minage de la zone, et s'arrête maintenant ! +gui.message.astro_miner7.fail=Il y a rien pour un astro-mineur à miner dans une station spacial ! +gui.message.astro_miner8.fail=Un second astro-mineur a été détecté sur la même base, le premier sera gelé à présent. +gui.message.bubble_exp.name=Expansion de bulle +gui.message.cargo_full.name=Cargaison chargée +gui.message.cargo_unloaded.name=Cargaison déchargée +gui.message.dest_address.name=Adresse de la cible +gui.message.dest_frequency.name=Fréquence de déstination +gui.message.enable_grass.name=Activer l'herbe +gui.message.enable_trees.name=Activer les arbres +gui.message.frequency.name=Fréquence +gui.message.fully_fueled.name=Réservoir plein +gui.message.grapple.fail=J'aurai besoin d'une chaîne si je veux lancer ce grappin! +gui.message.grass.name=Herbe +gui.message.instant.name=Instantanément +gui.message.invalid_address.name=Adresse unique invalide +gui.message.invalid_freq.name=Fréquence non valide +gui.message.invalid_target_address.name=Adresse de la cible invalide +gui.message.launch_when.name=Lancer quand +gui.message.low_energy.name=Niveau d'énergie bas +gui.message.low_energy_output.name=Faible émission d'énergie +gui.message.no_bonemeal.name=Pas assez de poudre d'os +gui.message.no_energy.name=Pas assez d'énergie +gui.message.no_saplings.name=Pas assez de pousses d'arbre +gui.message.no_seeds.name=Pas assez de graines +gui.message.no_valid_blocks.name=Pas de blocs valides dans la bulle +gui.message.no_water.name=Pas assez d'eau +gui.message.not_enough.name=Pas assez +gui.message.not_enough_energy.name=Pas assez d'énergie +gui.message.not_set.name=Non défini +gui.message.one_min.name=1 Minute +gui.message.receiving_active.name=Réception active +gui.message.redstone_sig.name=Signal de redstone +gui.message.remove_pad.name=Enlever la rampe de lancement +gui.message.sending_active.name=Envoi actif +gui.message.success.name=Succès +gui.message.target_no_energy.name=La cible ne possède pas assez d'énergie +gui.message.telepad_not_found.name=Téléporteur non trouvé +gui.message.telepad_too_far.name=Cible trop éloignée! (Max %d) +gui.message.telepad_wrong_dim.name=Cible dans la mauvaise dimenssion! +gui.message.ten_sec.name=10 Secondes +gui.message.terraforming.name=Terraformation +gui.message.thirty_sec.name=30 Secondes +gui.message.trees.name=Arbres +gui.message.with_atmosphere0.name=Une planète avec beaucoup de +gui.message.with_atmosphere1.name=dans l'atmosphère +gui.message.zero_water.name=aucune eau ! +gui.methane_output.desc.2=Réservoir de méthane +gui.miner.docked=Chargé +gui.miner.docking=En chargement +gui.miner.mined=Miné +gui.miner.mining=Minant +gui.miner.offline=Hors ligne +gui.miner.out_of_range=Hors de portée +gui.miner.returning=En retour +gui.miner.stuck=Coincé à : +gui.miner.travelling=Voyageant +gui.slimeling.button.follow=Suivre +gui.slimeling.button.sit=S'assoir +gui.slimeling.chat.wrong_player=Ce n'est pas mon Slimeling ! +gui.slimeling.damage=Domage d'attaque +gui.slimeling.following=Suit +gui.slimeling.food=Nourriture favorite +gui.slimeling.kills=Meurtres +gui.slimeling.name=Nom +gui.slimeling.owner=Propriétaire +gui.slimeling.scale=Echelle +gui.slimeling.sitting=Est assis +gui.status.invalid_spout_1.name=Doit être placé sur +gui.status.invalid_spout_2.name=Bec de soufre valable +gui.status.liquefying.name=Liquéfaction +gui.status.needs_carbon.name=Requiert du carbone +gui.status.nogas.name=Pas de gaz +gui.status.processing.name=Synthétisation +gui.status.tankfull.name=Réservoir plein +gui.status.tanksfull.name=Réservoirs pleins +gui.telepad.desc.0=Ceci est l'addresse unique du téléporteur +gui.telepad.desc.1=Addresse d'un autre téléporteur. Les entités y seront envoyées. +gui.terraformer.desc.0=Réservoir d'eau +gui.water_bucket_slot.desc=Placez les sceaux d'eau ici +item.astro_miner.name=Astro-mineur +item.atmospheric_valve.name=Valve atmosphérique +item.atomic_battery.name=Batterie atomique +item.beam_core.name=Rayon énergétique +item.bucket_sludge.name=Seau de bourbe bactérienne +item.bucket_sulphuric_acid.name=Seau à acide sulfurique +item.canister.gas.name=Gas +item.canister.liquid_argon.full.name=Réservoir d'argon liquide plein +item.canister.liquid_argon.name=Liquide +item.canister.liquid_argon.partial.name=Réservoir d'argon liquide +item.canister.liquid_nitrogen.full.name=Réservoir d'azote liquide plein +item.canister.liquid_nitrogen.name=Liquide +item.canister.liquid_nitrogen.partial.name=Réservoir d'azote liquide +item.canister.lox.full.name=Réservoir d'oxygène liquide plein +item.canister.lox.name=OL +item.canister.lox.partial.name=Réservoir d'oxygène liquide +item.carbon_fragments.name=Carbone fragmenté +item.compressed_desh.name=Silicium comprimé +item.compressed_titanium.name=Titane compressé +item.desh_axe.name=Hache en silicium +item.desh_boots.name=Bottes en silicium +item.desh_chestplate.name=Plastron en silicium +item.desh_helmet.name=Casque en silicium +item.desh_hoe.name=Houe en silicium +item.desh_leggings.name=Jambières en silicium +item.desh_pick.name=Pioche en silicium +item.desh_pick_slime.description.name=Peut récolter les œufs de vase +item.desh_pick_slime.name=Pioche attachante +item.desh_spade.name=Pelle en silicium +item.desh_stick.name=Bâton de silicium +item.desh_sword.name=Épée en silicium +item.empty_gas_canister.name=Réservoir vide +item.engine_t2.name=Réacteur lourd +item.fluid_manip.name=Manipulateur de fluides +item.grapple.name=Grappin +item.heavy_nose_cone.name=Coiffe de fusée lourde +item.ingot_desh.name=Lingot de silicium +item.ingot_lead.name=Lingot de plomb +item.ingot_titanium.name=Lingot de titane +item.key.t2.name=Clé de Donjon Niveau 2 +item.key.t3.name=Clé de Donjon Niveau 3 +item.methane_canister.name=Réservoir de méthane plein +item.methane_canister_partial.name=Réservoir de méthane +item.orion_drive.name=Pilote Orion +item.prelaunch_checklist.name=Liste de contrôle avant le lancement +item.raw_desh.name=Silicium brut +item.reinforced_plate_t2.name=plaque renforcée +item.reinforced_plate_t3.name=Plaquage lourd +item.rocket_fins_t2.name=Aileron de fusée lourd +item.rocket_t2.cargo_rocket.name=Cargaison de fusée +item.rocket_t2.t2Rocket.name=Fusée niveau 2 +item.rocket_t3.t3Rocket.name=Fusée Niveau 3 +item.shard_iron.name=Pointe de fer +item.shard_titanium.name=Pointe de titane +item.shield_controller.description=Le contrôleur de bouclier protège l'armure des dommages causés par la corrosion atmosphérique +item.shield_controller.name=Contrôleur de bouclier +item.slimeling_cargo.name=Sac à vase +item.thermal_boots.name=Bouclier thermique (bottes) +item.thermal_boots_t2.name=Bouclier thermique (bottes) +item.thermal_chestplate.name=Bouclier thermique (plastron) +item.thermal_chestplate_t2.name=Bouclier thermique (plastron) +item.thermal_cloth.name=Bouclier thermique +item.thermal_helm.name=Bouclier thermique (casque) +item.thermal_helm_t2.name=Bouclier thermique (casque) +item.thermal_leggings.name=Bouclier thermique (pantalon) +item.thermal_leggings_t2.name=Bouclier thermique (pantalon) +item.tier2.desc=Niveau 2 +item.tier3.desc=Niveau 3 +item.titanium_axe.name=Hache en titane +item.titanium_boots.name=Bottes en titane +item.titanium_chestplate.name=Plastron en titane +item.titanium_helmet.name=Casque en titane +item.titanium_hoe.name=Houe en titane +item.titanium_leggings.name=Pantalon en titane +item.titanium_pickaxe.name=Pioche en titane +item.titanium_shovel.name=Pelle en titane +item.titanium_sword.name=Epée en titane +item.volcanic_pickaxe.description=Mines une zone 3x3 en fonction de la direction vers laquelle vous faites face +item.volcanic_pickaxe.name=Pioche volcanique +planet.asteroids=Astéroïdes +planet.mars=Mars +schematic.astro_miner.name=Astro-mineur +schematic.cargo_rocket.name=Cargaison automatique de fusée +schematic.rocket_t3.name=Fusée Niveau 3 +tile.asteroids_block.asteroid_rock_0.name=Roche d'astéroïde +tile.asteroids_block.asteroid_rock_1.name=Roche d'astéroïde +tile.asteroids_block.asteroid_rock_2.name=Roche d'astéroïde +tile.asteroids_block.ore_aluminum_asteroids.name=Minerais d'aluminium +tile.asteroids_block.ore_ilmenite_asteroids.name=Minerais d'ilmenite +tile.asteroids_block.ore_iron_asteroids.name=Minerais de fer +tile.beam_receiver.description=Les récepteurs de faisceau sont connectés à l'entrée et à la sortie de la machine à énergie, pour transférer de l'énergie à l'aide de faisceaux. +tile.beam_receiver.name=Récepteur de faisceau +tile.beam_reflector.description=Les réflecteurs de faisceau sont utilisés pour réorienter les faisceaux d'énergie de source en destination. Clic droit pour parcourir les cibles. +tile.beam_reflector.name=Réflecteur de faisceau +tile.cavern_vines.description=Les vignes caverneuses sont dangereuses pour les êtres vivants: elles les enroulent et les traînent vers le haut. +tile.cavern_vines.name=Vignes caverneux +tile.crashed_probe.name=Sonde coupé +tile.creeper_egg.description=Les oeufs de Creeper spawn dans des donjons de Mars: c'est un prédateur furieux lors d'explosions. +tile.creeper_egg.name=œuf de Creeper +tile.cryo_chamber.description=Les chambres cryogéniques permettent au joueur de dormir pendant la journée, guérissant une petite quantité de santé, mais a un temps de recharge. +tile.dense_ice.name=Glace dense +tile.electrolyzer.description=Transforme l'eau en hydrogène (utile pour le synthétiseur de méthane) et l'oxygène. +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.geothermal_generator.description=Lorsqu'il est placé sur un bec de vapeur de soufre valide, génère de l'énergie à un débit oscillant +tile.geothermal_generator.name=Générateur géothermique +tile.hydrogen_pipe.description=Tuyau d'hydrogène transférera l'hydrogène du réservoir d'essence interne d'une machine vers un autre. +tile.hydrogen_pipe.name=Tuyau d'hydrogène +tile.launch_controller.description=Launch Controllers are used to customize launch behaviour, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Minerai de cuivre +tile.mars.deshmars.name=Minerai de silicium +tile.mars.ironmars.name=Minerai de fer +tile.mars.marscobblestone.name=Pierre +tile.mars.marsdeco.name=Bloc de silicium +tile.mars.marsdirt.name=Roche Martienne souterraine +tile.mars.marsdungeon.name=Mur de Donjon +tile.mars.marsgrass.name=Roche Martienne de surface +tile.mars.marsstone.name=Roche Martienne +tile.mars.tinmars.name=Minerai d'étain +tile.mars_machine.0.name=Terraformeur +tile.mars_machine.1.name=Chambre cryogénique +tile.mars_machine.2.name=Contrôleur de lancement +tile.mars_machine.4.name=Liquéfieur de gas +tile.mars_machine.5.name=Synthétiseur de méthane +tile.mars_machine.6.name=Electrolyseur d'eau +tile.mars_stairs_brick.name=Escalier de briques de donjon Marsien +tile.mars_stairs_cobblestone.name=Escalier de pavés Marsien +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=La base de l'astro-mineur est le point de chargement d'un astro-mineur. C'est gros ... essayez de faire un cube de 2 x 2 x 2 avec ceux-là +tile.miner_base.name=Base d'astro-mineur +tile.miner_base_full.name=Base d'astro-mineur +tile.slab_gc_half.mars_bricks_slab.name=Dalle de briques de donjon Marsien +tile.slab_gc_half.mars_slab.name=Dalle de pavés Marsien +tile.slimeling_egg.blue.name=œuf de vase bleu +tile.slimeling_egg.description=Oeuf de Vase, une fois craqué à mains nues d'un joueur, se transforme en un animal de compagnie. +tile.slimeling_egg.red.name=œuf de vase rouge +tile.slimeling_egg.yellow.name=œuf de vase jaune +tile.sludge.name=Boues bactérienne +tile.spout.name=Bec de vapeur +tile.sulphuric_acid.name=Acide sulfurique +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Système de téléportation à courte portée +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Les coffre au trésor de niveau 2 seront généré dans les donjons de Mars. ils se débloquent après la défaite du boss final. +tile.treasure_t2.name=Coffre au trésor Niveau 2 +tile.treasure_t3.description=Les coffre au trésors niveau 3 ne sont pas utilisé actuellement. +tile.treasure_t3.name=Coffre de niveau 3 +tile.venus.dungeon_brick_venus_1.name=Venus Dungeon Brick I +tile.venus.dungeon_brick_venus_2.name=Venus Dungeon Brick II +tile.venus.venus_ore_aluminum.name=Minerai d'aluminium +tile.venus.venus_ore_copper.name=Minerai de cuivre +tile.venus.venus_ore_galena.name=Minerai de Galena +tile.venus.venus_ore_quartz.name=Minerai de Quartz +tile.venus.venus_ore_silicon.name=Minerais de silicium +tile.venus.venus_ore_tin.name=Minerai d'étain +tile.venus.venus_rock_0.name=Roche Molle Vénus +tile.venus.venus_rock_1.name=Roche Dure Vénus +tile.venus.venus_rock_2.name=Roche Volcanique Vénus +tile.venus.venus_rock_3.name=Pierre ponce +tile.venus_rock_scorched.name=Roche Roussie Vénus +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. ##NEEDS TRANSLATE## +tile.walkway.walkway.name=Passerelle +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_pipe.name=Passerelle +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully solid walkable surface. ##NEEDS TRANSLATE## +tile.walkway.walkway_wire.name=Passerelle +tile.wall_gc.mars.name=Mur de pavés Marsien +tile.wall_gc.mars_bricks.name=Mur de briques de donjon Marsien +tile.web_torch.web_torch_0.name=Chaîne Web +tile.web_torch.web_torch_1.description=Torche de Glowstone +tile.web_torch.web_torch_1.name=Chaîne Web diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hr_hr.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hr_hr.lang new file mode 100644 index 00000000..a52c2ecf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hr_hr.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Ulazna Kapsula +container.launchcontroller.name=Kontroler Lansiranja +container.mars_lander.name=Baloni za slijetanje +container.short_range_telepad.name=Teleporter s Malom Daljinom +container.tile_terraformer.name=Teraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astro Rudar +entity.creeper_boss.name=Evoulirani Boss Kripera +entity.entry_pod.name=Kapsula za ulaz +entity.grapple_hook.name=Kuka +entity.landing_balloons.name=Baloni za sletanje +entity.projectile_tnt.name=Projektilni TNT +entity.rocket_cargo.name=Teretna Raketa +entity.rocket_t2.name=Raketa Ranga 2 +entity.rocket_t3.name=Rang 3 Raketa +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Mali Asteroid +fluid.argon=Argon +fluid.atmosphericgases=Atmosferni Plinovi +fluid.bacterialsludge=Bakterijska Sluz +fluid.carbondioxide=CO2 +fluid.fuel=Gorivo +fluid.helium=Helij +fluid.hydrogen=Vodik +fluid.liquidargon=Tekuči Argon +fluid.liquidmethane=Tekuči Metan +fluid.liquidnitrogen=Tekuči Dušik +fluid.liquidoxygen=Tekuči Kisik +fluid.methane=Metan +fluid.nitrogen=Dušik +fluid.oxygen=Kisik +gas.carbondioxide.name=Ugljični Dioksid +gas.nitrogen.name=Dušik +gas.oxygen.name=Kisik +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planeti Opcije +gui.button.liquefy.name=Procesiram +gui.button.liquefy_stop.name=Stani +gui.button.recall.name=Opoziv +gui.carbon_slot.desc.0=Fragmentirani Ugljik može ići ovdje +gui.cargorocket.status.launched.0=Več +gui.cargorocket.status.launched.1=lansirano +gui.cargorocket.status.waiting.0=Čekam +gui.cargorocket.status.waiting.1=paljenje +gui.choose_planet.desc.mars=Pogodno za Život#Nema Kisika#Gravitacija: 38% +gui.cryogenic.chat.cant_use=Nemogu koristiti ovo još %d sekundi +gui.gas_input.desc.0=Probaj Postaviti Methan$Gas Karnister tamo +gui.gas_input.desc.1=(Možda Altrenativno,$jedan Atmosferni Ventil) +gui.gas_tank.desc.0=Gas Skladište +gui.gas_tank_compressed.desc.0=Skladište plina (komprimiranog) +gui.hydrogen_input.desc.0=To Uzima spremnik vodika +gui.hydrogen_input.desc.1=ili jedan atmosferni ventil +gui.launch_controller.desc.0=Ovo je Frekvencija ovog$kontrolera +gui.launch_controller.desc.1=Frekvencija odredišta +gui.launch_controller.desc.2=Ukloniti lansirnu rampu +gui.launch_controller.desc.3=Kada su te kriterije ispunjene,$raketa će se lansirati +gui.launch_controller.desc.4=Skrij frekvenciju odredišta$od drugih igrača +gui.liquid_output.desc.2=Spremnik Ukapljenog Plina +gui.liquid_tank.desc.0=Spremnik za Tekučine +gui.message.address.name=Adresa +gui.message.astro_miner.fail=Ova baza već ima Astro Rudara! +gui.message.astro_miner1.fail=Mjesto za parkiranje je zauzeto: +gui.message.astro_miner1_a.fail=Astro Rudareva ruta je blokirana: +gui.message.astro_miner2.fail=To bi bio jedan Astro Rudar previše! +gui.message.astro_miner3.fail=Astro Rudareva baza je obrisana! +gui.message.astro_miner4.fail=Astro Rudar nema više energije i nemože se vratiti u bazu! +gui.message.astro_miner5.fail=Astro Rudareva ruta do baze je blokirana! +gui.message.astro_miner6.fail=Astro Rudar je gotov sa kopanjem, i sada će stati! +gui.message.astro_miner7.fail=Nema ničega da Astro Rudar kopa u svemirskoj stanici! +gui.message.astro_miner8.fail=Drugi Astro Rudar detektiran je u bazi, prvi će se sada ugasiti. +gui.message.bubble_exp.name=Balon se Raširuje +gui.message.cargo_full.name=Teret utovaren +gui.message.cargo_unloaded.name=Teret izvađen +gui.message.dest_address.name=Meta adrese +gui.message.dest_frequency.name=Odredišna frekvencija +gui.message.enable_grass.name=Dozvoli travu +gui.message.enable_trees.name=Dozvoli drva +gui.message.frequency.name=Frekvencija +gui.message.fully_fueled.name=Pun goriva +gui.message.grapple.fail=Trebam niti da mogu baciti! +gui.message.grass.name=Trava +gui.message.instant.name=Odmah +gui.message.invalid_address.name=Netočna Adresa +gui.message.invalid_freq.name=Nepoznata Frekvencija +gui.message.invalid_target_address.name=Netočna adresa mete +gui.message.launch_when.name=Lansiraj Kada +gui.message.low_energy.name=Malo energije +gui.message.no_bonemeal.name=Nema dovoljno usitnjenih kosti +gui.message.no_energy.name=Nema energije +gui.message.no_saplings.name=Nema dovoljno sjemenki drveta +gui.message.no_seeds.name=Nema dovoljno sjemenki +gui.message.no_valid_blocks.name=Nema blokova u balonu +gui.message.no_water.name=Nema dovoljno vode +gui.message.not_enough.name=Nema dovoljno +gui.message.not_enough_energy.name=Nema dovoljno energije! +gui.message.not_set.name=Nije postavljeno +gui.message.one_min.name=1 Minuta +gui.message.receiving_active.name=Čekam aktiviranje +gui.message.redstone_sig.name=Signal crvenog kamena +gui.message.remove_pad.name=Obriši Pad +gui.message.sending_active.name=Šaljem aktivaciju +gui.message.success.name=Uspješno +gui.message.target_no_energy.name=Meta nema Energije! +gui.message.telepad_not_found.name=Teleporter nije pronađen! +gui.message.telepad_too_far.name=Meta je previše daleko! (Max %d) +gui.message.telepad_wrong_dim.name=Meta je u krivoj dimenziji! +gui.message.ten_sec.name=10 Sekundi +gui.message.terraforming.name=Teraformiram +gui.message.thirty_sec.name=30 Sekundi +gui.message.trees.name=Drva +gui.message.with_atmosphere0.name=Na planetu s puno +gui.message.with_atmosphere1.name=u Atmosferi +gui.message.zero_water.name=Nema Vode! +gui.methane_output.desc.2=Spremnik Metana +gui.miner.docked=Parkiran +gui.miner.docking=Parkira +gui.miner.mined=Iskopano +gui.miner.mining=Kopa +gui.miner.offline=Ugašen +gui.miner.out_of_range=Izvan dometa +gui.miner.returning=Dolazi +gui.miner.stuck=Zapeo: +gui.miner.travelling=Putuj +gui.slimeling.button.follow=Prati +gui.slimeling.button.sit=Sjedi +gui.slimeling.chat.wrong_player=Ovo nije moj Sludeling! +gui.slimeling.damage=Oštečenje +gui.slimeling.following=Prati +gui.slimeling.food=Najdraža Hrana +gui.slimeling.kills=Ubojstva +gui.slimeling.name=Ime +gui.slimeling.owner=Vlasnik +gui.slimeling.scale=Veličina +gui.slimeling.sitting=Sjedi +gui.status.liquefying.name=Punim +gui.status.needs_carbon.name=Treba Carbona +gui.status.nogas.name=Nema Gasa +gui.status.processing.name=Sintiziram +gui.status.tankfull.name=Tank Pun +gui.status.tanksfull.name=Tankovi Puni +gui.telepad.desc.0=Ovo je teleporterova$Adresa +gui.telepad.desc.1=Adresiraj na drugi teleporter.$Bića će biti poslana ondje. +gui.terraformer.desc.0=Vodeni Tank +gui.water_bucket_slot.desc=Stavi vodu ovdje +item.astro_miner.name=Astro Rudar +item.atmospheric_valve.name=Atmosferski Ventil +item.beam_core.name=Jezgra +item.bucket_sludge.name=Bakterijska Sluz +item.canister.gas.name=Plin +item.canister.liquid_argon.full.name=Pun Karnister Tekučeg Argona +item.canister.liquid_argon.name=Argon +item.canister.liquid_argon.partial.name=Karnister Tekučeg Argona +item.canister.liquid_nitrogen.full.name=Pun Karnister Tekučeg Nitrogena +item.canister.liquid_nitrogen.name=Nitrogen +item.canister.liquid_nitrogen.partial.name=Karnister Tekučeg Nitrogena +item.canister.lox.full.name=Pun Karnister Tekučeg Kisika +item.canister.lox.name=TK +item.canister.lox.partial.name=Karnister Tekučeg Kisika +item.carbon_fragments.name=Fragmirani Carbon +item.compressed_desh.name=Prerađeni Desh +item.compressed_titanium.name=Prerađeni Titanium +item.desh_axe.name=Desh Sjekira +item.desh_boots.name=Desh Čizme +item.desh_chestplate.name=Desh Prsni Oklop +item.desh_helmet.name=Desh Šljem +item.desh_hoe.name=Desh Motika +item.desh_leggings.name=Desh Gamaše +item.desh_pick.name=Desh Kramp +item.desh_pick_slime.description.name=Može Uzeti Slimeling Jaja +item.desh_pick_slime.name=Ljeplivi Desh Kramp +item.desh_spade.name=Desh Lopata +item.desh_stick.name=Štapić od Desha +item.desh_sword.name=Desh Mac +item.empty_gas_canister.name=Prazni Karnister +item.engine_t2.name=Snažni Motor Rakete +item.fluid_manip.name=Manipulator Tekučinom +item.grapple.name=Kuka +item.heavy_nose_cone.name=Snažni Nos Rakete +item.ingot_desh.name=Desh Poluga +item.ingot_titanium.name=Poluga Titanuma +item.key.t2.name=Tamnički Ključ Ranga 2 +item.methane_canister.name=Pun Karnister Metana +item.methane_canister_partial.name=Karnister Metana +item.orion_drive.name=Orion Disk +item.raw_desh.name=Nerefinirani Desh +item.reinforced_plate_t2.name=Snažna Ploča Ranga 2 +item.reinforced_plate_t3.name=Snažna Ploča Ranga 3 +item.rocket_fins_t2.name=Snažni Rep Rakete +item.rocket_t2.cargo_rocket.name=Raketa s Teretom +item.rocket_t2.t2Rocket.name=Raketa Ranga 2 +item.rocket_t3.t3Rocket.name=Raketa Ranga 3 +item.shard_iron.name=Krhotina Željeza +item.shard_titanium.name=Krhotina Titaniuma +item.slimeling_cargo.name=Slimelingova Inventory Torba +item.thermal_boots.name=Termalne Čizme +item.thermal_chestplate.name=Termali Prsni Oklop +item.thermal_cloth.name=Termalna Odječa +item.thermal_helm.name=Termalni Šljem +item.thermal_leggings.name=Termalne Gamaše +item.tier2.desc=Rang 2 +item.tier3.desc=Rang 3 +item.titanium_axe.name=Titanium Sjekira +item.titanium_boots.name=Titanium Čizme +item.titanium_chestplate.name=Titanium Prsni Oklop +item.titanium_helmet.name=Titanium Šljem +item.titanium_hoe.name=Titanium Motika +item.titanium_leggings.name=Titanium Gamaše +item.titanium_pickaxe.name=Titanium Kramp +item.titanium_shovel.name=Titanium Lopata +item.titanium_sword.name=Titanium Mač +planet.asteroids=Asteroidi +planet.mars=Mars +schematic.astro_miner.name=Astro Rudar +schematic.cargo_rocket.name=Automatska Teret Raketa +schematic.rocket_t3.name=Raketa Ranga 3 +tile.asteroids_block.asteroid_rock_0.name=Asteroidski Kamen +tile.asteroids_block.asteroid_rock_1.name=Asteroidski Kamen +tile.asteroids_block.asteroid_rock_2.name=Asteroidski Kamen +tile.asteroids_block.ore_aluminum_asteroids.name=Ruda Aluminija +tile.asteroids_block.ore_ilmenite_asteroids.name= Ruda Ilmenita +tile.asteroids_block.ore_iron_asteroids.name=Ruda Željeza +tile.beam_receiver.description=Prijemnici su povezani s ulazom stroja, za prijenos energije pomoću zrake. +tile.beam_receiver.name=Energetski Zračni Odašiljac +tile.beam_reflector.description=Reflektori se koriste za preusmjeravanje energije zrake od izvora do odredišta. Može se kliknuti na njega da ode na drugi cilj. +tile.beam_reflector.name=Energetski Zračni Reflektor +tile.cavern_vines.description=Kavernozirane Lijane su opasne za živa biča, mogu te ubiti. +tile.cavern_vines.name=Kavernozni Vine +tile.creeper_egg.description=Kriperska jaja će se stvarati u Marsovskim tamnicama, stvarajuči predatora koji eksplodira. +tile.creeper_egg.name=Jaje Kripera +tile.cryo_chamber.description=Kriogenska Kapsula će omogućiti igraču da spava tijekom dana, liječeći malu količinu zdravlja, ali ima čekanje. +tile.dense_ice.name=Gusti Led +tile.electrolyzer.description=Pretvara vodu u vodik (korisno za metan sintisajzer) i kisik. +tile.gas_liquefier.description=Ukapljeni plinovi, bilo od atmosfere ili iz spremnika. Ukapljeni metan čini dobro raketno gorivo! +tile.hydrogen_pipe.description=Cijev za hidrogen če prenesti gorivo iz jedne mašine u drugu. +tile.hydrogen_pipe.name=Hidrogenska Cijev +tile.launch_controller.description=Kontroleri Lansiranja se koriste za prilagodbu ponašanja pri pokretanju, uključujući kriterije za lansiranje i odredište za pokretanje na automatsku raketsku rampu. +tile.mars.coppermars.name=Ruda Bakra +tile.mars.deshmars.name=Desh Ruda +tile.mars.ironmars.name=Željezna Ruda +tile.mars.marscobblestone.name=Prerađeni Kamen +tile.mars.marsdeco.name=Blok od Desha +tile.mars.marsdirt.name=Marsovska Trava +tile.mars.marsdungeon.name=Zid od Tamnice +tile.mars.marsgrass.name=Marsovska Površina +tile.mars.marsstone.name=Marsovski Kamen +tile.mars.tinmars.name=Limena Ruda +tile.mars_stairs_cobblestone.name=Marsovske Kamene Stube +tile.mars_stairs_brick.name=Marskovse Ciglene Stube +tile.mars_machine.0.name=Teraformer +tile.mars_machine.1.name=Komora Za Spavanje +tile.mars_machine.2.name=Kontrola Leta +tile.mars_machine.4.name=Plinski Liqufier +tile.mars_machine.5.name=Metan Sintisajzer +tile.mars_machine.6.name=Vodeni Elektrizer +tile.methane_synthesizer.description=S izvorom vodika i izvora ugljika, to proizvodi metan za daljnju obradu u ukapljenom plinu. +tile.miner_base.description=Astro Rudareva baza je mjesto gdje če se on parkirati. Veliko je ...probaj 2 x 2 x 2 blokove s njima. +tile.miner_base.name=Astro Rudarska Baza +tile.slab_gc_half.mars_bricks_slab.name=Marskovska Ciglena Ploča +tile.slab_gc_half.mars_slab.name=Marsovska Kamena Ploča +tile.slimeling_egg.blue.name=Plavo Slimeling Jaje +tile.slimeling_egg.description=Slimeling Jaja, nakon što su strgane s rukama nekoliko puta onda če stvoriti ljubimca. +tile.slimeling_egg.red.name=Crveno Slimeling Jaje +tile.slimeling_egg.yellow.name=Žuto Slimeling Jaje +tile.sludge.name=Bakterijska Sluz +tile.telepad_short.description=Teleporter s malom daljinom se koristi za prijenos igrača i bića na male daljine (250 blokova) kada je povezan s drugim teleporterom. +tile.telepad_short.name=Teleporter s Malom Daljinom +tile.terraformer.description=Teraformeri se koriste da dodaju malo zelenila na planet kao što je trava, voda i drveče. +tile.treasure_t2.description=Rang 2 Tamnički Ključ se može pronači u tamnicama na Marsu, ali prvo moraš pobijediti šefa. +tile.treasure_t2.name=Tier 2 Škrinja sa Blagom +tile.treasure_t3.description=Rang 3 Škrinja s blagom se mogu pronači u asteroidskoj dimenziji u tamnicama. +tile.treasure_t3.name=Rang 3 Škrinje s Blagom +tile.walkway.walkway.description=Staze se koriste za dekorativne svrhe te za pokretanje energije/zraka ispod igrača. +tile.walkway.walkway.name=Staza +tile.walkway.walkway_pipe.description=Staze s cijevima za kisik se koriste za pokretanje kisika ispod potpuno čvrste prohodne površine. +tile.walkway.walkway_pipe.name=Staza s Cijevima za Zrakom +tile.walkway.walkway_wire.description=Staze s cijevima za struju se koriste za pokretanje struje ispod potpuno čvrste prohodne površine. +tile.walkway.walkway_wire.name=Staza s Cijevima za Strujom +tile.wall_gc.mars.name=Marskovski Kameni Zid +tile.wall_gc.mars_bricks.name=Marskovki Cigleni Zid diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hu_hu.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hu_hu.lang new file mode 100644 index 00000000..23d303cc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/hu_hu.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Érkezőkapszula +container.launchcontroller.name=Távvezérlo +container.mars_lander.name=Landing Balloons ##NEEDS TRANSLATE## +container.short_range_telepad.name=Rövidtávú Teleporter +container.tile_terraformer.name=Növényülteto +dimension.mars.name=Mars +entity.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +entity.creeper_boss.name=Vejlett Creeper-Fogonosz +entity.entry_pod.name=Kapsula za ulaz +entity.grapple_hook.name=Kuka +entity.landing_balloons.name=Landing Balloons ##NEEDS TRANSLATE## +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Teretna Raketa +entity.rocket_t2.name=Raketa Ranga 2 +entity.rocket_t3.name=Rang 3 Raketa +entity.slimeling.name=Nyálkahernyó +entity.sludgeling.name=Iszaphernyó +entity.small_asteroid.name=Mali Asteroid +fluid.argon=Argongáz +fluid.atmosphericgases=Légköri Gázok +fluid.bacterialsludge=Bacterial Sludge ##NEEDS TRANSLATE## +fluid.carbondioxide=Széndioxid-Gáz +fluid.fuel=Üzemanyag +fluid.helium=Héliumgáz +fluid.hydrogen=Hidrogéngáz +fluid.liquidargon=Folyékony Argon +fluid.liquidmethane=Folyékony Metán +fluid.liquidnitrogen=Folyékony Nitrogén +fluid.liquidoxygen=Folyékony Oxigén +fluid.methane=Metángáz +fluid.nitrogen=Nitrogéngáz +fluid.oxygen=Oxigéngáz +gas.carbondioxide.name=Szén-Dioxid +gas.nitrogen.name=Nitrogén +gas.oxygen.name=Oxigén +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Folyósítás Indítása +gui.button.liquefy_stop.name=Folyósítás Leállítása +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fragmented Carbon can go here ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.0=Already ##NEEDS TRANSLATE## +gui.cargorocket.status.launched.1=Launched ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.0=Waiting for ##NEEDS TRANSLATE## +gui.cargorocket.status.waiting.1=ignition ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Lakható#Nincs Lélegezheto légkör#Gravitáció: 38% +gui.cryogenic.chat.cant_use=I can't use this for another %d seconds ##NEEDS TRANSLATE## +gui.gas_input.desc.0=Ide Tegyen Egy $ Töltött Metán-Kannát, $ Vagy Egy Légköri Szelepet +gui.gas_input.desc.1=(Egy Bolygón Ahol Sok $ Metángáz $ -Van A Légkörben) +gui.gas_tank.desc.0=Gázraktár +gui.gas_tank_compressed.desc.0=Gas Storage (Compressed) ##NEEDS TRANSLATE## +gui.hydrogen_input.desc.0=Ide Tegyen Egy +gui.hydrogen_input.desc.1=Töltött Hidrogén-Kannát, $ Vagy Egy Légköri Szelepet +gui.launch_controller.desc.0=Ez A Távvezérlo Saját $ Frekvenziája +gui.launch_controller.desc.1=A Célpontnak A Frekvenciája, $ Ahova A Rakéta Küldve Lesz. +gui.launch_controller.desc.2=Magával Vigye-e A Rakéta $ A Kilövoállást +gui.launch_controller.desc.3=Amikor Ez Teljesül, $ A Kilövés Megkezdodik +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=Folyósított Gáz-Tartály +gui.liquid_tank.desc.0=Folyadéktartály +gui.message.address.name=Saját Frekvencia +gui.message.astro_miner.fail=This base already has an Astro Miner! ##NEEDS TRANSLATE## +gui.message.astro_miner1.fail=The docking area is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=That would be one Astro Miner too many! ##NEEDS TRANSLATE## +gui.message.astro_miner3.fail=The Astro Miner's base was removed! ##NEEDS TRANSLATE## +gui.message.astro_miner4.fail=The Astro Miner ran out of energy and cannot get back to base! ##NEEDS TRANSLATE## +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! ##NEEDS TRANSLATE## +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! ##NEEDS TRANSLATE## +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=A Buborék Terjszkedik... +gui.message.cargo_full.name=Ha A Teher Be Van Rakodva +gui.message.cargo_unloaded.name=Ha A Teher Ki Van Rakodva +gui.message.dest_address.name=Célpont Frekvenciája +gui.message.dest_frequency.name=Célpont Frekvenciája +gui.message.enable_grass.name=Fu Bekapcsolása +gui.message.enable_trees.name=Fák Bekapcsolása +gui.message.frequency.name=Frekvencia +gui.message.fully_fueled.name=Ha Teljesen Fel Van Töltve Üzemanyaggal +gui.message.grapple.fail=I'll need some string if I want to throw that Grapple hook! ##NEEDS TRANSLATE## +gui.message.grass.name=Fu +gui.message.instant.name=Azonnal +gui.message.invalid_address.name=Érvénytelen Saját Frekvencia +gui.message.invalid_freq.name=Érvénytelen Saját Frekvencia +gui.message.invalid_target_address.name=Érvénytelen A Célpont Frekvenciája +gui.message.launch_when.name=Kilövés indítása: +gui.message.low_energy.name=Nincs Elég Energia +gui.message.no_bonemeal.name=Nincs Elég Csontliszt +gui.message.no_energy.name=Nincs Energia +gui.message.no_saplings.name=Nincs Elég Facsemete +gui.message.no_seeds.name=Nincsen Elég Vetomag +gui.message.no_valid_blocks.name=Nincsenek Érvényes Blockok A Buborékban +gui.message.no_water.name=Nincs Elég Víz +gui.message.not_enough.name=Nem Elég +gui.message.not_enough_energy.name=Nincs Elég Energia +gui.message.not_set.name=Nincs Beállítva +gui.message.one_min.name=1 Másodperc Késleltetéssel +gui.message.receiving_active.name=Fogadás Elérhető +gui.message.redstone_sig.name=Vörösko-Jelre +gui.message.remove_pad.name=Kilövoállás Elszállítása +gui.message.sending_active.name=Küldés Elérhető +gui.message.success.name=Sikeres +gui.message.target_no_energy.name=A Célpontnak Nincs Elég Energiája +gui.message.telepad_not_found.name=Teleporter Nem Találva +gui.message.telepad_too_far.name=Célpont Túl Messze Van (Hatósugár: %d) +gui.message.telepad_wrong_dim.name=A Célpont Érvénytelen Dimenzióban Van +gui.message.ten_sec.name=10 Másodperc Késleltetéssel +gui.message.terraforming.name=Növényültetés Folyamatban +gui.message.thirty_sec.name=30 Másodperc Késleltetéssel +gui.message.trees.name=Fák +gui.message.with_atmosphere0.name=Egy Bolygón Ahol Sok +gui.message.with_atmosphere1.name=-Van A Légkörben +gui.message.zero_water.name=No water! ##NEEDS TRANSLATE## +gui.methane_output.desc.2=Metán-Tartály +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Follow ##NEEDS TRANSLATE## +gui.slimeling.button.sit=Sit ##NEEDS TRANSLATE## +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Attack Damage ##NEEDS TRANSLATE## +gui.slimeling.following=Following ##NEEDS TRANSLATE## +gui.slimeling.food=Favorite food ##NEEDS TRANSLATE## +gui.slimeling.kills=Kills ##NEEDS TRANSLATE## +gui.slimeling.name=Name ##NEEDS TRANSLATE## +gui.slimeling.owner=Owner ##NEEDS TRANSLATE## +gui.slimeling.scale=Scale ##NEEDS TRANSLATE## +gui.slimeling.sitting=Sitting ##NEEDS TRANSLATE## +gui.status.liquefying.name=Folyósítás Folyamatban +gui.status.needs_carbon.name=Szénpor Szügséges +gui.status.nogas.name=Nincs Elég Gáz +gui.status.processing.name=Metánfejlesztés Folyamatban +gui.status.tankfull.name=A Tartály Megtelt +gui.status.tanksfull.name=A Tartályok Megteltek +gui.telepad.desc.0=Ez A Telepoerer $ Saját Frekvenciája +gui.telepad.desc.1=A Célpont Teleporter $ Frekvenciája. +gui.terraformer.desc.0=Víztartály +gui.water_bucket_slot.desc=Place water buckets here ##NEEDS TRANSLATE## +item.astro_miner.name=Astro Rudar +item.atmospheric_valve.name=Légköri Szelep +item.beam_core.name=Sugárgerjesztő +item.bucket_sludge.name=Bacterial Sludge Bucket ##NEEDS TRANSLATE## +item.canister.gas.name=Gáz #Metángáz Töltöttségi-Szintje Röviden +item.canister.liquid_argon.full.name=Teletöltött Folyékony Argon-Kanna +item.canister.liquid_argon.name=Folyadék #Folyékony Argon Töltöttségi Szintje Röviden +item.canister.liquid_argon.partial.name=Nem Teljesen Teletöltött Folyékony Argon-Kanna +item.canister.liquid_nitrogen.full.name=Teletöltött Folyékony Nitrogén-Kanna +item.canister.liquid_nitrogen.name=Folyadék #Folyékony Nitrogén Töltöttségi Szintje Röviden +item.canister.liquid_nitrogen.partial.name=Nem Teljesen Teletöltött Folyékony Nitrogén-Kanna +item.canister.lox.full.name=Pun Karnister Tekučeg Kisika +item.canister.lox.name=TK +item.canister.lox.partial.name=Karnister Tekučeg Kisika +item.carbon_fragments.name=Szénpor +item.compressed_desh.name=Préselt Desh +item.compressed_titanium.name=Préselt Titánium +item.desh_axe.name=Desh Balta +item.desh_boots.name=Desh Bakancs +item.desh_chestplate.name=Desh Mellvért +item.desh_helmet.name=Desh Sisak +item.desh_hoe.name=Desh Kapa +item.desh_leggings.name=Desh Lábszárvédo +item.desh_pick.name=Desh Csákány +item.desh_pick_slime.description.name=Be lehet vele takarítani a Nyálkahernyó-Tojásokat +item.desh_pick_slime.name=Sticky Desh Pickaxe ##NEEDS TRANSLATE## +item.desh_spade.name=Desh Ásó +item.desh_stick.name=Deshbot +item.desh_sword.name=Desh Kard +item.empty_gas_canister.name=Üres Gáz-Kanna +item.engine_t2.name=Nehéz Rakétamotor +item.fluid_manip.name=Folyadék-Átalakító +item.grapple.name=Fogó +item.heavy_nose_cone.name=Nehéz Orrkúp +item.ingot_desh.name=Deshrúd +item.ingot_titanium.name=Titániumrúd +item.key.t2.name=2-Es Szintu Dungeon-Kulcs +item.methane_canister.name=Teletöltött Metán-Kanna +item.methane_canister_partial.name=Metán-Kanna +item.orion_drive.name=Orion Drive ##NEEDS TRANSLATE## +item.raw_desh.name=Deshpor +item.reinforced_plate_t2.name=Nehéz Borítólemez +item.reinforced_plate_t3.name=Nehéz Borítólemez +item.rocket_fins_t2.name=Nehéz Légterelő Szárny +item.rocket_t2.cargo_rocket.name=Raketa s Teretom +item.rocket_t2.t2Rocket.name=Raketa Ranga 2 +item.rocket_t3.t3Rocket.name=Raketa Ranga 3 +item.shard_iron.name=Vasszilánk +item.shard_titanium.name=Titániumszilánk +item.slimeling_cargo.name=Nyálkahernyó Eszköztár-Hátizsák +item.thermal_boots.name=Hővédő Bakancs-Bélés +item.thermal_chestplate.name=Hővédő Mellvért-Bélés +item.thermal_cloth.name=Hővégő Anyag +item.thermal_helm.name=Hővédő Sisak-Bélés +item.thermal_leggings.name=Hővédő Lábszárvégő-Bélés +item.tier2.desc=2-Es Szintu +item.tier3.desc=3-As Szintű +item.titanium_axe.name=Titánium Balta +item.titanium_boots.name=Titánium Bakancs +item.titanium_chestplate.name=Titánium Mellvért +item.titanium_helmet.name=Titánium Sisak +item.titanium_hoe.name=Titánium Kapa +item.titanium_leggings.name=Titánium Lábszárvédő +item.titanium_pickaxe.name=Titánium Csákány +item.titanium_shovel.name=Titánium Ásó +item.titanium_sword.name=Titánium Kard +planet.asteroids=Aszteroidák +planet.mars=Mars +schematic.astro_miner.name=Astro Miner ##NEEDS TRANSLATE## +schematic.cargo_rocket.name=Távvezérlésu Teherrakéta +schematic.rocket_t3.name=3-As Szintu Rakéta +tile.asteroids_block.asteroid_rock_0.name=Aszteroida-Szikla +tile.asteroids_block.asteroid_rock_1.name=Aszteroida-Szikla +tile.asteroids_block.asteroid_rock_2.name=Aszteroida-Szikla +tile.asteroids_block.ore_aluminum_asteroids.name=Aszteroidai Alumíniumérc +tile.asteroids_block.ore_ilmenite_asteroids.name=Aszteroidai-Ilmenitérc +tile.asteroids_block.ore_iron_asteroids.name=Aszteroidai-Vasérc +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. ##NEEDS TRANSLATE## +tile.beam_receiver.name=Lézersugár-Vevő +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. ##NEEDS TRANSLATE## +tile.beam_reflector.name=Lézersugár-Kibocsájtó +tile.cavern_vines.description=Cavernous Vines are dangerous to living creatures, entangling them and dragging them upwards. ##NEEDS TRANSLATE## +tile.cavern_vines.name=Mérgezo Inda +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=Creepertojás +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Tömör Jég +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Hydrogen Pipe ##NEEDS TRANSLATE## +tile.launch_controller.description=Launch Controllers are used to customize launch behavior, including launch criteria and destination launch pad for auto launches. ##NEEDS TRANSLATE## +tile.mars.coppermars.name=Marsi Rézérc +tile.mars.deshmars.name=Marsi Deshérc +tile.mars.ironmars.name=Marsi Vasérc +tile.mars.marscobblestone.name=Marsi Zúzottko +tile.mars.marsdeco.name=Deshtömb +tile.mars.marsdirt.name=Marsi Felszín-Allatti Kozet +tile.mars.marsdungeon.name=Marsi Dungeon-Fal +tile.mars.marsgrass.name=Marsi Felszíni-Kozet +tile.mars.marsstone.name=Marsi ko +tile.mars.tinmars.name=Marsi Ónérc +tile.mars_stairs_cobblestone.name=Mars Cobblestone Stairs ##NEEDS TRANSLATE## +tile.mars_stairs_brick.name=Mars Dungeon Brick Stairs ##NEEDS TRANSLATE## +tile.mars_machine.0.name=Növényülteto +tile.mars_machine.1.name=Hibernációs Kamra +tile.mars_machine.2.name=Távvezérlo +tile.mars_machine.4.name=Gázfolyósító +tile.mars_machine.5.name=Metánfejleszto +tile.mars_machine.6.name=Víz-Elektrolizáló +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. ##NEEDS TRANSLATE## +tile.miner_base.name=Astro Miner Base ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_bricks_slab.name=Mars Dungeon Brick Slab ##NEEDS TRANSLATE## +tile.slab_gc_half.mars_slab.name=Mars Cobblestone Slab ##NEEDS TRANSLATE## +tile.slimeling_egg.blue.name=Plavo Slimeling Jaje +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=Crveno Slimeling Jaje +tile.slimeling_egg.yellow.name=Žuto Slimeling Jaje +tile.sludge.name=Bakteriális Iszap +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. ##NEEDS TRANSLATE## +tile.telepad_short.name=Rövidtávú Teleporter +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Treasure Chests will generate in Mars Dungeons. They are unlockable after defeating the final boss. ##NEEDS TRANSLATE## +tile.treasure_t2.name=2-Es Szintu Kincsesláda +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. ##NEEDS TRANSLATE## +tile.treasure_t3.name=3-As Szintű Kincsesláda +tile.walkway.walkway.description=Staze se koriste za dekorativne svrhe te za pokretanje energije/zraka ispod igrača. +tile.walkway.walkway.name=Staza +tile.walkway.walkway_pipe.description=Staze s cijevima za kisik se koriste za pokretanje kisika ispod potpuno čvrste prohodne površine. +tile.walkway.walkway_pipe.name=Staza s Cijevima za Zrakom +tile.walkway.walkway_wire.description=Staze s cijevima za struju se koriste za pokretanje struje ispod potpuno čvrste prohodne površine. +tile.walkway.walkway_wire.name=Staza s Cijevima za Strujom +tile.wall_gc.mars.name=Mars Cobblestone Wall ##NEEDS TRANSLATE## +tile.wall_gc.mars_bricks.name=Mars Dungeon Brick Wall ##NEEDS TRANSLATE## diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/it_it.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/it_it.lang new file mode 100644 index 00000000..b3fc957d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/it_it.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Entry Pod +container.launchcontroller.name=Controllore del lancio +container.mars_lander.name=Palloni da Atterraggio +container.short_range_telepad.name=Teletrasportatore a corto raggio +container.tile_terraformer.name=Terraformer +dimension.mars.name=Marte +entity.astro_miner.name=Astro Miner +entity.creeper_boss.name=Creeper Boss Evoluto +entity.entry_pod.name=Entry Pod +entity.grapple_hook.name=Uncino del Rampino +entity.landing_balloons.name=Palloni da Atterraggio +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Razzo-Cargo +entity.rocket_t2.name=Razzo di Livello 2 +entity.rocket_t3.name=Razzo di Livello 3 +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Asteroide Piccolo +fluid.argon=Argon +fluid.atmosphericgases=Gas Atmosferici +fluid.bacterialsludge=Fango Batterico +fluid.carbondioxide=Anidride Carbonica +fluid.fuel=Carburante +fluid.helium=Elio +fluid.hydrogen=Idrogeno +fluid.liquidargon=Argon Liquido +fluid.liquidmethane=Metano Liquido +fluid.liquidnitrogen=Azoto Liquido +fluid.liquidoxygen=Ossigeno Liquido +fluid.methane=Metano +fluid.nitrogen=Azoto +fluid.oxygen=Ossigeno +gas.carbondioxide.name=Anidride Carbone +gas.nitrogen.name=Azoto +gas.oxygen.name=Ossigeno +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Lavorare +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Recall +gui.carbon_slot.desc.0=Il carbone frammentato va qui +gui.cargorocket.status.launched.0=Già +gui.cargorocket.status.launched.1=Lanciato +gui.cargorocket.status.waiting.0=Aspettando +gui.cargorocket.status.waiting.1=Accensone +gui.choose_planet.desc.mars=Abitabile#Privo Di Ossigen#Gravità: 38% +gui.cryogenic.chat.cant_use=Non posso usarlo per altri %d secondi +gui.gas_input.desc.0=Try placing a Methane$Gas Canister here +gui.gas_input.desc.1=(Perhaps alternatively,$an Atmospheric Valve) +gui.gas_tank.desc.0=Deposito Di Gas +gui.gas_tank_compressed.desc.0=Deposito Di Gas (Compresso) +gui.hydrogen_input.desc.0=Ha bisogno di una tanica di idrogeno +gui.hydrogen_input.desc.1=o una valvola atmosferica +gui.launch_controller.desc.0=Questa è l'unica frequenza$del Launch Controller +gui.launch_controller.desc.1=Frequenza per lanciare il razzo verso +gui.launch_controller.desc.2=Whether the launch pad should$be removed on launch +gui.launch_controller.desc.3=When this criteria is met,$rocket will launch +gui.launch_controller.desc.4=Nascondi la frequenza della destinazione$da altri giocatori +gui.liquid_output.desc.2=tanica di gas liquefatto +gui.liquid_tank.desc.0=Tanica Di Liquidi +gui.message.address.name=Indirizzo +gui.message.astro_miner.fail=This base already has an Astro Miner! +gui.message.astro_miner1.fail=L'area di atterraggio è bloccata da: +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: +gui.message.astro_miner2.fail=That would be one Astro Miner too many! +gui.message.astro_miner3.fail=The Astro Miner's base was removed! +gui.message.astro_miner4.fail=The Astro Miner is low on energy and cannot get back to base! +gui.message.astro_miner5.fail=The Astro Miner's route into its base seems to be blocked! +gui.message.astro_miner6.fail=The Astro Miner has finished mining the area, and will now stop! +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. +gui.message.bubble_exp.name=Espansione della bolla +gui.message.cargo_full.name=Il cargo è pieno +gui.message.cargo_unloaded.name=Il cargo è scarico +gui.message.dest_address.name=Indirizzo del Destinatario +gui.message.dest_frequency.name=Frequenza di Destinazione +gui.message.enable_grass.name=Abilita erba +gui.message.enable_trees.name=Abilita alberi +gui.message.frequency.name=Frequenza +gui.message.fully_fueled.name=Serbatoio Pieno +gui.message.grapple.fail=Ho bisogno di corda se voglio usare questo rampino! +gui.message.grass.name=Erba +gui.message.instant.name=Instantaneamente +gui.message.invalid_address.name=Indirizzo non valido +gui.message.invalid_freq.name=Frequenza Invalida +gui.message.invalid_target_address.name=Indirizzo del destinatario non valido +gui.message.launch_when.name=Lancia Quando +gui.message.low_energy.name=Energia bassa +gui.message.no_bonemeal.name=Non c'è abbastanza farina di ossa! +gui.message.no_energy.name=Non c'è più energia! +gui.message.no_saplings.name=Non ci sono abbastanza alberelli! +gui.message.no_seeds.name=Non ci sono abbastanza semi! +gui.message.no_valid_blocks.name=Non ci sono blocchi validi nella bolla +gui.message.no_water.name=Non c'è abbastanza acqua! +gui.message.not_enough.name=Non abbastanza +gui.message.not_enough_energy.name=Non c'è abbastanza energia +gui.message.not_set.name=Non Configurato +gui.message.one_min.name=1 Minuto +gui.message.receiving_active.name=Receiving Active +gui.message.redstone_sig.name=Segnale Di Pietrarossa +gui.message.remove_pad.name=Rimuovi la Piattaforma +gui.message.sending_active.name=Sending Active +gui.message.success.name=Successo +gui.message.target_no_energy.name=Il ricevente non ha abbastanza energia! +gui.message.telepad_not_found.name=Telepad non trovato! +gui.message.telepad_too_far.name=Bersaglio troppo lontano(Massimo %d) +gui.message.telepad_wrong_dim.name=Il target non è in questa dimensione! +gui.message.ten_sec.name=10 Secondi +gui.message.terraforming.name=Terraforming +gui.message.thirty_sec.name=30 Secondi +gui.message.trees.name=Alberi +gui.message.with_atmosphere0.name=on a planet with plenty of +gui.message.with_atmosphere1.name=in the atmosphere +gui.message.zero_water.name=Non c'è Acqua! +gui.methane_output.desc.2=tanica di metano +gui.miner.docked=Atterrato +gui.miner.docking=Atterrando +gui.miner.mined=Minato +gui.miner.mining=Minando +gui.miner.offline=Offline +gui.miner.out_of_range=Fuori range +gui.miner.returning=Ritornando +gui.miner.stuck=Fermo a: +gui.miner.travelling=Viaggiando +gui.slimeling.button.follow=Segui +gui.slimeling.button.sit=Siedi +gui.slimeling.chat.wrong_player=Questo non è il mio Slimeling. +gui.slimeling.damage=Danno da Attacco +gui.slimeling.following=Seguendo +gui.slimeling.food=Cibo Preferito +gui.slimeling.kills=Uccisioni +gui.slimeling.name=Nome +gui.slimeling.owner=Proprietario +gui.slimeling.scale=Ingrandimento +gui.slimeling.sitting=Sedendo +gui.status.liquefying.name=Liquidificando +gui.status.needs_carbon.name=C'è bisogno di carbone +gui.status.nogas.name=Non c'è gas +gui.status.processing.name=Sintetizzando +gui.status.tankfull.name=Tanica piena +gui.status.tanksfull.name=Tanica piena +gui.telepad.desc.0=Questo è l'unico indirizzo$del telepad +gui.telepad.desc.1=Address of another Telepad.$Entities will be sent there. +gui.terraformer.desc.0=Tanica di Acqua +gui.water_bucket_slot.desc=Posiziona secchi d'acqua in questo slot +item.astro_miner.name=Astro Miner +item.atmospheric_valve.name=Valvola atmosferica +item.beam_core.name=Reattore del fascio +item.bucket_sludge.name=Secchio di Fango Batterico +item.canister.gas.name=Metano #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Capsula di Argon Liquido piena +item.canister.liquid_argon.name=Argon Liquido #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Capsula di Argon Liquido +item.canister.liquid_nitrogen.full.name=Capsula di Azoto Liquido piena +item.canister.liquid_nitrogen.name=Azoto Liquido #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Capsula di Azoto Liquido +item.canister.lox.full.name=Capsula di Ossigeno piena +item.canister.lox.name=Ossigeno Liquido #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Capsula di Ossigeno Liquido +item.carbon_fragments.name=Carbone frammentato +item.compressed_desh.name=Desh Compresso +item.compressed_titanium.name=Titanio Compresso +item.desh_axe.name=Ascia Di Desh +item.desh_boots.name=Stivali Di Desh +item.desh_chestplate.name=Corazza di Desh +item.desh_helmet.name=Elmetto di Desh +item.desh_hoe.name=Zappa di Desh +item.desh_leggings.name=Gambali Di Desh +item.desh_pick.name=Piccone Di Desh +item.desh_pick_slime.description.name=Può distruggere le uova di creeper +item.desh_pick_slime.name=Piccone Di Desh Appiccicoso +item.desh_spade.name=Pala Di Desh +item.desh_stick.name=Bastoncino di Desh +item.desh_sword.name=Spada Di Desh +item.empty_gas_canister.name=Capsula per gas vuota +item.engine_t2.name=Motore Rinforzato del Razzo +item.fluid_manip.name=Manipolatore di Fluidi +item.grapple.name=Rampino +item.heavy_nose_cone.name=Punta del Razzo Rinforzata +item.ingot_desh.name=Lingotto Di Desh +item.ingot_titanium.name=Lingotto di Titanio +item.key.t2.name=Chiave Delle Segrete Livello 2 +item.methane_canister.name=Capsula di Metano piena +item.methane_canister_partial.name=Capsula di Metano +item.orion_drive.name=Orion Drive +item.raw_desh.name=Desh Non Lavorato +item.reinforced_plate_t2.name=Piastra Rinforzata +item.reinforced_plate_t3.name=Piastre Rinforzate +item.rocket_fins_t2.name=Ali rinforzate del razzo +item.rocket_t2.cargo_rocket.name=Razzo-Cargo +item.rocket_t2.t2Rocket.name=Razzo di Livello 2 +item.rocket_t3.t3Rocket.name=Razzo Livello 3 +item.shard_iron.name=Frammento di Ferro +item.shard_titanium.name=Frammento di Titanio +item.slimeling_cargo.name=Zaino per Slimeling +item.thermal_boots.name=Scarpe Termiche +item.thermal_chestplate.name=Armatura Termica +item.thermal_cloth.name=Abiti termali +item.thermal_helm.name=Elmetto Termico +item.thermal_leggings.name=Pantaloni Termici +item.tier2.desc=Livello 2 +item.tier3.desc=Livello 3 +item.titanium_axe.name=Ascia di Titanio +item.titanium_boots.name=Stivali in Titanio +item.titanium_chestplate.name=Armatura di Titanio +item.titanium_helmet.name=Elmo di Titanio +item.titanium_hoe.name=Zappa di Titanio +item.titanium_leggings.name=Gambali in Titanio +item.titanium_pickaxe.name=Piccone di Titanio +item.titanium_shovel.name=Pala di Titanio +item.titanium_sword.name=Spada di Titanio +planet.asteroids=Asteroids +planet.mars=Marte +schematic.astro_miner.name=Astro Miner +schematic.cargo_rocket.name=Razzo-Cargo automatico +schematic.rocket_t3.name=Razzo di Livello 3 +tile.asteroids_block.asteroid_rock_0.name=Roccia Di Asteroide +tile.asteroids_block.asteroid_rock_1.name=Roccia Di Asteroide +tile.asteroids_block.asteroid_rock_2.name=Roccia Di Asteroide +tile.asteroids_block.ore_aluminum_asteroids.name=Minerale di Alluminio +tile.asteroids_block.ore_ilmenite_asteroids.name=Minerale di Ilmenite +tile.asteroids_block.ore_iron_asteroids.name=Minerale di Ferro +tile.beam_receiver.description=Beam Receivers are connected to energy machine input and output, to transfer energy using beams. +tile.beam_receiver.name=Ricevitore del Fascio Di Energia +tile.beam_reflector.description=Beam Reflectors are used to redirect energy beams from source to destination. Can be right-clicked to cycle through targets. +tile.beam_reflector.name=Riflettore del Fascio Di Energia +tile.cavern_vines.description=Le Liane delle Caverne sono pericolose per le creature, impigliandole e trascinandole verso l'alto. +tile.cavern_vines.name=Liane Delle Caverne +tile.creeper_egg.description=Le uova di creeper si trovano nelle segrete di Marte, spawnando una creatura che esploderà. +tile.creeper_egg.name=Uovo Di Creeper +tile.cryo_chamber.description=Le Camere Criogeniche permettono al player di dormire durante il giorno, curandoli, ma ha un tempo di ricarica. +tile.dense_ice.name=Ghiaccio denso +tile.electrolyzer.description=Trasforma l'acqua in idrogeno(utile per il Sintetizzatore di Metano) e ossigeno. +tile.gas_liquefier.description=Gas liquefatti, provenienti dall'atmosfera o dalle capsule. Il metano liquido è un buon carburante per il razzo! +tile.hydrogen_pipe.description=I tubi di idrogeno trasferiscono idrogeno da una macchina all'altra. +tile.hydrogen_pipe.name=Tubo Per L'Idrogeno +tile.launch_controller.description=I controllori del lancio sono utilizzati per personalizzare il comportamente del lancio, compresi i criteri di lancio e piattaforme-destinatarie di lancio per lanci automatici. +tile.mars.coppermars.name=Minerale Di Rame +tile.mars.deshmars.name=Minerale Di Desh +tile.mars.ironmars.name=Minerale Di Ferro +tile.mars.marscobblestone.name=Pietrisco Di Marte +tile.mars.marsdeco.name=Blocco Di Desh +tile.mars.marsdirt.name=Roccia Sotterranea Di Marte +tile.mars.marsdungeon.name=Mattoni Delle Segrete Di Marte +tile.mars.marsgrass.name=Roccia Di Marte +tile.mars.marsstone.name=Pietra Di Marte +tile.mars.tinmars.name=Minerale Di Stagno +tile.mars_stairs_cobblestone.name=Scale In Pietrisco Di Marte +tile.mars_stairs_brick.name=Scale In Mattoni Delle Segrete Di Marte +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Camera Criogenica +tile.mars_machine.2.name=Launch Controller +tile.mars_machine.4.name=Liquidificatore Di Gas +tile.mars_machine.5.name=Sintetizzatore di Metano +tile.mars_machine.6.name=Elettrizzatore Di Acqua +tile.methane_synthesizer.description=Con una sorgente di idrogeno e una sorgente di carbonio, produce metano per essere lavorato in un Liquidificatore di Gas. +tile.miner_base.description=The Astro Miner Base is the docking point for an Astro Miner. It's big ... try making a 2 x 2 x 2 cube with these. +tile.miner_base.name=Astro Miner Base +tile.slab_gc_half.mars_bricks_slab.name=Scalino In Mattoni Delle Segrete Di Marte +tile.slab_gc_half.mars_slab.name=Scalino In Pietrisco Di Marte +tile.slimeling_egg.blue.name=Uovo Di Slimeling Blu +tile.slimeling_egg.description=Uova di Slimeling, una volta rotte con le mani nude, libereranno un animale. +tile.slimeling_egg.red.name=Uovo Di Slimeling Rosso +tile.slimeling_egg.yellow.name=Uovo Di Slimeling Giallo +tile.sludge.name=Fango Batterico +tile.telepad_short.description=Short Range Telepads are used to transfer players and other living creatures short distances (250 Blocks) when linked to other telepads. +tile.telepad_short.name=Teletrasportatore a corto raggio +tile.terraformer.description=I terraformers vengono utilizzati per aggiungere un po' di verde a pianeti lontani , l'aggiunta di erba, alberi e acqua se vengono somministrati i materiali corretti. +tile.treasure_t2.description=Le Casse Del Tesoro Di Livello 2 spawneranno nelle Segrete Di Marte. Sono sbloccabili dopo aver sconfitto in boss finale. +tile.treasure_t2.name=Cassa Del Tesoro Di Livello 2 +tile.treasure_t3.description=Tier 3 Treasure Chests are currently unused. +tile.treasure_t3.name=Cassa Del Tesoro di Livello 3 +tile.walkway.walkway.description=Walkways are used for decorative purposes, used for connecting blocks while maintaining a space theme. +tile.walkway.walkway.name=Strada +tile.walkway.walkway_pipe.description=Oxygen Pipe Walkways are used for running pipes underneath a fully walkable surface. +tile.walkway.walkway_pipe.name=Strada +tile.walkway.walkway_wire.description=Aluminum Wire Walkways are used for running wire underneath a fully walkable surface. +tile.walkway.walkway_wire.name=Strada +tile.wall_gc.mars.name=Muro In Pietrisco Di Marte +tile.wall_gc.mars_bricks.name=Muro In Mattone Delle Segrete Di Marte diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ja_jp.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ja_jp.lang new file mode 100644 index 00000000..27ccfdb7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ja_jp.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=グラップリングフック +checklist.equip_shield_controller.key=シールドコントローラー +checklist.thermal_padding.key=熱保護服一式を装備 +checklist.thermal_padding_t2.key=レベル2の熱保護服 +container.crashed_probe.name=墜落した宇宙探査機 +container.entry_pod.name=突入ポッド +container.geothermal_generator.name=地熱発電機 +container.launchcontroller.name=打ち上げコントローラー +container.mars_lander.name=着陸バルーン +container.solar_array_controller.name=ソーラーアレイコントローラー +container.short_range_telepad.name=短距離テレポートパッド +container.slimeling_inventory.name=スライムリングのインベントリ +container.tile_terraformer.name=テラフォーマー +dimension.mars.name=火星 +entity.astro_miner.name=アストロマイナー +entity.creeper_boss.name=進化型クリーパーのボス +entity.entry_pod.name=突入ポッド +entity.entry_pod_venus.name=金星突入ポッド +entity.grapple_hook.name=グラップリングフック +entity.juicer.name=ジューサー +entity.landing_balloons.name=着陸バルーン +entity.projectile_tnt.name=TNT弾 +entity.rocket_cargo.name=貨物ロケット +entity.rocket_t2.name=レベル2 ロケット +entity.rocket_t3.name=レベル3 ロケット +entity.slimeling.name=スライムリング +entity.sludgeling.name=スラッジリング +entity.small_asteroid.name=小型小惑星 +entity.spider_queen.name=スパイダークイーン +entity.web_shot.name=ウェブショット +fluid.argon=アルゴンガス +fluid.atmosphericgases=大気ガス +fluid.bacterialsludge=細菌まみれのスラッジ +fluid.carbondioxide=二酸化炭素ガス +fluid.fuel=燃料 +fluid.helium=ヘリウムガス +fluid.hydrogen=水素ガス +fluid.liquidargon=液体アルゴン +fluid.liquidmethane=液体メタン +fluid.liquidnitrogen=液体窒素 +fluid.liquidoxygen=液体酸素 +fluid.methane=メタンガス +fluid.nitrogen=窒素ガス +fluid.oil=原油 +fluid.oxygen=酸素ガス +fluid.sulphuricacid=硫酸 +gas.carbondioxide.name=二酸化炭素 +gas.nitrogen.name=窒素 +gas.oxygen.name=酸素 +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.dimension_id_venus=Venus Dimension ID +gc.configgui.disable_aluminum_gen_asteroids=Disable Aluminum Ore Gen (Asteroids) +gc.configgui.disable_ambient_lightning=Disable Lightning (Venus) +gc.configgui.disable_copper_gen_mars=Disable Copper Ore Gen (Mars) +gc.configgui.disable_desh_gen_mars=Disable Desh Ore Gen (Mars) +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.disable_small_asteroids=Disable Small Asteroid spawning (Asteroids) +gc.configgui.disable_ilmenite_gen_asteroids=Disable Ilmenite Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_asteroids=Disable Iron Ore Gen (Asteroids) +gc.configgui.disable_iron_gen_mars=Disable Iron Ore Gen (Mars) +gc.configgui.disable_tin_gen_mars=Disable Tin Ore Gen (Mars) +gc.configgui.disable_venus_aluminum_gen=Disable Aluminum Ore Gen (Venus) +gc.configgui.disable_venus_copper_gen=Disable Copper Ore Gen (Venus) +gc.configgui.disable_venus_galena_gen=Disable Galena Ore Gen (Venus) +gc.configgui.disable_venus_quartz_gen=Disable Quartz Ore Gen (Venus) +gc.configgui.disable_venus_silicon_gen=Disable Silicon Ore Gen (Venus) +gc.configgui.disable_venus_solar_gen=Disable Solar Ore Gen (Venus) +gc.configgui.disable_venus_tin_gen=Disable Tin Ore Gen (Venus) +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.add_blacklist.name=ブラックリスト +gui.button.add_entity.name=エンティティ追加 +gui.button.add_player.name=プレイヤー追加 +gui.button.add_whitelist.name=ホワイトリスト +gui.button.edit_blacklist.name=ブラックリストを編集 +gui.button.edit_priority.name=優先順位を編集 +gui.button.edit_whitelist.name=ホワイトリストを編集 +gui.button.liquefy.name=開始 +gui.button.liquefy_stop.name=止まる +gui.button.never_fire_team.name=スペースレースのチームは撃たない +gui.button.recall.name=呼び戻す +gui.button.remove_selected.name=選択削除 +gui.carbon_slot.desc.0=炭素の破片をここに置ける +gui.cargorocket.status.launched.0=発射 +gui.cargorocket.status.launched.1=済み +gui.cargorocket.status.waiting.0=点火 +gui.cargorocket.status.waiting.1=待ち +gui.choose_planet.desc.mars=住みやすい#酸素がない#重力: 38% +gui.cryogenic.chat.cant_use=あと %d 秒間使えません +gui.gas_input.desc.0=メタンのガス缶を$ここに入れる +gui.gas_input.desc.1=(あるいは代わりに$大気弁) +gui.gas_tank.desc.0=気体ストレージ +gui.gas_tank_compressed.desc.0=気体ストレージ (圧縮) +gui.hydrogen_input.desc.0=水素タンクか +gui.hydrogen_input.desc.1=大気弁 +gui.launch_controller.advanced=高度な設定 +gui.launch_controller.desc.0=打ち上げコントローラの$固有周波数 +gui.launch_controller.desc.1=打ち上げたロケットが$向かう先の周波数 +gui.launch_controller.desc.2=打ち上げ時に発射台を$取り除くかどうか +gui.launch_controller.desc.3=この条件を満たせば、$ロケットが打ち上がる +gui.launch_controller.desc.4=目的の周波数を$他のプレイヤーから隠す +gui.launch_controller.owner=オーナー +gui.liquid_output.desc.2=液化ガスタンク +gui.liquid_tank.desc.0=液体のタンク +gui.message.address.name=アドレス +gui.message.astro_miner.fail=この基地は既にアストロ採掘機を持っています! +gui.message.astro_miner1.fail=ドッキングエリアが塞がれています: +gui.message.astro_miner1_a.fail=アストロ採掘機の移動経路が塞がれています: +gui.message.astro_miner1_b.fail=保護エリアです! +gui.message.astro_miner2.fail=アストロマイナーが多すぎます! +gui.message.astro_miner3.fail=アストロマイナー基地が撤去されました! +gui.message.astro_miner4.fail=アストロマイナーがエネルギー不足で基地へ戻れません! +gui.message.astro_miner5.fail=アストロマイナーの基地への移動経路が塞がれているようです! +gui.message.astro_miner6.fail=アストロマイナーはこのエリアの採掘を完了し、停止します! +gui.message.astro_miner7.fail=宇宙ステーションでアストロマイナーが採掘するものはありません! +gui.message.astro_miner8.fail=同じ基地に2台のアストロマイナーが検出されたため、1台目は稼働中止します。 +gui.message.blacklist_mode.name=ブラックリスト モード +gui.message.bubble_exp.name=バブルが拡大している +gui.message.cargo_full.name=貨物がいっぱい +gui.message.cargo_unloaded.name=貨物が空 +gui.message.connected_solar_controller.name=%d 取り付け済み(最大距離16ブロック) +gui.message.dest_address.name=目的のアドレス +gui.message.dest_frequency.name=目的の周波数 +gui.message.enable_grass.name=草を有効にする +gui.message.enable_trees.name=木を有効にする +gui.message.enter_entity.name=エンティティの name/id を入力 +gui.message.enter_player.name=プレイヤー名を入力 +gui.message.frequency.name=周波数 +gui.message.fully_fueled.name=燃料がいっぱい +gui.message.grapple.fail=グラップリングフックを投げるには糸が必要だ! +gui.message.grass.name=草 +gui.message.instant.name=すぐに +gui.message.invalid_address.name=無効な固有アドレス +gui.message.invalid_freq.name=無効な周波数 +gui.message.invalid_target_address.name=無効な目的アドレス +gui.message.launch_when.name=打ち上げの時間 +gui.message.low_energy.name=エネルギーが低い +gui.message.low_energy_output.name=低エネルギー出力 +gui.message.no_bonemeal.name=骨粉が足りない +gui.message.no_energy.name=エネルギーが足りない +gui.message.no_saplings.name=苗木が足りない +gui.message.no_seeds.name=種が足りない +gui.message.no_valid_blocks.name=有効なブロックがバブルにない +gui.message.no_water.name=水が足りない +gui.message.not_enough.name=足りない +gui.message.not_enough_energy.name=エネルギーが足りない! +gui.message.not_set.name=設定がない +gui.message.one_min.name=1分 +gui.message.player.name=プレイヤー +gui.message.priority_closest.name=一番近い +gui.message.priority_health_high.name=体力が一番多い +gui.message.priority_health_low.name=体力が一番少ない +gui.message.priority_low.name=優先順位 (低い数字ほど優先) +gui.message.receiving_active.name=受信可能 +gui.message.redstone_sig.name=レッドストーン信号 +gui.message.remove_pad.name=パッドを取り除く +gui.message.sending_active.name=送信可能 +gui.message.success.name=完成 +gui.message.target_meteors.name=隕石を標的にする +gui.message.target_no_energy.name=ターゲット側のエネルギーが足りない! +gui.message.telepad_not_found.name=テレポートパッドが見つかりません! +gui.message.telepad_too_far.name=ターゲットが遠すぎます! (最大 %d) +gui.message.telepad_wrong_dim.name=ターゲットは違うディメンションにあります! +gui.message.telepad_target_disabled.name=ターゲットが無効です +gui.message.ten_sec.name=10秒 +gui.message.terraforming.name=テラフォーミング +gui.message.thirty_sec.name=30秒 +gui.message.trees.name=木 +gui.message.with_atmosphere0.name=大気中に豊富な +gui.message.with_atmosphere1.name=が存在する惑星で +gui.message.zero_water.name=水がない! +gui.methane_output.desc.2=メタンのタンク +gui.miner.docked=待機 +gui.miner.docking=ドッキング中 +gui.miner.mined=採掘済み +gui.miner.mining=採掘中 +gui.miner.offline=オフライン +gui.miner.out_of_range=範囲外 +gui.miner.returning=帰還中 +gui.miner.stuck=立ち往生: +gui.miner.travelling=移動中 +gui.slimeling.button.follow=追従 +gui.slimeling.button.sit=座る +gui.slimeling.chat.wrong_player=私のスライムリングじゃない! +gui.slimeling.damage=攻撃力 +gui.slimeling.following=追従している +gui.slimeling.food=好きな食べ物 +gui.slimeling.kills=倒したMobの数 +gui.slimeling.name=名前 +gui.slimeling.owner=オーナー +gui.slimeling.scale=サイズ +gui.slimeling.sitting=座っている +gui.status.invalid_spout_1.name=活性な蒸気噴出口の +gui.status.invalid_spout_2.name=上に設置してください +gui.status.liquefying.name=液化中 +gui.status.needs_carbon.name=炭素が必要 +gui.status.nogas.name=ガスがない +gui.status.processing.name=合成中 +gui.status.tankfull.name=タンクが満杯 +gui.status.tanksfull.name=タンクが満杯 +gui.telepad.desc.0=テレポートパッドの$固有アドレス +gui.telepad.desc.1=別のテレポートパッドのアドレス。$エンティティはそこへ送られる。 +gui.terraformer.desc.0=水タンク +gui.water_bucket_slot.desc=水バケツをここに置く +item.astro_miner.name=アストロマイナー +item.atmospheric_valve.name=大気弁 +item.atomic_battery.name=原子力電池 +item.beam_core.name=ビームコア +item.bucket_sludge.name=細菌まみれのスラッジ入りバケツ +item.bucket_sulphuric_acid.name=硫酸入りバケツ +item.canister.gas.name=ガス +item.canister.liquid_argon.full.name=満杯の液体アルゴン缶 +item.canister.liquid_argon.name=液体 +item.canister.liquid_argon.partial.name=ある程度入った液体アルゴン缶 +item.canister.liquid_nitrogen.full.name=満杯の液体窒素缶 +item.canister.liquid_nitrogen.name=液体 +item.canister.liquid_nitrogen.partial.name=液体窒素缶 +item.canister.lox.full.name=満杯の液体酸素缶 +item.canister.lox.name=液体酸素 +item.canister.lox.partial.name=ある程度入った液体酸素缶 +item.carbon_fragments.name=炭素の破片 +item.compressed_desh.name=圧縮されたデッシュ +item.compressed_titanium.name=圧縮されたチタン +item.desh_axe.name=デッシュの斧 +item.desh_boots.name=デッシュのブーツ +item.desh_chestplate.name=デッシュのチェストプレート +item.desh_helmet.name=デッシュのヘルメット +item.desh_hoe.name=デッシュのクワ +item.desh_leggings.name=デッシュのレギンス +item.desh_pick.name=デッシュのツルハシ +item.desh_pick_slime.description.name=スライムリングの卵が集められる +item.desh_pick_slime.name=粘着デッシュのツルハシ +item.desh_spade.name=デッシュのシャベル +item.desh_stick.name=デッシュの棒 +item.desh_sword.name=デッシュの剣 +item.dust_titanium.name=チタンの粉末 +item.empty_gas_canister.name=空のガス缶 +item.engine_t2.name=重ロケットエンジン +item.fluid_manip.name=流体の操作器 +item.grapple.name=グラップリングフック +item.heavy_nose_cone.name=重ノーズコーン +item.ingot_desh.name=デッシュインゴット +item.ingot_lead.name=鉛インゴット +item.ingot_titanium.name=チタンインゴット +item.key.t2.name=レベル2 ダンジョンの鍵 +item.key.t3.name=レベル3 ダンジョンの鍵 +item.methane_canister.name=満杯のメタンガス缶 +item.methane_canister_partial.name=メタンガス缶 +item.orion_drive.name=オリオンドライブ +item.prelaunch_checklist.name=発射前チェックリスト +item.radioisotope_core.name=放射性同位体コア +item.raw_desh.name=未精錬デッシュ +item.reinforced_plate_t2.name=頑丈なプレート +item.reinforced_plate_t3.name=頑丈なプレート +item.rocket_fins_t2.name=重ロケットフィン +item.rocket_t2.cargo_rocket.name=貨物ロケット +item.rocket_t2.t2Rocket.name=レベル2 ロケット +item.rocket_t3.t3Rocket.name=レベル3 ロケット +item.shard_iron.name=鉄の破片 +item.shard_titanium.name=チタンの破片 +item.shield_controller.description=あらゆるダメージから防具を保護する -大気腐食も含めて! +item.shield_controller.name=シールドコントローラ +item.slimeling_cargo.name=スライムリングバッグ +item.solar_dust.name=ソーラーダスト +item.solar_module_2.name=ソーラーアレイパネル +item.strange_seed.name=奇妙な種 +item.thermal_boots.name=熱保護のブーツ +item.thermal_boots_t2.name=恒温ブーツ +item.thermal_chestplate.name=熱保護のチェストプレート +item.thermal_chestplate_t2.name=恒温チェストプレート +item.thermal_cloth.name=熱保護の布 +item.thermal_fabric.name=恒温性の繊維 +item.thermal_helm.name=熱保護のヘルメット +item.thermal_helm_t2.name=恒温ヘルメット +item.thermal_leggings.name=熱保護のレギンス +item.thermal_leggings_t2.name=恒温レギンス +item.thin_solar_wafer.name=ソーラーアレイウェファー +item.tier2.desc=レベル2 +item.tier3.desc=レベル3 +item.titanium_axe.name=チタンの斧 +item.titanium_boots.name=チタンのブーツ +item.titanium_chestplate.name=チタンのチェストプレート +item.titanium_helmet.name=チタンのヘルメット +item.titanium_hoe.name=チタンのクワ +item.titanium_leggings.name=チタンのレギンス +item.titanium_pickaxe.name=チタンのツルハシ +item.titanium_shovel.name=チタンのシャベル +item.titanium_sword.name=チタンの剣 +item.volcanic_pickaxe.description=プレイヤーの向きに応じて3x3のエリアを採掘する +item.volcanic_pickaxe.name=火山のツルハシ +planet.asteroids=小惑星 +planet.mars=火星 +schematic.astro_miner.name=アストロマイナー +schematic.cargo_rocket.name=自動貨物ロケット +schematic.rocket_t3.name=レベル3 ロケット +tile.asteroids_block.asteroid_rock_0.name=小惑星の岩 +tile.asteroids_block.asteroid_rock_1.name=小惑星の岩 +tile.asteroids_block.asteroid_rock_2.name=小惑星の岩 +tile.asteroids_block.ore_aluminum_asteroids.name=アルミ鉱石 +tile.asteroids_block.ore_ilmenite_asteroids.name=イルメナイト鉱石 +tile.asteroids_block.ore_iron_asteroids.name=鉄鉱石 +tile.asteroids_block.asteroid_deco.name=ダーク装飾ブロック +tile.asteroids_block.titanium_block.name=チタンブロック +tile.beam_receiver.description=エネルギー機械の入出力に接続し、ビームを使ってエネルギーを輸送する. +tile.beam_receiver.name=ビーム受信機 +tile.beam_reflector.description=ビーム源から目標へのビームの向きを変えるために使用する。右クリックで送信先を順番に変更できる。 +tile.beam_reflector.name=ビーム反射器 +tile.cavern_vines.description=生物にとって危険であり、絡めて上へと引きずり上げる。 +tile.cavern_vines.name=洞窟のツタ +tile.crashed_probe.name=墜落した宇宙探査機 +tile.creeper_egg.description=火星のダンジョンにスポーンし、爆発すると卑劣な捕食者が生まれる。 +tile.creeper_egg.name=クリーパーの卵 +tile.cryo_chamber.description=プレイヤーが昼間に眠ることを可能にし、体力を少し回復する。使用後にクールダウンが必要。 +tile.dense_ice.name=高密度の氷 +tile.electrolyzer.description=水を水素と酸素に分解する。水素はメタン合成に有用である。 +tile.gas_liquefier.description=大気中や缶にある気体を液化する。液体メタンはロケット燃料として優れている! +tile.geothermal_generator.description=活性な蒸気噴出口の上に設置すると、振動の速さでエネルギーを生成する. +tile.geothermal_generator.name=地熱発電機 +tile.hydrogen_pipe.description=機械の内部ガスタンクから他の機械へ水素を輸送する。 +tile.hydrogen_pipe.name=水素のパイプ +tile.launch_controller.description=打ち上げ条件や、自動打ち上げ時の目標発射台の設定などの打ち上げ動作をカスタマイズできる。 +tile.laser_turret.name=レーザータレット +tile.laser_turret.description=隕石/プレイヤー/Mobを標的にできる +tile.mars.coppermars.name=銅鉱石 +tile.mars.deshmars.name=デッシュ鉱石 +tile.mars.ironmars.name=鉄鉱石 +tile.mars.marscobblestone.name=火星の丸石 +tile.mars.marsdeco.name=デッシュのブロック +tile.mars.marsdirt.name=火星のレゴリス +tile.mars.marsdungeon.name=火星ダンジョンのレンガ +tile.mars.marsgrass.name=火星の細かいレゴリス +tile.mars.marsstone.name=火星の石 +tile.mars.tinmars.name=スズ鉱石 +tile.mars_machine.0.name=テラフォーマー +tile.mars_machine.1.name=低温室 +tile.mars_machine.2.name=打ち上げコントローラ +tile.mars_machine.4.name=ガス液化装置 +tile.mars_machine.5.name=メタン合成器 +tile.mars_machine.6.name=水電気分解装置 +tile.mars_stairs_brick.name=火星ダンジョンのレンガ階段 +tile.mars_stairs_cobblestone.name=火星の丸石階段 +tile.methane_synthesizer.description=水素源と炭素源を使いメタンガスを製造する。メタンガスはガス液化装置でさらに処理できる。 +tile.miner_base.description=アストロマイナーのドッキングポイント。これは大きい... このブロックで2x2x2の立方体を作ろう。 +tile.miner_base.name=アストロマイナーベース +tile.miner_base_full.name=アストロマイナーベース +tile.slab_gc_half.mars_bricks_slab.name=火星ダンジョンのレンガのハーフブロック +tile.slab_gc_half.mars_slab.name=火星の丸石のハーフブロック +tile.slab_gc_half.asteroids_slab.name=ダーク装飾ハーフブロック +tile.slimeling_egg.blue.name=青いスライムリングの卵 +tile.slimeling_egg.description=スライムリングの卵は、プレイヤーの素手で割るとすぐ孵化してペットになる。 +tile.slimeling_egg.red.name=赤いスライムリングの卵 +tile.slimeling_egg.yellow.name=黄色いスライムリングの卵 +tile.sludge.name=細菌まみれのスラッジ +tile.solar_array_controller.name=ソーラーアレイコントローラ +tile.solar_array_controller.description=ソーラーアレイモジュールを接続すると発電する. 宇宙ステーションで最も効果を発揮する. +tile.solar_array_module.name=ソーラーアレイモジュール +tile.solar_array_module.description=ソーラーアレイコントローラに接続すると発電する. 宇宙ステーションで最も効果を発揮する. +tile.spout.name=蒸気噴出口 +tile.sulphuric_acid.name=硫酸 +tile.telepad_short.description=他のテレポートパッドとリンクすると、プレイヤーや他の生物を短距離(250ブロック)転送できる。 +tile.telepad_short.name=短距離テレポートパッド +tile.terraformer.description=地球から遠く離れた惑星を緑化するために使用する. 正しい材料を投入すると草・木・水を生成する。 +tile.treasure_t2.description=火星のダンジョンに生成される。最終ボスを倒した後に解錠できる。 +tile.treasure_t2.name=レベル2 宝箱 +tile.treasure_t3.description=レベル3宝箱は現在使われていない。 +tile.treasure_t3.name=レベル3 宝箱 +tile.venus.dungeon_brick_venus_1.name=金星ダンジョンのレンガI +tile.venus.dungeon_brick_venus_2.name=金星ダンジョンのレンガII +tile.venus.venus_ore_aluminum.name=アルミ鉱石 +tile.venus.venus_ore_copper.name=銅鉱石 +tile.venus.venus_ore_galena.name=方鉛鉱 +tile.venus.venus_ore_quartz.name=クォーツ鉱石 +tile.venus.venus_ore_silicon.name=シリコン鉱石 +tile.venus.venus_ore_solar.name=ソーラー鉱石 +tile.venus.venus_ore_tin.name=スズ鉱石 +tile.venus.venus_rock_0.name=金星の柔らかい岩 +tile.venus.venus_rock_1.name=金星の硬い岩 +tile.venus.venus_rock_2.name=金星の火山岩 +tile.venus.venus_rock_3.name=軽石 +tile.venus.lead_block.name=鉛ブロック +tile.venus_rock_scorched.name=焦げた金星の岩 +tile.walkway.walkway.description=装飾目的で使われる. 宇宙のテーマを維持しながらブロックを接続するために使う。 +tile.walkway.walkway.name=通路 +tile.walkway.walkway_pipe.description=歩行可能な面の下にパイプを走らせるために使う。 +tile.walkway.walkway_pipe.name=通路 +tile.walkway.walkway_wire.description=歩行可能な面の下にワイヤーを走らせるために使う。 +tile.walkway.walkway_wire.name=通路 +tile.wall_gc.mars.name=火星の丸石の塀 +tile.wall_gc.mars_bricks.name=火星ダンジョンのレンガの塀 +tile.web_torch.web_torch_0.name=クモの糸 +tile.web_torch.web_torch_1.description=グロウストーン松明 +tile.web_torch.web_torch_1.name=クモの糸 +achievement.mars=火星へ! +achievement.mars.desc=レベル2ロケットで火星に行く! +achievement.asteroids=小惑星帯へ! +achievement.asteroids.desc=レベル3ロケットで小惑星帯に行く! +achievement.venus=金星へ! +achievement.venus.desc=レベル3ロケットで金星に行く! diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ko_kr.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ko_kr.lang new file mode 100644 index 00000000..ce574705 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ko_kr.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=쇠갈고리 제작 +checklist.equip_shield_controller.key=방패 조종 장치 장착 +checklist.thermal_padding.key=1티어 보온복 장착 +checklist.thermal_padding_t2.key=2티어 보온복 장착 +container.crashed_probe.name=부서진 탐사선 +container.entry_pod.name=진입 캡슐 +container.geothermal_generator.name=지열 발전기 +container.launchcontroller.name=발사 통제기 +container.mars_lander.name=착륙 기구 +container.solar_array_controller.name=태양광 발전기 +container.short_range_telepad.name=단거리 텔레패드 +container.slimeling_inventory.name=슬라임링 인벤토리 +container.tile_terraformer.name=테라포머 +dimension.mars.name=화성 +entity.astro_miner.name=천체 광업기계 +entity.creeper_boss.name=진화된 크리퍼 보스 +entity.entry_pod.name=진입 캡슐 +entity.entry_pod_venus.name=금성 진입 캡슐 +entity.grapple_hook.name=쇠갈고리 +entity.juicer.name=과즙기 +entity.landing_balloons.name=착륙 기구 +entity.projectile_tnt.name=발사 TNT +entity.rocket_cargo.name=화물 로켓 +entity.rocket_t2.name=2티어 로켓 +entity.rocket_t3.name=3티어 로켓 +entity.slimeling.name=슬라임링 +entity.sludgeling.name=슬러지링 +entity.small_asteroid.name=작은 소행성 +entity.spider_queen.name=여왕 거미 +entity.web_shot.name=거미줄 공격 +fluid.argon=아르곤 가스 +fluid.atmosphericgases=대기 가스 +fluid.bacterialsludge=세균 슬러지 +fluid.carbondioxide=이산화탄소 가스 +fluid.fuel=연료 +fluid.helium=헬륨 가스 +fluid.hydrogen=수소 가스 +fluid.liquidargon=액체 아르곤 +fluid.liquidmethane=액체 메테인 +fluid.liquidnitrogen=액체 질소 +fluid.liquidoxygen=액체 산소 +fluid.methane=메탄 가스 +fluid.nitrogen=질소 가스 +fluid.oil=석유 +fluid.oxygen=산소 가스 +fluid.sulphuricacid=황산 +gas.carbondioxide.name=이산화탄소 +gas.nitrogen.name=질소 +gas.oxygen.name=산소 +gc.configgui.astro_miners_max=플레이어 당 최대 우주 채굴인수 +gc.configgui.dimension_id_asteroids=소행성대 세계 ID +gc.configgui.dimension_id_mars=화성 세계 ID +gc.configgui.dimension_id_venus=금성 세계 ID +gc.configgui.disable_aluminum_gen_asteroids=알루미늄 광석 생성 미사용 (소행성대) +gc.configgui.disable_ambient_lightning=번개 미사용 (금성) +gc.configgui.disable_copper_gen_mars=구리 광석 생성 미사용 (화성) +gc.configgui.disable_desh_gen_mars=데시 광석 생성 미사용 (화성) +gc.configgui.disable_galacticraft_helium=헬륨 가스 생성 미사용 +gc.configgui.disable_small_asteroids=작은 소행성 스폰 미사용 (소행성대) +gc.configgui.disable_ilmenite_gen_asteroids=일메네이트 광석 생성 미사용 (소행성대) +gc.configgui.disable_iron_gen_asteroids=철광석 생성 미사용 (소행성대) +gc.configgui.disable_iron_gen_mars=철광석 생성 미사용 (화성) +gc.configgui.disable_tin_gen_mars=주석 광석 생성 미사용 (화성) +gc.configgui.disable_venus_aluminum_gen=알루미늄 광석 생성 미사용 (금성) +gc.configgui.disable_venus_copper_gen=구리 광석 생성 미사용 (금성) +gc.configgui.disable_venus_galena_gen=방연석 광석 생성 미사용 (금성) +gc.configgui.disable_venus_quartz_gen=석영 광석 생성 미사용 (금성) +gc.configgui.disable_venus_silicon_gen=규소 광석 생성 미사용 (금성) +gc.configgui.disable_venus_solar_gen=태양 광석 생성 미사용 (금성) +gc.configgui.disable_venus_tin_gen=주석 광석 생성 미사용 (금성) +gc.configgui.id_schematic_cargo_rocket=화물 로켓 설계도 ID +gc.configgui.id_schematic_rocket_t2=2티어 로켓 설계도 ID +gc.configgui.id_schematic_rocket_t3=3티어 로켓 설계도 ID +gc.configgui.launch_controller_all_dims=모든 차원에서 조절기 가동 +gc.configgui.launch_controller_chunk_load=청크로딩하는 동안 조절기 가동 +gc.configgui.planets.title=갤럭티크래프트 행성 환경설정 +gui.button.add_blacklist.name=블랙리스트 +gui.button.add_entity.name=엔티티 추가 +gui.button.add_player.name=플레이어 추가 +gui.button.add_whitelist.name=화이트리스트 +gui.button.edit_blacklist.name=블랙리스트 수정 +gui.button.edit_priority.name=우선순위 수정 +gui.button.edit_whitelist.name=화이트리스트 수정 +gui.button.liquefy.name=가공 +gui.button.liquefy_stop.name=중단 +gui.button.never_fire_team.name=우주 경주 팀에서 절대 발사하지 않기 +gui.button.recall.name=재개 +gui.button.remove_selected.name=선택 제거 +gui.carbon_slot.desc.0=탄소 파편을 여기로 갈 수 있습니다. +gui.cargorocket.status.launched.0=준비 +gui.cargorocket.status.launched.1=발사됨 +gui.cargorocket.status.waiting.0=대기 +gui.cargorocket.status.waiting.1=발화 +gui.choose_planet.desc.mars=거주 가능#산소 부족#중력: 38% +gui.cryogenic.chat.cant_use=%d 초 뒤에 다시 사용할 수 있습니다. +gui.gas_input.desc.0=메테인 가스통을 이곳에 배치하세요. +gui.gas_input.desc.1=(또는, 대기밸브를 대신 배치가능합니다.) +gui.gas_tank.desc.0=가스 저장고 +gui.gas_tank_compressed.desc.0=가스 저장고(압축됨) +gui.hydrogen_input.desc.0=수소 탱크를 이곳에 배치하세요. +gui.hydrogen_input.desc.1=혹은 대기밸브 또한 가능합니다. +gui.launch_controller.advanced=고급 +gui.launch_controller.desc.0=발사 통제기의$고유 주파수 +gui.launch_controller.desc.1=로켓 발사 방향 (목적지) 주파수 +gui.launch_controller.desc.2=로켓 발사시$발사대 제거 여부 +gui.launch_controller.desc.3=현재 조건이 만족될 경우$로켓이 발사됩니다. +gui.launch_controller.desc.4=다른 플레이어들로부터$목적지 주파수를 숨깁니다. +gui.launch_controller.owner=소유자 +gui.liquid_output.desc.2=액체화된 가스 탱크 +gui.liquid_tank.desc.0=액체 탱크 +gui.message.address.name=고유번호 +gui.message.astro_miner.fail=이 근거지에는 이미 천체 광업기계가 있습니다! +gui.message.astro_miner1.fail=도킹 영역이 막혔습니다: +gui.message.astro_miner1_a.fail=천체 광업기계의 경로가 막혔습니다. 막힌 블록: +gui.message.astro_miner1_b.fail=보호된 구역입니다! +gui.message.astro_miner2.fail=그것은 하나의 천체 광업기계에게 너무 많을 것입니다! +gui.message.astro_miner3.fail=천체 광업기계의 근거지가 파괴되었습니다! +gui.message.astro_miner4.fail=천체 광업기계의 에너지가 부족합니다 근거지로 돌아갈 수 없습니다! +gui.message.astro_miner5.fail=천체 광업기계의 근거지 경로가 막혔습니다! +gui.message.astro_miner6.fail=천체 광업기계는 그 지역 채굴을 끝냈습니다, 작동이 중지됩니다! +gui.message.astro_miner7.fail=우주정거장에서는 천체 광업기계가 아무것도 할 수 없습니다! +gui.message.astro_miner8.fail=두 번째 천체 광업기계가 같은 근거지에서 발견될때, 첫 번째는 동결됩니다! +gui.message.blacklist_mode.name=블랙리스트 모드 +gui.message.bubble_exp.name=기포 팽창 중 +gui.message.cargo_full.name=화물이 꽉 찼습니다. +gui.message.cargo_unloaded.name=화물이 적재되지 않았습니다. +gui.message.connected_solar_controller.name=%d개가 장착되었습니다. (16블록 범위) +gui.message.dest_address.name=목적지 주소 +gui.message.dest_frequency.name=목적지 +gui.message.enable_grass.name=잔디 활성화 +gui.message.enable_trees.name=나무 활성화 +gui.message.enter_entity.name=엔티티 이름/ID 입력 +gui.message.enter_player.name=플레이어 이름 입력 +gui.message.frequency.name=주파수 +gui.message.fully_fueled.name=연료 최대공급시 +gui.message.grapple.fail=그래플을 작동시키려면 줄이 필요합니다! +gui.message.grass.name=잔디 +gui.message.instant.name=즉시 +gui.message.invalid_address.name=유효하지 않은 고유번호 +gui.message.invalid_freq.name=잘못된 주파수 +gui.message.invalid_target_address.name=유효하지 않은 타깃 고유번호 +gui.message.launch_when.name=발사 조건: +gui.message.low_energy.name=에너지 적음 +gui.message.low_energy_output.name=에너지 출력 적음 +gui.message.no_bonemeal.name=뼛가루가 부족합니다 +gui.message.no_energy.name=에너지가 부족합니다! +gui.message.no_saplings.name=묘목이 부족합니다 +gui.message.no_seeds.name=씨앗이 부족합니다 +gui.message.no_valid_blocks.name=기포 내부에 유효한 블록이 없습니다 +gui.message.no_water.name=물이 부족합니다 +gui.message.not_enough.name=부족합니다 +gui.message.not_enough_energy.name=에너지 부족! +gui.message.not_set.name=설정 안 됨 +gui.message.one_min.name=1분 +gui.message.player.name=플레이어 +gui.message.priority_closest.name=Closest +gui.message.priority_health_high.name=최고 건강 +gui.message.priority_health_low.name=최저 건강 +gui.message.priority_low.name=우선순위 (낮은 순서) +gui.message.receiving_active.name=수신 활성 +gui.message.redstone_sig.name=레드스톤 신호 +gui.message.remove_pad.name=발사대 제거 +gui.message.sending_active.name=송신 +gui.message.success.name=성공 +gui.message.target_meteors.name=목표 유성 +gui.message.target_no_energy.name=타깃 에너지 부족! +gui.message.telepad_not_found.name=텔레포터가 존재하지 않음! +gui.message.telepad_too_far.name=타깃이 너무 멀음! (최대 %d) +gui.message.telepad_wrong_dim.name=타깃이 다른 세계에 있음! +gui.message.telepad_target_disabled.name=타깃이 없음! +gui.message.ten_sec.name=10초 +gui.message.terraforming.name=테라포밍 중 +gui.message.thirty_sec.name=30초 +gui.message.trees.name=나무 +gui.message.with_atmosphere0.name=현 행성의 대기에 +gui.message.with_atmosphere1.name=(이)가 풍부합니다. +gui.message.zero_water.name=물이 부족합니다! +gui.methane_output.desc.2=메탄 탱크 +gui.miner.docked=도킹됨 +gui.miner.docking=도킹 중 +gui.miner.mined=채굴됨 +gui.miner.mining=채굴 중 +gui.miner.offline=오프라인 +gui.miner.out_of_range=범위를 벗어남 +gui.miner.returning=돌아오는 중 +gui.miner.stuck=막힌 곳: +gui.miner.travelling=이동 중 +gui.slimeling.button.follow=따라가기 +gui.slimeling.button.sit=앉기 +gui.slimeling.chat.wrong_player=내 슬라임링이 아닙니다! +gui.slimeling.damage=공격 데미지 +gui.slimeling.following=따라오는 중 +gui.slimeling.food=기호 음식 +gui.slimeling.kills=킬 수 +gui.slimeling.name=이름 +gui.slimeling.owner=주인 +gui.slimeling.scale=크기 +gui.slimeling.sitting=앉은 상태 +gui.status.invalid_spout_1.name=배치되어야 합니다. +gui.status.invalid_spout_2.name=유황이 분출합니다. +gui.status.liquefying.name=액화 중 +gui.status.needs_carbon.name=탄소 필요 +gui.status.nogas.name=가스 없음 +gui.status.processing.name=합성 중 +gui.status.tankfull.name=탱크 꽉참 +gui.status.tanksfull.name=탱크 전체 꽉참 +gui.telepad.desc.0=텔레포터 고유번호 +gui.telepad.desc.1=타깃 텔레포터 고유번호 +gui.terraformer.desc.0=물 탱크 +gui.water_bucket_slot.desc=물양동이를 이곳에 배치하세요. +item.astro_miner.name=천체 광업기계 +item.atmospheric_valve.name=대기 밸브 +item.atomic_battery.name=천체 배터리 +item.beam_core.name=광선 코어 +item.bucket_sludge.name=세균 슬러지 양동이 +item.bucket_sulphuric_acid.name=황산 양동이 +item.canister.gas.name=가스 #메테인 가스의 줄임말 +item.canister.liquid_argon.full.name=가득찬 액체 아르곤 통 +item.canister.liquid_argon.name=액아 #액체 아르곤의 줄임말 +item.canister.liquid_argon.partial.name=액체 아르곤 통 +item.canister.liquid_nitrogen.full.name=가득찬 액체 질소통 +item.canister.liquid_nitrogen.name=액질 #액체 질소의 줄임말 +item.canister.liquid_nitrogen.partial.name=액체 질소통 +item.canister.lox.full.name=가득찬 액체 산소통 +item.canister.lox.name=액산 #액체 산소의 줄임말 +item.canister.lox.partial.name=액체 산소통 +item.carbon_fragments.name=탄소 파편 +item.compressed_desh.name=압축된 데쉬 +item.compressed_titanium.name=압축된 티타늄 +item.desh_axe.name=데쉬 도끼 +item.desh_boots.name=데쉬 부츠 +item.desh_chestplate.name=데쉬 흉갑 +item.desh_helmet.name=데쉬 투구 +item.desh_hoe.name=데쉬 괭이 +item.desh_leggings.name=데쉬 각반 +item.desh_pick.name=데쉬 곡괭이 +item.desh_pick_slime.description.name=크리퍼 알 채취가능 +item.desh_pick_slime.name=접착 데쉬 곡괭이 +item.desh_spade.name=데쉬 삽 +item.desh_stick.name=데쉬 막대기 +item.desh_sword.name=데쉬 검 +item.dust_titanium.name=티타늄 가루 +item.empty_gas_canister.name=빈 가스통 +item.engine_t2.name=중형 로켓 엔진 +item.fluid_manip.name=유체 조정기 +item.grapple.name=그래플 +item.heavy_nose_cone.name=중형 노즈콘 +item.ingot_desh.name=데쉬 주괴 +item.ingot_lead.name=납 주괴 +item.ingot_titanium.name=티타늄 주괴 +item.key.t2.name=2티어 던전 열쇠 +item.key.t3.name=3티어 던전 열쇠 +item.methane_canister.name=충전된 메탄 가스통 +item.methane_canister_partial.name=메탄 가스통 +item.orion_drive.name=오리온 드라이브 +item.prelaunch_checklist.name=발사전 체크리스트 +item.radioisotope_core.name=방사성 동위 원소 코어 +item.raw_desh.name=가공되지 않은 데쉬 +item.reinforced_plate_t2.name=2티어 강화 플레이트 +item.reinforced_plate_t3.name=3티어 강화 플레이트 +item.rocket_fins_t2.name=중형 로켓 날개 +item.rocket_t2.cargo_rocket.name=화물 로켓 +item.rocket_t2.t2Rocket.name=2티어 로켓 +item.rocket_t3.t3Rocket.name=3티어 로켓 +item.shard_iron.name=철 조각 +item.shard_titanium.name=티타늄 조각 +item.shield_controller.description=방패 통제기는 대기 부식을 포함한 모든 형태의 손상으로부터 장갑을 보호합니다! +item.shield_controller.name=방패 조절기 +item.slimeling_cargo.name=슬라임링 인벤토리 가방 +item.solar_dust.name=태양 먼지 +item.solar_module_2.name=태양열 패널 +item.strange_seed.name=이상한 씨앗 +item.thermal_boots.name=단열 부츠 +item.thermal_boots_t2.name=등온 부츠 +item.thermal_chestplate.name=단열 흉갑 +item.thermal_chestplate_t2.name=등온 흉갑 +item.thermal_cloth.name=단열복 +item.thermal_fabric.name=등온천 +item.thermal_helm.name=단열 투구 +item.thermal_helm_t2.name=등온 투구 +item.thermal_leggings.name=단열 각반 +item.thermal_leggings_t2.name=등온 각반 +item.thin_solar_wafer.name=태양열 웨이퍼 +item.tier2.desc=2티어 +item.tier3.desc=3티어 +item.titanium_axe.name=티타늄 도끼 +item.titanium_boots.name=티타늄 부츠 +item.titanium_chestplate.name=티타늄 흉갑 +item.titanium_helmet.name=티타늄 투구 +item.titanium_hoe.name=티타늄 괭이 +item.titanium_leggings.name=티타늄 각반 +item.titanium_pickaxe.name=티타늄 곡괭이 +item.titanium_shovel.name=티타늄 삽 +item.titanium_sword.name=티타늄 검 +item.volcanic_pickaxe.description=어느 방향을 향하고 있느냐에 따라 3x3구역을 채굴합니다. +item.volcanic_pickaxe.name=화산 곡괭이 +planet.asteroids=소행성대 +planet.mars=화성 +schematic.astro_miner.name=천체 광업기계 +schematic.cargo_rocket.name=자동 화물 로켓 +schematic.rocket_t3.name=3티어 로켓 +tile.asteroids_block.asteroid_rock_0.name=소행성 암석 +tile.asteroids_block.asteroid_rock_1.name=소행성 암석 +tile.asteroids_block.asteroid_rock_2.name=소행성 암석 +tile.asteroids_block.ore_aluminum_asteroids.name=알루미늄 광석 +tile.asteroids_block.ore_ilmenite_asteroids.name=일메네이트 광석 +tile.asteroids_block.ore_iron_asteroids.name=철광석 +tile.asteroids_block.asteroid_deco.name=어두운 장식 블록 +tile.asteroids_block.titanium_block.name=티타늄 블록 +tile.beam_receiver.description=에너지빔 수신기는 기계의 전력/에너지 입출력을 도와 에너지를 송수신 할 수 있게 해주는 기기입니다. +tile.beam_receiver.name=에너지빔 수신기 +tile.beam_reflector.description=에너지빔 반사장치는 에너지 광선(빔)의 방향을 바꾸어 목적지에 도달할 수 있게 해주는 기기입니다. 오른쪽 클릭을 통해 목표 타켓을 변경할 수 있습니다. +tile.beam_reflector.name=에너지빔 반사장치 +tile.cavern_vines.description=동굴 넝굴은 움직이는 동물에게 치명적입니다. 동물을 휘감아 들어올립니다. +tile.cavern_vines.name=동굴 넝굴 +tile.crashed_probe.name=부서진 탐사선 +tile.creeper_egg.description=폭발하며 크리퍼를 부화시키는 크리퍼 알은 화성 던전에 생성됩니다. +tile.creeper_egg.name=크리퍼 알 +tile.cryo_chamber.description=극저온실은 플레이어가 낮에 잠을 잘 수 있도록 도와줍니다. 쿨다운 시간이 존재하지만 소량의 체력을 회복시킵니다. +tile.dense_ice.name=두꺼운 얼음 +tile.electrolyzer.description=(메탄 합성기에 유용한) 수소와 산소를 물에서 부터 전기분해합니다. +tile.gas_liquefier.description=대기 혹은 플레이어에 의해 주어진 기체를 액체화 시킵니다. (팁: 액체메탄 로켓 연료) +tile.geothermal_generator.description=유황 증기 덩어리 위에 올려 놓으면, 진동 속도로 에너지를 발생시킵니다. +tile.geothermal_generator.name=지열 발전기 +tile.hydrogen_pipe.description=수소 파이프는 수소를 한 기기에서 다른 기기로 수송 할 시 필요합니다. +tile.hydrogen_pipe.name=수소 파이프 +tile.launch_controller.description=발사 통제기를 통해 로켓 발사 패턴을 커스터마이징 할 수 있습니다. +tile.laser_turret.name=레이저 소탑 +tile.laser_turret.description=유성, 플레이어 몹을 타깃할 수 있습니다 +tile.mars.coppermars.name=구리 광석 +tile.mars.deshmars.name=데쉬 광석 +tile.mars.ironmars.name=철광석 +tile.mars.marscobblestone.name=화성 조약돌 +tile.mars.marsdeco.name=데쉬 블록 +tile.mars.marsdirt.name=화성 흙 +tile.mars.marsdungeon.name=화성 던전 벽돌 +tile.mars.marsgrass.name=화성 잔디 +tile.mars.marsstone.name=화성석 +tile.mars.tinmars.name=주석 광석 +tile.mars_machine.0.name=테라포머 +tile.mars_machine.1.name=극저온실 +tile.mars_machine.2.name=발사 통제기 +tile.mars_machine.4.name=가스 액화기 +tile.mars_machine.5.name=메탄 합성기 +tile.mars_machine.6.name=전기 분해기 +tile.mars_stairs_brick.name=화정 던전 벽돌 계단 +tile.mars_stairs_cobblestone.name=화성 조약돌 계단 +tile.methane_synthesizer.description=수소와 탄소를 이용해 가스 액화기에서 가공 가능한 메테인을 합성합니다. +tile.miner_base.description=천체 광업소는 천체 광업기계를 위한 도킹 지점입니다. 그것은 큽니다. 2 x 2 x 2 크기의 큐브를 만들어야합니다. +tile.miner_base.name=천체 광업소 +tile.miner_base_full.name=천체 광업소 +tile.slab_gc_half.mars_bricks_slab.name=화성 던전 벽돌 반 블록 +tile.slab_gc_half.mars_slab.name=화성 조약돌 반 블록 +tile.slab_gc_half.asteroids_slab.name=다크 장식 반 블록 +tile.slimeling_egg.blue.name=푸른 슬라임링 알 +tile.slimeling_egg.description=슬라임링 알을 플레이어가 손에서 부화시켰을경우, 슬라임링을 펫으로 키울 수 있습니다. +tile.slimeling_egg.red.name=붉은 슬라임링 알 +tile.slimeling_egg.yellow.name=노란 슬라임링 알 +tile.sludge.name=세균 슬러지 +tile.solar_array_controller.name=태양광 발전기 +tile.solar_array_controller.description=이 블록에 태양광 모듈을 연결하여 전력을 공급합니다. 우주 정거장에서 가장 효율적입니다. +tile.solar_array_module.name=태양광 모듈 +tile.solar_array_module.description=이 블록들 중 몇 개를 태양광 발전기에 연결하여 전력을 공급합니다. 우주 정거장에서 가장 효율적입니다. +tile.spout.name=증기 분출기 +tile.sulphuric_acid.name=황산 +tile.telepad_short.description=단거리 텔레포터는 플레이어와 다른 생명체의 빠른 단거리 이동을 도와주는 기기입니다 (250 블럭). 최소한 두개의 기기가 서로 연결되어야 합니다. +tile.telepad_short.name=단거리 텔레포터 +tile.terraformer.description=테라포머는 특정 재료가 주어지면 잔디, 나무, 물과 같이 식물을 다른 행성에 키울 수 있는 환경을 만들어 줍니다. +tile.treasure_t2.description=화성 던전안에 2티어 보물 상자가 생성됩니다. 최종보스를 처치했을시 열 수 있습니다. +tile.treasure_t2.name=2티어 보물 상자 +tile.treasure_t3.description=금성 던전안에 3티어 보물 상자가 생성됩니다. 최종보스를 처치했을시 열 수 있습니다. +tile.treasure_t3.name=3티어 보물 상자 +tile.venus.dungeon_brick_venus_1.name=금성 던전 블록 I +tile.venus.dungeon_brick_venus_2.name=금성 던전 블록 II +tile.venus.venus_ore_aluminum.name=알루미늄 광석 +tile.venus.venus_ore_copper.name=구리 광석 +tile.venus.venus_ore_galena.name=방연석 광석 +tile.venus.venus_ore_quartz.name=석영 광석 +tile.venus.venus_ore_silicon.name=규소 광석 +tile.venus.venus_ore_solar.name=태양 광석 +tile.venus.venus_ore_tin.name=주석 광석 +tile.venus.venus_rock_0.name=부드러운 금성석 +tile.venus.venus_rock_1.name=단단한 금성석 +tile.venus.venus_rock_2.name=금성 화산석 +tile.venus.venus_rock_3.name=부석 +tile.venus.lead_block.name=납 블록 +tile.venus_rock_scorched.name=그을린 금성석 +tile.walkway.walkway.description=통로는 장식용으로 사용되며, 공간 테마를 유지하면서 블록을 연결하는 데 사용됩니다. +tile.walkway.walkway.name=통로 +tile.walkway.walkway_pipe.description=산소 파이프 통로는 기체 운반 기능을 하는 동시에 위로 걷는 통로를 제공하는 다중 기능성 블록입니다. +tile.walkway.walkway_pipe.name=통로 +tile.walkway.walkway_wire.description=알루미늄 전선 통로는 전선 기능을 하는 동시에 위로 걷는 통로를 제공하는 다중 기능성 블록입니다. +tile.walkway.walkway_wire.name=통로 +tile.wall_gc.mars.name=화성 조양돌 담장 +tile.wall_gc.mars_bricks.name=화성 던전 벽돌 담장 +tile.web_torch.web_torch_0.name=거미줄 +tile.web_torch.web_torch_1.description=발광석 횃불 +tile.web_torch.web_torch_1.name=거미줄 +achievement.mars=화성으로 가자! +achievement.mars.desc=화성으로 가는 2티어 로켓 챙기기 +achievement.asteroids=소행성대로 가자! +achievement.asteroids.desc=소행성대로 가는 3티어 로켓 챙기기 +achievement.venus=금성으로 가자! +achievement.venus.desc=금성으로 가는 3티어 로켓 챙기기 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/nl_nl.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/nl_nl.lang new file mode 100644 index 00000000..69b8df19 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/nl_nl.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Astroïde Lander +container.launchcontroller.name=Lanceer Controleur +container.mars_lander.name=Landing Balonnen +container.short_range_telepad.name=Klein Bereik Teleporter +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astroïde Mijner +entity.creeper_boss.name=Geëvolueerde Creeper Baas +entity.entry_pod.name=Astroïde Lander +entity.grapple_hook.name=Werpanker +entity.landing_balloons.name=Landing Balonnen +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Vracht Raket +entity.rocket_t2.name=Tier 2 Raket +entity.rocket_t3.name=Tier 3 Raket +entity.slimeling.name=Slimeling ##NEEDS TRANSLATE## +entity.sludgeling.name=Sludgeling ##NEEDS TRANSLATE## +entity.small_asteroid.name=Kleine Asteroïde +fluid.argon=Argon Gas +fluid.atmosphericgases=Atmosferische gassen +fluid.bacterialsludge=Bacteriele Modder +fluid.carbondioxide=CO2 Gas +fluid.fuel=Brandstof +fluid.helium=Helium Gas +fluid.hydrogen=Waterstof Gas +fluid.liquidargon=Vloeibaar Argon +fluid.liquidmethane=Vloeibaar Methaan +fluid.liquidnitrogen=Vloeibaar Stikstof +fluid.liquidoxygen=Vloeibaar Zuurstof +fluid.methane=Methaan Gas +fluid.nitrogen=Stikstof Gas +fluid.oxygen=Zuurstof Gas +gas.carbondioxide.name=Koolstof Dioxide +gas.nitrogen.name=Stikstof +gas.oxygen.name=Zuurstof +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimensie ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Vracht Raket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Raket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Lanceer Controleur alle Dimensies +gc.configgui.launch_controller_chunk_load=Lanceer Controleur Chunkloading +gc.configgui.planets.title=Galacticraft Planeten Configuratie +gui.button.liquefy.name=Process ##NEEDS TRANSLATE## +gui.button.liquefy_stop.name=Stop +gui.button.recall.name=Terugroepen +gui.carbon_slot.desc.0=Gefragmenteerde Koolstof kan hiernaar toe +gui.cargorocket.status.launched.0=Al +gui.cargorocket.status.launched.1=Gelanceerd +gui.cargorocket.status.waiting.0=Wachten Voor +gui.cargorocket.status.waiting.1=Ontsteking ##NEEDS TRANSLATE## +gui.choose_planet.desc.mars=Bewoonbaar#Geen Zuurstof#Zwaartekracht: 38% +gui.cryogenic.chat.cant_use=Ik kan dit niet gebruiken voor %d Seconden +gui.gas_input.desc.0=Probeer een Methaan$Gas bus hier te plaatsen +gui.gas_input.desc.1=(Misschien als alternatief,$een Atmosferische Sluis) +gui.gas_tank.desc.0=Gas Opslag +gui.gas_tank_compressed.desc.0=Gas Opslag (Samengeperst) +gui.hydrogen_input.desc.0=Dit Neemt een Waterstof Tank +gui.hydrogen_input.desc.1=Of een Atmosferische Sluis +gui.launch_controller.desc.0=Dit is de lanceer controleur's$unieke frequentie +gui.launch_controller.desc.1=Frequentie om de raket te lanceren naar +gui.launch_controller.desc.2=Of zou het lanceerplatform$Moeten worden verwijderd tijdens de lancering +gui.launch_controller.desc.3=Wanneer deze criteria er is,$Zak de raket lanceren +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=Vloeibare Gas Tank +gui.liquid_tank.desc.0=Vloeibare Tank +gui.message.address.name=Adres +gui.message.astro_miner.fail=Deze basis heeft al een astroïde mijner! +gui.message.astro_miner1.fail=de aanmerings plaats is geblokeerd door: +gui.message.astro_miner1_a.fail=de astroïde mijner's route is geblokeerd door: +gui.message.astro_miner2.fail=dat is een astroïde mijner te veel! +gui.message.astro_miner3.fail=de astroïde mijner's basis is verwijderd! +gui.message.astro_miner4.fail=de astroïde mijner heeft geen energie en kan niet terug naar de basis! +gui.message.astro_miner5.fail=de astroïde mijner's route naar zijn basis lijkt geblokeerd! +gui.message.astro_miner6.fail=de astroïde mijner is klaar met het mijnen van het gebied, en zal nu stoppen! +gui.message.astro_miner7.fail=er is niets om te mijnen voor een astroïde mijner op een ruimte station! +gui.message.astro_miner8.fail=een tweede astroïde mijner is gedetecteerd op de zelfde basis, de eerste zal nu stoppen. +gui.message.bubble_exp.name=Bubbel Uitbreiding +gui.message.cargo_full.name=Lading is Vol +gui.message.cargo_unloaded.name=Lading is Gelost +gui.message.dest_address.name=Doel Adres +gui.message.dest_frequency.name=Bestemmings Frequentie +gui.message.enable_grass.name=Enable Gras +gui.message.enable_trees.name=Enable Bomen +gui.message.frequency.name=Frequentie +gui.message.fully_fueled.name=Volgetankt +gui.message.grapple.fail=ik heb draden nodig als ik een enterhaak wil gooien! +gui.message.grass.name=Gras +gui.message.instant.name=Onmiddelijk +gui.message.invalid_address.name=Ongeldig Uniek Adres +gui.message.invalid_freq.name=Ongeldige Frequentie +gui.message.invalid_target_address.name=Ongeldig Doel Adres +gui.message.launch_when.name=Lanceer Als +gui.message.low_energy.name=Lage Energie +gui.message.no_bonemeal.name=Niet Genoeg Beendermeel +gui.message.no_energy.name=Niet Genoeg Energie +gui.message.no_saplings.name=Niet Genoeg Kiemplantjes +gui.message.no_seeds.name=Niet Genoeg Zaden +gui.message.no_valid_blocks.name=Geen Geldige Blokken in de bubbel +gui.message.no_water.name=Niet Genoeg Water +gui.message.not_enough.name=Niet Genoeg +gui.message.not_enough_energy.name=Niet Genoeg Energie! +gui.message.not_set.name=Niet Ingesteld +gui.message.one_min.name=1 Minuut +gui.message.receiving_active.name=Ontvanning Actief +gui.message.redstone_sig.name=Redstone Signaal +gui.message.remove_pad.name=Verwijder Platform +gui.message.sending_active.name=Verzending Actief +gui.message.success.name=Succes +gui.message.target_no_energy.name=Doel Heeft niet genoeg Energie! +gui.message.telepad_not_found.name=Teleporter Niet Gevonden! +gui.message.telepad_too_far.name=Doel Te Ver! (Maximaal %d) +gui.message.telepad_wrong_dim.name=Doel is in de verkeerde Dimensie! +gui.message.ten_sec.name=10 Seconden +gui.message.terraforming.name=Terravorming +gui.message.thirty_sec.name=30 Seconden +gui.message.trees.name=Bomen +gui.message.with_atmosphere0.name=Op een Planeet met genoeg on a planet with plenty of ##NEEDS TRANSLATE## +gui.message.with_atmosphere1.name=in de Atmosfeer +gui.message.zero_water.name=Geen Water! +gui.methane_output.desc.2=Methaan Tank +gui.miner.docked=Aangemeerd +gui.miner.docking=Aanmeren +gui.miner.mined=Gemijnd +gui.miner.mining=Aan Het Minen +gui.miner.offline=Offline +gui.miner.out_of_range=Uit Bereik +gui.miner.returning=Teruggaan +gui.miner.stuck=Vast op: +gui.miner.travelling=Reizen +gui.slimeling.button.follow=Volg +gui.slimeling.button.sit=Zit +gui.slimeling.chat.wrong_player=This isn't my Slimeling! ##NEEDS TRANSLATE## +gui.slimeling.damage=Aanval Schade +gui.slimeling.following=Volgen +gui.slimeling.food=Favoriete Voedsel +gui.slimeling.kills=Kills +gui.slimeling.name=Naam +gui.slimeling.owner=Eigenaar +gui.slimeling.scale=Schaal +gui.slimeling.sitting=Zitten +gui.status.liquefying.name=Vloeibaar Maken +gui.status.needs_carbon.name=Heeft Koolstof Nodig +gui.status.nogas.name=Geen Gas +gui.status.processing.name=Synthesizing ##NEEDS TRANSLATE## +gui.status.tankfull.name=Tank Vol +gui.status.tanksfull.name=Tanks vol +gui.telepad.desc.0=dit is de teleporter zijn$unieke Adres +gui.telepad.desc.1=adres van een andere teleporter.$wezens zullen er nartoe worden gestuurd. +gui.terraformer.desc.0=Water Tank +gui.water_bucket_slot.desc=Plaats water emmers hier +item.astro_miner.name=Astroïde Mijner +item.atmospheric_valve.name=atmosferische Klep +item.beam_core.name=Straal Kern +item.bucket_sludge.name=Bacteriele Modder Emmer +item.canister.gas.name=Gas +item.canister.liquid_argon.full.name=Gevulde Bus van Vloeibaar Argon +item.canister.liquid_argon.name=Vloeibaar #Korte Naam voor vloeibaar Argon Inhoud level +item.canister.liquid_argon.partial.name=Bus van Vloeibaar Argon +item.canister.liquid_nitrogen.full.name=Gevulde Bus van Vloeibaar Stikstof +item.canister.liquid_nitrogen.name=Vloeibaar +item.canister.liquid_nitrogen.partial.name=Bus van Vloeibaar Stikstof +item.canister.lox.full.name=Gevulde Bus van Vloeibaar Zuurstof +item.canister.lox.name=Vloeibaar Zuurstof +item.canister.lox.partial.name=Bus van Vloeibaar Zuurstof +item.carbon_fragments.name=Gefragmenteerde Koolstof +item.compressed_desh.name=Samengeperst Desh +item.compressed_titanium.name=Samengeperst Titanium +item.desh_axe.name=Desh Bijl +item.desh_boots.name=Desh Laarzen +item.desh_chestplate.name=Desh Kuras +item.desh_helmet.name=Desh Helm +item.desh_hoe.name=Desh Schoffel +item.desh_leggings.name=Desh Beenstukken +item.desh_pick.name=Desh Houweel +item.desh_pick_slime.description.name=Kan slijmeling eieren oogsten +item.desh_pick_slime.name=Kleverige Desh Houweel +item.desh_spade.name=Desh Schep +item.desh_stick.name=Desh Stok +item.desh_sword.name=Desh Zwaard +item.empty_gas_canister.name=Lege Gas Bus +item.engine_t2.name=Zware Raket Motor +item.fluid_manip.name=Vloeistof Manipulator +item.grapple.name=Werpanker +item.heavy_nose_cone.name=Zware Neuskegel +item.ingot_desh.name=Desh Staaf +item.ingot_titanium.name=Titanium Staaf +item.key.t2.name=Tier 2 Kerker Sleutel +item.methane_canister.name=Gevulde Methaan Gas Bus +item.methane_canister_partial.name=Methaan Gas Bus +item.orion_drive.name=Orion Aandrijving +item.raw_desh.name=Ongeraffineerde Desh +item.reinforced_plate_t2.name=Zware Beplating +item.reinforced_plate_t3.name=Zware Plaat +item.rocket_fins_t2.name=Zware Raket Vinnen +item.rocket_t2.cargo_rocket.name=Vracht Raket +item.rocket_t2.t2Rocket.name=Tier 2 Raket +item.rocket_t3.t3Rocket.name=Tier 3 Raket +item.shard_iron.name=Ijzeren Scherf +item.shard_titanium.name=Titanium Scherf +item.slimeling_cargo.name=Slimeling Inventaris Zak +item.thermal_boots.name=Thermische Aanpassing schoenen +item.thermal_chestplate.name=Thermische Aanpassing Kuras +item.thermal_cloth.name=Thermisch Doek +item.thermal_helm.name=Thermische Aanpassing Helm +item.thermal_leggings.name=Thermische Aanpassing Broek +item.tier2.desc=Tier 2 +item.tier3.desc=Tier 3 +item.titanium_axe.name=Titanium Bijl +item.titanium_boots.name=Titanium Schoenen +item.titanium_chestplate.name=Titanium Kuras +item.titanium_helmet.name=Titanium Helm +item.titanium_hoe.name=Titanium Schoffel +item.titanium_leggings.name=Titanium Broek +item.titanium_pickaxe.name=Titanium Houweel +item.titanium_shovel.name=Titanium Schep +item.titanium_sword.name=Titanium Zwaard +planet.asteroids=Asteroïden +planet.mars=Mars +schematic.astro_miner.name=Astroïde Mijner +schematic.cargo_rocket.name=Automatische Vracht Raket +schematic.rocket_t3.name=Tier 3 Raket +tile.asteroids_block.asteroid_rock_0.name=Asteroïde Steen +tile.asteroids_block.asteroid_rock_1.name=Asteroïde Steen +tile.asteroids_block.asteroid_rock_2.name=Asteroïde Steen +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminumerts +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmeniet Erts +tile.asteroids_block.ore_iron_asteroids.name=Ijzererts +tile.beam_receiver.description=Straal Ontvangers kan op een machine zijn invoer of uitvoer worden geplaats, om energie te vervoeren met stralen. +tile.beam_receiver.name=Straal Ontvangen +tile.beam_reflector.description=Straal Reflectors worden gebruikt om energie stralen van bron naar doel te sturen. Kan met de rechter-muisknop op worden geklikt om van doel te wisselen. +tile.beam_reflector.name=Straal Reflector +tile.cavern_vines.description=Grotten Lianen zijn Gevaarlijk Voor levende Wezens, je Word Verwikkeld en Omhoog Geslepen. +tile.cavern_vines.name=Grot Lianen +tile.creeper_egg.description=Creeper Eggs will spawn in Mars dungeons, spawning a sneaky predator upon exploding. ##NEEDS TRANSLATE## +tile.creeper_egg.name=Creeper Ei +tile.cryo_chamber.description=Cryogenic Chambers will allow a player to sleep during the day, healing a small amount of health, but has a cooldown. ##NEEDS TRANSLATE## +tile.dense_ice.name=Dicht Ijs +tile.electrolyzer.description=Transforms water into hydrogen (useful for the Methane Synthesizer) and oxygen. ##NEEDS TRANSLATE## +tile.gas_liquefier.description=Liquefies gases, either from the atmosphere or from canisters. Liquefied methane makes a good rocket fuel! ##NEEDS TRANSLATE## +tile.hydrogen_pipe.description=Hydrogen Pipe will transfer hydrogen from one machine's internal gas tank to another. ##NEEDS TRANSLATE## +tile.hydrogen_pipe.name=Waterstof Pijp +tile.launch_controller.description=Lanceer Controleurs Worden Gebruikt om het aanpassen van lanceer Gebruik, waaronder de lanceer criteria en de bestemming van Automatische Lanceringen +tile.mars.coppermars.name=Koper Erts +tile.mars.deshmars.name=Desh Erts +tile.mars.ironmars.name=Ijzererts +tile.mars.marscobblestone.name=Keisteen +tile.mars.marsdeco.name=Blok Van Desh +tile.mars.marsdirt.name=Mars Ondergrond Steen +tile.mars.marsdungeon.name=Kerker Muur +tile.mars.marsgrass.name=Mars Oppervlakte Steen +tile.mars.marsstone.name=Mars Steen +tile.mars.tinmars.name=Tin Erts +tile.mars_stairs_cobblestone.name=Mars Keistenen Treden +tile.mars_stairs_brick.name=Mars Kerker Steen Treden +tile.mars_machine.0.name=Terravormer +tile.mars_machine.1.name=Cryogene Kamer +tile.mars_machine.2.name=Lanceer Controleur +tile.mars_machine.4.name=Gas Condensor +tile.mars_machine.5.name=Methaan Synthesizer +tile.mars_machine.6.name=Water Electrolyzer ##NEEDS TRANSLATE## +tile.methane_synthesizer.description=With a source of hydrogen and a source of carbon, this manufactures Methane for further processing in a Gas Liquefier. ##NEEDS TRANSLATE## +tile.miner_base.description=De astroïde Mijner Basis is de aanmeringsplaats voor een astroïde Mijner. het is groot ... probeer een 2 x 2 x 2 Kubus te maken met deze blokken. +tile.miner_base.name=Astroïde Mijner Basis +tile.slab_gc_half.mars_bricks_slab.name=Mars Kerker Steen Plaat +tile.slab_gc_half.mars_slab.name=Mars Keistenen Plaat +tile.slimeling_egg.blue.name=Blauw Slimeling Ei +tile.slimeling_egg.description=Slimeling Eggs, once cracked with a player's bare hands, will soon hatch into a pet. ##NEEDS TRANSLATE## +tile.slimeling_egg.red.name=Rood Slimeling Ei +tile.slimeling_egg.yellow.name=Geel Slimeling Ei +tile.sludge.name=Bacteriele Modder +tile.telepad_short.description=Kleine Bereik Teleporters worden gebruikt om spelers en andere levende wezens kleine afstanden (250 Blokken) naar gelinkte teleporters te teleporteren. +tile.telepad_short.name=Klein Bereik Teleporter +tile.terraformer.description=Terraformers are used to add some greenery to distant planets, adding grass, trees and water when given the correct materials. ##NEEDS TRANSLATE## +tile.treasure_t2.description=Tier 2 Schatkist Zullen Genereren in Mars Kerkers. Je kunt ze openen als je de Eindbaas heb Verslagen. +tile.treasure_t2.name=Tier 2 Schatkist +tile.treasure_t3.description=Tier 3 Schatkisten zijn op dit moment ongebruikt. +tile.treasure_t3.name=Tier 3 Schatkist +tile.walkway.walkway.description=Loopbruggen worden gebruikt voor decoratieve doeleinden, je kan het gebruiken om blokken te verbinden. +tile.walkway.walkway.name=Passage +tile.walkway.walkway_pipe.description=Zuurstof bepijpte loopbruggen worden gebruikt om pijpen onder een volledig solide oppervlakte te hebben. +tile.walkway.walkway_pipe.name=Passage +tile.walkway.walkway_wire.description=Aluminium bedrade Loopbruggen worden gebruikt om draden onder een volledig solide oppervlakte te hebben. +tile.walkway.walkway_wire.name=Passage +tile.wall_gc.mars.name=Mars Keistenen Muur +tile.wall_gc.mars_bricks.name=Mars Kerker Steen diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pl_pl.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pl_pl.lang new file mode 100644 index 00000000..01452737 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pl_pl.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=Skonstruuj hak chwytak +checklist.equip_shield_controller.key=Wyekwipuj kontroler tarczy +checklist.thermal_padding.key=Wyekwipuj strój termalny +checklist.thermal_padding_t2.key=Wyekwipuj strój termalny poziomu 2 +container.crashed_probe.name=Rozbita sąda +container.entry_pod.name=Lądownik +container.geothermal_generator.name=Generator geotermalny +container.launchcontroller.name=Kontroler startu +container.mars_lander.name=Balony lądownicze +container.solar_array_controller.name=Kontroler szeregu słonecznego +container.short_range_telepad.name=Krótko-dystansowy teleporter +container.slimeling_inventory.name=Ekwipunek szlamelinga +container.tile_terraformer.name=Terraformator +dimension.mars.name=Mars +entity.astro_miner.name=Astro Kopacz +entity.creeper_boss.name=Wyewoluowany Boss creeper +entity.entry_pod.name=Lądownik +entity.entry_pod_venus.name=Lądownik na Wenus +entity.grapple_hook.name=Hak chwytak +entity.juicer.name=Moczek +entity.landing_balloons.name=Balony lądownicze +entity.projectile_tnt.name=Pocisk TNT +entity.rocket_cargo.name=Rakieta transportowa +entity.rocket_t2.name=Rakieta poziomu 2 +entity.rocket_t3.name=Rakieta poziomu 3 +entity.slimeling.name=Szlameling +entity.sludgeling.name=Osadeling +entity.small_asteroid.name=Mała asteroida +entity.spider_queen.name=Królowa pająków +entity.web_shot.name=Strzał sieci +fluid.argon=Argon (Gaz) +fluid.atmosphericgases=Gazy atmosferyczne +fluid.bacterialsludge=Osad bakteryjny +fluid.carbondioxide=CO2 (Gaz) +fluid.fuel=Paliwo +fluid.helium=Hel (Gaz) +fluid.hydrogen=Wodór (Gaz) +fluid.liquidargon=Płynny Argon +fluid.liquidmethane=Płynny Metan +fluid.liquidnitrogen=Płynny Azot +fluid.liquidoxygen=Płynny Tlen +fluid.methane=Metan (Gaz) +fluid.nitrogen=Azot (Gaz) +fluid.oil=Ropa +fluid.oxygen=Tlen (Gaz) +fluid.sulphuricacid=Kwas siarkowy +gas.carbondioxide.name=Dwutlenek węgla +gas.nitrogen.name=Azot +gas.oxygen.name=Tlen +gc.configgui.astro_miners_max=Maksymalna liczba Astro Kopaczy na gracza +gc.configgui.dimension_id_asteroids=ID wymiaru Asteroidy +gc.configgui.dimension_id_mars=ID wymiaru Mars +gc.configgui.dimension_id_venus=ID wymiaru Wenus +gc.configgui.disable_aluminum_gen_asteroids=Wyłącz generowanie rudy aluminium (Asteroidy) +gc.configgui.disable_ambient_lightning=Wyłącz pioruny (Wenus) +gc.configgui.disable_copper_gen_mars=Wyłącz generowanie rudy miedzi (Mars) +gc.configgui.disable_desh_gen_mars=Wyłącz generowanie rudy deszu (Mars) +gc.configgui.disable_galacticraft_helium=Wyłącz rejestracje gazu Helu +gc.configgui.disable_small_asteroids=Wyłącz spawnowanie małych asteroidów (Asteroidy) +gc.configgui.disable_ilmenite_gen_asteroids=Wyłącz generowanie rudy ilmenitu (Asteroidy) +gc.configgui.disable_iron_gen_asteroids=Wyłącz generowanie rudy żelaza (Asteroidy) +gc.configgui.disable_iron_gen_mars=Wyłącz generowanie rudy żelaza (Mars) +gc.configgui.disable_tin_gen_mars=Wyłącz generowanie rudy cyny (Mars) +gc.configgui.disable_venus_aluminum_gen=Wyłącz generowanie rudy aluminium (Wenus) +gc.configgui.disable_venus_copper_gen=Wyłącz generowanie rudy miedzi (Wenus) +gc.configgui.disable_venus_galena_gen=Wyłącz generowanie rudy galeny (Wenus) +gc.configgui.disable_venus_quartz_gen=Wyłącz generowanie rudy kwarcu (Wenus) +gc.configgui.disable_venus_silicon_gen=Wyłącz generowanie rudy silikonu (Wenus) +gc.configgui.disable_venus_solar_gen=Wyłącz generowanie rudy słonecznej (Wenus) +gc.configgui.disable_venus_tin_gen=Wyłącz generowanie rudy cyny (Wenus) +gc.configgui.id_schematic_cargo_rocket=ID schematu rakiety transportowej +gc.configgui.id_schematic_rocket_t2=ID schematu rakiety poziomu 2 +gc.configgui.id_schematic_rocket_t3=ID schematu rakiety poziomu 3 +gc.configgui.launch_controller_all_dims=Kontroler startu we wszystkich wymiarach +gc.configgui.launch_controller_chunk_load=Ładowanie chunków kontrolera startu +gc.configgui.planets.title=Konfiguracja planet Galacticraft +gui.button.add_blacklist.name=Czarna lista +gui.button.add_entity.name=Dodaj byt +gui.button.add_player.name=Dodaj gracza +gui.button.add_whitelist.name=Biała lista +gui.button.edit_blacklist.name=Edytuj czarną listę +gui.button.edit_priority.name=Edytuj priorytet +gui.button.edit_whitelist.name=Edytuj białą listę +gui.button.liquefy.name=Aktywuj +gui.button.liquefy_stop.name=Zatrzymaj +gui.button.never_fire_team.name=Nigdy nie strzelaj w drużynę wyścigu kosmicznego +gui.button.recall.name=Przyzwij +gui.button.remove_selected.name=Usuń Wybrane +gui.carbon_slot.desc.0=Można tu wstawić sfragmentowany węgiel +gui.cargorocket.status.launched.0=Rakieta już +gui.cargorocket.status.launched.1=wystartowała +gui.cargorocket.status.waiting.0=Czekanie na +gui.cargorocket.status.waiting.1=zapłon +gui.choose_planet.desc.mars=Zdatny do zamieszkania#Brak Tlenu#Grawitacja: 38% +gui.cryogenic.chat.cant_use=Nie mogę tego użyć przez następne %d sekundy +gui.gas_input.desc.0=Spróbuj wstawić tutaj$kanister metanu. +gui.gas_input.desc.1=(Alternatywnie możesz użyć,$zaworu atmosferycznego) +gui.gas_tank.desc.0=Zbiornik gazu +gui.gas_tank_compressed.desc.0=Zbiornik gazu (Skompresowany) +gui.hydrogen_input.desc.0=Slot na zbiornik wodoru +gui.hydrogen_input.desc.1=lub zawór atmosferyczny +gui.launch_controller.advanced=Zaawansowane +gui.launch_controller.desc.0=To jest unikalna częstotliwość$kontrolera startu +gui.launch_controller.desc.1=Częstotliwość do której mają lecieć rakiety +gui.launch_controller.desc.2=Czy platforma startowa ma zostać$usunięta przy starcie +gui.launch_controller.desc.3=Gdy podane kryteria zostaną spełnione,$rakieta wystartuje +gui.launch_controller.desc.4=Ukryj częstotliwość docelową$przed innymi graczami +gui.launch_controller.owner=Właściciel +gui.liquid_output.desc.2=lub zbiornikiem ze skroplonym gazem +gui.liquid_tank.desc.0=Zbiornik cieczy +gui.message.address.name=Adres +gui.message.astro_miner.fail=Ta stacja ma już Astro Kopacza! +gui.message.astro_miner1.fail=Miejsce dokujące jest blokowane przez: +gui.message.astro_miner1_a.fail=Trasa Astro Kopacza jest blokowana przez: +gui.message.astro_miner1_b.fail=Strefa chroniona! +gui.message.astro_miner2.fail=To o jednego Astro Kopacza za wiele! +gui.message.astro_miner3.fail=Stacja Astro Kopacza została usunięta! +gui.message.astro_miner4.fail=Astro Kopaczowi skończyła się energia i nie może wrócić do stacji! +gui.message.astro_miner5.fail=Trasa Astro Kopacza do stacji wygląda na zblokowaną! +gui.message.astro_miner6.fail=Astro Kopacz ukończył wydobywanie obszaru, i teraz zakończy swą pracę! +gui.message.astro_miner7.fail=Astro Kopacz nie ma czego wydobywać na stacji kosmicznej! +gui.message.astro_miner8.fail=Wykryto drugiego Astro Kopacza w tej samej stacji, wstrzymano pierwszego Kopacza. +gui.message.blacklist_mode.name=Tryb czarnej listy +gui.message.bubble_exp.name=Rozszerzanie bańki +gui.message.cargo_full.name=Magazyn jest pełny +gui.message.cargo_unloaded.name=Magazyn jest pusty +gui.message.connected_solar_controller.name=%d przymocowanych (zasięg 16 bloków) +gui.message.dest_address.name=Adres docelowy +gui.message.dest_frequency.name=Częstotliwość docelowa +gui.message.enable_grass.name=Aktywuj trawę +gui.message.enable_trees.name=Aktywuj drzewa +gui.message.enter_entity.name=Podaj nazwę/id bytu +gui.message.enter_player.name=Podaj nazwę gracza +gui.message.frequency.name=Częstotliwość +gui.message.fully_fueled.name=W pełni zatankowany +gui.message.grapple.fail=Potrzebuję trochę nici żeby wystrzelić chwytak! +gui.message.grass.name=Trawę +gui.message.instant.name=Natychmiast +gui.message.invalid_address.name=Niewłaściwy unikalny adres +gui.message.invalid_freq.name=Nieodpowiednia częstotliwość +gui.message.invalid_target_address.name=Niewłaściwy adres docelowy +gui.message.launch_when.name=Wystartuj gdy +gui.message.low_energy.name=Mało energii +gui.message.low_energy_output.name=Mało produkcji energii +gui.message.no_bonemeal.name=Za mało mączki kostnej +gui.message.no_energy.name=Brak energii! +gui.message.no_saplings.name=Za mało sadzonek +gui.message.no_seeds.name=Za mało nasion +gui.message.no_valid_blocks.name=Brak odpowiednich bloków w bańce +gui.message.no_water.name=Za mało wody +gui.message.not_enough.name=Nie wystarczające +gui.message.not_enough_energy.name=Za mało energii! +gui.message.not_set.name=Nie ustawione +gui.message.one_min.name=1 minuta +gui.message.player.name=Gracz +gui.message.priority_closest.name=Najbliższy +gui.message.priority_health_high.name=Najwięcej zdrowia +gui.message.priority_health_low.name=Najmniej zdrowia +gui.message.priority_low.name=Priorytet (Najniższy wpierw) +gui.message.receiving_active.name=Odbiór aktywny +gui.message.redstone_sig.name=Sygnał czerwonego kamienia +gui.message.remove_pad.name=Usuń platforme przy starcie +gui.message.sending_active.name=Wysyłanie aktywne +gui.message.success.name=Sukces +gui.message.target_meteors.name=Celuj w meteory +gui.message.target_no_energy.name=Cal ma za mało energii! +gui.message.telepad_not_found.name=Nie znaleziono teleportera! +gui.message.telepad_too_far.name=Cel jest za daleko! (Maksymalnie %d) +gui.message.telepad_wrong_dim.name=Cel jest w niewłaściwym wymiarze! +gui.message.telepad_target_disabled.name=Cel jest wyłączony +gui.message.ten_sec.name=10 sekund +gui.message.terraforming.name=Terraformowanie +gui.message.thirty_sec.name=30 sekund +gui.message.trees.name=Drzewa +gui.message.with_atmosphere0.name=na planecie bogatą w +gui.message.with_atmosphere1.name=w atmosferze +gui.message.zero_water.name=Brak wody! +gui.methane_output.desc.2=ze zbiornika z metanem +gui.miner.docked=W doku +gui.miner.docking=Dokuje +gui.miner.mined=Wydobyty +gui.miner.mining=Wydobywa +gui.miner.offline=Nieaktywny +gui.miner.out_of_range=Za daleko +gui.miner.returning=Powraca +gui.miner.stuck=Zatrzymany na: +gui.miner.travelling=Podróżuje +gui.slimeling.button.follow=Podążaj +gui.slimeling.button.sit=Siedź +gui.slimeling.chat.wrong_player=To nie jest mój szlameling! +gui.slimeling.damage=Obrażenia +gui.slimeling.following=Podąża +gui.slimeling.food=Ulubione jedzenie +gui.slimeling.kills=Zabójstwa +gui.slimeling.name=Nazwa +gui.slimeling.owner=Właściciel +gui.slimeling.scale=Wielkość +gui.slimeling.sitting=Siedzi +gui.status.invalid_spout_1.name=Musi zostać postawiony na +gui.status.invalid_spout_2.name=odpowiednim gejzerze siarkowym +gui.status.liquefying.name=Skraplanie +gui.status.needs_carbon.name=Potrzeba węgla +gui.status.nogas.name=Brak gazu +gui.status.processing.name=Syntezowanie +gui.status.tankfull.name=Zbiornik pełny +gui.status.tanksfull.name=Zbiorniki pełne +gui.telepad.desc.0=To jest unikalny adres$teleportera. +gui.telepad.desc.1=Adres innego teleportera.$Istoty będą tam wysyłane. +gui.terraformer.desc.0=Zbiornik wody +gui.water_bucket_slot.desc=Wstaw tutaj wiadra wody +item.astro_miner.name=Astro Kopacz +item.atmospheric_valve.name=Zawór atmosferyczny +item.atomic_battery.name=Bateria jądrowa +item.beam_core.name=Rdzeń promienia +item.bucket_sludge.name=Wiadro osadu bakteryjnego +item.bucket_sulphuric_acid.name=Wiadro kwasu siarkowego +item.canister.gas.name=Gaz #skrót dla poziomu zawartości gazu metanu +item.canister.liquid_argon.full.name=Pełny kanister płynnego argonu +item.canister.liquid_argon.name=Płyn #skrót dla poziomu zawartości płynnego azotu +item.canister.liquid_argon.partial.name=Kanister płynnego argonu +item.canister.liquid_nitrogen.full.name=Pełny kanister płynnego azotu +item.canister.liquid_nitrogen.name=Płyn #skrót dla poziomu zawartości płynnego azotu +item.canister.liquid_nitrogen.partial.name=Kanister płynnego azotu +item.canister.lox.full.name=Pełny kanister płynnego tlenu +item.canister.lox.name=PŁT #skrót dla poziomu zawartości płynnego tlenu +item.canister.lox.partial.name=Kanister płynnego tlenu +item.carbon_fragments.name=Sfragmentowany węgiel +item.compressed_desh.name=Skompresowany desz +item.compressed_titanium.name=Skompresowany tytan +item.desh_axe.name=Deszowa siekiera +item.desh_boots.name=Deszowe buty +item.desh_chestplate.name=Deszowy napierśnik +item.desh_helmet.name=Deszowy hełm +item.desh_hoe.name=Deszowa motyka +item.desh_leggings.name=Deszowe nogawice +item.desh_pick.name=Deszowy kilof +item.desh_pick_slime.description.name=Może zbierać jaja creeperów +item.desh_pick_slime.name=Lepki deszowy kilof +item.desh_spade.name=Deszowa łopata +item.desh_stick.name=Deszowy patyk +item.desh_sword.name=Deszowy miecz +item.dust_titanium.name=Titanium Dust +item.empty_gas_canister.name=Pusty kanister na gaz +item.engine_t2.name=Ciężki silnik rakietowy +item.fluid_manip.name=Manipulator płynów +item.grapple.name=Hak chwytak +item.heavy_nose_cone.name=Ciężka głowica statku +item.ingot_desh.name=Sztabka deszu +item.ingot_titanium.name=Sztabka tytanu +item.ingot_lead.name=Sztabka ołowiu +item.key.t2.name=Klucz Lochu poziomu 2 +item.key.t3.name=Klucz Lochu poziomu 3 +item.methane_canister.name=Pełny kanister metanu (Gaz) +item.methane_canister_partial.name=Kanister metanu (Gaz) +item.orion_drive.name=Silnik rudojonowy +item.prelaunch_checklist.name=Lista przedstartowa +item.radioisotope_core.name=Rdzeń radioizotopowy +item.raw_desh.name=Nieprzetworzony desz +item.reinforced_plate_t2.name=Wzmocniona płyta pancerzowa +item.reinforced_plate_t3.name=Wzmocniona płyta pancerzowa +item.rocket_fins_t2.name=Ciężkie stateczniki rakiety +item.rocket_t2.cargo_rocket.name=Rakieta transportowa +item.rocket_t2.t2Rocket.name=Rakieta poziomu 2 +item.rocket_t3.t3Rocket.name=Rakieta poziomu 3 +item.shard_iron.name=Odłamek żelaza +item.shard_titanium.name=Odłamek tytanu +item.shield_controller.description=Kontroler tarczy ochrania zbroję przed WSZELKĄ formą obrażeń - razem z korozją atmosferyczną! +item.shield_controller.name=Kontroler tarczy +item.slimeling_cargo.name=Torba ekwipunkowa szlamelinga +item.solar_dust.name=Pył słoneczny +item.solar_module_2.name=Panel szeregu słonecznego +item.strange_seed.name=Dziwaczne nasiono +item.thermal_boots.name=Wyściółka termalna butów +item.thermal_boots_t2.name=Izotermiczne buty +item.thermal_chestplate.name=Wyściółka termalna napierśnika +item.thermal_chestplate_t2.name=Izotermalny napierśnik +item.thermal_cloth.name=Tkanina termalna +item.thermal_fabric.name=Materiał izotermiczny +item.thermal_helm.name=Wyściółka termalna hełmu +item.thermal_helm_t2.name=Hełm izotermiczny +item.thermal_leggings.name=Wyściółka termalna nogawic +item.thermal_leggings_t2.name=Nogawice izotermiczne +item.thin_solar_wafer.name=Płyta szeregu słonecznego +item.tier2.desc=Poziom 2 +item.tier3.desc=Poziom 3 +item.titanium_axe.name=Tytanowa siekiera +item.titanium_boots.name=Tytanowe buty +item.titanium_chestplate.name=Tytanowy napierśnik +item.titanium_helmet.name=Tytanowy hełm +item.titanium_hoe.name=Tytanowa motyka +item.titanium_leggings.name=Tytanowe nogawice +item.titanium_pickaxe.name=Tytanowy kilof +item.titanium_shovel.name=Tytanowa łopata +item.titanium_sword.name=Tytanowy miecz +item.volcanic_pickaxe.description=Wykopuje obszar 3x3 zależnie w jaki spoglądasz kierunek +item.volcanic_pickaxe.name=Wulkaniczny kilof +planet.asteroids=Asteroidy +planet.mars=Mars +schematic.astro_miner.name=Astro Kopacz +schematic.cargo_rocket.name=Automatyczna rakieta transportowa +schematic.rocket_t3.name=Rakieta poziomu 3 +tile.asteroids_block.asteroid_rock_0.name=Kamień meteorytowy +tile.asteroids_block.asteroid_rock_1.name=Kamień meteorytowy +tile.asteroids_block.asteroid_rock_2.name=Kamień meteorytowy +tile.asteroids_block.ore_aluminum_asteroids.name=Ruda aluminium +tile.asteroids_block.ore_ilmenite_asteroids.name=Ruda ilmenitu +tile.asteroids_block.ore_iron_asteroids.name=Ruda żelaza +tile.asteroids_block.asteroid_deco.name=Ciemny dekoracyjny blok +tile.asteroids_block.titanium_block.name=Blok tytanu +tile.beam_receiver.description=Odbiorniki promienia są wykorzystywane jako wejście i wyjście dla maszyn, by przenieść energię używając promienia. +tile.beam_receiver.name=Odbiornik energii promienia +tile.beam_reflector.description=Reflektory promienia są wykorzystywane do przekierowywania promieni energii z źródła do celu. Wciśnij prawy przycisk myszy by zmienić cel. +tile.beam_reflector.name=Reflektor energii promienia +tile.cavern_vines.description=Trujące pnącza są niebiezpieczne dla żywych istot, oplatają ofiarę i wciągają ją w górę. +tile.cavern_vines.name=Trujące pnącza +tile.crashed_probe.name=Rozbita sąda +tile.creeper_egg.description=Jaja creepera powstają w marsowych Lochach, tworzą cichego wroga w przypadku eksplozji. +tile.creeper_egg.name=Jajo creepera +tile.cryo_chamber.description=Komora kriogeniczna pozwala graczowi spać podczas dnia, lecząc przy okazji trochę zdrowia, ale trzeba poczekać przed następnym użyciem. +tile.dense_ice.name=Zbity lód +tile.electrolyzer.description=Przemienia wodę na wodór (przydatne w syntezatorze metanu) i tlen. +tile.gas_liquefier.description=Skrapla gazy, zarówno z atmosfery jak i z kanistrów. Skroplony metan jest świetnym paliwem rakietowym! +tile.geothermal_generator.description=Przy postawieniu na odpowiednim gejzerze pary siarkowej, generuje energię w oscylującym tempie +tile.geothermal_generator.name=Generator geotermalny +tile.hydrogen_pipe.description=Rura wodorowa przenosi wodór ze zbiornika jednej maszyny do drugiej. +tile.hydrogen_pipe.name=Rura wodorowa +tile.launch_controller.description=Kontrolery startu są wykorzystywane do dostosowywania warunków startu, wliczając kryteria wymagane do startu i wybór celu lądowania (Platformy startowe). +tile.laser_turret.name=Działko laserowe +tile.laser_turret.description=Może wycelowywać w meteory, graczy, i potwory +tile.mars.coppermars.name=Ruda miedzi +tile.mars.deshmars.name=Ruda deszu +tile.mars.ironmars.name=Ruda żelaza +tile.mars.marscobblestone.name=Marsowy bruk +tile.mars.marsdeco.name=Blok deszu +tile.mars.marsdirt.name=Marsowy podpowierzchniowy kamień +tile.mars.marsdungeon.name=Cegły marsowego Lochu +tile.mars.marsgrass.name=Marsowy wygładzony podpowierzchniowy kamień +tile.mars.marsstone.name=Marsowy kamień +tile.mars.tinmars.name=Ruda cyny +tile.mars_machine.0.name=Terraformator +tile.mars_machine.1.name=Komora kriogeniczna +tile.mars_machine.2.name=Kontroler startu +tile.mars_machine.4.name=Skraplacz gazu +tile.mars_machine.5.name=Syntezator metanu +tile.mars_machine.6.name=Elektrolizer wody +tile.mars_stairs_brick.name=Schody marsowego Lochu +tile.mars_stairs_cobblestone.name=Marsowe brukowe schody +tile.methane_synthesizer.description=Ze źródłem wodoru i węgla, syntezator metanu łączy oba pierwiastki tworząc metan przeznaczony do dalszej obróbki w skraplaczu gazu. +tile.miner_base.description=Stacja Astro Kopacza jest miejscem dokowania dla Astro Kopacza. Jest duża ... Ustaw bloki do wymiarów 2 x 2 x 2 aby ją stworzyć. +tile.miner_base.name=Stacja Astro Kopacza +tile.miner_base_full.name=Stacja Astro Kopacza +tile.slab_gc_half.mars_bricks_slab.name=Ceglana płyta marsowego Lochu +tile.slab_gc_half.mars_slab.name=Marsowa brukowa płyta +tile.slab_gc_half.asteroids_slab.name=Ciemna dekoracyjna płyta +tile.slimeling_egg.blue.name=Jajo niebieskiego szlamelinga +tile.slimeling_egg.description=Jaja szlamelingów, uderzone raz przez pięść gracza, wyklują się w zwierzaka. +tile.slimeling_egg.red.name=Jajo czerwonego szlemelinga +tile.slimeling_egg.yellow.name=Jajo żółtego szlamelinga +tile.sludge.name=Osad bakteryjny +tile.solar_array_controller.name=Kontroler szeregu słonecznego +tile.solar_array_controller.description=Podłącz moduły szeregu słonecznego do tego bloku by przekazać energię. Najbardziej efektywny na stacjach kosmicznych. +tile.solar_array_module.name=Moduł szeregu słonecznego +tile.solar_array_module.description=Podłącz pare bloków tego typu do kontrolera szeregu słonecznego by przekazać energię. Najbardziej efektywny na stacjach kosmicznych. +tile.spout.name=Gejzer pary +tile.sulphuric_acid.name=Kwas siarkowy +tile.telepad_short.description=Krótko-dystansowe teleportery są wykorzystywane do teleportacji gracza i innych żyjących istnień na krótki dystans (250 bloków) gdy są połączone z innym teleporterem. +tile.telepad_short.name=Krótko-dystansowy teleporter +tile.terraformer.description=Terraformatory wykorzystywane są by dodać trochę zieleni na odległych planetach, dodając trawę, drzewa i wodę gdy dostarczone im są odpowiednie materiały. +tile.treasure_t2.description=Skrzynie skarbów poziomu 2 są generowane w marsowych Lochach. Można je otworzyć po pokonaniu finałowego Bossa. +tile.treasure_t2.name=Skrzynia skarbów poziomu 2 +tile.treasure_t3.description=Skrzynie skarbów poziomu 3 są generowane w wenusowych Lochach. Można je otworzyć po pokonaniu finałowego Bossa. +tile.treasure_t3.name=Skrzynia skarbów poziomu 3 +tile.venus.dungeon_brick_venus_1.name=Cegły wenusowego Lochu I +tile.venus.dungeon_brick_venus_2.name=Cegły wenusowego Lochu II +tile.venus.venus_ore_aluminum.name=Ruda aluminium +tile.venus.venus_ore_copper.name=Ruda miedzi +tile.venus.venus_ore_galena.name=Ruda galeny +tile.venus.venus_ore_quartz.name=Ruda kwarcu +tile.venus.venus_ore_silicon.name=Ruda silikonu +tile.venus.venus_ore_solar.name=Ruda słoneczna +tile.venus.venus_ore_tin.name=Ruda cyny +tile.venus.venus_rock_0.name=Miękki wenusowy kamień +tile.venus.venus_rock_1.name=Twardy wenusowy kamień +tile.venus.venus_rock_2.name=Wulkaniczny wenusowy kamień +tile.venus.venus_rock_3.name=Pumeks +tile.venus.lead_block.name=Blok ołowiu +tile.venus_rock_scorched.name=Przypalony wenusowy kamień +tile.walkway.walkway.description=Chodniki są używane do dekoracji, oraz do łączenia bloków zachowując miejsce oraz motyw kosmiczny. +tile.walkway.walkway.name=Chodnik +tile.walkway.walkway_pipe.description=Chodniki z rurą na ciecze są używane do prowadzenia rur pod powierzchnią do chodzenia. +tile.walkway.walkway_pipe.name=Chodnik +tile.walkway.walkway_wire.description=Chodniki z kablem aluminiowym są używane do prowadzenia kabli pod powierzchnią do chodzenia. +tile.walkway.walkway_wire.name=Chodnik +tile.wall_gc.mars.name=Marsowy brukowy murek +tile.wall_gc.mars_bricks.name=Murek z marsowego Lochu +tile.web_torch.web_torch_0.name=Pajęczynowa sieć +tile.web_torch.web_torch_1.description=Pochodnia jasnogłazowa +tile.web_torch.web_torch_1.name=Pajęczynowa sieć +achievement.mars=Na Marsa! +achievement.mars.desc=Zabierz rakietę poziomu 2 na Marsa! +achievement.asteroids=Na Pas Asteroid +achievement.asteroids.desc=Zabierz rakietę poziomu 3 na Pas Asteroid! +achievement.venus=Na Wenus! +achievement.venus.desc=Zabierz rakietę poziomu 3 na Wenus! diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_br.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_br.lang new file mode 100644 index 00000000..8ee51aeb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_br.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Cápsula de Entrada +container.launchcontroller.name=Controle de Lançamento +container.mars_lander.name=Balões de Aterrissagem +container.short_range_telepad.name=Telebase de Curto Alcance +container.tile_terraformer.name=Terraformador +dimension.mars.name=Marte +entity.astro_miner.name=Astrominerador +entity.creeper_boss.name=Creeper-Chefe Evoluído +entity.entry_pod.name=Cápsula de Entrada +entity.grapple_hook.name=Gancho +entity.landing_balloons.name=Balões de Aterrissagem +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Foguete de Carga +entity.rocket_t2.name=Foguete Nível 2 +entity.rocket_t3.name=Foguete Nível 3 +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Asteroides Menores +fluid.argon=Gás Argônio +fluid.atmosphericgases=Gases Atmosféricos +fluid.bacterialsludge=Lodo Bacterial +fluid.carbondioxide=Gás Carbónico +fluid.fuel=Combustível +fluid.helium=Gás Hélio +fluid.hydrogen=Gás Hidrogênio +fluid.liquidargon=Argônio Líquido +fluid.liquidmethane=Metano Líquido +fluid.liquidnitrogen=Nitrogênio Líquido +fluid.liquidoxygen=Oxigênio Líquido +fluid.methane=Gás Metano +fluid.nitrogen=Gás Nitrogênio +fluid.oxygen=Gás Oxigênio +gas.carbondioxide.name=Gás Carbônico +gas.nitrogen.name=Nitrogênio +gas.oxygen.name=Oxigônio +gc.configgui.astro_miners_max=No. máximo de Astromineradores por jogador +gc.configgui.dimension_id_asteroids=ID da dimensão Asteroides +gc.configgui.dimension_id_mars=ID da dimensão Marte +gc.configgui.disable_galacticraft_helium=Desabilitar registro de gás hélio +gc.configgui.id_schematic_cargo_rocket=ID do Esquemático do Foguete de Carga +gc.configgui.id_schematic_rocket_t2=ID do Esquemático do Foguete Nível 2 +gc.configgui.id_schematic_rocket_t3=ID do Esquemático do Foguete Nível 3 +gc.configgui.launch_controller_all_dims=Controle de Lançamento para todas as dimensões +gc.configgui.launch_controller_chunk_load=Chunkloading do Controle de Lançamento +gc.configgui.planets.title=Configuração Galacticraft Planets +gui.button.liquefy.name=Processar +gui.button.liquefy_stop.name=Parar +gui.button.recall.name=Retornar +gui.carbon_slot.desc.0=Carbono Fragmentado pode ir aqui +gui.cargorocket.status.launched.0=Pronto +gui.cargorocket.status.launched.1=Lançado +gui.cargorocket.status.waiting.0=Esperando por +gui.cargorocket.status.waiting.1=ignição +gui.choose_planet.desc.mars=Habitável#Sem Oxigênio#Gravidade: 38% +gui.cryogenic.chat.cant_use=Não posso usar isso pelos próximos %d segundos +gui.gas_input.desc.0=Experimente colocar uma$Lata de Gás Metano aqui +gui.gas_input.desc.1=(Ou talvez, uma Válvula$Atmosférica) +gui.gas_tank.desc.0=Armazenamento de Gás +gui.gas_tank_compressed.desc.0=Armazenamento de Gás (Comprimido) +gui.hydrogen_input.desc.0=Aqui vai um tanque de hidrogênio +gui.hydrogen_input.desc.1=ou uma Válvula Atmosférica +gui.launch_controller.desc.0=Este é a frequência única do$Controle de Lançamento +gui.launch_controller.desc.1=Frequência para qual foguetes serão lançados +gui.launch_controller.desc.2=Se a base de lançamento deve ser$removida no lançamento +gui.launch_controller.desc.3=Quando esse critério for cumprido,$lançar foguete +gui.launch_controller.desc.4=Esconder frequência de destino$de outros jogadores +gui.liquid_output.desc.2=tanque de gás liquefeito +gui.liquid_tank.desc.0=Tanque de líquidos +gui.message.address.name=Endereço +gui.message.astro_miner.fail=Esta base já tem um Astrominerador! +gui.message.astro_miner1.fail=A área de acoplamento está bloqueada por: +gui.message.astro_miner1_a.fail=A rota Astrominerador está bloqueada por: +gui.message.astro_miner2.fail=Já há Astromineradores demais! +gui.message.astro_miner3.fail=A base do Astrominerador foi removido! +gui.message.astro_miner4.fail=O Astrominerador ficou sem energia e não pode voltar à base! +gui.message.astro_miner5.fail=A rota do Astrominerador para sua base parece estar bloqueada! +gui.message.astro_miner6.fail=O Astrominerador terminou a mineração na área, e agora vai parar! +gui.message.astro_miner7.fail=Não há nada para um Astrominerador minerar em uma estação espacial! +gui.message.astro_miner8.fail=Um segundo Astrominerador foi detectado na mesma base, o primeiro então irá ser paralizado. +gui.message.bubble_exp.name=Bolha expandindo +gui.message.cargo_full.name=Carga Cheia +gui.message.cargo_unloaded.name=Carga Vazia +gui.message.dest_address.name=Endereço-Destino +gui.message.dest_frequency.name=Destino +gui.message.enable_grass.name=Habilitar Grama +gui.message.enable_trees.name=Habilitar Árvores +gui.message.frequency.name=Frequência +gui.message.fully_fueled.name=100% Abastecido +gui.message.grapple.fail=Vou precisar de alguma linha se eu quero jogar esse Gancho! +gui.message.grass.name=Grama +gui.message.instant.name=Imediatamente +gui.message.invalid_address.name=Endereço Único Inválido +gui.message.invalid_freq.name=Frequência Inválida +gui.message.invalid_target_address.name=Endereço-Destino Inválido +gui.message.launch_when.name=Lançar qdo. +gui.message.low_energy.name=Pouca energia +gui.message.no_bonemeal.name=Farinha de Osso Insuficiente +gui.message.no_energy.name=Energia Insuficiente +gui.message.no_saplings.name=Mudas Insuficientes +gui.message.no_seeds.name=Sementes Insuficientes +gui.message.no_valid_blocks.name=Sem blocos válidos na bolha +gui.message.no_water.name=Água Insuficiente +gui.message.not_enough.name=Insuficiente +gui.message.not_enough_energy.name=Energia Insuficiente! +gui.message.not_set.name=Não Definido +gui.message.one_min.name=1 Minuto +gui.message.receiving_active.name=Recebimento Ativo +gui.message.redstone_sig.name=Sinal de Redstone +gui.message.remove_pad.name=Remover Base +gui.message.sending_active.name=Envio Ativo +gui.message.success.name=Sucesso +gui.message.target_no_energy.name=Destino não tem energia suficiente! +gui.message.telepad_not_found.name=Telebase Não Encontrada! +gui.message.telepad_too_far.name=Destino longe demais! (Máx %d) +gui.message.telepad_wrong_dim.name=Destino está numa dimensão errada! +gui.message.ten_sec.name=10 Segundos +gui.message.terraforming.name=Terraformando +gui.message.thirty_sec.name=30 Segundos +gui.message.trees.name=Árvores +gui.message.with_atmosphere0.name=em um planeta abundante em +gui.message.with_atmosphere1.name=na atmosfera +gui.message.zero_water.name=Sem água! +gui.methane_output.desc.2=tanque de metano +gui.miner.docked=Estacionado +gui.miner.docking=Estacionando +gui.miner.mined=Minerado +gui.miner.mining=Minerar +gui.miner.offline=Desconectado +gui.miner.out_of_range=Fora de alcance +gui.miner.returning=Retornando +gui.miner.stuck=Preso em: +gui.miner.travelling=Viajando +gui.slimeling.button.follow=Seguir +gui.slimeling.button.sit=Sentar +gui.slimeling.chat.wrong_player=Este não é meu Slimeling! +gui.slimeling.damage=Força de ataque +gui.slimeling.following=Seguindo +gui.slimeling.food=Comida favorita +gui.slimeling.kills=Vítimas +gui.slimeling.name=Nome +gui.slimeling.owner=Dono +gui.slimeling.scale=Tamanho +gui.slimeling.sitting=Sentado +gui.status.liquefying.name=Condensando +gui.status.needs_carbon.name=Falta carbono +gui.status.nogas.name=Sem gás +gui.status.processing.name=Sintetizando +gui.status.tankfull.name=Tanque cheio +gui.status.tanksfull.name=Tanques cheios +gui.telepad.desc.0=Este é o endereço$único desta Telebase +gui.telepad.desc.1=Endereço de outra Telebase.$Entidades serão enviadas para lá. +gui.terraformer.desc.0=Tanque de Água +gui.water_bucket_slot.desc=Coloque baldes de água aqui +item.astro_miner.name=Astrominerador +item.atmospheric_valve.name=Válvula Atmosférica +item.beam_core.name=Núcleo de Feixe +item.bucket_sludge.name=Balde de Lodo Bacterial +item.canister.gas.name=Gás #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Lata de Argônio Líquido Cheia +item.canister.liquid_argon.name=Líquido #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Lata de Argônio Líquido +item.canister.liquid_nitrogen.full.name=Lata de Nitrogênio Líquido Cheia +item.canister.liquid_nitrogen.name=Líquido #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Lata de Nitrogênio Líquido +item.canister.lox.full.name=Lata de Oxigênio Líquido Cheia +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Lata de Oxigênio Líquido +item.carbon_fragments.name=Carbono Fragmentado +item.compressed_desh.name=Desh Prensado +item.compressed_titanium.name=Titânio Prensado +item.desh_axe.name=Machado de Desh +item.desh_boots.name=Botas de Desh +item.desh_chestplate.name=Peitoral de Desh +item.desh_helmet.name=Elmo de Desh +item.desh_hoe.name=Enxada de Desh +item.desh_leggings.name=Perneiras de Desh +item.desh_pick.name=Picareta de Desh +item.desh_pick_slime.description.name=Pode-se colher ovos de Slimeling +item.desh_pick_slime.name=Picareta de Desh Pegajosa +item.desh_spade.name=Pá de Desh +item.desh_stick.name=Graveto de Desh +item.desh_sword.name=Espada de Desh +item.empty_gas_canister.name=Lata de Gás Vazia +item.engine_t2.name=Motor de Foguete Pesado +item.fluid_manip.name=Manipulador de Fluidos +item.grapple.name=Gancho +item.heavy_nose_cone.name=Nariz de Foguete Pesado +item.ingot_desh.name=Barra de Desh +item.ingot_titanium.name=Barra de Titânio +item.key.t2.name=Chave de Calabouço Nível 2 +item.methane_canister.name=Lata de Gás Metano Cheia +item.methane_canister_partial.name=Lata de Gás Metano +item.orion_drive.name=Unidade Orion +item.raw_desh.name=Desh Bruto +item.reinforced_plate_t2.name=Blindagem Pesada +item.reinforced_plate_t3.name=Blindagem Pesada +item.rocket_fins_t2.name=Aleta de Foguete Pesado +item.rocket_t2.cargo_rocket.name=Foguete de Carga +item.rocket_t2.t2Rocket.name=Foguete Nível 2 +item.rocket_t3.t3Rocket.name=Foguete Nível 3 +item.shard_iron.name=Estilhaço de Ferro +item.shard_titanium.name=Estilhaço de Titânio +item.slimeling_cargo.name=Mochila-Inventário para Slimeling +item.thermal_boots.name=Botas do Traje Térmico +item.thermal_chestplate.name=Peitoral do Traje Térmico +item.thermal_cloth.name=Tecido Térmico +item.thermal_helm.name=Elmo do Traje Térmico +item.thermal_leggings.name=Perneiras do Traje Térmico +item.tier2.desc=Nível 2 +item.tier3.desc=Nível 3 +item.titanium_axe.name=Machado de Titânio +item.titanium_boots.name=Botas de Titânio +item.titanium_chestplate.name=Peitoral de Titânio +item.titanium_helmet.name=Elmo de Titânio +item.titanium_hoe.name=Enxada de Titânio +item.titanium_leggings.name=Perneiras de Titânio +item.titanium_pickaxe.name=Picareta de Titânio +item.titanium_shovel.name=Pá de Titânio +item.titanium_sword.name=Espada de Titânio +planet.asteroids=Asteroides +planet.mars=Marte +schematic.astro_miner.name=Astrominerador +schematic.cargo_rocket.name=Foguete de Carga Automático +schematic.rocket_t3.name=Foguete Nível 3 +tile.asteroids_block.asteroid_rock_0.name=Rocha de Asteroide +tile.asteroids_block.asteroid_rock_1.name=Rocha de Asteroide +tile.asteroids_block.asteroid_rock_2.name=Rocha de Asteroide +tile.asteroids_block.ore_aluminum_asteroids.name=Minério de Alumínio +tile.asteroids_block.ore_ilmenite_asteroids.name=Minério de Ilmenita +tile.asteroids_block.ore_iron_asteroids.name=Minério de Ferro +tile.beam_receiver.description=Receptores de Feixe são colocados nas entradas e saídas de energia de máquinas, para transferir energia utilizando feixes. +tile.beam_receiver.name=Receptor de Feixe +tile.beam_reflector.description=Refletores de Feixe são usados para redirecionar feixes de energia da fonte ao destino. Podem ser clicados com o botão direto do mouse para apontar para outros alvos. +tile.beam_reflector.name=Refletor de Feixe +tile.cavern_vines.description=Vinhas de Caverna são perigosas para os seres vivos, podendo se prender neles e arrastá-los para cima. +tile.cavern_vines.name=Vinhas de Caverna +tile.creeper_egg.description=Ovos de Creeper vão aparecer em Calabouços Marcianos, gerando um predador furtivo ao quebrar por explosão. +tile.creeper_egg.name=Ovo de Creeper +tile.cryo_chamber.description=Câmara Criogênicas irão permitir que um jogador durma durante o dia, restaurando uma pequena quantidade de saúde, mas têm um tempo de recarga. +tile.dense_ice.name=Gelo Denso +tile.electrolyzer.description=Transforma água em hidrogênio (útil para o Sintetizador de Metano) e oxigênio. +tile.gas_liquefier.description=Converte gases em líquidos, seja gases da atmosfera ou de latas. Metano liquefeito faz bom combustível de foguete! +tile.hydrogen_pipe.description=Cano de Hidrogênio irá transferir hidrogênio do tanque de gás interno de uma máquina para outra. +tile.hydrogen_pipe.name=Cano de Hidrogênio +tile.launch_controller.description=Controles de Lançamento são utilizados para personalizar o comportamento do lançamento, incluindo critérios de lançamento e a base de lançamento de destino para lançamentos de automáticos. +tile.mars.coppermars.name=Minério de Cobre +tile.mars.deshmars.name=Minério de Desh +tile.mars.ironmars.name=Minério de Ferro +tile.mars.marscobblestone.name=Pedregulho +tile.mars.marsdeco.name=Bloco de Desh +tile.mars.marsdirt.name=Rocha Subsuperficial Marciana +tile.mars.marsdungeon.name=Parede de Calabouço Marciano +tile.mars.marsgrass.name=Rocha Superficial Marciana +tile.mars.marsstone.name=Pedra Marciana +tile.mars.tinmars.name=Minério de Estanho +tile.mars_stairs_cobblestone.name=Escadas de Pedregulho Marciano +tile.mars_stairs_brick.name=Escadas de Tijolos de Calabouço Marciano +tile.mars_machine.0.name=Terraformador +tile.mars_machine.1.name=Câmara Criogênica +tile.mars_machine.2.name=Controle de Lançamento +tile.mars_machine.4.name=Condensador +tile.mars_machine.5.name=Sintetizador de Metano +tile.mars_machine.6.name=Eletrolisador de Água +tile.methane_synthesizer.description=Com uma fonte de hidrogênio e uma fonte de carbono, este produz Metano para processamento posterior no Condensador para gases. +tile.miner_base.description=A Base do Astrominerador é o ponto de ancoragem para um Astrominerador. É grande ... tente fazer um cubo de 2 x 2 x 2 com estes blocos. +tile.miner_base.name=Base do Astrominerador +tile.slab_gc_half.mars_bricks_slab.name=Laje de Tijolos de Calabouço Marciano +tile.slab_gc_half.mars_slab.name=Laje de Pedregulho Marciano +tile.slimeling_egg.blue.name=Ovo de Slimeling Azul +tile.slimeling_egg.description=Ovos de Slimeling, uma vez quabrados com as mãos, geram um animal de estimação em pouco tempo. +tile.slimeling_egg.red.name=Ovo de Slimeling Vermelho +tile.slimeling_egg.yellow.name=Ovo de Slimeling Amarelo +tile.sludge.name=Lodo Bacterial +tile.telepad_short.description=Telebases de Curto Alcance são usados para transferir jogadores e outras criaturas vivas a distâncias curtas (250 blocos) quando ligadas a outras telebases. +tile.telepad_short.name=Telebase de Curto Alcance +tile.terraformer.description=Terraformadores são usados para adicionar alguma vegetação em planetas distantes, gerando grama, árvores e água quando dados os materiais corretos. +tile.treasure_t2.description=Baús de Tesouro Nível 2 são gerados nos Calabouços Marcianos. Eles são desbloqueáveis depois de derrotar o chefe final. +tile.treasure_t2.name=Baú de Tesouro Nível 2 +tile.treasure_t3.description=Baú de Tesouro Nível 3 não são utilizados no momento. +tile.treasure_t3.name=Baú de Tesouro Nível 3 +tile.walkway.walkway.description=Passadiços são utilizados para fins decorativos, utilizados para conectar blocos, mantendo um estilo espacial. +tile.walkway.walkway.name=Passadiço +tile.walkway.walkway_pipe.description=Passadiços com Cano de Oxigênio são utilizados para passar canos por debaixo de um piso caminhável. +tile.walkway.walkway_pipe.name=Passadiço +tile.walkway.walkway_wire.description=Passadiços com Cabo de Alumínio são utilizados para passar cabos por debaixo de um piso caminhável. +tile.walkway.walkway_wire.name=Passadiço +tile.wall_gc.mars.name= Parede de Pedregulho Marciano +tile.wall_gc.mars_bricks.name=Parede de Tijolos de Calabouço Marciano diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_pt.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_pt.lang new file mode 100644 index 00000000..90e87e30 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/pt_pt.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Cápsula de Entrada +container.launchcontroller.name=Controlo de Lançamento +container.mars_lander.name=Almofada de Aterragem +container.short_range_telepad.name=Telebase de Curto Alcance +container.tile_terraformer.name=Terraformador +dimension.mars.name=Marte +entity.astro_miner.name=Astrominerador +entity.creeper_boss.name=Creeper-Chefe Evoluído +entity.entry_pod.name=Cápsula de Entrada +entity.grapple_hook.name=Gancho +entity.landing_balloons.name=Almofada de Aterragem +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Foguetão de Carga +entity.rocket_t2.name=Foguetão Nível 2 +entity.rocket_t3.name=Foguetão Nível 3 +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Asteroides Menores +fluid.argon=Gás Árgon +fluid.atmosphericgases=Gases Atmosféricos +fluid.bacterialsludge=Lodo Bacterial +fluid.carbondioxide=Gás Carbónico +fluid.fuel=Combustível +fluid.helium=Gás Hélio +fluid.hydrogen=Gás Hidrogénio +fluid.liquidargon=Árgon Líquido +fluid.liquidmethane=Metano Líquido +fluid.liquidnitrogen=Nitrogénio Líquido +fluid.liquidoxygen=Oxigénio Líquido +fluid.methane=Gás Metano +fluid.nitrogen=Gás Nitrogénio +fluid.oxygen=Gás Oxigénio +gas.carbondioxide.name=Gás Carbónico +gas.nitrogen.name=Nitrogénio +gas.oxygen.name=Oxigénio +gc.configgui.astro_miners_max=No. máximo de Astromineradores por jogador +gc.configgui.dimension_id_asteroids=ID da dimensão Asteroides +gc.configgui.dimension_id_mars=ID da dimensão Marte +gc.configgui.disable_galacticraft_helium=Desabilitar registro de gás hélio +gc.configgui.id_schematic_cargo_rocket=ID do Esquemático do Foguetão de Carga +gc.configgui.id_schematic_rocket_t2=ID do Esquemático do Foguetão Nível 2 +gc.configgui.id_schematic_rocket_t3=ID do Esquemático do Foguete Nível 3 +gc.configgui.launch_controller_all_dims=Controlo de Lançamento para todas as dimensões +gc.configgui.launch_controller_chunk_load=Chunkloading do Controlo de Lançamento +gc.configgui.planets.title=Configuração Galacticraft Planets +gui.button.liquefy.name=Processar +gui.button.liquefy_stop.name=Parar +gui.button.recall.name=Retornar +gui.carbon_slot.desc.0=Carbono Fragmentado pode ir aqui +gui.cargorocket.status.launched.0=Pronto +gui.cargorocket.status.launched.1=Lançado +gui.cargorocket.status.waiting.0=Esperando por +gui.cargorocket.status.waiting.1=ignição +gui.choose_planet.desc.mars=Habitável#Sem Oxigénio#Gravidade: 38% +gui.cryogenic.chat.cant_use=Não posso usar isso pelos próximos %d segundos +gui.gas_input.desc.0=Experimenta colocar uma$Lata de Gás Metano aqui +gui.gas_input.desc.1=(Ou talvez, uma Válvula$Atmosférica) +gui.gas_tank.desc.0=Armazenamento de Gás +gui.gas_tank_compressed.desc.0=Armazenamento de Gás (Comprimido) +gui.hydrogen_input.desc.0=Aqui vai um tanque de hidrogénio +gui.hydrogen_input.desc.1=ou uma Válvula Atmosférica +gui.launch_controller.desc.0=Este é a frequência única do$Controlo de Lançamento +gui.launch_controller.desc.1=Frequência para qual foguetões serão lançados +gui.launch_controller.desc.2=Se a base de lançamento deve ser$removida no lançamento +gui.launch_controller.desc.3=Quando esse critério for cumprido,$lançar foguetão +gui.launch_controller.desc.4=Esconder frequência de destino$de outros jogadores +gui.liquid_output.desc.2=tanque de gás liquefeito +gui.liquid_tank.desc.0=Tanque de líquidos +gui.message.address.name=Endereço +gui.message.astro_miner.fail=Esta base já tem um Astrominerador! +gui.message.astro_miner1.fail=A área de acoplamento está bloqueada por: +gui.message.astro_miner1_a.fail=A rota Astrominerador está bloqueada por: +gui.message.astro_miner2.fail=Já há Astromineradores demais! +gui.message.astro_miner3.fail=A base do Astrominerador foi removido! +gui.message.astro_miner4.fail=O Astrominerador ficou sem energia e não pode voltar à base! +gui.message.astro_miner5.fail=A rota do Astrominerador para sua base parece estar bloqueada! +gui.message.astro_miner6.fail=O Astrominerador terminou a mineração na área, e agora vai parar! +gui.message.astro_miner7.fail=Não há nada para um Astrominerador minerar em uma estação espacial! +gui.message.astro_miner8.fail=Um segundo Astrominerador foi detectado na mesma base, o primeiro então irá ser paralizado. +gui.message.bubble_exp.name=Bolha expandindo +gui.message.cargo_full.name=Carga Cheia +gui.message.cargo_unloaded.name=Carga Vazia +gui.message.dest_address.name=Endereço-Destino +gui.message.dest_frequency.name=Destino +gui.message.enable_grass.name=Habilitar Grama +gui.message.enable_trees.name=Habilitar Árvores +gui.message.frequency.name=Frequência +gui.message.fully_fueled.name=100% Abastecido +gui.message.grapple.fail=Vou precisar de algum fio se eu quero jogar esse Gancho! +gui.message.grass.name=Grama +gui.message.instant.name=Imediatamente +gui.message.invalid_address.name=Endereço Único Inválido +gui.message.invalid_freq.name=Frequência Inválida +gui.message.invalid_target_address.name=Endereço-Destino Inválido +gui.message.launch_when.name=Lançar qdo. +gui.message.low_energy.name=Pouca energia +gui.message.no_bonemeal.name=Farinha de Osso Insuficiente +gui.message.no_energy.name=Energia Insuficiente +gui.message.no_saplings.name=Rebentos Insuficientes +gui.message.no_seeds.name=Sementes Insuficientes +gui.message.no_valid_blocks.name=Sem blocos válidos na bolha +gui.message.no_water.name=Água Insuficiente +gui.message.not_enough.name=Insuficiente +gui.message.not_enough_energy.name=Energia Insuficiente! +gui.message.not_set.name=Não Definido +gui.message.one_min.name=1 Minuto +gui.message.receiving_active.name=Recebimento Ativo +gui.message.redstone_sig.name=Sinal de Redstone +gui.message.remove_pad.name=Remover Base +gui.message.sending_active.name=Envio Ativo +gui.message.success.name=Sucesso +gui.message.target_no_energy.name=Destino não tem energia suficiente! +gui.message.telepad_not_found.name=Telebase Não Encontrada! +gui.message.telepad_too_far.name=Destino longe demais! (Máx %d) +gui.message.telepad_wrong_dim.name=Destino está numa dimensão errada! +gui.message.ten_sec.name=10 Segundos +gui.message.terraforming.name=Terraformando +gui.message.thirty_sec.name=30 Segundos +gui.message.trees.name=Árvores +gui.message.with_atmosphere0.name=em um planeta abundante em +gui.message.with_atmosphere1.name=na atmosfera +gui.message.zero_water.name=Sem água! +gui.methane_output.desc.2=tanque de metano +gui.miner.docked=Estacionado +gui.miner.docking=Estacionando +gui.miner.mined=Minerado +gui.miner.mining=Minerar +gui.miner.offline=Desconectado +gui.miner.out_of_range=Fora de alcance +gui.miner.returning=Retornando +gui.miner.stuck=Preso em: +gui.miner.travelling=Viajando +gui.slimeling.button.follow=Seguir +gui.slimeling.button.sit=Sentar +gui.slimeling.chat.wrong_player=Este não é meu Slimeling! +gui.slimeling.damage=Força de ataque +gui.slimeling.following=Seguindo +gui.slimeling.food=Comida favorita +gui.slimeling.kills=Vítimas +gui.slimeling.name=Nome +gui.slimeling.owner=Dono +gui.slimeling.scale=Tamanho +gui.slimeling.sitting=Sentado +gui.status.liquefying.name=Condensando +gui.status.needs_carbon.name=Falta carbono +gui.status.nogas.name=Sem gás +gui.status.processing.name=Sintetizando +gui.status.tankfull.name=Tanque cheio +gui.status.tanksfull.name=Tanques cheios +gui.telepad.desc.0=Este é o endereço$único desta Telebase +gui.telepad.desc.1=Endereço de outra Telebase.$Entidades serão enviadas para lá. +gui.terraformer.desc.0=Tanque de Água +gui.water_bucket_slot.desc=Coloca baldes de água aqui +item.astro_miner.name=Astrominerador +item.atmospheric_valve.name=Válvula Atmosférica +item.beam_core.name=Núcleo de Feixe +item.bucket_sludge.name=Balde de Lodo Bacterial +item.canister.gas.name=Gás #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Lata de Árgon Líquido Cheia +item.canister.liquid_argon.name=Líquido #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Lata de Árgon Líquido +item.canister.liquid_nitrogen.full.name=Lata de Nitrogénio Líquido Cheia +item.canister.liquid_nitrogen.name=Líquido #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Lata de Nitrogénio Líquido +item.canister.lox.full.name=Lata de Oxigénio Líquido Cheia +item.canister.lox.name=LOX #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Lata de Oxigénio Líquido +item.carbon_fragments.name=Carbono Fragmentado +item.compressed_desh.name=Desh Prensado +item.compressed_titanium.name=Titânio Prensado +item.desh_axe.name=Machado de Desh +item.desh_boots.name=Botas de Desh +item.desh_chestplate.name=Peitoral de Desh +item.desh_helmet.name=Capacete de Desh +item.desh_hoe.name=Enxada de Desh +item.desh_leggings.name=Perneiras de Desh +item.desh_pick.name=Picareta de Desh +item.desh_pick_slime.description.name=Pode-se colher ovos de Slimeling +item.desh_pick_slime.name=Picareta de Desh Pegajosa +item.desh_spade.name=Pá de Desh +item.desh_stick.name=Graveto de Desh +item.desh_sword.name=Espada de Desh +item.empty_gas_canister.name=Lata de Gás Vazia +item.engine_t2.name=Motor de Foguetão Pesado +item.fluid_manip.name=Manipulador de Fluidos +item.grapple.name=Gancho +item.heavy_nose_cone.name=Nariz de Foguetão Pesado +item.ingot_desh.name=Barra de Desh +item.ingot_titanium.name=Barra de Titânio +item.key.t2.name=Chave de Calabouço Nível 2 +item.methane_canister.name=Lata de Gás Metano Cheia +item.methane_canister_partial.name=Lata de Gás Metano +item.orion_drive.name=Unidade Orion +item.raw_desh.name=Desh Bruto +item.reinforced_plate_t2.name=Blindagem Pesada +item.reinforced_plate_t3.name=Blindagem Pesada +item.rocket_fins_t2.name=Aleta de Foguetão Pesado +item.rocket_t2.cargo_rocket.name=Foguetão de Carga +item.rocket_t2.t2Rocket.name=Foguetão Nível 2 +item.rocket_t3.t3Rocket.name=Foguetão Nível 3 +item.shard_iron.name=Estilhaço de Ferro +item.shard_titanium.name=Estilhaço de Titânio +item.slimeling_cargo.name=Mochila-Inventário para Slimeling +item.thermal_boots.name=Botas do Traje Térmico +item.thermal_chestplate.name=Peitoral do Traje Térmico +item.thermal_cloth.name=Tecido Térmico +item.thermal_helm.name=Capacete do Traje Térmico +item.thermal_leggings.name=Perneiras do Traje Térmico +item.tier2.desc=Nível 2 +item.tier3.desc=Nível 3 +item.titanium_axe.name=Machado de Titânio +item.titanium_boots.name=Botas de Titânio +item.titanium_chestplate.name=Peitoral de Titânio +item.titanium_helmet.name=Capacete de Titânio +item.titanium_hoe.name=Enxada de Titânio +item.titanium_leggings.name=Perneiras de Titânio +item.titanium_pickaxe.name=Picareta de Titânio +item.titanium_shovel.name=Pá de Titânio +item.titanium_sword.name=Espada de Titânio +planet.asteroids=Asteroides +planet.mars=Marte +schematic.astro_miner.name=Astrominerador +schematic.cargo_rocket.name=Foguetão de Carga Automático +schematic.rocket_t3.name=Foguetão Nível 3 +tile.asteroids_block.asteroid_rock_0.name=Rocha de Asteroide +tile.asteroids_block.asteroid_rock_1.name=Rocha de Asteroide +tile.asteroids_block.asteroid_rock_2.name=Rocha de Asteroide +tile.asteroids_block.ore_aluminum_asteroids.name=Minério de Alumínio +tile.asteroids_block.ore_ilmenite_asteroids.name=Minério de Ilmenita +tile.asteroids_block.ore_iron_asteroids.name=Minério de Ferro +tile.beam_receiver.description=Receptores de Feixe são colocados nas entradas e saídas de energia de máquinas, para transferir energia utilizando feixes. +tile.beam_receiver.name=Receptor de Feixe +tile.beam_reflector.description=Refletores de Feixe são usados para redirecionar feixes de energia da fonte ao destino. Podem ser clicados com o botão direto do rato para apontar para outros alvos. +tile.beam_reflector.name=Refletor de Feixe +tile.cavern_vines.description=Vinhas de Caverna são perigosas para os seres vivos, podendo se prender neles e arrastá-los para cima. +tile.cavern_vines.name=Vinhas de Caverna +tile.creeper_egg.description=Ovos de Creeper vão aparecer em Calabouços Marcianos, gerando um predador furtivo ao quebrar por explosão. +tile.creeper_egg.name=Ovo de Creeper +tile.cryo_chamber.description=Câmara Criogénicas irão permitir que um jogador durma durante o dia, restaurando uma pequena quantidade de saúde, mas têm um tempo de recarga. +tile.dense_ice.name=Gelo Denso +tile.electrolyzer.description=Transforma água em hidrogénio (útil para o Sintetizador de Metano) e oxigênio. +tile.gas_liquefier.description=Converte gases em líquidos, seja gases da atmosfera ou de latas. Metano liquefeito faz bom combustível de foguetão! +tile.hydrogen_pipe.description=Cano de Hidrogénio irá transferir hidrogénio do tanque de gás interno de uma máquina para outra. +tile.hydrogen_pipe.name=Cano de Hidrogénio +tile.launch_controller.description=Controlos de Lançamento são utilizados para personalizar o comportamento do lançamento, incluindo critérios de lançamento e a base de lançamento de destino para lançamentos de automáticos. +tile.mars.coppermars.name=Minério de Cobre +tile.mars.deshmars.name=Minério de Desh +tile.mars.ironmars.name=Minério de Ferro +tile.mars.marscobblestone.name=Empedrado +tile.mars.marsdeco.name=Bloco de Desh +tile.mars.marsdirt.name=Rocha Subsuperficial Marciana +tile.mars.marsdungeon.name=Parede de Calabouço Marciano +tile.mars.marsgrass.name=Rocha Superficial Marciana +tile.mars.marsstone.name=Pedra Marciana +tile.mars.tinmars.name=Minério de Estanho +tile.mars_stairs_cobblestone.name=Escadas de Empedrado Marciano +tile.mars_stairs_brick.name=Escadas de Tijolos de Calabouço Marciano +tile.mars_machine.0.name=Terraformador +tile.mars_machine.1.name=Câmara Criogénica +tile.mars_machine.2.name=Controlo de Lançamento +tile.mars_machine.4.name=Condensador +tile.mars_machine.5.name=Sintetizador de Metano +tile.mars_machine.6.name=Eletrolisador de Água +tile.methane_synthesizer.description=Com uma fonte de hidrogénio e uma fonte de carbono, este produz Metano para processamento posterior no Condensador para gases. +tile.miner_base.description=A Base do Astrominerador é o ponto de ancoragem para um Astrominerador. É grande ... tente fazer um cubo de 2 x 2 x 2 com estes blocos. +tile.miner_base.name=Base do Astrominerador +tile.slab_gc_half.mars_bricks_slab.name=Laje de Tijolos de Calabouço Marciano +tile.slab_gc_half.mars_slab.name=Laje de Empedrado Marciano +tile.slimeling_egg.blue.name=Ovo de Slimeling Azul +tile.slimeling_egg.description=Ovos de Slimeling, uma vez quabrados com as mãos, geram um bixo de estimação em pouco tempo. +tile.slimeling_egg.red.name=Ovo de Slimeling Vermelho +tile.slimeling_egg.yellow.name=Ovo de Slimeling Amarelo +tile.sludge.name=Lodo Bacterial +tile.telepad_short.description=Telebases de Curto Alcance são usados para transferir jogadores e outras criaturas vivas a distâncias curtas (250 blocos) quando ligadas a outras telebases. +tile.telepad_short.name=Telebase de Curto Alcance +tile.terraformer.description=Terraformadores são usados para adicionar alguma vegetação em planetas distantes, gerando grama, árvores e água quando dados os materiais corretos. +tile.treasure_t2.description=Baús de Tesouro Nível 2 são gerados nos Calabouços Marcianos. Eles são desbloqueáveis depois de derrotar o chefe final. +tile.treasure_t2.name=Baú de Tesouro Nível 2 +tile.treasure_t3.description=Baú de Tesouro Nível 3 não são utilizados no momento. +tile.treasure_t3.name=Baú de Tesouro Nível 3 +tile.walkway.walkway.description=Passadiços são utilizados para fins decorativos, utilizados para conectar blocos, mantendo um estilo espacial. +tile.walkway.walkway.name=Passadiço +tile.walkway.walkway_pipe.description=Passadiços com Cano de Oxigénio são utilizados para passar canos por debaixo de um piso caminhável. +tile.walkway.walkway_pipe.name=Passadiço +tile.walkway.walkway_wire.description=Passadiços com Cabo de Alumínio são utilizados para passar cabos por debaixo de um piso caminhável. +tile.walkway.walkway_wire.name=Passadiço +tile.wall_gc.mars.name= Parede de Empedrado Marciano +tile.wall_gc.mars_bricks.name=Parede de Tijolos de Calabouço Marciano diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ru_ru.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ru_ru.lang new file mode 100644 index 00000000..7c74a998 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/ru_ru.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=Создать крюк +checklist.equip_shield_controller.key=Установить контроллер щита +checklist.thermal_padding.key=Надеть тепловую защиту +checklist.thermal_padding_t2.key=Надеть тепловую защиту 2-го уровня +container.crashed_probe.name=Разбившийся зонд +container.entry_pod.name=Посадочная капсула +container.geothermal_generator.name=Геотермальный генератор +container.launchcontroller.name=Контроллер запуска +container.mars_lander.name=Посадочные баллоны +container.solar_array_controller.name=Контроллер солнечной батареи +container.short_range_telepad.name=Короткодистанционный телепорт +container.slimeling_inventory.name=Инвентарь слаймлинга +container.tile_terraformer.name=Терраформер +dimension.mars.name=Марс +entity.astro_miner.name=Астрономический шахтёр +entity.creeper_boss.name=Эволюционировавший крипер-босс +entity.entry_pod.name=Посадочная капсула +entity.entry_pod_venus.name=Венерианская посадочная капсула +entity.grapple_hook.name=Крюк +entity.juicer.name=Маленький паук +entity.landing_balloons.name=Посадочные баллоны +entity.projectile_tnt.name=Снаряд TNT +entity.rocket_cargo.name=Грузовая ракета +entity.rocket_t2.name=Ракета 2-го уровня +entity.rocket_t3.name=Ракета 3-го уровня +entity.slimeling.name=Слаймлинг +entity.sludgeling.name=Сладжлинг +entity.small_asteroid.name=Маленький астероид +entity.spider_queen.name=Королева пауков +entity.web_shot.name=Паутина +fluid.argon=Аргон +fluid.atmosphericgases=Атмосферные газы +fluid.bacterialsludge=Бактериальный осадок +fluid.carbondioxide=Углекислый газ +fluid.fuel=Топливо +fluid.helium=Гелий +fluid.hydrogen=Водород +fluid.liquidargon=Жидкий аргон +fluid.liquidmethane=Жидкий метан +fluid.liquidnitrogen=Жидкий азот +fluid.liquidoxygen=Жидкий кислород +fluid.methane=Метан +fluid.nitrogen=Азот +fluid.oil=Нефть +fluid.oxygen=Кислород +fluid.sulphuricacid=Серная кислота +gas.carbondioxide.name=Углекислый газ +gas.nitrogen.name=Азот +gas.oxygen.name=Кислород +gc.configgui.astro_miners_max=Максимальное количество астрошахтёров на игрока +gc.configgui.dimension_id_asteroids=ID измерения: Астероиды +gc.configgui.dimension_id_mars=ID измерения: Марс +gc.configgui.dimension_id_venus=ID измерения: Венера +gc.configgui.disable_aluminum_gen_asteroids=Отключить генерацию алюминиевой руды на Астероидах +gc.configgui.disable_ambient_lightning=Отключить молнии на Венере +gc.configgui.disable_copper_gen_mars=Отключить генерацию медной руды на Марсе +gc.configgui.disable_desh_gen_mars=Отключить генерацию руды деш на Марсе +gc.configgui.disable_galacticraft_helium=Отключение регистрации гелия +gc.configgui.disable_small_asteroids=Отключить спаун малых астероидов (Астероиды) +gc.configgui.disable_ilmenite_gen_asteroids=Отключить генерацию ильменитовой руды на Астероидах +gc.configgui.disable_iron_gen_asteroids=Отключить генерацию железной руды на Астероидах +gc.configgui.disable_iron_gen_mars=Отключить генерацию железной руды на Марсе +gc.configgui.disable_tin_gen_mars=Отключить генерацию оловянной руды на Марсе +gc.configgui.disable_venus_aluminum_gen=Отключить генерацию алюминиевой руды на Венере +gc.configgui.disable_venus_copper_gen=Отключить генерацию медной руды на Венере +gc.configgui.disable_venus_galena_gen=Отключить генерацию галенитовой руды на Венере +gc.configgui.disable_venus_quartz_gen=Отключить генерацию кварцевой руды на Венере +gc.configgui.disable_venus_silicon_gen=Отключить генерацию кремниевой руды на Венере +gc.configgui.disable_venus_solar_gen=Отключить генерацию солнечной руды на Венере +gc.configgui.disable_venus_tin_gen=Отключить генерацию оловянной руды на Венере +gc.configgui.id_schematic_cargo_rocket=ID схемы: Грузовая ракета +gc.configgui.id_schematic_rocket_t2=ID схемы: Ракета 2-го уровня +gc.configgui.id_schematic_rocket_t3=ID схемы: Ракета 3-го уровня +gc.configgui.launch_controller_all_dims=Загрузка всех измерений контроллером запуска +gc.configgui.launch_controller_chunk_load=Загрузка чанков контроллером запуска +gc.configgui.planets.title=Настройки Galacticraft Planets +gui.button.add_blacklist.name=Черный список +gui.button.add_entity.name=Добавить объект +gui.button.add_player.name=Добавить игрока +gui.button.add_whitelist.name=Белый список +gui.button.edit_blacklist.name=Редактировать черный список +gui.button.edit_priority.name=Изменить приоритет +gui.button.edit_whitelist.name=Редактировать белый список +gui.button.liquefy.name=Запуск +gui.button.liquefy_stop.name=Стоп +gui.button.never_fire_team.name=Никогда не стрелять в членов команды космической гонки +gui.button.recall.name=Отозвать +gui.button.remove_selected.name=Убрать выбранное +gui.carbon_slot.desc.0=Место для раздробленного угля +gui.cargorocket.status.launched.0=Запущена +gui.cargorocket.status.launched.1=в полет +gui.cargorocket.status.waiting.0=Ожидание +gui.cargorocket.status.waiting.1=зажигания +gui.choose_planet.desc.mars=Обитаем#Кислород отсутствует#Гравитация: 38% +gui.cryogenic.chat.cant_use=Вы не можете использовать её в течение %d секунд(-ы) +gui.gas_input.desc.0=Попробуйте поместить сюда$канистру с метаном +gui.gas_input.desc.1=(Или в качестве альтернативы,$атмосферный клапан) +gui.gas_tank.desc.0=Хранилище газа +gui.gas_tank_compressed.desc.0=Хранилище газа (Сжатого) +gui.hydrogen_input.desc.0=Сюда помещается резервуар с водородом +gui.hydrogen_input.desc.1=или Атмосферный клапан +gui.launch_controller.advanced=Дополнительно +gui.launch_controller.desc.0=Это уникальная частота$контроллера запуска +gui.launch_controller.desc.1=Частота пункта назначения для ракеты +gui.launch_controller.desc.2=Должна ли взлётная площадка$быть удалена при запуске +gui.launch_controller.desc.3=Когда это условие выполняется,$ракета запускается +gui.launch_controller.desc.4=Скрыть частоту пункта$назначения от других игроков +gui.launch_controller.owner=Владелец +gui.liquid_output.desc.2=резервуар сжиженного газа +gui.liquid_tank.desc.0=Жидкостный резервуар +gui.message.address.name=Адрес +gui.message.astro_miner.fail=У этой базы уже есть астрошахтёр! +gui.message.astro_miner1.fail=Область стыковки заблокирована: +gui.message.astro_miner1_a.fail=Путь астрошахтёра преграждён: +gui.message.astro_miner1_b.fail=Защищенная зона! +gui.message.astro_miner2.fail=Достигнут лимит астрошахтёров! +gui.message.astro_miner3.fail=Основание астрошахтёра было демонтировано! +gui.message.astro_miner4.fail=У астрошахтёра кончилась энергия и он не может вернуться на базу! +gui.message.astro_miner5.fail=Путь астрошахтёра до базы, кажется, преграждён! +gui.message.astro_miner6.fail=Астрошахтёр закончил добычу и остановился! +gui.message.astro_miner7.fail=Астрошахтёру нечего добывать на космической станции! +gui.message.astro_miner8.fail=Второй астрошахтёр был обнаружен на той же базе, теперь первый остановится. +gui.message.blacklist_mode.name=Режим черного списка +gui.message.bubble_exp.name=Расширение пузыря +gui.message.cargo_full.name=Груз загружен +gui.message.cargo_unloaded.name=Груз разгружен +gui.message.connected_solar_controller.name=%d подсоединено (радиус 16 блоков) +gui.message.dest_address.name=Адрес цели +gui.message.dest_frequency.name=Цель +gui.message.enable_grass.name=Включить траву +gui.message.enable_trees.name=Включить деревья +gui.message.enter_entity.name=Введите имя объекта/id +gui.message.enter_player.name=Введите имя игрока +gui.message.frequency.name=Частота +gui.message.fully_fueled.name=Полностью заправлен +gui.message.grapple.fail=Вам нужно немного ниток, если вы хотите кинуть этот крюк! +gui.message.grass.name=Трава +gui.message.instant.name=Немедленно +gui.message.invalid_address.name=Неверный уникальный адрес +gui.message.invalid_freq.name=Неверная частота +gui.message.invalid_target_address.name=Неверный адрес цели +gui.message.launch_when.name=Запустить, когда: +gui.message.low_energy.name=Мало энергии +gui.message.low_energy_output.name=Малый выход энергии +gui.message.no_bonemeal.name=Недостаточно костной муки +gui.message.no_energy.name=Нет энергии! +gui.message.no_saplings.name=Недостаточно саженцев +gui.message.no_seeds.name=Недостаточно семян +gui.message.no_valid_blocks.name=Нет доступных блоков в пузыре +gui.message.no_water.name=Недостаточно воды +gui.message.not_enough.name=Недостаточно +gui.message.not_enough_energy.name=Недостаточно энергии! +gui.message.not_set.name=Не указано +gui.message.one_min.name=1 минута +gui.message.player.name=Игрок +gui.message.priority_closest.name=Ближайший +gui.message.priority_health_high.name=Наибольшее здоровье +gui.message.priority_health_low.name=Наименьшее здоровье +gui.message.priority_low.name=Приоритет (Наинизший в первую очередь) +gui.message.receiving_active.name=Приём начат +gui.message.redstone_sig.name=Сигнал красного камня +gui.message.remove_pad.name=Убрать платформу при запуске +gui.message.sending_active.name=Отправка начата +gui.message.success.name=Успех +gui.message.target_meteors.name=Стрелять по метеорам +gui.message.target_no_energy.name=У цели не хватает энергии! +gui.message.telepad_not_found.name=Телепорт не найден! +gui.message.telepad_too_far.name=Цель слишком далеко! (Макс.: %d) +gui.message.telepad_wrong_dim.name=Цель в другом измерении! +gui.message.telepad_target_disabled.name=Цель отключена +gui.message.ten_sec.name=10 секунд +gui.message.terraforming.name=Терраформирование +gui.message.thirty_sec.name=30 секунд +gui.message.trees.name=Деревья +gui.message.with_atmosphere0.name=на планете с большим количеством +gui.message.with_atmosphere1.name=в атмосфере +gui.message.zero_water.name=Нет воды! +gui.methane_output.desc.2=резервуар метана +gui.miner.docked=Пристыкован +gui.miner.docking=Стыковка +gui.miner.mined=Добыто +gui.miner.mining=Добыча +gui.miner.offline=Вне сети +gui.miner.out_of_range=Вне зоны действия +gui.miner.returning=Возвращение +gui.miner.stuck=Застрял на: +gui.miner.travelling=Перемещение +gui.slimeling.button.follow=Следовать +gui.slimeling.button.sit=Сидеть +gui.slimeling.chat.wrong_player=Это не мой слаймлинг! +gui.slimeling.damage=Урон +gui.slimeling.following=Следует +gui.slimeling.food=Любимая еда +gui.slimeling.kills=Убийств +gui.slimeling.name=Имя +gui.slimeling.owner=Владелец +gui.slimeling.scale=Размер +gui.slimeling.sitting=Сидит +gui.status.invalid_spout_1.name=Должен быть поставлен на +gui.status.invalid_spout_2.name=доступный серный гейзер +gui.status.liquefying.name=Сжижение +gui.status.needs_carbon.name=Нужен уголь +gui.status.nogas.name=Нет газа +gui.status.processing.name=Синтез +gui.status.tankfull.name=Резервуар полон +gui.status.tanksfull.name=Резервуары полны +gui.telepad.desc.0=Это уникальный адрес$телепорта +gui.telepad.desc.1=Адрес другого телепорта.$Сущности будут отправляться туда. +gui.terraformer.desc.0=Водный резервуар +gui.water_bucket_slot.desc=Положите вёдра с водой сюда +item.astro_miner.name=Астрономический шахтёр +item.atmospheric_valve.name=Атмосферный клапан +item.atomic_battery.name=Атомная батарея +item.beam_core.name=Лучевое ядро +item.bucket_sludge.name=Ведро бактериального осадка +item.bucket_sulphuric_acid.name=Ведро серной кислоты +item.canister.gas.name=Газ +item.canister.liquid_argon.full.name=Полная канистра жидкого аргона +item.canister.liquid_argon.name=Жидкость +item.canister.liquid_argon.partial.name=Канистра жидкого аргона +item.canister.liquid_nitrogen.full.name=Полная канистра жидкого азота +item.canister.liquid_nitrogen.name=Жидкость +item.canister.liquid_nitrogen.partial.name=Канистра жидкого азота +item.canister.lox.full.name=Полная канистра жидкого кислорода +item.canister.lox.name=ЖК +item.canister.lox.partial.name=Канистра жидкого кислорода +item.carbon_fragments.name=Раздробленный уголь +item.compressed_desh.name=Сжатая деш +item.compressed_titanium.name=Сжатый титан +item.desh_axe.name=Топор из деш +item.desh_boots.name=Ботинки из деш +item.desh_chestplate.name=Кираса из деш +item.desh_helmet.name=Шлем из деш +item.desh_hoe.name=Мотыга из деш +item.desh_leggings.name=Поножи из деш +item.desh_pick.name=Кирка из деш +item.desh_pick_slime.description.name=Может добывать яйца крипера +item.desh_pick_slime.name=Липкая кирка из деш +item.desh_spade.name=Лопата из деш +item.desh_stick.name=Палка из деш +item.desh_sword.name=Меч из деш +item.dust_titanium.name=Титановая пыль +item.empty_gas_canister.name=Пустая газовая канистра +item.engine_t2.name=Прочный ракетный двигатель +item.fluid_manip.name=Жидкостный манипулятор +item.grapple.name=Крюк +item.heavy_nose_cone.name=Прочный головной обтекатель +item.ingot_desh.name=Слиток деш +item.ingot_lead.name=Свинцовый слиток +item.ingot_titanium.name=Титановый слиток +item.key.t2.name=Ключ от подземелья 2-го уровня +item.key.t3.name=Ключ от подземелья 3-го уровня +item.methane_canister.name=Полная канистра метана +item.methane_canister_partial.name=Канистра метана +item.orion_drive.name=Привод Ориона +item.prelaunch_checklist.name=Предполётная подготовка +item.radioisotope_core.name=Радиоизотопное ядро +item.raw_desh.name=Необработанная деш +item.reinforced_plate_t2.name=Сверхпрочная пластина +item.reinforced_plate_t3.name=Сверхпрочная пластина +item.rocket_fins_t2.name=Прочный ракетный стабилизатор +item.rocket_t2.cargo_rocket.name=Грузовая ракета +item.rocket_t2.t2Rocket.name=Ракета 2-го уровня +item.rocket_t3.t3Rocket.name=Ракета 3-го уровня +item.shard_iron.name=Железный осколок +item.shard_titanium.name=Титановый осколок +item.shield_controller.description=Контроллер щита защищает вашу броню от ВСЕХ видов урона - в том числе от атмосферной коррозии +item.shield_controller.name=Контроллер щита +item.slimeling_cargo.name=Сумка слаймлинга +item.solar_dust.name=Солнечная пыль +item.solar_module_2.name=Панель солнечной батареи +item.strange_seed.name=Странное семя +item.thermal_boots.name=Теплоизолирующие ботинки +item.thermal_boots_t2.name=Теплоустойчивые ботинки +item.thermal_chestplate.name=Теплоизолирующая кираса +item.thermal_chestplate_t2.name=Теплоустойчивая кираса +item.thermal_cloth.name=Теплоизолирующая ткань +item.thermal_fabric.name=Теплоустойчивая ткань +item.thermal_helm.name=Теплоизолирующий шлем +item.thermal_helm_t2.name=Теплоустойчивый шлем +item.thermal_leggings.name=Теплоизолирующие поножи +item.thermal_leggings_t2.name=Теплоустойчивые поножи +item.thin_solar_wafer.name=Полупроводниковая пластина солнечной батареи +item.tier2.desc=2-ой уровень +item.tier3.desc=3-ий уровень +item.titanium_axe.name=Титановый топор +item.titanium_boots.name=Титановые ботинки +item.titanium_chestplate.name=Титановая кираса +item.titanium_helmet.name=Титановый шлем +item.titanium_hoe.name=Титановая мотыга +item.titanium_leggings.name=Титановые поножи +item.titanium_pickaxe.name=Титановая кирка +item.titanium_shovel.name=Титановая лопата +item.titanium_sword.name=Титановый меч +item.volcanic_pickaxe.description=Копает зону 3x3 блока в зависимости от того, в каком направлении вы смотрите +item.volcanic_pickaxe.name=Вулканическая кирка +planet.asteroids=Астероиды +planet.mars=Марс +schematic.astro_miner.name=Астрономический шахтёр +schematic.cargo_rocket.name=Автоматическая грузовая ракета +schematic.rocket_t3.name=Ракета 3-го уровня +tile.asteroids_block.asteroid_rock_0.name=Астероидный камень +tile.asteroids_block.asteroid_rock_1.name=Астероидный камень +tile.asteroids_block.asteroid_rock_2.name=Астероидный камень +tile.asteroids_block.ore_aluminum_asteroids.name=Алюминиевая руда +tile.asteroids_block.ore_ilmenite_asteroids.name=Ильменитовая руда +tile.asteroids_block.ore_iron_asteroids.name=Железная руда +tile.asteroids_block.asteroid_deco.name=Тёмный декоративный блок +tile.asteroids_block.titanium_block.name=Титановый блок +tile.beam_receiver.description=Лучевые приёмники присоединяются к входу и выходу энергии механизма, чтобы передавать энергию с помощью лучей. +tile.beam_receiver.name=Лучевой приёмник энергии +tile.beam_reflector.description=Лучевые отражатели используются для перенаправления энергетических лучей от источника к месту назначения. ПКМ по отражателю, чтобы менять цели. +tile.beam_reflector.name=Лучевой отражатель энергии +tile.cavern_vines.description=Пещерные лианы опасны для живых существ тем, что они опутывают их и тащат вверх. +tile.cavern_vines.name=Пещерные лианы +tile.crashed_probe.name=Разбившийся зонд +tile.creeper_egg.description=Яйца крипера появляются в сокровищницах Марса, из них при взрыве вылупляется скрытный хищник. +tile.creeper_egg.name=Яйцо крипера +tile.cryo_chamber.description=Криогенные камеры позволят игроку спать днём, восстанавливая тем самым небольшое количество здоровья, но имеют задержку в использовании. +tile.dense_ice.name=Плотный лёд +tile.electrolyzer.description=Преобразует воду в водород (нужен для Синтезатора метана) и кислород. +tile.gas_liquefier.description=Сжижает газы из атмосферы или из канистры. Сжиженный метан отлично подходит в качестве ракетного топлива! +tile.geothermal_generator.description=Генерирует энергию при размещении на серный гейзер. Уровень производимой энергии колеблется. +tile.geothermal_generator.name=Геотермальный генератор +tile.hydrogen_pipe.description=Труба для водорода будет передавать водород из внутреннего резервуара одного механизма к другому. +tile.hydrogen_pipe.name=Водородная труба +tile.launch_controller.description=Контроллеры запуска используются для настройки параметров автоматического запуска, включая условия старта и пункт назначения. +tile.laser_turret.name=Лазерная турель +tile.laser_turret.description=Может стрелять по метеорам, игрокам и мобам +tile.mars.coppermars.name=Медная руда +tile.mars.deshmars.name=Руда деш +tile.mars.ironmars.name=Железная руда +tile.mars.marscobblestone.name=Марсианский булыжник +tile.mars.marsdeco.name=Блок деш +tile.mars.marsdirt.name=Марсианский реголит +tile.mars.marsdungeon.name=Кирпич марсианской сокровищницы +tile.mars.marsgrass.name=Марсианский мелкодисперсный реголит +tile.mars.marsstone.name=Марсианский камень +tile.mars.tinmars.name=Оловянная руда +tile.mars_machine.0.name=Терраформер +tile.mars_machine.1.name=Криогенная камера +tile.mars_machine.2.name=Контроллер запуска +tile.mars_machine.4.name=Сжижитель газа +tile.mars_machine.5.name=Синтезатор метана +tile.mars_machine.6.name=Электролизёр воды +tile.mars_stairs_brick.name=Ступеньки из кирпича марсианской сокровищницы +tile.mars_stairs_cobblestone.name=Ступеньки из марсианского булыжника +tile.methane_synthesizer.description=При наличии источников водорода и углерода он производит метан для дальнейшей обработки в Сжижителе газа. +tile.miner_base.description=Основание астрономического шахтёра - это точка стыковки для астрономического шахтёра. Оно большое... попробуйте сделать куб 2x2x2 из блоков основания. +tile.miner_base.name=Основание астрономического шахтёра +tile.miner_base_full.name=Основание астрономического шахтёра +tile.slab_gc_half.mars_bricks_slab.name=Плита из кирпича марсианской сокровищницы +tile.slab_gc_half.mars_slab.name=Плита из марсианского булыжника +tile.slab_gc_half.asteroids_slab.name=Тёмная декоративная плита +tile.slimeling_egg.blue.name=Синее яйцо Слаймлинга +tile.slimeling_egg.description=Яйца Слаймлингов: если разбить их голыми руками, то скоро из них вылупится питомец. +tile.slimeling_egg.red.name=Красное яйцо Слаймлинга +tile.slimeling_egg.yellow.name=Желтое яйцо Слаймлинга +tile.sludge.name=Бактериальный осадок +tile.solar_array_controller.name=Контроллер солнечной батареи +tile.solar_array_controller.description=Подключите Модули солнечной батареи к этому блоку для подачи питания. Наиболее эффективен на космических станциях. +tile.solar_array_module.name=Модуль солнечной батареи +tile.solar_array_module.description=Подключите несколько таких блоков к Контроллеру солнечной батареи, чтобы обеспечить питание. Наиболее эффективны на космических станциях. +tile.spout.name=Серный гейзер +tile.sulphuric_acid.name=Серная кислота +tile.telepad_short.description=Короткодистанционные телепорты используются для перемещения игроков и других живых существ на короткие дистанции (250 блоков), если они присоединены к другим телепортам. +tile.telepad_short.name=Короткодистанционный телепорт +tile.terraformer.description=Терраформеры используются для добавления зелени дальним планетам: добавляют траву, деревья и воду, если имеются нужные материалы. +tile.treasure_t2.description=Сундуки с сокровищами 2-го уровня генерируются в сокровищницах Марса. Их можно открыть после победы над финальным боссом. +tile.treasure_t2.name=Сундук с сокровищами 2-го уровня +tile.treasure_t3.description=Сундуки с сокровищами 3-го уровня генерируются в сокровищницах Венеры. Их можно открыть после победы над финальным боссом. +tile.treasure_t3.name=Сундук с сокровищами 3-го уровня +tile.venus.dungeon_brick_venus_1.name=Кирпичи сокровищницы Венеры I +tile.venus.dungeon_brick_venus_2.name=Кирпичи сокровищницы Венеры II +tile.venus.venus_ore_aluminum.name=Алюминивая руда +tile.venus.venus_ore_copper.name=Медная руда +tile.venus.venus_ore_galena.name=Галенитовая руда +tile.venus.venus_ore_quartz.name=Кварцевая руда +tile.venus.venus_ore_silicon.name=Кремниевая руда +tile.venus.venus_ore_solar.name=Солнечная руда +tile.venus.venus_ore_tin.name=Оловянная руда +tile.venus.venus_rock_0.name=Мягкий Венерианский камень +tile.venus.venus_rock_1.name=Твердый Венерианский камень +tile.venus.venus_rock_2.name=Вулканический Венерианский камень +tile.venus.venus_rock_3.name=Пемза +tile.venus.lead_block.name=Свинцовый блок +tile.venus_rock_scorched.name=Обожжённый Венерианский камень +tile.walkway.walkway.description=Дорожки используются в декоративных целях и для соединения блоков в космическом стиле. +tile.walkway.walkway.name=Дорожка +tile.walkway.walkway_pipe.description=Дорожки для жидкостных труб используются для прокладывания труб под полностью твёрдой поверхностью. +tile.walkway.walkway_pipe.name=Дорожка +tile.walkway.walkway_wire.description=Дорожки для алюминиевых проводов используются для прокладывания проводов под полностью твёрдой поверхностью. +tile.walkway.walkway_wire.name=Дорожка +tile.wall_gc.mars.name=Стена из марсианского булыжника +tile.wall_gc.mars_bricks.name=Стена из кирпича марсианской сокровищницы +tile.web_torch.web_torch_0.name=Свисающая паутина +tile.web_torch.web_torch_1.description=Факел из светящегося камня +tile.web_torch.web_torch_1.name=Свисающая паутина +achievement.mars=На Марс! +achievement.mars.desc=Отправьте ракету 2-го уровня на Марс! +achievement.asteroids=В Пояс астероидов! +achievement.asteroids.desc=Отправьте ракету 3-го уровня в Пояс астероидов! +achievement.venus=На Венеру! +achievement.venus.desc=Отправьте ракету 3-го уровня на Венеру! diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/sv_se.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/sv_se.lang new file mode 100644 index 00000000..c253c30c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/sv_se.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Inträdeskapsel +container.launchcontroller.name=Raketfjärrstyrare +container.mars_lander.name=Landningskudde +container.short_range_telepad.name=Kortdistansteleporterare +container.tile_terraformer.name=Terraformare +dimension.mars.name=Mars +entity.astro_miner.name=Astrobrytare +entity.creeper_boss.name=Marshålehärskare +entity.entry_pod.name=Inträdeskapsel +entity.grapple_hook.name=Änterhake +entity.landing_balloons.name=Landningskudde +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Fraktraket +entity.rocket_t2.name=N2-raket +entity.rocket_t3.name=N3-raket +entity.slimeling.name=Slemvarelse +entity.sludgeling.name=Sörjigel +entity.small_asteroid.name=Liten asteroid +fluid.argon=Argon +fluid.atmosphericgases=Atmosfärsgaser +fluid.bacterialsludge=Bakteriell sörja +fluid.carbondioxide=Koldioxid +fluid.fuel=Bränsle +fluid.helium=Helium +fluid.hydrogen=Vätgas +fluid.liquidargon=Flytande argon +fluid.liquidmethane=Flytande metan +fluid.liquidnitrogen=Flytande kväve +fluid.liquidoxygen=Flytande syre +fluid.methane=Metangas +fluid.nitrogen=Kvävgas +fluid.oxygen=Syrgas +gas.carbondioxide.name=Koldioxid +gas.nitrogen.name=Kväve +gas.oxygen.name=Syre +gc.configgui.astro_miners_max=Maximum number of Astro Miners per player +gc.configgui.dimension_id_asteroids=Asteroids Dimension ID +gc.configgui.dimension_id_mars=Mars Dimension ID +gc.configgui.disable_galacticraft_helium=Disable Helium gas registration +gc.configgui.id_schematic_cargo_rocket=Cargo Rocket Schematic ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Rocket Schematic ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Rocket Schematic ID +gc.configgui.launch_controller_all_dims=Launch Controller All Dimensions +gc.configgui.launch_controller_chunk_load=Launch Controller Chunkloading +gc.configgui.planets.title=Galacticraft Planets Config +gui.button.liquefy.name=Starta +gui.button.liquefy_stop.name=Stäng av +gui.button.recall.name=Recall ##NEEDS TRANSLATE## +gui.carbon_slot.desc.0=Fack för kolflis +gui.cargorocket.status.launched.0=Redan +gui.cargorocket.status.launched.1=avfyrad +gui.cargorocket.status.waiting.0=Inväntar +gui.cargorocket.status.waiting.1=avfyrning +gui.choose_planet.desc.mars=Habitable#No Oxygen#Gravity: 38% +gui.cryogenic.chat.cant_use=Kan inte användas förrän %d sekunder har gått! +gui.gas_input.desc.0=Fack för gastank +gui.gas_input.desc.1=eller atmosfärsventil +gui.gas_tank.desc.0=Gaskärl +gui.gas_tank_compressed.desc.0=Gaskärl +gui.hydrogen_input.desc.0=Fack för vätgastank +gui.hydrogen_input.desc.1=eller atmosfärsventil +gui.launch_controller.desc.0=Fjärrstyrarens inställda frekvens +gui.launch_controller.desc.1=Koordinatfrekvens raketen ska$avfyras till +gui.launch_controller.desc.2=Om raketrampen ska tas$bortvid uppskjutning +gui.launch_controller.desc.3=När detta vilkor uppnås$avfyras raketen +gui.launch_controller.desc.4=Hide destination frequency$from other players ##NEEDS TRANSLATE## +gui.liquid_output.desc.2=kondenskärl +gui.liquid_tank.desc.0=Liquid Tank +gui.message.address.name=Adress +gui.message.astro_miner.fail=Denna station har redan en annan astrobrytare! +gui.message.astro_miner1.fail=Stationens ingång blockeras av: +gui.message.astro_miner1_a.fail=The Astro Miner's route is blocked by: ##NEEDS TRANSLATE## +gui.message.astro_miner2.fail=Det skulle bli en astrobrytare för mycket! +gui.message.astro_miner3.fail=Astrobrytarens station har tagits bort! +gui.message.astro_miner4.fail=Astrobrytaren har slut på ström! +gui.message.astro_miner5.fail=Astrobrytarens väg till stationen kan vara blockerad! +gui.message.astro_miner6.fail=Astrobrytaren har slutfört brytning av detta områded och kommer nu sluta! +gui.message.astro_miner7.fail=There's nothing for an Astro Miner to mine on a space station! ##NEEDS TRANSLATE## +gui.message.astro_miner8.fail=A second Astro Miner was detected at the same base, the first will now freeze. ##NEEDS TRANSLATE## +gui.message.bubble_exp.name=Bubbelexpansion +gui.message.cargo_full.name=Fullastad +gui.message.cargo_unloaded.name=Urlastad +gui.message.dest_address.name=Måladress +gui.message.dest_frequency.name=Målfrekvens +gui.message.enable_grass.name=Gräs: på +gui.message.enable_trees.name=Träd: på +gui.message.frequency.name=Frekvens +gui.message.fully_fueled.name=Fulltankad +gui.message.grapple.fail=Tråd behövs till änterhaken! +gui.message.grass.name=Gräs +gui.message.instant.name=Omedelbart +gui.message.invalid_address.name=Ogiltig adress +gui.message.invalid_freq.name=Ogiltig frekvens +gui.message.invalid_target_address.name=Ogiltig måladress +gui.message.launch_when.name=Avfyra när +gui.message.low_energy.name=Strömbrist +gui.message.no_bonemeal.name=Benmjöl saknas +gui.message.no_energy.name=Strömbrist +gui.message.no_saplings.name=Träplantor saknas +gui.message.no_seeds.name=Frön saknas +gui.message.no_valid_blocks.name=Saknar block att terraforma +gui.message.no_water.name=Vattenbrist +gui.message.not_enough.name=Saknar +gui.message.not_enough_energy.name=Strömbrist! +gui.message.not_set.name=Ej inställd +gui.message.one_min.name=1 minut +gui.message.receiving_active.name=Mottagning aktiv +gui.message.redstone_sig.name=Rödstensignal +gui.message.remove_pad.name=Ta bort ramp +gui.message.sending_active.name=Sändning aktiv +gui.message.success.name=Success +gui.message.target_no_energy.name=Målet har brist på ström! +gui.message.telepad_not_found.name=Teleporterare ej funnen! +gui.message.telepad_too_far.name=För avlägset! (Max. %d) +gui.message.telepad_wrong_dim.name=Otillgänglig dimension! +gui.message.ten_sec.name=10 sekunder +gui.message.terraforming.name=Terraformar +gui.message.thirty_sec.name=30 sekunder +gui.message.trees.name=Träd +gui.message.with_atmosphere0.name=на планете с большим количеством +gui.message.with_atmosphere1.name=в атмосфере +gui.message.zero_water.name=Vattenbrist! +gui.methane_output.desc.2=metankärl +gui.miner.docked=Docked ##NEEDS TRANSLATE## +gui.miner.docking=Docking ##NEEDS TRANSLATE## +gui.miner.mined=Mined ##NEEDS TRANSLATE## +gui.miner.mining=Mining ##NEEDS TRANSLATE## +gui.miner.offline=Offline ##NEEDS TRANSLATE## +gui.miner.out_of_range=Out of range ##NEEDS TRANSLATE## +gui.miner.returning=Returning ##NEEDS TRANSLATE## +gui.miner.stuck=Stuck at: ##NEEDS TRANSLATE## +gui.miner.travelling=Travelling ##NEEDS TRANSLATE## +gui.slimeling.button.follow=Följ +gui.slimeling.button.sit=Sitt +gui.slimeling.chat.wrong_player=Detta är inte min slemvarelse! +gui.slimeling.damage=Attackskada +gui.slimeling.following=Följer +gui.slimeling.food=Favoritmat +gui.slimeling.kills=Dräpta +gui.slimeling.name=Namn +gui.slimeling.owner=Ägare +gui.slimeling.scale=Storlek +gui.slimeling.sitting=Sitter +gui.status.liquefying.name=Kondenserar +gui.status.needs_carbon.name=Kol saknas +gui.status.nogas.name=Ingen gas +gui.status.processing.name=Framställer +gui.status.tankfull.name=Tank full +gui.status.tanksfull.name=Tankar fulla +gui.telepad.desc.0=Teleporterarens$intällda adress +gui.telepad.desc.1=Ange annan teleporterares adress$för att dirigera objekt dit. +gui.terraformer.desc.0=Vattenkärl +gui.water_bucket_slot.desc=Fack för vattenhinkning +item.astro_miner.name=Astrobrytare +item.atmospheric_valve.name=Atmosfärsventil +item.beam_core.name=Strålnav +item.bucket_sludge.name=Bakteriell sörjhink +item.canister.gas.name=Mängd #short name for Methane Gas contents level +item.canister.liquid_argon.full.name=Full tank (flytande argon) +item.canister.liquid_argon.name=Mängd #short name for Liquid Argon contents level +item.canister.liquid_argon.partial.name=Tank (flytande argon) +item.canister.liquid_nitrogen.full.name=Full tank (flytande kväve) +item.canister.liquid_nitrogen.name=Mängd #short name for Liquid Nitrogen contents level +item.canister.liquid_nitrogen.partial.name=Tank (flytande kväve) +item.canister.lox.full.name=Full tank (flytande syre) +item.canister.lox.name=Mängd #short name for Liquid Oxygen contents level +item.canister.lox.partial.name=Tank (flytande syre) +item.carbon_fragments.name=Kolflis +item.compressed_desh.name=Deshplåt +item.compressed_titanium.name=Titanplåt +item.desh_axe.name=Deshyxa +item.desh_boots.name=Deshstövlar +item.desh_chestplate.name=Deshharnesk +item.desh_helmet.name=Deshhjälm +item.desh_hoe.name=Deshflohacka +item.desh_leggings.name=Deshbyxor +item.desh_pick.name=Deshhacka +item.desh_pick_slime.description.name=Kan skörda smygarägg +item.desh_pick_slime.name=Klibbig deshhacka +item.desh_spade.name=Deshspade +item.desh_stick.name=Deshpinne +item.desh_sword.name=Deshsvärd +item.empty_gas_canister.name=Tom gastank +item.engine_t2.name=Förstärkt raketmotor +item.fluid_manip.name=Flödeshanterare +item.grapple.name=Änterhake +item.heavy_nose_cone.name=Förstärkt raketnos +item.ingot_desh.name=Deshtacka +item.ingot_titanium.name=Titantacka +item.key.t2.name=Marsiansk skattkistnyckel +item.methane_canister.name=Full metangastank +item.methane_canister_partial.name=Metangastank +item.orion_drive.name=Orionmotor +item.raw_desh.name=Deshflis +item.reinforced_plate_t2.name=Förstärkt plåt +item.reinforced_plate_t3.name=Förstärkt plåt +item.rocket_fins_t2.name=Förstärkt raketfena +item.rocket_t2.cargo_rocket.name=Fraktraket +item.rocket_t2.t2Rocket.name=N2-raket +item.rocket_t3.t3Rocket.name=N3-raket +item.shard_iron.name=Järnflis +item.shard_titanium.name=Titanflis +item.slimeling_cargo.name=Last +item.thermal_boots.name=Termosunderställstrumpor +item.thermal_chestplate.name=Termosunderställströja +item.thermal_cloth.name=Värmereglerande tyg +item.thermal_helm.name=Termosunderställshuva +item.thermal_leggings.name=Termosunderställsbyxor +item.tier2.desc=Nivå 2 +item.tier3.desc=Nivå 3 +item.titanium_axe.name=Titanyxa +item.titanium_boots.name=Titanstövlar +item.titanium_chestplate.name=Titanharnesk +item.titanium_helmet.name=Titanhjälm +item.titanium_hoe.name=Titanflohacka +item.titanium_leggings.name=Titanbyxor +item.titanium_pickaxe.name=Titanhacka +item.titanium_shovel.name=Titanspade +item.titanium_sword.name=Titansvärd +planet.asteroids=Huvudbältet +planet.mars=Mars +schematic.astro_miner.name=Astrobrytare +schematic.cargo_rocket.name=Automatisk fraktraket +schematic.rocket_t3.name=N3-raket +tile.asteroids_block.asteroid_rock_0.name=Asteroidmineral +tile.asteroids_block.asteroid_rock_1.name=Asteroidmineral +tile.asteroids_block.asteroid_rock_2.name=Asteroidmineral +tile.asteroids_block.ore_aluminum_asteroids.name=Aluminiummalm +tile.asteroids_block.ore_ilmenite_asteroids.name=Ilmenitmalm +tile.asteroids_block.ore_iron_asteroids.name=Järnmalm +tile.beam_receiver.description=Strålmotagaren ansluts intill en eldriven maskin för at föra in/ut ström. +tile.beam_receiver.name=Energistrålmotagare +tile.beam_reflector.description=Strålreflektorn utökar en energistråles räckvidd samt kan avleda den åt valfri riktning. Högerklicka för att ändra. +tile.beam_reflector.name=Energistrålreflektor +tile.cavern_vines.description=Grottnässlor skjuter ut ett kraftfullt gift vid beröring. Offer som blivit insnärjda hängs uppochner. +tile.cavern_vines.name=Grottnässlor +tile.creeper_egg.description=Smygarägg förekommer i marsianska hålor. Kläckningen sker explosionsartat. +tile.creeper_egg.name=Smygarägg +tile.cryo_chamber.description=Den kryogeniska kammaren tillåter spelaren att sova närsomhelst på dygnet med något läkande effekt. Kräver återhämtningstid efter användning. +tile.dense_ice.name=Kompakt is +tile.electrolyzer.description=Delar vattenmolekyler till vätgas (används för metanframställning) och syrgas. +tile.gas_liquefier.description=Kondenserar gas utvunnen från atmosfären (kräver atmosfärsventil) eller en gasledning. Flytande metan är ett utmärkt raketbränsle! +tile.hydrogen_pipe.description=Vätgasledningar överför vätgas från en maskins lagringskärl till en annans. +tile.hydrogen_pipe.name=Väteledning +tile.launch_controller.description=Raketfjärrstyraren kan ställas in med automatiska avfyrningsinstruktioner. T.ex. vilkor för avfyrning och målkoordinater. +tile.mars.coppermars.name=Kopparmalm +tile.mars.deshmars.name=Deshmalm +tile.mars.ironmars.name=Järnmalm +tile.mars.marscobblestone.name=Marsiansk kullersten +tile.mars.marsdeco.name=Deshblock +tile.mars.marsdirt.name=Marianskt ytberg +tile.mars.marsdungeon.name=Marsianskt håletegel +tile.mars.marsgrass.name=Marsianskt sedimentberg +tile.mars.marsstone.name=Marsianskt djupberg +tile.mars.tinmars.name=Tennmalm +tile.mars_stairs_cobblestone.name=Marsstentrappa +tile.mars_stairs_brick.name=Marsiansk hålestentrappa +tile.mars_machine.0.name=Terraformare +tile.mars_machine.1.name=Kryogenisk kammare +tile.mars_machine.2.name=Raketfjärrstyrare +tile.mars_machine.4.name=Gaskyl +tile.mars_machine.5.name=Metanframställare +tile.mars_machine.6.name=Vattenelektrolys +tile.methane_synthesizer.description=Med en tillförsel på vätgas och kol tillverkar denna metangas för vidare bearbetning med gaskylen. +tile.miner_base.description=Astrobrytarstationen agerar som dockningsstation till astrobrytaren. I.o.m. sin storlek måste 8 av dessa block läggas i en 2x2x2-kub. +tile.miner_base.name=Astrobrytarstation +tile.slab_gc_half.mars_bricks_slab.name=Marsiansk hålestenplatta +tile.slab_gc_half.mars_slab.name=Marsstenplatta +tile.slimeling_egg.blue.name=Blått slemvarelseägg +tile.slimeling_egg.description=När slemvarelseägg knäcks med spelarens bara händer kläcks det snart till ett husdjur. +tile.slimeling_egg.red.name=Rött slemvarelseägg +tile.slimeling_egg.yellow.name=Gult slemvarelseägg +tile.sludge.name=Bakteriell sörja +tile.telepad_short.description=Kortdistansteleporteraren överför spelare och andra levande varelser (250 Blocks) adresserad till en annan teleporterare. +tile.telepad_short.name=Kortdistansteleporterare +tile.terraformer.description=Terraformaren sprider grönska på avlägsna himlakroppar. Matas in med vatten, benmjöl, träplantor och frön. +tile.treasure_t2.description=Marsianska skattkistor förekommer i slutet på marshålor. Den tillhörande nyckeln vaktas av marshålans härskare. +tile.treasure_t2.name=Marsiansk skattkista +tile.treasure_t3.description=Asteroidskattkistor har inte riktigt intförts än. +tile.treasure_t3.name=Asteroidskattkista +tile.walkway.walkway.description=Gångbroar är dekorativa block som anluter till andra intilliggande block. +tile.walkway.walkway.name=Gångbro +tile.walkway.walkway_pipe.description=Syrgasledning inbyggd i en gångbro bildar en promenadvänlig yta. +tile.walkway.walkway_pipe.name=Gångbro (syrgasledning) +tile.walkway.walkway_wire.description=Aluminiumledning inbyggd i en gångbro bildar en promenadvänlig yta. +tile.walkway.walkway_wire.name=Gångbro (elledning) +tile.wall_gc.mars.name=Marsstenvägg +tile.wall_gc.mars_bricks.name=Marsiansk hålevägg diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/th_th.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/th_th.lang new file mode 100644 index 00000000..9cdb9608 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/th_th.lang @@ -0,0 +1,365 @@ +checklist.craft_grapple_hook.key=สร้างตะขอเกี่ยว +checklist.equip_shield_controller.key=ใส่เครื่องสร้างเกราะพลัง +checklist.thermal_padding.key=ใส่เกราะกันความร้อน +checklist.thermal_padding_t2.key=ใส่เกราะกันความร้อน เทียร์ 2 +container.crashed_probe.name=โพรบที่พัง +container.entry_pod.name=ยานลงจอด +container.geothermal_generator.name=เครื่องผลิตความร้อนใต้พิภพ +container.launchcontroller.name=เครื่องควบคุมการปล่อยจรวด +container.mars_lander.name=ยานบอลลูน +container.short_range_telepad.name=เครื่องเทเลพอร์ตระยะใกล้ +container.slimeling_inventory.name=ช่องเก็บของสไลม์ลิ่ง +container.tile_terraformer.name=เทอราฟอร์เมอร์ +dimension.mars.name=ดาวอังคาร +entity.astro_miner.name=แอสโทรไมเนอร์ +entity.creeper_boss.name=บอสคริปเปอร์กลายพันธุ์ +entity.entry_pod.name=ยานลงจอด +entity.entry_pod_venus.name=ยานลงจอดดาวศุกร์ +entity.grapple_hook.name=ตะขอ +entity.juicer.name=จุยเซอร์ +entity.landing_balloons.name=ยานลงจอดบอลลูน +entity.projectile_tnt.name=โพรเจกไทล์ TNT +entity.rocket_cargo.name=จรวดขนส่ง +entity.rocket_t2.name=จรวด เทียร์ 2 +entity.rocket_t3.name=จรวด เทียร์ 3 +entity.slimeling.name=สไลม์ลิ่ง +entity.sludgeling.name=หนอนแบคทีเรีย +entity.small_asteroid.name=ดาวเคราะห์น้อยขนาดเล็ก +entity.spider_queen.name=ราชินีแมงมุม +entity.web_shot.name=ลูกกระสุนใยแมงมุม +fluid.argon=ก๊าซอาร์กอน +fluid.atmosphericgases=ก๊าซชั้นบรรยากาศ +fluid.bacterialsludge=ตะกอนแบคทีเรีย +fluid.carbondioxide=ก๊าซคาร์บอนไดออกไซด์ +fluid.fuel=เชื้อเพลิง +fluid.helium=ก๊าซฮีเลียม +fluid.hydrogen=ก๊าซไฮโดรเจน +fluid.liquidargon=อาร์กอนเหลว +fluid.liquidmethane=มีเทนเหลว +fluid.liquidnitrogen=ไนโตรเจนเหลว +fluid.liquidoxygen=ออกซิเจนเหลว +fluid.methane=ก๊าซมีเทน +fluid.nitrogen=ก๊าซไนโตรเจน +fluid.oil=น้ำมัน +fluid.oxygen=ก๊าซออกซิเจน +fluid.sulphuricacid=กรดกำมะถัน +gas.carbondioxide.name=คาร์บอนไดออกไซด์ +gas.nitrogen.name=ไนโตรเจน +gas.oxygen.name=ออกซิเจน +gc.configgui.astro_miners_max=จำนวนสูงสุดของแอสโทรไมเนอร์ต่อผู้เล่น +gc.configgui.dimension_id_asteroids=ID มิติดาวเคราะห์น้อย +gc.configgui.dimension_id_mars=ID มิติดาวอังคาร +gc.configgui.dimension_id_venus=ID มิติดาวศุกร์ +gc.configgui.disable_aluminum_gen_asteroids=ปิดใช้งานการเจนเนอเรทแร่อลูมิเนียม (ดาวเคราะห์น้อย) +gc.configgui.disable_ambient_lightning=ปิดใช้งานฟ้าแลบบนดาวศุกร์ +gc.configgui.disable_copper_gen_mars=ปิดใช้งานการเจนเนอเรทแร่ทองแดง (ดาวอังคาร) +gc.configgui.disable_desh_gen_mars=ปิดใช้งานการเจนเนอเรทแร่เดรช (ดาวอังคาร) +gc.configgui.disable_galacticraft_helium=ปิดใช้งานก๊าซฮีเลียมบนดาวเคราะห์ +gc.configgui.disable_ilmenite_gen_asteroids=ปิดใช้งานการเจนเนอเรทแร่อิลเมไนท์ (ดาวเคราะห์น้อย) +gc.configgui.disable_iron_gen_asteroids=ปิดใช้งานการเจนเนอเรทแร่เหล็ก (ดาวเคราะห์น้อย) +gc.configgui.disable_iron_gen_mars=ปิดใช้งานการเจนเนอเรทแร่เหล็ก (ดาวอังคาร) +gc.configgui.disable_tin_gen_mars=ปิดใช้งานการเจนเนอเรทแร่ดีบุก (ดาวอังคาร) +gc.configgui.disable_venus_aluminum_gen=ปิดใช้งานการเจนเนอเรทแร่อลูมิเนียม (ดาวศุกร์) +gc.configgui.disable_venus_copper_gen=ปิดใช้งานการเจนเนอเรทแร่ทองแดง (ดาวศุกร์) +gc.configgui.disable_venus_galena_gen=ปิดใช้งานการเจนเนอเรทแร่ตะกั่ว (ดาวศุกร์) +gc.configgui.disable_venus_quartz_gen=ปิดใช้งานการเจนเนอเรทแร่ควอตซ์ (ดาวศุกร์) +gc.configgui.disable_venus_silicon_gen=ปิดใช้งานการเจนเนอเรทแร่ซิลิคอน (ดาวศุกร์) +gc.configgui.disable_venus_tin_gen=ปิดใช้งานการเจนเนอเรทแร่ดีบุก (ดาวศุกร์) +gc.configgui.id_schematic_cargo_rocket=ID แผนผังจรวดขนส่ง +gc.configgui.id_schematic_rocket_t2=ID แผนผังจรวด เทียร์ 2 +gc.configgui.id_schematic_rocket_t3=ID แผนผังจรวด เทียร์ 3 +gc.configgui.launch_controller_all_dims=เปิดใช้งานเครื่องควบคุมการปล่อยจรวดให้โหลดทุกมิติ +gc.configgui.launch_controller_chunk_load=เปิดใช้งานเครื่องควบคุมการปล่อยจรวดให้โหลด Chunk +gc.configgui.planets.title=การตั้งค่ากาแลคติคคราฟต์ - ดาวเคราะห์ +gui.button.liquefy.name=เริ่มทำงาน +gui.button.liquefy_stop.name=หยุดทำงาน +gui.button.recall.name=เรียกกลับ +gui.carbon_slot.desc.0=ใส่สะเก็ดคาร์บอนตรงนี้ +gui.cargorocket.status.launched.0=จรวดถูก +gui.cargorocket.status.launched.1=ปล่อยแล้ว +gui.cargorocket.status.waiting.0=รอการ +gui.cargorocket.status.waiting.1=จุดระเบิด +gui.choose_planet.desc.mars=อาศัยอยู่ได้#ไม่มีออกซิเจน#แรงโน้มถ่วง: 38% +gui.cryogenic.chat.cant_use=ฉันไม่สามารถใช้ตู้นี้ได้เป็นเวลา %d วินาที +gui.gas_input.desc.0=วางกระป๋องที่บรรจุมีเทนหรือ +gui.gas_input.desc.1=วาล์วเก็บก๊าซตรงนี้ +gui.gas_tank.desc.0=ก๊าซที่เก็บไว้ +gui.gas_tank_compressed.desc.0=ก๊าซที่บีบอัดไว้ +gui.hydrogen_input.desc.0=วางถังไฮโดรเจน +gui.hydrogen_input.desc.1=หรือวาล์วเก็บก๊าซ +gui.launch_controller.advanced=ขั้นสูง +gui.launch_controller.desc.0=นี่คือเครื่องควบคุมการปล่อยจรวด$ความถี่เฉพาะ +gui.launch_controller.desc.1=ความถี่ที่ใกล้จะปล่อยจรวด +gui.launch_controller.desc.2=ถ้าจรวดถูกปล่อย ฐานปล่อย$จรวดจะถูกลบออก +gui.launch_controller.desc.3=เมื่อตัวเลือกตรงกับที่ตั้งไว้$จรวดจะถูกปล่อย +gui.launch_controller.desc.4=ซ่อนเป้าหมายความถี่$จากผู้เล่นคนอื่น ๆ +gui.launch_controller.owner=เจ้าของ +gui.liquid_output.desc.2=ถังก๊าซเหลว +gui.liquid_tank.desc.0=ถังของเหลว +gui.message.address.name=ที่อยู่ +gui.message.astro_miner.fail=ฐานนี้มีแอสโทรไมเนอร์แล้ว! +gui.message.astro_miner1.fail=พื้นที่โรงจอดถูกปิดกั้นโดย: +gui.message.astro_miner1_a.fail=เส้นทางของแอสโทรไมเนอร์ถูกบล็อกโดย: +gui.message.astro_miner1_b.fail=พื้นที่มีการป้องกัน! +gui.message.astro_miner2.fail=มีแอสโทรไมเนอร์มากเกินไป! +gui.message.astro_miner3.fail=ฐานแอสโทรไมเนอร์ถูกลบออกไป! +gui.message.astro_miner4.fail=แอสโทรไมเนอร์พลังงานหมดและไม่สามารถกลับไปยังฐานได้! +gui.message.astro_miner5.fail=เส้นทางของแอสโทรไมเนอร์ที่กลับไปยังฐาน ดูเหมือนว่าจะถูกปิดกั้น! +gui.message.astro_miner6.fail=แอสโทรไมเนอร์ทำเหมืองเสร็จเรียบร้อย และจะหยุดทำงาน! +gui.message.astro_miner7.fail=แอสโทรไมเนอร์ไม่สามารถทำงานได้บนสถานีอวกาศ! +gui.message.astro_miner8.fail=แอสโทรไมเนอร์คันที่สองถูกตรวจพบในฐานแรก, แอสโทรไมเนอร์คันแรกจะหยุดทำงาน +gui.message.bubble_exp.name=ขยายฟองอากาศ +gui.message.cargo_full.name=จรวดขนส่งเต็ม +gui.message.cargo_unloaded.name=จรวดขนส่งถ่ายสินค้าแล้ว +gui.message.dest_address.name=เป้าหมายของที่อยู่ +gui.message.dest_frequency.name=เป้าหมายความถี่ +gui.message.enable_grass.name=เปิดใช้งานหญ้า +gui.message.enable_trees.name=เปิดใช้งานต้นไม้ +gui.message.frequency.name=ความถี่ +gui.message.fully_fueled.name=เชื้อเพลิงเต็ม +gui.message.grapple.fail=ฉันต้องการเส้นใยจำนวนเล็กน้อย ถ้าจะใช้ตะขอ! +gui.message.grass.name=หญ้า +gui.message.instant.name=โดยตรง +gui.message.invalid_address.name=ที่อยู่ผิดพลาด +gui.message.invalid_freq.name=ความถี่ไม่ถูกต้อง +gui.message.invalid_target_address.name=ที่อยู่ของเป้าหมายผิดพลาด +gui.message.launch_when.name=ปล่อยเมื่อ +gui.message.low_energy.name=พลังงานต่ำ +gui.message.low_energy_output.name=ส่งออกพลังงานต่ำ +gui.message.no_bonemeal.name=ผงกระดูกไม่พอ +gui.message.no_energy.name=พลังงานไฟฟ้าไม่พอ +gui.message.no_saplings.name=ต้นกล้าไม่พอ +gui.message.no_seeds.name=เมล็ดไม่พอ +gui.message.no_valid_blocks.name=ไม่มีบล็อกที่ตรงกันในฟองอากาศ +gui.message.no_water.name=น้ำไม่พอ +gui.message.not_enough.name=ไม่พอ +gui.message.not_enough_energy.name=พลังงานไม่พอ! +gui.message.not_set.name=ไมได้ตั้งไว้ +gui.message.one_min.name=1 นาที +gui.message.receiving_active.name=รับข้อมูลการทำงาน +gui.message.redstone_sig.name=สัญญาณเรดสโตน +gui.message.remove_pad.name=ลบฐานปล่อยจรวด +gui.message.sending_active.name=กำลังส่งการทำงาน +gui.message.success.name=เสร็จสิ้น +gui.message.target_no_energy.name=เป้าหมายพลังงานไม่พอ! +gui.message.telepad_not_found.name=ไม่เจอเครื่องเทเลพอร์ต! +gui.message.telepad_too_far.name=เป้าหมายไกลเกินไป! (สูงสุด %d) +gui.message.telepad_wrong_dim.name=เป้าหมายผิดมิติ! +gui.message.ten_sec.name=10 วินาที +gui.message.terraforming.name=กำลังปรับสภาพ +gui.message.thirty_sec.name=30 วินาที +gui.message.trees.name=ต้นไม้ +gui.message.with_atmosphere0.name=ถ้าบนดาวเคราะห์เต็มไปด้วย +gui.message.with_atmosphere1.name=ในชั้นบรรยากาศ +gui.message.zero_water.name=ไม่มีน้ำ! +gui.methane_output.desc.2=ถังมีเทน +gui.miner.docked=จอดแล้ว +gui.miner.docking=กำลังจอด +gui.miner.mined=ขุดแล้ว +gui.miner.mining=กำลังขุด +gui.miner.offline=ออฟไลน์ +gui.miner.out_of_range=ออกจากระยะที่กำหนด +gui.miner.returning=กำลังกลับ +gui.miner.stuck=ติดอยู่ที่: +gui.miner.travelling=กำลังเดินทาง +gui.slimeling.button.follow=ตามเจ้าของ +gui.slimeling.button.sit=นั่ง +gui.slimeling.chat.wrong_player=นี่ไม่ใช่สไลม์ลิ่งของฉัน! +gui.slimeling.damage=แรงโจมตี +gui.slimeling.following=ตามเจ้าของ +gui.slimeling.food=อาหารที่ชอบ +gui.slimeling.kills=ฆ่าได้ +gui.slimeling.name=ชื่อ +gui.slimeling.owner=เจ้าของ +gui.slimeling.scale=ขนาด +gui.slimeling.sitting=นั่ง +gui.status.invalid_spout_1.name=ต้องวางบน +gui.status.invalid_spout_2.name=พวยกำมะถัน +gui.status.liquefying.name=ทำให้เป็นของเหลว +gui.status.needs_carbon.name=ต้องการคาร์บอน +gui.status.nogas.name=ไม่มีก๊าซ +gui.status.processing.name=กำลังสังเคราะห์ +gui.status.tankfull.name=ถังเก็บเต็ม +gui.status.tanksfull.name=ถังเก็บเต็ม +gui.telepad.desc.0=นี่คือที่อยู่ของเครื่องเทเลพอร์ต +gui.telepad.desc.1=ที่อยู่ของเครื่องเทเลพอร์ตอื่น ๆ $สิ่งมีชีวิตจะถูกส่งไปยังเป้าหมาย +gui.terraformer.desc.0=ถังเก็บน้ำ +gui.water_bucket_slot.desc=วางถังน้ำตรงนี้ +item.astro_miner.name=แอสโทรไมเนอร์ +item.atmospheric_valve.name=วาล์วเก็บก๊าซ +item.atomic_battery.name=แบตเตอรี่อะตอม +item.beam_core.name=แกนลำแสง +item.bucket_sludge.name=ถังตะกอนแบคทีเรีย +item.bucket_sulphuric_acid.name=ถังกรดกำมะถัน +item.canister.gas.name=ก๊าซ +item.canister.liquid_argon.full.name=กระป๋องอาร์กอนเหลว +item.canister.liquid_argon.name=อาร์กอนเหลว +item.canister.liquid_argon.partial.name=กระป๋องอาร์กอนเหลว +item.canister.liquid_nitrogen.full.name=กระป๋องไนโตรเจนเหลว +item.canister.liquid_nitrogen.name=ไนโตรเจนเหลว +item.canister.liquid_nitrogen.partial.name=กระป๋องไนโตรเจนเหลว +item.canister.lox.full.name=กระป๋องออกซิเจนเหลว +item.canister.lox.name=ออกซิเจนเหลว +item.canister.lox.partial.name=กระป๋องออกซิเจนเหลว +item.carbon_fragments.name=สะเก็ดคาร์บอน +item.compressed_desh.name=แผ่นเดรช +item.compressed_titanium.name=แผ่นไทเทเนียม +item.desh_axe.name=ขวานเดรช +item.desh_boots.name=รองเท้าเดรช +item.desh_chestplate.name=เสื้อเกราะเดรช +item.desh_helmet.name=หมวกเดรช +item.desh_hoe.name=จอบเดรช +item.desh_leggings.name=กางเกงเดรช +item.desh_pick.name=อีเต้อเดรช +item.desh_pick_slime.description.name=สามารถขุดไข่คริปเปอร์ได้ +item.desh_pick_slime.name=อีเต้อเดรชเหนียว +item.desh_spade.name=พลั่วเดรช +item.desh_stick.name=แท่งเดรช +item.desh_sword.name=ดาบเดรช +item.dust_titanium.name=ผงไทเนียม +item.empty_gas_canister.name=กระป๋องก๊าซเปล่า +item.engine_t2.name=เครื่องยนต์จรวดแบบทนทาน +item.fluid_manip.name=ตัวจัดการของเหลว +item.grapple.name=ตะขอ +item.heavy_nose_cone.name=กรวยจรวดแบบทนทาน +item.ingot_desh.name=แท่งเดรช +item.ingot_lead.name=แท่งตะกั่ว +item.ingot_titanium.name=แท่งไทเทเนียม +item.key.t2.name=กุญแจดันเจี้ยน เทียร์ 2 +item.key.t3.name=กุญแจดันเจี้ยน เทียร์ 3 +item.methane_canister.name=กระป๋องมีเทน +item.methane_canister_partial.name=กระป๋องมีเทน +item.orion_drive.name=เครื่องยนต์ตรวจสอบแร่ +item.prelaunch_checklist.name=รายการตรวจสอบก่อนบิน +item.radioisotope_core.name=แกนเรดิโอไอโซโทป +item.raw_desh.name=เดรชหยาบ +item.reinforced_plate_t2.name=แผ่นโลหะทนทาน +item.reinforced_plate_t3.name=แผ่นโลหะทนทาน +item.rocket_fins_t2.name=ปีกจรวดแบบทนทาน +item.rocket_t2.cargo_rocket.name=จรวดขนส่ง +item.rocket_t2.t2Rocket.name=จรวด เทียร์ 2 +item.rocket_t3.t3Rocket.name=จรวด เทียร์ 3 +item.shard_iron.name=สะเก็ดเหล็ก +item.shard_titanium.name=สะเก็ดไทเทเนียม +item.shield_controller.description=เครื่องสร้างเกราะพลังจะป้องกันการกันกร่อน ในบรรยากาศ +item.shield_controller.name=เครื่องสร้างเกราะพลัง +item.slimeling_cargo.name=กระเป๋าเก็บของสไลม์ลิ่ง +item.strange_seed.name=เมล็ดพันธุ์ประหลาด +item.thermal_boots.name=รองเท้ากันความร้อน +item.thermal_boots_t2.name=รองเท้ากันความร้อน +item.thermal_chestplate.name=เสื้อเกราะกันความร้อน +item.thermal_chestplate_t2.name=เสื้อเกราะกันความร้อน +item.thermal_cloth.name=ผ้ากันความร้อน +item.thermal_fabric.name=เนื้อผ้ากันความร้อน +item.thermal_helm.name=หมวกกันความร้อน +item.thermal_helm_t2.name=หมวกกันความร้อน +item.thermal_leggings.name=กางเกงกันความร้อน +item.thermal_leggings_t2.name=กางเกงกันความร้อน +item.tier2.desc=เทียร์ 2 +item.tier3.desc=เทียร์ 3 +item.titanium_axe.name=ขวานไทเทเนียม +item.titanium_boots.name=รองเท้าไทเทเนียม +item.titanium_chestplate.name=เสื้อเกราะไทเทเนียม +item.titanium_helmet.name=หมวกไทเทเนียม +item.titanium_hoe.name=จอบไทเทเนียม +item.titanium_leggings.name=กางเกงไทเทเนียม +item.titanium_pickaxe.name=อีเต้อไทเทเนียม +item.titanium_shovel.name=พลั่วไทเทเนียม +item.titanium_sword.name=ดาบไทเทเนียม +item.volcanic_pickaxe.description=ขุดในระยะ 3x3 ในทิศทางที่หันหน้าไป +item.volcanic_pickaxe.name=อีเต้อภูเขาไฟ +planet.asteroids=ดาวเคราะห์น้อย +planet.mars=ดาวอังคาร +schematic.astro_miner.name=แอสโทรไมเนอร์ +schematic.cargo_rocket.name=จรวดขนส่งอัตโนมัติ +schematic.rocket_t3.name=จรวด เทียร์ 3 +tile.asteroids_block.asteroid_rock_0.name=หินดาวเคราะห์น้อย +tile.asteroids_block.asteroid_rock_1.name=หินดาวเคราะห์น้อย +tile.asteroids_block.asteroid_rock_2.name=หินดาวเคราะห์น้อย +tile.asteroids_block.ore_aluminum_asteroids.name=แร่อลูมิเนียม +tile.asteroids_block.ore_ilmenite_asteroids.name=แร่อิลเมไนท์ +tile.asteroids_block.ore_iron_asteroids.name=แร่เหล็ก +tile.asteroids_block.asteroid_deco.name=บล็อกตกแต่งมืด +tile.asteroids_block.titanium_block.name=บล็อกไทเทเนียม +tile.beam_receiver.description=ใช้เชื่อมต่อไปยังเครื่องมือต่าง ๆ ทั้งส่งเข้าและส่งออก พลังงานจะถูกส่งโดยใช้ลำแสง +tile.beam_receiver.name=เครื่องรับลำแสง +tile.beam_reflector.description=ใช้สำหรับเปลี่ยนทิศทางของลำแสง จากเป้าหมายไปยังทิศทางอื่น ๆ คลิกขวาเพื่อเปลี่ยนทิศทางการสะท้อน ไปยังเป้าหมายอื่น ๆ +tile.beam_reflector.name=เครื่องสะท้อนลำแสง +tile.cavern_vines.description=สิ่งนี้อันตรายสำหรับสิ่งมีชีวิต มันจะเกี่ยวพันและดึงขึ้นสู่ข้างบน +tile.cavern_vines.name=เถาวัลย์ถ้ำ +tile.crashed_probe.name=โพรบที่พัง +tile.creeper_egg.description=พบได้ในดันเจี้ยนดาวอังคาร และเมื่อไข่ถูกแรงระเบิดจะสปอนคริปเปอร์กลายพันธุ์ออกมา +tile.creeper_egg.name=ไข่คริปเปอร์ +tile.cryo_chamber.description=ผู้เล่นสามารถนอนได้ระหว่างวันโดยใช้ สิ่งนี้ เพิ่มเลือดได้จำนวนเล็กน้อย แต่มีการจำกัดการใช้งาน +tile.dense_ice.name=ก้อนน้ำแข็งหนาทึบ +tile.electrolyzer.description=ใช้เปลี่ยนน้ำให้เป็นไฮโดรเจนกับออกซิเจน และจะมีประโยชน์กับเครื่องสังเคราะห์มีเทน +tile.gas_liquefier.description=ใช้เก็บก๊าซจากชั้นบรรยากาศหรือจาก กระป๋องของเหลว ส่วนมีเทนเหลวสามารถกลั่นและใช้เป็น เชื้อเพลิงจรวดได้เมื่อเสร็จสิ้นการกลั่น +tile.geothermal_generator.description=เมื่อวางเครื่องบนพวยไอกำมะถัน เครื่องจะผลิตพลังงานด้วยอัตราการสั่น ของพวย +tile.geothermal_generator.name=เครื่องผลิตความร้อนใต้พิภพ +tile.hydrogen_pipe.description=ใช้ส่งไฮโดรเจนไปยังเครื่องมืออื่น ๆ ที่ใช้งานไฮโดรเจน +tile.hydrogen_pipe.name=ท่อไฮโดรเจน +tile.launch_controller.description=ใช้สำหรับการปล่อยจรวดในรูปแบบต่าง ๆ รวมถึงการปล่อยจรวดไปยังจุดหมาย สำหรับการปล่อยจรวดอัตโนมัติ +tile.mars.coppermars.name=แร่ทองแดง +tile.mars.deshmars.name=แร่เดรช +tile.mars.ironmars.name=แร่เหล็ก +tile.mars.marscobblestone.name=หินหยาบดาวอังคาร +tile.mars.marsdeco.name=บล็อกเดรช +tile.mars.marsdirt.name=เรโกลิธดาวอังคาร +tile.mars.marsdungeon.name=อิฐดันเจี้ยนดาวอังคาร +tile.mars.marsgrass.name=เรโกลิธดาวอังคารละเอียด +tile.mars.marsstone.name=หินดาวอังคาร +tile.mars.tinmars.name=แร่ดีบุก +tile.mars_machine.0.name=เทอราฟอร์เมอร์ +tile.mars_machine.1.name=ตู้ไครโอเจนิค +tile.mars_machine.2.name=เครื่องควบคุมการปล่อยจรวด +tile.mars_machine.4.name=เครื่องเปลี่ยนสถานะก๊าซ +tile.mars_machine.5.name=เครื่องสังเคราะห์มีเทน +tile.mars_machine.6.name=เครื่องเปลี่ยนน้ำเป็นก๊าซ +tile.mars_stairs_brick.name=บันไดอิฐดันเจี้ยนดาวอังคาร +tile.mars_stairs_cobblestone.name=บันไดหินหยาบดาวอังคาร +tile.methane_synthesizer.description=ใช้ผลิตมีเทนสำหรับใช้ใน เครื่องเปลี่ยนสถานะก๊าซ +tile.miner_base.description=ใช้สำหรับเป็นฐานจอดของแอสโทรไมเนอร์ วางฐานเป็น 2x2x2 เพื่อทำให้ฐานสมบูรณ์ +tile.miner_base.name=ฐานแอสโทรไมเนอร์ +tile.miner_base_full.name=ฐานแอสโทรไมเนอร์ +tile.slab_gc_half.mars_bricks_slab.name=แผ่นอิฐดันเจี้ยนดาวอังคาร +tile.slab_gc_half.mars_slab.name=แผ่นหินหยาบดาวอังคาร +tile.slab_gc_half.asteroids_slab.name=แผ่นบล็อกตกแต่งมืด +tile.slimeling_egg.blue.name=ไข่สไลม์ลิ่งสีน้ำเงิน +tile.slimeling_egg.description=ทุบหนึ่งครั้งโดยการใช้มือของผู้เล่น จะทำให้ออกมาเป็นสัตว์เลี้ยงของเรา +tile.slimeling_egg.red.name=ไข่สไลม์ลิ่งสีแดง +tile.slimeling_egg.yellow.name=ไข่สไลม์ลิ่งสีเหลือง +tile.sludge.name=ตะกอนแบคทีเรีย +tile.spout.name=พวยกำมะถัน +tile.sulphuric_acid.name=กรดกำมะถัน +tile.telepad_short.description=ใช้สำหรับเทเลพอร์ทผู้เล่นหรือสิ่งมีชีวิต อื่น ๆ ในระยะ 256 บล็อก และต้องเชื่อมต่อกับเครื่องเทเลพอร์ตอื่น ๆ ด้วย +tile.telepad_short.name=เครื่องเทเลพอร์ตระยะใกล้ +tile.terraformer.description=ใช้สำหรับเพิ่มพื้นที่สีเขียวในดาวเคราะห์ ที่ห่างไกล เพิ่มหญ้า ต้นไม้ น้ำ เมื่อใส่วัสดุที่ถูกต้อง +tile.treasure_t2.description=พบได้ในดันเจี้ยนดาวอังคารและกล่อง จะปลดล็อคได้ต่อเมื่อสู้กับบอสชนะ +tile.treasure_t2.name=กล่องสมบัติ เทียร์ 2 +tile.treasure_t3.description=พบได้ในดันเจี้ยนดาวศุกร์และกล่อง จะปลดล็อคได้ต่อเมื่อสู้กับบอสชนะ +tile.treasure_t3.name=กล่องสมบัติ เทียร์ 3 +tile.venus.dungeon_brick_venus_1.name=กำแพงอิฐดันเจี้ยนดาวศุกร์ I +tile.venus.dungeon_brick_venus_2.name=กำแพงอิฐดันเจี้ยนดาวศุกร์ II +tile.venus.venus_ore_aluminum.name=แร่อลูมิเนียม +tile.venus.venus_ore_copper.name=แร่ทองแดง +tile.venus.venus_ore_galena.name=แร่กาลีนา +tile.venus.venus_ore_quartz.name=แร่ควอตซ์ +tile.venus.venus_ore_silicon.name=แร่ซิลิคอน +tile.venus.venus_ore_tin.name=แร่ดีบุก +tile.venus.venus_rock_0.name=หินอ่อนดาวศุกร์ +tile.venus.venus_rock_1.name=หินแข็งดาวศุกร์ +tile.venus.venus_rock_2.name=หินภูเขาไฟดาวศุกร์ +tile.venus.venus_rock_3.name=หินภูเขาไฟ +tile.venus.lead_block.name=บล็อกตะกั่ว +tile.venus_rock_scorched.name=หินไหม้เกรียมดาวศุกร์ +tile.walkway.walkway.description=ใช้สำหรับการตกแต่งที่คล้ายกับสภาพภายใน ยานอวกาศ +tile.walkway.walkway.name=ทางเดิน +tile.walkway.walkway_pipe.description=ใช้สำหรับเป็นทางเดินและใช้เชื่อมต่อ กับแหล่งเก็บของเหลวได้ ด้วยท่อที่อยู่ข้างใต้ +tile.walkway.walkway_pipe.name=ทางเดิน +tile.walkway.walkway_wire.description=ใช้สำหรับเป็นทางเดินและใช้เชื่อมต่อ กับแหล่งเก็บพลังงานได้ ด้วยสายไฟอลูมิเนียมที่อยู่ข้างใต้ +tile.walkway.walkway_wire.name=ทางเดิน +tile.wall_gc.mars.name=กำแพงหินหยาบดาวอังคาร +tile.wall_gc.mars_bricks.name=กำแพงอิฐดันเจี้ยนดาวอังคาร +tile.web_torch.web_torch_0.name=เชือกใยแมงมุม +tile.web_torch.web_torch_1.description=คบเพลิงหินเรืองแสง +tile.web_torch.web_torch_1.name=เชือกใยแมงมุม diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/tr_tr.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/tr_tr.lang new file mode 100644 index 00000000..6802c462 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/tr_tr.lang @@ -0,0 +1,288 @@ +container.entry_pod.name=Giriş Bölmesi +container.launchcontroller.name=Fırlatma Kontrollü +container.mars_lander.name=Landing Balonları +container.short_range_telepad.name=Kısa Menzilli Telepad +container.tile_terraformer.name=Terraformer +dimension.mars.name=Mars +entity.astro_miner.name=Astro Maden Makinesi +entity.creeper_boss.name=Evrimleşmiş Creeper Patronu +entity.entry_pod.name=Giriş Bölmesi +entity.grapple_hook.name=Çeneli Kanca +entity.landing_balloons.name=Landing Balonları +entity.projectile_tnt.name=Projectile TNT +entity.rocket_cargo.name=Kargo Roketi +entity.rocket_t2.name=Tier 2 Roketi +entity.rocket_t3.name=Tier 3 Roket +entity.slimeling.name=Slimeling +entity.sludgeling.name=Sludgeling +entity.small_asteroid.name=Küçük Asteroit +fluid.argon=Argon Gazı +fluid.atmosphericgases=Atmosferik Gazlar +fluid.bacterialsludge=Bakteriyel Çamur +fluid.carbondioxide=CO2 Gazı +fluid.fuel=Yakıt +fluid.helium=Helyum Gazı +fluid.hydrogen=Hidrojen Gazı +fluid.liquidargon=Sıvı Argon +fluid.liquidmethane=Sıvı Metan +fluid.liquidnitrogen=Sıvı Nitrojen +fluid.liquidoxygen=Sıvı Oksijen +fluid.methane=Metan Gazı +fluid.nitrogen=Nitrojen Gazı +fluid.oxygen=Oksijen Gazı +gas.carbondioxide.name=Karbondioksit +gas.nitrogen.name=Nitrojen +gas.oxygen.name=Oksijen +gc.configgui.astro_miners_max=Oyuncu Başına Düşen Maksimum Astro Maden Makinesi +gc.configgui.dimension_id_asteroids=Asteroit Boyut ID'si +gc.configgui.dimension_id_mars=Mars Boyut ID'si +gc.configgui.disable_galacticraft_helium=Helyum Gaz Kaydını Kapat +gc.configgui.id_schematic_cargo_rocket=Kargo Roketi Şematiği ID +gc.configgui.id_schematic_rocket_t2=Tier 2 Roketi Şematiği ID +gc.configgui.id_schematic_rocket_t3=Tier 3 Roket Şematik ID'si +gc.configgui.launch_controller_all_dims=Fırlatma Kontrolü Tüm Boyutlar İçin +gc.configgui.launch_controller_chunk_load=Fırlatma Kontrolü Chunk Yükleme +gc.configgui.planets.title=Galacticraft Planets Ayarları +gui.button.liquefy.name=Başlat +gui.button.liquefy_stop.name=Dur +gui.button.recall.name=Geri Çağır +gui.carbon_slot.desc.0=Parçalanmış Karbonu buraya koyun +gui.cargorocket.status.launched.0=Zaten +gui.cargorocket.status.launched.1=Fırlatıldı +gui.cargorocket.status.waiting.0=Ateşleme için +gui.cargorocket.status.waiting.1=bekleniyor +gui.choose_planet.desc.mars=Yaşanabilir#Oksijen Bulunmuyor#Yerçekimi: %38 +gui.cryogenic.chat.cant_use=Bunu %d saniye boyunca kullanamam +gui.gas_input.desc.0=Buraya Metan Gazı Bidonu$Koyun +gui.gas_input.desc.1=(Alternatif olarak Atmosferik $Valf kullanabilirsiniz) +gui.gas_tank.desc.0=Gaz Deposu +gui.gas_tank_compressed.desc.0=Gaz Deposu (Sıkıştırılmış) +gui.hydrogen_input.desc.0=Hidrojen Tankı veya +gui.hydrogen_input.desc.1=Atmosferik Valf gerekir +gui.launch_controller.desc.0=Fırlatıcı kontrollünün frekansı +gui.launch_controller.desc.1=Fırlatılacak roketin karşı frekansı +gui.launch_controller.desc.2=Roket fırlatma pedi$kalkışta silinecek. +gui.launch_controller.desc.3=Roket fırlatmak için,$ayarlar +gui.launch_controller.desc.4=Hedef Frekansı diğer$oyunculardan sakla +gui.liquid_output.desc.2=sıvılaştırılmış gaz tankı +gui.liquid_tank.desc.0=Sıvı Tankı +gui.message.address.name=Adres Numarası +gui.message.astro_miner.fail=Bu üs Astro Maden Makinesine sahip! +gui.message.astro_miner1.fail=Kazma alanı şu maddeden dolayı tıkalı: +gui.message.astro_miner1_a.fail=Astro Maden Makinesinin rotası şu maddeden dolayı tıkalı: +gui.message.astro_miner2.fail=Astro Maden Makinesinden daha fazla sahip olamazsınız! +gui.message.astro_miner3.fail=Astro Maden Makinesinin üssü yok edildi! +gui.message.astro_miner4.fail=Astro Maden Makinesinin gücü az ve üsse geri dönemiyor! +gui.message.astro_miner5.fail=Astro Maden Makinesinin üs yolunda bir yere sıkıştı! +gui.message.astro_miner6.fail=Astro Maden Makinesi kazma alanını bitirdiği için çalışmayı bırakıcak! +gui.message.astro_miner7.fail=Uzay İstasyonunda maden bulumadığı için Astro Maden Makinesi bir şey yapmayacaktır! +gui.message.astro_miner8.fail=Aynı üste iki adet Astro Maden Makinesi tespit edildi, birinci makine donduruluyor. +gui.message.bubble_exp.name=Genişleyen Kabarcık +gui.message.cargo_full.name=Kargo Dolunca +gui.message.cargo_unloaded.name=Kargo Boşalınca +gui.message.dest_address.name=Hedefin Adres Numarası +gui.message.dest_frequency.name=Fre.Hedefi +gui.message.enable_grass.name=Çimleri Etkinleştir +gui.message.enable_trees.name=Ağaçları Etkinleştir +gui.message.frequency.name=Frekans +gui.message.fully_fueled.name=Yakıt Dolunca +gui.message.grapple.fail=Kancayı kullanmak istiyorsam biraz ipe ihtiyacım var! +gui.message.grass.name=Çimler +gui.message.instant.name=Anında +gui.message.invalid_address.name=Lütfen Farklı Adres Numarası Girin +gui.message.invalid_freq.name=Yanlış Frekans +gui.message.invalid_target_address.name=Hedef Adres Numarası Yanlış +gui.message.launch_when.name=Fırlatmak için +gui.message.low_energy.name=Düşük Enerji +gui.message.no_bonemeal.name=Yeterli Kemik Tozu Yok +gui.message.no_energy.name=Yeterli Enerji Yok +gui.message.no_saplings.name=Yeterli Fidan Yok +gui.message.no_seeds.name=Yeterli Tohum Yok +gui.message.no_valid_blocks.name=Kabarcık İçindeki Blok Doğrulanamadı +gui.message.no_water.name=Yeterli Su Yok +gui.message.not_enough.name=Yeterli Değil +gui.message.not_enough_energy.name=Enerji Yetersiz! +gui.message.not_set.name=Belirtilmemiş +gui.message.one_min.name=1 Dakikada +gui.message.receiving_active.name=Alma Aktif +gui.message.redstone_sig.name=Kızıltaş Sinyali +gui.message.remove_pad.name=Pedi Sil +gui.message.sending_active.name=Gönderme Aktif +gui.message.success.name=Başarılı +gui.message.target_no_energy.name=Hedefin Enerjisi Yetersiz! +gui.message.telepad_not_found.name=Telepad Bulunamadı! +gui.message.telepad_too_far.name=Hedef çok uzak! (En fazla %d) +gui.message.telepad_wrong_dim.name=Hedef farklı dünyada. +gui.message.ten_sec.name=10 Saniyede +gui.message.terraforming.name=Dünyalaştırıcı +gui.message.thirty_sec.name=30 Saniyede +gui.message.trees.name=Ağaçlar +gui.message.with_atmosphere0.name=gezegenin atmosferinde +gui.message.with_atmosphere1.name=bulunabilir +gui.message.zero_water.name=Su yok! +gui.methane_output.desc.2=metan gazı tankı +gui.miner.docked=Kenetlendi +gui.miner.docking=Kenetleniyor +gui.miner.mined=Kazılan +gui.miner.mining=Kazıyor +gui.miner.offline=Kapalı +gui.miner.out_of_range=Kapsama Dışı +gui.miner.returning=Dönüyor +gui.miner.stuck=Sıkıştı: +gui.miner.travelling=Geziyor +gui.slimeling.button.follow=Takip Ettir +gui.slimeling.button.sit=Oturt +gui.slimeling.chat.wrong_player=Bu benim Slimeling'im değil! +gui.slimeling.damage=Saldırı Hasarı +gui.slimeling.following=Takip Ediyor +gui.slimeling.food=Favori Besini +gui.slimeling.kills=Öldürülen +gui.slimeling.name=Adı +gui.slimeling.owner=Sahibi +gui.slimeling.scale=Seviye +gui.slimeling.sitting=Oturuyor +gui.status.liquefying.name=Sıvılaştırılıyor +gui.status.needs_carbon.name=Karbon Gerekiyor +gui.status.nogas.name=Gaz Yok +gui.status.processing.name=Sentezleme +gui.status.tankfull.name=Tank Dolu +gui.status.tanksfull.name=Tanklar Dolu +gui.telepad.desc.0=Telepadın adres numarası$farklı olması gerekir. +gui.telepad.desc.1=Başka bir Telepadın adres numarası.$250m içinde olmalı. +gui.terraformer.desc.0=Su Tankı +gui.water_bucket_slot.desc=Su kovalarını buraya koyun +item.astro_miner.name=Astro Maden Makinesi +item.atmospheric_valve.name=Atmosferik Valf +item.beam_core.name=Işın Çekirdeği +item.bucket_sludge.name=Bakteriyel Çamur Kovası +item.canister.gas.name=Gaz +item.canister.liquid_argon.full.name=Dolu Sıvı Argon Bidonu +item.canister.liquid_argon.name=Sıvı +item.canister.liquid_argon.partial.name=Sıvı Argon Bidonu +item.canister.liquid_nitrogen.full.name=Dolu Sıvı Nitrojen Bidonu +item.canister.liquid_nitrogen.name=Sıvı +item.canister.liquid_nitrogen.partial.name=Sıvı Nitrojen Bidonu +item.canister.lox.full.name=Dolu Sıvı Oksijen Bidonu +item.canister.lox.name=LOX +item.canister.lox.partial.name=Sıvı Oksijen Bidonu +item.carbon_fragments.name=Parçalanmış Karbon +item.compressed_desh.name=Sıkıştırılmış Desh +item.compressed_titanium.name=Sıkıştırılmış Titanyum +item.desh_axe.name=Desh Balta +item.desh_boots.name=Desh Bot +item.desh_chestplate.name=Desh Zırh +item.desh_helmet.name=Desh Kask +item.desh_hoe.name=Desh Çapa +item.desh_leggings.name=Desh Pantolon +item.desh_pick.name=Desh Kazma +item.desh_pick_slime.description.name=Slimeling yumurtası hasat edebilirsiniz. +item.desh_pick_slime.name=Yapışkan Desh Kazma +item.desh_spade.name=Desh Kürek +item.desh_stick.name=Desh Çubuğu +item.desh_sword.name=Desh Kılıç +item.empty_gas_canister.name=Boş Gaz Bidonu +item.engine_t2.name=Ağır Roket Motoru +item.fluid_manip.name=Sıvı Manipülatör +item.grapple.name=Kanca +item.heavy_nose_cone.name=Ağır Roket Burnu +item.ingot_desh.name=Desh Cevheri +item.ingot_titanium.name=Titanyum Külçesi +item.key.t2.name=Tier 2 Zindan Anahtarı +item.methane_canister.name=Dolu Metan Gazı Bidonu +item.methane_canister_partial.name=Metan Gazı Bidonu +item.orion_drive.name=Orion Sürücüsü +item.raw_desh.name=Arıtılmamış Desh +item.reinforced_plate_t2.name=Ağır Plaka +item.reinforced_plate_t3.name=Daha Ağır Plaka +item.rocket_fins_t2.name=Ağır Roket Kanatları +item.rocket_t2.cargo_rocket.name=Kargo Roketi +item.rocket_t2.t2Rocket.name=Tier 2 Roketi +item.rocket_t3.t3Rocket.name=Tier 3 Roket +item.shard_iron.name=Demir Parçası +item.shard_titanium.name=Titanyum Parçası +item.slimeling_cargo.name=Slimeling Envanter Çantası +item.thermal_boots.name=Termal Dolgulu Bot +item.thermal_chestplate.name=Termal Dolgulu Zırh +item.thermal_cloth.name=Termal Kumaş +item.thermal_helm.name=Termal Dolgulu Kask +item.thermal_leggings.name=Termal Dolgulu Pantolon +item.tier2.desc=Tier 2 +item.tier3.desc=Tier 3 +item.titanium_axe.name=Titanyum Balta +item.titanium_boots.name=Titanyum Bot +item.titanium_chestplate.name=Titanyum Zırh +item.titanium_helmet.name=Titanyum Kask +item.titanium_hoe.name=Titanyum Çapa +item.titanium_leggings.name=Titanyum Pantolon +item.titanium_pickaxe.name=Titanyum Kazma +item.titanium_shovel.name=Titanyum Kürek +item.titanium_sword.name=Titanyum Kılıç +planet.asteroids=Asteroit +planet.mars=Mars +schematic.astro_miner.name=Astro Maden Makinesi +schematic.cargo_rocket.name=Otomatik Kargo Roketi +schematic.rocket_t3.name=Tier 3 Roketi +tile.asteroids_block.asteroid_rock_0.name=Asteroit Kayası +tile.asteroids_block.asteroid_rock_1.name=Asteroit Kayası +tile.asteroids_block.asteroid_rock_2.name=Asteroit Kayası +tile.asteroids_block.ore_aluminum_asteroids.name=Alüminyum Cevheri +tile.asteroids_block.ore_ilmenite_asteroids.name=İlmenit Cevheri +tile.asteroids_block.ore_iron_asteroids.name=Demir Cevheri +tile.beam_receiver.description=Işın alıcısı enerji makinelerin giriş ve çıkışına bağlanarak enerjiyi transfer etmekte kullanılır. +tile.beam_receiver.name=Işın Alıcısı +tile.beam_reflector.description=Işın Reflektörü ışın enerjisini kaynaktan gönderir. Sağ tıklayarak hedefi değiştirebilirsiniz. +tile.beam_reflector.name=Işın Reflektörü +tile.cavern_vines.description=Cavernous Vines canlılar için tehlikelidir, bunu kırarak hediyenizi alın. +tile.cavern_vines.name=Cavernous Vines +tile.creeper_egg.description=Creeper Yumurtası Mars zindanlarında bulunur, spawnlanınca büyük bir patlama oluşur. +tile.creeper_egg.name=Creeper Yumurtası +tile.cryo_chamber.description=Kriyojenik Odası oyuncunun uyumasını sağlar, ufak bir can verir, fakat bekleme süresi vardır. +tile.dense_ice.name=Yoğun Buz +tile.electrolyzer.description=Suyu hidrojen (metan sentezinde de kullanılabilir) ve oksijene çevirir. +tile.gas_liquefier.description=Gaz Sıvılaştırıcı, metan gazını atmosferden veya teneke kutudan alarak iyi bir roket yakıtı yapın. +tile.hydrogen_pipe.description=Hidrojen borusu makinelere hidrojen taşır. +tile.hydrogen_pipe.name=Hidrojen Borusu +tile.launch_controller.description=Fırlatma Kontrollü kullanarak fırlatmaları özelleştirebilirsiniz, otomatik olarak başka yere roket gidebilir. +tile.mars.coppermars.name=Bakır Cevheri +tile.mars.deshmars.name=Desh Cevheri +tile.mars.ironmars.name=Demir Cevheri +tile.mars.marscobblestone.name=Mars Kırık Taşı +tile.mars.marsdeco.name=Desh Bloğu +tile.mars.marsdirt.name=Mars Yeraltı Kayası +tile.mars.marsdungeon.name=Mars Zindan Tuğlası +tile.mars.marsgrass.name=Mars Yüzey Kayası +tile.mars.marsstone.name=Mars Taşı +tile.mars.tinmars.name=Kalay Cevheri +tile.mars_stairs_cobblestone.name=Mars Kırık Taş Merdiveni +tile.mars_stairs_brick.name=Mars Zindan Tuğla Merdiveni +tile.mars_machine.0.name=Terraformer +tile.mars_machine.1.name=Kriyojenik Odası +tile.mars_machine.2.name=Fırlatma Kontrollü +tile.mars_machine.4.name=Gaz Sıvılaştırıcı +tile.mars_machine.5.name=Metan Birleştirici +tile.mars_machine.6.name=Su Elektroliz Cihazı +tile.methane_synthesizer.description=Karbon ve hidrojenin ana kaynağı. Gaz sıvılaştırıcı için metan gazı sağlar. +tile.miner_base.description=Astro Maden Makinesinin üssü ve yerleşme yeridir. Bu üs aşırı büyüktür ... 2 x 2 x 2 küp yapın. +tile.miner_base.name=Astro Maden Makinesi Üssü +tile.slab_gc_half.mars_bricks_slab.name=Mars Zindan Tuğla Basamağı +tile.slab_gc_half.mars_slab.name=Mars Kırık Taş Basamağı +tile.slimeling_egg.blue.name=Mavi Slimeling Yumurtası +tile.slimeling_egg.description=Slimeling Yumurtasını elle kırarak bir evcil hayvana sahip olabilirsiniz. +tile.slimeling_egg.red.name=Kırmızı Slimeling Yumurtası +tile.slimeling_egg.yellow.name=Sarı Slimeling Yumurtası +tile.sludge.name=Bakteriyelli Çamur +tile.telepad_short.description=Kısa Menzilli Telepad oyuncuları ışınlamaya ve kısa mesafe (250 blok) gitmeye yarar. +tile.telepad_short.name=Kısa Menzilli Telepad +tile.terraformer.description=Terraformer gezegenlere yeşillik katar, çim, ağaç ve su ile basit bir alan oluşturur. +tile.treasure_t2.description=Tier 2 Hazine Sandığı Mars zindanın da bulunur. Açılması için sondaki Patron canavarı öldürün. +tile.treasure_t2.name=Tier 2 Hazine Sandığı +tile.treasure_t3.description=Tier 3 Hazine Sandığı şu anlık kullanılmıyor. +tile.treasure_t3.name=Tier 3 Hazine Sandığı +tile.walkway.walkway.description=Yürüme Bloğu dekoratif amaçlıdır, diğer bloklara bağlanarak uzay teması oluşur. +tile.walkway.walkway.name=Yürüme Bloğu +tile.walkway.walkway_pipe.description=Oksijen Borusu Yürüme Bloğu boruların altan geçerek, güvenli bir yürüyüş sağlar. +tile.walkway.walkway_pipe.name=Yürüme Bloğu +tile.walkway.walkway_wire.description=Alüminyum Tel Yürüme Bloğu kabloların altan geçerek, güvenli bir yürüyüş sağlar. +tile.walkway.walkway_wire.name=Yürüme Bloğu +tile.wall_gc.mars.name=Mars Kırık Taş Duvarı +tile.wall_gc.mars_bricks.name=Mars Zindan Tuğla Duvarı diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/uk_ua.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/uk_ua.lang new file mode 100644 index 00000000..5fc3c332 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/uk_ua.lang @@ -0,0 +1,405 @@ +checklist.craft_grapple_hook.key=Cтворити гак +checklist.equip_shield_controller.key=Встановити контролер щита +checklist.thermal_padding.key=Одягти тепловий захист +checklist.thermal_padding_t2.key=Одягти тепловий захист 2-го рівня +container.crashed_probe.name=Розбився зонд +container.entry_pod.name=Посадкова капсула +container.geothermal_generator.name=Геотермальний генератор +container.launchcontroller.name=Контролер запуску +container.mars_lander.name=Посадочні балони +container.solar_array_controller.name=Контролер сонячної батареї +container.short_range_telepad.name=Короткодистанціонний телепорт +container.slimeling_inventory.name=Інвентар слаймлінга +container.tile_terraformer.name=Терраформер +dimension.mars.name=Марс +entity.astro_miner.name=астрономічний шахтар +entity.creeper_boss.name=Еволюціонувавший кріпер-бос +entity.entry_pod.name=Посадкова капсула +entity.entry_pod_venus.name=Венеріанска посадкова капсула +entity.grapple_hook.name=Гак +entity.juicer.name=Маленький павук +entity.landing_balloons.name=Посадочні балони +entity.projectile_tnt.name=Снаряд TNT +entity.rocket_cargo.name=Вантажна ракета +entity.rocket_t2.name=Ракета 2-го рівня +entity.rocket_t3.name=Ракета 3-го рівня +entity.slimeling.name=Слаймлінг +entity.sludgeling.name=Сладжлінг +entity.small_asteroid.name=Маленький астероїд +entity.spider_queen.name=Королева павуків +entity.web_shot.name=Павутина +fluid.argon=Аргон +fluid.atmosphericgases=Атмосферні гази +fluid.bacterialsludge=Бактеріальний осад +fluid.carbondioxide=Вуглекислий газ +fluid.fuel=Паливо +fluid.helium=Гелій +fluid.hydrogen=Водень +fluid.liquidargon=Рідкий аргон +fluid.liquidmethane=Рідкий метан +fluid.liquidnitrogen=Рідкий азот +fluid.liquidoxygen=Рідкий кисень +fluid.methane=Метан +fluid.nitrogen=Азот +fluid.oil=Нафта +fluid.oxygen=Кисень +fluid.sulphuricacid=Сірчана кислота +gas.carbondioxide.name=Вуглекислий газ +gas.nitrogen.name=Азот +gas.oxygen.name=Кисень +gc.configgui.astro_miners_max=Максимальна кількість астрошахтерів на гравця +gc.configgui.dimension_id_asteroids=ID виміру: Астероїди +gc.configgui.dimension_id_mars=ID виміру: Марс +gc.configgui.dimension_id_venus=ID виміру: Венера +gc.configgui.disable_aluminum_gen_asteroids=Відключити генерацію алюмінієвої руди на астероїд +gc.configgui.disable_ambient_lightning=Відключити блискавки на Венері +gc.configgui.disable_copper_gen_mars=Відключити генерацію мідної руди на Марсі +gc.configgui.disable_desh_gen_mars=Відключити генерацію руди деш на Марсі +gc.configgui.disable_galacticraft_helium=Відключення реєстрації гелію +gc.configgui.disable_small_asteroids=Відключити спавн малих астероїдів (Астероїди) +gc.configgui.disable_ilmenite_gen_asteroids=Відключити генерацію ільменітової руди на астероїд +gc.configgui.disable_iron_gen_asteroids=Відключити генерацію залізної руди на астероїд +gc.configgui.disable_iron_gen_mars=Відключити генерацію залізної руди на Марсі +gc.configgui.disable_tin_gen_mars=Відключити генерацію олов'яної руди на Марсі +gc.configgui.disable_venus_aluminum_gen=Відключити генерацію алюмінієвої руди на Венері +gc.configgui.disable_venus_copper_gen=Відключити генерацію мідної руди на Венері +gc.configgui.disable_venus_galena_gen=Відключити генерацію галенітовой руди на Венері +gc.configgui.disable_venus_quartz_gen=Відключити генерацію кварцовою руди на Венері +gc.configgui.disable_venus_silicon_gen=Відключити генерацію кремнієвої руди на Венері +gc.configgui.disable_venus_solar_gen=Відключити генерацію сонячної руди на Венері +gc.configgui.disable_venus_tin_gen=Відключити генерацію олов'яної руди на Венері +gc.configgui.id_schematic_cargo_rocket=ID схеми: Вантажна ракета +gc.configgui.id_schematic_rocket_t2=ID схеми: Ракета 2-го рівня +gc.configgui.id_schematic_rocket_t3=ID схеми: Ракета 3-го рівня +gc.configgui.launch_controller_all_dims=Завантаження всіх вимірювань контролером запуску +gc.configgui.launch_controller_chunk_load=Завантаження чанкі контролером запуску +gc.configgui.planets.title=Конфігурація планет Galacticraft +gui.button.add_blacklist.name=Чорний список +gui.button.add_entity.name=Додати об'єкт +gui.button.add_player.name=Додати гравця +gui.button.add_whitelist.name=Білий список +gui.button.edit_blacklist.name=Редагувати чорний список +gui.button.edit_priority.name=Змінити пріоритет +gui.button.edit_whitelist.name=Редагувати білий список +gui.button.liquefy.name=Запуск +gui.button.liquefy_stop.name=Стоп +gui.button.never_fire_team.name=Ніколи не стріляти в команду космічної гонки +gui.button.recall.name=Відкликати +gui.button.remove_selected.name=Прибрати вбрання +gui.carbon_slot.desc.0=Місце для роздробленого вугілля +gui.cargorocket.status.launched.0=Запущена +gui.cargorocket.status.launched.1=в політ +gui.cargorocket.status.waiting.0=Очікування +gui.cargorocket.status.waiting.1=Запалювання +gui.choose_planet.desc.mars=Живемо #Кисень відсутня #Гравітація: 38% +gui.cryogenic.chat.cant_use=Я не можу використовувати її протягом %d секунд (-и) +gui.gas_input.desc.0=Спробуйте помістити сюди $каністру з метаном +gui.gas_input.desc.1=(Або як альтернатива, $атмосферне клапан) +gui.gas_tank.desc.0=Сховище газу +gui.gas_tank_compressed.desc.0=Сховище газу (Стисненого) +gui.hydrogen_input.desc.0=Сюди поміщається резервуар з воднем +gui.hydrogen_input.desc.1=або атмосферний клапан +gui.launch_controller.advanced=Додатково +gui.launch_controller.desc.0=Це унікальна частота $контролера запуску +gui.launch_controller.desc.1=Частота пункту призначення для ракети +gui.launch_controller.desc.2=Чи повиннна злітний майданчик $бути видалений при запуску +gui.launch_controller.desc.3=Коли ця умова виконується,$ракета запускається +gui.launch_controller.desc.4=Приховати частоту пункту $призначення від інших гравців +gui.launch_controller.owner=Власник +gui.liquid_output.desc.2=резервуар скрапленого газу +gui.liquid_tank.desc.0=Рідинний резервуар +gui.message.address.name=Адреса +gui.message.astro_miner.fail=У цій бази вже є астрошахтер! +gui.message.astro_miner1.fail=Область стикування заблокована: +gui.message.astro_miner1_a.fail=Шлях астрошахтера перегороджений: +gui.message.astro_miner1_b.fail=Захищена зона! +gui.message.astro_miner2.fail=Досягнуто ліміт астрошахтеров! +gui.message.astro_miner3.fail=Підстава астрошахтера було демонтовано! +gui.message.astro_miner4.fail=У астрошахтера скінчилася енергія і він не може повернутися на базу! +gui.message.astro_miner5.fail=Шлях астрошахтера до бази, здається, перегороджений! +gui.message.astro_miner6.fail=Астрошахтер закінчив видобуток і зупинився! +gui.message.astro_miner7.fail=Астрошахтеру нічого добувати на космічній станції! +gui.message.astro_miner8.fail=Другий астрошахтер був виявлений на тій же базі, тепер перший зупиниться. +gui.message.blacklist_mode.name=Режим чорного списку +gui.message.bubble_exp.name=Розширення міхура +gui.message.cargo_full.name=Вантаж завантажений +gui.message.cargo_unloaded.name=Вантаж розвантажений +gui.message.connected_solar_controller.name=%d додається (діапазон 16 блоків) +gui.message.dest_address.name=Адреса мети +gui.message.dest_frequency.name=Мета +gui.message.enable_grass.name=Включити траву +gui.message.enable_trees.name=Включити дерева +gui.message.enter_entity.name=Введіть ім'я об'єкта/id +gui.message.enter_player.name=Введіть ім'я гравця +gui.message.frequency.name=Частота +gui.message.fully_fueled.name=Повністю заправлений +gui.message.grapple.fail=Мені потрібно трохи ниток, якщо я хочу кинути цей гак! +gui.message.grass.name=Трава +gui.message.instant.name=Негайно +gui.message.invalid_address.name=Невірний унікальний адрес +gui.message.invalid_freq.name=Невірна частота +gui.message.invalid_target_address.name=Невірна цільова адреса +gui.message.launch_when.name=Запустити, коли: +gui.message.low_energy.name=Мало енергії +gui.message.low_energy_output.name=Малий вихід енергії +gui.message.no_bonemeal.name=Недостатньо кісткового борошна +gui.message.no_energy.name=Недостатньо енергії +gui.message.no_saplings.name=Недостатньо саджанців +gui.message.no_seeds.name=Недостатньо насіння +gui.message.no_valid_blocks.name=Немає доступних блоків в міхурі +gui.message.no_water.name=Недостатньо води +gui.message.not_enough.name=Недостатньо +gui.message.not_enough_energy.name=Недостатньо енергії! +gui.message.not_set.name=Не вказано +gui.message.one_min.name=1 хвилина +gui.message.player.name=Гравець +gui.message.priority_closest.name=Найближчий +gui.message.priority_health_high.name=Високий рівень здоров'я +gui.message.priority_health_low.name=Низький рівень здоров'я +gui.message.priority_low.name=Пріоритет (Найнижчий спочатку) +gui.message.receiving_active.name=Прийом розпочато +gui.message.redstone_sig.name=Сигнал червоного каменю +gui.message.remove_pad.name=Прибрати платформу при запуску +gui.message.sending_active.name=Відправка розпочато +gui.message.success.name=Успіх +gui.message.target_meteors.name=Мета - Метеори +gui.message.target_no_energy.name=У мети не вистачає енергії! +gui.message.telepad_not_found.name=Телепорт не знайден! +gui.message.telepad_too_far.name=Мета занадто далеко! (Макс .: %d) +gui.message.telepad_wrong_dim.name=Мета в іншому вимірі! +gui.message.telepad_target_disabled.name=Мета відключена +gui.message.ten_sec.name=10 секунд +gui.message.terraforming.name=Терраформірованіє +gui.message.thirty_sec.name=30 секунд +gui.message.trees.name=Дерева +gui.message.with_atmosphere0.name=На планеті з великою кількістю +gui.message.with_atmosphere1.name=в атмосфері +gui.message.zero_water.name=Немає води! +gui.methane_output.desc.2=Резервуар метану +gui.miner.docked=Пристикований +gui.miner.docking=Стиковка +gui.miner.mined=Видобуто +gui.miner.mining=Здобич +gui.miner.offline=Поза мережою +gui.miner.out_of_range=Поза зоною дії +gui.miner.returning=Повернення +gui.miner.stuck=Застряг на: +gui.miner.travelling=Переміщення +gui.slimeling.button.follow=Йди +gui.slimeling.button.sit=Сиди +gui.slimeling.chat.wrong_player=Це не мій слаймлінг ! +gui.slimeling.damage=Втрати +gui.slimeling.following=Слідує +gui.slimeling.food=Улюблена їжа +gui.slimeling.kills=Вбивств +gui.slimeling.name=Ім'я +gui.slimeling.owner=Власник +gui.slimeling.scale=Розмір +gui.slimeling.sitting=Сидить +gui.status.invalid_spout_1.name=Повинен бути поставлений на +gui.status.invalid_spout_2.name=Доступний сірчаний гейзер +gui.status.liquefying.name=Скраплення +gui.status.needs_carbon.name=Потрібне вугілля +gui.status.nogas.name=Немає газу +gui.status.processing.name=Синтез +gui.status.tankfull.name=Резервуар сповнений +gui.status.tanksfull.name=Резервуари повні +gui.telepad.desc.0=Це унікальна адреса$телепорту +gui.telepad.desc.1=Адреса іншого телепорту.$Сутності будуть відправлятися туди. +gui.terraformer.desc.0=Водний резервуар +gui.water_bucket_slot.desc=Покладіть відра з водою сюди +item.astro_miner.name=Астрономіческий шахтер +item.atmospheric_valve.name=Атмосферний клапан +item.atomic_battery.name=Атомна батарея +item.beam_core.name=Променеве ядро +item.bucket_sludge.name=Відро бактеріального осаду +item.bucket_sulphuric_acid.name=Відро сірчаної кислоти +item.canister.gas.name=Газ +item.canister.liquid_argon.full.name=Заповнена каністра рідкого аргону +item.canister.liquid_argon.name=Рідина +item.canister.liquid_argon.partial.name=Каністра рідкого аргону +item.canister.liquid_nitrogen.full.name=Заповнена каністра рідкого азоту +item.canister.liquid_nitrogen.name=Рідина +item.canister.liquid_nitrogen.partial.name=Каністра рідкого азоту +item.canister.lox.full.name=Заповнена каністра рідкого кисню +item.canister.lox.name=РК +item.canister.lox.partial.name=Каністра рідкого кисню +item.carbon_fragments.name=Роздроблене вугілля +item.compressed_desh.name=Стисла деш +item.compressed_titanium.name=Стиснутий титан +item.desh_axe.name=Сокира з деш +item.desh_boots.name=Черевики з деш +item.desh_chestplate.name=Кіраса з деш +item.desh_helmet.name=Шолом з деш +item.desh_hoe.name=Мотига з деш +item.desh_leggings.name=Поножі з деш +item.desh_pick.name=Кірка з деш +item.desh_pick_slime.description.name=Може добувати яйця кріпера +item.desh_pick_slime.name=Липка кірка з деш +item.desh_spade.name=Лопата з деш +item.desh_stick.name=Палка з деш +item.desh_sword.name=Меч з деш +item.dust_titanium.name=титанова пиль +item.empty_gas_canister.name=Порожня каністра для газу +item.engine_t2.name=Міцний ракетний двигун +item.fluid_manip.name=Маніпулятор рідини +item.grapple.name=Гак +item.heavy_nose_cone.name=Міцний головний обтічник +item.ingot_desh.name=Злиток деш +item.ingot_lead.name=Свинцевий злиток +item.ingot_titanium.name=Титановий злиток +item.key.t2.name=Ключ від підземелля 2-го рівня +item.key.t3.name=Ключ від підземелля 3-го рівня +item.methane_canister.name=Заповнена каністра метану +item.methane_canister_partial.name=Каністра метану +item.orion_drive.name=Привід Оріона +item.prelaunch_checklist.name=Передпольотна підготовка +item.radioisotope_core.name=Радіоізотопне ядро +item.raw_desh.name=Необроблена деш +item.reinforced_plate_t2.name=Надміцна пластина +item.reinforced_plate_t3.name=Надміцна пластина +item.rocket_fins_t2.name=Міцний ракетний стабілізатор +item.rocket_t2.cargo_rocket.name=Вантажна ракета +item.rocket_t2.t2Rocket.name=Ракета 2-го рівня +item.rocket_t3.t3Rocket.name=Ракета 3-го рівня +item.shard_iron.name=Залізний осколок +item.shard_titanium.name=Титановий осколок +item.shield_controller.description=Контролер щита захищає вашу броню від ВСІХ видів шкоди - в тому числі від атмосферної корозії +item.shield_controller.name=Контролер щита +item.slimeling_cargo.name=Сумка слаймлінга +item.solar_dust.name=Сонячний пил +item.solar_module_2.name=Панель сонячних батарей +item.strange_seed.name=Дивне насіння +item.thermal_boots.name=Теплоізолюючі черевики +item.thermal_boots_t2.name=Теплотривкі черевики +item.thermal_chestplate.name=Теплоізолююча кіраса +item.thermal_chestplate_t2.name=Теплотривка кіраса +item.thermal_cloth.name=Теплоізолююча тканина +item.thermal_fabric.name=Теплотривка тканЬ +item.thermal_helm.name=Теплоізолірующий шолом +item.thermal_helm_t2.name=Теплотривкий шолом +item.thermal_leggings.name=Теплоізолюючі поножи +item.thermal_leggings_t2.name=Теплотривкі поножи +item.thin_solar_wafer.name=Сонячна напівпровідникова пластина +item.tier2.desc=2-ий рівень +item.tier3.desc=3-й рівень +item.titanium_axe.name=Титанова сокира +item.titanium_boots.name=Титанові черевики +item.titanium_chestplate.name=Титанова кіраса +item.titanium_helmet.name=Титановий шолом +item.titanium_hoe.name=Титанова мотика +item.titanium_leggings.name=Титанові поножи +item.titanium_pickaxe.name=Титанова кірка +item.titanium_shovel.name=Титанова лопата +item.titanium_sword.name=Титановий меч +item.volcanic_pickaxe.description=Копає зону 3x3 блоку в залежності від того, в якому напрямку ви дивитесь +item.volcanic_pickaxe.name=Вулканічна кирка +planet.asteroids=Астероїди +planet.mars=Марс +schematic.astro_miner.name=Астрономіческий шахтер +schematic.cargo_rocket.name=Автоматична вантажна ракета +schematic.rocket_t3.name=Ракета 3-го рівня +tile.asteroids_block.asteroid_rock_0.name=Астероїдний камінь +tile.asteroids_block.asteroid_rock_1.name=Астероїдний камінь +tile.asteroids_block.asteroid_rock_2.name=Астероїдний камінь +tile.asteroids_block.ore_aluminum_asteroids.name=Алюмінієва руда +tile.asteroids_block.ore_ilmenite_asteroids.name=Ільменітова руда +tile.asteroids_block.ore_iron_asteroids.name=Залізна руда +tile.asteroids_block.asteroid_deco.name=Темний декоративний блок +tile.asteroids_block.titanium_block.name=Титановый блок +tile.beam_receiver.description=Променеві приймачі приєднуються до входу і виходу енергії механізму, щоб передавати енергію, використовуючи промені. +tile.beam_receiver.name=Променевий приймач енергії +tile.beam_reflector.description=Променеві відбивачі використовуються для перенаправлення енергетичних променів від джерела до місця призначення. ПКМ по відбивачу, щоб міняти цілі. +tile.beam_reflector.name=Променевий відбивач енергії +tile.cavern_vines.description=Печерні ліани небезпечні для живих істот тим, що вони обплутують їх і тягнуть вгору. +tile.cavern_vines.name=Печерні ліани +tile.crashed_probe.name=Розбився зонд +tile.creeper_egg.description=Яйця кріпера з'являються в скарбницях Марса, з них під час вибуху вилуплюється потайний хижак. +tile.creeper_egg.name=Яйце кріпера +tile.cryo_chamber.description=Кріогенні камери дозволять гравцеві спати вдень, відновлюючи тим самим невелику кількість здоров'я, але мають затримку у використанні. +tile.dense_ice.name=Щільний лід +tile.electrolyzer.description=Перетворює воду на водень (потрібен для синтезатора метану) і кисень. +tile.gas_liquefier.description=Зріджують гази з атмосфери або з каністри. Зріджений метан відмінно підходить в якості ракетного палива! +tile.geothermal_generator.description=Генерує енергію при розміщенні на сірчаний гейзер. Рівень виробленої енергії коливається. +tile.geothermal_generator.name=Геотермальний генератор +tile.hydrogen_pipe.description=Труба для водню буде передавати водень з внутрішнього резервуара одного механізму до іншого. +tile.hydrogen_pipe.name=Труба для водню +tile.launch_controller.description=Контролери запуску використовуються для настройки параметрів автоматичного запуску, включаючи умову і пункт призначення. +tile.laser_turret.name=Лазерна турель +tile.laser_turret.description=Може призначатися для метеорів, гравців і мобів +tile.mars.coppermars.name=Мідна руда +tile.mars.deshmars.name=Руда деш +tile.mars.ironmars.name=Залізна руда +tile.mars.marscobblestone.name=Марсіанський кругляк +tile.mars.marsdeco.name=Блок деш +tile.mars.marsdirt.name=Марсіанський реголіт +tile.mars.marsdungeon.name=Цегла марсіанської скарбниці +tile.mars.marsgrass.name=Марсіанський дрібнодисперсний реголіт +tile.mars.marsstone.name=Марсіанський камінь +tile.mars.tinmars.name=Олов'яна руда +tile.mars_machine.0.name=Терраформер +tile.mars_machine.1.name=Криогенна камера +tile.mars_machine.2.name=Контролер запуску +tile.mars_machine.4.name=Сжіжітель газу +tile.mars_machine.5.name=Синтезатор метану +tile.mars_machine.6.name=Електролізер води +tile.mars_stairs_cobblestone.name=Сходинки з марсіанського кругляка +tile.mars_stairs_brick.name=Сходинки з цегли марсіанської скарбниці +tile.methane_synthesizer.description=При наявності джерел водню і вуглецю він виробляє метан для подальшої обробки в сжіжітеле газу. +tile.miner_base.description=Підстава астрономічного шахтаря - це точка стикування для астрономічного шахтаря. Він великий ... спробуйте зробити куб 2x2x2 з блоків підстави. +tile.miner_base.name=Підстава астрономічного шахтаря +tile.miner_base_full.name=Підстава астрономічного шахтаря +tile.slab_gc_half.mars_bricks_slab.name=Плита з цегли марсіанської скарбниці +tile.slab_gc_half.mars_slab.name=Плита з марсіанського кругляка +tile.slab_gc_half.asteroids_slab.name=Темна декоративна плита +tile.slimeling_egg.blue.name=Синє яйце Слаймлінга +tile.slimeling_egg.description= +Яйця Слаймлінгов: якщо розбити їх голими руками, то скоро з них вилупиться вихованець. +tile.slimeling_egg.red.name=Червоне яйце Слаймлінга +tile.slimeling_egg.yellow.name=Жовте яйце Слаймлінга +tile.sludge.name=Бактеріальний осад +tile.solar_array_controller.name=ККонтролер сонячної батареї +tile.solar_array_controller.description=Підключіть модулі сонячної батареї до цього блоку для подачі живлення. Найбільш ефективний на космічних станціях. +tile.solar_array_module.name=Модуль сонячної батареї +tile.solar_array_module.description=Підключіть кілька з цих блоків до контролера сонячної батареї, щоб забезпечити подачу енергії. Найбільш ефективний на космічних станціях. +tile.spout.name=Сірчаний гейзер +tile.sulphuric_acid.name=Сірчана кислота +tile.telepad_short.description=Короткодістанціонний Телепорт використовується для переміщення гравців і інших живих істот на короткі дистанції (250 блоків), якщо вони приєднані до інших телепорт. +tile.telepad_short.name=Короткодістанціонний Телепорт +tile.terraformer.description=Терраформер використовуються для додавання зелені далеким планетам: додають траву, дерева та воду, якщо є необхідні матеріали. +tile.treasure_t2.description=Скрині зі скарбами 2-го рівня генеруються в скарбницях Марса. Їх можна відкрити після перемоги над фінальним босом. +tile.treasure_t2.name=Скриня зі скарбами 2-го рівня +tile.treasure_t3.description=Скрині зі скарбами 3-го рівня генеруються в скарбницях Венери. Їх можна відкрити після перемоги над фінальним босом. +tile.treasure_t3.name=Скриня зі скарбами 3-го рівня +tile.venus.dungeon_brick_venus_1.name=Цегла скарбниці Венери I +tile.venus.dungeon_brick_venus_2.name=Цегла скарбниці Венери II +tile.venus.venus_ore_aluminum.name=Алюмінієва руда +tile.venus.venus_ore_copper.name=Мідна руда +tile.venus.venus_ore_galena.name=Галенітова руда +tile.venus.venus_ore_quartz.name=Кварцова руда +tile.venus.venus_ore_silicon.name=Кремнієва руда +tile.venus.venus_ore_solar.name=Сонячна руда +tile.venus.venus_ore_tin.name=Олов'яна руда +tile.venus.venus_rock_0.name=М'який Венеріанський камінь +tile.venus.venus_rock_1.name=Твердий Венеріанський камінь +tile.venus.venus_rock_2.name=Вулканічний Венеріанський камінь +tile.venus.venus_rock_3.name=Пемза +tile.venus.lead_block.name=Свинцевий блок +tile.venus_rock_scorched.name=Випалений Венеріанський камінь +tile.walkway.walkway.description=Доріжки використовуються в декоративних цілях і для з'єднання блоків в космічному стилі. +tile.walkway.walkway.name=Доріжка +tile.walkway.walkway_pipe.description=Доріжки для рідинних труб використовуються для прокладання труб під повністю твердою поверхнею. +tile.walkway.walkway_pipe.name=доріжка +tile.walkway.walkway_wire.description=Доріжки для алюмінієвих проводів використовуються для прокладання проводів під повністю твердою поверхнею. +tile.walkway.walkway_wire.name=Доріжка +tile.wall_gc.mars.name=Стіна з марсіанського кругляка +tile.wall_gc.mars_bricks.name=Стіна з цегли марсіанської скарбниці +tile.web_torch.web_torch_0.name=Звисаюча павутина +tile.web_torch.web_torch_1.description=Факел з світящогося каменю +tile.web_torch.web_torch_1.name=Звисаюча павутина +achievement.mars=На Марс! +achievement.mars.desc=Надішліть ракету 2-го рівня на Марс! +achievement.asteroids=У Пояс астероїдів! +achievement.asteroids.desc=Надішліть ракету 3-го рівня в Пояс астероїдів! +achievement.venus=На Венеру! +achievement.venus.desc=Надішліть ракету 3-го рівня на Венеру! diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_cn.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_cn.lang new file mode 100644 index 00000000..b469163b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_cn.lang @@ -0,0 +1,404 @@ +checklist.craft_grapple_hook.key=制作攀援钩爪 +checklist.equip_shield_controller.key=佩戴防护控制器 +checklist.thermal_padding.key=穿戴热防护服 +checklist.thermal_padding_t2.key=穿戴等温防护服 +container.crashed_probe.name=坠毁探测器 +container.entry_pod.name=登陆平台 +container.geothermal_generator.name=地热发电机 +container.launchcontroller.name=发射控制器 +container.mars_lander.name=着陆气球 +container.solar_array_controller.name=太阳能阵列 +container.short_range_telepad.name=短程传送台 +container.slimeling_inventory.name=黏滑兽背包 +container.tile_terraformer.name=环境改造机 +dimension.mars.name=火星 +entity.astro_miner.name=太空采矿机 +entity.creeper_boss.name=太空爬行者王 +entity.entry_pod.name=登陆平台 +entity.entry_pod_venus.name=金星登陆平台 +entity.grapple_hook.name=攀援钩爪 +entity.juicer.name=丝蛛 +entity.landing_balloons.name=着陆气球 +entity.projectile_tnt.name=TNT弹 +entity.rocket_cargo.name=货运火箭 +entity.rocket_t2.name=二阶火箭 +entity.rocket_t3.name=三阶火箭 +entity.slimeling.name=黏滑兽 +entity.sludgeling.name=菌泥虫 +entity.small_asteroid.name=小行星 +entity.spider_queen.name=蜘蛛女王 +entity.web_shot.name=蛛丝 +fluid.argon=氩气 +fluid.atmosphericgases=大气 +fluid.bacterialsludge=菌泥 +fluid.carbondioxide=二氧化碳 +fluid.fuel=燃油 +fluid.helium=氦气 +fluid.hydrogen=氢气 +fluid.liquidargon=液氩 +fluid.liquidmethane=液态甲烷 +fluid.liquidnitrogen=液氮 +fluid.liquidoxygen=液氧 +fluid.methane=甲烷 +fluid.nitrogen=氮气 +fluid.oil=石油 +fluid.oxygen=氧气 +fluid.sulphuricacid=硫酸 +gas.carbondioxide.name=二氧化碳 +gas.nitrogen.name=氮气 +gas.oxygen.name=氧气 +gc.configgui.astro_miners_max=玩家太空采矿机数量上限 +gc.configgui.dimension_id_asteroids=小行星带维度ID +gc.configgui.dimension_id_mars=火星维度ID +gc.configgui.dimension_id_venus=金星维度ID +gc.configgui.disable_aluminum_gen_asteroids=禁止小行星带铝矿生成 +gc.configgui.disable_ambient_lightning=关闭金星雷暴 +gc.configgui.disable_copper_gen_mars=禁止火星铜矿石生成 +gc.configgui.disable_desh_gen_mars=禁止火星戴斯矿石生成 +gc.configgui.disable_galacticraft_helium=禁用氦气 +gc.configgui.disable_small_asteroids=禁止小行星带陨星生成 +gc.configgui.disable_ilmenite_gen_asteroids=禁止小行星带钛铁矿石生成 +gc.configgui.disable_iron_gen_asteroids=禁止小行星带铁矿石生成 +gc.configgui.disable_iron_gen_mars=禁止火星铁矿石生成 +gc.configgui.disable_tin_gen_mars=禁止火星锡矿石生成 +gc.configgui.disable_venus_aluminum_gen=禁止金星铝矿石生成 +gc.configgui.disable_venus_copper_gen=禁止金星铜矿石生成 +gc.configgui.disable_venus_galena_gen=禁止金星方铅矿石生成 +gc.configgui.disable_venus_quartz_gen=禁止金星石英矿石生成 +gc.configgui.disable_venus_silicon_gen=禁止金星硅矿石生成 +gc.configgui.disable_venus_solar_gen=禁止金星太阳能矿石生成 +gc.configgui.disable_venus_tin_gen=禁止金星锡矿石生成 +gc.configgui.id_schematic_cargo_rocket=货运火箭设计图ID +gc.configgui.id_schematic_rocket_t2=二阶火箭设计图ID +gc.configgui.id_schematic_rocket_t3=三阶火箭设计图ID +gc.configgui.launch_controller_all_dims=发射控制器所有维度 +gc.configgui.launch_controller_chunk_load=发射控制器区块加载 +gc.configgui.planets.title=Galacticraft Planets配置文件 +gui.button.add_blacklist.name=黑名单 +gui.button.add_entity.name=添加实体 +gui.button.add_player.name=添加玩家 +gui.button.add_whitelist.name=白名单 +gui.button.edit_blacklist.name=编辑黑名单 +gui.button.edit_priority.name=调整优先级 +gui.button.edit_whitelist.name=编辑白名单 +gui.button.liquefy.name=进行 +gui.button.liquefy_stop.name=终止 +gui.button.never_fire_team.name=不向太空竞赛队友射击 +gui.button.recall.name=返回 +gui.button.remove_selected.name=取消选定 +gui.carbon_slot.desc.0=碳片槽 +gui.cargorocket.status.launched.0=已经 +gui.cargorocket.status.launched.1=发射 +gui.cargorocket.status.waiting.0=等待 +gui.cargorocket.status.waiting.1=点火 +gui.choose_planet.desc.mars=宜居#无氧气#重力:38% +gui.cryogenic.chat.cant_use=在%d秒内我不能再使用它 +gui.gas_input.desc.0=放置甲烷罐 +gui.gas_input.desc.1=(或者其它的什么,$例如气闸) +gui.gas_tank.desc.0=气体存储 +gui.gas_tank_compressed.desc.0=压缩气体存储 +gui.hydrogen_input.desc.0=需要氢气罐 +gui.hydrogen_input.desc.1=或者气闸 +gui.launch_controller.advanced=先进 +gui.launch_controller.desc.0=这是发射控制器$唯一频率 +gui.launch_controller.desc.1=火箭发射频率与目的地 +gui.launch_controller.desc.2=发射时是否拆除$火箭发射平台 +gui.launch_controller.desc.3=满足条件$时火箭发射 +gui.launch_controller.desc.4=对其他玩家隐藏发射频率$ +gui.launch_controller.owner=拥有者 +gui.liquid_output.desc.2=液化气储罐 +gui.liquid_tank.desc.0=流体储罐 +gui.message.address.name=坐标 +gui.message.astro_miner.fail=此基站已绑定太空采矿机! +gui.message.astro_miner1.fail=停泊区被占用: +gui.message.astro_miner1_a.fail=太空采矿机被以下方块阻挡: +gui.message.astro_miner1_b.fail=区域受保护! +gui.message.astro_miner2.fail=有多余的太空采矿机! +gui.message.astro_miner3.fail=太空采矿机基站被拆除! +gui.message.astro_miner4.fail=太空采矿机剩余能量不足以返航! +gui.message.astro_miner5.fail=太空采矿机返航路线受阻! +gui.message.astro_miner6.fail=太空采矿机完成此区域任务进入待机! +gui.message.astro_miner7.fail=空间站可没啥好挖的! +gui.message.astro_miner8.fail=在同一基站中出现新的太空采矿机,前一台将被封存. +gui.message.blacklist_mode.name=黑名单模式 +gui.message.bubble_exp.name=气泡扩大中 +gui.message.cargo_full.name=货舱满载 +gui.message.cargo_unloaded.name=货物未卸载 +gui.message.connected_solar_controller.name=连接%d个(最大范围16米远) +gui.message.dest_address.name=目标坐标 +gui.message.dest_frequency.name=目标频率 +gui.message.enable_grass.name=种草 +gui.message.enable_trees.name=植树 +gui.message.frequency.name=频率 +gui.message.enter_entity.name=输入实体名称/id +gui.message.enter_player.name=输入玩家名称 +gui.message.fully_fueled.name=满燃料 +gui.message.grapple.fail=我得为钩爪准备点线! +gui.message.grass.name=草 +gui.message.instant.name=立即 +gui.message.invalid_address.name=无效唯一坐标 +gui.message.invalid_freq.name=无效频率 +gui.message.invalid_target_address.name=无效目标坐标 +gui.message.launch_when.name=发射前提 +gui.message.low_energy.name=低能耗 +gui.message.low_energy_output.name=低输出功率 +gui.message.no_bonemeal.name=骨粉不足 +gui.message.no_energy.name=能量不足! +gui.message.no_saplings.name=树苗不足 +gui.message.no_seeds.name=种子不足 +gui.message.no_valid_blocks.name=范围内无有效方块 +gui.message.no_water.name=缺水 +gui.message.not_enough.name=缺少 +gui.message.not_enough_energy.name=能量不足! +gui.message.not_set.name=未设置 +gui.message.one_min.name=1分钟 +gui.message.player.name=玩家 +gui.message.priority_closest.name=最近目标 +gui.message.priority_health_high.name=最高生命值目标 +gui.message.priority_health_low.name=最低生命值目标 +gui.message.priority_low.name=优先级(最低者优先) +gui.message.receiving_active.name=接受激活 +gui.message.redstone_sig.name=红石信号 +gui.message.remove_pad.name=发射时拆除发射平台 +gui.message.sending_active.name=激活发送 +gui.message.success.name=成功 +gui.message.target_meteors.name=目标小行星 +gui.message.target_no_energy.name=目标能量不足! +gui.message.telepad_not_found.name=未找到传送台! +gui.message.telepad_too_far.name=目标距离过远! (上限%d) +gui.message.telepad_wrong_dim.name=目标维度有误! +gui.message.telepad_target_disabled.name=目标无效! +gui.message.ten_sec.name=10秒 +gui.message.terraforming.name=环境改造中 +gui.message.thirty_sec.name=30秒 +gui.message.trees.name=树 +gui.message.with_atmosphere0.name=星球的大气中 +gui.message.with_atmosphere1.name=含有大量的 +gui.message.zero_water.name=缺水! +gui.methane_output.desc.2=甲烷罐 +gui.miner.docked=已停泊 +gui.miner.docking=停泊中 +gui.miner.mined=采掘完毕 +gui.miner.mining=正在采掘 +gui.miner.offline=待机 +gui.miner.out_of_range=超出范围 +gui.miner.returning=返航中 +gui.miner.stuck=受阻: +gui.miner.travelling=运行中 +gui.slimeling.button.follow=跟随 +gui.slimeling.button.sit=坐 +gui.slimeling.chat.wrong_player=这不是我的黏滑兽! +gui.slimeling.damage=攻击伤害 +gui.slimeling.following=跟随模式 +gui.slimeling.food=最爱的食品 +gui.slimeling.kills=击杀 +gui.slimeling.name=名字 +gui.slimeling.owner=主人 +gui.slimeling.scale=比例 +gui.slimeling.sitting=坐着 +gui.status.invalid_spout_1.name=必须放置在 +gui.status.invalid_spout_2.name=活动的硫酸泉上 +gui.status.liquefying.name=液化中 +gui.status.needs_carbon.name=需要碳 +gui.status.nogas.name=无气体 +gui.status.processing.name=合成中 +gui.status.tankfull.name=储罐满 +gui.status.tanksfull.name=储罐满 +gui.telepad.desc.0=这是本传送台$唯一坐标 +gui.telepad.desc.1=另一传送台坐标.$实体将会被传送过去. +gui.terraformer.desc.0=水箱 +gui.water_bucket_slot.desc=放置水桶 +item.astro_miner.name=太空采矿机 +item.atmospheric_valve.name=气闸 +item.atomic_battery.name=原子能电池 +item.beam_core.name=光束核心 +item.bucket_sludge.name=菌泥桶 +item.bucket_sulphuric_acid.name=硫酸桶 +item.canister.gas.name=甲烷 #对甲烷存储状态的缩写 +item.canister.liquid_argon.full.name=液氩罐(满) +item.canister.liquid_argon.name=液氩 #对液态氩气存储状态的缩写 +item.canister.liquid_argon.partial.name=液氩罐 +item.canister.liquid_nitrogen.full.name=液氮罐(满) +item.canister.liquid_nitrogen.name=液氮 #对液态氮气存储状态的缩写 +item.canister.liquid_nitrogen.partial.name=液氮罐 +item.canister.lox.full.name=液氧罐(满) +item.canister.lox.name=液氧 #对液态氧气存储状态的缩写 +item.canister.lox.partial.name=液氧罐 +item.carbon_fragments.name=碳片 +item.compressed_desh.name=致密戴斯 +item.compressed_titanium.name=致密钛板 +item.desh_axe.name=戴斯斧 +item.desh_boots.name=戴斯战靴 +item.desh_chestplate.name=戴斯胸甲 +item.desh_helmet.name=戴斯头盔 +item.desh_hoe.name=戴斯锄 +item.desh_leggings.name=戴斯护腿 +item.desh_pick.name=戴斯镐 +item.desh_pick_slime.description.name=可以采集爬行者蛋 +item.desh_pick_slime.name=黏滑戴斯镐 +item.desh_spade.name=戴斯锹 +item.desh_stick.name=戴斯棒 +item.desh_sword.name=戴斯剑 +item.dust_titanium.name=钛粉 +item.empty_gas_canister.name=气罐(空) +item.engine_t2.name=重装火箭引擎 +item.fluid_manip.name=流体控制仪 +item.grapple.name=攀援钩爪 +item.heavy_nose_cone.name=重装鼻锥 +item.ingot_desh.name=戴斯锭 +item.ingot_lead.name=铅锭 +item.ingot_titanium.name=钛锭 +item.key.t2.name=二阶地牢钥匙 +item.key.t3.name=三阶地牢钥匙 +item.methane_canister.name=甲烷罐(满) +item.methane_canister_partial.name=甲烷罐 +item.orion_drive.name=离子推进器 +item.prelaunch_checklist.name=发射检查表 +item.radioisotope_core.name=放射能核心 +item.raw_desh.name=原生戴斯 +item.reinforced_plate_t2.name=二阶重装防护板 +item.reinforced_plate_t3.name=三阶重装防护板 +item.rocket_fins_t2.name=重装火箭尾翼 +item.rocket_t2.cargo_rocket.name=自动货运火箭 +item.rocket_t2.t2Rocket.name=二阶火箭 +item.rocket_t3.t3Rocket.name=三阶火箭 +item.shard_iron.name=铁矿片 +item.shard_titanium.name=钛矿片 +item.shield_controller.description=防护力场控制器能使护甲免遭气体腐蚀等任何破坏! +item.shield_controller.name=防护力场控制器 +item.slimeling_cargo.name=黏滑兽背包 +item.solar_dust.name=太阳能粉尘 +item.solar_module_2.name=阵列太阳能板 +item.strange_seed.name=奇异种子 +item.thermal_boots.name=热防护靴 +item.thermal_boots_t2.name=等温防护靴 +item.thermal_chestplate.name=热防护背心 +item.thermal_chestplate_t2.name=等温防护背心 +item.thermal_cloth.name=热防护布料 +item.thermal_fabric.name=等温防护织物 +item.thermal_helm.name=热防护帽 +item.thermal_helm_t2.name=等温防护帽 +item.thermal_leggings.name=热防护裤 +item.thermal_leggings_t2.name=等温防护裤 +item.thin_solar_wafer.name=阵列太阳能晶圆 +item.tier2.desc=二阶 +item.tier3.desc=三阶 +item.titanium_axe.name=钛斧 +item.titanium_boots.name=钛战靴 +item.titanium_chestplate.name=钛胸甲 +item.titanium_helmet.name=钛头盔 +item.titanium_hoe.name=钛锄 +item.titanium_leggings.name=钛护腿 +item.titanium_pickaxe.name=钛镐 +item.titanium_shovel.name=钛锹 +item.titanium_sword.name=钛剑 +item.volcanic_pickaxe.description=能够依据玩家所对的方向挖掘3×3范围的方块. +item.volcanic_pickaxe.name=火山破坏镐 +planet.asteroids=小行星带 +planet.mars=火星 +schematic.astro_miner.name=太空采矿机 +schematic.cargo_rocket.name=自动货运火箭 +schematic.rocket_t3.name=三阶火箭 +tile.asteroids_block.asteroid_rock_0.name=行星岩 +tile.asteroids_block.asteroid_rock_1.name=浅行星岩 +tile.asteroids_block.asteroid_rock_2.name=亮行星岩 +tile.asteroids_block.ore_aluminum_asteroids.name=铝矿石 +tile.asteroids_block.ore_ilmenite_asteroids.name=钛铁矿石 +tile.asteroids_block.ore_iron_asteroids.name=铁矿石 +tile.asteroids_block.asteroid_deco.name=暗行星岩 +tile.asteroids_block.titanium_block.name=钛块 +tile.beam_receiver.description=能量射束收发仪使用激光束为相连机器传输能量. +tile.beam_receiver.name=能量射束收发仪 +tile.beam_reflector.description=能量射束反射仪能折射能量光束.右击以在不同目标间循环切换. +tile.beam_reflector.name=能量射束反射仪 +tile.cavern_vines.description=岩穴藤蔓是危险的杀手,会卷住生物并拖向空中. +tile.cavern_vines.name=岩穴藤蔓 +tile.crashed_probe.name=坠毁探测器 +tile.creeper_egg.description=爬行者蛋会在火星地牢生成,引爆有惊喜. +tile.creeper_egg.name=爬行者蛋 +tile.cryo_chamber.description=白天玩家也能在冬眠舱中睡觉并回复少量生命,但需要时间冷却. +tile.dense_ice.name=坚冰 +tile.electrolyzer.description=将水电解成氧气和氢气(可合成甲烷). +tile.gas_liquefier.description=来自大气或容器的液化气体,液态甲烷是不错的火箭燃料! +tile.geothermal_generator.description=通过其下方的活动硫酸泉,以起伏不定的效率产生电力. +tile.geothermal_generator.name=地热发电机 +tile.hydrogen_pipe.description=氢气管道用于在不同的机器和储罐间输送氢气. +tile.hydrogen_pipe.name=氢气管道 +tile.launch_controller.description=发射控制器与火箭发射平台连接后,能够设置发射数据并自动发射火箭. +tile.laser_turret.name=激光塔 +tile.laser_turret.description=可以打击小行星、生物或玩家。 +tile.mars.coppermars.name=铜矿石 +tile.mars.deshmars.name=戴斯矿石 +tile.mars.ironmars.name=铁矿石 +tile.mars.marscobblestone.name=火星圆石 +tile.mars.marsdeco.name=戴斯块 +tile.mars.marsdirt.name=火星浅层岩 +tile.mars.marsdungeon.name=火星地牢砖 +tile.mars.marsgrass.name=火星表层岩 +tile.mars.marsstone.name=火星石头 +tile.mars.tinmars.name=锡矿石 +tile.mars_machine.0.name=环境改造机 +tile.mars_machine.1.name=冬眠舱 +tile.mars_machine.2.name=发射控制器 +tile.mars_machine.4.name=气体液化机 +tile.mars_machine.5.name=甲烷合成机 +tile.mars_machine.6.name=水电解机 +tile.mars_stairs_brick.name=火星地牢砖楼梯 +tile.mars_stairs_cobblestone.name=火星圆石楼梯 +tile.methane_synthesizer.description=利用氢气和碳制造甲烷,需要气体液化机进一步加工成品. +tile.miner_base.description=太空采矿机基站为绑定的太空采矿机提供有关的辅助工作.基站体积不小,需要用这些方块搭建边长为2的立方体. +tile.miner_base.name=太空采矿机基站 +tile.miner_base_full.name=太空采矿机基站 +tile.slab_gc_half.mars_bricks_slab.name=火星地牢砖台阶 +tile.slab_gc_half.mars_slab.name=火星圆石台阶 +tile.slab_gc_half.asteroids_slab.name=暗色行星岩台阶 +tile.slimeling_egg.blue.name=蓝色黏滑蛋 +tile.slimeling_egg.description=黏滑蛋,玩家空手打碎后就会立即孵出一只宠物黏滑兽. +tile.slimeling_egg.red.name=红色黏滑蛋 +tile.slimeling_egg.yellow.name=黄色黏滑蛋 +tile.sludge.name=菌泥 +tile.solar_array_controller.name=太阳能阵列控制器 +tile.solar_array_controller.description=将阵列太阳能单体模块连接到控制器上即可产生能量。在空间站效率更高,效果更好。 +tile.solar_array_module.name=阵列太阳能单体模块 +tile.solar_array_module.description=将一些阵列太阳能单体模块连接到控制器上即可产生能量。在空间站效率更高,效果更好。 +tile.spout.name=硫蒸汽泉 +tile.sulphuric_acid.name=硫酸 +tile.telepad_short.description=短程传送台可将玩家和生物传送到短程(250m)范围内与之连接的其它传送台处. +tile.telepad_short.name=短程传送台 +tile.terraformer.description=环境改造机在荒凉的星球表面改变环境,在有适合材料时种植植物,涵养水源. +tile.treasure_t2.description=二阶珍宝箱在火星地牢生成,打败最终boss获取钥匙以打开. +tile.treasure_t2.name=二阶珍宝箱 +tile.treasure_t3.description=三阶珍宝箱在金星地牢生成,打败最终boss获取钥匙以打开. +tile.treasure_t3.name=三阶珍宝箱 +tile.venus.dungeon_brick_venus_1.name=红金星地牢砖 +tile.venus.dungeon_brick_venus_2.name=橙金星地牢砖 +tile.venus.venus_ore_aluminum.name=铝矿石 +tile.venus.venus_ore_copper.name=铜矿石 +tile.venus.venus_ore_galena.name=方铅矿石 +tile.venus.venus_ore_quartz.name=石英矿石 +tile.venus.venus_ore_silicon.name=硅矿石 +tile.venus.venus_ore_solar.name=太阳能矿石 +tile.venus.venus_ore_tin.name=锡矿石 +tile.venus.venus_rock_0.name=软质金星岩 +tile.venus.venus_rock_1.name=硬质金星岩 +tile.venus.venus_rock_2.name=金星火山岩 +tile.venus.venus_rock_3.name=浮石 +tile.venus.lead_block.name=铅块 +tile.venus_rock_scorched.name=焦糊金星岩 +tile.walkway.walkway.description=通道是用于方块连接的太空风格建材,用于方块连接. +tile.walkway.walkway.name=通道 +tile.walkway.walkway_pipe.description=管道通道的可行走表面下装有流体管道. +tile.walkway.walkway_pipe.name=管道通道 +tile.walkway.walkway_wire.description=线缆通道的可行走表面下装有线缆. +tile.walkway.walkway_wire.name=线缆通道 +tile.wall_gc.mars.name=火星圆石墙 +tile.wall_gc.mars_bricks.name=火星地牢砖墙 +tile.web_torch.web_torch_0.name=悬垂蛛丝 +tile.web_torch.web_torch_1.description=萤石火把 +tile.web_torch.web_torch_1.name=萤石蛛丝 +achievement.mars=前往火星! +achievement.mars.desc=乘坐二阶火箭到达火星! +achievement.asteroids=小行星带的征途! +achievement.asteroids.desc=乘坐三阶火箭到达小行星带! +achievement.venus=金星探秘! +achievement.venus.desc=乘坐三阶火箭到达金星! diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_tw.lang b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_tw.lang new file mode 100644 index 00000000..92954c67 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/lang/zh_tw.lang @@ -0,0 +1,364 @@ +checklist.craft_grapple_hook.key=合成抓鉤 +checklist.equip_shield_controller.key=裝備護罩控制器 +checklist.thermal_padding.key=裝備熱力充能套裝 +checklist.thermal_padding_t2.key=裝備二級熱力充能套裝 +container.crashed_probe.name=墜毀的探測器 +container.entry_pod.name=太空艙 +container.geothermal_generator.name=地熱發電機 +container.launchcontroller.name=發射控制器 +container.mars_lander.name=著陸氣球 +container.short_range_telepad.name=短距離傳送臺 +container.slimeling_inventory.name=黏滑怪物品欄 +container.tile_terraformer.name=地形改造機 +dimension.mars.name=火星 +entity.astro_miner.name=阿斯抽挖掘機 +entity.creeper_boss.name=進化苦力怕王 +entity.entry_pod.name=太空艙 +entity.entry_pod_venus.name=金星太空艙 +entity.grapple_hook.name=抓鉤 +entity.juicer.name=榨汁機 +entity.landing_balloons.name=著陸氣球 +entity.projectile_tnt.name=發射的TNT +entity.rocket_cargo.name=貨運火箭 +entity.rocket_t2.name=二階火箭 +entity.rocket_t3.name=三階火箭 +entity.slimeling.name=黏滑怪 +entity.sludgeling.name=泥漿怪 +entity.small_asteroid.name=小行星 +entity.spider_queen.name=蜘蛛女王 +entity.web_shot.name=蛛網射擊 +fluid.argon=氬氣 +fluid.atmosphericgases=空氣 +fluid.bacterialsludge=菌泥 +fluid.carbondioxide=二氧化碳 +fluid.fuel=燃油 +fluid.helium=氦氣 +fluid.hydrogen=氫氣 +fluid.liquidargon=液態氬 +fluid.liquidmethane=液態甲烷 +fluid.liquidnitrogen=液態氮 +fluid.liquidoxygen=液態氧 +fluid.methane=甲烷 +fluid.nitrogen=氮氣 +fluid.oil=石油 +fluid.oxygen=氧氣 +fluid.sulphuricacid=硫酸 +gas.carbondioxide.name=二氧化碳 +gas.nitrogen.name=氮氣 +gas.oxygen.name=氧氣 +gc.configgui.astro_miners_max=每位玩家的最大數量的阿斯抽挖掘機 +gc.configgui.dimension_id_asteroids=小行星維度ID +gc.configgui.dimension_id_mars=火星維度ID +gc.configgui.dimension_id_venus=金星維度ID +gc.configgui.disable_aluminum_gen_asteroids=禁止鋁礦生成(小行星) +gc.configgui.disable_ambient_lightning=禁止打雷(金星) +gc.configgui.disable_copper_gen_mars=禁止銅礦生成(火星) +gc.configgui.disable_desh_gen_mars=禁止達斯礦生成(火星) +gc.configgui.disable_galacticraft_helium=禁止氦氣定位 +gc.configgui.disable_ilmenite_gen_asteroids=禁止鈦鐵礦生成(小行星) +gc.configgui.disable_iron_gen_asteroids=禁止鐵礦生成(小行星) +gc.configgui.disable_iron_gen_mars=禁止鐵礦生成(火星) +gc.configgui.disable_tin_gen_mars=禁止錫礦生成(火星) +gc.configgui.disable_venus_aluminum_gen=禁止鋁礦生成(金星) +gc.configgui.disable_venus_copper_gen=禁止銅礦生成(金星) +gc.configgui.disable_venus_galena_gen=禁止方鉛礦生成(金星) +gc.configgui.disable_venus_quartz_gen=禁止石英礦生成(金星) +gc.configgui.disable_venus_silicon_gen=禁止矽礦生成(金星) +gc.configgui.disable_venus_tin_gen=禁止錫礦生成(金星) +gc.configgui.id_schematic_cargo_rocket=自動貨運火箭設計圖ID +gc.configgui.id_schematic_rocket_t2=二階火箭設計圖ID +gc.configgui.id_schematic_rocket_t3=三階火箭設計圖ID +gc.configgui.launch_controller_all_dims=發射控制器所有維度 +gc.configgui.launch_controller_chunk_load=發射控制器區塊加載 +gc.configgui.planets.title=Galacticraft Planets配置 +gui.button.liquefy.name=進行 +gui.button.liquefy_stop.name=中止 +gui.button.recall.name=重新呼喚 +gui.carbon_slot.desc.0=碳片可以來這裡 +gui.cargorocket.status.launched.0=準備完畢 +gui.cargorocket.status.launched.1=發射完畢 +gui.cargorocket.status.waiting.0=正在等待 +gui.cargorocket.status.waiting.1=點火裝置 +gui.choose_planet.desc.mars=宜居#無氧氣#重力:38% +gui.cryogenic.chat.cant_use=我不能在%d秒內使用這個! +gui.gas_input.desc.0=嘗試把甲烷儲氣罐放置在這 +gui.gas_input.desc.1=(也許有另外的東西,$比如一個氣閘) +gui.gas_tank.desc.0=儲氣罐 +gui.gas_tank_compressed.desc.0=儲氣罐(已壓縮) +gui.hydrogen_input.desc.0=這里需要一個氫氣儲罐 +gui.hydrogen_input.desc.1=或者一個氣閘 +gui.launch_controller.advanced=高級 +gui.launch_controller.desc.0=這是發射控制器的$唯一頻率 +gui.launch_controller.desc.1=火箭發射頻率,火箭前往 +gui.launch_controller.desc.2=發射臺是否$在發射時移除 +gui.launch_controller.desc.3=當這個條件達到時,$火箭就會發射 +gui.launch_controller.desc.4=從其他玩家$隱藏目標頻率 +gui.launch_controller.owner=擁有者 +gui.liquid_output.desc.2=液化儲氣罐 +gui.liquid_tank.desc.0=液罐 +gui.message.address.name=坐標 +gui.message.astro_miner.fail=這個基座已經有一個阿斯抽挖掘機! +gui.message.astro_miner1.fail=對接區域被東西阻塞: +gui.message.astro_miner1_a.fail=阿斯抽挖掘機的路線被東西阻塞: +gui.message.astro_miner2.fail=那只有一個阿斯抽挖掘機,太多了! +gui.message.astro_miner3.fail=阿斯抽挖掘機已經被移除! +gui.message.astro_miner4.fail=阿斯抽挖掘機耗盡能量以及不能回到基座! +gui.message.astro_miner5.fail=阿斯抽挖掘機的路線進入它的基座,似乎是被阻塞! +gui.message.astro_miner6.fail=阿斯抽挖掘機已經完成挖掘工作,現在將會停止! +gui.message.astro_miner7.fail=空間站沒有東西可以讓阿斯抽挖掘機去挖掘! +gui.message.astro_miner8.fail=另一個阿斯抽挖掘機被偵測到在同一個基座,原先的現在將會凍結。 +gui.message.bubble_exp.name=氣泡擴大 +gui.message.cargo_full.name=貨物已滿 +gui.message.cargo_unloaded.name=貨物未卸載時 +gui.message.dest_address.name=目標坐標 +gui.message.dest_frequency.name=目標頻率 +gui.message.enable_grass.name=啟用種草 +gui.message.enable_trees.name=啟用植樹 +gui.message.frequency.name=頻率 +gui.message.fully_fueled.name=燃料已裝滿 +gui.message.grapple.fail=如果我想拋那個抓鉤我就需要一些線! +gui.message.grass.name=草 +gui.message.instant.name=立即 +gui.message.invalid_address.name=無效的唯一坐標 +gui.message.invalid_freq.name=無效頻率 +gui.message.invalid_target_address.name=無效的目標坐標 +gui.message.launch_when.name=發射當 +gui.message.low_energy.name=低電力 +gui.message.low_energy_output.name=低電力輸出 +gui.message.no_bonemeal.name=骨粉不足 +gui.message.no_energy.name=電力不足 +gui.message.no_saplings.name=樹苗不足 +gui.message.no_seeds.name=種子不足 +gui.message.no_valid_blocks.name=氣泡內無有效方塊 +gui.message.no_water.name=水量不足 +gui.message.not_enough.name=缺少 +gui.message.not_enough_energy.name=能量不足 +gui.message.not_set.name=未設置 +gui.message.one_min.name=1分鐘 +gui.message.receiving_active.name=啟動接受 +gui.message.redstone_sig.name=紅石信號 +gui.message.remove_pad.name=移除平板 +gui.message.sending_active.name=啟動發送 +gui.message.success.name=成功 +gui.message.target_no_energy.name=目標沒有足夠的能量 +gui.message.telepad_not_found.name=未找到目標! +gui.message.telepad_too_far.name=目標太遠!(最遠 %d) +gui.message.telepad_wrong_dim.name=目標正在錯誤的維度! +gui.message.ten_sec.name=10秒 +gui.message.terraforming.name=正在進行環境改造 +gui.message.thirty_sec.name=30秒 +gui.message.trees.name=樹 +gui.message.with_atmosphere0.name=一個星球上有很多 +gui.message.with_atmosphere1.name=在大氣中 +gui.message.zero_water.name=沒有水! +gui.methane_output.desc.2=沼氣池 +gui.miner.docked=已停靠 +gui.miner.docking=停靠中 +gui.miner.mined=挖掘完畢 +gui.miner.mining=挖掘中 +gui.miner.offline=離線 +gui.miner.out_of_range=超出範圍 +gui.miner.returning=返回中 +gui.miner.stuck=卡在: +gui.miner.travelling=運行中 +gui.slimeling.button.follow=跟隨 +gui.slimeling.button.sit=坐下 +gui.slimeling.chat.wrong_player=這不是我的黏滑怪! +gui.slimeling.damage=攻擊傷害 +gui.slimeling.following=跟隨中 +gui.slimeling.food=喜歡的食物 +gui.slimeling.kills=殺敵數 +gui.slimeling.name=名字 +gui.slimeling.owner=主人 +gui.slimeling.scale=尺寸 +gui.slimeling.sitting=坐着 +gui.status.invalid_spout_1.name=必須放在有效的 +gui.status.invalid_spout_2.name=硫磺噴口上 +gui.status.liquefying.name=液化中 +gui.status.needs_carbon.name=需要碳 +gui.status.nogas.name=沒有氣體 +gui.status.processing.name=合成中 +gui.status.tankfull.name=罐子滿了 +gui.status.tanksfull.name=罐子都滿了 +gui.telepad.desc.0=這是傳送臺的的$唯一坐標 +gui.telepad.desc.1=另一個傳送臺的坐標。$實體會被傳送到那里。 +gui.terraformer.desc.0=水箱 +gui.water_bucket_slot.desc=在這裡放置水桶 +item.astro_miner.name=阿斯抽挖掘者 +item.atmospheric_valve.name=氣閘 +item.atomic_battery.name=原子電池 +item.beam_core.name=光束核心 +item.bucket_sludge.name=菌泥桶 +item.bucket_sulphuric_acid.name=硫酸桶 +item.canister.gas.name=氣體 +item.canister.liquid_argon.full.name=裝滿的灌裝液態氬 +item.canister.liquid_argon.name=液態氬 +item.canister.liquid_argon.partial.name=灌裝液態氬 +item.canister.liquid_nitrogen.full.name=裝滿的灌裝液態氮 +item.canister.liquid_nitrogen.name=液態氮 +item.canister.liquid_nitrogen.partial.name=灌裝液態氮 +item.canister.lox.full.name=裝滿的罐裝液態氧 +item.canister.lox.name=液態氧 +item.canister.lox.partial.name=罐裝液態氧 +item.carbon_fragments.name=碳片 +item.compressed_desh.name=致密戴斯 +item.compressed_titanium.name=致密鈦 +item.desh_axe.name=戴斯斧 +item.desh_boots.name=戴斯靴子 +item.desh_chestplate.name=戴斯胸甲 +item.desh_helmet.name=戴斯頭盔 +item.desh_hoe.name=戴斯鋤 +item.desh_leggings.name=戴斯護腿 +item.desh_pick.name=戴斯鎬 +item.desh_pick_slime.description.name=可用於回收苦力怕蛋 +item.desh_pick_slime.name=黏黏的戴斯鎬 +item.desh_spade.name=戴斯鏟 +item.desh_stick.name=戴斯棒 +item.desh_sword.name=戴斯劍 +item.dust_titanium.name=鈦粉 +item.empty_gas_canister.name=空的儲氣罐 +item.engine_t2.name=重型火箭引擎 +item.fluid_manip.name=流體機械手 +item.grapple.name=吊鉤 +item.heavy_nose_cone.name=重型前錐體 +item.ingot_desh.name=戴斯錠 +item.ingot_lead.name=鉛錠 +item.ingot_titanium.name=鈦錠 +item.key.t2.name=二階地牢鑰匙 +item.key.t3.name=三階地牢鑰匙 +item.methane_canister.name=裝滿的甲烷儲氣罐 +item.methane_canister_partial.name=甲烷儲氣罐 +item.orion_drive.name=礦物離子驅動器 +item.prelaunch_checklist.name=發行前清單 +item.radioisotope_core.name=放射性同位素核心 +item.raw_desh.name=未精煉戴斯礦 +item.reinforced_plate_t2.name=重裝板 +item.reinforced_plate_t3.name=重型板 +item.rocket_fins_t2.name=重型火箭鰭 +item.rocket_t2.cargo_rocket.name=貨運火箭 +item.rocket_t2.t2Rocket.name=二階火箭 +item.rocket_t3.t3Rocket.name=三階火箭 +item.shard_iron.name=鐵碎片 +item.shard_titanium.name=鈦碎片 +item.shield_controller.description=護罩控制器保護裝甲免受各種形式的損害——包括大氣腐蝕! +item.shield_controller.name=護罩控制器 +item.slimeling_cargo.name=黏滑物品背包 +item.strange_seed.name=奇怪的種子 +item.thermal_boots.name=熱力充能靴子 +item.thermal_boots_t2.name=等溫靴子 +item.thermal_chestplate.name=熱力充能胸甲 +item.thermal_chestplate_t2.name=等溫胸甲 +item.thermal_cloth.name=熱力布料 +item.thermal_fabric.name=等溫布料 +item.thermal_helm.name=熱力充能頭盔 +item.thermal_helm_t2.name=等溫頭盔 +item.thermal_leggings.name=熱力充能護腿 +item.thermal_leggings_t2.name=等溫護腿 +item.tier2.desc=二階 +item.tier3.desc=三階 +item.titanium_axe.name=鈦斧 +item.titanium_boots.name=鈦製靴子 +item.titanium_chestplate.name=鈦製胸甲 +item.titanium_helmet.name=鈦製頭盔 +item.titanium_hoe.name=鈦鋤 +item.titanium_leggings.name=鈦製護腿 +item.titanium_pickaxe.name=鈦鎬 +item.titanium_shovel.name=鈦鏟 +item.titanium_sword.name=鈦劍 +item.volcanic_pickaxe.description=根據你面對的方向開採3x3區域 +item.volcanic_pickaxe.name=火山鎬 +planet.asteroids=小行星 +planet.mars=火星 +schematic.astro_miner.name=阿斯抽挖掘者 +schematic.cargo_rocket.name=自動貨運火箭 +schematic.rocket_t3.name=三階火箭 +tile.asteroids_block.asteroid_rock_0.name=行星巖 +tile.asteroids_block.asteroid_rock_1.name=行星巖 +tile.asteroids_block.asteroid_rock_2.name=行星巖 +tile.asteroids_block.ore_aluminum_asteroids.name=鋁礦 +tile.asteroids_block.ore_ilmenite_asteroids.name=鈦鐵礦 +tile.asteroids_block.ore_iron_asteroids.name=鐵礦 +tile.asteroids_block.asteroid_deco.name=暗色裝飾方塊 +tile.asteroids_block.titanium_block.name=鈦磚 +tile.beam_receiver.description=能量射束接收器用作鏈接機器的輸入和輸出,用射束傳送能量。 +tile.beam_receiver.name=能量射束接收器 +tile.beam_reflector.description=能量射束反射器用作從改變能量射束來源的方向至目標的方向。點擊滑鼠右鍵可以改變目標方向。 +tile.beam_reflector.name=能量射束反射器 +tile.cavern_vines.description=巖穴藤蔓對生物有危險,纏繞它們再將它們向上拖動。 +tile.cavern_vines.name=巖穴藤蔓 +tile.crashed_probe.name=墜毀的探測器 +tile.creeper_egg.description=苦力怕蛋會生成於火星地牢裡,爆炸時會生出一個鬼鬼祟祟的捕食者。 +tile.creeper_egg.name=苦力怕蛋 +tile.cryo_chamber.description=低溫倉允許玩家在日間睡覺,恢復少量生命值,但有個冷卻。 +tile.dense_ice.name=濃密的冰 +tile.electrolyzer.description=把水分解為氫氣(對甲烷合成器有用)和氧氣。 +tile.gas_liquefier.description=可以從大氣層或者罐液化氣體,液化甲烷做一個好的火箭燃料! +tile.geothermal_generator.description=當放置在有效的硫磺蒸汽噴口時,以振盪速率產生能量 +tile.geothermal_generator.name=地熱發電機 +tile.hydrogen_pipe.description=氫氣管道會輸送氫氣從一個機器內部氣體罐到另一個。 +tile.hydrogen_pipe.name=氫氣管道 +tile.launch_controller.description=發射控制器用作定制發射的行為,包括發射標準以及為主動發射的發射墊。 +tile.mars.coppermars.name=銅礦 +tile.mars.deshmars.name=戴斯礦 +tile.mars.ironmars.name=鐵礦 +tile.mars.marscobblestone.name=火星鵝卵石 +tile.mars.marsdeco.name=戴斯磚 +tile.mars.marsdirt.name=火星地底巖石 +tile.mars.marsdungeon.name=火星地牢磚 +tile.mars.marsgrass.name=火星地表巖石 +tile.mars.marsstone.name=火星石頭 +tile.mars.tinmars.name=錫礦 +tile.mars_machine.0.name=地形改造機 +tile.mars_machine.1.name=低溫倉 +tile.mars_machine.2.name=發射控制器 +tile.mars_machine.4.name=氣體液化器 +tile.mars_machine.5.name=甲烷合成器 +tile.mars_machine.6.name=水電解器 +tile.mars_stairs_brick.name=火星地牢磚階梯 +tile.mars_stairs_cobblestone.name=火星鵝卵石階梯 +tile.methane_synthesizer.description=隨著氫氣來源和碳來源,這製造甲烷在氣體液化器進一步處理。 +tile.miner_base.description=阿斯抽挖掘機的基座是其停靠點。這很大……試試做個2x2x2的空間。 +tile.miner_base.name=阿斯抽挖掘機基座 +tile.miner_base_full.name=阿斯抽挖掘機基座 +tile.slab_gc_half.mars_bricks_slab.name=火星地牢磚半磚 +tile.slab_gc_half.mars_slab.name=火星鵝卵石半磚 +tile.slab_gc_half.asteroids_slab.name=暗色裝飾半磚 +tile.slimeling_egg.blue.name=藍色黏滑怪蛋 +tile.slimeling_egg.description=黏滑怪蛋,當玩家空手打碎它時,會很快孵化成一個寵物。 +tile.slimeling_egg.red.name=紅色黏滑怪蛋 +tile.slimeling_egg.yellow.name=黃色黏滑怪蛋 +tile.sludge.name=菌泥 +tile.spout.name=蒸氣噴口 +tile.sulphuric_acid.name=硫酸 +tile.telepad_short.description=當短距離傳送臺與另一個傳送臺鏈接,可以傳送玩家和其他生物到一小段距離(250格方塊)。 +tile.telepad_short.name=短距離傳送臺 +tile.terraformer.description=地形改造機用作綠化遙遠的星球,增加草、樹和水當給予正確的材料。 +tile.treasure_t2.description=二階寶箱會生成於火星地牢裡。它們會在擊敗最終Boss後解鎖 +tile.treasure_t2.name=二階寶箱 +tile.treasure_t3.description=三階寶箱會生成於金星地牢裡。它們會在擊敗最終Boss後解鎖 +tile.treasure_t3.name=三階寶箱 +tile.venus.dungeon_brick_venus_1.name=金星地牢磚I +tile.venus.dungeon_brick_venus_2.name=金星地牢磚II +tile.venus.venus_ore_aluminum.name=鋁礦 +tile.venus.venus_ore_copper.name=銅礦 +tile.venus.venus_ore_galena.name=方鉛礦 +tile.venus.venus_ore_quartz.name=石英礦 +tile.venus.venus_ore_silicon.name=矽礦 +tile.venus.venus_ore_tin.name=錫礦 +tile.venus.venus_rock_0.name=金星軟石頭 +tile.venus.venus_rock_1.name=金星硬石頭 +tile.venus.venus_rock_2.name=金星火山岩 +tile.venus.venus_rock_3.name=浮石 +tile.venus.lead_block.name=鉛磚 +tile.venus_rock_scorched.name=焦燒金星石頭 +tile.walkway.walkway.description=通道是裝飾用途,用來鏈接方塊而維護一個空間主題。 +tile.walkway.walkway.name=通道 +tile.walkway.walkway_pipe.description=氧氣通道用於在完全實心的可行走表面下方運行通道。 +tile.walkway.walkway_pipe.name=通道 +tile.walkway.walkway_wire.description=鋁線通道用於在完全實心的可行走表面下方運行電線。 +tile.walkway.walkway_wire.name=通道 +tile.wall_gc.mars.name=火星鵝卵石牆 +tile.wall_gc.mars_bricks.name=火星地牢磚牆 +tile.web_torch.web_torch_0.name=蛛網線 +tile.web_torch.web_torch_1.description=螢石火把 +tile.web_torch.web_torch_1.name=蛛網線 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner.obj new file mode 100644 index 00000000..125dd7d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner.obj @@ -0,0 +1,1829 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:08:39 + +mtllib astroMiner.mtl + +# +# object Hoverpad_Heavy_Left +# + +v -10.3242 -15.0898 -1.9011 +v -13.6856 -10.3617 -3.4329 +v -11.1974 -10.3617 -8.8927 +v -7.8360 -15.0898 -7.3608 +v -8.8901 -13.8585 -1.2475 +v -12.2515 -9.1304 -2.7794 +v -9.7633 -9.1304 -8.2391 +v -6.4019 -13.8585 -6.7073 +# 8 vertices + +vn -0.7171 -0.6157 -0.3268 +vn -0.4147 0.0000 0.9100 +vn -0.5602 0.7880 -0.2553 +vn 0.4147 -0.0000 -0.9100 +vn 0.5602 -0.7880 0.2553 +# 5 vertex normals + +vt 0.5313 0.4297 0.5156 +vt 0.5781 0.4297 0.5156 +vt 0.5781 0.5234 0.5156 +vt 0.5313 0.5234 0.5156 +vt 0.5156 0.5234 0.4531 +vt 0.5156 0.4297 0.4531 +vt 0.5313 0.4297 0.4531 +vt 0.5313 0.5234 0.4531 +vt 0.5156 0.5234 0.5469 +vt 0.5156 0.4297 0.5469 +vt 0.5313 0.4297 0.5469 +vt 0.5313 0.5234 0.5469 +# 12 texture coords + +g Hoverpad_Heavy_Left +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +s 2 +f 5/5/2 6/6/2 2/7/2 1/8/2 +s 4 +f 6/9/3 7/10/3 3/11/3 2/12/3 +s 2 +f 7/9/4 8/10/4 4/11/4 3/12/4 +s 4 +f 8/5/5 5/6/5 1/7/5 4/8/5 +# 5 polygons + +# +# object Hoverpad_Heavy___Glow001 +# + +v -7.7071 -15.7916 -7.8516 +v -10.6100 -15.7916 -1.4818 +v -14.5316 -10.2755 -3.2690 +v -11.6287 -10.2755 -9.6387 +v -5.9145 -14.2525 -7.0346 +v -8.8173 -14.2525 -0.6649 +v -12.7389 -8.7364 -2.4520 +v -9.8361 -8.7364 -8.8218 +# 8 vertices + +vn -0.7171 -0.6157 -0.3268 +vn 0.5602 -0.7880 0.2553 +vn -0.4147 -0.0000 0.9100 +vn -0.5602 0.7880 -0.2553 +vn 0.4147 0.0000 -0.9100 +# 5 vertex normals + +vt 0.5352 0.3047 0.5195 +vt 0.5898 0.3047 0.5195 +vt 0.5898 0.4141 0.5195 +vt 0.5352 0.4141 0.5195 +vt 0.5156 0.4141 0.4453 +vt 0.5156 0.3047 0.4453 +vt 0.5352 0.3047 0.4453 +vt 0.5352 0.4141 0.4453 +vt 0.5156 0.4141 0.5547 +vt 0.5156 0.3047 0.5547 +vt 0.5352 0.3047 0.5547 +vt 0.5352 0.4141 0.5547 +# 12 texture coords + +g Hoverpad_Heavy___Glow001 +usemtl Material__2 +s 1 +f 9/13/6 10/14/6 11/15/6 12/16/6 +s 2 +f 13/17/7 14/18/7 10/19/7 9/20/7 +s 4 +f 14/21/8 15/22/8 11/23/8 10/24/8 +s 2 +f 15/21/9 16/22/9 12/23/9 11/24/9 +s 4 +f 16/17/10 13/18/10 9/19/10 12/20/10 +# 5 polygons + +# +# object Hoverpad_Heavy_Right +# + +v 13.6798 -10.3468 -3.4303 +v 10.3185 -15.0749 -1.8985 +v 7.8303 -15.0749 -7.3582 +v 11.1917 -10.3468 -8.8901 +v 12.2457 -9.1155 -2.7768 +v 8.8844 -13.8435 -1.2449 +v 6.3962 -13.8435 -6.7047 +v 9.7576 -9.1155 -8.2365 +# 8 vertices + +vn 0.7171 -0.6157 -0.3268 +vn 0.4147 0.0000 0.9100 +vn -0.5602 -0.7880 0.2553 +vn -0.4147 -0.0000 -0.9100 +vn 0.5602 0.7880 -0.2553 +# 5 vertex normals + +vt 0.5313 0.4297 0.5156 +vt 0.5781 0.4297 0.5156 +vt 0.5781 0.5234 0.5156 +vt 0.5313 0.5234 0.5156 +vt 0.5156 0.5234 0.4531 +vt 0.5156 0.4297 0.4531 +vt 0.5313 0.4297 0.4531 +vt 0.5313 0.5234 0.4531 +vt 0.5156 0.5234 0.5469 +vt 0.5156 0.4297 0.5469 +vt 0.5313 0.4297 0.5469 +vt 0.5313 0.5234 0.5469 +# 12 texture coords + +g Hoverpad_Heavy_Right +usemtl 05___Default +s 1 +f 17/25/11 18/26/11 19/27/11 20/28/11 +s 2 +f 21/29/12 22/30/12 18/31/12 17/32/12 +s 4 +f 22/33/13 23/34/13 19/35/13 18/36/13 +s 2 +f 23/33/14 24/34/14 20/35/14 19/36/14 +s 4 +f 24/29/15 21/30/15 17/31/15 20/32/15 +# 5 polygons + +# +# object Hoverpad_Heavy___Glow002 +# + +v 11.6230 -10.2606 -9.6361 +v 14.5258 -10.2606 -3.2664 +v 10.6042 -15.7767 -1.4792 +v 7.7014 -15.7767 -7.8490 +v 9.8303 -8.7215 -8.8192 +v 12.7332 -8.7215 -2.4494 +v 8.8116 -14.2375 -0.6623 +v 5.9087 -14.2375 -7.0320 +# 8 vertices + +vn 0.7171 -0.6157 -0.3268 +vn 0.5602 0.7880 -0.2553 +vn 0.4147 -0.0000 0.9100 +vn -0.5602 -0.7880 0.2553 +vn -0.4147 0.0000 -0.9100 +# 5 vertex normals + +vt 0.5352 0.3047 0.5195 +vt 0.5898 0.3047 0.5195 +vt 0.5898 0.4141 0.5195 +vt 0.5352 0.4141 0.5195 +vt 0.5156 0.4141 0.4453 +vt 0.5156 0.3047 0.4453 +vt 0.5352 0.3047 0.4453 +vt 0.5352 0.4141 0.4453 +vt 0.5156 0.4141 0.5547 +vt 0.5156 0.3047 0.5547 +vt 0.5352 0.3047 0.5547 +vt 0.5352 0.4141 0.5547 +# 12 texture coords + +g Hoverpad_Heavy___Glow002 +usemtl Material__2 +s 1 +f 25/37/16 26/38/16 27/39/16 28/40/16 +s 2 +f 29/41/17 30/42/17 26/43/17 25/44/17 +s 4 +f 30/45/18 31/46/18 27/47/18 26/48/18 +s 2 +f 31/45/19 32/46/19 28/47/19 27/48/19 +s 4 +f 32/41/20 29/42/20 25/43/20 28/44/20 +# 5 polygons + +# +# object Hoverpad_Heavy_Rear +# + +v -3.0000 -11.1654 14.8987 +v 3.0000 -11.1654 14.8987 +v 3.0000 -8.3761 20.2109 +v -3.0000 -8.3761 20.2109 +v -3.0000 -9.3947 13.9689 +v 3.0000 -9.3947 13.9689 +v 3.0000 -6.6053 19.2811 +v -3.0000 -6.6053 19.2811 +# 8 vertices + +vn -0.0000 -0.8854 0.4649 +vn -0.0000 -0.4649 -0.8854 +vn 1.0000 -0.0000 -0.0000 +vn 0.0000 0.4649 0.8854 +vn -1.0000 0.0000 0.0000 +# 5 vertex normals + +vt 0.5313 0.4297 0.5156 +vt 0.5781 0.4297 0.5156 +vt 0.5781 0.5234 0.5156 +vt 0.5313 0.5234 0.5156 +vt 0.5156 0.5234 0.4531 +vt 0.5156 0.4297 0.4531 +vt 0.5313 0.4297 0.4531 +vt 0.5313 0.5234 0.4531 +vt 0.5156 0.5234 0.5469 +vt 0.5156 0.4297 0.5469 +vt 0.5313 0.4297 0.5469 +vt 0.5313 0.5234 0.5469 +# 12 texture coords + +g Hoverpad_Heavy_Rear +usemtl 05___Default +s 1 +f 33/49/21 34/50/21 35/51/21 36/52/21 +s 2 +f 37/53/22 38/54/22 34/55/22 33/56/22 +s 4 +f 38/57/23 39/58/23 35/59/23 34/60/23 +s 2 +f 39/57/24 40/58/24 36/59/24 35/60/24 +s 4 +f 40/53/25 37/54/25 33/55/25 36/56/25 +# 5 polygons + +# +# object Hoverpad_Heavy___Glow003 +# + +v -3.5000 -11.8405 14.6884 +v 3.5000 -11.8405 14.6884 +v 3.5000 -8.5863 20.8860 +v -3.5000 -8.5863 20.8860 +v -3.5000 -9.6271 13.5262 +v 3.5000 -9.6271 13.5262 +v 3.5000 -6.3729 19.7238 +v -3.5000 -6.3729 19.7238 +# 8 vertices + +vn -0.0000 -0.8854 0.4649 +vn -0.0000 -0.4649 -0.8854 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 0.4649 0.8854 +vn -1.0000 0.0000 -0.0000 +# 5 vertex normals + +vt 0.5352 0.3047 0.5195 +vt 0.5898 0.3047 0.5195 +vt 0.5898 0.4141 0.5195 +vt 0.5352 0.4141 0.5195 +vt 0.5156 0.4141 0.4453 +vt 0.5156 0.3047 0.4453 +vt 0.5352 0.3047 0.4453 +vt 0.5352 0.4141 0.4453 +vt 0.5156 0.4141 0.5547 +vt 0.5156 0.3047 0.5547 +vt 0.5352 0.3047 0.5547 +vt 0.5352 0.4141 0.5547 +# 12 texture coords + +g Hoverpad_Heavy___Glow003 +usemtl Material__2 +s 1 +f 41/61/26 42/62/26 43/63/26 44/64/26 +s 2 +f 45/65/27 46/66/27 42/67/27 41/68/27 +s 4 +f 46/69/28 47/70/28 43/71/28 42/72/28 +s 2 +f 47/69/29 48/70/29 44/71/29 43/72/29 +s 4 +f 48/65/30 45/66/30 41/67/30 44/68/30 +# 5 polygons + +# +# object Hoverpad_Front_Left_Bottom +# + +v -7.5858 -10.8284 -15.0392 +v -6.5858 -9.4142 -14.0392 +v -9.4142 -9.4142 -11.2108 +v -10.4142 -10.8284 -12.2108 +v -9.5858 -8.0000 -17.0392 +v -12.4142 -8.0000 -14.2108 +v -11.4142 -6.5858 -13.2108 +v -8.5858 -6.5858 -16.0392 +# 8 vertices + +vn 0.5000 -0.7071 0.5000 +vn -0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 -0.5000 +vn -0.7071 -0.0000 0.7071 +vn 0.5000 0.7071 0.5000 +vn 0.7071 0.0000 -0.7071 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Front_Left_Bottom +usemtl 05___Default +s 1 +f 49/73/31 50/74/31 51/75/31 52/76/31 +f 53/77/32 54/78/32 55/79/32 56/80/32 +s 2 +f 49/81/33 52/82/33 54/83/33 53/84/33 +s 4 +f 52/78/34 51/79/34 55/80/34 54/77/34 +s 2 +f 51/85/35 50/86/35 56/87/35 55/88/35 +s 4 +f 50/75/36 49/76/36 53/73/36 56/74/36 +# 6 polygons + +# +# object Hoverpad_Front_Left_Bottom_Glow +# + +v -7.2322 -11.5355 -15.3928 +v -5.9822 -9.7678 -14.1428 +v -9.5178 -9.7678 -10.6072 +v -10.7678 -11.5355 -11.8572 +v -9.7322 -8.0000 -17.8928 +v -13.2678 -8.0000 -14.3572 +v -12.0178 -6.2322 -13.1072 +v -8.4822 -6.2322 -16.6428 +# 8 vertices + +vn 0.5000 -0.7071 0.5000 +vn -0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 -0.5000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Front_Left_Bottom_Glow +usemtl Material__2 +s 1 +f 57/89/37 58/90/37 59/91/37 60/92/37 +f 61/93/38 62/94/38 63/95/38 64/96/38 +s 2 +f 57/97/39 60/98/39 62/99/39 61/100/39 +s 4 +f 60/93/40 59/96/40 63/95/40 62/94/40 +f 58/91/41 57/92/41 61/89/41 64/90/41 +# 5 polygons + +# +# object Hoverpad_Front_Right_Bottom_Glow +# + +v 9.7322 -8.0000 -17.8928 +v 8.4822 -6.2322 -16.6428 +v 12.0178 -6.2322 -13.1072 +v 13.2678 -8.0000 -14.3572 +v 7.2322 -11.5355 -15.3928 +v 10.7678 -11.5355 -11.8572 +v 9.5178 -9.7678 -10.6072 +v 5.9822 -9.7678 -14.1428 +# 8 vertices + +vn 0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 0.5000 +vn 0.5000 -0.7071 -0.5000 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Front_Right_Bottom_Glow +usemtl Material__2 +s 1 +f 65/101/42 66/102/42 67/103/42 68/104/42 +f 69/105/43 70/106/43 71/107/43 72/108/43 +s 2 +f 65/109/44 68/110/44 70/111/44 69/112/44 +s 4 +f 68/105/45 67/108/45 71/107/45 70/106/45 +f 66/103/46 65/104/46 69/101/46 72/102/46 +# 5 polygons + +# +# object Hoverpad_Front_Right_Bottom +# + +v 9.5858 -8.0000 -17.0392 +v 8.5858 -6.5858 -16.0392 +v 11.4142 -6.5858 -13.2108 +v 12.4142 -8.0000 -14.2108 +v 7.5858 -10.8284 -15.0392 +v 10.4142 -10.8284 -12.2108 +v 9.4142 -9.4142 -11.2108 +v 6.5858 -9.4142 -14.0392 +# 8 vertices + +vn 0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 0.5000 +vn 0.5000 -0.7071 -0.5000 +vn 0.7071 -0.0000 0.7071 +vn -0.5000 0.7071 0.5000 +vn -0.7071 0.0000 -0.7071 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Front_Right_Bottom +usemtl 05___Default +s 1 +f 73/113/47 74/114/47 75/115/47 76/116/47 +f 77/117/48 78/118/48 79/119/48 80/120/48 +s 2 +f 73/121/49 76/122/49 78/123/49 77/124/49 +s 4 +f 76/118/50 75/119/50 79/120/50 78/117/50 +s 2 +f 75/125/51 74/126/51 80/127/51 79/128/51 +s 4 +f 74/115/52 73/116/52 77/113/52 80/114/52 +# 6 polygons + +# +# object Hoverpad_Front_Left_Top_Glow +# + +v -8.2322 9.5355 -15.3928 +v -6.9822 7.7678 -14.1428 +v -9.4822 4.2322 -16.6428 +v -10.7322 6.0000 -17.8928 +v -11.7678 9.5355 -11.8572 +v -14.2678 6.0000 -14.3572 +v -13.0178 4.2322 -13.1072 +v -10.5178 7.7678 -10.6072 +# 8 vertices + +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 -0.5000 +vn 0.5000 0.7071 0.5000 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Front_Left_Top_Glow +usemtl Material__2 +s 1 +f 81/129/53 82/130/53 83/131/53 84/132/53 +f 85/133/54 86/134/54 87/135/54 88/136/54 +s 2 +f 81/137/55 84/138/55 86/139/55 85/140/55 +s 4 +f 84/133/56 83/136/56 87/135/56 86/134/56 +f 82/131/57 81/132/57 85/129/57 88/130/57 +# 5 polygons + +# +# object Hoverpad_Front_Left_Bottom +# + +v -8.5858 8.8284 -15.0392 +v -7.5858 7.4142 -14.0392 +v -9.5858 4.5858 -16.0392 +v -10.5858 6.0000 -17.0392 +v -11.4142 8.8284 -12.2108 +v -13.4142 6.0000 -14.2108 +v -12.4142 4.5858 -13.2108 +v -10.4142 7.4142 -11.2108 +# 8 vertices + +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.5000 0.7071 -0.5000 +vn -0.5000 -0.7071 -0.5000 +vn 0.5000 -0.7071 0.5000 +vn 0.5000 0.7071 0.5000 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Front_Left_Bottom +usemtl 05___Default +s 1 +f 89/141/58 90/142/58 91/143/58 92/144/58 +f 93/145/59 94/146/59 95/147/59 96/148/59 +s 2 +f 89/149/60 92/150/60 94/151/60 93/152/60 +s 4 +f 92/146/61 91/147/61 95/148/61 94/145/61 +s 2 +f 91/153/62 90/154/62 96/155/62 95/156/62 +s 4 +f 90/143/63 89/144/63 93/141/63 96/142/63 +# 6 polygons + +# +# object Hoverpad_Front_Right_Top_Glow +# + +v 11.7678 9.5355 -11.8572 +v 10.5178 7.7678 -10.6072 +v 13.0178 4.2322 -13.1072 +v 14.2678 6.0000 -14.3572 +v 8.2322 9.5355 -15.3928 +v 10.7322 6.0000 -17.8928 +v 9.4822 4.2322 -16.6428 +v 6.9822 7.7678 -14.1428 +# 8 vertices + +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.5000 0.7071 -0.5000 +vn 0.5000 -0.7071 -0.5000 +vn -0.5000 0.7071 0.5000 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Front_Right_Top_Glow +usemtl Material__2 +s 1 +f 97/157/64 98/158/64 99/159/64 100/160/64 +f 101/161/65 102/162/65 103/163/65 104/164/65 +s 2 +f 97/165/66 100/166/66 102/167/66 101/168/66 +s 4 +f 100/161/67 99/164/67 103/163/67 102/162/67 +f 98/159/68 97/160/68 101/157/68 104/158/68 +# 5 polygons + +# +# object Hoverpad_Front_Right_Top +# + +v 11.4142 8.8284 -12.2108 +v 10.4142 7.4142 -11.2108 +v 12.4142 4.5858 -13.2108 +v 13.4142 6.0000 -14.2108 +v 8.5858 8.8284 -15.0392 +v 10.5858 6.0000 -17.0392 +v 9.5858 4.5858 -16.0392 +v 7.5858 7.4142 -14.0392 +# 8 vertices + +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.5000 0.7071 -0.5000 +vn 0.5000 -0.7071 -0.5000 +vn -0.5000 -0.7071 0.5000 +vn -0.5000 0.7071 0.5000 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Front_Right_Top +usemtl 05___Default +s 1 +f 105/169/69 106/170/69 107/171/69 108/172/69 +f 109/173/70 110/174/70 111/175/70 112/176/70 +s 2 +f 105/177/71 108/178/71 110/179/71 109/180/71 +s 4 +f 108/174/72 107/175/72 111/176/72 110/173/72 +s 2 +f 107/181/73 106/182/73 112/183/73 111/184/73 +s 4 +f 106/171/74 105/172/74 109/169/74 112/170/74 +# 6 polygons + +# +# object Hoverpad_Rear_Right_Glow +# + +v 10.6250 3.9528 8.7500 +v 10.6250 3.9528 6.2500 +v 10.6250 -1.0472 6.2500 +v 10.6250 -1.0472 8.7500 +v 15.6250 3.9528 8.7500 +v 15.6250 -1.0472 8.7500 +v 15.6250 -1.0472 6.2500 +v 15.6250 3.9528 6.2500 +# 8 vertices + +vn -1.0000 -0.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Rear_Right_Glow +usemtl Material__2 +s 1 +f 113/185/75 114/186/75 115/187/75 116/188/75 +f 117/189/76 118/190/76 119/191/76 120/192/76 +s 2 +f 113/193/77 116/194/77 118/195/77 117/196/77 +s 4 +f 116/189/78 115/192/78 119/191/78 118/190/78 +f 114/187/79 113/188/79 117/185/79 120/186/79 +# 5 polygons + +# +# object Hoverpad_Rear_Right +# + +v 11.1250 3.4528 8.2500 +v 11.1250 3.4528 6.2500 +v 11.1250 -0.5472 6.2500 +v 11.1250 -0.5472 8.2500 +v 15.1250 3.4528 8.2500 +v 15.1250 -0.5472 8.2500 +v 15.1250 -0.5472 6.2500 +v 15.1250 3.4528 6.2500 +# 8 vertices + +vn -1.0000 -0.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 -1.0000 +vn -0.0000 1.0000 -0.0000 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Rear_Right +usemtl 05___Default +s 1 +f 121/197/80 122/198/80 123/199/80 124/200/80 +f 125/201/81 126/202/81 127/203/81 128/204/81 +s 2 +f 121/205/82 124/206/82 126/207/82 125/208/82 +s 4 +f 124/202/83 123/203/83 127/204/83 126/201/83 +s 2 +f 123/209/84 122/210/84 128/211/84 127/212/84 +s 4 +f 122/199/85 121/200/85 125/197/85 128/198/85 +# 6 polygons + +# +# object Hoverpad_Rear_Left +# + +v -15.1250 3.4528 8.2500 +v -15.1250 3.4528 6.2500 +v -15.1250 -0.5472 6.2500 +v -15.1250 -0.5472 8.2500 +v -11.1250 3.4528 8.2500 +v -11.1250 -0.5472 8.2500 +v -11.1250 -0.5472 6.2500 +v -11.1250 3.4528 6.2500 +# 8 vertices + +vn -1.0000 -0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 1.0000 -0.0000 +# 6 vertex normals + +vt 0.3242 0.6172 0.4688 +vt 0.3086 0.6172 0.4688 +vt 0.3086 0.5547 0.4688 +vt 0.3242 0.5547 0.4688 +vt 0.3242 0.6172 0.5313 +vt 0.3242 0.5547 0.5313 +vt 0.3086 0.5547 0.5313 +vt 0.3086 0.6172 0.5313 +vt 0.3555 0.5547 0.4844 +vt 0.3242 0.5547 0.4844 +vt 0.3242 0.6172 0.4844 +vt 0.3555 0.6172 0.4844 +vt 0.3086 0.5547 0.5156 +vt 0.2773 0.5547 0.5156 +vt 0.2773 0.6172 0.5156 +vt 0.3086 0.6172 0.5156 +# 16 texture coords + +g Hoverpad_Rear_Left +usemtl 05___Default +s 1 +f 129/213/86 130/214/86 131/215/86 132/216/86 +f 133/217/87 134/218/87 135/219/87 136/220/87 +s 2 +f 129/221/88 132/222/88 134/223/88 133/224/88 +s 4 +f 132/218/89 131/219/89 135/220/89 134/217/89 +s 2 +f 131/225/90 130/226/90 136/227/90 135/228/90 +s 4 +f 130/215/91 129/216/91 133/213/91 136/214/91 +# 6 polygons + +# +# object Hoverpad_Rear_Left_Glow +# + +v -15.6250 3.9528 8.7500 +v -15.6250 3.9528 6.2500 +v -15.6250 -1.0472 6.2500 +v -15.6250 -1.0472 8.7500 +v -10.6250 3.9528 8.7500 +v -10.6250 -1.0472 8.7500 +v -10.6250 -1.0472 6.2500 +v -10.6250 3.9528 6.2500 +# 8 vertices + +vn -1.0000 -0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +# 5 vertex normals + +vt 0.2930 0.5391 0.4609 +vt 0.2773 0.5391 0.4609 +vt 0.2773 0.4609 0.4609 +vt 0.2930 0.4609 0.4609 +vt 0.2930 0.5391 0.5391 +vt 0.2930 0.4609 0.5391 +vt 0.2773 0.4609 0.5391 +vt 0.2773 0.5391 0.5391 +vt 0.2930 0.4609 0.4844 +vt 0.3320 0.4609 0.4844 +vt 0.3320 0.5391 0.4844 +vt 0.2930 0.5391 0.4844 +# 12 texture coords + +g Hoverpad_Rear_Left_Glow +usemtl Material__2 +s 1 +f 137/229/92 138/230/92 139/231/92 140/232/92 +f 141/233/93 142/234/93 143/235/93 144/236/93 +s 2 +f 137/237/94 140/238/94 142/239/94 141/240/94 +s 4 +f 140/233/95 139/236/95 143/235/95 142/234/95 +f 138/231/96 137/232/96 141/229/96 144/230/96 +# 5 polygons + +# +# object Hoverpad_Attachment +# + +v -8.7500 -2.9167 3.1250 +v -15.0000 3.3333 3.1250 +v -15.0000 3.3333 6.2500 +v -11.2500 -0.4167 6.2500 +v -11.2500 3.3333 3.1250 +v -17.5000 -2.9167 3.1250 +v -15.0000 -0.4167 6.2500 +v -11.2500 3.3333 6.2500 +v -11.2424 4.3750 -15.0000 +v -6.8674 4.3750 -15.0000 +v -6.8674 7.1875 -13.1250 +v -9.3674 7.1875 -13.1250 +v -9.3674 7.1875 -9.1303 +v -11.2424 4.3750 -9.6597 +v -6.8674 7.1875 -9.1303 +v -6.8674 -6.2500 -15.3125 +v -10.6250 -6.2500 -15.3125 +v -8.7500 -9.0625 -13.4375 +v -6.8674 -9.0625 -13.4375 +v -10.6250 -6.2500 -11.1597 +v -8.7500 -9.0625 -10.0347 +v -6.8674 -9.0625 -10.0347 +v -6.8674 -6.2500 -11.1597 +v 15.0000 3.3333 3.1250 +v 8.7500 -2.9167 3.1250 +v 11.2500 -0.4167 6.2500 +v 15.0000 3.3333 6.2500 +v 17.5000 -2.9167 3.1250 +v 11.2500 3.3333 3.1250 +v 11.2500 3.3333 6.2500 +v 15.0000 -0.4167 6.2500 +v 6.8674 4.3750 -15.0000 +v 11.2424 4.3750 -15.0000 +v 9.3674 7.1875 -13.1250 +v 6.8674 7.1875 -13.1250 +v 11.2424 4.3750 -9.6597 +v 9.3674 7.1875 -9.1303 +v 6.8674 7.1875 -9.1303 +v 10.6250 -6.2500 -15.3125 +v 6.8674 -6.2500 -15.3125 +v 6.8674 -9.0625 -13.4375 +v 8.7500 -9.0625 -13.4375 +v 8.7500 -9.0625 -10.0347 +v 10.6250 -6.2500 -11.1597 +v 6.8674 -9.0625 -10.0347 +v 6.8674 -6.2500 -11.1597 +# 46 vertices + +vn 0.7071 0.7071 0.0000 +vn 0.7071 0.7071 -0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.0000 -0.5547 0.8321 +vn 0.8321 -0.5547 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 0.5547 0.8321 +vn 0.8321 0.5547 0.0000 +vn -0.0000 1.0000 -0.0000 +vn -1.0000 0.0000 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.0000 0.5547 -0.8321 +vn -0.8321 0.5547 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.5547 -0.8321 +vn -0.8321 -0.5547 -0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 -0.5547 0.8321 +vn 0.0000 0.5547 0.8321 +vn 1.0000 0.0000 0.0000 +vn -0.0000 0.5547 -0.8321 +vn -0.0000 -0.5547 -0.8321 +vn -1.0000 -0.0000 -0.0000 +# 28 vertex normals + +vt 0.3711 0.3750 0.6174 +vt 0.3203 0.3750 0.0302 +vt 0.3203 0.4297 0.0302 +vt 0.3516 0.4297 0.3826 +vt 0.2695 0.4531 0.0009 +vt 0.2695 0.3750 0.0009 +vt 0.2891 0.3750 -0.2634 +vt 0.2891 0.4141 -0.2634 +vt 0.3203 0.4141 -0.2634 +vt 0.3164 0.4531 0.0009 +vt 0.3203 0.3750 -0.2634 +vt 0.2695 0.3828 0.9991 +vt 0.2695 0.4531 0.9991 +vt 0.2891 0.4141 1.2634 +vt 0.2891 0.3828 1.2634 +vt 0.3047 0.4531 0.9991 +vt 0.3047 0.4141 1.2634 +vt 0.3047 0.3828 1.2634 +vt 0.3047 0.3828 0.9991 +vt 0.3086 0.3828 0.0000 +vt 0.3203 0.4453 0.0000 +vt 0.2813 0.4453 0.0000 +vt 0.2617 0.3828 0.0000 +# 23 texture coords + +g Hoverpad_Attachment +usemtl 05___Default +s 1 +f 145/241/97 146/242/97 147/243/97 148/244/98 +f 149/242/99 150/241/99 151/244/99 152/243/99 +f 153/245/100 154/246/100 155/247/100 156/248/100 +s 2 +f 157/249/101 158/250/101 153/245/101 156/248/101 +s 4 +f 159/251/102 157/249/103 156/248/104 155/247/103 +s 1 +f 160/252/105 161/253/105 162/254/105 163/255/105 +s 2 +f 164/256/106 165/257/106 162/254/106 161/253/106 +s 4 +f 165/257/107 166/258/107 163/255/107 162/254/107 +s 2 +f 166/258/108 167/259/108 160/252/108 163/255/108 +s 1 +f 146/242/109 145/241/109 148/244/110 147/243/109 +f 150/241/111 149/242/111 152/243/111 151/244/111 +f 154/246/112 153/245/112 156/248/112 155/247/112 +s 2 +f 158/250/113 157/249/113 156/248/113 153/245/113 +s 4 +f 157/249/114 159/251/107 155/247/114 156/248/115 +s 1 +f 161/253/116 160/252/116 163/255/116 162/254/116 +s 2 +f 165/257/117 164/256/117 161/253/117 162/254/117 +s 4 +f 166/258/102 165/257/102 162/254/102 163/255/102 +s 2 +f 167/260/118 166/261/118 163/262/118 160/263/118 +s 1 +f 168/242/99 169/241/99 170/244/99 171/243/99 +f 172/241/97 173/242/97 174/243/97 175/244/97 +f 176/246/119 177/245/100 178/248/119 179/247/119 +s 2 +f 180/250/117 181/249/117 178/248/117 177/245/117 +s 4 +f 181/249/102 182/251/102 179/247/102 178/248/102 +s 1 +f 183/253/105 184/252/105 185/255/120 186/254/120 +s 2 +f 187/257/113 188/256/113 183/253/113 186/254/113 +s 4 +f 189/258/107 187/257/107 186/254/107 185/255/107 +s 2 +f 190/259/121 189/258/121 185/255/121 184/252/121 +s 1 +f 169/241/111 168/242/111 171/243/111 170/244/111 +f 173/242/109 172/241/109 175/244/109 174/243/109 +f 177/245/112 176/246/122 179/247/122 178/248/122 +s 2 +f 181/249/106 180/250/106 177/245/106 178/248/106 +s 4 +f 182/251/107 181/249/107 178/248/107 179/247/107 +s 1 +f 184/252/116 183/253/116 186/254/123 185/255/123 +s 2 +f 188/256/101 187/257/101 186/254/101 183/253/101 +s 4 +f 187/257/102 189/258/102 185/255/102 186/254/102 +s 2 +f 189/258/124 190/259/124 184/252/124 185/255/124 +# 36 polygons + +# +# object Left_Laser +# + +v -16.2500 -1.8750 -20.0000 +v -18.1250 0.0000 -20.0000 +v -18.1250 0.0000 -10.0000 +v -16.2500 -1.8750 -10.0000 +v -16.2500 0.0000 -20.0000 +v -16.2500 -0.0000 -10.0000 +v -18.1250 -1.8750 -10.0000 +v -18.1250 -1.8750 -20.0000 +v -17.1875 -0.9375 -20.0000 +v -17.1875 -0.9375 -10.0000 +v -13.4375 -0.9375 -10.0000 +v -13.4375 -0.9375 -20.0000 +# 12 vertices + +vn 0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 -0.0000 +vn -0.0000 1.0000 -0.0000 +# 3 vertex normals + +vt 0.2383 0.9141 0.9531 +vt 0.2656 0.9141 0.7656 +vt 0.2656 0.7031 0.7656 +vt 0.2383 0.7031 0.9219 +vt 0.2383 0.9141 0.0005 +vt 0.2383 0.7031 0.0005 +vt 0.1914 0.7031 0.0005 +vt 0.1914 0.9141 0.0005 +# 8 texture coords + +g Left_Laser +usemtl 05___Default +s 1 +f 191/264/125 192/265/125 193/266/125 194/267/125 +f 195/264/126 196/267/126 197/266/126 198/265/126 +f 199/268/127 200/269/127 201/270/127 202/271/127 +# 3 polygons + +# +# object Left_Laser_Invert +# + +v -18.1250 0.0000 -20.0000 +v -16.2500 -1.8750 -20.0000 +v -16.2500 -1.8750 -10.0000 +v -18.1250 0.0000 -10.0000 +v -16.2500 -0.0000 -10.0000 +v -16.2500 0.0000 -20.0000 +v -18.1250 -1.8750 -20.0000 +v -18.1250 -1.8750 -10.0000 +v -17.1875 -0.9375 -10.0000 +v -17.1875 -0.9375 -20.0000 +v -13.4375 -0.9375 -20.0000 +v -13.4375 -0.9375 -10.0000 +# 12 vertices + +vn -0.7071 -0.7071 -0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +# 3 vertex normals + +vt 0.2656 0.9141 0.7656 +vt 0.2383 0.9141 0.9531 +vt 0.2383 0.7031 0.9219 +vt 0.2656 0.7031 0.7656 +vt 0.2383 0.7031 0.0005 +vt 0.2383 0.9141 0.0005 +vt 0.1914 0.9141 0.0005 +vt 0.1914 0.7031 0.0005 +# 8 texture coords + +g Left_Laser_Invert +usemtl 05___Default +s 1 +f 203/272/128 204/273/128 205/274/128 206/275/128 +f 207/274/129 208/273/129 209/272/129 210/275/129 +f 211/276/130 212/277/130 213/278/130 214/279/130 +# 3 polygons + +# +# object Hull_Rear +# + +v 9.0000 -15.0000 3.3403 +v 9.0000 -4.5000 23.3403 +v -9.0000 -4.5000 23.3403 +v -9.0000 -15.0000 3.3403 +v 7.0000 4.1250 24.8403 +v -7.0000 4.1250 24.8403 +v -9.0000 4.5000 2.3403 +v -9.0000 -6.0000 -3.6597 +v -7.0000 13.0000 3.8403 +v 7.0000 13.0000 3.8403 +v 9.0000 4.5000 2.3403 +v 9.0000 -6.0000 -3.6597 +# 12 vertices + +vn -0.0000 -0.8854 0.4648 +vn 0.0000 -0.8854 0.4648 +vn 0.0000 -0.1713 0.9852 +vn -1.0000 0.0000 -0.0000 +vn -0.9903 0.1278 0.0542 +vn -0.9927 0.1105 0.0474 +vn -0.9736 0.2103 0.0889 +vn -0.9730 0.2122 0.0906 +vn 0.0000 0.9211 0.3893 +vn -0.0000 0.9211 0.3893 +vn 0.9734 0.2107 0.0900 +vn 0.9904 0.1273 0.0546 +vn 0.9928 0.1103 0.0468 +vn 0.9729 0.2130 0.0900 +vn 1.0000 -0.0000 0.0000 +# 15 vertex normals + +vt 0.4961 0.2813 0.2656 +vt 0.6523 0.2813 0.4297 +vt 0.6523 0.0000 0.4297 +vt 0.4961 0.0000 0.2656 +vt 0.6523 0.2813 0.1211 +vt 0.7227 0.2500 0.0977 +vt 0.7227 0.0313 0.0977 +vt 0.6523 0.0000 0.1211 +vt 0.5703 0.5938 0.3594 +vt 0.6523 0.2813 0.3594 +vt 0.7227 0.6094 0.3594 +vt 0.6406 0.7031 0.3594 +vt 0.7227 0.2578 0.3906 +vt 0.7891 0.5859 0.3906 +vt 0.7227 0.0313 0.5645 +vt 0.7227 0.2500 0.5645 +vt 0.8867 0.2500 0.7031 +vt 0.8867 0.0313 0.7031 +vt 0.7227 0.2578 0.6094 +vt 0.6523 0.2813 0.6406 +vt 0.7227 0.6094 0.6406 +vt 0.7891 0.5859 0.6094 +vt 0.5703 0.5938 0.6406 +vt 0.6406 0.7031 0.6406 +# 24 texture coords + +g Hull_Rear +usemtl 05___Default +s 1 +f 215/280/131 216/281/132 217/282/131 218/283/131 +s 2 +f 216/284/133 219/285/133 220/286/133 217/287/133 +s 4 +f 218/288/134 217/289/135 221/290/136 222/291/134 +f 217/289/135 220/292/137 223/293/138 221/290/136 +s 1 +f 220/294/139 219/295/139 224/296/140 223/297/140 +s 4 +f 219/298/141 216/299/142 225/300/143 224/301/144 +f 216/299/142 215/302/145 226/303/145 225/300/143 +# 7 polygons + +# +# object Hull_Center +# + +v -18.1250 -6.2500 8.3403 +v -18.1250 -6.2500 -0.1597 +v -6.8750 -6.2500 -2.9097 +v -9.0000 -6.2500 6.3403 +v 9.0000 -6.2500 6.3403 +v 6.8750 -6.2500 -2.9097 +v 18.1250 -6.2500 -0.1597 +v 18.1250 -6.2500 8.3403 +v -9.3750 -6.2500 -22.6597 +v -6.8750 -6.2500 -22.6597 +v 6.8750 -6.2500 -22.6597 +v 9.3750 -6.2500 -22.6597 +v -18.1250 4.3750 4.3403 +v -9.0000 4.3750 2.3403 +v -6.8750 4.3750 -6.9097 +v -18.1250 4.3750 -4.1597 +v 9.0000 4.3750 2.3403 +v 18.1250 4.3750 4.3403 +v 18.1250 4.3750 -4.1597 +v 6.8750 4.3750 -6.9097 +v -6.8750 4.3750 -26.6597 +v -9.3750 4.3750 -26.6597 +v 9.3750 4.3750 -26.6597 +v 6.8750 4.3750 -26.6597 +# 24 vertices + +vn 0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.0000 1.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.2009 0.3451 0.9168 +vn -0.2009 0.3451 0.9168 +vn 1.0000 0.0000 -0.0000 +vn 0.9883 -0.0538 -0.1428 +vn 0.9710 -0.0842 -0.2237 +vn 1.0000 0.0000 0.0000 +vn 0.9234 -0.1352 -0.3591 +vn -0.0000 -0.3523 -0.9359 +vn 0.0000 -0.3523 -0.9359 +vn -0.9234 -0.1352 -0.3591 +vn -0.9883 -0.0538 -0.1428 +vn -0.9710 -0.0842 -0.2237 +vn -1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +# 20 vertex normals + +vt 0.0000 0.8240 0.4063 +vt 0.0665 0.8240 0.4063 +vt 0.0881 1.0000 0.4063 +vt 0.0157 0.9668 0.4063 +vt 0.0157 0.9668 0.0000 +vt 0.0881 1.0000 0.0000 +vt 0.0665 0.8240 0.0000 +vt 0.0000 0.8240 0.0000 +vt 0.2426 0.9608 0.4063 +vt 0.2426 0.9999 0.4063 +vt 0.2426 0.9999 0.0000 +vt 0.2426 0.9608 0.0000 +vt 0.5615 0.8248 0.5625 +vt 0.5459 0.9668 0.5625 +vt 0.4740 0.9999 0.5625 +vt 0.4954 0.8248 0.5625 +vt 0.5459 0.9668 0.0000 +vt 0.5615 0.8248 0.0000 +vt 0.4954 0.8248 0.0000 +vt 0.4740 0.9999 0.0000 +vt 0.3203 1.0000 0.5625 +vt 0.3203 0.9611 0.5625 +vt 0.3203 0.9611 0.0000 +vt 0.3203 1.0000 0.0000 +vt 0.3438 0.6328 0.3555 +vt 0.2734 0.6328 0.3867 +vt 0.2734 0.7891 0.4492 +vt 0.3438 0.7891 0.4180 +vt 0.2734 0.6328 0.2578 +vt 0.3438 0.6328 0.2266 +vt 0.3438 0.7891 0.2891 +vt 0.2734 0.7891 0.3203 +vt 0.3438 0.6328 0.5869 +vt 0.4102 0.6328 0.5869 +vt 0.4414 0.7891 0.5869 +vt 0.3750 0.7891 0.5869 +vt 0.5859 0.6328 0.4502 +vt 0.6172 0.7891 0.4502 +vt 0.2422 0.9609 0.0000 +vt 0.2422 1.0000 0.0000 +vt 0.3203 0.9609 0.0000 +vt 0.2422 1.0000 0.8398 +vt 0.2422 0.9609 0.8398 +vt 0.3203 0.9609 0.9023 +vt 0.3203 1.0000 0.9023 +vt 0.5859 0.6328 0.3594 +vt 0.4102 0.6328 0.2188 +vt 0.4414 0.7891 0.2188 +vt 0.6172 0.7891 0.3594 +vt 0.3438 0.6328 0.2187 +vt 0.3750 0.7891 0.2188 +# 51 texture coords + +g Hull_Center +usemtl 05___Default +s 1 +f 227/304/146 228/305/146 229/306/146 230/307/146 +f 231/308/147 232/309/147 233/310/147 234/311/147 +f 228/305/146 235/312/146 236/313/146 229/306/146 +f 232/309/147 237/314/147 238/315/147 233/310/147 +f 239/316/148 240/317/148 241/318/148 242/319/148 +f 243/320/149 244/321/148 245/322/149 246/323/149 +f 242/319/148 241/318/148 247/324/150 248/325/151 +f 246/323/149 245/322/149 249/326/151 250/327/151 +s 2 +f 227/328/152 230/329/152 240/330/152 239/331/152 +f 231/332/153 234/333/153 244/334/153 243/335/153 +s 4 +f 234/336/154 233/337/155 245/338/156 244/339/157 +f 233/337/155 238/340/158 249/341/158 245/338/156 +s 2 +f 238/342/159 237/343/159 250/327/159 249/344/160 +f 236/345/160 235/346/160 248/347/160 247/348/160 +s 4 +f 235/349/161 228/350/162 242/351/163 248/352/161 +f 228/350/162 227/353/164 239/354/165 242/351/163 +# 16 polygons + +# +# object Hull_Top +# + +v 13.1250 4.3750 -9.6597 +v 11.2500 15.0000 -7.6597 +v 11.2500 15.0000 4.3403 +v 13.1250 4.3750 2.3403 +v -13.1250 4.3750 -9.6597 +v -13.1250 4.3750 2.3403 +v -11.2500 15.0000 4.3403 +v -11.2500 15.0000 -7.6597 +# 8 vertices + +vn 0.9848 0.1738 0.0000 +vn -0.9848 0.1738 -0.0000 +vn -0.0000 -0.1850 0.9827 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 0.1850 -0.9827 +# 5 vertex normals + +vt 0.0664 0.8203 0.7188 +vt 0.0820 0.6484 0.6719 +vt 0.1758 0.6484 0.6719 +vt 0.1602 0.8203 0.7188 +vt 0.0664 0.8203 0.2813 +vt 0.1602 0.8203 0.2813 +vt 0.1758 0.6484 0.3281 +vt 0.0820 0.6484 0.3281 +vt 0.2578 0.6797 0.4492 +vt 0.1758 0.6484 0.4180 +vt 0.1758 0.2969 0.4180 +vt 0.2578 0.2656 0.4492 +vt 0.1758 0.6484 0.7344 +vt 0.0820 0.6484 0.7344 +vt 0.0820 0.2969 0.7344 +vt 0.1758 0.2969 0.7344 +vt 0.0820 0.6484 0.6055 +vt 0.0000 0.6797 0.6367 +vt -0.0000 0.2656 0.6367 +vt 0.0820 0.2969 0.6055 +# 20 texture coords + +g Hull_Top +usemtl 05___Default +s 1 +f 251/355/166 252/356/166 253/357/166 254/358/166 +f 255/359/167 256/360/167 257/361/167 258/362/167 +s 2 +f 254/363/168 253/364/168 257/365/168 256/366/168 +s 4 +f 253/367/169 252/368/169 258/369/169 257/370/169 +s 2 +f 252/371/170 251/372/170 255/373/170 258/374/170 +# 5 polygons + +# +# object Main_Laser_Base +# + +v 1.8750 -14.0625 -17.8125 +v 1.8750 -9.0625 -12.8125 +v 1.8750 -9.0625 -7.6597 +v 1.8750 -14.0625 -7.6597 +v -1.8750 -14.0625 -17.8125 +v -1.8750 -14.0625 -7.6597 +v -1.8750 -9.0625 -7.6597 +v -1.8750 -9.0625 -12.8125 +# 8 vertices + +vn 1.0000 0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 0.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +# 7 vertex normals + +vt 0.9688 0.1953 0.5313 +vt 0.9336 0.2656 0.5313 +vt 0.8984 0.2656 0.5312 +vt 0.8984 0.1953 0.5312 +vt 0.9688 0.1953 0.4688 +vt 0.8984 0.1953 0.4687 +vt 0.8984 0.2656 0.4687 +vt 0.9336 0.2656 0.4687 +vt 0.9688 0.1328 0.0625 +vt 0.8984 0.1328 0.0625 +vt 0.8984 0.1953 0.0625 +vt 0.9688 0.1953 0.0625 +vt 0.8984 0.2656 0.1406 +vt 0.9336 0.2656 0.1406 +vt 0.9336 0.3281 0.1406 +vt 0.8984 0.3281 0.1406 +vt 0.9688 0.2656 0.0625 +vt 0.9688 0.3281 0.0625 +# 18 texture coords + +g Main_Laser_Base +usemtl 05___Default +s 1 +f 259/375/171 260/376/172 261/377/171 262/378/171 +f 263/379/173 264/380/173 265/381/173 266/382/174 +s 2 +f 259/383/175 262/384/175 264/385/175 263/386/175 +f 261/387/176 260/388/176 266/389/176 265/390/176 +s 4 +f 260/388/177 259/391/177 263/392/177 266/389/177 +# 5 polygons + +# +# object Left_Laser_Attachment +# + +v -18.1250 -2.5000 -1.5715 +v -18.1250 -2.5000 -10.0000 +v -14.6875 -2.5000 -10.0000 +v -14.6875 -2.5000 -1.5715 +v -18.1250 0.6250 -2.7480 +v -14.6875 0.6250 -2.7480 +v -14.6875 0.6250 -10.0000 +v -18.1250 0.6250 -10.0000 +# 8 vertices + +vn 0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 -0.0000 +# 6 vertex normals + +vt 0.2813 0.8437 0.4609 +vt 0.3438 0.8437 0.4609 +vt 0.3438 0.7969 0.4609 +vt 0.2813 0.7969 0.4609 +vt 0.2900 0.8906 0.5078 +vt 0.2900 0.9375 0.5078 +vt 0.3438 0.9375 0.5078 +vt 0.3438 0.8906 0.5078 +vt 0.3672 0.8441 0.6211 +vt 0.3438 0.8441 0.6211 +vt 0.3438 0.8902 0.6211 +vt 0.3672 0.8902 0.6211 +vt 0.3438 0.8441 0.2188 +vt 0.2813 0.8441 0.2188 +vt 0.2900 0.8902 0.2188 +vt 0.3438 0.8902 0.2188 +# 16 texture coords + +g Left_Laser_Attachment +usemtl 05___Default +s 1 +f 267/393/178 268/394/179 269/395/178 270/396/178 +f 271/397/180 272/398/181 273/399/180 274/400/180 +s 2 +f 269/401/182 268/402/182 274/403/182 273/404/182 +s 4 +f 268/405/183 267/406/183 271/407/183 274/408/183 +# 4 polygons + +# +# object Right_Laser_Attachment +# + +v 18.1250 -2.5000 -1.5715 +v 18.1250 -2.5000 -10.0000 +v 14.6875 -2.5000 -10.0000 +v 14.6875 -2.5000 -1.5715 +v 18.1250 0.6250 -2.7480 +v 14.6875 0.6250 -2.7480 +v 14.6875 0.6250 -10.0000 +v 18.1250 0.6250 -10.0000 +# 8 vertices + +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 -0.0000 -1.0000 +vn 1.0000 0.0000 -0.0000 +# 4 vertex normals + +vt 0.2813 0.8437 0.4609 +vt 0.3438 0.8437 0.4609 +vt 0.3438 0.7969 0.4609 +vt 0.2813 0.7969 0.4609 +vt 0.2900 0.8906 0.5078 +vt 0.2900 0.9375 0.5078 +vt 0.3438 0.9375 0.5078 +vt 0.3438 0.8906 0.5078 +vt 0.3672 0.8441 0.6211 +vt 0.3438 0.8441 0.6211 +vt 0.3438 0.8902 0.6211 +vt 0.3672 0.8902 0.6211 +vt 0.3438 0.8441 0.0000 +vt 0.2813 0.8441 0.0000 +vt 0.2900 0.8902 0.0000 +vt 0.3438 0.8902 0.0000 +# 16 texture coords + +g Right_Laser_Attachment +usemtl 05___Default +s 1 +f 278/412/184 277/411/184 276/410/184 275/409/184 +f 282/416/185 281/415/185 280/414/185 279/413/185 +s 2 +f 281/420/186 282/419/186 276/418/186 277/417/186 +s 4 +f 282/424/187 279/423/187 275/422/187 276/421/187 +# 4 polygons + +# +# object Hull_Front +# + +v 6.8750 -8.0000 -26.6597 +v 6.8750 5.1667 -31.6597 +v 6.8750 13.0000 -7.6597 +v 6.8750 -8.0000 -7.6597 +v -6.8750 -8.0000 -26.6597 +v -6.8750 -8.0000 -7.6597 +v -6.8750 13.0000 -7.6597 +v -6.8750 5.1667 -31.6597 +# 8 vertices + +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 0.9506 -0.3103 +vn 0.0000 -0.3550 -0.9349 +# 6 vertex normals + +vt 0.8516 0.7969 0.0781 +vt 0.8128 0.5913 0.0781 +vt 1.0000 0.4691 0.0781 +vt 1.0000 0.7969 0.0781 +vt 0.8516 0.7969 0.0000 +vt 1.0000 0.7969 0.0000 +vt 1.0000 0.4691 0.0000 +vt 0.8128 0.5913 0.0000 +vt 0.8516 0.7969 0.3125 +vt 1.0000 0.7969 0.3125 +vt 1.0000 1.0000 0.3125 +vt 0.8516 1.0000 0.3125 +vt 0.5625 0.7969 0.6406 +vt 0.7500 0.7969 0.5182 +vt 0.7500 1.0000 0.5182 +vt 0.5625 1.0000 0.6406 +vt 0.7500 0.7969 0.2500 +vt 0.8516 0.7969 0.3281 +vt 0.8516 1.0000 0.3281 +vt 0.7500 1.0000 0.2500 +# 20 texture coords + +g Hull_Front +usemtl 05___Default +s 1 +f 283/425/188 284/426/188 285/427/188 286/428/188 +f 287/429/189 288/430/189 289/431/189 290/432/189 +s 2 +f 283/433/190 286/434/191 288/435/191 287/436/190 +f 285/437/192 284/438/192 290/439/192 289/440/192 +s 4 +f 284/441/193 283/442/193 287/443/193 290/444/193 +# 5 polygons + +# +# object Hull_Bottom +# + +v -10.0000 -15.0000 3.3403 +v -5.0000 -15.0000 -7.6597 +v 5.0000 -15.0000 -7.6597 +v 10.0000 -15.0000 3.3403 +v 11.2500 -6.2500 -11.1597 +v 16.2500 -6.2500 -0.1597 +v -11.2500 -6.2500 -11.1597 +v -16.2500 -6.2500 -0.1597 +v -14.1667 -9.1667 14.3403 +v -16.2500 -6.2500 11.3403 +v -9.0000 -15.0000 3.3403 +v -9.0000 -9.1667 14.3403 +v -9.0000 -6.2500 11.3403 +v -9.0000 -6.2500 -0.1597 +v 16.2500 -6.2500 11.3403 +v 14.1667 -9.1667 14.3403 +v 9.0000 -15.0000 3.3403 +v 9.0000 -9.1667 14.3403 +v 9.0000 -6.2500 11.3403 +v 9.0000 -6.2500 -0.1597 +# 20 vertices + +vn 0.0000 -1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.7054 -0.6321 -0.3206 +vn -0.0000 -0.3714 -0.9285 +vn -0.7054 -0.6321 -0.3206 +vn -0.8137 -0.5812 0.0000 +vn -0.0000 -0.8835 0.4685 +vn 0.0000 -0.8835 0.4685 +vn -0.0000 0.7170 0.6971 +vn 0.0000 0.7170 0.6971 +vn -0.0000 1.0000 -0.0000 +vn 0.8137 -0.5812 -0.0000 +# 12 vertex normals + +vt 0.4887 0.0039 0.0000 +vt 0.4481 0.1797 0.0000 +vt 0.3681 0.1797 0.0000 +vt 0.3276 0.0039 0.0000 +vt 0.2383 -0.0000 0.6562 +vt 0.3242 -0.0000 0.5781 +vt 0.3516 0.1406 0.6719 +vt 0.2656 0.1406 0.7500 +vt 0.4982 0.3198 0.0000 +vt 0.3181 0.3198 0.0000 +vt 0.3242 -0.0000 0.4219 +vt 0.2383 -0.0000 0.3438 +vt 0.2656 0.1406 0.2500 +vt 0.3516 0.1406 0.3281 +vt 0.1523 0.0938 0.2812 +vt 0.1758 0.1406 0.2500 +vt 0.0664 0.2500 0.2656 +vt 0.1523 0.2500 0.3594 +vt 0.1523 0.1719 0.3594 +vt 0.0664 0.2344 0.2656 +vt 0.1523 0.2500 0.2617 +vt 0.1758 0.2500 0.3086 +vt 0.1758 0.1406 0.3086 +vt 0.1523 0.1721 0.2617 +vt 0.1758 0.2500 0.4063 +vt 0.2656 0.2500 0.4063 +vt 0.2656 0.1406 0.4062 +vt 0.1758 0.1406 0.4062 +vt 0.1758 0.1406 0.7500 +vt 0.1523 0.0938 0.7187 +vt 0.1523 0.1719 0.2617 +vt 0.1758 0.1406 0.4063 +vt 0.2656 0.1406 0.4063 +# 33 texture coords + +g Hull_Bottom +usemtl 05___Default +s 1 +f 291/445/194 292/446/195 293/447/194 294/448/194 +s 2 +f 294/449/196 293/450/196 295/451/196 296/452/196 +s 4 +f 293/447/197 292/446/197 297/453/197 295/454/197 +s 2 +f 292/455/198 291/456/198 298/457/198 297/458/198 +s 1 +f 291/456/199 299/459/199 300/460/199 298/457/199 +s 2 +f 301/461/200 302/462/201 299/463/201 291/464/200 +s 4 +f 302/465/202 303/466/202 300/467/202 299/468/203 +s 2 +f 303/469/204 304/470/204 298/471/204 300/472/204 +s 1 +f 294/449/205 296/452/205 305/473/205 306/474/205 +s 2 +f 307/461/201 294/464/201 306/463/201 308/462/201 +s 4 +f 308/465/203 306/475/203 305/467/203 309/466/203 +s 2 +f 309/469/204 305/476/204 296/477/204 310/470/204 +# 12 polygons + +# +# object Right_Laser_Invert +# + +v 18.1250 0.0000 -20.0000 +v 16.2500 -1.8750 -20.0000 +v 16.2500 -1.8750 -10.0000 +v 18.1250 0.0000 -10.0000 +v 16.2500 -0.0000 -10.0000 +v 16.2500 -0.0000 -20.0000 +v 18.1250 -1.8750 -20.0000 +v 18.1250 -1.8750 -10.0000 +v 17.1875 -0.9375 -10.0000 +v 17.1875 -0.9375 -20.0000 +v 13.4375 -0.9375 -20.0000 +v 13.4375 -0.9375 -10.0000 +# 12 vertices + +vn 0.7071 -0.7071 0.0000 +vn 0.7071 0.7071 -0.0000 +vn -0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 -0.0000 +# 4 vertex normals + +vt 0.2656 0.9141 0.7656 +vt 0.2383 0.9141 0.9531 +vt 0.2383 0.7031 0.9219 +vt 0.2656 0.7031 0.7656 +vt 0.2383 0.7031 0.0005 +vt 0.2383 0.9141 0.0005 +vt 0.1914 0.9141 0.0005 +vt 0.1914 0.7031 0.0005 +# 8 texture coords + +g Right_Laser_Invert +usemtl 05___Default +s 1 +f 314/481/206 313/480/206 312/479/206 311/478/206 +f 318/481/207 317/478/207 316/479/207 315/480/207 +f 322/485/209 321/484/208 320/483/208 319/482/208 +# 3 polygons + +# +# object Right_Laser +# + +v 16.2500 -1.8750 -20.0000 +v 18.1250 0.0000 -20.0000 +v 18.1250 0.0000 -10.0000 +v 16.2500 -1.8750 -10.0000 +v 16.2500 -0.0000 -20.0000 +v 16.2500 -0.0000 -10.0000 +v 18.1250 -1.8750 -10.0000 +v 18.1250 -1.8750 -20.0000 +v 17.1875 -0.9375 -20.0000 +v 17.1875 -0.9375 -10.0000 +v 13.4375 -0.9375 -10.0000 +v 13.4375 -0.9375 -20.0000 +# 12 vertices + +vn -0.7071 0.7071 -0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 1.0000 0.0000 +# 4 vertex normals + +vt 0.2383 0.9141 0.9531 +vt 0.2656 0.9141 0.7656 +vt 0.2656 0.7031 0.7656 +vt 0.2383 0.7031 0.9219 +vt 0.2383 0.9141 0.0005 +vt 0.2383 0.7031 0.0005 +vt 0.1914 0.7031 0.0005 +vt 0.1914 0.9141 0.0005 +# 8 texture coords + +g Right_Laser +usemtl 05___Default +s 1 +f 326/489/210 325/488/210 324/487/210 323/486/210 +f 330/487/211 329/488/211 328/489/211 327/486/211 +f 334/493/212 333/492/213 332/491/212 331/490/212 +# 3 polygons + diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.mtl new file mode 100644 index 00000000..f5570de2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.mtl @@ -0,0 +1,44 @@ +# Blender MTL File: 'astroMinerOriginal.blend' +# Material Count: 7 + +newmtl 05___Default +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.004 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.005 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.006 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.007 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl 05___Default.008 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner + +newmtl Material__2 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_fx diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.obj new file mode 100644 index 00000000..5f6e7ab3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full.obj @@ -0,0 +1,1149 @@ +# Blender v2.76 (sub 0) OBJ File: 'astroMinerOriginal.blend' +# www.blender.org +mtllib astro_miner_full.mtl +o Main_Laser_Left_Guard +v -3.750000 -14.374997 -19.375002 +v -3.750000 -8.749996 -25.000002 +v -3.750000 -8.749999 -7.500001 +v -3.750000 -14.374999 -7.500002 +v -5.000000 -14.374997 -19.375002 +v -5.000000 -14.374999 -7.500002 +v -5.000000 -8.749999 -7.500001 +v -5.000000 -8.749996 -25.000002 +vt 0.398400 0.792946 +vt 0.351600 0.746096 +vt 0.500000 0.746096 +vt 0.398400 0.687496 +vt 0.500000 0.687496 +vt 0.500000 0.734396 +vt 0.500000 0.675796 +vt 0.351600 0.734396 +vt 0.398400 0.675796 +vt 0.293000 0.687496 +vt 0.500000 0.792946 +vt 0.293000 0.675796 +vn 1.000000 -0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.707100 -0.707100 +usemtl 05___Default.008 +f 1/1/1 2/2/1 3/3/1 +f 5/4/2 6/5/2 7/6/2 +f 4/7/3 6/5/3 5/4/3 +f 2/2/4 8/8/4 7/6/4 +f 1/9/5 5/4/5 8/10/5 +f 4/11/1 1/1/1 3/3/1 +f 8/8/2 5/4/2 7/6/2 +f 1/9/3 4/7/3 5/4/3 +f 3/3/4 2/2/4 7/6/4 +f 2/12/5 1/9/5 8/10/5 +o Main_Laser_Front +v 0.000000 -9.999993 -40.000000 +v 0.000000 -10.937493 -40.000000 +v 0.000000 -10.937495 -31.875002 +v 0.000000 -9.999995 -31.875002 +v -0.937500 -12.812493 -40.000004 +v -0.937500 -13.749993 -40.000004 +v -0.937500 -13.749995 -31.875002 +v -0.937500 -12.812495 -31.875002 +v 0.937500 -12.812495 -31.875002 +v 0.937500 -12.812493 -40.000004 +v 0.937500 -13.749993 -40.000004 +v 0.937500 -13.749995 -31.875002 +v 0.937500 -10.937493 -40.000000 +v 0.937500 -10.937497 -17.500002 +v 0.937500 -12.812497 -17.500002 +v -0.937500 -12.812497 -17.500002 +v -0.937500 -10.937497 -17.500002 +v -0.937500 -10.937493 -40.000000 +v -0.937500 -14.999995 -31.875002 +v -0.937500 -15.937495 -30.937502 +v -0.937500 -15.937497 -19.687502 +v -0.937500 -14.999997 -18.750002 +v 0.937500 -15.937497 -19.687502 +v 0.937500 -15.937495 -30.937502 +v 0.937500 -14.999995 -31.875002 +v 0.937500 -14.999997 -18.750002 +vt 0.808600 0.851546 +vt 0.808600 0.843746 +vt 0.746100 0.843746 +vt 0.808600 0.867196 +vt 0.636700 0.867196 +vt 0.636700 0.851546 +vt 0.636700 0.882796 +vt 0.808600 0.882796 +vt 0.824200 0.867196 +vt 0.808600 0.890646 +vt 0.746100 0.890646 +vt 0.746100 0.882796 +vt 0.746100 0.851546 +vt 0.824200 0.882796 +vt 0.949200 0.683596 +vt 0.855500 0.683596 +vt 0.847700 0.691396 +vt 0.957000 0.691396 +vt 0.949200 0.667946 +vt 0.855500 0.667946 +vt 0.847700 0.707046 +vt 0.839800 0.691396 +vt 0.957000 0.707046 +vt 0.964800 0.707046 +vt 0.839800 0.707046 +vt 0.964800 0.691396 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.707100 -0.707100 +usemtl 05___Default.007 +f 18/13/6 19/14/6 20/15/6 +f 21/16/7 22/17/7 23/18/7 +f 24/18/6 25/17/6 26/16/6 +f 23/19/8 24/17/8 13/16/8 +f 21/16/9 26/20/9 25/19/9 +f 18/21/10 13/16/10 26/20/10 +f 9/22/7 12/23/7 11/24/7 +f 13/13/7 16/25/7 15/15/7 +f 17/25/6 18/13/6 20/15/6 +f 18/13/7 21/16/7 23/18/7 +f 13/13/6 24/18/6 26/16/6 +f 18/20/8 23/19/8 13/16/8 +f 22/17/9 21/16/9 25/19/9 +f 21/26/10 18/21/10 26/20/10 +f 10/20/7 9/22/7 11/24/7 +f 14/14/7 13/13/7 15/15/7 +usemtl 05___Default.004 +f 28/27/6 29/28/6 30/29/6 +f 32/28/7 33/29/7 34/30/7 +f 28/27/8 32/31/8 31/32/8 +f 29/33/11 31/29/11 34/34/11 +f 30/29/9 34/33/9 33/35/9 +f 27/30/12 33/35/12 32/36/12 +f 27/30/6 28/27/6 30/29/6 +f 31/27/7 32/28/7 34/30/7 +f 29/28/8 28/27/8 31/32/8 +f 30/37/11 29/33/11 34/34/11 +f 27/30/9 30/29/9 33/35/9 +f 28/38/12 27/30/12 32/36/12 +o Main_Laser_Center +v 1.875000 -14.999997 -18.750002 +v 1.875000 -14.999996 -22.812502 +v 1.875000 -9.999997 -17.812502 +v 1.875000 -9.999998 -13.750002 +v -1.875000 -14.999997 -18.750002 +v -1.875000 -9.999998 -13.750002 +v -1.875000 -9.999997 -17.812502 +v -1.875000 -14.999996 -22.812502 +vt 0.789100 0.707046 +vt 0.824200 0.707046 +vt 0.781300 0.664046 +vt 0.746100 0.664046 +vt 0.886700 0.632796 +vt 0.886700 0.664046 +vt 0.851600 0.664046 +vt 0.781300 0.632796 +vt 0.746100 0.632796 +vt 0.816400 0.664046 +vt 0.816400 0.632796 +vt 0.851600 0.632796 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +vn 0.000000 -1.000000 -0.000000 +usemtl 05___Default.006 +f 35/39/13 36/40/13 37/41/13 +f 39/39/14 40/42/14 41/41/14 +f 38/43/15 40/44/15 39/45/15 +f 37/46/16 41/47/16 40/42/16 +f 36/48/17 42/49/17 41/46/17 +f 35/49/18 39/48/18 42/45/18 +f 38/42/13 35/39/13 37/41/13 +f 42/40/14 39/39/14 41/41/14 +f 35/50/15 38/43/15 39/45/15 +f 38/41/16 37/46/16 40/42/16 +f 37/41/17 36/48/17 41/46/17 +f 36/50/18 35/49/18 42/45/18 +o Lasers_Main_Laser_Base +v -18.125000 -2.500000 -1.571500 +v -18.125000 -2.499998 -10.000000 +v -14.687500 -2.499998 -10.000000 +v -14.687500 -2.500000 -1.571500 +v -18.125000 0.625000 -2.748000 +v -14.687500 0.625000 -2.748000 +v -14.687500 0.625002 -10.000000 +v -18.125000 0.625002 -10.000000 +v -18.125000 0.000003 -20.000000 +v -16.250000 -1.874997 -20.000000 +v -16.250000 -1.874998 -10.000000 +v -18.125000 0.000002 -10.000000 +v -16.250000 0.000002 -10.000000 +v -16.250000 0.000003 -20.000000 +v -18.125000 -1.874997 -20.000000 +v -18.125000 -1.874998 -10.000000 +v -17.187500 -0.937498 -10.000000 +v -17.187500 -0.937497 -20.000000 +v -13.437500 -0.937497 -20.000000 +v -13.437500 -0.937498 -10.000000 +v -16.250000 -1.874997 -20.000000 +v -18.125000 0.000003 -20.000000 +v -18.125000 0.000002 -10.000000 +v -16.250000 -1.874998 -10.000000 +v -16.250000 0.000003 -20.000000 +v -16.250000 0.000002 -10.000000 +v -18.125000 -1.874998 -10.000000 +v -18.125000 -1.874997 -20.000000 +v -17.187500 -0.937497 -20.000000 +v -17.187500 -0.937498 -10.000000 +v -13.437500 -0.937498 -10.000000 +v -13.437500 -0.937497 -20.000000 +v 1.875000 -14.062497 -17.812502 +v 1.875000 -9.062498 -12.812502 +v 1.875000 -9.062499 -7.659701 +v 1.875000 -14.062499 -7.659702 +v -1.875000 -14.062497 -17.812502 +v -1.875000 -14.062499 -7.659702 +v -1.875000 -9.062499 -7.659701 +v -1.875000 -9.062498 -12.812502 +v 18.125000 0.000002 -10.000000 +v 16.250000 -1.874998 -10.000000 +v 16.250000 -1.874997 -20.000000 +v 18.125000 0.000003 -20.000000 +v 18.125000 -1.874998 -10.000000 +v 18.125000 -1.874997 -20.000000 +v 16.250000 0.000003 -20.000000 +v 16.250000 0.000002 -10.000000 +v 13.437500 -0.937498 -10.000000 +v 13.437500 -0.937497 -20.000000 +v 17.187500 -0.937497 -20.000000 +v 17.187500 -0.937498 -10.000000 +v 14.687500 -2.500000 -1.571500 +v 14.687500 -2.499998 -10.000000 +v 18.125000 -2.499998 -10.000000 +v 18.125000 -2.500000 -1.571500 +v 18.125000 0.625002 -10.000000 +v 14.687500 0.625002 -10.000000 +v 14.687500 0.625000 -2.748000 +v 18.125000 0.625000 -2.748000 +v 16.250000 -1.874998 -10.000000 +v 18.125000 0.000002 -10.000000 +v 18.125000 0.000003 -20.000000 +v 16.250000 -1.874997 -20.000000 +v 18.125000 -1.874997 -20.000000 +v 18.125000 -1.874998 -10.000000 +v 16.250000 0.000002 -10.000000 +v 16.250000 0.000003 -20.000000 +v 13.437500 -0.937497 -20.000000 +v 13.437500 -0.937498 -10.000000 +v 17.187500 -0.937498 -10.000000 +v 17.187500 -0.937497 -20.000000 +vt 0.343800 0.921846 +vt 0.343800 0.898446 +vt 0.281300 0.898446 +vt 0.290000 0.968746 +vt 0.343800 0.968746 +vt 0.343800 0.945296 +vt 0.343800 0.922046 +vt 0.343800 0.945096 +vt 0.367200 0.945096 +vt 0.281300 0.922046 +vt 0.290000 0.945096 +vt 0.238300 0.957046 +vt 0.238300 0.851546 +vt 0.265600 0.851546 +vt 0.265600 0.957046 +vt 0.191400 0.957046 +vt 0.191400 0.851546 +vt 0.933600 0.632796 +vt 0.898400 0.632796 +vt 0.898400 0.597646 +vt 0.898400 0.566396 +vt 0.968800 0.597646 +vt 0.933600 0.664046 +vt 0.898400 0.664046 +vt 0.968800 0.632796 +vt 0.968800 0.664046 +vt 0.281300 0.921846 +vt 0.290000 0.945296 +vt 0.367200 0.922046 +vt 0.968800 0.566396 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 -0.000000 0.000000 +vn -0.707100 -0.707100 -0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.707100 0.707100 0.000000 +vn 0.707100 -0.707100 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +usemtl 05___Default.005 +f 44/51/19 45/52/19 46/53/19 +f 48/54/20 49/55/20 50/56/20 +f 44/57/21 50/58/21 49/59/21 +f 44/57/22 43/60/22 47/61/22 +f 52/62/23 53/63/23 54/64/23 +f 56/62/24 57/65/24 58/64/24 +f 60/62/19 61/66/19 62/67/19 +f 64/65/25 65/64/25 66/63/25 +f 68/63/26 69/64/26 70/65/26 +f 72/63/20 73/67/20 74/66/20 +f 76/68/27 77/69/27 78/70/27 +f 80/70/22 81/69/22 82/68/22 +f 78/71/19 80/70/19 79/72/19 +f 76/68/20 82/73/20 81/74/20 +f 75/75/28 79/76/28 82/73/28 +f 84/63/26 85/62/26 86/65/26 +f 88/65/25 89/62/25 90/63/25 +f 92/66/19 93/62/19 94/63/19 +f 96/52/19 97/51/19 98/77/19 +f 100/55/20 101/54/20 102/78/20 +f 99/58/21 97/57/21 96/79/21 +f 102/61/27 98/60/27 97/57/27 +f 104/64/24 105/65/24 106/62/24 +f 108/64/23 109/63/23 110/62/23 +f 112/67/20 113/63/20 114/62/20 +f 43/77/19 44/51/19 46/53/19 +f 47/78/20 48/54/20 50/56/20 +f 45/79/21 44/57/21 49/59/21 +f 50/58/22 44/57/22 47/61/22 +f 51/65/23 52/62/23 54/64/23 +f 55/63/24 56/62/24 58/64/24 +f 59/63/19 60/62/19 62/67/19 +f 63/62/25 64/65/25 66/63/25 +f 67/62/26 68/63/26 70/65/26 +f 71/62/20 72/63/20 74/66/20 +f 75/72/27 76/68/27 78/70/27 +f 79/72/22 80/70/22 82/68/22 +f 75/80/19 78/71/19 79/72/19 +f 77/69/20 76/68/20 81/74/20 +f 76/68/28 75/75/28 82/73/28 +f 83/64/26 84/63/26 86/65/26 +f 87/64/25 88/65/25 90/63/25 +f 91/67/19 92/66/19 94/63/19 +f 95/53/19 96/52/19 98/77/19 +f 99/56/20 100/55/20 102/78/20 +f 100/59/21 99/58/21 96/79/21 +f 99/58/27 102/61/27 97/57/27 +f 103/63/24 104/64/24 106/62/24 +f 107/65/23 108/64/23 110/62/23 +f 111/66/20 112/67/20 114/62/20 +o Hull +v 13.125000 4.375001 -9.659699 +v 11.250000 15.000001 -7.659698 +v 11.250000 14.999999 4.340302 +v 13.125000 4.375000 2.340301 +v -13.125000 4.375001 -9.659699 +v -13.125000 4.375000 2.340301 +v -11.250000 14.999999 4.340302 +v -11.250000 15.000001 -7.659698 +v -10.000000 -15.000001 3.340298 +v -5.000000 -14.999999 -7.659702 +v 5.000000 -14.999999 -7.659702 +v 10.000000 -15.000001 3.340298 +v 11.250000 -6.249998 -11.159701 +v 16.250000 -6.250000 -0.159701 +v -11.250000 -6.249998 -11.159701 +v -16.250000 -6.250000 -0.159701 +v -14.166700 -9.166702 14.340298 +v -16.250000 -6.250002 11.340299 +v -9.000000 -15.000001 3.340298 +v -9.000000 -9.166702 14.340298 +v -9.000000 -6.250002 11.340299 +v -9.000000 -6.250000 -0.159701 +v 16.250000 -6.250002 11.340299 +v 14.166700 -9.166702 14.340298 +v 9.000000 -15.000001 3.340298 +v 9.000000 -9.166702 14.340298 +v 9.000000 -6.250002 11.340299 +v 9.000000 -6.250000 -0.159701 +v -18.125000 -6.250001 8.340299 +v -18.125000 -6.250000 -0.159701 +v -6.875000 -6.250000 -2.909701 +v -9.000000 -6.250001 6.340299 +v 9.000000 -6.250001 6.340299 +v 6.875000 -6.250000 -2.909701 +v 18.125000 -6.250000 -0.159701 +v 18.125000 -6.250001 8.340299 +v -9.375000 -6.249996 -22.659702 +v -6.875000 -6.249996 -22.659702 +v 6.875000 -6.249996 -22.659702 +v 9.375000 -6.249996 -22.659702 +v -18.125000 4.375000 4.340301 +v -9.000000 4.375000 2.340301 +v -6.875000 4.375001 -6.909699 +v -18.125000 4.375000 -4.159699 +v 9.000000 4.375000 2.340301 +v 18.125000 4.375000 4.340301 +v 18.125000 4.375000 -4.159699 +v 6.875000 4.375001 -6.909699 +v -6.875000 4.375004 -26.659700 +v -9.375000 4.375004 -26.659700 +v 9.375000 4.375004 -26.659700 +v 6.875000 4.375004 -26.659700 +v 9.000000 -15.000001 3.340298 +v 9.000000 -4.500004 23.340300 +v -9.000000 -4.500004 23.340300 +v -9.000000 -15.000001 3.340298 +v 7.000000 4.124996 24.840300 +v -7.000000 4.124996 24.840300 +v -9.000000 4.500000 2.340301 +v -9.000000 -6.000000 -3.659701 +v -7.000000 12.999999 3.840302 +v 7.000000 12.999999 3.840302 +v 9.000000 4.500000 2.340301 +v 9.000000 -6.000000 -3.659701 +v 6.875000 -7.999996 -26.659702 +v 6.875000 5.166705 -31.659700 +v 6.875000 13.000001 -7.659698 +v 6.875000 -7.999999 -7.659701 +v -6.875000 -7.999996 -26.659702 +v -6.875000 -7.999999 -7.659701 +v -6.875000 13.000001 -7.659698 +v -6.875000 5.166705 -31.659700 +vt 0.082000 0.824196 +vt 0.175800 0.824196 +vt 0.160200 0.910146 +vt 0.175800 0.648446 +vt 0.257800 0.632796 +vt 0.082000 0.648446 +vt 0.000000 0.839846 +vt 0.000000 0.632796 +vt 0.448100 0.589846 +vt 0.368100 0.589846 +vt 0.327600 0.501946 +vt 0.324200 0.499996 +vt 0.351600 0.570296 +vt 0.265600 0.570296 +vt 0.498200 0.659896 +vt 0.318100 0.659896 +vt 0.238300 0.499996 +vt 0.152300 0.546896 +vt 0.175800 0.570296 +vt 0.152300 0.624996 +vt 0.152300 0.585946 +vt 0.066400 0.617196 +vt 0.175800 0.624996 +vt 0.152300 0.586046 +vt 0.265600 0.624996 +vt 0.066500 0.911996 +vt 0.088100 0.999996 +vt 0.015700 0.983396 +vt 0.242600 0.980396 +vt 0.242600 0.999946 +vt 0.545900 0.983396 +vt 0.474000 0.999946 +vt 0.495400 0.912396 +vt 0.561500 0.912396 +vt 0.320300 0.999996 +vt 0.320300 0.980546 +vt 0.273400 0.816396 +vt 0.273400 0.894546 +vt 0.343800 0.894546 +vt 0.343800 0.816396 +vt 0.410200 0.816396 +vt 0.441400 0.894546 +vt 0.375000 0.894546 +vt 0.585900 0.816396 +vt 0.617200 0.894546 +vt 0.242200 0.999996 +vt 0.320300 0.980446 +vt 0.242200 0.980446 +vt 0.652300 0.640646 +vt 0.652300 0.499996 +vt 0.496100 0.499996 +vt 0.722700 0.624996 +vt 0.722700 0.515646 +vt 0.570300 0.796896 +vt 0.722700 0.804696 +vt 0.722700 0.628896 +vt 0.789100 0.792946 +vt 0.886700 0.624996 +vt 0.886700 0.515646 +vt 0.640600 0.851546 +vt 0.851600 0.898446 +vt 0.812800 0.795646 +vt 1.000000 0.734546 +vt 1.000000 0.898446 +vt 1.000000 0.999996 +vt 0.851600 0.999996 +vt 0.750000 0.898446 +vt 0.750000 0.999996 +vt 0.562500 0.999996 +vt 0.066400 0.910146 +vt 0.257800 0.839846 +vt 0.488700 0.501946 +vt 0.066400 0.624996 +vt 0.000000 0.911996 +vt 0.496100 0.640646 +vt 0.562500 0.898446 +vn 0.984800 0.173800 0.000000 +vn -0.984800 0.173800 0.000000 +vn 0.000000 -0.185000 0.982700 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.185000 -0.982700 +vn 0.000000 -1.000000 -0.000000 +vn 0.705400 -0.632100 -0.320600 +vn 0.000000 -0.371400 -0.928500 +vn -0.705400 -0.632100 -0.320600 +vn -0.813700 -0.581200 -0.000000 +vn 0.000000 -0.883500 0.468500 +vn 0.000000 0.717000 0.697100 +vn 0.813700 -0.581200 -0.000000 +vn 0.200900 0.345100 0.916800 +vn -0.200900 0.345100 0.916800 +vn 0.988300 -0.053800 -0.142800 +vn 0.971000 -0.084200 -0.223700 +vn 1.000000 0.000000 0.000000 +vn 0.923400 -0.135200 -0.359100 +vn 0.000000 -0.352300 -0.935900 +vn -0.923400 -0.135200 -0.359100 +vn -0.988300 -0.053800 -0.142800 +vn -0.971000 -0.084200 -0.223700 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.885400 0.464800 +vn 0.000000 -0.171300 0.985200 +vn -0.990400 0.126900 0.054200 +vn -0.992700 0.110900 0.047400 +vn -0.973800 0.209500 0.088900 +vn -0.972700 0.213700 0.090600 +vn 0.000000 0.921100 0.389300 +vn 0.973600 0.209900 0.090000 +vn 0.990500 0.126400 0.054600 +vn 0.992700 0.110800 0.046800 +vn 0.000000 0.950600 -0.310300 +vn 0.000000 -0.355000 -0.934900 +vn 0.972600 0.214500 0.090000 +usemtl 05___Default +f 116/81/29 117/82/29 118/83/29 +f 120/83/30 121/82/30 122/81/30 +f 117/82/31 121/84/31 120/85/31 +f 116/81/32 122/86/32 121/84/32 +f 115/87/33 119/88/33 122/86/33 +f 124/89/34 125/90/34 126/91/34 +f 125/92/35 127/93/35 128/94/35 +f 124/89/36 129/95/36 127/96/36 +f 124/92/37 123/97/37 130/94/37 +f 123/97/38 131/98/38 132/99/38 +f 134/100/39 131/101/39 123/102/39 +f 135/103/40 132/99/40 131/104/40 +f 136/105/32 130/94/32 132/99/32 +f 126/97/41 128/94/41 137/99/41 +f 126/102/39 138/101/39 140/100/39 +f 138/101/40 137/99/40 141/103/40 +f 137/99/32 128/94/32 142/105/32 +f 144/106/34 145/107/34 146/108/34 +f 147/108/34 148/107/34 149/106/34 +f 151/109/34 152/110/34 145/107/34 +f 148/107/34 153/110/34 154/109/34 +f 156/111/32 157/112/32 158/113/32 +f 159/111/32 160/114/32 161/113/32 +f 157/112/32 163/115/32 164/116/32 +f 162/112/32 161/113/32 165/116/32 +f 146/117/42 156/118/42 155/119/42 +f 147/117/43 150/120/43 160/119/43 +f 149/121/44 161/122/45 160/123/46 +f 154/124/47 165/125/47 161/122/45 +f 153/126/48 166/115/48 165/127/48 +f 151/128/48 164/127/48 163/115/48 +f 151/124/49 144/121/50 158/122/51 +f 144/121/50 143/120/52 155/123/52 +f 168/129/53 169/130/53 170/131/53 +f 171/132/54 172/133/54 169/130/54 +f 170/134/52 169/129/55 173/135/56 +f 172/136/57 175/137/58 173/135/56 +f 171/132/59 176/138/59 175/139/59 +f 171/136/60 168/129/61 177/135/62 +f 167/134/46 178/140/46 177/135/62 +f 179/141/46 180/142/46 181/143/46 +f 183/141/52 184/144/52 185/143/52 +f 182/144/34 184/145/34 183/146/34 +f 180/147/63 186/148/63 185/149/63 +f 179/141/64 183/146/64 186/148/64 +f 115/150/29 116/81/29 118/83/29 +f 119/150/30 120/83/30 122/81/30 +f 118/151/31 117/82/31 120/85/31 +f 117/82/32 116/81/32 121/84/32 +f 116/81/33 115/87/33 122/86/33 +f 123/152/34 124/89/34 126/91/34 +f 126/97/35 125/92/35 128/94/35 +f 125/90/36 124/89/36 127/96/36 +f 129/93/37 124/92/37 130/94/37 +f 130/94/38 123/97/38 132/99/38 +f 133/153/39 134/100/39 123/102/39 +f 134/100/40 135/103/40 131/104/40 +f 135/103/32 136/105/32 132/99/32 +f 138/98/41 126/97/41 137/99/41 +f 139/153/39 126/102/39 140/100/39 +f 140/100/40 138/101/40 141/103/40 +f 141/103/32 137/99/32 142/105/32 +f 143/154/34 144/106/34 146/108/34 +f 150/154/34 147/108/34 149/106/34 +f 144/106/34 151/109/34 145/107/34 +f 149/106/34 148/107/34 154/109/34 +f 155/114/32 156/111/32 158/113/32 +f 162/112/32 159/111/32 161/113/32 +f 158/113/32 157/112/32 164/116/32 +f 166/115/32 162/112/32 165/116/32 +f 143/120/42 146/117/42 155/119/42 +f 159/118/43 147/117/43 160/119/43 +f 150/120/46 149/121/44 160/123/46 +f 149/121/44 154/124/47 161/122/45 +f 154/128/48 153/126/48 165/127/48 +f 152/126/48 151/128/48 163/115/48 +f 164/125/49 151/124/49 158/122/51 +f 158/122/51 144/121/50 155/123/52 +f 167/155/53 168/129/53 170/131/53 +f 168/129/54 171/132/54 169/130/54 +f 174/140/52 170/134/52 173/135/56 +f 169/129/55 172/136/57 173/135/56 +f 172/133/59 171/132/59 175/139/59 +f 176/137/65 171/136/60 177/135/62 +f 168/129/61 167/134/46 177/135/62 +f 182/144/46 179/141/46 181/143/46 +f 186/142/52 183/141/52 185/143/52 +f 179/141/34 182/144/34 183/146/34 +f 181/156/63 180/147/63 185/149/63 +f 180/147/64 179/141/64 186/148/64 +o HoverPad +v 11.125000 3.452799 8.250001 +v 11.125000 3.452799 6.250000 +v 11.125000 -0.547201 6.250000 +v 11.125000 -0.547201 8.250000 +v 15.125000 3.452799 8.250001 +v 15.125000 -0.547201 8.250000 +v 15.125000 -0.547201 6.250000 +v 15.125000 3.452799 6.250000 +v -10.324200 -15.089800 -1.901103 +v -13.685600 -10.361699 -3.432902 +v -11.197400 -10.361698 -8.892702 +v -7.836000 -15.089799 -7.360802 +v -8.890100 -13.858500 -1.247502 +v -12.251500 -9.130400 -2.779402 +v -9.763300 -9.130399 -8.239102 +v -6.401900 -13.858499 -6.707303 +v -8.750000 -2.916700 3.125000 +v -15.000000 3.333300 3.125000 +v -15.000000 3.333299 6.250000 +v -11.250000 -0.416701 6.250000 +v -11.250000 3.333300 3.125000 +v -17.500000 -2.916700 3.125000 +v -15.000000 -0.416701 6.250000 +v -11.250000 3.333299 6.250000 +v -11.242400 4.375002 -14.999999 +v -6.867400 4.375002 -14.999999 +v -6.867400 7.187502 -13.124999 +v -9.367400 7.187502 -13.124999 +v -9.367400 7.187501 -9.130299 +v -11.242400 4.375001 -9.659699 +v -6.867400 7.187501 -9.130299 +v -6.867400 -6.249998 -15.312501 +v -10.625000 -6.249998 -15.312501 +v -8.750000 -9.062498 -13.437502 +v -6.867400 -9.062498 -13.437502 +v -10.625000 -6.249998 -11.159701 +v -8.750000 -9.062498 -10.034702 +v -6.867400 -9.062498 -10.034702 +v -6.867400 -6.249998 -11.159701 +v 15.000000 3.333300 3.125000 +v 8.750000 -2.916700 3.125000 +v 11.250000 -0.416701 6.250000 +v 15.000000 3.333299 6.250000 +v 17.500000 -2.916700 3.125000 +v 11.250000 3.333300 3.125000 +v 11.250000 3.333299 6.250000 +v 15.000000 -0.416701 6.250000 +v 6.867400 4.375002 -14.999999 +v 11.242400 4.375002 -14.999999 +v 9.367400 7.187502 -13.124999 +v 6.867400 7.187502 -13.124999 +v 11.242400 4.375001 -9.659699 +v 9.367400 7.187501 -9.130299 +v 6.867400 7.187501 -9.130299 +v 10.625000 -6.249998 -15.312501 +v 6.867400 -6.249998 -15.312501 +v 6.867400 -9.062498 -13.437502 +v 8.750000 -9.062498 -13.437502 +v 8.750000 -9.062498 -10.034702 +v 10.625000 -6.249998 -11.159701 +v 6.867400 -9.062498 -10.034702 +v 6.867400 -6.249998 -11.159701 +v 9.585800 -7.999997 -17.039202 +v 8.585800 -6.585798 -16.039202 +v 11.414200 -6.585798 -13.210801 +v 12.414200 -7.999998 -14.210801 +v 7.585800 -10.828397 -15.039202 +v 10.414200 -10.828398 -12.210802 +v 9.414200 -9.414198 -11.210802 +v 6.585800 -9.414198 -14.039202 +v -7.585800 -10.828397 -15.039202 +v -6.585800 -9.414198 -14.039202 +v -9.414200 -9.414198 -11.210802 +v -10.414200 -10.828398 -12.210802 +v -9.585800 -7.999997 -17.039202 +v -12.414200 -7.999998 -14.210801 +v -11.414200 -6.585798 -13.210801 +v -8.585800 -6.585798 -16.039202 +v -8.585800 8.828403 -15.039198 +v -7.585800 7.414202 -14.039199 +v -9.585800 4.585803 -16.039200 +v -10.585800 6.000003 -17.039198 +v -11.414200 8.828402 -12.210798 +v -13.414200 6.000002 -14.210799 +v -12.414200 4.585803 -13.210799 +v -10.414200 7.414202 -11.210799 +v 11.414200 8.828402 -12.210798 +v 10.414200 7.414202 -11.210799 +v 12.414200 4.585803 -13.210799 +v 13.414200 6.000002 -14.210799 +v 8.585800 8.828403 -15.039198 +v 10.585800 6.000003 -17.039198 +v 9.585800 4.585803 -16.039200 +v 7.585800 7.414202 -14.039199 +v -3.000000 -11.165402 14.898698 +v 3.000000 -11.165402 14.898698 +v 3.000000 -8.376102 20.210897 +v -3.000000 -8.376102 20.210897 +v -3.000000 -9.394702 13.968898 +v 3.000000 -9.394702 13.968898 +v 3.000000 -6.605303 19.281097 +v -3.000000 -6.605303 19.281097 +v 13.679800 -10.346799 -3.430302 +v 10.318500 -15.074900 -1.898502 +v 7.830300 -15.074899 -7.358202 +v 11.191700 -10.346798 -8.890101 +v 12.245700 -9.115500 -2.776801 +v 8.884400 -13.843500 -1.244902 +v 6.396200 -13.843499 -6.704702 +v 9.757600 -9.115499 -8.236502 +v -15.125000 3.452799 8.250001 +v -15.125000 3.452799 6.250000 +v -15.125000 -0.547201 6.250000 +v -15.125000 -0.547201 8.250000 +v -11.125000 3.452799 8.250001 +v -11.125000 -0.547201 8.250000 +v -11.125000 -0.547201 6.250000 +v -11.125000 3.452799 6.250000 +vt 0.308600 0.808596 +vt 0.308600 0.777346 +vt 0.324200 0.777346 +vt 0.324200 0.808596 +vt 0.355500 0.808596 +vt 0.277300 0.777346 +vt 0.277300 0.808596 +vt 0.531300 0.714846 +vt 0.578100 0.714846 +vt 0.578100 0.761696 +vt 0.515600 0.714846 +vt 0.531300 0.761696 +vt 0.515600 0.761696 +vt 0.320300 0.687496 +vt 0.320300 0.714846 +vt 0.351600 0.714846 +vt 0.371100 0.687496 +vt 0.269500 0.687496 +vt 0.289100 0.687496 +vt 0.289100 0.707046 +vt 0.316400 0.726546 +vt 0.269500 0.726546 +vt 0.320300 0.707046 +vt 0.269500 0.691396 +vt 0.304700 0.726546 +vt 0.304700 0.707046 +vt 0.289100 0.691396 +vt 0.308600 0.691396 +vt 0.320300 0.722646 +vt 0.281300 0.722646 +vt 0.304700 0.691396 +vt 0.355500 0.777346 +vt 0.261700 0.691396 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn -0.717100 -0.615700 -0.326800 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.560200 -0.788000 0.255300 +vn 0.707100 0.707100 0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 -0.554700 0.832100 +vn 0.832100 -0.554700 -0.000000 +vn 0.000000 0.554700 0.832100 +vn -0.832100 -0.554700 0.000000 +vn -0.832100 0.554700 0.000000 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 -0.000000 0.707100 +vn -0.500000 0.707100 0.500000 +vn -0.707100 0.000000 -0.707100 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 -0.000000 0.707100 +vn 0.500000 0.707100 0.500000 +vn 0.707100 0.000000 -0.707100 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 0.000000 0.464900 0.885400 +vn 0.717100 -0.615700 -0.326800 +vn 0.414700 -0.000000 0.910000 +vn -0.560200 -0.788000 0.255300 +vn -0.560300 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +vn 0.560200 0.788000 -0.255300 +vn 0.717100 -0.615600 -0.326800 +usemtl 05___Default +f 188/157/66 189/158/66 190/159/66 +f 192/159/67 193/158/67 194/157/67 +f 190/159/68 192/160/68 191/161/68 +f 189/158/69 193/157/69 192/160/69 +f 188/162/70 194/163/70 193/157/70 +f 187/159/71 191/160/71 194/157/71 +f 195/164/72 196/165/72 197/166/72 +f 200/167/73 196/164/73 195/168/73 +f 200/169/74 201/167/74 197/164/74 +f 201/169/75 202/167/75 198/164/75 +f 199/167/76 195/164/76 198/168/76 +f 204/170/77 205/171/77 206/172/77 +f 207/170/78 208/173/78 209/172/78 +f 212/174/79 213/175/79 214/176/79 +f 216/177/80 211/178/80 214/176/80 +f 215/179/69 214/176/69 213/175/69 +f 218/180/81 219/178/81 220/176/81 +f 222/181/82 219/178/82 220/176/82 +f 223/182/69 220/176/69 221/183/69 +f 225/184/67 224/185/67 221/186/67 +f 226/170/78 227/173/78 228/172/78 +f 231/170/77 232/171/77 233/172/77 +f 234/174/79 235/178/79 236/176/79 +f 238/177/82 239/179/82 236/176/82 +f 240/170/69 237/175/69 236/176/69 +f 242/180/81 243/183/81 244/176/81 +f 246/181/83 241/178/83 244/176/83 +f 247/187/69 243/183/69 244/176/69 +f 248/187/66 242/180/66 243/183/66 +f 250/157/84 251/158/84 252/159/84 +f 254/159/85 255/158/85 256/157/85 +f 252/159/86 254/160/86 253/161/86 +f 251/158/87 255/157/87 254/160/87 +f 250/162/88 256/163/88 255/157/88 +f 250/158/89 249/159/89 253/160/89 +f 257/160/90 258/157/90 259/158/90 +f 262/159/91 263/158/91 264/157/91 +f 260/159/92 262/160/92 261/161/92 +f 260/159/93 259/158/93 263/157/93 +f 259/158/94 258/162/94 264/163/94 +f 257/159/95 261/160/95 264/157/95 +f 265/160/95 266/157/95 267/158/95 +f 269/160/93 270/159/93 271/158/93 +f 268/159/91 270/160/91 269/161/91 +f 268/159/92 267/158/92 271/157/92 +f 266/162/90 272/163/90 271/157/90 +f 265/159/94 269/160/94 272/157/94 +f 273/160/87 274/157/87 275/158/87 +f 277/160/89 278/159/89 279/158/89 +f 273/188/84 276/159/84 278/160/84 +f 275/158/86 279/157/86 278/160/86 +f 274/162/85 280/163/85 279/157/85 +f 274/158/88 273/159/88 277/160/88 +f 282/165/96 283/166/96 284/168/96 +f 286/167/97 282/164/97 281/168/97 +f 287/167/67 283/164/67 282/168/67 +f 288/167/98 284/164/98 283/168/98 +f 288/169/66 285/167/66 281/164/66 +f 290/165/99 291/166/99 292/168/99 +f 294/167/100 290/164/100 289/168/100 +f 294/169/101 295/167/102 291/164/102 +f 295/169/103 296/167/103 292/164/103 +f 296/169/104 293/167/104 289/164/104 +f 298/157/66 299/158/66 300/159/66 +f 302/159/67 303/158/67 304/157/67 +f 300/159/68 302/160/68 301/161/68 +f 299/158/69 303/157/69 302/160/69 +f 298/162/70 304/163/70 303/157/70 +f 297/159/71 301/160/71 304/157/71 +f 187/160/66 188/157/66 190/159/66 +f 191/160/67 192/159/67 194/157/67 +f 187/188/68 190/159/68 191/161/68 +f 190/159/69 189/158/69 192/160/69 +f 189/158/70 188/162/70 193/157/70 +f 188/158/71 187/159/71 194/157/71 +f 198/168/72 195/164/72 197/166/72 +f 199/169/73 200/167/73 195/168/73 +f 196/168/74 200/169/74 197/164/74 +f 197/168/75 201/169/75 198/164/75 +f 202/169/76 199/167/76 198/168/76 +f 203/173/77 204/170/77 206/172/77 +f 210/171/78 207/170/78 209/172/78 +f 211/178/79 212/174/79 214/176/79 +f 215/179/80 216/177/80 214/176/80 +f 217/170/69 215/179/69 213/175/69 +f 221/183/81 218/180/81 220/176/81 +f 223/182/82 222/181/82 220/176/82 +f 224/187/69 223/182/69 221/183/69 +f 218/189/67 225/184/67 221/186/67 +f 229/171/78 226/170/78 228/172/78 +f 230/173/77 231/170/77 233/172/77 +f 237/175/79 234/174/79 236/176/79 +f 235/178/82 238/177/82 236/176/82 +f 239/179/69 240/170/69 236/176/69 +f 241/178/81 242/180/81 244/176/81 +f 245/182/83 246/181/83 244/176/83 +f 245/182/69 247/187/69 244/176/69 +f 247/187/66 248/187/66 243/183/66 +f 249/160/84 250/157/84 252/159/84 +f 253/160/85 254/159/85 256/157/85 +f 249/188/86 252/159/86 253/161/86 +f 252/159/87 251/158/87 254/160/87 +f 251/158/88 250/162/88 255/157/88 +f 256/157/89 250/158/89 253/160/89 +f 260/159/90 257/160/90 259/158/90 +f 261/160/91 262/159/91 264/157/91 +f 257/188/92 260/159/92 261/161/92 +f 262/160/93 260/159/93 263/157/93 +f 263/157/94 259/158/94 264/163/94 +f 258/158/95 257/159/95 264/157/95 +f 268/159/95 265/160/95 267/158/95 +f 272/157/93 269/160/93 271/158/93 +f 265/188/91 268/159/91 269/161/91 +f 270/160/92 268/159/92 271/157/92 +f 267/158/90 266/162/90 271/157/90 +f 266/158/94 265/159/94 272/157/94 +f 276/159/87 273/160/87 275/158/87 +f 280/157/89 277/160/89 279/158/89 +f 277/161/84 273/188/84 278/160/84 +f 276/159/86 275/158/86 278/160/86 +f 275/158/85 274/162/85 279/157/85 +f 280/157/88 274/158/88 277/160/88 +f 281/164/96 282/165/96 284/168/96 +f 285/169/97 286/167/97 281/168/97 +f 286/169/67 287/167/67 282/168/67 +f 287/169/98 288/167/98 283/168/98 +f 284/168/66 288/169/66 281/164/66 +f 289/164/105 290/165/99 292/168/99 +f 293/169/100 294/167/100 289/168/100 +f 290/168/101 294/169/101 291/164/102 +f 291/168/103 295/169/103 292/164/103 +f 292/168/104 296/169/104 289/164/104 +f 297/160/66 298/157/66 300/159/66 +f 301/160/67 302/159/67 304/157/67 +f 297/188/68 300/159/68 301/161/68 +f 300/159/69 299/158/69 302/160/69 +f 299/158/70 298/162/70 303/157/70 +f 298/158/71 297/159/71 304/157/71 +o Glow +v 11.623000 -10.260598 -9.636102 +v 14.525800 -10.260599 -3.266402 +v 10.604200 -15.776700 -1.479203 +v 7.701400 -15.776699 -7.849002 +v 9.830300 -8.721498 -8.819201 +v 12.733200 -8.721500 -2.449401 +v 8.811600 -14.237500 -0.662302 +v 5.908700 -14.237499 -7.032002 +v -7.707100 -15.791599 -7.851603 +v -10.610000 -15.791600 -1.481803 +v -14.531600 -10.275499 -3.269002 +v -11.628700 -10.275498 -9.638701 +v -5.914500 -14.252499 -7.034602 +v -8.817300 -14.252500 -0.664902 +v -12.738900 -8.736400 -2.452001 +v -9.836100 -8.736398 -8.821801 +v -7.232200 -11.535497 -15.392802 +v -5.982200 -9.767798 -14.142802 +v -9.517800 -9.767798 -10.607202 +v -10.767800 -11.535498 -11.857202 +v -9.732200 -7.999997 -17.892801 +v -13.267800 -7.999998 -14.357201 +v -12.017800 -6.232198 -13.107201 +v -8.482200 -6.232197 -16.642801 +v 11.767800 9.535501 -11.857198 +v 10.517800 7.767802 -10.607199 +v 13.017800 4.232202 -13.107199 +v 14.267800 6.000002 -14.357199 +v 8.232200 9.535502 -15.392798 +v 10.732200 6.000003 -17.892797 +v 9.482200 4.232203 -16.642799 +v 6.982200 7.767802 -14.142799 +v 10.625000 3.952799 8.750001 +v 10.625000 3.952799 6.250000 +v 10.625000 -1.047201 6.250000 +v 10.625000 -1.047201 8.750000 +v 15.625000 3.952799 8.750001 +v 15.625000 -1.047201 8.750000 +v 15.625000 -1.047201 6.250000 +v 15.625000 3.952799 6.250000 +v -3.500000 -11.840503 14.688398 +v 3.500000 -11.840503 14.688398 +v 3.500000 -8.586304 20.885998 +v -3.500000 -8.586304 20.885998 +v -3.500000 -9.627102 13.526198 +v 3.500000 -9.627102 13.526198 +v 3.500000 -6.372903 19.723799 +v -3.500000 -6.372903 19.723799 +v -8.232200 9.535502 -15.392798 +v -6.982200 7.767802 -14.142799 +v -9.482200 4.232203 -16.642799 +v -10.732200 6.000003 -17.892797 +v -11.767800 9.535501 -11.857198 +v -14.267800 6.000002 -14.357199 +v -13.017800 4.232202 -13.107199 +v -10.517800 7.767802 -10.607199 +v 9.732200 -7.999997 -17.892801 +v 8.482200 -6.232197 -16.642801 +v 12.017800 -6.232198 -13.107201 +v 13.267800 -7.999998 -14.357201 +v 7.232200 -11.535497 -15.392802 +v 10.767800 -11.535498 -11.857202 +v 9.517800 -9.767798 -10.607202 +v 5.982200 -9.767798 -14.142802 +v -15.625000 3.952799 8.750001 +v -15.625000 3.952799 6.250000 +v -15.625000 -1.047201 6.250000 +v -15.625000 -1.047201 8.750000 +v -10.625000 3.952799 8.750001 +v -10.625000 -1.047201 8.750000 +v -10.625000 -1.047201 6.250000 +v -10.625000 3.952799 6.250000 +vt 0.589800 0.652346 +vt 0.589800 0.707046 +vt 0.535200 0.707046 +vt 0.515600 0.652346 +vt 0.535200 0.652346 +vt 0.515600 0.707046 +vt 0.293000 0.769546 +vt 0.277300 0.769546 +vt 0.277300 0.730446 +vt 0.293000 0.730446 +vt 0.332000 0.730446 +vt 0.332000 0.769546 +vn 0.717100 -0.615700 -0.326800 +vn 0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 0.910000 +vn -0.560200 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +vn -0.717100 -0.615700 -0.326800 +vn 0.560200 -0.788000 0.255300 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 -0.000000 0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.707100 -0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.500000 0.707100 -0.500000 +vn 0.500000 -0.707100 -0.500000 +vn -0.500000 0.707100 0.500000 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 0.000000 0.464900 0.885400 +vn 0.500000 0.707100 0.500000 +vn -0.500000 -0.707100 0.500000 +vn -0.560300 -0.788000 0.255300 +usemtl Material__2 +f 306/190/106 307/191/106 308/192/106 +f 310/193/107 306/194/107 305/192/107 +f 311/193/108 307/194/108 306/192/108 +f 311/195/109 312/193/109 308/194/109 +f 309/193/110 305/194/110 308/192/110 +f 314/190/111 315/191/111 316/192/111 +f 318/193/112 314/194/112 313/192/112 +f 319/193/113 315/194/113 314/192/113 +f 319/195/114 320/193/114 316/194/114 +f 320/195/115 317/193/115 313/194/115 +f 321/196/116 322/197/116 323/198/116 +f 326/199/117 327/198/117 328/197/117 +f 324/200/118 326/201/118 325/196/118 +f 324/196/119 323/197/119 327/198/119 +f 321/199/120 325/196/120 328/197/120 +f 329/196/121 330/197/121 331/198/121 +f 333/196/122 334/199/122 335/198/122 +f 329/199/123 332/200/123 334/201/123 +f 331/197/124 335/198/124 334/199/124 +f 329/199/125 333/196/125 336/197/125 +f 338/197/126 339/198/126 340/199/126 +f 342/199/127 343/198/127 344/197/127 +f 340/200/128 342/201/128 341/196/128 +f 339/197/129 343/198/129 342/199/129 +f 337/199/130 341/196/130 344/197/130 +f 346/190/131 347/191/131 348/192/131 +f 350/193/132 346/194/132 345/192/132 +f 351/193/127 347/194/127 346/192/127 +f 352/193/133 348/194/133 347/192/133 +f 352/195/126 349/193/126 345/194/126 +f 353/196/120 354/197/120 355/198/120 +f 357/196/119 358/199/119 359/198/119 +f 356/200/117 358/201/117 357/196/117 +f 356/196/118 355/197/118 359/198/118 +f 353/199/134 357/196/134 360/197/134 +f 361/196/123 362/197/123 363/198/123 +f 366/199/135 367/198/135 368/197/135 +f 361/199/124 364/200/124 366/201/124 +f 363/197/121 367/198/121 366/199/121 +f 362/198/122 361/199/122 365/196/122 +f 370/197/126 371/198/126 372/199/126 +f 374/199/127 375/198/127 376/197/127 +f 372/200/128 374/201/128 373/196/128 +f 371/197/129 375/198/129 374/199/129 +f 369/199/130 373/196/130 376/197/130 +f 305/194/106 306/190/106 308/192/106 +f 309/195/107 310/193/107 305/192/107 +f 310/195/108 311/193/108 306/192/108 +f 307/192/136 311/195/109 308/194/109 +f 312/195/110 309/193/110 308/192/110 +f 313/194/111 314/190/111 316/192/111 +f 317/195/112 318/193/112 313/192/112 +f 318/195/113 319/193/113 314/192/113 +f 315/192/114 319/195/114 316/194/114 +f 316/192/115 320/195/115 313/194/115 +f 324/199/116 321/196/116 323/198/116 +f 325/196/117 326/199/117 328/197/117 +f 321/199/118 324/200/118 325/196/118 +f 326/199/119 324/196/119 327/198/119 +f 322/198/120 321/199/120 328/197/120 +f 332/199/121 329/196/121 331/198/121 +f 336/197/122 333/196/122 335/198/122 +f 333/196/123 329/199/123 334/201/123 +f 332/196/124 331/197/124 334/199/124 +f 330/198/125 329/199/125 336/197/125 +f 337/196/126 338/197/126 340/199/126 +f 341/196/127 342/199/127 344/197/127 +f 337/199/128 340/200/128 341/196/128 +f 340/196/129 339/197/129 342/199/129 +f 338/198/130 337/199/130 344/197/130 +f 345/194/131 346/190/131 348/192/131 +f 349/195/132 350/193/132 345/192/132 +f 350/195/127 351/193/127 346/192/127 +f 351/195/133 352/193/133 347/192/133 +f 348/192/126 352/195/126 345/194/126 +f 356/199/120 353/196/120 355/198/120 +f 360/197/119 357/196/119 359/198/119 +f 353/199/117 356/200/117 357/196/117 +f 358/199/118 356/196/118 359/198/118 +f 354/198/134 353/199/134 360/197/134 +f 364/199/123 361/196/123 363/198/123 +f 365/196/135 366/199/135 368/197/135 +f 365/196/124 361/199/124 366/201/124 +f 364/196/121 363/197/121 366/199/121 +f 368/197/122 362/198/122 365/196/122 +f 369/196/126 370/197/126 372/199/126 +f 373/196/127 374/199/127 376/197/127 +f 369/199/128 372/200/128 373/196/128 +f 372/196/129 371/197/129 374/199/129 +f 370/198/130 369/199/130 376/197/130 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.mtl new file mode 100644 index 00000000..604f718d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.mtl @@ -0,0 +1,38 @@ +# Blender MTL File: 'astroMiner_OFF.blend' +# Material Count: 6 + +newmtl 05___Default +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.004 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.005 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.006 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.007 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl 05___Default.008 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.obj new file mode 100644 index 00000000..1360f913 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_full_off.obj @@ -0,0 +1,942 @@ +# Blender v2.76 (sub 0) OBJ File: 'astroMiner_OFF.blend' +# www.blender.org +mtllib astro_miner_full_off.mtl +o Main_Laser_Left_Guard +v -3.750000 -14.374997 -19.375002 +v -3.750000 -8.749996 -25.000002 +v -3.750000 -8.749999 -7.500001 +v -3.750000 -14.374999 -7.500002 +v -5.000000 -14.374997 -19.375002 +v -5.000000 -14.374999 -7.500002 +v -5.000000 -8.749999 -7.500001 +v -5.000000 -8.749996 -25.000002 +vt 0.398400 0.792946 +vt 0.351600 0.746096 +vt 0.500000 0.746096 +vt 0.398400 0.687496 +vt 0.500000 0.687496 +vt 0.500000 0.734396 +vt 0.500000 0.675796 +vt 0.351600 0.734396 +vt 0.398400 0.675796 +vt 0.293000 0.687496 +vt 0.500000 0.792946 +vt 0.293000 0.675796 +vn 1.000000 -0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.707100 -0.707100 +usemtl 05___Default.008 +f 1/1/1 2/2/1 3/3/1 +f 5/4/2 6/5/2 7/6/2 +f 4/7/3 6/5/3 5/4/3 +f 2/2/4 8/8/4 7/6/4 +f 1/9/5 5/4/5 8/10/5 +f 4/11/1 1/1/1 3/3/1 +f 8/8/2 5/4/2 7/6/2 +f 1/9/3 4/7/3 5/4/3 +f 3/3/4 2/2/4 7/6/4 +f 2/12/5 1/9/5 8/10/5 +o Main_Laser_Front +v 0.000000 -9.999993 -40.000000 +v 0.000000 -10.937493 -40.000000 +v 0.000000 -10.937495 -31.875002 +v 0.000000 -9.999995 -31.875002 +v -0.937500 -12.812493 -40.000004 +v -0.937500 -13.749993 -40.000004 +v -0.937500 -13.749995 -31.875002 +v -0.937500 -12.812495 -31.875002 +v 0.937500 -12.812495 -31.875002 +v 0.937500 -12.812493 -40.000004 +v 0.937500 -13.749993 -40.000004 +v 0.937500 -13.749995 -31.875002 +v 0.937500 -10.937493 -40.000000 +v 0.937500 -10.937497 -17.500002 +v 0.937500 -12.812497 -17.500002 +v -0.937500 -12.812497 -17.500002 +v -0.937500 -10.937497 -17.500002 +v -0.937500 -10.937493 -40.000000 +v -0.937500 -14.999995 -31.875002 +v -0.937500 -15.937495 -30.937502 +v -0.937500 -15.937497 -19.687502 +v -0.937500 -14.999997 -18.750002 +v 0.937500 -15.937497 -19.687502 +v 0.937500 -15.937495 -30.937502 +v 0.937500 -14.999995 -31.875002 +v 0.937500 -14.999997 -18.750002 +vt 0.808600 0.851546 +vt 0.808600 0.843746 +vt 0.746100 0.843746 +vt 0.808600 0.867196 +vt 0.636700 0.867196 +vt 0.636700 0.851546 +vt 0.636700 0.882796 +vt 0.808600 0.882796 +vt 0.824200 0.867196 +vt 0.808600 0.890646 +vt 0.746100 0.890646 +vt 0.746100 0.882796 +vt 0.746100 0.851546 +vt 0.824200 0.882796 +vt 0.949200 0.683596 +vt 0.855500 0.683596 +vt 0.847700 0.691396 +vt 0.957000 0.691396 +vt 0.949200 0.667946 +vt 0.855500 0.667946 +vt 0.847700 0.707046 +vt 0.839800 0.691396 +vt 0.957000 0.707046 +vt 0.964800 0.707046 +vt 0.839800 0.707046 +vt 0.964800 0.691396 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.707100 -0.707100 +usemtl 05___Default.007 +f 18/13/6 19/14/6 20/15/6 +f 21/16/7 22/17/7 23/18/7 +f 24/18/6 25/17/6 26/16/6 +f 23/19/8 24/17/8 13/16/8 +f 21/16/9 26/20/9 25/19/9 +f 18/21/10 13/16/10 26/20/10 +f 9/22/7 12/23/7 11/24/7 +f 13/13/7 16/25/7 15/15/7 +f 17/25/6 18/13/6 20/15/6 +f 18/13/7 21/16/7 23/18/7 +f 13/13/6 24/18/6 26/16/6 +f 18/20/8 23/19/8 13/16/8 +f 22/17/9 21/16/9 25/19/9 +f 21/26/10 18/21/10 26/20/10 +f 10/20/7 9/22/7 11/24/7 +f 14/14/7 13/13/7 15/15/7 +usemtl 05___Default.004 +f 28/27/6 29/28/6 30/29/6 +f 32/28/7 33/29/7 34/30/7 +f 28/27/8 32/31/8 31/32/8 +f 29/33/11 31/29/11 34/34/11 +f 30/29/9 34/33/9 33/35/9 +f 27/30/12 33/35/12 32/36/12 +f 27/30/6 28/27/6 30/29/6 +f 31/27/7 32/28/7 34/30/7 +f 29/28/8 28/27/8 31/32/8 +f 30/37/11 29/33/11 34/34/11 +f 27/30/9 30/29/9 33/35/9 +f 28/38/12 27/30/12 32/36/12 +o Main_Laser_Center +v 1.875000 -14.999997 -18.750002 +v 1.875000 -14.999996 -22.812502 +v 1.875000 -9.999997 -17.812502 +v 1.875000 -9.999998 -13.750002 +v -1.875000 -14.999997 -18.750002 +v -1.875000 -9.999998 -13.750002 +v -1.875000 -9.999997 -17.812502 +v -1.875000 -14.999996 -22.812502 +vt 0.789100 0.707046 +vt 0.824200 0.707046 +vt 0.781300 0.664046 +vt 0.746100 0.664046 +vt 0.886700 0.632796 +vt 0.886700 0.664046 +vt 0.851600 0.664046 +vt 0.781300 0.632796 +vt 0.746100 0.632796 +vt 0.816400 0.664046 +vt 0.816400 0.632796 +vt 0.851600 0.632796 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +vn 0.000000 -1.000000 -0.000000 +usemtl 05___Default.006 +f 35/39/13 36/40/13 37/41/13 +f 39/39/14 40/42/14 41/41/14 +f 38/43/15 40/44/15 39/45/15 +f 37/46/16 41/47/16 40/42/16 +f 36/48/17 42/49/17 41/46/17 +f 35/49/18 39/48/18 42/45/18 +f 38/42/13 35/39/13 37/41/13 +f 42/40/14 39/39/14 41/41/14 +f 35/50/15 38/43/15 39/45/15 +f 38/41/16 37/46/16 40/42/16 +f 37/41/17 36/48/17 41/46/17 +f 36/50/18 35/49/18 42/45/18 +o Lasers_Main_Laser_Base +v -18.125000 -2.500000 -1.571500 +v -18.125000 -2.499998 -10.000000 +v -14.687500 -2.499998 -10.000000 +v -14.687500 -2.500000 -1.571500 +v -18.125000 0.625000 -2.748000 +v -14.687500 0.625000 -2.748000 +v -14.687500 0.625002 -10.000000 +v -18.125000 0.625002 -10.000000 +v -18.125000 0.000003 -20.000000 +v -16.250000 -1.874997 -20.000000 +v -16.250000 -1.874998 -10.000000 +v -18.125000 0.000002 -10.000000 +v -16.250000 0.000002 -10.000000 +v -16.250000 0.000003 -20.000000 +v -18.125000 -1.874997 -20.000000 +v -18.125000 -1.874998 -10.000000 +v -17.187500 -0.937498 -10.000000 +v -17.187500 -0.937497 -20.000000 +v -13.437500 -0.937497 -20.000000 +v -13.437500 -0.937498 -10.000000 +v -16.250000 -1.874997 -20.000000 +v -18.125000 0.000003 -20.000000 +v -18.125000 0.000002 -10.000000 +v -16.250000 -1.874998 -10.000000 +v -16.250000 0.000003 -20.000000 +v -16.250000 0.000002 -10.000000 +v -18.125000 -1.874998 -10.000000 +v -18.125000 -1.874997 -20.000000 +v -17.187500 -0.937497 -20.000000 +v -17.187500 -0.937498 -10.000000 +v -13.437500 -0.937498 -10.000000 +v -13.437500 -0.937497 -20.000000 +v 1.875000 -14.062497 -17.812502 +v 1.875000 -9.062498 -12.812502 +v 1.875000 -9.062499 -7.659701 +v 1.875000 -14.062499 -7.659702 +v -1.875000 -14.062497 -17.812502 +v -1.875000 -14.062499 -7.659702 +v -1.875000 -9.062499 -7.659701 +v -1.875000 -9.062498 -12.812502 +v 18.125000 0.000002 -10.000000 +v 16.250000 -1.874998 -10.000000 +v 16.250000 -1.874997 -20.000000 +v 18.125000 0.000003 -20.000000 +v 18.125000 -1.874998 -10.000000 +v 18.125000 -1.874997 -20.000000 +v 16.250000 0.000003 -20.000000 +v 16.250000 0.000002 -10.000000 +v 13.437500 -0.937498 -10.000000 +v 13.437500 -0.937497 -20.000000 +v 17.187500 -0.937497 -20.000000 +v 17.187500 -0.937498 -10.000000 +v 14.687500 -2.500000 -1.571500 +v 14.687500 -2.499998 -10.000000 +v 18.125000 -2.499998 -10.000000 +v 18.125000 -2.500000 -1.571500 +v 18.125000 0.625002 -10.000000 +v 14.687500 0.625002 -10.000000 +v 14.687500 0.625000 -2.748000 +v 18.125000 0.625000 -2.748000 +v 16.250000 -1.874998 -10.000000 +v 18.125000 0.000002 -10.000000 +v 18.125000 0.000003 -20.000000 +v 16.250000 -1.874997 -20.000000 +v 18.125000 -1.874997 -20.000000 +v 18.125000 -1.874998 -10.000000 +v 16.250000 0.000002 -10.000000 +v 16.250000 0.000003 -20.000000 +v 13.437500 -0.937497 -20.000000 +v 13.437500 -0.937498 -10.000000 +v 17.187500 -0.937498 -10.000000 +v 17.187500 -0.937497 -20.000000 +vt 0.343800 0.921846 +vt 0.343800 0.898446 +vt 0.281300 0.898446 +vt 0.290000 0.968746 +vt 0.343800 0.968746 +vt 0.343800 0.945296 +vt 0.343800 0.922046 +vt 0.343800 0.945096 +vt 0.367200 0.945096 +vt 0.281300 0.922046 +vt 0.290000 0.945096 +vt 0.238300 0.957046 +vt 0.238300 0.851546 +vt 0.265600 0.851546 +vt 0.265600 0.957046 +vt 0.191400 0.957046 +vt 0.191400 0.851546 +vt 0.933600 0.632796 +vt 0.898400 0.632796 +vt 0.898400 0.597646 +vt 0.898400 0.566396 +vt 0.968800 0.597646 +vt 0.933600 0.664046 +vt 0.898400 0.664046 +vt 0.968800 0.632796 +vt 0.968800 0.664046 +vt 0.281300 0.921846 +vt 0.290000 0.945296 +vt 0.367200 0.922046 +vt 0.968800 0.566396 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 -0.000000 0.000000 +vn -0.707100 -0.707100 -0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.707100 0.707100 0.000000 +vn 0.707100 -0.707100 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +usemtl 05___Default.005 +f 44/51/19 45/52/19 46/53/19 +f 48/54/20 49/55/20 50/56/20 +f 44/57/21 50/58/21 49/59/21 +f 44/57/22 43/60/22 47/61/22 +f 52/62/23 53/63/23 54/64/23 +f 56/62/24 57/65/24 58/64/24 +f 60/62/19 61/66/19 62/67/19 +f 64/65/25 65/64/25 66/63/25 +f 68/63/26 69/64/26 70/65/26 +f 72/63/20 73/67/20 74/66/20 +f 76/68/27 77/69/27 78/70/27 +f 80/70/22 81/69/22 82/68/22 +f 78/71/19 80/70/19 79/72/19 +f 76/68/20 82/73/20 81/74/20 +f 75/75/28 79/76/28 82/73/28 +f 84/63/26 85/62/26 86/65/26 +f 88/65/25 89/62/25 90/63/25 +f 92/66/19 93/62/19 94/63/19 +f 96/52/19 97/51/19 98/77/19 +f 100/55/20 101/54/20 102/78/20 +f 99/58/21 97/57/21 96/79/21 +f 102/61/27 98/60/27 97/57/27 +f 104/64/24 105/65/24 106/62/24 +f 108/64/23 109/63/23 110/62/23 +f 112/67/20 113/63/20 114/62/20 +f 43/77/19 44/51/19 46/53/19 +f 47/78/20 48/54/20 50/56/20 +f 45/79/21 44/57/21 49/59/21 +f 50/58/22 44/57/22 47/61/22 +f 51/65/23 52/62/23 54/64/23 +f 55/63/24 56/62/24 58/64/24 +f 59/63/19 60/62/19 62/67/19 +f 63/62/25 64/65/25 66/63/25 +f 67/62/26 68/63/26 70/65/26 +f 71/62/20 72/63/20 74/66/20 +f 75/72/27 76/68/27 78/70/27 +f 79/72/22 80/70/22 82/68/22 +f 75/80/19 78/71/19 79/72/19 +f 77/69/20 76/68/20 81/74/20 +f 76/68/28 75/75/28 82/73/28 +f 83/64/26 84/63/26 86/65/26 +f 87/64/25 88/65/25 90/63/25 +f 91/67/19 92/66/19 94/63/19 +f 95/53/19 96/52/19 98/77/19 +f 99/56/20 100/55/20 102/78/20 +f 100/59/21 99/58/21 96/79/21 +f 99/58/27 102/61/27 97/57/27 +f 103/63/24 104/64/24 106/62/24 +f 107/65/23 108/64/23 110/62/23 +f 111/66/20 112/67/20 114/62/20 +o Hull +v 13.125000 4.375001 -9.659699 +v 11.250000 15.000001 -7.659698 +v 11.250000 14.999999 4.340302 +v 13.125000 4.375000 2.340301 +v -13.125000 4.375001 -9.659699 +v -13.125000 4.375000 2.340301 +v -11.250000 14.999999 4.340302 +v -11.250000 15.000001 -7.659698 +v -10.000000 -15.000001 3.340298 +v -5.000000 -14.999999 -7.659702 +v 5.000000 -14.999999 -7.659702 +v 10.000000 -15.000001 3.340298 +v 11.250000 -6.249998 -11.159701 +v 16.250000 -6.250000 -0.159701 +v -11.250000 -6.249998 -11.159701 +v -16.250000 -6.250000 -0.159701 +v -14.166700 -9.166702 14.340298 +v -16.250000 -6.250002 11.340299 +v -9.000000 -15.000001 3.340298 +v -9.000000 -9.166702 14.340298 +v -9.000000 -6.250002 11.340299 +v -9.000000 -6.250000 -0.159701 +v 16.250000 -6.250002 11.340299 +v 14.166700 -9.166702 14.340298 +v 9.000000 -15.000001 3.340298 +v 9.000000 -9.166702 14.340298 +v 9.000000 -6.250002 11.340299 +v 9.000000 -6.250000 -0.159701 +v -18.125000 -6.250001 8.340299 +v -18.125000 -6.250000 -0.159701 +v -6.875000 -6.250000 -2.909701 +v -9.000000 -6.250001 6.340299 +v 9.000000 -6.250001 6.340299 +v 6.875000 -6.250000 -2.909701 +v 18.125000 -6.250000 -0.159701 +v 18.125000 -6.250001 8.340299 +v -9.375000 -6.249996 -22.659702 +v -6.875000 -6.249996 -22.659702 +v 6.875000 -6.249996 -22.659702 +v 9.375000 -6.249996 -22.659702 +v -18.125000 4.375000 4.340301 +v -9.000000 4.375000 2.340301 +v -6.875000 4.375001 -6.909699 +v -18.125000 4.375000 -4.159699 +v 9.000000 4.375000 2.340301 +v 18.125000 4.375000 4.340301 +v 18.125000 4.375000 -4.159699 +v 6.875000 4.375001 -6.909699 +v -6.875000 4.375004 -26.659700 +v -9.375000 4.375004 -26.659700 +v 9.375000 4.375004 -26.659700 +v 6.875000 4.375004 -26.659700 +v 9.000000 -15.000001 3.340298 +v 9.000000 -4.500004 23.340300 +v -9.000000 -4.500004 23.340300 +v -9.000000 -15.000001 3.340298 +v 7.000000 4.124996 24.840300 +v -7.000000 4.124996 24.840300 +v -9.000000 4.500000 2.340301 +v -9.000000 -6.000000 -3.659701 +v -7.000000 12.999999 3.840302 +v 7.000000 12.999999 3.840302 +v 9.000000 4.500000 2.340301 +v 9.000000 -6.000000 -3.659701 +v 6.875000 -7.999996 -26.659702 +v 6.875000 5.166705 -31.659700 +v 6.875000 13.000001 -7.659698 +v 6.875000 -7.999999 -7.659701 +v -6.875000 -7.999996 -26.659702 +v -6.875000 -7.999999 -7.659701 +v -6.875000 13.000001 -7.659698 +v -6.875000 5.166705 -31.659700 +vt 0.082000 0.824196 +vt 0.175800 0.824196 +vt 0.160200 0.910146 +vt 0.175800 0.648446 +vt 0.257800 0.632796 +vt 0.082000 0.648446 +vt 0.000000 0.839846 +vt 0.000000 0.632796 +vt 0.448100 0.589846 +vt 0.368100 0.589846 +vt 0.327600 0.501946 +vt 0.324200 0.499996 +vt 0.351600 0.570296 +vt 0.265600 0.570296 +vt 0.498200 0.659896 +vt 0.318100 0.659896 +vt 0.238300 0.499996 +vt 0.152300 0.546896 +vt 0.175800 0.570296 +vt 0.152300 0.624996 +vt 0.152300 0.585946 +vt 0.066400 0.617196 +vt 0.175800 0.624996 +vt 0.152300 0.586046 +vt 0.265600 0.624996 +vt 0.066500 0.911996 +vt 0.088100 0.999996 +vt 0.015700 0.983396 +vt 0.242600 0.980396 +vt 0.242600 0.999946 +vt 0.545900 0.983396 +vt 0.474000 0.999946 +vt 0.495400 0.912396 +vt 0.561500 0.912396 +vt 0.320300 0.999996 +vt 0.320300 0.980546 +vt 0.273400 0.816396 +vt 0.273400 0.894546 +vt 0.343800 0.894546 +vt 0.343800 0.816396 +vt 0.410200 0.816396 +vt 0.441400 0.894546 +vt 0.375000 0.894546 +vt 0.585900 0.816396 +vt 0.617200 0.894546 +vt 0.242200 0.999996 +vt 0.320300 0.980446 +vt 0.242200 0.980446 +vt 0.652300 0.640646 +vt 0.652300 0.499996 +vt 0.496100 0.499996 +vt 0.722700 0.624996 +vt 0.722700 0.515646 +vt 0.570300 0.796896 +vt 0.722700 0.804696 +vt 0.722700 0.628896 +vt 0.789100 0.792946 +vt 0.886700 0.624996 +vt 0.886700 0.515646 +vt 0.640600 0.851546 +vt 0.851600 0.898446 +vt 0.812800 0.795646 +vt 1.000000 0.734546 +vt 1.000000 0.898446 +vt 1.000000 0.999996 +vt 0.851600 0.999996 +vt 0.750000 0.898446 +vt 0.750000 0.999996 +vt 0.562500 0.999996 +vt 0.066400 0.910146 +vt 0.257800 0.839846 +vt 0.488700 0.501946 +vt 0.066400 0.624996 +vt 0.000000 0.911996 +vt 0.496100 0.640646 +vt 0.562500 0.898446 +vn 0.984800 0.173800 0.000000 +vn -0.984800 0.173800 0.000000 +vn 0.000000 -0.185000 0.982700 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.185000 -0.982700 +vn 0.000000 -1.000000 -0.000000 +vn 0.705400 -0.632100 -0.320600 +vn 0.000000 -0.371400 -0.928500 +vn -0.705400 -0.632100 -0.320600 +vn -0.813700 -0.581200 -0.000000 +vn 0.000000 -0.883500 0.468500 +vn 0.000000 0.717000 0.697100 +vn 0.813700 -0.581200 -0.000000 +vn 0.200900 0.345100 0.916800 +vn -0.200900 0.345100 0.916800 +vn 0.988300 -0.053800 -0.142800 +vn 0.971000 -0.084200 -0.223700 +vn 1.000000 0.000000 0.000000 +vn 0.923400 -0.135200 -0.359100 +vn 0.000000 -0.352300 -0.935900 +vn -0.923400 -0.135200 -0.359100 +vn -0.988300 -0.053800 -0.142800 +vn -0.971000 -0.084200 -0.223700 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.885400 0.464800 +vn 0.000000 -0.171300 0.985200 +vn -0.990400 0.126900 0.054200 +vn -0.992700 0.110900 0.047400 +vn -0.973800 0.209500 0.088900 +vn -0.972700 0.213700 0.090600 +vn 0.000000 0.921100 0.389300 +vn 0.973600 0.209900 0.090000 +vn 0.990500 0.126400 0.054600 +vn 0.992700 0.110800 0.046800 +vn 0.000000 0.950600 -0.310300 +vn 0.000000 -0.355000 -0.934900 +vn 0.972600 0.214500 0.090000 +usemtl 05___Default +f 116/81/29 117/82/29 118/83/29 +f 120/83/30 121/82/30 122/81/30 +f 117/82/31 121/84/31 120/85/31 +f 116/81/32 122/86/32 121/84/32 +f 115/87/33 119/88/33 122/86/33 +f 124/89/34 125/90/34 126/91/34 +f 125/92/35 127/93/35 128/94/35 +f 124/89/36 129/95/36 127/96/36 +f 124/92/37 123/97/37 130/94/37 +f 123/97/38 131/98/38 132/99/38 +f 134/100/39 131/101/39 123/102/39 +f 135/103/40 132/99/40 131/104/40 +f 136/105/32 130/94/32 132/99/32 +f 126/97/41 128/94/41 137/99/41 +f 126/102/39 138/101/39 140/100/39 +f 138/101/40 137/99/40 141/103/40 +f 137/99/32 128/94/32 142/105/32 +f 144/106/34 145/107/34 146/108/34 +f 147/108/34 148/107/34 149/106/34 +f 151/109/34 152/110/34 145/107/34 +f 148/107/34 153/110/34 154/109/34 +f 156/111/32 157/112/32 158/113/32 +f 159/111/32 160/114/32 161/113/32 +f 157/112/32 163/115/32 164/116/32 +f 162/112/32 161/113/32 165/116/32 +f 146/117/42 156/118/42 155/119/42 +f 147/117/43 150/120/43 160/119/43 +f 149/121/44 161/122/45 160/123/46 +f 154/124/47 165/125/47 161/122/45 +f 153/126/48 166/115/48 165/127/48 +f 151/128/48 164/127/48 163/115/48 +f 151/124/49 144/121/50 158/122/51 +f 144/121/50 143/120/52 155/123/52 +f 168/129/53 169/130/53 170/131/53 +f 171/132/54 172/133/54 169/130/54 +f 170/134/52 169/129/55 173/135/56 +f 172/136/57 175/137/58 173/135/56 +f 171/132/59 176/138/59 175/139/59 +f 171/136/60 168/129/61 177/135/62 +f 167/134/46 178/140/46 177/135/62 +f 179/141/46 180/142/46 181/143/46 +f 183/141/52 184/144/52 185/143/52 +f 182/144/34 184/145/34 183/146/34 +f 180/147/63 186/148/63 185/149/63 +f 179/141/64 183/146/64 186/148/64 +f 115/150/29 116/81/29 118/83/29 +f 119/150/30 120/83/30 122/81/30 +f 118/151/31 117/82/31 120/85/31 +f 117/82/32 116/81/32 121/84/32 +f 116/81/33 115/87/33 122/86/33 +f 123/152/34 124/89/34 126/91/34 +f 126/97/35 125/92/35 128/94/35 +f 125/90/36 124/89/36 127/96/36 +f 129/93/37 124/92/37 130/94/37 +f 130/94/38 123/97/38 132/99/38 +f 133/153/39 134/100/39 123/102/39 +f 134/100/40 135/103/40 131/104/40 +f 135/103/32 136/105/32 132/99/32 +f 138/98/41 126/97/41 137/99/41 +f 139/153/39 126/102/39 140/100/39 +f 140/100/40 138/101/40 141/103/40 +f 141/103/32 137/99/32 142/105/32 +f 143/154/34 144/106/34 146/108/34 +f 150/154/34 147/108/34 149/106/34 +f 144/106/34 151/109/34 145/107/34 +f 149/106/34 148/107/34 154/109/34 +f 155/114/32 156/111/32 158/113/32 +f 162/112/32 159/111/32 161/113/32 +f 158/113/32 157/112/32 164/116/32 +f 166/115/32 162/112/32 165/116/32 +f 143/120/42 146/117/42 155/119/42 +f 159/118/43 147/117/43 160/119/43 +f 150/120/46 149/121/44 160/123/46 +f 149/121/44 154/124/47 161/122/45 +f 154/128/48 153/126/48 165/127/48 +f 152/126/48 151/128/48 163/115/48 +f 164/125/49 151/124/49 158/122/51 +f 158/122/51 144/121/50 155/123/52 +f 167/155/53 168/129/53 170/131/53 +f 168/129/54 171/132/54 169/130/54 +f 174/140/52 170/134/52 173/135/56 +f 169/129/55 172/136/57 173/135/56 +f 172/133/59 171/132/59 175/139/59 +f 176/137/65 171/136/60 177/135/62 +f 168/129/61 167/134/46 177/135/62 +f 182/144/46 179/141/46 181/143/46 +f 186/142/52 183/141/52 185/143/52 +f 179/141/34 182/144/34 183/146/34 +f 181/156/63 180/147/63 185/149/63 +f 180/147/64 179/141/64 186/148/64 +o HoverPad +v 11.125000 3.452799 8.250001 +v 11.125000 3.452799 6.250000 +v 11.125000 -0.547201 6.250000 +v 11.125000 -0.547201 8.250000 +v 15.125000 3.452799 8.250001 +v 15.125000 -0.547201 8.250000 +v 15.125000 -0.547201 6.250000 +v 15.125000 3.452799 6.250000 +v -10.324200 -15.089800 -1.901103 +v -13.685600 -10.361699 -3.432902 +v -11.197400 -10.361698 -8.892702 +v -7.836000 -15.089799 -7.360802 +v -8.890100 -13.858500 -1.247502 +v -12.251500 -9.130400 -2.779402 +v -9.763300 -9.130399 -8.239102 +v -6.401900 -13.858499 -6.707303 +v -8.750000 -2.916700 3.125000 +v -15.000000 3.333300 3.125000 +v -15.000000 3.333299 6.250000 +v -11.250000 -0.416701 6.250000 +v -11.250000 3.333300 3.125000 +v -17.500000 -2.916700 3.125000 +v -15.000000 -0.416701 6.250000 +v -11.250000 3.333299 6.250000 +v -11.242400 4.375002 -14.999999 +v -6.867400 4.375002 -14.999999 +v -6.867400 7.187502 -13.124999 +v -9.367400 7.187502 -13.124999 +v -9.367400 7.187501 -9.130299 +v -11.242400 4.375001 -9.659699 +v -6.867400 7.187501 -9.130299 +v -6.867400 -6.249998 -15.312501 +v -10.625000 -6.249998 -15.312501 +v -8.750000 -9.062498 -13.437502 +v -6.867400 -9.062498 -13.437502 +v -10.625000 -6.249998 -11.159701 +v -8.750000 -9.062498 -10.034702 +v -6.867400 -9.062498 -10.034702 +v -6.867400 -6.249998 -11.159701 +v 15.000000 3.333300 3.125000 +v 8.750000 -2.916700 3.125000 +v 11.250000 -0.416701 6.250000 +v 15.000000 3.333299 6.250000 +v 17.500000 -2.916700 3.125000 +v 11.250000 3.333300 3.125000 +v 11.250000 3.333299 6.250000 +v 15.000000 -0.416701 6.250000 +v 6.867400 4.375002 -14.999999 +v 11.242400 4.375002 -14.999999 +v 9.367400 7.187502 -13.124999 +v 6.867400 7.187502 -13.124999 +v 11.242400 4.375001 -9.659699 +v 9.367400 7.187501 -9.130299 +v 6.867400 7.187501 -9.130299 +v 10.625000 -6.249998 -15.312501 +v 6.867400 -6.249998 -15.312501 +v 6.867400 -9.062498 -13.437502 +v 8.750000 -9.062498 -13.437502 +v 8.750000 -9.062498 -10.034702 +v 10.625000 -6.249998 -11.159701 +v 6.867400 -9.062498 -10.034702 +v 6.867400 -6.249998 -11.159701 +v 9.585800 -7.999997 -17.039202 +v 8.585800 -6.585798 -16.039202 +v 11.414200 -6.585798 -13.210801 +v 12.414200 -7.999998 -14.210801 +v 7.585800 -10.828397 -15.039202 +v 10.414200 -10.828398 -12.210802 +v 9.414200 -9.414198 -11.210802 +v 6.585800 -9.414198 -14.039202 +v -7.585800 -10.828397 -15.039202 +v -6.585800 -9.414198 -14.039202 +v -9.414200 -9.414198 -11.210802 +v -10.414200 -10.828398 -12.210802 +v -9.585800 -7.999997 -17.039202 +v -12.414200 -7.999998 -14.210801 +v -11.414200 -6.585798 -13.210801 +v -8.585800 -6.585798 -16.039202 +v -8.585800 8.828403 -15.039198 +v -7.585800 7.414202 -14.039199 +v -9.585800 4.585803 -16.039200 +v -10.585800 6.000003 -17.039198 +v -11.414200 8.828402 -12.210798 +v -13.414200 6.000002 -14.210799 +v -12.414200 4.585803 -13.210799 +v -10.414200 7.414202 -11.210799 +v 11.414200 8.828402 -12.210798 +v 10.414200 7.414202 -11.210799 +v 12.414200 4.585803 -13.210799 +v 13.414200 6.000002 -14.210799 +v 8.585800 8.828403 -15.039198 +v 10.585800 6.000003 -17.039198 +v 9.585800 4.585803 -16.039200 +v 7.585800 7.414202 -14.039199 +v -3.000000 -11.165402 14.898698 +v 3.000000 -11.165402 14.898698 +v 3.000000 -8.376102 20.210897 +v -3.000000 -8.376102 20.210897 +v -3.000000 -9.394702 13.968898 +v 3.000000 -9.394702 13.968898 +v 3.000000 -6.605303 19.281097 +v -3.000000 -6.605303 19.281097 +v 13.679800 -10.346799 -3.430302 +v 10.318500 -15.074900 -1.898502 +v 7.830300 -15.074899 -7.358202 +v 11.191700 -10.346798 -8.890101 +v 12.245700 -9.115500 -2.776801 +v 8.884400 -13.843500 -1.244902 +v 6.396200 -13.843499 -6.704702 +v 9.757600 -9.115499 -8.236502 +v -15.125000 3.452799 8.250001 +v -15.125000 3.452799 6.250000 +v -15.125000 -0.547201 6.250000 +v -15.125000 -0.547201 8.250000 +v -11.125000 3.452799 8.250001 +v -11.125000 -0.547201 8.250000 +v -11.125000 -0.547201 6.250000 +v -11.125000 3.452799 6.250000 +vt 0.308600 0.808596 +vt 0.308600 0.777346 +vt 0.324200 0.777346 +vt 0.324200 0.808596 +vt 0.355500 0.808596 +vt 0.277300 0.777346 +vt 0.277300 0.808596 +vt 0.531300 0.714846 +vt 0.578100 0.714846 +vt 0.578100 0.761696 +vt 0.515600 0.714846 +vt 0.531300 0.761696 +vt 0.515600 0.761696 +vt 0.320300 0.687496 +vt 0.320300 0.714846 +vt 0.351600 0.714846 +vt 0.371100 0.687496 +vt 0.269500 0.687496 +vt 0.289100 0.687496 +vt 0.289100 0.707046 +vt 0.316400 0.726546 +vt 0.269500 0.726546 +vt 0.320300 0.707046 +vt 0.269500 0.691396 +vt 0.304700 0.726546 +vt 0.304700 0.707046 +vt 0.289100 0.691396 +vt 0.308600 0.691396 +vt 0.320300 0.722646 +vt 0.281300 0.722646 +vt 0.304700 0.691396 +vt 0.355500 0.777346 +vt 0.261700 0.691396 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn -0.717100 -0.615700 -0.326800 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.560200 -0.788000 0.255300 +vn 0.707100 0.707100 0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 -0.554700 0.832100 +vn 0.832100 -0.554700 -0.000000 +vn 0.000000 0.554700 0.832100 +vn -0.832100 -0.554700 0.000000 +vn -0.832100 0.554700 0.000000 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 -0.000000 0.707100 +vn -0.500000 0.707100 0.500000 +vn -0.707100 0.000000 -0.707100 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 -0.000000 0.707100 +vn 0.500000 0.707100 0.500000 +vn 0.707100 0.000000 -0.707100 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 0.000000 0.464900 0.885400 +vn 0.717100 -0.615700 -0.326800 +vn 0.414700 -0.000000 0.910000 +vn -0.560200 -0.788000 0.255300 +vn -0.560300 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +vn 0.560200 0.788000 -0.255300 +vn 0.717100 -0.615600 -0.326800 +usemtl 05___Default +f 188/157/66 189/158/66 190/159/66 +f 192/159/67 193/158/67 194/157/67 +f 190/159/68 192/160/68 191/161/68 +f 189/158/69 193/157/69 192/160/69 +f 188/162/70 194/163/70 193/157/70 +f 187/159/71 191/160/71 194/157/71 +f 195/164/72 196/165/72 197/166/72 +f 200/167/73 196/164/73 195/168/73 +f 200/169/74 201/167/74 197/164/74 +f 201/169/75 202/167/75 198/164/75 +f 199/167/76 195/164/76 198/168/76 +f 204/170/77 205/171/77 206/172/77 +f 207/170/78 208/173/78 209/172/78 +f 212/174/79 213/175/79 214/176/79 +f 216/177/80 211/178/80 214/176/80 +f 215/179/69 214/176/69 213/175/69 +f 218/180/81 219/178/81 220/176/81 +f 222/181/82 219/178/82 220/176/82 +f 223/182/69 220/176/69 221/183/69 +f 225/184/67 224/185/67 221/186/67 +f 226/170/78 227/173/78 228/172/78 +f 231/170/77 232/171/77 233/172/77 +f 234/174/79 235/178/79 236/176/79 +f 238/177/82 239/179/82 236/176/82 +f 240/170/69 237/175/69 236/176/69 +f 242/180/81 243/183/81 244/176/81 +f 246/181/83 241/178/83 244/176/83 +f 247/187/69 243/183/69 244/176/69 +f 248/187/66 242/180/66 243/183/66 +f 250/157/84 251/158/84 252/159/84 +f 254/159/85 255/158/85 256/157/85 +f 252/159/86 254/160/86 253/161/86 +f 251/158/87 255/157/87 254/160/87 +f 250/162/88 256/163/88 255/157/88 +f 250/158/89 249/159/89 253/160/89 +f 257/160/90 258/157/90 259/158/90 +f 262/159/91 263/158/91 264/157/91 +f 260/159/92 262/160/92 261/161/92 +f 260/159/93 259/158/93 263/157/93 +f 259/158/94 258/162/94 264/163/94 +f 257/159/95 261/160/95 264/157/95 +f 265/160/95 266/157/95 267/158/95 +f 269/160/93 270/159/93 271/158/93 +f 268/159/91 270/160/91 269/161/91 +f 268/159/92 267/158/92 271/157/92 +f 266/162/90 272/163/90 271/157/90 +f 265/159/94 269/160/94 272/157/94 +f 273/160/87 274/157/87 275/158/87 +f 277/160/89 278/159/89 279/158/89 +f 273/188/84 276/159/84 278/160/84 +f 275/158/86 279/157/86 278/160/86 +f 274/162/85 280/163/85 279/157/85 +f 274/158/88 273/159/88 277/160/88 +f 282/165/96 283/166/96 284/168/96 +f 286/167/97 282/164/97 281/168/97 +f 287/167/67 283/164/67 282/168/67 +f 288/167/98 284/164/98 283/168/98 +f 288/169/66 285/167/66 281/164/66 +f 290/165/99 291/166/99 292/168/99 +f 294/167/100 290/164/100 289/168/100 +f 294/169/101 295/167/102 291/164/102 +f 295/169/103 296/167/103 292/164/103 +f 296/169/104 293/167/104 289/164/104 +f 298/157/66 299/158/66 300/159/66 +f 302/159/67 303/158/67 304/157/67 +f 300/159/68 302/160/68 301/161/68 +f 299/158/69 303/157/69 302/160/69 +f 298/162/70 304/163/70 303/157/70 +f 297/159/71 301/160/71 304/157/71 +f 187/160/66 188/157/66 190/159/66 +f 191/160/67 192/159/67 194/157/67 +f 187/188/68 190/159/68 191/161/68 +f 190/159/69 189/158/69 192/160/69 +f 189/158/70 188/162/70 193/157/70 +f 188/158/71 187/159/71 194/157/71 +f 198/168/72 195/164/72 197/166/72 +f 199/169/73 200/167/73 195/168/73 +f 196/168/74 200/169/74 197/164/74 +f 197/168/75 201/169/75 198/164/75 +f 202/169/76 199/167/76 198/168/76 +f 203/173/77 204/170/77 206/172/77 +f 210/171/78 207/170/78 209/172/78 +f 211/178/79 212/174/79 214/176/79 +f 215/179/80 216/177/80 214/176/80 +f 217/170/69 215/179/69 213/175/69 +f 221/183/81 218/180/81 220/176/81 +f 223/182/82 222/181/82 220/176/82 +f 224/187/69 223/182/69 221/183/69 +f 218/189/67 225/184/67 221/186/67 +f 229/171/78 226/170/78 228/172/78 +f 230/173/77 231/170/77 233/172/77 +f 237/175/79 234/174/79 236/176/79 +f 235/178/82 238/177/82 236/176/82 +f 239/179/69 240/170/69 236/176/69 +f 241/178/81 242/180/81 244/176/81 +f 245/182/83 246/181/83 244/176/83 +f 245/182/69 247/187/69 244/176/69 +f 247/187/66 248/187/66 243/183/66 +f 249/160/84 250/157/84 252/159/84 +f 253/160/85 254/159/85 256/157/85 +f 249/188/86 252/159/86 253/161/86 +f 252/159/87 251/158/87 254/160/87 +f 251/158/88 250/162/88 255/157/88 +f 256/157/89 250/158/89 253/160/89 +f 260/159/90 257/160/90 259/158/90 +f 261/160/91 262/159/91 264/157/91 +f 257/188/92 260/159/92 261/161/92 +f 262/160/93 260/159/93 263/157/93 +f 263/157/94 259/158/94 264/163/94 +f 258/158/95 257/159/95 264/157/95 +f 268/159/95 265/160/95 267/158/95 +f 272/157/93 269/160/93 271/158/93 +f 265/188/91 268/159/91 269/161/91 +f 270/160/92 268/159/92 271/157/92 +f 267/158/90 266/162/90 271/157/90 +f 266/158/94 265/159/94 272/157/94 +f 276/159/87 273/160/87 275/158/87 +f 280/157/89 277/160/89 279/158/89 +f 277/161/84 273/188/84 278/160/84 +f 276/159/86 275/158/86 278/160/86 +f 275/158/85 274/162/85 279/157/85 +f 280/157/88 274/158/88 277/160/88 +f 281/164/96 282/165/96 284/168/96 +f 285/169/97 286/167/97 281/168/97 +f 286/169/67 287/167/67 282/168/67 +f 287/169/98 288/167/98 283/168/98 +f 284/168/66 288/169/66 281/164/66 +f 289/164/105 290/165/99 292/168/99 +f 293/169/100 294/167/100 289/168/100 +f 290/168/101 294/169/101 291/164/102 +f 291/168/103 295/169/103 292/164/103 +f 292/168/104 296/169/104 289/164/104 +f 297/160/66 298/157/66 300/159/66 +f 301/160/67 302/159/67 304/157/67 +f 297/188/68 300/159/68 301/161/68 +f 300/159/69 299/158/69 302/160/69 +f 299/158/70 298/162/70 303/157/70 +f 298/158/71 297/159/71 304/157/71 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.mtl new file mode 100644 index 00000000..a4b68b03 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.mtl @@ -0,0 +1,14 @@ +# Blender MTL File: 'None' +# Material Count: 2 + +newmtl 05___Default +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off + +newmtl Material__2 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/astro_miner_off diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.obj new file mode 100644 index 00000000..0580c4c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_inv.obj @@ -0,0 +1,933 @@ +mtllib astro_miner_inv.mtl +o Hull_Center +v -0.455148 -0.649704 -0.902352 +v -0.395148 -0.564852 -0.842352 +v -0.564852 -0.564852 -0.672648 +v -0.624852 -0.649704 -0.732648 +v -0.575148 -0.480000 -1.022352 +v -0.744852 -0.480000 -0.852648 +v -0.684852 -0.395148 -0.792648 +v -0.515148 -0.395148 -0.962352 +v -0.515148 0.529704 -0.902352 +v -0.455148 0.444852 -0.842352 +v -0.575148 0.275148 -0.962352 +v -0.635148 0.360000 -1.022352 +v -0.684852 0.529704 -0.732648 +v -0.804852 0.360000 -0.852648 +v -0.744852 0.275148 -0.792648 +v -0.624852 0.444852 -0.672648 +v 0.575148 -0.480000 -1.022352 +v 0.515148 -0.395148 -0.962352 +v 0.684852 -0.395148 -0.792648 +v 0.744852 -0.480000 -0.852648 +v 0.455148 -0.649704 -0.902352 +v 0.624852 -0.649704 -0.732648 +v 0.564852 -0.564852 -0.672648 +v 0.395148 -0.564852 -0.842352 +v 0.684852 0.529704 -0.732648 +v 0.624852 0.444852 -0.672648 +v 0.744852 0.275148 -0.792648 +v 0.804852 0.360000 -0.852648 +v 0.515148 0.529704 -0.902352 +v 0.635148 0.360000 -1.022352 +v 0.575148 0.275148 -0.962352 +v 0.455148 0.444852 -0.842352 +v -1.087500 0.000000 -1.200000 +v -0.975000 -0.112500 -1.200000 +v -0.975000 -0.112500 -0.600000 +v -1.087500 0.000000 -0.600000 +v -0.975000 0.000000 -0.600000 +v -0.975000 0.000000 -1.200000 +v -1.087500 -0.112500 -1.200000 +v -1.087500 -0.112500 -0.600000 +v -1.031250 -0.056250 -0.600000 +v -1.031250 -0.056250 -1.200000 +v -0.806250 -0.056250 -1.200000 +v -0.806250 -0.056250 -0.600000 +v 0.881250 -0.150000 -0.094290 +v 0.881250 -0.150000 -0.600000 +v 1.087500 -0.150000 -0.600000 +v 1.087500 -0.150000 -0.094290 +v 1.087500 0.037500 -0.600000 +v 0.881250 0.037500 -0.600000 +v 0.881250 0.037500 -0.164880 +v 1.087500 0.037500 -0.164880 +v 0.412500 -0.480000 -1.599582 +v 0.412500 0.310002 -1.899582 +v 0.412500 0.780000 -0.459582 +v 0.412500 -0.480000 -0.459582 +v -0.412500 -0.480000 -1.599582 +v -0.412500 -0.480000 -0.459582 +v -0.412500 0.780000 -0.459582 +v -0.412500 0.310002 -1.899582 +v 0.706068 0.572130 -0.711432 +v 0.631068 0.466068 -0.636432 +v 0.781068 0.253932 -0.786432 +v 0.856068 0.360000 -0.861432 +v 0.493932 0.572130 -0.923568 +v 0.643932 0.360000 -1.073568 +v 0.568932 0.253932 -0.998568 +v 0.418932 0.466068 -0.848568 +v -0.600000 -0.900000 0.200418 +v -0.300000 -0.900000 -0.459582 +v 0.300000 -0.900000 -0.459582 +v 0.600000 -0.900000 0.200418 +v 0.675000 -0.375000 -0.669582 +v 0.975000 -0.375000 -0.009582 +v -0.675000 -0.375000 -0.669582 +v -0.975000 -0.375000 -0.009582 +v -0.850002 -0.550002 0.860418 +v -0.975000 -0.375000 0.680418 +v -0.540000 -0.900000 0.200418 +v -0.540000 -0.550002 0.860418 +v -0.540000 -0.375000 0.680418 +v -0.540000 -0.375000 -0.009582 +v 0.975000 -0.375000 0.680418 +v 0.850002 -0.550002 0.860418 +v 0.540000 -0.900000 0.200418 +v 0.540000 -0.550002 0.860418 +v 0.540000 -0.375000 0.680418 +v 0.540000 -0.375000 -0.009582 +v -0.907500 0.207168 0.495000 +v -0.907500 0.207168 0.375000 +v -0.907500 -0.032832 0.375000 +v -0.907500 -0.032832 0.495000 +v -0.667500 0.207168 0.495000 +v -0.667500 -0.032832 0.495000 +v -0.667500 -0.032832 0.375000 +v -0.667500 0.207168 0.375000 +v -0.937500 0.237168 0.525000 +v -0.937500 0.237168 0.375000 +v -0.937500 -0.062832 0.375000 +v -0.937500 -0.062832 0.525000 +v -0.637500 0.237168 0.525000 +v -0.637500 -0.062832 0.525000 +v -0.637500 -0.062832 0.375000 +v -0.637500 0.237168 0.375000 +v -0.525000 -0.175002 0.187500 +v -0.900000 0.199998 0.187500 +v -0.900000 0.199998 0.375000 +v -0.675000 -0.025002 0.375000 +v -0.675000 0.199998 0.187500 +v -1.050000 -0.175002 0.187500 +v -0.900000 -0.025002 0.375000 +v -0.675000 0.199998 0.375000 +v -0.674544 0.262500 -0.900000 +v -0.412044 0.262500 -0.900000 +v -0.412044 0.431250 -0.787500 +v -0.562044 0.431250 -0.787500 +v -0.562044 0.431250 -0.547818 +v -0.674544 0.262500 -0.579582 +v -0.412044 0.431250 -0.547818 +v -0.412044 -0.375000 -0.918750 +v -0.637500 -0.375000 -0.918750 +v -0.525000 -0.543750 -0.806250 +v -0.412044 -0.543750 -0.806250 +v -0.637500 -0.375000 -0.669582 +v -0.525000 -0.543750 -0.602082 +v -0.412044 -0.543750 -0.602082 +v -0.412044 -0.375000 -0.669582 +v 0.900000 0.199998 0.187500 +v 0.525000 -0.175002 0.187500 +v 0.675000 -0.025002 0.375000 +v 0.900000 0.199998 0.375000 +v 1.050000 -0.175002 0.187500 +v 0.675000 0.199998 0.187500 +v 0.675000 0.199998 0.375000 +v 0.900000 -0.025002 0.375000 +v 0.412044 0.262500 -0.900000 +v 0.674544 0.262500 -0.900000 +v 0.562044 0.431250 -0.787500 +v 0.412044 0.431250 -0.787500 +v 0.674544 0.262500 -0.579582 +v 0.562044 0.431250 -0.547818 +v 0.412044 0.431250 -0.547818 +v 0.637500 -0.375000 -0.918750 +v 0.412044 -0.375000 -0.918750 +v 0.412044 -0.543750 -0.806250 +v 0.525000 -0.543750 -0.806250 +v 0.525000 -0.543750 -0.602082 +v 0.637500 -0.375000 -0.669582 +v 0.412044 -0.543750 -0.602082 +v 0.412044 -0.375000 -0.669582 +v -0.975000 -0.112500 -1.200000 +v -1.087500 0.000000 -1.200000 +v -1.087500 0.000000 -0.600000 +v -0.975000 -0.112500 -0.600000 +v -0.975000 0.000000 -1.200000 +v -0.975000 0.000000 -0.600000 +v -1.087500 -0.112500 -0.600000 +v -1.087500 -0.112500 -1.200000 +v -1.031250 -0.056250 -1.200000 +v -1.031250 -0.056250 -0.600000 +v -0.806250 -0.056250 -0.600000 +v -0.806250 -0.056250 -1.200000 +v 0.540000 -0.900000 0.200418 +v 0.540000 -0.270000 1.400418 +v -0.540000 -0.270000 1.400418 +v -0.540000 -0.900000 0.200418 +v 0.420000 0.247500 1.490418 +v -0.420000 0.247500 1.490418 +v -0.540000 0.270000 0.140418 +v -0.540000 -0.360000 -0.219582 +v -0.420000 0.780000 0.230418 +v 0.420000 0.780000 0.230418 +v 0.540000 0.270000 0.140418 +v 0.540000 -0.360000 -0.219582 +v 1.087500 0.000000 -0.600000 +v 0.975000 -0.112500 -0.600000 +v 0.975000 -0.112500 -1.200000 +v 1.087500 0.000000 -1.200000 +v 1.087500 -0.112500 -0.600000 +v 1.087500 -0.112500 -1.200000 +v 0.975000 0.000000 -1.200000 +v 0.975000 0.000000 -0.600000 +v 0.806250 -0.056250 -0.600000 +v 0.806250 -0.056250 -1.200000 +v 1.031250 -0.056250 -1.200000 +v 1.031250 -0.056250 -0.600000 +v 0.697380 -0.615636 -0.578166 +v 0.871548 -0.615636 -0.195984 +v 0.636252 -0.946602 -0.088752 +v 0.462084 -0.946602 -0.470940 +v 0.589818 -0.523290 -0.529152 +v 0.763992 -0.523290 -0.146964 +v 0.528696 -0.854250 -0.039738 +v 0.354522 -0.854250 -0.421920 +v -1.087500 -0.150000 -0.094290 +v -1.087500 -0.150000 -0.600000 +v -0.881250 -0.150000 -0.600000 +v -0.881250 -0.150000 -0.094290 +v -1.087500 0.037500 -0.164880 +v -0.881250 0.037500 -0.164880 +v -0.881250 0.037500 -0.600000 +v -1.087500 0.037500 -0.600000 +v 0.583932 -0.480000 -1.073568 +v 0.508932 -0.373932 -0.998568 +v 0.721068 -0.373932 -0.786432 +v 0.796068 -0.480000 -0.861432 +v 0.433932 -0.692130 -0.923568 +v 0.646068 -0.692130 -0.711432 +v 0.571068 -0.586068 -0.636432 +v 0.358932 -0.586068 -0.848568 +v -0.210000 -0.710430 0.881304 +v 0.210000 -0.710430 0.881304 +v 0.210000 -0.515178 1.253160 +v -0.210000 -0.515178 1.253160 +v -0.210000 -0.577626 0.811572 +v 0.210000 -0.577626 0.811572 +v 0.210000 -0.382374 1.183428 +v -0.210000 -0.382374 1.183428 +v -1.087500 -0.375000 0.500418 +v -1.087500 -0.375000 -0.009582 +v -0.412500 -0.375000 -0.174582 +v -0.540000 -0.375000 0.380418 +v 0.540000 -0.375000 0.380418 +v 0.412500 -0.375000 -0.174582 +v 1.087500 -0.375000 -0.009582 +v 1.087500 -0.375000 0.500418 +v -0.562500 -0.375000 -1.359582 +v -0.412500 -0.375000 -1.359582 +v 0.412500 -0.375000 -1.359582 +v 0.562500 -0.375000 -1.359582 +v -1.087500 0.262500 0.260418 +v -0.540000 0.262500 0.140418 +v -0.412500 0.262500 -0.414582 +v -1.087500 0.262500 -0.249582 +v 0.540000 0.262500 0.140418 +v 1.087500 0.262500 0.260418 +v 1.087500 0.262500 -0.249582 +v 0.412500 0.262500 -0.414582 +v -0.412500 0.262500 -1.599582 +v -0.562500 0.262500 -1.599582 +v 0.562500 0.262500 -1.599582 +v 0.412500 0.262500 -1.599582 +v -0.462426 -0.947496 -0.471096 +v -0.636600 -0.947496 -0.088908 +v -0.871896 -0.616530 -0.196140 +v -0.697722 -0.616530 -0.578322 +v -0.354870 -0.855150 -0.422076 +v -0.529038 -0.855150 -0.039894 +v -0.764334 -0.524184 -0.147120 +v -0.590166 -0.524184 -0.529308 +v -0.180000 -0.669924 0.893922 +v 0.180000 -0.669924 0.893922 +v 0.180000 -0.502566 1.212654 +v -0.180000 -0.502566 1.212654 +v -0.180000 -0.563682 0.838134 +v 0.180000 -0.563682 0.838134 +v 0.180000 -0.396318 1.156866 +v -0.180000 -0.396318 1.156866 +v 0.787500 0.262500 -0.579582 +v 0.675000 0.900000 -0.459582 +v 0.675000 0.900000 0.260418 +v 0.787500 0.262500 0.140418 +v -0.787500 0.262500 -0.579582 +v -0.787500 0.262500 0.140418 +v -0.675000 0.900000 0.260418 +v -0.675000 0.900000 -0.459582 +v -0.493932 0.572130 -0.923568 +v -0.418932 0.466068 -0.848568 +v -0.568932 0.253932 -0.998568 +v -0.643932 0.360000 -1.073568 +v -0.706068 0.572130 -0.711432 +v -0.856068 0.360000 -0.861432 +v -0.781068 0.253932 -0.786432 +v -0.631068 0.466068 -0.636432 +v 0.667500 0.207168 0.495000 +v 0.667500 0.207168 0.375000 +v 0.667500 -0.032832 0.375000 +v 0.667500 -0.032832 0.495000 +v 0.907500 0.207168 0.495000 +v 0.907500 -0.032832 0.495000 +v 0.907500 -0.032832 0.375000 +v 0.907500 0.207168 0.375000 +v -0.619452 -0.905388 -0.114066 +v -0.821136 -0.621702 -0.205974 +v -0.671844 -0.621702 -0.533562 +v -0.470160 -0.905388 -0.441648 +v -0.533406 -0.831510 -0.074850 +v -0.735090 -0.547824 -0.166764 +v -0.585798 -0.547824 -0.494346 +v -0.384114 -0.831510 -0.402438 +v 0.820788 -0.620808 -0.205818 +v 0.619110 -0.904494 -0.113910 +v 0.469818 -0.904494 -0.441492 +v 0.671502 -0.620808 -0.533406 +v 0.734742 -0.546930 -0.166608 +v 0.533064 -0.830610 -0.074694 +v 0.383772 -0.830610 -0.402282 +v 0.585456 -0.546930 -0.494190 +v 0.637500 0.237168 0.525000 +v 0.637500 0.237168 0.375000 +v 0.637500 -0.062832 0.375000 +v 0.637500 -0.062832 0.525000 +v 0.937500 0.237168 0.525000 +v 0.937500 -0.062832 0.525000 +v 0.937500 -0.062832 0.375000 +v 0.937500 0.237168 0.375000 +v 0.112500 -0.843750 -1.068750 +v 0.112500 -0.543750 -0.768750 +v 0.112500 -0.543750 -0.459582 +v 0.112500 -0.843750 -0.459582 +v -0.112500 -0.843750 -1.068750 +v -0.112500 -0.843750 -0.459582 +v -0.112500 -0.543750 -0.459582 +v -0.112500 -0.543750 -0.768750 +v 0.975000 -0.112500 -0.600000 +v 1.087500 0.000000 -0.600000 +v 1.087500 0.000000 -1.200000 +v 0.975000 -0.112500 -1.200000 +v 1.087500 -0.112500 -1.200000 +v 1.087500 -0.112500 -0.600000 +v 0.975000 0.000000 -0.600000 +v 0.975000 0.000000 -1.200000 +v 0.806250 -0.056250 -1.200000 +v 0.806250 -0.056250 -0.600000 +v 1.031250 -0.056250 -0.600000 +v 1.031250 -0.056250 -1.200000 +v -0.433932 -0.692130 -0.923568 +v -0.358932 -0.586068 -0.848568 +v -0.571068 -0.586068 -0.636432 +v -0.646068 -0.692130 -0.711432 +v -0.583932 -0.480000 -1.073568 +v -0.796068 -0.480000 -0.861432 +v -0.721068 -0.373932 -0.786432 +v -0.508932 -0.373932 -0.998568 +vt 0.308600 0.808377 +vt 0.308600 0.777127 +vt 0.324200 0.777127 +vt 0.324200 0.808377 +vt 0.355500 0.808377 +vt 0.277300 0.777127 +vt 0.277300 0.808377 +vt 0.355500 0.777127 +vt 0.238300 0.956827 +vt 0.238300 0.851327 +vt 0.265600 0.851327 +vt 0.265600 0.956827 +vt 0.191400 0.956827 +vt 0.191400 0.851327 +vt 0.343800 0.898227 +vt 0.343800 0.921627 +vt 0.281300 0.921627 +vt 0.343800 0.968527 +vt 0.290000 0.968527 +vt 0.290000 0.945077 +vt 0.343800 0.944877 +vt 0.343800 0.921827 +vt 0.367200 0.921827 +vt 0.290000 0.944877 +vt 0.281300 0.921827 +vt 0.851600 0.898227 +vt 0.812800 0.795427 +vt 1.000000 0.734327 +vt 1.000000 0.898227 +vt 1.000000 0.999777 +vt 0.851600 0.999777 +vt 0.750000 0.898227 +vt 0.750000 0.999777 +vt 0.562500 0.999777 +vt 0.448100 0.589627 +vt 0.368100 0.589627 +vt 0.327600 0.501727 +vt 0.324200 0.499777 +vt 0.351600 0.570077 +vt 0.265600 0.570077 +vt 0.498200 0.659677 +vt 0.318100 0.659677 +vt 0.238300 0.499777 +vt 0.152300 0.546677 +vt 0.175800 0.570077 +vt 0.152300 0.624777 +vt 0.152300 0.585727 +vt 0.066400 0.616977 +vt 0.175800 0.624777 +vt 0.152300 0.585827 +vt 0.265600 0.624777 +vt 0.320300 0.687277 +vt 0.320300 0.714627 +vt 0.351600 0.714627 +vt 0.371100 0.687277 +vt 0.269500 0.687277 +vt 0.289100 0.687277 +vt 0.289100 0.706827 +vt 0.316400 0.726327 +vt 0.269500 0.726327 +vt 0.320300 0.706827 +vt 0.269500 0.691177 +vt 0.304700 0.726327 +vt 0.304700 0.706827 +vt 0.289100 0.691177 +vt 0.308600 0.691177 +vt 0.320300 0.722427 +vt 0.281300 0.722427 +vt 0.304700 0.691177 +vt 0.652300 0.640427 +vt 0.652300 0.499777 +vt 0.496100 0.499777 +vt 0.722700 0.624777 +vt 0.722700 0.515427 +vt 0.570300 0.796677 +vt 0.722700 0.804477 +vt 0.722700 0.628677 +vt 0.789100 0.792727 +vt 0.886700 0.624777 +vt 0.886700 0.515427 +vt 0.640600 0.851327 +vt 0.281300 0.898227 +vt 0.343800 0.945077 +vt 0.367200 0.944877 +vt 0.066500 0.911777 +vt 0.088100 0.999777 +vt 0.015700 0.983177 +vt 0.242600 0.980177 +vt 0.242600 0.999727 +vt 0.545900 0.983177 +vt 0.474000 0.999727 +vt 0.495400 0.912177 +vt 0.561500 0.912177 +vt 0.320300 0.999777 +vt 0.320300 0.980327 +vt 0.273400 0.816177 +vt 0.273400 0.894327 +vt 0.343800 0.894327 +vt 0.343800 0.816177 +vt 0.410200 0.816177 +vt 0.441400 0.894327 +vt 0.375000 0.894327 +vt 0.585900 0.816177 +vt 0.617200 0.894327 +vt 0.242200 0.999777 +vt 0.320300 0.980227 +vt 0.242200 0.980227 +vt 0.578100 0.714627 +vt 0.578100 0.761477 +vt 0.531300 0.761477 +vt 0.515600 0.714627 +vt 0.531300 0.714627 +vt 0.515600 0.761477 +vt 0.082000 0.823977 +vt 0.175800 0.823977 +vt 0.160200 0.909927 +vt 0.175800 0.648227 +vt 0.257800 0.632577 +vt 0.082000 0.648227 +vt 0.000000 0.839627 +vt 0.000000 0.632577 +vt 0.933600 0.632577 +vt 0.898400 0.632577 +vt 0.898400 0.597427 +vt 0.898400 0.566177 +vt 0.968800 0.597427 +vt 0.933600 0.663827 +vt 0.898400 0.663827 +vt 0.968800 0.632577 +vt 0.968800 0.663827 +vt 0.562500 0.898227 +vt 0.488700 0.501727 +vt 0.066400 0.624777 +vt 0.261700 0.691177 +vt 0.496100 0.640427 +vt 0.000000 0.911777 +vt 0.066400 0.909927 +vt 0.257800 0.839627 +vt 0.968800 0.566177 +vt 0.293000 0.769327 +vt 0.277300 0.769327 +vt 0.277300 0.730227 +vt 0.293000 0.730227 +vt 0.332000 0.730227 +vt 0.332000 0.769327 +vt 0.589800 0.652127 +vt 0.589800 0.706827 +vt 0.535200 0.706827 +vt 0.515600 0.652127 +vt 0.535200 0.652127 +vt 0.515600 0.706827 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 0.000000 0.707100 +vn 0.500000 0.707100 0.500000 +vn 0.707100 0.000000 -0.707100 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 0.000000 0.707100 +vn -0.500000 0.707100 0.500000 +vn -0.707100 0.000000 -0.707100 +vn -0.707100 -0.707100 -0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.950600 -0.310300 +vn 0.000000 -0.355000 -0.934900 +vn 0.705400 -0.632100 -0.320600 +vn 0.000000 -0.371400 -0.928500 +vn -0.705400 -0.632100 -0.320600 +vn -0.813700 -0.581200 -0.000000 +vn 0.000000 -0.883500 0.468500 +vn 0.000000 0.717000 0.697100 +vn 0.813700 -0.581200 -0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.707100 0.707100 0.000000 +vn 0.000000 -0.554700 0.832100 +vn 0.832100 -0.554700 -0.000000 +vn 0.000000 0.554700 0.832100 +vn -0.832100 -0.554700 0.000000 +vn -0.832100 0.554700 0.000000 +vn 0.707100 -0.707100 -0.000000 +vn 0.000000 -0.885400 0.464800 +vn 0.000000 -0.171300 0.985200 +vn -0.990400 0.126900 0.054200 +vn -0.992700 0.110900 0.047400 +vn -0.973800 0.209500 0.088900 +vn -0.972700 0.213700 0.090600 +vn 0.000000 0.921100 0.389300 +vn 0.973600 0.209900 0.090000 +vn 0.990500 0.126400 0.054600 +vn 0.992700 0.110800 0.046800 +vn 0.200900 0.345100 0.916800 +vn -0.200900 0.345100 0.916800 +vn 0.988300 -0.053800 -0.142800 +vn 0.971000 -0.084200 -0.223700 +vn 0.923400 -0.135200 -0.359100 +vn 0.000000 -0.352300 -0.935900 +vn -0.923400 -0.135200 -0.359100 +vn -0.988300 -0.053800 -0.142800 +vn -0.971000 -0.084200 -0.223700 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 0.000000 0.464900 0.885400 +vn 0.984800 0.173800 0.000000 +vn -0.984800 0.173800 0.000000 +vn 0.000000 -0.185000 0.982700 +vn 0.000000 0.185000 -0.982700 +vn -0.717100 -0.615700 -0.326800 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.560200 -0.788000 0.255300 +vn 0.717100 -0.615700 -0.326800 +vn 0.414700 -0.000000 0.910000 +vn -0.560300 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +vn 0.560200 0.788000 -0.255300 +vn 0.000000 0.707100 -0.707100 +vn 0.972600 0.214500 0.090000 +vn 0.717100 -0.615600 -0.326800 +vn -0.560200 -0.788000 0.255300 +usemtl 05___Default +f 2/1/1 3/2/1 4/3/1 +f 5/4/2 6/3/2 7/2/2 +f 4/3/3 6/4/3 5/5/3 +f 4/3/4 3/2/4 7/1/4 +f 2/6/5 8/7/5 7/1/5 +f 1/3/6 5/4/6 8/1/6 +f 9/4/6 10/1/6 11/2/6 +f 13/4/4 14/3/4 15/2/4 +f 12/3/2 14/4/2 13/5/2 +f 11/2/3 15/1/3 14/4/3 +f 10/6/1 16/7/1 15/1/1 +f 9/3/5 13/4/5 16/1/5 +f 17/4/7 18/1/7 19/2/7 +f 22/3/8 23/2/8 24/1/8 +f 17/8/9 20/3/9 22/4/9 +f 19/2/10 23/1/10 22/4/10 +f 19/2/11 18/6/11 24/7/11 +f 18/2/12 17/3/12 21/4/12 +f 25/4/10 26/1/10 27/2/10 +f 29/4/12 30/3/12 31/2/12 +f 28/3/7 30/4/7 29/5/7 +f 27/2/9 31/1/9 30/4/9 +f 26/6/8 32/7/8 31/1/8 +f 26/2/11 25/3/11 29/4/11 +f 34/9/13 35/10/13 36/11/13 +f 37/10/14 38/9/14 39/12/14 +f 42/9/15 43/13/15 44/14/15 +f 46/15/15 47/16/15 48/17/15 +f 50/18/16 51/19/16 52/20/16 +f 49/21/17 47/22/17 46/23/17 +f 52/24/18 48/25/18 47/22/18 +f 53/26/18 54/27/18 55/28/18 +f 57/26/19 58/29/19 59/28/19 +f 56/29/15 58/30/15 57/31/15 +f 54/32/20 60/33/20 59/34/20 +f 53/26/21 57/31/21 60/33/21 +f 70/35/15 71/36/15 72/37/15 +f 71/38/22 73/39/22 74/40/22 +f 70/35/23 75/41/23 73/42/23 +f 70/38/24 69/43/24 76/40/24 +f 69/43/25 77/44/25 78/45/25 +f 80/46/26 77/47/26 69/48/26 +f 81/49/27 78/45/27 77/50/27 +f 82/51/16 76/40/16 78/45/16 +f 72/43/28 74/40/28 83/45/28 +f 72/48/26 84/47/26 86/46/26 +f 84/47/27 83/45/27 87/49/27 +f 83/45/16 74/40/16 88/51/16 +f 90/1/19 91/2/19 92/3/19 +f 94/3/18 95/2/18 96/1/18 +f 92/3/29 94/4/29 93/5/29 +f 91/2/15 95/1/15 94/4/15 +f 90/6/17 96/7/17 95/1/17 +f 89/3/16 93/4/16 96/1/16 +f 106/52/30 107/53/30 108/54/30 +f 109/52/14 110/55/14 111/54/14 +f 114/56/31 115/57/31 116/58/31 +f 118/59/32 113/60/32 116/58/32 +f 117/61/15 116/58/15 115/57/15 +f 120/62/33 121/60/33 122/58/33 +f 124/63/34 121/60/34 122/58/34 +f 125/64/15 122/58/15 123/65/15 +f 127/66/18 126/67/18 123/68/18 +f 128/52/14 129/55/14 130/54/14 +f 133/52/30 134/53/30 135/54/30 +f 136/56/31 137/60/31 138/58/31 +f 140/59/34 141/61/34 138/58/34 +f 142/52/15 139/57/15 138/58/15 +f 144/62/33 145/65/33 146/58/33 +f 148/63/35 143/60/35 146/58/35 +f 149/69/15 145/65/15 146/58/15 +f 150/69/19 144/62/19 145/65/19 +f 152/12/30 153/11/30 154/10/30 +f 156/10/36 157/11/36 158/12/36 +f 160/10/16 161/14/16 162/13/16 +f 164/70/37 165/71/37 166/72/37 +f 167/73/38 168/74/38 165/71/38 +f 166/75/19 165/70/39 169/76/40 +f 168/77/41 171/78/42 169/76/40 +f 167/73/43 172/79/43 171/80/43 +f 167/77/44 164/70/45 173/76/46 +f 163/75/18 174/81/18 173/76/46 +f 176/10/36 177/9/36 178/12/36 +f 180/12/30 181/9/30 182/10/30 +f 184/13/15 185/9/15 186/10/15 +f 196/16/15 197/15/15 198/82/15 +f 200/19/16 201/18/16 202/83/16 +f 196/22/17 202/21/17 201/84/17 +f 196/22/19 195/25/19 199/24/19 +f 220/85/15 221/86/15 222/87/15 +f 223/87/15 224/86/15 225/85/15 +f 227/88/15 228/89/15 221/86/15 +f 224/86/15 229/89/15 230/88/15 +f 232/90/16 233/91/16 234/92/16 +f 235/90/16 236/93/16 237/92/16 +f 233/91/16 239/94/16 240/95/16 +f 238/91/16 237/92/16 241/95/16 +f 222/96/47 232/97/47 231/98/47 +f 223/96/48 226/99/48 236/98/48 +f 225/100/49 237/101/50 236/102/18 +f 230/103/51 241/104/51 237/101/50 +f 229/105/52 242/94/52 241/106/52 +f 227/107/52 240/106/52 239/94/52 +f 227/103/53 220/100/54 234/101/55 +f 220/100/54 219/99/19 231/102/19 +f 252/108/56 253/109/56 254/110/56 +f 256/111/57 252/112/57 251/110/57 +f 257/111/18 253/112/18 252/110/18 +f 258/111/58 254/112/58 253/110/58 +f 258/113/19 255/111/19 251/112/19 +f 260/114/59 261/115/59 262/116/59 +f 264/116/60 265/115/60 266/114/60 +f 261/115/61 265/117/61 264/118/61 +f 260/114/16 266/119/16 265/117/16 +f 259/120/62 263/121/62 266/119/62 +f 276/1/19 277/2/19 278/3/19 +f 280/3/18 281/2/18 282/1/18 +f 278/3/29 280/4/29 279/5/29 +f 277/2/15 281/1/15 280/4/15 +f 276/6/17 282/7/17 281/1/17 +f 275/3/16 279/4/16 282/1/16 +f 283/112/63 284/108/63 285/109/63 +f 288/111/64 284/112/64 283/110/64 +f 288/113/65 289/111/65 285/112/65 +f 289/113/66 290/111/66 286/112/66 +f 287/111/67 283/112/67 286/110/67 +f 292/108/68 293/109/68 294/110/68 +f 296/111/69 292/112/69 291/110/69 +f 296/113/70 297/111/70 293/112/70 +f 297/113/71 298/111/71 294/112/71 +f 298/113/72 295/111/72 291/112/72 +f 308/122/18 309/123/18 310/124/18 +f 312/124/19 313/123/19 314/122/19 +f 310/125/15 312/124/15 311/126/15 +f 308/122/16 314/127/16 313/128/16 +f 307/129/73 311/130/73 314/127/73 +f 316/11/14 317/12/14 318/9/14 +f 319/12/13 320/11/13 321/10/13 +f 324/14/16 325/10/16 326/9/16 +f 1/4/1 2/1/1 4/3/1 +f 8/1/2 5/4/2 7/2/2 +f 1/8/3 4/3/3 5/5/3 +f 6/4/4 4/3/4 7/1/4 +f 3/2/5 2/6/5 7/1/5 +f 2/2/6 1/3/6 8/1/6 +f 12/3/6 9/4/6 11/2/6 +f 16/1/4 13/4/4 15/2/4 +f 9/8/2 12/3/2 13/5/2 +f 12/3/3 11/2/3 14/4/3 +f 11/2/1 10/6/1 15/1/1 +f 10/2/5 9/3/5 16/1/5 +f 20/3/7 17/4/7 19/2/7 +f 21/4/8 22/3/8 24/1/8 +f 21/5/9 17/8/9 22/4/9 +f 20/3/10 19/2/10 22/4/10 +f 23/1/11 19/2/11 24/7/11 +f 24/1/12 18/2/12 21/4/12 +f 28/3/10 25/4/10 27/2/10 +f 32/1/12 29/4/12 31/2/12 +f 25/8/7 28/3/7 29/5/7 +f 28/3/9 27/2/9 30/4/9 +f 27/2/8 26/6/8 31/1/8 +f 32/1/11 26/2/11 29/4/11 +f 33/12/13 34/9/13 36/11/13 +f 40/11/14 37/10/14 39/12/14 +f 41/10/15 42/9/15 44/14/15 +f 45/82/15 46/15/15 48/17/15 +f 49/83/16 50/18/16 52/20/16 +f 50/84/17 49/21/17 46/23/17 +f 49/21/18 52/24/18 47/22/18 +f 56/29/18 53/26/18 55/28/18 +f 60/27/19 57/26/19 59/28/19 +f 53/26/15 56/29/15 57/31/15 +f 55/131/20 54/32/20 59/34/20 +f 54/32/21 53/26/21 60/33/21 +f 69/132/15 70/35/15 72/37/15 +f 72/43/22 71/38/22 74/40/22 +f 71/36/23 70/35/23 73/42/23 +f 75/39/24 70/38/24 76/40/24 +f 76/40/25 69/43/25 78/45/25 +f 79/133/26 80/46/26 69/48/26 +f 80/46/27 81/49/27 77/50/27 +f 81/49/16 82/51/16 78/45/16 +f 84/44/28 72/43/28 83/45/28 +f 85/133/26 72/48/26 86/46/26 +f 86/46/27 84/47/27 87/49/27 +f 87/49/16 83/45/16 88/51/16 +f 89/4/19 90/1/19 92/3/19 +f 93/4/18 94/3/18 96/1/18 +f 89/8/29 92/3/29 93/5/29 +f 92/3/15 91/2/15 94/4/15 +f 91/2/17 90/6/17 95/1/17 +f 90/2/16 89/3/16 96/1/16 +f 105/55/30 106/52/30 108/54/30 +f 112/53/14 109/52/14 111/54/14 +f 113/60/31 114/56/31 116/58/31 +f 117/61/32 118/59/32 116/58/32 +f 119/52/15 117/61/15 115/57/15 +f 123/65/33 120/62/33 122/58/33 +f 125/64/34 124/63/34 122/58/34 +f 126/69/15 125/64/15 123/65/15 +f 120/134/18 127/66/18 123/68/18 +f 131/53/14 128/52/14 130/54/14 +f 132/55/30 133/52/30 135/54/30 +f 139/57/31 136/56/31 138/58/31 +f 137/60/34 140/59/34 138/58/34 +f 141/61/15 142/52/15 138/58/15 +f 143/60/33 144/62/33 146/58/33 +f 147/64/35 148/63/35 146/58/35 +f 147/64/15 149/69/15 146/58/15 +f 149/69/19 150/69/19 145/65/19 +f 151/9/30 152/12/30 154/10/30 +f 155/9/36 156/10/36 158/12/36 +f 159/9/16 160/10/16 162/13/16 +f 163/135/37 164/70/37 166/72/37 +f 164/70/38 167/73/38 165/71/38 +f 170/81/19 166/75/19 169/76/40 +f 165/70/39 168/77/41 169/76/40 +f 168/74/43 167/73/43 171/80/43 +f 172/78/74 167/77/44 173/76/46 +f 164/70/45 163/75/18 173/76/46 +f 175/11/36 176/10/36 178/12/36 +f 179/11/30 180/12/30 182/10/30 +f 183/14/15 184/13/15 186/10/15 +f 195/17/15 196/16/15 198/82/15 +f 199/20/16 200/19/16 202/83/16 +f 197/23/17 196/22/17 201/84/17 +f 202/21/19 196/22/19 199/24/19 +f 219/136/15 220/85/15 222/87/15 +f 226/136/15 223/87/15 225/85/15 +f 220/85/15 227/88/15 221/86/15 +f 225/85/15 224/86/15 230/88/15 +f 231/93/16 232/90/16 234/92/16 +f 238/91/16 235/90/16 237/92/16 +f 234/92/16 233/91/16 240/95/16 +f 242/94/16 238/91/16 241/95/16 +f 219/99/47 222/96/47 231/98/47 +f 235/97/48 223/96/48 236/98/48 +f 226/99/18 225/100/49 236/102/18 +f 225/100/49 230/103/51 237/101/50 +f 230/107/52 229/105/52 241/106/52 +f 228/105/52 227/107/52 239/94/52 +f 240/104/53 227/103/53 234/101/55 +f 234/101/55 220/100/54 231/102/19 +f 251/112/56 252/108/56 254/110/56 +f 255/113/57 256/111/57 251/110/57 +f 256/113/18 257/111/18 252/110/18 +f 257/113/58 258/111/58 253/110/58 +f 254/110/19 258/113/19 251/112/19 +f 259/137/59 260/114/59 262/116/59 +f 263/137/60 264/116/60 266/114/60 +f 262/138/61 261/115/61 264/118/61 +f 261/115/16 260/114/16 265/117/16 +f 260/114/62 259/120/62 266/119/62 +f 275/4/19 276/1/19 278/3/19 +f 279/4/18 280/3/18 282/1/18 +f 275/8/29 278/3/29 279/5/29 +f 278/3/15 277/2/15 280/4/15 +f 277/2/17 276/6/17 281/1/17 +f 276/2/16 275/3/16 282/1/16 +f 286/110/63 283/112/63 285/109/63 +f 287/113/64 288/111/64 283/110/64 +f 284/110/65 288/113/65 285/112/65 +f 285/110/66 289/113/66 286/112/66 +f 290/113/67 287/111/67 286/110/67 +f 291/112/75 292/108/68 294/110/68 +f 295/113/69 296/111/69 291/110/69 +f 292/110/76 296/113/70 293/112/70 +f 293/110/71 297/113/71 294/112/71 +f 294/110/72 298/113/72 291/112/72 +f 307/126/18 308/122/18 310/124/18 +f 311/126/19 312/124/19 314/122/19 +f 307/139/15 310/125/15 311/126/15 +f 309/123/16 308/122/16 313/128/16 +f 308/122/73 307/129/73 314/127/73 +f 315/10/14 316/11/14 318/9/14 +f 322/9/13 319/12/13 321/10/13 +f 323/13/16 324/14/16 326/9/16 +usemtl Material__2 +f 61/140/10 62/141/10 63/142/10 +f 65/140/12 66/143/12 67/142/12 +f 64/144/7 66/145/7 65/140/7 +f 63/141/9 67/142/9 66/143/9 +f 61/143/11 65/140/11 68/141/11 +f 98/141/19 99/142/19 100/143/19 +f 102/143/18 103/142/18 104/141/18 +f 100/144/29 102/145/29 101/140/29 +f 99/141/15 103/142/15 102/143/15 +f 97/143/16 101/140/16 104/141/16 +f 188/146/68 189/147/68 190/148/68 +f 192/149/72 188/150/72 187/148/72 +f 193/149/69 189/150/69 188/148/69 +f 193/151/76 194/149/76 190/150/76 +f 191/149/71 187/150/71 190/148/71 +f 203/140/7 204/141/7 205/142/7 +f 207/140/8 208/143/8 209/142/8 +f 206/144/9 208/145/9 207/140/9 +f 205/141/10 209/142/10 208/143/10 +f 204/142/12 203/143/12 207/140/12 +f 212/146/56 213/147/56 214/148/56 +f 216/149/57 212/150/57 211/148/57 +f 217/149/18 213/150/18 212/148/18 +f 218/149/58 214/150/58 213/148/58 +f 215/149/19 211/150/19 214/148/19 +f 244/146/63 245/147/63 246/148/63 +f 248/149/67 244/150/67 243/148/67 +f 249/149/64 245/150/64 244/148/64 +f 249/151/65 250/149/65 246/150/65 +f 250/151/66 247/149/66 243/150/66 +f 267/140/6 268/141/6 269/142/6 +f 271/140/4 272/143/4 273/142/4 +f 267/143/2 270/144/2 272/145/2 +f 269/141/3 273/142/3 272/143/3 +f 268/142/5 267/143/5 271/140/5 +f 300/141/19 301/142/19 302/143/19 +f 304/143/18 305/142/18 306/141/18 +f 302/144/29 304/145/29 303/140/29 +f 301/141/15 305/142/15 304/143/15 +f 299/143/16 303/140/16 306/141/16 +f 327/140/1 328/141/1 329/142/1 +f 331/140/2 332/143/2 333/142/2 +f 330/144/3 332/145/3 331/140/3 +f 330/140/4 329/141/4 333/142/4 +f 327/143/6 331/140/6 334/141/6 +f 64/143/10 61/140/10 63/142/10 +f 68/141/12 65/140/12 67/142/12 +f 61/143/7 64/144/7 65/140/7 +f 64/140/9 63/141/9 66/143/9 +f 62/142/11 61/143/11 68/141/11 +f 97/140/19 98/141/19 100/143/19 +f 101/140/18 102/143/18 104/141/18 +f 97/143/29 100/144/29 101/140/29 +f 100/140/15 99/141/15 102/143/15 +f 98/142/16 97/143/16 104/141/16 +f 187/150/68 188/146/68 190/148/68 +f 191/151/72 192/149/72 187/148/72 +f 192/151/69 193/149/69 188/148/69 +f 189/148/70 193/151/76 190/150/76 +f 194/151/71 191/149/71 190/148/71 +f 206/143/7 203/140/7 205/142/7 +f 210/141/8 207/140/8 209/142/8 +f 203/143/9 206/144/9 207/140/9 +f 206/140/10 205/141/10 208/143/10 +f 210/141/12 204/142/12 207/140/12 +f 211/150/56 212/146/56 214/148/56 +f 215/151/57 216/149/57 211/148/57 +f 216/151/18 217/149/18 212/148/18 +f 217/151/58 218/149/58 213/148/58 +f 218/151/19 215/149/19 214/148/19 +f 243/150/63 244/146/63 246/148/63 +f 247/151/67 248/149/67 243/148/67 +f 248/151/64 249/149/64 244/148/64 +f 245/148/65 249/151/65 246/150/65 +f 246/148/66 250/151/66 243/150/66 +f 270/143/6 267/140/6 269/142/6 +f 274/141/4 271/140/4 273/142/4 +f 271/140/2 267/143/2 272/145/2 +f 270/140/3 269/141/3 272/143/3 +f 274/141/5 268/142/5 271/140/5 +f 299/140/19 300/141/19 302/143/19 +f 303/140/18 304/143/18 306/141/18 +f 299/143/29 302/144/29 303/140/29 +f 302/140/15 301/141/15 304/143/15 +f 300/142/16 299/143/16 306/141/16 +f 330/143/1 327/140/1 329/142/1 +f 334/141/2 331/140/2 333/142/2 +f 327/143/3 330/144/3 331/140/3 +f 332/143/4 330/140/4 333/142/4 +f 328/142/6 327/143/6 334/141/6 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_bottom.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_bottom.obj new file mode 100644 index 00000000..45d245f5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_bottom.obj @@ -0,0 +1,70 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:10:25 + +mtllib astroMinerLaserBottom.mtl + +# +# object Main_Laser_Bottom +# + +v -0.9375 -15.0000 -31.8750 +v -0.9375 -15.9375 -30.9375 +v -0.9375 -15.9375 -19.6875 +v -0.9375 -15.0000 -18.7500 +v 0.9375 -15.9375 -19.6875 +v 0.9375 -15.9375 -30.9375 +v 0.9375 -15.0000 -31.8750 +v 0.9375 -15.0000 -18.7500 +# 8 vertices + +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 0.0000 -0.0000 +vn 1.0000 -0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.7071 0.7071 +vn -0.0000 1.0000 0.0000 +vn 0.0000 -0.7071 -0.7071 +# 8 vertex normals + +vt 0.9570 0.3828 0.4844 +vt 0.9492 0.3672 0.4844 +vt 0.8555 0.3672 0.4844 +vt 0.8477 0.3828 0.4844 +vt 0.9492 0.3672 0.5156 +vt 0.8555 0.3672 0.5156 +vt 0.8477 0.3828 0.5156 +vt 0.9570 0.3828 0.5156 +vt 0.8555 0.3672 0.0313 +vt 0.9492 0.3672 0.0313 +vt 0.9492 0.3359 0.0313 +vt 0.8555 0.3359 0.0313 +vt 0.8398 0.4141 0.0469 +vt 0.8477 0.4141 0.0313 +vt 0.8477 0.3828 0.0313 +vt 0.8398 0.3828 0.0469 +vt 0.9570 0.3828 0.0469 +vt 0.8477 0.3828 0.0469 +vt 0.8477 0.4141 0.0469 +vt 0.9570 0.4141 0.0469 +vt 0.9648 0.3828 0.6719 +vt 0.9570 0.3828 0.6875 +vt 0.9570 0.4141 0.6875 +vt 0.9648 0.4141 0.6719 +# 24 texture coords + +g Main_Laser_Bottom +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/2 4/4/2 +f 5/5/3 6/6/4 7/7/4 8/8/3 +s 2 +f 3/9/5 2/10/5 6/11/5 5/12/5 +s 4 +f 4/13/6 3/14/6 5/15/6 8/16/6 +s 2 +f 1/17/7 4/18/7 8/19/7 7/20/7 +s 4 +f 2/21/8 1/22/8 7/23/8 6/24/8 +# 6 polygons + diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_center.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_center.obj new file mode 100644 index 00000000..47c2ede6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_center.obj @@ -0,0 +1,67 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:10:13 + +mtllib astroMinerLaserCenter.mtl + +# +# object Main_Laser_Center +# + +v 1.8750 -15.0000 -18.7500 +v 1.8750 -15.0000 -22.8125 +v 1.8750 -10.0000 -17.8125 +v 1.8750 -10.0000 -13.7500 +v -1.8750 -15.0000 -18.7500 +v -1.8750 -10.0000 -13.7500 +v -1.8750 -10.0000 -17.8125 +v -1.8750 -15.0000 -22.8125 +# 8 vertices + +vn 1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn -1.0000 -0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.7071 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn -0.0000 1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -1.0000 -0.0000 +# 11 vertex normals + +vt 0.7891 0.4141 0.5313 +vt 0.8242 0.4141 0.5313 +vt 0.7813 0.3281 0.5313 +vt 0.7461 0.3281 0.5312 +vt 0.7891 0.4141 0.4688 +vt 0.7461 0.3281 0.4687 +vt 0.7813 0.3281 0.4687 +vt 0.8242 0.4141 0.4688 +vt 0.8516 0.2656 0.0469 +vt 0.8867 0.2656 0.1250 +vt 0.8867 0.3281 0.1250 +vt 0.8516 0.3281 0.0469 +vt 0.7813 0.3281 0.1250 +vt 0.7813 0.2656 0.1250 +vt 0.7461 0.2656 0.1250 +vt 0.7461 0.3281 0.1250 +vt 0.8164 0.3281 0.0469 +vt 0.8164 0.2656 0.0469 +# 18 texture coords + +g Main_Laser_Center +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/2 4/4/2 +f 5/5/3 6/6/4 7/7/4 8/8/3 +s 2 +f 1/9/5 4/10/5 6/11/5 5/12/6 +s 4 +f 4/13/7 3/14/8 7/15/7 6/16/9 +s 2 +f 3/13/10 2/17/10 8/18/10 7/14/10 +s 4 +f 2/9/11 1/18/11 5/17/11 8/12/11 +# 6 polygons + diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_front.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_front.obj new file mode 100644 index 00000000..23a2e442 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_laser_front.obj @@ -0,0 +1,90 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:10:36 + +mtllib astroMinerLaserFront.mtl + +# +# object Main_Laser_Front +# + +v 0.0000 -10.0000 -40.0000 +v 0.0000 -10.9375 -40.0000 +v 0.0000 -10.9375 -31.8750 +v 0.0000 -10.0000 -31.8750 +v -0.9375 -12.8125 -40.0000 +v -0.9375 -13.7500 -40.0000 +v -0.9375 -13.7500 -31.8750 +v -0.9375 -12.8125 -31.8750 +v 0.9375 -12.8125 -31.8750 +v 0.9375 -12.8125 -40.0000 +v 0.9375 -13.7500 -40.0000 +v 0.9375 -13.7500 -31.8750 +v 0.9375 -10.9375 -40.0000 +v 0.9375 -10.9375 -17.5000 +v 0.9375 -12.8125 -17.5000 +v -0.9375 -12.8125 -17.5000 +v -0.9375 -10.9375 -17.5000 +v -0.9375 -10.9375 -40.0000 +# 18 vertices + +vn -1.0000 0.0000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 -0.0000 0.0000 +# 8 vertex normals + +vt 0.8086 0.7813 0.5000 +vt 0.8086 0.7656 0.5000 +vt 0.7461 0.7656 0.5000 +vt 0.7461 0.7813 0.5000 +vt 0.8086 0.7031 0.4844 +vt 0.8086 0.6875 0.4844 +vt 0.7461 0.6875 0.4844 +vt 0.7461 0.7031 0.4844 +vt 0.7461 0.7031 0.5156 +vt 0.8086 0.7031 0.5156 +vt 0.8086 0.6875 0.5156 +vt 0.7461 0.6875 0.5156 +vt 0.8086 0.7344 0.5156 +vt 0.6367 0.7344 0.5156 +vt 0.6367 0.7031 0.5156 +vt 0.6367 0.7031 0.4844 +vt 0.6367 0.7344 0.4844 +vt 0.8086 0.7344 0.4844 +vt 0.8086 0.7656 0.0781 +vt 0.6367 0.7656 0.0781 +vt 0.6367 0.7344 0.0781 +vt 0.8086 0.7344 0.0781 +vt 0.6367 0.7344 0.1094 +vt 0.8086 0.7344 0.1094 +vt 0.8086 0.7656 0.1094 +vt 0.6367 0.7656 0.1094 +vt 0.8242 0.7656 0.7969 +vt 0.8242 0.7344 0.7969 +vt 0.8086 0.7344 0.7969 +vt 0.8086 0.7656 0.7969 +# 30 texture coords + +g Main_Laser_Front +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/1 8/8/1 +f 9/9/2 10/10/2 11/11/2 12/12/2 +f 10/10/3 13/13/3 14/14/3 15/15/3 +f 5/5/2 16/16/2 17/17/2 18/18/2 +s 2 +f 10/19/4 15/20/4 16/21/4 5/22/5 +f 14/23/6 13/24/6 18/25/6 17/26/6 +s 4 +f 13/27/7 10/28/7 5/29/7 18/30/7 +s 1 +f 2/2/8 1/1/8 4/4/8 3/3/8 +f 6/6/3 5/5/3 8/8/8 7/7/8 +f 10/10/3 9/9/3 12/12/3 11/11/3 +# 11 polygons + diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_left_guard.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_left_guard.obj new file mode 100644 index 00000000..540c443c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_left_guard.obj @@ -0,0 +1,60 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 04.05.2015 00:09:04 + +mtllib astroMinerLeftGuard.mtl + +# +# object Main_Laser_Left_Guard +# + +v -3.7500 -14.3750 -19.3750 +v -3.7500 -8.7500 -25.0000 +v -3.7500 -8.7500 -7.5000 +v -3.7500 -14.3750 -7.5000 +v -5.0000 -14.3750 -19.3750 +v -5.0000 -14.3750 -7.5000 +v -5.0000 -8.7500 -7.5000 +v -5.0000 -8.7500 -25.0000 +# 8 vertices + +vn 1.0000 0.0000 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 -0.7071 -0.7071 +# 5 vertex normals + +vt 0.3984 0.5859 0.6172 +vt 0.3516 0.4922 0.6172 +vt 0.5000 0.4922 0.6172 +vt 0.5000 0.5859 0.6172 +vt 0.3984 0.3750 0.0000 +vt 0.5000 0.3750 0.0000 +vt 0.5000 0.4688 0.0000 +vt 0.3516 0.4688 0.0000 +vt 0.3984 0.3516 0.0078 +vt 0.5000 0.3516 0.0078 +vt 0.5000 0.3750 0.0078 +vt 0.3984 0.3750 0.0078 +vt 0.5000 0.4922 0.0859 +vt 0.3516 0.4922 0.0859 +vt 0.3516 0.4688 0.0859 +vt 0.5000 0.4688 0.0859 +vt 0.2930 0.3516 0.7266 +vt 0.3984 0.3516 0.8047 +vt 0.3984 0.3750 0.8047 +vt 0.2930 0.3750 0.7266 +# 20 texture coords + +g Main_Laser_Left_Guard +usemtl 05___Default +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +s 2 +f 1/9/3 4/10/3 6/11/3 5/12/3 +f 3/13/4 2/14/4 8/15/4 7/16/4 +s 4 +f 2/17/5 1/18/5 5/19/5 8/20/5 +# 5 polygons + diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.mtl new file mode 100644 index 00000000..7db3adff --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.mtl @@ -0,0 +1,12 @@ +# Blender MTL File: 'None' +# Material Count: 2 + +newmtl 05___Default +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 + +newmtl Material__2 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.obj new file mode 100644 index 00000000..0b40253e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/astro_miner_right_guard.obj @@ -0,0 +1,1021 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib astroMinerRightGuard.mtl +o Hoverpad_Front_Left_Bottom +v 1.544852 -0.649704 -0.902352 +v 1.604852 -0.564852 -0.842352 +v 1.435148 -0.564852 -0.672648 +v 1.375148 -0.649704 -0.732648 +v 1.424852 -0.480000 -1.022352 +v 1.255148 -0.480000 -0.852648 +v 1.315148 -0.395148 -0.792648 +v 1.484852 -0.395148 -0.962352 +v 1.484852 0.529704 -0.902352 +v 1.544852 0.444852 -0.842352 +v 1.424852 0.275148 -0.962352 +v 1.364852 0.360000 -1.022352 +v 1.315148 0.529704 -0.732648 +v 1.195148 0.360000 -0.852648 +v 1.255148 0.275148 -0.792648 +v 1.375148 0.444852 -0.672648 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 -0.000000 0.707100 +vn 0.500000 0.707100 0.500000 +vn 0.707100 0.000000 -0.707100 +usemtl 05___Default +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/1/2 6/4/2 7/3/2 8/2/2 +f 1/5/3 4/4/3 6/1/3 5/6/3 +f 4/4/4 3/3/4 7/2/4 6/1/4 +f 3/3/5 2/7/5 8/8/5 7/2/5 +f 2/3/6 1/4/6 5/1/6 8/2/6 +f 9/1/6 10/2/6 11/3/6 12/4/6 +f 13/1/4 14/4/4 15/3/4 16/2/4 +f 9/5/2 12/4/2 14/1/2 13/6/2 +f 12/4/3 11/3/3 15/2/3 14/1/3 +f 11/3/1 10/7/1 16/8/1 15/2/1 +f 10/3/5 9/4/5 13/1/5 16/2/5 +o Hoverpad_Front_Right_Bottom +v 2.575148 -0.480000 -1.022352 +v 2.515148 -0.395148 -0.962352 +v 2.684852 -0.395148 -0.792648 +v 2.744852 -0.480000 -0.852648 +v 2.455148 -0.649704 -0.902352 +v 2.624852 -0.649704 -0.732648 +v 2.564852 -0.564852 -0.672648 +v 2.395148 -0.564852 -0.842352 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 -0.000000 0.707100 +vn -0.500000 0.707100 0.500000 +vn -0.707100 0.000000 -0.707100 +usemtl 05___Default +f 17/9/7 18/10/7 19/11/7 20/12/7 +f 21/9/8 22/12/8 23/11/8 24/10/8 +f 17/13/9 20/12/9 22/9/9 21/14/9 +f 20/12/10 19/11/10 23/10/10 22/9/10 +f 19/11/11 18/15/11 24/16/11 23/10/11 +f 18/11/12 17/12/12 21/9/12 24/10/12 +o Hoverpad_Front_Right_Top +v 2.684852 0.529704 -0.732648 +v 2.624852 0.444852 -0.672648 +v 2.744852 0.275148 -0.792648 +v 2.804852 0.360000 -0.852648 +v 2.515148 0.529704 -0.902352 +v 2.635148 0.360000 -1.022352 +v 2.575148 0.275148 -0.962352 +v 2.455148 0.444852 -0.842352 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn 0.707100 0.000000 0.707100 +vn -0.707100 -0.000000 -0.707100 +vn 0.500000 0.707100 -0.500000 +vn 0.500000 -0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 0.500000 +usemtl 05___Default +f 25/17/13 26/18/13 27/19/13 28/20/13 +f 29/17/14 30/20/14 31/19/14 32/18/14 +f 25/21/15 28/20/15 30/17/15 29/22/15 +f 28/20/16 27/19/16 31/18/16 30/17/16 +f 27/19/17 26/23/17 32/24/17 31/18/17 +f 26/19/18 25/20/18 29/17/18 32/18/18 +o Left_Laser_Invert +v 0.912500 0.000000 -1.200000 +v 1.025000 -0.112500 -1.200000 +v 1.025000 -0.112500 -0.600000 +v 0.912500 0.000000 -0.600000 +v 1.025000 0.000000 -0.600000 +v 1.025000 0.000000 -1.200000 +v 0.912500 -0.112500 -1.200000 +v 0.912500 -0.112500 -0.600000 +v 0.968750 -0.056250 -0.600000 +v 0.968750 -0.056250 -1.200000 +v 1.193750 -0.056250 -1.200000 +v 1.193750 -0.056250 -0.600000 +vt 0.265600 0.914100 +vt 0.238300 0.914100 +vt 0.238300 0.703100 +vt 0.265600 0.703100 +vt 0.191400 0.914100 +vt 0.191400 0.703100 +vn -0.707100 -0.707100 -0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 -1.000000 -0.000000 +usemtl 05___Default +f 33/25/19 34/26/19 35/27/19 36/28/19 +f 37/27/20 38/26/20 39/25/20 40/28/20 +f 41/27/21 42/26/21 43/29/21 44/30/21 +o Right_Laser_Attachment +v 2.881250 -0.150000 -0.094290 +v 2.881250 -0.150000 -0.600000 +v 3.087500 -0.150000 -0.600000 +v 3.087500 -0.150000 -0.094290 +v 3.087500 0.037500 -0.600000 +v 2.881250 0.037500 -0.600000 +v 2.881250 0.037500 -0.164880 +v 3.087500 0.037500 -0.164880 +vt 0.281300 0.796900 +vt 0.343800 0.796900 +vt 0.343800 0.843700 +vt 0.281300 0.843700 +vt 0.343800 0.890600 +vt 0.343800 0.937500 +vt 0.290000 0.937500 +vt 0.290000 0.890600 +vt 0.367200 0.890200 +vt 0.343800 0.890200 +vt 0.343800 0.844100 +vt 0.367200 0.844100 +vt 0.290000 0.890200 +vt 0.281300 0.844100 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +usemtl 05___Default +f 45/31/22 46/32/22 47/33/22 48/34/22 +f 49/35/23 50/36/23 51/37/23 52/38/23 +f 50/39/24 49/40/24 47/41/24 46/42/24 +f 49/40/25 52/43/25 48/44/25 47/41/25 +o Hull_Front +v 2.412500 -0.480000 -1.599582 +v 2.412500 0.310002 -1.899582 +v 2.412500 0.780000 -0.459582 +v 2.412500 -0.480000 -0.459582 +v 1.587500 -0.480000 -1.599582 +v 1.587500 -0.480000 -0.459582 +v 1.587500 0.780000 -0.459582 +v 1.587500 0.310002 -1.899582 +vt 0.851600 0.796900 +vt 0.812800 0.591300 +vt 1.000000 0.469100 +vt 1.000000 0.796900 +vt 1.000000 1.000000 +vt 0.851600 1.000000 +vt 0.562500 0.796900 +vt 0.750000 0.796900 +vt 0.750000 1.000000 +vt 0.562500 1.000000 +vn 1.000000 -0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.950600 -0.310300 +vn 0.000000 -0.355000 -0.934900 +usemtl 05___Default +f 53/45/26 54/46/26 55/47/26 56/48/26 +f 57/45/27 58/48/27 59/47/27 60/46/27 +f 53/45/28 56/48/28 58/49/28 57/50/28 +f 55/51/29 54/52/29 60/53/29 59/54/29 +f 54/52/30 53/45/30 57/50/30 60/53/30 +o Hoverpad_Front_Right_Top_Glow +v 2.706068 0.572130 -0.711432 +v 2.631068 0.466068 -0.636432 +v 2.781068 0.253932 -0.786432 +v 2.856068 0.360000 -0.861432 +v 2.493932 0.572130 -0.923568 +v 2.643932 0.360000 -1.073568 +v 2.568932 0.253932 -0.998568 +v 2.418932 0.466068 -0.848568 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn 0.707100 0.000000 0.707100 +vn -0.707100 -0.000000 -0.707100 +vn 0.500000 0.707100 -0.500000 +vn 0.500000 -0.707100 -0.500000 +vn -0.500000 0.707100 0.500000 +usemtl Material__2 +f 61/55/31 62/56/31 63/57/31 64/58/31 +f 65/55/32 66/58/32 67/57/32 68/56/32 +f 61/58/33 64/59/33 66/60/33 65/55/33 +f 64/55/34 63/56/34 67/57/34 66/58/34 +f 62/57/35 61/58/35 65/55/35 68/56/35 +o Hull_Bottom +v 1.400000 -0.900000 0.200418 +v 1.700000 -0.900000 -0.459582 +v 2.300000 -0.900000 -0.459582 +v 2.600000 -0.900000 0.200418 +v 2.675000 -0.375000 -0.669582 +v 2.975000 -0.375000 -0.009582 +v 1.325000 -0.375000 -0.669582 +v 1.025000 -0.375000 -0.009582 +v 1.149998 -0.550002 0.860418 +v 1.025000 -0.375000 0.680418 +v 1.460000 -0.900000 0.200418 +v 1.460000 -0.550002 0.860418 +v 1.460000 -0.375000 0.680418 +v 1.460000 -0.375000 -0.009582 +v 2.975000 -0.375000 0.680418 +v 2.850002 -0.550002 0.860418 +v 2.540000 -0.900000 0.200418 +v 2.540000 -0.550002 0.860418 +v 2.540000 -0.375000 0.680418 +v 2.540000 -0.375000 -0.009582 +vt 0.488700 0.003900 +vt 0.448100 0.179700 +vt 0.368100 0.179700 +vt 0.327600 0.003900 +vt 0.238300 -0.000000 +vt 0.324200 -0.000000 +vt 0.351600 0.140600 +vt 0.265600 0.140600 +vt 0.498200 0.319800 +vt 0.318100 0.319800 +vt 0.152300 0.093800 +vt 0.175800 0.140600 +vt 0.066400 0.250000 +vt 0.152300 0.250000 +vt 0.152300 0.171900 +vt 0.066400 0.234400 +vt 0.175800 0.250000 +vt 0.152300 0.172100 +vt 0.265600 0.250000 +vn 0.000000 -1.000000 -0.000000 +vn 0.705400 -0.632100 -0.320600 +vn 0.000000 -0.371400 -0.928500 +vn -0.705400 -0.632100 -0.320600 +vn -0.813700 -0.581200 -0.000000 +vn 0.000000 -0.883500 0.468500 +vn 0.000000 0.717000 0.697100 +vn 0.000000 1.000000 0.000000 +vn 0.813700 -0.581200 -0.000000 +usemtl 05___Default +f 69/61/36 70/62/36 71/63/36 72/64/36 +f 72/65/37 71/66/37 73/67/37 74/68/37 +f 71/63/38 70/62/38 75/69/38 73/70/38 +f 70/66/39 69/65/39 76/68/39 75/67/39 +f 69/65/40 77/71/40 78/72/40 76/68/40 +f 79/73/41 80/74/41 77/75/41 69/76/41 +f 80/74/42 81/77/42 78/72/42 77/78/42 +f 81/77/43 82/79/43 76/68/43 78/72/43 +f 72/65/44 74/68/44 83/72/44 84/71/44 +f 85/73/41 72/76/41 84/75/41 86/74/41 +f 86/74/42 84/75/42 83/72/42 87/77/42 +f 87/77/43 83/72/43 74/68/43 88/79/43 +o Hoverpad_Rear_Left +v 1.092500 0.207168 0.495000 +v 1.092500 0.207168 0.375000 +v 1.092500 -0.032832 0.375000 +v 1.092500 -0.032832 0.495000 +v 1.332500 0.207168 0.495000 +v 1.332500 -0.032832 0.495000 +v 1.332500 -0.032832 0.375000 +v 1.332500 0.207168 0.375000 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +usemtl 05___Default +f 89/80/45 90/81/45 91/82/45 92/83/45 +f 93/80/46 94/83/46 95/82/46 96/81/46 +f 89/84/47 92/83/47 94/80/47 93/85/47 +f 92/83/48 91/82/48 95/81/48 94/80/48 +f 91/82/49 90/86/49 96/87/49 95/81/49 +f 90/82/50 89/83/50 93/80/50 96/81/50 +o Hoverpad_Rear_Left_Glow +v 1.062500 0.237168 0.525000 +v 1.062500 0.237168 0.375000 +v 1.062500 -0.062832 0.375000 +v 1.062500 -0.062832 0.525000 +v 1.362500 0.237168 0.525000 +v 1.362500 -0.062832 0.525000 +v 1.362500 -0.062832 0.375000 +v 1.362500 0.237168 0.375000 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn -1.000000 0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl Material__2 +f 97/88/51 98/89/51 99/90/51 100/91/51 +f 101/88/52 102/91/52 103/90/52 104/89/52 +f 97/91/53 100/92/53 102/93/53 101/88/53 +f 100/88/54 99/89/54 103/90/54 102/91/54 +f 98/90/55 97/91/55 101/88/55 104/89/55 +o Hoverpad_Attachment +v 1.475000 -0.175002 0.187500 +v 1.100000 0.199998 0.187500 +v 1.100000 0.199998 0.375000 +v 1.325000 -0.025002 0.375000 +v 1.325000 0.199998 0.187500 +v 0.950000 -0.175002 0.187500 +v 1.100000 -0.025002 0.375000 +v 1.325000 0.199998 0.375000 +v 1.325456 0.262500 -0.900000 +v 1.587956 0.262500 -0.900000 +v 1.587956 0.431250 -0.787500 +v 1.437956 0.431250 -0.787500 +v 1.437956 0.431250 -0.547818 +v 1.325456 0.262500 -0.579582 +v 1.587956 0.431250 -0.547818 +v 1.587956 -0.375000 -0.918750 +v 1.362500 -0.375000 -0.918750 +v 1.475000 -0.543750 -0.806250 +v 1.587956 -0.543750 -0.806250 +v 1.362500 -0.375000 -0.669582 +v 1.475000 -0.543750 -0.602082 +v 1.587956 -0.543750 -0.602082 +v 1.587956 -0.375000 -0.669582 +v 2.900000 0.199998 0.187500 +v 2.525000 -0.175002 0.187500 +v 2.675000 -0.025002 0.375000 +v 2.900000 0.199998 0.375000 +v 3.050000 -0.175002 0.187500 +v 2.675000 0.199998 0.187500 +v 2.675000 0.199998 0.375000 +v 2.900000 -0.025002 0.375000 +v 2.412044 0.262500 -0.900000 +v 2.674544 0.262500 -0.900000 +v 2.562044 0.431250 -0.787500 +v 2.412044 0.431250 -0.787500 +v 2.674544 0.262500 -0.579582 +v 2.562044 0.431250 -0.547818 +v 2.412044 0.431250 -0.547818 +v 2.637500 -0.375000 -0.918750 +v 2.412044 -0.375000 -0.918750 +v 2.412044 -0.543750 -0.806250 +v 2.525000 -0.543750 -0.806250 +v 2.525000 -0.543750 -0.602082 +v 2.637500 -0.375000 -0.669582 +v 2.412044 -0.543750 -0.602082 +v 2.412044 -0.375000 -0.669582 +vt 0.371100 0.375000 +vt 0.320300 0.375000 +vt 0.320300 0.429700 +vt 0.351600 0.429700 +vt 0.269500 0.453100 +vt 0.269500 0.375000 +vt 0.289100 0.375000 +vt 0.289100 0.414100 +vt 0.320300 0.414100 +vt 0.316400 0.453100 +vt 0.269500 0.382800 +vt 0.289100 0.382800 +vt 0.304700 0.414100 +vt 0.304700 0.453100 +vt 0.304700 0.382800 +vt 0.308600 0.382800 +vt 0.320300 0.445300 +vt 0.281300 0.445300 +vt 0.261700 0.382800 +vn 0.707100 0.707100 -0.000000 +vn -0.707100 0.707100 -0.000000 +vn 0.000000 -0.554700 0.832100 +vn 0.832000 -0.554700 -0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 0.554700 0.832100 +vn -0.832100 -0.554700 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.554700 0.832000 +vn -0.832100 0.554700 0.000000 +vn -1.000000 0.000000 0.000000 +usemtl 05___Default +f 105/94/56 106/95/56 107/96/56 108/97/56 +f 109/95/57 110/94/57 111/97/57 112/96/57 +f 113/98/58 114/99/58 115/100/58 116/101/58 +f 117/102/59 118/103/59 113/98/59 116/101/59 +f 119/95/60 117/102/60 116/101/60 115/100/60 +f 120/104/61 121/98/61 122/101/61 123/105/61 +f 125/106/62 124/107/62 121/98/62 122/101/62 +f 126/108/60 125/106/60 122/101/60 123/105/60 +f 127/109/63 126/110/63 123/111/63 120/112/63 +f 128/95/57 129/94/57 130/97/57 131/96/57 +f 132/94/56 133/95/56 134/96/56 135/97/56 +f 136/99/64 137/98/64 138/101/64 139/100/64 +f 140/103/62 141/102/62 138/101/62 137/98/62 +f 141/102/60 142/95/60 139/100/60 138/101/60 +f 143/98/61 144/104/61 145/105/61 146/101/61 +f 147/106/65 148/107/65 143/98/65 146/101/65 +f 147/106/60 149/108/60 145/105/60 146/101/60 +f 149/108/66 150/108/66 144/104/66 145/105/66 +o Left_Laser +v 1.025000 -0.112500 -1.200000 +v 0.912500 0.000000 -1.200000 +v 0.912500 0.000000 -0.600000 +v 1.025000 -0.112500 -0.600000 +v 1.025000 0.000000 -1.200000 +v 1.025000 0.000000 -0.600000 +v 0.912500 -0.112500 -0.600000 +v 0.912500 -0.112500 -1.200000 +v 0.968750 -0.056250 -1.200000 +v 0.968750 -0.056250 -0.600000 +v 1.193750 -0.056250 -0.600000 +v 1.193750 -0.056250 -1.200000 +vt 0.238300 0.914100 +vt 0.265600 0.914100 +vt 0.265600 0.703100 +vt 0.238300 0.703100 +vt 0.191400 0.703100 +vt 0.191400 0.914100 +vn 0.707100 0.707100 0.000000 +vn 0.707100 -0.707100 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl 05___Default +f 151/113/67 152/114/67 153/115/67 154/116/67 +f 155/113/68 156/116/68 157/115/68 158/114/68 +f 159/113/69 160/116/69 161/117/69 162/118/69 +o Hull_Rear +v 2.540000 -0.900000 0.200418 +v 2.540000 -0.270000 1.400418 +v 1.460000 -0.270000 1.400418 +v 1.460000 -0.900000 0.200418 +v 2.420000 0.247500 1.490418 +v 1.580000 0.247500 1.490418 +v 1.460000 0.270000 0.140418 +v 1.460000 -0.360000 -0.219582 +v 1.580000 0.780000 0.230418 +v 2.420000 0.780000 0.230418 +v 2.540000 0.270000 0.140418 +v 2.540000 -0.360000 -0.219582 +vt 0.496100 0.281300 +vt 0.652300 0.281300 +vt 0.652300 0.000000 +vt 0.496100 0.000000 +vt 0.722700 0.250000 +vt 0.722700 0.031300 +vt 0.570300 0.593800 +vt 0.722700 0.609400 +vt 0.640600 0.703100 +vt 0.722700 0.257800 +vt 0.789100 0.585900 +vt 0.886700 0.250000 +vt 0.886700 0.031300 +vn 0.000000 -0.885400 0.464800 +vn 0.000000 -0.171300 0.985200 +vn -1.000000 0.000000 0.000000 +vn -0.990300 0.127800 0.054200 +vn -0.992800 0.110500 0.047400 +vn -0.973600 0.210300 0.088900 +vn -0.973000 0.212200 0.090600 +vn 0.000000 0.921100 0.389300 +vn 0.973400 0.210700 0.090000 +vn 0.990400 0.127300 0.054600 +vn 0.992800 0.110300 0.046800 +vn 0.972900 0.213000 0.090000 +vn 1.000000 -0.000000 0.000000 +usemtl 05___Default +f 163/119/70 164/120/70 165/121/70 166/122/70 +f 164/120/71 167/123/71 168/124/71 165/121/71 +f 166/125/72 165/120/73 169/126/74 170/127/72 +f 165/120/73 168/128/75 171/129/76 169/126/74 +f 168/124/77 167/123/77 172/130/77 171/131/77 +f 167/128/78 164/120/79 173/126/80 172/129/81 +f 164/120/79 163/125/82 174/127/82 173/126/80 +o Right_Laser_Invert +v 3.087500 0.000000 -0.600000 +v 2.975000 -0.112500 -0.600000 +v 2.975000 -0.112500 -1.200000 +v 3.087500 0.000000 -1.200000 +v 3.087500 -0.112500 -0.600000 +v 3.087500 -0.112500 -1.200000 +v 2.975000 0.000000 -1.200000 +v 2.975000 0.000000 -0.600000 +v 2.806250 -0.056250 -0.600000 +v 2.806250 -0.056250 -1.200000 +v 3.031250 -0.056250 -1.200000 +v 3.031250 -0.056250 -0.600000 +vt 0.265600 0.703100 +vt 0.238300 0.703100 +vt 0.238300 0.914100 +vt 0.265600 0.914100 +vt 0.191400 0.703100 +vt 0.191400 0.914100 +vn 0.707100 -0.707100 -0.000000 +vn 0.707100 0.707100 0.000000 +vn 0.000000 -1.000000 -0.000000 +usemtl 05___Default +f 175/132/83 176/133/83 177/134/83 178/135/83 +f 179/132/84 180/135/84 181/134/84 182/133/84 +f 183/136/85 184/137/85 185/134/85 186/133/85 +o Hoverpad_Heavy___Glow002 +v 2.697380 -0.615636 -0.578166 +v 2.871548 -0.615636 -0.195984 +v 2.636252 -0.946602 -0.088752 +v 2.462084 -0.946602 -0.470940 +v 2.589818 -0.523290 -0.529152 +v 2.763992 -0.523290 -0.146964 +v 2.528696 -0.854250 -0.039738 +v 2.354522 -0.854250 -0.421920 +vt 0.535200 0.304700 +vt 0.589800 0.304700 +vt 0.589800 0.414100 +vt 0.535200 0.414100 +vt 0.515600 0.414100 +vt 0.515600 0.304700 +vn 0.717100 -0.615700 -0.326800 +vn 0.560200 0.788000 -0.255300 +vn 0.414700 -0.000000 0.910000 +vn -0.560200 -0.788000 0.255300 +vn -0.414700 -0.000000 -0.910000 +usemtl Material__2 +f 187/138/86 188/139/86 189/140/86 190/141/86 +f 191/142/87 192/143/87 188/138/87 187/141/87 +f 192/142/88 193/143/88 189/138/88 188/141/88 +f 193/142/89 194/143/89 190/138/89 189/141/89 +f 194/142/90 191/143/90 187/138/90 190/141/90 +o Left_Laser_Attachment +v 0.912500 -0.150000 -0.094290 +v 0.912500 -0.150000 -0.600000 +v 1.118750 -0.150000 -0.600000 +v 1.118750 -0.150000 -0.094290 +v 0.912500 0.037500 -0.164880 +v 1.118750 0.037500 -0.164880 +v 1.118750 0.037500 -0.600000 +v 0.912500 0.037500 -0.600000 +vt 0.281300 0.843700 +vt 0.343800 0.843700 +vt 0.343800 0.796900 +vt 0.281300 0.796900 +vt 0.290000 0.890600 +vt 0.290000 0.937500 +vt 0.343800 0.937500 +vt 0.343800 0.890600 +vt 0.367200 0.844100 +vt 0.343800 0.844100 +vt 0.343800 0.890200 +vt 0.367200 0.890200 +vt 0.281300 0.844100 +vt 0.290000 0.890200 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 0.000000 0.000000 +usemtl 05___Default +f 195/144/91 196/145/91 197/146/91 198/147/91 +f 199/148/92 200/149/92 201/150/92 202/151/92 +f 197/152/93 196/153/93 202/154/93 201/155/93 +f 196/153/94 195/156/94 199/157/94 202/154/94 +o Hoverpad_Front_Right_Bottom_Glow +v 2.583932 -0.480000 -1.073568 +v 2.508932 -0.373932 -0.998568 +v 2.721068 -0.373932 -0.786432 +v 2.796068 -0.480000 -0.861432 +v 2.433932 -0.692130 -0.923568 +v 2.646068 -0.692130 -0.711432 +v 2.571068 -0.586068 -0.636432 +v 2.358932 -0.586068 -0.848568 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn 0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 0.500000 +vn 0.500000 -0.707100 -0.500000 +vn 0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +usemtl Material__2 +f 203/158/95 204/159/95 205/160/95 206/161/95 +f 207/158/96 208/161/96 209/160/96 210/159/96 +f 203/161/97 206/162/97 208/163/97 207/158/97 +f 206/158/98 205/159/98 209/160/98 208/161/98 +f 204/160/99 203/161/99 207/158/99 210/159/99 +o Hoverpad_Heavy___Glow003 +v 1.790000 -0.710430 0.881304 +v 2.210000 -0.710430 0.881304 +v 2.210000 -0.515178 1.253160 +v 1.790000 -0.515178 1.253160 +v 1.790000 -0.577626 0.811572 +v 2.210000 -0.577626 0.811572 +v 2.210000 -0.382374 1.183428 +v 1.790000 -0.382374 1.183428 +vt 0.535200 0.304700 +vt 0.589800 0.304700 +vt 0.589800 0.414100 +vt 0.535200 0.414100 +vt 0.515600 0.414100 +vt 0.515600 0.304700 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.464900 0.885400 +vn -1.000000 0.000000 0.000000 +usemtl Material__2 +f 211/164/100 212/165/100 213/166/100 214/167/100 +f 215/168/101 216/169/101 212/164/101 211/167/101 +f 216/168/102 217/169/102 213/164/102 212/167/102 +f 217/168/103 218/169/103 214/164/103 213/167/103 +f 218/168/104 215/169/104 211/164/104 214/167/104 +o Hull_Center +v 0.912500 -0.375000 0.500418 +v 0.912500 -0.375000 -0.009582 +v 1.587500 -0.375000 -0.174582 +v 1.460000 -0.375000 0.380418 +v 2.540000 -0.375000 0.380418 +v 2.412500 -0.375000 -0.174582 +v 3.087500 -0.375000 -0.009582 +v 3.087500 -0.375000 0.500418 +v 1.437500 -0.375000 -1.359582 +v 1.587500 -0.375000 -1.359582 +v 2.412500 -0.375000 -1.359582 +v 2.562500 -0.375000 -1.359582 +v 0.912500 0.262500 0.260418 +v 1.460000 0.262500 0.140418 +v 1.587500 0.262500 -0.414582 +v 0.912500 0.262500 -0.249582 +v 2.540000 0.262500 0.140418 +v 3.087500 0.262500 0.260418 +v 3.087500 0.262500 -0.249582 +v 2.412500 0.262500 -0.414582 +v 1.587500 0.262500 -1.599582 +v 1.437500 0.262500 -1.599582 +v 2.562500 0.262500 -1.599582 +v 2.412500 0.262500 -1.599582 +vt 0.000000 0.824000 +vt 0.066500 0.824000 +vt 0.088100 1.000000 +vt 0.015700 0.966800 +vt 0.242600 0.960800 +vt 0.242600 0.999900 +vt 0.561500 0.824800 +vt 0.545900 0.966800 +vt 0.474000 0.999900 +vt 0.495400 0.824800 +vt 0.320300 1.000000 +vt 0.320300 0.961100 +vt 0.343800 0.632800 +vt 0.273400 0.632800 +vt 0.273400 0.789100 +vt 0.343800 0.789100 +vt 0.410200 0.632800 +vt 0.441400 0.789100 +vt 0.375000 0.789100 +vt 0.585900 0.632800 +vt 0.617200 0.789100 +vt 0.242200 0.960900 +vt 0.242200 1.000000 +vt 0.320300 0.960900 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.200900 0.345100 0.916800 +vn -0.200900 0.345100 0.916800 +vn 1.000000 0.000000 0.000000 +vn 0.988300 -0.053800 -0.142800 +vn 0.971000 -0.084200 -0.223700 +vn 0.923400 -0.135200 -0.359100 +vn 0.000000 -0.352300 -0.935900 +vn -0.923400 -0.135200 -0.359100 +vn -0.988300 -0.053800 -0.142800 +vn -0.971000 -0.084200 -0.223700 +vn -1.000000 0.000000 0.000000 +usemtl 05___Default +f 219/170/105 220/171/105 221/172/105 222/173/105 +f 223/173/105 224/172/105 225/171/105 226/170/105 +f 220/171/105 227/174/105 228/175/105 221/172/105 +f 224/172/105 229/175/105 230/174/105 225/171/105 +f 231/176/106 232/177/106 233/178/106 234/179/106 +f 235/177/106 236/176/106 237/179/106 238/178/106 +f 234/179/106 233/178/106 239/180/106 240/181/106 +f 238/178/106 237/179/106 241/181/106 242/180/106 +f 219/182/107 222/183/107 232/184/107 231/185/107 +f 223/183/108 226/182/108 236/185/108 235/184/108 +f 226/182/109 225/186/110 237/187/111 236/188/109 +f 225/186/110 230/189/112 241/190/112 237/187/111 +f 230/191/113 229/192/113 242/180/113 241/193/113 +f 228/192/113 227/191/113 240/193/113 239/180/113 +f 227/189/114 220/186/115 234/187/116 240/190/114 +f 220/186/115 219/182/117 231/188/117 234/187/116 +o Hoverpad_Heavy___Glow001 +v 1.537574 -0.947496 -0.471096 +v 1.363400 -0.947496 -0.088908 +v 1.128104 -0.616530 -0.196140 +v 1.302278 -0.616530 -0.578322 +v 1.645130 -0.855150 -0.422076 +v 1.470962 -0.855150 -0.039894 +v 1.235666 -0.524184 -0.147120 +v 1.409834 -0.524184 -0.529308 +vt 0.535200 0.304700 +vt 0.589800 0.304700 +vt 0.589800 0.414100 +vt 0.535200 0.414100 +vt 0.515600 0.414100 +vt 0.515600 0.304700 +vn -0.717100 -0.615700 -0.326800 +vn 0.560200 -0.788000 0.255300 +vn -0.414700 0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +usemtl Material__2 +f 243/194/118 244/195/118 245/196/118 246/197/118 +f 247/198/119 248/199/119 244/194/119 243/197/119 +f 248/198/120 249/199/120 245/194/120 244/197/120 +f 249/198/121 250/199/121 246/194/121 245/197/121 +f 250/198/122 247/199/122 243/194/122 246/197/122 +o Hoverpad_Heavy_Rear +v 1.820000 -0.669924 0.893922 +v 2.180000 -0.669924 0.893922 +v 2.180000 -0.502566 1.212654 +v 1.820000 -0.502566 1.212654 +v 1.820000 -0.563682 0.838134 +v 2.180000 -0.563682 0.838134 +v 2.180000 -0.396318 1.156866 +v 1.820000 -0.396318 1.156866 +vt 0.531300 0.429700 +vt 0.578100 0.429700 +vt 0.578100 0.523400 +vt 0.531300 0.523400 +vt 0.515600 0.523400 +vt 0.515600 0.429700 +vn 0.000000 -0.885400 0.464900 +vn 0.000000 -0.464900 -0.885400 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.464900 0.885400 +vn -1.000000 0.000000 0.000000 +usemtl 05___Default +f 251/200/123 252/201/123 253/202/123 254/203/123 +f 255/204/124 256/205/124 252/200/124 251/203/124 +f 256/204/125 257/205/125 253/200/125 252/203/125 +f 257/204/126 258/205/126 254/200/126 253/203/126 +f 258/204/127 255/205/127 251/200/127 254/203/127 +o Hull_Top +v 2.787500 0.262500 -0.579582 +v 2.675000 0.900000 -0.459582 +v 2.675000 0.900000 0.260418 +v 2.787500 0.262500 0.140418 +v 1.212500 0.262500 -0.579582 +v 1.212500 0.262500 0.140418 +v 1.325000 0.900000 0.260418 +v 1.325000 0.900000 -0.459582 +vt 0.066400 0.820300 +vt 0.082000 0.648400 +vt 0.175800 0.648400 +vt 0.160200 0.820300 +vt 0.257800 0.679700 +vt 0.175800 0.296900 +vt 0.257800 0.265600 +vt 0.082000 0.296900 +vt 0.000000 0.679700 +vt -0.000000 0.265600 +vn 0.984800 0.173800 0.000000 +vn -0.984800 0.173800 0.000000 +vn 0.000000 -0.185000 0.982700 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.185000 -0.982700 +usemtl 05___Default +f 259/206/128 260/207/128 261/208/128 262/209/128 +f 263/206/129 264/209/129 265/208/129 266/207/129 +f 262/210/130 261/208/130 265/211/130 264/212/130 +f 261/208/131 260/207/131 266/213/131 265/211/131 +f 260/207/132 259/214/132 263/215/132 266/213/132 +o Hoverpad_Front_Left_Top_Glow +v 1.506068 0.572130 -0.923568 +v 1.581068 0.466068 -0.848568 +v 1.431068 0.253932 -0.998568 +v 1.356068 0.360000 -1.073568 +v 1.293932 0.572130 -0.711432 +v 1.143932 0.360000 -0.861432 +v 1.218932 0.253932 -0.786432 +v 1.368932 0.466068 -0.636432 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn 0.707100 0.000000 -0.707100 +vn -0.707100 -0.000000 0.707100 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn 0.500000 0.707100 0.500000 +usemtl Material__2 +f 267/216/133 268/217/133 269/218/133 270/219/133 +f 271/216/134 272/219/134 273/218/134 274/217/134 +f 267/219/135 270/220/135 272/221/135 271/216/135 +f 270/216/136 269/217/136 273/218/136 272/219/136 +f 268/218/137 267/219/137 271/216/137 274/217/137 +o Hoverpad_Rear_Right +v 2.667500 0.207168 0.495000 +v 2.667500 0.207168 0.375000 +v 2.667500 -0.032832 0.375000 +v 2.667500 -0.032832 0.495000 +v 2.907500 0.207168 0.495000 +v 2.907500 -0.032832 0.495000 +v 2.907500 -0.032832 0.375000 +v 2.907500 0.207168 0.375000 +vt 0.324200 0.617200 +vt 0.308600 0.617200 +vt 0.308600 0.554700 +vt 0.324200 0.554700 +vt 0.355500 0.554700 +vt 0.355500 0.617200 +vt 0.277300 0.554700 +vt 0.277300 0.617200 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +usemtl 05___Default +f 275/222/138 276/223/138 277/224/138 278/225/138 +f 279/222/139 280/225/139 281/224/139 282/223/139 +f 275/226/140 278/225/140 280/222/140 279/227/140 +f 278/225/141 277/224/141 281/223/141 280/222/141 +f 277/224/142 276/228/142 282/229/142 281/223/142 +f 276/224/143 275/225/143 279/222/143 282/223/143 +o Hoverpad_Heavy_Left +v 1.380548 -0.905388 -0.114066 +v 1.178864 -0.621702 -0.205974 +v 1.328156 -0.621702 -0.533562 +v 1.529840 -0.905388 -0.441648 +v 1.466594 -0.831510 -0.074850 +v 1.264910 -0.547824 -0.166764 +v 1.414202 -0.547824 -0.494346 +v 1.615886 -0.831510 -0.402438 +vt 0.531300 0.429700 +vt 0.578100 0.429700 +vt 0.578100 0.523400 +vt 0.531300 0.523400 +vt 0.515600 0.523400 +vt 0.515600 0.429700 +vn -0.717100 -0.615700 -0.326800 +vn -0.414700 -0.000000 0.910000 +vn -0.560200 0.788000 -0.255300 +vn 0.414700 0.000000 -0.910000 +vn 0.560200 -0.788000 0.255300 +usemtl 05___Default +f 283/230/144 284/231/144 285/232/144 286/233/144 +f 287/234/145 288/235/145 284/230/145 283/233/145 +f 288/234/146 289/235/146 285/230/146 284/233/146 +f 289/234/147 290/235/147 286/230/147 285/233/147 +f 290/234/148 287/235/148 283/230/148 286/233/148 +o Hoverpad_Heavy_Right +v 2.820788 -0.620808 -0.205818 +v 2.619110 -0.904494 -0.113910 +v 2.469818 -0.904494 -0.441492 +v 2.671502 -0.620808 -0.533406 +v 2.734742 -0.546930 -0.166608 +v 2.533064 -0.830610 -0.074694 +v 2.383772 -0.830610 -0.402282 +v 2.585456 -0.546930 -0.494190 +vt 0.531300 0.429700 +vt 0.578100 0.429700 +vt 0.578100 0.523400 +vt 0.531300 0.523400 +vt 0.515600 0.523400 +vt 0.515600 0.429700 +vn 0.717100 -0.615700 -0.326800 +vn 0.414700 0.000000 0.910000 +vn -0.560300 -0.788000 0.255300 +vn -0.414700 0.000000 -0.910000 +vn 0.560200 0.788000 -0.255300 +usemtl 05___Default +f 291/236/149 292/237/149 293/238/149 294/239/149 +f 295/240/150 296/241/150 292/236/150 291/239/150 +f 296/240/151 297/241/151 293/236/151 292/239/151 +f 297/240/152 298/241/152 294/236/152 293/239/152 +f 298/240/153 295/241/153 291/236/153 294/239/153 +o Hoverpad_Rear_Right_Glow +v 2.637500 0.237168 0.525000 +v 2.637500 0.237168 0.375000 +v 2.637500 -0.062832 0.375000 +v 2.637500 -0.062832 0.525000 +v 2.937500 0.237168 0.525000 +v 2.937500 -0.062832 0.525000 +v 2.937500 -0.062832 0.375000 +v 2.937500 0.237168 0.375000 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl Material__2 +f 299/242/154 300/243/154 301/244/154 302/245/154 +f 303/242/155 304/245/155 305/244/155 306/243/155 +f 299/245/156 302/246/156 304/247/156 303/242/156 +f 302/242/157 301/243/157 305/244/157 304/245/157 +f 300/244/158 299/245/158 303/242/158 306/243/158 +o Main_Laser_Base +v 2.112500 -0.843750 -1.068750 +v 2.112500 -0.543750 -0.768750 +v 2.112500 -0.543750 -0.459582 +v 2.112500 -0.843750 -0.459582 +v 1.887500 -0.843750 -1.068750 +v 1.887500 -0.843750 -0.459582 +v 1.887500 -0.543750 -0.459582 +v 1.887500 -0.543750 -0.768750 +vt 0.968800 0.195300 +vt 0.933600 0.265600 +vt 0.898400 0.265600 +vt 0.898400 0.195300 +vt 0.968800 0.132800 +vt 0.898400 0.132800 +vt 0.933600 0.328100 +vt 0.898400 0.328100 +vt 0.968800 0.265600 +vt 0.968800 0.328100 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +usemtl 05___Default +f 307/248/159 308/249/159 309/250/159 310/251/159 +f 311/248/160 312/251/160 313/250/160 314/249/160 +f 307/252/161 310/253/161 312/251/161 311/248/161 +f 309/250/162 308/249/162 314/254/162 313/255/162 +f 308/249/163 307/256/163 311/257/163 314/254/163 +o Right_Laser +v 2.975000 -0.112500 -0.600000 +v 3.087500 0.000000 -0.600000 +v 3.087500 0.000000 -1.200000 +v 2.975000 -0.112500 -1.200000 +v 3.087500 -0.112500 -1.200000 +v 3.087500 -0.112500 -0.600000 +v 2.975000 0.000000 -0.600000 +v 2.975000 0.000000 -1.200000 +v 2.806250 -0.056250 -1.200000 +v 2.806250 -0.056250 -0.600000 +v 3.031250 -0.056250 -0.600000 +v 3.031250 -0.056250 -1.200000 +vt 0.238300 0.703100 +vt 0.265600 0.703100 +vt 0.265600 0.914100 +vt 0.238300 0.914100 +vt 0.191400 0.914100 +vt 0.191400 0.703100 +vn -0.707100 0.707100 0.000000 +vn -0.707100 -0.707100 -0.000000 +vn 0.000000 1.000000 0.000000 +usemtl 05___Default +f 315/258/164 316/259/164 317/260/164 318/261/164 +f 319/260/165 320/259/165 321/258/165 322/261/165 +f 323/262/166 324/263/166 325/258/166 326/261/166 +o Hoverpad_Front_Left_Bottom_Glow +v 1.566068 -0.692130 -0.923568 +v 1.641068 -0.586068 -0.848568 +v 1.428932 -0.586068 -0.636432 +v 1.353932 -0.692130 -0.711432 +v 1.416068 -0.480000 -1.073568 +v 1.203932 -0.480000 -0.861432 +v 1.278932 -0.373932 -0.786432 +v 1.491068 -0.373932 -0.998568 +vt 0.293000 0.539100 +vt 0.277300 0.539100 +vt 0.277300 0.460900 +vt 0.293000 0.460900 +vt 0.332000 0.460900 +vt 0.332000 0.539100 +vn 0.500000 -0.707100 0.500000 +vn -0.500000 0.707100 -0.500000 +vn -0.500000 -0.707100 -0.500000 +vn -0.707100 0.000000 0.707100 +vn 0.707100 0.000000 -0.707100 +usemtl Material__2 +f 327/264/167 328/265/167 329/266/167 330/267/167 +f 331/264/168 332/267/168 333/266/168 334/265/168 +f 327/267/169 330/268/169 332/269/169 331/264/169 +f 330/264/170 329/265/170 333/266/170 332/267/170 +f 328/266/171 327/267/171 331/264/171 334/265/171 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_deco_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_deco_model.json new file mode 100644 index 00000000..ca9d8300 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_deco_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftcore:blocks/screen_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_0_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_0_model.json new file mode 100644 index 00000000..f624f378 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_0_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/asteroid0" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_1_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_1_model.json new file mode 100644 index 00000000..b1a6d4ac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/asteroid1" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_2_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_2_model.json new file mode 100644 index 00000000..d6d3bf86 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/asteroid_rock_2_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/asteroid2" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cobblestone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cobblestone_model.json new file mode 100644 index 00000000..b752904e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cobblestone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/cobblestone" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/crashed_probe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/crashed_probe.json new file mode 100644 index 00000000..02bfe347 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/crashed_probe.json @@ -0,0 +1,477 @@ +{ + "credit": "Created by: 0.2 (Minecraft Username: IO2I", + "texture_size": [32, 32], + "textures": { + "0": "galacticraftplanets:blocks/probe", + "1": "galacticraftplanets:blocks/venus_rock_1", + "particle": "galacticraftplanets:blocks/probe" + }, + "elements": [ + { + "name": "core", + "from": [4, -1, 4], + "to": [12, 7, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "east": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "south": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "west": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#0"} + } + }, + { + "name": "east", + "from": [12, -1, 4], + "to": [13, 7, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [15.5, 0, 16, 4], "texture": "#0"}, + "east": {"uv": [0, 8, 4, 12], "rotation": 270, "texture": "#0"}, + "south": {"uv": [15.5, 0, 16, 4], "rotation": 180, "texture": "#0"}, + "up": {"uv": [12, 4, 16, 4.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [12, 4, 16, 4.5], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "west", + "from": [3, -1, 4], + "to": [4, 7, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [15.5, 0, 16, 4], "texture": "#0"}, + "south": {"uv": [15.5, 0, 16, 4], "rotation": 180, "texture": "#0"}, + "west": {"uv": [8, 8, 12, 12], "rotation": 180, "texture": "#0"}, + "up": {"uv": [12, 4, 16, 4.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [12, 4, 16, 4.5], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "south", + "from": [4, -1, 12], + "to": [12, 7, 13], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "east": {"uv": [15.5, 0, 16, 4], "rotation": 180, "texture": "#0"}, + "south": {"uv": [12, 8, 16, 12], "rotation": 90, "texture": "#0"}, + "west": {"uv": [15.5, 0, 16, 4], "rotation": 90, "texture": "#0"}, + "up": {"uv": [12, 4, 16, 4.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [12, 4, 16, 4.5], "texture": "#0"} + } + }, + { + "name": "north", + "from": [4, -1, 3], + "to": [12, 7, 4], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [4, 8, 8, 12], "texture": "#0"}, + "east": {"uv": [15.5, 0, 16, 4], "rotation": 180, "texture": "#0"}, + "west": {"uv": [15.5, 0, 16, 4], "texture": "#0"}, + "up": {"uv": [12, 4, 16, 4.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [12, 4, 16, 4.5], "texture": "#0"} + } + }, + { + "name": "top", + "from": [4, 7, 4], + "to": [12, 8, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [12, 4, 16, 4.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [12, 4, 16, 4.25], "rotation": 180, "texture": "#0"}, + "south": {"uv": [12, 4, 16, 4.5], "texture": "#0"}, + "west": {"uv": [12, 4, 16, 4.25], "texture": "#0"}, + "up": {"uv": [4, 4, 8, 8], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "bottom", + "from": [4, -2, 4], + "to": [12, -1, 12], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [12, 4, 16, 4.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [12, 4, 16, 4.25], "rotation": 180, "texture": "#0"}, + "south": {"uv": [12, 4, 16, 4.5], "texture": "#0"}, + "west": {"uv": [12, 4, 16, 4.25], "texture": "#0"}, + "down": {"uv": [8, 4, 12, 8], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "1", + "from": [0, 7, 3], + "to": [8, 8, 4], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [9, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [8.5, 4.5, 9, 5], "texture": "#0"}, + "south": {"uv": [9, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [9, 5.5, 11, 6], "texture": "#0"}, + "down": {"uv": [8.5, 7, 10.5, 7.5], "texture": "#0"} + } + }, + { + "name": "2", + "from": [0, -2, 3], + "to": [8, -1, 4], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [9, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [8.5, 4.5, 9, 5], "texture": "#0"}, + "south": {"uv": [9, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [9, 5.5, 11, 6], "texture": "#0"}, + "down": {"uv": [8.5, 7, 10.5, 7.5], "texture": "#0"} + } + }, + { + "name": "3", + "from": [0, -2, 12], + "to": [8, -1, 13], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [9, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [8.5, 4.5, 9, 5], "texture": "#0"}, + "south": {"uv": [9, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [9, 5.5, 11, 6], "texture": "#0"}, + "down": {"uv": [8.5, 7, 10.5, 7.5], "texture": "#0"} + } + }, + { + "name": "4", + "from": [0, 7, 12], + "to": [8, 8, 13], + "rotation": {"angle": -22.5, "axis": "z", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [9, 6.5, 11, 7], "texture": "#0"}, + "east": {"uv": [8.5, 4.5, 9, 5], "texture": "#0"}, + "south": {"uv": [9, 5, 11, 5.5], "texture": "#0"}, + "west": {"uv": [9, 6, 9.5, 6.5], "texture": "#0"}, + "up": {"uv": [9, 5.5, 11, 6], "texture": "#0"}, + "down": {"uv": [8.5, 7, 10.5, 7.5], "texture": "#0"} + } + }, + { + "name": "1", + "from": [15, -2, 0], + "to": [16, 0, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 0.5, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 0.5, 8], "texture": "#1"} + } + }, + { + "name": "2", + "from": [7, 4, 0], + "to": [11, 5, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 1, 16, 1.5], "texture": "#1"}, + "up": {"uv": [0, 0, 4, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + }, + { + "name": "3", + "from": [11, 4, 2], + "to": [12, 5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 12, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 6, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 12], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 6], "texture": "#1"} + } + }, + { + "name": "19", + "from": [6, 4, 2], + "to": [7, 5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 12, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 6, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 12], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 6], "texture": "#1"} + } + }, + { + "name": "4", + "from": [5, 3, 3], + "to": [14, 4, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 9, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 10, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 9, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 5, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 9, 10], "texture": "#1"}, + "down": {"uv": [0, 0, 5, 5], "texture": "#1"} + } + }, + { + "name": "5", + "from": [3, 2, 4], + "to": [16, 3, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 4, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 13, 8], "texture": "#1"}, + "down": {"uv": [0, 0, 7, 4], "texture": "#1"} + } + }, + { + "name": "6", + "from": [10, 1, 2], + "to": [16, 2, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 12, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 6, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 6, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 6, 12], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 6], "texture": "#1"} + } + }, + { + "name": "7", + "from": [10, 2, 1], + "to": [14, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 4, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 14, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 4, 14], "rotation": 180, "texture": "#1"}, + "down": {"uv": [0, 0, 2, 7], "texture": "#1"} + } + }, + { + "name": "8", + "from": [7, -2, 0], + "to": [12, 4, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 5, 6], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 3], "texture": "#1"}, + "south": {"uv": [0, 0, 5, 6], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 3], "texture": "#1"}, + "up": {"uv": [2, 0, 7, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 2.5, 8], "texture": "#1"} + } + }, + { + "name": "9", + "from": [12, -2, 0], + "to": [15, 1, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 1.5], "texture": "#1"}, + "south": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 3, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1.5, 8], "texture": "#1"} + } + }, + { + "name": "10", + "from": [5, -2, 0], + "to": [7, 3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 2.5], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 5], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 2.5], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + }, + { + "name": "11", + "from": [5, 3, 0], + "to": [7, 4, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 7.5, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 7.5, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 15], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 7.5], "texture": "#1"} + } + }, + { + "name": "12", + "from": [3, -2, 0], + "to": [5, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 4], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 4], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + }, + { + "name": "13", + "from": [3, 2, 1], + "to": [5, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 7.5, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 7.5, 0.5], "texture": "#1"}, + "up": {"uv": [2, 2, 4, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 7.5], "texture": "#1"} + } + }, + { + "name": "14", + "from": [1, -2, 0], + "to": [3, 1, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 3], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 1.5], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 3], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + }, + { + "name": "15", + "from": [0, -2, 0], + "to": [1, 0, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 0.5, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#1"}, + "up": {"uv": [2, 0, 2.5, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 0.5, 8], "texture": "#1"} + } + }, + { + "name": "16", + "from": [15, 0, 1], + "to": [16, 1, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 14, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 7], "texture": "#1"}, + "down": {"uv": [0, 0, 0.5, 7], "texture": "#1"} + } + }, + { + "name": "17", + "from": [2, 1, 1], + "to": [3, 2, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 7, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 0.5, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 14, 0.5], "texture": "#1"}, + "up": {"uv": [0, 0, 0.5, 14], "texture": "#1"}, + "down": {"uv": [0, 0, 0.5, 7], "texture": "#1"} + } + }, + { + "name": "18", + "from": [12, 1, 0], + "to": [14, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 0.5], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 0.5], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 0.5], "texture": "#1"}, + "up": {"uv": [1, 0, 3, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 8], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 90, 0], + "translation": [0, 14, 0], + "scale": [0.8, 0.8, 0.8] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "core", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, + { + "name": "antenna", + "origin": [8, 8, 8], + "children": [7, 8, 9, 10] + } + ] + }, + { + "name": "ground", + "origin": [8, 8, 8], + "children": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/creeper_egg.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/creeper_egg.json new file mode 100644 index 00000000..d68b7c05 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/creeper_egg.json @@ -0,0 +1,98 @@ +{ + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "galacticraftplanets:blocks/creeper_egg", + "all": "galacticraftplanets:blocks/creeper_egg" + }, + "elements": [ + { "from": [ 6, 15, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#all" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#all" }, + "north": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, + "south": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, + "west": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" }, + "east": { "uv": [ 6, 15, 10, 16 ], "texture": "#all" } + } + }, + { "from": [ 5, 14, 5 ], + "to": [ 11, 15, 11 ], + "faces": { + "down": { "uv": [ 5, 5, 11, 11 ], "texture": "#all" }, + "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#all" }, + "north": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, + "south": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, + "west": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" }, + "east": { "uv": [ 5, 14, 11, 15 ], "texture": "#all" } + } + }, + { "from": [ 5, 13, 5 ], + "to": [ 11, 14, 11 ], + "faces": { + "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#all" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#all" }, + "north": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, + "south": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, + "west": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" }, + "east": { "uv": [ 4, 13, 12, 14 ], "texture": "#all" } + } + }, + { "from": [ 3, 11, 3 ], + "to": [ 13, 13, 13 ], + "faces": { + "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "north": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, + "south": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, + "west": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" }, + "east": { "uv": [ 3, 11, 13, 13 ], "texture": "#all" } + } + }, + { "from": [ 2, 8, 2 ], + "to": [ 14, 11, 14 ], + "faces": { + "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "north": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, + "south": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, + "west": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" }, + "east": { "uv": [ 2, 8, 14, 11 ], "texture": "#all" } + } + }, + { "from": [ 1, 3, 1 ], + "to": [ 15, 8, 15 ], + "faces": { + "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#all" }, + "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#all" }, + "north": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, + "south": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, + "west": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" }, + "east": { "uv": [ 1, 3, 15, 8 ], "texture": "#all" } + } + }, + { "from": [ 2, 1, 2 ], + "to": [ 14, 3, 14 ], + "faces": { + "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#all" }, + "north": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, + "south": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, + "west": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" }, + "east": { "uv": [ 2, 1, 14, 3 ], "texture": "#all" } + } + }, + { "from": [ 3, 0, 3 ], + "to": [ 13, 1, 13 ], + "faces": { + "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#all" }, + "north": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, + "south": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, + "west": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" }, + "east": { "uv": [ 3, 0, 13, 1 ], "texture": "#all" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cryo_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cryo_0.json new file mode 100644 index 00000000..00f637f2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/cryo_0.json @@ -0,0 +1,185 @@ +{ +"parent": "block/block", +"textures": { + "texture": "galacticraftcore:blocks/cryo_0", + "particle": "galacticraftcore:blocks/cryo_0", + "cryo_1": "galacticraftcore:blocks/cryo_1" +}, +"display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } +}, +"elements": [ +{ + "from": [ 0, 0, 0 ], + "to": [ 16, 2, 13 ], + "faces": { + "down": { "uv": [ 16, 13, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 13 ], "texture": "#texture" }, + "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 0, 14, 13, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3, 14, 16, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 0, 13 ], + "to": [ 16, 1, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 13 ], "texture": "#texture" }, + "up": { "uv": [ 0, 13, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "west": { "uv": [ 13, 15, 16, 16 ], "texture": "#texture" }, + "east": { "uv": [ 0, 15, 3, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 2, 0 ], + "to": [ 2, 16, 8 ], + "faces": { + "down": { "uv": [ 16, 8, 14, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 2, 8 ], "texture": "#texture" }, + "north": { "uv": [ 14, 0, 16, 14 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 2, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 14 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 16, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 14, 2, 0 ], + "to": [ 16, 16, 8 ], + "faces": { + "down": { "uv": [ 2, 8, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 14, 0, 16, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 2, 14 ], "texture": "#texture" }, + "south": { "uv": [ 14, 0, 16, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 8, 14 ], "texture": "#texture" }, + "east": { "uv": [ 8, 0, 16, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 2, 2, 0 ], + "to": [ 14, 16, 1 ], + "faces": { + "down": { "uv": [ 14, 1, 2, 0 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 14, 1 ], "texture": "#texture" }, + "north": { "uv": [ 2, 0, 14, 14 ], "texture": "#texture" }, + "south": { "uv": [ 2, 0, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 14 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 0, 2, 8 ], + "to": [ 2, 4, 10 ], + "faces": { + "down": { "uv": [ 16, 10, 14, 8 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 2, 10 ], "texture": "#texture" }, + "north": { "uv": [ 14, 12, 16, 14 ], "texture": "#texture" }, + "south": { "uv": [ 0, 12, 2, 14 ], "texture": "#texture" }, + "west": { "uv": [ 8, 12, 10, 14 ], "texture": "#texture" }, + "east": { "uv": [ 6, 12, 8, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 14, 2, 8 ], + "to": [ 16, 4, 10 ], + "faces": { + "down": { "uv": [ 2, 10, 0, 8 ], "texture": "#texture" }, + "up": { "uv": [ 14, 8, 16, 10 ], "texture": "#texture" }, + "north": { "uv": [ 0, 12, 2, 14 ], "texture": "#texture" }, + "south": { "uv": [ 14, 12, 16, 14 ], "texture": "#texture" }, + "west": { "uv": [ 8, 12, 10, 14 ], "texture": "#texture" }, + "east": { "uv": [ 6, 12, 8, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 14, 14 ], + "to": [ 13, 16, 15 ], + "faces": { + "down": { "uv": [ 13, 15, 3, 14 ], "texture": "#cryo_1" }, + "up": { "uv": [ 3, 14, 13, 15 ], "texture": "#cryo_1" }, + "north": { "uv": [ 3, 0, 13, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 3, 0, 13, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 14, 0, 15, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 1, 0, 2, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 14, 12 ], + "to": [ 3, 16, 14 ], + "faces": { + "down": { "uv": [ 14, 14, 13, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 2, 12, 3, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 13, 0, 14, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 2, 0, 3, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 0, 14, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 0, 4, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 13, 14, 12 ], + "to": [ 14, 16, 14 ], + "faces": { + "down": { "uv": [ 3, 14, 2, 12 ], "texture": "#cryo_1" }, + "up": { "uv": [ 13, 12, 14, 14 ], "texture": "#cryo_1" }, + "north": { "uv": [ 2, 0, 3, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 13, 0, 14, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 12, 0, 14, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 2, 0, 4, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 1, 14, 8 ], + "to": [ 2, 16, 12 ], + "faces": { + "down": { "uv": [ 15, 12, 14, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 1, 8, 2, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 14, 0, 15, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 1, 0, 2, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 0, 12, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 0, 8, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 14, 14, 8 ], + "to": [ 15, 16, 12 ], + "faces": { + "down": { "uv": [ 2, 12, 1, 8 ], "texture": "#cryo_1" }, + "up": { "uv": [ 14, 8, 15, 12 ], "texture": "#cryo_1" }, + "north": { "uv": [ 1, 0, 2, 2 ], "texture": "#cryo_1" }, + "south": { "uv": [ 14, 0, 15, 2 ], "texture": "#cryo_1" }, + "west": { "uv": [ 8, 0, 12, 2 ], "texture": "#cryo_1" }, + "east": { "uv": [ 4, 0, 8, 2 ], "texture": "#cryo_1" } + } +}, +{ + "from": [ 2, 2, 1 ], + "to": [ 3, 16, 2 ], + "faces": { + "down": { "uv": [ 14, 2, 13, 1 ], "texture": "#texture" }, + "up": { "uv": [ 2, 1, 3, 2 ], "texture": "#texture" }, + "north": { "uv": [ 13, 0, 14, 14 ], "texture": "#texture" }, + "south": { "uv": [ 2, 0, 3, 14 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 2, 14 ], "texture": "#texture" }, + "east": { "uv": [ 14, 0, 15, 14 ], "texture": "#texture" } + } +}, +{ + "from": [ 13, 2, 1 ], + "to": [ 14, 16, 2 ], + "faces": { + "down": { "uv": [ 3, 2, 2, 1 ], "texture": "#texture" }, + "up": { "uv": [ 13, 1, 14, 2 ], "texture": "#texture" }, + "north": { "uv": [ 2, 0, 3, 14 ], "texture": "#texture" }, + "south": { "uv": [ 13, 0, 14, 14 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 2, 14 ], "texture": "#texture" }, + "east": { "uv": [ 14, 0, 15, 14 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dense_ice.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dense_ice.json new file mode 100644 index 00000000..39bcf237 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dense_ice.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/dense_ice" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/desh_block_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/desh_block_model.json new file mode 100644 index 00000000..146b3349 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/desh_block_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/decoration_desh" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_model.json new file mode 100644 index 00000000..aafe3cd8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/brick" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_1_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_1_model.json new file mode 100644 index 00000000..13e21662 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/dungeon_brick_venus_1" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_2_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_2_model.json new file mode 100644 index 00000000..7c614f3a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/dungeon_brick_venus_2_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/dungeon_brick_venus_2" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/electrolyzer_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/electrolyzer_model.json new file mode 100644 index 00000000..26ef60ec --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/electrolyzer_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine_input", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftplanets:blocks/electrolyzer", + "east": "galacticraftplanets:blocks/machine_water_input_warning", + "south": "galacticraftplanets:blocks/machine_oxygen_output_warning", + "west": "galacticraftplanets:blocks/machine_oxygen_output_warning" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/gas_liquefier_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/gas_liquefier_model.json new file mode 100644 index 00000000..8a8d1d75 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/gas_liquefier_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine_input", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftplanets:blocks/gas_liquefier", + "east": "galacticraftplanets:blocks/machine_oxygen_input_warning", + "south": "galacticraftplanets:blocks/machine_side_warning", + "west": "galacticraftplanets:blocks/machine_oxygen_output_warning" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_inactive_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_inactive_model.json new file mode 100644 index 00000000..a1515377 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_inactive_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftplanets:blocks/geothermal_vent", + "north": "galacticraftplanets:blocks/geothermal_inactive", + "east": "galacticraftcore:blocks/machine_output", + "south": "galacticraftplanets:blocks/geothermal_inactive", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_model.json new file mode 100644 index 00000000..ac8b6eb3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/geothermal_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftplanets:blocks/geothermal_vent", + "north": "galacticraftplanets:blocks/geothermal", + "east": "galacticraftcore:blocks/machine_output", + "south": "galacticraftplanets:blocks/geothermal", + "west": "galacticraftcore:blocks/machine_side" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/laser_turret.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/laser_turret.json new file mode 100644 index 00000000..94218685 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/laser_turret.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftcore:blocks/machine", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftcore:blocks/machine", + "west": "galacticraftcore:blocks/machine" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/launch_controller_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/launch_controller_model.json new file mode 100644 index 00000000..a3a2316b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/launch_controller_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftplanets:blocks/launch_controller", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftplanets:blocks/launch_controller", + "west": "galacticraftcore:blocks/machine" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/lead_block.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/lead_block.json new file mode 100644 index 00000000..08875de0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/lead_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/block_lead" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_inner_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_inner_stairs.json new file mode 100644 index 00000000..5f543bfe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_outer_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_outer_stairs.json new file mode 100644 index 00000000..1be72bc5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_stairs.json new file mode 100644 index 00000000..4dd117ac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/brick", + "top": "galacticraftplanets:blocks/brick", + "side": "galacticraftplanets:blocks/brick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_inner_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_inner_stairs.json new file mode 100644 index 00000000..58091fe7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/inner_stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_outer_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_outer_stairs.json new file mode 100644 index 00000000..d52dca9b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/outer_stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_stairs.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_stairs.json new file mode 100644 index 00000000..23c848d0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_cobblestone_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "block/stairs", + "textures": { + "bottom": "galacticraftplanets:blocks/cobblestone", + "top": "galacticraftplanets:blocks/cobblestone", + "side": "galacticraftplanets:blocks/cobblestone" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_middle_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_middle_model.json new file mode 100644 index 00000000..428169c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_middle_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/middle" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_stone_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_stone_model.json new file mode 100644 index 00000000..656d7994 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_stone_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/bottom" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_surface_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_surface_model.json new file mode 100644 index 00000000..af2df1a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/mars_surface_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/top" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/methane_synthesizer_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/methane_synthesizer_model.json new file mode 100644 index 00000000..abc15bf5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/methane_synthesizer_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/advanced/machine", + "down": "galacticraftcore:blocks/advanced/machine_input", + "up": "galacticraftcore:blocks/advanced/machine", + "north": "galacticraftplanets:blocks/methane_synthesizer", + "east": "galacticraftplanets:blocks/machine_oxygen_input_warning", + "south": "galacticraftplanets:blocks/machine_side_warning", + "west": "galacticraftplanets:blocks/machine_oxygen_output_warning" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base.json new file mode 100644 index 00000000..0e590c87 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/machineframe", + "particle": "galacticraftplanets:blocks/machineframe" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base_full.json new file mode 100644 index 00000000..0e590c87 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/miner_base_full.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/machineframe", + "particle": "galacticraftplanets:blocks/machineframe" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_aluminum_asteroids_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_aluminum_asteroids_model.json new file mode 100644 index 00000000..8587b5f3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_aluminum_asteroids_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_aluminum_asteroids" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_copper_mars_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_copper_mars_model.json new file mode 100644 index 00000000..0b34d450 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_copper_mars_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_copper_mars" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_desh_mars_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_desh_mars_model.json new file mode 100644 index 00000000..58e5d891 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_desh_mars_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/desh" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_ilmenite_asteroids_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_ilmenite_asteroids_model.json new file mode 100644 index 00000000..bcbf3e31 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_ilmenite_asteroids_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_ilmenite" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_asteroids_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_asteroids_model.json new file mode 100644 index 00000000..d80a8fd9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_asteroids_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_iron_asteroids" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_mars_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_mars_model.json new file mode 100644 index 00000000..efaaeca4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_iron_mars_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_iron_mars" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_tin_mars_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_tin_mars_model.json new file mode 100644 index 00000000..98a64d6f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/ore_tin_mars_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_tin_mars" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.mtl new file mode 100644 index 00000000..a57b3168 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.mtl @@ -0,0 +1,6 @@ +newmtl None +Ks 0.8 0.8 0.8 +d 1 + +newmtl Receiver +map_Kd galacticraftplanets:blocks/beam_receiver diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.obj new file mode 100644 index 00000000..37b2a60e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/receiver.obj @@ -0,0 +1,938 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib receiver.mtl +o Receiver +v 0.467651 0.638106 -0.046456 +v 0.500500 0.638106 -0.032849 +v 0.467651 0.664421 -0.085839 +v 0.528348 0.664421 -0.060697 +v 0.467651 0.703804 -0.112154 +v 0.546956 0.703804 -0.079305 +v 0.467651 0.750259 -0.121394 +v 0.553490 0.750259 -0.085839 +v 0.467651 0.796715 -0.112154 +v 0.546956 0.796715 -0.079305 +v 0.467651 0.836098 -0.085839 +v 0.528348 0.836098 -0.060697 +v 0.500500 0.862413 -0.032849 +v 0.514107 0.638106 0.000000 +v 0.553490 0.664421 0.000000 +v 0.579805 0.703804 0.000000 +v 0.589046 0.750259 0.000000 +v 0.579805 0.796715 0.000000 +v 0.553490 0.836098 0.000000 +v 0.500500 0.638106 0.032849 +v 0.528348 0.664421 0.060697 +v 0.546956 0.703804 0.079305 +v 0.553490 0.750259 0.085839 +v 0.546956 0.796715 0.079305 +v 0.528348 0.836098 0.060697 +v 0.514107 0.862413 0.000000 +v 0.467651 0.638106 0.046456 +v 0.467651 0.664421 0.085839 +v 0.467651 0.703804 0.112154 +v 0.467651 0.750259 0.121394 +v 0.467651 0.796715 0.112154 +v 0.467651 0.836098 0.085839 +v 0.500500 0.862413 0.032849 +v 0.467651 0.628865 0.000000 +v 0.467651 0.862413 -0.046456 +v 0.467651 0.871654 0.000000 +v 0.467651 0.862413 0.046456 +v 0.537055 0.638106 -0.046456 +v 0.537055 0.664421 -0.085839 +v 0.569904 0.638106 -0.032849 +v 0.537055 0.703804 -0.112154 +v 0.597752 0.664421 -0.060697 +v 0.537055 0.750259 -0.121394 +v 0.616359 0.703804 -0.079305 +v 0.537055 0.796715 -0.112154 +v 0.622893 0.750259 -0.085839 +v 0.537055 0.836098 -0.085839 +v 0.616359 0.796715 -0.079305 +v 0.537055 0.862413 -0.046456 +v 0.569904 0.862413 -0.032849 +v 0.583510 0.638106 0.000000 +v 0.622893 0.664421 0.000000 +v 0.649208 0.703804 0.000000 +v 0.658449 0.750259 0.000000 +v 0.597752 0.836098 -0.060697 +v 0.649208 0.796715 0.000000 +v 0.622893 0.836098 0.000000 +v 0.569904 0.638106 0.032849 +v 0.597752 0.664421 0.060697 +v 0.616359 0.703804 0.079305 +v 0.622893 0.750259 0.085839 +v 0.616359 0.796715 0.079305 +v 0.583510 0.862413 0.000000 +v 0.597752 0.836098 0.060697 +v 0.537054 0.638106 0.046456 +v 0.537054 0.664421 0.085839 +v 0.537054 0.703804 0.112154 +v 0.537054 0.750259 0.121394 +v 0.537054 0.796715 0.112154 +v 0.569904 0.862413 0.032849 +v 0.537054 0.836098 0.085839 +v 0.537055 0.628865 0.000000 +v 0.537054 0.871654 0.000000 +v 0.537054 0.862413 0.046456 +vt 0.835682 0.527008 +vt 0.772800 0.552824 +vt 0.835682 0.445599 +vt 0.719491 0.493300 +vt 0.835682 0.385664 +vt 0.990770 0.979079 +vt 0.853651 0.966694 +vt 0.984098 0.895354 +vt 0.835682 0.881950 +vt 0.984098 0.804684 +vt 0.846979 0.792300 +vt 0.990770 0.720871 +vt 1.000000 0.711392 +vt 0.883810 0.663690 +vt 0.937118 0.617540 +vt 0.746753 0.615149 +vt 0.349218 0.675540 +vt 0.339700 0.550137 +vt 0.416074 0.689798 +vt 0.403637 0.525951 +vt 0.500772 0.690158 +vt 0.487311 0.512811 +vt 0.590418 0.676564 +vt 0.577981 0.512717 +vt 0.671363 0.651088 +vt 0.835682 0.548528 +vt 0.772800 0.677475 +vt 0.671363 0.608463 +vt 0.000000 0.909167 +vt 0.017459 0.838487 +vt 0.077707 0.955635 +vt 0.416074 0.408482 +vt 0.500772 0.385664 +vt 0.590418 0.395249 +vt 0.661845 0.525684 +vt 0.883809 0.433365 +vt 0.911072 0.555214 +vt 0.835682 0.703291 +vt 0.719491 0.723625 +vt 0.017459 0.715028 +vt 0.100518 0.863287 +vt 0.100518 0.701980 +vt 0.190924 0.869659 +vt 0.190924 0.695062 +vt 0.274913 0.856632 +vt 0.274914 0.695326 +vt 0.339700 0.826191 +vt 1.000000 0.385664 +vt 0.937118 0.492889 +vt 0.835682 0.617497 +vt 1.000000 0.643356 +vt 1.000000 0.557562 +vt 1.000000 0.467073 +vt 0.504018 0.244320 +vt 0.504018 0.325729 +vt 0.441136 0.218504 +vt 0.504018 0.385664 +vt 0.387828 0.278027 +vt 0.904534 0.155113 +vt 0.820811 0.148419 +vt 0.892185 0.017991 +vt 0.730141 0.148396 +vt 0.807445 0.000000 +vt 0.646326 0.155047 +vt 0.717792 0.011275 +vt 0.339700 0.823014 +vt 0.407736 0.823014 +vt 0.433552 0.885896 +vt 0.415090 0.156178 +vt 0.009519 0.405186 +vt 0.076374 0.390928 +vt 0.000000 0.530589 +vt 0.161072 0.390568 +vt 0.063938 0.554775 +vt 0.250718 0.404161 +vt 0.147611 0.567914 +vt 0.331663 0.429638 +vt 0.238281 0.568008 +vt 0.387402 0.939205 +vt 0.502564 0.987332 +vt 0.339700 0.162864 +vt 0.441136 0.093853 +vt 0.000000 0.046468 +vt 0.077707 0.000000 +vt 0.017459 0.117148 +vt 0.076374 0.672243 +vt 0.161072 0.695062 +vt 0.322145 0.555041 +vt 0.250718 0.685477 +vt 0.495878 0.911942 +vt 0.617727 0.939205 +vt 0.387827 0.047702 +vt 0.504018 0.068037 +vt 0.100518 0.092348 +vt 0.017459 0.240607 +vt 0.190924 0.085976 +vt 0.100518 0.253655 +vt 0.274914 0.099003 +vt 0.190924 0.260573 +vt 0.339700 0.129444 +vt 0.274914 0.260309 +vt 0.558203 0.885896 +vt 0.665429 0.823014 +vt 0.504018 0.153830 +vt 0.493530 0.823014 +vt 0.584019 0.823014 +vt 0.730141 0.278773 +vt 0.646326 0.285424 +vt 0.493530 0.690158 +vt 0.584019 0.690158 +vt 0.636874 0.068036 +vt 0.636874 0.153830 +vt 0.090537 0.383649 +vt 0.007477 0.370602 +vt 0.636874 0.244320 +vt 0.968563 0.297834 +vt 0.904534 0.285490 +vt 0.968563 0.167457 +vt 0.264932 0.390304 +vt 0.180943 0.390568 +vt 0.820811 0.278797 +vt 0.665429 0.690158 +vt 0.339700 0.690158 +vt 0.407736 0.690158 +vt 0.636874 0.000000 +vt 0.504018 0.000000 +vt 0.636874 0.325729 +vt 0.329718 0.382898 +vt 0.339700 0.252903 +vt 0.683871 0.447989 +vt 0.885824 0.711392 +vt 0.671363 0.435778 +vt 0.835682 0.771327 +vt 0.339700 0.702732 +vt 0.352208 0.323338 +vt 0.636874 0.050099 +vt 0.331663 0.644948 +vn -0.224300 0.810300 0.541400 +vn -0.325600 0.525300 0.786100 +vn -0.376400 0.180700 0.908700 +vn -0.376400 -0.180700 0.908700 +vn -0.325600 -0.525300 0.786200 +vn -0.325600 -0.525300 0.786100 +vn -0.224300 -0.810300 0.541400 +vn -0.541400 0.810300 0.224300 +vn -0.786100 0.525300 0.325600 +vn -0.908700 0.180700 0.376400 +vn -0.908700 0.180800 0.376400 +vn -0.908700 -0.180700 0.376400 +vn -0.786100 -0.525300 0.325600 +vn -0.541400 -0.810300 0.224300 +vn -0.541400 0.810300 -0.224300 +vn -0.786100 0.525300 -0.325600 +vn -0.908700 0.180800 -0.376400 +vn -0.908700 0.180700 -0.376400 +vn -0.908700 -0.180700 -0.376400 +vn -0.786200 -0.525300 -0.325600 +vn -0.786100 -0.525300 -0.325600 +vn -0.541400 -0.810300 -0.224300 +vn -0.224300 0.810300 -0.541400 +vn -0.325600 0.525300 -0.786100 +vn -0.376400 0.180700 -0.908700 +vn -0.376400 -0.180700 -0.908700 +vn -0.325600 -0.525300 -0.786100 +vn -0.224300 -0.810300 -0.541400 +vn -0.080600 0.977600 0.194500 +vn -0.080600 -0.977600 0.194500 +vn -0.194500 0.977600 0.080500 +vn -0.194500 -0.977600 0.080600 +vn -0.194500 0.977600 -0.080500 +vn -0.194500 -0.977600 -0.080600 +vn -0.080600 0.977600 -0.194500 +vn -0.080600 -0.977600 -0.194500 +vn 0.224300 -0.810300 -0.541400 +vn 0.325600 -0.525300 -0.786100 +vn 0.376400 -0.180700 -0.908700 +vn 0.376400 0.180700 -0.908700 +vn 0.325600 0.525300 -0.786100 +vn 0.224300 0.810300 -0.541400 +vn 0.541400 -0.810300 -0.224300 +vn 0.786200 -0.525300 -0.325600 +vn 0.908700 -0.180700 -0.376400 +vn 0.908700 -0.180800 -0.376400 +vn 0.908700 0.180700 -0.376400 +vn 0.786200 0.525300 -0.325600 +vn 0.541400 0.810300 -0.224300 +vn 0.541400 -0.810300 0.224300 +vn 0.786200 -0.525300 0.325600 +vn 0.908700 -0.180800 0.376400 +vn 0.908700 -0.180700 0.376400 +vn 0.908700 0.180800 0.376400 +vn 0.908700 0.180700 0.376400 +vn 0.786200 0.525300 0.325600 +vn 0.541400 0.810300 0.224300 +vn 0.224300 -0.810300 0.541400 +vn 0.325600 -0.525300 0.786100 +vn 0.376400 -0.180700 0.908700 +vn 0.376400 0.180700 0.908700 +vn 0.325600 0.525300 0.786100 +vn 0.224300 0.810300 0.541400 +vn 0.080600 -0.977600 -0.194500 +vn 0.080600 0.977600 -0.194500 +vn 0.194500 -0.977600 -0.080500 +vn 0.194500 0.977600 -0.080500 +vn 0.194500 -0.977600 0.080500 +vn 0.194500 0.977600 0.080500 +vn 0.080600 -0.977600 0.194500 +vn 0.080500 0.977600 0.194500 +vn 0.000000 0.555600 -0.831500 +vn 0.000000 0.980800 0.195100 +vn 0.000000 -0.980800 0.195100 +vn 0.000000 -0.555600 0.831500 +vn 0.000000 -0.980800 -0.195100 +vn 0.000000 -0.555600 -0.831500 +vn 0.000000 0.195100 0.980800 +vn 0.000000 0.195100 -0.980800 +vn 0.000000 0.831500 0.555600 +vn 0.000000 0.831500 -0.555600 +vn 0.000000 -0.831500 0.555600 +vn 0.000000 -0.831500 -0.555600 +vn 0.000000 -0.195100 0.980800 +vn 0.000000 0.980800 -0.195100 +vn 0.000000 -0.195100 -0.980800 +vn 0.000000 0.555600 0.831500 +vn -0.786200 0.525300 0.325600 +vn -0.908700 -0.180800 0.376400 +vn 0.325600 0.525300 0.786200 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 3/3/2 4/4/2 5/5/2 +f 5/6/3 6/7/3 7/8/3 +f 7/8/4 8/9/4 9/10/4 +f 9/10/5 10/11/6 11/12/6 +f 11/13/7 12/14/7 13/15/7 +f 2/2/8 14/16/8 4/4/8 +f 4/17/9 15/18/9 6/19/9 +f 6/19/10 16/20/11 8/21/10 +f 8/21/12 17/22/12 10/23/12 +f 10/23/13 18/24/13 12/25/13 +f 12/14/14 19/26/14 13/15/14 +f 14/16/15 20/27/15 15/28/15 +f 15/29/16 21/30/16 16/31/16 +f 16/20/17 22/32/18 17/22/17 +f 17/22/19 23/33/19 18/24/19 +f 18/24/20 24/34/21 19/35/21 +f 19/26/22 25/36/22 26/37/22 +f 20/27/23 27/38/23 21/39/23 +f 21/30/24 28/40/24 22/41/24 +f 22/41/25 29/42/25 23/43/25 +f 23/43/26 30/44/26 24/45/26 +f 24/45/27 31/46/27 25/47/27 +f 25/36/28 32/48/28 33/49/28 +f 34/50/29 2/2/29 1/1/29 +f 35/51/30 13/15/30 36/52/30 +f 34/50/31 14/16/31 2/2/31 +f 13/15/32 26/37/32 36/52/32 +f 34/50/33 20/27/33 14/16/33 +f 26/37/34 33/49/34 36/52/34 +f 34/50/35 27/38/35 20/27/35 +f 33/49/36 37/53/36 36/52/36 +f 38/54/37 39/55/37 40/56/37 +f 39/55/38 41/57/38 42/58/38 +f 41/59/39 43/60/39 44/61/39 +f 43/60/40 45/62/40 46/63/40 +f 45/62/41 47/64/41 48/65/41 +f 47/66/42 49/67/42 50/68/42 +f 40/56/43 42/58/43 51/69/43 +f 42/70/44 44/71/44 52/72/44 +f 44/71/45 46/73/45 53/74/46 +f 46/73/47 48/75/47 54/76/47 +f 48/75/48 55/77/48 56/78/48 +f 55/79/49 50/68/49 57/80/49 +f 51/69/50 52/81/50 58/82/50 +f 52/83/51 53/84/51 59/85/51 +f 53/74/52 54/76/52 60/86/53 +f 54/76/54 56/78/55 61/87/55 +f 56/78/56 57/88/56 62/89/56 +f 57/80/57 63/90/57 64/91/57 +f 58/82/58 59/92/58 65/93/58 +f 59/85/59 60/94/59 66/95/59 +f 60/94/60 61/96/60 67/97/60 +f 61/96/61 62/98/61 68/99/61 +f 62/98/62 64/100/62 69/101/62 +f 64/91/63 70/102/63 71/103/63 +f 72/104/64 38/54/64 40/56/64 +f 49/67/65 73/105/65 50/68/65 +f 72/104/66 40/56/66 51/69/66 +f 50/68/67 73/105/67 63/90/67 +f 72/104/68 51/69/68 58/82/68 +f 63/90/69 73/105/69 70/102/69 +f 72/104/70 58/82/70 65/93/70 +f 70/102/71 73/105/71 74/106/71 +f 9/107/72 11/108/72 45/62/72 +f 36/109/73 37/110/73 73/105/73 +f 27/111/74 34/112/74 72/104/74 +f 29/113/75 28/114/75 67/97/75 +f 34/112/76 1/115/76 72/104/76 +f 3/116/77 5/117/77 39/118/77 +f 31/119/78 30/120/78 69/101/78 +f 7/121/79 9/107/79 43/60/79 +f 37/110/80 32/122/80 74/106/80 +f 11/123/81 35/124/81 47/66/81 +f 28/125/82 27/111/82 66/126/82 +f 1/115/83 3/127/83 38/54/83 +f 30/120/84 29/113/84 68/99/84 +f 35/124/85 36/109/85 49/67/85 +f 5/117/86 7/121/86 41/59/86 +f 32/128/87 31/119/87 71/129/87 +f 2/2/1 4/4/1 3/3/1 +f 4/4/2 6/130/2 5/5/2 +f 6/7/3 8/9/3 7/8/3 +f 8/9/4 10/11/4 9/10/4 +f 10/11/6 12/131/6 11/12/6 +f 35/51/7 11/13/7 13/15/7 +f 14/16/8 15/28/8 4/4/8 +f 15/18/9 16/20/88 6/19/9 +f 16/20/11 17/22/11 8/21/10 +f 17/22/12 18/24/89 10/23/12 +f 18/24/13 19/35/13 12/25/13 +f 19/26/14 26/37/14 13/15/14 +f 20/27/15 21/39/15 15/28/15 +f 21/30/16 22/41/16 16/31/16 +f 22/32/18 23/33/18 17/22/17 +f 23/33/19 24/34/19 18/24/19 +f 24/34/21 25/132/21 19/35/21 +f 25/36/22 33/49/22 26/37/22 +f 27/38/23 28/133/23 21/39/23 +f 28/40/24 29/42/24 22/41/24 +f 29/42/25 30/44/25 23/43/25 +f 30/44/26 31/46/26 24/45/26 +f 31/46/27 32/134/27 25/47/27 +f 32/48/28 37/53/28 33/49/28 +f 39/55/37 42/58/37 40/56/37 +f 41/57/38 44/135/38 42/58/38 +f 43/60/39 46/63/39 44/61/39 +f 45/62/40 48/65/40 46/63/40 +f 47/64/41 55/136/41 48/65/41 +f 55/79/42 47/66/42 50/68/42 +f 42/58/43 52/81/43 51/69/43 +f 44/71/44 53/74/44 52/72/44 +f 46/73/45 54/76/46 53/74/46 +f 48/75/47 56/78/47 54/76/47 +f 55/77/48 57/88/48 56/78/48 +f 50/68/49 63/90/49 57/80/49 +f 52/81/50 59/92/50 58/82/50 +f 53/84/51 60/94/51 59/85/51 +f 54/76/52 61/87/53 60/86/53 +f 56/78/55 62/89/55 61/87/55 +f 57/88/56 64/137/56 62/89/56 +f 63/90/57 70/102/57 64/91/57 +f 59/92/58 66/126/58 65/93/58 +f 60/94/59 67/97/59 66/95/59 +f 61/96/60 68/99/60 67/97/60 +f 62/98/61 69/101/61 68/99/61 +f 64/100/62 71/129/90 69/101/62 +f 70/102/63 74/106/63 71/103/63 +f 11/108/72 47/64/72 45/62/72 +f 37/110/73 74/106/73 73/105/73 +f 65/93/74 27/111/74 72/104/74 +f 28/114/75 66/95/75 67/97/75 +f 1/115/76 38/54/76 72/104/76 +f 5/117/77 41/59/77 39/118/77 +f 30/120/78 68/99/78 69/101/78 +f 9/107/79 45/62/79 43/60/79 +f 32/122/80 71/103/80 74/106/80 +f 35/124/81 49/67/81 47/66/81 +f 27/111/82 65/93/82 66/126/82 +f 3/127/83 39/55/83 38/54/83 +f 29/113/84 67/97/84 68/99/84 +f 36/109/85 73/105/85 49/67/85 +f 7/121/86 43/60/86 41/59/86 +f 31/119/87 69/101/87 71/129/87 +o Ring +v 0.347722 0.343926 0.000000 +v 0.347722 0.439157 -0.261643 +v 0.400050 0.362972 0.000000 +v 0.400050 0.453747 -0.249400 +v 0.427894 0.411199 0.000000 +v 0.427894 0.490690 -0.218401 +v 0.418224 0.466040 0.000000 +v 0.418224 0.532701 -0.183150 +v 0.375565 0.501834 0.000000 +v 0.375565 0.560121 -0.160141 +v 0.319878 0.501834 0.000000 +v 0.319878 0.560121 -0.160141 +v 0.277220 0.466040 0.000000 +v 0.277220 0.532701 -0.183150 +v 0.267550 0.411199 0.000000 +v 0.267550 0.490690 -0.218401 +v 0.295393 0.362972 0.000000 +v 0.347722 0.680288 -0.400860 +v 0.400050 0.683595 -0.382103 +v 0.427894 0.691970 -0.334610 +v 0.418224 0.701493 -0.280602 +v 0.375565 0.707708 -0.245351 +v 0.319878 0.707708 -0.245351 +v 0.277220 0.701493 -0.280602 +v 0.267550 0.691970 -0.334610 +v 0.295393 0.453747 -0.249400 +v 0.295393 0.683595 -0.382103 +v 0.347722 0.954492 -0.352510 +v 0.400050 0.944969 -0.336016 +v 0.427894 0.920856 -0.294251 +v 0.418224 0.893436 -0.246757 +v 0.375565 0.875538 -0.215758 +v 0.319878 0.875538 -0.215758 +v 0.277220 0.893436 -0.246757 +v 0.267550 0.920856 -0.294251 +v 0.295393 0.944969 -0.336016 +v 0.347722 1.133466 -0.139217 +v 0.400050 1.115569 -0.132703 +v 0.427894 1.070251 -0.116209 +v 0.418224 1.018717 -0.097452 +v 0.375565 0.985081 -0.085210 +v 0.319878 0.985081 -0.085210 +v 0.277220 1.018717 -0.097452 +v 0.267550 1.070251 -0.116209 +v 0.295393 1.115569 -0.132703 +v 0.347722 1.133466 0.139217 +v 0.400050 1.115569 0.132703 +v 0.427894 1.070251 0.116209 +v 0.418224 1.018718 0.097452 +v 0.375565 0.985081 0.085209 +v 0.319878 0.985081 0.085209 +v 0.277220 1.018718 0.097452 +v 0.267550 1.070251 0.116209 +v 0.295393 1.115569 0.132703 +v 0.347722 0.954492 0.352510 +v 0.400050 0.944969 0.336016 +v 0.427894 0.920856 0.294251 +v 0.418224 0.893436 0.246757 +v 0.375565 0.875538 0.215758 +v 0.319878 0.875538 0.215758 +v 0.277220 0.893436 0.246757 +v 0.267550 0.920856 0.294251 +v 0.295393 0.944969 0.336016 +v 0.347722 0.680288 0.400860 +v 0.400050 0.683595 0.382103 +v 0.427894 0.691970 0.334610 +v 0.418224 0.701493 0.280602 +v 0.375565 0.707708 0.245351 +v 0.319878 0.707708 0.245351 +v 0.277220 0.701493 0.280602 +v 0.267550 0.691970 0.334610 +v 0.295393 0.683595 0.382103 +v 0.347722 0.439157 0.261643 +v 0.400050 0.453747 0.249400 +v 0.427894 0.490690 0.218401 +v 0.418224 0.532701 0.183150 +v 0.375565 0.560121 0.160141 +v 0.319878 0.560121 0.160141 +v 0.277220 0.532701 0.183150 +v 0.267550 0.490690 0.218401 +v 0.295393 0.453747 0.249400 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vn 0.323600 -0.889100 -0.323600 +vn 0.852000 -0.491900 -0.179000 +vn 0.982800 0.173300 0.063100 +vn 0.619200 0.737900 0.268600 +vn 0.000000 0.939700 0.342000 +vn -0.619200 0.737900 0.268600 +vn -0.982800 0.173300 0.063100 +vn -0.852000 -0.491900 -0.179000 +vn -0.323600 -0.889100 -0.323600 +vn 0.323600 -0.473100 -0.819400 +vn 0.852000 -0.261800 -0.453400 +vn 0.852000 -0.261700 -0.453400 +vn 0.982800 0.092200 0.159700 +vn 0.619200 0.392600 0.680100 +vn 0.000000 0.500000 0.866000 +vn -0.619200 0.392600 0.680000 +vn -0.619200 0.392600 0.680100 +vn -0.982800 0.092200 0.159700 +vn -0.852000 -0.261700 -0.453400 +vn -0.323600 -0.473100 -0.819400 +vn 0.323600 0.164300 -0.931800 +vn 0.852000 0.090900 -0.515600 +vn 0.852000 0.090900 -0.515500 +vn 0.982800 -0.032000 0.181600 +vn 0.619200 -0.136400 0.773300 +vn 0.000000 -0.173600 0.984800 +vn -0.619200 -0.136400 0.773300 +vn -0.982800 -0.032000 0.181600 +vn -0.852000 0.090900 -0.515500 +vn -0.323600 0.164300 -0.931800 +vn 0.323600 0.724800 -0.608200 +vn 0.852000 0.401000 -0.336500 +vn 0.982800 -0.141300 0.118500 +vn 0.619200 -0.601500 0.504800 +vn 0.000000 -0.766000 0.642800 +vn -0.619200 -0.601500 0.504700 +vn -0.982800 -0.141300 0.118500 +vn -0.852000 0.401000 -0.336500 +vn -0.323600 0.724800 -0.608200 +vn 0.323600 0.946200 0.000000 +vn 0.852000 0.523500 0.000000 +vn 0.982800 -0.184400 0.000000 +vn 0.619200 -0.785300 0.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.619200 -0.785300 0.000000 +vn -0.619200 -0.785200 0.000000 +vn -0.982800 -0.184400 0.000000 +vn -0.852000 0.523500 0.000000 +vn -0.323600 0.946200 0.000000 +vn 0.323600 0.724800 0.608200 +vn 0.852000 0.401000 0.336500 +vn 0.982800 -0.141300 -0.118500 +vn 0.619200 -0.601500 -0.504800 +vn 0.000000 -0.766000 -0.642800 +vn -0.619200 -0.601500 -0.504700 +vn -0.982800 -0.141300 -0.118500 +vn -0.852000 0.401000 0.336500 +vn -0.323600 0.724800 0.608200 +vn 0.323600 0.164300 0.931800 +vn 0.852000 0.090900 0.515500 +vn 0.852000 0.090900 0.515600 +vn 0.982800 -0.032000 -0.181600 +vn 0.619200 -0.136400 -0.773300 +vn 0.000000 -0.173600 -0.984800 +vn -0.619200 -0.136400 -0.773300 +vn -0.982800 -0.032000 -0.181600 +vn -0.852000 0.090900 0.515500 +vn -0.323600 0.164300 0.931800 +vn 0.323600 -0.473100 0.819400 +vn 0.852000 -0.261800 0.453400 +vn 0.982800 0.092200 -0.159700 +vn 0.619200 0.392600 -0.680100 +vn 0.000000 0.500000 -0.866000 +vn -0.619200 0.392600 -0.680000 +vn -0.982800 0.092200 -0.159700 +vn -0.852000 -0.261700 0.453400 +vn -0.323600 -0.473100 0.819400 +vn 0.323600 -0.889100 0.323600 +vn 0.852000 -0.491900 0.179000 +vn 0.982800 0.173300 -0.063100 +vn 0.619200 0.737900 -0.268600 +vn 0.000000 0.939700 -0.342000 +vn -0.619200 0.737900 -0.268600 +vn -0.982800 0.173300 -0.063100 +vn -0.852000 -0.491900 0.179000 +vn -0.323600 -0.889100 0.323600 +vn -0.619200 -0.601500 0.504800 +usemtl Receiver +f 75/138/91 76/139/91 77/140/91 +f 77/138/92 78/139/92 79/140/92 +f 79/138/93 80/139/93 81/140/93 +f 81/138/94 82/139/94 83/140/94 +f 83/138/95 84/139/95 85/140/95 +f 85/138/96 86/139/96 87/140/96 +f 87/138/97 88/139/97 89/140/97 +f 89/138/98 90/139/98 91/140/98 +f 75/138/99 91/139/99 76/140/99 +f 76/138/100 92/139/100 78/140/100 +f 78/138/101 93/139/102 80/140/101 +f 80/138/103 94/139/103 82/140/103 +f 82/138/104 95/139/104 84/140/104 +f 84/138/105 96/139/105 86/140/105 +f 86/138/106 97/139/107 88/140/106 +f 88/138/108 98/139/108 90/140/108 +f 90/138/109 99/139/109 100/140/109 +f 100/138/110 101/139/110 76/140/110 +f 92/138/111 102/139/111 93/140/111 +f 93/138/112 103/139/113 94/140/113 +f 94/138/114 104/139/114 95/140/114 +f 95/138/115 105/139/115 96/140/115 +f 96/138/116 106/139/116 97/140/116 +f 97/138/117 107/139/117 98/140/117 +f 98/138/118 108/139/118 99/140/118 +f 99/138/119 109/139/119 101/140/119 +f 101/138/120 110/139/120 92/140/120 +f 102/138/121 111/139/121 103/140/121 +f 103/138/122 112/139/122 104/140/122 +f 104/138/123 113/139/123 105/140/123 +f 105/138/124 114/139/124 106/140/124 +f 106/138/125 115/139/125 107/140/125 +f 107/138/126 116/139/126 108/140/126 +f 108/138/127 117/139/127 109/140/127 +f 109/138/128 118/139/128 110/140/128 +f 110/138/129 119/139/129 102/140/129 +f 111/138/130 120/139/130 112/140/130 +f 112/138/131 121/139/131 113/140/131 +f 113/138/132 122/139/132 114/140/132 +f 114/138/133 123/139/133 115/140/133 +f 115/138/134 124/139/134 116/140/134 +f 116/138/135 125/139/136 117/140/135 +f 117/138/137 126/139/137 118/140/137 +f 118/138/138 127/139/138 119/140/138 +f 119/138/139 128/139/139 111/140/139 +f 120/138/140 129/139/140 121/140/140 +f 121/138/141 130/139/141 122/140/141 +f 122/138/142 131/139/142 123/140/142 +f 123/138/143 132/139/143 124/140/143 +f 124/138/144 133/139/144 125/140/144 +f 125/138/145 134/139/145 126/140/145 +f 126/138/146 135/139/146 127/140/146 +f 127/138/147 136/139/147 128/140/147 +f 128/138/148 137/139/148 120/140/148 +f 129/138/149 138/139/149 130/140/149 +f 130/138/150 139/139/151 131/140/150 +f 131/138/152 140/139/152 132/140/152 +f 132/138/153 141/139/153 133/140/153 +f 133/138/154 142/139/154 134/140/154 +f 134/138/155 143/139/155 135/140/155 +f 135/138/156 144/139/156 136/140/156 +f 136/138/157 145/139/157 137/140/157 +f 137/138/158 146/139/158 129/140/158 +f 138/138/159 147/139/159 139/140/159 +f 139/138/160 148/139/160 140/140/160 +f 140/138/161 149/139/161 141/140/161 +f 141/138/162 150/139/162 142/140/162 +f 142/138/163 151/139/163 143/140/163 +f 143/138/164 152/139/164 144/140/164 +f 144/138/165 153/139/165 145/140/165 +f 145/138/166 154/139/166 146/140/166 +f 146/138/167 155/139/167 138/140/167 +f 147/138/168 75/139/168 148/140/168 +f 148/138/169 77/139/169 149/140/169 +f 149/138/170 79/139/170 150/140/170 +f 150/138/171 81/139/171 151/140/171 +f 151/138/172 83/139/172 152/140/172 +f 152/138/173 85/139/173 153/140/173 +f 153/138/174 87/139/174 154/140/174 +f 154/138/175 89/139/175 155/140/175 +f 155/138/176 91/139/176 147/140/176 +f 76/139/91 78/141/91 77/140/91 +f 78/139/92 80/141/92 79/140/92 +f 80/139/93 82/141/93 81/140/93 +f 82/139/94 84/141/94 83/140/94 +f 84/139/95 86/141/95 85/140/95 +f 86/139/96 88/141/96 87/140/96 +f 88/139/97 90/141/97 89/140/97 +f 90/139/98 100/141/98 91/140/98 +f 91/139/99 100/141/99 76/140/99 +f 92/139/100 93/141/100 78/140/100 +f 93/139/102 94/141/102 80/140/101 +f 94/139/103 95/141/103 82/140/103 +f 95/139/104 96/141/104 84/140/104 +f 96/139/105 97/141/105 86/140/105 +f 97/139/107 98/141/107 88/140/106 +f 98/139/108 99/141/108 90/140/108 +f 99/139/109 101/141/109 100/140/109 +f 101/139/110 92/141/110 76/140/110 +f 102/139/111 103/141/111 93/140/111 +f 103/139/113 104/141/113 94/140/113 +f 104/139/114 105/141/114 95/140/114 +f 105/139/115 106/141/115 96/140/115 +f 106/139/116 107/141/116 97/140/116 +f 107/139/117 108/141/117 98/140/117 +f 108/139/118 109/141/118 99/140/118 +f 109/139/119 110/141/119 101/140/119 +f 110/139/120 102/141/120 92/140/120 +f 111/139/121 112/141/121 103/140/121 +f 112/139/122 113/141/122 104/140/122 +f 113/139/123 114/141/123 105/140/123 +f 114/139/124 115/141/124 106/140/124 +f 115/139/125 116/141/125 107/140/125 +f 116/139/126 117/141/177 108/140/126 +f 117/139/127 118/141/127 109/140/127 +f 118/139/128 119/141/128 110/140/128 +f 119/139/129 111/141/129 102/140/129 +f 120/139/130 121/141/130 112/140/130 +f 121/139/131 122/141/131 113/140/131 +f 122/139/132 123/141/132 114/140/132 +f 123/139/133 124/141/133 115/140/133 +f 124/139/134 125/141/134 116/140/134 +f 125/139/136 126/141/136 117/140/135 +f 126/139/137 127/141/137 118/140/137 +f 127/139/138 128/141/138 119/140/138 +f 128/139/139 120/141/139 111/140/139 +f 129/139/140 130/141/140 121/140/140 +f 130/139/141 131/141/141 122/140/141 +f 131/139/142 132/141/142 123/140/142 +f 132/139/143 133/141/143 124/140/143 +f 133/139/144 134/141/144 125/140/144 +f 134/139/145 135/141/145 126/140/145 +f 135/139/146 136/141/146 127/140/146 +f 136/139/147 137/141/147 128/140/147 +f 137/139/148 129/141/148 120/140/148 +f 138/139/149 139/141/149 130/140/149 +f 139/139/151 140/141/151 131/140/150 +f 140/139/152 141/141/152 132/140/152 +f 141/139/153 142/141/153 133/140/153 +f 142/139/154 143/141/154 134/140/154 +f 143/139/155 144/141/155 135/140/155 +f 144/139/156 145/141/156 136/140/156 +f 145/139/157 146/141/157 137/140/157 +f 146/139/158 138/141/158 129/140/158 +f 147/139/159 148/141/159 139/140/159 +f 148/139/160 149/141/160 140/140/160 +f 149/139/161 150/141/161 141/140/161 +f 150/139/162 151/141/162 142/140/162 +f 151/139/163 152/141/163 143/140/163 +f 152/139/164 153/141/164 144/140/164 +f 153/139/165 154/141/165 145/140/165 +f 154/139/166 155/141/166 146/140/166 +f 155/139/167 147/141/167 138/140/167 +f 75/139/168 77/141/168 148/140/168 +f 77/139/169 79/141/169 149/140/169 +f 79/139/170 81/141/170 150/140/170 +f 81/139/171 83/141/171 151/140/171 +f 83/139/172 85/141/172 152/140/172 +f 85/139/173 87/141/173 153/140/173 +f 87/139/174 89/141/174 154/140/174 +f 89/139/175 91/141/175 155/140/175 +f 91/139/176 75/141/176 147/140/176 +o Main +v 0.442187 0.949283 0.000000 +v 0.442187 0.934133 0.076163 +v 0.467651 0.871654 0.000000 +v 0.442187 0.826422 -0.183874 +v 0.442187 0.890990 -0.140731 +v 0.467651 0.796715 -0.112154 +v 0.442187 0.890990 0.140731 +v 0.442187 0.826422 0.183874 +v 0.467651 0.836098 0.085839 +v 0.442187 0.674096 -0.183874 +v 0.442187 0.750259 -0.199024 +v 0.467651 0.703804 -0.112154 +v 0.442187 0.934133 -0.076163 +v 0.467651 0.862413 -0.046456 +v 0.442187 0.750259 0.199024 +v 0.442187 0.674096 0.183874 +v 0.467651 0.750259 0.121394 +v 0.442187 0.566385 -0.076163 +v 0.442187 0.609528 -0.140731 +v 0.467651 0.638106 -0.046456 +v 0.442187 0.609528 0.140731 +v 0.442187 0.566385 0.076163 +v 0.467651 0.664421 0.085839 +v 0.467651 0.836098 -0.085839 +v 0.467651 0.862413 0.046456 +v 0.467651 0.750259 -0.121394 +v 0.467651 0.796715 0.112154 +v 0.467651 0.664421 -0.085839 +v 0.442187 0.551236 0.000000 +v 0.467651 0.628865 0.000000 +v 0.467651 0.703804 0.112154 +v 0.467651 0.638106 0.046456 +v -0.030531 0.674096 -0.183874 +v -0.030531 0.750259 0.199024 +v -0.030531 0.826422 -0.183874 +v -0.030531 0.890990 0.140731 +v -0.030531 0.934133 -0.076163 +v -0.030531 0.566385 0.076163 +v -0.030531 0.609528 -0.140731 +v -0.030531 0.674096 0.183874 +v -0.030531 0.949283 0.000000 +v -0.030531 0.750259 -0.199024 +v -0.030531 0.826422 0.183874 +v -0.030531 0.890990 -0.140731 +v -0.030531 0.934133 0.076163 +v -0.030531 0.551236 0.000000 +v -0.030531 0.609528 0.140731 +v -0.030531 0.566385 -0.076163 +vt 0.000000 0.000000 +vt 0.500000 0.000000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 0.000000 1.000000 +vt 0.500000 1.000000 +vn 0.948400 0.311100 0.061900 +vn 0.948400 0.176200 -0.263700 +vn 0.948400 0.176200 0.263700 +vn 0.948400 -0.061900 -0.311100 +vn 0.948400 0.311100 -0.061900 +vn 0.948400 -0.061900 0.311100 +vn 0.948400 -0.263700 -0.176200 +vn 0.948400 -0.263700 0.176200 +vn 0.948400 0.263700 -0.176200 +vn 0.948400 0.263700 0.176200 +vn 0.948400 0.061900 -0.311100 +vn 0.948400 0.061900 0.311100 +vn 0.948400 -0.176200 -0.263700 +vn 0.948400 -0.311100 -0.061900 +vn 0.948400 -0.176200 0.263700 +vn 0.948400 -0.311100 0.061900 +vn 0.000000 -0.555600 -0.831500 +vn 0.000000 0.195100 0.980800 +vn 0.000000 0.195100 -0.980800 +vn 0.000000 0.831500 0.555600 +vn 0.000000 0.831500 -0.555600 +vn 0.000000 -0.831500 0.555600 +vn 0.000000 -0.831500 -0.555600 +vn 0.000000 -0.195100 0.980800 +vn 0.000000 0.980800 -0.195100 +vn 0.000000 -0.195100 -0.980800 +vn 0.000000 0.555600 0.831500 +vn 0.000000 0.555600 -0.831500 +vn 0.000000 0.980800 0.195100 +vn 0.000000 -0.980800 0.195100 +vn 0.000000 -0.555600 0.831500 +vn 0.000000 -0.980800 -0.195100 +usemtl Receiver +f 156/142/178 157/143/178 158/144/178 +f 159/142/179 160/143/179 161/144/179 +f 162/142/180 163/143/180 164/144/180 +f 165/142/181 166/143/181 167/144/181 +f 168/142/182 156/143/182 169/144/182 +f 170/142/183 171/143/183 172/144/183 +f 173/142/184 174/143/184 175/144/184 +f 176/142/185 177/143/185 178/144/185 +f 160/142/186 168/143/186 179/144/186 +f 157/142/187 162/143/187 180/144/187 +f 166/142/188 159/143/188 181/144/188 +f 163/142/189 170/143/189 182/144/189 +f 174/142/190 165/143/190 183/144/190 +f 184/142/191 173/143/191 185/144/191 +f 171/142/192 176/143/192 186/144/192 +f 177/142/193 184/143/193 187/144/193 +f 165/144/194 174/145/194 188/146/194 +f 170/144/195 163/145/195 189/146/195 +f 159/144/196 166/145/196 190/146/196 +f 162/144/197 157/145/197 191/146/197 +f 168/144/198 160/145/198 192/146/198 +f 177/144/199 176/145/199 193/146/199 +f 174/144/200 173/145/200 194/146/200 +f 171/144/201 170/145/201 195/146/201 +f 156/144/202 168/145/202 196/146/202 +f 166/144/203 165/145/203 197/146/203 +f 163/144/204 162/145/204 198/146/204 +f 160/144/205 159/145/205 199/146/205 +f 157/144/206 156/145/206 200/146/206 +f 184/144/207 177/145/207 201/146/207 +f 176/144/208 171/145/208 202/146/208 +f 173/144/209 184/145/209 203/146/209 +f 157/143/178 180/145/178 158/144/178 +f 160/143/179 179/145/179 161/144/179 +f 163/143/180 182/145/180 164/144/180 +f 166/143/181 181/145/181 167/144/181 +f 156/143/182 158/145/182 169/144/182 +f 171/143/183 186/145/183 172/144/183 +f 174/143/184 183/145/184 175/144/184 +f 177/143/185 187/145/185 178/144/185 +f 168/143/186 169/145/186 179/144/186 +f 162/143/187 164/145/187 180/144/187 +f 159/143/188 161/145/188 181/144/188 +f 170/143/189 172/145/189 182/144/189 +f 165/143/190 167/145/190 183/144/190 +f 173/143/191 175/145/191 185/144/191 +f 176/143/192 178/145/192 186/144/192 +f 184/143/193 185/145/193 187/144/193 +f 174/145/194 194/147/194 188/146/194 +f 163/145/195 198/147/195 189/146/195 +f 166/145/196 197/147/196 190/146/196 +f 157/145/197 200/147/197 191/146/197 +f 160/145/198 199/147/198 192/146/198 +f 176/145/199 202/147/199 193/146/199 +f 173/145/200 203/147/200 194/146/200 +f 170/145/201 189/147/201 195/146/201 +f 168/145/202 192/147/202 196/146/202 +f 165/145/203 188/147/203 197/146/203 +f 162/145/204 191/147/204 198/146/204 +f 159/145/205 190/147/205 199/146/205 +f 156/145/206 196/147/206 200/146/206 +f 177/145/207 193/147/207 201/146/207 +f 171/145/208 195/147/208 202/146/208 +f 184/145/209 201/147/209 203/146/209 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.mtl new file mode 100644 index 00000000..609b0297 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.mtl @@ -0,0 +1,2 @@ +newmtl Reflector +map_Kd galacticraftplanets:blocks/beam_reflector diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.obj new file mode 100644 index 00000000..44342540 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/reflector.obj @@ -0,0 +1,477 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib reflector.mtl +o EnergyBlaster +v 0.000000 1.242149 -0.083616 +v 0.000000 1.334889 0.187788 +v 0.070871 1.216354 -0.083616 +v 0.130483 1.287397 0.187788 +v 0.108581 1.151039 -0.083616 +v 0.199912 1.167143 0.187788 +v 0.095484 1.076765 -0.083616 +v 0.175800 1.030395 0.187788 +v 0.037710 1.028286 -0.083616 +v 0.069429 0.941139 0.187788 +v -0.037710 1.028286 -0.083616 +v -0.069429 0.941139 0.187788 +v -0.095485 1.076765 -0.083616 +v -0.175800 1.030395 0.187788 +v -0.108581 1.151039 -0.083616 +v -0.130483 1.287397 0.187788 +v 0.000000 1.255622 0.290641 +v -0.070871 1.216354 -0.083616 +v -0.199912 1.167143 0.187788 +v -0.057138 1.199988 -0.282212 +v 0.000000 1.220784 -0.282212 +v 0.057138 1.199988 -0.282212 +v -0.087541 1.147329 -0.282212 +v -0.076982 1.087447 -0.282212 +v -0.030403 1.048363 -0.282212 +v 0.030402 1.048363 -0.282212 +v 0.076982 1.087447 -0.282212 +v 0.087541 1.147329 -0.282212 +v 0.107152 1.070029 0.290641 +v -0.042318 1.015626 0.290641 +v 0.042318 1.015626 0.290641 +v -0.079531 1.226675 0.290641 +v -0.121849 1.153378 0.290641 +v -0.107152 1.070029 0.290641 +v 0.121849 1.153378 0.290641 +v 0.079531 1.226675 0.290641 +vt 0.948800 1.000000 +vt 0.448800 1.000000 +vt 0.948800 0.500000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 0.000000 1.000000 +vt 1.000000 0.836800 +vt 0.500000 0.836800 +vt 1.000000 0.336800 +vt 0.750000 0.500000 +vt 0.910697 0.441511 +vt 0.589303 0.441511 +vt 0.003798 0.293412 +vt 0.164495 0.015077 +vt 0.033494 0.125000 +vt 0.448800 0.500000 +vt 0.500000 1.000000 +vt 0.500000 0.336800 +vt 0.996202 0.293412 +vt 0.966506 0.125000 +vt 0.835505 0.015077 +vt 0.664495 0.015077 +vt 0.533494 0.125000 +vt 0.503798 0.293412 +vt 0.335505 0.015077 +vt 0.410697 0.441511 +vt 0.496202 0.293412 +vt 0.466506 0.125000 +vt 0.250000 0.500000 +vt 0.089303 0.441511 +vn 0.325600 0.894700 -0.305700 +vn 0.824600 0.476100 -0.305700 +vn 0.937700 -0.165300 -0.305700 +vn 0.612000 -0.729400 -0.305700 +vn 0.000000 -0.952100 -0.305700 +vn -0.612000 -0.729400 -0.305700 +vn -0.937700 -0.165300 -0.305700 +vn -0.277000 0.761100 0.586500 +vn -0.325600 0.894700 -0.305700 +vn -0.824600 0.476100 -0.305700 +vn -0.340300 0.934900 -0.100600 +vn 0.000000 0.000000 -1.000000 +vn -0.861600 0.497500 -0.100600 +vn -0.979800 -0.172800 -0.100600 +vn -0.639500 -0.762200 -0.100600 +vn 0.000000 -0.994900 -0.100600 +vn 0.639500 -0.762200 -0.100600 +vn 0.979800 -0.172800 -0.100600 +vn 0.861600 0.497500 -0.100600 +vn 0.340300 0.934900 -0.100600 +vn 0.000000 0.000000 1.000000 +vn -0.701400 0.405000 0.586500 +vn -0.797600 -0.140600 0.586500 +vn -0.520600 -0.620400 0.586500 +vn 0.000000 -0.809900 0.586500 +vn 0.520600 -0.620400 0.586500 +vn 0.797600 -0.140600 0.586500 +vn 0.701400 0.405000 0.586500 +vn 0.277000 0.761100 0.586500 +vn -0.797600 -0.140600 0.586600 +usemtl Reflector +f 1/1/1 2/2/1 3/3/1 +f 3/1/2 4/2/2 5/3/2 +f 5/1/3 6/2/3 7/3/3 +f 7/1/4 8/2/4 9/3/4 +f 9/1/5 10/2/5 11/3/5 +f 11/1/6 12/2/6 13/3/6 +f 13/1/7 14/2/7 15/3/7 +f 2/4/8 16/5/8 17/6/8 +f 18/1/9 16/2/9 1/3/9 +f 15/1/10 19/2/10 18/3/10 +f 18/7/11 1/8/11 20/9/11 +f 21/10/12 22/11/12 20/12/12 +f 15/7/13 18/8/13 23/9/13 +f 13/7/14 15/8/14 24/9/14 +f 11/7/15 13/8/15 25/9/15 +f 9/7/16 11/8/16 26/9/16 +f 7/7/17 9/8/17 27/9/17 +f 5/7/18 7/8/18 28/9/18 +f 3/7/19 5/8/19 22/9/19 +f 1/7/20 3/8/20 21/9/20 +f 29/13/21 30/14/21 31/15/21 +f 16/4/22 19/5/22 32/6/22 +f 19/4/23 14/5/23 33/6/23 +f 14/4/24 12/5/24 34/6/24 +f 12/4/25 10/5/25 30/6/25 +f 10/4/26 8/5/26 31/6/26 +f 8/4/27 6/5/27 29/6/27 +f 6/4/28 4/5/28 35/6/28 +f 4/4/29 2/5/29 36/6/29 +f 2/2/1 4/16/1 3/3/1 +f 4/2/2 6/16/2 5/3/2 +f 6/2/3 8/16/3 7/3/3 +f 8/2/4 10/16/4 9/3/4 +f 10/2/5 12/16/5 11/3/5 +f 12/2/6 14/16/6 13/3/6 +f 14/2/7 19/16/7 15/3/7 +f 16/5/8 32/17/8 17/6/8 +f 16/2/9 2/16/9 1/3/9 +f 19/2/10 16/16/10 18/3/10 +f 1/8/11 21/18/11 20/9/11 +f 28/19/12 27/20/12 26/21/12 +f 28/19/12 26/21/12 25/22/12 +f 22/11/12 28/19/12 20/12/12 +f 28/19/12 25/22/12 20/12/12 +f 25/22/12 24/23/12 20/12/12 +f 24/23/12 23/24/12 20/12/12 +f 18/8/13 20/18/13 23/9/13 +f 15/8/14 23/18/14 24/9/14 +f 13/8/15 24/18/15 25/9/15 +f 11/8/16 25/18/16 26/9/16 +f 9/8/17 26/18/17 27/9/17 +f 7/8/18 27/18/18 28/9/18 +f 5/8/19 28/18/19 22/9/19 +f 3/8/20 22/18/20 21/9/20 +f 29/13/21 34/25/21 30/14/21 +f 17/26/21 32/27/21 33/28/21 +f 36/29/21 17/26/21 33/28/21 +f 36/29/21 33/28/21 34/25/21 +f 35/30/21 36/29/21 34/25/21 +f 29/13/21 35/30/21 34/25/21 +f 19/5/22 33/17/22 32/6/22 +f 14/5/23 34/17/30 33/6/23 +f 12/5/24 30/17/24 34/6/24 +f 10/5/25 31/17/25 30/6/25 +f 8/5/26 29/17/26 31/6/26 +f 6/5/27 35/17/27 29/6/27 +f 4/5/28 36/17/28 35/6/28 +f 2/5/29 17/17/29 36/6/29 +o Ring +v 0.200623 1.163777 -0.132192 +v 0.133225 1.285288 -0.132192 +v 0.180561 1.160594 -0.097008 +v 0.119903 1.269953 -0.097008 +v 0.140436 1.154227 -0.097008 +v 0.093258 1.239285 -0.097008 +v 0.120374 1.151044 -0.132192 +v 0.079935 1.223951 -0.132192 +v 0.140436 1.154227 -0.167376 +v 0.093258 1.239285 -0.167376 +v 0.180561 1.160594 -0.167376 +v 0.003490 1.335048 -0.132192 +v 0.003141 1.314737 -0.097008 +v 0.002443 1.274117 -0.097008 +v 0.002094 1.253807 -0.132192 +v 0.002443 1.274117 -0.167376 +v 0.119903 1.269953 -0.167376 +v 0.003141 1.314737 -0.167376 +v -0.127879 1.289774 -0.132192 +v -0.115091 1.273991 -0.097008 +v -0.089515 1.242425 -0.097008 +v -0.076727 1.226642 -0.132192 +v -0.089515 1.242425 -0.167376 +v -0.115091 1.273991 -0.167376 +v -0.199411 1.170650 -0.132192 +v -0.179470 1.166780 -0.097008 +v -0.139588 1.159039 -0.097008 +v -0.119647 1.155168 -0.132192 +v -0.139588 1.159039 -0.167376 +v -0.179470 1.166780 -0.167376 +v -0.177637 1.033416 -0.132192 +v -0.159873 1.043269 -0.097008 +v -0.124346 1.062975 -0.097008 +v -0.106582 1.072828 -0.132192 +v -0.124346 1.062975 -0.167376 +v -0.159873 1.043269 -0.167376 +v -0.072744 0.942285 -0.132192 +v -0.065470 0.961251 -0.097008 +v -0.050921 0.999183 -0.097008 +v -0.043646 1.018149 -0.132192 +v -0.050921 0.999183 -0.167376 +v -0.065470 0.961251 -0.167376 +v 0.066186 0.939898 -0.132192 +v 0.059568 0.959102 -0.097008 +v 0.046330 0.997512 -0.097008 +v 0.039712 1.016717 -0.132192 +v 0.046330 0.997512 -0.167376 +v 0.059568 0.959102 -0.167376 +v 0.174147 1.027372 -0.132192 +v 0.156733 1.037829 -0.097008 +v 0.121903 1.058744 -0.097008 +v 0.104488 1.069201 -0.132192 +v 0.121903 1.058744 -0.167376 +v 0.156733 1.037829 -0.167376 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vn 0.768700 0.426300 0.476900 +vn 0.000000 -0.000000 1.000000 +vn -0.768700 -0.426300 0.476900 +vn -0.768700 -0.426300 -0.476900 +vn 0.000000 0.000000 -1.000000 +vn 0.768700 0.426300 -0.476900 +vn 0.314800 0.820700 0.476900 +vn -0.314800 -0.820700 0.476900 +vn -0.314800 -0.820700 -0.476900 +vn 0.314800 0.820700 -0.476900 +vn -0.286400 0.831000 0.476900 +vn 0.286400 -0.831000 0.476900 +vn 0.286400 -0.831000 -0.476900 +vn -0.286400 0.831000 -0.476900 +vn -0.753600 0.452500 0.476900 +vn 0.753500 -0.452500 0.476900 +vn 0.753500 -0.452500 -0.476900 +vn -0.753600 0.452500 -0.476900 +vn -0.868100 -0.137700 0.476900 +vn 0.868100 0.137700 0.476900 +vn 0.868100 0.137700 -0.476900 +vn -0.868100 -0.137700 -0.476900 +vn -0.576500 -0.663500 0.476900 +vn 0.576500 0.663500 0.476900 +vn 0.576500 0.663500 -0.476900 +vn -0.576500 -0.663500 -0.476900 +vn -0.015100 -0.878800 0.476900 +vn -0.015100 -0.878900 0.476900 +vn 0.015100 0.878800 0.476900 +vn 0.015100 0.878800 -0.476900 +vn -0.015100 -0.878800 -0.476900 +vn -0.015100 -0.878900 -0.476900 +vn 0.553400 -0.683000 0.476800 +vn 0.553400 -0.682900 0.476900 +vn 0.553400 -0.682900 0.476800 +vn -0.553300 0.682900 0.476900 +vn -0.553300 0.682900 -0.476900 +vn 0.553400 -0.682900 -0.476800 +vn 0.553300 -0.682900 -0.476900 +vn 0.862900 -0.167500 0.476900 +vn -0.862900 0.167500 0.476900 +vn -0.862900 0.167500 -0.476900 +vn 0.862900 -0.167500 -0.476900 +vn -0.015100 -0.878900 0.476800 +vn 0.553300 -0.682900 0.476900 +usemtl Reflector +f 37/31/31 38/32/31 39/33/31 +f 39/31/32 40/32/32 41/33/32 +f 41/31/33 42/32/33 43/33/33 +f 43/31/34 44/32/34 45/33/34 +f 45/31/35 46/32/35 47/33/35 +f 37/31/36 47/32/36 38/33/36 +f 38/31/37 48/32/37 40/33/37 +f 40/31/32 49/32/32 50/34/32 +f 42/31/38 50/32/38 44/33/38 +f 44/31/39 51/32/39 46/33/39 +f 46/31/35 52/32/35 53/33/35 +f 53/31/40 54/32/40 38/33/40 +f 48/31/41 55/32/41 49/33/41 +f 49/31/32 56/32/32 50/33/32 +f 50/31/42 57/32/42 51/33/42 +f 51/31/43 58/32/43 52/33/43 +f 52/31/35 59/32/35 60/34/35 +f 54/31/44 60/32/44 48/33/44 +f 55/31/45 61/32/45 62/34/45 +f 56/31/32 62/32/32 57/33/32 +f 57/31/46 63/32/46 64/34/46 +f 58/31/47 64/32/47 59/33/47 +f 59/31/35 65/32/35 60/33/35 +f 60/31/48 66/32/48 55/33/48 +f 61/31/49 67/32/49 68/34/49 +f 62/31/32 68/32/32 63/33/32 +f 63/31/50 69/32/50 64/33/50 +f 64/31/51 70/32/51 65/33/51 +f 65/31/35 71/32/35 72/34/35 +f 66/31/52 72/32/52 61/33/52 +f 67/31/53 73/32/53 68/33/53 +f 68/31/32 74/32/32 69/33/32 +f 69/31/54 75/32/54 76/34/54 +f 70/31/55 76/32/55 71/33/55 +f 71/31/35 77/32/35 78/34/35 +f 72/31/56 78/32/56 67/33/56 +f 73/31/57 79/32/58 74/33/57 +f 74/31/32 80/32/32 75/33/32 +f 75/31/59 81/32/59 76/33/59 +f 76/31/60 82/32/60 77/33/60 +f 77/31/35 83/32/35 78/33/35 +f 78/31/61 84/32/62 73/33/61 +f 79/31/63 85/32/64 80/33/65 +f 80/31/32 86/32/32 81/33/32 +f 81/31/66 87/32/66 82/33/66 +f 82/31/67 88/32/67 83/33/67 +f 83/31/35 89/32/35 84/33/35 +f 84/31/68 90/32/69 85/34/69 +f 85/31/70 37/32/70 86/33/70 +f 86/31/32 39/32/32 87/33/32 +f 87/31/71 41/32/71 88/33/71 +f 88/31/72 43/32/72 89/33/72 +f 89/31/35 45/32/35 90/33/35 +f 90/31/73 47/32/73 37/34/73 +f 38/32/31 40/34/31 39/33/31 +f 40/32/32 42/34/32 41/33/32 +f 42/32/33 44/34/33 43/33/33 +f 44/32/34 46/34/34 45/33/34 +f 46/32/35 53/34/35 47/33/35 +f 47/32/36 53/34/36 38/33/36 +f 48/32/37 49/34/37 40/33/37 +f 42/33/32 40/31/32 50/34/32 +f 50/32/38 51/34/38 44/33/38 +f 51/32/39 52/34/39 46/33/39 +f 52/32/35 54/34/35 53/33/35 +f 54/32/40 48/34/40 38/33/40 +f 55/32/41 56/34/41 49/33/41 +f 56/32/32 57/34/32 50/33/32 +f 57/32/42 58/34/42 51/33/42 +f 58/32/43 59/34/43 52/33/43 +f 54/33/35 52/31/35 60/34/35 +f 60/32/44 55/34/44 48/33/44 +f 56/33/45 55/31/45 62/34/45 +f 62/32/32 63/34/32 57/33/32 +f 58/33/46 57/31/46 64/34/46 +f 64/32/47 65/34/47 59/33/47 +f 65/32/35 66/34/35 60/33/35 +f 66/32/48 61/34/48 55/33/48 +f 62/33/49 61/31/49 68/34/49 +f 68/32/32 69/34/32 63/33/32 +f 69/32/50 70/34/50 64/33/50 +f 70/32/51 71/34/51 65/33/51 +f 66/33/35 65/31/35 72/34/35 +f 72/32/52 67/34/52 61/33/52 +f 73/32/53 74/34/53 68/33/53 +f 74/32/32 75/34/32 69/33/32 +f 70/33/54 69/31/54 76/34/54 +f 76/32/55 77/34/55 71/33/55 +f 72/33/35 71/31/35 78/34/35 +f 78/32/56 73/34/56 67/33/56 +f 79/32/58 80/34/74 74/33/57 +f 80/32/32 81/34/32 75/33/32 +f 81/32/59 82/34/59 76/33/59 +f 82/32/60 83/34/60 77/33/60 +f 83/32/35 84/34/35 78/33/35 +f 84/32/62 79/34/62 73/33/61 +f 85/32/64 86/34/75 80/33/65 +f 86/32/32 87/34/32 81/33/32 +f 87/32/66 88/34/66 82/33/66 +f 88/32/67 89/34/67 83/33/67 +f 89/32/35 90/34/35 84/33/35 +f 79/33/68 84/31/68 85/34/69 +f 37/32/70 39/34/70 86/33/70 +f 39/32/32 41/34/32 87/33/32 +f 41/32/71 43/34/71 88/33/71 +f 43/32/72 45/34/72 89/33/72 +f 45/32/35 47/34/35 90/33/35 +f 85/33/73 90/31/73 37/34/73 +o Axle +v -0.041604 1.129241 0.041604 +v -0.041604 1.129241 -0.041604 +v -0.042071 0.805585 0.042071 +v 0.041604 1.129241 -0.041604 +v -0.042071 0.805585 -0.042071 +v 0.041604 1.129241 0.041604 +v 0.042071 0.805585 -0.042071 +v 0.042071 0.805585 0.042071 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 0.000000 1.000000 +vt 0.500000 1.000000 +vn -1.000000 0.001400 0.000000 +vn 0.000000 0.001400 -1.000000 +vn 1.000000 0.001400 0.000000 +vn 0.000000 0.001400 1.000000 +usemtl Reflector +f 91/35/76 92/36/76 93/37/76 +f 92/35/77 94/36/77 95/37/77 +f 94/35/78 96/36/78 97/37/78 +f 96/35/79 91/36/79 98/37/79 +f 92/36/76 95/38/76 93/37/76 +f 94/36/77 97/38/77 95/37/77 +f 96/36/78 98/38/78 97/37/78 +f 91/36/79 93/38/79 98/37/79 +o Base +v 0.089808 0.814962 -0.089808 +v -0.089808 0.814962 -0.089808 +v 0.089808 0.814962 0.089808 +v -0.089808 0.814962 0.089808 +v -0.146304 0.140310 0.146304 +v -0.146304 0.140310 -0.146304 +v 0.146304 0.140310 -0.146304 +v 0.146304 0.140310 0.146304 +v -0.146304 0.140310 0.146304 +v 0.146304 0.140310 0.146304 +v 0.146304 0.140310 -0.146304 +v -0.146304 0.140310 -0.146304 +v -0.370646 0.223467 0.370646 +v -0.370646 0.223467 -0.370646 +v -0.370646 0.059008 0.370646 +v 0.370646 0.223467 -0.370646 +v -0.370646 0.059008 -0.370646 +v 0.370646 0.223467 0.370646 +v 0.370646 0.059008 -0.370646 +v 0.370646 0.059008 0.370646 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.500000 1.000000 +vt 0.000000 0.500000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn -0.996500 0.083400 0.000000 +vn 0.000000 0.083400 -0.996500 +vn 0.996500 0.083400 0.000000 +vn 0.000000 0.083400 0.996500 +vn 0.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +usemtl Reflector +f 99/39/80 100/40/80 101/41/80 +f 102/39/81 100/40/81 103/41/81 +f 100/39/82 99/40/82 104/41/82 +f 99/39/83 101/40/83 105/41/83 +f 101/39/84 102/40/84 106/41/84 +f 107/39/85 108/40/85 103/41/85 +f 108/39/85 109/40/85 106/41/85 +f 109/39/85 110/40/85 105/41/85 +f 110/39/85 107/40/85 104/41/85 +f 111/42/86 112/39/86 113/43/86 +f 112/42/87 114/39/87 115/43/87 +f 114/42/88 116/39/88 117/43/88 +f 116/42/89 111/39/89 118/43/89 +f 113/42/90 115/39/90 118/43/90 +f 116/42/80 114/39/80 111/43/80 +f 100/40/80 102/44/80 101/41/80 +f 100/40/81 104/44/81 103/41/81 +f 99/40/82 105/44/82 104/41/82 +f 101/40/83 106/44/83 105/41/83 +f 102/40/84 103/44/84 106/41/84 +f 108/40/85 106/44/85 103/41/85 +f 109/40/85 105/44/85 106/41/85 +f 110/40/85 104/44/85 105/41/85 +f 107/40/85 103/44/85 104/41/85 +f 112/39/86 115/41/86 113/43/86 +f 114/39/87 117/41/87 115/43/87 +f 116/39/88 118/41/88 117/43/88 +f 111/39/89 113/41/89 118/43/89 +f 115/39/90 117/41/90 118/43/90 +f 114/39/80 112/41/80 111/43/80 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_blue.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_blue.json new file mode 100644 index 00000000..46201d31 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_blue.json @@ -0,0 +1,129 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/blue_egg_0", + "texture": "galacticraftplanets:blocks/blue_egg_0" +}, +"elements": [ +{ + "from": [ 4, 0, 4 ], + "to": [ 12, 10, 12 ], + "faces": { + "down": { "uv": [ 12, 12, 4, 4 ], "texture": "#texture" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#texture" }, + "north": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "south": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "west": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "east": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 10, 5 ], + "to": [ 11, 10.5, 11 ], + "faces": { + "down": { "uv": [ 11, 11, 5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "east": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" } + } +}, +{ + "from": [ 3.5, 0, 5 ], + "to": [ 4, 8, 11 ], + "faces": { + "down": { "uv": [ 12.5, 11, 12, 5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 5, 4, 11 ], "texture": "#texture" }, + "north": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 3.5 ], + "to": [ 11, 8, 4 ], + "faces": { + "down": { "uv": [ 11, 4, 5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 3.5, 11, 4 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12, 0, 5 ], + "to": [ 12.5, 8, 11 ], + "faces": { + "down": { "uv": [ 4, 11, 3.5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 12, 5, 12.5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 12 ], + "to": [ 11, 8, 12.5 ], + "faces": { + "down": { "uv": [ 11, 12.5, 5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 5, 12, 11, 12.5 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 0, 7 ], + "to": [ 3.5, 4, 9 ], + "faces": { + "down": { "uv": [ 13, 9, 12.5, 7 ], "texture": "#texture" }, + "up": { "uv": [ 3, 7, 3.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 3 ], + "to": [ 9, 4, 3.5 ], + "faces": { + "down": { "uv": [ 9, 3.5, 7, 3 ], "texture": "#texture" }, + "up": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 12.5 ], + "to": [ 9, 4, 13 ], + "faces": { + "down": { "uv": [ 9, 13, 7, 12.5 ], "texture": "#texture" }, + "up": { "uv": [ 7, 12.5, 9, 13 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12.5, 0, 7 ], + "to": [ 13, 4, 9 ], + "faces": { + "down": { "uv": [ 3.5, 9, 3, 7 ], "texture": "#texture" }, + "up": { "uv": [ 12.5, 7, 13, 9 ], "texture": "#texture" }, + "north": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_red.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_red.json new file mode 100644 index 00000000..13b50486 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_red.json @@ -0,0 +1,129 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/red_egg_0", + "texture": "galacticraftplanets:blocks/red_egg_0" +}, +"elements": [ +{ + "from": [ 4, 0, 4 ], + "to": [ 12, 10, 12 ], + "faces": { + "down": { "uv": [ 12, 12, 4, 4 ], "texture": "#texture" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#texture" }, + "north": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "south": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "west": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "east": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 10, 5 ], + "to": [ 11, 10.5, 11 ], + "faces": { + "down": { "uv": [ 11, 11, 5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "east": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" } + } +}, +{ + "from": [ 3.5, 0, 5 ], + "to": [ 4, 8, 11 ], + "faces": { + "down": { "uv": [ 12.5, 11, 12, 5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 5, 4, 11 ], "texture": "#texture" }, + "north": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 3.5 ], + "to": [ 11, 8, 4 ], + "faces": { + "down": { "uv": [ 11, 4, 5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 3.5, 11, 4 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12, 0, 5 ], + "to": [ 12.5, 8, 11 ], + "faces": { + "down": { "uv": [ 4, 11, 3.5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 12, 5, 12.5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 12 ], + "to": [ 11, 8, 12.5 ], + "faces": { + "down": { "uv": [ 11, 12.5, 5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 5, 12, 11, 12.5 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 0, 7 ], + "to": [ 3.5, 4, 9 ], + "faces": { + "down": { "uv": [ 13, 9, 12.5, 7 ], "texture": "#texture" }, + "up": { "uv": [ 3, 7, 3.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 3 ], + "to": [ 9, 4, 3.5 ], + "faces": { + "down": { "uv": [ 9, 3.5, 7, 3 ], "texture": "#texture" }, + "up": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 12.5 ], + "to": [ 9, 4, 13 ], + "faces": { + "down": { "uv": [ 9, 13, 7, 12.5 ], "texture": "#texture" }, + "up": { "uv": [ 7, 12.5, 9, 13 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12.5, 0, 7 ], + "to": [ 13, 4, 9 ], + "faces": { + "down": { "uv": [ 3.5, 9, 3, 7 ], "texture": "#texture" }, + "up": { "uv": [ 12.5, 7, 13, 9 ], "texture": "#texture" }, + "north": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_yellow.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_yellow.json new file mode 100644 index 00000000..42883f7f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/slimeling_egg_yellow.json @@ -0,0 +1,129 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/yellow_egg_0", + "texture": "galacticraftplanets:blocks/yellow_egg_0" +}, +"elements": [ +{ + "from": [ 4, 0, 4 ], + "to": [ 12, 10, 12 ], + "faces": { + "down": { "uv": [ 12, 12, 4, 4 ], "texture": "#texture" }, + "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#texture" }, + "north": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "south": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "west": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" }, + "east": { "uv": [ 4, 6, 12, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 10, 5 ], + "to": [ 11, 10.5, 11 ], + "faces": { + "down": { "uv": [ 11, 11, 5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" }, + "east": { "uv": [ 5, 5.5, 11, 6 ], "texture": "#texture" } + } +}, +{ + "from": [ 3.5, 0, 5 ], + "to": [ 4, 8, 11 ], + "faces": { + "down": { "uv": [ 12.5, 11, 12, 5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 5, 4, 11 ], "texture": "#texture" }, + "north": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 3.5 ], + "to": [ 11, 8, 4 ], + "faces": { + "down": { "uv": [ 11, 4, 5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 5, 3.5, 11, 4 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12, 0, 5 ], + "to": [ 12.5, 8, 11 ], + "faces": { + "down": { "uv": [ 4, 11, 3.5, 5 ], "texture": "#texture" }, + "up": { "uv": [ 12, 5, 12.5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 5, 0, 12 ], + "to": [ 11, 8, 12.5 ], + "faces": { + "down": { "uv": [ 11, 12.5, 5, 12 ], "texture": "#texture" }, + "up": { "uv": [ 5, 12, 11, 12.5 ], "texture": "#texture" }, + "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12, 8, 12.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3.5, 8, 4, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 3, 0, 7 ], + "to": [ 3.5, 4, 9 ], + "faces": { + "down": { "uv": [ 13, 9, 12.5, 7 ], "texture": "#texture" }, + "up": { "uv": [ 3, 7, 3.5, 9 ], "texture": "#texture" }, + "north": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "south": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 3 ], + "to": [ 9, 4, 3.5 ], + "faces": { + "down": { "uv": [ 9, 3.5, 7, 3 ], "texture": "#texture" }, + "up": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "east": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 0, 12.5 ], + "to": [ 9, 4, 13 ], + "faces": { + "down": { "uv": [ 9, 13, 7, 12.5 ], "texture": "#texture" }, + "up": { "uv": [ 7, 12.5, 9, 13 ], "texture": "#texture" }, + "north": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "south": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "west": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "east": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" } + } +}, +{ + "from": [ 12.5, 0, 7 ], + "to": [ 13, 4, 9 ], + "faces": { + "down": { "uv": [ 3.5, 9, 3, 7 ], "texture": "#texture" }, + "up": { "uv": [ 12.5, 7, 13, 9 ], "texture": "#texture" }, + "north": { "uv": [ 3, 12, 3.5, 16 ], "texture": "#texture" }, + "south": { "uv": [ 12.5, 12, 13, 16 ], "texture": "#texture" }, + "west": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" }, + "east": { "uv": [ 7, 12, 9, 16 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_controller.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_controller.json new file mode 100644 index 00000000..854aee30 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_controller.json @@ -0,0 +1,25 @@ +{ + "parent": "block/cube_all", + "elements": [ + { "from": [ 0, 4, 0 ], + "to": [ 16, 12.5, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftplanets:blocks/solar_controller_top", + "down": "galacticraftplanets:blocks/solar_controller_top", + "up": "galacticraftplanets:blocks/solar_controller_top", + "north": "galacticraftplanets:blocks/solar_controller_side", + "east": "galacticraftplanets:blocks/solar_controller_output", + "south": "galacticraftplanets:blocks/solar_controller_side", + "west": "galacticraftplanets:blocks/solar_controller_side" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_module.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_module.json new file mode 100644 index 00000000..5a47a7c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/solar_array_module.json @@ -0,0 +1,25 @@ +{ + "parent": "block/cube_all", + "elements": [ + { "from": [ 0, 6, 0 ], + "to": [ 16, 10, 16 ], + "faces": { + "down": { "texture": "#down", "cullface": "down" }, + "up": { "texture": "#up", "cullface": "up" }, + "north": { "texture": "#north", "cullface": "north" }, + "south": { "texture": "#south", "cullface": "south" }, + "west": { "texture": "#west", "cullface": "west" }, + "east": { "texture": "#east", "cullface": "east" } + } + } + ], + "textures": { + "particle": "galacticraftplanets:blocks/solar_top", + "down": "galacticraftplanets:blocks/solar_top", + "up": "galacticraftplanets:blocks/solar_top", + "north": "galacticraftplanets:blocks/solar_side", + "east": "galacticraftplanets:blocks/solar_side", + "south": "galacticraftplanets:blocks/solar_side", + "west": "galacticraftplanets:blocks/solar_side" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/spout.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/spout.json new file mode 100644 index 00000000..2fc8e316 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/spout.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube_all", + "textures": { + "particle": "galacticraftplanets:blocks/venus_rock_0", + "down": "galacticraftplanets:blocks/venus_rock_0", + "up": "galacticraftplanets:blocks/spout", + "north": "galacticraftplanets:blocks/venus_rock_0", + "east": "galacticraftplanets:blocks/venus_rock_0", + "south": "galacticraftplanets:blocks/venus_rock_0", + "west": "galacticraftplanets:blocks/venus_rock_0" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.mtl new file mode 100644 index 00000000..d69bd249 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.mtl @@ -0,0 +1,5 @@ +newmtl Connector +map_Kd galacticraftplanets:blocks/telepad_short0 + +newmtl Main +map_Kd galacticraftplanets:blocks/telepad_short diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.obj new file mode 100644 index 00000000..929e5d58 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/telepad_short.obj @@ -0,0 +1,406 @@ +# Blender v2.76 (sub 0) OBJ File: 'tele.blend' +# www.blender.org +mtllib telepad_short.mtl +o Connector +v -0.262909 3.388816 0.262909 +v -0.262909 3.691933 0.262909 +v -0.262909 3.388816 -0.262909 +v -0.262909 3.691933 -0.262909 +v 0.262909 3.388816 0.262909 +v 0.262909 3.691933 0.262909 +v 0.262909 3.388816 -0.262909 +v 0.262909 3.691933 -0.262909 +vt 0.993167 0.505142 +vt 0.993167 0.996858 +vt 0.501450 0.996858 +vt 0.390130 0.611101 +vt 0.390130 0.905664 +vt 0.095566 0.905664 +vt 0.501450 0.505142 +vt 0.095566 0.611101 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +usemtl Connector +f 4/1/1 3/2/1 1/3/1 +f 8/1/2 7/2/2 3/3/2 +f 6/1/3 5/2/3 7/3/3 +f 2/1/4 1/2/4 5/3/4 +f 8/4/5 4/5/5 2/6/5 +f 2/7/1 4/1/1 1/3/1 +f 4/7/2 8/1/2 3/3/2 +f 8/7/3 6/1/3 7/3/3 +f 6/7/4 2/1/4 5/3/4 +f 6/8/5 8/4/5 2/6/5 +o Top +v -2.000000 3.690734 -2.000000 +v -2.000000 3.490734 -2.000000 +v -2.000000 3.690734 2.000000 +v -2.000000 3.490734 2.000000 +v 2.000000 3.690734 -2.000000 +v 2.000000 3.490734 -2.000000 +v 2.000000 3.690734 2.000000 +v 2.000000 3.490734 2.000000 +v -1.500000 3.490734 -1.500000 +v -1.500000 3.290734 -1.500000 +v -1.500000 3.490734 1.500000 +v -1.500000 3.290734 1.500000 +v 1.500000 3.490734 -1.500000 +v 1.500000 3.290734 -1.500000 +v 1.500000 3.490734 1.500000 +v 1.500000 3.290734 1.500000 +v -0.750000 3.290734 -0.750000 +v -0.750000 3.090734 -0.750000 +v -0.750000 3.290734 0.750000 +v -0.750000 3.090734 0.750000 +v 0.750000 3.290734 -0.750000 +v 0.750000 3.090734 -0.750000 +v 0.750000 3.290734 0.750000 +v 0.750000 3.090734 0.750000 +v -2.000000 3.690734 0.666667 +v -2.000000 3.690734 -0.666667 +v 0.666667 3.690734 2.000000 +v -0.666667 3.690734 2.000000 +v 2.000000 3.690734 -0.666667 +v 2.000000 3.690734 0.666667 +v -0.666667 3.690734 -2.000000 +v 0.666667 3.690734 -2.000000 +v -1.768620 3.690734 -1.768620 +v 1.768620 3.690734 -1.768620 +v -1.768620 3.690734 1.768620 +v 1.768620 3.690734 1.768620 +v -1.768620 3.599312 -1.768620 +v 1.768620 3.599312 -1.768620 +v -1.768620 3.599313 1.768620 +v 1.768620 3.599313 1.768620 +v -0.621219 3.090734 -0.621219 +v -0.621219 3.090734 0.621219 +v 0.621219 3.090734 0.621219 +v 0.621219 3.090734 -0.621219 +v -0.621219 3.254340 -0.621219 +v -0.621219 3.254340 0.621219 +v 0.621219 3.254340 0.621219 +v 0.621219 3.254340 -0.621219 +vt 0.953582 0.867121 +vt 0.752682 0.519153 +vt 0.551782 0.635142 +vt 0.752682 0.983111 +vt 0.984661 0.519153 +vt 0.984661 0.983111 +vt 0.520703 0.983111 +vt 0.986211 0.018439 +vt 0.986211 0.482398 +vt 0.522253 0.482398 +vt 0.522253 0.018439 +vt 0.994914 0.501149 +vt 0.994914 0.988713 +vt 0.507350 0.988713 +vt 0.507350 0.501149 +vt 0.487048 0.021540 +vt 0.487048 0.485498 +vt 0.023090 0.485498 +vt 0.551782 0.867121 +vt 0.953582 0.635142 +vt 0.520703 0.519153 +vt 0.023090 0.021540 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 -0.000000 +usemtl Main +f 12/9/6 33/10/6 34/11/6 +f 16/9/7 35/10/7 12/12/7 +f 14/9/8 37/10/8 38/11/8 +f 10/9/9 39/10/9 14/12/9 +f 16/13/10 12/14/10 10/15/10 +f 20/13/6 19/14/6 17/15/6 +f 24/13/7 23/14/7 19/15/7 +f 22/13/8 21/14/8 23/15/8 +f 18/13/9 17/14/9 21/15/9 +f 19/13/11 23/14/11 21/15/11 +f 24/13/10 20/14/10 18/15/10 +f 28/16/6 27/17/6 25/18/6 +f 32/16/7 31/17/7 27/18/7 +f 32/19/8 30/16/8 29/17/8 +f 26/16/9 25/17/9 29/18/9 +f 27/13/11 31/14/11 29/15/11 +f 32/16/10 51/17/10 52/18/10 +f 43/13/8 47/14/8 45/15/8 +f 11/20/11 15/21/11 44/22/11 +f 11/23/11 43/20/11 41/21/11 +f 47/13/11 48/14/11 46/15/11 +f 42/13/6 46/14/6 48/15/6 +f 44/13/9 48/14/9 47/15/9 +f 41/13/7 45/14/7 46/15/7 +f 51/16/6 55/17/6 56/18/6 +f 26/16/10 49/17/10 50/18/10 +f 30/16/10 52/17/10 49/18/10 +f 28/16/10 50/17/10 51/18/10 +f 55/24/10 54/25/10 53/26/10 +f 49/16/8 53/17/8 54/18/8 +f 52/16/7 56/17/7 53/18/7 +f 50/16/9 54/17/9 55/18/9 +f 15/20/11 13/21/11 42/22/11 +f 13/20/11 9/21/11 41/22/11 +f 9/27/6 10/12/6 34/11/6 +f 12/9/6 11/28/6 33/10/6 +f 34/11/6 10/12/6 12/9/6 +f 11/27/7 12/12/7 36/11/7 +f 16/9/7 15/28/7 35/10/7 +f 35/10/7 36/11/7 12/12/7 +f 15/27/8 16/12/8 38/11/8 +f 14/9/8 13/28/8 37/10/8 +f 38/11/8 16/12/8 14/9/8 +f 13/27/9 14/12/9 40/11/9 +f 10/9/9 9/28/9 39/10/9 +f 39/10/9 40/11/9 14/12/9 +f 14/29/10 16/13/10 10/15/10 +f 18/29/6 20/13/6 17/15/6 +f 20/29/7 24/13/7 19/15/7 +f 24/29/8 22/13/8 23/15/8 +f 22/29/9 18/13/9 21/15/9 +f 17/29/11 19/13/11 21/15/11 +f 22/29/10 24/13/10 18/15/10 +f 26/19/6 28/16/6 25/18/6 +f 28/19/7 32/16/7 27/18/7 +f 31/18/8 32/19/8 29/17/8 +f 30/19/9 26/16/9 29/18/9 +f 25/29/11 27/13/11 29/15/11 +f 30/19/10 32/16/10 52/18/10 +f 41/29/8 43/13/8 45/15/8 +f 43/23/11 11/20/11 44/22/11 +f 9/22/11 11/23/11 41/21/11 +f 45/29/11 47/13/11 46/15/11 +f 44/29/6 42/13/6 48/15/6 +f 43/29/9 44/13/9 47/15/9 +f 42/29/7 41/13/7 46/15/7 +f 52/19/6 51/16/6 56/18/6 +f 28/19/10 26/16/10 50/18/10 +f 26/19/10 30/16/10 49/18/10 +f 32/19/10 28/16/10 51/18/10 +f 56/30/10 55/24/10 53/26/10 +f 50/19/8 49/16/8 54/18/8 +f 49/19/7 52/16/7 53/18/7 +f 51/19/9 50/16/9 55/18/9 +f 44/23/11 15/20/11 42/22/11 +f 42/23/11 13/20/11 41/22/11 +o Bottom +v -0.384384 0.378917 -0.703855 +v -0.365933 0.640014 -0.721764 +v -0.384384 0.037907 -1.950158 +v -0.384384 0.217413 -1.965660 +v 0.384384 0.378917 -0.703855 +v 0.365933 0.640014 -0.721764 +v 0.384384 0.037907 -1.950158 +v 0.384384 0.217413 -1.965660 +v -2.000000 0.000000 2.000000 +v -2.000000 0.200000 2.000000 +v -2.000000 0.000000 -2.000000 +v -2.000000 0.200000 -2.000000 +v 2.000000 0.000000 2.000000 +v 2.000000 0.200000 2.000000 +v 2.000000 0.000000 -2.000000 +v 2.000000 0.200000 -2.000000 +v -0.703855 0.378917 0.384384 +v -0.721764 0.640014 0.365933 +v -1.950158 0.037907 0.384384 +v -1.965660 0.217413 0.384384 +v -0.703855 0.378917 -0.384384 +v -0.721764 0.640014 -0.365934 +v -1.950158 0.037907 -0.384384 +v -1.965660 0.217413 -0.384384 +v 0.384384 0.378917 0.703855 +v 0.365933 0.640014 0.721764 +v 0.384384 0.037907 1.950158 +v 0.384384 0.217413 1.965660 +v -0.384384 0.378917 0.703855 +v -0.365934 0.640014 0.721764 +v -0.384384 0.037907 1.950158 +v -0.384384 0.217413 1.965660 +v 0.703855 0.378917 -0.384384 +v 0.721764 0.640014 -0.365933 +v 1.950158 0.037907 -0.384384 +v 1.965660 0.217413 -0.384384 +v 0.703855 0.378917 0.384384 +v 0.721764 0.640014 0.365933 +v 1.950158 0.037907 0.384384 +v 1.965660 0.217413 0.384384 +v -1.500000 0.200000 1.500000 +v -1.500000 0.200000 -1.500000 +v 1.500000 0.200000 -1.500000 +v 1.500000 0.200000 1.500000 +v -1.500000 0.364341 1.500000 +v -1.500000 0.364341 -1.500000 +v 1.500000 0.364341 -1.500000 +v 1.500000 0.364341 1.500000 +v -0.750000 0.364341 0.750000 +v -0.750000 0.364341 -0.750000 +v 0.750000 0.364341 -0.750000 +v 0.750000 0.364341 0.750000 +v -0.750000 0.675818 0.750000 +v -0.750000 0.675818 -0.750000 +v 0.750000 0.675818 -0.750000 +v 0.750000 0.675818 0.750000 +v -0.647926 0.675818 0.647926 +v -0.647926 0.675818 -0.647926 +v 0.647926 0.675818 -0.647926 +v 0.647926 0.675818 0.647926 +v -0.647926 0.600000 0.647926 +v -0.647926 0.600000 -0.647926 +v 0.647926 0.600000 -0.647926 +v 0.647926 0.600000 0.647926 +vt 0.488179 0.511821 +vt 0.488179 0.990443 +vt 0.009557 0.990443 +vt 0.992257 0.506907 +vt 0.992257 0.989156 +vt 0.510007 0.989156 +vt 0.009557 0.511821 +vt 0.490690 0.510860 +vt 0.490690 0.994504 +vt 0.007046 0.994504 +vt 0.987325 0.513388 +vt 0.987325 0.982674 +vt 0.518039 0.982674 +vt 0.990618 0.612042 +vt 0.990618 0.884021 +vt 0.505445 0.884021 +vt 0.990618 0.505445 +vt 0.990618 0.990618 +vt 0.505445 0.990618 +vt 0.990618 0.604676 +vt 0.990618 0.891387 +vt 0.505445 0.891387 +vt 0.987849 0.013701 +vt 0.987849 0.490237 +vt 0.511314 0.490237 +vt 0.491930 0.010457 +vt 0.491930 0.493480 +vt 0.008907 0.493480 +vt 0.510007 0.506907 +vt 0.007046 0.510860 +vt 0.518039 0.513388 +vt 0.505445 0.612042 +vt 0.505445 0.505445 +vt 0.505445 0.604676 +vt 0.511314 0.013701 +vt 0.008907 0.010457 +vn -1.000000 0.000000 0.000000 +vn 0.000000 -0.086000 -0.996300 +vn 0.997500 0.069900 -0.008900 +vn 0.000000 0.946800 -0.321700 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 -0.000000 +vn -0.996300 -0.086000 0.000000 +vn -0.008900 0.069900 -0.997500 +vn -0.321700 0.946800 0.000000 +vn 0.000000 -0.086000 0.996300 +vn -0.997500 0.069900 0.008900 +vn 0.000000 0.946800 0.321700 +vn 0.996300 -0.086000 0.000000 +vn 0.008900 0.069900 0.997500 +vn 0.321700 0.946800 0.000000 +vn -0.997500 0.069900 -0.008900 +vn -0.008900 0.069900 0.997500 +vn 0.997500 0.069900 0.008900 +vn 0.008900 0.069900 -0.997500 +usemtl Main +f 60/31/12 59/32/12 57/33/12 +f 64/34/13 63/35/13 59/36/13 +f 64/37/14 62/31/14 61/32/14 +f 64/38/15 60/39/15 58/40/15 +f 68/34/12 67/35/12 65/36/12 +f 72/34/16 71/35/16 67/36/16 +f 70/34/17 69/35/17 71/36/17 +f 66/34/18 65/35/18 69/36/18 +f 67/41/19 71/42/19 69/43/19 +f 70/44/20 100/45/20 97/46/20 +f 76/31/18 75/32/18 73/33/18 +f 80/34/21 79/35/21 75/36/21 +f 80/37/22 78/31/22 77/32/22 +f 80/38/23 76/39/23 74/40/23 +f 84/31/17 83/32/17 81/33/17 +f 88/34/24 87/35/24 83/36/24 +f 88/37/25 86/31/25 85/32/25 +f 88/38/26 84/39/26 82/40/26 +f 92/31/16 91/32/16 89/33/16 +f 96/34/27 95/35/27 91/36/27 +f 96/37/28 94/31/28 93/32/28 +f 96/38/29 92/39/29 90/40/29 +f 99/47/17 103/48/17 104/49/17 +f 68/44/20 98/45/20 99/46/20 +f 72/44/20 99/45/20 100/46/20 +f 66/44/20 97/45/20 98/46/20 +f 101/50/20 105/51/20 106/52/20 +f 97/47/12 101/48/12 102/49/12 +f 100/47/18 104/48/18 101/49/18 +f 98/47/16 102/48/16 103/49/16 +f 108/53/18 112/54/18 109/55/18 +f 104/50/20 108/51/20 105/52/20 +f 102/50/20 106/51/20 107/52/20 +f 103/50/20 107/51/20 108/52/20 +f 111/53/20 115/54/20 116/55/20 +f 106/53/16 110/54/16 111/55/16 +f 107/53/17 111/54/17 112/55/17 +f 105/53/12 109/54/12 110/55/12 +f 116/53/16 120/54/16 117/55/16 +f 109/53/20 113/54/20 114/55/20 +f 112/53/20 116/54/20 113/55/20 +f 110/53/20 114/54/20 115/55/20 +f 119/56/20 118/57/20 117/58/20 +f 114/53/18 118/54/18 119/55/18 +f 115/53/12 119/54/12 120/55/12 +f 113/53/17 117/54/17 118/55/17 +f 58/37/30 60/31/30 57/33/30 +f 60/59/13 64/34/13 59/36/13 +f 63/33/17 64/37/17 61/32/17 +f 62/60/15 64/38/15 58/40/15 +f 66/59/12 68/34/12 65/36/12 +f 68/59/16 72/34/16 67/36/16 +f 72/59/17 70/34/17 71/36/17 +f 70/59/18 66/34/18 69/36/18 +f 65/61/19 67/41/19 69/43/19 +f 66/62/20 70/44/20 97/46/20 +f 74/37/31 76/31/31 73/33/31 +f 76/59/21 80/34/21 75/36/21 +f 79/33/16 80/37/16 77/32/16 +f 78/60/23 80/38/23 74/40/23 +f 82/37/32 84/31/32 81/33/32 +f 84/59/24 88/34/24 83/36/24 +f 87/33/12 88/37/12 85/32/12 +f 86/60/26 88/38/26 82/40/26 +f 90/37/33 92/31/33 89/33/33 +f 92/59/27 96/34/27 91/36/27 +f 95/33/18 96/37/18 93/32/18 +f 94/60/29 96/38/29 90/40/29 +f 100/63/17 99/47/17 104/49/17 +f 72/62/20 68/44/20 99/46/20 +f 70/62/20 72/44/20 100/46/20 +f 68/62/20 66/44/20 98/46/20 +f 102/64/20 101/50/20 106/52/20 +f 98/63/12 97/47/12 102/49/12 +f 97/63/18 100/47/18 101/49/18 +f 99/63/16 98/47/16 103/49/16 +f 105/65/18 108/53/18 109/55/18 +f 101/64/20 104/50/20 105/52/20 +f 103/64/20 102/50/20 107/52/20 +f 104/64/20 103/50/20 108/52/20 +f 112/65/20 111/53/20 116/55/20 +f 107/65/16 106/53/16 111/55/16 +f 108/65/17 107/53/17 112/55/17 +f 106/65/12 105/53/12 110/55/12 +f 113/65/16 116/53/16 117/55/16 +f 110/65/20 109/53/20 114/55/20 +f 109/65/20 112/53/20 113/55/20 +f 111/65/20 110/53/20 115/55/20 +f 120/66/20 119/56/20 117/58/20 +f 115/65/18 114/53/18 119/55/18 +f 116/65/12 115/53/12 120/55/12 +f 114/65/17 113/53/17 118/55/17 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/terraformer_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/terraformer_model.json new file mode 100644 index 00000000..34b9b391 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/terraformer_model.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "particle": "galacticraftcore:blocks/machine", + "down": "galacticraftcore:blocks/machine", + "up": "galacticraftcore:blocks/machine", + "north": "galacticraftplanets:blocks/terraformer_0", + "east": "galacticraftcore:blocks/machine_input", + "south": "galacticraftplanets:blocks/terraformer_0", + "west": "galacticraftcore:blocks/machine" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/titanium_block_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/titanium_block_model.json new file mode 100644 index 00000000..5ab943fe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/titanium_block_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/block_titanium" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t2.json new file mode 100644 index 00000000..93b69d2f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t2.json @@ -0,0 +1,45 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/treasure_chest_mars", + "texture": "galacticraftplanets:model/treasure" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 9, 15 ], + "faces": { + "down": { "uv": [ 10.5, 8.25, 7, 4.75 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 8.5, 14, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8.5, 7, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.5, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 3.5, 10.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 10.5, 3.5, 7, 0 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 7, 15 ], + "to": [ 9.25, 11, 16 ], + "faces": { + "down": { "uv": [ 1.25, 0.25, 0.75, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0.25, 0, 0.75, 0.25 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0.25, 0.5, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0.25, 1.25, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 1.25, 0.25, 1.5, 1.25 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t3.json new file mode 100644 index 00000000..50fec3d3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/treasure_t3.json @@ -0,0 +1,45 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/treasure_chest_venus", + "texture": "galacticraftplanets:model/treasure_venus" +}, +"elements": [ +{ + "from": [ 1, 0, 1 ], + "to": [ 15, 9, 15 ], + "faces": { + "down": { "uv": [ 10.5, 8.25, 7, 4.75 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 8.5, 14, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 8.5, 7, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.5, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.5, 3.5, 10.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 10.5, 3.5, 7, 0 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" } + } +}, +{ + "from": [ 7, 7, 15 ], + "to": [ 9.25, 11, 16 ], + "faces": { + "down": { "uv": [ 1.25, 0.25, 0.75, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0.25, 0, 0.75, 0.25 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0.25, 0.5, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0.25, 1.25, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 1.25, 0.25, 1.5, 1.25 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_aluminum.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_aluminum.json new file mode 100644 index 00000000..d6a3c22d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_aluminum.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_aluminum_venus" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_copper.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_copper.json new file mode 100644 index 00000000..8426e819 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_copper.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_copper_venus" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_galena.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_galena.json new file mode 100644 index 00000000..33a8aba6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_galena.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_galena" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_quartz.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_quartz.json new file mode 100644 index 00000000..d72b3e74 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_quartz.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_quartz_venus" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_silicon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_silicon.json new file mode 100644 index 00000000..bbe8346c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_silicon.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_silicon_venus" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_solar.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_solar.json new file mode 100644 index 00000000..501367ad --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_solar.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_solar" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_tin.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_tin.json new file mode 100644 index 00000000..82781433 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_ore_tin.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/ore_tin_venus" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_0_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_0_model.json new file mode 100644 index 00000000..230d916c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_0_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_0" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_1_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_1_model.json new file mode 100644 index 00000000..8e787fdc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_1" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_2_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_2_model.json new file mode 100644 index 00000000..05ad867f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_2_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_2" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_3_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_3_model.json new file mode 100644 index 00000000..5abdd14f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_3_model.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_3" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_scorched.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_scorched.json new file mode 100644 index 00000000..27cb8a56 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/venus_rock_scorched.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "galacticraftplanets:blocks/venus_rock_scorched" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_0_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_0_model.json new file mode 100644 index 00000000..7856f12f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_0_model.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/vine_0" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_1_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_1_model.json new file mode 100644 index 00000000..48d5eba1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_1_model.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/vine_1" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_2_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_2_model.json new file mode 100644 index 00000000..f63e6513 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_2_model.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/vine_2" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_model.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_model.json new file mode 100644 index 00000000..fef7d0e8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/vine_model.json @@ -0,0 +1,26 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#cross" + }, + "elements": [ + { "from": [ 0, 0, 8 ], + "to": [ 16, 16, 8 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" } + } + }, + { "from": [ 8, 0, 0 ], + "to": [ 8, 16, 16 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, + "shade": false, + "faces": { + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" } + } + } + ] +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway.json new file mode 100644 index 00000000..5aa0ab82 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway.json @@ -0,0 +1,152 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_n.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_n.json new file mode 100644 index 00000000..a20636ae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_n.json @@ -0,0 +1,165 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ne.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ne.json new file mode 100644 index 00000000..25e77581 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ne.json @@ -0,0 +1,178 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 10, 6, 6.5 ], + "to": [ 16, 8.5, 9.5 ], + "faces": { + "down": { "uv": [ 7.5, 9.5, 1.5, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 8.5, 6.5, 14.5, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nes.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nes.json new file mode 100644 index 00000000..6c6ce2be --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nes.json @@ -0,0 +1,191 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 10, 6, 6.5 ], + "to": [ 16, 8.5, 9.5 ], + "faces": { + "down": { "uv": [ 7.5, 9.5, 1.5, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 8.5, 6.5, 14.5, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6, 10 ], + "to": [ 9.5, 8.5, 16 ], + "faces": { + "down": { "uv": [ 9.5, 14.5, 6.5, 8.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 8.5, 9.5, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nesw.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nesw.json new file mode 100644 index 00000000..eefc4d95 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_nesw.json @@ -0,0 +1,204 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0, 6, 6.5 ], + "to": [ 6, 8.5, 9.5 ], + "faces": { + "down": { "uv": [ 14.5, 9.5, 8.5, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1.5, 10.5, 7.5, 13.5 ], "texture": "#texture" }, + "north": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 1.5, 11, 7.5, 13.5 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 10, 6, 6.5 ], + "to": [ 16, 8.5, 9.5 ], + "faces": { + "down": { "uv": [ 7.5, 9.5, 1.5, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 8.5, 6.5, 14.5, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6, 10 ], + "to": [ 9.5, 8.5, 16 ], + "faces": { + "down": { "uv": [ 9.5, 14.5, 6.5, 8.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 8.5, 9.5, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ns.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ns.json new file mode 100644 index 00000000..ac5b5bb7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_ns.json @@ -0,0 +1,178 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 5.5, 6 ], + "to": [ 10, 9, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "south": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "west": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" }, + "east": { "uv": [ 6, 7, 10, 10.5 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6, 0 ], + "to": [ 9.5, 8.5, 6 ], + "faces": { + "down": { "uv": [ 9.5, 7.5, 6.5, 1.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1.5, 9.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6, 10 ], + "to": [ 9.5, 8.5, 16 ], + "faces": { + "down": { "uv": [ 9.5, 14.5, 6.5, 8.5 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 8.5, 9.5, 14.5 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 7.5, 9.5, 10 ], "texture": "#texture" }, + "west": { "uv": [ 8.5, 7.5, 14.5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 1.5, 7.5, 7.5, 10 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen.json new file mode 100644 index 00000000..9392b57c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen.json @@ -0,0 +1,153 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_d.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_d.json new file mode 100644 index 00000000..c9685793 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_d.json @@ -0,0 +1,166 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_n.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_n.json new file mode 100644 index 00000000..e5ada58f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_n.json @@ -0,0 +1,166 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nd.json new file mode 100644 index 00000000..3fb71fb7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nd.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ne.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ne.json new file mode 100644 index 00000000..25a29a03 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ne.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ned.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ned.json new file mode 100644 index 00000000..ebf86aaf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ned.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nes.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nes.json new file mode 100644 index 00000000..0db476e5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nes.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesd.json new file mode 100644 index 00000000..6f9dc4f1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesd.json @@ -0,0 +1,205 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesw.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesw.json new file mode 100644 index 00000000..bac7f375 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nesw.json @@ -0,0 +1,205 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0.0625, 6.4375, 6.5 ], + "to": [ 6.0625, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 16, 10, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_neswd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_neswd.json new file mode 100644 index 00000000..8b9d9934 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_neswd.json @@ -0,0 +1,218 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0.0625, 6.4375, 6.5 ], + "to": [ 6.0625, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 16, 10, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.9375, 6.4375, 6.5 ], + "to": [ 15.9375, 9.4375, 9.5 ], + "faces": { + "down": { "uv": [ 6, 10, 0, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ns.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ns.json new file mode 100644 index 00000000..c5d440f1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_ns.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nsd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nsd.json new file mode 100644 index 00000000..8eb05f3c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_oxygen_nsd.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "pipe_oxygen_white": "galacticraftcore:blocks/pipe_oxygen_white" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.4375, 0.0625 ], + "to": [ 9.5, 9.4375, 6.0625 ], + "faces": { + "down": { "uv": [ 10, 6, 6, 0 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 0, 10, 6 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.4375, 9.9375 ], + "to": [ 9.5, 9.4375, 15.9375 ], + "faces": { + "down": { "uv": [ 10, 16, 6, 10 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 10, 6, 16, 10 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 0, 6, 6, 10 ], "texture": "#pipe_oxygen_white" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, -0.0625, 6.5 ], + "to": [ 9.5, 6.4375, 9.5 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#pipe_oxygen_white" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#pipe_oxygen_white" }, + "north": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "south": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "west": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" }, + "east": { "uv": [ 6, 10, 10, 16 ], "texture": "#pipe_oxygen_white" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire.json new file mode 100644 index 00000000..21f49be9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire.json @@ -0,0 +1,153 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_d.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_d.json new file mode 100644 index 00000000..b1b27f39 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_d.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_n.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_n.json new file mode 100644 index 00000000..fb275223 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_n.json @@ -0,0 +1,166 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nd.json new file mode 100644 index 00000000..b1b27f39 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nd.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ne.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ne.json new file mode 100644 index 00000000..5230ad93 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ne.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ned.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ned.json new file mode 100644 index 00000000..1e598c71 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ned.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nes.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nes.json new file mode 100644 index 00000000..f3bc54ac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nes.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesd.json new file mode 100644 index 00000000..a6325481 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesd.json @@ -0,0 +1,205 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesw.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesw.json new file mode 100644 index 00000000..948c231e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nesw.json @@ -0,0 +1,205 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 11.75, 7.625, 14.375, 10.125 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 11.75, 7.625, 14.375, 10.125 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_neswd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_neswd.json new file mode 100644 index 00000000..3b56ea05 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_neswd.json @@ -0,0 +1,218 @@ +{ +"parent": "block/block", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_West", + "from": [ 0, 6.5, 6.5 ], + "to": [ 6.5, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0.0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 11.75, 7.625, 14.375, 10.125 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 11.75, 7.625, 14.375, 10.125 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_East", + "from": [ 9.5, 6.5, 6.5 ], + "to": [ 16, 9.5, 9.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "west": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ns.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ns.json new file mode 100644 index 00000000..a33af529 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_ns.json @@ -0,0 +1,179 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nsd.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nsd.json new file mode 100644 index 00000000..d412a23b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/walkway_wire_nsd.json @@ -0,0 +1,192 @@ +{ +"__comment": "Designed by Micdoodle8 with BDcraft Cubik PRO 0.96 Beta - http://bdcraft.net", +"textures": { + "particle": "galacticraftplanets:blocks/walkway", + "texture": "galacticraftplanets:blocks/walkway", + "aluminum_wire": "galacticraftcore:blocks/aluminum_wire" +}, +"elements": [ +{ + "__comment": "Top_South", + "from": [ 0, 15, 15 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 16, 16, 0, 15 ], "texture": "#texture" }, + "up": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_North", + "from": [ 0, 15, 0 ], + "to": [ 16, 16, 1 ], + "faces": { + "down": { "uv": [ 16, 1, 0, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_West", + "from": [ 0, 15, 1 ], + "to": [ 1, 16, 15 ], + "faces": { + "down": { "uv": [ 16, 15, 15, 1 ], "texture": "#texture" }, + "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }, + "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_East", + "from": [ 15, 15, 1 ], + "to": [ 16, 16, 15 ], + "faces": { + "down": { "uv": [ 1, 15, 0, 1 ], "texture": "#texture" }, + "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#texture" }, + "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid", + "from": [ 6, 14, 6 ], + "to": [ 10, 16, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "south": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "west": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" }, + "east": { "uv": [ 6, 0, 10, 2 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_North", + "from": [ 6.5, 15, 1 ], + "to": [ 9.5, 16, 6 ], + "faces": { + "down": { "uv": [ 9.5, 6, 6.5, 1 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 1, 9.5, 6 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_West", + "from": [ 1, 15, 6.5 ], + "to": [ 6, 16, 9.5 ], + "faces": { + "down": { "uv": [ 15, 9.5, 10, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 1, 6.5, 6, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_East", + "from": [ 10, 15, 6.5 ], + "to": [ 15, 16, 9.5 ], + "faces": { + "down": { "uv": [ 6, 9.5, 1, 6.5 ], "texture": "#texture" }, + "up": { "uv": [ 10, 6.5, 15, 9.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 6, 1 ], "texture": "#texture" }, + "south": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "west": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "east": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Mid_South", + "from": [ 6.5, 15, 10 ], + "to": [ 9.5, 16, 15 ], + "faces": { + "down": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "up": { "uv": [ 6.5, 10, 9.5, 15 ], "texture": "#texture" }, + "north": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "south": { "uv": [ 6.5, 0, 9.5, 1 ], "texture": "#texture" }, + "west": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" }, + "east": { "uv": [ 10, 0, 15, 1 ], "texture": "#texture" } + } +}, +{ + "__comment": "Top_Bottom_Connector", + "from": [ 7, 9, 7 ], + "to": [ 9, 14, 9 ], + "faces": { + "down": { "uv": [ 9, 9, 7, 7 ], "texture": "#texture" }, + "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#texture" }, + "north": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "south": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "west": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" }, + "east": { "uv": [ 7, 2, 9, 7 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_Mid", + "from": [ 6, 6.1875, 6 ], + "to": [ 10, 9.6875, 10 ], + "faces": { + "down": { "uv": [ 10, 10, 6, 6 ], "texture": "#texture" }, + "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#texture" }, + "north": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "south": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "west": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" }, + "east": { "uv": [ 6, 6.3125, 10, 9.8125 ], "texture": "#texture" } + } +}, +{ + "__comment": "Bottom_North", + "from": [ 6.5, 6.5, 0 ], + "to": [ 9.5, 9.5, 6.5 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_South", + "from": [ 6.5, 6.5, 9.5 ], + "to": [ 9.5, 9.5, 16 ], + "faces": { + "down": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.0, 0.0, 3.0, 6.0 ], "rotation": 90, "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "rotation": 90, "texture": "#aluminum_wire" } + } +}, +{ + "__comment": "Bottom_Down", + "from": [ 6.5, 0, 6.5 ], + "to": [ 9.5, 6.5, 9.5 ], + "faces": { + "down": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "up": { "uv": [ 12.11, 4.11, 15.89, 7.89 ], "texture": "#aluminum_wire" }, + "north": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "south": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "west": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" }, + "east": { "uv": [ 0.08, 0, 2.92, 6.4 ], "texture": "#aluminum_wire" } + } +} +] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_0.json new file mode 100644 index 00000000..1f0018e7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_0.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/web_torch_0" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_1.json new file mode 100644 index 00000000..bd3ca884 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/block/web_torch_1.json @@ -0,0 +1,6 @@ +{ + "parent": "galacticraftplanets:block/vine_model", + "textures": { + "cross": "galacticraftplanets:blocks/web_torch_1" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.mtl new file mode 100644 index 00000000..d478cedb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.mtl @@ -0,0 +1,29 @@ +newmtl None +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket + +newmtl None_NONE +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket + +newmtl None_uv.png +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket + +newmtl None_uv.png.004 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket + +newmtl None_uv.png.005 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/cargo_rocket diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.obj new file mode 100644 index 00000000..21137e0b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/cargo_rocket.obj @@ -0,0 +1,1154 @@ +mtllib cargo_rocket.mtl +o Rocket +v -0.162447 1.380342 -1.551622 +v 0.162447 1.380342 -1.551622 +v 0.162447 1.188578 -1.551622 +v 0.162447 1.380342 -1.226728 +v 0.162447 1.188578 -1.226728 +v -0.162447 1.380342 -1.226728 +v -0.162447 1.188578 -1.226728 +v -0.162447 1.188578 -1.551622 +v 1.551622 1.380342 -0.162447 +v 1.551622 1.380342 0.162447 +v 1.551622 1.188578 0.162447 +v 1.226728 1.380342 0.162447 +v 1.226728 1.188578 0.162447 +v 1.226728 1.380342 -0.162447 +v 1.226728 1.188578 -0.162447 +v 1.551622 1.188578 -0.162447 +v -1.551622 1.380342 0.162447 +v -1.551622 1.380342 -0.162447 +v -1.551622 1.188578 -0.162447 +v -1.226728 1.380342 -0.162447 +v -1.226728 1.188578 -0.162447 +v -1.226728 1.380342 0.162447 +v -1.226728 1.188578 0.162447 +v -1.551622 1.188578 0.162447 +v 1.252214 2.407651 0.413706 +v 0.977566 2.639503 0.587932 +v 0.977566 1.463642 0.587932 +v 0.977566 2.639503 -0.587928 +v 0.977566 1.463642 -0.587928 +v 1.252214 2.407651 -0.413703 +v 1.252214 1.695493 0.413706 +v 1.352214 1.695493 0.413706 +v -0.156886 1.050235 -0.988298 +v -0.156886 1.050235 -1.154150 +v -0.156886 0.982336 -1.154150 +v -0.088986 1.050235 -1.154150 +v -0.088986 0.982336 -1.154150 +v -0.088986 1.050235 -0.988298 +v -0.088986 0.982336 -0.988298 +v -0.156886 0.982336 -0.988298 +v -0.231915 1.192633 -1.156447 +v -0.231915 1.192633 -1.620277 +v -0.231915 0.394576 -1.620277 +v 0.231915 1.192633 -1.620277 +v 0.231915 0.394576 -1.620277 +v 0.231915 1.192633 -1.156447 +v 0.231915 0.394576 -1.156447 +v -0.231915 0.394576 -1.156447 +v -1.090075 3.839907 1.090076 +v -1.090075 3.839907 -1.090074 +v -1.090075 3.663910 -1.090074 +v 1.090075 3.839907 -1.090074 +v 1.090075 3.663910 -1.090074 +v 1.090075 3.839907 1.090076 +v 1.090075 3.663910 1.090076 +v -1.090075 3.663910 1.090076 +v -0.730563 0.593724 0.730563 +v -0.730563 0.593724 -0.730563 +v -0.730563 0.393723 -0.730563 +v 0.730563 0.593724 -0.730563 +v 0.730563 0.393723 -0.730563 +v 0.730563 0.593724 0.730563 +v 0.730563 0.393723 0.730563 +v -0.730563 0.393723 0.730563 +v -1.000000 3.754139 1.000001 +v -1.000000 3.754139 -0.999999 +v -1.000000 0.589041 -1.000000 +v 1.000000 3.754139 -0.999999 +v 1.000000 0.589041 -1.000000 +v 1.000000 3.754139 1.000001 +v 1.000000 0.589041 1.000000 +v -1.000000 0.589041 1.000000 +v -0.876676 0.407405 0.876676 +v -0.876676 0.407405 -0.876676 +v -0.876676 0.207405 -0.876676 +v 0.876676 0.407405 -0.876676 +v 0.876676 0.207405 -0.876676 +v 0.876676 0.407405 0.876676 +v 0.876676 0.207405 0.876676 +v -0.876676 0.207405 0.876676 +v -1.052011 0.219172 1.052011 +v -1.052011 0.219172 -1.052011 +v -1.052011 0.019172 -1.052011 +v 1.052011 0.219172 -1.052011 +v 1.052011 0.019172 -1.052011 +v 1.052011 0.219172 1.052011 +v 1.052011 0.019172 1.052011 +v -1.052011 0.019172 1.052011 +v -1.004321 4.019471 1.004322 +v -1.004321 4.019471 -1.004320 +v -1.004321 3.798504 -1.004320 +v 1.004321 4.019471 -1.004320 +v 1.004321 3.798504 -1.004320 +v 1.004321 4.019471 1.004322 +v 1.004321 3.798504 1.004322 +v -1.004321 3.798504 1.004322 +v -0.892730 4.221910 0.892731 +v -0.892730 4.221910 -0.892729 +v -0.892730 4.000943 -0.892729 +v 0.892730 4.221910 -0.892729 +v 0.892730 4.000943 -0.892729 +v 0.892730 4.221910 0.892731 +v 0.892730 4.000943 0.892731 +v -0.892730 4.000943 0.892731 +v -0.781138 4.424355 0.781139 +v -0.781138 4.424355 -0.781137 +v -0.781138 4.203388 -0.781137 +v 0.781138 4.424355 -0.781137 +v 0.781138 4.203388 -0.781137 +v 0.781138 4.424355 0.781139 +v 0.781138 4.203388 0.781139 +v -0.781138 4.203388 0.781139 +v -0.669547 4.626801 0.669548 +v -0.669547 4.626801 -0.669546 +v -0.669547 4.405833 -0.669546 +v 0.669547 4.626801 -0.669546 +v 0.669547 4.405833 -0.669546 +v 0.669547 4.626801 0.669548 +v 0.669547 4.405833 0.669548 +v -0.669547 4.405833 0.669548 +v -0.557956 4.829246 0.557957 +v -0.557956 4.829246 -0.557955 +v -0.557956 4.608278 -0.557955 +v 0.557956 4.829246 -0.557955 +v 0.557956 4.608278 -0.557955 +v 0.557956 4.829246 0.557957 +v 0.557956 4.608278 0.557957 +v -0.557956 4.608278 0.557957 +v -0.446365 5.031691 0.446366 +v -0.446365 5.031691 -0.446364 +v -0.446365 4.810724 -0.446364 +v 0.446365 5.031691 -0.446364 +v 0.446365 4.810724 -0.446364 +v 0.446365 5.031691 0.446366 +v 0.446365 4.810724 0.446366 +v -0.446365 4.810724 0.446366 +v -0.334774 5.234136 0.334775 +v -0.334774 5.234136 -0.334773 +v -0.334774 5.013169 -0.334773 +v 0.334774 5.234136 -0.334773 +v 0.334774 5.013169 -0.334773 +v 0.334774 5.234136 0.334775 +v 0.334774 5.013169 0.334775 +v -0.334774 5.013169 0.334775 +v -0.223182 5.436581 0.223183 +v -0.223182 5.436581 -0.223181 +v -0.223182 5.215614 -0.223181 +v 0.223182 5.436581 -0.223181 +v 0.223182 5.215614 -0.223181 +v 0.223182 5.436581 0.223183 +v 0.223182 5.215614 0.223183 +v -0.223182 5.215614 0.223183 +v -0.111591 6.821851 0.111592 +v -0.111591 6.821851 -0.111590 +v -0.111591 5.349908 -0.111590 +v 0.111591 6.821851 -0.111590 +v 0.111591 5.349908 -0.111590 +v 0.111591 6.821851 0.111592 +v 0.111591 5.349908 0.111592 +v -0.111591 5.349908 0.111592 +v 0.061876 1.050235 -0.988298 +v 0.061876 1.050235 -1.154150 +v 0.061876 0.982336 -1.154150 +v 0.129776 1.050235 -1.154150 +v 0.129776 0.982336 -1.154150 +v 0.129776 1.050235 -0.988298 +v 0.129776 0.982336 -0.988298 +v 0.061876 0.982336 -0.988298 +v -0.156886 0.723960 -0.988298 +v -0.156886 0.723960 -1.154150 +v -0.156886 0.656060 -1.154150 +v -0.088986 0.723960 -1.154150 +v -0.088986 0.656060 -1.154150 +v -0.088986 0.723960 -0.988298 +v -0.088986 0.656060 -0.988298 +v -0.156886 0.656060 -0.988298 +v 0.061876 0.723960 -0.988298 +v 0.061876 0.723960 -1.154150 +v 0.061876 0.656060 -1.154150 +v 0.129776 0.723960 -1.154150 +v 0.129776 0.656060 -1.154150 +v 0.129776 0.723960 -0.988298 +v 0.129776 0.656060 -0.988298 +v 0.061876 0.656060 -0.988298 +v -1.156447 1.192633 0.231915 +v -1.620277 1.192633 0.231915 +v -1.620277 0.394576 0.231915 +v -1.620277 1.192633 -0.231915 +v -1.620277 0.394576 -0.231915 +v -1.156447 1.192633 -0.231915 +v -1.156447 0.394576 -0.231915 +v -1.156447 0.394576 0.231915 +v -0.988298 1.050235 0.156886 +v -1.154150 1.050235 0.156886 +v -1.154150 0.982336 0.156886 +v -1.154150 1.050235 0.088986 +v -1.154150 0.982336 0.088986 +v -0.988298 1.050235 0.088986 +v -0.988298 0.982336 0.088986 +v -0.988298 0.982336 0.156886 +v -0.988298 1.050235 -0.061876 +v -1.154150 1.050235 -0.061876 +v -1.154150 0.982336 -0.061876 +v -1.154150 1.050235 -0.129776 +v -1.154150 0.982336 -0.129776 +v -0.988298 1.050235 -0.129776 +v -0.988298 0.982336 -0.129776 +v -0.988298 0.982336 -0.061876 +v -0.988298 0.723960 0.156886 +v -1.154150 0.723960 0.156886 +v -1.154150 0.656060 0.156886 +v -1.154150 0.723960 0.088986 +v -1.154150 0.656060 0.088986 +v -0.988298 0.723960 0.088986 +v -0.988298 0.656060 0.088986 +v -0.988298 0.656060 0.156886 +v -0.988298 0.723960 -0.061876 +v -1.154150 0.723960 -0.061876 +v -1.154150 0.656060 -0.061876 +v -1.154150 0.723960 -0.129776 +v -1.154150 0.656060 -0.129776 +v -0.988298 0.723960 -0.129776 +v -0.988298 0.656060 -0.129776 +v -0.988298 0.656060 -0.061876 +v 0.231915 1.192633 1.156447 +v 0.231915 1.192633 1.620277 +v 0.231915 0.394576 1.620277 +v -0.231915 1.192633 1.620277 +v -0.231915 0.394576 1.620277 +v -0.231915 1.192633 1.156447 +v -0.231915 0.394576 1.156447 +v 0.231915 0.394576 1.156447 +v 0.156886 1.050235 0.988298 +v 0.156886 1.050235 1.154150 +v 0.156886 0.982336 0.988298 +v 0.088986 1.050235 1.154150 +v 0.088986 0.982336 1.154150 +v 0.088986 1.050235 0.988298 +v 0.156886 0.982336 1.154150 +v -0.061876 1.050235 0.988298 +v -0.061876 1.050235 1.154150 +v -0.061876 0.982336 1.154150 +v -0.129776 1.050235 1.154150 +v -0.129776 0.982336 1.154150 +v -0.129776 1.050235 0.988298 +v -0.129776 0.982336 0.988298 +v -0.061876 0.982336 0.988298 +v 0.156886 0.723960 0.988298 +v 0.156886 0.723960 1.154150 +v 0.156886 0.656060 1.154150 +v 0.088986 0.723960 1.154150 +v 0.088986 0.656060 1.154150 +v 0.088986 0.723960 0.988298 +v 0.088986 0.656060 0.988298 +v 0.156886 0.656060 0.988298 +v -0.061876 0.723960 0.988298 +v -0.061876 0.723960 1.154150 +v -0.061876 0.656060 1.154150 +v -0.129776 0.723960 1.154150 +v -0.129776 0.656060 1.154150 +v -0.129776 0.723960 0.988298 +v -0.129776 0.656060 0.988298 +v -0.061876 0.656060 0.988298 +v 1.156447 1.192633 -0.231915 +v 1.620277 1.192633 -0.231915 +v 1.620277 0.394576 -0.231915 +v 1.620277 1.192633 0.231915 +v 1.620277 0.394576 0.231915 +v 1.156447 1.192633 0.231915 +v 1.156447 0.394576 0.231915 +v 1.156447 0.394576 -0.231915 +v 0.988298 1.050235 -0.156886 +v 1.154150 1.050235 -0.156886 +v 1.154150 0.982336 -0.156886 +v 1.154150 1.050235 -0.088986 +v 1.154150 0.982336 -0.088986 +v 0.988298 1.050235 -0.088986 +v 0.988298 0.982336 -0.088986 +v 0.988298 0.982336 -0.156886 +v 0.988298 1.050235 0.061876 +v 1.154150 1.050235 0.061876 +v 1.154150 0.982336 0.061876 +v 1.154150 1.050235 0.129776 +v 1.154150 0.982336 0.129776 +v 0.988298 1.050235 0.129776 +v 0.988298 0.982336 0.129776 +v 0.988298 0.982336 0.061876 +v 0.988298 0.723960 -0.156886 +v 1.154150 0.723960 -0.156886 +v 1.154150 0.656060 -0.156886 +v 1.154150 0.723960 -0.088986 +v 1.154150 0.656060 -0.088986 +v 0.988298 0.723960 -0.088986 +v 0.988298 0.656060 -0.088986 +v 0.988298 0.656060 -0.156886 +v 0.988298 0.723960 0.061876 +v 1.154150 0.723960 0.061876 +v 1.154150 0.656060 0.061876 +v 1.154150 0.723960 0.129776 +v 1.154150 0.656060 0.129776 +v 0.988298 0.723960 0.129776 +v 0.988298 0.656060 0.129776 +v 0.988298 0.656060 0.061876 +v 0.413706 2.407651 -1.252214 +v 0.587932 2.639503 -0.977566 +v 0.413706 1.695493 -1.252214 +v -0.587928 2.639503 -0.977566 +v -0.587928 1.463642 -0.977566 +v -0.413703 2.407651 -1.252214 +v 0.413706 2.407651 -1.352214 +v 0.587932 1.463642 -0.977566 +v -1.252214 2.407651 -0.413706 +v -0.977566 2.639503 -0.587932 +v -1.252214 1.695493 -0.413706 +v -0.977566 2.639503 0.587928 +v -0.977566 1.463642 0.587928 +v -1.252214 2.407651 0.413703 +v -1.252214 1.695493 0.413703 +v -1.352214 1.695493 0.413703 +v -0.977566 1.463642 -0.587932 +v -0.413706 2.407651 1.252214 +v -0.587932 2.639503 0.977566 +v -0.587932 1.463642 0.977566 +v 0.587929 2.639503 0.977566 +v 0.587929 1.463642 0.977566 +v 0.413703 2.407651 1.252214 +v 0.413703 2.407651 1.252214 +v -0.413706 1.695493 1.252214 +v -0.413706 2.407651 1.252214 +v -0.413706 2.407651 1.352214 +v 0.413703 1.695493 1.252214 +v -0.413706 1.695493 1.252214 +v 0.413703 1.695493 1.252214 +v 0.413703 2.407651 1.352214 +v 0.413703 1.695493 1.352214 +v -0.413706 1.695493 1.352214 +v 1.352214 2.407651 -0.413703 +v 1.352214 2.407651 0.413706 +v 1.352214 1.695493 -0.413703 +v 1.252214 1.695493 -0.413703 +v -0.413703 2.407651 -1.352214 +v -0.413703 1.695493 -1.352214 +v 0.413706 1.695493 -1.352214 +v -0.413703 1.695493 -1.252214 +v -1.352214 2.407651 0.413703 +v -1.352214 2.407651 -0.413706 +v -1.352214 1.695493 -0.413706 +v 0.088986 0.982336 0.988298 +v 0.162447 1.380342 1.551622 +v -0.162447 1.380342 1.551622 +v -0.162447 1.188578 1.551622 +v -0.162447 1.380342 1.226728 +v -0.162447 1.188578 1.226728 +v 0.162447 1.380342 1.226728 +v 0.162447 1.188578 1.226728 +v 0.162447 1.188578 1.551622 +vt 0.721313 0.104784 +vt 0.840814 0.104784 +vt 0.840814 0.117721 +vt 0.762038 0.120654 +vt 0.800089 0.120654 +vt 0.800089 0.148922 +vt 0.721313 0.117721 +vt 0.762038 0.148922 +vt 0.000000 0.000000 +vt 0.382496 0.394239 +vt 0.456036 0.394239 +vt 0.456036 0.467779 +vt 0.331396 0.005303 +vt 0.707998 0.005303 +vt 0.707998 0.381904 +vt 0.382496 0.467779 +vt 0.686915 0.033087 +vt 0.713291 0.033087 +vt 0.713291 0.373180 +vt 0.385521 0.392880 +vt 0.459938 0.392880 +vt 0.459938 0.467297 +vt 0.353448 0.581915 +vt 0.350909 0.581907 +vt 0.350972 0.561397 +vt 0.929476 0.324363 +vt 0.926937 0.324355 +vt 0.927000 0.303845 +vt 0.795878 0.063692 +vt 0.757076 0.063692 +vt 0.757076 0.002364 +vt 0.796459 0.065267 +vt 0.834469 0.065267 +vt 0.834469 0.103276 +vt 0.757032 0.064629 +vt 0.795382 0.064629 +vt 0.795382 0.102979 +vt 0.380586 0.390267 +vt 0.463569 0.390267 +vt 0.463569 0.473251 +vt 0.380089 0.389735 +vt 0.463169 0.389735 +vt 0.463169 0.472814 +vt 0.241772 0.958304 +vt 0.167004 0.958323 +vt 0.166756 0.002239 +vt 0.121813 0.000943 +vt 0.196581 0.000924 +vt 0.196829 0.957008 +vt 0.160155 0.958068 +vt 0.085387 0.958101 +vt 0.084962 0.002017 +vt 0.078361 0.001780 +vt 0.003593 0.001761 +vt 0.003345 0.957845 +vt 0.384788 0.466074 +vt 0.384559 0.391306 +vt 0.459327 0.391077 +vt 0.657101 0.580952 +vt 0.471756 0.581521 +vt 0.471188 0.396177 +vt 0.385665 0.396142 +vt 0.460674 0.396142 +vt 0.460674 0.471151 +vt 0.395649 0.470081 +vt 0.394231 0.470085 +vt 0.394000 0.394539 +vt 0.389340 0.394539 +vt 0.390758 0.394535 +vt 0.390989 0.470081 +vt 0.397747 0.470085 +vt 0.396329 0.470081 +vt 0.396561 0.394535 +vt 0.391670 0.394539 +vt 0.393087 0.394535 +vt 0.393319 0.470081 +vt 0.708816 0.400580 +vt 0.700472 0.400605 +vt 0.700447 0.392262 +vt 0.419454 0.466212 +vt 0.421958 0.466204 +vt 0.421965 0.468708 +vt 0.350909 0.487835 +vt 0.353448 0.487827 +vt 0.353510 0.508337 +vt 0.929476 0.299840 +vt 0.926937 0.299832 +vt 0.927000 0.279321 +vt 0.693800 0.634125 +vt 0.696339 0.634117 +vt 0.696401 0.654628 +vt 0.522632 0.907070 +vt 0.520094 0.907062 +vt 0.520157 0.886551 +vt 0.693800 0.658648 +vt 0.696339 0.658640 +vt 0.696401 0.679151 +vt 0.696339 0.703682 +vt 0.693800 0.703674 +vt 0.693863 0.683164 +vt 0.796459 0.103276 +vt 0.694292 0.879396 +vt 0.691754 0.879388 +vt 0.691817 0.858878 +vt 0.929476 0.360987 +vt 0.926937 0.360979 +vt 0.927000 0.340469 +vt 0.929476 0.430724 +vt 0.926937 0.430716 +vt 0.927000 0.410206 +vt 0.353448 0.557392 +vt 0.350909 0.557384 +vt 0.350972 0.536873 +vt 0.385521 0.467297 +vt 0.353510 0.606430 +vt 0.350972 0.606438 +vt 0.350909 0.585928 +vt 0.380175 0.959380 +vt 0.377636 0.959387 +vt 0.377573 0.938877 +vt 0.353511 0.434767 +vt 0.350972 0.434775 +vt 0.350909 0.414264 +vt 0.766986 0.770375 +vt 0.764448 0.770367 +vt 0.764511 0.749856 +vt 0.855901 0.471486 +vt 0.853363 0.471478 +vt 0.853426 0.450967 +vt 0.386718 0.959388 +vt 0.384180 0.959380 +vt 0.384242 0.938869 +vt 0.927961 0.139835 +vt 0.925422 0.139827 +vt 0.925485 0.119317 +vt 0.522632 0.882546 +vt 0.520094 0.882538 +vt 0.520157 0.862028 +vt 0.350909 0.512358 +vt 0.353448 0.512350 +vt 0.353510 0.532860 +vt 0.331973 0.938877 +vt 0.334511 0.938869 +vt 0.334574 0.959380 +vt 0.350909 0.389741 +vt 0.353448 0.389733 +vt 0.353511 0.410244 +vt 0.350909 0.438788 +vt 0.353448 0.438780 +vt 0.353511 0.459291 +vt 0.694292 0.903920 +vt 0.691754 0.903912 +vt 0.691817 0.883401 +vt 0.522632 0.931593 +vt 0.520094 0.931585 +vt 0.520157 0.911074 +vt 0.522632 0.956116 +vt 0.520094 0.956108 +vt 0.520157 0.935598 +vt 0.929476 0.385510 +vt 0.926937 0.385502 +vt 0.927000 0.364992 +vt 0.928401 0.275309 +vt 0.925863 0.275317 +vt 0.925800 0.254806 +vt 0.927960 0.093452 +vt 0.925422 0.093444 +vt 0.925485 0.072934 +vt 0.353510 0.483814 +vt 0.350972 0.483822 +vt 0.350909 0.463311 +vt 0.766986 0.745851 +vt 0.764448 0.745843 +vt 0.764511 0.725333 +vt 0.331396 0.381904 +vt 0.686915 0.373180 +vt 0.353510 0.561404 +vt 0.929539 0.303852 +vt 0.795878 0.002364 +vt 0.757032 0.102979 +vt 0.380586 0.473251 +vt 0.380089 0.472814 +vt 0.241524 0.002220 +vt 0.122061 0.957027 +vt 0.159730 0.001984 +vt 0.078113 0.957865 +vt 0.459556 0.465845 +vt 0.656532 0.395608 +vt 0.385665 0.471151 +vt 0.395417 0.394535 +vt 0.389572 0.470085 +vt 0.397979 0.394539 +vt 0.391902 0.470085 +vt 0.708790 0.392236 +vt 0.419461 0.468716 +vt 0.350972 0.508345 +vt 0.929539 0.279329 +vt 0.693863 0.654635 +vt 0.522695 0.886559 +vt 0.693863 0.679159 +vt 0.696401 0.683172 +vt 0.694355 0.858886 +vt 0.929539 0.340476 +vt 0.929539 0.410214 +vt 0.353510 0.536881 +vt 0.353448 0.585920 +vt 0.380112 0.938869 +vt 0.353448 0.414257 +vt 0.767049 0.749864 +vt 0.855964 0.450975 +vt 0.386781 0.938877 +vt 0.928023 0.119324 +vt 0.522695 0.862036 +vt 0.350972 0.532868 +vt 0.332036 0.959387 +vt 0.350972 0.410252 +vt 0.350972 0.459298 +vt 0.694355 0.883409 +vt 0.522695 0.911082 +vt 0.522695 0.935605 +vt 0.929539 0.365000 +vt 0.928339 0.254798 +vt 0.928023 0.072942 +vt 0.353448 0.463303 +vt 0.767049 0.725341 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.535700 -0.000000 0.844400 +vn 0.535700 0.000000 -0.844400 +vn 0.645100 -0.764100 0.000000 +vn 0.645100 0.764100 0.000000 +vn 0.844400 0.000000 -0.535700 +vn -0.844400 0.000000 -0.535700 +vn 0.000000 -0.764100 -0.645100 +vn 0.000000 0.764100 -0.645100 +vn -0.535700 0.000000 -0.844400 +vn -0.535700 -0.000000 0.844400 +vn -0.645100 -0.764100 -0.000000 +vn -0.645100 0.764100 0.000000 +vn -0.844400 -0.000000 0.535700 +vn 0.844400 -0.000000 0.535700 +vn 0.000000 -0.764100 0.645100 +vn 0.000000 0.764100 0.645100 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 2/1/2 4/2/2 5/3/2 +f 4/1/3 6/2/3 7/3/3 +f 6/1/4 1/2/4 8/3/4 +f 6/4/5 4/5/5 2/6/5 +f 8/7/1 1/1/1 3/3/1 +f 3/7/2 2/1/2 5/3/2 +f 5/7/3 4/1/3 7/3/3 +f 7/7/4 6/1/4 8/3/4 +f 1/8/5 6/4/5 2/6/5 +usemtl None_uv.png.004 +f 349/1/3 350/2/3 351/3/3 +f 350/1/4 352/2/4 353/3/4 +f 352/1/1 354/2/1 355/3/1 +f 354/1/2 349/2/2 356/3/2 +f 354/4/5 352/5/5 349/8/5 +f 352/5/5 350/6/5 349/8/5 +f 356/7/3 349/1/3 351/3/3 +f 351/7/4 350/1/4 353/3/4 +f 353/7/1 352/1/1 355/3/1 +f 355/7/2 354/1/2 356/3/2 +usemtl None_NONE +f 24/9/6 19/9/6 21/9/6 +f 356/9/6 351/9/6 353/9/6 +f 16/9/6 11/9/6 13/9/6 +f 8/9/6 3/9/6 5/9/6 +f 23/9/6 24/9/6 21/9/6 +f 355/9/6 356/9/6 353/9/6 +f 15/9/6 16/9/6 13/9/6 +f 7/9/6 8/9/6 5/9/6 +usemtl None_uv.png.005 +f 9/1/2 10/2/2 11/3/2 +f 10/1/3 12/2/3 13/3/3 +f 12/1/4 14/2/4 15/3/4 +f 14/1/1 9/2/1 16/3/1 +f 14/4/5 12/5/5 9/8/5 +f 12/5/5 10/6/5 9/8/5 +f 16/7/2 9/1/2 11/3/2 +f 11/7/3 10/1/3 13/3/3 +f 13/7/4 12/1/4 15/3/4 +f 15/7/1 14/1/1 16/3/1 +usemtl None_uv.png +f 17/1/4 18/2/4 19/3/4 +f 18/1/1 20/2/1 21/3/1 +f 20/1/2 22/2/2 23/3/2 +f 22/1/3 17/2/3 24/3/3 +f 22/4/5 20/5/5 18/6/5 +f 25/10/7 26/11/7 27/12/7 +f 26/13/4 28/14/4 29/15/4 +f 28/10/8 30/11/8 29/16/8 +f 25/17/3 31/18/3 32/19/3 +f 31/10/9 27/11/9 29/12/9 +f 30/10/10 28/11/10 25/16/10 +f 33/20/4 34/21/4 35/22/4 +f 34/23/1 36/24/1 37/25/1 +f 36/20/2 38/21/2 39/22/2 +f 38/26/3 33/27/3 40/28/3 +f 40/20/6 35/21/6 37/22/6 +f 38/20/5 36/21/5 34/22/5 +f 41/29/4 42/30/4 43/31/4 +f 42/29/1 44/30/1 45/31/1 +f 44/29/2 46/30/2 47/31/2 +f 46/29/3 41/30/3 48/31/3 +f 48/32/6 43/33/6 45/34/6 +f 46/35/5 44/36/5 42/37/5 +f 49/38/4 50/39/4 51/40/4 +f 50/38/1 52/39/1 53/40/1 +f 52/38/2 54/39/2 55/40/2 +f 54/38/3 49/39/3 56/40/3 +f 56/38/6 51/39/6 53/40/6 +f 54/38/5 52/39/5 50/40/5 +f 57/41/4 58/42/4 59/43/4 +f 58/41/1 60/42/1 61/43/1 +f 60/41/2 62/42/2 63/43/2 +f 62/41/3 57/42/3 64/43/3 +f 64/41/6 59/42/6 61/43/6 +f 62/41/5 60/42/5 58/43/5 +f 65/44/4 66/45/4 67/46/4 +f 66/47/1 68/48/1 69/49/1 +f 68/50/2 70/51/2 71/52/2 +f 70/53/3 65/54/3 72/55/3 +f 72/56/6 67/57/6 69/58/6 +f 70/38/5 68/39/5 66/40/5 +f 73/41/4 74/42/4 75/43/4 +f 74/41/1 76/42/1 77/43/1 +f 76/41/2 78/42/2 79/43/2 +f 78/41/3 73/42/3 80/43/3 +f 80/41/6 75/42/6 77/43/6 +f 78/41/5 76/42/5 74/43/5 +f 81/41/4 82/42/4 83/43/4 +f 82/41/1 84/42/1 85/43/1 +f 84/41/2 86/42/2 87/43/2 +f 86/41/3 81/42/3 88/43/3 +f 88/59/6 83/60/6 85/61/6 +f 86/41/5 84/42/5 82/43/5 +f 89/38/4 90/39/4 91/40/4 +f 90/38/1 92/39/1 93/40/1 +f 92/38/2 94/39/2 95/40/2 +f 94/38/3 89/39/3 96/40/3 +f 96/38/6 91/39/6 93/40/6 +f 94/38/5 92/39/5 90/40/5 +f 97/38/4 98/39/4 99/40/4 +f 98/38/1 100/39/1 101/40/1 +f 100/38/2 102/39/2 103/40/2 +f 102/38/3 97/39/3 104/40/3 +f 104/38/6 99/39/6 101/40/6 +f 102/38/5 100/39/5 98/40/5 +f 105/38/4 106/39/4 107/40/4 +f 106/38/1 108/39/1 109/40/1 +f 108/38/2 110/39/2 111/40/2 +f 110/38/3 105/39/3 112/40/3 +f 112/38/6 107/39/6 109/40/6 +f 110/38/5 108/39/5 106/40/5 +f 113/38/4 114/39/4 115/40/4 +f 114/38/1 116/39/1 117/40/1 +f 116/38/2 118/39/2 119/40/2 +f 118/38/3 113/39/3 120/40/3 +f 120/38/6 115/39/6 117/40/6 +f 118/38/5 116/39/5 114/40/5 +f 121/38/4 122/39/4 123/40/4 +f 122/38/1 124/39/1 125/40/1 +f 124/38/2 126/39/2 127/40/2 +f 126/38/3 121/39/3 128/40/3 +f 128/38/6 123/39/6 125/40/6 +f 126/38/5 124/39/5 122/40/5 +f 129/38/4 130/39/4 131/40/4 +f 130/38/1 132/39/1 133/40/1 +f 132/38/2 134/39/2 135/40/2 +f 134/38/3 129/39/3 136/40/3 +f 136/38/6 131/39/6 133/40/6 +f 134/38/5 132/39/5 130/40/5 +f 137/38/4 138/39/4 139/40/4 +f 138/38/1 140/39/1 141/40/1 +f 140/38/2 142/39/2 143/40/2 +f 142/38/3 137/39/3 144/40/3 +f 144/38/6 139/39/6 141/40/6 +f 142/38/5 140/39/5 138/40/5 +f 145/62/4 146/63/4 147/64/4 +f 146/38/1 148/39/1 149/40/1 +f 148/38/2 150/39/2 151/40/2 +f 150/38/3 145/39/3 152/40/3 +f 152/38/6 147/39/6 149/40/6 +f 150/38/5 148/39/5 146/40/5 +f 153/65/4 154/66/4 155/67/4 +f 154/68/1 156/69/1 157/70/1 +f 156/71/2 158/72/2 159/73/2 +f 158/74/3 153/75/3 160/76/3 +f 160/77/6 155/78/6 157/79/6 +f 158/80/5 156/81/5 154/82/5 +f 161/20/4 162/21/4 163/22/4 +f 162/83/1 164/84/1 165/85/1 +f 164/20/2 166/21/2 167/22/2 +f 166/86/3 161/87/3 168/88/3 +f 168/20/6 163/21/6 165/22/6 +f 166/20/5 164/21/5 162/22/5 +f 169/20/4 170/21/4 171/22/4 +f 170/89/1 172/90/1 173/91/1 +f 172/20/2 174/21/2 175/22/2 +f 174/92/3 169/93/3 176/94/3 +f 176/20/6 171/21/6 173/22/6 +f 174/20/5 172/21/5 170/22/5 +f 177/20/4 178/21/4 179/22/4 +f 178/95/1 180/96/1 181/97/1 +f 180/20/2 182/21/2 183/22/2 +f 182/98/3 177/99/3 184/100/3 +f 184/20/6 179/21/6 181/22/6 +f 182/20/5 180/21/5 178/22/5 +f 185/29/3 186/30/3 187/31/3 +f 186/29/4 188/30/4 189/31/4 +f 188/29/1 190/30/1 191/31/1 +f 190/29/2 185/30/2 192/31/2 +f 192/32/6 187/33/6 191/101/6 +f 190/35/5 188/36/5 186/37/5 +f 193/20/3 194/21/3 195/22/3 +f 194/102/4 196/103/4 197/104/4 +f 196/20/1 198/21/1 199/22/1 +f 198/105/2 193/106/2 200/107/2 +f 200/20/6 195/21/6 197/22/6 +f 198/20/5 196/21/5 194/22/5 +f 201/20/3 202/21/3 203/22/3 +f 202/108/4 204/109/4 205/110/4 +f 204/20/1 206/21/1 207/22/1 +f 206/111/2 201/112/2 208/113/2 +f 208/20/6 203/21/6 207/114/6 +f 206/20/5 204/21/5 202/22/5 +f 209/20/3 210/21/3 211/22/3 +f 210/115/4 212/116/4 213/117/4 +f 212/20/1 214/21/1 215/22/1 +f 214/118/2 209/119/2 216/120/2 +f 216/20/6 211/21/6 213/22/6 +f 214/20/5 212/21/5 210/22/5 +f 217/20/3 218/21/3 219/22/3 +f 218/121/4 220/122/4 221/123/4 +f 220/20/1 222/21/1 223/22/1 +f 222/124/2 217/125/2 224/126/2 +f 224/20/6 219/21/6 221/22/6 +f 222/20/5 220/21/5 218/22/5 +f 225/29/2 226/30/2 227/31/2 +f 226/29/3 228/30/3 229/31/3 +f 228/29/4 230/30/4 231/31/4 +f 230/29/1 225/30/1 232/31/1 +f 232/32/6 227/33/6 231/101/6 +f 230/35/5 228/36/5 226/37/5 +f 233/20/2 234/21/2 235/114/2 +f 234/127/3 236/128/3 237/129/3 +f 236/20/4 238/21/4 237/114/4 +f 238/130/1 233/131/1 235/132/1 +f 235/20/6 239/21/6 237/22/6 +f 238/20/5 236/21/5 234/22/5 +f 240/20/2 241/21/2 242/22/2 +f 241/133/3 243/134/3 244/135/3 +f 243/20/4 245/21/4 246/22/4 +f 245/136/1 240/137/1 247/138/1 +f 247/20/6 242/21/6 246/114/6 +f 245/20/5 243/21/5 241/22/5 +f 248/20/2 249/21/2 250/22/2 +f 249/139/3 251/140/3 252/141/3 +f 251/20/4 253/21/4 254/22/4 +f 253/142/1 248/143/1 255/144/1 +f 255/20/6 250/21/6 252/22/6 +f 253/20/5 251/21/5 249/22/5 +f 256/20/2 257/21/2 258/22/2 +f 257/145/3 259/146/3 260/147/3 +f 259/20/4 261/21/4 262/22/4 +f 261/148/1 256/149/1 263/150/1 +f 263/20/6 258/21/6 262/114/6 +f 261/20/5 259/21/5 257/22/5 +f 264/29/1 265/30/1 266/31/1 +f 265/29/2 267/30/2 268/31/2 +f 267/29/3 269/30/3 270/31/3 +f 269/29/4 264/30/4 271/31/4 +f 271/32/6 266/33/6 268/34/6 +f 269/35/5 267/36/5 265/37/5 +f 272/20/1 273/21/1 274/22/1 +f 273/151/2 275/152/2 276/153/2 +f 275/20/3 277/21/3 278/22/3 +f 277/154/4 272/155/4 279/156/4 +f 279/20/6 274/21/6 276/22/6 +f 277/20/5 275/21/5 273/22/5 +f 280/20/1 281/21/1 282/22/1 +f 281/157/2 283/158/2 284/159/2 +f 283/20/3 285/21/3 286/22/3 +f 285/160/4 280/161/4 287/162/4 +f 287/20/6 282/21/6 284/22/6 +f 285/20/5 283/21/5 281/22/5 +f 288/20/1 289/21/1 290/22/1 +f 289/163/2 291/164/2 292/165/2 +f 291/20/3 293/21/3 294/22/3 +f 293/166/4 288/167/4 295/168/4 +f 295/20/6 290/21/6 292/22/6 +f 293/20/5 291/21/5 289/22/5 +f 296/20/1 297/21/1 298/22/1 +f 297/169/2 299/170/2 300/171/2 +f 299/20/3 301/21/3 302/22/3 +f 301/172/4 296/173/4 303/174/4 +f 303/20/6 298/21/6 300/22/6 +f 301/20/5 299/21/5 297/22/5 +f 304/10/11 305/11/11 306/16/11 +f 305/13/3 307/14/3 308/15/3 +f 307/10/12 309/11/12 308/16/12 +f 309/17/5 304/18/5 310/19/5 +f 306/10/13 311/11/13 308/12/13 +f 309/10/14 307/11/14 305/12/14 +f 312/10/15 313/11/15 314/16/15 +f 313/13/2 315/14/2 316/15/2 +f 315/10/16 317/11/16 318/12/16 +f 314/17/6 318/18/6 319/19/6 +f 314/10/17 320/11/17 316/12/17 +f 317/10/18 315/11/18 313/12/18 +f 321/10/19 322/11/19 323/12/19 +f 322/13/1 324/14/1 325/15/1 +f 324/10/20 326/11/20 325/16/20 +f 326/10/3 321/16/3 327/10/3 +f 328/10/21 323/11/21 325/12/21 +f 326/10/22 324/11/22 322/12/22 +f 327/17/5 329/18/5 330/19/5 +f 321/10/3 328/16/3 329/10/3 +f 328/10/3 331/16/3 332/10/3 +f 331/12/3 326/11/3 333/12/3 +f 334/15/3 330/175/3 335/14/3 +f 332/17/6 333/18/6 336/176/6 +f 329/17/4 332/18/4 336/19/4 +f 333/17/2 327/18/2 334/19/2 +f 337/15/2 338/175/2 339/14/2 +f 31/17/6 340/18/6 32/176/6 +f 340/17/1 30/18/1 337/19/1 +f 30/17/5 25/18/5 338/19/5 +f 341/15/1 310/175/1 342/14/1 +f 304/17/2 306/18/2 343/19/2 +f 306/17/6 344/18/6 343/176/6 +f 344/17/4 309/18/4 341/19/4 +f 345/15/4 346/175/4 347/13/4 +f 318/17/3 317/18/3 319/176/3 +f 317/17/5 312/18/5 345/176/5 +f 312/17/1 314/18/1 346/176/1 +f 24/7/4 17/1/4 19/3/4 +f 19/7/1 18/1/1 21/3/1 +f 21/7/2 20/1/2 23/3/2 +f 23/7/3 22/1/3 24/3/3 +f 17/8/5 22/4/5 18/6/5 +f 31/16/7 25/10/7 27/12/7 +f 27/175/4 26/13/4 29/15/4 +f 305/11/11 311/12/11 306/16/11 +f 338/176/3 25/17/3 32/19/3 +f 340/16/9 31/10/9 29/12/9 +f 326/11/20 331/12/20 325/16/20 +f 40/114/4 33/20/4 35/22/4 +f 35/177/1 34/23/1 37/25/1 +f 37/114/2 36/20/2 39/22/2 +f 39/178/3 38/26/3 40/28/3 +f 39/114/6 40/20/6 37/22/6 +f 33/114/5 38/20/5 34/22/5 +f 48/179/4 41/29/4 43/31/4 +f 43/179/1 42/29/1 45/31/1 +f 45/179/2 44/29/2 47/31/2 +f 47/179/3 46/29/3 48/31/3 +f 47/101/6 48/32/6 45/34/6 +f 41/180/5 46/35/5 42/37/5 +f 56/181/4 49/38/4 51/40/4 +f 51/181/1 50/38/1 53/40/1 +f 53/181/2 52/38/2 55/40/2 +f 55/181/3 54/38/3 56/40/3 +f 55/181/6 56/38/6 53/40/6 +f 49/181/5 54/38/5 50/40/5 +f 64/182/4 57/41/4 59/43/4 +f 59/182/1 58/41/1 61/43/1 +f 61/182/2 60/41/2 63/43/2 +f 63/182/3 62/41/3 64/43/3 +f 63/182/6 64/41/6 61/43/6 +f 57/182/5 62/41/5 58/43/5 +f 72/183/4 65/44/4 67/46/4 +f 67/184/1 66/47/1 69/49/1 +f 69/185/2 68/50/2 71/52/2 +f 71/186/3 70/53/3 72/55/3 +f 71/187/6 72/56/6 69/58/6 +f 65/181/5 70/38/5 66/40/5 +f 80/182/4 73/41/4 75/43/4 +f 75/182/1 74/41/1 77/43/1 +f 77/182/2 76/41/2 79/43/2 +f 79/182/3 78/41/3 80/43/3 +f 79/182/6 80/41/6 77/43/6 +f 73/182/5 78/41/5 74/43/5 +f 88/182/4 81/41/4 83/43/4 +f 83/182/1 82/41/1 85/43/1 +f 85/182/2 84/41/2 87/43/2 +f 87/182/3 86/41/3 88/43/3 +f 87/188/6 88/59/6 85/61/6 +f 81/182/5 86/41/5 82/43/5 +f 96/181/4 89/38/4 91/40/4 +f 91/181/1 90/38/1 93/40/1 +f 93/181/2 92/38/2 95/40/2 +f 95/181/3 94/38/3 96/40/3 +f 95/181/6 96/38/6 93/40/6 +f 89/181/5 94/38/5 90/40/5 +f 104/181/4 97/38/4 99/40/4 +f 99/181/1 98/38/1 101/40/1 +f 101/181/2 100/38/2 103/40/2 +f 103/181/3 102/38/3 104/40/3 +f 103/181/6 104/38/6 101/40/6 +f 97/181/5 102/38/5 98/40/5 +f 112/181/4 105/38/4 107/40/4 +f 107/181/1 106/38/1 109/40/1 +f 109/181/2 108/38/2 111/40/2 +f 111/181/3 110/38/3 112/40/3 +f 111/181/6 112/38/6 109/40/6 +f 105/181/5 110/38/5 106/40/5 +f 120/181/4 113/38/4 115/40/4 +f 115/181/1 114/38/1 117/40/1 +f 117/181/2 116/38/2 119/40/2 +f 119/181/3 118/38/3 120/40/3 +f 119/181/6 120/38/6 117/40/6 +f 113/181/5 118/38/5 114/40/5 +f 128/181/4 121/38/4 123/40/4 +f 123/181/1 122/38/1 125/40/1 +f 125/181/2 124/38/2 127/40/2 +f 127/181/3 126/38/3 128/40/3 +f 127/181/6 128/38/6 125/40/6 +f 121/181/5 126/38/5 122/40/5 +f 136/181/4 129/38/4 131/40/4 +f 131/181/1 130/38/1 133/40/1 +f 133/181/2 132/38/2 135/40/2 +f 135/181/3 134/38/3 136/40/3 +f 135/181/6 136/38/6 133/40/6 +f 129/181/5 134/38/5 130/40/5 +f 144/181/4 137/38/4 139/40/4 +f 139/181/1 138/38/1 141/40/1 +f 141/181/2 140/38/2 143/40/2 +f 143/181/3 142/38/3 144/40/3 +f 143/181/6 144/38/6 141/40/6 +f 137/181/5 142/38/5 138/40/5 +f 152/189/4 145/62/4 147/64/4 +f 147/181/1 146/38/1 149/40/1 +f 149/181/2 148/38/2 151/40/2 +f 151/181/3 150/38/3 152/40/3 +f 151/181/6 152/38/6 149/40/6 +f 145/181/5 150/38/5 146/40/5 +f 160/190/4 153/65/4 155/67/4 +f 155/191/1 154/68/1 157/70/1 +f 157/192/2 156/71/2 159/73/2 +f 159/193/3 158/74/3 160/76/3 +f 159/194/6 160/77/6 157/79/6 +f 153/195/5 158/80/5 154/82/5 +f 168/114/4 161/20/4 163/22/4 +f 163/196/1 162/83/1 165/85/1 +f 165/114/2 164/20/2 167/22/2 +f 167/197/3 166/86/3 168/88/3 +f 167/114/6 168/20/6 165/22/6 +f 161/114/5 166/20/5 162/22/5 +f 176/114/4 169/20/4 171/22/4 +f 171/198/1 170/89/1 173/91/1 +f 173/114/2 172/20/2 175/22/2 +f 175/199/3 174/92/3 176/94/3 +f 175/114/6 176/20/6 173/22/6 +f 169/114/5 174/20/5 170/22/5 +f 184/114/4 177/20/4 179/22/4 +f 179/200/1 178/95/1 181/97/1 +f 181/114/2 180/20/2 183/22/2 +f 183/201/3 182/98/3 184/100/3 +f 183/114/6 184/20/6 181/22/6 +f 177/114/5 182/20/5 178/22/5 +f 192/179/3 185/29/3 187/31/3 +f 187/179/4 186/29/4 189/31/4 +f 189/179/1 188/29/1 191/31/1 +f 191/179/2 190/29/2 192/31/2 +f 330/175/3 336/13/3 335/14/3 +f 185/180/5 190/35/5 186/37/5 +f 200/114/3 193/20/3 195/22/3 +f 195/202/4 194/102/4 197/104/4 +f 197/114/1 196/20/1 199/22/1 +f 199/203/2 198/105/2 200/107/2 +f 199/114/6 200/20/6 197/22/6 +f 193/114/5 198/20/5 194/22/5 +f 208/114/3 201/20/3 203/22/3 +f 203/204/4 202/108/4 205/110/4 +f 205/114/1 204/20/1 207/22/1 +f 207/205/2 206/111/2 208/113/2 +f 201/114/5 206/20/5 202/22/5 +f 216/114/3 209/20/3 211/22/3 +f 211/206/4 210/115/4 213/117/4 +f 213/114/1 212/20/1 215/22/1 +f 215/207/2 214/118/2 216/120/2 +f 215/114/6 216/20/6 213/22/6 +f 209/114/5 214/20/5 210/22/5 +f 224/114/3 217/20/3 219/22/3 +f 219/208/4 218/121/4 221/123/4 +f 221/114/1 220/20/1 223/22/1 +f 223/209/2 222/124/2 224/126/2 +f 223/114/6 224/20/6 221/22/6 +f 217/114/5 222/20/5 218/22/5 +f 232/179/2 225/29/2 227/31/2 +f 227/179/3 226/29/3 229/31/3 +f 229/179/4 228/29/4 231/31/4 +f 231/179/1 230/29/1 232/31/1 +f 187/33/6 189/34/6 191/101/6 +f 225/180/5 230/35/5 226/37/5 +f 239/210/3 234/127/3 237/129/3 +f 312/18/5 346/19/5 345/176/5 +f 348/211/1 238/130/1 235/132/1 +f 348/114/6 235/20/6 237/22/6 +f 233/114/5 238/20/5 234/22/5 +f 247/114/2 240/20/2 242/22/2 +f 242/212/3 241/133/3 244/135/3 +f 244/114/4 243/20/4 246/22/4 +f 246/213/1 245/136/1 247/138/1 +f 203/21/6 205/22/6 207/114/6 +f 240/114/5 245/20/5 241/22/5 +f 255/114/2 248/20/2 250/22/2 +f 250/214/3 249/139/3 252/141/3 +f 252/114/4 251/20/4 254/22/4 +f 254/215/1 253/142/1 255/144/1 +f 254/114/6 255/20/6 252/22/6 +f 248/114/5 253/20/5 249/22/5 +f 263/114/2 256/20/2 258/22/2 +f 258/216/3 257/145/3 260/147/3 +f 260/114/4 259/20/4 262/22/4 +f 262/217/1 261/148/1 263/150/1 +f 333/18/6 335/19/6 336/176/6 +f 256/114/5 261/20/5 257/22/5 +f 271/179/1 264/29/1 266/31/1 +f 266/179/2 265/29/2 268/31/2 +f 268/179/3 267/29/3 270/31/3 +f 270/179/4 269/29/4 271/31/4 +f 270/101/6 271/32/6 268/34/6 +f 264/180/5 269/35/5 265/37/5 +f 279/114/1 272/20/1 274/22/1 +f 274/218/2 273/151/2 276/153/2 +f 276/114/3 275/20/3 278/22/3 +f 278/219/4 277/154/4 279/156/4 +f 278/114/6 279/20/6 276/22/6 +f 272/114/5 277/20/5 273/22/5 +f 287/114/1 280/20/1 282/22/1 +f 282/220/2 281/157/2 284/159/2 +f 284/114/3 283/20/3 286/22/3 +f 286/221/4 285/160/4 287/162/4 +f 286/114/6 287/20/6 284/22/6 +f 280/114/5 285/20/5 281/22/5 +f 295/114/1 288/20/1 290/22/1 +f 290/222/2 289/163/2 292/165/2 +f 292/114/3 291/20/3 294/22/3 +f 294/223/4 293/166/4 295/168/4 +f 294/114/6 295/20/6 292/22/6 +f 288/114/5 293/20/5 289/22/5 +f 303/114/1 296/20/1 298/22/1 +f 298/224/2 297/169/2 300/171/2 +f 300/114/3 299/20/3 302/22/3 +f 302/225/4 301/172/4 303/174/4 +f 302/114/6 303/20/6 300/22/6 +f 296/114/5 301/20/5 297/22/5 +f 28/11/10 26/12/10 25/16/10 +f 311/175/3 305/13/3 308/15/3 +f 30/11/8 340/12/8 29/16/8 +f 341/176/5 309/17/5 310/19/5 +f 344/16/13 306/10/13 308/12/13 +f 304/16/14 309/10/14 305/12/14 +f 234/21/2 239/22/2 235/114/2 +f 320/175/2 313/13/2 316/15/2 +f 316/16/16 315/10/16 318/12/16 +f 347/176/6 314/17/6 319/19/6 +f 318/16/17 314/10/17 316/12/17 +f 312/16/18 317/10/18 313/12/18 +f 328/16/19 321/10/19 323/12/19 +f 323/175/1 322/13/1 325/15/1 +f 310/175/1 343/13/1 342/14/1 +f 321/16/3 329/16/3 327/10/3 +f 331/16/21 328/10/21 325/12/21 +f 321/16/22 326/10/22 322/12/22 +f 334/176/5 327/17/5 330/19/5 +f 328/16/3 332/16/3 329/10/3 +f 331/16/3 333/16/3 332/10/3 +f 326/11/3 327/11/3 333/12/3 +f 344/18/6 342/19/6 343/176/6 +f 330/176/4 329/17/4 336/19/4 +f 335/176/2 333/17/2 334/19/2 +f 227/33/6 229/34/6 231/101/6 +f 258/21/6 260/22/6 262/114/6 +f 339/176/1 340/17/1 337/19/1 +f 337/176/5 30/17/5 338/19/5 +f 338/175/2 32/13/2 339/14/2 +f 310/176/2 304/17/2 343/19/2 +f 242/21/6 244/22/6 246/114/6 +f 342/176/4 344/17/4 341/19/4 +f 319/14/4 345/15/4 347/13/4 +f 340/18/6 339/19/6 32/176/6 +f 314/18/1 347/19/1 346/176/1 +f 317/18/3 345/19/3 319/176/3 +f 313/11/15 320/12/15 314/16/15 +f 238/21/4 348/22/4 237/114/4 +f 309/11/12 344/12/12 308/16/12 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/chamber.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/chamber.obj new file mode 100644 index 00000000..401a1b21 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/chamber.obj @@ -0,0 +1,1792 @@ +# Blender v2.68 (sub 0) OBJ File: 'chamber.blend' +# www.blender.org +mtllib chamber.mtl +o Main_Cylinder +v 0.250387 4.349160 -1.000000 +v 0.265470 0.000793 -1.000000 +v 0.250387 4.349160 1.000000 +v 0.265470 0.000793 1.000000 +v 0.684268 4.350665 0.900969 +v 0.699351 0.002298 0.900969 +v 0.922417 4.351491 0.711051 +v 0.810580 0.002684 0.623490 +v 0.917664 4.351474 0.152303 +v 0.917664 4.351474 -0.152303 +v 0.922416 4.351491 -0.711051 +v 0.810580 0.002684 -0.623490 +v 0.684268 4.350665 -0.900969 +v 0.699351 0.002298 -0.900969 +v 0.000389 4.348293 -1.000000 +v 0.015472 -0.000074 -1.000000 +v 0.000389 4.348293 1.000000 +v 0.015472 -0.000074 1.000000 +v 0.745409 3.668157 -1.000000 +v 0.745409 3.668157 1.000000 +v 0.686636 3.667953 0.900969 +v 0.924785 3.668779 0.711051 +v 0.920032 3.668762 0.152303 +v 0.920032 3.668762 -0.152303 +v 0.924785 3.668779 -0.711051 +v 0.686636 3.667953 -0.900969 +v 0.001143 4.130874 -1.000000 +v 0.001143 4.130874 1.000000 +v 0.535112 0.222934 -1.000000 +v 0.014755 0.206474 -1.000000 +v 0.535112 0.222934 1.000000 +v 0.592642 0.223133 0.900969 +v 0.703871 0.223519 0.623490 +v 0.896966 0.224189 0.222521 +v 0.896966 0.224189 -0.222521 +v 0.703871 0.223519 -0.623490 +v 0.592642 0.223133 -0.900969 +v 0.014755 0.206474 1.000000 +v 0.745409 3.668157 -0.750000 +v 0.535112 0.222934 -0.750000 +v 0.535112 0.222934 0.781250 +v 0.745409 3.668157 0.781250 +v 0.750602 2.171250 -1.000000 +v 0.750602 2.171250 1.000000 +v 0.745409 3.668157 -0.875000 +v 0.535112 0.222934 0.890625 +v 0.745409 3.668157 0.890625 +v 0.535112 0.222934 -0.875000 +v 0.750602 2.171250 -0.750000 +v 0.158761 0.221628 0.015625 +v 0.252755 3.666448 0.015625 +v 0.750602 2.171250 0.781250 +v 0.750602 2.171250 -0.875000 +v 0.257948 2.169541 0.015625 +v 0.750602 2.171250 0.890625 +v 0.235670 4.131742 1.000000 +v 0.669551 4.133246 0.900969 +v 0.249282 0.207341 1.000000 +v 0.683164 0.208846 0.900969 +v 0.158761 0.221628 -0.596875 +v 0.252755 3.666448 -0.596875 +v 0.257948 2.169541 -0.596875 +v 0.158761 0.221628 0.628125 +v 0.252755 3.666448 0.628125 +v 0.257948 2.169541 0.628125 +v 0.519911 0.141585 -1.000000 +v 0.014987 0.139834 -1.000000 +v 0.519911 0.141585 1.000000 +v 0.698866 0.142206 0.900969 +v 0.810095 0.142592 0.623490 +v 1.003191 0.143262 0.222521 +v 1.003191 0.143262 -0.222521 +v 0.810095 0.142592 -0.623490 +v 0.698866 0.142206 -0.900969 +v 0.014986 0.139834 1.000000 +vt 0.091032 0.775249 +vt 0.128525 0.775248 +vt 0.090993 0.787908 +vt 0.075306 0.528199 +vt 0.062682 0.528587 +vt 0.062491 0.473978 +vt 0.287154 0.713953 +vt 0.265718 0.713888 +vt 0.249573 0.634955 +vt 0.644911 0.406675 +vt 0.644872 0.394016 +vt 0.682404 0.406677 +vt 0.062682 0.607512 +vt 0.075306 0.607899 +vt 0.062491 0.662120 +vt 0.637739 0.019222 +vt 0.591570 0.166366 +vt 0.590976 0.056441 +vt 0.551237 0.073742 +vt 0.443824 0.000000 +vt 0.529198 0.019221 +vt 0.445031 0.393459 +vt 0.395873 0.393610 +vt 0.001168 0.382007 +vt 0.394627 0.380800 +vt 0.394666 0.393459 +vt 0.083155 0.456041 +vt 0.179396 0.394666 +vt 0.228077 0.414541 +vt 0.732067 0.393812 +vt 0.780848 0.406269 +vt 0.721580 0.393459 +vt 0.722787 0.000000 +vt 0.771757 0.000150 +vt 0.535631 0.817644 +vt 0.495925 0.723427 +vt 0.518349 0.726470 +vt 0.636618 0.758326 +vt 0.574845 0.758137 +vt 0.636530 0.706904 +vt 0.494861 0.793909 +vt 0.433088 0.794099 +vt 0.494657 0.706714 +vt 0.494773 0.845332 +vt 0.433000 0.845522 +vt 0.000000 0.001207 +vt 0.393459 0.000000 +vt 0.393519 0.019673 +vt 0.082739 0.591483 +vt 0.782016 0.787056 +vt 0.733275 0.787258 +vt 0.781956 0.767384 +vt 0.000060 0.020880 +vt 0.001150 0.375977 +vt 0.637034 0.725884 +vt 0.636618 0.590441 +vt 0.125529 0.767880 +vt 0.226987 0.769626 +vt 0.868536 0.370092 +vt 0.771757 0.339671 +vt 0.903252 0.246465 +vt 0.929713 0.154878 +vt 0.905122 0.154954 +vt 0.904707 0.019819 +vt 0.308774 0.768608 +vt 0.320049 0.766608 +vt 0.319983 0.788125 +vt 0.990865 0.535359 +vt 0.891008 0.528744 +vt 1.000000 0.400225 +vt 0.040425 0.809826 +vt 0.018908 0.809892 +vt 0.018493 0.674757 +vt 0.954304 0.154803 +vt 0.929298 0.019743 +vt 0.954853 0.333585 +vt 0.930261 0.333660 +vt 0.905670 0.333736 +vt 0.636074 0.528745 +vt 0.515578 0.529114 +vt 0.515163 0.393980 +vt 0.636618 0.705975 +vt 0.516121 0.706344 +vt 0.999587 0.712591 +vt 0.922352 0.707530 +vt 0.061942 0.809760 +vt 0.040010 0.674691 +vt 0.062491 0.988541 +vt 0.040973 0.988607 +vt 0.019456 0.988674 +vt 0.395081 0.529484 +vt 0.394666 0.394349 +vt 0.395624 0.706714 +vt 0.782016 0.577456 +vt 0.881873 0.570842 +vt 0.891008 0.705976 +vt 0.813360 0.398671 +vt 0.890595 0.393610 +vt 0.082739 0.412897 +vt 0.075795 0.415848 +vt 0.075825 0.394666 +vt 0.287338 0.768543 +vt 0.309861 0.414114 +vt 0.288426 0.414048 +vt 0.323539 0.394674 +vt 0.287907 0.468636 +vt 0.266471 0.468570 +vt 0.394609 0.374770 +vt 0.679408 0.414045 +vt 0.780866 0.412299 +vt 0.178188 0.788113 +vt 0.226969 0.775656 +vt 0.061906 0.504589 +vt 0.000000 0.394855 +vt 0.061632 0.394666 +vt 0.075115 0.473591 +vt 0.228137 0.634889 +vt 0.249841 0.547402 +vt 0.228406 0.547336 +vt 0.636652 0.373716 +vt 0.590118 0.336210 +vt 0.591386 0.226291 +vt 0.551989 0.319060 +vt 0.530286 0.373715 +vt 0.394666 0.000151 +vt 0.001207 0.394666 +vt 0.772496 0.098677 +vt 0.869460 0.068850 +vt 0.903435 0.186540 +vt 0.780809 0.393610 +vt 0.770550 0.393609 +vt 0.636414 0.845522 +vt 0.075115 0.662507 +vt 0.075271 0.394666 +vt 0.590118 0.240060 +vt 0.062527 0.528587 +vt 0.589849 0.152507 +vt 0.558036 0.797993 +vt 0.535631 0.801174 +vt 0.574757 0.706714 +vt 0.228137 0.394868 +vt 0.000858 0.674625 +vt 0.000458 0.564703 +vt 0.062090 0.564514 +vt 0.772126 0.219174 +vt 0.394666 0.474199 +vt 0.394297 0.594696 +vt 0.515754 0.715070 +vt 0.535582 0.706714 +vt 0.856907 0.393609 +vt 0.903849 0.356390 +vt 0.393927 0.715193 +vt 0.320115 0.745091 +vt 0.904707 0.076621 +vt 0.869535 0.044259 +vt 0.869611 0.019668 +vt 0.574703 0.855389 +vt 0.321190 0.394666 +vt 0.321115 0.419258 +vt 0.321039 0.443849 +vt 0.953890 0.019668 +vt 0.635660 0.393610 +vt 0.061528 0.674625 +vt 0.791151 0.712591 +vt 0.322332 0.788133 +vt 0.075795 0.434078 +vt 0.082709 0.415848 +vt 0.082739 0.437030 +vt 0.226930 0.788315 +vt 0.000274 0.504778 +vt 0.062491 0.674436 +vt 0.900143 0.393610 +usemtl None +f 69/1 68/2 6/3 +f 69/4 6/5 8/6 +f 33/7 70/8 34/9 +f 74/10 14/11 66/12 +f 73/13 12/14 74/15 +f 13/16 10/17 11/18 +f 12/19 2/20 14/21 +f 2/20 4/22 18/23 +f 75/24 67/25 16/26 +f 20/27 3/28 28/29 +f 66/12 2/30 67/31 +f 3/32 1/33 15/34 +f 3/35 20/36 21/37 +f 5/38 21/39 7/40 +f 13/41 26/42 1/43 +f 11/44 25/45 26/42 +f 17/46 15/47 27/48 +f 44/49 20/27 28/29 +f 15/50 1/51 27/52 +f 28/53 27/48 38/54 +f 19/55 43/56 27/52 +f 68/2 31/57 38/58 +f 42/59 64/60 23/61 +f 53/62 43/63 19/64 +f 32/65 46/66 31/67 +f 62/68 49/69 61/70 +f 55/71 52/72 42/73 +f 49/74 53/62 45/75 +f 40/76 48/77 53/62 +f 48/77 29/78 43/63 +f 65/79 54/80 51/81 +f 63/82 50/83 54/80 +f 60/84 40/85 62/68 +f 44/86 55/71 47/87 +f 31/88 46/89 55/71 +f 46/89 41/90 52/72 +f 54/80 62/91 61/92 +f 50/83 60/93 62/91 +f 52/94 65/95 64/96 +f 41/97 63/98 65/95 +f 31/99 68/100 32/101 +f 32/65 69/102 33/7 +f 37/103 74/104 66/105 +f 36/106 73/107 74/104 +f 38/54 30/108 67/25 +f 29/109 66/12 30/110 +f 4/111 68/2 75/112 +f 10/113 25/114 11/115 +f 14/11 2/30 66/12 +f 70/116 69/4 8/6 +f 70/8 71/117 34/9 +f 35/118 73/107 36/106 +f 72/119 73/107 35/118 +f 71/117 72/119 35/118 +f 34/9 71/117 35/118 +f 27/48 30/108 38/54 +f 13/16 1/33 10/17 +f 1/33 3/32 10/17 +f 5/120 7/121 9/122 +f 3/32 5/120 9/122 +f 10/17 3/32 9/122 +f 8/123 6/124 4/22 +f 12/19 4/22 2/20 +f 8/123 4/22 12/19 +f 16/125 2/20 18/23 +f 18/126 75/24 16/26 +f 61/127 39/128 24/129 +f 2/30 16/130 67/31 +f 17/131 3/32 15/34 +f 5/38 3/132 21/39 +f 12/14 14/133 74/15 +f 70/116 8/6 71/134 +f 8/123 12/19 71/135 +f 12/14 73/13 72/136 +f 71/135 12/19 72/137 +f 26/138 19/139 1/140 +f 13/41 11/44 26/42 +f 28/53 17/46 27/48 +f 31/57 44/49 38/58 +f 44/49 28/29 38/58 +f 3/28 17/141 28/29 +f 22/142 23/143 9/144 +f 43/56 29/109 30/110 +f 27/52 43/56 30/110 +f 75/112 68/2 38/58 +f 51/145 61/127 24/129 +f 60/146 50/147 36/106 +f 20/36 47/148 21/37 +f 47/148 42/149 21/37 +f 21/150 42/59 22/151 +f 22/151 42/59 23/61 +f 24/129 23/61 51/145 +f 63/152 41/153 33/7 +f 24/129 39/128 25/154 +f 39/128 45/155 25/154 +f 45/155 19/156 25/154 +f 19/139 26/138 25/157 +f 45/75 53/62 19/64 +f 29/158 48/159 37/103 +f 40/160 60/146 36/106 +f 50/147 63/152 33/7 +f 35/118 36/106 50/147 +f 32/65 41/153 46/66 +f 33/7 41/153 32/65 +f 48/159 40/160 37/103 +f 37/103 40/160 36/106 +f 33/7 34/9 50/147 +f 1/51 19/55 27/52 +f 68/2 4/111 6/3 +f 34/9 35/118 50/147 +f 21/39 22/140 7/40 +f 47/87 55/71 42/73 +f 39/161 49/74 45/75 +f 49/74 40/76 53/62 +f 53/62 48/77 43/63 +f 64/162 65/79 51/81 +f 65/79 63/82 54/80 +f 40/85 49/69 62/68 +f 20/163 44/86 47/87 +f 44/86 31/88 55/71 +f 55/71 46/89 52/72 +f 51/81 54/80 61/92 +f 54/80 50/83 62/91 +f 42/164 52/94 64/96 +f 52/94 41/97 65/95 +f 68/165 69/102 32/65 +f 69/102 70/8 33/7 +f 29/166 37/167 66/168 +f 37/103 36/106 74/104 +f 75/24 38/54 67/25 +f 66/12 67/31 30/110 +f 18/169 4/111 75/112 +f 10/113 24/170 25/114 +f 10/113 23/143 24/170 +f 9/144 23/143 10/113 +f 7/171 22/142 9/144 +f 49/69 39/172 61/70 +f 64/60 51/145 23/61 +l 20 56 +l 21 57 +l 31 58 +l 32 59 +o Shield_Torus +v 1.286668 1.294293 0.013407 +v 1.277310 1.320004 0.013407 +v 1.253614 1.333685 0.013407 +v 1.226668 1.328934 0.013407 +v 1.209081 1.307973 0.013407 +v 1.209081 1.280612 0.013407 +v 1.226668 1.259652 0.013407 +v 1.253614 1.254900 0.013407 +v 1.277310 1.268581 0.013407 +v 1.088046 1.294293 -0.583488 +v 1.080475 1.320004 -0.578117 +v 1.061305 1.333685 -0.564518 +v 1.039505 1.328934 -0.549052 +v 1.025276 1.307973 -0.538958 +v 1.025276 1.280612 -0.538958 +v 1.039505 1.259652 -0.549052 +v 1.061305 1.254900 -0.564518 +v 1.080475 1.268581 -0.578117 +v 0.568046 1.294293 -0.952390 +v 0.565154 1.320004 -0.943699 +v 0.557832 1.333685 -0.921694 +v 0.549505 1.328934 -0.896671 +v 0.544070 1.307973 -0.880338 +v 0.544070 1.280612 -0.880338 +v 0.549505 1.259652 -0.896671 +v 0.557832 1.254900 -0.921694 +v 0.565154 1.268581 -0.943699 +v 0.568046 1.294293 0.979203 +v 0.565154 1.320004 0.970513 +v 0.557832 1.333685 0.948507 +v 0.549505 1.328934 0.923484 +v 0.544070 1.307973 0.907151 +v 0.544070 1.280612 0.907151 +v 0.549505 1.259652 0.923484 +v 0.557832 1.254900 0.948507 +v 0.565154 1.268581 0.970513 +v 1.088045 1.294293 0.610302 +v 1.080475 1.320004 0.604931 +v 1.061304 1.333685 0.591331 +v 1.039505 1.328934 0.575866 +v 1.025276 1.307973 0.565772 +v 1.025276 1.280612 0.565772 +v 1.039505 1.259652 0.575866 +v 1.061304 1.254900 0.591331 +v 1.080475 1.268581 0.604931 +v 0.246668 1.307973 0.907151 +v 0.246668 1.280612 0.907151 +v 0.246668 1.333685 0.948507 +v 0.246668 1.328934 0.923484 +v 0.246668 1.320004 0.970513 +v 0.246668 1.294293 0.979203 +v 0.246668 1.254900 0.948507 +v 0.246668 1.268581 0.970513 +v 0.246668 1.259652 0.923484 +v 0.246668 1.259652 -0.896671 +v 0.246668 1.280612 -0.880338 +v 0.246668 1.333685 -0.921694 +v 0.246668 1.328934 -0.896671 +v 0.246668 1.307973 -0.880338 +v 0.246668 1.320004 -0.943699 +v 0.246668 1.268581 -0.943699 +v 0.246668 1.254900 -0.921694 +v 0.246668 1.294293 -0.952390 +v 1.323580 1.720119 0.013407 +v 1.314222 1.745830 0.013407 +v 1.290526 1.759511 0.013407 +v 1.263580 1.754760 0.013407 +v 1.245992 1.733799 0.013407 +v 1.245992 1.706438 0.013407 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.314222 1.694407 0.013407 +v 1.124958 1.720119 -0.583488 +v 1.117387 1.745830 -0.578117 +v 1.098216 1.759511 -0.564518 +v 1.076417 1.754760 -0.549052 +v 1.062188 1.733799 -0.538958 +v 1.062188 1.706438 -0.538958 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 1.117387 1.694407 -0.578117 +v 0.604958 1.720119 -0.952390 +v 0.602066 1.745830 -0.943699 +v 0.594744 1.759511 -0.921694 +v 0.586417 1.754760 -0.896671 +v 0.580982 1.733799 -0.880338 +v 0.580982 1.706438 -0.880338 +v 0.586417 1.685478 -0.896671 +v 0.594744 1.680727 -0.921694 +v 0.602066 1.694407 -0.943699 +v 0.604958 1.720119 0.979203 +v 0.602066 1.745830 0.970513 +v 0.594744 1.759511 0.948507 +v 0.586417 1.754760 0.923484 +v 0.580982 1.733799 0.907151 +v 0.580982 1.706438 0.907151 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 0.602066 1.694407 0.970513 +v 1.124957 1.720119 0.610302 +v 1.117386 1.745830 0.604931 +v 1.098216 1.759511 0.591331 +v 1.076416 1.754760 0.575866 +v 1.062188 1.733799 0.565772 +v 1.062188 1.706438 0.565772 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.117386 1.694407 0.604931 +v 0.283580 1.733799 0.907151 +v 0.283580 1.706438 0.907151 +v 0.283580 1.759511 0.948507 +v 0.283580 1.754760 0.923484 +v 0.283580 1.745830 0.970513 +v 0.283580 1.720119 0.979203 +v 0.283580 1.680727 0.948507 +v 0.283580 1.694407 0.970513 +v 0.283580 1.685478 0.923484 +v 0.283580 1.685478 -0.896671 +v 0.283580 1.706438 -0.880338 +v 0.283580 1.759511 -0.921694 +v 0.283580 1.754760 -0.896671 +v 0.283580 1.733799 -0.880338 +v 0.283580 1.745830 -0.943699 +v 0.283580 1.694407 -0.943699 +v 0.283580 1.680727 -0.921694 +v 0.283580 1.720119 -0.952390 +v 1.383426 3.359691 0.013407 +v 1.374067 3.385402 0.013407 +v 1.350372 3.399083 0.013407 +v 1.323426 3.394332 0.013407 +v 1.305838 3.373371 0.013407 +v 1.305838 3.346010 0.013407 +v 1.323426 3.325050 0.013407 +v 1.350372 3.320298 0.013407 +v 1.374067 3.333979 0.013407 +v 1.184803 3.359691 -0.583488 +v 1.177232 3.385402 -0.578117 +v 1.158062 3.399083 -0.564518 +v 1.136262 3.394332 -0.549052 +v 1.122033 3.373371 -0.538958 +v 1.122033 3.346010 -0.538958 +v 1.136262 3.325050 -0.549052 +v 1.158062 3.320298 -0.564518 +v 1.177232 3.333979 -0.578117 +v 0.664803 3.359691 -0.952390 +v 0.661912 3.385402 -0.943699 +v 0.654589 3.399083 -0.921694 +v 0.646262 3.394332 -0.896671 +v 0.640828 3.373371 -0.880338 +v 0.640828 3.346010 -0.880338 +v 0.646262 3.325050 -0.896671 +v 0.654589 3.320298 -0.921694 +v 0.661912 3.333979 -0.943699 +v 0.664803 3.359691 0.979203 +v 0.661912 3.385402 0.970513 +v 0.654589 3.399083 0.948507 +v 0.646262 3.394332 0.923484 +v 0.640828 3.373371 0.907151 +v 0.640828 3.346010 0.907151 +v 0.646262 3.325050 0.923484 +v 0.654589 3.320298 0.948507 +v 0.661912 3.333979 0.970513 +v 1.184803 3.359691 0.610302 +v 1.177232 3.385402 0.604931 +v 1.158062 3.399083 0.591331 +v 1.136262 3.394332 0.575866 +v 1.122033 3.373371 0.565772 +v 1.122033 3.346010 0.565772 +v 1.136262 3.325050 0.575866 +v 1.158062 3.320298 0.591331 +v 1.177232 3.333979 0.604931 +v 0.343426 3.373371 0.907151 +v 0.343426 3.346010 0.907151 +v 0.343426 3.399083 0.948507 +v 0.343426 3.394332 0.923484 +v 0.343426 3.385402 0.970513 +v 0.343426 3.359691 0.979203 +v 0.343426 3.320298 0.948507 +v 0.343426 3.333979 0.970513 +v 0.343426 3.325050 0.923484 +v 0.343426 3.325050 -0.896671 +v 0.343426 3.346010 -0.880338 +v 0.343426 3.399083 -0.921694 +v 0.343426 3.394332 -0.896671 +v 0.343426 3.373371 -0.880338 +v 0.343426 3.385402 -0.943699 +v 0.343426 3.333979 -0.943699 +v 0.343426 3.320298 -0.921694 +v 0.343426 3.359691 -0.952390 +v 1.383426 2.928434 0.013407 +v 1.374067 2.954146 0.013407 +v 1.350372 2.967826 0.013407 +v 1.323426 2.963075 0.013407 +v 1.305838 2.942115 0.013407 +v 1.305838 2.914753 0.013407 +v 1.323426 2.893793 0.013407 +v 1.350372 2.889042 0.013407 +v 1.374067 2.902723 0.013407 +v 1.184803 2.928434 -0.583488 +v 1.177232 2.954146 -0.578117 +v 1.158062 2.967826 -0.564518 +v 1.136262 2.963075 -0.549052 +v 1.122033 2.942115 -0.538958 +v 1.122033 2.914753 -0.538958 +v 1.136262 2.893793 -0.549052 +v 1.158062 2.889042 -0.564518 +v 1.177232 2.902723 -0.578117 +v 0.664803 2.928434 -0.952390 +v 0.661912 2.954146 -0.943699 +v 0.654589 2.967826 -0.921694 +v 0.646262 2.963075 -0.896671 +v 0.640828 2.942115 -0.880338 +v 0.640828 2.914753 -0.880338 +v 0.646262 2.893793 -0.896671 +v 0.654589 2.889042 -0.921694 +v 0.661912 2.902723 -0.943699 +v 0.664803 2.928434 0.979203 +v 0.661912 2.954146 0.970513 +v 0.654589 2.967826 0.948507 +v 0.646262 2.963075 0.923484 +v 0.640828 2.942115 0.907151 +v 0.640828 2.914753 0.907151 +v 0.646262 2.893793 0.923484 +v 0.654589 2.889042 0.948507 +v 0.661912 2.902723 0.970513 +v 1.184803 2.928434 0.610302 +v 1.177232 2.954146 0.604931 +v 1.158062 2.967826 0.591331 +v 1.136262 2.963075 0.575866 +v 1.122033 2.942115 0.565772 +v 1.122033 2.914753 0.565772 +v 1.136262 2.893793 0.575866 +v 1.158062 2.889042 0.591331 +v 1.177232 2.902723 0.604931 +v 0.343426 2.942115 0.907151 +v 0.343426 2.914753 0.907151 +v 0.343426 2.967826 0.948507 +v 0.343426 2.963075 0.923484 +v 0.343426 2.954146 0.970513 +v 0.343426 2.928434 0.979203 +v 0.343426 2.889042 0.948507 +v 0.343426 2.902723 0.970513 +v 0.343426 2.893793 0.923484 +v 0.343426 2.893793 -0.896671 +v 0.343426 2.914753 -0.880338 +v 0.343426 2.967826 -0.921694 +v 0.343426 2.963075 -0.896671 +v 0.343426 2.942115 -0.880338 +v 0.343426 2.954146 -0.943699 +v 0.343426 2.902723 -0.943699 +v 0.343426 2.889042 -0.921694 +v 0.343426 2.928434 -0.952390 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 -0.896671 +v 0.594744 1.680727 -0.921694 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 -0.896671 +v 0.594744 1.680727 -0.921694 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 -0.896671 +v 0.594744 1.680727 -0.921694 +v 1.263580 1.685478 0.013407 +v 1.290526 1.680727 0.013407 +v 1.076417 1.685478 -0.549052 +v 1.098216 1.680727 -0.564518 +v 0.586417 1.685478 0.923484 +v 0.594744 1.680727 0.948507 +v 1.076416 1.685478 0.575866 +v 1.098216 1.680727 0.591331 +v 1.021363 1.299541 -0.549052 +v 1.043163 1.294790 -0.564518 +v 0.531364 1.299541 -0.896671 +v 0.539690 1.294790 -0.921694 +v 1.208527 1.299541 0.013407 +v 1.235473 1.294790 0.013407 +v 1.021363 1.299541 -0.549052 +v 1.043163 1.294790 -0.564518 +v 0.531364 1.299541 0.923484 +v 0.539690 1.294790 0.948507 +v 1.021363 1.299541 0.575866 +v 1.043163 1.294790 0.591331 +v 1.323091 2.938798 0.013407 +v 1.350037 2.934047 0.013407 +v 1.135927 2.938798 -0.549052 +v 1.157727 2.934047 -0.564518 +v 0.645928 2.938798 -0.896671 +v 0.654254 2.934047 -0.921694 +v 0.645928 2.938798 0.923484 +v 0.654254 2.934047 0.948507 +v 1.135927 2.938798 0.575866 +v 1.157727 2.934047 0.591331 +vt 0.898508 0.888505 +vt 0.884475 0.984859 +vt 0.893351 0.887956 +vt 0.590320 0.546505 +vt 0.627822 0.434395 +vt 0.594761 0.546846 +vt 0.631400 0.437313 +vt 0.599941 0.546749 +vt 0.998202 0.886665 +vt 0.980392 0.977008 +vt 0.993560 0.885525 +vt 0.704735 0.728739 +vt 0.705368 0.818525 +vt 0.700136 0.818509 +vt 0.379901 0.181461 +vt 0.344843 0.076391 +vt 0.347886 0.074759 +vt 0.383585 0.181748 +vt 0.352115 0.071853 +vt 0.388795 0.181784 +vt 0.355551 0.069033 +vt 0.989311 0.096284 +vt 0.994241 0.097729 +vt 0.988994 0.193307 +vt 0.989368 0.315225 +vt 0.984094 0.193909 +vt 0.726236 0.365347 +vt 0.727551 0.369852 +vt 0.635600 0.440147 +vt 0.709422 0.817435 +vt 0.709070 0.932319 +vt 0.705022 0.931347 +vt 0.699790 0.931331 +vt 0.695823 0.932278 +vt 0.254489 0.009118 +vt 0.256150 0.004407 +vt 0.257327 0.000000 +vt 0.993927 0.193878 +vt 0.994297 0.314699 +vt 0.472305 0.729730 +vt 0.472275 0.779856 +vt 0.467332 0.778488 +vt 0.787482 0.728723 +vt 0.726614 0.728530 +vt 0.727921 0.724685 +vt 0.787390 0.724875 +vt 0.729538 0.719829 +vt 0.787415 0.720014 +vt 0.730709 0.716234 +vt 0.387862 0.730725 +vt 0.387862 0.777110 +vt 0.382630 0.777078 +vt 0.196547 0.353089 +vt 0.253222 0.352706 +vt 0.196880 0.356513 +vt 0.254591 0.356123 +vt 0.196957 0.361354 +vt 0.256254 0.360953 +vt 0.196741 0.365347 +vt 0.477193 0.728723 +vt 0.477164 0.778398 +vt 0.883509 0.669925 +vt 0.898139 0.768211 +vt 0.892985 0.768744 +vt 0.628056 0.658855 +vt 0.631629 0.656612 +vt 0.635823 0.653578 +vt 0.985099 0.680280 +vt 1.000000 0.773325 +vt 0.995326 0.774218 +vt 0.980692 0.682844 +vt 0.975615 0.682766 +vt 0.344905 0.287003 +vt 0.347949 0.289220 +vt 0.352179 0.292211 +vt 0.257434 0.364936 +vt 0.888124 0.671313 +vt 0.902622 0.768715 +vt 0.990249 0.774141 +vt 0.355617 0.294576 +vt 0.902988 0.887926 +vt 0.989829 0.365347 +vt 0.984464 0.314729 +vt 0.787103 0.365540 +vt 0.787019 0.370042 +vt 0.729178 0.374492 +vt 0.708463 0.979549 +vt 0.704425 0.977729 +vt 0.699194 0.977713 +vt 0.695216 0.979508 +vt 0.196778 0.009508 +vt 0.196852 0.004808 +vt 0.196634 0.000410 +vt 0.994754 0.364370 +vt 0.057762 0.583927 +vt 0.043729 0.680280 +vt 0.052604 0.583377 +vt 0.786867 0.183128 +vt 0.824369 0.071018 +vt 0.791308 0.183469 +vt 0.827947 0.073937 +vt 0.796488 0.183372 +vt 0.925575 0.876309 +vt 0.907764 0.966653 +vt 0.920933 0.875169 +vt 0.936893 0.669941 +vt 0.937525 0.759727 +vt 0.932293 0.759711 +vt 0.576448 0.181461 +vt 0.541390 0.076391 +vt 0.544433 0.074759 +vt 0.000000 0.000000 +vt 0.585342 0.181784 +vt 0.548662 0.071853 +vt 0.552097 0.069033 +vt 0.980949 0.365347 +vt 0.985879 0.366791 +vt 0.980632 0.462369 +vt 0.981006 0.584287 +vt 0.975732 0.462971 +vt 0.922782 0.001970 +vt 0.924098 0.006476 +vt 0.832147 0.076771 +vt 0.941580 0.758637 +vt 0.941227 0.873521 +vt 0.937179 0.872549 +vt 0.931948 0.872533 +vt 0.927980 0.873480 +vt 0.452697 0.004407 +vt 0.453874 0.000000 +vt 0.985565 0.462941 +vt 0.985935 0.583761 +vt 0.685404 0.729730 +vt 0.685375 0.779855 +vt 0.680432 0.778488 +vt 0.984029 0.365347 +vt 0.923161 0.365153 +vt 0.924468 0.361309 +vt 0.983936 0.361498 +vt 0.926085 0.356453 +vt 0.983962 0.356637 +vt 0.927256 0.352857 +vt 0.279971 0.730725 +vt 0.279971 0.777110 +vt 0.274739 0.777078 +vt 0.393094 0.353089 +vt 0.449769 0.352706 +vt 0.393427 0.356513 +vt 0.451138 0.356123 +vt 0.393504 0.361354 +vt 0.452801 0.360953 +vt 0.393288 0.365347 +vt 0.690293 0.728723 +vt 0.690264 0.778398 +vt 0.042763 0.365347 +vt 0.057393 0.463633 +vt 0.052238 0.464166 +vt 0.824603 0.295478 +vt 0.828176 0.293236 +vt 0.832370 0.290201 +vt 0.912472 0.669925 +vt 0.927373 0.762969 +vt 0.922699 0.763863 +vt 0.908065 0.672489 +vt 0.917622 0.763785 +vt 0.541452 0.287003 +vt 0.548726 0.292211 +vt 0.453981 0.364936 +vt 0.047377 0.366735 +vt 0.061875 0.464136 +vt 0.544496 0.289220 +vt 0.552163 0.294576 +vt 0.062241 0.583348 +vt 0.981467 0.634409 +vt 0.976102 0.583791 +vt 0.983650 0.002163 +vt 0.983566 0.006665 +vt 0.925725 0.011115 +vt 0.940620 0.920750 +vt 0.936583 0.918931 +vt 0.931351 0.918915 +vt 0.927373 0.920710 +vt 0.451036 0.009118 +vt 0.393325 0.009508 +vt 0.393399 0.004808 +vt 0.393181 0.000410 +vt 0.986392 0.633432 +vt 0.020022 0.583927 +vt 0.005989 0.680280 +vt 0.014864 0.583378 +vt 0.589641 0.183128 +vt 0.627142 0.071018 +vt 0.594081 0.183469 +vt 0.630720 0.073937 +vt 0.599262 0.183372 +vt 0.022703 0.886665 +vt 0.004893 0.977008 +vt 0.018061 0.885525 +vt 0.870605 0.672304 +vt 0.871238 0.762090 +vt 0.866006 0.762074 +vt 0.183354 0.181461 +vt 0.148296 0.076391 +vt 0.151339 0.074759 +vt 0.492300 0.801289 +vt 0.487254 0.800420 +vt 0.492100 0.729592 +vt 0.192248 0.181784 +vt 0.155568 0.071853 +vt 0.159004 0.069033 +vt 0.029719 0.634409 +vt 0.034649 0.635853 +vt 0.029401 0.731431 +vt 0.029775 0.853349 +vt 0.024501 0.732033 +vt 0.725556 0.001970 +vt 0.726871 0.006476 +vt 0.634920 0.076771 +vt 0.875293 0.761000 +vt 0.874940 0.875884 +vt 0.870892 0.874912 +vt 0.865660 0.874896 +vt 0.861693 0.875843 +vt 0.590320 0.822837 +vt 0.590628 0.728898 +vt 0.664486 0.728723 +vt 0.059603 0.004407 +vt 0.060780 0.000000 +vt 0.034334 0.732003 +vt 0.034705 0.852823 +vt 0.511176 0.729730 +vt 0.511146 0.779856 +vt 0.506203 0.778488 +vt 0.786802 0.365347 +vt 0.725935 0.365153 +vt 0.727241 0.361309 +vt 0.786710 0.361498 +vt 0.728859 0.356453 +vt 0.786735 0.356637 +vt 0.730029 0.352857 +vt 0.285203 0.730725 +vt 0.285203 0.777110 +vt 0.279971 0.777078 +vt 0.000000 0.353089 +vt 0.056675 0.352706 +vt 0.000333 0.356513 +vt 0.058044 0.356123 +vt 0.000410 0.361354 +vt 0.059707 0.360953 +vt 0.000194 0.365347 +vt 0.516064 0.728723 +vt 0.516035 0.778398 +vt 0.005023 0.365347 +vt 0.019653 0.463633 +vt 0.014499 0.464166 +vt 0.627376 0.295478 +vt 0.630949 0.293236 +vt 0.635143 0.290201 +vt 0.009600 0.680280 +vt 0.024501 0.773325 +vt 0.019827 0.774219 +vt 0.005194 0.682844 +vt 0.014750 0.774141 +vt 0.148358 0.287003 +vt 0.116606 0.821436 +vt 0.107515 0.934425 +vt 0.036048 0.928692 +vt 0.155632 0.292211 +vt 0.060887 0.364936 +vt 0.009637 0.366735 +vt 0.024136 0.464136 +vt 0.012984 0.885447 +vt 0.151402 0.289220 +vt 0.107727 0.727626 +vt 0.045139 0.815703 +vt 0.159070 0.294576 +vt 0.024501 0.583348 +vt 0.030237 0.903471 +vt 0.024872 0.852853 +vt 0.786424 0.002163 +vt 0.786340 0.006665 +vt 0.728498 0.011115 +vt 0.874333 0.923114 +vt 0.870296 0.921294 +vt 0.865064 0.921278 +vt 0.861086 0.923073 +vt 0.057942 0.009118 +vt 0.000232 0.009508 +vt 0.000305 0.004808 +vt 0.000087 0.000410 +vt 0.035162 0.902494 +vt 0.971252 0.583927 +vt 0.957220 0.680280 +vt 0.966095 0.583377 +vt 0.393094 0.546505 +vt 0.430595 0.434395 +vt 0.397534 0.546846 +vt 0.434174 0.437313 +vt 0.402715 0.546749 +vt 0.973817 0.886665 +vt 0.956007 0.977008 +vt 0.969175 0.885525 +vt 0.674060 0.728739 +vt 0.674693 0.818525 +vt 0.668829 0.728723 +vt 0.379901 0.546807 +vt 0.344843 0.441738 +vt 0.347886 0.440106 +vt 0.383585 0.547095 +vt 0.352115 0.437200 +vt 0.388795 0.547131 +vt 0.355551 0.434380 +vt 0.029719 0.365347 +vt 0.034648 0.366791 +vt 0.029401 0.462369 +vt 0.029775 0.584287 +vt 0.024501 0.462971 +vt 0.529009 0.365347 +vt 0.530325 0.369852 +vt 0.438373 0.440148 +vt 0.678748 0.817435 +vt 0.678395 0.932319 +vt 0.674347 0.931347 +vt 0.669116 0.931331 +vt 0.669462 0.818509 +vt 0.665148 0.932278 +vt 0.254489 0.374465 +vt 0.256150 0.369754 +vt 0.257327 0.365347 +vt 0.034334 0.462941 +vt 0.034705 0.583761 +vt 0.482166 0.729730 +vt 0.482137 0.779856 +vt 0.477193 0.778488 +vt 0.590255 0.728723 +vt 0.529388 0.728530 +vt 0.530695 0.724685 +vt 0.590163 0.724875 +vt 0.532312 0.719829 +vt 0.590189 0.720014 +vt 0.533482 0.716234 +vt 0.393094 0.730725 +vt 0.393094 0.777110 +vt 0.387862 0.777078 +vt 0.196547 0.718435 +vt 0.253222 0.718052 +vt 0.196880 0.721860 +vt 0.254591 0.721470 +vt 0.196957 0.726701 +vt 0.256254 0.726300 +vt 0.196741 0.730693 +vt 0.487055 0.728723 +vt 0.487025 0.778398 +vt 0.956253 0.365347 +vt 0.970883 0.463633 +vt 0.965729 0.464166 +vt 0.430829 0.658855 +vt 0.434402 0.656612 +vt 0.438596 0.653578 +vt 0.960714 0.680280 +vt 0.975615 0.773325 +vt 0.970941 0.774219 +vt 0.956308 0.682844 +vt 0.965864 0.774141 +vt 0.344905 0.652350 +vt 0.347949 0.654567 +vt 0.352179 0.657557 +vt 0.257434 0.730283 +vt 0.960867 0.366735 +vt 0.975366 0.464136 +vt 0.355617 0.659923 +vt 0.975732 0.583348 +vt 0.030237 0.634409 +vt 0.024872 0.583791 +vt 0.589877 0.365540 +vt 0.589793 0.370042 +vt 0.531952 0.374492 +vt 0.677788 0.979549 +vt 0.673751 0.977729 +vt 0.668519 0.977713 +vt 0.664541 0.979508 +vt 0.196778 0.374855 +vt 0.196852 0.370155 +vt 0.196634 0.365757 +vt 0.035162 0.633432 +vt 0.393456 0.846766 +vt 0.393094 0.728723 +vt 0.466970 0.737083 +vt 0.196547 0.824633 +vt 0.196566 0.730693 +vt 0.270468 0.738826 +vt 0.506203 0.803480 +vt 0.501125 0.802829 +vt 0.506139 0.729375 +vt 0.779832 0.846165 +vt 0.787547 0.942066 +vt 0.709422 0.844953 +vt 0.695104 0.730507 +vt 0.695216 0.844664 +vt 0.690408 0.846019 +vt 0.946272 0.459824 +vt 0.878815 0.369433 +vt 0.881918 0.365347 +vt 0.878487 0.665860 +vt 0.946147 0.573049 +vt 0.881581 0.669925 +vt 0.951102 0.574562 +vt 0.787547 0.460132 +vt 0.803692 0.369476 +vt 0.861587 0.463251 +vt 0.274739 0.801113 +vt 0.270552 0.802413 +vt 0.270468 0.731993 +vt 0.804447 0.666240 +vt 0.787836 0.573486 +vt 0.861875 0.576605 +vt 0.787331 0.729935 +vt 0.716921 0.728723 +vt 0.803834 0.365347 +vt 0.877732 0.372594 +vt 0.496450 0.803098 +vt 0.492300 0.803568 +vt 0.492365 0.729193 +vt 0.590320 0.728723 +vt 0.589968 0.843607 +vt 0.516416 0.737083 +vt 0.191337 0.542688 +vt 0.155638 0.435698 +vt 0.159867 0.432792 +vt 0.062241 0.370057 +vt 0.063902 0.365347 +vt 0.062343 0.717062 +vt 0.155701 0.650159 +vt 0.064006 0.721892 +vt 0.159931 0.653150 +vt 0.500887 0.802577 +vt 0.496817 0.803514 +vt 0.496991 0.729660 +vt 0.590683 0.940879 +vt 0.664179 0.822662 +vt 0.861401 0.669533 +vt 0.862046 0.760959 +vt 0.787547 0.669359 +vt 0.188832 0.842762 +vt 0.196547 0.938663 +vt 0.116606 0.838122 +vt 0.196331 0.726532 +vt 0.124105 0.721892 +vt 0.788191 0.760785 +vt 0.879444 0.983443 +vt 0.976069 0.974247 +vt 0.699503 0.728723 +vt 0.393094 0.181551 +vt 0.988483 0.885447 +vt 0.696175 0.817394 +vt 0.467361 0.728814 +vt 0.787547 0.716415 +vt 0.382630 0.730693 +vt 0.878487 0.671343 +vt 0.984922 0.364400 +vt 0.787055 0.374676 +vt 0.038697 0.678864 +vt 0.903442 0.963892 +vt 0.931661 0.669925 +vt 0.580132 0.181748 +vt 0.589641 0.181551 +vt 0.928333 0.758596 +vt 0.680461 0.728814 +vt 0.984094 0.353038 +vt 0.274739 0.730693 +vt 0.037740 0.366764 +vt 0.902988 0.672411 +vt 0.976560 0.633462 +vt 0.983602 0.011299 +vt 0.000958 0.678864 +vt 0.000571 0.974247 +vt 0.865374 0.672288 +vt 0.187038 0.181748 +vt 0.196547 0.181551 +vt 0.506232 0.728814 +vt 0.786867 0.353038 +vt 0.279971 0.730693 +vt 0.000000 0.366764 +vt 0.000116 0.682766 +vt 0.036260 0.721892 +vt 0.025329 0.902524 +vt 0.786375 0.011299 +vt 0.952188 0.678864 +vt 0.951685 0.974247 +vt 0.964098 0.885447 +vt 0.393094 0.546898 +vt 0.665501 0.817394 +vt 0.477223 0.728814 +vt 0.590320 0.716415 +vt 0.387862 0.730693 +vt 0.951231 0.366764 +vt 0.951231 0.682766 +vt 0.025329 0.633462 +vt 0.589828 0.374676 +vt 0.467332 0.855126 +vt 0.270449 0.832766 +vt 0.501061 0.728723 +vt 0.717137 0.940854 +vt 0.951231 0.458223 +vt 0.274655 0.730693 +vt 0.878487 0.669359 +vt 0.877874 0.368465 +vt 0.496515 0.728723 +vt 0.516064 0.851967 +vt 0.196547 0.542723 +vt 0.664541 0.940705 +vt 0.124321 0.934023 +vt 0.787839 0.875669 +vt 0.915856 0.875091 +usemtl None_chamber2.png +f 76/173 85/174 77/175 +f 77/176 86/177 78/178 +f 78/178 87/179 79/180 +f 79/181 88/182 80/183 +f 80/184 89/185 90/186 +f 81/187 90/188 91/189 +f 82/190 91/189 92/191 +f 83/192 92/191 93/193 +f 76/194 84/195 85/196 +f 85/196 94/197 86/198 +f 86/177 95/199 87/179 +f 87/179 96/200 88/201 +f 88/202 97/203 89/185 +f 89/185 98/204 90/186 +f 90/186 99/205 100/206 +f 91/189 100/207 101/208 +f 92/191 101/208 102/209 +f 93/210 102/211 94/197 +f 126/212 103/213 104/214 +f 125/215 104/216 105/217 +f 123/218 105/217 106/219 +f 124/220 106/219 107/221 +f 121/222 107/223 108/224 +f 122/225 108/226 129/227 +f 129/227 109/228 127/229 +f 127/229 110/230 128/231 +f 128/232 111/233 126/212 +f 103/234 112/235 113/236 +f 104/216 113/237 114/238 +f 105/217 114/238 115/239 +f 106/240 115/241 116/242 +f 107/243 116/242 108/244 +f 108/226 117/245 109/228 +f 109/228 118/246 110/230 +f 110/230 119/247 111/248 +f 111/249 120/250 103/234 +f 112/235 76/173 77/175 +f 113/237 77/176 78/178 +f 114/238 78/178 79/180 +f 115/241 79/181 80/183 +f 116/242 80/183 117/251 +f 117/245 81/187 118/246 +f 118/246 82/190 119/247 +f 119/247 83/192 120/252 +f 120/250 84/253 112/235 +f 94/197 138/254 95/255 +f 95/199 135/256 96/200 +f 96/200 132/257 97/258 +f 97/203 133/259 98/204 +f 98/204 134/260 131/261 +f 99/205 131/261 130/262 +f 100/207 130/263 137/264 +f 101/208 137/264 136/265 +f 102/211 136/266 138/254 +f 139/267 148/268 140/269 +f 140/270 149/271 141/272 +f 141/272 150/273 142/274 +f 142/275 151/276 143/277 +f 143/278 152/279 153/280 +f 144/281 153/282 154/283 +f 172/284 181/284 332/284 +f 146/285 155/286 156/287 +f 139/288 147/289 148/290 +f 148/290 157/291 149/292 +f 149/271 158/293 150/273 +f 150/273 159/294 151/295 +f 151/296 160/297 152/279 +f 152/279 161/298 153/280 +f 153/280 162/299 163/300 +f 155/284 154/284 337/284 +f 155/286 164/301 165/302 +f 156/303 165/304 157/291 +f 189/305 166/306 167/307 +f 188/308 167/309 168/310 +f 186/311 168/310 169/312 +f 187/313 169/312 170/314 +f 184/315 170/316 171/317 +f 185/318 171/319 192/320 +f 192/320 172/321 190/322 +f 190/322 173/323 191/324 +f 191/325 174/326 189/305 +f 166/327 175/328 176/329 +f 167/309 176/330 177/331 +f 168/310 177/331 178/332 +f 169/333 178/334 179/335 +f 170/336 179/335 180/337 +f 171/319 180/338 172/321 +f 145/284 154/284 328/284 +f 173/323 182/339 174/340 +f 174/341 183/342 166/327 +f 175/328 139/267 140/269 +f 176/330 140/270 141/272 +f 177/331 141/272 142/274 +f 178/334 142/275 143/277 +f 179/335 143/277 180/337 +f 180/338 144/281 181/343 +f 154/284 155/284 330/284 +f 182/339 146/285 183/344 +f 183/342 147/345 175/328 +f 157/291 201/346 158/347 +f 158/293 198/348 159/294 +f 159/294 195/349 160/350 +f 160/297 196/351 161/298 +f 161/298 197/352 194/353 +f 162/299 194/353 193/354 +f 163/355 193/356 200/357 +f 164/301 200/357 199/358 +f 165/304 199/359 201/346 +f 202/360 211/361 203/362 +f 203/363 212/364 204/365 +f 204/365 213/366 205/367 +f 205/368 214/369 206/370 +f 206/371 215/372 216/373 +f 207/374 216/375 217/376 +f 226/377 227/378 388/379 +f 209/380 218/381 219/382 +f 202/383 210/384 211/385 +f 211/385 220/386 212/387 +f 212/364 221/388 213/366 +f 213/366 222/389 214/390 +f 214/391 223/392 215/372 +f 215/372 224/393 225/394 +f 216/373 225/394 226/395 +f 218/396 209/397 385/398 +f 218/381 227/399 228/400 +f 219/401 228/402 220/386 +f 252/403 229/404 230/405 +f 251/406 230/407 231/408 +f 249/409 231/408 232/410 +f 250/411 232/410 233/412 +f 247/413 233/414 234/415 +f 248/416 234/417 255/418 +f 255/418 235/419 253/420 +f 253/420 236/421 254/422 +f 254/423 237/424 252/403 +f 229/425 238/426 239/427 +f 230/407 239/428 240/429 +f 231/408 240/429 241/430 +f 232/431 241/432 242/433 +f 233/434 242/433 243/435 +f 234/417 243/436 235/419 +f 244/437 208/438 384/439 +f 236/421 245/440 237/441 +f 237/442 246/443 229/425 +f 238/426 202/360 203/362 +f 239/428 203/363 204/365 +f 240/429 204/365 205/367 +f 241/432 205/368 206/370 +f 242/433 206/370 207/444 +f 243/436 207/374 244/445 +f 235/446 244/437 392/447 +f 245/440 209/380 246/448 +f 246/443 210/449 238/426 +f 220/386 264/450 221/451 +f 221/388 261/452 222/389 +f 222/389 258/453 223/454 +f 223/392 259/455 224/393 +f 224/393 260/456 257/457 +f 225/394 257/457 256/458 +f 226/459 256/460 263/461 +f 227/399 263/461 262/462 +f 228/402 262/463 264/450 +f 265/464 274/465 266/466 +f 266/467 275/468 267/469 +f 267/469 276/470 268/471 +f 268/472 277/473 269/474 +f 269/475 278/476 270/477 +f 270/478 279/479 280/480 +f 271/481 280/480 281/482 +f 272/483 281/482 282/484 +f 265/485 273/486 274/487 +f 274/487 283/488 275/489 +f 275/468 284/490 276/470 +f 276/470 285/491 277/492 +f 277/493 286/494 278/476 +f 278/476 287/495 288/496 +f 279/497 288/496 289/498 +f 280/480 289/499 290/500 +f 281/482 290/500 291/501 +f 282/502 291/503 283/488 +f 315/504 292/505 293/506 +f 314/507 293/508 294/509 +f 312/510 294/509 295/511 +f 313/512 295/511 296/513 +f 310/514 296/515 297/516 +f 311/517 297/518 318/519 +f 318/519 298/520 316/521 +f 316/521 299/522 317/523 +f 317/524 300/525 315/504 +f 292/526 301/527 302/528 +f 293/508 302/529 303/530 +f 294/509 303/530 304/531 +f 295/532 304/533 305/534 +f 296/535 305/534 306/536 +f 297/518 306/537 298/520 +f 298/520 307/538 299/522 +f 299/522 308/539 300/540 +f 300/541 309/542 292/526 +f 301/527 265/464 266/466 +f 302/529 266/467 267/469 +f 303/530 267/469 268/471 +f 304/533 268/472 269/474 +f 305/534 269/474 306/536 +f 306/537 270/478 307/538 +f 307/538 271/481 308/539 +f 308/539 272/483 309/543 +f 309/542 273/544 301/527 +f 283/488 327/545 284/546 +f 284/490 324/547 285/491 +f 285/491 321/548 286/549 +f 286/494 322/550 287/495 +f 287/495 323/551 320/552 +f 288/496 320/552 319/553 +f 289/499 319/554 326/555 +f 290/500 326/555 325/556 +f 291/503 325/557 327/545 +f 331/284 329/284 343/284 +f 163/284 164/284 338/284 +f 335/284 333/284 347/284 +f 173/284 172/284 333/284 +f 181/284 145/284 334/284 +f 146/284 182/284 329/284 +f 182/284 173/284 335/284 +f 155/284 146/284 331/284 +f 336/284 338/284 348/284 +f 345/284 344/284 357/284 +f 342/284 343/284 354/284 +f 346/284 340/284 358/284 +f 164/284 155/284 339/284 +f 328/284 330/284 340/284 +f 332/284 334/284 344/284 +f 329/284 335/284 341/284 +f 334/284 328/284 346/284 +f 330/284 331/284 342/284 +f 154/284 163/284 336/284 +f 333/284 332/284 345/284 +f 359/284 357/284 371/284 +f 348/284 350/284 360/284 +f 357/284 356/284 369/284 +f 354/284 355/284 366/284 +f 347/284 345/284 359/284 +f 338/284 339/284 350/284 +f 343/284 341/284 355/284 +f 339/284 337/284 351/284 +f 340/284 342/284 352/284 +f 337/284 336/284 349/284 +f 344/284 346/284 356/284 +f 341/284 347/284 353/284 +f 363/558 361/559 373/560 +f 367/561 365/562 377/563 +f 362/564 363/565 374/566 +f 371/567 369/568 383/569 +f 350/284 351/284 362/284 +f 355/284 353/284 367/284 +f 351/284 349/284 363/284 +f 352/284 354/284 364/284 +f 349/284 348/284 361/284 +f 356/284 358/284 368/284 +f 353/284 359/284 365/284 +f 358/284 352/284 370/284 +f 372/570 374/571 375/572 +f 376/573 378/574 379/575 +f 380/576 382/577 381/578 +f 382/577 376/573 383/579 +f 364/580 366/581 376/582 +f 361/583 360/584 372/585 +f 368/586 370/587 382/588 +f 365/589 371/567 377/590 +f 370/587 364/580 376/582 +f 366/581 367/591 378/592 +f 369/593 368/594 380/595 +f 360/596 362/597 372/598 +f 384/599 386/600 387/601 +f 386/600 388/602 389/603 +f 390/604 392/605 391/606 +f 392/605 384/599 393/607 +f 236/608 235/609 390/610 +f 227/611 218/396 387/612 +f 208/613 217/614 384/615 +f 245/616 236/617 393/618 +f 209/619 245/616 385/620 +f 217/614 226/395 386/621 +f 85/174 86/622 77/175 +f 86/177 87/179 78/178 +f 87/179 88/201 79/180 +f 88/182 89/623 80/183 +f 81/624 80/184 90/186 +f 82/190 81/187 91/189 +f 83/192 82/190 92/191 +f 84/625 83/192 93/193 +f 84/195 93/210 85/196 +f 94/197 95/255 86/198 +f 95/199 96/200 87/179 +f 96/200 97/258 88/201 +f 97/203 98/204 89/185 +f 80/183 81/626 117/251 +f 91/627 90/186 100/206 +f 92/191 91/189 101/208 +f 93/193 92/191 102/209 +f 85/196 93/210 94/197 +f 125/628 126/212 104/214 +f 123/218 125/215 105/217 +f 124/220 123/218 106/219 +f 121/629 124/220 107/221 +f 122/630 121/222 108/224 +f 108/226 109/228 129/227 +f 109/228 110/230 127/229 +f 110/230 111/248 128/231 +f 111/233 103/213 126/212 +f 104/631 103/234 113/236 +f 105/217 104/216 114/238 +f 106/219 105/217 115/239 +f 107/243 106/240 116/242 +f 117/245 118/246 109/228 +f 118/246 119/247 110/230 +f 119/247 120/252 111/248 +f 120/250 112/235 103/234 +f 113/236 112/235 77/175 +f 114/238 113/237 78/178 +f 115/239 114/238 79/180 +f 116/242 115/241 80/183 +f 278/476 279/497 270/477 +f 81/187 82/190 118/246 +f 82/190 83/192 119/247 +f 83/192 84/625 120/252 +f 84/253 76/173 112/235 +f 138/254 135/632 95/255 +f 135/256 132/257 96/200 +f 132/257 133/633 97/258 +f 133/259 134/260 98/204 +f 99/205 98/204 131/261 +f 100/206 99/205 130/262 +f 101/208 100/207 137/264 +f 102/209 101/208 136/265 +f 94/197 102/211 138/254 +f 148/268 149/634 140/269 +f 149/271 150/273 141/272 +f 150/273 151/295 142/274 +f 151/276 152/635 143/277 +f 144/636 143/278 153/280 +f 145/637 144/281 154/283 +f 181/284 334/284 332/284 +f 147/638 146/285 156/287 +f 147/289 156/303 148/290 +f 157/291 158/347 149/292 +f 158/293 159/294 150/273 +f 159/294 160/350 151/295 +f 160/297 161/298 152/279 +f 116/242 117/251 108/244 +f 154/639 153/280 163/300 +f 154/284 336/284 337/284 +f 156/287 155/286 165/302 +f 148/290 156/303 157/291 +f 188/640 189/305 167/307 +f 186/311 188/308 168/310 +f 187/313 186/311 169/312 +f 184/641 187/313 170/314 +f 185/642 184/315 171/317 +f 171/319 172/321 192/320 +f 172/321 173/323 190/322 +f 173/323 174/340 191/324 +f 174/326 166/306 189/305 +f 167/643 166/327 176/329 +f 168/310 167/309 177/331 +f 169/312 168/310 178/332 +f 170/336 169/333 179/335 +f 171/644 170/336 180/337 +f 180/338 181/343 172/321 +f 154/284 330/284 328/284 +f 182/339 183/344 174/340 +f 183/342 175/328 166/327 +f 176/329 175/328 140/269 +f 177/331 176/330 141/272 +f 178/332 177/331 142/274 +f 179/335 178/334 143/277 +f 98/204 99/205 90/186 +f 144/281 145/637 181/343 +f 155/284 331/284 330/284 +f 146/285 147/638 183/344 +f 147/345 139/267 175/328 +f 201/346 198/645 158/347 +f 198/348 195/349 159/294 +f 195/349 196/646 160/350 +f 196/351 197/352 161/298 +f 162/299 161/298 194/353 +f 163/300 162/299 193/354 +f 164/301 163/355 200/357 +f 165/302 164/301 199/358 +f 157/291 165/304 201/346 +f 211/361 212/647 203/362 +f 212/364 213/366 204/365 +f 213/366 214/390 205/367 +f 214/369 215/648 206/370 +f 207/649 206/371 216/373 +f 208/650 207/374 217/376 +f 227/378 389/524 388/379 +f 210/651 209/380 219/382 +f 210/384 219/401 211/385 +f 220/386 221/451 212/387 +f 221/388 222/389 213/366 +f 222/389 223/454 214/390 +f 223/392 224/393 215/372 +f 216/373 215/372 225/394 +f 217/614 216/373 226/395 +f 387/612 218/396 385/398 +f 219/382 218/381 228/400 +f 211/385 219/401 220/386 +f 251/652 252/403 230/405 +f 249/409 251/406 231/408 +f 250/411 249/409 232/410 +f 247/653 250/411 233/412 +f 248/654 247/413 234/415 +f 234/417 235/419 255/418 +f 235/419 236/421 253/420 +f 236/421 237/441 254/422 +f 237/424 229/404 252/403 +f 230/655 229/425 239/427 +f 231/408 230/407 240/429 +f 232/410 231/408 241/430 +f 233/434 232/431 242/433 +f 234/656 233/434 243/435 +f 243/436 244/445 235/419 +f 392/447 244/437 384/439 +f 245/440 246/448 237/441 +f 246/443 238/426 229/425 +f 239/427 238/426 203/362 +f 240/429 239/428 204/365 +f 241/430 240/429 205/367 +f 242/433 241/432 206/370 +f 243/435 242/433 207/444 +f 207/374 208/650 244/445 +f 390/657 235/446 392/447 +f 209/380 210/651 246/448 +f 210/449 202/360 238/426 +f 264/450 261/658 221/451 +f 261/452 258/453 222/389 +f 258/453 259/659 223/454 +f 259/455 260/456 224/393 +f 225/394 224/393 257/457 +f 226/395 225/394 256/458 +f 227/399 226/459 263/461 +f 228/400 227/399 262/462 +f 220/386 228/402 264/450 +f 274/465 275/660 266/466 +f 275/468 276/470 267/469 +f 276/470 277/492 268/471 +f 277/473 278/661 269/474 +f 269/474 270/662 306/536 +f 271/481 270/478 280/480 +f 272/483 271/481 281/482 +f 273/663 272/483 282/484 +f 273/486 282/502 274/487 +f 283/488 284/546 275/489 +f 284/490 285/491 276/470 +f 285/491 286/549 277/492 +f 286/494 287/495 278/476 +f 279/497 278/476 288/496 +f 280/664 279/497 289/498 +f 281/482 280/480 290/500 +f 282/484 281/482 291/501 +f 274/487 282/502 283/488 +f 314/665 315/504 293/506 +f 312/510 314/507 294/509 +f 313/512 312/510 295/511 +f 310/666 313/512 296/513 +f 311/667 310/514 297/516 +f 297/518 298/520 318/519 +f 298/520 299/522 316/521 +f 299/522 300/540 317/523 +f 300/525 292/505 315/504 +f 293/668 292/526 302/528 +f 294/509 293/508 303/530 +f 295/511 294/509 304/531 +f 296/535 295/532 305/534 +f 297/669 296/535 306/536 +f 306/537 307/538 298/520 +f 307/538 308/539 299/522 +f 308/539 309/543 300/540 +f 309/542 301/527 292/526 +f 302/528 301/527 266/466 +f 303/530 302/529 267/469 +f 304/531 303/530 268/471 +f 305/534 304/533 269/474 +f 161/298 162/299 153/280 +f 270/478 271/481 307/538 +f 271/481 272/483 308/539 +f 272/483 273/663 309/543 +f 273/544 265/464 301/527 +f 327/545 324/670 284/546 +f 324/547 321/548 285/491 +f 321/548 322/671 286/549 +f 322/550 323/551 287/495 +f 288/496 287/495 320/552 +f 289/498 288/496 319/553 +f 290/500 289/499 326/555 +f 291/501 290/500 325/556 +f 283/488 291/503 327/545 +f 329/284 341/284 343/284 +f 164/284 339/284 338/284 +f 333/284 345/284 347/284 +f 172/284 332/284 333/284 +f 145/284 328/284 334/284 +f 182/284 335/284 329/284 +f 173/284 333/284 335/284 +f 146/284 329/284 331/284 +f 338/284 350/284 348/284 +f 344/284 356/284 357/284 +f 343/284 355/284 354/284 +f 340/284 352/284 358/284 +f 155/284 337/284 339/284 +f 330/284 342/284 340/284 +f 334/284 346/284 344/284 +f 335/284 347/284 341/284 +f 328/284 340/284 346/284 +f 331/284 343/284 342/284 +f 163/284 338/284 336/284 +f 332/284 344/284 345/284 +f 357/284 369/284 371/284 +f 350/284 362/284 360/284 +f 356/284 368/284 369/284 +f 355/284 367/284 366/284 +f 345/284 357/284 359/284 +f 339/284 351/284 350/284 +f 341/284 353/284 355/284 +f 337/284 349/284 351/284 +f 342/284 354/284 352/284 +f 336/284 348/284 349/284 +f 346/284 358/284 356/284 +f 347/284 359/284 353/284 +f 375/672 363/558 373/560 +f 379/673 367/561 377/563 +f 363/565 375/674 374/566 +f 369/568 381/675 383/569 +f 351/284 363/284 362/284 +f 353/284 365/284 367/284 +f 349/284 361/284 363/284 +f 354/284 366/284 364/284 +f 348/284 360/284 361/284 +f 358/284 370/284 368/284 +f 359/284 371/284 365/284 +f 352/284 364/284 370/284 +f 373/325 372/570 375/572 +f 377/676 376/573 379/575 +f 382/577 383/579 381/578 +f 376/573 377/676 383/579 +f 366/581 378/592 376/582 +f 373/677 361/583 372/585 +f 380/678 368/586 382/588 +f 371/567 383/569 377/590 +f 382/588 370/587 376/582 +f 367/591 379/679 378/592 +f 381/680 369/593 380/595 +f 362/597 374/681 372/598 +f 385/682 384/599 387/601 +f 387/601 386/600 389/603 +f 392/605 393/607 391/606 +f 384/599 385/682 393/607 +f 391/674 236/608 390/610 +f 389/683 227/611 387/612 +f 217/614 386/621 384/615 +f 236/617 391/684 393/618 +f 245/616 393/618 385/620 +f 226/395 388/685 386/621 +f 143/277 144/686 180/337 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.mtl new file mode 100644 index 00000000..20d97e80 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.mtl @@ -0,0 +1,50 @@ +# Blender MTL File: 'None' +# Material Count: 8 + +newmtl Material.001 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.002 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.004 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.005 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.006 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.007 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.008 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple + +newmtl Material.009 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/grapple diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.obj new file mode 100644 index 00000000..00db6d49 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/grapple.obj @@ -0,0 +1,348 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib grapple.mtl +o Grapple +v -0.914415 -0.027964 -0.247289 +v -0.953962 -0.027964 -0.286836 +v -0.692003 -0.027964 -0.548794 +v -0.652457 -0.027964 -0.509247 +v -0.914415 0.027964 -0.247289 +v -0.652457 0.027964 -0.509247 +v -0.692003 0.027964 -0.548794 +v -0.953962 0.027964 -0.286836 +v -0.635469 -0.031115 -0.027889 +v -0.679472 -0.031115 0.016115 +v -0.970949 -0.031115 -0.275363 +v -0.926946 -0.031115 -0.319366 +v -0.635469 0.031115 -0.027889 +v -0.926946 0.031115 -0.319366 +v -0.970949 0.031115 -0.275363 +v -0.679472 0.031115 0.016114 +v -0.255923 -0.032332 -0.032332 +v -0.255923 -0.032332 0.032332 +v -0.684261 -0.032332 0.032332 +v -0.684261 -0.032332 -0.032332 +v -0.255922 0.032332 -0.032332 +v -0.684261 0.032332 -0.032332 +v -0.684261 0.032332 0.032332 +v -0.255923 0.032332 0.032332 +v 0.394779 -0.059349 -0.059349 +v 0.394779 -0.059349 0.059349 +v -0.394779 -0.059349 0.059350 +v -0.394779 -0.059349 -0.059349 +v 0.394779 0.059349 -0.059349 +v -0.394779 0.059349 -0.059349 +v -0.394779 0.059349 0.059349 +v 0.394778 0.059349 0.059349 +v -0.914415 0.228140 0.099427 +v -0.953962 0.262389 0.119200 +v -0.692004 0.489251 0.250180 +v -0.652457 0.455003 0.230406 +v -0.914415 0.200176 0.147862 +v -0.652457 0.427039 0.278841 +v -0.692003 0.461288 0.298615 +v -0.953962 0.234425 0.167636 +v -0.635469 0.039710 -0.013002 +v -0.679472 0.001602 -0.035004 +v -0.970949 0.254029 0.110735 +v -0.926946 0.292137 0.132737 +v -0.635469 0.008595 0.040891 +v -0.926946 0.261022 0.186629 +v -0.970950 0.222914 0.164628 +v -0.679472 -0.029513 0.018889 +v -0.914415 -0.200176 0.147862 +v -0.953962 -0.234425 0.167635 +v -0.692004 -0.461287 0.298615 +v -0.652457 -0.427038 0.278841 +v -0.914415 -0.228140 0.099427 +v -0.652457 -0.455002 0.230406 +v -0.692004 -0.489251 0.250180 +v -0.953962 -0.262389 0.119200 +v -0.635469 -0.008595 0.040891 +v -0.679472 0.029513 0.018889 +v -0.970950 -0.222913 0.164628 +v -0.926946 -0.261021 0.186629 +v -0.635469 -0.039710 -0.013002 +v -0.926946 -0.292136 0.132737 +v -0.970950 -0.254028 0.110735 +v -0.679473 -0.001602 -0.035003 +vt 0.963922 0.024757 +vt 0.963922 0.764305 +vt 0.895453 0.764305 +vt 0.888894 0.785151 +vt 0.966575 0.785150 +vt 0.966575 0.031255 +vt 0.296930 0.671390 +vt 0.296930 0.773939 +vt 0.153041 0.773939 +vt 0.146940 0.003051 +vt 0.146940 0.682460 +vt 0.003051 0.682460 +vt 0.146940 0.783728 +vt 0.003051 0.783728 +vt 0.153041 0.671390 +vt 0.153041 0.003051 +vt 0.296930 0.003051 +vt 0.895453 0.024757 +vt 0.888894 0.031256 +vt 0.003051 0.003051 +vt 0.660141 0.003051 +vt 0.702629 0.016730 +vt 0.702629 0.450073 +vt 0.499943 0.448737 +vt 0.456925 0.461681 +vt 0.456925 0.026590 +vt 0.447557 0.003051 +vt 0.499943 0.013646 +vt 0.404538 0.451086 +vt 0.649876 0.460900 +vt 0.607388 0.447221 +vt 0.660141 0.436394 +vt 0.404538 0.015994 +vt 0.607388 0.013878 +vt 0.102456 0.790184 +vt 0.607289 0.790184 +vt 0.607288 0.857272 +vt 0.629153 0.789830 +vt 0.629153 0.857626 +vt 0.176438 0.857626 +vt 0.776527 0.822200 +vt 0.776527 0.889969 +vt 0.708731 0.889969 +vt 0.031828 0.795543 +vt 0.494236 0.795543 +vt 0.494236 0.863340 +vt 0.070693 0.863728 +vt 0.070693 0.931525 +vt 0.003051 0.931525 +vt 0.717416 0.789342 +vt 0.717416 0.857139 +vt 0.230036 0.857139 +vt 0.102456 0.857272 +vt 0.176438 0.789830 +vt 0.708731 0.822200 +vt 0.031828 0.863340 +vt 0.003051 0.863728 +vt 0.230036 0.789342 +vt 0.355419 0.438142 +vt 0.355418 0.003051 +vt 0.398437 0.015995 +vt 0.558798 0.027556 +vt 0.601286 0.013878 +vt 0.601286 0.447221 +vt 0.346050 0.461681 +vt 0.303032 0.448737 +vt 0.303032 0.013646 +vt 0.506045 0.016730 +vt 0.506045 0.450073 +vt 0.398437 0.451086 +vt 0.558798 0.460900 +vt 0.548533 0.003051 +vt 0.614180 0.270636 +vt 0.614180 0.741766 +vt 0.553241 0.741766 +vt 0.544473 0.283992 +vt 0.610546 0.283992 +vt 0.610546 0.706706 +vt 0.137366 0.976023 +vt 0.081499 0.976023 +vt 0.081499 0.897636 +vt 0.499943 0.467783 +vt 0.499943 0.836366 +vt 0.421556 0.836365 +vt 0.499943 0.891534 +vt 0.421556 0.891534 +vt 0.137366 0.897636 +vt 0.499943 0.897636 +vt 0.499943 0.976023 +vt 0.553241 0.270636 +vt 0.544473 0.706706 +vt 0.421556 0.467783 +vt 0.738186 0.487114 +vt 0.807476 0.464807 +vt 0.807476 0.793790 +vt 0.401102 0.799792 +vt 0.331116 0.798887 +vt 0.331116 0.467783 +vt 0.708731 0.434933 +vt 0.778021 0.412625 +vt 0.617777 0.263736 +vt 0.617777 0.736264 +vt 0.540343 0.736264 +vt 0.303032 0.851308 +vt 0.401102 0.819945 +vt 0.553283 0.320649 +vt 0.553283 0.679351 +vt 0.446717 0.679351 +vt 0.738186 0.816098 +vt 0.401102 0.468688 +vt 0.540343 0.263736 +vt 0.373018 0.872366 +vt 0.446717 0.320649 +vt 0.664688 0.595752 +vt 0.588354 0.595752 +vt 0.588354 0.096063 +vt 0.658742 0.715117 +vt 0.595175 0.715117 +vt 0.595175 0.215428 +vt 0.847616 0.508641 +vt 0.847616 0.584077 +vt 0.836227 0.584077 +vt 0.889014 0.003051 +vt 0.889014 0.502539 +vt 0.813578 0.502539 +vt 0.772072 0.673366 +vt 0.700945 0.673366 +vt 0.700945 0.597929 +vt 0.627193 0.965551 +vt 0.627193 0.467002 +vt 0.702629 0.467002 +vt 0.664688 0.096063 +vt 0.658742 0.215428 +vt 0.836227 0.508640 +vt 0.813578 0.003051 +vt 0.772072 0.597929 +vt 0.702629 0.965551 +vt 0.576031 0.467002 +vt 0.576031 0.798106 +vt 0.506045 0.819164 +vt 0.778021 0.406524 +vt 0.708731 0.384216 +vt 0.708731 0.055233 +vt 0.778021 0.077540 +vt 0.738186 0.003051 +vt 0.604115 0.850527 +vt 0.534129 0.871585 +vt 0.807476 0.025358 +vt 0.807476 0.354342 +vt 0.506045 0.488060 +vn -0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.500000 -0.866000 +vn 0.000000 -0.500000 0.866000 +vn -0.707100 -0.612400 -0.353600 +vn -0.707100 0.612400 0.353600 +vn 0.707100 0.612400 0.353500 +vn 0.707100 -0.612400 -0.353600 +vn -0.707100 -0.612400 -0.353500 +vn -0.707100 0.612400 0.353500 +vn 0.707100 0.612400 0.353600 +vn -0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 0.707100 +vn 0.000000 0.500000 0.866000 +vn -0.000000 -0.500000 -0.866000 +vn -0.707100 0.612400 -0.353600 +vn -0.707100 -0.612400 0.353600 +vn 0.707100 -0.612400 0.353600 +vn 0.707100 0.612400 -0.353600 +vn -0.707100 0.612400 -0.353500 +usemtl Material.001 +f 26/1/1 27/2/1 28/3/1 +f 30/4/2 31/5/2 32/6/2 +f 29/7/3 32/8/3 26/9/3 +f 32/10/4 31/11/4 27/12/4 +f 31/11/5 30/13/5 28/14/5 +f 25/15/6 28/16/6 30/17/6 +f 25/18/1 26/1/1 28/3/1 +f 29/19/2 30/4/2 32/6/2 +f 25/15/3 29/7/3 26/9/3 +f 26/20/4 32/10/4 27/12/4 +f 27/12/5 31/11/5 28/14/5 +f 29/7/6 25/15/6 30/17/6 +usemtl Material.006 +f 33/21/7 34/22/7 35/23/7 +f 38/24/8 39/25/8 40/26/8 +f 33/27/9 37/28/9 40/26/9 +f 40/26/10 39/25/10 35/29/10 +f 35/23/11 39/30/11 38/31/11 +f 33/21/12 36/32/12 38/31/12 +f 36/32/7 33/21/7 35/23/7 +f 37/28/8 38/24/8 40/26/8 +f 34/33/13 33/27/13 40/26/13 +f 34/33/14 40/26/14 35/29/14 +f 36/32/15 35/23/15 38/31/15 +f 37/34/12 33/21/12 38/31/12 +usemtl Material.004 +f 2/35/1 3/36/1 4/37/1 +f 6/38/2 7/39/2 8/40/2 +f 5/41/16 8/42/16 2/43/16 +f 8/44/17 7/45/17 3/46/17 +f 3/47/18 7/48/18 6/49/18 +f 5/50/19 1/51/19 4/52/19 +f 1/53/1 2/35/1 4/37/1 +f 5/54/2 6/38/2 8/40/2 +f 1/55/16 5/41/16 2/43/16 +f 2/56/17 8/44/17 3/46/17 +f 4/57/18 3/47/18 6/49/18 +f 6/58/19 5/50/19 4/52/19 +usemtl Material.008 +f 50/59/20 51/60/20 52/61/20 +f 54/62/21 55/63/21 56/64/21 +f 53/65/22 56/66/22 50/59/22 +f 50/59/23 56/66/23 55/67/23 +f 55/63/24 54/62/24 52/68/24 +f 49/69/25 52/68/25 54/62/25 +f 49/70/20 50/59/20 52/61/20 +f 53/71/21 54/62/21 56/64/21 +f 49/70/22 53/65/22 50/59/22 +f 51/60/23 50/59/23 55/67/23 +f 51/72/24 55/63/24 52/68/24 +f 53/71/25 49/69/25 54/62/25 +usemtl Material.002 +f 18/73/1 19/74/1 20/75/1 +f 22/76/2 23/77/2 24/78/2 +f 21/79/3 24/80/3 18/81/3 +f 24/82/4 23/83/4 19/84/4 +f 23/83/5 22/85/5 20/86/5 +f 17/87/6 20/88/6 22/89/6 +f 17/90/1 18/73/1 20/75/1 +f 21/91/2 22/76/2 24/78/2 +f 17/87/3 21/79/3 18/81/3 +f 18/92/4 24/82/4 19/84/4 +f 19/84/5 23/83/5 20/86/5 +f 21/79/6 17/87/6 22/89/6 +usemtl Material.007 +f 41/93/7 42/94/7 43/95/7 +f 46/96/8 47/97/8 48/98/8 +f 41/93/12 45/99/12 48/100/12 +f 48/101/9 47/102/9 43/103/9 +f 43/104/14 47/97/14 46/105/14 +f 41/106/15 44/107/15 46/108/15 +f 44/109/7 41/93/7 43/95/7 +f 45/110/8 46/96/8 48/98/8 +f 42/94/12 41/93/12 48/100/12 +f 42/111/9 48/101/9 43/103/9 +f 44/112/10 43/104/10 46/105/10 +f 45/113/15 41/106/15 46/108/15 +usemtl Material.005 +f 9/114/1 10/115/1 11/116/1 +f 14/117/2 15/118/2 16/119/2 +f 9/120/19 13/121/19 16/122/19 +f 16/123/16 15/124/16 11/125/16 +f 15/126/17 14/127/17 12/128/17 +f 9/129/18 12/130/18 14/131/18 +f 12/132/1 9/114/1 11/116/1 +f 13/133/2 14/117/2 16/119/2 +f 10/134/19 9/120/19 16/122/19 +f 10/135/16 16/123/16 11/125/16 +f 11/136/17 15/126/17 12/128/17 +f 13/137/18 9/129/18 14/131/18 +usemtl Material.009 +f 58/138/20 59/139/20 60/140/20 +f 62/141/21 63/142/21 64/143/21 +f 61/144/25 64/143/25 58/145/25 +f 64/101/22 63/102/22 59/103/22 +f 63/146/23 62/147/23 60/140/23 +f 61/144/24 57/148/24 60/149/24 +f 57/150/20 58/138/20 60/140/20 +f 61/144/21 62/141/21 64/143/21 +f 57/148/25 61/144/25 58/145/25 +f 58/111/26 64/101/26 59/103/26 +f 59/139/23 63/146/23 60/140/23 +f 62/141/24 61/144/24 60/149/24 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_deco.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_deco.json new file mode 100644 index 00000000..07b1b067 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_deco.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/asteroid_deco_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_1.json new file mode 100644 index 00000000..6302a22b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/asteroid_rock_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_2.json new file mode 100644 index 00000000..9cb7dee8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroid_rock_2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/asteroid_rock_2_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroids_block.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroids_block.json new file mode 100644 index 00000000..aa2e8b4c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/asteroids_block.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/asteroid_rock_0_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/astro_miner.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/astro_miner.json new file mode 100644 index 00000000..7cc3d75d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/astro_miner.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/atmospheric_valve" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atmospheric_valve.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atmospheric_valve.json new file mode 100644 index 00000000..7cc3d75d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atmospheric_valve.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/atmospheric_valve" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atomic_battery.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atomic_battery.json new file mode 100644 index 00000000..e85362ea --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/atomic_battery.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/atomic_battery" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_core.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_core.json new file mode 100644 index 00000000..0b41b7b5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_core.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/beam_core" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_receiver.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_receiver.json new file mode 100644 index 00000000..61f55f0e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_receiver.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/beam_receiver" + }, + "display": { + "thirdperson": { + "rotation": [ 90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, 45, 115 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_reflector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_reflector.json new file mode 100644 index 00000000..f17e7d4e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/beam_reflector.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/beam_reflector" + }, + "display": { + "thirdperson": { + "rotation": [ 90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, 45, 115 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_mars.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_mars.json new file mode 100644 index 00000000..fd436d43 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_venus.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_venus.json new file mode 100644 index 00000000..945da850 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/boss_spawner_venus.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_venus_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sludge.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sludge.json new file mode 100644 index 00000000..fa1bb672 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sludge.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/bucket_sludge" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sulphuric_acid.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sulphuric_acid.json new file mode 100644 index 00000000..e5564405 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/bucket_sulphuric_acid.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/bucket_sulphuric_acid" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2.json new file mode 100644 index 00000000..4380e9c9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_1.json new file mode 100644 index 00000000..b0e67a9c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_2.json new file mode 100644 index 00000000..c2348f3e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_3.json new file mode 100644 index 00000000..5f9a7651 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_4.json new file mode 100644 index 00000000..89714456 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_5.json new file mode 100644 index 00000000..9b010ab7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_6.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_6.json new file mode 100644 index 00000000..c6896d53 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_ln2_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_ln2_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox.json new file mode 100644 index 00000000..b7061107 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_1.json new file mode 100644 index 00000000..061787e2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_2.json new file mode 100644 index 00000000..a34c8a09 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_3.json new file mode 100644 index 00000000..e9f3b649 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_4.json new file mode 100644 index 00000000..a8dc6bcf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_5.json new file mode 100644 index 00000000..7ed5f960 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_6.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_6.json new file mode 100644 index 00000000..4a669458 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/canister_partial_lox_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/canister_partial_lox_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/carbon_fragments.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/carbon_fragments.json new file mode 100644 index 00000000..cfa1ba59 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/carbon_fragments.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/carbon_fragments" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cobblestone.json new file mode 100644 index 00000000..0393cd32 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cobblestone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/cobblestone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_desh.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_desh.json new file mode 100644 index 00000000..766b8e42 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_desh.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/compressed_desh" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_titanium.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_titanium.json new file mode 100644 index 00000000..0934868a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/compressed_titanium.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/compressed_titanium" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/crashed_probe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/crashed_probe.json new file mode 100644 index 00000000..c2c97bbb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/crashed_probe.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/crashed_probe", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/creeper_egg.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/creeper_egg.json new file mode 100644 index 00000000..6490bc37 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/creeper_egg.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftplanets:block/creeper_egg" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cryogenic_chamber.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cryogenic_chamber.json new file mode 100644 index 00000000..260e85b5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/cryogenic_chamber.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/cryo_0", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dense_ice.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dense_ice.json new file mode 100644 index 00000000..6735183c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dense_ice.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dense_ice", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/deshBlock.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/deshBlock.json new file mode 100644 index 00000000..07a30a41 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/deshBlock.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/desh_block_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_axe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_axe.json new file mode 100644 index 00000000..d183b47b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_axe" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_block.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_block.json new file mode 100644 index 00000000..07a30a41 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_block.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/desh_block_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_boots.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_boots.json new file mode 100644 index 00000000..fc41fd3f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_boots.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_chestplate.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_chestplate.json new file mode 100644 index 00000000..7ad8a7ba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_chestplate.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_chestplate" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_helmet.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_helmet.json new file mode 100644 index 00000000..65da914e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_helmet.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_helmet" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_hoe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_hoe.json new file mode 100644 index 00000000..695f5a57 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_hoe" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_leggings.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_leggings.json new file mode 100644 index 00000000..401e6550 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_leggings.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_leggings" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick.json new file mode 100644 index 00000000..02d97632 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_pick" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick_slime.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick_slime.json new file mode 100644 index 00000000..d3cc87a3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_pick_slime.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_pick_slime" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_spade.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_spade.json new file mode 100644 index 00000000..180f555a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_spade.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_spade" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_stick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_stick.json new file mode 100644 index 00000000..d4ebd3e8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_stick.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/desh_stick" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_sword.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_sword.json new file mode 100644 index 00000000..1cc57e3d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/desh_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/desh_sword" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick.json new file mode 100644 index 00000000..fd436d43 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_1.json new file mode 100644 index 00000000..945da850 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_venus_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_2.json new file mode 100644 index 00000000..fcb8d210 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dungeon_brick_venus_2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/dungeon_brick_venus_2_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dust_titanium.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dust_titanium.json new file mode 100644 index 00000000..80a47ba9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/dust_titanium.json @@ -0,0 +1,7 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "galacticraftplanets:items/dust_titanium" + }, + "display": {} +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/electrolyzer.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/electrolyzer.json new file mode 100644 index 00000000..03672c51 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/electrolyzer.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/electrolyzer_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/engine_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/engine_t2.json new file mode 100644 index 00000000..8fe2ee03 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/engine_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/engine_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/fluid_manip.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/fluid_manip.json new file mode 100644 index 00000000..2d3c1608 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/fluid_manip.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/fluid_manip" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/gas_liquefier.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/gas_liquefier.json new file mode 100644 index 00000000..d9a705b4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/gas_liquefier.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/gas_liquefier_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/geothermal_generator.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/geothermal_generator.json new file mode 100644 index 00000000..5203c89d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/geothermal_generator.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/geothermal_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/grapple.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/grapple.json new file mode 100644 index 00000000..7266fa71 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/grapple.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/grapple" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/heavy_nose_cone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/heavy_nose_cone.json new file mode 100644 index 00000000..f11f4af4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/heavy_nose_cone.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/heavy_nose_cone_joined" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_desh.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_desh.json new file mode 100644 index 00000000..51997564 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_desh.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/ingot_desh" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_lead.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_lead.json new file mode 100644 index 00000000..94930b8b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_lead.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/ingot_lead" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_titanium.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_titanium.json new file mode 100644 index 00000000..8291c3ab --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ingot_titanium.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/ingot_titanium" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/item_basic_asteroids.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/item_basic_asteroids.json new file mode 100644 index 00000000..3d6ad211 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/item_basic_asteroids.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/reinforced_plate_t3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key.json new file mode 100644 index 00000000..1d818640 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key.json @@ -0,0 +1,104 @@ +{ + "textures": { + "key": "galacticraftplanets:items/key_t2" + }, + "elements": [ + { + "from": [ 0.0, 6.0, 7.5 ], + "to": [ 3.0, 9.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "west": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 2.0, 3.0, 3.0 ] } + } + }, + { + "from": [ 3.0, 6.5, 7.5 ], + "to": [ 4.0, 8.5, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "east": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "south": { "texture": "#key", "uv": [ 4.0, 6.0, 5.0, 8.0 ] }, + "west": { "texture": "#key", "uv": [ 9.0, 8.0, 8.0, 6.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] } + } + }, + { + "from": [ 4.0, 7.0, 7.5 ], + "to": [ 15.0, 8.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] }, + "down": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] } + } + }, + { + "from": [ 10.5, 6.0, 7.5 ], + "to": [ 14.5, 7.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] } + } + }, + { + "from": [ 11.5, 5.0, 7.5 ], + "to": [ 14.5, 6.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 1.0, 1.0, 1.0 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 0.75, 0.75, 0.75 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, -90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key_t3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key_t3.json new file mode 100644 index 00000000..9e3b7a84 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/key_t3.json @@ -0,0 +1,104 @@ +{ + "textures": { + "key": "galacticraftplanets:items/key_t3" + }, + "elements": [ + { + "from": [ 0.0, 6.0, 7.5 ], + "to": [ 3.0, 9.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "west": { "texture": "#key", "uv": [ 0.0, 6.0, 1.0, 9.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 2.0, 3.0, 3.0 ] } + } + }, + { + "from": [ 3.0, 6.5, 7.5 ], + "to": [ 4.0, 8.5, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "east": { "texture": "#key", "uv": [ 2.0, 6.0, 3.0, 8.0 ] }, + "south": { "texture": "#key", "uv": [ 4.0, 6.0, 5.0, 8.0 ] }, + "west": { "texture": "#key", "uv": [ 9.0, 8.0, 8.0, 6.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] } + } + }, + { + "from": [ 4.0, 7.0, 7.5 ], + "to": [ 15.0, 8.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 0.0, 6.0, 11.0, 7.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] }, + "down": { "texture": "#key", "uv": [ 5.0, 5.0, 16.0, 6.0 ] } + } + }, + { + "from": [ 10.5, 6.0, 7.5 ], + "to": [ 14.5, 7.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 12.0, 8.0, 16.0, 9.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] }, + "down": { "texture": "#key", "uv": [ 0.0, 8.0, 4.0, 9.0 ] } + } + }, + { + "from": [ 11.5, 5.0, 7.5 ], + "to": [ 14.5, 6.0, 8.5 ], + "faces": { + "north": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "east": { "texture": "#key", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, + "south": { "texture": "#key", "uv": [ 10.0, 5.0, 13.0, 6.0 ] }, + "west": { "texture": "#key", "uv": [ 2.0, 0.0, 3.0, 1.0 ] }, + "up": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] }, + "down": { "texture": "#key", "uv": [ 2.0, 7.0, 5.0, 8.0 ] } + } + } + ], + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 1.0, 1.0, 1.0 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.35, 0.35, 0.35 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0.5, 0], + "scale":[ 0.75, 0.75, 0.75 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, -90, 0 ], + "translation": [ 0, 2, 0.75], + "scale": [ 0.45, 0.45, 0.45 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, -90, 0 ], + "translation": [ 0, 3.75, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/laser_turret.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/laser_turret.json new file mode 100644 index 00000000..99712921 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/laser_turret.json @@ -0,0 +1,126 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "galacticraftplanets:blocks/laser", + "particle": "galacticraftplanets:blocks/laser" + }, + "elements": [ + { + "name": "baseCube", + "from": [0, -16, 0], + "to": [16, 0, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "faces": { + "north": {"uv": [4, 4, 8, 8], "texture": "#0"}, + "east": {"uv": [0, 4, 4, 8], "texture": "#0"}, + "south": {"uv": [12, 4, 16, 8], "texture": "#0"}, + "west": {"uv": [8, 4, 12, 8], "texture": "#0"}, + "up": {"uv": [8, 4, 4, 0], "texture": "#0"}, + "down": {"uv": [12, 0, 8, 4], "texture": "#0"} + } + }, + { + "name": "baseConnector0", + "from": [5, 0, 5], + "to": [11, 4, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [7, 12.5, 8.5, 13.5], "texture": "#0"}, + "east": {"uv": [5.5, 12.5, 7, 13.5], "texture": "#0"}, + "south": {"uv": [10, 12.5, 11.5, 13.5], "texture": "#0"}, + "west": {"uv": [8.5, 12.5, 10, 13.5], "texture": "#0"}, + "up": {"uv": [8.5, 12.5, 7, 11], "texture": "#0"}, + "down": {"uv": [10, 11, 8.5, 12.5], "texture": "#0"} + } + }, + { + "name": "baseConnector1", + "from": [6.5, 4, 6.5], + "to": [9.5, 8, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 8]}, + "faces": { + "north": {"uv": [0.75, 0.75, 1.5, 1.75], "texture": "#0"}, + "east": {"uv": [0, 0.75, 0.75, 1.75], "texture": "#0"}, + "south": {"uv": [2.25, 0.75, 3, 1.75], "texture": "#0"}, + "west": {"uv": [1.5, 0.75, 2.25, 1.75], "texture": "#0"}, + "up": {"uv": [1.5, 0.75, 0.75, 0], "texture": "#0"}, + "down": {"uv": [2.25, 0, 1.5, 0.75], "texture": "#0"} + } + }, + { + "name": "phalangeAxle", + "from": [6, 8, 3], + "to": [10, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [2.5, 10.5, 3.5, 11.25], "texture": "#0"}, + "east": {"uv": [0, 10.5, 2.5, 11.25], "texture": "#0"}, + "south": {"uv": [6, 10.5, 7, 11.25], "texture": "#0"}, + "west": {"uv": [3.5, 10.5, 6, 11.25], "texture": "#0"}, + "up": {"uv": [3.5, 10.5, 2.5, 8], "texture": "#0"}, + "down": {"uv": [4.5, 8, 3.5, 10.5], "texture": "#0"} + } + }, + { + "name": "turretLeft", + "from": [0, 11, 11], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [7.75, 10.25, 11.25, 11], "texture": "#0"}, + "east": {"uv": [7, 10.25, 7.75, 11], "texture": "#0"}, + "south": {"uv": [12, 10.25, 15.5, 11], "texture": "#0"}, + "west": {"uv": [11.25, 10.25, 12, 11], "texture": "#0"}, + "up": {"uv": [11.25, 10.25, 7.75, 9.5], "texture": "#0"}, + "down": {"uv": [14.75, 9.5, 11.25, 10.25], "texture": "#0"} + } + }, + { + "name": "turretRight", + "from": [0, 11, 2], + "to": [14, 14, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.5, 8]}, + "faces": { + "north": {"uv": [5.25, 8.75, 8.75, 9.5], "texture": "#0"}, + "east": {"uv": [4.5, 8.75, 5.25, 9.5], "texture": "#0"}, + "south": {"uv": [9.5, 8.75, 13, 9.5], "texture": "#0"}, + "west": {"uv": [8.75, 8.75, 9.5, 9.5], "texture": "#0"}, + "up": {"uv": [8.75, 8.75, 5.25, 8], "texture": "#0"}, + "down": {"uv": [12.25, 8, 8.75, 8.75], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0, 4.75, 0], + "scale": [0.42, 0.42, 0.42] + }, + "thirdperson_lefthand": { + "translation": [0, 4.75, 0], + "scale": [0.42, 0.42, 0.42] + }, + "firstperson_righthand": { + "rotation": [0, -100, 0] + }, + "firstperson_lefthand": { + "rotation": [0, 81, 0] + }, + "ground": { + "translation": [0, 5, 0], + "scale": [0.42, 0.42, 0.42] + }, + "gui": { + "rotation": [30, -135, 0], + "translation": [0, 3.5, 0], + "scale": [0.42, 0.42, 0.42] + }, + "head": { + "translation": [0, 16, 0] + }, + "fixed": { + "rotation": [0, -180, 0], + "translation": [0, 4.5, 0], + "scale": [0.42, 0.42, 0.42] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/launch_controller.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/launch_controller.json new file mode 100644 index 00000000..c1ebd108 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/launch_controller.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/launch_controller_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/lead_block.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/lead_block.json new file mode 100644 index 00000000..6c1a2089 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/lead_block.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/lead_block", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_middle.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_middle.json new file mode 100644 index 00000000..6d1440a4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_middle.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/mars_middle_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_brick.json new file mode 100644 index 00000000..e1db2318 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_brick.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftplanets:block/mars_brick_stairs" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_cobblestone.json new file mode 100644 index 00000000..658df0bc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stairs_cobblestone.json @@ -0,0 +1,3 @@ +{ + "parent":"galacticraftplanets:block/mars_cobblestone_stairs" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stone.json new file mode 100644 index 00000000..0ce8f695 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_stone.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/mars_stone_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_surface.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_surface.json new file mode 100644 index 00000000..044e5106 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/mars_surface.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/mars_surface_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial.json new file mode 100644 index 00000000..80397805 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_1.json new file mode 100644 index 00000000..90695fa6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_2.json new file mode 100644 index 00000000..77edf964 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_3.json new file mode 100644 index 00000000..6b2852c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_4.json new file mode 100644 index 00000000..7ff9e6b4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_4.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_4" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_5.json new file mode 100644 index 00000000..d0e7fbe8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_5.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_5" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_6.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_6.json new file mode 100644 index 00000000..f8ad1ec1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_canister_partial_6.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/methane_canister_partial_6" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_synthesizer.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_synthesizer.json new file mode 100644 index 00000000..f7b7e506 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/methane_synthesizer.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/methane_synthesizer_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base.json new file mode 100644 index 00000000..508215c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/miner_base", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base_full.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base_full.json new file mode 100644 index 00000000..508215c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/miner_base_full.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/miner_base", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_aluminum_asteroids.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_aluminum_asteroids.json new file mode 100644 index 00000000..71572a06 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_aluminum_asteroids.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_aluminum_asteroids_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_copper_mars.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_copper_mars.json new file mode 100644 index 00000000..3856544f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_copper_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_copper_mars_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_desh_mars.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_desh_mars.json new file mode 100644 index 00000000..bf89ccd3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_desh_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_desh_mars_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_ilmenite_asteroids.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_ilmenite_asteroids.json new file mode 100644 index 00000000..b7bf50aa --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_ilmenite_asteroids.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_ilmenite_asteroids_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_asteroids.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_asteroids.json new file mode 100644 index 00000000..97fffbac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_asteroids.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_iron_asteroids_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_mars.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_mars.json new file mode 100644 index 00000000..ba61c86f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_iron_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_iron_mars_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_tin_mars.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_tin_mars.json new file mode 100644 index 00000000..766a557a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/ore_tin_mars.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/ore_tin_mars_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/orion_drive.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/orion_drive.json new file mode 100644 index 00000000..d9ce3cee --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/orion_drive.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/orion_drive" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/radioisotope_core.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/radioisotope_core.json new file mode 100644 index 00000000..630577ab --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/radioisotope_core.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/radioisotope_core" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/raw_desh.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/raw_desh.json new file mode 100644 index 00000000..1bbc28b1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/raw_desh.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/raw_desh" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/reinforced_plate_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/reinforced_plate_t2.json new file mode 100644 index 00000000..14cdcb96 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/reinforced_plate_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/reinforced_plate_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_cargo.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_cargo.json new file mode 100644 index 00000000..cfa1ba59 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_cargo.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/carbon_fragments" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_fins_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_fins_t2.json new file mode 100644 index 00000000..a1091870 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_fins_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/rocket_fins_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t2.json new file mode 100644 index 00000000..00b32573 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t3.json new file mode 100644 index 00000000..00b32573 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/rocket_t3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_astro_miner.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_astro_miner.json new file mode 100644 index 00000000..bb877646 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_astro_miner.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/schematic_astro_miner" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_cargo.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_cargo.json new file mode 100644 index 00000000..2b44bd57 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_cargo.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/schematic_rocket_cargo" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_t3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_t3.json new file mode 100644 index 00000000..aeb56b4f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/schematic_rocket_t3.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/schematic_rocket_t3" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_iron.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_iron.json new file mode 100644 index 00000000..068febb5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_iron.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/shard_iron" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_titanium.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_titanium.json new file mode 100644 index 00000000..1588c3e4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shard_titanium.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/shard_titanium" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shield_controller.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shield_controller.json new file mode 100644 index 00000000..9e7410b8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/shield_controller.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/shield_controller" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_cargo.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_cargo.json new file mode 100644 index 00000000..5a5b7b40 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_cargo.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/slimeling_cargo" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_blue.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_blue.json new file mode 100644 index 00000000..90a8a89f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_blue.json @@ -0,0 +1,25 @@ +{ + "parent":"galacticraftplanets:block/slimeling_egg_blue", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0.00, 4.00, -0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ -180, -45, -180 ], + "translation": [ 0.00, 4.00, 0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_red.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_red.json new file mode 100644 index 00000000..8719abfb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_red.json @@ -0,0 +1,25 @@ +{ + "parent":"galacticraftplanets:block/slimeling_egg_red", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0.00, 4.00, -0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ -180, -45, -180 ], + "translation": [ 0.00, 4.00, 0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_yellow.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_yellow.json new file mode 100644 index 00000000..d94d1bd9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/slimeling_egg_yellow.json @@ -0,0 +1,25 @@ +{ + "parent":"galacticraftplanets:block/slimeling_egg_yellow", + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0.00, 1.25, 1.00 ], + "scale": [ 0.37, 0.37, 0.37 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0.00, 4.00, -0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ -180, -45, -180 ], + "translation": [ 0.00, 4.00, 0.00 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_controller.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_controller.json new file mode 100644 index 00000000..3aef8f00 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_controller.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/solar_array_controller", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_module.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_module.json new file mode 100644 index 00000000..27db9665 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_array_module.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/solar_array_module", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_dust.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_dust.json new file mode 100644 index 00000000..1361f5c7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_dust.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/solar_dust" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_module_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_module_2.json new file mode 100644 index 00000000..07535d74 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/solar_module_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/solar_module_2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/spout.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/spout.json new file mode 100644 index 00000000..2dc83d9c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/spout.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/spout", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed.json new file mode 100644 index 00000000..7bc47eee --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/strange_seed1" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed1.json new file mode 100644 index 00000000..296fefa5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/strange_seed1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/strange_seed0" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/telepad_short.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/telepad_short.json new file mode 100644 index 00000000..ebc76c92 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/telepad_short.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/telepad_short" + }, + "display": { + "thirdperson": { + "rotation": [ 90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, 45, 115 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/terraformer.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/terraformer.json new file mode 100644 index 00000000..0fc63be2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/terraformer.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/terraformer_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots.json new file mode 100644 index 00000000..00b32573 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots_t2.json new file mode 100644 index 00000000..09f51289 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_boots_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_boots_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate.json new file mode 100644 index 00000000..3e3d7c5c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_chestplate" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate_t2.json new file mode 100644 index 00000000..2d0e2794 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_chestplate_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_chestplate_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth.json new file mode 100644 index 00000000..6fa2e62a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_cloth" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth_t2.json new file mode 100644 index 00000000..0aba44dc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_cloth_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_cloth_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_fabric.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_fabric.json new file mode 100644 index 00000000..7a407d99 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_fabric.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_fabric" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_helm_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_helm_t2.json new file mode 100644 index 00000000..c2b29214 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_helm_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_helm_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings.json new file mode 100644 index 00000000..3c97ccb5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_leggings" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings_t2.json new file mode 100644 index 00000000..9403a37b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_leggings_t2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_leggings_t2" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_padding.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_padding.json new file mode 100644 index 00000000..eae42971 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thermal_padding.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thermal_helm" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thin_solar_wafer.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thin_solar_wafer.json new file mode 100644 index 00000000..1c5431c0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/thin_solar_wafer.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/thin_solar_wafer" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_axe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_axe.json new file mode 100644 index 00000000..b02e1880 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_axe" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_block.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_block.json new file mode 100644 index 00000000..24401b53 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_block.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/titanium_block_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_boots.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_boots.json new file mode 100644 index 00000000..db2784cf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_boots.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/titanium_boots" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_chestplate.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_chestplate.json new file mode 100644 index 00000000..b3de064d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_chestplate.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/titanium_chestplate" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_helmet.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_helmet.json new file mode 100644 index 00000000..b9bd54fd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_helmet.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/titanium_helmet" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_hoe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_hoe.json new file mode 100644 index 00000000..a9339aeb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_hoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_hoe" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_leggings.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_leggings.json new file mode 100644 index 00000000..d51aef72 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_leggings.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:items/titanium_leggings" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_pickaxe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_pickaxe.json new file mode 100644 index 00000000..8658e7af --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_pickaxe" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_shovel.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_shovel.json new file mode 100644 index 00000000..5afce82c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_shovel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_shovel" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_sword.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_sword.json new file mode 100644 index 00000000..595f0dd1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/titanium_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/titanium_sword" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t2.json new file mode 100644 index 00000000..3235c6a9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/treasure_t2", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t3.json new file mode 100644 index 00000000..cd072d3f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/treasure_t3.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/treasure_t3", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_aluminum.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_aluminum.json new file mode 100644 index 00000000..fc1e2dbf --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_aluminum.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_aluminum", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_copper.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_copper.json new file mode 100644 index 00000000..cc994115 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_copper.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_copper", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_galena.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_galena.json new file mode 100644 index 00000000..2e7d8d1e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_galena.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_galena", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_quartz.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_quartz.json new file mode 100644 index 00000000..a05e9827 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_quartz.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_quartz", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_silicon.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_silicon.json new file mode 100644 index 00000000..6b37574d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_silicon.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_silicon", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_solar.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_solar.json new file mode 100644 index 00000000..94245b76 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_solar.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_solar", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_tin.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_tin.json new file mode 100644 index 00000000..3817431c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_ore_tin.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_ore_tin", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_0.json new file mode 100644 index 00000000..2dc59a46 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_0.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_0_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_1.json new file mode 100644 index 00000000..8e39746b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_1.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_1_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_2.json new file mode 100644 index 00000000..2c9270c8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_2.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_2_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_3.json new file mode 100644 index 00000000..90927b9d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_3.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_3_model", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_scorched.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_scorched.json new file mode 100644 index 00000000..4b44ffd2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/venus_rock_scorched.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/venus_rock_scorched", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_0.json new file mode 100644 index 00000000..7e3af3c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_0.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/vine_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_1.json new file mode 100644 index 00000000..7e3af3c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/vine_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_2.json new file mode 100644 index 00000000..7e3af3c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/vine_2.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/vine_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/volcanic_pickaxe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/volcanic_pickaxe.json new file mode 100644 index 00000000..b2f12e6a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/volcanic_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "galacticraftplanets:items/volcanic_pickaxe" + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway.json new file mode 100644 index 00000000..4668e2d2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/walkway_nesw", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_pipe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_pipe.json new file mode 100644 index 00000000..96e5da07 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_pipe.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/walkway_oxygen_neswd", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_wire.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_wire.json new file mode 100644 index 00000000..1682ef0a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/walkway_wire.json @@ -0,0 +1,10 @@ +{ + "parent":"galacticraftplanets:block/walkway_wire_neswd", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_0.json new file mode 100644 index 00000000..9e8a60b7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_0.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/web_torch_0" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_1.json new file mode 100644 index 00000000..7f44c6c1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/item/web_torch_1.json @@ -0,0 +1,18 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "galacticraftplanets:blocks/web_torch_1" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.mtl new file mode 100644 index 00000000..f7a4ec39 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/landing_balloon diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.obj new file mode 100644 index 00000000..bb978f94 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/landing_balloon.obj @@ -0,0 +1,6794 @@ +mtllib landing_balloon.mtl +o Sphere +v -1.025688 -2.186153 1.175247 +v -1.325416 -1.969380 1.299398 +v -1.025688 -2.186153 0.882353 +v -1.525688 -1.644957 1.382353 +v -1.325416 -1.969380 0.758202 +v -1.596014 -1.262273 1.411483 +v -1.525688 -1.644957 0.675246 +v -1.525688 -0.879590 1.382353 +v -1.596014 -1.262273 0.646116 +v -1.325416 -0.555167 1.299398 +v -1.525688 -0.879590 0.675246 +v -1.025688 -0.338394 1.175246 +v -1.325416 -0.555167 0.758202 +v -0.818581 -2.186153 0.675246 +v -0.942732 -1.969380 0.375519 +v -1.025688 -1.644957 0.175247 +v -1.054818 -1.262273 0.104920 +v -1.025688 -0.879590 0.175247 +v -1.025688 -0.338394 0.882353 +v -0.942732 -0.555167 0.375518 +v -0.525688 -2.186153 0.675247 +v -0.401536 -1.969380 0.375519 +v -0.318581 -1.644957 0.175247 +v -0.289451 -1.262273 0.104920 +v -0.318581 -0.879590 0.175247 +v -0.818581 -0.338394 0.675246 +v -0.401536 -0.555167 0.375519 +v -0.318581 -2.186153 0.882354 +v -0.018853 -1.969380 0.758202 +v 0.181419 -1.644957 0.675247 +v 0.251745 -1.262274 0.646117 +v 0.181419 -0.879590 0.675247 +v -0.525688 -0.338394 0.675247 +v -0.018853 -0.555167 0.758202 +v -0.318581 -2.186153 1.175247 +v -0.018853 -1.969380 1.299398 +v 0.181419 -1.644957 1.382354 +v 0.251745 -1.262274 1.411484 +v 0.181419 -0.879590 1.382354 +v -0.318581 -0.338394 0.882353 +v -0.018853 -0.555167 1.299398 +v -0.525688 -2.186153 1.382353 +v -0.401537 -1.969380 1.682082 +v -0.318581 -1.644957 1.882354 +v -0.289452 -1.262274 1.952680 +v -0.318581 -0.879590 1.882354 +v -0.318581 -0.338394 1.175247 +v -0.401537 -0.555167 1.682082 +v -0.818581 -2.186153 1.382353 +v -0.942733 -1.969380 1.682081 +v -1.025688 -1.644957 1.882354 +v -1.054818 -1.262274 1.952679 +v -1.025688 -0.879590 1.882354 +v -0.525688 -0.338394 1.382353 +v -0.942733 -0.555167 1.682081 +v -0.672135 -2.262273 1.028800 +v -0.672135 -0.262273 1.028800 +v -0.818581 -0.338394 1.382353 +v -1.025688 -2.186153 0.175246 +v -1.325416 -1.969380 0.299398 +v -1.025688 -2.186153 -0.117647 +v -1.525688 -1.644957 0.382353 +v -1.325416 -1.969380 -0.241798 +v -1.596014 -1.262273 0.411483 +v -1.525688 -1.644957 -0.324754 +v -1.525688 -0.879590 0.382353 +v -1.596014 -1.262273 -0.353884 +v -1.325416 -0.555167 0.299398 +v -1.525688 -0.879590 -0.324754 +v -1.025688 -0.338394 0.175246 +v -1.325416 -0.555167 -0.241798 +v -0.818581 -2.186153 -0.324753 +v -0.942732 -1.969380 -0.624482 +v -1.025688 -1.644957 -0.824754 +v -1.054818 -1.262273 -0.895080 +v -1.025688 -0.879590 -0.824754 +v -1.025688 -0.338394 -0.117647 +v -0.942732 -0.555167 -0.624482 +v -0.525688 -2.186153 -0.324753 +v -0.401536 -1.969380 -0.624481 +v -0.318581 -1.644957 -0.824753 +v -0.289451 -1.262273 -0.895080 +v -0.318581 -0.879590 -0.824753 +v -0.818581 -0.338394 -0.324753 +v -0.401536 -0.555167 -0.624482 +v -0.318581 -2.186153 -0.117647 +v -0.018853 -1.969380 -0.241798 +v 0.181419 -1.644957 -0.324753 +v 0.251745 -1.262273 -0.353883 +v 0.181419 -0.879590 -0.324753 +v -0.525688 -0.338394 -0.324753 +v -0.018853 -0.555167 -0.241798 +v -0.318581 -2.186153 0.175247 +v -0.018853 -1.969380 0.299398 +v 0.181419 -1.644957 0.382354 +v 0.251745 -1.262273 0.411484 +v 0.181419 -0.879590 0.382354 +v -0.318581 -0.338394 -0.117647 +v -0.018853 -0.555167 0.299398 +v -0.525688 -2.186153 0.382353 +v -0.401537 -1.969380 0.682081 +v -0.318581 -1.644957 0.882354 +v -0.289451 -1.262273 0.952680 +v -0.318581 -0.879590 0.882353 +v -0.318581 -0.338394 0.175246 +v -0.401537 -0.555167 0.682081 +v -0.942733 -1.969380 0.682081 +v -1.025688 -1.644957 0.882353 +v -1.054818 -1.262273 0.952679 +v -1.025688 -0.879590 0.882353 +v -0.525688 -0.338394 0.382353 +v -0.942733 -0.555167 0.682081 +v -0.672134 -2.262273 0.028800 +v -0.672134 -0.262273 0.028800 +v -0.818581 -2.186153 0.382353 +v -0.818581 -0.338394 0.382353 +v -1.025688 -2.186153 -0.824754 +v -1.325416 -1.969380 -0.700602 +v -1.025688 -2.186153 -1.117647 +v -1.525687 -1.644957 -0.617647 +v -1.325416 -1.969380 -1.241798 +v -1.596014 -1.262273 -0.588517 +v -1.525688 -1.644957 -1.324754 +v -1.525688 -0.879590 -0.617647 +v -1.596014 -1.262273 -1.353884 +v -1.325416 -0.555167 -0.700602 +v -1.525688 -0.879590 -1.324754 +v -1.025688 -0.338394 -0.824754 +v -1.325416 -0.555167 -1.241798 +v -0.818581 -2.186153 -1.324754 +v -0.942732 -1.969380 -1.624482 +v -1.025688 -1.644957 -1.824754 +v -1.054818 -1.262273 -1.895080 +v -1.025688 -0.879590 -1.824754 +v -1.025688 -0.338394 -1.117647 +v -0.942732 -0.555166 -1.624482 +v -0.525688 -2.186153 -1.324754 +v -0.401536 -1.969380 -1.624482 +v -0.289451 -1.262273 -1.895080 +v -0.401536 -0.555167 -1.624482 +v -0.818581 -0.338394 -1.324754 +v -0.318581 -2.186153 -1.117647 +v -0.318581 -1.644957 -1.824754 +v -0.018853 -1.969380 -1.241798 +v 0.181419 -1.644957 -1.324754 +v -0.318581 -0.879590 -1.824754 +v 0.251745 -1.262273 -1.353884 +v 0.181419 -0.879590 -1.324754 +v -0.525688 -0.338394 -1.324754 +v -0.018853 -0.555167 -1.241798 +v -0.318581 -2.186153 -0.824754 +v -0.018853 -1.969380 -0.700602 +v 0.181419 -1.644957 -0.617647 +v 0.251745 -1.262273 -0.588517 +v 0.181419 -0.879590 -0.617647 +v -0.318581 -0.338394 -1.117647 +v -0.018853 -0.555167 -0.700602 +v -0.525688 -2.186153 -0.617647 +v -0.401537 -1.969380 -0.317919 +v -0.318581 -1.644957 -0.117647 +v -0.289451 -1.262273 -0.047320 +v -0.318581 -0.879590 -0.117647 +v -0.318581 -0.338394 -0.824754 +v -0.401537 -0.555167 -0.317919 +v -0.818581 -2.186153 -0.617647 +v -0.942733 -1.969380 -0.317919 +v -1.025688 -1.644957 -0.117647 +v -1.054818 -1.262273 -0.047321 +v -1.025688 -0.879590 -0.117647 +v -0.525688 -0.338394 -0.617647 +v -0.942733 -0.555167 -0.317919 +v -0.672134 -2.262273 -0.971200 +v -0.672134 -0.262273 -0.971200 +v -0.818581 -0.338394 -0.617647 +v -0.025688 -2.186153 0.675246 +v -0.325416 -1.969380 0.799398 +v -0.025688 -2.186153 0.382353 +v -0.525688 -1.644957 0.882353 +v -0.325416 -1.969380 0.258202 +v -0.596014 -1.262274 0.911483 +v -0.525688 -1.644957 0.175246 +v -0.525688 -0.879590 0.882353 +v -0.596014 -1.262273 0.146116 +v -0.325416 -0.555167 0.799398 +v -0.525688 -0.879590 0.175246 +v -0.025688 -0.338394 0.675246 +v -0.325416 -0.555167 0.258202 +v 0.181419 -2.186153 0.175247 +v 0.057268 -1.969380 -0.124481 +v -0.025688 -1.644957 -0.324753 +v -0.054818 -1.262273 -0.395080 +v -0.025688 -0.879590 -0.324753 +v -0.025688 -0.338394 0.382353 +v 0.057268 -0.555167 -0.124482 +v 0.474312 -2.186153 0.175247 +v 0.598464 -1.969380 -0.124481 +v 0.681419 -1.644957 -0.324753 +v 0.710549 -1.262273 -0.395080 +v 0.681419 -0.879590 -0.324753 +v 0.181419 -0.338394 0.175247 +v 0.598464 -0.555167 -0.124481 +v 0.681419 -2.186153 0.382353 +v 0.981147 -1.969380 0.258202 +v 1.181419 -1.644957 0.175247 +v 1.251745 -1.262273 0.146117 +v 1.181419 -0.879590 0.175247 +v 0.474312 -0.338394 0.175247 +v 0.981147 -0.555167 0.258202 +v 0.681419 -2.186153 0.675247 +v 0.981147 -1.969380 0.799398 +v 1.181419 -1.644957 0.882354 +v 1.251745 -1.262273 0.911484 +v 1.181419 -0.879590 0.882354 +v 0.681419 -0.338394 0.382353 +v 0.981147 -0.555167 0.799398 +v 0.474312 -2.186153 0.882353 +v 0.598463 -1.969380 1.182082 +v 0.681419 -1.644957 1.382353 +v 0.710549 -1.262274 1.452680 +v 0.681419 -0.879590 1.382354 +v 0.681419 -0.338394 0.675247 +v 0.598463 -0.555167 1.182081 +v 0.181419 -2.186153 0.882353 +v 0.057267 -1.969380 1.182081 +v -0.025688 -1.644957 1.382353 +v -0.054818 -1.262274 1.452679 +v -0.025688 -0.879590 1.382353 +v 0.474312 -0.338394 0.882353 +v 0.057267 -0.555167 1.182081 +v 0.327866 -2.262273 0.528800 +v 0.327866 -0.262274 0.528800 +v 0.181419 -0.338394 0.882353 +v -0.025688 -2.186153 -0.324753 +v -0.325416 -1.969380 -0.200602 +v -0.025688 -2.186153 -0.617647 +v -0.525688 -1.644957 -0.117647 +v -0.325416 -1.969380 -0.741798 +v -0.596014 -1.262273 -0.088517 +v -0.525688 -1.644957 -0.824753 +v -0.525688 -0.879590 -0.117647 +v -0.596014 -1.262273 -0.853884 +v -0.325416 -0.555167 -0.200602 +v -0.525688 -0.879590 -0.824754 +v -0.025688 -0.338394 -0.324754 +v -0.325416 -0.555167 -0.741798 +v 0.181419 -2.186153 -0.824753 +v 0.057268 -1.969380 -1.124481 +v -0.025688 -1.644957 -1.324754 +v -0.054818 -1.262273 -1.395080 +v -0.025688 -0.879590 -1.324754 +v -0.025688 -0.338394 -0.617647 +v 0.057268 -0.555167 -1.124482 +v 0.474312 -2.186153 -0.824753 +v 0.598464 -1.969380 -1.124481 +v 0.681419 -1.644957 -1.324753 +v 0.710549 -1.262273 -1.395080 +v 0.681419 -0.879590 -1.324754 +v 0.181419 -0.338394 -0.824753 +v 0.598464 -0.555167 -1.124481 +v 0.681419 -2.186153 -0.617647 +v 0.981147 -1.969380 -0.741798 +v 1.181419 -1.644957 -0.824753 +v 1.251745 -1.262273 -0.853883 +v 1.181419 -0.879590 -0.824753 +v 0.474312 -0.338394 -0.824754 +v 0.981147 -0.555167 -0.741798 +v 0.681419 -2.186153 -0.324753 +v 0.981147 -1.969380 -0.200602 +v 1.181419 -1.644957 -0.117646 +v 1.251745 -1.262273 -0.088516 +v 1.181419 -0.879590 -0.117646 +v 0.681419 -0.338394 -0.617647 +v 0.981147 -0.555167 -0.200602 +v 0.474312 -2.186153 -0.117647 +v 0.598463 -1.969380 0.182081 +v 0.681419 -1.644957 0.382353 +v 0.710549 -1.262274 0.452680 +v 0.681418 -0.879590 0.382353 +v 0.681419 -0.338394 -0.324754 +v 0.598463 -0.555167 0.182081 +v 0.181419 -2.186153 -0.117647 +v 0.057267 -1.969380 0.182081 +v -0.025688 -1.644957 0.382353 +v -0.054818 -1.262274 0.452679 +v -0.025688 -0.879590 0.382353 +v 0.474312 -0.338394 -0.117647 +v 0.057267 -0.555167 0.182081 +v 0.327866 -2.262273 -0.471200 +v 0.327865 -0.262273 -0.471200 +v 0.181419 -0.338394 -0.117647 +v 0.974312 -2.186153 0.175247 +v 0.674584 -1.969380 0.299398 +v 0.974312 -2.186153 -0.117647 +v 0.474312 -1.644957 0.382353 +v 0.674584 -1.969380 -0.241798 +v 0.403986 -1.262274 0.411483 +v 0.474312 -1.644957 -0.324754 +v 0.474312 -0.879590 0.382353 +v 0.403986 -1.262273 -0.353884 +v 0.674584 -0.555167 0.299398 +v 0.474312 -0.879590 -0.324754 +v 0.974312 -0.338394 0.175246 +v 0.674584 -0.555167 -0.241798 +v 1.181419 -2.186153 -0.324754 +v 1.057268 -1.969380 -0.624482 +v 0.974312 -1.644957 -0.824754 +v 0.945183 -1.262273 -0.895080 +v 0.974312 -0.879590 -0.824754 +v 0.974312 -0.338394 -0.117647 +v 1.057268 -0.555167 -0.624482 +v 1.474312 -2.186153 -0.324753 +v 1.598464 -1.969380 -0.624482 +v 1.681419 -1.644957 -0.824753 +v 1.710549 -1.262273 -0.895080 +v 1.681419 -0.879590 -0.824754 +v 1.181419 -0.338394 -0.324754 +v 1.598464 -0.555167 -0.624482 +v 1.681419 -2.186153 -0.117647 +v 1.981147 -1.969380 -0.241798 +v 2.181419 -1.644957 -0.324753 +v 2.251745 -1.262273 -0.353884 +v 2.181419 -0.879590 -0.324753 +v 1.474312 -0.338394 -0.324753 +v 1.981147 -0.555167 -0.241798 +v 1.681419 -2.186153 0.175247 +v 1.981147 -1.969380 0.299398 +v 2.181419 -1.644957 0.382354 +v 2.251745 -1.262274 0.411484 +v 2.181419 -0.879590 0.382354 +v 1.681419 -0.338394 -0.117647 +v 1.981147 -0.555167 0.299398 +v 1.474312 -2.186153 0.382353 +v 1.598463 -1.969380 0.682081 +v 1.681419 -1.644957 0.882353 +v 1.710549 -1.262274 0.952680 +v 1.681419 -0.879590 0.882353 +v 1.681419 -0.338394 0.175246 +v 1.598463 -0.555167 0.682081 +v 1.181419 -2.186153 0.382353 +v 1.057267 -1.969380 0.682081 +v 0.974312 -1.644957 0.882353 +v 0.945182 -1.262274 0.952679 +v 0.974312 -0.879590 0.882353 +v 1.474312 -0.338394 0.382353 +v 1.057267 -0.555167 0.682081 +v 1.327865 -2.262273 0.028800 +v 1.327866 -0.262273 0.028800 +v 1.181419 -0.338394 0.382353 +v -0.501675 -0.813708 1.130124 +v -0.798598 -1.017731 1.251595 +v -0.503172 -0.812223 0.844739 +v -1.161659 -1.094870 1.333931 +v -0.801363 -1.014987 0.724273 +v -1.535587 -1.033382 1.364596 +v -1.165272 -1.091286 0.644951 +v -1.863455 -0.842628 1.338923 +v -1.539498 -1.029502 0.618850 +v -2.095347 -0.551647 1.260820 +v -1.867068 -0.839043 0.649943 +v -2.195960 -0.204741 1.142177 +v -2.098112 -0.548904 0.733498 +v -0.435969 -0.621267 0.643572 +v -0.677188 -0.662146 0.352564 +v -1.003029 -0.630277 0.159290 +v -1.363887 -0.530510 0.093174 +v -1.704825 -0.378034 0.164282 +v -2.197456 -0.203256 0.856792 +v -2.130253 -0.012300 0.655625 +v -0.339432 -0.352699 0.644463 +v -0.498812 -0.165897 0.354210 +v -0.769970 0.018104 0.161441 +v -1.111626 0.171293 0.095502 +v -1.973936 -0.196063 0.361789 +v -1.471765 0.270347 0.166433 +v -1.795561 0.300186 0.363435 +v -0.270113 -0.163843 0.846890 +v -0.370726 0.183064 0.728247 +v -0.602617 0.474044 0.650144 +v -0.930485 0.664798 0.624471 +v -1.304413 0.726287 0.655136 +v -2.033716 0.256268 0.656516 +v -1.667475 0.649147 0.737472 +v -0.268616 -0.165327 1.132275 +v -0.367960 0.180320 1.255570 +v -0.599004 0.470460 1.339124 +v -0.926574 0.660919 1.370217 +v -1.664709 0.646404 1.264794 +v -1.964397 0.445125 0.858943 +v -0.335819 -0.356284 1.333443 +v -0.492136 -0.172521 1.627279 +v -0.761248 0.009451 1.824785 +v -1.300800 0.722702 1.344116 +v -1.102185 0.161926 1.895893 +v -1.463043 0.261693 1.829778 +v -1.962900 0.443640 1.144328 +v -1.788885 0.293563 1.636504 +v -0.432356 -0.624852 1.332551 +v -0.670512 -0.668770 1.625632 +v -0.994307 -0.638930 1.822634 +v -1.696103 -0.386688 1.827627 +v -2.030104 0.252684 1.345495 +v -1.967261 -0.202686 1.634857 +v -0.316096 -0.513863 0.988011 +v -2.149976 0.145279 1.001056 +v -2.126640 -0.015884 1.344604 +v -1.354446 -0.539876 1.893565 +v -0.506785 -0.808639 0.155759 +v -0.803707 -1.012662 0.277230 +v -0.508281 -0.807154 -0.129625 +v -1.166769 -1.089801 0.359566 +v -0.806472 -1.009918 -0.250092 +v -1.540697 -1.028313 0.390232 +v -1.170382 -1.086217 -0.329414 +v -1.868564 -0.837558 0.364559 +v -1.544608 -1.024433 -0.355514 +v -2.100456 -0.546578 0.286455 +v -1.872177 -0.833974 -0.324421 +v -2.201069 -0.199672 0.167812 +v -2.103221 -0.543835 -0.240867 +v -0.441078 -0.616198 -0.330793 +v -0.682297 -0.657077 -0.621801 +v -1.008139 -0.625208 -0.815075 +v -1.368997 -0.525441 -0.881191 +v -1.709934 -0.372965 -0.810083 +v -2.202565 -0.198187 -0.117573 +v -1.979046 -0.190994 -0.612576 +v -0.503921 -0.160828 -0.620155 +v -0.775079 0.023173 -0.812924 +v -1.116735 0.176362 -0.878863 +v -1.476875 0.275416 -0.807932 +v -2.135362 -0.007231 -0.318740 +v -1.800670 0.305255 -0.610930 +v -0.344542 -0.347630 -0.329902 +v -0.275222 -0.158774 -0.127474 +v -0.375835 0.188133 -0.246117 +v -0.607727 0.479113 -0.324221 +v -0.935594 0.669868 -0.349894 +v -1.309523 0.731356 -0.319228 +v -2.038826 0.261337 -0.317849 +v -1.672584 0.654216 -0.236893 +v -0.273726 -0.160258 0.157910 +v -0.373070 0.185390 0.281205 +v -0.604114 0.475529 0.364759 +v -0.931684 0.665988 0.395853 +v -1.305910 0.727771 0.369752 +v -1.969506 0.450194 -0.115422 +v -1.669819 0.651473 0.290430 +v -0.340929 -0.351215 0.359078 +v -0.497245 -0.167452 0.652914 +v -0.766357 0.014519 0.850420 +v -1.107294 0.166995 0.921528 +v -1.468153 0.266762 0.855413 +v -1.968010 0.448709 0.169963 +v -1.793994 0.298632 0.662139 +v -0.437465 -0.619783 0.358187 +v -0.675621 -0.663701 0.651268 +v -0.999416 -0.633861 0.848270 +v -1.359556 -0.534807 0.919200 +v -1.701212 -0.381619 0.853262 +v -2.035213 0.257753 0.371131 +v -1.972370 -0.197617 0.660493 +v -0.321206 -0.508793 0.013646 +v -2.155086 0.150348 0.026692 +v -2.131749 -0.010815 0.370240 +v -0.511894 -0.803570 -0.818605 +v -0.808817 -1.007593 -0.697134 +v -0.513391 -0.802085 -1.103990 +v -1.171878 -1.084732 -0.614799 +v -0.811582 -1.004849 -1.224456 +v -1.545806 -1.023244 -0.584133 +v -1.175491 -1.081147 -1.303778 +v -1.873674 -0.832489 -0.609806 +v -1.549717 -1.019364 -1.329879 +v -2.105566 -0.541509 -0.687909 +v -1.877287 -0.828905 -1.298786 +v -2.206178 -0.194603 -0.806553 +v -2.207675 -0.193118 -1.091937 +v -0.446188 -0.611129 -1.305157 +v -0.687406 -0.652008 -1.596166 +v -1.013248 -0.620138 -1.789440 +v -1.374107 -0.520372 -1.855555 +v -2.108331 -0.538766 -1.215232 +v -1.715044 -0.367896 -1.784447 +v -1.984155 -0.185925 -1.586941 +v -0.349651 -0.342561 -1.304266 +v -0.509031 -0.155759 -1.594519 +v -0.780189 0.028242 -1.787289 +v -1.121845 0.181431 -1.853227 +v -1.481984 0.280485 -1.782296 +v -2.140472 -0.002162 -1.293105 +v -1.805780 0.310324 -1.585294 +v -0.280332 -0.153704 -1.101839 +v -0.380945 0.193202 -1.220482 +v -0.612836 0.484182 -1.298585 +v -0.940704 0.674937 -1.324259 +v -1.314632 0.736425 -1.293593 +v -2.043936 0.266406 -1.292214 +v -1.677693 0.659285 -1.211257 +v -0.278835 -0.155189 -0.816454 +v -0.378179 0.190459 -0.693160 +v -0.609223 0.480598 -0.609606 +v -0.936793 0.671057 -0.578512 +v -1.311019 0.732840 -0.604613 +v -1.974616 0.455263 -1.089786 +v -1.674928 0.656542 -0.683935 +v -0.346038 -0.346146 -0.615287 +v -0.502355 -0.162383 -0.321451 +v -0.771467 0.019588 -0.123944 +v -1.112404 0.172064 -0.052836 +v -1.473262 0.271831 -0.118952 +v -1.973119 0.453778 -0.804401 +v -1.799104 0.303701 -0.312226 +v -0.680731 -0.658632 -0.323097 +v -1.004526 -0.628792 -0.126095 +v -1.364666 -0.529738 -0.055164 +v -1.706322 -0.376550 -0.121103 +v -2.040323 0.262822 -0.603234 +v -1.977480 -0.192548 -0.313872 +v -0.326315 -0.503724 -0.960719 +v -2.160195 0.155417 -0.947673 +v -0.442575 -0.614714 -0.616178 +v -2.136859 -0.005746 -0.604125 +v -0.174635 0.105775 0.645984 +v -0.471557 -0.098247 0.767455 +v -0.176131 0.107260 0.360599 +v -0.834618 -0.175386 0.849790 +v -0.474322 -0.095504 0.240132 +v -1.208547 -0.113898 0.880456 +v -0.838231 -0.171802 0.160810 +v -1.536414 0.076856 0.854783 +v -1.212457 -0.110019 0.134710 +v -1.768306 0.367836 0.776679 +v -1.540027 0.080440 0.165803 +v -1.868919 0.714743 0.658036 +v -1.870415 0.716228 0.372651 +v -0.108928 0.298216 0.159431 +v -0.350147 0.257337 -0.131577 +v -0.675988 0.289207 -0.324851 +v -1.036847 0.388974 -0.390966 +v -1.771071 0.370580 0.249357 +v -1.377784 0.541449 -0.319858 +v -1.646896 0.723421 -0.122352 +v -0.012391 0.566784 0.160322 +v -0.171771 0.753586 -0.129931 +v -0.442929 0.937588 -0.322700 +v -0.784585 1.090776 -0.388638 +v -1.144724 1.189830 -0.317708 +v -1.803212 0.907184 0.171484 +v -1.468520 1.219670 -0.120706 +v 0.056928 0.755641 0.362750 +v -0.043685 1.102548 0.244107 +v -0.275576 1.393528 0.166003 +v -0.603444 1.584282 0.140330 +v -0.977372 1.645770 0.170996 +v -1.706676 1.175752 0.172375 +v -1.340434 1.568631 0.253332 +v 0.058425 0.754156 0.648134 +v -0.040919 1.099804 0.771429 +v -0.271964 1.389943 0.854983 +v -0.599533 1.580402 0.886077 +v -0.973759 1.642186 0.859976 +v -1.637356 1.364608 0.374802 +v -1.337668 1.565888 0.780654 +v -0.165095 0.746963 1.143138 +v -0.434207 0.928934 1.340645 +v -0.775144 1.081410 1.411753 +v -1.136002 1.181177 1.345637 +v -1.635859 1.363123 0.660187 +v -1.461844 1.213046 1.152363 +v -0.008779 0.563200 0.849302 +v -0.105315 0.294632 0.848411 +v -0.343471 0.250714 1.141492 +v -0.667266 0.280553 1.338493 +v -1.027406 0.379607 1.409424 +v -1.369061 0.532796 1.343486 +v -1.703063 1.172167 0.861355 +v -1.640220 0.716797 1.150716 +v 0.010945 0.405621 0.503870 +v -1.822935 1.064762 0.516916 +v -1.799599 0.903599 0.860464 +v -0.179744 0.110844 -0.328381 +v -0.476666 -0.093178 -0.206910 +v -0.181241 0.112329 -0.613766 +v -0.839728 -0.170318 -0.124574 +v -0.479432 -0.090435 -0.734232 +v -1.213656 -0.108829 -0.093909 +v -0.843341 -0.166733 -0.813554 +v -1.541523 0.081925 -0.119582 +v -1.217567 -0.104950 -0.839655 +v -1.773415 0.372905 -0.197685 +v -1.545136 0.085509 -0.808562 +v -1.874028 0.719812 -0.316328 +v -1.776181 0.375648 -0.725008 +v -0.114037 0.303285 -0.814933 +v -0.355256 0.262406 -1.105941 +v -0.681098 0.294276 -1.299215 +v -1.041956 0.394043 -1.365331 +v -1.382893 0.546518 -1.294223 +v -1.875525 0.721297 -0.601713 +v -1.652005 0.728490 -1.096717 +v -0.017501 0.571853 -0.814042 +v -0.176880 0.758655 -1.104295 +v -0.448038 0.942657 -1.297064 +v -0.789694 1.095845 -1.363003 +v -1.149834 1.194899 -1.292072 +v -1.808321 0.912253 -0.802881 +v -1.473629 1.224739 -1.095070 +v 0.051819 0.760710 -0.611615 +v -0.048794 1.107616 -0.730258 +v -0.280686 1.398597 -0.808361 +v -0.608553 1.589351 -0.834034 +v -0.982481 1.650839 -0.803369 +v -1.711785 1.180821 -0.801990 +v -1.345543 1.573700 -0.721033 +v 0.053315 0.759225 -0.326230 +v -0.046029 1.104873 -0.202936 +v -0.277073 1.395012 -0.119381 +v -0.604643 1.585471 -0.088288 +v -0.978868 1.647255 -0.114389 +v -1.642465 1.369677 -0.599562 +v -1.342778 1.570956 -0.193711 +v -0.013888 0.568269 -0.125063 +v -0.170204 0.752032 0.168774 +v -0.439316 0.934003 0.366280 +v -0.780253 1.086478 0.437388 +v -1.141112 1.186245 0.371272 +v -1.640969 1.368192 -0.314177 +v -1.466953 1.218115 0.177998 +v -0.110424 0.299701 -0.125954 +v -0.348580 0.255783 0.167127 +v -0.672375 0.285622 0.364129 +v -1.032515 0.384676 0.435060 +v -1.374171 0.537865 0.369121 +v -1.708172 1.177236 -0.113010 +v -1.645329 0.721866 0.176352 +v 0.005835 0.410690 -0.470494 +v -1.828045 1.069832 -0.457449 +v -1.804708 0.908668 -0.113901 +v 0.152406 1.025259 0.161843 +v -0.144516 0.821236 0.283314 +v 0.150910 1.026744 -0.123542 +v -0.507577 0.744097 0.365650 +v -0.147281 0.823980 -0.244008 +v -0.881506 0.805585 0.396315 +v -0.511190 0.747681 -0.323330 +v -1.209373 0.996340 0.370642 +v -0.885416 0.809465 -0.349431 +v -1.441265 1.287320 0.292539 +v -1.212986 0.999924 -0.318338 +v -1.541878 1.634226 0.173896 +v -1.444030 1.290063 -0.234784 +v 0.218113 1.217700 -0.324709 +v -0.023106 1.176821 -0.615717 +v -0.348947 1.208690 -0.808991 +v -0.709806 1.308457 -0.875107 +v -1.050743 1.460933 -0.803999 +v -1.543374 1.635711 -0.111489 +v -1.319854 1.642904 -0.606493 +v 0.314649 1.486268 -0.323818 +v 0.155270 1.673070 -0.614071 +v -0.115888 1.857071 -0.806840 +v -0.457544 2.010260 -0.872779 +v -0.817684 2.109314 -0.801848 +v -1.476171 1.826667 -0.312657 +v -1.141479 2.139153 -0.604846 +v 0.283356 2.022031 -0.240034 +v 0.051465 2.313011 -0.318137 +v -0.276403 2.503766 -0.343810 +v -0.650331 2.565254 -0.313145 +v -1.379635 2.095235 -0.311766 +v -1.013392 2.488115 -0.230809 +v 0.383969 1.675124 -0.121391 +v 0.385466 1.673640 0.163994 +v 0.286121 2.019288 0.287288 +v 0.055077 2.309427 0.370843 +v -0.272492 2.499886 0.401936 +v -0.646718 2.561669 0.375835 +v -1.310315 2.284092 -0.109338 +v -1.308818 2.282607 0.176047 +v 0.318262 1.482684 0.365161 +v 0.161946 1.666447 0.658998 +v -0.107166 1.848418 0.856504 +v -0.448103 2.000893 0.927612 +v -1.010628 2.485371 0.296513 +v -0.808961 2.100660 0.861496 +v -1.134803 2.132530 0.668222 +v 0.221726 1.214115 0.364270 +v -0.016430 1.170197 0.657351 +v -0.340225 1.200037 0.854353 +v -0.700365 1.299091 0.925284 +v -1.042021 1.452279 0.859345 +v -1.376022 2.091651 0.377214 +v -1.313179 1.636281 0.666576 +v 0.337986 1.325105 0.019729 +v -1.495894 1.984246 0.032775 +v -1.472558 1.823083 0.376323 +v 1.222376 -0.812255 -0.186505 +v 1.488583 -1.016115 -0.007289 +v 0.985877 -0.811301 -0.026767 +v 1.758795 -1.093177 0.248817 +v 1.051590 -1.014351 0.287869 +v 1.991875 -1.031710 0.542822 +v 1.187836 -1.090872 0.634459 +v 2.152339 -0.841073 0.829966 +v 1.373874 -1.029216 0.960238 +v 2.215756 -0.550287 1.066536 +v 1.581380 -0.838768 1.215609 +v 2.172474 -0.203622 1.216514 +v 1.778764 -0.548523 1.361694 +v 0.780990 -0.620704 0.029298 +v 0.673008 -0.662174 0.391463 +v 0.693196 -0.630732 0.769811 +v 0.838479 -0.531163 1.106741 +v 1.086740 -0.378627 1.350960 +v 1.935975 -0.202667 1.376252 +v 1.400182 -0.196346 1.465287 +v 0.727735 -0.352115 -0.051154 +v 0.574606 -0.165885 0.242808 +v 0.564627 0.017701 0.575584 +v 0.699316 0.170695 0.896511 +v 0.958170 0.269805 1.156733 +v 1.731089 -0.012071 1.432317 +v 1.301780 0.299942 1.316632 +v 0.857307 -0.162868 -0.220994 +v 0.814025 0.183796 -0.071016 +v 0.877443 0.474582 0.165554 +v 1.037906 0.665220 0.452699 +v 1.270986 0.726687 0.746703 +v 1.677833 0.256518 1.351865 +v 1.541199 0.649624 1.002809 +v 1.093806 -0.163823 -0.380732 +v 1.251018 0.182032 -0.366174 +v 1.448401 0.472278 -0.220089 +v 1.655907 0.662725 0.035282 +v 1.841945 0.724382 0.361061 +v 1.807406 0.445765 1.182025 +v 1.978191 0.647860 0.707651 +v 1.298693 -0.354419 -0.436797 +v 1.629599 -0.170144 -0.469767 +v 1.943042 0.012137 -0.355440 +v 2.191303 0.164673 -0.111221 +v 2.336586 0.264241 0.225709 +v 2.043905 0.444810 1.022287 +v 2.356773 0.295684 0.604057 +v 1.728002 -0.666433 -0.321112 +v 2.071611 -0.636296 -0.161213 +v 2.465155 -0.384192 0.419937 +v 2.455176 -0.200605 0.752713 +v 2.248791 0.254214 0.966223 +v 1.000701 -0.512635 -0.261548 +v 2.029080 0.146145 1.257069 +v 1.351948 -0.623009 -0.356345 +v 2.302047 -0.014376 1.046674 +v 2.330465 -0.537186 0.099009 +v 0.414918 -0.808996 0.358876 +v 0.681125 -1.012855 0.538092 +v 0.178420 -0.808041 0.518614 +v 0.951338 -1.089918 0.794198 +v 0.244133 -1.011091 0.833251 +v 1.184418 -1.028451 1.088203 +v 0.380379 -1.087613 1.179840 +v 1.344881 -0.837813 1.375347 +v 0.566417 -1.025957 1.505619 +v 1.408299 -0.547027 1.611917 +v 0.773923 -0.835509 1.760990 +v 1.365017 -0.200363 1.761895 +v 0.971307 -0.545264 1.907075 +v -0.026467 -0.617445 0.574679 +v -0.114261 -0.627472 1.315192 +v 0.031022 -0.527904 1.652123 +v 0.279282 -0.375368 1.896342 +v 1.128518 -0.199408 1.921634 +v 0.923631 -0.008812 1.977698 +v -0.134449 -0.658915 0.936844 +v -0.079722 -0.348856 0.494227 +v -0.232851 -0.162626 0.788189 +v -0.242831 0.020960 1.120965 +v -0.108141 0.173955 1.441893 +v 0.592725 -0.193087 2.010668 +v 0.150713 0.273065 1.702114 +v 0.494323 0.303202 1.862013 +v 0.049850 -0.159609 0.324387 +v 0.006568 0.187056 0.474366 +v 0.069986 0.477842 0.710935 +v 0.230449 0.668479 0.998080 +v 0.463529 0.729946 1.292084 +v 0.870376 0.259778 1.897246 +v 0.733742 0.652883 1.548190 +v 0.286349 -0.160564 0.164649 +v 0.443560 0.185292 0.179207 +v 0.640944 0.475537 0.325292 +v 0.848450 0.665985 0.580663 +v 1.034488 0.727641 0.906442 +v 0.999949 0.449024 1.727407 +v 1.170734 0.651119 1.253032 +v 0.491236 -0.351160 0.108585 +v 0.822142 -0.166885 0.075614 +v 1.135585 0.015396 0.189941 +v 1.383845 0.167932 0.434160 +v 1.529129 0.267500 0.771091 +v 1.236448 0.448070 1.567668 +v 1.441334 0.257473 1.511604 +v 0.544491 -0.619750 0.189036 +v 0.920545 -0.663174 0.224269 +v 1.264154 -0.633036 0.384168 +v 1.523008 -0.533927 0.644390 +v 1.549316 0.298943 1.149439 +v 1.657698 -0.380932 0.965318 +v 1.494590 -0.011117 1.592055 +v 0.193244 -0.509376 0.283833 +v 1.221623 0.149404 1.802450 +v 1.647718 -0.197346 1.298094 +v -0.392539 -0.805737 0.904257 +v -0.126332 -1.009596 1.083474 +v -0.629037 -0.804782 1.063996 +v 0.143881 -1.086658 1.339579 +v -0.563324 -1.007832 1.378632 +v 0.376961 -1.025192 1.633584 +v -0.241040 -1.022697 2.051001 +v 0.537424 -0.834554 1.920729 +v 0.600842 -0.543768 2.157298 +v -0.033534 -0.832250 2.306371 +v 0.557560 -0.197104 2.307276 +v 0.163850 -0.542004 2.452456 +v -0.833924 -0.614186 1.120060 +v -0.427078 -1.084354 1.725222 +v -0.941906 -0.655656 1.482225 +v -0.921719 -0.624213 1.860573 +v -0.776435 -0.524645 2.197504 +v -0.528175 -0.372109 2.441723 +v 0.321061 -0.196149 2.467015 +v -0.214732 -0.189828 2.556049 +v -0.887180 -0.345596 1.039608 +v -1.040309 -0.159367 1.333570 +v -1.050288 0.024219 1.666346 +v -0.915598 0.177214 1.987274 +v -0.656744 0.276324 2.247495 +v 0.116174 -0.005552 2.523079 +v -0.313135 0.306461 2.407394 +v -0.757607 -0.156350 0.869768 +v -0.800889 0.190315 1.019747 +v -0.737472 0.481101 1.256316 +v -0.577008 0.671739 1.543461 +v -0.343928 0.733205 1.837466 +v 0.062919 0.263037 2.442628 +v -0.073715 0.656143 2.093571 +v -0.521108 -0.157304 0.710030 +v -0.363897 0.188551 0.724589 +v -0.166513 0.478796 0.870673 +v 0.040993 0.669244 1.126044 +v 0.227031 0.730900 1.451823 +v 0.192492 0.452284 2.272788 +v 0.363277 0.654379 1.798413 +v -0.316221 -0.347901 0.653966 +v 0.014685 -0.163626 0.620995 +v 0.328128 0.018655 0.735322 +v 0.576388 0.171191 0.979541 +v 0.721671 0.270759 1.316472 +v 0.428990 0.451329 2.113049 +v 0.741859 0.302202 1.694820 +v -0.262966 -0.616491 0.734417 +v 0.113088 -0.659914 0.769650 +v 0.456697 -0.629777 0.929549 +v 0.715551 -0.530667 1.189771 +v 0.850241 -0.377673 1.510699 +v 0.633877 0.260732 2.056985 +v 0.687132 -0.007857 2.137437 +v -0.614213 -0.506117 0.829214 +v 0.414166 0.152663 2.347831 +v 0.840261 -0.194087 1.843475 +v 0.636822 0.106396 -0.188493 +v 0.903030 -0.097463 -0.009277 +v 0.400324 0.107351 -0.028755 +v 1.173241 -0.174525 0.246829 +v 0.602283 -0.172220 0.632471 +v 1.406322 -0.113059 0.540834 +v 1.566785 0.077579 0.827978 +v 0.788321 -0.110564 0.958250 +v 1.630203 0.368365 1.064548 +v 0.995827 0.079884 1.213621 +v 1.586921 0.715030 1.214526 +v 1.193211 0.370129 1.359706 +v 0.466037 -0.095699 0.285881 +v 0.195437 0.297947 0.027310 +v 0.087455 0.256478 0.389475 +v 0.107643 0.287920 0.767823 +v 0.252926 0.387489 1.104753 +v 0.501186 0.540025 1.348972 +v 1.350422 0.715984 1.374264 +v 0.814629 0.722305 1.463299 +v 0.142182 0.566537 -0.053142 +v -0.010947 0.752766 0.240820 +v -0.020927 0.936353 0.573596 +v 0.113763 1.089347 0.894524 +v 0.372617 1.188457 1.154745 +v 1.145535 0.906581 1.430329 +v 0.716226 1.218594 1.314644 +v 0.271754 0.755784 -0.222982 +v 0.228472 1.102448 -0.073004 +v 0.291890 1.393234 0.163566 +v 0.452353 1.583872 0.450710 +v 0.685433 1.645338 0.744715 +v 1.092280 1.175170 1.349877 +v 0.955646 1.568276 1.000821 +v 0.508253 0.754829 -0.382720 +v 0.665464 1.100684 -0.368162 +v 0.862848 1.390929 -0.222077 +v 1.070354 1.581377 0.033294 +v 1.256392 1.643034 0.359073 +v 1.221853 1.364417 1.180037 +v 1.392638 1.566512 0.705663 +v 0.713140 0.564232 -0.438784 +v 1.044046 0.748508 -0.471755 +v 1.357489 0.930788 -0.357428 +v 1.605750 1.083324 -0.113209 +v 1.751033 1.182893 0.223722 +v 1.458351 1.363462 1.020299 +v 1.771220 1.214335 0.602070 +v 0.766395 0.295643 -0.358333 +v 1.142449 0.252219 -0.323100 +v 1.486058 0.282356 -0.163201 +v 1.744912 0.381466 0.097021 +v 1.879602 0.534460 0.417949 +v 1.663238 1.172866 0.964235 +v 1.869623 0.718047 0.750725 +v 0.415148 0.406017 -0.263536 +v 1.443527 1.064796 1.255081 +v 1.716493 0.904276 1.044686 +v -0.170635 0.109656 0.356888 +v 0.095572 -0.094204 0.536104 +v -0.407133 0.110610 0.516626 +v 0.365785 -0.171266 0.792210 +v -0.341420 -0.092440 0.831262 +v 0.598865 -0.109799 1.086215 +v -0.205174 -0.168961 1.177853 +v 0.759328 0.080838 1.373359 +v -0.019136 -0.107305 1.503631 +v 0.822746 0.371624 1.609929 +v 0.188370 0.083143 1.759002 +v 0.779464 0.718289 1.759907 +v 0.385754 0.373388 1.905087 +v -0.612020 0.301207 0.572691 +v -0.720002 0.259737 0.934856 +v -0.699814 0.291179 1.313204 +v -0.554531 0.390748 1.650135 +v -0.306271 0.543284 1.894353 +v 0.542965 0.719244 1.919646 +v 0.007172 0.725565 2.008680 +v -0.665275 0.569796 0.492239 +v -0.818404 0.756026 0.786201 +v -0.828384 0.939612 1.118977 +v -0.693694 1.092606 1.439905 +v -0.434840 1.191716 1.700126 +v 0.338078 0.909840 1.975710 +v -0.091231 1.221853 1.860025 +v -0.535703 0.759043 0.322399 +v -0.578985 1.105707 0.472378 +v -0.515568 1.396493 0.708947 +v -0.355104 1.587131 0.996092 +v -0.122024 1.648597 1.290097 +v 0.284823 1.178430 1.895259 +v 0.148189 1.571535 1.546202 +v -0.299204 0.758088 0.162661 +v -0.141993 1.103943 0.177220 +v 0.055391 1.394189 0.323304 +v 0.262897 1.584636 0.578675 +v 0.448935 1.646293 0.904454 +v 0.414396 1.367676 1.725419 +v 0.585181 1.569771 1.251044 +v -0.094317 0.567491 0.106597 +v 0.236589 0.751767 0.073626 +v 0.550032 0.934048 0.187953 +v 0.798293 1.086583 0.432172 +v 0.943576 1.186152 0.769103 +v 0.650894 1.366721 1.565680 +v 0.963763 1.217595 1.147451 +v -0.041062 0.298902 0.187048 +v 0.334992 0.255478 0.222281 +v 0.678601 0.285615 0.382180 +v 0.937455 0.384725 0.642402 +v 1.072145 0.537719 0.963330 +v 0.855781 1.176125 1.509616 +v 1.062165 0.721306 1.296106 +v -0.392309 0.409276 0.281845 +v 0.636070 1.068056 1.800462 +v 0.909036 0.907535 1.590067 +v 0.051269 1.025048 -0.190481 +v 0.317476 0.821189 -0.011265 +v -0.185230 1.026003 -0.030743 +v 0.587689 0.744127 0.244841 +v -0.119516 0.822953 0.283893 +v 0.820769 0.805593 0.538846 +v 0.016730 0.746431 0.630483 +v 0.981232 0.996231 0.825990 +v 0.202768 0.808088 0.956262 +v 1.044650 1.287017 1.062560 +v 0.410274 0.998536 1.211633 +v 1.001368 1.633682 1.212538 +v 0.764869 1.634636 1.372277 +v -0.390116 1.216599 0.025322 +v -0.498098 1.175129 0.387487 +v -0.477911 1.206572 0.765835 +v -0.332628 1.306141 1.102766 +v 0.607658 1.288781 1.357718 +v -0.084367 1.458676 1.346984 +v 0.229076 1.640957 1.461311 +v -0.443372 1.485189 -0.055130 +v -0.596501 1.671418 0.238832 +v -0.606480 1.855005 0.571608 +v -0.471790 2.007999 0.892536 +v -0.212936 2.107109 1.152757 +v 0.559982 1.825233 1.428341 +v 0.130673 2.137246 1.312656 +v -0.313799 1.674435 -0.224970 +v -0.357081 2.021100 -0.074991 +v -0.293664 2.311886 0.161578 +v -0.133200 2.502524 0.448723 +v 0.099880 2.563990 0.742728 +v 0.506727 2.093822 1.347889 +v 0.370093 2.486928 0.998833 +v -0.077300 1.673481 -0.384708 +v 0.079911 2.019336 -0.370150 +v 0.277295 2.309581 -0.224065 +v 0.484801 2.500029 0.031306 +v 0.670839 2.561685 0.357085 +v 0.636300 2.283069 1.178050 +v 0.807085 2.485164 0.703675 +v 0.458493 1.667159 -0.473743 +v 0.771936 1.849440 -0.359416 +v 1.020196 2.001976 -0.115197 +v 1.165479 2.101544 0.221734 +v 0.872798 2.282114 1.018311 +v 1.185667 2.132987 0.600082 +v 0.127587 1.482884 -0.440773 +v 0.180842 1.214295 -0.360321 +v 0.556895 1.170871 -0.325088 +v 0.900505 1.201008 -0.165189 +v 1.159359 1.300118 0.095033 +v 1.294049 1.453112 0.415961 +v 1.077685 2.091517 0.962247 +v 1.284069 1.636698 0.748737 +v -0.170405 1.324668 -0.265524 +v 0.857974 1.983448 1.253093 +v 1.130940 1.822928 1.042698 +v -0.845385 -0.716125 -0.956977 +v -0.836990 -0.912054 -1.282683 +v -0.587579 -0.730881 -0.835457 +v -0.758459 -0.983344 -1.647778 +v -0.360626 -0.939319 -1.058143 +v -0.621747 -0.919141 -1.996678 +v -0.136060 -1.018967 -1.354402 +v -0.447669 -0.729220 -2.276267 +v 0.051933 -0.957699 -1.679131 +v -0.262724 -0.442495 -2.443980 +v 0.174731 -0.764843 -1.982891 +v -0.095071 -0.102616 -2.474283 +v 0.213640 -0.469759 -2.219440 +v -0.425770 -0.551876 -0.683062 +v -0.061642 -0.608561 -0.776556 +v 0.254582 -0.586811 -0.986490 +v 0.474761 -0.489937 -1.280905 +v 0.565373 -0.332687 -1.614979 +v 0.162735 -0.117372 -2.352763 +v 0.512624 -0.139001 -1.937852 +v -0.454743 -0.283970 -0.589064 +v -0.115178 -0.113535 -0.602870 +v 0.184634 0.059972 -0.759559 +v 0.399049 0.210136 -1.035277 +v 0.495424 0.314096 -1.388048 +v 0.324544 0.061633 -2.200369 +v 0.459088 0.356025 -1.764166 +v -0.657527 -0.084098 -0.608525 +v -0.489874 0.255781 -0.638829 +v -0.304930 0.542506 -0.806542 +v -0.130851 0.732427 -1.086131 +v 0.005861 0.796630 -1.435031 +v 0.295571 0.329539 -2.106371 +v 0.084392 0.725340 -1.800126 +v -0.915334 -0.069342 -0.730046 +v -0.966238 0.283045 -0.863369 +v -0.927329 0.578129 -1.099917 +v -0.804531 0.770985 -1.403678 +v -0.616539 0.832253 -1.728406 +v 0.092787 0.529411 -2.125832 +v -0.391972 0.752605 -2.024665 +v -1.077143 -0.248347 -0.882440 +v -1.265222 -0.047713 -1.144957 +v -1.317971 0.145973 -1.467830 +v -1.227359 0.303223 -1.801903 +v -1.007181 0.400097 -2.096319 +v -0.165019 0.544167 -2.247352 +v -0.690956 0.421847 -2.306253 +v -1.048169 -0.516253 -0.976438 +v -1.211686 -0.542739 -1.318642 +v -1.248023 -0.500810 -1.694761 +v -1.151647 -0.396850 -2.047532 +v -0.937232 -0.246686 -2.323250 +v -0.326828 0.365162 -2.399746 +v -0.637420 -0.073179 -2.479939 +v -0.782366 -0.425386 -0.720244 +v 0.029768 0.238672 -2.362565 +v -0.297855 0.097256 -2.493744 +v 0.034820 -0.766504 -0.542081 +v 0.043216 -0.962433 -0.867788 +v 0.292627 -0.781259 -0.420561 +v 0.121747 -1.033722 -1.232882 +v 0.519579 -0.989697 -0.643248 +v 0.258458 -0.969519 -1.581782 +v 0.744146 -1.069345 -0.939507 +v 0.432537 -0.779598 -1.861371 +v 0.932138 -1.008077 -1.264235 +v 0.617481 -0.492873 -2.029084 +v 1.054936 -0.815221 -1.567996 +v 0.785135 -0.152995 -2.059388 +v 1.093845 -0.520137 -1.804544 +v 0.454436 -0.602254 -0.268167 +v 0.818564 -0.658939 -0.361660 +v 1.134788 -0.637189 -0.571595 +v 1.354966 -0.540315 -0.866010 +v 1.445578 -0.383066 -1.200084 +v 1.042941 -0.167750 -1.937868 +v 1.392830 -0.189380 -1.522957 +v 0.425462 -0.334348 -0.174169 +v 0.765028 -0.163913 -0.187975 +v 1.064840 0.009594 -0.344664 +v 1.279255 0.159758 -0.620381 +v 1.375630 0.263718 -0.973153 +v 1.204750 0.011255 -1.785474 +v 1.339293 0.305647 -1.349271 +v 0.222678 -0.134476 -0.193630 +v 0.390332 0.205402 -0.223934 +v 0.575276 0.492128 -0.391647 +v 0.749355 0.682049 -0.671236 +v 0.886066 0.746251 -1.020136 +v 1.175776 0.279161 -1.691476 +v 0.964598 0.674962 -1.385230 +v -0.035128 -0.119721 -0.315150 +v -0.086032 0.232667 -0.448474 +v -0.047123 0.527750 -0.685022 +v 0.075675 0.720607 -0.988783 +v 0.263667 0.781874 -1.313511 +v 0.972993 0.479033 -1.710937 +v 0.488234 0.702226 -1.609770 +v -0.196937 -0.298725 -0.467544 +v -0.385016 -0.098091 -0.730062 +v -0.437765 0.095595 -1.052934 +v -0.347153 0.252844 -1.387008 +v -0.126975 0.349718 -1.681423 +v 0.715187 0.493788 -1.832457 +v 0.189250 0.371469 -1.891358 +v -0.167963 -0.566632 -0.561542 +v -0.331480 -0.593117 -0.903747 +v -0.367817 -0.551189 -1.279865 +v -0.271442 -0.447229 -1.632637 +v -0.057027 -0.297065 -1.908355 +v 0.553377 0.314784 -1.984851 +v 0.242786 -0.123558 -2.065043 +v 0.097839 -0.475764 -0.305349 +v 0.909974 0.188293 -1.947670 +v 0.582351 0.046877 -2.078849 +v 0.915026 -0.816882 -0.127186 +v 0.923421 -1.012811 -0.452893 +v 1.172832 -0.831638 -0.005666 +v 1.001952 -1.084100 -0.817987 +v 1.399785 -1.040075 -0.228353 +v 1.138664 -1.019898 -1.166887 +v 1.624352 -1.119723 -0.524612 +v 1.312743 -0.829977 -1.446476 +v 1.812344 -1.058455 -0.849340 +v 1.497687 -0.543251 -1.614189 +v 1.935142 -0.865599 -1.153101 +v 1.665340 -0.203373 -1.644492 +v 1.974051 -0.570516 -1.389649 +v 1.334641 -0.652633 0.146728 +v 1.698769 -0.709318 0.053235 +v 2.014994 -0.687568 -0.156699 +v 2.235172 -0.590694 -0.451115 +v 2.325784 -0.433444 -0.785188 +v 1.923146 -0.218128 -1.522972 +v 2.273035 -0.239758 -1.108061 +v 1.305668 -0.384726 0.240726 +v 1.645233 -0.214291 0.226921 +v 1.945045 -0.040785 0.070232 +v 2.159460 0.109379 -0.205486 +v 2.255836 0.213339 -0.558257 +v 2.084956 -0.039124 -1.370578 +v 2.219499 0.255268 -0.934376 +v 1.102884 -0.184854 0.221265 +v 1.270537 0.155024 0.190961 +v 1.455482 0.441749 0.023249 +v 1.629561 0.631670 -0.256340 +v 1.766272 0.695873 -0.605240 +v 2.055982 0.228783 -1.276580 +v 1.844803 0.624583 -0.970335 +v 0.845078 -0.170099 0.099745 +v 0.794174 0.182288 -0.033579 +v 0.833082 0.477372 -0.270127 +v 0.955880 0.670228 -0.573887 +v 1.143873 0.731496 -0.898616 +v 1.853198 0.428655 -1.296041 +v 1.368439 0.651848 -1.194875 +v 0.683269 -0.349104 -0.052649 +v 0.495189 -0.148469 -0.315166 +v 0.442440 0.045216 -0.638039 +v 0.533053 0.202466 -0.972113 +v 0.753231 0.299340 -1.266528 +v 1.595392 0.443410 -1.417561 +v 1.069455 0.321090 -1.476463 +v 0.712242 -0.617010 -0.146647 +v 0.548725 -0.643496 -0.488852 +v 0.512389 -0.601567 -0.864970 +v 0.608764 -0.497607 -1.217741 +v 0.823179 -0.347443 -1.493459 +v 1.433583 0.264405 -1.569956 +v 1.122991 -0.173936 -1.650148 +v 0.978045 -0.526142 0.109547 +v 1.790179 0.137915 -1.532774 +v 1.462557 -0.003501 -1.663953 +v -0.504204 0.173375 -0.428600 +v -0.495809 -0.022554 -0.754306 +v -0.246398 0.158620 -0.307080 +v -0.417278 -0.093843 -1.119401 +v -0.019445 -0.049818 -0.529767 +v -0.280566 -0.029640 -1.468301 +v 0.205122 -0.129466 -0.826025 +v -0.106487 0.160281 -1.747890 +v 0.393114 -0.068198 -1.150754 +v 0.078457 0.447006 -1.915603 +v 0.515912 0.124658 -1.454515 +v 0.246110 0.786884 -1.945906 +v 0.554821 0.419741 -1.691063 +v -0.084589 0.337624 -0.154686 +v 0.279539 0.280939 -0.248179 +v 0.595763 0.302689 -0.458113 +v 0.815942 0.399563 -0.752528 +v 0.906554 0.556813 -1.086602 +v 0.503917 0.772129 -1.824386 +v 0.853805 0.750499 -1.409475 +v -0.113562 0.605531 -0.060688 +v 0.226003 0.775966 -0.074493 +v 0.525815 0.949473 -0.231182 +v 0.740230 1.099637 -0.506900 +v 0.836606 1.203596 -0.859671 +v 0.665726 0.951133 -1.671992 +v 0.800269 1.245525 -1.235790 +v -0.316346 0.805403 -0.080149 +v -0.148693 1.145281 -0.110453 +v 0.036252 1.432006 -0.278165 +v 0.210330 1.621927 -0.557754 +v 0.347042 1.686130 -0.906654 +v 0.636752 1.219040 -1.577994 +v 0.425573 1.614841 -1.271749 +v -0.574152 0.820158 -0.201669 +v -0.625057 1.172545 -0.334992 +v -0.586148 1.467629 -0.571540 +v -0.463350 1.660485 -0.875301 +v -0.275357 1.721753 -1.200030 +v 0.433968 1.418912 -1.597455 +v -0.050791 1.642105 -1.496289 +v -0.735961 0.641153 -0.354063 +v -0.924041 0.841788 -0.616580 +v -0.976790 1.035473 -0.939453 +v -0.886178 1.192723 -1.273527 +v -0.665999 1.289597 -1.567942 +v 0.176162 1.433667 -1.718975 +v -0.349775 1.311347 -1.777876 +v -0.706988 0.373247 -0.448061 +v -0.870505 0.346761 -0.790266 +v -0.906841 0.388690 -1.166384 +v -0.810466 0.492650 -1.519155 +v -0.596051 0.642814 -1.794873 +v 0.014353 1.254662 -1.871369 +v -0.296239 0.816321 -1.951562 +v -0.441185 0.464115 -0.191867 +v 0.370949 1.128172 -1.834188 +v 0.043326 0.986756 -1.965367 +v 0.376002 0.122997 -0.013705 +v 0.384397 -0.072932 -0.339411 +v 0.633808 0.108241 0.107815 +v 0.462928 -0.144222 -0.704505 +v 0.860760 -0.100197 -0.114871 +v 0.599639 -0.080019 -1.053406 +v 1.085327 -0.179845 -0.411130 +v 0.773718 0.109902 -1.332994 +v 1.273320 -0.118577 -0.735859 +v 0.958663 0.396627 -1.500707 +v 1.396117 0.074279 -1.039619 +v 1.126316 0.736506 -1.531011 +v 1.435026 0.369363 -1.276168 +v 0.795617 0.287246 0.260210 +v 1.159745 0.230561 0.166716 +v 1.475969 0.252311 -0.043218 +v 1.696147 0.349185 -0.337633 +v 1.786759 0.506435 -0.671707 +v 1.384122 0.721750 -1.409491 +v 1.734010 0.700120 -0.994580 +v 0.766643 0.555152 0.354208 +v 1.106209 0.725587 0.340402 +v 1.406021 0.899094 0.183713 +v 1.620436 1.049258 -0.092005 +v 1.716811 1.153218 -0.444776 +v 1.545931 0.900755 -1.257097 +v 1.680474 1.195147 -0.820894 +v 0.563859 0.755024 0.334747 +v 0.731513 1.094903 0.304443 +v 0.916457 1.381628 0.136730 +v 1.090536 1.571549 -0.142859 +v 1.227247 1.635752 -0.491759 +v 1.516958 1.168661 -1.163099 +v 1.305779 1.564462 -0.856854 +v 0.306053 0.769780 0.213227 +v 0.255149 1.122167 0.079903 +v 0.294058 1.417251 -0.156645 +v 0.416856 1.610107 -0.460406 +v 0.604848 1.671375 -0.785134 +v 1.314174 1.368533 -1.182560 +v 0.829415 1.591727 -1.081393 +v 0.144244 0.590775 0.060832 +v -0.043835 0.791409 -0.201685 +v -0.096584 0.985095 -0.524558 +v -0.005972 1.142345 -0.858631 +v 0.214206 1.239219 -1.153047 +v 1.056368 1.383289 -1.304080 +v 0.530431 1.260969 -1.362981 +v 0.173218 0.322869 -0.033166 +v 0.009701 0.296383 -0.375370 +v -0.026636 0.338312 -0.751489 +v 0.069740 0.442272 -1.104260 +v 0.284155 0.592436 -1.379978 +v 0.894558 1.204284 -1.456474 +v 0.583967 0.765943 -1.536667 +v 0.439020 0.413736 0.223028 +v 1.251155 1.077794 -1.419293 +v 0.923532 0.936378 -1.550472 +v -0.163023 1.062875 0.099777 +v -0.154628 0.866947 -0.225929 +v 0.094783 1.048120 0.221297 +v -0.076097 0.795657 -0.591024 +v 0.321736 0.839682 -0.001390 +v 0.060615 0.859860 -0.939924 +v 0.546303 0.760034 -0.297649 +v 0.234694 1.049781 -1.219513 +v 0.734295 0.821302 -0.622377 +v 0.419638 1.336506 -1.387226 +v 0.857093 1.014158 -0.926138 +v 0.587291 1.676384 -1.417529 +v 0.896002 1.309242 -1.162686 +v 0.256592 1.227125 0.373691 +v 0.620720 1.170440 0.280198 +v 0.936944 1.192190 0.070264 +v 1.157123 1.289064 -0.224152 +v 1.247735 1.446314 -0.558225 +v 0.845098 1.661629 -1.296009 +v 1.194986 1.639999 -0.881098 +v 0.227619 1.495031 0.467689 +v 0.567184 1.665466 0.453884 +v 0.866996 1.838973 0.297195 +v 1.081411 1.989137 0.021477 +v 1.177787 2.093097 -0.331294 +v 1.006907 1.840634 -1.143615 +v 1.141450 2.135026 -0.707413 +v 0.024835 1.694903 0.448228 +v 0.192488 2.034781 0.417924 +v 0.377433 2.321507 0.250212 +v 0.551511 2.511428 -0.029377 +v 0.688223 2.575631 -0.378277 +v 0.977933 2.108540 -1.049617 +v 0.766754 2.504341 -0.743372 +v -0.232971 1.709659 0.326708 +v -0.283875 2.062046 0.193385 +v -0.244967 2.357130 -0.043164 +v -0.122169 2.549986 -0.346924 +v 0.065824 2.611253 -0.671653 +v 0.775149 2.308412 -1.069078 +v 0.290391 2.531605 -0.967912 +v -0.394780 1.530654 0.174314 +v -0.582860 1.731288 -0.088203 +v -0.635609 1.924974 -0.411076 +v -0.544996 2.082223 -0.745150 +v -0.324818 2.179098 -1.039565 +v 0.517343 2.323168 -1.190598 +v -0.008594 2.200848 -1.249500 +v -0.365807 1.262747 0.080316 +v -0.529323 1.236262 -0.261889 +v -0.565660 1.278190 -0.638007 +v -0.469285 1.382150 -0.990778 +v -0.254870 1.532314 -1.266496 +v 0.355534 2.144163 -1.342992 +v 0.044942 1.705822 -1.423185 +v -0.100004 1.353615 0.336510 +v 0.712130 2.017673 -1.305811 +v 0.384508 1.876257 -1.436990 +vt 0.825269 0.653237 +vt 0.839805 0.644867 +vt 0.825269 0.668555 +vt 0.303150 0.181763 +vt 0.320652 0.192664 +vt 0.288172 0.193944 +vt 0.709288 0.967084 +vt 0.729202 0.968803 +vt 0.710234 0.995196 +vt 0.749647 0.967943 +vt 0.730225 0.999231 +vt 0.767511 0.964636 +vt 0.750592 0.996055 +vt 0.763082 0.835940 +vt 0.746117 0.830842 +vt 0.763082 0.807637 +vt 0.275024 0.184518 +vt 0.261273 0.191550 +vt 0.301082 0.208579 +vt 0.262763 0.206938 +vt 0.311788 0.226195 +vt 0.267883 0.225557 +vt 0.318660 0.244110 +vt 0.275854 0.244572 +vt 0.320652 0.259596 +vt 0.285461 0.261088 +vt 0.746117 0.815524 +vt 0.742972 0.787315 +vt 0.814385 0.679553 +vt 0.819696 0.693493 +vt 0.798994 0.679789 +vt 0.241808 0.213134 +vt 0.240504 0.233652 +vt 0.246218 0.253333 +vt 0.749148 0.774460 +vt 0.711990 0.773891 +vt 0.735234 0.804527 +vt 0.714533 0.786880 +vt 0.791256 0.693928 +vt 0.788111 0.669124 +vt 0.924704 0.984453 +vt 0.907062 0.989892 +vt 0.923981 0.955922 +vt 0.886695 0.992104 +vt 0.906117 0.952615 +vt 0.866703 0.990751 +vt 0.885672 0.951755 +vt 0.850132 0.986039 +vt 0.865758 0.953473 +vt 0.719843 0.804291 +vt 0.694423 0.806586 +vt 0.771147 0.674222 +vt 0.788111 0.653806 +vt 0.924704 0.934406 +vt 0.907062 0.924503 +vt 0.886695 0.921327 +vt 0.160356 0.080018 +vt 0.142840 0.090882 +vt 0.140132 0.063929 +vt 0.708960 0.814956 +vt 0.694423 0.834890 +vt 0.771147 0.645918 +vt 0.798994 0.642808 +vt 0.160356 0.013058 +vt 0.157988 0.028476 +vt 0.134937 0.000000 +vt 0.150887 0.046339 +vt 0.124778 0.011415 +vt 0.114940 0.027872 +vt 0.127361 0.078568 +vt 0.106921 0.046868 +vt 0.114518 0.088027 +vt 0.101942 0.065510 +vt 0.791256 0.625597 +vt 0.814385 0.642573 +vt 0.785081 0.612741 +vt 0.819696 0.625161 +vt 0.098034 0.003375 +vt 0.085993 0.019171 +vt 0.080178 0.038829 +vt 0.714533 0.855211 +vt 0.719843 0.841272 +vt 0.742972 0.855646 +vt 0.807116 0.661755 +vt 0.727112 0.823474 +vt 0.708960 0.830274 +vt 0.735234 0.841507 +vt 0.693662 0.934518 +vt 0.710234 0.929807 +vt 0.692938 0.963049 +vt 0.730225 0.928454 +vt 0.750592 0.930666 +vt 0.768234 0.936105 +vt 0.825303 0.316785 +vt 0.839840 0.308415 +vt 0.825303 0.332102 +vt 0.062676 0.181763 +vt 0.080178 0.192664 +vt 0.047698 0.193944 +vt 0.633992 0.967084 +vt 0.653906 0.968803 +vt 0.634938 0.995196 +vt 0.674351 0.967943 +vt 0.654929 0.999231 +vt 0.692215 0.964636 +vt 0.675296 0.996055 +vt 0.852755 0.254655 +vt 0.835791 0.249557 +vt 0.852755 0.226351 +vt 0.034550 0.184518 +vt 0.020799 0.191550 +vt 0.060608 0.208579 +vt 0.022289 0.206938 +vt 0.071314 0.226195 +vt 0.027409 0.225557 +vt 0.078186 0.244110 +vt 0.035380 0.244572 +vt 0.080178 0.259596 +vt 0.044987 0.261088 +vt 0.835791 0.234239 +vt 0.832645 0.206030 +vt 0.814420 0.343100 +vt 0.819730 0.357040 +vt 0.799029 0.343336 +vt 0.001334 0.213134 +vt 0.000030 0.233652 +vt 0.005744 0.253333 +vt 0.838821 0.193174 +vt 0.801664 0.192606 +vt 0.824907 0.223241 +vt 0.804206 0.205595 +vt 0.791291 0.357475 +vt 0.788146 0.332671 +vt 0.998511 0.596658 +vt 0.980868 0.602098 +vt 0.997787 0.568128 +vt 0.960501 0.604309 +vt 0.979923 0.564820 +vt 0.940510 0.602956 +vt 0.959478 0.563960 +vt 0.923938 0.598245 +vt 0.939565 0.565679 +vt 0.809516 0.223006 +vt 0.784096 0.225301 +vt 0.771181 0.337769 +vt 0.788146 0.317353 +vt 0.998511 0.546612 +vt 0.980868 0.536709 +vt 0.960501 0.533533 +vt 0.240533 0.080018 +vt 0.223017 0.090882 +vt 0.220309 0.063929 +vt 0.798633 0.233670 +vt 0.784097 0.253604 +vt 0.771181 0.309465 +vt 0.799029 0.306355 +vt 0.240533 0.013058 +vt 0.238166 0.028476 +vt 0.215115 0.000000 +vt 0.231064 0.046339 +vt 0.204955 0.011415 +vt 0.195117 0.027872 +vt 0.207539 0.078568 +vt 0.187099 0.046868 +vt 0.194696 0.088027 +vt 0.182120 0.065510 +vt 0.791291 0.289144 +vt 0.819730 0.288709 +vt 0.785115 0.276288 +vt 0.178212 0.003375 +vt 0.166171 0.019171 +vt 0.160356 0.038829 +vt 0.804206 0.273926 +vt 0.809516 0.259986 +vt 0.832645 0.274361 +vt 0.807151 0.325302 +vt 0.816786 0.242188 +vt 0.798633 0.248988 +vt 0.814420 0.306120 +vt 0.824907 0.260222 +vt 0.618366 0.934518 +vt 0.634938 0.929807 +vt 0.617643 0.963049 +vt 0.654929 0.928454 +vt 0.675296 0.930666 +vt 0.692938 0.936105 +vt 0.443302 0.503616 +vt 0.457838 0.495246 +vt 0.443302 0.518934 +vt 0.303180 0.000000 +vt 0.320682 0.010901 +vt 0.288202 0.012181 +vt 0.032598 0.967497 +vt 0.052512 0.969216 +vt 0.033544 0.995609 +vt 0.072957 0.968356 +vt 0.053535 0.999644 +vt 0.090821 0.965048 +vt 0.073902 0.996468 +vt 0.775356 0.023413 +vt 0.792320 0.028511 +vt 0.775356 0.051717 +vt 0.275054 0.002754 +vt 0.261302 0.009787 +vt 0.301112 0.026816 +vt 0.262793 0.025175 +vt 0.311817 0.044432 +vt 0.267913 0.043793 +vt 0.318689 0.062347 +vt 0.275884 0.062808 +vt 0.320681 0.077833 +vt 0.285491 0.079324 +vt 0.792320 0.043829 +vt 0.795466 0.072038 +vt 0.432419 0.529932 +vt 0.437729 0.543872 +vt 0.417027 0.530168 +vt 0.241837 0.031370 +vt 0.246248 0.071570 +vt 0.789290 0.084894 +vt 0.823905 0.072474 +vt 0.803203 0.054827 +vt 0.409290 0.544307 +vt 0.406144 0.519503 +vt 0.998783 0.911631 +vt 0.981141 0.917070 +vt 0.998060 0.883100 +vt 0.960774 0.919282 +vt 0.980196 0.879793 +vt 0.940782 0.917929 +vt 0.959751 0.878933 +vt 0.924211 0.913217 +vt 0.939837 0.880652 +vt 0.818595 0.055063 +vt 0.844014 0.052768 +vt 0.389180 0.524601 +vt 0.406144 0.504185 +vt 0.998783 0.861584 +vt 0.981141 0.851681 +vt 0.960774 0.848505 +vt 0.080178 0.170900 +vt 0.059954 0.154811 +vt 0.829478 0.044398 +vt 0.844014 0.024464 +vt 0.389180 0.496297 +vt 0.417027 0.493187 +vt 0.080178 0.103940 +vt 0.077811 0.119357 +vt 0.054759 0.090882 +vt 0.070709 0.137221 +vt 0.044600 0.102296 +vt 0.034762 0.118754 +vt 0.047183 0.169450 +vt 0.026743 0.137750 +vt 0.034341 0.178908 +vt 0.021765 0.156392 +vt 0.409289 0.475976 +vt 0.432419 0.492952 +vt 0.403114 0.463120 +vt 0.437729 0.475540 +vt 0.017857 0.094257 +vt 0.005815 0.110053 +vt 0.000000 0.129711 +vt 0.823905 0.004142 +vt 0.818595 0.018082 +vt 0.795466 0.003707 +vt 0.425149 0.512134 +vt 0.811325 0.035880 +vt 0.829478 0.029080 +vt 0.803203 0.017846 +vt 0.016972 0.934931 +vt 0.033544 0.930220 +vt 0.016248 0.963462 +vt 0.053535 0.928867 +vt 0.073902 0.931078 +vt 0.091544 0.936518 +vt 0.827798 0.144751 +vt 0.842335 0.136382 +vt 0.827798 0.160069 +vt 0.223002 0.181763 +vt 0.240504 0.192664 +vt 0.208024 0.193944 +vt 0.941054 0.959957 +vt 0.960967 0.961675 +vt 0.941999 0.988069 +vt 0.981412 0.960816 +vt 0.961990 0.992103 +vt 0.999277 0.957508 +vt 0.982358 0.988927 +vt 0.774001 0.388189 +vt 0.790965 0.393287 +vt 0.774001 0.416493 +vt 0.194876 0.184518 +vt 0.181125 0.191550 +vt 0.220934 0.208579 +vt 0.182615 0.206938 +vt 0.231640 0.226195 +vt 0.187735 0.225557 +vt 0.238512 0.244110 +vt 0.195706 0.244572 +vt 0.240504 0.259596 +vt 0.205313 0.261088 +vt 0.790965 0.408605 +vt 0.794111 0.436814 +vt 0.816915 0.171067 +vt 0.822225 0.185007 +vt 0.801524 0.171303 +vt 0.161660 0.213134 +vt 0.160356 0.233652 +vt 0.166070 0.253333 +vt 0.787935 0.449670 +vt 0.825092 0.450239 +vt 0.801848 0.419603 +vt 0.822550 0.437250 +vt 0.793786 0.185442 +vt 0.790641 0.160638 +vt 0.993362 0.768033 +vt 0.975720 0.773472 +vt 0.992639 0.739502 +vt 0.955353 0.775683 +vt 0.974775 0.736195 +vt 0.935362 0.774330 +vt 0.954330 0.735335 +vt 0.918790 0.769619 +vt 0.934417 0.737053 +vt 0.817240 0.419839 +vt 0.842659 0.417544 +vt 0.773676 0.165736 +vt 0.790641 0.145320 +vt 0.993362 0.717986 +vt 0.975720 0.708083 +vt 0.955353 0.704907 +vt 0.080178 0.080018 +vt 0.062662 0.090882 +vt 0.059954 0.063929 +vt 0.828123 0.409174 +vt 0.842659 0.389240 +vt 0.773676 0.137432 +vt 0.801524 0.134322 +vt 0.080178 0.013058 +vt 0.077811 0.028476 +vt 0.054759 0.000000 +vt 0.070709 0.046339 +vt 0.044600 0.011415 +vt 0.034762 0.027872 +vt 0.047183 0.078568 +vt 0.026743 0.046868 +vt 0.034341 0.088027 +vt 0.021765 0.065510 +vt 0.793786 0.117111 +vt 0.816915 0.134087 +vt 0.787610 0.104255 +vt 0.822225 0.116675 +vt 0.017857 0.003375 +vt 0.005815 0.019171 +vt 0.000000 0.038829 +vt 0.822550 0.368918 +vt 0.817240 0.382858 +vt 0.794111 0.368483 +vt 0.809646 0.153269 +vt 0.809970 0.400656 +vt 0.828123 0.393856 +vt 0.801848 0.382622 +vt 0.925427 0.927391 +vt 0.941999 0.922680 +vt 0.924704 0.955922 +vt 0.961990 0.921327 +vt 0.982358 0.923538 +vt 1.000000 0.928978 +vt 0.825471 0.734993 +vt 0.840007 0.726623 +vt 0.825471 0.750311 +vt 0.303180 0.090936 +vt 0.320682 0.101837 +vt 0.288202 0.103117 +vt 0.474666 0.967497 +vt 0.494579 0.969216 +vt 0.475611 0.995609 +vt 0.515024 0.968356 +vt 0.495602 0.999644 +vt 0.532888 0.965048 +vt 0.515969 0.996467 +vt 0.694423 0.835940 +vt 0.677459 0.830842 +vt 0.694423 0.807637 +vt 0.275054 0.093691 +vt 0.261302 0.100723 +vt 0.301112 0.117752 +vt 0.262793 0.116111 +vt 0.311817 0.135368 +vt 0.267913 0.134730 +vt 0.318689 0.153283 +vt 0.275884 0.153745 +vt 0.320681 0.168769 +vt 0.285491 0.170261 +vt 0.677459 0.815524 +vt 0.674314 0.787315 +vt 0.814587 0.761309 +vt 0.819897 0.775248 +vt 0.799196 0.761544 +vt 0.241837 0.122307 +vt 0.240533 0.142825 +vt 0.246248 0.162506 +vt 0.680490 0.774460 +vt 0.643332 0.773891 +vt 0.666576 0.804527 +vt 0.645875 0.786880 +vt 0.791458 0.775683 +vt 0.788313 0.750879 +vt 0.998783 0.840854 +vt 0.981141 0.846294 +vt 0.998060 0.812324 +vt 0.980196 0.809016 +vt 0.940782 0.847152 +vt 0.959751 0.808157 +vt 0.924211 0.842441 +vt 0.939837 0.809875 +vt 0.651185 0.804291 +vt 0.625765 0.806586 +vt 0.771349 0.755977 +vt 0.788313 0.735561 +vt 0.998783 0.790808 +vt 0.981141 0.780905 +vt 0.960774 0.777729 +vt 0.160356 0.170900 +vt 0.142840 0.181763 +vt 0.140132 0.154811 +vt 0.640301 0.814956 +vt 0.625765 0.834890 +vt 0.771349 0.727674 +vt 0.799196 0.724564 +vt 0.160356 0.103940 +vt 0.157988 0.119357 +vt 0.134937 0.090882 +vt 0.150887 0.137221 +vt 0.124778 0.102296 +vt 0.114940 0.118754 +vt 0.127361 0.169450 +vt 0.106921 0.137750 +vt 0.114518 0.178908 +vt 0.101942 0.156392 +vt 0.791458 0.707352 +vt 0.814587 0.724328 +vt 0.785282 0.694497 +vt 0.819897 0.706917 +vt 0.098034 0.094257 +vt 0.085993 0.110053 +vt 0.080178 0.129711 +vt 0.645875 0.855211 +vt 0.651185 0.841272 +vt 0.674314 0.855646 +vt 0.807318 0.743511 +vt 0.658454 0.823474 +vt 0.640301 0.830274 +vt 0.666576 0.841507 +vt 0.459039 0.934931 +vt 0.475611 0.930220 +vt 0.458316 0.963462 +vt 0.495602 0.928867 +vt 0.515969 0.931078 +vt 0.533612 0.936518 +vt 0.825303 0.491422 +vt 0.839840 0.483052 +vt 0.825303 0.506740 +vt 0.160326 0.192664 +vt 0.127846 0.193944 +vt 0.552725 0.967019 +vt 0.572639 0.968738 +vt 0.553670 0.995131 +vt 0.593084 0.967878 +vt 0.573662 0.999166 +vt 0.610948 0.964570 +vt 0.594029 0.995990 +vt 0.605034 0.835875 +vt 0.588069 0.830777 +vt 0.605034 0.807571 +vt 0.114698 0.184518 +vt 0.100947 0.191550 +vt 0.140756 0.208579 +vt 0.102437 0.206938 +vt 0.151462 0.226195 +vt 0.107558 0.225557 +vt 0.158334 0.244110 +vt 0.115528 0.244572 +vt 0.160326 0.259596 +vt 0.125135 0.261088 +vt 0.588069 0.815459 +vt 0.584924 0.787250 +vt 0.814420 0.517738 +vt 0.819730 0.531677 +vt 0.799029 0.517973 +vt 0.081482 0.213134 +vt 0.080178 0.233652 +vt 0.085892 0.253333 +vt 0.591100 0.774395 +vt 0.553942 0.773826 +vt 0.577186 0.804461 +vt 0.556485 0.786815 +vt 0.791291 0.532112 +vt 0.788146 0.507308 +vt 0.993389 0.077812 +vt 0.975747 0.083251 +vt 0.992666 0.049281 +vt 0.955380 0.085462 +vt 0.974802 0.045974 +vt 0.935388 0.084110 +vt 0.954357 0.045114 +vt 0.918817 0.079398 +vt 0.934443 0.046832 +vt 0.561795 0.804226 +vt 0.536375 0.806521 +vt 0.771181 0.512406 +vt 0.788146 0.491990 +vt 0.993389 0.027765 +vt 0.975747 0.017862 +vt 0.955380 0.014686 +vt 0.240533 0.170900 +vt 0.220309 0.154811 +vt 0.550912 0.814891 +vt 0.536375 0.834825 +vt 0.771181 0.484103 +vt 0.799029 0.480992 +vt 0.240533 0.103940 +vt 0.238166 0.119357 +vt 0.215115 0.090882 +vt 0.231064 0.137221 +vt 0.204955 0.102296 +vt 0.195117 0.118754 +vt 0.207539 0.169450 +vt 0.187099 0.137750 +vt 0.194696 0.178908 +vt 0.182120 0.156392 +vt 0.791291 0.463781 +vt 0.814420 0.480757 +vt 0.785115 0.450926 +vt 0.819730 0.463346 +vt 0.178212 0.094257 +vt 0.166171 0.110053 +vt 0.160356 0.129711 +vt 0.556485 0.855146 +vt 0.561795 0.841206 +vt 0.584924 0.855581 +vt 0.807151 0.499939 +vt 0.569064 0.823408 +vt 0.550912 0.830209 +vt 0.577186 0.841442 +vt 0.537099 0.934453 +vt 0.553670 0.929742 +vt 0.536375 0.962984 +vt 0.573662 0.928389 +vt 0.594029 0.930600 +vt 0.611671 0.936040 +vt 0.335889 0.698867 +vt 0.339295 0.681711 +vt 0.349087 0.705810 +vt 0.344914 0.662600 +vt 0.363682 0.694539 +vt 0.351891 0.644445 +vt 0.376777 0.679361 +vt 0.359163 0.630008 +vt 0.386379 0.662587 +vt 0.076677 0.631463 +vt 0.086117 0.647344 +vt 0.054214 0.641208 +vt 0.720786 0.233514 +vt 0.732601 0.249733 +vt 0.711465 0.252422 +vt 0.446511 0.714789 +vt 0.463744 0.722424 +vt 0.440043 0.724990 +vt 0.374588 0.709971 +vt 0.023422 0.628538 +vt 0.038236 0.631985 +vt 0.005099 0.658814 +vt 0.018403 0.664756 +vt 0.068924 0.654802 +vt 0.035891 0.671484 +vt 0.080127 0.670698 +vt 0.072537 0.683239 +vt 0.451792 0.741274 +vt 0.425851 0.729184 +vt 0.460114 0.758442 +vt 0.425568 0.749023 +vt 0.463744 0.773881 +vt 0.425851 0.768567 +vt 0.014669 0.700553 +vt 0.054901 0.677974 +vt 0.032441 0.704556 +vt 0.052260 0.703287 +vt 0.412248 0.724914 +vt 0.400433 0.741133 +vt 0.426657 0.784840 +vt 0.393011 0.758258 +vt 0.698862 0.763287 +vt 0.694423 0.744840 +vt 0.732212 0.759455 +vt 0.696034 0.724898 +vt 0.725236 0.741299 +vt 0.703448 0.706499 +vt 0.719616 0.722189 +vt 0.407203 0.714681 +vt 0.395224 0.611404 +vt 0.385941 0.627235 +vt 0.377532 0.603942 +vt 0.739485 0.773891 +vt 0.771349 0.757130 +vt 0.766701 0.741313 +vt 0.744004 0.709360 +vt 0.716211 0.705033 +vt 0.388909 0.588069 +vt 0.381269 0.575513 +vt 0.362826 0.617487 +vt 0.363416 0.580742 +vt 0.347028 0.626640 +vt 0.344382 0.587174 +vt 0.332545 0.630008 +vt 0.327065 0.593830 +vt 0.757099 0.724538 +vt 0.771349 0.704375 +vt 0.784096 0.252223 +vt 0.766864 0.259858 +vt 0.772144 0.233374 +vt 0.380040 0.561795 +vt 0.361145 0.555394 +vt 0.341414 0.554055 +vt 0.784096 0.200767 +vt 0.780467 0.216206 +vt 0.746204 0.206080 +vt 0.760396 0.249657 +vt 0.745920 0.225624 +vt 0.426657 0.712070 +vt 0.441467 0.704556 +vt 0.747010 0.262577 +vt 0.727556 0.259966 +vt 0.086117 0.686476 +vt 0.071108 0.696938 +vt 0.748217 0.274361 +vt 0.761820 0.270091 +vt 0.395224 0.572283 +vt 0.746204 0.245463 +vt 0.385941 0.554949 +vt 0.323126 0.697400 +vt 0.315712 0.679001 +vt 0.314101 0.659060 +vt 0.318540 0.640613 +vt 0.747010 0.189807 +vt 0.711465 0.200965 +vt 0.713364 0.216389 +vt 0.647586 0.074358 +vt 0.650992 0.057202 +vt 0.660785 0.081301 +vt 0.656611 0.038091 +vt 0.675379 0.070030 +vt 0.663588 0.019936 +vt 0.688475 0.054852 +vt 0.670861 0.005499 +vt 0.698077 0.038078 +vt 0.687636 0.375353 +vt 0.697076 0.391233 +vt 0.665173 0.385097 +vt 0.712046 0.044616 +vt 0.723861 0.060835 +vt 0.702724 0.063523 +vt 0.369501 0.720204 +vt 0.386733 0.727840 +vt 0.363033 0.730405 +vt 0.686286 0.085462 +vt 0.634381 0.372428 +vt 0.649195 0.375875 +vt 0.616058 0.402704 +vt 0.629362 0.408646 +vt 0.679883 0.398692 +vt 0.646850 0.415374 +vt 0.691086 0.414588 +vt 0.665860 0.421864 +vt 0.374781 0.746689 +vt 0.348557 0.754438 +vt 0.383104 0.763857 +vt 0.386733 0.779296 +vt 0.348840 0.773982 +vt 0.625628 0.444443 +vt 0.643400 0.448446 +vt 0.683496 0.427129 +vt 0.663219 0.447177 +vt 0.348840 0.734599 +vt 0.335238 0.730329 +vt 0.323423 0.746548 +vt 0.349647 0.790255 +vt 0.316001 0.763673 +vt 0.701514 0.437842 +vt 0.697076 0.419395 +vt 0.734865 0.434010 +vt 0.698686 0.399454 +vt 0.727888 0.415854 +vt 0.706100 0.381054 +vt 0.722269 0.396744 +vt 0.330193 0.720097 +vt 0.694256 0.334861 +vt 0.684973 0.350692 +vt 0.676564 0.327399 +vt 0.742137 0.448446 +vt 0.774001 0.431685 +vt 0.769354 0.415868 +vt 0.759751 0.399093 +vt 0.718863 0.379588 +vt 0.746656 0.383915 +vt 0.687941 0.311526 +vt 0.680301 0.298970 +vt 0.661858 0.340944 +vt 0.662448 0.304199 +vt 0.646060 0.350097 +vt 0.643414 0.310632 +vt 0.631577 0.353466 +vt 0.626097 0.317287 +vt 0.774001 0.378930 +vt 0.775356 0.063324 +vt 0.758124 0.070960 +vt 0.763404 0.044475 +vt 0.679072 0.285252 +vt 0.660177 0.278851 +vt 0.640446 0.277512 +vt 0.775356 0.011868 +vt 0.771726 0.027307 +vt 0.738270 0.000909 +vt 0.737463 0.017182 +vt 0.751656 0.060759 +vt 0.737180 0.036726 +vt 0.349647 0.717485 +vt 0.364456 0.709971 +vt 0.738270 0.073679 +vt 0.718816 0.071067 +vt 0.697076 0.430366 +vt 0.682067 0.440828 +vt 0.739477 0.085462 +vt 0.753079 0.081192 +vt 0.694256 0.295740 +vt 0.737463 0.056565 +vt 0.684973 0.278407 +vt 0.634824 0.072891 +vt 0.627409 0.054492 +vt 0.625799 0.034551 +vt 0.630237 0.016104 +vt 0.702724 0.012067 +vt 0.645907 0.169747 +vt 0.649312 0.152591 +vt 0.659105 0.176689 +vt 0.654931 0.133480 +vt 0.673700 0.165419 +vt 0.661908 0.115325 +vt 0.686795 0.150241 +vt 0.669181 0.100888 +vt 0.696397 0.133467 +vt 0.221094 0.627227 +vt 0.230534 0.643108 +vt 0.198631 0.636972 +vt 0.764355 0.141735 +vt 0.752540 0.125516 +vt 0.757585 0.115283 +vt 0.753915 0.623877 +vt 0.771147 0.631512 +vt 0.747446 0.634078 +vt 0.684606 0.180851 +vt 0.167839 0.624302 +vt 0.182653 0.627749 +vt 0.149516 0.654578 +vt 0.162820 0.660520 +vt 0.213341 0.650566 +vt 0.180308 0.667248 +vt 0.224544 0.666462 +vt 0.199318 0.673739 +vt 0.759195 0.650362 +vt 0.733254 0.638272 +vt 0.767517 0.667530 +vt 0.732971 0.658111 +vt 0.771147 0.682969 +vt 0.733254 0.677655 +vt 0.159086 0.696317 +vt 0.176858 0.700321 +vt 0.216954 0.679003 +vt 0.196677 0.699051 +vt 0.719651 0.634002 +vt 0.707836 0.650221 +vt 0.734060 0.693928 +vt 0.700414 0.667346 +vt 0.698694 0.346871 +vt 0.694256 0.328424 +vt 0.732045 0.343039 +vt 0.695867 0.308483 +vt 0.725068 0.324883 +vt 0.703281 0.290083 +vt 0.719449 0.305773 +vt 0.714607 0.623769 +vt 0.634539 0.251747 +vt 0.625256 0.267578 +vt 0.616848 0.244285 +vt 0.739318 0.357475 +vt 0.771181 0.340714 +vt 0.766534 0.324897 +vt 0.756932 0.308122 +vt 0.716044 0.288617 +vt 0.743836 0.292944 +vt 0.628224 0.228412 +vt 0.620585 0.215856 +vt 0.602141 0.257830 +vt 0.602731 0.221085 +vt 0.586344 0.266983 +vt 0.583697 0.227517 +vt 0.571860 0.270351 +vt 0.566380 0.234173 +vt 0.771181 0.287959 +vt 0.701045 0.123026 +vt 0.718277 0.115391 +vt 0.712997 0.141876 +vt 0.600460 0.195737 +vt 0.580729 0.194398 +vt 0.701045 0.174483 +vt 0.704674 0.159044 +vt 0.738131 0.185442 +vt 0.738938 0.169169 +vt 0.724745 0.125592 +vt 0.739221 0.149625 +vt 0.734060 0.621158 +vt 0.748870 0.613644 +vt 0.738131 0.112672 +vt 0.230534 0.682240 +vt 0.215525 0.692702 +vt 0.736924 0.100888 +vt 0.723321 0.105158 +vt 0.634539 0.212626 +vt 0.619355 0.202138 +vt 0.738937 0.129786 +vt 0.625256 0.195292 +vt 0.633144 0.168280 +vt 0.625730 0.149881 +vt 0.624119 0.129940 +vt 0.628557 0.111492 +vt 0.773676 0.174284 +vt 0.771777 0.158860 +vt 0.715938 0.601948 +vt 0.719344 0.584792 +vt 0.729137 0.608891 +vt 0.724963 0.565682 +vt 0.743731 0.597621 +vt 0.731940 0.547526 +vt 0.756827 0.582443 +vt 0.739213 0.533090 +vt 0.766429 0.565668 +vt 0.684711 0.539959 +vt 0.694151 0.555840 +vt 0.662248 0.549704 +vt 0.383992 0.040847 +vt 0.372177 0.024628 +vt 0.377222 0.014395 +vt 0.519143 0.714789 +vt 0.536375 0.722424 +vt 0.512675 0.724990 +vt 0.754637 0.613053 +vt 0.631457 0.537034 +vt 0.646270 0.540481 +vt 0.613133 0.567311 +vt 0.626437 0.573252 +vt 0.676959 0.563298 +vt 0.643925 0.579980 +vt 0.688161 0.579195 +vt 0.662935 0.586471 +vt 0.524423 0.741274 +vt 0.498482 0.729184 +vt 0.532746 0.758442 +vt 0.498199 0.749023 +vt 0.536375 0.773881 +vt 0.498482 0.768567 +vt 0.622703 0.609050 +vt 0.640475 0.613053 +vt 0.680571 0.591735 +vt 0.660294 0.611783 +vt 0.484880 0.724914 +vt 0.473065 0.741133 +vt 0.499289 0.784840 +vt 0.465643 0.758258 +vt 0.698694 0.521508 +vt 0.694256 0.503061 +vt 0.732045 0.517676 +vt 0.695866 0.483120 +vt 0.725068 0.499521 +vt 0.703281 0.464721 +vt 0.719449 0.480410 +vt 0.479835 0.714681 +vt 0.617498 0.675258 +vt 0.608215 0.691090 +vt 0.599806 0.667797 +vt 0.739318 0.532112 +vt 0.771181 0.515351 +vt 0.766534 0.499534 +vt 0.756932 0.482759 +vt 0.716043 0.463254 +vt 0.743836 0.467582 +vt 0.611183 0.651923 +vt 0.585690 0.644597 +vt 0.585100 0.681341 +vt 0.569302 0.690494 +vt 0.566656 0.651029 +vt 0.554819 0.693863 +vt 0.549339 0.657685 +vt 0.771181 0.462596 +vt 0.320682 0.022138 +vt 0.337914 0.014503 +vt 0.332634 0.040988 +vt 0.603543 0.639367 +vt 0.602314 0.625649 +vt 0.583418 0.619248 +vt 0.563688 0.617909 +vt 0.320682 0.073594 +vt 0.324311 0.058156 +vt 0.357768 0.084554 +vt 0.358574 0.068281 +vt 0.344382 0.024704 +vt 0.358858 0.048737 +vt 0.499289 0.712070 +vt 0.514099 0.704556 +vt 0.357768 0.011784 +vt 0.694151 0.594973 +vt 0.679142 0.605435 +vt 0.356561 0.000000 +vt 0.342958 0.004270 +vt 0.617498 0.636137 +vt 0.358574 0.028898 +vt 0.608215 0.618804 +vt 0.703175 0.600482 +vt 0.695761 0.582082 +vt 0.694151 0.562141 +vt 0.698589 0.543694 +vt 0.393313 0.073396 +vt 0.391414 0.057972 +vt 0.656327 0.263257 +vt 0.659732 0.246100 +vt 0.669525 0.270199 +vt 0.665352 0.226990 +vt 0.684120 0.258929 +vt 0.672328 0.208835 +vt 0.697215 0.243751 +vt 0.679601 0.194398 +vt 0.706817 0.226977 +vt 0.689075 0.620834 +vt 0.698515 0.636715 +vt 0.666613 0.630579 +vt 0.090465 0.506258 +vt 0.102280 0.522478 +vt 0.081144 0.525166 +vt 0.296869 0.720204 +vt 0.314101 0.727840 +vt 0.290401 0.730405 +vt 0.695026 0.274361 +vt 0.635821 0.617909 +vt 0.650635 0.621357 +vt 0.617498 0.648186 +vt 0.630802 0.654127 +vt 0.681323 0.644174 +vt 0.648290 0.660856 +vt 0.692526 0.660070 +vt 0.667299 0.667346 +vt 0.302149 0.746689 +vt 0.276209 0.734599 +vt 0.310472 0.763857 +vt 0.275925 0.754438 +vt 0.314101 0.779296 +vt 0.276209 0.773982 +vt 0.627068 0.689925 +vt 0.644840 0.693928 +vt 0.684936 0.672611 +vt 0.664658 0.692659 +vt 0.262606 0.730329 +vt 0.250791 0.746548 +vt 0.277015 0.790255 +vt 0.243369 0.763673 +vt 0.540814 0.763222 +vt 0.536375 0.744774 +vt 0.574165 0.759389 +vt 0.537986 0.724833 +vt 0.567188 0.741234 +vt 0.545400 0.706434 +vt 0.561568 0.722124 +vt 0.257561 0.720097 +vt 0.694256 0.513508 +vt 0.684973 0.529339 +vt 0.676564 0.506046 +vt 0.581437 0.773826 +vt 0.613301 0.757065 +vt 0.608653 0.741247 +vt 0.599051 0.724473 +vt 0.558163 0.704967 +vt 0.585956 0.709295 +vt 0.687941 0.490173 +vt 0.680301 0.477617 +vt 0.661858 0.519591 +vt 0.662448 0.482846 +vt 0.646060 0.528744 +vt 0.643414 0.489278 +vt 0.631577 0.532112 +vt 0.626097 0.495934 +vt 0.613301 0.704310 +vt 0.153775 0.524967 +vt 0.136543 0.532603 +vt 0.141823 0.506118 +vt 0.679072 0.463899 +vt 0.660177 0.457498 +vt 0.640446 0.456159 +vt 0.153775 0.473511 +vt 0.150146 0.488950 +vt 0.116689 0.462552 +vt 0.115883 0.478825 +vt 0.130075 0.522402 +vt 0.115599 0.498369 +vt 0.277015 0.717485 +vt 0.291825 0.709971 +vt 0.116689 0.535322 +vt 0.097235 0.532710 +vt 0.698515 0.675848 +vt 0.683507 0.686310 +vt 0.117896 0.547105 +vt 0.131499 0.542835 +vt 0.694256 0.474387 +vt 0.115883 0.518208 +vt 0.684973 0.457053 +vt 0.643564 0.261790 +vt 0.636150 0.243391 +vt 0.634539 0.223449 +vt 0.638978 0.205002 +vt 0.081144 0.473710 +vt 0.083043 0.489133 +vt 0.254766 0.698867 +vt 0.258172 0.681711 +vt 0.267965 0.705810 +vt 0.263791 0.662600 +vt 0.282559 0.694539 +vt 0.270768 0.644445 +vt 0.295655 0.679362 +vt 0.278041 0.630009 +vt 0.305257 0.662587 +vt 0.526936 0.631463 +vt 0.536375 0.647344 +vt 0.504473 0.641208 +vt 0.212827 0.741168 +vt 0.201012 0.724948 +vt 0.222148 0.722260 +vt 0.068884 0.714789 +vt 0.086117 0.722425 +vt 0.062416 0.724990 +vt 0.293466 0.709972 +vt 0.473681 0.628538 +vt 0.488495 0.631985 +vt 0.455358 0.658814 +vt 0.468662 0.664756 +vt 0.519183 0.654802 +vt 0.486150 0.671484 +vt 0.530386 0.670698 +vt 0.505159 0.677974 +vt 0.074165 0.741274 +vt 0.048224 0.729184 +vt 0.082487 0.758442 +vt 0.047941 0.749023 +vt 0.086117 0.773881 +vt 0.048224 0.768567 +vt 0.464928 0.700553 +vt 0.482700 0.704556 +vt 0.522796 0.683239 +vt 0.502519 0.703287 +vt 0.022806 0.741133 +vt 0.049030 0.784840 +vt 0.015384 0.758258 +vt 0.621936 0.763287 +vt 0.617498 0.744840 +vt 0.655287 0.759455 +vt 0.619108 0.724898 +vt 0.648310 0.741299 +vt 0.626523 0.706499 +vt 0.642691 0.722189 +vt 0.034621 0.724914 +vt 0.029576 0.714682 +vt 0.314101 0.611404 +vt 0.304819 0.627235 +vt 0.296410 0.603942 +vt 0.662560 0.773891 +vt 0.694423 0.757130 +vt 0.689776 0.741313 +vt 0.680174 0.724538 +vt 0.639285 0.705033 +vt 0.652484 0.698090 +vt 0.307786 0.588069 +vt 0.300147 0.575513 +vt 0.281703 0.617487 +vt 0.282294 0.580742 +vt 0.265906 0.626640 +vt 0.263260 0.587174 +vt 0.251423 0.630009 +vt 0.245943 0.593830 +vt 0.667078 0.709360 +vt 0.694423 0.704375 +vt 0.149516 0.722459 +vt 0.166748 0.714823 +vt 0.161468 0.741308 +vt 0.298918 0.561795 +vt 0.280022 0.555394 +vt 0.260292 0.554055 +vt 0.149516 0.773915 +vt 0.153146 0.758476 +vt 0.186603 0.784874 +vt 0.187409 0.768601 +vt 0.173217 0.725024 +vt 0.187692 0.749057 +vt 0.049030 0.712070 +vt 0.063840 0.704556 +vt 0.186603 0.712104 +vt 0.206056 0.714716 +vt 0.536375 0.686476 +vt 0.521367 0.696938 +vt 0.185396 0.700321 +vt 0.171793 0.704591 +vt 0.314101 0.572283 +vt 0.187409 0.729218 +vt 0.304818 0.554949 +vt 0.242004 0.697400 +vt 0.234589 0.679001 +vt 0.232979 0.659060 +vt 0.237417 0.640613 +vt 0.222148 0.773716 +vt 0.186236 0.922372 +vt 0.180008 0.935449 +vt 0.175572 0.911863 +vt 0.533116 0.517469 +vt 0.514934 0.521668 +vt 0.533116 0.489603 +vt 0.494901 0.523165 +vt 0.514934 0.485259 +vt 0.476066 0.521732 +vt 0.494901 0.483756 +vt 0.461297 0.517588 +vt 0.476066 0.485323 +vt 0.963987 0.171886 +vt 0.957582 0.154476 +vt 0.983693 0.152603 +vt 0.160304 0.916032 +vt 0.175572 0.897043 +vt 0.536375 0.470089 +vt 0.519193 0.459763 +vt 0.036027 0.272590 +vt 0.055925 0.275054 +vt 0.033760 0.300265 +vt 0.073627 0.284388 +vt 0.053831 0.300622 +vt 0.968247 0.144040 +vt 0.983693 0.125340 +vt 0.160304 0.888648 +vt 0.186236 0.886593 +vt 0.000030 0.308240 +vt 0.014867 0.302940 +vt 0.001633 0.336060 +vt 0.016962 0.339288 +vt 0.036027 0.339607 +vt 0.072024 0.303957 +vt 0.055925 0.336970 +vt 0.968247 0.129286 +vt 0.963987 0.106066 +vt 0.180008 0.869339 +vt 0.201316 0.886634 +vt 0.175982 0.856094 +vt 0.207872 0.869415 +vt 0.022019 0.365123 +vt 0.041500 0.367571 +vt 0.080178 0.445659 +vt 0.063119 0.456159 +vt 0.059073 0.429896 +vt 0.957582 0.118855 +vt 0.936119 0.106072 +vt 0.211979 0.897143 +vt 0.080178 0.380417 +vt 0.077047 0.395434 +vt 0.055449 0.367571 +vt 0.069637 0.412809 +vt 0.044737 0.378650 +vt 0.034664 0.394642 +vt 0.046966 0.444095 +vt 0.026763 0.413113 +vt 0.035158 0.453244 +vt 0.022237 0.431249 +vt 0.227576 0.888832 +vt 0.211979 0.911963 +vt 0.461297 0.450754 +vt 0.443595 0.460088 +vt 0.459694 0.431185 +vt 0.423696 0.462552 +vt 0.441500 0.434520 +vt 0.008049 0.386012 +vt 0.002174 0.405139 +vt 0.916414 0.125355 +vt 0.931836 0.129294 +vt 0.916414 0.152618 +vt 0.227576 0.916215 +vt 0.207872 0.935525 +vt 0.461297 0.403365 +vt 0.421429 0.434877 +vt 0.443595 0.398172 +vt 0.402537 0.432202 +vt 0.404631 0.395854 +vt 0.387699 0.426902 +vt 0.389302 0.399082 +vt 0.931836 0.144049 +vt 0.936119 0.171892 +vt 0.193718 0.905230 +vt 0.950037 0.135855 +vt 0.942500 0.118858 +vt 0.201316 0.922413 +vt 0.942500 0.154479 +vt 0.536375 0.537365 +vt 0.519193 0.547662 +vt 0.423696 0.395535 +vt 0.448651 0.372337 +vt 0.429170 0.367571 +vt 0.931866 0.185442 +vt 0.968277 0.185434 +vt 0.340033 0.927752 +vt 0.333805 0.940829 +vt 0.329369 0.917244 +vt 0.533116 0.333901 +vt 0.514934 0.338100 +vt 0.533116 0.306034 +vt 0.494901 0.339596 +vt 0.514934 0.301690 +vt 0.476066 0.338163 +vt 0.494901 0.300187 +vt 0.461297 0.334019 +vt 0.476066 0.301754 +vt 0.937605 0.463913 +vt 0.944010 0.481323 +vt 0.917899 0.483196 +vt 0.314101 0.921412 +vt 0.329369 0.902424 +vt 0.519193 0.276194 +vt 0.350099 0.272590 +vt 0.369997 0.275054 +vt 0.347832 0.300265 +vt 0.387699 0.284388 +vt 0.367902 0.300622 +vt 0.933345 0.491759 +vt 0.933345 0.506513 +vt 0.314101 0.894029 +vt 0.340033 0.891974 +vt 0.314101 0.308240 +vt 0.328939 0.302940 +vt 0.315705 0.336060 +vt 0.331034 0.339288 +vt 0.350099 0.339607 +vt 0.386096 0.303957 +vt 0.369997 0.336970 +vt 0.917899 0.510459 +vt 0.937605 0.529733 +vt 0.333805 0.874719 +vt 0.355113 0.892015 +vt 0.329780 0.861474 +vt 0.361670 0.874796 +vt 0.336091 0.365123 +vt 0.355572 0.367571 +vt 0.472283 0.171263 +vt 0.455224 0.181763 +vt 0.451178 0.155501 +vt 0.944010 0.516944 +vt 0.965472 0.529727 +vt 0.365776 0.902524 +vt 0.472283 0.106021 +vt 0.469152 0.121038 +vt 0.447554 0.093175 +vt 0.461741 0.138413 +vt 0.436842 0.104254 +vt 0.426769 0.120247 +vt 0.439071 0.169700 +vt 0.418868 0.138717 +vt 0.427263 0.178848 +vt 0.414342 0.156854 +vt 0.381373 0.894213 +vt 0.365776 0.917343 +vt 0.314101 0.355773 +vt 0.296399 0.365107 +vt 0.312498 0.336204 +vt 0.276501 0.367571 +vt 0.294305 0.339539 +vt 0.400154 0.111616 +vt 0.394279 0.130743 +vt 0.985178 0.510444 +vt 0.969756 0.506505 +vt 0.969756 0.491750 +vt 0.381373 0.921596 +vt 0.355113 0.927794 +vt 0.314101 0.308385 +vt 0.274234 0.339896 +vt 0.296399 0.303192 +vt 0.255341 0.337221 +vt 0.276501 0.300554 +vt 0.240504 0.331921 +vt 0.257436 0.300874 +vt 0.985178 0.483181 +vt 0.959092 0.481320 +vt 0.347515 0.910611 +vt 0.951555 0.499944 +vt 0.959092 0.516941 +vt 0.361670 0.940906 +vt 0.536375 0.353796 +vt 0.519193 0.364094 +vt 0.301456 0.277357 +vt 0.281974 0.272590 +vt 0.969726 0.450357 +vt 0.965472 0.463907 +vt 0.933315 0.450365 +vt 0.118964 0.922372 +vt 0.112736 0.935449 +vt 0.108301 0.911863 +vt 0.385920 0.523862 +vt 0.367739 0.528061 +vt 0.385920 0.495995 +vt 0.347706 0.529558 +vt 0.347706 0.490148 +vt 0.328871 0.528125 +vt 0.314101 0.523980 +vt 0.328871 0.491715 +vt 0.965438 0.677992 +vt 0.959033 0.660583 +vt 0.985143 0.658710 +vt 0.093033 0.916032 +vt 0.108301 0.897043 +vt 0.367739 0.491651 +vt 0.389180 0.476482 +vt 0.371998 0.466155 +vt 0.356679 0.086783 +vt 0.376577 0.089247 +vt 0.354412 0.114457 +vt 0.394279 0.098581 +vt 0.374482 0.114815 +vt 0.969698 0.650147 +vt 0.985143 0.631446 +vt 0.093033 0.888648 +vt 0.118964 0.886593 +vt 0.320682 0.122433 +vt 0.335519 0.117133 +vt 0.322285 0.150252 +vt 0.337614 0.153480 +vt 0.356679 0.153800 +vt 0.392676 0.118150 +vt 0.376577 0.151162 +vt 0.969698 0.635392 +vt 0.965438 0.612173 +vt 0.112736 0.869339 +vt 0.134044 0.886634 +vt 0.108711 0.856094 +vt 0.140601 0.869415 +vt 0.342671 0.179315 +vt 0.362152 0.181763 +vt 0.398655 0.259851 +vt 0.381596 0.270351 +vt 0.377551 0.244089 +vt 0.959033 0.624961 +vt 0.937570 0.612179 +vt 0.144708 0.897143 +vt 0.398655 0.194609 +vt 0.395525 0.209626 +vt 0.373926 0.181763 +vt 0.388114 0.227001 +vt 0.363215 0.192843 +vt 0.353142 0.208835 +vt 0.365444 0.258288 +vt 0.345241 0.227305 +vt 0.353636 0.267436 +vt 0.340715 0.245442 +vt 0.160304 0.888832 +vt 0.144708 0.911963 +vt 0.387699 0.450754 +vt 0.369997 0.460088 +vt 0.386096 0.431185 +vt 0.350099 0.462552 +vt 0.367902 0.434520 +vt 0.326527 0.200204 +vt 0.320652 0.219331 +vt 0.917865 0.631461 +vt 0.933287 0.635400 +vt 0.917865 0.658725 +vt 0.160304 0.916215 +vt 0.134044 0.922413 +vt 0.387699 0.403365 +vt 0.347832 0.434877 +vt 0.369997 0.398172 +vt 0.328939 0.432202 +vt 0.350099 0.395535 +vt 0.314101 0.426902 +vt 0.331034 0.395854 +vt 0.933287 0.650155 +vt 0.943951 0.660586 +vt 0.126447 0.905230 +vt 0.951488 0.641962 +vt 0.943951 0.624965 +vt 0.140601 0.935525 +vt 0.389180 0.543757 +vt 0.371998 0.554055 +vt 0.375054 0.372337 +vt 0.933317 0.691549 +vt 0.937570 0.677999 +vt 0.969728 0.691540 +vt 0.107789 0.613941 +vt 0.101561 0.627018 +vt 0.097125 0.603432 +vt 0.544101 0.151570 +vt 0.525920 0.155769 +vt 0.525920 0.119360 +vt 0.505887 0.157266 +vt 0.487052 0.155833 +vt 0.505887 0.117857 +vt 0.472283 0.151689 +vt 0.487052 0.119424 +vt 0.783588 0.965691 +vt 0.800999 0.959290 +vt 0.802866 0.985401 +vt 0.081857 0.607601 +vt 0.097125 0.588612 +vt 0.544101 0.123704 +vt 0.547361 0.104190 +vt 0.530179 0.093864 +vt 0.189773 0.367571 +vt 0.209671 0.370035 +vt 0.187506 0.395246 +vt 0.227373 0.379369 +vt 0.207576 0.395603 +vt 0.811433 0.969957 +vt 0.830130 0.985407 +vt 0.081857 0.580217 +vt 0.107789 0.578162 +vt 0.153775 0.403221 +vt 0.168613 0.397921 +vt 0.155379 0.431040 +vt 0.170708 0.434268 +vt 0.189773 0.434588 +vt 0.225770 0.398938 +vt 0.209671 0.431950 +vt 0.826188 0.969960 +vt 0.849408 0.965706 +vt 0.101561 0.560908 +vt 0.122869 0.578203 +vt 0.097535 0.547663 +vt 0.129426 0.560984 +vt 0.175765 0.460103 +vt 0.195246 0.462552 +vt 0.476659 0.259851 +vt 0.459600 0.270351 +vt 0.455554 0.244089 +vt 0.836621 0.959298 +vt 0.849408 0.937838 +vt 0.133532 0.588712 +vt 0.476659 0.194609 +vt 0.473528 0.209626 +vt 0.451930 0.181763 +vt 0.466117 0.227001 +vt 0.441218 0.192843 +vt 0.431145 0.208835 +vt 0.443447 0.258288 +vt 0.423244 0.227305 +vt 0.431639 0.267436 +vt 0.418718 0.245442 +vt 0.149129 0.580401 +vt 0.133532 0.603532 +vt 0.233953 0.355773 +vt 0.216251 0.365107 +vt 0.232350 0.336204 +vt 0.196353 0.367571 +vt 0.214156 0.339539 +vt 0.404530 0.200204 +vt 0.398655 0.219331 +vt 0.830130 0.918128 +vt 0.826188 0.933549 +vt 0.802866 0.918122 +vt 0.149129 0.607784 +vt 0.122869 0.613982 +vt 0.233953 0.308385 +vt 0.194086 0.339896 +vt 0.216251 0.303192 +vt 0.175193 0.337221 +vt 0.196353 0.300554 +vt 0.160356 0.331921 +vt 0.177288 0.300874 +vt 0.811433 0.933546 +vt 0.783588 0.937823 +vt 0.115271 0.596799 +vt 0.819622 0.951749 +vt 0.836621 0.944216 +vt 0.800999 0.944208 +vt 0.129426 0.627094 +vt 0.547361 0.171466 +vt 0.530179 0.181763 +vt 0.221308 0.277357 +vt 0.201826 0.272590 +vt 0.770039 0.933566 +vt 0.272761 0.927752 +vt 0.266533 0.940829 +vt 0.262098 0.917244 +vt 0.310842 0.523862 +vt 0.292660 0.528061 +vt 0.310842 0.495996 +vt 0.272627 0.529558 +vt 0.292660 0.491651 +vt 0.253792 0.528125 +vt 0.272627 0.490148 +vt 0.239023 0.523980 +vt 0.253792 0.491715 +vt 0.936444 0.384419 +vt 0.942849 0.401828 +vt 0.916738 0.403701 +vt 0.246830 0.921412 +vt 0.262098 0.902424 +vt 0.314101 0.476482 +vt 0.296919 0.466155 +vt 0.116175 0.367571 +vt 0.136073 0.370035 +vt 0.113908 0.395246 +vt 0.153775 0.379369 +vt 0.133979 0.395603 +vt 0.932184 0.412264 +vt 0.916738 0.430965 +vt 0.246830 0.894029 +vt 0.272761 0.891974 +vt 0.080178 0.403221 +vt 0.095016 0.397921 +vt 0.081781 0.431040 +vt 0.097110 0.434268 +vt 0.116175 0.434588 +vt 0.152172 0.398938 +vt 0.136073 0.431950 +vt 0.932184 0.427019 +vt 0.936444 0.450239 +vt 0.266533 0.874719 +vt 0.287841 0.892015 +vt 0.262508 0.861474 +vt 0.294398 0.874795 +vt 0.102167 0.460103 +vt 0.121649 0.462552 +vt 0.472283 0.082675 +vt 0.455224 0.093175 +vt 0.451178 0.066913 +vt 0.942849 0.437450 +vt 0.964312 0.450232 +vt 0.298505 0.902524 +vt 0.472283 0.017433 +vt 0.469152 0.032450 +vt 0.447554 0.004587 +vt 0.461741 0.049825 +vt 0.436842 0.015666 +vt 0.426769 0.031658 +vt 0.439071 0.081111 +vt 0.418868 0.050129 +vt 0.427263 0.090260 +vt 0.414342 0.068266 +vt 0.314101 0.894213 +vt 0.298505 0.917343 +vt 0.461297 0.355773 +vt 0.443595 0.365107 +vt 0.459694 0.336204 +vt 0.423696 0.367571 +vt 0.441500 0.339539 +vt 0.400154 0.023028 +vt 0.394279 0.042155 +vt 0.984017 0.430950 +vt 0.968595 0.427011 +vt 0.984017 0.403686 +vt 0.314101 0.921596 +vt 0.287842 0.927794 +vt 0.461297 0.308385 +vt 0.421429 0.339896 +vt 0.443595 0.303192 +vt 0.402537 0.337221 +vt 0.423696 0.300554 +vt 0.387699 0.331921 +vt 0.404631 0.300874 +vt 0.968595 0.412256 +vt 0.964312 0.384413 +vt 0.280244 0.910611 +vt 0.950394 0.420449 +vt 0.957931 0.437447 +vt 0.957931 0.401825 +vt 0.294398 0.940906 +vt 0.314101 0.543757 +vt 0.296919 0.554055 +vt 0.448651 0.277357 +vt 0.429170 0.272590 +vt 0.968565 0.370863 +vt 0.932154 0.370871 +vt 0.407304 0.927752 +vt 0.401076 0.940829 +vt 0.396641 0.917244 +vt 0.076918 0.517470 +vt 0.058737 0.521668 +vt 0.076918 0.489603 +vt 0.038704 0.523165 +vt 0.058737 0.485259 +vt 0.019869 0.521732 +vt 0.038704 0.483756 +vt 0.005099 0.517588 +vt 0.019869 0.485323 +vt 0.937605 0.291655 +vt 0.944010 0.309065 +vt 0.933345 0.319501 +vt 0.381373 0.921412 +vt 0.396641 0.902424 +vt 0.080178 0.470089 +vt 0.062996 0.459763 +vt 0.116175 0.272590 +vt 0.136073 0.275054 +vt 0.113908 0.300265 +vt 0.153775 0.284388 +vt 0.133979 0.300622 +vt 0.917899 0.310938 +vt 0.917899 0.338201 +vt 0.381373 0.894029 +vt 0.407304 0.891974 +vt 0.080178 0.308240 +vt 0.095016 0.302940 +vt 0.081781 0.336060 +vt 0.097110 0.339288 +vt 0.116175 0.339607 +vt 0.152172 0.303957 +vt 0.136073 0.336970 +vt 0.933345 0.334256 +vt 0.937605 0.357475 +vt 0.401076 0.874719 +vt 0.422385 0.892015 +vt 0.397051 0.861474 +vt 0.428941 0.874796 +vt 0.102167 0.365123 +vt 0.121649 0.367571 +vt 0.539300 0.445659 +vt 0.522241 0.456159 +vt 0.518196 0.429896 +vt 0.944010 0.344686 +vt 0.965472 0.357469 +vt 0.433048 0.902524 +vt 0.539300 0.380417 +vt 0.536170 0.395434 +vt 0.514571 0.367571 +vt 0.528759 0.412809 +vt 0.503860 0.378650 +vt 0.493787 0.394642 +vt 0.506089 0.444095 +vt 0.485886 0.413113 +vt 0.494281 0.453244 +vt 0.481360 0.431249 +vt 0.448644 0.894213 +vt 0.448644 0.921596 +vt 0.314101 0.450754 +vt 0.296399 0.460088 +vt 0.312498 0.431185 +vt 0.276501 0.462552 +vt 0.294305 0.434520 +vt 0.467172 0.386012 +vt 0.461297 0.405139 +vt 0.985178 0.338186 +vt 0.969756 0.334247 +vt 0.985178 0.310923 +vt 0.433048 0.917343 +vt 0.422385 0.927794 +vt 0.314101 0.403365 +vt 0.274234 0.434877 +vt 0.296399 0.398172 +vt 0.255341 0.432202 +vt 0.276501 0.395535 +vt 0.240504 0.426902 +vt 0.257436 0.395854 +vt 0.969756 0.319493 +vt 0.965472 0.291649 +vt 0.414787 0.910611 +vt 0.951555 0.327686 +vt 0.959092 0.344683 +vt 0.959092 0.309062 +vt 0.428941 0.940906 +vt 0.080178 0.537365 +vt 0.062996 0.547663 +vt 0.301456 0.372337 +vt 0.281974 0.367571 +vt 0.969726 0.278099 +vt 0.933315 0.278107 +vt 0.536635 0.312401 +vt 0.549493 0.299056 +vt 0.541655 0.326277 +vt 0.566243 0.288045 +vt 0.558768 0.324695 +vt 0.584335 0.281045 +vt 0.578361 0.321545 +vt 0.601015 0.279121 +vt 0.597452 0.317305 +vt 0.091544 0.851351 +vt 0.075609 0.852030 +vt 0.091544 0.817988 +vt 0.057073 0.847927 +vt 0.075609 0.826495 +vt 0.541655 0.339499 +vt 0.558768 0.349126 +vt 0.578361 0.353466 +vt 0.613133 0.312620 +vt 0.597452 0.351855 +vt 0.067770 0.790438 +vt 0.057073 0.834108 +vt 0.057413 0.805409 +vt 0.091544 0.906573 +vt 0.077637 0.918216 +vt 0.090006 0.892531 +vt 0.059432 0.926045 +vt 0.074795 0.892270 +vt 0.039701 0.928867 +vt 0.055719 0.892145 +vt 0.021447 0.926253 +vt 0.035681 0.892174 +vt 0.034149 0.784840 +vt 0.047225 0.822696 +vt 0.031681 0.801125 +vt 0.091544 0.878711 +vt 0.077637 0.866733 +vt 0.059432 0.858779 +vt 0.017733 0.892354 +vt 0.039701 0.856059 +vt 0.472346 0.628538 +vt 0.459617 0.613901 +vt 0.489484 0.613083 +vt 0.033299 0.820378 +vt 0.013485 0.816151 +vt 0.501904 0.792972 +vt 0.520440 0.788870 +vt 0.501904 0.806791 +vt 0.536375 0.789548 +vt 0.520440 0.814404 +vt 0.524256 0.622007 +vt 0.507576 0.620083 +vt 0.536375 0.588508 +vt 0.520694 0.583823 +vt 0.472735 0.602072 +vt 0.501603 0.579583 +vt 0.459877 0.588727 +vt 0.482010 0.576433 +vt 0.492056 0.818203 +vt 0.536375 0.822911 +vt 0.502244 0.835490 +vt 0.536375 0.556587 +vt 0.520694 0.549273 +vt 0.501603 0.547662 +vt 0.464897 0.574851 +vt 0.482010 0.552002 +vt 0.478130 0.820522 +vt 0.512601 0.850461 +vt 0.476512 0.839775 +vt 0.847989 0.015387 +vt 0.866085 0.012641 +vt 0.844014 0.049067 +vt 0.885763 0.015421 +vt 0.861783 0.049096 +vt 0.904025 0.023306 +vt 0.881788 0.049102 +vt 0.918093 0.035093 +vt 0.900984 0.049084 +vt 0.483588 0.801231 +vt 0.468282 0.812390 +vt 0.468282 0.798570 +vt 0.038757 0.839668 +vt 0.478130 0.787159 +vt 0.492056 0.784840 +vt 0.023451 0.828510 +vt 0.023451 0.842329 +vt 0.033299 0.853740 +vt 0.047225 0.856059 +vt 0.458316 0.824749 +vt 0.536375 0.287227 +vt 0.549104 0.272590 +vt 0.847989 0.082665 +vt 0.866085 0.085462 +vt 0.904025 0.074798 +vt 0.916447 0.049044 +vt 0.476918 0.229287 +vt 0.489776 0.215942 +vt 0.481938 0.243162 +vt 0.506526 0.204931 +vt 0.499051 0.241581 +vt 0.524618 0.197931 +vt 0.518645 0.238431 +vt 0.541298 0.196007 +vt 0.537735 0.234191 +vt 0.917865 0.678683 +vt 0.901929 0.679362 +vt 0.917865 0.645321 +vt 0.883393 0.675260 +vt 0.901929 0.653827 +vt 0.481938 0.256384 +vt 0.499051 0.266012 +vt 0.518645 0.270351 +vt 0.553417 0.229506 +vt 0.537735 0.268741 +vt 0.894091 0.617771 +vt 0.883393 0.661440 +vt 0.883734 0.632742 +vt 0.768234 0.906160 +vt 0.754327 0.917803 +vt 0.766696 0.892118 +vt 0.736122 0.925632 +vt 0.751485 0.891857 +vt 0.716391 0.928454 +vt 0.732409 0.891732 +vt 0.698137 0.925841 +vt 0.712371 0.891761 +vt 0.860469 0.612173 +vt 0.873546 0.650029 +vt 0.858001 0.628457 +vt 0.768234 0.878298 +vt 0.754327 0.866320 +vt 0.736122 0.858366 +vt 0.694423 0.891941 +vt 0.716391 0.855646 +vt 0.549104 0.617909 +vt 0.536375 0.603273 +vt 0.566243 0.602454 +vt 0.859619 0.647710 +vt 0.839805 0.643483 +vt 0.814937 0.855035 +vt 0.833473 0.850932 +vt 0.814937 0.868854 +vt 0.849408 0.851611 +vt 0.833473 0.876467 +vt 0.601015 0.611379 +vt 0.584335 0.609455 +vt 0.613133 0.577879 +vt 0.597452 0.573195 +vt 0.549493 0.591444 +vt 0.578361 0.568955 +vt 0.536635 0.578099 +vt 0.558768 0.565804 +vt 0.805089 0.880266 +vt 0.849408 0.884974 +vt 0.815277 0.897553 +vt 0.613133 0.545959 +vt 0.597452 0.538644 +vt 0.578361 0.537034 +vt 0.541655 0.564223 +vt 0.558768 0.541373 +vt 0.791163 0.882585 +vt 0.825634 0.912524 +vt 0.789544 0.901838 +vt 0.846634 0.380163 +vt 0.864730 0.377417 +vt 0.842659 0.413843 +vt 0.884408 0.380198 +vt 0.860428 0.413872 +vt 0.902670 0.388082 +vt 0.880433 0.413878 +vt 0.916738 0.399869 +vt 0.899629 0.413860 +vt 0.796621 0.863294 +vt 0.781315 0.874452 +vt 0.781315 0.860633 +vt 0.865078 0.667000 +vt 0.791163 0.849222 +vt 0.805089 0.846903 +vt 0.849772 0.655842 +vt 0.849772 0.669661 +vt 0.859619 0.681073 +vt 0.873546 0.683392 +vt 0.476659 0.204113 +vt 0.489387 0.189476 +vt 0.846634 0.447442 +vt 0.864730 0.450239 +vt 0.884408 0.447476 +vt 0.915092 0.413820 +vt 0.902670 0.439575 +vt 0.154035 0.502362 +vt 0.166893 0.489017 +vt 0.159055 0.516238 +vt 0.183643 0.478007 +vt 0.176168 0.514657 +vt 0.201735 0.471006 +vt 0.195762 0.511506 +vt 0.218415 0.469082 +vt 0.214852 0.507266 +vt 0.917899 0.516868 +vt 0.901964 0.517547 +vt 0.917899 0.483505 +vt 0.883427 0.513444 +vt 0.901964 0.492012 +vt 0.159055 0.529460 +vt 0.176168 0.539088 +vt 0.195762 0.543427 +vt 0.230534 0.502582 +vt 0.214852 0.541817 +vt 0.894125 0.455955 +vt 0.883427 0.499625 +vt 0.883768 0.470926 +vt 0.694423 0.906160 +vt 0.680516 0.917803 +vt 0.692885 0.892118 +vt 0.662311 0.925632 +vt 0.677674 0.891857 +vt 0.642580 0.928454 +vt 0.658598 0.891732 +vt 0.624326 0.925841 +vt 0.638560 0.891761 +vt 0.860504 0.450357 +vt 0.873580 0.488213 +vt 0.858035 0.466641 +vt 0.694423 0.878298 +vt 0.680516 0.866320 +vt 0.662311 0.858366 +vt 0.620612 0.891941 +vt 0.642580 0.855646 +vt 0.560090 0.181763 +vt 0.547361 0.167127 +vt 0.577228 0.166308 +vt 0.859654 0.485894 +vt 0.839840 0.481667 +vt 0.883428 0.294388 +vt 0.901964 0.290285 +vt 0.883428 0.308207 +vt 0.917899 0.290964 +vt 0.901964 0.315820 +vt 0.612000 0.175233 +vt 0.595320 0.173309 +vt 0.624119 0.141733 +vt 0.608438 0.137049 +vt 0.560478 0.155298 +vt 0.589347 0.132809 +vt 0.547621 0.141953 +vt 0.569754 0.129658 +vt 0.873580 0.319619 +vt 0.917899 0.324327 +vt 0.883768 0.336906 +vt 0.624119 0.109813 +vt 0.608438 0.102498 +vt 0.589347 0.100888 +vt 0.552641 0.128077 +vt 0.569754 0.105227 +vt 0.859654 0.321938 +vt 0.894125 0.351877 +vt 0.858036 0.341191 +vt 0.853110 0.534234 +vt 0.871207 0.531487 +vt 0.849136 0.567914 +vt 0.890884 0.534268 +vt 0.866905 0.567943 +vt 0.909147 0.542152 +vt 0.886909 0.567948 +vt 0.923215 0.553940 +vt 0.906105 0.567930 +vt 0.865112 0.302647 +vt 0.849806 0.313806 +vt 0.849806 0.299986 +vt 0.865112 0.505185 +vt 0.859654 0.288575 +vt 0.873580 0.286256 +vt 0.849806 0.494026 +vt 0.849806 0.507846 +vt 0.859654 0.519257 +vt 0.873580 0.521576 +vt 0.153775 0.477188 +vt 0.166504 0.462552 +vt 0.853110 0.601512 +vt 0.871207 0.604309 +vt 0.890884 0.601547 +vt 0.921568 0.567891 +vt 0.909147 0.593645 +vt 0.539560 0.407381 +vt 0.552418 0.394037 +vt 0.544580 0.421257 +vt 0.569167 0.383026 +vt 0.561693 0.419676 +vt 0.587259 0.376026 +vt 0.581286 0.416526 +vt 0.603939 0.374101 +vt 0.600377 0.412285 +vt 0.918067 0.770975 +vt 0.902131 0.771654 +vt 0.918067 0.737612 +vt 0.883595 0.767551 +vt 0.902131 0.746119 +vt 0.544580 0.434479 +vt 0.561693 0.444107 +vt 0.581286 0.448446 +vt 0.616058 0.407601 +vt 0.600377 0.446836 +vt 0.894293 0.710063 +vt 0.883595 0.753732 +vt 0.883935 0.725033 +vt 0.532127 0.906573 +vt 0.518220 0.918216 +vt 0.530589 0.892531 +vt 0.500015 0.926045 +vt 0.515377 0.892270 +vt 0.480284 0.928867 +vt 0.496301 0.892145 +vt 0.462030 0.926253 +vt 0.476264 0.892174 +vt 0.860671 0.704464 +vt 0.873747 0.742321 +vt 0.858203 0.720749 +vt 0.532127 0.878711 +vt 0.518220 0.866733 +vt 0.500015 0.858779 +vt 0.458316 0.892354 +vt 0.480284 0.856059 +vt 0.561769 0.085462 +vt 0.549041 0.070826 +vt 0.578908 0.070007 +vt 0.859821 0.740002 +vt 0.840007 0.735775 +vt 0.193104 0.793006 +vt 0.211640 0.788904 +vt 0.193104 0.806826 +vt 0.227576 0.789583 +vt 0.211640 0.814439 +vt 0.613680 0.078932 +vt 0.597000 0.077008 +vt 0.625799 0.045432 +vt 0.610117 0.040748 +vt 0.562158 0.058997 +vt 0.591027 0.036508 +vt 0.549300 0.045652 +vt 0.571433 0.033357 +vt 0.183257 0.818237 +vt 0.227576 0.822946 +vt 0.193445 0.835524 +vt 0.625799 0.013512 +vt 0.610117 0.006197 +vt 0.591027 0.004587 +vt 0.554320 0.031776 +vt 0.571433 0.008926 +vt 0.169330 0.820556 +vt 0.203802 0.850495 +vt 0.167712 0.839809 +vt 0.846309 0.115366 +vt 0.864406 0.112620 +vt 0.842335 0.149047 +vt 0.884083 0.115401 +vt 0.860104 0.149076 +vt 0.902346 0.123285 +vt 0.880108 0.149081 +vt 0.916414 0.135073 +vt 0.899304 0.149063 +vt 0.174789 0.801266 +vt 0.159483 0.812424 +vt 0.159483 0.798605 +vt 0.865279 0.759292 +vt 0.169330 0.787193 +vt 0.183257 0.784874 +vt 0.849973 0.748134 +vt 0.849973 0.761953 +vt 0.859821 0.773365 +vt 0.873747 0.775683 +vt 0.539300 0.382208 +vt 0.552029 0.367571 +vt 0.846309 0.182645 +vt 0.864406 0.185442 +vt 0.884083 0.182679 +vt 0.914768 0.149024 +vt 0.902346 0.174778 +vt 0.472542 0.044397 +vt 0.485400 0.031053 +vt 0.477562 0.058273 +vt 0.502150 0.020042 +vt 0.494675 0.056692 +vt 0.520242 0.013042 +vt 0.514269 0.053542 +vt 0.536922 0.011118 +vt 0.533359 0.049302 +vt 0.849408 0.842194 +vt 0.833473 0.842873 +vt 0.849408 0.808831 +vt 0.814937 0.838771 +vt 0.833473 0.817338 +vt 0.477562 0.071495 +vt 0.494675 0.081123 +vt 0.514269 0.085462 +vt 0.549041 0.044617 +vt 0.533359 0.083852 +vt 0.825634 0.781282 +vt 0.814937 0.824951 +vt 0.815277 0.796253 +vt 0.926566 0.243119 +vt 0.912659 0.254762 +vt 0.925027 0.229078 +vt 0.894454 0.262591 +vt 0.909816 0.228816 +vt 0.874723 0.265413 +vt 0.890740 0.228691 +vt 0.856469 0.262800 +vt 0.870703 0.228720 +vt 0.792013 0.775683 +vt 0.805089 0.813540 +vt 0.789544 0.791968 +vt 0.926566 0.215257 +vt 0.912659 0.203280 +vt 0.894454 0.195325 +vt 0.852755 0.228900 +vt 0.874723 0.192606 +vt 0.017828 0.628538 +vt 0.005099 0.613901 +vt 0.034966 0.613083 +vt 0.791163 0.811221 +vt 0.771349 0.806994 +vt 0.357689 0.798387 +vt 0.376226 0.794285 +vt 0.357689 0.812207 +vt 0.392161 0.794963 +vt 0.376226 0.819820 +vt 0.069739 0.622007 +vt 0.053059 0.620083 +vt 0.081857 0.588508 +vt 0.066176 0.583823 +vt 0.018217 0.602072 +vt 0.047085 0.579583 +vt 0.005359 0.588728 +vt 0.027492 0.576433 +vt 0.347842 0.823618 +vt 0.392161 0.828326 +vt 0.358030 0.840905 +vt 0.081857 0.556587 +vt 0.066176 0.549273 +vt 0.047085 0.547663 +vt 0.010379 0.574852 +vt 0.027492 0.552002 +vt 0.333915 0.825937 +vt 0.368387 0.855876 +vt 0.332297 0.845190 +vt 0.853383 0.778430 +vt 0.871479 0.775683 +vt 0.849408 0.812110 +vt 0.891156 0.778464 +vt 0.867177 0.812139 +vt 0.909419 0.786348 +vt 0.887182 0.812144 +vt 0.923487 0.798136 +vt 0.906377 0.812126 +vt 0.339374 0.806646 +vt 0.324068 0.817805 +vt 0.324068 0.803986 +vt 0.796621 0.830511 +vt 0.333915 0.792574 +vt 0.347842 0.790255 +vt 0.781315 0.819353 +vt 0.781315 0.833172 +vt 0.791163 0.844584 +vt 0.472283 0.019224 +vt 0.485011 0.004587 +vt 0.853383 0.845708 +vt 0.871479 0.848505 +vt 0.891156 0.845743 +vt 0.921841 0.812087 +vt 0.909419 0.837841 +vt 0.536635 0.495969 +vt 0.549493 0.482625 +vt 0.541655 0.509845 +vt 0.566243 0.471614 +vt 0.558768 0.508264 +vt 0.584335 0.464614 +vt 0.578361 0.505114 +vt 0.601015 0.462690 +vt 0.597452 0.500874 +vt 0.849136 0.599601 +vt 0.833200 0.600280 +vt 0.849136 0.566238 +vt 0.814664 0.596177 +vt 0.833200 0.574745 +vt 0.541655 0.523067 +vt 0.558768 0.532695 +vt 0.613133 0.496189 +vt 0.597452 0.535424 +vt 0.825362 0.538688 +vt 0.814664 0.582358 +vt 0.815005 0.553659 +vt 0.610186 0.906095 +vt 0.596279 0.917738 +vt 0.608648 0.892053 +vt 0.578075 0.925566 +vt 0.593437 0.891792 +vt 0.558343 0.928389 +vt 0.574361 0.891667 +vt 0.540089 0.925775 +vt 0.554323 0.891696 +vt 0.791741 0.533090 +vt 0.804817 0.570946 +vt 0.789272 0.549374 +vt 0.610186 0.878233 +vt 0.596279 0.866255 +vt 0.578075 0.858301 +vt 0.536375 0.891876 +vt 0.558343 0.855581 +vt 0.166504 0.624302 +vt 0.153775 0.609665 +vt 0.183643 0.608847 +vt 0.790890 0.568627 +vt 0.771076 0.564400 +vt 0.279630 0.798387 +vt 0.298166 0.794285 +vt 0.279630 0.812207 +vt 0.314101 0.794963 +vt 0.298166 0.819820 +vt 0.218415 0.617771 +vt 0.201735 0.615847 +vt 0.230534 0.584272 +vt 0.214852 0.579588 +vt 0.166893 0.597836 +vt 0.195762 0.575347 +vt 0.154035 0.584492 +vt 0.176168 0.572197 +vt 0.269782 0.823618 +vt 0.314101 0.828326 +vt 0.279970 0.840905 +vt 0.230534 0.552351 +vt 0.214852 0.545037 +vt 0.159055 0.570616 +vt 0.176168 0.547766 +vt 0.255856 0.825937 +vt 0.290328 0.855876 +vt 0.254238 0.845190 +vt 0.853383 0.851251 +vt 0.849408 0.884932 +vt 0.891156 0.851286 +vt 0.867177 0.884960 +vt 0.909419 0.859170 +vt 0.887182 0.884966 +vt 0.923487 0.870958 +vt 0.906377 0.884948 +vt 0.261314 0.806646 +vt 0.246008 0.817805 +vt 0.246008 0.803986 +vt 0.796349 0.587918 +vt 0.255856 0.792574 +vt 0.269782 0.790255 +vt 0.781043 0.576759 +vt 0.781043 0.590579 +vt 0.790890 0.601990 +vt 0.804817 0.604309 +vt 0.536375 0.470796 +vt 0.549104 0.456159 +vt 0.853383 0.918530 +vt 0.871479 0.921327 +vt 0.891156 0.918564 +vt 0.921841 0.884908 +vt 0.909419 0.910663 +vt 0.839805 0.673171 +vt 0.768234 0.986151 +vt 0.295243 0.272590 +vt 0.258082 0.269182 +vt 0.849408 0.957508 +vt 0.866703 0.925362 +vt 0.100762 0.080960 +vt 0.822238 0.612173 +vt 0.081474 0.059357 +vt 0.839840 0.336718 +vt 0.692938 0.986151 +vt 0.054769 0.272590 +vt 0.017607 0.269182 +vt 0.923215 0.569714 +vt 0.940510 0.537567 +vt 0.180940 0.080960 +vt 0.822273 0.275720 +vt 0.161652 0.059357 +vt 0.457838 0.523550 +vt 0.091544 0.986564 +vt 0.295272 0.090827 +vt 0.240533 0.051888 +vt 0.258111 0.087419 +vt 0.826447 0.085462 +vt 0.923487 0.884687 +vt 0.940782 0.852540 +vt 0.020584 0.171841 +vt 0.440271 0.462552 +vt 0.001296 0.150239 +vt 0.842335 0.164685 +vt 1.000000 0.979024 +vt 0.215095 0.272590 +vt 0.177933 0.269182 +vt 0.918067 0.741088 +vt 0.935362 0.708941 +vt 0.020584 0.080960 +vt 0.824768 0.103687 +vt 0.001296 0.059357 +vt 0.840007 0.754927 +vt 0.533612 0.986564 +vt 0.295272 0.181763 +vt 0.258111 0.178355 +vt 0.923487 0.813910 +vt 0.940782 0.781763 +vt 0.100762 0.171841 +vt 0.822440 0.693928 +vt 0.081474 0.150239 +vt 0.839840 0.511356 +vt 0.611671 0.986086 +vt 0.134917 0.272590 +vt 0.097756 0.269182 +vt 0.918093 0.050867 +vt 0.935388 0.018721 +vt 0.180940 0.171841 +vt 0.822273 0.450357 +vt 0.161652 0.150239 +vt 0.391027 0.646770 +vt 0.391027 0.699525 +vt 0.391112 0.773682 +vt 0.391112 0.722226 +vt 0.729409 0.698090 +vt 0.314101 0.599696 +vt 0.754910 0.693928 +vt 0.323853 0.557982 +vt 0.702724 0.022261 +vt 0.702724 0.075016 +vt 0.314101 0.779097 +vt 0.314101 0.727641 +vt 0.732061 0.372645 +vt 0.613133 0.323153 +vt 0.757562 0.368483 +vt 0.622885 0.281439 +vt 0.704624 0.027491 +vt 0.701045 0.117649 +vt 0.773676 0.122828 +vt 0.701045 0.170404 +vt 0.698515 0.682770 +vt 0.698515 0.631314 +vt 0.729242 0.281674 +vt 0.553417 0.240039 +vt 0.754743 0.277512 +vt 0.563168 0.198325 +vt 0.771076 0.549851 +vt 0.393313 0.021939 +vt 0.771076 0.602606 +vt 0.463744 0.773682 +vt 0.463744 0.722226 +vt 0.729242 0.456311 +vt 0.536375 0.663551 +vt 0.754743 0.452149 +vt 0.546126 0.621836 +vt 0.711465 0.211159 +vt 0.711465 0.263914 +vt 0.241470 0.779097 +vt 0.241470 0.727641 +vt 0.571361 0.698025 +vt 0.613133 0.501800 +vt 0.596862 0.693863 +vt 0.622885 0.460086 +vt 0.309904 0.646770 +vt 0.309904 0.699525 +vt 0.013485 0.773682 +vt 0.013485 0.722226 +vt 0.232979 0.599696 +vt 0.677985 0.693928 +vt 0.242730 0.557982 +vt 0.220249 0.758293 +vt 0.461297 0.489721 +vt 0.499511 0.456159 +vt 0.073627 0.331777 +vt 0.212389 0.856193 +vt 0.060982 0.362805 +vt 0.021775 0.446291 +vt 0.003418 0.425147 +vt 0.409688 0.370019 +vt 0.461297 0.306152 +vt 0.536375 0.286520 +vt 0.499511 0.272590 +vt 0.387699 0.331776 +vt 0.366187 0.861574 +vt 0.375054 0.362805 +vt 0.413880 0.171896 +vt 0.395522 0.150751 +vt 0.242107 0.304102 +vt 0.262493 0.275039 +vt 0.314101 0.496114 +vt 0.352316 0.462552 +vt 0.394279 0.145969 +vt 0.145118 0.856193 +vt 0.381634 0.176997 +vt 0.340252 0.260484 +vt 0.321895 0.239339 +vt 0.315705 0.399082 +vt 0.336091 0.370019 +vt 0.472283 0.123822 +vt 0.510497 0.090260 +vt 0.227373 0.426757 +vt 0.133943 0.547762 +vt 0.214728 0.457785 +vt 0.418256 0.260484 +vt 0.399898 0.239339 +vt 0.161959 0.304102 +vt 0.182345 0.275039 +vt 0.770039 0.969977 +vt 0.239023 0.496114 +vt 0.277237 0.462552 +vt 0.153775 0.426757 +vt 0.298915 0.861574 +vt 0.141130 0.457785 +vt 0.413880 0.083308 +vt 0.395522 0.062163 +vt 0.389302 0.304102 +vt 0.409688 0.275039 +vt 0.005099 0.489721 +vt 0.043314 0.456159 +vt 0.153775 0.331776 +vt 0.433458 0.861574 +vt 0.141130 0.362805 +vt 0.480897 0.446291 +vt 0.462540 0.425147 +vt 0.242107 0.399082 +vt 0.262493 0.370019 +vt 0.613133 0.344541 +vt 0.021447 0.858988 +vt 0.464897 0.561630 +vt 0.478980 0.856059 +vt 0.885763 0.082700 +vt 0.918093 0.062961 +vt 0.553417 0.261427 +vt 0.698137 0.858575 +vt 0.541655 0.551001 +vt 0.792013 0.918122 +vt 0.771349 0.886811 +vt 0.916738 0.427737 +vt 0.230534 0.534502 +vt 0.624326 0.858575 +vt 0.552641 0.114855 +vt 0.860504 0.357475 +vt 0.839840 0.326165 +vt 0.923215 0.581808 +vt 0.616058 0.439522 +vt 0.462030 0.858988 +vt 0.554320 0.018554 +vt 0.170181 0.856094 +vt 0.149516 0.824783 +vt 0.916414 0.162940 +vt 0.549041 0.076538 +vt 0.856469 0.195534 +vt 0.010379 0.561630 +vt 0.334766 0.861474 +vt 0.314101 0.830164 +vt 0.923487 0.826004 +vt 0.613133 0.528110 +vt 0.540089 0.858510 +vt 0.159055 0.557394 +vt 0.256706 0.861474 +vt 0.236042 0.830164 +vt 0.923487 0.898825 +vn -0.586000 -0.810300 0.000000 +vn -0.850900 -0.525300 0.000000 +vn -0.983500 -0.180700 0.000000 +vn -0.983500 0.180700 0.000000 +vn -0.850900 0.525300 0.000000 +vn -0.586000 0.810300 0.000000 +vn -0.414400 -0.810300 -0.414400 +vn -0.601700 -0.525300 -0.601700 +vn -0.695500 -0.180700 -0.695500 +vn -0.695500 0.180700 -0.695500 +vn -0.601700 0.525300 -0.601700 +vn -0.414400 0.810300 -0.414400 +vn 0.000000 -0.810300 -0.586000 +vn 0.000000 -0.525300 -0.850900 +vn 0.000000 -0.180700 -0.983500 +vn 0.000000 0.180700 -0.983500 +vn 0.000000 0.525300 -0.850900 +vn 0.000000 0.810300 -0.586000 +vn 0.414400 -0.810300 -0.414400 +vn 0.601700 -0.525300 -0.601700 +vn 0.695500 -0.180700 -0.695500 +vn 0.695500 0.180700 -0.695500 +vn 0.601700 0.525300 -0.601700 +vn 0.414400 0.810300 -0.414400 +vn 0.586000 -0.810300 0.000000 +vn 0.850900 -0.525300 0.000000 +vn 0.983500 -0.180700 0.000000 +vn 0.983500 0.180700 0.000000 +vn 0.850900 0.525300 0.000000 +vn 0.586000 0.810300 0.000000 +vn 0.414400 -0.810300 0.414400 +vn 0.601700 -0.525300 0.601700 +vn 0.695500 -0.180700 0.695500 +vn 0.695500 0.180700 0.695500 +vn 0.601700 0.525300 0.601700 +vn 0.414400 0.810300 0.414400 +vn 0.000000 -0.810300 0.586000 +vn -0.000000 -0.525300 0.850900 +vn 0.000000 -0.180700 0.983500 +vn -0.000000 0.180700 0.983500 +vn 0.000000 0.525300 0.850900 +vn -0.000000 0.810300 0.586000 +vn -0.210500 -0.977600 0.000000 +vn -0.210500 0.977600 0.000000 +vn -0.148800 -0.977600 -0.148800 +vn -0.148800 0.977600 -0.148800 +vn 0.000000 -0.977600 -0.210500 +vn 0.000000 0.977600 -0.210500 +vn 0.148800 -0.977600 -0.148800 +vn 0.148800 0.977600 -0.148800 +vn 0.210500 -0.977600 0.000000 +vn 0.210500 0.977600 0.000000 +vn 0.148800 -0.977600 0.148800 +vn 0.148800 0.977600 0.148800 +vn 0.000000 -0.977600 0.210500 +vn 0.000000 0.977600 0.210500 +vn -0.148800 -0.977600 0.148800 +vn -0.414400 -0.810300 0.414400 +vn -0.601700 -0.525300 0.601700 +vn -0.695500 -0.180700 0.695500 +vn -0.695500 0.180700 0.695500 +vn -0.601700 0.525300 0.601700 +vn -0.414400 0.810300 0.414400 +vn -0.148800 0.977600 0.148800 +vn 0.564300 -0.825500 -0.007300 +vn 0.206500 -0.978400 -0.006200 +vn -0.162600 -0.986700 -0.004300 +vn -0.502800 -0.864400 -0.001900 +vn -0.782200 -0.623100 0.000900 +vn -0.782100 -0.623100 0.000900 +vn -0.960700 -0.277400 0.003600 +vn 0.620200 -0.661900 -0.421100 +vn 0.287600 -0.740800 -0.607100 +vn -0.068800 -0.712000 -0.698800 +vn -0.409000 -0.589700 -0.696400 +vn -0.701000 -0.385400 -0.600000 +vn -0.904900 -0.113700 -0.410200 +vn 0.759400 -0.271000 -0.591400 +vn 0.489900 -0.173200 -0.854400 +vn 0.164900 -0.056000 -0.984700 +vn -0.175200 0.066200 -0.982300 +vn -0.175200 0.066300 -0.982300 +vn -0.498800 0.182100 -0.847400 +vn -0.765600 0.277100 -0.580600 +vn 0.900500 0.118000 -0.418500 +vn 0.694700 0.391700 -0.603300 +vn 0.401700 0.596900 -0.694500 +vn 0.061500 0.719200 -0.692100 +vn -0.293900 0.747000 -0.596300 +vn -0.624500 0.666200 -0.407700 +vn 0.960700 0.277400 -0.003600 +vn 0.782200 0.623100 -0.000900 +vn 0.502800 0.864400 0.001900 +vn 0.162600 0.986700 0.004300 +vn -0.206500 0.978400 0.006200 +vn -0.564300 0.825500 0.007300 +vn 0.904900 0.113700 0.410200 +vn 0.701000 0.385400 0.600000 +vn 0.409000 0.589700 0.696400 +vn 0.068800 0.712000 0.698800 +vn -0.287600 0.740800 0.607100 +vn -0.620200 0.661900 0.421100 +vn 0.765600 -0.277100 0.580600 +vn 0.498800 -0.182100 0.847400 +vn 0.175200 -0.066300 0.982300 +vn -0.164900 0.056000 0.984700 +vn -0.489900 0.173200 0.854400 +vn -0.759400 0.271000 0.591400 +vn 0.848800 -0.528700 -0.007200 +vn -0.991200 0.132600 0.005900 +vn 0.868800 -0.469900 -0.155800 +vn -0.971100 0.191400 -0.142700 +vn 0.918900 -0.329600 -0.217000 +vn -0.921100 0.331800 -0.203900 +vn 0.969500 -0.189800 -0.154900 +vn -0.870400 0.471500 -0.141800 +vn 0.991200 -0.132600 -0.005900 +vn -0.848800 0.528700 0.007200 +vn 0.971100 -0.191400 0.142700 +vn -0.868800 0.469900 0.155800 +vn 0.921100 -0.331800 0.203900 +vn -0.918900 0.329600 0.217000 +vn 0.870400 -0.471500 0.141800 +vn 0.624500 -0.666200 0.407700 +vn 0.293900 -0.747000 0.596300 +vn -0.061500 -0.719200 0.692100 +vn -0.401700 -0.596900 0.694500 +vn -0.694700 -0.391700 0.603300 +vn -0.900500 -0.118000 0.418500 +vn -0.969500 0.189800 0.154900 +vn 0.782100 0.623100 -0.000900 +vn 0.175200 -0.066200 0.982300 +vn -0.921100 0.331700 -0.203900 +vn 0.921100 -0.331700 0.203900 +vn -0.318200 -0.825400 -0.466200 +vn -0.118400 -0.978400 -0.169500 +vn 0.088200 -0.986700 0.136400 +vn 0.278900 -0.864500 0.418100 +vn 0.436000 -0.623300 0.649200 +vn 0.536900 -0.277600 0.796600 +vn -0.693700 -0.662500 -0.282700 +vn -0.663500 -0.741800 0.097100 +vn -0.541900 -0.713300 0.444500 +vn -0.351200 -0.591100 0.726200 +vn -0.109100 -0.386700 0.915700 +vn 0.161500 -0.114700 0.980200 +vn -0.913200 -0.272000 -0.303400 +vn -0.982300 -0.174700 0.066900 +vn -0.910400 -0.057800 0.409600 +vn -0.719700 0.064400 0.691300 +vn -0.427900 0.180400 0.885600 +vn -0.058000 0.275900 0.959400 +vn -0.848300 0.117500 -0.516300 +vn -0.888100 0.390700 -0.242200 +vn -0.801500 0.595700 0.052400 +vn -0.610700 0.717900 0.334100 +vn -0.333700 0.745900 0.576500 +vn 0.006900 0.665300 0.746600 +vn -0.536900 0.277600 -0.796600 +vn -0.436000 0.623300 -0.649200 +vn -0.278900 0.864500 -0.418100 +vn -0.088200 0.986700 -0.136400 +vn 0.118400 0.978400 0.169500 +vn 0.318200 0.825400 0.466200 +vn -0.161500 0.114700 -0.980200 +vn 0.109100 0.386700 -0.915700 +vn 0.351200 0.591100 -0.726200 +vn 0.541900 0.713300 -0.444500 +vn 0.663500 0.741800 -0.097100 +vn 0.693700 0.662500 0.282700 +vn 0.058000 -0.275900 -0.959400 +vn 0.427900 -0.180400 -0.885600 +vn 0.719700 -0.064400 -0.691300 +vn 0.910400 0.057800 -0.409600 +vn 0.982300 0.174700 -0.066900 +vn 0.913200 0.272000 0.303400 +vn -0.476600 -0.528600 -0.702500 +vn 0.555200 0.132400 0.821100 +vn -0.611400 -0.470000 -0.636500 +vn 0.420300 0.190900 0.887100 +vn -0.690300 -0.329800 -0.644000 +vn 0.341500 0.331200 0.879600 +vn -0.667000 -0.189900 -0.720500 +vn 0.364800 0.471000 0.803200 +vn -0.555200 -0.132400 -0.821100 +vn 0.476600 0.528600 0.702500 +vn -0.420300 -0.190900 -0.887100 +vn 0.611400 0.470000 0.636500 +vn -0.341500 -0.331200 -0.879600 +vn 0.690300 0.329800 0.644000 +vn -0.364800 -0.471000 -0.803200 +vn -0.006900 -0.665300 -0.746600 +vn 0.333700 -0.745900 -0.576500 +vn 0.610700 -0.717900 -0.334100 +vn 0.801500 -0.595700 -0.052400 +vn 0.888100 -0.390700 0.242200 +vn 0.848300 -0.117500 0.516300 +vn 0.667000 0.189900 0.720500 +vn 0.910400 0.057800 -0.409700 +vn 0.611400 0.470000 0.636600 +vn 0.088100 -0.986700 0.136400 +vn -0.088100 0.986700 -0.136400 +vn -0.611400 -0.470000 -0.636600 +vn -0.719600 0.064400 0.691300 +vn -0.278200 -0.826200 0.489900 +vn -0.132500 -0.977800 0.162400 +vn 0.024500 -0.984900 -0.171600 +vn 0.175200 -0.861700 -0.476300 +vn 0.305300 -0.619800 -0.722900 +vn 0.397200 -0.274000 -0.875900 +vn 0.078700 -0.686500 0.722800 +vn 0.385700 -0.774900 0.500700 +vn 0.623500 -0.750400 0.219400 +vn 0.774200 -0.627200 -0.085300 +vn 0.823500 -0.416900 -0.384700 +vn 0.754100 -0.134300 -0.642900 +vn 0.191700 -0.306400 0.932400 +vn 0.549800 -0.223000 0.805000 +vn 0.813100 -0.112400 0.571100 +vn 0.963800 0.010700 0.266500 +vn 0.987600 0.135000 -0.080400 +vn 0.867100 0.245800 -0.433300 +vn -0.005400 0.091500 0.995800 +vn 0.263500 0.354700 0.897100 +vn 0.482300 0.555300 0.677500 +vn 0.633000 0.678500 0.372900 +vn 0.701400 0.712700 0.011700 +vn 0.669900 0.643700 -0.369900 +vn -0.397200 0.274000 0.875900 +vn -0.305300 0.619800 0.722900 +vn -0.175200 0.861700 0.476300 +vn -0.024500 0.984900 0.171600 +vn 0.132500 0.977800 -0.162400 +vn 0.278200 0.826200 -0.489900 +vn 0.278200 0.826200 -0.489800 +vn -0.754100 0.134300 0.642900 +vn -0.823500 0.416900 0.384700 +vn -0.774200 0.627200 0.085300 +vn -0.623500 0.750400 -0.219400 +vn -0.385700 0.774900 -0.500700 +vn -0.078700 0.686500 -0.722800 +vn -0.867100 -0.245800 0.433300 +vn -0.987600 -0.135000 0.080400 +vn -0.963800 -0.010700 -0.266500 +vn -0.813100 0.112400 -0.571100 +vn -0.549800 0.223000 -0.805000 +vn -0.191700 0.306400 -0.932400 +vn -0.386000 -0.530700 0.754500 +vn 0.428800 0.135500 -0.893200 +vn -0.257900 -0.480500 0.838200 +vn 0.557000 0.185700 -0.809500 +vn -0.217300 -0.344000 0.913500 +vn 0.597500 0.322200 -0.734200 +vn -0.288100 -0.201100 0.936300 +vn 0.526700 0.465100 -0.711500 +vn -0.428800 -0.135500 0.893200 +vn 0.386000 0.530700 -0.754500 +vn -0.557000 -0.185700 0.809500 +vn 0.257800 0.480500 -0.838200 +vn -0.597500 -0.322200 0.734200 +vn 0.217300 0.344000 -0.913500 +vn -0.526700 -0.465100 0.711500 +vn -0.669900 -0.643700 0.369900 +vn -0.701400 -0.712700 -0.011700 +vn -0.633000 -0.678500 -0.372900 +vn -0.482300 -0.555300 -0.677500 +vn -0.263500 -0.354700 -0.897100 +vn 0.005400 -0.091500 -0.995800 +vn 0.288100 0.201100 -0.936300 +vn -0.278200 -0.826200 0.489800 +vn -0.257800 -0.480500 0.838200 +vn 0.257900 0.480500 -0.838200 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 2/4/2 4/5/2 5/6/2 +f 4/7/3 6/8/3 7/9/3 +f 6/8/4 8/10/4 9/11/4 +f 8/10/5 10/12/5 11/13/5 +f 10/14/6 12/15/6 13/16/6 +f 3/17/7 5/6/7 14/18/7 +f 5/6/8 7/19/8 15/20/8 +f 7/19/9 9/21/9 16/22/9 +f 9/21/10 11/23/10 17/24/10 +f 11/23/11 13/25/11 18/26/11 +f 13/16/12 19/27/12 20/28/12 +f 14/29/13 15/30/13 21/31/13 +f 15/20/14 16/22/14 22/32/14 +f 16/22/15 17/24/15 23/33/15 +f 17/24/16 18/26/16 24/34/16 +f 18/35/17 20/28/17 25/36/17 +f 20/28/18 26/37/18 27/38/18 +f 21/31/19 22/39/19 28/40/19 +f 22/41/20 23/42/20 29/43/20 +f 23/42/21 24/44/21 30/45/21 +f 24/44/22 25/46/22 31/47/22 +f 25/46/23 27/48/23 32/49/23 +f 27/38/24 33/50/24 34/51/24 +f 28/40/25 29/52/25 35/53/25 +f 29/43/26 30/45/26 36/54/26 +f 30/45/27 31/47/27 37/55/27 +f 31/47/28 32/49/28 38/56/28 +f 32/57/29 34/58/29 39/59/29 +f 34/51/30 40/60/30 41/61/30 +f 35/53/31 36/62/31 42/63/31 +f 36/64/32 37/65/32 43/66/32 +f 37/65/33 38/67/33 44/68/33 +f 38/67/34 39/59/34 45/69/34 +f 39/59/35 41/70/35 46/71/35 +f 41/70/36 47/72/36 48/73/36 +f 42/63/37 43/74/37 49/75/37 +f 43/74/38 44/76/38 50/77/38 +f 44/68/39 45/69/39 51/78/39 +f 45/69/40 46/71/40 52/79/40 +f 46/71/41 48/73/41 53/80/41 +f 48/81/42 54/82/42 55/83/42 +f 56/84/43 1/1/43 3/3/43 +f 12/15/44 57/85/44 19/27/44 +f 56/84/45 3/3/45 14/29/45 +f 19/27/46 57/85/46 26/37/46 +f 56/84/47 14/29/47 21/31/47 +f 26/37/48 57/85/48 33/50/48 +f 56/84/49 21/31/49 28/40/49 +f 33/50/50 57/85/50 40/60/50 +f 56/84/51 28/40/51 35/53/51 +f 40/60/52 57/85/52 47/86/52 +f 56/84/53 35/53/53 42/63/53 +f 47/86/54 57/85/54 54/82/54 +f 56/84/55 42/63/55 49/75/55 +f 54/82/56 57/85/56 58/87/56 +f 56/84/57 49/75/57 1/1/57 +f 49/75/58 50/77/58 2/2/58 +f 50/88/59 51/89/59 2/90/59 +f 51/89/60 52/91/60 4/7/60 +f 52/91/61 53/92/61 6/8/61 +f 53/92/62 55/93/62 10/12/62 +f 55/83/63 58/87/63 12/15/63 +f 58/87/64 57/85/64 12/15/64 +f 59/94/1 60/95/1 61/96/1 +f 60/97/2 62/98/2 63/99/2 +f 62/100/3 64/101/3 65/102/3 +f 64/101/4 66/103/4 67/104/4 +f 66/103/5 68/105/5 69/106/5 +f 68/107/6 70/108/6 71/109/6 +f 61/110/7 63/99/7 72/111/7 +f 63/99/8 65/112/8 73/113/8 +f 65/112/9 67/114/9 74/115/9 +f 67/114/10 69/116/10 75/117/10 +f 69/116/11 71/118/11 76/119/11 +f 71/109/12 77/120/12 78/121/12 +f 72/122/13 73/123/13 79/124/13 +f 73/113/14 74/115/14 80/125/14 +f 74/115/15 75/117/15 81/126/15 +f 75/117/16 76/119/16 82/127/16 +f 76/128/17 78/121/17 83/129/17 +f 78/121/18 84/130/18 85/131/18 +f 79/124/19 80/132/19 86/133/19 +f 80/134/20 81/135/20 87/136/20 +f 81/135/21 82/137/21 88/138/21 +f 82/137/22 83/139/22 89/140/22 +f 83/139/23 85/141/23 90/142/23 +f 85/131/24 91/143/24 92/144/24 +f 86/133/25 87/145/25 93/146/25 +f 87/136/26 88/138/26 94/147/26 +f 88/138/27 89/140/27 95/148/27 +f 89/140/28 90/142/28 96/149/28 +f 90/150/29 92/151/29 97/152/29 +f 92/144/30 98/153/30 99/154/30 +f 93/146/31 94/155/31 100/156/31 +f 94/157/32 95/158/32 101/159/32 +f 95/158/33 96/160/33 102/161/33 +f 96/160/34 97/152/34 103/162/34 +f 97/152/35 99/163/35 104/164/35 +f 99/163/36 105/165/36 106/166/36 +f 100/156/37 101/167/37 107/168/37 +f 101/167/38 102/169/38 107/168/38 +f 102/161/39 103/162/39 108/170/39 +f 103/162/40 104/164/40 109/171/40 +f 104/164/41 106/166/41 110/172/41 +f 106/173/42 111/174/42 112/175/42 +f 113/176/43 59/94/43 61/96/43 +f 70/108/44 114/177/44 77/120/44 +f 113/176/45 61/96/45 72/122/45 +f 77/120/46 114/177/46 84/130/46 +f 113/176/47 72/122/47 79/124/47 +f 84/130/48 114/177/48 91/143/48 +f 113/176/49 79/124/49 86/133/49 +f 91/143/50 114/177/50 98/153/50 +f 113/176/51 86/133/51 93/146/51 +f 98/153/52 114/177/52 105/178/52 +f 113/176/53 93/146/53 100/156/53 +f 105/178/54 114/177/54 111/174/54 +f 113/176/55 100/156/55 115/179/55 +f 111/174/56 114/177/56 116/180/56 +f 113/176/57 115/179/57 59/94/57 +f 115/179/58 107/168/58 59/94/58 +f 107/181/59 108/182/59 60/183/59 +f 108/182/60 109/184/60 62/100/60 +f 109/184/61 110/185/61 64/101/61 +f 110/185/62 112/186/62 66/103/62 +f 112/175/63 116/180/63 70/108/63 +f 116/180/64 114/177/64 70/108/64 +f 117/187/1 118/188/1 119/189/1 +f 118/190/2 120/191/2 121/192/2 +f 120/193/3 122/194/3 123/195/3 +f 122/194/4 124/196/4 125/197/4 +f 124/196/5 126/198/5 127/199/5 +f 126/200/6 128/201/6 129/202/6 +f 119/203/7 121/192/7 130/204/7 +f 121/192/8 123/205/8 131/206/8 +f 123/205/9 125/207/9 132/208/9 +f 125/207/10 127/209/10 133/210/10 +f 127/209/11 129/211/11 134/212/11 +f 129/202/12 135/213/12 136/214/12 +f 130/215/13 131/216/13 137/217/13 +f 131/206/14 132/208/14 138/218/14 +f 132/208/15 133/210/15 139/219/15 +f 133/210/16 134/212/16 139/219/16 +f 134/220/17 136/214/17 140/221/17 +f 136/214/18 141/222/18 140/221/18 +f 137/217/19 138/223/19 142/224/19 +f 138/225/20 143/226/20 144/227/20 +f 143/226/21 139/228/21 145/229/21 +f 139/228/22 146/230/22 147/231/22 +f 146/230/23 140/232/23 148/233/23 +f 140/221/24 149/234/24 150/235/24 +f 142/224/25 144/236/25 151/237/25 +f 144/227/26 145/229/26 152/238/26 +f 145/229/27 147/231/27 153/239/27 +f 147/231/28 148/233/28 154/240/28 +f 148/241/29 150/97/29 155/242/29 +f 150/235/30 156/243/30 157/244/30 +f 151/237/31 152/245/31 158/246/31 +f 152/247/32 153/248/32 159/249/32 +f 153/248/33 154/250/33 160/251/33 +f 154/250/34 155/242/34 161/252/34 +f 155/242/35 157/253/35 162/254/35 +f 157/253/36 163/255/36 164/256/36 +f 158/246/37 159/257/37 165/258/37 +f 159/257/38 160/259/38 166/260/38 +f 160/251/39 161/252/39 167/261/39 +f 161/252/40 162/254/40 168/262/40 +f 162/254/41 164/256/41 169/263/41 +f 164/264/42 170/265/42 171/266/42 +f 172/267/43 117/187/43 119/189/43 +f 128/201/44 173/268/44 135/213/44 +f 172/267/45 119/189/45 130/215/45 +f 135/213/46 173/268/46 141/222/46 +f 172/267/47 130/215/47 137/217/47 +f 141/222/48 173/268/48 149/234/48 +f 172/267/49 137/217/49 142/224/49 +f 149/234/50 173/268/50 156/243/50 +f 172/267/51 142/224/51 151/237/51 +f 156/243/52 173/268/52 163/269/52 +f 172/267/53 151/237/53 158/246/53 +f 163/269/54 173/268/54 170/265/54 +f 172/267/55 158/246/55 165/258/55 +f 170/265/56 173/268/56 174/270/56 +f 172/267/57 165/258/57 117/187/57 +f 165/258/58 166/260/58 117/187/58 +f 166/271/59 167/272/59 118/273/59 +f 167/272/60 168/274/60 120/193/60 +f 168/274/61 169/275/61 122/194/61 +f 169/275/62 171/276/62 124/196/62 +f 171/266/63 174/270/63 128/201/63 +f 174/270/64 173/268/64 128/201/64 +f 175/277/1 176/278/1 177/279/1 +f 176/280/2 178/281/2 179/282/2 +f 178/283/3 180/284/3 181/285/3 +f 180/284/4 182/286/4 183/287/4 +f 182/286/5 184/288/5 185/289/5 +f 184/290/6 186/291/6 187/292/6 +f 177/293/7 179/282/7 188/294/7 +f 179/282/8 181/295/8 189/296/8 +f 181/295/9 183/297/9 190/298/9 +f 183/297/10 185/299/10 191/300/10 +f 185/299/11 187/301/11 192/302/11 +f 187/292/12 193/303/12 194/304/12 +f 188/305/13 189/306/13 195/307/13 +f 189/296/14 190/298/14 196/308/14 +f 190/298/15 191/300/15 197/309/15 +f 191/300/16 192/302/16 198/310/16 +f 192/311/17 194/304/17 199/312/17 +f 194/304/18 200/313/18 201/314/18 +f 195/307/19 196/315/19 202/316/19 +f 196/317/20 197/318/20 203/319/20 +f 197/318/21 198/320/21 204/321/21 +f 198/320/22 199/322/22 205/323/22 +f 199/322/23 201/324/23 206/325/23 +f 201/314/24 207/326/24 208/327/24 +f 202/316/25 203/328/25 209/329/25 +f 203/319/26 204/321/26 210/330/26 +f 204/321/27 205/323/27 211/331/27 +f 205/323/28 206/325/28 212/332/28 +f 206/333/29 208/334/29 213/335/29 +f 208/327/30 214/336/30 215/337/30 +f 209/329/31 210/338/31 216/339/31 +f 210/340/32 211/341/32 217/342/32 +f 211/341/33 212/343/33 218/344/33 +f 212/343/34 213/335/34 219/345/34 +f 213/335/35 215/346/35 220/347/35 +f 215/346/36 221/348/36 222/349/36 +f 216/339/37 217/350/37 223/351/37 +f 217/350/38 218/352/38 224/353/38 +f 218/344/39 219/345/39 225/354/39 +f 219/345/40 220/347/40 226/355/40 +f 220/347/41 222/349/41 227/356/41 +f 222/357/42 228/358/42 229/359/42 +f 230/360/43 175/277/43 177/279/43 +f 186/291/44 231/361/44 193/303/44 +f 230/360/45 177/279/45 188/305/45 +f 193/303/46 231/361/46 200/313/46 +f 230/360/47 188/305/47 195/307/47 +f 200/313/48 231/361/48 207/326/48 +f 230/360/49 195/307/49 202/316/49 +f 207/326/50 231/361/50 214/336/50 +f 230/360/51 202/316/51 209/329/51 +f 214/336/52 231/361/52 221/362/52 +f 230/360/53 209/329/53 216/339/53 +f 221/362/54 231/361/54 228/358/54 +f 230/360/55 216/339/55 223/351/55 +f 228/358/56 231/361/56 232/363/56 +f 230/360/57 223/351/57 175/277/57 +f 223/351/58 224/353/58 175/277/58 +f 224/364/59 225/365/59 176/366/59 +f 225/365/60 226/367/60 178/283/60 +f 226/367/61 227/368/61 180/284/61 +f 227/368/62 229/369/62 182/286/62 +f 229/359/63 232/363/63 184/290/63 +f 232/363/64 231/361/64 186/291/64 +f 233/370/1 234/371/1 235/372/1 +f 234/373/2 236/374/2 237/375/2 +f 236/376/3 238/377/3 239/378/3 +f 238/377/4 240/379/4 241/380/4 +f 240/379/5 242/381/5 243/382/5 +f 242/383/6 244/384/6 245/385/6 +f 235/386/7 237/375/7 246/387/7 +f 237/375/8 239/388/8 247/389/8 +f 239/388/9 241/390/9 248/391/9 +f 241/390/10 243/392/10 249/393/10 +f 243/392/11 245/394/11 250/395/11 +f 245/385/12 251/396/12 252/397/12 +f 246/398/13 247/399/13 253/400/13 +f 247/389/14 248/391/14 254/401/14 +f 248/391/15 249/393/15 255/402/15 +f 249/393/16 250/395/16 256/403/16 +f 250/404/17 252/397/17 257/405/17 +f 252/397/18 258/406/18 259/407/18 +f 253/400/19 254/408/19 260/409/19 +f 254/410/20 255/411/20 261/412/20 +f 255/411/21 256/240/21 262/413/21 +f 256/240/22 257/414/22 263/415/22 +f 257/414/23 259/416/23 264/417/23 +f 259/407/24 265/418/24 266/419/24 +f 260/409/25 261/420/25 267/421/25 +f 261/412/26 262/413/26 268/422/26 +f 262/413/27 263/415/27 269/423/27 +f 263/415/28 264/417/28 270/424/28 +f 264/425/29 266/426/29 271/427/29 +f 266/419/30 272/428/30 273/429/30 +f 267/421/31 268/430/31 274/431/31 +f 268/432/32 269/433/32 275/434/32 +f 269/433/33 270/435/33 276/436/33 +f 270/435/34 271/427/34 277/437/34 +f 271/427/35 273/438/35 278/439/35 +f 273/438/36 279/440/36 280/441/36 +f 274/431/37 275/442/37 281/443/37 +f 275/442/38 276/444/38 282/445/38 +f 276/436/39 277/437/39 283/446/39 +f 277/437/40 278/439/40 284/447/40 +f 278/439/41 280/441/41 285/448/41 +f 280/449/42 286/450/42 287/451/42 +f 288/452/43 233/370/43 235/372/43 +f 244/384/44 289/453/44 251/396/44 +f 288/452/45 235/372/45 246/398/45 +f 251/396/46 289/453/46 258/406/46 +f 288/452/47 246/398/47 253/400/47 +f 258/406/48 289/453/48 265/418/48 +f 288/452/49 253/400/49 260/409/49 +f 265/418/50 289/453/50 272/428/50 +f 288/452/51 260/409/51 267/421/51 +f 272/428/52 289/453/52 279/454/52 +f 288/452/53 267/421/53 274/431/53 +f 279/454/54 289/453/54 286/450/54 +f 288/452/55 274/431/55 281/443/55 +f 286/450/56 289/453/56 290/455/56 +f 288/452/57 281/443/57 233/370/57 +f 281/443/58 282/445/58 233/370/58 +f 282/456/59 283/457/59 234/458/59 +f 283/457/60 284/459/60 236/376/60 +f 284/459/61 285/460/61 238/377/61 +f 285/460/62 287/461/62 240/379/62 +f 287/451/63 290/455/63 242/383/63 +f 290/455/64 289/453/64 244/384/64 +f 291/462/1 292/463/1 293/464/1 +f 292/426/2 294/465/2 295/466/2 +f 294/467/3 296/468/3 297/469/3 +f 296/468/4 298/470/4 299/471/4 +f 298/470/5 300/472/5 301/473/5 +f 300/474/6 302/475/6 303/476/6 +f 293/477/7 295/466/7 304/478/7 +f 295/466/8 297/479/8 305/480/8 +f 297/479/9 299/481/9 306/482/9 +f 299/481/10 301/483/10 307/484/10 +f 301/483/11 303/485/11 308/486/11 +f 303/476/12 309/487/12 310/488/12 +f 304/489/13 305/490/13 311/491/13 +f 305/480/14 306/482/14 312/492/14 +f 306/482/15 307/484/15 313/493/15 +f 307/484/16 308/486/16 314/494/16 +f 308/495/17 310/488/17 315/496/17 +f 310/488/18 316/497/18 317/498/18 +f 311/491/19 312/499/19 318/500/19 +f 312/501/20 313/502/20 319/503/20 +f 313/502/21 314/504/21 320/505/21 +f 314/504/22 315/506/22 321/507/22 +f 315/506/23 317/508/23 322/509/23 +f 317/498/24 323/510/24 324/511/24 +f 318/500/25 319/512/25 325/513/25 +f 319/503/26 320/505/26 326/514/26 +f 320/505/27 321/507/27 327/515/27 +f 321/507/28 322/509/28 328/516/28 +f 322/517/29 324/280/29 329/518/29 +f 324/511/30 330/519/30 331/520/30 +f 325/513/31 326/521/31 332/522/31 +f 326/523/32 327/524/32 333/525/32 +f 327/524/33 328/526/33 334/527/33 +f 328/526/34 329/518/34 335/528/34 +f 329/518/35 331/529/35 336/530/35 +f 331/529/36 337/531/36 338/532/36 +f 332/522/37 333/533/37 339/534/37 +f 333/533/38 334/535/38 340/536/38 +f 334/527/39 335/528/39 341/537/39 +f 335/528/40 336/530/40 342/538/40 +f 336/530/41 338/532/41 343/539/41 +f 338/540/42 344/541/42 345/542/42 +f 346/543/43 291/462/43 293/464/43 +f 302/475/44 347/544/44 309/487/44 +f 346/543/45 293/464/45 304/489/45 +f 309/487/46 347/544/46 316/497/46 +f 346/543/47 304/489/47 311/491/47 +f 316/497/48 347/544/48 323/510/48 +f 346/543/49 311/491/49 318/500/49 +f 323/510/50 347/544/50 330/519/50 +f 346/543/51 318/500/51 325/513/51 +f 330/519/52 347/544/52 337/545/52 +f 346/543/53 325/513/53 332/522/53 +f 337/545/54 347/544/54 344/541/54 +f 346/543/55 332/522/55 339/534/55 +f 344/541/56 347/544/56 348/546/56 +f 346/543/57 339/534/57 291/462/57 +f 339/534/58 340/536/58 291/462/58 +f 340/547/59 341/548/59 292/549/59 +f 341/548/60 342/550/60 294/467/60 +f 342/550/61 343/551/61 296/468/61 +f 343/551/62 345/552/62 298/470/62 +f 345/542/63 348/546/63 302/475/63 +f 348/546/64 347/544/64 302/475/64 +f 349/553/65 350/554/65 351/555/65 +f 350/554/66 352/556/66 353/557/66 +f 352/556/67 354/558/67 355/559/67 +f 354/558/68 356/560/68 357/561/68 +f 356/562/69 358/563/70 359/564/70 +f 358/565/71 360/566/71 361/567/71 +f 351/568/72 353/569/72 362/570/72 +f 353/557/73 355/559/73 363/571/73 +f 355/572/74 357/573/74 364/574/74 +f 357/573/75 359/564/75 365/575/75 +f 359/564/76 361/576/76 366/577/76 +f 361/576/77 367/578/77 368/579/77 +f 362/570/78 363/580/78 369/581/78 +f 363/580/79 364/582/79 370/583/79 +f 364/582/80 365/584/80 371/585/80 +f 365/575/81 366/577/81 372/586/82 +f 366/577/83 373/587/83 374/588/83 +f 373/587/84 368/579/84 375/589/84 +f 369/581/85 370/583/85 376/590/85 +f 370/583/86 371/585/86 377/591/86 +f 371/585/87 372/592/87 378/593/87 +f 372/594/88 374/595/88 379/596/88 +f 374/595/89 375/597/89 380/598/89 +f 375/597/90 381/599/90 382/600/90 +f 376/590/91 377/591/91 383/601/91 +f 377/602/92 378/603/92 384/604/92 +f 378/605/93 379/596/93 385/606/93 +f 379/596/94 380/598/94 386/607/94 +f 380/598/95 382/600/95 387/608/95 +f 382/600/96 388/609/96 387/608/96 +f 383/610/97 384/604/97 389/611/97 +f 384/604/98 385/612/98 390/613/98 +f 385/612/99 386/614/99 391/615/99 +f 386/614/100 392/616/100 393/617/100 +f 392/618/101 387/608/101 394/619/101 +f 387/620/102 395/621/102 396/622/102 +f 389/611/103 390/613/103 397/623/103 +f 390/613/104 391/615/104 398/624/104 +f 391/615/105 393/617/105 399/625/105 +f 393/626/106 394/627/106 400/628/106 +f 394/627/107 396/622/107 400/628/107 +f 396/622/108 401/629/108 402/630/108 +f 403/631/109 349/632/109 351/568/109 +f 360/566/110 404/633/110 367/634/110 +f 403/631/111 351/568/111 362/570/111 +f 367/578/112 404/635/112 368/579/112 +f 403/631/113 362/570/113 369/581/113 +f 368/579/114 404/635/114 381/636/114 +f 403/631/115 369/581/115 376/590/115 +f 381/637/116 404/633/116 388/638/116 +f 403/631/117 376/590/117 383/601/117 +f 388/638/118 404/633/118 395/621/118 +f 403/639/119 383/610/119 389/611/119 +f 395/621/120 404/633/120 401/629/120 +f 403/639/121 389/611/121 397/623/121 +f 401/629/122 404/633/122 405/640/122 +f 403/639/123 397/623/123 349/641/123 +f 397/642/124 398/643/124 349/553/124 +f 398/643/125 399/644/125 350/554/125 +f 399/644/126 406/645/126 352/556/126 +f 406/646/127 400/628/127 354/647/127 +f 400/628/128 402/630/128 356/648/128 +f 402/630/129 405/640/129 358/565/129 +f 405/640/130 404/633/130 360/566/130 +f 407/649/65 408/650/65 409/651/65 +f 408/650/66 410/652/66 411/653/66 +f 410/652/67 412/654/67 413/655/67 +f 412/654/68 414/656/68 415/657/68 +f 414/658/70 416/659/70 417/660/70 +f 416/661/71 418/662/71 419/663/71 +f 409/664/72 411/665/72 420/666/72 +f 411/653/73 413/655/73 421/667/73 +f 413/668/74 415/669/74 422/670/74 +f 415/669/75 417/660/75 423/671/75 +f 417/660/76 419/672/76 424/673/76 +f 419/672/77 425/674/77 426/675/77 +f 420/666/78 421/676/78 427/677/78 +f 421/676/79 422/678/79 427/677/79 +f 422/678/80 423/679/80 428/680/80 +f 423/671/81 424/673/82 429/681/82 +f 424/673/83 426/675/83 430/682/83 +f 426/675/84 431/683/84 432/684/84 +f 433/685/85 427/677/85 434/686/85 +f 427/677/86 428/680/86 435/687/86 +f 428/680/87 429/688/87 436/689/87 +f 429/690/88 430/691/88 437/692/88 +f 430/691/89 432/693/89 438/694/89 +f 432/693/90 439/695/90 440/696/90 +f 434/686/91 435/687/91 441/697/91 +f 435/698/131 436/699/131 442/700/131 +f 436/701/93 437/692/93 443/702/93 +f 437/692/94 438/694/94 444/703/94 +f 438/694/95 440/696/95 445/704/95 +f 440/696/96 446/705/96 447/706/96 +f 441/707/97 442/700/97 448/708/97 +f 442/700/98 443/709/98 449/710/98 +f 443/709/99 444/711/99 450/712/99 +f 444/711/100 445/713/100 451/714/100 +f 445/704/101 447/706/101 452/715/101 +f 447/716/102 453/717/102 454/718/102 +f 448/708/103 449/710/103 455/719/103 +f 449/710/104 450/712/104 456/720/104 +f 450/712/132 451/714/132 457/721/132 +f 451/722/106 452/723/106 458/724/106 +f 452/723/107 454/718/107 459/725/107 +f 454/718/108 460/726/108 461/727/108 +f 462/728/109 407/729/109 409/664/109 +f 418/662/110 463/730/110 425/731/110 +f 462/728/111 409/664/111 420/666/111 +f 425/674/112 463/732/112 431/683/112 +f 462/728/113 420/666/113 433/685/113 +f 431/683/114 463/732/114 439/733/114 +f 462/728/115 433/685/115 434/686/115 +f 439/734/116 463/730/116 446/735/116 +f 462/728/117 434/686/117 441/697/117 +f 446/735/118 463/730/118 453/717/118 +f 462/736/119 441/707/119 448/708/119 +f 453/717/120 463/730/120 460/726/120 +f 462/736/121 448/708/121 455/719/121 +f 460/726/122 463/730/122 464/737/122 +f 462/736/123 455/719/123 407/738/123 +f 455/739/124 456/740/124 407/649/124 +f 456/740/125 457/741/125 408/650/125 +f 457/741/126 458/742/126 410/652/126 +f 458/724/127 459/725/127 412/743/127 +f 459/725/128 461/727/128 416/661/128 +f 461/727/129 464/737/129 416/661/129 +f 464/737/130 463/730/130 418/662/130 +f 465/744/65 466/745/65 467/746/65 +f 466/745/66 468/747/66 469/748/66 +f 468/747/67 470/749/67 471/750/67 +f 470/749/68 472/751/68 473/752/68 +f 472/753/70 474/754/70 475/755/70 +f 474/756/71 476/757/71 477/758/71 +f 467/759/72 469/760/72 478/761/72 +f 469/748/73 471/750/73 479/762/73 +f 471/763/74 473/764/74 480/765/74 +f 473/764/75 475/755/75 481/766/75 +f 475/755/76 482/767/76 483/768/76 +f 482/767/77 477/769/77 484/770/77 +f 478/761/78 479/771/78 485/772/78 +f 479/771/79 480/773/79 486/774/79 +f 480/773/80 481/775/80 487/776/80 +f 481/766/82 483/768/82 488/777/82 +f 483/768/83 484/770/83 489/778/83 +f 484/770/84 490/779/84 491/780/84 +f 485/772/85 486/774/85 492/781/85 +f 486/774/86 487/776/86 493/782/86 +f 487/776/87 488/783/87 494/784/87 +f 488/785/88 489/786/88 495/787/88 +f 489/786/89 491/788/89 496/789/89 +f 491/788/90 497/790/90 498/791/90 +f 492/781/91 493/782/91 499/792/91 +f 493/793/92 494/794/92 500/795/131 +f 494/796/93 495/787/93 501/797/93 +f 495/787/94 496/789/94 502/798/94 +f 496/789/95 498/791/95 503/799/95 +f 498/791/96 504/800/96 505/801/96 +f 499/802/97 500/795/97 506/803/97 +f 500/795/98 501/804/98 507/805/98 +f 501/804/99 502/806/99 508/807/99 +f 502/806/100 503/808/100 509/809/100 +f 503/799/101 505/801/101 510/810/101 +f 505/811/102 511/812/102 512/813/102 +f 506/803/103 507/805/103 513/814/103 +f 507/805/104 508/807/104 513/814/104 +f 508/807/105 509/809/105 514/815/105 +f 509/816/106 510/817/106 515/818/106 +f 510/817/107 512/813/107 516/819/107 +f 512/813/108 517/820/108 518/821/108 +f 519/822/109 465/823/109 467/759/109 +f 476/757/110 520/824/110 477/758/110 +f 519/822/111 467/759/111 478/761/111 +f 477/769/112 520/825/112 490/779/112 +f 519/822/113 478/761/113 485/772/113 +f 490/779/133 520/825/133 497/826/133 +f 519/822/115 485/772/115 492/781/115 +f 497/827/116 520/824/116 504/828/116 +f 519/822/117 492/781/117 499/792/117 +f 504/828/118 520/824/118 511/812/118 +f 519/829/119 499/802/119 506/803/119 +f 511/812/120 520/824/120 517/820/120 +f 519/829/121 506/803/121 521/830/121 +f 517/820/122 520/824/122 522/831/122 +f 519/829/123 521/830/123 465/832/123 +f 521/833/124 513/834/124 465/744/124 +f 513/834/125 514/835/125 466/745/125 +f 514/835/126 515/836/126 468/747/126 +f 515/818/127 516/819/127 470/837/127 +f 516/819/128 518/821/128 472/838/128 +f 518/821/129 522/831/129 474/756/129 +f 522/831/130 520/824/130 476/757/130 +f 523/839/65 524/840/65 525/841/65 +f 524/840/66 526/842/66 527/843/66 +f 526/842/67 528/844/67 529/845/67 +f 528/844/68 530/846/68 531/847/68 +f 530/848/70 532/849/70 533/850/70 +f 532/851/71 534/852/71 535/853/71 +f 525/854/72 527/855/72 536/856/72 +f 527/843/73 529/845/73 537/857/73 +f 529/858/74 531/859/74 538/860/74 +f 531/859/75 533/850/75 539/861/75 +f 533/850/76 540/862/76 541/863/76 +f 540/862/77 535/864/77 542/865/77 +f 536/856/78 537/866/78 543/867/78 +f 537/866/79 538/868/79 544/869/79 +f 538/868/80 539/870/80 545/871/80 +f 539/861/82 541/863/81 546/872/81 +f 541/863/83 542/865/83 547/873/83 +f 542/865/84 548/874/84 549/875/84 +f 543/867/85 544/869/85 550/876/85 +f 544/869/86 545/871/86 551/877/86 +f 545/871/87 546/878/87 552/879/87 +f 546/880/88 547/881/88 553/882/88 +f 547/881/89 549/883/89 554/884/89 +f 549/883/90 555/885/90 556/886/90 +f 550/876/91 551/877/91 557/887/91 +f 551/888/92 552/889/131 558/890/131 +f 552/891/93 553/882/93 559/892/93 +f 553/882/94 554/884/94 560/893/94 +f 554/884/95 556/886/95 561/894/95 +f 556/886/96 562/895/96 563/896/96 +f 557/897/97 558/890/97 564/898/97 +f 558/890/98 559/899/98 564/898/98 +f 559/899/99 560/900/99 565/901/99 +f 560/900/100 561/902/100 566/903/100 +f 561/894/101 563/896/101 567/904/101 +f 563/905/102 568/906/102 569/907/102 +f 570/908/103 564/898/103 571/909/103 +f 564/898/104 565/901/104 572/910/104 +f 565/901/105 566/903/105 573/911/105 +f 566/912/106 567/913/106 574/914/106 +f 567/913/107 569/907/107 575/915/107 +f 569/907/108 576/916/108 577/917/108 +f 578/918/109 523/919/109 525/854/109 +f 534/852/110 579/920/110 535/853/110 +f 578/918/111 525/854/111 536/856/111 +f 535/864/112 579/921/112 548/874/112 +f 578/918/113 536/856/113 543/867/113 +f 548/874/114 579/921/114 555/922/114 +f 578/918/115 543/867/115 550/876/115 +f 555/923/116 579/920/116 562/924/116 +f 578/918/117 550/876/117 557/887/117 +f 562/924/118 579/920/118 568/906/118 +f 578/925/119 557/897/119 570/908/119 +f 568/906/120 579/920/120 576/916/120 +f 578/925/134 570/908/134 571/909/134 +f 576/916/122 579/920/122 580/926/122 +f 578/925/123 571/909/123 523/927/123 +f 571/928/124 572/929/124 523/839/124 +f 572/929/125 573/930/125 524/840/125 +f 573/930/126 574/931/126 526/842/126 +f 574/914/127 575/915/127 528/932/127 +f 575/915/128 577/917/128 530/933/128 +f 577/917/129 580/926/129 532/851/129 +f 580/926/130 579/920/130 534/852/130 +f 581/934/65 582/935/65 583/936/65 +f 582/935/66 584/937/66 585/938/66 +f 584/937/67 586/939/67 587/940/67 +f 586/939/68 588/941/68 589/942/68 +f 588/943/70 590/944/70 591/945/70 +f 590/946/71 592/947/71 593/948/71 +f 583/949/72 585/950/72 594/951/72 +f 585/938/73 587/940/73 595/952/73 +f 587/953/74 589/954/74 596/955/74 +f 589/954/75 591/945/75 597/956/75 +f 591/945/76 593/957/76 598/958/76 +f 593/957/77 599/959/77 600/960/77 +f 594/951/78 595/961/78 601/962/78 +f 595/961/79 596/963/79 602/964/79 +f 596/963/80 597/965/80 603/966/80 +f 597/956/82 598/958/82 604/967/82 +f 598/958/83 600/960/83 605/968/83 +f 600/960/84 606/969/84 607/970/84 +f 601/962/85 602/964/85 608/971/85 +f 602/964/86 603/966/86 609/972/86 +f 603/966/87 604/973/87 610/974/87 +f 604/975/88 605/976/88 611/977/88 +f 605/976/89 607/978/89 612/979/89 +f 607/978/90 613/980/90 614/981/90 +f 608/971/91 609/972/91 615/982/91 +f 609/983/92 610/984/131 616/985/131 +f 610/986/93 611/977/93 617/987/93 +f 611/977/94 612/979/94 618/988/94 +f 612/979/95 614/981/95 619/989/95 +f 614/981/96 620/990/96 621/991/96 +f 615/992/97 616/985/97 622/993/97 +f 616/985/98 617/994/98 623/995/98 +f 617/994/99 618/996/99 624/997/99 +f 618/996/100 619/998/100 625/999/100 +f 619/989/101 621/991/101 626/1000/101 +f 621/1001/102 627/1002/102 628/1003/102 +f 622/993/103 623/995/103 629/1004/103 +f 623/995/104 624/997/104 630/1005/104 +f 624/997/105 625/999/105 631/1006/105 +f 625/1007/106 626/1008/106 632/1009/106 +f 626/1008/107 628/1003/107 633/1010/107 +f 628/1003/108 634/1011/108 635/1012/108 +f 636/1013/109 581/1014/109 583/949/109 +f 592/947/110 637/1015/110 599/1016/110 +f 636/1013/111 583/949/111 594/951/111 +f 599/959/112 637/1017/112 606/969/112 +f 636/1013/113 594/951/113 601/962/113 +f 606/969/133 637/1017/133 613/1018/133 +f 636/1013/115 601/962/115 608/971/115 +f 613/1019/116 637/1015/116 620/1020/116 +f 636/1013/117 608/971/117 615/982/117 +f 620/1020/118 637/1015/118 627/1002/118 +f 636/1021/119 615/992/119 622/993/119 +f 627/1002/120 637/1015/120 634/1011/120 +f 636/1021/134 622/993/134 629/1004/134 +f 634/1011/122 637/1015/122 638/1022/122 +f 636/1021/123 629/1004/123 581/1023/123 +f 629/1024/124 630/1025/124 581/934/124 +f 630/1025/125 631/1026/125 582/935/125 +f 631/1026/126 632/1027/126 584/937/126 +f 632/1009/127 633/1010/127 586/1028/127 +f 633/1010/128 635/1012/128 588/1029/128 +f 635/1012/129 638/1022/129 592/947/129 +f 638/1022/130 637/1015/130 592/947/130 +f 639/1030/65 640/1031/65 641/1032/65 +f 640/1031/66 642/1033/66 643/1034/66 +f 642/1033/67 644/1035/67 645/1036/67 +f 644/1035/68 646/1037/68 647/1038/68 +f 646/1039/70 648/1040/70 649/1041/70 +f 648/1042/71 650/1043/71 651/1044/71 +f 641/1045/72 643/1046/72 652/1047/72 +f 643/1034/73 645/1036/73 653/1048/73 +f 645/1049/74 647/1050/74 654/1051/74 +f 647/1050/75 649/1041/75 655/1052/75 +f 649/1041/76 651/1053/76 656/1054/76 +f 651/1053/77 657/1055/77 658/1056/77 +f 652/1047/78 653/1057/78 659/1058/78 +f 653/1057/79 654/1059/79 660/1060/79 +f 654/1059/80 655/1061/80 661/1062/80 +f 655/1052/81 656/1054/82 662/1063/82 +f 656/1054/83 658/1056/83 663/1064/83 +f 658/1056/84 664/1065/84 665/1066/84 +f 659/1058/85 660/1060/85 666/1067/85 +f 660/1060/86 661/1062/86 666/1067/86 +f 661/1062/87 662/1068/87 667/1069/87 +f 662/1070/88 663/1071/88 668/1072/88 +f 663/1071/89 665/1073/89 669/1074/89 +f 665/1073/90 670/1075/90 671/1076/90 +f 672/1077/91 666/1067/91 673/1078/91 +f 666/1079/92 667/1080/131 674/1081/131 +f 667/1082/93 668/1072/93 675/1083/93 +f 668/1072/94 669/1074/94 676/1084/94 +f 669/1074/95 671/1076/95 677/1085/95 +f 671/1076/96 678/1086/96 679/1087/96 +f 673/1088/97 674/1081/97 680/1089/97 +f 674/1081/98 675/1090/98 681/1091/98 +f 675/1090/99 676/1092/99 682/1093/99 +f 676/1092/100 677/1094/100 683/1095/100 +f 677/1085/101 684/1096/101 685/1097/101 +f 684/1098/102 679/1099/102 686/1100/102 +f 680/1089/103 681/1091/103 687/1101/103 +f 681/1091/104 682/1093/104 688/1102/104 +f 682/1093/105 683/1095/105 689/1103/105 +f 683/1104/106 685/1105/106 690/1106/106 +f 685/1105/107 686/1100/107 691/1107/107 +f 686/1100/108 692/1108/108 693/1109/108 +f 694/1110/109 639/1111/109 641/1045/109 +f 650/1043/110 695/1112/110 657/1113/110 +f 694/1110/111 641/1045/111 652/1047/111 +f 657/1055/112 695/1114/112 664/1065/112 +f 694/1110/113 652/1047/113 659/1058/113 +f 664/1065/114 695/1114/114 670/1115/114 +f 694/1110/115 659/1058/115 672/1077/115 +f 670/1116/116 695/1112/116 678/1117/116 +f 694/1110/117 672/1077/117 673/1078/117 +f 678/1117/118 695/1112/118 679/1099/118 +f 694/1118/119 673/1088/119 680/1089/119 +f 679/1099/120 695/1112/120 692/1108/120 +f 694/1118/134 680/1089/134 687/1101/134 +f 692/1108/122 695/1112/122 696/1119/122 +f 694/1118/123 687/1101/123 639/1120/123 +f 687/1121/124 688/1122/124 639/1030/124 +f 688/1122/125 689/1123/125 640/1031/125 +f 689/1123/126 690/1124/126 642/1033/126 +f 690/1106/127 691/1107/127 644/1125/127 +f 691/1107/128 693/1109/128 648/1042/128 +f 693/1109/129 696/1119/129 648/1042/129 +f 696/1119/130 695/1112/130 650/1043/130 +f 697/1126/135 698/1127/135 699/1128/135 +f 698/1129/136 700/1130/136 701/1131/136 +f 700/1130/137 702/1132/137 703/1133/137 +f 702/1132/138 704/1134/138 705/1135/138 +f 704/1134/139 706/1136/139 707/1137/139 +f 706/1138/140 708/1139/140 709/1140/140 +f 699/1128/141 701/1141/141 710/1142/141 +f 701/1131/142 703/1133/142 711/1143/142 +f 703/1133/143 705/1135/143 712/1144/143 +f 705/1145/144 707/1146/144 713/1147/144 +f 707/1146/145 709/1148/145 714/1149/145 +f 709/1140/146 715/1150/146 716/1151/146 +f 710/1142/147 711/1152/147 717/1153/147 +f 711/1154/148 712/1155/148 718/1156/148 +f 712/1155/149 713/1147/149 719/1157/149 +f 713/1147/150 714/1149/150 720/1158/150 +f 714/1149/151 716/1159/151 721/1160/151 +f 716/1151/152 722/1161/152 723/1162/152 +f 717/1153/153 718/1163/153 724/1164/153 +f 718/1163/154 719/1165/154 725/1166/154 +f 719/1157/155 720/1158/155 726/1167/155 +f 720/1158/156 721/1160/156 727/1168/156 +f 721/1169/157 723/1170/157 728/1171/157 +f 723/1162/158 729/1172/158 730/1173/158 +f 724/1164/159 725/1166/159 731/1174/159 +f 725/1175/160 726/1176/160 732/1177/160 +f 726/1176/161 727/1178/161 733/1179/161 +f 727/1178/162 728/1171/162 734/1180/162 +f 728/1171/163 730/1181/163 735/1182/163 +f 730/1181/164 736/1183/164 737/1184/164 +f 731/1174/165 732/1185/165 738/1186/165 +f 732/1187/166 733/1188/166 739/1189/166 +f 733/1188/167 734/1190/167 740/1191/167 +f 734/1180/168 735/1182/168 741/1192/168 +f 735/1182/169 737/1184/169 742/1193/169 +f 737/1194/170 743/1195/170 744/1196/170 +f 738/1186/171 739/1197/171 745/1198/171 +f 739/1189/172 740/1191/172 745/1199/172 +f 740/1191/173 741/1200/173 746/1201/173 +f 741/1200/174 742/1202/174 747/1203/174 +f 742/1202/175 744/1204/175 748/1205/175 +f 744/1196/176 749/1206/176 748/1207/176 +f 750/1208/177 697/1126/177 699/1128/177 +f 708/1139/178 751/1209/178 715/1150/178 +f 750/1208/179 699/1128/179 710/1142/179 +f 715/1150/180 751/1209/180 722/1161/180 +f 750/1208/181 710/1142/181 717/1153/181 +f 722/1161/182 751/1209/182 729/1172/182 +f 750/1208/183 717/1153/183 724/1164/183 +f 729/1172/184 751/1209/184 736/1210/184 +f 750/1208/185 724/1164/185 731/1174/185 +f 736/1210/186 751/1209/186 743/1195/186 +f 750/1208/187 731/1174/187 738/1186/187 +f 743/1195/188 751/1209/188 749/1206/188 +f 750/1208/189 738/1186/189 752/1211/189 +f 749/1206/190 751/1209/190 753/1212/190 +f 750/1208/191 752/1211/191 697/1126/191 +f 752/1211/192 745/1198/192 698/1127/192 +f 745/1213/193 746/1214/193 698/1129/193 +f 746/1201/194 754/1215/194 700/1216/194 +f 754/1215/195 747/1203/195 702/1217/195 +f 747/1218/196 748/1207/196 704/1219/196 +f 748/1207/197 753/1212/197 706/1138/197 +f 753/1212/198 751/1209/198 708/1139/198 +f 755/1220/135 756/1221/135 757/1222/135 +f 756/1223/136 758/1224/136 759/1225/136 +f 758/1224/137 760/1226/137 761/1227/137 +f 760/1226/138 762/1228/138 763/1229/138 +f 762/1228/139 764/1230/139 765/1231/139 +f 764/1232/140 766/1233/140 767/1234/140 +f 757/1222/141 759/1235/141 768/1236/141 +f 759/1225/142 761/1227/142 769/1237/142 +f 761/1227/143 763/1229/143 769/1237/143 +f 763/1238/144 765/1239/144 770/1240/144 +f 765/1239/145 767/1241/145 771/1242/145 +f 767/1234/146 772/1243/146 773/1244/146 +f 768/1236/147 774/1245/147 775/1246/147 +f 774/1247/148 769/1248/148 776/1249/148 +f 769/1248/149 770/1240/149 777/1250/149 +f 770/1240/150 771/1242/150 778/1251/150 +f 771/1242/151 779/1252/151 780/1253/151 +f 779/1254/152 773/1244/152 781/1255/152 +f 775/1246/153 776/1256/153 782/1257/153 +f 776/1256/154 777/1258/154 783/1259/154 +f 777/1250/155 778/1251/155 784/1260/155 +f 778/1251/156 780/1253/156 785/1261/156 +f 780/1262/157 781/1263/157 786/1264/157 +f 781/1255/158 787/1265/158 788/1266/158 +f 782/1257/159 783/1259/159 789/1267/159 +f 783/1268/160 784/1269/160 790/1270/160 +f 784/1269/161 785/1271/161 791/1272/161 +f 785/1271/162 786/1264/162 792/1273/162 +f 786/1264/163 788/1274/163 793/1275/163 +f 788/1274/164 794/1276/164 795/1277/164 +f 789/1267/165 790/1278/165 796/1279/165 +f 790/1280/166 791/1281/166 797/1282/166 +f 791/1281/167 792/1283/167 798/1284/167 +f 792/1273/168 793/1275/168 799/1285/168 +f 793/1275/169 795/1277/169 800/1286/169 +f 795/1287/170 801/1288/170 802/1289/170 +f 796/1279/171 797/1290/171 803/1291/171 +f 797/1282/172 798/1284/172 804/1292/172 +f 798/1284/173 799/1293/173 805/1294/173 +f 799/1293/199 800/1295/174 806/1296/174 +f 800/1295/175 807/1297/175 808/1298/175 +f 807/1299/176 802/1289/176 809/1300/176 +f 810/1301/177 755/1220/177 757/1222/177 +f 766/1233/178 811/1302/178 772/1243/178 +f 810/1301/179 757/1222/179 768/1236/179 +f 772/1243/180 811/1302/180 773/1244/180 +f 810/1301/181 768/1236/181 775/1246/181 +f 773/1244/182 811/1302/182 787/1265/182 +f 810/1301/183 775/1246/183 782/1257/183 +f 787/1265/184 811/1302/184 794/1303/184 +f 810/1301/185 782/1257/185 789/1267/185 +f 794/1303/186 811/1302/186 801/1288/186 +f 810/1301/187 789/1267/187 796/1279/187 +f 801/1288/200 811/1302/200 802/1289/200 +f 810/1301/189 796/1279/189 803/1291/189 +f 802/1289/190 811/1302/190 809/1300/190 +f 810/1301/191 803/1291/191 755/1220/191 +f 803/1291/192 804/1304/192 755/1220/192 +f 804/1305/193 805/1306/193 756/1223/193 +f 805/1294/194 806/1296/194 758/1307/194 +f 806/1296/195 808/1298/195 760/1308/195 +f 808/1309/196 812/1310/196 762/1311/196 +f 812/1310/197 809/1300/197 766/1233/197 +f 809/1300/198 811/1302/198 766/1233/198 +f 813/1312/135 814/1313/135 815/1314/135 +f 814/1315/136 816/1316/136 817/1317/136 +f 816/1316/137 818/1318/201 819/1319/137 +f 818/1318/138 820/1320/138 819/1319/138 +f 820/1320/139 821/1321/139 822/1322/139 +f 821/1323/140 823/1324/140 824/1325/140 +f 815/1314/141 817/1326/141 825/1327/141 +f 817/1317/142 826/1328/142 827/1329/142 +f 826/1328/143 819/1319/143 828/1330/143 +f 819/1331/144 822/1332/144 829/1333/144 +f 822/1332/145 824/1334/145 830/1335/145 +f 824/1325/146 831/1336/146 832/1337/146 +f 825/1327/147 827/1338/147 833/1339/147 +f 827/1340/148 828/1341/148 834/1342/148 +f 828/1341/149 829/1333/149 835/1343/149 +f 829/1333/150 830/1335/150 836/1344/150 +f 830/1335/151 832/1345/151 837/1346/151 +f 832/1337/152 838/1347/152 839/1348/152 +f 833/1339/153 834/1349/153 840/1350/153 +f 834/1349/154 835/1351/154 841/1352/154 +f 835/1343/155 836/1344/155 842/1353/155 +f 836/1344/156 837/1346/156 843/1354/156 +f 837/1355/157 839/1356/157 844/1357/157 +f 839/1348/158 845/1358/158 846/1359/158 +f 840/1350/159 841/1352/159 847/1360/159 +f 841/1361/160 842/1362/160 848/1363/160 +f 842/1362/161 843/1364/161 849/1365/161 +f 843/1364/202 844/1357/202 850/1366/202 +f 844/1357/163 846/1367/163 851/1368/163 +f 846/1367/164 852/1369/164 853/1370/164 +f 847/1360/165 848/1371/165 854/1372/165 +f 848/1373/166 849/1374/166 855/1375/166 +f 849/1374/167 850/1376/167 856/1377/167 +f 850/1366/168 851/1368/168 857/1378/168 +f 851/1368/169 853/1370/169 858/1379/169 +f 853/1380/170 859/1381/170 860/1382/170 +f 854/1372/171 855/1383/171 861/1384/171 +f 855/1375/172 856/1377/172 862/1385/172 +f 856/1377/173 857/1386/173 863/1387/173 +f 857/1386/174 858/1388/174 864/1389/174 +f 858/1388/175 860/1390/175 865/1391/175 +f 860/1382/176 866/1392/176 867/1393/176 +f 868/1394/177 813/1312/177 815/1314/177 +f 823/1324/178 869/1395/178 831/1336/178 +f 868/1394/179 815/1314/179 825/1327/179 +f 831/1336/180 869/1395/180 838/1347/180 +f 868/1394/181 825/1327/181 833/1339/181 +f 838/1347/182 869/1395/182 845/1358/182 +f 868/1394/183 833/1339/183 840/1350/183 +f 845/1358/184 869/1395/184 852/1396/184 +f 868/1394/185 840/1350/185 847/1360/185 +f 852/1396/186 869/1395/186 859/1381/186 +f 868/1394/187 847/1360/187 854/1372/187 +f 859/1381/188 869/1395/188 866/1392/188 +f 868/1394/189 854/1372/189 861/1384/189 +f 866/1392/190 869/1395/190 867/1393/190 +f 868/1394/191 861/1384/191 813/1312/191 +f 861/1384/192 862/1397/192 813/1312/192 +f 862/1398/193 863/1399/193 814/1315/193 +f 863/1387/194 864/1389/194 816/1400/194 +f 864/1389/195 865/1391/195 818/1261/195 +f 865/1401/196 870/1402/196 820/1403/196 +f 870/1402/197 867/1393/197 821/1323/197 +f 867/1393/198 869/1395/198 823/1324/198 +f 871/1404/135 872/1405/135 873/1406/135 +f 872/1407/136 874/1408/136 875/1409/136 +f 874/1408/201 876/1410/201 875/1409/201 +f 876/1410/138 877/1411/138 878/1412/138 +f 877/1411/139 879/1413/139 880/1414/139 +f 879/1415/140 881/1416/140 882/1417/140 +f 873/1406/141 883/1418/141 884/1419/141 +f 883/1420/142 875/1409/142 885/1421/142 +f 875/1409/143 878/1412/143 886/1422/143 +f 878/1423/144 880/1424/144 887/1425/144 +f 880/1424/145 882/1426/145 888/1427/145 +f 882/1417/146 889/1428/146 890/1429/146 +f 884/1419/147 885/1430/147 891/1431/147 +f 885/1432/148 886/1433/148 892/1434/148 +f 886/1433/149 887/1425/149 893/1435/149 +f 887/1425/150 888/1427/150 894/1436/150 +f 888/1427/151 890/1437/151 895/1438/151 +f 890/1429/152 896/1439/152 897/1440/152 +f 891/1431/153 892/1441/153 898/1442/153 +f 892/1441/154 893/1443/154 899/1444/154 +f 893/1435/155 894/1436/155 900/1445/155 +f 894/1436/156 895/1438/156 901/1446/156 +f 895/1447/157 897/1448/157 902/1449/157 +f 897/1440/158 903/1450/158 904/1451/158 +f 898/1442/159 899/1444/159 905/1452/159 +f 899/1453/160 900/1454/160 906/1455/160 +f 900/1454/161 901/1456/161 907/1457/161 +f 901/1456/202 902/1449/162 908/1458/162 +f 902/1449/163 904/1459/163 909/1460/163 +f 904/1459/164 910/1461/164 911/1462/164 +f 905/1452/165 906/1463/165 912/1464/165 +f 906/1465/166 907/1466/166 913/1467/166 +f 907/1466/167 908/1468/167 914/1469/167 +f 908/1458/168 909/1460/168 915/1470/168 +f 909/1460/169 911/1462/169 916/1471/169 +f 911/1472/170 917/1473/170 918/1474/170 +f 912/1464/171 913/1475/171 919/1476/171 +f 913/1467/172 914/1469/172 920/1477/172 +f 914/1469/173 915/1478/173 921/1479/173 +f 915/1478/174 916/1480/174 922/1481/174 +f 916/1480/175 918/1482/175 923/1483/175 +f 918/1474/176 924/1484/176 925/1485/176 +f 926/1486/177 871/1404/177 873/1406/177 +f 881/1416/178 927/1487/178 889/1428/178 +f 926/1486/203 873/1406/203 884/1419/203 +f 889/1428/180 927/1487/180 896/1439/180 +f 926/1486/181 884/1419/181 891/1431/181 +f 896/1439/182 927/1487/182 903/1450/182 +f 926/1486/183 891/1431/183 898/1442/183 +f 903/1450/184 927/1487/184 910/1488/184 +f 926/1486/185 898/1442/185 905/1452/185 +f 910/1488/186 927/1487/186 917/1473/186 +f 926/1486/187 905/1452/187 912/1464/187 +f 917/1473/200 927/1487/200 924/1484/200 +f 926/1486/189 912/1464/189 919/1476/189 +f 924/1484/190 927/1487/190 928/1489/190 +f 926/1486/191 919/1476/191 871/1404/191 +f 919/1476/192 920/1490/192 871/1404/192 +f 920/1491/193 921/1492/193 872/1407/193 +f 921/1479/194 922/1481/194 874/1493/194 +f 922/1481/195 923/1483/195 876/1494/195 +f 923/1495/196 925/1485/196 879/1415/196 +f 925/1485/197 928/1489/197 879/1415/197 +f 928/1489/198 927/1487/198 881/1416/198 +f 929/1496/135 930/1497/135 931/1498/135 +f 930/1499/136 932/1500/136 933/1501/136 +f 932/1500/137 934/1502/137 935/1503/137 +f 934/1502/138 936/1504/138 937/1505/138 +f 936/1504/139 938/1506/139 939/1507/139 +f 938/1508/140 940/1509/140 941/1510/140 +f 931/1498/141 933/1511/141 942/1512/141 +f 933/1501/142 935/1503/142 943/1513/142 +f 935/1503/143 937/1505/143 944/1514/143 +f 937/1515/144 939/1516/144 945/1517/144 +f 939/1516/145 941/1518/145 946/1519/145 +f 941/1510/146 947/1520/146 948/1521/146 +f 942/1512/147 943/1522/147 949/1523/147 +f 943/1524/148 944/1525/148 950/1526/148 +f 944/1525/149 945/1517/149 951/1527/149 +f 945/1517/150 946/1519/150 952/1528/150 +f 946/1519/151 948/1529/151 953/1530/151 +f 948/1521/152 954/1531/152 955/1532/152 +f 949/1523/153 950/1533/153 956/1534/153 +f 950/1533/154 951/1535/154 957/1536/154 +f 951/1527/155 952/1528/155 958/1537/155 +f 952/1528/156 953/1530/156 959/1538/156 +f 953/1539/157 955/1540/157 960/1541/157 +f 955/1532/158 961/1542/158 962/1543/158 +f 956/1534/159 957/1536/159 963/1544/159 +f 957/1545/160 958/1546/160 964/1547/160 +f 958/1546/161 959/1548/161 965/1549/161 +f 959/1548/202 960/1541/162 966/1550/162 +f 960/1541/163 962/1551/163 967/1552/163 +f 962/1551/164 968/1553/164 969/1554/164 +f 963/1544/165 964/1555/165 970/1556/165 +f 964/1557/166 965/1558/166 971/1559/166 +f 965/1558/167 966/1560/167 972/1561/167 +f 966/1550/168 967/1552/168 973/1562/168 +f 967/1552/169 969/1554/169 974/1563/169 +f 969/1564/170 975/1565/170 976/1566/170 +f 970/1556/171 971/1567/171 977/1568/171 +f 971/1559/172 972/1561/172 978/1569/172 +f 972/1561/173 973/1570/173 979/1571/173 +f 973/1570/174 974/1572/174 980/1573/174 +f 974/1572/175 976/1574/175 981/1575/175 +f 976/1566/176 982/1576/176 983/1577/176 +f 984/1578/177 929/1496/177 931/1498/177 +f 940/1509/178 985/1579/178 947/1520/178 +f 984/1578/203 931/1498/203 942/1512/203 +f 947/1520/180 985/1579/180 954/1531/180 +f 984/1578/181 942/1512/181 949/1523/181 +f 954/1531/182 985/1579/182 961/1542/182 +f 984/1578/183 949/1523/183 956/1534/183 +f 961/1542/184 985/1579/184 968/1580/184 +f 984/1578/185 956/1534/185 963/1544/185 +f 968/1580/186 985/1579/186 975/1565/186 +f 984/1578/187 963/1544/187 970/1556/187 +f 975/1565/188 985/1579/188 982/1576/188 +f 984/1578/189 970/1556/189 977/1568/189 +f 982/1576/190 985/1579/190 986/1581/190 +f 984/1578/191 977/1568/191 929/1496/191 +f 977/1568/192 978/1582/192 929/1496/192 +f 978/1583/193 979/1584/193 930/1499/193 +f 979/1571/194 980/1573/194 932/1585/194 +f 980/1573/195 981/1575/195 934/1586/195 +f 981/1587/196 983/1577/196 936/1588/196 +f 983/1577/197 986/1581/197 938/1508/197 +f 986/1581/198 985/1579/198 940/1509/198 +f 987/1589/135 988/1590/135 989/1591/135 +f 988/1592/136 990/1593/136 991/1594/136 +f 990/1593/137 992/1595/137 993/1596/137 +f 992/1595/138 994/1597/138 995/1598/138 +f 994/1597/139 996/1599/139 997/1600/139 +f 996/1601/140 998/1602/140 999/1603/140 +f 989/1591/141 991/1604/141 1000/1605/141 +f 991/1594/142 993/1596/142 1001/1606/142 +f 993/1596/143 995/1598/143 1002/1607/143 +f 995/1608/144 997/1609/144 1003/1610/144 +f 997/1609/145 1004/1611/145 1005/1612/145 +f 1004/1613/146 999/1603/146 1006/1614/146 +f 1000/1605/147 1001/1615/147 1007/1616/147 +f 1001/1617/148 1002/1618/148 1008/1619/148 +f 1002/1618/149 1003/1610/149 1009/1620/149 +f 1003/1610/204 1005/1612/204 1010/1621/204 +f 1005/1612/151 1006/1622/151 1011/1623/151 +f 1006/1614/152 1012/1624/152 1013/1625/152 +f 1007/1616/153 1008/1626/153 1014/1627/153 +f 1008/1626/154 1009/1628/154 1015/1629/154 +f 1009/1620/155 1010/1621/155 1016/1630/155 +f 1010/1621/156 1011/1623/156 1017/1631/156 +f 1011/1632/157 1013/1633/157 1018/1634/157 +f 1013/1625/158 1019/1635/158 1020/1636/158 +f 1014/1627/159 1015/1629/159 1021/1637/159 +f 1015/1638/160 1016/1639/160 1022/1640/160 +f 1016/1639/161 1017/1641/161 1023/1642/161 +f 1017/1641/202 1018/1634/202 1024/1643/202 +f 1018/1634/163 1020/1644/163 1025/1645/163 +f 1020/1644/164 1026/1646/164 1027/1647/164 +f 1021/1637/165 1022/1648/165 1028/1649/165 +f 1022/1650/166 1023/1651/166 1028/1652/166 +f 1023/1651/167 1024/1653/167 1029/1654/167 +f 1024/1643/168 1025/1645/168 1030/1655/168 +f 1025/1645/169 1027/1647/169 1031/1656/169 +f 1027/1657/170 1032/1658/170 1033/1659/170 +f 1034/1660/171 1028/1649/171 1035/1661/171 +f 1028/1652/172 1029/1654/172 1036/1662/172 +f 1029/1654/173 1030/1663/173 1037/1664/173 +f 1030/1663/174 1031/1665/174 1038/1666/174 +f 1031/1665/175 1033/1667/175 1039/1668/175 +f 1033/1659/176 1040/1669/176 1041/1670/176 +f 1042/1671/177 987/1589/177 989/1591/177 +f 998/1602/178 1043/1672/178 999/1603/178 +f 1042/1671/203 989/1591/203 1000/1605/203 +f 999/1603/180 1043/1672/180 1012/1624/180 +f 1042/1671/181 1000/1605/181 1007/1616/181 +f 1012/1624/182 1043/1672/182 1019/1635/182 +f 1042/1671/183 1007/1616/183 1014/1627/183 +f 1019/1635/184 1043/1672/184 1026/1673/184 +f 1042/1671/185 1014/1627/185 1021/1637/185 +f 1026/1673/186 1043/1672/186 1032/1658/186 +f 1042/1671/187 1021/1637/187 1034/1660/187 +f 1032/1658/188 1043/1672/188 1040/1669/188 +f 1042/1671/189 1034/1660/189 1035/1661/189 +f 1040/1669/190 1043/1672/190 1044/1674/190 +f 1042/1671/191 1035/1661/191 987/1589/191 +f 1035/1661/192 1036/1675/192 987/1589/192 +f 1036/1676/193 1037/1677/193 988/1592/193 +f 1037/1664/194 1038/1666/194 990/1678/194 +f 1038/1666/195 1039/1668/195 992/1679/195 +f 1039/1680/196 1041/1670/196 994/1681/196 +f 1041/1670/197 1044/1674/197 996/1601/197 +f 1044/1674/198 1043/1672/198 998/1602/198 +f 1045/1682/205 1046/1683/205 1047/1684/205 +f 1046/1683/206 1048/1685/206 1049/1686/206 +f 1048/1685/207 1050/1687/207 1051/1688/207 +f 1050/1687/208 1052/1689/208 1053/1690/208 +f 1052/1691/209 1054/1692/209 1055/1693/209 +f 1054/1692/210 1056/1694/210 1057/1695/210 +f 1047/1684/211 1049/1686/211 1058/1696/211 +f 1049/1686/212 1051/1688/212 1059/1697/212 +f 1051/1688/213 1053/1690/213 1060/1698/213 +f 1053/1690/214 1055/1699/214 1061/1700/214 +f 1055/1693/215 1057/1695/215 1062/1701/215 +f 1057/1695/216 1063/1702/216 1064/1703/216 +f 1058/1704/217 1059/1705/217 1065/1706/217 +f 1059/1705/218 1060/1707/218 1066/1708/218 +f 1060/1707/219 1061/1709/219 1067/1710/219 +f 1061/1709/220 1062/1711/220 1068/1712/220 +f 1062/1701/221 1064/1703/221 1069/1713/221 +f 1064/1703/222 1070/1714/222 1071/1715/222 +f 1065/1706/223 1066/1708/223 1072/1716/223 +f 1066/1708/224 1067/1710/224 1073/1717/224 +f 1067/1710/225 1068/1712/225 1074/1718/225 +f 1068/1712/226 1069/1719/226 1075/1720/226 +f 1069/1721/227 1071/1722/227 1076/1723/227 +f 1071/1715/228 1077/1724/228 1078/1725/228 +f 1072/1726/229 1073/1727/229 1079/1728/229 +f 1073/1727/230 1074/1729/230 1080/1730/230 +f 1074/1731/231 1075/1732/231 1081/1733/231 +f 1075/1732/232 1076/1723/232 1082/1734/232 +f 1076/1723/233 1078/1735/233 1083/1736/233 +f 1078/1735/234 1084/1737/235 1085/1738/235 +f 1079/1728/236 1080/1730/236 1086/1739/236 +f 1080/1730/237 1081/1740/237 1087/1741/237 +f 1081/1733/238 1082/1734/238 1088/1742/238 +f 1082/1734/239 1083/1736/239 1089/1743/239 +f 1083/1736/240 1085/1738/240 1090/1744/240 +f 1085/1738/241 1091/1745/241 1092/1746/241 +f 1086/1739/242 1087/1741/242 1093/1747/242 +f 1087/1741/243 1088/1748/243 1094/1749/243 +f 1088/1750/244 1089/1751/244 1095/1752/244 +f 1089/1751/245 1090/1753/245 1096/1754/245 +f 1090/1753/246 1092/1755/246 1097/1756/246 +f 1092/1755/247 1098/1757/247 1099/1758/247 +f 1100/1759/248 1045/1760/248 1047/1761/248 +f 1056/1694/249 1101/1762/249 1063/1702/249 +f 1100/1759/250 1047/1761/250 1058/1763/250 +f 1063/1702/251 1101/1762/251 1070/1714/251 +f 1100/1759/252 1058/1763/252 1065/1764/252 +f 1070/1714/253 1101/1762/253 1077/1724/253 +f 1100/1759/254 1065/1764/254 1072/1726/254 +f 1077/1724/255 1101/1762/255 1084/1765/255 +f 1100/1759/256 1072/1726/256 1079/1728/256 +f 1084/1765/257 1101/1762/257 1091/1766/257 +f 1100/1759/258 1079/1728/258 1086/1739/258 +f 1091/1766/259 1101/1762/259 1098/1767/259 +f 1100/1759/260 1086/1739/260 1093/1747/260 +f 1098/1767/261 1101/1762/261 1102/1768/261 +f 1100/1759/262 1093/1747/262 1045/1760/262 +f 1093/1747/263 1094/1749/263 1046/1769/263 +f 1094/1770/264 1095/1771/264 1046/1683/264 +f 1095/1752/265 1096/1754/265 1048/1772/265 +f 1096/1754/266 1097/1756/266 1050/1773/266 +f 1097/1756/267 1099/1758/267 1054/1774/267 +f 1099/1758/268 1102/1775/268 1054/1774/268 +f 1102/1768/269 1101/1762/269 1056/1694/269 +f 1103/1776/270 1104/1777/270 1105/1778/270 +f 1104/1777/206 1106/1779/206 1107/1780/206 +f 1106/1779/207 1108/1781/207 1109/1782/207 +f 1108/1781/208 1110/1783/208 1111/1784/208 +f 1110/1785/209 1112/1786/209 1113/1787/209 +f 1112/1786/210 1114/1788/210 1115/1789/210 +f 1105/1778/211 1107/1780/211 1116/1790/211 +f 1107/1780/212 1109/1782/212 1117/1791/212 +f 1109/1782/213 1111/1784/213 1118/1792/213 +f 1111/1784/214 1113/1793/214 1119/1794/214 +f 1113/1787/215 1115/1789/215 1120/1795/215 +f 1115/1789/216 1121/1796/216 1122/1797/216 +f 1116/1798/217 1117/1799/217 1123/1800/217 +f 1117/1799/218 1118/1801/218 1124/1802/218 +f 1118/1801/219 1119/1803/219 1125/1804/219 +f 1119/1803/220 1120/1805/220 1126/1806/220 +f 1120/1795/221 1122/1797/221 1127/1807/221 +f 1122/1797/222 1128/1808/222 1129/1809/222 +f 1123/1800/223 1124/1802/223 1130/1810/223 +f 1124/1802/224 1125/1804/224 1131/1811/224 +f 1125/1804/225 1126/1806/225 1132/1812/225 +f 1126/1806/226 1127/1813/226 1133/1814/226 +f 1127/1815/227 1129/1816/227 1134/1817/227 +f 1129/1809/228 1135/1818/228 1136/1819/228 +f 1130/1820/229 1131/1821/229 1137/1822/229 +f 1131/1821/230 1132/1823/230 1138/1824/230 +f 1132/1825/231 1133/1826/231 1139/1827/231 +f 1133/1826/232 1134/1817/232 1140/1828/232 +f 1134/1817/233 1136/1829/233 1141/1830/233 +f 1136/1829/235 1142/1831/234 1143/1832/234 +f 1137/1822/236 1138/1824/236 1144/1833/236 +f 1138/1824/237 1139/1834/237 1145/1835/237 +f 1139/1827/238 1140/1828/238 1146/1836/238 +f 1140/1828/239 1141/1830/239 1147/1837/239 +f 1141/1830/240 1143/1832/240 1148/1838/240 +f 1143/1832/241 1149/1839/241 1150/1840/241 +f 1144/1833/242 1145/1835/242 1151/1841/242 +f 1145/1835/243 1146/1842/243 1152/1843/243 +f 1146/1844/244 1147/1845/244 1153/1846/244 +f 1147/1845/245 1148/1847/245 1154/1848/245 +f 1148/1847/246 1150/1849/246 1155/1850/246 +f 1150/1849/247 1156/1851/247 1157/1852/247 +f 1158/1853/248 1103/1854/248 1105/1855/248 +f 1114/1788/249 1159/1856/249 1121/1796/249 +f 1158/1853/271 1105/1855/271 1116/1857/271 +f 1121/1796/251 1159/1856/251 1128/1808/251 +f 1158/1853/252 1116/1857/252 1123/1858/252 +f 1128/1808/253 1159/1856/253 1135/1818/253 +f 1158/1853/254 1123/1858/254 1130/1820/254 +f 1135/1818/255 1159/1856/255 1142/1859/255 +f 1158/1853/256 1130/1820/256 1137/1822/256 +f 1142/1859/257 1159/1856/257 1149/1860/257 +f 1158/1853/258 1137/1822/258 1144/1833/258 +f 1149/1860/259 1159/1856/259 1156/1861/259 +f 1158/1853/260 1144/1833/260 1151/1841/260 +f 1156/1861/261 1159/1856/261 1160/1862/261 +f 1158/1853/262 1151/1841/262 1103/1854/262 +f 1151/1841/263 1152/1843/263 1103/1854/263 +f 1152/1863/264 1153/1864/264 1104/1777/264 +f 1153/1846/265 1154/1848/265 1106/1865/265 +f 1154/1848/266 1155/1850/266 1108/1866/266 +f 1155/1850/267 1157/1852/267 1110/1867/267 +f 1157/1852/268 1160/1868/268 1112/1869/268 +f 1160/1862/269 1159/1856/269 1114/1788/269 +f 1161/1870/270 1162/1871/270 1163/1872/270 +f 1162/1871/206 1164/1873/206 1165/1874/206 +f 1164/1873/207 1166/1875/207 1167/1876/207 +f 1166/1875/208 1168/1877/208 1169/1878/208 +f 1168/1879/209 1170/1880/209 1171/1881/209 +f 1170/1880/210 1172/1882/210 1173/1883/210 +f 1163/1872/211 1165/1874/211 1174/1884/211 +f 1165/1874/212 1167/1876/212 1175/1885/212 +f 1167/1876/213 1169/1878/213 1176/1886/213 +f 1169/1878/214 1171/1887/214 1177/1888/214 +f 1171/1881/215 1173/1883/215 1178/1889/215 +f 1173/1883/216 1179/1890/216 1180/1891/216 +f 1174/1892/217 1175/1893/217 1181/1894/217 +f 1175/1893/218 1176/1895/218 1182/1896/218 +f 1176/1895/219 1177/1897/219 1183/1898/219 +f 1177/1897/220 1178/1899/220 1184/1900/220 +f 1178/1889/221 1180/1891/221 1185/1901/221 +f 1180/1891/222 1186/1902/222 1187/1903/222 +f 1181/1894/223 1182/1896/223 1188/1904/223 +f 1182/1896/224 1183/1898/224 1189/1905/224 +f 1183/1898/225 1184/1900/225 1190/1906/225 +f 1184/1900/226 1185/1907/226 1191/1908/226 +f 1185/1909/227 1187/1910/227 1192/1911/227 +f 1187/1903/228 1193/1912/228 1194/1913/228 +f 1188/1914/229 1189/1915/229 1195/1916/229 +f 1189/1915/230 1190/1917/230 1196/1918/230 +f 1190/1919/231 1191/1920/231 1197/1921/231 +f 1191/1920/232 1192/1911/232 1198/1922/232 +f 1192/1911/233 1194/1923/233 1199/1924/233 +f 1194/1923/235 1200/1925/235 1201/1926/235 +f 1195/1916/236 1196/1918/236 1202/1927/236 +f 1196/1918/237 1197/1928/237 1203/1929/237 +f 1197/1921/238 1198/1922/238 1204/1930/238 +f 1198/1922/239 1199/1924/239 1205/1931/239 +f 1199/1924/240 1201/1926/240 1206/1932/240 +f 1201/1926/241 1207/1933/241 1208/1934/241 +f 1202/1927/242 1203/1929/242 1209/1935/242 +f 1203/1929/243 1204/1936/243 1210/1937/243 +f 1204/1938/244 1205/1939/244 1211/1940/244 +f 1205/1939/245 1206/1941/245 1212/1942/245 +f 1206/1941/246 1208/1943/246 1213/1944/246 +f 1208/1943/247 1214/1945/247 1215/1946/247 +f 1216/1947/248 1161/1948/248 1163/1949/248 +f 1172/1882/249 1217/1950/249 1179/1890/249 +f 1216/1947/271 1163/1949/271 1174/1951/271 +f 1179/1890/251 1217/1950/251 1186/1902/251 +f 1216/1947/252 1174/1951/252 1181/1952/252 +f 1186/1902/253 1217/1950/253 1193/1912/253 +f 1216/1947/254 1181/1952/254 1188/1914/254 +f 1193/1912/255 1217/1950/255 1200/1953/255 +f 1216/1947/256 1188/1914/256 1195/1916/256 +f 1200/1953/257 1217/1950/257 1207/1954/257 +f 1216/1947/258 1195/1916/258 1202/1927/258 +f 1207/1954/272 1217/1950/272 1214/1955/272 +f 1216/1947/260 1202/1927/260 1209/1935/260 +f 1214/1955/261 1217/1950/261 1218/1956/261 +f 1216/1947/262 1209/1935/262 1161/1948/262 +f 1209/1935/263 1210/1937/263 1161/1948/263 +f 1210/1957/264 1211/1958/264 1162/1871/264 +f 1211/1940/265 1212/1942/265 1164/1959/265 +f 1212/1942/266 1213/1944/266 1166/1960/266 +f 1213/1944/267 1215/1946/267 1168/1961/267 +f 1215/1946/268 1218/1962/268 1170/1963/268 +f 1218/1956/269 1217/1950/269 1172/1882/269 +f 1219/1964/205 1220/1965/205 1221/1966/205 +f 1220/1965/206 1222/1967/206 1223/1968/206 +f 1222/1967/207 1224/1969/207 1225/1970/207 +f 1224/1969/208 1226/1971/208 1227/1972/208 +f 1226/1973/209 1228/1974/209 1229/1975/209 +f 1228/1974/210 1230/1976/210 1231/1977/210 +f 1221/1966/211 1223/1968/211 1232/1978/211 +f 1223/1968/212 1225/1970/212 1233/1979/212 +f 1225/1970/213 1227/1972/213 1234/1980/213 +f 1227/1972/214 1229/1981/214 1235/1982/214 +f 1229/1975/215 1231/1977/215 1236/1983/215 +f 1231/1977/216 1237/1984/216 1238/1985/216 +f 1232/1986/217 1233/1987/217 1239/1988/217 +f 1233/1987/218 1234/1989/218 1240/1990/218 +f 1234/1989/219 1235/1991/219 1241/1992/219 +f 1235/1991/220 1236/1993/220 1242/1994/220 +f 1236/1983/221 1238/1985/221 1243/1995/221 +f 1238/1985/222 1244/1996/222 1245/1997/222 +f 1239/1988/223 1240/1990/223 1246/1998/223 +f 1240/1990/224 1241/1992/224 1247/1999/224 +f 1241/1992/225 1242/1994/225 1248/2000/225 +f 1242/1994/226 1243/2001/226 1249/2002/226 +f 1243/2003/227 1245/2004/227 1250/2005/227 +f 1245/1997/228 1251/2006/228 1252/2007/228 +f 1246/2008/229 1247/2009/229 1253/2010/229 +f 1247/2009/230 1248/2011/230 1254/2012/230 +f 1248/2013/231 1249/2014/231 1255/2015/231 +f 1249/2014/232 1250/2005/232 1256/2016/232 +f 1250/2005/233 1252/2017/233 1257/2018/233 +f 1252/2017/234 1258/2019/234 1259/2020/234 +f 1253/2010/236 1254/2012/236 1260/2021/236 +f 1254/2012/237 1255/2022/237 1261/2023/237 +f 1255/2015/238 1256/2016/238 1262/2024/238 +f 1256/2016/239 1257/2018/239 1263/2025/239 +f 1257/2018/240 1259/2020/240 1264/2026/240 +f 1259/2020/241 1265/2027/241 1266/2028/241 +f 1260/2021/242 1261/2023/242 1267/2029/242 +f 1261/2023/243 1262/2030/243 1268/2031/243 +f 1262/2032/244 1263/2033/244 1269/2034/244 +f 1263/2033/245 1264/2035/245 1270/2036/245 +f 1264/2035/246 1266/2037/246 1271/2038/246 +f 1266/2037/247 1272/2039/247 1273/2040/247 +f 1274/2041/248 1219/2042/248 1221/2043/248 +f 1230/1976/249 1275/2044/249 1237/1984/249 +f 1274/2041/271 1221/2043/271 1232/2045/271 +f 1237/1984/251 1275/2044/251 1244/1996/251 +f 1274/2041/252 1232/2045/252 1239/2046/252 +f 1244/1996/253 1275/2044/253 1251/2006/253 +f 1274/2041/254 1239/2046/254 1246/2008/254 +f 1251/2006/255 1275/2044/255 1258/2047/255 +f 1274/2041/256 1246/2008/256 1253/2010/256 +f 1258/2047/257 1275/2044/257 1265/2048/257 +f 1274/2041/258 1253/2010/258 1260/2021/258 +f 1265/2048/259 1275/2044/259 1272/2049/259 +f 1274/2041/260 1260/2021/260 1267/2029/260 +f 1272/2049/261 1275/2044/261 1276/2050/261 +f 1274/2041/262 1267/2029/262 1219/2042/262 +f 1267/2029/263 1268/2031/263 1219/2042/263 +f 1268/2051/264 1269/2052/264 1220/1965/264 +f 1269/2034/265 1270/2036/265 1222/2053/265 +f 1270/2036/266 1271/2038/266 1224/2054/266 +f 1271/2038/267 1273/2040/267 1226/2055/267 +f 1273/2040/268 1276/2056/268 1228/2057/268 +f 1276/2050/269 1275/2044/269 1230/1976/269 +f 1277/2058/205 1278/2059/205 1279/2060/205 +f 1278/2059/206 1280/2061/206 1281/2062/206 +f 1280/2061/207 1282/2063/207 1283/2064/207 +f 1282/2063/208 1284/2065/208 1285/2066/208 +f 1284/2067/209 1286/2068/209 1287/2069/209 +f 1286/2068/210 1288/2070/210 1289/2071/210 +f 1279/2060/211 1281/2062/211 1290/2072/211 +f 1281/2062/212 1283/2064/212 1291/2073/212 +f 1283/2064/213 1285/2066/213 1292/2074/213 +f 1285/2066/214 1287/2075/214 1293/2076/214 +f 1287/2069/215 1289/2071/215 1294/2077/215 +f 1289/2071/216 1295/2078/216 1296/2079/216 +f 1290/2080/217 1291/2081/217 1297/2082/217 +f 1291/2081/218 1292/2083/218 1298/2084/218 +f 1292/2083/219 1293/2085/219 1299/2086/219 +f 1293/2085/220 1294/2087/220 1300/2088/220 +f 1294/2077/221 1296/2079/221 1301/2089/221 +f 1296/2079/222 1302/2090/222 1303/2091/222 +f 1297/2082/223 1298/2084/223 1304/2092/223 +f 1298/2084/224 1299/2086/224 1305/2093/224 +f 1299/2086/225 1300/2088/225 1306/2094/225 +f 1300/2088/226 1301/2095/226 1307/2096/226 +f 1301/2097/227 1303/2098/227 1308/2099/227 +f 1303/2091/228 1309/2100/228 1310/2101/228 +f 1304/2102/229 1305/2103/229 1311/2104/229 +f 1305/2103/230 1306/2105/230 1312/2106/230 +f 1306/2107/231 1307/2108/231 1313/2109/231 +f 1307/2108/232 1308/2099/232 1314/2110/232 +f 1308/2099/233 1310/2111/233 1315/2112/233 +f 1310/2111/234 1316/2113/235 1317/2114/235 +f 1311/2104/236 1312/2106/236 1318/2115/236 +f 1312/2106/237 1313/2116/237 1319/2117/237 +f 1313/2109/238 1314/2110/238 1320/2118/238 +f 1314/2110/239 1315/2112/239 1321/2119/239 +f 1315/2112/240 1317/2114/240 1322/2120/240 +f 1317/2114/241 1323/2121/241 1324/2122/241 +f 1318/2115/242 1319/2117/242 1325/2123/242 +f 1319/2117/243 1320/2124/243 1326/2125/243 +f 1320/2126/244 1321/2127/244 1327/2128/244 +f 1321/2127/245 1322/2129/245 1328/2130/245 +f 1322/2129/246 1324/2131/246 1329/2132/246 +f 1324/2131/247 1330/2133/247 1331/2134/247 +f 1332/2135/248 1277/2136/248 1279/2137/248 +f 1288/2070/249 1333/2138/249 1295/2078/249 +f 1332/2135/250 1279/2137/250 1290/2139/250 +f 1295/2078/251 1333/2138/251 1302/2090/251 +f 1332/2135/252 1290/2139/252 1297/2140/252 +f 1302/2090/253 1333/2138/253 1309/2100/253 +f 1332/2135/254 1297/2140/254 1304/2102/254 +f 1309/2100/255 1333/2138/255 1316/2141/255 +f 1332/2135/256 1304/2102/256 1311/2104/256 +f 1316/2141/257 1333/2138/257 1323/2142/257 +f 1332/2135/258 1311/2104/258 1318/2115/258 +f 1323/2142/259 1333/2138/259 1330/2143/259 +f 1332/2135/260 1318/2115/260 1325/2123/260 +f 1330/2143/261 1333/2138/261 1334/1858/261 +f 1332/2135/262 1325/2123/262 1277/2136/262 +f 1325/2123/263 1326/2125/263 1277/2136/263 +f 1326/2144/264 1327/2145/264 1278/2059/264 +f 1327/2128/265 1328/2130/265 1280/2146/265 +f 1328/2130/266 1329/2132/266 1282/2147/266 +f 1329/2132/267 1331/2134/267 1284/2148/267 +f 1331/2134/268 1334/2149/268 1286/2150/268 +f 1334/1858/269 1333/2138/269 1288/2070/269 +f 1335/2151/270 1336/2152/270 1337/2153/270 +f 1336/2152/206 1338/2154/206 1339/2155/206 +f 1338/2154/207 1340/2156/207 1341/2157/207 +f 1340/2156/208 1342/2158/208 1343/2159/208 +f 1342/2160/209 1344/2161/209 1345/2162/209 +f 1344/2161/210 1346/2163/210 1347/2164/210 +f 1337/2153/211 1339/2155/211 1348/2165/211 +f 1339/2155/212 1341/2157/212 1349/2166/212 +f 1341/2157/213 1343/2159/213 1350/1838/213 +f 1343/2159/214 1345/2167/214 1351/2168/214 +f 1345/2162/215 1347/2164/215 1352/2169/215 +f 1347/2164/216 1353/2170/216 1354/2171/216 +f 1348/2172/217 1349/2173/217 1355/2174/217 +f 1349/2173/218 1350/2175/218 1356/2176/218 +f 1350/2175/219 1351/2177/219 1357/2178/219 +f 1351/2177/220 1352/2179/220 1358/2180/220 +f 1352/2169/221 1354/2171/221 1359/2181/221 +f 1354/2171/222 1360/2182/222 1361/2183/222 +f 1355/2174/223 1356/2176/223 1362/2184/223 +f 1356/2176/224 1357/2178/224 1363/2185/224 +f 1357/2178/225 1358/2180/225 1364/2186/225 +f 1358/2180/226 1359/2187/226 1365/2188/226 +f 1359/2189/227 1361/2190/227 1366/2191/227 +f 1361/2183/228 1367/2192/228 1368/2193/228 +f 1362/2194/229 1363/2195/229 1369/2196/229 +f 1363/2195/230 1364/2197/230 1370/2198/230 +f 1364/2199/231 1365/2200/231 1371/2201/231 +f 1365/2200/232 1366/2191/232 1372/2202/232 +f 1366/2191/233 1368/2203/233 1373/2204/233 +f 1368/2203/234 1374/2205/235 1375/2206/235 +f 1369/2196/236 1370/2198/236 1376/2207/236 +f 1370/2198/237 1371/2208/237 1377/2209/237 +f 1371/2201/238 1372/2202/238 1378/2210/238 +f 1372/2202/239 1373/2204/239 1379/2211/239 +f 1373/2204/240 1375/2206/240 1380/1886/240 +f 1375/2206/241 1381/2212/241 1382/2213/241 +f 1376/2207/242 1377/2209/242 1383/2214/242 +f 1377/2209/243 1378/2215/243 1384/2216/243 +f 1378/2217/244 1379/2147/244 1385/2218/244 +f 1379/2147/245 1380/2219/245 1386/2220/245 +f 1380/2219/246 1382/2221/246 1387/2222/246 +f 1382/2221/247 1388/2223/247 1389/2224/247 +f 1390/2225/248 1335/2226/248 1337/2227/248 +f 1346/2163/249 1391/2228/249 1353/2170/249 +f 1390/2225/271 1337/2227/271 1348/2229/271 +f 1353/2170/251 1391/2228/251 1360/2182/251 +f 1390/2225/252 1348/2229/252 1355/2230/252 +f 1360/2182/253 1391/2228/253 1367/2192/253 +f 1390/2225/254 1355/2230/254 1362/2194/254 +f 1367/2192/255 1391/2228/255 1374/2231/255 +f 1390/2225/256 1362/2194/256 1369/2196/256 +f 1374/2231/257 1391/2228/257 1381/2232/257 +f 1390/2225/258 1369/2196/258 1376/2207/258 +f 1381/2232/259 1391/2228/259 1388/2233/259 +f 1390/2225/260 1376/2207/260 1383/2214/260 +f 1388/2233/261 1391/2228/261 1392/2234/261 +f 1390/2225/262 1383/2214/262 1335/2226/262 +f 1383/2214/263 1384/2216/263 1335/2226/263 +f 1384/2235/264 1385/2236/264 1336/2152/264 +f 1385/2218/265 1386/2220/265 1338/2237/265 +f 1386/2220/266 1387/2222/266 1340/2238/266 +f 1387/2222/267 1389/2224/267 1342/2239/267 +f 1389/2224/268 1392/2240/268 1344/2241/268 +f 1392/2234/269 1391/2228/269 1346/2163/269 +f 2/2/1 5/2242/1 3/3/1 +f 4/5/2 7/19/2 5/6/2 +f 6/8/3 9/11/3 7/9/3 +f 8/10/4 11/13/4 9/11/4 +f 10/12/5 13/2243/5 11/13/5 +f 12/15/6 19/27/6 13/16/6 +f 5/6/7 15/20/7 14/18/7 +f 7/19/8 16/22/8 15/20/8 +f 9/21/9 17/24/9 16/22/9 +f 11/23/10 18/26/10 17/24/10 +f 13/25/11 20/2244/11 18/26/11 +f 19/27/12 26/37/12 20/28/12 +f 15/30/13 22/39/13 21/31/13 +f 16/22/14 23/33/14 22/32/14 +f 17/24/15 24/34/15 23/33/15 +f 18/26/16 25/2245/16 24/34/16 +f 20/28/17 27/38/17 25/36/17 +f 26/37/18 33/50/18 27/38/18 +f 22/39/19 29/52/19 28/40/19 +f 23/42/20 30/45/20 29/43/20 +f 24/44/21 31/47/21 30/45/21 +f 25/46/22 32/49/22 31/47/22 +f 27/48/23 34/2246/23 32/49/23 +f 33/50/24 40/60/24 34/51/24 +f 29/52/25 36/62/25 35/53/25 +f 30/45/26 37/55/26 36/54/26 +f 31/47/27 38/56/27 37/55/27 +f 32/49/28 39/2247/28 38/56/28 +f 34/58/29 41/70/29 39/59/29 +f 40/60/30 47/86/30 41/61/30 +f 36/62/31 43/74/31 42/63/31 +f 37/65/32 44/68/32 43/66/32 +f 38/67/33 45/69/33 44/68/33 +f 39/59/34 46/71/34 45/69/34 +f 41/70/35 48/73/35 46/71/35 +f 47/72/36 54/2248/36 48/73/36 +f 43/74/37 50/77/37 49/75/37 +f 44/76/38 51/2249/38 50/77/38 +f 45/69/39 52/79/39 51/78/39 +f 46/71/40 53/80/40 52/79/40 +f 48/73/41 55/2250/41 53/80/41 +f 54/82/42 58/87/42 55/83/42 +f 1/1/58 49/75/58 2/2/58 +f 51/89/59 4/7/59 2/90/59 +f 52/91/60 6/8/60 4/7/60 +f 53/92/61 8/10/61 6/8/61 +f 8/10/62 53/92/62 10/12/62 +f 10/14/63 55/83/63 12/15/63 +f 60/95/1 63/2251/1 61/96/1 +f 62/98/2 65/112/2 63/99/2 +f 64/101/3 67/104/3 65/102/3 +f 66/103/4 69/106/4 67/104/4 +f 68/105/5 71/2252/5 69/106/5 +f 70/108/6 77/120/6 71/109/6 +f 63/99/7 73/113/7 72/111/7 +f 65/112/8 74/115/8 73/113/8 +f 67/114/9 75/117/9 74/115/9 +f 69/116/10 76/119/10 75/117/10 +f 71/118/11 78/2253/11 76/119/11 +f 77/120/12 84/130/12 78/121/12 +f 73/123/13 80/132/13 79/124/13 +f 74/115/14 81/126/14 80/125/14 +f 75/117/15 82/127/15 81/126/15 +f 76/119/16 83/2254/16 82/127/16 +f 78/121/17 85/131/17 83/129/17 +f 84/130/18 91/143/18 85/131/18 +f 80/132/19 87/145/19 86/133/19 +f 81/135/20 88/138/20 87/136/20 +f 82/137/21 89/140/21 88/138/21 +f 83/139/22 90/142/22 89/140/22 +f 85/141/23 92/2255/23 90/142/23 +f 91/143/24 98/153/24 92/144/24 +f 87/145/25 94/155/25 93/146/25 +f 88/138/26 95/148/26 94/147/26 +f 89/140/27 96/149/27 95/148/27 +f 90/142/28 97/2256/28 96/149/28 +f 92/151/29 99/163/29 97/152/29 +f 98/153/30 105/178/30 99/154/30 +f 94/155/31 101/167/31 100/156/31 +f 95/158/32 102/161/32 101/159/32 +f 96/160/33 103/162/33 102/161/33 +f 97/152/34 104/164/34 103/162/34 +f 99/163/35 106/166/35 104/164/35 +f 105/165/36 111/2257/36 106/166/36 +f 115/179/37 100/156/37 107/168/37 +f 102/169/38 108/2258/38 107/168/38 +f 103/162/39 109/171/39 108/170/39 +f 104/164/40 110/172/40 109/171/40 +f 106/166/41 112/2259/41 110/172/41 +f 111/174/42 116/180/42 112/175/42 +f 107/168/58 60/95/58 59/94/58 +f 108/182/59 62/100/59 60/183/59 +f 109/184/60 64/101/60 62/100/60 +f 110/185/61 66/103/61 64/101/61 +f 112/186/62 68/105/62 66/103/62 +f 68/107/63 112/175/63 70/108/63 +f 118/188/1 121/2260/1 119/189/1 +f 120/191/2 123/205/2 121/192/2 +f 122/194/3 125/197/3 123/195/3 +f 124/196/4 127/199/4 125/197/4 +f 126/198/5 129/2261/5 127/199/5 +f 128/201/6 135/213/6 129/202/6 +f 121/192/7 131/206/7 130/204/7 +f 123/205/8 132/208/8 131/206/8 +f 125/207/9 133/210/9 132/208/9 +f 127/209/10 134/212/10 133/210/10 +f 129/211/11 136/2262/11 134/212/11 +f 135/213/12 141/222/12 136/214/12 +f 131/216/13 138/223/13 137/217/13 +f 132/208/14 143/2263/14 138/218/14 +f 143/2263/15 132/208/15 139/219/15 +f 134/212/16 146/2264/16 139/219/16 +f 146/2265/17 134/220/17 140/221/17 +f 141/222/18 149/234/18 140/221/18 +f 138/223/19 144/236/19 142/224/19 +f 143/226/20 145/229/20 144/227/20 +f 139/228/21 147/231/21 145/229/21 +f 146/230/22 148/233/22 147/231/22 +f 140/232/23 150/2266/23 148/233/23 +f 149/234/24 156/243/24 150/235/24 +f 144/236/25 152/245/25 151/237/25 +f 145/229/26 153/239/26 152/238/26 +f 147/231/27 154/240/27 153/239/27 +f 148/233/28 155/2267/28 154/240/28 +f 150/97/29 157/253/29 155/242/29 +f 156/243/30 163/269/30 157/244/30 +f 152/245/31 159/257/31 158/246/31 +f 153/248/32 160/251/32 159/249/32 +f 154/250/33 161/252/33 160/251/33 +f 155/242/34 162/254/34 161/252/34 +f 157/253/35 164/256/35 162/254/35 +f 163/255/36 170/2268/36 164/256/36 +f 159/257/37 166/260/37 165/258/37 +f 160/259/38 167/2269/38 166/260/38 +f 161/252/39 168/262/39 167/261/39 +f 162/254/40 169/263/40 168/262/40 +f 164/256/41 171/2270/41 169/263/41 +f 170/265/42 174/270/42 171/266/42 +f 166/260/58 118/188/58 117/187/58 +f 167/272/59 120/193/59 118/273/59 +f 168/274/60 122/194/60 120/193/60 +f 169/275/61 124/196/61 122/194/61 +f 171/276/62 126/198/62 124/196/62 +f 126/200/63 171/266/63 128/201/63 +f 176/278/1 179/2271/1 177/279/1 +f 178/281/2 181/295/2 179/282/2 +f 180/284/3 183/287/3 181/285/3 +f 182/286/4 185/289/4 183/287/4 +f 184/288/5 187/2272/5 185/289/5 +f 186/291/6 193/303/6 187/292/6 +f 179/282/7 189/296/7 188/294/7 +f 181/295/8 190/298/8 189/296/8 +f 183/297/9 191/300/9 190/298/9 +f 185/299/10 192/302/10 191/300/10 +f 187/301/11 194/2273/11 192/302/11 +f 193/303/12 200/313/12 194/304/12 +f 189/306/13 196/315/13 195/307/13 +f 190/298/14 197/309/14 196/308/14 +f 191/300/15 198/310/15 197/309/15 +f 192/302/16 199/2274/16 198/310/16 +f 194/304/17 201/314/17 199/312/17 +f 200/313/18 207/326/18 201/314/18 +f 196/315/19 203/328/19 202/316/19 +f 197/318/20 204/321/20 203/319/20 +f 198/320/21 205/323/21 204/321/21 +f 199/322/22 206/325/22 205/323/22 +f 201/324/23 208/2275/23 206/325/23 +f 207/326/24 214/336/24 208/327/24 +f 203/328/25 210/338/25 209/329/25 +f 204/321/26 211/331/26 210/330/26 +f 205/323/27 212/332/27 211/331/27 +f 206/325/28 213/2276/28 212/332/28 +f 208/334/29 215/346/29 213/335/29 +f 214/336/30 221/362/30 215/337/30 +f 210/338/31 217/350/31 216/339/31 +f 211/341/32 218/344/32 217/342/32 +f 212/343/33 219/345/33 218/344/33 +f 213/335/34 220/347/34 219/345/34 +f 215/346/35 222/349/35 220/347/35 +f 221/348/36 228/2277/36 222/349/36 +f 217/350/37 224/353/37 223/351/37 +f 218/352/38 225/2278/38 224/353/38 +f 219/345/39 226/355/39 225/354/39 +f 220/347/40 227/356/40 226/355/40 +f 222/349/41 229/2279/41 227/356/41 +f 228/358/42 232/363/42 229/359/42 +f 224/353/58 176/278/58 175/277/58 +f 225/365/59 178/283/59 176/366/59 +f 226/367/60 180/284/60 178/283/60 +f 227/368/61 182/286/61 180/284/61 +f 229/369/62 184/288/62 182/286/62 +f 232/363/63 186/291/63 184/290/63 +f 234/371/1 237/2280/1 235/372/1 +f 236/374/2 239/388/2 237/375/2 +f 238/377/3 241/380/3 239/378/3 +f 240/379/4 243/382/4 241/380/4 +f 242/381/5 245/2281/5 243/382/5 +f 244/384/6 251/396/6 245/385/6 +f 237/375/7 247/389/7 246/387/7 +f 239/388/8 248/391/8 247/389/8 +f 241/390/9 249/393/9 248/391/9 +f 243/392/10 250/395/10 249/393/10 +f 245/394/11 252/2282/11 250/395/11 +f 251/396/12 258/406/12 252/397/12 +f 247/399/13 254/408/13 253/400/13 +f 248/391/14 255/402/14 254/401/14 +f 249/393/15 256/403/15 255/402/15 +f 250/395/16 257/2283/16 256/403/16 +f 252/397/17 259/407/17 257/405/17 +f 258/406/18 265/418/18 259/407/18 +f 254/408/19 261/420/19 260/409/19 +f 255/411/20 262/413/20 261/412/20 +f 256/240/21 263/415/21 262/413/21 +f 257/414/22 264/417/22 263/415/22 +f 259/416/23 266/2284/23 264/417/23 +f 265/418/24 272/428/24 266/419/24 +f 261/420/25 268/430/25 267/421/25 +f 262/413/26 269/423/26 268/422/26 +f 263/415/27 270/424/27 269/423/27 +f 264/417/28 271/2285/28 270/424/28 +f 266/426/29 273/438/29 271/427/29 +f 272/428/30 279/454/30 273/429/30 +f 268/430/31 275/442/31 274/431/31 +f 269/433/32 276/436/32 275/434/32 +f 270/435/33 277/437/33 276/436/33 +f 271/427/34 278/439/34 277/437/34 +f 273/438/35 280/441/35 278/439/35 +f 279/440/36 286/2286/36 280/441/36 +f 275/442/37 282/445/37 281/443/37 +f 276/444/38 283/2287/38 282/445/38 +f 277/437/39 284/447/39 283/446/39 +f 278/439/40 285/448/40 284/447/40 +f 280/441/41 287/2288/41 285/448/41 +f 286/450/42 290/455/42 287/451/42 +f 282/445/58 234/371/58 233/370/58 +f 283/457/59 236/376/59 234/458/59 +f 284/459/60 238/377/60 236/376/60 +f 285/460/61 240/379/61 238/377/61 +f 287/461/62 242/381/62 240/379/62 +f 290/455/63 244/384/63 242/383/63 +f 292/463/1 295/2289/1 293/464/1 +f 294/465/2 297/479/2 295/466/2 +f 296/468/3 299/471/3 297/469/3 +f 298/470/4 301/473/4 299/471/4 +f 300/472/5 303/2290/5 301/473/5 +f 302/475/6 309/487/6 303/476/6 +f 295/466/7 305/480/7 304/478/7 +f 297/479/8 306/482/8 305/480/8 +f 299/481/9 307/484/9 306/482/9 +f 301/483/10 308/486/10 307/484/10 +f 303/485/11 310/2291/11 308/486/11 +f 309/487/12 316/497/12 310/488/12 +f 305/490/13 312/499/13 311/491/13 +f 306/482/14 313/493/14 312/492/14 +f 307/484/15 314/494/15 313/493/15 +f 308/486/16 315/2292/16 314/494/16 +f 310/488/17 317/498/17 315/496/17 +f 316/497/18 323/510/18 317/498/18 +f 312/499/19 319/512/19 318/500/19 +f 313/502/20 320/505/20 319/503/20 +f 314/504/21 321/507/21 320/505/21 +f 315/506/22 322/509/22 321/507/22 +f 317/508/23 324/2293/23 322/509/23 +f 323/510/24 330/519/24 324/511/24 +f 319/512/25 326/521/25 325/513/25 +f 320/505/26 327/515/26 326/514/26 +f 321/507/27 328/516/27 327/515/27 +f 322/509/28 329/2294/28 328/516/28 +f 324/280/29 331/529/29 329/518/29 +f 330/519/30 337/545/30 331/520/30 +f 326/521/31 333/533/31 332/522/31 +f 327/524/32 334/527/32 333/525/32 +f 328/526/33 335/528/33 334/527/33 +f 329/518/34 336/530/34 335/528/34 +f 331/529/35 338/532/35 336/530/35 +f 337/531/36 344/2295/36 338/532/36 +f 333/533/37 340/536/37 339/534/37 +f 334/535/38 341/2296/38 340/536/38 +f 335/528/39 342/538/39 341/537/39 +f 336/530/40 343/539/40 342/538/40 +f 338/532/41 345/2297/41 343/539/41 +f 344/541/42 348/546/42 345/542/42 +f 340/536/58 292/463/58 291/462/58 +f 341/548/59 294/467/59 292/549/59 +f 342/550/60 296/468/60 294/467/60 +f 343/551/61 298/470/61 296/468/61 +f 345/552/62 300/472/62 298/470/62 +f 300/474/63 345/542/63 302/475/63 +f 350/554/65 353/557/65 351/555/65 +f 352/556/66 355/559/66 353/557/66 +f 354/558/67 357/561/67 355/559/67 +f 356/560/68 359/2298/68 357/561/68 +f 358/563/70 361/576/70 359/564/70 +f 360/566/71 367/634/71 361/567/71 +f 353/569/72 363/580/72 362/570/72 +f 355/559/73 364/2299/73 363/571/73 +f 357/573/74 365/575/74 364/574/74 +f 359/564/75 366/577/75 365/575/75 +f 361/576/76 373/587/76 366/577/76 +f 373/587/77 361/576/77 368/579/77 +f 363/580/78 370/583/78 369/581/78 +f 364/582/79 371/585/79 370/583/79 +f 365/584/80 372/592/80 371/585/80 +f 366/577/81 374/588/82 372/586/82 +f 373/587/83 375/589/83 374/588/83 +f 368/579/84 381/636/84 375/589/84 +f 370/583/85 377/591/85 376/590/85 +f 371/585/86 378/593/86 377/591/86 +f 372/592/87 379/2300/87 378/593/87 +f 374/595/88 380/598/88 379/596/88 +f 375/597/89 382/600/89 380/598/89 +f 381/599/90 388/609/90 382/600/90 +f 377/591/91 384/2301/91 383/601/91 +f 378/603/92 385/612/92 384/604/92 +f 379/596/93 386/607/93 385/606/93 +f 380/598/94 392/618/94 386/607/94 +f 392/618/95 380/598/95 387/608/95 +f 388/609/96 395/2302/96 387/608/96 +f 384/604/97 390/613/97 389/611/97 +f 385/612/98 391/615/98 390/613/98 +f 386/614/99 393/617/99 391/615/99 +f 392/616/100 394/2303/100 393/617/100 +f 387/608/101 396/2304/101 394/619/101 +f 395/621/102 401/629/102 396/622/102 +f 390/613/103 398/624/103 397/623/103 +f 391/615/104 399/625/104 398/624/104 +f 393/617/105 406/2305/105 399/625/105 +f 406/646/106 393/626/106 400/628/106 +f 396/622/107 402/630/107 400/628/107 +f 401/629/108 405/640/108 402/630/108 +f 398/643/124 350/554/124 349/553/124 +f 399/644/125 352/556/125 350/554/125 +f 406/645/126 354/558/126 352/556/126 +f 400/628/127 356/648/127 354/647/127 +f 402/630/128 358/565/128 356/648/128 +f 405/640/129 360/566/129 358/565/129 +f 408/650/65 411/653/65 409/651/65 +f 410/652/66 413/655/66 411/653/66 +f 412/654/67 415/657/67 413/655/67 +f 414/656/68 417/2306/68 415/657/68 +f 416/659/70 419/672/70 417/660/70 +f 418/662/71 425/731/71 419/663/71 +f 411/665/72 421/676/72 420/666/72 +f 413/655/73 422/2307/73 421/667/73 +f 415/669/74 423/671/74 422/670/74 +f 417/660/75 424/673/75 423/671/75 +f 419/672/76 426/675/76 424/673/76 +f 425/674/77 431/683/77 426/675/77 +f 433/685/78 420/666/78 427/677/78 +f 422/678/79 428/680/79 427/677/79 +f 423/679/80 429/688/80 428/680/80 +f 424/673/82 430/682/82 429/681/82 +f 426/675/83 432/684/83 430/682/83 +f 431/683/84 439/733/84 432/684/84 +f 427/677/85 435/687/85 434/686/85 +f 428/680/86 436/689/86 435/687/86 +f 429/688/87 437/2308/87 436/689/87 +f 430/691/88 438/694/88 437/692/88 +f 432/693/89 440/696/89 438/694/89 +f 439/695/90 446/705/90 440/696/90 +f 435/687/91 442/2309/91 441/697/91 +f 436/699/131 443/709/131 442/700/131 +f 437/692/93 444/703/93 443/702/93 +f 438/694/94 445/704/94 444/703/94 +f 440/696/95 447/706/95 445/704/95 +f 446/705/96 453/2310/96 447/706/96 +f 442/700/97 449/710/97 448/708/97 +f 443/709/98 450/712/98 449/710/98 +f 444/711/99 451/714/99 450/712/99 +f 445/713/100 452/2311/100 451/714/100 +f 447/706/101 454/2312/101 452/715/101 +f 453/717/102 460/726/102 454/718/102 +f 449/710/103 456/720/103 455/719/103 +f 450/712/104 457/721/104 456/720/104 +f 451/714/132 458/2313/132 457/721/132 +f 452/723/106 459/725/106 458/724/106 +f 454/718/107 461/727/107 459/725/107 +f 460/726/108 464/737/108 461/727/108 +f 456/740/124 408/650/124 407/649/124 +f 457/741/125 410/652/125 408/650/125 +f 458/742/126 412/654/126 410/652/126 +f 459/725/127 414/2314/127 412/743/127 +f 414/2314/128 459/725/128 416/661/128 +f 464/737/129 418/662/129 416/661/129 +f 466/745/65 469/748/65 467/746/65 +f 468/747/66 471/750/66 469/748/66 +f 470/749/67 473/752/67 471/750/67 +f 472/751/68 475/2315/68 473/752/68 +f 474/754/70 482/767/70 475/755/70 +f 482/2316/71 474/756/71 477/758/71 +f 469/760/72 479/771/72 478/761/72 +f 471/750/73 480/2317/73 479/762/73 +f 473/764/74 481/766/74 480/765/74 +f 475/755/75 483/768/75 481/766/75 +f 482/767/76 484/770/76 483/768/76 +f 477/769/77 490/779/77 484/770/77 +f 479/771/78 486/774/78 485/772/78 +f 480/773/79 487/776/79 486/774/79 +f 481/775/80 488/783/80 487/776/80 +f 483/768/82 489/778/82 488/777/82 +f 484/770/83 491/780/83 489/778/83 +f 490/779/84 497/826/84 491/780/84 +f 486/774/85 493/782/85 492/781/85 +f 487/776/86 494/784/86 493/782/86 +f 488/783/87 495/2318/87 494/784/87 +f 489/786/88 496/789/88 495/787/88 +f 491/788/89 498/791/89 496/789/89 +f 497/790/90 504/800/90 498/791/90 +f 493/782/91 500/2319/91 499/792/91 +f 494/794/92 501/804/131 500/795/131 +f 495/787/93 502/798/93 501/797/93 +f 496/789/94 503/799/94 502/798/94 +f 498/791/95 505/801/95 503/799/95 +f 504/800/96 511/2320/96 505/801/96 +f 500/795/97 507/805/97 506/803/97 +f 501/804/98 508/807/98 507/805/98 +f 502/806/99 509/809/99 508/807/99 +f 503/808/100 510/2321/100 509/809/100 +f 505/801/101 512/2322/101 510/810/101 +f 511/812/102 517/820/102 512/813/102 +f 521/830/103 506/803/103 513/814/103 +f 508/807/104 514/815/104 513/814/104 +f 509/809/105 515/2323/105 514/815/105 +f 510/817/106 516/819/106 515/818/106 +f 512/813/107 518/821/107 516/819/107 +f 517/820/108 522/831/108 518/821/108 +f 513/834/124 466/745/124 465/744/124 +f 514/835/125 468/747/125 466/745/125 +f 515/836/126 470/749/126 468/747/126 +f 516/819/127 472/838/127 470/837/127 +f 518/821/128 474/756/128 472/838/128 +f 522/831/129 476/757/129 474/756/129 +f 524/840/65 527/843/65 525/841/65 +f 526/842/66 529/845/66 527/843/66 +f 528/844/67 531/847/67 529/845/67 +f 530/846/68 533/2324/68 531/847/68 +f 532/849/70 540/862/69 533/850/70 +f 540/2325/71 532/851/71 535/853/71 +f 527/855/72 537/866/72 536/856/72 +f 529/845/73 538/2326/73 537/857/73 +f 531/859/74 539/861/74 538/860/74 +f 533/850/75 541/863/75 539/861/75 +f 540/862/76 542/865/76 541/863/76 +f 535/864/77 548/874/77 542/865/77 +f 537/866/78 544/869/78 543/867/78 +f 538/868/79 545/871/79 544/869/79 +f 539/870/80 546/878/80 545/871/80 +f 541/863/81 547/873/81 546/872/81 +f 542/865/83 549/875/83 547/873/83 +f 548/874/84 555/922/84 549/875/84 +f 544/869/85 551/877/85 550/876/85 +f 545/871/86 552/879/86 551/877/86 +f 546/878/87 553/2327/87 552/879/87 +f 547/881/88 554/884/88 553/882/88 +f 549/883/89 556/886/89 554/884/89 +f 555/885/90 562/895/90 556/886/90 +f 551/877/91 558/2328/91 557/887/91 +f 552/889/131 559/899/131 558/890/131 +f 553/882/93 560/893/93 559/892/93 +f 554/884/94 561/894/94 560/893/94 +f 556/886/95 563/896/95 561/894/95 +f 562/895/96 568/2329/96 563/896/96 +f 570/908/97 557/897/97 564/898/97 +f 559/899/98 565/901/98 564/898/98 +f 560/900/99 566/903/99 565/901/99 +f 561/902/100 567/2330/100 566/903/100 +f 563/896/101 569/2331/101 567/904/101 +f 568/906/102 576/916/102 569/907/102 +f 564/898/103 572/910/103 571/909/103 +f 565/901/104 573/911/104 572/910/104 +f 566/903/105 574/2332/105 573/911/105 +f 567/913/106 575/915/106 574/914/106 +f 569/907/107 577/917/107 575/915/107 +f 576/916/108 580/926/108 577/917/108 +f 572/929/124 524/840/124 523/839/124 +f 573/930/125 526/842/125 524/840/125 +f 574/931/126 528/844/126 526/842/126 +f 575/915/127 530/933/127 528/932/127 +f 577/917/128 532/851/128 530/933/128 +f 580/926/129 534/852/129 532/851/129 +f 582/935/65 585/938/65 583/936/65 +f 584/937/66 587/940/66 585/938/66 +f 586/939/67 589/942/67 587/940/67 +f 588/941/68 591/2333/68 589/942/68 +f 590/944/70 593/957/70 591/945/70 +f 592/947/71 599/1016/71 593/948/71 +f 585/950/72 595/961/72 594/951/72 +f 587/940/73 596/2334/73 595/952/73 +f 589/954/74 597/956/74 596/955/74 +f 591/945/75 598/958/75 597/956/75 +f 593/957/76 600/960/76 598/958/76 +f 599/959/77 606/969/77 600/960/77 +f 595/961/78 602/964/78 601/962/78 +f 596/963/79 603/966/79 602/964/79 +f 597/965/80 604/973/80 603/966/80 +f 598/958/82 605/968/82 604/967/82 +f 600/960/83 607/970/83 605/968/83 +f 606/969/84 613/1018/84 607/970/84 +f 602/964/85 609/972/85 608/971/85 +f 603/966/86 610/974/86 609/972/86 +f 604/973/87 611/2335/87 610/974/87 +f 605/976/88 612/979/88 611/977/88 +f 607/978/89 614/981/89 612/979/89 +f 613/980/90 620/990/90 614/981/90 +f 609/972/91 616/2336/91 615/982/91 +f 610/984/131 617/994/131 616/985/131 +f 611/977/93 618/988/93 617/987/93 +f 612/979/94 619/989/94 618/988/94 +f 614/981/95 621/991/95 619/989/95 +f 620/990/96 627/2337/96 621/991/96 +f 616/985/97 623/995/97 622/993/97 +f 617/994/98 624/997/98 623/995/98 +f 618/996/99 625/999/99 624/997/99 +f 619/998/100 626/2338/100 625/999/100 +f 621/991/101 628/2339/101 626/1000/101 +f 627/1002/102 634/1011/102 628/1003/102 +f 623/995/103 630/1005/103 629/1004/103 +f 624/997/104 631/1006/104 630/1005/104 +f 625/999/105 632/2340/105 631/1006/105 +f 626/1008/106 633/1010/106 632/1009/106 +f 628/1003/107 635/1012/107 633/1010/107 +f 634/1011/108 638/1022/108 635/1012/108 +f 630/1025/124 582/935/124 581/934/124 +f 631/1026/125 584/937/125 582/935/125 +f 632/1027/126 586/939/126 584/937/126 +f 633/1010/127 588/1029/127 586/1028/127 +f 635/1012/128 590/946/128 588/1029/128 +f 590/946/129 635/1012/129 592/947/129 +f 640/1031/65 643/1034/65 641/1032/65 +f 642/1033/66 645/1036/66 643/1034/66 +f 644/1035/67 647/1038/67 645/1036/67 +f 646/1037/68 649/2341/68 647/1038/68 +f 648/1040/70 651/1053/70 649/1041/70 +f 650/1043/71 657/1113/71 651/1044/71 +f 643/1046/72 653/1057/72 652/1047/72 +f 645/1036/73 654/2342/73 653/1048/73 +f 647/1050/74 655/1052/74 654/1051/74 +f 649/1041/75 656/1054/75 655/1052/75 +f 651/1053/76 658/1056/76 656/1054/76 +f 657/1055/77 664/1065/77 658/1056/77 +f 653/1057/78 660/1060/78 659/1058/78 +f 654/1059/79 661/1062/79 660/1060/79 +f 655/1061/80 662/1068/80 661/1062/80 +f 656/1054/82 663/1064/82 662/1063/82 +f 658/1056/83 665/1066/83 663/1064/83 +f 664/1065/84 670/1115/84 665/1066/84 +f 672/1077/85 659/1058/85 666/1067/85 +f 661/1062/86 667/1069/86 666/1067/86 +f 662/1068/87 668/2343/87 667/1069/87 +f 663/1071/88 669/1074/88 668/1072/88 +f 665/1073/89 671/1076/89 669/1074/89 +f 670/1075/90 678/1086/90 671/1076/90 +f 666/1067/91 674/2344/91 673/1078/91 +f 667/1080/131 675/1090/131 674/1081/131 +f 668/1072/93 676/1084/93 675/1083/93 +f 669/1074/94 677/1085/94 676/1084/94 +f 671/1076/95 684/1096/95 677/1085/95 +f 684/1096/96 671/1076/96 679/1087/96 +f 674/1081/97 681/1091/97 680/1089/97 +f 675/1090/98 682/1093/98 681/1091/98 +f 676/1092/99 683/1095/99 682/1093/99 +f 677/1094/100 685/2345/100 683/1095/100 +f 684/1096/101 686/2346/101 685/1097/101 +f 679/1099/102 692/1108/102 686/1100/102 +f 681/1091/103 688/1102/103 687/1101/103 +f 682/1093/104 689/1103/104 688/1102/104 +f 683/1095/105 690/2347/105 689/1103/105 +f 685/1105/106 691/1107/106 690/1106/106 +f 686/1100/107 693/1109/107 691/1107/107 +f 692/1108/108 696/1119/108 693/1109/108 +f 688/1122/124 640/1031/124 639/1030/124 +f 689/1123/125 642/1033/125 640/1031/125 +f 690/1124/126 644/1035/126 642/1033/126 +f 691/1107/127 646/2348/127 644/1125/127 +f 646/2348/128 691/1107/128 648/1042/128 +f 696/1119/129 650/1043/129 648/1042/129 +f 698/1127/135 701/1141/135 699/1128/135 +f 700/1130/136 703/1133/136 701/1131/136 +f 702/1132/137 705/1135/137 703/1133/137 +f 704/1134/138 707/1137/138 705/1135/138 +f 706/1136/139 709/2349/139 707/1137/139 +f 708/1139/140 715/1150/140 709/1140/140 +f 701/1141/141 711/1152/141 710/1142/141 +f 703/1133/142 712/1144/142 711/1143/142 +f 705/1135/143 713/2350/143 712/1144/143 +f 707/1146/144 714/1149/144 713/1147/144 +f 709/1148/145 716/1159/145 714/1149/145 +f 715/1150/146 722/1161/146 716/1151/146 +f 711/1152/147 718/1163/147 717/1153/147 +f 712/1155/148 719/1157/148 718/1156/148 +f 713/1147/149 720/1158/149 719/1157/149 +f 714/1149/150 721/1160/150 720/1158/150 +f 716/1159/151 723/2351/151 721/1160/151 +f 722/1161/152 729/1172/152 723/1162/152 +f 718/1163/153 725/1166/153 724/1164/153 +f 719/1165/154 726/2352/154 725/1166/154 +f 720/1158/155 727/1168/155 726/1167/155 +f 721/1160/156 728/2353/156 727/1168/156 +f 723/1170/157 730/1181/157 728/1171/157 +f 729/1172/158 736/1210/158 730/1173/158 +f 725/1166/159 732/1185/159 731/1174/159 +f 726/1176/160 733/1179/160 732/1177/160 +f 727/1178/161 734/1180/161 733/1179/161 +f 728/1171/162 735/1182/162 734/1180/162 +f 730/1181/163 737/1184/163 735/1182/163 +f 736/1183/164 743/2354/164 737/1184/164 +f 732/1185/165 739/1197/165 738/1186/165 +f 733/1188/166 740/1191/166 739/1189/166 +f 734/1190/167 741/1200/167 740/1191/167 +f 735/1182/168 742/1193/168 741/1192/168 +f 737/1184/169 744/2355/169 742/1193/169 +f 743/1195/170 749/1206/170 744/1196/170 +f 752/1211/171 738/1186/171 745/1198/171 +f 740/1191/172 746/1201/172 745/1199/172 +f 741/1200/173 754/1215/173 746/1201/173 +f 754/1215/174 741/1200/174 747/1203/174 +f 747/1203/175 742/1202/175 748/1205/175 +f 749/1206/176 753/1212/176 748/1207/176 +f 697/1126/192 752/1211/192 698/1127/192 +f 746/1214/193 700/1130/193 698/1129/193 +f 754/1215/194 702/1217/194 700/1216/194 +f 747/1203/195 704/2356/195 702/1217/195 +f 748/1207/196 706/1138/196 704/1219/196 +f 753/1212/197 708/1139/197 706/1138/197 +f 756/1221/135 759/1235/135 757/1222/135 +f 758/1224/136 761/1227/136 759/1225/136 +f 760/1226/137 763/1229/137 761/1227/137 +f 762/1228/138 765/1231/138 763/1229/138 +f 764/1230/139 767/2357/139 765/1231/139 +f 766/1233/140 772/1243/140 767/1234/140 +f 759/1235/141 774/1245/141 768/1236/141 +f 774/2358/142 759/1225/142 769/1237/142 +f 763/1229/143 770/2359/143 769/1237/143 +f 765/1239/144 771/1242/144 770/1240/144 +f 767/1241/145 779/1252/145 771/1242/145 +f 779/1254/146 767/1234/146 773/1244/146 +f 774/1245/147 776/1256/147 775/1246/147 +f 769/1248/148 777/1250/148 776/1249/148 +f 770/1240/149 778/1251/149 777/1250/149 +f 771/1242/150 780/1253/204 778/1251/150 +f 779/1252/151 781/2360/151 780/1253/151 +f 773/1244/152 787/1265/152 781/1255/152 +f 776/1256/153 783/1259/153 782/1257/153 +f 777/1258/154 784/2361/154 783/1259/154 +f 778/1251/155 785/1261/155 784/1260/155 +f 780/1253/156 786/2362/156 785/1261/156 +f 781/1263/157 788/1274/157 786/1264/157 +f 787/1265/158 794/1303/158 788/1266/158 +f 783/1259/159 790/1278/159 789/1267/159 +f 784/1269/160 791/1272/160 790/1270/160 +f 785/1271/161 792/1273/161 791/1272/161 +f 786/1264/162 793/1275/202 792/1273/162 +f 788/1274/163 795/1277/163 793/1275/163 +f 794/1276/164 801/2363/164 795/1277/164 +f 790/1278/165 797/1290/165 796/1279/165 +f 791/1281/166 798/1284/166 797/1282/166 +f 792/1283/167 799/1293/167 798/1284/167 +f 793/1275/168 800/1286/168 799/1285/168 +f 795/1277/169 807/2364/169 800/1286/169 +f 807/1299/170 795/1287/170 802/1289/170 +f 797/1290/171 804/1304/171 803/1291/171 +f 798/1284/172 805/1294/172 804/1292/172 +f 799/1293/173 806/1296/173 805/1294/173 +f 800/1295/174 808/1298/174 806/1296/174 +f 807/1297/175 812/2365/175 808/1298/175 +f 812/1310/176 807/1299/176 809/1300/176 +f 804/1304/192 756/1221/192 755/1220/192 +f 805/1306/193 758/1224/193 756/1223/193 +f 806/1296/194 760/1308/194 758/1307/194 +f 808/1298/195 762/2366/195 760/1308/195 +f 812/1310/196 764/1232/196 762/1311/196 +f 764/1232/197 812/1310/197 766/1233/197 +f 814/1313/135 817/1326/135 815/1314/135 +f 816/1316/136 826/1328/136 817/1317/136 +f 826/1328/137 816/1316/137 819/1319/137 +f 820/1320/138 822/1322/138 819/1319/138 +f 821/1321/139 824/2367/139 822/1322/139 +f 823/1324/140 831/1336/140 824/1325/140 +f 817/1326/141 827/1338/141 825/1327/141 +f 826/1328/142 828/1330/142 827/1329/142 +f 819/1319/143 829/2368/143 828/1330/143 +f 822/1332/144 830/1335/144 829/1333/144 +f 824/1334/145 832/1345/145 830/1335/145 +f 831/1336/146 838/1347/146 832/1337/146 +f 827/1338/147 834/1349/147 833/1339/147 +f 828/1341/148 835/1343/148 834/1342/148 +f 829/1333/149 836/1344/149 835/1343/149 +f 830/1335/150 837/1346/150 836/1344/150 +f 832/1345/151 839/2369/151 837/1346/151 +f 838/1347/152 845/1358/152 839/1348/152 +f 834/1349/153 841/1352/153 840/1350/153 +f 835/1351/154 842/2370/154 841/1352/154 +f 836/1344/155 843/1354/155 842/1353/155 +f 837/1346/156 844/2371/156 843/1354/156 +f 839/1356/157 846/1367/157 844/1357/157 +f 845/1358/158 852/1396/158 846/1359/158 +f 841/1352/159 848/1371/159 847/1360/159 +f 842/1362/160 849/1365/160 848/1363/160 +f 843/1364/161 850/1366/161 849/1365/161 +f 844/1357/202 851/1368/202 850/1366/202 +f 846/1367/163 853/1370/163 851/1368/163 +f 852/1369/164 859/2372/164 853/1370/164 +f 848/1371/165 855/1383/165 854/1372/165 +f 849/1374/166 856/1377/166 855/1375/166 +f 850/1376/167 857/1386/167 856/1377/167 +f 851/1368/168 858/1379/168 857/1378/168 +f 853/1370/169 860/2373/169 858/1379/169 +f 859/1381/170 866/1392/170 860/1382/170 +f 855/1383/171 862/1397/171 861/1384/171 +f 856/1377/172 863/1387/172 862/1385/172 +f 857/1386/173 864/1389/173 863/1387/173 +f 858/1388/174 865/1391/174 864/1389/174 +f 860/1390/175 870/2374/175 865/1391/175 +f 870/1402/176 860/1382/176 867/1393/176 +f 862/1397/192 814/1313/192 813/1312/192 +f 863/1399/193 816/1316/193 814/1315/193 +f 864/1389/194 818/1261/194 816/1400/194 +f 865/1391/195 820/2375/195 818/1261/195 +f 870/1402/196 821/1323/196 820/1403/196 +f 867/1393/197 823/1324/197 821/1323/197 +f 872/1405/135 883/1418/135 873/1406/135 +f 883/1420/136 872/1407/136 875/1409/136 +f 876/1410/201 878/1412/201 875/1409/201 +f 877/1411/138 880/1414/138 878/1412/138 +f 879/1413/139 882/2376/139 880/1414/139 +f 881/1416/140 889/1428/140 882/1417/140 +f 883/1418/141 885/1430/141 884/1419/141 +f 875/1409/142 886/1422/142 885/1421/142 +f 878/1412/143 887/2377/143 886/1422/143 +f 880/1424/144 888/1427/144 887/1425/144 +f 882/1426/145 890/1437/145 888/1427/145 +f 889/1428/146 896/1439/146 890/1429/146 +f 885/1430/147 892/1441/147 891/1431/147 +f 886/1433/148 893/1435/148 892/1434/148 +f 887/1425/149 894/1436/149 893/1435/149 +f 888/1427/150 895/1438/150 894/1436/150 +f 890/1437/151 897/2378/151 895/1438/151 +f 896/1439/152 903/1450/152 897/1440/152 +f 892/1441/153 899/1444/153 898/1442/153 +f 893/1443/154 900/2379/154 899/1444/154 +f 894/1436/155 901/1446/155 900/1445/155 +f 895/1438/156 902/2380/156 901/1446/156 +f 897/1448/157 904/1459/157 902/1449/157 +f 903/1450/158 910/1488/158 904/1451/158 +f 899/1444/159 906/1463/159 905/1452/159 +f 900/1454/160 907/1457/160 906/1455/160 +f 901/1456/161 908/1458/161 907/1457/161 +f 902/1449/162 909/1460/162 908/1458/162 +f 904/1459/163 911/1462/163 909/1460/163 +f 910/1461/164 917/2381/164 911/1462/164 +f 906/1463/165 913/1475/165 912/1464/165 +f 907/1466/166 914/1469/166 913/1467/166 +f 908/1468/167 915/1478/167 914/1469/167 +f 909/1460/168 916/1471/168 915/1470/168 +f 911/1462/169 918/2382/169 916/1471/169 +f 917/1473/170 924/1484/170 918/1474/170 +f 913/1475/171 920/1490/171 919/1476/171 +f 914/1469/172 921/1479/172 920/1477/172 +f 915/1478/173 922/1481/173 921/1479/173 +f 916/1480/174 923/1483/174 922/1481/174 +f 918/1482/175 925/2383/175 923/1483/175 +f 924/1484/176 928/1489/176 925/1485/176 +f 920/1490/192 872/1405/192 871/1404/192 +f 921/1492/193 874/1408/193 872/1407/193 +f 922/1481/194 876/1494/194 874/1493/194 +f 923/1483/195 877/2384/195 876/1494/195 +f 877/2385/196 923/1495/196 879/1415/196 +f 928/1489/197 881/1416/197 879/1415/197 +f 930/1497/135 933/1511/135 931/1498/135 +f 932/1500/136 935/1503/136 933/1501/136 +f 934/1502/137 937/1505/137 935/1503/137 +f 936/1504/138 939/1507/138 937/1505/138 +f 938/1506/139 941/2386/139 939/1507/139 +f 940/1509/140 947/1520/140 941/1510/140 +f 933/1511/141 943/1522/141 942/1512/141 +f 935/1503/142 944/1514/142 943/1513/142 +f 937/1505/143 945/2387/143 944/1514/143 +f 939/1516/144 946/1519/144 945/1517/144 +f 941/1518/145 948/1529/145 946/1519/145 +f 947/1520/146 954/1531/146 948/1521/146 +f 943/1522/147 950/1533/147 949/1523/147 +f 944/1525/148 951/1527/148 950/1526/148 +f 945/1517/149 952/1528/149 951/1527/149 +f 946/1519/150 953/1530/150 952/1528/150 +f 948/1529/151 955/2388/151 953/1530/151 +f 954/1531/152 961/1542/152 955/1532/152 +f 950/1533/153 957/1536/153 956/1534/153 +f 951/1535/154 958/2389/154 957/1536/154 +f 952/1528/155 959/1538/155 958/1537/155 +f 953/1530/156 960/2390/156 959/1538/156 +f 955/1540/157 962/1551/157 960/1541/157 +f 961/1542/158 968/1580/158 962/1543/158 +f 957/1536/159 964/1555/159 963/1544/159 +f 958/1546/160 965/1549/160 964/1547/160 +f 959/1548/161 966/1550/161 965/1549/161 +f 960/1541/162 967/1552/162 966/1550/162 +f 962/1551/163 969/1554/163 967/1552/163 +f 968/1553/164 975/2391/164 969/1554/164 +f 964/1555/165 971/1567/165 970/1556/165 +f 965/1558/166 972/1561/166 971/1559/166 +f 966/1560/167 973/1570/167 972/1561/167 +f 967/1552/168 974/1563/168 973/1562/168 +f 969/1554/169 976/2392/169 974/1563/169 +f 975/1565/170 982/1576/170 976/1566/170 +f 971/1567/171 978/1582/171 977/1568/171 +f 972/1561/172 979/1571/172 978/1569/172 +f 973/1570/173 980/1573/173 979/1571/173 +f 974/1572/174 981/1575/174 980/1573/174 +f 976/1574/175 983/2393/175 981/1575/175 +f 982/1576/176 986/1581/176 983/1577/176 +f 978/1582/192 930/1497/192 929/1496/192 +f 979/1584/193 932/1500/193 930/1499/193 +f 980/1573/194 934/1586/194 932/1585/194 +f 981/1575/195 936/2394/195 934/1586/195 +f 983/1577/196 938/1508/196 936/1588/196 +f 986/1581/197 940/1509/197 938/1508/197 +f 988/1590/135 991/1604/135 989/1591/135 +f 990/1593/136 993/1596/136 991/1594/136 +f 992/1595/137 995/1598/137 993/1596/137 +f 994/1597/138 997/1600/138 995/1598/138 +f 996/1599/139 1004/2395/139 997/1600/139 +f 1004/1613/140 996/1601/140 999/1603/140 +f 991/1604/141 1001/1615/141 1000/1605/141 +f 993/1596/142 1002/1607/142 1001/1606/142 +f 995/1598/143 1003/2396/143 1002/1607/143 +f 997/1609/144 1005/1612/144 1003/1610/144 +f 1004/1611/145 1006/1622/145 1005/1612/145 +f 999/1603/146 1012/1624/146 1006/1614/146 +f 1001/1615/147 1008/1626/147 1007/1616/147 +f 1002/1618/148 1009/1620/148 1008/1619/148 +f 1003/1610/149 1010/1621/149 1009/1620/149 +f 1005/1612/204 1011/1623/150 1010/1621/204 +f 1006/1622/151 1013/2397/151 1011/1623/151 +f 1012/1624/152 1019/1635/152 1013/1625/152 +f 1008/1626/153 1015/1629/153 1014/1627/153 +f 1009/1628/154 1016/2398/154 1015/1629/154 +f 1010/1621/155 1017/1631/155 1016/1630/155 +f 1011/1623/156 1018/2399/156 1017/1631/156 +f 1013/1633/157 1020/1644/157 1018/1634/157 +f 1019/1635/158 1026/1673/158 1020/1636/158 +f 1015/1629/159 1022/1648/159 1021/1637/159 +f 1016/1639/160 1023/1642/160 1022/1640/160 +f 1017/1641/161 1024/1643/161 1023/1642/161 +f 1018/1634/202 1025/1645/202 1024/1643/202 +f 1020/1644/163 1027/1647/163 1025/1645/163 +f 1026/1646/164 1032/2400/164 1027/1647/164 +f 1034/1660/165 1021/1637/165 1028/1649/165 +f 1023/1651/166 1029/1654/166 1028/1652/166 +f 1024/1653/167 1030/1663/167 1029/1654/167 +f 1025/1645/168 1031/1656/168 1030/1655/168 +f 1027/1647/169 1033/2401/169 1031/1656/169 +f 1032/1658/170 1040/1669/170 1033/1659/170 +f 1028/1649/171 1036/1675/171 1035/1661/171 +f 1029/1654/172 1037/1664/172 1036/1662/172 +f 1030/1663/173 1038/1666/173 1037/1664/173 +f 1031/1665/174 1039/1668/174 1038/1666/174 +f 1033/1667/175 1041/2402/175 1039/1668/175 +f 1040/1669/176 1044/1674/176 1041/1670/176 +f 1036/1675/192 988/1590/192 987/1589/192 +f 1037/1677/193 990/1593/193 988/1592/193 +f 1038/1666/194 992/1679/194 990/1678/194 +f 1039/1668/195 994/2403/195 992/1679/195 +f 1041/1670/196 996/1601/196 994/1681/196 +f 1044/1674/197 998/1602/197 996/1601/197 +f 1046/1683/205 1049/1686/205 1047/1684/205 +f 1048/1685/206 1051/1688/206 1049/1686/206 +f 1050/1687/207 1053/1690/207 1051/1688/207 +f 1052/1689/208 1055/1699/208 1053/1690/208 +f 1054/1692/209 1057/1695/209 1055/1693/209 +f 1056/1694/210 1063/1702/210 1057/1695/210 +f 1049/1686/211 1059/1697/211 1058/1696/211 +f 1051/1688/212 1060/1698/212 1059/1697/212 +f 1053/1690/213 1061/1700/213 1060/1698/213 +f 1055/1699/214 1062/2404/214 1061/1700/214 +f 1057/1695/215 1064/1703/215 1062/1701/215 +f 1063/1702/216 1070/1714/216 1064/1703/216 +f 1059/1705/217 1066/1708/217 1065/1706/217 +f 1060/1707/218 1067/1710/218 1066/1708/218 +f 1061/1709/219 1068/1712/219 1067/1710/219 +f 1062/1711/220 1069/1719/220 1068/1712/220 +f 1064/1703/221 1071/1715/221 1069/1713/221 +f 1070/1714/222 1077/1724/222 1071/1715/222 +f 1066/1708/223 1073/1717/223 1072/1716/223 +f 1067/1710/224 1074/1718/224 1073/1717/224 +f 1068/1712/225 1075/1720/225 1074/1718/225 +f 1069/1719/226 1076/2405/226 1075/1720/226 +f 1071/1722/227 1078/1735/227 1076/1723/227 +f 1077/1724/228 1084/1765/228 1078/1725/228 +f 1073/1727/229 1080/1730/229 1079/1728/229 +f 1074/1729/230 1081/1740/230 1080/1730/230 +f 1075/1732/231 1082/1734/231 1081/1733/231 +f 1076/1723/232 1083/1736/232 1082/1734/232 +f 1078/1735/233 1085/1738/233 1083/1736/233 +f 1084/1737/235 1091/1745/235 1085/1738/235 +f 1080/1730/236 1087/1741/236 1086/1739/236 +f 1081/1740/237 1088/1748/237 1087/1741/237 +f 1082/1734/238 1089/1743/238 1088/1742/238 +f 1083/1736/239 1090/1744/239 1089/1743/239 +f 1085/1738/240 1092/1746/240 1090/1744/240 +f 1091/1745/241 1098/2406/241 1092/1746/241 +f 1087/1741/242 1094/1749/242 1093/1747/242 +f 1088/1748/243 1095/2407/243 1094/1749/243 +f 1089/1751/244 1096/1754/244 1095/1752/244 +f 1090/1753/245 1097/1756/245 1096/1754/245 +f 1092/1755/246 1099/1758/246 1097/1756/246 +f 1098/1757/247 1102/1775/247 1099/1758/247 +f 1045/1760/263 1093/1747/263 1046/1769/263 +f 1095/1771/264 1048/1685/264 1046/1683/264 +f 1096/1754/265 1050/1773/265 1048/1772/265 +f 1097/1756/266 1052/2408/266 1050/1773/266 +f 1052/2408/267 1097/1756/267 1054/1774/267 +f 1102/1775/268 1056/2409/268 1054/1774/268 +f 1104/1777/270 1107/1780/205 1105/1778/270 +f 1106/1779/206 1109/1782/206 1107/1780/206 +f 1108/1781/207 1111/1784/207 1109/1782/207 +f 1110/1783/208 1113/1793/208 1111/1784/208 +f 1112/1786/209 1115/1789/209 1113/1787/209 +f 1114/1788/210 1121/1796/210 1115/1789/210 +f 1107/1780/211 1117/1791/211 1116/1790/211 +f 1109/1782/212 1118/1792/212 1117/1791/212 +f 1111/1784/213 1119/1794/213 1118/1792/213 +f 1113/1793/214 1120/2410/214 1119/1794/214 +f 1115/1789/215 1122/1797/215 1120/1795/215 +f 1121/1796/216 1128/1808/216 1122/1797/216 +f 1117/1799/217 1124/1802/217 1123/1800/217 +f 1118/1801/218 1125/1804/218 1124/1802/218 +f 1119/1803/219 1126/1806/219 1125/1804/219 +f 1120/1805/220 1127/1813/220 1126/1806/220 +f 1122/1797/221 1129/1809/221 1127/1807/221 +f 1128/1808/222 1135/1818/222 1129/1809/222 +f 1124/1802/223 1131/1811/223 1130/1810/223 +f 1125/1804/224 1132/1812/224 1131/1811/224 +f 1126/1806/225 1133/1814/225 1132/1812/225 +f 1127/1813/226 1134/2411/226 1133/1814/226 +f 1129/1816/227 1136/1829/227 1134/1817/227 +f 1135/1818/228 1142/1859/228 1136/1819/228 +f 1131/1821/229 1138/1824/229 1137/1822/229 +f 1132/1823/230 1139/1834/230 1138/1824/230 +f 1133/1826/231 1140/1828/231 1139/1827/231 +f 1134/1817/232 1141/1830/232 1140/1828/232 +f 1136/1829/233 1143/1832/233 1141/1830/233 +f 1142/1831/234 1149/1839/234 1143/1832/234 +f 1138/1824/236 1145/1835/236 1144/1833/236 +f 1139/1834/237 1146/1842/237 1145/1835/237 +f 1140/1828/238 1147/1837/238 1146/1836/238 +f 1141/1830/239 1148/1838/239 1147/1837/239 +f 1143/1832/240 1150/1840/240 1148/1838/240 +f 1149/1839/241 1156/2412/241 1150/1840/241 +f 1145/1835/242 1152/1843/242 1151/1841/242 +f 1146/1842/243 1153/2413/243 1152/1843/243 +f 1147/1845/244 1154/1848/244 1153/1846/244 +f 1148/1847/245 1155/1850/245 1154/1848/245 +f 1150/1849/246 1157/1852/246 1155/1850/246 +f 1156/1851/247 1160/1868/247 1157/1852/247 +f 1152/1843/263 1104/2414/263 1103/1854/263 +f 1153/1864/264 1106/1779/264 1104/1777/264 +f 1154/1848/265 1108/1866/265 1106/1865/265 +f 1155/1850/266 1110/1867/266 1108/1866/266 +f 1157/1852/267 1112/1869/267 1110/1867/267 +f 1160/1868/268 1114/2415/268 1112/1869/268 +f 1162/1871/270 1165/1874/270 1163/1872/270 +f 1164/1873/206 1167/1876/206 1165/1874/206 +f 1166/1875/207 1169/1878/207 1167/1876/207 +f 1168/1877/208 1171/1887/208 1169/1878/208 +f 1170/1880/209 1173/1883/209 1171/1881/209 +f 1172/1882/210 1179/1890/210 1173/1883/210 +f 1165/1874/211 1175/1885/211 1174/1884/211 +f 1167/1876/212 1176/1886/212 1175/1885/212 +f 1169/1878/213 1177/1888/213 1176/1886/213 +f 1171/1887/214 1178/2416/214 1177/1888/214 +f 1173/1883/215 1180/1891/215 1178/1889/215 +f 1179/1890/216 1186/1902/216 1180/1891/216 +f 1175/1893/217 1182/1896/217 1181/1894/217 +f 1176/1895/218 1183/1898/218 1182/1896/218 +f 1177/1897/219 1184/1900/219 1183/1898/219 +f 1178/1899/220 1185/1907/220 1184/1900/220 +f 1180/1891/221 1187/1903/221 1185/1901/221 +f 1186/1902/222 1193/1912/222 1187/1903/222 +f 1182/1896/223 1189/1905/223 1188/1904/223 +f 1183/1898/224 1190/1906/224 1189/1905/224 +f 1184/1900/225 1191/1908/225 1190/1906/225 +f 1185/1907/226 1192/2417/226 1191/1908/226 +f 1187/1910/227 1194/1923/227 1192/1911/227 +f 1193/1912/228 1200/1953/228 1194/1913/228 +f 1189/1915/229 1196/1918/229 1195/1916/229 +f 1190/1917/230 1197/1928/230 1196/1918/230 +f 1191/1920/231 1198/1922/231 1197/1921/231 +f 1192/1911/232 1199/1924/232 1198/1922/232 +f 1194/1923/233 1201/1926/233 1199/1924/233 +f 1200/1925/235 1207/1933/234 1201/1926/235 +f 1196/1918/236 1203/1929/236 1202/1927/236 +f 1197/1928/237 1204/1936/237 1203/1929/237 +f 1198/1922/238 1205/1931/238 1204/1930/238 +f 1199/1924/239 1206/1932/239 1205/1931/239 +f 1201/1926/240 1208/1934/240 1206/1932/240 +f 1207/1933/241 1214/2418/241 1208/1934/241 +f 1203/1929/242 1210/1937/242 1209/1935/242 +f 1204/1936/243 1211/2419/243 1210/1937/243 +f 1205/1939/244 1212/1942/244 1211/1940/244 +f 1206/1941/245 1213/1944/245 1212/1942/245 +f 1208/1943/246 1215/1946/246 1213/1944/246 +f 1214/1945/247 1218/1962/247 1215/1946/247 +f 1210/1937/263 1162/2420/263 1161/1948/263 +f 1211/1958/264 1164/1873/264 1162/1871/264 +f 1212/1942/265 1166/1960/265 1164/1959/265 +f 1213/1944/266 1168/1961/266 1166/1960/266 +f 1215/1946/267 1170/1963/267 1168/1961/267 +f 1218/1962/268 1172/2421/268 1170/1963/268 +f 1220/1965/205 1223/1968/205 1221/1966/205 +f 1222/1967/206 1225/1970/206 1223/1968/206 +f 1224/1969/207 1227/1972/207 1225/1970/207 +f 1226/1971/208 1229/1981/208 1227/1972/208 +f 1228/1974/209 1231/1977/209 1229/1975/209 +f 1230/1976/210 1237/1984/210 1231/1977/210 +f 1223/1968/211 1233/1979/211 1232/1978/211 +f 1225/1970/212 1234/1980/212 1233/1979/212 +f 1227/1972/213 1235/1982/213 1234/1980/213 +f 1229/1981/214 1236/2422/214 1235/1982/214 +f 1231/1977/215 1238/1985/215 1236/1983/215 +f 1237/1984/216 1244/1996/216 1238/1985/216 +f 1233/1987/217 1240/1990/217 1239/1988/217 +f 1234/1989/218 1241/1992/218 1240/1990/218 +f 1235/1991/219 1242/1994/219 1241/1992/219 +f 1236/1993/220 1243/2001/220 1242/1994/220 +f 1238/1985/221 1245/1997/221 1243/1995/221 +f 1244/1996/222 1251/2006/222 1245/1997/222 +f 1240/1990/223 1247/1999/223 1246/1998/223 +f 1241/1992/224 1248/2000/224 1247/1999/224 +f 1242/1994/225 1249/2002/225 1248/2000/225 +f 1243/2001/226 1250/2423/226 1249/2002/226 +f 1245/2004/227 1252/2017/227 1250/2005/227 +f 1251/2006/228 1258/2047/228 1252/2007/228 +f 1247/2009/229 1254/2012/229 1253/2010/229 +f 1248/2011/230 1255/2022/230 1254/2012/230 +f 1249/2014/231 1256/2016/231 1255/2015/231 +f 1250/2005/232 1257/2018/232 1256/2016/232 +f 1252/2017/233 1259/2020/233 1257/2018/233 +f 1258/2019/234 1265/2027/234 1259/2020/234 +f 1254/2012/236 1261/2023/236 1260/2021/236 +f 1255/2022/237 1262/2030/237 1261/2023/237 +f 1256/2016/238 1263/2025/238 1262/2024/238 +f 1257/2018/239 1264/2026/239 1263/2025/239 +f 1259/2020/240 1266/2028/240 1264/2026/240 +f 1265/2027/241 1272/2424/241 1266/2028/241 +f 1261/2023/242 1268/2031/242 1267/2029/242 +f 1262/2030/243 1269/2425/243 1268/2031/243 +f 1263/2033/244 1270/2036/244 1269/2034/244 +f 1264/2035/245 1271/2038/245 1270/2036/245 +f 1266/2037/246 1273/2040/246 1271/2038/246 +f 1272/2039/247 1276/2056/247 1273/2040/247 +f 1268/2031/263 1220/2426/263 1219/2042/263 +f 1269/2052/264 1222/1967/264 1220/1965/264 +f 1270/2036/265 1224/2054/265 1222/2053/265 +f 1271/2038/266 1226/2055/266 1224/2054/266 +f 1273/2040/267 1228/2057/267 1226/2055/267 +f 1276/2056/268 1230/2427/268 1228/2057/268 +f 1278/2059/205 1281/2062/205 1279/2060/205 +f 1280/2061/206 1283/2064/206 1281/2062/206 +f 1282/2063/207 1285/2066/207 1283/2064/207 +f 1284/2065/208 1287/2075/208 1285/2066/208 +f 1286/2068/209 1289/2071/209 1287/2069/209 +f 1288/2070/210 1295/2078/210 1289/2071/210 +f 1281/2062/211 1291/2073/211 1290/2072/211 +f 1283/2064/212 1292/2074/212 1291/2073/212 +f 1285/2066/213 1293/2076/213 1292/2074/213 +f 1287/2075/214 1294/2428/214 1293/2076/214 +f 1289/2071/215 1296/2079/215 1294/2077/215 +f 1295/2078/216 1302/2090/216 1296/2079/216 +f 1291/2081/217 1298/2084/217 1297/2082/217 +f 1292/2083/218 1299/2086/218 1298/2084/218 +f 1293/2085/219 1300/2088/219 1299/2086/219 +f 1294/2087/220 1301/2095/220 1300/2088/220 +f 1296/2079/221 1303/2091/221 1301/2089/221 +f 1302/2090/222 1309/2100/222 1303/2091/222 +f 1298/2084/223 1305/2093/223 1304/2092/223 +f 1299/2086/224 1306/2094/224 1305/2093/224 +f 1300/2088/225 1307/2096/225 1306/2094/225 +f 1301/2095/226 1308/2429/226 1307/2096/226 +f 1303/2098/227 1310/2111/227 1308/2099/227 +f 1309/2100/228 1316/2141/228 1310/2101/228 +f 1305/2103/229 1312/2106/229 1311/2104/229 +f 1306/2105/230 1313/2116/230 1312/2106/230 +f 1307/2108/231 1314/2110/231 1313/2109/231 +f 1308/2099/232 1315/2112/232 1314/2110/232 +f 1310/2111/233 1317/2114/233 1315/2112/233 +f 1316/2113/235 1323/2121/235 1317/2114/235 +f 1312/2106/236 1319/2117/236 1318/2115/236 +f 1313/2116/237 1320/2124/237 1319/2117/237 +f 1314/2110/238 1321/2119/238 1320/2118/238 +f 1315/2112/239 1322/2120/239 1321/2119/239 +f 1317/2114/240 1324/2122/240 1322/2120/240 +f 1323/2121/241 1330/2430/241 1324/2122/241 +f 1319/2117/242 1326/2125/242 1325/2123/242 +f 1320/2124/243 1327/2431/243 1326/2125/243 +f 1321/2127/244 1328/2130/244 1327/2128/244 +f 1322/2129/245 1329/2132/245 1328/2130/245 +f 1324/2131/246 1331/2134/246 1329/2132/246 +f 1330/2133/247 1334/2149/247 1331/2134/247 +f 1326/2125/263 1278/2432/263 1277/2136/263 +f 1327/2145/264 1280/2061/264 1278/2059/264 +f 1328/2130/265 1282/2147/265 1280/2146/265 +f 1329/2132/266 1284/2148/266 1282/2147/266 +f 1331/2134/267 1286/2150/267 1284/2148/267 +f 1334/2149/268 1288/2433/268 1286/2150/268 +f 1336/2152/270 1339/2155/270 1337/2153/270 +f 1338/2154/206 1341/2157/206 1339/2155/206 +f 1340/2156/207 1343/2159/207 1341/2157/207 +f 1342/2158/208 1345/2167/208 1343/2159/208 +f 1344/2161/209 1347/2164/209 1345/2162/209 +f 1346/2163/210 1353/2170/210 1347/2164/210 +f 1339/2155/211 1349/2166/211 1348/2165/211 +f 1341/2157/212 1350/1838/212 1349/2166/212 +f 1343/2159/213 1351/2168/213 1350/1838/213 +f 1345/2167/214 1352/2434/214 1351/2168/214 +f 1347/2164/215 1354/2171/215 1352/2169/215 +f 1353/2170/216 1360/2182/216 1354/2171/216 +f 1349/2173/217 1356/2176/217 1355/2174/217 +f 1350/2175/218 1357/2178/218 1356/2176/218 +f 1351/2177/219 1358/2180/219 1357/2178/219 +f 1352/2179/220 1359/2187/220 1358/2180/220 +f 1354/2171/221 1361/2183/221 1359/2181/221 +f 1360/2182/222 1367/2192/222 1361/2183/222 +f 1356/2176/223 1363/2185/223 1362/2184/223 +f 1357/2178/224 1364/2186/224 1363/2185/224 +f 1358/2180/225 1365/2188/225 1364/2186/225 +f 1359/2187/226 1366/2435/226 1365/2188/226 +f 1361/2190/227 1368/2203/227 1366/2191/227 +f 1367/2192/228 1374/2231/228 1368/2193/228 +f 1363/2195/229 1370/2198/229 1369/2196/229 +f 1364/2197/230 1371/2208/230 1370/2198/230 +f 1365/2200/231 1372/2202/231 1371/2201/231 +f 1366/2191/232 1373/2204/232 1372/2202/232 +f 1368/2203/233 1375/2206/233 1373/2204/233 +f 1374/2205/235 1381/2212/235 1375/2206/235 +f 1370/2198/236 1377/2209/236 1376/2207/236 +f 1371/2208/237 1378/2215/237 1377/2209/237 +f 1372/2202/238 1379/2211/238 1378/2210/238 +f 1373/2204/239 1380/1886/239 1379/2211/239 +f 1375/2206/240 1382/2213/240 1380/1886/240 +f 1381/2212/241 1388/2436/241 1382/2213/241 +f 1377/2209/242 1384/2216/242 1383/2214/242 +f 1378/2215/243 1385/2437/243 1384/2216/243 +f 1379/2147/244 1386/2220/244 1385/2218/244 +f 1380/2219/245 1387/2222/245 1386/2220/245 +f 1382/2221/246 1389/2224/246 1387/2222/246 +f 1388/2223/247 1392/2240/247 1389/2224/247 +f 1384/2216/263 1336/2438/263 1335/2226/263 +f 1385/2236/264 1338/2154/264 1336/2152/264 +f 1386/2220/265 1340/2238/265 1338/2237/265 +f 1387/2222/266 1342/2239/266 1340/2238/266 +f 1389/2224/267 1344/2241/267 1342/2239/267 +f 1392/2240/268 1346/2439/268 1344/2241/268 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.mtl new file mode 100644 index 00000000..3459f9cc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.mtl @@ -0,0 +1,6 @@ +# Made in Blockbench 3.0.6 +newmtl 0 +map_Kd galacticraftplanets:blocks/laser +newmtl 1 +map_Kd galacticraftplanets:blocks/laser_off +newmtl none diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.obj new file mode 100644 index 00000000..08e28393 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/laser.obj @@ -0,0 +1,733 @@ +# Made in Blockbench 3.0.6 +mtllib laser.mtl +o baseCube +v 8.027900863219243 -7.999951218766888 7.9720504406127475 +v 7.999975609364869 -7.972026007445098 -8.027900820649574 +v 8.05582607454103 -23.99990239496411 7.9440764906275145 +v 8.027900820686657 -23.97197718364232 -8.055874770634809 +v -7.999975651897453 -7.999999957430332 -8.00002439059798 +v -7.97205039804308 -8.027925168752123 7.999926870664343 +v -7.972050440575664 -23.999951133627555 -8.027998340583213 +v -7.9441251867212905 -24.027876344949345 7.971952920679109 +vt 0.0009765625 0.7490234375 +vt 0.0009765625 0.5009765625 +vt 0.2490234375 0.7490234375 +vt 0.0009765625 0.5009765625 +vt 0.2490234375 0.5009765625 +vt 0.2490234375 0.7490234375 +vt 0.5009765625 0.7490234375 +vt 0.5009765625 0.5009765625 +vt 0.7490234375 0.7490234375 +vt 0.5009765625 0.5009765625 +vt 0.7490234375 0.5009765625 +vt 0.7490234375 0.7490234375 +vt 0.4990234375 0.7509765625 +vt 0.4990234375 0.9990234375 +vt 0.2509765625 0.7509765625 +vt 0.4990234375 0.9990234375 +vt 0.2509765625 0.9990234375 +vt 0.2509765625 0.7509765625 +vt 0.7490234375 0.9990234375 +vt 0.7490234375 0.7509765625 +vt 0.5009765625 0.9990234375 +vt 0.7490234375 0.7509765625 +vt 0.5009765625 0.7509765625 +vt 0.5009765625 0.9990234375 +vt 0.7509765625 0.7490234375 +vt 0.7509765625 0.5009765625 +vt 0.9990234375 0.7490234375 +vt 0.7509765625 0.5009765625 +vt 0.9990234375 0.5009765625 +vt 0.9990234375 0.7490234375 +vt 0.2509765625 0.7490234375 +vt 0.2509765625 0.5009765625 +vt 0.4990234375 0.7490234375 +vt 0.2509765625 0.5009765625 +vt 0.4990234375 0.5009765625 +vt 0.4990234375 0.7490234375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 1/1/1 3/2/2 2/3/3 +f 3/4/4 4/5/5 2/6/6 +usemtl 0 +f 5/7/7 7/8/8 6/9/9 +f 7/10/10 8/11/11 6/12/12 +usemtl 0 +f 5/13/13 6/14/14 2/15/15 +f 6/16/16 1/17/17 2/18/18 +usemtl 0 +f 8/19/19 7/20/20 3/21/21 +f 7/22/22 4/23/23 3/24/24 +usemtl 0 +f 6/25/25 8/26/26 1/27/27 +f 8/28/28 3/29/29 1/30/30 +usemtl 0 +f 2/31/31 4/32/32 5/33/33 +f 4/34/34 7/35/35 5/36/36 +o baseConnector0 +v 3.012208149414828 -3.9999786555499104 2.987770543355704 +v 3.001736179219438 -3.9895067013042396 -3.012211179617667 +v 3.0191894522452754 -7.999966449599215 2.980777055859395 +v 3.0087174820498856 -7.989494495353545 -3.019204667113976 +v -2.998245543753933 -3.999996932548702 -3.0017575183483194 +v -2.987773573558543 -4.010468886794373 2.9982242046250516 +v -2.9912642409234853 -7.999984726598008 -3.0087510058446276 +v -2.9807922707280956 -8.010456680843678 2.9912307171287433 +vt 0.3447265625 0.2177734375 +vt 0.3447265625 0.1572265625 +vt 0.4365234375 0.2177734375 +vt 0.3447265625 0.1572265625 +vt 0.4365234375 0.1572265625 +vt 0.4365234375 0.2177734375 +vt 0.5322265625 0.2177734375 +vt 0.5322265625 0.1572265625 +vt 0.6240234375 0.2177734375 +vt 0.5322265625 0.1572265625 +vt 0.6240234375 0.1572265625 +vt 0.6240234375 0.2177734375 +vt 0.5302734375 0.2197265625 +vt 0.5302734375 0.3115234375 +vt 0.4384765625 0.2197265625 +vt 0.5302734375 0.3115234375 +vt 0.4384765625 0.3115234375 +vt 0.4384765625 0.2197265625 +vt 0.6240234375 0.3115234375 +vt 0.6240234375 0.2197265625 +vt 0.5322265625 0.3115234375 +vt 0.6240234375 0.2197265625 +vt 0.5322265625 0.2197265625 +vt 0.5322265625 0.3115234375 +vt 0.6259765625 0.2177734375 +vt 0.6259765625 0.1572265625 +vt 0.7177734375 0.2177734375 +vt 0.6259765625 0.1572265625 +vt 0.7177734375 0.1572265625 +vt 0.7177734375 0.2177734375 +vt 0.4384765625 0.2177734375 +vt 0.4384765625 0.1572265625 +vt 0.5302734375 0.2177734375 +vt 0.4384765625 0.1572265625 +vt 0.5302734375 0.1572265625 +vt 0.5302734375 0.2177734375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 9/37/37 11/38/38 10/39/39 +f 11/40/40 12/41/41 10/42/42 +usemtl 0 +f 13/43/43 15/44/44 14/45/45 +f 15/46/46 16/47/47 14/48/48 +usemtl 0 +f 13/49/49 14/50/50 10/51/51 +f 14/52/52 9/53/53 10/54/54 +usemtl 0 +f 16/55/55 15/56/56 11/57/57 +f 15/58/58 12/59/59 11/60/60 +usemtl 0 +f 14/61/61 16/62/62 9/63/63 +f 16/64/64 11/65/65 9/66/66 +usemtl 0 +f 10/67/67 12/68/68 13/69/69 +f 12/70/70 15/71/71 13/72/72 +o baseConnector1 +v 1.5026134232921902 0.000004569249696384503 1.4973820154260062 +v 1.4973774381944953 0.005240546372531796 -1.5026088460606792 +v 1.5095947261226377 -3.9999832247996085 1.490388527929698 +v 1.5043587410249428 -3.9947472476767727 -1.5096023335569875 +v -1.5026134232921902 -0.000004569249698604949 -1.4973820154260051 +v -1.4973774381944953 -0.00524054637253446 1.5026088460606803 +v -1.4956321204617427 -3.999992363299004 -1.5043755029223136 +v -1.4903961353640478 -4.00522834042184 1.4956153585643719 +vt 0.0009765625 0.9521484375 +vt 0.0009765625 0.8916015625 +vt 0.0458984375 0.9521484375 +vt 0.0009765625 0.8916015625 +vt 0.0458984375 0.8916015625 +vt 0.0458984375 0.9521484375 +vt 0.0947265625 0.9521484375 +vt 0.0947265625 0.8916015625 +vt 0.1396484375 0.9521484375 +vt 0.0947265625 0.8916015625 +vt 0.1396484375 0.8916015625 +vt 0.1396484375 0.9521484375 +vt 0.0927734375 0.9541015625 +vt 0.0927734375 0.9990234375 +vt 0.0478515625 0.9541015625 +vt 0.0927734375 0.9990234375 +vt 0.0478515625 0.9990234375 +vt 0.0478515625 0.9541015625 +vt 0.1396484375 0.9990234375 +vt 0.1396484375 0.9541015625 +vt 0.0947265625 0.9990234375 +vt 0.1396484375 0.9541015625 +vt 0.0947265625 0.9541015625 +vt 0.0947265625 0.9990234375 +vt 0.1416015625 0.9521484375 +vt 0.1416015625 0.8916015625 +vt 0.1865234375 0.9521484375 +vt 0.1416015625 0.8916015625 +vt 0.1865234375 0.8916015625 +vt 0.1865234375 0.9521484375 +vt 0.0478515625 0.9521484375 +vt 0.0478515625 0.8916015625 +vt 0.0927734375 0.9521484375 +vt 0.0478515625 0.8916015625 +vt 0.0927734375 0.8916015625 +vt 0.0927734375 0.9521484375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 17/73/73 19/74/74 18/75/75 +f 19/76/76 20/77/77 18/78/78 +usemtl 0 +f 21/79/79 23/80/80 22/81/81 +f 23/82/82 24/83/83 22/84/84 +usemtl 0 +f 21/85/85 22/86/86 18/87/87 +f 22/88/88 17/89/89 18/90/90 +usemtl 0 +f 24/91/91 23/92/92 19/93/93 +f 23/94/94 20/95/95 19/96/96 +usemtl 0 +f 22/97/97 24/98/98 17/99/99 +f 24/100/100 19/101/101 17/102/102 +usemtl 0 +f 18/103/103 20/104/104 21/105/105 +f 20/106/106 23/107/107 21/108/108 +o phalangeAxle +v 2.0034845723644468 2.9947609607470733 5.001745331010259 +v 1.9860312887054636 3.0122142178231917 -4.998224207278692 +v 2.008720549487282 -0.005229884789905936 4.996500215388028 +v 1.991267265828299 0.012223372286212841 -5.003469322900924 +v -2.013956526610117 3.005220730326884 -4.991255099765794 +v -1.996503242951134 2.9877674732507646 5.008714438523158 +v -2.0087205494872817 0.005229884789904604 -4.996500215388025 +v -1.9912672658282986 -0.012223372286214174 5.003469322900926 +vt 0.0009765625 0.3427734375 +vt 0.0009765625 0.2978515625 +vt 0.1552734375 0.3427734375 +vt 0.0009765625 0.2978515625 +vt 0.1552734375 0.2978515625 +vt 0.1552734375 0.3427734375 +vt 0.2197265625 0.3427734375 +vt 0.2197265625 0.2978515625 +vt 0.3740234375 0.3427734375 +vt 0.2197265625 0.2978515625 +vt 0.3740234375 0.2978515625 +vt 0.3740234375 0.3427734375 +vt 0.2177734375 0.3447265625 +vt 0.2177734375 0.4990234375 +vt 0.1572265625 0.3447265625 +vt 0.2177734375 0.4990234375 +vt 0.1572265625 0.4990234375 +vt 0.1572265625 0.3447265625 +vt 0.2802734375 0.4990234375 +vt 0.2802734375 0.3447265625 +vt 0.2197265625 0.4990234375 +vt 0.2802734375 0.3447265625 +vt 0.2197265625 0.3447265625 +vt 0.2197265625 0.4990234375 +vt 0.3759765625 0.3427734375 +vt 0.3759765625 0.2978515625 +vt 0.4365234375 0.3427734375 +vt 0.3759765625 0.2978515625 +vt 0.4365234375 0.2978515625 +vt 0.4365234375 0.3427734375 +vt 0.1572265625 0.3427734375 +vt 0.1572265625 0.2978515625 +vt 0.2177734375 0.3427734375 +vt 0.1572265625 0.2978515625 +vt 0.2177734375 0.2978515625 +vt 0.2177734375 0.3427734375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 25/109/109 27/110/110 26/111/111 +f 27/112/112 28/113/113 26/114/114 +usemtl 0 +f 29/115/115 31/116/116 30/117/117 +f 31/118/118 32/119/119 30/120/120 +usemtl 0 +f 29/121/121 30/122/122 26/123/123 +f 30/124/124 25/125/125 26/126/126 +usemtl 0 +f 32/127/127 31/128/128 27/129/129 +f 31/130/130 28/131/131 27/132/132 +usemtl 0 +f 30/133/133 32/134/134 25/135/135 +f 32/136/136 27/137/137 25/138/138 +usemtl 0 +f 26/139/139 28/140/140 29/141/141 +f 28/142/142 31/143/143 29/144/144 +o turretLeft +v 5.99998173892309 5.999999968072749 6.000018292948487 +v 5.994745753825395 6.005235945195584 3.000027431461801 +v 6.005217716045926 3.0000091225357695 5.994773177326255 +v 5.999981730948231 3.0052450996586053 2.9947823158395703 +v -8.005211599779138 5.980758738958505 3.0244193077569466 +v -7.999975614681444 5.97552276183567 6.024410169243632 +v -7.999975622656302 2.9807678934215263 3.0191741921347153 +v -7.994739637558607 2.9755319162986904 6.019165053621401 +vt 0.4384765625 0.3583984375 +vt 0.4384765625 0.3134765625 +vt 0.4833984375 0.3583984375 +vt 0.4384765625 0.3134765625 +vt 0.4833984375 0.3134765625 +vt 0.4833984375 0.3583984375 +vt 0.7041015625 0.3583984375 +vt 0.7041015625 0.3134765625 +vt 0.7490234375 0.3583984375 +vt 0.7041015625 0.3134765625 +vt 0.7490234375 0.3134765625 +vt 0.7490234375 0.3583984375 +vt 0.7021484375 0.3603515625 +vt 0.7021484375 0.4052734375 +vt 0.4853515625 0.3603515625 +vt 0.7021484375 0.4052734375 +vt 0.4853515625 0.4052734375 +vt 0.4853515625 0.3603515625 +vt 0.9208984375 0.4052734375 +vt 0.9208984375 0.3603515625 +vt 0.7041015625 0.4052734375 +vt 0.9208984375 0.3603515625 +vt 0.7041015625 0.3603515625 +vt 0.7041015625 0.4052734375 +vt 0.7509765625 0.3583984375 +vt 0.7509765625 0.3134765625 +vt 0.9677734375 0.3583984375 +vt 0.7509765625 0.3134765625 +vt 0.9677734375 0.3134765625 +vt 0.9677734375 0.3583984375 +vt 0.4853515625 0.3583984375 +vt 0.4853515625 0.3134765625 +vt 0.7021484375 0.3583984375 +vt 0.4853515625 0.3134765625 +vt 0.7021484375 0.3134765625 +vt 0.7021484375 0.3583984375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 33/145/145 35/146/146 34/147/147 +f 35/148/148 36/149/149 34/150/150 +usemtl 0 +f 37/151/151 39/152/152 38/153/153 +f 39/154/154 40/155/155 38/156/156 +usemtl 0 +f 37/157/157 38/158/158 34/159/159 +f 38/160/160 33/161/161 34/162/162 +usemtl 0 +f 40/163/163 39/164/164 35/165/165 +f 39/166/166 36/167/167 35/168/168 +usemtl 0 +f 38/169/169 40/170/170 33/171/171 +f 40/172/172 35/173/173 33/174/174 +usemtl 0 +f 34/175/175 36/176/176 37/177/177 +f 36/178/178 39/179/179 37/180/180 +o turretRight +v 5.984273783630005 6.015707899441256 -2.99995429151157 +v 5.97903779853231 6.020943876564091 -5.999945152998255 +v 5.989509760752841 3.0157170539042766 -3.0051994071338006 +v 5.984273775655146 3.020953031027112 -6.0051902686204865 +v -8.020919555072222 5.9964666703270115 -5.97555327670311 +v -8.015683569974527 5.991230693204177 -2.9755624152164244 +v -8.015683577949385 2.996475824790033 -5.980798392325341 +v -8.01044759285169 2.991239847667197 -2.9808075308386557 +vt 0.2822265625 0.4521484375 +vt 0.2822265625 0.4072265625 +vt 0.3271484375 0.4521484375 +vt 0.2822265625 0.4072265625 +vt 0.3271484375 0.4072265625 +vt 0.3271484375 0.4521484375 +vt 0.5478515625 0.4521484375 +vt 0.5478515625 0.4072265625 +vt 0.5927734375 0.4521484375 +vt 0.5478515625 0.4072265625 +vt 0.5927734375 0.4072265625 +vt 0.5927734375 0.4521484375 +vt 0.5458984375 0.4541015625 +vt 0.5458984375 0.4990234375 +vt 0.3291015625 0.4541015625 +vt 0.5458984375 0.4990234375 +vt 0.3291015625 0.4990234375 +vt 0.3291015625 0.4541015625 +vt 0.7646484375 0.4990234375 +vt 0.7646484375 0.4541015625 +vt 0.5478515625 0.4990234375 +vt 0.7646484375 0.4541015625 +vt 0.5478515625 0.4541015625 +vt 0.5478515625 0.4990234375 +vt 0.5947265625 0.4521484375 +vt 0.5947265625 0.4072265625 +vt 0.8115234375 0.4521484375 +vt 0.5947265625 0.4072265625 +vt 0.8115234375 0.4072265625 +vt 0.8115234375 0.4521484375 +vt 0.3291015625 0.4521484375 +vt 0.3291015625 0.4072265625 +vt 0.5458984375 0.4521484375 +vt 0.3291015625 0.4072265625 +vt 0.5458984375 0.4072265625 +vt 0.5458984375 0.4521484375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 41/181/181 43/182/182 42/183/183 +f 43/184/184 44/185/185 42/186/186 +usemtl 0 +f 45/187/187 47/188/188 46/189/189 +f 47/190/190 48/191/191 46/192/192 +usemtl 0 +f 45/193/193 46/194/194 42/195/195 +f 46/196/196 41/197/197 42/198/198 +usemtl 0 +f 48/199/199 47/200/200 43/201/201 +f 47/202/202 44/203/203 43/204/204 +usemtl 0 +f 46/205/205 48/206/206 41/207/207 +f 48/208/208 43/209/209 41/210/210 +usemtl 0 +f 42/211/211 44/212/212 45/213/213 +f 44/214/214 47/215/215 45/216/216 +o turretLeft_off +usemtl 1 +f 33/145/145 35/146/146 34/147/147 +f 35/148/148 36/149/149 34/150/150 +usemtl 1 +f 37/151/151 39/152/152 38/153/153 +f 39/154/154 40/155/155 38/156/156 +usemtl 1 +f 37/157/157 38/158/158 34/159/159 +f 38/160/160 33/161/161 34/162/162 +usemtl 1 +f 40/163/163 39/164/164 35/165/165 +f 39/166/166 36/167/167 35/168/168 +usemtl 1 +f 38/169/169 40/170/170 33/171/171 +f 40/172/172 35/173/173 33/174/174 +usemtl 1 +f 34/175/175 36/176/176 37/177/177 +f 36/178/178 39/179/179 37/180/180 +o turretRight_off +usemtl 1 +f 41/181/181 43/182/182 42/183/183 +f 43/184/184 44/185/185 42/186/186 +usemtl 1 +f 45/187/187 47/188/188 46/189/189 +f 47/190/190 48/191/191 46/192/192 +usemtl 1 +f 45/193/193 46/194/194 42/195/195 +f 46/196/196 41/197/197 42/198/198 +usemtl 1 +f 48/199/199 47/200/200 43/201/201 +f 47/202/202 44/203/203 43/204/204 +usemtl 1 +f 46/205/205 48/206/206 41/207/207 +f 48/208/208 43/209/209 41/210/210 +usemtl 1 +f 42/211/211 44/212/212 45/213/213 +f 44/214/214 47/215/215 45/216/216 +o phalange +v 2.996500215388035 4.0017422582563125 2.001760564519426 +v 2.9895189019244417 4.008723561086759 -1.9982272507961545 +v 3.0052268439260943 -0.9982424843053193 1.9930187051490407 +v 2.998245530462501 -0.9912611814748717 -2.00696911016654 +v -3.0104628210489293 3.998233329842297 -1.9877735895268067 +v -3.003481507585336 3.9912520270118494 2.012214225788774 +v -3.00173619251087 -1.0017514127193343 -1.9965154488971921 +v -2.9947548790472767 -1.0087327155497818 2.0034723664183884 +vt 0.0009765625 0.2333984375 +vt 0.0009765625 0.1572265625 +vt 0.0615234375 0.2333984375 +vt 0.0009765625 0.1572265625 +vt 0.0615234375 0.1572265625 +vt 0.0615234375 0.2333984375 +vt 0.1572265625 0.2333984375 +vt 0.1572265625 0.1572265625 +vt 0.2177734375 0.2333984375 +vt 0.1572265625 0.1572265625 +vt 0.2177734375 0.1572265625 +vt 0.2177734375 0.2333984375 +vt 0.1552734375 0.2353515625 +vt 0.1552734375 0.2958984375 +vt 0.0634765625 0.2353515625 +vt 0.1552734375 0.2958984375 +vt 0.0634765625 0.2958984375 +vt 0.0634765625 0.2353515625 +vt 0.2490234375 0.2958984375 +vt 0.2490234375 0.2353515625 +vt 0.1572265625 0.2958984375 +vt 0.2490234375 0.2353515625 +vt 0.1572265625 0.2353515625 +vt 0.1572265625 0.2958984375 +vt 0.2197265625 0.2333984375 +vt 0.2197265625 0.1572265625 +vt 0.3115234375 0.2333984375 +vt 0.2197265625 0.1572265625 +vt 0.3115234375 0.1572265625 +vt 0.3115234375 0.2333984375 +vt 0.0634765625 0.2333984375 +vt 0.0634765625 0.1572265625 +vt 0.1552734375 0.2333984375 +vt 0.0634765625 0.1572265625 +vt 0.1552734375 0.1572265625 +vt 0.1552734375 0.2333984375 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn 0.9999969538288952 0.001748371874077093 -0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.9999969538288952 -0.001748371874077093 0.001742276878224663 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn -0.0017453257076118665 0.9999969485123263 0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453257076118665 -0.9999969485123263 -0.0017483718740770927 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn 0.0017453283658983088 -0.0017453257076118663 0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +vn -0.0017453283658983088 0.0017453257076118663 -0.9999969538288952 +usemtl 0 +f 49/217/217 51/218/218 50/219/219 +f 51/220/220 52/221/221 50/222/222 +usemtl 0 +f 53/223/223 55/224/224 54/225/225 +f 55/226/226 56/227/227 54/228/228 +usemtl 0 +f 53/229/229 54/230/230 50/231/231 +f 54/232/232 49/233/233 50/234/234 +usemtl 0 +f 56/235/235 55/236/236 51/237/237 +f 55/238/238 52/239/239 51/240/240 +usemtl 0 +f 54/241/241 56/242/242 49/243/243 +f 56/244/244 51/245/245 49/246/246 +usemtl 0 +f 50/247/247 52/248/248 53/249/249 +f 52/250/250 55/251/251 53/252/252 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase.obj new file mode 100644 index 00000000..adff1d89 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase.obj @@ -0,0 +1,339 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 08.05.2015 20:43:33 + +# +# object dock +# + +v -20.0000 -20.0000 20.0000 +v -20.0000 -20.0000 -20.0000 +v 20.0000 -20.0000 -20.0000 +v 20.0000 -20.0000 20.0000 +v -20.0000 20.0000 20.0000 +v 20.0000 20.0000 20.0000 +v 20.0000 20.0000 -4.3750 +v -20.0000 20.0000 -4.3750 +v 20.0000 4.3750 20.0000 +v -20.0000 4.3750 20.0000 +v 20.0000 4.3750 -20.0000 +v 18.1250 4.3750 16.8750 +v -18.1250 4.3750 16.8750 +v -18.1250 15.0000 16.8750 +v 18.1250 15.0000 16.8750 +v -20.0000 4.3750 -20.0000 +v -18.1250 -18.1250 -20.0000 +v 18.1250 -18.1250 -20.0000 +v 18.1250 15.0000 -9.3750 +v -18.1250 15.0000 -9.3750 +v 18.1250 4.3750 -20.0000 +v -18.1250 4.3750 -20.0000 +v -18.1250 -18.1250 16.8750 +v 18.1250 -18.1250 16.8750 +v 11.2500 15.0000 -9.3750 +v 18.1250 11.2500 -13.1250 +v 11.9118 11.2500 -13.1250 +v 18.1250 4.3750 -6.2500 +v 13.1250 4.3750 16.8750 +v 13.1250 4.3750 -6.2500 +v 11.9118 11.2500 16.8750 +v 11.2500 15.0000 16.8750 +v 17.5000 -18.1250 -20.0000 +v 11.2500 -18.1250 -20.0000 +v 11.2500 -16.8750 -20.0000 +v 17.5000 -8.1250 -20.0000 +v -11.2500 -18.1250 -20.0000 +v -11.2500 -16.8750 -20.0000 +v -17.5000 -18.1250 -20.0000 +v -17.5000 -8.1250 -20.0000 +v -16.2500 -6.2500 9.3750 +v -10.0000 -15.0000 9.3750 +v -10.0000 -15.0000 -1.8750 +v -16.2500 -6.2500 -1.8750 +v 10.0000 -15.0000 9.3750 +v 10.0000 -15.0000 -1.8750 +v 16.2500 -6.2500 9.3750 +v 16.2500 -6.2500 -1.8750 +v -11.2500 -16.8750 -6.2500 +v -17.5000 -8.1250 -6.2500 +v 11.2500 -16.8750 -6.2500 +v 17.5000 -8.1250 -6.2500 +v 18.1250 -8.1250 -20.0000 +v -18.1250 -8.1250 -20.0000 +v -18.1250 -6.2500 -1.8750 +v -18.1250 -6.2500 9.3750 +v -18.1250 -8.1250 -6.2500 +v 18.1250 -6.2500 9.3750 +v 18.1250 -6.2500 -1.8750 +v 18.1250 -8.1250 -6.2500 +v 18.1250 -3.1250 9.3750 +v -18.1250 -3.1250 9.3750 +v 18.1250 -15.0000 9.3750 +v -18.1250 -15.0000 9.3750 +v 6.2500 -16.8750 -20.0000 +v -6.2500 -16.8750 -20.0000 +v -6.2500 -15.0000 -18.1250 +v 6.2500 -15.0000 -18.1250 +v -6.2500 -16.8750 -6.2500 +v -6.2500 -15.0000 -1.8750 +v 6.2500 -15.0000 -1.8750 +v 6.2500 -16.8750 -6.2500 +v 6.8750 -3.1250 9.3750 +v -6.8750 -3.1250 9.3750 +v -6.8750 6.8750 9.3750 +v 6.8750 6.8750 9.3750 +v -6.8750 4.3750 16.8750 +v -6.8750 6.8750 16.8750 +v 6.8750 6.8750 16.8750 +v 6.8750 4.3750 16.8750 +v -11.2500 15.0000 -9.3750 +v -11.9117 11.2500 -13.1250 +v -18.1250 11.2500 -13.1250 +v -18.1250 4.3750 -6.2500 +v -13.1250 4.3750 -6.2500 +v -13.1250 4.3750 16.8750 +v -11.9118 11.2500 16.8750 +v -11.2500 15.0000 16.8750 +# 88 vertices + +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 -0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.0000 -1.0000 +vn -0.0000 0.7071 -0.7071 +vn -0.0000 -1.0000 -0.0000 +vn -0.9848 -0.1738 0.0000 +vn -0.9848 -0.1738 -0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.8137 0.5812 0.0000 +vn -0.8137 0.5812 -0.0000 +vn 0.7331 0.5237 -0.4339 +vn 0.0000 0.9191 -0.3939 +vn -0.7331 0.5237 -0.4339 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 1.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.9848 -0.1738 0.0000 +# 25 vertex normals + +vt 1.0000 0.3869 0.3413 +vt 1.0000 0.7679 0.3413 +vt 0.6667 0.7679 0.3413 +vt 0.6667 0.3869 0.3413 +vt 0.3333 0.6429 0.6587 +vt 0.0000 0.6429 0.6587 +vt 0.0000 0.4107 0.6587 +vt 0.3333 0.4107 0.6587 +vt 0.6667 0.0000 0.3413 +vt 1.0000 0.0000 0.3413 +vt 1.0000 0.2321 0.3413 +vt 0.6667 0.2321 0.3413 +vt 1.0000 0.3810 0.3413 +vt 0.6667 0.3810 0.3413 +vt 0.6667 0.0000 0.6587 +vt 0.3333 0.0000 0.6587 +vt 0.3333 0.2321 0.6587 +vt 0.6667 0.2321 0.6587 +vt 0.4635 0.3810 0.6587 +vt 0.6667 0.3810 0.6587 +vt 0.3438 0.5774 0.3661 +vt 0.6458 0.5774 0.3661 +vt 0.6458 0.6786 0.3661 +vt 0.3438 0.6786 0.3661 +vt 0.3333 0.0000 0.3413 +vt 0.3333 0.2321 0.3413 +vt 0.4635 0.3810 0.3413 +vt -0.0000 0.0000 0.6587 +vt 0.3177 0.0179 0.6587 +vt 0.0156 0.0179 0.6587 +vt 0.0156 0.3631 0.6190 +vt 0.3177 0.3631 0.6190 +vt -0.0000 0.2321 0.6587 +vt 0.0156 0.2321 0.6587 +vt 0.0000 0.2619 0.5347 +vt 0.0156 0.2619 0.5347 +vt 0.3177 0.2321 0.6587 +vt 0.3333 0.2619 0.5347 +vt 0.3177 0.2619 0.5347 +vt 0.6510 0.6845 0.3562 +vt 0.6510 0.8988 0.3562 +vt 0.9583 0.8988 0.3562 +vt 0.9583 0.6845 0.3562 +vt 0.6510 0.8988 0.6438 +vt 0.6510 0.6845 0.6438 +vt 0.9583 0.6845 0.6438 +vt 0.9583 0.8988 0.6438 +vt 0.7396 1.0000 0.3562 +vt 0.9583 1.0000 0.3562 +vt 0.6458 0.9286 0.6190 +vt 0.3438 0.9286 0.6190 +vt 0.3438 0.6786 0.6190 +vt 0.6458 0.6786 0.6190 +vt 0.7396 1.0000 0.6438 +vt 0.9583 1.0000 0.6438 +vt 0.2604 0.3631 0.4976 +vt 0.3177 0.3631 0.4976 +vt 0.3177 0.3274 0.5269 +vt 0.2656 0.3274 0.5269 +vt 0.2083 0.2143 0.5347 +vt 0.0156 0.2143 0.5347 +vt 0.2083 0.2619 0.5347 +vt 0.2656 0.3274 0.5945 +vt 0.0156 0.3274 0.5955 +vt 0.0156 0.3631 0.5893 +vt 0.2344 0.3631 0.5893 +vt 0.2083 0.2619 0.6042 +vt 0.0156 0.2619 0.6042 +vt 0.3177 0.2619 0.4731 +vt 0.2760 0.2619 0.4731 +vt 0.0208 0.0179 0.6587 +vt 0.0729 0.0179 0.6587 +vt 0.0729 0.0298 0.6587 +vt 0.0208 0.1131 0.6587 +vt 0.2604 0.0179 0.6587 +vt 0.2604 0.0298 0.6587 +vt 0.3125 0.0179 0.6587 +vt 0.3125 0.1131 0.6587 +vt 0.0573 0.9643 0.3710 +vt 0.1302 0.9643 0.4206 +vt 0.1302 0.8571 0.4206 +vt 0.0573 0.8571 0.3710 +vt 0.3073 0.9643 0.3810 +vt 0.1406 0.9643 0.3810 +vt 0.1406 0.8571 0.3810 +vt 0.3073 0.8571 0.3810 +vt 0.1302 0.9643 0.5794 +vt 0.0573 0.9643 0.6290 +vt 0.0573 0.8571 0.6290 +vt 0.1302 0.8571 0.5794 +vt 0.1302 0.8155 0.4107 +vt 0.0573 0.8155 0.3611 +vt 0.1302 0.8155 0.3661 +vt 0.3177 0.8155 0.3661 +vt 0.0573 0.8155 0.6389 +vt 0.1302 0.8155 0.5893 +vt 0.0156 0.1131 0.6587 +vt 0.3177 0.1131 0.6587 +vt 0.0573 0.9643 0.4504 +vt 0.0573 0.8571 0.4504 +vt 0.0417 0.8571 0.4504 +vt 0.0417 0.9643 0.4504 +vt 0.0469 0.8155 0.4355 +vt 0.0417 0.8155 0.4355 +vt 0.0573 0.6845 0.6389 +vt 0.1302 0.6845 0.5893 +vt 0.1302 0.6845 0.3661 +vt 0.3177 0.6845 0.3661 +vt 0.1302 0.6845 0.4107 +vt 0.0573 0.6845 0.3611 +vt 0.0417 0.6845 0.4355 +vt 0.0469 0.6845 0.4355 +vt 0.3438 0.5774 0.5347 +vt 0.3438 0.5060 0.4752 +vt 0.6458 0.5060 0.4752 +vt 0.6458 0.5774 0.5347 +vt 0.3438 0.5060 0.4256 +vt 0.3438 0.3929 0.4256 +vt 0.6458 0.3929 0.4256 +vt 0.6458 0.5060 0.4256 +vt 0.1719 0.6548 0.3661 +vt 0.2760 0.6548 0.3661 +vt 0.2760 0.6845 0.3810 +vt 0.1719 0.6845 0.3810 +vt 0.0573 0.6548 0.0000 +vt 0.0208 0.6726 0.0000 +vt 0.1563 0.6726 0.0000 +vt 0.1719 0.6548 0.0000 +vt 0.2760 0.8393 0.3810 +vt 0.1719 0.8393 0.3810 +vt 0.1094 0.0476 0.4256 +vt 0.2240 0.0476 0.4256 +vt 0.2240 0.1429 0.4256 +vt 0.1094 0.1429 0.4256 +vt 0.0885 0.2143 0.4454 +vt 0.1094 0.2143 0.4454 +vt 0.1094 0.1429 0.4454 +vt 0.0260 0.1429 0.4454 +vt 0.1094 0.2143 0.5546 +vt 0.2240 0.2143 0.5546 +vt 0.2240 0.1429 0.5546 +vt 0.1094 0.1429 0.5546 +vt 0.0885 0.2143 0.5546 +vt 0.0260 0.1429 0.5546 +vt 0.0156 0.2619 0.3966 +vt 0.2083 0.2619 0.3966 +vt 0.2656 0.3274 0.4062 +vt 0.0156 0.3274 0.4055 +vt 0.2344 0.3631 0.4114 +vt 0.0156 0.3631 0.4114 +# 150 texture coords + +g dock +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 1/9/3 4/10/3 9/11/3 10/12/3 +f 10/12/3 9/11/3 6/13/3 5/14/3 +f 4/15/4 3/16/4 11/17/4 9/18/4 +f 9/18/5 11/17/5 7/19/5 6/20/5 +f 12/21/6 13/22/6 14/23/6 15/24/6 +f 2/25/7 1/9/7 10/12/7 16/26/7 +f 16/26/8 10/12/8 5/14/8 8/27/8 +f 3/28/9 2/16/9 17/29/9 18/30/9 +f 8/8/10 7/7/10 19/31/10 20/32/10 +f 11/33/11 3/28/11 18/30/11 21/34/11 +f 7/7/10 11/35/10 21/36/10 19/31/10 +f 2/16/11 16/17/11 22/37/11 17/29/11 +f 16/38/12 8/8/12 20/32/12 22/39/12 +f 17/40/5 22/41/5 13/42/5 23/43/5 +f 21/44/8 18/45/8 24/46/8 12/47/8 +f 22/41/5 20/48/5 14/49/5 13/42/5 +f 20/50/1 19/51/1 15/52/1 14/53/1 +f 19/54/7 21/44/7 12/47/7 15/55/7 +f 25/56/12 19/57/12 26/58/12 27/59/12 +f 28/60/13 12/61/13 29/36/13 30/62/13 +f 27/63/14 31/64/14 32/65/14 25/66/14 +f 31/64/15 27/63/15 30/67/15 29/68/15 +f 27/59/16 26/58/16 28/69/16 30/70/16 +f 33/71/6 34/72/6 35/73/6 36/74/6 +f 34/72/6 37/75/6 38/76/6 35/73/6 +f 37/75/6 39/77/6 40/78/6 38/76/6 +f 41/79/17 42/80/17 43/81/17 44/82/17 +f 42/83/2 45/84/2 46/85/2 43/86/2 +f 45/87/18 47/88/18 48/89/18 46/90/18 +f 44/82/19 43/81/19 49/91/19 50/92/19 +f 43/86/20 46/85/20 51/93/20 49/94/20 +f 46/90/21 48/89/21 52/95/21 51/96/21 +f 33/71/9 36/74/9 53/97/9 18/30/9 +f 40/78/9 39/77/9 17/29/9 54/98/9 +f 41/99/22 44/100/22 55/101/22 56/102/22 +f 44/100/20 50/103/20 57/104/20 55/101/20 +f 48/100/22 47/99/22 58/102/22 59/101/22 +f 52/103/20 48/100/20 59/101/20 60/104/20 +f 51/96/18 52/95/18 36/105/18 35/106/18 +f 49/94/23 51/93/23 35/107/23 38/108/23 +f 50/92/17 49/91/17 38/109/17 40/110/17 +f 52/103/2 60/104/2 53/111/2 36/112/2 +f 57/104/2 50/103/2 40/112/2 54/111/2 +f 12/113/12 61/114/12 62/115/10 13/116/10 +f 61/117/6 63/118/6 64/119/6 62/120/6 +f 65/121/10 66/122/10 67/123/10 68/124/10 +f 69/125/7 70/126/7 67/127/7 66/128/7 +f 70/129/2 71/130/2 68/124/2 67/123/2 +f 71/126/4 72/125/4 65/128/4 68/127/4 +f 73/131/6 74/132/6 75/133/6 76/134/6 +f 77/135/8 78/136/8 75/137/8 74/138/7 +f 78/139/2 79/140/2 76/141/2 75/142/2 +f 79/139/5 80/143/24 73/144/4 76/142/4 +f 20/57/10 81/56/10 82/59/10 83/58/10 +f 13/61/1 84/60/1 85/62/1 86/36/1 +f 86/145/25 85/146/25 82/147/25 87/148/25 +f 81/149/25 88/150/25 87/148/25 82/147/25 +f 83/58/16 82/59/16 85/70/16 84/69/16 +# 60 polygons + diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.mtl new file mode 100644 index 00000000..e6617563 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.mtl @@ -0,0 +1,4 @@ +newmtl MinerBase +Ks 1.000000 1.000000 1.000000 +d 1.000000 +map_Kd galacticraftplanets:blocks/minerbase \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.obj new file mode 100644 index 00000000..7f536cb8 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/minerbase0.obj @@ -0,0 +1,269 @@ +# Blender v2.76 (sub 0) OBJ File: '' +# www.blender.org +mtllib minerbase0.mtl +o dock.001 +v -20.000000 -20.000008 19.999992 +v -20.000000 -19.999992 -20.000008 +v 20.000000 -19.999992 -20.000008 +v 20.000000 -20.000008 19.999992 +v -20.000000 19.999992 20.000008 +v 20.000000 19.999992 20.000008 +v 20.000000 20.000000 -4.374994 +v -20.000000 20.000000 -4.374994 +v 20.000000 4.374994 20.000000 +v -20.000000 4.374994 20.000000 +v 20.000000 4.375006 -20.000000 +v 18.125000 4.374994 16.875000 +v -18.125000 4.374994 16.875000 +v -18.125000 14.999994 16.875004 +v 18.125000 14.999994 16.875004 +v -20.000000 4.375006 -20.000000 +v -18.125000 -18.124992 -20.000008 +v 18.125000 -18.124992 -20.000008 +v 18.125000 15.000004 -9.374994 +v -18.125000 15.000004 -9.374994 +v 18.125000 4.375006 -20.000000 +v -18.125000 4.375006 -20.000000 +v -18.125000 -18.125004 16.874992 +v 18.125000 -18.125004 16.874992 +v 11.250000 15.000004 -9.374994 +v 18.125000 11.250004 -13.124996 +v 11.911800 11.250004 -13.124996 +v 18.125000 4.375002 -6.250000 +v 13.125000 4.374994 16.875000 +v 13.125000 4.375002 -6.250000 +v 11.911800 11.249994 16.875004 +v 11.250000 14.999994 16.875004 +v 17.500000 -18.124992 -20.000008 +v 11.250000 -18.124992 -20.000008 +v 11.250000 -16.874992 -20.000004 +v 17.500000 -8.124994 -20.000004 +v -11.250000 -18.124992 -20.000008 +v -11.250000 -16.874992 -20.000004 +v -17.500000 -18.124992 -20.000008 +v -17.500000 -8.124994 -20.000004 +v -16.250000 -6.250002 9.374998 +v -10.000000 -15.000004 9.374994 +v -10.000000 -15.000000 -1.875005 +v -16.250000 -6.250000 -1.875002 +v 10.000000 -15.000004 9.374994 +v 10.000000 -15.000000 -1.875005 +v 16.250000 -6.250002 9.374998 +v 16.250000 -6.250000 -1.875002 +v -11.250000 -16.874996 -6.250006 +v -17.500000 -8.124998 -6.250002 +v 11.250000 -16.874996 -6.250006 +v 17.500000 -8.124998 -6.250002 +v 18.125000 -8.124994 -20.000004 +v -18.125000 -8.124994 -20.000004 +v -18.125000 -6.250000 -1.875002 +v -18.125000 -6.250002 9.374998 +v -18.125000 -8.124998 -6.250002 +v 18.125000 -6.250002 9.374998 +v 18.125000 -6.250000 -1.875002 +v 18.125000 -8.124998 -6.250002 +v -11.250000 15.000004 -9.374994 +v -11.911700 11.250004 -13.124996 +v -18.125000 11.250004 -13.124996 +v -18.125000 4.375002 -6.250000 +v -13.125000 4.375002 -6.250000 +v -13.125000 4.374994 16.875000 +v -11.911800 11.249994 16.875004 +v -11.250000 14.999994 16.875004 +v 18.125000 -3.125002 9.374998 +v -18.125000 -3.125002 9.374998 +v 18.125000 -15.000004 9.374994 +v -18.125000 -15.000004 9.374994 +v 6.250000 -16.874992 -20.000004 +v -6.250000 -16.874992 -20.000004 +v -6.250000 -14.999994 -18.125004 +v 6.250000 -14.999994 -18.125004 +v -6.250000 -16.874996 -6.250006 +v -6.250000 -15.000000 -1.875005 +v 6.250000 -15.000000 -1.875005 +v 6.250000 -16.874996 -6.250006 +v 6.875000 -3.125002 9.374998 +v -6.875000 -3.125002 9.374998 +v -6.875000 6.874998 9.375002 +v 6.875000 6.874998 9.375002 +v -6.875000 4.374994 16.875000 +v -6.875000 6.874994 16.875004 +v 6.875000 6.874994 16.875004 +v 6.875000 4.374994 16.875000 +vt 0.753676 0.596213 +vt 0.753676 0.846534 +vt 0.502801 0.846534 +vt 0.502801 0.596213 +vt 0.251851 0.764408 +vt 0.000976 0.764408 +vt 0.000976 0.611850 +vt 0.251851 0.611850 +vt 0.502801 0.342016 +vt 0.753676 0.342016 +vt 0.753676 0.494508 +vt 0.502801 0.494508 +vt 0.753676 0.592337 +vt 0.502801 0.592337 +vt 0.251851 0.342016 +vt 0.251851 0.494508 +vt 0.349852 0.592337 +vt 0.259754 0.721374 +vt 0.487070 0.721374 +vt 0.487070 0.787863 +vt 0.259754 0.787863 +vt 0.000976 0.342016 +vt 0.240108 0.353776 +vt 0.012718 0.353776 +vt 0.012718 0.580576 +vt 0.240108 0.580576 +vt 0.000976 0.494508 +vt 0.012718 0.494508 +vt 0.000976 0.514087 +vt 0.012718 0.514087 +vt 0.240108 0.494508 +vt 0.251851 0.514087 +vt 0.240108 0.514087 +vt 0.490984 0.791740 +vt 0.490984 0.932537 +vt 0.722288 0.932537 +vt 0.722288 0.791740 +vt 0.557673 0.999027 +vt 0.722288 0.999027 +vt 0.487070 0.952116 +vt 0.259754 0.952116 +vt 0.196979 0.580576 +vt 0.240108 0.557121 +vt 0.200893 0.557121 +vt 0.157763 0.482813 +vt 0.012718 0.482813 +vt 0.157763 0.514087 +vt 0.012718 0.557121 +vt 0.177409 0.580576 +vt 0.208721 0.514087 +vt 0.016632 0.353776 +vt 0.055847 0.353776 +vt 0.055847 0.361594 +vt 0.016632 0.416323 +vt 0.196979 0.353776 +vt 0.196979 0.361594 +vt 0.236194 0.353776 +vt 0.236194 0.416323 +vt 0.044105 0.975571 +vt 0.098977 0.975571 +vt 0.098977 0.905140 +vt 0.044105 0.905140 +vt 0.232280 0.975571 +vt 0.106805 0.975571 +vt 0.106805 0.905140 +vt 0.232280 0.905140 +vt 0.098977 0.877808 +vt 0.044105 0.877808 +vt 0.240108 0.877808 +vt 0.012718 0.416323 +vt 0.240108 0.416323 +vt 0.032363 0.905140 +vt 0.032363 0.975571 +vt 0.036277 0.877808 +vt 0.032363 0.877808 +vt 0.044105 0.791740 +vt 0.098977 0.791740 +vt 0.240108 0.791740 +vt 0.032363 0.791740 +vt 0.036277 0.791740 +vt 0.259754 0.674463 +vt 0.487070 0.674463 +vt 0.259754 0.600155 +vt 0.487070 0.600155 +vt 0.130365 0.772226 +vt 0.208721 0.772226 +vt 0.208721 0.791740 +vt 0.130365 0.791740 +vt 0.044105 0.772226 +vt 0.016632 0.783921 +vt 0.118623 0.783921 +vt 0.208721 0.893445 +vt 0.130365 0.893445 +vt 0.083321 0.373289 +vt 0.169580 0.373289 +vt 0.169580 0.435902 +vt 0.083321 0.435902 +vt 0.067590 0.482813 +vt 0.083321 0.482813 +vt 0.020546 0.435902 +vt 0.169580 0.482813 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +vn -0.984800 -0.173800 -0.000000 +vn 0.000000 -0.707100 -0.707100 +vn 0.813700 0.581200 0.000000 +vn -0.813700 0.581200 0.000000 +vn 0.733100 0.523700 -0.433900 +vn 0.000000 0.919100 -0.393900 +vn -0.733100 0.523700 -0.433900 +vn 0.984800 -0.173800 0.000000 +usemtl MinerBase +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 1/9/3 4/10/3 9/11/3 10/12/3 +f 10/12/3 9/11/3 6/13/3 5/14/3 +f 4/9/4 3/15/4 11/16/4 9/12/4 +f 9/12/4 11/16/4 7/17/4 6/14/4 +f 12/18/5 13/19/5 14/20/5 15/21/5 +f 2/15/6 1/9/6 10/12/6 16/16/6 +f 16/16/6 10/12/6 5/14/6 8/17/6 +f 3/22/5 2/15/5 17/23/5 18/24/5 +f 8/8/7 7/7/7 19/25/7 20/26/7 +f 11/27/5 3/22/5 18/24/5 21/28/5 +f 7/7/7 11/29/7 21/30/7 19/25/7 +f 2/15/5 16/16/5 22/31/5 17/23/5 +f 16/32/7 8/8/7 20/26/7 22/33/7 +f 17/34/4 22/35/4 13/36/4 23/37/4 +f 21/35/6 18/34/6 24/37/6 12/36/6 +f 22/35/4 20/38/4 14/39/4 13/36/4 +f 20/40/1 19/41/1 15/21/1 14/20/1 +f 19/38/6 21/35/6 12/36/6 15/39/6 +f 25/42/7 19/26/7 26/43/7 27/44/7 +f 28/45/1 12/46/1 29/30/1 30/47/1 +f 27/44/8 31/48/8 32/25/8 25/49/8 +f 31/48/8 27/44/8 30/47/8 29/30/8 +f 27/44/9 26/43/9 28/33/9 30/50/9 +f 33/51/5 34/52/5 35/53/5 36/54/5 +f 34/52/5 37/55/5 38/56/5 35/53/5 +f 37/55/5 39/57/5 40/58/5 38/56/5 +f 41/59/10 42/60/10 43/61/10 44/62/10 +f 42/63/2 45/64/2 46/65/2 43/66/2 +f 45/60/11 47/59/11 48/62/11 46/61/11 +f 44/62/12 43/61/12 49/67/12 50/68/12 +f 43/66/13 46/65/13 51/67/13 49/69/13 +f 46/61/14 48/62/14 52/68/14 51/67/14 +f 33/51/5 36/54/5 53/70/5 18/24/5 +f 40/58/5 39/57/5 17/23/5 54/71/5 +f 41/59/2 44/62/2 55/72/2 56/73/2 +f 44/62/13 50/74/13 57/75/13 55/72/13 +f 48/62/2 47/59/2 58/73/2 59/72/2 +f 52/74/13 48/62/13 59/72/13 60/75/13 +f 51/67/11 52/68/11 36/76/11 35/77/11 +f 49/69/2 51/67/2 35/77/2 38/78/2 +f 50/68/10 49/67/10 38/77/10 40/76/10 +f 52/74/2 60/75/2 53/79/2 36/80/2 +f 57/75/2 50/74/2 40/80/2 54/79/2 +f 20/26/7 61/42/7 62/44/7 63/43/7 +f 13/46/1 64/45/1 65/47/1 66/30/1 +f 66/30/15 65/47/15 62/44/15 67/48/15 +f 61/49/15 68/25/15 67/48/15 62/44/15 +f 63/43/9 62/44/9 65/50/9 64/33/9 +f 12/18/7 69/81/7 70/82/7 13/19/7 +f 69/81/5 71/83/5 72/84/5 70/82/5 +f 73/85/7 74/86/7 75/87/7 76/88/7 +f 77/89/6 78/90/6 75/91/6 74/85/6 +f 78/92/2 79/93/2 76/88/2 75/87/2 +f 79/90/4 80/89/4 73/85/4 76/91/4 +f 81/94/5 82/95/5 83/96/5 84/97/5 +f 85/98/6 86/99/6 83/97/6 82/100/6 +f 86/99/2 87/101/2 84/96/2 83/97/2 +f 87/99/4 88/98/4 81/100/4 84/97/4 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.mtl new file mode 100644 index 00000000..b5f3b9f0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.mtl @@ -0,0 +1,5 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +map_Kd galacticraftplanets:blocks/orb diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.obj new file mode 100644 index 00000000..e4657224 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/orb.obj @@ -0,0 +1,175 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib orb.mtl +o inner_Icosphere +v 0.000000 -1.000000 0.000000 +v 0.723600 -0.447215 0.525720 +v -0.276385 -0.447215 0.850640 +v -0.894425 -0.447215 0.000000 +v -0.276385 -0.447215 -0.850640 +v 0.723600 -0.447215 -0.525720 +v 0.276385 0.447215 0.850640 +v -0.723600 0.447215 0.525720 +v -0.723600 0.447215 -0.525720 +v 0.276385 0.447215 -0.850640 +v 0.894425 0.447215 0.000000 +v 0.000000 1.000000 0.000000 +vt 0.512774 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.977087 0.515875 +vt 0.512774 0.515875 +vt 0.977087 0.980188 +vt 0.512774 0.515875 +vt 0.512774 0.515875 +vt 0.512774 0.515875 +vt 0.512774 0.515875 +vn 0.1876 -0.7947 0.5774 +vn 0.6071 -0.7947 0.0000 +vn -0.4911 -0.7947 0.3568 +vn -0.4911 -0.7947 -0.3568 +vn 0.1876 -0.7947 -0.5774 +vn 0.9822 -0.1876 0.0000 +vn 0.3035 -0.1876 0.9342 +vn -0.7946 -0.1876 0.5774 +vn -0.7946 -0.1876 -0.5774 +vn 0.3035 -0.1876 -0.9342 +vn 0.7946 0.1876 0.5774 +vn -0.3035 0.1876 0.9342 +vn -0.9822 0.1876 0.0000 +vn -0.3035 0.1876 -0.9342 +vn 0.7946 0.1876 -0.5774 +vn 0.4911 0.7947 0.3568 +vn -0.1876 0.7947 0.5774 +vn -0.6071 0.7947 0.0000 +vn -0.1876 0.7947 -0.5774 +vn 0.4911 0.7947 -0.3568 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 2/4/2 1/5/2 6/6/2 +f 1/1/3 3/7/3 4/8/3 +f 1/1/4 4/9/4 5/10/4 +f 1/1/5 5/11/5 6/6/5 +f 2/4/6 6/12/6 11/13/6 +f 3/14/7 2/2/7 7/15/7 +f 4/16/8 3/7/8 8/17/8 +f 5/18/9 4/9/9 9/19/9 +f 6/20/10 5/11/10 10/21/10 +f 2/4/11 11/22/11 7/15/11 +f 3/14/12 7/23/12 8/17/12 +f 4/16/13 8/24/13 9/19/13 +f 5/18/14 9/25/14 10/21/14 +f 6/20/15 10/26/15 11/13/15 +f 7/27/16 11/22/16 12/28/16 +f 8/29/17 7/23/17 12/28/17 +f 9/30/18 8/24/18 12/28/18 +f 10/31/19 9/25/19 12/28/19 +f 11/32/20 10/26/20 12/28/20 +o outer_Icosphere.001 +v 0.000000 -1.372937 0.000000 +v 0.993457 -0.613998 0.721780 +v -0.379459 -0.613998 1.167875 +v -1.227989 -0.613998 0.000000 +v -0.379459 -0.613998 -1.167875 +v 0.993457 -0.613998 -0.721780 +v 0.379459 0.613998 1.167875 +v -0.993457 0.613998 0.721780 +v -0.993457 0.613998 -0.721780 +v 0.379459 0.613998 -1.167875 +v 1.227989 0.613998 0.000000 +v 0.000000 1.372937 0.000000 +vt 0.036479 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.464358 0.534092 +vt 0.036479 0.534092 +vt 0.464358 0.961971 +vt 0.036479 0.534092 +vt 0.036479 0.534092 +vt 0.036479 0.534092 +vt 0.036479 0.534092 +vn 0.1876 -0.7947 0.5774 +vn 0.6071 -0.7947 0.0000 +vn -0.4911 -0.7947 0.3568 +vn -0.4911 -0.7947 -0.3568 +vn 0.1876 -0.7947 -0.5774 +vn 0.9822 -0.1876 0.0000 +vn 0.3035 -0.1876 0.9342 +vn -0.7946 -0.1876 0.5774 +vn -0.7946 -0.1876 -0.5774 +vn 0.3035 -0.1876 -0.9342 +vn 0.7946 0.1876 0.5774 +vn -0.3035 0.1876 0.9342 +vn -0.9822 0.1876 0.0000 +vn -0.3035 0.1876 -0.9342 +vn 0.7946 0.1876 -0.5774 +vn 0.4911 0.7947 0.3568 +vn -0.1876 0.7947 0.5774 +vn -0.6071 0.7947 0.0000 +vn -0.1876 0.7947 -0.5774 +vn 0.4911 0.7947 -0.3568 +usemtl None +f 13/33/21 14/34/21 15/35/21 +f 14/36/22 13/37/22 18/38/22 +f 13/33/23 15/39/23 16/40/23 +f 13/33/24 16/41/24 17/42/24 +f 13/33/25 17/43/25 18/38/25 +f 14/36/26 18/44/26 23/45/26 +f 15/46/27 14/34/27 19/47/27 +f 16/48/28 15/39/28 20/49/28 +f 17/50/29 16/41/29 21/51/29 +f 18/52/30 17/43/30 22/53/30 +f 14/36/31 23/54/31 19/47/31 +f 15/46/32 19/55/32 20/49/32 +f 16/48/33 20/56/33 21/51/33 +f 17/50/34 21/57/34 22/53/34 +f 18/52/35 22/58/35 23/45/35 +f 19/59/36 23/54/36 24/60/36 +f 20/61/37 19/55/37 24/60/37 +f 21/62/38 20/56/38 24/60/38 +f 22/63/39 21/57/39 24/60/39 +f 23/64/40 22/58/40 24/60/40 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.mtl new file mode 100644 index 00000000..70166dc6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.mtl @@ -0,0 +1,5 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/space_pod diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.obj new file mode 100644 index 00000000..0b8a5971 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod.obj @@ -0,0 +1,962 @@ +mtllib pod.mtl +o PodBody +v -0.634758 4.766150 -0.570744 +v -0.634758 4.766150 -0.634192 +v -0.634758 4.371327 -0.570744 +v 0.570743 4.766150 -0.634192 +v 0.634191 4.766150 -0.634192 +v 0.570743 4.371327 -0.634192 +v 0.634191 4.766150 0.574482 +v 0.634191 4.766150 0.634757 +v 0.634191 4.371327 0.574482 +v -0.574483 4.766150 0.634757 +v -0.634758 4.766150 0.634757 +v -0.574483 4.371327 0.634757 +v 0.570743 4.371327 -0.570744 +v 0.634191 4.371327 -0.570744 +v -0.574483 4.766150 -0.570744 +v -0.574483 4.766150 -0.634192 +v -0.850016 4.766150 0.001869 +v -0.850016 4.371327 0.001869 +v 0.634191 4.766150 -0.570744 +v 0.634191 4.371327 -0.634192 +v 0.765090 4.371327 0.001869 +v 0.850095 4.371327 0.001869 +v -0.769260 4.766150 0.001869 +v 0.850095 4.766150 0.001869 +v -0.634758 4.766150 0.574482 +v -0.634758 4.371327 0.634757 +v 0.570743 4.371327 0.634757 +v 0.570743 4.371327 0.574482 +v 0.634191 4.371327 0.634757 +v -0.574483 4.766150 0.574482 +v -0.001870 4.766150 -0.852130 +v -0.001870 4.371327 -0.852130 +v 0.570743 4.766150 0.634757 +v -0.001870 4.371327 -0.766925 +v 0.570743 4.766150 -0.570744 +v -0.002085 4.371327 0.002050 +v -0.001870 4.371327 0.851970 +v -0.001870 4.371327 0.771025 +v -0.001870 4.766150 0.851970 +v -0.001870 4.766150 -0.766925 +v 0.765090 4.766150 0.001869 +v 0.765090 4.413541 0.001869 +v -0.001870 4.766150 0.771025 +v -0.634758 4.371327 -0.634192 +v -0.574483 4.371327 -0.570744 +v -0.634758 4.371327 0.574482 +v -0.574483 4.413541 -0.570744 +v -0.769260 4.413541 0.001869 +v -0.574483 4.413541 -0.570744 +v -0.001870 4.413541 -0.766925 +v 0.570743 4.766150 0.574482 +v -0.001870 4.413541 0.771025 +v 0.570743 4.413541 0.574482 +v -0.574483 4.371327 0.574482 +v -0.002085 4.413541 0.002050 +v -0.574483 4.371327 -0.634192 +v -0.769260 4.371327 0.001869 +v 0.570743 4.413541 -0.570744 +v -0.574483 4.413541 0.574482 +v -0.002085 4.413541 0.002050 +v -0.001870 4.413541 -0.766925 +v -0.769260 4.413541 0.001869 +v -1.121243 1.250807 1.121243 +v -1.121243 1.250807 -1.121243 +v -1.121243 0.922112 1.121243 +v 1.121243 1.250807 -1.121243 +v -1.121243 0.922112 -1.121243 +v 1.121243 1.250807 1.121243 +v 1.121243 0.922112 -1.121243 +v 1.121243 0.922112 1.121243 +v -1.282053 2.701678 -0.302830 +v -1.282053 2.701678 -0.612996 +v -1.282053 0.915438 -0.302830 +v -0.983548 2.701678 -0.612996 +v -1.282053 0.915438 -0.612996 +v -0.983548 2.701678 0.245198 +v -0.983548 2.701678 0.612996 +v -0.983548 0.915438 0.245198 +v -1.282053 2.701678 0.612996 +v -0.983548 0.915438 0.612996 +v -0.983548 0.915438 -0.202830 +v -0.983548 4.033402 -0.202829 +v -0.983548 4.033402 -0.612995 +v -1.282053 4.033402 -0.612995 +v -1.282053 2.701678 0.345198 +v -1.282053 0.915438 0.612996 +v -0.983548 2.701678 -0.202830 +v -1.282053 0.915438 0.345198 +v -0.983548 4.033402 0.612997 +v -0.983548 4.033402 0.245199 +v -1.282053 4.033402 0.612997 +v -1.282053 4.033402 0.345199 +v -0.983548 0.915438 -0.612996 +v -1.282053 4.033402 -0.302829 +v -1.282053 3.339003 -0.302829 +v -1.282053 3.339003 -0.612995 +v -0.983548 3.339003 0.245199 +v -0.983548 3.339003 0.612997 +v -1.282053 3.339003 0.612997 +v -0.983548 3.339003 -0.202829 +v -1.282053 3.339003 0.345199 +v -0.983548 3.339003 -0.612995 +v -1.326488 3.265762 -0.230242 +v -1.326488 3.265762 0.272613 +v -1.326488 2.774920 0.272612 +v -1.326488 2.774920 -0.230243 +v -1.000000 4.360665 1.000001 +v -1.000000 4.360665 -0.999999 +v -1.000000 0.417663 1.000000 +v 1.000000 4.360665 -0.999999 +v -1.000000 0.417663 -1.000000 +v 1.000000 4.360665 1.000001 +v 1.000000 0.417663 -1.000000 +v 1.000000 0.417663 1.000000 +v 0.412316 2.368839 -1.268437 +v 0.657365 2.368839 -1.259879 +v 0.412316 0.915438 -1.268437 +v 0.646948 2.368839 -0.961556 +v 0.657365 0.915438 -1.259879 +v -0.328692 2.368839 -0.995626 +v -0.578297 2.368839 -1.004342 +v -0.328692 0.915438 -0.995626 +v -0.567880 2.368839 -1.302666 +v -0.578297 0.915438 -1.004342 +v 0.401899 0.915438 -0.970113 +v 0.401899 4.033402 -0.970112 +v 0.646948 4.033402 -0.961555 +v 0.412316 4.033402 -1.268436 +v 0.657365 4.033402 -1.259878 +v 0.412316 3.574099 -1.268436 +v 0.657365 3.574099 -1.259878 +v -0.328692 4.033402 -0.995625 +v -0.578297 4.033402 -1.004341 +v -0.328692 3.574099 -0.995625 +v -0.567880 4.033402 -1.302665 +v -0.578297 3.574099 -1.004341 +v 0.646948 3.574099 -0.961555 +v -0.567880 3.574099 -1.302665 +v -0.318274 2.368839 -1.293949 +v -0.318274 0.915438 -1.293949 +v 0.401899 2.368839 -0.970113 +v 0.646948 0.915438 -0.961556 +v -0.318274 4.033402 -1.293948 +v -0.318274 3.574099 -1.293948 +v 0.406242 3.574099 -1.094502 +v 0.401899 3.574099 -0.970112 +v -0.567880 0.915438 -1.302666 +v -0.324348 2.368839 -1.120016 +v -0.324348 3.574099 -1.120015 +v -0.321635 2.368839 -1.197703 +v 0.406242 2.368839 -1.094503 +v -0.321635 3.574099 -1.197702 +v 0.408955 3.574099 -1.172189 +v 0.408955 2.368839 -1.172190 +v -1.121243 4.032755 1.121244 +v -1.121243 4.032755 -1.121242 +v -1.121243 3.704061 1.121244 +v 1.121243 4.032755 -1.121242 +v -1.121243 3.704061 -1.121242 +v 1.121243 4.032755 1.121244 +v 1.121243 3.704061 -1.121242 +v 1.121243 3.704061 1.121244 +v -0.634758 0.034352 0.570746 +v -0.634758 0.034352 0.634193 +v -0.634758 0.429174 0.570746 +v 0.570743 0.034352 0.634193 +v 0.634191 0.034352 0.634193 +v 0.570743 0.429174 0.634193 +v 0.634191 0.034352 -0.574480 +v 0.634191 0.034352 -0.634755 +v 0.634191 0.429174 -0.574480 +v -0.574483 0.034352 -0.634755 +v -0.634758 0.034352 -0.634755 +v -0.574483 0.429174 -0.634755 +v 0.570743 0.429174 0.570746 +v 0.634191 0.429174 0.570746 +v -0.574483 0.034352 0.570746 +v -0.574483 0.034352 0.634193 +v -0.850016 0.034352 -0.001867 +v -0.850016 0.429174 -0.001867 +v 0.634191 0.034352 0.570746 +v 0.634191 0.429174 0.634193 +v 0.765090 0.429174 -0.001867 +v 0.850095 0.429174 -0.001867 +v -0.769260 0.034352 -0.001867 +v 0.850095 0.034352 -0.001867 +v -0.634758 0.034352 -0.574480 +v -0.634758 0.429174 -0.634755 +v 0.570743 0.429174 -0.634755 +v 0.570743 0.429174 -0.574480 +v 0.634191 0.429174 -0.634755 +v -0.574483 0.034352 -0.574480 +v -0.001870 0.034352 0.852132 +v -0.001870 0.429174 0.852132 +v 0.570743 0.034352 -0.634755 +v -0.001870 0.429174 0.766927 +v 0.570743 0.034352 0.570746 +v -0.002085 0.429174 -0.002048 +v -0.001870 0.429174 -0.851968 +v -0.001870 0.429174 -0.771024 +v -0.001870 0.034352 -0.851968 +v -0.001870 0.034352 0.766927 +v 0.765090 0.034352 -0.001867 +v 0.765090 0.386961 -0.001867 +v -0.001870 0.034352 -0.771024 +v -0.634758 0.429174 0.634193 +v -0.574483 0.429174 0.570746 +v -0.634758 0.429174 -0.574480 +v -0.574483 0.386961 0.570746 +v -0.769260 0.386961 -0.001867 +v -0.574483 0.386961 0.570746 +v -0.001870 0.386961 0.766927 +v 0.570743 0.034352 -0.574480 +v -0.001870 0.386961 -0.771024 +v 0.570743 0.386961 -0.574480 +v -0.574483 0.429174 -0.574480 +v -0.002085 0.386961 -0.002048 +v -0.574483 0.429174 0.634193 +v -0.769260 0.429174 -0.001867 +v 0.570743 0.386961 0.570746 +v -0.574483 0.386961 -0.574480 +v -0.002085 0.386961 -0.002048 +v -0.001870 0.386961 0.766927 +v -0.769260 0.386961 -0.001867 +v -0.302830 2.701678 1.282053 +v -0.612996 2.701678 1.282053 +v -0.302830 0.915438 1.282053 +v -0.612996 2.701678 0.983548 +v -0.612996 0.915438 1.282053 +v 0.245198 2.701678 0.983548 +v 0.612996 2.701678 0.983548 +v 0.245198 0.915438 0.983548 +v 0.612996 2.701678 1.282053 +v 0.612996 0.915438 0.983548 +v -0.202830 0.915438 0.983548 +v -0.202830 4.033402 0.983549 +v -0.612996 4.033402 0.983549 +v -0.612996 4.033402 1.282054 +v 0.345198 2.701678 1.282053 +v 0.612996 0.915438 1.282053 +v -0.202830 2.701678 0.983548 +v 0.345198 0.915438 1.282053 +v 0.612996 4.033402 0.983549 +v 0.245198 4.033402 0.983549 +v 0.612996 4.033402 1.282054 +v 0.345198 4.033402 1.282054 +v -0.612996 0.915438 0.983548 +v -0.302830 4.033402 1.282054 +v -0.302830 3.339003 1.282054 +v -0.612996 3.339003 1.282054 +v 0.245198 3.339003 0.983549 +v 0.612996 3.339003 0.983549 +v 0.612996 3.339003 1.282054 +v -0.202830 3.339003 0.983549 +v 0.345198 3.339003 1.282054 +v -0.612996 3.339003 0.983549 +v -0.230243 3.265762 1.326488 +v 0.272612 3.265762 1.326488 +v 0.272612 2.774920 1.326488 +v -0.230243 2.774920 1.326488 +v 1.282053 2.701678 0.302830 +v 1.282053 2.701678 0.612996 +v 1.282053 0.915438 0.302830 +v 0.983548 2.701678 0.612996 +v 1.282053 0.915438 0.612996 +v 0.983548 2.701678 -0.245198 +v 0.983548 2.701678 -0.612996 +v 0.983548 0.915438 -0.245198 +v 1.282054 2.701678 -0.612996 +v 0.983548 0.915438 -0.612996 +v 0.983548 0.915438 0.202830 +v 0.983548 4.033402 0.202831 +v 0.983548 4.033402 0.612997 +v 1.282053 4.033402 0.612997 +v 1.282053 2.701678 -0.345198 +v 1.282054 0.915438 -0.612996 +v 0.983548 2.701678 0.202830 +v 1.282053 0.915438 -0.345198 +v 0.983548 4.033402 -0.612995 +v 0.983548 4.033402 -0.245197 +v 1.282054 4.033402 -0.612995 +v 1.282053 4.033402 -0.345197 +v 0.983548 0.915438 0.612996 +v 1.282053 4.033402 0.302831 +v 1.282053 3.339003 0.302831 +v 1.282053 3.339003 0.612997 +v 0.983548 3.339003 -0.245197 +v 0.983548 3.339003 -0.612995 +v 1.282054 3.339003 -0.612995 +v 0.983548 3.339003 0.202831 +v 1.282053 3.339003 -0.345197 +v 0.983548 3.339003 0.612997 +v 1.326488 3.265762 0.230244 +v 1.326488 3.265762 -0.272611 +v 1.326488 2.774920 -0.272612 +v 1.326488 2.774920 0.230243 +v -0.612996 3.339003 1.282054 +v -0.935509 4.207664 0.935510 +v -0.935509 0.893071 0.935509 +v -0.935509 4.207664 -0.935508 +v -0.935509 0.893071 -0.935509 +v 0.935509 4.207664 -0.935508 +v 0.935509 0.893071 -0.935509 +v 0.935509 4.207664 0.935510 +v 0.935509 0.893071 0.935509 +v -0.612996 2.701678 1.282053 +vt 0.507236 0.505729 +vt 0.998486 0.505729 +vt 0.507236 0.996979 +vt 0.007371 0.006440 +vt 0.498621 0.006440 +vt 0.007371 0.497689 +vt 0.998486 0.996979 +vt 0.498621 0.497689 +vt 0.505136 0.506305 +vt 0.996386 0.506305 +vt 0.505136 0.997555 +vt 0.996386 0.997555 +vt 0.967001 0.003089 +vt 0.996327 0.003089 +vt 0.967001 0.493847 +vt 0.988623 0.497655 +vt 0.505862 0.497655 +vt 0.988623 0.014893 +vt 0.007371 0.505465 +vt 0.498621 0.505465 +vt 0.007371 0.996714 +vt 0.506571 0.505640 +vt 0.997821 0.505640 +vt 0.506571 0.996889 +vt 0.505136 0.503629 +vt 0.996386 0.503629 +vt 0.505136 0.994879 +vt 0.503052 0.503052 +vt 0.503052 0.996948 +vt 0.996948 0.503052 +vt 0.996327 0.493847 +vt 0.505862 0.014893 +vt 0.498621 0.996714 +vt 0.997821 0.996889 +vt 0.996386 0.994879 +vt 0.996948 0.996948 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.936000 0.000000 -0.351900 +vn 0.935700 0.000000 0.352800 +vn 0.355700 0.000000 -0.934600 +vn -0.354700 -0.000000 0.935000 +vn -0.946900 0.000000 0.321400 +vn 0.324100 -0.000000 0.946000 +vn 0.946700 0.000000 -0.322000 +vn -0.324600 0.000000 -0.945800 +vn -0.936000 0.000000 0.351900 +vn 0.935700 0.000000 -0.352800 +vn -0.946900 0.000000 -0.321400 +vn 0.946700 0.000000 0.322000 +vn -0.355700 0.000000 -0.934600 +vn 0.354700 -0.000000 0.935000 +vn -0.324100 -0.000000 0.946000 +vn 0.324600 0.000000 -0.945800 +vn 0.000000 0.000000 0.000000 +vn -0.852900 0.000000 -0.522100 +vn -0.855000 0.518700 0.000000 +vn -0.855000 -0.518700 0.000000 +vn -0.852900 -0.000000 0.522100 +vn 0.034900 0.000000 -0.999400 +vn 0.999400 -0.000000 0.034900 +vn -0.034900 -0.000000 0.999400 +vn -0.999400 0.000000 -0.034900 +vn 0.355700 -0.000000 0.934600 +vn -0.354700 0.000000 -0.935000 +vn 0.324100 0.000000 -0.946000 +vn -0.324600 -0.000000 0.945800 +vn -0.355700 -0.000000 0.934600 +vn 0.354700 0.000000 -0.935000 +vn -0.324100 0.000000 -0.946000 +vn 0.324600 -0.000000 0.945800 +vn -0.522100 -0.000000 0.852900 +vn 0.000000 0.518700 0.855000 +vn 0.000000 -0.518700 0.855000 +vn 0.522100 -0.000000 0.852900 +vn 0.852900 0.000000 0.522100 +vn 0.855000 0.518700 0.000000 +vn 0.855000 -0.518700 0.000000 +vn 0.852900 0.000000 -0.522100 +usemtl None +f 1/1/1 2/2/1 3/3/1 +f 4/1/2 5/2/2 6/3/2 +f 7/1/3 8/2/3 9/3/3 +f 10/1/4 11/2/4 12/3/4 +f 13/4/5 6/5/5 14/6/5 +f 15/1/6 16/2/6 1/3/6 +f 17/1/7 1/2/7 18/3/7 +f 5/1/3 19/2/3 20/3/3 +f 21/4/5 13/5/5 22/6/5 +f 23/1/6 15/2/6 17/3/6 +f 24/1/8 7/2/8 22/3/8 +f 11/1/1 25/2/1 26/3/1 +f 27/4/5 28/5/5 29/6/5 +f 10/1/6 30/2/6 11/3/6 +f 31/1/9 4/2/9 32/3/9 +f 8/1/4 33/2/4 29/3/4 +f 34/4/5 32/5/5 13/6/5 +f 19/1/6 5/2/6 35/3/6 +f 36/1/5 34/2/5 21/3/5 +f 24/1/6 19/2/6 35/7/6 +f 37/4/5 38/5/5 28/8/5 +f 8/1/6 7/2/6 33/3/6 +f 39/1/10 10/2/10 37/3/10 +f 40/1/6 31/2/6 15/3/6 +f 41/1/11 35/2/11 42/3/11 +f 39/1/6 43/2/6 30/7/6 +f 2/1/2 16/2/2 44/3/2 +f 3/4/5 44/5/5 45/6/5 +f 18/4/5 3/5/5 45/8/5 +f 26/4/5 46/5/5 12/6/5 +f 47/4/4 48/5/4 49/6/4 +f 40/1/12 15/2/12 50/3/12 +f 23/1/13 30/2/13 48/3/13 +f 43/1/14 51/2/14 52/3/14 +f 25/1/15 17/2/15 46/3/15 +f 28/4/5 21/5/5 22/8/5 +f 30/1/6 23/2/6 17/7/6 +f 19/1/16 24/2/16 14/3/16 +f 38/1/5 36/2/5 21/7/5 +f 7/1/6 24/2/6 51/3/6 +f 51/1/17 41/2/17 53/3/17 +f 46/4/5 18/5/5 54/6/5 +f 52/1/6 55/2/6 48/7/6 +f 15/1/18 23/2/18 47/3/18 +f 16/1/19 31/2/19 56/3/19 +f 45/4/5 56/5/5 32/8/5 +f 57/1/5 45/2/5 34/7/5 +f 12/4/5 54/5/5 37/6/5 +f 33/1/20 39/2/20 27/3/20 +f 35/1/6 4/2/6 31/7/6 +f 33/1/6 51/2/6 39/3/6 +f 42/1/6 58/2/6 50/7/6 +f 35/1/21 40/2/21 58/3/21 +f 30/1/22 43/2/22 59/3/22 +f 54/1/5 57/2/5 38/3/5 +f 53/1/6 42/2/6 52/3/6 +f 60/1/6 61/2/6 62/3/6 +f 55/4/23 50/5/23 60/6/23 +f 50/4/23 47/5/4 61/6/23 +f 48/4/4 55/5/23 62/6/4 +f 63/4/1 64/5/1 65/6/1 +f 64/4/2 66/5/2 67/6/2 +f 66/4/3 68/5/3 69/6/3 +f 68/4/4 63/5/4 70/6/4 +f 65/4/5 67/5/5 70/6/5 +f 68/4/6 66/5/6 63/6/6 +f 71/9/1 72/10/1 73/11/1 +f 72/9/2 74/10/2 75/11/2 +f 76/4/3 77/5/3 78/6/3 +f 77/9/4 79/10/4 80/11/4 +f 73/9/5 75/10/5 81/11/5 +f 82/9/6 83/10/6 84/12/6 +f 79/9/1 85/10/1 86/11/1 +f 87/4/3 76/5/3 81/6/3 +f 86/9/5 88/10/5 78/12/5 +f 89/9/6 90/10/6 91/11/6 +f 85/9/1 71/10/1 88/11/1 +f 88/9/5 73/10/5 78/11/5 +f 90/9/6 82/10/6 92/11/6 +f 74/4/3 87/5/3 93/6/3 +f 94/9/1 84/10/1 95/11/1 +f 84/9/2 83/10/2 96/11/2 +f 90/4/3 89/5/3 97/6/3 +f 89/9/4 91/10/4 98/11/4 +f 91/9/1 92/10/1 99/11/1 +f 82/4/3 90/5/3 100/6/3 +f 92/9/1 94/10/1 101/11/1 +f 83/4/3 82/5/3 102/6/3 +f 95/9/1 96/10/1 71/11/1 +f 96/9/2 102/10/2 72/11/2 +f 97/4/3 98/5/3 76/6/3 +f 98/9/4 99/10/4 77/11/4 +f 99/9/1 101/10/1 79/11/1 +f 100/4/3 97/5/3 87/6/3 +f 95/13/24 71/14/24 103/15/24 +f 102/4/3 100/5/3 74/6/3 +f 104/16/1 103/17/1 105/18/1 +f 101/13/25 95/14/25 104/15/25 +f 71/13/26 85/14/26 106/15/26 +f 85/13/27 101/14/27 105/15/27 +f 107/19/1 108/20/1 109/21/1 +f 108/19/2 110/20/2 111/21/2 +f 110/19/3 112/20/3 113/21/3 +f 112/19/4 107/20/4 114/21/4 +f 109/19/5 111/20/5 114/21/5 +f 112/19/6 110/20/6 107/21/6 +f 115/9/28 116/10/28 117/11/28 +f 116/9/29 118/10/29 119/11/29 +f 120/4/30 121/5/30 122/6/30 +f 121/9/31 123/10/31 124/11/31 +f 117/9/5 119/10/5 125/11/5 +f 126/9/6 127/10/6 128/11/6 +f 128/9/28 129/10/28 130/11/28 +f 129/22/29 127/23/29 131/24/29 +f 132/4/30 133/5/30 134/6/30 +f 133/9/31 135/10/31 136/11/31 +f 130/9/28 131/10/28 115/11/28 +f 131/9/29 137/10/29 116/11/29 +f 134/4/30 136/5/30 120/6/30 +f 136/9/31 138/10/31 121/11/31 +f 139/9/28 115/10/28 140/11/28 +f 118/4/30 141/5/30 142/6/30 +f 140/9/5 117/10/5 122/11/5 +f 132/9/6 126/10/6 143/11/6 +f 143/9/28 128/10/28 144/11/28 +f 127/4/30 126/5/30 137/6/30 +f 130/9/31 115/10/31 145/11/31 +f 137/4/30 146/5/30 118/6/30 +f 141/4/30 120/5/30 125/6/30 +f 126/4/30 132/5/30 146/6/30 +f 146/4/30 134/5/30 141/6/30 +f 123/9/28 139/10/28 147/11/28 +f 147/9/5 140/10/5 124/11/5 +f 133/9/6 132/10/6 135/11/6 +f 135/9/28 143/10/28 138/11/28 +f 138/9/28 144/10/28 123/11/28 +f 148/4/31 149/5/31 150/6/31 +f 144/9/5 130/10/5 149/11/5 +f 115/9/6 139/10/6 151/11/6 +f 139/9/29 144/10/29 148/11/29 +f 152/25/28 153/26/28 150/27/28 +f 145/4/29 151/5/29 153/6/29 +f 149/4/6 145/5/6 152/6/6 +f 151/4/5 148/5/5 154/6/5 +f 155/4/1 156/5/1 157/6/1 +f 156/4/2 158/5/2 159/6/2 +f 158/4/3 160/5/3 161/6/3 +f 160/4/4 155/5/4 162/6/4 +f 157/4/5 159/5/5 162/6/5 +f 160/4/6 158/5/6 155/6/6 +f 163/1/1 164/2/1 165/3/1 +f 166/1/4 167/2/4 168/3/4 +f 169/1/3 170/2/3 171/3/3 +f 172/1/2 173/2/2 174/3/2 +f 175/4/6 168/5/6 176/6/6 +f 177/1/5 178/2/5 163/3/5 +f 179/1/15 163/2/15 180/3/15 +f 167/1/3 181/2/3 182/3/3 +f 183/4/6 175/5/6 184/6/6 +f 185/1/5 177/2/5 179/3/5 +f 186/1/16 169/2/16 184/3/16 +f 173/1/1 187/2/1 188/3/1 +f 189/4/6 190/5/6 191/6/6 +f 172/1/5 192/2/5 173/3/5 +f 193/1/32 166/2/32 194/3/32 +f 170/1/2 195/2/2 191/3/2 +f 196/4/6 194/5/6 175/6/6 +f 181/1/5 167/2/5 197/3/5 +f 198/1/6 196/2/6 183/3/6 +f 186/1/5 181/2/5 197/7/5 +f 199/4/6 200/5/6 190/8/6 +f 170/1/5 169/2/5 195/3/5 +f 201/1/33 172/2/33 199/3/33 +f 202/1/5 193/2/5 177/3/5 +f 203/1/17 197/2/17 204/3/17 +f 201/1/5 205/2/5 192/7/5 +f 164/1/4 178/2/4 206/3/4 +f 165/4/6 206/5/6 207/6/6 +f 180/4/6 165/5/6 207/8/6 +f 188/4/6 208/5/6 174/6/6 +f 209/4/4 210/5/4 211/6/4 +f 202/1/34 177/2/34 212/3/34 +f 185/1/18 192/2/18 210/3/18 +f 205/1/35 213/2/35 214/3/35 +f 187/1/7 179/2/7 208/3/7 +f 190/4/6 183/5/6 184/8/6 +f 192/1/5 185/2/5 179/7/5 +f 181/1/8 186/2/8 176/3/8 +f 200/1/6 198/2/6 183/7/6 +f 169/1/5 186/2/5 213/3/5 +f 213/1/11 203/2/11 215/3/11 +f 208/4/6 180/5/6 216/6/6 +f 214/1/5 217/2/5 210/7/5 +f 177/1/13 185/2/13 209/3/13 +f 178/1/36 193/2/36 218/3/36 +f 207/4/6 218/5/6 194/8/6 +f 219/4/6 207/5/6 196/8/6 +f 174/4/6 216/5/6 199/6/6 +f 195/1/37 201/2/37 189/3/37 +f 197/1/5 166/2/5 193/7/5 +f 195/1/5 213/2/5 201/3/5 +f 204/1/5 220/2/5 212/7/5 +f 197/1/38 202/2/38 220/3/38 +f 192/1/39 205/2/39 221/3/39 +f 216/1/6 219/2/6 200/3/6 +f 215/1/5 204/2/5 214/3/5 +f 222/1/5 223/2/5 224/3/5 +f 217/4/23 212/5/23 222/6/23 +f 212/4/23 209/5/4 223/6/23 +f 210/4/4 217/5/23 224/6/4 +f 225/9/4 226/10/4 227/11/4 +f 226/9/1 228/10/1 229/11/1 +f 230/4/2 231/5/2 232/6/2 +f 231/9/3 233/10/3 234/11/3 +f 227/9/5 229/10/5 235/11/5 +f 236/9/6 237/10/6 238/12/6 +f 233/9/4 239/10/4 240/11/4 +f 241/4/2 230/5/2 235/6/2 +f 240/9/5 242/10/5 232/12/5 +f 243/9/6 244/10/6 245/11/6 +f 239/9/4 225/10/4 242/11/4 +f 242/9/5 227/10/5 232/11/5 +f 244/9/6 236/10/6 246/11/6 +f 228/4/2 241/5/2 247/6/2 +f 248/9/4 238/10/4 249/11/4 +f 238/9/1 237/10/1 250/11/1 +f 244/4/2 243/5/2 251/6/2 +f 243/9/3 245/10/3 252/11/3 +f 245/9/4 246/10/4 253/11/4 +f 236/4/2 244/5/2 254/6/2 +f 246/9/4 248/10/4 255/11/4 +f 237/4/2 236/5/2 256/6/2 +f 249/9/4 250/10/4 225/11/4 +f 250/9/1 256/10/1 226/11/1 +f 251/4/2 252/5/2 230/6/2 +f 252/9/3 253/10/3 231/11/3 +f 253/9/4 255/10/4 233/11/4 +f 254/4/2 251/5/2 241/6/2 +f 249/13/40 225/14/40 257/15/40 +f 256/4/2 254/5/2 228/6/2 +f 258/16/4 257/17/4 259/18/4 +f 255/13/41 249/14/41 258/15/41 +f 225/13/42 239/14/42 260/15/42 +f 239/13/43 255/14/43 259/15/43 +f 261/9/3 262/10/3 263/11/3 +f 262/9/4 264/10/4 265/11/4 +f 266/4/1 267/5/1 268/6/1 +f 267/9/2 269/10/2 270/11/2 +f 263/9/5 265/10/5 271/11/5 +f 272/9/6 273/10/6 274/12/6 +f 269/9/3 275/10/3 276/11/3 +f 277/4/1 266/5/1 271/6/1 +f 276/9/5 278/10/5 268/12/5 +f 279/9/6 280/10/6 281/11/6 +f 275/9/3 261/10/3 278/11/3 +f 278/9/5 263/10/5 268/11/5 +f 280/9/6 272/10/6 282/11/6 +f 264/4/1 277/5/1 283/6/1 +f 284/9/3 274/10/3 285/11/3 +f 274/9/4 273/10/4 286/11/4 +f 280/4/1 279/5/1 287/6/1 +f 279/9/2 281/10/2 288/11/2 +f 281/9/3 282/10/3 289/11/3 +f 272/4/1 280/5/1 290/6/1 +f 282/9/3 284/10/3 291/11/3 +f 273/4/1 272/5/1 292/6/1 +f 285/9/3 286/10/3 261/11/3 +f 286/9/4 292/10/4 262/11/4 +f 287/4/1 288/5/1 266/6/1 +f 288/9/2 289/10/2 267/11/2 +f 289/9/3 291/10/3 269/11/3 +f 290/4/1 287/5/1 277/6/1 +f 285/13/44 261/14/44 293/15/44 +f 292/4/1 290/5/1 264/6/1 +f 294/16/3 293/17/3 295/18/3 +f 291/13/45 285/14/45 294/15/45 +f 261/13/46 275/14/46 296/15/46 +f 275/13/47 291/14/47 295/15/47 +f 250/5/4 226/8/4 297/5/4 +f 298/28/3 299/29/3 300/30/3 +f 300/28/4 301/29/4 302/30/4 +f 302/28/1 303/29/1 304/30/1 +f 304/28/2 305/29/2 298/30/2 +f 299/28/6 305/29/6 301/30/6 +f 304/28/5 298/29/5 302/30/5 +f 2/2/1 44/7/1 3/3/1 +f 5/2/2 20/7/2 6/3/2 +f 8/2/3 29/7/3 9/3/3 +f 11/2/4 26/7/4 12/3/4 +f 6/5/5 20/8/5 14/6/5 +f 16/2/6 2/7/6 1/3/6 +f 1/2/7 3/7/7 18/3/7 +f 19/2/3 14/7/3 20/3/3 +f 13/5/5 14/8/5 22/6/5 +f 15/2/6 1/7/6 17/3/6 +f 7/2/8 9/7/8 22/3/8 +f 25/2/1 46/7/1 26/3/1 +f 28/5/5 9/8/5 29/6/5 +f 30/2/6 25/7/6 11/3/6 +f 4/2/9 6/7/9 32/3/9 +f 33/2/4 27/7/4 29/3/4 +f 32/5/5 6/8/5 13/6/5 +f 5/2/6 4/7/6 35/3/6 +f 34/2/5 13/7/5 21/3/5 +f 41/3/6 24/1/6 35/7/6 +f 27/6/5 37/4/5 28/8/5 +f 7/2/6 51/7/6 33/3/6 +f 10/2/10 12/7/10 37/3/10 +f 31/2/6 16/7/6 15/3/6 +f 35/2/11 58/7/11 42/3/11 +f 10/3/6 39/1/6 30/7/6 +f 16/2/2 56/7/2 44/3/2 +f 44/5/5 56/8/5 45/6/5 +f 57/6/5 18/4/5 45/8/5 +f 46/5/5 54/8/5 12/6/5 +f 48/5/4 62/8/4 49/6/4 +f 15/2/12 47/7/12 50/3/12 +f 30/2/13 59/7/13 48/3/13 +f 51/2/14 53/7/14 52/3/14 +f 17/2/15 18/7/15 46/3/15 +f 9/6/5 28/4/5 22/8/5 +f 25/3/6 30/1/6 17/7/6 +f 24/2/16 22/7/16 14/3/16 +f 28/3/5 38/1/5 21/7/5 +f 24/2/6 41/7/6 51/3/6 +f 41/2/17 42/7/17 53/3/17 +f 18/5/5 57/8/5 54/6/5 +f 59/3/6 52/1/6 48/7/6 +f 23/2/18 48/7/18 47/3/18 +f 31/2/19 32/7/19 56/3/19 +f 34/6/5 45/4/5 32/8/5 +f 36/3/5 57/1/5 34/7/5 +f 54/5/5 38/8/5 37/6/5 +f 39/2/20 37/7/20 27/3/20 +f 40/3/6 35/1/6 31/7/6 +f 51/2/6 43/7/6 39/3/6 +f 55/3/6 42/1/6 50/7/6 +f 40/2/21 50/7/21 58/3/21 +f 43/2/22 52/7/22 59/3/22 +f 57/2/5 36/7/5 38/3/5 +f 42/2/6 55/7/6 52/3/6 +f 61/2/6 49/7/6 62/3/6 +f 50/5/23 61/8/23 60/6/23 +f 47/5/4 49/8/4 61/6/23 +f 55/5/23 60/8/23 62/6/4 +f 64/5/1 67/8/1 65/6/1 +f 66/5/2 69/8/2 67/6/2 +f 68/5/3 70/8/3 69/6/3 +f 63/5/4 65/8/4 70/6/4 +f 67/5/5 69/8/5 70/6/5 +f 66/5/6 64/8/6 63/6/6 +f 72/10/1 75/12/1 73/11/1 +f 74/10/2 93/12/2 75/11/2 +f 77/5/3 80/8/3 78/6/3 +f 79/10/4 86/12/4 80/11/4 +f 75/10/5 93/12/5 81/11/5 +f 94/11/6 82/9/6 84/12/6 +f 85/10/1 88/12/1 86/11/1 +f 76/5/3 78/8/3 81/6/3 +f 80/11/5 86/9/5 78/12/5 +f 90/10/6 92/12/6 91/11/6 +f 71/10/1 73/12/1 88/11/1 +f 73/10/5 81/12/5 78/11/5 +f 82/10/6 94/12/6 92/11/6 +f 87/5/3 81/8/3 93/6/3 +f 84/10/1 96/12/1 95/11/1 +f 83/10/2 102/12/2 96/11/2 +f 89/5/3 98/8/3 97/6/3 +f 91/10/4 99/12/4 98/11/4 +f 92/10/1 101/12/1 99/11/1 +f 90/5/3 97/8/3 100/6/3 +f 94/10/1 95/12/1 101/11/1 +f 82/5/3 100/8/3 102/6/3 +f 96/10/1 72/12/1 71/11/1 +f 102/10/2 74/12/2 72/11/2 +f 98/5/3 77/8/3 76/6/3 +f 99/10/4 79/12/4 77/11/4 +f 101/10/1 85/12/1 79/11/1 +f 97/5/3 76/8/3 87/6/3 +f 71/14/24 106/31/24 103/15/24 +f 100/5/3 87/8/3 74/6/3 +f 103/17/1 106/32/1 105/18/1 +f 95/14/25 103/31/25 104/15/25 +f 85/14/26 105/31/26 106/15/26 +f 101/14/27 104/31/27 105/15/27 +f 108/20/1 111/33/1 109/21/1 +f 110/20/2 113/33/2 111/21/2 +f 112/20/3 114/33/3 113/21/3 +f 107/20/4 109/33/4 114/21/4 +f 111/20/5 113/33/5 114/21/5 +f 110/20/6 108/33/6 107/21/6 +f 116/10/28 119/12/28 117/11/28 +f 118/10/29 142/12/29 119/11/29 +f 121/5/30 124/8/30 122/6/30 +f 123/10/31 147/12/31 124/11/31 +f 119/10/5 142/12/5 125/11/5 +f 127/10/6 129/12/6 128/11/6 +f 129/10/28 131/12/28 130/11/28 +f 127/23/29 137/34/29 131/24/29 +f 133/5/30 136/8/30 134/6/30 +f 135/10/31 138/12/31 136/11/31 +f 131/10/28 116/12/28 115/11/28 +f 137/10/29 118/12/29 116/11/29 +f 136/5/30 121/8/30 120/6/30 +f 138/10/31 123/12/31 121/11/31 +f 115/10/28 117/12/28 140/11/28 +f 141/5/30 125/8/30 142/6/30 +f 117/10/5 125/12/5 122/11/5 +f 126/10/6 128/12/6 143/11/6 +f 128/10/28 130/12/28 144/11/28 +f 126/5/30 146/8/30 137/6/30 +f 115/10/31 151/12/31 145/11/31 +f 146/5/30 141/8/30 118/6/30 +f 120/5/30 122/8/30 125/6/30 +f 132/5/30 134/8/30 146/6/30 +f 134/5/30 120/8/30 141/6/30 +f 139/10/28 140/12/28 147/11/28 +f 140/10/5 122/12/5 124/11/5 +f 132/10/6 143/12/6 135/11/6 +f 143/10/28 144/12/28 138/11/28 +f 144/10/28 139/12/28 123/11/28 +f 149/5/31 152/8/31 150/6/31 +f 130/10/5 145/12/5 149/11/5 +f 139/10/6 148/12/6 151/11/6 +f 144/10/29 149/12/29 148/11/29 +f 153/26/28 154/35/28 150/27/28 +f 151/5/29 154/8/29 153/6/29 +f 145/5/6 153/8/6 152/6/6 +f 148/5/5 150/8/5 154/6/5 +f 156/5/1 159/8/1 157/6/1 +f 158/5/2 161/8/2 159/6/2 +f 160/5/3 162/8/3 161/6/3 +f 155/5/4 157/8/4 162/6/4 +f 159/5/5 161/8/5 162/6/5 +f 158/5/6 156/8/6 155/6/6 +f 164/2/1 206/7/1 165/3/1 +f 167/2/4 182/7/4 168/3/4 +f 170/2/3 191/7/3 171/3/3 +f 173/2/2 188/7/2 174/3/2 +f 168/5/6 182/8/6 176/6/6 +f 178/2/5 164/7/5 163/3/5 +f 163/2/15 165/7/15 180/3/15 +f 181/2/3 176/7/3 182/3/3 +f 175/5/6 176/8/6 184/6/6 +f 177/2/5 163/7/5 179/3/5 +f 169/2/16 171/7/16 184/3/16 +f 187/2/1 208/7/1 188/3/1 +f 190/5/6 171/8/6 191/6/6 +f 192/2/5 187/7/5 173/3/5 +f 166/2/32 168/7/32 194/3/32 +f 195/2/2 189/7/2 191/3/2 +f 194/5/6 168/8/6 175/6/6 +f 167/2/5 166/7/5 197/3/5 +f 196/2/6 175/7/6 183/3/6 +f 203/3/5 186/1/5 197/7/5 +f 189/6/6 199/4/6 190/8/6 +f 169/2/5 213/7/5 195/3/5 +f 172/2/33 174/7/33 199/3/33 +f 193/2/5 178/7/5 177/3/5 +f 197/2/17 220/7/17 204/3/17 +f 172/3/5 201/1/5 192/7/5 +f 178/2/4 218/7/4 206/3/4 +f 206/5/6 218/8/6 207/6/6 +f 219/6/6 180/4/6 207/8/6 +f 208/5/6 216/8/6 174/6/6 +f 210/5/4 224/8/4 211/6/4 +f 177/2/34 209/7/34 212/3/34 +f 192/2/18 221/7/18 210/3/18 +f 213/2/35 215/7/35 214/3/35 +f 179/2/7 180/7/7 208/3/7 +f 171/6/6 190/4/6 184/8/6 +f 187/3/5 192/1/5 179/7/5 +f 186/2/8 184/7/8 176/3/8 +f 190/3/6 200/1/6 183/7/6 +f 186/2/5 203/7/5 213/3/5 +f 203/2/11 204/7/11 215/3/11 +f 180/5/6 219/8/6 216/6/6 +f 221/3/5 214/1/5 210/7/5 +f 185/2/13 210/7/13 209/3/13 +f 193/2/36 194/7/36 218/3/36 +f 196/6/6 207/4/6 194/8/6 +f 198/6/6 219/4/6 196/8/6 +f 216/5/6 200/8/6 199/6/6 +f 201/2/37 199/7/37 189/3/37 +f 202/3/5 197/1/5 193/7/5 +f 213/2/5 205/7/5 201/3/5 +f 217/3/5 204/1/5 212/7/5 +f 202/2/38 212/7/38 220/3/38 +f 205/2/39 214/7/39 221/3/39 +f 219/2/6 198/7/6 200/3/6 +f 204/2/5 217/7/5 214/3/5 +f 223/2/5 211/7/5 224/3/5 +f 212/5/23 223/8/23 222/6/23 +f 209/5/4 211/8/4 223/6/23 +f 217/5/23 222/8/23 224/6/4 +f 226/10/4 229/12/4 227/11/4 +f 228/10/1 247/12/1 229/11/1 +f 231/5/2 234/8/2 232/6/2 +f 233/10/3 240/12/3 234/11/3 +f 229/10/5 247/12/5 235/11/5 +f 248/11/6 236/9/6 238/12/6 +f 239/10/4 242/12/4 240/11/4 +f 230/5/2 232/8/2 235/6/2 +f 234/11/5 240/9/5 232/12/5 +f 244/10/6 246/12/6 245/11/6 +f 225/10/4 227/12/4 242/11/4 +f 227/10/5 235/12/5 232/11/5 +f 236/10/6 248/12/6 246/11/6 +f 241/5/2 235/8/2 247/6/2 +f 238/10/4 250/12/4 249/11/4 +f 237/10/1 256/12/1 250/11/1 +f 243/5/2 252/8/2 251/6/2 +f 245/10/3 253/12/3 252/11/3 +f 246/10/4 255/12/4 253/11/4 +f 244/5/2 251/8/2 254/6/2 +f 248/10/4 249/12/4 255/11/4 +f 236/5/2 254/8/2 256/6/2 +f 250/10/4 226/12/4 225/11/4 +f 256/10/1 228/12/1 226/11/1 +f 252/5/2 231/8/2 230/6/2 +f 253/10/3 233/12/3 231/11/3 +f 255/10/4 239/12/4 233/11/4 +f 251/5/2 230/8/2 241/6/2 +f 225/14/40 260/31/40 257/15/40 +f 254/5/2 241/8/2 228/6/2 +f 257/17/4 260/32/4 259/18/4 +f 249/14/41 257/31/41 258/15/41 +f 239/14/42 259/31/42 260/15/42 +f 255/14/43 258/31/43 259/15/43 +f 262/10/3 265/12/3 263/11/3 +f 264/10/4 283/12/4 265/11/4 +f 267/5/1 270/8/1 268/6/1 +f 269/10/2 276/12/2 270/11/2 +f 265/10/5 283/12/5 271/11/5 +f 284/11/6 272/9/6 274/12/6 +f 275/10/3 278/12/3 276/11/3 +f 266/5/1 268/8/1 271/6/1 +f 270/11/5 276/9/5 268/12/5 +f 280/10/6 282/12/6 281/11/6 +f 261/10/3 263/12/3 278/11/3 +f 263/10/5 271/12/5 268/11/5 +f 272/10/6 284/12/6 282/11/6 +f 277/5/1 271/8/1 283/6/1 +f 274/10/3 286/12/3 285/11/3 +f 273/10/4 292/12/4 286/11/4 +f 279/5/1 288/8/1 287/6/1 +f 281/10/2 289/12/2 288/11/2 +f 282/10/3 291/12/3 289/11/3 +f 280/5/1 287/8/1 290/6/1 +f 284/10/3 285/12/3 291/11/3 +f 272/5/1 290/8/1 292/6/1 +f 286/10/3 262/12/3 261/11/3 +f 292/10/4 264/12/4 262/11/4 +f 288/5/1 267/8/1 266/6/1 +f 289/10/2 269/12/2 267/11/2 +f 291/10/3 275/12/3 269/11/3 +f 287/5/1 266/8/1 277/6/1 +f 261/14/44 296/31/44 293/15/44 +f 290/5/1 277/8/1 264/6/1 +f 293/17/3 296/32/3 295/18/3 +f 285/14/45 293/31/45 294/15/45 +f 275/14/46 295/31/46 296/15/46 +f 291/14/47 294/31/47 295/15/47 +f 226/8/4 306/8/4 297/5/4 +f 299/29/3 301/36/3 300/30/3 +f 301/29/4 303/36/4 302/30/4 +f 303/29/1 305/36/1 304/30/1 +f 305/29/2 299/36/2 298/30/2 +f 305/29/6 303/36/6 301/30/6 +f 298/29/5 300/36/5 302/30/5 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.mtl new file mode 100644 index 00000000..0a34c9e2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.mtl @@ -0,0 +1,11 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/pod_flame + +newmtl None_spacePod.png +Ka 0.000000 0.000000 0.000000 +Kd 0.800000 0.800000 0.800000 +d 1.000000 +map_Kd galacticraftplanets:blocks/space_pod diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.obj new file mode 100644 index 00000000..fb1eb0c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/pod_flame.obj @@ -0,0 +1,3590 @@ +# Blender v2.78 (sub 0) OBJ File: 'podFlame.blend' +# www.blender.org +mtllib pod_flame.mtl +o Flame_Sphere +v 0.308348 0.922904 -1.550171 +v 0.302423 0.685997 -1.520385 +v 0.284877 0.458195 -1.432171 +v 0.256382 0.248252 -1.288920 +v 0.218035 0.064235 -1.096136 +v 0.171309 -0.086784 -0.861229 +v 0.118000 -0.199002 -0.593224 +v 0.060156 -0.268105 -0.302423 +v 0.604847 0.922904 -1.460229 +v 0.593225 0.685997 -1.432171 +v 0.558806 0.458195 -1.349076 +v 0.502912 0.248252 -1.214136 +v 0.427691 0.064235 -1.032538 +v 0.336035 -0.086784 -0.811260 +v 0.231465 -0.199002 -0.558805 +v 0.118000 -0.268105 -0.284876 +v 0.878102 0.922904 -1.314171 +v 0.861229 0.685997 -1.288920 +v 0.811260 0.458195 -1.214136 +v 0.730115 0.248252 -1.092693 +v 0.620912 0.064235 -0.929259 +v 0.487847 -0.086784 -0.730114 +v 0.336035 -0.199002 -0.502911 +v 0.171309 -0.268105 -0.256382 +v 1.117611 0.922904 -1.117611 +v 1.096137 0.685997 -1.096136 +v 1.032538 0.458195 -1.032538 +v 0.929260 0.248252 -0.929259 +v 0.790271 0.064235 -0.790270 +v 0.620912 -0.086784 -0.620911 +v 0.427691 -0.199002 -0.427691 +v 0.218035 -0.268105 -0.218035 +v 1.314172 0.922904 -0.878101 +v 1.288920 0.685997 -0.861228 +v 1.214136 0.458195 -0.811260 +v 1.092694 0.248252 -0.730114 +v 0.929260 0.064235 -0.620911 +v 0.730115 -0.086784 -0.487847 +v 0.502912 -0.199002 -0.336035 +v 0.256382 -0.268105 -0.171309 +v 0.000000 -0.291438 0.000001 +v 1.460229 0.922904 -0.604846 +v 1.432171 0.685997 -0.593224 +v 1.349076 0.458195 -0.558805 +v 1.214136 0.248252 -0.502911 +v 1.032538 0.064235 -0.427691 +v 0.811260 -0.086784 -0.336034 +v 0.558806 -0.199002 -0.231464 +v 0.284877 -0.268105 -0.117999 +v 1.550171 0.922904 -0.308348 +v 1.520385 0.685997 -0.302423 +v 1.432171 0.458195 -0.284876 +v 1.288920 0.248252 -0.256382 +v 1.096137 0.064235 -0.218035 +v 0.861229 -0.086784 -0.171309 +v 0.593225 -0.199002 -0.117999 +v 0.302423 -0.268105 -0.060155 +v 1.580541 0.922904 0.000001 +v 1.550171 0.685997 0.000001 +v 1.460229 0.458195 0.000000 +v 1.314172 0.248252 0.000001 +v 1.117611 0.064235 0.000001 +v 0.878101 -0.086784 0.000001 +v 0.604847 -0.199002 0.000000 +v 0.308348 -0.268105 0.000000 +v 1.550171 0.922904 0.308349 +v 1.520385 0.685997 0.302424 +v 1.432171 0.458195 0.284877 +v 1.288920 0.248252 0.256383 +v 1.096137 0.064235 0.218036 +v 0.861229 -0.086784 0.171310 +v 0.593225 -0.199002 0.118000 +v 0.302423 -0.268105 0.060156 +v 1.460229 0.922904 0.604847 +v 1.432171 0.685997 0.593225 +v 1.349076 0.458195 0.558806 +v 1.214136 0.248252 0.502912 +v 1.032538 0.064235 0.427692 +v 0.811260 -0.086784 0.336035 +v 0.558806 -0.199002 0.231465 +v 0.284877 -0.268105 0.118000 +v 1.314172 0.922904 0.878102 +v 1.288920 0.685997 0.861229 +v 1.214136 0.458195 0.811260 +v 1.092694 0.248252 0.730115 +v 0.929260 0.064235 0.620912 +v 0.730115 -0.086784 0.487848 +v 0.502912 -0.199002 0.336035 +v 0.256382 -0.268105 0.171310 +v 1.117611 0.922904 1.117612 +v 1.096136 0.685997 1.096137 +v 1.032538 0.458195 1.032538 +v 0.929259 0.248252 0.929260 +v 0.790270 0.064235 0.790271 +v 0.620911 -0.086784 0.620912 +v 0.427691 -0.199002 0.427692 +v 0.218035 -0.268105 0.218036 +v 0.878101 0.922904 1.314172 +v 0.861229 0.685997 1.288920 +v 0.811260 0.458195 1.214137 +v 0.730114 0.248252 1.092694 +v 0.620911 0.064235 0.929260 +v 0.487847 -0.086784 0.730115 +v 0.336035 -0.199002 0.502912 +v 0.171309 -0.268105 0.256383 +v 0.604847 0.922904 1.460230 +v 0.593225 0.685997 1.432171 +v 0.558806 0.458195 1.349076 +v 0.502912 0.248252 1.214137 +v 0.427691 0.064235 1.032538 +v 0.336035 -0.086784 0.811260 +v 0.231465 -0.199002 0.558806 +v 0.118000 -0.268105 0.284877 +v 0.308348 0.922904 1.550172 +v 0.302423 0.685997 1.520385 +v 0.284877 0.458195 1.432172 +v 0.256382 0.248252 1.288920 +v 0.218035 0.064235 1.096137 +v 0.171309 -0.086784 0.861229 +v 0.118000 -0.199002 0.593225 +v 0.060156 -0.268105 0.302424 +v -0.000000 0.922904 1.580541 +v -0.000000 0.685997 1.550171 +v 0.000000 0.458195 1.460230 +v -0.000000 0.248252 1.314172 +v -0.000000 0.064235 1.117611 +v -0.000000 -0.086784 0.878102 +v 0.000000 -0.199002 0.604847 +v 0.000000 -0.268105 0.308349 +v -0.308348 0.922904 1.550171 +v -0.302423 0.685997 1.520385 +v -0.284876 0.458195 1.432172 +v -0.256382 0.248252 1.288920 +v -0.218035 0.064235 1.096137 +v -0.171309 -0.086784 0.861229 +v -0.118000 -0.199002 0.593225 +v -0.060156 -0.268105 0.302424 +v -0.604847 0.922904 1.460230 +v -0.593225 0.685997 1.432171 +v -0.558805 0.458195 1.349076 +v -0.502912 0.248252 1.214136 +v -0.427691 0.064235 1.032538 +v -0.336035 -0.086784 0.811260 +v -0.231465 -0.199002 0.558806 +v -0.118000 -0.268105 0.284877 +v -0.878101 0.922904 1.314172 +v -0.861229 0.685997 1.288920 +v -0.811260 0.458195 1.214137 +v -0.730114 0.248252 1.092694 +v -0.620911 0.064235 0.929260 +v -0.487847 -0.086784 0.730115 +v -0.336035 -0.199002 0.502912 +v -0.171309 -0.268105 0.256383 +v -1.117611 0.922904 1.117611 +v -1.096136 0.685997 1.096136 +v -1.032538 0.458195 1.032538 +v -0.929259 0.248252 0.929259 +v -0.790270 0.064235 0.790271 +v -0.620911 -0.086784 0.620912 +v -0.427691 -0.199002 0.427692 +v -0.218035 -0.268105 0.218036 +v -1.314172 0.922904 0.878101 +v -1.288920 0.685997 0.861229 +v -1.214136 0.458195 0.811260 +v -1.092693 0.248252 0.730115 +v -0.929259 0.064235 0.620912 +v -0.730114 -0.086784 0.487847 +v -0.502912 -0.199002 0.336035 +v -0.256382 -0.268105 0.171310 +v -1.460229 0.922904 0.604847 +v -1.432171 0.685997 0.593225 +v -1.349076 0.458195 0.558806 +v -1.214136 0.248252 0.502912 +v -1.032538 0.064235 0.427692 +v -0.811260 -0.086784 0.336035 +v -0.558805 -0.199002 0.231465 +v -0.284876 -0.268105 0.118000 +v -1.550171 0.922904 0.308348 +v -1.520384 0.685997 0.302423 +v -1.432171 0.458195 0.284877 +v -1.288919 0.248252 0.256382 +v -1.096136 0.064235 0.218035 +v -0.861229 -0.086784 0.171309 +v -0.593224 -0.199002 0.118000 +v -0.302423 -0.268105 0.060156 +v -1.580540 0.922904 0.000000 +v -1.550170 0.685997 0.000000 +v -1.460229 0.458195 0.000001 +v -1.314171 0.248252 0.000000 +v -1.117611 0.064235 0.000000 +v -0.878101 -0.086784 0.000000 +v -0.604846 -0.199002 0.000000 +v -0.308348 -0.268105 0.000000 +v -1.550170 0.922904 -0.308348 +v -1.520384 0.685997 -0.302423 +v -1.432171 0.458195 -0.284876 +v -1.288919 0.248252 -0.256382 +v -1.096136 0.064235 -0.218035 +v -0.861229 -0.086784 -0.171309 +v -0.593224 -0.199002 -0.117999 +v -0.302423 -0.268105 -0.060155 +v -1.460229 0.922904 -0.604846 +v -1.432170 0.685997 -0.593224 +v -1.349076 0.458195 -0.558805 +v -1.214135 0.248252 -0.502911 +v -1.032538 0.064235 -0.427691 +v -0.811259 -0.086784 -0.336034 +v -0.558805 -0.199002 -0.231464 +v -0.284876 -0.268105 -0.117999 +v -1.314171 0.922904 -0.878101 +v -1.288919 0.685997 -0.861228 +v -1.214136 0.458195 -0.811259 +v -1.092693 0.248252 -0.730114 +v -0.929259 0.064235 -0.620911 +v -0.730114 -0.086784 -0.487846 +v -0.502911 -0.199002 -0.336034 +v -0.256382 -0.268105 -0.171308 +v -0.003349 3.695691 -2.069118 +v -0.406524 3.692196 -2.029409 +v -0.794205 3.692196 -1.911808 +v -1.120816 3.692196 -1.696060 +v -1.117610 0.922904 -1.117610 +v -1.096135 0.685997 -1.096135 +v -1.032538 0.458195 -1.032537 +v -0.929259 0.248252 -0.929259 +v -0.790270 0.064235 -0.790270 +v -0.620911 -0.086784 -0.620911 +v -0.427691 -0.199002 -0.427691 +v -0.218035 -0.268105 -0.218034 +v -1.530209 3.692196 -1.495382 +v -1.696897 3.692196 -1.119979 +v -1.912646 3.692196 -0.793369 +v -2.030248 3.692196 -0.405687 +v -2.069957 3.692196 -0.002512 +v -2.030248 3.692196 0.400663 +v -1.912646 3.692196 0.788344 +v -0.878101 0.922904 -1.314171 +v -0.861228 0.685997 -1.288919 +v -0.811260 0.458195 -1.214135 +v -0.730114 0.248252 -1.092693 +v -0.620911 0.064235 -0.929259 +v -0.487847 -0.086784 -0.730114 +v -0.336035 -0.199002 -0.502911 +v -0.171309 -0.268105 -0.256382 +v -1.696898 3.692196 1.200097 +v -1.513215 3.692196 1.524347 +v -1.120817 3.692196 1.776179 +v -0.794207 3.692196 1.906784 +v -0.406525 3.692196 2.024386 +v -0.003350 3.692196 2.064095 +v 0.399825 3.692196 2.024386 +v -0.604846 0.922904 -1.460228 +v -0.593224 0.685997 -1.432170 +v -0.558805 0.458195 -1.349075 +v -0.502911 0.248252 -1.214135 +v -0.427691 0.064235 -1.032537 +v -0.336035 -0.086784 -0.811259 +v -0.231465 -0.199002 -0.558805 +v -0.118000 -0.268105 -0.284876 +v 0.787506 3.692196 1.906784 +v 1.151832 3.692196 1.727132 +v 1.506514 3.692196 1.490358 +v 1.761164 3.692196 1.117799 +v 1.905946 3.692196 0.788345 +v 2.023548 3.692196 0.400663 +v 2.063258 3.692196 -0.002512 +v -0.308348 0.922904 -1.550170 +v -0.302423 0.685997 -1.520383 +v -0.284876 0.458195 -1.432170 +v -0.256382 0.248252 -1.288919 +v -0.218035 0.064235 -1.096136 +v -0.171309 -0.086784 -0.861228 +v -0.118000 -0.199002 -0.593224 +v -0.060156 -0.268105 -0.302423 +v 2.023548 3.692196 -0.405687 +v 1.905946 3.692196 -0.793368 +v 1.775341 3.692196 -1.119979 +v 1.523510 3.692196 -1.529371 +v 1.199260 3.692196 -1.696060 +v 0.787507 3.692196 -1.911809 +v 0.399825 3.692196 -2.029411 +v 0.000000 0.922904 -1.580539 +v 0.000000 0.685997 -1.550169 +v 0.000000 0.458195 -1.460228 +v 0.000000 0.248252 -1.314170 +v 0.000000 0.064235 -1.117610 +v 0.000000 -0.086784 -0.878100 +v 0.000000 -0.199002 -0.604846 +v 0.000000 -0.268105 -0.308348 +v -0.008589 8.102575 -3.315125 +v -0.654081 8.096979 -3.251549 +v -1.274767 8.096979 -3.063267 +v -1.797677 8.096979 -2.717849 +v -2.453124 8.096979 -2.396560 +v -2.719996 8.096979 -1.795530 +v -3.065414 8.096979 -1.272621 +v -3.253698 8.096979 -0.651935 +v -3.317273 8.096979 -0.006442 +v -3.253698 8.096979 0.639050 +v -3.065415 8.096979 1.259736 +v -2.719998 8.096979 1.918963 +v -2.425917 8.096979 2.438093 +v -1.797679 8.096979 2.841282 +v -1.274769 8.096979 3.050384 +v -0.654082 8.096979 3.238667 +v -0.008590 8.096979 3.302243 +v 0.636902 8.096979 3.238667 +v 1.257589 8.096979 3.050385 +v 1.840883 8.096979 2.762756 +v 2.408737 8.096979 2.383677 +v 2.816437 8.096979 1.787202 +v 3.048236 8.096979 1.259737 +v 3.236520 8.096979 0.639051 +v 3.300095 8.096979 -0.006442 +v 3.236520 8.096979 -0.651934 +v 3.048237 8.096979 -1.272621 +v 2.839135 8.096979 -1.795530 +v 2.435946 8.096979 -2.450977 +v 1.916816 8.096979 -2.717850 +v 1.257589 8.096979 -3.063268 +v 0.636903 8.096979 -3.251552 +vt 0.8510 0.0230 +vt 0.8380 0.0110 +vt 0.8581 0.0113 +vt 0.9031 0.0052 +vt 0.8421 0.1722 +vt 0.8164 0.1407 +vt 0.8429 0.1425 +vt 0.8176 0.1116 +vt 0.8438 0.1134 +vt 0.8190 0.0843 +vt 0.8448 0.0858 +vt 0.8208 0.0597 +vt 0.8461 0.0610 +vt 0.8234 0.0387 +vt 0.8479 0.0398 +vt 0.8277 0.0223 +vt 0.8042 0.0214 +vt 0.8176 0.0105 +vt 0.8152 0.1703 +vt 0.7899 0.1383 +vt 0.7914 0.1094 +vt 0.7932 0.0823 +vt 0.7954 0.0580 +vt 0.7986 0.0374 +vt 0.7651 0.1067 +vt 0.7672 0.0799 +vt 0.7698 0.0559 +vt 0.7736 0.0358 +vt 0.7803 0.0203 +vt 0.7968 0.0099 +vt 0.7884 0.1679 +vt 0.7633 0.1355 +vt 0.7753 0.0093 +vt 0.7617 0.1650 +vt 0.7368 0.1322 +vt 0.7388 0.1037 +vt 0.7410 0.0771 +vt 0.7440 0.0536 +vt 0.7483 0.0340 +vt 0.7559 0.0190 +vt 0.7123 0.1005 +vt 0.7147 0.0742 +vt 0.7179 0.0511 +vt 0.7225 0.0320 +vt 0.7309 0.0177 +vt 0.7530 0.0086 +vt 0.7350 0.1617 +vt 0.7102 0.1288 +vt 0.7297 0.0079 +vt 0.6816 0.1546 +vt 0.6835 0.1253 +vt 0.6857 0.0971 +vt 0.6881 0.0712 +vt 0.6914 0.0486 +vt 0.6963 0.0300 +vt 0.7052 0.0163 +vt 0.6646 0.0460 +vt 0.6695 0.0280 +vt 0.6787 0.0149 +vt 0.7050 0.0072 +vt 0.6568 0.1218 +vt 0.6589 0.0938 +vt 0.6613 0.0683 +vt 0.6786 0.0066 +vt 0.6282 0.1476 +vt 0.6300 0.1184 +vt 0.6319 0.0907 +vt 0.6342 0.0654 +vt 0.6373 0.0436 +vt 0.6421 0.0261 +vt 0.6511 0.0136 +vt 0.6097 0.0415 +vt 0.6140 0.0244 +vt 0.6225 0.0124 +vt 0.6499 0.0060 +vt 0.6030 0.1154 +vt 0.6048 0.0878 +vt 0.6069 0.0629 +vt 0.6185 0.0054 +vt 0.5747 0.1419 +vt 0.5760 0.1128 +vt 0.5775 0.0854 +vt 0.5792 0.0607 +vt 0.5816 0.0396 +vt 0.5854 0.0230 +vt 0.5929 0.0114 +vt 0.5532 0.0381 +vt 0.5562 0.0218 +vt 0.5621 0.0106 +vt 0.5839 0.0050 +vt 0.5489 0.1107 +vt 0.5500 0.0834 +vt 0.5514 0.0589 +vt 0.5224 0.0820 +vt 0.5233 0.0576 +vt 0.5245 0.0370 +vt 0.5265 0.0209 +vt 0.5305 0.0100 +vt 0.5459 0.0047 +vt 0.5478 0.1397 +vt 0.5216 0.1092 +vt 0.4982 0.0097 +vt 0.5052 0.0046 +vt 0.5210 0.1382 +vt 0.4944 0.1084 +vt 0.4947 0.0812 +vt 0.4951 0.0569 +vt 0.4956 0.0364 +vt 0.4965 0.0204 +vt 0.4669 0.0810 +vt 0.4668 0.0567 +vt 0.4666 0.0363 +vt 0.4663 0.0203 +vt 0.4656 0.0096 +vt 0.4631 0.0045 +vt 0.4941 0.1373 +vt 0.4671 0.1082 +vt 0.4332 0.0098 +vt 0.4215 0.0046 +vt 0.0457 0.0052 +vt 0.4672 0.1372 +vt 0.4398 0.1087 +vt 0.4392 0.0815 +vt 0.4385 0.0572 +vt 0.4376 0.0366 +vt 0.4362 0.0206 +vt 0.4116 0.0827 +vt 0.4104 0.0582 +vt 0.4088 0.0375 +vt 0.4063 0.0213 +vt 0.4012 0.0103 +vt 0.3821 0.0049 +vt 0.4403 0.1377 +vt 0.4125 0.1099 +vt 0.3459 0.0052 +vt 0.4134 0.1389 +vt 0.3853 0.1118 +vt 0.3840 0.0844 +vt 0.3824 0.0598 +vt 0.3803 0.0388 +vt 0.3769 0.0224 +vt 0.3700 0.0110 +vt 0.3566 0.0866 +vt 0.3547 0.0618 +vt 0.3520 0.0405 +vt 0.3479 0.0237 +vt 0.3398 0.0119 +vt 0.3130 0.0057 +vt 0.3865 0.1408 +vt 0.3582 0.1141 +vt 0.2831 0.0063 +vt 0.3330 0.1461 +vt 0.3313 0.1170 +vt 0.3294 0.0893 +vt 0.3272 0.0642 +vt 0.3242 0.0426 +vt 0.3196 0.0253 +vt 0.3108 0.0131 +vt 0.2968 0.0449 +vt 0.2919 0.0271 +vt 0.2827 0.0143 +vt 0.2557 0.0069 +vt 0.3044 0.1202 +vt 0.3024 0.0923 +vt 0.3000 0.0669 +vt 0.2303 0.0076 +vt 0.3062 0.1494 +vt 0.2776 0.1236 +vt 0.2755 0.0956 +vt 0.2730 0.0698 +vt 0.2697 0.0474 +vt 0.2648 0.0291 +vt 0.2557 0.0157 +vt 0.2383 0.0311 +vt 0.2296 0.0170 +vt 0.2064 0.0083 +vt 0.2529 0.1565 +vt 0.2509 0.1272 +vt 0.2488 0.0989 +vt 0.2463 0.0728 +vt 0.2431 0.0499 +vt 0.2243 0.1307 +vt 0.2223 0.1022 +vt 0.2199 0.0758 +vt 0.2168 0.0525 +vt 0.2124 0.0331 +vt 0.2043 0.0184 +vt 0.1837 0.0090 +vt 0.1868 0.0350 +vt 0.1797 0.0197 +vt 0.1618 0.0097 +vt 0.1995 0.1635 +vt 0.1977 0.1340 +vt 0.1959 0.1053 +vt 0.1937 0.0786 +vt 0.1909 0.0549 +vt 0.1695 0.1082 +vt 0.1676 0.0812 +vt 0.1652 0.0570 +vt 0.1617 0.0367 +vt 0.1556 0.0209 +vt 0.1407 0.0103 +vt 0.1727 0.1666 +vt 0.1712 0.1370 +vt 0.1319 0.0219 +vt 0.1201 0.0108 +vt 0.1460 0.1692 +vt 0.1447 0.1396 +vt 0.1433 0.1107 +vt 0.1417 0.0834 +vt 0.1397 0.0589 +vt 0.1368 0.0382 +vt 0.1171 0.1126 +vt 0.1159 0.0852 +vt 0.1144 0.0604 +vt 0.1122 0.0393 +vt 0.1085 0.0227 +vt 0.0999 0.0112 +vt 0.1191 0.1714 +vt 0.1181 0.1417 +vt 0.0854 0.0233 +vt 0.0799 0.0115 +vt 0.0916 0.1432 +vt 0.0909 0.1141 +vt 0.0902 0.0865 +vt 0.0892 0.0615 +vt 0.0878 0.0402 +vt 0.0648 0.1149 +vt 0.0645 0.0872 +vt 0.0923 0.1729 +vt 0.0693 0.5806 +vt 0.0654 0.1738 +vt 0.0640 0.0621 +vt 0.6783 0.5649 +vt 0.7083 0.1582 +vt 0.0634 0.0407 +vt 0.7660 0.5750 +vt 0.0624 0.0236 +vt 0.4908 0.5444 +vt 0.0601 0.0117 +vt 0.2528 0.5672 +vt 0.2253 0.5706 +vt 0.4457 0.5449 +vt 0.4231 0.5461 +vt 0.0651 0.1441 +vt 0.1368 0.5782 +vt 0.3771 0.5504 +vt 0.3566 0.5527 +vt 0.9199 0.0236 +vt 0.8978 0.0117 +vt 0.9175 0.0117 +vt 0.5390 0.5469 +vt 0.8609 0.5805 +vt 0.8282 0.5796 +vt 0.9225 0.1441 +vt 0.8959 0.1739 +vt 0.8960 0.1443 +vt 0.7327 0.5717 +vt 0.8961 0.1150 +vt 0.9222 0.1149 +vt 0.6549 0.1510 +vt 0.6062 0.5548 +vt 0.9219 0.0872 +vt 0.8962 0.0873 +vt 0.2796 0.1529 +vt 0.2793 0.5637 +vt 0.8964 0.0622 +vt 0.9215 0.0621 +vt 0.4683 0.5443 +vt 0.8966 0.0408 +vt 0.9209 0.0407 +vt 0.1966 0.5737 +vt 0.8969 0.0237 +vt 0.5825 0.5517 +vt 0.6015 0.1445 +vt 0.9267 0.5806 +vt 0.8942 0.5811 +vt 0.8712 0.0619 +vt 0.6557 0.5617 +vt 0.8723 0.0405 +vt 0.4002 0.5480 +vt 0.8740 0.0235 +vt 0.1047 0.5805 +vt 0.8780 0.0116 +vt 0.3294 0.5562 +vt 0.5142 0.5449 +vt 0.8690 0.1734 +vt 0.8694 0.1437 +vt 0.2262 0.1601 +vt 0.8700 0.1145 +vt 0.8705 0.0869 +vt 0.6306 0.5582 +vt 0.7965 0.5774 +vt 0.7098 0.5691 +vt 0.5591 0.5490 +vt 0.1667 0.5764 +vt 0.3597 0.1432 +vt 0.3083 0.5595 +vt 0.4048 0.9721 +vt 0.3898 0.9734 +vt 0.6041 0.9788 +vt 0.7192 0.9882 +vt 0.2945 0.9842 +vt 0.2712 0.9860 +vt 0.5209 0.9700 +vt 0.5033 0.9688 +vt 0.4213 0.9706 +vt 0.6213 0.9807 +vt 0.8098 0.9901 +vt 0.7573 0.9895 +vt 0.3154 0.9821 +vt 0.5352 0.9712 +vt 0.4377 0.9695 +vt 0.6620 0.9848 +vt 0.6466 0.9833 +vt 0.3348 0.9800 +vt 0.9594 0.9901 +vt 0.8814 0.9904 +vt 0.4539 0.9688 +vt 0.6896 0.9868 +vt 0.5519 0.9728 +vt 0.1019 0.9901 +vt 0.4701 0.9684 +vt 0.3555 0.9775 +vt 0.5688 0.9747 +vt 0.2144 0.9887 +vt 0.1632 0.9901 +vt 0.3696 0.9755 +vt 0.5862 0.9767 +vt 0.2440 0.9876 +vt 0.4863 0.9685 +vt 0.9228 0.1738 +vn 0.0223 -0.9737 -0.2269 +vn 0.0074 -0.9971 -0.0755 +vn 0.0972 -0.1266 -0.9872 +vn 0.0912 -0.3657 -0.9262 +vn 0.0806 -0.5692 -0.8182 +vn 0.0672 -0.7284 -0.6819 +vn 0.0525 -0.8447 -0.5326 +vn 0.0374 -0.9244 -0.3796 +vn 0.1107 -0.9244 -0.3650 +vn 0.0662 -0.9737 -0.2182 +vn 0.0220 -0.9971 -0.0726 +vn 0.2880 -0.1265 -0.9492 +vn 0.2702 -0.3657 -0.8907 +vn 0.2387 -0.5692 -0.7868 +vn 0.1989 -0.7284 -0.6557 +vn 0.1554 -0.8447 -0.5122 +vn 0.3876 -0.5692 -0.7251 +vn 0.3230 -0.7284 -0.6043 +vn 0.2523 -0.8447 -0.4720 +vn 0.1798 -0.9244 -0.3364 +vn 0.1075 -0.9737 -0.2011 +vn 0.0357 -0.9971 -0.0669 +vn 0.4676 -0.1266 -0.8748 +vn 0.4387 -0.3657 -0.8208 +vn 0.1447 -0.9737 -0.1763 +vn 0.0481 -0.9971 -0.0586 +vn 0.6293 -0.1266 -0.7668 +vn 0.5904 -0.3657 -0.7195 +vn 0.5216 -0.5692 -0.6356 +vn 0.4347 -0.7284 -0.5297 +vn 0.3395 -0.8447 -0.4137 +vn 0.2420 -0.9244 -0.2949 +vn 0.6356 -0.5692 -0.5216 +vn 0.5297 -0.7284 -0.4347 +vn 0.4137 -0.8447 -0.3395 +vn 0.2949 -0.9244 -0.2420 +vn 0.1763 -0.9737 -0.1447 +vn 0.0586 -0.9971 -0.0481 +vn 0.7668 -0.1265 -0.6293 +vn 0.7195 -0.3657 -0.5904 +vn 0.2011 -0.9737 -0.1075 +vn 0.0669 -0.9971 -0.0357 +vn 0.8748 -0.1266 -0.4676 +vn 0.8208 -0.3657 -0.4387 +vn 0.7251 -0.5692 -0.3876 +vn 0.6043 -0.7284 -0.3230 +vn 0.4720 -0.8447 -0.2523 +vn 0.3364 -0.9244 -0.1798 +vn 0.6557 -0.7284 -0.1989 +vn 0.5122 -0.8447 -0.1554 +vn 0.3650 -0.9244 -0.1107 +vn 0.2182 -0.9737 -0.0662 +vn 0.0726 -0.9971 -0.0220 +vn 0.9492 -0.1265 -0.2880 +vn 0.8907 -0.3657 -0.2702 +vn 0.7868 -0.5692 -0.2387 +vn 0.0755 -0.9971 -0.0074 +vn 0.9872 -0.1266 -0.0972 +vn 0.9262 -0.3657 -0.0912 +vn 0.8182 -0.5692 -0.0806 +vn 0.6819 -0.7284 -0.0672 +vn 0.5326 -0.8447 -0.0525 +vn 0.3796 -0.9244 -0.0374 +vn 0.2269 -0.9737 -0.0224 +vn 0.6819 -0.7284 0.0672 +vn 0.5326 -0.8447 0.0525 +vn 0.3796 -0.9244 0.0374 +vn 0.2269 -0.9737 0.0224 +vn 0.0755 -0.9971 0.0074 +vn 0.9872 -0.1266 0.0972 +vn 0.9262 -0.3657 0.0912 +vn 0.8182 -0.5692 0.0806 +vn 0.0726 -0.9971 0.0220 +vn 0.9492 -0.1266 0.2880 +vn 0.8907 -0.3657 0.2702 +vn 0.7868 -0.5692 0.2387 +vn 0.6557 -0.7284 0.1989 +vn 0.5122 -0.8447 0.1554 +vn 0.3650 -0.9244 0.1107 +vn 0.2182 -0.9737 0.0662 +vn 0.4720 -0.8447 0.2523 +vn 0.3364 -0.9244 0.1798 +vn 0.2011 -0.9737 0.1075 +vn 0.0669 -0.9971 0.0357 +vn 0.8748 -0.1266 0.4676 +vn 0.8208 -0.3657 0.4387 +vn 0.7251 -0.5692 0.3876 +vn 0.6043 -0.7284 0.3230 +vn 0.7195 -0.3657 0.5904 +vn 0.6356 -0.5692 0.5216 +vn 0.5297 -0.7284 0.4347 +vn 0.4137 -0.8447 0.3395 +vn 0.2949 -0.9244 0.2420 +vn 0.1763 -0.9737 0.1447 +vn 0.0586 -0.9971 0.0481 +vn 0.7668 -0.1266 0.6293 +vn 0.2420 -0.9244 0.2949 +vn 0.1447 -0.9737 0.1763 +vn 0.0481 -0.9971 0.0586 +vn 0.6293 -0.1266 0.7668 +vn 0.5904 -0.3657 0.7195 +vn 0.5216 -0.5692 0.6356 +vn 0.4347 -0.7284 0.5297 +vn 0.3395 -0.8447 0.4137 +vn 0.4387 -0.3657 0.8208 +vn 0.3876 -0.5692 0.7251 +vn 0.3230 -0.7284 0.6043 +vn 0.2523 -0.8447 0.4720 +vn 0.1798 -0.9244 0.3364 +vn 0.1075 -0.9737 0.2011 +vn 0.0357 -0.9971 0.0669 +vn 0.4676 -0.1266 0.8748 +vn 0.1107 -0.9244 0.3650 +vn 0.0662 -0.9737 0.2182 +vn 0.0220 -0.9971 0.0726 +vn 0.2880 -0.1266 0.9492 +vn 0.2702 -0.3657 0.8907 +vn 0.2387 -0.5692 0.7868 +vn 0.1989 -0.7284 0.6557 +vn 0.1554 -0.8447 0.5122 +vn 0.0806 -0.5692 0.8182 +vn 0.0672 -0.7284 0.6819 +vn 0.0525 -0.8447 0.5326 +vn 0.0374 -0.9244 0.3796 +vn 0.0224 -0.9737 0.2269 +vn 0.0074 -0.9971 0.0755 +vn 0.0972 -0.1266 0.9872 +vn 0.0912 -0.3657 0.9262 +vn -0.0224 -0.9737 0.2269 +vn -0.0074 -0.9971 0.0755 +vn -0.0972 -0.1266 0.9872 +vn -0.0912 -0.3657 0.9262 +vn -0.0806 -0.5692 0.8182 +vn -0.0672 -0.7284 0.6819 +vn -0.0525 -0.8447 0.5326 +vn -0.0374 -0.9244 0.3796 +vn -0.2387 -0.5692 0.7868 +vn -0.1989 -0.7284 0.6557 +vn -0.1554 -0.8447 0.5122 +vn -0.1107 -0.9244 0.3650 +vn -0.0662 -0.9737 0.2182 +vn -0.0220 -0.9971 0.0726 +vn -0.2880 -0.1266 0.9492 +vn -0.2702 -0.3657 0.8907 +vn -0.1075 -0.9737 0.2011 +vn -0.0357 -0.9971 0.0669 +vn -0.4676 -0.1266 0.8748 +vn -0.4387 -0.3657 0.8208 +vn -0.3876 -0.5692 0.7251 +vn -0.3230 -0.7284 0.6043 +vn -0.2523 -0.8447 0.4720 +vn -0.1798 -0.9244 0.3364 +vn -0.4347 -0.7284 0.5297 +vn -0.3395 -0.8447 0.4137 +vn -0.2420 -0.9244 0.2949 +vn -0.1447 -0.9737 0.1763 +vn -0.0481 -0.9971 0.0586 +vn -0.6293 -0.1266 0.7668 +vn -0.5904 -0.3657 0.7195 +vn -0.5216 -0.5692 0.6356 +vn -0.0586 -0.9971 0.0481 +vn -0.7668 -0.1266 0.6293 +vn -0.7195 -0.3657 0.5904 +vn -0.6356 -0.5692 0.5216 +vn -0.5297 -0.7284 0.4347 +vn -0.4137 -0.8447 0.3395 +vn -0.2949 -0.9244 0.2420 +vn -0.1763 -0.9737 0.1447 +vn -0.4720 -0.8447 0.2523 +vn -0.3364 -0.9244 0.1798 +vn -0.2011 -0.9737 0.1075 +vn -0.0669 -0.9971 0.0357 +vn -0.8748 -0.1266 0.4676 +vn -0.8208 -0.3657 0.4387 +vn -0.7251 -0.5692 0.3876 +vn -0.6043 -0.7284 0.3230 +vn -0.9492 -0.1266 0.2880 +vn -0.8907 -0.3657 0.2702 +vn -0.7868 -0.5692 0.2387 +vn -0.6557 -0.7284 0.1989 +vn -0.5122 -0.8447 0.1554 +vn -0.3650 -0.9244 0.1107 +vn -0.2182 -0.9737 0.0662 +vn -0.0726 -0.9971 0.0220 +vn -0.5326 -0.8447 0.0525 +vn -0.3796 -0.9244 0.0374 +vn -0.2269 -0.9737 0.0224 +vn -0.0755 -0.9971 0.0074 +vn -0.9872 -0.1266 0.0972 +vn -0.9262 -0.3657 0.0912 +vn -0.8182 -0.5692 0.0806 +vn -0.6819 -0.7284 0.0672 +vn -0.9262 -0.3657 -0.0912 +vn -0.8182 -0.5692 -0.0806 +vn -0.6819 -0.7284 -0.0672 +vn -0.5326 -0.8447 -0.0525 +vn -0.3796 -0.9244 -0.0374 +vn -0.2269 -0.9737 -0.0224 +vn -0.0755 -0.9971 -0.0074 +vn -0.9872 -0.1266 -0.0972 +vn -0.3650 -0.9244 -0.1107 +vn -0.2182 -0.9737 -0.0662 +vn -0.0726 -0.9971 -0.0220 +vn -0.9492 -0.1266 -0.2880 +vn -0.8907 -0.3657 -0.2702 +vn -0.7868 -0.5692 -0.2387 +vn -0.6557 -0.7284 -0.1989 +vn -0.5122 -0.8447 -0.1554 +vn -0.8208 -0.3657 -0.4387 +vn -0.7251 -0.5692 -0.3876 +vn -0.6043 -0.7284 -0.3230 +vn -0.4720 -0.8447 -0.2523 +vn -0.3364 -0.9244 -0.1798 +vn -0.2011 -0.9737 -0.1075 +vn -0.0669 -0.9971 -0.0357 +vn -0.8748 -0.1266 -0.4676 +vn -0.2949 -0.9244 -0.2420 +vn -0.1763 -0.9737 -0.1447 +vn -0.0586 -0.9971 -0.0481 +vn -0.7668 -0.1266 -0.6293 +vn -0.7195 -0.3657 -0.5904 +vn -0.6356 -0.5692 -0.5216 +vn -0.5297 -0.7284 -0.4347 +vn -0.4137 -0.8447 -0.3395 +vn -0.5216 -0.5692 -0.6356 +vn -0.6262 -0.1601 -0.7630 +vn -0.4347 -0.7284 -0.5297 +vn 0.7602 -0.1811 -0.6239 +vn -0.3395 -0.8447 -0.4137 +vn 0.2859 -0.1726 -0.9426 +vn -0.2420 -0.9244 -0.2949 +vn 0.6246 -0.1752 0.7611 +vn -0.1447 -0.9737 -0.1763 +vn -0.9802 -0.1731 0.0965 +vn 0.0966 -0.1711 0.9805 +vn -0.0481 -0.9971 -0.0586 +vn -0.6293 -0.1266 -0.7668 +vn -0.8704 -0.1609 -0.4653 +vn -0.5904 -0.3657 -0.7195 +vn -0.3649 -0.1842 0.9126 +vn -0.1075 -0.9737 -0.2011 +vn 0.8675 -0.1802 0.4637 +vn -0.0951 -0.1729 -0.9803 +vn -0.0357 -0.9971 -0.0669 +vn -0.4676 -0.1266 -0.8748 +vn 0.4571 -0.1733 -0.8724 +vn -0.4387 -0.3657 -0.8208 +vn 0.9805 -0.1710 -0.0966 +vn -0.3876 -0.5692 -0.7251 +vn -0.8687 -0.1727 0.4643 +vn -0.3230 -0.7284 -0.6043 +vn 0.4645 -0.1708 0.8690 +vn -0.2523 -0.8447 -0.4720 +vn -0.9801 -0.1733 -0.0965 +vn -0.1798 -0.9244 -0.3364 +vn 0.9806 -0.1708 0.0966 +vn -0.5430 -0.1712 -0.8221 +vn -0.1989 -0.7284 -0.6557 +vn 0.8689 -0.1715 -0.4644 +vn -0.1554 -0.8447 -0.5122 +vn -0.0966 -0.1713 0.9805 +vn -0.1107 -0.9244 -0.3650 +vn -0.8976 -0.1881 -0.3986 +vn -0.0662 -0.9737 -0.2182 +vn -0.5295 -0.1968 0.8251 +vn 0.7589 -0.1904 0.6228 +vn -0.0220 -0.9971 -0.0726 +vn -0.2880 -0.1266 -0.9492 +vn -0.9425 -0.1729 0.2859 +vn -0.2702 -0.3657 -0.8907 +vn -0.2859 -0.1732 -0.9425 +vn -0.2387 -0.5692 -0.7868 +vn 0.9428 -0.1712 -0.2860 +vn 0.0965 -0.1728 -0.9802 +vn -0.0074 -0.9971 -0.0755 +vn -0.0972 -0.1266 -0.9872 +vn 0.4484 -0.1954 -0.8722 +vn -0.0912 -0.3657 -0.9262 +vn 0.2860 -0.1709 0.9429 +vn -0.0806 -0.5692 -0.8182 +vn 0.9429 -0.1707 0.2860 +vn -0.0672 -0.7284 -0.6819 +vn -0.9424 -0.1734 -0.2859 +vn -0.0525 -0.8447 -0.5326 +vn -0.2860 -0.1716 0.9427 +vn -0.0374 -0.9244 -0.3796 +vn -0.7607 -0.1777 0.6243 +vn -0.0223 -0.9737 -0.2269 +vn -0.3574 -0.2710 0.8938 +vn 0.8938 -0.2707 -0.3574 +vn 0.0920 -0.2708 -0.9582 +vn -0.9579 -0.2713 -0.0943 +vn 0.7943 -0.2728 0.5429 +vn -0.2795 -0.2697 0.9215 +vn 0.8189 -0.2750 -0.5037 +vn -0.0920 -0.2710 -0.9582 +vn -0.9579 -0.2712 0.0943 +vn 0.8815 -0.2701 0.3874 +vn -0.0944 -0.2695 0.9584 +vn 0.4402 -0.2703 -0.8562 +vn -0.2794 -0.2713 -0.9211 +vn -0.9211 -0.2710 0.2794 +vn 0.9217 -0.2689 0.2796 +vn -0.5310 -0.2681 -0.8039 +vn 0.0944 -0.2693 0.9584 +vn 0.4468 -0.2706 -0.8527 +vn -0.8526 -0.2710 0.4468 +vn 0.9585 -0.2691 0.0944 +vn -0.4243 -0.2660 -0.8656 +vn 0.2796 -0.2691 0.9216 +vn 0.2795 -0.2706 -0.9212 +vn -0.8373 -0.2719 0.4743 +vn 0.9584 -0.2692 -0.0944 +vn -0.8813 -0.2647 -0.3913 +vn 0.4259 -0.2697 0.8637 +vn -0.5192 -0.2754 0.8090 +vn 0.9216 -0.2694 -0.2796 +vn -0.8038 -0.2681 -0.5310 +vn -0.9210 -0.2714 -0.2794 +vn 0.5343 -0.2718 0.8004 +vn 0.0972 -0.1265 -0.9872 +vn 0.4676 -0.1265 -0.8748 +vn 0.7668 -0.1266 -0.6293 +vn 0.9492 -0.1266 -0.2880 +vn 0.9872 -0.1265 -0.0972 +vn 0.2269 -0.9737 -0.0223 +vn 0.0223 -0.9737 0.2269 +vn -0.5905 -0.3657 0.7195 +vn -0.5216 -0.5692 0.6355 +vn -0.2269 -0.9737 0.0223 +vn -0.7195 -0.3657 -0.5905 +vn -0.6355 -0.5692 -0.5216 +vn -0.4326 -0.1848 -0.8825 +vn 0.8348 -0.1987 -0.5135 +vn 0.5455 -0.1866 0.8171 +vn -0.8221 -0.1713 -0.5430 +vn -0.4644 -0.1718 0.8688 +vn 0.9019 -0.1714 0.3964 +vn -0.0965 -0.1730 -0.9802 +vn 0.4643 -0.1723 -0.8687 +vn -0.8723 -0.1737 0.4571 +vn 0.4355 -0.1747 0.8831 +vn -0.4653 -0.1608 -0.8704 +vn 0.9127 -0.1839 -0.3650 +vn -0.7630 -0.1601 -0.6262 +vn -0.6239 -0.1815 0.7602 +vn 0.8122 -0.1792 0.5552 +vn -0.2879 -0.1266 -0.9492 +vn 0.0951 -0.1726 -0.9804 +vn 0.6243 -0.1773 -0.7608 +vn -0.8537 -0.1930 0.4836 +vn 0.4402 -0.2703 -0.8563 +usemtl None +f 288/1/1 8/2/1 289/3/1 +f 41/4/2 289/3/2 8/2/2 +f 282/5/3 2/6/3 283/7/3 +f 283/7/4 3/8/4 284/9/4 +f 284/9/5 4/10/5 285/11/5 +f 285/11/6 5/12/6 286/13/6 +f 286/13/7 6/14/7 287/15/7 +f 287/15/8 7/16/8 288/1/8 +f 6/14/9 15/17/9 7/16/9 +f 7/16/10 16/18/10 8/2/10 +f 41/4/11 8/2/11 16/18/11 +f 1/19/12 10/20/12 2/6/12 +f 2/6/13 11/21/13 3/8/13 +f 4/10/14 11/21/14 12/22/14 +f 5/12/15 12/22/15 13/23/15 +f 6/14/16 13/23/16 14/24/16 +f 12/22/17 19/25/17 20/26/17 +f 12/22/18 21/27/18 13/23/18 +f 13/23/19 22/28/19 14/24/19 +f 14/24/20 23/29/20 15/17/20 +f 15/17/21 24/30/21 16/18/21 +f 41/4/22 16/18/22 24/30/22 +f 9/31/23 18/32/23 10/20/23 +f 10/20/24 19/25/24 11/21/24 +f 23/29/25 32/33/25 24/30/25 +f 41/4/26 24/30/26 32/33/26 +f 17/34/27 26/35/27 18/32/27 +f 18/32/28 27/36/28 19/25/28 +f 20/26/29 27/36/29 28/37/29 +f 21/27/30 28/37/30 29/38/30 +f 22/28/31 29/38/31 30/39/31 +f 22/28/32 31/40/32 23/29/32 +f 28/37/33 35/41/33 36/42/33 +f 29/38/34 36/42/34 37/43/34 +f 30/39/35 37/43/35 38/44/35 +f 30/39/36 39/45/36 31/40/36 +f 31/40/37 40/46/37 32/33/37 +f 41/4/38 32/33/38 40/46/38 +f 25/47/39 34/48/39 26/35/39 +f 26/35/40 35/41/40 27/36/40 +f 39/45/41 49/49/41 40/46/41 +f 41/4/42 40/46/42 49/49/42 +f 34/48/43 42/50/43 43/51/43 +f 34/48/44 44/52/44 35/41/44 +f 36/42/45 44/52/45 45/53/45 +f 36/42/46 46/54/46 37/43/46 +f 38/44/47 46/54/47 47/55/47 +f 38/44/48 48/56/48 39/45/48 +f 45/53/49 54/57/49 46/54/49 +f 46/54/50 55/58/50 47/55/50 +f 47/55/51 56/59/51 48/56/51 +f 49/49/52 56/59/52 57/60/52 +f 41/4/53 49/49/53 57/60/53 +f 42/50/54 51/61/54 43/51/54 +f 43/51/55 52/62/55 44/52/55 +f 45/53/56 52/62/56 53/63/56 +f 41/4/57 57/60/57 65/64/57 +f 51/61/58 58/65/58 59/66/58 +f 51/61/59 60/67/59 52/62/59 +f 53/63/60 60/67/60 61/68/60 +f 54/57/61 61/68/61 62/69/61 +f 55/58/62 62/69/62 63/70/62 +f 56/59/63 63/70/63 64/71/63 +f 57/60/64 64/71/64 65/64/64 +f 61/68/65 70/72/65 62/69/65 +f 63/70/66 70/72/66 71/73/66 +f 63/70/67 72/74/67 64/71/67 +f 64/71/68 73/75/68 65/64/68 +f 41/4/69 65/64/69 73/75/69 +f 58/65/70 67/76/70 59/66/70 +f 59/66/71 68/77/71 60/67/71 +f 61/68/72 68/77/72 69/78/72 +f 41/4/73 73/75/73 81/79/73 +f 67/76/74 74/80/74 75/81/74 +f 67/76/75 76/82/75 68/77/75 +f 69/78/76 76/82/76 77/83/76 +f 69/78/77 78/84/77 70/72/77 +f 71/73/78 78/84/78 79/85/78 +f 71/73/79 80/86/79 72/74/79 +f 73/75/80 80/86/80 81/79/80 +f 79/85/81 86/87/81 87/88/81 +f 79/85/82 88/89/82 80/86/82 +f 80/86/83 89/90/83 81/79/83 +f 41/4/84 81/79/84 89/90/84 +f 74/80/85 83/91/85 75/81/85 +f 75/81/86 84/92/86 76/82/86 +f 77/83/87 84/92/87 85/93/87 +f 77/83/88 86/87/88 78/84/88 +f 83/91/89 92/94/89 84/92/89 +f 85/93/90 92/94/90 93/95/90 +f 85/93/91 94/96/91 86/87/91 +f 87/88/92 94/96/92 95/97/92 +f 87/88/93 96/98/93 88/89/93 +f 89/90/94 96/98/94 97/99/94 +f 41/4/95 89/90/95 97/99/95 +f 82/100/96 91/101/96 83/91/96 +f 95/97/97 104/102/97 96/98/97 +f 96/98/98 105/103/98 97/99/98 +f 41/4/99 97/99/99 105/103/99 +f 90/104/100 99/105/100 91/101/100 +f 91/101/101 100/106/101 92/94/101 +f 93/95/102 100/106/102 101/107/102 +f 93/95/103 102/108/103 94/96/103 +f 95/97/104 102/108/104 103/109/104 +f 99/105/105 108/110/105 100/106/105 +f 101/107/106 108/110/106 109/111/106 +f 101/107/107 110/112/107 102/108/107 +f 103/109/108 110/112/108 111/113/108 +f 103/109/109 112/114/109 104/102/109 +f 104/102/110 113/115/110 105/103/110 +f 41/4/111 105/103/111 113/115/111 +f 98/116/112 107/117/112 99/105/112 +f 111/113/113 120/118/113 112/114/113 +f 112/114/114 121/119/114 113/115/114 +f 41/120/115 113/115/115 121/119/115 +f 106/121/116 115/122/116 107/117/116 +f 107/117/117 116/123/117 108/110/117 +f 109/111/118 116/123/118 117/124/118 +f 109/111/119 118/125/119 110/112/119 +f 110/112/120 119/126/120 111/113/120 +f 117/124/121 124/127/121 125/128/121 +f 117/124/122 126/129/122 118/125/122 +f 119/126/123 126/129/123 127/130/123 +f 120/118/124 127/130/124 128/131/124 +f 120/118/125 129/132/125 121/119/125 +f 41/120/126 121/119/126 129/132/126 +f 114/133/127 123/134/127 115/122/127 +f 115/122/128 124/127/128 116/123/128 +f 128/131/129 137/135/129 129/132/129 +f 41/120/130 129/132/130 137/135/130 +f 122/136/131 131/137/131 123/134/131 +f 123/134/132 132/138/132 124/127/132 +f 125/128/133 132/138/133 133/139/133 +f 125/128/134 134/140/134 126/129/134 +f 127/130/135 134/140/135 135/141/135 +f 128/131/136 135/141/136 136/142/136 +f 133/139/137 140/143/137 141/144/137 +f 133/139/138 142/145/138 134/140/138 +f 134/140/139 143/146/139 135/141/139 +f 136/142/140 143/146/140 144/147/140 +f 137/135/141 144/147/141 145/148/141 +f 41/120/142 137/135/142 145/148/142 +f 130/149/143 139/150/143 131/137/143 +f 131/137/144 140/143/144 132/138/144 +f 144/147/145 153/151/145 145/148/145 +f 41/120/146 145/148/146 153/151/146 +f 139/150/147 146/152/147 147/153/147 +f 139/150/148 148/154/148 140/143/148 +f 141/144/149 148/154/149 149/155/149 +f 141/144/150 150/156/150 142/145/150 +f 143/146/151 150/156/151 151/157/151 +f 143/146/152 152/158/152 144/147/152 +f 149/155/153 158/159/153 150/156/153 +f 150/156/154 159/160/154 151/157/154 +f 152/158/155 159/160/155 160/161/155 +f 153/151/156 160/161/156 161/162/156 +f 41/120/157 153/151/157 161/162/157 +f 146/152/158 155/163/158 147/153/158 +f 147/153/159 156/164/159 148/154/159 +f 149/155/160 156/164/160 157/165/160 +f 41/120/161 161/162/161 169/166/161 +f 154/167/162 163/168/162 155/163/162 +f 155/163/163 164/169/163 156/164/163 +f 157/165/164 164/169/164 165/170/164 +f 157/165/165 166/171/165 158/159/165 +f 159/160/166 166/171/166 167/172/166 +f 160/161/167 167/172/167 168/173/167 +f 160/161/168 169/166/168 161/162/168 +f 166/171/169 175/174/169 167/172/169 +f 167/172/170 176/175/170 168/173/170 +f 169/166/171 176/175/171 177/176/171 +f 41/120/172 169/166/172 177/176/172 +f 163/168/173 170/177/173 171/178/173 +f 163/168/174 172/179/174 164/169/174 +f 165/170/175 172/179/175 173/180/175 +f 165/170/176 174/181/176 166/171/176 +f 170/177/177 179/182/177 171/178/177 +f 171/178/178 180/183/178 172/179/178 +f 173/180/179 180/183/179 181/184/179 +f 173/180/180 182/185/180 174/181/180 +f 174/181/181 183/186/181 175/174/181 +f 175/174/182 184/187/182 176/175/182 +f 176/175/183 185/188/183 177/176/183 +f 41/120/184 177/176/184 185/188/184 +f 182/185/185 191/189/185 183/186/185 +f 184/187/186 191/189/186 192/190/186 +f 185/188/187 192/190/187 193/191/187 +f 41/120/188 185/188/188 193/191/188 +f 179/182/189 186/192/189 187/193/189 +f 179/182/190 188/194/190 180/183/190 +f 181/184/191 188/194/191 189/195/191 +f 181/184/192 190/196/192 182/185/192 +f 187/193/193 196/197/193 188/194/193 +f 189/195/194 196/197/194 197/198/194 +f 189/195/195 198/199/195 190/196/195 +f 190/196/196 199/200/196 191/189/196 +f 192/190/197 199/200/197 200/201/197 +f 192/190/198 201/202/198 193/191/198 +f 41/120/199 193/191/199 201/202/199 +f 187/193/200 194/203/200 195/204/200 +f 199/200/201 208/205/201 200/201/201 +f 200/201/202 209/206/202 201/202/202 +f 41/120/203 201/202/203 209/206/203 +f 195/204/204 202/207/204 203/208/204 +f 195/204/205 204/209/205 196/197/205 +f 197/198/206 204/209/206 205/210/206 +f 198/199/207 205/210/207 206/211/207 +f 198/199/208 207/212/208 199/200/208 +f 203/208/209 212/213/209 204/209/209 +f 205/210/210 212/213/210 213/214/210 +f 205/210/211 214/215/211 206/211/211 +f 206/211/212 215/216/212 207/212/212 +f 208/205/213 215/216/213 216/217/213 +f 208/205/214 217/218/214 209/206/214 +f 41/120/215 209/206/215 217/218/215 +f 203/208/216 210/219/216 211/220/216 +f 215/216/217 228/221/217 216/217/217 +f 216/217/218 229/222/218 217/218/218 +f 41/120/219 217/218/219 229/222/219 +f 210/219/220 223/223/220 211/220/220 +f 211/220/221 224/224/221 212/213/221 +f 213/214/222 224/224/222 225/225/222 +f 213/214/223 226/226/223 214/215/223 +f 214/215/224 227/227/224 215/216/224 +f 225/225/225 239/228/225 240/229/225 +f 222/230/226 221/231/226 237/232/226 +f 225/225/227 241/233/227 226/226/227 +f 25/47/228 277/234/228 33/235/228 +f 226/226/229 242/236/229 227/227/229 +f 1/19/230 280/237/230 9/31/230 +f 228/221/231 242/236/231 243/238/231 +f 90/104/232 261/239/232 98/116/232 +f 228/221/233 244/240/233 229/222/233 +f 186/192/234 235/241/234 234/242/234 +f 122/136/235 251/243/235 250/244/235 +f 41/120/236 229/222/236 244/240/236 +f 223/223/237 237/232/237 238/245/237 +f 202/207/238 231/246/238 210/219/238 +f 223/223/239 239/228/239 224/224/239 +f 146/152/240 248/247/240 247/248/240 +f 243/249/241 259/250/241 244/251/241 +f 74/80/242 263/252/242 82/100/242 +f 282/5/243 219/253/243 218/254/243 +f 41/4/244 244/251/244 259/250/244 +f 238/255/245 252/256/245 253/257/245 +f 17/34/246 280/237/246 279/258/246 +f 238/255/247 254/259/247 239/260/247 +f 50/261/248 266/262/248 58/65/248 +f 240/263/249 254/259/249 255/264/249 +f 162/265/250 236/266/250 170/177/250 +f 240/263/251 256/267/251 241/268/251 +f 98/116/252 260/269/252 106/121/252 +f 241/268/253 257/270/253 242/271/253 +f 194/203/254 234/242/254 233/272/254 +f 242/271/255 258/273/255 243/249/255 +f 58/65/256 265/274/256 66/275/256 +f 252/256/257 221/276/257 220/277/257 +f 255/264/258 271/278/258 256/267/258 +f 33/235/259 276/279/259 42/50/259 +f 256/267/260 272/280/260 257/270/260 +f 130/149/261 250/244/261 249/281/261 +f 258/273/262 272/280/262 273/282/262 +f 222/230/263 231/246/263 230/283/263 +f 258/273/264 274/284/264 259/250/264 +f 154/167/265 247/248/265 246/285/265 +f 82/100/266 262/286/266 90/104/266 +f 41/4/267 259/250/267 274/284/267 +f 253/257/268 267/287/268 268/288/268 +f 178/289/269 236/266/269 235/241/269 +f 253/257/270 269/290/270 254/259/270 +f 252/256/271 219/253/271 267/287/271 +f 255/264/272 269/290/272 270/291/272 +f 42/50/273 275/292/273 50/261/273 +f 282/5/274 281/293/274 1/19/274 +f 41/4/275 274/284/275 289/3/275 +f 267/287/276 283/7/276 268/288/276 +f 25/47/277 279/258/277 278/294/277 +f 268/288/278 284/9/278 269/290/278 +f 114/133/279 260/269/279 251/243/279 +f 270/291/280 284/9/280 285/11/280 +f 66/275/281 264/295/281 74/80/281 +f 270/291/282 286/13/282 271/278/282 +f 202/207/283 233/272/283 232/296/283 +f 272/280/284 286/13/284 287/15/284 +f 138/297/285 249/281/285 248/247/285 +f 272/280/286 288/1/286 273/282/286 +f 154/167/287 245/298/287 162/265/287 +f 274/284/288 288/1/288 289/3/288 +f 247/248/289 304/299/289 303/300/289 +f 277/234/290 316/301/290 276/279/290 +f 218/254/291 321/302/291 281/293/291 +f 233/272/292 298/303/292 297/304/292 +f 262/286/293 311/305/293 310/306/293 +f 248/247/294 305/307/294 304/299/294 +f 278/294/295 317/308/295 277/234/295 +f 218/254/296 291/309/296 290/310/296 +f 234/242/297 299/311/297 298/303/297 +f 263/252/298 312/312/298 311/305/298 +f 249/281/299 306/313/299 305/307/299 +f 278/294/300 319/314/300 318/315/300 +f 220/277/301 291/309/301 219/253/301 +f 235/241/302 300/316/302 299/311/302 +f 265/274/303 312/312/303 264/295/303 +f 220/277/304 293/317/304 292/318/304 +f 250/244/305 307/319/305 306/313/305 +f 279/258/306 320/320/306 319/314/306 +f 245/298/307 300/316/307 236/266/307 +f 266/262/308 313/321/308 265/274/308 +f 230/283/309 293/322/309 221/231/309 +f 251/243/310 308/323/310 307/319/310 +f 281/293/311 320/320/311 280/237/311 +f 246/285/312 301/324/312 245/298/312 +f 275/292/313 314/325/313 266/262/313 +f 230/283/314 295/326/314 294/327/314 +f 261/239/315 308/323/315 260/269/315 +f 246/285/316 303/300/316 302/328/316 +f 276/279/317 315/329/317 275/292/317 +f 232/296/318 295/326/318 231/246/318 +f 232/296/319 297/304/319 296/330/319 +f 262/286/320 309/331/320 261/239/320 +f 288/1/1 7/16/1 8/2/1 +f 282/5/321 1/19/321 2/6/321 +f 283/7/4 2/6/4 3/8/4 +f 284/9/5 3/8/5 4/10/5 +f 285/11/6 4/10/6 5/12/6 +f 286/13/7 5/12/7 6/14/7 +f 287/15/8 6/14/8 7/16/8 +f 6/14/9 14/24/9 15/17/9 +f 7/16/10 15/17/10 16/18/10 +f 1/19/12 9/31/12 10/20/12 +f 2/6/13 10/20/13 11/21/13 +f 4/10/14 3/8/14 11/21/14 +f 5/12/15 4/10/15 12/22/15 +f 6/14/16 5/12/16 13/23/16 +f 12/22/17 11/21/17 19/25/17 +f 12/22/18 20/26/18 21/27/18 +f 13/23/19 21/27/19 22/28/19 +f 14/24/20 22/28/20 23/29/20 +f 15/17/21 23/29/21 24/30/21 +f 9/31/322 17/34/322 18/32/322 +f 10/20/24 18/32/24 19/25/24 +f 23/29/25 31/40/25 32/33/25 +f 17/34/27 25/47/27 26/35/27 +f 18/32/28 26/35/28 27/36/28 +f 20/26/29 19/25/29 27/36/29 +f 21/27/30 20/26/30 28/37/30 +f 22/28/31 21/27/31 29/38/31 +f 22/28/32 30/39/32 31/40/32 +f 28/37/33 27/36/33 35/41/33 +f 29/38/34 28/37/34 36/42/34 +f 30/39/35 29/38/35 37/43/35 +f 30/39/36 38/44/36 39/45/36 +f 31/40/37 39/45/37 40/46/37 +f 25/47/323 33/235/323 34/48/323 +f 26/35/40 34/48/40 35/41/40 +f 39/45/41 48/56/41 49/49/41 +f 34/48/43 33/235/43 42/50/43 +f 34/48/44 43/51/44 44/52/44 +f 36/42/45 35/41/45 44/52/45 +f 36/42/46 45/53/46 46/54/46 +f 38/44/47 37/43/47 46/54/47 +f 38/44/48 47/55/48 48/56/48 +f 45/53/49 53/63/49 54/57/49 +f 46/54/50 54/57/50 55/58/50 +f 47/55/51 55/58/51 56/59/51 +f 49/49/52 48/56/52 56/59/52 +f 42/50/324 50/261/324 51/61/324 +f 43/51/55 51/61/55 52/62/55 +f 45/53/56 44/52/56 52/62/56 +f 51/61/325 50/261/325 58/65/325 +f 51/61/59 59/66/59 60/67/59 +f 53/63/60 52/62/60 60/67/60 +f 54/57/61 53/63/61 61/68/61 +f 55/58/62 54/57/62 62/69/62 +f 56/59/63 55/58/63 63/70/63 +f 57/60/326 56/59/326 64/71/326 +f 61/68/65 69/78/65 70/72/65 +f 63/70/66 62/69/66 70/72/66 +f 63/70/67 71/73/67 72/74/67 +f 64/71/68 72/74/68 73/75/68 +f 58/65/70 66/275/70 67/76/70 +f 59/66/71 67/76/71 68/77/71 +f 61/68/72 60/67/72 68/77/72 +f 67/76/74 66/275/74 74/80/74 +f 67/76/75 75/81/75 76/82/75 +f 69/78/76 68/77/76 76/82/76 +f 69/78/77 77/83/77 78/84/77 +f 71/73/78 70/72/78 78/84/78 +f 71/73/79 79/85/79 80/86/79 +f 73/75/80 72/74/80 80/86/80 +f 79/85/81 78/84/81 86/87/81 +f 79/85/82 87/88/82 88/89/82 +f 80/86/83 88/89/83 89/90/83 +f 74/80/85 82/100/85 83/91/85 +f 75/81/86 83/91/86 84/92/86 +f 77/83/87 76/82/87 84/92/87 +f 77/83/88 85/93/88 86/87/88 +f 83/91/89 91/101/89 92/94/89 +f 85/93/90 84/92/90 92/94/90 +f 85/93/91 93/95/91 94/96/91 +f 87/88/92 86/87/92 94/96/92 +f 87/88/93 95/97/93 96/98/93 +f 89/90/94 88/89/94 96/98/94 +f 82/100/96 90/104/96 91/101/96 +f 95/97/97 103/109/97 104/102/97 +f 96/98/98 104/102/98 105/103/98 +f 90/104/100 98/116/100 99/105/100 +f 91/101/101 99/105/101 100/106/101 +f 93/95/102 92/94/102 100/106/102 +f 93/95/103 101/107/103 102/108/103 +f 95/97/104 94/96/104 102/108/104 +f 99/105/105 107/117/105 108/110/105 +f 101/107/106 100/106/106 108/110/106 +f 101/107/107 109/111/107 110/112/107 +f 103/109/108 102/108/108 110/112/108 +f 103/109/109 111/113/109 112/114/109 +f 104/102/110 112/114/110 113/115/110 +f 98/116/112 106/121/112 107/117/112 +f 111/113/113 119/126/113 120/118/113 +f 112/114/114 120/118/114 121/119/114 +f 106/121/116 114/133/116 115/122/116 +f 107/117/117 115/122/117 116/123/117 +f 109/111/118 108/110/118 116/123/118 +f 109/111/119 117/124/119 118/125/119 +f 110/112/120 118/125/120 119/126/120 +f 117/124/121 116/123/121 124/127/121 +f 117/124/122 125/128/122 126/129/122 +f 119/126/123 118/125/123 126/129/123 +f 120/118/124 119/126/124 127/130/124 +f 120/118/327 128/131/327 129/132/327 +f 114/133/127 122/136/127 123/134/127 +f 115/122/128 123/134/128 124/127/128 +f 128/131/129 136/142/129 137/135/129 +f 122/136/131 130/149/131 131/137/131 +f 123/134/132 131/137/132 132/138/132 +f 125/128/133 124/127/133 132/138/133 +f 125/128/134 133/139/134 134/140/134 +f 127/130/135 126/129/135 134/140/135 +f 128/131/136 127/130/136 135/141/136 +f 133/139/137 132/138/137 140/143/137 +f 133/139/138 141/144/138 142/145/138 +f 134/140/139 142/145/139 143/146/139 +f 136/142/140 135/141/140 143/146/140 +f 137/135/141 136/142/141 144/147/141 +f 130/149/143 138/297/143 139/150/143 +f 131/137/144 139/150/144 140/143/144 +f 144/147/145 152/158/145 153/151/145 +f 139/150/147 138/297/147 146/152/147 +f 139/150/148 147/153/148 148/154/148 +f 141/144/149 140/143/149 148/154/149 +f 141/144/150 149/155/150 150/156/150 +f 143/146/151 142/145/151 150/156/151 +f 143/146/152 151/157/152 152/158/152 +f 149/155/153 157/165/153 158/159/153 +f 150/156/154 158/159/154 159/160/154 +f 152/158/155 151/157/155 159/160/155 +f 153/151/156 152/158/156 160/161/156 +f 146/152/158 154/167/158 155/163/158 +f 147/153/328 155/163/328 156/164/328 +f 149/155/329 148/154/329 156/164/329 +f 154/167/162 162/265/162 163/168/162 +f 155/163/163 163/168/163 164/169/163 +f 157/165/164 156/164/164 164/169/164 +f 157/165/165 165/170/165 166/171/165 +f 159/160/166 158/159/166 166/171/166 +f 160/161/167 159/160/167 167/172/167 +f 160/161/168 168/173/168 169/166/168 +f 166/171/169 174/181/169 175/174/169 +f 167/172/170 175/174/170 176/175/170 +f 169/166/171 168/173/171 176/175/171 +f 163/168/173 162/265/173 170/177/173 +f 163/168/174 171/178/174 172/179/174 +f 165/170/175 164/169/175 172/179/175 +f 165/170/176 173/180/176 174/181/176 +f 170/177/177 178/289/177 179/182/177 +f 171/178/178 179/182/178 180/183/178 +f 173/180/179 172/179/179 180/183/179 +f 173/180/180 181/184/180 182/185/180 +f 174/181/181 182/185/181 183/186/181 +f 175/174/182 183/186/182 184/187/182 +f 176/175/183 184/187/183 185/188/183 +f 182/185/185 190/196/185 191/189/185 +f 184/187/186 183/186/186 191/189/186 +f 185/188/330 184/187/330 192/190/330 +f 179/182/189 178/289/189 186/192/189 +f 179/182/190 187/193/190 188/194/190 +f 181/184/191 180/183/191 188/194/191 +f 181/184/192 189/195/192 190/196/192 +f 187/193/193 195/204/193 196/197/193 +f 189/195/194 188/194/194 196/197/194 +f 189/195/195 197/198/195 198/199/195 +f 190/196/196 198/199/196 199/200/196 +f 192/190/197 191/189/197 199/200/197 +f 192/190/198 200/201/198 201/202/198 +f 187/193/200 186/192/200 194/203/200 +f 199/200/201 207/212/201 208/205/201 +f 200/201/202 208/205/202 209/206/202 +f 195/204/204 194/203/204 202/207/204 +f 195/204/205 203/208/205 204/209/205 +f 197/198/206 196/197/206 204/209/206 +f 198/199/207 197/198/207 205/210/207 +f 198/199/208 206/211/208 207/212/208 +f 203/208/209 211/220/209 212/213/209 +f 205/210/210 204/209/210 212/213/210 +f 205/210/211 213/214/211 214/215/211 +f 206/211/212 214/215/212 215/216/212 +f 208/205/213 207/212/213 215/216/213 +f 208/205/214 216/217/214 217/218/214 +f 203/208/216 202/207/216 210/219/216 +f 215/216/217 227/227/217 228/221/217 +f 216/217/218 228/221/218 229/222/218 +f 210/219/220 222/230/220 223/223/220 +f 211/220/331 223/223/331 224/224/331 +f 213/214/332 212/213/332 224/224/332 +f 213/214/223 225/225/223 226/226/223 +f 214/215/224 226/226/224 227/227/224 +f 225/225/225 224/224/225 239/228/225 +f 222/230/333 230/283/333 221/231/333 +f 225/225/227 240/229/227 241/233/227 +f 25/47/334 278/294/334 277/234/334 +f 226/226/229 241/233/229 242/236/229 +f 1/19/230 281/293/230 280/237/230 +f 228/221/231 227/227/231 242/236/231 +f 90/104/335 262/286/335 261/239/335 +f 228/221/233 243/238/233 244/240/233 +f 186/192/234 178/289/234 235/241/234 +f 122/136/235 114/133/235 251/243/235 +f 223/223/237 222/230/237 237/232/237 +f 202/207/336 232/296/336 231/246/336 +f 223/223/239 238/245/239 239/228/239 +f 146/152/337 138/297/337 248/247/337 +f 243/249/241 258/273/241 259/250/241 +f 74/80/338 264/295/338 263/252/338 +f 282/5/339 267/287/339 219/253/339 +f 238/255/245 237/332/245 252/256/245 +f 17/34/340 9/31/340 280/237/340 +f 238/255/247 253/257/247 254/259/247 +f 50/261/248 275/292/248 266/262/248 +f 240/263/249 239/260/249 254/259/249 +f 162/265/341 245/298/341 236/266/341 +f 240/263/251 255/264/251 256/267/251 +f 98/116/342 261/239/342 260/269/342 +f 241/268/253 256/267/253 257/270/253 +f 194/203/254 186/192/254 234/242/254 +f 242/271/255 257/270/255 258/273/255 +f 58/65/256 266/262/256 265/274/256 +f 252/256/343 237/332/343 221/276/343 +f 255/264/258 270/291/258 271/278/258 +f 33/235/344 277/234/344 276/279/344 +f 256/267/260 271/278/260 272/280/260 +f 130/149/261 122/136/261 250/244/261 +f 258/273/262 257/270/262 272/280/262 +f 222/230/345 210/219/345 231/246/345 +f 258/273/264 273/282/264 274/284/264 +f 154/167/346 146/152/346 247/248/346 +f 82/100/347 263/252/347 262/286/347 +f 253/257/348 252/256/348 267/287/348 +f 178/289/269 170/177/269 236/266/269 +f 253/257/270 268/288/270 269/290/270 +f 252/256/271 220/277/271 219/253/271 +f 255/264/272 254/259/272 269/290/272 +f 42/50/273 276/279/273 275/292/273 +f 282/5/349 218/254/349 281/293/349 +f 267/287/276 282/5/276 283/7/276 +f 25/47/350 17/34/350 279/258/350 +f 268/288/278 283/7/278 284/9/278 +f 114/133/279 106/121/279 260/269/279 +f 270/291/280 269/290/280 284/9/280 +f 66/275/281 265/274/281 264/295/281 +f 270/291/282 285/11/282 286/13/282 +f 202/207/283 194/203/283 233/272/283 +f 272/280/284 271/278/284 286/13/284 +f 138/297/285 130/149/285 249/281/285 +f 272/280/286 287/15/286 288/1/286 +f 154/167/351 246/285/351 245/298/351 +f 274/284/288 273/282/288 288/1/288 +f 247/248/289 248/247/289 304/299/289 +f 277/234/290 317/308/290 316/301/290 +f 218/254/291 290/310/291 321/302/291 +f 233/272/292 234/242/292 298/303/292 +f 262/286/293 263/252/293 311/305/293 +f 248/247/294 249/281/294 305/307/294 +f 278/294/295 318/315/295 317/308/295 +f 218/254/296 219/253/296 291/309/296 +f 234/242/297 235/241/297 299/311/297 +f 263/252/298 264/295/298 312/312/298 +f 249/281/299 250/244/299 306/313/299 +f 278/294/352 279/258/352 319/314/352 +f 220/277/301 292/318/301 291/309/301 +f 235/241/302 236/266/302 300/316/302 +f 265/274/303 313/321/303 312/312/303 +f 220/277/304 221/276/304 293/317/304 +f 250/244/305 251/243/305 307/319/305 +f 279/258/306 280/237/306 320/320/306 +f 245/298/307 301/324/307 300/316/307 +f 266/262/308 314/325/308 313/321/308 +f 230/283/309 294/327/309 293/322/309 +f 251/243/310 260/269/310 308/323/310 +f 281/293/311 321/302/311 320/320/311 +f 246/285/312 302/328/312 301/324/312 +f 275/292/313 315/329/313 314/325/313 +f 230/283/314 231/246/314 295/326/314 +f 261/239/315 309/331/315 308/323/315 +f 246/285/316 247/248/316 303/300/316 +f 276/279/317 316/301/317 315/329/317 +f 232/296/318 296/330/318 295/326/318 +f 232/296/319 233/272/319 297/304/319 +f 262/286/320 310/306/320 309/331/320 +o PodBody +v -0.634758 4.766150 -0.570743 +v -0.634758 4.766150 -0.634191 +v -0.634758 4.371327 -0.570743 +v 0.570743 4.766150 -0.634191 +v 0.634191 4.766150 -0.634191 +v 0.570743 4.371327 -0.634191 +v 0.634191 4.766150 0.574483 +v 0.634191 4.766150 0.634758 +v 0.634191 4.371327 0.574483 +v -0.574483 4.766150 0.634758 +v -0.634758 4.766150 0.634758 +v -0.574483 4.371327 0.634758 +v 0.570743 4.371327 -0.570743 +v 0.634191 4.371327 -0.570743 +v -0.574483 4.766150 -0.570743 +v -0.574483 4.766150 -0.634191 +v -0.850016 4.766150 0.001870 +v -0.850016 4.371327 0.001870 +v 0.634191 4.766150 -0.570743 +v 0.634191 4.371327 -0.634191 +v 0.765090 4.371327 0.001870 +v 0.850095 4.371327 0.001870 +v -0.769260 4.766150 0.001870 +v 0.850095 4.766150 0.001870 +v -0.634758 4.766150 0.574483 +v -0.634758 4.371327 0.634758 +v 0.570743 4.371327 0.634758 +v 0.570743 4.371327 0.574483 +v 0.634191 4.371327 0.634758 +v -0.574483 4.766150 0.574483 +v -0.001870 4.766150 -0.852129 +v -0.001870 4.371327 -0.852129 +v 0.570743 4.766150 0.634758 +v -0.001870 4.371327 -0.766924 +v 0.570743 4.766150 -0.570743 +v -0.002085 4.371327 0.002051 +v -0.001870 4.371327 0.851971 +v -0.001870 4.371327 0.771026 +v -0.001870 4.766150 0.851971 +v -0.001870 4.766150 -0.766924 +v 0.765090 4.766150 0.001870 +v 0.765090 4.413541 0.001870 +v -0.001870 4.766150 0.771026 +v -0.634758 4.371327 -0.634191 +v -0.574483 4.371327 -0.570743 +v -0.634758 4.371327 0.574483 +v -0.574483 4.413541 -0.570743 +v -0.769260 4.413541 0.001870 +v -0.574483 4.413541 -0.570743 +v -0.001870 4.413541 -0.766924 +v 0.570743 4.766150 0.574483 +v -0.001870 4.413541 0.771026 +v 0.570743 4.413541 0.574483 +v -0.574483 4.371327 0.574483 +v -0.002085 4.413541 0.002051 +v -0.574483 4.371327 -0.634191 +v -0.769260 4.371327 0.001870 +v 0.570743 4.413541 -0.570743 +v -0.574483 4.413541 0.574483 +v -0.002085 4.413541 0.002051 +v -0.001870 4.413541 -0.766924 +v -0.769260 4.413541 0.001870 +v -1.121243 1.250807 1.121243 +v -1.121243 1.250807 -1.121243 +v -1.121243 0.922112 1.121243 +v 1.121243 1.250807 -1.121243 +v -1.121243 0.922112 -1.121243 +v 1.121243 1.250807 1.121243 +v 1.121243 0.922112 -1.121243 +v 1.121243 0.922112 1.121243 +v -1.282053 2.701678 -0.302830 +v -1.282053 2.701678 -0.612996 +v -1.282053 0.915438 -0.302830 +v -0.983548 2.701678 -0.612996 +v -1.282053 0.915438 -0.612996 +v -0.983548 2.701678 0.245198 +v -0.983548 2.701678 0.612996 +v -0.983548 0.915438 0.245198 +v -1.282053 2.701678 0.612996 +v -0.983548 0.915438 0.612996 +v -0.983548 0.915438 -0.202830 +v -0.983548 4.033402 -0.202828 +v -0.983548 4.033402 -0.612994 +v -1.282053 4.033402 -0.612994 +v -1.282053 2.701678 0.345198 +v -1.282053 0.915438 0.612996 +v -0.983548 2.701678 -0.202830 +v -1.282053 0.915438 0.345198 +v -0.983548 4.033402 0.612998 +v -0.983548 4.033402 0.245200 +v -1.282053 4.033402 0.612998 +v -1.282053 4.033402 0.345200 +v -0.983548 0.915438 -0.612996 +v -1.282053 4.033402 -0.302828 +v -1.282053 3.339003 -0.302828 +v -1.282053 3.339003 -0.612994 +v -0.983548 3.339003 0.245200 +v -0.983548 3.339003 0.612998 +v -1.282053 3.339003 0.612998 +v -0.983548 3.339003 -0.202828 +v -1.282053 3.339003 0.345200 +v -0.983548 3.339003 -0.612994 +v -1.326488 3.265762 -0.230241 +v -1.326488 3.265762 0.272614 +v -1.326488 2.774920 0.272612 +v -1.326488 2.774920 -0.230243 +v -1.000000 4.360665 1.000002 +v -1.000000 4.360665 -0.999998 +v -1.000000 0.417663 1.000000 +v 1.000000 4.360665 -0.999998 +v -1.000000 0.417663 -1.000000 +v 1.000000 4.360665 1.000002 +v 1.000000 0.417663 -1.000000 +v 1.000000 0.417663 1.000000 +v 0.412316 2.368839 -1.268437 +v 0.657365 2.368839 -1.259879 +v 0.412316 0.915438 -1.268437 +v 0.646948 2.368839 -0.961556 +v 0.657365 0.915438 -1.259879 +v -0.328692 2.368839 -0.995626 +v -0.578297 2.368839 -1.004342 +v -0.328692 0.915438 -0.995626 +v -0.567880 2.368839 -1.302666 +v -0.578297 0.915438 -1.004342 +v 0.401899 0.915438 -0.970113 +v 0.401899 4.033402 -0.970111 +v 0.646948 4.033402 -0.961554 +v 0.412316 4.033402 -1.268435 +v 0.657365 4.033402 -1.259877 +v 0.412316 3.574099 -1.268435 +v 0.657365 3.574099 -1.259877 +v -0.328692 4.033402 -0.995624 +v -0.578297 4.033402 -1.004340 +v -0.328692 3.574099 -0.995624 +v -0.567880 4.033402 -1.302664 +v -0.578297 3.574099 -1.004340 +v 0.646948 3.574099 -0.961554 +v -0.567880 3.574099 -1.302664 +v -0.318274 2.368839 -1.293949 +v -0.318274 0.915438 -1.293949 +v 0.401899 2.368839 -0.970113 +v 0.646948 0.915438 -0.961556 +v -0.318274 4.033402 -1.293947 +v -0.318274 3.574099 -1.293947 +v 0.406242 3.574099 -1.094501 +v 0.401899 3.574099 -0.970111 +v -0.567880 0.915438 -1.302666 +v -0.324348 2.368839 -1.120016 +v -0.324348 3.574099 -1.120014 +v -0.321635 2.368839 -1.197703 +v 0.406242 2.368839 -1.094503 +v -0.321635 3.574099 -1.197701 +v 0.408955 3.574099 -1.172188 +v 0.408955 2.368839 -1.172190 +v -1.121243 4.032755 1.121245 +v -1.121243 4.032755 -1.121241 +v -1.121243 3.704061 1.121245 +v 1.121243 4.032755 -1.121241 +v -1.121243 3.704061 -1.121241 +v 1.121243 4.032755 1.121245 +v 1.121243 3.704061 -1.121241 +v 1.121243 3.704061 1.121245 +v -0.634758 0.034352 0.570746 +v -0.634758 0.034352 0.634193 +v -0.634758 0.429174 0.570746 +v 0.570743 0.034352 0.634193 +v 0.634191 0.034352 0.634193 +v 0.570743 0.429174 0.634193 +v 0.634191 0.034352 -0.574480 +v 0.634191 0.034352 -0.634755 +v 0.634191 0.429174 -0.574480 +v -0.574483 0.034352 -0.634755 +v -0.634758 0.034352 -0.634755 +v -0.574483 0.429174 -0.634755 +v 0.570743 0.429174 0.570746 +v 0.634191 0.429174 0.570746 +v -0.574483 0.034352 0.570746 +v -0.574483 0.034352 0.634193 +v -0.850016 0.034352 -0.001867 +v -0.850016 0.429174 -0.001867 +v 0.634191 0.034352 0.570746 +v 0.634191 0.429174 0.634193 +v 0.765090 0.429174 -0.001867 +v 0.850095 0.429174 -0.001867 +v -0.769260 0.034352 -0.001867 +v 0.850095 0.034352 -0.001867 +v -0.634758 0.034352 -0.574480 +v -0.634758 0.429174 -0.634755 +v 0.570743 0.429174 -0.634755 +v 0.570743 0.429174 -0.574480 +v 0.634191 0.429174 -0.634755 +v -0.574483 0.034352 -0.574480 +v -0.001870 0.034352 0.852132 +v -0.001870 0.429174 0.852132 +v 0.570743 0.034352 -0.634755 +v -0.001870 0.429174 0.766927 +v 0.570743 0.034352 0.570746 +v -0.002085 0.429174 -0.002048 +v -0.001870 0.429174 -0.851968 +v -0.001870 0.429174 -0.771024 +v -0.001870 0.034352 -0.851968 +v -0.001870 0.034352 0.766927 +v 0.765090 0.034352 -0.001867 +v 0.765090 0.386961 -0.001867 +v -0.001870 0.034352 -0.771024 +v -0.634758 0.429174 0.634193 +v -0.574483 0.429174 0.570746 +v -0.634758 0.429174 -0.574480 +v -0.574483 0.386961 0.570746 +v -0.769260 0.386961 -0.001867 +v -0.574483 0.386961 0.570746 +v -0.001870 0.386961 0.766927 +v 0.570743 0.034352 -0.574480 +v -0.001870 0.386961 -0.771024 +v 0.570743 0.386961 -0.574480 +v -0.574483 0.429174 -0.574480 +v -0.002085 0.386961 -0.002048 +v -0.574483 0.429174 0.634193 +v -0.769260 0.429174 -0.001867 +v 0.570743 0.386961 0.570746 +v -0.574483 0.386961 -0.574480 +v -0.002085 0.386961 -0.002048 +v -0.001870 0.386961 0.766927 +v -0.769260 0.386961 -0.001867 +v -0.302830 2.701678 1.282053 +v -0.612996 2.701678 1.282053 +v -0.302830 0.915438 1.282053 +v -0.612996 2.701678 0.983548 +v -0.612996 0.915438 1.282053 +v 0.245198 2.701678 0.983548 +v 0.612996 2.701678 0.983548 +v 0.245198 0.915438 0.983548 +v 0.612996 2.701678 1.282053 +v 0.612996 0.915438 0.983548 +v -0.202830 0.915438 0.983548 +v -0.202830 4.033402 0.983550 +v -0.612996 4.033402 0.983550 +v -0.612996 4.033402 1.282055 +v 0.345198 2.701678 1.282053 +v 0.612996 0.915438 1.282053 +v -0.202830 2.701678 0.983548 +v 0.345198 0.915438 1.282053 +v 0.612996 4.033402 0.983550 +v 0.245198 4.033402 0.983550 +v 0.612996 4.033402 1.282055 +v 0.345198 4.033402 1.282055 +v -0.612996 0.915438 0.983548 +v -0.302830 4.033402 1.282055 +v -0.302830 3.339003 1.282055 +v -0.612996 3.339003 1.282055 +v 0.245198 3.339003 0.983550 +v 0.612996 3.339003 0.983550 +v 0.612996 3.339003 1.282055 +v -0.202830 3.339003 0.983550 +v 0.345198 3.339003 1.282055 +v -0.612996 3.339003 0.983550 +v -0.230243 3.265762 1.326488 +v 0.272612 3.265762 1.326488 +v 0.272612 2.774920 1.326488 +v -0.230243 2.774920 1.326488 +v 1.282053 2.701678 0.302830 +v 1.282053 2.701678 0.612996 +v 1.282053 0.915438 0.302830 +v 0.983548 2.701678 0.612996 +v 1.282053 0.915438 0.612996 +v 0.983548 2.701678 -0.245198 +v 0.983548 2.701678 -0.612996 +v 0.983548 0.915438 -0.245198 +v 1.282054 2.701678 -0.612996 +v 0.983548 0.915438 -0.612996 +v 0.983548 0.915438 0.202830 +v 0.983548 4.033402 0.202832 +v 0.983548 4.033402 0.612998 +v 1.282053 4.033402 0.612998 +v 1.282053 2.701678 -0.345198 +v 1.282054 0.915438 -0.612996 +v 0.983548 2.701678 0.202830 +v 1.282053 0.915438 -0.345198 +v 0.983548 4.033402 -0.612994 +v 0.983548 4.033402 -0.245196 +v 1.282054 4.033402 -0.612994 +v 1.282053 4.033402 -0.345196 +v 0.983548 0.915438 0.612996 +v 1.282053 4.033402 0.302832 +v 1.282053 3.339003 0.302832 +v 1.282053 3.339003 0.612998 +v 0.983548 3.339003 -0.245196 +v 0.983548 3.339003 -0.612994 +v 1.282054 3.339003 -0.612994 +v 0.983548 3.339003 0.202832 +v 1.282053 3.339003 -0.345196 +v 0.983548 3.339003 0.612998 +v 1.326488 3.265762 0.230245 +v 1.326488 3.265762 -0.272610 +v 1.326488 2.774920 -0.272612 +v 1.326488 2.774920 0.230243 +v -0.612996 3.339003 1.282055 +v -0.935509 4.207664 0.935511 +v -0.935509 0.893071 0.935509 +v -0.935509 4.207664 -0.935507 +v -0.935509 0.893071 -0.935509 +v 0.935509 4.207664 -0.935507 +v 0.935509 0.893071 -0.935509 +v 0.935509 4.207664 0.935511 +v 0.935509 0.893071 0.935509 +v -0.612996 2.701678 1.282053 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9886 0.4977 +vt 0.5059 0.4977 +vt 0.9886 0.0149 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.0074 0.5055 +vt 0.4986 0.5055 +vt 0.0074 0.9967 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5066 0.5056 +vt 0.9978 0.5056 +vt 0.5066 0.9969 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.9976 +vt 0.5051 0.9976 +vt 0.5051 0.5036 +vt 0.9964 0.5036 +vt 0.5051 0.9949 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.9985 0.9970 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.5057 +vt 0.9985 0.5057 +vt 0.5072 0.9970 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9886 0.4977 +vt 0.5059 0.4977 +vt 0.9886 0.0149 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.9964 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.5051 0.5063 +vt 0.9964 0.5063 +vt 0.5051 0.9976 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.0074 0.0064 +vt 0.4986 0.0064 +vt 0.0074 0.4977 +vt 0.9886 0.4977 +vt 0.5059 0.4977 +vt 0.9886 0.0149 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.9670 0.0031 +vt 0.9963 0.0031 +vt 0.9670 0.4938 +vt 0.4986 0.0064 +vt 0.4986 0.4977 +vt 0.4986 0.0064 +vt 0.5031 0.5031 +vt 0.5031 0.9969 +vt 0.9969 0.5031 +vt 0.5031 0.5031 +vt 0.5031 0.9969 +vt 0.9969 0.5031 +vt 0.5031 0.5031 +vt 0.5031 0.9969 +vt 0.9969 0.5031 +vt 0.5031 0.5031 +vt 0.5031 0.9969 +vt 0.9969 0.5031 +vt 0.5031 0.5031 +vt 0.9969 0.5031 +vt 0.5031 0.9969 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.0074 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.0074 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.5051 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9963 0.4938 +vt 0.4986 0.4977 +vt 0.5059 0.0149 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.4986 0.9967 +vt 0.4986 0.9967 +vt 0.4986 0.9967 +vt 0.4986 0.9967 +vt 0.4986 0.9967 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9978 0.9969 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9949 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.0074 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.0074 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.0074 0.4977 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.0074 0.4977 +vt 0.0074 0.4977 +vt 0.4986 0.4977 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.5072 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.9985 0.9970 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.5051 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9963 0.4938 +vt 0.4986 0.4977 +vt 0.5059 0.0149 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.5051 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9964 0.9976 +vt 0.9964 0.9976 +vt 0.4986 0.4977 +vt 0.9963 0.4938 +vt 0.4986 0.4977 +vt 0.5059 0.0149 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.9963 0.4938 +vt 0.4986 0.4977 +vt 0.9969 0.9969 +vt 0.9969 0.9969 +vt 0.9969 0.9969 +vt 0.9969 0.9969 +vt 0.9969 0.9969 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.9360 0.0000 -0.3519 +vn 0.9357 0.0000 0.3528 +vn 0.3557 0.0000 -0.9346 +vn -0.3547 -0.0000 0.9350 +vn -0.9469 0.0000 0.3214 +vn 0.3241 -0.0000 0.9460 +vn 0.9467 0.0000 -0.3220 +vn -0.3246 0.0000 -0.9458 +vn -0.9360 0.0000 0.3519 +vn 0.9357 0.0000 -0.3528 +vn -0.9469 0.0000 -0.3214 +vn 0.9467 0.0000 0.3220 +vn -0.3557 0.0000 -0.9346 +vn 0.3547 -0.0000 0.9350 +vn -0.3241 -0.0000 0.9460 +vn 0.3246 0.0000 -0.9458 +vn 0.0000 0.0000 0.0000 +vn -0.8529 0.0000 -0.5221 +vn -0.8550 0.5187 0.0000 +vn -0.8550 -0.5187 0.0000 +vn -0.8529 -0.0000 0.5221 +vn 0.0349 0.0000 -0.9994 +vn 0.9994 -0.0000 0.0349 +vn -0.0349 -0.0000 0.9994 +vn -0.9994 0.0000 -0.0349 +vn 0.3557 -0.0000 0.9346 +vn -0.3547 0.0000 -0.9350 +vn 0.3241 0.0000 -0.9460 +vn -0.3246 -0.0000 0.9458 +vn -0.3557 -0.0000 0.9346 +vn 0.3547 0.0000 -0.9350 +vn -0.3241 0.0000 -0.9460 +vn 0.3246 -0.0000 0.9458 +vn -0.5221 -0.0000 0.8529 +vn 0.0000 0.5187 0.8550 +vn 0.0000 -0.5187 0.8550 +vn 0.5221 -0.0000 0.8529 +vn 0.8529 -0.0000 0.5221 +vn 0.8550 0.5187 0.0000 +vn 0.8550 -0.5187 0.0000 +vn 0.8529 0.0000 -0.5221 +usemtl None_spacePod.png +f 322/333/353 323/334/353 324/335/353 +f 325/336/354 326/337/354 327/338/354 +f 328/339/355 329/340/355 330/341/355 +f 331/342/356 332/343/356 333/344/356 +f 334/345/357 327/346/357 335/347/357 +f 336/348/358 337/349/358 322/350/358 +f 338/351/359 322/352/359 339/353/359 +f 326/354/355 340/355/355 341/356/355 +f 342/357/357 334/358/357 343/359/357 +f 344/360/358 336/361/358 338/362/358 +f 345/363/360 328/364/360 343/365/360 +f 332/366/353 346/367/353 347/368/353 +f 348/369/357 349/370/357 350/371/357 +f 331/342/358 351/372/358 332/373/358 +f 352/374/361 325/375/361 353/376/361 +f 329/377/356 354/378/356 350/379/356 +f 355/380/357 353/381/357 334/382/357 +f 340/383/358 326/337/358 356/384/358 +f 357/385/357 355/386/357 342/387/357 +f 345/363/358 340/355/358 356/388/358 +f 358/389/357 359/390/357 349/391/357 +f 329/377/358 328/364/358 354/392/358 +f 360/393/362 331/394/362 358/395/362 +f 361/396/358 352/397/358 336/398/358 +f 362/399/363 356/400/363 363/401/363 +f 360/393/358 364/402/358 351/403/358 +f 323/404/354 337/349/354 365/405/354 +f 324/406/357 365/407/357 366/408/357 +f 339/409/357 324/410/357 366/411/357 +f 347/412/357 367/413/357 333/414/357 +f 368/415/356 369/416/356 370/417/356 +f 361/396/364 336/361/364 371/418/364 +f 344/360/365 351/372/365 369/419/365 +f 364/420/366 372/421/366 373/422/366 +f 346/423/367 338/424/367 367/425/367 +f 349/426/357 342/427/357 343/428/357 +f 351/429/358 344/430/358 338/431/358 +f 340/383/368 345/432/368 335/433/368 +f 359/434/357 357/435/357 342/436/357 +f 328/339/358 345/432/358 372/437/358 +f 372/438/369 362/439/369 374/440/369 +f 367/441/357 339/442/357 375/443/357 +f 373/444/358 376/445/358 369/446/358 +f 336/348/370 344/430/370 368/447/370 +f 337/448/371 352/397/371 377/449/371 +f 366/450/357 377/451/357 353/452/357 +f 378/453/357 366/454/357 355/455/357 +f 333/456/357 375/457/357 358/458/357 +f 354/459/372 360/460/372 348/461/372 +f 356/462/358 325/375/358 352/463/358 +f 354/459/358 372/421/358 360/464/358 +f 363/465/358 379/466/358 371/467/358 +f 356/462/373 361/468/373 379/469/373 +f 351/429/374 364/402/374 380/470/374 +f 375/471/357 378/472/357 359/473/357 +f 374/474/358 363/475/358 373/422/358 +f 381/476/358 382/477/358 383/478/358 +f 376/479/375 371/480/375 381/481/375 +f 371/482/375 368/483/356 382/484/375 +f 369/485/356 376/486/375 383/487/356 +f 384/488/353 385/489/353 386/490/353 +f 385/491/354 387/492/354 388/493/354 +f 387/494/355 389/495/355 390/496/355 +f 389/497/356 384/498/356 391/499/356 +f 386/500/357 388/501/357 391/499/357 +f 389/497/358 387/492/358 384/502/358 +f 392/503/353 393/504/353 394/505/353 +f 393/506/354 395/507/354 396/508/354 +f 397/509/355 398/510/355 399/511/355 +f 398/512/356 400/513/356 401/514/356 +f 394/515/357 396/516/357 402/517/357 +f 403/518/358 404/519/358 405/520/358 +f 400/521/353 406/522/353 407/523/353 +f 408/524/355 397/525/355 402/526/355 +f 407/527/357 409/528/357 399/529/357 +f 410/530/358 411/531/358 412/532/358 +f 406/533/353 392/534/353 409/535/353 +f 409/536/357 394/537/357 399/538/357 +f 411/539/358 403/540/358 413/541/358 +f 395/542/355 408/543/355 414/544/355 +f 415/545/353 405/546/353 416/547/353 +f 405/548/354 404/519/354 417/549/354 +f 411/550/355 410/551/355 418/552/355 +f 410/530/356 412/553/356 419/554/356 +f 412/555/353 413/556/353 420/557/353 +f 403/558/355 411/559/355 421/560/355 +f 413/561/353 415/562/353 422/563/353 +f 404/564/355 403/565/355 423/566/355 +f 416/567/353 417/568/353 392/569/353 +f 417/570/354 423/571/354 393/572/354 +f 418/573/355 419/574/355 397/575/355 +f 419/576/356 420/577/356 398/578/356 +f 420/579/353 422/580/353 400/581/353 +f 421/582/355 418/583/355 408/584/355 +f 416/585/376 392/586/376 424/587/376 +f 423/588/355 421/589/355 395/590/355 +f 425/591/353 424/592/353 426/593/353 +f 422/594/377 416/595/377 425/596/377 +f 392/597/378 406/598/378 427/599/378 +f 406/600/379 422/601/379 426/602/379 +f 428/603/353 429/604/353 430/605/353 +f 429/606/354 431/607/354 432/608/354 +f 431/609/355 433/610/355 434/611/355 +f 433/612/356 428/613/356 435/614/356 +f 430/615/357 432/616/357 435/614/357 +f 433/612/358 431/607/358 428/617/358 +f 436/618/380 437/619/380 438/620/380 +f 437/621/381 439/622/381 440/623/381 +f 441/624/382 442/625/382 443/626/382 +f 442/627/383 444/628/383 445/629/383 +f 438/630/357 440/631/357 446/632/357 +f 447/633/358 448/634/358 449/635/358 +f 449/636/380 450/637/380 451/638/380 +f 450/639/381 448/640/381 452/641/381 +f 453/642/382 454/643/382 455/644/382 +f 454/645/383 456/646/383 457/647/383 +f 451/648/380 452/649/380 436/650/380 +f 452/651/381 458/652/381 437/653/381 +f 455/654/382 457/655/382 441/656/382 +f 457/657/383 459/658/383 442/659/383 +f 460/660/380 436/661/380 461/662/380 +f 439/663/382 462/664/382 463/665/382 +f 461/666/357 438/667/357 443/668/357 +f 453/669/358 447/670/358 464/671/358 +f 464/672/380 449/673/380 465/674/380 +f 448/675/382 447/676/382 458/677/382 +f 451/648/383 436/661/383 466/678/383 +f 458/679/382 467/680/382 439/681/382 +f 462/682/382 441/683/382 446/684/382 +f 447/685/382 453/686/382 467/687/382 +f 467/688/382 455/689/382 462/690/382 +f 444/691/380 460/692/380 468/693/380 +f 468/694/357 461/695/357 445/629/357 +f 454/645/358 453/696/358 456/697/358 +f 456/698/380 464/699/380 459/700/380 +f 459/701/380 465/702/380 444/703/380 +f 469/704/383 470/705/383 471/706/383 +f 465/707/357 451/708/357 470/709/357 +f 436/618/358 460/692/358 472/710/358 +f 460/660/381 465/702/381 469/711/381 +f 473/712/380 474/713/380 471/714/380 +f 466/715/381 472/716/381 474/717/381 +f 470/718/358 466/719/358 473/720/358 +f 472/721/357 469/722/357 475/723/357 +f 476/724/353 477/725/353 478/726/353 +f 477/727/354 479/728/354 480/729/354 +f 479/730/355 481/731/355 482/732/355 +f 481/733/356 476/734/356 483/735/356 +f 478/736/357 480/737/357 483/735/357 +f 481/733/358 479/728/358 476/738/358 +f 484/739/353 485/740/353 486/741/353 +f 487/742/356 488/743/356 489/744/356 +f 490/745/355 491/746/355 492/747/355 +f 493/748/354 494/749/354 495/750/354 +f 496/751/358 489/752/358 497/753/358 +f 498/754/357 499/755/357 484/756/357 +f 500/757/367 484/758/367 501/759/367 +f 488/760/355 502/761/355 503/762/355 +f 504/763/358 496/764/358 505/765/358 +f 506/766/357 498/767/357 500/768/357 +f 507/769/368 490/770/368 505/771/368 +f 494/772/353 508/773/353 509/774/353 +f 510/775/358 511/776/358 512/777/358 +f 493/748/357 513/778/357 494/779/357 +f 514/780/384 487/781/384 515/782/384 +f 491/783/354 516/784/354 512/785/354 +f 517/786/358 515/787/358 496/788/358 +f 502/789/357 488/743/357 518/790/357 +f 519/791/358 517/792/358 504/793/358 +f 507/769/357 502/761/357 518/794/357 +f 520/795/358 521/796/358 511/797/358 +f 491/783/357 490/770/357 516/798/357 +f 522/799/385 493/800/385 520/801/385 +f 523/802/357 514/803/357 498/804/357 +f 524/805/369 518/806/369 525/807/369 +f 522/799/357 526/808/357 513/809/357 +f 485/810/356 499/755/356 527/811/356 +f 486/812/358 527/813/358 528/814/358 +f 501/815/358 486/816/358 528/817/358 +f 509/818/358 529/819/358 495/820/358 +f 530/821/356 531/822/356 532/823/356 +f 523/802/386 498/767/386 533/824/386 +f 506/766/370 513/778/370 531/825/370 +f 526/826/387 534/827/387 535/828/387 +f 508/829/359 500/830/359 529/831/359 +f 511/832/358 504/833/358 505/834/358 +f 513/835/357 506/836/357 500/837/357 +f 502/789/360 507/838/360 497/839/360 +f 521/840/358 519/841/358 504/842/358 +f 490/745/357 507/838/357 534/843/357 +f 534/844/363 524/845/363 536/846/363 +f 529/847/358 501/848/358 537/849/358 +f 535/850/357 538/851/357 531/852/357 +f 498/754/365 506/836/365 530/853/365 +f 499/854/388 514/803/388 539/855/388 +f 528/856/358 539/857/358 515/858/358 +f 540/859/358 528/860/358 517/861/358 +f 495/862/358 537/863/358 520/864/358 +f 516/865/389 522/866/389 510/867/389 +f 518/868/357 487/781/357 514/869/357 +f 516/865/357 534/827/357 522/870/357 +f 525/871/357 541/872/357 533/873/357 +f 518/868/390 523/874/390 541/875/390 +f 513/835/391 526/808/391 542/876/391 +f 537/877/358 540/878/358 521/879/358 +f 536/880/357 525/881/357 535/828/357 +f 543/882/357 544/883/357 545/884/357 +f 538/885/375 533/886/375 543/887/375 +f 533/888/375 530/889/356 544/890/375 +f 531/891/356 538/892/375 545/893/356 +f 546/894/356 547/895/356 548/896/356 +f 547/897/353 549/898/353 550/899/353 +f 551/900/354 552/901/354 553/902/354 +f 552/903/355 554/904/355 555/905/355 +f 548/906/357 550/907/357 556/908/357 +f 557/909/358 558/910/358 559/911/358 +f 554/912/356 560/913/356 561/914/356 +f 562/915/354 551/916/354 556/917/354 +f 561/918/357 563/919/357 553/920/357 +f 564/921/358 565/922/358 566/923/358 +f 560/924/356 546/925/356 563/926/356 +f 563/927/357 548/928/357 553/929/357 +f 565/930/358 557/931/358 567/932/358 +f 549/933/354 562/934/354 568/935/354 +f 569/936/356 559/937/356 570/938/356 +f 559/939/353 558/910/353 571/940/353 +f 565/941/354 564/942/354 572/943/354 +f 564/921/355 566/944/355 573/945/355 +f 566/946/356 567/947/356 574/948/356 +f 557/949/354 565/950/354 575/951/354 +f 567/952/356 569/953/356 576/954/356 +f 558/955/354 557/956/354 577/957/354 +f 570/958/356 571/959/356 546/960/356 +f 571/961/353 577/962/353 547/963/353 +f 572/964/354 573/965/354 551/966/354 +f 573/967/355 574/968/355 552/969/355 +f 574/970/356 576/971/356 554/972/356 +f 575/973/354 572/974/354 562/975/354 +f 570/976/392 546/977/392 578/978/392 +f 577/979/354 575/980/354 549/981/354 +f 579/982/356 578/983/356 580/984/356 +f 576/985/393 570/986/393 579/987/393 +f 546/988/394 560/989/394 581/990/394 +f 560/991/395 576/992/395 580/993/395 +f 582/994/355 583/995/355 584/996/355 +f 583/997/356 585/998/356 586/999/356 +f 587/1000/353 588/1001/353 589/1002/353 +f 588/1003/354 590/1004/354 591/1005/354 +f 584/1006/357 586/1007/357 592/1008/357 +f 593/1009/358 594/1010/358 595/1011/358 +f 590/1012/355 596/1013/355 597/1014/355 +f 598/1015/353 587/1016/353 592/1017/353 +f 597/1018/357 599/1019/357 589/1020/357 +f 600/1021/358 601/1022/358 602/1023/358 +f 596/1024/355 582/1025/355 599/1026/355 +f 599/1027/357 584/1028/357 589/1029/357 +f 601/1030/358 593/1031/358 603/1032/358 +f 585/1033/353 598/1034/353 604/1035/353 +f 605/1036/355 595/1037/355 606/1038/355 +f 595/1039/356 594/1010/356 607/1040/356 +f 601/1041/353 600/1042/353 608/1043/353 +f 600/1021/354 602/1044/354 609/1045/354 +f 602/1046/355 603/1047/355 610/1048/355 +f 593/1049/353 601/1050/353 611/1051/353 +f 603/1052/355 605/1053/355 612/1054/355 +f 594/1055/353 593/1056/353 613/1057/353 +f 606/1058/355 607/1059/355 582/1060/355 +f 607/1061/356 613/1062/356 583/1063/356 +f 608/1064/353 609/1065/353 587/1066/353 +f 609/1067/354 610/1068/354 588/1069/354 +f 610/1070/355 612/1071/355 590/1072/355 +f 611/1073/353 608/1074/353 598/1075/353 +f 606/1076/396 582/1077/396 614/1078/396 +f 613/1079/353 611/1080/353 585/1081/353 +f 615/1082/355 614/1083/355 616/1084/355 +f 612/1085/397 606/1086/397 615/1087/397 +f 582/1088/398 596/1089/398 617/1090/398 +f 596/1091/399 612/1092/399 616/1093/399 +f 571/1094/356 547/1095/356 618/1096/356 +f 619/1097/355 620/1098/355 621/1099/355 +f 621/1100/356 622/1101/356 623/1102/356 +f 623/1103/353 624/1104/353 625/1105/353 +f 625/1106/354 626/1107/354 619/1108/354 +f 620/1109/358 626/1107/358 622/1110/358 +f 625/1106/357 619/1111/357 623/1102/357 +f 323/334/353 365/1112/353 324/335/353 +f 326/337/354 341/1113/354 327/338/354 +f 329/340/355 350/1114/355 330/341/355 +f 332/343/356 347/1115/356 333/344/356 +f 327/346/357 341/1116/357 335/347/357 +f 337/349/358 323/1117/358 322/350/358 +f 322/352/359 324/1118/359 339/353/359 +f 340/355/355 335/1119/355 341/356/355 +f 334/358/357 335/1120/357 343/359/357 +f 336/361/358 322/1121/358 338/362/358 +f 328/364/360 330/1122/360 343/365/360 +f 346/367/353 367/1123/353 347/368/353 +f 349/370/357 330/1124/357 350/371/357 +f 351/372/358 346/1125/358 332/373/358 +f 325/375/361 327/1126/361 353/376/361 +f 354/378/356 348/1127/356 350/379/356 +f 353/381/357 327/1128/357 334/382/357 +f 326/337/358 325/1129/358 356/384/358 +f 355/386/357 334/1130/357 342/387/357 +f 362/1131/358 345/363/358 356/388/358 +f 348/1132/357 358/389/357 349/391/357 +f 328/364/358 372/1133/358 354/392/358 +f 331/394/362 333/1134/362 358/395/362 +f 352/397/358 337/1135/358 336/398/358 +f 356/400/363 379/1136/363 363/401/363 +f 331/1137/358 360/393/358 351/403/358 +f 337/349/354 377/1138/354 365/405/354 +f 365/407/357 377/1139/357 366/408/357 +f 378/1140/357 339/409/357 366/411/357 +f 367/413/357 375/1141/357 333/414/357 +f 369/416/356 383/1142/356 370/417/356 +f 336/361/364 368/1143/364 371/418/364 +f 351/372/365 380/1144/365 369/419/365 +f 372/421/366 374/1145/366 373/422/366 +f 338/424/367 339/1146/367 367/425/367 +f 330/1147/357 349/426/357 343/428/357 +f 346/1148/358 351/429/358 338/431/358 +f 345/432/368 343/1149/368 335/433/368 +f 349/1150/357 359/434/357 342/436/357 +f 345/432/358 362/1151/358 372/437/358 +f 362/439/369 363/1152/369 374/440/369 +f 339/442/357 378/1153/357 375/443/357 +f 380/470/358 373/444/358 369/446/358 +f 344/430/370 369/446/370 368/447/370 +f 352/397/371 353/1154/371 377/449/371 +f 355/1155/357 366/450/357 353/452/357 +f 357/1156/357 378/453/357 355/455/357 +f 375/457/357 359/1157/357 358/458/357 +f 360/460/372 358/1158/372 348/461/372 +f 361/1159/358 356/462/358 352/463/358 +f 372/421/358 364/1160/358 360/464/358 +f 376/1161/358 363/465/358 371/467/358 +f 361/468/373 371/467/373 379/469/373 +f 364/402/374 373/1162/374 380/470/374 +f 378/472/357 357/1163/357 359/473/357 +f 363/475/358 376/1164/358 373/422/358 +f 382/477/358 370/1165/358 383/478/358 +f 371/480/375 382/1166/375 381/481/375 +f 368/483/356 370/1167/356 382/484/375 +f 376/486/375 381/1168/375 383/487/356 +f 385/489/353 388/1169/353 386/490/353 +f 387/492/354 390/1170/354 388/493/354 +f 389/495/355 391/1171/355 390/496/355 +f 384/498/356 386/1172/356 391/499/356 +f 388/501/357 390/1170/357 391/499/357 +f 387/492/358 385/1173/358 384/502/358 +f 393/504/353 396/1174/353 394/505/353 +f 395/507/354 414/1175/354 396/508/354 +f 398/510/355 401/1176/355 399/511/355 +f 400/513/356 407/1177/356 401/514/356 +f 396/516/357 414/1175/357 402/517/357 +f 415/1178/358 403/518/358 405/520/358 +f 406/522/353 409/1179/353 407/523/353 +f 397/525/355 399/1180/355 402/526/355 +f 401/514/357 407/527/357 399/529/357 +f 411/531/358 413/1181/358 412/532/358 +f 392/534/353 394/1182/353 409/535/353 +f 394/537/357 402/1183/357 399/538/357 +f 403/540/358 415/1184/358 413/541/358 +f 408/543/355 402/1185/355 414/544/355 +f 405/546/353 417/1186/353 416/547/353 +f 404/519/354 423/1187/354 417/549/354 +f 410/551/355 419/1188/355 418/552/355 +f 412/553/356 420/1189/356 419/554/356 +f 413/556/353 422/1190/353 420/557/353 +f 411/559/355 418/1191/355 421/560/355 +f 415/562/353 416/1192/353 422/563/353 +f 403/565/355 421/1193/355 423/566/355 +f 417/568/353 393/1194/353 392/569/353 +f 423/571/354 395/1195/354 393/572/354 +f 419/574/355 398/1196/355 397/575/355 +f 420/577/356 400/1197/356 398/578/356 +f 422/580/353 406/1198/353 400/581/353 +f 418/583/355 397/1199/355 408/584/355 +f 392/586/376 427/1200/376 424/587/376 +f 421/589/355 408/1201/355 395/590/355 +f 424/592/353 427/1202/353 426/593/353 +f 416/595/377 424/1203/377 425/596/377 +f 406/598/378 426/1204/378 427/599/378 +f 422/601/379 425/1205/379 426/602/379 +f 429/604/353 432/1206/353 430/605/353 +f 431/607/354 434/1207/354 432/608/354 +f 433/610/355 435/1208/355 434/611/355 +f 428/613/356 430/1209/356 435/614/356 +f 432/616/357 434/1207/357 435/614/357 +f 431/607/358 429/1210/358 428/617/358 +f 437/619/380 440/1211/380 438/620/380 +f 439/622/381 463/1212/381 440/623/381 +f 442/625/382 445/1213/382 443/626/382 +f 444/628/383 468/1214/383 445/629/383 +f 440/631/357 463/1212/357 446/632/357 +f 448/634/358 450/1215/358 449/635/358 +f 450/637/380 452/1216/380 451/638/380 +f 448/640/381 458/1217/381 452/641/381 +f 454/643/382 457/1218/382 455/644/382 +f 456/646/383 459/1219/383 457/647/383 +f 452/649/380 437/1220/380 436/650/380 +f 458/652/381 439/1221/381 437/653/381 +f 457/655/382 442/1222/382 441/656/382 +f 459/658/383 444/1223/383 442/659/383 +f 436/661/380 438/1224/380 461/662/380 +f 462/664/382 446/1225/382 463/665/382 +f 438/667/357 446/1226/357 443/668/357 +f 447/670/358 449/1227/358 464/671/358 +f 449/673/380 451/1228/380 465/674/380 +f 447/676/382 467/1229/382 458/677/382 +f 436/661/383 472/1230/383 466/678/383 +f 467/680/382 462/1231/382 439/681/382 +f 441/683/382 443/1232/382 446/684/382 +f 453/686/382 455/1233/382 467/687/382 +f 455/689/382 441/1234/382 462/690/382 +f 460/692/380 461/1235/380 468/693/380 +f 461/695/357 443/1236/357 445/629/357 +f 453/696/358 464/1237/358 456/697/358 +f 464/699/380 465/1238/380 459/700/380 +f 465/702/380 460/1239/380 444/703/380 +f 470/705/383 473/1240/383 471/706/383 +f 451/708/357 466/1241/357 470/709/357 +f 460/692/358 469/1242/358 472/710/358 +f 465/702/381 470/1243/381 469/711/381 +f 474/713/380 475/1244/380 471/714/380 +f 472/716/381 475/1245/381 474/717/381 +f 466/719/358 474/1246/358 473/720/358 +f 469/722/357 471/1247/357 475/723/357 +f 477/725/353 480/1248/353 478/726/353 +f 479/728/354 482/1249/354 480/729/354 +f 481/731/355 483/1250/355 482/732/355 +f 476/734/356 478/1251/356 483/735/356 +f 480/737/357 482/1249/357 483/735/357 +f 479/728/358 477/1252/358 476/738/358 +f 485/740/353 527/1253/353 486/741/353 +f 488/743/356 503/1254/356 489/744/356 +f 491/746/355 512/1255/355 492/747/355 +f 494/749/354 509/1256/354 495/750/354 +f 489/752/358 503/1257/358 497/753/358 +f 499/755/357 485/1258/357 484/756/357 +f 484/758/367 486/1259/367 501/759/367 +f 502/761/355 497/1260/355 503/762/355 +f 496/764/358 497/1261/358 505/765/358 +f 498/767/357 484/1262/357 500/768/357 +f 490/770/368 492/1263/368 505/771/368 +f 508/773/353 529/1264/353 509/774/353 +f 511/776/358 492/1265/358 512/777/358 +f 513/778/357 508/1266/357 494/779/357 +f 487/781/384 489/1267/384 515/782/384 +f 516/784/354 510/1268/354 512/785/354 +f 515/787/358 489/1269/358 496/788/358 +f 488/743/357 487/1270/357 518/790/357 +f 517/792/358 496/1271/358 504/793/358 +f 524/1272/357 507/769/357 518/794/357 +f 510/1273/358 520/795/358 511/797/358 +f 490/770/357 534/1274/357 516/798/357 +f 493/800/385 495/1275/385 520/801/385 +f 514/803/357 499/1276/357 498/804/357 +f 518/806/369 541/1277/369 525/807/369 +f 493/1278/357 522/799/357 513/809/357 +f 499/755/356 539/1279/356 527/811/356 +f 527/813/358 539/1280/358 528/814/358 +f 540/1281/358 501/815/358 528/817/358 +f 529/819/358 537/1282/358 495/820/358 +f 531/822/356 545/1283/356 532/823/356 +f 498/767/386 530/1284/386 533/824/386 +f 513/778/370 542/1285/370 531/825/370 +f 534/827/387 536/1286/387 535/828/387 +f 500/830/359 501/1287/359 529/831/359 +f 492/1288/358 511/832/358 505/834/358 +f 508/1289/357 513/835/357 500/837/357 +f 507/838/360 505/1290/360 497/839/360 +f 511/1291/358 521/840/358 504/842/358 +f 507/838/357 524/1292/357 534/843/357 +f 524/845/363 525/1293/363 536/846/363 +f 501/848/358 540/1294/358 537/849/358 +f 542/876/357 535/850/357 531/852/357 +f 506/836/365 531/852/365 530/853/365 +f 514/803/388 515/1295/388 539/855/388 +f 517/1296/358 528/856/358 515/858/358 +f 519/1297/358 540/859/358 517/861/358 +f 537/863/358 521/1298/358 520/864/358 +f 522/866/389 520/1299/389 510/867/389 +f 523/1300/357 518/868/357 514/869/357 +f 534/827/357 526/1301/357 522/870/357 +f 538/1302/357 525/871/357 533/873/357 +f 523/874/390 533/873/390 541/875/390 +f 526/808/391 535/1303/391 542/876/391 +f 540/878/358 519/1304/358 521/879/358 +f 525/881/357 538/1305/357 535/828/357 +f 544/883/357 532/1306/357 545/884/357 +f 533/886/375 544/1307/375 543/887/375 +f 530/889/356 532/1308/356 544/890/375 +f 538/892/375 543/1309/375 545/893/356 +f 547/895/356 550/1310/356 548/896/356 +f 549/898/353 568/1311/353 550/899/353 +f 552/901/354 555/1312/354 553/902/354 +f 554/904/355 561/1313/355 555/905/355 +f 550/907/357 568/1311/357 556/908/357 +f 569/1314/358 557/909/358 559/911/358 +f 560/913/356 563/1315/356 561/914/356 +f 551/916/354 553/1316/354 556/917/354 +f 555/905/357 561/918/357 553/920/357 +f 565/922/358 567/1317/358 566/923/358 +f 546/925/356 548/1318/356 563/926/356 +f 548/928/357 556/1319/357 553/929/357 +f 557/931/358 569/1320/358 567/932/358 +f 562/934/354 556/1321/354 568/935/354 +f 559/937/356 571/1322/356 570/938/356 +f 558/910/353 577/1323/353 571/940/353 +f 564/942/354 573/1324/354 572/943/354 +f 566/944/355 574/1325/355 573/945/355 +f 567/947/356 576/1326/356 574/948/356 +f 565/950/354 572/1327/354 575/951/354 +f 569/953/356 570/1328/356 576/954/356 +f 557/956/354 575/1329/354 577/957/354 +f 571/959/356 547/1330/356 546/960/356 +f 577/962/353 549/1331/353 547/963/353 +f 573/965/354 552/1332/354 551/966/354 +f 574/968/355 554/1333/355 552/969/355 +f 576/971/356 560/1334/356 554/972/356 +f 572/974/354 551/1335/354 562/975/354 +f 546/977/392 581/1336/392 578/978/392 +f 575/980/354 562/1337/354 549/981/354 +f 578/983/356 581/1338/356 580/984/356 +f 570/986/393 578/1339/393 579/987/393 +f 560/989/394 580/1340/394 581/990/394 +f 576/992/395 579/1341/395 580/993/395 +f 583/995/355 586/1342/355 584/996/355 +f 585/998/356 604/1343/356 586/999/356 +f 588/1001/353 591/1344/353 589/1002/353 +f 590/1004/354 597/1345/354 591/1005/354 +f 586/1007/357 604/1343/357 592/1008/357 +f 605/1346/358 593/1009/358 595/1011/358 +f 596/1013/355 599/1347/355 597/1014/355 +f 587/1016/353 589/1348/353 592/1017/353 +f 591/1005/357 597/1018/357 589/1020/357 +f 601/1022/358 603/1349/358 602/1023/358 +f 582/1025/355 584/1350/355 599/1026/355 +f 584/1028/357 592/1351/357 589/1029/357 +f 593/1031/358 605/1352/358 603/1032/358 +f 598/1034/353 592/1353/353 604/1035/353 +f 595/1037/355 607/1354/355 606/1038/355 +f 594/1010/356 613/1355/356 607/1040/356 +f 600/1042/353 609/1356/353 608/1043/353 +f 602/1044/354 610/1357/354 609/1045/354 +f 603/1047/355 612/1358/355 610/1048/355 +f 601/1050/353 608/1359/353 611/1051/353 +f 605/1053/355 606/1360/355 612/1054/355 +f 593/1056/353 611/1361/353 613/1057/353 +f 607/1059/355 583/1362/355 582/1060/355 +f 613/1062/356 585/1363/356 583/1063/356 +f 609/1065/353 588/1364/353 587/1066/353 +f 610/1068/354 590/1365/354 588/1069/354 +f 612/1071/355 596/1366/355 590/1072/355 +f 608/1074/353 587/1367/353 598/1075/353 +f 582/1077/396 617/1368/396 614/1078/396 +f 611/1080/353 598/1369/353 585/1081/353 +f 614/1083/355 617/1370/355 616/1084/355 +f 606/1086/397 614/1371/397 615/1087/397 +f 596/1089/398 616/1372/398 617/1090/398 +f 612/1092/399 615/1373/399 616/1093/399 +f 547/1095/356 627/1374/356 618/1096/356 +f 620/1098/355 622/1375/355 621/1099/355 +f 622/1101/356 624/1376/356 623/1102/356 +f 624/1104/353 626/1377/353 625/1105/353 +f 626/1107/354 620/1378/354 619/1108/354 +f 626/1107/358 624/1376/358 622/1110/358 +f 619/1111/357 621/1379/357 623/1102/357 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.mtl new file mode 100644 index 00000000..b19f0c1c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.mtl @@ -0,0 +1,23 @@ +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/rocket_t2 + +newmtl None_rocketT1.png +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/rocket_t2 + +newmtl None_rocketT1.png.002 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/rocket_t2 + +newmtl None_rocketT1.png.004 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/rocket_t2 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.obj new file mode 100644 index 00000000..fb49eb6c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/rocket_t2.obj @@ -0,0 +1,899 @@ +mtllib rocket_t2.mtl +o Rocket +v -0.867203 5.684977 0.867203 +v -0.867203 5.784976 0.867203 +v -0.867203 5.684977 -0.867203 +v -0.867203 5.784976 -0.867203 +v 0.867203 5.684977 0.867203 +v 0.867203 5.784976 0.867203 +v 0.867203 5.684977 -0.867203 +v 0.867203 5.784976 -0.867203 +v -0.700000 -0.025000 0.700000 +v -0.700000 0.075000 0.700000 +v -0.700000 -0.025000 -0.700000 +v -0.700000 0.075000 -0.700000 +v 0.700000 -0.025000 0.700000 +v 0.700000 0.075000 0.700000 +v 0.700000 -0.025000 -0.700000 +v 0.700000 0.075000 -0.700000 +v -0.600000 0.075000 0.600000 +v -0.600000 0.175000 0.600000 +v -0.600000 0.075000 -0.600000 +v -0.600000 0.175000 -0.600000 +v 0.600000 0.075000 0.600000 +v 0.600000 0.175000 0.600000 +v 0.600000 0.075000 -0.600000 +v 0.600000 0.175000 -0.600000 +v -0.100000 7.184501 0.100000 +v -0.100000 8.984502 0.100000 +v -0.100000 7.184501 -0.100000 +v -0.100000 8.984502 -0.100000 +v 0.100000 7.184501 0.100000 +v 0.100000 8.984502 0.100000 +v 0.100000 7.184501 -0.100000 +v 0.100000 8.984502 -0.100000 +v -0.500000 0.175000 0.500000 +v -0.500000 0.375000 0.500000 +v -0.500000 0.175000 -0.500000 +v -0.500000 0.375000 -0.500000 +v 0.500000 0.175000 0.500000 +v 0.500000 0.375000 0.500000 +v 0.500000 0.175000 -0.500000 +v 0.500000 0.375000 -0.500000 +v -0.900000 0.375000 0.900000 +v -0.900000 0.475000 0.900000 +v -0.900000 0.375000 -0.900000 +v -0.900000 0.475000 -0.900000 +v 0.900000 0.375000 0.900000 +v 0.900000 0.475000 0.900000 +v 0.900000 0.375000 -0.900000 +v 0.900000 0.475000 -0.900000 +v -0.802256 0.375325 0.897637 +v -0.802256 5.775334 0.897637 +v -0.802256 0.375325 0.797637 +v -0.802256 5.775334 0.797637 +v 0.897744 0.375325 0.897637 +v 0.897744 5.775334 0.897637 +v 0.897744 0.375325 0.797637 +v 0.897744 5.775334 0.797637 +v 0.798310 0.399330 0.800000 +v 0.798310 5.799326 0.800000 +v 0.798310 0.399330 -0.800000 +v 0.798310 5.799326 -0.800000 +v 0.898310 0.399330 0.800000 +v 0.898310 5.799326 0.800000 +v 0.898310 0.399330 -0.800000 +v 0.898310 5.799326 -0.800000 +v -0.898721 0.407736 0.895898 +v -0.898721 5.807732 0.895898 +v -0.898721 0.407736 -0.804103 +v -0.898721 5.807732 -0.804103 +v -0.798721 0.407736 0.895898 +v -0.798721 5.807732 0.895898 +v -0.798721 0.407736 -0.804103 +v -0.798721 5.807732 -0.804103 +v -0.898111 0.404094 -0.796410 +v -0.898111 5.804089 -0.796410 +v -0.898111 0.404094 -0.896410 +v -0.898111 5.804089 -0.896410 +v -0.398111 0.404094 -0.796410 +v -0.398111 5.804089 -0.796410 +v -0.398111 0.404094 -0.896410 +v -0.398111 5.804089 -0.896410 +v -0.400000 4.138270 -0.796410 +v -0.400000 5.799060 -0.796410 +v -0.400000 4.138270 -0.896410 +v -0.400000 5.799060 -0.896410 +v 0.400000 4.138270 -0.796410 +v 0.400000 5.799060 -0.796410 +v 0.400000 4.138270 -0.896410 +v 0.400000 5.799060 -0.896410 +v -0.400000 0.403183 -0.796410 +v -0.400000 3.403180 -0.796410 +v -0.400000 0.403183 -0.896410 +v -0.400000 3.403180 -0.896410 +v 0.400000 0.403183 -0.796410 +v 0.400000 3.403180 -0.796410 +v 0.400000 0.403183 -0.896410 +v 0.400000 3.403180 -0.896410 +v -0.200000 6.987399 0.200000 +v -0.200000 7.187399 0.200000 +v -0.200000 6.987399 -0.200000 +v -0.200000 7.187399 -0.200000 +v 0.200000 6.987399 0.200000 +v 0.200000 7.187399 0.200000 +v 0.200000 6.987399 -0.200000 +v 0.200000 7.187399 -0.200000 +v -0.800000 5.802254 0.800000 +v -0.800000 6.002254 0.800000 +v -0.800000 5.802254 -0.800000 +v -0.800000 6.002255 -0.800000 +v 0.800000 5.802254 0.800000 +v 0.800000 6.002254 0.800000 +v 0.800000 5.802254 -0.800000 +v 0.800000 6.002255 -0.800000 +v -0.700000 6.000873 0.700000 +v -0.700000 6.200872 0.700000 +v -0.700000 6.000873 -0.700000 +v -0.700000 6.200872 -0.700000 +v 0.700000 6.000873 0.700000 +v 0.700000 6.200872 0.700000 +v 0.700000 6.000873 -0.700000 +v 0.700000 6.200872 -0.700000 +v -0.600000 6.201362 0.600000 +v -0.600000 6.401362 0.600000 +v -0.600000 6.201362 -0.600000 +v -0.600000 6.401362 -0.600000 +v 0.600000 6.201362 0.600000 +v 0.600000 6.401362 0.600000 +v 0.600000 6.201362 -0.600000 +v 0.600000 6.401362 -0.600000 +v -0.500000 6.401852 0.500000 +v -0.500000 6.601852 0.500000 +v -0.500000 6.401852 -0.500000 +v -0.500000 6.601852 -0.500000 +v 0.500000 6.401852 0.500000 +v 0.500000 6.601852 0.500000 +v 0.500000 6.401852 -0.500000 +v 0.500000 6.601852 -0.500000 +v -0.400000 6.597856 0.400000 +v -0.400000 6.797855 0.400000 +v -0.400000 6.597856 -0.400000 +v -0.400000 6.797856 -0.400000 +v 0.400000 6.597856 0.400000 +v 0.400000 6.797855 0.400000 +v 0.400000 6.597856 -0.400000 +v 0.400000 6.797856 -0.400000 +v -0.300000 6.793045 0.300000 +v -0.300000 6.993045 0.300000 +v -0.300000 6.793045 -0.300000 +v -0.300000 6.993045 -0.300000 +v 0.300000 6.793045 0.300000 +v 0.300000 6.993045 0.300000 +v 0.300000 6.793045 -0.300000 +v 0.300000 6.993045 -0.300000 +v -1.421026 0.007384 -1.279605 +v -1.421026 1.507384 -1.279605 +v -1.491737 0.007384 -1.350315 +v -1.491737 1.507384 -1.350315 +v -1.279605 0.007384 -1.421026 +v -1.279605 1.507384 -1.421026 +v -1.350316 0.007384 -1.491737 +v -1.350316 1.507384 -1.491737 +v -0.855036 0.879847 -0.713615 +v -0.855036 1.679847 -0.713615 +v -0.996457 0.879847 -0.855036 +v -0.996457 1.679847 -0.855036 +v -0.713615 0.879847 -0.855036 +v -0.713615 1.679847 -0.855036 +v -0.855036 0.879847 -0.996458 +v -0.855036 1.679847 -0.996458 +v -0.996458 0.779847 -0.855036 +v -0.996458 1.579847 -0.855036 +v -1.137879 0.779847 -0.996457 +v -1.137879 1.579847 -0.996457 +v -0.855036 0.779847 -0.996457 +v -0.855036 1.579847 -0.996457 +v -0.996458 0.779847 -1.137879 +v -0.996458 1.579847 -1.137879 +v -1.137879 0.579847 -0.996457 +v -1.137879 1.379847 -0.996457 +v -1.279300 0.579847 -1.137879 +v -1.279300 1.379847 -1.137879 +v -0.996458 0.579847 -1.137879 +v -0.996458 1.379847 -1.137879 +v -1.137879 0.579847 -1.279300 +v -1.137879 1.379847 -1.279300 +v -1.279300 0.179847 -1.137879 +v -1.279300 0.979847 -1.137879 +v -1.420722 0.179847 -1.279300 +v -1.420722 0.979847 -1.279300 +v -1.137879 0.179847 -1.279300 +v -1.137879 0.979847 -1.279300 +v -1.279300 0.179847 -1.420722 +v -1.279300 0.979847 -1.420722 +v -1.279605 0.007383 1.408365 +v -1.279605 1.507384 1.408365 +v -1.350315 0.007383 1.479076 +v -1.350315 1.507384 1.479076 +v -1.421026 0.007383 1.266944 +v -1.421026 1.507384 1.266944 +v -1.491737 0.007383 1.337655 +v -1.491737 1.507384 1.337655 +v -0.855036 0.779847 0.983797 +v -0.855036 1.579847 0.983797 +v -0.996458 0.779847 1.125218 +v -0.996458 1.579847 1.125218 +v -0.996458 0.779847 0.842375 +v -0.996458 1.579847 0.842375 +v -1.137879 0.779847 0.983797 +v -1.137879 1.579847 0.983797 +v -0.996458 0.579847 1.125218 +v -0.996458 1.379847 1.125218 +v -1.137879 0.579847 1.266640 +v -1.137879 1.379847 1.266640 +v -1.137879 0.579847 0.983797 +v -1.137879 1.379847 0.983797 +v -1.279300 0.579847 1.125218 +v -1.279300 1.379847 1.125218 +v -1.137879 0.179847 1.266640 +v -1.137879 0.979847 1.266640 +v -1.279300 0.179847 1.408061 +v -1.279300 0.979847 1.408061 +v -1.279300 0.179847 1.125218 +v -1.279300 0.979847 1.125218 +v -1.420722 0.179847 1.266640 +v -1.420722 0.979847 1.266640 +v -0.713615 0.879847 0.842375 +v -0.713615 1.679847 0.842375 +v -0.855036 0.879847 0.983797 +v -0.855036 1.679847 0.983797 +v -0.855036 0.879847 0.700954 +v -0.855036 1.679847 0.700954 +v -0.996458 0.879847 0.842375 +v -0.996458 1.679847 0.842375 +v 1.408365 0.007383 1.266944 +v 1.408365 1.507383 1.266944 +v 1.479076 0.007383 1.337655 +v 1.479076 1.507383 1.337655 +v 1.266944 0.007383 1.408366 +v 1.266944 1.507383 1.408366 +v 1.337654 0.007383 1.479076 +v 1.337654 1.507383 1.479076 +v 0.983797 0.779847 0.842375 +v 0.983797 1.579847 0.842375 +v 1.125218 0.779846 0.983797 +v 1.125218 1.579847 0.983797 +v 0.842375 0.779847 0.983797 +v 0.842375 1.579847 0.983797 +v 0.983797 0.779846 1.125218 +v 0.983797 1.579847 1.125218 +v 1.125218 0.579846 0.983797 +v 1.125218 1.379847 0.983797 +v 1.266639 0.579846 1.125218 +v 1.266639 1.379847 1.125218 +v 0.983797 0.579846 1.125218 +v 0.983797 1.379847 1.125218 +v 1.125218 0.579846 1.266640 +v 1.125218 1.379847 1.266640 +v 1.266639 0.179846 1.125218 +v 1.266639 0.979846 1.125218 +v 1.408061 0.179846 1.266640 +v 1.408061 0.979846 1.266640 +v 1.125218 0.179846 1.266640 +v 1.125218 0.979846 1.266640 +v 1.266639 0.179846 1.408061 +v 1.266639 0.979846 1.408061 +v 0.842375 0.879847 0.700954 +v 0.842375 1.679847 0.700954 +v 0.983797 0.879847 0.842375 +v 0.983797 1.679847 0.842375 +v 0.700954 0.879847 0.842375 +v 0.700954 1.679847 0.842375 +v 0.842375 0.879847 0.983797 +v 0.842375 1.679847 0.983797 +v 1.266944 0.007383 -1.421026 +v 1.266944 1.507384 -1.421026 +v 1.337654 0.007383 -1.491737 +v 1.337654 1.507384 -1.491737 +v 1.408365 0.007383 -1.279605 +v 1.408365 1.507384 -1.279605 +v 1.479076 0.007383 -1.350316 +v 1.479076 1.507384 -1.350316 +v 0.842375 0.779847 -0.996458 +v 0.842375 1.579847 -0.996458 +v 0.983796 0.779847 -1.137879 +v 0.983796 1.579847 -1.137879 +v 0.983796 0.779847 -0.855036 +v 0.983796 1.579847 -0.855036 +v 1.125218 0.779847 -0.996458 +v 1.125218 1.579847 -0.996458 +v 0.983796 0.579847 -1.137879 +v 0.983796 1.379847 -1.137879 +v 1.125218 0.579847 -1.279300 +v 1.125218 1.379847 -1.279300 +v 1.125218 0.579847 -0.996458 +v 1.125218 1.379847 -0.996458 +v 1.266639 0.579847 -1.137879 +v 1.266639 1.379847 -1.137879 +v 1.125218 0.179847 -1.279300 +v 1.125218 0.979847 -1.279300 +v 1.266639 0.179847 -1.420722 +v 1.266639 0.979847 -1.420722 +v 1.266639 0.179847 -1.137879 +v 1.266639 0.979847 -1.137879 +v 1.408061 0.179847 -1.279300 +v 1.408061 0.979847 -1.279300 +v 0.700954 0.879847 -0.855036 +v 0.700954 1.679847 -0.855036 +v 0.842375 0.879847 -0.996458 +v 0.842375 1.679847 -0.996458 +v 0.842375 0.879847 -0.713615 +v 0.842375 1.679847 -0.713615 +v 0.983796 0.879847 -0.855036 +v 0.983796 1.679847 -0.855036 +v 0.395899 0.404094 -0.796410 +v 0.395899 5.804089 -0.796410 +v 0.395899 0.404094 -0.896410 +v 0.395899 5.804089 -0.896410 +v 0.895899 0.404094 -0.796410 +v 0.895899 5.804089 -0.796410 +v 0.895899 0.404094 -0.896410 +v 0.895899 5.804089 -0.896410 +v -0.150000 0.536412 -0.898030 +v -0.150000 1.036412 -0.898030 +v -0.150000 0.536412 -0.998030 +v -0.150000 1.036412 -0.998030 +v 0.150000 0.536412 -0.898030 +v 0.150000 1.036412 -0.898030 +v 0.150000 0.536412 -0.998030 +v 0.150000 1.036412 -0.998030 +v -0.250000 0.477908 -0.983898 +v -0.250000 1.277908 -0.983898 +v -0.250000 0.477908 -1.483898 +v -0.250000 1.277908 -1.483898 +v 0.250000 0.477908 -0.983898 +v 0.250000 1.277908 -0.983898 +v 0.250000 0.477908 -1.483898 +v 0.250000 1.277908 -1.483898 +v -0.200000 1.271981 -1.030706 +v -0.200000 1.471981 -1.030706 +v -0.200000 1.271981 -1.430707 +v -0.200000 1.471981 -1.430707 +v 0.200000 1.271981 -1.030706 +v 0.200000 1.471981 -1.030706 +v 0.200000 1.271981 -1.430707 +v 0.200000 1.471981 -1.430707 +v -0.898030 0.536412 0.150000 +v -0.898030 1.036412 0.150000 +v -0.998030 0.536412 0.150000 +v -0.998030 1.036412 0.150000 +v -0.898030 0.536412 -0.150000 +v -0.898030 1.036412 -0.150000 +v -0.998030 0.536412 -0.150000 +v -0.998030 1.036412 -0.150000 +v -0.983898 0.477908 0.250000 +v -0.983898 1.277908 0.250000 +v -1.483898 0.477908 0.250000 +v -1.483898 1.277908 0.250000 +v -0.983898 0.477908 -0.250000 +v -0.983898 1.277908 -0.250000 +v -1.483898 0.477908 -0.250000 +v -1.483898 1.277908 -0.250000 +v -1.030706 1.271981 0.200000 +v -1.030706 1.471981 0.200000 +v -1.430707 1.271981 0.200000 +v -1.430707 1.471981 0.200000 +v -1.030706 1.271981 -0.200000 +v -1.030706 1.471981 -0.200000 +v -1.430707 1.271981 -0.200000 +v -1.430707 1.471981 -0.200000 +v 0.150000 0.536412 0.898030 +v 0.150000 1.036412 0.898030 +v 0.150000 0.536412 0.998030 +v 0.150000 1.036412 0.998030 +v -0.150000 0.536412 0.898030 +v -0.150000 1.036412 0.898030 +v -0.150000 0.536412 0.998030 +v -0.150000 1.036412 0.998030 +v 0.250000 0.477908 0.983898 +v 0.250000 1.277908 0.983898 +v 0.250000 0.477908 1.483898 +v 0.250000 1.277908 1.483898 +v -0.250000 0.477908 0.983898 +v -0.250000 1.277908 0.983898 +v -0.250000 0.477908 1.483898 +v -0.250000 1.277908 1.483898 +v 0.200000 1.271981 1.030706 +v 0.200000 1.471981 1.030706 +v 0.200000 1.271981 1.430707 +v 0.200000 1.471981 1.430707 +v -0.200000 1.271981 1.030706 +v -0.200000 1.471981 1.030706 +v -0.200000 1.271981 1.430707 +v -0.200000 1.471981 1.430707 +v 0.898030 0.536412 -0.150000 +v 0.898030 1.036412 -0.150000 +v 0.998030 0.536412 -0.150000 +v 0.998030 1.036412 -0.150000 +v 0.898030 0.536412 0.150000 +v 0.898030 1.036412 0.150000 +v 0.998030 0.536412 0.150000 +v 0.998030 1.036412 0.150000 +v 0.983898 0.477908 -0.250000 +v 0.983898 1.277908 -0.250000 +v 1.483898 0.477908 -0.250000 +v 1.483898 1.277908 -0.250000 +v 0.983898 0.477908 0.250000 +v 0.983898 1.277908 0.250000 +v 1.483898 0.477908 0.250000 +v 1.483898 1.277908 0.250000 +v 1.030706 1.271981 -0.200000 +v 1.030706 1.471981 -0.200000 +v 1.430707 1.271981 -0.200000 +v 1.430707 1.471981 -0.200000 +v 1.030706 1.271981 0.200000 +v 1.030706 1.471981 0.200000 +v 1.430707 1.271981 0.200000 +v 1.430707 1.471981 0.200000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.238606 0.937792 +vt 0.245889 0.937792 +vt 0.245889 0.995739 +vt 0.238606 0.995739 +vt 0.055831 0.944961 +vt 0.110552 0.944961 +vt 0.110552 0.999682 +vt 0.055831 0.999682 +vt 0.110275 0.946323 +vt 0.163310 0.946323 +vt 0.163310 0.999358 +vt 0.110275 0.999358 +vt 0.056735 0.944690 +vt 0.110441 0.944690 +vt 0.110441 0.998396 +vt 0.056735 0.998396 +vt 0.977420 0.429486 +vt 0.984200 0.429486 +vt 0.984200 0.360492 +vt 0.977420 0.360492 +vt 0.976892 0.430600 +vt 0.983500 0.430600 +vt 0.983500 0.437208 +vt 0.976892 0.437208 +vt 0.535233 0.707529 +vt 0.605835 0.707529 +vt 0.605835 0.714124 +vt 0.535233 0.714124 +vt 0.535233 0.654047 +vt 0.605835 0.654047 +vt 0.605835 0.660643 +vt 0.535233 0.660643 +vt 0.055473 0.946228 +vt 0.108793 0.946228 +vt 0.108793 0.999548 +vt 0.055473 0.999548 +vt 0.540032 0.784586 +vt 0.595117 0.784586 +vt 0.595117 0.932285 +vt 0.540032 0.932285 +vt 0.535578 0.783240 +vt 0.597104 0.783240 +vt 0.597104 0.936269 +vt 0.535578 0.936269 +vt 0.603734 0.486570 +vt 0.608592 0.486570 +vt 0.608592 0.636697 +vt 0.603734 0.636697 +vt 0.601026 0.657552 +vt 0.535220 0.657552 +vt 0.535220 0.450187 +vt 0.601026 0.450187 +vt 0.534092 0.653000 +vt 0.606045 0.653000 +vt 0.606045 0.660021 +vt 0.534092 0.660021 +vt 0.605626 0.444683 +vt 0.539294 0.444683 +vt 0.539294 0.235488 +vt 0.605626 0.235488 +vt 0.601779 0.659296 +vt 0.535242 0.659296 +vt 0.535242 0.448402 +vt 0.601779 0.448402 +vt 0.603734 0.503321 +vt 0.608592 0.503321 +vt 0.608592 0.653449 +vt 0.603734 0.653449 +vt 0.534092 0.652584 +vt 0.606045 0.652584 +vt 0.606045 0.659605 +vt 0.534092 0.659605 +vt 0.426017 0.835789 +vt 0.429636 0.835789 +vt 0.429636 0.995989 +vt 0.426017 0.995989 +vt 0.425623 0.996263 +vt 0.406315 0.996263 +vt 0.406315 0.786300 +vt 0.425623 0.786300 +vt 0.402443 0.835789 +vt 0.429789 0.835789 +vt 0.429789 0.995989 +vt 0.402443 0.995989 +vt 0.406275 0.996133 +vt 0.429639 0.996133 +vt 0.429639 0.999967 +vt 0.406275 0.999967 +vt 0.371084 0.996143 +vt 0.332199 0.996143 +vt 0.332199 0.930074 +vt 0.371084 0.930074 +vt 0.534491 0.653518 +vt 0.606369 0.653518 +vt 0.606369 0.660388 +vt 0.534491 0.660388 +vt 0.370850 0.925602 +vt 0.332293 0.925602 +vt 0.332293 0.809118 +vt 0.370850 0.809118 +vt 0.874947 0.695620 +vt 0.937689 0.695620 +vt 0.937689 0.702715 +vt 0.874947 0.702715 +vt 0.812800 0.704156 +vt 0.874008 0.704156 +vt 0.874008 0.765363 +vt 0.812800 0.765363 +vt 0.598937 0.520005 +vt 0.608583 0.520005 +vt 0.608583 0.561538 +vt 0.598937 0.561538 +vt 0.425623 0.780873 +vt 0.406315 0.780873 +vt 0.406315 0.570923 +vt 0.425623 0.570923 +vt 0.402679 0.615370 +vt 0.405676 0.615370 +vt 0.405676 0.775157 +vt 0.402679 0.775157 +vt 0.429785 0.671952 +vt 0.448953 0.671952 +vt 0.448953 0.831739 +vt 0.429785 0.831739 +vt 0.402443 0.671952 +vt 0.402443 0.831739 +vt 0.406275 0.784512 +vt 0.429639 0.784512 +vt 0.429639 0.788336 +vt 0.406275 0.788336 +vt 0.607801 0.904325 +vt 0.625358 0.904325 +vt 0.625358 0.921883 +vt 0.607801 0.921883 +vt 0.621027 0.957030 +vt 0.640646 0.957030 +vt 0.640646 0.926030 +vt 0.621027 0.926030 +vt 0.641035 0.976458 +vt 0.659857 0.976458 +vt 0.659857 0.957510 +vt 0.641035 0.957510 +vt 0.621316 0.976455 +vt 0.640606 0.976455 +vt 0.640606 0.957114 +vt 0.621316 0.957114 +vt 0.617813 0.999157 +vt 0.633756 0.999157 +vt 0.633756 0.977890 +vt 0.617813 0.977890 +vt 0.632339 0.999895 +vt 0.648283 0.999895 +vt 0.648283 0.984721 +vt 0.632339 0.984721 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 0.707100 +usemtl None +f 2/1/1 4/2/1 3/3/1 1/4/1 +f 4/1/2 8/2/2 7/3/2 3/4/2 +f 8/1/3 6/2/3 5/3/3 7/4/3 +f 6/1/4 2/2/4 1/3/4 5/4/4 +f 1/5/5 3/6/5 7/7/5 5/8/5 +f 6/1/6 8/2/6 4/3/6 2/4/6 +f 10/9/1 12/10/1 11/11/1 9/12/1 +f 12/9/2 16/10/2 15/11/2 11/12/2 +f 16/9/3 14/10/3 13/11/3 15/12/3 +f 14/9/4 10/10/4 9/11/4 13/12/4 +f 9/13/5 11/14/5 15/15/5 13/16/5 +f 14/17/6 16/18/6 12/19/6 10/20/6 +f 18/9/1 20/10/1 19/11/1 17/12/1 +f 20/9/2 24/10/2 23/11/2 19/12/2 +f 24/9/3 22/10/3 21/11/3 23/12/3 +f 22/9/4 18/10/4 17/11/4 21/12/4 +f 17/1/5 19/2/5 23/3/5 21/4/5 +f 22/17/6 24/18/6 20/19/6 18/20/6 +f 26/21/1 28/22/1 27/23/1 25/24/1 +f 28/21/2 32/22/2 31/23/2 27/24/2 +f 32/21/3 30/22/3 29/23/3 31/24/3 +f 30/21/4 26/22/4 25/23/4 29/24/4 +f 25/1/5 27/2/5 31/3/5 29/4/5 +f 30/25/6 32/26/6 28/27/6 26/28/6 +f 34/9/1 36/10/1 35/11/1 33/12/1 +f 36/9/2 40/10/2 39/11/2 35/12/2 +f 40/9/3 38/10/3 37/11/3 39/12/3 +f 38/9/4 34/10/4 33/11/4 37/12/4 +f 33/1/5 35/2/5 39/3/5 37/4/5 +f 38/1/6 40/2/6 36/3/6 34/4/6 +f 42/29/1 44/30/1 43/31/1 41/32/1 +f 44/33/2 48/34/2 47/35/2 43/36/2 +f 48/29/3 46/30/3 45/31/3 47/32/3 +f 46/29/4 42/30/4 41/31/4 45/32/4 +f 41/37/5 43/38/5 47/39/5 45/40/5 +f 46/41/6 48/42/6 44/43/6 42/44/6 +f 50/1/1 52/2/1 51/3/1 49/4/1 +f 52/45/2 56/46/2 55/47/2 51/48/2 +f 56/49/3 54/50/3 53/51/3 55/52/3 +f 54/53/4 50/54/4 49/55/4 53/56/4 +f 49/1/5 51/2/5 55/3/5 53/4/5 +f 54/57/6 56/58/6 52/59/6 50/60/6 +f 58/45/1 60/46/1 59/47/1 57/48/1 +f 60/1/2 64/2/2 63/3/2 59/4/2 +f 64/61/3 62/62/3 61/63/3 63/64/3 +f 62/1/4 58/2/4 57/3/4 61/4/4 +f 57/1/5 59/2/5 63/3/5 61/4/5 +f 62/57/6 64/58/6 60/59/6 58/60/6 +f 66/65/1 68/66/1 67/67/1 65/68/1 +f 68/1/2 72/2/2 71/3/2 67/4/2 +f 72/45/3 70/46/3 69/47/3 71/48/3 +f 70/69/4 66/70/4 65/71/4 69/72/4 +f 65/1/5 67/2/5 71/3/5 69/4/5 +f 70/73/6 72/74/6 68/75/6 66/76/6 +f 74/77/1 76/78/1 75/79/1 73/80/1 +f 76/81/2 80/82/2 79/83/2 75/84/2 +f 80/45/3 78/46/3 77/47/3 79/48/3 +f 78/45/4 74/46/4 73/47/4 77/48/4 +f 73/85/5 75/86/5 79/87/5 77/88/5 +f 78/89/6 80/90/6 76/91/6 74/92/6 +f 82/1/1 84/2/1 83/3/1 81/4/1 +f 84/93/2 88/94/2 87/95/2 83/96/2 +f 88/1/3 86/2/3 85/3/3 87/4/3 +f 86/45/4 82/46/4 81/47/4 85/48/4 +f 81/45/5 83/46/5 87/47/5 85/48/5 +f 86/97/6 88/98/6 84/99/6 82/100/6 +f 90/1/1 92/2/1 91/3/1 89/4/1 +f 92/101/2 96/102/2 95/103/2 91/104/2 +f 96/1/3 94/2/3 93/3/3 95/4/3 +f 94/45/4 90/46/4 89/47/4 93/48/4 +f 89/1/5 91/2/5 95/3/5 93/4/5 +f 94/45/6 96/46/6 92/47/6 90/48/6 +f 98/105/1 100/106/1 99/107/1 97/108/1 +f 100/105/2 104/106/2 103/107/2 99/108/2 +f 104/105/3 102/106/3 101/107/3 103/108/3 +f 102/105/4 98/106/4 97/107/4 101/108/4 +f 97/1/5 99/2/5 103/3/5 101/4/5 +f 102/109/6 104/110/6 100/111/6 98/112/6 +f 106/105/1 108/106/1 107/107/1 105/108/1 +f 108/105/2 112/106/2 111/107/2 107/108/2 +f 112/105/3 110/106/3 109/107/3 111/108/3 +f 110/105/4 106/106/4 105/107/4 109/108/4 +f 105/1/5 107/2/5 111/3/5 109/4/5 +f 110/109/6 112/110/6 108/111/6 106/112/6 +f 114/105/1 116/106/1 115/107/1 113/108/1 +f 116/105/2 120/106/2 119/107/2 115/108/2 +f 120/105/3 118/106/3 117/107/3 119/108/3 +f 118/105/4 114/106/4 113/107/4 117/108/4 +f 113/1/5 115/2/5 119/3/5 117/4/5 +f 118/109/6 120/110/6 116/111/6 114/112/6 +f 122/105/1 124/106/1 123/107/1 121/108/1 +f 124/105/2 128/106/2 127/107/2 123/108/2 +f 128/105/3 126/106/3 125/107/3 127/108/3 +f 126/105/4 122/106/4 121/107/4 125/108/4 +f 121/1/5 123/2/5 127/3/5 125/4/5 +f 126/109/6 128/110/6 124/111/6 122/112/6 +f 130/105/1 132/106/1 131/107/1 129/108/1 +f 132/105/2 136/106/2 135/107/2 131/108/2 +f 136/105/3 134/106/3 133/107/3 135/108/3 +f 134/105/4 130/106/4 129/107/4 133/108/4 +f 129/1/5 131/2/5 135/3/5 133/4/5 +f 134/109/6 136/110/6 132/111/6 130/112/6 +f 138/105/1 140/106/1 139/107/1 137/108/1 +f 140/105/2 144/106/2 143/107/2 139/108/2 +f 144/105/3 142/106/3 141/107/3 143/108/3 +f 142/105/4 138/106/4 137/107/4 141/108/4 +f 137/1/5 139/2/5 143/3/5 141/4/5 +f 142/109/6 144/110/6 140/111/6 138/112/6 +f 146/105/1 148/106/1 147/107/1 145/108/1 +f 148/105/2 152/106/2 151/107/2 147/108/2 +f 152/105/3 150/106/3 149/107/3 151/108/3 +f 150/105/4 146/106/4 145/107/4 149/108/4 +f 145/1/5 147/2/5 151/3/5 149/4/5 +f 150/109/6 152/110/6 148/111/6 146/112/6 +f 154/5/7 156/6/7 155/7/7 153/8/7 +f 156/5/8 160/6/8 159/7/8 155/8/8 +f 160/5/9 158/6/9 157/7/9 159/8/9 +f 158/5/10 154/6/10 153/7/10 157/8/10 +f 153/5/5 155/6/5 159/7/5 157/8/5 +f 158/5/6 160/6/6 156/7/6 154/8/6 +f 162/5/7 164/6/7 163/7/7 161/8/7 +f 164/5/8 168/6/8 167/7/8 163/8/8 +f 168/5/9 166/6/9 165/7/9 167/8/9 +f 166/113/10 162/114/10 161/115/10 165/116/10 +f 161/5/5 163/6/5 167/7/5 165/8/5 +f 166/5/6 168/6/6 164/7/6 162/8/6 +f 170/5/7 172/6/7 171/7/7 169/8/7 +f 172/5/8 176/6/8 175/7/8 171/8/8 +f 176/5/9 174/6/9 173/7/9 175/8/9 +f 174/5/10 170/6/10 169/7/10 173/8/10 +f 169/5/5 171/6/5 175/7/5 173/8/5 +f 174/5/6 176/6/6 172/7/6 170/8/6 +f 178/5/7 180/6/7 179/7/7 177/8/7 +f 180/5/8 184/6/8 183/7/8 179/8/8 +f 184/5/9 182/6/9 181/7/9 183/8/9 +f 182/5/10 178/6/10 177/7/10 181/8/10 +f 177/5/5 179/6/5 183/7/5 181/8/5 +f 182/5/6 184/6/6 180/7/6 178/8/6 +f 186/5/7 188/6/7 187/7/7 185/8/7 +f 188/5/8 192/6/8 191/7/8 187/8/8 +f 192/5/9 190/6/9 189/7/9 191/8/9 +f 190/5/10 186/6/10 185/7/10 189/8/10 +f 185/5/5 187/6/5 191/7/5 189/8/5 +f 190/5/6 192/6/6 188/7/6 186/8/6 +f 194/5/10 196/6/10 195/7/10 193/8/10 +f 196/5/7 200/6/7 199/7/7 195/8/7 +f 200/5/8 198/6/8 197/7/8 199/8/8 +f 198/5/9 194/6/9 193/7/9 197/8/9 +f 193/5/5 195/6/5 199/7/5 197/8/5 +f 198/5/6 200/6/6 196/7/6 194/8/6 +f 202/5/10 204/6/10 203/7/10 201/8/10 +f 204/5/7 208/6/7 207/7/7 203/8/7 +f 208/5/8 206/6/8 205/7/8 207/8/8 +f 206/5/9 202/6/9 201/7/9 205/8/9 +f 201/5/5 203/6/5 207/7/5 205/8/5 +f 206/5/6 208/6/6 204/7/6 202/8/6 +f 210/5/10 212/6/10 211/7/10 209/8/10 +f 212/5/7 216/6/7 215/7/7 211/8/7 +f 216/5/8 214/6/8 213/7/8 215/8/8 +f 214/5/9 210/6/9 209/7/9 213/8/9 +f 209/5/5 211/6/5 215/7/5 213/8/5 +f 214/5/6 216/6/6 212/7/6 210/8/6 +f 218/5/10 220/6/10 219/7/10 217/8/10 +f 220/5/7 224/6/7 223/7/7 219/8/7 +f 224/5/8 222/6/8 221/7/8 223/8/8 +f 222/5/9 218/6/9 217/7/9 221/8/9 +f 217/5/5 219/6/5 223/7/5 221/8/5 +f 222/5/6 224/6/6 220/7/6 218/8/6 +f 226/5/10 228/6/10 227/7/10 225/8/10 +f 228/5/7 232/6/7 231/7/7 227/8/7 +f 232/5/8 230/6/8 229/7/8 231/8/8 +f 230/113/9 226/114/9 225/115/9 229/116/9 +f 225/5/5 227/6/5 231/7/5 229/8/5 +f 230/5/6 232/6/6 228/7/6 226/8/6 +f 234/5/9 236/6/9 235/7/9 233/8/9 +f 236/5/10 240/6/10 239/7/10 235/8/10 +f 240/5/7 238/6/7 237/7/7 239/8/7 +f 238/5/8 234/6/8 233/7/8 237/8/8 +f 233/5/5 235/6/5 239/7/5 237/8/5 +f 238/5/6 240/6/6 236/7/6 234/8/6 +f 242/5/9 244/6/9 243/7/9 241/8/9 +f 244/5/10 248/6/10 247/7/10 243/8/10 +f 248/5/7 246/6/7 245/7/7 247/8/7 +f 246/5/8 242/6/8 241/7/8 245/8/8 +f 241/5/5 243/6/5 247/7/5 245/8/5 +f 246/5/6 248/6/6 244/7/6 242/8/6 +f 250/5/9 252/6/9 251/7/9 249/8/9 +f 252/5/10 256/6/10 255/7/10 251/8/10 +f 256/5/7 254/6/7 253/7/7 255/8/7 +f 254/5/8 250/6/8 249/7/8 253/8/8 +f 249/5/5 251/6/5 255/7/5 253/8/5 +f 254/5/6 256/6/6 252/7/6 250/8/6 +f 258/5/9 260/6/9 259/7/9 257/8/9 +f 260/5/10 264/6/10 263/7/10 259/8/10 +f 264/5/7 262/6/7 261/7/7 263/8/7 +f 262/5/8 258/6/8 257/7/8 261/8/8 +f 257/5/5 259/6/5 263/7/5 261/8/5 +f 262/5/6 264/6/6 260/7/6 258/8/6 +f 266/5/9 268/6/9 267/7/9 265/8/9 +f 268/5/10 272/6/10 271/7/10 267/8/10 +f 272/5/7 270/6/7 269/7/7 271/8/7 +f 270/113/8 266/114/8 265/115/8 269/116/8 +f 265/5/5 267/6/5 271/7/5 269/8/5 +f 270/5/6 272/6/6 268/7/6 266/8/6 +f 274/5/8 276/6/8 275/7/8 273/8/8 +f 276/5/9 280/6/9 279/7/9 275/8/9 +f 280/5/10 278/6/10 277/7/10 279/8/10 +f 278/5/7 274/6/7 273/7/7 277/8/7 +f 273/5/5 275/6/5 279/7/5 277/8/5 +f 278/5/6 280/6/6 276/7/6 274/8/6 +f 282/5/8 284/6/8 283/7/8 281/8/8 +f 284/5/9 288/6/9 287/7/9 283/8/9 +f 288/5/10 286/6/10 285/7/10 287/8/10 +f 286/5/7 282/6/7 281/7/7 285/8/7 +f 281/5/5 283/6/5 287/7/5 285/8/5 +f 286/5/6 288/6/6 284/7/6 282/8/6 +f 290/5/8 292/6/8 291/7/8 289/8/8 +f 292/5/9 296/6/9 295/7/9 291/8/9 +f 296/5/10 294/6/10 293/7/10 295/8/10 +f 294/5/7 290/6/7 289/7/7 293/8/7 +f 289/5/5 291/6/5 295/7/5 293/8/5 +f 294/5/6 296/6/6 292/7/6 290/8/6 +f 298/5/8 300/6/8 299/7/8 297/8/8 +f 300/5/9 304/6/9 303/7/9 299/8/9 +f 304/5/10 302/6/10 301/7/10 303/8/10 +f 302/5/7 298/6/7 297/7/7 301/8/7 +f 297/5/5 299/6/5 303/7/5 301/8/5 +f 302/5/6 304/6/6 300/7/6 298/8/6 +f 306/5/8 308/6/8 307/7/8 305/8/8 +f 308/5/9 312/6/9 311/7/9 307/8/9 +f 312/5/10 310/6/10 309/7/10 311/8/10 +f 310/113/7 306/114/7 305/115/7 309/116/7 +f 305/5/5 307/6/5 311/7/5 309/8/5 +f 310/5/6 312/6/6 308/7/6 306/8/6 +f 314/45/1 316/46/1 315/47/1 313/48/1 +f 316/117/2 320/118/2 319/119/2 315/120/2 +f 320/121/3 318/122/3 317/123/3 319/124/3 +f 318/125/4 314/126/4 313/127/4 317/128/4 +f 313/129/5 315/125/5 319/128/5 317/130/5 +f 318/131/6 320/132/6 316/133/6 314/134/6 +f 322/135/1 324/136/1 323/137/1 321/138/1 +f 324/135/2 328/136/2 327/137/2 323/138/2 +f 328/135/3 326/136/3 325/137/3 327/138/3 +f 326/135/4 322/136/4 321/137/4 325/138/4 +f 321/135/5 323/136/5 327/137/5 325/138/5 +f 326/135/6 328/136/6 324/137/6 322/138/6 +f 330/139/1 332/140/1 331/141/1 329/142/1 +f 332/139/2 336/140/2 335/141/2 331/142/2 +f 336/139/3 334/140/3 333/141/3 335/142/3 +f 334/139/4 330/140/4 329/141/4 333/142/4 +f 329/143/5 331/144/5 335/145/5 333/146/5 +f 334/147/6 336/148/6 332/149/6 330/150/6 +f 338/151/1 340/152/1 339/153/1 337/154/1 +f 340/151/2 344/152/2 343/153/2 339/154/2 +f 344/151/3 342/152/3 341/153/3 343/154/3 +f 342/151/4 338/152/4 337/153/4 341/154/4 +f 337/151/5 339/152/5 343/153/5 341/154/5 +f 342/155/6 344/156/6 340/157/6 338/158/6 +f 346/135/4 348/136/4 347/137/4 345/138/4 +f 348/135/1 352/136/1 351/137/1 347/138/1 +f 352/135/2 350/136/2 349/137/2 351/138/2 +f 350/135/3 346/136/3 345/137/3 349/138/3 +f 345/135/5 347/136/5 351/137/5 349/138/5 +f 350/135/6 352/136/6 348/137/6 346/138/6 +f 354/139/4 356/140/4 355/141/4 353/142/4 +f 356/139/1 360/140/1 359/141/1 355/142/1 +f 360/139/2 358/140/2 357/141/2 359/142/2 +f 358/139/3 354/140/3 353/141/3 357/142/3 +f 353/143/5 355/144/5 359/145/5 357/146/5 +f 358/147/6 360/148/6 356/149/6 354/150/6 +f 362/151/4 364/152/4 363/153/4 361/154/4 +f 364/151/1 368/152/1 367/153/1 363/154/1 +f 368/151/2 366/152/2 365/153/2 367/154/2 +f 366/151/3 362/152/3 361/153/3 365/154/3 +f 361/151/5 363/152/5 367/153/5 365/154/5 +f 366/155/6 368/156/6 364/157/6 362/158/6 +f 370/135/3 372/136/3 371/137/3 369/138/3 +f 372/135/4 376/136/4 375/137/4 371/138/4 +f 376/135/1 374/136/1 373/137/1 375/138/1 +f 374/135/2 370/136/2 369/137/2 373/138/2 +f 369/135/5 371/136/5 375/137/5 373/138/5 +f 374/135/6 376/136/6 372/137/6 370/138/6 +f 378/139/3 380/140/3 379/141/3 377/142/3 +f 380/139/4 384/140/4 383/141/4 379/142/4 +f 384/139/1 382/140/1 381/141/1 383/142/1 +f 382/139/2 378/140/2 377/141/2 381/142/2 +f 377/143/5 379/144/5 383/145/5 381/146/5 +f 382/147/6 384/148/6 380/149/6 378/150/6 +f 386/151/3 388/152/3 387/153/3 385/154/3 +f 388/151/4 392/152/4 391/153/4 387/154/4 +f 392/151/1 390/152/1 389/153/1 391/154/1 +f 390/151/2 386/152/2 385/153/2 389/154/2 +f 385/151/5 387/152/5 391/153/5 389/154/5 +f 390/155/6 392/156/6 388/157/6 386/158/6 +f 394/135/2 396/136/2 395/137/2 393/138/2 +f 396/135/3 400/136/3 399/137/3 395/138/3 +f 400/135/4 398/136/4 397/137/4 399/138/4 +f 398/135/1 394/136/1 393/137/1 397/138/1 +f 393/135/5 395/136/5 399/137/5 397/138/5 +f 398/135/6 400/136/6 396/137/6 394/138/6 +f 402/139/2 404/140/2 403/141/2 401/142/2 +f 404/139/3 408/140/3 407/141/3 403/142/3 +f 408/139/4 406/140/4 405/141/4 407/142/4 +f 406/139/1 402/140/1 401/141/1 405/142/1 +f 401/143/5 403/144/5 407/145/5 405/146/5 +f 406/147/6 408/148/6 404/149/6 402/150/6 +f 410/151/2 412/152/2 411/153/2 409/154/2 +f 412/151/3 416/152/3 415/153/3 411/154/3 +f 416/151/4 414/152/4 413/153/4 415/154/4 +f 414/151/1 410/152/1 409/153/1 413/154/1 +f 409/151/5 411/152/5 415/153/5 413/154/5 +f 414/155/6 416/156/6 412/157/6 410/158/6 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/texture.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/texture.png new file mode 100644 index 00000000..e69de29b diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.mtl new file mode 100644 index 00000000..99650b53 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.mtl @@ -0,0 +1,11 @@ +newmtl tier3rocket +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/tier3rocket + +newmtl tier3rocket_tier3rocket.png +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.640000 0.640000 +d 1.000000 +map_Kd galacticraftplanets:blocks/tier3rocket diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.obj new file mode 100644 index 00000000..1243f44b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/tier3rocket.obj @@ -0,0 +1,1685 @@ +mtllib tier3rocket.mtl +o Cube +v -0.059738 6.493113 0.059739 +v -0.059738 6.493113 -0.059737 +v -0.059738 6.373637 0.059739 +v 0.059738 6.493113 -0.059737 +v -0.059738 6.373637 -0.059737 +v 0.059738 6.493113 0.059739 +v 0.059738 6.373637 -0.059737 +v 0.059738 6.373637 0.059739 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl tier3rocket +f 1/1/1 2/2/1 3/3/1 +f 2/1/2 4/2/2 5/3/2 +f 4/1/3 6/2/3 7/3/3 +f 6/1/4 1/2/4 8/3/4 +f 3/1/5 5/2/5 8/3/5 +f 6/1/6 4/2/6 1/3/6 +f 2/1/1 5/2/1 3/3/1 +f 4/1/2 7/2/2 5/3/2 +f 6/1/3 8/2/3 7/3/3 +f 1/1/4 3/2/4 8/3/4 +f 5/1/5 7/2/5 8/3/5 +f 4/1/6 2/2/6 1/3/6 +o NoseCone +v -1.005998 3.988554 0.427022 +v -0.409399 3.988554 1.013298 +v -0.687662 4.680286 0.291896 +v 0.409399 3.988554 -1.013296 +v -0.427021 3.988554 -1.005997 +v 0.279850 4.680286 -0.692651 +v 1.013297 3.988554 0.409400 +v 1.005998 3.988554 -0.427020 +v 0.692652 4.680286 0.279851 +v 0.427021 3.988554 1.005999 +v -0.279850 4.680286 0.692653 +v -0.692652 4.680286 -0.279849 +v -0.022676 5.204226 -0.009161 +v -0.291896 4.680286 -0.687661 +v -0.009556 5.204226 -0.022511 +v 0.687662 4.680286 -0.291894 +v 0.022512 5.204226 -0.009555 +v 0.291895 4.680286 0.687663 +v 0.009556 5.204226 0.022513 +v -1.013297 3.988554 -0.409398 +v 0.022676 5.204226 0.009163 +v 0.009162 5.204226 -0.022675 +v -0.022512 5.204226 0.009557 +v -0.009162 5.204226 0.022677 +vt 0.001993 0.906839 +vt 0.091636 0.906839 +vt 0.001993 0.996482 +vt 0.001815 0.903609 +vt 0.094865 0.903609 +vt 0.001815 0.996660 +vt 0.001172 0.902966 +vt 0.095508 0.902966 +vt 0.001172 0.997302 +vt 0.091636 0.996482 +vt 0.094865 0.996660 +vt 0.095508 0.997302 +vn -0.636300 0.419300 0.647500 +vn -0.007900 0.419300 -0.907800 +vn 0.907800 0.419300 -0.007900 +vn 0.007900 0.419300 0.907800 +vn -0.617400 0.786700 0.005400 +vn -0.440400 0.786700 -0.432700 +vn 0.432700 0.786700 -0.440400 +vn 0.440400 0.786700 0.432700 +vn 0.647500 0.419300 0.636300 +vn 0.636300 0.419300 -0.647500 +vn -0.647500 0.419300 -0.636300 +vn -0.907800 0.419300 0.007900 +vn 0.617400 0.786700 -0.005400 +vn -0.005400 0.786700 -0.617400 +vn -0.432700 0.786700 0.440400 +vn 0.005400 0.786700 0.617400 +vn -0.440300 0.786700 -0.432700 +vn 0.432800 0.786600 -0.440400 +vn 0.440300 0.786700 0.432700 +vn -0.432800 0.786600 0.440400 +usemtl tier3rocket_tier3rocket.png +f 9/4/7 10/5/7 11/6/7 +f 12/4/8 13/5/8 14/6/8 +f 15/4/9 16/5/9 17/6/9 +f 10/7/10 18/8/10 19/9/10 +f 20/4/11 11/5/11 21/6/11 +f 22/4/12 20/5/12 23/6/12 +f 24/4/13 14/5/13 25/6/13 +f 26/4/14 17/5/14 27/6/14 +f 18/4/15 15/5/15 26/6/15 +f 16/4/16 12/5/16 24/6/16 +f 13/4/17 28/5/17 22/6/17 +f 28/4/18 9/5/18 20/6/18 +f 17/4/19 24/5/19 29/6/19 +f 14/4/20 22/5/20 30/6/20 +f 11/4/21 19/5/21 31/6/21 +f 26/10/22 27/11/22 19/12/22 +f 10/5/7 19/13/7 11/6/7 +f 13/5/8 22/13/8 14/6/8 +f 16/5/9 24/13/9 17/6/9 +f 18/8/10 26/14/10 19/9/10 +f 11/5/11 31/13/11 21/6/11 +f 20/5/23 21/13/23 23/6/23 +f 14/5/24 30/13/24 25/6/24 +f 17/5/25 29/13/25 27/6/25 +f 15/5/15 17/13/15 26/6/15 +f 12/5/16 14/13/16 24/6/16 +f 28/5/17 20/13/17 22/6/17 +f 9/5/18 11/13/18 20/6/18 +f 24/5/19 25/13/19 29/6/19 +f 22/5/20 23/13/20 30/6/20 +f 19/5/26 32/13/26 31/6/26 +f 27/11/22 32/15/22 19/12/22 +o Boosters +v 0.794857 0.942041 1.014215 +v 0.571929 0.942041 0.791287 +v 0.794857 0.793944 1.014215 +v 0.794857 0.942041 0.568358 +v 0.571929 0.793944 0.791287 +v 1.017786 0.942041 0.791287 +v 0.794857 0.793944 0.568358 +v 1.017786 0.793944 0.791287 +v 0.795105 0.797082 1.089688 +v 0.500522 0.797083 0.795105 +v 0.795105 0.082555 1.089688 +v 0.795105 0.797083 0.500522 +v 0.500522 0.082555 0.795105 +v 1.089688 0.797082 0.795105 +v 0.795105 0.082555 0.500522 +v 1.089688 0.082555 0.795105 +v -1.014215 0.942041 0.794857 +v -0.791287 0.942041 0.571929 +v -1.014215 0.793944 0.794857 +v -0.568358 0.942041 0.794858 +v -0.791287 0.793944 0.571929 +v -0.791287 0.942041 1.017786 +v -0.568358 0.793944 0.794858 +v -0.791287 0.793944 1.017786 +v -1.089688 0.797082 0.795105 +v -0.795105 0.797083 0.500522 +v -1.089688 0.082555 0.795105 +v -0.500522 0.797083 0.795105 +v -0.795105 0.082555 0.500522 +v -0.795105 0.797082 1.089688 +v -0.500522 0.082555 0.795105 +v -0.795105 0.082555 1.089688 +v 1.014215 0.942041 -0.794857 +v 0.791287 0.942041 -0.571929 +v 1.014215 0.793944 -0.794857 +v 0.568358 0.942041 -0.794857 +v 0.791287 0.793944 -0.571929 +v 0.791287 0.942041 -1.017786 +v 0.568358 0.793944 -0.794857 +v 0.791287 0.793944 -1.017786 +v 1.089688 0.797082 -0.795105 +v 0.795105 0.797083 -0.500522 +v 1.089688 0.082555 -0.795105 +v 0.500522 0.797083 -0.795105 +v 0.795105 0.082555 -0.500522 +v 0.795105 0.797082 -1.089687 +v 0.500522 0.082555 -0.795105 +v 0.795105 0.082555 -1.089687 +v -0.794858 0.942041 -1.014215 +v -0.571929 0.942041 -0.791287 +v -0.794858 0.793944 -1.014215 +v -0.794858 0.942041 -0.568358 +v -0.571929 0.793944 -0.791287 +v -1.017786 0.942041 -0.791287 +v -0.794858 0.793944 -0.568358 +v -1.017786 0.793944 -0.791287 +v -0.795105 0.797082 -1.089688 +v -0.500522 0.797083 -0.795105 +v -0.795105 0.082555 -1.089688 +v -0.795105 0.797083 -0.500522 +v -0.500522 0.082555 -0.795105 +v -1.089688 0.797082 -0.795105 +v -0.795105 0.082555 -0.500522 +v -1.089688 0.082555 -0.795105 +vt 0.290886 0.977095 +vt 0.312896 0.977095 +vt 0.290886 0.984134 +vt 0.289664 0.926608 +vt 0.317723 0.926608 +vt 0.289664 0.954667 +vt 0.293920 0.984931 +vt 0.308879 0.984931 +vt 0.293920 0.999890 +vt 0.352239 0.956958 +vt 0.333462 0.956958 +vt 0.352239 0.925955 +vt 0.293585 0.956958 +vt 0.274808 0.956958 +vt 0.293585 0.925955 +vt 0.313082 0.956958 +vt 0.294305 0.956958 +vt 0.313082 0.925955 +vt 0.332742 0.956958 +vt 0.313966 0.956958 +vt 0.332742 0.925955 +vt 0.313900 0.957561 +vt 0.332808 0.957561 +vt 0.313900 0.976470 +vt 0.294223 0.957381 +vt 0.313163 0.957381 +vt 0.294223 0.976322 +vt 0.312896 0.984134 +vt 0.317723 0.954667 +vt 0.308879 0.999890 +vt 0.333462 0.925955 +vt 0.274808 0.925955 +vt 0.294305 0.925955 +vt 0.313966 0.925955 +vt 0.332808 0.976470 +vt 0.313163 0.976322 +vn -0.707100 0.000000 0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.707100 0.000000 -0.707100 +vn 0.707100 -0.000000 0.707100 +vn 0.000000 -1.000000 0.000000 +vn -0.000000 1.000000 0.000000 +usemtl tier3rocket_tier3rocket.png +f 33/16/27 34/17/27 35/18/27 +f 34/16/28 36/17/28 37/18/28 +f 36/16/29 38/17/29 39/18/29 +f 38/16/30 33/17/30 40/18/30 +f 35/19/31 37/20/31 40/21/31 +f 38/22/32 36/23/32 33/24/32 +f 41/25/27 42/26/27 43/27/27 +f 42/28/28 44/29/28 45/30/28 +f 44/31/29 46/32/29 47/33/29 +f 46/34/30 41/35/30 48/36/30 +f 43/37/31 45/38/31 48/39/31 +f 46/40/32 44/41/32 41/42/32 +f 49/16/28 50/17/28 51/18/28 +f 50/16/29 52/17/29 53/18/29 +f 52/16/30 54/17/30 55/18/30 +f 54/16/27 49/17/27 56/18/27 +f 51/19/31 53/20/31 56/21/31 +f 54/22/32 52/23/32 49/24/32 +f 57/25/28 58/26/28 59/27/28 +f 58/28/29 60/29/29 61/30/29 +f 60/31/30 62/32/30 63/33/30 +f 62/34/27 57/35/27 64/36/27 +f 59/37/31 61/38/31 64/39/31 +f 62/40/32 60/41/32 57/42/32 +f 65/16/30 66/17/30 67/18/30 +f 66/16/27 68/17/27 69/18/27 +f 68/16/28 70/17/28 71/18/28 +f 70/16/29 65/17/29 72/18/29 +f 67/19/31 69/20/31 72/21/31 +f 70/22/32 68/23/32 65/24/32 +f 73/25/30 74/26/30 75/27/30 +f 74/28/27 76/29/27 77/30/27 +f 76/31/28 78/32/28 79/33/28 +f 78/34/29 73/35/29 80/36/29 +f 75/37/31 77/38/31 80/39/31 +f 78/40/32 76/41/32 73/42/32 +f 81/16/29 82/17/29 83/18/29 +f 82/16/30 84/17/30 85/18/30 +f 84/16/27 86/17/27 87/18/27 +f 86/16/28 81/17/28 88/18/28 +f 83/19/31 85/20/31 88/21/31 +f 86/22/32 84/23/32 81/24/32 +f 89/25/29 90/26/29 91/27/29 +f 90/28/30 92/29/30 93/30/30 +f 92/31/27 94/32/27 95/33/27 +f 94/34/28 89/35/28 96/36/28 +f 91/37/31 93/38/31 96/39/31 +f 94/40/32 92/41/32 89/42/32 +f 34/17/27 37/43/27 35/18/27 +f 36/17/28 39/43/28 37/18/28 +f 38/17/29 40/43/29 39/18/29 +f 33/17/30 35/43/30 40/18/30 +f 37/20/31 39/44/31 40/21/31 +f 36/23/32 34/45/32 33/24/32 +f 42/26/27 45/46/27 43/27/27 +f 44/29/28 47/47/28 45/30/28 +f 46/32/29 48/48/29 47/33/29 +f 41/35/30 43/49/30 48/36/30 +f 45/38/31 47/50/31 48/39/31 +f 44/41/32 42/51/32 41/42/32 +f 50/17/28 53/43/28 51/18/28 +f 52/17/29 55/43/29 53/18/29 +f 54/17/30 56/43/30 55/18/30 +f 49/17/27 51/43/27 56/18/27 +f 53/20/31 55/44/31 56/21/31 +f 52/23/32 50/45/32 49/24/32 +f 58/26/28 61/46/28 59/27/28 +f 60/29/29 63/47/29 61/30/29 +f 62/32/30 64/48/30 63/33/30 +f 57/35/27 59/49/27 64/36/27 +f 61/38/31 63/50/31 64/39/31 +f 60/41/32 58/51/32 57/42/32 +f 66/17/30 69/43/30 67/18/30 +f 68/17/27 71/43/27 69/18/27 +f 70/17/28 72/43/28 71/18/28 +f 65/17/29 67/43/29 72/18/29 +f 69/20/31 71/44/31 72/21/31 +f 68/23/32 66/45/32 65/24/32 +f 74/26/30 77/46/30 75/27/30 +f 76/29/27 79/47/27 77/30/27 +f 78/32/28 80/48/28 79/33/28 +f 73/35/29 75/49/29 80/36/29 +f 77/38/31 79/50/31 80/39/31 +f 76/41/32 74/51/32 73/42/32 +f 82/17/29 85/43/29 83/18/29 +f 84/17/30 87/43/30 85/18/30 +f 86/17/27 88/43/27 87/18/27 +f 81/17/28 83/43/28 88/18/28 +f 85/20/31 87/44/31 88/21/31 +f 84/23/32 82/45/32 81/24/32 +f 90/26/29 93/46/29 91/27/29 +f 92/29/30 95/47/30 93/30/30 +f 94/32/27 96/48/27 95/33/27 +f 89/35/28 91/49/28 96/36/28 +f 93/38/31 95/50/31 96/39/31 +f 92/41/32 90/51/32 89/42/32 +o Rocket +v 1.489663 -0.260650 0.081097 +v 1.489663 -0.260650 -0.081097 +v 1.804969 -0.679494 0.081097 +v 1.489663 0.844951 0.081097 +v 0.879181 1.328376 0.081097 +v 0.879181 1.328376 -0.081097 +v 0.879181 0.222775 0.081097 +v 1.489663 0.844951 -0.081097 +v 0.879181 0.222775 -0.081097 +v 1.804969 0.426107 -0.081096 +v 1.804969 0.426107 0.081097 +v 1.804969 -0.679494 -0.081096 +v -1.489663 -0.260650 -0.081097 +v -1.489663 -0.260650 0.081097 +v -1.804969 -0.679494 -0.081097 +v -1.489663 0.844951 -0.081097 +v -0.879181 1.328376 -0.081097 +v -0.879181 1.328376 0.081097 +v -0.879181 0.222774 -0.081097 +v -1.489663 0.844951 0.081097 +v -0.879181 0.222774 0.081097 +v -1.804969 0.426107 0.081097 +v -1.804969 0.426107 -0.081097 +v -1.804969 -0.679494 0.081097 +v -0.927184 0.018899 -0.374607 +v -0.920505 0.018899 0.390731 +v -0.927184 0.018899 -0.374607 +v -0.390731 0.018899 -0.920505 +v -0.390731 0.018899 -0.920505 +v -0.836280 0.018616 0.354980 +v -0.842348 0.018616 -0.340331 +v -0.836280 0.018616 0.354980 +v 0.842348 0.018616 0.340331 +v 0.354980 0.018616 0.836280 +v 0.842348 0.018616 0.340331 +v 0.920505 0.018899 -0.390731 +v 0.374607 0.018899 -0.927184 +v 0.920505 0.018899 -0.390731 +v 0.390731 0.018899 0.920505 +v 0.927184 0.018899 0.374607 +v 0.390731 0.018899 0.920505 +v -0.340331 0.018616 0.842348 +v -0.007325 0.018616 -0.839314 +v 0.340331 0.018616 -0.842348 +v -0.007325 0.018616 -0.839314 +v 0.836280 0.018616 -0.354980 +v 0.340331 0.018616 -0.842348 +v 0.374607 -0.077696 -0.927184 +v 0.920505 -0.077696 -0.390731 +v 0.927184 -0.077696 0.374607 +v 0.390731 -0.077696 0.920505 +v -0.374607 -0.077696 0.927184 +v -0.374607 0.018899 0.927184 +v -0.920505 -0.077696 0.390731 +v -0.927184 -0.077696 -0.374607 +v -0.390731 -0.077696 -0.920505 +v 0.295850 0.018899 0.921333 +v 0.295850 0.018899 0.921333 +v -0.263655 0.018616 0.841679 +v -0.263655 0.018616 0.841679 +v 0.927184 0.018899 0.374607 +v -0.354980 0.018616 -0.836280 +v -0.842348 0.018616 -0.340331 +v 0.836280 0.018616 -0.354980 +v 0.374607 0.018899 -0.927184 +v -0.340331 0.018616 0.842348 +v -0.920505 0.018899 0.390731 +v -0.842348 3.988270 -0.340330 +v -0.354980 3.988270 -0.836279 +v -0.575797 4.680093 -0.232636 +v 0.008744 5.204226 0.020600 +v -0.008383 5.204226 0.020750 +v 0.009556 5.204226 0.022513 +v 0.008383 5.204226 -0.020748 +v 0.020599 5.204226 -0.008743 +v 0.009162 5.204226 -0.022675 +v 0.340331 3.988270 -0.842347 +v 0.836280 3.988270 -0.354979 +v 0.232637 4.680093 -0.575796 +v 0.842348 3.988270 0.340332 +v 0.571650 4.680093 -0.242650 +v 0.920505 3.988554 -0.390730 +v 0.374607 3.988554 -0.927183 +v 1.005998 3.988554 -0.427020 +v -0.836280 3.988270 0.354981 +v -0.571650 4.680093 0.242652 +v -0.374607 3.988554 0.927185 +v 0.390731 3.988554 0.920506 +v -0.409399 3.988554 1.013298 +v 0.020749 5.204226 0.008384 +v 0.022676 5.204226 0.009163 +v 0.927184 3.988554 0.374608 +v 0.427021 3.988554 1.005999 +v 0.575797 4.680093 0.232638 +v 0.242651 4.680093 0.571651 +v 0.018850 5.204220 0.007617 +v -0.020599 5.204226 0.008745 +v -0.020749 5.204226 -0.008382 +v -0.022512 5.204226 0.009557 +v -0.232637 4.680093 0.575798 +v -0.007616 5.204220 0.018851 +v -0.920505 3.988554 0.390732 +v -1.005998 3.988554 0.427022 +v -0.242651 4.680093 -0.571649 +v -0.018850 5.204220 -0.007615 +v -0.008744 5.204226 -0.020598 +v -0.022676 5.204226 -0.009161 +v -0.340331 3.988270 0.842349 +v -0.390731 3.988554 -0.920504 +v 0.409399 3.988554 -1.013296 +v 0.354980 3.988270 0.836281 +v 0.022512 5.204226 -0.009555 +v 1.013297 3.988554 0.409400 +v -0.005007 4.680093 -0.573722 +v 0.007616 5.204220 -0.018849 +v 0.295850 1.948675 0.921333 +v 0.390731 1.948675 0.920505 +v 0.295850 2.763297 0.921333 +v -0.018714 5.204220 0.007945 +v -0.009162 5.204226 0.022677 +v 0.018714 5.204220 -0.007943 +v -0.009556 5.204226 -0.022511 +v -0.927184 3.988554 -0.374606 +v -1.013297 3.988554 -0.409398 +v -0.278951 0.018899 0.926349 +v -0.374607 0.018899 0.927184 +v -0.427021 3.988554 -1.005997 +v -0.278951 0.018899 0.926349 +v 0.144246 4.680093 0.572509 +v 0.007944 5.204220 0.018715 +v 0.051816 6.389805 0.051816 +v 0.051816 6.389805 -0.051814 +v -0.051816 6.389805 0.051816 +v 0.051816 5.141355 0.051816 +v 0.051816 5.141355 -0.051814 +v -0.051816 6.389805 -0.051814 +v -0.051816 5.141355 -0.051814 +v -0.051816 5.141355 0.051816 +v -0.374607 1.948675 0.927184 +v -0.278951 1.948675 0.926349 +v -0.374607 2.763297 0.927184 +v 0.390731 2.763297 0.920505 +v -0.354980 2.744025 -0.836280 +v 0.836280 2.744025 -0.354980 +v 0.354980 2.744025 0.836280 +v 0.211021 3.988270 0.837537 +v -0.842348 2.744025 -0.340331 +v -0.278951 2.763297 0.926349 +v -0.273804 2.765314 0.841679 +v 0.842348 2.744025 0.340331 +v 0.340331 2.744025 -0.842348 +v -0.007325 3.988270 -0.839313 +v -0.273804 1.964659 0.841679 +v -0.340331 1.992424 0.842348 +v -0.340331 2.744025 0.842348 +v -0.354980 0.018616 -0.836280 +v 0.211021 0.018616 0.837536 +v 0.211021 0.018616 0.837536 +v 0.293480 2.765314 0.837536 +v 0.354980 0.018616 0.836280 +v 0.354980 1.992424 0.836280 +v 0.293480 1.964659 0.837536 +v -0.836280 2.744025 0.354980 +v 0.150881 -0.323499 -0.373444 +v 0.370754 -0.323499 -0.157376 +v 0.373444 -0.323499 0.150881 +v -0.157376 -0.323499 -0.370754 +v -0.373444 -0.323499 -0.150881 +v -0.370754 -0.323499 0.157376 +v -0.150881 -0.323499 0.373444 +v -0.278951 -0.077696 0.926349 +v -0.507571 -0.843672 -0.073998 +v -0.581607 -0.843672 0.000037 +v -0.352811 -0.659209 -0.000582 +v -0.965412 -1.322610 0.139715 +v -0.918290 -1.070062 0.000978 +v -1.103631 -1.322610 0.001495 +v -0.535294 -0.384754 0.076890 +v -0.612042 -0.384754 0.000142 +v 0.072953 -0.843672 -0.508632 +v 0.000008 -0.843672 -0.581577 +v 0.000673 -0.659209 -0.354066 +v -0.508662 -0.843672 0.072983 +v -0.534147 -0.162744 -0.077753 +v -0.612042 -0.162744 0.000142 +v 0.000673 -0.659209 0.352902 +v 0.000008 -0.843672 0.581652 +v 0.074043 -0.843672 0.507617 +v -0.534147 -0.384754 -0.077753 +v 0.114042 -1.070062 -0.801265 +v -0.001003 -1.070062 -0.916309 +v 0.136661 -1.322610 -0.962357 +v -0.001559 -1.322610 -1.100577 +v 0.076643 -0.384754 -0.535047 +v -0.000105 -0.384754 -0.611795 +v -0.000105 -0.162744 -0.611795 +v -0.001003 -1.070062 0.918265 +v 0.115761 -1.070062 0.801501 +v 0.010582 -1.531285 -1.052691 +v 1.053110 -1.531285 -0.010163 +v 0.007897 -1.377602 -0.785571 +v -0.001646 -1.531285 -1.129241 +v 0.000212 -1.531285 1.042736 +v 0.000158 -1.377602 0.778141 +v -0.803245 -1.070062 0.116022 +v -1.132462 -1.531285 0.001576 +v -1.042316 -1.531285 0.000208 +v -1.088115 -1.531285 0.045922 +v -0.001646 -1.531285 1.132392 +v -0.045519 -1.531285 1.088519 +v 0.042701 -1.531285 -1.084894 +v 1.085297 -1.531285 -0.042298 +v -0.777828 -1.377602 0.000155 +v -0.001559 -1.322610 1.103568 +v 0.142299 -1.531285 0.988447 +v 0.138727 -1.322610 0.963282 +v -0.000105 -0.162744 0.612079 +v -0.000105 -0.384754 0.612079 +v 0.077790 -0.162744 0.534184 +v 0.785883 -1.377602 -0.007584 +v -0.963346 -1.322610 -0.138791 +v -0.988517 -1.531285 -0.142369 +v -0.801526 -1.070062 -0.115786 +v 0.077790 -0.384754 0.534184 +v 0.081097 -0.260650 -1.489663 +v -0.081096 -0.260650 -1.489663 +v 0.081097 -0.679494 -1.804969 +v 0.081097 0.844951 -1.489663 +v 0.081097 1.328376 -0.879181 +v -0.081097 1.328376 -0.879181 +v 0.081097 0.222775 -0.879181 +v -0.081096 0.844951 -1.489663 +v -0.081097 0.222775 -0.879181 +v -0.081096 0.426107 -1.804969 +v 0.081097 0.426107 -1.804969 +v -0.081096 -0.679494 -1.804969 +v -0.081097 -0.260650 1.489663 +v 0.081096 -0.260650 1.489663 +v -0.081097 -0.679494 1.804969 +v -0.081097 0.844951 1.489663 +v -0.081097 1.328376 0.879181 +v 0.081097 1.328376 0.879181 +v -0.081097 0.222775 0.879181 +v 0.081096 0.844951 1.489663 +v 0.081097 0.222775 0.879181 +v 0.081096 0.426107 1.804969 +v -0.081097 0.426107 1.804969 +v 0.081096 -0.679494 1.804969 +v -0.007944 5.204220 -0.018713 +v -0.000164 5.204220 -0.018781 +v -0.180225 4.680093 0.575341 +v 0.004722 5.204220 0.018744 +v -0.005900 5.204220 0.018836 +v -0.354980 1.992424 -0.836280 +v -0.842348 1.992424 -0.340331 +v 0.836280 1.992424 -0.354980 +v 0.340331 1.992424 -0.842348 +v -0.263655 3.988270 0.841680 +v -0.836280 1.992424 0.354980 +v 0.842348 1.992424 0.340331 +v 0.157376 -0.323499 0.370754 +v -0.112354 -0.323499 0.373108 +v 0.119160 -0.323499 0.371088 +v 0.295850 -0.077696 0.921333 +v -0.067267 -0.843672 -0.514302 +v -0.040214 -0.659209 -0.313179 +v -0.307815 -0.659209 -0.045578 +v -0.139318 -1.322610 0.965809 +v -0.115663 -1.070062 0.803604 +v -0.076597 -0.384754 0.535587 +v -0.043512 -0.659209 0.308717 +v -0.308478 -0.659209 0.043752 +v 0.508921 -0.843672 -0.072664 +v 0.581622 -0.843672 0.000037 +v 0.354157 -0.659209 -0.000582 +v 0.309972 -0.659209 -0.044767 +v 0.045006 -0.659209 -0.309732 +v -0.072694 -0.843672 0.508950 +v -0.070887 -0.162744 -0.541013 +v -0.070887 -0.384754 -0.541013 +v 0.514348 -0.843672 0.067312 +v 0.313270 -0.659209 0.040305 +v 0.045669 -0.659209 0.307906 +v 0.801623 -1.070062 -0.113683 +v 0.916284 -1.070062 0.000978 +v 0.962754 -1.322610 -0.136264 +v 1.100514 -1.322610 0.001495 +v 0.076643 -0.162744 -0.535047 +v 0.611832 -0.384754 0.000142 +v 0.535340 -0.162744 -0.076350 +v 0.611832 -0.162744 0.000142 +v 0.535340 -0.384754 -0.076350 +v 0.810183 -1.070062 0.107079 +v 1.129171 -1.531285 0.001576 +v -0.132446 -1.531285 -0.998440 +v 0.998371 -1.531285 0.132376 +v 0.973038 -1.322610 0.128971 +v 0.541050 -0.384754 0.070924 +v 0.541050 -0.162744 0.070924 +v -0.129035 -1.322610 -0.973102 +v -0.107104 -1.070062 -0.810208 +v -0.535294 -0.162744 0.076891 +v -0.076597 -0.162744 0.535587 +vt 0.238862 0.761269 +vt 0.196218 0.761265 +vt 0.238861 0.739248 +vt 0.294707 0.718374 +vt 0.298494 0.672007 +vt 0.332244 0.738537 +vt 0.151118 0.810854 +vt 0.108474 0.810854 +vt 0.151118 0.768209 +vt 0.112259 0.765651 +vt 0.108474 0.719262 +vt 0.145988 0.699058 +vt 0.196218 0.803904 +vt 0.292148 0.736713 +vt 0.249504 0.736691 +vt 0.292148 0.694061 +vt 0.545828 0.446068 +vt 0.545828 0.488713 +vt 0.503183 0.446068 +vt 0.336031 0.765570 +vt 0.249504 0.694039 +vt 0.292140 0.672029 +vt 0.149773 0.672007 +vt 0.523389 0.764019 +vt 0.566033 0.764015 +vt 0.523388 0.786048 +vt 0.152332 0.718369 +vt 0.156119 0.672007 +vt 0.189870 0.738528 +vt 0.293387 0.768128 +vt 0.336031 0.768128 +vt 0.293387 0.810773 +vt 0.342375 0.765644 +vt 0.338590 0.719256 +vt 0.376107 0.699057 +vt 0.566033 0.721366 +vt 0.196224 0.672029 +vt 0.238868 0.672007 +vt 0.196224 0.714666 +vt 0.523388 0.788607 +vt 0.566032 0.788607 +vt 0.523388 0.831251 +vt 0.193658 0.765558 +vt 0.238868 0.714644 +vt 0.196216 0.736685 +vt 0.379892 0.672007 +vt 0.000000 0.000000 +vt 0.846005 0.001279 +vt 0.811658 0.312313 +vt 0.811658 0.129499 +vt 0.370970 0.257722 +vt 0.509820 0.257722 +vt 0.370970 0.396572 +vt 0.336789 0.131641 +vt 0.336763 0.001279 +vt 0.363459 0.159975 +vt 0.519132 0.442630 +vt 0.519157 0.314403 +vt 0.545811 0.372567 +vt 0.519157 0.131590 +vt 0.545828 0.284916 +vt 0.837153 0.789469 +vt 0.967509 0.789469 +vt 0.837153 0.919826 +vt 0.336789 0.314455 +vt 0.363459 0.284939 +vt 0.978379 0.773952 +vt 0.954901 0.863031 +vt 0.939617 0.714702 +vt 0.921698 0.864045 +vt 0.898220 0.776398 +vt 0.937762 0.717652 +vt 0.898220 0.651434 +vt 0.921698 0.562354 +vt 0.936993 0.710691 +vt 0.336763 0.442630 +vt 0.363441 0.372555 +vt 0.519132 0.001279 +vt 0.545828 0.159952 +vt 0.938300 0.561847 +vt 0.954901 0.561341 +vt 0.938849 0.707742 +vt 0.154354 0.181404 +vt 0.174260 0.181404 +vt 0.154354 0.312005 +vt 0.936993 0.714782 +vt 0.978379 0.648987 +vt 0.939617 0.710611 +vt 0.948027 0.863241 +vt 0.938849 0.717618 +vt 0.240281 0.445189 +vt 0.240281 0.472436 +vt 0.233042 0.445189 +vt 0.509707 0.769485 +vt 0.502469 0.769481 +vt 0.509707 0.721371 +vt 0.287865 0.787425 +vt 0.260618 0.787426 +vt 0.287865 0.739271 +vt 0.509707 0.820164 +vt 0.502470 0.820158 +vt 0.509707 0.772049 +vt 0.193658 0.816270 +vt 0.166411 0.816270 +vt 0.193658 0.768116 +vt 0.028321 0.007837 +vt 0.178223 0.007837 +vt 0.028321 0.484351 +vt 0.179118 0.486593 +vt 0.029476 0.486593 +vt 0.179118 0.327396 +vt 0.179956 0.002101 +vt 0.179956 0.234692 +vt 0.028639 0.002101 +vt 0.288771 0.001279 +vt 0.471165 0.314403 +vt 0.057323 0.777070 +vt 0.067384 0.825016 +vt 0.057323 0.825022 +vt 0.288797 0.131641 +vt 0.316395 0.476609 +vt 0.316395 0.445189 +vt 0.338656 0.476687 +vt 0.471140 0.001279 +vt 0.471165 0.131590 +vt 0.431039 0.777043 +vt 0.431039 0.824995 +vt 0.406745 0.825013 +vt 0.101265 0.747010 +vt 0.105915 0.748076 +vt 0.105915 0.777043 +vt 0.183648 0.445189 +vt 0.205892 0.446160 +vt 0.205892 0.485801 +vt 0.230483 0.476609 +vt 0.208451 0.476687 +vt 0.230483 0.445189 +vt 0.938293 0.492012 +vt 0.962580 0.491271 +vt 0.067384 0.672029 +vt 0.057323 0.748104 +vt 0.057323 0.672034 +vt 0.952523 0.932929 +vt 0.962580 0.932622 +vt 0.341215 0.485801 +vt 0.341430 0.445628 +vt 0.363459 0.445189 +vt 0.061625 0.747023 +vt 0.288797 0.314455 +vt 0.602160 0.343160 +vt 0.586933 0.286315 +vt 0.586933 0.205267 +vt 0.639658 0.319354 +vt 0.586192 0.319855 +vt 0.623695 0.274946 +vt 0.677464 0.275295 +vt 0.638922 0.257200 +vt 0.677464 0.213487 +vt 0.638922 0.232305 +vt 0.639658 0.170136 +vt 0.623695 0.214845 +vt 0.548386 0.214697 +vt 0.586192 0.170638 +vt 0.586933 0.232793 +vt 0.548386 0.276505 +vt 0.586933 0.257688 +vt 0.602160 0.275148 +vt 0.632975 0.170199 +vt 0.601755 0.804295 +vt 0.594442 0.804295 +vt 0.605771 0.761882 +vt 0.961588 0.080386 +vt 0.951840 0.063377 +vt 0.961588 0.028992 +vt 0.518419 0.539329 +vt 0.505581 0.519808 +vt 0.505581 0.491271 +vt 0.651898 0.777172 +vt 0.651898 0.804295 +vt 0.640691 0.761882 +vt 0.594442 0.777171 +vt 0.287865 0.797678 +vt 0.279309 0.789991 +vt 0.287865 0.789984 +vt 0.605771 0.630446 +vt 0.594442 0.588033 +vt 0.601755 0.588033 +vt 0.513277 0.491271 +vt 0.668385 0.823927 +vt 0.668385 0.866704 +vt 0.949281 0.063338 +vt 0.939533 0.080380 +vt 0.939533 0.028986 +vt 0.512266 0.749903 +vt 0.512266 0.721366 +vt 0.520829 0.721366 +vt 0.577769 0.525630 +vt 0.589303 0.525630 +vt 0.788556 0.507776 +vt 0.788556 0.895418 +vt 0.931483 0.023642 +vt 0.684542 0.895418 +vt 0.577769 0.866704 +vt 0.577769 0.823927 +vt 0.969637 0.023643 +vt 0.684542 0.507776 +vt 0.680022 0.507760 +vt 0.680022 0.491271 +vt 0.680022 0.911741 +vt 0.680022 0.895428 +vt 0.791733 0.507760 +vt 0.791733 0.895428 +vt 0.156027 0.769631 +vt 0.163852 0.768116 +vt 0.163852 0.782335 +vt 0.582451 0.491271 +vt 0.568592 0.491271 +vt 0.360535 0.768208 +vt 0.369091 0.768203 +vt 0.360535 0.775902 +vt 0.362042 0.910078 +vt 0.443408 0.910078 +vt 0.362042 0.991444 +vt 0.568592 0.901054 +vt 0.582451 0.901054 +vt 0.566033 0.519808 +vt 0.553339 0.539329 +vt 0.566033 0.491271 +vt 0.338590 0.768203 +vt 0.346414 0.769522 +vt 0.338590 0.782420 +vt 0.589303 0.866704 +vt 0.249496 0.966807 +vt 0.249496 0.938270 +vt 0.258059 0.966807 +vt 0.518419 0.670765 +vt 0.513277 0.718807 +vt 0.505581 0.718807 +vt 0.196216 0.739244 +vt 0.336031 0.692170 +vt 0.108474 0.768209 +vt 0.149773 0.745446 +vt 0.238862 0.803908 +vt 0.503183 0.488713 +vt 0.298494 0.745407 +vt 0.249496 0.672007 +vt 0.112259 0.692212 +vt 0.566032 0.786045 +vt 0.193658 0.692166 +vt 0.336031 0.810773 +vt 0.379892 0.745445 +vt 0.523389 0.721370 +vt 0.566032 0.831251 +vt 0.156119 0.745399 +vt 0.238861 0.736663 +vt 0.342375 0.692206 +vt 0.928925 0.315893 +vt 0.894578 0.444113 +vt 0.928925 0.133079 +vt 0.846005 0.442630 +vt 0.894578 0.002762 +vt 0.870291 0.443371 +vt 0.851361 0.001443 +vt 0.884521 0.002455 +vt 0.509820 0.396572 +vt 0.363441 0.070865 +vt 0.095508 0.902966 +vt 0.091636 0.996482 +vt 0.967509 0.919826 +vt 0.937762 0.707775 +vt 0.545811 0.070876 +vt 0.938305 0.707758 +vt 0.174260 0.312005 +vt 0.925360 0.863933 +vt 0.938624 0.717625 +vt 0.937882 0.717648 +vt 0.233042 0.472436 +vt 0.502469 0.721366 +vt 0.260618 0.739271 +vt 0.502470 0.772044 +vt 0.166411 0.768116 +vt 0.178223 0.484351 +vt 0.029477 0.327396 +vt 0.028639 0.234692 +vt 0.259781 0.001279 +vt 0.259806 0.131641 +vt 0.183649 0.001279 +vt 0.183674 0.131641 +vt 0.471140 0.442630 +vt 0.442175 0.314403 +vt 0.442150 0.442630 +vt 0.366042 0.314403 +vt 0.366018 0.442630 +vt 0.100557 0.824998 +vt 0.105915 0.824995 +vt 0.101265 0.777867 +vt 0.061625 0.777880 +vt 0.259806 0.314455 +vt 0.183674 0.314455 +vt 0.338656 0.445805 +vt 0.442150 0.001279 +vt 0.442175 0.131590 +vt 0.366018 0.001279 +vt 0.366043 0.131590 +vt 0.382451 0.777077 +vt 0.382451 0.825030 +vt 0.431039 0.748077 +vt 0.382451 0.748111 +vt 0.431039 0.672007 +vt 0.406745 0.672025 +vt 0.382451 0.672042 +vt 0.183864 0.485362 +vt 0.208451 0.445805 +vt 0.914006 0.492754 +vt 0.100557 0.672010 +vt 0.105915 0.672007 +vt 0.919363 0.933941 +vt 0.914006 0.934105 +vt 0.363459 0.484830 +vt 0.288771 0.442630 +vt 0.259781 0.442630 +vt 0.183648 0.442630 +vt 0.623695 0.342503 +vt 0.638922 0.284728 +vt 0.623695 0.146835 +vt 0.638922 0.203680 +vt 0.602160 0.147493 +vt 0.621003 0.146918 +vt 0.604830 0.147411 +vt 0.602160 0.215047 +vt 0.592820 0.170576 +vt 0.604830 0.215022 +vt 0.621003 0.214870 +vt 0.645252 0.804295 +vt 0.636651 0.761882 +vt 0.610216 0.761882 +vt 0.951840 0.404449 +vt 0.961588 0.387551 +vt 0.961588 0.438774 +vt 0.951840 0.106153 +vt 0.951840 0.361815 +vt 0.505581 0.690365 +vt 0.518419 0.654336 +vt 0.518419 0.555814 +vt 0.651898 0.615066 +vt 0.651898 0.588034 +vt 0.640691 0.630446 +vt 0.640691 0.646876 +vt 0.640691 0.745397 +vt 0.594442 0.615066 +vt 0.605771 0.646876 +vt 0.605771 0.745397 +vt 0.279309 0.797685 +vt 0.279309 0.850432 +vt 0.287865 0.843434 +vt 0.287865 0.850425 +vt 0.279309 0.843441 +vt 0.645252 0.588034 +vt 0.636651 0.630446 +vt 0.610216 0.630446 +vt 0.559041 0.491271 +vt 0.549300 0.539329 +vt 0.522864 0.539329 +vt 0.668385 0.568264 +vt 0.668385 0.525630 +vt 0.939533 0.387546 +vt 0.949281 0.404412 +vt 0.939533 0.438768 +vt 0.949281 0.106115 +vt 0.949281 0.361778 +vt 0.520829 0.749903 +vt 0.512266 0.948902 +vt 0.520829 0.920460 +vt 0.520829 0.948902 +vt 0.512266 0.920460 +vt 0.657904 0.525630 +vt 0.931483 0.444113 +vt 0.931483 0.040132 +vt 0.931483 0.427799 +vt 0.577769 0.568264 +vt 0.969637 0.444113 +vt 0.969637 0.040133 +vt 0.969637 0.427799 +vt 0.791733 0.491271 +vt 0.694242 0.491271 +vt 0.778812 0.491271 +vt 0.791733 0.911741 +vt 0.694242 0.911741 +vt 0.778812 0.911741 +vt 0.156027 0.783488 +vt 0.156027 0.878490 +vt 0.163852 0.866894 +vt 0.163852 0.879814 +vt 0.156027 0.865898 +vt 0.677463 0.491271 +vt 0.664870 0.491271 +vt 0.369091 0.775897 +vt 0.369091 0.821656 +vt 0.369091 0.828648 +vt 0.360535 0.828653 +vt 0.360535 0.821661 +vt 0.443408 0.991444 +vt 0.664870 0.901054 +vt 0.677464 0.901054 +vt 0.657904 0.866704 +vt 0.566033 0.690365 +vt 0.566033 0.718807 +vt 0.553339 0.670765 +vt 0.553339 0.654336 +vt 0.553339 0.555814 +vt 0.346414 0.783378 +vt 0.338590 0.866974 +vt 0.346414 0.878374 +vt 0.338590 0.879893 +vt 0.346414 0.865783 +vt 0.258059 0.938270 +vt 0.249496 0.767713 +vt 0.249496 0.739271 +vt 0.258059 0.739271 +vt 0.258059 0.767713 +vt 0.559041 0.718807 +vt 0.549300 0.670765 +vt 0.522864 0.670765 +vn -0.798900 -0.601400 0.000000 +vn 0.000000 -0.000000 1.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn -0.620800 -0.784000 0.000000 +vn 0.620800 0.784000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.798900 0.601400 0.000000 +vn 0.798900 -0.601400 0.000000 +vn 0.620800 -0.784000 0.000000 +vn -0.620800 0.784000 0.000000 +vn -0.798900 0.601400 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.700900 0.000000 -0.713300 +vn 1.000000 0.000000 -0.008700 +vn 0.713300 0.000000 0.700900 +vn -0.700900 0.000000 0.713200 +vn -1.000000 0.000000 0.008700 +vn -0.008700 0.000000 -1.000000 +vn -0.713300 0.000000 -0.700900 +vn 0.665900 -0.358400 0.654300 +vn 0.000000 1.000000 -0.000900 +vn 0.000000 1.000000 0.000200 +vn -0.654300 -0.358400 0.665900 +vn -0.933500 -0.358400 0.008100 +vn -0.000000 -1.000000 0.000000 +vn 0.933500 -0.358400 -0.008100 +vn 0.000000 1.000000 0.000500 +vn -0.489700 -0.727000 -0.481300 +vn 0.481300 -0.727000 -0.489700 +vn 0.489700 -0.727000 0.481300 +vn 0.000000 1.000000 -0.000500 +vn 0.654300 -0.358400 -0.665900 +vn -0.665900 -0.358400 -0.654300 +vn 0.006000 -0.727000 0.686600 +vn 0.008700 -0.000000 1.000000 +vn 0.686600 -0.727000 -0.006000 +vn 0.000000 1.000000 -0.000200 +vn -0.686600 -0.727000 0.006000 +vn -0.481300 -0.727000 0.489700 +vn 0.000000 1.000000 0.000900 +vn -0.006000 -0.727000 -0.686600 +vn -0.700900 -0.000000 0.713300 +vn 0.998200 -0.000000 0.060700 +vn -0.010100 0.000000 -0.999900 +vn -0.000200 -0.999700 -0.023800 +vn -0.999600 0.000000 0.028300 +vn 0.008100 -0.358400 0.933500 +vn -0.008100 -0.358400 -0.933500 +vn 0.001600 0.982300 0.187300 +vn -0.020400 0.000000 -0.999800 +vn -0.003600 -0.913500 -0.406900 +vn -0.290200 -0.913500 -0.285200 +vn -0.406900 -0.913500 0.003600 +vn -0.285200 -0.913500 0.290200 +vn 0.290200 -0.913500 0.285200 +vn 0.406900 -0.913500 -0.003600 +vn 0.285200 -0.913500 -0.290200 +vn 0.003600 -0.913500 0.406900 +vn -0.532200 0.658400 -0.532200 +vn -0.627300 0.461600 0.627300 +vn -0.587500 -0.556500 0.587500 +vn 0.533600 0.656200 -0.533600 +vn -0.531000 0.660400 0.531000 +vn -0.707100 0.000000 -0.707100 +vn 0.532300 0.658200 0.532300 +vn -0.588500 -0.554300 -0.588500 +vn 0.489500 0.721600 -0.489500 +vn 0.628800 0.457400 -0.628800 +vn 0.707100 0.000000 -0.707100 +vn 0.488100 0.723600 0.488100 +vn -0.443600 -0.778800 0.443600 +vn 0.703800 0.096400 -0.703800 +vn -0.448800 -0.772800 -0.448800 +vn -0.486600 0.725600 0.486600 +vn -0.703700 0.097500 0.703700 +vn 0.449000 -0.772500 0.449000 +vn 0.703800 0.096900 0.703800 +vn 0.628100 0.459400 0.628100 +vn 0.707100 -0.000000 0.707100 +vn -0.628000 0.459600 -0.628000 +vn 0.589600 -0.552000 -0.589600 +vn -0.703800 0.097000 -0.703800 +vn 0.448900 -0.772700 -0.448900 +vn -0.488000 0.723700 -0.488000 +vn -0.707100 -0.000000 0.707100 +vn 0.588600 -0.554200 0.588600 +vn 0.000000 -0.601400 0.798900 +vn 0.000000 -0.784000 0.620800 +vn 0.000000 0.784000 -0.620800 +vn 0.000000 0.601400 -0.798900 +vn 0.000000 -0.601400 -0.798900 +vn 0.000000 -0.784000 -0.620800 +vn 0.000000 0.784000 0.620800 +vn 0.000000 0.601400 0.798900 +vn -0.000000 -1.000000 -0.002000 +vn 0.000000 1.000000 0.000400 +vn 0.000000 1.000000 -0.000400 +vn -0.006200 -0.727000 -0.686600 +vn -0.005900 -0.727000 -0.686600 +vn -0.010100 0.000100 -0.999900 +vn -0.007300 0.000100 -1.000000 +vn -0.022800 -0.007000 -0.999700 +vn -0.000200 -0.999700 -0.024100 +vn -0.010100 -0.000100 -0.999900 +vn -0.022300 0.004300 -0.999700 +vn -0.007300 -0.000000 -1.000000 +vn 0.001400 0.982600 0.185600 +vn 0.003500 -0.913500 0.406900 +vn 0.488100 0.723500 0.488100 +usemtl tier3rocket_tier3rocket.png +f 97/52/33 98/53/33 99/54/33 +f 100/55/34 101/56/34 97/57/34 +f 101/58/35 102/59/35 103/60/35 +f 102/61/36 104/62/36 98/63/36 +f 98/53/37 97/52/37 105/64/37 +f 102/65/38 101/66/38 104/67/38 +f 106/68/39 107/69/39 108/70/39 +f 100/55/34 97/57/34 99/71/34 +f 104/67/40 100/72/40 106/73/40 +f 98/63/36 104/62/36 108/74/36 +f 109/75/41 110/76/41 111/77/41 +f 112/78/36 113/79/36 109/80/36 +f 113/81/39 114/82/39 115/83/39 +f 114/84/34 116/85/34 110/86/34 +f 110/76/42 109/75/42 117/87/42 +f 114/88/43 113/89/43 116/90/43 +f 118/91/35 119/92/35 120/93/35 +f 112/78/36 109/80/36 111/94/36 +f 116/90/44 112/95/44 118/96/44 +f 110/86/34 116/85/34 120/97/34 +f 121/98/34 122/98/34 123/98/34 +f 124/98/34 121/98/34 125/98/34 +f 126/98/34 127/98/34 128/98/34 +f 129/98/34 130/98/34 131/98/34 +f 132/98/34 133/98/34 134/98/34 +f 135/98/34 136/98/34 137/98/34 +f 138/99/45 127/100/45 126/101/45 +f 139/98/34 140/98/34 141/98/34 +f 140/98/34 142/98/34 143/98/34 +f 144/102/46 133/103/46 145/104/46 +f 145/102/47 132/103/47 146/104/47 +f 146/102/48 136/103/48 147/104/48 +f 148/102/49 149/103/49 150/104/49 +f 150/102/50 122/103/50 151/104/50 +f 152/102/51 124/103/51 144/104/51 +f 151/102/52 121/103/52 152/104/52 +f 153/98/34 135/98/34 154/98/34 +f 155/98/34 138/98/34 156/98/34 +f 136/98/34 132/98/34 157/98/34 +f 127/98/34 158/98/34 159/98/34 +f 142/98/34 129/98/34 160/98/34 +f 133/98/34 124/98/34 161/98/34 +f 138/98/34 126/98/34 162/98/34 +f 122/98/34 149/98/34 163/98/34 +f 164/105/53 165/106/53 166/107/53 +f 167/98/54 168/98/54 169/98/54 +f 170/98/55 171/98/55 172/98/55 +f 173/108/56 174/109/56 175/110/56 +f 174/109/57 176/111/57 177/112/57 +f 178/113/58 179/114/58 180/115/58 +f 181/116/59 164/105/59 182/117/59 +f 183/113/58 184/114/58 185/115/58 +f 186/98/60 167/98/60 187/98/60 +f 184/113/58 188/114/58 189/115/58 +f 190/118/61 191/119/61 192/120/61 +f 193/98/45 194/98/45 195/98/45 +f 196/121/62 182/122/62 197/123/62 +f 198/113/58 183/114/58 199/115/58 +f 166/124/63 200/125/63 201/126/63 +f 194/98/64 202/98/64 203/98/64 +f 204/127/65 181/116/65 196/128/65 +f 179/113/58 205/114/58 206/115/58 +f 176/111/66 207/129/66 190/130/66 +f 171/98/45 186/98/45 208/98/45 +f 188/113/58 178/114/58 209/115/58 +f 210/131/67 175/132/67 211/133/67 +f 212/134/68 213/135/68 214/136/68 +f 182/122/69 166/124/69 215/137/69 +f 168/98/70 193/98/70 216/98/70 +f 177/138/71 190/118/71 217/139/71 +f 175/132/72 177/138/72 211/133/72 +f 202/98/73 170/98/73 218/98/73 +f 219/113/58 198/114/58 220/115/58 +f 149/98/34 221/98/34 222/98/34 +f 205/113/58 219/114/58 223/115/58 +f 222/102/68 148/103/68 137/104/68 +f 221/98/34 153/98/34 224/98/34 +f 225/140/74 226/141/74 191/119/74 +f 227/142/45 228/143/45 229/144/45 +f 227/145/34 229/146/34 230/147/34 +f 228/148/39 227/149/39 231/150/39 +f 232/151/36 228/152/36 233/153/36 +f 229/154/35 232/155/35 234/156/35 +f 235/134/68 236/135/68 237/136/68 +f 157/157/47 134/158/47 188/159/47 +f 134/157/46 161/158/46 178/159/46 +f 161/157/51 125/158/51 179/159/51 +f 137/157/48 157/158/48 184/159/48 +f 125/157/52 123/158/52 205/159/52 +f 123/157/50 163/158/50 219/159/50 +f 184/160/68 183/161/68 238/162/68 +f 163/157/75 222/158/75 198/159/75 +f 137/163/68 213/164/68 222/165/68 +f 239/166/48 165/106/48 164/105/48 +f 240/167/75 174/109/75 173/108/75 +f 241/168/51 242/169/51 207/170/51 +f 243/171/47 164/105/47 181/116/47 +f 244/172/76 236/173/76 245/174/76 +f 241/175/52 207/129/52 176/111/52 +f 246/176/50 176/111/50 174/109/50 +f 247/177/68 173/178/68 248/179/68 +f 249/180/77 250/181/77 251/182/77 +f 158/98/34 139/98/34 252/98/34 +f 253/98/34 155/98/34 254/98/34 +f 244/183/78 245/184/78 255/185/78 +f 214/186/79 255/187/79 212/188/79 +f 130/98/34 253/98/34 256/98/34 +f 248/189/80 173/190/80 175/132/80 +f 254/191/51 257/192/51 256/193/51 +f 242/194/81 191/119/81 207/195/81 +f 236/196/82 212/197/82 258/198/82 +f 257/192/83 258/199/83 241/168/83 +f 259/200/46 181/116/46 204/127/46 +f 260/201/58 261/202/58 262/203/58 +f 152/204/84 144/205/84 263/206/84 +f 151/207/85 152/204/85 264/208/85 +f 150/209/86 151/207/86 265/210/86 +f 148/211/87 150/209/87 266/212/87 +f 146/213/88 147/214/88 262/215/88 +f 145/216/89 146/213/89 261/217/89 +f 144/205/90 145/216/90 260/218/90 +f 266/212/91 267/219/91 148/211/91 +f 268/220/92 269/221/92 270/222/92 +f 271/223/93 272/224/93 273/225/93 +f 270/226/94 274/227/94 275/228/94 +f 276/229/95 277/230/95 278/231/95 +f 270/222/96 269/221/96 279/232/96 +f 280/233/97 275/234/97 281/235/97 +f 282/236/98 283/237/98 284/238/98 +f 270/226/99 275/228/99 285/239/99 +f 277/230/100 286/240/100 287/241/100 +f 287/242/101 288/243/101 289/244/101 +f 290/245/102 291/246/102 292/247/102 +f 283/237/103 293/248/103 294/249/103 +f 295/250/104 296/251/104 297/250/104 +f 289/244/105 288/243/105 298/252/105 +f 296/251/106 299/253/106 300/253/106 +f 269/221/107 272/254/107 301/255/107 +f 271/223/108 273/225/108 302/256/108 +f 303/257/58 304/258/58 302/259/58 +f 305/260/58 306/261/58 299/253/58 +f 303/257/58 299/253/58 304/258/58 +f 307/262/58 308/263/58 296/251/58 +f 303/257/109 295/250/109 309/257/109 +f 310/264/110 305/265/110 311/266/110 +f 312/267/111 293/248/111 310/268/111 +f 313/269/112 314/270/112 315/271/112 +f 297/272/58 316/273/58 309/274/58 +f 273/275/113 272/254/113 317/276/113 +f 290/277/114 278/278/114 291/279/114 +f 302/280/115 273/281/115 318/282/115 +f 299/253/116 303/257/116 309/257/116 +f 269/221/117 319/283/117 272/254/117 +f 275/284/118 274/285/118 281/286/118 +f 282/287/119 320/288/119 314/289/119 +f 321/52/120 322/53/120 323/54/120 +f 324/55/39 325/56/39 321/57/39 +f 325/58/34 326/59/34 327/60/34 +f 326/61/35 328/62/35 322/63/35 +f 322/53/121 321/52/121 329/64/121 +f 326/65/122 325/66/122 328/67/122 +f 330/68/36 331/69/36 332/70/36 +f 324/55/39 321/57/39 323/71/39 +f 328/67/123 324/72/123 330/73/123 +f 322/63/35 328/62/35 332/74/35 +f 333/52/124 334/53/124 335/54/124 +f 336/55/35 337/56/35 333/57/35 +f 337/58/36 338/59/36 339/60/36 +f 338/61/39 340/62/39 334/63/39 +f 334/53/125 333/52/125 341/64/125 +f 338/65/126 337/66/126 340/67/126 +f 342/68/34 343/69/34 344/70/34 +f 336/55/35 333/57/35 335/71/35 +f 340/67/127 336/72/127 342/73/127 +f 334/63/39 340/62/39 344/74/39 +f 98/53/33 108/290/33 99/54/33 +f 101/56/34 103/291/34 97/57/34 +f 102/59/35 105/292/35 103/60/35 +f 105/293/36 102/61/36 98/63/36 +f 97/52/37 103/294/37 105/64/37 +f 101/66/38 100/72/38 104/67/38 +f 107/69/39 99/295/39 108/70/39 +f 107/296/34 100/55/34 99/71/34 +f 100/72/40 107/297/40 106/73/40 +f 104/62/36 106/298/36 108/74/36 +f 110/76/41 120/299/41 111/77/41 +f 113/79/36 115/300/36 109/80/36 +f 114/82/39 117/301/39 115/83/39 +f 117/302/34 114/84/34 110/86/34 +f 109/75/42 115/303/42 117/87/42 +f 113/89/43 112/95/43 116/90/43 +f 119/92/35 111/304/35 120/93/35 +f 119/305/36 112/78/36 111/94/36 +f 112/95/44 119/306/44 118/96/44 +f 116/85/34 118/307/34 120/97/34 +f 122/98/34 163/98/34 123/98/34 +f 121/98/34 123/98/34 125/98/34 +f 127/98/34 159/98/34 128/98/34 +f 130/98/34 256/98/34 131/98/34 +f 133/98/34 161/98/34 134/98/34 +f 136/98/34 157/98/34 137/98/34 +f 142/308/45 140/309/45 129/310/45 +f 138/99/45 158/311/45 127/100/45 +f 129/310/45 140/309/45 130/312/45 +f 139/313/45 158/311/45 138/99/45 +f 140/309/45 139/313/45 130/312/45 +f 139/313/45 138/99/45 130/312/45 +f 138/99/45 155/314/45 130/312/45 +f 155/314/128 253/315/128 130/312/128 +f 140/98/34 143/98/34 141/98/34 +f 142/98/34 160/98/34 143/98/34 +f 133/103/46 132/316/46 145/104/46 +f 132/103/47 136/316/47 146/104/47 +f 136/103/48 135/316/48 147/104/48 +f 149/103/75 122/316/75 150/104/75 +f 122/103/50 121/316/50 151/104/50 +f 124/103/51 133/316/51 144/104/51 +f 121/103/52 124/316/52 152/104/52 +f 135/98/34 137/98/34 154/98/34 +f 138/98/34 162/98/34 156/98/34 +f 132/98/34 134/98/34 157/98/34 +f 158/98/34 252/98/34 159/98/34 +f 129/98/34 131/98/34 160/98/34 +f 124/98/34 125/98/34 161/98/34 +f 126/98/34 128/98/34 162/98/34 +f 149/98/34 222/98/34 163/98/34 +f 165/106/53 200/317/53 166/107/53 +f 168/98/129 216/318/129 169/98/129 +f 171/98/45 208/319/45 172/98/45 +f 174/109/56 177/112/56 175/110/56 +f 176/111/57 190/130/57 177/112/57 +f 179/114/58 206/320/58 180/115/58 +f 164/105/59 166/107/59 182/117/59 +f 184/114/58 189/320/58 185/115/58 +f 167/98/45 169/319/45 187/98/45 +f 188/114/58 209/320/58 189/115/58 +f 191/119/61 226/141/61 192/120/61 +f 194/98/45 203/319/45 195/98/45 +f 182/122/62 215/137/62 197/123/62 +f 183/114/58 185/320/58 199/115/58 +f 200/125/63 345/321/63 201/126/63 +f 202/98/45 218/319/45 203/98/45 +f 181/116/65 182/117/65 196/128/65 +f 205/114/58 223/320/58 206/115/58 +f 207/129/66 191/322/66 190/130/66 +f 186/98/45 187/319/45 208/98/45 +f 178/114/58 180/320/58 209/115/58 +f 200/125/67 210/131/67 345/321/67 +f 210/131/67 211/133/67 346/323/67 +f 345/321/67 210/131/67 346/323/67 +f 213/135/68 238/324/68 214/136/68 +f 166/124/69 201/126/69 215/137/69 +f 193/98/45 195/319/45 216/98/45 +f 190/118/71 192/120/71 217/139/71 +f 177/138/72 217/139/72 211/133/72 +f 170/98/130 172/319/130 218/98/130 +f 198/114/58 199/320/58 220/115/58 +f 221/98/34 224/98/34 222/98/34 +f 219/114/58 220/320/58 223/115/58 +f 148/103/68 147/316/68 137/104/68 +f 153/98/34 154/98/34 224/98/34 +f 225/140/74 347/325/74 226/141/74 +f 347/325/74 196/121/74 197/123/74 +f 226/141/131 347/325/131 348/326/131 +f 347/325/74 197/123/74 349/327/74 +f 348/326/132 347/325/132 349/327/132 +f 228/143/45 232/328/45 229/144/45 +f 229/146/34 234/329/34 230/147/34 +f 227/149/39 230/330/39 231/150/39 +f 228/152/36 231/331/36 233/153/36 +f 232/155/35 233/332/35 234/156/35 +f 236/135/68 244/324/68 237/136/68 +f 134/158/47 178/333/47 188/159/47 +f 161/158/46 179/333/46 178/159/46 +f 125/158/51 205/333/51 179/159/51 +f 157/158/48 188/333/48 184/159/48 +f 123/158/52 219/333/52 205/159/52 +f 163/158/50 198/333/50 219/159/50 +f 183/161/68 237/334/68 238/162/68 +f 222/158/75 183/333/75 198/159/75 +f 213/164/68 235/335/68 222/165/68 +f 239/166/48 164/105/48 243/171/48 +f 350/336/48 239/166/48 243/171/48 +f 350/336/48 243/171/48 351/337/48 +f 252/338/48 350/336/48 159/339/48 +f 350/336/48 351/337/48 159/339/48 +f 240/167/75 173/108/75 247/340/75 +f 352/341/75 240/167/75 247/340/75 +f 352/341/75 247/340/75 353/342/75 +f 160/343/75 352/341/75 143/344/75 +f 352/341/75 353/342/75 143/344/75 +f 241/168/51 354/345/51 242/169/51 +f 251/182/51 204/346/51 354/345/51 +f 245/347/133 251/182/133 354/345/133 +f 255/348/134 245/347/134 354/345/134 +f 241/168/135 255/348/135 354/345/135 +f 243/171/47 181/116/47 259/200/47 +f 351/337/47 243/171/47 259/200/47 +f 351/337/47 259/200/47 355/349/47 +f 159/339/47 351/337/47 128/350/47 +f 351/337/47 355/349/47 128/350/47 +f 236/173/76 249/351/76 245/174/76 +f 241/175/52 176/111/52 246/176/52 +f 257/352/52 241/175/52 246/176/52 +f 257/352/52 246/176/52 356/353/52 +f 256/354/52 257/352/52 131/355/52 +f 257/352/52 356/353/52 131/355/52 +f 246/176/50 174/109/50 240/167/50 +f 356/353/50 246/176/50 240/167/50 +f 356/353/50 240/167/50 352/341/50 +f 131/355/50 356/353/50 160/343/50 +f 356/353/50 352/341/50 160/343/50 +f 239/356/68 248/179/68 165/357/68 +f 247/177/68 248/179/68 239/356/68 +f 353/358/68 247/177/68 239/356/68 +f 353/358/68 239/356/68 350/359/68 +f 143/360/68 353/358/68 350/359/68 +f 141/361/68 143/360/68 350/359/68 +f 252/362/68 141/361/68 350/359/68 +f 245/347/77 249/180/77 251/182/77 +f 139/98/34 141/98/34 252/98/34 +f 155/98/34 156/98/34 254/98/34 +f 214/363/136 244/183/136 255/185/136 +f 255/187/79 258/364/79 212/188/79 +f 253/98/34 254/98/34 256/98/34 +f 165/365/80 248/189/80 200/125/80 +f 248/189/80 175/132/80 210/131/80 +f 200/125/80 248/189/80 210/131/80 +f 254/191/51 156/366/51 257/192/51 +f 156/366/51 162/367/51 250/181/51 +f 156/366/137 250/181/137 249/180/137 +f 257/192/138 156/366/138 258/199/138 +f 156/366/139 249/180/139 258/199/139 +f 242/194/81 354/368/81 191/119/81 +f 354/368/81 204/369/81 196/121/81 +f 191/119/81 354/368/81 225/140/81 +f 354/368/81 196/121/81 347/325/81 +f 225/140/81 354/368/81 347/325/81 +f 249/370/140 236/196/140 258/198/140 +f 258/199/83 255/348/83 241/168/83 +f 259/200/46 204/127/46 251/371/46 +f 355/349/46 259/200/46 251/371/46 +f 355/349/46 251/371/46 250/372/46 +f 128/350/46 355/349/46 162/373/46 +f 355/349/46 250/372/46 162/373/46 +f 263/374/58 260/201/58 264/375/58 +f 260/201/58 262/203/58 264/375/58 +f 264/375/58 266/376/58 265/377/58 +f 262/203/58 357/378/58 264/375/58 +f 264/375/58 358/379/58 266/376/58 +f 357/378/58 359/380/58 264/375/58 +f 359/380/58 358/379/58 264/375/58 +f 144/205/84 260/218/84 263/206/84 +f 152/204/85 263/206/85 264/208/85 +f 151/207/86 264/208/86 265/210/86 +f 150/209/87 265/210/87 266/212/87 +f 147/214/88 357/381/88 262/215/88 +f 146/213/89 262/215/89 261/217/89 +f 145/216/90 261/217/90 260/218/90 +f 360/382/91 267/219/91 266/212/91 +f 147/214/91 360/382/91 357/381/91 +f 357/381/91 360/382/91 359/383/91 +f 360/382/141 266/212/141 358/384/141 +f 359/383/91 360/382/91 358/384/91 +f 361/385/92 268/220/92 270/222/92 +f 277/230/92 361/385/92 278/231/92 +f 278/231/92 361/385/92 362/386/92 +f 361/385/92 270/222/92 363/387/92 +f 362/386/92 361/385/92 363/387/92 +f 293/388/93 364/389/93 310/390/93 +f 301/391/93 272/224/93 271/223/93 +f 293/388/93 365/392/93 364/389/93 +f 365/392/93 301/391/93 364/389/93 +f 301/391/93 271/223/93 364/389/93 +f 270/226/94 366/393/94 274/227/94 +f 366/393/94 282/287/94 314/289/94 +f 367/394/94 282/287/94 366/393/94 +f 368/395/94 367/394/94 366/393/94 +f 270/226/94 368/395/94 366/393/94 +f 369/396/95 276/229/95 278/231/95 +f 370/397/95 369/396/95 371/398/95 +f 371/398/95 369/396/95 372/399/95 +f 369/396/95 278/231/95 373/400/95 +f 372/399/95 369/396/95 373/400/95 +f 270/222/96 279/232/96 374/401/96 +f 282/236/96 374/401/96 283/237/96 +f 367/402/96 374/401/96 282/236/96 +f 368/403/96 270/222/96 374/401/96 +f 367/402/96 368/403/96 374/401/96 +f 285/404/97 275/234/97 280/233/97 +f 291/405/97 375/406/97 292/407/97 +f 291/405/97 376/408/97 375/406/97 +f 376/408/97 285/404/97 375/406/97 +f 285/404/97 280/233/97 375/406/97 +f 282/236/98 284/238/98 377/409/98 +f 371/398/98 377/409/98 370/397/98 +f 378/410/98 377/409/98 371/398/98 +f 379/411/98 282/236/98 377/409/98 +f 378/410/98 379/411/98 377/409/98 +f 270/226/99 285/239/99 376/412/99 +f 278/278/99 376/412/99 291/279/99 +f 362/413/99 376/412/99 278/278/99 +f 363/414/99 270/226/99 376/412/99 +f 362/413/99 363/414/99 376/412/99 +f 380/415/100 370/397/100 381/416/100 +f 286/240/100 370/397/100 380/415/100 +f 277/230/100 276/229/100 286/240/100 +f 276/229/100 369/396/100 286/240/100 +f 369/396/100 370/397/100 286/240/100 +f 382/417/101 381/418/101 383/419/101 +f 287/242/101 286/420/101 288/243/101 +f 380/421/101 381/418/101 382/417/101 +f 286/420/101 380/421/101 382/417/101 +f 288/243/101 286/420/101 382/417/101 +f 290/245/102 292/247/102 384/422/102 +f 385/423/102 386/424/102 387/425/102 +f 385/423/102 388/426/102 386/424/102 +f 388/426/102 290/245/102 386/424/102 +f 290/245/102 384/422/102 386/424/102 +f 370/397/103 389/427/103 381/416/103 +f 370/397/103 294/249/103 389/427/103 +f 284/238/103 283/237/103 294/249/103 +f 377/409/103 284/238/103 294/249/103 +f 370/397/142 377/409/142 294/249/142 +f 296/251/104 316/251/104 297/250/104 +f 382/417/105 383/419/105 390/428/105 +f 298/252/105 288/243/105 307/429/105 +f 382/417/105 390/428/105 308/430/105 +f 288/243/105 382/417/105 308/430/105 +f 307/429/105 288/243/105 308/430/105 +f 316/251/106 296/251/106 300/253/106 +f 283/237/107 365/431/107 293/248/107 +f 283/237/107 301/255/107 365/431/107 +f 279/232/107 269/221/107 301/255/107 +f 374/401/107 279/232/107 301/255/107 +f 283/237/107 374/401/107 301/255/107 +f 310/390/108 364/389/108 305/432/108 +f 271/223/108 302/256/108 304/433/108 +f 305/432/108 364/389/108 306/434/108 +f 364/389/108 271/223/108 306/434/108 +f 271/223/108 304/433/108 306/434/108 +f 307/262/58 295/250/58 298/435/58 +f 303/257/58 302/259/58 318/436/58 +f 303/257/58 318/436/58 391/437/58 +f 295/250/58 303/257/58 391/437/58 +f 298/435/58 295/250/58 391/437/58 +f 390/438/58 296/251/58 308/263/58 +f 311/439/58 305/260/58 299/253/58 +f 392/440/58 311/439/58 299/253/58 +f 390/438/58 392/440/58 296/251/58 +f 392/440/58 299/253/58 296/251/58 +f 299/253/58 306/261/58 304/258/58 +f 295/250/58 307/262/58 296/251/58 +f 295/250/109 297/250/109 309/257/109 +f 312/441/110 310/264/110 311/266/110 +f 383/442/110 392/443/110 390/444/110 +f 383/442/110 393/445/110 392/443/110 +f 393/445/110 312/441/110 392/443/110 +f 312/441/110 311/266/110 392/443/110 +f 383/446/111 381/416/111 393/447/111 +f 312/267/111 294/249/111 293/248/111 +f 381/416/111 389/427/111 393/447/111 +f 389/427/111 294/249/111 393/447/111 +f 294/249/111 312/267/111 393/447/111 +f 314/270/112 320/448/112 315/271/112 +f 394/449/112 385/450/112 387/451/112 +f 394/449/112 387/451/112 395/452/112 +f 320/448/112 394/449/112 315/271/112 +f 394/449/112 395/452/112 315/271/112 +f 316/273/58 300/453/58 309/274/58 +f 396/454/113 287/241/113 289/455/113 +f 272/254/113 319/283/113 317/276/113 +f 397/456/113 287/241/113 396/454/113 +f 319/283/113 397/456/113 396/454/113 +f 317/276/113 319/283/113 396/454/113 +f 388/457/114 278/278/114 290/277/114 +f 385/458/114 371/459/114 388/457/114 +f 371/459/114 372/460/114 388/457/114 +f 372/460/114 373/461/114 388/457/114 +f 373/461/114 278/278/114 388/457/114 +f 273/281/115 317/462/115 318/282/115 +f 391/463/115 289/464/115 298/465/115 +f 396/466/115 289/464/115 391/463/115 +f 317/462/115 396/466/115 391/463/115 +f 318/282/115 317/462/115 391/463/115 +f 300/253/116 299/253/116 309/257/116 +f 397/456/117 277/230/117 287/241/117 +f 319/283/117 277/230/117 397/456/117 +f 269/221/117 268/220/117 319/283/117 +f 268/220/117 361/385/117 319/283/117 +f 361/385/117 277/230/117 319/283/117 +f 281/286/118 274/285/118 398/467/118 +f 366/468/118 314/469/118 313/470/118 +f 366/468/118 313/470/118 399/471/118 +f 274/285/118 366/468/118 398/467/118 +f 366/468/118 399/471/118 398/467/118 +f 282/287/119 394/472/119 320/288/119 +f 371/459/119 385/458/119 394/472/119 +f 378/473/119 371/459/119 394/472/119 +f 379/474/119 378/473/119 394/472/119 +f 282/287/119 379/474/119 394/472/119 +f 322/53/120 332/290/120 323/54/120 +f 325/56/39 327/291/39 321/57/39 +f 326/59/34 329/292/34 327/60/34 +f 329/293/35 326/61/35 322/63/35 +f 321/52/121 327/294/121 329/64/121 +f 325/66/122 324/72/122 328/67/122 +f 331/69/36 323/295/36 332/70/36 +f 331/296/39 324/55/39 323/71/39 +f 324/72/123 331/297/123 330/73/123 +f 328/62/35 330/298/35 332/74/35 +f 334/53/124 344/290/124 335/54/124 +f 337/56/35 339/291/35 333/57/35 +f 338/59/36 341/292/36 339/60/36 +f 341/293/39 338/61/39 334/63/39 +f 333/52/125 339/294/125 341/64/125 +f 337/66/126 336/72/126 340/67/126 +f 343/69/34 335/295/34 344/70/34 +f 343/296/35 336/55/35 335/71/35 +f 336/72/127 343/297/127 342/73/127 +f 340/62/39 342/298/39 344/74/39 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/walkway.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/walkway.obj new file mode 100644 index 00000000..793d7499 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/walkway.obj @@ -0,0 +1,375 @@ +# Blender v2.69 (sub 0) OBJ File: '' +# www.blender.org +o Pipe +v -1.001688 0.626558 0.180403 +v -1.001688 0.626558 -0.180403 +v 1.001688 0.626558 -0.180403 +v 1.001688 0.626558 0.180403 +v -1.001688 0.987364 0.180403 +v -1.001688 0.987364 -0.180403 +v 1.001688 0.987364 -0.180403 +v 1.001688 0.987364 0.180403 +v 0.180403 0.626558 1.001688 +v -0.180403 0.626558 1.001688 +v -0.180403 0.626558 -1.001688 +v 0.180403 0.626558 -1.001688 +v 0.180403 0.987364 1.001688 +v -0.180403 0.987364 1.001688 +v -0.180403 0.987364 -1.001688 +v 0.180403 0.987364 -1.001688 +vt 0.376467 0.376577 +vt 0.623313 0.376577 +vt 0.376467 0.623423 +vt 0.001515 0.375808 +vt 0.998485 0.375808 +vt 0.001515 0.624192 +vt 0.004752 0.623526 +vt 0.004752 0.376474 +vt 0.995247 0.623526 +vt 0.623313 0.623423 +vt 0.998485 0.624192 +vt 0.995247 0.376474 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +f 5/1/1 6/2/1 1/3/1 +f 6/4/2 7/5/2 2/6/2 +f 7/1/3 8/2/3 3/3/3 +f 8/4/4 5/5/4 4/6/4 +f 1/7/5 2/8/5 4/9/5 +f 8/7/6 7/8/6 5/9/6 +f 13/1/4 14/2/4 9/3/4 +f 14/4/1 15/5/1 10/6/1 +f 15/1/2 16/2/2 11/3/2 +f 16/4/3 13/5/3 12/6/3 +f 9/7/5 10/8/5 12/9/5 +f 16/7/6 15/8/6 13/9/6 +f 6/2/1 2/10/1 1/3/1 +f 7/5/2 3/11/2 2/6/2 +f 8/2/3 4/10/3 3/3/3 +f 5/5/4 1/11/4 4/6/4 +f 2/8/5 3/12/5 4/9/5 +f 7/8/6 6/12/6 5/9/6 +f 14/2/4 10/10/4 9/3/4 +f 15/5/1 11/11/1 10/6/1 +f 16/2/2 12/10/2 11/3/2 +f 13/5/3 9/11/3 12/6/3 +f 10/8/5 11/12/5 12/9/5 +f 15/8/6 14/12/6 13/9/6 +o WalkwayBase +v 0.150000 0.643837 0.988801 +v -0.150000 0.643837 0.988801 +v -0.150000 0.643837 -0.988801 +v 0.150000 0.643837 -0.988801 +v 0.150000 0.943837 0.988801 +v -0.150000 0.943837 0.988801 +v -0.150000 0.943837 -0.988801 +v 0.150000 0.943837 -0.988801 +v 0.988801 0.643837 -0.150000 +v 0.988801 0.643837 0.150000 +v -0.988801 0.643837 0.150000 +v -0.988801 0.643837 -0.150000 +v 0.988801 0.943837 -0.150000 +v 0.988801 0.943837 0.150000 +v -0.988801 0.943837 0.150000 +v -0.988801 0.943837 -0.150000 +vt 0.370452 0.370452 +vt 0.629548 0.370452 +vt 0.370452 0.629548 +vt 0.000000 0.407716 +vt 1.000000 0.407716 +vt 0.000000 0.592284 +vt 0.418179 0.000000 +vt 0.581821 0.000000 +vt 0.418179 1.000000 +vt 0.000000 0.409927 +vt 1.000000 0.409927 +vt 0.000000 0.590073 +vt 0.408001 0.000000 +vt 0.591999 0.000000 +vt 0.408001 1.000000 +vt 0.629548 0.629548 +vt 1.000000 0.592284 +vt 0.581821 1.000000 +vt 1.000000 0.590073 +vt 0.591999 1.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +f 21/13/7 22/14/7 17/15/7 +f 22/16/8 23/17/8 18/18/8 +f 23/13/9 24/14/9 19/15/9 +f 24/16/10 21/17/10 20/18/10 +f 17/19/11 18/20/11 20/21/11 +f 24/19/12 23/20/12 21/21/12 +f 29/13/10 30/14/10 25/15/10 +f 30/22/7 31/23/7 26/24/7 +f 31/13/8 32/14/8 27/15/8 +f 32/22/9 29/23/9 28/24/9 +f 25/25/11 26/26/11 28/27/11 +f 32/25/12 31/26/12 29/27/12 +f 22/14/7 18/28/7 17/15/7 +f 23/17/8 19/29/8 18/18/8 +f 24/14/9 20/28/9 19/15/9 +f 21/17/10 17/29/10 20/18/10 +f 18/20/11 19/30/11 20/21/11 +f 23/20/12 22/30/12 21/21/12 +f 30/14/10 26/28/10 25/15/10 +f 31/23/7 27/31/7 26/24/7 +f 32/14/8 28/28/8 27/15/8 +f 29/23/9 25/31/9 28/24/9 +f 26/26/11 27/32/11 28/27/11 +f 31/26/12 30/32/12 29/27/12 +o Walkway +v -0.090685 0.672507 0.090685 +v -0.090685 0.672507 -0.090685 +v 0.090685 0.672507 -0.090685 +v 0.090685 0.672507 0.090685 +v -0.090685 1.986790 0.090685 +v -0.090685 1.986790 -0.090685 +v 0.090685 1.986790 -0.090685 +v 0.090685 1.986790 0.090685 +v -0.200000 0.606551 0.200000 +v -0.200000 0.606551 -0.200000 +v 0.200000 0.606551 -0.200000 +v 0.200000 0.606551 0.200000 +v -0.200000 1.006551 0.200000 +v -0.200000 1.006551 -0.200000 +v 0.200000 1.006551 -0.200000 +v 0.200000 1.006551 0.200000 +v -0.200000 1.900000 0.800000 +v -0.200000 1.900000 -0.800000 +v 0.200000 1.900000 -0.800000 +v 0.200000 1.900000 0.800000 +v -0.200000 2.100000 0.800000 +v -0.200000 2.100000 -0.800000 +v 0.200000 2.100000 -0.800000 +v 0.200000 2.100000 0.800000 +v 0.800000 1.900000 0.800000 +v 0.800000 1.900000 -0.800000 +v 1.000000 1.900000 -0.800000 +v 1.000000 1.900000 0.800000 +v 0.800000 2.100000 0.800000 +v 0.800000 2.100000 -0.800000 +v 1.000000 2.100000 -0.800000 +v 1.000000 2.100000 0.800000 +v -1.000000 1.900000 1.000000 +v -1.000000 1.900000 0.800000 +v 1.000000 1.900000 0.800000 +v 1.000000 1.900000 1.000000 +v -1.000000 2.100000 1.000000 +v -1.000000 2.100000 0.800000 +v 1.000000 2.100000 0.800000 +v 1.000000 2.100000 1.000000 +v -1.000000 1.900000 -0.800000 +v -1.000000 1.900000 -1.000000 +v 1.000000 1.900000 -1.000000 +v 1.000000 1.900000 -0.800000 +v -1.000000 2.100000 -0.800000 +v -1.000000 2.100000 -1.000000 +v 1.000000 2.100000 -1.000000 +v 1.000000 2.100000 -0.800000 +v -1.000000 1.900000 0.800000 +v -1.000000 1.900000 -0.800000 +v -0.800000 1.900000 -0.800000 +v -0.800000 1.900000 0.800000 +v -1.000000 2.100000 0.800000 +v -1.000000 2.100000 -0.800000 +v -0.800000 2.100000 -0.800000 +v -0.800000 2.100000 0.800000 +v 0.800000 1.900010 0.200000 +v -0.800000 1.900010 0.200000 +v -0.800000 1.900010 -0.200000 +v 0.800000 1.900010 -0.200000 +v 0.800000 2.100010 0.200000 +v -0.800000 2.100010 0.200000 +v -0.800000 2.100010 -0.200000 +v 0.800000 2.100010 -0.200000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.404883 +vt 1.000000 0.404883 +vt 0.000000 0.595117 +vt 0.094929 -0.001166 +vt 0.905071 -0.001166 +vt 0.094929 0.090633 +vt 0.904693 0.001032 +vt 0.992096 0.001032 +vt 0.904693 0.088435 +vt 0.004563 0.000000 +vt 0.060852 0.000000 +vt 0.004563 1.000000 +vt 1.000000 1.000000 +vt 1.000000 0.595117 +vt 0.905071 0.090633 +vt 0.992096 0.088435 +vt 0.060852 1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 -0.000001 +f 37/33/13 38/34/13 33/35/13 +f 38/33/14 39/34/14 34/35/14 +f 39/33/15 40/34/15 35/35/15 +f 40/33/16 37/34/16 36/35/16 +f 33/33/17 34/34/17 36/35/17 +f 40/33/18 39/34/18 37/35/18 +f 45/33/13 46/34/13 41/35/13 +f 46/33/14 47/34/14 42/35/14 +f 47/33/15 48/34/15 43/35/15 +f 48/33/16 45/34/16 44/35/16 +f 41/33/17 42/34/17 44/35/17 +f 48/33/18 47/34/18 45/35/18 +f 53/33/13 54/34/13 49/35/13 +f 54/33/14 55/34/14 50/35/14 +f 55/33/15 56/34/15 51/35/15 +f 56/33/16 53/34/16 52/35/16 +f 49/33/17 50/34/17 52/35/17 +f 56/36/18 55/37/18 53/38/18 +f 61/39/13 62/40/13 57/41/13 +f 62/33/14 63/34/14 58/35/14 +f 63/39/15 64/40/15 59/41/15 +f 64/33/16 61/34/16 60/35/16 +f 57/39/17 58/40/17 60/41/17 +f 64/39/18 63/40/18 61/41/18 +f 69/42/13 70/43/13 65/44/13 +f 70/45/14 71/46/14 66/47/14 +f 71/42/15 72/43/15 67/44/15 +f 72/45/16 69/46/16 68/47/16 +f 65/45/17 66/46/17 68/47/17 +f 72/45/18 71/46/18 69/47/18 +f 77/42/13 78/43/13 73/44/13 +f 78/45/14 79/46/14 74/47/14 +f 79/42/15 80/43/15 75/44/15 +f 80/45/16 77/46/16 76/47/16 +f 73/45/17 74/46/17 76/47/17 +f 80/45/18 79/46/18 77/47/18 +f 85/39/13 86/40/13 81/41/13 +f 86/33/14 87/34/14 82/35/14 +f 87/39/15 88/40/15 83/41/15 +f 88/33/16 85/34/16 84/35/16 +f 81/39/17 82/40/17 84/41/17 +f 88/39/18 87/40/18 85/41/18 +f 93/33/16 94/34/16 89/35/16 +f 94/33/13 95/34/13 90/35/13 +f 95/33/14 96/34/14 91/35/14 +f 96/33/15 93/34/15 92/35/15 +f 89/33/17 90/34/17 92/35/17 +f 96/36/18 95/37/18 93/38/18 +f 38/34/13 34/48/13 33/35/13 +f 39/34/14 35/48/14 34/35/14 +f 40/34/15 36/48/15 35/35/15 +f 37/34/16 33/48/16 36/35/16 +f 34/34/17 35/48/17 36/35/17 +f 39/34/19 38/48/19 37/35/19 +f 46/34/13 42/48/13 41/35/13 +f 47/34/14 43/48/14 42/35/14 +f 48/34/15 44/48/15 43/35/15 +f 45/34/16 41/48/16 44/35/16 +f 42/34/17 43/48/17 44/35/17 +f 47/34/18 46/48/18 45/35/18 +f 54/34/13 50/48/13 49/35/13 +f 55/34/14 51/48/14 50/35/14 +f 56/34/15 52/48/15 51/35/15 +f 53/34/16 49/48/16 52/35/16 +f 50/34/17 51/48/17 52/35/17 +f 55/37/18 54/49/18 53/38/18 +f 62/40/13 58/50/13 57/41/13 +f 63/34/14 59/48/14 58/35/14 +f 64/40/15 60/50/15 59/41/15 +f 61/34/16 57/48/16 60/35/16 +f 58/40/17 59/50/17 60/41/17 +f 63/40/18 62/50/18 61/41/18 +f 70/43/13 66/51/13 65/44/13 +f 71/46/14 67/52/14 66/47/14 +f 72/43/15 68/51/15 67/44/15 +f 69/46/16 65/52/16 68/47/16 +f 66/46/17 67/52/17 68/47/17 +f 71/46/18 70/52/18 69/47/18 +f 78/43/13 74/51/13 73/44/13 +f 79/46/14 75/52/14 74/47/14 +f 80/43/15 76/51/15 75/44/15 +f 77/46/16 73/52/16 76/47/16 +f 74/46/17 75/52/17 76/47/17 +f 79/46/18 78/52/18 77/47/18 +f 86/40/13 82/50/13 81/41/13 +f 87/34/14 83/48/14 82/35/14 +f 88/40/15 84/50/15 83/41/15 +f 85/34/16 81/48/16 84/35/16 +f 82/40/17 83/50/17 84/41/17 +f 87/40/18 86/50/18 85/41/18 +f 94/34/16 90/48/16 89/35/16 +f 95/34/13 91/48/13 90/35/13 +f 96/34/14 92/48/14 91/35/14 +f 93/34/15 89/48/15 92/35/15 +f 90/34/17 91/48/17 92/35/17 +f 95/37/18 94/49/18 93/38/18 +o Wire +v -1.001688 0.626558 0.180403 +v -1.001688 0.626558 -0.180403 +v 1.001688 0.626558 -0.180403 +v 1.001688 0.626558 0.180403 +v -1.001688 0.987364 0.180403 +v -1.001688 0.987364 -0.180403 +v 1.001688 0.987364 -0.180403 +v 1.001688 0.987364 0.180403 +v 0.180403 0.626558 1.001688 +v -0.180403 0.626558 1.001688 +v -0.180403 0.626558 -1.001688 +v 0.180403 0.626558 -1.001688 +v 0.180403 0.987364 1.001688 +v -0.180403 0.987364 1.001688 +v -0.180403 0.987364 -1.001688 +v 0.180403 0.987364 -1.001688 +vt 0.809853 0.438768 +vt 0.932317 0.438768 +vt 0.809853 0.561232 +vt 0.187799 0.438302 +vt 0.812201 0.438302 +vt 0.187799 0.561698 +vt 0.189827 0.561367 +vt 0.189827 0.438633 +vt 0.810173 0.561367 +vt 0.932317 0.561232 +vt 0.812201 0.561698 +vt 0.810173 0.438633 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +f 101/53/20 102/54/20 97/55/20 +f 102/56/21 103/57/21 98/58/21 +f 103/53/22 104/54/22 99/55/22 +f 104/56/23 101/57/23 100/58/23 +f 97/59/24 98/60/24 100/61/24 +f 104/59/25 103/60/25 101/61/25 +f 102/54/20 98/62/20 97/55/20 +f 103/57/21 99/63/21 98/58/21 +f 104/54/22 100/62/22 99/55/22 +f 101/57/23 97/63/23 100/58/23 +f 98/60/24 99/64/24 100/61/24 +f 103/60/25 102/64/25 101/61/25 +f 109/53/23 110/54/23 105/55/23 +f 110/56/20 111/57/20 106/58/20 +f 111/53/21 112/54/21 107/55/21 +f 112/56/22 109/57/22 108/58/22 +f 105/59/24 106/60/24 108/61/24 +f 112/59/25 111/60/25 109/61/25 +f 110/54/23 106/62/23 105/55/23 +f 111/57/20 107/63/20 106/58/20 +f 112/54/21 108/62/21 107/55/21 +f 109/57/22 105/63/22 108/58/22 +f 106/60/24 107/64/24 108/61/24 +f 111/60/25 110/64/25 109/61/25 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.mtl b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.mtl new file mode 100644 index 00000000..e1f510f0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.mtl @@ -0,0 +1,8 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +d 1 +map_Kd galacticraftplanets:blocks/web \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.obj b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.obj new file mode 100644 index 00000000..0c606f8c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/models/web.obj @@ -0,0 +1,1833 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +mtllib web.mtl +o Sphere +v 0.000000 0.980785 -0.345922 +v 0.089531 0.980785 -0.334135 +v 0.175622 0.923880 -0.655429 +v 0.254963 0.831470 -0.951535 +v 0.324507 0.707107 -1.211075 +v 0.381579 0.555570 -1.424073 +v 0.423988 0.382683 -1.582345 +v 0.450104 0.195090 -1.679809 +v 0.458922 0.000000 -1.712718 +v 0.450104 -0.195090 -1.679809 +v 0.423988 -0.382683 -1.582346 +v 0.381579 -0.555570 -1.424073 +v 0.324507 -0.707107 -1.211075 +v 0.254963 -0.831470 -0.951535 +v 0.175622 -0.923880 -0.655429 +v 0.089531 -0.980785 -0.334134 +v 0.172961 0.980785 -0.299577 +v 0.339275 0.923880 -0.587642 +v 0.492551 0.831470 -0.853123 +v 0.626899 0.707107 -1.085820 +v 0.737155 0.555570 -1.276789 +v 0.819083 0.382683 -1.418692 +v 0.869533 0.195090 -1.506075 +v 0.886569 0.000000 -1.535581 +v 0.869533 -0.195090 -1.506076 +v 0.819083 -0.382683 -1.418692 +v 0.737155 -0.555570 -1.276789 +v 0.626899 -0.707107 -1.085820 +v 0.492551 -0.831470 -0.853123 +v 0.339275 -0.923880 -0.587641 +v 0.172961 -0.980785 -0.299577 +v 0.244604 0.980785 -0.244603 +v 0.479808 0.923880 -0.479807 +v 0.696573 0.831470 -0.696572 +v 0.886569 0.707107 -0.886568 +v 1.042495 0.555570 -1.042494 +v 1.158358 0.382683 -1.158357 +v 1.229706 0.195090 -1.229705 +v 1.253797 0.000000 -1.253797 +v 1.229706 -0.195090 -1.229705 +v 1.158358 -0.382683 -1.158357 +v 1.042495 -0.555570 -1.042494 +v 0.886569 -0.707107 -0.886568 +v 0.696573 -0.831470 -0.696572 +v 0.479808 -0.923880 -0.479807 +v 0.244604 -0.980785 -0.244603 +v 0.299578 0.980785 -0.172961 +v 0.587642 0.923880 -0.339275 +v 0.853124 0.831470 -0.492551 +v 1.085820 0.707107 -0.626898 +v 1.276790 0.555570 -0.737154 +v 1.418692 0.382683 -0.819082 +v 1.506076 0.195090 -0.869533 +v 1.535582 0.000000 -0.886568 +v 1.506076 -0.195090 -0.869533 +v 1.418693 -0.382683 -0.819082 +v 1.276790 -0.555570 -0.737154 +v 1.085820 -0.707107 -0.626898 +v 0.853124 -0.831470 -0.492551 +v 0.587642 -0.923880 -0.339275 +v 0.299577 -0.980785 -0.172960 +v 0.334135 0.980785 -0.089531 +v 0.655430 0.923880 -0.175621 +v 0.951536 0.831470 -0.254963 +v 1.211075 0.707107 -0.324506 +v 1.424074 0.555570 -0.381579 +v 1.582346 0.382683 -0.423988 +v 1.679809 0.195090 -0.450103 +v 1.712719 0.000000 -0.458921 +v 1.679809 -0.195090 -0.450103 +v 1.582346 -0.382683 -0.423988 +v 1.424074 -0.555570 -0.381579 +v 1.211075 -0.707107 -0.324506 +v 0.951536 -0.831470 -0.254963 +v 0.655429 -0.923880 -0.175621 +v 0.334135 -0.980785 -0.089531 +v 0.345922 0.980785 0.000001 +v 0.678551 0.923880 0.000001 +v 0.985102 0.831470 0.000001 +v 1.253797 0.707107 0.000001 +v 1.474310 0.555570 0.000001 +v 1.638165 0.382683 0.000000 +v 1.739066 0.195090 0.000000 +v 1.773137 0.000000 0.000001 +v 1.739067 -0.195090 0.000000 +v 1.638165 -0.382683 0.000000 +v 1.474310 -0.555570 0.000001 +v 1.253797 -0.707107 0.000001 +v 0.985102 -0.831470 0.000001 +v 0.678550 -0.923880 0.000001 +v 0.345922 -0.980785 0.000001 +v 0.334135 0.980785 0.089532 +v 0.655430 0.923880 0.175622 +v 0.951536 0.831470 0.254964 +v 1.211075 0.707107 0.324507 +v 1.424074 0.555570 0.381580 +v 1.582346 0.382683 0.423989 +v 1.679809 0.195090 0.450104 +v 1.712719 0.000000 0.458922 +v 1.679809 -0.195090 0.450104 +v 1.582346 -0.382683 0.423989 +v 1.424074 -0.555570 0.381580 +v 1.211075 -0.707107 0.324507 +v 0.951536 -0.831470 0.254964 +v 0.655429 -0.923880 0.175622 +v 0.334135 -0.980785 0.089532 +v 0.299578 0.980785 0.172962 +v 0.587642 0.923880 0.339276 +v 0.853124 0.831470 0.492552 +v 1.085820 0.707107 0.626899 +v 1.276790 0.555570 0.737155 +v 1.418692 0.382683 0.819083 +v 1.506076 0.195090 0.869534 +v 1.535582 0.000000 0.886569 +v 1.506076 -0.195090 0.869534 +v 1.418692 -0.382683 0.819083 +v 1.276790 -0.555570 0.737155 +v 1.085820 -0.707107 0.626899 +v 0.853124 -0.831470 0.492552 +v 0.587642 -0.923880 0.339276 +v 0.299577 -0.980785 0.172962 +v 0.244604 0.980785 0.244605 +v 0.479808 0.923880 0.479808 +v 0.696572 0.831470 0.696573 +v 0.886568 0.707107 0.886569 +v 1.042494 0.555570 1.042495 +v 1.158357 0.382683 1.158358 +v 1.229705 0.195090 1.229706 +v 1.253797 0.000000 1.253798 +v 1.229706 -0.195090 1.229706 +v 1.158358 -0.382683 1.158358 +v 1.042494 -0.555570 1.042495 +v 0.886568 -0.707107 0.886569 +v 0.696572 -0.831470 0.696573 +v 0.479807 -0.923880 0.479808 +v 0.244604 -0.980785 0.244604 +v 0.172961 0.980785 0.299578 +v 0.339275 0.923880 0.587643 +v 0.492551 0.831470 0.853124 +v 0.626899 0.707107 1.085821 +v 0.737155 0.555570 1.276790 +v 0.819082 0.382683 1.418693 +v 0.869533 0.195090 1.506076 +v 0.886568 0.000000 1.535582 +v 0.869533 -0.195090 1.506076 +v 0.819082 -0.382683 1.418693 +v 0.737155 -0.555570 1.276790 +v 0.626899 -0.707107 1.085821 +v 0.492551 -0.831470 0.853124 +v 0.339275 -0.923880 0.587642 +v 0.172961 -0.980785 0.299578 +v 0.089531 0.980785 0.334136 +v 0.175622 0.923880 0.655430 +v 0.254963 0.831470 0.951536 +v 0.324507 0.707107 1.211076 +v 0.381579 0.555570 1.424074 +v 0.423988 0.382683 1.582346 +v 0.450103 0.195090 1.679809 +v 0.458922 0.000000 1.712719 +v 0.450103 -0.195090 1.679810 +v 0.423988 -0.382683 1.582346 +v 0.381579 -0.555570 1.424074 +v 0.324507 -0.707107 1.211076 +v 0.254963 -0.831470 0.951536 +v 0.175622 -0.923880 0.655430 +v 0.089531 -0.980785 0.334135 +v -0.000000 0.980785 0.345923 +v -0.000000 0.923880 0.678551 +v 0.000000 0.831470 0.985103 +v 0.000000 0.707107 1.253798 +v 0.000000 0.555570 1.474310 +v 0.000000 0.382683 1.638165 +v 0.000000 0.195090 1.739067 +v 0.000000 0.000000 1.773137 +v 0.000000 -0.195090 1.739067 +v 0.000000 -0.382683 1.638165 +v 0.000000 -0.555570 1.474310 +v 0.000000 -0.707107 1.253798 +v 0.000000 -0.831470 0.985103 +v 0.000000 -0.923880 0.678551 +v -0.000000 -0.980785 0.345922 +v 0.000000 -1.000000 0.000001 +v -0.089531 0.980785 0.334136 +v -0.175622 0.923880 0.655430 +v -0.254963 0.831470 0.951536 +v -0.324506 0.707107 1.211075 +v -0.381579 0.555570 1.424074 +v -0.423988 0.382683 1.582346 +v -0.450103 0.195090 1.679809 +v -0.458921 0.000000 1.712719 +v -0.450103 -0.195090 1.679809 +v -0.423988 -0.382683 1.582346 +v -0.381579 -0.555570 1.424074 +v -0.324506 -0.707107 1.211075 +v -0.254963 -0.831470 0.951536 +v -0.175622 -0.923880 0.655430 +v -0.089531 -0.980785 0.334135 +v -0.172961 0.980785 0.299578 +v -0.339275 0.923880 0.587643 +v -0.492551 0.831470 0.853124 +v -0.626898 0.707107 1.085821 +v -0.737154 0.555570 1.276790 +v -0.819082 0.382683 1.418693 +v -0.869533 0.195090 1.506076 +v -0.886568 0.000000 1.535582 +v -0.869533 -0.195090 1.506076 +v -0.819082 -0.382683 1.418693 +v -0.737154 -0.555570 1.276790 +v -0.626898 -0.707107 1.085821 +v -0.492551 -0.831470 0.853124 +v -0.339275 -0.923880 0.587642 +v -0.172961 -0.980785 0.299578 +v -0.244604 0.980785 0.244605 +v -0.479808 0.923880 0.479808 +v -0.696572 0.831470 0.696573 +v -0.886568 0.707107 0.886569 +v -1.042494 0.555570 1.042495 +v -1.158357 0.382683 1.158358 +v -1.229705 0.195090 1.229706 +v -1.253797 0.000000 1.253798 +v -1.229705 -0.195090 1.229706 +v -1.158357 -0.382683 1.158358 +v -1.042494 -0.555570 1.042495 +v -0.886568 -0.707107 0.886569 +v -0.696572 -0.831470 0.696573 +v -0.479807 -0.923880 0.479808 +v -0.244604 -0.980785 0.244604 +v -0.000001 1.000000 0.000001 +v -0.299578 0.980785 0.172962 +v -0.587642 0.923880 0.339276 +v -0.853123 0.831470 0.492552 +v -1.085820 0.707107 0.626899 +v -1.276789 0.555570 0.737155 +v -1.418692 0.382683 0.819083 +v -1.506075 0.195090 0.869533 +v -1.535581 0.000000 0.886569 +v -1.506075 -0.195090 0.869533 +v -1.418692 -0.382683 0.819083 +v -1.276789 -0.555570 0.737155 +v -1.085820 -0.707107 0.626899 +v -0.853123 -0.831470 0.492552 +v -0.587642 -0.923880 0.339276 +v -0.299577 -0.980785 0.172961 +v -0.334135 0.980785 0.089532 +v -0.655429 0.923880 0.175622 +v -0.951535 0.831470 0.254964 +v -1.211075 0.707107 0.324507 +v -1.424073 0.555570 0.381580 +v -1.582345 0.382683 0.423989 +v -1.679809 0.195090 0.450104 +v -1.712718 0.000000 0.458922 +v -1.679809 -0.195090 0.450104 +v -1.582345 -0.382683 0.423989 +v -1.424073 -0.555570 0.381580 +v -1.211075 -0.707107 0.324507 +v -0.951535 -0.831470 0.254964 +v -0.655429 -0.923880 0.175622 +v -0.334135 -0.980785 0.089532 +v -0.345922 0.980785 0.000001 +v -0.678550 0.923880 0.000001 +v -0.985102 0.831470 0.000001 +v -1.253797 0.707107 0.000001 +v -1.474309 0.555570 0.000001 +v -1.638165 0.382683 0.000001 +v -1.739066 0.195090 0.000000 +v -1.773136 0.000000 0.000001 +v -1.739066 -0.195090 0.000000 +v -1.638165 -0.382683 0.000001 +v -1.474309 -0.555570 0.000001 +v -1.253797 -0.707107 0.000001 +v -0.985102 -0.831470 0.000001 +v -0.678550 -0.923880 0.000001 +v -0.345922 -0.980785 0.000001 +v -0.334135 0.980785 -0.089531 +v -0.655429 0.923880 -0.175621 +v -0.951535 0.831470 -0.254963 +v -1.211075 0.707107 -0.324506 +v -1.424073 0.555570 -0.381579 +v -1.582345 0.382683 -0.423987 +v -1.679809 0.195090 -0.450103 +v -1.712718 0.000000 -0.458921 +v -1.679809 -0.195090 -0.450103 +v -1.582345 -0.382683 -0.423988 +v -1.424073 -0.555570 -0.381579 +v -1.211075 -0.707107 -0.324506 +v -0.951535 -0.831470 -0.254963 +v -0.655429 -0.923880 -0.175621 +v -0.334135 -0.980785 -0.089531 +v -0.299578 0.980785 -0.172961 +v -0.587642 0.923880 -0.339275 +v -0.853123 0.831470 -0.492550 +v -1.085820 0.707107 -0.626898 +v -1.276789 0.555570 -0.737154 +v -1.418692 0.382683 -0.819082 +v -1.506075 0.195090 -0.869533 +v -1.535581 0.000000 -0.886568 +v -1.506075 -0.195090 -0.869533 +v -1.418692 -0.382683 -0.819082 +v -1.276789 -0.555570 -0.737154 +v -1.085820 -0.707107 -0.626898 +v -0.853123 -0.831470 -0.492550 +v -0.587641 -0.923880 -0.339274 +v -0.299577 -0.980785 -0.172960 +v -0.244604 0.980785 -0.244603 +v -0.479807 0.923880 -0.479807 +v -0.696572 0.831470 -0.696572 +v -0.886568 0.707107 -0.886568 +v -1.042494 0.555570 -1.042493 +v -1.158357 0.382683 -1.158357 +v -1.229705 0.195090 -1.229705 +v -1.253797 0.000000 -1.253796 +v -1.229705 -0.195090 -1.229705 +v -1.158357 -0.382683 -1.158357 +v -1.042494 -0.555570 -1.042493 +v -0.886568 -0.707107 -0.886568 +v -0.696572 -0.831470 -0.696572 +v -0.479807 -0.923880 -0.479807 +v -0.244604 -0.980785 -0.244603 +v -0.172961 0.980785 -0.299577 +v -0.339275 0.923880 -0.587641 +v -0.492551 0.831470 -0.853123 +v -0.626899 0.707107 -1.085819 +v -0.737155 0.555570 -1.276789 +v -0.819082 0.382683 -1.418691 +v -0.869533 0.195090 -1.506075 +v -0.886568 0.000000 -1.535581 +v -0.869533 -0.195090 -1.506075 +v -0.819082 -0.382683 -1.418692 +v -0.737155 -0.555570 -1.276789 +v -0.626899 -0.707107 -1.085819 +v -0.492551 -0.831470 -0.853123 +v -0.339275 -0.923880 -0.587641 +v -0.172961 -0.980785 -0.299576 +v -0.089531 0.980785 -0.334135 +v -0.175622 0.923880 -0.655429 +v -0.254963 0.831470 -0.951535 +v -0.324507 0.707107 -1.211074 +v -0.381579 0.555570 -1.424073 +v -0.423988 0.382683 -1.582345 +v -0.450103 0.195090 -1.679808 +v -0.458921 0.000000 -1.712718 +v -0.450103 -0.195090 -1.679808 +v -0.423988 -0.382683 -1.582345 +v -0.381579 -0.555570 -1.424073 +v -0.324507 -0.707107 -1.211074 +v -0.254963 -0.831470 -0.951535 +v -0.175622 -0.923880 -0.655428 +v -0.089531 -0.980785 -0.334134 +v 0.000000 0.923880 -0.678550 +v 0.000000 0.831470 -0.985101 +v -0.000000 0.707107 -1.253796 +v -0.000000 0.555570 -1.474309 +v -0.000000 0.382683 -1.638164 +v 0.000000 0.195090 -1.739065 +v 0.000000 0.000000 -1.773136 +v 0.000000 -0.195090 -1.739066 +v 0.000000 -0.382683 -1.638164 +v -0.000000 -0.555570 -1.474309 +v -0.000000 -0.707107 -1.253796 +v 0.000000 -0.831470 -0.985101 +v 0.000000 -0.923880 -0.678549 +v 0.000000 -0.980785 -0.345921 +vt 0.5195 0.6683 +vt 0.5430 0.5819 +vt 0.5646 0.6624 +vt 0.5195 0.8049 +vt 0.5916 0.7631 +vt 0.5195 0.7726 +vt 0.5195 0.7382 +vt 0.5827 0.7299 +vt 0.5816 0.7259 +vt 0.5195 0.7341 +vt 0.5195 0.7909 +vt 0.5963 0.7808 +vt 0.5704 0.6841 +vt 0.5195 0.6908 +vt 0.5195 0.8250 +vt 0.6052 0.8138 +vt 0.5584 0.6391 +vt 0.5195 0.6442 +vt 0.5195 0.8413 +vt 0.6094 0.8295 +vt 0.5457 0.5919 +vt 0.5195 0.5953 +vt 0.5195 0.8417 +vt 0.6095 0.8299 +vt 0.5327 0.5433 +vt 0.5195 0.5451 +vt 0.6061 0.8173 +vt 0.5195 0.8287 +vt 0.5195 0.5850 +vt 0.5195 0.4941 +vt 0.5195 0.4941 +vt 0.6000 0.7943 +vt 0.6868 0.7839 +vt 0.5649 0.5728 +vt 0.5450 0.5383 +vt 0.6749 0.7632 +vt 0.6066 0.6450 +vt 0.6588 0.7353 +vt 0.6416 0.7055 +vt 0.6395 0.7019 +vt 0.6679 0.7511 +vt 0.6179 0.6645 +vt 0.6850 0.7807 +vt 0.5946 0.6241 +vt 0.6931 0.7948 +vt 0.5701 0.5818 +vt 0.6933 0.7951 +vt 0.6892 0.6638 +vt 0.6586 0.6332 +vt 0.7535 0.7281 +vt 0.6256 0.6003 +vt 0.7650 0.7396 +vt 0.5911 0.5657 +vt 0.7653 0.7399 +vt 0.5555 0.5302 +vt 0.7561 0.7307 +vt 0.5837 0.5584 +vt 0.7392 0.7139 +vt 0.6427 0.6173 +vt 0.7165 0.6911 +vt 0.6921 0.6667 +vt 0.7294 0.7040 +vt 0.5636 0.5196 +vt 0.7886 0.6495 +vt 0.6704 0.5812 +vt 0.7607 0.6334 +vt 0.7309 0.6162 +vt 0.7273 0.6141 +vt 0.7765 0.6425 +vt 0.6898 0.5925 +vt 0.8061 0.6596 +vt 0.6495 0.5692 +vt 0.8202 0.6677 +vt 0.6072 0.5447 +vt 0.8205 0.6679 +vt 0.8092 0.6614 +vt 0.5982 0.5395 +vt 0.7095 0.5450 +vt 0.6645 0.5330 +vt 0.8549 0.5840 +vt 0.6173 0.5203 +vt 0.8552 0.5841 +vt 0.5687 0.5073 +vt 0.8427 0.5807 +vt 0.6073 0.5176 +vt 0.8197 0.5746 +vt 0.6878 0.5392 +vt 0.7885 0.5662 +vt 0.7553 0.5573 +vt 0.7513 0.5562 +vt 0.8062 0.5709 +vt 0.8391 0.5798 +vt 0.6103 0.4941 +vt 0.6937 0.4941 +vt 0.7980 0.4941 +vt 0.7636 0.4941 +vt 0.7594 0.4941 +vt 0.8163 0.4941 +vt 0.7162 0.4941 +vt 0.8504 0.4941 +vt 0.6696 0.4941 +vt 0.8667 0.4941 +vt 0.6207 0.4941 +vt 0.8671 0.4941 +vt 0.5705 0.4941 +vt 0.8541 0.4941 +vt 0.8302 0.4941 +vt 0.8549 0.4043 +vt 0.6173 0.4679 +vt 0.8552 0.4042 +vt 0.5687 0.4810 +vt 0.8427 0.4076 +vt 0.6073 0.4706 +vt 0.8197 0.4137 +vt 0.6878 0.4491 +vt 0.7885 0.4221 +vt 0.7553 0.4310 +vt 0.7513 0.4320 +vt 0.8062 0.4173 +vt 0.7095 0.4432 +vt 0.8391 0.4085 +vt 0.6645 0.4553 +vt 0.7607 0.3549 +vt 0.7309 0.3721 +vt 0.7273 0.3742 +vt 0.7765 0.3458 +vt 0.6898 0.3958 +vt 0.8061 0.3287 +vt 0.6495 0.4191 +vt 0.8202 0.3205 +vt 0.6072 0.4435 +vt 0.8205 0.3204 +vt 0.5636 0.4687 +vt 0.8092 0.3269 +vt 0.5982 0.4487 +vt 0.7886 0.3388 +vt 0.6704 0.4070 +vt 0.5911 0.4226 +vt 0.7650 0.2486 +vt 0.7653 0.2484 +vt 0.5555 0.4581 +vt 0.7561 0.2576 +vt 0.5837 0.4299 +vt 0.7392 0.2744 +vt 0.6427 0.3710 +vt 0.7165 0.2972 +vt 0.6921 0.3216 +vt 0.6892 0.3245 +vt 0.7294 0.2843 +vt 0.6586 0.3551 +vt 0.7535 0.2602 +vt 0.6256 0.3880 +vt 0.6416 0.2828 +vt 0.6588 0.2530 +vt 0.6395 0.2864 +vt 0.6679 0.2372 +vt 0.6179 0.3238 +vt 0.6850 0.2076 +vt 0.5946 0.3642 +vt 0.6931 0.1935 +vt 0.5701 0.4065 +vt 0.6933 0.1931 +vt 0.5450 0.4500 +vt 0.6868 0.2044 +vt 0.5649 0.4155 +vt 0.6749 0.2251 +vt 0.6066 0.3433 +vt 0.6094 0.1588 +vt 0.6095 0.1584 +vt 0.5327 0.4449 +vt 0.6061 0.1710 +vt 0.5430 0.4064 +vt 0.6000 0.1940 +vt 0.5646 0.3259 +vt 0.5916 0.2251 +vt 0.5827 0.2584 +vt 0.5816 0.2624 +vt 0.5963 0.2075 +vt 0.5704 0.3042 +vt 0.6052 0.1745 +vt 0.5584 0.3492 +vt 0.5457 0.3964 +vt 0.5195 0.2542 +vt 0.5195 0.2501 +vt 0.5195 0.1974 +vt 0.5195 0.2975 +vt 0.5195 0.1632 +vt 0.5195 0.3441 +vt 0.5195 0.1470 +vt 0.5195 0.3929 +vt 0.5195 0.1466 +vt 0.5195 0.4432 +vt 0.5195 0.1596 +vt 0.5195 0.4033 +vt 0.5195 0.1834 +vt 0.5195 0.3200 +vt 0.5195 0.2156 +vt 0.5063 0.4449 +vt 0.4329 0.1710 +vt 0.4960 0.4064 +vt 0.4391 0.1940 +vt 0.4744 0.3259 +vt 0.4475 0.2251 +vt 0.4564 0.2584 +vt 0.4574 0.2624 +vt 0.4427 0.2075 +vt 0.4686 0.3042 +vt 0.4339 0.1745 +vt 0.4807 0.3492 +vt 0.4297 0.1588 +vt 0.4933 0.3964 +vt 0.4296 0.1584 +vt 0.3996 0.2864 +vt 0.4212 0.3238 +vt 0.3541 0.2076 +vt 0.4445 0.3642 +vt 0.3459 0.1935 +vt 0.4689 0.4065 +vt 0.3458 0.1931 +vt 0.4941 0.4500 +vt 0.3523 0.2044 +vt 0.4741 0.4155 +vt 0.3642 0.2251 +vt 0.4324 0.3433 +vt 0.3803 0.2530 +vt 0.3975 0.2828 +vt 0.3712 0.2372 +vt 0.4553 0.4299 +vt 0.4835 0.4581 +vt 0.2830 0.2576 +vt 0.2998 0.2744 +vt 0.3964 0.3710 +vt 0.3226 0.2972 +vt 0.3469 0.3216 +vt 0.3499 0.3245 +vt 0.3097 0.2843 +vt 0.3805 0.3551 +vt 0.2856 0.2602 +vt 0.4134 0.3880 +vt 0.2740 0.2486 +vt 0.4480 0.4226 +vt 0.2738 0.2484 +vt 0.2330 0.3287 +vt 0.3896 0.4191 +vt 0.2189 0.3205 +vt 0.4319 0.4435 +vt 0.2185 0.3204 +vt 0.4754 0.4687 +vt 0.2298 0.3269 +vt 0.4409 0.4487 +vt 0.2504 0.3388 +vt 0.3687 0.4070 +vt 0.2783 0.3549 +vt 0.3082 0.3721 +vt 0.3118 0.3742 +vt 0.2625 0.3458 +vt 0.3492 0.3958 +vt 0.1964 0.4076 +vt 0.2194 0.4137 +vt 0.3513 0.4491 +vt 0.2505 0.4221 +vt 0.2838 0.4310 +vt 0.2878 0.4320 +vt 0.2329 0.4173 +vt 0.3296 0.4432 +vt 0.1999 0.4085 +vt 0.3746 0.4553 +vt 0.1842 0.4043 +vt 0.4218 0.4679 +vt 0.1838 0.4042 +vt 0.4703 0.4810 +vt 0.4318 0.4706 +vt 0.3695 0.4941 +vt 0.1723 0.4941 +vt 0.4183 0.4941 +vt 0.1720 0.4941 +vt 0.4686 0.4941 +vt 0.1850 0.4941 +vt 0.4287 0.4941 +vt 0.2088 0.4941 +vt 0.3453 0.4941 +vt 0.2410 0.4941 +vt 0.2755 0.4941 +vt 0.2796 0.4941 +vt 0.2228 0.4941 +vt 0.3229 0.4941 +vt 0.1886 0.4941 +vt 0.3513 0.5392 +vt 0.2505 0.5662 +vt 0.2838 0.5573 +vt 0.2878 0.5562 +vt 0.2329 0.5709 +vt 0.3296 0.5450 +vt 0.1999 0.5798 +vt 0.3746 0.5330 +vt 0.1842 0.5840 +vt 0.4218 0.5203 +vt 0.1838 0.5841 +vt 0.4703 0.5073 +vt 0.1964 0.5807 +vt 0.4318 0.5176 +vt 0.2194 0.5746 +vt 0.2189 0.6677 +vt 0.4319 0.5447 +vt 0.2185 0.6679 +vt 0.4754 0.5196 +vt 0.2298 0.6614 +vt 0.4409 0.5395 +vt 0.2504 0.6495 +vt 0.3687 0.5812 +vt 0.2783 0.6334 +vt 0.3082 0.6162 +vt 0.3118 0.6141 +vt 0.2625 0.6425 +vt 0.3492 0.5925 +vt 0.2330 0.6596 +vt 0.3896 0.5692 +vt 0.3226 0.6911 +vt 0.3469 0.6667 +vt 0.3499 0.6638 +vt 0.3097 0.7040 +vt 0.3805 0.6332 +vt 0.2856 0.7281 +vt 0.4134 0.6003 +vt 0.2740 0.7396 +vt 0.4480 0.5657 +vt 0.2738 0.7399 +vt 0.4835 0.5302 +vt 0.2830 0.7307 +vt 0.4553 0.5584 +vt 0.2998 0.7139 +vt 0.3964 0.6173 +vt 0.4445 0.6241 +vt 0.4689 0.5818 +vt 0.3459 0.7948 +vt 0.3458 0.7951 +vt 0.4941 0.5383 +vt 0.3523 0.7839 +vt 0.4741 0.5728 +vt 0.3642 0.7632 +vt 0.4324 0.6450 +vt 0.3803 0.7353 +vt 0.3975 0.7055 +vt 0.3996 0.7019 +vt 0.3712 0.7511 +vt 0.4212 0.6645 +vt 0.3541 0.7807 +vt 0.4574 0.7259 +vt 0.4427 0.7808 +vt 0.4686 0.6841 +vt 0.4339 0.8138 +vt 0.4807 0.6391 +vt 0.4297 0.8295 +vt 0.4933 0.5919 +vt 0.4296 0.8299 +vt 0.5063 0.5433 +vt 0.4329 0.8173 +vt 0.4960 0.5819 +vt 0.4391 0.7943 +vt 0.4744 0.6624 +vt 0.4475 0.7631 +vt 0.4564 0.7299 +vn 0.0222 0.9854 -0.1686 +vn 0.1152 -0.4705 -0.8748 +vn 0.0380 0.9568 -0.2884 +vn 0.0951 -0.6848 -0.7225 +vn 0.0552 0.9061 -0.4194 +vn 0.0744 -0.8219 -0.5648 +vn 0.0744 0.8219 -0.5648 +vn 0.0552 -0.9061 -0.4194 +vn 0.0951 0.6848 -0.7225 +vn 0.0380 -0.9568 -0.2884 +vn 0.1152 0.4705 -0.8748 +vn 0.0222 -0.9854 -0.1686 +vn 0.1286 0.1706 -0.9769 +vn 0.0073 0.9984 -0.0555 +vn 0.0073 -0.9984 -0.0555 +vn 0.1286 -0.1706 -0.9769 +vn 0.3771 0.1706 -0.9103 +vn 0.0214 0.9984 -0.0517 +vn 0.0214 -0.9984 -0.0517 +vn 0.3771 -0.1706 -0.9103 +vn 0.0651 0.9854 -0.1571 +vn 0.3377 -0.4705 -0.8152 +vn 0.1113 0.9568 -0.2688 +vn 0.2789 -0.6848 -0.6733 +vn 0.1619 0.9061 -0.3908 +vn 0.2180 -0.8219 -0.5263 +vn 0.2180 0.8219 -0.5263 +vn 0.1619 -0.9061 -0.3908 +vn 0.2789 0.6848 -0.6733 +vn 0.1113 -0.9568 -0.2688 +vn 0.3377 0.4705 -0.8152 +vn 0.0651 -0.9854 -0.1571 +vn 0.3468 -0.8219 -0.4519 +vn 0.3468 0.8219 -0.4519 +vn 0.2575 -0.9061 -0.3356 +vn 0.4436 0.6848 -0.5782 +vn 0.1771 -0.9568 -0.2308 +vn 0.5372 0.4705 -0.7000 +vn 0.1035 -0.9854 -0.1349 +vn 0.5998 0.1706 -0.7817 +vn 0.0341 0.9984 -0.0444 +vn 0.0341 -0.9984 -0.0444 +vn 0.5998 -0.1706 -0.7817 +vn 0.1035 0.9854 -0.1349 +vn 0.5372 -0.4705 -0.7000 +vn 0.1771 0.9568 -0.2308 +vn 0.4436 -0.6848 -0.5782 +vn 0.2575 0.9061 -0.3356 +vn 0.0444 -0.9984 -0.0341 +vn 0.7817 -0.1706 -0.5998 +vn 0.1349 0.9854 -0.1035 +vn 0.7000 -0.4705 -0.5372 +vn 0.2308 0.9568 -0.1771 +vn 0.5782 -0.6848 -0.4436 +vn 0.3356 0.9061 -0.2575 +vn 0.4519 -0.8219 -0.3468 +vn 0.4519 0.8219 -0.3468 +vn 0.3356 -0.9061 -0.2575 +vn 0.5782 0.6848 -0.4436 +vn 0.2308 -0.9568 -0.1771 +vn 0.7000 0.4705 -0.5372 +vn 0.1349 -0.9854 -0.1035 +vn 0.7817 0.1706 -0.5998 +vn 0.0444 0.9984 -0.0341 +vn 0.3908 -0.9061 -0.1619 +vn 0.6733 0.6848 -0.2789 +vn 0.2688 -0.9568 -0.1113 +vn 0.8152 0.4705 -0.3377 +vn 0.1571 -0.9854 -0.0651 +vn 0.9103 0.1706 -0.3771 +vn 0.0517 0.9984 -0.0214 +vn 0.0517 -0.9984 -0.0214 +vn 0.9103 -0.1706 -0.3771 +vn 0.1571 0.9854 -0.0651 +vn 0.8152 -0.4705 -0.3377 +vn 0.2688 0.9568 -0.1113 +vn 0.6733 -0.6848 -0.2789 +vn 0.3908 0.9061 -0.1619 +vn 0.5263 -0.8219 -0.2180 +vn 0.5263 0.8219 -0.2180 +vn 0.1686 0.9854 -0.0222 +vn 0.8748 -0.4705 -0.1152 +vn 0.2884 0.9568 -0.0380 +vn 0.7225 -0.6848 -0.0951 +vn 0.4194 0.9061 -0.0552 +vn 0.5648 -0.8219 -0.0744 +vn 0.5648 0.8219 -0.0744 +vn 0.4194 -0.9061 -0.0552 +vn 0.7225 0.6848 -0.0951 +vn 0.2884 -0.9568 -0.0380 +vn 0.8748 0.4705 -0.1152 +vn 0.1686 -0.9854 -0.0222 +vn 0.9769 0.1706 -0.1286 +vn 0.0555 0.9984 -0.0073 +vn 0.0555 -0.9984 -0.0073 +vn 0.9769 -0.1706 -0.1286 +vn 0.7225 0.6848 0.0951 +vn 0.2884 -0.9568 0.0380 +vn 0.8748 0.4705 0.1152 +vn 0.1686 -0.9854 0.0222 +vn 0.9769 0.1706 0.1286 +vn 0.0555 0.9984 0.0073 +vn 0.0555 -0.9984 0.0073 +vn 0.9769 -0.1706 0.1286 +vn 0.1686 0.9854 0.0222 +vn 0.8748 -0.4705 0.1152 +vn 0.2884 0.9568 0.0380 +vn 0.7225 -0.6848 0.0951 +vn 0.4194 0.9061 0.0552 +vn 0.5648 -0.8219 0.0744 +vn 0.5648 0.8219 0.0744 +vn 0.4194 -0.9061 0.0552 +vn 0.8152 -0.4705 0.3377 +vn 0.2688 0.9568 0.1113 +vn 0.6733 -0.6848 0.2789 +vn 0.3908 0.9061 0.1619 +vn 0.5263 -0.8219 0.2180 +vn 0.5263 0.8219 0.2180 +vn 0.3908 -0.9061 0.1619 +vn 0.6733 0.6848 0.2789 +vn 0.2688 -0.9568 0.1113 +vn 0.8152 0.4705 0.3377 +vn 0.1571 -0.9854 0.0651 +vn 0.9103 0.1706 0.3771 +vn 0.0517 0.9984 0.0214 +vn 0.0517 -0.9984 0.0214 +vn 0.9103 -0.1706 0.3771 +vn 0.1571 0.9854 0.0651 +vn 0.2308 -0.9568 0.1771 +vn 0.7000 0.4705 0.5372 +vn 0.1349 -0.9854 0.1035 +vn 0.7817 0.1706 0.5998 +vn 0.0444 0.9984 0.0341 +vn 0.0444 -0.9984 0.0341 +vn 0.7817 -0.1706 0.5998 +vn 0.1349 0.9854 0.1035 +vn 0.7000 -0.4705 0.5372 +vn 0.2308 0.9568 0.1771 +vn 0.5782 -0.6848 0.4436 +vn 0.3356 0.9061 0.2575 +vn 0.4519 -0.8219 0.3468 +vn 0.4519 0.8219 0.3468 +vn 0.3356 -0.9061 0.2575 +vn 0.5782 0.6848 0.4436 +vn 0.1771 0.9568 0.2308 +vn 0.4436 -0.6848 0.5782 +vn 0.2575 0.9061 0.3356 +vn 0.3468 -0.8219 0.4519 +vn 0.3468 0.8219 0.4519 +vn 0.2575 -0.9061 0.3356 +vn 0.4436 0.6848 0.5782 +vn 0.1771 -0.9568 0.2308 +vn 0.5372 0.4705 0.7000 +vn 0.1035 -0.9854 0.1349 +vn 0.5998 0.1706 0.7817 +vn 0.0341 0.9984 0.0444 +vn 0.0341 -0.9984 0.0444 +vn 0.5998 -0.1706 0.7817 +vn 0.1035 0.9854 0.1349 +vn 0.5372 -0.4705 0.7000 +vn 0.3377 0.4705 0.8152 +vn 0.0651 -0.9854 0.1571 +vn 0.3771 0.1706 0.9103 +vn 0.0214 0.9984 0.0517 +vn 0.0214 -0.9984 0.0517 +vn 0.3771 -0.1706 0.9103 +vn 0.0651 0.9854 0.1571 +vn 0.3377 -0.4705 0.8152 +vn 0.1113 0.9568 0.2688 +vn 0.2789 -0.6848 0.6733 +vn 0.1619 0.9061 0.3908 +vn 0.2180 -0.8219 0.5263 +vn 0.2180 0.8219 0.5263 +vn 0.1619 -0.9061 0.3908 +vn 0.2789 0.6848 0.6733 +vn 0.1113 -0.9568 0.2688 +vn 0.0951 -0.6848 0.7225 +vn 0.0552 0.9061 0.4194 +vn 0.0744 -0.8219 0.5648 +vn 0.0744 0.8219 0.5648 +vn 0.0552 -0.9061 0.4194 +vn 0.0951 0.6848 0.7225 +vn 0.0380 -0.9568 0.2884 +vn 0.1152 0.4705 0.8748 +vn 0.0222 -0.9854 0.1686 +vn 0.1286 0.1706 0.9769 +vn 0.0073 0.9984 0.0555 +vn 0.0073 -0.9984 0.0555 +vn 0.1286 -0.1706 0.9769 +vn 0.0222 0.9854 0.1686 +vn 0.1152 -0.4705 0.8748 +vn 0.0380 0.9568 0.2884 +vn -0.0222 -0.9854 0.1686 +vn -0.1286 0.1706 0.9769 +vn -0.0073 0.9984 0.0555 +vn -0.0073 -0.9984 0.0555 +vn -0.1286 -0.1706 0.9769 +vn -0.0222 0.9854 0.1686 +vn -0.1152 -0.4705 0.8748 +vn -0.0380 0.9568 0.2884 +vn -0.0951 -0.6848 0.7225 +vn -0.0552 0.9061 0.4194 +vn -0.0744 -0.8219 0.5648 +vn -0.0744 0.8219 0.5648 +vn -0.0552 -0.9061 0.4194 +vn -0.0951 0.6848 0.7225 +vn -0.0380 -0.9568 0.2884 +vn -0.1152 0.4705 0.8748 +vn -0.2180 -0.8219 0.5263 +vn -0.2180 0.8219 0.5263 +vn -0.1619 -0.9061 0.3908 +vn -0.2789 0.6848 0.6733 +vn -0.1113 -0.9568 0.2688 +vn -0.3377 0.4705 0.8152 +vn -0.0651 -0.9854 0.1571 +vn -0.3771 0.1706 0.9103 +vn -0.0214 0.9984 0.0517 +vn -0.0214 -0.9984 0.0517 +vn -0.3771 -0.1706 0.9103 +vn -0.0651 0.9854 0.1571 +vn -0.3377 -0.4705 0.8152 +vn -0.1113 0.9568 0.2688 +vn -0.2789 -0.6848 0.6733 +vn -0.1619 0.9061 0.3908 +vn -0.0341 0.9984 0.0444 +vn -0.0341 -0.9984 0.0444 +vn -0.5998 -0.1706 0.7817 +vn -0.1035 0.9854 0.1349 +vn -0.5372 -0.4705 0.7000 +vn -0.1771 0.9568 0.2308 +vn -0.4436 -0.6848 0.5782 +vn -0.2575 0.9061 0.3356 +vn -0.3468 -0.8219 0.4519 +vn -0.3468 0.8219 0.4519 +vn -0.2575 -0.9061 0.3356 +vn -0.4436 0.6848 0.5782 +vn -0.1771 -0.9568 0.2308 +vn -0.5372 0.4705 0.7000 +vn -0.1035 -0.9854 0.1349 +vn -0.5998 0.1706 0.7817 +vn -0.4519 0.8219 0.3468 +vn -0.3356 -0.9061 0.2575 +vn -0.5782 0.6848 0.4436 +vn -0.2308 -0.9568 0.1771 +vn -0.7000 0.4705 0.5372 +vn -0.1349 -0.9854 0.1035 +vn -0.7817 0.1706 0.5998 +vn -0.0444 0.9984 0.0341 +vn -0.0444 -0.9984 0.0341 +vn -0.7817 -0.1706 0.5998 +vn -0.1349 0.9854 0.1035 +vn -0.7000 -0.4705 0.5372 +vn -0.2308 0.9568 0.1771 +vn -0.5782 -0.6848 0.4436 +vn -0.3356 0.9061 0.2575 +vn -0.4519 -0.8219 0.3468 +vn -0.9103 -0.1706 0.3771 +vn -0.1571 0.9854 0.0651 +vn -0.8152 -0.4705 0.3377 +vn -0.2688 0.9568 0.1113 +vn -0.6733 -0.6848 0.2789 +vn -0.3908 0.9061 0.1619 +vn -0.5263 -0.8219 0.2180 +vn -0.5263 0.8219 0.2180 +vn -0.3908 -0.9061 0.1619 +vn -0.6733 0.6848 0.2789 +vn -0.2688 -0.9568 0.1113 +vn -0.8152 0.4705 0.3377 +vn -0.1571 -0.9854 0.0651 +vn -0.9103 0.1706 0.3771 +vn -0.0517 0.9984 0.0214 +vn -0.0517 -0.9984 0.0214 +vn -0.4194 -0.9061 0.0552 +vn -0.7225 0.6848 0.0951 +vn -0.2884 -0.9568 0.0380 +vn -0.8748 0.4705 0.1152 +vn -0.1686 -0.9854 0.0222 +vn -0.9769 0.1706 0.1286 +vn -0.0555 0.9984 0.0073 +vn -0.0555 -0.9984 0.0073 +vn -0.9769 -0.1706 0.1286 +vn -0.1686 0.9854 0.0222 +vn -0.8748 -0.4705 0.1152 +vn -0.2884 0.9568 0.0380 +vn -0.7225 -0.6848 0.0951 +vn -0.4194 0.9061 0.0552 +vn -0.5648 -0.8219 0.0744 +vn -0.5648 0.8219 0.0744 +vn -0.1686 0.9854 -0.0222 +vn -0.8748 -0.4705 -0.1152 +vn -0.2884 0.9568 -0.0380 +vn -0.7225 -0.6848 -0.0951 +vn -0.4194 0.9061 -0.0552 +vn -0.5648 -0.8219 -0.0744 +vn -0.5648 0.8219 -0.0744 +vn -0.4194 -0.9061 -0.0552 +vn -0.7225 0.6848 -0.0951 +vn -0.2884 -0.9568 -0.0380 +vn -0.8748 0.4705 -0.1152 +vn -0.1686 -0.9854 -0.0222 +vn -0.9769 0.1706 -0.1286 +vn -0.0555 0.9984 -0.0073 +vn -0.0555 -0.9984 -0.0073 +vn -0.9769 -0.1706 -0.1286 +vn -0.6733 0.6848 -0.2789 +vn -0.2688 -0.9568 -0.1113 +vn -0.8152 0.4705 -0.3377 +vn -0.1571 -0.9854 -0.0651 +vn -0.9103 0.1706 -0.3771 +vn -0.0517 0.9984 -0.0214 +vn -0.0517 -0.9984 -0.0214 +vn -0.9103 -0.1706 -0.3771 +vn -0.1571 0.9854 -0.0651 +vn -0.8152 -0.4705 -0.3377 +vn -0.2688 0.9568 -0.1113 +vn -0.6733 -0.6848 -0.2789 +vn -0.3908 0.9061 -0.1619 +vn -0.5263 -0.8219 -0.2180 +vn -0.5263 0.8219 -0.2180 +vn -0.3908 -0.9061 -0.1619 +vn -0.7000 -0.4705 -0.5372 +vn -0.2308 0.9568 -0.1771 +vn -0.5782 -0.6848 -0.4436 +vn -0.3356 0.9061 -0.2575 +vn -0.4519 -0.8219 -0.3468 +vn -0.4519 0.8219 -0.3468 +vn -0.3356 -0.9061 -0.2575 +vn -0.5782 0.6848 -0.4436 +vn -0.2308 -0.9568 -0.1771 +vn -0.7000 0.4705 -0.5372 +vn -0.1349 -0.9854 -0.1035 +vn -0.7817 0.1706 -0.5998 +vn -0.0444 0.9984 -0.0341 +vn -0.0444 -0.9984 -0.0341 +vn -0.7817 -0.1706 -0.5998 +vn -0.1349 0.9854 -0.1035 +vn -0.1771 -0.9568 -0.2308 +vn -0.5372 0.4705 -0.7000 +vn -0.1035 -0.9854 -0.1349 +vn -0.5998 0.1706 -0.7817 +vn -0.0341 0.9984 -0.0444 +vn -0.0341 -0.9984 -0.0444 +vn -0.5998 -0.1706 -0.7817 +vn -0.1035 0.9854 -0.1349 +vn -0.5372 -0.4705 -0.7000 +vn -0.1771 0.9568 -0.2308 +vn -0.4436 -0.6848 -0.5782 +vn -0.2575 0.9061 -0.3356 +vn -0.3468 -0.8219 -0.4519 +vn -0.3468 0.8219 -0.4519 +vn -0.2575 -0.9061 -0.3356 +vn -0.4436 0.6848 -0.5782 +vn -0.2789 -0.6848 -0.6733 +vn -0.1619 0.9061 -0.3908 +vn -0.2180 -0.8219 -0.5263 +vn -0.2180 0.8219 -0.5263 +vn -0.1619 -0.9061 -0.3908 +vn -0.2789 0.6848 -0.6733 +vn -0.1113 -0.9568 -0.2688 +vn -0.3377 0.4705 -0.8152 +vn -0.0651 -0.9854 -0.1571 +vn -0.3771 0.1706 -0.9103 +vn -0.0214 0.9984 -0.0517 +vn -0.0214 -0.9984 -0.0517 +vn -0.3771 -0.1706 -0.9103 +vn -0.0651 0.9854 -0.1571 +vn -0.3377 -0.4705 -0.8152 +vn -0.1113 0.9568 -0.2688 +vn -0.0222 -0.9854 -0.1686 +vn -0.1286 0.1706 -0.9769 +vn -0.0073 0.9984 -0.0555 +vn -0.0073 -0.9984 -0.0555 +vn -0.1286 -0.1706 -0.9769 +vn -0.0222 0.9854 -0.1686 +vn -0.1152 -0.4705 -0.8748 +vn -0.0380 0.9568 -0.2884 +vn -0.0951 -0.6848 -0.7225 +vn -0.0552 0.9061 -0.4194 +vn -0.0744 -0.8219 -0.5648 +vn -0.0744 0.8219 -0.5648 +vn -0.0552 -0.9061 -0.4194 +vn -0.0951 0.6848 -0.7225 +vn -0.0380 -0.9568 -0.2884 +vn -0.1152 0.4705 -0.8748 +usemtl None +f 349/1/1 2/2/1 3/3/1 +f 356/4/2 11/5/2 357/6/2 +f 350/7/3 3/3/3 4/8/3 +f 357/6/4 12/9/4 358/10/4 +f 351/11/5 4/8/5 5/12/5 +f 358/10/6 13/13/6 359/14/6 +f 352/15/7 5/12/7 6/16/7 +f 359/14/8 14/17/8 360/18/8 +f 353/19/9 6/16/9 7/20/9 +f 360/18/10 15/21/10 361/22/10 +f 354/23/11 7/20/11 8/24/11 +f 361/22/12 16/25/12 362/26/12 +f 354/23/13 9/27/13 355/28/13 +f 1/29/14 228/30/14 2/2/14 +f 182/31/15 362/26/15 16/25/15 +f 356/4/16 9/27/16 10/32/16 +f 8/24/17 24/33/17 9/27/17 +f 2/2/18 228/30/18 17/34/18 +f 182/31/19 16/25/19 31/35/19 +f 10/32/20 24/33/20 25/36/20 +f 2/2/21 18/37/21 3/3/21 +f 10/32/22 26/38/22 11/5/22 +f 3/3/23 19/39/23 4/8/23 +f 11/5/24 27/40/24 12/9/24 +f 4/8/25 20/41/25 5/12/25 +f 12/9/26 28/42/26 13/13/26 +f 5/12/27 21/43/27 6/16/27 +f 13/13/28 29/44/28 14/17/28 +f 7/20/29 21/43/29 22/45/29 +f 14/17/30 30/46/30 15/21/30 +f 7/20/31 23/47/31 8/24/31 +f 15/21/32 31/35/32 16/25/32 +f 28/42/33 42/48/33 43/49/33 +f 20/41/34 36/50/34 21/43/34 +f 29/44/35 43/49/35 44/51/35 +f 21/43/36 37/52/36 22/45/36 +f 29/44/37 45/53/37 30/46/37 +f 22/45/38 38/54/38 23/47/38 +f 30/46/39 46/55/39 31/35/39 +f 23/47/40 39/56/40 24/33/40 +f 17/34/41 228/30/41 32/57/41 +f 182/31/42 31/35/42 46/55/42 +f 24/33/43 40/58/43 25/36/43 +f 18/37/44 32/57/44 33/59/44 +f 26/38/45 40/58/45 41/60/45 +f 18/37/46 34/61/46 19/39/46 +f 27/40/47 41/60/47 42/48/47 +f 19/39/48 35/62/48 20/41/48 +f 182/31/49 46/55/49 61/63/49 +f 39/56/50 55/64/50 40/58/50 +f 32/57/51 48/65/51 33/59/51 +f 40/58/52 56/66/52 41/60/52 +f 33/59/53 49/67/53 34/61/53 +f 42/48/54 56/66/54 57/68/54 +f 34/61/55 50/69/55 35/62/55 +f 42/48/56 58/70/56 43/49/56 +f 35/62/57 51/71/57 36/50/57 +f 43/49/58 59/72/58 44/51/58 +f 36/50/59 52/73/59 37/52/59 +f 44/51/60 60/74/60 45/53/60 +f 38/54/61 52/73/61 53/75/61 +f 46/55/62 60/74/62 61/63/62 +f 39/56/63 53/75/63 54/76/63 +f 32/57/64 228/30/64 47/77/64 +f 59/72/65 73/78/65 74/79/65 +f 51/71/66 67/80/66 52/73/66 +f 59/72/67 75/81/67 60/74/67 +f 52/73/68 68/82/68 53/75/68 +f 61/63/69 75/81/69 76/83/69 +f 54/76/70 68/82/70 69/84/70 +f 47/77/71 228/30/71 62/85/71 +f 182/31/72 61/63/72 76/83/72 +f 54/76/73 70/86/73 55/64/73 +f 47/77/74 63/87/74 48/65/74 +f 55/64/75 71/88/75 56/66/75 +f 48/65/76 64/89/76 49/67/76 +f 57/68/77 71/88/77 72/90/77 +f 49/67/78 65/91/78 50/69/78 +f 57/68/79 73/78/79 58/70/79 +f 50/69/80 66/92/80 51/71/80 +f 63/87/81 77/93/81 78/94/81 +f 70/86/82 86/95/82 71/88/82 +f 63/87/83 79/96/83 64/89/83 +f 71/88/84 87/97/84 72/90/84 +f 64/89/85 80/98/85 65/91/85 +f 73/78/86 87/97/86 88/99/86 +f 65/91/87 81/100/87 66/92/87 +f 74/79/88 88/99/88 89/101/88 +f 66/92/89 82/102/89 67/80/89 +f 75/81/90 89/101/90 90/103/90 +f 68/82/91 82/102/91 83/104/91 +f 76/83/92 90/103/92 91/105/92 +f 69/84/93 83/104/93 84/106/93 +f 62/85/94 228/30/94 77/93/94 +f 182/31/95 76/83/95 91/105/95 +f 69/84/96 85/107/96 70/86/96 +f 81/100/97 97/108/97 82/102/97 +f 89/101/98 105/109/98 90/103/98 +f 82/102/99 98/110/99 83/104/99 +f 90/103/100 106/111/100 91/105/100 +f 83/104/101 99/112/101 84/106/101 +f 77/93/102 228/30/102 92/113/102 +f 182/31/103 91/105/103 106/111/103 +f 84/106/104 100/114/104 85/107/104 +f 77/93/105 93/115/105 78/94/105 +f 85/107/106 101/116/106 86/95/106 +f 79/96/107 93/115/107 94/117/107 +f 87/97/108 101/116/108 102/118/108 +f 79/96/109 95/119/109 80/98/109 +f 87/97/110 103/120/110 88/99/110 +f 80/98/111 96/121/111 81/100/111 +f 88/99/112 104/122/112 89/101/112 +f 100/114/113 116/123/113 101/116/113 +f 93/115/114 109/124/114 94/117/114 +f 101/116/115 117/125/115 102/118/115 +f 94/117/116 110/126/116 95/119/116 +f 103/120/117 117/125/117 118/127/117 +f 95/119/118 111/128/118 96/121/118 +f 104/122/119 118/127/119 119/129/119 +f 96/121/120 112/130/120 97/108/120 +f 105/109/121 119/129/121 120/131/121 +f 98/110/122 112/130/122 113/132/122 +f 106/111/123 120/131/123 121/133/123 +f 98/110/124 114/134/124 99/112/124 +f 92/113/125 228/30/125 107/135/125 +f 182/31/126 106/111/126 121/133/126 +f 99/112/127 115/136/127 100/114/127 +f 92/113/128 108/137/128 93/115/128 +f 119/129/129 135/138/129 120/131/129 +f 113/132/130 127/139/130 128/140/130 +f 121/133/131 135/138/131 136/141/131 +f 113/132/132 129/142/132 114/134/132 +f 107/135/133 228/30/133 122/143/133 +f 182/31/134 121/133/134 136/141/134 +f 115/136/135 129/142/135 130/144/135 +f 107/135/136 123/145/136 108/137/136 +f 115/136/137 131/146/137 116/123/137 +f 108/137/138 124/147/138 109/124/138 +f 117/125/139 131/146/139 132/148/139 +f 109/124/140 125/149/140 110/126/140 +f 118/127/141 132/148/141 133/150/141 +f 110/126/142 126/151/142 111/128/142 +f 118/127/143 134/152/143 119/129/143 +f 111/128/144 127/139/144 112/130/144 +f 123/145/145 139/153/145 124/147/145 +f 132/148/146 146/154/146 147/155/146 +f 124/147/147 140/156/147 125/149/147 +f 133/150/148 147/155/148 148/157/148 +f 125/149/149 141/158/149 126/151/149 +f 133/150/150 149/159/150 134/152/150 +f 126/151/151 142/160/151 127/139/151 +f 135/138/152 149/159/152 150/161/152 +f 128/140/153 142/160/153 143/162/153 +f 136/141/154 150/161/154 151/163/154 +f 128/140/155 144/164/155 129/142/155 +f 122/143/156 228/30/156 137/165/156 +f 182/31/157 136/141/157 151/163/157 +f 130/144/158 144/164/158 145/166/158 +f 122/143/159 138/167/159 123/145/159 +f 130/144/160 146/154/160 131/146/160 +f 143/162/161 157/168/161 158/169/161 +f 150/161/162 166/170/162 151/163/162 +f 144/164/163 158/169/163 159/171/163 +f 137/165/164 228/30/164 152/172/164 +f 182/31/165 151/163/165 166/170/165 +f 144/164/166 160/173/166 145/166/166 +f 138/167/167 152/172/167 153/174/167 +f 145/166/168 161/175/168 146/154/168 +f 138/167/169 154/176/169 139/153/169 +f 147/155/170 161/175/170 162/177/170 +f 139/153/171 155/178/171 140/156/171 +f 148/157/172 162/177/172 163/179/172 +f 140/156/173 156/180/173 141/158/173 +f 148/157/174 164/181/174 149/159/174 +f 141/158/175 157/168/175 142/160/175 +f 149/159/176 165/182/176 150/161/176 +f 161/175/177 177/183/177 162/177/177 +f 155/178/178 169/184/178 170/185/178 +f 163/179/179 177/183/179 178/186/179 +f 155/178/180 171/187/180 156/180/180 +f 164/181/181 178/186/181 179/188/181 +f 156/180/182 172/189/182 157/168/182 +f 165/182/183 179/188/183 180/190/183 +f 158/169/184 172/189/184 173/191/184 +f 166/170/185 180/190/185 181/192/185 +f 158/169/186 174/193/186 159/171/186 +f 152/172/187 228/30/187 167/194/187 +f 182/31/188 166/170/188 181/192/188 +f 159/171/189 175/195/189 160/173/189 +f 152/172/190 168/196/190 153/174/190 +f 160/173/191 176/197/191 161/175/191 +f 153/174/192 169/184/192 154/176/192 +f 180/190/193 197/198/193 181/192/193 +f 173/191/194 190/199/194 174/193/194 +f 167/194/195 228/30/195 183/200/195 +f 182/31/196 181/192/196 197/198/196 +f 175/195/197 190/199/197 191/201/197 +f 168/196/198 183/200/198 184/202/198 +f 175/195/199 192/203/199 176/197/199 +f 168/196/200 185/204/200 169/184/200 +f 176/197/201 193/205/201 177/183/201 +f 169/184/202 186/206/202 170/185/202 +f 178/186/203 193/205/203 194/207/203 +f 170/185/204 187/208/204 171/187/204 +f 179/188/205 194/207/205 195/209/205 +f 171/187/206 188/210/206 172/189/206 +f 180/190/207 195/209/207 196/211/207 +f 173/191/208 188/210/208 189/212/208 +f 194/207/209 208/213/209 209/214/209 +f 186/206/210 202/215/210 187/208/210 +f 194/207/211 210/216/211 195/209/211 +f 187/208/212 203/217/212 188/210/212 +f 196/211/213 210/216/213 211/218/213 +f 189/212/214 203/217/214 204/219/214 +f 196/211/215 212/220/215 197/198/215 +f 189/212/216 205/221/216 190/199/216 +f 183/200/217 228/30/217 198/222/217 +f 182/31/218 197/198/218 212/220/218 +f 191/201/219 205/221/219 206/223/219 +f 183/200/220 199/224/220 184/202/220 +f 191/201/221 207/225/221 192/203/221 +f 184/202/222 200/226/222 185/204/222 +f 192/203/223 208/213/223 193/205/223 +f 185/204/224 201/227/224 186/206/224 +f 198/222/225 228/30/225 213/228/225 +f 182/31/226 212/220/226 227/229/226 +f 206/223/227 220/230/227 221/231/227 +f 198/222/228 214/232/228 199/224/228 +f 206/223/229 222/233/229 207/225/229 +f 199/224/230 215/234/230 200/226/230 +f 207/225/231 223/235/231 208/213/231 +f 200/226/232 216/236/232 201/227/232 +f 209/214/233 223/235/233 224/237/233 +f 201/227/234 217/238/234 202/215/234 +f 209/214/235 225/239/235 210/216/235 +f 202/215/236 218/240/236 203/217/236 +f 210/216/237 226/241/237 211/218/237 +f 204/219/238 218/240/238 219/242/238 +f 212/220/239 226/241/239 227/229/239 +f 204/219/240 220/230/240 205/221/240 +f 216/236/241 233/243/241 217/238/241 +f 224/237/242 241/244/242 225/239/242 +f 217/238/243 234/245/243 218/240/243 +f 225/239/244 242/246/244 226/241/244 +f 219/242/245 234/245/245 235/247/245 +f 226/241/246 243/248/246 227/229/246 +f 219/242/247 236/249/247 220/230/247 +f 213/228/248 228/30/248 229/250/248 +f 182/31/249 227/229/249 243/248/249 +f 221/231/250 236/249/250 237/251/250 +f 213/228/251 230/252/251 214/232/251 +f 221/231/252 238/253/252 222/233/252 +f 214/232/253 231/254/253 215/234/253 +f 222/233/254 239/255/254 223/235/254 +f 215/234/255 232/256/255 216/236/255 +f 223/235/256 240/257/256 224/237/256 +f 237/251/257 251/258/257 252/259/257 +f 229/250/258 245/260/258 230/252/258 +f 237/251/259 253/261/259 238/253/259 +f 230/252/260 246/262/260 231/254/260 +f 239/255/261 253/261/261 254/263/261 +f 232/256/262 246/262/262 247/264/262 +f 240/257/263 254/263/263 255/265/263 +f 232/256/264 248/266/264 233/243/264 +f 241/244/265 255/265/265 256/267/265 +f 233/243/266 249/268/266 234/245/266 +f 241/244/267 257/269/267 242/246/267 +f 235/247/268 249/268/268 250/270/268 +f 243/248/269 257/269/269 258/271/269 +f 235/247/270 251/258/270 236/249/270 +f 229/250/271 228/30/271 244/272/271 +f 182/31/272 243/248/272 258/271/272 +f 255/265/273 271/273/273 256/267/273 +f 248/266/274 264/274/274 249/268/274 +f 257/269/275 271/273/275 272/275/275 +f 250/270/276 264/274/276 265/276/276 +f 257/269/277 273/277/277 258/271/277 +f 250/270/278 266/278/278 251/258/278 +f 244/272/279 228/30/279 259/279/279 +f 182/31/280 258/271/280 273/277/280 +f 252/259/281 266/278/281 267/280/281 +f 244/272/282 260/281/282 245/260/282 +f 252/259/283 268/282/283 253/261/283 +f 245/260/284 261/283/284 246/262/284 +f 253/261/285 269/284/285 254/263/285 +f 247/264/286 261/283/286 262/285/286 +f 254/263/287 270/286/287 255/265/287 +f 248/266/288 262/285/288 263/287/288 +f 259/279/289 275/288/289 260/281/289 +f 267/280/290 283/289/290 268/282/290 +f 260/281/291 276/290/291 261/283/291 +f 268/282/292 284/291/292 269/284/292 +f 261/283/293 277/292/293 262/285/293 +f 269/284/294 285/293/294 270/286/294 +f 263/287/295 277/292/295 278/294/295 +f 270/286/296 286/295/296 271/273/296 +f 263/287/297 279/296/297 264/274/297 +f 271/273/298 287/297/298 272/275/298 +f 265/276/299 279/296/299 280/298/299 +f 272/275/300 288/299/300 273/277/300 +f 265/276/301 281/300/301 266/278/301 +f 259/279/302 228/30/302 274/301/302 +f 182/31/303 273/277/303 288/299/303 +f 267/280/304 281/300/304 282/302/304 +f 278/294/305 294/303/305 279/296/305 +f 286/295/306 302/304/306 287/297/306 +f 280/298/307 294/303/307 295/305/307 +f 288/299/308 302/304/308 303/306/308 +f 280/298/309 296/307/309 281/300/309 +f 274/301/310 228/30/310 289/308/310 +f 182/31/311 288/299/311 303/306/311 +f 282/302/312 296/307/312 297/309/312 +f 274/301/313 290/310/313 275/288/313 +f 282/302/314 298/311/314 283/289/314 +f 275/288/315 291/312/315 276/290/315 +f 283/289/316 299/313/316 284/291/316 +f 276/290/317 292/314/317 277/292/317 +f 284/291/318 300/315/318 285/293/318 +f 278/294/319 292/314/319 293/316/319 +f 286/295/320 300/315/320 301/317/320 +f 297/309/321 313/318/321 298/311/321 +f 290/310/322 306/319/322 291/312/322 +f 298/311/323 314/320/323 299/313/323 +f 291/312/324 307/321/324 292/314/324 +f 299/313/325 315/322/325 300/315/325 +f 292/314/326 308/323/326 293/316/326 +f 300/315/327 316/324/327 301/317/327 +f 293/316/328 309/325/328 294/303/328 +f 302/304/329 316/324/329 317/326/329 +f 295/305/330 309/325/330 310/327/330 +f 302/304/331 318/328/331 303/306/331 +f 295/305/332 311/329/332 296/307/332 +f 289/308/333 228/30/333 304/330/333 +f 182/31/334 303/306/334 318/328/334 +f 297/309/335 311/329/335 312/331/335 +f 289/308/336 305/332/336 290/310/336 +f 317/326/337 331/333/337 332/334/337 +f 310/327/338 324/335/338 325/336/338 +f 317/326/339 333/337/339 318/328/339 +f 310/327/340 326/338/340 311/329/340 +f 304/330/341 228/30/341 319/339/341 +f 182/31/342 318/328/342 333/337/342 +f 312/331/343 326/338/343 327/340/343 +f 304/330/344 320/341/344 305/332/344 +f 312/331/345 328/342/345 313/318/345 +f 305/332/346 321/343/346 306/319/346 +f 313/318/347 329/344/347 314/320/347 +f 306/319/348 322/345/348 307/321/348 +f 314/320/349 330/346/349 315/322/349 +f 308/323/350 322/345/350 323/347/350 +f 315/322/351 331/333/351 316/324/351 +f 308/323/352 324/335/352 309/325/352 +f 328/342/353 344/348/353 329/344/353 +f 321/343/354 337/349/354 322/345/354 +f 329/344/355 345/350/355 330/346/355 +f 322/345/356 338/351/356 323/347/356 +f 330/346/357 346/352/357 331/333/357 +f 323/347/358 339/353/358 324/335/358 +f 332/334/359 346/352/359 347/354/359 +f 325/336/360 339/353/360 340/355/360 +f 332/334/361 348/356/361 333/337/361 +f 325/336/362 341/357/362 326/338/362 +f 319/339/363 228/30/363 334/358/363 +f 182/31/364 333/337/364 348/356/364 +f 327/340/365 341/357/365 342/359/365 +f 319/339/366 335/360/366 320/341/366 +f 327/340/367 343/361/367 328/342/367 +f 320/341/368 336/362/368 321/343/368 +f 348/356/369 361/22/369 362/26/369 +f 340/355/370 355/28/370 341/357/370 +f 334/358/371 228/30/371 1/29/371 +f 182/31/372 348/356/372 362/26/372 +f 342/359/373 355/28/373 356/4/373 +f 335/360/374 1/29/374 349/1/374 +f 342/359/375 357/6/375 343/361/375 +f 335/360/376 350/7/376 336/362/376 +f 343/361/377 358/10/377 344/348/377 +f 336/362/378 351/11/378 337/349/378 +f 345/350/379 358/10/379 359/14/379 +f 337/349/380 352/15/380 338/351/380 +f 346/352/381 359/14/381 360/18/381 +f 338/351/382 353/19/382 339/353/382 +f 346/352/383 361/22/383 347/354/383 +f 340/355/384 353/19/384 354/23/384 +f 349/1/1 1/29/1 2/2/1 +f 356/4/2 10/32/2 11/5/2 +f 350/7/3 349/1/3 3/3/3 +f 357/6/4 11/5/4 12/9/4 +f 351/11/5 350/7/5 4/8/5 +f 358/10/6 12/9/6 13/13/6 +f 352/15/7 351/11/7 5/12/7 +f 359/14/8 13/13/8 14/17/8 +f 353/19/9 352/15/9 6/16/9 +f 360/18/10 14/17/10 15/21/10 +f 354/23/11 353/19/11 7/20/11 +f 361/22/12 15/21/12 16/25/12 +f 354/23/13 8/24/13 9/27/13 +f 356/4/16 355/28/16 9/27/16 +f 8/24/17 23/47/17 24/33/17 +f 10/32/20 9/27/20 24/33/20 +f 2/2/21 17/34/21 18/37/21 +f 10/32/22 25/36/22 26/38/22 +f 3/3/23 18/37/23 19/39/23 +f 11/5/24 26/38/24 27/40/24 +f 4/8/25 19/39/25 20/41/25 +f 12/9/26 27/40/26 28/42/26 +f 5/12/27 20/41/27 21/43/27 +f 13/13/28 28/42/28 29/44/28 +f 7/20/29 6/16/29 21/43/29 +f 14/17/30 29/44/30 30/46/30 +f 7/20/31 22/45/31 23/47/31 +f 15/21/32 30/46/32 31/35/32 +f 28/42/33 27/40/33 42/48/33 +f 20/41/34 35/62/34 36/50/34 +f 29/44/35 28/42/35 43/49/35 +f 21/43/36 36/50/36 37/52/36 +f 29/44/37 44/51/37 45/53/37 +f 22/45/38 37/52/38 38/54/38 +f 30/46/39 45/53/39 46/55/39 +f 23/47/40 38/54/40 39/56/40 +f 24/33/43 39/56/43 40/58/43 +f 18/37/44 17/34/44 32/57/44 +f 26/38/45 25/36/45 40/58/45 +f 18/37/46 33/59/46 34/61/46 +f 27/40/47 26/38/47 41/60/47 +f 19/39/48 34/61/48 35/62/48 +f 39/56/50 54/76/50 55/64/50 +f 32/57/51 47/77/51 48/65/51 +f 40/58/52 55/64/52 56/66/52 +f 33/59/53 48/65/53 49/67/53 +f 42/48/54 41/60/54 56/66/54 +f 34/61/55 49/67/55 50/69/55 +f 42/48/56 57/68/56 58/70/56 +f 35/62/57 50/69/57 51/71/57 +f 43/49/58 58/70/58 59/72/58 +f 36/50/59 51/71/59 52/73/59 +f 44/51/60 59/72/60 60/74/60 +f 38/54/61 37/52/61 52/73/61 +f 46/55/62 45/53/62 60/74/62 +f 39/56/63 38/54/63 53/75/63 +f 59/72/65 58/70/65 73/78/65 +f 51/71/66 66/92/66 67/80/66 +f 59/72/67 74/79/67 75/81/67 +f 52/73/68 67/80/68 68/82/68 +f 61/63/69 60/74/69 75/81/69 +f 54/76/70 53/75/70 68/82/70 +f 54/76/73 69/84/73 70/86/73 +f 47/77/74 62/85/74 63/87/74 +f 55/64/75 70/86/75 71/88/75 +f 48/65/76 63/87/76 64/89/76 +f 57/68/77 56/66/77 71/88/77 +f 49/67/78 64/89/78 65/91/78 +f 57/68/79 72/90/79 73/78/79 +f 50/69/80 65/91/80 66/92/80 +f 63/87/81 62/85/81 77/93/81 +f 70/86/82 85/107/82 86/95/82 +f 63/87/83 78/94/83 79/96/83 +f 71/88/84 86/95/84 87/97/84 +f 64/89/85 79/96/85 80/98/85 +f 73/78/86 72/90/86 87/97/86 +f 65/91/87 80/98/87 81/100/87 +f 74/79/88 73/78/88 88/99/88 +f 66/92/89 81/100/89 82/102/89 +f 75/81/90 74/79/90 89/101/90 +f 68/82/91 67/80/91 82/102/91 +f 76/83/92 75/81/92 90/103/92 +f 69/84/93 68/82/93 83/104/93 +f 69/84/96 84/106/96 85/107/96 +f 81/100/97 96/121/97 97/108/97 +f 89/101/98 104/122/98 105/109/98 +f 82/102/99 97/108/99 98/110/99 +f 90/103/100 105/109/100 106/111/100 +f 83/104/101 98/110/101 99/112/101 +f 84/106/104 99/112/104 100/114/104 +f 77/93/105 92/113/105 93/115/105 +f 85/107/106 100/114/106 101/116/106 +f 79/96/107 78/94/107 93/115/107 +f 87/97/108 86/95/108 101/116/108 +f 79/96/109 94/117/109 95/119/109 +f 87/97/110 102/118/110 103/120/110 +f 80/98/111 95/119/111 96/121/111 +f 88/99/112 103/120/112 104/122/112 +f 100/114/113 115/136/113 116/123/113 +f 93/115/114 108/137/114 109/124/114 +f 101/116/115 116/123/115 117/125/115 +f 94/117/116 109/124/116 110/126/116 +f 103/120/117 102/118/117 117/125/117 +f 95/119/118 110/126/118 111/128/118 +f 104/122/119 103/120/119 118/127/119 +f 96/121/120 111/128/120 112/130/120 +f 105/109/121 104/122/121 119/129/121 +f 98/110/122 97/108/122 112/130/122 +f 106/111/123 105/109/123 120/131/123 +f 98/110/124 113/132/124 114/134/124 +f 99/112/127 114/134/127 115/136/127 +f 92/113/128 107/135/128 108/137/128 +f 119/129/129 134/152/129 135/138/129 +f 113/132/130 112/130/130 127/139/130 +f 121/133/131 120/131/131 135/138/131 +f 113/132/132 128/140/132 129/142/132 +f 115/136/135 114/134/135 129/142/135 +f 107/135/136 122/143/136 123/145/136 +f 115/136/137 130/144/137 131/146/137 +f 108/137/138 123/145/138 124/147/138 +f 117/125/139 116/123/139 131/146/139 +f 109/124/140 124/147/140 125/149/140 +f 118/127/141 117/125/141 132/148/141 +f 110/126/142 125/149/142 126/151/142 +f 118/127/143 133/150/143 134/152/143 +f 111/128/144 126/151/144 127/139/144 +f 123/145/145 138/167/145 139/153/145 +f 132/148/146 131/146/146 146/154/146 +f 124/147/147 139/153/147 140/156/147 +f 133/150/148 132/148/148 147/155/148 +f 125/149/149 140/156/149 141/158/149 +f 133/150/150 148/157/150 149/159/150 +f 126/151/151 141/158/151 142/160/151 +f 135/138/152 134/152/152 149/159/152 +f 128/140/153 127/139/153 142/160/153 +f 136/141/154 135/138/154 150/161/154 +f 128/140/155 143/162/155 144/164/155 +f 130/144/158 129/142/158 144/164/158 +f 122/143/159 137/165/159 138/167/159 +f 130/144/160 145/166/160 146/154/160 +f 143/162/161 142/160/161 157/168/161 +f 150/161/162 165/182/162 166/170/162 +f 144/164/163 143/162/163 158/169/163 +f 144/164/166 159/171/166 160/173/166 +f 138/167/167 137/165/167 152/172/167 +f 145/166/168 160/173/168 161/175/168 +f 138/167/169 153/174/169 154/176/169 +f 147/155/170 146/154/170 161/175/170 +f 139/153/171 154/176/171 155/178/171 +f 148/157/172 147/155/172 162/177/172 +f 140/156/173 155/178/173 156/180/173 +f 148/157/174 163/179/174 164/181/174 +f 141/158/175 156/180/175 157/168/175 +f 149/159/176 164/181/176 165/182/176 +f 161/175/177 176/197/177 177/183/177 +f 155/178/178 154/176/178 169/184/178 +f 163/179/179 162/177/179 177/183/179 +f 155/178/180 170/185/180 171/187/180 +f 164/181/181 163/179/181 178/186/181 +f 156/180/182 171/187/182 172/189/182 +f 165/182/183 164/181/183 179/188/183 +f 158/169/184 157/168/184 172/189/184 +f 166/170/185 165/182/185 180/190/185 +f 158/169/186 173/191/186 174/193/186 +f 159/171/189 174/193/189 175/195/189 +f 152/172/190 167/194/190 168/196/190 +f 160/173/191 175/195/191 176/197/191 +f 153/174/192 168/196/192 169/184/192 +f 180/190/193 196/211/193 197/198/193 +f 173/191/194 189/212/194 190/199/194 +f 175/195/197 174/193/197 190/199/197 +f 168/196/198 167/194/198 183/200/198 +f 175/195/199 191/201/199 192/203/199 +f 168/196/200 184/202/200 185/204/200 +f 176/197/201 192/203/201 193/205/201 +f 169/184/202 185/204/202 186/206/202 +f 178/186/203 177/183/203 193/205/203 +f 170/185/204 186/206/204 187/208/204 +f 179/188/205 178/186/205 194/207/205 +f 171/187/206 187/208/206 188/210/206 +f 180/190/207 179/188/207 195/209/207 +f 173/191/208 172/189/208 188/210/208 +f 194/207/209 193/205/209 208/213/209 +f 186/206/210 201/227/210 202/215/210 +f 194/207/211 209/214/211 210/216/211 +f 187/208/212 202/215/212 203/217/212 +f 196/211/213 195/209/213 210/216/213 +f 189/212/214 188/210/214 203/217/214 +f 196/211/215 211/218/215 212/220/215 +f 189/212/216 204/219/216 205/221/216 +f 191/201/219 190/199/219 205/221/219 +f 183/200/220 198/222/220 199/224/220 +f 191/201/221 206/223/221 207/225/221 +f 184/202/222 199/224/222 200/226/222 +f 192/203/223 207/225/223 208/213/223 +f 185/204/224 200/226/224 201/227/224 +f 206/223/227 205/221/227 220/230/227 +f 198/222/228 213/228/228 214/232/228 +f 206/223/229 221/231/229 222/233/229 +f 199/224/230 214/232/230 215/234/230 +f 207/225/231 222/233/231 223/235/231 +f 200/226/232 215/234/232 216/236/232 +f 209/214/233 208/213/233 223/235/233 +f 201/227/234 216/236/234 217/238/234 +f 209/214/235 224/237/235 225/239/235 +f 202/215/236 217/238/236 218/240/236 +f 210/216/237 225/239/237 226/241/237 +f 204/219/238 203/217/238 218/240/238 +f 212/220/239 211/218/239 226/241/239 +f 204/219/240 219/242/240 220/230/240 +f 216/236/241 232/256/241 233/243/241 +f 224/237/242 240/257/242 241/244/242 +f 217/238/243 233/243/243 234/245/243 +f 225/239/244 241/244/244 242/246/244 +f 219/242/245 218/240/245 234/245/245 +f 226/241/246 242/246/246 243/248/246 +f 219/242/247 235/247/247 236/249/247 +f 221/231/250 220/230/250 236/249/250 +f 213/228/251 229/250/251 230/252/251 +f 221/231/252 237/251/252 238/253/252 +f 214/232/253 230/252/253 231/254/253 +f 222/233/254 238/253/254 239/255/254 +f 215/234/255 231/254/255 232/256/255 +f 223/235/256 239/255/256 240/257/256 +f 237/251/257 236/249/257 251/258/257 +f 229/250/258 244/272/258 245/260/258 +f 237/251/259 252/259/259 253/261/259 +f 230/252/260 245/260/260 246/262/260 +f 239/255/261 238/253/261 253/261/261 +f 232/256/262 231/254/262 246/262/262 +f 240/257/263 239/255/263 254/263/263 +f 232/256/264 247/264/264 248/266/264 +f 241/244/265 240/257/265 255/265/265 +f 233/243/266 248/266/266 249/268/266 +f 241/244/267 256/267/267 257/269/267 +f 235/247/268 234/245/268 249/268/268 +f 243/248/269 242/246/269 257/269/269 +f 235/247/270 250/270/270 251/258/270 +f 255/265/273 270/286/273 271/273/273 +f 248/266/274 263/287/274 264/274/274 +f 257/269/275 256/267/275 271/273/275 +f 250/270/276 249/268/276 264/274/276 +f 257/269/277 272/275/277 273/277/277 +f 250/270/278 265/276/278 266/278/278 +f 252/259/281 251/258/281 266/278/281 +f 244/272/282 259/279/282 260/281/282 +f 252/259/283 267/280/283 268/282/283 +f 245/260/284 260/281/284 261/283/284 +f 253/261/285 268/282/285 269/284/285 +f 247/264/286 246/262/286 261/283/286 +f 254/263/287 269/284/287 270/286/287 +f 248/266/288 247/264/288 262/285/288 +f 259/279/289 274/301/289 275/288/289 +f 267/280/290 282/302/290 283/289/290 +f 260/281/291 275/288/291 276/290/291 +f 268/282/292 283/289/292 284/291/292 +f 261/283/293 276/290/293 277/292/293 +f 269/284/294 284/291/294 285/293/294 +f 263/287/295 262/285/295 277/292/295 +f 270/286/296 285/293/296 286/295/296 +f 263/287/297 278/294/297 279/296/297 +f 271/273/298 286/295/298 287/297/298 +f 265/276/299 264/274/299 279/296/299 +f 272/275/300 287/297/300 288/299/300 +f 265/276/301 280/298/301 281/300/301 +f 267/280/304 266/278/304 281/300/304 +f 278/294/305 293/316/305 294/303/305 +f 286/295/306 301/317/306 302/304/306 +f 280/298/307 279/296/307 294/303/307 +f 288/299/308 287/297/308 302/304/308 +f 280/298/309 295/305/309 296/307/309 +f 282/302/312 281/300/312 296/307/312 +f 274/301/313 289/308/313 290/310/313 +f 282/302/314 297/309/314 298/311/314 +f 275/288/315 290/310/315 291/312/315 +f 283/289/316 298/311/316 299/313/316 +f 276/290/317 291/312/317 292/314/317 +f 284/291/318 299/313/318 300/315/318 +f 278/294/319 277/292/319 292/314/319 +f 286/295/320 285/293/320 300/315/320 +f 297/309/321 312/331/321 313/318/321 +f 290/310/322 305/332/322 306/319/322 +f 298/311/323 313/318/323 314/320/323 +f 291/312/324 306/319/324 307/321/324 +f 299/313/325 314/320/325 315/322/325 +f 292/314/326 307/321/326 308/323/326 +f 300/315/327 315/322/327 316/324/327 +f 293/316/328 308/323/328 309/325/328 +f 302/304/329 301/317/329 316/324/329 +f 295/305/330 294/303/330 309/325/330 +f 302/304/331 317/326/331 318/328/331 +f 295/305/332 310/327/332 311/329/332 +f 297/309/335 296/307/335 311/329/335 +f 289/308/336 304/330/336 305/332/336 +f 317/326/337 316/324/337 331/333/337 +f 310/327/338 309/325/338 324/335/338 +f 317/326/339 332/334/339 333/337/339 +f 310/327/340 325/336/340 326/338/340 +f 312/331/343 311/329/343 326/338/343 +f 304/330/344 319/339/344 320/341/344 +f 312/331/345 327/340/345 328/342/345 +f 305/332/346 320/341/346 321/343/346 +f 313/318/347 328/342/347 329/344/347 +f 306/319/348 321/343/348 322/345/348 +f 314/320/349 329/344/349 330/346/349 +f 308/323/350 307/321/350 322/345/350 +f 315/322/351 330/346/351 331/333/351 +f 308/323/352 323/347/352 324/335/352 +f 328/342/353 343/361/353 344/348/353 +f 321/343/354 336/362/354 337/349/354 +f 329/344/355 344/348/355 345/350/355 +f 322/345/356 337/349/356 338/351/356 +f 330/346/357 345/350/357 346/352/357 +f 323/347/358 338/351/358 339/353/358 +f 332/334/359 331/333/359 346/352/359 +f 325/336/360 324/335/360 339/353/360 +f 332/334/361 347/354/361 348/356/361 +f 325/336/362 340/355/362 341/357/362 +f 327/340/365 326/338/365 341/357/365 +f 319/339/366 334/358/366 335/360/366 +f 327/340/367 342/359/367 343/361/367 +f 320/341/368 335/360/368 336/362/368 +f 348/356/369 347/354/369 361/22/369 +f 340/355/370 354/23/370 355/28/370 +f 342/359/373 341/357/373 355/28/373 +f 335/360/374 334/358/374 1/29/374 +f 342/359/375 356/4/375 357/6/375 +f 335/360/376 349/1/376 350/7/376 +f 343/361/377 357/6/377 358/10/377 +f 336/362/378 350/7/378 351/11/378 +f 345/350/379 344/348/379 358/10/379 +f 337/349/380 351/11/380 352/15/380 +f 346/352/381 345/350/381 359/14/381 +f 338/351/382 352/15/382 353/19/382 +f 346/352/383 360/18/383 361/22/383 +f 340/355/384 339/353/384 353/19/384 diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/planets-logo.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/planets-logo.png new file mode 100644 index 00000000..2e0e9ee1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/planets-logo.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/_factories.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/_factories.json new file mode 100644 index 00000000..c91be5e3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/_factories.json @@ -0,0 +1,11 @@ +{ + "recipes": { + "replacable": "micdoodle8.mods.galacticraft.core.recipe.OreRecipeUpdatable$RecipeFactory" + }, + "ingredients": { + "advanced_metal": "micdoodle8.mods.galacticraft.core.recipe.IngredientAdvancedMetal" + }, + "conditions": { + "condition": "micdoodle8.mods.galacticraft.core.recipe.ConditionEnabled" + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/asteroids_block_7.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/asteroids_block_7.json new file mode 100644 index 00000000..dc22ffba --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/asteroids_block_7.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:asteroids_block", + "data": 7 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atmospheric_valve.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atmospheric_valve.json new file mode 100644 index 00000000..0ae7d9a2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atmospheric_valve.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:atmospheric_valve" + }, + "pattern": [ + " ", + "XYX", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atomic_battery.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atomic_battery.json new file mode 100644 index 00000000..fc10f361 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/atomic_battery.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:atomic_battery" + }, + "pattern": [ + "XXX", + "XYX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "lead_ingot" + }, + "Y": { + "item": "galacticraftplanets:basic_item_venus", + "data": 2 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_1.json new file mode 100644 index 00000000..de519088 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_1.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:basic_item_venus", + "data": 1, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:venus", + "data": 12 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_3.json new file mode 100644 index 00000000..2ed8decb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_3.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + }, + "pattern": [ + " ", + "XYX", + " " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_5.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_5.json new file mode 100644 index 00000000..bd79d302 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/basic_item_venus_5.json @@ -0,0 +1,26 @@ +{ +"result": { + "item": "galacticraftplanets:basic_item_venus", + "data": 5, + "count": 3 + }, + "pattern": [ + "XXX", + "YYY", + "ZZZ" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:glass" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "waferSolarThin" + }, + "Z": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_receiver.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_receiver.json new file mode 100644 index 00000000..056fa91f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_receiver.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:beam_receiver" + }, + "pattern": [ + " X ", + "XYX", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector.json new file mode 100644 index 00000000..2b8443bb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftplanets:beam_reflector" + }, + "pattern": [ + " Y ", + "ZX ", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "Z": { + "item": "minecraft:lever" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector_alt.json new file mode 100644 index 00000000..13e86977 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/beam_reflector_alt.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftplanets:beam_reflector" + }, + "pattern": [ + " Y ", + " XZ", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "Z": { + "item": "minecraft:lever" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments.json new file mode 100644 index 00000000..8bb52bcb --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftplanets:carbon_fragments", + "count": 8 + }, + "ingredients": [ + { + "item": "minecraft:coal", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless", + "conditions": [ + { + "type": "galacticraftplanets:condition", + "data": "aa_loaded" + } + ] +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt.json new file mode 100644 index 00000000..a058014d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftplanets:carbon_fragments", + "count": 32 + }, + "ingredients": [ + { + "item": "minecraft:coal", + "data": 0 + }, + { + "item": "minecraft:coal", + "data": 0 + }, + { + "item": "minecraft:coal", + "data": 0 + }, + { + "item": "minecraft:coal", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt.json new file mode 100644 index 00000000..5992a605 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "galacticraftplanets:carbon_fragments", + "count": 4 + }, + "ingredients": [ + { + "item": "minecraft:coal", + "data": 1 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt_alt.json new file mode 100644 index 00000000..a9f806de --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/carbon_fragments_alt_alt_alt.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "galacticraftplanets:carbon_fragments", + "count": 16 + }, + "ingredients": [ + { + "item": "minecraft:coal", + "data": 1 + }, + { + "item": "minecraft:coal", + "data": 1 + }, + { + "item": "minecraft:coal", + "data": 1 + }, + { + "item": "minecraft:coal", + "data": 1 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe.json new file mode 100644 index 00000000..7dafa90f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_axe" + }, + "pattern": [ + "XX", + "XY", + " Y" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe_alt.json new file mode 100644 index 00000000..ad4c642b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_axe_alt.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_axe" + }, + "pattern": [ + "XX", + "YX", + "Y " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_boots.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_boots.json new file mode 100644 index 00000000..11a5e2d9 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_boots.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:desh_boots" + }, + "pattern": [ + "X X", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_chestplate.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_chestplate.json new file mode 100644 index 00000000..c1521294 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_chestplate.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:desh_chestplate" + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_helmet.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_helmet.json new file mode 100644 index 00000000..045483cd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_helmet.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:desh_helmet" + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe.json new file mode 100644 index 00000000..48cd7cd3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_hoe" + }, + "pattern": [ + "XX", + "Y ", + "Y " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe_alt.json new file mode 100644 index 00000000..6ea8d9f7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_hoe_alt.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_hoe" + }, + "pattern": [ + "XX", + " Y", + " Y" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_leggings.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_leggings.json new file mode 100644 index 00000000..61df7533 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_leggings.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:desh_leggings" + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_pick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_pick.json new file mode 100644 index 00000000..6006ae50 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_pick.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_pick" + }, + "pattern": [ + "XXX", + " Y ", + " Y " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_spade.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_spade.json new file mode 100644 index 00000000..58a2ae87 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_spade.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_spade" + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_sword.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_sword.json new file mode 100644 index 00000000..bd00655c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/desh_sword.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:desh_sword" + }, + "pattern": [ + "X", + "X", + "Y" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/geothermal_generator.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/geothermal_generator.json new file mode 100644 index 00000000..02c0cdf5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/geothermal_generator.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "galacticraftplanets:geothermal_generator" + }, + "pattern": [ + "XVX", + "WGW", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "V": { + "item": "galacticraftplanets:atmospheric_valve" + }, + "W": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "G": { + "item": "galacticraftcore:machine", + "data": 0 + }, + "X": { + "type": "forge:ore_dict", + "ore": "compressedBronze" + }, + "Y": { + "item": "galacticraftplanets:basic_item_venus", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/grapple.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/grapple.json new file mode 100644 index 00000000..8099da63 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/grapple.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "galacticraftplanets:grapple" + }, + "pattern": [ + " Z", + "XZ ", + "XX " + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Z": { + "item": "minecraft:string" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/heavy_nose_cone_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/heavy_nose_cone_0.json new file mode 100644 index 00000000..8e1794ef --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/heavy_nose_cone_0.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:heavy_nose_cone", + "data": 0 + }, + "pattern": [ + " Y ", + " X ", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "item": "minecraft:redstone_torch" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_0.json new file mode 100644 index 00000000..b8adc30b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 0, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:asteroids_block", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1.json new file mode 100644 index 00000000..3c56e569 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1.json @@ -0,0 +1,31 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 1 + }, + "pattern": [ + " YV", + "XWX", + "XZX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "V": { + "item": "minecraft:stone_button" + }, + "W": { + "item": "galacticraftcore:canister", + "data": 32767 + }, + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "item": "minecraft:flint_and_steel" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1_alt.json new file mode 100644 index 00000000..e6565257 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_1_alt.json @@ -0,0 +1,31 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 1 + }, + "pattern": [ + "VY ", + "XWX", + "XZX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "V": { + "item": "minecraft:stone_button" + }, + "W": { + "item": "galacticraftcore:canister", + "data": 32767 + }, + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "item": "minecraft:flint_and_steel" + }, + "Z": { + "item": "galacticraftcore:air_vent" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2.json new file mode 100644 index 00000000..3906d5c6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 2 + }, + "pattern": [ + " Y ", + "XYX", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2_alt.json new file mode 100644 index 00000000..c9867c3b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_2_alt.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 2 + }, + "pattern": [ + " Y ", + "XYX", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 5 + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_7.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_7.json new file mode 100644 index 00000000..d3b9e120 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_7.json @@ -0,0 +1,21 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + }, + "pattern": [ + " X ", + "XYX", + " X " + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "minecraft:wool", + "data": 32767 + }, + "Y": { + "item": "minecraft:redstone" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_8.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_8.json new file mode 100644 index 00000000..dfc06413 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_asteroids_8.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "pattern": [ + "XYX", + "YZY", + "XYX" + ], + "type": "forge:ore_shaped", + "key": { + "X": { + "item": "minecraft:redstone" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "compressedIron" + }, + "Z": { + "item": "minecraft:glass_pane" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_1.json new file mode 100644 index 00000000..6f99379e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_1.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_mars", + "data": 1 + }, + "pattern": [ + "X", + "X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_2.json new file mode 100644 index 00000000..e416b977 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_2.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_mars", + "data": 2, + "count": 9 + }, + "pattern": [ + "X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 8 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_4.json new file mode 100644 index 00000000..f6c90dfc --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_4.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_mars", + "data": 4 + }, + "pattern": [ + "XWX", + "XYX", + " Z " + ], + "type": "forge:ore_shaped", + "key": { + "W": { + "item": "minecraft:diamond" + }, + "X": { + "item": "minecraft:leather" + }, + "Y": { + "type": "forge:ore_dict", + "ore": "slimeball" + }, + "Z": { + "item": "minecraft:chest" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_6.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_6.json new file mode 100644 index 00000000..30343be3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/item_basic_mars_6.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftplanets:item_basic_mars", + "data": 6 + }, + "pattern": [ + "MXM", + "SWS", + "MXM" + ], + "type": "galacticraftplanets:replacable", + "key": { + "S": { + "type": "forge:ore_dict", + "ore": "slimeball" + }, + "W": { + "item": "galacticraftcore:basic_item", + "data": 14 + }, + "X": { + "item": "galacticraftcore:air_fan" + }, + "M": { + "type": "galacticraftcore:advanced_metal", + "metal": "meteoric_iron_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_8.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_8.json new file mode 100644 index 00000000..75dc797f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_8.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars", + "data": 8 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_0.json new file mode 100644 index 00000000..668ceddd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_0.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine", + "data": 0 + }, + "pattern": [ + "XWX", + "XZX", + "WVW" + ], + "type": "galacticraftplanets:replacable", + "key": { + "V": { + "item": "galacticraftcore:oxygen_concentrator" + }, + "W": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_plate" + }, + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + }, + "Z": { + "item": "galacticraftcore:canister", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_4.json new file mode 100644 index 00000000..7106d74b --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_4.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine", + "data": 4 + }, + "pattern": [ + "XYX", + "XZX", + "XYX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_plate" + }, + "Y": { + "item": "galacticraftplanets:item_basic_mars", + "data": 3 + }, + "Z": { + "item": "minecraft:bed", + "data": 32767 + } + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_8.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_8.json new file mode 100644 index 00000000..8b145b66 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_8.json @@ -0,0 +1,34 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine", + "data": 8 + }, + "pattern": [ + "ZVZ", + "YXY", + "ZWZ" + ], + "type": "galacticraftplanets:replacable", + "key": { + "V": { + "item": "galacticraftcore:basic_item", + "data": 19 + }, + "W": { + "item": "galacticraftcore:aluminum_wire", + "data": 0 + }, + "X": { + "item": "galacticraftcore:basic_item", + "data": 14 + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_plate" + }, + "Z": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_ingot" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_0.json new file mode 100644 index 00000000..abc3e714 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_0.json @@ -0,0 +1,44 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine_t2", + "data": 0 + }, + "pattern": [ + "TVS", + "FWS", + "PXO" + ], + "type": "minecraft:crafting_shaped", + "key": { + "P": { + "item": "galacticraftcore:oxygen_compressor", + "data": 4 + }, + "S": { + "item": "galacticraftcore:oxygen_tank_med_full", + "data": 1800 + }, + "T": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "V": { + "item": "galacticraftcore:air_vent" + }, + "F": { + "item": "galacticraftcore:fluid_pipe" + }, + "W": { + "item": "galacticraftplanets:item_basic_mars", + "data": 6 + }, + "X": { + "item": "galacticraftcore:basic_item", + "data": 10 + }, + "O": { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_4.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_4.json new file mode 100644 index 00000000..b415fea3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_4.json @@ -0,0 +1,40 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine_t2", + "data": 4 + }, + "pattern": [ + "TVT", + "FWF", + "CXO" + ], + "type": "minecraft:crafting_shaped", + "key": { + "C": { + "item": "galacticraftcore:machine_tiered", + "data": 4 + }, + "T": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "V": { + "item": "galacticraftcore:air_vent" + }, + "F": { + "item": "galacticraftcore:fluid_pipe" + }, + "W": { + "item": "galacticraftplanets:item_basic_mars", + "data": 6 + }, + "X": { + "item": "galacticraftcore:basic_item", + "data": 10 + }, + "O": { + "item": "galacticraftcore:oxygen_compressor", + "data": 0 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_8.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_8.json new file mode 100644 index 00000000..185f6659 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_machine_t2_8.json @@ -0,0 +1,36 @@ +{ + "result": { + "item": "galacticraftplanets:mars_machine_t2", + "data": 8 + }, + "pattern": [ + "TVT", + "FWF", + "BXB" + ], + "type": "minecraft:crafting_shaped", + "key": { + "B": { + "item": "galacticraftcore:basic_item", + "data": 6 + }, + "T": { + "item": "galacticraftcore:oxygen_tank_heavy_full", + "data": 2700 + }, + "V": { + "item": "galacticraftcore:air_vent" + }, + "F": { + "item": "galacticraftcore:fluid_pipe" + }, + "W": { + "item": "galacticraftplanets:item_basic_mars", + "data": 6 + }, + "X": { + "item": "galacticraftcore:basic_item", + "data": 10 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick.json new file mode 100644 index 00000000..ced8a636 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars_stairs_brick", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick_alt.json new file mode 100644 index 00000000..04127de3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_brick_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars_stairs_brick", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone.json new file mode 100644 index 00000000..9461c871 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars_stairs_cobblestone", + "count": 4 + }, + "pattern": [ + " X", + " XX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone_alt.json new file mode 100644 index 00000000..9ac6f42a --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/mars_stairs_cobblestone_alt.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:mars_stairs_cobblestone", + "count": 4 + }, + "pattern": [ + "X ", + "XX ", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:mars", + "data": 4 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/miner_base.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/miner_base.json new file mode 100644 index 00000000..253c58b4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/miner_base.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "galacticraftplanets:miner_base", + "count": 4 + }, + "pattern": [ + "XCX", + "W W", + "XBX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "B": { + "item": "galacticraftcore:machine_tiered", + "data": 0 + }, + "C": { + "item": "minecraft:chest" + }, + "W": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "desh_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/orion_drive.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/orion_drive.json new file mode 100644 index 00000000..026dd4e0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/orion_drive.json @@ -0,0 +1,49 @@ +{ + "result": { + "item": "galacticraftplanets:orion_drive" + }, + "pattern": [ + "ABC", + "DOE", + "FGH" + ], + "type": "forge:ore_shaped", + "key": { + "A": { + "type": "forge:ore_dict", + "ore": "oreDiamond" + }, + "B": { + "type": "forge:ore_dict", + "ore": "oreLapis" + }, + "C": { + "type": "forge:ore_dict", + "ore": "oreGold" + }, + "D": { + "type": "forge:ore_dict", + "ore": "oreRedstone" + }, + "E": { + "type": "forge:ore_dict", + "ore": "oreCoal" + }, + "F": { + "type": "forge:ore_dict", + "ore": "oreCheese" + }, + "G": { + "type": "forge:ore_dict", + "ore": "oreDesh" + }, + "H": { + "type": "forge:ore_dict", + "ore": "oreIlmenite" + }, + "O": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_controller.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_controller.json new file mode 100644 index 00000000..b33a761e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_controller.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftplanets:solar_array_controller", + "data": 0 + }, + "pattern": [ + "X X", + "YZY", + "XYX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "forge:ore_dict", + "ore": "compressedSteel" + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_module.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_module.json new file mode 100644 index 00000000..370132b1 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/solar_array_module.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "galacticraftplanets:solar_array_module", + "data": 0 + }, + "pattern": [ + "XXX", + "YZY" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 5, + "count": 3 + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + }, + "Z": { + "type": "forge:ore_dict", + "ore": "waferAdvanced" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/telepad_short.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/telepad_short.json new file mode 100644 index 00000000..9465d016 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/telepad_short.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "galacticraftplanets:telepad_short" + }, + "pattern": [ + "XWX", + "ZYZ", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "W": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 8 + }, + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "minecraft:redstone" + }, + "Z": { + "item": "minecraft:ender_pearl" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_0.json new file mode 100644 index 00000000..45c8f048 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding", + "data": 0 + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_1.json new file mode 100644 index 00000000..660976f4 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_1.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding", + "data": 1 + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_2.json new file mode 100644 index 00000000..32a1a13f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding", + "data": 2 + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_3.json new file mode 100644 index 00000000..6de27da7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding", + "data": 3 + }, + "pattern": [ + "X X", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:item_basic_asteroids", + "data": 7 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_0.json new file mode 100644 index 00000000..04e4396c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_0.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding_t2", + "data": 0 + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_1.json new file mode 100644 index 00000000..95799c77 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_1.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding_t2", + "data": 1 + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_2.json new file mode 100644 index 00000000..994145e0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_2.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding_t2", + "data": 2 + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_3.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_3.json new file mode 100644 index 00000000..b60150ae --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/thermal_padding_t2_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:thermal_padding_t2", + "data": 3 + }, + "pattern": [ + "X X", + "X X" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 3 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe.json new file mode 100644 index 00000000..cc068a34 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_axe" + }, + "pattern": [ + "YY ", + "YX ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe_alt.json new file mode 100644 index 00000000..d32a2bbe --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_axe_alt.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_axe" + }, + "pattern": [ + " YY", + " XY", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_boots.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_boots.json new file mode 100644 index 00000000..708ef45e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_boots.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_boots" + }, + "pattern": [ + "X X", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_chestplate.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_chestplate.json new file mode 100644 index 00000000..6caa7d75 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_chestplate.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_chestplate" + }, + "pattern": [ + "X X", + "XXX", + "XXX" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_helmet.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_helmet.json new file mode 100644 index 00000000..ae8e53b0 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_helmet.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_helmet" + }, + "pattern": [ + "XXX", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe.json new file mode 100644 index 00000000..9fe9cfd5 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_hoe" + }, + "pattern": [ + " YY", + " X ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe_alt.json new file mode 100644 index 00000000..72acef2c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_hoe_alt.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_hoe" + }, + "pattern": [ + "YY ", + " X ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_leggings.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_leggings.json new file mode 100644 index 00000000..aff12bbd --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_leggings.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_leggings" + }, + "pattern": [ + "XXX", + "X X", + "X X" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_pickaxe.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_pickaxe.json new file mode 100644 index 00000000..ec1cf1b7 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_pickaxe.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_pickaxe" + }, + "pattern": [ + "YYY", + " X ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_shovel.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_shovel.json new file mode 100644 index 00000000..eb53605c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_shovel.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_shovel" + }, + "pattern": [ + " Y ", + " X ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_sword.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_sword.json new file mode 100644 index 00000000..789f9a0d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/titanium_sword.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "galacticraftplanets:titanium_sword" + }, + "pattern": [ + " Y ", + " Y ", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "item": "minecraft:iron_ingot" + }, + "Y": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/venus_12.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/venus_12.json new file mode 100644 index 00000000..44b7055f --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/venus_12.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:venus", + "data": 12 + }, + "pattern": [ + "XXX", + "XXX", + "XXX" + ], + "type": "minecraft:crafting_shaped", + "key": { + "X": { + "item": "galacticraftplanets:basic_item_venus", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_0.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_0.json new file mode 100644 index 00000000..bd70f463 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_0.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 0, + "count": 5 + }, + "pattern": [ + "XXX", + " X " + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1.json new file mode 100644 index 00000000..1e90af74 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 1, + "count": 5 + }, + "pattern": [ + "XXX", + "YXY", + "YYY" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1_alt.json new file mode 100644 index 00000000..7ce95e9e --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_1_alt.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 1 + }, + "ingredients": [ + { + "item": "galacticraftplanets:walkway", + "data": 0 + }, + { + "item": "galacticraftcore:aluminum_wire", + "data": 1 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2.json new file mode 100644 index 00000000..1a58074d --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 2, + "count": 5 + }, + "pattern": [ + "XXX", + "YXY", + "YYY" + ], + "type": "galacticraftplanets:replacable", + "key": { + "X": { + "type": "galacticraftcore:advanced_metal", + "metal": "titanium_plate" + }, + "Y": { + "item": "galacticraftcore:fluid_pipe" + } + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2_alt.json b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2_alt.json new file mode 100644 index 00000000..c204a1e3 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/recipes/walkway_2_alt.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "galacticraftplanets:walkway", + "data": 2 + }, + "ingredients": [ + { + "item": "galacticraftplanets:walkway", + "data": 0 + }, + { + "item": "galacticraftcore:fluid_pipe" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid0.png new file mode 100644 index 00000000..3d6a72bf Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid1.png new file mode 100644 index 00000000..48af4f69 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid2.png new file mode 100644 index 00000000..f774ca34 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/asteroid2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner.png new file mode 100644 index 00000000..4484b713 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_fx.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_fx.png new file mode 100644 index 00000000..c5a09199 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_fx.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_off.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_off.png new file mode 100644 index 00000000..814fc7f1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/astro_miner_off.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_receiver.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_receiver.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_receiver.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_reflector.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_reflector.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/beam_reflector.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_lead.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_lead.png new file mode 100644 index 00000000..4c75aa3b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_lead.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_titanium.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_titanium.png new file mode 100644 index 00000000..5dc69b95 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/block_titanium.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_0.png new file mode 100644 index 00000000..965ec03c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_1.png new file mode 100644 index 00000000..60fd8517 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/blue_egg_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/bottom.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/bottom.png new file mode 100644 index 00000000..8e3a3321 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/bottom.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/brick.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/brick.png new file mode 100644 index 00000000..294f73d4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/brick.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cargo_rocket.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cargo_rocket.png new file mode 100644 index 00000000..fbfc8b14 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cargo_rocket.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cobblestone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cobblestone.png new file mode 100644 index 00000000..e1b4516f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cobblestone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/creeper_egg.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/creeper_egg.png new file mode 100644 index 00000000..47e21f4f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/creeper_egg.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_1.png new file mode 100644 index 00000000..ef3c9923 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_dummy.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_dummy.png new file mode 100644 index 00000000..b6d794b2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/cryo_dummy.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/decoration_desh.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/decoration_desh.png new file mode 100644 index 00000000..ea1edbf2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/decoration_desh.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dense_ice.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dense_ice.png new file mode 100644 index 00000000..ac0e799b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dense_ice.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/desh.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/desh.png new file mode 100644 index 00000000..c927ced2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/desh.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_1.png new file mode 100644 index 00000000..8615abb1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_2.png new file mode 100644 index 00000000..3dd2137a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/dungeon_brick_venus_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/electrolyzer.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/electrolyzer.png new file mode 100644 index 00000000..a88688ca Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/electrolyzer.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png new file mode 100644 index 00000000..79011bc8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/argon.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png new file mode 100644 index 00000000..cc8dfe6b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/atmosphericgases.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png new file mode 100644 index 00000000..f9df0db5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/carbondioxide.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png new file mode 100644 index 00000000..76effcfb Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/helium.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png new file mode 100644 index 00000000..fe270e47 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidargon.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png new file mode 100644 index 00000000..9ae29b71 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidmethane.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png new file mode 100644 index 00000000..c1588399 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidnitrogen.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png new file mode 100644 index 00000000..1211e6d1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/liquidoxygen.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png new file mode 100644 index 00000000..877d6ea1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/methane.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png new file mode 100644 index 00000000..21c77707 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/nitrogen.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png new file mode 100644 index 00000000..a4b76ca7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png new file mode 100644 index 00000000..3079e9d7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png.mcmeta new file mode 100644 index 00000000..034019ff --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sludge_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 3 + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png new file mode 100644 index 00000000..bbd74e2b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png new file mode 100644 index 00000000..8576f04a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/fluids/sulphuric_acid_still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/gas_liquefier.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/gas_liquefier.png new file mode 100644 index 00000000..0e1fa3e3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/gas_liquefier.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png new file mode 100644 index 00000000..0976c990 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png.mcmeta new file mode 100644 index 00000000..49eb24f6 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal.png.mcmeta @@ -0,0 +1,21 @@ +{ + "animation": { + "frametime": 1, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_inactive.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_inactive.png new file mode 100644 index 00000000..c8c0dad0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_inactive.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_vent.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_vent.png new file mode 100644 index 00000000..116d8b38 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/geothermal_vent.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/grapple.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/grapple.png new file mode 100644 index 00000000..5b099dfc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/grapple.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/landing_balloon.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/landing_balloon.png new file mode 100644 index 00000000..fb0bf69b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/landing_balloon.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser.png new file mode 100644 index 00000000..0a1f714d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser_off.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser_off.png new file mode 100644 index 00000000..5d1cdecd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/laser_off.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/launch_controller.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/launch_controller.png new file mode 100644 index 00000000..33fc633c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/launch_controller.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input.png new file mode 100644 index 00000000..a1fa62bc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input_warning.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input_warning.png new file mode 100644 index 00000000..4db0b6c4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_input_warning.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output.png new file mode 100644 index 00000000..d96646f2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output_warning.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output_warning.png new file mode 100644 index 00000000..c0e28f59 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_oxygen_output_warning.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_side_warning.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_side_warning.png new file mode 100644 index 00000000..7be90254 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_side_warning.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input.png new file mode 100644 index 00000000..b5361d5d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input_warning.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input_warning.png new file mode 100644 index 00000000..e9b883e5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machine_water_input_warning.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machineframe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machineframe.png new file mode 100644 index 00000000..f57558d9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/machineframe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/methane_synthesizer.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/methane_synthesizer.png new file mode 100644 index 00000000..c4f9e820 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/methane_synthesizer.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/middle.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/middle.png new file mode 100644 index 00000000..71568a2b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/middle.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/minerbase.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/minerbase.png new file mode 100644 index 00000000..c92d68df Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/minerbase.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/orb.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/orb.png new file mode 100644 index 00000000..9480b8ba Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/orb.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_asteroids.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_asteroids.png new file mode 100644 index 00000000..a4778352 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_asteroids.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_venus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_venus.png new file mode 100644 index 00000000..329ea7a1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_aluminum_venus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_mars.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_mars.png new file mode 100644 index 00000000..3f1c3ec0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_mars.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_venus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_venus.png new file mode 100644 index 00000000..d59f47a7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_copper_venus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_galena.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_galena.png new file mode 100644 index 00000000..c99b4001 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_galena.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_ilmenite.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_ilmenite.png new file mode 100644 index 00000000..3bdaf934 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_ilmenite.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_asteroids.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_asteroids.png new file mode 100644 index 00000000..f3d81082 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_asteroids.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_mars.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_mars.png new file mode 100644 index 00000000..cdc023ca Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_iron_mars.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_quartz_venus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_quartz_venus.png new file mode 100644 index 00000000..a2c1c9c4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_quartz_venus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_silicon_venus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_silicon_venus.png new file mode 100644 index 00000000..35498714 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_silicon_venus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_solar.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_solar.png new file mode 100644 index 00000000..99b47250 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_solar.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_mars.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_mars.png new file mode 100644 index 00000000..207f026d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_mars.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_venus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_venus.png new file mode 100644 index 00000000..b5aeeb3f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/ore_tin_venus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pipe_hydrogen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pipe_hydrogen.png new file mode 100644 index 00000000..e9fb7bb9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pipe_hydrogen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pod_flame.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pod_flame.png new file mode 100644 index 00000000..24fba65f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/pod_flame.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe.png new file mode 100644 index 00000000..16e63a45 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_bottom.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_bottom.png new file mode 100644 index 00000000..21103fad Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_bottom.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png new file mode 100644 index 00000000..85e8842c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png.mcmeta new file mode 100644 index 00000000..f928c362 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_1.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 15 + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png new file mode 100644 index 00000000..60584e02 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png.mcmeta new file mode 100644 index 00000000..f928c362 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_side_2.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 15 + } +} \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_top.png new file mode 100644 index 00000000..820ba8e7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/probe_top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_0.png new file mode 100644 index 00000000..0b3ea24d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_1.png new file mode 100644 index 00000000..b05ac035 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/red_egg_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/rocket_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/rocket_t2.png new file mode 100644 index 00000000..15386ad7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/rocket_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_output.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_output.png new file mode 100644 index 00000000..0d5b9de4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_output.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_side.png new file mode 100644 index 00000000..5250d8b5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_top.png new file mode 100644 index 00000000..97f35c20 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_controller_top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_side.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_side.png new file mode 100644 index 00000000..99e7e316 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_side.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_top.png new file mode 100644 index 00000000..4cf70f00 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/solar_top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/space_pod.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/space_pod.png new file mode 100644 index 00000000..d1891b6f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/space_pod.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/spout.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/spout.png new file mode 100644 index 00000000..a136f44f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/spout.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short0.png new file mode 100644 index 00000000..ef0d1f92 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/telepad_short0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/terraformer_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/terraformer_0.png new file mode 100644 index 00000000..e12a49d4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/terraformer_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tier3rocket.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tier3rocket.png new file mode 100644 index 00000000..aee97b73 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tier3rocket.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_black.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_black.png new file mode 100644 index 00000000..7772f51a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_black.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_blue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_blue.png new file mode 100644 index 00000000..4ce6f9cb Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_blue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_brown.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_brown.png new file mode 100644 index 00000000..e797b8eb Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_brown.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_cyan.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_cyan.png new file mode 100644 index 00000000..ef708b1a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_cyan.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_gray.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_gray.png new file mode 100644 index 00000000..e61d6bf6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_gray.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_green.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_green.png new file mode 100644 index 00000000..6c8d7d75 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_green.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_light_blue.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_light_blue.png new file mode 100644 index 00000000..7c4ce7ca Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_light_blue.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_lime.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_lime.png new file mode 100644 index 00000000..8555fad7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_lime.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_magenta.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_magenta.png new file mode 100644 index 00000000..0a12ab78 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_magenta.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_orange.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_orange.png new file mode 100644 index 00000000..78bd9e86 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_orange.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_pink.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_pink.png new file mode 100644 index 00000000..29ebbf6d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_pink.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_purple.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_purple.png new file mode 100644 index 00000000..d9d17a99 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_purple.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_red.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_red.png new file mode 100644 index 00000000..d6e7488a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_red.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_silver.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_silver.png new file mode 100644 index 00000000..772bf371 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_silver.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_white.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_white.png new file mode 100644 index 00000000..b26ed9a4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_white.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_yellow.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_yellow.png new file mode 100644 index 00000000..73f30635 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/tinted_glass_pane_yellow.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/top.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/top.png new file mode 100644 index 00000000..d6d27fdb Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/top.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_mars.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_mars.png new file mode 100644 index 00000000..aec9b89a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_mars.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_venus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_venus.png new file mode 100644 index 00000000..b4722313 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/treasure_chest_venus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_0.png new file mode 100644 index 00000000..0472a530 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_1.png new file mode 100644 index 00000000..bf93707a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_2.png new file mode 100644 index 00000000..2fe2fe05 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_3.png new file mode 100644 index 00000000..9a077b0b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_scorched.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_scorched.png new file mode 100644 index 00000000..d536db54 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/venus_rock_scorched.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_0.png new file mode 100644 index 00000000..8353c6b1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_1.png new file mode 100644 index 00000000..82c7c73b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_2.png new file mode 100644 index 00000000..18d6ea10 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/vine_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/walkway.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/walkway.png new file mode 100644 index 00000000..a2aef2fe Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/walkway.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web.png new file mode 100644 index 00000000..eaf44b59 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_0.png new file mode 100644 index 00000000..d3b1d53e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_1.png new file mode 100644 index 00000000..d0f04736 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/web_torch_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_0.png new file mode 100644 index 00000000..02a294ce Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_1.png new file mode 100644 index 00000000..190385db Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/blocks/yellow_egg_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/crashed_probe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/crashed_probe.png new file mode 100644 index 00000000..36742d6f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/crashed_probe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier.png new file mode 100644 index 00000000..443db920 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_m.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_m.png new file mode 100644 index 00000000..44b13dff Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_m.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_recipe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_recipe.png new file mode 100644 index 00000000..fedade60 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gas_liquefier_recipe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gases_methane_oxygen_nitrogen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gases_methane_oxygen_nitrogen.png new file mode 100644 index 00000000..09141c55 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gases_methane_oxygen_nitrogen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/geothermal.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/geothermal.png new file mode 100644 index 00000000..070ab133 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/geothermal.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gui_astro_miner_dock.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gui_astro_miner_dock.png new file mode 100644 index 00000000..79d33dbd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/gui_astro_miner_dock.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret.png new file mode 100644 index 00000000..4b1c300e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret_edit.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret_edit.png new file mode 100644 index 00000000..b3e26510 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/laser_turret_edit.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/launch_controller.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/launch_controller.png new file mode 100644 index 00000000..2cf9d37f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/launch_controller.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/mars_rocket_gui.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/mars_rocket_gui.png new file mode 100644 index 00000000..615b8949 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/mars_rocket_gui.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer.png new file mode 100644 index 00000000..331109b0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer_recipe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer_recipe.png new file mode 100644 index 00000000..e4928fa0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/methane_synthesizer_recipe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/galaxy.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/galaxy.png new file mode 100644 index 00000000..57fe877d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/galaxy.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/mars.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/mars.png new file mode 100644 index 00000000..52bbef71 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/planets/mars.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_astro_miner.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_astro_miner.png new file mode 100644 index 00000000..54e88c25 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_astro_miner.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_cargo.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_cargo.png new file mode 100644 index 00000000..2360d061 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_cargo.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2.png new file mode 100644 index 00000000..190e3a2d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2_recipe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2_recipe.png new file mode 100644 index 00000000..323becd5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t2_recipe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3.png new file mode 100644 index 00000000..190e3a2d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3_recipe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3_recipe.png new file mode 100644 index 00000000..323becd5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/schematic_rocket_t3_recipe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/short_range_telepad.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/short_range_telepad.png new file mode 100644 index 00000000..ee95a65f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/short_range_telepad.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel0.png new file mode 100644 index 00000000..bb8bedb2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel1.png new file mode 100644 index 00000000..8d4f47b2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel2.png new file mode 100644 index 00000000..947acd90 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/slimeling_panel2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/solar_array_controller.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/solar_array_controller.png new file mode 100644 index 00000000..ff9b3e88 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/solar_array_controller.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/terraformer.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/terraformer.png new file mode 100644 index 00000000..5c13627b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/terraformer.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/venus_rocket_gui.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/venus_rocket_gui.png new file mode 100644 index 00000000..553cd7df Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/gui/venus_rocket_gui.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atmospheric_valve.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atmospheric_valve.png new file mode 100644 index 00000000..84af2639 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atmospheric_valve.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atomic_battery.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atomic_battery.png new file mode 100644 index 00000000..9bde6c11 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/atomic_battery.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/beam_core.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/beam_core.png new file mode 100644 index 00000000..43bf47e8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/beam_core.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sludge.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sludge.png new file mode 100644 index 00000000..1d56fea8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sludge.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sulphuric_acid.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sulphuric_acid.png new file mode 100644 index 00000000..109f0db5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/bucket_sulphuric_acid.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_0.png new file mode 100644 index 00000000..3a557c22 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_1.png new file mode 100644 index 00000000..fab727e9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_2.png new file mode 100644 index 00000000..4745e43a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_3.png new file mode 100644 index 00000000..be9e6e41 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_4.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_4.png new file mode 100644 index 00000000..d358dd72 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_4.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_5.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_5.png new file mode 100644 index 00000000..5f33bdb7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_5.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_6.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_6.png new file mode 100644 index 00000000..1780f083 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_ln2_6.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_0.png new file mode 100644 index 00000000..9440e1bc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_1.png new file mode 100644 index 00000000..d78b130c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_2.png new file mode 100644 index 00000000..b8a4ab3e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_3.png new file mode 100644 index 00000000..02203f0e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_4.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_4.png new file mode 100644 index 00000000..761ff94a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_4.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_5.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_5.png new file mode 100644 index 00000000..95dade80 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_5.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_6.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_6.png new file mode 100644 index 00000000..6d4032f1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/canister_partial_lox_6.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/carbon_fragments.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/carbon_fragments.png new file mode 100644 index 00000000..8338ec27 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/carbon_fragments.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_desh.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_desh.png new file mode 100644 index 00000000..0de0f10c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_desh.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_titanium.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_titanium.png new file mode 100644 index 00000000..fc3a3656 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/compressed_titanium.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_axe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_axe.png new file mode 100644 index 00000000..b5d70f2c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_axe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_boots.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_boots.png new file mode 100644 index 00000000..2b0a568c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_boots.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_chestplate.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_chestplate.png new file mode 100644 index 00000000..56a2270c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_chestplate.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_helmet.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_helmet.png new file mode 100644 index 00000000..2636e2ae Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_helmet.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_hoe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_hoe.png new file mode 100644 index 00000000..7a638e91 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_hoe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_leggings.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_leggings.png new file mode 100644 index 00000000..43bdc043 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_leggings.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick.png new file mode 100644 index 00000000..2fa66a32 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick_slime.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick_slime.png new file mode 100644 index 00000000..6dacf8b7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_pick_slime.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_plate.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_plate.png new file mode 100644 index 00000000..acd166c9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_plate.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_spade.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_spade.png new file mode 100644 index 00000000..1c4a79ce Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_spade.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_stick.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_stick.png new file mode 100644 index 00000000..288b7a3c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_stick.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_sword.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_sword.png new file mode 100644 index 00000000..0619f2f6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/desh_sword.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/dust_titanium.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/dust_titanium.png new file mode 100644 index 00000000..d0855477 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/dust_titanium.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/engine_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/engine_t2.png new file mode 100644 index 00000000..62b94a4c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/engine_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/fluid_manip.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/fluid_manip.png new file mode 100644 index 00000000..eefb0c56 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/fluid_manip.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.0.png new file mode 100644 index 00000000..d56d2b63 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.png new file mode 100644 index 00000000..76d60570 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone_joined.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone_joined.png new file mode 100644 index 00000000..e106a2a9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/heavy_nose_cone_joined.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_desh.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_desh.png new file mode 100644 index 00000000..dd8bb7f8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_desh.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_lead.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_lead.png new file mode 100644 index 00000000..a07905dd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_lead.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_titanium.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_titanium.png new file mode 100644 index 00000000..869bbe35 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/ingot_titanium.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t2.png new file mode 100644 index 00000000..3d1c03bc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t3.png new file mode 100644 index 00000000..1b09813f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/key_t3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_0.png new file mode 100644 index 00000000..4f3873ff Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_1.png new file mode 100644 index 00000000..41de1d3a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_2.png new file mode 100644 index 00000000..484a1762 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_3.png new file mode 100644 index 00000000..aa37509b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_4.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_4.png new file mode 100644 index 00000000..2b2ecef0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_4.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_5.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_5.png new file mode 100644 index 00000000..36ca23a7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_5.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_6.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_6.png new file mode 100644 index 00000000..b56a1a6c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/methane_canister_partial_6.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/orion_drive.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/orion_drive.png new file mode 100644 index 00000000..7588ff48 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/orion_drive.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/radioisotope_core.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/radioisotope_core.png new file mode 100644 index 00000000..cc94f281 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/radioisotope_core.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/raw_desh.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/raw_desh.png new file mode 100644 index 00000000..2f97ab72 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/raw_desh.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t2.png new file mode 100644 index 00000000..0a7adf8c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t3.png new file mode 100644 index 00000000..dc09b7e2 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/reinforced_plate_t3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/rocket_fins_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/rocket_fins_t2.png new file mode 100644 index 00000000..e7a206d5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/rocket_fins_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_astro_miner.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_astro_miner.png new file mode 100644 index 00000000..22b79294 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_astro_miner.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_cargo.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_cargo.png new file mode 100644 index 00000000..b86297c3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_cargo.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_t3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_t3.png new file mode 100644 index 00000000..af5eadc4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/schematic_rocket_t3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_iron.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_iron.png new file mode 100644 index 00000000..aba2b8cc Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_iron.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_titanium.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_titanium.png new file mode 100644 index 00000000..bc003264 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shard_titanium.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shield_controller.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shield_controller.png new file mode 100644 index 00000000..fab640c5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/shield_controller.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/slimeling_cargo.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/slimeling_cargo.png new file mode 100644 index 00000000..348847ed Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/slimeling_cargo.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_dust.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_dust.png new file mode 100644 index 00000000..e95684dd Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_dust.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_module_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_module_2.png new file mode 100644 index 00000000..d12dd3c1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/solar_module_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed0.png new file mode 100644 index 00000000..3bd63393 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed1.png new file mode 100644 index 00000000..a383173a Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/strange_seed1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots.png new file mode 100644 index 00000000..b69cf76f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots0.png new file mode 100644 index 00000000..6b077f3c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots_t2.png new file mode 100644 index 00000000..9df986d0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_boots_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate.png new file mode 100644 index 00000000..fd33273f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate0.png new file mode 100644 index 00000000..80a1e419 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate_t2.png new file mode 100644 index 00000000..74397692 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_chestplate_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth.png new file mode 100644 index 00000000..ff1a75ca Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth_t2.png new file mode 100644 index 00000000..bfe43a43 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_cloth_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_fabric.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_fabric.png new file mode 100644 index 00000000..73fedad3 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_fabric.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm.png new file mode 100644 index 00000000..f947a665 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm0.png new file mode 100644 index 00000000..9278c26e Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm_t2.png new file mode 100644 index 00000000..74108d16 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_helm_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings.png new file mode 100644 index 00000000..d383026b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings0.png new file mode 100644 index 00000000..3906f75f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings_t2.png new file mode 100644 index 00000000..a52b8d62 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thermal_leggings_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thin_solar_wafer.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thin_solar_wafer.png new file mode 100644 index 00000000..804423de Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/thin_solar_wafer.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_axe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_axe.png new file mode 100644 index 00000000..ca2a2cc6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_axe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_boots.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_boots.png new file mode 100644 index 00000000..06e6bce6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_boots.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_chestplate.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_chestplate.png new file mode 100644 index 00000000..5011032f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_chestplate.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_helmet.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_helmet.png new file mode 100644 index 00000000..8580c2e5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_helmet.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_hoe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_hoe.png new file mode 100644 index 00000000..556d78bf Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_hoe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_leggings.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_leggings.png new file mode 100644 index 00000000..e142ffe0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_leggings.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_pickaxe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_pickaxe.png new file mode 100644 index 00000000..161e6953 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_pickaxe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_shovel.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_shovel.png new file mode 100644 index 00000000..ee04686c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_shovel.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_sword.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_sword.png new file mode 100644 index 00000000..9c1fa56b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/titanium_sword.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/volcanic_pickaxe.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/volcanic_pickaxe.png new file mode 100644 index 00000000..825c73e6 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/items/volcanic_pickaxe.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/gradient.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/gradient.png new file mode 100644 index 00000000..2b6083c5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/gradient.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/rain_venus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/rain_venus.png new file mode 100644 index 00000000..f70c9ef4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/rain_venus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/shield.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/shield.png new file mode 100644 index 00000000..dfc499d9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/shield.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_0.png new file mode 100644 index 00000000..c6b1cdb1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_1.png new file mode 100644 index 00000000..7f6fef0b Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_t2_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_t2_1.png new file mode 100644 index 00000000..ea1a6fa7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/thermal_padding_t2_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underacid.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underacid.png new file mode 100644 index 00000000..dfb5f7ab Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underacid.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underbecterial.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underbecterial.png new file mode 100644 index 00000000..f164319f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/misc/underbecterial.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_1.png new file mode 100644 index 00000000..d453b2b1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_2.png new file mode 100644 index 00000000..21d144cb Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_3.png new file mode 100644 index 00000000..2d044ee9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/desh_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_1.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_1.png new file mode 100644 index 00000000..8a9e8bc8 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_1.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_2.png new file mode 100644 index 00000000..b895509f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_3.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_3.png new file mode 100644 index 00000000..bdb2c6ed Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/armor/titanium_3.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_receiver.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_receiver.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_receiver.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_reflector.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_reflector.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/beam_reflector.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber.png new file mode 100644 index 00000000..e36a6fb0 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2.png new file mode 100644 index 00000000..620632fe Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2_dark.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2_dark.png new file mode 100644 index 00000000..3f788892 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber2_dark.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber_dark.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber_dark.png new file mode 100644 index 00000000..e040e514 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/chamber_dark.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/creeper.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/creeper.png new file mode 100644 index 00000000..96e3406f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/creeper.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/juicer.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/juicer.png new file mode 100644 index 00000000..03f1162f Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/juicer.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/minerbase.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/minerbase.png new file mode 100644 index 00000000..568d5a5c Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/minerbase.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/rocket_t2.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/rocket_t2.png new file mode 100644 index 00000000..15386ad7 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/rocket_t2.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/slimeling/green.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/slimeling/green.png new file mode 100644 index 00000000..5b6f21c9 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/slimeling/green.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/sludgeling.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/sludgeling.png new file mode 100644 index 00000000..32a5a0e4 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/sludgeling.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/spider_queen.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/spider_queen.png new file mode 100644 index 00000000..0dfd601d Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/spider_queen.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter.png new file mode 100644 index 00000000..0d6f8ff5 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter0.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter0.png new file mode 100644 index 00000000..ef0d1f92 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/teleporter0.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure.png new file mode 100644 index 00000000..0355f9c1 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure_venus.png b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure_venus.png new file mode 100644 index 00000000..b79cbe17 Binary files /dev/null and b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/assets/galacticraftplanets/textures/model/treasure_venus.png differ diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/mcmod.info b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/mcmod.info new file mode 100644 index 00000000..5e313cf2 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/mcmod.info @@ -0,0 +1,19 @@ +[ + { + "modid": "galacticraftcore", + "name": "Galacticraft", + "description": "An advanced space travel mod for Minecraft!", + "version": "${version}", + "mcversion": "1.12.2", + "logoFile": "assets/galacticraftcore/core-logo.png", + "authorList": [ + "micdoodle8", + "radfast", + "EzerArch", + "fishtaco", + "SpaceViking", + "SteveKunG", + "ROMVoid95" + ] + } +] \ No newline at end of file diff --git a/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/pack.mcmeta b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/pack.mcmeta new file mode 100644 index 00000000..ae588233 --- /dev/null +++ b/java_mod/src/Galacticraft-Legacy-master-1.12/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Galacticraft resources", + "pack_format": 3 + } +} diff --git a/machines/advanced_launch_controller.ts b/machines/advanced_launch_controller.ts new file mode 100644 index 00000000..b44252a2 --- /dev/null +++ b/machines/advanced_launch_controller.ts @@ -0,0 +1,15 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("advanced_launch_controller", "Advanced Launch Controller", 209)); + m.hideCloseButton(); + m.drawTitle(); + + m.slot(152, 105, { name: "battery_slot", ghost: "power" }); + m.drawEnergyBar(99, 114); + + m.addCheckbox(27, 20, { name: "remove_pad_checkbox" }); + m.addCheckbox(27, 38, { name: "launch_when_checkbox" }); + m.addButton(52, 52, { name: "launch_condition_dropdown" }); + m.addButton(5, 5, { name: "back_button", width: 20, height: 20 }); +} diff --git a/machines/astro_miner_dock.ts b/machines/astro_miner_dock.ts new file mode 100644 index 00000000..4cc6e386 --- /dev/null +++ b/machines/astro_miner_dock.ts @@ -0,0 +1,30 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("astro_miner_dock", "Astro Miner Dock", 221, 256)); + + // Background texture - The Java mod used this texture. + m.drawImage("textures/ui/cosmos/machines/gui_astro_miner_dock", 0, 0, 256, 221, { name: "bg" }); + + m.drawTitle(); + + // All positions shifted by -1 to account for Java slot coordinate convention + // (Java coords point to 16x16 item area; slot background draws at x-1, y-1) + + // Dock grid FIRST (slots 0-71): Java (8, 18) → (7, 17) + // Grid must come before battery so it auto-indexes from 0 + m.slotGrid(7, 17, 12, 6, { name: "dock_slots" }); + + // Energy Slot (slot 72): Java (230, 108) → (229, 107) + m.slot(229, 107, { name: "battery_slot", ghost: "power" }); + + // Energy Bar: Java (234, 29) → (233, 28), vertical 8x66 + m.drawVerticalEnergyBar(233, 28); + + // Player inventory: shift panel by -1 + m.drawPlayerInventory(-1, 128, { size: [176, 90] }); + m.drawHotbar(6, 196, { size: [162, 18] }); + + // Recall Button: x=173, y=195, width=76, height=20 + m.addButton(173, 195, { name: "recall_button" }); +} diff --git a/machines/cargo_loader.ts b/machines/cargo_loader.ts new file mode 100644 index 00000000..9a23e14c --- /dev/null +++ b/machines/cargo_loader.ts @@ -0,0 +1,23 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("cargo_loader", "Cargo Loader", 201)); + + // Title + m.drawTitle(); + + // Battery Slot: index 0, x=10, y=27 + m.slot(10, 27, { name: "battery_slot", ghost: "power" }); + + // Inventory Grid: 14 slots (indices 1 to 14) as a 7x2 grid starting at x=38, y=27 + m.slotGrid(38, 27, 7, 2, { name: "cargo_grid" }); + + // Energy Bar: at x=108, y=102, width=54, height=7 + m.drawEnergyBar(108, 102); + + // Background lightning symbol: x=94, y=101, w=11, h=10 + m.drawImage("textures/ui/cosmos/slot_overlay/power", 94, 101, 11, 10, { name: "lightning_icon" }); + + // Button: "Load Items" at x=87, y=77, width=76, height=20 + m.addButton(87, 77, { name: "load_items_button" }); +} diff --git a/machines/cargo_unloader.ts b/machines/cargo_unloader.ts new file mode 100644 index 00000000..7363e75e --- /dev/null +++ b/machines/cargo_unloader.ts @@ -0,0 +1,27 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("cargo_unloader", "Cargo Unloader", 201)); + + // Title + m.drawString("container.cargounloader.name", 60, 12, { name: "title_text" }); + + // Inventory Text + m.drawString("container.inventory", 8, 111, { name: "inventory_text" }); + + // Status Text + m.drawString("gui.message.status.name", 11, 67, { name: "status_label" }); + + // Battery Slot (index 0) + m.slot(10, 27, { name: "battery_slot", ghost: "power" }); + + // 14 Cargo Slots (indices 1 to 14) in a 2x7 grid + // Note: slotGrid takes (x, y, cols, rows). Step is 18 (default). + m.slotGrid(38, 27, 7, 2, { name: "cargo_grid" }); + + // Button + m.addButton(87, 77, { name: "unload_items_button" }); + + // Energy bar + m.drawEnergyBar(108, 102); +} diff --git a/machines/chromatic_applicator.ts b/machines/chromatic_applicator.ts new file mode 100644 index 00000000..7bd3ec1d --- /dev/null +++ b/machines/chromatic_applicator.ts @@ -0,0 +1,19 @@ +import { gui } from "../ui_datagen"; + +export function register(reg: any) { + const m = reg.add(gui("chromatic_applicator", "Chromatic Applicator", 186)); + + m.drawTitle(); + + // Container Slots + m.slot(40, 25, { name: "to_be_painted" }); + m.slot(122, 25, { name: "dyes" }); + + // Color Selector Box + m.drawColorSelector(79, 24, { name: "color_selector" }); + + // Buttons + m.addButton(92, 45, { name: "apply_paint" }); + m.addButton(8, 45, { name: "mix_paint" }); + m.addButton(8, 67, { name: "reset_paint" }); +} diff --git a/machines/deconstructor.ts b/machines/deconstructor.ts new file mode 100644 index 00000000..c1381f41 --- /dev/null +++ b/machines/deconstructor.ts @@ -0,0 +1,43 @@ +import { MachineRegistry, gui, BARS, barHorizontal } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + BARS.deconstructor = { + defKey: "progress_bar", + build: () => barHorizontal( + [54, 17], + "textures/ui/cosmos/machines/deconstructor_bar", + "textures/ui/cosmos/machines/deconstructor_bar_fill", + { + icons: [{ + name: "deconstructor_on", + texture: "textures/ui/cosmos/machines/deconstructor_on", + size: [15, 13], + offset: [24, -8], // x=77 -> 77-53=24, y=28 -> 28-36=-8 + condition: "(#data > 500 and not (#data = 1000))" + }] + } + ), + }; + + const m = reg.add(gui("deconstructor", "Deconstructor", 199)); + + m.drawTitle(); + + // Output slots (2-10): 3x3 grid starting at x=112, y=18 + m.slotGrid(112, 18, 3, 3, { name: "output_grid" }); + + // Battery slot (0): x=55, y=75 + m.slot(55, 75, { name: "battery_slot", ghost: "power" }); + + // Input slot (1): x=26, y=36 + m.slot(26, 36, { name: "input_slot" }); + + // Energy bar: x=18, y=96, w=54, h=7 + m.drawEnergyBar(18, 96); + + // Progress bar: x=53, y=36, w=54, h=17 + m.drawProgressBar(53, 36, "deconstructor"); + + // Small power icon at x=4, y=95, w=11, h=10 + m.drawImage("textures/ui/cosmos/slot_overlay/power", 4, 95, 11, 10, { name: "power_icon" }); +} diff --git a/machines/geothermal_generator.ts b/machines/geothermal_generator.ts new file mode 100644 index 00000000..07803089 --- /dev/null +++ b/machines/geothermal_generator.ts @@ -0,0 +1,26 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("geothermal_generator", "Geothermal Generator", 201)); + + // Title + m.drawTitle(); + + // Battery Slot (index 0) + m.slot(152, 83, { name: "battery_slot", ghost: "power" }); + + // Energy Bar (index 1) — Java: x=97, y=25, w=54, h=7 + m.drawEnergyBar(97, 25); + + // Generating text (index 2) — Java: centered at y=46 + m.drawStatusText(0, 46, { name: "generating_label", anchor: "top_middle", scale: 0.8 }); + + // Status text (index 3) — Java: centered at y=57 + m.drawStatusText(0, 57, { name: "status_label", anchor: "top_middle", scale: 0.8 }); + + // Enable/Disable button (index 4) — Java: centered, w=72, h=20 + m.addButton(52, 81, { name: "enable_button", width: 72, height: 20 }); + + // Generation indicator / lava animation (index 5) — Java: x=33, y=21, w=46, h=16 + m.drawFluidTank(33, 21, "lava", { height: 16, name: "lava_tank" }); +} diff --git a/machines/launch_controller.ts b/machines/launch_controller.ts new file mode 100644 index 00000000..4c07ee83 --- /dev/null +++ b/machines/launch_controller.ts @@ -0,0 +1,27 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("launch_controller", "Launch Controller", 209)); + m.drawTitle(); + + // Real slot 0 + m.slot(152, 105, { name: "battery_slot", ghost: "power" }); + + // UI slot 1 + m.drawEnergyBar(99, 114); + + // Buttons & Inputs (UI slots 2-6) + // Buttons & Inputs (UI slots 2-6) + m.addButton(122, 16, { name: "enable_button", width: 48, height: 20, fontScale: 0.8 }); + m.addTextBox(66, 16, { name: "frequency_button", width: 48, height: 20, fontScale: 0.8 }); + m.addTextBox(45, 38, { name: "dest_frequency_button", width: 48, height: 20, fontScale: 0.8 }); + m.addButton(95, 38, { name: "hide_dest_button", width: 39, height: 20, fontScale: 0.65 }); + m.addButton(48, 62, { name: "advanced_button", width: 80, height: 20, fontScale: 0.8 }); + + // UI slot 7 + m.drawStatusText(0, 86, { name: "status_text", anchor: "top_middle", scale: 0.8 }); + + // Static text + m.drawString("Frequency:", 7, 22, { scale: 0.8 }); + m.drawString("Dest Frequency:", 7, 44, { scale: 0.8 }); +} diff --git a/machines/methane_synthesizer.ts b/machines/methane_synthesizer.ts new file mode 100644 index 00000000..e8dda591 --- /dev/null +++ b/machines/methane_synthesizer.ts @@ -0,0 +1,31 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +// ── Methane Synthesizer ───────────────────────────────────────── +// Ported from: planets/mars/client/gui/GuiMethaneSynthesizer.java +// planets/mars/inventory/ContainerMethaneSynthesizer.java +// ySize = 168 + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("methane_synthesizer", "Methane Synthesizer", 168)); + m.hideCloseButton(); + m.closeButton(-27, 12); + m.drawTitle(47, 5); + + // Slots — positions straight from ContainerMethaneSynthesizer.addSlotToContainer() + m.slot(7, 7, { name: "h2_input" }); // 0: hydrogen canister + m.slot(28, 7, { name: "co2_input" }); // 1: CO₂ / atmospheric valve + m.slot(53, 53, { name: "battery_slot", ghost: "power" }); // 2: battery + m.slot(28, 53, { name: "carbon_slot" }); // 3: carbon fragments + m.slot(153, 7, { name: "methane_output" }); // 4: methane output + + // Tanks — positions + heights from GuiElementInfoRegion + m.drawFluidTank(7, 28, "hydrogen_gas", { name: "h2_tank" }); // height=38 (default) + m.drawFluidTank(28, 28, "co2_gas", { name: "co2_tank", height: 20 }); // height=20 + m.drawFluidTank(153, 28, "methane", { name: "methane_tank" }); // height=38 (default) + + // HUD + m.drawEnergyBar(66, 17); + m.drawStatusText(72, 50); + m.drawStatusText(75, 60, { name: "status_detail" }); + m.addButton(60, 28); +} diff --git a/machines/oxygen_sealer.ts b/machines/oxygen_sealer.ts new file mode 100644 index 00000000..2e98f272 --- /dev/null +++ b/machines/oxygen_sealer.ts @@ -0,0 +1,24 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("oxygen_sealer", "Oxygen Sealer", 200)); + + // Slots + m.slot(33, 27, { name: "battery_slot", ghost: "power" }); + m.slot(10, 27, { name: "oxygen_slot", ghost: "o2" }); + m.slot(56, 27, { name: "thermal_slot", ghost: "gear" }); // ambient thermal controller + + // UI Slots + m.drawOxygenBar(113, 24); // ui index 3 + m.drawEnergyBar(113, 37); // ui index 4 + + m.addButton(50, 91, { name: "disable_button" }); // ui index 5 + + m.drawStatusText(0, 50, { anchor: "top_middle", name: "status_text" }); // ui index 6 + m.drawStatusText(0, 60, { anchor: "top_middle", name: "oxygen_usage_text" }); // ui index 7 + m.drawStatusText(0, 70, { anchor: "top_middle", name: "thermal_status_text" }); // ui index 8 + + // Add "In:" static labels + m.drawString("In:", 80, 26, { color: [0.25, 0.25, 0.25] }); + m.drawString("In:", 80, 38, { color: [0.25, 0.25, 0.25] }); +} diff --git a/machines/short_range_telepad.ts b/machines/short_range_telepad.ts new file mode 100644 index 00000000..4280a640 --- /dev/null +++ b/machines/short_range_telepad.ts @@ -0,0 +1,26 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("short_range_telepad", "Short Range Telepad", 209)); + + m.drawTitle(); + + // Battery slot (Real slot 0) + m.slot(152, 105, { name: "battery_slot", ghost: "power" }); + + // Buttons (UI slots 1, 2, 3) + m.addButton(122, 16, { name: "enable_button", width: 48, height: 20, fontScale: 0.5 }); + m.addTextBox(66, 16, { name: "address_button", width: 48, height: 20, fontScale: 0.5 }); + m.addTextBox(122, 38, { name: "target_address_button", width: 48, height: 20, fontScale: 0.5 }); + + // Energy Bar (UI slot 4) + m.drawEnergyBar(99, 114); + + // Static Text (does not take slots) + m.drawString("Address:", 7, 22); + m.drawString("Dest Address:", 7, 44); + + // Status Text (UI slots 5, 6) + m.drawStatusText(7, 66, { name: "status_receiving" }); + m.drawStatusText(7, 88, { name: "status_sending" }); +} diff --git a/machines/solar_array_controller.ts b/machines/solar_array_controller.ts new file mode 100644 index 00000000..cc8765cc --- /dev/null +++ b/machines/solar_array_controller.ts @@ -0,0 +1,27 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("solar_array_controller", "Solar Array Controller", 209)); + + // Label "Solar Array Controller": x=88, y=7, centered + m.drawTitle(0, 7, { anchor: "top_middle" }); + + // Slot index 0: x=152, y=91 + m.slot(152, 91, { name: "battery_slot", ghost: "power" }); + + // Label "Generating: ": x=0 (centered), y=46 + m.drawStatusText(0, 46, { name: "generating", anchor: "top_middle" }); + + // Label "Status: ": x=0 (centered), y=57 + m.drawStatusText(0, 57, { name: "status", anchor: "top_middle" }); + + // Label "Environment: ": x=0 (centered), y=68 + m.drawStatusText(0, 68, { name: "environment", anchor: "top_middle" }); + + // Label "Connected Panels: ": x=0 (centered), y=79 + m.drawStatusText(0, 79, { name: "connected_panels", anchor: "top_middle" }); + + + // Button id 0: x=52, y=93, w=72, h=20 + m.addButton(52, 93, { name: "enable_button" }); +} diff --git a/machines/terraformer.ts b/machines/terraformer.ts new file mode 100644 index 00000000..2f709075 --- /dev/null +++ b/machines/terraformer.ts @@ -0,0 +1,49 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("terraformer", "Terraformer", 237)); + + m.hideCloseButton(); + m.closeButton(150, 4); + + // REAL SLOTS (0 - 13) + // Slot 0 (Water Bucket): x=25, y=19 + m.slot(25, 19, { name: "water_bucket" }); + + // Slot 1 (Battery): x=25, y=39 + m.slot(25, 39, { name: "battery", ghost: "power" }); + + // Slots 2,3,4,5 (Bonemeal): x=25, 43, 61, 79 and y=63 + m.slot(25, 63, { name: "bonemeal_0" }); + m.slot(43, 63, { name: "bonemeal_1" }); + m.slot(61, 63, { name: "bonemeal_2" }); + m.slot(79, 63, { name: "bonemeal_3" }); + + // Slots 6,7,8,9 (Saplings): x=25, 43, 61, 79 and y=87 + m.slot(25, 87, { name: "sapling_0" }); + m.slot(43, 87, { name: "sapling_1" }); + m.slot(61, 87, { name: "sapling_2" }); + m.slot(79, 87, { name: "sapling_3" }); + + // Slots 10,11,12,13 (Seeds): x=25, 43, 61, 79 and y=111 + m.slot(25, 111, { name: "seed_0" }); + m.slot(43, 111, { name: "seed_1" }); + m.slot(61, 111, { name: "seed_2" }); + m.slot(79, 111, { name: "seed_3" }); + + // UI SLOTS (14+) + // Index 14: Energy Bar + m.drawEnergyBar(45, 48); + + // Index 15: Fluid Tank + m.drawFluidTank(56, 18, "water", { name: "water_tank", width: 39, height: 26 }); + + // Index 16: Toggle Trees + m.addButton(98, 85, { name: "toggle_trees", width: 72, height: 20 }); + + // Index 17: Toggle Grass + m.addButton(98, 109, { name: "toggle_grass", width: 72, height: 20 }); + + // Index 18: Toggle Bubble + m.addCheckbox(85, 132, { name: "toggle_bubble" }); +} diff --git a/machines/water_electrolyzer.ts b/machines/water_electrolyzer.ts new file mode 100644 index 00000000..21ce80d1 --- /dev/null +++ b/machines/water_electrolyzer.ts @@ -0,0 +1,18 @@ +import { MachineRegistry, gui } from "../ui_datagen"; + +export function register(reg: MachineRegistry) { + const m = reg.add(gui("water_electrolyzer", "Water Electrolyzer", 168)); + m.hideCloseButton(); + m.closeButton(-44, 12); + m.drawTitle(30, 5); + m.slot(6, 6, { name: "water_intake" }); + m.slot(30, 49, { name: "battery_slot", ghost: "power" }); + m.slot(131, 6, { name: "o2_output" }); + m.slot(152, 6, { name: "h2_output" }); + m.drawFluidTank(6, 27, "water"); + m.drawFluidTank(131, 27, "oxygen_gas", { name: "oxygen_tank" }); + m.drawFluidTank(152, 27, "hydrogen_gas", { name: "hydrogen_tank" }); + m.drawEnergyBar(41, 16); + m.drawStatusText(56, 50); + m.addButton(39, 28); +} diff --git a/png_util.ts b/png_util.ts new file mode 100644 index 00000000..40098af1 --- /dev/null +++ b/png_util.ts @@ -0,0 +1,171 @@ +/** + * PNG Utility — Tank texture generator + * ===================================== + * Automatically generates cropped tank textures at build time. + * Called internally by drawFluidTank when height != standard. + * + * Handles PNG filter bytes correctly — decodes to raw pixels + * then re-encodes with filter=None for safe row rearrangement. + */ +import * as fs from "fs"; +import * as zlib from "zlib"; + +// ── CRC32 (required by PNG spec) ──────────────────────────────── +const crcTable: Uint32Array = new Uint32Array(256); +for (let n = 0; n < 256; n++) { + let c = n; + for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1; + crcTable[n] = c >>> 0; +} +function crc32(buf: Buffer): number { + let crc = 0xffffffff; + for (let i = 0; i < buf.length; i++) crc = (crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8)) >>> 0; + return (crc ^ 0xffffffff) >>> 0; +} + +// ── PNG decode/encode ─────────────────────────────────────────── + +export interface RawImage { + w: number; + h: number; + bitDepth: number; + colorType: number; + bpp: number; // bytes per pixel + pixels: Buffer[]; // decoded pixel rows (NO filter byte, just raw RGBA/RGB/etc.) +} + +function paethPredictor(a: number, b: number, c: number): number { + const p = a + b - c; + const pa = Math.abs(p - a), pb = Math.abs(p - b), pc = Math.abs(p - c); + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +export function decodePng(path: string): RawImage { + const buf = fs.readFileSync(path); + let offset = 8; // skip signature + let ihdr: Buffer | null = null; + const idatChunks: Buffer[] = []; + + while (offset < buf.length) { + const length = buf.readUInt32BE(offset); + const type = buf.subarray(offset + 4, offset + 8).toString("ascii"); + const data = buf.subarray(offset + 8, offset + 8 + length); + if (type === "IHDR") ihdr = Buffer.from(data); + if (type === "IDAT") idatChunks.push(Buffer.from(data)); + if (type === "IEND") break; + offset += 12 + length; + } + if (!ihdr) throw new Error(`No IHDR in ${path}`); + + const w = ihdr.readUInt32BE(0); + const h = ihdr.readUInt32BE(4); + const bitDepth = ihdr[8]; + const colorType = ihdr[9]; + const bpp = ({ 0: 1, 2: 3, 4: 2, 6: 4 } as Record)[colorType] * (bitDepth / 8); + const stride = w * bpp; // raw pixel bytes per row (no filter byte) + + const raw = zlib.inflateSync(Buffer.concat(idatChunks)); + const filteredStride = 1 + stride; // filter byte + pixel data + + // Decode each row, undoing the PNG filter + const pixels: Buffer[] = []; + for (let y = 0; y < h; y++) { + const filterType = raw[y * filteredStride]; + const scanline = raw.subarray(y * filteredStride + 1, y * filteredStride + 1 + stride); + const decoded = Buffer.alloc(stride); + const prev = y > 0 ? pixels[y - 1] : Buffer.alloc(stride); // previous decoded row + + for (let x = 0; x < stride; x++) { + const a = x >= bpp ? decoded[x - bpp] : 0; // left pixel + const b = prev[x]; // above pixel + const c = x >= bpp ? prev[x - bpp] : 0; // upper-left pixel + const raw_val = scanline[x]; + + switch (filterType) { + case 0: decoded[x] = raw_val; break; // None + case 1: decoded[x] = (raw_val + a) & 0xff; break; // Sub + case 2: decoded[x] = (raw_val + b) & 0xff; break; // Up + case 3: decoded[x] = (raw_val + ((a + b) >> 1)) & 0xff; break; // Average + case 4: decoded[x] = (raw_val + paethPredictor(a, b, c)) & 0xff; break; // Paeth + default: throw new Error(`Unknown PNG filter type: ${filterType}`); + } + } + pixels.push(decoded); + } + + return { w, h, bitDepth, colorType, bpp, pixels }; +} + +export function encodePng(img: RawImage, rows: Buffer[]): Buffer { + const h = rows.length; + const stride = img.w * img.bpp; + + // Re-encode with filter type 0 (None) — safe for rearranged rows + const filtered = Buffer.alloc(h * (1 + stride)); + for (let y = 0; y < h; y++) { + filtered[y * (1 + stride)] = 0; // filter = None + rows[y].copy(filtered, y * (1 + stride) + 1); + } + + const compressed = zlib.deflateSync(filtered); + + function chunk(type: string, payload: Buffer): Buffer { + const typeAndData = Buffer.concat([Buffer.from(type, "ascii"), payload]); + const crcVal = crc32(typeAndData); + const out = Buffer.alloc(4 + typeAndData.length + 4); + out.writeUInt32BE(payload.length, 0); + typeAndData.copy(out, 4); + out.writeUInt32BE(crcVal, 4 + typeAndData.length); + return out; + } + + const ihdr = Buffer.alloc(13); + ihdr.writeUInt32BE(img.w, 0); + ihdr.writeUInt32BE(h, 4); + ihdr[8] = img.bitDepth; + ihdr[9] = img.colorType; + + const sig = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); + return Buffer.concat([sig, chunk("IHDR", ihdr), chunk("IDAT", compressed), chunk("IEND", Buffer.alloc(0))]); +} + +// ── Public API ────────────────────────────────────────────────── + +const TANK_TEX_DIR = "RP/textures/ui/cosmos/machines"; + +/** + * Generate cropped tank textures for a given Bedrock panel height. + * Crop: top border row + bottom (h-1) rows from the 18×40 source. + * Outputs: tank_back_{h}.png, tank_front_{h}.png + * + * @param bedrockHeight Panel height in pixels (Java height + 2 for borders) + * @returns Texture path strings for use in JSON UI $tank_back_tex / $tank_front_tex + */ +export function ensureTankTextures(bedrockHeight: number, bedrockWidth: number = 18): { back: string; front: string } { + const suffix = bedrockWidth !== 18 ? `_${bedrockWidth}x${bedrockHeight}` : `_${bedrockHeight}`; + const backOut = `${TANK_TEX_DIR}/tank_back${suffix}.png`; + const frontOut = `${TANK_TEX_DIR}/tank_front${suffix}.png`; + + for (const [srcName, outPath] of [["tank_back", backOut], ["tank_front", frontOut]] as const) { + if (!fs.existsSync(outPath)) { + const img = decodePng(`${TANK_TEX_DIR}/${srcName}.png`); + if (bedrockHeight === img.h && bedrockWidth === img.w) continue; + + // We only crop vertically for now. Horizontal stretching will be handled by Bedrock rendering. + let cropped = img.pixels; + if (bedrockHeight < img.h) { + cropped = [img.pixels[0], ...img.pixels.slice(img.h - (bedrockHeight - 1))]; + } + + fs.writeFileSync(outPath, encodePng(img, cropped)); + console.log(` ✓ Generated ${outPath} (${img.w}×${bedrockHeight})`); + } + } + + return { + back: `textures/ui/cosmos/machines/tank_back${suffix}`, + front: `textures/ui/cosmos/machines/tank_front${suffix}`, + }; +} diff --git a/scrape_recipes.js b/scrape_recipes.js new file mode 100644 index 00000000..39a5c01e --- /dev/null +++ b/scrape_recipes.js @@ -0,0 +1,135 @@ +const fs = require('fs'); +const path = require('path'); + +const recipesDir = path.join(__dirname, 'BP', 'recipes'); +const outputFile = path.join(__dirname, 'BP', 'scripts', 'recipes', 'galacticraft_crafting_recipes_data.js'); + +const recipeData = {}; + +function processRecipe(filePath) { + try { + const content = fs.readFileSync(filePath, 'utf-8'); + const json = JSON.parse(content); + + if (json['minecraft:recipe_shaped']) { + const recipe = json['minecraft:recipe_shaped']; + + // Extract output item + let outputItem = null; + if (Array.isArray(recipe.result)) { + outputItem = recipe.result[0].item || recipe.result[0].name || recipe.result[0]; + if (typeof outputItem === 'object' && outputItem.item) outputItem = outputItem.item; + } else if (typeof recipe.result === 'object') { + outputItem = recipe.result.item || recipe.result.name || Object.keys(recipe.result)[0]; // Fallback + } else if (typeof recipe.result === 'string') { + outputItem = recipe.result; + } + + if (!outputItem) return; + + const ingredients = {}; + const keys = recipe.key || {}; + const pattern = recipe.pattern || []; + + for (const row of pattern) { + for (const char of row) { + if (char !== ' ') { + const keyDef = keys[char]; + let itemStr = null; + if (keyDef) { + if (keyDef.item) { + itemStr = keyDef.item; + } else if (keyDef.tag) { + itemStr = 'tag:' + keyDef.tag; + } else if (typeof keyDef === 'string') { + itemStr = keyDef; + } + } + + if (itemStr) { + ingredients[itemStr] = (ingredients[itemStr] || 0) + 1; + } + } + } + } + + if (Object.keys(ingredients).length > 0) { + recipeData[outputItem] = ingredients; + } + + } else if (json['minecraft:recipe_shapeless']) { + const recipe = json['minecraft:recipe_shapeless']; + + let outputItem = null; + if (Array.isArray(recipe.result)) { + outputItem = recipe.result[0].item || recipe.result[0].name || recipe.result[0]; + if (typeof outputItem === 'object' && outputItem.item) outputItem = outputItem.item; + } else if (typeof recipe.result === 'object') { + outputItem = recipe.result.item || recipe.result.name; + } else if (typeof recipe.result === 'string') { + outputItem = recipe.result; + } + + if (!outputItem) return; + + const ingredients = {}; + const ingredientsList = recipe.ingredients || []; + + for (const item of ingredientsList) { + let itemStr = null; + let count = 1; + + if (typeof item === 'string') { + itemStr = item; + } else if (item.item) { + itemStr = item.item; + count = item.count || 1; + } else if (item.tag) { + itemStr = 'tag:' + item.tag; + count = item.count || 1; + } + + if (itemStr) { + ingredients[itemStr] = (ingredients[itemStr] || 0) + count; + } + } + + if (Object.keys(ingredients).length > 0) { + recipeData[outputItem] = ingredients; + } + } + } catch (e) { + console.error(`Error processing ${filePath}:`, e); + } +} + +function run() { + if (!fs.existsSync(recipesDir)) { + console.error(`Directory not found: ${recipesDir}`); + return; + } + + function walkDir(dir) { + const files = fs.readdirSync(dir); + for (const file of files) { + const fullPath = path.join(dir, file); + if (fs.statSync(fullPath).isDirectory()) { + walkDir(fullPath); + } else if (file.endsWith('.json')) { + processRecipe(fullPath); + } + } + } + walkDir(recipesDir); + + const outputDir = path.dirname(outputFile); + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); + } + + const fileContent = `export const recipes = ${JSON.stringify(recipeData, null, 2)};\n`; + fs.writeFileSync(outputFile, fileContent, 'utf-8'); + console.log(`Successfully wrote ${Object.keys(recipeData).length} recipes to ${outputFile}`); +} + +run(); diff --git a/ui_datagen.ts b/ui_datagen.ts new file mode 100644 index 00000000..b6b5ab1f --- /dev/null +++ b/ui_datagen.ts @@ -0,0 +1,1136 @@ +/** + * Machine UI Data Generator — Java-to-Bedrock Compiler + * ===================================================== + * + * Write machine GUIs exactly how you would in Java's GuiContainerGC. + * All Bedrock JSON UI complexity ($use_durability, clips_children, + * #size_binding_x, routing, UI slot allocation) is black-boxed. + * + * const m = gui("electric_furnace", "Electric Furnace", 157); + * m.slot(54, 23); // 0: input + * m.slot(7, 46, { ghost: "power" }); // 1: battery + * m.slot(108, 23); // 2: output + * m.drawEnergyBar(39, 49); // auto → UI slot 3 + * m.drawProgressBar(77, 23, "electric_furnace"); // auto → UI slot 4 + * m.drawStatusText(98, 49); // auto → UI slot 5 + * + * Run: npx tsx ui_datagen.ts [--verify] [--dry-run] [--machine ] + */ + +import { writeFileSync, readFileSync, existsSync, mkdirSync } from "fs"; +import { join, dirname } from "path"; + +// ================================================================ +// Texture paths +// ================================================================ + +const TEX = "textures/ui/cosmos/machines"; +const OVERLAY = "textures/ui/cosmos/slot_overlay"; + +const GHOSTS: Record = { + power: `${OVERLAY}/power`, + o2: `${OVERLAY}/o2`, + fuel: `${OVERLAY}/fuel`, + gear: `${OVERLAY}/gear`, + shield: `${OVERLAY}/shield`, + mask: `${OVERLAY}/mask`, + tank: `${OVERLAY}/tank`, + head: `${OVERLAY}/head`, + body: `${OVERLAY}/body`, + legs: `${OVERLAY}/legs`, + feet: `${OVERLAY}/feet`, + parachute: `${OVERLAY}/parachute`, + frequency: `${OVERLAY}/frequency`, + silicon: `${OVERLAY}/silicon`, + // Vanilla item ghost overlays (25% alpha) + coal: "textures/items/coal", + diamond: "textures/items/diamond", + redstone: "textures/items/redstone_dust", + raw_silicon: "textures/items/raw_silicon", +}; + +const GHOST_ITEMS = new Set(["coal", "diamond", "redstone", "raw_silicon"]); + +// ================================================================ +// Progress bar definition builders (low-level, auto-managed) +// ================================================================ + +function barHorizontal( + size: [number, number], + emptyTex: string, + fillTex: string, + opts: { + fillSize?: [number, number]; + fillOffset?: [number, number]; + clipHeight?: number; + icons?: { name: string; texture: string; size: [number, number]; offset: [number, number]; condition: string }[]; + hover?: boolean; + } = {} +): any { + const [fw, fh] = opts.fillSize ?? size; + const [fx, fy] = opts.fillOffset ?? [0, 0]; + + const inner: any[] = []; + if (opts.icons) { + for (const ic of opts.icons) { + inner.push({ + [ic.name]: { + type: "image", texture: ic.texture, size: ic.size, + anchor_from: "top_left", anchor_to: "top_left", offset: ic.offset, + bindings: "$use_durability", + $source: "#null", $target: "#null", $visible_if: ic.condition, + }, + }); + } + } + + // When fillSize is specified with offset, the clip panel uses [1, clipH] + // because #size_binding_x overrides the width at runtime. + // When no fillSize, it uses the full bar size for the initial clip. + const clipW = opts.fillSize ? 1 : fw; + const clipH = opts.clipHeight ?? fh; + + inner.push({ + progress_fill: { + type: "panel", clips_children: true, size: [clipW, clipH], + anchor_to: "top_left", anchor_from: "top_left", offset: [fx, fy], + bindings: "$use_durability", + $source: "#data", $target: "#size_binding_x", + $visible_if: "(not (#data = 1000))", + controls: [{ + image: { + anchor_to: "top_left", anchor_from: "top_left", + type: "image", size: [fw, fh], texture: fillTex, + }, + }], + }, + }); + + const ctrls: any[] = [{ + "progress@machines.specific_slot": { + anchor_from: "top_left", anchor_to: "top_left", + controls: [{ + progress_bar: { + type: "panel", collection_index: "$index", + anchor_from: "top_left", anchor_to: "top_left", + size: [1, 0], controls: inner, + }, + }], + }, + }]; + + if (opts.hover) ctrls.push({ "hover_text@machines.item_hover": {} }); + + return { type: "image", texture: emptyTex, size, controls: ctrls }; +} + +function barVerticalFlame(): any { + return { + type: "image", texture: "textures/ui/flame_empty_image", size: [13, 13], + controls: [{ + "progress@machines.specific_slot": { + size: ["100%", "100%"], + controls: [{ + unit_size: { + type: "panel", collection_index: "$index", + anchor_from: "bottom_left", anchor_to: "bottom_left", + size: [0, 1], + controls: [{ + clipper: { + type: "panel", clips_children: true, size: [13, 1], + anchor_from: "bottom_left", anchor_to: "bottom_left", + bindings: "$use_durability", + $source: "#data", $target: "#size_binding_y", + $visible_if: "(not (#data = 1000))", + controls: [{ + image: { + type: "image", texture: "textures/ui/flame_full_image", + size: [13, 13], + anchor_to: "bottom_left", anchor_from: "bottom_left", + }, + }], + }, + }], + }, + }], + }, + }], + }; +} + +function barColored(size: [number, number], color: number[]): any { + return { + type: "image", texture: `${TEX}/progress_bar`, size, + controls: [{ + "capacity@machines.specific_slot": { + anchor_from: "top_left", anchor_to: "top_left", + controls: [{ + capacity: { + type: "panel", collection_index: "$index", + anchor_from: "top_left", anchor_to: "top_left", + size: [1, 0], + controls: [{ + capacity: { + type: "image", texture: `${TEX}/progress_bar_fill`, + color, size: [1, size[1]], + anchor_to: "top_left", anchor_from: "top_left", + bindings: "$use_durability", + $source: "#data", $target: "#size_binding_x", + $visible_if: "(not (#data = 1000))", + }, + }], + }, + }], + }, + }], + }; +} + +// Pre-built bar types +const BARS: Record any }> = { + electric_furnace: { + defKey: "electric_furnace_bar", + build: () => barHorizontal([22, 15], `${TEX}/electric_furnace_bar`, `${TEX}/electric_furnace_bar_fill`), + }, + compressor: { + defKey: "progress_bar", + build: () => barHorizontal([52, 25], `${TEX}/compressor_bar`, `${TEX}/compressor_bar_fill`, { + fillSize: [52, 17], fillOffset: [0, 9], + icons: [{ name: "hammering", texture: `${TEX}/compressor_on`, size: [15, 13], offset: [24, 1], condition: "(#data > 26 and not (#data = 1000))" }], + }), + }, + circuit_fabricator: { + defKey: "progress_bar", + build: () => barHorizontal([53, 12], `${TEX}/progress_bar`, `${TEX}/fabricating`, { + fillSize: [51, 30], fillOffset: [1, 1], clipHeight: 10, hover: true, + }), + }, + burn_time: { defKey: "burn_time", build: barVerticalFlame }, + capacity_green: { defKey: "capacity", build: () => barColored([75, 5], [0, 0.7, 0]) }, + capacity_blue: { defKey: "capacity", build: () => barColored([75, 5], [0.29, 0.63, 0.89]) }, +}; + +// ================================================================ +// GuiMachine — write GUIs exactly like Java +// ================================================================ + +type Anchor = "top_left" | "top_middle" | "top_right"; +type BuildFn = () => any; + +interface SlotOpts { + name?: string; + ghost?: string; + anchor?: Anchor; +} + +export class GuiMachine { + name: string; + title: string; + ySize: number; + xSize: number; + + protected _slots: { idx: number; name: string; ghost?: string; grid?: boolean }[] = []; + protected _uiSlotCount = 0; + protected _content: BuildFn[] = []; + protected _barDefs: Record = {}; + protected _showClose = true; + protected _showBottomHalf = true; + protected _showHotbar = true; + + constructor(name: string, title: string, ySize = 166, xSize = 176) { + this.name = name; + this.title = title; + this.ySize = ySize; + this.xSize = xSize; + } + + // ── Java API: Container slots ────────────────────────────── + + /** Java: addSlotToContainer(new Slot(tileEntity, index, x, y)) */ + slot(x: number, y: number, opts: SlotOpts = {}): number { + const idx = this._slots.length; + const name = opts.name ?? `slot_${idx}`; + const anchor = opts.anchor ?? "top_left"; + this._slots.push({ idx, name, ghost: opts.ghost }); + + this._content.push(() => { + const props: any = { + $index: idx, + anchor_from: anchor, anchor_to: anchor, + offset: [x, y], + }; + if (opts.ghost) { + props.$overlay_texture = GHOSTS[opts.ghost] ?? opts.ghost; + if (GHOST_ITEMS.has(opts.ghost) || (props.$overlay_texture as string).includes("textures/items/")) + props.$overlay_alpha = 0.25; + } + return { [`${name}@machines.item_slot`]: props }; + }); + return idx; + } + + /** Java: 9× addSlotToContainer in a double for-loop */ + slotGrid(x: number, y: number, cols = 3, rows = 3, opts: { name?: string; anchor?: Anchor } = {}): number { + const start = this._slots.length; + for (let r = 0; r < rows; r++) + for (let c = 0; c < cols; c++) + this._slots.push({ idx: start + r * cols + c, name: `grid_${r}_${c}`, grid: true }); + + const name = opts.name ?? "input_grid"; + const anchor = opts.anchor ?? "top_left"; + const size = [cols * 18, rows * 18]; + + this._content.push(() => ({ + [`${name}@machines.item_grid`]: { + size, grid_dimensions: [cols, rows], + anchor_from: anchor, anchor_to: anchor, offset: [x, y], + }, + })); + return start; + } + + // ── Java API: Draw calls (auto-allocate UI slots) ────────── + + private _uiSlot(): number { + return this._slots.length + this._uiSlotCount++; + } + + /** Java: int scale = getScaledElecticalLevel(55); drawTexturedModalRect(...) */ + drawEnergyBar(x: number, y: number, anchor: Anchor = "top_left"): number { + const idx = this._uiSlot(); + this._content.push(() => ({ + "energy_bar@machines.energy_bar": { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + /** Java: drawColorModalRect vertical energy bar (8px wide, 66px tall, fills bottom-to-top) */ + drawVerticalEnergyBar(x: number, y: number, anchor: Anchor = "top_left"): number { + const idx = this._uiSlot(); + this._content.push(() => ({ + "energy_bar@machines.energy_bar_vertical": { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + /** Java: int scale = getCappedScaledOxygenLevel(55); drawTexturedModalRect(...) */ + drawOxygenBar(x: number, y: number, anchor: Anchor = "top_left"): number { + const idx = this._uiSlot(); + this._content.push(() => ({ + "oxygen_bar@machines.oxygen_bar": { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + /** Java: drawTexturedModalRect for progress with scaled value */ + drawProgressBar(x: number, y: number, barType: string, opts: { name?: string; anchor?: Anchor } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "progress"; + const anchor = opts.anchor ?? "top_left"; + + if (!(barType in BARS)) throw new Error(`Unknown bar type: ${barType}. Available: ${Object.keys(BARS).join(", ")}`); + const { defKey, build } = BARS[barType]; + this._barDefs[defKey] = build(); + const ref = `${this.name}.${defKey}`; + + this._content.push(() => ({ + [`${name}@${ref}`]: { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + /** Reuse another machine's bar (e.g. electric_compressor → compressor.progress_bar) */ + drawProgressBarRef(x: number, y: number, ref: string, opts: { name?: string; anchor?: Anchor } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "progress"; + const anchor = opts.anchor ?? "top_left"; + this._content.push(() => ({ + [`${name}@${ref}`]: { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + /** Java: drawTexturedModalRect for vertical flame (burn time) */ + drawBurnTime(x: number, y: number, opts: { name?: string; anchor?: Anchor } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "burn_time"; + const anchor = opts.anchor ?? "top_left"; + this._barDefs.burn_time = barVerticalFlame(); + this._content.push(() => ({ + [`${name}@${this.name}.burn_time`]: { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + /** Java: drawTexturedModalRect for tank area. Height defaults to 38 (standard). */ + drawFluidTank(x: number, y: number, liquid: string, opts: { name?: string; anchor?: Anchor; width?: number; height?: number } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? `${liquid}_tank`; + const anchor = opts.anchor ?? "top_left"; + const javaWidth = opts.width ?? 16; + const javaHeight = opts.height ?? 38; // Java GuiElementInfoRegion height + const bedrockWidth = javaWidth + 2; + const bedrockHeight = javaHeight + 2; // +2 for border pixels + + const props: any = { $liquid: liquid, $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }; + + if (bedrockHeight !== 40 || bedrockWidth !== 18) { + // Non-standard size: generate textures at build time, pass overrides + const { ensureTankTextures } = require("./png_util"); + const tex = ensureTankTextures(bedrockHeight, bedrockWidth); + props.$tank_width = bedrockWidth; + props.$tank_size = [`${bedrockWidth}px`, `${bedrockHeight}px`]; + props.$tank_back_tex = tex.back; + props.$tank_front_tex = tex.front; + } + + this._content.push(() => ({ + [`${name}@machines.fluid_tank`]: props, + })); + return idx; + } + + /** Dynamic fluid tank (reads liquid type from texture atlas). Uses 2 UI slots. */ + drawDynamicFluidTank(x: number, y: number, opts: { name?: string; anchor?: Anchor } = {}): number { + const idx = this._uiSlot(); + const texIdx = this._uiSlot(); + const name = opts.name ?? `tank_${idx}`; + const anchor = opts.anchor ?? "top_left"; + this._content.push(() => ({ + [`${name}@machines.any_fluid_tank`]: { $index: idx, $texture_index: texIdx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + /** Colored capacity meter */ + drawCapacityBar(x: number, y: number, opts: { color?: number[]; size?: [number, number]; name?: string; anchor?: Anchor } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "capacity"; + const anchor = opts.anchor ?? "top_left"; + this._barDefs.capacity = barColored(opts.size ?? [75, 5], opts.color ?? [0, 0.7, 0]); + this._content.push(() => ({ + [`${name}@${this.name}.capacity`]: { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + /** Solar panel sun indicator */ + drawSolarIcon(x: number, y: number, opts: { name?: string; anchor?: Anchor } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "solar_icon"; + const anchor = opts.anchor ?? "top_left"; + this._content.push(() => ({ + [`${name}@machines.solar_icon`]: { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + // ── Java API: Text ───────────────────────────────────────── + + /** Java: fontRenderer.drawString(dynamicStatus, x, y, color) — runtime-updated text */ + drawStatusText(x: number, y: number, opts: { name?: string; anchor?: Anchor; scale?: number } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "status"; + const anchor = opts.anchor ?? "top_left"; + const props: any = { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }; + if (opts.scale != null) props.$text_font_scale = opts.scale; + this._content.push(() => ({ + [`${name}@machines.item_text`]: props, + })); + return idx; + } + + /** Java: fontRenderer.drawString("literal", x, y, color) — static text */ + drawString(text: string, x: number, y: number, opts: { name?: string; anchor?: Anchor; color?: any; layer?: number; scale?: number } = {}) { + const name = opts.name ?? text.toLowerCase().replace(/[\s:\/]/g, "_").slice(0, 20); + const anchor = opts.anchor ?? "top_left"; + const props: any = { + type: "label", text, + color: opts.color ?? "$title_text_color", + anchor_from: anchor, anchor_to: anchor, offset: [x, y], + }; + if (opts.layer != null) props.layer = opts.layer; + if (opts.scale != null) props.font_scale_factor = opts.scale; + this._content.push(() => ({ [name]: props })); + } + + /** Java: fontRenderer.drawString(getName(), x, y, color) */ + drawTitle(x?: number, y?: number, opts: { text?: string; anchor?: Anchor } = {}) { + const text = opts.text ?? this.title; + const anchor = opts.anchor ?? "top_left"; + if (x == null && y == null) { + x = anchor === "top_middle" ? 0 : 10; + y = 5; + } + const props: any = { + type: "label", text, + color: "$title_text_color", + anchor_from: anchor, anchor_to: anchor, + offset: [x ?? 0, y ?? 0], + }; + // Insert title right after any close button (which should come first) + const insertIdx = this._content.length > 0 && !this._showClose ? 1 : 0; + this._content.splice(insertIdx, 0, () => ({ title: props })); + } + + drawPlayerInventory(x: number, y: number, opts: { name?: string; anchor?: Anchor; size?: [number, number] } = {}) { + this._showBottomHalf = false; + const name = opts.name ?? "player_inventory"; + const anchor = opts.anchor ?? "top_left"; + const props: any = { anchor_from: anchor, anchor_to: anchor, offset: [x, y] }; + if (opts.size) props.size = opts.size; + this._content.push(() => ({ + [`${name}@common.inventory_panel_bottom_half_with_label`]: props + })); + } + + /** Manually position the hotbar grid (hides the default template hotbar). Only works with dynamic_interface_large. */ + drawHotbar(x: number, y: number, opts: { name?: string; anchor?: Anchor; size?: [number, number] } = {}) { + this._showHotbar = false; + const name = opts.name ?? "player_hotbar"; + const anchor = opts.anchor ?? "top_left"; + const props: any = { anchor_from: anchor, anchor_to: anchor, offset: [x, y] }; + if (opts.size) props.size = opts.size; + this._content.push(() => ({ + [`${name}@common.hotbar_grid_template`]: props + })); + } + + // ── Java API: Buttons & Controls ─────────────────────────── + + /** Java: buttonList.add(new GuiButton(id, x, y, w, h, text)) */ + addButton(x: number, y: number, opts: { name?: string; anchor?: Anchor; width?: number; height?: number; fontScale?: number } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "start_button"; + const anchor = opts.anchor ?? "top_left"; + const w = opts.width ?? 75; + const h = opts.height ?? 18; + const props: any = { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y], $button_size: [w, h] }; + if (opts.fontScale != null) props.$button_font_scale = opts.fontScale; + this._content.push(() => ({ + [`${name}@machines.machine_button`]: props, + })); + return idx; + } + + /** Java: GuiElementTextBox */ + addTextBox(x: number, y: number, opts: { name?: string; anchor?: Anchor; width?: number; height?: number; fontScale?: number } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "textbox"; + const anchor = opts.anchor ?? "top_left"; + const w = opts.width ?? 75; + const h = opts.height ?? 18; + const props: any = { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y], $button_size: [w, h] }; + if (opts.fontScale != null) props.$button_font_scale = opts.fontScale; + this._content.push(() => ({ + [`${name}@machines.machine_textbox`]: props, + })); + return idx; + } + + /** Java: new GuiElementCheckbox(id, this, x, y, text) */ + addCheckbox(x: number, y: number, opts: { name?: string; anchor?: Anchor } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "toggle"; + const anchor = opts.anchor ?? "top_left"; + this._content.push(() => ({ + [`${name}@machines.machine_toggle`]: { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + /** A display-only UI slot for showing color selection or other visual items */ + drawColorSelector(x: number, y: number, opts: { name?: string; anchor?: Anchor } = {}): number { + const idx = this._uiSlot(); + const name = opts.name ?? "color_selector"; + const anchor = opts.anchor ?? "top_left"; + this._content.push(() => ({ + [`${name}@machines.item_slot`]: { $index: idx, anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + return idx; + } + + // ── Decorative ───────────────────────────────────────────── + + drawLine(x: number, y: number, w: number, h: number, opts: { color?: number[]; name?: string; anchor?: Anchor } = {}) { + const name = opts.name ?? "line"; + const anchor = opts.anchor ?? "top_left"; + this._content.push(() => ({ + [name]: { + type: "image", texture: "textures/white", fill: true, + color: opts.color ?? [0.5, 0.5, 0.5], size: [w, h], + anchor_from: anchor, anchor_to: anchor, offset: [x, y], + }, + })); + } + + drawImage(texture: string, x: number, y: number, w: number, h: number, opts: { name?: string; anchor?: Anchor } = {}) { + const name = opts.name ?? "background"; + const anchor = opts.anchor ?? "top_left"; + this._content.push(() => ({ + [name]: { type: "image", texture, size: [w, h], anchor_from: anchor, anchor_to: anchor, offset: [x, y] }, + })); + } + + drawCraftingArrow(x: number, y: number, opts: { name?: string; anchor?: Anchor; flip?: boolean } = {}) { + const name = opts.name ?? "arrow"; + const anchor = opts.anchor ?? "top_left"; + const props: any = { anchor_from: anchor, anchor_to: anchor, offset: [x, y] }; + if (opts.flip) props.size = [-22, 15]; + else props.size = [22, 15]; + this._content.push(() => ({ [`${name}@crafting.crafting_arrow_large`]: props })); + } + + closeButton(x: number, y: number, opts: { name?: string } = {}) { + const name = opts.name ?? "close"; + // Close button is always the first element (before title) + this._content.unshift(() => ({ [`${name}@common.close_button`]: { offset: [x, y] } })); + } + + hideCloseButton() { this._showClose = false; return this; } + + // ── Build (compiles Java → Bedrock JSON) ─────────────────── + + build(): any { + const result: any = { namespace: this.name }; + const iface: any = {}; + if (this.ySize !== 166) iface.$size = ["100%", this.ySize]; + if (!this._showClose) iface.$show_close_button = false; + if (!this._showBottomHalf) iface.$show_bottom_half = false; + if (!this._showHotbar) iface.$show_hotbar = false; + iface.$content = this._content.map((fn) => fn()); + const ifaceName = this.xSize > 176 ? "interface@machines.dynamic_interface_large" : "interface@machines.dynamic_interface"; + result[ifaceName] = iface; + for (const [k, v] of Object.entries(this._barDefs)) result[k] = v; + return result; + } + + encodedName(): string { return "§" + this.name.split("").join("§"); } + + routingEntry(): any { + return { + requires: `(not (($ct - '${this.encodedName()}') = $ct))`, + $screen_content: `${this.name}.interface`, + $screen_bg_content: "common.screen_background", + $screen_background_alpha: 0.4, + }; + } + + totalSlots(): number { return this._slots.length + this._uiSlotCount; } + + scriptHint(): string { + const lines = [ + `// === ${this.name} (${this.totalSlots()} total slots) ===`, + `// REAL SLOTS:`, + ]; + for (const s of this._slots) { + if (s.grid) continue; + lines.push(`// [${String(s.idx).padStart(2)}] ${s.name}${s.ghost ? ` (ghost: ${s.ghost})` : ""}`); + } + const uiStart = this._slots.length; + const uiEnd = uiStart + this._uiSlotCount - 1; + lines.push(`// UI SLOTS:`); + if (this._uiSlotCount > 0) { + lines.push(`// [${String(uiStart).padStart(2)}..${String(uiEnd).padStart(2)}] (${this._uiSlotCount} auto-allocated)`); + lines.push(`// container.add_ui_display(slot, text, durabilityValue)`); + } + return lines.join("\n"); + } +} + +// ================================================================ +// GuiParameterized — tier variants sharing one layout +// ================================================================ + +class GuiParameterized extends GuiMachine { + private _variants: [string, Record][] = []; + + addVariant(variantName: string, params: Record) { + this._variants.push([variantName, params]); + return this; + } + + build(): any { + const result: any = { namespace: this.name }; + for (const [vname, params] of this._variants) { + const alias: any = {}; + for (const [k, v] of Object.entries(params)) alias[`$${k}`] = v; + result[`${vname}@${this.name}.interface`] = alias; + } + const iface: any = {}; + if (this.ySize !== 166) iface.$size = ["100%", this.ySize]; + if (!this._showClose) iface.$show_close_button = false; + if (!this._showBottomHalf) iface.$show_bottom_half = false; + iface.$content = this._content.map((fn) => fn()); + result["interface@machines.dynamic_interface"] = iface; + for (const [k, v] of Object.entries(this._barDefs)) result[k] = v; + return result; + } +} + +// ================================================================ +// Shorthand factory +// ================================================================ + +export function gui(name: string, title: string, ySize = 166, xSize = 176): GuiMachine { + return new GuiMachine(name, title, ySize, xSize); +} + +function guiParameterized(name: string, title: string, ySize = 166): GuiParameterized { + return new GuiParameterized(name, title, ySize); +} + +// ================================================================ +// Registry +// ================================================================ + +export class MachineRegistry { + machines: GuiMachine[] = []; + constructor(public outputDir = "RP/ui/machines") {} + + add(machine: T): T { + this.machines.push(machine); + return machine; + } + + generate(opts: { write?: boolean; patch?: boolean } = {}) { + const { write = true, patch = true } = opts; + const results: { name: string; path: string; json: any; routing: any; uiDef: string; hints: string }[] = []; + + for (const m of this.machines) { + const data = m.build(); + const path = join(this.outputDir, `${m.name}.json`); + if (write) { + mkdirSync(dirname(path), { recursive: true }); + writeFileSync(path, JSON.stringify(data, null, "\t") + "\n"); + console.log(` ✓ ${m.name}.json`); + } + results.push({ + name: m.name, path, json: data, + routing: m.routingEntry(), + uiDef: `ui/machines/${m.name}.json`, + hints: m.scriptHint(), + }); + } + + if (results.length) { + console.log("\n// chest_screen.json routing:"); + for (const r of results) console.log(JSON.stringify(r.routing, null, 4) + ","); + console.log("\n// _ui_defs.json entries:"); + for (const r of results) console.log(` "${r.uiDef}",`); + console.log("\n// Script-side slot maps:"); + for (const r of results) console.log(r.hints + "\n"); + } + + if (patch && write) this._patchDefs(results); + return results; + } + + private _patchDefs(results: { uiDef: string }[]) { + const defsPath = join(dirname(this.outputDir), "_ui_defs.json"); + if (!existsSync(defsPath)) return; + const defs = JSON.parse(readFileSync(defsPath, "utf-8")); + const entries: string[] = defs.ui_defs ?? []; + let changed = false; + for (const r of results) { + if (!entries.includes(r.uiDef)) { entries.push(r.uiDef); changed = true; } + } + for (const c of CELESTIAL_FILES) { + if (!entries.includes(c)) { entries.push(c); changed = true; } + } + if (changed) { + defs.ui_defs = entries; + writeFileSync(defsPath, JSON.stringify(defs, null, 2) + "\n"); + console.log(" ✓ _ui_defs.json patched"); + } + } +} + +export const CELESTIAL_FILES = [ + "ui/celestial/celestial_base.json", + "ui/celestial/solar_system_map.json", + "ui/celestial/planet_views.json", + "ui/celestial/station_recipe_panel.json", + "ui/celestial/station_list_panel.json", +]; + +export function verifyCelestialFiles(rootDir = "."): { ok: boolean; errors: string[] } { + const errors: string[] = []; + const celestialSubFiles = [ + "celestial_base", + "solar_system_map", + "planet_views", + "station_recipe_panel", + "station_list_panel" + ]; + for (const name of celestialSubFiles) { + const fullPath = join(rootDir, "RP/ui/celestial", `${name}.json`); + if (!existsSync(fullPath)) { + errors.push(`Missing celestial file: ${fullPath}`); + } else { + try { + const content = readFileSync(fullPath, "utf-8"); + JSON.parse(content); + console.log(` ✓ celestial/${name}.json`); + } catch (e: any) { + errors.push(`Invalid JSON in ${fullPath}: ${e.message}`); + } + } + } + const defsPath = join(rootDir, "RP/ui/_ui_defs.json"); + if (existsSync(defsPath)) { + try { + const defs = JSON.parse(readFileSync(defsPath, "utf-8")); + const entries: string[] = defs.ui_defs ?? []; + for (const f of CELESTIAL_FILES) { + if (!entries.includes(f)) { + errors.push(`_ui_defs.json missing entry: ${f}`); + } + } + } catch (e: any) { + errors.push(`Invalid _ui_defs.json: ${e.message}`); + } + } + return { ok: errors.length === 0, errors }; +} + +// ================================================================ +// ALL MACHINES — written like Java GUI classes +// ================================================================ +async function defineAll(): Promise { + const reg = new MachineRegistry(); + let m: GuiMachine; + + (await import("./machines/chromatic_applicator")).register(reg); + (await import("./machines/short_range_telepad")).register(reg); + (await import("./machines/launch_controller")).register(reg); + (await import("./machines/advanced_launch_controller")).register(reg); + (await import("./machines/solar_array_controller")).register(reg); + + // ── Coal Generator (GuiCoalGenerator, ySize=166) ─────────── + m = reg.add(gui("coal_generator", "Coal Generator")); + m.drawTitle(0, 5, { anchor: "top_middle" }); + m.slot(-50, 33, { name: "coal_input", ghost: "coal", anchor: "top_middle" }); + m.drawCraftingArrow(-20, 33, { anchor: "top_middle" }); + m.drawStatusText(85, 33, { name: "heat_and_power" }); + + // ── Electric Furnace (GuiElectricFurnace, ySize=157) ─────── + m = reg.add(gui("electric_furnace", "Electric Furnace", 157)); + m.drawTitle(0, 4, { anchor: "top_middle" }); + m.slot(54, 23, { name: "input" }); + m.slot(7, 46, { name: "battery_slot", ghost: "power" }); + m.slot(108, 23, { name: "output" }); + m.drawEnergyBar(39, 49); + m.drawProgressBar(77, 23, "electric_furnace"); + m.drawStatusText(98, 49); + + // ── Electric Arc Furnace (Tier 2/Double output) ──────────── + m = reg.add(gui("electric_arc_furnace", "Electric Arc Furnace", 157)); + m.drawTitle(0, 4, { anchor: "top_middle" }); + m.slot(54, 23, { name: "input" }); + m.slot(7, 46, { name: "battery_slot", ghost: "power" }); + m.slot(108, 23, { name: "output1" }); + m.slot(130, 23, { name: "output2" }); // second output slot offset to the right + m.drawEnergyBar(39, 49); + m.drawProgressBar(77, 23, "electric_furnace"); + m.drawStatusText(98, 49); + + // ── Compressor (GuiIngotCompressor, ySize=192) ───────────── + m = reg.add(gui("compressor", "Compressor", 192)); + m.drawTitle(10, 5); + m.slotGrid(18, 17); + m.slot(54, 74, { name: "fuel_slot", ghost: "coal" }); + m.drawString("Fuel:", 27, 79, { name: "fuel_text", layer: 2 }); + m.slot(137, 37, { name: "output_slot" }); + m.drawBurnTime(81, 28); // UI slot 11 + m.drawProgressBar(77, 28, "compressor"); // UI slot 12 + m.drawStatusText(97, 70); // UI slot 13 + + // ── Electric Compressor (GuiElectricIngotCompressor, ySize=199) ─ + m = reg.add(gui("electric_compressor", "Electric Compressor", 199)); + m.drawTitle(10, 5); + m.slotGrid(18, 17); + m.slot(54, 74, { name: "battery_slot", ghost: "power" }); + m.slot(137, 28, { name: "output1" }); + m.slot(137, 46, { name: "output2" }); + m.drawEnergyBar(17, 95); + m.drawProgressBarRef(77, 28, "compressor.progress_bar"); + m.drawStatusText(78, 75); + + // ── Advanced Compressor (Tier 2/Faster) ──────────────────── + m = reg.add(gui("advanced_compressor", "Advanced Compressor", 199)); + m.drawTitle(10, 5); + m.slotGrid(18, 17); + m.slot(54, 74, { name: "battery_slot", ghost: "power" }); + m.slot(137, 28, { name: "output1" }); + m.slot(137, 46, { name: "output2" }); + m.drawEnergyBar(17, 95); + m.drawProgressBarRef(77, 28, "compressor.progress_bar"); + m.drawStatusText(78, 75); + + // ── Circuit Fabricator (GuiCircuitFabricator, ySize=192) ─── + m = reg.add(gui("circuit_fabricator", "Circuit Fabricator", 192)); + m.drawTitle(10, 5); + m.drawImage(`${TEX}/circuit_fabricator_background`, 14, 16, 155, 87); + m.slot(14, 16, { name: "diamond_input", ghost: "diamond" }); + m.slot(73, 45, { name: "silicon_input1", ghost: "raw_silicon" }); + m.slot(73, 63, { name: "silicon_input2", ghost: "raw_silicon" }); + m.slot(121, 45, { name: "redstone_input", ghost: "redstone" }); + m.slot(144, 19, { name: "input_slot" }); + m.slot(5, 68, { name: "battery_slot", ghost: "power" }); + m.slot(151, 85, { name: "output_slot" }); + m.drawEnergyBar(17, 88); + m.drawProgressBar(87, 19, "circuit_fabricator"); + m.drawStatusText(92, 80); + + // ── Energy Storage (Module + Cluster variants) ───────────── + const es = reg.add(guiParameterized("energy_storage", "Energy Storage")); + es.addVariant("module_interface", { title: "Energy Storage Module", maxPower: "Max Output: 300 gJ/t" }); + es.addVariant("cluster_interface", { title: "Energy Storage Cluster", maxPower: "Max Output: 1,800 gJ/t" }); + es.drawTitle(0, 5, { text: "$title", anchor: "top_middle" }); + es.slot(32, 23, { name: "output_battery", ghost: "power" }); + es.slot(32, 47, { name: "input_battery", ghost: "power" }); + es.drawCraftingArrow(76, 25, { name: "output_arrow", flip: true }); + es.drawCraftingArrow(54, 48, { name: "input_arrow" }); + es.drawStatusText(88, 25, { name: "stored_energy" }); + es.drawCapacityBar(88, 51); + es.drawString("$maxPower", -10, 64, { name: "maxPower", anchor: "top_right" }); + + // ── Refinery (GuiRefinery, ySize=168) ────────────────────── + m = reg.add(gui("refinery", "Refinery", 168)); + m.hideCloseButton(); + m.closeButton(-22, 2); + m.drawTitle(0, 10, { anchor: "top_middle" }); + m.slot(6, 6, { name: "input" }); + m.slot(37, 50, { name: "battery", ghost: "power" }); + m.slot(-6, 6, { name: "output", anchor: "top_right" }); + m.drawEnergyBar(62, 16); + m.drawFluidTank(6, 27, "oil"); + m.drawFluidTank(-6, 27, "fuel", { anchor: "top_right" }); + m.drawStatusText(60, 50); + m.addButton(49, 28); + + // ── Fuel Loader (GuiFuelLoader, ySize=168) ───────────────── + m = reg.add(gui("fuel_loader", "Fuel Loader", 168)); + m.drawTitle(0, 5, { anchor: "top_middle" }); + m.slot(6, 6, { name: "input" }); + m.slot(50, 49, { name: "battery", ghost: "power" }); + m.drawEnergyBar(112, 60); + m.drawFluidTank(6, 27, "fuel"); + m.drawStatusText(28, 17); + m.addButton(90, 36); + + // ── Gas Liquefier ────────────────────────────────────────── + m = reg.add(gui("gas_liquefier", "Gas Liquefier", 168)); + m.drawTitle(40, 5); + m.slot(6, 6, { name: "gas_input" }); + m.slot(33, 49, { name: "battery_slot", ghost: "power" }); + m.slot(131, 6, { name: "liquid_output" }); + m.drawDynamicFluidTank(6, 27, { name: "gas_tank" }); + m.drawDynamicFluidTank(131, 27, { name: "liquid_tank" }); + m.drawEnergyBar(41, 16); + m.drawStatusText(60, 50); + m.addButton(39, 28); + + // ── Oxygen Collector (GuiOxygenCollector, ySize=180) ─────── + m = reg.add(gui("oxygen_collector", "Oxygen Collector", 180)); + m.drawTitle(10, 4); + m.drawLine(78, 18, 1, 24); + m.drawString("Out:", 3.5, -64, { name: "out" }); + m.drawString("In:", 6, -51, { name: "in" }); + m.slot(32, 23.2, { name: "battery_slot", ghost: "power" }); + m.drawEnergyBar(53, -51); + m.drawOxygenBar(53, -64); + m.drawStatusText(0, 45, { anchor: "top_middle" }); + m.drawStatusText(0, 55, { name: "collecting", anchor: "top_middle" }); + + // ── Oxygen Compressor (GuiOxygenCompressor, ySize=180) ───── + m = reg.add(gui("oxygen_compressor", "Oxygen Compressor", 180)); + m.drawTitle(10, 4); + m.drawLine(78, 18, 1, 24); + m.drawString("In:", 6, -64, { name: "in_2" }); + m.drawString("In:", 6, -51, { name: "in" }); + m.slot(18.2, 23.2, { name: "canister_slot", ghost: "o2" }); + m.slot(48, 23.2, { name: "battery_slot", ghost: "power" }); + m.slot(53, -14, { name: "tank_slot" }); + m.drawEnergyBar(53, -51); + m.drawOxygenBar(53, -64); + m.drawStatusText(0, 45, { anchor: "top_middle" }); + m.drawString("Oxygen Use: 40/s", 0, 55, { name: "oxygen_using", anchor: "top_middle" }); + + // ── Oxygen Decompressor (GuiOxygenDecompressor, ySize=180) ─ + m = reg.add(gui("oxygen_decompressor", "Oxygen Decompressor", 180)); + m.drawTitle(10, 4); + m.drawLine(78, 18, 1, 24); + m.drawString("In:", 6, -64, { name: "in" }); + m.drawString("Out:", 3.5, -51, { name: "out" }); + m.slot(32, 23.2, { name: "battery_slot", ghost: "power" }); + m.slot(53, -14, { name: "tank_slot" }); + m.drawEnergyBar(53, -51); + m.drawOxygenBar(53, -64); + m.drawStatusText(0, 45, { anchor: "top_middle" }); + m.drawString("Max Output: 2000/s", 0, 55, { name: "oxygen_using", anchor: "top_middle" }); + + // ── Oxygen Distributor (GuiOxygenDistributor, ySize=181) ─── + m = reg.add(gui("oxygen_distributor", "Oxygen Distributor", 181)); + m.drawTitle(10, 4); + m.drawLine(78, 18, 1, 24); + m.drawString("In:", 6, 19, { name: "in_2", anchor: "top_middle" }); + m.drawString("In:", 6, 32, { name: "in", anchor: "top_middle" }); + m.slot(16, 21, { name: "oxygen_slot", ghost: "o2" }); + m.slot(46, 21, { name: "battery_slot", ghost: "power" }); + m.drawOxygenBar(112, 19); + m.drawEnergyBar(112, 32); + m.drawStatusText(0, 45, { anchor: "top_middle" }); + m.drawString("Oxygen Use: 160/s", 0, 55, { name: "oxygen_using", anchor: "top_middle" }); + m.addCheckbox(85, 82, { name: "bubble_button" }); + m.drawString("Bubble Visible", 101, 85, { name: "bubble_text" }); + + // ── Oxygen Storage (GuiOxygenStorageModule, ySize=166) ───── + m = reg.add(gui("oxygen_storage", "Oxygen Storage Module")); + m.drawTitle(0, 6, { anchor: "top_middle" }); + m.slot(16, 24, { name: "canister_slot", ghost: "o2" }); + m.drawStatusText(0, 33, { name: "stored_oxygen", anchor: "top_middle" }); + m.drawCapacityBar(0, 56, { color: [0.29, 0.63, 0.89], anchor: "top_middle" }); + m.drawString("Max Output: 10000/s", 0, 64, { name: "max_output", anchor: "top_middle" }); + + // ── Solar Panel (GuiSolar, ySize=201) ────────────────────── + m = reg.add(gui("solar_panel", "Basic Solar Panel", 201)); + m.drawTitle(0, 5, { anchor: "top_middle" }); + m.slot(-7, 82, { name: "battery_slot", ghost: "power", anchor: "top_right" }); + m.drawEnergyBar(96, 24); + m.drawSolarIcon(47, 20); + m.drawStatusText(0, 49, { name: "generating", anchor: "top_middle" }); + m.drawStatusText(0, 59, { anchor: "top_middle" }); + m.drawStatusText(0, 69, { name: "boost", anchor: "top_middle" }); + m.addButton(0, 82, { anchor: "top_middle" }); + + // ── Water Electrolyzer (GuiWaterElectrolyzer, ySize=168) ─── + (await import("./machines/water_electrolyzer")).register(reg); + + // ── Methane Synthesizer ─────────── + (await import("./machines/methane_synthesizer")).register(reg); + + // ── Cargo Loader ─────────── + (await import("./machines/cargo_loader")).register(reg); + + // ── Cargo Unloader ─────────── + (await import("./machines/cargo_unloader")).register(reg); + + // ── Deconstructor ─────────── + (await import("./machines/deconstructor")).register(reg); + + // ── Oxygen Sealer ─────────── + (await import("./machines/oxygen_sealer")).register(reg); + + // ── Astro Miner Dock ─────────── + (await import("./machines/astro_miner_dock")).register(reg); + + // ── Terraformer ─────────── + (await import("./machines/terraformer")).register(reg); + + // ── Geothermal Generator ─────────── + (await import("./machines/geothermal_generator")).register(reg); + + m = reg.add(gui("airlock_controller", "Airlock Controller", 139, 181)); + m["_showBottomHalf"] = false; + m["_showHotbar"] = false; + m.drawTitle(0, 5, { anchor: "top_middle" }); + m.addButton(10, 20, { name: "redstone", width: 161, height: 18 }); + m.addButton(10, 40, { name: "distance", width: 161, height: 18 }); + m.addButton(10, 60, { name: "distance_value", width: 161, height: 18 }); + m.addButton(10, 80, { name: "owner_only", width: 161, height: 18 }); + m.addButton(10, 100, { name: "invert", width: 78, height: 18 }); + m.addButton(93, 100, { name: "horizontal", width: 78, height: 18 }); + + return reg; +} + +// ================================================================ +// CLI (only runs when executed directly: npx tsx ui_datagen.ts) +// ================================================================ + +const isMain = process.argv[1]?.replace(/\\/g, "/").endsWith("ui_datagen.ts"); + +if (isMain) { + (async () => { + const args = process.argv.slice(2); + const flags = { + verify: args.includes("--verify"), + dryRun: args.includes("--dry-run"), + celestial: args.includes("--celestial"), + machine: args.includes("--machine") ? args[args.indexOf("--machine") + 1] : null, + }; + + if (flags.celestial) { + console.log("Verifying celestial selection UI files:"); + const celRes = verifyCelestialFiles(); + if (celRes.ok) { + console.log(" ✓ All celestial selection files verified and registered."); + process.exit(0); + } else { + for (const err of celRes.errors) console.error(` ✗ ${err}`); + process.exit(1); + } + } + + const reg = await defineAll(); + + if (flags.machine) { + reg.machines = reg.machines.filter((m) => m.name === flags.machine); + if (!reg.machines.length) { console.error(`Unknown machine: ${flags.machine}`); process.exit(1); } + } + + if (flags.verify) { + const results = reg.generate({ write: false, patch: false }); + let ok = true; + for (const r of results) { + if (existsSync(r.path)) { + const existing = JSON.parse(readFileSync(r.path, "utf-8")); + if (JSON.stringify(existing) === JSON.stringify(r.json)) { + console.log(` ✓ ${r.name}`); + } else { + ok = false; + console.log(` ✗ ${r.name}`); + const e = JSON.stringify(existing, null, "\t"); + const g = JSON.stringify(r.json, null, "\t"); + const eLines = e.split("\n"), gLines = g.split("\n"); + const maxLen = Math.max(eLines.length, gLines.length); + for (let i = 0; i < maxLen; i++) { + if (eLines[i] !== gLines[i]) { + console.log(` L${i + 1}:`); + if (eLines[i]) console.log(` - ${eLines[i]}`); + if (gLines[i]) console.log(` + ${gLines[i]}`); + } + } + } + } else { + console.log(` ? ${r.name}: no existing file`); + } + } + console.log("\nVerifying celestial selection UI files:"); + const celRes = verifyCelestialFiles(); + if (!celRes.ok) { + ok = false; + for (const err of celRes.errors) console.error(` ✗ ${err}`); + } + process.exit(ok ? 0 : 1); + } else if (flags.dryRun) { + const results = reg.generate({ write: false, patch: false }); + for (const r of results) { + console.log(`\n${"=".repeat(60)}\n${r.path}\n${"=".repeat(60)}`); + console.log(JSON.stringify(r.json, null, "\t")); + } + } else { + reg.generate(); + } + })(); +} + +// ================================================================ +// Exports for use as a library +// ================================================================ + +export { GuiParameterized, guiParameterized, defineAll, BARS, barHorizontal, barVerticalFlame, barColored }; + +